diff --git a/.github/workflows/Nuitka-Linux.yml b/.github/workflows/Nuitka-Linux.yml
deleted file mode 100644
index 632524e..0000000
--- a/.github/workflows/Nuitka-Linux.yml
+++ /dev/null
@@ -1,63 +0,0 @@
-name: Nuitka - Linux
-
-on:
- workflow_dispatch:
-
-jobs:
- linux-nuitka:
- runs-on: ubuntu-20.04
- steps:
- - uses: actions/checkout@v3
-
- - name: Use Python 3.9
- uses: actions/setup-python@v4
- with:
- python-version: '3.9'
-
- - name: Install dependencies
- run: pip install -r ./requirements/requirements.txt
-
- - name: Install Nuitka
- run: |
- pip install Nuitka ordered-set zstandard
-
- - name: Building Artemis
- run: |
- MOD_PATH=$(python -c 'import site; print(site.getsitepackages()[0])')
- cd src
-
- python -m nuitka --standalone --onefile --assume-yes-for-downloads --follow-imports --enable-plugin=pyqt5 --enable-plugin=numpy --include-data-dir=themes=themes --include-data-dir=default_pics=default_pics --include-data-dir=$MOD_PATH/qtawesome=qtawesome --include-data-files=artemis.ui=artemis.ui --include-data-files=cacert.pem=cacert.pem --include-data-files=clickable_progress_bar.py=clickable_progress_bar.py --include-data-files=default_imgs.qrc=default_imgs.qrc --include-data-files=default_imgs_rc.py=default_imgs_rc.py --include-data-files=double_text_button.py=double_text_button.py --include-data-files=download_db_window.ui=download_db_window.ui --include-data-files=fixed_aspect_ratio_label.py=fixed_aspect_ratio_label.py --include-data-files=fixed_aspect_ratio_widget.py=fixed_aspect_ratio_widget.py --linux-onefile-icon=../spec_files/Linux/artemis3.svg --show-modules --disable-console artemis.py
- python -m nuitka --standalone --onefile --assume-yes-for-downloads --follow-imports --enable-plugin=pyqt5 --include-data-dir=$MOD_PATH/qtawesome=qtawesome --include-data-files=default_imgs_rc.py=default_imgs_rc.py --linux-onefile-icon=../spec_files/Linux/artemis3.svg --show-modules --disable-console updater.py
-
- chmod 755 artemis.bin
- chmod 755 updater.bin
-
- mkdir Artemis
- mv artemis.bin Artemis/Artemis
- mv themes Artemis/themes
- mv artemis.ui Artemis/artemis.ui
- mv cacert.pem Artemis/cacert.pem
- mv download_db_window.ui Artemis/download_db_window.ui
- mv updater.bin Artemis/_ArtemisUpdater
- cp ../spec_files/Linux/create_shortcut.sh Artemis/create_shortcut.sh
- cp ../spec_files/Linux/artemis3.svg Artemis/artemis3.svg
-
- echo "Create complete archive"
- tar -czvf ArtemisWebDownlaod_linux.tar.gz Artemis
-
- echo "Create single archives"
- cd Artemis
- tar -czvf Artemis_linux.tar.gz Artemis
- tar -czvf _ArtemisUpdater_linux.tar.gz _ArtemisUpdater
-
- echo "Get size and sha256"
- python ../../spec_files/__get_hash_code.py Artemis_linux.tar.gz _ArtemisUpdater_linux.tar.gz ../ArtemisWebDownlaod_linux.tar.gz > checksum.txt
-
- - uses: actions/upload-artifact@v3
- with:
- name: Artemis_Linux
- path: |
- ./src/Artemis/Artemis_linux.tar.gz
- ./src/Artemis/_ArtemisUpdater_linux.tar.gz
- ./src/ArtemisWebDownlaod_linux.tar.gz
- ./src/Artemis/checksum.txt
diff --git a/.github/workflows/Nuitka-Windows.yml b/.github/workflows/Nuitka-Windows.yml
deleted file mode 100644
index dd61fcf..0000000
--- a/.github/workflows/Nuitka-Windows.yml
+++ /dev/null
@@ -1,81 +0,0 @@
-name: Nuitka - Windows
-
-on:
- workflow_dispatch:
- inputs:
- artemis_version:
- description: 'Version'
- required: true
- default: '3.0.0'
- type: string
-
-jobs:
- windows-nuitka:
- runs-on: windows-2022
- steps:
- - uses: actions/checkout@v3
-
- - name: Use Python 3.9
- uses: actions/setup-python@v4
- with:
- python-version: '3.9'
-
- - name: Install dependencies
- run: pip install -r ./requirements/requirements.txt
-
- - name: Install Nuitka
- run: |
- pip install Nuitka ordered-set zstandard
-
- - name: Building Artemis
- run: |
- $MOD_PATH = python -c 'import site; print(site.getsitepackages()[1])'
- CD src
- MKDIR Artemis
-
- python -m nuitka --standalone --onefile --disable-console --assume-yes-for-downloads --follow-imports --include-package-data=pygame --enable-plugin=pyqt5 --include-data-dir=themes=themes --include-data-dir=default_pics=default_pics --include-data-dir=$MOD_PATH\qtawesome=qtawesome --include-data-files=artemis.ui=artemis.ui --include-data-files=cacert.pem=cacert.pem --include-data-files=clickable_progress_bar.py=clickable_progress_bar.py --include-data-files=default_imgs.qrc=default_imgs.qrc --include-data-files=default_imgs_rc.py=default_imgs_rc.py --include-data-files=double_text_button.py=double_text_button.py --include-data-files=download_db_window.ui=download_db_window.ui --include-data-files=fixed_aspect_ratio_label.py=fixed_aspect_ratio_label.py --include-data-files=fixed_aspect_ratio_widget.py=fixed_aspect_ratio_widget.py --windows-icon-from-ico=default_pics\Artemis3.ico --show-modules --windows-company-name=Aresvalley.com --windows-product-name=Artemis --windows-file-version=${{github.event.inputs.artemis_version}} --windows-product-version=${{github.event.inputs.artemis_version}} --windows-file-description=Artemis artemis.py
- python -m nuitka --standalone --onefile --disable-console --assume-yes-for-downloads --follow-imports --enable-plugin=pyqt5 --include-data-dir=$MOD_PATH\qtawesome=qtawesome --include-data-files=default_imgs_rc.py=default_imgs_rc.py --windows-icon-from-ico=default_pics\Artemis3.ico --show-modules --windows-company-name=Aresvalley.com --windows-product-name=Artemis --windows-file-version=${{github.event.inputs.artemis_version}} --windows-product-version=${{github.event.inputs.artemis_version}} --windows-file-description=Artemis updater.py
-
- MOVE artemis.exe Artemis.exe
- ECHO "Compress files themes+Artemis.exe -> Artemis.zip"
- $compress = @{
- Path = ".\Artemis.exe", ".\themes"
- CompressionLevel = "Optimal"
- DestinationPath = ".\Artemis.zip"
- }
- Compress-Archive @compress
-
- MOVE updater.exe _ArtemisUpdater.exe
- ECHO "Compress _ArtemisUpdater.exe -> ArtemisUpdater.zip"
- $compress = @{
- Path = ".\_ArtemisUpdater.exe"
- CompressionLevel = "Optimal"
- DestinationPath = ".\ArtemisUpdater.zip"
- }
- Compress-Archive @compress
-
- MOVE Artemis.exe Artemis\Artemis.exe
- MOVE _ArtemisUpdater.exe Artemis\_ArtemisUpdater.exe
- MOVE themes Artemis\themes
- MOVE artemis.ui Artemis\artemis.ui
- MOVE cacert.pem Artemis\cacert.pem
- MOVE download_db_window.ui Artemis\download_db_window.ui
-
- ECHO "Compress all files for website bundle"
- $compress = @{
- Path = "Artemis"
- CompressionLevel = "Optimal"
- DestinationPath = ".\Artemis_v${{github.event.inputs.artemis_version}}_x64.zip"
- }
- Compress-Archive @compress
-
- python ..\spec_files\__get_hash_code.py Artemis.zip ArtemisUpdater.zip Artemis_v${{github.event.inputs.artemis_version}}_x64.zip > checksum_SHA256.txt
-
- - uses: actions/upload-artifact@v3
- with:
- name: Artemis_v${{github.event.inputs.artemis_version}}_win_x64_Nuitka
- path: |
- .\src\Artemis.zip
- .\src\ArtemisUpdater.zip
- .\src\Artemis_v${{github.event.inputs.artemis_version}}_x64.zip
- .\src\checksum_SHA256.txt
diff --git a/.github/workflows/Nuitka-macOS.yml b/.github/workflows/Nuitka-macOS.yml
deleted file mode 100644
index bf64b52..0000000
--- a/.github/workflows/Nuitka-macOS.yml
+++ /dev/null
@@ -1,34 +0,0 @@
-name: Nuitka - MacOS
-
-on:
- workflow_dispatch:
-
-jobs:
- macos-nuitka:
- runs-on: macos-11
- steps:
- - uses: actions/checkout@v3
-
- - name: Use Python 3.9
- uses: actions/setup-python@v4
- with:
- python-version: '3.9'
-
- - name: Install dependencies
- run: pip install -r ./requirements/requirements.txt
-
- - name: Install PyInstaller
- run: |
- pip install Nuitka ordered-set zstandard imageio
-
- - name: Build Artemis
- run: |
- MOD_PATH=$(python -c 'import site; print(site.getsitepackages()[0])')
- cd src
- python -m nuitka --standalone --macos-create-app-bundle --macos-app-icon=default_pics/Artemis3.500px.png --assume-yes-for-downloads --follow-imports --enable-plugin=pyqt5 --enable-plugin=numpy --include-data-dir=themes=themes --include-data-dir=default_pics=default_pics --include-data-dir=$MOD_PATH/qtawesome=qtawesome --include-data-files=artemis.ui=artemis.ui --include-data-files=cacert.pem=cacert.pem --include-data-files=clickable_progress_bar.py=clickable_progress_bar.py --include-data-files=default_imgs.qrc=default_imgs.qrc --include-data-files=default_imgs_rc.py=default_imgs_rc.py --include-data-files=double_text_button.py=double_text_button.py --include-data-files=download_db_window.ui=download_db_window.ui --include-data-files=fixed_aspect_ratio_label.py=fixed_aspect_ratio_label.py --include-data-files=fixed_aspect_ratio_widget.py=fixed_aspect_ratio_widget.py --show-modules --macos-signed-app-name=eu.aresvalley.artemis --macos-app-name=Artemis --macos-app-version=3.2.4 artemis.py
-
- - uses: actions/upload-artifact@v3
- with:
- name: Artemis_MacOS
- path: |
- ./src/artemis.app
diff --git a/.github/workflows/PyInstaller-Linux.yml b/.github/workflows/PyInstaller-Linux.yml
deleted file mode 100644
index 292dacf..0000000
--- a/.github/workflows/PyInstaller-Linux.yml
+++ /dev/null
@@ -1,64 +0,0 @@
-name: PyInstaller - Linux
-
-on:
- workflow_dispatch:
-
-jobs:
- linux-pyinstaller:
- runs-on: ubuntu-20.04
- steps:
- - uses: actions/checkout@v3
-
- - name: Use Python 3.9
- uses: actions/setup-python@v4
- with:
- python-version: '3.9'
-
- - name: Install dependencies
- run: pip install -r ./requirements/requirements.txt
-
- - name: Install PyInstaller
- run: |
- pip install pyinstaller
-
- - name: Build Artemis main executable
- run: |
- cd ./spec_files/Linux
- mkdir output
- mkdir output/artemis
- pyinstaller Artemis.spec
- mv -v ./dist/Artemis ./output/Artemis
- rm -rfv dist build
-
- pyinstaller updater.spec
- mv -v ./dist/_ArtemisUpdater ./output/_ArtemisUpdater
- rm -rfv dist build
-
- echo "Create single archives"
- cd output
- cp -r ../../../src/themes artemis/themes
- rm -f artemis/themes/__current_theme
- cp Artemis artemis/Artemis
- cp _ArtemisUpdater artemis/_ArtemisUpdater
-
- tar -czvf Artemis_linux.tar.gz Artemis -C artemis themes
- tar -czvf _ArtemisUpdater_linux.tar.gz ./_ArtemisUpdater
-
- echo "Create full archive for website"
-
- cp ../artemis3.svg artemis
- cp ../create_shortcut.sh artemis
-
- tar -czvf ArtemisWebDownlaod_linux.tar.gz artemis
-
- echo "Get size and sha256"
- python ../../__get_hash_code.py Artemis_linux.tar.gz _ArtemisUpdater_linux.tar.gz ArtemisWebDownlaod_linux.tar.gz > checksum.txt
-
- - uses: actions/upload-artifact@v3
- with:
- name: Artemis_Linux
- path: |
- ./spec_files/Linux/output/Artemis_linux.tar.gz
- ./spec_files/Linux/output/_ArtemisUpdater_linux.tar.gz
- ./spec_files/Linux/output/ArtemisWebDownlaod_linux.tar.gz
- ./spec_files/Linux/output/checksum.txt
diff --git a/.github/workflows/PyInstaller-Windows.yml b/.github/workflows/PyInstaller-Windows.yml
deleted file mode 100644
index b506673..0000000
--- a/.github/workflows/PyInstaller-Windows.yml
+++ /dev/null
@@ -1,85 +0,0 @@
-name: PyInstaller - Windows
-
-on:
- workflow_dispatch:
- inputs:
- artemis_version:
- description: 'Version'
- required: true
- default: '3.0.0'
- type: string
-
-jobs:
- windows-pyinstaller:
- runs-on: windows-2022
- steps:
- - uses: actions/checkout@v3
-
- - name: Use Python 3.9
- uses: actions/setup-python@v4
- with:
- python-version: '3.9'
-
- - name: Install dependencies
- run: pip install -r ./requirements/requirements.txt
-
- - name: Install PyInstaller
- run: |
- pip install pyinstaller
-
- - name: Build Artemis main executables
- run: |
- CD spec_files\Windows
-
- ECHO "Building Artemis executable..."
- MKDIR output
- pyinstaller artemis.spec
- MOVE dist\Artemis.exe .\output\Artemis.exe
- RMDIR -recurse -force dist
- RMDIR -recurse -force build
-
- ECHO "Building updater..."
- pyinstaller updater.spec
- MOVE dist\_ArtemisUpdater.exe .\output\_ArtemisUpdater.exe
- RMDIR -recurse -force dist
- RMDIR -recurse -force build
-
- CD output
- MKDIR Artemis
- XCOPY /y Artemis.exe Artemis\
- XCOPY /e /k /y ..\..\..\src\themes Artemis\themes\
- XCOPY /y _ArtemisUpdater.exe Artemis\
-
- ECHO "Compress files themes+Artemis.exe -> Artemis.zip"
- $compress = @{
- Path = ".\Artemis.exe", "..\..\..\src\themes"
- CompressionLevel = "Optimal"
- DestinationPath = ".\Artemis.zip"
- }
- Compress-Archive @compress
-
- $compress = @{
- Path = ".\_ArtemisUpdater.exe"
- CompressionLevel = "Optimal"
- DestinationPath = ".\ArtemisUpdater.zip"
- }
- Compress-Archive @compress
-
- ECHO "Compress all files for website download"
- $compress = @{
- Path = "Artemis"
- CompressionLevel = "Optimal"
- DestinationPath = ".\Artemis_v${{github.event.inputs.artemis_version}}_x64.zip"
- }
- Compress-Archive @compress
-
- python ..\..\__get_hash_code.py Artemis.zip ArtemisUpdater.zip Artemis_v${{github.event.inputs.artemis_version}}_x64.zip > checksum_SHA256.txt
-
- - uses: actions/upload-artifact@v3
- with:
- name: Artemis_v${{github.event.inputs.artemis_version}}_win_x64_PyInstaller
- path: |
- .\spec_files\Windows\output\Artemis.zip
- .\spec_files\Windows\output\ArtemisUpdater.zip
- .\spec_files\Windows\output\Artemis_v${{github.event.inputs.artemis_version}}_x64.zip
- .\spec_files\Windows\output\checksum_SHA256.txt
diff --git a/.github/workflows/PyInstaller-macOS.yml b/.github/workflows/PyInstaller-macOS.yml
deleted file mode 100644
index 39f7bbb..0000000
--- a/.github/workflows/PyInstaller-macOS.yml
+++ /dev/null
@@ -1,34 +0,0 @@
-name: PyInstaller - MacOS
-
-on:
- workflow_dispatch:
-
-jobs:
- macos-pyinstaller:
- runs-on: macos-11
- steps:
- - uses: actions/checkout@v3
-
- - name: Use Python 3.9
- uses: actions/setup-python@v4
- with:
- python-version: '3.9'
-
- - name: Install dependencies
- run: pip install -r ./requirements/requirements.txt
-
- - name: Install PyInstaller
- run: |
- pip install pyinstaller
-
- - name: Build Artemis main executable
- run: |
- cd ./spec_files/macOS
- pyinstaller Artemis.spec
- ls -lart
-
- - uses: actions/upload-artifact@v3
- with:
- name: Artemis_MacOS
- path: |
- ./spec_files/macOS/dist
diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml
new file mode 100644
index 0000000..aaa50e2
--- /dev/null
+++ b/.github/workflows/linux.yml
@@ -0,0 +1,32 @@
+name: Nuitka - Linux
+
+on:
+ workflow_dispatch:
+ inputs:
+ artemis_version:
+ description: 'Version'
+ required: true
+ default: '4.0.0'
+ type: string
+
+jobs:
+ build-linux-x86_64:
+ runs-on: ubuntu-20.04
+ steps:
+ - name: Check out code
+ uses: actions/checkout@v4
+
+ - name: Setup python
+ uses: actions/setup-python@v5
+ with:
+ python-version: '3.11'
+
+ - name: Build and package
+ run: sh ./building/Linux/build_linux.sh
+ shell: bash
+
+ - name: Upload artifact
+ uses: actions/upload-artifact@v4
+ with:
+ name: Artemis-Linux-x86_64-${{github.event.inputs.artemis_version}}
+ path: ./app.dist/
diff --git a/.github/workflows/macOS.yml b/.github/workflows/macOS.yml
new file mode 100644
index 0000000..d73b52b
--- /dev/null
+++ b/.github/workflows/macOS.yml
@@ -0,0 +1,32 @@
+name: Nuitka - macOS
+
+on:
+ workflow_dispatch:
+ inputs:
+ artemis_version:
+ description: 'Version'
+ required: true
+ default: '4.0.0'
+ type: string
+
+jobs:
+ build-macos-x86_64:
+ runs-on: macos-11
+ steps:
+ - name: Check out code
+ uses: actions/checkout@v4
+
+ - name: Setup python
+ uses: actions/setup-python@v5
+ with:
+ python-version: '3.11'
+
+ - name: Build and package
+ run: sh ./building/macOS/build_macos.sh
+ shell: bash
+
+ - name: Upload artifact
+ uses: actions/upload-artifact@v4
+ with:
+ name: Artemis-macOS-x86_64-${{github.event.inputs.artemis_version}}
+ path: ./app.dist/
diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml
new file mode 100644
index 0000000..6602235
--- /dev/null
+++ b/.github/workflows/windows.yml
@@ -0,0 +1,35 @@
+name: Nuitka - Windows
+
+on:
+ workflow_dispatch:
+ inputs:
+ artemis_version:
+ description: 'Version'
+ required: true
+ default: '4.0.0'
+ type: string
+
+jobs:
+ build-windows-x86_64:
+ runs-on: windows-latest
+ steps:
+ - name: Check out code
+ uses: actions/checkout@v4
+
+ - name: Setup python
+ uses: actions/setup-python@v5
+ with:
+ python-version: '3.11'
+
+ - name: Build and package
+ run: ./building/Windows/build_windows.ps1
+ shell: powershell
+
+ - name: Building installer (ISCC)
+ run: iscc ./building/Windows/windows_installer.iss
+
+ - name: Upload artifact
+ uses: actions/upload-artifact@v4
+ with:
+ name: Artemis-Windows-x86_64-${{github.event.inputs.artemis_version}}
+ path: ./building/artemis.exe
diff --git a/.gitignore b/.gitignore
index 4e9cd78..1544bde 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,11 +1,7 @@
-__PYCache__
-Data
-src/themes/__current_theme
-designer.bat
-launch.bat
+**/__pycache__/
.vscode/
-.code-workspace
-spec_files/**/output
-*.txt
-*.json
-info.log
+*.pyproject.user
+data/
+.flake8
+*.qtds
+artemis_rc.py
\ No newline at end of file
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 625efa6..41d1f41 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,7 +1,24 @@
# Changelog
-This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html) and the format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
-The first release is [3.0.0] because this is actually the third major version (completely rewritten) of the software.
+> [!NOTE]
+> This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html) and the format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
+
+## [Unreleased] - 2024-05-28
+### Added
+- Database format has been changed from .csv to a proper relational DB (sqlite) which is much easier handled thanks to the native library shipped with python
+- Possibility to create an arbitrary number of new databases for storing new custom signals
+- Every signal allows an arbitrary number of parameters
+- All signal parameters (such as frequency, modulation, location, etc.) are now followed by a description
+- Databases can be exported/imported for easy sharing
+- Possibility to store and view all type of documents related to a signal entry
+- Filtration process is now much more efficient due to usage of SQL queries
+
+### Changed
+- Updated GUI libray from PyQt5 to PySide6. Artemis 4 now relies on the QtQuick framework.
+- Undefined value for frequency and bandwidth is now deprecated.
+- Drastically reduced the number of third party libraries
+- The signals filtering page has been simplified to be more immediate and user friendly
+- Space weather page now relies on Poseidon daemon (hosted on aresvalley.com)
## [3.2.4] - 2022-09-30
### Fixed
@@ -30,7 +47,6 @@ The first release is [3.0.0] because this is actually the third major version (c
## [3.2.0] - 2019-12-14
-
### Added
- The default font can be changed ([#14](https://github.com/AresValley/Artemis/pull/14)).
- Move `Themes` into `Settings`.
@@ -68,9 +84,12 @@ First release.
-[Unreleased]: https://github.com/AresValley/Artemis/compare/v3.2.1...HEAD
+[Unreleased]: https://github.com/AresValley/Artemis/compare/v3.2.4...HEAD
+[3.2.4]: https://github.com/AresValley/Artemis/compare/v3.2.1...v3.2.4
+[3.2.3]: https://github.com/AresValley/Artemis/compare/v3.2.2...v3.2.3
+[3.2.2]: https://github.com/AresValley/Artemis/compare/v3.2.1...v3.2.2
[3.2.1]: https://github.com/AresValley/Artemis/compare/v3.2.0...v3.2.1
[3.2.0]: https://github.com/AresValley/Artemis/compare/v3.1.0...v3.2.0
[3.1.0]: https://github.com/AresValley/Artemis/compare/v3.0.1...v3.1.0
[3.0.1]: https://github.com/AresValley/Artemis/compare/v3.0.0...v3.0.1
-[3.0.0]: https://github.com/AresValley/Artemis/releases/tag/v3.0.0
\ No newline at end of file
+[3.0.0]: https://github.com/AresValley/Artemis/releases/tag/v3.0.0
diff --git a/ENV_deploy/start_linux.sh b/ENV_deploy/start_linux.sh
new file mode 100644
index 0000000..3f36c8f
--- /dev/null
+++ b/ENV_deploy/start_linux.sh
@@ -0,0 +1,65 @@
+#!/bin/bash
+
+cd "$(dirname "${BASH_SOURCE[0]}")"
+
+if [[ "$(pwd)" =~ " " ]]; then echo This script relies on Miniconda which can not be silently installed under a path with spaces. && exit; fi
+
+OS_ARCH=$(uname -m)
+case "${OS_ARCH}" in
+ x86_64*) OS_ARCH="x86_64";;
+ arm64*) OS_ARCH="aarch64";;
+ *) echo "Unknown system architecture: $OS_ARCH! This script runs only on x86_64 or arm64" && exit
+esac
+
+# config
+INSTALL_DIR="$(pwd)/installer_files"
+CONDA_ROOT_PREFIX="$(pwd)/installer_files/conda"
+INSTALL_ENV_DIR="$(pwd)/installer_files/env"
+MINICONDA_DOWNLOAD_URL="https://repo.anaconda.com/miniconda/Miniconda3-py310_23.1.0-1-Linux-${OS_ARCH}.sh"
+conda_exists="F"
+
+# figure out whether git and conda needs to be installed
+if "$CONDA_ROOT_PREFIX/bin/conda" --version &>/dev/null; then conda_exists="T"; fi
+
+# (if necessary) install git and conda into a contained environment
+# download miniconda
+if [ "$conda_exists" == "F" ]; then
+ echo "Downloading Miniconda from $MINICONDA_DOWNLOAD_URL to $INSTALL_DIR/miniconda_installer.sh"
+
+ mkdir -p "$INSTALL_DIR"
+ curl -Lk "$MINICONDA_DOWNLOAD_URL" > "$INSTALL_DIR/miniconda_installer.sh"
+
+ chmod u+x "$INSTALL_DIR/miniconda_installer.sh"
+ bash "$INSTALL_DIR/miniconda_installer.sh" -b -p $CONDA_ROOT_PREFIX
+
+ # test the conda binary
+ echo "Miniconda version:"
+ "$CONDA_ROOT_PREFIX/bin/conda" --version
+fi
+
+# create the installer env
+if [ ! -e "$INSTALL_ENV_DIR" ]; then
+ "$CONDA_ROOT_PREFIX/bin/conda" create -y -k --prefix "$INSTALL_ENV_DIR" python=3.10
+fi
+
+# check if conda environment was actually created
+if [ ! -e "$INSTALL_ENV_DIR/bin/python" ]; then
+ echo "Conda environment is empty."
+ exit
+fi
+
+# activate installer env
+source "$CONDA_ROOT_PREFIX/etc/profile.d/conda.sh" # otherwise conda complains about 'shell not initialized' (needed when running in a script)
+conda activate "$INSTALL_ENV_DIR"
+
+if [ ! -e "./Artemis" ]; then
+ git clone https://github.com/AresValley/Artemis.git
+ pip install -r Artemis/requirements/requirements.txt --user
+fi
+
+# setup installer env
+cd ./Artemis/src/
+python artemis.py
+
+echo
+echo "Done!"
diff --git a/ENV_deploy/start_windows.bat b/ENV_deploy/start_windows.bat
new file mode 100644
index 0000000..23c1743
--- /dev/null
+++ b/ENV_deploy/start_windows.bat
@@ -0,0 +1,56 @@
+@echo off
+
+cd /D "%~dp0"
+
+echo "%CD%"| findstr /C:" " >nul && echo This script relies on Miniconda which can not be silently installed under a path with spaces. && goto end
+
+set PATH=%PATH%;%SystemRoot%\system32
+
+@rem config
+set INSTALL_DIR=%cd%\installer_files
+set CONDA_ROOT_PREFIX=%cd%\installer_files\conda
+set INSTALL_ENV_DIR=%cd%\installer_files\env
+set MINICONDA_DOWNLOAD_URL=https://repo.anaconda.com/miniconda/Miniconda3-py310_23.1.0-1-Windows-x86_64.exe
+set conda_exists=F
+
+@rem figure out whether git and conda needs to be installed
+call "%CONDA_ROOT_PREFIX%\_conda.exe" --version >nul 2>&1
+if "%ERRORLEVEL%" EQU "0" set conda_exists=T
+
+@rem (if necessary) install git and conda into a contained environment
+@rem download conda
+if "%conda_exists%" == "F" (
+ echo Downloading Miniconda from %MINICONDA_DOWNLOAD_URL% to %INSTALL_DIR%\miniconda_installer.exe
+
+ mkdir "%INSTALL_DIR%"
+ call curl -Lk "%MINICONDA_DOWNLOAD_URL%" > "%INSTALL_DIR%\miniconda_installer.exe" || ( echo. && echo Miniconda failed to download. && goto end )
+
+ echo Installing Miniconda to %CONDA_ROOT_PREFIX%
+ start /wait "" "%INSTALL_DIR%\miniconda_installer.exe" /InstallationType=JustMe /NoShortcuts=1 /AddToPath=0 /RegisterPython=0 /NoRegistry=1 /S /D=%CONDA_ROOT_PREFIX%
+
+ @rem test the conda binary
+ echo Miniconda version:
+ call "%CONDA_ROOT_PREFIX%\_conda.exe" --version || ( echo. && echo Miniconda not found. && goto end )
+)
+
+@rem create the installer env
+if not exist "%INSTALL_ENV_DIR%" (
+ echo Packages to install: %PACKAGES_TO_INSTALL%
+ call "%CONDA_ROOT_PREFIX%\_conda.exe" create --no-shortcuts -y -k --prefix "%INSTALL_ENV_DIR%" python=3.10 || ( echo. && echo Conda environment creation failed. && goto end )
+ call pip install PySide6==6.5.0 requests
+)
+
+@rem check if conda environment was actually created
+if not exist "%INSTALL_ENV_DIR%\python.exe" ( echo. && echo Conda environment is empty. && goto end )
+
+@rem activate installer env
+call "%CONDA_ROOT_PREFIX%\condabin\conda.bat" activate "%INSTALL_ENV_DIR%" || ( echo. && echo Miniconda hook not found. && goto end )
+
+@rem setup installer env
+call python app.py
+
+echo.
+echo Done!
+
+:end
+pause
diff --git a/README.md b/README.md
index 254f0f6..6bc573c 100644
--- a/README.md
+++ b/README.md
@@ -1,160 +1,27 @@
-
+
+\x17\xd8~\x0cP'\x8e\x98zr`\x9f\x97\xd7\ +s\xf4\xe8\xd1\xf4\xea\x9a\x7f\x90\xafg\xcf\x9e\xfd\xcb\xd7\ +U\xabV\x89\xea;\xbe\xb7\xb77\x0d\xfe\x06\xaf\x81\xd7\ +\xc2{\xaaS\xfe\x00\x8c\xce\x02\xe3\xff\x8f\xaf&33\ +\x93\xd5\xb5k\xd7\xbf\xfa\x0e~\xce\xca\xcab\x09\xe6\x08\ +\x0b\x5c\xcb\xac\x01\xf9\xcb_\xbdz5\xad|,\x9e>\ +}\xfa\xcfX\x84\x04>\xd3\xfe\x1b\xf2|\x1e\x18\x8f\xf4\ +J`X\xb9\xe45\x9c\xcf\xc0N\xfc\xd3\xc7\xc0\x16\xe5\ +\x8c\x1c9\x921b\xc4\x08\x06\xfc\x0c\xbf\x83\xbf\xc91\ +\xe7\xab\xa4\x7f\x9d\x9c\x9c\xe8\x14\x0a\xe5\xcf\xfbbbb\ +\xe8\xe5\xb2\x18~\x07~c\xd4\xb4\xfe\x17\xc8\x98r\xd9\ +\xc7/\xc7!P6\xc89\xe6\xaa\xf4~H={\xf6\ +d\xe6\xe6\xe6\xfe\xf5\x1b\xc2\xcf\x16\x16\x16\xcc\xda\xc2\x7f\ +\xf0\xbe\xb5k\xd7\xd2\x04z\x98\xb7f\xcd\x1aZ\x15\xf0\ +g\xa5\xb0s\xb9\x1e\x06\xc4\x00\x9f9U\xc0\xdf\x95\xb6\ +?\x00\x16$\x83\xf1O\xad\x82\xfd\x91WE\xfb\x8b_\ +\xc5{\xf7\x09l\xc0;u`\x7f\xde\x06\xd4V`\x03\ +\xc3\xff\xf7\x0b\xf8\xc1\xad\x06_\x83$\xe2\x0a\xde\xb1O\ +\xe8\xdduZ,\x04kE\x0b\x84\xfd\x14]%\xfa)\ +\xca\xcb0@\x97\x05c\x97[\x85~\xe0U3q\x04\ +65\xac\xdbP1\xf5\xd6\x06\xb4\xb2*s\xae\x16)\ +_PWm\xa1\xfa\xaf\x00DW\x81\xba\x97\x13]P\ +gD\xd0\x1f\xf9*Tw\xe1~\x18\x02(\xa4\xa6\xde\ +\x01t:\x1bR\x0d\xb6\xe1\x92\x22\xeb\xa5\x8a\xca\xd2\xa5\ +K\x97\xe2\x96-[VZ\x832\x1c\xfamk\x84?\ +]\xbat\xa1\x00\xfcB\x05\xc4\x80~\xf0\x1a\xaa?\xab\ +\x8arR\x92]\xc2\x01\xb6\x06\xa1\x1c\x07\x9e;w\x8e\ +\x02\xbe\xe3\xd6@\xfdy5Q\x7f`/\x92\x00n\xfe\ +\xeb\xc7\x03\x9f\xa1\xdf\x80RC\xf5\xe7U\xe73\x81\x9d\ +\x01\xd7\xac\xc8\xa2~\x98w\xef\xdeQ\xc0o,%\xaf\ +?\xb4\xe5\x88\xe5~\x0d\xe1\x02\xbf\xf3\xf1\xf1!T\xf3\ +\x5c\xae\xd6\xfa\x83y\x0a\xe7,M\x92\x1f0''\x87\ +\x0alb\x8a2\xd6\x1f\xce\xd9\xf3\xe7\xcf\xe3E\xfc\xc7\ +\x15\xba\x01\xcc\xeb\x12`[s\x94\xad\xfec\xc6\x8c\xc1\ +S\xa9TF\x99\x8c\x02\xe62\xdd\xd1\xd1\xb1D\x99\xea\ +\x0f\xe6%\xed\xc3\x87\x0f\xf829\xcb\x9b7o0\xcd\ +\x9a5\xa3TS\xfd\xab<\x9f\xfa\xf5\xeb\x87'\x12\x89\ +Ty\xebO \x10\xc8\xbdz\xf5*Q\x96\xfaC\x8c\ +s\xf1\xe2EYc\xff\xef\x1c\xb8p\xe1\x02\xbe\x9ap\ +QU\xeb\xffw\xfc\xf5\xe8\xd1\x83\x92\x97\x97'\xb3\x0f\ +\xa0|\x02r\x8aZ\xc5u\xb6j\xa9\xff\xf8\xf1\xe3\x89\ +\xe3\xc6\x8d#\x0a\xf9\x8d\x09\xe2d\xbf\xb0\x0e\x80\xfa\xa1\ +\xfc\x9d\xa3F\x8d\xc2Uq.W\xba\xfem\xda\xb4a\ +~\xff\xfe\x9d\xfa\xed\xdb7J\xeb\xd6\xad\x19\x02\xdf\x0b\ +\xf3\xe3\xc7\x8fdI\xf5\x07z\x19\xea`\xa6\xe0~\x06\ +\xb8\x97\xfc\xf5\xebWx?\xb3\x96\xeb\xcf\xdb\xbcy3\ +\xb1\xdcO\xb5q\xe3FB\xf98prr\x22\x039\ +\xca\x12#7Y\xa0\xaf\xcae\x0eo\xcb\x96-\x7f\xef\ +\xdf\xb4i\x13\xa9\x92\xe3\xa8Rc\xafo\xdf\xbe\x94\xc2\ +\xc2\xc2\xbf\xeb,\xf9\xf9\xf9\x14333\xb2`.s\ +\xc1\xfc$\x8b\xae\x83\x02\x0cJ*\xc7\xa0\x9d;w\xa6\ +\x14\x14\x14\xfc\xd5\xd3\xe0Y\x0c \xc3h\xb5Q\x7f(\ +7BCCK\x85\xeb\x17\x13\x13Cn\xd5\xaa\xd5_\ +\x8c\x0f\xe62\x1d\xe2~\xa1\xf5Cz\xb7n\xdd\xfe\xd6\ +\xcf\xd0\xd0\x90\x11\x1b\x1b+\xbc\xde\xc9\xbf~\xfd:Y\ +GG\x87S\xd3\xf5\x07z\x16G\xa7\xd3\xff\xd6\x8d\xc9\ +dr\xa6N\x9dJ\x16\x83\xe3\xc8\xd0\xef\x0e\xe7\xac\xb7\ +\xb77It\x9cN\x9f>\x9d\xc4b\xb1\xfe\xae\x173\ +\x18\x0c\xb6\xb3\xb33\xb9\xa6\xeb\x0fp|)\xa8?S\ +\xa8\xfe\xeci\xd3\xa6\x91\xc5\xe8d\x16\x98\xcb\x140g\ +I\xcd\x9b7\xaf\x80\x9bg\xcc\x98\xf1O\xfd\xc13a\ +|$\xb1\x16\xc6\x0f\xe7\xea\xd5\xab\x04\xe1\xf1\x13\x17\x17\ +G\x15'C\x86\x0e\x1dJ\xb4\xb1\xb1!\x88\x93]_\ +\xbe|\xf9g\xfc\x5c\xb9r\x85\xa8\xad\xad\xcd\xa9\x8d\xf9\ +\xdb\xbbwo\x0a\x0a\x85\x12\xc6\xc9P\x06\x89\x93!\xe2\ +\xfc\xb8\xc2\xb2\xebO\x01\xcf\xa2\x83gRkS~n\ +\xd8\xb0\x01\xf6\x01W\xa8\x0e\x8c>}\xfa\xd0\xe4\x90]\ +T(o\x84\xda\xce\x0d\x08\x08 VA~VJ\x7f\ +A\x9d\x05\xc6\xcd?c\x00\xc8%\xb2\xb41\x00\x7f\xbb\ +v\xed\x1aId\xec\xd5\x85\xfe\xfaC@\xee\x90\xa0\xdc\ +\x10\x9a\x83\xecI\x93&Q\xa4\xc4\xac\x93\xe15\xc22\ +g\xca\x94)\xa4\xba\xc2?P^\xdf\xbcy\x93$\xa2\ +\x0b\xa8@\xbeW\xe0'\xfcNT\xe6\xdf\xb8q\x83T\ +\x09\x99_\xad\xf8\xd9\xd2\xd2\x92ZTT$<\x9ey\ +`<\x8b\xca{\x18?M\x12\x9e\xb3\xf0\x1e\xa0s\xa9\ +J\x80\xffy[\xb7n\xfd\xa7n\x00\x1b\xc0\x18x\x9a\ +\x90\xbc\xa2\x81\xef\x84c[\xfe\xdcS\x0d\xb6_\xb5\xd8\ +\x8fm\xdb\xb6\x85XR\x18\xfb\xf3\x81\x8e C,\x04\ +\x09\xc8\xf6\x7f\xc6\x18\xbc\x16\xdc\xc3T&\xfb\x1d\xe8S\ +2\xd4\xc5B\xb1;\xec\x09\x13&\x90!\x1e\x85\x9f\x85\ +\xf1\x06\xbcV\xd9\xfc\x0f0\xde\xe4\xce\x9d;\xff`\xff\ +\x9f?\x7fR~\xfc\xf8\xf1\xcfw\xb7o\xdf&\x0b\xc7\ +\xa6(\x93\xff\x0a\xc6\x8d\xa2\xd1h\x89>\x14\xf8\x9b\xb5\ +\xb55U\x89\xfd\x87\xbc\xc0\xc0@\x92\xa488\xf8[\ +u\xbf\xaf\xba\xfd\xb7\xed\xda\xb5c$$$T\xb0\xe3\ +\xe3\xe3\xe3\xa9FFF\x0cD\x05\xfc\xe7\xb3f\xcd\x22\ +\x03l\xfcw\xff\x10\xc4\xc9\xae\xae\xaed\x04Q\x0d\xff\ +\x7f\xe3\xc6\x8d\xd9\xf7\xef\xdf'\x95\xd7\xff\xde\xbd{$\ +0g\xd95T\xff\x1aY?\x02s\x99\x82\xc3\xe1\xe8\ +\x80\x98\x03\x06\x0c\xa0\xd6\xc4;\x04\xebG5\xb5v\xca\ +\xdb\xb6m\x1b\x16\xccY|u\xcf1!\xca\xa9\xc9\xf5\ +S===\x9a\xbe\xbe~M\xae\x8b_\x10\xac\x01\xab\ +\xe2\xfa5\x5c\xf7\xb5\x11\xac\xc1{\x01\xa2\xa9P\xdda\ +]=E\xe27\xbcjp-\xbb\xba\xd7\xac\x97\x8b\xc4\ +o\x94\x17\x1b\xc1\x98\xca\x11\xccm\x9e\x92\x10KP'\ +X\xb7\xc1\x88\xba(M\xb1\x10\xec%\x0b\x14\x8e\xd3\x1a\ +!3N\x0b\x16}A^\x81[5\x14GQ\x8e\x0d\ +j\x83\xca\xc7\xe7MA\x9b\xf4e\xb0\xad\x8f\xe0Z\x92\ +\x0a\xcamY\x04}Y7\x04m\x14W\xec\x01%\xd5\ +\xc3v\x8b\x12l\xa3\x83\x98~\xff\xd9\x00\xda^N\xb0\ +\xad\xbd\x85\xe6\xfb\xf5\x06\xd4\xf6r\xba\x06H\x0f\xd0d\ +\xc1\xdchh\xed\x87m\x9eT\x97}\x0fl\xeaR@\ +u\xc9{\xd8\xf6\xac\xbax\xb7\x96\x96\x16+$$\xa4\ +\x10\x10\xb6\x86c9\xa5\x11l;\xa3.\xde\xed\xe4\xe4\ +\x84\xa5\xffWX...u5\x06h\x82\x18\xf0Z\ +}o\xcb\x96-\xa9\xd1\xd1\xd1%Byt\xc8p\xed\ +\xb8\x0e\xda\xcf\xad\x83\xf6\xc3=\xb1X\xd0l\x8e\xc8Z\ +[i\x0d\xfa\x13\x94\xa6\xfd\xbd{\xf7&\xa2P\xa8\x0a\ +\xb1(\xe0;j\x9f>}\xc8u\xd0~nm\xbdO\ +[[\x9b}\xed\xda\xb5\x12\x09\xf1\x5cp\x9d\x13\x0f\xaf\ +\xa9\xaf\xed\x9f2e\x0a\x9e\xc1`0%\xf9\xf1a\xfc\ +\x03\x90\x85\xf8\xfa\xd8\xfe\xd6\xad[S\xbf|\xf9R*\ ++\x0e.66\xb6\xb4U\xabV\xd4z\xd6~\xee\xc6\ +\x8d\x1b1\x222OR\xe1\xac_\xbf\x1e][\xf5\xaa\ +\x8d\xf7\x00\x99\x87/**\x22\xc9\x1b\x87\x0ad!\xd1\ +\xc2\xc2\x02_K\xed\xafQ\x9d\x03\xb0\x1d\x13\xc8\xbcb\ +9cX\xff\xca\xc2\xcb\x97/\x17\x02\x8c\xc8T\xf1\xf6\ +\xf3'N\x9cX\x04d\x1e\xadL\xc1\x02d!u\xec\ +\xd8\xb1(Un?\xc0tD \xf3\xd0e\x95,\x9f\ +>}\xcao\xde\xbcy\xa9\xaa\xb6\xdf\xd1\xd1\x11\xc5f\ +\xb3\xa9\x95m?\x8b\xc5\x22\x0d\x1f>\ +\xd4\xf1\xa2x\x02>\xfb\xc1\x83\x07%\xf0]\xca\x88\x7f\ +\x07\x0d\x1aD\x00c\xbe\x82\xbf\xe3\xc7\x8f\x1f$`\xbb\ +\xc8\x1dG\x09u;\xc0\x13$1\xf3\x89:p\xe0@\ +\x822\xdb?@\xe6\xe1\xc4\xc8B.\xc0\x02\xf2\xeak\ +.\xd0\xed\xe2t>W\xd9\xed\x1f\x81\xbe\xa6\xfe\xfa\xf5\ +K\x9c\xbe\xa2\x0d\x180@\xa6\xfd\x0a\xfa\x97\x08u\xbb\ +\x18\xccG\xac&\xccW\xe3\xfe\x0f\x0f\x0f\x0f8wE\ +sN\xf3\xef\xdf\xbf_\x0a\xe6.K\x8a\x0ca\x81\xf9\ +]\xc1>\x80r\xa0\x1a1\x7f\x8d\xfb\xbf\xf4\xf4\xf4\x98\ +O\x9f>-\x15#\xbbY\xb3f\xcd\x92\x94\xf7\x8a\x0f\ +~\xc3\xc3kD\xef\x03z\x00\xea\x10\xa6*\xf9\xff\xe0\ +\x1eg<\x1e_!\xef4\xc0\x09$`/\xd1\xc4\xd8\ +P4\xf0\x1bQ\xf4z\xf8\x8c!C\x86\x10U\xcd\xff\ +\x090\x1d\xf7\xd0\xa1Cb\xb1\x1b\xb0\x97De!w\ +\xc7\x8e\x1db\xed\x9c\x83\x07\x0f\xe2\x91\x9a[\xa3\xabQ\ +\xff/\xb0\xfd\xa9\xd0\x0e\x90%\x0b\xfb\xf7\xefO\x04\xdf\ +Q\xc5\xd8\x10d\xf8\x0cU^\xffZ\xb8p!\x9e\xc3\ +\xe1\x88\x95\x85\xba\xba\xba,\x1d\x1d\x1d\xd6\xdd\xbbw+\ +\xc8 \xc5\xff\xc2u\x1dJzz:\ +I\xe8<&2\xfc\xae\x8e\xe2\x9f\xeb\x22\xee\x1a\xe6@\ +\xc6\xc25B \xf38\xe0s\x09R7g\x9aA;\ +,\xbb.b\xef\xe1\xfe\xebW\xaf^\xa1\xa3\xa2\xa2\xf0\ +@.\xd6\xc9\x1e\x04@\x19\x82=qu\xb2\xff\xa4O\ +\x9f>\x85\x96\x96\x96\x98:\xdc\xffr\xb5\x8e\xf7?\xf1\ +\xebh\xdcC\x82\xba\xc6Y\xb0\x07\xecZ\x03\xdc\xff\x05\ +\xfb\xbe\x89`\x0f \xdc\x0b\xf8\xa3\x01\xb5=\x11PO\ +\x91=\xa0v\x0d\x84\x07\x09\x80\x86K\xd8\x03\xdc\x0bP\ +\xa8`n\xd4\xb7v\xc36]\x11\xd3\xef\xa2EO \ +\x17\xae\x0a\xf4\x03\xad\x16\xf7\xabW7\xd1\x04m\xb8*\ +hS\x13uf\x04u\x11\xcd\x131\x1eP\xb0p\x9e\ +\x88\xa9r\xe5\x89\x80\xa5% 7\xe4\xbf\xb3\x91\xcas\ +\x93\xd4\x14N\xa8\xab9\xc4\x10\xec\x93\xbd-hkK\ +9\xd8\xaa\x01h4\xa0\xe7H\xcd\x9cy\xad\xac\x04\xdb\ +\x1a\x0eh\x94\x80\x07\xe2\x0a\xcco\xb3\x0a\x10\x06ix\ +\x98\xab\x9c0\x02\x1eh\x8b\x197+\x1b\xd8\x98\x916\ +\x96V\x8a\x8c#G@h5o\xfe\x12Z\xc0\x93r\ +Y\x1c\xae\xe6I\x05z\x06\xa8\x05 W%\x9aWu\ +i\xf7\x8a\x12\x8c\xbf\x9b\x89\xfc\x97\xf7H)\xfa\xacW\ +\xaf^\xc5\x80\xb0J4\x86n\x08pt\x9d\xd7\x05\xe6\ +.|\xf1\xe2E! \x9c\xbe\xbe>CI\xf8\x93\x8e\ +(G\x9e@\xde\xc2\x85\x0b\x8b\xb8\x5c.\x13\xae%\xc1\ +\xf5&%\x99g\x94\xba\xf0\xb3\x8b\xd9\x9bEHMM\ +\xc5\x0b\xfb\xdd;w\xeeLU\x02\xfep\xeb\x9a?\x1a\ +\x1a\x1a\xec\xa0\xa0\xa0b\x91\x18\x1c\x1e\x5c\xab\xa9\xc6s\ +\xb5T\x96?\xf6\xf6\xf68qgI\xc1u;\x07\x07\ +\x87\xd2\x86\xcc\x1f\xb8\xcf-22\x12'i]7\x22\ +\x22\x02/i\x7fG\x03\xe0\x0f\x0f\xee\x83\x93\xb5\xee\xbf\ +l\xd92,R\xfb\xf9\x7f\xea\x9c?\xe6\xe6\xe6$\x18\ +\x07$+.$==\x9d\x00\xf7\xc3\xd5!\x7f\xb8\xb5\ +\xfd^\xb8\xff\xf9\xe4\xc9\x93hy\xe3\x86\x80\xac\x86{\ +i\xd8\x0d\x85?@\xeebH$\x92\xdc\xf9\x15\x80\xfc\ +\xa6\xd8\xda\xdab\x1a\x02\x7f\x9a6mJ\x8d\x8a\x8aR\ +8\xf7\xc6\xcb\x97/\x8b\x00\xc6\xa6\xd6s\xfe\xf0\x80\xbc\ +-\xe0\xf1xLE\xf9\x03d5\x03`\xec\x82Z\x96\ +\xd5\xb5\xca\x1f\x80\x93K\x80L\xc6U6o\x07\xc0\xd5\ +\x18\x13\x13\x13\x5c}\xe4\x0f\x90\xafL gs\xc5\xc4\ +\xaa+R8\x07\x0e\x1c\x806#\xb3\x16\xf9S+\xe3\ +u\xc8\x90!\x05d2\x99XV\xc5\x02p5\xa6_\ +\xbf~\xd9\xf5\x8d?C\x87\x0eE\xc1\x5c\x16U\xe5\x0f\ +\xd0{\xc4A\x83\x06\x15\xd47\xfe\x00\xcc\xc3\x04\x98\xa7\ +@\xc1|1\x15\xb0\xd0\xf1\xe3\xc7Q\xe0Y\xac\xfa\xc6\ +\x1fH\x9d;w.\xcd\xca\xca*\xad,s\x80l/\ +\x05X\x9aP\xcb\xf2\x99W\x8b\xf2\x9f\xb7b\xc5\x8ab\ +\xa0\xdfY\x0a\x0f\x1cp\xcf\xf2\xe5\xcb\xd1\x22\xf5\xadi\ +\xfd\xc2\xadI?\xdd\xe8\xd1\xa31\xa3F\x8d\xc2\x88\xd8\ +\xec\xb47o\xde`\x15\xe5\xcf\xabW\xafp\xf0^\x11\ +\x99\x96\x0b(_\x15\xf9\xd3\xbauk\xda\xd7\xaf_K\ +\xbf|\xf9\x82744\xfc\x07\xf7:::\xe2`\x1e\ +.\x05d2m\xc4\x88\x11%\xa2{\xfc\xe3\xe2\xe20\ +\xb1\xb1\xb1\xd8\x1a\xcc\xebYS\xfc\x81y;\xb1\x02\xac\ +\xc3\x09\x08\x08\xc0\x08\xcf\x03h\x9f\x9e:uJ\xde\xdc\ +^\xbc\x13'N\x88\xe6\xf4\xe2n\xd8\xb0\xa1(\ +\xc7\xdf\xdf\x1fSCr\xa2F\xf8\xd3\xa7O\x1fBa\ +a!Y(o'\xa9W\xaf^\xff\xf8\x02a\x1e/\ + oe\xea\xfb\x8c\x8c\x0c\x12\x90\xeb\xff\xec\x8f\x86\xf9\ +=D\x9eO\x86\xf9\x93U\x81?\xda\xda\xda\xack\xd7\ +\xaeaE\xcf\xbb\xber\xe5J1\xf8\x8d)\x22\xaba\ +n0\xa9\xfe1 \x93q\xc2u\xd4\xd5\xd5e^\xbf\ +~\xbd\xc2\xf3CCCq\xf0\xdd\xca\xce\x9f\x89\x13'\ +b`\xf2w1\xe7\x99\x93\xfa\xf7\xef_\x84\xfc\x9b/\ +\x87\x0e\xe3\xc4\xa5\xf8WKD\xfd\xab666h*\ +\x95J\x11\x93W\x941i\xd2\xa4\x92\x1a\xe0O\xb5=\ +\x0f\xe6D\x89\x8e\x8e\x16\xab\x9b\x92\x92\x92\xf0\xc6\xc6\xc6\ +\x15\xe6\xc0\xc8\x91#Ka.\x1d1v\x04\xcd\xde\xde\ +\xbeB.\xdd\xf6\xed\xdb\x93\x7f\xfd\xfaE\x10\xf7\x8e\x98\ +\x98\x98R\xa0\x0bhJ\xca\x1f\xee\xea\xd5\xab\xf3\xf9|\ +~\x05l\x03\xf3\x04xxx\xe0\xc4\x8dU\xb8\x86\x03\ +p\xb5\xb8}7X\x09\xfbn\xf8\x0b\x16,\xc0r8\ +\x1cq\x18\x0a\xcaj\x5c5\xca\xeaj\xe3O\x87\x0e\x1d\ +\xd0\xb9\xb9\xb9hI\xeb\x10zzz\x0c)\xbeh\xb8\ +/\x87,\xb4\x17\x91hffF\x96\xb6\x87\x03\xccK\ +\xb1~\x92\xfc\xfc|r\xd7\xae]\x89\xca\xc6\x1f\xd0\x9e\ +\x12\xc0\x1f\xb1\xb2$22\xb2D\xc6\x9a:\x1f\xc8\xe1\ +\x12(\x8f\x01\xb1\x16-Z\x84\x95&\x17\x9b6mJ\ +\x7f\xfd\xfau\x89\xb8w\x81:\x10\x80\xbe#(\xe1\xfc\ +\xe2\x81\xf9U\x04\xe6W\x05}\x04\xe7\xc2\xc2\x85\x0bq\ +2\xda\xcc\x80ka/^\xbc@\x83\xb1F\x97\xb1\x1f\ +\x14\xae\x0bU\x98_\xf0\xdd\xa0\x0ehe\x9c_\x02\xf9\ +L\xfd\xf4\xe9\x93X\xf9\x9c\x9c\x9cL\xec\xd8\xb1\xa3\xd4\ +s\x1c\x00\xae\xc1\x02\x1c\x83\x961N\xc9p\xfe\x89{\ +\xc7\xc7\x8f\x1fq\xb0\x0e\xca\xac\xdf\x9d\x9c\x9c04P\ +\xc4\xe1\xe0C\x87\x0eae\xecu\x94\x1a\x1f%\xd8O\ +\x8e\x15\x87\xbb\x81\xce\xa7\x8f\x1f?\x1e\xab\xec\xf8\xa7Q\ +\xa3F\xf0\xfc\x1f\xb1k[x<\x9e6l\xd8\xb0J\ +\xaf\xa9\x0f\x1f>\x1c_ZZ*\x8e\xf7|\xf0N\x0c\ +|\xb7*\xd8\x17={\xf6,-((\x10k;<\ +}\xfa\xb4D\x9a.\x93\xa2\xb3\x18\xe1\xe1\xe1%\x12t\ +\x16\x09\xe6\xdcT%\xfb\x14\xe0\x10\xb4\xb8s%\xa4a\ +!i\xf3N\x1a\xe6Y\xbf~\xbdJ\xd9\xa7\x90\xa0O\ +#66V\xac\xbe\x07\xf8\x97\x08\xf3K*\x80\xad\xc8\ +@\xbeK\xc2\xccx\x15\xf4o\xfc!`\x0f\xe1\xa0]\ +$\xce\xf4\xdc\xbf\x7f?N\x9e\x5c\x1cP&\x1f \xdb\xc5\xc5\x05\xa7\xaa\xfeUhO\ +\x03[\x1b'.o1\xccO9d\xc8\x10\x992\x03\ +\x5cS\x0a\xe4:U\xc2\xb9G\xd8\x1a\xb0\xd9k\xd5?\ +\x0f0\x0d\xb1\xb0\xb0\x90\x22\xae}0\x8f%\xcc\x89&\ +%\xa6\x95\xf1\xe4\xc9\x13\xb1\xfc\x85\xfe\x1f\xe8g\xaa\x07\ +\xeb\x17\xdc\xcd\x9b7c%\xc9\xeay\xf3\xe6I\xca\x01\ +\xc0\x07\xbf\xe1\xc4\xe4\xc2\xfc#\x93\xa1\x7f\xb2\x16\xd6~\ +ke}\xa7M\x9b6T\xe8\x8b\x96\xe0\xf7 \xc2\x5c\ +\xc8H\xc5|\x8b\x14\xf0\x9bX\x99\x0c\x9f\x05\x9fY\x8f\ +\xd6\xbf\xf8\xd3\xa7O/\x91p\x86\x18w\xdf\xbe}\xa2\ +\xf919{\xf7\xee\xc5\x8a\x93\xc9\xf0\x19\xd3\xa6M+\ +\xa9\x85:\xd7j|\x82\x8e\x8e\x0e\xf3\xd6\xad[\x92d\ +5UXV\x0f\x1e<\xb8T\x5c\xbeVx/xF\ +\x09\xcc\xcdV\x1f\xe3[\xac\xac\xac\x08\xc5\xc5\xc5\x92d\ +\xf5\x9f\xfc\xba\x90\x1e=z$\x96\x8f\xf0\xdej\xc8=\ +\xae\xcc\xf1Q\xdcm\xdb\xb6\x89\x9d7P\x0e\xcf\x9d;\ +\x17;k\xd6,\xac\xb8\x5c\x9d\xf0\x1ep/\xae\xb6\xeb\ +[\xdb\xf1u0\xffv||\xbcX\xb9\x9b\x97\x97G\ +\x80\xfe-q\xbf}\xff\xfe\x9d\xd0\xb6m\xdb\xfa\x1e_\ +\xf7GV\xbb\xba\xba\xe2\x98\xa0\xc8\xbb~\x0a\xaf\x9d9\ +sf]\xe4\x02\xaa\x93\xf8U\xb8\x86u\xef\xde=\x9c\ +\x9cg\xe3\xf1\xef\xde\xbd\x8b\x83\xf74\xa4\xf8\xf0\xfe\xfd\ +\xfb\x13\xe0Y\x07\xb2\x98\x03\xcf\x09\xb1\xb6\xb6\xae\xab\xbc\ +\x1du\xb9\xbf\x00\xe6\xce\xc5\xca\x88G\xac\xae\xf3\x12T\ +r\x7fJ\xbbv\xed\xe0\xf9\x0c\x04I\xccIHH(\ +\x85g84\xe0\xfdM0\xf7\xb6\xd8\xf3\x1b\x04\xe7-\ +\xe0\x90\xba\xddGX\xe7\xfb\xbf \x1e|\xf0\xe0\x81\xa8\ +\xac\x86y\x8c\xebJ&+\x15\x7f \x0d\x180\xa0\x14\ +\x8b\xc5R\x84\xcf\xa8\x81\xdf)\xc9\xfeJ\xba\x12\xd4C\ +\xf8\xac(\x98\x07\x1dS\x872Yt\x7fn\xa62\xec\ +\xa5\x06\xd8\x98\xf4\xf3\xe7OLRRR)\x94\xdbJ\ +\xb2\xbf;U\x89\xf2\x03\xf0\xc7\x8f\x1f\x9f\xed\xe2\xe2R\ +\xa0$\xf5\x81\x14\xaad\xf9%\xd8\x02R\x86\xba\xc0\x98\ +\xbei\x82\xfc$\xcf\xd4\xf9H*P\x18 \x03A\x0e\ +\x97\x91\xea\xfc6\xff\x10\x8c\x03t\x10\xc9\x8f\xb4B\x90\ +\xb3\xa4\xa1\xf3\x06\xce+O1y\xb6`N)/@\ +\xc5\x0d|\xdc,\x07\xd4HB\x0e2\xc8\xb3\x11\x80\x9e\ +4\xb0\xb1D\x12\xc8\x1b\x07Dr~6\xe1b \x90\ +\xddP\xbf\xa5\x09\xe51\xe1\xd6\x13\xe2\x08\xda\x94&h\ +\xe34!Y\xfcO\x09\x14\x1a8\xea\xa2.\xeaR\xf5\ +\x22<\xa7`\x1e\xd2)\xc8\x7f\x09z\xff\xe6!]\x22\ +w\x1eRX\x8c\x00\xcd\x03t\x07\xf9/_gm\xf8\ +$x\x02\x19R\xd7\x04m{\x98\x9f\x0c\xe6(u\x17\ +\xf0B\xde\x02s\x02\xcf\x06\xf4\x01Q\x8e\x1c^uM\ +\x90\x07\xef\x01\xcd\x02\xd4X\x8e1wR\xcd7\xb1D\ +\x15\xf0F\xd2Xl\x0b\xe8\x96\x9aO2\xe9\x96\x18\x1e\ +\xc2qy\x02Q\x9e\x1c\x92\xcaN\xc7E\xe6\xb2\x9b`\ +|\xaay#\xff\x5cv\x15\x92y\xef\xd4 \xb9\ +Z\xe1\x1f\xc0g\xecE\x8b\x16\xe5\x98\x98\x98\xfc\x13\x9b\ +\x0b\xf3\xd9\x9f8q\xa2\xb0\x92gOp\x83\x83\x83\x8b\ +D\xcf\x07\x02\xba\x1d?m\xda\xb4\x9fZZZ\xec\xba\ +\x18\x135A\x8e\x8e\x8e%`\x9c\x91\xf6\xec\xd9\x83\x16\ +\xb5\xb7`\xee|\x98\xff\xbe\x12:C\x5c\xce|\xce\xae\ +]\xbb\x0a\x08\x04B\x09\x18\x97\xd8\xfa\xc0\xbf\xe6\xcd\x9b\ +\xd3^\xbf~\xfd\xc7\xa7\x8c\xc3\xe1\xc8\x83\x06\x0d\x12\xf5\ +\xdd\xc1\xf3\xcc\x8a\xc5\xe5\xad\x94\xa23XK\x97.\xad\ +\x90\xcf\x12<\x1b\xbc\x02G\x12\xe4\x1e\xc5\x88\xe6\x95W\ +A\xfe\xc1\x5c\xd6h\xa1s\x07\xf8\x8f\x1e=BC\x7f\ +\x9f\xf0u\xb0\x9d\xaf^\xbd\x92\xdb\x07\xf3\xf2\xe5K,\ +\xcc\xa5*\xfc\x8c&M\x9a0\xc2\xc2\xc20\xe5\xf6 \ +\xe4\xb1\x98s\x0bT\x8a\x7f\xe6\xe6\xe6D07\x09\x22\ +\xfb\x8f\x19\xd0\xdf'\xfa^\x98g_\xdcy\x8cb\xf2\ +?S\xed\xed\xedE\xc70\xcc)\x85f\xb3\xd9L\x91\ +\x1c\xec\x04X\x07U\xe4\x9f@7\x14\x8b\xcb\xa7\x99\x98\ +\x98\x88122*\x15\xb9\x9e}\xfc\xf8qY\xb9\xfb\ +\xb9AAAh\x91\x9c\xfd0\xe7\x14\xe1\xd7\xaf_%\ +\x12r\xfcW\xb8^\x15\xf8\x07\xc6\x08\x1a\xe2\x0b\x096\ +?\xd9\xd6\xd6\xb6\xc2\xf9\x160_?\xd0\x0b\x12\xcf:\ +JMM-\x05\xb6\x0bI\xf4>\x80\x83\x0a\xc13\xa9\ +\x120N\x853$\xaa\x99\x7f\xd5\xfe\x5c===\x0a\ +\xc0\xb5\x85\x92\xf8\xf0\xfc\xf9s\x0c\xc0\xbc4\x09v\x89\ +\xd8\x1c\xc80\x07'\xc0@\x18q\xfd\x0de\xe1\x8b\x17\ +/\xb02\xce(\xa1\xab\x08\xffx\xf3\xe7\xcf\xcf\x05<\ +\xa0+ \xbf\x84u\x09\x1d\xe6\xff\x17u\x11\x84\x87\x87\ +ca~rI\xf7\x811\x88\x93$?a\x7f\x80~\ +\xa9\x89\x5c\xa7\xd5\xce?CCC\xcc\xef\xdf\xbf\xf3$\ +\xf9;\xe1\xf9$\xb2\xe4\x11<\xbf\x17\x9e\x13 \x94\x7f\ +\x982l\xd8\xb0\x12Y\xf2\xf6\xdc\xb9s\xc5\x92\xe4'\ +\x9c\xfb@N\x92\x94\x9d\x7f\x10\xff\x03\xfeI\xf2\xad\xf0\ +\xce\x9c9#S\x9e\xc3\xb3\x05\x80\x9e(\xcfG\xcd=\ +x\xf0`\xb1\x8c\xfc\xd6\x7f\xf8w\xe1\xc2\x05\x89g\x9b\ +\x82:\xe1\xda\xb5kGP\x91\xf9\x8b\x02\xf2\x8a!A\ +\x9eS\x81<\x97\x99\xfb\xd5\xd4\xd4\x94\x9c\x96\x96FH\ +NN\xc6\x81q#\x13\x83\x8c\x1a5\x0a'\xe9\xecS\ +P\x17\xe6\x82\x05\x0b\x8aTa\xfe\x0a\xf4\x07\x15\xe8\x88\ +\x22Ik\x1b\xc06\xc0\xca!\xcfa\xbe\xb1\x02`\xcb\ +\xe6\xc9\xc2\x08\x02\x1bG\x92\xfe\xe0\x83\xba\xc0\xdc\xfd4\ +U\xc2/\xc3\x87\x0f\xc7\x00\x19F\x96$\xcf\xe5\xb1\x0d\ +\xc0\x9ceA\x925\xde\xbd\xbc\xbc\xd0\x92\xceV+-\ +-%\x83\xba`U\x0d\xffA\xbf\xc8\xd1\xa3G%\xfa\ +V\xaa\xeb\xfci`_\x10Dm\x1c\xe1\xae\x02u(\ +\xaa\xc13\x9ck\xd4~\x03X\x97\x00d\x18^\xca\xf9\ +\xd4U\xb2\x0d\xe0\xbd\x92l\x1c\xc1\xb9\xb3x G\x09\ +\xaa\xec?X\xbati\x11\x98\xafLIX\xd0\xce\xce\ +\xae\xd2\xb6\x81\x0c\xcc\xc7\x5c\xb2dI\xb1*\xfb\x0f\x04\ +\xb6\x01\xf4\xad`\xa4\xf8Rp\xa2\xbe\x14y\x08\xfal\ +\xa0\x1e\x92\xf4\x5c\xe8\xbf\x82\xef\xae\x0f\xfeS\x80W\xb0\ +\x92\xb0\x05\xd4%`\x9c`\x14\xac\x07\x1c\xd7hI>\ +C8&\xc1\xd8\xac-\xffi\x8d\xfb\xef\xa1\x9c:y\ +\xf2\xa4D9\x95\x92\x92B\x10\xe7\x17\x90DP\xef\x00\ +\xd9V*\xe5\x5c\xc5\xe2\x1a\xf4\xb9\xd4\xc9\xfaQ\x97.\ +]\x88YYY\xd2\xf4$F\x96\x8dQ\xae\xd7\x81m\ +R,I\xafC]\x5c\xc3>\xbf\xbaZ\x7f\xe3\xad\x5c\ +\xb9R\x1aN\xa3\xda\xda\xda\xe2e=\x07\xe8\x1b\x1c\xd0\ +;\x14Ig\xe5B,X\xcbk\x8a\xb5\xb6\xfek`\ +`\x00\xcf\xc8\xc5I\xf1k\xe1\xa4\xf9X\xe0o\xd2\xfc\ +Tp\x9d\x05\xda\x22\xf5y\xfd|\xf4\xe8\xd1\x12\xcf\xd0\ +\x95\xe6\xe3\x83\xdf\x81\xdf\xd0\xd0\x96\x15w/|&\xb4\ +\x81\xeb{\xfc\x90\x96\x96\x16\xf43\xa1\xa5\xe9\x12\x80y\ ++\xe8\x92\x8e\x1d;\x92\xc0o\x12u\xc6\xd9\xb3g1\ +\xb5\xb4\xe6[\xe7\xf1k\xdd\xbau#\xe4\xe4\xe4H\xd4\ +%G\x8e\x1cA\x0b\xeb\x12\xf8\xf9\xd0\xa1C\x12uF\ +vv6\x11<\xb3.\xf6\xc7\xd5U\xfc$\xcf\xd7\xd7\ +\x17-\xe9\x8c^\x81.\xf9k\x97@\xdf)\xf4\xa1J\ +\xd0\x19l\x1f\x1f\x1f\x0cRw\xf1Cu\x12\xbf\x0b\xcf\ ++\xfc\xf0\xe1\x834]\x82\x85\xe7\x00\xc1u\xddg\xcf\ +\x9ea%\xf9\xc2\xde\xbf\x7f_\x02\x9eUW\xf9V\xea\ +4~|\xdc\xb8qX*\x95*Q\x97,\x5c\xb8\xb0\ +\xd8\xc3\xc3\xa3Xt]W\xe8le\x1ax\x06\xae\xae\ +\xea_\xd7\xfb\x17\xe0\xb9\x87\x17/^\x94\xa8K\x0a\x0b\ +\x0b\x09(\x14J\xa2\xce\xb8p\xe1BM\x9c\x9d\xa8R\ +\xfbgz\xf4\xe8A\xc8\xcb\xcb#*\x1a?\x94\x9b\x9b\ +K\x84\xf7\xaa\xf7o!\xbc5k\xd6\xa0\xc5\x9d\xaf+\ +%\xde\x99\xed\xe7\xe7\x87\xae#\x9d\xa1t\xfb\x07[\xb6\ +l\x09\xcf\xdf-\x91\x97\x7f\x1f?~,\x81\xf7\xa8\xf7\ +\x0f\xfe\x9f&L\x98\x80\x83g\xe5\xca\xe2\x1d\xd47N\ +NN8e\xa8\xb32\xf1\x0f\xea\x81\xcb\x97/\xcb\x8a\ +\x1f\xe2]\xbat\x09]\xc7:Ci\xf7\xef\xf7\xea\xd5\ +\x8b \xe9|_\xc1y\xbc\xc4\x1a:\x8f\xb7\xbe\xe4\x8f\ +\xe0\xae_\xbf^\xac.\x81\xdf\xad]\xbbV\x99\xf6\xee\ ++e\xfe\x12xfottt\x05\xbb\xe4\xf3\xe7\xcf\ +8%\xd1\x19J\xcd?H\xce\xce\xceh\xe1\xb3\xde\xc1\ +G:\xf8\x0e\xabl\xf5\x14\xf0O\xe9r\xaf\x01\xfd\xc0\ +\x04\xba\x04%\xd0%|\xf0\x19]\xc3\xe7\x01W%\x7f\ +S\xba2\xe6\xe6\x02\xb6\x05\x0e\xd8n%\xc0\x86#\xc1\ +s\xe3\x954\x7fX2\xa2\xbc9O\xb9\x9e\x9e\x9e\xa9\ +>>>\xb9J`gH\x22\x98\xa3\x1d\xe6OT\xca\ +|\xbbZZZ\xe4:\xdc[.\x8b`\x1e$\x98\xf7\ +\x14\xe6\xa0|\xa7\xc49\x0a\x95\x95\xa2\x00\xb5F\xfe+\ +\xcat\xd6\x8f*\x10\xdc\xc77\x1d\xf9\x7f\x81\xb9x\x8f\ +!\xea\xfc\xc5r\xed\x9f\x07t\x14\x90.\xf2o\x81\xf3\ +\xf8\x86\x9a\x872y\x07uF\x1bD|\x81\xdf\x07\xab\ +\xe7\xb2\xc49{TH\xe6I*p\x5c\xce\x00\xf4Z\ +\xcd\xc7\xbfz6J \xeft\x11\xf9K\x1b\x81^\x81\ +\xe35E\x80\xb59\x0d\x84H\x02l\x1c*\xc0(\x12\ +\xc7\x5c`\xf9\x07\xf5A<\xea\xa2.*Q\x84\xe7,\ +<\xe7g\x81\xc0\x00\xf9{\xceO\xb0B\xe7\xfc\x94\xcf\ +~s@K\x91\xff\xce\xfbI\xadC\x9b\x90\x8b\xfc\xff\ +\xbcMe%\x8a@\xbe\xc2\xf3\x81\x96\x08xWY\x09\ +j\x0ah\x13\xa0\x04@\xca\x90\x93S\xd5\x88.\xe0\xdd\ +F\x01/\xe5-Z\x80\x5c\x00\xc5\xaa1\x7f\xf5\xac\xc3\ +\x03\x8a\x11\xf0TK\x06\xefu\x00\xadD\xd4g\xb3\xd6\ +\x04\xa1\x05\xbc\xd5\x91\xc0{M\xe4\xbf\xf3L\x89j^\ +\xd5\x18A\xde\xae\x10\xf0Z\xb48\xab\xc7}\xad\xcd\x03\ +g\x11\xdew\x04\x14\xad\xe6M\xad\xd1g@\x1d\x84\xf8\ +\x1f\xa0\xc4k!\xf5U'\xfb\x0bx\xdf\x19P\xbc\x9a\ +'\xb5N\xdf\x01A\xc3l\x91\x00\xab\xaa\x5c\x1b\x1a7\ +nLh\xd2\xa4\x09Q\x85\xed\x83\x05\x02\xdf\xbe*\xd6\ +\x9f\xb5y\xf3\xe6\xe4M\x9b6e\xc9\xb3?QI\xe9\ +:\xa0_\xaaXw+++\x14L*\x88\xc5b\x89\ +\x03\x06\x0c\xc0\xaa(\xff\x7f\x02\x22\xa8\xa0\xdc\xa1\xb8\xa6\xb8\x86r\x9a5d\xfe\xc3\xdc\x7f\x05l6\ +[\xe6>\x22x\x8d\x87\x87G\xa1\x8a\xf8S\xd8\xca\x18\ +g\x8fT\xcc\x99X\x9a\x9c\x9c,w\x1e\xed_\xbf~\ +a\x81..U\xf3\xbfZr\x1c\xb1\x0e\x1f>\x5c\xa0\ +\xe0YhP\x17\xe7\xcb\x91cP\xcd\x7f\xd9\xf9\x1e\x8b\ +JKK\x15\xde\x87\x0ct1\x01\xeak5\xff\xab\xa4\ +s\xc9\xcf\x9f?\xcf\xaf\xe4Yl\xfc\xb0\xb0\xb0\xbc&\ +M\x9aP\xd4\xfc\xaf\xb4\xce\xcd\xe1p8\x95>O\x0b\ +\xda\xc8s\xe6\xcc\xc9Vb]\xccF\x94\xe7\x9c\xe4\x7f\ +\x08\xe8OlJJJ\x95\xcfA\x02v1\xaa]\xbb\ +vX5\xff\x15\xb2s\x99\x07\x0f\x1e\xcc\x90`\xe7*\ +<\x0dv\xef\xde\x9d\xae\xa4~.\xa5\xe4?\xd0\x9b\xb9\ +@\xe7\x96\x94US\x81njkk\xeb\x5c5\xff\xe5\ +\xf2-\x13\x9f={\x96Y\xc5\xf3O+\xe4'x\xf0\ +\xe0A\xaa\x8e\x8e\x0eQ\xcd\x7f\xe91\x9e\xee\xee\xee\xa9\ +@\xe7R\xca\xaa\xb9\x00]L\x982e\xcaO%\xd3\ +\xc5lD\x89\xf2\x06\xb4o\xdf\xbe\x10\xe8\xdc\xdc\xb2\x1a\ +*\x89\x89\x89\xbf[\xb6l\x99\xaf\xe6\xbfx_\xb8\xb7\ +\xb7\xf7O\xc0&zY\xcd\x152\xc0\xb4_\x94\xa8\xcd\ +J5\xfe\x87\x0c\x19\x92E \x10p5\xc5|\xa0\xd3\ +\xb1\x83\x06\x0d\xcaV\x8f\x7f\x89\xb8\x93q\xe4\xc8\x91\xf4\ +j\xc2\x9d\x15\x5c\xa3\x07\x0e\x1cH\x87\xd8V\xcd\x7f\xc9\ +\xd4\xb1cGLZZZQu3?99\xb9\xd8\ +\xc4\xc4\x04\xab\x84\xf8G\xd9ls.<\x93U\xd29\ +]\x95)\x00O\xd1\x81\xdc\xcfS\xc2\xb6\xd65\xff\xb9\ +\xe2\xe6\x9f\xbe\xbe>\xf9\xc5\x8b\x17\xf9\xd5d\x03\xf0\x81\ +=Q\x00\x9eI\x91\xb0\xfe\xcdm\xa0\xfc\xe7\x8f\x181\ +\x22\xdf\xde\xde\xbe@\xdc\xef\xb6\xb6\xb6\x85@\x17\x13\xab\ +\xca|<\x1eO\x1c:t\xa8X?\xb4\xa5\xa5e\xb2\ +\x95\x95UjC\xe4\xbf\xa1\xa1!)..\x0e\x1d\x13\ +\x13S\xdc\xaaU+\x92\x98u\x17fPPP\x9e\x82\ +\xeb.\x15D\xcf\xa1C\x87\xc4\xae\xc3\xb4h\xd1\x82\xf0\ +\xe9\xd3\xa7\x9c\x8f\x1f?\xe6\x19\x18\x18\x10\x1b\x18\xff\xb9\ +\xfe\xfe\xfe(\x98;\x0e\x10k\xdd\xbau\x05\xe2\xecp\ +33\xb3\x92\xd4\xd4Tl\x15t.\x16\xe8sqg\ +/p\xd6\xae]\x9b\x0b\xde\xcd\x84\xef\xf7\xf3\xf3\xcb\xaf\ +#9T'\xfc\xef\xdd\xbb7\xae\xa0\xa0\xe0o\x1c\x09\ +\xf8\x8c\xef\xd5\xab\x978l\xc2[\xbcxq\x81\xa43\ +\xf7d\xac\xc33\x16,X\x80\x12\xd7>\xc1\xfb\xff\x9e\ +_\x95\x97\x97\x87\xef\xd9\xb3'\xae\x8e\xf8_\xab1{\ +\xda\xda\xda\x8c\xabW\xaf\xa2D\xf2y\xf2._\xbe\x9c\ +\x0f\x7f\x13\xbd\xbei\xd3\xa6T\xa0\x8b\x8b\x14\xd4\xc5P\ +\xe7\x16\x01\x9d[!G\x94\x8e\x8e\x0e#44T\xdc\ +\xfbQ\xe2\xde_\xcf\xf8\xcf\x9f8qb\x11\x8dF\xa3\ +\x8a\xc9?K\x1e?~|\x81\xb8\xfa\xd8\xd9\xd9a\x80\ +\xedJR@\xe7\x92\x86\x0d\x1b\x86\x11\xf7\xfeI\x93&\ +\x15Jx?\xd5\xd9\xd9\xb9\xb8\x96\xf9Q\xab\xfc\x87z\ +6::\xbaXJ\xfe\xe4\x02\xa0\x17K\xc5\xc5@\x00\ +\xbbX\xe2\x99\x81\xa2:\x17\xd8\xb9(qq\x88\xad[\ +\xb7&\xc4\xc6\xc6J|?\xa8\x1b\x1a\xe0\x02r=\xe5\ +?g\xcd\x9a5\x7ft\x9e\xc4C\xc8\xb9\x5c\xf2\x84\x09\ +\x13\xc4\xe2Ax\xe6`JJ\x8a\xcc5\x19A\xec\x8f\ +\xd8\x98\xfa)S\xa6d\xf2x<\xaa\x94\xfc\xe3\x10\x0b\ +\xa0jQ\x17\xd7\xda\xda{\xf7\xee\xdd\xd1@\xcfI\xc5\ +2YYY\xd8\xce\x9d;c$\xad\xc7\x03\xbb\xb8\x08\ +\xeaU)>~\xfa\xbcy\xf3$\xc6\xbeu\xe9\xd2\x05\ +\x07\xde!\xd5\xbf\x97\x9f\x9f_\x0a\xb0@I}\xe2\xbf\ +\x96\x96\x16\xfd\xfc\xf9\xf3\x99\xd2\xe4\x07 \xa6e\xcb\x962e\xef\xf0\xe1\ +\xc3q@\xbf\x92\xc5\xac\xf1\x12mll0\xf2\xe8\xa0\ +\xcf\x9f?\x17K\xab\x0b\xa8+\xd5\xc9\xc9\xa96tq\ +\x8d\xf3\x1f\xe0=\xfc\xcb\x97/\x7fI\xc3\x8f\x0c\x06\x83\ +\x06p\x91\x5c\xed\x85\xe7\x1f\x8a9\xb3\x89\xb3g\xcf\x9e\ +\x029c\xff\xf9@\x0f\xa0\x98L\xa6\xd4\xb8\xa2w\xef\ +\xde\x15\x83\xf9FVu\xfe\xc3=\xa2\x91\x91\x91\xd9\xd2\ +\xda\x0a\xf9\x0fpa\x91\xbc\xe3\x0d\xd8\xb4D\xa0gK\ +\x84\xd6\x151\xc6\xc6\xc6\xf2\xeec\xe3O\x9b6\xadP\ +\x06\xff\xf9\xa0\xce\xf90\xfe\xae>\xc8\xff\x91#G\xe6\ +\x93\xc9d\xa9\xbe4 \x13\xd0\xe2\xfc@\x92x\xe8\xee\ +\xee\xfeG\x17\x03\x9dK\x83\xe7\xa1\xcb\xdbw\x00\x83\x92\ +\x00\x06EK\xab\x0b\x09\x14GGGT=\xd2\xbf\x8c\ +3g\xce\xe4H\xd3\xbfP'\xae]\xbbVn\xec\x07\ +\xf5,\xd0\xb7\x05\xf7\xee\xdd\xcb\xd6\xd5\xd5\x957\x172\ +' @\x96\xfe\xe5\x82\xba\xe6\xc1:\xd7'\xfc\xdf\ +\xb5kWLNN\x8eT\xfc\x09\xf0ii\xcf\x9e=\ +\xe5\xc6~\x00O\x16v\xea\xd4\x09\xa5\xa0\xdf\x09/\xad\ +\x0e\xd9\xd9\xd98PWl=\xb4\xbf\xb8\xde\xde\xde\xb9\ +\x00g2d`?\x94\x02\xd8\x8f_E\xbf\x93(\x06\ +f\x82:\xe6\xd5\xb2\xfdUk\xfe\x07\x03\x03\x03\xd2\xfb\ +\xf7\xefQ2\xce!\xa2\x00\x1b\xb8\xa8\x9a\xeb%\xd1\xef\ +$\x82y\x0aa\x1d\xeb\xb3\xffm\xec\xd8\xb1(\x80\xaf\ +\xc92l\x01\xb4<\xb6@u\xf9\x9d\x04\x98\x9f\x0c\xea\ +VX\x9f\xfdo\x90\x1a5j\xc4\xb8x\xf1b\xbe,\ +[\xd8\xcf\xcf\xaf\xba\xfc0\x5c\xa0\xd7e\xea\xdc\x0b\x17\ +.\x14\xc0\xba\xd5w\xff?$\x0b\x0b\x0bl~~\xbe\ +T_\x1a\xd0\xd5\xf8\x1e=z\xe0\xab\xe1]8\xb8\xbe\ +\x22C\xef\x97\xc0sM\x1a\xd0\xfa#g\xdd\xbau\xf9\ +\xb2\xfc0\xe7\xcf\x9f/\x84g\xe6Te\xad\xe7\xd2\xa5\ +K\xb2t.k\xcd\x9a5\x05\x0di\xfdQ\x01\x99L\ +\x012\xb9\xb29\x01\xf9\xe3\xc7\x8f/\x82\xfa\x5c\x86\xdd\ +W\x0ctM]\xe5\x8d\xa8\xd3\xf8\x13\x17\x17\x97B9\ +0\x09\xbaE\x8b\x16\x0a\xef\xa1\x83\xfa\xfb\xc3\x87\x0f\xc5\ +\xb2\xb0\x96\xb3\xb3s!RwyS\xea4\xfeJ\xb0\ +\x16[(K>\xf8\xf8\xf8\x14*(\x1f\xfe\xf8\x99!\ +\x9e\x97&\xdf\xae\x5c\xb9R\x17k\xbeJ\x15\x7f\xd8\xa7\ +O\x1f\x9c\x94\xb3\x98\xcbmR|\xf7\xee\xdd\xe5\xd6\xc5\ +\xe0\xda\x92\xdc\xdc\x5c\xa9\xfa]\x10sQ\xd7\xe7\x9d*\ +C\xfc-g\xc3\x86\x0d(Y\xba\xf8\xdc\xb9sr\xe9\ +bx\x0d\xd0\xdb(Y\xbe\xa6\x80\x80\x00\x94\x12\xec\xfd\ +Q\x8a\xf8g\xe8\x93\x8c\x8b\x8b\xc3H\xdd8A&\xcb\ +\xa5\x8b\xc7\x8c\x19S\x0c\xf5\xb6\xb4gA\xff'|\xa7\ +:\xfe\xfc\xff\xbax\xea\xd4\xa9Et:]\xaa.~\ +\xfb\xf6\xadT]l``@\x01\xd7H\xd5\xb9\xe0\x1d\ +\xb4\xc9\x93'\x17!\xca\x91\xabLi\xe2\xffuuu\ +\xe97o\xde,\x94\xc3?&I\x17sW\xae\x5c\x89\ +\x92\xa5so\xdc\xb8Q\x08\xf5\xbez\xff\x85\xd8xd\ +lQQQ\xa5tq\xd7\xae]K\xb2\xb2\xb2\xa4\xea\ +\x5c\xf0lB\xbf~\xfd\x94\xe5\x8cqe\xdc\x7f\xca\xd9\ +\xb2eK\x81\x8c\xfdG\x15t\xb1\x96\x96\x16\xf3\xf4\xe9\ +\xd3\xb2t.{\xf3\xe6\xcd\x85J\xd6^\xa5\xdb\x7f\xdd\ +\xb6m[\xe2\xb7o\xdfd\xeab\xa8g\xcb\xef\x195\ +jT1\x89D\x92\xeaS\xfd\xfa\xf5+\x16<[\xd9\ +\xf2#*c\xfe\x01\xfe\xf4\xe9\xd3\x8b\xe0\x9a\xbc,]\ +\xdc\xbcysJ\xb3f\xcd\xa8QQQ\xc5\xb2\xe2+\ +\xc03\x8b\x11\xe5\xcb\x0f\xaa\x94\xf9\x1f\xa0.\xbes\xe7\ +N\xa14\x9er\xb9\x5c&\xb0\x8b\xf3W\xacX\x91\x0f\ +?K\x93W\xb7n\xdd*\x02\xcfT\xc6\xfc\xb8J\x9b\ +\x7f\xc6\xda\xda\x1a\x8bF\xa3\x092\xe2\x9cKKJJ\ +\xa4\xfa\x96\x8b\x8b\x8b\x09VVV8el\xa3\x92\xe7\ +_\xe2\x04\x06\x06\xa2\xaa\xb8\x17\x98\xbd}\xfbv\x94\xb2\ +\x8e1e\xcf?\xd6\xae];bBBB\xa5\xf7\x1f\ +}\xff\xfe\x1dkdd\xa4\xcc\xe7\x03({\xfe=\xbe\ +\x9b\x9b\x9b\xacX5\xb1\x05\xde\xe3\xea\xeaZ\x88(w\ +Nn\xa5\xcf\x7f\xd8\xb8qc\xfa\xfd\xfb\xf7\x0b\x15\xdd\ +\x7ft\xf7\xee\xddBx\xaf:\xffa\xd5\x09\x9e\xaf\x80\ +\xc1`\xe4\xde\x0b\x0c\xf5v\xff\xfe\xfdU!\x0f\xb4J\ +\xe4\x1f\x86q\xcd\xbbv\xedB\xc9\xb9\x17\x98\x0d\xf4v\ +\x81\x12\xeb\x5c\x95\xe3\xbf 7\x13111Q\xa6.\ +\x86\xfa\x1a\xeamUh\x13\xa2Z\xf9\xe7\xf9s\xe6\xcc\ +)\x84{\x8c\xa4\xe9\xdcY\xb3f)\xbb\xceUU\xfe\ +\x975i\xd2\x84\xf6\xe8\xd1#I\xba\x98\xff\xe0\xc1\x03\ +\xa8sU%\xf7\xbc\xca\xf1\x1f\xd2\xa0A\x83\xd0X,\ +\xb6\x82]\x0c\xf43a\xe0\xc0\x81\x18Uj\x8b@G\ +\xa9\xda\xf9;P\x17\xe7\x89\xd8\xc5\x1c\xf0]\x81*`\ +9\x11\x82c_\xe5\xce\x8f\x03\xfa\x15\xff\xe3\xc7\x8f\xc2\ +r\xe6\x83\xcf\x8a\xec?R&\x82~\xa9\xdf*Xo\ +\xde\xcc\x993s\xd8l6\x05\x9ew1{\xf6l\x14\ +\xa2\x9agu'\x02\xba\xa9\x82\xf5\x86>j\xf2\xbd{\ +\xf7\x92\x81>\x869\xe6i\xaa\xd8\x06@W\x11\x15>\ +\x7f\xd3\xc4\xc4$\xabS\xa7Ny*\xca{8f\xe6\ +!\xaa}\xfe,_E\xe5\x0e\xa48@\xa6\xc8\x7fE\ +}\xfer\xed\xe7\x1d\x5c\x8b\xfc\xbf\xc0\xb3\xb0?\xab\xf9\ +Rk\xf4\x01\x90\x09\xf2o\x99\x00\xa8X\xcd\x9b\x1a'\ +\xe8\x1f\x19\x87T,\x9a\x80<\x11\x15<\x8fV\x85\x08\ +\xe6\x96Z*\xe0\xb5\xb8\xa2\x0dh9\xa0\x225\xafj\ +d\xdc/\x15\xf0XZ\x81}\xe3\x04\xe8\xa3Z'W\ +\x9b\xae}/\x909\x1a\x88\xfc\x05\xea\x87u\x80`\xbe\ +|\xaa\x9a\x8f\x95\xc2\xf7\x90wk\x00\xb5G*_L\ +\x05v\x02\xb4\xd5~ \xff\x9d\x99\xcd\x12Z\xbbT\xd3\ +\xff\xfd\xc8%\x02\x9f\x02\xe4\x95\x87\x10\xbe\x97X\xde\xfd\ +\xff\xa3\x96\xf0gD]\xd4E]\xd4\xa5\x9a\x8a$9\ +c\x01\xfe\x09D\xfe\xd3\xcc\x1aH'\xc1\xd7\x1a\xc8\xc7\ +\xe6\xc8\x1f\xaad\xd1\x03d\x0dh\x15\xa0\x1b\x80\x12\x00\ +\xe1\x95\x1cOq\x05kQ\xf5\x91\xe0:\xc3W@\xd7\ +\x00\xad\x04d%\xe8\xa3\xea.p\xc48\x03\xba\x04(\ +]U\xfd\xba\x0d\x00\x17\xa6\x01\xba(\xf0\xb94\xaf\x86\ +~\x87x\xc5N0\xd7\xf1j\x1e\xab\x0c\x95\x08d\xc2\ +\xf0*`N\x03@~\x80\xb2\xd5\xfcTY\xca\x02\xb4\ +Z\xd0\x97\x8a\x14c@'\xd5\xf6y\xbd \xd8\x87'\ +\x04}*O1\x02\x14\xa2\x22q\xa6j\x92?\x1e\x0b\ +\xf6i;9d\xfe1\x15\x8cwR\x93|1\x91\xc7\ +\xa5\xe0B\x88\x13|\xd42\xbf^\x13E\xd0\xc7\xe20\ +!\xc4\x8a\x99j\x1e\xd5{\xca\x004T\xa4\xef\x9b\x01\ +\x0aU\xf3\xa6\xc1\xd0UA\x9f\x97\x17'\x81/I\xcd\ +\x9b\x86A8\xa1X\x91&\x80\xce\xa9y\xd2\xe0\xe8\xac\ +\xa0\xef-\x01\xa56D\x1ehjjR\x005T\xbc\ +\x9b\x02\xa8/\xa0e\x0d\x14\xf3\xb3g\xcc\x98\xf1\x0d\xd0\ +OD\xc9\xce\x8a\xafE\xbf\x10\xec\xfb+\x0dq\xfc\x9b\ +\x9a\x9a\xe6eddd\xa6\xa5\xa5\xa1:w\xee\x8cn\ +\xa02\x00\xfa\x84b\x1bZ\xbb\xb5\xb4\xb4\xa8AAA\ +Ipk1\xdc\xef\x17\x1c\x1c\x9cU\x07g\x04(\x03\ +E7\xc0\x98T\xbe\x9d\x9d]:\x91H\xfc{V\x16\ +\x81@(\x1d=z\xb4\xaa\xeeu\xab\x0a\xe5\x0a\xd6\x8d\ +\x1bL\x9b\x9b7o\x8e{\xf5\xeaU\xaaH>V\xfe\ +\x9b7oP\x0a\x9c\xd3V\x9f\xfc\x81\x0d)\x96\x83\xed\ +\xe9\xe9\x99\xcc\xe1p*\xe4\xb4\x84g\xd1\xfb\xf8\xf8\xe4\ +5\xb0u/VC\xea\xff.]\xba\xe4gff\xe6\ +K\xca3\x02~\xc3\xf6\xe8\xd1\x03\xa3\xee\xff\xfaG\x00\ +\xdfQ\xcf\x9c9\x93\x22#\xef!\xe7\xec\xd9\xb3\xb9\xda\ +\xda\xda\xf4\x06\xd4\xff\x0d\x01\xf7\xf2\xc7\x8c\x19\x93I\x22\ +\x91d\x9e3\x0f\xae!\x8e\x1b7.\xbf\x81`\xc1\x06\ +\xd1\xff-[\xb6,y\xf7\xee]\x96\x9c\xb9\x06\xf9o\ +\xdf\xbe-\x00X\x90\xa0\xee\xff\xfa\x81\xf9V\xaf^\x9d\ +\xce\xe3\xf1\xa8\xf2\xe69\xe4r\xb9t__\xdf\xec\x06\ +\x10\x07S\xef\xfb\xdf\xc2\xc2\xa20''\xa7P\xd1<\ +\xaf\xd9\xd9\xd9\xc5\xe0\xdebu\xff\xab.\xe9\xe8\xe8P\ +/^\xbc\x98)g~\xcd\x0aX\xf0\xdc\xb9s\x99\x00\ +\x0b\xd2\xd4\xfd\xaf\x92\xc4svv\xce\xa1P(\x84\xca\ +\xe6\xd9&\x93\xc9\xa5c\xc7\x8e\xcd\xa9\xc7X\x90\x85\xa8\ +^\x9e>\xb9\xc8\xd0\xd0\x10\xff\xe9\xd3\xa7\x5c\x05\xf3K\ +W\xc0\x82\x007f\x03\xfc\x88W\xf7\xbfj\xb5k\xdd\ +\xbaui\x00\xf3\xd1\xcb\xaaX\x00\x16\xa4\xfa\xf8\xf8\xa4\ +\xd6S,X/\xfb\xbfg\xcf\x9e\xf9yyy\x85e\ +\xd5T\x00\x16,\xe8\xd6\xad[\xbe\xba\xff\x95\x9f\x00^\ +#\x87\x84\x84\xa4T\xf1|\x93\x0a\xb9\xd7\xcf\x9e=\x9b\ +\xdc\xa8Q#J=\xec\x7fV}\xc2|NNNi\ +\x00\xf3\x95\x94Us!\x91HXGG\xc7\xb4z\x86\ +\x05\xebU\xff\x03\x9c\x86\xf9\xf8\xf1cz\x151\x9f\xc4\ +\xf3\xbe\xde\xbcy\x93\xd2\xbcys\xac\xba\xff\x95\x92\x98\ +\xabW\xafN\x02\x98\x8fRVC\x05`A\x92\xa7\xa7\ +\xe7\xcfz\xc4\xb3z\xd3\xff\xdd\xbbw\xcf\x06\x98/\xa7\ +\xac\x86K&(\x9d:u\xcaV\xf7\xbfR\xad\xed\x92\ +.\x5c\xb8\x90\x08\xba\x87UV\xf3\x85y\xfc\xf8\xf1x\ +---r=\xe9\x7fU\xb7ky\xa3G\x8fN\xa2\ +R\xa9\xe8\xb2Z*\x00\x0b\xa2\x86\x0f\x1f\x0e\xf5\x00O\ +\xdd\xffuK\x06\x06\x06E\x00\xf3\xfd\xac!\xcc'\x11\ +\x0aDDD|m\xd2\xa4I\x91\xba\xff\xeb\x16\xf3y\ +{{\x7f\x05\x98\x8fTV\xcb\x05`A\xec\xdc\xb9s\ +?\xa8\xb8\xfeT\xe9\xfe\xef\xd2\xa5K*\xc0|\x19e\ +uT\xd2\xd2\xd2\xbe\xb6i\xd3&I\xdd\xffuB\xe4\ +c\xc7\x8e\xc5\xc0c\xd0\xcb\xea\xae\x90\xb6n\xdd\xfaR\ +\x85\xf7\xcf\xb1T8\xde\x99\xb6e\xcb\x968\xd0\x07\xd4\ +:\xec\x7f\xca\xbau\xeb\xa2Ux\x0d]\x95\xfb\xbf\xac\ +m\xdb\xb6y\x89\x89\x89)u\xd4\xf7\xfc\xf8\xf8\xf8\x14\ + \xff\x0bT\x5c\xfe\xab\xf2~\x07\x8e\xab\xab\xebO\x16\ +\x8bUZ\xdb\x9d\xcf`0\xf0\xd3\xa6MKR\xf1\xbd\ +\xc3\xaa\xde\xff\xf0\xec\xd2\xd2\x87\x0f\x1f\xfe\x86\x90\xbc6\ +\xe1\xff\xdd\xbbw\x93\x1b7nL\xa8\x07\xf6\x9f\xca\xef\ +w\x1a8p`\x16\x16\x8b-\xaa\xad\xceG\xa3\xd1E\ +\xd6\xd6\xd69\xf5\xc4\xff\xa7\xf2\xb9\x0f444\xe8\xbb\ +w\xef\xfe]K\xb6\x00#000\x05\xbc\x93\xa1\xee\ +\xffZ\xaf\xabD\x7fk\xfb\xf6\xed\x8b\x7f\xfc\xf8\x91]\ +\xd3\x9d\x0f0_n\xbbv\xed\xa4\xe5\x8b\xe0\xa9\x90O\ +H%\xfa_GG\x871s\xe6\xccD\xc0wi9\ +\xca\xb8s\xe6\xccIc2\x99\xc4\x1a\xc4|D\x807\ +3\xa4\xf1\xcc\xc0\xc0 \x7f\xc8\x90!\xaf\xb5\xb4\xb4\x18\ +\xea\xfe\xaf\x9e\xbd{#F\x8c\xc8\xc7\xe1p\x85\xdb\xb7\ +o\xcf\x946\xb7\xf4\xf4\xf4\x88\x8f\x1e=\xca\xa8!,\ +\x081_&\xc0\x9b\xd2r\x040\xfd\xfd\xfd\x13Q(\ +\xd4o\x88IT]\xa6*I\xbe\x06\xe2\xcb\x97/\xff\ +\xc4q\x17\x15\x15a\x01\xee\x92jo\x0f\x1e<8\x17\ +`ALuw~qq1f\xc0\x80\x01Rc@\ +---s\x0aA\x81\xb1B\x8f\x1f?N\xd7\xd7\xd7\ +'\xaa\xfb\xbfJ\xc4]\xb6lY\x16\x9b\xcd.\xf7\xf1\ +q\xef\xdc\xb9\x93\x05\xe6 Y\x0a\x16d\xec\xd9\xb3'\ +]\x90\xdb\xa7z\x1c=|>s\xc7\x8e\x1d\xe9\xe0\xd9\ +\x12ce\x81-H\xba}\xfbvz\xf9^#\x16\x8b\ +E\x9e?\x7f~\xa6\x92\xcbW\xa5\xee\x7fssst\ +JJ\xca?v\x1d\x9dN'\x01\x1d,\x95\xaf\x00\x0b\ +b\x00\x16\xcc\xaf\xae\xfe\xff\xfe\xfd{\xbe\xb1\xb1\xb1\xb4\ +\xb8?\xee\xacY\xb3\xb2\x00>\xf8g\x1d\xf2\xd7\xaf_\ +\x05fffhu\xffW*G\x17=888S\ +\x5cL\x0f\xe8\x8f<\x80\x05\xa5\xe5\xe9\xe0\xce\x9d;7\ +\x0b`ArU\xfb^0\xde\xb2\xa5\xf1\xc9\xc4\xc4\x04\ +\x9b\x90\x90P \xe6v\xd6\xe1\xc3\x873\x95\x18\x0b*\ +k\xff\xf3\xed\xed\xed\xf3JKKK$\xc8c\xc6\xb6\ +m\xdb\xd2\xa4\xed]\x00\xba\x97\xfc\xf0\xe1\xc3l\x91<\ +O\x0ac>\xa0o\xb2\x81\xbe\x91\x18\xf7\xaf\xa9\xa9\xc9\ +\xdc\xb5kW\xa6$}S\x02\x8a\x9d\x9d\x9d\xb2\xe6\x93\ +P\xca\xfe\x87\x98\xef\xc5\x8b\x179\xd2\xfa\x0e`\xc1\x22\ +\x80\xb7\xf2d`A\x14\x06\x83\xc1U\xb6\xf3!\xde\xec\ +\xdf\xbf\x7f\xa1\x8cw\xe4\x83w`\xa5\xc5\x8d\x87\x87\x87\ +\xe7\xc06)i\xff+\xdb\xb8\xe4,Z\xb4(\x13`\ +>Yq\xdc\xdc\x1b7n$\xeb\xea\xea\x92d\xcc\xcd\ +\xacJbA&\x901Y\x00\xf3\xb1\xa4\xac=\x90\x1e\ + \ +B\x9c\x07\xf0^\xce\xa7O\x9fR[\xb6lY\xd9\xb3\ +/9\xcb\x96-\xcb\xe4p8\xf2\xea..hc:\ +h+Q\xed\xff\x11\x1b\xc7\x9d\x83\xc1`\x8a\xe5\x95\xa3\ +\xbf\x7f\xff\x868\xba\xb2\xe75\xf0\x81\x0d\x912x\xf0\ +\xe0_\x95\xe5\x01<7,55U\xee g\xc0\x80\x01\ +\xa8\xe2\xe2b\xb91_ff&\x1a\xbc\x1b\xad\xca\xbc\ +C\xea\xc7\xf9o\x1c\x1f\x1f\x9fL.\x97+7\x16\x84\ +y\xa1 \xce\x13\xda{@\xbe{\xf7n\x96\xbc{\x0f\ +\xe0\xbb\xbc\xbd\xbdU\x15\xf3\x89\xf6\xbf\xca\x9f\xff\xd8\xaa\ +U\xab\xd2w\xef\xde\xc9\xed\x17\x84\xb9@\x00\x16,\xdf\ +\xeb\xc9\x83\xf9\xdd`\xce\x0fy1\xdf\xdb\xb7o\xf3\xc0\ +;U=\xf7\x7f\xbd\xe9\x7f\x88\xbf\xc6\x8d\x1b\x97K&\ +\x93\x15\xc2\x82\xc6\xc6\xc68\xb8\x0f\xe8\xdb\xb7or\xaf\ +\xed\x02\xbcI\x00\xef\xcaG\xea\xc79\xe0\xf5\xe6\xfc_\ +\x1d\x1d\x1d\xb8\x077K\xde=\xb80\x0f\x04\x8c/\xdc\ +\xb3gO\x0a\xdc\x07(/\xe6;{\xf6l6\xc4\x9d\ +\xf5\x81gH=;\xff\xbdg\xcf\x9eE999r\ +cA\xb8\xdf\x14\xc8}\xb9\xd7\x12\x00\xceD[XX\ +\x14\xd7\x17~\xd5\xb7\xfe\x87Xv\xcd\x9a5\x10\x0b\xd2\ +\xab=\xf9;x\xe6\xea\xd5\xab\xb3\xea\x01^\x16\xed\x7f\ +f=j\x0f\xcc%S\xfa\xf1\xe3G\xb9\xfd\x82\xf2b\ +\xbe\xf7\xef\xdf\xe7C\x9cY\x9fxU\x1f\xfb\x1f\xe22\ +gg\xe7\x5c\x0a\x85B\xa8\xae\xce\x07\xb8\x92\xe0\xe4\xe4\ +\x94[O0_}\xef\x7f\x88\x05\xa9!!!rc\ +AY\x98\xef\xe2\xc5\x8bY\x10_\xd67>\xd5\xd7\xfe\ +\x87\xd4\xabW\xaf\xa2\xbc\xbc\ +\x00\x00\x02,\ +<\ +svg xmlns=\x22http:\ +//www.w3.org/200\ +0/svg\x22 height=\x222\ +4px\x22 viewBox=\x220 \ +-960 960 960\x22 wi\ +dth=\x2224px\x22 fill=\ +\x22#5f6368\x22>|\xc8\x83x\xb2\xbe\xf2\xa7\xbe\xf7?\xf4\xed\xba\ +\xb8\xb8\xe4P\xa9T\x85\xb1 \xc4\x8f\x13&L\xc8Q\ +\xf6\xfdQ\xea\xfe\x97N0\xa7\xdf\xd5\xabW\xb3\x15\xc4\ +\x82\x1c\x88\x1f!\x8e\xac\xcf\xbci\x08\xfd\x0f\xa9o\xdf\ +\xbe\x85\xf9\xf9\xf9rcA\x88\x1b{\xf7\xee]T\xdf\ +\xf9\xd2P\xfa\x1f\xb6s\xc3\x86\x0dY0\xbf\xb3<\x98\ +o\xfd\xfa\xf5\x19\xf5\x18\xf3\x89\xf6?\xbd\x01\xb4\xb3\xac\ +M\x9b6%111\xb2\xb0 \xff\xf3\xe7\xcfy\x00\ +7\x964\x04\x9e4\xa4\xfe\x878n\xd2\xa4I\xd9\xd2\ +\xb0 \xc4|\x00/f\xd7C?\x9f\xba\xff\xff\xf3\x0b\ +RBCC\xd3%`\xc1?9\xa0\x1b\x00\xe6\x13\xed\ +\x7fZ\x03jo\x19\xc0u\xf9\x05\x05\x05\x15\xf6\x11C\ +|\xd8\xa7O\x9f\xc2\x86\xc4\x0b@0\x06\x0e\xdd\xc0\xda\ +\xccZ\xb7n\xddo>\x9fO\x15\x8a\x05\xa1\xfb\xfb\xfb\ +7\x14\xcc'LpM\xebK\x03k3\x8c\x17\xc4\x00\ +\x9c\x97^\x8e\x05\xa3\xa3\xa3s!>lh|\x00\xf4\ +\x11\xd0\x95\x06\xd8n\xde\xb8q\xe3~\xd3h44\x9d\ +N'B\x5cX\xcf\xfd|b\xd7\xc9\x01\x9d\x03\xe4\xd5\ +\xd00\x80 \xa7\x0c\xf1\xf4\xe9\xd3\x9f._\xbe\x9c\xd4\ +\xb8qcj\x03\x9c\x03\xf0|\xbbE\x80,\x01\xa55\ +\xc0\xf6\xc3|\x12\xa9\xc0\xd6\xcfj\x88m\x07\x04\xf3\xde\ +\xf7\x02\xa4\x07\xe8B\x03\xe5\x01\xbf\x01\xd9\xfa\xa2t\x02\ +Pc\xe4\xbf2\x1e\x10\xae\x81\xf2\xa1!\x12\xcc\x93\xec\ +\x88\xfc\xbf4\x03tU\xcd\x97\x06C\x97\x00\xe9#\xff\ +\x96\xa1\x802\xd4\xbc\xa9\xf7\x04\xcf\xba\x1a\x8cT,\x9a\ +\x80V\x09p\xa1\x9aO\xf5\x93\xe0y\xb9\x9e\x82\xbe\x16\ +W\x9a\x03\x0aj\x80~\xb0\x86\xe2\xeb?\x0c\xa8)\x22\ +\xbd\x18\x09\xec\x01\xf5\x18\xa8_}\x7f\x06P\x1bD\xbe\ +\x02\xc7\xc0Q\xc1\xfa\x80\x9a\x7f\xaa/\xf3\x0f*\xd0\xf7\ +\xc26\xc1J@\xe9j\x1e\xaa4\xd6\xf3\x94C\xe6K\ +*\x10'\xd8\x00\x0a\x11\xd8\x8cj\x9e\xaa\x06\xc15\xdd\ +\x8b\x80\x06I\xc1z\x8a\x148~F\x03:\x09(I\ +`#\xf0\xd5|V*?&\xec\x93\xdf\x82>r\x14\ +c\xdfWG\xd1\x15\xf8\x8c\x17\x090\xe2'@y\x02\ +\x9c\xc0TS\xad\x12Y\xc0{\xd8\x07\xe7\x05}\xd2[\ +\xc8\xa7+Wa\xfe\xfb\xa7\x19\xf1\xdf\xbf\x0drE\xfa\ +\xff\xdd\xbf\x7fk\x05\xfe\xfb\xb7\x06\xa2.\xea\xa2.\xea\ +\xa2.\xea\xa2.\xd5^D\xf5\xad\xa8>\x16\xd5\xd7\xa2\ +\xfa\x5cT\xdf\x1f\x982i\x5c3\xbd\xf60\x06\xa0\x99\ +\xd3\xf8\xd1\xd3\xfeS\xe1\x1aH\xe3F\xe0?\xfa\xe6\x05\ +x\x041\xb7u\x1a=r\xc6\x86t\xfc%\xaf\x93\xad\ +\x97F\x16\x97\xb5<\xc6y\xe3\x1b\xee\x18v\xa0q\xe8\ +\xce\x83\x16\xbd\xd2\xf3\xd7\xb4\x1c\xddhG\xab\xd5\xc6\x9c\ +\x8b\xf6\x8c\x90s\x03(\xf8\xf8\xcc\x01\xc5\xdf^\x0fX\ +[zn-{T\xd0\xd6\xcd\xec\xe7O,wZ\x0c\ +\xde\xf92w\xe7\xe0\xc1\xa1\xb7c\xbbO\x19\xe3=;\ +\xc2\xf7\xd4\xb9S\x9b?m\xb9=V\xff\xf6\x97M\x03\ +z\xf7\x1e`\xfed\xdb\xe5\xdb\xdfbQG\xf6o\xb7\ +'E%pl\x13\x9c\xaf\xae\xeb:e\x94V\x979\ +V\x86\x03~4\xd5\xff\x968jZ\xb4\x8d\xcb4\xfb\ +\x8d\xa3[:\xb6x\xfd2\xf0\x10zLk\xbf\xa6\xe6\ +\xf3\xb1)S\xba\x99>\xd8\xab\xfd\xfd\xa5\xa1\xbe\xb5\x81\ +\xff\xf8\xf7\x81\x1a\xcd\xda\xcf8\x9030nC\xde\xbb\ +\x1d\xda\x874\xc9\xb1\xef\xf7\x11H\x83\xde\x8c\xb2\xdc9\ +>\xb0KY{r\xc6\xd8\x8f;]3\x0f\xec\xf3\xb3\ +<\x1c\xbc\xf3\x5c\x14&j\x87\xd6>\xcd5\xfb\xf3Z\ +\x1f\xcd\xeb:\xace\xd76\x1ai}\xaf/\x88q\xb7\ +=\xdc\xc3Z[/\xf1\x84M\xc8\xad\xd5\x0b\x8e\x8d\xd5\ +m^\xb0\xf8\xe2\xae\xcb\xa3\x1bu}1-h8\xa9\ +k\x88c\xef\xeb'^x \xabcC\xb5\x08y\x8d\ +'u\xb1O~\xbf8kJ\x93\x9b\x8b\xb5C\xdew\ +\xb0X\xb1\xd5\xe3\xc4\xc9\xd1\xeds\x0a\xbc;|8\x95\ +\x7f\xb4\xf3t\xaa\xf3\xb3Y{\xcb\xf6\xd3\x9d\x8c\xa188s\xce\x22\xa7L\ +\xca\x8c\x9a\xb4\xd0>\xfdA318\xb4\x0de[H\ +\xb3_m\x0e\xfb\xc6\x1f\xdb|\xd4+4\xdct\x9c\xf7\ +$\xd3\x80\x0f\xda{\xf7\xb6e\x8c\x98w\xc6 p\xc6\ +\x5c\xc2\xca\xbd9\x91Ec\x83\xef\xd2\xa6\xac@\xb4\xb5\ +\xda\x8ep\x19\xb5k\x0f\x0d\x83\xf4\xca\xc2_\x1d\xb3\xd6\ +\xe8\x9b\x87\xd1\xd3\xdd\xcewn\xb4l6\xad\xcf\xce\xa3\ +{\x8d_\xfcZ\xcaux\x9e\xfa:~\xe4\x8bw\xf4\ +\xeb$\x0d\x87K\xb7i\xabW\x046z\xe1\xe8\xbcx\ +\xd8\xc4\xf5h\x0d\x94\x09{\xdb\x91;\xdf\x835\xfa\x16\ +\x1d\xf1$\x9d\xf1p\xed\xb9\xc1\x225q\xfcb\x7f;\ +{\xe4\xfa\x8f[\x1f\x83\x86-\xd0E\xda\x99\xf5\x7f\xb0\ +\xff\x8b\xee\x0a\xbb\x9bwG\x8d\xdc;t\xe0\xb2_W\ +\x915k#m\xbe\x86\x7fO\xe1\xff\x1af3\xbe8\ +b\xea\xf6\xa4\x91M\x96\xfd\xf0|8\xdc 0\x89\xfa\ +:\xf8\xcd\xb5\x96_.\xcf?\x96U\x9a\x19\x9c\xc4\xc1\ +\xc6\xb7Y\x92\x1b\x9aw\xdbFc\x0a\xe6\xc6\x9b\xe2\x81\ +\xcf\x163W>+4.\xfc\x89\x5c\xbaCK\xbd\xdb\ +\xb4Y\xefy\x01M\xae\x5c\xc4\x91\x9dW\xbb\xbc~O\ +\xba\xd1\xfe\xbc\xcdU\xcc\x8aKiH\xfb\xe4\xc8{\xb4\ +\xe5\x1f\x12\x96\x9a\xad\x19\xb19\xc9\x04\xbb\xef\xfe\xbd'\ +\xc7=\x1f\xc4\xb8\xcd\xb4h\x87sA\xf6hg]h\ +wd\xe5\xf5\x17\x03\xe9F\xab\x97\xdb\xe8\x85\x9b.j\ +s\xb5\xd3\x9d\xa7\x8d\x03\x9fo\xd6\xb2\xb9\xb7\xf4\xe4\x0d\ +K\xcc\xfd\xd3\xb4\x937\x1f%/\xbe\xdf\x8f\xb6T\xe3\ +\xf8\xe4O\xae+\x96D\xfe\xc8>\xbd2\xe4\x98\xa5~\ +\x90\xc7\x84\xbec\xb1_4\x9f\xf9\xbf\xf8\xf8cF\xd7\ +\xd2\xce~\x03\xc3\xa7\xf7\xcd\x0a7]>\xe8N\x17\x8d\ +\xf1Z\x09K\x8d2\xd0\xa1\x0f|\xda\x15j\x9d\x9ei\ +\xdc}\x0a.\xcc5\x88\xddrD\x91O\xce\xb0s\xd9\ +\xb6\xd1\xc6I:_\x87\xc5\xcd{\x93\xf7yz\xfeM\ +\x9f-\xc8\x89\xed\xf3\xb6\x9d\xdeu\xe5\xf7\xa9|\xd7\x98\ +\xc8\xc3\xd9sq$\xd7C\x9b\xc2\x90\x1f\xe3>N\xc6\ +\x14\x0e;>\xaa\x0d\xbb\x90=\xce|\xff\xefM\xb1\xbf\ +\xaf\xda7z\xf7|Lr\x92\xcb\xb2\x0fK-\xbd\xee\ +yk\x0d\xea6\xcdl\xea\xfb\xc8\x16\x81\xfd\x9f\xf5\xda\ +\xf2\xd6o7:\xc7\xd3\xd3\xcc\xca\xbe\xe3q\xed\x95v\ +\xa5+\xa6\x18h\x8e\xff\xae\xefpo\xc0\xac\x09D\x7f\ +\x8b\x13K\x8f,\xf3i\x87\x99c\xb05\xff\x8e\x96\xc6\ +,\x9d\xf4\x13\x94\xf5\xdd\xfc\x87\xcd\xcc\xbe\x93a\xb5\xe0\ +`\xf2\xa6\x12\xc3 \xb4\xf6\x88f\xb6\xb9\xdb>X\x84\ +\x9df\x0f\xbd\x83\xef\x99\xb4\xd5t\xc57\x8fW\x8e\xe3\ +J\x92\xde9\xae}6\xef\xe7\x0a\x8bQ\xe8\x89\x17H\ +\xda\x91\xd6\xe6\xf4/\x9d\x8f\xcdE\xc6l9\xc5Xh\ +wx\xe9\xd6\xd4g\xbf\x1e\x7f\xe8Mw\x1f\xe9\xa7\xdf\ +)\xe0P@\xb8G\xb1\x05\xa3`l\xcc\x9c\xac>A\ +/\xd7j\x8f\xe9\x8bl\xf5\x5c\xbbf\x87)\xf9\xc9\xdb\ +\x11o\xa6\xbc\xb5\xbe\xa3\x9f\xc2\xb6\xed\xde\xaa%\x07\x99\ +\xc1~\xcf/\xdc\x14m\x1fB\x08\x1e\x122\xb8O\xe9\ +\xbe\xfdk\xb5\xbdNF\xfa\x9d\x5c\xe0\x89\xce\xe8\xe3e\ +\xec\xfbj\xe5\x8a\xbb\xb41\xe9\x85\x0fi\x11\x13;\x84\ +nm\x94\xf8\xe3w\x98\xee\x91N\x07\xf9Fc\xde\xfe\ +\xe2\xae:|4\x99\xbd\xa5\xbb^\x98^\xe0\xabk\x01\ +\x97\x1c}\xef}r3\xbe\x8f\xbbA\xd9\xb4r\xab\xa3\ +\xe1\x9e\xf1[\x91\x99\x09\xfa\x11\x19\x1d\x0aV\x97\xed\xed\ +r\xb9\xd83\xa1\xf7\x98^\x1a~s\x02\xbf=I]\ +s\xc9}\xfe\x9dG'L\x5c=M\x9b\x1d\x1a\xe04\ +\xfa\xa4\xa6'65v\xf0\xb0^\xb3(\x16^\xfe>\ +\xf9\xed\x87\xad\xdc\xeaa\xb8\xa3\x9dv\x8b9q\xd9\xcb\ +\x17\xcf8\xc5\x9d0v\xfd[\xef\xa5\x1a\xe6\x87\x1b\xef\ +O\xd0]`\xb4)c\xe8\xda\xa1?\xca\x16%\xb6\xfd\ +\xb8\xf7\xc3 \xf3g\xcd\xd0\x0c\x1e}\xfa\x96\xe9c\xebO\ +\x11\xdb\xf7LD\x1f/\xbb\xd5\xc1\xef\xc4\x90\xb1\xaf?\ +q\x97\xec<\xf0\x8bm\xdb\xfb\xc0\xd9\x8b\xef\xbe\xb9\x97\ +\xe9DO(\xe5\x87\xf1\x13\xdf\xee\xe5/O54\x7f\ +\xd8x\xd9\xaah\xff\xa2\xe7\x81g\xcd5\xcd\x9f \x91\ +\xe8t\x94moVH\x8f=\xcc\xe5W\xf1}\x87\xdf\ +\xec\xa0_\x1cg\xf8\xf6\x17\xe5\xc1\xca\xe3\xe9\x9e\x0f\x12\ +\xc2\xd7\xec\x1f\x87\x1c\xf8\x1crjX\xb7\x8d\xa5\x93\x8b\ +\xee\x06\xf4\xc0\x87\xef\xc1\xbf\xba~\xc6\x0e\xa5\xff\xa6\xd7\ +\xc7\x01\xe9\x9c\xa8\x14\xdf\xd7\xdd\x97|2G\x92\x8d7\ +j$\xdd\x0f>\xbe\xad\xd3\xb9\xd4\xcb\xc3|v\xb6:\ +hx\xda.b\xc3\xe1\x0d{-/\xf8\xa4\x8d\x1f:\ +\xe6Do\x8bV\x1a\xb1\xc7{\xdb\x06\xb5\x1ba\xca\x9b\ +\xccK|19\xe4\xb1\xd6\x88/\xec\xe7%\xcf.D\ +\xe9\x04\xfet\x08\x9d[z\xec\xc0'\x9d\xfd\xa3\x90\x08\ +/;\xdc\xc0e\xc3\xc3F}\xdd\xbbs\xee\xb9\x01\xf1\ +oi\xe3\xae%\xbcz>^\xd3c\x91[\xf0\x93\xd4\ +d\xdcM\xda\xa1.nSZk&v\x1d|\xa3m\ +\xfb\xbd4\x9e\xc9.G\xec\xb5\xdc\x85CW\xbe\xa4\xdb\ +\xdc\x1a\x1e:\xa4\xd5\x97\x13\xfb6\x9c\xd4\x0f7)h\ +?\x95j\xd4\xf6\xfd\xc0\xe0/\x99\x9b\xbd\xf6x\x8c\x0d\ +\xe1\x5c \xe0\xd3;\xe3}\x8d\xf9\xd3\xae\xac?\x13\xfa\ +\xeaP\xd4\xfc\xc7\x99a\x1f\xd6\x11fNh\x944\xb2\ +\xe5,\xe4)a\xcc\xfa\x0b\xa7\xb8\x13\xfb\xff\xc8b%\ +L\xb4\x19x\xf0\xf8\xb6\x85i\xefo\xc4\xb9q\xd0^\ +7]\xd6\x9cx\x9b\x5cl\xbf\xad\x91%2,,\xb2\ +lj3\xefN\xfc\x11\xf4u\x09\xf6\x98+\x94\xe83\ +It\xad\x9f\xd3\xb7\xa2\x92F\xa6\x13{\x7f\x7fj:\ +\x87\xf8\xf0J\xa2\xf6;\x17\xc2\x16\x8f\xe5\xfd\xaeR\xbb\ +`\xd3\xcc\x87g\x0c\xfc\xb0+hX\x0eu\x98a\xcf\ +\x85\xe1\x09%\x1b \xc1\x83}\x8a\x16eb\xe7\xd5yb\xdb\ +\x1f\x17\x9ft<\xbc\xd4\xee\xd3\xaec/f\xa7\xebz\ +k\x86k|x\x86\xe4-\xbd\xd3\xady\xcf\x8d\x85\xbe\ +\xe4{(\x8f\xc5\xbfFl\xda\xf0\xebe\xca\x86E\xc8\ +\xa7Cv\xfd\xbf\x7f|\x1e\xa3\xd39\xd6}dg\xbd\ +\xc0\xd7\x83\xa2\x0e\xac\xc7\xc4\xdd\xda\xbe\x83\x18\xf2^\x9f\ +\xdd\xca\x7f\xfc\x99y\x89x'\x1d\xc7O1\xce\xed\xa9\ +\x17(/\x1a\xed9\xdb\xd5|\x84\x86\xc5\xd6\x84\xb1E\ +\xc3\xe38\xdb\xd6\x1c[\x9c\xc7x0{m\xcf\xb2q\ +\xf1k~\x91\x9c^\xee\xceyVzt\xefr\x9d\xd6\ +\x9a\x87\xf5\xf4\x98W\xd7\x120\xebQE\x0e\x01\ +\xdd\x22G\xa5O_q\xc3\xea\xf7\xb5\x9c~\x11\xad\xcc\ +\x83\xc8\x98\xf0\x95\xbf\xf5\xcd?\xe0\xfa\xf6\x1a\xd8#\xf8\ +\xa9\x8e\xc7\xc4o\xcf\x82\xc7\x95%\xfd\x080\xdfn}\ +*\xb1\x07\xb3}\xe4\xdbY\xd9\x07n\xc6y\x07\xae\xb9\ +\xe9\xbd\xf6g\xab\xd6shW\xde\xf5ANpg.\ +\xb8s\xc4\xba\xc5\xf6N\x94y\x0b\x1e\xf5s=\xcez\ +;\xf6\xdb\x93\xb9\x8c\xd7A\x5c\x9b\xbe\x83\xb8_\x22\x7f\ +M\xd6\xbf\xbfn\xe2,\xcd\xd8\xc9\x98\xed\xb3\xf3\xcd\x83\ +\xf8a-s\xe8\x99\xb3\x0d7>$\xae\x1f\x9fp\xde\ +\x7f\xc9\xe2m\x8bR\x8e\xfaX\xbd\x9eh\xc3\xd0_Y\ +0td\x93\x11\xc7f\x19\xbd\xfe\xaa\xd3\x0cC\xdaC\ +\xd5\xcd\x1b\xb5\xf7\xe2\x9d\xcc2K_\xd6\xd3\xbc.\x0e\ +\xce\xee\xc3t\xf0\x8e\x19\xe9\xc1\xeeSx{\xf6t\x0d\ +\xcc\xec\xd8q%\x15 \xca\xd9\xab\x03\xbc\xcf\xbc\x8c\xf9\ +mq7!\xcc%=g\x0c\xffB\xf2\xb9\x14\x8c/\ +\xa1\xf5O\xcd\xb0\xd5\x8d\xdea4\x1fY\x0dX\x85z\ +\xcaZ\xb5n\x5c\xa9~o\xf0\xea\xfd\xb7\x1d^\xe0c\ +Q\xb1k\xb5\x0b\x9fvx\x948G#b\xe7\xce\x96\ +\xc8\xa5\xb9\xd9\xaf'Zv\xbe\x1c\xdf\xe6\x0d>\xcbr\ +\xf2\xachNY\xf4\x03\xceR\x87\x93\x8f\xaf\xde\x9fQ\ +\xf6\x92~`\xd2\x1c\xab\xc1#,4s\xdd\x8dl\xb0\ +\xab\xfc\xc9\xa4\xee\x91\xd9\xc1\x17}\xbb\x06\xb5=z\x10\ +\xe5\x9e\x84\xfb\xf9\xbe_~\x81\xd7\xbe\xc5O\xdf\xfb\xcd\ +\xb6\x18<\xa2\x93\x1f\xe2Tr\x83j\xa7s>\xf3b\ +\x0f\x83\xeeG=\xd7\xb4\xf1j}\xe2\xf7\x9b[\xc3:\ +t&4u\xbc\xd7\x163\xb8\x99\x95\xa6\x9f\xf6\x9e\x85\ +\x1a\xa9\xaf\xfa\xd9\xdeK\x09f\xf0\x0a#\x87\xfb[\xdb\ +/\xdf\x13\x7f\x94>\x10\x1fL;Qv\xb3\xe7\x91\xc5\ +\xe1^|\xed\x85\xf7\x9b6vD\xee\xbe1:\x95\xf4\ +\x00\xb5\xb5lV\x99?{\xf7\xeb\x11o\x98\x03t\xb4\ +Y~8\xff\xa3]\x8eR\xa7\x1f\x9f{\xff\x91\xc5\xee\ +\x1fsO\xea|\xe6\xec{\x97\xfb\x85\xdf#|\x0d\x19\ +\x15\xf4\xcd-;\xe0\xba\xd6^\xbd\x10\xa36\x03\x08g\ +B\xd6\x18N&XD\x946\xa1\xad1\x88\xed\xd2x\ +\xd0(\xa4\xed\x95;\x8bw\xa5{8\xe6$\xcc\xca\xf1\ +\xc7F=\xfd\x06\xd4ol\xbc\x8d\xcf\xe2\xe3\xa8\xb7^\ +\x07\x92\x22F\xf6\xdd\x9d\x1d\x1ae\x84\xe0WN\xceY\ +\xb9$6\xebm\xec\xb1OS\xb7\xde\xcc\xdf\xaa\x99\x84\ +\xed\x92~\xcd\x9a\xcc\x9d?6,\xf5\xf1\xb6\xe0|\x9e\ +=j\x8b\xd1\x08\x9f\x1d\x9b\xc3'L\xf6`\xc7y\x90\ +\x08'\xa9\xa7r-[t\xc1\x84\xfb\x9eY\xb7\xf1\xc0\ +\xbc\xe1\xd1\x0b6Ozz\xe5rT\xfe\xcb\xc1Dw\ +$\xf2\x8d\xcb\x9e\xb9\x13\xf6\xf3\x0by\xba\xd3\xe6\xcfN\ +%\x8d)\x1b{\xf5\x0a\xfb\xe7\x16\xab\xf7\xc7{l\x8d\ +\xf5\x0d\xf7\xf9\xb6bC\xa9\x1eyx\xf3\x16[\x07r\ +wO\x9dT\x1a\xdfm\xf2^\xba\x97\xf9\xa9ue{\ +G\xedq\xd9<0gwl\x17M=\xde\x89\xe8q\ +\xa1\xb9\xb4\xe8\xb5Q\xcf\x91\xbe;\xbe\xbb/nr\xe4\ +\xb2\xe3\xb1yiko\xeay\x1bZ\xb7:8\xe0f\ +\xd6.k\xb2\xfbH\xaf\x13\xeb\xd7^=\x97r`\x91\ +m[\xa4`k\xf7\x97\xb1N'\x8a\xc9\xbb\x1d\x18\xaf\ +}\xbf\xb4\xeb\xbef\xa2W\xd2\xe6\xe4\x02\x0dp\xdd\x9c\ +W\xa9\x11\xe6\x9f\x98\xe0\xab\x82]o\x83\x02K2\x89\ +\x9b\xc2\x8f]?\xb9x\xff\x96\x98wm\xc7\x9c\xf1\xda\ +\xd9\xed\xfb\xba\xf3\xcfc#\x17}:4\xeaY\x5c\xea\ +\xc3\x10\x93B_\xdf\xa9\xd9s\x90K\xdb\xd7\xae>\xba\ ++\x0a\xbf\xb9\xfb\xa6\xd8\xed\x1f\xa6\x8c-\x9d\x7f`u\ +\xa4e\xd3qv\x1b\xc1S\x7fw\xc8\xd0\xdf\xd6\xd7\xf7\ +\xd6\xae-mFl9V\xdc\xf3\xcc\xc5(\xc2r\xf6\ +\xfd\xedg\x86\xba\x93M\xf3\x0a[<\xf3\x19t\xb9w\ +g\xb7)\x0b\xddK#c\x9c=\x96M\x9b\xc7\xec\x09\ +\xf4\x15\xd3\xe5\xf9)\xdb3A\x87\xc6<\xbf\x11\x8f\x9e\ +`\xc1kg@&\xac\x1f\x9e\xef\xb7\xc6\xa4\xd3\xa5E\ +\x5c\x97\xe8\xb8\xa4'-=\xf4\x02\x8dgeo\xf5\xd5\ +\x1fs\x91\xfb\xb9[\x10\xe3\xcd\xf28\xd7B\x86\x01b\ +\xccyE\x7f\xb4)\xeeU\xe3)7?\xf7\xdd\x9e\xd2\ +%\xafp]p\xd0\xa4\x05\xdb6%|\x1d; \x82\ +\xb5\x9c\xf3\xba\xeca\xd4\x1c\x7f\xecr\xe3)n\x13\xcb\ +&\x17Q\x82\xcbn~\xdf{f}\x12\x87y\xd6\xf2\ +\xdb(\xfd+\x8d\xdf\xb4?_\xd0\xd5\x97\x13\x12Tj\ +\xb0\xdd+d\x03\x830\x8c\x1a\xf3\xc0w\x9f>\x18\x19\ +\xb4\x8b{\xddB\xbf,\x98\x193\xbeQY\xa3\xe0\xb9\ +[\x0a1`(\x12\xce\xd9e \xc4oi\xc3r\xdc\xb7\xa2\xc8\xea\ +\xb0\xa6Y\xa3\xc0L\xef\xed3\xfc\xd7\x1f/cS\x9f\ +\xaf\xff9t\xa9\xb6o\xeb\x90\xf0;{\xae\xad7v\ +\xb3\xf4\xbf\xef\xe4\xfc5.\xdf\xec\x22\xce\xe3\xde\x94\xe3\ +\x84y\xa7)T\xc2\x82\xcd\xf3>\xc5L\xee\x14\xd5\x02\ +\xf9\x95\xf3-\xf5\x84\x93\xce~\x97\xd0-W7\xae\xcf\ +nm\xb9\xb1\xdf\xa5\xf9\xad\xb6\xbb\xde\xe9\x7f\x98\xfe<\ +:j\xd2\xa6\xa0\xb7\xa8\x11}W\x1e}\xb0\xd0\xb7\x87\ +\xe5\x82\x82iq\x01\xd3\xc7MD\x19'\x186\xf9~\ +\x22\xf0\x13\x15\xff\xf3\xa9\xcf\xd1!!c\xd3\x92\x13\x0f\ +\xbd>\xde\xea2\x10WG0\x837\x1f[pb\xd5\ +\xd8\x8f\xfa\xb3\xa7\xbby\xe5\xf4r\xeaKzp\xfa\xc3\ +\xa4M\xb6g^\xa3\xd3\xce\x99\xad\xba\xffm\x8f\x89%\ +\xf71\x82\xfc\xf6\xcb\xa0\xaf\xdb\xbd\xc5|\xec \x1b\xbb\ +qCGus\xc9\x5c4y\x99\xd9\xf3\x09\x07\xedo\ +-=\x1f\xe3\xf2\xf5g\xb7\x99\x94B\x13\xeeJO7\ +}\x12i\xd5@\xee2:\xaa\xf5\x1b\xf7\x8d!M\xb5\ +\x02\x97\xdebo\xb0\x9a\x5c\x9a\xee\xe56\xe1\xf4\x9e6\ +\xa8\xc1\x81\x17\x08\xdb;\xfb\xa6\x04\xf9E\xb7:\xb3t\ +\xad\xbfk\x93\xa4\x91\x85\xb9\x05Z_\x0bQY\xce\x14\ +\xcc\x89c\xf3\x9a6=\xf5ju\xc1.\x07\xcdw\xef\ +\xb8\x0e\xcd\xe8\x8ccFS\xef\xdc|\xb0<#\xf3z\ +\xcc=\xb6\xdb\x8d\xa2\xa11\xdbJ\xa7a_\xb5w\xbd\ +\xb9\xf4z\xab\xd8Ik\x1fYZ\xdclyyIv\ +q\x96)\xe1\xc2\xec\xb4\xde6\xa6\x1b\xba\x22\xb1G'\ +\x0dm\xed4\xee\xc0\xebVq\xad(\x07w\xef-a\ +\xfe:\xfe\xa9W\xf8iT\xc0\x04\xe3g\x09\xceFc\ +\x0eL{=\xc4{\xd5\x98M~M\xe6\xba\xdd4\x1c\ +g\xa8\xdb;\xeb\xcd2w\xe2\xe7&\x8d\x90\xd6\xe9\xfc\ +fFv\xdd&\x12\xe6\x0c\x0e\xa3\xb0\x1b\x1f-n\xbf\ +\x15\x8f\xc1,\xfb\x90\xa9Q\xd8\xa7x\xef\xb3#\x0b\x08\ +#z\x0d\xc8yzL;b\xf8\x99\x88\x92\xb2\xc5\x83\ +\x7f\xbb\xb3z\xbb\xd9oy\x82 \xf1\x09Y\xc6GO\ +'z\x05\xa4\xff*6\xdf\xc4\x98\x15\xe3\xbc(\xa8\x87\ +\xe9\x93\xe0[\xe7'\x84\x7f=\xfc\xf6\xe0\x8f\xc5}\x9b\ +\xfb\xe9\xe4<=\xf0\xfc\x0ej\xb9\xd1\xa1\xd2#\xdb\x06\ +,v\xec\xe7\x9e\x06\xc4\xdc\xc5m\xfb\x0aO\xee\xeb2\ +\xf9\xcc\xe3\x87\x8d\x87\xc6\xdcM\x8c\x8bo\xf2<\xe9h\ +X\xe6\xdb\xbc\xf1\xed'\x9aD\x9c\xe3['3R{\ +\xf2\x97\x87v\x8a\x1f\xbf\xcc0\x87\xf9\x023\x8b|\xb8\ +\xf8\xee\xbb\x01\x1a\xc8\x0e\xe3G7\xb2P^\xe7\xb5n\ +\x9d \x9b\xa6\x0e\x225\x8b\xd8|\x18ug\x99\xcdU\ +\xf7\xfb\xb3\xcfLis\xe1\xc4\x14\xeb\xac\xb9_\x12\xcc\ +\xc7\x14\x1c\xdb\x13\x92\xfa\xf6\xea!\xdb\x82\xb0\xbb\xc4\x04\ +]\x04Y\x1d9\xf9\x92\x19\xa3M\xc6\xbd\x1e\xbf\xc2\x0e\ +\xe1\xfd\xdb\xce\xddy\xa3?#\xe0\xbe\xeb\x84\x03n\x98\ +\xb1\x8e\xa5s\x1e\xbcyu\xa2\x97\xff\xe6B7\xf7\xe1\ +\xfaZc&\x8cz\xf2\xc3 \xf3rF\x04\x96n\xd9\ +i\xef\x99\xbb\x8d\x02\xaf\x14\x06E\x1f\xba:\xb5\xc7\xec\ +\x1dZ\x11\x93;D\x84\xf6\xde\xec:\xf9\xd5\x9a/\x1b\ +l\x8e\x5cY>lp\x9c\xcb\x98k;\xbdh\x9c\xe7\ +/\x9e\xb6s\xb9\x8f\xa1\x5cMq\xb9\xfa\xe4\xf9\xc3\xfb\ +:Qm\x10\xd4-\x1ag\x91V\x97qlJ\xf1\x96\ +W^\x97\xc3f5\x0d9\xf0\xa8\xb9\xed\xc3\xd0\xe8\x8e\ +\xfeW\xd7O\xee\xe5\xba\x01\xb3\x08\x13r8\xe5\xf1\x85\ +W\xa8\x8e\xd6\xfe\xef\xc7ty\xb5\xf8\x16\xcd0\xf5\xf5\ +\xba\xa8b7\x9c\xc6\xe1I\xd1a\x09\xd4\xf0 \x93\xbc\ +\x9f\xcb\xd99\x13/\xf9X\xb4O_\xe8\x8b\x99u\xab\ +\xff\x0cs\xcc\xce\xfe\x83\x1e\xb8M~5\xa7dj\xdc\ +\x8a7>[\x06\x9c\xe8\xf8~\xd2c\x92a\xb6Vt\ +\xe6K\xd3Q\x86\xfa\x93\xb7\x22\x08\xb2>.\xea\x08%\ +\xf3\x22\xf5\x18\xb3\x7f\xd4|#Kv\x86+\xdd\xf7K\ +\x8e\xd7\xc3\x89\x19C&\xf8\x07\xf9-\x1e\xeb1\xd0\xcd\ +\xea\xe6\xc6\xe9\xeb\xcd\xd7M\x9f\xb3\xe1\xa1\xe5K\xedK\ +\x05\xe9\x91kB\xf3\xc2\xb4\x91\x05\xb6\x8bl\xdb\xc7\xb9\ +\x13\xf6<\xddV\xf6|\xcb\xbe\xd7\xb7\xa7\xba8\xa0\xe7\ +\xdd9\xe6v\xd7\xb7\xc5\x8dg\x0f~\xda\xe6\xf6k\x7f\ +\xfe\xf8\xfc5\xab\xe2X\x8fr\x5c\x02\x9dc\x9a\xefs\ +\xb0\xda\xb9\xfcG\x19.\xef\x05\xd2\xc2\xdf\xfb\x9a\xa5\xf6\ +\xde\xc9ORwt\xc93\xc0G\x84\x1a\xfdN{z\ +\xce\xcb\xcfuA\xc2\xbb\x95\xe3\xd3K.,\xe8;,\ +#\xc1+hNsNZ^\xe7\x92\x92\x88w\xae^\ +\x17{Dl\xbf\xf6~\xad\xc6\x88M\x1f\xb6u\x1a\xda\ +\x82\xcd:s*\xe2\xe7\x8b\x99y\xbd\xedo\xd1\x1f\x1d\ +\xec7\xc8\xba\xcd%\x7f\xa7gAg]\x9b^\x99\x85\ +\xd7\xc4\xbf\x88\xba\x1a\x95\xc9\xa1D\xddhA{m\xec\ +0\xd3\xf1\xf5Z\xef\xdcWH\xf0\x0bB\xf0\xd6\x8e}\ +\xb9\xdf\xb9\xddu\x9f7\x0fy\xd2\xc6\xa5\xa4Wf\xe9\ +\x5cK\xcb\x1b\x09-Z\x1e\xfe\x1e9\xb2\x7f\xcc\xdc_\ +\x8b\xa7m\xc7\xa5\xb6\x9a\xcc\xf7\x1ev\xd6\x8ck\x1b5\ +\xea\xfb\xcc\xd7[\xe7\xdd!z #\x8aO\xcekR\ +\x96\xd8\xb57\x0d\xff\xfb\xc5\xf7]c\x8a\x7faK\xe9\ +\xa8\xa8V\x91\x87\x0d\xafE&\xf1\xb7L\x9bJ\xb5\x0e\ +~Rbs9jw\xa3\xc0\x8b\xaf\x084\x0d\xdf\xb9\ +.\x96\x1dZ\x0e\x1cb\x9a\xa0\xb5w\xca\xeb\xa5\xc3\xcf\ +\x7f\xfb4\xb51{\xfet\x8f\xb0\xb6[\x9f\xc7\x98\x1d\ +\xb6\xb4\xe9\xf9\xd5\xdb\xc4\xad\xe9\x04ow\xaf-\x9d<\ +\x9e!3~\xfe&\xce\x8d(\xd3{\xd2\xb3lG\xa2\ +\xee\x83\x82\xc6\x8en\xcd4f!\x9d~0\xc7>\xe9\ +\x12\x1c\xf4\x16\xc7\x9f1\xdf\x02\xcb\x1f\xb4q\xf0\xad\x9b\ +\xae\x9e\xec\x00C\xb2\xf1M\x17\xa7\xe5?\xb6,t-\ +;\xb7ts\xc0s\xce+~\xca\xcb>\x09Yo;\ +\xb7\xe3\xda\x9c\x9c\xe75w\x90gPr\xbe\xeb \xb4\xdc\xc2\xf6\x84\xbf\x97\x16+\ +\x02\xcdj\xbac\xd6\xc3;\x98\x13\x8b9\x01\xfc\xfe\x91\ +\x15\x86\x00\xc0\xca/\x87\x0f\xe7\x7fj.:\xfd\xcb\xce\ +s\xff#f\xba&\xd0\xf0\xd2Z\xca\x18=\x95\x0f\x18\ +\x8aXNI\x94>J\x9dk\xcb7\xd5\xf0r\x91\x93\ +e\xf0_\x85 \x00P\x09s\xa4)\xab.6Ru\ +\xdfo \xe0\xfe\xe2V\xf0\xb0\xf1\x0b\ +9\xc2\x16\x00b\xb7\xfd.\xdd\xdbU\xa3u\xb9\xc4\xf9\ +\xab\xbfU\xb2\xb7\xd7\xfa\x1a\x8c\x0f!;\x81\x00\xa0\xfe\ +r\xf6[\xfe\x1c\xf9\xe6\xad\x15$\xdd\xf1F\xa0\xe3n\ +!\xa4~\x17C\xe0\x16\x00\xc8\xb5\xfcAu\xdaC\xbe\ +]S\xc5\x08|\xde\xbf\xb3Y\xc8\xee\xdf\x10\x82\x17\x00\ +\xa4\x9d\xf3^\x0f\x0e\x90\xef\xdcY\x19\xd8@\xd7\xef\x07\ +\x82\xf3\x84\x93\xfb7\x1a\xc2\x17\x00X\xc3\xdbS?\x0c\ +\xa0\x9c\xbd~\xca\x86\xeb;\xe4\xfft.\xbf\x0b\xbf\xc9\ +\x10\xba\x0f\x00\x00L\xa8\xf5\x0f\x99\xee\xf2\xb7},\x9d\ +\xccE\xef\x1fd\xf1f1\xfc|Dp\x0a\x00\xb4'\ +o}\xcb\x9f\xaf\x9a+\x98\xee\xda\xed?3\x9b|\x93\ +8>#\x0e\x01 a~C\xf7\xad\xafJQ\xc1\xe8\ +\x89\xc0NGF\xd0\xb3\xff_\x10\x89\x00\xa0\xba\xd4\xb6\ +-\x11\xed\xabBT\xb0\x10\xec}#\xd9\xdd\xca\xdf\xbe\ +_\xa5!\x16\x01 o~\xc7u\xcc\x8f\x09\xcf\xd4e\ +\xfd\xef\xf9\xdfo\xe1x\xb0\xe7ge\x10\x8d\x00\xc0x\ +\x9do\xd0]\x1e\xa2.\xe3\xe53x\xd9\xbdE\x11v\ +\x89\xe7\xba\x89\xe6D\x00\x18\x8f\xbb\x0eD\xd2\x13j\x03\ +\x92\xc1\xbd\xf1\x93\x0db\x98\xfe]CL\x02@\xc2\xb5\ +Ks\xd6=\x81\xab\xf3\xb1\xd3}{u\x19^\xec\xf9\ +[)\xc4\x10\x07\xf8\x05\xc5\xf7\xaem\xb9p\xa0\xe4\xdd\ +\x7f\xc9\xc8\xf9\xbd[\xd8\x8bM5LA\x9b\x00De\ +\x01\x00\xce\xf9\xb6\xfa\xb8\x97\x9d\x10\x1b\x90\x8f\x7f\x14x\ +W\x07^\xf7\xfd,\x1d\x91\x09\x00\xe8\x9f\xbaM\xd2\xeb\ +\x9e\x00W0\xd5\xd5\xbdM\x12&\xdf#T \x88N\ +\x00\xd0\x1e5\x1c\x8c\xa7J\xd9\xfe\x99\x04.\x19\xdb\x97\ +\xf9\xd4\xca\x8f-\xdf+\x89\xb8|\x00\x00@z\xdaN\ +\xc9\xc5\x1e\x10oEO\xc4\xe0\x99\xee\xddL\x9ew\x9b\ +\xbe\x8d\x1f\xf1Y\x00\x80\xfe\xa6y[!\x1a\xa8`T\ +\x90\x0d\xf9\xb6\xe2\x5c\x9b\x00z)\x95\x8c\x18\x05\x00\xd8\ +\xf6\xcb\xbf\xf4\xb1\x15K\x12)\xc4?\x09\xbe\xad\x82h\ +\xa2\x7f\xc3\x11\xa7\x00\xd0?\xf3\x0d\xb8\xdd\x15\x9a\x0e\xe6\ +\xbb{_\xe7\x82<\xda\xf2\xbd\x92\x88\xd0\x07\x00\x00(\ +>\xb0\xbe;\x90\xabHT0\x13|+\xf9\x99K\x5c\ +\xb3\xff_\x10\xa9\x05\x00\x06\x9b\xb7(~\xf0W`:\ +\x98>\xed\xdb\xae\xc8\x08>\xf7o4h@\xa46\x80\ +>\xd3\xbc+5\xe0\x1b\xef\xd7\x84\xbd\xdb2\x17Z\xc5\ +\xe8\xfe\x0d!\xd6G\x00\x80\xbc\xfe\x80\xe9\xd3\xf08\x0b\ +7\xc3\x1f\x87\xde\xb5\xf0m\xcb\xf7J\x22\xdaG\x00\x00\ +\xaa\xcf\xf9z\xe1j`\x1c\x12g/\x85\xfeD\xf9\x5c\ +\xe2\xfd\xfd\x8b[\x00\xe0T\xc7\x1b\xdf\x0d\xe7=\xe5~\ +>\xe79\x18\xf9k\xa3 \xba~\x97\x8d\xa8\x05\x00\xc4\ +\x8c[\xf4\x7f\x8db\xb0\xac\x0f\x0f~\x15\xdfi\x8c\xd7\ +\xb4\xff\xc0\xc4#r\x01@v\xd1\xb2'\x1a.\xcb\x15\ +\x0c\x06\xf7$~\xb2T\xb9\xfd\x5c\xd5\x11\xb1\x138D\ +\xd6x\xa8\xf1X\x04\xa5W\x10\x87>\x0e\x1fvd\x0d\ +\xb5\x1e\xffD#v\x0b\x00\xd0\xbd\xfa\xad\xb8\x1c)\xb1\ +\x828\x7fq`\xbb\xa4W/f\xf7o\x08\xf1\x0b\x00\ +\xd0\xff\xc5q0\x94.\xa9t,\x1d\xfcs\xf8\x84\x05\ +<\xdd\xf2\xbd\x92\xd4\x83\x00\x10\xb3\xec\xd4\x9d\x0a\x96P\ +62xj`\xaf!&\xca\xc5\x9f\x1b\xa9\x0b\x01@\ +v\xd6\xbc+\x1d$\xcd\x15d\xfd\xe1=\xe9\x1f\x0db\ +\x8d\xfe_O}\x08\x00\xac\xfd\xcf\xa6\x8f\x02\x05\xa2\xa8\ +`!\xf1I\xe4\x90>?\xe1\x9b\xcf\xf0\x83:\x11\x00\ +\xe0ql\xa3\xaf\x92\x94\x8dd;\x03;\x99>\xdeo\ +\xf9Z)D?\x0d\xfc\x19\xedq\xfb\xbe\xe4`x\x8c\ +\xf3\xe5\x92\xf1\x03\xa9\xcfL\xe2\xcb\xfd\x1b\x8d\xba\xb1\x00\ +@\xca\xb5S\xf2m_\xf1\x5cA.\xf7]\xe0Mi\ +Rd\xa9\xdf\xc5\xa8#\x01\x80\xb9\xd0\xba\xb5\x10\xea-\ +\xe2\x0a\xb2a\xdf\xae\xc2\x19\x11U\xfe\x8dM\x1d\x9d*\ +\x00\xd3A\xdd\xe1H~\xd4\x94\xf1|\xe6\x83\xe4\xbbj\ +\xb6\x0ef\xff\xbfP?>\x00\x00 \ +q@R\xeb!V\x97:\xb3\x00@\xce\xb1G\xfa\x95\ +{\x04W0{\xca\xbf\x0f)\x91/\xfe\xde\x00\x87|\ +\xdd\x09\x00\xf4\xd5\x99\x7fbC\x97o<\xef\x90g;\ +wN\x14}\xbfJ\x80C\x94FT\xe8\xdb\x1e\x95\x0a\ +\xab>l=0\xc0]\xb78\xc4\xc5\x0e%\x0fi\xf3\ +\x22\xe9\xfbC~)\x10\xa4\xd1;A\xd5\xf4\xfc\x85\x8e\ +\xb5l\x95\x5c\xe8\x1e\x16\x15\xcc_\xe8\xdf\xce\xf9\xed\xe2\ +_\xfc\xbd\x01\x16~\x1a]u'\x00@~\xbauk\ +*\xf5s_\xc1A\xdf\xae\xecI''\xf2\xdc\x9f\x11\ +(\xc0[\x9f\x02@\xc6\xfc\x96\xf1s\x1f\xc2\x00\x80\xd8\ +\xe7\xc1\xfd\xeaA\x11\xa7~\x8fJ\x01\x9d4.U\xb1\ +\xc5*\x7f\x90v7\xff;\xeb\xee\x03\x0b\xf4\x06\xb7p\ +\x9du7\xfd\x03\x00\xe4p\x9e\xc6%\x04\xeb\xcd\x0d\x04\ +\x00V\xf7\x89\xf3`\x00\x1e6\xf0\xe7\xf0'\x96\x82(\ +\xda\xbe\x96z\x09\x10B\xa7\x04A\xfc\x88\xd6:\x9b\xfe\ +\x00\x00\x1du\xee\x88\xdd\x7f%\xaf\xd8i\x08Y\xea\xce\ +\xfd\x03\x80\x02~D\x84\x01\x03\x17\x16\x8b=\xf9yD\ +d1t\x5c8\x96\xfafV\xb6\x1e\x9f\xff@\x06{\ +qB\x82\x04Nc\xb0~\xd6\xbf\x87\x934\x7fx?\ +\xe8\xbc\xa1\xd6\xe3\xa8\x09\x1c\xe28\x898\x8d<:\xf1\ +]=\xce\x04\x00N\x9e\xb3\xe7l\x5c=\xba\x7f\x00\x8b\ +\xef\xd0=\x14\x0a\xf6\xe3\xa3\x09\xee\xb0\xcb_\xe8\xba|\ +\xfa\x03@\x06\xc7\x10\x1cZ\x0d\x1c\xc0\x09\xf4\xd6\xdd\x9a\ +@}\xc3\xa1\x07_!~\xadAD\x17\x8e\xd5e4\ +\xa0~\xc9\xe1(:\xc1^\xcb\x07\xf0\xe1(zj=\ +\xa6I\xaaH\x0f>\x1c\xdafkH\x00y|\x8b\xc3\ +\xc8\xd6zT\x93T\x89\x0c\x8e\xe0\x87!\xc7\xffZ\x00\ +\xc8\x83\xf7\xf1S\xad\xc75I\x95\xb8\x80\xc3\xf8[V\ +\xd4/\x1b\x1fF`\xc4\xedb\xd9\x09g\x92\x22D\xb0\ +\x15\xef\x5c\xcb\x89\xfaE\x00)\x841\x15mu\x18\x14\ +\xae/\x0a\xf8\x18\xbfG\xf7\xb5?\x87o}\x1aF\x1a\ +\xb3a\xab\xdb\x99q=\xc0\xe1\x1c~\x87\xbf\xfc\xb2\xfc\ +7\x5c\x00,\xdc\xd0a6\xd4\x93\x12\x10)\x1c\xbc\xd8\ +\x82=\xc3Sb\xaf\xdf\xfc8\x83.\xd80\x0d\xf2I\ +\x09\x88\x92\x18\xde\xc6\xef\x10\x18\xfe\xd2\x8d\xbb_\xc7q\ +\x09\x8d\x98R\x1f\xb5\xf1uF\x12\x1f\xe1\x7f\xa1\xeb\xfa\ +\x98\xef\x8d\x02\xe0\x10\xc3%LEc].\x10\x8b\x99\ +A|\x86\x7f\xc6\xf9\x1b\x97\xfd\x98\x9b\x0ed\x11F'\ +Z \xda\xfe\xd8uI\x12\xc7\xf1?\xf0\xdd\xcd\x01\x7f\ +f\x84\x83Y\xf8p\x1e\x0e4MF\x05D\x01\x87\x01\ +|\x84\x7f\xc1w#\xd5D2#~\xa4\x00?\xceA\ +\x07\xe7\xe4\x8c@\xf0p\xf0\xe3m\xfco\x9c\x1d\xb9$\ +\x96\x19\xe5c,\x82\xf8\x0eY8`\x9e\x94\x80\x80)\ +\xe0\x02\xb6\xe1w\xe8\x18-\xe5\x87\x19\xf5\xa3\x1cb8\ +\x03/\xd4\xb0O>\x0a\x04\xca\x00\x8e\xe1\xffb\x17|\ +\xa3g{0E\xbf \x8d\x9fp\x16q\x98a\x1c\xe3\ +\xc8I\xf8F\x0e\xe7\xb1\x15\xbf\xc7\x17(\xbay\xd6X\ +\xb7\xb5\x00\x0f\xce\xe0\x02\x06a\x85fr\x9d@ \xe4\ +\xd1\x8d7\xf1{\x1c\xc0\xd5\xb1\xb2=\xc9\x9e\xef\x0c\x5c\ +\xb8\x03\x8f\xe11\xb8 \x9b\x94\x01\x8f) \x077>\ +\xc0\x078\x8d~\x92\x82\x1fr\x07O\x02;\xa6c1\ +\x1e\xc5\xadPC\x02f\xd29\xe4\x11\x1c\x0a\xc8#\x81\ +3\xf8\x14_\xe22|\xa4)~\xa5\xddD\x1az\xd8\ +0\x15\xf7\xe2n\xcc\x82\x0eR0`\xc0\x80\xe2\xb5\x18\ +\xc4\x9b\xee:t\xdb\x0b\xc8#\x86\xf3\xf8\x1a\x7fE'\ +\x02\x88\x95R\xeaW\xfa\x8d\xa3 \x85\x16\x1a\xd80\x1b\ +\xb31\x13-\xb0\xc3\xcc\xe3\xa8!\x8b\xb4H\x13^9\ +\x0c\xa2\x07\x1d\xb8\x8c\xcb\xb8\x04?\xe2H\x94\x9e\xd6\xf7\ +\xff\x01\xf66\x1f\xe8_\xafk\xb1\x00\x00\x00\x00IE\ +ND\xaeB`\x82\x93\xe4\xf7\x89\ +\x00\x00\x04\x09\ +<\ +svg xmlns=\x22http:\ +//www.w3.org/200\ +0/svg\x22 height=\x222\ +4px\x22 viewBox=\x220 \ +-960 960 960\x22 wi\ +dth=\x2224px\x22 fill=\ +\x22#5f6368\x22> \ +\x00\x00\x023\ +<\ +svg xmlns=\x22http:\ +//www.w3.org/200\ +0/svg\x22 height=\x222\ +4px\x22 viewBox=\x220 \ +-960 960 960\x22 wi\ +dth=\x2224px\x22 fill=\ +\x22#f44336\x22> \ +\x00\x00\x01Z\ +<\ +svg xmlns=\x22http:\ +//www.w3.org/200\ +0/svg\x22 height=\x222\ +4px\x22 viewBox=\x220 \ +-960 960 960\x22 wi\ +dth=\x2224px\x22 fill=\ +\x22#5f6368\x22> \ +\x00\x00\x02\x1a\ +<\ +svg xmlns=\x22http:\ +//www.w3.org/200\ +0/svg\x22 height=\x222\ +4px\x22 viewBox=\x220 \ +-960 960 960\x22 wi\ +dth=\x2224px\x22 fill=\ +\x22#5f6368\x22> \ +\x00\x00\x00\xf4\ +<\ +svg xmlns=\x22http:\ +//www.w3.org/200\ +0/svg\x22 height=\x222\ +4px\x22 viewBox=\x220 \ +-960 960 960\x22 wi\ +dth=\x2224px\x22 fill=\ +\x22#5f6368\x22> \ +\x00\x00\x01\xe9\ +<\ +svg xmlns=\x22http:\ +//www.w3.org/200\ +0/svg\x22 height=\x222\ +4px\x22 viewBox=\x220 \ +-960 960 960\x22 wi\ +dth=\x2224px\x22 fill=\ +\x22#ffc107\x22> \ +\x00\x00\x01\x18\ +<\ +svg xmlns=\x22http:\ +//www.w3.org/200\ +0/svg\x22 height=\x222\ +4px\x22 viewBox=\x220 \ +-960 960 960\x22 wi\ +dth=\x2224px\x22 fill=\ +\x22#5f6368\x22> \ +\x00\x00\x01n\ +<\ +svg xmlns=\x22http:\ +//www.w3.org/200\ +0/svg\x22 height=\x222\ +4px\x22 viewBox=\x220 \ +-960 960 960\x22 wi\ +dth=\x2224px\x22 fill=\ +\x22#5f6368\x22> \ +\x00\x00\x028\ +<\ +svg xmlns=\x22http:\ +//www.w3.org/200\ +0/svg\x22 height=\x222\ +4px\x22 viewBox=\x220 \ +-960 960 960\x22 wi\ +dth=\x2224px\x22 fill=\ +\x22#5f6368\x22> \ +\x00\x00\x02b\ +<\ +svg xmlns=\x22http:\ +//www.w3.org/200\ +0/svg\x22 height=\x222\ +4px\x22 viewBox=\x220 \ +-960 960 960\x22 wi\ +dth=\x2224px\x22 fill=\ +\x22#5f6368\x22> \ +\x00\x00\x02\xa7\ +<\ +svg xmlns=\x22http:\ +//www.w3.org/200\ +0/svg\x22 height=\x222\ +4px\x22 viewBox=\x220 \ +-960 960 960\x22 wi\ +dth=\x2224px\x22 fill=\ +\x22#9c27b0\x22> \ +\ +\x00\x00\x01X\ +<\ +svg xmlns=\x22http:\ +//www.w3.org/200\ +0/svg\x22 height=\x222\ +4px\x22 viewBox=\x220 \ +-960 960 960\x22 wi\ +dth=\x2224px\x22 fill=\ +\x22#5f6368\x22> \ +\x00\x00\x03\x95\ +<\ +svg xmlns=\x22http:\ +//www.w3.org/200\ +0/svg\x22 height=\x222\ +4px\x22 viewBox=\x220 \ +-960 960 960\x22 wi\ +dth=\x2224px\x22 fill=\ +\x22#5f6368\x22> \ +svg>\ +\x00\x00\x02\x13\ +<\ +svg xmlns=\x22http:\ +//www.w3.org/200\ +0/svg\x22 height=\x222\ +4px\x22 viewBox=\x220 \ +-960 960 960\x22 wi\ +dth=\x2224px\x22 fill=\ +\x22#5f6368\x22> \ +\x00\x00\x02\x0c\ +<\ +svg xmlns=\x22http:\ +//www.w3.org/200\ +0/svg\x22 height=\x222\ +4px\x22 viewBox=\x220 \ +-960 960 960\x22 wi\ +dth=\x2224px\x22 fill=\ +\x22#2196f3\x22> \ +\x00\x00\x01\xd3\ +<\ +svg xmlns=\x22http:\ +//www.w3.org/200\ +0/svg\x22 height=\x222\ +4px\x22 viewBox=\x220 \ +-960 960 960\x22 wi\ +dth=\x2224px\x22 fill=\ +\x22#5f6368\x22> \ +\x00\x00\x05@\ +\x00\ +\x00\x17\x19x\xda\xedX]o\xdb6\x14}/\xd0\xff\ +\xc0\xe5\xa56\x9a)^\xb1\xbeh\x0b\x06\xd7\xd9\xd0\x00\ +q\x96fA\x8b\x22\x08\x0a\x9a\xa4e\xa24\xa9\x92\x94\ +\x1d\xa3\xf3\x7f\xdf%)\xd9\xb4%\xd9N\xd0<\x04\x18\ +[\xc4\x12y./\xef\x07\x0f/\xc5\xa7\xb9\xd2\x16}\ +\xb0\x1f\x0aN\xbe\xbe|\xc17\xde\x93O\x5cR5\xaf\ +u\x0f\x94\xb4Z\x09\xd3:\x90\x0c\xb1e\x9acQC\ +\x5c\xe0\x85*,H\xba\x7faz\xf4\xfd\xe5\x0b\x04\x8d\ +\xd3\x14\xcd}\xcf\x00\xa43\xa5\x17\x7fRn\x95\x0e\xa3\ +\x96[\xc1R\xf4\xaa\xaf-\x9br\x83~F\x15\x0a\x0d\ +\xb1\xc4\x19\xd3\xaf\xdc\x94\x0e:\xe7\xd4NR\xf4\xeb\xdb\ +^x\x9f0\x9eM,t\xf4z\x15d\xa0`Y\x92\ +I\x9b(\xe9\x9e\x05\xb3\x0c\xd4\x97+q\xed\x1e\x9d\xa2\ +\x7f\x88fL&~\xbe\x937\xa0\xb2|Z\xa3\x16k\ +T\xd0\xe2a\xd5c\xc0-+\xa5SE\xb1\xe0v\x91\ +\x827\x92~\x9e\x0bN\xb0\xe5J\x0e]\x7f\x80\x8c\x05\ +\xce\x8c\x1f\xaf\x5c\x1f\xfa\x0d\xcf$\x16\xc8\xe0\x19\xbb\xc2\ +\x1aO;3\xac\x11\xc5\x16\x1f\xa3\x91R\x02qs\xc9\ +\xe6\xdd\x0d,e\xce\xa8\x80\xe6\xd2\x22\x22F\xe7\xb4[\ +M8.$q\xba\x91P\x98^pc;\x94\x13\xdb\ +\x8d=@\x04\xc3\xba/D\xa7\xbb\xee\x1b+\x8d\xbcn\ +\x0e\x86\xf7~\x83\x9f\xdf\x91\x13L\x04\x93\x99\x9d@\xc7\ +\xeb\xd7\x1b\x93x\xbb\x17`!\x13\x09\xces&\xa9W\ +t\xcb\xef\xa2Y\x97[\x8eZ-\x8eC\xac\x07\x13,\ +3F;\x1b\xd3\xba%\x180\x90@\xd8\xbe\x80\x17a\ +5\x95\x96\x8c\xd9\x8e\x00\x83>r6OH\xa15D\ +\xf9\x5cRv\x1f)\xe4c\xd4\xd9\x10\xff\xe9\xf4\x14\x15\ +\x00\x1as\xc9h\xcd\x00\x98\x02O\xd9\xbb\xc2Z%\x13\ +x\x1e\x09FA\xa3\xd5\x05\xdb\x04\x06\x9f\xef\x01.\x11\ +\x13\x86\x1d\xa8c\x8c\x01{\x90\x92-d\xabO\xc1?\ +\xdeQu\x87N]\xb7\xcb\x05\x98\xed\xf6nw\xd0+\ +o\x13UH\xdb\x12\xf6j\xba$/\xcc\xa4\x13\xc7\x87\ +w\x93\x19\x16\x05\xab\xe7@p\x85-\xb4\x5c\xcb\xb7Y\ +\xb2N\xd0X\xf5jen\xb4\xca\xdd\x95\xf0\x19\x90\x92\ +\xca\x86\xcc\x18\xa0\x8cX\xcc\xb1\x0f\xf5\x83g\xde\xbf@\ +ec\xae\xa7~\x83F\x93\xbb\xad\x9an\x05\xb4\xa4\xa6\ +\xa3\xbef\x08\xd8\x0d\x99B\xb3?\x8e\x22\xa1\xa0\x0d\x10\ +\x9fa\x14\x03\x0a\x8f\x80\x04\x91Ue,\x91\x9d\xb0U\ +:#R\xf1\x9a\xc5Y\x82n`(\xd7\x8a\xc0\x1c0\ +\x22\xa5\xb2h\xc4\x5c\xae\x02}%u%7\x8b\xdc)\ +\x9ac-\xa3Ac\xb1\xa4X\xd3\x904@0\xc1\x0d\ +\xc9\x00K\xc2\x04\xfa\xb7z\xff\xccL\xe5(\xd7\x94\xec\ +\x13\xc2\xf2mj\x5c'a`\x97\xfd;\x0f\x821\xfa\ +\xc2\xe9\x8e-\x1f\x16\xd0\x1c\x10\xa06\xe0\xfaxa\xf7\ +)\xea\xe4\xd8\xcd\x1f\xc8\xb9\xa2\xe6.:A1;\xaf\ +a\x81\x92W\xdc\x5c\x02\xf7\x04\x96\x08e\xd8\x95\x02\x9e\ +\x86\x99\xaeT^\xe4\xc9\xa5\xea\x17V\x0d\xdc@,\xde\ +\xe6\xe0\xbf\xbf\xae\x9d\x1b\x9c\x1dK\x0d\x94(\xa62\x1c\ +\x89\xdb\x0e\x06\xf0Di\x93\x8c\xb9\x80u\x05+bY\ +\xd7n\xd8\xbd\xfd\x8b3A\xb7\x85+\xffI\xef\xb9K\ + \x96\xfaxP\xeb\xe7\xff\x14\x0e\xcc:\x9f\xb9\x96\x0b\ +L\xd8D\x09\xca\xb4\xd3\x97\xa2o\xe6Fw\x8enp\ +v\xd4\xddD/7\xc2{P\x1a\xad\x0f\xb4\xdb\xf5Z\ +\x13\x0bz\xee\x8e\xfdz\x1e\x992\xd7\x9eM\xff\xcf\x9a\ +Ge\x8d\xae\x9c\xf7,\x12\xa7\xae\xf8\xb6\xde\xb5>a\ +\xe3\x1c;n\x06\x1e\xccgu\xf1\xbb\x86)\x1b\x8e\xf0\ +\x1dY}\xb5u.\xed\x8b\xe8\xc3\xb3\xa1\x09\xa1]z\ +\x0f\xb1\xce\xb8L\xd1/\xbdf\x90`\xe3\xbd\x98\x91\x82\ +T\x9e\xeeCY\x95\xc7\x90M\xd0\xb5\x9a7\x9b\xb3\x95\ +|\xef\xcb\xb2\xbe9\xfb\xda\xb2\xb4\x01Y\x86\xb8I]\ +\xb5%\xaa4hF\x1c\xba#\x1ed\x80\xbf\xb9\x00@\ +\xf8\xd0\xa8\x19;+\xb4\xafFR\xd4\xdb\x83N\xd15\ +\x94\x12P6\x0bH%D\x94P:E\xd5\x95,\xc1\ +\xb0\xa7\x5c\xcd\xa61\xe5\x05\x90\xce\xdbx\xff\xc5\x0d\xae\ +FQ\xd2\x97u8\xec\xc4\xad\xb2\xbcE\xdaU\x08\x19\ +\xe8L\xd19\xc0\xdb\x9c\x1b;\xf8\xac\x94hG\x967\ +\xbb*b\xc9\xcc\xfd\xf1\x9d\xed2\xd5\xed\xefM\xaf\x1d\ +s\x81GP\x06}G\xd6\xf3\x94/M\xdb\xccrm\ +\xa8\x0a\xc3\xa0\xda\xc3\xbb\xac:l\x036\xf8\x1c\x0e\x8e\ +\xaf\x0d\x8c\xd7\xd4\x1a\xd9\x09\x8at\xee~w\x8b\xef0\ +\xafe\xa8\xa5\xdb\x97\xe9!&\x9e6\xf7E\xbad\xd7\ +\x83u,kg\xc5\xe3\xe8b\x0f\x0b\x843x\x17\x07\ +`Z\x1e\xd4\xcd\x10\x1b\x9dq}J\xb7\xcf\xb8\x87\x05\ +8.|\x13\x05\xd7\xe6N\xf7AA\xe1\x04\xee\x86F\ +\x15\x9a\xb8\xdb\xc07M\xd2\x13>\x85\x93\xc5\x9c\xb8\x11\ +s\x02\xb6$f\x96\x1d\xb5l]n\xe0\xf0\x86\xea\xa5\ +?2Vcb\xcb\xcb\xa6;\xc6\xdf1\xc3);'\ +mn(=\x8e\x81\x88\xe4\x14R2|\xecpo\xef\ +\x07\xf0\xca4\x946U\xcf\xc7\xd0\xd3\x18\xf3z\xe7.\ +\x1a9\x94\x81\x97\x8f\x0b}|9\xdf\x1f\xfdP|\xfe\ +\x88\x04X\x95\xb1O\x91\x03\xc1\xa8\x1diP~[H\ +\x9b*\x98\xa7M\x95k_v?\xc3D\x89\xbf\xcd\xec\ +O\x94\xf0\xa5\xe1G$J\xfd\x9b\xc5SdL\xb0\xee\ +\xd9gL\xfb\xd5\xa3\xfc\x81\xff\xff\x01\xdbW\xd0u\ +\x00\x00\x09\xc9\ +\x00\ +\x000\xddx\xda\xcd\x1ako\xdb8\xf2\xfb\x02\xfb\x1f\ +\xb8\xfe\xb0\xb1os\xb2\x1b\xa0\xc0\xc2\xbb9 \xb1\xd3\ +&@\x92f\xebl\x8bCQ\x14\xb4D\xdbDhQ\ +GQ\xb1\xb3]\xff\xf7\x1b\x92zPOKNz=\ +\xb7p,r\x86\x9c\x17\xe7E\xd1u\xc0\x85D\x7f\xc8\ +?\x22\xea>\xfc\xf8\x03\xcd=;\x1f\xa9\xef\xf1Mi\ +x\xc2})8\x0bk'\x9c\x1b,\x89\xa0\x98\x95 \ +\xae\xf1\x13\x8fd\x19s\x0a\xc0|\x09\xe3\xea\x9f\xd9\x16\ +}\xfd\xf1\x07\x04\x1f\xea\x8d\xd1&&D=o\xa8'\ +Wc\xf4\xea\xd5hd\x06V\x84.Wr\x8c~U\ +\x03fh\xc2ay\x9f\xf8\xd2\xe1\xbe\xfa\xcd\x88$\xb0\ +L\xbc\xa2\xfal\xd1)\x9a\xb9\x82\x10\xdf\xd1\x0b\x0eO\ +\xd0?Q\xfc+\x83z\xca\xa0\xcc.\x1a,\xf9i\xe0\ +v\xc9\xa6\x92JF\xc6\xe8?\xe1\xbd\xe8\xf7\xce\x84$\ +k\x1a\xf6\x06f\xee\x91\x86t\xaef\xa5\x88\x88\x192\ +\xdfk\xeeaF\xe5\xd3\x18D\xe1\x9c\x05\x01\xa3.\x96\ +\x94\xfb7j\xdc\x80,\x18^\x86z\xfe\xa3%\x06\xf3\ +=\x1c\x223\x18\x02\xf1r\x05\xb2EQ\x10\x10\x81\xe6\ +X$\x10\x19\xfe\x1b\x81\xd7\x84\x91048\x97\xd4\x97\ +\x09\xf1!]\xfa\x98!\xc6\xb17\xd3?\xfb0\x19\x8f\ +^y\x83\x1cP\xb8\xe2\x9b;A\x16\xfd\xf2\xf0\xf4|\ +\x8d}\xbc$\xa2bn\x82\xe5M\xe5$\x0f\x88\x0f\x9b\ +^xTr\xd1\x0f\xa5\xa0\xfe\x12\xc9\xa7\x80\x1c\xa3G\ +,\x14\xd4\x97\x00\x03\xe9\xc7h\xce9C4\xfc\xe2\x93\ +My\xfdY\x80]\xf2\x91`\xb9*\xed\xe0\xae\x88\xfb\ +0\x9d\xff\x19x`\x98a\x916\x89\x85\x9c\xf2\x8d\xaf\ +\x98\xaf$n:\x9fRA\x5c\xa0\xee\xa90\x0b\x84L\ +\xe7\x09\xc9>H7?M\xb6\xca\xca3\x88\x00\x88\xcb\ +C\x98sP\x8200\x81\x80\xdd\x85|\xd2b\xd0\xd4\ +y\xd74Lu\xb6\x88|W\xd9\x0a\x0ax\x101\xe0\ +LM\xf6\xcd\xc2\xa1\xfa=\xb0->\xc3\x07\xa3\xb6\x80\ +2\x08I\xb6\xf2\x0d%\xcc\x9b\x11,\xdc\x95C|\x0c\ +6\xeb\x01xf\xb5\xda\x98\x81\x1a7\x12\x02\xce\xd7\x95\ +\xef\x11u\x94\x18,\xf4\x81\x92\x8dc\x8fg\x18`,\ +\x82\x84+M\xdf \x1b\x06\xeb\x9d\x11\x89@a\xf9\xf5\ +\xe6\xd8}@x\x01>$\xc1\xd4\x16\x01`,G0\ +]\xa0~\x0e\xf1_\xa7h\x84~\xfe9\xbf\xda\xef\x1a\ +\x0b\x0e\x14a\x8e\xcb#?/\x16-\x9a*\xea\x81\xab\ +jfv\x85s\x9f\xaa!\xc7eN\xf4\xd9\xfe\x0cD\ +k\x8b`\xc1\x05\xea+\x81R\xd8o\xf4\x1b\xfc\xf9\xdd\ +\xd2\x94\xc3\x88\xbf\x94+\x18\xfe\xe5\x97\x12\xd5\x0aK\x99\ +\x9c\x12\x7f\x8a\xf1\x89~v\xd4\xa0#\xf95\xdf\x101\ +\xc1!\xb1\xf7K\x10C\xadb\xa5\xda\x82\xd2\xd5s\x13\ +\xb2\x92\xb9\xde\x80\xfa.\x8b<8Mf\xa9A\x89\xbe\ +<\xe7\x18\xdc\x92\xef\xf5s\x94\x16\x96\xde\x95d\xac7\ +\x04G:Ya\x7fi\xd0\x12z\xca\xe2/\x01\xda\x04\ +\x19\x9e\x19\x1cb\xe2}\x01\xeb\x8fm\xd6\xd0\xb6$\xb2\ +_i\x03\x83\xbc\xad\xe5\x16\xf8\xe9\xf4\x14E\x00\xb4\xa0\ +>\xf1\xca&\x959\xd26\xfb8\xb3\xab\xb7_\xae\xa6\ +\x05\x81\x10\xf0\x88f\x91\x1b\xe2G\xb5\xe7q\x87\x08\x0b\ +I\x91\x82Z\xe4\x05\x1c|\xd2\xc2\x9c\xb5\xadv2\xe6\ +\x9c\x8b\xf9\xf4\xb9\xde\xb3\x940\xeb]\x8fEm\x99D\ +\xc6\xdd\x07\xc5]_\xf2\xe5\x92\x91\x1c\x9dJa\x15\xc3\ +\xea\xa3|\xfa\x1b\xcaH\xb3`\xb4\x10\xb5\x03o\x07\x0b\ +\xb1\xa0\x8d\xbc\x13\xdd@8$K\x88({\xb4S\xa9\ +\xdb\x1a\x06\xf2f\xd1H\x7f\x19\xb4\x8e\xfc\x8aE\xeb\xa9\ +/\x18f\x9d\xde\xe6\x5cJ\xbe\xbe\xf2\x17\xfc\x1c\xec`\ +\x0d\x19\x09\xa4\x05\xc7(\xfeq\x0f\xa1?\xa7\xb3\x0c\xfc\ +\x1a\xcf\xc1\xf0\x94\xb5\xc0f1x\x06\x17B\x0e\x04N\ +\xad_\xb7\x8e\x0b\xfe\x0c\xf56X\xf8\x10Oz\xe3<\ +W\xc5M\x5c\xce\xc07\x9f\xa2$\x975\x03\xfd\xf4\xf1\ +=\xf1\x0a\xc7u.\x08~(\xeeFa\xc1\xce[A\ +T K\x01\xb1\xcak\xdc\xa1V\xbe\xca>\xde\x12\x9f\ +\x08\xccLfm\x8b\xe4\xd8d\xaa\xa9\xb8s\x22\xf24\ +x\x8c\xebXX\x99\xbc\xd5S\x1d\x82^Y\xd9\x81\xfa\ +\xbbg\xd5*\x0d\xe6\x01\x15\x1b\xf5\xfe^gf\x1a>\ +I\xde \x8d\xea\xc6g\x86\xd8\x9eU\x0b\xa7\x91\xdb\xf2\ +\xda\xf5\x0c[\xb0]y\x8e\x0b\x8d\x03\x19\x8f\xb1\xbbs\ +\x9f \xb6\x12Aa\x97\xfdrH\x10*\x85a\xf8\xbf\ +\x89\xd7\xb2=>\x94xEyf\xb3\xba\xd2J\x0a0\ +\xcbgH\xec{Xx\xe7\x11\x9cI\x1f\xea$\xb3\xbc\ +3\xc1\xbeK\x18\xfa;y\xfe7\x09m4\xee\x9f\xb9\ +.\x09\x8aee\xbcbU=Qu`;\xb0\x12\x8b\ +\xe4;\xf0\x03\x85\xa3\xd2\xc3\x9f\x82]l\xc1?A\x84\ +`O\xfd\xdeJ\xca \x1c\x0f\x87K(;\xa39\xb8\ +\xb0\xf5\xf0\x0c\xb2\xdf\x0f0K\x9e\x86\x85\xf2\xf7@\xde\ +c?p0\xcf\xef\x1e*\xf7\xac\xde\xecV\x95r\xf6\ +\xaa\xdb1\xeaC\xdd\xa9\xba\x08\xba1\x904\x08\x06h\ +\x88\xec\x1eA\x06f\x1a\x03i\x87 \x06\xac!?\x0d\ +\x13\x8c\x87\xe4\x8eC\xe1\x0f+\xddA%\x178\xb7\xfc\ +,\x92|\xa2&\xda\xb1\x99\xa9\xd5\xa8\xd9\xc6\x9ap\x16\ +\xad}\xd3x)\xaa\x16\x80W\x5c\x84\xce\x822\xa0\xcb\ +pa\xe3\xaa\xcf}\x92\x9aU\xe5\xf7J|\xba\x06\xbe\ +\x85\x92\xa0 \ +bi\xc5D\x16\xf2\x0e{\x1e\xe4\xa3c\xf4\xdaj\x98\ +(\xffQ5aRG{&\x9b[\x11\x15o\xc6H\ +\xe5\xe4\x90W\x97\x18\x07\xba%\x0f\xceUg0?\xa3\ +\x10\xaaNw\xae\xa3\xa9\xc4\xd4\x1b\x14Q\x13\xf4+\xf0\ +\xf7UK$\xc5\x1d\x18\x86>\xcdX\xe29\x98G\xde\ +\x00r\xa5\x8d?\x01W\xf8\xa0\x15g9\xe68\x15\xd8\ +\x95\x91v\xcf \xe9\x1a\x02kG\x9a\x0a]\xce.\x04\ +\xcd\x88jcJH\xf5\xbf\x1eDtv\xf6\x92\x82\xae\ +\x91\xb9+\xd3bO\xd8k\xc1\x9b}\xb0_X\xe0\x99\ +\xd7lE\xfb\xc5\xb6+\xed\xb6K\xae\xa7];BS\ +\xad\x8e\xab\x0a\xf3o\xae\xbfb\xed\xdc,\x05\x00F\xf7\ +x\x19\xb6\xb4K\xbb\xc3\xfe\xff\xc8\xbc\xdd\xb6hd\x5c\ +9\xffT\xf9\xe8\x8d\x0e\x9d-dP\xea\xd5\xbf\xb4\x10\ +Z\xb8\x14u1B\xc0\xc9\xbb\xa4\xad\xd6\xccU\xca\x0b\ +{\xb6\x8b-\x95-\xf67\x17k\x8e\xceA\xdb\xd1\xb0\ +k\x1b<\x94\xc2\xc3\xb4\xa1\xb4'\xb8\x98\xce\xd3a\xe1\ +%\xceAg\x0d{\xb5Qz>R\xb5\x8a\x05\xf9\x8b\ +\xab#C\xc1\xd11\xfa\xf4\xf9X'\xba/\xeb=s\ +\xfd\xdcg\xf3\xa8\x88v\x9e\xcd\xa5\xde\xa7\x86\xcd\x83\xac\ +&o\x15\xeaF\x0f\xc5Wz\xcf\xca=&\xea\x02\x10\ +\xbd'*F\xb4`\xb9\x1aB\xd7`5\x17\x8d{\xf8\ +\x7f\x8eH\xd2|\xb3\xc59\xba$,x\x01A\xa9[\ +\xa9\xf8\xb2\xb4\x85\xb4\x8a\xb7\xab\xff\xcb\x9c(&{\xca\ +\xddh\x0d\x99\xb5\xbe;oAreO\xe3(\xe9i\ +d\x8d\x0c'noP\x9e\xb44\x8e^\xdaS\xcf\xc0\ +\xa2\xc02M\xd5t\xcb\xdb\x89\xbc\x99\xfe\xc6\x9e\xccp\ +\xce\xf8|\xb8\xc6!\xe0\x0d'\x97g\xb7o/\xae\xdf\ +\xbdu\xd6\xde\xd1\xf7P\x9c9\x92\xe8*\x0c#\xf2\x8d\ +\xf9\xa6j\x8f\xf0\xbbp\xa9k\xc8g\xf9\x1d\xab\xe0\xcc\ +uE\x0f\xf2;\x95l/8\xd8\x1eT\x8f\xfaJ\xa2\ +\xaav,\xdcZ\xe4\x01\x16\xdc\x97N@\xb7\x84\xcd\xe8\ +_\xe0\x8e^\x9d\x14\xeeCk\x0a\xdd\xc6b\xb7\xba\xe0\ +\xad\xa4\xfe=\xdftiq\xe5\x5c:\xb8s\xbd\xf6\xc9\ +\xa8\xa8\xe2\xa6\xde\x99\xd5\xdfZ\xe3-]G\xeb\xb8\xc5\ +u\xf2zTe*\x8d}\xb4\xb4>\xcf\xdf\x83\x1e\x1e\ +\xe5\xdbv\xde,X\xc9\x83\x1b,\x96\xd4\x07\xed\x8d\xaa\ +!k\xfat\x86\xd8\xde\xa0\xce\xc0\x15l|3\xdfh\ +\xe45\xaf\x89\xec\xb7\xef\xf2`\xce\x1ej\xd8\x8eo\xe2\ +\x9b(R:In\xec\xeb\xa1\xba\x08\xbb\x00\x7f\x19\xbf\ +\xbc\xd6\x8c\xb0\x02 \xa6\x00o\xf8#\x99FB\x87\xb9\ +1\x1a\xd5c\xb8\x8c\x06\xfbV]@\xd0\x0c\xf7\x01\xcd\ +\x5c\xc1\x19;\xc7\xc2y$BRW5\xb0\xd3\x97\xcb\ +\x1ai\x1dCTs%h\x9d\x11\xf4\x15\xe9;\xceq\ +v\xc5\x89]\x17N\xe2oH`\x8f**^\xa3]\ +\xfd\x9a\xe0#\xad\xb7%2S\xaax\xe7\xa3a\x15\x0f\ +\x82\xec\x12\xf6\x1f\xa3&\x97]T\xfd4\xc6j\x86\x8e\ +\xdfJLl\xcayT_z\xb0\x19/yy\xf1d\ +\xd4\x0c\x17{e\x13OT't\xd7\x0c\x7f\xc3\xa3\x90\ +@\x10\xc4\xfb\xd8l\xe7#\xf7\x04\xae\xba\x17\xa8h\xfe\ +\xcd\xa9\x96\x07\xba\xc5\xd4Z\xbd\x80b\xc4\xad\xdfEi\ +\xabL\x0d\xdcy\xc7]\x9d\x0bI\x0f\xc7>\x1f\xd2x\ +b:\xbb\x03\xecJ\xfaH\x9a\xa0\x0e(?Z\xc6:\ +\x0cg\xdbW\xa9\xb6ycU=]ClG\x7f\xa7\ +\x8f\xf7 >\xb0\xf6\x05_ct\xac\ +\xe0\xfbr\x02\x8fDX\xac\x7f0#\xddBr5\xb4\ +\xe2N\xdf\xf35\x99\x96\xb4\x83p\xdaB\xe9d\xc2\x9d\ +\xf71W0\xbdg\xc6\xe7\x99\xc4\xeeC\xbd\xb1\xe9\x10\ +f\xf9\x92D\x975\xef\x97~k}\xed?\x96\xdd\x94\ +\xbb/\xfe\x18]\x16\xaf\x92\xea\xcc q\xfd\x17\ +\x03\xaa\x22\x19\x9e\xddZ\x9e[\xf3o\x86\x1b\x0b\xbc\x09\ +\xc0\x8e\x8f\xd7V\x82\xed^\x90\xbb%,v\x1d\xeb\x1c\ +;3\xb4\x00\xff\x15P,EQ\xe0\xe9\xac\x1dTT\ +5\x95U5\x1f\x5cUs\xad\xaa\x9a\xea\xaa\x9a\xab\xaa\ +j(\xabj<\xb8\xaa\xc6ZU5\xd4U5\xd2T\ +\x0d\x01w\xaco\xf0\xebX\x05\xafc\xb4\xcev\x1a\xdd\ +\x96\x19\xaa\xbc\x0c\x87\xee\x0f\x07\x13\xe0\xf4\xfb\xc3\xa1\x18\ +\xdd\x1b\xcb\x03\x81=\xc2\x86\xe5R\xe5)\xdcIE\xd3\ +\xaa\x9a\xfe\xa9[\xf9\x19T4\xbd\xaa\xbd\x9e\xee\xbe\xae\ +jo\xa6\xbbo\xaa\x10E\xbb\x10U\xe1\xab\xe9\xee\xab\ +*\xfcu\xba\xfbk\x15\xc1h\x17\xc1\xaa\xa6\xd1\xddX\ +\xa1\x17\xc4\x03\x9b\xacd\x9b\x16\xa8\xfdF\xff\xfc\xceU\ +\xa2\xe6`w\x18\x5c\xd2\xc3\xdb\xdbK\x1d5V_\x9a\ +{\x91\xed\xc4>\x8d'\x9d\x97r\x15\x95rEK\xd1\ +\xe9\x9f\x04\xd4\x192\xbd\x04\xe2\xbfh\xea\xabZ@\xcc\ +\xc0\xb3\xdd\xe1\xe6Vr\xca\xb0!\xd8\xa5\x88\xa6\xae\x84\ +?\xde\x8f+`\x1bl\xda[\x5c^v\xe0j\x1bn\ +\xc9\xc1u\xe5\x1b\xf4\xeb\x98\xfe?\xe7~zrE\x8f\ +\xb1\xfepm9\x95\xd3\xe4\x22\xfa\xc4!\xde\x8aE\x84\ +\x18\xf1\xb6\x9cm\xf8\xc6r6\x17\xaal\x83\xca\xac\x83\ +\xce\xb9U\x12\xc8\xb3 \xb6\xa8\xd9\x0f48U*\x89\ +\xcd\x93RF\x98\x97\x162\xc7H*d\x12?4\xe1\ +c\x15\xdd\x18\x9d\x84\x00\xd0\xba\xa1\xb1J\xe82\xa1\xf1\ +\xd5a\x12\x0d\xaf\x0e\x83\x96\xe3Z\x08bBM\xed\xfa\ +\xd31\x8e\xde\xb1\xbd\xb1G\xceM\x18]F\xa8\xf6\xe0\ +\xc7J2<\x5c\x11\x1ef\xc3\xa3\x15\xe1\xd1\x02>\xa9\ +\x80\xf6\xaeCG\x9db\x89\x9a\x1f\x1a\xa6y\xd6\x16\xc9\ +\x11\xc1A\x058(\x86C\x0ap\x02\xba=%\xba=\ +\x11\xdd\x9e\x12\xdd\x9e\x88nO\x89nOL\xb7\xa3D\ +\x97\xf6\x9d\xee\xd1\xa1\x88sG\x89\xf3\x1c\x13\x8a1\x91\ +*\xa6\x80\xbd\x01\x0d\xa4\xa9\x0d\x93x\xfb\x18B\xf3\xb3\ +\x02\xe0\x8a\x05@Q\x01h\xc5\x02D\x22\xe9\xabH\xa4\ +\x0b%\xd2\xe1\x8a\xf0\xd9\x02\xe9hE\xf8Dy\xd8\x08\ +b\x88I\x83\xdeS\xdf\xe0\xb6\x96\x85\xbe\xd7::k\ +\x1f\xec\x9c5\x9a\xdd\x83\xcf\xadd9\xe2pP\x09\x0e\ +\x8a\xe0\x90\x12\x9c\x98\xee\xbe\x90\xee\xfe\xc1\x9e<\xdd}\ +\xa8\x04'\xa2\xbb\x8f\x94\xe0\xb2\xe8\xb6m\x97xr\x8d\ +\xdb>8<22\xc9F`P\x05\x0c\x0a\xc0\x90\x0a\ +\x98\x90\xa8\x5c\xb3J\x12\x95kTI\xa2rM*E\ +\xd4\xba\x92n\xd1\xc6\x1f\x22\xa2!\x18T\x01\x83\x020\ +\xa4\x02&$*\xd9\xa2rD%[T\x8e\xa8d\x8b\ +f\x11]\x84\xf8\xc8\xf7\xf3\x8b\x14\x1f\x96Y\xb6\x17\x80\ +\xdd\x88r\xd1+\x1d\x03.c\xc0D\x0c\x98\x8e\x81\x96\ +1P\x22\x06J\x19o\xb3\x1e\xcf\x93\x99E\xa1\x18\xc6\ +\xd4\xb1\xa9\x00p\x09\x00&\x01\xc0T\x00\xb4\x04\x80\x92\ +\x00\xd2H\xb0F\x8e\x91\x98\x1a/\x0e\x11u\xd2T\x00\ +\xb8\x04\x00\x93\x00`*\x00Z\x02@I\x00(\x02\x98\ +,n|\x9b\xc4\xb9\x1e\xb9\xd1\x03{\xfe\xee;\xf9q\ +\xfc\xdd\xb3\x9e=\xbc\xa4\x15\xf0\x86\xb6[\x07H[N\ +\xe0\xe0\x8b\xcc\xf3\xe7$\x08\xc8(+E@\xc6\xfc\xe9\ +E\x82\xb4\x9a\xb3-:\x1aV~\x1f\xb3:\xd6A\xe0\ +]\xe3\xd4D\xc7\xf6 \xb8\x9c\xa5\xb9\x9b\x8a\x0a\x9d\xf4\ +\x5c\x82\x09^\x07\x7f\xfa]os\x83:\xba\xd5l\x98\ +]0\x1d`m$<\x8b\xb8 \xf46\xbeo\x8d\xed\ +\xc0r\xec\xbf-\xf60\xb4\x0ev\xd9Asd9N\ +\xd3\x1a\xfb\xcb\x99\xa6u\xa49\x86\xee\x886A\x1d|\ +\x0cj\x0d\xf6k\xbfI\x7fb\x0f\xfc;?\xf29:\ +\xb2\xf4\xc8#~`\xd7cOP\xfeI-J \x87\ +Hy\xb9\xfe\xc3o\xec}\x8e\xed\x0e\xeb\x00\xbeJ*\ +\x8cm\x06\xb9\xcd.-\x86\x13\xef&w\xb7\x83\x11\xf7\ +F*mco\xaa\x12\xdf\xb1dg\x8b\x1ej\x9b\xf6\ +\xdf\xb8v9\xedv/5\xe9,\xb7\x91\xea\xa2\x1cL\ +\xd16\x19\xe0zD\xa5\xd6\xf1\xb0\x8f\xbd\x1b\xdc\xf0\xc7\ +\xb8\x1f\xec\xda\x19u\x9cd\x09#\xd3\xaaJ\xfe\xba\x7f\ +\x07\x93\xf2\xdfZ\xfc\x95e\xea=L\xa8\xc0.\x0e\xec\ +>\x08\xafdv\xf0-\xc9\xd8\x89\x15\x19\x13\xdb\x0dX\ +\xb3\xd2~\x0d\xc5y\xd2\xb4\xc9\xca3Y\x9bt\xac\xbb\ +\xf3\xef\xfe\xc49n=k\x1cu\xc2\xb0\x90\xda1\xf1\ +\x06\xc7\xf4\xd8\x831U<5y\xc4\xa1\xc4\x94\x11y\ +\x05\x97\xe7\x12\x89\xfe\xefP\x22\xd9\xb3y?\x9b\xc4\xa1\ +\x03s\xc3\x1a\xd8ap\x00f@\xbc\x91\xffP\x8e^\ +K8z$a\xc1|ra\xe1>\x90O0\x94\x18\ +e(\x91\x09%\x0f\x10LX\x18!\xe0\x9dc\xf5\xbf\ +\xb2\xa9Ne\x14\x11G\x11\xe3\xd1F\x91\xbc\xe2\x88\xc2\ +\xebi\xbeR\xa9\x81f\x8d\xb7\xb9\x22\x9fI_\xa6\xe5\ +G\xf9\x99=\x88\xf7\x9a^\xddi|\x01\xef\xc7\xe0\xe0\ +p\xa7\xd5K\xb3\xda\xbd\xad\xb2\xf2=vj/J\xbd\ +\xd7f[\xdf\xb1\xc7Y]I1\x9a\xedy\xf6@\x1c\ +&\xe5o\xcb\xc3*\x86\x9d\xc2\xe4o\xd0\xd3\x92z\xe4\ +\xd6\xaf\x837\x22,\x9a\xe6e\x96\xdf\xa4\xa2\x0a\xdf7\ +\xba6Ux\xf3S\xb7\xb9\x95\x15\x82'+\x979\x8f\ +b\xd1\x0c1\xf9\x0a\xd2\xf4\x00\x8a.\x0fk\xe9\x82\x0f\ +C\x16\xa9\x92EO\x98\xac\xaeJV\x7fbd\xf9\xfa\ +\x87\xd3\xfdrr\xcd\xfb\xb1\x06\xa5\x84\xe2\x1f\x18\xf33\ +2\xc3q$\xf8\x09h5]0\xda\xbd;\xcaB\x12\ +\xe9\xcf\x893\x90\xb8\xac\xafQ\x0dT\xaa\xc1\xa9\xa1\x17\ +^\x8d\x981\xd9\xe4\xdb\xdc\x8c\x09Kc\xf2j\x94\xc6\ +\xe4\xd5(\x8d\x193&\x9b\x0a\x9f\x9b1QiL^\ +\x8d\xd2\x98\xbc\x1a\xa51c\xc6d\x1f\xa6\xe4fL\xbd\ +4&\xafFiL^\x8d\xd2\x98\xbc1\xc3\xcf\xc4r\ +3\xe6\xcb\xd2\x98\xbc\x1a\xa51y5Jc\xc6\x8c\xc9\ +>\xda\xcc\xcd\x98\xafJc\xf2j\x94\xc6\xe4\xd5(\x8d\ +\x193&\xfb\x84:7c\xbe.\x8d\xc9\xabQ\x1a\x93\ +W\xa34&o\xccpA\x83\xdc\x8c\xf9KiL^\ +\x8d\xd2\x98\xbc\x1a\xdf\x811%\x0fO\x04_3\x88\xa7\ +\xadH\xce1i}n\x1dvM\xc0\xbe\x89m\xbc;\ +\xf8p\xd0\xfd\xf2\xbd\xcc3Q\x99\xbe\xf4\x10\x93H$\ +g\x86H\xcd2Y\xd3$\x925O\x07\x09?\xc3*\ +\xd0\x8c\x90{\xf0}\xd2\x93B\xee\xc1\xf7)\xcf\x0bI\ +\x9c'/\xe2\xb3\xf2DU\xe9\x8b\x07\xa7\xde f\xe3\ +(\x89\xa0\xb4\x04b\xd6\xb2A\x93\x07X\xb7)\x05\x7f\ +2_I\x9a\xfe\xfb\x0ff5\xacI\ +\x00\x00\x06`\ +\x00\ +\x00=\xfax\xda\xed[mo\xda:\x14\xfe>i\xff\ +\xc1\xea\x17\xa8n\x97\xb5\xb0JW\x91\xfa!c\x94\xa2\ +6\x85%l\xedt5!\x93\x18\xf00q\xe6\x98\x95\ +\xee\xde\xfe\xf7\xeb$@C\xc8+\x94\xa6tD\xd3J\ +\xecs\x9e\xf8\x1c?>>\xb6\x13<\xb6)\xe3\xe03\ +\xff<\xc1\xc6\xe8\xed\x1b\xbct/\xdd`\xcb\xa4w+\ +\xc55jqF\x89\x13[!\xa9\x90#\x86!Y\x91\ +\xb8\x82\xf7t\xc2\x85\xe6\xa2\xa6$\xbd7\xa8\xf8i!\ +\x8b;%\x00\x1d\xf0\xa5Y[\x14\xb8\x82o\xdf\xb4\xe1\ +\x00\x81\x7f\xdf\xbe\x01\xe2\xc2\xa6\x0c\x1c\x1b\x1a\xe8\x06A\ +>D\xac6aLH\xfa\x95\xd02\x86\x949R\x1f\ +\x13\x22\x03\x1b\xfa5~\x1d\xed\xfd@\x06\xbf\x86c$\ +\x83\x83\x08\x84V\xef\xc7\xc1\x5c\xd6f\xd4F\x8c\xdf\x03\ +\x873l\x0d\xc0\xa0k\xd1\xbb.GS\x1e]\xef\xa4\ +\xd4\xb3@\xbd/\xd1\x9fX\x06\xc7\xd4\x02\x84BSC\ +\xae+\xca6u\x106\xa9\xd55!\x87\x87s\x83\xdd\ +\xcbA\xfc\x0a\x0f\x86\xbcL\xdc\xff\x1b.\xda\x11(5\ +JG`I\xe7\x9fRC\xd7\xbazM\xb9\xaa\xeb\xa5\ +\xef\xe2\xce\x15,}?\x8c\x03\xd2g@z\x1a\x90\x9e\ +\x02\xa4\xcd\x80\xb44 m\x01\x14o\x5c\xe5\xc30\x9b\ +qc8\x15\xb2\x89\xf6\xf9X\x19\xecK\xc5\xd2fX\ +\x19L\x0c`=\xa2=R\x08\x9ce\xe85O\xb2\xf4\ +=\xd0\x9a\xcc\xfaz\xa4>\xcb\xac\xaf-\xe9?\x22\x8c\ +\x9a\x96\x89\xa6\x9eK\xda\xd0BD\x9a;\xc8)\x87\xf0\ +\x94K\x17g\xd4\xc5\xaeB\x97\xd1\x89e.y\x96\xc0\ +\x1e\x22\x97\x1e\x9c4kQ\xe9\xd2\x06^\x81\x0cJ\xe0\ +/\x90\x04\xb8\xdc*\x98\xb3Up\x0e\x12n\x8f\xb2\xdc\ +\x1e%\xb590\xaa9\x1e\x94:Y\xe0\x844\xdbZ\ +\xab\xad4\x94N\xb3u\xedB\xa8_n\x83}\xe4)\ +\xd7\xd5z6e!\xb8\xa2\xac\xea\x19\x1f\xac\xaf\xa8^\ +\xf4\xaf)vP\x8c\xbeo2\x9a\xda\x82\x1cB*\xc2\ +\xe86\x82\xa3s2\x99\xd6\x08t\x9c\x18\x94[M\xf9\ +\xe6\xe2\xd8B\xb6\xdb\x17\xc2]\xc3\x95^i\xcb\x12V\ +u\x98\x0f\xad[\x1d&\x03\x8a\xc1\x99\x13\xd1\x1b\xce>\ +\xe4\xc3J\x04_\x8e\x13M\xf3\x08\xf0{\x1b\x1d\x01\x82\ +~!\xb2\x14\xc6g\x02\xf3\x87\xbbb\x82\x5c\x9e\x5c\xd0\ +\x9d\xb8\x0f\xca^!8;;\x03\xc7\x1e\xc4c\xed\x03\ +@\xc4A!\xa1\x93\xa5\xe7\x04\x9f5\x9f\x8a\xa5\x1e4\ +F\x03o,\x8aG/J\x1b\x0c!+\x05\xbc\xb2.\ +\xb82\xee!\x96\x02^]\x17\xbc\xc5\xa05@)\xe8\ +\x1f\xd6E\xff\x84\x90\x9d\xe9\x09\xa7\xeb>ACf\x00\ +:D\xaeOB\x82\x0eT\xe48\x81\xd4g\x9e\xfe\x0c\ +\x1c\xe6\xd7\x07f\x07\x0e-\x132\xf3\xe3\x84sj9\ +\xf2\x0c@j\x8d\x02\xc0\xfe\xcfv\x081)gr/\ +\x8d\xde\xf9Y[\xd8\xceh\xc5(\x09\xe6zD\x85l\ +\x80-\x19T\x8e\xa3\x85\x08\xea\xa7\xca\xf4\xa80o\x9c\ +&\xc5\xa9\x1d\x14Y\x16\xaaQ2\x19[\xd1\x16\xb9\x97\ +_\xe3\x19u\x81\xdcv\xcb\x80\xb3\x09\x8a\x12\x14q%\ +\x0aa\xdeM\x81Y.Z\xc8\x0d\x032\xf8\xe9tX\ +\xf9`1\xfd\x1d\x1cF\x0b\xf7En-\xd9\x14[\x5c\ +\xc7\xbfE\x0a{r\x92 g@\x1bsH\xf0o\xe8\ +F(\x19\x9c\xbb\x85\xfa\x18\x12R\x83\xb6\x13\xad83\ +\x5ch\x0d\xac\xb1\xe8JY$\xed\x92\xe2\xde]\xd4\xc4\ +-b\xe0\xbfE\xc9W\xbfd\x15\xe8a\xb5(\x98\xce\ +K\x97\x8f\xb3u\x92\xeb\xc2\xa9F\xb4\xe4\x1d6\xf9P\ +\xf4\xf1\xe9q\xa2E\xe9]\xb9\xb6\xf9\xa9\x0ex\xd8\x80\ +~7\xbeyq\xec\x8b\xb1mU4\xfc\xc88\xfb\x13\ +\xe8\x1cf\xebuKQ\x80\xdeVjupSW:\ +\x17u\x0dx\xf9c\x1cy\x17\xc4$\x88\x0b\xc7\xe9b\ +\xf5%\x96E28\x96N\xe3\x15\x9e\x84\x90\x91\x9d0\ +\xbf\xce\x99X\x0d&\xd9l\x10l'\x91&\xa9\xc7\xe2\ +5\x1a\x0c\x9b\xf1\x0c\xc8\x17b\xc3\x17\xa3w\x22\xfa\x9f\ +&\x0b\x19\x1e#\x84\x5c5\xa9\x99\x99X\x11\x1a\x8b~\ +\x13%\xef\x0e\xbc\xaf\xa6\xeb\x05Y\xd5@t\x0c\x07\x16\ +\xe2\xd8\x00:\xa7l\x9cD\xa7\x8d\xe3\xddV\xa8\x96J\ +\xb9\xdc\x8e\x0d:H\xa7\x042\xa0A\x13{v\xfaN\ +r\xb2x\xe9\xc9\x0d|\x12\xd7o\xc7K\xae\x7f(\xf8\ +HD\xd6%l~\xc5\xdeir4Ns\xcev\x5c\ +<\xdb2+\xd6\xb7\x81d\xe8\xef\x97\xe0I?\xf7\xce\ +\xe2J/;\x5c\xec\xe4\xe5\x0c\x92\x99\x83\xa2\x8d\xa7\x88\ +\xcc\x92\xc5\xd3\x22;\xaaG\x89\x996\x8b\xce/\x13;\ +6\x81\xf72Pz\x0eg\xd0\xe0\xbeW\xa5\x8epA\ +\xcb\x22\xf7\xe9\x08\x1dJI\x07\xdb\xd2/\xec\xe0\x1e\x11\ +\xc6\x0f\xe9/\xc4\x82\x8b\xad4\xcd%\xa6\x13l\x8c\x84\ +\x19\x0c\x98\x88CL2E[jyjHX\x9d\x81\ +\x0d\xde\xee\xe0|I'q\xcc\x09\x12\xeb\xc4\xd5\xd9\xd0\ +9\xc8\x8b5\x9e\xad\x1f\xcfV6\xb0\xb3cP\x1bY\ +\xe5\x0c6?<\xff\xe8\xd1\xf3\x8f\x1e}[\xa3gs\ +\xde>\x09ib2\x84\xf5\x89\xe3\x14M\x9c\x97\x13\x9a\ +\x0a\x0e,\xdb\x18AZ\xfe\x11\xa4\xbd\xf2\x11\x14\xca\x1e\ +\xd7\x1f9l?rve\xe4\x14\x97HW>\x0c\x81\ +\x0a\xa7x<)z\x1d\xf7*\xb2i\xe1\xce\x17\x92M\ +o\x1e\xcd\x8a\x1f\xba\xdb\xc9\xd9r\xf7\x91\xbe\xef\xa3\xe7\ +\xce\x0ar\xf7\x91\xb6\xef\xa3\xb5\xe6\xe9\x87\xd8\x1d\xebL\ +\x1d\x9dv\x9a\x90\xd7\xfe\x0e\xb5\x9f\xe4|\xe0\xf6\x9d\xa6\ +|\x03z\xebJ\xd1\x80R\xeb4\xbf6;\xdf\xf6g\ +\x03E\x9f\x0d\xf8\xdb\xfe\x0b\x07\x9fd=%\xa8d9\ +r\xa8ls\xa3\x11\xb8\xefn\x00\xef\xe5\x0d\xf9Y\x0e\ +\x05\x9e.\xdb[\x9c\x04/\xbd\x82\xb2I\xd8\xd2\xbc\xd3\ +\xd3\x22v\xa4\xd7J\xfeW\x0e\xae+E$\xda\xae\xf7\ +Au\xf8\xea\x88T\x1d\xee\xa9T\x04\x95\xdc\x85\xdbk\ +\xe3R\xa6\xac\xefO&\xd3\x1f\x96\xc5i\xe7 \xf0\xda\ +\xe8>\x7f\xdb\xb1\xfcm\x91\x97eM\xf2\xb6\x10+\xd5\ +/\xb7\xa0\xac^\xfc>\x947\xde\xa4\xcb\x1f\xdc\xd4\xc9\ +t\x1f\xcf\x9eyr\xacC\xc6\x87\xefTJ\xadw\xde\ +\xcf\x9d\x9d\x19\xebj\xbd8\xf2\xe4\xe8\xc6\xf5\xb9\xf2\xf2\ +\xde\xdcQ\x11G\x94\x01\xdd\x80\xeeL\xb2\xb3\xd4Q\xf5\ +\xddb\xce\xb3\x86\xaa-\x85\x9d\xa9\x8d\x0c\x8eLpq\ +\x0e\xbc\xcfXv\x96<\xb3\xcfp\xf6\x0c* \x11O\ +:\xb8Z\xe7e\xf2\xd4\xb7\xb87\x7f[<\xcb7\x08\ +J\xc6o\x10\x94?\xe2\x13\x04%\xdb'\x08pG>\ +AH\xa7T\xe8\xa7\xf8#\xfe\xfd\x0fEN1\x86\ +\x00\x00\x06}\ +\x00\ +\x00\x18\xbfx\xda\xddXmo\x139\x10\xfe\x8e\xc4\x7f\ +0\xd1IIhn\x93\xf2vb\x01Um\x0a\xb4\x12\ +\xbd\x83\xb6\xd7\x0a\x01\x87\x9c]'\xb1\xea\xd8\xc1\xf6&\ +\x0d\xd0\xff~c;\x9b\xf5\xbe%M\xb9O\x97V\xd1\ +\xc6\x9e\x19\xcf\xeb3\xe3\xa5\x93\xa9\x90\x1a}\xd0\x1f\x12\ +\x1a]\xdd\xbfGs\xbf\x83K\xcac1/-\xf7\x05\ +\xd7R0U\xbb\x11\x9c`M$\xc5\xacD\xf1\x0e/\ +D\xa2\x81\xd3\xfc9\xf1\xe8\xc7\xfd{\x08>4\x0e\xd1\ +\xdc\xae\x9c\xd1\x11\xc7\xecuL\xb5\x90\x86\xce\xec\xcei\ +\xac\xc7!z\xda\xeb\xb9\xdfcBGc\x1d\xa2'f\ +\xc1-\xf5\x05\x9c\xc5\x09\xd7\x81\xe0\xe6\x99\x11M@\xe6\ +R\xbc\xf9\x5c\xa3W\xe8,\x92\x84\xf0\xc0\xca\xeb>B\ +\xbf\xa3\xe5SF\xb5\xc8\xa8\xdc)\x96,}tt7\ +\xe9\xa1\x13\x11cF\xf5\x22\x04\x13\x83\xfd\xe9\x94\xd1\x08\ +k*\xf8\x89Yw$C\x86G\xca\xee\xa7\xfet\xeb\ +\xca\x9a\x89\x14\x9e\x91\xf7X\xe2IKiI\xf9\x08\xe9\ +\xc5\x94t\xd0\x0cK\x14c\x8d;h \x04CT\xfd\ +I\xe6\xed\x1ccL\x8c\x85\x15\xac\x94kt|\xd8N\ +\xcf\x99J1%R/\xd0\x92hj8\xce\x81\xb2\xb0\ +m\xd8\xec\xde\xf1aa'\xd3\xa0$\xd3\xa89\x03\x0f\ +\x80\xaaB~\x1dJ\xf2-D\xdd\x7f>\xc7;\xad\xcf\ +\x01|\xb7\xf7~\xeb\xae\xe5\xc0\x8c\x01C\xf0\xb0\xebR\ +\xc2\xfa+\xe1\x91q!b\x02\xc7-g\x12\x98\xfc\xd5\ +\xea\x06\xd6\xa9\xaf\x1c\x5c\xe1\xc75b\x04\xcb}\xc6Z\ +\xedl\xcd\xaa\x0b\x91t\xe4\xd9\xfa\xcaz\xd8\xd3\xd6\x09\ +\x85\xbd\x0b\xcc\x12\x12L\x19\x8e\xc8X\xb0\x98\xc8sr\ +\xad\x81\xd8s\x9bw\xca\x10\xb5\x5ch|}V\xb2\x8e\ +\x0f\x81\xb1\x97\xdf(\xe7x\xa0\xa9fF\x9f\xe6\xbe\xd4\ +dB\x15\xa4\x9bQ\xbe\x89v\x8a\xc1\xb2\xb9\x87\x08S\ +\xa4\xfe\xbc\x95\xaf>\xf5\xbe\xdc\xe5h\xb3Swvj\ +\xb3\xe7\xc5W\xc0\xfc\x06\xe2\x9e\x10\x1e-\x9a\xe8\xe7O\ +T\xd8<\xc0<\xb6E\xd6,9\xc9|L>\x98\xbc\ +\x01%\xa21\xe6#\xf27\xa7\xba\x95\x19\xb1\xfb\xa5]\ +f\xf2\x22\xa5]x|\x06\xd4\xb5\x12\x03\x15aF\xca\ +\xcc&\xaf\xcc!\x00\x12\x03q \xae[\x968\x81\x95\ +\xc2I\xd5\x9e\xde|~AJE\xa0\x0e\x89\x8a$\x9d\ +\x9a4/\x0bx\xe4\x09\xb8)\xe0\xcd\xaa8\x0cl\xb4\ +r\x0e\xfd\x0f\xe3bbb\x9d\xf7\x06G\x90%\xa0]\ +\xe2\xf9+\x88\x12)\x01g\x9d\xfd3\xf3]f\x9f`\ +\xca-AZ:\x9e\xb7\x1e\xfa\xc27%\xf6\x06a%\ +W\xa5<\x96\x0e\xe8?-+\xa3\x93I\xe9T\x07\xc1\ +s{\x06\xca+\xa7-\x99:9(\xb6\xe8c\xb3\xf6\ +\x0c8\xe2C\xe8yb\x14\x00\xd2\xf1\x14\x8b\xca\x91\xcb\ +\xd0\xca7\xd53\xcb\x12\xf8XV\xd2\xb6DQJ\xe9\ +\xe6\xd1\xf7f\xbd\x06Y\x9d\x0d\xd3\x0c\xc9)c\x9b\x0f\ +\x1dQ\xad\xc0\x81+\x92@\x8b3\xdbBZ\xed\x80\x11\ +>\xd2\xe3\x22\x14.y^\xa2'\x85J\x92D'\x92\ +\xa3\x1f.\xf0!\xda\xed\xd8\x8c\x0aQ\xe3\xe8{\xc3\x8f\ +\x9c\xcd\x80\x9c\xa8?6\x88\x82Yc\x1cL\xc5\xbc\xb5\ +\xdb\xeb\xa0\xc7\xed\x95\xe0\xab\x8d\x92w{\xdb\x88~\x96\ +\x89>\xa9\x10\xbd\x85\xa4\xe7\x99\xa4\xb7\x9e\xa4\x9b\xca\x06\ +\x98\x8b\xaa\xc5(?PC(\xce\x96\x89\x16\x8d\xcdp\ +\xd3{a\x1f^\x16\xcaU$\x5c\xbb\x9d\x9d\x9dR\xad\ +\x1b\x97\x18r\x0b\x0a9>[\xd9\xfb\xba\x05\x8cm[\ + \x95\xf8]\x85\x0c\xc7<&F\x1f\xe0,3\x0c$\ +\xc1W\xb5\x10Yt\x86+\xa9\x13\xa2\x14\x1e\xe5\xb0\xc1\ +\xcc\x8b\xa5\xd2\xcb\xb6mc\x0bQ\xb3oI\x90\xa5y\ +\xd0\xcc\xf6'N\x22P|\x14\x89\x5cJRh\x0ct\ +h\x00\xb3\x1fRI\x14\x01\xcd0ala\xf1 \xc7\ +\xae4\xa0'\x96\xf1A\xa2\xb5\xe00\xde-K\xff\xaf\ ++\xbf&\x04\xdf\x07!\xd3\xe2\x1cZ\xd3\x8b#&\x14\ +\xf1\xabz+_\xc4v\xf3\xd0\x0e\x850\x88\x0f\xa9\x9c\ +\xd8I\xd43\xd9\xcc\xa4!\xd2\xd2\xc7\xeb\xa5\x9f\x1a\xfb\ +\x92 \x98\xcd\xc1lI\xf6\x1a\x15~j\x80\x9f\x10\x06\ +*<\x80\x11\x1ei\xb1\x1c@\x91\x1e\x13\xa4\xe01\x02\ +3Q\xc3\x9f\x1b\xe0\xb9\x11\xa0s\xd8\x87\xe9\xcf8\x13\ +E\x98s\xa1\xc1\xc1\x9061\x0c\xebA\xf9$\xc3\x08\ +\xa7\xcd\xb1\xe4\x8d\xcd\xfe\xeec\x1e\x11\x86~\xa6\xbf?\ +\x12u\xcb\x00\xf8\xe3s\x11\xe4\xed\xf4\xfc\xab\xd1z_\ +\x08\x12h:\x16R\x05Cjf^8\x07\x0a\xc5\xd7\ +\xb5/X2\xe1\xee\x86TT\xb6\x9a\xb7\x8a\x82\x91\xa1\ +>\xc1rD9\xa0l\xaf\x9aF\x9a\xab\xcc&\x22-\ +\xa6\x9bH\x06\x02\x821\xf1\xa9\xf2t\xa7b\x9e\x99S\ +\x06\x023X\xbf\xa1\x84\xc5U\xb0\x92\xa6u\xd6\x17\xab\ +ifT\xd1\x81\xc9\xe0,\xeb\x1e\x98\xe9\xc6k\x97M\ +\xb4g\x93\x1e\x85h\x88KP\x9d~\x9c\xa6\xd6\xc3\x97\ +\xee\xb2\x99/\x94\xdc\x0c\x97\xbf\x1d\x84\xe8\x9b:\x97\xad\ +\xc6j\xdcj\xb4k\x94M\xef=!:%\xa3\x84a\ +\xf9\xfaz*!\xefA\xcb\x8bt\xaf\xce\x1b\xae\xaf\x14\ +\xb8Bt\xb7\x91\x0f\x5c\x92\xbf\xb6\x81sr\xb7\xb2j\ +\x1dn\xca\xcb7U\xa1M\x1b\xc2\xba\xc8\xfa\x8d\xe3\xd6\ +\xb1\xdd\xd2\xc6\xcda7}\xedT\xd8Va\x1e\x9b\xd5\ +T\x00\x9d\x04\x0a\xef\x1dU\xfa\xc4<\xae\x8b\x91!z\ +\xcd\xc8\x04J\x14\x06\x00m\xf3\xc3\x8cc/\x90m\xa8\ +P(Un\x5c\xcb}\x95c'\x8f\xb7\x16p\x92\x17\ +\xf0lk\x01o\xf3\x02\x9e\xd7\x09\xa8N\x90\xb5\xf9r\ +\x16I\xc1\xd8\x05%\xf3*\xaf\xde\xb6,\x97t\x1ej\ +=]+\xech\xf9\x02\xa9Z\x9a\xd3\xe9\x00\xcb`F\ +\xa4\xa60\xc4\x05\x94k\x22\xe1\xc6Bg$\xe5\xaa\x86\ +4\xe8\xa4x#\xa2y\xf0\xb4\x15\xc4x|u 3\ +\x97xj\x924\xb4\xda\x98n\x15\x5c\x0a\x19_\xc2r\ +5\xc3Pp\x0d\xc3)\x18xF\xbf\x932\xdc\xdf&\ +\x889\xa8\xafq;\xc0\xcb\x88\x9b\xb4r/\xcb\xcc\xaf\ +\xa3>1n\x85\xfe\x9d\xae\x5c\xb8\x95\xdb'B\x99\xd2\ +\xcd\x08\xebB\xe0z\xbf\xa3\xdb\x00=\xee=\xd2\x9e\x83\ +\x10\xb4\xae)\xe8\x5c\x98\xcc\x01u\x11\xa2\x11\xdc\xe1\x14\ +\x8c\x9d\x91\x99t\xbe\xc9(\xec\xd2\x09L\x0b\xaakv\ +T\xd7\xa9\x17\xa8\xd9\xa8Q- \xa6\x0a\xf2c\x11\xa2\ +\xfd\x81\xd2&)\x9d)\x81\x09\xf8\x01Q4&\xc7Q\ +\x9de\xf5\xc185\x15q\x9bP\xb8\xc9\xaa\xcfht\ +U1X\xe5\x15\xad\x1eJsW\xe4\xbb6\x99cM\ +&u\x87\xdf\x166n\xee\x96@\xe6>\xb0.}\xfc\ +\x5c0W\x8f\xbbf\x829\xe7\xff\x90\x07\xeem\xd5/\ +\xb4\x8c\xf2\x90\x0d\xff\xff\x02\x83*\x95.\ +\x00\x00\x0b\xbe\ +\x00\ +\x00Czx\xda\xed\x1b\xfdo\xdb\xb6\xf2\xf7\x02\xfd\x1f\ +8\xbf\x1fb\xaf\x99\xe2\xb4\xeb\xc3\xe0\xadxp\x93\x16\ +\x0d\x90\xa4Y\x93\xb7b(\x8a\x82\x96h\x9b/\xb2\xa8\ +It>\xba\xfa\x7f\x7fw\x14\xf5MJt\xd2vC\ +1\xa3hl\xea\xeex<\xde7)\xbe\x8aE\x22\xc9\ +\xaf\xf2\xd75\xf7/\x1f>\xe0\xb5\xdf\xde[\x1e\x05\xe2\ +\xba5| \x22\x99\x880\xb5>\xf0N\xa8d\x09\xa7\ +a\x0b\xe2\x98\xde\x8a\xb5lc\x1e\x02\xb0X\xc0\xf8\xc3\ +\x07\xd9\xa4\xe4\xcf\x87\x0f\x08|x0!\x81\xf0\xd7+\ +\x16\xc9\xf4\x84Ft\xc1\x92\xec\x7f\x84E\x88k\x1e\xc8\ +\xe5\x84\xfc4\x1eg\xbf\x97\x8c/\x96rB\x9e\xe2@\ +6t `\xb6\x08(x\x22\xc2\xef!\x93\x0c\xe8\xea\ +)\xf0sC\x9e\x91s?a,\xf2\x14\xbd\xbd\xc7\xe4\ +\x07\xa2\xbf\x95P\xb7%T6\x8b\x02\xcb\xbffp\x9b\ +|\xd2\x95\x08h\xc8\xe5\xed\x04\x16\xe9M\xe38\xe4>\ +\x95\x5cD'8\x9e\x81\xccC\xbaH\xd5\xf3\x5c\xd2\xd9\ +\xb8\xe42d\x13\xf2Gz\x91\x0c\x07\xd3D\xb2\x15O\ +a\xa2\xc3\x5c\x0eD\x0bb0\xca1R\xbe\x88hH\ +Rz\xc5N\xd95\x00\x92\xe1\x15\x85\x1d\x88$J\xef\ +\x8c&tu\x9c\xcaQ\x0dx\x1d\x07\xb0Mn\xb0\x01\ +C\x99)\xd8T& \x07\x9b\xa9\ +\xa2\x7f\xf7\xec\x19Y\x03\xd0\x9cG,P3\x19\x94\x01\ +\xad\x0b&\xaa\x22\xea-o\x03\x17\x02l\x22X$\x8b\ +8\xa8\x16Mp\x1c3\xb0R\xaaF\x8b\xa1\xf2Q\x1b\ +\x0f\xb5\xa4\x89\x80cmH\xad)M`=\xdc\x14\x0f\ +r\xf9\x92\xb30\xf0$\xac\x0f\x90\xdal\xcfy\xc8N\ +\x9b`\x99H\x1f\x91\x1do\x07\xfe\xb7\x88\xa6\xb2\xa2:\ +\xb2m\xa5\xa1\xf0/OX\xb4\x1e\xcei\x98\xb2Q\x93\ +Y\xdc\xfcL\x10\xb0\xe9;G+\x88\x02;\xe4\xd3'\ +R\x8eM\xd7\x01\x17;-\x8f\xa0<\xef5\x97\xfe\xf2\ +,\x13\x83w\xc5S>\x0bQ\xa42Y\xb364N\ +UH\x12(\xef\x1bi\xb6\xe9\xfaK\xe6_\xb2\xc0J\ +wC\x18\xacl[ZJ\x1c\x06b\xf5!;m\xdb\ +\xda\x0dt+4\xcd\xf4\x8a=\xc2\x05\xb6=E\xdb\x15\ +\xf8\x90\x17\x81%\x1b\xbd\x01\x8a\xd9h\xf2\xca\xae\x7f\xd8\ +\xb7\x86\xa6\x14|E{\x9dFR\x06\x9fi\x11\xff\x0e\ +*\xff\xce\xa4a\x14\xbb\x16\xe0\x8a\x16\x03\x8eQ\xd7w\ +{\xf7\xccE\x80\xa5\xc4\xc5b\x11\xb2\x96\x00\x0d\xc3\xf8\ +\xc1\x1c\xe3\xf9ZJ\x11y,\xa2\xb0\xe1\x16M\xdaB\ +9\xb2D\xc8\x85(\x0b\xb8\xec\x833\xeb\x97\x91\xed\xb6\ +1YXi\x03\x1a9\xa9\x83\xd9U\xb7\xc8\xa8\xaa\x5c\ +\x96\xea\xa1\x9e\xd7\xd2\xad\x9a\xafl=n)I\x0b\xa2\ +Ho\xaa\x0f\xda\x8ci\xd7\x94\xdb\x14O?\xe4if\ +3\xd6\xea\xf1#\x88\xc7w\x08\xb5\x15\xec<\x82(\xcb\ +\xb4L\x98\xa3u<\xbeG^W\x9d\xc1\x90D)?\ +]e\x18\x07\xadD\xec9\x16\xf2d\xc6\xd9\xf4\x9a3\ +~L2\x83\x00R\x05q\xf5\xdbfRc\xab\xc7\xc6\ +OQ\xd8\x0c\xcb\xac{\xd4\xd8\xa2v\xce^\xd4\x10j\ +\xf8\x1c*\xa9 \xabJ=\xb4\xc7\xa1\x8b\x9b\xba\x82\x82\ +\x0f\xa7V\x9a\x9d\xb6\xfd|\xc4\xae\xcf\xa8\x5cV3\x01\ +\x0c\xd9*\x82\xc3\xb3f\x8a\xa1\x9e\xb5\xb6oo\x8f\xac\ +X\x9aB\xe4W\xb6F\x84N\xbe\x22!\x8b|\xa7\x8e\ +\xa1\xd3V'\xdf\xa3a\x1d\xbd\x03\xc4\xa0\x17\xe0\x5c^\ +\x02\x1f\x17\xa0jP[\xcf\xc4sq3l\xe9]\xa9\ +\xef\xc1\x8d\xd6x\xf8\xf2\x8brMM\xec\xc2\x00\x00\xc2\ +`\x03\xb5\x14\xc8\x88\x0f\xdb\xb0fSP\xe8\xe0fd\ +\xd4~\xf3\xac\xd5\xd8\xfb\x0cgo#\xce\x12F/\xed\ +\xd9\x82ML8\xdfAF\x1e\xb5R\x95PUO\xb8\ +KZ\x02\xbbg\x91\xa0s\xfe\x0f1V\xf3\xed\xfa\xcf\ +P\x06\xec\xb6\xb3\xe2]k.\xdbxb(\xe0L\x99\ +w\x05\xa4R\x8c\x95\xd6\xfa\xae\xe0\xf8}\xd3\xed\xe3n\ +e\xd6X\xb3\xa9`\xa2l {R\x8e\xeb\xfe\xc9\xe0\ +\x0cB\x08\xa8\xb8\xbf\x14\x02\xfeP\x05;hF\xb1P\ +\xb2$\x9d4%4P\xb95\x19~\xef\xfd/^\x90\ +\xef\xbd8Z\x8c\x06\x8d5\x0eT\xae\x8d0\xab\xf8\x09\ +\xc0\xac~\xa4\xf0?\xa4\x22m\xc8\xbcu\x83\xc0\x12l\ +\x1b\x08\x06s\x03\xc10TL\xa6\x007\x1a\xd4\xc4U\ +\xfe\x10\xd1\xd4\xf7Y\xdcla\xa9\x15\xb5\x1dL\xb1\x13\ +(BS9\x91??-\xa4\xe1e\xc5\x5cYa\x18\ +\x8d\x08\xe6\xea\xb3\xa1\xb1\xd1\xcb\xf7N\xdaQ\xc28L\ +\xba\x7f\xb7I\xf3\x1d\xba\xf3\xbc\x8f]C\x9a\x03\xad'\ +\xce>\xc6l\x14\x81\x1a\x9d\x06\xc1)\xd6\xbb\xf9\x93\xbc\ +3\xfa\xe3\xb8\xb21\xba}Z\x1b\xbb\x99@\xdeC\x91\ +\xa1\xac\x1b\x9a\xf7BGd\xaf\xba\xcc\xdb\x12,#]\ +4C5`%\xa9\xc3\xa6\xe7\xa4\x11V\xfc\x10\xcc\xf2\ +L\x84\xdc\x07Jg\x22^\xc7\xde\xa9\x98\xae\xa58\xc0\ +\x07U\xf4T\xd2(\xa0I\x90e\xb1`\xad:2c\ +\x94&\x9f\xf2_-\xb4\x03\x11\xaeWQ\xd6sn\xee\ +\x04\x8d\xc0-$\xa9\x07\xe6\x06\x8ce\xcbh\x9a\xc7\x1b\ +qmF\xc6O\xf6D\xe1\xbf\xcddh\xaew\xdb#\ +\x17`\x98\xcaD\xad\xe9\x1dla\xd5\x94\xcdP\xae\x0c\ +\xa84*\xa4>[\x8a0`\x09\xce\x9e\xf7\x96q\x86\ +\xc1\xc8\x8c\x02\xa1.x\x1d\x85\xb76\xb2\x1b\x97\xa5f\ +\x1bf[\xa7\xac\xb0\xf2<\x11\xd7)\xb31#\xa2\x03\ +P\x93K\x83\xcbk\xf6i,9\xdbvI\xec\xe6+\ +iBn\xff=\x8a\xd0t\x17f\xe0\x15f\x07\x10\xc8\ +\xb2\xd05\xd8\xd5\xf1\x09\xbf\xe4\xce\x0d\xbf\xbf\x96K\x96\ +\x0c\xde\xdfqC]u\xb7\xc8e\xbf\x98\xee\xe2\x0c&\ +u\xe9\xdb\xcas?\x11a\x88\xc9S\xcf^\xbe\xd2\xee\ +\xd2\xcc\x99\xeb\x0a\xb2\xe9\x9e\xd3\xc4\xbbb\x89\xe4>\x0d\ +=\x1eA\xe8\xa1\x90\x1a^\xb1\xed\x9c\xc6\x14l\xb2G\ +\xee\x87\x8d\xfaz+\x91V\x90m\x86x\x9d\xd0\x18\xd3\ +\xd0\x89b\x08\x93\x7f\xef\xadH\x82\xb70\xec\xb2\x15\xc6\ +]\xe9Hh0l7\xab*so\xb38\xf9\x1a\x9a\ +\x19\x7fgw\x1b\xad\xaci\xb7\x13\xf6\xd4\xa57\xa6a\ +\x0f\x1d{b\x0e\xb9\x01\xca\xdb\x8ch\xb0\xe5\xd1gI\ + p{\xffI\x1f\xfen\xe9\x83K\xd00U\xb8\x7f\ +\xf7\xa8\x81<\xff\x136\xfe\x82\xb0\x81\x82\xff\xc6\xe2F\ +\xa3\xe3bn\x01\xf5:r\x93`\xba`\xdd]\xf7\xa8\ +\xcf!\x9f\xe8\x16\x9f\xd1/\x1f\xaa\xce\xff\x81\x88\xe6<\ +Y\xd1\xfa!\xa2\xd1U\xe6\x0d\x11\xd0\x04\x02\xfaG\xd2\ +u\xc2\xfeS\xe9/\xe8\x86\x22@\xfc\x0eO\xc1\x99\x11\ +:C\xbf%\x85>e `\xfeE'\xa1\xb8\x90\xe3\ +\x91\x0b\x18\x8e\x13\xe1\x03>\xf1i\x84=\xc8\x19\xc3\xd3\ +h\x111\xaf=\x01\x0a\x07&\xb9\xa6I4pq\xd0\ +\x07\xe0fYX\xba\xe8\xdfY\xea\xa8\x00\xc5\x85\x95a\ +\xf7}\x01s#\xcd\xed6\x84\x05\xb7\xbc\x0bs't\ +\x87\xdb\x10\x16\xcc\xe2\x80\xfbshZ\xab\x0d\xde\xd2\xa6\ +\x9d\xac\x81N\x14\xccw;\x06m\xda\x01mJ4\xa5\ +\x94,1\xda\xce\x18\x8b@\xfd|\xd4\x98\xf9:\x0co\ +U\xe6VC\xb7)\xc3\xeb\xcb\x06\xffg\x0d\xb6\xfbb\ +\xb25\x1e\x9b\x11M\x10\x09\xfa\xf6\x13\x9a,x4!\ +\xfbc3P\xc8\xe6\xbd03\x01\x8b[\xd9\xa0\xd2\x98\ +\xfa \xaasH9\xd2>\xa0v\xd2<\ +!3\x9a8\xf0:\xa9z\x1e\x8b\x1e\xffL\x12\xf0^\ +\xc8\xc5\xd3\xae\xad\x15\xd1A%*\xebCf\xc8O\x1a\ +\x17\x02;(`\xee\xb2\x80\xb9'D\xddY\xe8q*\ +\xf9\xb6\x1fj\xac/\xeb7\x1f\x8f\x9d\xfc\xa0vs\xea\ +xe\xd3\x8dq\x22\xd6)\xeb*Q\xb6\x8b\xd4w\xef\ +\x1e\xf7^\xa3\xc2Sa\xfc\xdbObs\x1f\xc7\xd0q\ +[#\xab\xd5q\xf3T2\xe8\xa2\x1a:o\xdc\xda\x15\ +\x99\xcb\xc9\xf2xW\xc5/H9\x05\x84 \xbc\xe4>\ +\xc0\xbcu\xd0\x8f\x01\xc5\x94\xb2\xaa\x09A\xf9\x9e\xeb\xd1\ +\x97\x90\x0a\x9e\xab\xab\xdf\xfd\x14J\xf3p\xc9*,\xcb\ ++\x5cE\x9fG\xed\xf4\x1f[;\xc7\xee\xf2\xdd~8\ +\xb1\xed\xc9\x0arN\x03\x9dB\xf7\x1f\xbeL\x83\xc0V\ +\xb8\xeb%B\xf6\xb1\x88\xb0\xe6\xcb^g\xc0_\xaf\xb2\ +\x18\x08\xd5Y>\xf2[WT\xe4>\xec]\x0a\x05\x81\ +\x8f%\xe0\x1f\x89?\xd9\xe3\xd8rJ\xf7\xf0I\xba\x07\ +\xecz\xe9\xd5\xc2\xa2B\x01O\xe3\x90\x82\x9eMg\xa9\ +\xc4.\x88\xbe\xd0\x86\xa5\xf5s\x96\xf2\x80\x1d\xf9\xb6\x95\ +\xba\x99\x7f\xf5\xcc\xf4s\x1f\x1f]\x08\x11\x9e3\xbc\xda\ + \x85Q\xe3p\xbfd\x15\xa8\x0d\xa2J\x8f3\x90\x92\ +J\x8f\xf6\x0d~\x18\xeb\x8eN\x00'u\xdd\xdc\xb1\x9e\ +\x80\xeas\xce\xc0Y\x06:\xadx2\x1e\x9b\xf4\xb63\ +Q\xae\xea\xe4\xcb\xa3\xe3\x17\xe4\xf0\xc5\xc5\xf4\xe8\xf8\xdc\ +\xa6\x9c[%\x8e\xdbd\xa7\xad\xec\xf7\xa7/h\x1dF\ +\xfbv;h\xfb\xcb\xda\xa5\x99]!d\x99\xe1td\ +x\x8d\x0b\xd0\xf7s}N\xa2\xa9\xddC\xfdb\xe2\xc1\ +\x8e\xdf=\x0e\xd0m}\xdf\xaeT\x7f\x1b\xae\xb7\x8aO\ +n-g3n_\x9b\xb9\xe8_:\xb5\x99\xb7n\x18\ +\xd7\xcdV\x00\xdb\xdal\xc7]y\xba\xab\xf6\xbakp\ +wi\xe7\xa4\x00\xbd=\x97\xee\xc0_\x0a\xba\xbc\x1cn\ +\x87\x94\xb5&>b\x0c:V\xd6\x17\xc1\xb39;\x82\ +\xf8}\x03y\xb7\xc7}\xa3\xce\x10\x1d\xb3\x91\xed\xca\x02\ +[\xdb\xbd3O\xb8K\x9d\xdfW\xf0mc\xfc\xd6I\ +\xce\xd5\xeb\x0e\xbd-\xbb\xeaK\x11n*tBy4\ +\x18uU0 \xf2\xec\x95\x1eW\xbb\xc3\x0b\x00\xfa-\ +\xa0\x91K\xf1\xd6x-`\x7f\xd4S\x89u\xbe\x8c\xd4\ +Ax<\xfaj\xbd\x1f7\x83/_\xf2p\xdb+\xf4\ +\xa8]\xc6\xae\xdf\x14\x99\xd8\xde\xbcru\x0aP=C\ +\x14\xfe\x16\x9dB\xfb\x08\xd1\xe9\x92\xb6\xe1\xb5\xc8v\xa5\ +k\xbeV\xefxz4\xea\xe7\xfb\xd0\xf2^\xa2\xcb\xd1\ +\x98\xed\xd5E\xb3\xd3T\x91\xfbs\xbbI7\x93(\xdf\ +\xa3r3\x89\xd7\x00\xff5L\x02\xf9\xfa\x16\x0dB\xbf\ +\xd2?\xecw\xa6\xf79\x81\xbd\xcf\x89l7\xb5\xcf\x95\ +\xd4\xd9\xef.\xe8?\xf0\xef\xff\xf9\x10q\xe8\ +\x00\x00\x05\xc1\ +i\ +mport QtQuick\x0d\x0ai\ +mport QtQuick.La\ +youts\x0d\x0aimport Qt\ +Quick.Controls\x0d\x0a\ +import QtQuick.C\ +ontrols.Material\ +\x0d\x0aimport QtQuick\ +.Window\x0d\x0a\x0d\x0a\x0d\x0aDia\ +log {\x0d\x0a x: (p\ +arent.width - wi\ +dth) / 2\x0d\x0a y:\ + (parent.height \ +- height) / 2\x0d\x0a\x0d\ +\x0a modal: true\ +\x0d\x0a closePolic\ +y: Popup.NoAutoC\ +lose\x0d\x0a\x0d\x0a prop\ +erty string mess\ +age\x0d\x0a propert\ +y string message\ +Type\x0d\x0a\x0d\x0a RowL\ +ayout {\x0d\x0a \ + Layout.fillWidt\ +h: true\x0d\x0a \ + spacing: 10\x0d\x0a\x0d\x0a\ + Image {\x0d\ +\x0a Lay\ +out.alignment: Q\ +t.AlignLeft | Qt\ +.AlignTop\x0d\x0a \ + sourceSiz\ +e.height: 60\x0d\x0a \ + source\ +Size.width: 60\x0d\x0a\ +\x0d\x0a so\ +urce: {\x0d\x0a \ + switch \ +(messageType.toL\ +owerCase()) {\x0d\x0a \ + c\ +ase \x22question\x22:\x0d\ +\x0a \ + return \x22qrc\ +:///images/icons\ +/dialog_quest.sv\ +g\x22\x0d\x0a \ + case \x22warn\x22:\ +\x0d\x0a \ + return \x22qr\ +c:///images/icon\ +s/dialog_warn.sv\ +g\x22\x0d\x0a \ + case \x22error\x22\ +:\x0d\x0a \ + return \x22q\ +rc:///images/ico\ +ns/dialog_error.\ +svg\x22\x0d\x0a \ + case \x22info\ +\x22:\x0d\x0a \ + return \x22\ +qrc:///images/ic\ +ons/dialog_info.\ +svg\x22\x0d\x0a \ + default:\x0d\x0a\ + \ + return \x22qrc:\ +///images/icons/\ +dialog_info.svg\x22\ +\x0d\x0a \ + }\x0d\x0a \ + }\x0d\x0a }\x0d\x0a\x0d\ +\x0a Label {\ +\x0d\x0a te\ +xt: message\x0d\x0a\x0d\x0a \ + Layou\ +t.alignment: Qt.\ +AlignLeft | Qt.A\ +lignVCenter\x0d\x0a \ + Layout.\ +fillWidth: true\x0d\ +\x0a Lay\ +out.minimumWidth\ +: 200\x0d\x0a \ + Layout.maximu\ +mWidth: 300\x0d\x0a\x0d\x0a \ + textF\ +ormat: Text.Rich\ +Text\x0d\x0a \ + wrapMode: Text\ +.WordWrap\x0d\x0a \ + }\x0d\x0a }\x0d\x0a}\x0d\x0a\ +\ +\x00\x00\x06\x85\ +i\ +mport QtQuick\x0d\x0ai\ +mport QtQuick.Wi\ +ndow\x0d\x0aimport QtQ\ +uick.Controls\x0d\x0ai\ +mport QtQuick.Co\ +ntrols.Material\x0d\ +\x0aimport QtQuick.\ +Layouts\x0d\x0a\x0d\x0aWindo\ +w {\x0d\x0a id: win\ +dowSpaceWeather\x0d\ +\x0a\x0d\x0a width: 10\ +00\x0d\x0a height: \ +700\x0d\x0a\x0d\x0a Compo\ +nent.onCompleted\ +: {\x0d\x0a x =\ + Screen.width/2 \ +- width/2\x0d\x0a \ + y = Screen.he\ +ight/2 - height/\ +2\x0d\x0a }\x0d\x0a\x0d\x0a \ +modality: Qt.App\ +licationModal\x0d\x0a \ + flags: Qt.Win\ +dow\x0d\x0a\x0d\x0a title\ +: qsTr(\x22Artemis \ +- Space Weather\x22\ +)\x0d\x0a\x0d\x0a functio\ +n updateBottomBa\ +r(message) {\x0d\x0a \ + spaceBotto\ +mBar.text = mess\ +age\x0d\x0a }\x0d\x0a\x0d\x0a\x0d\x0a\ + Page {\x0d\x0a \ + anchors.fill\ +: parent\x0d\x0a\x0d\x0a \ + footer: Labe\ +l {\x0d\x0a \ + id: spaceBottom\ +Bar\x0d\x0a \ + font.pixelSize:\ + 12\x0d\x0a \ + leftPadding: 5\x0d\ +\x0a rig\ +htPadding: 5\x0d\x0a \ + bottom\ +Padding: 5\x0d\x0a \ + }\x0d\x0a\x0d\x0a \ + ColumnLayout {\x0d\ +\x0a anc\ +hors.fill: paren\ +t\x0d\x0a\x0d\x0a \ + TabBar {\x0d\x0a \ + id: t\ +abBar\x0d\x0a \ + width: pa\ +rent.width\x0d\x0a \ + Layo\ +ut.fillWidth: tr\ +ue\x0d\x0a\x0d\x0a \ + TabButton \ +{\x0d\x0a \ + text: qsT\ +r(\x22Current\x22)\x0d\x0a \ + }\x0d\ +\x0a \ + TabButton {\x0d\x0a \ + \ + text: qsTr(\x22Fo\ +recasts\x22)\x0d\x0a \ + }\x0d\x0a \ + }\x0d\x0a\x0d\x0a \ + Stack\ +Layout {\x0d\x0a \ + curren\ +tIndex: tabBar.c\ +urrentIndex\x0d\x0a \ + Lay\ +out.fillHeight: \ +true\x0d\x0a \ + Layout.fil\ +lWidth: true\x0d\x0a\x0d\x0a\ + \ +Item {\x0d\x0a \ + Spac\ +eWeatherCurrentP\ +age {\x0d\x0a \ + i\ +d: spaceWeatherC\ +urrentPage\x0d\x0a \ + \ +}\x0d\x0a \ + }\x0d\x0a\x0d\x0a \ + Item {\x0d\x0a\ + \ + SpaceWeather\ +ForecastPage {\x0d\x0a\ + \ + id: spac\ +eWeatherForecast\ +Page\x0d\x0a \ + }\x0d\x0a \ + }\x0d\x0a\ + }\x0d\x0a \ + }\x0d\x0a }\x0d\ +\x0a}\x0d\x0a\ +\x00\x00\x08\xdf\ +\x00\ +\x00[\x00x\xda\xed\x5cmo\xdb\xb6\x16\xfe>`\xff\ +\x81\xf3\x87\xd9\xae;#m\x81\x01\xd3n?$\xeeu\ +;\xa0\xb9wk\x82\xde\x0fA0\xc82ms\xa5E\ +M/I\xd3\x22\xff}$\xf5FJ|\xb3l/\xc9\ +\x9d\xd4\xa2\x8d\xa9\xc3\xc3\xc3\xf3\x1c\xf2\x9c\x87\x92\x83\xb6\ +\x11\x89S\xf0[\xfa[\x86\x82O\xdf~\x83\xa4\xcf\xd3\ +\x19\x09\xd3\x98\xe0D{cz\xee\xa70F>nI\ +\xbc\xf7\xefH\x96\xd2\x9e\xec\xcf\xaf\xfe\x1a\x82\xaf\xdf~\ +\x03\xe8\x85\x96\x1eX!L\xbb\xb1\xd6\xbc\xcd\x0f\x83\x0d\ +\x89\x93)m\xc7\x1e\x88\xfc\x18\x86i~\x87,\xfe\x80\ +A\xfa\x1f\x7f\x0b=0\xa8\xbb\xfdw\xf1\xc7\x80)f\ +\x22\x09Z\x87>\x06~\x14\xe1\xbb9\x97\x18\xdd\xf8q\ +1\xc6\x1b\x14\xa4cI.\x81\xe1\xf2\x8c\xa4)\xd9\x9e\ +b\x18\xa7\xa3$\x8dQ\xb8\x06[\x98$T\xf1s \ +}\xbe\xbc\x8b\xe0\xb8\x1c(\x8aID{\xdc\x01Y\xbd\ +\x07\xbe\xde\x97\x22\xab,\x0cRDB\x90EK\xea\x99\ +y%4\x1a\x97\xf3\xe7bU;x\xcd{\x977\xd0\ +\x0a\x8c\x92[\x94\x06\x9by\x0c\xff\x9c\x06\x1b\x18|\x82\ +K\xa9/\xbb\x98\x01Y\x88R&\xf4\xd1\xc7\x19\xa4j\ +\x02\xb2]\x903\xf29\xef\x98\xc5\xcc\x87\xfc\xde\xf4\x86\ +\xfd\xdbV\x80\xc9-\x8c\x7f_\xf8\xe1\x92\xf6\xa6>O\ +\xe0\x1c\x13?\x1d\xa5\xf0s:G\x10/\xb9&\xf6i\ +\x0c\x9e5\x86{\x06F/\xc0\x0f %\x98\x0b\xf1\x11\ +\xc6\x0a\x1b\xa3h\xbf!&\xc6!j7^\x0dWT\ +(\x83ap7\xbcf>\x95\x05\xd95\xac\xe7;\xf4\ +\x84\xc9?W\x88\xd6vS\xd1\xfa\x83,)\xc0V\xe1\ +/cxF\xfbX1dBM\x0c\xf3\x8e\x87\xc0\x90\ +k\x12\x1d\x5c\x0fWc\xc8\x85:ch\x1bbb\x1c\ +B\xc4\x90\x0dr\x8b\x96\xe9\xe6\x11ax:\x9b\x1b!\ +\xb4\x22\xc0\x14\x94\xde)\x1d\xce\xda:\xfb\xbb\xa1pb\ +R(z\xd7\x0fV\x8f\xc8\xaf\xe7d\x99a\x9f\xed\x95\ +F\xf7n+\xb1\xf7(a\xbb\xe5\xd5uc\x86$\x06\ +|\xbfG\xf4\xe6\xc9\xcf\xf4\xbf\x7f\xb1N\x10\x8b\x03\x90\ +,L\xe9\xad\xc9d\xac\x9a=3\xaa\xd9e\x0d\xd3\x11\ +\x1akM+/\xd9\xbci\x94%\x9b\x91Z\xb2\x90V\ +\x0d\xa2X\xdb\xe55n7\xdfk=\xdd\x04\xbc6\x8e\ +\xe3.\xdbj\x05\xe8=\x09\xec\xf0\xe0BhWpj\ +\xe5\x8e\xd0T\x1d\x1c\x81\x11\x0ds\x82\xa59\xc0\xb1@\ +)\x0d\xe3\x90\x88VZ\x01\x99\xd1\x82bM\xe2;#\ + A!\xb4+ \xb5rG@\xaa\x0e\x8e\x80\x88\x86\ +9\x01\xd2\x1a\x00/~G\xcb# RZ\xc6\x11\x11\ +\xcd\x94\x10)\x7f\x14\xcb\xccV\x89\xd9\xae\x03c\x98\xc0\ +\xf4\x14c\xb9\xfek\x97xt\xe8\x95\x8f\x13\xd8\x94\x11\ +K\x08\x9d\x8c\x90\xa2t\x22\xed\xddV'\xd9\x5c\xf6:\ +\xb9f4\xb6\xe5hp\x7fbS\x1c\xa5\xb1\x94\x97X\ +;\x9b\x96\xaa\x9dNEln\xfb\xb3VJ\xd6k\x0c\ +%\xaf\xa2\x95\xaa\x95]r\xbd\x09C\x7f\x81U\x16\xf3\ +8\x15\xcbh\xa3dY\x99\x1a\x85\x92l\xbb\xf5\xe3\xbb\ +\xaa\xce\xa5R\xc3\xa12\xb0 \xed\xebj7s\x91\x93\ +\xd9m\xc1\xb6\xd5m\x19\xb6\xc8\xdb%:\xf8\xee53\ +^\xb9\xc2s\xbasQOv4\xd6\x09\x89\x9c\xc8T\ +4\xe8\xf1\xcf\x83\xa7\x13\xfe|99\xe1o\x97,\xab\ +Z\x17\xfc\xab\x1a\xb9#\xfe\x8d\x81\xf4\xf8[\x05\xdbV\ +[\xf0\xafMw\xc5\x9f\xe3sD\xfc\xf9&\xd1\x09~\ +\xb6S\xda0\xb5\xca\x14\x90\x96exGD\xe5a\x94\ +8\xd9D$\x98*s\x5cQb^<\x12H\x8a\xdd\ +@\x06J\xbb\xbd\x0c\x06\xc6\xb3\x8e\xcb\xdc\xdf\xfa\xa3\x0e\ +\xa6H\xc9\xd1\x98(\xed9\xb2\x1eB(\xce5\xc6\xd3\ +\x94\xcc\xd1g\xb8\x1c\xbdP\xf3\xb5]\x94O\x8c\xca\x15\ +\x00\x8b\xd2\xe05\xf5\xd1\x89\x12[E\xa2)\xa7=\x01\ +\x03\xfag\x22y\xd1X\x1d\xa9\x02\xb7\xc3\x18\xbc\xf1\x87\ +\xbc\xb9p\xd2N\xa6\xb8\xc5W\xbe\xdbh\xe3K\xde\xbe\ +\x0c\xf1\xc5\x04\x1b\xf1\xd5>\x86\xd1\xc6\xd7Y\xce\xd7G\ +\xd6\x03\x12\xc5\x99\x8b5\xbevQ>1*W\xc6W\ +-m\x8f/1\x91\x95\xd3\x16A-\xbd\xb8O|\xb9\ +\x8e!\xc7\xd7\xee\xa6\xb8\xc5\x17\xdf'\xb5\xe1%m\xbb\ +\x9a\xe8\xb2\x84\x87\xf9\x80h\xaf\xe00\x1f\x159\x84F\ +%l\x8f\x0c!\x1f\x8a\xa0m\x93\xc1>\xb1\xa0\xd7\xaa\ +A\x9f\xdd\xe9RV\xf8KF\xf9\x92\x82\xd3\xb1\x9f\xa5\ +\xc9\xb6\x8e\x940\xf4c17\xca\x87U\xc5\xd1~\xad\ +\xec\xea\xe4zZ\xdf\x16\x9e\x04\xa8\x09\xb9\xa0f\x8aa\ +\xb8N7jJ\xde4\x8b\xb2SH\xb7CY\xc3\x15\ +\xba\x1ekN\x17\x1a\x871\xaaI\x95g\x14\xca)\x95\ +7\xcd\x13\x12U\xd8\xa7S\x99SLF\xecm\x9bJ\ +\xcdJUS)\xc9\xbdr*\xe5M\xf3TD\x15\xf6\ +\xa9T\xe6\x14S\x11{\xb7\xa6\x22\xcdhFp\xb6\x0d\ +\xf3\x87h\xa2j\xf5\x93\xb2\xfa\xfe\xdb\x18-\xdb\xbd\xd8\ +\x15\x93\xdb\xc4\x03/\x9b\xb4\x81\x0dC\xdb_\xb5\x84/\ +\x22?@\xe1\xda\x03/NT}\xa4\xdb\xb2\xc0\xdb\x98\ +d\x11M\x9f\xaae\x9d\xdb\xc6\xcd\x7f\x07\xd1z\x93z\ +\x8a\xc2\xb6!\xf8?\xf6H\xa0\x94kK\xea\x5c%^\ +6\xb7\x89\xd7\x07rkV\x96\x9b\xb7\x80\xd8$P\x16\ +\xfb\x1e\xf83\xb9\x8cG\x83y\xf9|j06w\xd2\ +M\xdc\xd4gE\xc2t\xba x\xe9,\x1c\x11\x14\xa6\ +\x17\xe8\x0b\xa4\x00\xbet\x90\x0f\xfc\x08\xa5>F_\xf8\ +R\xf4\xc0\x9c5^l}Lc !FI\xfa\x11\xc1[s\xa0\xf1h\xd8\xa2\ +\x10m\xb3m\xb9f^\x9e\x9c<\xd0~\xc0\xb7;*\ +\x84\x99\xe09\xb9\x81o\xb2\xb8\x08\x09\x83I\x01F\x91\ +M\xeb\x8a\x04Yb\x13\xba\x08b\x82\xf1\x99\x1fO\xcb\ +=\xd3\xab\xdblp\xfb\xec\xb0\x12\xda\x860\x00L\xab\ +\x16\xb8\xa6\xd1\xe2\x81_R\xb8\xb5\x0dw\x9b;\xbfD\ +yz\xc3\xfe\xe1\x8d\xe6~\x9b\x02\x84W\x96\x02}\xc6\ +R\xbeCe&\x15)\xba/[\xdbU\xe4\xbb\x99\xe1\ +\x97\x0e\xc8kp\x96\xeb\xdd\x85 T\xa5\xa1`^\x02\ +\xd3_\x8b_j4B\xe1\x12~~\x0e\x06\x85\xc9\x83\ +\xe7\xa0\xe4\xb8O\x88P\x0a\xf5\xaf\xf3s\x0a\xb6\x076\ +\x1cs\x88\x12\xaaO\xe4\x1d\x12y\xf9\xdd\x8f>\x8dw\ +L\xe3\xef[_\xc8\xe9\x93\xf8\x01\x92\xf2\xae\xf1\xd6'\ +\xf1\xa7\x9e\xc4\x9b\xbf\x07\xe5Q\xa5\xf0\xca\xb8>\x81\x8b\ +\x09\xdc\xbe\xf9\xf5\xe9\xfb\xa8\xe9\xbb\xfc\xbec\x9f\xbe;\ +\xa6\xefY\xebK\xa8}\xfa\xee\xd3w\x9f\xbewN\xdf\ +\xcd_O\xf6\xa8\xd2we\x5c\x9f\xbe\xc5\xf4m\xdf\xfc\ +\xf6I\xdf\x8d\x1f\xe9\x7f\xf4\xef_\xf6\xb2\x95^\ +\x00\x00\x06\xae\ +\x00\ +\x00\x22\xd6x\xda\xe5Zmo\xdb6\x10\xfe^\xa0\xff\ +\x81\xcb\x97\xdah\xa7d\xc1\xf2E[186\xb6\x06\ +H\xd24\x0dZ\x14E\x11P\x22-\x13\xa1I\x95\xa2\ +\xeaz\x9b\xff\xfb\x8e\xa4\x14\xeb\x85\x92\xe5\xb6+\xd6U\ +\x08b\x8b|xG><\x1e\xef.a\xcbT*\x8d\ +^\xe8\x179\x8b\xef\x1e>`\xb5\xf7\xe05\x13D\xae\ +Z\xcdS)\xb4\x92<\xeb\xec\x08.\xb0\xa6\x8aa\xde\ +B\x9c\xe3\xb5\xcc5\x8c|\xf8\xc0\x09G\x7f=|\x80\ +\xe0a$D+\xdb2;]b\x81\x13\xaa\x0c\xc8t\ +\xad\x18\xd1\x8b\x10\x9d\x1c\x1d\xb9\xf7\x05e\xc9B\x87\xe8\ +g\xd3\xe0\x9a\x96\x92`\xce\xf4:\x04E\xc1$M9\ +\x8b\xb1fR\x5c\x98v\x07\x99s\x9cd\xb6\x7f\x06\x13\ +\x93I9T3\xcdi\x88\xdeg7jt0Q\x9a\ +.Y\x86~D\xe7\x12\x134\xc3\x1aG8\xa3\x07\xe3\ +\x12\x9d\xb1D`\x8e8\xf4\xceN\xd1(\xd3\x8a\x89\x04\ +\x91\xe8\x12/\xe9\xb8\x06!\x94SMw\x80\x14\x15\xd0\ +\xd6\x02=A\xc5\xab\xa0\xabY9\xacXF.b\xb3\ +2;\x85s\x96\xe9\x11a\xb1\x1e\x974\x9a'\xe6\x14\ +\xab\x09\xe7\xa3\xf1\xb6m.\x15\x1a}\xc0\x0a1\xf4\x14\ +\x1d\xfd\x02\x1f\xbf\x2230\xe0T$z\x01\x0d\x8f\x1f\ +\xd7\x84XV\xd7\xc0\x1f\xe5\x01NS*\x88U\xf4\x96\ +\xbd\xabH\xddl\xbf2 n\xba\xc0\x22\xa1\xa4\xd4\xbb\ +i\xcd\xb9\x06\xaaj33\xcb\x80\xb0XSrK\x22\ +\x98c\xa9;\xa1z\xc4a\x99\xaf\x18]\x05q\xae\x80\ +1}&\x08\xfdX\x99\x06\x9b\x03\x7f\x95\xd1?<}\ +\x8ar\xc0\xcc\x99\xa0\xa4\xb5*.\xe3\xbb\x0b*\xf2\xd1\ +\x1c\xf3\x8c\x8e\xeb\x9d\xd6\x1a\xceq\x04\x9a5\xfd\xa8\x07\ +M$0{\xd8\x10#\xf5L\xc6\xd9\xbe\x82\x88\x8c\xf3\ +%\xbcf\xb7\xa2%\xef\xa5\xb5\x98\xbdE:C\xf3\x09\ +<[\xc2!\xdb[\x1e\xb3\xa3<\xe2&9ar_\ +i\xd8\x0c\xaa\x0a\xdb \x0a\x9b\xd2\xb9eZ\xe5\xb4m\ +\x7fmC\x03\x95Vw\xdb\xca\x96\xa6\xd9\x9c\x1b\x98\xe0\ +\xdbw\xfd\x07\xa4\x5c@,s\xa1;\x8eH).H\ +\xf3l1\xaa.\x999\xc3\xf0\x1f\x17Eu\xae\xc4v\ +x\xd7B\xb6g\xb9\xaa\xb9m\xa5\x8f.\x0f'\x8f*\ +\x00\x8f\xfd=\xaa\xf7\xfb\xec\xa9\x01\xf1XH\x03\xd1\xde\ +\xf4*\xe0\x9e?\xb3\x88n\xaf\xe0\x9c\xe9i\xae\xb5\x14\ +\xf5u\xba\x9e\xd1\x90\x93\x13\xdd\x12\xa6n+\x84[=\ +\x0dM\x85\xbb\x8d\xeaZ\x8c\xfb0\xb3\x9f\x9d\x1aO\x1b\ +(\x8a\xc9s\xc1\xd7\xad\xbd\xae`\xe6pP3X\xad\ +\xb1\xc7NP)\x08p\xd6\xd5\xd4\x81n.n\xd5\xc1\ +\x02n4nn5J\xbcRc\x90\x05\x97IT\xc0\ +ah\xc4-\xd4#\xb8\xb8xvb+\xd6\xe8;s\ +\xe5\xd5\xb4'\xfbO\xaa\x0c\x98\xaf\xe3\x9d$z\xd6\xe0\ +g\xb1\xcdK\x0f\x89\x1e\xa9\x9d,\xb6\x05w\x92X\x87\ +n\xbam\xba\xf4X2I8m\xdb[\xbby\xabv\ +\xc8.\xd7V\xde\x8b4\x87h\xa7-xM\xa0c6\ +;\xb6\xa1\x0f\xe8\x9dK?\xa5.Z\xbb\xa0Y\x06\xce\ +\xa8F#D\x8c\xc4v\xce\xec\x08\xf7(\x82\ +x\x14e\xb9\xa2\xbf\x1dT\x069m\x80x\x03\xbd\x18\ +P8\x82\xb0\x15<^\xc1\x09\xd2\x0b\x8aH\x11\x1d\x22\ +,\x08\xc2\x9cCx\x93\xa1\x18B`s\x83\xa3\x94\xc2\ +\x5c\x04|\xe5\xeb\x00\xdd\x00 ;\xe3C(cj\x17X%L\ +\x84\xe8\xa7#?\x88\xd3\xf9NL$\xc1\xac\x96\xbbP\ +Z\xa6UH\x1dt^p\xd9e*%\xd7\xed\xde\x22\ +\x89\xfe\xe9\xe4\xa8\xd7\x8a\x9e\x15\xb9\xb5\xdf\x8c\xeeo\xd8\ +\x10]C\xb6\x05\x89\x1c\x87\xdd\x00\x9f\xc7\xa5\x0aQ\x99\ +\xf4\x07\x18\xec\xc3\x04\xcc\x0a\x13\x96\xc31:\xa9\xc6\x1a\ +[3\x9aV\xec\xa1\xc8\x0a\xc1\xa2\x1aI\xa2g\xa4\xf1\ +Y\x09\xe8\x0a\xd1\x19@}TT\xe9\x98\x15h?\xaa\ +\xa0\xa5\xe45\xf8`~\xd9F?\xbe\xac=\x1c\x1f\xf9\ +\xfbm,\x0c\x8b\xd0\xf6\x94\x19\xe3\xf6\xad\xc0<\x172\ +\xcf(\x5c@\xb8k\x01\xc3\xac\xb4A)x\xb9;\xcf\ +\xc1l>\xde3\x09W13\x9f\xddC;\x96\xe2i\ +\xf64\xd9\x5c\xc7Qm\x9dC\xdf\xc6\x15\xfec\xa7\xdc\ +M\xcb\x99J\xc9_R \x0akH\xe8<\x1a\xeci\ +\xbe\xc2\x840\x91\xb4\x0f\xa1\xe5\x06\x8er/`\xd0q\ +i\xcd\xac\xef\x9a\xd8\xeb\x10v\xf9|\x1f2\xea\xa7y\ +\x9bGvY\xb3UUw\x5c\xdd\xa6o\xc1\x18\x1c\x84\ +0E\x0cW\x8b3o\xcf\xa6\xf0J\x15\x5c\xa2e\xcb\ ++\xd7\xe2\x174\x87\x10*H%\x13\x90\xa3\xfeI\x8d\ +\xcf\xea\xc1Ep\xa9u1\xe51\xc2?\x14#\xdd{\ +`\xc3\x05\xbbO/S\x1c[\x038>\xe9\x83\x81s\ +;\xf61\xbf\x93\xfd2\xc9)o\xe2\x1b\xa91GE\ +N\x1e6/\xe3^v\x8ew`\xfb\x18\xf2Z\xea\xe0\ +\x05X\x13\xaaW\x12\x86\xad\xf6\xe8\x1bY`{\x87f\ +e\x85\xee\x8b\xec\xd1gS\x7f_\xe4\xf9\x8a\xbc\x7f\x19\ +:]m\xa9\x97\xc5\xc2\xa1\xd4B\xab\x93\xff\x00\xe9\x95\ +\xb2\xd87G\xbb-\xd8}\x93\xacoK\x8d_\x93t\ +_\xa3\xf7\xa2i7\xf6\x05\xa7C\xf3\xb6\xbd\x02\x03\xef\ +,:\x13\xa0\xf2q\xc9\xee\xae\x0d\xa8\x96\x82\x86\xf1\xef\ +\x8a2}\x9b\xc0b)\x82L\xe6*6\xc5\x8e\xf7*\ +\x0e\x0f\xdd_\x17\x0eMOv\xe8t\x06\xd9\x87\xe4\xa0\ +[\x08a\x19$\xb7\x90\xd9O\xa2L+\x1c\xeb\xa2\xbc\ +d\xd2\xdcS\x9a1B\xcf\xe2\xbe)\x17e\xa8\xd0W\ +9\x1b\x16\xdd\x5c\xdb\x9a\xc4\xc0\xd8f\xbf0\xbd\xab\xbc\ +\x15\xc8\x94\x8a\xd1\xf8S\x02u\x7fG\x9f\xad\xeek\xaf\ +\x9dJ\x86YZ\xb5\x968\xcc\xd2\xae\xed\x88\xcf\xb14\ +\xa7\xf3{\xb6\xb4\xb2>\xf7\x7f\xb6\xacm\xf1y\x98]\ +\x99\x7f\x01\xf8\x1c\xab2\xfa\xbeg\x9b\xaa\xff]\xef_\ +\xa8*l|uB\xf8\xf9\x07s\xf6\x93\xef\ +\x00\x00\x03\xee\ +\x00\ +\x00\x0f\xcdx\xda\xddWQo\xdb6\x10~/\xd0\xff\ +\xc0\xea\xc9FW%\xe9Vlp\x97\x07\xdb\x05\xb6\x00\ +\x0d\x9a&\x19\x8aa\xe8\x03-\x9dd\xc2\x14\xa9\x90T\ +\x1co\xf3\x7f\xdf\x91\xb4j\xc9\xa2%\x17(P`J\ +\x90\x90\xbc\xef\x8ew\xc7\xbb\xe3\x91\x15\xa5T\x86|4\ +\x1f+\x96\xac\x9e?c\xady\xfc\x89\x89T\xae;\xcb\ +s)\x8c\x92\x5c\x1f%\xc4\xd7\xd4\x80b\x94w\x10\xef\ +\xe9FV\x069\xed\x8f\x17O\xfey\xfe\x8c\xe0\xc7\xd2\ +\x09Y\xbb\x95\x1b\x05\x19(\x10\x098\xa0%\xaeYj\ +\x96\x13\xf2\xd3\x9bs?_\x02\xcb\x97\x06\x17\xce\xcfk\ +\xc8\x5c\xe2V\x02\x84\x89\xa5\xb0c\x0e\x06P\xe4N\xba\ +\xfd\x9e\xc8%\xb9K\x14\x80\x88\x9d\xbc\xb3\xd7\xe4\x15\xd9\ +\x8d\xf6\xa8\xcd\x1e\xe5wq\xb0z\xe8q\xdbz\xd3B\ +\xa6\x943\xb3\x99\xa0\x85\xf1\xb4,9K\xa8aR\x5c\ +\xdbu\x0f\xc98\xcd\xb5\xa3\xd7\xee\xf4\xeb\x86\x19\x0e\x13\ +\xf2\xa0\xef\xd5(\x9a*\x03\x05\xd3\xb8Q\xc3\xf8h\x5c\ +c5\xcb\x05\xe5D\xd3G\xa8];M\x12\xb4u\xa4\ +\x8db\x22'T\xe5\xe3\xa3\xd0\xfb%\x14\xd0F\xeeT\ +\xabDb\xb5u\xe8)\xe7\xa3q\xd3]\x81\xdd\x12Y\ +,\xe4L>\xf9i\x9cT\x0a55\xf7\xf0d\xc6a\ +>\xbfu\xcd\xe6f\x01\xaemG!.iz\xb07\ +u\xffZ\x1afR\x91\xd1#U\x18;\xf6l\xcf\xdf\ +\xba\xc1\xaf\xe4PMY\x09\xe3i/_\xb6\x04\xb8\xb8\ +\xcb\xc8N6\xb9\xbc\xbc<\xe4}\xa4\xbc\x82\xa9\x19!\ +\xf3\xb8\xc3j\xbf\xb0K\xaeD\x0aV%d\xeb\xb2,\ +\x14\xd0U{y\xbb\x9fnO\xf1\x89\xf7\xab\xb1\x7f\xbf\ +\xca#\xbb\x13\x18t\x88\x93\xdc\xf2\x87\xe7<\xd9\x1d\xad\ +\xa3\xfe\x86\xdex\x87\xc6\xcb\xfc\x1a\xb4\xa694\x15\xb0\ +\xe5#u\xc4F\x06\xdda(\xa6{\x8c\xcb\xd6\x091\ +\xaa\x82Z^#\x13\xa3\x06\xa3\x0b\xe2\xf4E\xd4\xe0\xf5\ +[\x22\xec\x0f\x0d\x8a\x94\x0d\xec\x92j\xb2\xc0z\xe1\x99\ +\x88\xae0\x14tVq\xbeyA\xea\xc4V\xa0\x0d\xc5\ +B\xe8\x86\x0f\x15S\xe0\xce*YR\x91\xa3\x08#\x89\ +\xa1+ \x90e\x90\x988j\xaa\x87\x8c\x22\xa5*\x9d\ +U\xc6H\x81\xa5\xc4\xfb \xfe\xb0j\xa2\xa4\xb0\x11X\ +\x1e\xd6<_<\x0f\xaaj\x9cp\xa9a4\x0e\xbb\xd9\ +\x0fo\xa8h\xf9\x97\x8ad)\x95\x8e3\xc6\xd1\x85%\ +\xb5\xe7\xda\xdc\x7f.yU\x08_\xdf\x0f\x15\x08\xf3\x86\ +\x10\xcaV\xd9k\xacQLL\xc8\xc5\x9b0\x88C6\ +\x88YHtV1\x842\xb2lB\xda\xa0[\xb9\x0e\ +\x9bc?Oq\x16}\xf2w\xd3aT\xed\x91\x0b\xe0\ +!\x11.\xf4\xb0\x08bH\xd5iM\x5c\xdaDal\ +\x86\xb7k\x5c\xb2'\xe0w\xeco\x0c\xc4\x8b\xd7a\x5c\ +\xc2YY\xab\x13\xa2\x1fS\xfd\x10\xb7\x0dY3\xdf\xe5\ +\xf71\x83l\x1a\xb6j@\x18\xb6\xbb\xcf/~\xfc9\ +L\xffr\xbf\xff\x12\xa6c&\x03\x86\xd2_a\xaa\xfd\ +\xa2\xbb\x8d\xc6\xd4\x8b~\xe8\x81\xbc\xb7\x9b\xf4\x22\xdeQ\ +\xb5:r\x1c\x9f\x83\x1e\xebu\xe0\xf7\x88(\x7f/\xfd\ +_B\xca[\xf3\xddb\xea\x16\xd2\xdep\xb9ab\xd5\ +\x0f\xa8\x146\xa6\xfd!\x07P\x9e\x00\xc3;\x95\xe5\xb2\ +\x172\xc3\xbbz8\xfe\x07Q\xf3\x0d\x15\xbd\x80{\xa0\ +\xbc\x17\xf0\x9b\xed\xa6\x8759\x05V\xf4\xeb\xfa'p\ +.\xd7\xbd\x90i\xb1\x00\xd5\x8b\xf8\xa0\xec\xa5 \xdbrQ`1\xf1O7;\xbb\ +\xb5F\x93\x7f\xbf\xccg\xae\x87\xe8J\xc0\xf7%\xbe\xf3\ +V\x81N\xab\xf9\x04r\xef\xa909\xdc\xa7\xc6\xb2\x04\ +\x11b\xd9\x9e\xd0\x1d\xe3\xef\x7f\xec\x16\xc3\xd9\ +\x00\x00\x09\xda\ +\x00\ +\x00W\x1dx\xda\xed\x5cko\xdb:\x12\xfd^\xa0\xff\ +\x81\xeb/v\xd0Ty\xed\x05.\x0c\x14\x8b\xc4I\xb7\ +\xc1\xe6\xd5<\x1a,\x8a \xa0%\xda\xe1--\xaa\x94\ +\x944\xf7\xde\xfc\xf7\x1dJ\xd4\x83\x12)\xcbN\xb3i\ +\x02\x19}\xd8\xe4!5\x1c\xce\xcc\xe1\xd0&\xe9,\xe0\ +\x22B\x9f\xa3\xcf1u\xbf\xbd}C\xb5\xcf\xce\x88\xfb\ +\x91\xe0,\xb4V8\x878\x22\x82bVC\x1c\xe0{\ +\x1eG\xd02\xaf\xe9;k.\x87\xb7>\xf1\xa3\xb0\x8f\ +p\x88.\xf6Gy\x81\x04\xbe}s\x82\xa7\x04\xfd\xf5\ +\xf6\x0d\x82\x17\xf5\x86(\xa4S\x1f3Y\x9a\x96a\xdf\ +\xbd\xe1\x22t&\x94\xb1!\x0a\xb0\x80\xa6i\x0d\x1f\xff\ +A\xdc\xe8\x08\xcf\xc8\x10\xf5\x8af\xc7\xe3?z\xb2c\ +\x09IK\x11\x0f\x88\xbf\xcb\xddC\xecC\xbd\x18\xac\xd4\ +*\xcf\xe8t\xcf\xa3\x11\x17\x830\x12\xd4\x9f\xa2\xe8>\ + \xab\xe8\x16\x0b\x89\xba\x86\xa7\xe2\xd9*\x1as\xce\x10\ +\x0d\xaf}r\xa7w\x81=o\x84\xa3s<\x1dP?\ +B.\x1b\xef{:\xc0#\x8cD\xa4\x8c\xc1Q\x82I\ +Q\x81\x00!Dt\x8f\xd4\xd3c\xc1@\x22\xea\xdd\xd1\ +o\xb4\x82\x90\x22M\x04\xf9\x1e\x13\xdf\xbd?\xa0ad\ +\xa8\x1fc\x1f\x9az\xd1\x8d\xa5\x1e\x1eN\xa6\x5c\xd8\x9a\ +c\xc6F\xcd\x88\x19\xf7b\x86#\xca};\x80\xd8z\ +w'\x96\x1a\xc6\xddR\x9f\x99n&\xb1\xef\xcaR\x14\ +\xf0@>\x94\x9c\xa9\x99\x86)\x19\x80zW2\xe3\x91\ +/5a\xe8\x83\xfc\xf7\xeb\xfaUQ\x93N\x844\x16\ +'\x22?\xa2\x14\xe1\xf8\xf0\xb9\xc0hzU\x88\xbc\xac\ +\x80i\xeaU\xb0\xbc,\x13;\x93F\xb6\xbff\xbc\xda\ +\x9b&[\x8e\x8b\x83*\xce\x09\x19u\xc9\xe0\xfd\xc6J\ +\xad\x85|d\xd1s.\x80\x19\x97\xf7\x9c\xe3*=\xeb\ +Z\xf8\x82Y\x9c+j\xc2\xc5\x0cG\xd7\x02\xfbS2\ +P\xe3Y\xcd\x04^\xd1\xf5bo\xa8\xc4]\xcd\xe4Y\ +)?\xb3l\x91J\xd0\xac\xa8\x00U\xecR\xe1\xa0\xf4\ +\xba\x8e\xcd\x0cP\x81\xe4G\xad\xb2d\xbe\x05D\x15\x16\ +\xc0\xb2E*XVT\x12+5\xe8L\x1cwR\x1e\ +\x98GBW\xd0@\xb68\x07\xa5l\x0b\x82\xcb\xf6W\ +\xaa.\xb7\xa2\x13\x94)\x1a\xfd\xe3\xc3\x07\x14\xfb\x1e\x99\ +P\x9fx\x9a\xb1g:\xdf\xc1\xc2\x09I\xb4\x93\xbe\xcd\ +\x1a~\xdd\xb8\xca'\x09\xde\x97\xe6\xe9\xa1\xfa()\x09\ +\x84\x9c9\x8f\x02\xc4N\x1cE\xdcwniH\xc7\x8c\ +\xc0\x18\x22\x11\x93\x1a*\x0f]j\x90P\xa4=<{\ +KXH\xda Ni[\x96\xc5\x14\xad_=&\xe6\xe8\x05v\xe3\ +\x90a\xa3\xbc\x1e\xa8#\xd4\x02\xc1\xaa\xf9EL\xa6\x8a\ +U\xbeg\x82\xce3\x99FsQ\x93\xf7\xce0]\xf3\ +\xe7\xa4N\x01r\xe3\xda\xc4\x00\x8d\xa1\xbe}\xfc\xa8E\ +\xa1\xea\xf45\xadW\xac\x84\xb0H\xf0\xd7\xf5\xf6=<\ +\x17\x83\xde\xc7\xd3\xbd\xcf\x17{G\xa3\xff\xa2\xd3\xed\xa3\ +\x7f\xef\xf5,\xd6X\xe5\x8d\x8dMK\xa4X\x82?r\ +\xaf%\x22\xa2\xae\xa5\xe5\x17[\xcb\x9a\x17\xccU\x95t\ +\x86<\x89\xff\xb9\xda|\xdfZ\x7f\xbf7\xe0\xc6\x9c5\ +\xc6\xd9gQr\xa3\xce\xf7#23\x9b\xec\xfc\xb5\xea\ +\xc3/\xe1\x07;\xdbG\xbb\x97\xfb\xbb\xe7\x9f^\xaa\x1f\ +4\xafTN\x93\x8ck\xce:eyw\xcaw\xbd:\ +w\xfa\xff\xceU\x1bb*\x7fG\xec\xa8]9S^\ +\xa1v\xef\x96XB\xb7 \xc1\xbb\xb4\xf1\xc6z%5\ +\xb8Q\xeb\x88ZE=\xab\xa8,\x1f\xc2\x00\xbb\xd4\x9f\ +B\xd3\xdf\x16\x8d 6aj\x02\xd5\xab\xad\x03\x9c\xbf\ +\x08\xab\xf2\x8fm)\xd6vIVx\x17\x98\x87\x1f\xc9\ +\x18 \x9d\xc53e\xfe\x1b\x9b\ +\xeb\xf6\x167s\x12\xa9\x22\xc1i\x16J[\x167<\ +\xafX\x1e7\x80\x84\x94\xe9\x04\x96\xff\xa9\xb74 \x19\ +Ld+`*_\x0em\x96\xb0\x0d\xac]\x0e\x95 \ +\xb5\x9f\x97\xf4?f\xdf\xa8\xf4W\xd1\xd7\xabUT\xda\ +\xf3_`\xb6-\xc52\x1b\xffB\xc9]\x93Lm\xa6\ +|\x91-;-\xb45\xf4\x09>\x09n\x93l\x06\x0f\ +sA\x9dO\xb9\xab6\xc4\x0b\xcbn\x89a[\xc2\xf0\ +\xcb\x18[n\xdbf\x7f\xc2\xb6O\xb1u5'\x00\xb5\ +\xd0q\xdb\x0d\x88\xd6\x1b\x11\xad7$\x16\xd8\x98\xa8m\ +P\x14:\xd8\xbcR\xdf\x9e\xa3\x7fe\xdb\x16\xa8\xd5c\ +M\x0a\xdd\x9c\xa3\xd0\x879>\xd6\xda\x1b\xe7xd.\ +\xd1**\x7f;\xbf\x84X\x0f\x8b\xec\x92<\x19m\x17\ +\xdf\x0f=#m\xe7\xa9JG\xdb\x1dm\xbfP\xda\xde\ +\xc9~\xec\xd0\xd1\xf6\x13\xd0\xb6\xe1\x07\xab\x1dmw\xb4\ +\xdd\xda#_\x1bmW\x7f\xaf\xf1\x8c\xe4}x\xbc{\ +q\xb0}\xbe\x7f|\xd4\xb1w\xc7\xde/\x94\xbd\x0fs\ +\x7f\xea\xe8\xfb\x09\xe8\xdbt\x1c\xe4)\xf8{\xa3\xe3\xef\ +\xd7\xc3\xdf\x9aO\xbeB\x02'\xbf\x02u\xefu\xa4\xdd\ +\x91\xf6\xcb%m\xd2\xd1\xf5\xd3\xd05\xe9\x88\xba#\xea\ +\xc5\xfc\xf0\xb5Qt~~\xe1\x19\x19z{\xf4\xb1#\ +\xe8\xc7\x06\xe0\x05H\xbc#\xe8\x9fI\xd0`\xbd\x1d?\ +?\x01?k7$t\xf4\xdc\xd1s\x0b/|m\xec\ +\xac\x9f\x1b|F\x8a>8\x1eu\xbb\xdf]\x22\xfd\x92\ +y\xfa@\xf9RG\xd6O@\xd6\xfa\xa5E\x1dcw\ +\x8c\xbd\x88?\xfe2\xb4}\xe6\x0a\xceX\x93'/q\ +\x8c\xdb\xfe[xC\xa7\xd9\x01={\xaf\xa9\x8c\xf2\xbe\ +\x8e\x8c+\x1d*Y\x11\xbb\x11\xbd%\xc5)5\xa3\xe9\ +\xa9[@\xe6\xad;\x0c\x17\x87\xd8\x1b\xdc\x09\x1c\xc8\xdd\ +\x91\x94\xa9\xe5\xf4:\x97\x5cx\x97P\xdc|\x82\xf3c\ +r\xb7\x8f\x22xP\xd17\x8f\xdf%\xcfk\xa0\xc4\x84\ +\xdc9\x0cX\x91{\x13\x9b\x11\xec\x1d\xfb\xec\xbeI\x99\ +K\x1c\xd7\x9c\x7f\xce\xa9\xe5d\xd6M\xa9\xf9\x10g\xcb\ +\x13\xd6\xf5\xf6\xdaI\x92\xed\xe22\x97\xa6\xa3A\xa5;\ +_\x16=\x08S?^];\xf9mu\xc0\xfdY\xe9\ +\x1eD\x93\x5c\xc9\x8d2\xe6\xea\xf4\xf6\x99\xa1v\xb5\x8d\ +A\xe2\xdaY\xd8\xad\xf5\xf5v\x0d\xb2u\xdd\xef\xeb\x8f\ +WI\xe3RV\x9aD\xeaQ\x89>\x9c\xb3H\x90\xc8\ +\xbdi\xabC\xcb\xa9\xbe\x85\x8cs\xb9\xacf)\x0d\x98\ +\xbb:\x95\xb7J\xb5\xcb\x92\xf2\xcb}\x1a`\x90\xf98\ +\xb9\x81$\xb7\x13\xa9\xbb\x89dM\xb86\x16\xfc.$\ +\xa2r%Qm\xfdB\xc3\x00\x5cb\x88\xb6\xc7a$\ +\x03\xae\xba\xa6e\x1f\xfa\x90\x91\xa6\xc5\xd1\xf69D\xad\ +\xd2\xad\x8b\xde\xcfX\x00\x83\xa6%\xe7^\x08\xb6\xf7\x03\ +4\xedc\xc6\xee\x07\xe5\x9b\xe9\x96Z\xff>z\xba\xaa\ +7\x00-?k\xd0S a { co\ +lor: \x22 + Materia\ +l.accent + \x22; }<\ +/style>\x22 +\x0d\x0a \ + \ +\x22 Artemis\ +a> \x22 + APPLICATI\ +ON_VERSION + \x22\ +b>
\x22 +\x0d\x0a \ + \x22\ +\x22 + \x22ARTEMI\ +S \x22 +\x0d\x0a \ + q\ +sTr(\x22- The Radio\ + Signals Recogni\ +tion Manual\x22) + \ +\x22
\x22 +\x0d\x0a \ + \x22
\x22 +\x0d\x0a \ + \x22\ +Powered By Pytho\ +n \x22 + PYTHON_VER\ +SION + \x22 & Qt \x22 \ ++ QT_VERSION + \x22\ +Copyright (c) 2\ +014-\x22 + currentY\ +ear + \x22 \x22 + q\ +sTr(\x22AresValley\x22\ +) +\x0d\x0a \ + \x22 G\ +PLv3 License
\ +\x22\x0d\x0a\x0d\x0a \ + Layout.fillWidt\ +h: true\x0d\x0a \ + Layout.mini\ +mumWidth: 200\x0d\x0a\x0d\ +\x0a tex\ +tFormat: Text.Ri\ +chText\x0d\x0a \ + wrapMode: Te\ +xt.WordWrap\x0d\x0a\x0d\x0a \ + onLin\ +kActivated: (lin\ +k) => {\x0d\x0a \ + Qt.open\ +UrlExternally(li\ +nk)\x0d\x0a \ + }\x0d\x0a }\x0d\x0a \ + }\x0d\x0a}\x0d\x0a\ +\x00\x00\x02\xff\ +\x00\ +\x00 \xfex\xda\xed\x9aAo\x9b0\x14\xc7\xef\x91\xf2\ +\x1d\xacL\xaa\x1aic\xa4\xddv@\xeb\xa4\xb5\xea\x96\ +I\xcd\xa1\xa3\xc9\xce.1\x895\x07g\xc6Y\xa7V\ +\xf9\xee\xb3!\x100Nd\x1c\xc6eX9\x80y\xcf\ +?\xfb\xfd\xed\x87\xb1\x82Wk\xca8\xb8\xe7\xf7\x1b\x1c\ +\xfc\xec\xf7p\xe9\xde\xf9\x81\xa39}\xaaT\xdf\xd0\x88\ +3J\xe2\x83\x0f\x9c\x09\xe4\x88aH\xfa\xbd~\xef\x1b\ +G+\xf0\xd2\xef\x01Q\x9e\xf0\x9c/=\xf0\xceu\xd3\ +\xfb%\xc2\x8b%\xf7\xc0\x85+-eM\xb8\x89\x02\x8e\ +i\x04b\xc4\xafa4\xbf\x86\xec\x9c\xd0\xf05\xd8\xac\ +\xc3a\xd6\x8c,\x0c\x15,\x86\x99\xbb,8\x04\xd2\x05\ +|\x04\x97n\xc9E\x96\x18\x11\x14p\xca\x1c\x18\x05K\ +\xcab\x87\xa0\x90\x83+\xd1\x5c\xc0a\xb4 \xe8\xf6\xee\ +KR\xb7w\xdb\x02Db\x947\xfb\xe9J\xb4\x0b\xce\ +\xce@\xc6\xb0\x80\xf8F\x902\xc5\x0235\xc3(\x1c\ +\x0b\xd0\xcc\x10\xa4\x92,P\xa6\xa4\x0a\xca\x8251e\ +Ua\x16\xb4\xb11M\x83\xb3\x11\xad\x06PG\xb4\x99\ +\x90u\x90Z\xa6\xcdb\xab\x05\xd5Sm\x12I\x15\xab\ +f)\x91\xd3\x0c\xb3\x14\x93yRMSI\xa5vT\ +\xb2\xe1\x0c(\xa1\xcc\x03\x83W#\ +\x98J;(\xdbl\xadY\xce\xfb#\xb4\x8b\x0f\xcd\xd2\ +F'\x8d\xac\xf4\x12\xd5\x8a\x9fM\x80\xe2\xbb\xb2\xfct\ +\xf7\x19\x92\x8a\xed$woGJ\xb7\x8a\x9367-\ +O\xd8\xa2\x19K?d\x8e\xec\xf0\xd5\xef\x1d\xed\xf8]\ +7L\x8a2\xfe;\xf8\x88\x88.\xaa\x1c\xfd\x11\xcd\xfd\ +\x8a\x1f\xd8\xf9@\x0cs0\xac\x9a\x84b\x1a:\x8f\x94\ +\x88\x88p\xb6AU\x83\xe3+ \xefz>\xa3?\x13\ +\xbc\x88V\xc9\xa2x\x10x'\xb9\x1f\xdf\x88\x8a\xe2Z\ +\xcb\xcao\xc48\x0e\x0ex\xcdt^\xa7\x89\xed\x9f\x22\ +\xb6\xaa\xe2\xb4}\x15\xfdN\xc54\xf0\xcd\xa98k_\ +\xc5i\xa7b\x1a\xf8\xe6Tl_\xc4Y'b\x12\xf7\ +\xe64\x9c\xb4\xaea'a\x12\xf6\xe6$\x1c\xb7.\xe1\ +\xa4\x93P\x86\xbd\xc1\xf7a\xfb\x1a\x8e;\x0d\x93\xb87\ +\xb85m_\xc4Y\xa7b\x1a\xf8\xe6T\xf4\xdbWq\ +\xda\xa9\x98\x06\xbe9\x15o\xdbW\xd1\xefTL\x03\x7f\ +\xb2\x8a;[\xe5\xbc\xf3\xdf\x9f\xd6\xfc\xcf\x02fG\xbd\ +\xb5\xe2\x9d\xfd\xa9\xc0\x81AP\x19t~\xb4\xab\xf8>\ +{\xe0\xcdHw\x8c-~\x7f\x01K`a9\ +\x00\x00\x02\xbb\ +\x00\ +\x00\x195x\xda\xed\x98Oo\xda0\x18\xc6\xef\x93\xf6\ +\x1d,viw\x88L\x02$D\xe2P\xb1He\x02\ +:B\xdan\xc7\xfcq\xc0\xaa\x89YbV\xd6\x89\xef\ +\xbe\x84\x94\x92\xc4N!L\x9a@\x8a\xe1\x90\xd8\xcf\xfb\ +\xe4\xc5\xbf\xd7I0^,i\xc8\xc0\x84MV\xd8}\ +\xfa\xf8\x01\xe7\xce\xa5G\x1cx\xf4\x99\xeb\xee\xd3\x80\x85\ +\x94D\xa5\x03\xd2\xc8f(\xc46\xe1\x14C\xfb7]\ +\xb182\xf9\x0c\x18Z\x80?\xc9\x11\x88\x9b\xbf\x0a\x5c\ +\x86i\x00\x22\xc4\x86x6g\xd1\xd5\xd3 \xf0\xd0\xfa\ +:\xd1\x80\xd7\x16\xa2\xfd\xf0\xf5\xbe\x1b\xfb\xe0U\x0dz\ +\xbd\x1e\x80\xb9\x984\xceePr)\xa1!\xe8\x81\xc6\ +\xa7\xb6\xd2u|\xbf\xb1\x17m\x00\x22\x11*\x1a5\x85\ +F\xcd\x8c\x11t]\xbf\xa5\x1c4\x92\x85Fru#\ +Eh\xa4d\x8c|\x88 \x84\x07\x8dZB\xa3Vu\ +\xa3\xb6\xd0\xa8\x9d5\xf2\x1d\xf5\x08\xa3\x8e\xd0\xa8\x933\ +R\x9d#\x8cT\xa1\x91\x9a1B\x1a<\xe6\xa7iB\ +#\xad\xbaQWh\xd4}\xd7(=\xdcp\xeb#\xb7\ +\x04\xf2k#_\xe3\xb2\xd3\xf2\xd4l\x8ds\xb5\xabv\ +4Y)\x08\xe4C\x82l\xad\xa9]U\xcee]\xac\ +!\xa1 [\x1bZ\xb3\xeds\x82NN\xd0jr\x82\ +,K\xb5\x0d\x15N\xa0\x1d\x12t\xcb\x04o\x13\xde\xa7\ +d\xb5\x08\xd2;Vv\x9a\xed\xc0\x9d\xd30\x92|L\ +\x88\x0e\x96v\x88\x02\xb6\x1f\x8d\x96\xb6\x8b\x83\x99\x0e\xe0\ +\xce'if|E;\x98\x11T,\x03\xec\xe9i:\ +\xf9\xeemn\xba(\xf7\xa4\xa59m\x13x\xc4\x1e\x9b\ +\xeb\x80\x85+T\xaa\xb9EI\xb1\x88D.\xc1KQ\ +?\xa3\xcb!\xf2\x99i{x\x15\xe9\xa0\x09\xb9a3\ +\xb1,\x1b\x1f\xda\x0e\x22\xc5_\xba\x0dD\xeb8\x8f\x9f\ +\x91\x15^5\xa6\xf7\xdf\x0c\x13L\xad;s\xd4\xb8\xe6\ +\xa5\xef\xcf\xf2\xae\xc5\x12\xfc\x12?ulrC\xf0,\ +X\xc4\x22\x1dX\xf1U\xa4\xed\xf9m?\xee@!\x1f\ +\xf7\x0b\x85\x0c\xbb%Q\x0feQ~|%\xc9\xa1\xc4\ +\x13\xcd\xd9\x9b`\x89\xd7\x88L\xf1\x0b\xda\xa5-\xcd\xb7\ +\x00>CI\xc9\x87lr\xab\xbdB\xb5hgU-\ +G\xe16\xbe[\xa612j\xe0'\x01W/\x0f\xf8\ +\xd4x0\xcc\x9a\xf7i\xbc;%\xbc\xb9\x87\xe1\xf9\xf0\ +\x1e\xdd|\xbd\xab\xef\xe7\xa7\xe1n\x97\xe2.\xbc\x1c\x9d\ +\x11\xee\xc1\xb8\xc6}\x22\xeeV\xd9\xdd\xbc\xf8\xb2|>\ +\xb8o\xfa\xd6\xe0\xc1\xa8IW$\xad\x5c\x1e\xe9\xfb\xf1\ +\xd4\xb0\xac\xa1\xf1\xa5\x86]\x11\xb6\x5c\x02\x9b\xfb\x17}\ +>\xb0'\xf7\x03\xc3\xaaAW\x04\xdd\xbc<\xd0\xf1\xbb\ +\xf8\x0fP\xd3>\x856,\xa1\xcdm\xaf\xfd\x17\xda\x0e\ +e\x8c.\xde\xdb\x9dI\x15\xff\xbeA3\x18\xd7\x0f}\ +n/6\xfe\xfe\x05D}A\x9e\ +\x00\x00\x03:\ +\x00\ +\x00\x12\x8dx\xda\xcdXQo\xdb \x10~\xaf\xd4\xff\ +\x80\xfa\xd2d\x0fN\xd4\xa7\xc9R6uyi\xa5F\ +m\x17i{\xac\x88M\x1cT\x02\x1e\x86T\xd5\xd6\xff\ +>\xce\x8e\x1d\x8c!\xe9\xd26\x0b\xad\x848>\xe0\xee\ +\xbb\xe3\x0e\x87.s!\x15\xbaW\xf7\x9a&\x8f\xa7'\ +\xb45\x8e~R\x9e\x8a\xa7\x8e\xf8\x06?\x0b\xad\x8a\x8e\ +|,\xb8\x92\x82\x85'\xa2\x09VDR\xcc,\xc4D\ +3E\x97$\xa5\xf8\xf4\x04\xfe\xae\x15Y\xa2\xdf\xa7'\ +\xc8\xb4'\x9a\xaaE\x8c.\x86\xc3j\xbc 4[\xa8\ +\x18}\x1e\x02\x12$\xb9\x149\x91\xea\x19\xcd\x84`\x88\ +\x09\x91\xc7h\x8eYAj\xc0\x5c\xf3DQ\xc1\xcd\x1c\ +N\xa7B\xf3\xb4\x87uJ\xc5C\x8e\xd5\xa2_\x1fT\ +n\xc5\xf03\x91Q\xa1D\xde\xebw\xc5B\xcb\x84\xa0\ +\x11\xda\xac\xde`fZ)\xc1\xef\x0c2\xa2\x89\xe0Q\ +\x22\x98\x90\x06[\x9b\x1b\xe1$!\x5cy\x17\x10\x8eg\ +\x8c\xa4\x06\xad\xa4&.\xe4\xc6X\xe4\x85\xbct\x0c\x04\ +E+\x03[f\xed\xd4m.$\xc9$,\xec,\xc2\ +\xba \xffd\xd1\xd4\x90\xf7\x16\x0a\xd6\xae\xf3\xa9\xb1\x9d\ +\xa7\xf2\xe0=\xa9\xdcx\xf9N\x14\x14\xb8\xb4`\xb5\xfb\ +\x09y\x04Q'.\xa0\xab\xc3\xc5\xe3\x13P}\x1f\xa7\ +\x04\xd8\xda\xe2\x90-n\xdc\x1df.\xc5\x8e\x1fj[\ +\x01\x156\x16n\xce\xff\xb6uK\x00\x86\x17\x95\x91q\ +xV\xbd\x91\xeb\xc58\xa1\xeb` \xeb\x05}f\xa7\ +\xb3\xae\xcb$)\x88\xba+\x91\xbd}\x92\xe1\xf9\xf9.\ +5>(\xfd\x1ca\x04\xbc*w}P\x08\x04\xd3\x97\ +\x85k\xbc?\x16L/yU\xc4m\x9f\x7f\x17O]\ +!\xb4\x22\xc7\x09\xe5Y\x8c\x86my\x85\x8e0\xa3\x19\ +_\x9a+\x1c\x9br\x1e]\xc2\xe8jl\x86D\xa2?\ +\x8d\xe4G%\xa9u\xd8\x9ci\x88\xfdVZ\xe8\x9e\x0a\ +\x8d\xa6\xb1E\xb6g\xbeqY\xbc\xddc\xad\x05U\xf8\ +\xc6\xe8\xec\x97L\xe2\x01]\xe2\x8c\x14\x03\x98)\x06\x15\ +\x91\x0f\xd0E\xc5*;\xeb\xee\x90\xd2\x02fct9\ ++\x94\xc4\x89\xaa\xb4\x8f\xae\xcd\xfa[\xce \xea\xbe\xa0!\xfa\ +\xda\xbc\xd9\xd7\x86\xa0A\x07\xd7\xa9\xe7\x82O\xc4*\x10\ +h\xeev\xa3\xcev\x9f\xdcWH\xee\xe50\xe4\x91\x09\ +\xfc\x04P=E\xc3ni\xcb\xcbO\xf1[\xadrm\ +(\xb4\x06n\x8a\xa9^\x0f3\x9c 'i9\xd9\x7f\xd3\xcd\x0c\xd6\xf5\xd7_\ +\xaf`\xb6}\xfbE\xb9\xdc\xd0\xeasK\x8bu{r\ +0X\xc13\xd3\x84g\xd5W\x17.*C\xb6u\xd4\ +\xba3\xff\x7f\x01O@\x1a|\ +\x00\x00\x02v\ +\x00\ +\x00\x10\x1dx\xda\xed\x97]o\x9b0\x14\x86\xef'\xed\ +?X\x99T5\xbb@\x06BH\xd1:)\xca\x90\x9a\ +)i\x15B\xd3k>Lb\xcd\xc1\x0c\xcc\x9au\xca\ +\x7f\x1f\x84|`\x0c\xcd\xd2IU.\xe2\xe4\x02\xdb\xaf\ +_\x1f\xfb9\x80\xc1\xcb\x88\xc6\x0cL\xd8$\xc5\xde\x8f\ +\x8f\x1f0W\x97\x9ep\xe8\xd3g\xa1y@C\x16S\ +\x924vHc\x87\xa1\x18;DP\x8c\x9c\xdf4e\ +\xd9\xc8\xfc7dh\x09\xfe\xe4W +A\x1az\x0c\ +\xd3\x10$\x88\x8d\xf0|\xc1\x92kg\x18\xfah\xd5\xce\ +5`[bt\xe8n\x1f\x9aq\x00\xb6j\xf0\xf5\x16\ +@pu\x05\xb6\xd5/\xa0\xc7\x19\x14&\x1e\x83\x92G\ +\x09\x8d\xc1-h}\xd2\xd4\x1b7\x08Z\x07\xd1\x1a \ +\x92\xa0\x8ak\x8fs\x95\xbb\xb5\xb6r\xc9\x16z^\xd0\ +Q\x8f\xd9\xca]\xceW\x85\xb5\xbeJ\xc97\x80\x08B\ +x\xccW\xe5wA\xab\xf7U\xcb\xbe\x81\xab\x1f\xf7\xd5\ +x_\x19\xd6\x1bw8c\xdd=n\xdc\xe4\xa4\x95\x9c\ +P\x0fV\x96^\x5c\xae\x85,\xe2\x12\x85\xcf \x1e\xbe\ +\xe2v|\xbd\x0c_\xc0\xa8w{\x8aZ\x11\x94y\xe8\ +7\xba\xc2\x05U\xdd\xd8\x9e\xac\x05\x82\xa0\xc3\x09:\xb2\ + (\xaf[\xd7\xa0\xba\x17\xec\x17;\xa0$]\x86\xc5\ +=U^\xa2\x13z\x0b\x1a'R\x80\x091@\xe4\xc4\ +(d\x87\xde$r<\x1c\xce\x0d\x00w>y\xb1\xb2\ +\x19\x9dpNP\x15\x01\xf6\x8d\x22\x1c\xbey\x13\x9bQ\ +\x0dmW\x8a\x986\x01\xc1\xf3p\x99\x89\x0c`g\ +\xd3H\x9b\xfa\xdd k@\xb18\xee\x17\x8a\x19\xf6\x1a\ +F\xcd\x9aF\x05\xd9L\x92K\x89_\xb7i{A\x84\ +W\x88L\xf1\x0b\xda\x85--6\x04>CI\xe1\x87\ +\xac\xb9[\xed\x84t\xe94\xa4\x8b\x90\xea\xef\x92.\xff\ +\xc4{\xdc\xff\xfe`]p\xbf\x09\xb7\xda\x88\xbb\xf2\xe8\ +;#\xdc\xc3\xfb\x0b\xee7\xe2V\x9a^\x06\xd5W\xe1\ +\xf9\xe0\xee\x0f\xec\xe1\xcc\xbc\x90>\x91\xb4\xdc@Z8\ +\x15\x9d\x0f\xe9\xc7\xfb\xa9i\xdb#\xf3\xdb\x05\xf6\x89\xb0\ +a\x03l\xe1\x8c\xfc.\xb0]\xca\x18]\xbev\xcc+\ +\x14\xff\x7f\xd2\x9b<\x0eM\xfb\x92-\xa5\xaf\xa9\xec\xff\ +\x17\x08(\x06\xbc\ +" + +qt_resource_name = b"\ +\x00\x02\ +\x00\x00\x07\xb9\ +\x00u\ +\x00i\ +\x00\x06\ +\x07\x03}\xc3\ +\x00i\ +\x00m\x00a\x00g\x00e\x00s\ +\x00\x05\ +\x00o\xa6S\ +\x00i\ +\x00c\x00o\x00n\x00s\ +\x00\x1a\ +\x01\xf8\x7f'\ +\x00s\ +\x00p\x00e\x00c\x00t\x00r\x00u\x00m\x00_\x00n\x00o\x00t\x00_\x00a\x00v\x00a\x00i\ +\x00l\x00a\x00b\x00l\x00e\x00.\x00s\x00v\x00g\ +\x00\x10\ +\x02\xfaW\x87\ +\x00a\ +\x00r\x00t\x00e\x00m\x00i\x00s\x00_\x00i\x00c\x00o\x00n\x00.\x00s\x00v\x00g\ +\x00\x10\ +\x02\xfaB\xdf\ +\x00a\ +\x00r\x00t\x00e\x00m\x00i\x00s\x00_\x00i\x00c\x00o\x00n\x00.\x00i\x00c\x00o\ +\x00\x0f\ +\x07\x9a\x02\x07\ +\x00p\ +\x00l\x00a\x00y\x00e\x00r\x00_\x00l\x00o\x00o\x00p\x00.\x00s\x00v\x00g\ +\x00\x10\ +\x0f\xc5]\xe7\ +\x00d\ +\x00i\x00a\x00l\x00o\x00g\x00_\x00e\x00r\x00r\x00o\x00r\x00.\x00s\x00v\x00g\ +\x00\x10\ +\x03\x05]\xe7\ +\x00p\ +\x00l\x00a\x00y\x00e\x00r\x00_\x00p\x00a\x00u\x00s\x00e\x00.\x00s\x00v\x00g\ +\x00\x09\ +\x06\x97\x95\xe7\ +\x00a\ +\x00b\x00o\x00r\x00t\x00.\x00s\x00v\x00g\ +\x00\x0f\ +\x0a\x9a\x0b'\ +\x00p\ +\x00l\x00a\x00y\x00e\x00r\x00_\x00s\x00t\x00o\x00p\x00.\x00s\x00v\x00g\ +\x00\x0a\ +\x0c\xad\x02\x87\ +\x00d\ +\x00e\x00l\x00e\x00t\x00e\x00.\x00s\x00v\x00g\ +\x00\x0f\ +\x08\xfb\x5c\x87\ +\x00d\ +\x00i\x00a\x00l\x00o\x00g\x00_\x00w\x00a\x00r\x00n\x00.\x00s\x00v\x00g\ +\x00\x0f\ +\x03u\x0a\x87\ +\x00p\ +\x00l\x00a\x00y\x00e\x00r\x00_\x00p\x00l\x00a\x00y\x00.\x00s\x00v\x00g\ +\x00\x0d\ +\x03\x03\xdd\xe7\ +\x00d\ +\x00o\x00c\x00u\x00m\x00e\x00n\x00t\x00s\x00.\x00s\x00v\x00g\ +\x00\x08\ +\x06\xc1T\x07\ +\x00o\ +\x00p\x00e\x00n\x00.\x00s\x00v\x00g\ +\x00\x07\ +\x07\xa7Z\x07\ +\x00a\ +\x00d\x00d\x00.\x00s\x00v\x00g\ +\x00\x10\ +\x0a\x075\xa7\ +\x00d\ +\x00i\x00a\x00l\x00o\x00g\x00_\x00q\x00u\x00e\x00s\x00t\x00.\x00s\x00v\x00g\ +\x00\x0a\ +\x08;BG\ +\x00r\ +\x00e\x00n\x00a\x00m\x00e\x00.\x00s\x00v\x00g\ +\x00\x0b\ +\x09\x16w\x07\ +\x00b\ +\x00r\x00o\x00w\x00s\x00e\x00r\x00.\x00s\x00v\x00g\ +\x00\x08\ +\x05wT\xa7\ +\x00l\ +\x00o\x00a\x00d\x00.\x00s\x00v\x00g\ +\x00\x0f\ +\x04\xbcZ\xa7\ +\x00d\ +\x00i\x00a\x00l\x00o\x00g\x00_\x00i\x00n\x00f\x00o\x00.\x00s\x00v\x00g\ +\x00\x08\ +\x08\xc8U\xe7\ +\x00s\ +\x00a\x00v\x00e\x00.\x00s\x00v\x00g\ +\x00\x12\ +\x04<\x91\x9c\ +\x00C\ +\x00a\x00t\x00e\x00g\x00o\x00r\x00y\x00E\x00d\x00i\x00t\x00o\x00r\x00.\x00q\x00m\ +\x00l\ +\x00\x0b\ +\x04\x97e\xbc\ +\x00A\ +\x00r\x00t\x00e\x00m\x00i\x00s\x00.\x00q\x00m\x00l\ +\x00\x0a\ +\x07j\x093\ +\x00c\ +\x00o\x00m\x00p\x00o\x00n\x00e\x00n\x00t\x00s\ +\x00\x1c\ +\x06\xcd\xfe<\ +\x00S\ +\x00p\x00a\x00c\x00e\x00W\x00e\x00a\x00t\x00h\x00e\x00r\x00F\x00o\x00r\x00e\x00c\ +\x00a\x00s\x00t\x00P\x00a\x00g\x00e\x00.\x00q\x00m\x00l\ +\x00\x1b\ +\x03\xae7\xfc\ +\x00S\ +\x00p\x00a\x00c\x00e\x00W\x00e\x00a\x00t\x00h\x00e\x00r\x00C\x00u\x00r\x00r\x00e\ +\x00n\x00t\x00P\x00a\x00g\x00e\x00.\x00q\x00m\x00l\ +\x00\x10\ +\x02ra\xbc\ +\x00S\ +\x00i\x00g\x00n\x00a\x00l\x00E\x00d\x00i\x00t\x00o\x00r\x00.\x00q\x00m\x00l\ +\x00\x14\ +\x0ds\x0c\x1c\ +\x00D\ +\x00o\x00c\x00u\x00m\x00e\x00n\x00t\x00s\x00M\x00a\x00n\x00a\x00g\x00e\x00r\x00.\ +\x00q\x00m\x00l\ +\x00\x11\ +\x0d|%\xdc\ +\x00D\ +\x00i\x00a\x00l\x00o\x00g\x00M\x00e\x00s\x00s\x00a\x00g\x00e\x00.\x00q\x00m\x00l\ +\ +\x00\x10\ +\x0d\x88\xc0\x9c\ +\x00S\ +\x00p\x00a\x00c\x00e\x00W\x00e\x00a\x00t\x00h\x00e\x00r\x00.\x00q\x00m\x00l\ +\x00\x0e\ +\x07\xa5\xcd\xbc\ +\x00F\ +\x00i\x00l\x00t\x00e\x00r\x00P\x00a\x00g\x00e\x00.\x00q\x00m\x00l\ +\x00\x0d\ +\x09\x22a\xfc\ +\x00D\ +\x00b\x00M\x00a\x00n\x00a\x00g\x00e\x00r\x00.\x00q\x00m\x00l\ +\x00\x0f\ +\x0e^\x1a\x9c\ +\x00P\ +\x00r\x00e\x00f\x00e\x00r\x00e\x00n\x00c\x00e\x00s\x00.\x00q\x00m\x00l\ +\x00\x0e\ +\x08!D\x9c\ +\x00S\ +\x00i\x00g\x00n\x00a\x00l\x00P\x00a\x00g\x00e\x00.\x00q\x00m\x00l\ +\x00\x0e\ +\x07\x0f0\x1c\ +\x00D\ +\x00o\x00w\x00n\x00l\x00o\x00a\x00d\x00e\x00r\x00.\x00q\x00m\x00l\ +\x00\x09\ +\x06\xc7\xdb\x1c\ +\x00A\ +\x00b\x00o\x00u\x00t\x00.\x00q\x00m\x00l\ +\x00\x0b\ +\x08\x14a<\ +\x00B\ +\x00a\x00n\x00d\x00B\x00a\x00r\x00.\x00q\x00m\x00l\ +\x00\x0f\ +\x04\xaf\xb5\xdc\ +\x00K\ +\x00I\x00n\x00d\x00e\x00x\x00L\x00i\x00g\x00h\x00t\x00.\x00q\x00m\x00l\ +\x00\x0f\ +\x09\xcc\x93\xdc\ +\x00A\ +\x00u\x00d\x00i\x00o\x00P\x00l\x00a\x00y\x00e\x00r\x00.\x00q\x00m\x00l\ +\x00\x0f\ +\x04\xaf\xed\xdc\ +\x00A\ +\x00I\x00n\x00d\x00e\x00x\x00L\x00i\x00g\x00h\x00t\x00.\x00q\x00m\x00l\ +" + +qt_resource_struct = b"\ +\x00\x00\x00\x00\x00\x02\x00\x00\x00\x02\x00\x00\x00\x01\ +\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x02\x00\x00\x00\x0f\x00\x00\x00\x18\ +\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x0a\x00\x02\x00\x00\x00\x04\x00\x00\x00\x03\ +\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x1c\x00\x02\x00\x00\x00\x11\x00\x00\x00\x07\ +\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00,\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\ +\x00\x00\x01\x8a\x18\xb8\x18\x90\ +\x00\x00\x00\x8c\x00\x01\x00\x00\x00\x01\x00\x00`k\ +\x00\x00\x01\x8f\xbc!\xd0i\ +\x00\x00\x00f\x00\x00\x00\x00\x00\x01\x00\x00Xk\ +\x00\x00\x01\x8f\xbc =\xde\ +\x00\x00\x01\xc0\x00\x00\x00\x00\x00\x01\x00\x00\xd2K\ +\x00\x00\x01\x8fx\x17R\x9c\ +\x00\x00\x00\xfc\x00\x00\x00\x00\x00\x01\x00\x00\xc8\x9e\ +\x00\x00\x01\x8fx\x19Z\xa9\ +\x00\x00\x01\x9c\x00\x00\x00\x00\x00\x01\x00\x00\xd1/\ +\x00\x00\x01\x8fx\x18\x99G\ +\x00\x00\x02|\x00\x00\x00\x00\x00\x01\x00\x00\xe2\x16\ +\x00\x00\x01\x8f\x8c\x92\xfc\xbd\ +\x00\x00\x02f\x00\x00\x00\x00\x00\x01\x00\x00\xdf\xff\ +\x00\x00\x01\x8f\x80\xb0\x03\x01\ +\x00\x00\x01\x22\x00\x00\x00\x00\x00\x01\x00\x00\xc9\xfc\ +\x00\x00\x01\x8f\xabkm8\ +\x00\x00\x01\xe0\x00\x00\x00\x00\x00\x01\x00\x00\xd3\xbd\ +\x00\x00\x01\x8f\x88\xc6\xd9\xb2\ +\x00\x00\x00\xb2\x00\x00\x00\x00\x00\x01\x00\x00\xc2Z\ +\x00\x00\x01\x8fx\x18\xf8\x87\ +\x00\x00\x01\xf6\x00\x00\x00\x00\x00\x01\x00\x00\xd5\xf9\ +\x00\x00\x01\x8f\x87\xb6\x00\x09\ +\x00\x00\x020\x00\x00\x00\x00\x00\x01\x00\x00\xdb\x0a\ +\x00\x00\x01\x8f\x80\xac\xde/\ +\x00\x00\x02\xa0\x00\x00\x00\x00\x00\x01\x00\x00\xe4&\ +\x00\x00\x01\x8fr\xe7!\xab\ +\x00\x00\x01x\x00\x00\x00\x00\x00\x01\x00\x00\xcfB\ +\x00\x00\x01\x8f\x8c\x92\x89Q\ +\x00\x00\x02J\x00\x00\x00\x00\x00\x01\x00\x00\xdcf\ +\x00\x00\x01\x8fx\x15\xb5\xee\ +\x00\x00\x02\x0a\x00\x00\x00\x00\x00\x01\x00\x00\xd8_\ +\x00\x00\x01\x8f\x8c\x93l\x11\ +\x00\x00\x01:\x00\x00\x00\x00\x00\x01\x00\x00\xcc\x1a\ +\x00\x00\x01\x8fx\x18\xb1\xb4\ +\x00\x00\x01^\x00\x00\x00\x00\x00\x01\x00\x00\xcd\x12\ +\x00\x00\x01\x8fr\xe5\xd2\xf4\ +\x00\x00\x00\xd6\x00\x00\x00\x00\x00\x01\x00\x00\xc6g\ +\x00\x00\x01\x8f\x8c\x92\x1a\xf0\ +\x00\x00\x03\x90\x00\x01\x00\x00\x00\x01\x00\x01\x03\xe2\ +\x00\x00\x01\x8f\xb9w\xa05\ +\x00\x00\x03T\x00\x01\x00\x00\x00\x01\x00\x00\xfd~\ +\x00\x00\x01\x8f\xb9v^\xb4\ +\x00\x00\x02\xb6\x00\x01\x00\x00\x00\x01\x00\x00\xe5\xfd\ +\x00\x00\x01\x8f\xb9w)k\ +\x00\x00\x02\xe0\x00\x01\x00\x00\x00\x01\x00\x00\xebA\ +\x00\x00\x01\x8f\xb9w\x14F\ +\x00\x00\x04\xdc\x00\x00\x00\x00\x00\x01\x00\x01E\x87\ +\x00\x00\x01\x8f\xb44\xa6G\ +\x00\x00\x03\x16\x00\x01\x00\x00\x00\x01\x00\x00\xf5\x0e\ +\x00\x00\x01\x8a\x18\xb8\x18\x90\ +\x00\x00\x04\xba\x00\x00\x00\x00\x00\x01\x00\x01?\xd8\ +\x00\x00\x01\x8f\xb47M{\ +\x00\x00\x02\xfc\x00\x02\x00\x00\x00\x04\x00\x00\x00'\ +\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x042\x00\x01\x00\x00\x00\x01\x00\x01\x22s\ +\x00\x00\x01\x8f\x9bE\x84~\ +\x00\x00\x04\x98\x00\x01\x00\x00\x00\x01\x00\x015\xfa\ +\x00\x00\x01\x8f\xb6N\xb0S\ +\x00\x00\x04T\x00\x01\x00\x00\x00\x01\x00\x01+V\ +\x00\x00\x01\x8f\xb47\x169\ +\x00\x00\x03\xb6\x00\x01\x00\x00\x00\x01\x00\x01\x0ac\ +\x00\x00\x01\x8f\xb9we\x22\ +\x00\x00\x03\xe4\x00\x00\x00\x00\x00\x01\x00\x01\x16%\ +\x00\x00\x01\x8f\xab^\x18\x8b\ +\x00\x00\x04\x0c\x00\x00\x00\x00\x00\x01\x00\x01\x1b\xea\ +\x00\x00\x01\x8f\xb9v\xad\xe8\ +\x00\x00\x04t\x00\x01\x00\x00\x00\x01\x00\x012\x08\ +\x00\x00\x01\x8f\xb9w\x8f\xb6\ +\x00\x00\x05\x10\x00\x01\x00\x00\x00\x01\x00\x01N8\ +\x00\x00\x01\x8f\xb9X\xb7\xf3\ +\x00\x00\x05X\x00\x01\x00\x00\x00\x01\x00\x01T5\ +\x00\x00\x01\x8f\xb9l\xb6\xc4\ +\x00\x00\x04\xf4\x00\x01\x00\x00\x00\x01\x00\x01K5\ +\x00\x00\x01\x8f\xa1\xe5\x0c\xfd\ +\x00\x00\x054\x00\x01\x00\x00\x00\x01\x00\x01P\xf7\ +\x00\x00\x01\x8f\x8c\xb9@\xc2\ +" + +def qInitResources(): + QtCore.qRegisterResourceData(0x03, qt_resource_struct, qt_resource_name, qt_resource_data) + +def qCleanupResources(): + QtCore.qUnregisterResourceData(0x03, qt_resource_struct, qt_resource_name, qt_resource_data) + +qInitResources() diff --git a/artemis/ui/artemis.py b/artemis/ui/artemis.py new file mode 100644 index 0000000..bc8dbad --- /dev/null +++ b/artemis/ui/artemis.py @@ -0,0 +1,354 @@ +import uuid + +from PySide6.QtQml import QQmlApplicationEngine +from PySide6.QtCore import QObject, Slot, Signal + +from artemis.utils.constants import Constants, Messages +from artemis.utils.sys_utils import open_directory, pack_db, unpack_db +from artemis.utils.sql_utils import ArtemisDatabase, ArtemisSignal +from artemis.utils.path_utils import check_data_dir +from artemis.utils.network_utils import NetworkManager +from artemis.utils.generic_utils import generate_filter_query +from artemis.utils.path_utils import normalize_dialog_path + +from artemis.ui.preferences import UIPreferences +from artemis.ui.dbmanager import UIdbmanager +from artemis.ui.signaleditor import UIsignaleditor +from artemis.ui.downloader import UIDownloader +from artemis.ui.spaceweather import UIspaceweather +from artemis.ui.documentsmanager import UIdocumentsmanager +from artemis.ui.categoryeditor import UIcategoryeditor + +import artemis.resources + + +class UIArtemis(QObject): + # Python > QML Signals + populate_sig_list = Signal(list) + populate_sig_details = Signal(list) + populate_filter_modulation = Signal(list) + + clear_list = Signal() + clear_signal_page = Signal() + clear_filter_page = Signal() + lock_audio_player = Signal() + lock_menu = Signal(bool) + + show_dialog_popup = Signal(str, str, str) + show_dialog_download_db = Signal(str, str, str) + show_dialog_download_art = Signal(str, str, str) + update_info_bar = Signal(str, str) + + + def __init__(self): + super().__init__() + + # Main UI initialization + self._engine = QQmlApplicationEngine() + self._engine.rootContext().setContextProperty('APPLICATION_VERSION', Constants.APPLICATION_VERSION) + self._engine.rootContext().setContextProperty('PYTHON_VERSION', Constants.PYTHON_VERSION) + self._engine.rootContext().setContextProperty('QT_VERSION', Constants.QT_VERSION) + self._engine.load('qrc:/ui/Artemis.qml') + self._window = self._engine.rootObjects()[0] + + self._window_filter = self._window.findChild(QObject, "filterPageObj") + self._window_signal = self._window.findChild(QObject, "signalPageObj") + + self.loaded_db = None + + self._connect() + + # Creating istances for other windows + self.preferences = UIPreferences(self) + self.dbmanager = UIdbmanager(self) + self.downloader = UIDownloader(self) + self.spaceweather = UIspaceweather(self) + self.docmanager = UIdocumentsmanager(self) + self.sigeditor = UIsignaleditor(self) + self.cateditor = UIcategoryeditor(self) + + self.network_manager = NetworkManager(self) + + check_data_dir() + + + def _connect(self): + # QML > Python connections + self._window.showDBmanager.connect(self.show_dbmanager_ui) + self._window.loadSignal.connect(self.load_sig) + self._window.showPref.connect(self.show_pref_ui) + self._window.openSigEditor.connect(self.open_sig_editor) + self._window.startDownloader.connect(self.start_download_db) + self._window.checkDbUpdates.connect(self.check_update_db) + self._window.showSpaceWeather.connect(self.show_space_weather_ui) + self._window.openDbDirectory.connect(self.open_db_directory) + self._window.showCatManager.connect(self.open_cat_manager) + + self._window.newDb.connect(self.new_db) + self._window.exportDb.connect(self.export_db) + self._window.importDb.connect(self.import_db) + + self._window_filter.applyFilter.connect(self.apply_filter) + self._window_filter.sendBottomAlert.connect(self.bottom_info_bar) + + self._window_signal.openDocManager.connect(self.show_documentsmanager_ui) + self._window_signal.openSigEditor.connect(self.open_sig_editor) + self._window_signal.deleteCatTag.connect(self.delete_cat_tag) + self._window_signal.addCatTag.connect(self.add_cat_tag) + + # Python > QML connections + self.populate_sig_list.connect(self._window.populateList) + self.clear_list.connect(self._window.clearList) + self.update_info_bar.connect(self._window.bottomInfoBar) + self.show_dialog_popup.connect(self._window.openGeneralDialog) + self.show_dialog_download_db.connect(self._window.openDialogDownloadDb) + self.show_dialog_download_art.connect(self._window.openDialogDownloadArtemis) + self.lock_menu.connect(self._window.lockMenu) + + self.populate_sig_details.connect(self._window_signal.populateSignalParam) + self.lock_audio_player.connect(self._window_signal.lockPlayer) + self.clear_signal_page.connect(self._window_signal.resetAll) + + self.clear_filter_page.connect(self._window_filter.resetAll) + self.populate_filter_modulation.connect(self._window_filter.loadLists) + + + def load_db(self, db_dir_name): + """ Load the DB and populate the signals list + + Args: + db_dir_name (str): folder name in the data folder + """ + # Loading DB + self.loaded_db = ArtemisDatabase(db_dir_name) + self.loaded_db.load() + # Clearing UI + self.lock_menu.emit(False) + self.clear_signal_page.emit() + self.clear_filter_page.emit() + # Populating UI + self.load_filter_lists() + self.populate_sig_list.emit(self.loaded_db.all_signals) + # Updating status bar + total_signals = len(self.loaded_db.all_signals) + self.bottom_info_bar("Database loaded with {} signals".format(total_signals), "info") + + + @Slot(int) + def load_sig(self, sig_id): + """ Load the selected signal and populate the SignalPage + + Args: + sig_id (int): SIG_ID of the signal to be loaded + """ + self.loaded_sig = ArtemisSignal(self.loaded_db) + self.loaded_sig.load(sig_id) + sig_dic = self.loaded_sig.generate_dic() + + self.populate_sig_details.emit([sig_dic]) + + + def load_filter_lists(self): + """ Populates the 3 listviews in the FilterPage + """ + self.populate_filter_modulation.emit([{ + 'modulation': self.loaded_db.all_modulation, + 'location': self.loaded_db.all_location, + 'category': self.loaded_db.all_category_labels + }]) + + + @Slot(dict) + def apply_filter(self, filter_status): + """ Update the signal list according to the selected filters in the FilterPage. + + Args: + filter_status (dic): dictionary containing the active filters with all + the details to generate a search query + """ + filter_status = filter_status.toVariant() + if filter_status != {}: + filter_query = generate_filter_query(filter_status) + self.loaded_db.select_by_filter(filter_query) + + self.clear_signal_page.emit() + self.populate_sig_list.emit(self.loaded_db.all_signals) + + total_signals = len(self.loaded_db.all_signals) + self.bottom_info_bar("FILTERS ACTIVE: {} signals found".format(total_signals), "warning") + else: + self.load_db(self.loaded_db.db_dir_name) + + + def show_pref_ui(self): + """ Load the preference windows + """ + self.preferences.load_preferences_ui() + + + def show_dbmanager_ui(self): + """ Load the DB manager windows + """ + self.dbmanager.load_dbmanager_ui() + + + @Slot(str, list, bool) + def open_sig_editor(self, type, sig_param, is_new): + """ Open the signal editor windows + Called when the user want to add, edit or delete the signal or its parametes. + """ + self.sigeditor.load_signaleditor_ui(type, sig_param, is_new) + + + def show_space_weather_ui(self): + """ Open the space weather windows + """ + self.spaceweather.load_spaceweather_ui() + + + def show_documentsmanager_ui(self): + """ Open the documents manager windows + """ + self.docmanager.load_documentsmanager_ui() + + + def check_update_db(self): + """ User manual check for updates db updates + """ + self.network_manager.show_popup = True + self.network_manager.check_updates() + + + def start_download_db(self): + """ Show the downloader and start the download of the sigid db + """ + self.downloader.show_ui.emit() + self.downloader.on_start() + + + def dialog_download_db(self, message_type, title, message): + """ Dialog popup for DB download confirmation + """ + self.show_dialog_download_db.emit(message_type, title, message) + + + def dialog_download_artemis(self, message_type, title, message): + """ Dialog popup for artemis download confirmation + """ + self.show_dialog_download_art.emit(message_type, title, message) + + + def open_db_directory(self): + """ Open the local folder of the loaded DB + """ + open_directory(self.loaded_db.db_dir) + + + @Slot(str) + def new_db(self, name): + """ Create a new local DB + + Args: + name (str): name of the new DB, hardcoded in sql info table + """ + try: + new_db = ArtemisDatabase(str(uuid.uuid4())) + new_db.create(name) + self.load_db(new_db.db_dir_name) + self.dialog_popup( + Messages.DIALOG_TYPE_INFO, + Messages.GENERIC_SUCCESS, + Messages.DB_CREATION_SUCCESS_MSG + ) + except Exception as e: + self.dialog_popup( + Messages.DIALOG_TYPE_ERROR, + Messages.GENERIC_ERROR, + Messages.GENERIC_ERROR_MSG.format(e) + ) + + + @Slot(str) + def export_db(self, save_path): + """ Export the load DB in a tar file. Does not use compression + + Args: + save_path (str): destination path of the generated .tar file + """ + try: + dest_path = normalize_dialog_path(save_path) + pack_db(dest_path, self.loaded_db.db_dir) + self.dialog_popup( + Messages.DIALOG_TYPE_INFO, + Messages.GENERIC_SUCCESS, + Messages.EXPORTING_SUCCESS_MSG + ) + except Exception as e: + self.dialog_popup( + Messages.DIALOG_TYPE_ERROR, + Messages.GENERIC_ERROR, + Messages.GENERIC_ERROR_MSG.format(e) + ) + + + @Slot(str) + def import_db(self, tar_path): + """ Import a new DB in the Artemis data folder + + Args: + tar_path (str): Path of the archive to be imported + """ + try: + origin_path = normalize_dialog_path(tar_path) + unpack_db(origin_path, str(uuid.uuid4())) + self.dialog_popup( + Messages.DIALOG_TYPE_INFO, + Messages.GENERIC_SUCCESS, + Messages.IMPORTING_SUCCESS_MSG + ) + except Exception as e: + self.dialog_popup( + Messages.DIALOG_TYPE_ERROR, + Messages.GENERIC_ERROR, + Messages.GENERIC_ERROR_MSG.format(e) + ) + + + @Slot(int) + def add_cat_tag(self, clb_id): + self.loaded_sig.insert_category(clb_id) + self.load_db(self.loaded_db.db_dir_name) + + + @Slot(int) + def delete_cat_tag(self, cat_id): + self.loaded_sig.delete_category(cat_id) + self.load_db(self.loaded_db.db_dir_name) + + + def open_cat_manager(self): + """ Open the category manager windows + """ + self.cateditor.load_cateditor_ui() + + + def dialog_popup(self, message_type, title, message): + """ Opens a general dialog popup + + Args: + message_type (str): 'info', 'question', 'warn', 'error' + title (str): header of the dialoog + message (sstr): description inside the dialog + """ + self.show_dialog_popup.emit(message_type, title, message) + + + @Slot(str, str) + def bottom_info_bar(self, message, message_type): + """ Manage the footer info bar + + Args: + message (str): text to be shown in the info bar + message_type (str): 'info', 'warning' + """ + self.update_info_bar.emit(message, message_type) diff --git a/artemis/ui/categoryeditor.py b/artemis/ui/categoryeditor.py new file mode 100644 index 0000000..1e8ebf3 --- /dev/null +++ b/artemis/ui/categoryeditor.py @@ -0,0 +1,67 @@ +from PySide6.QtQml import QQmlApplicationEngine +from PySide6.QtCore import QObject, Signal, Slot + +from artemis.utils.path_utils import * +from artemis.utils.generic_utils import * + + +class UIcategoryeditor(QObject): + # Python > QML Signals + show_ui = Signal() + load = Signal(list) + + + def __init__(self, parent): + super().__init__() + + self._parent = parent + + self._engine = QQmlApplicationEngine() + self._engine.load('qrc:/ui/CategoryEditor.qml') + self._window = self._engine.rootObjects()[0] + + self._connect() + + + def _connect(self): + # QML > Python connections + self._window.saveParam.connect(self.save) + self._window.deleteParam.connect(self.delete) + + # Python > QML connections + self.show_ui.connect(self._window.show) + self.load.connect(self._window.loadList) + + + def load_cateditor_ui(self): + """ Load the list with existing category tags and show the UI + """ + all_cat = self._parent.loaded_db.all_category_labels + self.load.emit(all_cat) + self.show_ui.emit() + + + @Slot(list, bool) + def save(self, data, is_new): + """ Save new category tag or update the existing ones. + """ + data = data.toVariant() + + if is_new: + self._parent.loaded_db.insert_category_label(data[0]) + else: + self._parent.loaded_db.update_category_label(data[1], data[0]) + + self._parent.load_db(self._parent.loaded_db.db_dir_name) + self.load_cateditor_ui() + + + @Slot(int) + def delete(self, clb_id): + """ Delete a database category tag. + All the entries in the documents table are automatically beign deleted due to + foreign-key cascade propagation + """ + self._parent.loaded_db.delete_category_label(clb_id) + self._parent.load_db(self._parent.loaded_db.db_dir_name) + self.load_cateditor_ui() diff --git a/artemis/ui/dbmanager.py b/artemis/ui/dbmanager.py new file mode 100644 index 0000000..cc6cd5b --- /dev/null +++ b/artemis/ui/dbmanager.py @@ -0,0 +1,105 @@ +from PySide6.QtQml import QQmlApplicationEngine +from PySide6.QtCore import QObject, Signal, Slot + +from artemis.utils.path_utils import * +from artemis.utils.generic_utils import * +from artemis.utils.sql_utils import ArtemisDatabase +from artemis.utils.constants import Constants + + +class UIdbmanager(QObject): + # Python > QML Signals + show_ui = Signal() + close_ui = Signal() + populate_db_list = Signal(list) + + + def __init__(self, parent): + super().__init__() + + self._parent = parent + + self._engine = QQmlApplicationEngine() + self._engine.load('qrc:/ui/DbManager.qml') + self._window = self._engine.rootObjects()[0] + + self._connect() + + + def _connect(self): + # QML > Python connections + self._window.loadDB.connect(self.load_db) + self._window.deleteDB.connect(self.delete_db) + self._window.renameDB.connect(self.rename_db) + + # Python > QML connections + self.show_ui.connect(self._window.show) + self.close_ui.connect(self._window.close) + self.populate_db_list.connect(self._window.loadList) + + + def load_dbmanager_ui(self): + self.load_local_db_list() + self.show_ui.emit() + + + def load_local_db_list(self): + """ Scan for all the valid DBs in the data folder and show them on the list + """ + valid_db_list = self.scan_db_dir() + self.populate_db_list.emit(valid_db_list) + + + def load_db(self, db_dir_name): + """ Load the selected DB (from the DB Manager list) in the main artemis window + """ + self._parent.load_db(db_dir_name) + self.close_ui.emit() + + + @Slot(str) + def delete_db(self, db_dir_name): + """ Delete the DB folder. + Clear the main UI if the database to be deleted is the selected one + """ + if self._parent.loaded_db is not None: + if self._parent.loaded_db.db_dir_name == db_dir_name: + self._parent.lock_menu.emit(True) + self._parent.clear_list.emit() + self._parent.clear_signal_page.emit() + delete_db_dir(db_dir_name) + self.load_local_db_list() + + + @Slot(str, str) + def rename_db(self, db_dir_name, new_name): + """ Rename db in the data folder + """ + database = ArtemisDatabase(db_dir_name) + database.rename(new_name) + self.load_local_db_list() + + + def scan_db_dir(self): + """ Scans the data directory for valid databases and + return a dictionary containing only the valid ones with a summary + """ + valid_db_list = [] + db_dirs = next(os.walk(Constants.DB_DIR))[1] + + for db_dir_name in db_dirs: + if valid_db(db_dir_name): + database = ArtemisDatabase(db_dir_name) + database.load() + valid_db_list.append( + { + 'name': database.name, + 'db_dir_name': database.db_dir_name, + 'documents_n': database.stats['documents'], + 'signals_n': database.stats['signals'], + 'images_n': database.stats['images'], + 'audio_n': database.stats['audio'] + } + ) + + return valid_db_list diff --git a/artemis/ui/documentsmanager.py b/artemis/ui/documentsmanager.py new file mode 100644 index 0000000..0dcd920 --- /dev/null +++ b/artemis/ui/documentsmanager.py @@ -0,0 +1,128 @@ +from PySide6.QtQml import QQmlApplicationEngine +from PySide6.QtCore import QObject, Signal, Slot + +from artemis.utils.path_utils import * +from artemis.utils.generic_utils import * +from artemis.utils.sys_utils import * + + +class UIdocumentsmanager(QObject): + # Python > QML Signals + show_ui = Signal() + close_ui = Signal() + populate_documents_list = Signal(list) + + + def __init__(self, parent): + super().__init__() + + self._parent = parent + + self._engine = QQmlApplicationEngine() + self._engine.load('qrc:/ui/DocumentsManager.qml') + self._window = self._engine.rootObjects()[0] + + self._connect() + + + def _connect(self): + # QML > Python connections + self._window.saveNewDoc.connect(self.save_new_doc) + self._window.deleteDoc.connect(self.delete_doc) + self._window.updateDoc.connect(self.update_doc) + self._window.openDoc.connect(self.open_doc) + + + # Python > QML connections + self.show_ui.connect(self._window.show) + self.close_ui.connect(self._window.close) + self.populate_documents_list.connect(self._window.loadList) + + + def load_documentsmanager_ui(self): + self.load_documents_list() + self.show_ui.emit() + + + def load_documents_list(self): + """ Load the documents of the selected signal and populate the documents list + """ + self._parent.loaded_sig.select_documents() + all_documents = self._parent.loaded_sig.documents + + keys = ( + 'doc_id', + 'extension', + 'name', + 'description', + 'type', + 'preview' + ) + + doc_lst = [dict(zip(keys, values)) for values in all_documents] + self.populate_documents_list.emit(doc_lst) + + + @Slot(list) + def save_new_doc(self, doc_lst): + """ Save the new document (identified by the DOC_ID = -1) and reload the document list. + doc_param contains all the details of the new documents. + """ + doc_param = doc_lst.toVariant() + file_extension = os.path.splitext(doc_param[0])[1][1:] + + doc_id = self._parent.loaded_sig.insert_document([ + -1, + file_extension, + doc_param[1], + doc_param[2], + doc_param[3], + 0 + ]) + + local_file_name = '{}.{}'.format(str(doc_id), file_extension) + origin_path = normalize_dialog_path(doc_param[0]) + copy_file(origin_path, self._parent.loaded_db.media_dir / local_file_name) + self.load_documents_list() + + + @Slot(list) + def update_doc(self, doc_lst): + """ Update the details of the existent document + """ + doc_list = doc_lst.toVariant() + for doc in doc_list: + self._parent.loaded_sig.update_documents(doc[0], doc[1], doc[2], doc[3], doc[4]) + self.load_documents_list() + + + @Slot(str, str) + def open_doc(self, doc_id, extension): + """ Open the selected document with the proper system application (if any) + """ + try: + open_file(self._parent.loaded_db.media_dir / '{}.{}'.format(doc_id, extension)) + except Exception as e: + self.close_ui.emit() + self._parent.dialog_popup( + Messages.DIALOG_TYPE_ERROR, + Messages.GENERIC_ERROR, + str(e) + ) + + + @Slot(str, str, str, bool) + def delete_doc(self, doc_id, doc_extension, doc_type, doc_preview): + """ Delete the selected document + """ + doc_file_name = '{}.{}'.format(doc_id, doc_extension) + doc_file_path = self._parent.loaded_db.media_dir / doc_file_name + + self._parent.loaded_sig.delete_document(doc_id) + + if doc_preview: + if doc_type == 'Audio': + self._parent.lock_audio_player.emit() + + delete_file(doc_file_path) + self.load_documents_list() diff --git a/artemis/ui/downloader.py b/artemis/ui/downloader.py new file mode 100644 index 0000000..acc50b1 --- /dev/null +++ b/artemis/ui/downloader.py @@ -0,0 +1,133 @@ +from PySide6.QtQml import QQmlApplicationEngine +from PySide6.QtCore import QObject, Slot, Signal, QUrl, QSaveFile, QDir, QIODevice +from PySide6.QtNetwork import QNetworkReply, QNetworkRequest, QNetworkAccessManager + +from artemis.utils.config_utils import * +from artemis.utils.sys_utils import delete_file, match_hash, unpack_db +from artemis.utils.constants import Messages +from artemis.utils.sys_utils import delete_db_dir + + +class UIDownloader(QObject): + # Python > QML Signals + show_ui = Signal() + close_ui = Signal() + + def __init__(self, parent): + super().__init__() + + self._parent = parent + + self._engine = QQmlApplicationEngine() + self._engine.load('qrc:/ui/Downloader.qml') + self._window = self._engine.rootObjects()[0] + self._progress_bar = self._window.findChild(QObject, "progressBar") + self._label_progress = self._window.findChild(QObject, "labelProgress") + + self._connect() + + + def _connect(self): + # QML > Python connections + self._window.onAbort.connect(self.on_abort) + + # Python > QML connections + self.show_ui.connect(self._window.show) + self.close_ui.connect(self._window.close) + + + @Slot() + def on_start(self): + """ Start the download of the DB taking the needed url and size from + the attributes of the UpdatesController class + """ + url_file = QUrl(self._parent.network_manager.remote_db_url) + dest_path = QDir(Constants.DB_DIR) + self.dest_file = dest_path.filePath(url_file.fileName()) + self.file = QSaveFile(self.dest_file) + + if self.file.open(QIODevice.WriteOnly): + # Start a GET HTTP request + self.manager = QNetworkAccessManager(self) + self.reply = self.manager.get(QNetworkRequest(url_file)) + self.reply.downloadProgress.connect(self.on_progress) + self.reply.finished.connect(self.on_finished) + self.reply.readyRead.connect(self.on_ready_read) + self.reply.errorOccurred.connect(self.on_error) + else: + self.close_ui.emit() + self.show_popup_error( + self.file.errorString() + ) + + + @Slot() + def on_abort(self): + """ Stop the download when user press abort button """ + if self.reply: + self.reply.abort() + self._progress_bar.setProperty("value", 0) + + if self.file: + self.file.cancelWriting() + + self.close_ui.emit() + + + @Slot() + def on_ready_read(self): + """ Get available bytes and store them into the file """ + if self.reply: + if self.reply.error() == QNetworkReply.NoError: + self.file.write(self.reply.readAll()) + + + @Slot() + def on_finished(self): + """ Delete reply, close the file, check the hash for integrity, + extract the database and delete the downloaded zip + """ + if self.reply: + self.reply.deleteLater() + + if self.file: + self.file.commit() + + self._label_progress.setProperty("text", "Checking DB integrity (SHA-256)") + + if match_hash(self.dest_file, self._parent.network_manager.remote_db_hash): + self._label_progress.setProperty("text", "Unpacking archive...") + delete_db_dir('SigID') + unpack_db(self.dest_file, 'SigID') + delete_file(self.dest_file) + self._parent.load_db('SigID') + self.close_ui.emit() + + + @Slot(int, int) + def on_progress(self, bytesReceived: int): + """ Update progress bar and label + """ + total_bytes = self._parent.network_manager.remote_db_size + self._label_progress.setProperty("text", "{:.1f} Mb / {:.1f} Mb".format(bytesReceived/10**6, total_bytes/10**6)) + self._progress_bar.setProperty("to", total_bytes) + self._progress_bar.setProperty("value", bytesReceived) + + + @Slot(QNetworkReply.NetworkError) + def on_error(self, code: QNetworkReply.NetworkError): + """ Show a message if an error happen during download + """ + if self.reply: + self.close_ui.emit() + self.show_popup_error( + self.reply.errorString() + ) + + + def show_popup_error(self, error_msg): + self._parent.dialog_popup( + Messages.DIALOG_TYPE_ERROR, + Messages.GENERIC_ERROR, + Messages.GENERIC_ERROR_MSG.format(error_msg) + ) diff --git a/artemis/ui/preferences.py b/artemis/ui/preferences.py new file mode 100644 index 0000000..0773be9 --- /dev/null +++ b/artemis/ui/preferences.py @@ -0,0 +1,56 @@ +from PySide6.QtQml import QQmlApplicationEngine +from PySide6.QtCore import QObject, Slot, Signal + +from artemis.utils.config_utils import * + + +class UIPreferences(QObject): + # Python > QML Signals + show_ui = Signal() + load_material_accent = Signal(str) + load_material_theme = Signal(str) + + + def __init__(self, parent): + super().__init__() + + self._parent = parent + + self._engine = QQmlApplicationEngine() + self._engine.load('qrc:/ui/Preferences.qml') + self._window = self._engine.rootObjects()[0] + + self._connect() + + + def _connect(self): + # QML > Python connections + self._window.saveMaterialAccent.connect(self.save_material_accent) + self._window.saveMaterialTheme.connect(self.save_material_theme) + + # Python > QML connections + self.show_ui.connect(self._window.show) + self.load_material_accent.connect(self._window.loadMaterialAccent) + self.load_material_theme.connect(self._window.loadMaterialTheme) + + + def load_preferences_ui(self): + """ Loading all the initial preferences from the conf file to the UI + """ + self.load_material_accent.emit(CONFIGURE_QT.get_or_default("Material", "Accent", "Green")) + self.load_material_theme.emit(CONFIGURE_QT.get_or_default("Material", "Theme", "System")) + self.show_ui.emit() + + + @Slot(str) + def save_material_accent(self, material_accent): + """ Saving material accent setting + """ + CONFIGURE_QT.set("Material", "Accent", material_accent) + + + @Slot(str) + def save_material_theme(self, material_theme): + """ Saving material theme setting + """ + CONFIGURE_QT.set("Material", "Theme", material_theme) diff --git a/artemis/ui/signaleditor.py b/artemis/ui/signaleditor.py new file mode 100644 index 0000000..867ebb8 --- /dev/null +++ b/artemis/ui/signaleditor.py @@ -0,0 +1,124 @@ +from PySide6.QtQml import QQmlApplicationEngine +from PySide6.QtCore import QObject, Signal, Slot + +from artemis.utils.path_utils import * +from artemis.utils.generic_utils import * +from artemis.utils.sql_utils import ArtemisSignal + + +class UIsignaleditor(QObject): + # Python > QML Signals + show_ui = Signal() + load = Signal(str, list, bool) + + + def __init__(self, parent): + super().__init__() + + self._parent = parent + + self._engine = QQmlApplicationEngine() + self._engine.load('qrc:/ui/SignalEditor.qml') + self._window = self._engine.rootObjects()[0] + + self._connect() + + + def _connect(self): + # QML > Python connections + self._window.saveParam.connect(self.save) + self._window.deleteParam.connect(self.delete) + + # Python > QML connections + self.show_ui.connect(self._window.show) + self.load.connect(self._window.load) + + + def load_signaleditor_ui(self, param_type, sig_param, is_new): + """ Load all the details of the selected signal + + Args: + param_type (str): Signal, Frequency, Bandwidth, Modulation, Mode, + ACF, Location + sig_param (list): a list formed as [id, value, description] + is_new (bool): If true, the windows open in an empty state ready to + be compiled by the user. If false, the windows will open all the + current parameter for the loaded signal, for editing or deleting purposes. + """ + if param_type == 'Signal' and not is_new: + sig_param = [ + self._parent.loaded_sig.sig_id, + self._parent.loaded_sig.name, + self._parent.loaded_sig.description + ] + self.load.emit(param_type, sig_param, is_new) + self.show_ui.emit() + + + @Slot(str, list, bool) + def save(self, param_type, data, is_new): + """ Save new signal parameters or update the existing ones. + """ + data = data.toVariant() + + if is_new: + if param_type == 'Signal': + self._parent.loaded_sig = ArtemisSignal(self._parent.loaded_db) + self._parent.loaded_sig.insert_signal(data[1], data[2]) + elif param_type == 'Frequency': + self._parent.loaded_sig.insert_frequency(int(data[1]), data[2]) + elif param_type == 'Bandwidth': + self._parent.loaded_sig.insert_bandwidth(int(data[1]), data[2]) + elif param_type == 'Modulation': + self._parent.loaded_sig.insert_modulation(data[1], data[2]) + elif param_type == 'Mode': + self._parent.loaded_sig.insert_mode(data[1], data[2]) + elif param_type == 'ACF': + self._parent.loaded_sig.insert_acf(data[1], data[2]) + elif param_type == 'Location': + self._parent.loaded_sig.insert_location(data[1], data[2]) + else: + if param_type == 'Signal': + self._parent.loaded_sig.update_signal(data[0], data[1], data[2]) + elif param_type == 'Frequency': + self._parent.loaded_sig.update_frequency(data[0], int(data[1]), data[2]) + elif param_type == 'Bandwidth': + self._parent.loaded_sig.update_bandwidth(data[0], int(data[1]), data[2]) + elif param_type == 'Modulation': + self._parent.loaded_sig.update_modulation(data[0], data[1], data[2]) + elif param_type == 'Mode': + self._parent.loaded_sig.update_mode(data[0], data[1], data[2]) + elif param_type == 'ACF': + self._parent.loaded_sig.update_acf(data[0], data[1], data[2]) + elif param_type == 'Location': + self._parent.loaded_sig.update_location(data[0], data[1], data[2]) + + self._parent.load_db(self._parent.loaded_db.db_dir_name) + + + @Slot(str, int) + def delete(self, param_type, id): + """ Delete a signal parameter or the signal itself (with all the parameters and documents). + All the entries in the documents table are automatically beign deleted due to + foreign-key cascade propagation + """ + if param_type == 'Signal': + self._parent.loaded_sig.delete_signal() + for doc in self._parent.loaded_sig.documents: + doc_file_name = '{}.{}'.format(str(doc[0]), doc[1]) + doc_file_path = self._parent.loaded_db.media_dir / doc_file_name + delete_file(doc_file_path) + elif param_type == 'Frequency': + self._parent.loaded_sig.delete_frequency(id) + elif param_type == 'Bandwidth': + self._parent.loaded_sig.delete_bandwidth(id) + elif param_type == 'Modulation': + self._parent.loaded_sig.delete_modulation(id) + elif param_type == 'Mode': + self._parent.loaded_sig.delete_mode(id) + elif param_type == 'ACF': + self._parent.loaded_sig.delete_acf(id) + elif param_type == 'Location': + self._parent.loaded_sig.delete_location(id) + + self._parent.load_db(self._parent.loaded_db.db_dir_name) diff --git a/artemis/ui/spaceweather.py b/artemis/ui/spaceweather.py new file mode 100644 index 0000000..521db71 --- /dev/null +++ b/artemis/ui/spaceweather.py @@ -0,0 +1,65 @@ +from PySide6.QtQml import QQmlApplicationEngine +from PySide6.QtCore import QObject, Signal + +from artemis.utils.path_utils import * +from artemis.utils.generic_utils import * + +from artemis.utils.constants import Constants + + +class UIspaceweather(QObject): + # Python > QML Signals + show_ui = Signal() + load_poseidon_report = Signal(dict) + load_poseidon_forecast_report = Signal(dict) + update_bottom_bar = Signal(str) + + + def __init__(self, parent): + super().__init__() + + self._parent = parent + + self._engine = QQmlApplicationEngine() + self._engine.load('qrc:/ui/SpaceWeather.qml') + self._window = self._engine.rootObjects()[0] + + self._window_current = self._window.findChild(QObject, "spaceWeatherCurrentObj") + self._window_forecast = self._window.findChild(QObject, "spaceWeatherForecastObj") + + self._connect() + + + def _connect(self): + # QML > Python connections + + # Python > QML connections + self.show_ui.connect(self._window.show) + self.update_bottom_bar.connect(self._window.updateBottomBar) + self.load_poseidon_report.connect(self._window_current.loadReport) + self.load_poseidon_forecast_report.connect(self._window_forecast.loadForecastReport) + + + def load_spaceweather_ui(self): + """ Before opening the windows, poseidon report (data.json) is read online + """ + self.download_poseidon_report() + + + def download_poseidon_report(self): + network_manager = self._parent.network_manager + network_manager.show_popup = True + poseidon_data = network_manager.fetch_remote_json( + Constants.POSEIDON_REPORT + ) + if poseidon_data: + self.load_poseidon_report.emit(poseidon_data) + self.load_poseidon_forecast_report.emit(poseidon_data) + + self.update_bottom_bar.emit( + 'Loaded Poseidon report issued on {} at {} UTC'.format( + poseidon_data['JSON_INFO']['utc_date'], + poseidon_data['JSON_INFO']['utc_time'] + ) + ) + self.show_ui.emit() diff --git a/artemis/utils/config_utils.py b/artemis/utils/config_utils.py new file mode 100644 index 0000000..a0c2a08 --- /dev/null +++ b/artemis/utils/config_utils.py @@ -0,0 +1,32 @@ +from configparser import ConfigParser +from artemis.utils.constants import Constants + + +class Config(ConfigParser): + """ Custom configuration class derived from ConfigParser. + Used to get, set, save and remove any configuration from the conf file + """ + + def __init__(self, config_file_path, space_around_delimiters=False): + super().__init__() + self._config_file_path = config_file_path + self.read(self._config_file_path) + self._space_around_delimiters = space_around_delimiters + + def get_or_default(self, section, option, default_value): + value = super().get(section, option) + return value if value else default_value + + def set(self, section, option, value=None): + super().set(section, option, value) + self.save() + + def remove(self, section, option): + super().remove_option(section, option) + self.save() + + def save(self): + with open(self._config_file_path, 'w') as f: + self.write(f, space_around_delimiters=self._space_around_delimiters) + +CONFIGURE_QT = Config((Constants.PREFERENCES_DIR / 'qtquickcontrols2.conf').resolve().as_posix()) diff --git a/artemis/utils/constants.py b/artemis/utils/constants.py new file mode 100644 index 0000000..f76b6a7 --- /dev/null +++ b/artemis/utils/constants.py @@ -0,0 +1,499 @@ +import os +import locale +import sys + +from PySide6.QtCore import qVersion +from pathlib import Path + + +class Constants(): + """ Container class for several constants of the software """ + + APPLICATION_NAME = 'Artemis' + ORGANIZATION_NAME = 'AresValley' + ORGANIZATION_DOMAIN = 'aresvalley.com' + APPLICATION_VERSION = '4.0.0' + + BASE_DIR = Path(os.path.dirname(__file__)) / '../..' + PREFERENCES_DIR = BASE_DIR / 'config' + DB_DIR = BASE_DIR / 'data' + UI_DIR = BASE_DIR / 'ui' + IMAGES_DIR = BASE_DIR / 'images' + LOGS_DIR = BASE_DIR / 'logs' + + SQL_NAME = 'data.sqlite' + + DB_LATEST_VERSION = 'https://www.aresvalley.com/artemis/v4/latest.json' + POSEIDON_REPORT = 'https://www.aresvalley.com/poseidon_engine/data.json' + + DEFAULT_ENCODING = 'utf-8' + SYSTEM_LANGUAGE = 'en_US' # locale.getdefaultlocale()[0] + PYTHON_VERSION = '.'.join(str(v) for v in sys.version_info[:3]) + QT_VERSION = qVersion() + + +class Messages: + """ Container class for messages to be displayed """ + # Type + DIALOG_TYPE_INFO = 'info' + DIALOG_TYPE_QUEST = 'question' + DIALOG_TYPE_WARN = 'warn' + DIALOG_TYPE_ERROR = 'error' + + # Titles + GENERIC_SUCCESS = "Success!" + GENERIC_ERROR = "Something went wrong!" + NO_DB_DETECTED = "No SigID database detected..." + NO_CONNECTION = "Connection Error!" + UP_TO_DATE = "You're up to date!" + DB_NEW_VER = "New SigID DB version available!" + ART_NEW_VER = "New Artemis version available!" + + # Messages + DB_CREATION_SUCCESS_MSG = "The new database has been created succesfully." + GENERIC_ERROR_MSG = "An error occurred during the process. Details: {}" + IMPORTING_SUCCESS_MSG = "Database importing has been succesfully completed!" + EXPORTING_SUCCESS_MSG = "Database exporting has been succesfully completed!" + FILE_NOT_FOUND_ERR_MSG = "The file you are trying to access cannot be located. This may be because the file has been moved or deleted." + NO_DB_DETECTED_MSG = "Do you want to download it now?" + NO_CONNECTION_MSG = "Unable to check for updates. It appears that there is a problem with your internet connection. Please check your network settings and try again later. {}" + UP_TO_DATE_MSG = "The latest version of Artemis and SigID wiki is installed on your computer." + DB_NEW_VER_MSG = "A new version of the database ({}) is available for download. Download now?" + ART_NEW_VER_MSG = "A new version of Artemis ({}) is available for download. Check GitHub page now?" + DOWNLOAD_CORRUPTED_MSG = "Downloaded data corrupted or invalid. Please retry." + + +class Query(): + """ Container class for all the sqlite queries """ + +############################## SELECT + + SELECT_ALL_SIGNALS = "SELECT SIG_ID, NAME FROM signals ORDER BY NAME ASC" + + SELECT_ALL_MODULATION = "SELECT DISTINCT VALUE FROM modulation ORDER BY VALUE ASC" + + SELECT_ALL_LOCATION = "SELECT DISTINCT VALUE FROM location ORDER BY VALUE ASC" + + SELECT_SIG_ID = "SELECT SIG_ID, NAME FROM signals WHERE SIG_ID IN ({}) ORDER BY NAME ASC" + + SELECT_ALL_CAT_LABELS = "SELECT CLB_ID, VALUE FROM category_label ORDER BY VALUE ASC" + + SELECT_INFO = """ + SELECT + NAME, + DATE, + VERSION, + EDITABLE + FROM info + """ + + SELECT_SIGNAL = """ + SELECT + NAME, + DESCRIPTION, + URL + FROM signals WHERE SIG_ID = ? + """ + + SELECT_CATEGORY = """ + SELECT + category.CAT_ID, + category_label.VALUE + FROM category + INNER JOIN category_label ON category.CLB_ID = category_label.CLB_ID + WHERE SIG_ID = ? + """ + + SELECT_DOCUMENTS = """ + SELECT + DOC_ID, + EXTENSION, + NAME, + DESCRIPTION, + TYPE, + PREVIEW + FROM documents WHERE SIG_ID = ? + ORDER BY TYPE ASC + """ + + SELECT_FREQUENCY = """ + SELECT + FREQ_ID, + VALUE, + DESCRIPTION + FROM frequency WHERE SIG_ID = ? + """ + + SELECT_BANDWIDTH = """ + SELECT + BAND_ID, + VALUE, + DESCRIPTION + FROM bandwidth WHERE SIG_ID = ? + """ + + SELECT_MODULATION = """ + SELECT + MDL_ID, + VALUE, + DESCRIPTION + FROM modulation WHERE SIG_ID = ? + """ + + SELECT_MODE= """ + SELECT + MOD_ID, + VALUE, + DESCRIPTION + FROM mode WHERE SIG_ID = ? + """ + + SELECT_LOCATION = """ + SELECT + LOC_ID, + VALUE, + DESCRIPTION + FROM location WHERE SIG_ID = ? + """ + + SELECT_ACF = """ + SELECT + ACF_ID, + VALUE, + DESCRIPTION + FROM acf WHERE SIG_ID = ? + """ + + SELECT_STAT_DOCS = """ + SELECT COUNT(*) + FROM documents + """ + + SELECT_STAT_IMAGES = """ + SELECT COUNT(*) + FROM documents + WHERE type IS 'Image' + """ + + SELECT_STAT_AUDIO = """ + SELECT COUNT(*) + FROM documents + WHERE type IS 'Audio' + """ + +############################## CREATE + + CREATE_SIGNALS = """ + CREATE TABLE signals ( + SIG_ID INTEGER PRIMARY KEY AUTOINCREMENT, + NAME TEXT, + DESCRIPTION TEXT, + URL TEXT + ) + """ + + CREATE_CATEGORY = """ + CREATE TABLE category ( + CAT_ID INTEGER PRIMARY KEY AUTOINCREMENT, + SIG_ID INTEGER, + CLB_ID INTEGER, + FOREIGN KEY (SIG_ID) REFERENCES signals (SIG_ID) ON DELETE CASCADE ON UPDATE CASCADE, + FOREIGN KEY (CLB_ID) REFERENCES category_label (CLB_ID) ON DELETE CASCADE ON UPDATE CASCADE + ) + """ + + CREATE_CATEGORY_LABELS = """ + CREATE TABLE category_label ( + CLB_ID INTEGER PRIMARY KEY AUTOINCREMENT, + VALUE TEXT + ) + """ + + CREATE_DOCUMENTS = """ + CREATE TABLE documents ( + DOC_ID INTEGER PRIMARY KEY AUTOINCREMENT, + SIG_ID INTEGER REFERENCES signals (SIG_ID) ON DELETE CASCADE, + EXTENSION TEXT, + NAME TEXT, + DESCRIPTION TEXT, + TYPE TEXT, + PREVIEW INTEGER + ) + """ + + CREATE_FREQUENCY = """ + CREATE TABLE frequency ( + FREQ_ID INTEGER PRIMARY KEY AUTOINCREMENT, + SIG_ID INTEGER REFERENCES signals (SIG_ID) ON DELETE CASCADE, + VALUE INTEGER, + DESCRIPTION TEXT + ) + """ + + CREATE_BANDWIDTH = """ + CREATE TABLE bandwidth ( + BAND_ID INTEGER PRIMARY KEY AUTOINCREMENT, + SIG_ID INTEGER REFERENCES signals (SIG_ID) ON DELETE CASCADE, + VALUE INTEGER, + DESCRIPTION TEXT + ) + """ + + CREATE_MODULATION = """ + CREATE TABLE modulation ( + MDL_ID INTEGER PRIMARY KEY AUTOINCREMENT, + SIG_ID INTEGER REFERENCES signals (SIG_ID) ON DELETE CASCADE, + VALUE TEXT, + DESCRIPTION TEXT + ) + """ + + CREATE_MODE = """ + CREATE TABLE mode ( + MOD_ID INTEGER PRIMARY KEY AUTOINCREMENT, + SIG_ID INTEGER, + VALUE TEXT, + DESCRIPTION TEXT, + FOREIGN KEY (SIG_ID) REFERENCES signals (SIG_ID) ON DELETE CASCADE ON UPDATE CASCADE + ) + """ + + CREATE_LOCATION = """ + CREATE TABLE location ( + LOC_ID INTEGER PRIMARY KEY AUTOINCREMENT, + SIG_ID INTEGER, + VALUE TEXT, + DESCRIPTION TEXT, + FOREIGN KEY (SIG_ID) REFERENCES signals (SIG_ID) ON DELETE CASCADE ON UPDATE CASCADE + ) + """ + + CREATE_ACF = """ + CREATE TABLE acf ( + ACF_ID INTEGER PRIMARY KEY AUTOINCREMENT, + SIG_ID INTEGER REFERENCES signals (SIG_ID) ON DELETE CASCADE, + VALUE FLOAT, + DESCRIPTION TEXT + ) + """ + + CREATE_INFO = """ + CREATE TABLE info ( + NAME TEXT, + DATE TEXT, + VERSION INTEGER, + EDITABLE INTEGER + ) + """ + + CREATE_VIEW_FREQ = """ + CREATE VIEW FREQ_RANGE AS + SELECT SIG_ID, + MIN(VALUE) AS MIN_VALUE, + MAX(VALUE) AS MAX_VALUE + FROM frequency + GROUP BY SIG_ID + """ + + CREATE_VIEW_BAND = """ + CREATE VIEW BAND_RANGE AS + SELECT SIG_ID, + MIN(VALUE) AS MIN_VALUE, + MAX(VALUE) AS MAX_VALUE + FROM bandwidth + GROUP BY SIG_ID + """ + +############################## INSERT + + INSERT_SIGNAL = """ + INSERT INTO signals ( + NAME, + DESCRIPTION + ) VALUES (?,?) + """ + + INSERT_CATEGORY = """ + INSERT INTO category ( + SIG_ID, + CLB_ID + ) VALUES (?,?) + """ + + INSERT_CATEGORY_LABEL = """ + INSERT INTO category_label ( + VALUE + ) VALUES (?) + """ + + INSERT_INFO = """ + INSERT INTO info ( + NAME, + DATE, + VERSION, + EDITABLE + ) VALUES (?,?,?,?) + """ + + INSERT_DOCUMENTS = """ + INSERT INTO documents ( + SIG_ID, + EXTENSION, + NAME, + DESCRIPTION, + TYPE, + PREVIEW + ) VALUES (?,?,?,?,?,?) + """ + + INSERT_FREQUENCY = """ + INSERT INTO frequency ( + SIG_ID, + VALUE, + DESCRIPTION + ) VALUES (?,?,?) + """ + + INSERT_BANDWIDTH = """ + INSERT INTO bandwidth ( + SIG_ID, + VALUE, + DESCRIPTION + ) VALUES (?,?,?) + """ + + INSERT_MODULATION = """ + INSERT INTO modulation ( + SIG_ID, + VALUE, + DESCRIPTION + ) VALUES (?,?,?) + """ + + INSERT_MODE = """ + INSERT INTO mode ( + SIG_ID, + VALUE, + DESCRIPTION + ) VALUES (?,?,?) + """ + + INSERT_LOCATION = """ + INSERT INTO location ( + SIG_ID, + VALUE, + DESCRIPTION + ) VALUES (?,?,?) + """ + + INSERT_ACF = """ + INSERT INTO acf ( + SIG_ID, + VALUE, + DESCRIPTION + ) VALUES (?,?,?) + """ + +############################## UPDATE + + RENAME_DB = "UPDATE info SET NAME = ?" + + UPDATE_SIGNAL = """ + UPDATE signals SET + NAME = ?, + DESCRIPTION = ? + WHERE SIG_ID = ? + """ + + UPDATE_CATEGORY_LABEL = """ + UPDATE category_label SET + VALUE = ? + WHERE CLB_ID = ? + """ + + UPDATE_FREQUENCY = """ + UPDATE frequency SET + VALUE = ?, + DESCRIPTION = ? + WHERE FREQ_ID = ? + """ + + UPDATE_BANDWIDTH = """ + UPDATE bandwidth SET + VALUE = ?, + DESCRIPTION = ? + WHERE BAND_ID = ? + """ + + UPDATE_ACF = """ + UPDATE acf SET + VALUE = ?, + DESCRIPTION = ? + WHERE ACF_ID = ? + """ + + UPDATE_MODE = """ + UPDATE mode SET + VALUE = ?, + DESCRIPTION = ? + WHERE MOD_ID = ? + """ + + UPDATE_LOCATION = """ + UPDATE location SET + VALUE = ?, + DESCRIPTION = ? + WHERE LOC_ID = ? + """ + + UPDATE_MODULATION = """ + UPDATE modulation SET + VALUE = ?, + DESCRIPTION = ? + WHERE MDL_ID = ? + """ + + UPDATE_DOCUMENTS = """ + UPDATE documents SET + NAME = ?, + DESCRIPTION = ?, + TYPE = ?, + PREVIEW = ? + WHERE DOC_ID = ? + """ + +############################## DELETE + + DELETE_SIGNAL = "DELETE FROM signals WHERE SIG_ID = ?" + + DELETE_DOCUMENT = "DELETE FROM documents WHERE DOC_ID = ?" + + DELETE_FREQUENCY = "DELETE FROM frequency WHERE FREQ_ID = ?" + + DELETE_BANDWIDTH = "DELETE FROM bandwidth WHERE BAND_ID = ?" + + DELETE_MODULATION = "DELETE FROM modulation WHERE MDL_ID = ?" + + DELETE_MODE = "DELETE FROM mode WHERE MOD_ID = ?" + + DELETE_LOCATION = "DELETE FROM location WHERE LOC_ID = ?" + + DELETE_ACF = "DELETE FROM acf WHERE ACF_ID = ?" + + DELETE_CATEGORY = "DELETE FROM category WHERE CAT_ID = ?" + + DELETE_CATEGORY_LABEL = "DELETE FROM category_label WHERE CLB_ID = ?" + +############################## FILTER QUERY + + FILTER_FREQ = "SELECT SIG_ID FROM FREQ_RANGE WHERE ({} >= MIN_VALUE) AND ({} <= MAX_VALUE)" + + FILTER_BAND = "SELECT SIG_ID FROM BAND_RANGE WHERE ({} >= MIN_VALUE) AND ({} <= MAX_VALUE)" + + FILTER_ACF = "SELECT SIG_ID FROM acf WHERE ({} >= VALUE) AND ({} <= VALUE)" + + FILTER_MODULATION = "SELECT SIG_ID FROM modulation WHERE VALUE IN ({})" + + FILTER_LOCATION = "SELECT SIG_ID FROM location WHERE VALUE IN ({})" + + FILTER_CATEGORY = "SELECT SIG_ID FROM category WHERE CLB_ID IN ({})" diff --git a/artemis/utils/generic_utils.py b/artemis/utils/generic_utils.py new file mode 100644 index 0000000..4acd9c5 --- /dev/null +++ b/artemis/utils/generic_utils.py @@ -0,0 +1,77 @@ +from artemis.utils.constants import Query + + +def format_frequency(freq_hz): + """ Return frequency in a human-readable format + + Args: + freq_hz (int): frequency in Hz + """ + scale = _change_unit_freq(freq_hz) + formatted_freq = f'{freq_hz / scale[0]} {scale[1]}' + return formatted_freq + + +def _change_unit_freq(freq_hz): + """ Return a scale factor and unit based on the number of digits in the frequency + + Args: + freq_hz (int): frequency in Hz + """ + digits = len(str(freq_hz)) + + if digits < 4: + return 1, 'Hz' + elif digits < 7: + return 10**3, 'kHz' + elif digits < 10: + return 10**6, 'MHz' + else: + return 10**9, 'GHz' + + +def generate_filter_query(filer_status): + """ Returns the sql query according to the selected filter parameters + + Args: + filer_status (dic): dictionary containing a summary of the active + filtering options with the related parametes. + """ + query = [] + + for key, val in filer_status.items(): + + if key == 'frequency': + query.append(Query.FILTER_FREQ.format( + val['upper_band'], + val['lower_band'] + )) + + elif key == 'bandwidth': + query.append(Query.FILTER_BAND.format( + val['upper_band'], + val['lower_band'] + )) + + elif key == 'acf': + query.append(Query.FILTER_ACF.format( + val['upper_band'], + val['lower_band'] + )) + + elif key == 'modulation': + query.append(Query.FILTER_MODULATION.format( + ', '.join(f"'{mod}'" for mod in val) + )) + + elif key == 'location': + query.append(Query.FILTER_LOCATION.format( + ', '.join(f"'{loc}'" for loc in val) + )) + + elif key == 'category': + query.append(Query.FILTER_CATEGORY.format( + ', '.join(f"{cat}" for cat in val) + )) + + return ' INTERSECT '.join(query) diff --git a/artemis/utils/network_utils.py b/artemis/utils/network_utils.py new file mode 100644 index 0000000..083cc2b --- /dev/null +++ b/artemis/utils/network_utils.py @@ -0,0 +1,134 @@ +import os +import requests + +from packaging.version import Version + +from artemis.utils.constants import Constants, Messages +from artemis.utils.sql_utils import ArtemisDatabase +from artemis.utils.sys_utils import is_windows, is_linux, is_macos + + +class NetworkManager: + """ Class that checks for DB or software updates + """ + + def __init__(self, parent): + self._parent = parent + self.sigid_db_path = Constants.DB_DIR / 'sigID' / Constants.SQL_NAME + + self.show_popup = False + self.db_update = None + self.art_update = None + + self.remote_db_url = None + self.remote_db_hash = None + self.remote_db_version = None + self.remote_db_size = None + + self.remote_art_version = None + + self.check_updates() + + + def check_updates(self): + """ Checks if a new DB update is available. + + Args: + popup (bool, optional): Suppress the "already up-to-date" message on startup. + Defaults to False. + """ + latest_json = self.fetch_remote_json(Constants.DB_LATEST_VERSION) + if latest_json: + local_db = self.load_local_db() + remote_db = latest_json['sigID_DB'] + + self.remote_db_version = remote_db['version'] + self.remote_db_url = remote_db['url'] + self.remote_db_hash = remote_db['sha256_hash'] + self.remote_db_size = remote_db['total_bytes'] + + if is_windows(): + self.remote_art_version = latest_json['windows']['version'] + elif is_linux(): + self.remote_art_version = latest_json['linux']['version'] + elif is_macos(): + self.remote_art_version = latest_json['mac']['version'] + + if Version(self.remote_art_version) > Version(Constants.APPLICATION_VERSION): + self.art_update = True + else: + self.art_update = False + + if self.art_update: + self.show_popup_art_update() + else: + if local_db: + if self.remote_db_version > local_db.version: + self.show_popup_db_update() + elif self.show_popup: + self.show_popup_up_to_date() + else: + self.show_popup_initial_db_download() + + + def fetch_remote_json(self, url): + """ Fetches the remote json from a url + """ + try: + response = requests.get(url) + response.raise_for_status() + return response.json() + except requests.exceptions.RequestException as e: + if self.show_popup: + self._parent.dialog_popup( + Messages.DIALOG_TYPE_ERROR, + Messages.NO_CONNECTION, + Messages.NO_CONNECTION_MSG.format(e) + ) + return None + + + def load_local_db(self): + """ Loads the local database if exists + """ + if os.path.exists(self.sigid_db_path): + local_db = ArtemisDatabase('sigID') + local_db.load() + return local_db + return None + + + def show_popup_db_update(self): + """Prompts the user to download the updated version of the database.""" + self._parent.dialog_download_db( + Messages.DIALOG_TYPE_WARN, + Messages.DB_NEW_VER, + Messages.DB_NEW_VER_MSG.format(self.remote_db_version) + ) + + + def show_popup_art_update(self): + """Prompts the user to download the updated version of the database.""" + self._parent.dialog_download_artemis( + Messages.DIALOG_TYPE_WARN, + Messages.ART_NEW_VER, + Messages.ART_NEW_VER_MSG.format(self.remote_art_version) + ) + + + def show_popup_up_to_date(self): + """Notifies the user that the database is up to date.""" + self._parent.dialog_popup( + Messages.DIALOG_TYPE_INFO, + Messages.UP_TO_DATE, + Messages.UP_TO_DATE_MSG + ) + + + def show_popup_initial_db_download(self): + """Prompts the user to download the database for the first time.""" + self._parent.dialog_download_db( + Messages.DIALOG_TYPE_QUEST, + Messages.NO_DB_DETECTED, + Messages.NO_DB_DETECTED_MSG + ) diff --git a/artemis/utils/path_utils.py b/artemis/utils/path_utils.py new file mode 100644 index 0000000..861f756 --- /dev/null +++ b/artemis/utils/path_utils.py @@ -0,0 +1,56 @@ +import os +from pathlib import Path + +from artemis.utils.sql_utils import ArtemisDatabase +from artemis.utils.constants import Constants +from artemis.utils.sys_utils import * + + +def check_data_dir(): + if not os.path.exists(Constants.DB_DIR): + os.makedirs(Constants.DB_DIR) + + +def normalize_dialog_path(path): + if is_windows(): + norm_path = path.replace('file:///', '') + elif is_linux() or is_macos(): + norm_path = path.replace('file:///', '/') + return norm_path + + +def logs_dir(): + if is_macos(): + logs_dir_path = Path.home() / 'Library/Logs/' / Constants.ORGANIZATION_NAME / Constants.APPLICATION_NAME + elif is_windows(): + logs_dir_path = Path.home() / 'AppData/Local/' / Constants.ORGANIZATION_NAME / Constants.APPLICATION_NAME / 'logs' + elif is_linux(): + logs_dir_path = Path.home() / '/var/log/' / Constants.ORGANIZATION_NAME / Constants.APPLICATION_NAME + else: + logs_dir_path = Constants.LOGS_DIR + + if not logs_dir_path.exists(): + logs_dir_path.mkdir(parents=True) + + return logs_dir_path + + +def valid_db(db_dir_name): + """ Checks if db_dir_name is a valid db dir containing a `data.sqlite` file. + Db must be valid as well and should be properly initialized and loaded with + no errors. + + Args: + db_dir_name (str): name of the db folder + """ + if os.path.exists(Constants.DB_DIR / db_dir_name / Constants.SQL_NAME): + try: + database = ArtemisDatabase(db_dir_name) + database.load() + return True + except Exception as e: + # Invalid or corrupted DB + return False + else: + # The dir is not containing a data.sqlite file + return False diff --git a/artemis/utils/sql_utils.py b/artemis/utils/sql_utils.py new file mode 100644 index 0000000..767700c --- /dev/null +++ b/artemis/utils/sql_utils.py @@ -0,0 +1,416 @@ +import sqlite3 +import os + +from PySide6.QtCore import QUrl +from operator import itemgetter +from datetime import datetime + +from artemis.utils.constants import Query, Constants +from artemis.utils.generic_utils import * +from contextlib import closing + + +class Database(): + """ General superclass for SQLite DB manipulation. + Foreign keys are activated (otherwise disabled by default for compatibility purposes) + """ + def __init__(self, sql_path): + self.sql_path = sql_path + + def execute(self, query, parameters=None, last_rowid=False): + """ Open a connection, execute the given query with optional parameters and close the connection. + In the case of a SELECT query, returns the results as a fetchall(). + If last_rowid == True, this function returns a tuple with the result of the fetchall() and + the latest modified row id of the current connection. + """ + with closing(sqlite3.connect(self.sql_path, check_same_thread=False)) as conn: + conn.execute('PRAGMA foreign_keys = ON;') + + curs = conn.cursor() + + if parameters: + curs.execute(query, parameters) + else: + curs.execute(query) + + conn.commit() + + if last_rowid: + result = (curs.fetchall(), curs.lastrowid) + else: + result = curs.fetchall() + + return result + +################################## MARK: >>> DATABASE <<< + +class ArtemisDatabase(Database): + """ General CRUD class for SQLite DB manipulation. + Foreign keys are activated (otherwise disabled by default for compatibility purposes) + """ + + def __init__(self, db_dir_name): + self.db_dir_name = db_dir_name + self.db_dir = Constants.DB_DIR / db_dir_name + self.sql_path = self.db_dir / Constants.SQL_NAME + self.media_dir = self.db_dir / 'media' + super().__init__(self.sql_path) + + self.name = None + self.date = None + self.version = None + self.editable = None + + self.all_signals = None + self.all_modulation = None + self.all_location = None + self.all_category_labels = None + + self.filtered_signals = None + + self.stats = {} + + + def load(self): + self._select_info() + self._select_all() + self._select_all_modulation() + self._select_all_location() + self._select_all_category_labels() + self._select_stats() + + + def _select_info(self): + """ Load the DB meta INFO from the table 'info' + """ + result = self.execute(Query.SELECT_INFO)[0] + self.name = result[0] + self.date = result[1] + self.version = result[2] + self.editable = result[3] + + + def _select_all(self): + """ Load a list of tuple for all signals. Each tuple (representing a signal) + contains the SIG_ID and the NAME of the signal + """ + self.all_signals = self.execute(Query.SELECT_ALL_SIGNALS) + keys = ('SIG_ID', 'name') + result = [dict(zip(keys, values)) for values in self.all_signals] + self.all_signals = result + + + def _select_all_modulation(self): + self.all_modulation = self.execute(Query.SELECT_ALL_MODULATION) + self.all_modulation = [{'value': item[0]} for item in self.all_modulation] + + + def _select_all_location(self): + self.all_location = self.execute(Query.SELECT_ALL_LOCATION) + self.all_location = [{'value': item[0]} for item in self.all_location] + + + def _select_all_category_labels(self): + self.all_category_labels = self.execute(Query.SELECT_ALL_CAT_LABELS) + self.all_category_labels = [{'clb_id': item[0], 'value': item[1]} for item in self.all_category_labels] + + + def _select_stats(self): + tot_docs = self.execute(Query.SELECT_STAT_DOCS)[0][0] + tot_images = self.execute(Query.SELECT_STAT_IMAGES)[0][0] + tot_audio = self.execute(Query.SELECT_STAT_AUDIO)[0][0] + + self.stats['documents'] = tot_docs + self.stats['images'] = tot_images + self.stats['audio'] = tot_audio + self.stats['signals'] = len(self.all_signals) + + + def select_by_filter(self, filter_query): + matching_sig_ids = self.execute(filter_query) + sig_ids = ",".join(str(num[0]) for num in matching_sig_ids) + + self.all_signals = self.execute(Query.SELECT_SIG_ID.format(sig_ids)) + keys = ('SIG_ID', 'name') + result = [dict(zip(keys, values)) for values in self.all_signals] + self.all_signals = result + + + def create(self, name): + """ Create new db in the data folder. + The name of folder containing the new db has a unique id as name (db_dir_name). + """ + meta = [name, datetime.now(), 0, 0] + os.makedirs(self.db_dir) + os.makedirs(self.media_dir) + + self.execute(Query.CREATE_INFO) + self.execute(Query.INSERT_INFO, meta) + self.execute(Query.CREATE_SIGNALS) + self.execute(Query.CREATE_CATEGORY) + self.execute(Query.CREATE_CATEGORY_LABELS) + self.execute(Query.CREATE_FREQUENCY) + self.execute(Query.CREATE_BANDWIDTH) + self.execute(Query.CREATE_MODULATION) + self.execute(Query.CREATE_MODE) + self.execute(Query.CREATE_LOCATION) + self.execute(Query.CREATE_ACF) + self.execute(Query.CREATE_DOCUMENTS) + + self.execute(Query.CREATE_VIEW_FREQ) + self.execute(Query.CREATE_VIEW_BAND) + + + def rename(self, name): + self.execute(Query.RENAME_DB, [name]) + + + def insert_category_label(self, value): + self.execute(Query.INSERT_CATEGORY_LABEL, [value]) + + + def update_category_label(self, clb_id, value): + self.execute(Query.UPDATE_CATEGORY_LABEL, [value, clb_id]) + + + def delete_category_label(self, clb_id): + self.execute(Query.DELETE_CATEGORY_LABEL, [clb_id]) + +################################## MARK: >>> SIGNAL <<< + +class ArtemisSignal(): + """ Main class of the object signal + """ + + def __init__(self, loaded_db): + self.db = loaded_db + + self.sig_id = None + self.name = None + self.description = None + self.url = None + self.category = None + self.frequency = None + self.bandwidth = None + self.modulation = None + self.mode = None + self.location = None + self.acf = None + + self.documents = None + self.spectrum_path = None + self.audio_path = None + + + def load(self, sig_id): + self.sig_id = sig_id + self._select_signals() + self._select_category() + self._select_frequency() + self._select_bandwidth() + self._select_modulation() + self._select_mode() + self._select_location() + self._select_acf() + self.select_documents() + + + def generate_dic(self): + dic = { + 'name': self.name, + 'description': self.description, + 'url': self.url, + 'category': self.category, + 'frequency': self.frequency, + 'bandwidth': self.bandwidth, + 'modulation': self.modulation, + 'mode': self.mode, + 'location': self.location, + 'acf': self.acf, + 'spectrum_path': self.spectrum_path, + 'audio_path': self.audio_path, + 'all_category': self.db.all_category_labels + } + return dic + + +################################## MARK: SELECT Methods + + + def _select_signals(self): + signal = self.db.execute(Query.SELECT_SIGNAL, [self.sig_id])[0] + self.name = signal[0] + self.description = signal[1] + self.url = signal[2] + + + def _select_category(self): + self.category = self.db.execute(Query.SELECT_CATEGORY, [self.sig_id]) + self.category = [list(x) for x in self.category] + + + def _select_frequency(self): + result = self.db.execute(Query.SELECT_FREQUENCY, [self.sig_id]) + sorted_list = sorted(result, key=itemgetter(1)) + self.frequency = [list(x) + [format_frequency(x[1])] for x in sorted_list] + + + def _select_bandwidth(self): + result = self.db.execute(Query.SELECT_BANDWIDTH, [self.sig_id]) + sorted_list = sorted(result, key=itemgetter(1)) + self.bandwidth = [list(x) + [format_frequency(x[1])] for x in sorted_list] + + + def _select_acf(self): + self.acf = self.db.execute(Query.SELECT_ACF, [self.sig_id]) + self.acf = [list(x) for x in self.acf] + + + def _select_modulation(self): + self.modulation = self.db.execute(Query.SELECT_MODULATION, [self.sig_id]) + self.modulation = [list(x) for x in self.modulation] + + + def _select_mode(self): + self.mode = self.db.execute(Query.SELECT_MODE, [self.sig_id]) + self.mode = [list(x) for x in self.mode] + + + def _select_location(self): + self.location = self.db.execute(Query.SELECT_LOCATION, [self.sig_id]) + self.location = [list(x) for x in self.location] + + + def select_documents(self): + self.documents = self.db.execute(Query.SELECT_DOCUMENTS, [self.sig_id]) + + default_spectrum = [doc for doc in self.documents if doc[4] == 'Image' and doc[5] == 1] + default_audio = [doc for doc in self.documents if doc[4] == 'Audio' and doc[5] == 1] + + if default_spectrum != []: + default_spectrum_filename = '{}.{}'.format(str(default_spectrum[0][0]), default_spectrum[0][1]) + self.spectrum_path = self.db.media_dir / default_spectrum_filename + self.spectrum_path = QUrl.fromLocalFile(self.spectrum_path.resolve()) + else: + self.spectrum_path = 'qrc:///images/spectrum_not_available.svg' + + if default_audio != []: + default_audio_filename = '{}.{}'.format(str(default_audio[0][0]), default_audio[0][1]) + self.audio_path = self.db.media_dir / default_audio_filename + self.audio_path = QUrl.fromLocalFile(self.audio_path.resolve()) + else: + self.audio_path = '' + + +################################## MARK: UPDATE Methods + + + def update_signal(self, sig_id, value, description): + self.db.execute(Query.UPDATE_SIGNAL, [value, description, sig_id]) + + + def update_frequency(self, freq_id, value, description): + self.db.execute(Query.UPDATE_FREQUENCY, [value, description, freq_id]) + + + def update_bandwidth(self, band_id, value, description): + self.db.execute(Query.UPDATE_BANDWIDTH, [value, description, band_id]) + + + def update_modulation(self, modu_id, value, description): + self.db.execute(Query.UPDATE_MODULATION, [value, description, modu_id]) + + + def update_mode(self, mode_id, value, description): + self.db.execute(Query.UPDATE_MODE, [value, description, mode_id]) + + + def update_acf(self, acf_id, value, description): + self.db.execute(Query.UPDATE_ACF, [value, description, acf_id]) + + + def update_location(self, loc_id, value, description): + self.db.execute(Query.UPDATE_LOCATION, [value, description, loc_id]) + + + def update_documents(self, doc_id, name, description, type, is_preview): + self.db.execute(Query.UPDATE_DOCUMENTS, [name, description, type, is_preview, doc_id]) + + +################################## MARK: INSERT Methods + + + def insert_signal(self, value, description): + self.db.execute(Query.INSERT_SIGNAL, [value, description]) + + + def insert_frequency(self, value, description): + self.db.execute(Query.INSERT_FREQUENCY, [self.sig_id, value, description]) + + + def insert_bandwidth(self, value, description): + self.db.execute(Query.INSERT_BANDWIDTH, [self.sig_id,value, description]) + + + def insert_modulation(self, value, description): + self.db.execute(Query.INSERT_MODULATION, [self.sig_id,value, description]) + + + def insert_mode(self, value, description): + self.db.execute(Query.INSERT_MODE, [self.sig_id,value, description]) + + + def insert_acf(self, value, description): + self.db.execute(Query.INSERT_ACF, [self.sig_id,value, description]) + + + def insert_location(self, value, description): + self.db.execute(Query.INSERT_LOCATION, [self.sig_id,value, description]) + + + def insert_category(self, clb_id): + self.db.execute(Query.INSERT_CATEGORY, [self.sig_id, clb_id]) + + + def insert_document(self, doc_lst): + row_id = self.db.execute(Query.INSERT_DOCUMENTS, [self.sig_id] + doc_lst[1:], True)[1] + return row_id + + +################################## MARK: DELETE Methods + + + def delete_signal(self): + self.db.execute(Query.DELETE_SIGNAL, [self.sig_id]) + + + def delete_frequency(self, freq_id): + self.db.execute(Query.DELETE_FREQUENCY, [freq_id]) + + + def delete_bandwidth(self, band_id): + self.db.execute(Query.DELETE_BANDWIDTH, [band_id]) + + + def delete_modulation(self, modu_id): + self.db.execute(Query.DELETE_MODULATION, [modu_id]) + + + def delete_mode(self, mode_id): + self.db.execute(Query.DELETE_MODE, [mode_id]) + + + def delete_acf(self, acf_id): + self.db.execute(Query.DELETE_ACF, [acf_id]) + + + def delete_location(self, loc_id): + self.db.execute(Query.DELETE_LOCATION, [loc_id]) + + + def delete_document(self, doc_id): + self.db.execute(Query.DELETE_DOCUMENT, [doc_id]) + + + def delete_category(self, cat_id): + self.db.execute(Query.DELETE_CATEGORY, [cat_id]) diff --git a/artemis/utils/sys_utils.py b/artemis/utils/sys_utils.py new file mode 100644 index 0000000..649dcea --- /dev/null +++ b/artemis/utils/sys_utils.py @@ -0,0 +1,91 @@ +import os +import platform +import subprocess +import hashlib + +from shutil import rmtree, copyfile, make_archive, unpack_archive +from pathlib import Path + +from artemis.utils.constants import Constants, Messages + + +def is_windows(): + return platform.system() == 'Windows' + +def is_macos(): + return platform.system() == 'Darwin' + +def is_linux(): + return platform.system() == 'Linux' + + +def open_file(file_path, timeout=3): + try: + if is_windows(): + os.startfile(file_path) + elif is_macos(): + subprocess.call(['open', file_path], timeout=timeout) + elif is_linux(): + subprocess.call(['xdg-open', file_path], timeout=timeout) + else: + return + except FileNotFoundError: + raise Exception(Messages.FILE_NOT_FOUND_ERR_MSG) + except Exception as e: + raise Exception(Messages.GENERIC_ERROR_MSG.format(e)) + + +def open_directory(directory, timeout=3): + if is_windows(): + subprocess.call(['explorer', str(Path(directory))], timeout=timeout) + elif is_macos(): + subprocess.call(['open', directory], timeout=timeout) + elif is_linux(): + subprocess.call(['xdg-open', directory], timeout=timeout) + else: + return + + +def delete_db_dir(db_dir_name): + """Delete the db folder""" + db_dir = Constants.DB_DIR / db_dir_name + if os.path.exists(db_dir): + rmtree(db_dir) + + +def copy_file(src_file_path, dst_file_path): + copyfile(src_file_path, dst_file_path) + + +def delete_file(file_path): + if os.path.exists(file_path): + os.remove(file_path) + + +def pack_db(save_path, db_dir): + make_archive(save_path, 'tar', db_dir.resolve().as_posix()) + + +def unpack_db(tar_path, db_dir_name): + db_dir = Constants.DB_DIR / db_dir_name + unpack_archive(tar_path, db_dir, 'tar') + + +def match_hash(data, reference_hash): + """ Check whether the checksum of 'data' match the reference one. + + Args: + data (str): Path of the file to be checked + reference_hash (str): Reference SHA-256 hash + """ + if reference_hash is None: + raise ValueError("ERROR: Invalid hash code.") + + code = hashlib.sha256() + b = bytearray(128*1024) + mv = memoryview(b) + with open(data, 'rb', buffering=0) as f: + while n := f.readinto(mv): + code.update(mv[:n]) + + return code.hexdigest() == reference_hash diff --git a/artemis/utils/ui_utils.py b/artemis/utils/ui_utils.py new file mode 100644 index 0000000..34567b4 --- /dev/null +++ b/artemis/utils/ui_utils.py @@ -0,0 +1,21 @@ +import os + +from artemis.utils.sys_utils import is_windows, is_linux, is_macos +from artemis.utils.config_utils import CONFIGURE_QT + + +def set_ui(): + os.environ['QT_QUICK_CONTROLS_STYLE'] = CONFIGURE_QT.get_or_default('Controls', 'style', 'Material') + os.environ['QT_QUICK_CONTROLS_MATERIAL_VARIANT'] = CONFIGURE_QT.get_or_default('Material', 'variant', 'Dense') + os.environ['QT_QUICK_CONTROLS_MATERIAL_THEME'] = CONFIGURE_QT.get_or_default('Material', 'theme', 'System') + os.environ['QT_QUICK_CONTROLS_MATERIAL_ACCENT'] = CONFIGURE_QT.get_or_default('Material', 'accent', 'Green') + + if is_windows(): + os.environ['QSG_RHI_BACKEND'] = 'opengl' + + if is_linux(): + os.environ['GDK_BACKEND'] = 'x11' + os.environ['QT_QPA_PLATFORM'] = 'xcb' + + os.environ['QT_ENABLE_GLYPH_CACHE_WORKAROUND'] = '1' + os.environ['QML_USE_GLYPHCACHE_WORKAROUND'] = '1' diff --git a/building/Linux/build_linux.sh b/building/Linux/build_linux.sh new file mode 100644 index 0000000..446d59a --- /dev/null +++ b/building/Linux/build_linux.sh @@ -0,0 +1,25 @@ +#!/usr/bin/env bash + +echo "Building Linux target ..." + +echo "Installing requirements ..." +pip install -r requirements.txt +pip install nuitka + +echo "Building with Nuitka ..." +python -m nuitka app.py \ + --standalone \ + --follow-imports \ + --show-modules \ + --assume-yes-for-downloads \ + --disable-console \ + --enable-plugin=pyside6 \ + --include-qt-plugins=sensible,styles,qml,multimedia \ + --include-data-files=./artemis/resources.py=./artemis/resources.py \ + --include-data-files=./config/qtquickcontrols2.conf=./config/qtquickcontrols2.conf \ + --include-data-files=./building/Linux/create_shortcut.sh=./create_shortcut.sh \ + --include-data-files=./images/artemis_icon.svg=./images/artemis_icon.svg + +chmod 755 ./app.dist/app.bin + +echo "Building Linux target finished." diff --git a/spec_files/Linux/create_shortcut.sh b/building/Linux/create_shortcut.sh similarity index 70% rename from spec_files/Linux/create_shortcut.sh rename to building/Linux/create_shortcut.sh index 1ff5b2d..01e8cad 100644 --- a/spec_files/Linux/create_shortcut.sh +++ b/building/Linux/create_shortcut.sh @@ -1,7 +1,7 @@ clear echo " =================================== - Artemis 3 Shortcut Creator + Artemis 4 Shortcut Creator LINUX =================================== " @@ -15,7 +15,7 @@ sudo chmod 700 $DIR # Generation of shortcut file=/home/$USER/.local/share/applications/artemis.desktop if [ -e "$file" ]; then - echo "A shortcut of Artemis 3 is already present:" + echo "A shortcut of Artemis 4 is already present:" echo "" echo "R) Remove the shortcut and the icon file" echo "U) Update the shortcut" @@ -26,16 +26,16 @@ if [ -e "$file" ]; then echo "[Desktop Entry]" >> /home/$USER/.local/share/applications/artemis.desktop echo "Name=Artemis" >> /home/$USER/.local/share/applications/artemis.desktop echo "Type=Application" >> /home/$USER/.local/share/applications/artemis.desktop - echo "StartupWMClass=artemis3" >> /home/$USER/.local/share/applications/artemis.desktop - echo "Exec=sh -c \"cd $DIR && ./Artemis\" " >> /home/$USER/.local/share/applications/artemis.desktop + echo "StartupWMClass=artemis" >> /home/$USER/.local/share/applications/artemis.desktop + echo "Exec=sh -c \"cd $DIR && ./app.bin\" " >> /home/$USER/.local/share/applications/artemis.desktop echo "Terminal=false" >> /home/$USER/.local/share/applications/artemis.desktop - echo "Icon=artemis3" >> /home/$USER/.local/share/applications/artemis.desktop - sudo cp ./artemis3.svg /usr/share/icons/ + echo "Icon=artemis_icon" >> /home/$USER/.local/share/applications/artemis.desktop + sudo cp ./images/artemis_icon.svg /usr/share/icons/ echo "Link Updated!" ;; r|R) sudo rm /home/$USER/.local/share/applications/artemis.desktop - sudo rm /usr/share/icons/artemis3.svg + sudo rm /usr/share/icons/artemis_icon.svg echo "Link and icon removed!" ;; *) echo "Sorry! Invalid option $REPLY";; @@ -44,14 +44,14 @@ else echo "[Desktop Entry]" >> /home/$USER/.local/share/applications/artemis.desktop echo "Name=Artemis" >> /home/$USER/.local/share/applications/artemis.desktop echo "Type=Application" >> /home/$USER/.local/share/applications/artemis.desktop - echo "StartupWMClass=artemis3" >> /home/$USER/.local/share/applications/artemis.desktop - echo "Exec=sh -c \"cd $DIR && ./Artemis\" " >> /home/$USER/.local/share/applications/artemis.desktop + echo "StartupWMClass=artemis" >> /home/$USER/.local/share/applications/artemis.desktop + echo "Exec=sh -c \"cd $DIR && ./app.bin\" " >> /home/$USER/.local/share/applications/artemis.desktop echo "Terminal=false" >> /home/$USER/.local/share/applications/artemis.desktop - echo "Icon=artemis3" >> /home/$USER/.local/share/applications/artemis.desktop - sudo cp ./artemis3.svg /usr/share/icons/ + echo "Icon=artemis_icon" >> /home/$USER/.local/share/applications/artemis.desktop + sudo cp ./images/artemis_icon.svg /usr/share/icons/ echo " Link copied in: /home/$USER/.local/share/applications/artemis.desktop - Icon copied in: /usr/share/icons/artemis3.svg + Icon copied in: /usr/share/icons/artemis_icon.svg " fi diff --git a/building/Windows/build_windows.ps1 b/building/Windows/build_windows.ps1 new file mode 100644 index 0000000..ffd67d5 --- /dev/null +++ b/building/Windows/build_windows.ps1 @@ -0,0 +1,27 @@ +Write-Output "Building Windows target" + +Write-Output "Installing requirements ..." +pip install -r requirements.txt +pip install nuitka + +Write-Output "Building with Nuitka ..." +python -m nuitka app.py ` + --standalone ` + --follow-imports ` + --show-modules ` + --assume-yes-for-downloads ` + --disable-console ` + --enable-plugin=pyside6 ` + --include-qt-plugins=sensible,styles,qml,multimedia ` + --include-data-files=.\artemis\resources.py=.\artemis\resources.py ` + --include-data-files=.\config\qtquickcontrols2.conf=.\config\qtquickcontrols2.conf ` + --windows-company-name=Aresvalley.com ` + --windows-product-name=Artemis ` + --windows-file-version=4.0.0 ` + --windows-product-version=4.0.0 ` + --windows-file-description=Artemis ` + --windows-icon-from-ico=images\artemis_icon.ico + +Rename-Item -Path app.dist\app.exe -NewName artemis.exe + +Write-Output "Building Windows target finished." diff --git a/building/Windows/windows_installer.iss b/building/Windows/windows_installer.iss new file mode 100644 index 0000000..2664294 --- /dev/null +++ b/building/Windows/windows_installer.iss @@ -0,0 +1,44 @@ +#define MyAppName "Artemis" +#define MyAppVersion "4.0.0" +#define MyAppPublisher "AresValley" +#define MyAppURL "https://www.aresvalley.com/" +#define MyAppExeName "artemis.exe" + +[Setup] +AppName={#MyAppName} +AppId={2A04F9B8-0EF1-4D46-A335-E484DA6CE8A7} +AppVersion={#MyAppVersion} +AppPublisher={#MyAppPublisher} +AppPublisherURL={#MyAppURL} +AppSupportURL={#MyAppURL} +AppUpdatesURL={#MyAppURL} +DefaultDirName={autopf}\{#MyAppName} +DisableProgramGroupPage=yes +LicenseFile=..\..\LICENSE +PrivilegesRequiredOverridesAllowed=dialog +OutputDir=..\ +OutputBaseFilename=Artemis +SetupIconFile=..\..\images\artemis_icon.ico +Compression=lzma2/ultra64 +SolidCompression=yes +VersionInfoVersion={#MyAppVersion} +ArchitecturesAllowed=x64 +UninstallDisplayIcon={app}\{#MyAppExeName} +WizardStyle=modern + +[Languages] +Name: "english"; MessagesFile: "compiler:Default.isl" + +[Tasks] +Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked + +[Files] +Source: "..\..\app.dist\{#MyAppExeName}"; DestDir: "{app}"; Flags: ignoreversion +Source: "..\..\app.dist\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs + +[Icons] +Name: "{autoprograms}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}" +Name: "{autodesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: desktopicon + +[Run] +Filename: "{app}\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}"; Flags: nowait postinstall skipifsilent diff --git a/building/macOS/build_macos.sh b/building/macOS/build_macos.sh new file mode 100644 index 0000000..1f160ef --- /dev/null +++ b/building/macOS/build_macos.sh @@ -0,0 +1,29 @@ +#!/usr/bin/env bash + +echo "Building maacOS target ..." + +echo "Installing requirements ..." +pip install -r requirements.txt +pip install nuitka imageio + +echo "Building with Nuitka ..." +python -m nuitka app.py \ + --standalone \ + --follow-imports \ + --show-modules \ + --assume-yes-for-downloads \ + --disable-console \ + --enable-plugin=pyside6 \ + --include-qt-plugins=sensible,styles,qml,multimedia \ + --include-data-files=./artemis/resources.py=./artemis/resources.py \ + --include-data-files=./config/qtquickcontrols2.conf=./config/qtquickcontrols2.conf \ + --include-data-files=./building/Linux/create_shortcut.sh=./create_shortcut.sh \ + --macos-create-app-bundle \ + --macos-app-icon=images/artemis_icon.ico \ + --macos-signed-app-name=com.AresValley.Artemis \ + --macos-app-name=Artemis \ + --macos-app-mode=gui \ + --macos-sign-identity=ad-hoc \ + --macos-app-version=4.0.0 + +echo "Building Linux target finished." diff --git a/config/qtquickcontrols2.conf b/config/qtquickcontrols2.conf new file mode 100644 index 0000000..0870c13 --- /dev/null +++ b/config/qtquickcontrols2.conf @@ -0,0 +1,7 @@ +[Controls] +style=Material + +[Material] +variant=Dense +theme=System +accent=Green diff --git a/docs/acf_analysis.md b/docs/acf_analysis.md new file mode 100644 index 0000000..8fd6902 --- /dev/null +++ b/docs/acf_analysis.md @@ -0,0 +1,62 @@ +# Autocorrelation Function (ACF) + +## Theoretical Introduction + +Correlation functions are valuable mathematical tools utilized across various scientific disciplines, including engineering, physics, and chemistry. The cross-correlation function, commonly defined as a sliding inner (dot) product, quantifies the similarity between two signals as a function of a temporal shift applied to one of them: + +$$ +\left[ k*l \right]\equiv \int_{-\infty}^{+\infty}k^{*}(t)l(t+\tau)dt +$$ + +where $k$ and $l$ are two general non-discrete functions without discontinuity, $k^{*}$ is the complex conjugate of $k$ and $\tau$ is the lag (time delay for signal analysis). This representation is closely related to the convolution theorem by the following relationship: + +$$ +k(t)*l(t)\equiv k^{*}(-t)*l(t) +$$ + +In our case, the signal must be compared with itself to identify periodic patterns or detect anomalous high degrees of similarity within a given time interval. To achieve this objective, we can employ the Autocorrelation Function (ACF), which is essentially the cross-correlation of a signal with itself, where $k(t)=l(t)$. The following equation defines the ACF, derived from a straightforward modification of the initial equation: + +$$ +\left[ k*k \right](\tau)\equiv \int_{-\infty}^{+\infty}k^{*}(t)k(t+\tau)dt +$$ + +Within a discrete data set composed by $Y(t)$ records we can easily calculate autocorrelation from: + +$$ +\rho_{\tau}=\frac{\sum_{i=1}^{N-\tau}(Y_i-\bar{Y})(Y_{i+\tau}-\bar{Y})}{\sum_{i=1}^{N}(Y_i-\bar{Y})^2} +$$ + +where $Y_{i+τ}$ is a lagged data by $τ$ of $Y_i$ and $\bar{Y}$ is the average value of the original data set. Entire denominator is used to keep the normalization condition, indeed ρτ can assume a value between -1 (exact anticorrelation) and +1 (exact correlation). A complete correlation can be only achieved with a perfect overlap of the analyzed function with it self; the simple way to verify that is when $τ=0$ + + + +## Example: ACF Analysis +### STANAG 4285 + +The first example will be a NATO standard known as STANAG 4285. You can download a .wav sample from HERE. We start to collect some information about the structure of this signal: a good starting point is the official declassified NATO document dated 1989. The main frame structure can be found at **Annex A-3/5** with a graphical view at **Annex A-7**, also reported below: + +* [STANAG 4285 (i)](assets/acf_2.png) +* [STANAG 4285 A-3](assets/acf_3.png) +* [STANAG 4285 A-4](assets/acf_4.png) +* [STANAG 4285 A-5](assets/acf_5.png) +* [STANAG 4285 A-7](assets/acf_6.png) + +!!! note "Summary" + * 1 x 80 bits of synchronization pattern + * 4 x 32 bits of data + * 3 x 16 bits of reference + +Therefore, a full sequence will be composed as the sum of all symbols reported above: 256 symbols recursively transmitted at the ratio of 2400 bauds means a redundancy of 106.66 ms. +To analyze an unknown signal I strongly recommend **Signal Analyzer (SA)**. SA is actually one of the most valuable and priceless software available by Sergey Makarov (Макаров Сергей Михайлович, sadly passed away on 29 May 2012) and it used to perform several tests on data sample coded as .wav or .mp3 file. The signal waterfall is reported below: + + + +When an Autocorrelation function is applied on selected data frame (see above), the result shows a clear recursive pattern with a gap of **106.244 ms** between every peak as expected. An ACF refinement can be done into **WaveForm** windows where we can also notice an identical structure as reported by the specifications + + + + +!!! Success "Summary" + 1. Synchronization pattern is composed by $2400*33.013E-3=79.2\simeq 80$ symbols + 2. Data group contain $2400*13.348E-3=32.0=32$ symbols + 3. Reference sequence is formed by $2400*6.674E-3=16.02\simeq 16$ symbols \ No newline at end of file diff --git a/docs/assets/acf_1.png b/docs/assets/acf_1.png new file mode 100644 index 0000000..b5935ec Binary files /dev/null and b/docs/assets/acf_1.png differ diff --git a/docs/assets/acf_2.png b/docs/assets/acf_2.png new file mode 100644 index 0000000..e291b68 Binary files /dev/null and b/docs/assets/acf_2.png differ diff --git a/docs/assets/acf_3.png b/docs/assets/acf_3.png new file mode 100644 index 0000000..47fa324 Binary files /dev/null and b/docs/assets/acf_3.png differ diff --git a/docs/assets/acf_4.png b/docs/assets/acf_4.png new file mode 100644 index 0000000..a4d1ae0 Binary files /dev/null and b/docs/assets/acf_4.png differ diff --git a/docs/assets/acf_5.png b/docs/assets/acf_5.png new file mode 100644 index 0000000..4f6ff09 Binary files /dev/null and b/docs/assets/acf_5.png differ diff --git a/docs/assets/acf_6.png b/docs/assets/acf_6.png new file mode 100644 index 0000000..57ecae3 Binary files /dev/null and b/docs/assets/acf_6.png differ diff --git a/docs/assets/acf_7.png b/docs/assets/acf_7.png new file mode 100644 index 0000000..3864f91 Binary files /dev/null and b/docs/assets/acf_7.png differ diff --git a/docs/assets/acf_8.png b/docs/assets/acf_8.png new file mode 100644 index 0000000..43dbe1e Binary files /dev/null and b/docs/assets/acf_8.png differ diff --git a/docs/assets/acf_9.png b/docs/assets/acf_9.png new file mode 100644 index 0000000..ac7d8a1 Binary files /dev/null and b/docs/assets/acf_9.png differ diff --git a/docs/assets/artemis_icon.ico b/docs/assets/artemis_icon.ico new file mode 100644 index 0000000..0f2a79f Binary files /dev/null and b/docs/assets/artemis_icon.ico differ diff --git a/docs/assets/artemis_preview.png b/docs/assets/artemis_preview.png new file mode 100644 index 0000000..a0d877e Binary files /dev/null and b/docs/assets/artemis_preview.png differ diff --git a/docs/assets/logo_large_black.svg b/docs/assets/logo_large_black.svg new file mode 100644 index 0000000..d61a5ca --- /dev/null +++ b/docs/assets/logo_large_black.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/assets/logo_large_white.svg b/docs/assets/logo_large_white.svg new file mode 100644 index 0000000..eceadb8 --- /dev/null +++ b/docs/assets/logo_large_white.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/assets/logo_small_black.svg b/docs/assets/logo_small_black.svg new file mode 100644 index 0000000..9b2aece --- /dev/null +++ b/docs/assets/logo_small_black.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/assets/logo_small_white.svg b/docs/assets/logo_small_white.svg new file mode 100644 index 0000000..b69ecb6 --- /dev/null +++ b/docs/assets/logo_small_white.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/assets/sql_schema.webp b/docs/assets/sql_schema.webp new file mode 100644 index 0000000..863c0f6 Binary files /dev/null and b/docs/assets/sql_schema.webp differ diff --git a/docs/build_package.md b/docs/build_package.md new file mode 100644 index 0000000..a3c8639 --- /dev/null +++ b/docs/build_package.md @@ -0,0 +1,51 @@ +# Build Package +Building a distributable package with an executable for Artemis creates a practical solution for end-users, as they can run the application without needing to interact with the terminal and they can easily share the application as a stand-alone package. + +## Requirements +* Python (3.11 or higher) + +!!! info + We assume that Python is already installed on the system and the Artemis source code has been downloaded and extracted. If these prerequisites are not met, please follow steps 1 to 3 in the [run from source section](run_from_source.md). + +!!! warning "Cross-Compilation" + To generate standalone packages, an operating system that matches the target OS must be used, as Nuitka does not support cross-compilation. For example: you cannot build binaries on Windows that work on Linux or macOS. + +## :simple-windows: Windows + +### Procedure + +1. Open a PowerShell terminal in the main Artemis folder and execute the following command to start the build process: + + ``` + .\building\Windows\build_windows.ps1 + ``` + +2. Wait for the build process to complete. This may take a few minutes depending on your system's performance. Once the process finishes, check the `artemis.dist/` directory: it will contain the stand-alone software with the `artemis.exe` executable. + +--- + +## :simple-linux: Linux + +### Procedure + +1. Open a terminal in the main Artemis folder and execute the following command to start the build process: + ``` + . ./building/Linux/build_linux.sh + ``` + +2. Wait for the build process to complete. This may take a few minutes depending on your system's performance. Once the process finishes, check the `artemis.dist/` directory: it will contain the stand-alone software with the `app.bin` executable. +3. If you wish to create a shortcut, follows the procedure in the [installation section](installation.md/#create-a-shortcut) + +--- + +## :simple-apple: Mac OS + +!!! warning + The support for the macOS compiled version of the program is temporarily limited due to a lack of machines for extensive testing. Feel free to contribute by reporting any issues you encounter by [opening an Issue](https://github.com/AresValley/Artemis/issues). + +### Procedure + +1. Open a terminal in the main Artemis folder and execute the following command to start the build process: + ``` + . ./building/macOS/build_macos.sh + ``` diff --git a/docs/contribute.md b/docs/contribute.md new file mode 100644 index 0000000..fda5cf2 --- /dev/null +++ b/docs/contribute.md @@ -0,0 +1,37 @@ +# Contribute +Artemis is an open source project an every contribution, no matter how small, is valuable and greatly appreciated. Don't worry about getting everything perfect, we are happy to work with you on your contribution and help you along the way. This guide will help you get started by outlining various ways you can contribute. + + + +- :material-bug: __Spot a bug?__ + + --- + + Open an issue (or pull request) and let us know the problem you faced (or you're working on) + + [:octicons-arrow-right-24: Open an Issue](https://github.com/AresValley/Artemis/issues) + +- :material-source-fork: __Fork the repository__ + + --- + + Create your own copy of the codebase that you can modify and submit pull requests from. + + + [:octicons-arrow-right-24: Fork the repo](https://github.com/AresValley/Artemis) + +- :material-lightbulb-on: __Ideas?__ + + --- + + Idea for a new feature? Open an issue on the project's GitHub repository to describe your proposal in detail. + + [:octicons-arrow-right-24: Open an Issue](https://github.com/AresValley/Artemis/issues) + +- :material-heart: __Spreading the word!__ + + --- + + Do you like Artemis? Don't forgeto to share it with your network and your friends! + +diff --git a/docs/credits.md b/docs/credits.md new file mode 100644 index 0000000..cf3770d --- /dev/null +++ b/docs/credits.md @@ -0,0 +1,76 @@ +# License & Credits + +## License +Artemis is maintained by Marco Dalla Tiezza and released under the [GPLv3](https://github.com/AresValley/Artemis/blob/master/LICENSE) license. + +## Credits +* **Marco Dalla Tiezza** - *Artemis I-II-IV developer, DB parsing, Website* +* [**Alessandro Ceccato**](https://github.com/alessandro90 "GitHub profile") - *Artemis III lead developer* +* **Paolo Romani (IZ1MLL)** - *Lead β Tester, RF specialist* +* **Carl Colena** - *Sigidwiki admin, β Tester, Signals expert* +* [**Marco Bortoli**](https://github.com/marbort "GitHub profile") - *macOS deployment, β Tester* +* [**Eric Wiessner (KI7POL)**](https://github.com/WheezyE "GitHub profile") - *ARM port (Raspberry Pi3B+ and Pi4B)* +* [**Pierpaolo Pravatto**](https://github.com/ppravatto "GitHub profile") - *Wiki page, β Tester* +* [**Francesco Capostagno**](https://github.com/fcapostagno "GitHub profile"), **Luca**, **Pietro** - *β Tester* + +## Donators + +* Eric Hahn +* Alan Lawrence +* Diego Gil Fernandez +* Torsten Teichert +* Charles Preston +* Brad Hein +* Paolo Romani +* Michelle Corbani +* Martin van Duinen +* Valentino Zardi +* Emmanuel Fabre +* Oscar Nilsson +* Pierre Declercq +* Detlef Jahn +* Oliver Schellenberg +* Stephane Imbertone +* Roel Ketelaars +* Timothy Ehrhart +* George Mager +* Gerhard Amon +* Gerald Schmidt +* Carlos Rocha +* Joshua Frohberg +* Bill Riches +* Jeffrey Krehbiel +* Володимир Багмет +* Philip Hamlin +* David Davies +* Nigel P. Lawrence +* Marco Rissi (PP5ZX) +* Martin van Duinen +* Alex Diamantopulo +* Joseph Winter +* Mark Bender +* Rolf Gerhardt +* Denese Harris +* Benjamin Steele +* Alexander Irmscher +* Jonathan Chang +* Torsten Lipke +* Massimo Petrantoni +* William Arcand +* Jon Carp +* Robert Crone +* William Houston +* Richard Quasne +* Tom Krugliakov +* Francisco Neira Basso +* Alistair Macrae +* Kevin Arburn +* Marek Barłóg +* Gabriel Glösmann +* Corbin Williams +* Ton Machielsen +* Ivan Rancic +* Alipio Fernandez +* Matt Eisele +* Martin Dudel +* Harald Geier diff --git a/docs/db_acf.md b/docs/db_acf.md new file mode 100644 index 0000000..0a04f87 --- /dev/null +++ b/docs/db_acf.md @@ -0,0 +1,25 @@ +# ACF +The table contains 4 columns explained below. + +!!! example + A technical explanation on how autocorrelation function works along with a practical example is reported [HERE](acf_analysis.md) + +## ACF_ID +`INTEGER` :material-key-outline:{ title="Primary key" } :material-upload-outline:{ title="Auto-increment" } + +This is a unique identification number for each entry that is assigned during the creation of a new ACF. It is auto-incrementing and is not replaced in the event of deletion. + +## SIG_ID +`INTEGER` :material-axis-arrow:{ title="Foreign key" } + +This is a direct reference to the specific signal associated with the ACF. It links to the primary key of the [Signals](db_signals.md) table that holds detailed information about the signals. + +## VALUE +`FLOAT` + +The autocorrelation time expressed in ms. + +## DESCRIPTION +`TEXT` + +The short description is used to explain the details about the autocorrelation value, e.g. `Frame`, `Superframe`, etc. diff --git a/docs/db_bandwidth.md b/docs/db_bandwidth.md new file mode 100644 index 0000000..63c4500 --- /dev/null +++ b/docs/db_bandwidth.md @@ -0,0 +1,22 @@ +# Bandwidth +The table contains 4 columns explained below. + +## BAND_ID +`INTEGER` :material-key-outline:{ title="Primary key" } :material-upload-outline:{ title="Auto-increment" } + +This is a unique identification number for each entry that is assigned during the creation of a new bandwidth. It is auto-incrementing and is not replaced in the event of deletion. + +## SIG_ID +`INTEGER` :material-axis-arrow:{ title="Foreign key" } + +This is a direct reference to the specific signal associated with the bandwidth. It links to the primary key of the [Signals](db_signals.md) table that holds detailed information about the signals. + +## VALUE +`INTEGER` + +The bandwidth in Hz expressed as an integer. + +## DESCRIPTION +`TEXT` + +The short description is used to explain the purpose of the bandwidth and any other useful details. diff --git a/docs/db_cat_label.md b/docs/db_cat_label.md new file mode 100644 index 0000000..b7cd591 --- /dev/null +++ b/docs/db_cat_label.md @@ -0,0 +1,12 @@ +# Category Label +This table contains only the name of the category/tag. The table contains 2 columns explained below. + +## CLB_ID +`INTEGER` :material-key-outline:{ title="Primary key" } :material-upload-outline:{ title="Auto-increment" } + +This is a unique identification number for each entry that is assigned during the creation of a new category tag. It is auto-incrementing and is not replaced in the event of deletion. + +## VALUE +`TEXT` + +The name of the category/tag expressed as a string. diff --git a/docs/db_category.md b/docs/db_category.md new file mode 100644 index 0000000..823195b --- /dev/null +++ b/docs/db_category.md @@ -0,0 +1,17 @@ +# Category +The primary function of this table is to facilitate the classification of the signal by assigning it to its appropriate family or category. Can be used with any tag. The table contains 3 columns explained below. + +## CAT_ID +`INTEGER` :material-key-outline:{ title="Primary key" } :material-upload-outline:{ title="Auto-increment" } + +This is a unique identification number for each entry that is assigned during the creation of a new category/tag. It is auto-incrementing and is not replaced in the event of deletion. + +## SIG_ID +`INTEGER` :material-axis-arrow:{ title="Foreign key" } + +This is a direct reference to the specific signal associated with the category. It links to the primary key of the [Signals](db_signals.md) table that holds detailed information about the signals. + +## CLB_ID +`INTEGER` :material-axis-arrow:{ title="Foreign key" } + +This is a direct reference to the specific **category label** associated with the category. It links to the primary key of the [Category Label](db_cat_label.md) table that holds the name of the category. diff --git a/docs/db_frequency.md b/docs/db_frequency.md new file mode 100644 index 0000000..1596ace --- /dev/null +++ b/docs/db_frequency.md @@ -0,0 +1,22 @@ +# Frequency +The table contains 4 columns explained below. + +## FREQ_ID +`INTEGER` :material-key-outline:{ title="Primary key" } :material-upload-outline:{ title="Auto-increment" } + +This is a unique identification number for each entry that is assigned during the creation of a new frequency. It is auto-incrementing and is not replaced in the event of deletion. + +## SIG_ID +`INTEGER` :material-axis-arrow:{ title="Foreign key" } + +This is a direct reference to the specific signal associated with the frequency. It links to the primary key of the [Signals](db_signals.md) table that holds detailed information about the signals. + +## VALUE +`INTEGER` + +The freqeuncy in Hz expressed as an integer. + +## DESCRIPTION +`TEXT` + +The short description is used to explain the purpose of the bandwidth and any other useful details. diff --git a/docs/db_info.md b/docs/db_info.md new file mode 100644 index 0000000..ea4459a --- /dev/null +++ b/docs/db_info.md @@ -0,0 +1,28 @@ +# Info +This is the database meta table and contains 4 columns explained below. + +## NAME +`TEXT` + +This is the name of the database. + +## DATA +`TEXT` + +The creation date when the database has been initialised. + +## VERSION +`INTEGER` + +A simple integer to denote the database version. + +## EDITABLE +`INTEGER` + +This field should serve as a writing protection on the database. + +* **0**: read-only database +* **1**: database can be edited with no restrictions + +!!! example "Experimental" + This feature is experimental and not yet implemented. diff --git a/docs/db_location.md b/docs/db_location.md new file mode 100644 index 0000000..c94f9f4 --- /dev/null +++ b/docs/db_location.md @@ -0,0 +1,22 @@ +# Location +This is the location where the signal is distributed/received. Avoid the usage of the precise location of the TX station or very small town (very rare). It's a good habit to use **nations/continents** or special location (like `Worldwide`). The table contains 4 columns explained below. + +## LOC_ID +`INTEGER` :material-key-outline:{ title="Primary key" } :material-upload-outline:{ title="Auto-increment" } + +This is a unique identification number for each entry that is assigned during the creation of a new location. It is auto-incrementing and is not replaced in the event of deletion. + +## SIG_ID +`INTEGER` :material-axis-arrow:{ title="Foreign key" } + +This is a direct reference to the specific signal associated with the location. It links to the primary key of the [Signals](db_signals.md) table that holds detailed information about the signals. + +## VALUE +`TEXT` + +The location expressed as a string. + +## DESCRIPTION +`TEXT` + +The short description is used to explain further details about the location. diff --git a/docs/db_mode.md b/docs/db_mode.md new file mode 100644 index 0000000..b0cc66b --- /dev/null +++ b/docs/db_mode.md @@ -0,0 +1,22 @@ +# Mode +This field reports the way how a signals has been decoded during the reception. The table contains 4 columns explained below. + +## MOD_ID +`INTEGER` :material-key-outline:{ title="Primary key" } :material-upload-outline:{ title="Auto-increment" } + +This is a unique identification number for each entry that is assigned during the creation of a new mode. It is auto-incrementing and is not replaced in the event of deletion. + +## SIG_ID +`INTEGER` :material-axis-arrow:{ title="Foreign key" } + +This is a direct reference to the specific signal associated with the modulation. It links to the primary key of the [Signals](db_signals.md) table that holds detailed information about the signals. + +## VALUE +`TEXT` + +The mode expressed as a string. + +## DESCRIPTION +`TEXT` + +The short description is used to explain the purpose of the mode and any other useful details. diff --git a/docs/db_modulation.md b/docs/db_modulation.md new file mode 100644 index 0000000..ce9f19a --- /dev/null +++ b/docs/db_modulation.md @@ -0,0 +1,22 @@ +# Modulation +Modulation refers to the method by which information is encoded into the main signal (carrier). This process involves altering various properties of the carrier signal, such as amplitude, frequency, or phase. Multiple modulation techniques can be employed, and a TX station has the capability to utilize different modulation schemes. The table contains 4 columns explained below. + +## MDL_ID +`INTEGER` :material-key-outline:{ title="Primary key" } :material-upload-outline:{ title="Auto-increment" } + +This is a unique identification number for each entry that is assigned during the creation of a new modulation. It is auto-incrementing and is not replaced in the event of deletion. + +## SIG_ID +`INTEGER` :material-axis-arrow:{ title="Foreign key" } + +This is a direct reference to the specific signal associated with the modulation. It links to the primary key of the [Signals](db_signals.md) table that holds detailed information about the signals. + +## VALUE +`TEXT` + +The modulation expressed as a string. + +## DESCRIPTION +`TEXT` + +The short description is used to explain the purpose of the modulation and any other useful details. diff --git a/docs/db_overview.md b/docs/db_overview.md new file mode 100644 index 0000000..c2c72f4 --- /dev/null +++ b/docs/db_overview.md @@ -0,0 +1,8 @@ +# Database + +With the release of Artemis 4, we have made a significant upgrade in our data management system by transitioning from a CSV file to a full relational SQL database. This change brings a multitude of advantages that enhance the efficiency, scalability, and reliability of our system. In the following sections, we will explore, table by table, the structure of the new database. + + + + + diff --git a/docs/db_signals.md b/docs/db_signals.md new file mode 100644 index 0000000..d4f3636 --- /dev/null +++ b/docs/db_signals.md @@ -0,0 +1,28 @@ +# Signals +This is the main table and contains 4 columns explained below. + +## SIG_ID +`INTEGER` :material-key-outline:{ title="Primary key" } :material-upload-outline:{ title="Auto-increment" } + +This is a unique identification number for each entry that is assigned during the creation of a signal. It is auto-incrementing and is not replaced in the event of signal deletion. + +## NAME +`TEXT` + +The name of the signal. A simple string that describes in short the analyzed signal. Special characters are allowed. + +## DESCRIPTION +`TEXT` + +The short description is used to explain the purpose of the signal and some other useful details. + +!!! tip + The DESCRIPTION field supports **Markdown**, a simple markup language for creating rich text using plain text. Headers, emphasis, lists, links, code blocks and many more features for advanced text formtting. [Markdown Basic Syntax :simple-markdown:](https://www.markdownguide.org/basic-syntax/) + +## URL +`TEXT` + +The sigidwiki (SigID) URL of the selected signal. This is a direct connection to the online database where further details of the signal are collected. + +!!! info + **Internal Use Only** This field is for the SigID database and not intended for user viewing or editing. Personal URLs can be stored in the signal description. diff --git a/docs/index.md b/docs/index.md new file mode 100644 index 0000000..c5f0420 --- /dev/null +++ b/docs/index.md @@ -0,0 +1,11 @@ +--- +title: Documentation +--- +# + ++ {width="400"} + {width="400"} +
+ +**Artemis** is a software designed to assist **radio frequency (RF) signal identification and storage**. It simplifies real-time spectrum analysis by leveraging one of the most extensive and community-driven databases, containing nearly **500 recognized signals**. This comprehensive software solution allows users to collect RF signals with specific parameters such as frequency, bandwidth, modulation, etc. Users can also store spectrum waterfalls, audio samples, and all types of documents for future reference. Artemis provides a robust platform to manage a wide range of RF data with precision and ease. diff --git a/docs/installation.md b/docs/installation.md new file mode 100644 index 0000000..0406119 --- /dev/null +++ b/docs/installation.md @@ -0,0 +1,38 @@ +# Installation + +**Requirements:** + +* **Windows** 8 or later +* **Linux** Ubuntu 20.04+ / Mint 20+ / Fedora 32+ and many other +* **macOS** 11+ (Big Sur or later) + +## :simple-windows: Windows +Just download the installer and follow the guided procedure to complete the installation process. + +--- + +## :simple-linux: Linux +Download and extract the tarball archive in a folder of your choice and run the executable `app.bin`. + +### Create a Shortcut + +1. To create a direct shortcut (in the main menu) launch the bash script in the terminal with the command: + + ``` + . create_shortcut.sh + ``` + +This script will: + +- Set the correct read/write privileges of the Artemis folder +- Create the artemis.desktop file (shortcut) in /home/$USER/.local/share/applications +- Move the Artemis icon file to /usr/share/icons + +--- + +## :simple-apple: Mac OS +The support for the macOS compiled version of the program is temporarily limited due to a lack of machines for extensive testing. To use Artemis on a macOS device, you have the following options: + +* **Run the program directly from the source:** Follow the instructions provided in [this chapter](run_from_source.md) to launch the program from the source code. +* **Compile the Artemis 4 binaries on your machine:** In this case, you can contribute by reporting any issues you encounter by [opening an Issue](https://github.com/AresValley/Artemis/issues). +* **Use the last available compiled version (3.2.1):** Although this version is no longer officially supported, it remains available for use. \ No newline at end of file diff --git a/docs/javascripts/katex.js b/docs/javascripts/katex.js new file mode 100644 index 0000000..eb5813a --- /dev/null +++ b/docs/javascripts/katex.js @@ -0,0 +1,10 @@ +document$.subscribe(({ body }) => { + renderMathInElement(body, { + delimiters: [ + { left: "$$", right: "$$", display: true }, + { left: "$", right: "$", display: false }, + { left: "\\(", right: "\\)", display: false }, + { left: "\\[", right: "\\]", display: true } + ], + }) + }) diff --git a/docs/run_from_source.md b/docs/run_from_source.md new file mode 100644 index 0000000..36b3b20 --- /dev/null +++ b/docs/run_from_source.md @@ -0,0 +1,29 @@ +# Run from source code +Running Artemis directly from the source code using the Python interpreter is considered the most reliable and least problematic method. This approach ensures maximum compatibility and reduces the likelihood of encountering runtime issues. However, it is also the less practical option, as it requires the use of the terminal for the execution. + +## Requirements +* Python (3.11 or higher) + +## Procedure + +1. Download and install Python (3.11 or higher) from the official [website](https://www.python.org/downloads/). Be sure to select the flag `Add Python 3.x to PATH` during the first part of the installation. + +2. Download Artemis source code from the [latest release](https://github.com/AresValley/Artemis/releases) in the GitHub repository. + +3. Extract the downloaded archive. + +4. Open the terminal in Artemis folder and install the required Python libraries with PIP: + ``` + pip install -r requirements.txt --user + ``` + +5. Launch Artemis: + ``` + python app.py + ``` + +!!! example "Note for Developers" + Whenever modifications are made to any **.qml** file or any assets (such as images, icons, etc.), it is essential to recompile the **resource.py** file to ensure that the changes are reflected in the application. To achieve this, execute the following command: + ``` + pyside6-rcc ./artemis.qrc -o artemis/resources.py + ``` diff --git a/docs/sigid.md b/docs/sigid.md new file mode 100644 index 0000000..374c36d --- /dev/null +++ b/docs/sigid.md @@ -0,0 +1,45 @@ +# SigID Wiki Database +Artemis serves as a valuable resource for both personal signal collection and leveraging a vast repository of pre-identified signals. This software application allows users to curate their own collections, but its true strength lies in its integration with a comprehensive database of known signals. This database is directly sourced from the [Signal Identification Wiki](https://www.sigidwiki.com/wiki/Signal_Identification_Guide), an open-source resource collaboratively maintained by a global community of radio enthusiasts. + +!!! tip "Database Revision" + For quality control purposes, the database undergoes a rigorous review process before integration into Artemis. This review adheres to established guidelines (**DIANA** crawler, not yet released), ensuring the accuracy and completeness of the information presented to users. The specifics of this review process are outlined in the following section. + +## Modulation +A good practise (reported also on ) is to write the primary type of modulation (if known) and not all the possible variants. A practical example is reported on [Signal Identification Wiki](https://www.sigidwiki.com/wiki/Signal_Identification_Guide): there is no need to write **8-PSK** or **QPSK**, **PSK** is enough. The Artemis SigID database is provided without any modulation variants included. The recognized modulations are listed below: + +### Analog +* **AM:** Amplitude Modulation +* **FM:** Frequency Modulation +* **PM:** Phase Modulation +* **LSB:** Lower Sideband +* **USB:** Upper Sideband +* **VSB:** Vestigial Sideband +* **CW:** Continuous Wave + +### Digital +* **QAM:** Quadrature Amplitude Modulation +* **PSK:** Phase-Shift Keying +* **FSK:** Frequency-Shift Keying +* **ASK:** Amplitude-Shift Keying +* **MSK:** Minimum-Shift Keying +* **IFK:** Incremental Frequency Keying +* **OOK:** On-Off Keying +* **FDM:** Frequency-Division Multiplexing +* **BOC:** Binary Offset Carrier Modulation +* **CDMA:** Code Division Multiple Access +* **TDMA:** Time Division Multiple Access +* **FBMC:** Filter Bank Multi Carrier +* **UFMC:** Universal Filtered Multi Carrier +* **PCM:** Pulse Code Modulation +* **PPM:** Pulse Position Modulation +* **FMCW:** Frequency-Modulated Continuous Wave +* **Pulse:** Pulse + +### Spread Spectrum +* **CSS:** Chirp Spread Spectrum +* **DSSS:** Direct Sequence Spread Spectrum +* **FHSS:** Frequency Hopping Spread Spectrum +* **THSS:** Time Hopping Spread Spectrum + +## Locations +Locations are either countries or special token (`Worldwide`, `Europe`, etc.) . Precise location of the TX station, towns and cities are converted to their respective countries. diff --git a/documentation/ArtemisLogoSmall.png b/documentation/ArtemisLogoSmall.png deleted file mode 100644 index c0b3802..0000000 Binary files a/documentation/ArtemisLogoSmall.png and /dev/null differ diff --git a/documentation/apple.png b/documentation/apple.png deleted file mode 100644 index c3ada4c..0000000 Binary files a/documentation/apple.png and /dev/null differ diff --git a/documentation/linux.png b/documentation/linux.png deleted file mode 100644 index 8f793d0..0000000 Binary files a/documentation/linux.png and /dev/null differ diff --git a/documentation/win.png b/documentation/win.png deleted file mode 100644 index 0b03a45..0000000 Binary files a/documentation/win.png and /dev/null differ diff --git a/images/artemis_icon.ico b/images/artemis_icon.ico new file mode 100644 index 0000000..0f2a79f Binary files /dev/null and b/images/artemis_icon.ico differ diff --git a/images/artemis_icon.svg b/images/artemis_icon.svg new file mode 100644 index 0000000..eed22e4 --- /dev/null +++ b/images/artemis_icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/images/icons/abort.svg b/images/icons/abort.svg new file mode 100644 index 0000000..55ffa79 --- /dev/null +++ b/images/icons/abort.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/images/icons/add.svg b/images/icons/add.svg new file mode 100644 index 0000000..1d4fd82 --- /dev/null +++ b/images/icons/add.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/images/icons/browser.svg b/images/icons/browser.svg new file mode 100644 index 0000000..1f0f09c --- /dev/null +++ b/images/icons/browser.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/images/icons/delete.svg b/images/icons/delete.svg new file mode 100644 index 0000000..3fe3248 --- /dev/null +++ b/images/icons/delete.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/images/icons/dialog_error.svg b/images/icons/dialog_error.svg new file mode 100644 index 0000000..fd9e713 --- /dev/null +++ b/images/icons/dialog_error.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/images/icons/dialog_info.svg b/images/icons/dialog_info.svg new file mode 100644 index 0000000..1d470f7 --- /dev/null +++ b/images/icons/dialog_info.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/images/icons/dialog_quest.svg b/images/icons/dialog_quest.svg new file mode 100644 index 0000000..a91c0ac --- /dev/null +++ b/images/icons/dialog_quest.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/images/icons/dialog_warn.svg b/images/icons/dialog_warn.svg new file mode 100644 index 0000000..1d54167 --- /dev/null +++ b/images/icons/dialog_warn.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/images/icons/documents.svg b/images/icons/documents.svg new file mode 100644 index 0000000..48d379d --- /dev/null +++ b/images/icons/documents.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/images/icons/load.svg b/images/icons/load.svg new file mode 100644 index 0000000..e0c1be6 --- /dev/null +++ b/images/icons/load.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/images/icons/open.svg b/images/icons/open.svg new file mode 100644 index 0000000..b6bddfc --- /dev/null +++ b/images/icons/open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/images/icons/player_loop.svg b/images/icons/player_loop.svg new file mode 100644 index 0000000..1b84492 --- /dev/null +++ b/images/icons/player_loop.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/images/icons/player_pause.svg b/images/icons/player_pause.svg new file mode 100644 index 0000000..43c8d45 --- /dev/null +++ b/images/icons/player_pause.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/images/icons/player_play.svg b/images/icons/player_play.svg new file mode 100644 index 0000000..96dffad --- /dev/null +++ b/images/icons/player_play.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/images/icons/player_stop.svg b/images/icons/player_stop.svg new file mode 100644 index 0000000..ee40986 --- /dev/null +++ b/images/icons/player_stop.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/images/icons/rename.svg b/images/icons/rename.svg new file mode 100644 index 0000000..5c6f90a --- /dev/null +++ b/images/icons/rename.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/images/icons/save.svg b/images/icons/save.svg new file mode 100644 index 0000000..d45c316 --- /dev/null +++ b/images/icons/save.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/images/spectrum_not_available.svg b/images/spectrum_not_available.svg new file mode 100644 index 0000000..7a228bb --- /dev/null +++ b/images/spectrum_not_available.svg @@ -0,0 +1,31 @@ + + + diff --git a/mkdocs.yml b/mkdocs.yml new file mode 100644 index 0000000..12a5604 --- /dev/null +++ b/mkdocs.yml @@ -0,0 +1,74 @@ +site_name: ARTEMIS +repo_url: https://github.com/AresValley/Artemis + +theme: + name: material + favicon: assets/artemis_icon.ico + logo: assets/logo_small_white.svg + font: + text: Roboto + + palette: + - scheme: default + primary: black + toggle: + icon: material/lightbulb + name: Switch to dark mode + - scheme: slate + primary: black + toggle: + icon: material/lightbulb-outline + name: Switch to light mode + + features: + content.code.copy + content.tooltips + +markdown_extensions: + - pymdownx.arithmatex: + generic: true + - admonition + - pymdownx.details + - pymdownx.superfences + - tables + - abbr + - attr_list + - pymdownx.snippets + - md_in_html + - pymdownx.emoji: + emoji_index: !!python/name:material.extensions.emoji.twemoji + emoji_generator: !!python/name:material.extensions.emoji.to_svg + +extra_javascript: + - javascripts/katex.js + - https://unpkg.com/katex@0/dist/katex.min.js + - https://unpkg.com/katex@0/dist/contrib/auto-render.min.js + +extra_css: + - https://unpkg.com/katex@0/dist/katex.min.css + +nav: + - Welcome: 'index.md' + - Getting Started: + - Installation: 'installation.md' + - Run from source: 'run_from_source.md' + - Build Package: 'build_package.md' + - Database: + - 'Overview': 'db_overview.md' + - Structure: + - 'Info': 'db_info.md' + - 'Signals': 'db_signals.md' + - 'Frequency': 'db_frequency.md' + - 'Bandwidth': 'db_bandwidth.md' + - 'Modulation': 'db_modulation.md' + - 'Mode': 'db_mode.md' + - 'Location': 'db_location.md' + - 'Category': 'db_category.md' + - 'Category Label': 'db_cat_label.md' + - 'ACF': 'db_acf.md' + - SigID: 'sigid.md' + - Example: + - ACF Analysis: 'acf_analysis.md' + - Contribute: 'contribute.md' + - Changelog: https://github.com/AresValley/Artemis/blob/master/CHANGELOG.md + - License & Credits: 'credits.md' diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..6a5b13c --- /dev/null +++ b/requirements.txt @@ -0,0 +1,3 @@ +PySide6==6.7.1 +requests==2.32.2 +packaging==24.0 diff --git a/requirements/requirements.txt b/requirements/requirements.txt deleted file mode 100644 index 1a04aaa..0000000 --- a/requirements/requirements.txt +++ /dev/null @@ -1,8 +0,0 @@ -numpy>=1.23.1 -pandas>=1.4.3 -certifi>=2022.6.15 -aiohttp>=3.8.1 -urllib3>=1.26.9 -pygame>=2.1.2 -QtAwesome>=1.1.1 -PyQt5>=5.15.7 diff --git a/spec_files/Linux/Artemis.spec b/spec_files/Linux/Artemis.spec deleted file mode 100644 index 8b966e8..0000000 --- a/spec_files/Linux/Artemis.spec +++ /dev/null @@ -1,45 +0,0 @@ -# -*- mode: python -*- - -import glob -import os - - -block_cipher = None - - -SRC_PATH = "../../src/" - -data_file = [ - (f, '.') for f in glob.glob(SRC_PATH + '*.[pu][yi]') - if f.split('/')[-1] != "artemis.py" and f.split('/')[-1] != "updater.py" -] -data_file.append((SRC_PATH + 'cacert.pem', '.')) - -a = Analysis([SRC_PATH + 'artemis.py'], # noqa: 821 - pathex=[os.getcwd()], - binaries=[], - datas=data_file, - hiddenimports=[], - hookspath=[], - runtime_hooks=[], - excludes=[], - win_no_prefer_redirects=False, - win_private_assemblies=False, - cipher=block_cipher, - noarchive=False) -pyz = PYZ(a.pure, # noqa: 821 - a.zipped_data, - cipher=block_cipher) -exe = EXE(pyz, # noqa: 821 - a.scripts, - a.binaries, - a.zipfiles, - a.datas, - [], - name='Artemis', - debug=False, - bootloader_ignore_signals=False, - strip=False, - upx=True, - runtime_tmpdir=None, - console=False) diff --git a/spec_files/Linux/Artemis_onedir.spec b/spec_files/Linux/Artemis_onedir.spec deleted file mode 100644 index 0978da9..0000000 --- a/spec_files/Linux/Artemis_onedir.spec +++ /dev/null @@ -1,49 +0,0 @@ -# -*- mode: python -*- - -import glob -import os - - -block_cipher = None - - -SRC_PATH = "../../src/" - -data_file = [ - (f, '.') for f in glob.glob(SRC_PATH + '*.[pu][yi]') - if f.split('/')[-1] != "artemis.py" -] -data_file.append((SRC_PATH + 'cacert.pem', '.')) - -a = Analysis([SRC_PATH + 'artemis.py'], # noqa: 821 - pathex=[os.getcwd()], - binaries=[], - datas=data_file, - hiddenimports=[], - hookspath=[], - runtime_hooks=[], - excludes=[], - win_no_prefer_redirects=False, - win_private_assemblies=False, - cipher=block_cipher, - noarchive=False) -pyz = PYZ(a.pure, # noqa: 821 - a.zipped_data, - cipher=block_cipher) -exe = EXE(pyz, # noqa: 821 - a.scripts, - [], - exclude_binaries=True, - name='Artemis', - debug=False, - bootloader_ignore_signals=False, - strip=False, - upx=True, - console=False) -coll = COLLECT(exe, # noqa: 821 - a.binaries, - a.zipfiles, - a.datas, - strip=False, - upx=True, - name='Artemis') diff --git a/spec_files/Linux/artemis3.svg b/spec_files/Linux/artemis3.svg deleted file mode 100644 index 7626745..0000000 --- a/spec_files/Linux/artemis3.svg +++ /dev/null @@ -1,39 +0,0 @@ - - - diff --git a/spec_files/Linux/build.sh b/spec_files/Linux/build.sh deleted file mode 100644 index 2f77625..0000000 --- a/spec_files/Linux/build.sh +++ /dev/null @@ -1,42 +0,0 @@ -echo "Build Artemis executable.." - -rm -rf output - -mkdir output -mkdir output/artemis - -pyinstaller Artemis.spec - -mv -v ./dist/Artemis ./output/Artemis -rm -rfv dist build - -echo "Build _ArtemisUpdater.." - -pyinstaller updater.spec - -mv -v ./dist/_ArtemisUpdater ./output/_ArtemisUpdater -rm -rfv dist build - -echo "Create single archives" -cd output - -cp -r ../../../src/themes artemis/themes -rm -f artemis/themes/__current_theme -cp Artemis artemis/Artemis -cp _ArtemisUpdater artemis/_ArtemisUpdater - -tar -czvf Artemis_linux.tar.gz Artemis -C artemis themes -tar -czvf _ArtemisUpdater_linux.tar.gz ./_ArtemisUpdater - -echo "Create full archive for website" - -cp ../artemis3.svg artemis -cp ../create_shortcut.sh artemis - -tar -czvf ArtemisWebDownlaod_linux.tar.gz artemis - -echo "Get size and sha256" -python ../../__get_hash_code.py Artemis_linux.tar.gz _ArtemisUpdater_linux.tar.gz ArtemisWebDownlaod_linux.tar.gz - -cd .. -echo "Done." diff --git a/spec_files/Linux/raspbian_build.sh b/spec_files/Linux/raspbian_build.sh deleted file mode 100644 index cd52ac9..0000000 --- a/spec_files/Linux/raspbian_build.sh +++ /dev/null @@ -1,412 +0,0 @@ -#!/bin/bash - -### Build Artemis for Raspberry Pi (for Raspbian Buster or Raspbian Stretch) -# raspbian_build.sh -# Author: Eric (KI7POL) -# Credits: MarcoDT (testing, trouble-shooting, guidance). Keith (N7ACW) (inspiration). Jason (KM4ACK) (inspiration). -# Version: 0.1 (May 10, 2020) -# Description: Install pre-requisites for building Artemis on Raspberry Pi, then build Artemis from source - -clear -echo "======= Build Artemis for the Raspberry Pi =======" -echo " (Raspbian Buster or Stretch)" -echo -echo "This script will help you build distributable Artemis executable binaries for Raspbian." -echo -echo "We will update your Pi, prepare a virtual environment, then make your Artemis binary." -echo " * We will need about 1.3 GB of storage space." -echo " * This may take anywhere from 14 hours to 45 minutes (faster Raspberry Pi's take less time)" -echo " * PyQt5 pip module installation is the longest step, especially if it must be built from source or build its 'wheel'." -echo -read -n 1 -s -r -p "Press any key to continue (more instructions to follow) ..." -clear - -# Before building an Artemis executable binary (exe) on any Raspberry Pi computers, we need to install some system software and Artemis' pip requirements. Raspberry Pi also comes with "System Python" pre-installed, which will interfere with our building of a compact Artemis exe. This script will assist with installing system software, a clean virtual Python environment (PyEnv virtualenv), and Artemis requirements (Python pip packages), to build Artemis from. This way, Artemis will be built from a fresh virtual Python 3.7.0 installation apart from Raspbian's System Python installation. - -# About 1.3 GB will be needed [size on disk: PyEnv 200 MB, 200 MB virtual build environment, 112 MB of temp files (PyQt5 downloads and build directory, and a 520 MB Artemis output folder after downloading the Artemis signal database]. The output folder will contain three tar.gz archives, two EXE files (Artemis 97-100 MB, depending on Buster or Stretch, and _ArtemisUpdater 49 MB), theme files, audio files, and a database file. The 'artemis' folder or tar.gz files can be distributed to end-users and run on other Raspberry Pi's. Any end-users receiving the EXE files will not need to install Artemis dependencies on their Raspberry Pi's to run the compiled EXE's. The EXE files do not seem to become smaller after running "sudo trim" commands on them. - -# Though it is recommended to build Artemis on the oldest operating system version available to avoid 'GLIBC out of date errors' when our Artemis binary is run on newer OS's, we have found that Raspbian Stretch and Buster are sufficiently different that they require their own builds of Artemis to function without throwing error messages in the Linux terminal. Stretch and Buster also have different installation procedures. This script will detect whether you are running Buster or Stretch and then automatically build a correct Artemis binary for your Raspbian distribution. - -# In case the PyQt5 pip module is not able to be installed on your version of Raspbian or does not work in the future, we have included the option to let the script build and install the old stable PyQt5 pip module. Just set the User-defined variable PYQTVER below to 'old'. NOTE! the "make" process for building a PyQt5 pip module from source can take over 14 hours on a Raspberry Pi 2B, over 12 hours on a Pi 0W, over 3.5 hours on a Pi 3B+, and about 2 hours on a Pi 4B-2GB. Building PyQt5 from source is only recommended if you must do it. If you can install a new (pre-built) PyQt5 module with pip and the wheel module, this script will take MUCH less time to finish (this is the default mode for this script). - - -### User-defined variables -PYTHVER='3.7.0' # Specify a version of Python to install into your PyEnv virtual environment (to build Artemis from). -PYQTVER='new' # Options are 'new' and 'old'. Try forcing 'old' if you get installation errors, but old may take 2-14 more hours (the script will try to run 'old' automatically though if 'new' doesn't work) - -### Static Variables -TMPVAR1=$(tr -d '\0' /dev/null 2>&1 && pwd )" # Store current location of this bash script -BUILDENV="artemis3_python"$PYTHVER"pyqt"$PYQTVER -RPIHARDWARE=${TMPVAR1%" Rev"*} # Extract Pi's name before " Rev", so we don't store the Pi's revision name. -RPIOS=`cut -d "=" -f2- <<< "$TMPVAR2"` # Store 'buster', 'stretch', or something else unknown -TSTART=`date +%s` # Log the start time of the script - -if [[ "$RPIOS" = "stretch" ]]; then - echo - echo "Your operating system version is Raspbian Stretch. Since you are building Artemis on Stretch, your Artemis binary should work great on Stretch, but if you try to run it on Raspbian Buster it will throw minor font and GLIB errors in the console." -elif [[ "$RPIOS" = "buster" ]]; then - echo - echo "Your operating system version is Raspbian Buster. Since you are building Artemis on Buster, your Artemis binary will work great on Buster, but will not run on Raspbian Stretch due to GLIBC out of date errors." -else - echo - echo "WARNING: This script was not able to determine your operating system version (you are not running Raspbian Buster or Raspbian Stretch). We will attempt to prepare the requirements for building Artemis, but we will likely encounter errors with the preparation or build." -fi - -echo -echo "For trouble-shooting, please read the comments inside this script. You can also open an issue in the Ares Valley / Artemis github or ask for assistance on the forums. Please include a link to a pastebin with the contents of your raspbian_build_debug.log file" - -echo -read -n 1 -s -r -p "Press any key to begin ..." -clear - -echo "We will now update your system." -echo "This may take a while if you haven't updated recently." -echo -exec > >(tee "$DIR/raspbian_build_debug.log") 2>&1 # Make a log of this script's output -sudo apt-get update -y -sudo apt-get upgrade -y - -######################################### Install PyEnv ######################################### -### Install pyenv so we can build Artemis from a fresh virtual Python (apart from Raspbian's System Python) - -export PYENV_ROOT="$HOME/.pyenv" # Needed to help this if statement find PyEnv if it's already installed. -export PATH="$PYENV_ROOT/bin:$PATH" # Both of these exports are also needed later in this script. - -if hash pyenv 2>/dev/null; then - echo "Pyenv is already installed, skipping pyenv installation..." >&2 -else - echo "Installing pyenv now..." >&2 - - sudo apt-get install -y make build-essential libssl-dev zlib1g-dev \ - libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev \ - libncursesw5-dev xz-utils tk-dev libffi-dev liblzma-dev python-openssl - - curl https://pyenv.run | bash - - # Pyenv needs to be initialized whenever SHELL is loaded, so we need to add these values to .bashrc - sudo echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc - sudo echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc - sudo echo 'eval "$(pyenv init -)"' >> ~/.bashrc - sudo echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.bashrc -fi - -# Initialize pyenv so this instance of SHELL can find PyEnv (so we don't have to restart SHELL). -eval "$(pyenv init -)" -eval "$(pyenv virtualenv-init -)" - - -######################################### Install Python 3.7.x Inside Pyenv ######################################### -### We will install our Artemis requirements pip modules inside of this virtualenv. - -# Check to see if Python 3.7.x is already installed in pyenv. If so, skip Python 3.7.x installation. -if ! [ -d "/$HOME/.pyenv/versions/$PYTHVER/" ]; then - echo "Installing Python" $PYTHVER "within Pyenv now..." >&2 - env PYTHON_CONFIGURE_OPTS="--enable-shared" pyenv install -v $PYTHVER -else - echo "Python" $PYTHVER "is already installed within Pyenv, skipping Python installation..." >&2 -fi -pyenv global $PYTHVER # Make your python 3.7.0 environment the default whenever "python" is typed (instead of System python) - -### Create our new python virtual environment using Python 3.7.x (we will activate it as soon as we need it) -# Check to see if we've already made a Python 3.7.x virtual environment named (for example) 'artemis3_py3.7.0_pyqtnew' -if ! [ -d "/$HOME/.pyenv/versions/$PYTHVER/envs/$BUILDENV" ]; then - echo 'Creating a Python' $PYTHVER 'virtual environment named' $BUILDENV '...' >&2 - pyenv virtualenv $PYTHVER $BUILDENV -else - echo 'A virtual environment with Python' $PYTHVER 'named' $BUILDENV 'was found. We will install pip modules here...' >&2 -fi - - -###################################### Install Artemis Requirements Into Our Pyenv ###################################### -### When building Artemis for the Raspberry Pi, we must install our Artemis requirements ourselves - without the aid of the 'requirements.txt' file in this Git (though other Linux distros might be able to still use it). This is because the Raspbian pip distro doesn't include the recommended 5.12.2 version of PyQt5, as requested by 'requirements.txt'. Therefore, if we try to install requirements using the recommended "python3.7 -m pip install -r cd ~/Artemis/requirements/requirements.txt" we will error when trying to download PyQt5 and auto-abort before we get to install ANY of the required pip modules. - -### Note that the commands below downloads the pip modules specified in requirements.txt (including building our own PyQt5 5.12.2 from source) and then installs them within our fresh virtual python 3.7.0 environment (thereby avoiding any interference with Raspbian's default System python installation). If you try to install these modules using "sudo python3.7" or "sudo python", however, you will accidentally be installing them into System python (and not into our pristine pyenv virtualenv python 3.7.0 environment). - -pyenv activate $BUILDENV # Activate the new Python 3.7.x virtualenv so we can start installing python pip modules in it - -sudo apt-get install libatlas-base-dev -y # Needed for numpy (on Buster?) -sudo apt-get install libsdl-image1.2-dev libsdl-mixer1.2-dev libsdl-ttf2.0-dev libsdl1.2-dev libsmpeg-dev subversion libportmidi-dev ffmpeg libswscale-dev libavformat-dev libavcodec-dev -y # Needed for pygame on Raspbian Stretch? (not needed for Buster) -sudo apt-get install qt5-default -y # Ensure Qt5 is installed (doesn't come pre-install on Buster for Pi 0-2) - -python3.7 -m pip install --upgrade pip wheel # Necessary for Stretch installations of pandas and numpy -if [[ "$RPIOS" = "stretch" ]]; then - python3.7 -m pip install --upgrade 'setuptools==44.0.0' # This specific version needed for NumPy on Stretch - python3.7 -m pip install 'numpy==1.17.2' --no-cache-dir --no-binary :all: # Needed for Stretch but takes longer -else - python3.7 -m pip install 'numpy==1.17.2' # Works on Buster -fi -python3.7 -m pip install 'pandas>=0.24.2' -python3.7 -m pip install 'certifi>=2019.6.16' -python3.7 -m pip install 'aiohttp>=3.5.4' -python3.7 -m pip install 'urllib3==1.24.3' -python3.7 -m pip install 'pygame>=1.9.6' -python3.7 -m pip install 'QtAwesome>=0.6.0' -if [[ "$PYQTVER" = "new" ]]; then - python3.7 -m pip install PyQt5-sip - echo - echo "WARNING: If PyQt5 needs to build its own wheel from scratch on your system then this step may take anywhere from 2-14 hours (depending on your Raspberry Pi's hardware)." - echo - python3.7 -m pip install PyQt5 -fi - -# Find out if PyQt5 needs to be installed (useful if we already installed it in a previous run of this script, or if the newer PyQt5 version failed to install) -pip list | grep 'PyQt5 ' &> /dev/null -if [ $? == 0 ]; then - echo "PyQt5 is already installed in this Pyenv." -else - echo "Downloading and installing PyQt5 and sip into your Pyenv virtual environment" - - mkdir $DIR/Downloads - cd $DIR/Downloads - wget https://www.riverbankcomputing.com/static/Downloads/sip/4.19.17/sip-4.19.17.tar.gz # Old PyQt5 requires sip - wget https://www.riverbankcomputing.com/static/Downloads/PyQt5/5.12.2/PyQt5_gpl-5.12.2.tar.gz - tar xvfz sip-4.19.17.tar.gz # I chose sip 4.19.17 since it was released the same day as PyQt5 5.12.2. - tar xvfz PyQt5_gpl-5.12.2.tar.gz - - cd $DIR/Downloads - cd sip-4.19.17 - python configure.py --sip-module PyQt5.sip # Pip will list the sip module as "PyQt5-sip", module file is "sip.*so" - if [[ "$RPIHARDWARE" = "Raspberry Pi 3 Model A+" ]] || [[ "$RPIHARDWARE" = "Raspberry Pi 2 Model B" ]] || [[ "$RPIHARDWARE" = "Raspberry Pi 3 Model B" ]] || [[ "$RPIHARDWARE" = "Raspberry Pi 3 Model B+" ]] || [[ "$RPIHARDWARE" = "Raspberry Pi 4 Model B" ]]; then # Only run -j4 on Raspberry Pi computers with four cores - make -j4 - else - make - fi - make install - - cd $DIR/Downloads - cd PyQt5_gpl-5.12.2 - python configure.py --confirm-license --sip-incdir="$DIR/Downloads/sip-4.19.17/siplib" - if [[ "$RPIHARDWARE" = "Raspberry Pi 3 Model A+" ]] || [[ "$RPIHARDWARE" = "Raspberry Pi 2 Model B" ]] || [[ "$RPIHARDWARE" = "Raspberry Pi 3 Model B" ]] || [[ "$RPIHARDWARE" = "Raspberry Pi 3 Model B+" ]] || [[ "$RPIHARDWARE" = "Raspberry Pi 4 Model B" ]]; then # Only run -j4 on Raspberry Pi computers with four cores - echo - echo "WARNING: This step may take anywhere from 1-14 hours, depending on your Raspberry Pi's hardware." - echo - make -j4 - else - make - fi - make install -fi - -# Stretch needs Pyinstaller 3.4 to build Artemis correctly (otherwise sip errors on run). Buster isn't picky. -if [[ "$RPIOS" = "stretch" ]]; then - cd ~/Downloads - wget https://github.com/pyinstaller/pyinstaller/releases/download/v3.4/PyInstaller-3.4.tar.gz - tar -xvf PyInstaller-3.4.tar.gz - cd PyInstaller-3.4/bootloader/ - sudo python ./waf configure --no-lsb all - cd .. - python3.7 setup.py install -else - python3.7 -m pip install pyinstaller -fi - -eval "$(pyenv init -)" # We need to remind SHELL that we just installed pyinstaller exe into our pyenv -eval "$(pyenv virtualenv-init -)" - -######################################### Build Artemis From Our Pyenv ######################################### - -cd $DIR # Change the shell's working directory to the same location as our .spec files. This is a critical step before compiling! (This should put us into ...'/Artemis/spec_files/Linux/', where 'build.sh' and 'Artemis.spec' are located.) - -sudo chmod +x build.sh -./build.sh # The build script builds two Artemis exe's, copies the themes and shortcut-maker files into the output directory, packages everything, and then runs hashes. - -sudo chmod -R 755 output/artemis -sudo rm output/Artemis output/_ArtemisUpdater # We'll just remove these redundant output folders so users don't get confused - -TEND=`date +%s` # Log the end time of the script -TTOTAL=$((TEND-TSTART)) -echo '(Script completed in' $TTOTAL 'seconds)' # Report how long it took to install requirements and build Artemis - - -######################################### Clean Up ######################################### - -pyenv deactivate # The virtualenv may also be deactivated when we close the terminal window -pyenv global system # Set the active Python version back to System Python (instead of PyEnv Python 3.7.x) - -echo -read -p "Would you like to remove the build pre-requisites we installed? (y/n) `echo $'\n '`(Removing these files will free up about 200 MB, but keeping the files will make re-running this script take much less time. We will not delete PyEnv which is another 200 MB, but you can delete its folder manually to remove it if you like.) `echo $'\n> '`" REMOVEFILES -if [ $REMOVEFILES = "y" ] || [ $REMOVEFILES = "Y" ]; then - sudo rm -rf /home/pi/.pyenv/versions/$BUILDENV - sudo rm -rf /home/pi/.pyenv/versions/$PYTHVER/envs/$BUILDENV -fi - -######################################### Notes ######################################### - -### Run Artemis from a shortcut, from File Manager, or with the './Artemis' command in the terminal. Follow the on-screen prompts to download the database and audio files. - -### Other Resources -# Python Virtual Environments https://www.youtube.com/watch?v=N5vscPTWKOk -# Python VirtEnv reduces built EXE file sizes https://stackoverflow.com/questions/47692213/reducing-size-of-pyinstaller-exe -# Setuptools error: "ModuleNotFoundError: No module named 'pkg_resources.py2_warn'" https://github.com/pypa/setuptools/issues/1963 -# Trouble-shooting pyinstaller https://github.com/pyinstaller/pyinstaller/wiki/How-to-Report-Bugs#make-sure-everything-is-packaged-correctly -# Using pyinstaller with venv: https://pyinstaller.readthedocs.io/en/stable/development/venv.html -# Learning Pyenv https://realpython.com/intro-to-pyenv/ -# Search Debian apt-get repo for missing packages https://www.debian.org/distrib/packages#search_contents -# https://www.cyberciti.biz/faq/howto-check-if-a-directory-exists-in-a-bash-shellscript/ -# https://pyinstaller.readthedocs.io/en/stable/development/venv.html -# https://stackoverflow.com/questions/16931244/checking-if-output-of-a-command-contains-a-certain-string-in-a-shell-script -# PyQt5 build instructions: https://www.riverbankcomputing.com/static/Docs/PyQt5/building_with_configure.html - -### Future work -# See if PyQt5 install can be sped up with --no-tools and other conditions. -# - -### Approximate installation times: -# RPi 4B (2GB) ???. "Raspberry Pi 4 Model B Rev 1.2" -# RPi 3B+ 3.5 hours. "Raspberry Pi 3 Model B Plus Rev 1.3" -# RPi 3B ??? hours. "Raspberry Pi 3 Model B Rev 1.2" -# Rpi 2B 12? hours. -# Rpi 0W 12 hours. "Raspberry Pi Zero W Rev 1.1" -# Find model using 'cat /sys/firmware/devicetree/base/model' - -### Other commands -#python -V # You can test which version of python has priority now on your system if you like -#python -m test # You can run python diagnostics if you want to check the integrity of your new python. My test for Python 3.7.0 took 56 minutes on the Pi3B+ and resulted in a "== Tests result: FAILURE == ... 6 tests failed: test_asyncio test_ftplib test_imaplib test_nntplib test_poplib test_ssl" but my Artemis 3.2.0 build still worked. - - -##################################### Error Messages and Workarounds ############################## - -### NOTE!!! Artemis must be built by running "pyinstaller Artemis.spec" WHILE THE TERMINAL'S WORKING DIRECTORY IS INSIDE THE "/Artemis/spec_files/Linux" folder! If you try to build the Artemis.spec while not in the working directory (for example, by being inside "~/Downloads/ArtemisTestBuild/" and running "PyInstaller ~/Downloads/Artemis/spec_files/Linux/Artemis.spec") then Artemis will build ok but then crash when you try to run the Artemis executable: "FileNotFoundError: [Errno 2] No such file or directory: '/tmp/_MEIaHNect/download_db_window.ui'". Said another way, you MUST cd into the "Artemis/spec_files/Linux" directory BEFORE running the "pyinstaller Artemis.spec" command! - -### If you get: "[1449] Error loading Python lib '/tmp/_MEIATNM1X/libpython3.7m.so.1.0': dlopen: /lib/arm-linux-gnueabihf/libc.so.6: version `GLIBC_2.28' not found (required by /tmp/_MEIATNM1X/libpython3.7m.so.1.0)" Try updating GLIBC with "sudo apt-get install libc6". If this doesn't work, this error might be due to your running a pre-compiled Artemis binary that was built on a newer Linux OS than the one you are running. If this is the case, then use this build script to build Artemis for your system. - -### If you get errors installing newer PyQt5 modules with pip or troubles compiling Artemis like: "ModuleNotFoundError: No module named 'pkg_resources.py2_warn'", you might try upgrading pip, installing a different version of pip setuptools (newer or older), and then reinstalling pyinstaller. That error may show up for setuptools newer than 44.0.0. Therefore, try: "python3.7 -m pip install --upgrade 'setuptools==44.0.0'" - -### If you get the error "bash: PyInstaller: command not found" when trying to build Artemis, then run the commands below (or reload shell or just close and re-open the terminal). After that, ensure pyenv is also reinitialized by activating your virtual env again. -#eval "$(pyenv init -)" -#eval "$(pyenv virtualenv-init -)" -#pyenv activate YOUR_BUILD_ENVIRONMENT_HERE - -### We need to install python inside of pyenv with '--enable-shared' or else we will get this when trying to build Artemis on Stretch "OSError: Python library not found: libpython3.7m.so, libpython3.7mu.so.1.0, libpython3.7.so.1.0, libpython3.7m.so.1.0" - -### If you get "libf77blas.so.3: cannot open shared object file: No such file or directory" during Artemis compile, make sure 'libatlas-base-dev' was installed with apt-get (this error is caused by NumPy). - -### NumPy 1.17.2 errors on Stretch if it is not installed with "--no-cache-dir --no-binary :all:". "Original error was: /lib/arm-linux-gnueabihf/libm.so.6: version `GLIBC_2.27' not found (required by /home/pi/.pyenv/versions/artemis3_py370_pyqt5122/lib/python3.7/site-packages/numpy/core/_multiarray_umath.cpython-37m-arm-linux-gnueabihf.so)" - -### If we installed our pip modules inside of System Python (ie we didn't run 'pyenv activate YOUR_VIRTUAL_ENV_NAME_HERE'), then we would end up with a final Artemis file that was 1.3GB and which would error when trying to copy itself from build/PKG-00.pkg into its final dist/Artemis EXE, with error message "raise SystemError("objcopy Failure: %s" % stderr) SystemError: objcopy Failure: objcopy: out of memory allocating 536870912 bytes after a total of 0 bytes". However, since we're building a fresh Python environment to install ONLY our needed Artemis modules inside of, we will not get this error and we will build an Artemis EXE that is about 97.1 MB. - -### On Raspbian Stretch (not Buster), any Pyinstaller version >= 3.5 will cause PyQt5.sip (sip.so) to be incorrectly installed into the main directory within the Artemis exe (and not into the PyQt5 folder within the exe, where sip should be), so that Artemis will build without errors but will error when run ("ModuleNotFoundError: No module named 'PyQt5.sip'"). Therefore, PyInstaller 3.4 should be used on Raspbian Stretch (earlier PyInstaller versions don't install correctly on Stretch anyway). This error might be fixable on Stretch with a custom-written PyInstaller hook for sip if you need to use a newer PyInstaller version on Raspbian Stretch, but I haven't tested this. Raspbian Buster does not have this problem with PyInstaller and sip for some reason, so that any PyInstaller version should be fine. - -### If we try to install PyQt5 (using pip or by building from source) without having Qt5 installed on our system, then we will get errors related to qmake: “Error: Use the --qmake argument to explicitly specify a working Qt qmake. qmake not compatible for building PyQt5” Qt5 doesn't come pre-installed on Raspbian Buster for Raspberry Pi 0-2 (but does on newer Pi's running Raspbian Buster). Install it with "sudo apt-get install qt5-default" - -### If you get build errors with Artemis on Raspbian Buster, you might consider a different PyInstaller version built from source - Either the newest development version ("python3.7 -m pip install https://github.com/pyinstaller/pyinstaller/archive/develop.zip"), or an older version ("python3.7 -m pip install --upgrade 'PyInstaller==3.5'"). - -### If you type ./Artemis in the terminal and Artemis runs, but looks all grey when it runs and gives you a "Missing theme folder" dialog box error, then make sure that, when you are running the ./Artemis command, your terminal's working directory is the same directory that houses the Artemis executable file: For example, while terminal is in the "/opt/" directory, if you run "Artemis/./Artemis" then you'll get the theme folder error, but if you cd to the "/opt/Artemis/" directory and run "./Artemis", then this may fix the theme folder error. - -### Similar to the theme folder error, if you run Artemis from terminal while your working directory is outside the folder that houses the Artemis executable file, then downloading the database may create a "Data" folder outside of the folder where the Artemis executable is. Just close Artemis, move the Data folder into the Artemis folder, run the Artemis exe again from a shortcut or from File Manager, or from terminal (but in the correct working directory) and everything should work. - -### If you get this error: "QStandardPaths: XDG_RUNTIME_DIR not set, defaulting to '/tmp/runtime-root'", log out of your Pi then log back in. This may be a problem with the EXE getting confused by pyenv if pyenv is still active when the EXE is first run. Pyenv activates automatically by being inside the ~/Environments/artemis3_py370_pyqt5122/ directory. - - -################################# Working installations and console outputs ######################## -### My Raspberry Pi 3B+ build specs (Raspbian Buster) -#python3.7 -O -m PyInstaller --clean Artemis.spec - -#323 INFO: PyInstaller: 3.5 # Also successfully tested with Pyinstaller 3.6 -#323 INFO: Python: 3.7.0 -#328 INFO: Platform: Linux-4.19.97-v7+-armv7l-with-debian-10.3 -#335 INFO: UPX is not available. - - -#pip list - -#Package Version -#--------------- ---------- -#aiohttp 3.6.2 -#altgraph 0.17 -#async-timeout 3.0.1 -#attrs 19.3.0 -#certifi 2020.4.5.1 -#chardet 3.0.4 -#idna 2.9 -#multidict 4.7.5 -#numpy 1.17.2 -#pandas 1.0.3 -#pip 10.0.1 -#pygame 1.9.6 -#PyInstaller 3.6 -#PyQt5 5.12.2 -#PyQt5-sip 4.19.17 -#python-dateutil 2.8.1 -#pytz 2019.3 -#QtAwesome 0.7.0 -#QtPy 1.9.0 -#setuptools 39.0.1 -#six 1.14.0 -#urllib3 1.24.3 -#yarl 1.4.2 - - -### Terminal output on RPi3B+ (Buster) for our build -#spec_files/Linux $ dist/./Artemis -#pygame 1.9.6 -#Hello from the pygame community. https://www.pygame.org/contribute.html -#libEGL warning: DRI2: failed to authenticate -#qt5ct: using qt5ct plugin -#qt5ct: D-Bus global menu: no -#[Artemis then launches] - - - -### Terminal output on RPi3B (not plus) (Stretch) for our build -#(artemis3_pyqt5122) pi@raspberrypi:~/Downloads/Artemis/spec_files/Linux/dist $ ./Artemis -#pygame 1.9.6 -#Hello from the pygame community. https://www.pygame.org/contribute.html -#libEGL warning: DRI2: failed to authenticate -#[Artemis then launches] - -#NOTE: This RPi3B Stretch build will run on Buster, but only will display fonts correctly if we rename our Buster /etc/fonts/ directory, copy the Stretch fonts directory into Buster, and run ./Artemis as sudo. I am investigating whether this may be due to old PyInstaller installing weirdly. -#[on stretch] sudo cp -L -r /etc/fonts /media/pi/ENFAIN/fonts_stretch -#[on buster] sudo mv /etc/fonts /etc/fonts.bak -#[on buster] sudo cp -L -r /media/pi/ENFAIN/fonts_stretch /etc/fonts -#https://askubuntu.com/questions/1098809/ubuntu-18-10-fontconfig - -#(artemis3_pyqt5122) pi@raspberrypi:~/Downloads/Artemis/spec_files/Linux/dist $ pip list -#Package Version -#--------------- ---------- -#aiohttp 3.6.2 -#altgraph 0.17 -#async-timeout 3.0.1 -#attrs 19.3.0 -#certifi 2020.4.5.1 -#chardet 3.0.4 -#future 0.18.2 -#idna 2.9 -#macholib 1.14 -#multidict 4.7.5 -#numpy 1.17.2 -#pandas 1.0.3 -#pefile 2019.4.18 -#pip 20.1 -#pygame 1.9.6 -#PyInstaller 3.4 -#PyQt5 5.12.2 -#PyQt5-sip 4.19.17 -#python-dateutil 2.8.1 -#pytz 2020.1 -#QtAwesome 0.7.1 -#QtPy 1.9.0 -#setuptools 44.0.0 -#six 1.14.0 -#urllib3 1.24.3 -#wheel 0.34.2 -#yarl 1.4.2 - - -### Terminal output on RPi4B for our build -#pi@raspberrypi:~/Desktop/Artemis3 Pi3B+ $ ./Artemis -#pygame 1.9.6 -#Hello from the pygame community. https://www.pygame.org/contribute.html -#qt5ct: using qt5ct plugin -#qt5ct: D-Bus global menu: no -#[Artemis then launches] - - -### Terminal output on RPi4B for the official Linux build -#pi@raspberrypi:~/Downloads/artemis $ ./Artemis -#bash: ./Artemis: cannot execute binary file: Exec format error -#pi@raspberrypi:~/Downloads/artemis $ ./_ArtemisUpdater -#bash: ./_ArtemisUpdater: cannot execute binary file: Exec format error -#[Artemis doesn't launch] diff --git a/spec_files/Linux/updater.spec b/spec_files/Linux/updater.spec deleted file mode 100644 index 48c1dd4..0000000 --- a/spec_files/Linux/updater.spec +++ /dev/null @@ -1,51 +0,0 @@ -# -*- mode: python ; coding: utf-8 -*- - -import os - - -BASE_FOLDER = "../../src/" -block_cipher = None - -data_file = [ - (os.path.join(BASE_FOLDER, "download_db_window.ui"), "."), - (os.path.join(BASE_FOLDER, "download_window.py"), "."), - (os.path.join(BASE_FOLDER, "utilities.py"), "."), - (os.path.join(BASE_FOLDER, "versioncontroller.py"), "."), - (os.path.join(BASE_FOLDER, "downloadtargetfactory.py"), "."), - (os.path.join(BASE_FOLDER, "executable_utilities.py"), "."), - (os.path.join(BASE_FOLDER, "os_utilities.py"), "."), - (os.path.join(BASE_FOLDER, "web_utilities.py"), "."), - (os.path.join(BASE_FOLDER, "constants.py"), "."), - (os.path.join(BASE_FOLDER, "threads.py"), "."), - (os.path.join(BASE_FOLDER, "default_imgs_rc.py"), "."), - (os.path.join(BASE_FOLDER, "cacert.pem"), "."), -] -a = Analysis([os.path.join(BASE_FOLDER, 'updater.py')], # noqa: 821 - pathex=[os.getcwd()], - binaries=[], - datas=data_file, - hiddenimports=[], - hookspath=[], - runtime_hooks=[], - excludes=[], - win_no_prefer_redirects=False, - win_private_assemblies=False, - cipher=block_cipher, - noarchive=False) -pyz = PYZ(a.pure, # noqa: 821 - a.zipped_data, - cipher=block_cipher) -exe = EXE(pyz, # noqa: 821 - a.scripts, - a.binaries, - a.zipfiles, - a.datas, - [], - name='_ArtemisUpdater', - debug=False, - bootloader_ignore_signals=False, - strip=False, - upx=True, - runtime_tmpdir=None, - console=False, - icon='Artemis3.ico') diff --git a/spec_files/README.md b/spec_files/README.md deleted file mode 100644 index 1a8811f..0000000 --- a/spec_files/README.md +++ /dev/null @@ -1,64 +0,0 @@ -- -# ARTEMIS 3    - -*Radio Signals Recognition Manual* - -## ARTEMIS 3 .SPEC FILES - -Artemis 3 .spec files are used by the package **pyinstaller** (https://www.pyinstaller.org/) to build a single standalone executable (or a one-dir package). Every external dependency is already embedded into the bundle. The interpreter of Python 3 is also included. - -## Requirements -- Python 3.7.0+ -- Pyinstaller - -**IMPORTANT:** *To generate the standalone and the one-dir package, you must use an operating system that coincides with the target one (pyinstaller doesn't allow cross-compilation).* - -**IMPORTANT (LINUX COMPILING):** *The executable that PyInstaller builds is not fully static, in that it still depends on the system libc. **Under Linux, the ABI of GLIBC is backward compatible, but not forward compatible. So if you link against a newer GLIBC, you can't run the resulting executable on an older system**. The supplied binary bootloader should work with older GLIBC. However, the libpython.so and other dynamic libraries still depend on the newer GLIBC. The solution is to compile the Python interpreter with its modules (and also probably bootloader) on the oldest system you have around so that it gets linked with the oldest version of GLIBC.* (Source: PyInstaller) - -**NOTE.** Depending on the number of packages installed in your python environemnt, the size of the executables file can vary significantly. In order to get the smallest size possible it is recommend to initialize a fresh virtual environment with just the requirements and pyinstaller. - -## Package Building (standalone aka one-file, high portability, **suggested**) -1. Download/clone the git repository. -2. In the `spec_files/
` folder open a terminal and type -``` -pyinstaller Artemis.spec -``` -3. An Artemis executable should be produced in the `dist/` folder. The `build/` folder - can be deleted. - -## Package Building (one-dir, shorter startup time, low portability) -1. Download/clone the git repository. -2. In the `spec_files/ " + APPLICATION_VERSION + "" + + "` folder open a terminal and type -``` -pyinstaller Artemis_onedir.spec -``` -3. An Artemis executable should be produced in `dist/Artemis/`. The `build/` can - be deleted. - - -You can save a copy of the executable in a folder of you choice. At startup it will ask you to download the database and also warn you that the `themes` folder is missing. To avoid this, copy `src/Data` and `src/themes` in the folder containing the executable. - -## Build scripts (Windows, Linux, macOS) -Provided you satisfy the requirements (see [requirements.txt](../requirements/requirements.txt)) and have pyinstaller installed, running a `build.*` script in ` ` folder will produce an `output` folder with: - -- Executable versions of Artemis and the updater; - - compressed versions of the same files; -- a folder called `Artemis/` containing the executables and the `theme` folder - - a compressed version of the folder - -At the end of the process the script writes on standard output the size and sha256 code for the compressed files. - -**NOTE.** For Windows you will need a 7z installation. Also check the path hardcoded in `/Windows/build.bat`. - -## Build script (Raspberry Pi) -Thanks to [**Eric Wiessner (KI7POL)**](https://github.com/WheezyE "GitHub profile"), an automatic script to compile Artemis (and meet all the Artemis' build requirements) is available in the Linux folder `Linux/raspbian_build.sh`. The script will proceed as follows: - -- Detect which Raspbian operating system is being used (Buster or Stretch), installing PyEnv on the system (if PyEnv isn't already installed). -- Installation of a Python v3.7.0 virtual environment inside of PyEnv (so that Artemis' pip modules do not conflict with Raspbian's System Python). -- Installation of pip modules (Artemis requirements) within the previously built virtual Python 3.7.0 (modules are specific to Buster or Stretch). -- Canonical Artemis building for Linux OS (using build.sh). - -**The complete instructions, a troubleshooting guide and many other usefull details are available in the script itself.** - -If the script is re-run, it will skip over parts it has already installed. Options are included to clean up after the script is run. In the worst case scenario, this script takes 14 hours on a Pi 0W, but much less time on multi-core Pi's. diff --git a/spec_files/Windows/Artemis3.ico b/spec_files/Windows/Artemis3.ico deleted file mode 100644 index 5677102..0000000 Binary files a/spec_files/Windows/Artemis3.ico and /dev/null differ diff --git a/spec_files/Windows/Artemis_onedir.spec b/spec_files/Windows/Artemis_onedir.spec deleted file mode 100644 index 1ce96f5..0000000 --- a/spec_files/Windows/Artemis_onedir.spec +++ /dev/null @@ -1,50 +0,0 @@ -# -*- mode: python -*- - -import glob -import os - - -block_cipher = None - - -SRC_PATH = "../../src/" - -data_file = [ - (f, '.') for f in glob.glob(SRC_PATH + '*.[pu][yi]') - if f.split('/')[-1] != "artemis.py" -] -data_file.append((SRC_PATH + 'cacert.pem', '.')) - -a = Analysis(SRC_PATH + ['artemis.py'], # noqa: 821 - pathex=[os.getcwd()], - binaries=[], - datas=data_file, - hiddenimports=[], - hookspath=[], - runtime_hooks=[], - excludes=[], - win_no_prefer_redirects=False, - win_private_assemblies=False, - cipher=block_cipher, - noarchive=False) -pyz = PYZ(a.pure, # noqa: 821 - a.zipped_data, - cipher=block_cipher) -exe = EXE(pyz, # noqa: 821 - a.scripts, - [], - exclude_binaries=True, - name='Artemis', - debug=False, - bootloader_ignore_signals=False, - strip=False, - upx=True, - console=False, - icon='Artemis3.ico') -coll = COLLECT(exe, # noqa: 821 - a.binaries, - a.zipfiles, - a.datas, - strip=False, - upx=True, - name='Artemis') diff --git a/spec_files/Windows/artemis.spec b/spec_files/Windows/artemis.spec deleted file mode 100644 index 4cfc485..0000000 --- a/spec_files/Windows/artemis.spec +++ /dev/null @@ -1,47 +0,0 @@ -# -*- mode: python -*- - -import glob -import os - - -block_cipher = None - - -SRC_PATH = "../../src/" - -data_file = [ - (f, '.') for f in glob.glob(SRC_PATH + '*.[pu][yi]') - if f.split('/')[-1] != "artemis.py" and f.split('/')[-1] != "updater.py" -] -data_file.append((SRC_PATH + 'cacert.pem', '.')) - -a = Analysis([SRC_PATH + 'artemis.py'], # noqa: 821 - pathex=[os.getcwd()], - binaries=[], - datas=data_file, - hiddenimports=[], - hookspath=[], - runtime_hooks=[], - excludes=[], - win_no_prefer_redirects=False, - win_private_assemblies=False, - cipher=block_cipher, - noarchive=False) -pyz = PYZ(a.pure, # noqa: 821 - a.zipped_data, - cipher=block_cipher) -exe = EXE(pyz, # noqa: 821 - a.scripts, - a.binaries, - a.zipfiles, - a.datas, - [], - name='Artemis', - debug=False, - bootloader_ignore_signals=False, - strip=False, - upx=True, - runtime_tmpdir=None, - console=False, - icon='Artemis3.ico', - uac_admin=True) diff --git a/spec_files/Windows/build.bat b/spec_files/Windows/build.bat deleted file mode 100644 index 9ec5a47..0000000 --- a/spec_files/Windows/build.bat +++ /dev/null @@ -1,30 +0,0 @@ -ECHO OFF -ECHO Building Artemis executable... -RMDIR /s /q output -MKDIR output -pyinstaller artemis.spec -ECHO Remove directories -MOVE dist\Artemis.exe .\output\Artemis.exe -RMDIR /s /q dist -RMDIR /s /q build -ECHO ************* -ECHO ************* -ECHO Building updater... -pyinstaller updater.spec -ECHO Remove directories -MOVE dist\_ArtemisUpdater.exe .\output\_ArtemisUpdater.exe -RMDIR /s /q dist -RMDIR /s /q build -CD output -MKDIR Artemis -XCOPY /y Artemis.exe Artemis\ -XCOPY /e /k /y ..\..\..\src\themes Artemis\themes\ /EXCLUDE:..\excluded_files.txt -XCOPY /y _ArtemisUpdater.exe Artemis\ -ECHO "Compress files themes+Artemis.exe -> Artemis.zip" -"C:\Program Files\7-Zip\7z.exe" a Artemis_win.zip Artemis.exe ..\..\..\src\themes -"C:\Program Files\7-Zip\7z.exe" a _ArtemisUpdater_win.zip _ArtemisUpdater.exe -ECHO "Compress all files for website download" -"C:\Program Files\7-Zip\7z.exe" a ArtemisWebsite_win.zip Artemis\ -python ..\..\__get_hash_code.py Artemis_win.zip _ArtemisUpdater_win.zip ArtemisWebsite_win.zip -CD .. -ECHO Done. \ No newline at end of file diff --git a/spec_files/Windows/excluded_files.txt b/spec_files/Windows/excluded_files.txt deleted file mode 100644 index 995d981..0000000 --- a/spec_files/Windows/excluded_files.txt +++ /dev/null @@ -1 +0,0 @@ -__current_theme \ No newline at end of file diff --git a/spec_files/Windows/updater.spec b/spec_files/Windows/updater.spec deleted file mode 100644 index 1477c42..0000000 --- a/spec_files/Windows/updater.spec +++ /dev/null @@ -1,52 +0,0 @@ -# -*- mode: python ; coding: utf-8 -*- - -import os - - -BASE_FOLDER = "../../src/" -block_cipher = None - -data_file = [ - (os.path.join(BASE_FOLDER, "download_db_window.ui"), "."), - (os.path.join(BASE_FOLDER, "download_window.py"), "."), - (os.path.join(BASE_FOLDER, "utilities.py"), "."), - (os.path.join(BASE_FOLDER, "versioncontroller.py"), "."), - (os.path.join(BASE_FOLDER, "downloadtargetfactory.py"), "."), - (os.path.join(BASE_FOLDER, "executable_utilities.py"), "."), - (os.path.join(BASE_FOLDER, "os_utilities.py"), "."), - (os.path.join(BASE_FOLDER, "web_utilities.py"), "."), - (os.path.join(BASE_FOLDER, "constants.py"), "."), - (os.path.join(BASE_FOLDER, "threads.py"), "."), - (os.path.join(BASE_FOLDER, "default_imgs_rc.py"), "."), - (os.path.join(BASE_FOLDER, "cacert.pem"), "."), -] -a = Analysis([os.path.join(BASE_FOLDER, 'updater.py')], # noqa: 821 - pathex=[os.getcwd()], - binaries=[], - datas=data_file, - hiddenimports=[], - hookspath=[], - runtime_hooks=[], - excludes=[], - win_no_prefer_redirects=False, - win_private_assemblies=False, - cipher=block_cipher, - noarchive=False) -pyz = PYZ(a.pure, # noqa: 821 - a.zipped_data, - cipher=block_cipher) -exe = EXE(pyz, # noqa: 821 - a.scripts, - a.binaries, - a.zipfiles, - a.datas, - [], - name='_ArtemisUpdater', - debug=False, - bootloader_ignore_signals=False, - strip=False, - upx=True, - runtime_tmpdir=None, - console=False, - icon='Artemis3.ico', - uac_admin=True) diff --git a/spec_files/__get_hash_code.py b/spec_files/__get_hash_code.py deleted file mode 100644 index 97e2c62..0000000 --- a/spec_files/__get_hash_code.py +++ /dev/null @@ -1,31 +0,0 @@ -import hashlib -import sys - - -"""Print on stadard output the size in KB and sha256 codes of a list -of command line-provided file names.""" - -print() - -try: - fnames = sys.argv[1:] -except Exception: - print("Provide a valid filename.") - exit() - -for fname in fnames: - try: - with open(fname, mode='rb') as f: - target = f.read() - except Exception: - print("File not found") - exit() - - code = hashlib.sha256() - code.update(target) - hash_code = code.hexdigest() - - print("File name:", fname) - print("Size (KB):", round(len(target) / 1024, 3)) - print("Hash code:", hash_code) - print("-" * 80) diff --git a/spec_files/macOS/Artemis.spec b/spec_files/macOS/Artemis.spec deleted file mode 100644 index 1f28c54..0000000 --- a/spec_files/macOS/Artemis.spec +++ /dev/null @@ -1,53 +0,0 @@ -# -*- mode: python -*- - -import glob -import os - - -block_cipher = None - - -SRC_PATH = "../../src/" - -data_file = [ - (f, '.') for f in glob.glob(SRC_PATH + '*.[pu][yi]') - if f.split('/')[-1] != "artemis.py" -] -data_file.extend(((SRC_PATH + 'cacert.pem', '.'), (SRC_PATH + 'themes', './themes'))) - -a = Analysis([SRC_PATH + 'artemis.py'], # noqa: 821 - pathex=[os.getcwd()], - binaries=[], - datas=data_file, - hiddenimports=[], - hookspath=[], - runtime_hooks=[], - excludes=[], - win_no_prefer_redirects=False, - win_private_assemblies=False, - cipher=block_cipher, - noarchive=False) -pyz = PYZ(a.pure, # noqa: 821 - a.zipped_data, - cipher=block_cipher) -exe = EXE(pyz, # noqa: 821 - a.scripts, - [], - exclude_binaries=True, - name='Artemis', - debug=False, - bootloader_ignore_signals=False, - strip=False, - upx=True, - console=False) -coll = COLLECT(exe, # noqa: 821 - a.binaries, - a.zipfiles, - a.datas, - strip=False, - upx=True, - name='Artemis') -app = BUNDLE(coll, # noqa: 821 - name='Artemis.app', - icon='Artemis3.icns', - bundle_identifier=None) diff --git a/spec_files/macOS/Artemis3.icns b/spec_files/macOS/Artemis3.icns deleted file mode 100644 index 76c9527..0000000 Binary files a/spec_files/macOS/Artemis3.icns and /dev/null differ diff --git a/src/.flake8 b/src/.flake8 deleted file mode 100644 index d7cbbca..0000000 --- a/src/.flake8 +++ /dev/null @@ -1,2 +0,0 @@ -[flake8] -ignore = E221, E501, W605, W504 diff --git a/src/acfvalue.py b/src/acfvalue.py deleted file mode 100644 index 81cf748..0000000 --- a/src/acfvalue.py +++ /dev/null @@ -1,55 +0,0 @@ -from constants import Constants - - -class ACFValue: - """Handle complex/multiple ACF values.""" - - def __init__(self, value): - """Given a string describing an acf value, build an object with the - following attrributes: - - is_numeric: whether the value is a number or a string; - - numeric_value: the numeric value (if any, zero otherwise); - - unknown: whether the value is unknown.""" - if value == Constants.UNKNOWN: - self._value = value - self._description = "" - self._string = self._value - self.is_numeric = False - self.unknown = True - self.numeric_value = 0.0 - else: - self.unknown = False - if Constants.ACF_SEPARATOR in value: - description, acf_value = value.split(Constants.ACF_SEPARATOR) - self._description = description - self._value = acf_value - self._string = f"{self._description}: {self._value}" - else: - self._description = "" - self._value = value - self._string = self._value - if self._value.isdigit(): - self.numeric_value = float(self._value) - self.is_numeric = True - self._string += " ms" - else: - self.is_numeric = False - self.numeric_value = 0.0 - - @classmethod - def list_from_series(cls, series): - """Parse all acf values from the database. - - Accept an iterable of ACFValues. - Return a list of lists of ACFValues.""" - entries = [] - for entry in series: - entries.append([ - cls(value.rstrip('ms').strip()) for value in entry.split(Constants.FIELD_SEPARATOR) - ]) - return entries - - @staticmethod - def concat_strings(acf_list_values): - """Concatenate a list of ACFValues to be displayed.""" - return '\n'.join(s._string for s in acf_list_values) diff --git a/src/artemis.py b/src/artemis.py deleted file mode 100644 index 4f670f5..0000000 --- a/src/artemis.py +++ /dev/null @@ -1,777 +0,0 @@ -from collections import namedtuple -from itertools import chain -from functools import partial -import webbrowser -import os -import sys -from time import sleep, time -import logging - -from pandas import read_csv - -from PyQt5.QtWidgets import ( - QMainWindow, - QApplication, - qApp, - QDesktopWidget, - QListWidgetItem, - QMessageBox, - QSplashScreen, - QFontDialog, - QWidget, -) -from PyQt5.QtGui import QPixmap, QFont -from PyQt5 import uic -from PyQt5.QtCore import ( - QFileInfo, - Qt, - pyqtSlot, -) -from acfvalue import ACFValue -from audio_player import AudioPlayer -from weatherdata import ForecastData -from download_window import DownloadWindow -from spaceweathermanager import SpaceWeatherManager -from constants import ( - Constants, - GfdType, - Database, - DownloadTarget, - Messages, - Signal, - __BASE_FOLDER__, -) -from themesmanager import ThemeManager -from filters import Filters -from utilities import ( - checksum_ok, - pop_up, - is_undef_freq, - is_undef_band, - format_numbers, - safe_cast, - UniqueMessageBox, -) -from executable_utilities import IS_BINARY, resource_path -from os_utilities import IS_MAC -from web_utilities import get_db_hash_code -from downloadtargetfactory import get_download_target -from settings import Settings -from updatescontroller import UpdatesController -from urlbutton import UrlButton -import loggingconf # noqa 401 - -# import default_imgs_rc - - -__LATEST_VERSION__ = "3.2.4" - -if IS_BINARY: - __VERSION__ = __LATEST_VERSION__ -else: - __VERSION__ = __LATEST_VERSION__ + ".Dev" - - -qt_creator_file = resource_path("artemis.ui") -Ui_MainWindow, _ = uic.loadUiType(qt_creator_file) - - -class Artemis(QMainWindow, Ui_MainWindow): - """Main application class.""" - - def __init__(self): - """Set all connections of the application.""" - super().__init__() - self.setupUi(self) - self.setWindowTitle("ARTΣMIS " + __VERSION__) - self.set_initial_size() - self.closing = False - self.download_window = DownloadWindow() - self.download_window.complete.connect(self.action_after_download) - self.actionExit.triggered.connect(qApp.quit) - self.action_update_database.triggered.connect(self.ask_if_download) - self.action_check_db_ver.triggered.connect(self.check_db_ver) - self.action_sigidwiki_com.triggered.connect( - lambda: webbrowser.open(Constants.SIGIDWIKI) - ) - self.action_add_a_signal.triggered.connect( - lambda: webbrowser.open(Constants.ADD_SIGNAL_LINK) - ) - self.action_aresvalley_com.triggered.connect( - lambda: webbrowser.open(Constants.ARESVALLEY_LINK) - ) - self.action_forum.triggered.connect( - lambda: webbrowser.open(Constants.FORUM_LINK) - ) - self.action_rtl_sdr_com.triggered.connect( - lambda: webbrowser.open(Constants.RTL_SDL_LINK) - ) - self.action_github.triggered.connect( - lambda: webbrowser.open(Constants.GITHUB_REPO) - ) - self.action_font.triggered.connect(self.start_font_selection) - self.db = None - self.current_signal_name = '' - self.signal_names = [] - self.total_signals = 0 - - # Forecast - self.forecast_info_btn.clicked.connect( - lambda: webbrowser.open(Constants.SPACE_WEATHER_INFO) - ) - self.forecast_data = ForecastData(self) - self.update_forecast_bar.clicked.connect(self.start_update_forecast) - self.update_forecast_bar.set_idle() - self.forecast_data.update_complete.connect(self.update_forecast) - - # Spaceweather manager - self.spaceweather_screen = SpaceWeatherManager(self) - - self.theme_manager = ThemeManager(self) - - self.filters = Filters(self) - -# ####################################################################################### - - self.category_labels = [ - self.cat_mil, - self.cat_rad, - self.cat_active, - self.cat_inactive, - self.cat_ham, - self.cat_comm, - self.cat_avi, - self.cat_mar, - self.cat_ana, - self.cat_dig, - self.cat_trunked, - self.cat_utility, - self.cat_sat, - self.cat_navi, - self.cat_interf, - self.cat_num_stat, - self.cat_time_sig - ] - - self.property_labels = [ - self.freq_lab, - self.band_lab, - self.mode_lab, - self.modul_lab, - self.loc_lab, - self.acf_lab, - self.description_text - ] - - self.url_button.clicked.connect(self.go_to_web_page_signal) - - # GFD - self.freq_search_gfd_btn.clicked.connect(partial(self.go_to_gfd, GfdType.FREQ)) - self.location_search_gfd_btn.clicked.connect(partial(self.go_to_gfd, GfdType.LOC)) - self.gfd_line_edit.returnPressed.connect(partial(self.go_to_gfd, GfdType.LOC)) - -# ########################################################################################## - - # Left list widget and search bar. - self.search_bar.textChanged.connect(self.display_signals) - self.signals_list.currentItemChanged.connect(self.display_specs) - self.signals_list.itemDoubleClicked.connect(self.set_visible_tab) - - self.audio_widget = AudioPlayer( - self.play, - self.pause, - self.stop, - self.volume, - self.loop, - self.audio_progress, - self.active_color, - self.inactive_color - ) - - BandLabel = namedtuple("BandLabel", ["left", "center", "right"]) - self.band_labels = [ - BandLabel(self.elf_left, self.elf, self.elf_right), - BandLabel(self.slf_left, self.slf, self.slf_right), - BandLabel(self.ulf_left, self.ulf, self.ulf_right), - BandLabel(self.vlf_left, self.vlf, self.vlf_right), - BandLabel(self.lf_left, self.lf, self.lf_right), - BandLabel(self.mf_left, self.mf, self.mf_right), - BandLabel(self.hf_left, self.hf, self.hf_right), - BandLabel(self.vhf_left, self.vhf, self.vhf_right), - BandLabel(self.uhf_left, self.uhf, self.uhf_right), - BandLabel(self.shf_left, self.shf, self.shf_right), - BandLabel(self.ehf_left, self.ehf, self.ehf_right), - ] - - self.main_tab.currentChanged.connect(self.hide_show_right_widget) - - self.updates_controller = UpdatesController(__LATEST_VERSION__, self) - self.updates_controller.start() - self.action_check_software_version.triggered.connect( - self.updates_controller.start_verify_software_version - ) - - # Final operations. - self.settings = Settings() - self.settings.load() - self.theme_manager.start() - self.load_font() - self.load_db() - self.display_signals() - - def apply_font(self, font): - """Apply a given QFont object to all the widgets.""" - UniqueMessageBox.set_font(font) - # This is the smaller-text label. Not the most general strategy, but whatever.. - smaller_point_size = self.forecast_today_0_lbl.font().pointSize() - min_reference_font = 4 - for w in set(chain( - self.findChildren(QWidget), - self.download_window.findChildren(QWidget) - )): - old_font = w.font() - point_size = old_font.pointSize() - new_font = QFont(font) - new_font.setUnderline(old_font.underline()) - new_font.setBold(old_font.bold()) - new_font.setItalic(old_font.italic()) - new_size = font.pointSize() + (point_size - smaller_point_size) - if new_size < min_reference_font: - new_size = min_reference_font - new_font.setPointSize(new_size) - w.setFont(new_font) - - def load_font(self): - """Apply a QFont object if present.""" - if self.settings.font is None: - return - try: - font = QFont( - self.settings.font['family'], - self.settings.font['point_size'], - self.settings.font['weight'], - self.settings.font['italic'] - ) - font.setStyle(self.settings.font['style']) - font.setPointSize(self.settings.font['point_size']) - font.setStrikeOut(self.settings.font['strikeout']) - font.setUnderline(self.settings.font['underline']) - self.apply_font(font) - except Exception: # Invalid font - logging.warning("Invalid Font in settings.json") - pass - - @pyqtSlot() - def start_font_selection(self): - """Open a font selection widget and apply the selected font.""" - initial_font = self.description_text.font() - dialog = QFontDialog() - dialog.setCurrentFont(initial_font) - font, ok = dialog.getFont( - initial_font, - self, - "Choose a font", - options=QFontDialog.DontUseNativeDialog - ) - if ok: - self.apply_font(font) - self.settings.save( - font={ - 'family': font.family(), - 'style': font.style(), - 'point_size': font.pointSize(), - 'weight': font.weight(), - 'italic': font.italic(), - 'strikeout': font.strikeOut(), - 'underline': font.underline(), - } - ) - - def action_after_download(self): - """Decide what to do after a successful download. - - If a new database was downloaded, show the signals.""" - if self.download_window.target is DownloadTarget.DATA_FOLDER: - self.show_downloaded_signals() - - @pyqtSlot() - def hide_show_right_widget(self): - """Hide the audio player when forecast tabs are displayed.""" - if self.main_tab.currentWidget() == self.forecast_tab: - self.fixed_audio_and_image.setVisible(False) - elif not self.fixed_audio_and_image.isVisible(): - self.fixed_audio_and_image.setVisible(True) - - @pyqtSlot() - def set_visible_tab(self): - """Set the current main tab when double-clicking a signal name. - - Switch between main and filter tab when double-clicking multiple times.""" - set_main = False - if self.main_tab.currentWidget() != self.signal_properties_tab: - self.main_tab.setCurrentWidget(self.signal_properties_tab) - set_main = True - if self.signal_tab.currentWidget() != self.signal_main_tab or set_main: - self.signal_tab.setCurrentWidget(self.signal_main_tab) - else: - self.signal_tab.setCurrentWidget(self.filter_tab) - - @pyqtSlot() - def start_update_forecast(self): - """Start the update of the 3-day forecast screen. - - Start the corresponding thread. - """ - if not self.forecast_data.is_updating: - self.update_forecast_bar.set_updating() - self.forecast_data.update() - - @pyqtSlot(bool) - def update_forecast(self, status_ok): - """Update the 3-day forecast screen after a successful download. - - If the download was not successful throw a warning. In any case remove - the downloaded data. - """ - self.update_forecast_bar.set_idle() - if status_ok: - self.forecast_data.update_all_labels() - elif not self.closing: - pop_up(self, title=Messages.BAD_DOWNLOAD, - text=Messages.BAD_DOWNLOAD_MSG).show() - self.forecast_data.remove_data() - - @pyqtSlot() - def go_to_gfd(self, by): - """Open a browser tab with the GFD site. - - Make the search by frequency or location. - Argument: - by -- either GfdType.FREQ or GfdType.LOC. - """ - query = "/?q=" - if by is GfdType.FREQ: - value_in_mhz = self.freq_gfd.value() \ - * Constants.CONVERSION_FACTORS[self.unit_freq_gfd.currentText()] \ - / Constants.CONVERSION_FACTORS["MHz"] - query += str(value_in_mhz) - elif by is GfdType.LOC: - query += self.gfd_line_edit.text() - try: - webbrowser.open(Constants.GFD_SITE + query.lower()) - except Exception: - logging.error("Cannot open browser") - pass - - def set_initial_size(self): - """Handle high resolution screens. - - Set bigger sizes for all the relevant fixed-size widgets. - """ - d = QDesktopWidget().availableGeometry() - w = d.width() - h = d.height() - self.showMaximized() - - if w > 3000 or h > 2000: - self.fixed_audio_and_image.setFixedSize(540, 1150) - self.fixed_audio_and_image.setMaximumSize(540, 1150) - audio_btn_h, audio_btn_w = 90, 90 - self.play.setFixedSize(audio_btn_h, audio_btn_w) - self.pause.setFixedSize(audio_btn_h, audio_btn_w) - self.stop.setFixedSize(audio_btn_h, audio_btn_w) - self.loop.setFixedSize(audio_btn_h, audio_btn_w) - self.lower_freq_spinbox.setFixedWidth(200) - self.upper_freq_spinbox.setFixedWidth(200) - self.lower_freq_filter_unit.setFixedWidth(120) - self.upper_freq_filter_unit.setFixedWidth(120) - self.lower_freq_confidence.setFixedWidth(120) - self.upper_freq_confidence.setFixedWidth(120) - - self.lower_band_spinbox.setFixedWidth(200) - self.upper_band_spinbox.setFixedWidth(200) - self.lower_band_filter_unit.setFixedWidth(120) - self.upper_band_filter_unit.setFixedWidth(120) - self.lower_band_confidence.setFixedWidth(120) - self.upper_band_confidence.setFixedWidth(120) - - self.freq_gfd.setFixedWidth(200) - self.unit_freq_gfd.setFixedWidth(120) - - self.mode_tree_widget.setMinimumWidth(500) - self.modulation_list.setMinimumWidth(500) - self.locations_list.setMinimumWidth(500) - - self.audio_progress.setFixedHeight(20) - self.volume.setStyleSheet(""" - QSlider::groove:horizontal { - height: 12px; - background: #7a7a7a; - margin: 0 10px; - border-radius: 6px - } - QSlider::handle:horizontal { - background: qlineargradient(x1:0, y1:0, x2:1, y2:1, stop:0 gray, stop:0.5 white, stop:1.0 gray); - border: 1px solid #5c5c5c; - width: 28px; - margin: -8px -8px; - border-radius: 14px; - } - """) - - @pyqtSlot() - def download_db(self): - """Start the database download. - - Do nothing if already downloading. - """ - if not self.download_window.isVisible(): - self.download_window.activate( - get_download_target(DownloadTarget.DATA_FOLDER) - ) - - @pyqtSlot() - def ask_if_download(self): - """Check if the database is at its latest version. - - If a new database is available automatically start the download. - If not ask if should download it anyway. - If already downloading do nothing. - Handle possible connection errors. - """ - if not self.download_window.isVisible(): - db_path = os.path.join(Constants.DATA_FOLDER, Database.NAME) - try: - with open(db_path, "rb") as file_db: - db = file_db.read() - except Exception: - self.download_db() - else: - try: - is_checksum_ok = checksum_ok(db, get_db_hash_code()) - except ValueError as e: - logging.info(e) - pop_up(self, title=Messages.NO_CONNECTION, - text=Messages.NO_CONNECTION_MSG).show() - else: - if not is_checksum_ok: - self.download_db() - else: - answer = pop_up(self, title=Messages.UP_TO_DATE, - text=Messages.UP_TO_DATE_MSG, - informative_text=Messages.DOWNLOAD_ANYWAY_QUESTION, - is_question=True, - default_btn=QMessageBox.No).exec() - if answer == QMessageBox.Yes: - self.download_db() - - @pyqtSlot() - def check_db_ver(self): - """Check if the database is at its latest version. - - If a new database version is available, ask if it should be downloaded. - If a new database version is not available display a message. - If already downloading do nothing. - Handle possible connection errors. - """ - if not self.download_window.isVisible(): - db_path = os.path.join(Constants.DATA_FOLDER, Database.NAME) - answer = None - try: - with open(db_path, "rb") as file_db: - db = file_db.read() - except Exception: - answer = pop_up(self, title=Messages.NO_DB, - text=Messages.NO_DB_AVAIL, - informative_text=Messages.DOWNLOAD_NOW_QUESTION, - is_question=True).exec() - if answer == QMessageBox.Yes: - self.download_db() - else: - try: - is_checksum_ok = checksum_ok(db, get_db_hash_code()) - except ValueError as e: - logging.info(e) - pop_up(self, title=Messages.NO_CONNECTION, - text=Messages.NO_CONNECTION_MSG).show() - else: - if is_checksum_ok: - pop_up(self, title=Messages.UP_TO_DATE, - text=Messages.UP_TO_DATE_MSG).show() - else: - answer = pop_up(self, title=Messages.DB_NEW_VER, - text=Messages.DB_NEW_VER_MSG, - informative_text=Messages.DOWNLOAD_NOW_QUESTION, - is_question=True).exec() - if answer == QMessageBox.Yes: - self.download_db() - - @pyqtSlot() - def show_downloaded_signals(self): - """Load and display the database signal list.""" - self.search_bar.setEnabled(True) - self.load_db() - self.display_signals() - - def load_db(self): - """Load the database from file. - - Populate the signals list and set the total number of signals. - Handle possible missing file error. - """ - try: - self.db = read_csv( - os.path.join(Constants.DATA_FOLDER, Database.NAME), - sep=Database.DELIMITER, - header=None, - index_col=0, - dtype={name: str for name in Database.STRINGS}, - names=Database.NAMES - ) - except FileNotFoundError: - self.search_bar.setDisabled(True) - answer = pop_up(self, title=Messages.NO_DB, - text=Messages.NO_DB_AVAIL, - informative_text=Messages.DOWNLOAD_NOW_QUESTION, - is_question=True).exec() - if answer == QMessageBox.Yes: - self.download_db() - else: - # Avoid a crash if there are duplicated signals - self.db = self.db.groupby(level=0).first() - self.signal_names = self.db.index - self.total_signals = len(self.signal_names) - self.db.fillna(Constants.UNKNOWN, inplace=True) - self.db[Signal.ACF] = ACFValue.list_from_series(self.db[Signal.ACF]) - self.db[Signal.WIKI_CLICKED] = False - self.update_status_tip(self.total_signals) - self.signals_list.clear() - self.signals_list.addItems(self.signal_names) - self.signals_list.setCurrentItem(None) - self.modulation_list.addItems( - self.collect_list( - Signal.MODULATION - ) - ) - self.locations_list.addItems( - self.collect_list( - Signal.LOCATION - ) - ) - - def collect_list(self, list_property, separator=Constants.FIELD_SEPARATOR): - """Collect all the entries of a QListWidget. - - Handle multiple entries in one item separated by a separator. - Keyword argument: - separator -- the separator character for multiple-entries items. - """ - values = self.db[list_property] - values = list( - set([ - x.strip() for value in values[values != Constants.UNKNOWN] - for x in value.split(separator) - ]) - ) - values.sort() - values.insert(0, Constants.UNKNOWN) - return values - - @pyqtSlot() - def activate_if_toggled(self, radio_btn, *widgets): - """If radio_btn is toggled, activate all *widgets. - - Do nothing otherwise. - """ - toggled = radio_btn.isChecked() - for w in widgets[:-1]: # Neglect the bool coming from the emitted signal. - w.setEnabled(toggled) - - @pyqtSlot() - def display_signals(self): - """Display all the signal names which matches the applied filters.""" - text = self.search_bar.text() - available_signals = 0 - for index, signal_name in enumerate(self.signal_names): - if text.lower() in signal_name.lower() and self.filters.ok(signal_name): - self.signals_list.item(index).setHidden(False) - available_signals += 1 - else: - self.signals_list.item(index).setHidden(True) - # Remove selected item. - self.signals_list.setCurrentItem(None) - self.update_status_tip(available_signals) - - def update_status_tip(self, available_signals): - """Display the number of displayed signals in the status tip.""" - if available_signals < self.total_signals: - self.statusbar.setStyleSheet(f'color: {self.active_color}') - else: - self.statusbar.setStyleSheet(f'color: {self.inactive_color}') - self.statusbar.showMessage( - f"{available_signals} out of {self.total_signals} signals displayed." - ) - - @pyqtSlot(QListWidgetItem, QListWidgetItem) - def display_specs(self, item, previous_item): - """Display the signal properties. - - 'item' is the item corresponding to the selected signal - 'previous_item' is unused. - """ - self.display_spectrogram() - if item is not None: - self.current_signal_name = item.text() - self.name_lab.setText(self.current_signal_name) - self.name_lab.setAlignment(Qt.AlignHCenter) - current_signal = self.db.loc[self.current_signal_name] - if not current_signal.at[Signal.WIKI_CLICKED]: - state = UrlButton.State.ACTIVE - else: - state = UrlButton.State.CLICKED - self.url_button.set_enabled(state) - category_code = current_signal.at[Signal.CATEGORY_CODE] - undef_freq = is_undef_freq(current_signal) - undef_band = is_undef_band(current_signal) - if not undef_freq: - self.freq_lab.setText( - format_numbers( - current_signal.at[Signal.INF_FREQ], - current_signal.at[Signal.SUP_FREQ] - ) - ) - else: - self.freq_lab.setText("Undefined") - if not undef_band: - self.band_lab.setText( - format_numbers( - current_signal.at[Signal.INF_BAND], - current_signal.at[Signal.SUP_BAND] - ) - ) - else: - self.band_lab.setText("Undefined") - - self.mode_lab.setText(current_signal.at[Signal.MODE]) - self.modul_lab.setText(current_signal.at[Signal.MODULATION]) - self.loc_lab.setText(current_signal.at[Signal.LOCATION]) - self.acf_lab.setText( - ACFValue.concat_strings(current_signal.at[Signal.ACF]) - ) - self.description_text.setText(current_signal.at[Signal.DESCRIPTION]) - for cat, cat_lab in zip(category_code, self.category_labels): - if cat == '0': - cat_lab.setStyleSheet(f"color: {self.inactive_color};") - elif cat == '1': - cat_lab.setStyleSheet(f"color: {self.active_color};") - self.set_band_range(current_signal) - self.audio_widget.set_audio_player(self.current_signal_name) - else: - self.url_button.set_disabled() - self.current_signal_name = '' - self.name_lab.setText("No Signal") - self.name_lab.setAlignment(Qt.AlignHCenter) - for lab in self.property_labels: - lab.setText(Constants.UNKNOWN) - for lab in self.category_labels: - lab.setStyleSheet(f"color: {self.inactive_color};") - self.set_band_range() - self.audio_widget.set_audio_player() - - def display_spectrogram(self): - """Display the selected signal's waterfall.""" - default_pic = Constants.DEFAULT_NOT_SELECTED - item = self.signals_list.currentItem() - if item: - spectrogram_name = item.text() - path_spectr = os.path.join( - Constants.SPECTRA_FOLDER, - spectrogram_name + Constants.SPECTRA_EXT - ) - if not QFileInfo(path_spectr).exists(): - path_spectr = Constants.DEFAULT_NOT_AVAILABLE - else: - path_spectr = default_pic - self.spectrogram.setPixmap(QPixmap(path_spectr)) - - def activate_band_category(self, band_label, activate=True): - """Highlight the given band_label. - - If activate is False remove the highlight (default to True). - """ - color = self.active_color if activate else self.inactive_color - for label in band_label: - label.setStyleSheet(f"color: {color};") - - def set_band_range(self, current_signal=None): - """Highlight the signal's band labels. - - If no signal is selected remove all highlights. - """ - if current_signal is not None and not is_undef_freq(current_signal): - lower_freq = safe_cast( - current_signal.at[Signal.INF_FREQ], int - ) - upper_freq = safe_cast( - current_signal.at[Signal.SUP_FREQ], int - ) - zipped = list(zip(Constants.BANDS, self.band_labels)) - for i, w in enumerate(zipped): - band, band_label = w - if lower_freq >= band.lower and lower_freq < band.upper: - self.activate_band_category(band_label) - for uband, uband_label in zipped[i + 1:]: - if upper_freq > uband.lower: - self.activate_band_category(uband_label) - else: - self.activate_band_category(uband_label, False) - break - else: - self.activate_band_category(band_label, False) - else: - for band_label in self.band_labels: - self.activate_band_category(band_label, False) - - @pyqtSlot() - def go_to_web_page_signal(self): - """Go the web page of the signal's wiki. - - Do nothing if no signal is selected. - """ - if self.current_signal_name: - self.url_button.set_clicked() - webbrowser.open(self.db.at[self.current_signal_name, Signal.URL]) - self.db.at[self.current_signal_name, Signal.WIKI_CLICKED] = True - - def closeEvent(self, event): - """Extends closeEvent of QMainWindow. - - Shutdown all active threads and close all open windows.""" - self.closing = True - if self.download_window.isVisible(): - self.download_window.close() - if self.space_weather_data.is_updating: - self.space_weather_data.shutdown_thread() - if self.forecast_data.is_updating: - self.forecast_data.shutdown_thread() - super().closeEvent(event) - - -if __name__ == '__main__': - # For executables running on Mac Os systems. - if IS_BINARY and IS_MAC and __BASE_FOLDER__ == os.curdir: - os.chdir(sys._MEIPASS) - - my_app = QApplication(sys.argv) - ARTEMIS_ICON = os.path.join(":", "icon", "default_pics", "Artemis3.500px.png") - img = QPixmap(ARTEMIS_ICON) - splash = QSplashScreen(img) - splash.show() - start = time() - while time() - start < 1.5: - sleep(0.001) - my_app.processEvents() - splash.close() - artemis = Artemis() - artemis.show() - sys.exit(my_app.exec_()) diff --git a/src/artemis.ui b/src/artemis.ui deleted file mode 100644 index 2e47e3d..0000000 --- a/src/artemis.ui +++ /dev/null @@ -1,9683 +0,0 @@ - - - diff --git a/src/audio_player.py b/src/audio_player.py deleted file mode 100644 index de542e1..0000000 --- a/src/audio_player.py +++ /dev/null @@ -1,175 +0,0 @@ -import math -import os -from pygame import mixer -from PyQt5.QtCore import QTimer, pyqtSlot, QObject - -import qtawesome as qta -from constants import Constants - - -class AudioPlayer(QObject): - """Subclass QObject. Audio player widget for the audio samples. - - The only public methods are the __init__ - method, set_audio_player, which loads the current file and refresh. - Everything else is managed internally.""" - - _TIME_STEP = 500 # Milliseconds. - - def __init__(self, play, - pause, - stop, - volume, - loop, - audio_progress, - active_color, - inactive_color): - """Initialize the player.""" - super().__init__() - self._active_color = active_color - self._inactive_color = inactive_color - self._paused = False - self._first_call = True - self._play = play - self._pause = pause - self._stop = stop - self._volume = volume - self._loop = loop - self._audio_progress = audio_progress - self._audio_file = None - self._timer = QTimer() - self._timer.timeout.connect(self._update_bar) - self._play.clicked.connect(self._play_audio) - self._pause.clicked.connect(self._pause_audio) - self._stop.clicked.connect(self._stop_audio) - self._volume.valueChanged.connect(self._set_volume) - self._loop.clicked.connect(self._set_loop_icon) - self._play.setIconSize(self._play.size()) - self._pause.setIconSize(self._pause.size()) - self._stop.setIconSize(self._stop.size()) - self._loop.setIconSize(self._loop.size()) - self.refresh(active_color, inactive_color) - - @pyqtSlot() - def _set_loop_icon(self): - """Set the icon for the loop audio button.""" - if self._loop.isChecked(): - loop_icon = qta.icon( - 'fa5s.redo-alt', - color=self._active_color, - color_disabled=self._inactive_color, - animation=qta.Spin(self._loop) - ) - else: - loop_icon = qta.icon( - 'fa5s.redo-alt', - color=self._active_color, - color_disabled=self._inactive_color - ) - self._loop.setIcon(loop_icon) - - def refresh(self, active_color, inactive_color): - """Repaint the buttons of the widgetd after the theme has changed.""" - self._active_color = active_color - self._inactive_color = inactive_color - self._play.setIcon(qta.icon('fa5s.play', - color=active_color, - color_disabled=inactive_color)) - self._pause.setIcon(qta.icon('fa5s.pause', - color=active_color, - color_disabled=inactive_color)) - self._stop.setIcon(qta.icon('fa5s.stop', - color=active_color, - color_disabled=inactive_color)) - self._set_loop_icon() - - @pyqtSlot() - def _set_volume(self): - """Set the volume of the audio samples.""" - if mixer.get_init(): - mixer.music.set_volume( - self._volume.value() / self._volume.maximum() - ) - - def _reset_audio_widget(self): - """Reset the widget. Stop all playing samples.""" - self._first_call = True - self._paused = False - if mixer.get_init(): - if mixer.music.get_busy(): - mixer.music.stop() - self._timer.stop() - mixer.quit() - self._audio_progress.reset() - self._enable_buttons(False, False, False) - - @pyqtSlot() - def _update_bar(self): - """Update the progress bar.""" - pos = mixer.music.get_pos() - if pos == -1: - self._timer.stop() - self._audio_progress.reset() - if self._loop.isChecked(): - self._play_audio() - self._enable_buttons(False, True, True) - else: - self._enable_buttons(True, False, False) - else: - self._audio_progress.setValue(pos) - - def _set_max_progress_bar(self): - """Set the maximum value of the progress bar.""" - self._audio_progress.setMaximum( - math.ceil(mixer.Sound(self._audio_file).get_length() * 1000) - ) - - def set_audio_player(self, fname=""): - """Set the current audio sample.""" - self._reset_audio_widget() - full_name = os.path.join( - Constants.AUDIO_FOLDER, - fname + '.ogg' - ) - if os.path.exists(full_name): - self._play.setEnabled(True) - self._audio_file = full_name - - @pyqtSlot() - def _play_audio(self): - """Play the audio sample.""" - if not self._paused: - if self._first_call: - self._first_call = False - mixer.init(48000, -16, 1, 1024) - mixer.music.load(self._audio_file) - self._set_volume() - self._set_max_progress_bar() - mixer.music.play() - else: - mixer.music.unpause() - self._paused = False - self._timer.start(self._TIME_STEP) - self._enable_buttons(False, True, True) - - @pyqtSlot() - def _stop_audio(self): - """Stop the audio sample.""" - mixer.music.stop() - self._audio_progress.reset() - self._timer.stop() - self._enable_buttons(True, False, False) - - @pyqtSlot() - def _pause_audio(self): - """Pause the audio sample.""" - mixer.music.pause() - self._timer.stop() - self._paused = True - self._enable_buttons(True, False, False) - - def _enable_buttons(self, play_en, pause_en, stop_en): - """Set the three buttons status.""" - self._play.setEnabled(play_en) - self._pause.setEnabled(pause_en) - self._stop.setEnabled(stop_en) diff --git a/src/cacert.pem b/src/cacert.pem deleted file mode 100644 index ab31516..0000000 --- a/src/cacert.pem +++ /dev/null @@ -1,4619 +0,0 @@ - -# Issuer: CN=GlobalSign Root CA O=GlobalSign nv-sa OU=Root CA -# Subject: CN=GlobalSign Root CA O=GlobalSign nv-sa OU=Root CA -# Label: "GlobalSign Root CA" -# Serial: 4835703278459707669005204 -# MD5 Fingerprint: 3e:45:52:15:09:51:92:e1:b7:5d:37:9f:b1:87:29:8a -# SHA1 Fingerprint: b1:bc:96:8b:d4:f4:9d:62:2a:a8:9a:81:f2:15:01:52:a4:1d:82:9c -# SHA256 Fingerprint: eb:d4:10:40:e4:bb:3e:c7:42:c9:e3:81:d3:1e:f2:a4:1a:48:b6:68:5c:96:e7:ce:f3:c1:df:6c:d4:33:1c:99 ------BEGIN CERTIFICATE----- -MIIDdTCCAl2gAwIBAgILBAAAAAABFUtaw5QwDQYJKoZIhvcNAQEFBQAwVzELMAkG -A1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jv -b3QgQ0ExGzAZBgNVBAMTEkdsb2JhbFNpZ24gUm9vdCBDQTAeFw05ODA5MDExMjAw -MDBaFw0yODAxMjgxMjAwMDBaMFcxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9i -YWxTaWduIG52LXNhMRAwDgYDVQQLEwdSb290IENBMRswGQYDVQQDExJHbG9iYWxT -aWduIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDaDuaZ -jc6j40+Kfvvxi4Mla+pIH/EqsLmVEQS98GPR4mdmzxzdzxtIK+6NiY6arymAZavp -xy0Sy6scTHAHoT0KMM0VjU/43dSMUBUc71DuxC73/OlS8pF94G3VNTCOXkNz8kHp -1Wrjsok6Vjk4bwY8iGlbKk3Fp1S4bInMm/k8yuX9ifUSPJJ4ltbcdG6TRGHRjcdG -snUOhugZitVtbNV4FpWi6cgKOOvyJBNPc1STE4U6G7weNLWLBYy5d4ux2x8gkasJ -U26Qzns3dLlwR5EiUWMWea6xrkEmCMgZK9FGqkjWZCrXgzT/LCrBbBlDSgeF59N8 -9iFo7+ryUp9/k5DPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8E -BTADAQH/MB0GA1UdDgQWBBRge2YaRQ2XyolQL30EzTSo//z9SzANBgkqhkiG9w0B -AQUFAAOCAQEA1nPnfE920I2/7LqivjTFKDK1fPxsnCwrvQmeU79rXqoRSLblCKOz -yj1hTdNGCbM+w6DjY1Ub8rrvrTnhQ7k4o+YviiY776BQVvnGCv04zcQLcFGUl5gE -38NflNUVyRRBnMRddWQVDf9VMOyGj/8N7yy5Y0b2qvzfvGn9LhJIZJrglfCm7ymP -AbEVtQwdpf5pLGkkeB6zpxxxYu7KyJesF12KwvhHhm4qxFYxldBniYUr+WymXUad -DKqC5JlR3XC321Y9YeRq4VzW9v493kHMB65jUr9TU/Qr6cf9tveCX4XSQRjbgbME -HMUfpIBvFSDJ3gyICh3WZlXi/EjJKSZp4A== ------END CERTIFICATE----- - -# Issuer: CN=GlobalSign O=GlobalSign OU=GlobalSign Root CA - R2 -# Subject: CN=GlobalSign O=GlobalSign OU=GlobalSign Root CA - R2 -# Label: "GlobalSign Root CA - R2" -# Serial: 4835703278459682885658125 -# MD5 Fingerprint: 94:14:77:7e:3e:5e:fd:8f:30:bd:41:b0:cf:e7:d0:30 -# SHA1 Fingerprint: 75:e0:ab:b6:13:85:12:27:1c:04:f8:5f:dd:de:38:e4:b7:24:2e:fe -# SHA256 Fingerprint: ca:42:dd:41:74:5f:d0:b8:1e:b9:02:36:2c:f9:d8:bf:71:9d:a1:bd:1b:1e:fc:94:6f:5b:4c:99:f4:2c:1b:9e ------BEGIN CERTIFICATE----- -MIIDujCCAqKgAwIBAgILBAAAAAABD4Ym5g0wDQYJKoZIhvcNAQEFBQAwTDEgMB4G -A1UECxMXR2xvYmFsU2lnbiBSb290IENBIC0gUjIxEzARBgNVBAoTCkdsb2JhbFNp -Z24xEzARBgNVBAMTCkdsb2JhbFNpZ24wHhcNMDYxMjE1MDgwMDAwWhcNMjExMjE1 -MDgwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxTaWduIFJvb3QgQ0EgLSBSMjETMBEG -A1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2lnbjCCASIwDQYJKoZI -hvcNAQEBBQADggEPADCCAQoCggEBAKbPJA6+Lm8omUVCxKs+IVSbC9N/hHD6ErPL -v4dfxn+G07IwXNb9rfF73OX4YJYJkhD10FPe+3t+c4isUoh7SqbKSaZeqKeMWhG8 -eoLrvozps6yWJQeXSpkqBy+0Hne/ig+1AnwblrjFuTosvNYSuetZfeLQBoZfXklq -tTleiDTsvHgMCJiEbKjNS7SgfQx5TfC4LcshytVsW33hoCmEofnTlEnLJGKRILzd -C9XZzPnqJworc5HGnRusyMvo4KD0L5CLTfuwNhv2GXqF4G3yYROIXJ/gkwpRl4pa -zq+r1feqCapgvdzZX99yqWATXgAByUr6P6TqBwMhAo6CygPCm48CAwEAAaOBnDCB -mTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUm+IH -V2ccHsBqBt5ZtJot39wZhi4wNgYDVR0fBC8wLTAroCmgJ4YlaHR0cDovL2NybC5n -bG9iYWxzaWduLm5ldC9yb290LXIyLmNybDAfBgNVHSMEGDAWgBSb4gdXZxwewGoG -3lm0mi3f3BmGLjANBgkqhkiG9w0BAQUFAAOCAQEAmYFThxxol4aR7OBKuEQLq4Gs -J0/WwbgcQ3izDJr86iw8bmEbTUsp9Z8FHSbBuOmDAGJFtqkIk7mpM0sYmsL4h4hO -291xNBrBVNpGP+DTKqttVCL1OmLNIG+6KYnX3ZHu01yiPqFbQfXf5WRDLenVOavS -ot+3i9DAgBkcRcAtjOj4LaR0VknFBbVPFd5uRHg5h6h+u/N5GJG79G+dwfCMNYxd -AfvDbbnvRG15RjF+Cv6pgsH/76tuIMRQyV+dTZsXjAzlAcmgQWpzU/qlULRuJQ/7 -TBj0/VLZjmmx6BEP3ojY+x1J96relc8geMJgEtslQIxq/H5COEBkEveegeGTLg== ------END CERTIFICATE----- - -# Issuer: CN=VeriSign Class 3 Public Primary Certification Authority - G3 O=VeriSign, Inc. OU=VeriSign Trust Network/(c) 1999 VeriSign, Inc. - For authorized use only -# Subject: CN=VeriSign Class 3 Public Primary Certification Authority - G3 O=VeriSign, Inc. OU=VeriSign Trust Network/(c) 1999 VeriSign, Inc. - For authorized use only -# Label: "Verisign Class 3 Public Primary Certification Authority - G3" -# Serial: 206684696279472310254277870180966723415 -# MD5 Fingerprint: cd:68:b6:a7:c7:c4:ce:75:e0:1d:4f:57:44:61:92:09 -# SHA1 Fingerprint: 13:2d:0d:45:53:4b:69:97:cd:b2:d5:c3:39:e2:55:76:60:9b:5c:c6 -# SHA256 Fingerprint: eb:04:cf:5e:b1:f3:9a:fa:76:2f:2b:b1:20:f2:96:cb:a5:20:c1:b9:7d:b1:58:95:65:b8:1c:b9:a1:7b:72:44 ------BEGIN CERTIFICATE----- -MIIEGjCCAwICEQCbfgZJoz5iudXukEhxKe9XMA0GCSqGSIb3DQEBBQUAMIHKMQsw -CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZl -cmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWdu -LCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlT -aWduIENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3Jp -dHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQswCQYD -VQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlT -aWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJ -bmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWdu -IENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg -LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMu6nFL8eB8aHm8b -N3O9+MlrlBIwT/A2R/XQkQr1F8ilYcEWQE37imGQ5XYgwREGfassbqb1EUGO+i2t -KmFZpGcmTNDovFJbcCAEWNF6yaRpvIMXZK0Fi7zQWM6NjPXr8EJJC52XJ2cybuGu -kxUccLwgTS8Y3pKI6GyFVxEa6X7jJhFUokWWVYPKMIno3Nij7SqAP395ZVc+FSBm -CC+Vk7+qRy+oRpfwEuL+wgorUeZ25rdGt+INpsyow0xZVYnm6FNcHOqd8GIWC6fJ -Xwzw3sJ2zq/3avL6QaaiMxTJ5Xpj055iN9WFZZ4O5lMkdBteHRJTW8cs54NJOxWu -imi5V5cCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAERSWwauSCPc/L8my/uRan2Te -2yFPhpk0djZX3dAVL8WtfxUfN2JzPtTnX84XA9s1+ivbrmAJXx5fj267Cz3qWhMe -DGBvtcC1IyIuBwvLqXTLR7sdwdela8wv0kL9Sd2nic9TutoAWii/gt/4uhMdUIaC -/Y4wjylGsB49Ndo4YhYYSq3mtlFs3q9i6wHQHiT+eo8SGhJouPtmmRQURVyu565p -F4ErWjfJXir0xuKhXFSbplQAz/DxwceYMBo7Nhbbo27q/a2ywtrvAkcTisDxszGt -TxzhT5yvDwyd93gN2PQ1VoDat20Xj50egWTh/sVFuq1ruQp6Tk9LhO5L8X3dEQ== ------END CERTIFICATE----- - -# Issuer: CN=Entrust.net Certification Authority (2048) O=Entrust.net OU=www.entrust.net/CPS_2048 incorp. by ref. (limits liab.)/(c) 1999 Entrust.net Limited -# Subject: CN=Entrust.net Certification Authority (2048) O=Entrust.net OU=www.entrust.net/CPS_2048 incorp. by ref. (limits liab.)/(c) 1999 Entrust.net Limited -# Label: "Entrust.net Premium 2048 Secure Server CA" -# Serial: 946069240 -# MD5 Fingerprint: ee:29:31:bc:32:7e:9a:e6:e8:b5:f7:51:b4:34:71:90 -# SHA1 Fingerprint: 50:30:06:09:1d:97:d4:f5:ae:39:f7:cb:e7:92:7d:7d:65:2d:34:31 -# SHA256 Fingerprint: 6d:c4:71:72:e0:1c:bc:b0:bf:62:58:0d:89:5f:e2:b8:ac:9a:d4:f8:73:80:1e:0c:10:b9:c8:37:d2:1e:b1:77 ------BEGIN CERTIFICATE----- -MIIEKjCCAxKgAwIBAgIEOGPe+DANBgkqhkiG9w0BAQUFADCBtDEUMBIGA1UEChML -RW50cnVzdC5uZXQxQDA+BgNVBAsUN3d3dy5lbnRydXN0Lm5ldC9DUFNfMjA0OCBp -bmNvcnAuIGJ5IHJlZi4gKGxpbWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAxOTk5 -IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNVBAMTKkVudHJ1c3QubmV0IENlcnRp -ZmljYXRpb24gQXV0aG9yaXR5ICgyMDQ4KTAeFw05OTEyMjQxNzUwNTFaFw0yOTA3 -MjQxNDE1MTJaMIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3d3d3 -LmVudHJ1c3QubmV0L0NQU18yMDQ4IGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxp -YWIuKTElMCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEG -A1UEAxMqRW50cnVzdC5uZXQgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgKDIwNDgp -MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArU1LqRKGsuqjIAcVFmQq -K0vRvwtKTY7tgHalZ7d4QMBzQshowNtTK91euHaYNZOLGp18EzoOH1u3Hs/lJBQe -sYGpjX24zGtLA/ECDNyrpUAkAH90lKGdCCmziAv1h3edVc3kw37XamSrhRSGlVuX -MlBvPci6Zgzj/L24ScF2iUkZ/cCovYmjZy/Gn7xxGWC4LeksyZB2ZnuU4q941mVT -XTzWnLLPKQP5L6RQstRIzgUyVYr9smRMDuSYB3Xbf9+5CFVghTAp+XtIpGmG4zU/ -HoZdenoVve8AjhUiVBcAkCaTvA5JaJG/+EfTnZVCwQ5N328mz8MYIWJmQ3DW1cAH -4QIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNV -HQ4EFgQUVeSB0RGAvtiJuQijMfmhJAkWuXAwDQYJKoZIhvcNAQEFBQADggEBADub -j1abMOdTmXx6eadNl9cZlZD7Bh/KM3xGY4+WZiT6QBshJ8rmcnPyT/4xmf3IDExo -U8aAghOY+rat2l098c5u9hURlIIM7j+VrxGrD9cv3h8Dj1csHsm7mhpElesYT6Yf -zX1XEC+bBAlahLVu2B064dae0Wx5XnkcFMXj0EyTO2U87d89vqbllRrDtRnDvV5b -u/8j72gZyxKTJ1wDLW8w0B62GqzeWvfRqqgnpv55gcR5mTNXuhKwqeBCbJPKVt7+ -bYQLCIt+jerXmCHG8+c8eS9enNFMFY3h7CI3zJpDC5fcgJCNs2ebb0gIFVbPv/Er -fF6adulZkMV8gzURZVE= ------END CERTIFICATE----- - -# Issuer: CN=Baltimore CyberTrust Root O=Baltimore OU=CyberTrust -# Subject: CN=Baltimore CyberTrust Root O=Baltimore OU=CyberTrust -# Label: "Baltimore CyberTrust Root" -# Serial: 33554617 -# MD5 Fingerprint: ac:b6:94:a5:9c:17:e0:d7:91:52:9b:b1:97:06:a6:e4 -# SHA1 Fingerprint: d4:de:20:d0:5e:66:fc:53:fe:1a:50:88:2c:78:db:28:52:ca:e4:74 -# SHA256 Fingerprint: 16:af:57:a9:f6:76:b0:ab:12:60:95:aa:5e:ba:de:f2:2a:b3:11:19:d6:44:ac:95:cd:4b:93:db:f3:f2:6a:eb ------BEGIN CERTIFICATE----- -MIIDdzCCAl+gAwIBAgIEAgAAuTANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQGEwJJ -RTESMBAGA1UEChMJQmFsdGltb3JlMRMwEQYDVQQLEwpDeWJlclRydXN0MSIwIAYD -VQQDExlCYWx0aW1vcmUgQ3liZXJUcnVzdCBSb290MB4XDTAwMDUxMjE4NDYwMFoX -DTI1MDUxMjIzNTkwMFowWjELMAkGA1UEBhMCSUUxEjAQBgNVBAoTCUJhbHRpbW9y -ZTETMBEGA1UECxMKQ3liZXJUcnVzdDEiMCAGA1UEAxMZQmFsdGltb3JlIEN5YmVy -VHJ1c3QgUm9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKMEuyKr -mD1X6CZymrV51Cni4eiVgLGw41uOKymaZN+hXe2wCQVt2yguzmKiYv60iNoS6zjr -IZ3AQSsBUnuId9Mcj8e6uYi1agnnc+gRQKfRzMpijS3ljwumUNKoUMMo6vWrJYeK -mpYcqWe4PwzV9/lSEy/CG9VwcPCPwBLKBsua4dnKM3p31vjsufFoREJIE9LAwqSu -XmD+tqYF/LTdB1kC1FkYmGP1pWPgkAx9XbIGevOF6uvUA65ehD5f/xXtabz5OTZy -dc93Uk3zyZAsuT3lySNTPx8kmCFcB5kpvcY67Oduhjprl3RjM71oGDHweI12v/ye -jl0qhqdNkNwnGjkCAwEAAaNFMEMwHQYDVR0OBBYEFOWdWTCCR1jMrPoIVDaGezq1 -BE3wMBIGA1UdEwEB/wQIMAYBAf8CAQMwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3 -DQEBBQUAA4IBAQCFDF2O5G9RaEIFoN27TyclhAO992T9Ldcw46QQF+vaKSm2eT92 -9hkTI7gQCvlYpNRhcL0EYWoSihfVCr3FvDB81ukMJY2GQE/szKN+OMY3EU/t3Wgx -jkzSswF07r51XgdIGn9w/xZchMB5hbgF/X++ZRGjD8ACtPhSNzkE1akxehi/oCr0 -Epn3o0WC4zxe9Z2etciefC7IpJ5OCBRLbf1wbWsaY71k5h+3zvDyny67G7fyUIhz -ksLi4xaNmjICq44Y3ekQEe5+NauQrz4wlHrQMz2nZQ/1/I6eYs9HRCwBXbsdtTLS -R9I4LtD+gdwyah617jzV/OeBHRnDJELqYzmp ------END CERTIFICATE----- - -# Issuer: CN=AddTrust External CA Root O=AddTrust AB OU=AddTrust External TTP Network -# Subject: CN=AddTrust External CA Root O=AddTrust AB OU=AddTrust External TTP Network -# Label: "AddTrust External Root" -# Serial: 1 -# MD5 Fingerprint: 1d:35:54:04:85:78:b0:3f:42:42:4d:bf:20:73:0a:3f -# SHA1 Fingerprint: 02:fa:f3:e2:91:43:54:68:60:78:57:69:4d:f5:e4:5b:68:85:18:68 -# SHA256 Fingerprint: 68:7f:a4:51:38:22:78:ff:f0:c8:b1:1f:8d:43:d5:76:67:1c:6e:b2:bc:ea:b4:13:fb:83:d9:65:d0:6d:2f:f2 ------BEGIN CERTIFICATE----- -MIIENjCCAx6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBvMQswCQYDVQQGEwJTRTEU -MBIGA1UEChMLQWRkVHJ1c3QgQUIxJjAkBgNVBAsTHUFkZFRydXN0IEV4dGVybmFs -IFRUUCBOZXR3b3JrMSIwIAYDVQQDExlBZGRUcnVzdCBFeHRlcm5hbCBDQSBSb290 -MB4XDTAwMDUzMDEwNDgzOFoXDTIwMDUzMDEwNDgzOFowbzELMAkGA1UEBhMCU0Ux -FDASBgNVBAoTC0FkZFRydXN0IEFCMSYwJAYDVQQLEx1BZGRUcnVzdCBFeHRlcm5h -bCBUVFAgTmV0d29yazEiMCAGA1UEAxMZQWRkVHJ1c3QgRXh0ZXJuYWwgQ0EgUm9v -dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALf3GjPm8gAELTngTlvt -H7xsD821+iO2zt6bETOXpClMfZOfvUq8k+0DGuOPz+VtUFrWlymUWoCwSXrbLpX9 -uMq/NzgtHj6RQa1wVsfwTz/oMp50ysiQVOnGXw94nZpAPA6sYapeFI+eh6FqUNzX -mk6vBbOmcZSccbNQYArHE504B4YCqOmoaSYYkKtMsE8jqzpPhNjfzp/haW+710LX -a0Tkx63ubUFfclpxCDezeWWkWaCUN/cALw3CknLa0Dhy2xSoRcRdKn23tNbE7qzN -E0S3ySvdQwAl+mG5aWpYIxG3pzOPVnVZ9c0p10a3CitlttNCbxWyuHv77+ldU9U0 -WicCAwEAAaOB3DCB2TAdBgNVHQ4EFgQUrb2YejS0Jvf6xCZU7wO94CTLVBowCwYD -VR0PBAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wgZkGA1UdIwSBkTCBjoAUrb2YejS0 -Jvf6xCZU7wO94CTLVBqhc6RxMG8xCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRU -cnVzdCBBQjEmMCQGA1UECxMdQWRkVHJ1c3QgRXh0ZXJuYWwgVFRQIE5ldHdvcmsx -IjAgBgNVBAMTGUFkZFRydXN0IEV4dGVybmFsIENBIFJvb3SCAQEwDQYJKoZIhvcN -AQEFBQADggEBALCb4IUlwtYj4g+WBpKdQZic2YR5gdkeWxQHIzZlj7DYd7usQWxH -YINRsPkyPef89iYTx4AWpb9a/IfPeHmJIZriTAcKhjW88t5RxNKWt9x+Tu5w/Rw5 -6wwCURQtjr0W4MHfRnXnJK3s9EK0hZNwEGe6nQY1ShjTK3rMUUKhemPR5ruhxSvC -Nr4TDea9Y355e6cJDUCrat2PisP29owaQgVR1EX1n6diIWgVIEM8med8vSTYqZEX -c4g/VhsxOBi0cQ+azcgOno4uG+GMmIPLHzHxREzGBHNJdmAPx/i9F4BrLunMTA5a -mnkPIAou1Z5jJh5VkpTYghdae9C8x49OhgQ= ------END CERTIFICATE----- - -# Issuer: CN=Entrust Root Certification Authority O=Entrust, Inc. OU=www.entrust.net/CPS is incorporated by reference/(c) 2006 Entrust, Inc. -# Subject: CN=Entrust Root Certification Authority O=Entrust, Inc. OU=www.entrust.net/CPS is incorporated by reference/(c) 2006 Entrust, Inc. -# Label: "Entrust Root Certification Authority" -# Serial: 1164660820 -# MD5 Fingerprint: d6:a5:c3:ed:5d:dd:3e:00:c1:3d:87:92:1f:1d:3f:e4 -# SHA1 Fingerprint: b3:1e:b1:b7:40:e3:6c:84:02:da:dc:37:d4:4d:f5:d4:67:49:52:f9 -# SHA256 Fingerprint: 73:c1:76:43:4f:1b:c6:d5:ad:f4:5b:0e:76:e7:27:28:7c:8d:e5:76:16:c1:e6:e6:14:1a:2b:2c:bc:7d:8e:4c ------BEGIN CERTIFICATE----- -MIIEkTCCA3mgAwIBAgIERWtQVDANBgkqhkiG9w0BAQUFADCBsDELMAkGA1UEBhMC -VVMxFjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xOTA3BgNVBAsTMHd3dy5lbnRydXN0 -Lm5ldC9DUFMgaXMgaW5jb3Jwb3JhdGVkIGJ5IHJlZmVyZW5jZTEfMB0GA1UECxMW -KGMpIDIwMDYgRW50cnVzdCwgSW5jLjEtMCsGA1UEAxMkRW50cnVzdCBSb290IENl -cnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA2MTEyNzIwMjM0MloXDTI2MTEyNzIw -NTM0MlowgbAxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1FbnRydXN0LCBJbmMuMTkw -NwYDVQQLEzB3d3cuZW50cnVzdC5uZXQvQ1BTIGlzIGluY29ycG9yYXRlZCBieSBy -ZWZlcmVuY2UxHzAdBgNVBAsTFihjKSAyMDA2IEVudHJ1c3QsIEluYy4xLTArBgNV -BAMTJEVudHJ1c3QgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASIwDQYJ -KoZIhvcNAQEBBQADggEPADCCAQoCggEBALaVtkNC+sZtKm9I35RMOVcF7sN5EUFo -Nu3s/poBj6E4KPz3EEZmLk0eGrEaTsbRwJWIsMn/MYszA9u3g3s+IIRe7bJWKKf4 -4LlAcTfFy0cOlypowCKVYhXbR9n10Cv/gkvJrT7eTNuQgFA/CYqEAOwwCj0Yzfv9 -KlmaI5UXLEWeH25DeW0MXJj+SKfFI0dcXv1u5x609mhF0YaDW6KKjbHjKYD+JXGI -rb68j6xSlkuqUY3kEzEZ6E5Nn9uss2rVvDlUccp6en+Q3X0dgNmBu1kmwhH+5pPi -94DkZfs0Nw4pgHBNrziGLp5/V6+eF67rHMsoIV+2HNjnogQi+dPa2MsCAwEAAaOB -sDCBrTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zArBgNVHRAEJDAi -gA8yMDA2MTEyNzIwMjM0MlqBDzIwMjYxMTI3MjA1MzQyWjAfBgNVHSMEGDAWgBRo -kORnpKZTgMeGZqTx90tD+4S9bTAdBgNVHQ4EFgQUaJDkZ6SmU4DHhmak8fdLQ/uE -vW0wHQYJKoZIhvZ9B0EABBAwDhsIVjcuMTo0LjADAgSQMA0GCSqGSIb3DQEBBQUA -A4IBAQCT1DCw1wMgKtD5Y+iRDAUgqV8ZyntyTtSx29CW+1RaGSwMCPeyvIWonX9t -O1KzKtvn1ISMY/YPyyYBkVBs9F8U4pN0wBOeMDpQ47RgxRzwIkSNcUesyBrJ6Zua -AGAT/3B+XxFNSRuzFVJ7yVTav52Vr2ua2J7p8eRDjeIRRDq/r72DQnNSi6q7pynP -9WQcCk3RvKqsnyrQ/39/2n3qse0wJcGE2jTSW3iDVuycNsMm4hH2Z0kdkquM++v/ -eu6FSqdQgPCnXEqULl8FmTxSQeDNtGPPAUO6nIPcj2A781q0tHuu2guQOHXvgR1m -0vdXcDazv/wor3ElhVsT/h5/WrQ8 ------END CERTIFICATE----- - -# Issuer: CN=GeoTrust Global CA O=GeoTrust Inc. -# Subject: CN=GeoTrust Global CA O=GeoTrust Inc. -# Label: "GeoTrust Global CA" -# Serial: 144470 -# MD5 Fingerprint: f7:75:ab:29:fb:51:4e:b7:77:5e:ff:05:3c:99:8e:f5 -# SHA1 Fingerprint: de:28:f4:a4:ff:e5:b9:2f:a3:c5:03:d1:a3:49:a7:f9:96:2a:82:12 -# SHA256 Fingerprint: ff:85:6a:2d:25:1d:cd:88:d3:66:56:f4:50:12:67:98:cf:ab:aa:de:40:79:9c:72:2d:e4:d2:b5:db:36:a7:3a ------BEGIN CERTIFICATE----- -MIIDVDCCAjygAwIBAgIDAjRWMA0GCSqGSIb3DQEBBQUAMEIxCzAJBgNVBAYTAlVT -MRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMRswGQYDVQQDExJHZW9UcnVzdCBHbG9i -YWwgQ0EwHhcNMDIwNTIxMDQwMDAwWhcNMjIwNTIxMDQwMDAwWjBCMQswCQYDVQQG -EwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEbMBkGA1UEAxMSR2VvVHJ1c3Qg -R2xvYmFsIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2swYYzD9 -9BcjGlZ+W988bDjkcbd4kdS8odhM+KhDtgPpTSEHCIjaWC9mOSm9BXiLnTjoBbdq -fnGk5sRgprDvgOSJKA+eJdbtg/OtppHHmMlCGDUUna2YRpIuT8rxh0PBFpVXLVDv -iS2Aelet8u5fa9IAjbkU+BQVNdnARqN7csiRv8lVK83Qlz6cJmTM386DGXHKTubU -1XupGc1V3sjs0l44U+VcT4wt/lAjNvxm5suOpDkZALeVAjmRCw7+OC7RHQWa9k0+ -bw8HHa8sHo9gOeL6NlMTOdReJivbPagUvTLrGAMoUgRx5aszPeE4uwc2hGKceeoW -MPRfwCvocWvk+QIDAQABo1MwUTAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTA -ephojYn7qwVkDBF9qn1luMrMTjAfBgNVHSMEGDAWgBTAephojYn7qwVkDBF9qn1l -uMrMTjANBgkqhkiG9w0BAQUFAAOCAQEANeMpauUvXVSOKVCUn5kaFOSPeCpilKIn -Z57QzxpeR+nBsqTP3UEaBU6bS+5Kb1VSsyShNwrrZHYqLizz/Tt1kL/6cdjHPTfS -tQWVYrmm3ok9Nns4d0iXrKYgjy6myQzCsplFAMfOEVEiIuCl6rYVSAlk6l5PdPcF -PseKUgzbFbS9bZvlxrFUaKnjaZC2mqUPuLk/IH2uSrW4nOQdtqvmlKXBx4Ot2/Un -hw4EbNX/3aBd7YdStysVAq45pmp06drE57xNNB6pXE0zX5IJL4hmXXeXxx12E6nV -5fEWCRE11azbJHFwLJhWC9kXtNHjUStedejV0NxPNO3CBWaAocvmMw== ------END CERTIFICATE----- - -# Issuer: CN=GeoTrust Universal CA O=GeoTrust Inc. -# Subject: CN=GeoTrust Universal CA O=GeoTrust Inc. -# Label: "GeoTrust Universal CA" -# Serial: 1 -# MD5 Fingerprint: 92:65:58:8b:a2:1a:31:72:73:68:5c:b4:a5:7a:07:48 -# SHA1 Fingerprint: e6:21:f3:35:43:79:05:9a:4b:68:30:9d:8a:2f:74:22:15:87:ec:79 -# SHA256 Fingerprint: a0:45:9b:9f:63:b2:25:59:f5:fa:5d:4c:6d:b3:f9:f7:2f:f1:93:42:03:35:78:f0:73:bf:1d:1b:46:cb:b9:12 ------BEGIN CERTIFICATE----- -MIIFaDCCA1CgAwIBAgIBATANBgkqhkiG9w0BAQUFADBFMQswCQYDVQQGEwJVUzEW -MBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEeMBwGA1UEAxMVR2VvVHJ1c3QgVW5pdmVy -c2FsIENBMB4XDTA0MDMwNDA1MDAwMFoXDTI5MDMwNDA1MDAwMFowRTELMAkGA1UE -BhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xHjAcBgNVBAMTFUdlb1RydXN0 -IFVuaXZlcnNhbCBDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAKYV -VaCjxuAfjJ0hUNfBvitbtaSeodlyWL0AG0y/YckUHUWCq8YdgNY96xCcOq9tJPi8 -cQGeBvV8Xx7BDlXKg5pZMK4ZyzBIle0iN430SppyZj6tlcDgFgDgEB8rMQ7XlFTT -QjOgNB0eRXbdT8oYN+yFFXoZCPzVx5zw8qkuEKmS5j1YPakWaDwvdSEYfyh3peFh -F7em6fgemdtzbvQKoiFs7tqqhZJmr/Z6a4LauiIINQ/PQvE1+mrufislzDoR5G2v -c7J2Ha3QsnhnGqQ5HFELZ1aD/ThdDc7d8Lsrlh/eezJS/R27tQahsiFepdaVaH/w -mZ7cRQg+59IJDTWU3YBOU5fXtQlEIGQWFwMCTFMNaN7VqnJNk22CDtucvc+081xd -VHppCZbW2xHBjXWotM85yM48vCR85mLK4b19p71XZQvk/iXttmkQ3CgaRr0BHdCX -teGYO8A3ZNY9lO4L4fUorgtWv3GLIylBjobFS1J72HGrH4oVpjuDWtdYAVHGTEHZ -f9hBZ3KiKN9gg6meyHv8U3NyWfWTehd2Ds735VzZC1U0oqpbtWpU5xPKV+yXbfRe -Bi9Fi1jUIxaS5BZuKGNZMN9QAZxjiRqf2xeUgnA3wySemkfWWspOqGmJch+RbNt+ -nhutxx9z3SxPGWX9f5NAEC7S8O08ni4oPmkmM8V7AgMBAAGjYzBhMA8GA1UdEwEB -/wQFMAMBAf8wHQYDVR0OBBYEFNq7LqqwDLiIJlF0XG0D08DYj3rWMB8GA1UdIwQY -MBaAFNq7LqqwDLiIJlF0XG0D08DYj3rWMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG -9w0BAQUFAAOCAgEAMXjmx7XfuJRAyXHEqDXsRh3ChfMoWIawC/yOsjmPRFWrZIRc -aanQmjg8+uUfNeVE44B5lGiku8SfPeE0zTBGi1QrlaXv9z+ZhP015s8xxtxqv6fX -IwjhmF7DWgh2qaavdy+3YL1ERmrvl/9zlcGO6JP7/TG37FcREUWbMPEaiDnBTzyn -ANXH/KttgCJwpQzgXQQpAvvLoJHRfNbDflDVnVi+QTjruXU8FdmbyUqDWcDaU/0z -uzYYm4UPFd3uLax2k7nZAY1IEKj79TiG8dsKxr2EoyNB3tZ3b4XUhRxQ4K5RirqN -Pnbiucon8l+f725ZDQbYKxek0nxru18UGkiPGkzns0ccjkxFKyDuSN/n3QmOGKja -QI2SJhFTYXNd673nxE0pN2HrrDktZy4W1vUAg4WhzH92xH3kt0tm7wNFYGm2DFKW -koRepqO1pD4r2czYG0eq8kTaT/kD6PAUyz/zg97QwVTjt+gKN02LIFkDMBmhLMi9 -ER/frslKxfMnZmaGrGiR/9nmUxwPi1xpZQomyB40w11Re9epnAahNt3ViZS82eQt -DF4JbAiXfKM9fJP/P6EUp8+1Xevb2xzEdt+Iub1FBZUbrvxGakyvSOPOrg/Sfuvm -bJxPgWp6ZKy7PtXny3YuxadIwVyQD8vIP/rmMuGNG2+k5o7Y+SlIis5z/iw= ------END CERTIFICATE----- - -# Issuer: CN=GeoTrust Universal CA 2 O=GeoTrust Inc. -# Subject: CN=GeoTrust Universal CA 2 O=GeoTrust Inc. -# Label: "GeoTrust Universal CA 2" -# Serial: 1 -# MD5 Fingerprint: 34:fc:b8:d0:36:db:9e:14:b3:c2:f2:db:8f:e4:94:c7 -# SHA1 Fingerprint: 37:9a:19:7b:41:85:45:35:0c:a6:03:69:f3:3c:2e:af:47:4f:20:79 -# SHA256 Fingerprint: a0:23:4f:3b:c8:52:7c:a5:62:8e:ec:81:ad:5d:69:89:5d:a5:68:0d:c9:1d:1c:b8:47:7f:33:f8:78:b9:5b:0b ------BEGIN CERTIFICATE----- -MIIFbDCCA1SgAwIBAgIBATANBgkqhkiG9w0BAQUFADBHMQswCQYDVQQGEwJVUzEW -MBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEgMB4GA1UEAxMXR2VvVHJ1c3QgVW5pdmVy -c2FsIENBIDIwHhcNMDQwMzA0MDUwMDAwWhcNMjkwMzA0MDUwMDAwWjBHMQswCQYD -VQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEgMB4GA1UEAxMXR2VvVHJ1 -c3QgVW5pdmVyc2FsIENBIDIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoIC -AQCzVFLByT7y2dyxUxpZKeexw0Uo5dfR7cXFS6GqdHtXr0om/Nj1XqduGdt0DE81 -WzILAePb63p3NeqqWuDW6KFXlPCQo3RWlEQwAx5cTiuFJnSCegx2oG9NzkEtoBUG -FF+3Qs17j1hhNNwqCPkuwwGmIkQcTAeC5lvO0Ep8BNMZcyfwqph/Lq9O64ceJHdq -XbboW0W63MOhBW9Wjo8QJqVJwy7XQYci4E+GymC16qFjwAGXEHm9ADwSbSsVsaxL -se4YuU6W3Nx2/zu+z18DwPw76L5GG//aQMJS9/7jOvdqdzXQ2o3rXhhqMcceujwb -KNZrVMaqW9eiLBsZzKIC9ptZvTdrhrVtgrrY6slWvKk2WP0+GfPtDCapkzj4T8Fd -IgbQl+rhrcZV4IErKIM6+vR7IVEAvlI4zs1meaj0gVbi0IMJR1FbUGrP20gaXT73 -y/Zl92zxlfgCOzJWgjl6W70viRu/obTo/3+NjN8D8WBOWBFM66M/ECuDmgFz2ZRt -hAAnZqzwcEAJQpKtT5MNYQlRJNiS1QuUYbKHsu3/mjX/hVTK7URDrBs8FmtISgoc -QIgfksILAAX/8sgCSqSqqcyZlpwvWOB94b67B9xfBHJcMTTD7F8t4D1kkCLm0ey4 -Lt1ZrtmhN79UNdxzMk+MBB4zsslG8dhcyFVQyWi9qLo2CQIDAQABo2MwYTAPBgNV -HRMBAf8EBTADAQH/MB0GA1UdDgQWBBR281Xh+qQ2+/CfXGJx7Tz0RzgQKzAfBgNV -HSMEGDAWgBR281Xh+qQ2+/CfXGJx7Tz0RzgQKzAOBgNVHQ8BAf8EBAMCAYYwDQYJ -KoZIhvcNAQEFBQADggIBAGbBxiPz2eAubl/oz66wsCVNK/g7WJtAJDday6sWSf+z -dXkzoS9tcBc0kf5nfo/sm+VegqlVHy/c1FEHEv6sFj4sNcZj/NwQ6w2jqtB8zNHQ -L1EuxBRa3ugZ4T7GzKQp5y6EqgYweHZUcyiYWTjgAA1i00J9IZ+uPTqM1fp3DRgr -Fg5fNuH8KrUwJM/gYwx7WBr+mbpCErGR9Hxo4sjoryzqyX6uuyo9DRXcNJW2GHSo -ag/HtPQTxORb7QrSpJdMKu0vbBKJPfEncKpqA1Ihn0CoZ1Dy81of398j9tx4TuaY -T1U6U+Pv8vSfx3zYWK8pIpe44L2RLrB27FcRz+8pRPPphXpgY+RdM4kX2TGq2tbz -GDVyz4crL2MjhF2EjD9XoIj8mZEoJmmZ1I+XRL6O1UixpCgp8RW04eWe3fiPpm8m -1wk8OhwRDqZsN/etRIcsKMfYdIKz0G9KV7s1KSegi+ghp4dkNl3M2Basx7InQJJV -OCiNUW7dFGdTbHFcJoRNdVq2fmBWqU2t+5sel/MN2dKXVHfaPRK34B7vCAas+YWH -6aLcr34YEoP9VhdBLtUpgn2Z9DH2canPLAEnpQW5qrJITirvn5NSUZU8UnOOVkwX -QMAJKOSLakhT2+zNVVXxxvjpoixMptEmX36vWkzaH6byHCx+rgIW0lbQL1dTR+iS ------END CERTIFICATE----- - -# Issuer: CN=AAA Certificate Services O=Comodo CA Limited -# Subject: CN=AAA Certificate Services O=Comodo CA Limited -# Label: "Comodo AAA Services root" -# Serial: 1 -# MD5 Fingerprint: 49:79:04:b0:eb:87:19:ac:47:b0:bc:11:51:9b:74:d0 -# SHA1 Fingerprint: d1:eb:23:a4:6d:17:d6:8f:d9:25:64:c2:f1:f1:60:17:64:d8:e3:49 -# SHA256 Fingerprint: d7:a7:a0:fb:5d:7e:27:31:d7:71:e9:48:4e:bc:de:f7:1d:5f:0c:3e:0a:29:48:78:2b:c8:3e:e0:ea:69:9e:f4 ------BEGIN CERTIFICATE----- -MIIEMjCCAxqgAwIBAgIBATANBgkqhkiG9w0BAQUFADB7MQswCQYDVQQGEwJHQjEb -MBkGA1UECAwSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRow -GAYDVQQKDBFDb21vZG8gQ0EgTGltaXRlZDEhMB8GA1UEAwwYQUFBIENlcnRpZmlj -YXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAwMDAwMFoXDTI4MTIzMTIzNTk1OVowezEL -MAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UE -BwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxITAfBgNVBAMM -GEFBQSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEP -ADCCAQoCggEBAL5AnfRu4ep2hxxNRUSOvkbIgwadwSr+GB+O5AL686tdUIoWMQua -BtDFcCLNSS1UY8y2bmhGC1Pqy0wkwLxyTurxFa70VJoSCsN6sjNg4tqJVfMiWPPe -3M/vg4aijJRPn2jymJBGhCfHdr/jzDUsi14HZGWCwEiwqJH5YZ92IFCokcdmtet4 -YgNW8IoaE+oxox6gmf049vYnMlhvB/VruPsUK6+3qszWY19zjNoFmag4qMsXeDZR -rOme9Hg6jc8P2ULimAyrL58OAd7vn5lJ8S3frHRNG5i1R8XlKdH5kBjHYpy+g8cm -ez6KJcfA3Z3mNWgQIJ2P2N7Sw4ScDV7oL8kCAwEAAaOBwDCBvTAdBgNVHQ4EFgQU -oBEKIz6W8Qfs4q8p74Klf9AwpLQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQF -MAMBAf8wewYDVR0fBHQwcjA4oDagNIYyaHR0cDovL2NybC5jb21vZG9jYS5jb20v -QUFBQ2VydGlmaWNhdGVTZXJ2aWNlcy5jcmwwNqA0oDKGMGh0dHA6Ly9jcmwuY29t -b2RvLm5ldC9BQUFDZXJ0aWZpY2F0ZVNlcnZpY2VzLmNybDANBgkqhkiG9w0BAQUF -AAOCAQEACFb8AvCb6P+k+tZ7xkSAzk/ExfYAWMymtrwUSWgEdujm7l3sAg9g1o1Q -GE8mTgHj5rCl7r+8dFRBv/38ErjHT1r0iWAFf2C3BUrz9vHCv8S5dIa2LX1rzNLz -Rt0vxuBqw8M0Ayx9lt1awg6nCpnBBYurDC/zXDrPbDdVCYfeU0BsWO/8tqtlbgT2 -G9w84FoVxp7Z8VlIMCFlA2zs6SFz7JsDoeA3raAVGI/6ugLOpyypEBMs1OUIJqsi -l2D4kF501KKaU73yqWjgom7C12yxow+ev+to51byrvLjKzg6CYG1a4XXvi3tPxq3 -smPi9WIsgtRqAEFQ8TmDn5XpNpaYbg== ------END CERTIFICATE----- - -# Issuer: CN=QuoVadis Root Certification Authority O=QuoVadis Limited OU=Root Certification Authority -# Subject: CN=QuoVadis Root Certification Authority O=QuoVadis Limited OU=Root Certification Authority -# Label: "QuoVadis Root CA" -# Serial: 985026699 -# MD5 Fingerprint: 27:de:36:fe:72:b7:00:03:00:9d:f4:f0:1e:6c:04:24 -# SHA1 Fingerprint: de:3f:40:bd:50:93:d3:9b:6c:60:f6:da:bc:07:62:01:00:89:76:c9 -# SHA256 Fingerprint: a4:5e:de:3b:bb:f0:9c:8a:e1:5c:72:ef:c0:72:68:d6:93:a2:1c:99:6f:d5:1e:67:ca:07:94:60:fd:6d:88:73 ------BEGIN CERTIFICATE----- -MIIF0DCCBLigAwIBAgIEOrZQizANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJC -TTEZMBcGA1UEChMQUXVvVmFkaXMgTGltaXRlZDElMCMGA1UECxMcUm9vdCBDZXJ0 -aWZpY2F0aW9uIEF1dGhvcml0eTEuMCwGA1UEAxMlUXVvVmFkaXMgUm9vdCBDZXJ0 -aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wMTAzMTkxODMzMzNaFw0yMTAzMTcxODMz -MzNaMH8xCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMSUw -IwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MS4wLAYDVQQDEyVR -dW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG -9w0BAQEFAAOCAQ8AMIIBCgKCAQEAv2G1lVO6V/z68mcLOhrfEYBklbTRvM16z/Yp -li4kVEAkOPcahdxYTMukJ0KX0J+DisPkBgNbAKVRHnAEdOLB1Dqr1607BxgFjv2D -rOpm2RgbaIr1VxqYuvXtdj182d6UajtLF8HVj71lODqV0D1VNk7feVcxKh7YWWVJ -WCCYfqtffp/p1k3sg3Spx2zY7ilKhSoGFPlU5tPaZQeLYzcS19Dsw3sgQUSj7cug -F+FxZc4dZjH3dgEZyH0DWLaVSR2mEiboxgx24ONmy+pdpibu5cxfvWenAScOospU -xbF6lR1xHkopigPcakXBpBlebzbNw6Kwt/5cOOJSvPhEQ+aQuwIDAQABo4ICUjCC -Ak4wPQYIKwYBBQUHAQEEMTAvMC0GCCsGAQUFBzABhiFodHRwczovL29jc3AucXVv -dmFkaXNvZmZzaG9yZS5jb20wDwYDVR0TAQH/BAUwAwEB/zCCARoGA1UdIASCAREw -ggENMIIBCQYJKwYBBAG+WAABMIH7MIHUBggrBgEFBQcCAjCBxxqBxFJlbGlhbmNl -IG9uIHRoZSBRdW9WYWRpcyBSb290IENlcnRpZmljYXRlIGJ5IGFueSBwYXJ0eSBh -c3N1bWVzIGFjY2VwdGFuY2Ugb2YgdGhlIHRoZW4gYXBwbGljYWJsZSBzdGFuZGFy -ZCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1c2UsIGNlcnRpZmljYXRpb24gcHJh -Y3RpY2VzLCBhbmQgdGhlIFF1b1ZhZGlzIENlcnRpZmljYXRlIFBvbGljeS4wIgYI -KwYBBQUHAgEWFmh0dHA6Ly93d3cucXVvdmFkaXMuYm0wHQYDVR0OBBYEFItLbe3T -KbkGGew5Oanwl4Rqy+/fMIGuBgNVHSMEgaYwgaOAFItLbe3TKbkGGew5Oanwl4Rq -y+/foYGEpIGBMH8xCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1p -dGVkMSUwIwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MS4wLAYD -VQQDEyVRdW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggQ6tlCL -MA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAitQUtf70mpKnGdSk -fnIYj9lofFIk3WdvOXrEql494liwTXCYhGHoG+NpGA7O+0dQoE7/8CQfvbLO9Sf8 -7C9TqnN7Az10buYWnuulLsS/VidQK2K6vkscPFVcQR0kvoIgR13VRH56FmjffU1R -cHhXHTMe/QKZnAzNCgVPx7uOpHX6Sm2xgI4JVrmcGmD+XcHXetwReNDWXcG31a0y -mQM6isxUJTkxgXsTIlG6Rmyhu576BGxJJnSP0nPrzDCi5upZIof4l/UO/erMkqQW -xFIY6iHOsfHmhIHluqmGKPJDWl0Snawe2ajlCmqnf6CHKc/yiU3U7MXi5nrQNiOK -SnQ2+Q== ------END CERTIFICATE----- - -# Issuer: CN=QuoVadis Root CA 2 O=QuoVadis Limited -# Subject: CN=QuoVadis Root CA 2 O=QuoVadis Limited -# Label: "QuoVadis Root CA 2" -# Serial: 1289 -# MD5 Fingerprint: 5e:39:7b:dd:f8:ba:ec:82:e9:ac:62:ba:0c:54:00:2b -# SHA1 Fingerprint: ca:3a:fb:cf:12:40:36:4b:44:b2:16:20:88:80:48:39:19:93:7c:f7 -# SHA256 Fingerprint: 85:a0:dd:7d:d7:20:ad:b7:ff:05:f8:3d:54:2b:20:9d:c7:ff:45:28:f7:d6:77:b1:83:89:fe:a5:e5:c4:9e:86 ------BEGIN CERTIFICATE----- -MIIFtzCCA5+gAwIBAgICBQkwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0x -GTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJv -b3QgQ0EgMjAeFw0wNjExMjQxODI3MDBaFw0zMTExMjQxODIzMzNaMEUxCzAJBgNV -BAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMRswGQYDVQQDExJRdW9W -YWRpcyBSb290IENBIDIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCa -GMpLlA0ALa8DKYrwD4HIrkwZhR0In6spRIXzL4GtMh6QRr+jhiYaHv5+HBg6XJxg -Fyo6dIMzMH1hVBHL7avg5tKifvVrbxi3Cgst/ek+7wrGsxDp3MJGF/hd/aTa/55J -WpzmM+Yklvc/ulsrHHo1wtZn/qtmUIttKGAr79dgw8eTvI02kfN/+NsRE8Scd3bB -rrcCaoF6qUWD4gXmuVbBlDePSHFjIuwXZQeVikvfj8ZaCuWw419eaxGrDPmF60Tp -+ARz8un+XJiM9XOva7R+zdRcAitMOeGylZUtQofX1bOQQ7dsE/He3fbE+Ik/0XX1 -ksOR1YqI0JDs3G3eicJlcZaLDQP9nL9bFqyS2+r+eXyt66/3FsvbzSUr5R/7mp/i -Ucw6UwxI5g69ybR2BlLmEROFcmMDBOAENisgGQLodKcftslWZvB1JdxnwQ5hYIiz -PtGo/KPaHbDRsSNU30R2be1B2MGyIrZTHN81Hdyhdyox5C315eXbyOD/5YDXC2Og -/zOhD7osFRXql7PSorW+8oyWHhqPHWykYTe5hnMz15eWniN9gqRMgeKh0bpnX5UH -oycR7hYQe7xFSkyyBNKr79X9DFHOUGoIMfmR2gyPZFwDwzqLID9ujWc9Otb+fVuI -yV77zGHcizN300QyNQliBJIWENieJ0f7OyHj+OsdWwIDAQABo4GwMIGtMA8GA1Ud -EwEB/wQFMAMBAf8wCwYDVR0PBAQDAgEGMB0GA1UdDgQWBBQahGK8SEwzJQTU7tD2 -A8QZRtGUazBuBgNVHSMEZzBlgBQahGK8SEwzJQTU7tD2A8QZRtGUa6FJpEcwRTEL -MAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMT -ElF1b1ZhZGlzIFJvb3QgQ0EgMoICBQkwDQYJKoZIhvcNAQEFBQADggIBAD4KFk2f -BluornFdLwUvZ+YTRYPENvbzwCYMDbVHZF34tHLJRqUDGCdViXh9duqWNIAXINzn -g/iN/Ae42l9NLmeyhP3ZRPx3UIHmfLTJDQtyU/h2BwdBR5YM++CCJpNVjP4iH2Bl -fF/nJrP3MpCYUNQ3cVX2kiF495V5+vgtJodmVjB3pjd4M1IQWK4/YY7yarHvGH5K -WWPKjaJW1acvvFYfzznB4vsKqBUsfU16Y8Zsl0Q80m/DShcK+JDSV6IZUaUtl0Ha -B0+pUNqQjZRG4T7wlP0QADj1O+hA4bRuVhogzG9Yje0uRY/W6ZM/57Es3zrWIozc -hLsib9D45MY56QSIPMO661V6bYCZJPVsAfv4l7CUW+v90m/xd2gNNWQjrLhVoQPR -TUIZ3Ph1WVaj+ahJefivDrkRoHy3au000LYmYjgahwz46P0u05B/B5EqHdZ+XIWD -mbA4CD/pXvk1B+TJYm5Xf6dQlfe6yJvmjqIBxdZmv3lh8zwc4bmCXF2gw+nYSL0Z -ohEUGW6yhhtoPkg3Goi3XZZenMfvJ2II4pEZXNLxId26F0KCl3GBUzGpn/Z9Yr9y -4aOTHcyKJloJONDO1w2AFrR4pTqHTI2KpdVGl/IsELm8VCLAAVBpQ570su9t+Oza -8eOx79+Rj1QqCyXBJhnEUhAFZdWCEOrCMc0u ------END CERTIFICATE----- - -# Issuer: CN=QuoVadis Root CA 3 O=QuoVadis Limited -# Subject: CN=QuoVadis Root CA 3 O=QuoVadis Limited -# Label: "QuoVadis Root CA 3" -# Serial: 1478 -# MD5 Fingerprint: 31:85:3c:62:94:97:63:b9:aa:fd:89:4e:af:6f:e0:cf -# SHA1 Fingerprint: 1f:49:14:f7:d8:74:95:1d:dd:ae:02:c0:be:fd:3a:2d:82:75:51:85 -# SHA256 Fingerprint: 18:f1:fc:7f:20:5d:f8:ad:dd:eb:7f:e0:07:dd:57:e3:af:37:5a:9c:4d:8d:73:54:6b:f4:f1:fe:d1:e1:8d:35 ------BEGIN CERTIFICATE----- -MIIGnTCCBIWgAwIBAgICBcYwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0x -GTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJv -b3QgQ0EgMzAeFw0wNjExMjQxOTExMjNaFw0zMTExMjQxOTA2NDRaMEUxCzAJBgNV -BAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMRswGQYDVQQDExJRdW9W -YWRpcyBSb290IENBIDMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDM -V0IWVJzmmNPTTe7+7cefQzlKZbPoFog02w1ZkXTPkrgEQK0CSzGrvI2RaNggDhoB -4hp7Thdd4oq3P5kazethq8Jlph+3t723j/z9cI8LoGe+AaJZz3HmDyl2/7FWeUUr -H556VOijKTVopAFPD6QuN+8bv+OPEKhyq1hX51SGyMnzW9os2l2ObjyjPtr7guXd -8lyyBTNvijbO0BNO/79KDDRMpsMhvVAEVeuxu537RR5kFd5VAYwCdrXLoT9Cabwv -vWhDFlaJKjdhkf2mrk7AyxRllDdLkgbvBNDInIjbC3uBr7E9KsRlOni27tyAsdLT -mZw67mtaa7ONt9XOnMK+pUsvFrGeaDsGb659n/je7Mwpp5ijJUMv7/FfJuGITfhe -btfZFG4ZM2mnO4SJk8RTVROhUXhA+LjJou57ulJCg54U7QVSWllWp5f8nT8KKdjc -T5EOE7zelaTfi5m+rJsziO+1ga8bxiJTyPbH7pcUsMV8eFLI8M5ud2CEpukqdiDt -WAEXMJPpGovgc2PZapKUSU60rUqFxKMiMPwJ7Wgic6aIDFUhWMXhOp8q3crhkODZ -c6tsgLjoC2SToJyMGf+z0gzskSaHirOi4XCPLArlzW1oUevaPwV/izLmE1xr/l9A -4iLItLRkT9a6fUg+qGkM17uGcclzuD87nSVL2v9A6wIDAQABo4IBlTCCAZEwDwYD -VR0TAQH/BAUwAwEB/zCB4QYDVR0gBIHZMIHWMIHTBgkrBgEEAb5YAAMwgcUwgZMG -CCsGAQUFBwICMIGGGoGDQW55IHVzZSBvZiB0aGlzIENlcnRpZmljYXRlIGNvbnN0 -aXR1dGVzIGFjY2VwdGFuY2Ugb2YgdGhlIFF1b1ZhZGlzIFJvb3QgQ0EgMyBDZXJ0 -aWZpY2F0ZSBQb2xpY3kgLyBDZXJ0aWZpY2F0aW9uIFByYWN0aWNlIFN0YXRlbWVu -dC4wLQYIKwYBBQUHAgEWIWh0dHA6Ly93d3cucXVvdmFkaXNnbG9iYWwuY29tL2Nw -czALBgNVHQ8EBAMCAQYwHQYDVR0OBBYEFPLAE+CCQz777i9nMpY1XNu4ywLQMG4G -A1UdIwRnMGWAFPLAE+CCQz777i9nMpY1XNu4ywLQoUmkRzBFMQswCQYDVQQGEwJC -TTEZMBcGA1UEChMQUXVvVmFkaXMgTGltaXRlZDEbMBkGA1UEAxMSUXVvVmFkaXMg -Um9vdCBDQSAzggIFxjANBgkqhkiG9w0BAQUFAAOCAgEAT62gLEz6wPJv92ZVqyM0 -7ucp2sNbtrCD2dDQ4iH782CnO11gUyeim/YIIirnv6By5ZwkajGxkHon24QRiSem -d1o417+shvzuXYO8BsbRd2sPbSQvS3pspweWyuOEn62Iix2rFo1bZhfZFvSLgNLd -+LJ2w/w4E6oM3kJpK27zPOuAJ9v1pkQNn1pVWQvVDVJIxa6f8i+AxeoyUDUSly7B -4f/xI4hROJ/yZlZ25w9Rl6VSDE1JUZU2Pb+iSwwQHYaZTKrzchGT5Or2m9qoXadN -t54CrnMAyNojA+j56hl0YgCUyyIgvpSnWbWCar6ZeXqp8kokUvd0/bpO5qgdAm6x -DYBEwa7TIzdfu4V8K5Iu6H6li92Z4b8nby1dqnuH/grdS/yO9SbkbnBCbjPsMZ57 -k8HkyWkaPcBrTiJt7qtYTcbQQcEr6k8Sh17rRdhs9ZgC06DYVYoGmRmioHfRMJ6s -zHXug/WwYjnPbFfiTNKRCw51KBuav/0aQ/HKd/s7j2G4aSgWQgRecCocIdiP4b0j -Wy10QJLZYxkNc91pvGJHvOB0K7Lrfb5BG7XARsWhIstfTsEokt4YutUqKLsRixeT -mJlglFwjz1onl14LBQaTNx47aTbrqZ5hHY8y2o4M1nQ+ewkk2gF3R8Q7zTSMmfXK -4SVhM7JZG+Ju1zdXtg2pEto= ------END CERTIFICATE----- - -# Issuer: O=SECOM Trust.net OU=Security Communication RootCA1 -# Subject: O=SECOM Trust.net OU=Security Communication RootCA1 -# Label: "Security Communication Root CA" -# Serial: 0 -# MD5 Fingerprint: f1:bc:63:6a:54:e0:b5:27:f5:cd:e7:1a:e3:4d:6e:4a -# SHA1 Fingerprint: 36:b1:2b:49:f9:81:9e:d7:4c:9e:bc:38:0f:c6:56:8f:5d:ac:b2:f7 -# SHA256 Fingerprint: e7:5e:72:ed:9f:56:0e:ec:6e:b4:80:00:73:a4:3f:c3:ad:19:19:5a:39:22:82:01:78:95:97:4a:99:02:6b:6c ------BEGIN CERTIFICATE----- -MIIDWjCCAkKgAwIBAgIBADANBgkqhkiG9w0BAQUFADBQMQswCQYDVQQGEwJKUDEY -MBYGA1UEChMPU0VDT00gVHJ1c3QubmV0MScwJQYDVQQLEx5TZWN1cml0eSBDb21t -dW5pY2F0aW9uIFJvb3RDQTEwHhcNMDMwOTMwMDQyMDQ5WhcNMjMwOTMwMDQyMDQ5 -WjBQMQswCQYDVQQGEwJKUDEYMBYGA1UEChMPU0VDT00gVHJ1c3QubmV0MScwJQYD -VQQLEx5TZWN1cml0eSBDb21tdW5pY2F0aW9uIFJvb3RDQTEwggEiMA0GCSqGSIb3 -DQEBAQUAA4IBDwAwggEKAoIBAQCzs/5/022x7xZ8V6UMbXaKL0u/ZPtM7orw8yl8 -9f/uKuDp6bpbZCKamm8sOiZpUQWZJtzVHGpxxpp9Hp3dfGzGjGdnSj74cbAZJ6kJ -DKaVv0uMDPpVmDvY6CKhS3E4eayXkmmziX7qIWgGmBSWh9JhNrxtJ1aeV+7AwFb9 -Ms+k2Y7CI9eNqPPYJayX5HA49LY6tJ07lyZDo6G8SVlyTCMwhwFY9k6+HGhWZq/N -QV3Is00qVUarH9oe4kA92819uZKAnDfdDJZkndwi92SL32HeFZRSFaB9UslLqCHJ -xrHty8OVYNEP8Ktw+N/LTX7s1vqr2b1/VPKl6Xn62dZ2JChzAgMBAAGjPzA9MB0G -A1UdDgQWBBSgc0mZaNyFW2XjmygvV5+9M7wHSDALBgNVHQ8EBAMCAQYwDwYDVR0T -AQH/BAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEAaECpqLvkT115swW1F7NgE+vG -kl3g0dNq/vu+m22/xwVtWSDEHPC32oRYAmP6SBbvT6UL90qY8j+eG61Ha2POCEfr -Uj94nK9NrvjVT8+amCoQQTlSxN3Zmw7vkwGusi7KaEIkQmywszo+zenaSMQVy+n5 -Bw+SUEmK3TGXX8npN6o7WWWXlDLJs58+OmJYxUmtYg5xpTKqL8aJdkNAExNnPaJU -JRDL8Try2frbSVa7pv6nQTXD4IhhyYjH3zYQIphZ6rBK+1YWc26sTfcioU+tHXot -RSflMMFe8toTyyVCUZVHA4xsIcx0Qu1T/zOLjw9XARYvz6buyXAiFL39vmwLAw== ------END CERTIFICATE----- - -# Issuer: CN=Sonera Class2 CA O=Sonera -# Subject: CN=Sonera Class2 CA O=Sonera -# Label: "Sonera Class 2 Root CA" -# Serial: 29 -# MD5 Fingerprint: a3:ec:75:0f:2e:88:df:fa:48:01:4e:0b:5c:48:6f:fb -# SHA1 Fingerprint: 37:f7:6d:e6:07:7c:90:c5:b1:3e:93:1a:b7:41:10:b4:f2:e4:9a:27 -# SHA256 Fingerprint: 79:08:b4:03:14:c1:38:10:0b:51:8d:07:35:80:7f:fb:fc:f8:51:8a:00:95:33:71:05:ba:38:6b:15:3d:d9:27 ------BEGIN CERTIFICATE----- -MIIDIDCCAgigAwIBAgIBHTANBgkqhkiG9w0BAQUFADA5MQswCQYDVQQGEwJGSTEP -MA0GA1UEChMGU29uZXJhMRkwFwYDVQQDExBTb25lcmEgQ2xhc3MyIENBMB4XDTAx -MDQwNjA3Mjk0MFoXDTIxMDQwNjA3Mjk0MFowOTELMAkGA1UEBhMCRkkxDzANBgNV -BAoTBlNvbmVyYTEZMBcGA1UEAxMQU29uZXJhIENsYXNzMiBDQTCCASIwDQYJKoZI -hvcNAQEBBQADggEPADCCAQoCggEBAJAXSjWdyvANlsdE+hY3/Ei9vX+ALTU74W+o -Z6m/AxxNjG8yR9VBaKQTBME1DJqEQ/xcHf+Js+gXGM2RX/uJ4+q/Tl18GybTdXnt -5oTjV+WtKcT0OijnpXuENmmz/V52vaMtmdOQTiMofRhj8VQ7Jp12W5dCsv+u8E7s -3TmVToMGf+dJQMjFAbJUWmYdPfz56TwKnoG4cPABi+QjVHzIrviQHgCWctRUz2Ej -vOr7nQKV0ba5cTppCD8PtOFCx4j1P5iop7oc4HFx71hXgVB6XGt0Rg6DA5jDjqhu -8nYybieDwnPz3BjotJPqdURrBGAgcVeHnfO+oJAjPYok4doh28MCAwEAAaMzMDEw -DwYDVR0TAQH/BAUwAwEB/zARBgNVHQ4ECgQISqCqWITTXjwwCwYDVR0PBAQDAgEG -MA0GCSqGSIb3DQEBBQUAA4IBAQBazof5FnIVV0sd2ZvnoiYw7JNn39Yt0jSv9zil -zqsWuasvfDXLrNAPtEwr/IDva4yRXzZ299uzGxnq9LIR/WFxRL8oszodv7ND6J+/ -3DEIcbCdjdY0RzKQxmUk96BKfARzjzlvF4xytb1LyHr4e4PDKE6cCepnP7JnBBvD -FNr450kkkdAdavphOe9r5yF1BgfYErQhIHBCcYHaPJo2vqZbDWpsmh+Re/n570K6 -Tk6ezAyNlNzZRZxe7EJQY670XcSxEtzKO6gunRRaBXW37Ndj4ro1tgQIkejanZz2 -ZrUYrAqmVCY0M9IbwdR/GjqOC6oybtv8TyWf2TLHllpwrN9M ------END CERTIFICATE----- - -# Issuer: CN=XRamp Global Certification Authority O=XRamp Security Services Inc OU=www.xrampsecurity.com -# Subject: CN=XRamp Global Certification Authority O=XRamp Security Services Inc OU=www.xrampsecurity.com -# Label: "XRamp Global CA Root" -# Serial: 107108908803651509692980124233745014957 -# MD5 Fingerprint: a1:0b:44:b3:ca:10:d8:00:6e:9d:0f:d8:0f:92:0a:d1 -# SHA1 Fingerprint: b8:01:86:d1:eb:9c:86:a5:41:04:cf:30:54:f3:4c:52:b7:e5:58:c6 -# SHA256 Fingerprint: ce:cd:dc:90:50:99:d8:da:df:c5:b1:d2:09:b7:37:cb:e2:c1:8c:fb:2c:10:c0:ff:0b:cf:0d:32:86:fc:1a:a2 ------BEGIN CERTIFICATE----- -MIIEMDCCAxigAwIBAgIQUJRs7Bjq1ZxN1ZfvdY+grTANBgkqhkiG9w0BAQUFADCB -gjELMAkGA1UEBhMCVVMxHjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEk -MCIGA1UEChMbWFJhbXAgU2VjdXJpdHkgU2VydmljZXMgSW5jMS0wKwYDVQQDEyRY -UmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQxMTAxMTcx -NDA0WhcNMzUwMTAxMDUzNzE5WjCBgjELMAkGA1UEBhMCVVMxHjAcBgNVBAsTFXd3 -dy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMbWFJhbXAgU2VjdXJpdHkgU2Vy -dmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBB -dXRob3JpdHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCYJB69FbS6 -38eMpSe2OAtp87ZOqCwuIR1cRN8hXX4jdP5efrRKt6atH67gBhbim1vZZ3RrXYCP -KZ2GG9mcDZhtdhAoWORlsH9KmHmf4MMxfoArtYzAQDsRhtDLooY2YKTVMIJt2W7Q -DxIEM5dfT2Fa8OT5kavnHTu86M/0ay00fOJIYRyO82FEzG+gSqmUsE3a56k0enI4 -qEHMPJQRfevIpoy3hsvKMzvZPTeL+3o+hiznc9cKV6xkmxnr9A8ECIqsAxcZZPRa -JSKNNCyy9mgdEm3Tih4U2sSPpuIjhdV6Db1q4Ons7Be7QhtnqiXtRYMh/MHJfNVi -PvryxS3T/dRlAgMBAAGjgZ8wgZwwEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0P -BAQDAgGGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFMZPoj0GY4QJnM5i5ASs -jVy16bYbMDYGA1UdHwQvMC0wK6ApoCeGJWh0dHA6Ly9jcmwueHJhbXBzZWN1cml0 -eS5jb20vWEdDQS5jcmwwEAYJKwYBBAGCNxUBBAMCAQEwDQYJKoZIhvcNAQEFBQAD -ggEBAJEVOQMBG2f7Shz5CmBbodpNl2L5JFMn14JkTpAuw0kbK5rc/Kh4ZzXxHfAR -vbdI4xD2Dd8/0sm2qlWkSLoC295ZLhVbO50WfUfXN+pfTXYSNrsf16GBBEYgoyxt -qZ4Bfj8pzgCT3/3JknOJiWSe5yvkHJEs0rnOfc5vMZnT5r7SHpDwCRR5XCOrTdLa -IR9NmXmd4c8nnxCbHIgNsIpkQTG4DmyQJKSbXHGPurt+HBvbaoAPIbzp26a3QPSy -i6mx5O+aGtA9aZnuqCij4Tyz8LIRnM98QObd50N9otg6tamN8jSZxNQQ4Qb9CYQQ -O+7ETPTsJ3xCwnR8gooJybQDJbw= ------END CERTIFICATE----- - -# Issuer: O=The Go Daddy Group, Inc. OU=Go Daddy Class 2 Certification Authority -# Subject: O=The Go Daddy Group, Inc. OU=Go Daddy Class 2 Certification Authority -# Label: "Go Daddy Class 2 CA" -# Serial: 0 -# MD5 Fingerprint: 91:de:06:25:ab:da:fd:32:17:0c:bb:25:17:2a:84:67 -# SHA1 Fingerprint: 27:96:ba:e6:3f:18:01:e2:77:26:1b:a0:d7:77:70:02:8f:20:ee:e4 -# SHA256 Fingerprint: c3:84:6b:f2:4b:9e:93:ca:64:27:4c:0e:c6:7c:1e:cc:5e:02:4f:fc:ac:d2:d7:40:19:35:0e:81:fe:54:6a:e4 ------BEGIN CERTIFICATE----- -MIIEADCCAuigAwIBAgIBADANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEh -MB8GA1UEChMYVGhlIEdvIERhZGR5IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBE -YWRkeSBDbGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA0MDYyOTE3 -MDYyMFoXDTM0MDYyOTE3MDYyMFowYzELMAkGA1UEBhMCVVMxITAfBgNVBAoTGFRo -ZSBHbyBEYWRkeSBHcm91cCwgSW5jLjExMC8GA1UECxMoR28gRGFkZHkgQ2xhc3Mg -MiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASAwDQYJKoZIhvcNAQEBBQADggEN -ADCCAQgCggEBAN6d1+pXGEmhW+vXX0iG6r7d/+TvZxz0ZWizV3GgXne77ZtJ6XCA -PVYYYwhv2vLM0D9/AlQiVBDYsoHUwHU9S3/Hd8M+eKsaA7Ugay9qK7HFiH7Eux6w -wdhFJ2+qN1j3hybX2C32qRe3H3I2TqYXP2WYktsqbl2i/ojgC95/5Y0V4evLOtXi -EqITLdiOr18SPaAIBQi2XKVlOARFmR6jYGB0xUGlcmIbYsUfb18aQr4CUWWoriMY -avx4A6lNf4DD+qta/KFApMoZFv6yyO9ecw3ud72a9nmYvLEHZ6IVDd2gWMZEewo+ -YihfukEHU1jPEX44dMX4/7VpkI+EdOqXG68CAQOjgcAwgb0wHQYDVR0OBBYEFNLE -sNKR1EwRcbNhyz2h/t2oatTjMIGNBgNVHSMEgYUwgYKAFNLEsNKR1EwRcbNhyz2h -/t2oatTjoWekZTBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYVGhlIEdvIERhZGR5 -IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRpZmlj -YXRpb24gQXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQAD -ggEBADJL87LKPpH8EsahB4yOd6AzBhRckB4Y9wimPQoZ+YeAEW5p5JYXMP80kWNy -OO7MHAGjHZQopDH2esRU1/blMVgDoszOYtuURXO1v0XJJLXVggKtI3lpjbi2Tc7P -TMozI+gciKqdi0FuFskg5YmezTvacPd+mSYgFFQlq25zheabIZ0KbIIOqPjCDPoQ -HmyW74cNxA9hi63ugyuV+I6ShHI56yDqg+2DzZduCLzrTia2cyvk0/ZM/iZx4mER -dEr/VxqHD3VILs9RaRegAhJhldXRQLIQTO7ErBBDpqWeCtWVYpoNz4iCxTIM5Cuf -ReYNnyicsbkqWletNw+vHX/bvZ8= ------END CERTIFICATE----- - -# Issuer: O=Starfield Technologies, Inc. OU=Starfield Class 2 Certification Authority -# Subject: O=Starfield Technologies, Inc. OU=Starfield Class 2 Certification Authority -# Label: "Starfield Class 2 CA" -# Serial: 0 -# MD5 Fingerprint: 32:4a:4b:bb:c8:63:69:9b:be:74:9a:c6:dd:1d:46:24 -# SHA1 Fingerprint: ad:7e:1c:28:b0:64:ef:8f:60:03:40:20:14:c3:d0:e3:37:0e:b5:8a -# SHA256 Fingerprint: 14:65:fa:20:53:97:b8:76:fa:a6:f0:a9:95:8e:55:90:e4:0f:cc:7f:aa:4f:b7:c2:c8:67:75:21:fb:5f:b6:58 ------BEGIN CERTIFICATE----- -MIIEDzCCAvegAwIBAgIBADANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJVUzEl -MCMGA1UEChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMp -U3RhcmZpZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQw -NjI5MTczOTE2WhcNMzQwNjI5MTczOTE2WjBoMQswCQYDVQQGEwJVUzElMCMGA1UE -ChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMpU3RhcmZp -ZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEgMA0GCSqGSIb3 -DQEBAQUAA4IBDQAwggEIAoIBAQC3Msj+6XGmBIWtDBFk385N78gDGIc/oav7PKaf -8MOh2tTYbitTkPskpD6E8J7oX+zlJ0T1KKY/e97gKvDIr1MvnsoFAZMej2YcOadN -+lq2cwQlZut3f+dZxkqZJRRU6ybH838Z1TBwj6+wRir/resp7defqgSHo9T5iaU0 -X9tDkYI22WY8sbi5gv2cOj4QyDvvBmVmepsZGD3/cVE8MC5fvj13c7JdBmzDI1aa -K4UmkhynArPkPw2vCHmCuDY96pzTNbO8acr1zJ3o/WSNF4Azbl5KXZnJHoe0nRrA -1W4TNSNe35tfPe/W93bC6j67eA0cQmdrBNj41tpvi/JEoAGrAgEDo4HFMIHCMB0G -A1UdDgQWBBS/X7fRzt0fhvRbVazc1xDCDqmI5zCBkgYDVR0jBIGKMIGHgBS/X7fR -zt0fhvRbVazc1xDCDqmI56FspGowaDELMAkGA1UEBhMCVVMxJTAjBgNVBAoTHFN0 -YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xMjAwBgNVBAsTKVN0YXJmaWVsZCBD -bGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8w -DQYJKoZIhvcNAQEFBQADggEBAAWdP4id0ckaVaGsafPzWdqbAYcaT1epoXkJKtv3 -L7IezMdeatiDh6GX70k1PncGQVhiv45YuApnP+yz3SFmH8lU+nLMPUxA2IGvd56D -eruix/U0F47ZEUD0/CwqTRV/p2JdLiXTAAsgGh1o+Re49L2L7ShZ3U0WixeDyLJl -xy16paq8U4Zt3VekyvggQQto8PT7dL5WXXp59fkdheMtlb71cZBDzI0fmgAKhynp -VSJYACPq4xJDKVtHCN2MQWplBqjlIapBtJUhlbl90TSrE9atvNziPTnNvT51cKEY -WQPJIrSPnNVeKtelttQKbfi3QBFGmh95DmK/D5fs4C8fF5Q= ------END CERTIFICATE----- - -# Issuer: O=Government Root Certification Authority -# Subject: O=Government Root Certification Authority -# Label: "Taiwan GRCA" -# Serial: 42023070807708724159991140556527066870 -# MD5 Fingerprint: 37:85:44:53:32:45:1f:20:f0:f3:95:e1:25:c4:43:4e -# SHA1 Fingerprint: f4:8b:11:bf:de:ab:be:94:54:20:71:e6:41:de:6b:be:88:2b:40:b9 -# SHA256 Fingerprint: 76:00:29:5e:ef:e8:5b:9e:1f:d6:24:db:76:06:2a:aa:ae:59:81:8a:54:d2:77:4c:d4:c0:b2:c0:11:31:e1:b3 ------BEGIN CERTIFICATE----- -MIIFcjCCA1qgAwIBAgIQH51ZWtcvwgZEpYAIaeNe9jANBgkqhkiG9w0BAQUFADA/ -MQswCQYDVQQGEwJUVzEwMC4GA1UECgwnR292ZXJubWVudCBSb290IENlcnRpZmlj -YXRpb24gQXV0aG9yaXR5MB4XDTAyMTIwNTEzMjMzM1oXDTMyMTIwNTEzMjMzM1ow -PzELMAkGA1UEBhMCVFcxMDAuBgNVBAoMJ0dvdmVybm1lbnQgUm9vdCBDZXJ0aWZp -Y2F0aW9uIEF1dGhvcml0eTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIB -AJoluOzMonWoe/fOW1mKydGGEghU7Jzy50b2iPN86aXfTEc2pBsBHH8eV4qNw8XR -IePaJD9IK/ufLqGU5ywck9G/GwGHU5nOp/UKIXZ3/6m3xnOUT0b3EEk3+qhZSV1q -gQdW8or5BtD3cCJNtLdBuTK4sfCxw5w/cP1T3YGq2GN49thTbqGsaoQkclSGxtKy -yhwOeYHWtXBiCAEuTk8O1RGvqa/lmr/czIdtJuTJV6L7lvnM4T9TjGxMfptTCAts -F/tnyMKtsc2AtJfcdgEWFelq16TheEfOhtX7MfP6Mb40qij7cEwdScevLJ1tZqa2 -jWR+tSBqnTuBto9AAGdLiYa4zGX+FVPpBMHWXx1E1wovJ5pGfaENda1UhhXcSTvx -ls4Pm6Dso3pdvtUqdULle96ltqqvKKyskKw4t9VoNSZ63Pc78/1Fm9G7Q3hub/FC -VGqY8A2tl+lSXunVanLeavcbYBT0peS2cWeqH+riTcFCQP5nRhc4L0c/cZyu5SHK -YS1tB6iEfC3uUSXxY5Ce/eFXiGvviiNtsea9P63RPZYLhY3Naye7twWb7LuRqQoH -EgKXTiCQ8P8NHuJBO9NAOueNXdpm5AKwB1KYXA6OM5zCppX7VRluTI6uSw+9wThN -Xo+EHWbNxWCWtFJaBYmOlXqYwZE8lSOyDvR5tMl8wUohAgMBAAGjajBoMB0GA1Ud -DgQWBBTMzO/MKWCkO7GStjz6MmKPrCUVOzAMBgNVHRMEBTADAQH/MDkGBGcqBwAE -MTAvMC0CAQAwCQYFKw4DAhoFADAHBgVnKgMAAAQUA5vwIhP/lSg209yewDL7MTqK -UWUwDQYJKoZIhvcNAQEFBQADggIBAECASvomyc5eMN1PhnR2WPWus4MzeKR6dBcZ -TulStbngCnRiqmjKeKBMmo4sIy7VahIkv9Ro04rQ2JyftB8M3jh+Vzj8jeJPXgyf -qzvS/3WXy6TjZwj/5cAWtUgBfen5Cv8b5Wppv3ghqMKnI6mGq3ZW6A4M9hPdKmaK -ZEk9GhiHkASfQlK3T8v+R0F2Ne//AHY2RTKbxkaFXeIksB7jSJaYV0eUVXoPQbFE -JPPB/hprv4j9wabak2BegUqZIJxIZhm1AHlUD7gsL0u8qV1bYH+Mh6XgUmMqvtg7 -hUAV/h62ZT/FS9p+tXo1KaMuephgIqP0fSdOLeq0dDzpD6QzDxARvBMB1uUO07+1 -EqLhRSPAzAhuYbeJq4PjJB7mXQfnHyA+z2fI56wwbSdLaG5LKlwCCDTb+HbkZ6Mm -nD+iMsJKxYEYMRBWqoTvLQr/uB930r+lWKBi5NdLkXWNiYCYfm3LU05er/ayl4WX -udpVBrkk7tfGOB5jGxI7leFYrPLfhNVfmS8NVVvmONsuP3LpSIXLuykTjx44Vbnz -ssQwmSNOXfJIoRIM3BKQCZBUkQM8R+XVyWXgt0t97EfTsws+rZ7QdAAO671RrcDe -LMDDav7v3Aun+kbfYNucpllQdSNpc5Oy+fwC00fmcc4QAu4njIT/rEUNE1yDMuAl -pYYsfPQS ------END CERTIFICATE----- - -# Issuer: CN=DigiCert Assured ID Root CA O=DigiCert Inc OU=www.digicert.com -# Subject: CN=DigiCert Assured ID Root CA O=DigiCert Inc OU=www.digicert.com -# Label: "DigiCert Assured ID Root CA" -# Serial: 17154717934120587862167794914071425081 -# MD5 Fingerprint: 87:ce:0b:7b:2a:0e:49:00:e1:58:71:9b:37:a8:93:72 -# SHA1 Fingerprint: 05:63:b8:63:0d:62:d7:5a:bb:c8:ab:1e:4b:df:b5:a8:99:b2:4d:43 -# SHA256 Fingerprint: 3e:90:99:b5:01:5e:8f:48:6c:00:bc:ea:9d:11:1e:e7:21:fa:ba:35:5a:89:bc:f1:df:69:56:1e:3d:c6:32:5c ------BEGIN CERTIFICATE----- -MIIDtzCCAp+gAwIBAgIQDOfg5RfYRv6P5WD8G/AwOTANBgkqhkiG9w0BAQUFADBl -MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 -d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJv -b3QgQ0EwHhcNMDYxMTEwMDAwMDAwWhcNMzExMTEwMDAwMDAwWjBlMQswCQYDVQQG -EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNl -cnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0EwggEi -MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtDhXO5EOAXLGH87dg+XESpa7c -JpSIqvTO9SA5KFhgDPiA2qkVlTJhPLWxKISKityfCgyDF3qPkKyK53lTXDGEKvYP -mDI2dsze3Tyoou9q+yHyUmHfnyDXH+Kx2f4YZNISW1/5WBg1vEfNoTb5a3/UsDg+ -wRvDjDPZ2C8Y/igPs6eD1sNuRMBhNZYW/lmci3Zt1/GiSw0r/wty2p5g0I6QNcZ4 -VYcgoc/lbQrISXwxmDNsIumH0DJaoroTghHtORedmTpyoeb6pNnVFzF1roV9Iq4/ -AUaG9ih5yLHa5FcXxH4cDrC0kqZWs72yl+2qp/C3xag/lRbQ/6GW6whfGHdPAgMB -AAGjYzBhMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQW -BBRF66Kv9JLLgjEtUYunpyGd823IDzAfBgNVHSMEGDAWgBRF66Kv9JLLgjEtUYun -pyGd823IDzANBgkqhkiG9w0BAQUFAAOCAQEAog683+Lt8ONyc3pklL/3cmbYMuRC -dWKuh+vy1dneVrOfzM4UKLkNl2BcEkxY5NM9g0lFWJc1aRqoR+pWxnmrEthngYTf -fwk8lOa4JiwgvT2zKIn3X/8i4peEH+ll74fg38FnSbNd67IJKusm7Xi+fT8r87cm -NW1fiQG2SVufAQWbqz0lwcy2f8Lxb4bG+mRo64EtlOtCt/qMHt1i8b5QZ7dsvfPx -H2sMNgcWfzd8qVttevESRmCD1ycEvkvOl77DZypoEd+A5wwzZr8TDRRu838fYxAe -+o0bJW1sj6W3YQGx0qMmoRBxna3iw/nDmVG3KwcIzi7mULKn+gpFL6Lw8g== ------END CERTIFICATE----- - -# Issuer: CN=DigiCert Global Root CA O=DigiCert Inc OU=www.digicert.com -# Subject: CN=DigiCert Global Root CA O=DigiCert Inc OU=www.digicert.com -# Label: "DigiCert Global Root CA" -# Serial: 10944719598952040374951832963794454346 -# MD5 Fingerprint: 79:e4:a9:84:0d:7d:3a:96:d7:c0:4f:e2:43:4c:89:2e -# SHA1 Fingerprint: a8:98:5d:3a:65:e5:e5:c4:b2:d7:d6:6d:40:c6:dd:2f:b1:9c:54:36 -# SHA256 Fingerprint: 43:48:a0:e9:44:4c:78:cb:26:5e:05:8d:5e:89:44:b4:d8:4f:96:62:bd:26:db:25:7f:89:34:a4:43:c7:01:61 ------BEGIN CERTIFICATE----- -MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBh -MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 -d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBD -QTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAwMDAwMDBaMGExCzAJBgNVBAYTAlVT -MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j -b20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkqhkiG -9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsB -CSDMAZOnTjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97 -nh6Vfe63SKMI2tavegw5BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt -43C/dxC//AH2hdmoRBBYMql1GNXRor5H4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7P -T19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y7vrTC0LUq7dBMtoM1O/4 -gdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQABo2MwYTAO -BgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbR -TLtm8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUw -DQYJKoZIhvcNAQEFBQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/Esr -hMAtudXH/vTBH1jLuG2cenTnmCmrEbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg -06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIttep3Sp+dWOIrWcBAI+0tKIJF -PnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886UAb3LujEV0ls -YSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQk -CAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4= ------END CERTIFICATE----- - -# Issuer: CN=DigiCert High Assurance EV Root CA O=DigiCert Inc OU=www.digicert.com -# Subject: CN=DigiCert High Assurance EV Root CA O=DigiCert Inc OU=www.digicert.com -# Label: "DigiCert High Assurance EV Root CA" -# Serial: 3553400076410547919724730734378100087 -# MD5 Fingerprint: d4:74:de:57:5c:39:b2:d3:9c:85:83:c5:c0:65:49:8a -# SHA1 Fingerprint: 5f:b7:ee:06:33:e2:59:db:ad:0c:4c:9a:e6:d3:8f:1a:61:c7:dc:25 -# SHA256 Fingerprint: 74:31:e5:f4:c3:c1:ce:46:90:77:4f:0b:61:e0:54:40:88:3b:a9:a0:1e:d0:0b:a6:ab:d7:80:6e:d3:b1:18:cf ------BEGIN CERTIFICATE----- -MIIDxTCCAq2gAwIBAgIQAqxcJmoLQJuPC3nyrkYldzANBgkqhkiG9w0BAQUFADBs -MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 -d3cuZGlnaWNlcnQuY29tMSswKQYDVQQDEyJEaWdpQ2VydCBIaWdoIEFzc3VyYW5j -ZSBFViBSb290IENBMB4XDTA2MTExMDAwMDAwMFoXDTMxMTExMDAwMDAwMFowbDEL -MAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZMBcGA1UECxMQd3d3 -LmRpZ2ljZXJ0LmNvbTErMCkGA1UEAxMiRGlnaUNlcnQgSGlnaCBBc3N1cmFuY2Ug -RVYgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMbM5XPm -+9S75S0tMqbf5YE/yc0lSbZxKsPVlDRnogocsF9ppkCxxLeyj9CYpKlBWTrT3JTW -PNt0OKRKzE0lgvdKpVMSOO7zSW1xkX5jtqumX8OkhPhPYlG++MXs2ziS4wblCJEM -xChBVfvLWokVfnHoNb9Ncgk9vjo4UFt3MRuNs8ckRZqnrG0AFFoEt7oT61EKmEFB -Ik5lYYeBQVCmeVyJ3hlKV9Uu5l0cUyx+mM0aBhakaHPQNAQTXKFx01p8VdteZOE3 -hzBWBOURtCmAEvF5OYiiAhF8J2a3iLd48soKqDirCmTCv2ZdlYTBoSUeh10aUAsg -EsxBu24LUTi4S8sCAwEAAaNjMGEwDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQF -MAMBAf8wHQYDVR0OBBYEFLE+w2kD+L9HAdSYJhoIAu9jZCvDMB8GA1UdIwQYMBaA -FLE+w2kD+L9HAdSYJhoIAu9jZCvDMA0GCSqGSIb3DQEBBQUAA4IBAQAcGgaX3Nec -nzyIZgYIVyHbIUf4KmeqvxgydkAQV8GK83rZEWWONfqe/EW1ntlMMUu4kehDLI6z -eM7b41N5cdblIZQB2lWHmiRk9opmzN6cN82oNLFpmyPInngiK3BD41VHMWEZ71jF -hS9OMPagMRYjyOfiZRYzy78aG6A9+MpeizGLYAiJLQwGXFK3xPkKmNEVX58Svnw2 -Yzi9RKR/5CYrCsSXaQ3pjOLAEFe4yHYSkVXySGnYvCoCWw9E1CAx2/S6cCZdkGCe -vEsXCS+0yx5DaMkHJ8HSXPfqIbloEpw8nL+e/IBcm2PN7EeqJSdnoDfzAIJ9VNep -+OkuE6N36B9K ------END CERTIFICATE----- - -# Issuer: CN=Class 2 Primary CA O=Certplus -# Subject: CN=Class 2 Primary CA O=Certplus -# Label: "Certplus Class 2 Primary CA" -# Serial: 177770208045934040241468760488327595043 -# MD5 Fingerprint: 88:2c:8c:52:b8:a2:3c:f3:f7:bb:03:ea:ae:ac:42:0b -# SHA1 Fingerprint: 74:20:74:41:72:9c:dd:92:ec:79:31:d8:23:10:8d:c2:81:92:e2:bb -# SHA256 Fingerprint: 0f:99:3c:8a:ef:97:ba:af:56:87:14:0e:d5:9a:d1:82:1b:b4:af:ac:f0:aa:9a:58:b5:d5:7a:33:8a:3a:fb:cb ------BEGIN CERTIFICATE----- -MIIDkjCCAnqgAwIBAgIRAIW9S/PY2uNp9pTXX8OlRCMwDQYJKoZIhvcNAQEFBQAw -PTELMAkGA1UEBhMCRlIxETAPBgNVBAoTCENlcnRwbHVzMRswGQYDVQQDExJDbGFz -cyAyIFByaW1hcnkgQ0EwHhcNOTkwNzA3MTcwNTAwWhcNMTkwNzA2MjM1OTU5WjA9 -MQswCQYDVQQGEwJGUjERMA8GA1UEChMIQ2VydHBsdXMxGzAZBgNVBAMTEkNsYXNz -IDIgUHJpbWFyeSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANxQ -ltAS+DXSCHh6tlJw/W/uz7kRy1134ezpfgSN1sxvc0NXYKwzCkTsA18cgCSR5aiR -VhKC9+Ar9NuuYS6JEI1rbLqzAr3VNsVINyPi8Fo3UjMXEuLRYE2+L0ER4/YXJQyL -kcAbmXuZVg2v7tK8R1fjeUl7NIknJITesezpWE7+Tt9avkGtrAjFGA7v0lPubNCd -EgETjdyAYveVqUSISnFOYFWe2yMZeVYHDD9jC1yw4r5+FfyUM1hBOHTE4Y+L3yas -H7WLO7dDWWuwJKZtkIvEcupdM5i3y95ee++U8Rs+yskhwcWYAqqi9lt3m/V+llU0 -HGdpwPFC40es/CgcZlUCAwEAAaOBjDCBiTAPBgNVHRMECDAGAQH/AgEKMAsGA1Ud -DwQEAwIBBjAdBgNVHQ4EFgQU43Mt38sOKAze3bOkynm4jrvoMIkwEQYJYIZIAYb4 -QgEBBAQDAgEGMDcGA1UdHwQwMC4wLKAqoCiGJmh0dHA6Ly93d3cuY2VydHBsdXMu -Y29tL0NSTC9jbGFzczIuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQCnVM+IRBnL39R/ -AN9WM2K191EBkOvDP9GIROkkXe/nFL0gt5o8AP5tn9uQ3Nf0YtaLcF3n5QRIqWh8 -yfFC82x/xXp8HVGIutIKPidd3i1RTtMTZGnkLuPT55sJmabglZvOGtd/vjzOUrMR -FcEPF80Du5wlFbqidon8BvEY0JNLDnyCt6X09l/+7UCmnYR0ObncHoUW2ikbhiMA -ybuJfm6AiB4vFLQDJKgybwOaRywwvlbGp0ICcBvqQNi6BQNwB6SW//1IMwrh3KWB -kJtN3X3n57LNXMhqlfil9o3EXXgIvnsG1knPGTZQIy4I5p4FTUcY1Rbpsda2ENW7 -l7+ijrRU ------END CERTIFICATE----- - -# Issuer: CN=DST Root CA X3 O=Digital Signature Trust Co. -# Subject: CN=DST Root CA X3 O=Digital Signature Trust Co. -# Label: "DST Root CA X3" -# Serial: 91299735575339953335919266965803778155 -# MD5 Fingerprint: 41:03:52:dc:0f:f7:50:1b:16:f0:02:8e:ba:6f:45:c5 -# SHA1 Fingerprint: da:c9:02:4f:54:d8:f6:df:94:93:5f:b1:73:26:38:ca:6a:d7:7c:13 -# SHA256 Fingerprint: 06:87:26:03:31:a7:24:03:d9:09:f1:05:e6:9b:cf:0d:32:e1:bd:24:93:ff:c6:d9:20:6d:11:bc:d6:77:07:39 ------BEGIN CERTIFICATE----- -MIIDSjCCAjKgAwIBAgIQRK+wgNajJ7qJMDmGLvhAazANBgkqhkiG9w0BAQUFADA/ -MSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMT -DkRTVCBSb290IENBIFgzMB4XDTAwMDkzMDIxMTIxOVoXDTIxMDkzMDE0MDExNVow -PzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMRcwFQYDVQQD -Ew5EU1QgUm9vdCBDQSBYMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB -AN+v6ZdQCINXtMxiZfaQguzH0yxrMMpb7NnDfcdAwRgUi+DoM3ZJKuM/IUmTrE4O -rz5Iy2Xu/NMhD2XSKtkyj4zl93ewEnu1lcCJo6m67XMuegwGMoOifooUMM0RoOEq -OLl5CjH9UL2AZd+3UWODyOKIYepLYYHsUmu5ouJLGiifSKOeDNoJjj4XLh7dIN9b -xiqKqy69cK3FCxolkHRyxXtqqzTWMIn/5WgTe1QLyNau7Fqckh49ZLOMxt+/yUFw -7BZy1SbsOFU5Q9D8/RhcQPGX69Wam40dutolucbY38EVAjqr2m7xPi71XAicPNaD -aeQQmxkqtilX4+U9m5/wAl0CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNV -HQ8BAf8EBAMCAQYwHQYDVR0OBBYEFMSnsaR7LHH62+FLkHX/xBVghYkQMA0GCSqG -SIb3DQEBBQUAA4IBAQCjGiybFwBcqR7uKGY3Or+Dxz9LwwmglSBd49lZRNI+DT69 -ikugdB/OEIKcdBodfpga3csTS7MgROSR6cz8faXbauX+5v3gTt23ADq1cEmv8uXr -AvHRAosZy5Q6XkjEGB5YGV8eAlrwDPGxrancWYaLbumR9YbK+rlmM6pZW87ipxZz -R8srzJmwN0jP41ZL9c8PDHIyh8bwRLtTcm1D9SZImlJnt1ir/md2cXjbDaJWFBM5 -JDGFoqgCWjBH4d1QB7wCCZAA62RjYJsWvIjJEubSfZGL+T0yjWW06XyxV3bqxbYo -Ob8VZRzI9neWagqNdwvYkQsEjgfbKbYK7p2CNTUQ ------END CERTIFICATE----- - -# Issuer: CN=SwissSign Gold CA - G2 O=SwissSign AG -# Subject: CN=SwissSign Gold CA - G2 O=SwissSign AG -# Label: "SwissSign Gold CA - G2" -# Serial: 13492815561806991280 -# MD5 Fingerprint: 24:77:d9:a8:91:d1:3b:fa:88:2d:c2:ff:f8:cd:33:93 -# SHA1 Fingerprint: d8:c5:38:8a:b7:30:1b:1b:6e:d4:7a:e6:45:25:3a:6f:9f:1a:27:61 -# SHA256 Fingerprint: 62:dd:0b:e9:b9:f5:0a:16:3e:a0:f8:e7:5c:05:3b:1e:ca:57:ea:55:c8:68:8f:64:7c:68:81:f2:c8:35:7b:95 ------BEGIN CERTIFICATE----- -MIIFujCCA6KgAwIBAgIJALtAHEP1Xk+wMA0GCSqGSIb3DQEBBQUAMEUxCzAJBgNV -BAYTAkNIMRUwEwYDVQQKEwxTd2lzc1NpZ24gQUcxHzAdBgNVBAMTFlN3aXNzU2ln -biBHb2xkIENBIC0gRzIwHhcNMDYxMDI1MDgzMDM1WhcNMzYxMDI1MDgzMDM1WjBF -MQswCQYDVQQGEwJDSDEVMBMGA1UEChMMU3dpc3NTaWduIEFHMR8wHQYDVQQDExZT -d2lzc1NpZ24gR29sZCBDQSAtIEcyMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC -CgKCAgEAr+TufoskDhJuqVAtFkQ7kpJcyrhdhJJCEyq8ZVeCQD5XJM1QiyUqt2/8 -76LQwB8CJEoTlo8jE+YoWACjR8cGp4QjK7u9lit/VcyLwVcfDmJlD909Vopz2q5+ -bbqBHH5CjCA12UNNhPqE21Is8w4ndwtrvxEvcnifLtg+5hg3Wipy+dpikJKVyh+c -6bM8K8vzARO/Ws/BtQpgvd21mWRTuKCWs2/iJneRjOBiEAKfNA+k1ZIzUd6+jbqE -emA8atufK+ze3gE/bk3lUIbLtK/tREDFylqM2tIrfKjuvqblCqoOpd8FUrdVxyJd -MmqXl2MT28nbeTZ7hTpKxVKJ+STnnXepgv9VHKVxaSvRAiTysybUa9oEVeXBCsdt -MDeQKuSeFDNeFhdVxVu1yzSJkvGdJo+hB9TGsnhQ2wwMC3wLjEHXuendjIj3o02y -MszYF9rNt85mndT9Xv+9lz4pded+p2JYryU0pUHHPbwNUMoDAw8IWh+Vc3hiv69y -FGkOpeUDDniOJihC8AcLYiAQZzlG+qkDzAQ4embvIIO1jEpWjpEA/I5cgt6IoMPi -aG59je883WX0XaxR7ySArqpWl2/5rX3aYT+YdzylkbYcjCbaZaIJbcHiVOO5ykxM -gI93e2CaHt+28kgeDrpOVG2Y4OGiGqJ3UM/EY5LsRxmd6+ZrzsECAwEAAaOBrDCB -qTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUWyV7 -lqRlUX64OfPAeGZe6Drn8O4wHwYDVR0jBBgwFoAUWyV7lqRlUX64OfPAeGZe6Drn -8O4wRgYDVR0gBD8wPTA7BglghXQBWQECAQEwLjAsBggrBgEFBQcCARYgaHR0cDov -L3JlcG9zaXRvcnkuc3dpc3NzaWduLmNvbS8wDQYJKoZIhvcNAQEFBQADggIBACe6 -45R88a7A3hfm5djV9VSwg/S7zV4Fe0+fdWavPOhWfvxyeDgD2StiGwC5+OlgzczO -UYrHUDFu4Up+GC9pWbY9ZIEr44OE5iKHjn3g7gKZYbge9LgriBIWhMIxkziWMaa5 -O1M/wySTVltpkuzFwbs4AOPsF6m43Md8AYOfMke6UiI0HTJ6CVanfCU2qT1L2sCC -bwq7EsiHSycR+R4tx5M/nttfJmtS2S6K8RTGRI0Vqbe/vd6mGu6uLftIdxf+u+yv -GPUqUfA5hJeVbG4bwyvEdGB5JbAKJ9/fXtI5z0V9QkvfsywexcZdylU6oJxpmo/a -77KwPJ+HbBIrZXAVUjEaJM9vMSNQH4xPjyPDdEFjHFWoFN0+4FFQz/EbMFYOkrCC -hdiDyyJkvC24JdVUorgG6q2SpCSgwYa1ShNqR88uC1aVVMvOmttqtKay20EIhid3 -92qgQmwLOM7XdVAyksLfKzAiSNDVQTglXaTpXZ/GlHXQRf0wl0OPkKsKx4ZzYEpp -Ld6leNcG2mqeSz53OiATIgHQv2ieY2BrNU0LbbqhPcCT4H8js1WtciVORvnSFu+w -ZMEBnunKoGqYDs/YYPIvSbjkQuE4NRb0yG5P94FW6LqjviOvrv1vA+ACOzB2+htt -Qc8Bsem4yWb02ybzOqR08kkkW8mw0FfB+j564ZfJ ------END CERTIFICATE----- - -# Issuer: CN=SwissSign Silver CA - G2 O=SwissSign AG -# Subject: CN=SwissSign Silver CA - G2 O=SwissSign AG -# Label: "SwissSign Silver CA - G2" -# Serial: 5700383053117599563 -# MD5 Fingerprint: e0:06:a1:c9:7d:cf:c9:fc:0d:c0:56:75:96:d8:62:13 -# SHA1 Fingerprint: 9b:aa:e5:9f:56:ee:21:cb:43:5a:be:25:93:df:a7:f0:40:d1:1d:cb -# SHA256 Fingerprint: be:6c:4d:a2:bb:b9:ba:59:b6:f3:93:97:68:37:42:46:c3:c0:05:99:3f:a9:8f:02:0d:1d:ed:be:d4:8a:81:d5 ------BEGIN CERTIFICATE----- -MIIFvTCCA6WgAwIBAgIITxvUL1S7L0swDQYJKoZIhvcNAQEFBQAwRzELMAkGA1UE -BhMCQ0gxFTATBgNVBAoTDFN3aXNzU2lnbiBBRzEhMB8GA1UEAxMYU3dpc3NTaWdu -IFNpbHZlciBDQSAtIEcyMB4XDTA2MTAyNTA4MzI0NloXDTM2MTAyNTA4MzI0Nlow -RzELMAkGA1UEBhMCQ0gxFTATBgNVBAoTDFN3aXNzU2lnbiBBRzEhMB8GA1UEAxMY -U3dpc3NTaWduIFNpbHZlciBDQSAtIEcyMIICIjANBgkqhkiG9w0BAQEFAAOCAg8A -MIICCgKCAgEAxPGHf9N4Mfc4yfjDmUO8x/e8N+dOcbpLj6VzHVxumK4DV644N0Mv -Fz0fyM5oEMF4rhkDKxD6LHmD9ui5aLlV8gREpzn5/ASLHvGiTSf5YXu6t+WiE7br -YT7QbNHm+/pe7R20nqA1W6GSy/BJkv6FCgU+5tkL4k+73JU3/JHpMjUi0R86TieF -nbAVlDLaYQ1HTWBCrpJH6INaUFjpiou5XaHc3ZlKHzZnu0jkg7Y360g6rw9njxcH -6ATK72oxh9TAtvmUcXtnZLi2kUpCe2UuMGoM9ZDulebyzYLs2aFK7PayS+VFheZt -eJMELpyCbTapxDFkH4aDCyr0NQp4yVXPQbBH6TCfmb5hqAaEuSh6XzjZG6k4sIN/ -c8HDO0gqgg8hm7jMqDXDhBuDsz6+pJVpATqJAHgE2cn0mRmrVn5bi4Y5FZGkECwJ -MoBgs5PAKrYYC51+jUnyEEp/+dVGLxmSo5mnJqy7jDzmDrxHB9xzUfFwZC8I+bRH -HTBsROopN4WSaGa8gzj+ezku01DwH/teYLappvonQfGbGHLy9YR0SslnxFSuSGTf -jNFusB3hB48IHpmccelM2KX3RxIfdNFRnobzwqIjQAtz20um53MGjMGg6cFZrEb6 -5i/4z3GcRm25xBWNOHkDRUjvxF3XCO6HOSKGsg0PWEP3calILv3q1h8CAwEAAaOB -rDCBqTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU -F6DNweRBtjpbO8tFnb0cwpj6hlgwHwYDVR0jBBgwFoAUF6DNweRBtjpbO8tFnb0c -wpj6hlgwRgYDVR0gBD8wPTA7BglghXQBWQEDAQEwLjAsBggrBgEFBQcCARYgaHR0 -cDovL3JlcG9zaXRvcnkuc3dpc3NzaWduLmNvbS8wDQYJKoZIhvcNAQEFBQADggIB -AHPGgeAn0i0P4JUw4ppBf1AsX19iYamGamkYDHRJ1l2E6kFSGG9YrVBWIGrGvShp -WJHckRE1qTodvBqlYJ7YH39FkWnZfrt4csEGDyrOj4VwYaygzQu4OSlWhDJOhrs9 -xCrZ1x9y7v5RoSJBsXECYxqCsGKrXlcSH9/L3XWgwF15kIwb4FDm3jH+mHtwX6WQ -2K34ArZv02DdQEsixT2tOnqfGhpHkXkzuoLcMmkDlm4fS/Bx/uNncqCxv1yL5PqZ -IseEuRuNI5c/7SXgz2W79WEE790eslpBIlqhn10s6FvJbakMDHiqYMZWjwFaDGi8 -aRl5xB9+lwW/xekkUV7U1UtT7dkjWjYDZaPBA61BMPNGG4WQr2W11bHkFlt4dR2X -em1ZqSqPe97Dh4kQmUlzeMg9vVE1dCrV8X5pGyq7O70luJpaPXJhkGaH7gzWTdQR -dAtq/gsD/KNVV4n+SsuuWxcFyPKNIzFTONItaj+CuY0IavdeQXRuwxF+B6wpYJE/ -OMpXEA29MC/HpeZBoNquBYeaoKRlbEwJDIm6uNO5wJOKMPqN5ZprFQFOZ6raYlY+ -hAhm0sQ2fac+EPyI4NSA5QC9qvNOBqN6avlicuMJT+ubDgEj8Z+7fNzcbBGXJbLy -tGMU0gYqZ4yD9c7qB9iaah7s5Aq7KkzrCWA5zspi2C5u ------END CERTIFICATE----- - -# Issuer: CN=GeoTrust Primary Certification Authority O=GeoTrust Inc. -# Subject: CN=GeoTrust Primary Certification Authority O=GeoTrust Inc. -# Label: "GeoTrust Primary Certification Authority" -# Serial: 32798226551256963324313806436981982369 -# MD5 Fingerprint: 02:26:c3:01:5e:08:30:37:43:a9:d0:7d:cf:37:e6:bf -# SHA1 Fingerprint: 32:3c:11:8e:1b:f7:b8:b6:52:54:e2:e2:10:0d:d6:02:90:37:f0:96 -# SHA256 Fingerprint: 37:d5:10:06:c5:12:ea:ab:62:64:21:f1:ec:8c:92:01:3f:c5:f8:2a:e9:8e:e5:33:eb:46:19:b8:de:b4:d0:6c ------BEGIN CERTIFICATE----- -MIIDfDCCAmSgAwIBAgIQGKy1av1pthU6Y2yv2vrEoTANBgkqhkiG9w0BAQUFADBY -MQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjExMC8GA1UEAxMo -R2VvVHJ1c3QgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjEx -MjcwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMFgxCzAJBgNVBAYTAlVTMRYwFAYDVQQK -Ew1HZW9UcnVzdCBJbmMuMTEwLwYDVQQDEyhHZW9UcnVzdCBQcmltYXJ5IENlcnRp -ZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC -AQEAvrgVe//UfH1nrYNke8hCUy3f9oQIIGHWAVlqnEQRr+92/ZV+zmEwu3qDXwK9 -AWbK7hWNb6EwnL2hhZ6UOvNWiAAxz9juapYC2e0DjPt1befquFUWBRaa9OBesYjA -ZIVcFU2Ix7e64HXprQU9nceJSOC7KMgD4TCTZF5SwFlwIjVXiIrxlQqD17wxcwE0 -7e9GceBrAqg1cmuXm2bgyxx5X9gaBGgeRwLmnWDiNpcB3841kt++Z8dtd1k7j53W -kBWUvEI0EME5+bEnPn7WinXFsq+W06Lem+SYvn3h6YGttm/81w7a4DSwDRp35+MI -mO9Y+pyEtzavwt+s0vQQBnBxNQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4G -A1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQULNVQQZcVi/CPNmFbSvtr2ZnJM5IwDQYJ -KoZIhvcNAQEFBQADggEBAFpwfyzdtzRP9YZRqSa+S7iq8XEN3GHHoOo0Hnp3DwQ1 -6CePbJC/kRYkRj5KTs4rFtULUh38H2eiAkUxT87z+gOneZ1TatnaYzr4gNfTmeGl -4b7UVXGYNTq+k+qurUKykG/g/CFNNWMziUnWm07Kx+dOCQD32sfvmWKZd7aVIl6K -oKv0uHiYyjgZmclynnjNS6yvGaBzEi38wkG6gZHaFloxt/m0cYASSJlyc1pZU8Fj -UjPtp8nSOQJw+uCxQmYpqptR7TBUIhRf2asdweSU8Pj1K/fqynhG1riR/aYNKxoU -AT6A8EKglQdebc3MS6RFjasS6LPeWuWgfOgPIh1a6Vk= ------END CERTIFICATE----- - -# Issuer: CN=thawte Primary Root CA O=thawte, Inc. OU=Certification Services Division/(c) 2006 thawte, Inc. - For authorized use only -# Subject: CN=thawte Primary Root CA O=thawte, Inc. OU=Certification Services Division/(c) 2006 thawte, Inc. - For authorized use only -# Label: "thawte Primary Root CA" -# Serial: 69529181992039203566298953787712940909 -# MD5 Fingerprint: 8c:ca:dc:0b:22:ce:f5:be:72:ac:41:1a:11:a8:d8:12 -# SHA1 Fingerprint: 91:c6:d6:ee:3e:8a:c8:63:84:e5:48:c2:99:29:5c:75:6c:81:7b:81 -# SHA256 Fingerprint: 8d:72:2f:81:a9:c1:13:c0:79:1d:f1:36:a2:96:6d:b2:6c:95:0a:97:1d:b4:6b:41:99:f4:ea:54:b7:8b:fb:9f ------BEGIN CERTIFICATE----- -MIIEIDCCAwigAwIBAgIQNE7VVyDV7exJ9C/ON9srbTANBgkqhkiG9w0BAQUFADCB -qTELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMf -Q2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIw -MDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxHzAdBgNV -BAMTFnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwHhcNMDYxMTE3MDAwMDAwWhcNMzYw -NzE2MjM1OTU5WjCBqTELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5j -LjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYG -A1UECxMvKGMpIDIwMDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl -IG9ubHkxHzAdBgNVBAMTFnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwggEiMA0GCSqG -SIb3DQEBAQUAA4IBDwAwggEKAoIBAQCsoPD7gFnUnMekz52hWXMJEEUMDSxuaPFs -W0hoSVk3/AszGcJ3f8wQLZU0HObrTQmnHNK4yZc2AreJ1CRfBsDMRJSUjQJib+ta -3RGNKJpchJAQeg29dGYvajig4tVUROsdB58Hum/u6f1OCyn1PoSgAfGcq/gcfomk -6KHYcWUNo1F77rzSImANuVud37r8UVsLr5iy6S7pBOhih94ryNdOwUxkHt3Ph1i6 -Sk/KaAcdHJ1KxtUvkcx8cXIcxcBn6zL9yZJclNqFwJu/U30rCfSMnZEfl2pSy94J -NqR32HuHUETVPm4pafs5SSYeCaWAe0At6+gnhcn+Yf1+5nyXHdWdAgMBAAGjQjBA -MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBR7W0XP -r87Lev0xkhpqtvNG61dIUDANBgkqhkiG9w0BAQUFAAOCAQEAeRHAS7ORtvzw6WfU -DW5FvlXok9LOAz/t2iWwHVfLHjp2oEzsUHboZHIMpKnxuIvW1oeEuzLlQRHAd9mz -YJ3rG9XRbkREqaYB7FViHXe4XI5ISXycO1cRrK1zN44veFyQaEfZYGDm/Ac9IiAX -xPcW6cTYcvnIc3zfFi8VqT79aie2oetaupgf1eNNZAqdE8hhuvU5HIe6uL17In/2 -/qxAeeWsEG89jxt5dovEN7MhGITlNgDrYyCZuen+MwS7QcjBAvlEYyCegc5C09Y/ -LHbTY5xZ3Y+m4Q6gLkH3LpVHz7z9M/P2C2F+fpErgUfCJzDupxBdN49cOSvkBPB7 -jVaMaA== ------END CERTIFICATE----- - -# Issuer: CN=VeriSign Class 3 Public Primary Certification Authority - G5 O=VeriSign, Inc. OU=VeriSign Trust Network/(c) 2006 VeriSign, Inc. - For authorized use only -# Subject: CN=VeriSign Class 3 Public Primary Certification Authority - G5 O=VeriSign, Inc. OU=VeriSign Trust Network/(c) 2006 VeriSign, Inc. - For authorized use only -# Label: "VeriSign Class 3 Public Primary Certification Authority - G5" -# Serial: 33037644167568058970164719475676101450 -# MD5 Fingerprint: cb:17:e4:31:67:3e:e2:09:fe:45:57:93:f3:0a:fa:1c -# SHA1 Fingerprint: 4e:b6:d5:78:49:9b:1c:cf:5f:58:1e:ad:56:be:3d:9b:67:44:a5:e5 -# SHA256 Fingerprint: 9a:cf:ab:7e:43:c8:d8:80:d0:6b:26:2a:94:de:ee:e4:b4:65:99:89:c3:d0:ca:f1:9b:af:64:05:e4:1a:b7:df ------BEGIN CERTIFICATE----- -MIIE0zCCA7ugAwIBAgIQGNrRniZ96LtKIVjNzGs7SjANBgkqhkiG9w0BAQUFADCB -yjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL -ExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJp -U2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxW -ZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0 -aG9yaXR5IC0gRzUwHhcNMDYxMTA4MDAwMDAwWhcNMzYwNzE2MjM1OTU5WjCByjEL -MAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZW -ZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJpU2ln -biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJp -U2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9y -aXR5IC0gRzUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvJAgIKXo1 -nmAMqudLO07cfLw8RRy7K+D+KQL5VwijZIUVJ/XxrcgxiV0i6CqqpkKzj/i5Vbex -t0uz/o9+B1fs70PbZmIVYc9gDaTY3vjgw2IIPVQT60nKWVSFJuUrjxuf6/WhkcIz -SdhDY2pSS9KP6HBRTdGJaXvHcPaz3BJ023tdS1bTlr8Vd6Gw9KIl8q8ckmcY5fQG -BO+QueQA5N06tRn/Arr0PO7gi+s3i+z016zy9vA9r911kTMZHRxAy3QkGSGT2RT+ -rCpSx4/VBEnkjWNHiDxpg8v+R70rfk/Fla4OndTRQ8Bnc+MUCH7lP59zuDMKz10/ -NIeWiu5T6CUVAgMBAAGjgbIwga8wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8E -BAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1hZ2UvZ2lmMCEwHzAH -BgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0cDovL2xvZ28udmVy -aXNpZ24uY29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFH/TZafC3ey78DAJ80M5+gKv -MzEzMA0GCSqGSIb3DQEBBQUAA4IBAQCTJEowX2LP2BqYLz3q3JktvXf2pXkiOOzE -p6B4Eq1iDkVwZMXnl2YtmAl+X6/WzChl8gGqCBpH3vn5fJJaCGkgDdk+bW48DW7Y -5gaRQBi5+MHt39tBquCWIMnNZBU4gcmU7qKEKQsTb47bDN0lAtukixlE0kF6BWlK -WE9gyn6CagsCqiUXObXbf+eEZSqVir2G3l6BFoMtEMze/aiCKm0oHw0LxOXnGiYZ -4fQRbxC1lfznQgUy286dUV4otp6F01vvpX1FQHKOtw5rDgb7MzVIcbidJ4vEZV8N -hnacRHr2lVz2XTIIM6RUthg/aFzyQkqFOFSDX9HoLPKsEdao7WNq ------END CERTIFICATE----- - -# Issuer: CN=SecureTrust CA O=SecureTrust Corporation -# Subject: CN=SecureTrust CA O=SecureTrust Corporation -# Label: "SecureTrust CA" -# Serial: 17199774589125277788362757014266862032 -# MD5 Fingerprint: dc:32:c3:a7:6d:25:57:c7:68:09:9d:ea:2d:a9:a2:d1 -# SHA1 Fingerprint: 87:82:c6:c3:04:35:3b:cf:d2:96:92:d2:59:3e:7d:44:d9:34:ff:11 -# SHA256 Fingerprint: f1:c1:b5:0a:e5:a2:0d:d8:03:0e:c9:f6:bc:24:82:3d:d3:67:b5:25:57:59:b4:e7:1b:61:fc:e9:f7:37:5d:73 ------BEGIN CERTIFICATE----- -MIIDuDCCAqCgAwIBAgIQDPCOXAgWpa1Cf/DrJxhZ0DANBgkqhkiG9w0BAQUFADBI -MQswCQYDVQQGEwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24x -FzAVBgNVBAMTDlNlY3VyZVRydXN0IENBMB4XDTA2MTEwNzE5MzExOFoXDTI5MTIz -MTE5NDA1NVowSDELMAkGA1UEBhMCVVMxIDAeBgNVBAoTF1NlY3VyZVRydXN0IENv -cnBvcmF0aW9uMRcwFQYDVQQDEw5TZWN1cmVUcnVzdCBDQTCCASIwDQYJKoZIhvcN -AQEBBQADggEPADCCAQoCggEBAKukgeWVzfX2FI7CT8rU4niVWJxB4Q2ZQCQXOZEz -Zum+4YOvYlyJ0fwkW2Gz4BERQRwdbvC4u/jep4G6pkjGnx29vo6pQT64lO0pGtSO -0gMdA+9tDWccV9cGrcrI9f4Or2YlSASWC12juhbDCE/RRvgUXPLIXgGZbf2IzIao -wW8xQmxSPmjL8xk037uHGFaAJsTQ3MBv396gwpEWoGQRS0S8Hvbn+mPeZqx2pHGj -7DaUaHp3pLHnDi+BeuK1cobvomuL8A/b01k/unK8RCSc43Oz969XL0Imnal0ugBS -8kvNU3xHCzaFDmapCJcWNFfBZveA4+1wVMeT4C4oFVmHursCAwEAAaOBnTCBmjAT -BgkrBgEEAYI3FAIEBh4EAEMAQTALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB -/zAdBgNVHQ4EFgQUQjK2FvoE/f5dS3rD/fdMQB1aQ68wNAYDVR0fBC0wKzApoCeg -JYYjaHR0cDovL2NybC5zZWN1cmV0cnVzdC5jb20vU1RDQS5jcmwwEAYJKwYBBAGC -NxUBBAMCAQAwDQYJKoZIhvcNAQEFBQADggEBADDtT0rhWDpSclu1pqNlGKa7UTt3 -6Z3q059c4EVlew3KW+JwULKUBRSuSceNQQcSc5R+DCMh/bwQf2AQWnL1mA6s7Ll/ -3XpvXdMc9P+IBWlCqQVxyLesJugutIxq/3HcuLHfmbx8IVQr5Fiiu1cprp6poxkm -D5kuCLDv/WnPmRoJjeOnnyvJNjR7JLN4TJUXpAYmHrZkUjZfYGfZnMUFdAvnZyPS -CPyI6a6Lf+Ew9Dd+/cYy2i2eRDAwbO4H3tI0/NL/QPZL9GZGBlSm8jIKYyYwa5vR -3ItHuuG51WLQoqD0ZwV4KWMabwTW+MZMo5qxN7SN5ShLHZ4swrhovO0C7jE= ------END CERTIFICATE----- - -# Issuer: CN=Secure Global CA O=SecureTrust Corporation -# Subject: CN=Secure Global CA O=SecureTrust Corporation -# Label: "Secure Global CA" -# Serial: 9751836167731051554232119481456978597 -# MD5 Fingerprint: cf:f4:27:0d:d4:ed:dc:65:16:49:6d:3d:da:bf:6e:de -# SHA1 Fingerprint: 3a:44:73:5a:e5:81:90:1f:24:86:61:46:1e:3b:9c:c4:5f:f5:3a:1b -# SHA256 Fingerprint: 42:00:f5:04:3a:c8:59:0e:bb:52:7d:20:9e:d1:50:30:29:fb:cb:d4:1c:a1:b5:06:ec:27:f1:5a:de:7d:ac:69 ------BEGIN CERTIFICATE----- -MIIDvDCCAqSgAwIBAgIQB1YipOjUiolN9BPI8PjqpTANBgkqhkiG9w0BAQUFADBK -MQswCQYDVQQGEwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24x -GTAXBgNVBAMTEFNlY3VyZSBHbG9iYWwgQ0EwHhcNMDYxMTA3MTk0MjI4WhcNMjkx -MjMxMTk1MjA2WjBKMQswCQYDVQQGEwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3Qg -Q29ycG9yYXRpb24xGTAXBgNVBAMTEFNlY3VyZSBHbG9iYWwgQ0EwggEiMA0GCSqG -SIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvNS7YrGxVaQZx5RNoJLNP2MwhR/jxYDiJ -iQPpvepeRlMJ3Fz1Wuj3RSoC6zFh1ykzTM7HfAo3fg+6MpjhHZevj8fcyTiW89sa -/FHtaMbQbqR8JNGuQsiWUGMu4P51/pinX0kuleM5M2SOHqRfkNJnPLLZ/kG5VacJ -jnIFHovdRIWCQtBJwB1g8NEXLJXr9qXBkqPFwqcIYA1gBBCWeZ4WNOaptvolRTnI -HmX5k/Wq8VLcmZg9pYYaDDUz+kulBAYVHDGA76oYa8J719rO+TMg1fW9ajMtgQT7 -sFzUnKPiXB3jqUJ1XnvUd+85VLrJChgbEplJL4hL/VBi0XPnj3pDAgMBAAGjgZ0w -gZowEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0PBAQDAgGGMA8GA1UdEwEB/wQF -MAMBAf8wHQYDVR0OBBYEFK9EBMJBfkiD2045AuzshHrmzsmkMDQGA1UdHwQtMCsw -KaAnoCWGI2h0dHA6Ly9jcmwuc2VjdXJldHJ1c3QuY29tL1NHQ0EuY3JsMBAGCSsG -AQQBgjcVAQQDAgEAMA0GCSqGSIb3DQEBBQUAA4IBAQBjGghAfaReUw132HquHw0L -URYD7xh8yOOvaliTFGCRsoTciE6+OYo68+aCiV0BN7OrJKQVDpI1WkpEXk5X+nXO -H0jOZvQ8QCaSmGwb7iRGDBezUqXbpZGRzzfTb+cnCDpOGR86p1hcF895P4vkp9Mm -I50mD1hp/Ed+stCNi5O/KU9DaXR2Z0vPB4zmAve14bRDtUstFJ/53CYNv6ZHdAbY -iNE6KTCEztI5gGIbqMdXSbxqVVFnFUq+NQfk1XWYN3kwFNspnWzFacxHVaIw98xc -f8LDmBxrThaA63p4ZUWiABqvDA1VZDRIuJK58bRQKfJPIx/abKwfROHdI3hRW8cW ------END CERTIFICATE----- - -# Issuer: CN=COMODO Certification Authority O=COMODO CA Limited -# Subject: CN=COMODO Certification Authority O=COMODO CA Limited -# Label: "COMODO Certification Authority" -# Serial: 104350513648249232941998508985834464573 -# MD5 Fingerprint: 5c:48:dc:f7:42:72:ec:56:94:6d:1c:cc:71:35:80:75 -# SHA1 Fingerprint: 66:31:bf:9e:f7:4f:9e:b6:c9:d5:a6:0c:ba:6a:be:d1:f7:bd:ef:7b -# SHA256 Fingerprint: 0c:2c:d6:3d:f7:80:6f:a3:99:ed:e8:09:11:6b:57:5b:f8:79:89:f0:65:18:f9:80:8c:86:05:03:17:8b:af:66 ------BEGIN CERTIFICATE----- -MIIEHTCCAwWgAwIBAgIQToEtioJl4AsC7j41AkblPTANBgkqhkiG9w0BAQUFADCB -gTELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4G -A1UEBxMHU2FsZm9yZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxJzAlBgNV -BAMTHkNPTU9ETyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjEyMDEwMDAw -MDBaFw0yOTEyMzEyMzU5NTlaMIGBMQswCQYDVQQGEwJHQjEbMBkGA1UECBMSR3Jl -YXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHEwdTYWxmb3JkMRowGAYDVQQKExFDT01P -RE8gQ0EgTGltaXRlZDEnMCUGA1UEAxMeQ09NT0RPIENlcnRpZmljYXRpb24gQXV0 -aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0ECLi3LjkRv3 -UcEbVASY06m/weaKXTuH+7uIzg3jLz8GlvCiKVCZrts7oVewdFFxze1CkU1B/qnI -2GqGd0S7WWaXUF601CxwRM/aN5VCaTwwxHGzUvAhTaHYujl8HJ6jJJ3ygxaYqhZ8 -Q5sVW7euNJH+1GImGEaaP+vB+fGQV+useg2L23IwambV4EajcNxo2f8ESIl33rXp -+2dtQem8Ob0y2WIC8bGoPW43nOIv4tOiJovGuFVDiOEjPqXSJDlqR6sA1KGzqSX+ -DT+nHbrTUcELpNqsOO9VUCQFZUaTNE8tja3G1CEZ0o7KBWFxB3NH5YoZEr0ETc5O -nKVIrLsm9wIDAQABo4GOMIGLMB0GA1UdDgQWBBQLWOWLxkwVN6RAqTCpIb5HNlpW -/zAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zBJBgNVHR8EQjBAMD6g -PKA6hjhodHRwOi8vY3JsLmNvbW9kb2NhLmNvbS9DT01PRE9DZXJ0aWZpY2F0aW9u -QXV0aG9yaXR5LmNybDANBgkqhkiG9w0BAQUFAAOCAQEAPpiem/Yb6dc5t3iuHXIY -SdOH5EOC6z/JqvWote9VfCFSZfnVDeFs9D6Mk3ORLgLETgdxb8CPOGEIqB6BCsAv -IC9Bi5HcSEW88cbeunZrM8gALTFGTO3nnc+IlP8zwFboJIYmuNg4ON8qa90SzMc/ -RxdMosIGlgnW2/4/PEZB31jiVg88O8EckzXZOFKs7sjsLjBOlDW0JB9LeGna8gI4 -zJVSk/BwJVmcIGfE7vmLV2H0knZ9P4SNVbfo5azV8fUZVqZa+5Acr5Pr5RzUZ5dd -BA6+C4OmF4O5MBKgxTMVBbkN+8cFduPYSo38NBejxiEovjBFMR7HeL5YYTisO+IB -ZQ== ------END CERTIFICATE----- - -# Issuer: CN=Network Solutions Certificate Authority O=Network Solutions L.L.C. -# Subject: CN=Network Solutions Certificate Authority O=Network Solutions L.L.C. -# Label: "Network Solutions Certificate Authority" -# Serial: 116697915152937497490437556386812487904 -# MD5 Fingerprint: d3:f3:a6:16:c0:fa:6b:1d:59:b1:2d:96:4d:0e:11:2e -# SHA1 Fingerprint: 74:f8:a3:c3:ef:e7:b3:90:06:4b:83:90:3c:21:64:60:20:e5:df:ce -# SHA256 Fingerprint: 15:f0:ba:00:a3:ac:7a:f3:ac:88:4c:07:2b:10:11:a0:77:bd:77:c0:97:f4:01:64:b2:f8:59:8a:bd:83:86:0c ------BEGIN CERTIFICATE----- -MIID5jCCAs6gAwIBAgIQV8szb8JcFuZHFhfjkDFo4DANBgkqhkiG9w0BAQUFADBi -MQswCQYDVQQGEwJVUzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMu -MTAwLgYDVQQDEydOZXR3b3JrIFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3Jp -dHkwHhcNMDYxMjAxMDAwMDAwWhcNMjkxMjMxMjM1OTU5WjBiMQswCQYDVQQGEwJV -UzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMuMTAwLgYDVQQDEydO -ZXR3b3JrIFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0GCSqG -SIb3DQEBAQUAA4IBDwAwggEKAoIBAQDkvH6SMG3G2I4rC7xGzuAnlt7e+foS0zwz -c7MEL7xxjOWftiJgPl9dzgn/ggwbmlFQGiaJ3dVhXRncEg8tCqJDXRfQNJIg6nPP -OCwGJgl6cvf6UDL4wpPTaaIjzkGxzOTVHzbRijr4jGPiFFlp7Q3Tf2vouAPlT2rl -mGNpSAW+Lv8ztumXWWn4Zxmuk2GWRBXTcrA/vGp97Eh/jcOrqnErU2lBUzS1sLnF -BgrEsEX1QV1uiUV7PTsmjHTC5dLRfbIR1PtYMiKagMnc/Qzpf14Dl847ABSHJ3A4 -qY5usyd2mFHgBeMhqxrVhSI8KbWaFsWAqPS7azCPL0YCorEMIuDTAgMBAAGjgZcw -gZQwHQYDVR0OBBYEFCEwyfsA106Y2oeqKtCnLrFAMadMMA4GA1UdDwEB/wQEAwIB -BjAPBgNVHRMBAf8EBTADAQH/MFIGA1UdHwRLMEkwR6BFoEOGQWh0dHA6Ly9jcmwu -bmV0c29sc3NsLmNvbS9OZXR3b3JrU29sdXRpb25zQ2VydGlmaWNhdGVBdXRob3Jp -dHkuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQC7rkvnt1frf6ott3NHhWrB5KUd5Oc8 -6fRZZXe1eltajSU24HqXLjjAV2CDmAaDn7l2em5Q4LqILPxFzBiwmZVRDuwduIj/ -h1AcgsLj4DKAv6ALR8jDMe+ZZzKATxcheQxpXN5eNK4CtSbqUN9/GGUsyfJj4akH -/nxxH2szJGoeBfcFaMBqEssuXmHLrijTfsK0ZpEmXzwuJF/LWA/rKOyvEZbz3Htv -wKeI8lN3s2Berq4o2jUsbzRF0ybh3uxbTydrFny9RAQYgrOJeRcQcT16ohZO9QHN -pGxlaKFJdlxDydi8NmdspZS11My5vWo1ViHe2MPr+8ukYEywVaCge1ey ------END CERTIFICATE----- - -# Issuer: CN=COMODO ECC Certification Authority O=COMODO CA Limited -# Subject: CN=COMODO ECC Certification Authority O=COMODO CA Limited -# Label: "COMODO ECC Certification Authority" -# Serial: 41578283867086692638256921589707938090 -# MD5 Fingerprint: 7c:62:ff:74:9d:31:53:5e:68:4a:d5:78:aa:1e:bf:23 -# SHA1 Fingerprint: 9f:74:4e:9f:2b:4d:ba:ec:0f:31:2c:50:b6:56:3b:8e:2d:93:c3:11 -# SHA256 Fingerprint: 17:93:92:7a:06:14:54:97:89:ad:ce:2f:8f:34:f7:f0:b6:6d:0f:3a:e3:a3:b8:4d:21:ec:15:db:ba:4f:ad:c7 ------BEGIN CERTIFICATE----- -MIICiTCCAg+gAwIBAgIQH0evqmIAcFBUTAGem2OZKjAKBggqhkjOPQQDAzCBhTEL -MAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UE -BxMHU2FsZm9yZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMT -IkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDgwMzA2MDAw -MDAwWhcNMzgwMTE4MjM1OTU5WjCBhTELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdy -ZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UEChMRQ09N -T0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlv -biBBdXRob3JpdHkwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQDR3svdcmCFYX7deSR -FtSrYpn1PlILBs5BAH+X4QokPB0BBO490o0JlwzgdeT6+3eKKvUDYEs2ixYjFq0J -cfRK9ChQtP6IHG4/bC8vCVlbpVsLM5niwz2J+Wos77LTBumjQjBAMB0GA1UdDgQW -BBR1cacZSBm8nZ3qQUfflMRId5nTeTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/ -BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjEA7wNbeqy3eApyt4jf/7VGFAkK+qDm -fQjGGoe9GKhzvSbKYAydzpmfz1wPMOG+FDHqAjAU9JM8SaczepBGR7NjfRObTrdv -GDeAU/7dIOA1mjbRxwG55tzd8/8dLDoWV9mSOdY= ------END CERTIFICATE----- - -# Issuer: CN=OISTE WISeKey Global Root GA CA O=WISeKey OU=Copyright (c) 2005/OISTE Foundation Endorsed -# Subject: CN=OISTE WISeKey Global Root GA CA O=WISeKey OU=Copyright (c) 2005/OISTE Foundation Endorsed -# Label: "OISTE WISeKey Global Root GA CA" -# Serial: 86718877871133159090080555911823548314 -# MD5 Fingerprint: bc:6c:51:33:a7:e9:d3:66:63:54:15:72:1b:21:92:93 -# SHA1 Fingerprint: 59:22:a1:e1:5a:ea:16:35:21:f8:98:39:6a:46:46:b0:44:1b:0f:a9 -# SHA256 Fingerprint: 41:c9:23:86:6a:b4:ca:d6:b7:ad:57:80:81:58:2e:02:07:97:a6:cb:df:4f:ff:78:ce:83:96:b3:89:37:d7:f5 ------BEGIN CERTIFICATE----- -MIID8TCCAtmgAwIBAgIQQT1yx/RrH4FDffHSKFTfmjANBgkqhkiG9w0BAQUFADCB -ijELMAkGA1UEBhMCQ0gxEDAOBgNVBAoTB1dJU2VLZXkxGzAZBgNVBAsTEkNvcHly -aWdodCAoYykgMjAwNTEiMCAGA1UECxMZT0lTVEUgRm91bmRhdGlvbiBFbmRvcnNl -ZDEoMCYGA1UEAxMfT0lTVEUgV0lTZUtleSBHbG9iYWwgUm9vdCBHQSBDQTAeFw0w -NTEyMTExNjAzNDRaFw0zNzEyMTExNjA5NTFaMIGKMQswCQYDVQQGEwJDSDEQMA4G -A1UEChMHV0lTZUtleTEbMBkGA1UECxMSQ29weXJpZ2h0IChjKSAyMDA1MSIwIAYD -VQQLExlPSVNURSBGb3VuZGF0aW9uIEVuZG9yc2VkMSgwJgYDVQQDEx9PSVNURSBX -SVNlS2V5IEdsb2JhbCBSb290IEdBIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A -MIIBCgKCAQEAy0+zAJs9Nt350UlqaxBJH+zYK7LG+DKBKUOVTJoZIyEVRd7jyBxR -VVuuk+g3/ytr6dTqvirdqFEr12bDYVxgAsj1znJ7O7jyTmUIms2kahnBAbtzptf2 -w93NvKSLtZlhuAGio9RN1AU9ka34tAhxZK9w8RxrfvbDd50kc3vkDIzh2TbhmYsF -mQvtRTEJysIA2/dyoJaqlYfQjse2YXMNdmaM3Bu0Y6Kff5MTMPGhJ9vZ/yxViJGg -4E8HsChWjBgbl0SOid3gF27nKu+POQoxhILYQBRJLnpB5Kf+42TMwVlxSywhp1t9 -4B3RLoGbw9ho972WG6xwsRYUC9tguSYBBQIDAQABo1EwTzALBgNVHQ8EBAMCAYYw -DwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUswN+rja8sHnR3JQmthG+IbJphpQw -EAYJKwYBBAGCNxUBBAMCAQAwDQYJKoZIhvcNAQEFBQADggEBAEuh/wuHbrP5wUOx -SPMowB0uyQlB+pQAHKSkq0lPjz0e701vvbyk9vImMMkQyh2I+3QZH4VFvbBsUfk2 -ftv1TDI6QU9bR8/oCy22xBmddMVHxjtqD6wU2zz0c5ypBd8A3HR4+vg1YFkCExh8 -vPtNsCBtQ7tgMHpnM1zFmdH4LTlSc/uMqpclXHLZCB6rTjzjgTGfA6b7wP4piFXa -hNVQA7bihKOmNqoROgHhGEvWRGizPflTdISzRpFGlgC3gCy24eMQ4tui5yiPAZZi -Fj4A4xylNoEYokxSdsARo27mHbrjWr42U8U+dY+GaSlYU7Wcu2+fXMUY7N0v4ZjJ -/L7fCg0= ------END CERTIFICATE----- - -# Issuer: CN=Certigna O=Dhimyotis -# Subject: CN=Certigna O=Dhimyotis -# Label: "Certigna" -# Serial: 18364802974209362175 -# MD5 Fingerprint: ab:57:a6:5b:7d:42:82:19:b5:d8:58:26:28:5e:fd:ff -# SHA1 Fingerprint: b1:2e:13:63:45:86:a4:6f:1a:b2:60:68:37:58:2d:c4:ac:fd:94:97 -# SHA256 Fingerprint: e3:b6:a2:db:2e:d7:ce:48:84:2f:7a:c5:32:41:c7:b7:1d:54:14:4b:fb:40:c1:1f:3f:1d:0b:42:f5:ee:a1:2d ------BEGIN CERTIFICATE----- -MIIDqDCCApCgAwIBAgIJAP7c4wEPyUj/MA0GCSqGSIb3DQEBBQUAMDQxCzAJBgNV -BAYTAkZSMRIwEAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hMB4X -DTA3MDYyOTE1MTMwNVoXDTI3MDYyOTE1MTMwNVowNDELMAkGA1UEBhMCRlIxEjAQ -BgNVBAoMCURoaW15b3RpczERMA8GA1UEAwwIQ2VydGlnbmEwggEiMA0GCSqGSIb3 -DQEBAQUAA4IBDwAwggEKAoIBAQDIaPHJ1tazNHUmgh7stL7qXOEm7RFHYeGifBZ4 -QCHkYJ5ayGPhxLGWkv8YbWkj4Sti993iNi+RB7lIzw7sebYs5zRLcAglozyHGxny -gQcPOJAZ0xH+hrTy0V4eHpbNgGzOOzGTtvKg0KmVEn2lmsxryIRWijOp5yIVUxbw -zBfsV1/pogqYCd7jX5xv3EjjhQsVWqa6n6xI4wmy9/Qy3l40vhx4XUJbzg4ij02Q -130yGLMLLGq/jj8UEYkgDncUtT2UCIf3JR7VsmAA7G8qKCVuKj4YYxclPz5EIBb2 -JsglrgVKtOdjLPOMFlN+XPsRGgjBRmKfIrjxwo1p3Po6WAbfAgMBAAGjgbwwgbkw -DwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUGu3+QTmQtCRZvgHyUtVF9lo53BEw -ZAYDVR0jBF0wW4AUGu3+QTmQtCRZvgHyUtVF9lo53BGhOKQ2MDQxCzAJBgNVBAYT -AkZSMRIwEAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hggkA/tzj -AQ/JSP8wDgYDVR0PAQH/BAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIABzANBgkqhkiG -9w0BAQUFAAOCAQEAhQMeknH2Qq/ho2Ge6/PAD/Kl1NqV5ta+aDY9fm4fTIrv0Q8h -bV6lUmPOEvjvKtpv6zf+EwLHyzs+ImvaYS5/1HI93TDhHkxAGYwP15zRgzB7mFnc -fca5DClMoTOi62c6ZYTTluLtdkVwj7Ur3vkj1kluPBS1xp81HlDQwY9qcEQCYsuu -HWhBp6pX6FOqB9IG9tUUBguRA3UsbHK1YZWaDYu5Def131TN3ubY1gkIl2PlwS6w -t0QmwCbAr1UwnjvVNioZBPRcHv/PLLf/0P2HQBHVESO7SMAhqaQoLf0V+LBOK/Qw -WyH8EZE0vkHve52Xdf+XlcCWWC/qu0bXu+TZLg== ------END CERTIFICATE----- - -# Issuer: CN=Deutsche Telekom Root CA 2 O=Deutsche Telekom AG OU=T-TeleSec Trust Center -# Subject: CN=Deutsche Telekom Root CA 2 O=Deutsche Telekom AG OU=T-TeleSec Trust Center -# Label: "Deutsche Telekom Root CA 2" -# Serial: 38 -# MD5 Fingerprint: 74:01:4a:91:b1:08:c4:58:ce:47:cd:f0:dd:11:53:08 -# SHA1 Fingerprint: 85:a4:08:c0:9c:19:3e:5d:51:58:7d:cd:d6:13:30:fd:8c:de:37:bf -# SHA256 Fingerprint: b6:19:1a:50:d0:c3:97:7f:7d:a9:9b:cd:aa:c8:6a:22:7d:ae:b9:67:9e:c7:0b:a3:b0:c9:d9:22:71:c1:70:d3 ------BEGIN CERTIFICATE----- -MIIDnzCCAoegAwIBAgIBJjANBgkqhkiG9w0BAQUFADBxMQswCQYDVQQGEwJERTEc -MBoGA1UEChMTRGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0GA1UECxMWVC1UZWxlU2Vj -IFRydXN0IENlbnRlcjEjMCEGA1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBSb290IENB -IDIwHhcNOTkwNzA5MTIxMTAwWhcNMTkwNzA5MjM1OTAwWjBxMQswCQYDVQQGEwJE -RTEcMBoGA1UEChMTRGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0GA1UECxMWVC1UZWxl -U2VjIFRydXN0IENlbnRlcjEjMCEGA1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBSb290 -IENBIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCrC6M14IspFLEU -ha88EOQ5bzVdSq7d6mGNlUn0b2SjGmBmpKlAIoTZ1KXleJMOaAGtuU1cOs7TuKhC -QN/Po7qCWWqSG6wcmtoIKyUn+WkjR/Hg6yx6m/UTAtB+NHzCnjwAWav12gz1Mjwr -rFDa1sPeg5TKqAyZMg4ISFZbavva4VhYAUlfckE8FQYBjl2tqriTtM2e66foai1S -NNs671x1Udrb8zH57nGYMsRUFUQM+ZtV7a3fGAigo4aKSe5TBY8ZTNXeWHmb0moc -QqvF1afPaA+W5OFhmHZhyJF81j4A4pFQh+GdCuatl9Idxjp9y7zaAzTVjlsB9WoH -txa2bkp/AgMBAAGjQjBAMB0GA1UdDgQWBBQxw3kbuvVT1xfgiXotF2wKsyudMzAP -BgNVHRMECDAGAQH/AgEFMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOC -AQEAlGRZrTlk5ynrE/5aw4sTV8gEJPB0d8Bg42f76Ymmg7+Wgnxu1MM9756Abrsp -tJh6sTtU6zkXR34ajgv8HzFZMQSyzhfzLMdiNlXiItiJVbSYSKpk+tYcNthEeFpa -IzpXl/V6ME+un2pMSyuOoAPjPuCp1NJ70rOo4nI8rZ7/gFnkm0W09juwzTkZmDLl -6iFhkOQxIY40sfcvNUqFENrnijchvllj4PKFiDFT1FQUhXB59C4Gdyd1Lx+4ivn+ -xbrYNuSD7Odlt79jWvNGr4GUN9RBjNYj1h7P9WgbRGOiWrqnNVmh5XAFmw4jV5mU -Cm26OWMohpLzGITY+9HPBVZkVw== ------END CERTIFICATE----- - -# Issuer: CN=Cybertrust Global Root O=Cybertrust, Inc -# Subject: CN=Cybertrust Global Root O=Cybertrust, Inc -# Label: "Cybertrust Global Root" -# Serial: 4835703278459682877484360 -# MD5 Fingerprint: 72:e4:4a:87:e3:69:40:80:77:ea:bc:e3:f4:ff:f0:e1 -# SHA1 Fingerprint: 5f:43:e5:b1:bf:f8:78:8c:ac:1c:c7:ca:4a:9a:c6:22:2b:cc:34:c6 -# SHA256 Fingerprint: 96:0a:df:00:63:e9:63:56:75:0c:29:65:dd:0a:08:67:da:0b:9c:bd:6e:77:71:4a:ea:fb:23:49:ab:39:3d:a3 ------BEGIN CERTIFICATE----- -MIIDoTCCAomgAwIBAgILBAAAAAABD4WqLUgwDQYJKoZIhvcNAQEFBQAwOzEYMBYG -A1UEChMPQ3liZXJ0cnVzdCwgSW5jMR8wHQYDVQQDExZDeWJlcnRydXN0IEdsb2Jh -bCBSb290MB4XDTA2MTIxNTA4MDAwMFoXDTIxMTIxNTA4MDAwMFowOzEYMBYGA1UE -ChMPQ3liZXJ0cnVzdCwgSW5jMR8wHQYDVQQDExZDeWJlcnRydXN0IEdsb2JhbCBS -b290MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA+Mi8vRRQZhP/8NN5 -7CPytxrHjoXxEnOmGaoQ25yiZXRadz5RfVb23CO21O1fWLE3TdVJDm71aofW0ozS -J8bi/zafmGWgE07GKmSb1ZASzxQG9Dvj1Ci+6A74q05IlG2OlTEQXO2iLb3VOm2y -HLtgwEZLAfVJrn5GitB0jaEMAs7u/OePuGtm839EAL9mJRQr3RAwHQeWP032a7iP -t3sMpTjr3kfb1V05/Iin89cqdPHoWqI7n1C6poxFNcJQZZXcY4Lv3b93TZxiyWNz -FtApD0mpSPCzqrdsxacwOUBdrsTiXSZT8M4cIwhhqJQZugRiQOwfOHB3EgZxpzAY -XSUnpQIDAQABo4GlMIGiMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/ -MB0GA1UdDgQWBBS2CHsNesysIEyGVjJez6tuhS1wVzA/BgNVHR8EODA2MDSgMqAw -hi5odHRwOi8vd3d3Mi5wdWJsaWMtdHJ1c3QuY29tL2NybC9jdC9jdHJvb3QuY3Js -MB8GA1UdIwQYMBaAFLYIew16zKwgTIZWMl7Pq26FLXBXMA0GCSqGSIb3DQEBBQUA -A4IBAQBW7wojoFROlZfJ+InaRcHUowAl9B8Tq7ejhVhpwjCt2BWKLePJzYFa+HMj -Wqd8BfP9IjsO0QbE2zZMcwSO5bAi5MXzLqXZI+O4Tkogp24CJJ8iYGd7ix1yCcUx -XOl5n4BHPa2hCwcUPUf/A2kaDAtE52Mlp3+yybh2hO0j9n0Hq0V+09+zv+mKts2o -omcrUtW3ZfA5TGOgkXmTUg9U3YO7n9GPp1Nzw8v/MOx8BLjYRB+TX3EJIrduPuoc -A06dGiBh+4E37F78CkWr1+cXVdCg6mCbpvbjjFspwgZgFJ0tl0ypkxWdYcQBX0jW -WL1WMRJOEcgh4LMRkWXbtKaIOM5V ------END CERTIFICATE----- - -# Issuer: O=Chunghwa Telecom Co., Ltd. OU=ePKI Root Certification Authority -# Subject: O=Chunghwa Telecom Co., Ltd. OU=ePKI Root Certification Authority -# Label: "ePKI Root Certification Authority" -# Serial: 28956088682735189655030529057352760477 -# MD5 Fingerprint: 1b:2e:00:ca:26:06:90:3d:ad:fe:6f:15:68:d3:6b:b3 -# SHA1 Fingerprint: 67:65:0d:f1:7e:8e:7e:5b:82:40:a4:f4:56:4b:cf:e2:3d:69:c6:f0 -# SHA256 Fingerprint: c0:a6:f4:dc:63:a2:4b:fd:cf:54:ef:2a:6a:08:2a:0a:72:de:35:80:3e:2f:f5:ff:52:7a:e5:d8:72:06:df:d5 ------BEGIN CERTIFICATE----- -MIIFsDCCA5igAwIBAgIQFci9ZUdcr7iXAF7kBtK8nTANBgkqhkiG9w0BAQUFADBe -MQswCQYDVQQGEwJUVzEjMCEGA1UECgwaQ2h1bmdod2EgVGVsZWNvbSBDby4sIEx0 -ZC4xKjAoBgNVBAsMIWVQS0kgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAe -Fw0wNDEyMjAwMjMxMjdaFw0zNDEyMjAwMjMxMjdaMF4xCzAJBgNVBAYTAlRXMSMw -IQYDVQQKDBpDaHVuZ2h3YSBUZWxlY29tIENvLiwgTHRkLjEqMCgGA1UECwwhZVBL -SSBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIICIjANBgkqhkiG9w0BAQEF -AAOCAg8AMIICCgKCAgEA4SUP7o3biDN1Z82tH306Tm2d0y8U82N0ywEhajfqhFAH -SyZbCUNsIZ5qyNUD9WBpj8zwIuQf5/dqIjG3LBXy4P4AakP/h2XGtRrBp0xtInAh -ijHyl3SJCRImHJ7K2RKilTza6We/CKBk49ZCt0Xvl/T29de1ShUCWH2YWEtgvM3X -DZoTM1PRYfl61dd4s5oz9wCGzh1NlDivqOx4UXCKXBCDUSH3ET00hl7lSM2XgYI1 -TBnsZfZrxQWh7kcT1rMhJ5QQCtkkO7q+RBNGMD+XPNjX12ruOzjjK9SXDrkb5wdJ -fzcq+Xd4z1TtW0ado4AOkUPB1ltfFLqfpo0kR0BZv3I4sjZsN/+Z0V0OWQqraffA -sgRFelQArr5T9rXn4fg8ozHSqf4hUmTFpmfwdQcGlBSBVcYn5AGPF8Fqcde+S/uU -WH1+ETOxQvdibBjWzwloPn9s9h6PYq2lY9sJpx8iQkEeb5mKPtf5P0B6ebClAZLS -nT0IFaUQAS2zMnaolQ2zepr7BxB4EW/hj8e6DyUadCrlHJhBmd8hh+iVBmoKs2pH -dmX2Os+PYhcZewoozRrSgx4hxyy/vv9haLdnG7t4TY3OZ+XkwY63I2binZB1NJip -NiuKmpS5nezMirH4JYlcWrYvjB9teSSnUmjDhDXiZo1jDiVN1Rmy5nk3pyKdVDEC -AwEAAaNqMGgwHQYDVR0OBBYEFB4M97Zn8uGSJglFwFU5Lnc/QkqiMAwGA1UdEwQF -MAMBAf8wOQYEZyoHAAQxMC8wLQIBADAJBgUrDgMCGgUAMAcGBWcqAwAABBRFsMLH -ClZ87lt4DJX5GFPBphzYEDANBgkqhkiG9w0BAQUFAAOCAgEACbODU1kBPpVJufGB -uvl2ICO1J2B01GqZNF5sAFPZn/KmsSQHRGoqxqWOeBLoR9lYGxMqXnmbnwoqZ6Yl -PwZpVnPDimZI+ymBV3QGypzqKOg4ZyYr8dW1P2WT+DZdjo2NQCCHGervJ8A9tDkP -JXtoUHRVnAxZfVo9QZQlUgjgRywVMRnVvwdVxrsStZf0X4OFunHB2WyBEXYKCrC/ -gpf36j36+uwtqSiUO1bd0lEursC9CBWMd1I0ltabrNMdjmEPNXubrjlpC2JgQCA2 -j6/7Nu4tCEoduL+bXPjqpRugc6bY+G7gMwRfaKonh+3ZwZCc7b3jajWvY9+rGNm6 -5ulK6lCKD2GTHuItGeIwlDWSXQ62B68ZgI9HkFFLLk3dheLSClIKF5r8GrBQAuUB -o2M3IUxExJtRmREOc5wGj1QupyheRDmHVi03vYVElOEMSyycw5KFNGHLD7ibSkNS -/jQ6fbjpKdx2qcgw+BRxgMYeNkh0IkFch4LoGHGLQYlE535YW6i4jRPpp2zDR+2z -Gp1iro2C6pSe3VkQw63d4k3jMdXH7OjysP6SHhYKGvzZ8/gntsm+HbRsZJB/9OTE -W9c3rkIO3aQab3yIVMUWbuF6aC74Or8NpDyJO3inTmODBCEIZ43ygknQW/2xzQ+D -hNQ+IIX3Sj0rnP0qCglN6oH4EZw= ------END CERTIFICATE----- - -# Issuer: O=certSIGN OU=certSIGN ROOT CA -# Subject: O=certSIGN OU=certSIGN ROOT CA -# Label: "certSIGN ROOT CA" -# Serial: 35210227249154 -# MD5 Fingerprint: 18:98:c0:d6:e9:3a:fc:f9:b0:f5:0c:f7:4b:01:44:17 -# SHA1 Fingerprint: fa:b7:ee:36:97:26:62:fb:2d:b0:2a:f6:bf:03:fd:e8:7c:4b:2f:9b -# SHA256 Fingerprint: ea:a9:62:c4:fa:4a:6b:af:eb:e4:15:19:6d:35:1c:cd:88:8d:4f:53:f3:fa:8a:e6:d7:c4:66:a9:4e:60:42:bb ------BEGIN CERTIFICATE----- -MIIDODCCAiCgAwIBAgIGIAYFFnACMA0GCSqGSIb3DQEBBQUAMDsxCzAJBgNVBAYT -AlJPMREwDwYDVQQKEwhjZXJ0U0lHTjEZMBcGA1UECxMQY2VydFNJR04gUk9PVCBD -QTAeFw0wNjA3MDQxNzIwMDRaFw0zMTA3MDQxNzIwMDRaMDsxCzAJBgNVBAYTAlJP -MREwDwYDVQQKEwhjZXJ0U0lHTjEZMBcGA1UECxMQY2VydFNJR04gUk9PVCBDQTCC -ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALczuX7IJUqOtdu0KBuqV5Do -0SLTZLrTk+jUrIZhQGpgV2hUhE28alQCBf/fm5oqrl0Hj0rDKH/v+yv6efHHrfAQ -UySQi2bJqIirr1qjAOm+ukbuW3N7LBeCgV5iLKECZbO9xSsAfsT8AzNXDe3i+s5d -RdY4zTW2ssHQnIFKquSyAVwdj1+ZxLGt24gh65AIgoDzMKND5pCCrlUoSe1b16kQ -OA7+j0xbm0bqQfWwCHTD0IgztnzXdN/chNFDDnU5oSVAKOp4yw4sLjmdjItuFhwv -JoIQ4uNllAoEwF73XVv4EOLQunpL+943AAAaWyjj0pxzPjKHmKHJUS/X3qwzs08C -AwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAcYwHQYDVR0O -BBYEFOCMm9slSbPxfIbWskKHC9BroNnkMA0GCSqGSIb3DQEBBQUAA4IBAQA+0hyJ -LjX8+HXd5n9liPRyTMks1zJO890ZeUe9jjtbkw9QSSQTaxQGcu8J06Gh40CEyecY -MnQ8SG4Pn0vU9x7Tk4ZkVJdjclDVVc/6IJMCopvDI5NOFlV2oHB5bc0hH88vLbwZ -44gx+FkagQnIl6Z0x2DEW8xXjrJ1/RsCCdtZb3KTafcxQdaIOL+Hsr0Wefmq5L6I -Jd1hJyMctTEHBDa0GpC9oHRxUIltvBTjD4au8as+x6AJzKNI0eDbZOeStc+vckNw -i/nDhDwTqn6Sm1dTk/pwwpEOMfmbZ13pljheX7NzTogVZ96edhBiIL5VaZVDADlN -9u6wWk5JRFRYX0KD ------END CERTIFICATE----- - -# Issuer: CN=GeoTrust Primary Certification Authority - G3 O=GeoTrust Inc. OU=(c) 2008 GeoTrust Inc. - For authorized use only -# Subject: CN=GeoTrust Primary Certification Authority - G3 O=GeoTrust Inc. OU=(c) 2008 GeoTrust Inc. - For authorized use only -# Label: "GeoTrust Primary Certification Authority - G3" -# Serial: 28809105769928564313984085209975885599 -# MD5 Fingerprint: b5:e8:34:36:c9:10:44:58:48:70:6d:2e:83:d4:b8:05 -# SHA1 Fingerprint: 03:9e:ed:b8:0b:e7:a0:3c:69:53:89:3b:20:d2:d9:32:3a:4c:2a:fd -# SHA256 Fingerprint: b4:78:b8:12:25:0d:f8:78:63:5c:2a:a7:ec:7d:15:5e:aa:62:5e:e8:29:16:e2:cd:29:43:61:88:6c:d1:fb:d4 ------BEGIN CERTIFICATE----- -MIID/jCCAuagAwIBAgIQFaxulBmyeUtB9iepwxgPHzANBgkqhkiG9w0BAQsFADCB -mDELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsT -MChjKSAyMDA4IEdlb1RydXN0IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25s -eTE2MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhv -cml0eSAtIEczMB4XDTA4MDQwMjAwMDAwMFoXDTM3MTIwMTIzNTk1OVowgZgxCzAJ -BgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAoYykg -MjAwOCBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0 -BgNVBAMTLUdlb1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg -LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANziXmJYHTNXOTIz -+uvLh4yn1ErdBojqZI4xmKU4kB6Yzy5jK/BGvESyiaHAKAxJcCGVn2TAppMSAmUm -hsalifD614SgcK9PGpc/BkTVyetyEH3kMSj7HGHmKAdEc5IiaacDiGydY8hS2pgn -5whMcD60yRLBxWeDXTPzAxHsatBT4tG6NmCUgLthY2xbF37fQJQeqw3CIShwiP/W -JmxsYAQlTlV+fe+/lEjetx3dcI0FX4ilm/LC7urRQEFtYjgdVgbFA0dRIBn8exAL -DmKudlW/X3e+PkkBUz2YJQN2JFodtNuJ6nnltrM7P7pMKEF/BqxqjsHQ9gUdfeZC -huOl1UcCAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYw -HQYDVR0OBBYEFMR5yo6hTgMdHNxr2zFblD4/MH8tMA0GCSqGSIb3DQEBCwUAA4IB -AQAtxRPPVoB7eni9n64smefv2t+UXglpp+duaIy9cr5HqQ6XErhK8WTTOd8lNNTB -zU6B8A8ExCSzNJbGpqow32hhc9f5joWJ7w5elShKKiePEI4ufIbEAp7aDHdlDkQN -kv39sxY2+hENHYwOB4lqKVb3cvTdFZx3NWZXqxNT2I7BQMXXExZacse3aQHEerGD -AWh9jUGhlBjBJVz88P6DAod8DQ3PLghcSkANPuyBYeYk28rgDi0Hsj5W3I31QYUH -SJsMC8tJP33st/3LjWeJGqvtux6jAAgIFyqCXDFdRootD4abdNlF+9RAsXqqaC2G -spki4cErx5z481+oghLrGREt ------END CERTIFICATE----- - -# Issuer: CN=thawte Primary Root CA - G2 O=thawte, Inc. OU=(c) 2007 thawte, Inc. - For authorized use only -# Subject: CN=thawte Primary Root CA - G2 O=thawte, Inc. OU=(c) 2007 thawte, Inc. - For authorized use only -# Label: "thawte Primary Root CA - G2" -# Serial: 71758320672825410020661621085256472406 -# MD5 Fingerprint: 74:9d:ea:60:24:c4:fd:22:53:3e:cc:3a:72:d9:29:4f -# SHA1 Fingerprint: aa:db:bc:22:23:8f:c4:01:a1:27:bb:38:dd:f4:1d:db:08:9e:f0:12 -# SHA256 Fingerprint: a4:31:0d:50:af:18:a6:44:71:90:37:2a:86:af:af:8b:95:1f:fb:43:1d:83:7f:1e:56:88:b4:59:71:ed:15:57 ------BEGIN CERTIFICATE----- -MIICiDCCAg2gAwIBAgIQNfwmXNmET8k9Jj1Xm67XVjAKBggqhkjOPQQDAzCBhDEL -MAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjE4MDYGA1UECxMvKGMp -IDIwMDcgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxJDAi -BgNVBAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EgLSBHMjAeFw0wNzExMDUwMDAw -MDBaFw0zODAxMTgyMzU5NTlaMIGEMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMdGhh -d3RlLCBJbmMuMTgwNgYDVQQLEy8oYykgMjAwNyB0aGF3dGUsIEluYy4gLSBGb3Ig -YXV0aG9yaXplZCB1c2Ugb25seTEkMCIGA1UEAxMbdGhhd3RlIFByaW1hcnkgUm9v -dCBDQSAtIEcyMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEotWcgnuVnfFSeIf+iha/ -BebfowJPDQfGAFG6DAJSLSKkQjnE/o/qycG+1E3/n3qe4rF8mq2nhglzh9HnmuN6 -papu+7qzcMBniKI11KOasf2twu8x+qi58/sIxpHR+ymVo0IwQDAPBgNVHRMBAf8E -BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUmtgAMADna3+FGO6Lts6K -DPgR4bswCgYIKoZIzj0EAwMDaQAwZgIxAN344FdHW6fmCsO99YCKlzUNG4k8VIZ3 -KMqh9HneteY4sPBlcIx/AlTCv//YoT7ZzwIxAMSNlPzcU9LcnXgWHxUzI1NS41ox -XZ3Krr0TKUQNJ1uo52icEvdYPy5yAlejj6EULg== ------END CERTIFICATE----- - -# Issuer: CN=thawte Primary Root CA - G3 O=thawte, Inc. OU=Certification Services Division/(c) 2008 thawte, Inc. - For authorized use only -# Subject: CN=thawte Primary Root CA - G3 O=thawte, Inc. OU=Certification Services Division/(c) 2008 thawte, Inc. - For authorized use only -# Label: "thawte Primary Root CA - G3" -# Serial: 127614157056681299805556476275995414779 -# MD5 Fingerprint: fb:1b:5d:43:8a:94:cd:44:c6:76:f2:43:4b:47:e7:31 -# SHA1 Fingerprint: f1:8b:53:8d:1b:e9:03:b6:a6:f0:56:43:5b:17:15:89:ca:f3:6b:f2 -# SHA256 Fingerprint: 4b:03:f4:58:07:ad:70:f2:1b:fc:2c:ae:71:c9:fd:e4:60:4c:06:4c:f5:ff:b6:86:ba:e5:db:aa:d7:fd:d3:4c ------BEGIN CERTIFICATE----- -MIIEKjCCAxKgAwIBAgIQYAGXt0an6rS0mtZLL/eQ+zANBgkqhkiG9w0BAQsFADCB -rjELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMf -Q2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIw -MDggdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxJDAiBgNV -BAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EgLSBHMzAeFw0wODA0MDIwMDAwMDBa -Fw0zNzEyMDEyMzU5NTlaMIGuMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMdGhhd3Rl -LCBJbmMuMSgwJgYDVQQLEx9DZXJ0aWZpY2F0aW9uIFNlcnZpY2VzIERpdmlzaW9u -MTgwNgYDVQQLEy8oYykgMjAwOCB0aGF3dGUsIEluYy4gLSBGb3IgYXV0aG9yaXpl -ZCB1c2Ugb25seTEkMCIGA1UEAxMbdGhhd3RlIFByaW1hcnkgUm9vdCBDQSAtIEcz -MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsr8nLPvb2FvdeHsbnndm -gcs+vHyu86YnmjSjaDFxODNi5PNxZnmxqWWjpYvVj2AtP0LMqmsywCPLLEHd5N/8 -YZzic7IilRFDGF/Eth9XbAoFWCLINkw6fKXRz4aviKdEAhN0cXMKQlkC+BsUa0Lf -b1+6a4KinVvnSr0eAXLbS3ToO39/fR8EtCab4LRarEc9VbjXsCZSKAExQGbY2SS9 -9irY7CFJXJv2eul/VTV+lmuNk5Mny5K76qxAwJ/C+IDPXfRa3M50hqY+bAtTyr2S -zhkGcuYMXDhpxwTWvGzOW/b3aJzcJRVIiKHpqfiYnODz1TEoYRFsZ5aNOZnLwkUk -OQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNV -HQ4EFgQUrWyqlGCc7eT/+j4KdCtjA/e2Wb8wDQYJKoZIhvcNAQELBQADggEBABpA -2JVlrAmSicY59BDlqQ5mU1143vokkbvnRFHfxhY0Cu9qRFHqKweKA3rD6z8KLFIW -oCtDuSWQP3CpMyVtRRooOyfPqsMpQhvfO0zAMzRbQYi/aytlryjvsvXDqmbOe1bu -t8jLZ8HJnBoYuMTDSQPxYA5QzUbF83d597YV4Djbxy8ooAw/dyZ02SUS2jHaGh7c -KUGRIjxpp7sC8rZcJwOJ9Abqm+RyguOhCcHpABnTPtRwa7pxpqpYrvS76Wy274fM -m7v/OeZWYdMKp8RcTGB7BXcmer/YB1IsYvdwY9k5vG8cwnncdimvzsUsZAReiDZu -MdRAGmI0Nj81Aa6sY6A= ------END CERTIFICATE----- - -# Issuer: CN=GeoTrust Primary Certification Authority - G2 O=GeoTrust Inc. OU=(c) 2007 GeoTrust Inc. - For authorized use only -# Subject: CN=GeoTrust Primary Certification Authority - G2 O=GeoTrust Inc. OU=(c) 2007 GeoTrust Inc. - For authorized use only -# Label: "GeoTrust Primary Certification Authority - G2" -# Serial: 80682863203381065782177908751794619243 -# MD5 Fingerprint: 01:5e:d8:6b:bd:6f:3d:8e:a1:31:f8:12:e0:98:73:6a -# SHA1 Fingerprint: 8d:17:84:d5:37:f3:03:7d:ec:70:fe:57:8b:51:9a:99:e6:10:d7:b0 -# SHA256 Fingerprint: 5e:db:7a:c4:3b:82:a0:6a:87:61:e8:d7:be:49:79:eb:f2:61:1f:7d:d7:9b:f9:1c:1c:6b:56:6a:21:9e:d7:66 ------BEGIN CERTIFICATE----- -MIICrjCCAjWgAwIBAgIQPLL0SAoA4v7rJDteYD7DazAKBggqhkjOPQQDAzCBmDEL -MAkGA1UEBhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsTMChj -KSAyMDA3IEdlb1RydXN0IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTE2 -MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0 -eSAtIEcyMB4XDTA3MTEwNTAwMDAwMFoXDTM4MDExODIzNTk1OVowgZgxCzAJBgNV -BAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAoYykgMjAw -NyBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0BgNV -BAMTLUdlb1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBH -MjB2MBAGByqGSM49AgEGBSuBBAAiA2IABBWx6P0DFUPlrOuHNxFi79KDNlJ9RVcL -So17VDs6bl8VAsBQps8lL33KSLjHUGMcKiEIfJo22Av+0SbFWDEwKCXzXV2juLal -tJLtbCyf691DiaI8S0iRHVDsJt/WYC69IaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAO -BgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFBVfNVdRVfslsq0DafwBo/q+EVXVMAoG -CCqGSM49BAMDA2cAMGQCMGSWWaboCd6LuvpaiIjwH5HTRqjySkwCY/tsXzjbLkGT -qQ7mndwxHLKgpxgceeHHNgIwOlavmnRs9vuD4DPTCF+hnMJbn0bWtsuRBmOiBucz -rD6ogRLQy7rQkgu2npaqBA+K ------END CERTIFICATE----- - -# Issuer: CN=VeriSign Universal Root Certification Authority O=VeriSign, Inc. OU=VeriSign Trust Network/(c) 2008 VeriSign, Inc. - For authorized use only -# Subject: CN=VeriSign Universal Root Certification Authority O=VeriSign, Inc. OU=VeriSign Trust Network/(c) 2008 VeriSign, Inc. - For authorized use only -# Label: "VeriSign Universal Root Certification Authority" -# Serial: 85209574734084581917763752644031726877 -# MD5 Fingerprint: 8e:ad:b5:01:aa:4d:81:e4:8c:1d:d1:e1:14:00:95:19 -# SHA1 Fingerprint: 36:79:ca:35:66:87:72:30:4d:30:a5:fb:87:3b:0f:a7:7b:b7:0d:54 -# SHA256 Fingerprint: 23:99:56:11:27:a5:71:25:de:8c:ef:ea:61:0d:df:2f:a0:78:b5:c8:06:7f:4e:82:82:90:bf:b8:60:e8:4b:3c ------BEGIN CERTIFICATE----- -MIIEuTCCA6GgAwIBAgIQQBrEZCGzEyEDDrvkEhrFHTANBgkqhkiG9w0BAQsFADCB -vTELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL -ExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwOCBWZXJp -U2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MTgwNgYDVQQDEy9W -ZXJpU2lnbiBVbml2ZXJzYWwgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAe -Fw0wODA0MDIwMDAwMDBaFw0zNzEyMDEyMzU5NTlaMIG9MQswCQYDVQQGEwJVUzEX -MBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0 -IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAyMDA4IFZlcmlTaWduLCBJbmMuIC0gRm9y -IGF1dGhvcml6ZWQgdXNlIG9ubHkxODA2BgNVBAMTL1ZlcmlTaWduIFVuaXZlcnNh -bCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEF -AAOCAQ8AMIIBCgKCAQEAx2E3XrEBNNti1xWb/1hajCMj1mCOkdeQmIN65lgZOIzF -9uVkhbSicfvtvbnazU0AtMgtc6XHaXGVHzk8skQHnOgO+k1KxCHfKWGPMiJhgsWH -H26MfF8WIFFE0XBPV+rjHOPMee5Y2A7Cs0WTwCznmhcrewA3ekEzeOEz4vMQGn+H -LL729fdC4uW/h2KJXwBL38Xd5HVEMkE6HnFuacsLdUYI0crSK5XQz/u5QGtkjFdN -/BMReYTtXlT2NJ8IAfMQJQYXStrxHXpma5hgZqTZ79IugvHw7wnqRMkVauIDbjPT -rJ9VAMf2CGqUuV/c4DPxhGD5WycRtPwW8rtWaoAljQIDAQABo4GyMIGvMA8GA1Ud -EwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMG0GCCsGAQUFBwEMBGEwX6FdoFsw -WTBXMFUWCWltYWdlL2dpZjAhMB8wBwYFKw4DAhoEFI/l0xqGrI2Oa8PPgGrUSBgs -exkuMCUWI2h0dHA6Ly9sb2dvLnZlcmlzaWduLmNvbS92c2xvZ28uZ2lmMB0GA1Ud -DgQWBBS2d/ppSEefUxLVwuoHMnYH0ZcHGTANBgkqhkiG9w0BAQsFAAOCAQEASvj4 -sAPmLGd75JR3Y8xuTPl9Dg3cyLk1uXBPY/ok+myDjEedO2Pzmvl2MpWRsXe8rJq+ -seQxIcaBlVZaDrHC1LGmWazxY8u4TB1ZkErvkBYoH1quEPuBUDgMbMzxPcP1Y+Oz -4yHJJDnp/RVmRvQbEdBNc6N9Rvk97ahfYtTxP/jgdFcrGJ2BtMQo2pSXpXDrrB2+ -BxHw1dvd5Yzw1TKwg+ZX4o+/vqGqvz0dtdQ46tewXDpPaj+PwGZsY6rp2aQW9IHR -lRQOfc2VNNnSj3BzgXucfr2YYdhFh5iQxeuGMMY1v/D/w1WIg0vvBZIGcfK4mJO3 -7M2CYfE45k+XmCpajQ== ------END CERTIFICATE----- - -# Issuer: CN=VeriSign Class 3 Public Primary Certification Authority - G4 O=VeriSign, Inc. OU=VeriSign Trust Network/(c) 2007 VeriSign, Inc. - For authorized use only -# Subject: CN=VeriSign Class 3 Public Primary Certification Authority - G4 O=VeriSign, Inc. OU=VeriSign Trust Network/(c) 2007 VeriSign, Inc. - For authorized use only -# Label: "VeriSign Class 3 Public Primary Certification Authority - G4" -# Serial: 63143484348153506665311985501458640051 -# MD5 Fingerprint: 3a:52:e1:e7:fd:6f:3a:e3:6f:f3:6f:99:1b:f9:22:41 -# SHA1 Fingerprint: 22:d5:d8:df:8f:02:31:d1:8d:f7:9d:b7:cf:8a:2d:64:c9:3f:6c:3a -# SHA256 Fingerprint: 69:dd:d7:ea:90:bb:57:c9:3e:13:5d:c8:5e:a6:fc:d5:48:0b:60:32:39:bd:c4:54:fc:75:8b:2a:26:cf:7f:79 ------BEGIN CERTIFICATE----- -MIIDhDCCAwqgAwIBAgIQL4D+I4wOIg9IZxIokYesszAKBggqhkjOPQQDAzCByjEL -MAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZW -ZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNyBWZXJpU2ln -biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJp -U2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9y -aXR5IC0gRzQwHhcNMDcxMTA1MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCByjELMAkG -A1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJp -U2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNyBWZXJpU2lnbiwg -SW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2ln -biBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5 -IC0gRzQwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAASnVnp8Utpkmw4tXNherJI9/gHm -GUo9FANL+mAnINmDiWn6VMaaGF5VKmTeBvaNSjutEDxlPZCIBIngMGGzrl0Bp3ve -fLK+ymVhAIau2o970ImtTR1ZmkGxvEeA3J5iw/mjgbIwga8wDwYDVR0TAQH/BAUw -AwEB/zAOBgNVHQ8BAf8EBAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJ -aW1hZ2UvZ2lmMCEwHzAHBgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYj -aHR0cDovL2xvZ28udmVyaXNpZ24uY29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFLMW -kf3upm7ktS5Jj4d4gYDs5bG1MAoGCCqGSM49BAMDA2gAMGUCMGYhDBgmYFo4e1ZC -4Kf8NoRRkSAsdk1DPcQdhCPQrNZ8NQbOzWm9kA3bbEhCHQ6qQgIxAJw9SDkjOVga -FRJZap7v1VmyHVIsmXHNxynfGyphe3HR3vPA5Q06Sqotp9iGKt0uEA== ------END CERTIFICATE----- - -# Issuer: CN=NetLock Arany (Class Gold) F\u0151tan\xfas\xedtv\xe1ny O=NetLock Kft. OU=Tan\xfas\xedtv\xe1nykiad\xf3k (Certification Services) -# Subject: CN=NetLock Arany (Class Gold) F\u0151tan\xfas\xedtv\xe1ny O=NetLock Kft. OU=Tan\xfas\xedtv\xe1nykiad\xf3k (Certification Services) -# Label: "NetLock Arany (Class Gold) F\u0151tan\xfas\xedtv\xe1ny" -# Serial: 80544274841616 -# MD5 Fingerprint: c5:a1:b7:ff:73:dd:d6:d7:34:32:18:df:fc:3c:ad:88 -# SHA1 Fingerprint: 06:08:3f:59:3f:15:a1:04:a0:69:a4:6b:a9:03:d0:06:b7:97:09:91 -# SHA256 Fingerprint: 6c:61:da:c3:a2:de:f0:31:50:6b:e0:36:d2:a6:fe:40:19:94:fb:d1:3d:f9:c8:d4:66:59:92:74:c4:46:ec:98 ------BEGIN CERTIFICATE----- -MIIEFTCCAv2gAwIBAgIGSUEs5AAQMA0GCSqGSIb3DQEBCwUAMIGnMQswCQYDVQQG -EwJIVTERMA8GA1UEBwwIQnVkYXBlc3QxFTATBgNVBAoMDE5ldExvY2sgS2Z0LjE3 -MDUGA1UECwwuVGFuw7pzw610dsOhbnlraWFkw7NrIChDZXJ0aWZpY2F0aW9uIFNl -cnZpY2VzKTE1MDMGA1UEAwwsTmV0TG9jayBBcmFueSAoQ2xhc3MgR29sZCkgRsWR -dGFuw7pzw610dsOhbnkwHhcNMDgxMjExMTUwODIxWhcNMjgxMjA2MTUwODIxWjCB -pzELMAkGA1UEBhMCSFUxETAPBgNVBAcMCEJ1ZGFwZXN0MRUwEwYDVQQKDAxOZXRM -b2NrIEtmdC4xNzA1BgNVBAsMLlRhbsO6c8OtdHbDoW55a2lhZMOzayAoQ2VydGlm -aWNhdGlvbiBTZXJ2aWNlcykxNTAzBgNVBAMMLE5ldExvY2sgQXJhbnkgKENsYXNz -IEdvbGQpIEbFkXRhbsO6c8OtdHbDoW55MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A -MIIBCgKCAQEAxCRec75LbRTDofTjl5Bu0jBFHjzuZ9lk4BqKf8owyoPjIMHj9DrT -lF8afFttvzBPhCf2nx9JvMaZCpDyD/V/Q4Q3Y1GLeqVw/HpYzY6b7cNGbIRwXdrz -AZAj/E4wqX7hJ2Pn7WQ8oLjJM2P+FpD/sLj916jAwJRDC7bVWaaeVtAkH3B5r9s5 -VA1lddkVQZQBr17s9o3x/61k/iCa11zr/qYfCGSji3ZVrR47KGAuhyXoqq8fxmRG -ILdwfzzeSNuWU7c5d+Qa4scWhHaXWy+7GRWF+GmF9ZmnqfI0p6m2pgP8b4Y9VHx2 -BJtr+UBdADTHLpl1neWIA6pN+APSQnbAGwIDAKiLo0UwQzASBgNVHRMBAf8ECDAG -AQH/AgEEMA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUzPpnk/C2uNClwB7zU/2M -U9+D15YwDQYJKoZIhvcNAQELBQADggEBAKt/7hwWqZw8UQCgwBEIBaeZ5m8BiFRh -bvG5GK1Krf6BQCOUL/t1fC8oS2IkgYIL9WHxHG64YTjrgfpioTtaYtOUZcTh5m2C -+C8lcLIhJsFyUR+MLMOEkMNaj7rP9KdlpeuY0fsFskZ1FSNqb4VjMIDw1Z4fKRzC -bLBQWV2QWzuoDTDPv31/zvGdg73JRm4gpvlhUbohL3u+pRVjodSVh/GeufOJ8z2F -uLjbvrW5KfnaNwUASZQDhETnv0Mxz3WLJdH0pmT1kvarBes96aULNmLazAZfNou2 -XjG4Kvte9nHfRCaexOYNkbQudZWAUWpLMKawYqGT8ZvYzsRjdT9ZR7E= ------END CERTIFICATE----- - -# Issuer: CN=Staat der Nederlanden Root CA - G2 O=Staat der Nederlanden -# Subject: CN=Staat der Nederlanden Root CA - G2 O=Staat der Nederlanden -# Label: "Staat der Nederlanden Root CA - G2" -# Serial: 10000012 -# MD5 Fingerprint: 7c:a5:0f:f8:5b:9a:7d:6d:30:ae:54:5a:e3:42:a2:8a -# SHA1 Fingerprint: 59:af:82:79:91:86:c7:b4:75:07:cb:cf:03:57:46:eb:04:dd:b7:16 -# SHA256 Fingerprint: 66:8c:83:94:7d:a6:3b:72:4b:ec:e1:74:3c:31:a0:e6:ae:d0:db:8e:c5:b3:1b:e3:77:bb:78:4f:91:b6:71:6f ------BEGIN CERTIFICATE----- -MIIFyjCCA7KgAwIBAgIEAJiWjDANBgkqhkiG9w0BAQsFADBaMQswCQYDVQQGEwJO -TDEeMBwGA1UECgwVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSswKQYDVQQDDCJTdGFh -dCBkZXIgTmVkZXJsYW5kZW4gUm9vdCBDQSAtIEcyMB4XDTA4MDMyNjExMTgxN1oX -DTIwMDMyNTExMDMxMFowWjELMAkGA1UEBhMCTkwxHjAcBgNVBAoMFVN0YWF0IGRl -ciBOZWRlcmxhbmRlbjErMCkGA1UEAwwiU3RhYXQgZGVyIE5lZGVybGFuZGVuIFJv -b3QgQ0EgLSBHMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMVZ5291 -qj5LnLW4rJ4L5PnZyqtdj7U5EILXr1HgO+EASGrP2uEGQxGZqhQlEq0i6ABtQ8Sp -uOUfiUtnvWFI7/3S4GCI5bkYYCjDdyutsDeqN95kWSpGV+RLufg3fNU254DBtvPU -Z5uW6M7XxgpT0GtJlvOjCwV3SPcl5XCsMBQgJeN/dVrlSPhOewMHBPqCYYdu8DvE -pMfQ9XQ+pV0aCPKbJdL2rAQmPlU6Yiile7Iwr/g3wtG61jj99O9JMDeZJiFIhQGp -5Rbn3JBV3w/oOM2ZNyFPXfUib2rFEhZgF1XyZWampzCROME4HYYEhLoaJXhena/M -UGDWE4dS7WMfbWV9whUYdMrhfmQpjHLYFhN9C0lK8SgbIHRrxT3dsKpICT0ugpTN -GmXZK4iambwYfp/ufWZ8Pr2UuIHOzZgweMFvZ9C+X+Bo7d7iscksWXiSqt8rYGPy -5V6548r6f1CGPqI0GAwJaCgRHOThuVw+R7oyPxjMW4T182t0xHJ04eOLoEq9jWYv -6q012iDTiIJh8BIitrzQ1aTsr1SIJSQ8p22xcik/Plemf1WvbibG/ufMQFxRRIEK -eN5KzlW/HdXZt1bv8Hb/C3m1r737qWmRRpdogBQ2HbN/uymYNqUg+oJgYjOk7Na6 -B6duxc8UpufWkjTYgfX8HV2qXB72o007uPc5AgMBAAGjgZcwgZQwDwYDVR0TAQH/ -BAUwAwEB/zBSBgNVHSAESzBJMEcGBFUdIAAwPzA9BggrBgEFBQcCARYxaHR0cDov -L3d3dy5wa2lvdmVyaGVpZC5ubC9wb2xpY2llcy9yb290LXBvbGljeS1HMjAOBgNV -HQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJFoMocVHYnitfGsNig0jQt8YojrMA0GCSqG -SIb3DQEBCwUAA4ICAQCoQUpnKpKBglBu4dfYszk78wIVCVBR7y29JHuIhjv5tLyS -CZa59sCrI2AGeYwRTlHSeYAz+51IvuxBQ4EffkdAHOV6CMqqi3WtFMTC6GY8ggen -5ieCWxjmD27ZUD6KQhgpxrRW/FYQoAUXvQwjf/ST7ZwaUb7dRUG/kSS0H4zpX897 -IZmflZ85OkYcbPnNe5yQzSipx6lVu6xiNGI1E0sUOlWDuYaNkqbG9AclVMwWVxJK -gnjIFNkXgiYtXSAfea7+1HAWFpWD2DU5/1JddRwWxRNVz0fMdWVSSt7wsKfkCpYL -+63C4iWEst3kvX5ZbJvw8NjnyvLplzh+ib7M+zkXYT9y2zqR2GUBGR2tUKRXCnxL -vJxxcypFURmFzI79R6d0lR2o0a9OF7FpJsKqeFdbxU2n5Z4FF5TKsl+gSRiNNOkm -bEgeqmiSBeGCc1qb3AdbCG19ndeNIdn8FCCqwkXfP+cAslHkwvgFuXkajDTznlvk -N1trSt8sV4pAWja63XVECDdCcAz+3F4hoKOKwJCcaNpQ5kUQR3i2TtJlycM33+FC -Y7BXN0Ute4qcvwXqZVUz9zkQxSgqIXobisQk+T8VyJoVIPVVYpbtbZNQvOSqeK3Z -ywplh6ZmwcSBo3c6WB4L7oOLnR7SUqTMHW+wmG2UMbX4cQrcufx9MmDm66+KAQ== ------END CERTIFICATE----- - -# Issuer: CN=Hongkong Post Root CA 1 O=Hongkong Post -# Subject: CN=Hongkong Post Root CA 1 O=Hongkong Post -# Label: "Hongkong Post Root CA 1" -# Serial: 1000 -# MD5 Fingerprint: a8:0d:6f:39:78:b9:43:6d:77:42:6d:98:5a:cc:23:ca -# SHA1 Fingerprint: d6:da:a8:20:8d:09:d2:15:4d:24:b5:2f:cb:34:6e:b2:58:b2:8a:58 -# SHA256 Fingerprint: f9:e6:7d:33:6c:51:00:2a:c0:54:c6:32:02:2d:66:dd:a2:e7:e3:ff:f1:0a:d0:61:ed:31:d8:bb:b4:10:cf:b2 ------BEGIN CERTIFICATE----- -MIIDMDCCAhigAwIBAgICA+gwDQYJKoZIhvcNAQEFBQAwRzELMAkGA1UEBhMCSEsx -FjAUBgNVBAoTDUhvbmdrb25nIFBvc3QxIDAeBgNVBAMTF0hvbmdrb25nIFBvc3Qg -Um9vdCBDQSAxMB4XDTAzMDUxNTA1MTMxNFoXDTIzMDUxNTA0NTIyOVowRzELMAkG -A1UEBhMCSEsxFjAUBgNVBAoTDUhvbmdrb25nIFBvc3QxIDAeBgNVBAMTF0hvbmdr -b25nIFBvc3QgUm9vdCBDQSAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC -AQEArP84tulmAknjorThkPlAj3n54r15/gK97iSSHSL22oVyaf7XPwnU3ZG1ApzQ -jVrhVcNQhrkpJsLj2aDxaQMoIIBFIi1WpztUlVYiWR8o3x8gPW2iNr4joLFutbEn -PzlTCeqrauh0ssJlXI6/fMN4hM2eFvz1Lk8gKgifd/PFHsSaUmYeSF7jEAaPIpjh -ZY4bXSNmO7ilMlHIhqqhqZ5/dpTCpmy3QfDVyAY45tQM4vM7TG1QjMSDJ8EThFk9 -nnV0ttgCXjqQesBCNnLsak3c78QA3xMYV18meMjWCnl3v/evt3a5pQuEF10Q6m/h -q5URX208o1xNg1vysxmKgIsLhwIDAQABoyYwJDASBgNVHRMBAf8ECDAGAQH/AgED -MA4GA1UdDwEB/wQEAwIBxjANBgkqhkiG9w0BAQUFAAOCAQEADkbVPK7ih9legYsC -mEEIjEy82tvuJxuC52pF7BaLT4Wg87JwvVqWuspube5Gi27nKi6Wsxkz67SfqLI3 -7piol7Yutmcn1KZJ/RyTZXaeQi/cImyaT/JaFTmxcdcrUehtHJjA2Sr0oYJ71clB -oiMBdDhViw+5LmeiIAQ32pwL0xch4I+XeTRvhEgCIDMb5jREn5Fw9IBehEPCKdJs -EhTkYY2sEJCehFC78JZvRZ+K88psT/oROhUVRsPNH4NbLUES7VBnQRM9IauUiqpO -fMGx+6fWtScvl6tu4B3i0RwsH0Ti/L6RoZz71ilTc4afU9hDDl3WY4JxHYB0yvbi -AmvZWg== ------END CERTIFICATE----- - -# Issuer: CN=SecureSign RootCA11 O=Japan Certification Services, Inc. -# Subject: CN=SecureSign RootCA11 O=Japan Certification Services, Inc. -# Label: "SecureSign RootCA11" -# Serial: 1 -# MD5 Fingerprint: b7:52:74:e2:92:b4:80:93:f2:75:e4:cc:d7:f2:ea:26 -# SHA1 Fingerprint: 3b:c4:9f:48:f8:f3:73:a0:9c:1e:bd:f8:5b:b1:c3:65:c7:d8:11:b3 -# SHA256 Fingerprint: bf:0f:ee:fb:9e:3a:58:1a:d5:f9:e9:db:75:89:98:57:43:d2:61:08:5c:4d:31:4f:6f:5d:72:59:aa:42:16:12 ------BEGIN CERTIFICATE----- -MIIDbTCCAlWgAwIBAgIBATANBgkqhkiG9w0BAQUFADBYMQswCQYDVQQGEwJKUDEr -MCkGA1UEChMiSmFwYW4gQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcywgSW5jLjEcMBoG -A1UEAxMTU2VjdXJlU2lnbiBSb290Q0ExMTAeFw0wOTA0MDgwNDU2NDdaFw0yOTA0 -MDgwNDU2NDdaMFgxCzAJBgNVBAYTAkpQMSswKQYDVQQKEyJKYXBhbiBDZXJ0aWZp -Y2F0aW9uIFNlcnZpY2VzLCBJbmMuMRwwGgYDVQQDExNTZWN1cmVTaWduIFJvb3RD -QTExMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA/XeqpRyQBTvLTJsz -i1oURaTnkBbR31fSIRCkF/3frNYfp+TbfPfs37gD2pRY/V1yfIw/XwFndBWW4wI8 -h9uuywGOwvNmxoVF9ALGOrVisq/6nL+k5tSAMJjzDbaTj6nU2DbysPyKyiyhFTOV -MdrAG/LuYpmGYz+/3ZMqg6h2uRMft85OQoWPIucuGvKVCbIFtUROd6EgvanyTgp9 -UK31BQ1FT0Zx/Sg+U/sE2C3XZR1KG/rPO7AxmjVuyIsG0wCR8pQIZUyxNAYAeoni -8McDWc/V1uinMrPmmECGxc0nEovMe863ETxiYAcjPitAbpSACW22s293bzUIUPsC -h8U+iQIDAQABo0IwQDAdBgNVHQ4EFgQUW/hNT7KlhtQ60vFjmqC+CfZXt94wDgYD -VR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEB -AKChOBZmLqdWHyGcBvod7bkixTgm2E5P7KN/ed5GIaGHd48HCJqypMWvDzKYC3xm -KbabfSVSSUOrTC4rbnpwrxYO4wJs+0LmGJ1F2FXI6Dvd5+H0LgscNFxsWEr7jIhQ -X5Ucv+2rIrVls4W6ng+4reV6G4pQOh29Dbx7VFALuUKvVaAYga1lme++5Jy/xIWr -QbJUb9wlze144o4MjQlJ3WN7WmmWAiGovVJZ6X01y8hSyn+B/tlr0/cR7SXf+Of5 -pPpyl4RTDaXQMhhRdlkUbA/r7F+AjHVDg8OFmP9Mni0N5HeDk061lgeLKBObjBmN -QSdJQO7e5iNEOdyhIta6A/I= ------END CERTIFICATE----- - -# Issuer: CN=Microsec e-Szigno Root CA 2009 O=Microsec Ltd. -# Subject: CN=Microsec e-Szigno Root CA 2009 O=Microsec Ltd. -# Label: "Microsec e-Szigno Root CA 2009" -# Serial: 14014712776195784473 -# MD5 Fingerprint: f8:49:f4:03:bc:44:2d:83:be:48:69:7d:29:64:fc:b1 -# SHA1 Fingerprint: 89:df:74:fe:5c:f4:0f:4a:80:f9:e3:37:7d:54:da:91:e1:01:31:8e -# SHA256 Fingerprint: 3c:5f:81:fe:a5:fa:b8:2c:64:bf:a2:ea:ec:af:cd:e8:e0:77:fc:86:20:a7:ca:e5:37:16:3d:f3:6e:db:f3:78 ------BEGIN CERTIFICATE----- -MIIECjCCAvKgAwIBAgIJAMJ+QwRORz8ZMA0GCSqGSIb3DQEBCwUAMIGCMQswCQYD -VQQGEwJIVTERMA8GA1UEBwwIQnVkYXBlc3QxFjAUBgNVBAoMDU1pY3Jvc2VjIEx0 -ZC4xJzAlBgNVBAMMHk1pY3Jvc2VjIGUtU3ppZ25vIFJvb3QgQ0EgMjAwOTEfMB0G -CSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5odTAeFw0wOTA2MTYxMTMwMThaFw0y -OTEyMzAxMTMwMThaMIGCMQswCQYDVQQGEwJIVTERMA8GA1UEBwwIQnVkYXBlc3Qx -FjAUBgNVBAoMDU1pY3Jvc2VjIEx0ZC4xJzAlBgNVBAMMHk1pY3Jvc2VjIGUtU3pp -Z25vIFJvb3QgQ0EgMjAwOTEfMB0GCSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5o -dTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOn4j/NjrdqG2KfgQvvP -kd6mJviZpWNwrZuuyjNAfW2WbqEORO7hE52UQlKavXWFdCyoDh2Tthi3jCyoz/tc -cbna7P7ofo/kLx2yqHWH2Leh5TvPmUpG0IMZfcChEhyVbUr02MelTTMuhTlAdX4U -fIASmFDHQWe4oIBhVKZsTh/gnQ4H6cm6M+f+wFUoLAKApxn1ntxVUwOXewdI/5n7 -N4okxFnMUBBjjqqpGrCEGob5X7uxUG6k0QrM1XF+H6cbfPVTbiJfyyvm1HxdrtbC -xkzlBQHZ7Vf8wSN5/PrIJIOV87VqUQHQd9bpEqH5GoP7ghu5sJf0dgYzQ0mg/wu1 -+rUCAwEAAaOBgDB+MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0G -A1UdDgQWBBTLD8bfQkPMPcu1SCOhGnqmKrs0aDAfBgNVHSMEGDAWgBTLD8bfQkPM -Pcu1SCOhGnqmKrs0aDAbBgNVHREEFDASgRBpbmZvQGUtc3ppZ25vLmh1MA0GCSqG -SIb3DQEBCwUAA4IBAQDJ0Q5eLtXMs3w+y/w9/w0olZMEyL/azXm4Q5DwpL7v8u8h -mLzU1F0G9u5C7DBsoKqpyvGvivo/C3NqPuouQH4frlRheesuCDfXI/OMn74dseGk -ddug4lQUsbocKaQY9hK6ohQU4zE1yED/t+AFdlfBHFny+L/k7SViXITwfn4fs775 -tyERzAMBVnCnEJIeGzSBHq2cGsMEPO0CYdYeBvNfOofyK/FFh+U9rNHHV4S9a67c -2Pm2G2JwCz02yULyMtd6YebS2z3PyKnJm9zbWETXbzivf3jTo60adbocwTZ8jx5t -HMN1Rq41Bab2XD0h7lbwyYIiLXpUq3DDfSJlgnCW ------END CERTIFICATE----- - -# Issuer: CN=GlobalSign O=GlobalSign OU=GlobalSign Root CA - R3 -# Subject: CN=GlobalSign O=GlobalSign OU=GlobalSign Root CA - R3 -# Label: "GlobalSign Root CA - R3" -# Serial: 4835703278459759426209954 -# MD5 Fingerprint: c5:df:b8:49:ca:05:13:55:ee:2d:ba:1a:c3:3e:b0:28 -# SHA1 Fingerprint: d6:9b:56:11:48:f0:1c:77:c5:45:78:c1:09:26:df:5b:85:69:76:ad -# SHA256 Fingerprint: cb:b5:22:d7:b7:f1:27:ad:6a:01:13:86:5b:df:1c:d4:10:2e:7d:07:59:af:63:5a:7c:f4:72:0d:c9:63:c5:3b ------BEGIN CERTIFICATE----- -MIIDXzCCAkegAwIBAgILBAAAAAABIVhTCKIwDQYJKoZIhvcNAQELBQAwTDEgMB4G -A1UECxMXR2xvYmFsU2lnbiBSb290IENBIC0gUjMxEzARBgNVBAoTCkdsb2JhbFNp -Z24xEzARBgNVBAMTCkdsb2JhbFNpZ24wHhcNMDkwMzE4MTAwMDAwWhcNMjkwMzE4 -MTAwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxTaWduIFJvb3QgQ0EgLSBSMzETMBEG -A1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2lnbjCCASIwDQYJKoZI -hvcNAQEBBQADggEPADCCAQoCggEBAMwldpB5BngiFvXAg7aEyiie/QV2EcWtiHL8 -RgJDx7KKnQRfJMsuS+FggkbhUqsMgUdwbN1k0ev1LKMPgj0MK66X17YUhhB5uzsT -gHeMCOFJ0mpiLx9e+pZo34knlTifBtc+ycsmWQ1z3rDI6SYOgxXG71uL0gRgykmm -KPZpO/bLyCiR5Z2KYVc3rHQU3HTgOu5yLy6c+9C7v/U9AOEGM+iCK65TpjoWc4zd -QQ4gOsC0p6Hpsk+QLjJg6VfLuQSSaGjlOCZgdbKfd/+RFO+uIEn8rUAVSNECMWEZ -XriX7613t2Saer9fwRPvm2L7DWzgVGkWqQPabumDk3F2xmmFghcCAwEAAaNCMEAw -DgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFI/wS3+o -LkUkrk1Q+mOai97i3Ru8MA0GCSqGSIb3DQEBCwUAA4IBAQBLQNvAUKr+yAzv95ZU -RUm7lgAJQayzE4aGKAczymvmdLm6AC2upArT9fHxD4q/c2dKg8dEe3jgr25sbwMp -jjM5RcOO5LlXbKr8EpbsU8Yt5CRsuZRj+9xTaGdWPoO4zzUhw8lo/s7awlOqzJCK -6fBdRoyV3XpYKBovHd7NADdBj+1EbddTKJd+82cEHhXXipa0095MJ6RMG3NzdvQX -mcIfeg7jLQitChws/zyrVQ4PkX4268NXSb7hLi18YIvDQVETI53O9zJrlAGomecs -Mx86OyXShkDOOyyGeMlhLxS67ttVb9+E7gUJTb0o2HLO02JQZR7rkpeDMdmztcpH -WD9f ------END CERTIFICATE----- - -# Issuer: CN=Autoridad de Certificacion Firmaprofesional CIF A62634068 -# Subject: CN=Autoridad de Certificacion Firmaprofesional CIF A62634068 -# Label: "Autoridad de Certificacion Firmaprofesional CIF A62634068" -# Serial: 6047274297262753887 -# MD5 Fingerprint: 73:3a:74:7a:ec:bb:a3:96:a6:c2:e4:e2:c8:9b:c0:c3 -# SHA1 Fingerprint: ae:c5:fb:3f:c8:e1:bf:c4:e5:4f:03:07:5a:9a:e8:00:b7:f7:b6:fa -# SHA256 Fingerprint: 04:04:80:28:bf:1f:28:64:d4:8f:9a:d4:d8:32:94:36:6a:82:88:56:55:3f:3b:14:30:3f:90:14:7f:5d:40:ef ------BEGIN CERTIFICATE----- -MIIGFDCCA/ygAwIBAgIIU+w77vuySF8wDQYJKoZIhvcNAQEFBQAwUTELMAkGA1UE -BhMCRVMxQjBABgNVBAMMOUF1dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIEZpcm1h -cHJvZmVzaW9uYWwgQ0lGIEE2MjYzNDA2ODAeFw0wOTA1MjAwODM4MTVaFw0zMDEy -MzEwODM4MTVaMFExCzAJBgNVBAYTAkVTMUIwQAYDVQQDDDlBdXRvcmlkYWQgZGUg -Q2VydGlmaWNhY2lvbiBGaXJtYXByb2Zlc2lvbmFsIENJRiBBNjI2MzQwNjgwggIi -MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDKlmuO6vj78aI14H9M2uDDUtd9 -thDIAl6zQyrET2qyyhxdKJp4ERppWVevtSBC5IsP5t9bpgOSL/UR5GLXMnE42QQM -cas9UX4PB99jBVzpv5RvwSmCwLTaUbDBPLutN0pcyvFLNg4kq7/DhHf9qFD0sefG -L9ItWY16Ck6WaVICqjaY7Pz6FIMMNx/Jkjd/14Et5cS54D40/mf0PmbR0/RAz15i -NA9wBj4gGFrO93IbJWyTdBSTo3OxDqqHECNZXyAFGUftaI6SEspd/NYrspI8IM/h -X68gvqB2f3bl7BqGYTM+53u0P6APjqK5am+5hyZvQWyIplD9amML9ZMWGxmPsu2b -m8mQ9QEM3xk9Dz44I8kvjwzRAv4bVdZO0I08r0+k8/6vKtMFnXkIoctXMbScyJCy -Z/QYFpM6/EfY0XiWMR+6KwxfXZmtY4laJCB22N/9q06mIqqdXuYnin1oKaPnirja -EbsXLZmdEyRG98Xi2J+Of8ePdG1asuhy9azuJBCtLxTa/y2aRnFHvkLfuwHb9H/T -KI8xWVvTyQKmtFLKbpf7Q8UIJm+K9Lv9nyiqDdVF8xM6HdjAeI9BZzwelGSuewvF -6NkBiDkal4ZkQdU7hwxu+g/GvUgUvzlN1J5Bto+WHWOWk9mVBngxaJ43BjuAiUVh -OSPHG0SjFeUc+JIwuwIDAQABo4HvMIHsMBIGA1UdEwEB/wQIMAYBAf8CAQEwDgYD -VR0PAQH/BAQDAgEGMB0GA1UdDgQWBBRlzeurNR4APn7VdMActHNHDhpkLzCBpgYD -VR0gBIGeMIGbMIGYBgRVHSAAMIGPMC8GCCsGAQUFBwIBFiNodHRwOi8vd3d3LmZp -cm1hcHJvZmVzaW9uYWwuY29tL2NwczBcBggrBgEFBQcCAjBQHk4AUABhAHMAZQBv -ACAAZABlACAAbABhACAAQgBvAG4AYQBuAG8AdgBhACAANAA3ACAAQgBhAHIAYwBl -AGwAbwBuAGEAIAAwADgAMAAxADcwDQYJKoZIhvcNAQEFBQADggIBABd9oPm03cXF -661LJLWhAqvdpYhKsg9VSytXjDvlMd3+xDLx51tkljYyGOylMnfX40S2wBEqgLk9 -am58m9Ot/MPWo+ZkKXzR4Tgegiv/J2Wv+xYVxC5xhOW1//qkR71kMrv2JYSiJ0L1 -ILDCExARzRAVukKQKtJE4ZYm6zFIEv0q2skGz3QeqUvVhyj5eTSSPi5E6PaPT481 -PyWzOdxjKpBrIF/EUhJOlywqrJ2X3kjyo2bbwtKDlaZmp54lD+kLM5FlClrD2VQS -3a/DTg4fJl4N3LON7NWBcN7STyQF82xO9UxJZo3R/9ILJUFI/lGExkKvgATP0H5k -SeTy36LssUzAKh3ntLFlosS88Zj0qnAHY7S42jtM+kAiMFsRpvAFDsYCA0irhpuF -3dvd6qJ2gHN99ZwExEWN57kci57q13XRcrHedUTnQn3iV2t93Jm8PYMo6oCTjcVM -ZcFwgbg4/EMxsvYDNEeyrPsiBsse3RdHHF9mudMaotoRsaS8I8nkvof/uZS2+F0g -StRf571oe2XyFR7SOqkt6dhrJKyXWERHrVkY8SFlcN7ONGCoQPHzPKTDKCOM/icz -Q0CgFzzr6juwcqajuUpLXhZI9LK8yIySxZ2frHI2vDSANGupi5LAuBft7HZT9SQB -jLMi6Et8Vcad+qMUu2WFbm5PEn4KPJ2V ------END CERTIFICATE----- - -# Issuer: CN=Izenpe.com O=IZENPE S.A. -# Subject: CN=Izenpe.com O=IZENPE S.A. -# Label: "Izenpe.com" -# Serial: 917563065490389241595536686991402621 -# MD5 Fingerprint: a6:b0:cd:85:80:da:5c:50:34:a3:39:90:2f:55:67:73 -# SHA1 Fingerprint: 2f:78:3d:25:52:18:a7:4a:65:39:71:b5:2c:a2:9c:45:15:6f:e9:19 -# SHA256 Fingerprint: 25:30:cc:8e:98:32:15:02:ba:d9:6f:9b:1f:ba:1b:09:9e:2d:29:9e:0f:45:48:bb:91:4f:36:3b:c0:d4:53:1f ------BEGIN CERTIFICATE----- -MIIF8TCCA9mgAwIBAgIQALC3WhZIX7/hy/WL1xnmfTANBgkqhkiG9w0BAQsFADA4 -MQswCQYDVQQGEwJFUzEUMBIGA1UECgwLSVpFTlBFIFMuQS4xEzARBgNVBAMMCkl6 -ZW5wZS5jb20wHhcNMDcxMjEzMTMwODI4WhcNMzcxMjEzMDgyNzI1WjA4MQswCQYD -VQQGEwJFUzEUMBIGA1UECgwLSVpFTlBFIFMuQS4xEzARBgNVBAMMCkl6ZW5wZS5j -b20wggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDJ03rKDx6sp4boFmVq -scIbRTJxldn+EFvMr+eleQGPicPK8lVx93e+d5TzcqQsRNiekpsUOqHnJJAKClaO -xdgmlOHZSOEtPtoKct2jmRXagaKH9HtuJneJWK3W6wyyQXpzbm3benhB6QiIEn6H -LmYRY2xU+zydcsC8Lv/Ct90NduM61/e0aL6i9eOBbsFGb12N4E3GVFWJGjMxCrFX -uaOKmMPsOzTFlUFpfnXCPCDFYbpRR6AgkJOhkEvzTnyFRVSa0QUmQbC1TR0zvsQD -yCV8wXDbO/QJLVQnSKwv4cSsPsjLkkxTOTcj7NMB+eAJRE1NZMDhDVqHIrytG6P+ -JrUV86f8hBnp7KGItERphIPzidF0BqnMC9bC3ieFUCbKF7jJeodWLBoBHmy+E60Q -rLUk9TiRodZL2vG70t5HtfG8gfZZa88ZU+mNFctKy6lvROUbQc/hhqfK0GqfvEyN -BjNaooXlkDWgYlwWTvDjovoDGrQscbNYLN57C9saD+veIR8GdwYDsMnvmfzAuU8L -hij+0rnq49qlw0dpEuDb8PYZi+17cNcC1u2HGCgsBCRMd+RIihrGO5rUD8r6ddIB -QFqNeb+Lz0vPqhbBleStTIo+F5HUsWLlguWABKQDfo2/2n+iD5dPDNMN+9fR5XJ+ -HMh3/1uaD7euBUbl8agW7EekFwIDAQABo4H2MIHzMIGwBgNVHREEgagwgaWBD2lu -Zm9AaXplbnBlLmNvbaSBkTCBjjFHMEUGA1UECgw+SVpFTlBFIFMuQS4gLSBDSUYg -QTAxMzM3MjYwLVJNZXJjLlZpdG9yaWEtR2FzdGVpeiBUMTA1NSBGNjIgUzgxQzBB -BgNVBAkMOkF2ZGEgZGVsIE1lZGl0ZXJyYW5lbyBFdG9yYmlkZWEgMTQgLSAwMTAx -MCBWaXRvcmlhLUdhc3RlaXowDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC -AQYwHQYDVR0OBBYEFB0cZQ6o8iV7tJHP5LGx5r1VdGwFMA0GCSqGSIb3DQEBCwUA -A4ICAQB4pgwWSp9MiDrAyw6lFn2fuUhfGI8NYjb2zRlrrKvV9pF9rnHzP7MOeIWb -laQnIUdCSnxIOvVFfLMMjlF4rJUT3sb9fbgakEyrkgPH7UIBzg/YsfqikuFgba56 -awmqxinuaElnMIAkejEWOVt+8Rwu3WwJrfIxwYJOubv5vr8qhT/AQKM6WfxZSzwo -JNu0FXWuDYi6LnPAvViH5ULy617uHjAimcs30cQhbIHsvm0m5hzkQiCeR7Csg1lw -LDXWrzY0tM07+DKo7+N4ifuNRSzanLh+QBxh5z6ikixL8s36mLYp//Pye6kfLqCT -VyvehQP5aTfLnnhqBbTFMXiJ7HqnheG5ezzevh55hM6fcA5ZwjUukCox2eRFekGk -LhObNA5me0mrZJfQRsN5nXJQY6aYWwa9SG3YOYNw6DXwBdGqvOPbyALqfP2C2sJb -UjWumDqtujWTI6cfSN01RpiyEGjkpTHCClguGYEQyVB1/OpaFs4R1+7vUIgtYf8/ -QnMFlEPVjjxOAToZpR9GTnfQXeWBIiGH/pR9hNiTrdZoQ0iy2+tzJOeRf1SktoA+ -naM8THLCV8Sg1Mw4J87VBp6iSNnpn86CcDaTmjvfliHjWbcM2pE38P1ZWrOZyGls -QyYBNWNgVYkDOnXYukrZVP/u3oDYLdE41V4tC5h9Pmzb/CaIxw== ------END CERTIFICATE----- - -# Issuer: CN=Chambers of Commerce Root - 2008 O=AC Camerfirma S.A. -# Subject: CN=Chambers of Commerce Root - 2008 O=AC Camerfirma S.A. -# Label: "Chambers of Commerce Root - 2008" -# Serial: 11806822484801597146 -# MD5 Fingerprint: 5e:80:9e:84:5a:0e:65:0b:17:02:f3:55:18:2a:3e:d7 -# SHA1 Fingerprint: 78:6a:74:ac:76:ab:14:7f:9c:6a:30:50:ba:9e:a8:7e:fe:9a:ce:3c -# SHA256 Fingerprint: 06:3e:4a:fa:c4:91:df:d3:32:f3:08:9b:85:42:e9:46:17:d8:93:d7:fe:94:4e:10:a7:93:7e:e2:9d:96:93:c0 ------BEGIN CERTIFICATE----- -MIIHTzCCBTegAwIBAgIJAKPaQn6ksa7aMA0GCSqGSIb3DQEBBQUAMIGuMQswCQYD -VQQGEwJFVTFDMEEGA1UEBxM6TWFkcmlkIChzZWUgY3VycmVudCBhZGRyZXNzIGF0 -IHd3dy5jYW1lcmZpcm1hLmNvbS9hZGRyZXNzKTESMBAGA1UEBRMJQTgyNzQzMjg3 -MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMuQS4xKTAnBgNVBAMTIENoYW1iZXJz -IG9mIENvbW1lcmNlIFJvb3QgLSAyMDA4MB4XDTA4MDgwMTEyMjk1MFoXDTM4MDcz -MTEyMjk1MFowga4xCzAJBgNVBAYTAkVVMUMwQQYDVQQHEzpNYWRyaWQgKHNlZSBj -dXJyZW50IGFkZHJlc3MgYXQgd3d3LmNhbWVyZmlybWEuY29tL2FkZHJlc3MpMRIw -EAYDVQQFEwlBODI3NDMyODcxGzAZBgNVBAoTEkFDIENhbWVyZmlybWEgUy5BLjEp -MCcGA1UEAxMgQ2hhbWJlcnMgb2YgQ29tbWVyY2UgUm9vdCAtIDIwMDgwggIiMA0G -CSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCvAMtwNyuAWko6bHiUfaN/Gh/2NdW9 -28sNRHI+JrKQUrpjOyhYb6WzbZSm891kDFX29ufyIiKAXuFixrYp4YFs8r/lfTJq -VKAyGVn+H4vXPWCGhSRv4xGzdz4gljUha7MI2XAuZPeEklPWDrCQiorjh40G072Q -DuKZoRuGDtqaCrsLYVAGUvGef3bsyw/QHg3PmTA9HMRFEFis1tPo1+XqxQEHd9ZR -5gN/ikilTWh1uem8nk4ZcfUyS5xtYBkL+8ydddy/Js2Pk3g5eXNeJQ7KXOt3EgfL -ZEFHcpOrUMPrCXZkNNI5t3YRCQ12RcSprj1qr7V9ZS+UWBDsXHyvfuK2GNnQm05a -Sd+pZgvMPMZ4fKecHePOjlO+Bd5gD2vlGts/4+EhySnB8esHnFIbAURRPHsl18Tl -UlRdJQfKFiC4reRB7noI/plvg6aRArBsNlVq5331lubKgdaX8ZSD6e2wsWsSaR6s -+12pxZjptFtYer49okQ6Y1nUCyXeG0+95QGezdIp1Z8XGQpvvwyQ0wlf2eOKNcx5 -Wk0ZN5K3xMGtr/R5JJqyAQuxr1yW84Ay+1w9mPGgP0revq+ULtlVmhduYJ1jbLhj -ya6BXBg14JC7vjxPNyK5fuvPnnchpj04gftI2jE9K+OJ9dC1vX7gUMQSibMjmhAx -hduub+84Mxh2EQIDAQABo4IBbDCCAWgwEgYDVR0TAQH/BAgwBgEB/wIBDDAdBgNV -HQ4EFgQU+SSsD7K1+HnA+mCIG8TZTQKeFxkwgeMGA1UdIwSB2zCB2IAU+SSsD7K1 -+HnA+mCIG8TZTQKeFxmhgbSkgbEwga4xCzAJBgNVBAYTAkVVMUMwQQYDVQQHEzpN -YWRyaWQgKHNlZSBjdXJyZW50IGFkZHJlc3MgYXQgd3d3LmNhbWVyZmlybWEuY29t -L2FkZHJlc3MpMRIwEAYDVQQFEwlBODI3NDMyODcxGzAZBgNVBAoTEkFDIENhbWVy -ZmlybWEgUy5BLjEpMCcGA1UEAxMgQ2hhbWJlcnMgb2YgQ29tbWVyY2UgUm9vdCAt -IDIwMDiCCQCj2kJ+pLGu2jAOBgNVHQ8BAf8EBAMCAQYwPQYDVR0gBDYwNDAyBgRV -HSAAMCowKAYIKwYBBQUHAgEWHGh0dHA6Ly9wb2xpY3kuY2FtZXJmaXJtYS5jb20w -DQYJKoZIhvcNAQEFBQADggIBAJASryI1wqM58C7e6bXpeHxIvj99RZJe6dqxGfwW -PJ+0W2aeaufDuV2I6A+tzyMP3iU6XsxPpcG1Lawk0lgH3qLPaYRgM+gQDROpI9CF -5Y57pp49chNyM/WqfcZjHwj0/gF/JM8rLFQJ3uIrbZLGOU8W6jx+ekbURWpGqOt1 -glanq6B8aBMz9p0w8G8nOSQjKpD9kCk18pPfNKXG9/jvjA9iSnyu0/VU+I22mlaH -FoI6M6taIgj3grrqLuBHmrS1RaMFO9ncLkVAO+rcf+g769HsJtg1pDDFOqxXnrN2 -pSB7+R5KBWIBpih1YJeSDW4+TTdDDZIVnBgizVGZoCkaPF+KMjNbMMeJL0eYD6MD -xvbxrN8y8NmBGuScvfaAFPDRLLmF9dijscilIeUcE5fuDr3fKanvNFNb0+RqE4QG -tjICxFKuItLcsiFCGtpA8CnJ7AoMXOLQusxI0zcKzBIKinmwPQN/aUv0NCB9szTq -jktk9T79syNnFQ0EuPAtwQlRPLJsFfClI9eDdOTlLsn+mCdCxqvGnrDQWzilm1De -fhiYtUU79nm06PcaewaD+9CL2rvHvRirCG88gGtAPxkZumWK5r7VXNM21+9AUiRg -OGcEMeyP84LG3rlV8zsxkVrctQgVrXYlCg17LofiDKYGvCYQbTed7N14jHyAxfDZ -d0jQ ------END CERTIFICATE----- - -# Issuer: CN=Global Chambersign Root - 2008 O=AC Camerfirma S.A. -# Subject: CN=Global Chambersign Root - 2008 O=AC Camerfirma S.A. -# Label: "Global Chambersign Root - 2008" -# Serial: 14541511773111788494 -# MD5 Fingerprint: 9e:80:ff:78:01:0c:2e:c1:36:bd:fe:96:90:6e:08:f3 -# SHA1 Fingerprint: 4a:bd:ee:ec:95:0d:35:9c:89:ae:c7:52:a1:2c:5b:29:f6:d6:aa:0c -# SHA256 Fingerprint: 13:63:35:43:93:34:a7:69:80:16:a0:d3:24:de:72:28:4e:07:9d:7b:52:20:bb:8f:bd:74:78:16:ee:be:ba:ca ------BEGIN CERTIFICATE----- -MIIHSTCCBTGgAwIBAgIJAMnN0+nVfSPOMA0GCSqGSIb3DQEBBQUAMIGsMQswCQYD -VQQGEwJFVTFDMEEGA1UEBxM6TWFkcmlkIChzZWUgY3VycmVudCBhZGRyZXNzIGF0 -IHd3dy5jYW1lcmZpcm1hLmNvbS9hZGRyZXNzKTESMBAGA1UEBRMJQTgyNzQzMjg3 -MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMuQS4xJzAlBgNVBAMTHkdsb2JhbCBD -aGFtYmVyc2lnbiBSb290IC0gMjAwODAeFw0wODA4MDExMjMxNDBaFw0zODA3MzEx -MjMxNDBaMIGsMQswCQYDVQQGEwJFVTFDMEEGA1UEBxM6TWFkcmlkIChzZWUgY3Vy -cmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNvbS9hZGRyZXNzKTESMBAG -A1UEBRMJQTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMuQS4xJzAl -BgNVBAMTHkdsb2JhbCBDaGFtYmVyc2lnbiBSb290IC0gMjAwODCCAiIwDQYJKoZI -hvcNAQEBBQADggIPADCCAgoCggIBAMDfVtPkOpt2RbQT2//BthmLN0EYlVJH6xed -KYiONWwGMi5HYvNJBL99RDaxccy9Wglz1dmFRP+RVyXfXjaOcNFccUMd2drvXNL7 -G706tcuto8xEpw2uIRU/uXpbknXYpBI4iRmKt4DS4jJvVpyR1ogQC7N0ZJJ0YPP2 -zxhPYLIj0Mc7zmFLmY/CDNBAspjcDahOo7kKrmCgrUVSY7pmvWjg+b4aqIG7HkF4 -ddPB/gBVsIdU6CeQNR1MM62X/JcumIS/LMmjv9GYERTtY/jKmIhYF5ntRQOXfjyG -HoiMvvKRhI9lNNgATH23MRdaKXoKGCQwoze1eqkBfSbW+Q6OWfH9GzO1KTsXO0G2 -Id3UwD2ln58fQ1DJu7xsepeY7s2MH/ucUa6LcL0nn3HAa6x9kGbo1106DbDVwo3V -yJ2dwW3Q0L9R5OP4wzg2rtandeavhENdk5IMagfeOx2YItaswTXbo6Al/3K1dh3e -beksZixShNBFks4c5eUzHdwHU1SjqoI7mjcv3N2gZOnm3b2u/GSFHTynyQbehP9r -6GsaPMWis0L7iwk+XwhSx2LE1AVxv8Rk5Pihg+g+EpuoHtQ2TS9x9o0o9oOpE9Jh -wZG7SMA0j0GMS0zbaRL/UJScIINZc+18ofLx/d33SdNDWKBWY8o9PeU1VlnpDsog -zCtLkykPAgMBAAGjggFqMIIBZjASBgNVHRMBAf8ECDAGAQH/AgEMMB0GA1UdDgQW -BBS5CcqcHtvTbDprru1U8VuTBjUuXjCB4QYDVR0jBIHZMIHWgBS5CcqcHtvTbDpr -ru1U8VuTBjUuXqGBsqSBrzCBrDELMAkGA1UEBhMCRVUxQzBBBgNVBAcTOk1hZHJp -ZCAoc2VlIGN1cnJlbnQgYWRkcmVzcyBhdCB3d3cuY2FtZXJmaXJtYS5jb20vYWRk -cmVzcykxEjAQBgNVBAUTCUE4Mjc0MzI4NzEbMBkGA1UEChMSQUMgQ2FtZXJmaXJt -YSBTLkEuMScwJQYDVQQDEx5HbG9iYWwgQ2hhbWJlcnNpZ24gUm9vdCAtIDIwMDiC -CQDJzdPp1X0jzjAOBgNVHQ8BAf8EBAMCAQYwPQYDVR0gBDYwNDAyBgRVHSAAMCow -KAYIKwYBBQUHAgEWHGh0dHA6Ly9wb2xpY3kuY2FtZXJmaXJtYS5jb20wDQYJKoZI -hvcNAQEFBQADggIBAICIf3DekijZBZRG/5BXqfEv3xoNa/p8DhxJJHkn2EaqbylZ -UohwEurdPfWbU1Rv4WCiqAm57OtZfMY18dwY6fFn5a+6ReAJ3spED8IXDneRRXoz -X1+WLGiLwUePmJs9wOzL9dWCkoQ10b42OFZyMVtHLaoXpGNR6woBrX/sdZ7LoR/x -fxKxueRkf2fWIyr0uDldmOghp+G9PUIadJpwr2hsUF1Jz//7Dl3mLEfXgTpZALVz -a2Mg9jFFCDkO9HB+QHBaP9BrQql0PSgvAm11cpUJjUhjxsYjV5KTXjXBjfkK9yyd -Yhz2rXzdpjEetrHHfoUm+qRqtdpjMNHvkzeyZi99Bffnt0uYlDXA2TopwZ2yUDMd -SqlapskD7+3056huirRXhOukP9DuqqqHW2Pok+JrqNS4cnhrG+055F3Lm6qH1U9O -AP7Zap88MQ8oAgF9mOinsKJknnn4SPIVqczmyETrP3iZ8ntxPjzxmKfFGBI/5rso -M0LpRQp8bfKGeS/Fghl9CYl8slR2iK7ewfPM4W7bMdaTrpmg7yVqc5iJWzouE4ge -v8CSlDQb4ye3ix5vQv/n6TebUB0tovkC7stYWDpxvGjjqsGvHCgfotwjZT+B6q6Z -09gwzxMNTxXJhLynSC34MCN32EZLeW32jO06f2ARePTpm67VVMB0gNELQp/B ------END CERTIFICATE----- - -# Issuer: CN=Go Daddy Root Certificate Authority - G2 O=GoDaddy.com, Inc. -# Subject: CN=Go Daddy Root Certificate Authority - G2 O=GoDaddy.com, Inc. -# Label: "Go Daddy Root Certificate Authority - G2" -# Serial: 0 -# MD5 Fingerprint: 80:3a:bc:22:c1:e6:fb:8d:9b:3b:27:4a:32:1b:9a:01 -# SHA1 Fingerprint: 47:be:ab:c9:22:ea:e8:0e:78:78:34:62:a7:9f:45:c2:54:fd:e6:8b -# SHA256 Fingerprint: 45:14:0b:32:47:eb:9c:c8:c5:b4:f0:d7:b5:30:91:f7:32:92:08:9e:6e:5a:63:e2:74:9d:d3:ac:a9:19:8e:da ------BEGIN CERTIFICATE----- -MIIDxTCCAq2gAwIBAgIBADANBgkqhkiG9w0BAQsFADCBgzELMAkGA1UEBhMCVVMx -EDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxGjAYBgNVBAoT -EUdvRGFkZHkuY29tLCBJbmMuMTEwLwYDVQQDEyhHbyBEYWRkeSBSb290IENlcnRp -ZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5MDkwMTAwMDAwMFoXDTM3MTIzMTIz -NTk1OVowgYMxCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6b25hMRMwEQYDVQQH -EwpTY290dHNkYWxlMRowGAYDVQQKExFHb0RhZGR5LmNvbSwgSW5jLjExMC8GA1UE -AxMoR28gRGFkZHkgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIw -DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL9xYgjx+lk09xvJGKP3gElY6SKD -E6bFIEMBO4Tx5oVJnyfq9oQbTqC023CYxzIBsQU+B07u9PpPL1kwIuerGVZr4oAH -/PMWdYA5UXvl+TW2dE6pjYIT5LY/qQOD+qK+ihVqf94Lw7YZFAXK6sOoBJQ7Rnwy -DfMAZiLIjWltNowRGLfTshxgtDj6AozO091GB94KPutdfMh8+7ArU6SSYmlRJQVh -GkSBjCypQ5Yj36w6gZoOKcUcqeldHraenjAKOc7xiID7S13MMuyFYkMlNAJWJwGR -tDtwKj9useiciAF9n9T521NtYJ2/LOdYq7hfRvzOxBsDPAnrSTFcaUaz4EcCAwEA -AaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYE -FDqahQcQZyi27/a9BUFuIMGU2g/eMA0GCSqGSIb3DQEBCwUAA4IBAQCZ21151fmX -WWcDYfF+OwYxdS2hII5PZYe096acvNjpL9DbWu7PdIxztDhC2gV7+AJ1uP2lsdeu -9tfeE8tTEH6KRtGX+rcuKxGrkLAngPnon1rpN5+r5N9ss4UXnT3ZJE95kTXWXwTr -gIOrmgIttRD02JDHBHNA7XIloKmf7J6raBKZV8aPEjoJpL1E/QYVN8Gb5DKj7Tjo -2GTzLH4U/ALqn83/B2gX2yKQOC16jdFU8WnjXzPKej17CuPKf1855eJ1usV2GDPO -LPAvTK33sefOT6jEm0pUBsV/fdUID+Ic/n4XuKxe9tQWskMJDE32p2u0mYRlynqI -4uJEvlz36hz1 ------END CERTIFICATE----- - -# Issuer: CN=Starfield Root Certificate Authority - G2 O=Starfield Technologies, Inc. -# Subject: CN=Starfield Root Certificate Authority - G2 O=Starfield Technologies, Inc. -# Label: "Starfield Root Certificate Authority - G2" -# Serial: 0 -# MD5 Fingerprint: d6:39:81:c6:52:7e:96:69:fc:fc:ca:66:ed:05:f2:96 -# SHA1 Fingerprint: b5:1c:06:7c:ee:2b:0c:3d:f8:55:ab:2d:92:f4:fe:39:d4:e7:0f:0e -# SHA256 Fingerprint: 2c:e1:cb:0b:f9:d2:f9:e1:02:99:3f:be:21:51:52:c3:b2:dd:0c:ab:de:1c:68:e5:31:9b:83:91:54:db:b7:f5 ------BEGIN CERTIFICATE----- -MIID3TCCAsWgAwIBAgIBADANBgkqhkiG9w0BAQsFADCBjzELMAkGA1UEBhMCVVMx -EDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoT -HFN0YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xMjAwBgNVBAMTKVN0YXJmaWVs -ZCBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5MDkwMTAwMDAw -MFoXDTM3MTIzMTIzNTk1OVowgY8xCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6 -b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxTdGFyZmllbGQgVGVj -aG5vbG9naWVzLCBJbmMuMTIwMAYDVQQDEylTdGFyZmllbGQgUm9vdCBDZXJ0aWZp -Y2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC -ggEBAL3twQP89o/8ArFvW59I2Z154qK3A2FWGMNHttfKPTUuiUP3oWmb3ooa/RMg -nLRJdzIpVv257IzdIvpy3Cdhl+72WoTsbhm5iSzchFvVdPtrX8WJpRBSiUZV9Lh1 -HOZ/5FSuS/hVclcCGfgXcVnrHigHdMWdSL5stPSksPNkN3mSwOxGXn/hbVNMYq/N -Hwtjuzqd+/x5AJhhdM8mgkBj87JyahkNmcrUDnXMN/uLicFZ8WJ/X7NfZTD4p7dN -dloedl40wOiWVpmKs/B/pM293DIxfJHP4F8R+GuqSVzRmZTRouNjWwl2tVZi4Ut0 -HZbUJtQIBFnQmA4O5t78w+wfkPECAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAO -BgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFHwMMh+n2TB/xH1oo2Kooc6rB1snMA0G -CSqGSIb3DQEBCwUAA4IBAQARWfolTwNvlJk7mh+ChTnUdgWUXuEok21iXQnCoKjU -sHU48TRqneSfioYmUeYs0cYtbpUgSpIB7LiKZ3sx4mcujJUDJi5DnUox9g61DLu3 -4jd/IroAow57UvtruzvE03lRTs2Q9GcHGcg8RnoNAX3FWOdt5oUwF5okxBDgBPfg -8n/Uqgr/Qh037ZTlZFkSIHc40zI+OIF1lnP6aI+xy84fxez6nH7PfrHxBy22/L/K -pL/QlwVKvOoYKAKQvVR4CSFx09F9HdkWsKlhPdAKACL8x3vLCWRFCztAgfd9fDL1 -mMpYjn0q7pBZc2T5NnReJaH1ZgUufzkVqSr7UIuOhWn0 ------END CERTIFICATE----- - -# Issuer: CN=Starfield Services Root Certificate Authority - G2 O=Starfield Technologies, Inc. -# Subject: CN=Starfield Services Root Certificate Authority - G2 O=Starfield Technologies, Inc. -# Label: "Starfield Services Root Certificate Authority - G2" -# Serial: 0 -# MD5 Fingerprint: 17:35:74:af:7b:61:1c:eb:f4:f9:3c:e2:ee:40:f9:a2 -# SHA1 Fingerprint: 92:5a:8f:8d:2c:6d:04:e0:66:5f:59:6a:ff:22:d8:63:e8:25:6f:3f -# SHA256 Fingerprint: 56:8d:69:05:a2:c8:87:08:a4:b3:02:51:90:ed:cf:ed:b1:97:4a:60:6a:13:c6:e5:29:0f:cb:2a:e6:3e:da:b5 ------BEGIN CERTIFICATE----- -MIID7zCCAtegAwIBAgIBADANBgkqhkiG9w0BAQsFADCBmDELMAkGA1UEBhMCVVMx -EDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoT -HFN0YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xOzA5BgNVBAMTMlN0YXJmaWVs -ZCBTZXJ2aWNlcyBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5 -MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgZgxCzAJBgNVBAYTAlVTMRAwDgYD -VQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxTdGFy -ZmllbGQgVGVjaG5vbG9naWVzLCBJbmMuMTswOQYDVQQDEzJTdGFyZmllbGQgU2Vy -dmljZXMgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZI -hvcNAQEBBQADggEPADCCAQoCggEBANUMOsQq+U7i9b4Zl1+OiFOxHz/Lz58gE20p -OsgPfTz3a3Y4Y9k2YKibXlwAgLIvWX/2h/klQ4bnaRtSmpDhcePYLQ1Ob/bISdm2 -8xpWriu2dBTrz/sm4xq6HZYuajtYlIlHVv8loJNwU4PahHQUw2eeBGg6345AWh1K -Ts9DkTvnVtYAcMtS7nt9rjrnvDH5RfbCYM8TWQIrgMw0R9+53pBlbQLPLJGmpufe -hRhJfGZOozptqbXuNC66DQO4M99H67FrjSXZm86B0UVGMpZwh94CDklDhbZsc7tk -6mFBrMnUVN+HL8cisibMn1lUaJ/8viovxFUcdUBgF4UCVTmLfwUCAwEAAaNCMEAw -DwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJxfAN+q -AdcwKziIorhtSpzyEZGDMA0GCSqGSIb3DQEBCwUAA4IBAQBLNqaEd2ndOxmfZyMI -bw5hyf2E3F/YNoHN2BtBLZ9g3ccaaNnRbobhiCPPE95Dz+I0swSdHynVv/heyNXB -ve6SbzJ08pGCL72CQnqtKrcgfU28elUSwhXqvfdqlS5sdJ/PHLTyxQGjhdByPq1z -qwubdQxtRbeOlKyWN7Wg0I8VRw7j6IPdj/3vQQF3zCepYoUz8jcI73HPdwbeyBkd -iEDPfUYd/x7H4c7/I9vG+o1VTqkC50cRRj70/b17KSa7qWFiNyi2LSr2EIZkyXCn -0q23KXB56jzaYyWf/Wi3MOxw+3WKt21gZ7IeyLnp2KhvAotnDU0mV3HaIPzBSlCN -sSi6 ------END CERTIFICATE----- - -# Issuer: CN=AffirmTrust Commercial O=AffirmTrust -# Subject: CN=AffirmTrust Commercial O=AffirmTrust -# Label: "AffirmTrust Commercial" -# Serial: 8608355977964138876 -# MD5 Fingerprint: 82:92:ba:5b:ef:cd:8a:6f:a6:3d:55:f9:84:f6:d6:b7 -# SHA1 Fingerprint: f9:b5:b6:32:45:5f:9c:be:ec:57:5f:80:dc:e9:6e:2c:c7:b2:78:b7 -# SHA256 Fingerprint: 03:76:ab:1d:54:c5:f9:80:3c:e4:b2:e2:01:a0:ee:7e:ef:7b:57:b6:36:e8:a9:3c:9b:8d:48:60:c9:6f:5f:a7 ------BEGIN CERTIFICATE----- -MIIDTDCCAjSgAwIBAgIId3cGJyapsXwwDQYJKoZIhvcNAQELBQAwRDELMAkGA1UE -BhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVz -dCBDb21tZXJjaWFsMB4XDTEwMDEyOTE0MDYwNloXDTMwMTIzMTE0MDYwNlowRDEL -MAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZp -cm1UcnVzdCBDb21tZXJjaWFsMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC -AQEA9htPZwcroRX1BiLLHwGy43NFBkRJLLtJJRTWzsO3qyxPxkEylFf6EqdbDuKP -Hx6GGaeqtS25Xw2Kwq+FNXkyLbscYjfysVtKPcrNcV/pQr6U6Mje+SJIZMblq8Yr -ba0F8PrVC8+a5fBQpIs7R6UjW3p6+DM/uO+Zl+MgwdYoic+U+7lF7eNAFxHUdPAL -MeIrJmqbTFeurCA+ukV6BfO9m2kVrn1OIGPENXY6BwLJN/3HR+7o8XYdcxXyl6S1 -yHp52UKqK39c/s4mT6NmgTWvRLpUHhwwMmWd5jyTXlBOeuM61G7MGvv50jeuJCqr -VwMiKA1JdX+3KNp1v47j3A55MQIDAQABo0IwQDAdBgNVHQ4EFgQUnZPGU4teyq8/ -nx4P5ZmVvCT2lI8wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwDQYJ -KoZIhvcNAQELBQADggEBAFis9AQOzcAN/wr91LoWXym9e2iZWEnStB03TX8nfUYG -XUPGhi4+c7ImfU+TqbbEKpqrIZcUsd6M06uJFdhrJNTxFq7YpFzUf1GO7RgBsZNj -vbz4YYCanrHOQnDiqX0GJX0nof5v7LMeJNrjS1UaADs1tDvZ110w/YETifLCBivt -Z8SOyUOyXGsViQK8YvxO8rUzqrJv0wqiUOP2O+guRMLbZjipM1ZI8W0bM40NjD9g -N53Tym1+NH4Nn3J2ixufcv1SNUFFApYvHLKac0khsUlHRUe072o0EclNmsxZt9YC -nlpOZbWUrhvfKbAW8b8Angc6F2S1BLUjIZkKlTuXfO8= ------END CERTIFICATE----- - -# Issuer: CN=AffirmTrust Networking O=AffirmTrust -# Subject: CN=AffirmTrust Networking O=AffirmTrust -# Label: "AffirmTrust Networking" -# Serial: 8957382827206547757 -# MD5 Fingerprint: 42:65:ca:be:01:9a:9a:4c:a9:8c:41:49:cd:c0:d5:7f -# SHA1 Fingerprint: 29:36:21:02:8b:20:ed:02:f5:66:c5:32:d1:d6:ed:90:9f:45:00:2f -# SHA256 Fingerprint: 0a:81:ec:5a:92:97:77:f1:45:90:4a:f3:8d:5d:50:9f:66:b5:e2:c5:8f:cd:b5:31:05:8b:0e:17:f3:f0:b4:1b ------BEGIN CERTIFICATE----- -MIIDTDCCAjSgAwIBAgIIfE8EORzUmS0wDQYJKoZIhvcNAQEFBQAwRDELMAkGA1UE -BhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVz -dCBOZXR3b3JraW5nMB4XDTEwMDEyOTE0MDgyNFoXDTMwMTIzMTE0MDgyNFowRDEL -MAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZp -cm1UcnVzdCBOZXR3b3JraW5nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC -AQEAtITMMxcua5Rsa2FSoOujz3mUTOWUgJnLVWREZY9nZOIG41w3SfYvm4SEHi3y -YJ0wTsyEheIszx6e/jarM3c1RNg1lho9Nuh6DtjVR6FqaYvZ/Ls6rnla1fTWcbua -kCNrmreIdIcMHl+5ni36q1Mr3Lt2PpNMCAiMHqIjHNRqrSK6mQEubWXLviRmVSRL -QESxG9fhwoXA3hA/Pe24/PHxI1Pcv2WXb9n5QHGNfb2V1M6+oF4nI979ptAmDgAp -6zxG8D1gvz9Q0twmQVGeFDdCBKNwV6gbh+0t+nvujArjqWaJGctB+d1ENmHP4ndG -yH329JKBNv3bNPFyfvMMFr20FQIDAQABo0IwQDAdBgNVHQ4EFgQUBx/S55zawm6i -QLSwelAQUHTEyL0wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwDQYJ -KoZIhvcNAQEFBQADggEBAIlXshZ6qML91tmbmzTCnLQyFE2npN/svqe++EPbkTfO -tDIuUFUaNU52Q3Eg75N3ThVwLofDwR1t3Mu1J9QsVtFSUzpE0nPIxBsFZVpikpzu -QY0x2+c06lkh1QF612S4ZDnNye2v7UsDSKegmQGA3GWjNq5lWUhPgkvIZfFXHeVZ -Lgo/bNjR9eUJtGxUAArgFU2HdW23WJZa3W3SAKD0m0i+wzekujbgfIeFlxoVot4u -olu9rxj5kFDNcFn4J2dHy8egBzp90SxdbBk6ZrV9/ZFvgrG+CJPbFEfxojfHRZ48 -x3evZKiT3/Zpg4Jg8klCNO1aAFSFHBY2kgxc+qatv9s= ------END CERTIFICATE----- - -# Issuer: CN=AffirmTrust Premium O=AffirmTrust -# Subject: CN=AffirmTrust Premium O=AffirmTrust -# Label: "AffirmTrust Premium" -# Serial: 7893706540734352110 -# MD5 Fingerprint: c4:5d:0e:48:b6:ac:28:30:4e:0a:bc:f9:38:16:87:57 -# SHA1 Fingerprint: d8:a6:33:2c:e0:03:6f:b1:85:f6:63:4f:7d:6a:06:65:26:32:28:27 -# SHA256 Fingerprint: 70:a7:3f:7f:37:6b:60:07:42:48:90:45:34:b1:14:82:d5:bf:0e:69:8e:cc:49:8d:f5:25:77:eb:f2:e9:3b:9a ------BEGIN CERTIFICATE----- -MIIFRjCCAy6gAwIBAgIIbYwURrGmCu4wDQYJKoZIhvcNAQEMBQAwQTELMAkGA1UE -BhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MRwwGgYDVQQDDBNBZmZpcm1UcnVz -dCBQcmVtaXVtMB4XDTEwMDEyOTE0MTAzNloXDTQwMTIzMTE0MTAzNlowQTELMAkG -A1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MRwwGgYDVQQDDBNBZmZpcm1U -cnVzdCBQcmVtaXVtMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAxBLf -qV/+Qd3d9Z+K4/as4Tx4mrzY8H96oDMq3I0gW64tb+eT2TZwamjPjlGjhVtnBKAQ -JG9dKILBl1fYSCkTtuG+kU3fhQxTGJoeJKJPj/CihQvL9Cl/0qRY7iZNyaqoe5rZ -+jjeRFcV5fiMyNlI4g0WJx0eyIOFJbe6qlVBzAMiSy2RjYvmia9mx+n/K+k8rNrS -s8PhaJyJ+HoAVt70VZVs+7pk3WKL3wt3MutizCaam7uqYoNMtAZ6MMgpv+0GTZe5 -HMQxK9VfvFMSF5yZVylmd2EhMQcuJUmdGPLu8ytxjLW6OQdJd/zvLpKQBY0tL3d7 -70O/Nbua2Plzpyzy0FfuKE4mX4+QaAkvuPjcBukumj5Rp9EixAqnOEhss/n/fauG -V+O61oV4d7pD6kh/9ti+I20ev9E2bFhc8e6kGVQa9QPSdubhjL08s9NIS+LI+H+S -qHZGnEJlPqQewQcDWkYtuJfzt9WyVSHvutxMAJf7FJUnM7/oQ0dG0giZFmA7mn7S -5u046uwBHjxIVkkJx0w3AJ6IDsBz4W9m6XJHMD4Q5QsDyZpCAGzFlH5hxIrff4Ia -C1nEWTJ3s7xgaVY5/bQGeyzWZDbZvUjthB9+pSKPKrhC9IK31FOQeE4tGv2Bb0TX -OwF0lkLgAOIua+rF7nKsu7/+6qqo+Nz2snmKtmcCAwEAAaNCMEAwHQYDVR0OBBYE -FJ3AZ6YMItkm9UWrpmVSESfYRaxjMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/ -BAQDAgEGMA0GCSqGSIb3DQEBDAUAA4ICAQCzV00QYk465KzquByvMiPIs0laUZx2 -KI15qldGF9X1Uva3ROgIRL8YhNILgM3FEv0AVQVhh0HctSSePMTYyPtwni94loMg -Nt58D2kTiKV1NpgIpsbfrM7jWNa3Pt668+s0QNiigfV4Py/VpfzZotReBA4Xrf5B -8OWycvpEgjNC6C1Y91aMYj+6QrCcDFx+LmUmXFNPALJ4fqENmS2NuB2OosSw/WDQ -MKSOyARiqcTtNd56l+0OOF6SL5Nwpamcb6d9Ex1+xghIsV5n61EIJenmJWtSKZGc -0jlzCFfemQa0W50QBuHCAKi4HEoCChTQwUHK+4w1IX2COPKpVJEZNZOUbWo6xbLQ -u4mGk+ibyQ86p3q4ofB4Rvr8Ny/lioTz3/4E2aFooC8k4gmVBtWVyuEklut89pMF -u+1z6S3RdTnX5yTb2E5fQ4+e0BQ5v1VwSJlXMbSc7kqYA5YwH2AG7hsj/oFgIxpH -YoWlzBk0gG+zrBrjn/B7SK3VAdlntqlyk+otZrWyuOQ9PLLvTIzq6we/qzWaVYa8 -GKa1qF60g2xraUDTn9zxw2lrueFtCfTxqlB2Cnp9ehehVZZCmTEJ3WARjQUwfuaO -RtGdFNrHF+QFlozEJLUbzxQHskD4o55BhrwE0GuWyCqANP2/7waj3VjFhT0+j/6e -KeC2uAloGRwYQw== ------END CERTIFICATE----- - -# Issuer: CN=AffirmTrust Premium ECC O=AffirmTrust -# Subject: CN=AffirmTrust Premium ECC O=AffirmTrust -# Label: "AffirmTrust Premium ECC" -# Serial: 8401224907861490260 -# MD5 Fingerprint: 64:b0:09:55:cf:b1:d5:99:e2:be:13:ab:a6:5d:ea:4d -# SHA1 Fingerprint: b8:23:6b:00:2f:1d:16:86:53:01:55:6c:11:a4:37:ca:eb:ff:c3:bb -# SHA256 Fingerprint: bd:71:fd:f6:da:97:e4:cf:62:d1:64:7a:dd:25:81:b0:7d:79:ad:f8:39:7e:b4:ec:ba:9c:5e:84:88:82:14:23 ------BEGIN CERTIFICATE----- -MIIB/jCCAYWgAwIBAgIIdJclisc/elQwCgYIKoZIzj0EAwMwRTELMAkGA1UEBhMC -VVMxFDASBgNVBAoMC0FmZmlybVRydXN0MSAwHgYDVQQDDBdBZmZpcm1UcnVzdCBQ -cmVtaXVtIEVDQzAeFw0xMDAxMjkxNDIwMjRaFw00MDEyMzExNDIwMjRaMEUxCzAJ -BgNVBAYTAlVTMRQwEgYDVQQKDAtBZmZpcm1UcnVzdDEgMB4GA1UEAwwXQWZmaXJt -VHJ1c3QgUHJlbWl1bSBFQ0MwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQNMF4bFZ0D -0KF5Nbc6PJJ6yhUczWLznCZcBz3lVPqj1swS6vQUX+iOGasvLkjmrBhDeKzQN8O9 -ss0s5kfiGuZjuD0uL3jET9v0D6RoTFVya5UdThhClXjMNzyR4ptlKymjQjBAMB0G -A1UdDgQWBBSaryl6wBE1NSZRMADDav5A1a7WPDAPBgNVHRMBAf8EBTADAQH/MA4G -A1UdDwEB/wQEAwIBBjAKBggqhkjOPQQDAwNnADBkAjAXCfOHiFBar8jAQr9HX/Vs -aobgxCd05DhT1wV/GzTjxi+zygk8N53X57hG8f2h4nECMEJZh0PUUd+60wkyWs6I -flc9nF9Ca/UHLbXwgpP5WW+uZPpY5Yse42O+tYHNbwKMeQ== ------END CERTIFICATE----- - -# Issuer: CN=Certum Trusted Network CA O=Unizeto Technologies S.A. OU=Certum Certification Authority -# Subject: CN=Certum Trusted Network CA O=Unizeto Technologies S.A. OU=Certum Certification Authority -# Label: "Certum Trusted Network CA" -# Serial: 279744 -# MD5 Fingerprint: d5:e9:81:40:c5:18:69:fc:46:2c:89:75:62:0f:aa:78 -# SHA1 Fingerprint: 07:e0:32:e0:20:b7:2c:3f:19:2f:06:28:a2:59:3a:19:a7:0f:06:9e -# SHA256 Fingerprint: 5c:58:46:8d:55:f5:8e:49:7e:74:39:82:d2:b5:00:10:b6:d1:65:37:4a:cf:83:a7:d4:a3:2d:b7:68:c4:40:8e ------BEGIN CERTIFICATE----- -MIIDuzCCAqOgAwIBAgIDBETAMA0GCSqGSIb3DQEBBQUAMH4xCzAJBgNVBAYTAlBM -MSIwIAYDVQQKExlVbml6ZXRvIFRlY2hub2xvZ2llcyBTLkEuMScwJQYDVQQLEx5D -ZXJ0dW0gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxIjAgBgNVBAMTGUNlcnR1bSBU -cnVzdGVkIE5ldHdvcmsgQ0EwHhcNMDgxMDIyMTIwNzM3WhcNMjkxMjMxMTIwNzM3 -WjB+MQswCQYDVQQGEwJQTDEiMCAGA1UEChMZVW5pemV0byBUZWNobm9sb2dpZXMg -Uy5BLjEnMCUGA1UECxMeQ2VydHVtIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MSIw -IAYDVQQDExlDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENBMIIBIjANBgkqhkiG9w0B -AQEFAAOCAQ8AMIIBCgKCAQEA4/t9o3K6wvDJFIf1awFO4W5AB7ptJ11/91sts1rH -UV+rpDKmYYe2bg+G0jACl/jXaVehGDldamR5xgFZrDwxSjh80gTSSyjoIF87B6LM -TXPb865Px1bVWqeWifrzq2jUI4ZZJ88JJ7ysbnKDHDBy3+Ci6dLhdHUZvSqeexVU -BBvXQzmtVSjF4hq79MDkrjhJM8x2hZ85RdKknvISjFH4fOQtf/WsX+sWn7Et0brM -kUJ3TCXJkDhv2/DM+44el1k+1WBO5gUo7Ul5E0u6SNsv+XLTOcr+H9g0cvW0QM8x -AcPs3hEtF10fuFDRXhmnad4HMyjKUJX5p1TLVIZQRan5SQIDAQABo0IwQDAPBgNV -HRMBAf8EBTADAQH/MB0GA1UdDgQWBBQIds3LB/8k9sXN7buQvOKEN0Z19zAOBgNV -HQ8BAf8EBAMCAQYwDQYJKoZIhvcNAQEFBQADggEBAKaorSLOAT2mo/9i0Eidi15y -sHhE49wcrwn9I0j6vSrEuVUEtRCjjSfeC4Jj0O7eDDd5QVsisrCaQVymcODU0HfL -I9MA4GxWL+FpDQ3Zqr8hgVDZBqWo/5U30Kr+4rP1mS1FhIrlQgnXdAIv94nYmem8 -J9RHjboNRhx3zxSkHLmkMcScKHQDNP8zGSal6Q10tz6XxnboJ5ajZt3hrvJBW8qY -VoNzcOSGGtIxQbovvi0TWnZvTuhOgQ4/WwMioBK+ZlgRSssDxLQqKi2WF+A5VLxI -03YnnZotBqbJ7DnSq9ufmgsnAjUpsUCV5/nonFWIGUbWtzT1fs45mtk48VH3Tyw= ------END CERTIFICATE----- - -# Issuer: CN=TWCA Root Certification Authority O=TAIWAN-CA OU=Root CA -# Subject: CN=TWCA Root Certification Authority O=TAIWAN-CA OU=Root CA -# Label: "TWCA Root Certification Authority" -# Serial: 1 -# MD5 Fingerprint: aa:08:8f:f6:f9:7b:b7:f2:b1:a7:1e:9b:ea:ea:bd:79 -# SHA1 Fingerprint: cf:9e:87:6d:d3:eb:fc:42:26:97:a3:b5:a3:7a:a0:76:a9:06:23:48 -# SHA256 Fingerprint: bf:d8:8f:e1:10:1c:41:ae:3e:80:1b:f8:be:56:35:0e:e9:ba:d1:a6:b9:bd:51:5e:dc:5c:6d:5b:87:11:ac:44 ------BEGIN CERTIFICATE----- -MIIDezCCAmOgAwIBAgIBATANBgkqhkiG9w0BAQUFADBfMQswCQYDVQQGEwJUVzES -MBAGA1UECgwJVEFJV0FOLUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFU -V0NBIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDgwODI4MDcyNDMz -WhcNMzAxMjMxMTU1OTU5WjBfMQswCQYDVQQGEwJUVzESMBAGA1UECgwJVEFJV0FO -LUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFUV0NBIFJvb3QgQ2VydGlm -aWNhdGlvbiBBdXRob3JpdHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB -AQCwfnK4pAOU5qfeCTiRShFAh6d8WWQUe7UREN3+v9XAu1bihSX0NXIP+FPQQeFE -AcK0HMMxQhZHhTMidrIKbw/lJVBPhYa+v5guEGcevhEFhgWQxFnQfHgQsIBct+HH -K3XLfJ+utdGdIzdjp9xCoi2SBBtQwXu4PhvJVgSLL1KbralW6cH/ralYhzC2gfeX -RfwZVzsrb+RH9JlF/h3x+JejiB03HFyP4HYlmlD4oFT/RJB2I9IyxsOrBr/8+7/z -rX2SYgJbKdM1o5OaQ2RgXbL6Mv87BK9NQGr5x+PvI/1ry+UPizgN7gr8/g+YnzAx -3WxSZfmLgb4i4RxYA7qRG4kHAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV -HRMBAf8EBTADAQH/MB0GA1UdDgQWBBRqOFsmjd6LWvJPelSDGRjjCDWmujANBgkq -hkiG9w0BAQUFAAOCAQEAPNV3PdrfibqHDAhUaiBQkr6wQT25JmSDCi/oQMCXKCeC -MErJk/9q56YAf4lCmtYR5VPOL8zy2gXE/uJQxDqGfczafhAJO5I1KlOy/usrBdls -XebQ79NqZp4VKIV66IIArB6nCWlWQtNoURi+VJq/REG6Sb4gumlc7rh3zc5sH62D -lhh9DrUUOYTxKOkto557HnpyWoOzeW/vtPzQCqVYT0bf+215WfKEIlKuD8z7fDvn -aspHYcN6+NOSBB+4IIThNlQWx0DeO4pz3N/GCUzf7Nr/1FNCocnyYh0igzyXxfkZ -YiesZSLX0zzG5Y6yU8xJzrww/nsOM5D77dIUkR8Hrw== ------END CERTIFICATE----- - -# Issuer: O=SECOM Trust Systems CO.,LTD. OU=Security Communication RootCA2 -# Subject: O=SECOM Trust Systems CO.,LTD. OU=Security Communication RootCA2 -# Label: "Security Communication RootCA2" -# Serial: 0 -# MD5 Fingerprint: 6c:39:7d:a4:0e:55:59:b2:3f:d6:41:b1:12:50:de:43 -# SHA1 Fingerprint: 5f:3b:8c:f2:f8:10:b3:7d:78:b4:ce:ec:19:19:c3:73:34:b9:c7:74 -# SHA256 Fingerprint: 51:3b:2c:ec:b8:10:d4:cd:e5:dd:85:39:1a:df:c6:c2:dd:60:d8:7b:b7:36:d2:b5:21:48:4a:a4:7a:0e:be:f6 ------BEGIN CERTIFICATE----- -MIIDdzCCAl+gAwIBAgIBADANBgkqhkiG9w0BAQsFADBdMQswCQYDVQQGEwJKUDEl -MCMGA1UEChMcU0VDT00gVHJ1c3QgU3lzdGVtcyBDTy4sTFRELjEnMCUGA1UECxMe -U2VjdXJpdHkgQ29tbXVuaWNhdGlvbiBSb290Q0EyMB4XDTA5MDUyOTA1MDAzOVoX -DTI5MDUyOTA1MDAzOVowXTELMAkGA1UEBhMCSlAxJTAjBgNVBAoTHFNFQ09NIFRy -dXN0IFN5c3RlbXMgQ08uLExURC4xJzAlBgNVBAsTHlNlY3VyaXR5IENvbW11bmlj -YXRpb24gUm9vdENBMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANAV -OVKxUrO6xVmCxF1SrjpDZYBLx/KWvNs2l9amZIyoXvDjChz335c9S672XewhtUGr -zbl+dp+++T42NKA7wfYxEUV0kz1XgMX5iZnK5atq1LXaQZAQwdbWQonCv/Q4EpVM -VAX3NuRFg3sUZdbcDE3R3n4MqzvEFb46VqZab3ZpUql6ucjrappdUtAtCms1FgkQ -hNBqyjoGADdH5H5XTz+L62e4iKrFvlNVspHEfbmwhRkGeC7bYRr6hfVKkaHnFtWO -ojnflLhwHyg/i/xAXmODPIMqGplrz95Zajv8bxbXH/1KEOtOghY6rCcMU/Gt1SSw -awNQwS08Ft1ENCcadfsCAwEAAaNCMEAwHQYDVR0OBBYEFAqFqXdlBZh8QIH4D5cs -OPEK7DzPMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3 -DQEBCwUAA4IBAQBMOqNErLlFsceTfsgLCkLfZOoc7llsCLqJX2rKSpWeeo8HxdpF -coJxDjrSzG+ntKEju/Ykn8sX/oymzsLS28yN/HH8AynBbF0zX2S2ZTuJbxh2ePXc -okgfGT+Ok+vx+hfuzU7jBBJV1uXk3fs+BXziHV7Gp7yXT2g69ekuCkO2r1dcYmh8 -t/2jioSgrGK+KwmHNPBqAbubKVY8/gA3zyNs8U6qtnRGEmyR7jTV7JqR50S+kDFy -1UkC9gLl9B/rfNmWVan/7Ir5mUf/NVoCqgTLiluHcSmRvaS0eg29mvVXIwAHIRc/ -SjnRBUkLp7Y3gaVdjKozXoEofKd9J+sAro03 ------END CERTIFICATE----- - -# Issuer: CN=Hellenic Academic and Research Institutions RootCA 2011 O=Hellenic Academic and Research Institutions Cert. Authority -# Subject: CN=Hellenic Academic and Research Institutions RootCA 2011 O=Hellenic Academic and Research Institutions Cert. Authority -# Label: "Hellenic Academic and Research Institutions RootCA 2011" -# Serial: 0 -# MD5 Fingerprint: 73:9f:4c:4b:73:5b:79:e9:fa:ba:1c:ef:6e:cb:d5:c9 -# SHA1 Fingerprint: fe:45:65:9b:79:03:5b:98:a1:61:b5:51:2e:ac:da:58:09:48:22:4d -# SHA256 Fingerprint: bc:10:4f:15:a4:8b:e7:09:dc:a5:42:a7:e1:d4:b9:df:6f:05:45:27:e8:02:ea:a9:2d:59:54:44:25:8a:fe:71 ------BEGIN CERTIFICATE----- -MIIEMTCCAxmgAwIBAgIBADANBgkqhkiG9w0BAQUFADCBlTELMAkGA1UEBhMCR1Ix -RDBCBgNVBAoTO0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1 -dGlvbnMgQ2VydC4gQXV0aG9yaXR5MUAwPgYDVQQDEzdIZWxsZW5pYyBBY2FkZW1p -YyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25zIFJvb3RDQSAyMDExMB4XDTExMTIw -NjEzNDk1MloXDTMxMTIwMTEzNDk1MlowgZUxCzAJBgNVBAYTAkdSMUQwQgYDVQQK -EztIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25zIENl -cnQuIEF1dGhvcml0eTFAMD4GA1UEAxM3SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJl -c2VhcmNoIEluc3RpdHV0aW9ucyBSb290Q0EgMjAxMTCCASIwDQYJKoZIhvcNAQEB -BQADggEPADCCAQoCggEBAKlTAOMupvaO+mDYLZU++CwqVE7NuYRhlFhPjz2L5EPz -dYmNUeTDN9KKiE15HrcS3UN4SoqS5tdI1Q+kOilENbgH9mgdVc04UfCMJDGFr4PJ -fel3r+0ae50X+bOdOFAPplp5kYCvN66m0zH7tSYJnTxa71HFK9+WXesyHgLacEns -bgzImjeN9/E2YEsmLIKe0HjzDQ9jpFEw4fkrJxIH2Oq9GGKYsFk3fb7u8yBRQlqD -75O6aRXxYp2fmTmCobd0LovUxQt7L/DICto9eQqakxylKHJzkUOap9FNhYS5qXSP -FEDH3N6sQWRstBmbAmNtJGSPRLIl6s5ddAxjMlyNh+UCAwEAAaOBiTCBhjAPBgNV -HRMBAf8EBTADAQH/MAsGA1UdDwQEAwIBBjAdBgNVHQ4EFgQUppFC/RNhSiOeCKQp -5dgTBCPuQSUwRwYDVR0eBEAwPqA8MAWCAy5ncjAFggMuZXUwBoIELmVkdTAGggQu -b3JnMAWBAy5ncjAFgQMuZXUwBoEELmVkdTAGgQQub3JnMA0GCSqGSIb3DQEBBQUA -A4IBAQAf73lB4XtuP7KMhjdCSk4cNx6NZrokgclPEg8hwAOXhiVtXdMiKahsog2p -6z0GW5k6x8zDmjR/qw7IThzh+uTczQ2+vyT+bOdrwg3IBp5OjWEopmr95fZi6hg8 -TqBTnbI6nOulnJEWtk2C4AwFSKls9cz4y51JtPACpf1wA+2KIaWuE4ZJwzNzvoc7 -dIsXRSZMFpGD/md9zU1jZ/rzAxKWeAaNsWftjj++n08C9bMJL/NMh98qy5V8Acys -Nnq/onN694/BtZqhFLKPM58N7yLcZnuEvUUXBj08yrl3NI/K6s8/MT7jiOOASSXI -l7WdmplNsDz4SgCbZN2fOUvRJ9e4 ------END CERTIFICATE----- - -# Issuer: CN=Actalis Authentication Root CA O=Actalis S.p.A./03358520967 -# Subject: CN=Actalis Authentication Root CA O=Actalis S.p.A./03358520967 -# Label: "Actalis Authentication Root CA" -# Serial: 6271844772424770508 -# MD5 Fingerprint: 69:c1:0d:4f:07:a3:1b:c3:fe:56:3d:04:bc:11:f6:a6 -# SHA1 Fingerprint: f3:73:b3:87:06:5a:28:84:8a:f2:f3:4a:ce:19:2b:dd:c7:8e:9c:ac -# SHA256 Fingerprint: 55:92:60:84:ec:96:3a:64:b9:6e:2a:be:01:ce:0b:a8:6a:64:fb:fe:bc:c7:aa:b5:af:c1:55:b3:7f:d7:60:66 ------BEGIN CERTIFICATE----- -MIIFuzCCA6OgAwIBAgIIVwoRl0LE48wwDQYJKoZIhvcNAQELBQAwazELMAkGA1UE -BhMCSVQxDjAMBgNVBAcMBU1pbGFuMSMwIQYDVQQKDBpBY3RhbGlzIFMucC5BLi8w -MzM1ODUyMDk2NzEnMCUGA1UEAwweQWN0YWxpcyBBdXRoZW50aWNhdGlvbiBSb290 -IENBMB4XDTExMDkyMjExMjIwMloXDTMwMDkyMjExMjIwMlowazELMAkGA1UEBhMC -SVQxDjAMBgNVBAcMBU1pbGFuMSMwIQYDVQQKDBpBY3RhbGlzIFMucC5BLi8wMzM1 -ODUyMDk2NzEnMCUGA1UEAwweQWN0YWxpcyBBdXRoZW50aWNhdGlvbiBSb290IENB -MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAp8bEpSmkLO/lGMWwUKNv -UTufClrJwkg4CsIcoBh/kbWHuUA/3R1oHwiD1S0eiKD4j1aPbZkCkpAW1V8IbInX -4ay8IMKx4INRimlNAJZaby/ARH6jDuSRzVju3PvHHkVH3Se5CAGfpiEd9UEtL0z9 -KK3giq0itFZljoZUj5NDKd45RnijMCO6zfB9E1fAXdKDa0hMxKufgFpbOr3JpyI/ -gCczWw63igxdBzcIy2zSekciRDXFzMwujt0q7bd9Zg1fYVEiVRvjRuPjPdA1Yprb -rxTIW6HMiRvhMCb8oJsfgadHHwTrozmSBp+Z07/T6k9QnBn+locePGX2oxgkg4YQ -51Q+qDp2JE+BIcXjDwL4k5RHILv+1A7TaLndxHqEguNTVHnd25zS8gebLra8Pu2F -be8lEfKXGkJh90qX6IuxEAf6ZYGyojnP9zz/GPvG8VqLWeICrHuS0E4UT1lF9gxe -KF+w6D9Fz8+vm2/7hNN3WpVvrJSEnu68wEqPSpP4RCHiMUVhUE4Q2OM1fEwZtN4F -v6MGn8i1zeQf1xcGDXqVdFUNaBr8EBtiZJ1t4JWgw5QHVw0U5r0F+7if5t+L4sbn -fpb2U8WANFAoWPASUHEXMLrmeGO89LKtmyuy/uE5jF66CyCU3nuDuP/jVo23Eek7 -jPKxwV2dpAtMK9myGPW1n0sCAwEAAaNjMGEwHQYDVR0OBBYEFFLYiDrIn3hm7Ynz -ezhwlMkCAjbQMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUUtiIOsifeGbt -ifN7OHCUyQICNtAwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBCwUAA4ICAQAL -e3KHwGCmSUyIWOYdiPcUZEim2FgKDk8TNd81HdTtBjHIgT5q1d07GjLukD0R0i70 -jsNjLiNmsGe+b7bAEzlgqqI0JZN1Ut6nna0Oh4lScWoWPBkdg/iaKWW+9D+a2fDz -WochcYBNy+A4mz+7+uAwTc+G02UQGRjRlwKxK3JCaKygvU5a2hi/a5iB0P2avl4V -SM0RFbnAKVy06Ij3Pjaut2L9HmLecHgQHEhb2rykOLpn7VU+Xlff1ANATIGk0k9j -pwlCCRT8AKnCgHNPLsBA2RF7SOp6AsDT6ygBJlh0wcBzIm2Tlf05fbsq4/aC4yyX -X04fkZT6/iyj2HYauE2yOE+b+h1IYHkm4vP9qdCa6HCPSXrW5b0KDtst842/6+Ok -fcvHlXHo2qN8xcL4dJIEG4aspCJTQLas/kx2z/uUMsA1n3Y/buWQbqCmJqK4LL7R -K4X9p2jIugErsWx0Hbhzlefut8cl8ABMALJ+tguLHPPAUJ4lueAI3jZm/zel0btU -ZCzJJ7VLkn5l/9Mt4blOvH+kQSGQQXemOR/qnuOf0GZvBeyqdn6/axag67XH/JJU -LysRJyU3eExRarDzzFhdFPFqSBX/wge2sY0PjlxQRrM9vwGYT7JZVEc+NHt4bVaT -LnPqZih4zR0Uv6CPLy64Lo7yFIrM6bV8+2ydDKXhlg== ------END CERTIFICATE----- - -# Issuer: O=Trustis Limited OU=Trustis FPS Root CA -# Subject: O=Trustis Limited OU=Trustis FPS Root CA -# Label: "Trustis FPS Root CA" -# Serial: 36053640375399034304724988975563710553 -# MD5 Fingerprint: 30:c9:e7:1e:6b:e6:14:eb:65:b2:16:69:20:31:67:4d -# SHA1 Fingerprint: 3b:c0:38:0b:33:c3:f6:a6:0c:86:15:22:93:d9:df:f5:4b:81:c0:04 -# SHA256 Fingerprint: c1:b4:82:99:ab:a5:20:8f:e9:63:0a:ce:55:ca:68:a0:3e:da:5a:51:9c:88:02:a0:d3:a6:73:be:8f:8e:55:7d ------BEGIN CERTIFICATE----- -MIIDZzCCAk+gAwIBAgIQGx+ttiD5JNM2a/fH8YygWTANBgkqhkiG9w0BAQUFADBF -MQswCQYDVQQGEwJHQjEYMBYGA1UEChMPVHJ1c3RpcyBMaW1pdGVkMRwwGgYDVQQL -ExNUcnVzdGlzIEZQUyBSb290IENBMB4XDTAzMTIyMzEyMTQwNloXDTI0MDEyMTEx -MzY1NFowRTELMAkGA1UEBhMCR0IxGDAWBgNVBAoTD1RydXN0aXMgTGltaXRlZDEc -MBoGA1UECxMTVHJ1c3RpcyBGUFMgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQAD -ggEPADCCAQoCggEBAMVQe547NdDfxIzNjpvto8A2mfRC6qc+gIMPpqdZh8mQRUN+ -AOqGeSoDvT03mYlmt+WKVoaTnGhLaASMk5MCPjDSNzoiYYkchU59j9WvezX2fihH -iTHcDnlkH5nSW7r+f2C/revnPDgpai/lkQtV/+xvWNUtyd5MZnGPDNcE2gfmHhjj -vSkCqPoc4Vu5g6hBSLwacY3nYuUtsuvffM/bq1rKMfFMIvMFE/eC+XN5DL7XSxzA -0RU8k0Fk0ea+IxciAIleH2ulrG6nS4zto3Lmr2NNL4XSFDWaLk6M6jKYKIahkQlB -OrTh4/L68MkKokHdqeMDx4gVOxzUGpTXn2RZEm0CAwEAAaNTMFEwDwYDVR0TAQH/ -BAUwAwEB/zAfBgNVHSMEGDAWgBS6+nEleYtXQSUhhgtx67JkDoshZzAdBgNVHQ4E -FgQUuvpxJXmLV0ElIYYLceuyZA6LIWcwDQYJKoZIhvcNAQEFBQADggEBAH5Y//01 -GX2cGE+esCu8jowU/yyg2kdbw++BLa8F6nRIW/M+TgfHbcWzk88iNVy2P3UnXwmW -zaD+vkAMXBJV+JOCyinpXj9WV4s4NvdFGkwozZ5BuO1WTISkQMi4sKUraXAEasP4 -1BIy+Q7DsdwyhEQsb8tGD+pmQQ9P8Vilpg0ND2HepZ5dfWWhPBfnqFVO76DH7cZE -f1T1o+CP8HxVIo8ptoGj4W1OLBuAZ+ytIJ8MYmHVl/9D7S3B2l0pKoU/rGXuhg8F -jZBf3+6f9L/uHfuY5H+QK4R4EA5sSVPvFVtlRkpdr7r7OnIdzfYliB6XzCGcKQEN -ZetX2fNXlrtIzYE= ------END CERTIFICATE----- - -# Issuer: CN=Buypass Class 2 Root CA O=Buypass AS-983163327 -# Subject: CN=Buypass Class 2 Root CA O=Buypass AS-983163327 -# Label: "Buypass Class 2 Root CA" -# Serial: 2 -# MD5 Fingerprint: 46:a7:d2:fe:45:fb:64:5a:a8:59:90:9b:78:44:9b:29 -# SHA1 Fingerprint: 49:0a:75:74:de:87:0a:47:fe:58:ee:f6:c7:6b:eb:c6:0b:12:40:99 -# SHA256 Fingerprint: 9a:11:40:25:19:7c:5b:b9:5d:94:e6:3d:55:cd:43:79:08:47:b6:46:b2:3c:df:11:ad:a4:a0:0e:ff:15:fb:48 ------BEGIN CERTIFICATE----- -MIIFWTCCA0GgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJOTzEd -MBsGA1UECgwUQnV5cGFzcyBBUy05ODMxNjMzMjcxIDAeBgNVBAMMF0J1eXBhc3Mg -Q2xhc3MgMiBSb290IENBMB4XDTEwMTAyNjA4MzgwM1oXDTQwMTAyNjA4MzgwM1ow -TjELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1eXBhc3MgQVMtOTgzMTYzMzI3MSAw -HgYDVQQDDBdCdXlwYXNzIENsYXNzIDIgUm9vdCBDQTCCAiIwDQYJKoZIhvcNAQEB -BQADggIPADCCAgoCggIBANfHXvfBB9R3+0Mh9PT1aeTuMgHbo4Yf5FkNuud1g1Lr -6hxhFUi7HQfKjK6w3Jad6sNgkoaCKHOcVgb/S2TwDCo3SbXlzwx87vFKu3MwZfPV -L4O2fuPn9Z6rYPnT8Z2SdIrkHJasW4DptfQxh6NR/Md+oW+OU3fUl8FVM5I+GC91 -1K2GScuVr1QGbNgGE41b/+EmGVnAJLqBcXmQRFBoJJRfuLMR8SlBYaNByyM21cHx -MlAQTn/0hpPshNOOvEu/XAFOBz3cFIqUCqTqc/sLUegTBxj6DvEr0VQVfTzh97QZ -QmdiXnfgolXsttlpF9U6r0TtSsWe5HonfOV116rLJeffawrbD02TTqigzXsu8lkB -arcNuAeBfos4GzjmCleZPe4h6KP1DBbdi+w0jpwqHAAVF41og9JwnxgIzRFo1clr -Us3ERo/ctfPYV3Me6ZQ5BL/T3jjetFPsaRyifsSP5BtwrfKi+fv3FmRmaZ9JUaLi -FRhnBkp/1Wy1TbMz4GHrXb7pmA8y1x1LPC5aAVKRCfLf6o3YBkBjqhHk/sM3nhRS -P/TizPJhk9H9Z2vXUq6/aKtAQ6BXNVN48FP4YUIHZMbXb5tMOA1jrGKvNouicwoN -9SG9dKpN6nIDSdvHXx1iY8f93ZHsM+71bbRuMGjeyNYmsHVee7QHIJihdjK4TWxP -AgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFMmAd+BikoL1Rpzz -uvdMw964o605MA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsFAAOCAgEAU18h -9bqwOlI5LJKwbADJ784g7wbylp7ppHR/ehb8t/W2+xUbP6umwHJdELFx7rxP462s -A20ucS6vxOOto70MEae0/0qyexAQH6dXQbLArvQsWdZHEIjzIVEpMMpghq9Gqx3t -OluwlN5E40EIosHsHdb9T7bWR9AUC8rmyrV7d35BH16Dx7aMOZawP5aBQW9gkOLo -+fsicdl9sz1Gv7SEr5AcD48Saq/v7h56rgJKihcrdv6sVIkkLE8/trKnToyokZf7 -KcZ7XC25y2a2t6hbElGFtQl+Ynhw/qlqYLYdDnkM/crqJIByw5c/8nerQyIKx+u2 -DISCLIBrQYoIwOula9+ZEsuK1V6ADJHgJgg2SMX6OBE1/yWDLfJ6v9r9jv6ly0Us -H8SIU653DtmadsWOLB2jutXsMq7Aqqz30XpN69QH4kj3Io6wpJ9qzo6ysmD0oyLQ -I+uUWnpp3Q+/QFesa1lQ2aOZ4W7+jQF5JyMV3pKdewlNWudLSDBaGOYKbeaP4NK7 -5t98biGCwWg5TbSYWGZizEqQXsP6JwSxeRV0mcy+rSDeJmAc61ZRpqPq5KM/p/9h -3PFaTWwyI0PurKju7koSCTxdccK+efrCh2gdC/1cacwG0Jp9VJkqyTkaGa9LKkPz -Y11aWOIv4x3kqdbQCtCev9eBCfHJxyYNrJgWVqA= ------END CERTIFICATE----- - -# Issuer: CN=Buypass Class 3 Root CA O=Buypass AS-983163327 -# Subject: CN=Buypass Class 3 Root CA O=Buypass AS-983163327 -# Label: "Buypass Class 3 Root CA" -# Serial: 2 -# MD5 Fingerprint: 3d:3b:18:9e:2c:64:5a:e8:d5:88:ce:0e:f9:37:c2:ec -# SHA1 Fingerprint: da:fa:f7:fa:66:84:ec:06:8f:14:50:bd:c7:c2:81:a5:bc:a9:64:57 -# SHA256 Fingerprint: ed:f7:eb:bc:a2:7a:2a:38:4d:38:7b:7d:40:10:c6:66:e2:ed:b4:84:3e:4c:29:b4:ae:1d:5b:93:32:e6:b2:4d ------BEGIN CERTIFICATE----- -MIIFWTCCA0GgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJOTzEd -MBsGA1UECgwUQnV5cGFzcyBBUy05ODMxNjMzMjcxIDAeBgNVBAMMF0J1eXBhc3Mg -Q2xhc3MgMyBSb290IENBMB4XDTEwMTAyNjA4Mjg1OFoXDTQwMTAyNjA4Mjg1OFow -TjELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1eXBhc3MgQVMtOTgzMTYzMzI3MSAw -HgYDVQQDDBdCdXlwYXNzIENsYXNzIDMgUm9vdCBDQTCCAiIwDQYJKoZIhvcNAQEB -BQADggIPADCCAgoCggIBAKXaCpUWUOOV8l6ddjEGMnqb8RB2uACatVI2zSRHsJ8Y -ZLya9vrVediQYkwiL944PdbgqOkcLNt4EemOaFEVcsfzM4fkoF0LXOBXByow9c3E -N3coTRiR5r/VUv1xLXA+58bEiuPwKAv0dpihi4dVsjoT/Lc+JzeOIuOoTyrvYLs9 -tznDDgFHmV0ST9tD+leh7fmdvhFHJlsTmKtdFoqwNxxXnUX/iJY2v7vKB3tvh2PX -0DJq1l1sDPGzbjniazEuOQAnFN44wOwZZoYS6J1yFhNkUsepNxz9gjDthBgd9K5c -/3ATAOux9TN6S9ZV+AWNS2mw9bMoNlwUxFFzTWsL8TQH2xc519woe2v1n/MuwU8X -KhDzzMro6/1rqy6any2CbgTUUgGTLT2G/H783+9CHaZr77kgxve9oKeV/afmiSTY -zIw0bOIjL9kSGiG5VZFvC5F5GQytQIgLcOJ60g7YaEi7ghM5EFjp2CoHxhLbWNvS -O1UQRwUVZ2J+GGOmRj8JDlQyXr8NYnon74Do29lLBlo3WiXQCBJ31G8JUJc9yB3D -34xFMFbG02SrZvPAXpacw8Tvw3xrizp5f7NJzz3iiZ+gMEuFuZyUJHmPfWupRWgP -K9Dx2hzLabjKSWJtyNBjYt1gD1iqj6G8BaVmos8bdrKEZLFMOVLAMLrwjEsCsLa3 -AgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFEe4zf/lb+74suwv -Tg75JbCOPGvDMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsFAAOCAgEAACAj -QTUEkMJAYmDv4jVM1z+s4jSQuKFvdvoWFqRINyzpkMLyPPgKn9iB5btb2iUspKdV -cSQy9sgL8rxq+JOssgfCX5/bzMiKqr5qb+FJEMwx14C7u8jYog5kV+qi9cKpMRXS -IGrs/CIBKM+GuIAeqcwRpTzyFrNHnfzSgCHEy9BHcEGhyoMZCCxt8l13nIoUE9Q2 -HJLw5QY33KbmkJs4j1xrG0aGQ0JfPgEHU1RdZX33inOhmlRaHylDFCfChQ+1iHsa -O5S3HWCntZznKWlXWpuTekMwGwPXYshApqr8ZORK15FTAaggiG6cX0S5y2CBNOxv -033aSF/rtJC8LakcC6wc1aJoIIAE1vyxjy+7SjENSoYc6+I2KSb12tjE8nVhz36u -dmNKekBlk4f4HoCMhuWG1o8O/FMsYOgWYRqiPkN7zTlgVGr18okmAWiDSKIz6MkE -kbIRNBE+6tBDGR8Dk5AM/1E9V/RBbuHLoL7ryWPNbczk+DaqaJ3tvV2XcEQNtg41 -3OEMXbugUZTLfhbrES+jkkXITHHZvMmZUldGL1DPvTVp9D0VzgalLA8+9oG6lLvD -u79leNKGef9JOxqDDPDeeOzI8k1MGt6CKfjBWtrt7uYnXuhF0J0cUahoq0Tj0Itq -4/g7u9xN12TyUb7mqqta6THuBrxzvxNiCp/HuZc= ------END CERTIFICATE----- - -# Issuer: CN=T-TeleSec GlobalRoot Class 3 O=T-Systems Enterprise Services GmbH OU=T-Systems Trust Center -# Subject: CN=T-TeleSec GlobalRoot Class 3 O=T-Systems Enterprise Services GmbH OU=T-Systems Trust Center -# Label: "T-TeleSec GlobalRoot Class 3" -# Serial: 1 -# MD5 Fingerprint: ca:fb:40:a8:4e:39:92:8a:1d:fe:8e:2f:c4:27:ea:ef -# SHA1 Fingerprint: 55:a6:72:3e:cb:f2:ec:cd:c3:23:74:70:19:9d:2a:be:11:e3:81:d1 -# SHA256 Fingerprint: fd:73:da:d3:1c:64:4f:f1:b4:3b:ef:0c:cd:da:96:71:0b:9c:d9:87:5e:ca:7e:31:70:7a:f3:e9:6d:52:2b:bd ------BEGIN CERTIFICATE----- -MIIDwzCCAqugAwIBAgIBATANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UEBhMCREUx -KzApBgNVBAoMIlQtU3lzdGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAd -BgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBDZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNl -YyBHbG9iYWxSb290IENsYXNzIDMwHhcNMDgxMDAxMTAyOTU2WhcNMzMxMDAxMjM1 -OTU5WjCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoMIlQtU3lzdGVtcyBFbnRlcnBy -aXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBDZW50 -ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDMwggEiMA0G -CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC9dZPwYiJvJK7genasfb3ZJNW4t/zN -8ELg63iIVl6bmlQdTQyK9tPPcPRStdiTBONGhnFBSivwKixVA9ZIw+A5OO3yXDw/ -RLyTPWGrTs0NvvAgJ1gORH8EGoel15YUNpDQSXuhdfsaa3Ox+M6pCSzyU9XDFES4 -hqX2iys52qMzVNn6chr3IhUciJFrf2blw2qAsCTz34ZFiP0Zf3WHHx+xGwpzJFu5 -ZeAsVMhg02YXP+HMVDNzkQI6pn97djmiH5a2OK61yJN0HZ65tOVgnS9W0eDrXltM -EnAMbEQgqxHY9Bn20pxSN+f6tsIxO0rUFJmtxxr1XV/6B7h8DR/Wgx6zAgMBAAGj -QjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBS1 -A/d2O2GCahKqGFPrAyGUv/7OyjANBgkqhkiG9w0BAQsFAAOCAQEAVj3vlNW92nOy -WL6ukK2YJ5f+AbGwUgC4TeQbIXQbfsDuXmkqJa9c1h3a0nnJ85cp4IaH3gRZD/FZ -1GSFS5mvJQQeyUapl96Cshtwn5z2r3Ex3XsFpSzTucpH9sry9uetuUg/vBa3wW30 -6gmv7PO15wWeph6KU1HWk4HMdJP2udqmJQV0eVp+QD6CSyYRMG7hP0HHRwA11fXT -91Q+gT3aSWqas+8QPebrb9HIIkfLzM8BMZLZGOMivgkeGj5asuRrDFR6fUNOuIml -e9eiPZaGzPImNC1qkp2aGtAw4l1OBLBfiyB+d8E9lYLRRpo7PHi4b6HQDWSieB4p -TpPDpFQUWw== ------END CERTIFICATE----- - -# Issuer: CN=EE Certification Centre Root CA O=AS Sertifitseerimiskeskus -# Subject: CN=EE Certification Centre Root CA O=AS Sertifitseerimiskeskus -# Label: "EE Certification Centre Root CA" -# Serial: 112324828676200291871926431888494945866 -# MD5 Fingerprint: 43:5e:88:d4:7d:1a:4a:7e:fd:84:2e:52:eb:01:d4:6f -# SHA1 Fingerprint: c9:a8:b9:e7:55:80:5e:58:e3:53:77:a7:25:eb:af:c3:7b:27:cc:d7 -# SHA256 Fingerprint: 3e:84:ba:43:42:90:85:16:e7:75:73:c0:99:2f:09:79:ca:08:4e:46:85:68:1f:f1:95:cc:ba:8a:22:9b:8a:76 ------BEGIN CERTIFICATE----- -MIIEAzCCAuugAwIBAgIQVID5oHPtPwBMyonY43HmSjANBgkqhkiG9w0BAQUFADB1 -MQswCQYDVQQGEwJFRTEiMCAGA1UECgwZQVMgU2VydGlmaXRzZWVyaW1pc2tlc2t1 -czEoMCYGA1UEAwwfRUUgQ2VydGlmaWNhdGlvbiBDZW50cmUgUm9vdCBDQTEYMBYG -CSqGSIb3DQEJARYJcGtpQHNrLmVlMCIYDzIwMTAxMDMwMTAxMDMwWhgPMjAzMDEy -MTcyMzU5NTlaMHUxCzAJBgNVBAYTAkVFMSIwIAYDVQQKDBlBUyBTZXJ0aWZpdHNl -ZXJpbWlza2Vza3VzMSgwJgYDVQQDDB9FRSBDZXJ0aWZpY2F0aW9uIENlbnRyZSBS -b290IENBMRgwFgYJKoZIhvcNAQkBFglwa2lAc2suZWUwggEiMA0GCSqGSIb3DQEB -AQUAA4IBDwAwggEKAoIBAQDIIMDs4MVLqwd4lfNE7vsLDP90jmG7sWLqI9iroWUy -euuOF0+W2Ap7kaJjbMeMTC55v6kF/GlclY1i+blw7cNRfdCT5mzrMEvhvH2/UpvO -bntl8jixwKIy72KyaOBhU8E2lf/slLo2rpwcpzIP5Xy0xm90/XsY6KxX7QYgSzIw -WFv9zajmofxwvI6Sc9uXp3whrj3B9UiHbCe9nyV0gVWw93X2PaRka9ZP585ArQ/d -MtO8ihJTmMmJ+xAdTX7Nfh9WDSFwhfYggx/2uh8Ej+p3iDXE/+pOoYtNP2MbRMNE -1CV2yreN1x5KZmTNXMWcg+HCCIia7E6j8T4cLNlsHaFLAgMBAAGjgYowgYcwDwYD -VR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFBLyWj7qVhy/ -zQas8fElyalL1BSZMEUGA1UdJQQ+MDwGCCsGAQUFBwMCBggrBgEFBQcDAQYIKwYB -BQUHAwMGCCsGAQUFBwMEBggrBgEFBQcDCAYIKwYBBQUHAwkwDQYJKoZIhvcNAQEF -BQADggEBAHv25MANqhlHt01Xo/6tu7Fq1Q+e2+RjxY6hUFaTlrg4wCQiZrxTFGGV -v9DHKpY5P30osxBAIWrEr7BSdxjhlthWXePdNl4dp1BUoMUq5KqMlIpPnTX/dqQG -E5Gion0ARD9V04I8GtVbvFZMIi5GQ4okQC3zErg7cBqklrkar4dBGmoYDQZPxz5u -uSlNDUmJEYcyW+ZLBMjkXOZ0c5RdFpgTlf7727FE5TpwrDdr5rMzcijJs1eg9gIW -iAYLtqZLICjU3j2LrTcFU3T+bsy8QxdxXvnFzBqpYe73dgzzcvRyrc9yAjYHR8/v -GVCJYMzpJJUPwssd8m92kMfMdcGWxZ0= ------END CERTIFICATE----- - -# Issuer: CN=D-TRUST Root Class 3 CA 2 2009 O=D-Trust GmbH -# Subject: CN=D-TRUST Root Class 3 CA 2 2009 O=D-Trust GmbH -# Label: "D-TRUST Root Class 3 CA 2 2009" -# Serial: 623603 -# MD5 Fingerprint: cd:e0:25:69:8d:47:ac:9c:89:35:90:f7:fd:51:3d:2f -# SHA1 Fingerprint: 58:e8:ab:b0:36:15:33:fb:80:f7:9b:1b:6d:29:d3:ff:8d:5f:00:f0 -# SHA256 Fingerprint: 49:e7:a4:42:ac:f0:ea:62:87:05:00:54:b5:25:64:b6:50:e4:f4:9e:42:e3:48:d6:aa:38:e0:39:e9:57:b1:c1 ------BEGIN CERTIFICATE----- -MIIEMzCCAxugAwIBAgIDCYPzMA0GCSqGSIb3DQEBCwUAME0xCzAJBgNVBAYTAkRF -MRUwEwYDVQQKDAxELVRydXN0IEdtYkgxJzAlBgNVBAMMHkQtVFJVU1QgUm9vdCBD -bGFzcyAzIENBIDIgMjAwOTAeFw0wOTExMDUwODM1NThaFw0yOTExMDUwODM1NTha -ME0xCzAJBgNVBAYTAkRFMRUwEwYDVQQKDAxELVRydXN0IEdtYkgxJzAlBgNVBAMM -HkQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgMjAwOTCCASIwDQYJKoZIhvcNAQEB -BQADggEPADCCAQoCggEBANOySs96R+91myP6Oi/WUEWJNTrGa9v+2wBoqOADER03 -UAifTUpolDWzU9GUY6cgVq/eUXjsKj3zSEhQPgrfRlWLJ23DEE0NkVJD2IfgXU42 -tSHKXzlABF9bfsyjxiupQB7ZNoTWSPOSHjRGICTBpFGOShrvUD9pXRl/RcPHAY9R -ySPocq60vFYJfxLLHLGvKZAKyVXMD9O0Gu1HNVpK7ZxzBCHQqr0ME7UAyiZsxGsM -lFqVlNpQmvH/pStmMaTJOKDfHR+4CS7zp+hnUquVH+BGPtikw8paxTGA6Eian5Rp -/hnd2HN8gcqW3o7tszIFZYQ05ub9VxC1X3a/L7AQDcUCAwEAAaOCARowggEWMA8G -A1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFP3aFMSfMN4hvR5COfyrYyNJ4PGEMA4G -A1UdDwEB/wQEAwIBBjCB0wYDVR0fBIHLMIHIMIGAoH6gfIZ6bGRhcDovL2RpcmVj -dG9yeS5kLXRydXN0Lm5ldC9DTj1ELVRSVVNUJTIwUm9vdCUyMENsYXNzJTIwMyUy -MENBJTIwMiUyMDIwMDksTz1ELVRydXN0JTIwR21iSCxDPURFP2NlcnRpZmljYXRl -cmV2b2NhdGlvbmxpc3QwQ6BBoD+GPWh0dHA6Ly93d3cuZC10cnVzdC5uZXQvY3Js -L2QtdHJ1c3Rfcm9vdF9jbGFzc18zX2NhXzJfMjAwOS5jcmwwDQYJKoZIhvcNAQEL -BQADggEBAH+X2zDI36ScfSF6gHDOFBJpiBSVYEQBrLLpME+bUMJm2H6NMLVwMeni -acfzcNsgFYbQDfC+rAF1hM5+n02/t2A7nPPKHeJeaNijnZflQGDSNiH+0LS4F9p0 -o3/U37CYAqxva2ssJSRyoWXuJVrl5jLn8t+rSfrzkGkj2wTZ51xY/GXUl77M/C4K -zCUqNQT4YJEVdT1B/yMfGchs64JTBKbkTCJNjYy6zltz7GRUUG3RnFX7acM2w4y8 -PIWmawomDeCTmGCufsYkl4phX5GOZpIJhzbNi5stPvZR1FDUWSi9g/LMKHtThm3Y -Johw1+qRzT65ysCQblrGXnRl11z+o+I= ------END CERTIFICATE----- - -# Issuer: CN=D-TRUST Root Class 3 CA 2 EV 2009 O=D-Trust GmbH -# Subject: CN=D-TRUST Root Class 3 CA 2 EV 2009 O=D-Trust GmbH -# Label: "D-TRUST Root Class 3 CA 2 EV 2009" -# Serial: 623604 -# MD5 Fingerprint: aa:c6:43:2c:5e:2d:cd:c4:34:c0:50:4f:11:02:4f:b6 -# SHA1 Fingerprint: 96:c9:1b:0b:95:b4:10:98:42:fa:d0:d8:22:79:fe:60:fa:b9:16:83 -# SHA256 Fingerprint: ee:c5:49:6b:98:8c:e9:86:25:b9:34:09:2e:ec:29:08:be:d0:b0:f3:16:c2:d4:73:0c:84:ea:f1:f3:d3:48:81 ------BEGIN CERTIFICATE----- -MIIEQzCCAyugAwIBAgIDCYP0MA0GCSqGSIb3DQEBCwUAMFAxCzAJBgNVBAYTAkRF -MRUwEwYDVQQKDAxELVRydXN0IEdtYkgxKjAoBgNVBAMMIUQtVFJVU1QgUm9vdCBD -bGFzcyAzIENBIDIgRVYgMjAwOTAeFw0wOTExMDUwODUwNDZaFw0yOTExMDUwODUw -NDZaMFAxCzAJBgNVBAYTAkRFMRUwEwYDVQQKDAxELVRydXN0IEdtYkgxKjAoBgNV -BAMMIUQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgRVYgMjAwOTCCASIwDQYJKoZI -hvcNAQEBBQADggEPADCCAQoCggEBAJnxhDRwui+3MKCOvXwEz75ivJn9gpfSegpn -ljgJ9hBOlSJzmY3aFS3nBfwZcyK3jpgAvDw9rKFs+9Z5JUut8Mxk2og+KbgPCdM0 -3TP1YtHhzRnp7hhPTFiu4h7WDFsVWtg6uMQYZB7jM7K1iXdODL/ZlGsTl28So/6Z -qQTMFexgaDbtCHu39b+T7WYxg4zGcTSHThfqr4uRjRxWQa4iN1438h3Z0S0NL2lR -p75mpoo6Kr3HGrHhFPC+Oh25z1uxav60sUYgovseO3Dvk5h9jHOW8sXvhXCtKSb8 -HgQ+HKDYD8tSg2J87otTlZCpV6LqYQXY+U3EJ/pure3511H3a6UCAwEAAaOCASQw -ggEgMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFNOUikxiEyoZLsyvcop9Ntea -HNxnMA4GA1UdDwEB/wQEAwIBBjCB3QYDVR0fBIHVMIHSMIGHoIGEoIGBhn9sZGFw -Oi8vZGlyZWN0b3J5LmQtdHJ1c3QubmV0L0NOPUQtVFJVU1QlMjBSb290JTIwQ2xh -c3MlMjAzJTIwQ0ElMjAyJTIwRVYlMjAyMDA5LE89RC1UcnVzdCUyMEdtYkgsQz1E -RT9jZXJ0aWZpY2F0ZXJldm9jYXRpb25saXN0MEagRKBChkBodHRwOi8vd3d3LmQt -dHJ1c3QubmV0L2NybC9kLXRydXN0X3Jvb3RfY2xhc3NfM19jYV8yX2V2XzIwMDku -Y3JsMA0GCSqGSIb3DQEBCwUAA4IBAQA07XtaPKSUiO8aEXUHL7P+PPoeUSbrh/Yp -3uDx1MYkCenBz1UbtDDZzhr+BlGmFaQt77JLvyAoJUnRpjZ3NOhk31KxEcdzes05 -nsKtjHEh8lprr988TlWvsoRlFIm5d8sqMb7Po23Pb0iUMkZv53GMoKaEGTcH8gNF -CSuGdXzfX2lXANtu2KZyIktQ1HWYVt+3GP9DQ1CuekR78HlR10M9p9OB0/DJT7na -xpeG0ILD5EJt/rDiZE4OJudANCa1CInXCGNjOCd1HjPqbqjdn5lPdE2BiYBL3ZqX -KVwvvoFBuYz/6n1gBp7N1z3TLqMVvKjmJuVvw9y4AyHqnxbxLFS1 ------END CERTIFICATE----- - -# Issuer: CN=CA Disig Root R2 O=Disig a.s. -# Subject: CN=CA Disig Root R2 O=Disig a.s. -# Label: "CA Disig Root R2" -# Serial: 10572350602393338211 -# MD5 Fingerprint: 26:01:fb:d8:27:a7:17:9a:45:54:38:1a:43:01:3b:03 -# SHA1 Fingerprint: b5:61:eb:ea:a4:de:e4:25:4b:69:1a:98:a5:57:47:c2:34:c7:d9:71 -# SHA256 Fingerprint: e2:3d:4a:03:6d:7b:70:e9:f5:95:b1:42:20:79:d2:b9:1e:df:bb:1f:b6:51:a0:63:3e:aa:8a:9d:c5:f8:07:03 ------BEGIN CERTIFICATE----- -MIIFaTCCA1GgAwIBAgIJAJK4iNuwisFjMA0GCSqGSIb3DQEBCwUAMFIxCzAJBgNV -BAYTAlNLMRMwEQYDVQQHEwpCcmF0aXNsYXZhMRMwEQYDVQQKEwpEaXNpZyBhLnMu -MRkwFwYDVQQDExBDQSBEaXNpZyBSb290IFIyMB4XDTEyMDcxOTA5MTUzMFoXDTQy -MDcxOTA5MTUzMFowUjELMAkGA1UEBhMCU0sxEzARBgNVBAcTCkJyYXRpc2xhdmEx -EzARBgNVBAoTCkRpc2lnIGEucy4xGTAXBgNVBAMTEENBIERpc2lnIFJvb3QgUjIw -ggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCio8QACdaFXS1tFPbCw3Oe -NcJxVX6B+6tGUODBfEl45qt5WDza/3wcn9iXAng+a0EE6UG9vgMsRfYvZNSrXaNH -PWSb6WiaxswbP7q+sos0Ai6YVRn8jG+qX9pMzk0DIaPY0jSTVpbLTAwAFjxfGs3I -x2ymrdMxp7zo5eFm1tL7A7RBZckQrg4FY8aAamkw/dLukO8NJ9+flXP04SXabBbe -QTg06ov80egEFGEtQX6sx3dOy1FU+16SGBsEWmjGycT6txOgmLcRK7fWV8x8nhfR -yyX+hk4kLlYMeE2eARKmK6cBZW58Yh2EhN/qwGu1pSqVg8NTEQxzHQuyRpDRQjrO -QG6Vrf/GlK1ul4SOfW+eioANSW1z4nuSHsPzwfPrLgVv2RvPN3YEyLRa5Beny912 -H9AZdugsBbPWnDTYltxhh5EF5EQIM8HauQhl1K6yNg3ruji6DOWbnuuNZt2Zz9aJ -QfYEkoopKW1rOhzndX0CcQ7zwOe9yxndnWCywmZgtrEE7snmhrmaZkCo5xHtgUUD -i/ZnWejBBhG93c+AAk9lQHhcR1DIm+YfgXvkRKhbhZri3lrVx/k6RGZL5DJUfORs -nLMOPReisjQS1n6yqEm70XooQL6iFh/f5DcfEXP7kAplQ6INfPgGAVUzfbANuPT1 -rqVCV3w2EYx7XsQDnYx5nQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1Ud -DwEB/wQEAwIBBjAdBgNVHQ4EFgQUtZn4r7CU9eMg1gqtzk5WpC5uQu0wDQYJKoZI -hvcNAQELBQADggIBACYGXnDnZTPIgm7ZnBc6G3pmsgH2eDtpXi/q/075KMOYKmFM -tCQSin1tERT3nLXK5ryeJ45MGcipvXrA1zYObYVybqjGom32+nNjf7xueQgcnYqf -GopTpti72TVVsRHFqQOzVju5hJMiXn7B9hJSi+osZ7z+Nkz1uM/Rs0mSO9MpDpkb -lvdhuDvEK7Z4bLQjb/D907JedR+Zlais9trhxTF7+9FGs9K8Z7RiVLoJ92Owk6Ka -+elSLotgEqv89WBW7xBci8QaQtyDW2QOy7W81k/BfDxujRNt+3vrMNDcTa/F1bal -TFtxyegxvug4BkihGuLq0t4SOVga/4AOgnXmt8kHbA7v/zjxmHHEt38OFdAlab0i -nSvtBfZGR6ztwPDUO+Ls7pZbkBNOHlY667DvlruWIxG68kOGdGSVyCh13x01utI3 -gzhTODY7z2zp+WsO0PsE6E9312UBeIYMej4hYvF/Y3EMyZ9E26gnonW+boE+18Dr -G5gPcFw0sorMwIUY6256s/daoQe/qUKS82Ail+QUoQebTnbAjn39pCXHR+3/H3Os -zMOl6W8KjptlwlCFtaOgUxLMVYdh84GuEEZhvUQhuMI9dM9+JDX6HAcOmz0iyu8x -L4ysEr3vQCj8KWefshNPZiTEUxnpHikV7+ZtsH8tZ/3zbBt1RqPlShfppNcL ------END CERTIFICATE----- - -# Issuer: CN=ACCVRAIZ1 O=ACCV OU=PKIACCV -# Subject: CN=ACCVRAIZ1 O=ACCV OU=PKIACCV -# Label: "ACCVRAIZ1" -# Serial: 6828503384748696800 -# MD5 Fingerprint: d0:a0:5a:ee:05:b6:09:94:21:a1:7d:f1:b2:29:82:02 -# SHA1 Fingerprint: 93:05:7a:88:15:c6:4f:ce:88:2f:fa:91:16:52:28:78:bc:53:64:17 -# SHA256 Fingerprint: 9a:6e:c0:12:e1:a7:da:9d:be:34:19:4d:47:8a:d7:c0:db:18:22:fb:07:1d:f1:29:81:49:6e:d1:04:38:41:13 ------BEGIN CERTIFICATE----- -MIIH0zCCBbugAwIBAgIIXsO3pkN/pOAwDQYJKoZIhvcNAQEFBQAwQjESMBAGA1UE -AwwJQUNDVlJBSVoxMRAwDgYDVQQLDAdQS0lBQ0NWMQ0wCwYDVQQKDARBQ0NWMQsw -CQYDVQQGEwJFUzAeFw0xMTA1MDUwOTM3MzdaFw0zMDEyMzEwOTM3MzdaMEIxEjAQ -BgNVBAMMCUFDQ1ZSQUlaMTEQMA4GA1UECwwHUEtJQUNDVjENMAsGA1UECgwEQUND -VjELMAkGA1UEBhMCRVMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCb -qau/YUqXry+XZpp0X9DZlv3P4uRm7x8fRzPCRKPfmt4ftVTdFXxpNRFvu8gMjmoY -HtiP2Ra8EEg2XPBjs5BaXCQ316PWywlxufEBcoSwfdtNgM3802/J+Nq2DoLSRYWo -G2ioPej0RGy9ocLLA76MPhMAhN9KSMDjIgro6TenGEyxCQ0jVn8ETdkXhBilyNpA -lHPrzg5XPAOBOp0KoVdDaaxXbXmQeOW1tDvYvEyNKKGno6e6Ak4l0Squ7a4DIrhr -IA8wKFSVf+DuzgpmndFALW4ir50awQUZ0m/A8p/4e7MCQvtQqR0tkw8jq8bBD5L/ -0KIV9VMJcRz/RROE5iZe+OCIHAr8Fraocwa48GOEAqDGWuzndN9wrqODJerWx5eH -k6fGioozl2A3ED6XPm4pFdahD9GILBKfb6qkxkLrQaLjlUPTAYVtjrs78yM2x/47 -4KElB0iryYl0/wiPgL/AlmXz7uxLaL2diMMxs0Dx6M/2OLuc5NF/1OVYm3z61PMO -m3WR5LpSLhl+0fXNWhn8ugb2+1KoS5kE3fj5tItQo05iifCHJPqDQsGH+tUtKSpa -cXpkatcnYGMN285J9Y0fkIkyF/hzQ7jSWpOGYdbhdQrqeWZ2iE9x6wQl1gpaepPl -uUsXQA+xtrn13k/c4LOsOxFwYIRKQ26ZIMApcQrAZQIDAQABo4ICyzCCAscwfQYI -KwYBBQUHAQEEcTBvMEwGCCsGAQUFBzAChkBodHRwOi8vd3d3LmFjY3YuZXMvZmls -ZWFkbWluL0FyY2hpdm9zL2NlcnRpZmljYWRvcy9yYWl6YWNjdjEuY3J0MB8GCCsG -AQUFBzABhhNodHRwOi8vb2NzcC5hY2N2LmVzMB0GA1UdDgQWBBTSh7Tj3zcnk1X2 -VuqB5TbMjB4/vTAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFNKHtOPfNyeT -VfZW6oHlNsyMHj+9MIIBcwYDVR0gBIIBajCCAWYwggFiBgRVHSAAMIIBWDCCASIG -CCsGAQUFBwICMIIBFB6CARAAQQB1AHQAbwByAGkAZABhAGQAIABkAGUAIABDAGUA -cgB0AGkAZgBpAGMAYQBjAGkA8wBuACAAUgBhAO0AegAgAGQAZQAgAGwAYQAgAEEA -QwBDAFYAIAAoAEEAZwBlAG4AYwBpAGEAIABkAGUAIABUAGUAYwBuAG8AbABvAGcA -7QBhACAAeQAgAEMAZQByAHQAaQBmAGkAYwBhAGMAaQDzAG4AIABFAGwAZQBjAHQA -cgDzAG4AaQBjAGEALAAgAEMASQBGACAAUQA0ADYAMAAxADEANQA2AEUAKQAuACAA -QwBQAFMAIABlAG4AIABoAHQAdABwADoALwAvAHcAdwB3AC4AYQBjAGMAdgAuAGUA -czAwBggrBgEFBQcCARYkaHR0cDovL3d3dy5hY2N2LmVzL2xlZ2lzbGFjaW9uX2Mu -aHRtMFUGA1UdHwROMEwwSqBIoEaGRGh0dHA6Ly93d3cuYWNjdi5lcy9maWxlYWRt -aW4vQXJjaGl2b3MvY2VydGlmaWNhZG9zL3JhaXphY2N2MV9kZXIuY3JsMA4GA1Ud -DwEB/wQEAwIBBjAXBgNVHREEEDAOgQxhY2N2QGFjY3YuZXMwDQYJKoZIhvcNAQEF -BQADggIBAJcxAp/n/UNnSEQU5CmH7UwoZtCPNdpNYbdKl02125DgBS4OxnnQ8pdp -D70ER9m+27Up2pvZrqmZ1dM8MJP1jaGo/AaNRPTKFpV8M9xii6g3+CfYCS0b78gU -JyCpZET/LtZ1qmxNYEAZSUNUY9rizLpm5U9EelvZaoErQNV/+QEnWCzI7UiRfD+m -AM/EKXMRNt6GGT6d7hmKG9Ww7Y49nCrADdg9ZuM8Db3VlFzi4qc1GwQA9j9ajepD -vV+JHanBsMyZ4k0ACtrJJ1vnE5Bc5PUzolVt3OAJTS+xJlsndQAJxGJ3KQhfnlms -tn6tn1QwIgPBHnFk/vk4CpYY3QIUrCPLBhwepH2NDd4nQeit2hW3sCPdK6jT2iWH -7ehVRE2I9DZ+hJp4rPcOVkkO1jMl1oRQQmwgEh0q1b688nCBpHBgvgW1m54ERL5h -I6zppSSMEYCUWqKiuUnSwdzRp+0xESyeGabu4VXhwOrPDYTkF7eifKXeVSUG7szA -h1xA2syVP1XgNce4hL60Xc16gwFy7ofmXx2utYXGJt/mwZrpHgJHnyqobalbz+xF -d3+YJ5oyXSrjhO7FmGYvliAd3djDJ9ew+f7Zfc3Qn48LFFhRny+Lwzgt3uiP1o2H -pPVWQxaZLPSkVrQ0uGE3ycJYgBugl6H8WY3pEfbRD0tVNEYqi4Y7 ------END CERTIFICATE----- - -# Issuer: CN=TWCA Global Root CA O=TAIWAN-CA OU=Root CA -# Subject: CN=TWCA Global Root CA O=TAIWAN-CA OU=Root CA -# Label: "TWCA Global Root CA" -# Serial: 3262 -# MD5 Fingerprint: f9:03:7e:cf:e6:9e:3c:73:7a:2a:90:07:69:ff:2b:96 -# SHA1 Fingerprint: 9c:bb:48:53:f6:a4:f6:d3:52:a4:e8:32:52:55:60:13:f5:ad:af:65 -# SHA256 Fingerprint: 59:76:90:07:f7:68:5d:0f:cd:50:87:2f:9f:95:d5:75:5a:5b:2b:45:7d:81:f3:69:2b:61:0a:98:67:2f:0e:1b ------BEGIN CERTIFICATE----- -MIIFQTCCAymgAwIBAgICDL4wDQYJKoZIhvcNAQELBQAwUTELMAkGA1UEBhMCVFcx -EjAQBgNVBAoTCVRBSVdBTi1DQTEQMA4GA1UECxMHUm9vdCBDQTEcMBoGA1UEAxMT -VFdDQSBHbG9iYWwgUm9vdCBDQTAeFw0xMjA2MjcwNjI4MzNaFw0zMDEyMzExNTU5 -NTlaMFExCzAJBgNVBAYTAlRXMRIwEAYDVQQKEwlUQUlXQU4tQ0ExEDAOBgNVBAsT -B1Jvb3QgQ0ExHDAaBgNVBAMTE1RXQ0EgR2xvYmFsIFJvb3QgQ0EwggIiMA0GCSqG -SIb3DQEBAQUAA4ICDwAwggIKAoICAQCwBdvI64zEbooh745NnHEKH1Jw7W2CnJfF -10xORUnLQEK1EjRsGcJ0pDFfhQKX7EMzClPSnIyOt7h52yvVavKOZsTuKwEHktSz -0ALfUPZVr2YOy+BHYC8rMjk1Ujoog/h7FsYYuGLWRyWRzvAZEk2tY/XTP3VfKfCh -MBwqoJimFb3u/Rk28OKRQ4/6ytYQJ0lM793B8YVwm8rqqFpD/G2Gb3PpN0Wp8DbH -zIh1HrtsBv+baz4X7GGqcXzGHaL3SekVtTzWoWH1EfcFbx39Eb7QMAfCKbAJTibc -46KokWofwpFFiFzlmLhxpRUZyXx1EcxwdE8tmx2RRP1WKKD+u4ZqyPpcC1jcxkt2 -yKsi2XMPpfRaAok/T54igu6idFMqPVMnaR1sjjIsZAAmY2E2TqNGtz99sy2sbZCi -laLOz9qC5wc0GZbpuCGqKX6mOL6OKUohZnkfs8O1CWfe1tQHRvMq2uYiN2DLgbYP -oA/pyJV/v1WRBXrPPRXAb94JlAGD1zQbzECl8LibZ9WYkTunhHiVJqRaCPgrdLQA -BDzfuBSO6N+pjWxnkjMdwLfS7JLIvgm/LCkFbwJrnu+8vyq8W8BQj0FwcYeyTbcE -qYSjMq+u7msXi7Kx/mzhkIyIqJdIzshNy/MGz19qCkKxHh53L46g5pIOBvwFItIm -4TFRfTLcDwIDAQABoyMwITAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB -/zANBgkqhkiG9w0BAQsFAAOCAgEAXzSBdu+WHdXltdkCY4QWwa6gcFGn90xHNcgL -1yg9iXHZqjNB6hQbbCEAwGxCGX6faVsgQt+i0trEfJdLjbDorMjupWkEmQqSpqsn -LhpNgb+E1HAerUf+/UqdM+DyucRFCCEK2mlpc3INvjT+lIutwx4116KD7+U4x6WF -H6vPNOw/KP4M8VeGTslV9xzU2KV9Bnpv1d8Q34FOIWWxtuEXeZVFBs5fzNxGiWNo -RI2T9GRwoD2dKAXDOXC4Ynsg/eTb6QihuJ49CcdP+yz4k3ZB3lLg4VfSnQO8d57+ -nile98FRYB/e2guyLXW3Q0iT5/Z5xoRdgFlglPx4mI88k1HtQJAH32RjJMtOcQWh -15QaiDLxInQirqWm2BJpTGCjAu4r7NRjkgtevi92a6O2JryPA9gK8kxkRr05YuWW -6zRjESjMlfGt7+/cgFhI6Uu46mWs6fyAtbXIRfmswZ/ZuepiiI7E8UuDEq3mi4TW -nsLrgxifarsbJGAzcMzs9zLzXNl5fe+epP7JI8Mk7hWSsT2RTyaGvWZzJBPqpK5j -wa19hAM8EHiGG3njxPPyBJUgriOCxLM6AGK/5jYk4Ve6xx6QddVfP5VhK8E7zeWz -aGHQRiapIVJpLesux+t3zqY6tQMzT3bR51xUAV3LePTJDL/PEo4XLSNolOer/qmy -KwbQBM0= ------END CERTIFICATE----- - -# Issuer: CN=TeliaSonera Root CA v1 O=TeliaSonera -# Subject: CN=TeliaSonera Root CA v1 O=TeliaSonera -# Label: "TeliaSonera Root CA v1" -# Serial: 199041966741090107964904287217786801558 -# MD5 Fingerprint: 37:41:49:1b:18:56:9a:26:f5:ad:c2:66:fb:40:a5:4c -# SHA1 Fingerprint: 43:13:bb:96:f1:d5:86:9b:c1:4e:6a:92:f6:cf:f6:34:69:87:82:37 -# SHA256 Fingerprint: dd:69:36:fe:21:f8:f0:77:c1:23:a1:a5:21:c1:22:24:f7:22:55:b7:3e:03:a7:26:06:93:e8:a2:4b:0f:a3:89 ------BEGIN CERTIFICATE----- -MIIFODCCAyCgAwIBAgIRAJW+FqD3LkbxezmCcvqLzZYwDQYJKoZIhvcNAQEFBQAw -NzEUMBIGA1UECgwLVGVsaWFTb25lcmExHzAdBgNVBAMMFlRlbGlhU29uZXJhIFJv -b3QgQ0EgdjEwHhcNMDcxMDE4MTIwMDUwWhcNMzIxMDE4MTIwMDUwWjA3MRQwEgYD -VQQKDAtUZWxpYVNvbmVyYTEfMB0GA1UEAwwWVGVsaWFTb25lcmEgUm9vdCBDQSB2 -MTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMK+6yfwIaPzaSZVfp3F -VRaRXP3vIb9TgHot0pGMYzHw7CTww6XScnwQbfQ3t+XmfHnqjLWCi65ItqwA3GV1 -7CpNX8GH9SBlK4GoRz6JI5UwFpB/6FcHSOcZrr9FZ7E3GwYq/t75rH2D+1665I+X -Z75Ljo1kB1c4VWk0Nj0TSO9P4tNmHqTPGrdeNjPUtAa9GAH9d4RQAEX1jF3oI7x+ -/jXh7VB7qTCNGdMJjmhnXb88lxhTuylixcpecsHHltTbLaC0H2kD7OriUPEMPPCs -81Mt8Bz17Ww5OXOAFshSsCPN4D7c3TxHoLs1iuKYaIu+5b9y7tL6pe0S7fyYGKkm -dtwoSxAgHNN/Fnct7W+A90m7UwW7XWjH1Mh1Fj+JWov3F0fUTPHSiXk+TT2YqGHe -Oh7S+F4D4MHJHIzTjU3TlTazN19jY5szFPAtJmtTfImMMsJu7D0hADnJoWjiUIMu -sDor8zagrC/kb2HCUQk5PotTubtn2txTuXZZNp1D5SDgPTJghSJRt8czu90VL6R4 -pgd7gUY2BIbdeTXHlSw7sKMXNeVzH7RcWe/a6hBle3rQf5+ztCo3O3CLm1u5K7fs -slESl1MpWtTwEhDcTwK7EpIvYtQ/aUN8Ddb8WHUBiJ1YFkveupD/RwGJBmr2X7KQ -arMCpgKIv7NHfirZ1fpoeDVNAgMBAAGjPzA9MA8GA1UdEwEB/wQFMAMBAf8wCwYD -VR0PBAQDAgEGMB0GA1UdDgQWBBTwj1k4ALP1j5qWDNXr+nuqF+gTEjANBgkqhkiG -9w0BAQUFAAOCAgEAvuRcYk4k9AwI//DTDGjkk0kiP0Qnb7tt3oNmzqjMDfz1mgbl -dxSR651Be5kqhOX//CHBXfDkH1e3damhXwIm/9fH907eT/j3HEbAek9ALCI18Bmx -0GtnLLCo4MBANzX2hFxc469CeP6nyQ1Q6g2EdvZR74NTxnr/DlZJLo961gzmJ1Tj -TQpgcmLNkQfWpb/ImWvtxBnmq0wROMVvMeJuScg/doAmAyYp4Db29iBT4xdwNBed -Y2gea+zDTYa4EzAvXUYNR0PVG6pZDrlcjQZIrXSHX8f8MVRBE+LHIQ6e4B4N4cB7 -Q4WQxYpYxmUKeFfyxiMPAdkgS94P+5KFdSpcc41teyWRyu5FrgZLAMzTsVlQ2jqI -OylDRl6XK1TOU2+NSueW+r9xDkKLfP0ooNBIytrEgUy7onOTJsjrDNYmiLbAJM+7 -vVvrdX3pCI6GMyx5dwlppYn8s3CQh3aP0yK7Qs69cwsgJirQmz1wHiRszYd2qReW -t88NkvuOGKmYSdGe/mBEciG5Ge3C9THxOUiIkCR1VBatzvT4aRRkOfujuLpwQMcn -HL/EVlP6Y2XQ8xwOFvVrhlhNGNTkDY6lnVuR3HYkUD/GKvvZt5y11ubQ2egZixVx -SK236thZiNSQvxaz2emsWWFUyBy6ysHK4bkgTI86k4mloMy/0/Z1pHWWbVY= ------END CERTIFICATE----- - -# Issuer: CN=E-Tugra Certification Authority O=E-Tu\u011fra EBG Bili\u015fim Teknolojileri ve Hizmetleri A.\u015e. OU=E-Tugra Sertifikasyon Merkezi -# Subject: CN=E-Tugra Certification Authority O=E-Tu\u011fra EBG Bili\u015fim Teknolojileri ve Hizmetleri A.\u015e. OU=E-Tugra Sertifikasyon Merkezi -# Label: "E-Tugra Certification Authority" -# Serial: 7667447206703254355 -# MD5 Fingerprint: b8:a1:03:63:b0:bd:21:71:70:8a:6f:13:3a:bb:79:49 -# SHA1 Fingerprint: 51:c6:e7:08:49:06:6e:f3:92:d4:5c:a0:0d:6d:a3:62:8f:c3:52:39 -# SHA256 Fingerprint: b0:bf:d5:2b:b0:d7:d9:bd:92:bf:5d:4d:c1:3d:a2:55:c0:2c:54:2f:37:83:65:ea:89:39:11:f5:5e:55:f2:3c ------BEGIN CERTIFICATE----- -MIIGSzCCBDOgAwIBAgIIamg+nFGby1MwDQYJKoZIhvcNAQELBQAwgbIxCzAJBgNV -BAYTAlRSMQ8wDQYDVQQHDAZBbmthcmExQDA+BgNVBAoMN0UtVHXEn3JhIEVCRyBC -aWxpxZ9pbSBUZWtub2xvamlsZXJpIHZlIEhpem1ldGxlcmkgQS7Fni4xJjAkBgNV -BAsMHUUtVHVncmEgU2VydGlmaWthc3lvbiBNZXJrZXppMSgwJgYDVQQDDB9FLVR1 -Z3JhIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTEzMDMwNTEyMDk0OFoXDTIz -MDMwMzEyMDk0OFowgbIxCzAJBgNVBAYTAlRSMQ8wDQYDVQQHDAZBbmthcmExQDA+ -BgNVBAoMN0UtVHXEn3JhIEVCRyBCaWxpxZ9pbSBUZWtub2xvamlsZXJpIHZlIEhp -em1ldGxlcmkgQS7Fni4xJjAkBgNVBAsMHUUtVHVncmEgU2VydGlmaWthc3lvbiBN -ZXJrZXppMSgwJgYDVQQDDB9FLVR1Z3JhIENlcnRpZmljYXRpb24gQXV0aG9yaXR5 -MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA4vU/kwVRHoViVF56C/UY -B4Oufq9899SKa6VjQzm5S/fDxmSJPZQuVIBSOTkHS0vdhQd2h8y/L5VMzH2nPbxH -D5hw+IyFHnSOkm0bQNGZDbt1bsipa5rAhDGvykPL6ys06I+XawGb1Q5KCKpbknSF -Q9OArqGIW66z6l7LFpp3RMih9lRozt6Plyu6W0ACDGQXwLWTzeHxE2bODHnv0ZEo -q1+gElIwcxmOj+GMB6LDu0rw6h8VqO4lzKRG+Bsi77MOQ7osJLjFLFzUHPhdZL3D -k14opz8n8Y4e0ypQBaNV2cvnOVPAmJ6MVGKLJrD3fY185MaeZkJVgkfnsliNZvcH -fC425lAcP9tDJMW/hkd5s3kc91r0E+xs+D/iWR+V7kI+ua2oMoVJl0b+SzGPWsut -dEcf6ZG33ygEIqDUD13ieU/qbIWGvaimzuT6w+Gzrt48Ue7LE3wBf4QOXVGUnhMM -ti6lTPk5cDZvlsouDERVxcr6XQKj39ZkjFqzAQqptQpHF//vkUAqjqFGOjGY5RH8 -zLtJVor8udBhmm9lbObDyz51Sf6Pp+KJxWfXnUYTTjF2OySznhFlhqt/7x3U+Lzn -rFpct1pHXFXOVbQicVtbC/DP3KBhZOqp12gKY6fgDT+gr9Oq0n7vUaDmUStVkhUX -U8u3Zg5mTPj5dUyQ5xJwx0UCAwEAAaNjMGEwHQYDVR0OBBYEFC7j27JJ0JxUeVz6 -Jyr+zE7S6E5UMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAULuPbsknQnFR5 -XPonKv7MTtLoTlQwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBCwUAA4ICAQAF -Nzr0TbdF4kV1JI+2d1LoHNgQk2Xz8lkGpD4eKexd0dCrfOAKkEh47U6YA5n+KGCR -HTAduGN8qOY1tfrTYXbm1gdLymmasoR6d5NFFxWfJNCYExL/u6Au/U5Mh/jOXKqY -GwXgAEZKgoClM4so3O0409/lPun++1ndYYRP0lSWE2ETPo+Aab6TR7U1Q9Jauz1c -77NCR807VRMGsAnb/WP2OogKmW9+4c4bU2pEZiNRCHu8W1Ki/QY3OEBhj0qWuJA3 -+GbHeJAAFS6LrVE1Uweoa2iu+U48BybNCAVwzDk/dr2l02cmAYamU9JgO3xDf1WK -vJUawSg5TB9D0pH0clmKuVb8P7Sd2nCcdlqMQ1DujjByTd//SffGqWfZbawCEeI6 -FiWnWAjLb1NBnEg4R2gz0dfHj9R0IdTDBZB6/86WiLEVKV0jq9BgoRJP3vQXzTLl -yb/IQ639Lo7xr+L0mPoSHyDYwKcMhcWQ9DstliaxLL5Mq+ux0orJ23gTDx4JnW2P -AJ8C2sH6H3p6CcRK5ogql5+Ji/03X186zjhZhkuvcQu02PJwT58yE+Owp1fl2tpD -y4Q08ijE6m30Ku/Ba3ba+367hTzSU8JNvnHhRdH9I2cNE3X7z2VnIp2usAnRCf8d -NL/+I5c30jn6PQ0GC7TbO6Orb1wdtn7os4I07QZcJA== ------END CERTIFICATE----- - -# Issuer: CN=T-TeleSec GlobalRoot Class 2 O=T-Systems Enterprise Services GmbH OU=T-Systems Trust Center -# Subject: CN=T-TeleSec GlobalRoot Class 2 O=T-Systems Enterprise Services GmbH OU=T-Systems Trust Center -# Label: "T-TeleSec GlobalRoot Class 2" -# Serial: 1 -# MD5 Fingerprint: 2b:9b:9e:e4:7b:6c:1f:00:72:1a:cc:c1:77:79:df:6a -# SHA1 Fingerprint: 59:0d:2d:7d:88:4f:40:2e:61:7e:a5:62:32:17:65:cf:17:d8:94:e9 -# SHA256 Fingerprint: 91:e2:f5:78:8d:58:10:eb:a7:ba:58:73:7d:e1:54:8a:8e:ca:cd:01:45:98:bc:0b:14:3e:04:1b:17:05:25:52 ------BEGIN CERTIFICATE----- -MIIDwzCCAqugAwIBAgIBATANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UEBhMCREUx -KzApBgNVBAoMIlQtU3lzdGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAd -BgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBDZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNl -YyBHbG9iYWxSb290IENsYXNzIDIwHhcNMDgxMDAxMTA0MDE0WhcNMzMxMDAxMjM1 -OTU5WjCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoMIlQtU3lzdGVtcyBFbnRlcnBy -aXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBDZW50 -ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDIwggEiMA0G -CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCqX9obX+hzkeXaXPSi5kfl82hVYAUd -AqSzm1nzHoqvNK38DcLZSBnuaY/JIPwhqgcZ7bBcrGXHX+0CfHt8LRvWurmAwhiC -FoT6ZrAIxlQjgeTNuUk/9k9uN0goOA/FvudocP05l03Sx5iRUKrERLMjfTlH6VJi -1hKTXrcxlkIF+3anHqP1wvzpesVsqXFP6st4vGCvx9702cu+fjOlbpSD8DT6Iavq -jnKgP6TeMFvvhk1qlVtDRKgQFRzlAVfFmPHmBiiRqiDFt1MmUUOyCxGVWOHAD3bZ -wI18gfNycJ5v/hqO2V81xrJvNHy+SE/iWjnX2J14np+GPgNeGYtEotXHAgMBAAGj -QjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBS/ -WSA2AHmgoCJrjNXyYdK4LMuCSjANBgkqhkiG9w0BAQsFAAOCAQEAMQOiYQsfdOhy -NsZt+U2e+iKo4YFWz827n+qrkRk4r6p8FU3ztqONpfSO9kSpp+ghla0+AGIWiPAC -uvxhI+YzmzB6azZie60EI4RYZeLbK4rnJVM3YlNfvNoBYimipidx5joifsFvHZVw -IEoHNN/q/xWA5brXethbdXwFeilHfkCoMRN3zUA7tFFHei4R40cR3p1m0IvVVGb6 -g1XqfMIpiRvpb7PO4gWEyS8+eIVibslfwXhjdFjASBgMmTnrpMwatXlajRWc2BQN -9noHV8cigwUtPJslJj0Ys6lDfMjIq2SPDqO/nBudMNva0Bkuqjzx+zOAduTNrRlP -BSeOE6Fuwg== ------END CERTIFICATE----- - -# Issuer: CN=Atos TrustedRoot 2011 O=Atos -# Subject: CN=Atos TrustedRoot 2011 O=Atos -# Label: "Atos TrustedRoot 2011" -# Serial: 6643877497813316402 -# MD5 Fingerprint: ae:b9:c4:32:4b:ac:7f:5d:66:cc:77:94:bb:2a:77:56 -# SHA1 Fingerprint: 2b:b1:f5:3e:55:0c:1d:c5:f1:d4:e6:b7:6a:46:4b:55:06:02:ac:21 -# SHA256 Fingerprint: f3:56:be:a2:44:b7:a9:1e:b3:5d:53:ca:9a:d7:86:4a:ce:01:8e:2d:35:d5:f8:f9:6d:df:68:a6:f4:1a:a4:74 ------BEGIN CERTIFICATE----- -MIIDdzCCAl+gAwIBAgIIXDPLYixfszIwDQYJKoZIhvcNAQELBQAwPDEeMBwGA1UE -AwwVQXRvcyBUcnVzdGVkUm9vdCAyMDExMQ0wCwYDVQQKDARBdG9zMQswCQYDVQQG -EwJERTAeFw0xMTA3MDcxNDU4MzBaFw0zMDEyMzEyMzU5NTlaMDwxHjAcBgNVBAMM -FUF0b3MgVHJ1c3RlZFJvb3QgMjAxMTENMAsGA1UECgwEQXRvczELMAkGA1UEBhMC -REUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCVhTuXbyo7LjvPpvMp -Nb7PGKw+qtn4TaA+Gke5vJrf8v7MPkfoepbCJI419KkM/IL9bcFyYie96mvr54rM -VD6QUM+A1JX76LWC1BTFtqlVJVfbsVD2sGBkWXppzwO3bw2+yj5vdHLqqjAqc2K+ -SZFhyBH+DgMq92og3AIVDV4VavzjgsG1xZ1kCWyjWZgHJ8cblithdHFsQ/H3NYkQ -4J7sVaE3IqKHBAUsR320HLliKWYoyrfhk/WklAOZuXCFteZI6o1Q/NnezG8HDt0L -cp2AMBYHlT8oDv3FdU9T1nSatCQujgKRz3bFmx5VdJx4IbHwLfELn8LVlhgf8FQi -eowHAgMBAAGjfTB7MB0GA1UdDgQWBBSnpQaxLKYJYO7Rl+lwrrw7GWzbITAPBgNV -HRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFKelBrEspglg7tGX6XCuvDsZbNshMBgG -A1UdIAQRMA8wDQYLKwYBBAGwLQMEAQEwDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3 -DQEBCwUAA4IBAQAmdzTblEiGKkGdLD4GkGDEjKwLVLgfuXvTBznk+j57sj1O7Z8j -vZfza1zv7v1Apt+hk6EKhqzvINB5Ab149xnYJDE0BAGmuhWawyfc2E8PzBhj/5kP -DpFrdRbhIfzYJsdHt6bPWHJxfrrhTZVHO8mvbaG0weyJ9rQPOLXiZNwlz6bb65pc -maHFCN795trV1lpFDMS3wrUU77QR/w4VtfX128a961qn8FYiqTxlVMYVqL2Gns2D -lmh6cYGJ4Qvh6hEbaAjMaZ7snkGeRDImeuKHCnE96+RapNLbxc3G3mB/ufNPRJLv -KrcYPqcZ2Qt9sTdBQrC6YB3y/gkRsPCHe6ed ------END CERTIFICATE----- - -# Issuer: CN=QuoVadis Root CA 1 G3 O=QuoVadis Limited -# Subject: CN=QuoVadis Root CA 1 G3 O=QuoVadis Limited -# Label: "QuoVadis Root CA 1 G3" -# Serial: 687049649626669250736271037606554624078720034195 -# MD5 Fingerprint: a4:bc:5b:3f:fe:37:9a:fa:64:f0:e2:fa:05:3d:0b:ab -# SHA1 Fingerprint: 1b:8e:ea:57:96:29:1a:c9:39:ea:b8:0a:81:1a:73:73:c0:93:79:67 -# SHA256 Fingerprint: 8a:86:6f:d1:b2:76:b5:7e:57:8e:92:1c:65:82:8a:2b:ed:58:e9:f2:f2:88:05:41:34:b7:f1:f4:bf:c9:cc:74 ------BEGIN CERTIFICATE----- -MIIFYDCCA0igAwIBAgIUeFhfLq0sGUvjNwc1NBMotZbUZZMwDQYJKoZIhvcNAQEL -BQAwSDELMAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxHjAc -BgNVBAMTFVF1b1ZhZGlzIFJvb3QgQ0EgMSBHMzAeFw0xMjAxMTIxNzI3NDRaFw00 -MjAxMTIxNzI3NDRaMEgxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM -aW1pdGVkMR4wHAYDVQQDExVRdW9WYWRpcyBSb290IENBIDEgRzMwggIiMA0GCSqG -SIb3DQEBAQUAA4ICDwAwggIKAoICAQCgvlAQjunybEC0BJyFuTHK3C3kEakEPBtV -wedYMB0ktMPvhd6MLOHBPd+C5k+tR4ds7FtJwUrVu4/sh6x/gpqG7D0DmVIB0jWe -rNrwU8lmPNSsAgHaJNM7qAJGr6Qc4/hzWHa39g6QDbXwz8z6+cZM5cOGMAqNF341 -68Xfuw6cwI2H44g4hWf6Pser4BOcBRiYz5P1sZK0/CPTz9XEJ0ngnjybCKOLXSoh -4Pw5qlPafX7PGglTvF0FBM+hSo+LdoINofjSxxR3W5A2B4GbPgb6Ul5jxaYA/qXp -UhtStZI5cgMJYr2wYBZupt0lwgNm3fME0UDiTouG9G/lg6AnhF4EwfWQvTA9xO+o -abw4m6SkltFi2mnAAZauy8RRNOoMqv8hjlmPSlzkYZqn0ukqeI1RPToV7qJZjqlc -3sX5kCLliEVx3ZGZbHqfPT2YfF72vhZooF6uCyP8Wg+qInYtyaEQHeTTRCOQiJ/G -KubX9ZqzWB4vMIkIG1SitZgj7Ah3HJVdYdHLiZxfokqRmu8hqkkWCKi9YSgxyXSt -hfbZxbGL0eUQMk1fiyA6PEkfM4VZDdvLCXVDaXP7a3F98N/ETH3Goy7IlXnLc6KO -Tk0k+17kBL5yG6YnLUlamXrXXAkgt3+UuU/xDRxeiEIbEbfnkduebPRq34wGmAOt -zCjvpUfzUwIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIB -BjAdBgNVHQ4EFgQUo5fW816iEOGrRZ88F2Q87gFwnMwwDQYJKoZIhvcNAQELBQAD -ggIBABj6W3X8PnrHX3fHyt/PX8MSxEBd1DKquGrX1RUVRpgjpeaQWxiZTOOtQqOC -MTaIzen7xASWSIsBx40Bz1szBpZGZnQdT+3Btrm0DWHMY37XLneMlhwqI2hrhVd2 -cDMT/uFPpiN3GPoajOi9ZcnPP/TJF9zrx7zABC4tRi9pZsMbj/7sPtPKlL92CiUN -qXsCHKnQO18LwIE6PWThv6ctTr1NxNgpxiIY0MWscgKCP6o6ojoilzHdCGPDdRS5 -YCgtW2jgFqlmgiNR9etT2DGbe+m3nUvriBbP+V04ikkwj+3x6xn0dxoxGE1nVGwv -b2X52z3sIexe9PSLymBlVNFxZPT5pqOBMzYzcfCkeF9OrYMh3jRJjehZrJ3ydlo2 -8hP0r+AJx2EqbPfgna67hkooby7utHnNkDPDs3b69fBsnQGQ+p6Q9pxyz0fawx/k -NSBT8lTR32GDpgLiJTjehTItXnOQUl1CxM49S+H5GYQd1aJQzEH7QRTDvdbJWqNj -ZgKAvQU6O0ec7AAmTPWIUb+oI38YB7AL7YsmoWTTYUrrXJ/es69nA7Mf3W1daWhp -q1467HxpvMc7hU6eFbm0FU/DlXpY18ls6Wy58yljXrQs8C097Vpl4KlbQMJImYFt -nh8GKjwStIsPm6Ik8KaN1nrgS7ZklmOVhMJKzRwuJIczYOXD ------END CERTIFICATE----- - -# Issuer: CN=QuoVadis Root CA 2 G3 O=QuoVadis Limited -# Subject: CN=QuoVadis Root CA 2 G3 O=QuoVadis Limited -# Label: "QuoVadis Root CA 2 G3" -# Serial: 390156079458959257446133169266079962026824725800 -# MD5 Fingerprint: af:0c:86:6e:bf:40:2d:7f:0b:3e:12:50:ba:12:3d:06 -# SHA1 Fingerprint: 09:3c:61:f3:8b:8b:dc:7d:55:df:75:38:02:05:00:e1:25:f5:c8:36 -# SHA256 Fingerprint: 8f:e4:fb:0a:f9:3a:4d:0d:67:db:0b:eb:b2:3e:37:c7:1b:f3:25:dc:bc:dd:24:0e:a0:4d:af:58:b4:7e:18:40 ------BEGIN CERTIFICATE----- -MIIFYDCCA0igAwIBAgIURFc0JFuBiZs18s64KztbpybwdSgwDQYJKoZIhvcNAQEL -BQAwSDELMAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxHjAc -BgNVBAMTFVF1b1ZhZGlzIFJvb3QgQ0EgMiBHMzAeFw0xMjAxMTIxODU5MzJaFw00 -MjAxMTIxODU5MzJaMEgxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM -aW1pdGVkMR4wHAYDVQQDExVRdW9WYWRpcyBSb290IENBIDIgRzMwggIiMA0GCSqG -SIb3DQEBAQUAA4ICDwAwggIKAoICAQChriWyARjcV4g/Ruv5r+LrI3HimtFhZiFf -qq8nUeVuGxbULX1QsFN3vXg6YOJkApt8hpvWGo6t/x8Vf9WVHhLL5hSEBMHfNrMW -n4rjyduYNM7YMxcoRvynyfDStNVNCXJJ+fKH46nafaF9a7I6JaltUkSs+L5u+9ym -c5GQYaYDFCDy54ejiK2toIz/pgslUiXnFgHVy7g1gQyjO/Dh4fxaXc6AcW34Sas+ -O7q414AB+6XrW7PFXmAqMaCvN+ggOp+oMiwMzAkd056OXbxMmO7FGmh77FOm6RQ1 -o9/NgJ8MSPsc9PG/Srj61YxxSscfrf5BmrODXfKEVu+lV0POKa2Mq1W/xPtbAd0j -IaFYAI7D0GoT7RPjEiuA3GfmlbLNHiJuKvhB1PLKFAeNilUSxmn1uIZoL1NesNKq -IcGY5jDjZ1XHm26sGahVpkUG0CM62+tlXSoREfA7T8pt9DTEceT/AFr2XK4jYIVz -8eQQsSWu1ZK7E8EM4DnatDlXtas1qnIhO4M15zHfeiFuuDIIfR0ykRVKYnLP43eh -vNURG3YBZwjgQQvD6xVu+KQZ2aKrr+InUlYrAoosFCT5v0ICvybIxo/gbjh9Uy3l -7ZizlWNof/k19N+IxWA1ksB8aRxhlRbQ694Lrz4EEEVlWFA4r0jyWbYW8jwNkALG -cC4BrTwV1wIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIB -BjAdBgNVHQ4EFgQU7edvdlq/YOxJW8ald7tyFnGbxD0wDQYJKoZIhvcNAQELBQAD -ggIBAJHfgD9DCX5xwvfrs4iP4VGyvD11+ShdyLyZm3tdquXK4Qr36LLTn91nMX66 -AarHakE7kNQIXLJgapDwyM4DYvmL7ftuKtwGTTwpD4kWilhMSA/ohGHqPHKmd+RC -roijQ1h5fq7KpVMNqT1wvSAZYaRsOPxDMuHBR//47PERIjKWnML2W2mWeyAMQ0Ga -W/ZZGYjeVYg3UQt4XAoeo0L9x52ID8DyeAIkVJOviYeIyUqAHerQbj5hLja7NQ4n -lv1mNDthcnPxFlxHBlRJAHpYErAK74X9sbgzdWqTHBLmYF5vHX/JHyPLhGGfHoJE -+V+tYlUkmlKY7VHnoX6XOuYvHxHaU4AshZ6rNRDbIl9qxV6XU/IyAgkwo1jwDQHV -csaxfGl7w/U2Rcxhbl5MlMVerugOXou/983g7aEOGzPuVBj+D77vfoRrQ+NwmNtd -dbINWQeFFSM51vHfqSYP1kjHs6Yi9TM3WpVHn3u6GBVv/9YUZINJ0gpnIdsPNWNg -KCLjsZWDzYWm3S8P52dSbrsvhXz1SnPnxT7AvSESBT/8twNJAlvIJebiVDj1eYeM -HVOyToV7BjjHLPj4sHKNJeV3UvQDHEimUF+IIDBu8oJDqz2XhOdT+yHBTw8imoa4 -WSr2Rz0ZiC3oheGe7IUIarFsNMkd7EgrO3jtZsSOeWmD3n+M ------END CERTIFICATE----- - -# Issuer: CN=QuoVadis Root CA 3 G3 O=QuoVadis Limited -# Subject: CN=QuoVadis Root CA 3 G3 O=QuoVadis Limited -# Label: "QuoVadis Root CA 3 G3" -# Serial: 268090761170461462463995952157327242137089239581 -# MD5 Fingerprint: df:7d:b9:ad:54:6f:68:a1:df:89:57:03:97:43:b0:d7 -# SHA1 Fingerprint: 48:12:bd:92:3c:a8:c4:39:06:e7:30:6d:27:96:e6:a4:cf:22:2e:7d -# SHA256 Fingerprint: 88:ef:81:de:20:2e:b0:18:45:2e:43:f8:64:72:5c:ea:5f:bd:1f:c2:d9:d2:05:73:07:09:c5:d8:b8:69:0f:46 ------BEGIN CERTIFICATE----- -MIIFYDCCA0igAwIBAgIULvWbAiin23r/1aOp7r0DoM8Sah0wDQYJKoZIhvcNAQEL -BQAwSDELMAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxHjAc -BgNVBAMTFVF1b1ZhZGlzIFJvb3QgQ0EgMyBHMzAeFw0xMjAxMTIyMDI2MzJaFw00 -MjAxMTIyMDI2MzJaMEgxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM -aW1pdGVkMR4wHAYDVQQDExVRdW9WYWRpcyBSb290IENBIDMgRzMwggIiMA0GCSqG -SIb3DQEBAQUAA4ICDwAwggIKAoICAQCzyw4QZ47qFJenMioKVjZ/aEzHs286IxSR -/xl/pcqs7rN2nXrpixurazHb+gtTTK/FpRp5PIpM/6zfJd5O2YIyC0TeytuMrKNu -FoM7pmRLMon7FhY4futD4tN0SsJiCnMK3UmzV9KwCoWdcTzeo8vAMvMBOSBDGzXR -U7Ox7sWTaYI+FrUoRqHe6okJ7UO4BUaKhvVZR74bbwEhELn9qdIoyhA5CcoTNs+c -ra1AdHkrAj80//ogaX3T7mH1urPnMNA3I4ZyYUUpSFlob3emLoG+B01vr87ERROR -FHAGjx+f+IdpsQ7vw4kZ6+ocYfx6bIrc1gMLnia6Et3UVDmrJqMz6nWB2i3ND0/k -A9HvFZcba5DFApCTZgIhsUfei5pKgLlVj7WiL8DWM2fafsSntARE60f75li59wzw -eyuxwHApw0BiLTtIadwjPEjrewl5qW3aqDCYz4ByA4imW0aucnl8CAMhZa634Ryl -sSqiMd5mBPfAdOhx3v89WcyWJhKLhZVXGqtrdQtEPREoPHtht+KPZ0/l7DxMYIBp -VzgeAVuNVejH38DMdyM0SXV89pgR6y3e7UEuFAUCf+D+IOs15xGsIs5XPd7JMG0Q -A4XN8f+MFrXBsj6IbGB/kE+V9/YtrQE5BwT6dYB9v0lQ7e/JxHwc64B+27bQ3RP+ -ydOc17KXqQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIB -BjAdBgNVHQ4EFgQUxhfQvKjqAkPyGwaZXSuQILnXnOQwDQYJKoZIhvcNAQELBQAD -ggIBADRh2Va1EodVTd2jNTFGu6QHcrxfYWLopfsLN7E8trP6KZ1/AvWkyaiTt3px -KGmPc+FSkNrVvjrlt3ZqVoAh313m6Tqe5T72omnHKgqwGEfcIHB9UqM+WXzBusnI -FUBhynLWcKzSt/Ac5IYp8M7vaGPQtSCKFWGafoaYtMnCdvvMujAWzKNhxnQT5Wvv -oxXqA/4Ti2Tk08HS6IT7SdEQTXlm66r99I0xHnAUrdzeZxNMgRVhvLfZkXdxGYFg -u/BYpbWcC/ePIlUnwEsBbTuZDdQdm2NnL9DuDcpmvJRPpq3t/O5jrFc/ZSXPsoaP -0Aj/uHYUbt7lJ+yreLVTubY/6CD50qi+YUbKh4yE8/nxoGibIh6BJpsQBJFxwAYf -3KDTuVan45gtf4Od34wrnDKOMpTwATwiKp9Dwi7DmDkHOHv8XgBCH/MyJnmDhPbl -8MFREsALHgQjDFSlTC9JxUrRtm5gDWv8a4uFJGS3iQ6rJUdbPM9+Sb3H6QrG2vd+ -DhcI00iX0HGS8A85PjRqHH3Y8iKuu2n0M7SmSFXRDw4m6Oy2Cy2nhTXN/VnIn9HN -PlopNLk9hM6xZdRZkZFWdSHBd575euFgndOtBBj0fOtek49TSiIp+EgrPk2GrFt/ -ywaZWWDYWGWVjUTR939+J399roD1B0y2PpxxVJkES/1Y+Zj0 ------END CERTIFICATE----- - -# Issuer: CN=DigiCert Assured ID Root G2 O=DigiCert Inc OU=www.digicert.com -# Subject: CN=DigiCert Assured ID Root G2 O=DigiCert Inc OU=www.digicert.com -# Label: "DigiCert Assured ID Root G2" -# Serial: 15385348160840213938643033620894905419 -# MD5 Fingerprint: 92:38:b9:f8:63:24:82:65:2c:57:33:e6:fe:81:8f:9d -# SHA1 Fingerprint: a1:4b:48:d9:43:ee:0a:0e:40:90:4f:3c:e0:a4:c0:91:93:51:5d:3f -# SHA256 Fingerprint: 7d:05:eb:b6:82:33:9f:8c:94:51:ee:09:4e:eb:fe:fa:79:53:a1:14:ed:b2:f4:49:49:45:2f:ab:7d:2f:c1:85 ------BEGIN CERTIFICATE----- -MIIDljCCAn6gAwIBAgIQC5McOtY5Z+pnI7/Dr5r0SzANBgkqhkiG9w0BAQsFADBl -MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 -d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJv -b3QgRzIwHhcNMTMwODAxMTIwMDAwWhcNMzgwMTE1MTIwMDAwWjBlMQswCQYDVQQG -EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNl -cnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzIwggEi -MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDZ5ygvUj82ckmIkzTz+GoeMVSA -n61UQbVH35ao1K+ALbkKz3X9iaV9JPrjIgwrvJUXCzO/GU1BBpAAvQxNEP4Htecc -biJVMWWXvdMX0h5i89vqbFCMP4QMls+3ywPgym2hFEwbid3tALBSfK+RbLE4E9Hp -EgjAALAcKxHad3A2m67OeYfcgnDmCXRwVWmvo2ifv922ebPynXApVfSr/5Vh88lA -bx3RvpO704gqu52/clpWcTs/1PPRCv4o76Pu2ZmvA9OPYLfykqGxvYmJHzDNw6Yu -YjOuFgJ3RFrngQo8p0Quebg/BLxcoIfhG69Rjs3sLPr4/m3wOnyqi+RnlTGNAgMB -AAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQW -BBTOw0q5mVXyuNtgv6l+vVa1lzan1jANBgkqhkiG9w0BAQsFAAOCAQEAyqVVjOPI -QW5pJ6d1Ee88hjZv0p3GeDgdaZaikmkuOGybfQTUiaWxMTeKySHMq2zNixya1r9I -0jJmwYrA8y8678Dj1JGG0VDjA9tzd29KOVPt3ibHtX2vK0LRdWLjSisCx1BL4Gni -lmwORGYQRI+tBev4eaymG+g3NJ1TyWGqolKvSnAWhsI6yLETcDbYz+70CjTVW0z9 -B5yiutkBclzzTcHdDrEcDcRjvq30FPuJ7KJBDkzMyFdA0G4Dqs0MjomZmWzwPDCv -ON9vvKO+KSAnq3T/EyJ43pdSVR6DtVQgA+6uwE9W3jfMw3+qBCe703e4YtsXfJwo -IhNzbM8m9Yop5w== ------END CERTIFICATE----- - -# Issuer: CN=DigiCert Assured ID Root G3 O=DigiCert Inc OU=www.digicert.com -# Subject: CN=DigiCert Assured ID Root G3 O=DigiCert Inc OU=www.digicert.com -# Label: "DigiCert Assured ID Root G3" -# Serial: 15459312981008553731928384953135426796 -# MD5 Fingerprint: 7c:7f:65:31:0c:81:df:8d:ba:3e:99:e2:5c:ad:6e:fb -# SHA1 Fingerprint: f5:17:a2:4f:9a:48:c6:c9:f8:a2:00:26:9f:dc:0f:48:2c:ab:30:89 -# SHA256 Fingerprint: 7e:37:cb:8b:4c:47:09:0c:ab:36:55:1b:a6:f4:5d:b8:40:68:0f:ba:16:6a:95:2d:b1:00:71:7f:43:05:3f:c2 ------BEGIN CERTIFICATE----- -MIICRjCCAc2gAwIBAgIQC6Fa+h3foLVJRK/NJKBs7DAKBggqhkjOPQQDAzBlMQsw -CQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cu -ZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3Qg -RzMwHhcNMTMwODAxMTIwMDAwWhcNMzgwMTE1MTIwMDAwWjBlMQswCQYDVQQGEwJV -UzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQu -Y29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzMwdjAQBgcq -hkjOPQIBBgUrgQQAIgNiAAQZ57ysRGXtzbg/WPuNsVepRC0FFfLvC/8QdJ+1YlJf -Zn4f5dwbRXkLzMZTCp2NXQLZqVneAlr2lSoOjThKiknGvMYDOAdfVdp+CW7if17Q -RSAPWXYQ1qAk8C3eNvJsKTmjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/ -BAQDAgGGMB0GA1UdDgQWBBTL0L2p4ZgFUaFNN6KDec6NHSrkhDAKBggqhkjOPQQD -AwNnADBkAjAlpIFFAmsSS3V0T8gj43DydXLefInwz5FyYZ5eEJJZVrmDxxDnOOlY -JjZ91eQ0hjkCMHw2U/Aw5WJjOpnitqM7mzT6HtoQknFekROn3aRukswy1vUhZscv -6pZjamVFkpUBtA== ------END CERTIFICATE----- - -# Issuer: CN=DigiCert Global Root G2 O=DigiCert Inc OU=www.digicert.com -# Subject: CN=DigiCert Global Root G2 O=DigiCert Inc OU=www.digicert.com -# Label: "DigiCert Global Root G2" -# Serial: 4293743540046975378534879503202253541 -# MD5 Fingerprint: e4:a6:8a:c8:54:ac:52:42:46:0a:fd:72:48:1b:2a:44 -# SHA1 Fingerprint: df:3c:24:f9:bf:d6:66:76:1b:26:80:73:fe:06:d1:cc:8d:4f:82:a4 -# SHA256 Fingerprint: cb:3c:cb:b7:60:31:e5:e0:13:8f:8d:d3:9a:23:f9:de:47:ff:c3:5e:43:c1:14:4c:ea:27:d4:6a:5a:b1:cb:5f ------BEGIN CERTIFICATE----- -MIIDjjCCAnagAwIBAgIQAzrx5qcRqaC7KGSxHQn65TANBgkqhkiG9w0BAQsFADBh -MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 -d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBH -MjAeFw0xMzA4MDExMjAwMDBaFw0zODAxMTUxMjAwMDBaMGExCzAJBgNVBAYTAlVT -MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j -b20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IEcyMIIBIjANBgkqhkiG -9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuzfNNNx7a8myaJCtSnX/RrohCgiN9RlUyfuI -2/Ou8jqJkTx65qsGGmvPrC3oXgkkRLpimn7Wo6h+4FR1IAWsULecYxpsMNzaHxmx -1x7e/dfgy5SDN67sH0NO3Xss0r0upS/kqbitOtSZpLYl6ZtrAGCSYP9PIUkY92eQ -q2EGnI/yuum06ZIya7XzV+hdG82MHauVBJVJ8zUtluNJbd134/tJS7SsVQepj5Wz -tCO7TG1F8PapspUwtP1MVYwnSlcUfIKdzXOS0xZKBgyMUNGPHgm+F6HmIcr9g+UQ -vIOlCsRnKPZzFBQ9RnbDhxSJITRNrw9FDKZJobq7nMWxM4MphQIDAQABo0IwQDAP -BgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjAdBgNVHQ4EFgQUTiJUIBiV -5uNu5g/6+rkS7QYXjzkwDQYJKoZIhvcNAQELBQADggEBAGBnKJRvDkhj6zHd6mcY -1Yl9PMWLSn/pvtsrF9+wX3N3KjITOYFnQoQj8kVnNeyIv/iPsGEMNKSuIEyExtv4 -NeF22d+mQrvHRAiGfzZ0JFrabA0UWTW98kndth/Jsw1HKj2ZL7tcu7XUIOGZX1NG -Fdtom/DzMNU+MeKNhJ7jitralj41E6Vf8PlwUHBHQRFXGU7Aj64GxJUTFy8bJZ91 -8rGOmaFvE7FBcf6IKshPECBV1/MUReXgRPTqh5Uykw7+U0b6LJ3/iyK5S9kJRaTe -pLiaWN0bfVKfjllDiIGknibVb63dDcY3fe0Dkhvld1927jyNxF1WW6LZZm6zNTfl -MrY= ------END CERTIFICATE----- - -# Issuer: CN=DigiCert Global Root G3 O=DigiCert Inc OU=www.digicert.com -# Subject: CN=DigiCert Global Root G3 O=DigiCert Inc OU=www.digicert.com -# Label: "DigiCert Global Root G3" -# Serial: 7089244469030293291760083333884364146 -# MD5 Fingerprint: f5:5d:a4:50:a5:fb:28:7e:1e:0f:0d:cc:96:57:56:ca -# SHA1 Fingerprint: 7e:04:de:89:6a:3e:66:6d:00:e6:87:d3:3f:fa:d9:3b:e8:3d:34:9e -# SHA256 Fingerprint: 31:ad:66:48:f8:10:41:38:c7:38:f3:9e:a4:32:01:33:39:3e:3a:18:cc:02:29:6e:f9:7c:2a:c9:ef:67:31:d0 ------BEGIN CERTIFICATE----- -MIICPzCCAcWgAwIBAgIQBVVWvPJepDU1w6QP1atFcjAKBggqhkjOPQQDAzBhMQsw -CQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cu -ZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBHMzAe -Fw0xMzA4MDExMjAwMDBaFw0zODAxMTUxMjAwMDBaMGExCzAJBgNVBAYTAlVTMRUw -EwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20x -IDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IEczMHYwEAYHKoZIzj0CAQYF -K4EEACIDYgAE3afZu4q4C/sLfyHS8L6+c/MzXRq8NOrexpu80JX28MzQC7phW1FG -fp4tn+6OYwwX7Adw9c+ELkCDnOg/QW07rdOkFFk2eJ0DQ+4QE2xy3q6Ip6FrtUPO -Z9wj/wMco+I+o0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjAd -BgNVHQ4EFgQUs9tIpPmhxdiuNkHMEWNpYim8S8YwCgYIKoZIzj0EAwMDaAAwZQIx -AK288mw/EkrRLTnDCgmXc/SINoyIJ7vmiI1Qhadj+Z4y3maTD/HMsQmP3Wyr+mt/ -oAIwOWZbwmSNuJ5Q3KjVSaLtx9zRSX8XAbjIho9OjIgrqJqpisXRAL34VOKa5Vt8 -sycX ------END CERTIFICATE----- - -# Issuer: CN=DigiCert Trusted Root G4 O=DigiCert Inc OU=www.digicert.com -# Subject: CN=DigiCert Trusted Root G4 O=DigiCert Inc OU=www.digicert.com -# Label: "DigiCert Trusted Root G4" -# Serial: 7451500558977370777930084869016614236 -# MD5 Fingerprint: 78:f2:fc:aa:60:1f:2f:b4:eb:c9:37:ba:53:2e:75:49 -# SHA1 Fingerprint: dd:fb:16:cd:49:31:c9:73:a2:03:7d:3f:c8:3a:4d:7d:77:5d:05:e4 -# SHA256 Fingerprint: 55:2f:7b:dc:f1:a7:af:9e:6c:e6:72:01:7f:4f:12:ab:f7:72:40:c7:8e:76:1a:c2:03:d1:d9:d2:0a:c8:99:88 ------BEGIN CERTIFICATE----- -MIIFkDCCA3igAwIBAgIQBZsbV56OITLiOQe9p3d1XDANBgkqhkiG9w0BAQwFADBi -MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 -d3cuZGlnaWNlcnQuY29tMSEwHwYDVQQDExhEaWdpQ2VydCBUcnVzdGVkIFJvb3Qg -RzQwHhcNMTMwODAxMTIwMDAwWhcNMzgwMTE1MTIwMDAwWjBiMQswCQYDVQQGEwJV -UzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQu -Y29tMSEwHwYDVQQDExhEaWdpQ2VydCBUcnVzdGVkIFJvb3QgRzQwggIiMA0GCSqG -SIb3DQEBAQUAA4ICDwAwggIKAoICAQC/5pBzaN675F1KPDAiMGkz7MKnJS7JIT3y -ithZwuEppz1Yq3aaza57G4QNxDAf8xukOBbrVsaXbR2rsnnyyhHS5F/WBTxSD1If -xp4VpX6+n6lXFllVcq9ok3DCsrp1mWpzMpTREEQQLt+C8weE5nQ7bXHiLQwb7iDV -ySAdYyktzuxeTsiT+CFhmzTrBcZe7FsavOvJz82sNEBfsXpm7nfISKhmV1efVFiO -DCu3T6cw2Vbuyntd463JT17lNecxy9qTXtyOj4DatpGYQJB5w3jHtrHEtWoYOAMQ -jdjUN6QuBX2I9YI+EJFwq1WCQTLX2wRzKm6RAXwhTNS8rhsDdV14Ztk6MUSaM0C/ -CNdaSaTC5qmgZ92kJ7yhTzm1EVgX9yRcRo9k98FpiHaYdj1ZXUJ2h4mXaXpI8OCi -EhtmmnTK3kse5w5jrubU75KSOp493ADkRSWJtppEGSt+wJS00mFt6zPZxd9LBADM -fRyVw4/3IbKyEbe7f/LVjHAsQWCqsWMYRJUadmJ+9oCw++hkpjPRiQfhvbfmQ6QY -uKZ3AeEPlAwhHbJUKSWJbOUOUlFHdL4mrLZBdd56rF+NP8m800ERElvlEFDrMcXK -chYiCd98THU/Y+whX8QgUWtvsauGi0/C1kVfnSD8oR7FwI+isX4KJpn15GkvmB0t -9dmpsh3lGwIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIB -hjAdBgNVHQ4EFgQU7NfjgtJxXWRM3y5nP+e6mK4cD08wDQYJKoZIhvcNAQEMBQAD -ggIBALth2X2pbL4XxJEbw6GiAI3jZGgPVs93rnD5/ZpKmbnJeFwMDF/k5hQpVgs2 -SV1EY+CtnJYYZhsjDT156W1r1lT40jzBQ0CuHVD1UvyQO7uYmWlrx8GnqGikJ9yd -+SeuMIW59mdNOj6PWTkiU0TryF0Dyu1Qen1iIQqAyHNm0aAFYF/opbSnr6j3bTWc -fFqK1qI4mfN4i/RN0iAL3gTujJtHgXINwBQy7zBZLq7gcfJW5GqXb5JQbZaNaHqa -sjYUegbyJLkJEVDXCLG4iXqEI2FCKeWjzaIgQdfRnGTZ6iahixTXTBmyUEFxPT9N -cCOGDErcgdLMMpSEDQgJlxxPwO5rIHQw0uA5NBCFIRUBCOhVMt5xSdkoF1BN5r5N -0XWs0Mr7QbhDparTwwVETyw2m+L64kW4I1NsBm9nVX9GtUw/bihaeSbSpKhil9Ie -4u1Ki7wb/UdKDd9nZn6yW0HQO+T0O/QEY+nvwlQAUaCKKsnOeMzV6ocEGLPOr0mI -r/OSmbaz5mEP0oUA51Aa5BuVnRmhuZyxm7EAHu/QD09CbMkKvO5D+jpxpchNJqU1 -/YldvIViHTLSoCtU7ZpXwdv6EM8Zt4tKG48BtieVU+i2iW1bvGjUI+iLUaJW+fCm -gKDWHrO8Dw9TdSmq6hN35N6MgSGtBxBHEa2HPQfRdbzP82Z+ ------END CERTIFICATE----- - -# Issuer: CN=COMODO RSA Certification Authority O=COMODO CA Limited -# Subject: CN=COMODO RSA Certification Authority O=COMODO CA Limited -# Label: "COMODO RSA Certification Authority" -# Serial: 101909084537582093308941363524873193117 -# MD5 Fingerprint: 1b:31:b0:71:40:36:cc:14:36:91:ad:c4:3e:fd:ec:18 -# SHA1 Fingerprint: af:e5:d2:44:a8:d1:19:42:30:ff:47:9f:e2:f8:97:bb:cd:7a:8c:b4 -# SHA256 Fingerprint: 52:f0:e1:c4:e5:8e:c6:29:29:1b:60:31:7f:07:46:71:b8:5d:7e:a8:0d:5b:07:27:34:63:53:4b:32:b4:02:34 ------BEGIN CERTIFICATE----- -MIIF2DCCA8CgAwIBAgIQTKr5yttjb+Af907YWwOGnTANBgkqhkiG9w0BAQwFADCB -hTELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4G -A1UEBxMHU2FsZm9yZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNV -BAMTIkNPTU9ETyBSU0EgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMTAwMTE5 -MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBhTELMAkGA1UEBhMCR0IxGzAZBgNVBAgT -EkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UEChMR -Q09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBSU0EgQ2VydGlmaWNh -dGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCR -6FSS0gpWsawNJN3Fz0RndJkrN6N9I3AAcbxT38T6KhKPS38QVr2fcHK3YX/JSw8X -pz3jsARh7v8Rl8f0hj4K+j5c+ZPmNHrZFGvnnLOFoIJ6dq9xkNfs/Q36nGz637CC -9BR++b7Epi9Pf5l/tfxnQ3K9DADWietrLNPtj5gcFKt+5eNu/Nio5JIk2kNrYrhV -/erBvGy2i/MOjZrkm2xpmfh4SDBF1a3hDTxFYPwyllEnvGfDyi62a+pGx8cgoLEf -Zd5ICLqkTqnyg0Y3hOvozIFIQ2dOciqbXL1MGyiKXCJ7tKuY2e7gUYPDCUZObT6Z -+pUX2nwzV0E8jVHtC7ZcryxjGt9XyD+86V3Em69FmeKjWiS0uqlWPc9vqv9JWL7w -qP/0uK3pN/u6uPQLOvnoQ0IeidiEyxPx2bvhiWC4jChWrBQdnArncevPDt09qZah -SL0896+1DSJMwBGB7FY79tOi4lu3sgQiUpWAk2nojkxl8ZEDLXB0AuqLZxUpaVIC -u9ffUGpVRr+goyhhf3DQw6KqLCGqR84onAZFdr+CGCe01a60y1Dma/RMhnEw6abf -Fobg2P9A3fvQQoh/ozM6LlweQRGBY84YcWsr7KaKtzFcOmpH4MN5WdYgGq/yapiq -crxXStJLnbsQ/LBMQeXtHT1eKJ2czL+zUdqnR+WEUwIDAQABo0IwQDAdBgNVHQ4E -FgQUu69+Aj36pvE8hI6t7jiY7NkyMtQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB -/wQFMAMBAf8wDQYJKoZIhvcNAQEMBQADggIBAArx1UaEt65Ru2yyTUEUAJNMnMvl -wFTPoCWOAvn9sKIN9SCYPBMtrFaisNZ+EZLpLrqeLppysb0ZRGxhNaKatBYSaVqM -4dc+pBroLwP0rmEdEBsqpIt6xf4FpuHA1sj+nq6PK7o9mfjYcwlYRm6mnPTXJ9OV -2jeDchzTc+CiR5kDOF3VSXkAKRzH7JsgHAckaVd4sjn8OoSgtZx8jb8uk2Intzna -FxiuvTwJaP+EmzzV1gsD41eeFPfR60/IvYcjt7ZJQ3mFXLrrkguhxuhoqEwWsRqZ -CuhTLJK7oQkYdQxlqHvLI7cawiiFwxv/0Cti76R7CZGYZ4wUAc1oBmpjIXUDgIiK -boHGhfKppC3n9KUkEEeDys30jXlYsQab5xoq2Z0B15R97QNKyvDb6KkBPvVWmcke -jkk9u+UJueBPSZI9FoJAzMxZxuY67RIuaTxslbH9qh17f4a+Hg4yRvv7E491f0yL -S0Zj/gA0QHDBw7mh3aZw4gSzQbzpgJHqZJx64SIDqZxubw5lT2yHh17zbqD5daWb -QOhTsiedSrnAdyGN/4fy3ryM7xfft0kL0fJuMAsaDk527RH89elWsn2/x20Kk4yl -0MC2Hb46TpSi125sC8KKfPog88Tk5c0NqMuRkrF8hey1FGlmDoLnzc7ILaZRfyHB -NVOFBkpdn627G190 ------END CERTIFICATE----- - -# Issuer: CN=USERTrust RSA Certification Authority O=The USERTRUST Network -# Subject: CN=USERTrust RSA Certification Authority O=The USERTRUST Network -# Label: "USERTrust RSA Certification Authority" -# Serial: 2645093764781058787591871645665788717 -# MD5 Fingerprint: 1b:fe:69:d1:91:b7:19:33:a3:72:a8:0f:e1:55:e5:b5 -# SHA1 Fingerprint: 2b:8f:1b:57:33:0d:bb:a2:d0:7a:6c:51:f7:0e:e9:0d:da:b9:ad:8e -# SHA256 Fingerprint: e7:93:c9:b0:2f:d8:aa:13:e2:1c:31:22:8a:cc:b0:81:19:64:3b:74:9c:89:89:64:b1:74:6d:46:c3:d4:cb:d2 ------BEGIN CERTIFICATE----- -MIIF3jCCA8agAwIBAgIQAf1tMPyjylGoG7xkDjUDLTANBgkqhkiG9w0BAQwFADCB -iDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0pl -cnNleSBDaXR5MR4wHAYDVQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNV -BAMTJVVTRVJUcnVzdCBSU0EgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMTAw -MjAxMDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBiDELMAkGA1UEBhMCVVMxEzARBgNV -BAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNleSBDaXR5MR4wHAYDVQQKExVU -aGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMTJVVTRVJUcnVzdCBSU0EgQ2Vy -dGlmaWNhdGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIK -AoICAQCAEmUXNg7D2wiz0KxXDXbtzSfTTK1Qg2HiqiBNCS1kCdzOiZ/MPans9s/B -3PHTsdZ7NygRK0faOca8Ohm0X6a9fZ2jY0K2dvKpOyuR+OJv0OwWIJAJPuLodMkY -tJHUYmTbf6MG8YgYapAiPLz+E/CHFHv25B+O1ORRxhFnRghRy4YUVD+8M/5+bJz/ -Fp0YvVGONaanZshyZ9shZrHUm3gDwFA66Mzw3LyeTP6vBZY1H1dat//O+T23LLb2 -VN3I5xI6Ta5MirdcmrS3ID3KfyI0rn47aGYBROcBTkZTmzNg95S+UzeQc0PzMsNT -79uq/nROacdrjGCT3sTHDN/hMq7MkztReJVni+49Vv4M0GkPGw/zJSZrM233bkf6 -c0Plfg6lZrEpfDKEY1WJxA3Bk1QwGROs0303p+tdOmw1XNtB1xLaqUkL39iAigmT -Yo61Zs8liM2EuLE/pDkP2QKe6xJMlXzzawWpXhaDzLhn4ugTncxbgtNMs+1b/97l -c6wjOy0AvzVVdAlJ2ElYGn+SNuZRkg7zJn0cTRe8yexDJtC/QV9AqURE9JnnV4ee -UB9XVKg+/XRjL7FQZQnmWEIuQxpMtPAlR1n6BB6T1CZGSlCBst6+eLf8ZxXhyVeE -Hg9j1uliutZfVS7qXMYoCAQlObgOK6nyTJccBz8NUvXt7y+CDwIDAQABo0IwQDAd -BgNVHQ4EFgQUU3m/WqorSs9UgOHYm8Cd8rIDZsswDgYDVR0PAQH/BAQDAgEGMA8G -A1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEMBQADggIBAFzUfA3P9wF9QZllDHPF -Up/L+M+ZBn8b2kMVn54CVVeWFPFSPCeHlCjtHzoBN6J2/FNQwISbxmtOuowhT6KO -VWKR82kV2LyI48SqC/3vqOlLVSoGIG1VeCkZ7l8wXEskEVX/JJpuXior7gtNn3/3 -ATiUFJVDBwn7YKnuHKsSjKCaXqeYalltiz8I+8jRRa8YFWSQEg9zKC7F4iRO/Fjs -8PRF/iKz6y+O0tlFYQXBl2+odnKPi4w2r78NBc5xjeambx9spnFixdjQg3IM8WcR -iQycE0xyNN+81XHfqnHd4blsjDwSXWXavVcStkNr/+XeTWYRUc+ZruwXtuhxkYze -Sf7dNXGiFSeUHM9h4ya7b6NnJSFd5t0dCy5oGzuCr+yDZ4XUmFF0sbmZgIn/f3gZ -XHlKYC6SQK5MNyosycdiyA5d9zZbyuAlJQG03RoHnHcAP9Dc1ew91Pq7P8yF1m9/ -qS3fuQL39ZeatTXaw2ewh0qpKJ4jjv9cJ2vhsE/zB+4ALtRZh8tSQZXq9EfX7mRB -VXyNWQKV3WKdwrnuWih0hKWbt5DHDAff9Yk2dDLWKMGwsAvgnEzDHNb842m1R0aB -L6KCq9NjRHDEjf8tM7qtj3u1cIiuPhnPQCjY/MiQu12ZIvVS5ljFH4gxQ+6IHdfG -jjxDah2nGN59PRbxYvnKkKj9 ------END CERTIFICATE----- - -# Issuer: CN=USERTrust ECC Certification Authority O=The USERTRUST Network -# Subject: CN=USERTrust ECC Certification Authority O=The USERTRUST Network -# Label: "USERTrust ECC Certification Authority" -# Serial: 123013823720199481456569720443997572134 -# MD5 Fingerprint: fa:68:bc:d9:b5:7f:ad:fd:c9:1d:06:83:28:cc:24:c1 -# SHA1 Fingerprint: d1:cb:ca:5d:b2:d5:2a:7f:69:3b:67:4d:e5:f0:5a:1d:0c:95:7d:f0 -# SHA256 Fingerprint: 4f:f4:60:d5:4b:9c:86:da:bf:bc:fc:57:12:e0:40:0d:2b:ed:3f:bc:4d:4f:bd:aa:86:e0:6a:dc:d2:a9:ad:7a ------BEGIN CERTIFICATE----- -MIICjzCCAhWgAwIBAgIQXIuZxVqUxdJxVt7NiYDMJjAKBggqhkjOPQQDAzCBiDEL -MAkGA1UEBhMCVVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNl -eSBDaXR5MR4wHAYDVQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMT -JVVTRVJUcnVzdCBFQ0MgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMTAwMjAx -MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBiDELMAkGA1UEBhMCVVMxEzARBgNVBAgT -Ck5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNleSBDaXR5MR4wHAYDVQQKExVUaGUg -VVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMTJVVTRVJUcnVzdCBFQ0MgQ2VydGlm -aWNhdGlvbiBBdXRob3JpdHkwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQarFRaqflo -I+d61SRvU8Za2EurxtW20eZzca7dnNYMYf3boIkDuAUU7FfO7l0/4iGzzvfUinng -o4N+LZfQYcTxmdwlkWOrfzCjtHDix6EznPO/LlxTsV+zfTJ/ijTjeXmjQjBAMB0G -A1UdDgQWBBQ64QmG1M8ZwpZ2dEl23OA1xmNjmjAOBgNVHQ8BAf8EBAMCAQYwDwYD -VR0TAQH/BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjA2Z6EWCNzklwBBHU6+4WMB -zzuqQhFkoJ2UOQIReVx7Hfpkue4WQrO/isIJxOzksU0CMQDpKmFHjFJKS04YcPbW -RNZu9YO6bVi9JNlWSOrvxKJGgYhqOkbRqZtNyWHa0V1Xahg= ------END CERTIFICATE----- - -# Issuer: CN=GlobalSign O=GlobalSign OU=GlobalSign ECC Root CA - R4 -# Subject: CN=GlobalSign O=GlobalSign OU=GlobalSign ECC Root CA - R4 -# Label: "GlobalSign ECC Root CA - R4" -# Serial: 14367148294922964480859022125800977897474 -# MD5 Fingerprint: 20:f0:27:68:d1:7e:a0:9d:0e:e6:2a:ca:df:5c:89:8e -# SHA1 Fingerprint: 69:69:56:2e:40:80:f4:24:a1:e7:19:9f:14:ba:f3:ee:58:ab:6a:bb -# SHA256 Fingerprint: be:c9:49:11:c2:95:56:76:db:6c:0a:55:09:86:d7:6e:3b:a0:05:66:7c:44:2c:97:62:b4:fb:b7:73:de:22:8c ------BEGIN CERTIFICATE----- -MIIB4TCCAYegAwIBAgIRKjikHJYKBN5CsiilC+g0mAIwCgYIKoZIzj0EAwIwUDEk -MCIGA1UECxMbR2xvYmFsU2lnbiBFQ0MgUm9vdCBDQSAtIFI0MRMwEQYDVQQKEwpH -bG9iYWxTaWduMRMwEQYDVQQDEwpHbG9iYWxTaWduMB4XDTEyMTExMzAwMDAwMFoX -DTM4MDExOTAzMTQwN1owUDEkMCIGA1UECxMbR2xvYmFsU2lnbiBFQ0MgUm9vdCBD -QSAtIFI0MRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQDEwpHbG9iYWxTaWdu -MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEuMZ5049sJQ6fLjkZHAOkrprlOQcJ -FspjsbmG+IpXwVfOQvpzofdlQv8ewQCybnMO/8ch5RikqtlxP6jUuc6MHaNCMEAw -DgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFFSwe61F -uOJAf/sKbvu+M8k8o4TVMAoGCCqGSM49BAMCA0gAMEUCIQDckqGgE6bPA7DmxCGX -kPoUVy0D7O48027KqGx2vKLeuwIgJ6iFJzWbVsaj8kfSt24bAgAXqmemFZHe+pTs -ewv4n4Q= ------END CERTIFICATE----- - -# Issuer: CN=GlobalSign O=GlobalSign OU=GlobalSign ECC Root CA - R5 -# Subject: CN=GlobalSign O=GlobalSign OU=GlobalSign ECC Root CA - R5 -# Label: "GlobalSign ECC Root CA - R5" -# Serial: 32785792099990507226680698011560947931244 -# MD5 Fingerprint: 9f:ad:3b:1c:02:1e:8a:ba:17:74:38:81:0c:a2:bc:08 -# SHA1 Fingerprint: 1f:24:c6:30:cd:a4:18:ef:20:69:ff:ad:4f:dd:5f:46:3a:1b:69:aa -# SHA256 Fingerprint: 17:9f:bc:14:8a:3d:d0:0f:d2:4e:a1:34:58:cc:43:bf:a7:f5:9c:81:82:d7:83:a5:13:f6:eb:ec:10:0c:89:24 ------BEGIN CERTIFICATE----- -MIICHjCCAaSgAwIBAgIRYFlJ4CYuu1X5CneKcflK2GwwCgYIKoZIzj0EAwMwUDEk -MCIGA1UECxMbR2xvYmFsU2lnbiBFQ0MgUm9vdCBDQSAtIFI1MRMwEQYDVQQKEwpH -bG9iYWxTaWduMRMwEQYDVQQDEwpHbG9iYWxTaWduMB4XDTEyMTExMzAwMDAwMFoX -DTM4MDExOTAzMTQwN1owUDEkMCIGA1UECxMbR2xvYmFsU2lnbiBFQ0MgUm9vdCBD -QSAtIFI1MRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQDEwpHbG9iYWxTaWdu -MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAER0UOlvt9Xb/pOdEh+J8LttV7HpI6SFkc -8GIxLcB6KP4ap1yztsyX50XUWPrRd21DosCHZTQKH3rd6zwzocWdTaRvQZU4f8ke -hOvRnkmSh5SHDDqFSmafnVmTTZdhBoZKo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYD -VR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUPeYpSJvqB8ohREom3m7e0oPQn1kwCgYI -KoZIzj0EAwMDaAAwZQIxAOVpEslu28YxuglB4Zf4+/2a4n0Sye18ZNPLBSWLVtmg -515dTguDnFt2KaAJJiFqYgIwcdK1j1zqO+F4CYWodZI7yFz9SO8NdCKoCOJuxUnO -xwy8p2Fp8fc74SrL+SvzZpA3 ------END CERTIFICATE----- - -# Issuer: CN=Staat der Nederlanden Root CA - G3 O=Staat der Nederlanden -# Subject: CN=Staat der Nederlanden Root CA - G3 O=Staat der Nederlanden -# Label: "Staat der Nederlanden Root CA - G3" -# Serial: 10003001 -# MD5 Fingerprint: 0b:46:67:07:db:10:2f:19:8c:35:50:60:d1:0b:f4:37 -# SHA1 Fingerprint: d8:eb:6b:41:51:92:59:e0:f3:e7:85:00:c0:3d:b6:88:97:c9:ee:fc -# SHA256 Fingerprint: 3c:4f:b0:b9:5a:b8:b3:00:32:f4:32:b8:6f:53:5f:e1:72:c1:85:d0:fd:39:86:58:37:cf:36:18:7f:a6:f4:28 ------BEGIN CERTIFICATE----- -MIIFdDCCA1ygAwIBAgIEAJiiOTANBgkqhkiG9w0BAQsFADBaMQswCQYDVQQGEwJO -TDEeMBwGA1UECgwVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSswKQYDVQQDDCJTdGFh -dCBkZXIgTmVkZXJsYW5kZW4gUm9vdCBDQSAtIEczMB4XDTEzMTExNDExMjg0MloX -DTI4MTExMzIzMDAwMFowWjELMAkGA1UEBhMCTkwxHjAcBgNVBAoMFVN0YWF0IGRl -ciBOZWRlcmxhbmRlbjErMCkGA1UEAwwiU3RhYXQgZGVyIE5lZGVybGFuZGVuIFJv -b3QgQ0EgLSBHMzCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAL4yolQP -cPssXFnrbMSkUeiFKrPMSjTysF/zDsccPVMeiAho2G89rcKezIJnByeHaHE6n3WW -IkYFsO2tx1ueKt6c/DrGlaf1F2cY5y9JCAxcz+bMNO14+1Cx3Gsy8KL+tjzk7FqX -xz8ecAgwoNzFs21v0IJyEavSgWhZghe3eJJg+szeP4TrjTgzkApyI/o1zCZxMdFy -KJLZWyNtZrVtB0LrpjPOktvA9mxjeM3KTj215VKb8b475lRgsGYeCasH/lSJEULR -9yS6YHgamPfJEf0WwTUaVHXvQ9Plrk7O53vDxk5hUUurmkVLoR9BvUhTFXFkC4az -5S6+zqQbwSmEorXLCCN2QyIkHxcE1G6cxvx/K2Ya7Irl1s9N9WMJtxU51nus6+N8 -6U78dULI7ViVDAZCopz35HCz33JvWjdAidiFpNfxC95DGdRKWCyMijmev4SH8RY7 -Ngzp07TKbBlBUgmhHbBqv4LvcFEhMtwFdozL92TkA1CvjJFnq8Xy7ljY3r735zHP -bMk7ccHViLVlvMDoFxcHErVc0qsgk7TmgoNwNsXNo42ti+yjwUOH5kPiNL6VizXt -BznaqB16nzaeErAMZRKQFWDZJkBE41ZgpRDUajz9QdwOWke275dhdU/Z/seyHdTt -XUmzqWrLZoQT1Vyg3N9udwbRcXXIV2+vD3dbAgMBAAGjQjBAMA8GA1UdEwEB/wQF -MAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBRUrfrHkleuyjWcLhL75Lpd -INyUVzANBgkqhkiG9w0BAQsFAAOCAgEAMJmdBTLIXg47mAE6iqTnB/d6+Oea31BD -U5cqPco8R5gu4RV78ZLzYdqQJRZlwJ9UXQ4DO1t3ApyEtg2YXzTdO2PCwyiBwpwp -LiniyMMB8jPqKqrMCQj3ZWfGzd/TtiunvczRDnBfuCPRy5FOCvTIeuXZYzbB1N/8 -Ipf3YF3qKS9Ysr1YvY2WTxB1v0h7PVGHoTx0IsL8B3+A3MSs/mrBcDCw6Y5p4ixp -gZQJut3+TcCDjJRYwEYgr5wfAvg1VUkvRtTA8KCWAg8zxXHzniN9lLf9OtMJgwYh -/WA9rjLA0u6NpvDntIJ8CsxwyXmA+P5M9zWEGYox+wrZ13+b8KKaa8MFSu1BYBQw -0aoRQm7TIwIEC8Zl3d1Sd9qBa7Ko+gE4uZbqKmxnl4mUnrzhVNXkanjvSr0rmj1A -fsbAddJu+2gw7OyLnflJNZoaLNmzlTnVHpL3prllL+U9bTpITAjc5CgSKL59NVzq -4BZ+Extq1z7XnvwtdbLBFNUjA9tbbws+eC8N3jONFrdI54OagQ97wUNNVQQXOEpR -1VmiiXTTn74eS9fGbbeIJG9gkaSChVtWQbzQRKtqE77RLFi3EjNYsjdj3BP1lB0/ -QFH1T/U67cjF68IeHRaVesd+QnGTbksVtzDfqu1XhUisHWrdOWnk4Xl4vs4Fv6EM -94B7IWcnMFk= ------END CERTIFICATE----- - -# Issuer: CN=Staat der Nederlanden EV Root CA O=Staat der Nederlanden -# Subject: CN=Staat der Nederlanden EV Root CA O=Staat der Nederlanden -# Label: "Staat der Nederlanden EV Root CA" -# Serial: 10000013 -# MD5 Fingerprint: fc:06:af:7b:e8:1a:f1:9a:b4:e8:d2:70:1f:c0:f5:ba -# SHA1 Fingerprint: 76:e2:7e:c1:4f:db:82:c1:c0:a6:75:b5:05:be:3d:29:b4:ed:db:bb -# SHA256 Fingerprint: 4d:24:91:41:4c:fe:95:67:46:ec:4c:ef:a6:cf:6f:72:e2:8a:13:29:43:2f:9d:8a:90:7a:c4:cb:5d:ad:c1:5a ------BEGIN CERTIFICATE----- -MIIFcDCCA1igAwIBAgIEAJiWjTANBgkqhkiG9w0BAQsFADBYMQswCQYDVQQGEwJO -TDEeMBwGA1UECgwVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSkwJwYDVQQDDCBTdGFh -dCBkZXIgTmVkZXJsYW5kZW4gRVYgUm9vdCBDQTAeFw0xMDEyMDgxMTE5MjlaFw0y -MjEyMDgxMTEwMjhaMFgxCzAJBgNVBAYTAk5MMR4wHAYDVQQKDBVTdGFhdCBkZXIg -TmVkZXJsYW5kZW4xKTAnBgNVBAMMIFN0YWF0IGRlciBOZWRlcmxhbmRlbiBFViBS -b290IENBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA48d+ifkkSzrS -M4M1LGns3Amk41GoJSt5uAg94JG6hIXGhaTK5skuU6TJJB79VWZxXSzFYGgEt9nC -UiY4iKTWO0Cmws0/zZiTs1QUWJZV1VD+hq2kY39ch/aO5ieSZxeSAgMs3NZmdO3d -Z//BYY1jTw+bbRcwJu+r0h8QoPnFfxZpgQNH7R5ojXKhTbImxrpsX23Wr9GxE46p -rfNeaXUmGD5BKyF/7otdBwadQ8QpCiv8Kj6GyzyDOvnJDdrFmeK8eEEzduG/L13l -pJhQDBXd4Pqcfzho0LKmeqfRMb1+ilgnQ7O6M5HTp5gVXJrm0w912fxBmJc+qiXb -j5IusHsMX/FjqTf5m3VpTCgmJdrV8hJwRVXj33NeN/UhbJCONVrJ0yPr08C+eKxC -KFhmpUZtcALXEPlLVPxdhkqHz3/KRawRWrUgUY0viEeXOcDPusBCAUCZSCELa6fS -/ZbV0b5GnUngC6agIk440ME8MLxwjyx1zNDFjFE7PZQIZCZhfbnDZY8UnCHQqv0X -cgOPvZuM5l5Tnrmd74K74bzickFbIZTTRTeU0d8JOV3nI6qaHcptqAqGhYqCvkIH -1vI4gnPah1vlPNOePqc7nvQDs/nxfRN0Av+7oeX6AHkcpmZBiFxgV6YuCcS6/ZrP -px9Aw7vMWgpVSzs4dlG4Y4uElBbmVvMCAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB -/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFP6rAJCYniT8qcwaivsnuL8wbqg7 -MA0GCSqGSIb3DQEBCwUAA4ICAQDPdyxuVr5Os7aEAJSrR8kN0nbHhp8dB9O2tLsI -eK9p0gtJ3jPFrK3CiAJ9Brc1AsFgyb/E6JTe1NOpEyVa/m6irn0F3H3zbPB+po3u -2dfOWBfoqSmuc0iH55vKbimhZF8ZE/euBhD/UcabTVUlT5OZEAFTdfETzsemQUHS -v4ilf0X8rLiltTMMgsT7B/Zq5SWEXwbKwYY5EdtYzXc7LMJMD16a4/CrPmEbUCTC -wPTxGfARKbalGAKb12NMcIxHowNDXLldRqANb/9Zjr7dn3LDWyvfjFvO5QxGbJKy -CqNMVEIYFRIYvdr8unRu/8G2oGTYqV9Vrp9canaW2HNnh/tNf1zuacpzEPuKqf2e -vTY4SUmH9A4U8OmHuD+nT3pajnnUk+S7aFKErGzp85hwVXIy+TSrK0m1zSBi5Dp6 -Z2Orltxtrpfs/J92VoguZs9btsmksNcFuuEnL5O7Jiqik7Ab846+HUCjuTaPPoIa -Gl6I6lD4WeKDRikL40Rc4ZW2aZCaFG+XroHPaO+Zmr615+F/+PoTRxZMzG0IQOeL -eG9QgkRQP2YGiqtDhFZKDyAthg710tvSeopLzaXoTvFeJiUBWSOgftL2fiFX1ye8 -FVdMpEbB4IMeDExNH08GGeL5qPQ6gqGyeUN51q1veieQA6TqJIc/2b3Z6fJfUEkc -7uzXLg== ------END CERTIFICATE----- - -# Issuer: CN=IdenTrust Commercial Root CA 1 O=IdenTrust -# Subject: CN=IdenTrust Commercial Root CA 1 O=IdenTrust -# Label: "IdenTrust Commercial Root CA 1" -# Serial: 13298821034946342390520003877796839426 -# MD5 Fingerprint: b3:3e:77:73:75:ee:a0:d3:e3:7e:49:63:49:59:bb:c7 -# SHA1 Fingerprint: df:71:7e:aa:4a:d9:4e:c9:55:84:99:60:2d:48:de:5f:bc:f0:3a:25 -# SHA256 Fingerprint: 5d:56:49:9b:e4:d2:e0:8b:cf:ca:d0:8a:3e:38:72:3d:50:50:3b:de:70:69:48:e4:2f:55:60:30:19:e5:28:ae ------BEGIN CERTIFICATE----- -MIIFYDCCA0igAwIBAgIQCgFCgAAAAUUjyES1AAAAAjANBgkqhkiG9w0BAQsFADBK -MQswCQYDVQQGEwJVUzESMBAGA1UEChMJSWRlblRydXN0MScwJQYDVQQDEx5JZGVu -VHJ1c3QgQ29tbWVyY2lhbCBSb290IENBIDEwHhcNMTQwMTE2MTgxMjIzWhcNMzQw -MTE2MTgxMjIzWjBKMQswCQYDVQQGEwJVUzESMBAGA1UEChMJSWRlblRydXN0MScw -JQYDVQQDEx5JZGVuVHJ1c3QgQ29tbWVyY2lhbCBSb290IENBIDEwggIiMA0GCSqG -SIb3DQEBAQUAA4ICDwAwggIKAoICAQCnUBneP5k91DNG8W9RYYKyqU+PZ4ldhNlT -3Qwo2dfw/66VQ3KZ+bVdfIrBQuExUHTRgQ18zZshq0PirK1ehm7zCYofWjK9ouuU -+ehcCuz/mNKvcbO0U59Oh++SvL3sTzIwiEsXXlfEU8L2ApeN2WIrvyQfYo3fw7gp -S0l4PJNgiCL8mdo2yMKi1CxUAGc1bnO/AljwpN3lsKImesrgNqUZFvX9t++uP0D1 -bVoE/c40yiTcdCMbXTMTEl3EASX2MN0CXZ/g1Ue9tOsbobtJSdifWwLziuQkkORi -T0/Br4sOdBeo0XKIanoBScy0RnnGF7HamB4HWfp1IYVl3ZBWzvurpWCdxJ35UrCL -vYf5jysjCiN2O/cz4ckA82n5S6LgTrx+kzmEB/dEcH7+B1rlsazRGMzyNeVJSQjK -Vsk9+w8YfYs7wRPCTY/JTw436R+hDmrfYi7LNQZReSzIJTj0+kuniVyc0uMNOYZK -dHzVWYfCP04MXFL0PfdSgvHqo6z9STQaKPNBiDoT7uje/5kdX7rL6B7yuVBgwDHT -c+XvvqDtMwt0viAgxGds8AgDelWAf0ZOlqf0Hj7h9tgJ4TNkK2PXMl6f+cB7D3hv -l7yTmvmcEpB4eoCHFddydJxVdHixuuFucAS6T6C6aMN7/zHwcz09lCqxC0EOoP5N -iGVreTO01wIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB -/zAdBgNVHQ4EFgQU7UQZwNPwBovupHu+QucmVMiONnYwDQYJKoZIhvcNAQELBQAD -ggIBAA2ukDL2pkt8RHYZYR4nKM1eVO8lvOMIkPkp165oCOGUAFjvLi5+U1KMtlwH -6oi6mYtQlNeCgN9hCQCTrQ0U5s7B8jeUeLBfnLOic7iPBZM4zY0+sLj7wM+x8uwt -LRvM7Kqas6pgghstO8OEPVeKlh6cdbjTMM1gCIOQ045U8U1mwF10A0Cj7oV+wh93 -nAbowacYXVKV7cndJZ5t+qntozo00Fl72u1Q8zW/7esUTTHHYPTa8Yec4kjixsU3 -+wYQ+nVZZjFHKdp2mhzpgq7vmrlR94gjmmmVYjzlVYA211QC//G5Xc7UI2/YRYRK -W2XviQzdFKcgyxilJbQN+QHwotL0AMh0jqEqSI5l2xPE4iUXfeu+h1sXIFRRk0pT -AwvsXcoz7WL9RccvW9xYoIA55vrX/hMUpu09lEpCdNTDd1lzzY9GvlU47/rokTLq -l1gEIt44w8y8bckzOmoKaT+gyOpyj4xjhiO9bTyWnpXgSUyqorkqG5w2gXjtw+hG -4iZZRHUe2XWJUc0QhJ1hYMtd+ZciTY6Y5uN/9lu7rs3KSoFrXgvzUeF0K+l+J6fZ -mUlO+KWA2yUPHGNiiskzZ2s8EIPGrd6ozRaOjfAHN3Gf8qv8QfXBi+wAN10J5U6A -7/qxXDgGpRtK4dw4LTzcqx+QGtVKnO7RcGzM7vRX+Bi6hG6H ------END CERTIFICATE----- - -# Issuer: CN=IdenTrust Public Sector Root CA 1 O=IdenTrust -# Subject: CN=IdenTrust Public Sector Root CA 1 O=IdenTrust -# Label: "IdenTrust Public Sector Root CA 1" -# Serial: 13298821034946342390521976156843933698 -# MD5 Fingerprint: 37:06:a5:b0:fc:89:9d:ba:f4:6b:8c:1a:64:cd:d5:ba -# SHA1 Fingerprint: ba:29:41:60:77:98:3f:f4:f3:ef:f2:31:05:3b:2e:ea:6d:4d:45:fd -# SHA256 Fingerprint: 30:d0:89:5a:9a:44:8a:26:20:91:63:55:22:d1:f5:20:10:b5:86:7a:ca:e1:2c:78:ef:95:8f:d4:f4:38:9f:2f ------BEGIN CERTIFICATE----- -MIIFZjCCA06gAwIBAgIQCgFCgAAAAUUjz0Z8AAAAAjANBgkqhkiG9w0BAQsFADBN -MQswCQYDVQQGEwJVUzESMBAGA1UEChMJSWRlblRydXN0MSowKAYDVQQDEyFJZGVu -VHJ1c3QgUHVibGljIFNlY3RvciBSb290IENBIDEwHhcNMTQwMTE2MTc1MzMyWhcN -MzQwMTE2MTc1MzMyWjBNMQswCQYDVQQGEwJVUzESMBAGA1UEChMJSWRlblRydXN0 -MSowKAYDVQQDEyFJZGVuVHJ1c3QgUHVibGljIFNlY3RvciBSb290IENBIDEwggIi -MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC2IpT8pEiv6EdrCvsnduTyP4o7 -ekosMSqMjbCpwzFrqHd2hCa2rIFCDQjrVVi7evi8ZX3yoG2LqEfpYnYeEe4IFNGy -RBb06tD6Hi9e28tzQa68ALBKK0CyrOE7S8ItneShm+waOh7wCLPQ5CQ1B5+ctMlS -bdsHyo+1W/CD80/HLaXIrcuVIKQxKFdYWuSNG5qrng0M8gozOSI5Cpcu81N3uURF -/YTLNiCBWS2ab21ISGHKTN9T0a9SvESfqy9rg3LvdYDaBjMbXcjaY8ZNzaxmMc3R -3j6HEDbhuaR672BQssvKplbgN6+rNBM5Jeg5ZuSYeqoSmJxZZoY+rfGwyj4GD3vw -EUs3oERte8uojHH01bWRNszwFcYr3lEXsZdMUD2xlVl8BX0tIdUAvwFnol57plzy -9yLxkA2T26pEUWbMfXYD62qoKjgZl3YNa4ph+bz27nb9cCvdKTz4Ch5bQhyLVi9V -GxyhLrXHFub4qjySjmm2AcG1hp2JDws4lFTo6tyePSW8Uybt1as5qsVATFSrsrTZ -2fjXctscvG29ZV/viDUqZi/u9rNl8DONfJhBaUYPQxxp+pu10GFqzcpL2UyQRqsV -WaFHVCkugyhfHMKiq3IXAAaOReyL4jM9f9oZRORicsPfIsbyVtTdX5Vy7W1f90gD -W/3FKqD2cyOEEBsB5wIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/ -BAUwAwEB/zAdBgNVHQ4EFgQU43HgntinQtnbcZFrlJPrw6PRFKMwDQYJKoZIhvcN -AQELBQADggIBAEf63QqwEZE4rU1d9+UOl1QZgkiHVIyqZJnYWv6IAcVYpZmxI1Qj -t2odIFflAWJBF9MJ23XLblSQdf4an4EKwt3X9wnQW3IV5B4Jaj0z8yGa5hV+rVHV -DRDtfULAj+7AmgjVQdZcDiFpboBhDhXAuM/FSRJSzL46zNQuOAXeNf0fb7iAaJg9 -TaDKQGXSc3z1i9kKlT/YPyNtGtEqJBnZhbMX73huqVjRI9PHE+1yJX9dsXNw0H8G -lwmEKYBhHfpe/3OsoOOJuBxxFcbeMX8S3OFtm6/n6J91eEyrRjuazr8FGF1NFTwW -mhlQBJqymm9li1JfPFgEKCXAZmExfrngdbkaqIHWchezxQMxNRF4eKLg6TCMf4Df -WN88uieW4oA0beOY02QnrEh+KHdcxiVhJfiFDGX6xDIvpZgF5PgLZxYWxoK4Mhn5 -+bl53B/N66+rDt0b20XkeucC4pVd/GnwU2lhlXV5C15V5jgclKlZM57IcXR5f1GJ -tshquDDIajjDbp7hNxbqBWJMWxJH7ae0s1hWx0nzfxJoCTFx8G34Tkf71oXuxVhA -GaQdp/lLQzfcaFpPz+vCZHTetBXZ9FRUGi8c15dxVJCO2SCdUyt/q4/i6jC8UDfv -8Ue1fXwsBOxonbRJRBD0ckscZOf85muQ3Wl9af0AVqW3rLatt8o+Ae+c ------END CERTIFICATE----- - -# Issuer: CN=Entrust Root Certification Authority - G2 O=Entrust, Inc. OU=See www.entrust.net/legal-terms/(c) 2009 Entrust, Inc. - for authorized use only -# Subject: CN=Entrust Root Certification Authority - G2 O=Entrust, Inc. OU=See www.entrust.net/legal-terms/(c) 2009 Entrust, Inc. - for authorized use only -# Label: "Entrust Root Certification Authority - G2" -# Serial: 1246989352 -# MD5 Fingerprint: 4b:e2:c9:91:96:65:0c:f4:0e:5a:93:92:a0:0a:fe:b2 -# SHA1 Fingerprint: 8c:f4:27:fd:79:0c:3a:d1:66:06:8d:e8:1e:57:ef:bb:93:22:72:d4 -# SHA256 Fingerprint: 43:df:57:74:b0:3e:7f:ef:5f:e4:0d:93:1a:7b:ed:f1:bb:2e:6b:42:73:8c:4e:6d:38:41:10:3d:3a:a7:f3:39 ------BEGIN CERTIFICATE----- -MIIEPjCCAyagAwIBAgIESlOMKDANBgkqhkiG9w0BAQsFADCBvjELMAkGA1UEBhMC -VVMxFjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3d3cuZW50 -cnVzdC5uZXQvbGVnYWwtdGVybXMxOTA3BgNVBAsTMChjKSAyMDA5IEVudHJ1c3Qs -IEluYy4gLSBmb3IgYXV0aG9yaXplZCB1c2Ugb25seTEyMDAGA1UEAxMpRW50cnVz -dCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzIwHhcNMDkwNzA3MTcy -NTU0WhcNMzAxMjA3MTc1NTU0WjCBvjELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUVu -dHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3d3cuZW50cnVzdC5uZXQvbGVnYWwt -dGVybXMxOTA3BgNVBAsTMChjKSAyMDA5IEVudHJ1c3QsIEluYy4gLSBmb3IgYXV0 -aG9yaXplZCB1c2Ugb25seTEyMDAGA1UEAxMpRW50cnVzdCBSb290IENlcnRpZmlj -YXRpb24gQXV0aG9yaXR5IC0gRzIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK -AoIBAQC6hLZy254Ma+KZ6TABp3bqMriVQRrJ2mFOWHLP/vaCeb9zYQYKpSfYs1/T -RU4cctZOMvJyig/3gxnQaoCAAEUesMfnmr8SVycco2gvCoe9amsOXmXzHHfV1IWN -cCG0szLni6LVhjkCsbjSR87kyUnEO6fe+1R9V77w6G7CebI6C1XiUJgWMhNcL3hW -wcKUs/Ja5CeanyTXxuzQmyWC48zCxEXFjJd6BmsqEZ+pCm5IO2/b1BEZQvePB7/1 -U1+cPvQXLOZprE4yTGJ36rfo5bs0vBmLrpxR57d+tVOxMyLlbc9wPBr64ptntoP0 -jaWvYkxN4FisZDQSA/i2jZRjJKRxAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAP -BgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRqciZ60B7vfec7aVHUbI2fkBJmqzAN -BgkqhkiG9w0BAQsFAAOCAQEAeZ8dlsa2eT8ijYfThwMEYGprmi5ZiXMRrEPR9RP/ -jTkrwPK9T3CMqS/qF8QLVJ7UG5aYMzyorWKiAHarWWluBh1+xLlEjZivEtRh2woZ -Rkfz6/djwUAFQKXSt/S1mja/qYh2iARVBCuch38aNzx+LaUa2NSJXsq9rD1s2G2v -1fN2D807iDginWyTmsQ9v4IbZT+mD12q/OWyFcq1rca8PdCE6OoGcrBNOTJ4vz4R -nAuknZoh8/CbCzB428Hch0P+vGOaysXCHMnHjf87ElgI5rY97HosTvuDls4MPGmH -VHOkc8KT/1EQrBVUAdj8BbGJoX90g5pJ19xOe4pIb4tF9g== ------END CERTIFICATE----- - -# Issuer: CN=Entrust Root Certification Authority - EC1 O=Entrust, Inc. OU=See www.entrust.net/legal-terms/(c) 2012 Entrust, Inc. - for authorized use only -# Subject: CN=Entrust Root Certification Authority - EC1 O=Entrust, Inc. OU=See www.entrust.net/legal-terms/(c) 2012 Entrust, Inc. - for authorized use only -# Label: "Entrust Root Certification Authority - EC1" -# Serial: 51543124481930649114116133369 -# MD5 Fingerprint: b6:7e:1d:f0:58:c5:49:6c:24:3b:3d:ed:98:18:ed:bc -# SHA1 Fingerprint: 20:d8:06:40:df:9b:25:f5:12:25:3a:11:ea:f7:59:8a:eb:14:b5:47 -# SHA256 Fingerprint: 02:ed:0e:b2:8c:14:da:45:16:5c:56:67:91:70:0d:64:51:d7:fb:56:f0:b2:ab:1d:3b:8e:b0:70:e5:6e:df:f5 ------BEGIN CERTIFICATE----- -MIIC+TCCAoCgAwIBAgINAKaLeSkAAAAAUNCR+TAKBggqhkjOPQQDAzCBvzELMAkG -A1UEBhMCVVMxFjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3 -d3cuZW50cnVzdC5uZXQvbGVnYWwtdGVybXMxOTA3BgNVBAsTMChjKSAyMDEyIEVu -dHJ1c3QsIEluYy4gLSBmb3IgYXV0aG9yaXplZCB1c2Ugb25seTEzMDEGA1UEAxMq -RW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRUMxMB4XDTEy -MTIxODE1MjUzNloXDTM3MTIxODE1NTUzNlowgb8xCzAJBgNVBAYTAlVTMRYwFAYD -VQQKEw1FbnRydXN0LCBJbmMuMSgwJgYDVQQLEx9TZWUgd3d3LmVudHJ1c3QubmV0 -L2xlZ2FsLXRlcm1zMTkwNwYDVQQLEzAoYykgMjAxMiBFbnRydXN0LCBJbmMuIC0g -Zm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxMzAxBgNVBAMTKkVudHJ1c3QgUm9vdCBD -ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEVDMTB2MBAGByqGSM49AgEGBSuBBAAi -A2IABIQTydC6bUF74mzQ61VfZgIaJPRbiWlH47jCffHyAsWfoPZb1YsGGYZPUxBt -ByQnoaD41UcZYUx9ypMn6nQM72+WCf5j7HBdNq1nd67JnXxVRDqiY1Ef9eNi1KlH -Bz7MIKNCMEAwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0O -BBYEFLdj5xrdjekIplWDpOBqUEFlEUJJMAoGCCqGSM49BAMDA2cAMGQCMGF52OVC -R98crlOZF7ZvHH3hvxGU0QOIdeSNiaSKd0bebWHvAvX7td/M/k7//qnmpwIwW5nX -hTcGtXsI/esni0qU+eH6p44mCOh8kmhtc9hvJqwhAriZtyZBWyVgrtBIGu4G ------END CERTIFICATE----- - -# Issuer: CN=CFCA EV ROOT O=China Financial Certification Authority -# Subject: CN=CFCA EV ROOT O=China Financial Certification Authority -# Label: "CFCA EV ROOT" -# Serial: 407555286 -# MD5 Fingerprint: 74:e1:b6:ed:26:7a:7a:44:30:33:94:ab:7b:27:81:30 -# SHA1 Fingerprint: e2:b8:29:4b:55:84:ab:6b:58:c2:90:46:6c:ac:3f:b8:39:8f:84:83 -# SHA256 Fingerprint: 5c:c3:d7:8e:4e:1d:5e:45:54:7a:04:e6:87:3e:64:f9:0c:f9:53:6d:1c:cc:2e:f8:00:f3:55:c4:c5:fd:70:fd ------BEGIN CERTIFICATE----- -MIIFjTCCA3WgAwIBAgIEGErM1jANBgkqhkiG9w0BAQsFADBWMQswCQYDVQQGEwJD -TjEwMC4GA1UECgwnQ2hpbmEgRmluYW5jaWFsIENlcnRpZmljYXRpb24gQXV0aG9y -aXR5MRUwEwYDVQQDDAxDRkNBIEVWIFJPT1QwHhcNMTIwODA4MDMwNzAxWhcNMjkx -MjMxMDMwNzAxWjBWMQswCQYDVQQGEwJDTjEwMC4GA1UECgwnQ2hpbmEgRmluYW5j -aWFsIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MRUwEwYDVQQDDAxDRkNBIEVWIFJP -T1QwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDXXWvNED8fBVnVBU03 -sQ7smCuOFR36k0sXgiFxEFLXUWRwFsJVaU2OFW2fvwwbwuCjZ9YMrM8irq93VCpL -TIpTUnrD7i7es3ElweldPe6hL6P3KjzJIx1qqx2hp/Hz7KDVRM8Vz3IvHWOX6Jn5 -/ZOkVIBMUtRSqy5J35DNuF++P96hyk0g1CXohClTt7GIH//62pCfCqktQT+x8Rgp -7hZZLDRJGqgG16iI0gNyejLi6mhNbiyWZXvKWfry4t3uMCz7zEasxGPrb382KzRz -EpR/38wmnvFyXVBlWY9ps4deMm/DGIq1lY+wejfeWkU7xzbh72fROdOXW3NiGUgt -hxwG+3SYIElz8AXSG7Ggo7cbcNOIabla1jj0Ytwli3i/+Oh+uFzJlU9fpy25IGvP -a931DfSCt/SyZi4QKPaXWnuWFo8BGS1sbn85WAZkgwGDg8NNkt0yxoekN+kWzqot -aK8KgWU6cMGbrU1tVMoqLUuFG7OA5nBFDWteNfB/O7ic5ARwiRIlk9oKmSJgamNg -TnYGmE69g60dWIolhdLHZR4tjsbftsbhf4oEIRUpdPA+nJCdDC7xij5aqgwJHsfV -PKPtl8MeNPo4+QgO48BdK4PRVmrJtqhUUy54Mmc9gn900PvhtgVguXDbjgv5E1hv -cWAQUhC5wUEJ73IfZzF4/5YFjQIDAQABo2MwYTAfBgNVHSMEGDAWgBTj/i39KNAL -tbq2osS/BqoFjJP7LzAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAd -BgNVHQ4EFgQU4/4t/SjQC7W6tqLEvwaqBYyT+y8wDQYJKoZIhvcNAQELBQADggIB -ACXGumvrh8vegjmWPfBEp2uEcwPenStPuiB/vHiyz5ewG5zz13ku9Ui20vsXiObT -ej/tUxPQ4i9qecsAIyjmHjdXNYmEwnZPNDatZ8POQQaIxffu2Bq41gt/UP+TqhdL -jOztUmCypAbqTuv0axn96/Ua4CUqmtzHQTb3yHQFhDmVOdYLO6Qn+gjYXB74BGBS -ESgoA//vU2YApUo0FmZ8/Qmkrp5nGm9BC2sGE5uPhnEFtC+NiWYzKXZUmhH4J/qy -P5Hgzg0b8zAarb8iXRvTvyUFTeGSGn+ZnzxEk8rUQElsgIfXBDrDMlI1Dlb4pd19 -xIsNER9Tyx6yF7Zod1rg1MvIB671Oi6ON7fQAUtDKXeMOZePglr4UeWJoBjnaH9d -Ci77o0cOPaYjesYBx4/IXr9tgFa+iiS6M+qf4TIRnvHST4D2G0CvOJ4RUHlzEhLN -5mydLIhyPDCBBpEi6lmt2hkuIsKNuYyH4Ga8cyNfIWRjgEj1oDwYPZTISEEdQLpe -/v5WOaHIz16eGWRGENoXkbcFgKyLmZJ956LYBws2J+dIeWCKw9cTXPhyQN9Ky8+Z -AAoACxGV2lZFA4gKn2fQ1XmxqI1AbQ3CekD6819kR5LLU7m7Wc5P/dAVUwHY3+vZ -5nbv0CO7O6l5s9UCKc2Jo5YPSjXnTkLAdc0Hz+Ys63su ------END CERTIFICATE----- - -# Issuer: CN=OISTE WISeKey Global Root GB CA O=WISeKey OU=OISTE Foundation Endorsed -# Subject: CN=OISTE WISeKey Global Root GB CA O=WISeKey OU=OISTE Foundation Endorsed -# Label: "OISTE WISeKey Global Root GB CA" -# Serial: 157768595616588414422159278966750757568 -# MD5 Fingerprint: a4:eb:b9:61:28:2e:b7:2f:98:b0:35:26:90:99:51:1d -# SHA1 Fingerprint: 0f:f9:40:76:18:d3:d7:6a:4b:98:f0:a8:35:9e:0c:fd:27:ac:cc:ed -# SHA256 Fingerprint: 6b:9c:08:e8:6e:b0:f7:67:cf:ad:65:cd:98:b6:21:49:e5:49:4a:67:f5:84:5e:7b:d1:ed:01:9f:27:b8:6b:d6 ------BEGIN CERTIFICATE----- -MIIDtTCCAp2gAwIBAgIQdrEgUnTwhYdGs/gjGvbCwDANBgkqhkiG9w0BAQsFADBt -MQswCQYDVQQGEwJDSDEQMA4GA1UEChMHV0lTZUtleTEiMCAGA1UECxMZT0lTVEUg -Rm91bmRhdGlvbiBFbmRvcnNlZDEoMCYGA1UEAxMfT0lTVEUgV0lTZUtleSBHbG9i -YWwgUm9vdCBHQiBDQTAeFw0xNDEyMDExNTAwMzJaFw0zOTEyMDExNTEwMzFaMG0x -CzAJBgNVBAYTAkNIMRAwDgYDVQQKEwdXSVNlS2V5MSIwIAYDVQQLExlPSVNURSBG -b3VuZGF0aW9uIEVuZG9yc2VkMSgwJgYDVQQDEx9PSVNURSBXSVNlS2V5IEdsb2Jh -bCBSb290IEdCIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2Be3 -HEokKtaXscriHvt9OO+Y9bI5mE4nuBFde9IllIiCFSZqGzG7qFshISvYD06fWvGx -WuR51jIjK+FTzJlFXHtPrby/h0oLS5daqPZI7H17Dc0hBt+eFf1Biki3IPShehtX -1F1Q/7pn2COZH8g/497/b1t3sWtuuMlk9+HKQUYOKXHQuSP8yYFfTvdv37+ErXNk -u7dCjmn21HYdfp2nuFeKUWdy19SouJVUQHMD9ur06/4oQnc/nSMbsrY9gBQHTC5P -99UKFg29ZkM3fiNDecNAhvVMKdqOmq0NpQSHiB6F4+lT1ZvIiwNjeOvgGUpuuy9r -M2RYk61pv48b74JIxwIDAQABo1EwTzALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUw -AwEB/zAdBgNVHQ4EFgQUNQ/INmNe4qPs+TtmFc5RUuORmj0wEAYJKwYBBAGCNxUB -BAMCAQAwDQYJKoZIhvcNAQELBQADggEBAEBM+4eymYGQfp3FsLAmzYh7KzKNbrgh -cViXfa43FK8+5/ea4n32cZiZBKpDdHij40lhPnOMTZTg+XHEthYOU3gf1qKHLwI5 -gSk8rxWYITD+KJAAjNHhy/peyP34EEY7onhCkRd0VQreUGdNZtGn//3ZwLWoo4rO -ZvUPQ82nK1d7Y0Zqqi5S2PTt4W2tKZB4SLrhI6qjiey1q5bAtEuiHZeeevJuQHHf -aPFlTc58Bd9TZaml8LGXBHAVRgOY1NK/VLSgWH1Sb9pWJmLU2NuJMW8c8CLC02Ic -Nc1MaRVUGpCY3useX8p3x8uOPUNpnJpY0CQ73xtAln41rYHHTnG6iBM= ------END CERTIFICATE----- - -# Issuer: CN=SZAFIR ROOT CA2 O=Krajowa Izba Rozliczeniowa S.A. -# Subject: CN=SZAFIR ROOT CA2 O=Krajowa Izba Rozliczeniowa S.A. -# Label: "SZAFIR ROOT CA2" -# Serial: 357043034767186914217277344587386743377558296292 -# MD5 Fingerprint: 11:64:c1:89:b0:24:b1:8c:b1:07:7e:89:9e:51:9e:99 -# SHA1 Fingerprint: e2:52:fa:95:3f:ed:db:24:60:bd:6e:28:f3:9c:cc:cf:5e:b3:3f:de -# SHA256 Fingerprint: a1:33:9d:33:28:1a:0b:56:e5:57:d3:d3:2b:1c:e7:f9:36:7e:b0:94:bd:5f:a7:2a:7e:50:04:c8:de:d7:ca:fe ------BEGIN CERTIFICATE----- -MIIDcjCCAlqgAwIBAgIUPopdB+xV0jLVt+O2XwHrLdzk1uQwDQYJKoZIhvcNAQEL -BQAwUTELMAkGA1UEBhMCUEwxKDAmBgNVBAoMH0tyYWpvd2EgSXpiYSBSb3psaWN6 -ZW5pb3dhIFMuQS4xGDAWBgNVBAMMD1NaQUZJUiBST09UIENBMjAeFw0xNTEwMTkw -NzQzMzBaFw0zNTEwMTkwNzQzMzBaMFExCzAJBgNVBAYTAlBMMSgwJgYDVQQKDB9L -cmFqb3dhIEl6YmEgUm96bGljemVuaW93YSBTLkEuMRgwFgYDVQQDDA9TWkFGSVIg -Uk9PVCBDQTIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC3vD5QqEvN -QLXOYeeWyrSh2gwisPq1e3YAd4wLz32ohswmUeQgPYUM1ljj5/QqGJ3a0a4m7utT -3PSQ1hNKDJA8w/Ta0o4NkjrcsbH/ON7Dui1fgLkCvUqdGw+0w8LBZwPd3BucPbOw -3gAeqDRHu5rr/gsUvTaE2g0gv/pby6kWIK05YO4vdbbnl5z5Pv1+TW9NL++IDWr6 -3fE9biCloBK0TXC5ztdyO4mTp4CEHCdJckm1/zuVnsHMyAHs6A6KCpbns6aH5db5 -BSsNl0BwPLqsdVqc1U2dAgrSS5tmS0YHF2Wtn2yIANwiieDhZNRnvDF5YTy7ykHN -XGoAyDw4jlivAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQD -AgEGMB0GA1UdDgQWBBQuFqlKGLXLzPVvUPMjX/hd56zwyDANBgkqhkiG9w0BAQsF -AAOCAQEAtXP4A9xZWx126aMqe5Aosk3AM0+qmrHUuOQn/6mWmc5G4G18TKI4pAZw -8PRBEew/R40/cof5O/2kbytTAOD/OblqBw7rHRz2onKQy4I9EYKL0rufKq8h5mOG -nXkZ7/e7DDWQw4rtTw/1zBLZpD67oPwglV9PJi8RI4NOdQcPv5vRtB3pEAT+ymCP -oky4rc/hkA/NrgrHXXu3UNLUYfrVFdvXn4dRVOul4+vJhaAlIDf7js4MNIThPIGy -d05DpYhfhmehPea0XGG2Ptv+tyjFogeutcrKjSoS75ftwjCkySp6+/NNIxuZMzSg -LvWpCz/UXeHPhJ/iGcJfitYgHuNztw== ------END CERTIFICATE----- - -# Issuer: CN=Certum Trusted Network CA 2 O=Unizeto Technologies S.A. OU=Certum Certification Authority -# Subject: CN=Certum Trusted Network CA 2 O=Unizeto Technologies S.A. OU=Certum Certification Authority -# Label: "Certum Trusted Network CA 2" -# Serial: 44979900017204383099463764357512596969 -# MD5 Fingerprint: 6d:46:9e:d9:25:6d:08:23:5b:5e:74:7d:1e:27:db:f2 -# SHA1 Fingerprint: d3:dd:48:3e:2b:bf:4c:05:e8:af:10:f5:fa:76:26:cf:d3:dc:30:92 -# SHA256 Fingerprint: b6:76:f2:ed:da:e8:77:5c:d3:6c:b0:f6:3c:d1:d4:60:39:61:f4:9e:62:65:ba:01:3a:2f:03:07:b6:d0:b8:04 ------BEGIN CERTIFICATE----- -MIIF0jCCA7qgAwIBAgIQIdbQSk8lD8kyN/yqXhKN6TANBgkqhkiG9w0BAQ0FADCB -gDELMAkGA1UEBhMCUEwxIjAgBgNVBAoTGVVuaXpldG8gVGVjaG5vbG9naWVzIFMu -QS4xJzAlBgNVBAsTHkNlcnR1bSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEkMCIG -A1UEAxMbQ2VydHVtIFRydXN0ZWQgTmV0d29yayBDQSAyMCIYDzIwMTExMDA2MDgz -OTU2WhgPMjA0NjEwMDYwODM5NTZaMIGAMQswCQYDVQQGEwJQTDEiMCAGA1UEChMZ -VW5pemV0byBUZWNobm9sb2dpZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVtIENlcnRp -ZmljYXRpb24gQXV0aG9yaXR5MSQwIgYDVQQDExtDZXJ0dW0gVHJ1c3RlZCBOZXR3 -b3JrIENBIDIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC9+Xj45tWA -DGSdhhuWZGc/IjoedQF97/tcZ4zJzFxrqZHmuULlIEub2pt7uZld2ZuAS9eEQCsn -0+i6MLs+CRqnSZXvK0AkwpfHp+6bJe+oCgCXhVqqndwpyeI1B+twTUrWwbNWuKFB -OJvR+zF/j+Bf4bE/D44WSWDXBo0Y+aomEKsq09DRZ40bRr5HMNUuctHFY9rnY3lE -fktjJImGLjQ/KUxSiyqnwOKRKIm5wFv5HdnnJ63/mgKXwcZQkpsCLL2puTRZCr+E -Sv/f/rOf69me4Jgj7KZrdxYq28ytOxykh9xGc14ZYmhFV+SQgkK7QtbwYeDBoz1m -o130GO6IyY0XRSmZMnUCMe4pJshrAua1YkV/NxVaI2iJ1D7eTiew8EAMvE0Xy02i -sx7QBlrd9pPPV3WZ9fqGGmd4s7+W/jTcvedSVuWz5XV710GRBdxdaeOVDUO5/IOW -OZV7bIBaTxNyxtd9KXpEulKkKtVBRgkg/iKgtlswjbyJDNXXcPiHUv3a76xRLgez -Tv7QCdpw75j6VuZt27VXS9zlLCUVyJ4ueE742pyehizKV/Ma5ciSixqClnrDvFAS -adgOWkaLOusm+iPJtrCBvkIApPjW/jAux9JG9uWOdf3yzLnQh1vMBhBgu4M1t15n -3kfsmUjxpKEV/q2MYo45VU85FrmxY53/twIDAQABo0IwQDAPBgNVHRMBAf8EBTAD -AQH/MB0GA1UdDgQWBBS2oVQ5AsOgP46KvPrU+Bym0ToO/TAOBgNVHQ8BAf8EBAMC -AQYwDQYJKoZIhvcNAQENBQADggIBAHGlDs7k6b8/ONWJWsQCYftMxRQXLYtPU2sQ -F/xlhMcQSZDe28cmk4gmb3DWAl45oPePq5a1pRNcgRRtDoGCERuKTsZPpd1iHkTf -CVn0W3cLN+mLIMb4Ck4uWBzrM9DPhmDJ2vuAL55MYIR4PSFk1vtBHxgP58l1cb29 -XN40hz5BsA72udY/CROWFC/emh1auVbONTqwX3BNXuMp8SMoclm2q8KMZiYcdywm -djWLKKdpoPk79SPdhRB0yZADVpHnr7pH1BKXESLjokmUbOe3lEu6LaTaM4tMpkT/ -WjzGHWTYtTHkpjx6qFcL2+1hGsvxznN3Y6SHb0xRONbkX8eftoEq5IVIeVheO/jb -AoJnwTnbw3RLPTYe+SmTiGhbqEQZIfCn6IENLOiTNrQ3ssqwGyZ6miUfmpqAnksq -P/ujmv5zMnHCnsZy4YpoJ/HkD7TETKVhk/iXEAcqMCWpuchxuO9ozC1+9eB+D4Ko -b7a6bINDd82Kkhehnlt4Fj1F4jNy3eFmypnTycUm/Q1oBEauttmbjL4ZvrHG8hnj -XALKLNhvSgfZyTXaQHXyxKcZb55CEJh15pWLYLztxRLXis7VmFxWlgPF7ncGNf/P -5O4/E2Hu29othfDNrp2yGAlFw5Khchf8R7agCyzxxN5DaAhqXzvwdmP7zAYspsbi -DrW5viSP ------END CERTIFICATE----- - -# Issuer: CN=Hellenic Academic and Research Institutions RootCA 2015 O=Hellenic Academic and Research Institutions Cert. Authority -# Subject: CN=Hellenic Academic and Research Institutions RootCA 2015 O=Hellenic Academic and Research Institutions Cert. Authority -# Label: "Hellenic Academic and Research Institutions RootCA 2015" -# Serial: 0 -# MD5 Fingerprint: ca:ff:e2:db:03:d9:cb:4b:e9:0f:ad:84:fd:7b:18:ce -# SHA1 Fingerprint: 01:0c:06:95:a6:98:19:14:ff:bf:5f:c6:b0:b6:95:ea:29:e9:12:a6 -# SHA256 Fingerprint: a0:40:92:9a:02:ce:53:b4:ac:f4:f2:ff:c6:98:1c:e4:49:6f:75:5e:6d:45:fe:0b:2a:69:2b:cd:52:52:3f:36 ------BEGIN CERTIFICATE----- -MIIGCzCCA/OgAwIBAgIBADANBgkqhkiG9w0BAQsFADCBpjELMAkGA1UEBhMCR1Ix -DzANBgNVBAcTBkF0aGVuczFEMEIGA1UEChM7SGVsbGVuaWMgQWNhZGVtaWMgYW5k -IFJlc2VhcmNoIEluc3RpdHV0aW9ucyBDZXJ0LiBBdXRob3JpdHkxQDA+BgNVBAMT -N0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgUm9v -dENBIDIwMTUwHhcNMTUwNzA3MTAxMTIxWhcNNDAwNjMwMTAxMTIxWjCBpjELMAkG -A1UEBhMCR1IxDzANBgNVBAcTBkF0aGVuczFEMEIGA1UEChM7SGVsbGVuaWMgQWNh -ZGVtaWMgYW5kIFJlc2VhcmNoIEluc3RpdHV0aW9ucyBDZXJ0LiBBdXRob3JpdHkx -QDA+BgNVBAMTN0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1 -dGlvbnMgUm9vdENBIDIwMTUwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoIC -AQDC+Kk/G4n8PDwEXT2QNrCROnk8ZlrvbTkBSRq0t89/TSNTt5AA4xMqKKYx8ZEA -4yjsriFBzh/a/X0SWwGDD7mwX5nh8hKDgE0GPt+sr+ehiGsxr/CL0BgzuNtFajT0 -AoAkKAoCFZVedioNmToUW/bLy1O8E00BiDeUJRtCvCLYjqOWXjrZMts+6PAQZe10 -4S+nfK8nNLspfZu2zwnI5dMK/IhlZXQK3HMcXM1AsRzUtoSMTFDPaI6oWa7CJ06C -ojXdFPQf/7J31Ycvqm59JCfnxssm5uX+Zwdj2EUN3TpZZTlYepKZcj2chF6IIbjV -9Cz82XBST3i4vTwri5WY9bPRaM8gFH5MXF/ni+X1NYEZN9cRCLdmvtNKzoNXADrD -gfgXy5I2XdGj2HUb4Ysn6npIQf1FGQatJ5lOwXBH3bWfgVMS5bGMSF0xQxfjjMZ6 -Y5ZLKTBOhE5iGV48zpeQpX8B653g+IuJ3SWYPZK2fu/Z8VFRfS0myGlZYeCsargq -NhEEelC9MoS+L9xy1dcdFkfkR2YgP/SWxa+OAXqlD3pk9Q0Yh9muiNX6hME6wGko -LfINaFGq46V3xqSQDqE3izEjR8EJCOtu93ib14L8hCCZSRm2Ekax+0VVFqmjZayc -Bw/qa9wfLgZy7IaIEuQt218FL+TwA9MmM+eAws1CoRc0CwIDAQABo0IwQDAPBgNV -HRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUcRVnyMjJvXVd -ctA4GGqd83EkVAswDQYJKoZIhvcNAQELBQADggIBAHW7bVRLqhBYRjTyYtcWNl0I -XtVsyIe9tC5G8jH4fOpCtZMWVdyhDBKg2mF+D1hYc2Ryx+hFjtyp8iY/xnmMsVMI -M4GwVhO+5lFc2JsKT0ucVlMC6U/2DWDqTUJV6HwbISHTGzrMd/K4kPFox/la/vot -9L/J9UUbzjgQKjeKeaO04wlshYaT/4mWJ3iBj2fjRnRUjtkNaeJK9E10A/+yd+2V -Z5fkscWrv2oj6NSU4kQoYsRL4vDY4ilrGnB+JGGTe08DMiUNRSQrlrRGar9KC/ea -j8GsGsVn82800vpzY4zvFrCopEYq+OsS7HK07/grfoxSwIuEVPkvPuNVqNxmsdnh -X9izjFk0WaSrT2y7HxjbdavYy5LNlDhhDgcGH0tGEPEVvo2FXDtKK4F5D7Rpn0lQ -l033DlZdwJVqwjbDG2jJ9SrcR5q+ss7FJej6A7na+RZukYT1HCjI/CbM1xyQVqdf -bzoEvM14iQuODy+jqk+iGxI9FghAD/FGTNeqewjBCvVtJ94Cj8rDtSvK6evIIVM4 -pcw72Hc3MKJP2W/R8kCtQXoXxdZKNYm3QdV8hn9VTYNKpXMgwDqvkPGaJI7ZjnHK -e7iG2rKPmT4dEw0SEe7Uq/DpFXYC5ODfqiAeW2GFZECpkJcNrVPSWh2HagCXZWK0 -vm9qp/UsQu0yrbYhnr68 ------END CERTIFICATE----- - -# Issuer: CN=Hellenic Academic and Research Institutions ECC RootCA 2015 O=Hellenic Academic and Research Institutions Cert. Authority -# Subject: CN=Hellenic Academic and Research Institutions ECC RootCA 2015 O=Hellenic Academic and Research Institutions Cert. Authority -# Label: "Hellenic Academic and Research Institutions ECC RootCA 2015" -# Serial: 0 -# MD5 Fingerprint: 81:e5:b4:17:eb:c2:f5:e1:4b:0d:41:7b:49:92:fe:ef -# SHA1 Fingerprint: 9f:f1:71:8d:92:d5:9a:f3:7d:74:97:b4:bc:6f:84:68:0b:ba:b6:66 -# SHA256 Fingerprint: 44:b5:45:aa:8a:25:e6:5a:73:ca:15:dc:27:fc:36:d2:4c:1c:b9:95:3a:06:65:39:b1:15:82:dc:48:7b:48:33 ------BEGIN CERTIFICATE----- -MIICwzCCAkqgAwIBAgIBADAKBggqhkjOPQQDAjCBqjELMAkGA1UEBhMCR1IxDzAN -BgNVBAcTBkF0aGVuczFEMEIGA1UEChM7SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJl -c2VhcmNoIEluc3RpdHV0aW9ucyBDZXJ0LiBBdXRob3JpdHkxRDBCBgNVBAMTO0hl -bGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgRUNDIFJv -b3RDQSAyMDE1MB4XDTE1MDcwNzEwMzcxMloXDTQwMDYzMDEwMzcxMlowgaoxCzAJ -BgNVBAYTAkdSMQ8wDQYDVQQHEwZBdGhlbnMxRDBCBgNVBAoTO0hlbGxlbmljIEFj -YWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgQ2VydC4gQXV0aG9yaXR5 -MUQwQgYDVQQDEztIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0 -dXRpb25zIEVDQyBSb290Q0EgMjAxNTB2MBAGByqGSM49AgEGBSuBBAAiA2IABJKg -QehLgoRc4vgxEZmGZE4JJS+dQS8KrjVPdJWyUWRrjWvmP3CV8AVER6ZyOFB2lQJa -jq4onvktTpnvLEhvTCUp6NFxW98dwXU3tNf6e3pCnGoKVlp8aQuqgAkkbH7BRqNC -MEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFLQi -C4KZJAEOnLvkDv2/+5cgk5kqMAoGCCqGSM49BAMCA2cAMGQCMGfOFmI4oqxiRaep -lSTAGiecMjvAwNW6qef4BENThe5SId6d9SWDPp5YSy/XZxMOIQIwBeF1Ad5o7Sof -TUwJCA3sS61kFyjndc5FZXIhF8siQQ6ME5g4mlRtm8rifOoCWCKR ------END CERTIFICATE----- - -# Issuer: CN=ISRG Root X1 O=Internet Security Research Group -# Subject: CN=ISRG Root X1 O=Internet Security Research Group -# Label: "ISRG Root X1" -# Serial: 172886928669790476064670243504169061120 -# MD5 Fingerprint: 0c:d2:f9:e0:da:17:73:e9:ed:86:4d:a5:e3:70:e7:4e -# SHA1 Fingerprint: ca:bd:2a:79:a1:07:6a:31:f2:1d:25:36:35:cb:03:9d:43:29:a5:e8 -# SHA256 Fingerprint: 96:bc:ec:06:26:49:76:f3:74:60:77:9a:cf:28:c5:a7:cf:e8:a3:c0:aa:e1:1a:8f:fc:ee:05:c0:bd:df:08:c6 ------BEGIN CERTIFICATE----- -MIIFazCCA1OgAwIBAgIRAIIQz7DSQONZRGPgu2OCiwAwDQYJKoZIhvcNAQELBQAw -TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh -cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMTUwNjA0MTEwNDM4 -WhcNMzUwNjA0MTEwNDM4WjBPMQswCQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJu -ZXQgU2VjdXJpdHkgUmVzZWFyY2ggR3JvdXAxFTATBgNVBAMTDElTUkcgUm9vdCBY -MTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAK3oJHP0FDfzm54rVygc -h77ct984kIxuPOZXoHj3dcKi/vVqbvYATyjb3miGbESTtrFj/RQSa78f0uoxmyF+ -0TM8ukj13Xnfs7j/EvEhmkvBioZxaUpmZmyPfjxwv60pIgbz5MDmgK7iS4+3mX6U -A5/TR5d8mUgjU+g4rk8Kb4Mu0UlXjIB0ttov0DiNewNwIRt18jA8+o+u3dpjq+sW -T8KOEUt+zwvo/7V3LvSye0rgTBIlDHCNAymg4VMk7BPZ7hm/ELNKjD+Jo2FR3qyH -B5T0Y3HsLuJvW5iB4YlcNHlsdu87kGJ55tukmi8mxdAQ4Q7e2RCOFvu396j3x+UC -B5iPNgiV5+I3lg02dZ77DnKxHZu8A/lJBdiB3QW0KtZB6awBdpUKD9jf1b0SHzUv -KBds0pjBqAlkd25HN7rOrFleaJ1/ctaJxQZBKT5ZPt0m9STJEadao0xAH0ahmbWn -OlFuhjuefXKnEgV4We0+UXgVCwOPjdAvBbI+e0ocS3MFEvzG6uBQE3xDk3SzynTn -jh8BCNAw1FtxNrQHusEwMFxIt4I7mKZ9YIqioymCzLq9gwQbooMDQaHWBfEbwrbw -qHyGO0aoSCqI3Haadr8faqU9GY/rOPNk3sgrDQoo//fb4hVC1CLQJ13hef4Y53CI -rU7m2Ys6xt0nUW7/vGT1M0NPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV -HRMBAf8EBTADAQH/MB0GA1UdDgQWBBR5tFnme7bl5AFzgAiIyBpY9umbbjANBgkq -hkiG9w0BAQsFAAOCAgEAVR9YqbyyqFDQDLHYGmkgJykIrGF1XIpu+ILlaS/V9lZL -ubhzEFnTIZd+50xx+7LSYK05qAvqFyFWhfFQDlnrzuBZ6brJFe+GnY+EgPbk6ZGQ -3BebYhtF8GaV0nxvwuo77x/Py9auJ/GpsMiu/X1+mvoiBOv/2X/qkSsisRcOj/KK -NFtY2PwByVS5uCbMiogziUwthDyC3+6WVwW6LLv3xLfHTjuCvjHIInNzktHCgKQ5 -ORAzI4JMPJ+GslWYHb4phowim57iaztXOoJwTdwJx4nLCgdNbOhdjsnvzqvHu7Ur -TkXWStAmzOVyyghqpZXjFaH3pO3JLF+l+/+sKAIuvtd7u+Nxe5AW0wdeRlN8NwdC -jNPElpzVmbUq4JUagEiuTDkHzsxHpFKVK7q4+63SM1N95R1NbdWhscdCb+ZAJzVc -oyi3B43njTOQ5yOf+1CceWxG1bQVs5ZufpsMljq4Ui0/1lvh+wjChP4kqKOJ2qxq -4RgqsahDYVvTH9w7jXbyLeiNdd8XM2w9U/t7y0Ff/9yi0GE44Za4rF2LN9d11TPA -mRGunUHBcnWEvgJBQl9nJEiU0Zsnvgc/ubhPgXRR4Xq37Z0j4r7g1SgEEzwxA57d -emyPxgcYxn/eR44/KJ4EBs+lVDR3veyJm+kXQ99b21/+jh5Xos1AnX5iItreGCc= ------END CERTIFICATE----- - -# Issuer: O=FNMT-RCM OU=AC RAIZ FNMT-RCM -# Subject: O=FNMT-RCM OU=AC RAIZ FNMT-RCM -# Label: "AC RAIZ FNMT-RCM" -# Serial: 485876308206448804701554682760554759 -# MD5 Fingerprint: e2:09:04:b4:d3:bd:d1:a0:14:fd:1a:d2:47:c4:57:1d -# SHA1 Fingerprint: ec:50:35:07:b2:15:c4:95:62:19:e2:a8:9a:5b:42:99:2c:4c:2c:20 -# SHA256 Fingerprint: eb:c5:57:0c:29:01:8c:4d:67:b1:aa:12:7b:af:12:f7:03:b4:61:1e:bc:17:b7:da:b5:57:38:94:17:9b:93:fa ------BEGIN CERTIFICATE----- -MIIFgzCCA2ugAwIBAgIPXZONMGc2yAYdGsdUhGkHMA0GCSqGSIb3DQEBCwUAMDsx -CzAJBgNVBAYTAkVTMREwDwYDVQQKDAhGTk1ULVJDTTEZMBcGA1UECwwQQUMgUkFJ -WiBGTk1ULVJDTTAeFw0wODEwMjkxNTU5NTZaFw0zMDAxMDEwMDAwMDBaMDsxCzAJ -BgNVBAYTAkVTMREwDwYDVQQKDAhGTk1ULVJDTTEZMBcGA1UECwwQQUMgUkFJWiBG -Tk1ULVJDTTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALpxgHpMhm5/ -yBNtwMZ9HACXjywMI7sQmkCpGreHiPibVmr75nuOi5KOpyVdWRHbNi63URcfqQgf -BBckWKo3Shjf5TnUV/3XwSyRAZHiItQDwFj8d0fsjz50Q7qsNI1NOHZnjrDIbzAz -WHFctPVrbtQBULgTfmxKo0nRIBnuvMApGGWn3v7v3QqQIecaZ5JCEJhfTzC8PhxF -tBDXaEAUwED653cXeuYLj2VbPNmaUtu1vZ5Gzz3rkQUCwJaydkxNEJY7kvqcfw+Z -374jNUUeAlz+taibmSXaXvMiwzn15Cou08YfxGyqxRxqAQVKL9LFwag0Jl1mpdIC -IfkYtwb1TplvqKtMUejPUBjFd8g5CSxJkjKZqLsXF3mwWsXmo8RZZUc1g16p6DUL -mbvkzSDGm0oGObVo/CK67lWMK07q87Hj/LaZmtVC+nFNCM+HHmpxffnTtOmlcYF7 -wk5HlqX2doWjKI/pgG6BU6VtX7hI+cL5NqYuSf+4lsKMB7ObiFj86xsc3i1w4peS -MKGJ47xVqCfWS+2QrYv6YyVZLag13cqXM7zlzced0ezvXg5KkAYmY6252TUtB7p2 -ZSysV4999AeU14ECll2jB0nVetBX+RvnU0Z1qrB5QstocQjpYL05ac70r8NWQMet -UqIJ5G+GR4of6ygnXYMgrwTJbFaai0b1AgMBAAGjgYMwgYAwDwYDVR0TAQH/BAUw -AwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFPd9xf3E6Jobd2Sn9R2gzL+H -YJptMD4GA1UdIAQ3MDUwMwYEVR0gADArMCkGCCsGAQUFBwIBFh1odHRwOi8vd3d3 -LmNlcnQuZm5tdC5lcy9kcGNzLzANBgkqhkiG9w0BAQsFAAOCAgEAB5BK3/MjTvDD -nFFlm5wioooMhfNzKWtN/gHiqQxjAb8EZ6WdmF/9ARP67Jpi6Yb+tmLSbkyU+8B1 -RXxlDPiyN8+sD8+Nb/kZ94/sHvJwnvDKuO+3/3Y3dlv2bojzr2IyIpMNOmqOFGYM -LVN0V2Ue1bLdI4E7pWYjJ2cJj+F3qkPNZVEI7VFY/uY5+ctHhKQV8Xa7pO6kO8Rf -77IzlhEYt8llvhjho6Tc+hj507wTmzl6NLrTQfv6MooqtyuGC2mDOL7Nii4LcK2N -JpLuHvUBKwrZ1pebbuCoGRw6IYsMHkCtA+fdZn71uSANA+iW+YJF1DngoABd15jm -fZ5nc8OaKveri6E6FO80vFIOiZiaBECEHX5FaZNXzuvO+FB8TxxuBEOb+dY7Ixjp -6o7RTUaN8Tvkasq6+yO3m/qZASlaWFot4/nUbQ4mrcFuNLwy+AwF+mWj2zs3gyLp -1txyM/1d8iC9djwj2ij3+RvrWWTV3F9yfiD8zYm1kGdNYno/Tq0dwzn+evQoFt9B -9kiABdcPUXmsEKvU7ANm5mqwujGSQkBqvjrTcuFqN1W8rB2Vt2lh8kORdOag0wok -RqEIr9baRRmW1FMdW4R58MD3R++Lj8UGrp1MYp3/RgT408m2ECVAdf4WqslKYIYv -uu8wd+RU4riEmViAqhOLUTpPSPaLtrM= ------END CERTIFICATE----- - -# Issuer: CN=Amazon Root CA 1 O=Amazon -# Subject: CN=Amazon Root CA 1 O=Amazon -# Label: "Amazon Root CA 1" -# Serial: 143266978916655856878034712317230054538369994 -# MD5 Fingerprint: 43:c6:bf:ae:ec:fe:ad:2f:18:c6:88:68:30:fc:c8:e6 -# SHA1 Fingerprint: 8d:a7:f9:65:ec:5e:fc:37:91:0f:1c:6e:59:fd:c1:cc:6a:6e:de:16 -# SHA256 Fingerprint: 8e:cd:e6:88:4f:3d:87:b1:12:5b:a3:1a:c3:fc:b1:3d:70:16:de:7f:57:cc:90:4f:e1:cb:97:c6:ae:98:19:6e ------BEGIN CERTIFICATE----- -MIIDQTCCAimgAwIBAgITBmyfz5m/jAo54vB4ikPmljZbyjANBgkqhkiG9w0BAQsF -ADA5MQswCQYDVQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6 -b24gUm9vdCBDQSAxMB4XDTE1MDUyNjAwMDAwMFoXDTM4MDExNzAwMDAwMFowOTEL -MAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZMBcGA1UEAxMQQW1hem9uIFJv -b3QgQ0EgMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALJ4gHHKeNXj -ca9HgFB0fW7Y14h29Jlo91ghYPl0hAEvrAIthtOgQ3pOsqTQNroBvo3bSMgHFzZM -9O6II8c+6zf1tRn4SWiw3te5djgdYZ6k/oI2peVKVuRF4fn9tBb6dNqcmzU5L/qw -IFAGbHrQgLKm+a/sRxmPUDgH3KKHOVj4utWp+UhnMJbulHheb4mjUcAwhmahRWa6 -VOujw5H5SNz/0egwLX0tdHA114gk957EWW67c4cX8jJGKLhD+rcdqsq08p8kDi1L -93FcXmn/6pUCyziKrlA4b9v7LWIbxcceVOF34GfID5yHI9Y/QCB/IIDEgEw+OyQm -jgSubJrIqg0CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC -AYYwHQYDVR0OBBYEFIQYzIU07LwMlJQuCFmcx7IQTgoIMA0GCSqGSIb3DQEBCwUA -A4IBAQCY8jdaQZChGsV2USggNiMOruYou6r4lK5IpDB/G/wkjUu0yKGX9rbxenDI -U5PMCCjjmCXPI6T53iHTfIUJrU6adTrCC2qJeHZERxhlbI1Bjjt/msv0tadQ1wUs -N+gDS63pYaACbvXy8MWy7Vu33PqUXHeeE6V/Uq2V8viTO96LXFvKWlJbYK8U90vv -o/ufQJVtMVT8QtPHRh8jrdkPSHCa2XV4cdFyQzR1bldZwgJcJmApzyMZFo6IQ6XU -5MsI+yMRQ+hDKXJioaldXgjUkK642M4UwtBV8ob2xJNDd2ZhwLnoQdeXeGADbkpy -rqXRfboQnoZsG4q5WTP468SQvvG5 ------END CERTIFICATE----- - -# Issuer: CN=Amazon Root CA 2 O=Amazon -# Subject: CN=Amazon Root CA 2 O=Amazon -# Label: "Amazon Root CA 2" -# Serial: 143266982885963551818349160658925006970653239 -# MD5 Fingerprint: c8:e5:8d:ce:a8:42:e2:7a:c0:2a:5c:7c:9e:26:bf:66 -# SHA1 Fingerprint: 5a:8c:ef:45:d7:a6:98:59:76:7a:8c:8b:44:96:b5:78:cf:47:4b:1a -# SHA256 Fingerprint: 1b:a5:b2:aa:8c:65:40:1a:82:96:01:18:f8:0b:ec:4f:62:30:4d:83:ce:c4:71:3a:19:c3:9c:01:1e:a4:6d:b4 ------BEGIN CERTIFICATE----- -MIIFQTCCAymgAwIBAgITBmyf0pY1hp8KD+WGePhbJruKNzANBgkqhkiG9w0BAQwF -ADA5MQswCQYDVQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6 -b24gUm9vdCBDQSAyMB4XDTE1MDUyNjAwMDAwMFoXDTQwMDUyNjAwMDAwMFowOTEL -MAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZMBcGA1UEAxMQQW1hem9uIFJv -b3QgQ0EgMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAK2Wny2cSkxK -gXlRmeyKy2tgURO8TW0G/LAIjd0ZEGrHJgw12MBvIITplLGbhQPDW9tK6Mj4kHbZ -W0/jTOgGNk3Mmqw9DJArktQGGWCsN0R5hYGCrVo34A3MnaZMUnbqQ523BNFQ9lXg -1dKmSYXpN+nKfq5clU1Imj+uIFptiJXZNLhSGkOQsL9sBbm2eLfq0OQ6PBJTYv9K -8nu+NQWpEjTj82R0Yiw9AElaKP4yRLuH3WUnAnE72kr3H9rN9yFVkE8P7K6C4Z9r -2UXTu/Bfh+08LDmG2j/e7HJV63mjrdvdfLC6HM783k81ds8P+HgfajZRRidhW+me -z/CiVX18JYpvL7TFz4QuK/0NURBs+18bvBt+xa47mAExkv8LV/SasrlX6avvDXbR -8O70zoan4G7ptGmh32n2M8ZpLpcTnqWHsFcQgTfJU7O7f/aS0ZzQGPSSbtqDT6Zj -mUyl+17vIWR6IF9sZIUVyzfpYgwLKhbcAS4y2j5L9Z469hdAlO+ekQiG+r5jqFoz -7Mt0Q5X5bGlSNscpb/xVA1wf+5+9R+vnSUeVC06JIglJ4PVhHvG/LopyboBZ/1c6 -+XUyo05f7O0oYtlNc/LMgRdg7c3r3NunysV+Ar3yVAhU/bQtCSwXVEqY0VThUWcI -0u1ufm8/0i2BWSlmy5A5lREedCf+3euvAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMB -Af8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBSwDPBMMPQFWAJI/TPlUq9LhONm -UjANBgkqhkiG9w0BAQwFAAOCAgEAqqiAjw54o+Ci1M3m9Zh6O+oAA7CXDpO8Wqj2 -LIxyh6mx/H9z/WNxeKWHWc8w4Q0QshNabYL1auaAn6AFC2jkR2vHat+2/XcycuUY -+gn0oJMsXdKMdYV2ZZAMA3m3MSNjrXiDCYZohMr/+c8mmpJ5581LxedhpxfL86kS -k5Nrp+gvU5LEYFiwzAJRGFuFjWJZY7attN6a+yb3ACfAXVU3dJnJUH/jWS5E4ywl -7uxMMne0nxrpS10gxdr9HIcWxkPo1LsmmkVwXqkLN1PiRnsn/eBG8om3zEK2yygm -btmlyTrIQRNg91CMFa6ybRoVGld45pIq2WWQgj9sAq+uEjonljYE1x2igGOpm/Hl -urR8FLBOybEfdF849lHqm/osohHUqS0nGkWxr7JOcQ3AWEbWaQbLU8uz/mtBzUF+ -fUwPfHJ5elnNXkoOrJupmHN5fLT0zLm4BwyydFy4x2+IoZCn9Kr5v2c69BoVYh63 -n749sSmvZ6ES8lgQGVMDMBu4Gon2nL2XA46jCfMdiyHxtN/kHNGfZQIG6lzWE7OE -76KlXIx3KadowGuuQNKotOrN8I1LOJwZmhsoVLiJkO/KdYE+HvJkJMcYr07/R54H -9jVlpNMKVv/1F2Rs76giJUmTtt8AF9pYfl3uxRuw0dFfIRDH+fO6AgonB8Xx1sfT -4PsJYGw= ------END CERTIFICATE----- - -# Issuer: CN=Amazon Root CA 3 O=Amazon -# Subject: CN=Amazon Root CA 3 O=Amazon -# Label: "Amazon Root CA 3" -# Serial: 143266986699090766294700635381230934788665930 -# MD5 Fingerprint: a0:d4:ef:0b:f7:b5:d8:49:95:2a:ec:f5:c4:fc:81:87 -# SHA1 Fingerprint: 0d:44:dd:8c:3c:8c:1a:1a:58:75:64:81:e9:0f:2e:2a:ff:b3:d2:6e -# SHA256 Fingerprint: 18:ce:6c:fe:7b:f1:4e:60:b2:e3:47:b8:df:e8:68:cb:31:d0:2e:bb:3a:da:27:15:69:f5:03:43:b4:6d:b3:a4 ------BEGIN CERTIFICATE----- -MIIBtjCCAVugAwIBAgITBmyf1XSXNmY/Owua2eiedgPySjAKBggqhkjOPQQDAjA5 -MQswCQYDVQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24g -Um9vdCBDQSAzMB4XDTE1MDUyNjAwMDAwMFoXDTQwMDUyNjAwMDAwMFowOTELMAkG -A1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZMBcGA1UEAxMQQW1hem9uIFJvb3Qg -Q0EgMzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABCmXp8ZBf8ANm+gBG1bG8lKl -ui2yEujSLtf6ycXYqm0fc4E7O5hrOXwzpcVOho6AF2hiRVd9RFgdszflZwjrZt6j -QjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBSr -ttvXBp43rDCGB5Fwx5zEGbF4wDAKBggqhkjOPQQDAgNJADBGAiEA4IWSoxe3jfkr -BqWTrBqYaGFy+uGh0PsceGCmQ5nFuMQCIQCcAu/xlJyzlvnrxir4tiz+OpAUFteM -YyRIHN8wfdVoOw== ------END CERTIFICATE----- - -# Issuer: CN=Amazon Root CA 4 O=Amazon -# Subject: CN=Amazon Root CA 4 O=Amazon -# Label: "Amazon Root CA 4" -# Serial: 143266989758080763974105200630763877849284878 -# MD5 Fingerprint: 89:bc:27:d5:eb:17:8d:06:6a:69:d5:fd:89:47:b4:cd -# SHA1 Fingerprint: f6:10:84:07:d6:f8:bb:67:98:0c:c2:e2:44:c2:eb:ae:1c:ef:63:be -# SHA256 Fingerprint: e3:5d:28:41:9e:d0:20:25:cf:a6:90:38:cd:62:39:62:45:8d:a5:c6:95:fb:de:a3:c2:2b:0b:fb:25:89:70:92 ------BEGIN CERTIFICATE----- -MIIB8jCCAXigAwIBAgITBmyf18G7EEwpQ+Vxe3ssyBrBDjAKBggqhkjOPQQDAzA5 -MQswCQYDVQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24g -Um9vdCBDQSA0MB4XDTE1MDUyNjAwMDAwMFoXDTQwMDUyNjAwMDAwMFowOTELMAkG -A1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZMBcGA1UEAxMQQW1hem9uIFJvb3Qg -Q0EgNDB2MBAGByqGSM49AgEGBSuBBAAiA2IABNKrijdPo1MN/sGKe0uoe0ZLY7Bi -9i0b2whxIdIA6GO9mif78DluXeo9pcmBqqNbIJhFXRbb/egQbeOc4OO9X4Ri83Bk -M6DLJC9wuoihKqB1+IGuYgbEgds5bimwHvouXKNCMEAwDwYDVR0TAQH/BAUwAwEB -/zAOBgNVHQ8BAf8EBAMCAYYwHQYDVR0OBBYEFNPsxzplbszh2naaVvuc84ZtV+WB -MAoGCCqGSM49BAMDA2gAMGUCMDqLIfG9fhGt0O9Yli/W651+kI0rz2ZVwyzjKKlw -CkcO8DdZEv8tmZQoTipPNU0zWgIxAOp1AE47xDqUEpHJWEadIRNyp4iciuRMStuW -1KyLa2tJElMzrdfkviT8tQp21KW8EA== ------END CERTIFICATE----- - -# Issuer: CN=LuxTrust Global Root 2 O=LuxTrust S.A. -# Subject: CN=LuxTrust Global Root 2 O=LuxTrust S.A. -# Label: "LuxTrust Global Root 2" -# Serial: 59914338225734147123941058376788110305822489521 -# MD5 Fingerprint: b2:e1:09:00:61:af:f7:f1:91:6f:c4:ad:8d:5e:3b:7c -# SHA1 Fingerprint: 1e:0e:56:19:0a:d1:8b:25:98:b2:04:44:ff:66:8a:04:17:99:5f:3f -# SHA256 Fingerprint: 54:45:5f:71:29:c2:0b:14:47:c4:18:f9:97:16:8f:24:c5:8f:c5:02:3b:f5:da:5b:e2:eb:6e:1d:d8:90:2e:d5 ------BEGIN CERTIFICATE----- -MIIFwzCCA6ugAwIBAgIUCn6m30tEntpqJIWe5rgV0xZ/u7EwDQYJKoZIhvcNAQEL -BQAwRjELMAkGA1UEBhMCTFUxFjAUBgNVBAoMDUx1eFRydXN0IFMuQS4xHzAdBgNV -BAMMFkx1eFRydXN0IEdsb2JhbCBSb290IDIwHhcNMTUwMzA1MTMyMTU3WhcNMzUw -MzA1MTMyMTU3WjBGMQswCQYDVQQGEwJMVTEWMBQGA1UECgwNTHV4VHJ1c3QgUy5B -LjEfMB0GA1UEAwwWTHV4VHJ1c3QgR2xvYmFsIFJvb3QgMjCCAiIwDQYJKoZIhvcN -AQEBBQADggIPADCCAgoCggIBANeFl78RmOnwYoNMPIf5U2o3C/IPPIfOb9wmKb3F -ibrJgz337spbxm1Jc7TJRqMbNBM/wYlFV/TZsfs2ZUv7COJIcRHIbjuend+JZTem -hfY7RBi2xjcwYkSSl2l9QjAk5A0MiWtj3sXh306pFGxT4GHO9hcvHTy95iJMHZP1 -EMShduxq3sVs35a0VkBCwGKSMKEtFZSg0iAGCW5qbeXrt77U8PEVfIvmTroTzEsn -Xpk8F12PgX8zPU/TPxvsXD/wPEx1bvKm1Z3aLQdjAsZy6ZS8TEmVT4hSyNvoaYL4 -zDRbIvCGp4m9SAptZoFtyMhk+wHh9OHe2Z7d21vUKpkmFRseTJIpgp7VkoGSQXAZ -96Tlk0u8d2cx3Rz9MXANF5kM+Qw5GSoXtTBxVdUPrljhPS80m8+f9niFwpN6cj5m -j5wWEWCPnolvZ77gR1o7DJpni89Gxq44o/KnvObWhWszJHAiS8sIm7vI+AIpHb4g -DEa/a4ebsypmQjVGbKq6rfmYe+lQVRQxv7HaLe2ArWgk+2mr2HETMOZns4dA/Yl+ -8kPREd8vZS9kzl8UubG/Mb2HeFpZZYiq/FkySIbWTLkpS5XTdvN3JW1CHDiDTf2j -X5t/Lax5Gw5CMZdjpPuKadUiDTSQMC6otOBttpSsvItO13D8xTiOZCXhTTmQzsmH -hFhxAgMBAAGjgagwgaUwDwYDVR0TAQH/BAUwAwEB/zBCBgNVHSAEOzA5MDcGByuB -KwEBAQowLDAqBggrBgEFBQcCARYeaHR0cHM6Ly9yZXBvc2l0b3J5Lmx1eHRydXN0 -Lmx1MA4GA1UdDwEB/wQEAwIBBjAfBgNVHSMEGDAWgBT/GCh2+UgFLKGu8SsbK7JT -+Et8szAdBgNVHQ4EFgQU/xgodvlIBSyhrvErGyuyU/hLfLMwDQYJKoZIhvcNAQEL -BQADggIBAGoZFO1uecEsh9QNcH7X9njJCwROxLHOk3D+sFTAMs2ZMGQXvw/l4jP9 -BzZAcg4atmpZ1gDlaCDdLnINH2pkMSCEfUmmWjfrRcmF9dTHF5kH5ptV5AzoqbTO -jFu1EVzPig4N1qx3gf4ynCSecs5U89BvolbW7MM3LGVYvlcAGvI1+ut7MV3CwRI9 -loGIlonBWVx65n9wNOeD4rHh4bhY79SV5GCc8JaXcozrhAIuZY+kt9J/Z93I055c -qqmkoCUUBpvsT34tC38ddfEz2O3OuHVtPlu5mB0xDVbYQw8wkbIEa91WvpWAVWe+ -2M2D2RjuLg+GLZKecBPs3lHJQ3gCpU3I+V/EkVhGFndadKpAvAefMLmx9xIX3eP/ -JEAdemrRTxgKqpAd60Ae36EeRJIQmvKN4dFLRp7oRUKX6kWZ8+xm1QL68qZKJKre -zrnK+T+Tb/mjuuqlPpmt/f97mfVl7vBZKGfXkJWkE4SphMHozs51k2MavDzq1WQf -LSoSOcbDWjLtR5EWDrw4wVDej8oqkDQc7kGUnF4ZLvhFSZl0kbAEb+MEWrGrKqv+ -x9CWttrhSmQGbmBNvUJO/3jaJMobtNeWOWyu8Q6qp31IiyBMz2TWuJdGsE7RKlY6 -oJO9r4Ak4Ap+58rVyuiFVdw2KuGUaJPHZnJED4AhMmwlxyOAgwrr ------END CERTIFICATE----- - -# Issuer: CN=TUBITAK Kamu SM SSL Kok Sertifikasi - Surum 1 O=Turkiye Bilimsel ve Teknolojik Arastirma Kurumu - TUBITAK OU=Kamu Sertifikasyon Merkezi - Kamu SM -# Subject: CN=TUBITAK Kamu SM SSL Kok Sertifikasi - Surum 1 O=Turkiye Bilimsel ve Teknolojik Arastirma Kurumu - TUBITAK OU=Kamu Sertifikasyon Merkezi - Kamu SM -# Label: "TUBITAK Kamu SM SSL Kok Sertifikasi - Surum 1" -# Serial: 1 -# MD5 Fingerprint: dc:00:81:dc:69:2f:3e:2f:b0:3b:f6:3d:5a:91:8e:49 -# SHA1 Fingerprint: 31:43:64:9b:ec:ce:27:ec:ed:3a:3f:0b:8f:0d:e4:e8:91:dd:ee:ca -# SHA256 Fingerprint: 46:ed:c3:68:90:46:d5:3a:45:3f:b3:10:4a:b8:0d:ca:ec:65:8b:26:60:ea:16:29:dd:7e:86:79:90:64:87:16 ------BEGIN CERTIFICATE----- -MIIEYzCCA0ugAwIBAgIBATANBgkqhkiG9w0BAQsFADCB0jELMAkGA1UEBhMCVFIx -GDAWBgNVBAcTD0dlYnplIC0gS29jYWVsaTFCMEAGA1UEChM5VHVya2l5ZSBCaWxp -bXNlbCB2ZSBUZWtub2xvamlrIEFyYXN0aXJtYSBLdXJ1bXUgLSBUVUJJVEFLMS0w -KwYDVQQLEyRLYW11IFNlcnRpZmlrYXN5b24gTWVya2V6aSAtIEthbXUgU00xNjA0 -BgNVBAMTLVRVQklUQUsgS2FtdSBTTSBTU0wgS29rIFNlcnRpZmlrYXNpIC0gU3Vy -dW0gMTAeFw0xMzExMjUwODI1NTVaFw00MzEwMjUwODI1NTVaMIHSMQswCQYDVQQG -EwJUUjEYMBYGA1UEBxMPR2ViemUgLSBLb2NhZWxpMUIwQAYDVQQKEzlUdXJraXll -IEJpbGltc2VsIHZlIFRla25vbG9qaWsgQXJhc3Rpcm1hIEt1cnVtdSAtIFRVQklU -QUsxLTArBgNVBAsTJEthbXUgU2VydGlmaWthc3lvbiBNZXJrZXppIC0gS2FtdSBT -TTE2MDQGA1UEAxMtVFVCSVRBSyBLYW11IFNNIFNTTCBLb2sgU2VydGlmaWthc2kg -LSBTdXJ1bSAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAr3UwM6q7 -a9OZLBI3hNmNe5eA027n/5tQlT6QlVZC1xl8JoSNkvoBHToP4mQ4t4y86Ij5iySr -LqP1N+RAjhgleYN1Hzv/bKjFxlb4tO2KRKOrbEz8HdDc72i9z+SqzvBV96I01INr -N3wcwv61A+xXzry0tcXtAA9TNypN9E8Mg/uGz8v+jE69h/mniyFXnHrfA2eJLJ2X -YacQuFWQfw4tJzh03+f92k4S400VIgLI4OD8D62K18lUUMw7D8oWgITQUVbDjlZ/ -iSIzL+aFCr2lqBs23tPcLG07xxO9WSMs5uWk99gL7eqQQESolbuT1dCANLZGeA4f -AJNG4e7p+exPFwIDAQABo0IwQDAdBgNVHQ4EFgQUZT/HiobGPN08VFw1+DrtUgxH -V8gwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEL -BQADggEBACo/4fEyjq7hmFxLXs9rHmoJ0iKpEsdeV31zVmSAhHqT5Am5EM2fKifh -AHe+SMg1qIGf5LgsyX8OsNJLN13qudULXjS99HMpw+0mFZx+CFOKWI3QSyjfwbPf -IPP54+M638yclNhOT8NrF7f3cuitZjO1JVOr4PhMqZ398g26rrnZqsZr+ZO7rqu4 -lzwDGrpDxpa5RXI4s6ehlj2Re37AIVNMh+3yC1SVUZPVIqUNivGTDj5UDrDYyU7c -8jEyVupk+eq1nRZmQnLzf9OxMUP8pI4X8W0jq5Rm+K37DwhuJi1/FwcJsoz7UMCf -lo3Ptv0AnVoUmr8CRPXBwp8iXqIPoeM= ------END CERTIFICATE----- - -# Issuer: CN=GDCA TrustAUTH R5 ROOT O=GUANG DONG CERTIFICATE AUTHORITY CO.,LTD. -# Subject: CN=GDCA TrustAUTH R5 ROOT O=GUANG DONG CERTIFICATE AUTHORITY CO.,LTD. -# Label: "GDCA TrustAUTH R5 ROOT" -# Serial: 9009899650740120186 -# MD5 Fingerprint: 63:cc:d9:3d:34:35:5c:6f:53:a3:e2:08:70:48:1f:b4 -# SHA1 Fingerprint: 0f:36:38:5b:81:1a:25:c3:9b:31:4e:83:ca:e9:34:66:70:cc:74:b4 -# SHA256 Fingerprint: bf:ff:8f:d0:44:33:48:7d:6a:8a:a6:0c:1a:29:76:7a:9f:c2:bb:b0:5e:42:0f:71:3a:13:b9:92:89:1d:38:93 ------BEGIN CERTIFICATE----- -MIIFiDCCA3CgAwIBAgIIfQmX/vBH6nowDQYJKoZIhvcNAQELBQAwYjELMAkGA1UE -BhMCQ04xMjAwBgNVBAoMKUdVQU5HIERPTkcgQ0VSVElGSUNBVEUgQVVUSE9SSVRZ -IENPLixMVEQuMR8wHQYDVQQDDBZHRENBIFRydXN0QVVUSCBSNSBST09UMB4XDTE0 -MTEyNjA1MTMxNVoXDTQwMTIzMTE1NTk1OVowYjELMAkGA1UEBhMCQ04xMjAwBgNV -BAoMKUdVQU5HIERPTkcgQ0VSVElGSUNBVEUgQVVUSE9SSVRZIENPLixMVEQuMR8w -HQYDVQQDDBZHRENBIFRydXN0QVVUSCBSNSBST09UMIICIjANBgkqhkiG9w0BAQEF -AAOCAg8AMIICCgKCAgEA2aMW8Mh0dHeb7zMNOwZ+Vfy1YI92hhJCfVZmPoiC7XJj -Dp6L3TQsAlFRwxn9WVSEyfFrs0yw6ehGXTjGoqcuEVe6ghWinI9tsJlKCvLriXBj -TnnEt1u9ol2x8kECK62pOqPseQrsXzrj/e+APK00mxqriCZ7VqKChh/rNYmDf1+u -KU49tm7srsHwJ5uu4/Ts765/94Y9cnrrpftZTqfrlYwiOXnhLQiPzLyRuEH3FMEj -qcOtmkVEs7LXLM3GKeJQEK5cy4KOFxg2fZfmiJqwTTQJ9Cy5WmYqsBebnh52nUpm -MUHfP/vFBu8btn4aRjb3ZGM74zkYI+dndRTVdVeSN72+ahsmUPI2JgaQxXABZG12 -ZuGR224HwGGALrIuL4xwp9E7PLOR5G62xDtw8mySlwnNR30YwPO7ng/Wi64HtloP -zgsMR6flPri9fcebNaBhlzpBdRfMK5Z3KpIhHtmVdiBnaM8Nvd/WHwlqmuLMc3Gk -L30SgLdTMEZeS1SZD2fJpcjyIMGC7J0R38IC+xo70e0gmu9lZJIQDSri3nDxGGeC -jGHeuLzRL5z7D9Ar7Rt2ueQ5Vfj4oR24qoAATILnsn8JuLwwoC8N9VKejveSswoA -HQBUlwbgsQfZxw9cZX08bVlX5O2ljelAU58VS6Bx9hoh49pwBiFYFIeFd3mqgnkC -AwEAAaNCMEAwHQYDVR0OBBYEFOLJQJ9NzuiaoXzPDj9lxSmIahlRMA8GA1UdEwEB -/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEBCwUAA4ICAQDRSVfg -p8xoWLoBDysZzY2wYUWsEe1jUGn4H3++Fo/9nesLqjJHdtJnJO29fDMylyrHBYZm -DRd9FBUb1Ov9H5r2XpdptxolpAqzkT9fNqyL7FeoPueBihhXOYV0GkLH6VsTX4/5 -COmSdI31R9KrO9b7eGZONn356ZLpBN79SWP8bfsUcZNnL0dKt7n/HipzcEYwv1ry -L3ml4Y0M2fmyYzeMN2WFcGpcWwlyua1jPLHd+PwyvzeG5LuOmCd+uh8W4XAR8gPf -JWIyJyYYMoSf/wA6E7qaTfRPuBRwIrHKK5DOKcFw9C+df/KQHtZa37dG/OaG+svg -IHZ6uqbL9XzeYqWxi+7egmaKTjowHz+Ay60nugxe19CxVsp3cbK1daFQqUBDF8Io -2c9Si1vIY9RCPqAzekYu9wogRlR+ak8x8YF+QnQ4ZXMn7sZ8uI7XpTrXmKGcjBBV -09tL7ECQ8s1uV9JiDnxXk7Gnbc2dg7sq5+W2O3FYrf3RRbxake5TFW/TRQl1brqQ -XR4EzzffHqhmsYzmIGrv/EhOdJhCrylvLmrH+33RZjEizIYAfmaDDEL0vTSSwxrq -T8p+ck0LcIymSLumoRT2+1hEmRSuqguTaaApJUqlyyvdimYHFngVV3Eb7PVHhPOe -MTd61X8kreS8/f3MboPoDKi3QWwH3b08hpcv0g== ------END CERTIFICATE----- - -# Issuer: CN=TrustCor RootCert CA-1 O=TrustCor Systems S. de R.L. OU=TrustCor Certificate Authority -# Subject: CN=TrustCor RootCert CA-1 O=TrustCor Systems S. de R.L. OU=TrustCor Certificate Authority -# Label: "TrustCor RootCert CA-1" -# Serial: 15752444095811006489 -# MD5 Fingerprint: 6e:85:f1:dc:1a:00:d3:22:d5:b2:b2:ac:6b:37:05:45 -# SHA1 Fingerprint: ff:bd:cd:e7:82:c8:43:5e:3c:6f:26:86:5c:ca:a8:3a:45:5b:c3:0a -# SHA256 Fingerprint: d4:0e:9c:86:cd:8f:e4:68:c1:77:69:59:f4:9e:a7:74:fa:54:86:84:b6:c4:06:f3:90:92:61:f4:dc:e2:57:5c ------BEGIN CERTIFICATE----- -MIIEMDCCAxigAwIBAgIJANqb7HHzA7AZMA0GCSqGSIb3DQEBCwUAMIGkMQswCQYD -VQQGEwJQQTEPMA0GA1UECAwGUGFuYW1hMRQwEgYDVQQHDAtQYW5hbWEgQ2l0eTEk -MCIGA1UECgwbVHJ1c3RDb3IgU3lzdGVtcyBTLiBkZSBSLkwuMScwJQYDVQQLDB5U -cnVzdENvciBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkxHzAdBgNVBAMMFlRydXN0Q29y -IFJvb3RDZXJ0IENBLTEwHhcNMTYwMjA0MTIzMjE2WhcNMjkxMjMxMTcyMzE2WjCB -pDELMAkGA1UEBhMCUEExDzANBgNVBAgMBlBhbmFtYTEUMBIGA1UEBwwLUGFuYW1h -IENpdHkxJDAiBgNVBAoMG1RydXN0Q29yIFN5c3RlbXMgUy4gZGUgUi5MLjEnMCUG -A1UECwweVHJ1c3RDb3IgQ2VydGlmaWNhdGUgQXV0aG9yaXR5MR8wHQYDVQQDDBZU -cnVzdENvciBSb290Q2VydCBDQS0xMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB -CgKCAQEAv463leLCJhJrMxnHQFgKq1mqjQCj/IDHUHuO1CAmujIS2CNUSSUQIpid -RtLByZ5OGy4sDjjzGiVoHKZaBeYei0i/mJZ0PmnK6bV4pQa81QBeCQryJ3pS/C3V -seq0iWEk8xoT26nPUu0MJLq5nux+AHT6k61sKZKuUbS701e/s/OojZz0JEsq1pme -9J7+wH5COucLlVPat2gOkEz7cD+PSiyU8ybdY2mplNgQTsVHCJCZGxdNuWxu72CV -EY4hgLW9oHPY0LJ3xEXqWib7ZnZ2+AYfYW0PVcWDtxBWcgYHpfOxGgMFZA6dWorW -hnAbJN7+KIor0Gqw/Hqi3LJ5DotlDwIDAQABo2MwYTAdBgNVHQ4EFgQU7mtJPHo/ -DeOxCbeKyKsZn3MzUOcwHwYDVR0jBBgwFoAU7mtJPHo/DeOxCbeKyKsZn3MzUOcw -DwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAYYwDQYJKoZIhvcNAQELBQAD -ggEBACUY1JGPE+6PHh0RU9otRCkZoB5rMZ5NDp6tPVxBb5UrJKF5mDo4Nvu7Zp5I -/5CQ7z3UuJu0h3U/IJvOcs+hVcFNZKIZBqEHMwwLKeXx6quj7LUKdJDHfXLy11yf -ke+Ri7fc7Waiz45mO7yfOgLgJ90WmMCV1Aqk5IGadZQ1nJBfiDcGrVmVCrDRZ9MZ -yonnMlo2HD6CqFqTvsbQZJG2z9m2GM/bftJlo6bEjhcxwft+dtvTheNYsnd6djts -L1Ac59v2Z3kf9YKVmgenFK+P3CghZwnS1k1aHBkcjndcw5QkPTJrS37UeJSDvjdN -zl/HHk484IkzlQsPpTLWPFp5LBk= ------END CERTIFICATE----- - -# Issuer: CN=TrustCor RootCert CA-2 O=TrustCor Systems S. de R.L. OU=TrustCor Certificate Authority -# Subject: CN=TrustCor RootCert CA-2 O=TrustCor Systems S. de R.L. OU=TrustCor Certificate Authority -# Label: "TrustCor RootCert CA-2" -# Serial: 2711694510199101698 -# MD5 Fingerprint: a2:e1:f8:18:0b:ba:45:d5:c7:41:2a:bb:37:52:45:64 -# SHA1 Fingerprint: b8:be:6d:cb:56:f1:55:b9:63:d4:12:ca:4e:06:34:c7:94:b2:1c:c0 -# SHA256 Fingerprint: 07:53:e9:40:37:8c:1b:d5:e3:83:6e:39:5d:ae:a5:cb:83:9e:50:46:f1:bd:0e:ae:19:51:cf:10:fe:c7:c9:65 ------BEGIN CERTIFICATE----- -MIIGLzCCBBegAwIBAgIIJaHfyjPLWQIwDQYJKoZIhvcNAQELBQAwgaQxCzAJBgNV -BAYTAlBBMQ8wDQYDVQQIDAZQYW5hbWExFDASBgNVBAcMC1BhbmFtYSBDaXR5MSQw -IgYDVQQKDBtUcnVzdENvciBTeXN0ZW1zIFMuIGRlIFIuTC4xJzAlBgNVBAsMHlRy -dXN0Q29yIENlcnRpZmljYXRlIEF1dGhvcml0eTEfMB0GA1UEAwwWVHJ1c3RDb3Ig -Um9vdENlcnQgQ0EtMjAeFw0xNjAyMDQxMjMyMjNaFw0zNDEyMzExNzI2MzlaMIGk -MQswCQYDVQQGEwJQQTEPMA0GA1UECAwGUGFuYW1hMRQwEgYDVQQHDAtQYW5hbWEg -Q2l0eTEkMCIGA1UECgwbVHJ1c3RDb3IgU3lzdGVtcyBTLiBkZSBSLkwuMScwJQYD -VQQLDB5UcnVzdENvciBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkxHzAdBgNVBAMMFlRy -dXN0Q29yIFJvb3RDZXJ0IENBLTIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIK -AoICAQCnIG7CKqJiJJWQdsg4foDSq8GbZQWU9MEKENUCrO2fk8eHyLAnK0IMPQo+ -QVqedd2NyuCb7GgypGmSaIwLgQ5WoD4a3SwlFIIvl9NkRvRUqdw6VC0xK5mC8tkq -1+9xALgxpL56JAfDQiDyitSSBBtlVkxs1Pu2YVpHI7TYabS3OtB0PAx1oYxOdqHp -2yqlO/rOsP9+aij9JxzIsekp8VduZLTQwRVtDr4uDkbIXvRR/u8OYzo7cbrPb1nK -DOObXUm4TOJXsZiKQlecdu/vvdFoqNL0Cbt3Nb4lggjEFixEIFapRBF37120Hape -az6LMvYHL1cEksr1/p3C6eizjkxLAjHZ5DxIgif3GIJ2SDpxsROhOdUuxTTCHWKF -3wP+TfSvPd9cW436cOGlfifHhi5qjxLGhF5DUVCcGZt45vz27Ud+ez1m7xMTiF88 -oWP7+ayHNZ/zgp6kPwqcMWmLmaSISo5uZk3vFsQPeSghYA2FFn3XVDjxklb9tTNM -g9zXEJ9L/cb4Qr26fHMC4P99zVvh1Kxhe1fVSntb1IVYJ12/+CtgrKAmrhQhJ8Z3 -mjOAPF5GP/fDsaOGM8boXg25NSyqRsGFAnWAoOsk+xWq5Gd/bnc/9ASKL3x74xdh -8N0JqSDIvgmk0H5Ew7IwSjiqqewYmgeCK9u4nBit2uBGF6zPXQIDAQABo2MwYTAd -BgNVHQ4EFgQU2f4hQG6UnrybPZx9mCAZ5YwwYrIwHwYDVR0jBBgwFoAU2f4hQG6U -nrybPZx9mCAZ5YwwYrIwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAYYw -DQYJKoZIhvcNAQELBQADggIBAJ5Fngw7tu/hOsh80QA9z+LqBrWyOrsGS2h60COX -dKcs8AjYeVrXWoSK2BKaG9l9XE1wxaX5q+WjiYndAfrs3fnpkpfbsEZC89NiqpX+ -MWcUaViQCqoL7jcjx1BRtPV+nuN79+TMQjItSQzL/0kMmx40/W5ulop5A7Zv2wnL -/V9lFDfhOPXzYRZY5LVtDQsEGz9QLX+zx3oaFoBg+Iof6Rsqxvm6ARppv9JYx1RX -CI/hOWB3S6xZhBqI8d3LT3jX5+EzLfzuQfogsL7L9ziUwOHQhQ+77Sxzq+3+knYa -ZH9bDTMJBzN7Bj8RpFxwPIXAz+OQqIN3+tvmxYxoZxBnpVIt8MSZj3+/0WvitUfW -2dCFmU2Umw9Lje4AWkcdEQOsQRivh7dvDDqPys/cA8GiCcjl/YBeyGBCARsaU1q7 -N6a3vLqE6R5sGtRk2tRD/pOLS/IseRYQ1JMLiI+h2IYURpFHmygk71dSTlxCnKr3 -Sewn6EAes6aJInKc9Q0ztFijMDvd1GpUk74aTfOTlPf8hAs/hCBcNANExdqtvArB -As8e5ZTZ845b2EzwnexhF7sUMlQMAimTHpKG9n/v55IFDlndmQguLvqcAFLTxWYp -5KeXRKQOKIETNcX2b2TmQcTVL8w0RSXPQQCWPUouwpaYT05KnJe32x+SMsj/D1Fu -1uwJ ------END CERTIFICATE----- - -# Issuer: CN=TrustCor ECA-1 O=TrustCor Systems S. de R.L. OU=TrustCor Certificate Authority -# Subject: CN=TrustCor ECA-1 O=TrustCor Systems S. de R.L. OU=TrustCor Certificate Authority -# Label: "TrustCor ECA-1" -# Serial: 9548242946988625984 -# MD5 Fingerprint: 27:92:23:1d:0a:f5:40:7c:e9:e6:6b:9d:d8:f5:e7:6c -# SHA1 Fingerprint: 58:d1:df:95:95:67:6b:63:c0:f0:5b:1c:17:4d:8b:84:0b:c8:78:bd -# SHA256 Fingerprint: 5a:88:5d:b1:9c:01:d9:12:c5:75:93:88:93:8c:af:bb:df:03:1a:b2:d4:8e:91:ee:15:58:9b:42:97:1d:03:9c ------BEGIN CERTIFICATE----- -MIIEIDCCAwigAwIBAgIJAISCLF8cYtBAMA0GCSqGSIb3DQEBCwUAMIGcMQswCQYD -VQQGEwJQQTEPMA0GA1UECAwGUGFuYW1hMRQwEgYDVQQHDAtQYW5hbWEgQ2l0eTEk -MCIGA1UECgwbVHJ1c3RDb3IgU3lzdGVtcyBTLiBkZSBSLkwuMScwJQYDVQQLDB5U -cnVzdENvciBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkxFzAVBgNVBAMMDlRydXN0Q29y -IEVDQS0xMB4XDTE2MDIwNDEyMzIzM1oXDTI5MTIzMTE3MjgwN1owgZwxCzAJBgNV -BAYTAlBBMQ8wDQYDVQQIDAZQYW5hbWExFDASBgNVBAcMC1BhbmFtYSBDaXR5MSQw -IgYDVQQKDBtUcnVzdENvciBTeXN0ZW1zIFMuIGRlIFIuTC4xJzAlBgNVBAsMHlRy -dXN0Q29yIENlcnRpZmljYXRlIEF1dGhvcml0eTEXMBUGA1UEAwwOVHJ1c3RDb3Ig -RUNBLTEwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDPj+ARtZ+odnbb -3w9U73NjKYKtR8aja+3+XzP4Q1HpGjORMRegdMTUpwHmspI+ap3tDvl0mEDTPwOA -BoJA6LHip1GnHYMma6ve+heRK9jGrB6xnhkB1Zem6g23xFUfJ3zSCNV2HykVh0A5 -3ThFEXXQmqc04L/NyFIduUd+Dbi7xgz2c1cWWn5DkR9VOsZtRASqnKmcp0yJF4Ou -owReUoCLHhIlERnXDH19MURB6tuvsBzvgdAsxZohmz3tQjtQJvLsznFhBmIhVE5/ -wZ0+fyCMgMsq2JdiyIMzkX2woloPV+g7zPIlstR8L+xNxqE6FXrntl019fZISjZF -ZtS6mFjBAgMBAAGjYzBhMB0GA1UdDgQWBBREnkj1zG1I1KBLf/5ZJC+Dl5mahjAf -BgNVHSMEGDAWgBREnkj1zG1I1KBLf/5ZJC+Dl5mahjAPBgNVHRMBAf8EBTADAQH/ -MA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQsFAAOCAQEABT41XBVwm8nHc2Fv -civUwo/yQ10CzsSUuZQRg2dd4mdsdXa/uwyqNsatR5Nj3B5+1t4u/ukZMjgDfxT2 -AHMsWbEhBuH7rBiVDKP/mZb3Kyeb1STMHd3BOuCYRLDE5D53sXOpZCz2HAF8P11F -hcCF5yWPldwX8zyfGm6wyuMdKulMY/okYWLW2n62HGz1Ah3UKt1VkOsqEUc8Ll50 -soIipX1TH0XsJ5F95yIW6MBoNtjG8U+ARDL54dHRHareqKucBK+tIA5kmE2la8BI -WJZpTdwHjFGTot+fDz2LYLSCjaoITmJF4PkL0uDgPFveXHEnJcLmA4GLEFPjx1Wi -tJ/X5g== ------END CERTIFICATE----- - -# Issuer: CN=SSL.com Root Certification Authority RSA O=SSL Corporation -# Subject: CN=SSL.com Root Certification Authority RSA O=SSL Corporation -# Label: "SSL.com Root Certification Authority RSA" -# Serial: 8875640296558310041 -# MD5 Fingerprint: 86:69:12:c0:70:f1:ec:ac:ac:c2:d5:bc:a5:5b:a1:29 -# SHA1 Fingerprint: b7:ab:33:08:d1:ea:44:77:ba:14:80:12:5a:6f:bd:a9:36:49:0c:bb -# SHA256 Fingerprint: 85:66:6a:56:2e:e0:be:5c:e9:25:c1:d8:89:0a:6f:76:a8:7e:c1:6d:4d:7d:5f:29:ea:74:19:cf:20:12:3b:69 ------BEGIN CERTIFICATE----- -MIIF3TCCA8WgAwIBAgIIeyyb0xaAMpkwDQYJKoZIhvcNAQELBQAwfDELMAkGA1UE -BhMCVVMxDjAMBgNVBAgMBVRleGFzMRAwDgYDVQQHDAdIb3VzdG9uMRgwFgYDVQQK -DA9TU0wgQ29ycG9yYXRpb24xMTAvBgNVBAMMKFNTTC5jb20gUm9vdCBDZXJ0aWZp -Y2F0aW9uIEF1dGhvcml0eSBSU0EwHhcNMTYwMjEyMTczOTM5WhcNNDEwMjEyMTcz -OTM5WjB8MQswCQYDVQQGEwJVUzEOMAwGA1UECAwFVGV4YXMxEDAOBgNVBAcMB0hv -dXN0b24xGDAWBgNVBAoMD1NTTCBDb3Jwb3JhdGlvbjExMC8GA1UEAwwoU1NMLmNv -bSBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IFJTQTCCAiIwDQYJKoZIhvcN -AQEBBQADggIPADCCAgoCggIBAPkP3aMrfcvQKv7sZ4Wm5y4bunfh4/WvpOz6Sl2R -xFdHaxh3a3by/ZPkPQ/CFp4LZsNWlJ4Xg4XOVu/yFv0AYvUiCVToZRdOQbngT0aX -qhvIuG5iXmmxX9sqAn78bMrzQdjt0Oj8P2FI7bADFB0QDksZ4LtO7IZl/zbzXmcC -C52GVWH9ejjt/uIZALdvoVBidXQ8oPrIJZK0bnoix/geoeOy3ZExqysdBP+lSgQ3 -6YWkMyv94tZVNHwZpEpox7Ko07fKoZOI68GXvIz5HdkihCR0xwQ9aqkpk8zruFvh -/l8lqjRYyMEjVJ0bmBHDOJx+PYZspQ9AhnwC9FwCTyjLrnGfDzrIM/4RJTXq/LrF -YD3ZfBjVsqnTdXgDciLKOsMf7yzlLqn6niy2UUb9rwPW6mBo6oUWNmuF6R7As93E -JNyAKoFBbZQ+yODJgUEAnl6/f8UImKIYLEJAs/lvOCdLToD0PYFH4Ih86hzOtXVc -US4cK38acijnALXRdMbX5J+tB5O2UzU1/Dfkw/ZdFr4hc96SCvigY2q8lpJqPvi8 -ZVWb3vUNiSYE/CUapiVpy8JtynziWV+XrOvvLsi81xtZPCvM8hnIk2snYxnP/Okm -+Mpxm3+T/jRnhE6Z6/yzeAkzcLpmpnbtG3PrGqUNxCITIJRWCk4sbE6x/c+cCbqi -M+2HAgMBAAGjYzBhMB0GA1UdDgQWBBTdBAkHovV6fVJTEpKV7jiAJQ2mWTAPBgNV -HRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFN0ECQei9Xp9UlMSkpXuOIAlDaZZMA4G -A1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQsFAAOCAgEAIBgRlCn7Jp0cHh5wYfGV -cpNxJK1ok1iOMq8bs3AD/CUrdIWQPXhq9LmLpZc7tRiRux6n+UBbkflVma8eEdBc -Hadm47GUBwwyOabqG7B52B2ccETjit3E+ZUfijhDPwGFpUenPUayvOUiaPd7nNgs -PgohyC0zrL/FgZkxdMF1ccW+sfAjRfSda/wZY52jvATGGAslu1OJD7OAUN5F7kR/ -q5R4ZJjT9ijdh9hwZXT7DrkT66cPYakylszeu+1jTBi7qUD3oFRuIIhxdRjqerQ0 -cuAjJ3dctpDqhiVAq+8zD8ufgr6iIPv2tS0a5sKFsXQP+8hlAqRSAUfdSSLBv9jr -a6x+3uxjMxW3IwiPxg+NQVrdjsW5j+VFP3jbutIbQLH+cU0/4IGiul607BXgk90I -H37hVZkLId6Tngr75qNJvTYw/ud3sqB1l7UtgYgXZSD32pAAn8lSzDLKNXz1PQ/Y -K9f1JmzJBjSWFupwWRoyeXkLtoh/D1JIPb9s2KJELtFOt3JY04kTlf5Eq/jXixtu -nLwsoFvVagCvXzfh1foQC5ichucmj87w7G6KVwuA406ywKBjYZC6VWg3dGq2ktuf -oYYitmUnDuy2n0Jg5GfCtdpBC8TTi2EbvPofkSvXRAdeuims2cXp71NIWuuA8ShY -Ic2wBlX7Jz9TkHCpBB5XJ7k= ------END CERTIFICATE----- - -# Issuer: CN=SSL.com Root Certification Authority ECC O=SSL Corporation -# Subject: CN=SSL.com Root Certification Authority ECC O=SSL Corporation -# Label: "SSL.com Root Certification Authority ECC" -# Serial: 8495723813297216424 -# MD5 Fingerprint: 2e:da:e4:39:7f:9c:8f:37:d1:70:9f:26:17:51:3a:8e -# SHA1 Fingerprint: c3:19:7c:39:24:e6:54:af:1b:c4:ab:20:95:7a:e2:c3:0e:13:02:6a -# SHA256 Fingerprint: 34:17:bb:06:cc:60:07:da:1b:96:1c:92:0b:8a:b4:ce:3f:ad:82:0e:4a:a3:0b:9a:cb:c4:a7:4e:bd:ce:bc:65 ------BEGIN CERTIFICATE----- -MIICjTCCAhSgAwIBAgIIdebfy8FoW6gwCgYIKoZIzj0EAwIwfDELMAkGA1UEBhMC -VVMxDjAMBgNVBAgMBVRleGFzMRAwDgYDVQQHDAdIb3VzdG9uMRgwFgYDVQQKDA9T -U0wgQ29ycG9yYXRpb24xMTAvBgNVBAMMKFNTTC5jb20gUm9vdCBDZXJ0aWZpY2F0 -aW9uIEF1dGhvcml0eSBFQ0MwHhcNMTYwMjEyMTgxNDAzWhcNNDEwMjEyMTgxNDAz -WjB8MQswCQYDVQQGEwJVUzEOMAwGA1UECAwFVGV4YXMxEDAOBgNVBAcMB0hvdXN0 -b24xGDAWBgNVBAoMD1NTTCBDb3Jwb3JhdGlvbjExMC8GA1UEAwwoU1NMLmNvbSBS -b290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IEVDQzB2MBAGByqGSM49AgEGBSuB -BAAiA2IABEVuqVDEpiM2nl8ojRfLliJkP9x6jh3MCLOicSS6jkm5BBtHllirLZXI -7Z4INcgn64mMU1jrYor+8FsPazFSY0E7ic3s7LaNGdM0B9y7xgZ/wkWV7Mt/qCPg -CemB+vNH06NjMGEwHQYDVR0OBBYEFILRhXMw5zUE044CkvvlpNHEIejNMA8GA1Ud -EwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUgtGFczDnNQTTjgKS++Wk0cQh6M0wDgYD -VR0PAQH/BAQDAgGGMAoGCCqGSM49BAMCA2cAMGQCMG/n61kRpGDPYbCWe+0F+S8T -kdzt5fxQaxFGRrMcIQBiu77D5+jNB5n5DQtdcj7EqgIwH7y6C+IwJPt8bYBVCpk+ -gA0z5Wajs6O7pdWLjwkspl1+4vAHCGht0nxpbl/f5Wpl ------END CERTIFICATE----- - -# Issuer: CN=SSL.com EV Root Certification Authority RSA R2 O=SSL Corporation -# Subject: CN=SSL.com EV Root Certification Authority RSA R2 O=SSL Corporation -# Label: "SSL.com EV Root Certification Authority RSA R2" -# Serial: 6248227494352943350 -# MD5 Fingerprint: e1:1e:31:58:1a:ae:54:53:02:f6:17:6a:11:7b:4d:95 -# SHA1 Fingerprint: 74:3a:f0:52:9b:d0:32:a0:f4:4a:83:cd:d4:ba:a9:7b:7c:2e:c4:9a -# SHA256 Fingerprint: 2e:7b:f1:6c:c2:24:85:a7:bb:e2:aa:86:96:75:07:61:b0:ae:39:be:3b:2f:e9:d0:cc:6d:4e:f7:34:91:42:5c ------BEGIN CERTIFICATE----- -MIIF6zCCA9OgAwIBAgIIVrYpzTS8ePYwDQYJKoZIhvcNAQELBQAwgYIxCzAJBgNV -BAYTAlVTMQ4wDAYDVQQIDAVUZXhhczEQMA4GA1UEBwwHSG91c3RvbjEYMBYGA1UE -CgwPU1NMIENvcnBvcmF0aW9uMTcwNQYDVQQDDC5TU0wuY29tIEVWIFJvb3QgQ2Vy -dGlmaWNhdGlvbiBBdXRob3JpdHkgUlNBIFIyMB4XDTE3MDUzMTE4MTQzN1oXDTQy -MDUzMDE4MTQzN1owgYIxCzAJBgNVBAYTAlVTMQ4wDAYDVQQIDAVUZXhhczEQMA4G -A1UEBwwHSG91c3RvbjEYMBYGA1UECgwPU1NMIENvcnBvcmF0aW9uMTcwNQYDVQQD -DC5TU0wuY29tIEVWIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgUlNBIFIy -MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAjzZlQOHWTcDXtOlG2mvq -M0fNTPl9fb69LT3w23jhhqXZuglXaO1XPqDQCEGD5yhBJB/jchXQARr7XnAjssuf -OePPxU7Gkm0mxnu7s9onnQqG6YE3Bf7wcXHswxzpY6IXFJ3vG2fThVUCAtZJycxa -4bH3bzKfydQ7iEGonL3Lq9ttewkfokxykNorCPzPPFTOZw+oz12WGQvE43LrrdF9 -HSfvkusQv1vrO6/PgN3B0pYEW3p+pKk8OHakYo6gOV7qd89dAFmPZiw+B6KjBSYR -aZfqhbcPlgtLyEDhULouisv3D5oi53+aNxPN8k0TayHRwMwi8qFG9kRpnMphNQcA -b9ZhCBHqurj26bNg5U257J8UZslXWNvNh2n4ioYSA0e/ZhN2rHd9NCSFg83XqpyQ -Gp8hLH94t2S42Oim9HizVcuE0jLEeK6jj2HdzghTreyI/BXkmg3mnxp3zkyPuBQV -PWKchjgGAGYS5Fl2WlPAApiiECtoRHuOec4zSnaqW4EWG7WK2NAAe15itAnWhmMO -pgWVSbooi4iTsjQc2KRVbrcc0N6ZVTsj9CLg+SlmJuwgUHfbSguPvuUCYHBBXtSu -UDkiFCbLsjtzdFVHB3mBOagwE0TlBIqulhMlQg+5U8Sb/M3kHN48+qvWBkofZ6aY -MBzdLNvcGJVXZsb/XItW9XcCAwEAAaNjMGEwDwYDVR0TAQH/BAUwAwEB/zAfBgNV -HSMEGDAWgBT5YLvU49U09rj1BoAlp3PbRmmonjAdBgNVHQ4EFgQU+WC71OPVNPa4 -9QaAJadz20ZpqJ4wDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEBCwUAA4ICAQBW -s47LCp1Jjr+kxJG7ZhcFUZh1++VQLHqe8RT6q9OKPv+RKY9ji9i0qVQBDb6Thi/5 -Sm3HXvVX+cpVHBK+Rw82xd9qt9t1wkclf7nxY/hoLVUE0fKNsKTPvDxeH3jnpaAg -cLAExbf3cqfeIg29MyVGjGSSJuM+LmOW2puMPfgYCdcDzH2GguDKBAdRUNf/ktUM -79qGn5nX67evaOI5JpS6aLe/g9Pqemc9YmeuJeVy6OLk7K4S9ksrPJ/psEDzOFSz -/bdoyNrGj1E8svuR3Bznm53htw1yj+KkxKl4+esUrMZDBcJlOSgYAsOCsp0FvmXt -ll9ldDz7CTUue5wT/RsPXcdtgTpWD8w74a8CLyKsRspGPKAcTNZEtF4uXBVmCeEm -Kf7GUmG6sXP/wwyc5WxqlD8UykAWlYTzWamsX0xhk23RO8yilQwipmdnRC652dKK -QbNmC1r7fSOl8hqw/96bg5Qu0T/fkreRrwU7ZcegbLHNYhLDkBvjJc40vG93drEQ -w/cFGsDWr3RiSBd3kmmQYRzelYB0VI8YHMPzA9C/pEN1hlMYegouCRw2n5H9gooi -S9EOUCXdywMMF8mDAAhONU2Ki+3wApRmLER/y5UnlhetCTCstnEXbosX9hwJ1C07 -mKVx01QT2WDz9UtmT/rx7iASjbSsV7FFY6GsdqnC+w== ------END CERTIFICATE----- - -# Issuer: CN=SSL.com EV Root Certification Authority ECC O=SSL Corporation -# Subject: CN=SSL.com EV Root Certification Authority ECC O=SSL Corporation -# Label: "SSL.com EV Root Certification Authority ECC" -# Serial: 3182246526754555285 -# MD5 Fingerprint: 59:53:22:65:83:42:01:54:c0:ce:42:b9:5a:7c:f2:90 -# SHA1 Fingerprint: 4c:dd:51:a3:d1:f5:20:32:14:b0:c6:c5:32:23:03:91:c7:46:42:6d -# SHA256 Fingerprint: 22:a2:c1:f7:bd:ed:70:4c:c1:e7:01:b5:f4:08:c3:10:88:0f:e9:56:b5:de:2a:4a:44:f9:9c:87:3a:25:a7:c8 ------BEGIN CERTIFICATE----- -MIIClDCCAhqgAwIBAgIILCmcWxbtBZUwCgYIKoZIzj0EAwIwfzELMAkGA1UEBhMC -VVMxDjAMBgNVBAgMBVRleGFzMRAwDgYDVQQHDAdIb3VzdG9uMRgwFgYDVQQKDA9T -U0wgQ29ycG9yYXRpb24xNDAyBgNVBAMMK1NTTC5jb20gRVYgUm9vdCBDZXJ0aWZp -Y2F0aW9uIEF1dGhvcml0eSBFQ0MwHhcNMTYwMjEyMTgxNTIzWhcNNDEwMjEyMTgx -NTIzWjB/MQswCQYDVQQGEwJVUzEOMAwGA1UECAwFVGV4YXMxEDAOBgNVBAcMB0hv -dXN0b24xGDAWBgNVBAoMD1NTTCBDb3Jwb3JhdGlvbjE0MDIGA1UEAwwrU1NMLmNv -bSBFViBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IEVDQzB2MBAGByqGSM49 -AgEGBSuBBAAiA2IABKoSR5CYG/vvw0AHgyBO8TCCogbR8pKGYfL2IWjKAMTH6kMA -VIbc/R/fALhBYlzccBYy3h+Z1MzFB8gIH2EWB1E9fVwHU+M1OIzfzZ/ZLg1Kthku -WnBaBu2+8KGwytAJKaNjMGEwHQYDVR0OBBYEFFvKXuXe0oGqzagtZFG22XKbl+ZP -MA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUW8pe5d7SgarNqC1kUbbZcpuX -5k8wDgYDVR0PAQH/BAQDAgGGMAoGCCqGSM49BAMCA2gAMGUCMQCK5kCJN+vp1RPZ -ytRrJPOwPYdGWBrssd9v+1a6cGvHOMzosYxPD/fxZ3YOg9AeUY8CMD32IygmTMZg -h5Mmm7I1HrrW9zzRHM76JTymGoEVW/MSD2zuZYrJh6j5B+BimoxcSg== ------END CERTIFICATE----- - -# Issuer: CN=GlobalSign O=GlobalSign OU=GlobalSign Root CA - R6 -# Subject: CN=GlobalSign O=GlobalSign OU=GlobalSign Root CA - R6 -# Label: "GlobalSign Root CA - R6" -# Serial: 1417766617973444989252670301619537 -# MD5 Fingerprint: 4f:dd:07:e4:d4:22:64:39:1e:0c:37:42:ea:d1:c6:ae -# SHA1 Fingerprint: 80:94:64:0e:b5:a7:a1:ca:11:9c:1f:dd:d5:9f:81:02:63:a7:fb:d1 -# SHA256 Fingerprint: 2c:ab:ea:fe:37:d0:6c:a2:2a:ba:73:91:c0:03:3d:25:98:29:52:c4:53:64:73:49:76:3a:3a:b5:ad:6c:cf:69 ------BEGIN CERTIFICATE----- -MIIFgzCCA2ugAwIBAgIORea7A4Mzw4VlSOb/RVEwDQYJKoZIhvcNAQEMBQAwTDEg -MB4GA1UECxMXR2xvYmFsU2lnbiBSb290IENBIC0gUjYxEzARBgNVBAoTCkdsb2Jh -bFNpZ24xEzARBgNVBAMTCkdsb2JhbFNpZ24wHhcNMTQxMjEwMDAwMDAwWhcNMzQx -MjEwMDAwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxTaWduIFJvb3QgQ0EgLSBSNjET -MBEGA1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2lnbjCCAiIwDQYJ -KoZIhvcNAQEBBQADggIPADCCAgoCggIBAJUH6HPKZvnsFMp7PPcNCPG0RQssgrRI -xutbPK6DuEGSMxSkb3/pKszGsIhrxbaJ0cay/xTOURQh7ErdG1rG1ofuTToVBu1k -ZguSgMpE3nOUTvOniX9PeGMIyBJQbUJmL025eShNUhqKGoC3GYEOfsSKvGRMIRxD -aNc9PIrFsmbVkJq3MQbFvuJtMgamHvm566qjuL++gmNQ0PAYid/kD3n16qIfKtJw -LnvnvJO7bVPiSHyMEAc4/2ayd2F+4OqMPKq0pPbzlUoSB239jLKJz9CgYXfIWHSw -1CM69106yqLbnQneXUQtkPGBzVeS+n68UARjNN9rkxi+azayOeSsJDa38O+2HBNX -k7besvjihbdzorg1qkXy4J02oW9UivFyVm4uiMVRQkQVlO6jxTiWm05OWgtH8wY2 -SXcwvHE35absIQh1/OZhFj931dmRl4QKbNQCTXTAFO39OfuD8l4UoQSwC+n+7o/h -bguyCLNhZglqsQY6ZZZZwPA1/cnaKI0aEYdwgQqomnUdnjqGBQCe24DWJfncBZ4n -WUx2OVvq+aWh2IMP0f/fMBH5hc8zSPXKbWQULHpYT9NLCEnFlWQaYw55PfWzjMpY -rZxCRXluDocZXFSxZba/jJvcE+kNb7gu3GduyYsRtYQUigAZcIN5kZeR1Bonvzce -MgfYFGM8KEyvAgMBAAGjYzBhMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTAD -AQH/MB0GA1UdDgQWBBSubAWjkxPioufi1xzWx/B/yGdToDAfBgNVHSMEGDAWgBSu -bAWjkxPioufi1xzWx/B/yGdToDANBgkqhkiG9w0BAQwFAAOCAgEAgyXt6NH9lVLN -nsAEoJFp5lzQhN7craJP6Ed41mWYqVuoPId8AorRbrcWc+ZfwFSY1XS+wc3iEZGt -Ixg93eFyRJa0lV7Ae46ZeBZDE1ZXs6KzO7V33EByrKPrmzU+sQghoefEQzd5Mr61 -55wsTLxDKZmOMNOsIeDjHfrYBzN2VAAiKrlNIC5waNrlU/yDXNOd8v9EDERm8tLj -vUYAGm0CuiVdjaExUd1URhxN25mW7xocBFymFe944Hn+Xds+qkxV/ZoVqW/hpvvf -cDDpw+5CRu3CkwWJ+n1jez/QcYF8AOiYrg54NMMl+68KnyBr3TsTjxKM4kEaSHpz -oHdpx7Zcf4LIHv5YGygrqGytXm3ABdJ7t+uA/iU3/gKbaKxCXcPu9czc8FB10jZp -nOZ7BN9uBmm23goJSFmH63sUYHpkqmlD75HHTOwY3WzvUy2MmeFe8nI+z1TIvWfs -pA9MRf/TuTAjB0yPEL+GltmZWrSZVxykzLsViVO6LAUP5MSeGbEYNNVMnbrt9x+v -JJUEeKgDu+6B5dpffItKoZB0JaezPkvILFa9x8jvOOJckvB595yEunQtYQEgfn7R -8k8HWV+LLUNS60YMlOH1Zkd5d9VUWx+tJDfLRVpOoERIyNiwmcUVhAn21klJwGW4 -5hpxbqCo8YLoRT5s1gLXCmeDBVrJpBA= ------END CERTIFICATE----- - -# Issuer: CN=OISTE WISeKey Global Root GC CA O=WISeKey OU=OISTE Foundation Endorsed -# Subject: CN=OISTE WISeKey Global Root GC CA O=WISeKey OU=OISTE Foundation Endorsed -# Label: "OISTE WISeKey Global Root GC CA" -# Serial: 44084345621038548146064804565436152554 -# MD5 Fingerprint: a9:d6:b9:2d:2f:93:64:f8:a5:69:ca:91:e9:68:07:23 -# SHA1 Fingerprint: e0:11:84:5e:34:de:be:88:81:b9:9c:f6:16:26:d1:96:1f:c3:b9:31 -# SHA256 Fingerprint: 85:60:f9:1c:36:24:da:ba:95:70:b5:fe:a0:db:e3:6f:f1:1a:83:23:be:94:86:85:4f:b3:f3:4a:55:71:19:8d ------BEGIN CERTIFICATE----- -MIICaTCCAe+gAwIBAgIQISpWDK7aDKtARb8roi066jAKBggqhkjOPQQDAzBtMQsw -CQYDVQQGEwJDSDEQMA4GA1UEChMHV0lTZUtleTEiMCAGA1UECxMZT0lTVEUgRm91 -bmRhdGlvbiBFbmRvcnNlZDEoMCYGA1UEAxMfT0lTVEUgV0lTZUtleSBHbG9iYWwg -Um9vdCBHQyBDQTAeFw0xNzA1MDkwOTQ4MzRaFw00MjA1MDkwOTU4MzNaMG0xCzAJ -BgNVBAYTAkNIMRAwDgYDVQQKEwdXSVNlS2V5MSIwIAYDVQQLExlPSVNURSBGb3Vu -ZGF0aW9uIEVuZG9yc2VkMSgwJgYDVQQDEx9PSVNURSBXSVNlS2V5IEdsb2JhbCBS -b290IEdDIENBMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAETOlQwMYPchi82PG6s4ni -eUqjFqdrVCTbUf/q9Akkwwsin8tqJ4KBDdLArzHkdIJuyiXZjHWd8dvQmqJLIX4W -p2OQ0jnUsYd4XxiWD1AbNTcPasbc2RNNpI6QN+a9WzGRo1QwUjAOBgNVHQ8BAf8E -BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUSIcUrOPDnpBgOtfKie7T -rYy0UGYwEAYJKwYBBAGCNxUBBAMCAQAwCgYIKoZIzj0EAwMDaAAwZQIwJsdpW9zV -57LnyAyMjMPdeYwbY9XJUpROTYJKcx6ygISpJcBMWm1JKWB4E+J+SOtkAjEA2zQg -Mgj/mkkCtojeFK9dbJlxjRo/i9fgojaGHAeCOnZT/cKi7e97sIBPWA9LUzm9 ------END CERTIFICATE----- - -# Issuer: CN=GTS Root R1 O=Google Trust Services LLC -# Subject: CN=GTS Root R1 O=Google Trust Services LLC -# Label: "GTS Root R1" -# Serial: 146587175971765017618439757810265552097 -# MD5 Fingerprint: 82:1a:ef:d4:d2:4a:f2:9f:e2:3d:97:06:14:70:72:85 -# SHA1 Fingerprint: e1:c9:50:e6:ef:22:f8:4c:56:45:72:8b:92:20:60:d7:d5:a7:a3:e8 -# SHA256 Fingerprint: 2a:57:54:71:e3:13:40:bc:21:58:1c:bd:2c:f1:3e:15:84:63:20:3e:ce:94:bc:f9:d3:cc:19:6b:f0:9a:54:72 ------BEGIN CERTIFICATE----- -MIIFWjCCA0KgAwIBAgIQbkepxUtHDA3sM9CJuRz04TANBgkqhkiG9w0BAQwFADBH -MQswCQYDVQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExM -QzEUMBIGA1UEAxMLR1RTIFJvb3QgUjEwHhcNMTYwNjIyMDAwMDAwWhcNMzYwNjIy -MDAwMDAwWjBHMQswCQYDVQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNl -cnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjEwggIiMA0GCSqGSIb3DQEB -AQUAA4ICDwAwggIKAoICAQC2EQKLHuOhd5s73L+UPreVp0A8of2C+X0yBoJx9vaM -f/vo27xqLpeXo4xL+Sv2sfnOhB2x+cWX3u+58qPpvBKJXqeqUqv4IyfLpLGcY9vX -mX7wCl7raKb0xlpHDU0QM+NOsROjyBhsS+z8CZDfnWQpJSMHobTSPS5g4M/SCYe7 -zUjwTcLCeoiKu7rPWRnWr4+wB7CeMfGCwcDfLqZtbBkOtdh+JhpFAz2weaSUKK0P -fyblqAj+lug8aJRT7oM6iCsVlgmy4HqMLnXWnOunVmSPlk9orj2XwoSPwLxAwAtc -vfaHszVsrBhQf4TgTM2S0yDpM7xSma8ytSmzJSq0SPly4cpk9+aCEI3oncKKiPo4 -Zor8Y/kB+Xj9e1x3+naH+uzfsQ55lVe0vSbv1gHR6xYKu44LtcXFilWr06zqkUsp -zBmkMiVOKvFlRNACzqrOSbTqn3yDsEB750Orp2yjj32JgfpMpf/VjsPOS+C12LOO -Rc92wO1AK/1TD7Cn1TsNsYqiA94xrcx36m97PtbfkSIS5r762DL8EGMUUXLeXdYW -k70paDPvOmbsB4om3xPXV2V4J95eSRQAogB/mqghtqmxlbCluQ0WEdrHbEg8QOB+ -DVrNVjzRlwW5y0vtOUucxD/SVRNuJLDWcfr0wbrM7Rv1/oFB2ACYPTrIrnqYNxgF -lQIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNV -HQ4EFgQU5K8rJnEaK0gnhS9SZizv8IkTcT4wDQYJKoZIhvcNAQEMBQADggIBADiW -Cu49tJYeX++dnAsznyvgyv3SjgofQXSlfKqE1OXyHuY3UjKcC9FhHb8owbZEKTV1 -d5iyfNm9dKyKaOOpMQkpAWBz40d8U6iQSifvS9efk+eCNs6aaAyC58/UEBZvXw6Z -XPYfcX3v73svfuo21pdwCxXu11xWajOl40k4DLh9+42FpLFZXvRq4d2h9mREruZR -gyFmxhE+885H7pwoHyXa/6xmld01D1zvICxi/ZG6qcz8WpyTgYMpl0p8WnK0OdC3 -d8t5/Wk6kjftbjhlRn7pYL15iJdfOBL07q9bgsiG1eGZbYwE8na6SfZu6W0eX6Dv -J4J2QPim01hcDyxC2kLGe4g0x8HYRZvBPsVhHdljUEn2NIVq4BjFbkerQUIpm/Zg -DdIx02OYI5NaAIFItO/Nis3Jz5nu2Z6qNuFoS3FJFDYoOj0dzpqPJeaAcWErtXvM -+SUWgeExX6GjfhaknBZqlxi9dnKlC54dNuYvoS++cJEPqOba+MSSQGwlfnuzCdyy -F62ARPBopY+Udf90WuioAnwMCeKpSwughQtiue+hMZL77/ZRBIls6Kl0obsXs7X9 -SQ98POyDGCBDTtWTurQ0sR8WNh8M5mQ5Fkzc4P4dyKliPUDqysU0ArSuiYgzNdws -E3PYJ/HQcu51OyLemGhmW/HGY0dVHLqlCFF1pkgl ------END CERTIFICATE----- - -# Issuer: CN=GTS Root R2 O=Google Trust Services LLC -# Subject: CN=GTS Root R2 O=Google Trust Services LLC -# Label: "GTS Root R2" -# Serial: 146587176055767053814479386953112547951 -# MD5 Fingerprint: 44:ed:9a:0e:a4:09:3b:00:f2:ae:4c:a3:c6:61:b0:8b -# SHA1 Fingerprint: d2:73:96:2a:2a:5e:39:9f:73:3f:e1:c7:1e:64:3f:03:38:34:fc:4d -# SHA256 Fingerprint: c4:5d:7b:b0:8e:6d:67:e6:2e:42:35:11:0b:56:4e:5f:78:fd:92:ef:05:8c:84:0a:ea:4e:64:55:d7:58:5c:60 ------BEGIN CERTIFICATE----- -MIIFWjCCA0KgAwIBAgIQbkepxlqz5yDFMJo/aFLybzANBgkqhkiG9w0BAQwFADBH -MQswCQYDVQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExM -QzEUMBIGA1UEAxMLR1RTIFJvb3QgUjIwHhcNMTYwNjIyMDAwMDAwWhcNMzYwNjIy -MDAwMDAwWjBHMQswCQYDVQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNl -cnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjIwggIiMA0GCSqGSIb3DQEB -AQUAA4ICDwAwggIKAoICAQDO3v2m++zsFDQ8BwZabFn3GTXd98GdVarTzTukk3Lv -CvptnfbwhYBboUhSnznFt+4orO/LdmgUud+tAWyZH8QiHZ/+cnfgLFuv5AS/T3Kg -GjSY6Dlo7JUle3ah5mm5hRm9iYz+re026nO8/4Piy33B0s5Ks40FnotJk9/BW9Bu -XvAuMC6C/Pq8tBcKSOWIm8Wba96wyrQD8Nr0kLhlZPdcTK3ofmZemde4wj7I0BOd -re7kRXuJVfeKH2JShBKzwkCX44ofR5GmdFrS+LFjKBC4swm4VndAoiaYecb+3yXu -PuWgf9RhD1FLPD+M2uFwdNjCaKH5wQzpoeJ/u1U8dgbuak7MkogwTZq9TwtImoS1 -mKPV+3PBV2HdKFZ1E66HjucMUQkQdYhMvI35ezzUIkgfKtzra7tEscszcTJGr61K -8YzodDqs5xoic4DSMPclQsciOzsSrZYuxsN2B6ogtzVJV+mSSeh2FnIxZyuWfoqj -x5RWIr9qS34BIbIjMt/kmkRtWVtd9QCgHJvGeJeNkP+byKq0rxFROV7Z+2et1VsR -nTKaG73VululycslaVNVJ1zgyjbLiGH7HrfQy+4W+9OmTN6SpdTi3/UGVN4unUu0 -kzCqgc7dGtxRcw1PcOnlthYhGXmy5okLdWTK1au8CcEYof/UVKGFPP0UJAOyh9Ok -twIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNV -HQ4EFgQUu//KjiOfT5nK2+JopqUVJxce2Q4wDQYJKoZIhvcNAQEMBQADggIBALZp -8KZ3/p7uC4Gt4cCpx/k1HUCCq+YEtN/L9x0Pg/B+E02NjO7jMyLDOfxA325BS0JT -vhaI8dI4XsRomRyYUpOM52jtG2pzegVATX9lO9ZY8c6DR2Dj/5epnGB3GFW1fgiT -z9D2PGcDFWEJ+YF59exTpJ/JjwGLc8R3dtyDovUMSRqodt6Sm2T4syzFJ9MHwAiA -pJiS4wGWAqoC7o87xdFtCjMwc3i5T1QWvwsHoaRc5svJXISPD+AVdyx+Jn7axEvb -pxZ3B7DNdehyQtaVhJ2Gg/LkkM0JR9SLA3DaWsYDQvTtN6LwG1BUSw7YhN4ZKJmB -R64JGz9I0cNv4rBgF/XuIwKl2gBbbZCr7qLpGzvpx0QnRY5rn/WkhLx3+WuXrD5R -RaIRpsyF7gpo8j5QOHokYh4XIDdtak23CZvJ/KRY9bb7nE4Yu5UC56GtmwfuNmsk -0jmGwZODUNKBRqhfYlcsu2xkiAhu7xNUX90txGdj08+JN7+dIPT7eoOboB6BAFDC -5AwiWVIQ7UNWhwD4FFKnHYuTjKJNRn8nxnGbJN7k2oaLDX5rIMHAnuFl2GqjpuiF -izoHCBy69Y9Vmhh1fuXsgWbRIXOhNUQLgD1bnF5vKheW0YMjiGZt5obicDIvUiLn -yOd/xCxgXS/Dr55FBcOEArf9LAhST4Ldo/DUhgkC ------END CERTIFICATE----- - -# Issuer: CN=GTS Root R3 O=Google Trust Services LLC -# Subject: CN=GTS Root R3 O=Google Trust Services LLC -# Label: "GTS Root R3" -# Serial: 146587176140553309517047991083707763997 -# MD5 Fingerprint: 1a:79:5b:6b:04:52:9c:5d:c7:74:33:1b:25:9a:f9:25 -# SHA1 Fingerprint: 30:d4:24:6f:07:ff:db:91:89:8a:0b:e9:49:66:11:eb:8c:5e:46:e5 -# SHA256 Fingerprint: 15:d5:b8:77:46:19:ea:7d:54:ce:1c:a6:d0:b0:c4:03:e0:37:a9:17:f1:31:e8:a0:4e:1e:6b:7a:71:ba:bc:e5 ------BEGIN CERTIFICATE----- -MIICDDCCAZGgAwIBAgIQbkepx2ypcyRAiQ8DVd2NHTAKBggqhkjOPQQDAzBHMQsw -CQYDVQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEU -MBIGA1UEAxMLR1RTIFJvb3QgUjMwHhcNMTYwNjIyMDAwMDAwWhcNMzYwNjIyMDAw -MDAwWjBHMQswCQYDVQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZp -Y2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjMwdjAQBgcqhkjOPQIBBgUrgQQA -IgNiAAQfTzOHMymKoYTey8chWEGJ6ladK0uFxh1MJ7x/JlFyb+Kf1qPKzEUURout -736GjOyxfi//qXGdGIRFBEFVbivqJn+7kAHjSxm65FSWRQmx1WyRRK2EE46ajA2A -DDL24CejQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1Ud -DgQWBBTB8Sa6oC2uhYHP0/EqEr24Cmf9vDAKBggqhkjOPQQDAwNpADBmAjEAgFuk -fCPAlaUs3L6JbyO5o91lAFJekazInXJ0glMLfalAvWhgxeG4VDvBNhcl2MG9AjEA -njWSdIUlUfUk7GRSJFClH9voy8l27OyCbvWFGFPouOOaKaqW04MjyaR7YbPMAuhd ------END CERTIFICATE----- - -# Issuer: CN=GTS Root R4 O=Google Trust Services LLC -# Subject: CN=GTS Root R4 O=Google Trust Services LLC -# Label: "GTS Root R4" -# Serial: 146587176229350439916519468929765261721 -# MD5 Fingerprint: 5d:b6:6a:c4:60:17:24:6a:1a:99:a8:4b:ee:5e:b4:26 -# SHA1 Fingerprint: 2a:1d:60:27:d9:4a:b1:0a:1c:4d:91:5c:cd:33:a0:cb:3e:2d:54:cb -# SHA256 Fingerprint: 71:cc:a5:39:1f:9e:79:4b:04:80:25:30:b3:63:e1:21:da:8a:30:43:bb:26:66:2f:ea:4d:ca:7f:c9:51:a4:bd ------BEGIN CERTIFICATE----- -MIICCjCCAZGgAwIBAgIQbkepyIuUtui7OyrYorLBmTAKBggqhkjOPQQDAzBHMQsw -CQYDVQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEU -MBIGA1UEAxMLR1RTIFJvb3QgUjQwHhcNMTYwNjIyMDAwMDAwWhcNMzYwNjIyMDAw -MDAwWjBHMQswCQYDVQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZp -Y2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjQwdjAQBgcqhkjOPQIBBgUrgQQA -IgNiAATzdHOnaItgrkO4NcWBMHtLSZ37wWHO5t5GvWvVYRg1rkDdc/eJkTBa6zzu -hXyiQHY7qca4R9gq55KRanPpsXI5nymfopjTX15YhmUPoYRlBtHci8nHc8iMai/l -xKvRHYqjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1Ud -DgQWBBSATNbrdP9JNqPV2Py1PsVq8JQdjDAKBggqhkjOPQQDAwNnADBkAjBqUFJ0 -CMRw3J5QdCHojXohw0+WbhXRIjVhLfoIN+4Zba3bssx9BzT1YBkstTTZbyACMANx -sbqjYAuG7ZoIapVon+Kz4ZNkfF6Tpt95LY2F45TPI11xzPKwTdb+mciUqXWi4w== ------END CERTIFICATE----- - -# Issuer: CN=UCA Global G2 Root O=UniTrust -# Subject: CN=UCA Global G2 Root O=UniTrust -# Label: "UCA Global G2 Root" -# Serial: 124779693093741543919145257850076631279 -# MD5 Fingerprint: 80:fe:f0:c4:4a:f0:5c:62:32:9f:1c:ba:78:a9:50:f8 -# SHA1 Fingerprint: 28:f9:78:16:19:7a:ff:18:25:18:aa:44:fe:c1:a0:ce:5c:b6:4c:8a -# SHA256 Fingerprint: 9b:ea:11:c9:76:fe:01:47:64:c1:be:56:a6:f9:14:b5:a5:60:31:7a:bd:99:88:39:33:82:e5:16:1a:a0:49:3c ------BEGIN CERTIFICATE----- -MIIFRjCCAy6gAwIBAgIQXd+x2lqj7V2+WmUgZQOQ7zANBgkqhkiG9w0BAQsFADA9 -MQswCQYDVQQGEwJDTjERMA8GA1UECgwIVW5pVHJ1c3QxGzAZBgNVBAMMElVDQSBH -bG9iYWwgRzIgUm9vdDAeFw0xNjAzMTEwMDAwMDBaFw00MDEyMzEwMDAwMDBaMD0x -CzAJBgNVBAYTAkNOMREwDwYDVQQKDAhVbmlUcnVzdDEbMBkGA1UEAwwSVUNBIEds -b2JhbCBHMiBSb290MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAxeYr -b3zvJgUno4Ek2m/LAfmZmqkywiKHYUGRO8vDaBsGxUypK8FnFyIdK+35KYmToni9 -kmugow2ifsqTs6bRjDXVdfkX9s9FxeV67HeToI8jrg4aA3++1NDtLnurRiNb/yzm -VHqUwCoV8MmNsHo7JOHXaOIxPAYzRrZUEaalLyJUKlgNAQLx+hVRZ2zA+te2G3/R -VogvGjqNO7uCEeBHANBSh6v7hn4PJGtAnTRnvI3HLYZveT6OqTwXS3+wmeOwcWDc -C/Vkw85DvG1xudLeJ1uK6NjGruFZfc8oLTW4lVYa8bJYS7cSN8h8s+1LgOGN+jIj -tm+3SJUIsUROhYw6AlQgL9+/V087OpAh18EmNVQg7Mc/R+zvWr9LesGtOxdQXGLY -D0tK3Cv6brxzks3sx1DoQZbXqX5t2Okdj4q1uViSukqSKwxW/YDrCPBeKW4bHAyv -j5OJrdu9o54hyokZ7N+1wxrrFv54NkzWbtA+FxyQF2smuvt6L78RHBgOLXMDj6Dl -NaBa4kx1HXHhOThTeEDMg5PXCp6dW4+K5OXgSORIskfNTip1KnvyIvbJvgmRlld6 -iIis7nCs+dwp4wwcOxJORNanTrAmyPPZGpeRaOrvjUYG0lZFWJo8DA+DuAUlwznP -O6Q0ibd5Ei9Hxeepl2n8pndntd978XplFeRhVmUCAwEAAaNCMEAwDgYDVR0PAQH/ -BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFIHEjMz15DD/pQwIX4wV -ZyF0Ad/fMA0GCSqGSIb3DQEBCwUAA4ICAQATZSL1jiutROTL/7lo5sOASD0Ee/oj -L3rtNtqyzm325p7lX1iPyzcyochltq44PTUbPrw7tgTQvPlJ9Zv3hcU2tsu8+Mg5 -1eRfB70VVJd0ysrtT7q6ZHafgbiERUlMjW+i67HM0cOU2kTC5uLqGOiiHycFutfl -1qnN3e92mI0ADs0b+gO3joBYDic/UvuUospeZcnWhNq5NXHzJsBPd+aBJ9J3O5oU -b3n09tDh05S60FdRvScFDcH9yBIw7m+NESsIndTUv4BFFJqIRNow6rSn4+7vW4LV -PtateJLbXDzz2K36uGt/xDYotgIVilQsnLAXc47QN6MUPJiVAAwpBVueSUmxX8fj -y88nZY41F7dXyDDZQVu5FLbowg+UMaeUmMxq67XhJ/UQqAHojhJi6IjMtX9Gl8Cb -EGY4GjZGXyJoPd/JxhMnq1MGrKI8hgZlb7F+sSlEmqO6SWkoaY/X5V+tBIZkbxqg -DMUIYs6Ao9Dz7GjevjPHF1t/gMRMTLGmhIrDO7gJzRSBuhjjVFc2/tsvfEehOjPI -+Vg7RE+xygKJBJYoaMVLuCaJu9YzL1DV/pqJuhgyklTGW+Cd+V7lDSKb9triyCGy -YiGqhkCyLmTTX8jjfhFnRR8F/uOi77Oos/N9j/gMHyIfLXC0uAE0djAA5SN4p1bX -UB+K+wb1whnw0A== ------END CERTIFICATE----- - -# Issuer: CN=UCA Extended Validation Root O=UniTrust -# Subject: CN=UCA Extended Validation Root O=UniTrust -# Label: "UCA Extended Validation Root" -# Serial: 106100277556486529736699587978573607008 -# MD5 Fingerprint: a1:f3:5f:43:c6:34:9b:da:bf:8c:7e:05:53:ad:96:e2 -# SHA1 Fingerprint: a3:a1:b0:6f:24:61:23:4a:e3:36:a5:c2:37:fc:a6:ff:dd:f0:d7:3a -# SHA256 Fingerprint: d4:3a:f9:b3:54:73:75:5c:96:84:fc:06:d7:d8:cb:70:ee:5c:28:e7:73:fb:29:4e:b4:1e:e7:17:22:92:4d:24 ------BEGIN CERTIFICATE----- -MIIFWjCCA0KgAwIBAgIQT9Irj/VkyDOeTzRYZiNwYDANBgkqhkiG9w0BAQsFADBH -MQswCQYDVQQGEwJDTjERMA8GA1UECgwIVW5pVHJ1c3QxJTAjBgNVBAMMHFVDQSBF -eHRlbmRlZCBWYWxpZGF0aW9uIFJvb3QwHhcNMTUwMzEzMDAwMDAwWhcNMzgxMjMx -MDAwMDAwWjBHMQswCQYDVQQGEwJDTjERMA8GA1UECgwIVW5pVHJ1c3QxJTAjBgNV -BAMMHFVDQSBFeHRlbmRlZCBWYWxpZGF0aW9uIFJvb3QwggIiMA0GCSqGSIb3DQEB -AQUAA4ICDwAwggIKAoICAQCpCQcoEwKwmeBkqh5DFnpzsZGgdT6o+uM4AHrsiWog -D4vFsJszA1qGxliG1cGFu0/GnEBNyr7uaZa4rYEwmnySBesFK5pI0Lh2PpbIILvS -sPGP2KxFRv+qZ2C0d35qHzwaUnoEPQc8hQ2E0B92CvdqFN9y4zR8V05WAT558aop -O2z6+I9tTcg1367r3CTueUWnhbYFiN6IXSV8l2RnCdm/WhUFhvMJHuxYMjMR83dk -sHYf5BA1FxvyDrFspCqjc/wJHx4yGVMR59mzLC52LqGj3n5qiAno8geK+LLNEOfi -c0CTuwjRP+H8C5SzJe98ptfRr5//lpr1kXuYC3fUfugH0mK1lTnj8/FtDw5lhIpj -VMWAtuCeS31HJqcBCF3RiJ7XwzJE+oJKCmhUfzhTA8ykADNkUVkLo4KRel7sFsLz -KuZi2irbWWIQJUoqgQtHB0MGcIfS+pMRKXpITeuUx3BNr2fVUbGAIAEBtHoIppB/ -TuDvB0GHr2qlXov7z1CymlSvw4m6WC31MJixNnI5fkkE/SmnTHnkBVfblLkWU41G -sx2VYVdWf6/wFlthWG82UBEL2KwrlRYaDh8IzTY0ZRBiZtWAXxQgXy0MoHgKaNYs -1+lvK9JKBZP8nm9rZ/+I8U6laUpSNwXqxhaN0sSZ0YIrO7o1dfdRUVjzyAfd5LQD -fwIDAQABo0IwQDAdBgNVHQ4EFgQU2XQ65DA9DfcS3H5aBZ8eNJr34RQwDwYDVR0T -AQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAYYwDQYJKoZIhvcNAQELBQADggIBADaN -l8xCFWQpN5smLNb7rhVpLGsaGvdftvkHTFnq88nIua7Mui563MD1sC3AO6+fcAUR -ap8lTwEpcOPlDOHqWnzcSbvBHiqB9RZLcpHIojG5qtr8nR/zXUACE/xOHAbKsxSQ -VBcZEhrxH9cMaVr2cXj0lH2RC47skFSOvG+hTKv8dGT9cZr4QQehzZHkPJrgmzI5 -c6sq1WnIeJEmMX3ixzDx/BR4dxIOE/TdFpS/S2d7cFOFyrC78zhNLJA5wA3CXWvp -4uXViI3WLL+rG761KIcSF3Ru/H38j9CHJrAb+7lsq+KePRXBOy5nAliRn+/4Qh8s -t2j1da3Ptfb/EX3C8CSlrdP6oDyp+l3cpaDvRKS+1ujl5BOWF3sGPjLtx7dCvHaj -2GU4Kzg1USEODm8uNBNA4StnDG1KQTAYI1oyVZnJF+A83vbsea0rWBmirSwiGpWO -vpaQXUJXxPkUAzUrHC1RVwinOt4/5Mi0A3PCwSaAuwtCH60NryZy2sy+s6ODWA2C -xR9GUeOcGMyNm43sSet1UNWMKFnKdDTajAshqx7qG+XH/RU+wBeq+yNuJkbL+vmx -cmtpzyKEC2IPrNkZAJSidjzULZrtBJ4tBmIQN1IchXIbJ+XMxjHsN+xjWZsLHXbM -fjKaiJUINlK73nZfdklJrX+9ZSCyycErdhh2n1ax ------END CERTIFICATE----- - -# Issuer: CN=Certigna Root CA O=Dhimyotis OU=0002 48146308100036 -# Subject: CN=Certigna Root CA O=Dhimyotis OU=0002 48146308100036 -# Label: "Certigna Root CA" -# Serial: 269714418870597844693661054334862075617 -# MD5 Fingerprint: 0e:5c:30:62:27:eb:5b:bc:d7:ae:62:ba:e9:d5:df:77 -# SHA1 Fingerprint: 2d:0d:52:14:ff:9e:ad:99:24:01:74:20:47:6e:6c:85:27:27:f5:43 -# SHA256 Fingerprint: d4:8d:3d:23:ee:db:50:a4:59:e5:51:97:60:1c:27:77:4b:9d:7b:18:c9:4d:5a:05:95:11:a1:02:50:b9:31:68 ------BEGIN CERTIFICATE----- -MIIGWzCCBEOgAwIBAgIRAMrpG4nxVQMNo+ZBbcTjpuEwDQYJKoZIhvcNAQELBQAw -WjELMAkGA1UEBhMCRlIxEjAQBgNVBAoMCURoaW15b3RpczEcMBoGA1UECwwTMDAw -MiA0ODE0NjMwODEwMDAzNjEZMBcGA1UEAwwQQ2VydGlnbmEgUm9vdCBDQTAeFw0x -MzEwMDEwODMyMjdaFw0zMzEwMDEwODMyMjdaMFoxCzAJBgNVBAYTAkZSMRIwEAYD -VQQKDAlEaGlteW90aXMxHDAaBgNVBAsMEzAwMDIgNDgxNDYzMDgxMDAwMzYxGTAX -BgNVBAMMEENlcnRpZ25hIFJvb3QgQ0EwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw -ggIKAoICAQDNGDllGlmx6mQWDoyUJJV8g9PFOSbcDO8WV43X2KyjQn+Cyu3NW9sO -ty3tRQgXstmzy9YXUnIo245Onoq2C/mehJpNdt4iKVzSs9IGPjA5qXSjklYcoW9M -CiBtnyN6tMbaLOQdLNyzKNAT8kxOAkmhVECe5uUFoC2EyP+YbNDrihqECB63aCPu -I9Vwzm1RaRDuoXrC0SIxwoKF0vJVdlB8JXrJhFwLrN1CTivngqIkicuQstDuI7pm -TLtipPlTWmR7fJj6o0ieD5Wupxj0auwuA0Wv8HT4Ks16XdG+RCYyKfHx9WzMfgIh -C59vpD++nVPiz32pLHxYGpfhPTc3GGYo0kDFUYqMwy3OU4gkWGQwFsWq4NYKpkDf -ePb1BHxpE4S80dGnBs8B92jAqFe7OmGtBIyT46388NtEbVncSVmurJqZNjBBe3Yz -IoejwpKGbvlw7q6Hh5UbxHq9MfPU0uWZ/75I7HX1eBYdpnDBfzwboZL7z8g81sWT -Co/1VTp2lc5ZmIoJlXcymoO6LAQ6l73UL77XbJuiyn1tJslV1c/DeVIICZkHJC1k -JWumIWmbat10TWuXekG9qxf5kBdIjzb5LdXF2+6qhUVB+s06RbFo5jZMm5BX7CO5 -hwjCxAnxl4YqKE3idMDaxIzb3+KhF1nOJFl0Mdp//TBt2dzhauH8XwIDAQABo4IB -GjCCARYwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYE -FBiHVuBud+4kNTxOc5of1uHieX4rMB8GA1UdIwQYMBaAFBiHVuBud+4kNTxOc5of -1uHieX4rMEQGA1UdIAQ9MDswOQYEVR0gADAxMC8GCCsGAQUFBwIBFiNodHRwczov -L3d3d3cuY2VydGlnbmEuZnIvYXV0b3JpdGVzLzBtBgNVHR8EZjBkMC+gLaArhilo -dHRwOi8vY3JsLmNlcnRpZ25hLmZyL2NlcnRpZ25hcm9vdGNhLmNybDAxoC+gLYYr -aHR0cDovL2NybC5kaGlteW90aXMuY29tL2NlcnRpZ25hcm9vdGNhLmNybDANBgkq -hkiG9w0BAQsFAAOCAgEAlLieT/DjlQgi581oQfccVdV8AOItOoldaDgvUSILSo3L -6btdPrtcPbEo/uRTVRPPoZAbAh1fZkYJMyjhDSSXcNMQH+pkV5a7XdrnxIxPTGRG -HVyH41neQtGbqH6mid2PHMkwgu07nM3A6RngatgCdTer9zQoKJHyBApPNeNgJgH6 -0BGM+RFq7q89w1DTj18zeTyGqHNFkIwgtnJzFyO+B2XleJINugHA64wcZr+shncB -lA2c5uk5jR+mUYyZDDl34bSb+hxnV29qao6pK0xXeXpXIs/NX2NGjVxZOob4Mkdi -o2cNGJHc+6Zr9UhhcyNZjgKnvETq9Emd8VRY+WCv2hikLyhF3HqgiIZd8zvn/yk1 -gPxkQ5Tm4xxvvq0OKmOZK8l+hfZx6AYDlf7ej0gcWtSS6Cvu5zHbugRqh5jnxV/v -faci9wHYTfmJ0A6aBVmknpjZbyvKcL5kwlWj9Omvw5Ip3IgWJJk8jSaYtlu3zM63 -Nwf9JtmYhST/WSMDmu2dnajkXjjO11INb9I/bbEFa0nOipFGc/T2L/Coc3cOZayh -jWZSaX5LaAzHHjcng6WMxwLkFM1JAbBzs/3GkDpv0mztO+7skb6iQ12LAEpmJURw -3kAP+HwV96LOPNdeE4yBFxgX0b3xdxA61GU5wSesVywlVP+i2k+KYTlerj1KjL0= ------END CERTIFICATE----- - -# Issuer: CN=emSign Root CA - G1 O=eMudhra Technologies Limited OU=emSign PKI -# Subject: CN=emSign Root CA - G1 O=eMudhra Technologies Limited OU=emSign PKI -# Label: "emSign Root CA - G1" -# Serial: 235931866688319308814040 -# MD5 Fingerprint: 9c:42:84:57:dd:cb:0b:a7:2e:95:ad:b6:f3:da:bc:ac -# SHA1 Fingerprint: 8a:c7:ad:8f:73:ac:4e:c1:b5:75:4d:a5:40:f4:fc:cf:7c:b5:8e:8c -# SHA256 Fingerprint: 40:f6:af:03:46:a9:9a:a1:cd:1d:55:5a:4e:9c:ce:62:c7:f9:63:46:03:ee:40:66:15:83:3d:c8:c8:d0:03:67 ------BEGIN CERTIFICATE----- -MIIDlDCCAnygAwIBAgIKMfXkYgxsWO3W2DANBgkqhkiG9w0BAQsFADBnMQswCQYD -VQQGEwJJTjETMBEGA1UECxMKZW1TaWduIFBLSTElMCMGA1UEChMcZU11ZGhyYSBU -ZWNobm9sb2dpZXMgTGltaXRlZDEcMBoGA1UEAxMTZW1TaWduIFJvb3QgQ0EgLSBH -MTAeFw0xODAyMTgxODMwMDBaFw00MzAyMTgxODMwMDBaMGcxCzAJBgNVBAYTAklO -MRMwEQYDVQQLEwplbVNpZ24gUEtJMSUwIwYDVQQKExxlTXVkaHJhIFRlY2hub2xv -Z2llcyBMaW1pdGVkMRwwGgYDVQQDExNlbVNpZ24gUm9vdCBDQSAtIEcxMIIBIjAN -BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAk0u76WaK7p1b1TST0Bsew+eeuGQz -f2N4aLTNLnF115sgxk0pvLZoYIr3IZpWNVrzdr3YzZr/k1ZLpVkGoZM0Kd0WNHVO -8oG0x5ZOrRkVUkr+PHB1cM2vK6sVmjM8qrOLqs1D/fXqcP/tzxE7lM5OMhbTI0Aq -d7OvPAEsbO2ZLIvZTmmYsvePQbAyeGHWDV/D+qJAkh1cF+ZwPjXnorfCYuKrpDhM -tTk1b+oDafo6VGiFbdbyL0NVHpENDtjVaqSW0RM8LHhQ6DqS0hdW5TUaQBw+jSzt -Od9C4INBdN+jzcKGYEho42kLVACL5HZpIQ15TjQIXhTCzLG3rdd8cIrHhQIDAQAB -o0IwQDAdBgNVHQ4EFgQU++8Nhp6w492pufEhF38+/PB3KxowDgYDVR0PAQH/BAQD -AgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEBAFn/8oz1h31x -PaOfG1vR2vjTnGs2vZupYeveFix0PZ7mddrXuqe8QhfnPZHr5X3dPpzxz5KsbEjM -wiI/aTvFthUvozXGaCocV685743QNcMYDHsAVhzNixl03r4PEuDQqqE/AjSxcM6d -GNYIAwlG7mDgfrbESQRRfXBgvKqy/3lyeqYdPV8q+Mri/Tm3R7nrft8EI6/6nAYH -6ftjk4BAtcZsCjEozgyfz7MjNYBBjWzEN3uBL4ChQEKF6dk4jeihU80Bv2noWgby -RQuQ+q7hv53yrlc8pa6yVvSLZUDp/TGBLPQ5Cdjua6e0ph0VpZj3AYHYhX3zUVxx -iN66zB+Afko= ------END CERTIFICATE----- - -# Issuer: CN=emSign ECC Root CA - G3 O=eMudhra Technologies Limited OU=emSign PKI -# Subject: CN=emSign ECC Root CA - G3 O=eMudhra Technologies Limited OU=emSign PKI -# Label: "emSign ECC Root CA - G3" -# Serial: 287880440101571086945156 -# MD5 Fingerprint: ce:0b:72:d1:9f:88:8e:d0:50:03:e8:e3:b8:8b:67:40 -# SHA1 Fingerprint: 30:43:fa:4f:f2:57:dc:a0:c3:80:ee:2e:58:ea:78:b2:3f:e6:bb:c1 -# SHA256 Fingerprint: 86:a1:ec:ba:08:9c:4a:8d:3b:be:27:34:c6:12:ba:34:1d:81:3e:04:3c:f9:e8:a8:62:cd:5c:57:a3:6b:be:6b ------BEGIN CERTIFICATE----- -MIICTjCCAdOgAwIBAgIKPPYHqWhwDtqLhDAKBggqhkjOPQQDAzBrMQswCQYDVQQG -EwJJTjETMBEGA1UECxMKZW1TaWduIFBLSTElMCMGA1UEChMcZU11ZGhyYSBUZWNo -bm9sb2dpZXMgTGltaXRlZDEgMB4GA1UEAxMXZW1TaWduIEVDQyBSb290IENBIC0g -RzMwHhcNMTgwMjE4MTgzMDAwWhcNNDMwMjE4MTgzMDAwWjBrMQswCQYDVQQGEwJJ -TjETMBEGA1UECxMKZW1TaWduIFBLSTElMCMGA1UEChMcZU11ZGhyYSBUZWNobm9s -b2dpZXMgTGltaXRlZDEgMB4GA1UEAxMXZW1TaWduIEVDQyBSb290IENBIC0gRzMw -djAQBgcqhkjOPQIBBgUrgQQAIgNiAAQjpQy4LRL1KPOxst3iAhKAnjlfSU2fySU0 -WXTsuwYc58Byr+iuL+FBVIcUqEqy6HyC5ltqtdyzdc6LBtCGI79G1Y4PPwT01xyS -fvalY8L1X44uT6EYGQIrMgqCZH0Wk9GjQjBAMB0GA1UdDgQWBBR8XQKEE9TMipuB -zhccLikenEhjQjAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAKBggq -hkjOPQQDAwNpADBmAjEAvvNhzwIQHWSVB7gYboiFBS+DCBeQyh+KTOgNG3qxrdWB -CUfvO6wIBHxcmbHtRwfSAjEAnbpV/KlK6O3t5nYBQnvI+GDZjVGLVTv7jHvrZQnD -+JbNR6iC8hZVdyR+EhCVBCyj ------END CERTIFICATE----- - -# Issuer: CN=emSign Root CA - C1 O=eMudhra Inc OU=emSign PKI -# Subject: CN=emSign Root CA - C1 O=eMudhra Inc OU=emSign PKI -# Label: "emSign Root CA - C1" -# Serial: 825510296613316004955058 -# MD5 Fingerprint: d8:e3:5d:01:21:fa:78:5a:b0:df:ba:d2:ee:2a:5f:68 -# SHA1 Fingerprint: e7:2e:f1:df:fc:b2:09:28:cf:5d:d4:d5:67:37:b1:51:cb:86:4f:01 -# SHA256 Fingerprint: 12:56:09:aa:30:1d:a0:a2:49:b9:7a:82:39:cb:6a:34:21:6f:44:dc:ac:9f:39:54:b1:42:92:f2:e8:c8:60:8f ------BEGIN CERTIFICATE----- -MIIDczCCAlugAwIBAgILAK7PALrEzzL4Q7IwDQYJKoZIhvcNAQELBQAwVjELMAkG -A1UEBhMCVVMxEzARBgNVBAsTCmVtU2lnbiBQS0kxFDASBgNVBAoTC2VNdWRocmEg -SW5jMRwwGgYDVQQDExNlbVNpZ24gUm9vdCBDQSAtIEMxMB4XDTE4MDIxODE4MzAw -MFoXDTQzMDIxODE4MzAwMFowVjELMAkGA1UEBhMCVVMxEzARBgNVBAsTCmVtU2ln -biBQS0kxFDASBgNVBAoTC2VNdWRocmEgSW5jMRwwGgYDVQQDExNlbVNpZ24gUm9v -dCBDQSAtIEMxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAz+upufGZ -BczYKCFK83M0UYRWEPWgTywS4/oTmifQz/l5GnRfHXk5/Fv4cI7gklL35CX5VIPZ -HdPIWoU/Xse2B+4+wM6ar6xWQio5JXDWv7V7Nq2s9nPczdcdioOl+yuQFTdrHCZH -3DspVpNqs8FqOp099cGXOFgFixwR4+S0uF2FHYP+eF8LRWgYSKVGczQ7/g/IdrvH -GPMF0Ybzhe3nudkyrVWIzqa2kbBPrH4VI5b2P/AgNBbeCsbEBEV5f6f9vtKppa+c -xSMq9zwhbL2vj07FOrLzNBL834AaSaTUqZX3noleoomslMuoaJuvimUnzYnu3Yy1 -aylwQ6BpC+S5DwIDAQABo0IwQDAdBgNVHQ4EFgQU/qHgcB4qAzlSWkK+XJGFehiq -TbUwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEL -BQADggEBAMJKVvoVIXsoounlHfv4LcQ5lkFMOycsxGwYFYDGrK9HWS8mC+M2sO87 -/kOXSTKZEhVb3xEp/6tT+LvBeA+snFOvV71ojD1pM/CjoCNjO2RnIkSt1XHLVip4 -kqNPEjE2NuLe/gDEo2APJ62gsIq1NnpSob0n9CAnYuhNlCQT5AoE6TyrLshDCUrG -YQTlSTR+08TI9Q/Aqum6VF7zYytPT1DU/rl7mYw9wC68AivTxEDkigcxHpvOJpkT -+xHqmiIMERnHXhuBUDDIlhJu58tBf5E7oke3VIAb3ADMmpDqw8NQBmIMMMAVSKeo -WXzhriKi4gp6D/piq1JM4fHfyr6DDUI= ------END CERTIFICATE----- - -# Issuer: CN=emSign ECC Root CA - C3 O=eMudhra Inc OU=emSign PKI -# Subject: CN=emSign ECC Root CA - C3 O=eMudhra Inc OU=emSign PKI -# Label: "emSign ECC Root CA - C3" -# Serial: 582948710642506000014504 -# MD5 Fingerprint: 3e:53:b3:a3:81:ee:d7:10:f8:d3:b0:1d:17:92:f5:d5 -# SHA1 Fingerprint: b6:af:43:c2:9b:81:53:7d:f6:ef:6b:c3:1f:1f:60:15:0c:ee:48:66 -# SHA256 Fingerprint: bc:4d:80:9b:15:18:9d:78:db:3e:1d:8c:f4:f9:72:6a:79:5d:a1:64:3c:a5:f1:35:8e:1d:db:0e:dc:0d:7e:b3 ------BEGIN CERTIFICATE----- -MIICKzCCAbGgAwIBAgIKe3G2gla4EnycqDAKBggqhkjOPQQDAzBaMQswCQYDVQQG -EwJVUzETMBEGA1UECxMKZW1TaWduIFBLSTEUMBIGA1UEChMLZU11ZGhyYSBJbmMx -IDAeBgNVBAMTF2VtU2lnbiBFQ0MgUm9vdCBDQSAtIEMzMB4XDTE4MDIxODE4MzAw -MFoXDTQzMDIxODE4MzAwMFowWjELMAkGA1UEBhMCVVMxEzARBgNVBAsTCmVtU2ln -biBQS0kxFDASBgNVBAoTC2VNdWRocmEgSW5jMSAwHgYDVQQDExdlbVNpZ24gRUND -IFJvb3QgQ0EgLSBDMzB2MBAGByqGSM49AgEGBSuBBAAiA2IABP2lYa57JhAd6bci -MK4G9IGzsUJxlTm801Ljr6/58pc1kjZGDoeVjbk5Wum739D+yAdBPLtVb4Ojavti -sIGJAnB9SMVK4+kiVCJNk7tCDK93nCOmfddhEc5lx/h//vXyqaNCMEAwHQYDVR0O -BBYEFPtaSNCAIEDyqOkAB2kZd6fmw/TPMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMB -Af8EBTADAQH/MAoGCCqGSM49BAMDA2gAMGUCMQC02C8Cif22TGK6Q04ThHK1rt0c -3ta13FaPWEBaLd4gTCKDypOofu4SQMfWh0/434UCMBwUZOR8loMRnLDRWmFLpg9J -0wD8ofzkpf9/rdcw0Md3f76BB1UwUCAU9Vc4CqgxUQ== ------END CERTIFICATE----- - -# Issuer: CN=Hongkong Post Root CA 3 O=Hongkong Post -# Subject: CN=Hongkong Post Root CA 3 O=Hongkong Post -# Label: "Hongkong Post Root CA 3" -# Serial: 46170865288971385588281144162979347873371282084 -# MD5 Fingerprint: 11:fc:9f:bd:73:30:02:8a:fd:3f:f3:58:b9:cb:20:f0 -# SHA1 Fingerprint: 58:a2:d0:ec:20:52:81:5b:c1:f3:f8:64:02:24:4e:c2:8e:02:4b:02 -# SHA256 Fingerprint: 5a:2f:c0:3f:0c:83:b0:90:bb:fa:40:60:4b:09:88:44:6c:76:36:18:3d:f9:84:6e:17:10:1a:44:7f:b8:ef:d6 ------BEGIN CERTIFICATE----- -MIIFzzCCA7egAwIBAgIUCBZfikyl7ADJk0DfxMauI7gcWqQwDQYJKoZIhvcNAQEL -BQAwbzELMAkGA1UEBhMCSEsxEjAQBgNVBAgTCUhvbmcgS29uZzESMBAGA1UEBxMJ -SG9uZyBLb25nMRYwFAYDVQQKEw1Ib25na29uZyBQb3N0MSAwHgYDVQQDExdIb25n -a29uZyBQb3N0IFJvb3QgQ0EgMzAeFw0xNzA2MDMwMjI5NDZaFw00MjA2MDMwMjI5 -NDZaMG8xCzAJBgNVBAYTAkhLMRIwEAYDVQQIEwlIb25nIEtvbmcxEjAQBgNVBAcT -CUhvbmcgS29uZzEWMBQGA1UEChMNSG9uZ2tvbmcgUG9zdDEgMB4GA1UEAxMXSG9u -Z2tvbmcgUG9zdCBSb290IENBIDMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIK -AoICAQCziNfqzg8gTr7m1gNt7ln8wlffKWihgw4+aMdoWJwcYEuJQwy51BWy7sFO -dem1p+/l6TWZ5Mwc50tfjTMwIDNT2aa71T4Tjukfh0mtUC1Qyhi+AViiE3CWu4mI -VoBc+L0sPOFMV4i707mV78vH9toxdCim5lSJ9UExyuUmGs2C4HDaOym71QP1mbpV -9WTRYA6ziUm4ii8F0oRFKHyPaFASePwLtVPLwpgchKOesL4jpNrcyCse2m5FHomY -2vkALgbpDDtw1VAliJnLzXNg99X/NWfFobxeq81KuEXryGgeDQ0URhLj0mRiikKY -vLTGCAj4/ahMZJx2Ab0vqWwzD9g/KLg8aQFChn5pwckGyuV6RmXpwtZQQS4/t+Tt -bNe/JgERohYpSms0BpDsE9K2+2p20jzt8NYt3eEV7KObLyzJPivkaTv/ciWxNoZb -x39ri1UbSsUgYT2uy1DhCDq+sI9jQVMwCFk8mB13umOResoQUGC/8Ne8lYePl8X+ -l2oBlKN8W4UdKjk60FSh0Tlxnf0h+bV78OLgAo9uliQlLKAeLKjEiafv7ZkGL7YK -TE/bosw3Gq9HhS2KX8Q0NEwA/RiTZxPRN+ZItIsGxVd7GYYKecsAyVKvQv83j+Gj -Hno9UKtjBucVtT+2RTeUN7F+8kjDf8V1/peNRY8apxpyKBpADwIDAQABo2MwYTAP -BgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAfBgNVHSMEGDAWgBQXnc0e -i9Y5K3DTXNSguB+wAPzFYTAdBgNVHQ4EFgQUF53NHovWOStw01zUoLgfsAD8xWEw -DQYJKoZIhvcNAQELBQADggIBAFbVe27mIgHSQpsY1Q7XZiNc4/6gx5LS6ZStS6LG -7BJ8dNVI0lkUmcDrudHr9EgwW62nV3OZqdPlt9EuWSRY3GguLmLYauRwCy0gUCCk -MpXRAJi70/33MvJJrsZ64Ee+bs7Lo3I6LWldy8joRTnU+kLBEUx3XZL7av9YROXr -gZ6voJmtvqkBZss4HTzfQx/0TW60uhdG/H39h4F5ag0zD/ov+BS5gLNdTaqX4fnk -GMX41TiMJjz98iji7lpJiCzfeT2OnpA8vUFKOt1b9pq0zj8lMH8yfaIDlNDceqFS -3m6TjRgm/VWsvY+b0s+v54Ysyx8Jb6NvqYTUc79NoXQbTiNg8swOqn+knEwlqLJm -Ozj/2ZQw9nKEvmhVEA/GcywWaZMH/rFF7buiVWqw2rVKAiUnhde3t4ZEFolsgCs+ -l6mc1X5VTMbeRRAc6uk7nwNT7u56AQIWeNTowr5GdogTPyK7SBIdUgC0An4hGh6c -JfTzPV4e0hz5sy229zdcxsshTrD3mUcYhcErulWuBurQB7Lcq9CClnXO0lD+mefP -L5/ndtFhKvshuzHQqp9HpLIiyhY6UFfEW0NnxWViA0kB60PZ2Pierc+xYw5F9KBa -LJstxabArahH9CdMOA0uG0k7UvToiIMrVCjU8jVStDKDYmlkDJGcn5fqdBb9HxEG -mpv0 ------END CERTIFICATE----- - diff --git a/src/clickable_progress_bar.py b/src/clickable_progress_bar.py deleted file mode 100644 index ac0d038..0000000 --- a/src/clickable_progress_bar.py +++ /dev/null @@ -1,35 +0,0 @@ -from PyQt5.QtWidgets import QProgressBar -from PyQt5.QtCore import Qt, pyqtSignal -from constants import Constants - - -class ClickableProgressBar(QProgressBar): - """Subclass QProgressBar. Clickable progress bar class.""" - - clicked = pyqtSignal() - - def __init__(self, parent=None): - """Initialize the instance.""" - self._text = '' - super().__init__(parent) - - def text(self): - """Return the text displayed on the bar.""" - return self._text - - def set_idle(self): - """Set the bar to a non-downloading status.""" - self._text = Constants.CLICK_TO_UPDATE_STR - self.setMaximum(self.minimum() + 1) - - def set_updating(self): - """Set the bar to a downloading status.""" - self._text = Constants.UPDATING_STR - self.setMaximum(self.minimum()) - - def mousePressEvent(self, event): - """Override QWidget.mousePressEvent. Detect a click on the bar.""" - if event.button() == Qt.LeftButton: - self.clicked.emit() - else: - super().mousePressEvent(event) diff --git a/src/constants.py b/src/constants.py deleted file mode 100644 index 535b394..0000000 --- a/src/constants.py +++ /dev/null @@ -1,238 +0,0 @@ -from collections import namedtuple -from enum import Enum, auto -import os.path -from executable_utilities import get_executable_path - - -__BASE_FOLDER__ = get_executable_path() - - -class SupportedOs: - """Supported operating systems.""" - WINDOWS = "windows" - LINUX = "linux" - MAC = "mac" - RASPBIAN = "raspberry" - - -class Ftype: - """Container class to differentiate between frequency and band.""" - - FREQ = "freq" - BAND = "band" - - -class GfdType(Enum): - """Enum class to differentiate the possible GFD search criterias.""" - - FREQ = auto() - LOC = auto() - - -class DownloadTarget(Enum): - """Enum class to distinguish the object being downloaded.""" - - DATA_FOLDER = auto() - DB = auto() - SOFTWARE = auto() - UPDATER = auto() - - -class Signal: - """Container class for the signal property names.""" - - NAME = "name" - INF_FREQ = "inf_freq" - SUP_FREQ = "sup_freq" - MODE = "mode" - INF_BAND = "inf_band" - SUP_BAND = "sup_band" - LOCATION = "location" - URL = "url" - DESCRIPTION = "description" - MODULATION = "modulation" - CATEGORY_CODE = "category_code" - ACF = "acf" - WIKI_CLICKED = "url_clicked" - - -class Database: - """Container class for the database-related constants.""" - - LINK_LOC = "https://aresvalley.com/Storage/Artemis/Database/data.zip" - LINK_REF = "https://aresvalley.com/Storage/Artemis/Database/data.zip.log" - NAME = "db.csv" - NAMES = (Signal.NAME, - Signal.INF_FREQ, - Signal.SUP_FREQ, - Signal.MODE, - Signal.INF_BAND, - Signal.SUP_BAND, - Signal.LOCATION, - Signal.URL, - Signal.DESCRIPTION, - Signal.MODULATION, - Signal.CATEGORY_CODE, - Signal.ACF) - DELIMITER = "*" - STRINGS = (Signal.INF_FREQ, - Signal.SUP_FREQ, - Signal.MODE, - Signal.INF_BAND, - Signal.SUP_BAND, - Signal.CATEGORY_CODE, - Signal.ACF,) - - -class ForecastColors: - """Container class for the forecast labels colors.""" - - WARNING_COLOR = "#F95423" - KP9_COLOR = "#FFCCCB" - KP8_COLOR = "#FFCC9A" - KP7_COLOR = "#FFFECD" - KP6_COLOR = "#CDFFCC" - KP5_COLOR = "#BEE3FE" - - -_Band = namedtuple("Band", ["lower", "upper"]) - - -class Constants: - """Container class for several constants of the software.""" - - EXECUTABLE_NAME = os.path.join(__BASE_FOLDER__, "Artemis") - UPDATER_SOFTWARE = os.path.join(__BASE_FOLDER__, "_ArtemisUpdater") - CLICK_TO_UPDATE_STR = "Click to update" - VERSION_LINK = "https://aresvalley.com/Storage/Artemis/Package/latest_versions.json" - SIGIDWIKI = "https://www.sigidwiki.com/wiki/Signal_Identification_Guide" - ADD_SIGNAL_LINK = "https://www.sigidwiki.com/index.php/Special:FormEdit/Signal/?preload=Signal_Identification_Wiki:Signal_form_preload_text" - FORUM_LINK = "https://aresvalley.com/community/" - ARESVALLEY_LINK = "https://aresvalley.com/" - GITHUB_REPO = "https://github.com/AresValley/Artemis" - RTL_SDL_LINK = "https://www.rtl-sdr.com/" - UPDATING_STR = "Updating..." - ACF_DOCS = "https://aresvalley.com/documentation/" - FORECAST_PROBABILITIES = "https://services.swpc.noaa.gov/text/sgarf.txt" - SPACE_WEATHER_XRAY = "https://services.swpc.noaa.gov/json/goes/primary/xrays-1-day.json" - SPACE_WEATHER_PROT_EL = "https://services.swpc.noaa.gov/json/goes/primary/integral-protons-1-day.json" - SPACE_WEATHER_AK_INDEX = "https://services.swpc.noaa.gov/text/wwv.txt" - SPACE_WEATHER_SGAS = "https://services.swpc.noaa.gov/text/sgas.txt" - SPACE_WEATHER_GEO_STORM = "https://services.swpc.noaa.gov/text/3-day-forecast.txt" - SPACE_WEATHER_INFO = "https://www.swpc.noaa.gov/sites/default/files/images/NOAAscales.pdf" - SPACE_WEATHER_IMGS = ["https://www.mmmonvhf.de/eme/eme.png", - "https://www.mmmonvhf.de/ms/ms.png", - "https://www.mmmonvhf.de/es/es.png", - "https://www.mmmonvhf.de/solar/solar.png", - "https://amunters.home.xs4all.nl/eskip50status.gif", - "https://amunters.home.xs4all.nl/eskip70status.gif", - "https://amunters.home.xs4all.nl/eskipstatus.gif", - "https://amunters.home.xs4all.nl/eskipstatusNA.gif", - "https://amunters.home.xs4all.nl/aurorastatus.gif"] - SEARCH_LABEL_IMG = "search_icon.png" - VOLUME_LABEL_IMG = "volume.png" - SPECTRA_EXT = ".png" - ACTIVE = "active" - INACTIVE = "inactive" - LABEL_ON_COLOR = "on" - LABEL_OFF_COLOR = "off" - TEXT_COLOR = "text" - _ELF = _Band(0, 30) # Formally it is (3, 30) Hz. - _SLF = _Band(30, 300) - _ULF = _Band(300, 3000) - _VLF = _Band(3000, 30000) - _LF = _Band(30 * 10**3, 300 * 10**3) - _MF = _Band(300 * 10 ** 3, 3000 * 10**3) - _HF = _Band(3 * 10**6, 30 * 10**6) - _VHF = _Band(30 * 10**6, 300 * 10**6) - _UHF = _Band(300 * 10**6, 3000 * 10**6) - _SHF = _Band(3 * 10**9, 30 * 10**9) - _EHF = _Band(30 * 10**9, 300 * 10**9) - BANDS = (_ELF, _SLF, _ULF, _VLF, _LF, _MF, _HF, _VHF, _UHF, _SHF, _EHF) - MAX_DIGITS = 3 - RANGE_SEPARATOR = ' ÷ ' - GFD_SITE = "http://qrg.globaltuners.com/" - CONVERSION_FACTORS = {"Hz": 1, - "kHz": 1000, - "MHz": 1000000, - "GHz": 1000000000} - MODES = {"FM": ("NFM", "WFM"), - "AM": (), - "CW": (), - "SK": ("FSK", "PSK", "MSK"), - "SB": ("LSB", "USB", "DSB"), - "Chirp Spread Spectrum": (), - "FHSS-TDM": (), - "RAW": (), - "SC-FDMA": ()} - APPLY = "Apply" - REMOVE = "Remove" - UNKNOWN = "N/A" - EXTRACTING_MSG = "Extracting..." - EXTRACTING_CODE = -1 - ZERO_INITIAL_SPEED = -1 - ZERO_FINAL_SPEED = -2 - NOT_AVAILABLE = "spectrumnotavailable.png" - NOT_SELECTED = "nosignalselected.png" - FIELD_SEPARATOR = ";" - ACF_SEPARATOR = " - " - DATA_FOLDER = os.path.join(__BASE_FOLDER__, "Data") - SPECTRA_FOLDER = os.path.join(DATA_FOLDER, "Spectra") - AUDIO_FOLDER = os.path.join(DATA_FOLDER, "Audio") - DEFAULT_IMGS_FOLDER = os.path.join(":", "pics", "default_pics") - DEFAULT_NOT_SELECTED = os.path.join(DEFAULT_IMGS_FOLDER, NOT_SELECTED) - DEFAULT_NOT_AVAILABLE = os.path.join(DEFAULT_IMGS_FOLDER, NOT_AVAILABLE) - FONT_FILE = os.path.join(__BASE_FOLDER__, 'font.json') - SETTINGS_FILE = os.path.join(__BASE_FOLDER__, "settings.json") - - -class Messages: - """Container class for messages to be displayed.""" - - FEATURE_NOT_AVAILABLE = "Feature not available" - SCRIPT_NOT_UPDATE = "When running from source, software updates\ncannot be checked." - UPDATES_AVAILABALE = "Updates available" - UPDATES_MSG = "Do you want to install the updates now?" - UP_TO_DATE = "Already up to date" - UP_TO_DATE_MSG = "No newer version to download." - DB_NEW_VER = "New version available" - DB_NEW_VER_MSG = "A new version of the database is available for download." - NO_DB_AVAIL = "No database detected." - NO_DB = "No database" - DOWNLOAD_NOW_QUESTION = "Do you want to download it now?" - DOWNLOAD_ANYWAY_QUESTION = "Do you want to download it anyway?" - NO_CONNECTION = "No connection" - NO_CONNECTION_MSG = "Unable to establish an internet connection." - BAD_DOWNLOAD = "Something went wrong" - BAD_DOWNLOAD_MSG = "Something went wrong with the download.\nCheck your internet connection and try again." - SLOW_CONN = "Slow internet connection" - SLOW_CONN_MSG = "Your internet connection is unstable or too slow." - NEW_VERSION_AVAILABLE = "New software version" - NEW_VERSION_MSG = lambda v: f"The software version {v} is available." # noqa: E731 - DOWNLOAD_SUGG_MSG = "Download new version now?" - SCREEN_UPDATE_FAIL = "Unable to update the data" - SCREEN_UPDATE_FAIL_MSG = "Downloaded data currupted or invalid" - - -class ThemeConstants: - """Container class for all the theme-related constants.""" - - EXTENSION = ".qss" - ICONS_FOLDER = "icons" - DEFAULT = "material_design_dark" - COLORS = "colors.txt" - COLOR_SEPARATOR = "=" - DEFAULT_ACTIVE_COLOR = "#000000" - DEFAULT_INACTIVE_COLOR = "#9f9f9f" - DEFAULT_OFF_COLORS = "#000000", "#434343" - DEFAULT_ON_COLORS = "#4b79a1", "#283e51" - DEFAULT_TEXT_COLOR = "#ffffff" - THEME_NOT_FOUND = "Theme not found" - MISSING_THEME = "Missing theme folder." - MISSING_THEME_FOLDER = "Themes folder not found.\nOnly the basic theme is available." - THEME_FOLDER_NOT_FOUND = "Themes folder not found" - FOLDER = os.path.join(__BASE_FOLDER__, "themes") - DEFAULT_ICONS_PATH = os.path.join(FOLDER, DEFAULT, ICONS_FOLDER) - DEFAULT_SEARCH_LABEL_PATH = os.path.join(DEFAULT_ICONS_PATH, Constants.SEARCH_LABEL_IMG) - DEFAULT_VOLUME_LABEL_PATH = os.path.join(DEFAULT_ICONS_PATH, Constants.VOLUME_LABEL_IMG) - DEFAULT_THEME_PATH = os.path.join(FOLDER, DEFAULT) diff --git a/src/default_imgs.qrc b/src/default_imgs.qrc deleted file mode 100644 index 4601406..0000000 --- a/src/default_imgs.qrc +++ /dev/null @@ -1,9 +0,0 @@ -MainWindow -- -- -- -0 -0 -1458 -795 -- -- -0 -0 -- -ARTΣMIS -- -- -:/icon/default_pics/Artemis3.500px.png :/icon/default_pics/Artemis3.500px.png- -- - -- -- -
-- -- -Qt::Horizontal -- -- -- -0 -0 -- -- -0 -0 -- -- -0 -0 -- -- -0 -- -0 -- -0 -- -0 -- -2 -- -
-- -- -- -0 -0 -- -- - -- - -- - -
-- -- -- -0 -0 -- -- -20 -20 -- -- -20 -20 -- -- - -themes/1-default/icons/search_icon.png -- -true -- -
-- -- -- -0 -0 -- - -9 -50 -false - -- -- - -- - -Qt::ScrollBarAsNeeded -- -Qt::ScrollBarAsNeeded -- -16 -- -false -- -- -true -- -- -1 -0 -- -- -200 -400 -- -Qt::LeftToRight -- -- - -QTabWidget::North -- -QTabWidget::Rounded -- -0 -- -false -- -- -- -0 -0 -- -- -0 -0 -- -Signal -- -- -
-- -- -0 -- -- -Main -- -- -
-- -- -Qt::Horizontal -- -QSizePolicy::Minimum -- -- -90 -20 -- -
-- -- -Qt::Horizontal -- -QSizePolicy::Minimum -- -- -90 -20 -- -
-- -- -Qt::Vertical -- -QSizePolicy::MinimumExpanding -- -- -20 -215 -- -
-- -- -- -0 -0 -- - -12 -75 -true - -- -Description -- -Qt::AlignCenter -- -
-- -- - -11 - -- -border: 0px; -/*border-radius: 8px;*/ -- -Qt::ScrollBarAsNeeded -- -Qt::ScrollBarAsNeeded -- -true -- -
-- -- -<html><head/><body><p><span style=" color:#000000;">Frequency bands</span></p></body></html> -- -color: #9f9f9f; -- -- -
-- -- -
-- -- - -12 -75 -true - -- -color: #9f9f9f; -- -█ -- -Qt::AlignCenter -- -
-- -- - -9 -75 -true - -- -ELF -- -Qt::AlignCenter -- -
-- -- - -12 -75 -true - -- -color: #9f9f9f; -- -█ -- -Qt::AlignCenter -- -
-- -- -
-- -- - -12 -75 -true - -- -color: #9f9f9f; -- -█ -- -Qt::AlignCenter -- -
-- -- - -9 -75 -true - -- -color: #9f9f9f; -- -SLF -- -Qt::AlignCenter -- -
-- -- - -12 -75 -true - -- -█ -- -Qt::AlignCenter -- -
-- -- -
-- -- - -12 -75 -true - -- -█ -- -Qt::AlignCenter -- -
-- -- - -9 -75 -true - -- -ULF -- -Qt::AlignCenter -- -
-- -- - -12 -75 -true - -- -█ -- -Qt::AlignCenter -- -
-- -- -
-- -- - -12 -75 -true - -- -█ -- -Qt::AlignCenter -- -
-- -- - -9 -75 -true - -- -VLF -- -Qt::AlignCenter -- -
-- -- - -12 -75 -true - -- -█ -- -Qt::AlignCenter -- -
-- -- -
-- -- - -12 -75 -true - -- -█ -- -Qt::AlignCenter -- -
-- -- - -9 -75 -true - -- -LF -- -Qt::AlignCenter -- -
-- -- - -12 -75 -true - -- -█ -- -Qt::AlignCenter -- -
-- -- -
-- -- - -12 -75 -true - -- -█ -- -Qt::AlignCenter -- -
-- -- - -9 -75 -true - -- -MF -- -Qt::AlignCenter -- -
-- -- - -12 -75 -true - -- -█ -- -Qt::AlignCenter -- -
-- -- -
-- -- - -12 -75 -true - -- -█ -- -Qt::AlignCenter -- -
-- -- - -9 -75 -true - -- -color: #9f9f9f; -- -HF -- -Qt::AlignCenter -- -
-- -- - -12 -75 -true - -- -█ -- -Qt::AlignCenter -- -
-- -- -
-- -- - -12 -75 -true - -- -█ -- -Qt::AlignCenter -- -
-- -- - -9 -75 -true - -- -VHF -- -Qt::AlignCenter -- -
-- -- - -12 -75 -true - -- -█ -- -Qt::AlignCenter -- -
-- -- -
-- -- - -12 -75 -true - -- -█ -- -Qt::AlignCenter -- -
-- -- - -9 -75 -true - -- -UHF -- -Qt::AlignCenter -- -
-- -- - -12 -75 -true - -- -█ -- -Qt::AlignCenter -- -
-- -- -
-- -- - -12 -75 -true - -- -█ -- -Qt::AlignCenter -- -
-- -- - -9 -75 -true - -- -SHF -- -Qt::AlignCenter -- -
-- -- - -12 -75 -true - -- -color: #9f9f9f; -- -█ -- -Qt::AlignCenter -- -
-- -- -
-- -- - -12 -75 -true - -- -█ -- -Qt::AlignCenter -- -
-- -- - -9 -75 -true - -- -EHF -- -Qt::AlignCenter -- -
-- -- - -12 -75 -true - -- -color: #9f9f9f; -- -█ -- -Qt::AlignCenter -- -
-- -- -
-- -- -
-- -- -- -0 -0 -- -- -
-- -- -- -0 -0 -- - -12 - -- -N/A -- -
-- -- -- -0 -0 -- - -12 - -- -N/A -- -
-- -- -- -0 -0 -- -- -0 -0 -- - -12 -75 -true - -- -Mode -- -Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter -- -
-- -- -- -0 -0 -- - -12 - -- -N/A -- -
-- -- -- -0 -0 -- - -12 - -- -N/A -- -
-- -- -- -0 -0 -- -- -0 -0 -- - -12 -75 -true - -- -Frequency -- -Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter -- -
-- -- -- -0 -0 -- - -12 - -- -N/A -- -
-- -- -- -0 -0 -- -- -0 -0 -- - -12 -75 -true - -- -Modulation -- -Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter -- -
-- -- -- -0 -0 -- -- -0 -0 -- - -12 -75 -true - -- -Location -- -Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter -- -
-- -- -- -0 -0 -- - -12 - -- -N/A -- -
-- -- -- -0 -0 -- -- -0 -0 -- - -12 -75 -true - -- -Bandwidth -- -Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter -- -
-- -- -- -0 -0 -- -- -0 -0 -- - -12 -75 -true - -- -ACF -- -Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter -- -
-- -- -- -0 -0 -- -- -
-- -- -false -- -- -0 -0 -- - -12 -75 -true -true - -- -<html><head/><body><p><span style=" color:#000000;">Go to the signal's wiki.</span></p></body></html> -- -- - -Signal's wiki -- -true -- -
-- -- -- -0 -0 -- -- -
-- -- -- -0 -0 -- - -12 -75 -true - -- -Categories -- -Qt::AlignBottom|Qt::AlignHCenter -- -
-- -- -
-- -- -- -0 -0 -- - -10 -75 -true - -- -color: #9f9f9f; -- -Military -- -Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter -- -
-- -- -- -0 -0 -- - -10 -75 -true - -- -color: #9f9f9f; -- -Radar -- -Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter -- -
-- -- -
-- -- -- -0 -0 -- - -10 -75 -true - -- -color: #9f9f9f; -- -Active -- -Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter -- -
-- -- -- -0 -0 -- - -10 -75 -true - -- -color: #9f9f9f; -- -Inactive -- -Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter -- -
-- -- -
-- -- -- -0 -0 -- - -10 -75 -true - -- -color: #9f9f9f; -- -HAM -- -Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter -- -
-- -- -- -0 -0 -- - -10 -75 -true - -- -color: #9f9f9f; -- -Commercial -- -Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter -- -
-- -- -
-- -- -- -0 -0 -- - -10 -75 -true - -- -color: #9f9f9f; -- -Aviation -- -Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter -- -
-- -- -- -0 -0 -- - -10 -75 -true - -- -color: #9f9f9f; -- -Marine -- -Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter -- -
-- -- -
-- -- -- -0 -0 -- - -10 -75 -true - -- -color: #9f9f9f; -- -Analogue -- -Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter -- -
-- -- -- -0 -0 -- - -10 -75 -true - -- -color: #9f9f9f; -- -Digital -- -Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter -- -
-- -- -
-- -- -- -0 -0 -- - -10 -75 -true - -- -color: #9f9f9f; -- -Trunked -- -Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter -- -
-- -- -- -0 -0 -- - -10 -75 -true - -- -color: #9f9f9f; -- -Utility -- -Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter -- -
-- -- -
-- -- -- -0 -0 -- - -10 -75 -true - -- -color: #9f9f9f; -- -Sat -- -Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter -- -
-- -- -- -0 -0 -- - -10 -75 -true - -- -color: #9f9f9f; -- -Navigation -- -Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter -- -
-- -- -
-- -- -- -0 -0 -- - -10 -75 -true - -- -color: #9f9f9f; -- -Interfering -- -Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter -- -
-- -- -- -0 -0 -- - -10 -75 -true - -- -color: #9f9f9f; -- -Time Signal -- -Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter -- -
-- -- -- -0 -0 -- - -10 -75 -true - -- -color: #9f9f9f; -- -Number Stations -- -Qt::AlignCenter -- -
-- -- -- -0 -0 -- - -20 -75 -true - -- -QFrame::NoFrame -- -Qt::ScrollBarAlwaysOff -- -Qt::ScrollBarAlwaysOff -- -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><style type="text/css"> -p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:20pt; font-weight:600; font-style:normal;"> -<p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">No Signal</p></body></html> -- -- -Filters -- -- -
-- -- -Qt::NoFocus -- -- - -0 -- -true -- -- -Frequency -- -- -
-- -- -
-- -- -
-- -- -Qt::Horizontal -- -- -178 -20 -- -
-- -- - -12 -75 -true - -- -Include undefined frequencies -- -true -- -
-- -- -Qt::Horizontal -- -- -208 -20 -- -
-- -- -Qt::Horizontal -- -- -178 -20 -- -
-- -- -- -0 -0 -- -- - -- -
-- -- -true -- -- -0 -0 -- - -12 -75 -true - -- -ELF -- -true -- -
-- -- -true -- - -12 -75 -true - -- -SLF -- -true -- -
-- -- -true -- - -12 -75 -true - -- -ULF -- -true -- -
-- -- -true -- - -12 -75 -true - -- -VLF -- -true -- -
-- -- -true -- - -12 -75 -true - -- -LF -- -true -- -
-- -- -true -- -- -0 -0 -- - -12 -75 -true - -- -MF -- -true -- -
-- -- -true -- -- -0 -0 -- - -12 -75 -true - -- -HF -- -true -- -
-- -- -true -- - -12 -75 -true - -- -VHF -- -true -- -
-- -- -true -- - -12 -75 -true - -- -UHF -- -true -- -
-- -- -true -- - -12 -75 -true - -- -SHF -- -true -- -
-- -- -true -- - -12 -75 -true - -- -EHF -- -true -- -false -- -
-- -- -Qt::Horizontal -- -- -208 -20 -- -
-- -- -
-- -- -Qt::Horizontal -- -- -121 -17 -- -
-- -- -- -0 -0 -- -- - -- -
-- -- - -12 -75 -true - -- -Lower frequency -- -false -- -
-- -- -false -- -- -0 -0 -- -- -100 -0 -- -- -100 -16777215 -- - -12 - -- -- - -Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter -- -1 -- -100000000 -- -
-- -- -false -- -- -0 -0 -- -- -60 -0 -- -- -16777215 -16777215 -- - -12 -75 -true - -- -- - -MHz -- -4 -- -false -- -0 -- -
-- -MHz -- -
-- -Hz -- -
-- -kHz -- -
-- -GHz -- -
-- -- -- -0 -0 -- - -12 -75 -true - -- -Confidence % -- -Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter -- -
-- -- -false -- -- -0 -0 -- -- -60 -0 -- -- -50 -16777215 -- - -12 - -- -- - -false -- -Qt::AlignCenter -- -QAbstractSpinBox::UpDownArrows -- -- - -100 -- -0 -- -
-- -- - -12 -75 -true - -- -Upper frequency -- -false -- -
-- -- -false -- -- -0 -0 -- -- -100 -0 -- -- -100 -16777215 -- - -12 - -- -- - -Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter -- -1 -- -100000000 -- -1 -- -
-- -- -false -- -- -0 -0 -- -- -60 -0 -- -- -16777215 -16777215 -- - -12 -75 -true - -- -- - -MHz -- -
-- -MHz -- -
-- -Hz -- -
-- -kHz -- -
-- -GHz -- -
-- -- -- -0 -0 -- - -12 -75 -true - -- -Confidence % -- -Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter -- -
-- -- -false -- -- -0 -0 -- -- -60 -0 -- -- -50 -16777215 -- - -12 - -- -- - -false -- -Qt::AlignCenter -- -QAbstractSpinBox::UpDownArrows -- -- - -100 -- -0 -- -
-- -- -false -- -- -0 -0 -- - -12 -75 -false -true -false - -- -color: #9f9f9f; -- -Selected range: - -Inactive -- -Qt::AlignCenter -- -
-- -- -Qt::Horizontal -- -- -118 -17 -- -
-- -- -QLayout::SetDefaultConstraint -- -0 -- -
-- -- -Qt::Horizontal -- -- -308 -24 -- -
-- -- -true -- -- -0 -0 -- - -12 -75 -true - -- -Apply -- -true -- -
-- -- -Qt::Horizontal -- -- -260 -24 -- -
-- -- -
-- -- -Qt::Horizontal -- -- -308 -20 -- -
-- -- - -12 -75 -true - -- -Reset -- -
-- -- -Qt::Horizontal -- -- -260 -24 -- -- -Bandwidth -- -- -
-- -- -
-- -- -Qt::Horizontal -- -- -246 -20 -- -
-- -- - -12 -75 -true - -- -Include undefined bandwidths -- -true -- -
-- -- -Qt::Horizontal -- -- -287 -20 -- -
-- -- -
-- -- -Qt::Horizontal -- -- -44 -20 -- -
-- -- -- -0 -0 -- -- - -- -
-- -- -false -- -- -0 -0 -- -- -100 -0 -- -- -100 -16777215 -- - -12 - -- -- - -Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter -- -1 -- -100000000 -- -5000 -- -
-- -- -false -- -- -0 -0 -- -- -100 -0 -- -- -100 -16777215 -- - -12 - -- -- - -Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter -- -1 -- -100000000 -- -5000 -- -
-- -- - -12 -75 -true - -- -Upper band -- -false -- -
-- -- -false -- -- -0 -0 -- -- -60 -0 -- -- -50 -16777215 -- - -12 - -- -- - -false -- -Qt::AlignCenter -- -QAbstractSpinBox::UpDownArrows -- -- - -100 -- -0 -- -
-- -- -- -0 -0 -- - -12 -75 -true - -- -Confidence % -- -Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter -- -
-- -- -false -- -- -0 -0 -- -- -60 -0 -- -- -16777215 -16777215 -- - -12 -75 -true - -- -- - -MHz -- -4 -- -false -- -0 -- -
-- -MHz -- -
-- -Hz -- -
-- -kHz -- -
-- -GHz -- -
-- -- -false -- -- -0 -0 -- -- -60 -0 -- -- -50 -16777215 -- - -12 - -- -- - -false -- -Qt::AlignCenter -- -QAbstractSpinBox::UpDownArrows -- -- - -100 -- -0 -- -
-- -- -false -- -- -0 -0 -- -- -60 -0 -- -- -16777215 -16777215 -- - -12 -75 -true - -- -- - -MHz -- -
-- -MHz -- -
-- -Hz -- -
-- -kHz -- -
-- -GHz -- -
-- -- -- -0 -0 -- - -12 -75 -true - -- -Confidence % -- -Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter -- -
-- -- - -12 -75 -true - -- -Lower band -- -false -- -
-- -- -false -- -- -0 -0 -- - -12 -75 -false -true -false - -- -- - -Selected range: - -Inactive -- -Qt::AlignCenter -- -
-- -- -Qt::Horizontal -- -- -44 -20 -- -
-- -- -
-- -- -Qt::Horizontal -- -- -349 -20 -- -
-- -- -true -- - -12 -75 -true - -- -Apply -- -true -- -
-- -- -Qt::Horizontal -- -- -308 -20 -- -
-- -- -
-- -- -Qt::Horizontal -- -- -349 -20 -- -
-- -- - -12 -75 -true - -- -Reset -- -
-- -- -Qt::Horizontal -- -- -308 -20 -- -- -Category -- -- -
-- -- -
-- -- -Qt::Horizontal -- -- -102 -20 -- -
-- -- -- -50 -- -
-- -- - -12 -75 -true - -- -<html><head/><body><p>Keep all the signals which belong to <span style=" font-style:italic;">at least</span> one of the selected categories.</p></body></html> -- -- - -At least one selected -- -true -- -
-- -- - -12 -75 -true - -- -<html><head/><body><p>Keep all the signals which belong to <span style=" font-style:italic;">all </span>the selected categories.</p></body></html> -- -All selected -- -false -- -
-- -- -Qt::Horizontal -- -- -102 -20 -- -
-- -- -
-- -- -Qt::Horizontal -- -- -40 -20 -- -
-- -- -- -0 -0 -- -- -
-- -- - -12 -75 -true - -- -Number Stations -- -true -- -
-- -- - -12 -75 -true - -- -Time Signal -- -true -- -
-- -- - -12 -75 -true - -- -Interfering -- -true -- -
-- -- - -12 -75 -true - -- -Satellite -- -true -- -
-- -- - -12 -75 -true - -- -Navigation -- -true -- -
-- -- - -12 -75 -true - -- -Utility -- -true -- -
-- -- - -12 -75 -true - -- -Digital -- -true -- -
-- -- - -12 -75 -true - -- -Marine -- -true -- -
-- -- - -12 -75 -true - -- -Commercial -- -true -- -
-- -- - -12 -75 -true - -- -Inactive -- -true -- -
-- -- - -12 -75 -true - -- -Radar -- -true -- -
-- -- - -12 -75 -true - -- -Military -- -true -- -
-- -- - -12 -75 -true - -- -Active -- -true -- -
-- -- - -12 -75 -true - -- -HAM -- -true -- -
-- -- - -12 -75 -true - -- -Aviation -- -true -- -
-- -- - -12 -75 -true - -- -Analogue -- -true -- -
-- -- - -12 -75 -true - -- -Trunked -- -true -- -
-- -- -Qt::Horizontal -- -- -40 -20 -- -
-- -- -
-- -- -Qt::Horizontal -- -- -368 -20 -- -
-- -- -true -- - -12 -75 -true - -- -Apply -- -true -- -
-- -- -Qt::Horizontal -- -- -368 -20 -- -
-- -- -
-- -- -Qt::Horizontal -- -- -368 -20 -- -
-- -- - -12 -75 -true - -- -Reset -- -
-- -- -Qt::Horizontal -- -- -368 -20 -- -- -Mode -- -- -
-- -- -
-- -- -Qt::Horizontal -- -- -248 -20 -- -
-- -- - -12 -75 -true - -- -Include unknown modulations -- -true -- -
-- -- -Qt::Horizontal -- -- -228 -20 -- -
-- -- -Qt::Vertical -- -QSizePolicy::Minimum -- -- -20 -20 -- -
-- -- -
-- -- -Qt::Horizontal -- -- -171 -20 -- -
-- -- -- -0 -0 -- - -12 -75 -true - -- -Qt::NoFocus -- -QAbstractItemView::NoEditTriggers -- -QAbstractItemView::MultiSelection -- -QAbstractItemView::SelectItems -- -true -- -true -- -1 -- -- -1 -- -
-- -- -Qt::Horizontal -- -- -170 -20 -- -
-- -- -
-- -- -Qt::Horizontal -- -- -378 -20 -- -
-- -- - -12 -75 -true - -- -Apply -- -true -- -
-- -- -Qt::Horizontal -- -- -378 -20 -- -
-- -- -
-- -- -Qt::Horizontal -- -- -378 -20 -- -
-- -- - -12 -75 -true - -- -Reset -- -
-- -- -Qt::Horizontal -- -- -378 -20 -- -- -Modulation -- -- -
-- -- -
-- -- -Qt::Horizontal -- -- -162 -20 -- -
-- -- -- -
-- -- -- -0 -0 -- -
-- -- -- -0 -0 -- -- -20 -20 -- -- -20 -20 -- -- - -icons_imgs/search_icon.png -- -true -- -Qt::AlignCenter -- -
-- -- -- -0 -0 -- - -12 -50 -false - -- -QAbstractItemView::NoEditTriggers -- -QAbstractItemView::MultiSelection -- -
-- -- -Qt::Horizontal -- -- -161 -20 -- -
-- -- -
-- -- -Qt::Horizontal -- -- -378 -20 -- -
-- -- -true -- - -12 -75 -true - -- -Apply -- -true -- -
-- -- -Qt::Horizontal -- -- -378 -20 -- -
-- -- -
-- -- -Qt::Horizontal -- -- -378 -20 -- -
-- -- - -12 -75 -true - -- -Reset -- -
-- -- -Qt::Horizontal -- -- -378 -20 -- -- -Location -- -- -
-- -- -
-- -- -Qt::Horizontal -- -- -162 -20 -- -
-- -- -- -
-- -- -- -0 -0 -- -
-- -- -- -0 -0 -- -- -20 -20 -- -- - -icons_imgs/search_icon.png -- -true -- -
-- -- -- -0 -0 -- - -12 - -- -Qt::NoFocus -- -QAbstractItemView::MultiSelection -- -
-- -- -Qt::Horizontal -- -- -161 -20 -- -
-- -- -
-- -- -Qt::Horizontal -- -- -378 -20 -- -
-- -- - -12 -75 -true - -- -Apply -- -true -- -
-- -- -Qt::Horizontal -- -- -378 -20 -- -
-- -- -
-- -- -Qt::Horizontal -- -- -378 -20 -- -
-- -- - -12 -75 -true - -- -Reset -- -false -- -
-- -- -Qt::Horizontal -- -- -378 -20 -- -- -ACF -- -- -
-- -- -
-- -- -
-- -- -Qt::Horizontal -- -- -378 -20 -- -
-- -- - -12 -75 -true - -- -Info -- -
-- -- -Qt::Horizontal -- -- -378 -20 -- -
-- -- -
-- -- -Qt::Horizontal -- -- -288 -20 -- -
-- -- - -12 -75 -true - -- -Include undefined ACFs -- -true -- -
-- -- -Qt::Horizontal -- -- -288 -20 -- -
-- -- -
-- -- -Qt::Horizontal -- -- -40 -20 -- -
-- -- - -12 -75 -true - -- -Include variable ACF -- -true -- -
-- -- -Qt::Horizontal -- -- -40 -20 -- -
-- -- -
-- -- -Qt::Horizontal -- -- -52 -22 -- -
-- -- -- -
-- -- -
-- -- - -12 -75 -true - -- -AC interval -- -
-- -- -true -- -- -0 -0 -- -- -80 -0 -- -- -100 -16777215 -- - -12 - -- -- - -Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter -- -1 -- -10000 -- -50 -- -
-- -- - -12 -75 -true - -- -ms -- -
-- -- -Qt::Horizontal -- -- -49 -20 -- -
-- -- -- -0 -0 -- - -12 -75 -true - -- -Confidence % -- -Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter -- -
-- -- -true -- -- -0 -0 -- -- -60 -0 -- -- -50 -16777215 -- - -12 - -- -- - -false -- -Qt::AlignCenter -- -QAbstractSpinBox::UpDownArrows -- -- - -100 -- -0 -- -
-- -- -false -- -- -0 -0 -- - -12 -75 -false -true -false - -- -- - -Selected range: - -Inactive -- -Qt::AlignCenter -- -
-- -- -Qt::Horizontal -- -- -51 -20 -- -
-- -- -
-- -- -Qt::Horizontal -- -- -378 -20 -- -
-- -- - -12 -75 -true - -- -Apply -- -true -- -
-- -- -Qt::Horizontal -- -- -378 -20 -- -
-- -- -
-- -- -Qt::Horizontal -- -- -378 -20 -- -
-- -- - -12 -75 -true - -- -Reset -- -false -- -
-- -- -Qt::Horizontal -- -- -378 -20 -- -
-- -- -
-- -- -Qt::Horizontal -- -- -308 -20 -- -
-- -- -true -- - -15 -75 -true - -- -- - -Reset all filters -- -
-- -- -Qt::Horizontal -- -- -328 -20 -- -- -GFD -- -- -
-- -- -
-- -- - -20 -75 -true - -- -Search on Global Frequencies Database - -www.qrg.globaltuners.com -- -Qt::AlignCenter -- -
-- -- -Qt::Vertical -- -QSizePolicy::Minimum -- -- -20 -100 -- -
-- -- - -15 -75 -true - -- -Search by -- -Qt::AlignCenter -- -
-- -- -Qt::Vertical -- -QSizePolicy::Minimum -- -- -20 -80 -- -
-- -- -Qt::Horizontal -- -- -37 -20 -- -
-- -- -
-- -- -
-- -- - -12 -75 -true - -- -Frequency -- -Qt::AlignCenter -- -
-- -- -Qt::Vertical -- -QSizePolicy::Minimum -- -- -20 -40 -- -
-- -- -
-- -- -true -- -- -0 -0 -- -- -100 -0 -- -- -100 -16777215 -- - -12 - -- -- - -Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter -- -1 -- -100000000 -- -100 -- -
-- -- -true -- -- -0 -0 -- -- -60 -0 -- -- -16777215 -16777215 -- - -12 -75 -true - -- -- - -MHz -- -4 -- -false -- -0 -- -
-- -MHz -- -
-- -Hz -- -
-- -kHz -- -
-- -GHz -- -
-- -- -Qt::Vertical -- -QSizePolicy::MinimumExpanding -- -- -20 -20 -- -
-- -- - -15 -75 -true - -- -Search -- -
-- -- -Qt::Horizontal -- -- -40 -20 -- -
-- -- -
-- -- - -12 -75 -true - -- -Location/Callsign -- -Qt::AlignCenter -- -
-- -- -Qt::Vertical -- -QSizePolicy::Minimum -- -- -20 -40 -- -
-- -- - -12 - -- -
-- -- -Qt::Vertical -- -QSizePolicy::MinimumExpanding -- -- -20 -20 -- -
-- -- - -15 -75 -true - -- -Search -- -
-- -- -Qt::Horizontal -- -- -37 -20 -- -
-- -- -Qt::Vertical -- -- -20 -34 -- -- -Rx/Tx Conditions -- -- -
-- -- -0 -- -- -Now -- -- -
-- -- -QFrame::Sunken -- -1 -- -0 -- -Qt::Vertical -- -
-- -- -- -0 -0 -- -- -
-- -- -- -0 -0 -- - -13 -75 -true -true - -- -X-Rays -- -
-- -- -
-- -- -- -0 -0 -- - -11 - -- -Radio Blackout -- -25 -- -
-- -- -- -0 -0 -- -- -2 -- -
-- -- - -10 -75 -true - -- -- - -R0 -- -Qt::AlignCenter -- -
-- -- - -10 -75 -true - -- -- - -R1 -- -Qt::AlignCenter -- -
-- -- - -10 -75 -true - -- -- - -R2 -- -Qt::AlignCenter -- -
-- -- - -10 -75 -true - -- -- - -R3 -- -Qt::AlignCenter -- -
-- -- - -10 -75 -true - -- -- - -R4 -- -Qt::AlignCenter -- -
-- -- - -10 -75 -true - -- -- - -R5 -- -Qt::AlignCenter -- -
-- -- -- -0 -0 -- - -13 -75 -true -true - -- -Protons-Electrons Flux -- -
-- -- -
-- -- -- -0 -0 -- - -11 - -- -Solar Radiation Storm -- -25 -- -
-- -- -- -0 -0 -- -- -2 -- -
-- -- - -10 -75 -true - -- -- - -S0 -- -Qt::AlignCenter -- -
-- -- - -10 -75 -true - -- -- - -S1 -- -Qt::AlignCenter -- -
-- -- - -10 -75 -true - -- -- - -S2 -- -Qt::AlignCenter -- -
-- -- - -10 -75 -true - -- -- - -S3 -- -Qt::AlignCenter -- -
-- -- - -10 -75 -true - -- -- - -S4 -- -Qt::AlignCenter -- -
-- -- - -10 -75 -true - -- -- - -S5 -- -Qt::AlignCenter -- -
-- -- -- -0 -0 -- - -13 -75 -true -true - -- -Solar Activity -- -
-- -- -
-- -- -- -0 -0 -- - -11 -75 -true - -- -K-Index: -- -Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter -- -
-- -- -- -0 -0 -- - -12 - -- -N/A -- -
-- -- -
-- -- -- -0 -0 -- - -11 -75 -true - -- -A-Index: -- -Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter -- -
-- -- -- -0 -0 -- - -12 - -- -N/A -- -
-- -- -- -0 -0 -- -- -1 -- -
-- -- -- -0 -0 -- - -9 -75 -true - -- -- - -EXTREMELY SEVERE -STORM -- -Qt::AlignCenter -- -
-- -- -- -0 -0 -- - -9 -75 -true - -- -- - -VERY SEVERE STORM -- -Qt::AlignCenter -- -
-- -- -- -0 -0 -- - -9 -75 -true - -- -- - -SEVERE STORM -- -Qt::AlignCenter -- -
-- -- -- -0 -0 -- - -9 -75 -true - -- -- - -MAJOR STORM -- -Qt::AlignCenter -- -
-- -- -- -0 -0 -- - -9 -75 -true - -- -- - -MINOR STORM -- -Qt::AlignCenter -- -
-- -- -- -0 -0 -- - -9 -75 -true - -- -- - -ACTIVE -- -Qt::AlignCenter -- -
-- -- -- -0 -0 -- - -9 -75 -true - -- -- - -UNSETTLED -- -Qt::AlignCenter -- -
-- -- -- -0 -0 -- - -9 -75 -true - -- -- - -QUIET -- -Qt::AlignCenter -- -
-- -- -- -0 -0 -- - -9 -75 -true - -- -- - -VERY QUIET -- -Qt::AlignCenter -- -
-- -- -- -0 -0 -- - -9 -75 -true - -- -- - -INACTIVE -- -Qt::AlignCenter -- -
-- -- -- -0 -0 -- -- -1 -- -
-- -- -- -0 -0 -- - -9 -75 -true - -- -- - -SEVERE STORM -- -Qt::AlignCenter -- -
-- -- -- -0 -0 -- - -9 -75 -true - -- -- - -MAJOR STORM -- -Qt::AlignCenter -- -
-- -- -- -0 -0 -- - -9 -75 -true - -- -- - -MINOR STORM -- -Qt::AlignCenter -- -
-- -- -- -0 -0 -- - -9 -75 -true - -- -- - -ACTIVE -- -Qt::AlignCenter -- -
-- -- -- -0 -0 -- - -9 -75 -true - -- -- - -UNSETTLED -- -Qt::AlignCenter -- -
-- -- -- -0 -0 -- - -9 -75 -true - -- -- - -QUIET -- -Qt::AlignCenter -- -
-- -- -
-- -- -- -0 -0 -- - -11 -75 -true - -- -SFI: -- -Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter -- -
-- -- -- -0 -0 -- - -12 - -- -N/A -- -
-- -- -
-- -- -- -0 -0 -- - -11 -75 -true - -- -SN: -- -Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter -- -
-- -- -- -0 -0 -- - -12 - -- -N/A -- -
-- -- -
-- -- -
-- -- -- -0 -0 -- - -11 - -- -Geomagnetic Storm (now) -- -
-- -- -- -0 -0 -- - -11 - -- -Geomagnetic Storm (MAX 24 hrs) -- -
-- -- -
-- -- -- -0 -0 -- -- -2 -- -
-- -- - -10 -75 -true - -- -- - -G0 -- -Qt::AlignCenter -- -
-- -- - -10 -75 -true - -- -- - -G1 -- -Qt::AlignCenter -- -
-- -- - -10 -75 -true - -- -- - -G2 -- -Qt::AlignCenter -- -
-- -- - -10 -75 -true - -- -- - -G3 -- -Qt::AlignCenter -- -
-- -- - -10 -75 -true - -- -- - -G4 -- -Qt::AlignCenter -- -
-- -- - -10 -75 -true - -- -- - -G5 -- -Qt::AlignCenter -- -
-- -- -- -0 -0 -- -- -2 -- -
-- -- - -10 -75 -true - -- -- - -G0 -- -Qt::AlignCenter -- -
-- -- - -10 -75 -true - -- -- - -G1 -- -Qt::AlignCenter -- -
-- -- - -10 -75 -true - -- -- - -G2 -- -Qt::AlignCenter -- -
-- -- - -10 -75 -true - -- -- - -G3 -- -Qt::AlignCenter -- -
-- -- - -10 -75 -true - -- -- - -G4 -- -Qt::AlignCenter -- -
-- -- - -10 -75 -true - -- -- - -G5 -- -Qt::AlignCenter -- -
-- -- -
-- -- -- -0 -0 -- - -11 - -- -Peak Flux Class -- -25 -- -
-- -- -- -0 -0 -- - -12 - -- -N/A -- -Qt::AlignCenter -- -
-- -- -- -0 -0 -- -- -
-- -- - -13 -75 -true -true - -- -Propagation Data -- -
-- -- -
-- -- -- -0 -0 -- -- -
-- -- -- -0 -0 -- -Qt::LeftToRight -- -- - -- -
-- -- -- -0 -0 -- - -13 -75 -false -true - -- -Qt::LeftToRight -- -E.M.E.→ -- -Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter -- -15 -- -
-- -- -- -0 -0 -- - -13 -75 -false -true - -- -Qt::LeftToRight -- -Meteor Scatter→ -- -Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter -- -15 -- -
-- -- -- -0 -0 -- - -13 -75 -false -true - -- -Qt::LeftToRight -- -M.U.F.→ -- -Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter -- -15 -- -
-- -- -- -0 -0 -- - -13 -75 -false -true - -- -Qt::LeftToRight -- -Hystorical Index→ -- -Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter -- -15 -- -
-- -- -- -0 -0 -- - -13 -75 -false -true - -- -Qt::LeftToRight -- -QFrame::NoFrame -- -50 MHz E-skip in EU→ -- -Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter -- -15 -- -
-- -- -- -0 -0 -- - -13 -75 -false -true - -- -Qt::LeftToRight -- -70 MHz E-skip in EU→ -- -Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter -- -15 -- -
-- -- -- -0 -0 -- - -13 -75 -false -true - -- -Qt::LeftToRight -- -144 MHz E-skip in EU→ -- -Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter -- -15 -- -
-- -- -- -0 -0 -- - -13 -75 -false -true - -- -Qt::LeftToRight -- -144 MHz E-skip in NA→ -- -Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter -- -15 -- -
-- -- -- -0 -0 -- - -13 -75 -false -true - -- -Qt::LeftToRight -- -VHF Aurora→ -- -Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter -- -15 -- -
-- -- -- -0 -0 -- -- -
-- -- -- -0 -0 -- - -12 -75 -true - -- -Qt::NoFocus -- -- - -NO DATA -- -Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter -- -0 -- -12 -- -
-- -- -- -0 -0 -- - -12 -75 -true - -- -- - -NO DATA -- -Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter -- -12 -- -
-- -- -- -0 -0 -- - -12 -75 -true - -- -- - -NO DATA -- -Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter -- -12 -- -
-- -- -- -0 -0 -- - -12 -75 -true - -- -- - -NO DATA -- -Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter -- -12 -- -
-- -- -- -0 -0 -- - -12 -75 -true - -- -- - -NO DATA -- -Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter -- -12 -- -
-- -- -- -0 -0 -- - -12 -75 -true - -- -- - -NO DATA -- -Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter -- -12 -- -
-- -- -- -0 -0 -- - -12 -75 -true - -- -- - -NO DATA -- -Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter -- -12 -- -
-- -- -- -0 -0 -- - -12 -75 -true - -- -- - -NO DATA -- -Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter -- -12 -- -
-- -- -- -0 -0 -- - -12 -75 -true - -- -- - -NO DATA -- -Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter -- -12 -- -
-- -- -Qt::Vertical -- -QSizePolicy::Minimum -- -- -20 -10 -- -
-- -- -- -0 -0 -- - -13 -75 -true -true - -- -Expected HF Noise -- -
-- -- -Qt::Vertical -- -QSizePolicy::Minimum -- -- -20 -5 -- -
-- -- -
-- -- -Qt::Horizontal -- -QSizePolicy::Maximum -- -- -40 -20 -- -
-- -- -- -0 -0 -- - -10 -75 -true - -- -N/A -- -Qt::AlignCenter -- -0 -- -
-- -- -Qt::Horizontal -- -QSizePolicy::Maximum -- -- -40 -20 -- -
-- -- -Qt::Vertical -- -QSizePolicy::Minimum -- -- -20 -10 -- -
-- -- -
-- -- -- -0 -0 -- -Info -- -
-- -- -- -0 -0 -- - -8 -75 -true - -- -- - -1 -- -0 -- -Qt::AlignCenter -- -true -- -false -- -%p% -- -- -Forecast -- -- -
-- -- - -75 -true - -- -TextLabel -- -Qt::AlignCenter -- -
-- -- - -9 - -- -21 - 00 -- -25 -- -
-- -- - -75 -true - -- -TextLabel -- -Qt::AlignCenter -- -
-- -- - -75 -true - -- -TextLabel -- -Qt::AlignCenter -- -
-- -- - -75 -true - -- -TextLabel -- -Qt::AlignCenter -- -
-- -- - -75 -true - -- -TextLabel -- -Qt::AlignCenter -- -
-- -- - -75 -true - -- -TextLabel -- -Qt::AlignCenter -- -
-- -- - -75 -true - -- -TextLabel -- -Qt::AlignCenter -- -
-- -- - -9 - -- -03 - 06 -- -25 -- -
-- -- - -75 -true - -- -TextLabel -- -Qt::AlignCenter -- -
-- -- - -9 - -- -09 - 12 -- -25 -- -
-- -- - -9 -false - -- -Major -- -50 -- -
-- -- - -75 -true - -- -TextLabel -- -Qt::AlignCenter -- -
-- -- - -75 -true - -- -TextLabel -- -Qt::AlignCenter -- -
-- -- - -9 - -- -06 - 09 -- -25 -- -
-- -- - -75 -true - -- -TextLabel -- -Qt::AlignCenter -- -
-- -- - -75 -true - -- -TextLabel -- -Qt::AlignCenter -- -
-- -- - -75 -true - -- -TextLabel -- -Qt::AlignCenter -- -
-- -- - -75 -true - -- -TextLabel -- -Qt::AlignCenter -- -
-- -- - -75 -true - -- -TextLabel -- -Qt::AlignCenter -- -
-- -- - -75 -true - -- -TextLabel -- -Qt::AlignCenter -- -
-- -- - -9 - -- -15 - 18 -- -25 -- -
-- -- - -75 -true - -- -TextLabel -- -Qt::AlignCenter -- -
-- -- - -75 -true - -- -TextLabel -- -Qt::AlignCenter -- -
-- -- - -75 -true - -- -TextLabel -- -Qt::AlignCenter -- -
-- -- - -11 -75 -true - -- -Kp Index Forecast -- -
-- -- - -75 -true - -- -TextLabel -- -Qt::AlignCenter -- -
-- -- - -75 -true - -- -TextLabel -- -Qt::AlignCenter -- -
-- -- - -75 -true - -- -TextLabel -- -Qt::AlignCenter -- -
-- -- - -75 -true - -- -TextLabel -- -Qt::AlignCenter -- -
-- -- - -75 -true - -- -TextLabel -- -Qt::AlignCenter -- -
-- -- - -75 -true - -- -TextLabel -- -Qt::AlignCenter -- -
-- -- - -9 - -- -12 - 15 -- -25 -- -
-- -- - -9 - -- -00 - 03 -- -25 -- -
-- -- - -9 - -- -18 - 21 -- -25 -- -
-- -- - -75 -true - -- -TextLabel -- -Qt::AlignCenter -- -
-- -- - -75 -true - -- -TextLabel -- -Qt::AlignCenter -- -
-- -- - -75 -true - -- -TextLabel -- -Qt::AlignCenter -- -
-- -- - -75 -true - -- -TextLabel -- -Qt::AlignCenter -- -
-- -- - -75 -true - -- -TextLabel -- -Qt::AlignCenter -- -
-- -- - -75 -true - -- -TextLabel -- -Qt::AlignCenter -- -
-- -- - -9 -false - -- -Minor -- -50 -- -
-- -- - -75 -true - -- -TextLabel -- -Qt::AlignCenter -- -
-- -- - -75 -true - -- -TextLabel -- -Qt::AlignCenter -- -
-- -- - -9 -false - -- -High Lat. -- -25 -- -
-- -- - -75 -true - -- -TextLabel -- -Qt::AlignCenter -- -
-- -- -- -0 -0 -- -Qt::Horizontal -- -
-- -- - -9 - -- -R1 - R2 -- -25 -- -
-- -- - -75 -true - -- -TextLabel -- -Qt::AlignCenter -- -
-- -- - -75 -true - -- -TextLabel -- -Qt::AlignCenter -- -
-- -- - -9 - -- -> R3 -- -25 -- -
-- -- - -75 -true - -- -TextLabel -- -Qt::AlignCenter -- -
-- -- - -11 -75 -true - -- -Radio Blackout Act. -- -
-- -- - -75 -true - -- -TextLabel -- -Qt::AlignCenter -- -
-- -- - -75 -true - -- -TextLabel -- -Qt::AlignCenter -- -
-- -- - -75 -true - -- -TextLabel -- -Qt::AlignCenter -- -
-- -- - -75 -true - -- -TextLabel -- -Qt::AlignCenter -- -
-- -- - -75 -true - -- -TextLabel -- -Qt::AlignCenter -- -
-- -- - -11 -75 -true - -- -Geomagnetic Act. -- -
-- -- - -75 -true - -- -TextLabel -- -Qt::AlignCenter -- -
-- -- - -9 -false - -- -Minor -- -50 -- -
-- -- - -75 -true - -- -TextLabel -- -Qt::AlignCenter -- -
-- -- - -9 -false - -- -Mid Lat. -- -25 -- -
-- -- - -9 -false - -- -Major -- -50 -- -
-- -- - -75 -true - -- -TextLabel -- -Qt::AlignCenter -- -
-- -- - -75 -true - -- -TextLabel -- -Qt::AlignCenter -- -
-- -- - -75 -true - -- -TextLabel -- -Qt::AlignCenter -- -
-- -- - -9 -false - -- -Active -- -50 -- -
-- -- - -75 -true - -- -TextLabel -- -Qt::AlignCenter -- -
-- -- - -9 -false - -- -Active -- -50 -- -
-- -- - -75 -true - -- -TextLabel -- -Qt::AlignCenter -- -
-- -- -- -0 -0 -- -Qt::Horizontal -- -
-- -- - -9 - -- -Proton flare -- -25 -- -
-- -- - -11 -75 -true - -- -Solar Radiation Storm -- -
-- -- -- -0 -0 -- - -11 -75 -true - -- -today -- -Qt::AlignCenter -- -
-- -- - -11 -75 -true - -- -Event Probabilities -- -
-- -- -- -0 -0 -- -Info -- -
-- -- - -75 -true - -- -TextLabel -- -Qt::AlignCenter -- -
-- -- - -75 -true - -- -TextLabel -- -Qt::AlignCenter -- -
-- -- - -75 -true - -- -TextLabel -- -Qt::AlignCenter -- -
-- -- - -75 -true - -- -TextLabel -- -Qt::AlignCenter -- -
-- -- -- -0 -0 -- - -11 -75 -true - -- -today+1 -- -Qt::AlignCenter -- -
-- -- -- -0 -0 -- - -11 -75 -true - -- -today+2 -- -Qt::AlignCenter -- -
-- -- - -75 -true - -- -TextLabel -- -Qt::AlignCenter -- -
-- -- -- -0 -0 -- -Qt::Horizontal -- -
-- -- - -9 - -- -Class M flare -- -25 -- -
-- -- - -75 -true - -- -TextLabel -- -Qt::AlignCenter -- -
-- -- - -75 -true - -- -TextLabel -- -Qt::AlignCenter -- -
-- -- - -75 -true - -- -TextLabel -- -Qt::AlignCenter -- -
-- -- -- -0 -0 -- -Qt::Horizontal -- -
-- -- -- -0 -0 -- - -75 -true - -- -1 -- -0 -- -Qt::AlignCenter -- -true -- -
-- -- - -75 -true - -- -TextLabel -- -Qt::AlignCenter -- -
-- -- - -9 - -- -S1 or Greater -- -25 -- -
-- -- - -9 - -- -Class X flare -- -25 -- -
-- -- - -75 -true - -- -TextLabel -- -Qt::AlignCenter -- -
-- -- - -75 -true - -- -TextLabel -- -Qt::AlignCenter -- -
-- -- -- -0 -0 -- -- -270 -0 -- -- -270 -575 -- -- - -- -
-- -- -- -0 -0 -- --QWidget { - border: 0px; -} -QPushButton { - border: 0px solid gray; - border-color: #1d5eff; - border-radius: 25px; - background-color: transparent; -} -- -- -
-- -- -false -- -- -0 -0 -- -- -45 -45 -- -- - -false -- -
-- -- -false -- -- -0 -0 -- -- -45 -45 -- -- - -false -- -
-- -- -false -- -- -0 -0 -- -- -45 -45 -- -- - -
-- -- -- -0 -0 -- -- -45 -45 -- -- - -true -- -
-- -- -false -- -- -0 -0 -- -- -16777215 -10 -- -- - -0 -- -false -- -
-- -- -
-- -- -- -0 -0 -- -- -20 -20 -- -- - -themes/1-default/icons/volume.png -- -true -- -
-- -- -QSlider::groove:horizontal { - /*border: 1px solid #999999;*/ - height: 6px; /* the groove expands to the size of the slider by default. by giving it a height, it has a fixed size */ - background: #7a7a7a; - margin: 0 5px; - border-radius: 3px -} - -QSlider::handle:horizontal { - background: qlineargradient(x1:0, y1:0, x2:1, y2:1, stop:0 gray, stop:0.5 white, stop:1.0 gray); - border: 1px solid #5c5c5c; - width: 15px; - margin: -5px -5px; /* handle is placed by default on the contents rect of the groove. Expand outside the groove */ - border-radius: 8px; -} - -- -0 -- -100 -- -10 -- -50 -- -Qt::Horizontal -- -
-- -- -- -0 -0 -- -- -250 -417 -- -Signal waterfall -- -- - -- - -themes/1-system/icons/nosignalselected.png -- -true -- -- -- -0 -0 -1458 -21 -- -- - -- -- - -File -- - -- -Updates -- - - - -- -Sigidwiki -- - - -- -About -- - - - - -- -Settings -- - - - - - - -- -color: rgb(255, 255, 255); -- -- -Exit -- -- -Update database -- -- -Check latest database version -- -- -sigidwiki.com -- -- -Add a signal -- -- -Forum -- -- -aresvalley.com -- -- -RTL-SDR.com -- -- -GitHub -- -- -Check software version -- -- -Themes -- -- -Font... -- -- -Themes -- -- -DoubleTextButton -QPushButton -double_text_button.h -- -SwitchableLabel -QLabel -switchable_label.h -- -ClickableProgressBar -QProgressBar -clickable_progress_bar.h -- -FixedAspectRatioWidget -QWidget -fixed_aspect_ratio_widget.h -1 -- -FixedAspectRatioLabel -QLabel -fixed_aspect_ratio_label.h -- -SingleColorSwitchableLabel -QLabel -switchable_label.h -- -MultiColorSwitchableLabel -QLabel -switchable_label.h -- -UrlButton -QPushButton -urlbutton.h -- -- - - diff --git a/src/default_imgs_rc.py b/src/default_imgs_rc.py deleted file mode 100644 index b132bd5..0000000 --- a/src/default_imgs_rc.py +++ /dev/null @@ -1,6034 +0,0 @@ -# -*- coding: utf-8 -*- - -# Resource object code -# -# Created by: The Resource Compiler for PyQt5 (Qt v5.10.1) -# -# WARNING! All changes made in this file will be lost! - -from PyQt5 import QtCore - -qt_resource_data = b"\ -\x00\x00\x55\x4d\ -\x89\ -\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\ -\x00\x01\x68\x00\x00\x02\x58\x08\x06\x00\x00\x00\x4f\x77\x7c\xe5\ -\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x5c\x46\x00\x00\x5c\x46\ -\x01\x14\x94\x43\x41\x00\x00\x0b\x20\x69\x54\x58\x74\x58\x4d\x4c\ -\x3a\x63\x6f\x6d\x2e\x61\x64\x6f\x62\x65\x2e\x78\x6d\x70\x00\x00\ -\x00\x00\x00\x3c\x3f\x78\x70\x61\x63\x6b\x65\x74\x20\x62\x65\x67\ -\x69\x6e\x3d\x22\xef\xbb\xbf\x22\x20\x69\x64\x3d\x22\x57\x35\x4d\ -\x30\x4d\x70\x43\x65\x68\x69\x48\x7a\x72\x65\x53\x7a\x4e\x54\x63\ -\x7a\x6b\x63\x39\x64\x22\x3f\x3e\x20\x3c\x78\x3a\x78\x6d\x70\x6d\ -\x65\x74\x61\x20\x78\x6d\x6c\x6e\x73\x3a\x78\x3d\x22\x61\x64\x6f\ -\x62\x65\x3a\x6e\x73\x3a\x6d\x65\x74\x61\x2f\x22\x20\x78\x3a\x78\ -\x6d\x70\x74\x6b\x3d\x22\x41\x64\x6f\x62\x65\x20\x58\x4d\x50\x20\ -\x43\x6f\x72\x65\x20\x35\x2e\x36\x2d\x63\x31\x34\x32\x20\x37\x39\ -\x2e\x31\x36\x30\x39\x32\x34\x2c\x20\x32\x30\x31\x37\x2f\x30\x37\ -\x2f\x31\x33\x2d\x30\x31\x3a\x30\x36\x3a\x33\x39\x20\x20\x20\x20\ -\x20\x20\x20\x20\x22\x3e\x20\x3c\x72\x64\x66\x3a\x52\x44\x46\x20\ -\x78\x6d\x6c\x6e\x73\x3a\x72\x64\x66\x3d\x22\x68\x74\x74\x70\x3a\ -\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\ -\x39\x2f\x30\x32\x2f\x32\x32\x2d\x72\x64\x66\x2d\x73\x79\x6e\x74\ -\x61\x78\x2d\x6e\x73\x23\x22\x3e\x20\x3c\x72\x64\x66\x3a\x44\x65\ -\x73\x63\x72\x69\x70\x74\x69\x6f\x6e\x20\x72\x64\x66\x3a\x61\x62\ -\x6f\x75\x74\x3d\x22\x22\x20\x78\x6d\x6c\x6e\x73\x3a\x78\x6d\x70\ -\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x6e\x73\x2e\x61\x64\x6f\x62\ -\x65\x2e\x63\x6f\x6d\x2f\x78\x61\x70\x2f\x31\x2e\x30\x2f\x22\x20\ -\x78\x6d\x6c\x6e\x73\x3a\x70\x68\x6f\x74\x6f\x73\x68\x6f\x70\x3d\ -\x22\x68\x74\x74\x70\x3a\x2f\x2f\x6e\x73\x2e\x61\x64\x6f\x62\x65\ -\x2e\x63\x6f\x6d\x2f\x70\x68\x6f\x74\x6f\x73\x68\x6f\x70\x2f\x31\ -\x2e\x30\x2f\x22\x20\x78\x6d\x6c\x6e\x73\x3a\x64\x63\x3d\x22\x68\ -\x74\x74\x70\x3a\x2f\x2f\x70\x75\x72\x6c\x2e\x6f\x72\x67\x2f\x64\ -\x63\x2f\x65\x6c\x65\x6d\x65\x6e\x74\x73\x2f\x31\x2e\x31\x2f\x22\ -\x20\x78\x6d\x6c\x6e\x73\x3a\x78\x6d\x70\x4d\x4d\x3d\x22\x68\x74\ -\x74\x70\x3a\x2f\x2f\x6e\x73\x2e\x61\x64\x6f\x62\x65\x2e\x63\x6f\ -\x6d\x2f\x78\x61\x70\x2f\x31\x2e\x30\x2f\x6d\x6d\x2f\x22\x20\x78\ -\x6d\x6c\x6e\x73\x3a\x73\x74\x45\x76\x74\x3d\x22\x68\x74\x74\x70\ -\x3a\x2f\x2f\x6e\x73\x2e\x61\x64\x6f\x62\x65\x2e\x63\x6f\x6d\x2f\ -\x78\x61\x70\x2f\x31\x2e\x30\x2f\x73\x54\x79\x70\x65\x2f\x52\x65\ -\x73\x6f\x75\x72\x63\x65\x45\x76\x65\x6e\x74\x23\x22\x20\x78\x6d\ -\x6c\x6e\x73\x3a\x73\x74\x52\x65\x66\x3d\x22\x68\x74\x74\x70\x3a\ -\x2f\x2f\x6e\x73\x2e\x61\x64\x6f\x62\x65\x2e\x63\x6f\x6d\x2f\x78\ -\x61\x70\x2f\x31\x2e\x30\x2f\x73\x54\x79\x70\x65\x2f\x52\x65\x73\ -\x6f\x75\x72\x63\x65\x52\x65\x66\x23\x22\x20\x78\x6d\x6c\x6e\x73\ -\x3a\x74\x69\x66\x66\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x6e\x73\ -\x2e\x61\x64\x6f\x62\x65\x2e\x63\x6f\x6d\x2f\x74\x69\x66\x66\x2f\ -\x31\x2e\x30\x2f\x22\x20\x78\x6d\x6c\x6e\x73\x3a\x65\x78\x69\x66\ -\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x6e\x73\x2e\x61\x64\x6f\x62\ -\x65\x2e\x63\x6f\x6d\x2f\x65\x78\x69\x66\x2f\x31\x2e\x30\x2f\x22\ -\x20\x78\x6d\x70\x3a\x43\x72\x65\x61\x74\x6f\x72\x54\x6f\x6f\x6c\ -\x3d\x22\x41\x64\x6f\x62\x65\x20\x50\x68\x6f\x74\x6f\x73\x68\x6f\ -\x70\x20\x43\x43\x20\x28\x57\x69\x6e\x64\x6f\x77\x73\x29\x22\x20\ -\x78\x6d\x70\x3a\x43\x72\x65\x61\x74\x65\x44\x61\x74\x65\x3d\x22\ -\x32\x30\x31\x38\x2d\x31\x31\x2d\x30\x33\x54\x31\x39\x3a\x31\x32\ -\x3a\x30\x38\x2b\x30\x31\x3a\x30\x30\x22\x20\x78\x6d\x70\x3a\x4d\ -\x65\x74\x61\x64\x61\x74\x61\x44\x61\x74\x65\x3d\x22\x32\x30\x31\ -\x38\x2d\x31\x31\x2d\x30\x38\x54\x31\x38\x3a\x33\x34\x3a\x35\x32\ -\x2b\x30\x31\x3a\x30\x30\x22\x20\x78\x6d\x70\x3a\x4d\x6f\x64\x69\ -\x66\x79\x44\x61\x74\x65\x3d\x22\x32\x30\x31\x38\x2d\x31\x31\x2d\ -\x30\x38\x54\x31\x38\x3a\x33\x34\x3a\x35\x32\x2b\x30\x31\x3a\x30\ -\x30\x22\x20\x70\x68\x6f\x74\x6f\x73\x68\x6f\x70\x3a\x43\x6f\x6c\ -\x6f\x72\x4d\x6f\x64\x65\x3d\x22\x33\x22\x20\x70\x68\x6f\x74\x6f\ -\x73\x68\x6f\x70\x3a\x49\x43\x43\x50\x72\x6f\x66\x69\x6c\x65\x3d\ -\x22\x73\x52\x47\x42\x20\x49\x45\x43\x36\x31\x39\x36\x36\x2d\x32\ -\x2e\x31\x22\x20\x64\x63\x3a\x66\x6f\x72\x6d\x61\x74\x3d\x22\x69\ -\x6d\x61\x67\x65\x2f\x70\x6e\x67\x22\x20\x78\x6d\x70\x4d\x4d\x3a\ -\x49\x6e\x73\x74\x61\x6e\x63\x65\x49\x44\x3d\x22\x78\x6d\x70\x2e\ -\x69\x69\x64\x3a\x64\x31\x64\x30\x61\x63\x35\x65\x2d\x64\x30\x65\ -\x37\x2d\x66\x34\x34\x33\x2d\x38\x35\x32\x38\x2d\x32\x65\x32\x65\ -\x66\x31\x31\x33\x34\x38\x37\x34\x22\x20\x78\x6d\x70\x4d\x4d\x3a\ -\x44\x6f\x63\x75\x6d\x65\x6e\x74\x49\x44\x3d\x22\x61\x64\x6f\x62\ -\x65\x3a\x64\x6f\x63\x69\x64\x3a\x70\x68\x6f\x74\x6f\x73\x68\x6f\ -\x70\x3a\x31\x31\x37\x33\x39\x30\x63\x35\x2d\x30\x32\x66\x32\x2d\ -\x32\x34\x34\x34\x2d\x38\x35\x62\x39\x2d\x37\x37\x35\x35\x33\x61\ -\x61\x38\x63\x62\x63\x34\x22\x20\x78\x6d\x70\x4d\x4d\x3a\x4f\x72\ -\x69\x67\x69\x6e\x61\x6c\x44\x6f\x63\x75\x6d\x65\x6e\x74\x49\x44\ -\x3d\x22\x78\x6d\x70\x2e\x64\x69\x64\x3a\x34\x35\x36\x66\x38\x30\ -\x33\x66\x2d\x31\x36\x33\x31\x2d\x31\x39\x34\x62\x2d\x61\x37\x39\ -\x61\x2d\x34\x32\x33\x32\x32\x65\x66\x39\x37\x62\x38\x37\x22\x20\ -\x74\x69\x66\x66\x3a\x4f\x72\x69\x65\x6e\x74\x61\x74\x69\x6f\x6e\ -\x3d\x22\x31\x22\x20\x74\x69\x66\x66\x3a\x58\x52\x65\x73\x6f\x6c\ -\x75\x74\x69\x6f\x6e\x3d\x22\x36\x30\x30\x30\x30\x30\x30\x2f\x31\ -\x30\x30\x30\x30\x22\x20\x74\x69\x66\x66\x3a\x59\x52\x65\x73\x6f\ -\x6c\x75\x74\x69\x6f\x6e\x3d\x22\x36\x30\x30\x30\x30\x30\x30\x2f\ -\x31\x30\x30\x30\x30\x22\x20\x74\x69\x66\x66\x3a\x52\x65\x73\x6f\ -\x6c\x75\x74\x69\x6f\x6e\x55\x6e\x69\x74\x3d\x22\x32\x22\x20\x65\ -\x78\x69\x66\x3a\x43\x6f\x6c\x6f\x72\x53\x70\x61\x63\x65\x3d\x22\ -\x31\x22\x20\x65\x78\x69\x66\x3a\x50\x69\x78\x65\x6c\x58\x44\x69\ -\x6d\x65\x6e\x73\x69\x6f\x6e\x3d\x22\x33\x36\x30\x22\x20\x65\x78\ -\x69\x66\x3a\x50\x69\x78\x65\x6c\x59\x44\x69\x6d\x65\x6e\x73\x69\ -\x6f\x6e\x3d\x22\x36\x30\x30\x22\x3e\x20\x3c\x70\x68\x6f\x74\x6f\ -\x73\x68\x6f\x70\x3a\x44\x6f\x63\x75\x6d\x65\x6e\x74\x41\x6e\x63\ -\x65\x73\x74\x6f\x72\x73\x3e\x20\x3c\x72\x64\x66\x3a\x42\x61\x67\ -\x3e\x20\x3c\x72\x64\x66\x3a\x6c\x69\x3e\x61\x64\x6f\x62\x65\x3a\ -\x64\x6f\x63\x69\x64\x3a\x70\x68\x6f\x74\x6f\x73\x68\x6f\x70\x3a\ -\x36\x32\x66\x36\x34\x31\x33\x62\x2d\x30\x36\x66\x34\x2d\x39\x30\ -\x34\x62\x2d\x38\x33\x63\x38\x2d\x64\x37\x35\x39\x64\x34\x30\x62\ -\x32\x64\x64\x35\x3c\x2f\x72\x64\x66\x3a\x6c\x69\x3e\x20\x3c\x2f\ -\x72\x64\x66\x3a\x42\x61\x67\x3e\x20\x3c\x2f\x70\x68\x6f\x74\x6f\ -\x73\x68\x6f\x70\x3a\x44\x6f\x63\x75\x6d\x65\x6e\x74\x41\x6e\x63\ -\x65\x73\x74\x6f\x72\x73\x3e\x20\x3c\x78\x6d\x70\x4d\x4d\x3a\x48\ -\x69\x73\x74\x6f\x72\x79\x3e\x20\x3c\x72\x64\x66\x3a\x53\x65\x71\ -\x3e\x20\x3c\x72\x64\x66\x3a\x6c\x69\x20\x73\x74\x45\x76\x74\x3a\ -\x61\x63\x74\x69\x6f\x6e\x3d\x22\x63\x72\x65\x61\x74\x65\x64\x22\ -\x20\x73\x74\x45\x76\x74\x3a\x69\x6e\x73\x74\x61\x6e\x63\x65\x49\ -\x44\x3d\x22\x78\x6d\x70\x2e\x69\x69\x64\x3a\x34\x35\x36\x66\x38\ -\x30\x33\x66\x2d\x31\x36\x33\x31\x2d\x31\x39\x34\x62\x2d\x61\x37\ -\x39\x61\x2d\x34\x32\x33\x32\x32\x65\x66\x39\x37\x62\x38\x37\x22\ -\x20\x73\x74\x45\x76\x74\x3a\x77\x68\x65\x6e\x3d\x22\x32\x30\x31\ -\x38\x2d\x31\x31\x2d\x30\x33\x54\x31\x39\x3a\x31\x32\x3a\x30\x38\ -\x2b\x30\x31\x3a\x30\x30\x22\x20\x73\x74\x45\x76\x74\x3a\x73\x6f\ -\x66\x74\x77\x61\x72\x65\x41\x67\x65\x6e\x74\x3d\x22\x41\x64\x6f\ -\x62\x65\x20\x50\x68\x6f\x74\x6f\x73\x68\x6f\x70\x20\x43\x43\x20\ -\x28\x57\x69\x6e\x64\x6f\x77\x73\x29\x22\x2f\x3e\x20\x3c\x72\x64\ -\x66\x3a\x6c\x69\x20\x73\x74\x45\x76\x74\x3a\x61\x63\x74\x69\x6f\ -\x6e\x3d\x22\x73\x61\x76\x65\x64\x22\x20\x73\x74\x45\x76\x74\x3a\ -\x69\x6e\x73\x74\x61\x6e\x63\x65\x49\x44\x3d\x22\x78\x6d\x70\x2e\ -\x69\x69\x64\x3a\x33\x63\x39\x61\x36\x34\x31\x63\x2d\x33\x65\x39\ -\x33\x2d\x62\x35\x34\x64\x2d\x61\x39\x38\x61\x2d\x66\x35\x38\x38\ -\x31\x31\x33\x31\x35\x32\x61\x31\x22\x20\x73\x74\x45\x76\x74\x3a\ -\x77\x68\x65\x6e\x3d\x22\x32\x30\x31\x38\x2d\x31\x31\x2d\x30\x33\ -\x54\x31\x39\x3a\x34\x35\x3a\x34\x30\x2b\x30\x31\x3a\x30\x30\x22\ -\x20\x73\x74\x45\x76\x74\x3a\x73\x6f\x66\x74\x77\x61\x72\x65\x41\ -\x67\x65\x6e\x74\x3d\x22\x41\x64\x6f\x62\x65\x20\x50\x68\x6f\x74\ -\x6f\x73\x68\x6f\x70\x20\x43\x43\x20\x28\x57\x69\x6e\x64\x6f\x77\ -\x73\x29\x22\x20\x73\x74\x45\x76\x74\x3a\x63\x68\x61\x6e\x67\x65\ -\x64\x3d\x22\x2f\x22\x2f\x3e\x20\x3c\x72\x64\x66\x3a\x6c\x69\x20\ -\x73\x74\x45\x76\x74\x3a\x61\x63\x74\x69\x6f\x6e\x3d\x22\x63\x6f\ -\x6e\x76\x65\x72\x74\x65\x64\x22\x20\x73\x74\x45\x76\x74\x3a\x70\ -\x61\x72\x61\x6d\x65\x74\x65\x72\x73\x3d\x22\x66\x72\x6f\x6d\x20\ -\x61\x70\x70\x6c\x69\x63\x61\x74\x69\x6f\x6e\x2f\x76\x6e\x64\x2e\ -\x61\x64\x6f\x62\x65\x2e\x70\x68\x6f\x74\x6f\x73\x68\x6f\x70\x20\ -\x74\x6f\x20\x69\x6d\x61\x67\x65\x2f\x70\x6e\x67\x22\x2f\x3e\x20\ -\x3c\x72\x64\x66\x3a\x6c\x69\x20\x73\x74\x45\x76\x74\x3a\x61\x63\ -\x74\x69\x6f\x6e\x3d\x22\x64\x65\x72\x69\x76\x65\x64\x22\x20\x73\ -\x74\x45\x76\x74\x3a\x70\x61\x72\x61\x6d\x65\x74\x65\x72\x73\x3d\ -\x22\x63\x6f\x6e\x76\x65\x72\x74\x65\x64\x20\x66\x72\x6f\x6d\x20\ -\x61\x70\x70\x6c\x69\x63\x61\x74\x69\x6f\x6e\x2f\x76\x6e\x64\x2e\ -\x61\x64\x6f\x62\x65\x2e\x70\x68\x6f\x74\x6f\x73\x68\x6f\x70\x20\ -\x74\x6f\x20\x69\x6d\x61\x67\x65\x2f\x70\x6e\x67\x22\x2f\x3e\x20\ -\x3c\x72\x64\x66\x3a\x6c\x69\x20\x73\x74\x45\x76\x74\x3a\x61\x63\ -\x74\x69\x6f\x6e\x3d\x22\x73\x61\x76\x65\x64\x22\x20\x73\x74\x45\ -\x76\x74\x3a\x69\x6e\x73\x74\x61\x6e\x63\x65\x49\x44\x3d\x22\x78\ -\x6d\x70\x2e\x69\x69\x64\x3a\x61\x62\x37\x31\x31\x65\x31\x35\x2d\ -\x31\x61\x32\x38\x2d\x65\x62\x34\x30\x2d\x61\x37\x61\x65\x2d\x63\ -\x61\x33\x66\x35\x39\x34\x36\x63\x32\x31\x36\x22\x20\x73\x74\x45\ -\x76\x74\x3a\x77\x68\x65\x6e\x3d\x22\x32\x30\x31\x38\x2d\x31\x31\ -\x2d\x30\x33\x54\x31\x39\x3a\x34\x35\x3a\x34\x30\x2b\x30\x31\x3a\ -\x30\x30\x22\x20\x73\x74\x45\x76\x74\x3a\x73\x6f\x66\x74\x77\x61\ -\x72\x65\x41\x67\x65\x6e\x74\x3d\x22\x41\x64\x6f\x62\x65\x20\x50\ -\x68\x6f\x74\x6f\x73\x68\x6f\x70\x20\x43\x43\x20\x28\x57\x69\x6e\ -\x64\x6f\x77\x73\x29\x22\x20\x73\x74\x45\x76\x74\x3a\x63\x68\x61\ -\x6e\x67\x65\x64\x3d\x22\x2f\x22\x2f\x3e\x20\x3c\x72\x64\x66\x3a\ -\x6c\x69\x20\x73\x74\x45\x76\x74\x3a\x61\x63\x74\x69\x6f\x6e\x3d\ -\x22\x73\x61\x76\x65\x64\x22\x20\x73\x74\x45\x76\x74\x3a\x69\x6e\ -\x73\x74\x61\x6e\x63\x65\x49\x44\x3d\x22\x78\x6d\x70\x2e\x69\x69\ -\x64\x3a\x64\x31\x64\x30\x61\x63\x35\x65\x2d\x64\x30\x65\x37\x2d\ -\x66\x34\x34\x33\x2d\x38\x35\x32\x38\x2d\x32\x65\x32\x65\x66\x31\ -\x31\x33\x34\x38\x37\x34\x22\x20\x73\x74\x45\x76\x74\x3a\x77\x68\ -\x65\x6e\x3d\x22\x32\x30\x31\x38\x2d\x31\x31\x2d\x30\x38\x54\x31\ -\x38\x3a\x33\x34\x3a\x35\x32\x2b\x30\x31\x3a\x30\x30\x22\x20\x73\ -\x74\x45\x76\x74\x3a\x73\x6f\x66\x74\x77\x61\x72\x65\x41\x67\x65\ -\x6e\x74\x3d\x22\x41\x64\x6f\x62\x65\x20\x50\x68\x6f\x74\x6f\x73\ -\x68\x6f\x70\x20\x43\x43\x20\x28\x57\x69\x6e\x64\x6f\x77\x73\x29\ -\x22\x20\x73\x74\x45\x76\x74\x3a\x63\x68\x61\x6e\x67\x65\x64\x3d\ -\x22\x2f\x22\x2f\x3e\x20\x3c\x2f\x72\x64\x66\x3a\x53\x65\x71\x3e\ -\x20\x3c\x2f\x78\x6d\x70\x4d\x4d\x3a\x48\x69\x73\x74\x6f\x72\x79\ -\x3e\x20\x3c\x78\x6d\x70\x4d\x4d\x3a\x44\x65\x72\x69\x76\x65\x64\ -\x46\x72\x6f\x6d\x20\x73\x74\x52\x65\x66\x3a\x69\x6e\x73\x74\x61\ -\x6e\x63\x65\x49\x44\x3d\x22\x78\x6d\x70\x2e\x69\x69\x64\x3a\x33\ -\x63\x39\x61\x36\x34\x31\x63\x2d\x33\x65\x39\x33\x2d\x62\x35\x34\ -\x64\x2d\x61\x39\x38\x61\x2d\x66\x35\x38\x38\x31\x31\x33\x31\x35\ -\x32\x61\x31\x22\x20\x73\x74\x52\x65\x66\x3a\x64\x6f\x63\x75\x6d\ -\x65\x6e\x74\x49\x44\x3d\x22\x78\x6d\x70\x2e\x64\x69\x64\x3a\x34\ -\x35\x36\x66\x38\x30\x33\x66\x2d\x31\x36\x33\x31\x2d\x31\x39\x34\ -\x62\x2d\x61\x37\x39\x61\x2d\x34\x32\x33\x32\x32\x65\x66\x39\x37\ -\x62\x38\x37\x22\x20\x73\x74\x52\x65\x66\x3a\x6f\x72\x69\x67\x69\ -\x6e\x61\x6c\x44\x6f\x63\x75\x6d\x65\x6e\x74\x49\x44\x3d\x22\x78\ -\x6d\x70\x2e\x64\x69\x64\x3a\x34\x35\x36\x66\x38\x30\x33\x66\x2d\ -\x31\x36\x33\x31\x2d\x31\x39\x34\x62\x2d\x61\x37\x39\x61\x2d\x34\ -\x32\x33\x32\x32\x65\x66\x39\x37\x62\x38\x37\x22\x2f\x3e\x20\x3c\ -\x2f\x72\x64\x66\x3a\x44\x65\x73\x63\x72\x69\x70\x74\x69\x6f\x6e\ -\x3e\x20\x3c\x2f\x72\x64\x66\x3a\x52\x44\x46\x3e\x20\x3c\x2f\x78\ -\x3a\x78\x6d\x70\x6d\x65\x74\x61\x3e\x20\x3c\x3f\x78\x70\x61\x63\ -\x6b\x65\x74\x20\x65\x6e\x64\x3d\x22\x72\x22\x3f\x3e\x57\x75\xc0\ -\xf8\x00\x00\x49\xd3\x49\x44\x41\x54\x78\xda\xed\x9d\x77\x9c\x5f\ -\x53\xfe\xb8\x23\x88\x2e\x42\xf4\x3e\x88\x5e\x23\x5a\xd4\x88\x16\ -\x8b\xb5\x64\xd5\x5d\x6d\x05\xab\xd7\x61\xb5\xe8\xa3\xf7\x12\xab\ -\xac\xbe\x46\x3b\x7a\xec\x10\xbd\xc4\x0e\xc1\xea\x8c\x65\xf5\x60\ -\x48\x90\xa2\xcd\xef\x9e\xef\xbc\x3f\xbf\xdc\xdc\xdc\x5e\xcf\xbd\ -\xf7\xf9\xe3\x79\xbd\x92\x99\xcf\xdc\x72\xee\x39\xcf\xe7\xdc\x73\ -\xde\xe7\x7d\x7a\x74\x75\x75\xf5\x00\x00\x00\xf3\xa0\x10\x00\x00\ -\x10\x34\x00\x00\x20\x68\x00\x00\x04\x0d\x00\x00\x08\x1a\x00\x00\ -\x41\x03\x00\x00\x82\x06\x00\x00\x04\x0d\x00\x80\xa0\x01\x00\x00\ -\x41\x03\x00\x20\xe8\x10\xa8\x51\xa3\x01\x8a\xe4\x30\x8b\x6b\x29\ -\x07\x30\x09\x04\x0d\xd0\xcd\x33\x16\x5d\x16\x3b\x52\x16\x80\xa0\ -\x11\x34\x98\xc3\x9c\x16\xe3\x45\xd0\x9a\x3d\x28\x13\x40\xd0\x08\ -\x1a\xcc\x60\x35\x9b\x9c\x1b\x34\x51\x2e\x80\xa0\x11\x34\x14\xcf\ -\x7e\x2e\x82\x7e\x89\x72\x01\x04\x8d\xa0\xa1\x78\x5e\x72\x11\xb4\ -\xe6\x36\xca\x06\x10\x34\x82\x86\xe2\x58\x50\x64\xfc\x4f\x8b\xcf\ -\x5d\x24\xbd\x03\x65\x04\x08\x9a\x87\x01\xc5\x70\x96\x88\x58\xff\ -\xfb\x41\x17\x41\x4f\xb0\x98\x85\x72\x02\x04\x0d\x90\x3f\x5f\x59\ -\xfc\x26\xff\x3e\xc9\x63\xa8\xe3\x1e\xca\x09\x10\x34\x40\xbe\x2c\ -\x25\x02\xfe\xbb\xfc\x7f\x25\x0f\x41\x6b\x8e\xa2\xbc\x00\x41\x03\ -\xe4\xc7\xee\x22\xdf\x81\xb6\x9f\x8d\xf7\x91\x34\x43\x1d\x80\xa0\ -\x01\x72\xe2\x11\x11\xef\x8c\xb6\x9f\x8d\xf1\x11\xf4\x33\x94\x19\ -\x20\x68\x80\xec\x99\x4e\xa4\xdb\xea\xf8\x79\x8b\x8f\xa0\x35\x57\ -\x51\x76\x80\xa0\x01\xb2\x65\x2b\x11\xee\x9a\x1e\xe3\xd2\x7e\x1c\ -\x49\xf9\x01\x82\x06\xc8\x8e\xa7\x2d\x7e\xf5\xf8\xdd\x63\x21\x24\ -\x7d\x07\x65\x08\x08\x1a\x20\x7d\x66\x11\xc9\x3e\xe4\xf1\xfb\x7e\ -\x21\x04\xad\x69\xb7\xd8\x9a\xf2\x04\x04\x0d\x90\x1e\x7f\x16\xc1\ -\x1e\xe6\xf3\x99\x63\x42\x4a\xba\x4b\x26\x1b\x57\xa6\x5c\x01\x41\ -\x03\x24\xe7\x36\x11\xeb\x52\x01\x9f\x1b\x1e\x41\xd2\x8d\xdc\x1d\ -\xeb\x5a\xcc\x4c\x19\x03\x82\x06\x88\xc7\x77\x16\xef\x87\xfc\xec\ -\xb2\x16\x17\x58\x8c\x8b\x20\xea\x2f\x2c\xae\xb6\xd8\xd2\x62\x36\ -\xca\x1b\x10\x34\x40\x38\x16\x12\x89\x9e\x10\xf1\xef\xe6\x13\xe9\ -\xfe\x1a\xb1\x57\xfd\xa5\xc5\x0d\x16\x3b\x5b\x2c\x4f\xf9\x03\x82\ -\x06\xf0\xe6\x2a\x11\x67\xdf\x98\x7f\xbf\x84\xc8\xfd\x9b\x88\xa2\ -\x6e\xf0\xb6\xc5\x28\x8b\x7f\x58\xfc\xc5\x62\x15\x8b\x99\x78\x2e\ -\x80\xa0\x01\x46\x8d\xfe\xc9\xe2\xdd\x14\x8e\x33\x97\xc5\x4d\x31\ -\x25\xed\x44\xa7\x39\xbd\xd7\xe2\x68\x8b\xf5\x64\x11\x0d\xcf\x0a\ -\x10\x34\xd4\x8a\x65\x55\xfa\x89\x8f\x06\x59\x3c\x9c\x92\xa8\x1b\ -\x74\xc8\x70\xca\xf1\x16\x6b\xf1\xdc\x10\x34\x82\x86\x3a\x70\xa1\ -\x08\x70\x93\x0c\x8e\xad\x87\x2b\x7e\x4c\x59\xd4\xf6\xed\xb7\x8e\ -\x95\xe1\x15\x9e\x23\x82\x46\xd0\x50\x49\xbe\x91\x49\xbe\xac\xc6\ -\x7c\x97\x54\x53\x12\x30\x65\xc1\x6f\x72\xfc\x5d\x2c\x56\xe0\x79\ -\x22\x68\x04\x0d\x55\x42\x4b\xee\xee\x1c\xce\xf3\xc7\x0c\x25\x6d\ -\xe7\x4e\x8b\xcd\x78\xae\x08\x1a\x41\x43\xd9\xd9\x5c\xa4\xb6\x65\ -\x4e\xe7\xd3\x93\x7d\xaf\xe5\x24\xea\x7f\xa9\xee\xe4\x4f\xb3\xf2\ -\x9c\x11\x34\x82\x86\x32\xf2\xaa\x9a\xb2\xf7\x60\x9e\x9c\x93\x93\ -\xa4\x1b\x0b\x64\x4e\x46\xd4\x08\x1a\x41\x43\x99\x98\x43\x4d\xbd\ -\xb5\x55\xde\x1c\x61\xf1\x4b\x8e\xa2\xfe\x9f\xc5\x3e\x16\xbd\x79\ -\xf6\x08\x1a\x41\x83\xe9\xec\x29\xe2\x2a\x32\x64\x6d\x59\x19\x8a\ -\xe8\xca\x91\x6f\xa4\x47\xdd\x87\x3a\x80\xa0\x11\x34\x98\xca\x0b\ -\x22\xac\xb9\x0d\xb8\x16\xbd\x41\xc0\x79\x12\x8d\xf1\x7a\x00\x93\ -\x53\x12\x75\xa7\x84\x01\x52\x17\x10\x34\x82\x06\xa3\x98\x57\x24\ -\xf5\x46\x09\xaf\x7d\x41\x11\xfa\xef\x25\xfa\x24\xa9\xa8\x75\x19\ -\x1c\x48\x9d\x40\xd0\x08\x1a\x4c\x61\x4d\x91\xd3\xb0\x8a\xdc\xcb\ -\x6d\x29\x88\x5a\xef\x26\xb3\x36\x75\x03\x41\x23\x68\x28\x9a\xb3\ -\x45\x4a\xf3\x55\xe8\x9e\xf4\xf2\xf2\x53\x2d\xbe\x4d\x28\xea\x8b\ -\x14\x19\xf6\x10\x34\x82\x86\x82\x17\xa7\xfc\xb7\xa2\xf7\xa6\xc7\ -\xd4\x4f\x49\xa1\x47\xcd\xf8\x34\x82\x46\xd0\x90\x3b\xeb\x88\x80\ -\xf6\xa9\xf8\x7d\xea\x5e\xf0\xe5\x16\x13\x13\x0e\x7b\x6c\x40\x9d\ -\x41\xd0\x08\x1a\xf2\x62\xa4\xc8\xa7\x2e\xe9\x3b\x75\x2e\x90\x6b\ -\x13\xf6\xa6\xaf\x23\x7e\x1a\x41\x23\x68\xc8\x9a\x9e\x12\xa6\x36\ -\xb9\x86\xf7\xbe\xa9\xc5\x18\x95\x2c\xdd\xe9\xc6\xd4\x21\x04\x8d\ -\xa0\x21\x2b\x36\x11\xd9\x5c\x5e\xe3\x32\xd0\xf9\x39\x3e\x4e\x20\ -\xea\x87\x2c\x16\xa1\x2e\x21\x68\x1e\x06\xa4\xcd\xd1\x22\x99\xba\ -\x8f\xab\xce\xae\xba\x37\xbd\x8d\x2b\xe9\xef\x2d\xb6\xa6\x3e\x21\ -\x68\x80\x34\xf9\x8f\x08\xa6\x17\x65\xf1\x7f\xe8\xb8\xe7\x1b\x13\ -\x88\xfa\x12\xca\x10\x41\x03\xa4\xc1\xcc\x22\x95\xdb\x29\x8b\x69\ -\x38\x24\x81\xa4\x5f\xa5\xfc\x10\x34\x40\x52\x0e\x15\xa1\x2c\x47\ -\x59\xb8\xb2\xb2\x7c\x79\xc5\x91\xb4\xce\x6b\xb2\x3e\x65\x88\xa0\ -\x01\xe2\xf2\x45\x4d\xa3\x37\xa2\xa2\x97\xbf\x4f\x8a\x29\xea\x15\ -\x29\x3f\x04\x0d\x10\x95\xf9\x44\x20\xf7\x51\x16\xa1\xd0\xa2\x7d\ -\x2e\x86\xa0\x3f\xb3\x58\x95\xf2\x43\xd0\x00\x71\x86\x37\x58\xbe\ -\x1c\x2f\xea\x25\x2a\x24\x5d\x42\xd0\x00\xa1\x79\x54\xc4\x41\x92\ -\xfa\xe8\xec\x65\x31\x2e\xa2\xa0\x75\xc2\xa6\x26\xca\x0e\x41\x03\ -\x04\x31\xa3\xea\xde\x5a\xea\x6d\xca\x22\x36\x7d\x2d\x9e\x8a\x28\ -\xe9\x49\xac\x3c\x44\xd0\x00\x41\x0c\x10\x61\xec\x4b\x59\x24\xe6\ -\x9e\x88\x92\xfe\x8e\x32\x43\xd0\x00\x7e\xdc\x21\xb2\x98\x99\xb2\ -\x48\x85\xfd\x23\x4a\xfa\x19\xca\x0c\x41\x03\x78\xa1\x25\xd1\x4e\ -\x39\xa4\xca\x76\x2a\xda\xde\x88\x77\x51\x66\x08\x1a\xc0\xc9\xef\ -\x45\x10\x87\x52\x16\xa9\xa3\x17\xfc\x7c\x15\x41\xd2\x7b\x51\x66\ -\x08\x1a\xc0\x4e\x63\x53\xd5\x35\x28\x8b\x4c\x58\xc8\x62\x54\x04\ -\x49\xaf\x46\x99\x21\x68\x80\x06\x7a\x37\x91\x9f\x29\x87\xcc\x79\ -\x31\xa4\xa0\xbf\xb4\x98\x8d\xf2\x42\xd0\x00\x0b\x8a\x14\xae\xa7\ -\x2c\x72\x41\xa9\xf0\xbb\xb3\x50\x5e\x08\x1a\x6a\x4e\xb3\x08\x61\ -\x4d\xca\x22\x37\x6e\x08\x29\xe9\xdf\x53\x56\x08\x1a\xea\x8d\x7e\ -\x9d\x1e\x4f\x39\xe4\x4e\x4b\x48\x49\x2f\x45\x59\x21\x68\xa8\x27\ -\x8b\x8a\x04\xce\xa0\x2c\x0a\xe1\xd2\x10\x82\x26\x71\x15\x82\x86\ -\x9a\x72\xb1\x48\x60\x65\xca\xa2\x30\xce\x09\x21\xe9\x3f\x51\x4e\ -\x08\x1a\xea\xc7\x27\x22\x80\xd9\x29\x8b\x42\x09\x0a\xc1\xfb\x4d\ -\x75\xa7\x82\xa5\xac\x10\x34\xd4\x84\x85\xa5\xf1\x3f\x41\x59\x94\ -\x42\xd2\x4f\x51\x46\x08\x1a\xea\xc3\x96\xd2\xf0\xff\x40\x59\x18\ -\xc3\x2b\x2c\x60\x41\xd0\x00\x9a\x91\xd2\xe8\xe7\xa2\x2c\x8c\x61\ -\x5e\xd5\x9d\xd9\xce\x4b\xd0\x9f\x2b\x76\x5a\x47\xd0\x50\x9b\xe4\ -\x48\xa3\x29\x07\xe3\xd8\x30\xa0\x17\x7d\x13\x65\x84\xa0\xa1\xda\ -\xfc\x4e\x1a\xfb\x66\x94\x85\x91\x9c\x18\x20\xe9\xf9\x29\x23\x04\ -\x0d\xd5\xe5\x25\x69\xe8\x94\x85\xb9\xbc\xe6\x23\xe8\x47\x29\x1f\ -\x04\x0d\xd5\x64\x76\x69\xe4\x9f\x52\x16\x46\xb3\x77\x40\x2f\x7a\ -\x3b\xca\x08\x41\x43\xf5\xd8\x4a\x1a\xf8\xa9\x94\x85\xf1\x3c\xeb\ -\x23\x68\x9d\x7d\x90\xcd\x7d\x11\x34\x54\x8c\x33\xa4\x81\x2f\x49\ -\x59\x18\xcf\xd6\x01\xbd\xe8\xe3\x29\x23\x04\x0d\xd5\xe2\x0b\x8b\ -\x4e\xca\xa1\x74\xf3\x05\x6e\x4c\x94\x05\x47\x94\x13\x82\x86\x0a\ -\x30\x9f\x34\xec\x16\xca\xa2\x34\x9c\x10\xd0\x8b\x7e\x8c\x32\x42\ -\xd0\x50\x0d\xce\x92\x46\x4d\xaf\xab\x3c\x0c\x51\xc1\xc9\x94\xb6\ -\xa6\x9c\x10\x34\x94\x1f\x9d\x74\xe7\x63\xca\xa1\x54\xcc\x20\x43\ -\x52\x7e\x82\x7e\x83\x72\x42\xd0\x50\x6e\x96\x94\xc6\x7c\x1b\x65\ -\x51\x3a\xee\x0e\xd1\x8b\x1e\x4a\x39\x21\x68\x28\x2f\xa7\x4a\x43\ -\xde\x9e\xb2\x28\x1d\x07\xab\x70\xbb\xaf\xf4\xa5\xac\x10\x34\x94\ -\x93\x76\x69\xc4\x33\x50\x16\xa5\x63\x1d\x19\x9e\x0a\x12\x34\x6f\ -\x47\x08\x1a\x4a\x3a\x8e\x49\x4e\xe1\xf2\xd2\x37\x64\x0f\x5a\xb3\ -\x10\xe5\x85\xa0\xa1\x5c\x34\x32\xa4\x91\xfb\xb9\x9c\xcc\x68\xf1\ -\x66\x48\x41\x93\xa7\x03\x41\x43\xc9\xf8\xb7\x34\xde\xe9\x28\x8b\ -\xd2\xf2\x64\x84\x5e\xf4\x6e\x94\x17\x82\x86\x72\x30\x9b\x34\xda\ -\xdb\x29\x8b\x52\x73\x67\x04\x41\xff\x42\x79\x21\x68\x28\x07\x7f\ -\x94\x46\xbb\x37\x65\x51\x6a\x4e\x8c\x20\x68\xcd\x5f\x11\x34\x82\ -\x06\xf3\x79\x4c\x1a\xec\x32\x94\x45\xa9\x39\x33\xa2\xa0\x35\xbd\ -\x11\x34\x82\x06\xb3\xd1\x0d\xf5\x7f\x94\x43\x2d\x05\xfd\x00\x82\ -\x46\xd0\x60\x7e\x72\xa4\x93\x28\x8b\xd2\x73\x7a\x0c\x41\x6b\xd6\ -\x45\xd0\x08\x1a\xcc\xe4\x64\x69\xa4\xfd\x28\x8b\xd2\x73\x5a\x4c\ -\x41\xdf\x87\xa0\x11\x34\x98\xc9\x24\x8b\x0f\x29\x87\x4a\xf0\x50\ -\x4c\x41\x6b\x76\x46\xd0\x08\x1a\xcc\x62\x71\x69\x9c\x87\x50\x16\ -\x95\xe0\xf1\x04\x82\xd6\xd9\xf0\xe6\x46\xd0\x08\x1a\xcc\xe1\x02\ -\x69\x9c\x4b\x51\x16\xa5\xa7\x97\xc5\xeb\x09\x04\xad\x39\x0b\x41\ -\x23\x68\x30\x83\x9e\x6a\x4a\x0e\xe1\x5e\x94\x47\x25\x16\x1b\xb9\ -\x25\x4b\xfa\x30\x82\xa0\xbf\x50\x35\x4b\x94\x85\xa0\xc1\x54\x96\ -\x90\x46\x79\x0b\x65\x51\x09\x96\x73\xc8\x56\xbf\x1d\x0d\x11\xe1\ -\x9e\x10\x41\xd2\xd7\x23\x68\x04\x0d\xc5\xb3\xb9\x34\xc8\x41\x94\ -\x45\xa5\x56\x11\xde\x6c\xb1\xaa\xcb\xef\x9f\x8e\x20\xe9\xa5\x11\ -\x34\x82\x06\x33\x26\x94\x66\xa2\x2c\x2a\xc1\x16\x16\x83\x7d\x7e\ -\xbf\x42\x04\x41\x3f\x8d\xa0\x11\x34\x14\xbf\x7a\xf0\x1e\xca\xa1\ -\x56\x0c\x8f\x20\xe9\x45\x11\x34\x82\x86\x62\xd8\x5a\x1a\xe1\x00\ -\xca\xa2\x76\x84\x8d\xf4\x78\x00\x41\x23\x68\x28\x86\x97\xa4\x11\ -\x52\x16\xf5\x63\xe3\x08\xbd\xe8\x81\x08\x1a\x41\x43\xbe\xcc\x2a\ -\x8d\xef\x03\xca\xa2\x96\x4c\x6f\xf1\x43\x48\x41\xbf\x8c\xa0\x11\ -\x34\xe4\xcb\x56\xd2\xf8\x0e\xa7\x2c\x6a\xcb\x6e\x11\x7a\xd1\xcb\ -\x21\x68\x04\x0d\xf9\x71\x66\x9d\x26\x81\xc0\x93\x8f\x42\x0a\xfa\ -\x76\x04\x8d\xa0\x21\x3f\x3e\xb1\xf8\x92\x72\xa8\x3d\x9b\x44\xe8\ -\x45\xaf\x89\xa0\x11\x34\x64\xcf\x3c\xd2\xe0\x8e\xa6\x2c\xc0\xe2\ -\xfb\xba\x8f\x45\x23\x68\x30\x89\xb3\xa5\xc1\xcd\x4d\x59\x80\xac\ -\x3a\x0c\xdb\x8b\x5e\x0f\x41\x23\x68\xc8\x96\xc9\x16\x9f\x51\x0e\ -\x20\xac\x14\x41\xd0\x97\x21\x68\x04\x0d\xd9\xb1\x88\xaa\x61\x32\ -\x1c\x08\x64\x74\x48\x41\x7f\x2f\x43\x64\x65\xbb\xbf\x45\x65\x99\ -\xfb\x40\x89\x01\xdf\xc9\x62\x57\x8b\x63\x75\x24\x13\x82\x06\x53\ -\x38\x4b\x1a\xda\xfa\x94\x05\xd8\xf8\x53\x84\x5e\xf4\xc5\x86\xdf\ -\xcb\xcc\x16\xab\x58\x1c\x63\x71\xa5\xc5\x18\x9f\x7b\x19\x6b\x71\ -\x18\x82\x06\x53\x78\x96\xd5\x83\xe0\xc2\x1c\xaa\x7b\xdb\xb3\x30\ -\x82\x1e\xa7\xcc\xca\x17\x3d\x8f\xa4\x2b\x38\x46\xc6\xd3\xbf\x08\ -\x71\x0f\xcf\x59\x1c\xc4\x10\x07\x98\x38\xfe\xfc\x30\xe5\x00\x2e\ -\x3c\x1c\xa1\x17\x7d\x48\x81\x43\x15\x5b\xaa\xee\x9d\xcb\xef\xb5\ -\x78\x2f\xc2\x8a\xc8\xcf\x2d\xce\xb0\x58\x91\x31\x68\x30\x39\xe6\ -\x75\x5d\xca\x02\x7c\x16\x2f\x85\xe1\xd1\x94\xcf\x7d\xbb\xbc\xdd\ -\x5d\xea\xc2\x4d\x92\x37\xe6\x7d\x15\x6f\x0b\x2f\x7d\xdc\xbf\xca\ -\x5b\x02\x93\x84\x60\x2c\x6d\x0c\x6f\x80\x0f\xcb\x45\x90\xde\xaf\ -\x16\x0b\xa6\x78\xee\xfb\x55\xb2\x7d\x14\x9d\x3c\x63\x71\xb0\x0a\ -\x99\xa9\x11\x41\x83\x09\x74\xc9\x6b\x21\x65\x01\x49\x97\x7e\x6b\ -\x4e\x49\xf1\xbc\x7b\xa6\x20\xe5\xff\xc8\x5b\x40\x3f\xc2\xec\xa0\ -\x6c\xfc\x4e\x2a\xf1\x4e\x94\x05\xf8\x70\x8e\x8a\xb6\xb9\x6c\x5a\ -\xe7\x1d\x90\xa0\xa7\xac\xc7\xa3\x87\x10\x07\x0d\x65\xe6\x6e\xa9\ -\xd0\x4b\x51\x16\xe0\xc3\x1a\x11\x05\xb9\x79\x4a\xe7\xed\x13\xe1\ -\x9c\x7a\x52\xf0\x3c\x8b\x0d\x58\xa8\x02\x55\x8a\xde\x18\x4b\x39\ -\x40\x00\xd3\x59\x7c\x1b\x41\x96\x49\x77\x83\xef\x29\x91\x19\xfa\ -\x0d\xef\x17\x9f\xf3\x4c\x96\xc9\xbe\x03\x2d\xe6\x65\x25\x21\x98\ -\xc0\xc2\x92\xfb\x60\xa8\xc5\x2e\x16\x17\xca\x22\x01\x3b\xc3\xe5\ -\xf7\xdb\x5b\x2c\xe6\x71\x9c\xf9\xa4\x92\x1f\x55\xc1\x32\xea\x23\ -\xab\x23\xb7\xf0\x29\xa7\x46\x19\x69\x06\xcb\xe7\x67\xa0\x7e\x79\ -\x72\x6d\x04\x41\x7f\x1c\xf1\xd8\x4b\xca\x78\xf3\x0d\x16\x9f\x86\ -\x3c\xc7\x35\x16\x0b\xb1\xd4\x1b\x8a\xa2\x97\xc4\x66\x6e\x21\x12\ -\xbd\xd1\xe2\x15\x99\x29\x8f\x3a\x26\xf7\xb6\xea\xde\x47\xee\x70\ -\x91\x51\x1f\x89\x59\xd5\xbf\xeb\x5b\xe2\x32\x9a\x49\xa2\x0c\xf4\ -\x32\xdd\x3d\x2c\x2e\xb7\x78\x51\x85\xcf\xc4\xe6\x44\xa7\x5b\x7d\ -\xd2\xe2\x7c\x8b\x1d\x2d\x56\xb7\xe8\x4d\x5d\xfc\x3f\xfe\x12\x31\ -\x9a\x63\x69\x9f\x67\xb6\x86\x7c\x69\xde\x69\xf1\xa3\xe3\x6f\x3b\ -\x24\x7a\xe3\x04\x8b\xe3\x2d\xee\xb0\x78\x43\x7e\xf7\x93\x3c\x9b\ -\x7e\x79\xdc\x33\x82\x06\x37\xb6\x96\x38\xcf\x4f\x55\xba\x21\x46\ -\x76\xc6\x5b\x4c\xb4\xb8\xab\x84\xe5\xa3\x1b\xe7\x30\x0b\x25\x8b\ -\x0c\xba\x32\xe6\x3b\x29\x27\xfd\x05\x30\x3b\xf1\xf2\xa1\x39\xdb\ -\xf6\xb7\x8b\x8b\xe0\xdd\x9e\xd9\x3b\xd2\x01\x59\x36\xe0\xfc\xbb\ -\xe5\x3d\x57\x82\xa0\xc1\x2e\x9d\x33\xa5\xa7\xdb\x95\x23\x3a\x19\ -\xce\x9f\x2d\x66\x31\x7c\xfc\x73\x45\x69\xc4\x8f\xe5\x5c\x3e\x4e\ -\xbe\xb2\xb8\x40\x7a\x80\x75\xab\xa3\x73\x5a\xfc\x1c\xa1\xac\x3e\ -\x93\xe8\x8f\x17\x3d\x7e\x7f\x9b\xe9\xf7\x8c\xa0\xa1\x59\x7a\x10\ -\x5d\x05\xf3\x85\x88\x67\x2e\x43\xca\x65\x46\x79\x93\xb8\x2d\x62\ -\x0c\x6e\x9e\x3c\x29\x8b\x1e\xea\x54\x5f\x47\x46\x28\x1f\xdd\x53\ -\xfe\xcd\xe7\xf7\xbf\x48\x14\xd1\xfc\x08\x1a\x41\x9b\xc6\x46\x16\ -\xff\x36\x50\x3a\x5a\x86\xdb\x15\x58\x2e\xcb\xa8\xee\x54\x8f\x9f\ -\x18\x2a\x65\xaf\x98\xdb\x01\x35\xa9\xb7\x87\x7b\x94\x81\x8e\xf0\ -\x78\x44\x86\xe6\xf4\x1b\xd9\x6a\xb6\xbf\xd9\x5e\x26\xff\xbc\x7a\ -\xdf\x3f\xca\x73\x47\xd0\x08\xba\x70\xd6\x92\xf1\x4c\xd3\xa5\xf3\ -\x80\x5b\xf2\x98\x8c\x58\x41\x16\x15\x3c\x5a\x22\x29\xbb\x71\xab\ -\x44\x82\x54\xbd\x0e\xff\x6a\x8b\xa2\xd0\x13\x7d\x03\xfd\xf2\x59\ -\xa8\xa9\x13\x1a\xed\x22\x12\x7f\x4f\x42\xe4\xec\xe5\x77\x14\x82\ -\x46\xd0\x45\xf2\xd7\x12\x4a\xe7\xf8\x0c\x87\x30\x76\xca\x20\xd7\ -\x42\xd1\xe8\xde\xe0\xce\x15\xad\xbf\x4b\x48\xef\x38\x8d\x7a\xd1\ -\x64\x8b\xab\xb6\x4f\x86\x9f\x86\xa0\x11\x74\xde\x0c\xf2\x99\x28\ -\x29\x03\xf7\xc9\x78\x70\x1a\xf9\x79\x77\x95\xd9\xfd\x4f\x2a\x26\ -\x66\x27\x7a\x3c\x7f\xd6\x0a\x84\x79\x36\x52\x78\xb6\xd9\x16\x8c\ -\x7c\x98\xf0\xb8\x3a\xa2\xe3\x25\x5b\xaf\xb9\xa7\xd4\xaf\x0f\xe5\ -\x67\x77\x99\x32\x69\x8d\xa0\xab\xcf\x65\x15\x92\xce\x3f\x62\xbe\ -\xc2\xaf\xa3\xba\xf3\xed\x8e\xaf\xb8\x94\x9d\xbc\x65\x31\x5b\x09\ -\xa5\xac\x57\xef\xdd\xe3\x73\x5f\x27\x27\x38\x7e\x5f\x89\xee\xe8\ -\x72\x89\xc1\x5f\xdd\xf6\xf3\x17\x95\x01\x5b\x68\x21\xe8\x6a\x87\ -\xcd\x3d\x5c\x41\xe9\x4c\x12\xd9\xae\xef\xb3\x80\x63\x6e\x89\x99\ -\x1d\xae\xa6\xec\xd4\x52\x57\xde\x92\xd7\x79\x93\xeb\xea\xf2\x16\ -\x3b\xb8\x48\xf9\x63\xf9\x52\xd6\x9b\xc7\xde\x64\x1b\xc2\xf1\x8b\ -\xba\xd8\x5c\x56\x6c\xba\x71\xaa\x4b\xc4\x92\x73\x38\xc8\xbe\x0d\ -\xd5\xe2\x08\x1a\x41\x67\xc1\x4e\x01\xe1\x45\x55\xe1\x5b\x59\xe5\ -\x65\x6f\x84\x8f\xd6\xb0\xa7\x1c\xe6\x4b\xcd\xb4\x0d\x55\xb7\x90\ -\xe7\xd5\xe9\xb8\xd6\xe7\x65\x41\x89\x73\x09\x75\xe3\xf7\x41\xbb\ -\xee\xdc\x1c\xb1\x6c\x3e\x95\xf8\xea\x1e\xf2\x76\xd6\xa8\x3b\xe7\ -\x31\xc4\x81\xa0\xb3\x60\x57\x84\x54\x0b\x7e\xb6\x11\x76\x35\x62\ -\x91\x19\x03\x67\x95\xd0\xce\x1b\x5d\x3a\x0f\x0f\xc9\xe4\x9f\x57\ -\x5e\x8b\x23\x6c\x9f\x0d\x8a\xfb\x8e\xb3\x90\x48\x2f\xcb\xbf\x45\ -\x4d\xd9\x33\xf0\x27\x53\xbe\xd0\x10\x74\xb5\xb8\x1e\x71\x55\x02\ -\x3d\x46\xfa\x2f\xd5\xbd\xdd\xd2\x11\xb2\xc4\x7b\x80\x8d\x26\xe9\ -\xed\x35\x58\xd5\xf1\x7b\x9d\xc3\xe3\x30\x89\x74\xd0\x13\x5e\xf7\ -\x4a\x68\xda\xeb\x12\x09\x91\x57\x7d\x5c\x57\x56\xa7\xbe\xe1\x92\ -\x97\xe5\x60\xb9\xee\x99\x43\x1c\xe7\x36\xdb\xc2\x12\xbf\x8c\x71\ -\x33\xab\x68\x19\xef\xbc\xd8\x8b\x28\x0e\x04\x9d\xc5\x8a\x40\xe4\ -\x56\x4e\x5e\x96\xb1\x56\x9d\x3c\xaa\xbf\xc5\xf4\x19\xd4\x8f\x9e\ -\x32\x96\x9b\x75\x9c\xb4\xce\x72\x38\x42\x4d\x9b\x50\xeb\x49\x09\ -\xf3\x8c\x93\xfd\xed\x75\x39\xc6\x13\x01\x9f\x5b\x3d\x62\xb9\x4f\ -\x94\xa1\x8c\x05\x64\xa8\x4c\xff\xec\x4b\xc2\xec\x10\x34\x72\x06\ -\x67\x48\x5c\x59\xeb\xde\xea\x12\x3b\xfc\x84\xe3\x9e\xb4\x54\x8f\ -\x54\xdd\x99\x0b\x17\x48\xb8\xb0\xaa\x71\xcc\x2b\x54\x3a\xbb\xae\ -\x3c\x2c\x6f\x25\xf6\xbd\x0b\x1b\x8b\x56\xfe\x86\xa0\x11\x74\x9a\ -\x2c\x87\xe0\x2a\xc1\xe3\xb2\xd2\xad\x0c\x75\x4e\xaf\xdc\xbb\xc8\ -\xe5\x1e\x74\xac\xf2\x01\x2a\xdd\xf4\xa8\x57\xda\x8e\xbf\x6d\xc0\ -\x67\xbd\x86\x37\xf4\x98\xf7\xbb\x12\x4f\xed\x96\x9b\x7c\x3f\xdb\ -\x67\xfb\x23\x68\x04\x9d\x66\xcc\xe8\x5b\xc8\xad\x32\xe8\xd7\xeb\ -\x7d\x0c\x0d\x83\x3b\x44\x86\x61\xec\xd7\xfb\x6f\x89\xc4\xd0\x21\ -\x72\x59\xa4\x41\xd5\xc7\xfc\x46\xce\xf5\xdf\x80\xcf\xee\xa8\xfc\ -\x33\x00\xea\x2f\x94\xa5\x3d\x86\x7e\x1a\x19\x1c\xdf\x57\xdd\x99\ -\x0b\x11\x34\x82\x4e\x85\xab\x91\x5a\x25\xb9\xbd\xe0\x7a\x35\xbd\ -\xf4\x92\x2f\x93\x10\x3d\xfb\xb5\xe9\x30\xc6\xdd\x72\x8a\x72\xb8\ -\xd0\x76\xde\xa0\xcd\x57\x47\x2b\xff\xac\x75\xf6\xff\x8f\x95\xde\ -\xfe\x8a\x12\xeb\xdc\xf8\x79\x0b\xb9\x38\x10\x74\x5a\xac\x54\x31\ -\x29\x3d\xa9\xe2\xef\x42\x52\x45\x74\x8e\x90\x25\x73\xac\x4f\x4b\ -\xca\x10\xc2\x08\x35\x6d\xca\xce\xdb\x65\x01\xc8\x1c\x11\x8e\x97\ -\x74\xeb\xae\x39\x6c\x5f\x0e\x0f\x05\x7c\x76\x70\x8c\x37\x95\x7f\ -\x5a\xec\xad\xa6\x6c\x5a\xdc\x25\x2b\x4e\x11\x34\x82\x4e\x85\xd3\ -\x2a\x22\xa2\x57\x6c\x0d\x43\xef\x68\x31\x0e\x39\x4f\x15\x65\x90\ -\xe5\x76\x60\xeb\x48\x2f\xd5\x39\x76\xab\x73\x2e\xef\xae\xba\xf7\ -\x9e\x8c\xb2\x4f\xe5\x4e\x12\xea\x79\x5e\xc2\x25\xe6\x73\xca\x98\ -\xb1\xbe\x96\x0f\x54\xf7\xf6\x68\x5e\x9f\x5d\x30\x44\x39\xea\x21\ -\x8e\x6b\xe4\x0b\x68\x56\x8f\x49\xc5\x2f\x4c\x6c\xe7\x08\xba\xbc\ -\xbc\x5d\x01\x01\x3d\xe2\x72\x5f\xdb\x23\xe6\xa9\x78\x36\xc5\x3a\ -\x33\x8b\x2c\x16\xb9\xd4\xe5\xb5\xff\x4e\x11\x6c\xd8\x5e\xb2\x96\ -\xe6\xa6\xd2\x51\x78\xd5\x71\xac\x6d\x13\x5c\xe3\x46\x6a\xea\x1d\ -\x4f\x7a\x05\x7c\x7e\x4c\x88\x32\xd4\xe3\xd7\x07\xaa\x69\x93\x47\ -\x0d\x54\x86\xef\xae\x82\xa0\xcb\xc9\xc6\x15\x10\xcf\xb9\x3e\xf7\ -\xf7\x0c\x62\x9e\x8a\x9b\x13\x86\xa9\x1d\xe5\x32\x99\x3c\x5a\xe2\ -\x92\x97\x0b\x39\x31\x36\xa7\x2c\xcf\xd6\x3d\xd1\x37\x5d\xc6\xa6\ -\xc7\x48\xfe\x93\x38\x19\x06\xf7\x93\x15\x80\xbf\xc8\xf0\x83\xde\ -\x78\x77\x85\x10\x7f\x7b\x4b\x8c\xb2\xd4\x3d\xe5\x51\x16\x27\x49\ -\xb9\x34\x96\x97\xcf\x89\xa0\x11\x74\x5a\x5c\x5a\x72\xe1\x8c\x54\ -\xc1\xe9\x51\x11\xf3\xd4\xac\x16\xa1\x7e\xe8\x15\x7a\x3a\xa5\xea\ -\xd7\x2e\x12\x3d\x30\xc6\x62\x95\xdf\xab\x69\x77\xbe\x6e\x0c\xc1\ -\xdc\x22\xcf\x2b\x6a\x54\x88\x4e\x64\xf5\xa1\xed\x58\x7a\x79\xf5\ -\x29\x2a\xdc\xf6\x53\x33\x04\x4c\x0a\x46\x65\x7f\x53\xdb\x3a\x82\ -\x2e\x27\xff\x2a\xf9\x64\x60\xd0\x04\xd2\x6c\x2a\xda\xe6\xa0\x75\ -\xc0\x2f\xc2\x60\x59\x59\xda\x7d\xab\x8c\xb7\xda\x93\x24\xe9\xbf\ -\x1b\x9a\x30\xc6\x7a\x0d\xc7\x97\xeb\x11\x32\x69\x38\x57\x84\x2f\ -\x8c\xc3\x65\xc9\xf9\x24\xc7\xd0\x83\xde\x5e\x6c\x83\x08\xd7\xb2\ -\xaf\xf4\xe0\x93\x94\xe5\x75\xf2\x85\xf7\x8a\xfc\xbf\x37\x82\x46\ -\xd0\x69\xf2\x51\x49\x25\xf3\x43\x84\x7b\x6c\x47\xca\x53\xf1\x81\ -\x87\x94\x5f\x70\xf9\xec\x4d\x32\x3e\x9c\x66\x9d\xdb\x56\x85\xdf\ -\x49\x7c\x7a\x39\xff\xf9\x16\x13\x5c\x86\x18\xce\x56\xd1\x52\x79\ -\xce\x2e\x4b\xc8\x47\x26\x28\x3f\x3d\x7c\x72\xad\xc5\xda\xb6\xe3\ -\xea\xa4\xfd\x9d\x26\xb7\x75\x04\x5d\x3e\x56\x2d\xb1\x64\x06\x47\ -\xb8\xcf\x47\x90\xf2\x34\xab\xe1\xfe\x22\xcb\xfa\x9d\x19\xdb\x9e\ -\x92\x31\xfd\x6d\x22\x86\xc2\xa5\x85\x3e\xe7\x96\xb2\x4c\xfa\x2e\ -\x17\x21\xb7\xca\x75\xaf\x10\xf3\xf8\xe7\xa6\x50\x7e\xfa\x8d\xcc\ -\xb9\xb1\xae\xce\xbf\x71\x15\x82\x46\xd0\x69\x72\x52\x09\xe5\x32\ -\x3e\x46\xe3\x1c\x89\x94\x43\x25\x59\xda\xa6\xa0\x7a\xd8\x4f\x26\ -\xd9\x1e\x57\xee\x9b\x04\x9c\x2e\xb1\xfa\x69\x9c\x6b\x29\x35\x25\ -\x61\x52\xd2\xfd\x1a\x97\x76\x2c\x84\xd9\x0a\x41\x23\xe8\xba\xaf\ -\x1e\x7c\x41\x72\x1c\xe8\xd7\xe4\xed\x1c\x1c\x2a\x71\xb3\x9a\xe3\ -\x25\xa2\x40\xbf\x22\xbf\x86\x80\x43\x09\xe7\x7f\xaa\x7b\xcf\x46\ -\x3d\xf9\xa7\x77\x99\x99\x37\x43\x21\x6f\x25\x13\xd4\x9f\xb9\x84\ -\xb1\xdd\x22\x63\xdd\x59\x65\xcb\xeb\x99\xd2\x5b\xd5\x87\xb6\x18\ -\xed\x21\x6a\xea\x84\x49\x08\x1a\x41\x27\xa6\x8c\xbb\x50\xff\x1a\ -\xf2\x73\xca\x16\xd2\xf5\x2b\x02\x8e\xbd\x7b\x8a\x9e\x8c\x3b\x48\ -\x25\xdb\xea\x4a\xa7\x05\xdd\x43\x56\xdc\x7d\xe7\x38\x87\x8e\xb8\ -\xb8\x42\x86\x35\xf2\x9e\x60\xbb\x22\x85\x32\xfa\x63\x59\xda\x3b\ -\x82\x2e\x1f\x4f\x57\x58\x2e\xfd\xe4\x1e\xfb\xab\x7a\x6c\xd9\x95\ -\x07\x0f\xcb\xd8\xb0\x9e\x64\x5b\x4c\xf9\xef\x74\x3d\x48\xde\x68\ -\x1e\x77\x19\xff\x7e\x46\x16\xa5\xac\x64\x40\x1b\x48\xba\x11\xf2\ -\xe9\x08\x1a\x41\x67\xc5\x63\x25\x11\xc3\x44\x97\x19\xfc\x89\x32\ -\x29\xf3\x9d\xcb\xe7\xed\xc9\xd8\xc9\x6f\x9d\x1d\x4f\x89\xb0\xd7\ -\x97\x1e\xf0\x65\x1e\xab\x52\xdf\x95\xb8\xe4\x15\x0d\x6d\x07\xc7\ -\x27\xf8\x12\xbf\x14\x41\x23\xe8\x2c\x98\xd3\x11\xe7\x6a\xfa\x9e\ -\x79\xeb\xcb\xaa\x30\xfb\xab\x71\x23\x6f\x83\xf3\xf3\x47\xdb\xee\ -\x73\x04\x22\x2d\x04\x3d\x9e\x7d\x89\x32\x30\x69\x90\x23\xe4\x4e\ -\xc7\x60\xdf\x98\xe0\x3e\x6f\x44\xd0\x08\x3a\x0b\xe6\x2b\x59\x83\ -\x9f\xce\xd6\xdb\x69\xfc\x6c\x26\xdb\xcc\xbc\x7d\x3c\x7d\x15\xdb\ -\x7d\x2e\x22\x11\x0a\x48\x33\xfb\xf1\xea\x7f\xc9\xe2\x0f\x53\x7b\ -\xca\x33\x48\x6a\x83\xb3\x64\x32\xd2\xed\x3e\x74\xfa\xd0\x07\x65\ -\x7c\x3a\xcc\x02\xa7\x07\x11\x34\x82\xce\x82\xb9\xd4\x94\x6d\xe1\ -\x4d\xe7\x13\xc7\x8a\xc1\x13\xe5\xb5\x79\x46\xc7\x3d\xbd\x2c\x43\ -\x21\x6e\x6f\x0b\x3f\x22\xd1\x54\x19\x2b\xe3\xcb\xa7\x49\xc4\xc5\ -\xdc\x06\xd6\xf1\x39\x64\x69\xf9\x55\xca\x7d\x33\x8a\x4e\x19\x57\ -\x3f\x4d\xe2\xc2\x07\xd8\xbe\xf4\x7b\xc8\x5b\x5a\x98\xe4\x49\xd3\ -\x21\x68\x04\x9d\x05\x4f\x19\x2e\x81\x46\x8e\x84\xbf\x2b\xf7\x1d\ -\x60\xdc\x36\x44\x5d\x4e\x79\xe7\x28\x7e\x09\xb1\xc6\xe2\x1d\xd5\ -\xbd\x03\xca\xbe\x12\xde\xe8\x14\x99\x29\x0c\x90\x2f\xef\x27\x25\ -\x7c\x6f\xac\x2c\x6e\x79\x53\xae\xff\x58\x09\xc7\x5c\x2f\xc4\x17\ -\x4a\xd8\x0e\xcc\x04\x65\x68\x72\x24\x04\x4d\x14\x47\x96\x5c\x2d\ -\xe1\x59\xfa\xdf\xbb\xa5\x74\xbf\x5a\xe8\xdf\x22\xdc\xd0\x89\xe8\ -\x2f\xb6\x58\xd7\xe0\xfa\x3b\x9d\x0c\x59\x5c\xeb\x18\x8e\x78\x57\ -\x96\x80\x0f\x56\xc9\x92\xfd\x3f\x1f\xb2\xac\xd6\x41\xd0\x08\x3a\ -\x0b\x1e\x32\x54\x0e\x93\x65\x31\xc1\x00\xf9\x7f\x9a\x0b\x00\x74\ -\xf6\xb3\x57\x11\xb0\xef\x5b\xcb\x81\x05\x2d\xf3\x0e\xbb\x93\x8a\ -\x5e\xe4\x32\x5c\x86\xbe\x1a\xd7\xad\xf7\x00\x3c\xce\x62\x89\x14\ -\xcf\x1f\x76\x05\xea\x16\x08\x1a\x41\x67\xc1\xcd\x86\x4a\x62\x33\ -\xb9\xbe\x07\x65\xf2\x29\x8b\x7b\x7f\x05\x19\x4f\xc3\xa9\x06\xd4\ -\x49\x9d\x19\xee\x0c\xc1\xb9\x92\x70\x2d\x97\x4e\x85\x7e\x8e\x03\ -\x33\xba\x96\xb0\x79\x3b\x8e\x45\xd0\x08\xba\x0e\xb9\xa0\xf5\x8a\ -\x3f\x7b\xe6\xb4\x51\xb2\x92\x2d\xcd\x25\xbe\x9b\xca\x0c\xfd\x47\ -\x08\x79\xaa\x31\xe6\x75\x0b\x1c\xa6\x58\x57\xf2\xc2\x7c\x2e\xd7\ -\xf3\xa6\x0c\x4f\x34\x26\xdf\xfa\xba\xac\xfa\xd3\x3d\xfd\x1d\x33\ -\xbe\xb6\x13\x42\x96\xdf\x11\x08\x1a\x41\x67\xc1\xce\x86\x89\xa2\ -\xbf\x4c\x3e\x2d\x2f\xd7\x77\x81\xc5\x2e\x29\xdd\xeb\xe9\x88\xd8\ -\x95\x0b\xe5\x8b\x2b\xef\xba\xb7\xb0\xe4\x4c\xf9\x54\x4d\x9d\x06\ -\x75\x33\x35\x6d\x6a\x52\xfb\x22\xa5\x47\x73\xfc\x32\x39\x28\xc2\ -\x7c\x09\x82\x46\xd0\x99\xc4\x42\x9b\xb0\x0c\xfa\x63\x5b\xa3\x6b\ -\xb1\xad\x04\x3c\x57\x25\xdb\x8d\x5a\x27\xb2\xb9\xc8\x36\x1b\xff\ -\xb2\x1c\xf3\x18\x1b\x7a\xf1\x8b\x4e\x10\x34\xc6\x63\x55\x62\x95\ -\x39\xae\x80\x3a\x37\xaf\x88\x79\xb2\x23\x64\xef\x30\xc7\xe7\x74\ -\x08\xe5\xe1\x8e\x50\xcb\xbd\x72\xbe\xd6\xdd\x22\xac\xa8\x44\xd0\ -\x08\x3a\x13\x8a\x4e\x66\x7f\xa7\xac\xe8\x6a\x5c\xcf\x45\xf2\x73\ -\x9d\xa7\x61\xfb\x98\x31\xa6\x7a\xc7\x8f\x6b\xe4\x38\xe3\xe4\x15\ -\x34\x4a\x9c\xee\x52\xf2\x45\xd1\x59\x51\x31\x7f\x20\xe3\xb9\x79\ -\xd6\xb3\x65\xa4\xf7\x6b\xef\x0d\xeb\x2f\xc5\x9d\x5c\xe2\xd9\x77\ -\xb3\x4d\x00\x3e\x25\xb1\xcc\x45\xb4\x8d\x8d\x42\x76\x60\xee\x45\ -\xd0\x08\x3a\x2b\x8e\x2d\x48\x12\x7a\xe1\xc0\xd6\x2e\xd7\x73\xbb\ -\x9a\x92\x56\xd4\x6d\xc1\x89\xee\x45\xdd\xa0\xba\x53\x88\x8e\x13\ -\x89\xea\xa8\x8c\x67\x85\x57\x6d\x8b\x10\x8e\x8a\x51\x1e\x03\x25\ -\xbc\xec\x23\x5b\x9c\x6b\x95\xe4\xfc\x91\x8c\xe9\xe6\x55\xbf\xe6\ -\x91\xb7\x16\x7b\x46\xc1\x4f\x3d\x9e\xcd\x20\x79\x86\x5d\xb6\xf8\ -\xf7\x59\x63\x9c\xb3\xaf\xf4\xd4\xed\x2c\x24\xcf\xb6\x5f\x06\xab\ -\x6d\xdb\xca\xb0\x58\x05\x41\x97\x93\x05\x0a\x12\xc5\xb3\x1e\x93\ -\x78\xf6\x31\xc9\x3f\xd9\xc6\x2b\x6f\x75\xc4\x30\xbf\x27\x13\x47\ -\xb7\x3a\x8e\xfb\x9d\xf4\x7c\xc2\xdc\xfb\xac\xd2\x3b\xbb\x46\x4d\ -\x9d\x33\x5a\xc7\xd4\xea\xdd\x3c\x74\x02\xfb\x3b\x54\x75\xb2\xe1\ -\x5d\x69\x31\x73\x4e\xf5\x6a\x7e\x89\x0a\x19\x6b\x3b\xff\x67\x32\ -\x94\xe1\xbc\x06\x3d\xcf\xe0\xcc\xcf\xac\xb7\x95\x7a\x43\xe2\xb1\ -\x9f\x53\xdd\x19\xf0\xc2\xa0\xbf\xd8\x27\xca\x10\xca\x64\xc7\x50\ -\x4a\x6b\xc4\x98\xe5\x59\xd4\xb4\xf9\xaa\xdd\xf8\x3a\xc7\x72\x45\ -\xd0\x35\xe4\x8e\x9c\xe3\x6c\xef\xb7\x49\xef\x65\x35\x65\x27\xe7\ -\x9e\x6a\xda\x5d\x3e\x06\x3a\x56\x74\x9d\xef\xf2\x4a\xbc\x96\x9a\ -\xb2\x81\xa8\x5e\x39\xb6\xa1\xf2\x4f\x12\xf5\x07\x8f\x18\x57\x2d\ -\x7c\xfb\xa6\xa3\x7a\x98\xe5\x87\x8a\xc8\x79\x78\x8e\xf5\x69\x3b\ -\x97\x05\x41\xb7\xb8\xf4\x86\x57\x13\x69\xe6\x71\xff\x87\xc6\xbc\ -\x97\x67\x43\x1c\x7b\x9c\xc8\x1c\x41\x23\xe8\x42\x27\x43\x92\xe4\ -\xd2\xd0\x13\x3e\xf6\xcd\x3d\x75\x72\x76\x9d\xc4\xfd\x36\xe9\x69\ -\xed\x28\xb1\xaf\xce\x65\xb4\xce\xff\xcf\xe6\x71\x0f\x2b\x3b\x3e\ -\x7b\x8d\x6d\xdc\x59\x8f\x29\x1f\x20\xe7\x72\x4e\xee\xe8\xc4\x39\ -\xab\x78\xc4\xe3\x7e\x5f\x91\xf1\xe6\xcd\x73\xaa\x47\x03\x5d\xbe\ -\xec\xf5\x9b\xce\xee\x8e\xcf\xe9\x85\x1d\x97\xe4\x74\xff\xba\x1e\ -\x24\x49\xde\x14\x26\xd3\xdd\x37\xf4\xa0\x11\x74\xd6\x89\x93\xb2\ -\xda\x75\xe4\xe6\x10\xe3\x88\x4b\x86\x5c\xdd\x37\x29\x20\xaa\xe3\ -\x1a\x97\x86\x33\xc6\xf1\xb3\xc7\xe5\x0b\x69\x7e\x9f\xe3\xac\x5b\ -\x91\x5e\xf3\xc5\x39\x89\xa3\xb7\x4b\xd9\x77\xc9\xb0\xc5\x4c\x8e\ -\xcf\x5d\x96\xe3\xfd\xff\x35\x85\x7b\x1b\x1e\xe2\x3c\x5f\x31\x06\ -\x8d\xa0\xb3\xe6\xb8\x0c\x1a\xc8\xfd\x01\xe7\x5c\x47\x92\xd8\xb8\ -\x85\xdd\x8d\x11\x9e\x97\x9e\x6e\x63\x48\xc4\x6b\x8b\xa1\xf5\x94\ -\xfb\xde\x83\x7a\x3c\x52\x67\x2c\xdb\x35\xe4\x32\xe0\x35\x55\xb8\ -\x2c\x66\x26\xef\xd8\xad\x37\x62\xd8\x32\x87\x3a\x33\xbb\x94\xeb\ -\x97\x2a\x78\xa7\x91\x6d\x3c\x3e\x97\x05\xdf\xa4\x78\xff\xbb\x84\ -\x38\xdf\x77\xca\xcc\x6c\x7e\x08\xba\x62\x7c\x92\x62\x23\xb9\xc0\ -\x67\x62\x6e\x4f\x59\xbd\x66\xdf\x08\xf6\x4c\x09\xab\x5b\xc2\x65\ -\xe1\xc4\x29\x36\x41\x3b\x17\x05\xe8\xd9\xf9\xeb\x25\x6a\x43\x47\ -\x28\xe8\xbd\x08\x8f\x96\x71\xe8\xa8\x8d\xe6\x88\x12\x8b\xf9\x65\ -\x19\x2a\x5a\x32\xa7\xba\xb2\x83\x87\x70\xbf\x56\x53\xef\x6e\xad\ -\xc7\xfc\x1f\xc8\xb1\x1c\xf4\x46\x01\x4d\x29\xde\xe7\x66\x21\xcf\ -\xbb\x09\x82\x46\xd0\x59\xb3\x67\x4a\x8d\xe4\x01\x9f\x73\xe8\x8a\ -\x7c\x9d\x2c\x33\x1f\x14\x62\xf8\xe3\xef\x6a\xda\x1c\xbe\xbd\x1c\ -\x82\xde\x52\x25\xdb\x81\x7a\xe6\x1c\xc7\x44\x93\xf0\xbd\xbc\x4e\ -\xbf\x2c\x65\xac\xbf\xd4\x86\xa8\x74\x13\x04\x85\x49\xe9\xe9\x95\ -\xa6\xf6\x35\x09\x4d\x6b\x7c\x76\x41\x19\x83\xce\xab\x7c\x9e\xcb\ -\x60\xb2\x6e\x71\x47\x24\x88\x17\x1b\x23\x68\x04\x9d\x35\x3a\x3a\ -\x22\x69\x62\xfb\x8b\x42\x9c\x23\x6c\x0f\xed\x1d\x8f\x73\xcc\x9a\ -\xd2\xfd\xea\xf4\xa3\x7f\x93\xc8\x8f\xa2\xe5\x3b\x41\x86\x74\x94\ -\x5c\xd3\xc1\xaa\x7b\x9b\xaf\xf5\x65\x91\x87\xee\x15\xf6\x51\xc5\ -\xe5\x61\xde\x21\x60\x9e\xe0\x34\xc7\x38\xec\xfe\x12\xdd\x90\x57\ -\xf9\x3d\x93\xd1\x38\xf0\x1c\x21\xcf\xbf\x21\x82\x46\xd0\x79\xf0\ -\xa7\x84\xab\x02\x93\x9e\x7f\x41\x8f\x71\x69\xfb\x1e\x70\x49\x73\ -\x47\xe8\x08\x8d\xb3\x55\xb1\x09\x93\xde\x17\x19\x1f\x20\x12\xee\ -\x6b\x60\x5d\xd0\x5f\x60\xc3\x54\x70\xe6\xbf\x9d\x1c\x7f\x77\x70\ -\xce\x65\xf9\x5a\x86\x65\xa0\xdf\xae\xde\x45\xd0\x08\xda\x24\x6e\ -\x89\xd8\x40\xf4\xb8\xe3\x21\x09\xcf\xd9\x57\x56\x08\x3a\x8f\xfd\ -\x99\x0c\x3f\x0c\x91\xb8\xe4\xb8\x42\xd6\xc3\x2a\x3a\x7d\xe9\x7f\ -\x0b\x12\xf2\x18\xc9\xfb\xb1\x87\x4c\x44\x9a\xfa\xec\x17\x95\xe8\ -\x87\x5b\x43\x7c\x81\xfd\x5d\x7a\xf7\x8d\xbf\xd5\x63\xfe\xf7\xe4\ -\x5c\xae\xe3\x12\x0e\x6f\x85\xe1\x61\x04\x8d\xa0\x4d\x23\xec\x84\ -\xcc\xc5\x29\xcc\x60\xef\xe0\x88\x42\xf8\x46\x7a\x98\x27\xa4\x30\ -\xa6\xb8\x5e\x81\xbd\xe4\x57\x24\xce\x7a\xfd\x82\x87\xad\x96\x92\ -\x25\xd7\xce\xdf\xcd\x2d\xbf\xdb\x56\x62\xd0\x1f\x50\xe1\x36\x4a\ -\x7d\xd3\xa5\xd7\xbc\x7d\x8e\x51\x1a\x76\x96\xc9\xa1\x0c\x9f\x44\ -\xd0\x08\xda\x34\x36\x17\x51\xba\x8d\x95\x5e\x23\x63\x8c\x33\xa4\ -\x74\xae\x79\x64\x91\x43\x63\x11\xca\x0c\x1e\x21\x79\x57\xa8\x68\ -\xbb\x57\xf4\xcb\x59\x16\x1d\x32\xcc\x73\xbc\xca\x2e\x89\x7c\x9c\ -\x57\xf4\x0f\x25\x86\xfc\x45\x99\xe0\x7b\x4a\x26\xd4\xa2\xe6\x19\ -\x79\x49\xc2\xe7\xa6\x73\x4c\xd2\x9e\x57\xd0\x17\x60\x5e\x0b\x70\ -\x10\x34\x82\x36\x8e\xbe\x8e\xe5\xba\xba\x91\x1f\x23\x0d\x32\x4d\ -\x79\xe8\xde\xe5\x81\xd2\x93\xd3\xbd\xbd\x15\x7c\x72\x3b\x34\xae\ -\x65\x94\x4b\x0f\xce\x8d\xab\x73\x90\xc4\xab\xf2\xc5\xb1\xa5\xc1\ -\xcf\x32\xe9\x98\xf0\xbd\xca\x3d\xa3\xdc\x1e\x05\x2e\x85\x3f\x2d\ -\xc7\xf2\x7b\x06\x41\x23\x68\x53\x26\x85\xb6\x72\x8c\xb9\x35\x56\ -\xde\xcd\x98\xd2\x39\x56\x95\x89\x31\x3d\xc6\x39\xd6\x31\xf9\xd7\ -\xc8\xac\x77\xa9\x87\xa8\xcf\x76\x34\x8a\x51\x92\xf7\xc1\xab\x57\ -\x3e\x29\x03\x31\x4c\x92\x05\x38\x27\x1a\xd4\x4b\x0e\x43\x94\xcd\ -\x72\xbf\x96\xde\xf6\x15\xca\x3d\x2d\xe9\x06\x2e\xcb\xe6\xf3\xa4\ -\x2d\xe7\xb2\xbb\x0b\x41\x23\xe8\xa2\x33\xda\x5d\xe9\xa8\x70\x97\ -\xa4\x18\xf0\xdf\x88\x9a\xf8\xc0\xa7\x82\x9f\x2f\xd2\xb3\xff\x6c\ -\x84\x63\xa9\x72\x93\xf2\x4e\x5d\xfa\x17\xc7\x39\xb3\x9a\xac\x9a\ -\x90\x62\x98\x5f\x9e\x1c\xe3\x72\x2f\x9d\x22\xe3\x31\xb2\x24\xff\ -\x38\x89\x4d\x9f\xd9\x67\x55\x5d\xd1\x3b\xc1\x7f\x5e\x40\xd9\x3d\ -\x82\xa0\x11\x74\x11\xac\x6d\x71\x95\x9a\x7a\x67\x8b\x13\x3c\x26\ -\x94\xa2\xb2\xbc\x2c\x03\x7e\x21\x64\xc3\xbb\xcc\x65\x51\x4a\x63\ -\x68\x65\x4f\xdb\x71\x5f\xf7\x39\x86\xee\xed\x6f\x24\xc3\x26\x59\ -\x4a\x62\xd3\x92\xc6\xb8\x6f\x68\x63\x3d\xf9\xa2\xf1\xcb\xd5\xd1\ -\x4b\xde\x78\x0e\xf6\x58\x46\x5f\x04\x5b\x17\x50\x76\x4f\x23\x68\ -\x04\x9d\x17\xb3\xcb\x0a\xb4\x89\xb6\xca\x75\xb7\xc5\xd2\x29\xf5\ -\xc4\x0f\xf0\x59\x69\xe6\xc7\xa7\x01\xaf\xe1\x8f\xc9\xf8\xf7\x7e\ -\x06\x48\x62\xc3\x0a\xd7\x0f\x1d\xb2\xf6\x3b\x8b\x9b\x1c\x43\x50\ -\x26\x70\x7a\x41\x65\xf2\x04\x4b\xbd\x11\x74\x96\xf4\x94\x0a\x64\ -\x9f\xec\xd0\x09\x81\x86\xa7\xb0\x4c\x58\xf7\xc0\xb6\x91\xd8\xe9\ -\x1f\x33\x6e\xa0\xa3\x65\xcc\x79\x5c\x0d\x05\xbd\x84\x84\xb2\xcd\ -\x90\xe0\x39\xcd\x2d\x4b\xb1\xb7\x90\xb9\x86\x6d\x64\xb2\xed\x0c\ -\x19\x57\x7f\xd6\xf1\xc5\x6d\x12\xa3\x0b\x6c\x3f\x8f\x86\xb8\xbe\ -\x8d\x10\x34\x82\x8e\x82\x8e\x8a\x38\xd4\xb1\x3c\xf7\x67\x89\x6c\ -\x48\x92\x1f\x77\x11\x69\xd8\x7a\xcf\xbe\xe7\x73\xea\x65\x8d\x93\ -\x28\x89\x3d\x24\x06\x77\x62\x4d\x04\xbd\x84\x63\x78\xe1\x84\x90\ -\xcb\x99\x1b\x13\xb1\xb7\x88\xd8\xde\x97\xe7\x34\x21\x64\x5e\x09\ -\xd3\x98\xa0\x8a\xcb\x16\x37\x7b\x88\x3a\xae\xdf\xfc\x7a\x23\x68\ -\x04\xed\xc7\xc2\xb2\x4c\xfb\x4e\x97\x1e\xa6\x12\xa9\x46\xed\x71\ -\xad\x2a\xe3\xc8\x8d\x1e\x96\x8e\xf3\xfd\x35\xc7\x86\xa9\x37\xb4\ -\xdd\x5b\x4d\x49\xc8\xff\x91\x21\xc2\xc8\x5a\xd0\xfd\x1d\x73\x03\ -\x5d\xb2\xfc\x3d\xe8\xef\xb6\x91\x08\x87\xaa\x6d\x72\x3b\xa8\xc0\ -\x76\xd5\x5b\x05\x6f\x79\xf6\x55\x0a\xe9\x07\x10\x74\x05\xd0\x95\ -\x65\x59\xd5\xbd\x43\xc5\xd5\x32\x2e\xfb\x96\x23\x9c\xec\x7b\x19\ -\x53\x3e\x2c\x82\x48\x96\x13\x11\x9f\x23\xbd\xae\x27\x72\x5e\x15\ -\xf6\xad\xbc\x5e\x5f\x20\xab\xda\xf4\x04\x63\x1f\xdb\xf5\x1d\x6e\ -\x98\x30\xb2\x10\xb4\xfe\x02\x3a\xd9\x65\xfc\xfe\x47\xc7\x24\xa9\ -\x5b\x7c\xf8\xb1\x11\x26\x63\xcb\xc6\x0e\x39\xb5\xad\xa1\xb2\x04\ -\x7f\x6e\x97\xa5\xef\x41\x9d\x12\x76\x54\xa9\x89\xa0\x1b\x02\xde\ -\x41\xa4\x74\xa9\x2c\x12\xd0\x91\x0c\xdf\x79\xe4\xa9\x78\x52\xc2\ -\xd1\xfe\x10\x61\x11\xc9\x2a\xb2\x12\xf0\x66\x15\x9c\x08\x27\x0f\ -\x7e\x90\xe8\x8c\xeb\xe5\xd5\x7c\x77\xf9\xd2\xe8\xa1\xa6\xdd\x14\ -\x36\x4d\x1e\x90\x21\x93\x22\x05\xad\x9f\xdb\x3f\x3d\xce\xa3\x7b\ -\xcd\x0b\x7a\xfc\xdd\x74\x52\x47\x7e\xa8\xa8\x98\x1b\x3b\xc2\xe4\ -\xd5\xf6\x6e\xb0\x0d\xa7\xbc\x2c\xff\x3f\x5a\xf2\xa7\xb0\xe5\x55\ -\xc5\x05\x3d\xb3\xf4\x74\x86\xc8\x30\x84\x9e\x98\xb9\x50\x7a\xab\ -\xf7\xc9\x82\x0b\x9d\x5a\x53\xef\x62\xfc\x89\x48\xf3\x0d\x89\x4f\ -\x1d\x2d\x9f\xb9\x41\x7a\xc5\xfa\x35\x56\x27\x65\x0f\x9b\x76\x52\ -\x0b\x7f\x67\x89\x83\xbd\x59\xc6\x23\x4d\x6f\x98\x7a\x28\xe3\x14\ -\x95\x5d\xa2\xf7\x47\x45\x8c\xb3\x4a\x3e\x91\xa8\x7f\x9f\x64\x42\ -\x68\x49\x79\x1e\xa7\x88\x08\xdc\x8e\x7f\x5f\x40\xcf\x71\x3f\x19\ -\x6e\xea\xaa\x30\x27\x16\xd0\x4e\x93\xec\xe0\x82\xa0\x4b\x20\xe8\ -\xbe\x12\x5f\xfa\x17\x59\x19\xd7\x2e\x0b\x01\x9c\x0f\x54\x0f\x1f\ -\xe8\x14\x86\xb7\xcb\x8a\xac\x83\x2c\xf6\xb5\x58\x43\x26\xe1\x92\ -\x5c\xc3\x2a\xb2\xa0\xa0\x2c\x32\xb6\x6f\x6e\x7a\x99\xc4\x66\x47\ -\x59\x68\x12\x65\x4c\x5c\x97\xfb\x8e\xb6\xb2\xba\x20\x85\x38\xe8\ -\x75\x64\x91\x8d\x8e\xcf\x5d\x4c\x86\x66\xec\x0c\x94\xe7\xd1\xe2\ -\x23\x64\xfb\xe6\xba\xdb\xfa\x3c\xdb\x3d\x6a\x20\xe6\x2e\x29\xab\ -\x22\xda\xef\xdf\x12\xbc\x01\xb2\xab\xb7\x41\x82\xee\x23\x91\x10\ -\x83\xa4\x37\xac\x03\xd9\x7f\x51\xee\x7b\xeb\x8d\x92\xde\x92\xee\ -\xb1\xe9\xcc\x5b\x73\xa6\x38\x1c\xb2\xb8\x4d\x00\x97\xab\x69\x37\ -\x48\x35\x81\x5f\x45\x8c\x5f\xca\x9b\xc1\x28\x99\xb4\xbc\x41\x26\ -\x00\x37\x71\x09\x1d\xbb\x33\xe4\xb1\x8f\x09\xf9\xd9\x6f\xa5\xf1\ -\xcd\xe6\x78\x86\x71\x96\x82\x3b\xd3\x5b\xfe\xd1\x65\xcc\xd8\x4e\ -\x98\x63\x7e\x21\x75\xc4\x6b\x85\xe2\x40\x59\x84\xd3\x55\x03\xce\ -\x29\x58\x64\x71\x26\xa2\x3f\x51\xc5\x6d\xa4\x80\xa0\xd5\x94\xb4\ -\x95\x7f\x93\x21\x07\x37\x09\xe9\xd7\x52\x9d\x13\x79\x40\xca\xaf\ -\x3b\xbd\x24\xdc\x6a\x0b\xdb\x98\xd8\xd3\x32\x19\x68\x5a\xe3\x7a\ -\x5b\x86\x6d\xf6\x95\x2f\xaf\x7e\x2e\xd2\xb1\x57\xe4\x85\x84\xcd\ -\xe5\xde\xfe\x29\x5f\x6a\x61\xce\xd5\x2c\xc7\x18\x15\xa2\x37\x36\ -\x97\x4b\xb9\x9e\x18\xf3\x1e\xc7\x3a\x8e\xb3\x55\xc2\x32\x73\x7e\ -\x71\x38\x97\xc8\xdf\x5b\x13\x31\x6b\x4e\x32\x40\x64\x1b\xc6\x9c\ -\xcb\xe8\x81\xa0\xf3\x17\xf4\xc2\x92\x9f\xc0\x2d\x87\x84\x9e\x9c\ -\x3b\x22\xa5\x15\x78\x33\x49\xaf\x6c\x73\xe9\x0d\x9f\x2e\x2b\xb9\ -\x9e\x50\x66\x6c\xc7\xe4\xc5\x8f\x22\xd5\xdd\x25\xee\xda\xfe\x2a\ -\x7e\xb9\x4c\x5e\xde\x2c\xc9\x66\xee\x92\x08\x85\xb1\x92\x03\x22\ -\xc9\xe4\xd6\xbd\xb6\x73\xdd\xef\x93\x9f\xc3\x6f\x03\xd5\x37\x55\ -\x3a\xe3\x8d\x71\x05\xfd\x80\xf2\xce\x13\xdd\x2b\xc1\xeb\x76\x59\ -\xd9\xdf\x20\x99\xbd\x86\xa0\xcd\x16\xf4\x6a\x22\x48\xe7\x6b\xe8\ -\xe5\xd2\x93\xee\x1b\xb3\x27\xbc\xb2\x4c\x10\x9d\x26\x92\x79\x5e\ -\xc6\xa2\xbf\x50\xd9\x64\x5e\xcb\x72\x07\xe9\xdd\x95\xfb\x4e\x16\ -\xb3\x65\x7c\xee\xbb\x1c\xe7\x1b\xee\xb3\xb8\x61\x59\x8f\x67\xb1\ -\x71\x8a\x13\x42\x51\x05\xad\xbf\xa4\x36\x53\xfe\x49\x8d\x3e\xa9\ -\x91\x98\x3f\x93\x71\x7c\x93\x64\xb6\x7f\xc4\x7b\x78\x08\x41\xe7\ -\x27\xe8\xa3\xd4\xb4\xbb\x62\xec\x1a\xe3\x38\xf3\x48\xd4\x86\x1e\ -\x5b\x7c\xd8\xf0\x9e\x70\x58\x9e\x74\x4c\xb2\xb9\xb1\x65\xc6\xe1\ -\x78\xce\x31\x7c\xb7\x89\x3e\x1d\x01\x33\x5e\x96\xb3\xbb\x8d\x0d\ -\xbe\xe2\x33\xbe\xfc\x71\x86\x82\xf6\x7b\x85\x5f\x53\x15\x9f\x29\ -\x2e\x6f\x6e\x92\x95\x7a\xa6\xc9\x6c\x36\x15\x6e\x67\x99\x06\x4f\ -\x20\xe8\xec\x05\x3d\xc0\x31\xbe\x3c\x22\xa0\xa7\xe3\x96\x64\x66\ -\x98\xc4\x2e\xb7\xa9\xe8\xbb\x55\x98\xca\x18\xf9\x82\x0a\xfb\xd6\ -\xd0\x92\xa1\x9c\x97\x73\x39\xdf\x9e\x2e\x9f\xdd\x58\x26\x01\x1b\ -\x21\x7b\xf6\xdc\xd2\x9b\xfa\x4c\xd4\x2d\xaf\xbc\x77\x12\x4f\x22\ -\x68\x9d\x6a\xd5\x2b\x75\xeb\x0a\xca\x7f\x93\xdc\x2a\xa2\xeb\xd4\ -\x6e\x86\x0b\xed\x8c\x08\xf7\x73\x0b\x82\xce\x56\xd0\x7f\xb6\x15\ -\xf6\xfd\x8e\xf1\xd4\xa0\x61\x8b\xdf\x4b\x48\xdd\xf7\x15\x6a\x40\ -\x5f\x4b\xf8\x9f\xfe\xc2\x59\x49\x42\xff\xf4\x78\xe9\xf1\x32\x3c\ -\xd3\x60\xa8\x4c\x5e\x2e\x6d\x0b\x33\xca\xaa\x17\xe8\x95\x66\xd2\ -\x29\xdc\x89\xb6\x89\xc9\x21\xb6\xb1\xf2\xc6\xe7\x9f\xf3\x38\xfe\ -\x7a\xf2\xfb\x5f\x52\x14\xf4\xbf\x54\x77\x72\x7b\xaf\xfa\x73\x40\ -\xcd\xc4\xac\x39\xb3\x24\x8b\xc6\x66\x8d\x30\xec\x78\x04\x82\xce\ -\x4e\xd0\x17\xdb\x5e\x8b\xb7\x0d\xb9\x24\x77\x1f\x91\xf2\xe7\x15\ -\x6b\x3c\x8f\xc9\x18\xaf\xce\xcb\xac\xf7\x99\x6b\xf5\x88\xe3\xf6\ -\x92\xfa\xb3\x11\x5f\x0d\xa3\xbc\x0a\x7b\x3d\x8f\x41\x8e\xcf\x0e\ -\x73\xfc\x7e\x6f\xf9\xf9\x75\x12\x63\xfd\x9b\x4f\x03\xeb\x1d\xa2\ -\x51\x7e\xe3\x18\x36\x71\x13\xf4\xbf\x03\x1a\xed\x76\x05\x84\x44\ -\x4e\x96\x70\x43\x2f\x7e\xce\xf0\xdc\xcf\xc8\xa4\xe7\x92\x25\x5b\ -\xd9\x1b\xf6\xcd\xe6\x58\x04\x9d\xbe\xa0\x67\xb2\x85\x68\x9d\x1c\ -\xf0\xd9\x19\x24\xde\xb5\x8a\xb1\xa8\x13\x24\x26\x79\x7d\xf9\xe2\ -\xf9\xd6\xb0\xeb\x7b\x33\xc4\xc2\x1c\x7b\xdc\xb9\xdb\x67\xfc\x72\ -\x79\x3c\xeb\x58\x68\x64\xcf\x94\xf7\x9e\x9a\x76\x37\x0d\x67\x62\ -\x9c\x2d\x1c\xc3\x30\xc7\x04\x7c\xb9\xe7\x51\x87\xbe\x91\x89\xab\ -\x93\x65\xe5\xaa\x8e\x35\x5f\x40\xc6\x56\xbd\x58\x48\x3e\xb7\x89\ -\x84\x8b\xea\x30\xc4\x6b\xe4\xfe\xdf\x8c\x51\x2f\xfe\x63\x71\xae\ -\x0c\x37\x95\x35\xf5\xc2\xd0\x08\xa1\x92\x08\x3a\x45\x41\xf7\x94\ -\x1e\xf3\x77\x3e\xa1\x4e\x8d\x55\x62\xc7\xc6\x5c\x0e\x6c\x32\xff\ -\x93\x71\xf2\x3d\x1c\x91\x18\x7a\xa2\xea\x53\xc3\xae\x75\x61\x15\ -\xbc\x73\x4b\xe3\xb3\x87\xfb\x7c\xee\xcc\x10\xcb\xb6\xe7\xb6\xcd\ -\x1d\x7c\x27\x43\x37\xca\xf1\xf9\x9f\x1c\xd1\x21\xbb\xca\xcf\x6e\ -\xf1\xb9\xd6\xf9\x24\x74\x32\xab\x4c\x80\x9f\x49\xaf\x7d\x84\x6d\ -\x09\x7b\x16\x13\x67\x6b\x3a\x04\x7e\x81\x08\xfc\x76\xf9\xff\x89\ -\xf2\x76\xb0\x74\x89\xa5\xec\x9c\x57\x0a\xf3\x66\x71\x32\x82\x4e\ -\x4f\xd0\x6b\x88\x9c\xbb\xa4\x32\xbb\x85\xd8\x5d\x5c\xb2\x65\xd2\ -\x61\x57\xab\xed\x21\x42\x0b\xca\x29\x7c\xbd\x21\xd7\x7c\x78\xc8\ -\xe5\xf5\x8d\xcf\xf7\xf2\xf9\xdc\xf9\x2e\xc7\xbf\xde\xf1\x99\x39\ -\xe5\xe7\xbf\x89\x54\x97\xf3\xb8\xae\xed\xd5\xd4\xf9\xb1\xfd\xbe\ -\x44\x4e\xcb\x61\x7e\xe2\xae\x8a\x08\xd1\x44\xee\x0e\x51\xfe\xdb\ -\x20\xe8\x74\x04\xbd\x94\x9a\x76\x97\x86\x25\x64\x81\xc8\xc5\x12\ -\x93\x5c\xd5\xc9\x99\xb1\x21\x42\xe4\xec\x5c\x57\xf0\xf5\x3e\x1b\ -\x61\x32\x27\x28\x16\xb5\xd5\xf6\xbc\xbf\xb1\xf5\x84\x9d\x71\xdc\ -\xcb\x38\x72\x6d\x5c\x9d\xa0\xc7\x34\xc4\xd6\x11\xc8\x03\xa5\x4a\ -\xb0\xed\x52\x09\xd9\x3d\x44\xd9\x0f\x40\xd0\xc9\x05\xfd\x57\x95\ -\xfd\x96\x4c\xa6\xc5\x98\x2e\x2b\xe1\x4c\xce\x70\x35\xbd\xb8\x63\ -\xc6\x10\x0f\x75\xbb\x82\xae\xfd\x53\x15\x3e\x01\xba\xee\x35\xeb\ -\x1d\xc8\xe7\x77\xf9\xdd\xf4\xb6\xa8\x8d\x2b\xe4\x67\x1b\xa8\x29\ -\xfb\x30\x3a\x3f\x3f\xb7\x48\xba\xf1\x7f\xaf\x98\xe8\x07\x7d\xae\ -\x67\x9f\x82\xbf\xe8\x1f\x2e\x8b\x30\x4a\xc2\x9c\xf2\x65\x5e\xfa\ -\x3d\x2a\x4d\x16\xf4\xb6\x35\x12\xf3\x8d\x2e\x3d\xa9\x87\x5c\x3e\ -\xd7\x21\xbd\xbc\xa0\x07\xbb\x65\xc6\x33\xfc\x6e\xec\x13\xa1\xe2\ -\xf9\xed\xd1\xd7\x48\x57\xfa\xa1\xcb\x70\xc7\xa1\x01\xc7\xdd\x39\ -\x20\x26\xdb\x99\x3f\x63\x83\x10\x79\x41\xf2\xe4\x34\xe4\x9a\x1a\ -\xa3\x03\xca\x7a\x4b\x04\x1d\x5f\xd0\x3b\xab\xe0\x2d\x6b\xca\xce\ -\xcf\x32\x09\xb5\xae\x8f\xc4\x9e\xf4\x19\xbf\xec\xaf\x82\x77\x5c\ -\x79\x22\xc7\x57\xf5\x34\x62\x58\x47\xda\x42\xde\xdc\xc2\xbb\x82\ -\xc6\xe1\x83\xe6\x20\x1a\x3d\xf6\x23\x7d\x62\xab\x8b\xe6\x15\x79\ -\x45\x47\xb2\xc9\x38\x26\x20\x0a\x6a\x29\x04\x1d\x4f\xd0\xcb\xd6\ -\xa0\xc7\x7c\x95\x0a\xb7\x33\x77\xef\x14\x42\x85\x1e\xcd\xf8\x5e\ -\x3e\x4e\xa9\x32\x36\x42\xd9\xfe\x1b\xf3\xef\xd7\x0e\x99\x7f\xe1\ -\xa9\x92\xd4\x91\x0b\x54\xfc\xdd\xc0\xc1\x3f\xc3\xdd\xd8\xb2\xdc\ -\x87\x89\x82\x7e\xbd\xc2\x62\xbe\x39\x46\x92\x99\xa1\x01\xc3\x15\ -\xba\xb7\x39\x38\xe0\x18\xe7\x84\x5c\x14\x11\xe7\x9e\xd2\x88\x99\ -\x3d\x55\x4d\xc9\x01\xbd\x44\xcc\x63\x5c\x5b\xc1\xfa\xa2\x13\x30\ -\xed\xaf\x4a\xb0\xb9\xa9\x81\xac\x1c\x61\x65\x29\x82\x0e\x29\xe8\ -\xb3\x2a\x2a\xe6\x91\x12\x2a\x18\xf7\x41\x6d\x16\xe2\x1c\x0f\x04\ -\x84\xac\x05\x2d\x51\xd6\xe9\x44\xef\x10\xc6\x46\x78\x13\x48\x5a\ -\x09\xff\x6e\xfb\x82\x58\x36\xc1\x71\xde\xaa\x68\xdd\xb9\x87\x9e\ -\x74\xec\x9d\x92\xfc\xea\x3a\x82\x8e\x28\xe8\xad\x2b\xd8\xb8\xf4\ -\xdb\x80\x73\x77\xe7\x45\x24\x1a\xe1\x0d\xe9\x1d\xf5\x0b\xf9\xb0\ -\x4e\x0f\x71\xbe\xf7\x25\xf2\xc5\xeb\x18\x5b\x04\xcc\x6e\x7f\x24\ -\xa1\x7a\xba\xc7\xdd\x2c\x0b\x63\xbc\x3e\xfb\x62\x0a\x15\xf0\x24\ -\x39\xd6\x2f\x6a\xca\xb6\x59\x71\x73\x73\x7f\x5d\xa1\x7a\x33\x4e\ -\xbe\xb8\x06\x21\xda\xd8\xcc\xe2\xb3\x58\xed\x7b\x55\x82\xed\xae\ -\x4c\x13\xf4\x7f\x2a\xd4\xc0\x74\xda\xcc\x5d\xd4\xb4\xa9\x4c\x4f\ -\x73\x2c\x4b\x6e\x30\x5c\x96\xf5\x06\x3d\xb0\xb0\x89\x7a\x46\xfb\ -\x4c\x22\xf6\x0f\x31\x9c\x31\x59\x24\xad\x5f\x13\x57\xf2\xc8\x6f\ -\xa0\x65\x7e\x91\x2c\x0e\x89\x53\xf9\x6e\xb4\x1d\x6b\x8b\x84\x15\ -\x79\xfe\x8a\xd4\x1b\xfd\x25\x73\x82\x84\x0e\x22\xd9\xe4\x3c\xe5\ -\x93\x67\xa4\x27\x82\x8e\x26\xe8\xa5\x7c\xa2\x16\xca\x94\x23\xe3\ -\x25\x59\x5c\x32\xbd\xf4\x0a\x9b\x25\xea\x62\x5c\xc0\xdf\x4e\x92\ -\xa5\xcd\x2b\xab\xf4\x52\x2a\xea\x5e\xf7\x5c\x1e\x8b\x7f\xde\x0e\ -\x39\x2e\x7d\x98\xc4\x95\x6a\x11\x1f\xed\x12\x29\xf1\xa3\xbc\x25\ -\xcc\x15\xa1\xe2\xd9\xf3\x41\xef\x99\x42\x45\x9e\x4b\x42\x10\xc7\ -\x95\xb4\xde\x3c\x6b\x2b\x67\xc4\x9a\x1e\xf7\x96\x7d\x15\xa7\x89\ -\x93\x84\xc3\x4b\x2c\xe8\xef\x65\x2c\xf4\x9d\x14\x1a\xec\xf2\x3e\ -\x0f\xee\xaf\x11\x8e\xa5\x27\x44\x8e\xf2\xc8\xd3\x10\x76\x42\x76\ -\x92\x9a\xb2\x9f\xa0\xfd\x6d\xc0\x29\xf9\xe3\x42\xc4\x3f\xdb\x33\ -\xc2\x1d\x94\xa0\xf2\x4e\xe7\xb2\xc0\x65\x0e\x59\xf6\x7f\x74\x09\ -\x72\xb1\xbc\x29\xa1\x60\xcb\x20\xd2\xcc\x18\xae\x4a\xbc\x9b\x8a\ -\xc9\x71\xd0\x43\x64\xa1\x42\x57\x8d\x99\x10\xd0\x9b\x3e\x29\xe2\ -\xf1\xee\x77\x99\x84\x9b\x25\xe2\xe4\xda\x4f\x2e\x8b\x45\x74\x14\ -\xc7\x65\x32\xf1\xd2\x08\xbb\xd3\x89\x79\x16\x75\x19\x86\x78\xd9\ -\x76\xac\xcb\x13\x54\xdc\x21\x21\x5e\x51\x67\x91\xeb\x32\xe9\x99\ -\xea\xb2\xb9\x46\x85\x4b\x91\x0b\xd9\x25\xf0\x47\xd0\x29\xac\x24\ -\xec\x25\x0b\x0a\xc6\xd7\x58\xd2\x93\x03\x72\x35\xec\x19\x63\xc5\ -\xe0\xf5\x8e\x89\xc9\x28\x3d\x69\xfb\xaa\x3c\xfd\x9a\xb8\x96\xe3\ -\x7a\x96\x96\x45\x16\x7a\x37\x92\x9d\xd4\xd4\xfb\xc5\xd9\x87\x1f\ -\x2e\x49\x50\x69\x9f\x8b\xb8\x30\x46\xc7\xc3\xfe\x5a\xd0\xf3\xd3\ -\x61\x83\x77\xca\x73\xea\x4f\xb8\x5c\xee\x78\x65\x43\x7c\x14\x41\ -\xa7\x97\x2c\x69\xfe\x80\x68\x82\x3a\xf0\x67\x9f\xf2\xd9\x28\xe6\ -\x31\x4f\x75\x1c\xe7\x27\x15\x3f\x84\x70\x1b\x9f\xd5\x81\xce\x46\ -\x92\xa4\xe7\x3c\x4c\x8e\x61\x8f\x95\x5e\x54\x7a\xd4\x97\x2a\xef\ -\x2d\xbe\x06\xe4\x28\x64\x9d\xca\xf3\x14\x59\x4a\x3c\x3b\x92\x34\ -\x52\xd0\xb7\x21\xe8\xf4\xf3\x41\x6f\x24\x91\x05\xe3\x6a\x2a\xe9\ -\x03\x7c\xca\x66\xdb\x98\x71\xc0\xba\xe7\x7c\xa2\xed\x8d\xe5\x87\ -\x84\x21\x85\x97\x4b\xcf\x79\x1e\xf9\x52\xf9\xc0\xf1\x99\x24\x3d\ -\xe7\x81\x72\x8c\x5f\x25\x14\x70\xa4\x8c\x81\x37\x7a\xc7\xd7\x05\ -\xc4\xb6\x6e\x93\x62\x84\xce\x9b\xd2\x0b\xbb\x50\x26\xf7\x76\x91\ -\xa1\x1e\x84\x5c\x0e\x41\x5f\x82\xa0\xb3\xdb\xf2\x6a\x1e\x09\x45\ -\x7a\xbb\x86\x92\xbe\x3c\x60\xcc\x35\xee\x2e\xe4\x5f\x5a\xfc\x4e\ -\x75\x27\xb2\xff\x2c\xa5\xf1\x73\xe7\xcf\xae\xf0\xb9\xf6\xa0\xd5\ -\x83\x6b\x28\xff\x7d\x07\x5f\x09\x59\x77\x5e\x0c\x78\x13\x78\xd4\ -\xc6\x48\x79\xcb\x18\x2e\xe3\xee\x7a\xb5\xe6\x9a\x44\x5a\x94\x8a\ -\xe3\x33\x5c\x60\x85\xa0\x43\xa0\x37\x7f\x1d\x21\xcb\x9d\xeb\x22\ -\x69\xbd\x0b\xc8\x42\xca\x7b\x37\x89\x91\x09\x8e\xfd\x6f\x59\x5e\ -\x9c\xf6\x35\x5f\xea\x71\xbd\xeb\xc9\x84\xcd\x46\xca\x7f\xf7\x15\ -\xbf\xdd\xd6\x75\x9a\xd0\x3e\x29\xe4\xeb\xf8\x1d\x42\xab\x1c\x37\ -\x79\x3c\xeb\x6b\x11\x74\x3e\x82\xb6\xb3\xa2\xea\xde\xf4\x73\x64\ -\xc2\x57\xf5\xb2\xac\x34\xdb\x28\xc4\xf2\x69\x13\x38\xd8\xe3\x1a\ -\xff\x26\xbf\xdf\xdf\xe7\x3e\xd6\x0c\x31\x09\x1a\x75\x51\xc7\xfd\ -\x1e\xc7\xe9\x40\x68\xb5\x59\xa8\x72\x11\x82\xce\x5f\xd0\x76\xfa\ -\xc8\x62\x91\x4b\x64\xd5\xd0\xbb\x15\x8d\x06\xf1\x8b\x23\xbe\xc4\ -\xd0\xc9\x4d\x2d\xd4\xc6\x56\x56\xad\x3e\xd7\xbf\x6c\x88\xe8\x8b\ -\x13\x62\xd4\x8d\x4d\x7d\x8e\xb7\x2a\x52\xab\x0c\x7a\x73\x8b\xf7\ -\x3c\x9e\xf3\x31\x08\xba\x58\x41\x7b\xed\xb2\xa0\x5f\x71\xff\x22\ -\xf1\x91\x6d\x12\x6b\xfd\x7d\xc9\x25\xfd\x6f\xc9\xef\x61\xd2\xee\ -\x2a\xaf\x78\xc8\x6e\xa0\x2d\x5e\xfa\x1e\x9f\x67\xb5\x53\xc0\xb0\ -\x46\xd0\x98\x76\xd0\x6e\x2e\x5e\x6f\x58\x57\x22\xb6\xca\xb0\xb0\ -\x4f\xdd\x39\x05\x41\x9b\x27\xe8\x20\x71\x6f\xa5\xba\xf7\xad\xbb\ -\xc1\xe2\x31\x99\x2c\x2b\x8b\xbc\xf5\x72\xeb\x63\x3d\xee\x6f\x2d\ -\x09\xff\xca\x73\x31\x46\x4f\x9f\x10\xb9\xc6\xa4\xa4\xd7\xf3\xd8\ -\x3e\xc4\x39\xde\x4f\xf8\xcc\x9f\x61\x98\xa3\xf2\x2c\xef\x53\x7f\ -\xfe\x8a\xa0\xcb\x23\x68\xbf\x57\xa4\xde\x92\xb7\x62\x25\x99\xc5\ -\xff\xa3\x7c\xfb\x36\x24\xfe\x92\x48\x7c\x82\x41\xbd\xe9\xed\x3d\ -\x26\x0f\xf3\xd8\x0c\xf5\x6a\x89\xb2\x71\x2e\xc1\xbe\xd3\xf6\x99\ -\x89\xb2\xa0\xc5\xad\xcc\x2f\x0f\x79\x9e\xa5\x13\x3e\xdb\xc7\x7c\ -\x8e\xbd\x20\x72\xab\x04\x7e\x5b\xe6\xad\x83\xa0\xcb\x2f\xe8\xb0\ -\xf4\x16\x29\xe9\xb1\xcd\xcd\xa4\x27\x3e\x5c\x44\x6e\xe7\x9f\x22\ -\x86\x3b\x5d\x7e\x67\xe7\x9e\x14\xc6\xcb\x6f\x92\xeb\x72\xbe\xda\ -\xdf\x92\xa1\x9c\xdd\x7a\xf0\xab\x3a\x56\x29\xfe\x22\x5f\x76\x6e\ -\xe5\x78\x5b\xc8\xf3\x0c\x4d\xe1\x99\x3d\xe2\x73\xfc\xfe\xc8\xad\ -\x12\xf8\x7d\xd9\x6f\x86\xa0\xeb\x23\xe8\x2c\x98\x57\x16\xa6\x4c\ -\x4e\x20\xcc\xaf\x64\xa2\xd0\xd9\xdb\x3c\x27\x65\x31\xdf\x24\xe1\ -\x72\x6e\x09\x9d\x9c\xfb\x4a\x6e\xe9\xb1\xca\xef\x99\x90\xe7\x3a\ -\x31\xa5\xf2\x7d\xd9\xe7\x1c\xfb\x52\xff\x4a\x8f\x4e\xca\x35\xd6\ -\x27\x4d\xc1\xa2\x08\x1a\x41\xa7\xc1\x90\x94\x24\x7a\xb1\xea\xce\ -\xf4\xd6\x38\xee\x5e\x29\x1c\xb3\xcd\xa7\x27\x72\x97\xcb\xe7\xdd\ -\xd2\x8a\x6e\x19\xe1\x7c\xef\xa6\x54\xa6\xd3\x05\x9c\xe7\x56\xea\ -\x5d\xe9\xd9\x26\x20\x8f\x4c\x0f\x04\x8d\xa0\xd3\xe2\x82\x94\x24\ -\x3d\x56\x7a\xcf\x6b\xdb\x16\x89\x4c\x8c\x71\x1c\xbd\x1b\xcc\x1e\ -\xca\x3b\x31\x91\x5b\xec\xe9\x3e\x2a\xde\x3e\x89\x6e\x5b\x72\x1d\ -\x2c\xd1\x29\x0b\x44\x2c\xc7\x05\x65\x7c\xfe\x06\x15\x9c\x34\x7f\ -\x36\xea\x5d\xa9\xf9\x87\xcf\xf3\xfd\x8f\x2a\xd1\x16\x62\x08\xba\ -\x1c\x1c\x94\xf2\xb0\x44\xbb\xcc\x72\x2f\x12\x61\x15\xe6\xbf\x94\ -\xff\x16\x4c\x87\x79\xfc\x9d\xb3\xe7\xbc\xa4\x4c\xae\x26\xbd\x07\ -\x9d\xdc\x49\x67\xb6\x3b\x57\x86\x3e\xf4\xd8\xff\x26\x0e\x74\xda\ -\xd3\x16\x19\xfb\x8f\x92\x0c\x6a\x30\x75\xae\xb4\xcc\x1e\x30\x87\ -\x73\x3f\x3d\x68\x04\x9d\x05\x59\xe4\x36\xbe\x2d\xc4\xd2\xf0\x17\ -\x02\x26\xe6\x16\x93\x05\x27\x5d\x21\x7a\xce\x7a\x69\xfe\xa4\x12\ -\x84\x2d\x5e\x47\x7d\x2b\x2d\x5b\xc4\x4c\x3b\x80\xa0\x11\x74\x62\ -\x0e\xce\x51\x52\x1f\x28\xef\x34\xa2\x0d\x4e\xf4\x19\x26\xd9\x5b\ -\x4d\x9d\x73\xfa\x11\xc3\x24\xec\xd7\xa3\xfe\x59\x91\x99\xae\xac\ -\x1c\x1e\xf0\xdc\xf7\x41\xd0\x08\x3a\x4b\x2e\xcc\x41\x5e\x57\x48\ -\x58\x9e\xd7\x35\xac\x10\x10\x09\x71\xb6\x9a\x3a\x41\xd1\xbb\x06\ -\x89\xf9\x07\x59\x34\x73\x01\xc3\x1c\x95\x24\xa8\x23\xb0\x1e\x82\ -\x46\xd0\x59\x73\x54\x46\xf2\x9a\x14\xd0\x6b\xd6\xe3\xbc\xcf\xab\ -\xf0\x29\x51\xaf\x31\x44\xca\x3a\x35\xed\xf5\xf2\xfa\xdb\x48\xae\ -\x14\xf4\xa5\xf1\x10\xf5\xac\x74\x2c\x11\xe2\xad\xa9\x0f\x82\x46\ -\xd0\x79\x70\x5a\x06\x22\xf3\xda\x03\x71\x9d\x90\x43\x14\x17\xc8\ -\xe7\x57\xb3\x18\x5d\x80\x88\x7f\x93\x65\xef\xed\x32\xbe\xae\xb3\ -\x1b\x6e\xe0\x72\x3f\xbb\x86\x3c\xde\x5a\xd4\xb3\x52\x71\x5c\xc6\ -\x29\x02\x10\x34\x44\xe2\xba\x94\xc4\xf6\x3f\x89\xae\xb0\xc7\x0a\ -\xaf\x2d\xa1\x70\x4f\x84\x3c\xc6\xc9\xf2\xb7\x47\x64\x28\xe0\xd7\ -\x64\x35\xe4\x21\xd2\x9b\xdf\x5c\xbe\x54\xe6\x97\xc9\xca\xb0\xe5\ -\xf6\x4a\xc0\x79\x74\x38\xdf\x3b\x12\x0d\xb0\x18\xf5\xac\x34\x7c\ -\x58\xa5\x09\x42\x04\x5d\x0d\xee\x48\x28\xbd\x89\xb2\x60\x64\x01\ -\x09\xe7\xd3\xb9\xa4\x3f\x8a\x78\x8c\xc6\x84\x60\xd6\x7b\x47\x7e\ -\x2b\x71\xac\xa3\x54\x77\xca\xd2\xb3\x2c\xfe\x20\x2c\x23\x2c\x2c\ -\x5f\x30\x33\xd9\xca\xc8\x9e\xbc\x69\x87\x10\xe7\x69\xbc\x05\x34\ -\xe2\xc7\xa9\x67\xe6\x33\x38\xc4\x73\x3d\x10\x41\x23\xe8\x22\x78\ -\x35\xe1\xb8\xf3\xfb\x09\xfe\x5e\xaf\x1a\x5c\x23\x60\xd2\x30\x6f\ -\x1a\x71\xb0\xdf\xc8\xca\xc0\x46\x2f\x78\x79\x15\xbc\x01\xc0\x85\ -\xb6\x72\xfd\x0b\xe3\xd1\xa5\x21\xcc\x7c\xc7\xae\x08\x1a\x41\x17\ -\xc1\x2c\x09\x25\x1b\x97\x17\x95\xf7\xb6\x42\x45\x33\x41\x86\x43\ -\xec\xb3\xf6\xff\x0b\xf1\x77\xce\x54\xa9\x87\xca\xcf\x9f\xa2\x9e\ -\x19\xcd\x6b\x21\x9e\xed\x2a\x08\x1a\x41\x9b\x98\xa0\x3c\x2b\xbe\ -\x33\x48\xc8\x7a\xcc\x58\xc9\x38\xe3\x0e\x0e\xd1\xf6\x54\xe1\x32\ -\xf9\x79\xed\x9c\x7e\xa9\xfc\x7e\x38\xf5\xcc\x48\x36\x0a\xf1\x6c\ -\x3f\x29\xe3\xbd\x21\xe8\x7a\x05\xe9\x9b\xca\x9b\x92\x3f\xa1\x4d\ -\x26\x25\xbd\xd0\xf9\xa6\x4f\xb7\xb1\x93\x8c\x9f\xfb\x4d\xe4\xcd\ -\x15\xb2\x77\xf5\x8f\x80\xb2\x6d\xbc\x29\x5c\x42\x3d\x33\x8e\x30\ -\x13\xd9\x7f\x47\xd0\x08\xda\x04\x1e\x2a\xa1\xa0\xdf\x90\x18\xd6\ -\x2c\xb2\x9a\x85\x19\xd6\xe8\x0c\x79\xbc\x31\xf2\xf9\xad\xa8\x67\ -\xa5\x89\x7d\x6e\x30\x08\x41\x23\x68\x53\x72\xe1\x7e\x59\xd2\x9e\ -\xb4\xdb\x8e\x2c\x71\x58\x5e\x22\x3d\xc2\x9e\x77\x83\x08\xc7\x7e\ -\xbf\xac\x13\x4e\x15\xe5\xd6\x90\xd1\x3f\x3d\x10\x34\x82\x36\x85\ -\x4b\x4b\x22\xe4\x4f\x2d\xae\x75\xfc\x4c\x6f\x21\x76\xac\x23\x2e\ -\x3b\x2c\x7a\x61\xc9\x3d\x11\xaf\x21\xea\xce\xe0\xb3\xdb\xfe\x96\ -\x18\xe9\xe2\x09\x33\x0f\x72\x15\x82\x46\xd0\x26\xb1\x90\xc5\xaf\ -\x25\x10\x74\x63\xff\xc4\xa3\x95\xf7\x1e\x8b\xb7\xc8\xe4\xdd\x86\ -\x42\x3f\x09\xeb\xd3\xff\xd6\x79\xa1\xcf\x95\xde\xf2\x87\x31\xce\ -\xff\x60\xcc\xf2\x5d\xdd\xf6\x65\xd2\x44\x7d\x2b\x8c\xb0\xbb\xd6\ -\x0f\x44\xd0\x08\xda\x34\xce\x37\x5c\xce\xce\x49\xb9\x8b\x0a\xb8\ -\x86\xf9\x12\x94\xef\x7a\x6a\x4a\x82\x7f\xea\x5b\x31\x8c\x09\xf9\ -\x9c\xe7\x40\xd0\x08\xda\x34\xfa\x2a\x73\x76\x1b\x77\x1b\xda\x70\ -\xbb\x66\x9d\x77\xfa\xbd\x9c\xae\x21\x8d\x8d\x43\x1b\x5b\x87\xbd\ -\x40\x7d\xcb\x9d\xad\x32\x7e\x4b\x42\xd0\x08\x3a\x73\x46\x18\x20\ -\xe3\xf7\x5d\x56\xef\xad\xe8\x73\xcd\xba\xb7\x73\x5b\xc6\xd7\x74\ -\x51\x8a\x65\x7c\x98\x1c\xf3\x4e\xea\x9b\x91\xab\x67\x57\x45\xd0\ -\x08\xda\x54\xfe\x50\xa0\x98\x75\xce\x8c\x66\x8b\x27\x2d\x7e\x91\ -\x9f\xfd\x6a\x1b\x77\x0e\x62\x5d\xd5\x9d\x22\xb4\x23\x83\x6b\x5b\ -\x3e\xe5\x72\x3e\x4f\x4d\x9b\x6a\x15\xb2\x63\xe9\x90\xcf\xf9\xd9\ -\xb2\xdf\x2b\x82\xae\xfe\x12\xf0\x22\xb6\x98\x3a\x56\xce\xef\xdc\ -\xa0\xf5\xe8\x98\xf7\xa1\x57\x06\x5e\xa9\xba\x77\x79\xf9\x29\xe1\ -\xb5\x8d\xce\xa8\xac\xef\x08\x58\x8d\x08\xf9\x86\xd6\x69\xd6\x44\ -\xd0\x08\xda\x74\x2e\xcf\x49\xca\x5f\xc8\xc4\xe4\xbc\x72\xde\x66\ -\x35\xed\x2e\x2d\x69\xdc\xcf\xfc\xb2\x7a\x50\x8b\xf0\x4c\x0f\xf4\ -\x8e\x29\x43\x3c\x96\x77\x1f\x93\x61\x59\x3f\x27\xe7\xd8\x8b\x7a\ -\x57\x78\xef\xf9\x83\x2a\xdc\x2f\x82\xae\x3e\x4b\x65\x2c\xe6\x67\ -\x54\xf7\x3e\x6f\x33\x5b\xf4\x97\x73\x3a\x77\x7c\xb9\xbd\xa0\x7b\ -\xef\xef\x72\xbd\x4b\x64\x78\xbe\xe9\x25\xe7\x83\x3e\xcf\x00\xea\ -\x5e\x26\xbc\x10\xb2\x5e\xee\x8a\xa0\x11\x74\x59\x78\x3c\x65\x29\ -\xff\x20\x8b\x61\xd6\x77\x9c\xe7\x06\x59\xb6\x3d\xd1\x11\xcb\x5c\ -\xd4\x7d\xeb\xde\xfc\x6f\xb6\x6b\x79\x2f\x87\x73\xce\x1d\x72\x32\ -\x14\xe2\xc7\x9f\x87\xd9\x80\xa2\x07\x82\x46\xd0\x65\x61\xc7\x84\ -\x42\xd6\x93\x7b\xf7\xcb\xf0\x80\x1e\xd7\xf3\xda\xd7\xed\x01\xc7\ -\xdf\xdd\x64\xc0\xbd\xbf\x53\xc0\x8a\x32\xfb\x6b\xf8\x3c\xd4\xbf\ -\xd4\x78\xaa\xea\x0b\x53\x10\x74\x3d\x59\x32\xa2\x90\x75\xe4\x44\ -\xab\xea\xde\xbe\x2a\x6c\xc4\xc3\x5c\x0e\x19\xbe\x62\xc8\xbd\xdb\ -\x77\x9c\xd9\x3b\xc7\xf3\x0e\xc9\xb1\xd7\x5e\x07\xd6\x09\x59\x77\ -\xdb\xaa\x74\xdf\x08\xba\x1e\xe8\x7c\xc8\xf6\x6d\xac\x94\xc5\x67\ -\x3e\x95\x7c\x8c\xc4\x0a\xef\xa7\xba\x33\xc2\xfd\xd9\xe2\x48\x89\ -\xce\x68\x70\x8a\x4c\xfc\x5d\x2f\x31\xa9\x37\xc9\x02\x94\x2e\x89\ -\x63\x9e\xd1\x90\x7b\x6f\xb1\xdd\xd7\x3a\x39\x9f\xbb\xb1\x39\xed\ -\x8b\xd4\xc1\x44\xcc\x1a\x61\x29\xff\x20\x04\x8d\xa0\xcb\xc8\x21\ -\xb6\x4a\x7c\x8e\xf4\x78\xd3\x1a\x9b\xd6\xb2\x5f\x5b\xfe\xfd\xaa\ -\x61\xf7\xbd\x9b\xed\x3a\xfb\x15\x70\xfe\x93\xe5\xdc\xf7\x51\x07\ -\x63\x73\x5c\xc8\x7a\x58\xb9\x32\x46\xd0\xf5\x61\x4e\x8b\xc9\xb6\ -\xca\xdc\x4b\x7e\x3e\x4c\x26\xf2\xe2\xca\xf9\x63\x89\x5e\xd0\xc9\ -\x8b\x5e\x93\xd8\x6b\x93\xee\x7b\xc3\x9c\x22\x38\xfc\xb8\x4c\xce\ -\x7f\x2e\xf5\x30\x32\x33\x4b\x08\x67\x98\xdd\x7d\xe6\x41\xd0\x08\ -\xba\xcc\xdc\x65\xab\xd0\xbb\xbb\xe4\x36\x78\x24\xa2\x9c\xf5\x12\ -\xee\x46\xca\xcd\x25\x0c\xbd\xe7\xc6\xcc\xff\x24\x79\x55\x2e\xea\ -\x3a\x1a\x3b\xb2\x9c\x49\x3d\x8c\xc4\x2d\x21\xeb\xe2\x91\x55\xbc\ -\x7f\x04\x5d\x2f\xb6\x56\x53\x27\xc7\xf7\x8a\x9b\x3e\x49\xe2\x9b\ -\xf5\x64\xe1\x78\x91\x5b\x03\x1d\x62\xd7\x29\xc3\x1a\xab\x97\xe0\ -\x9e\x57\x95\xfb\x9d\x68\x7b\x6b\x28\x6a\x1c\xb5\xb1\xf5\xd6\x66\ -\xd4\xc5\x50\x6c\x14\xa1\xa3\xb0\x20\x82\x46\xd0\x55\x60\xbc\x54\ -\xea\xc9\xf2\xfa\x18\xf4\xf9\xde\xaa\x3b\x33\x5e\x83\x3e\xf2\x2a\ -\xd9\xa7\x24\xf7\xbb\x90\xad\x21\xcf\x6a\xc0\xf5\x7c\x2c\xd7\xb2\ -\x13\x75\x31\x90\xcf\x42\x0a\x7a\xbb\xaa\x96\x01\x82\xae\x1f\xf6\ -\x1c\xba\x3b\xd6\xe0\x7e\x7b\xab\x29\x29\x4e\x67\x30\xe0\x7a\x16\ -\xb4\x95\xff\xbc\xd4\x47\x4f\x0e\x0a\x29\xe7\xc7\xaa\x5c\x0e\x08\ -\xba\x7e\x1c\x61\xab\xdc\xf7\xd4\xe0\x7e\x1b\x2b\xfb\x46\x19\x74\ -\x4d\x6b\xdb\xbe\x34\x96\xa6\x4e\xba\x66\x32\x0c\x3b\x0f\xb2\x30\ -\x82\x46\xd0\x55\x14\x56\x63\x5c\x76\x96\x8a\xdf\xef\x74\x16\xdf\ -\xc8\x22\x1a\x93\xae\x6b\x03\x79\x06\x13\xa8\x93\xd3\xf0\x45\x48\ -\x39\x5f\x55\xf5\xb2\x40\xd0\xf5\xc4\xbe\x24\x7b\x97\x90\xc3\x04\ -\xfb\xc8\x82\x97\x32\xde\xef\x97\x32\xe1\x69\xda\x75\x1d\x2a\xcf\ -\xe0\x5f\xd4\xc9\xff\xcf\x99\x11\x56\xbb\xf6\x40\xd0\x08\xba\x8a\ -\x6c\x6b\xab\xe8\xe7\x87\xf8\xbc\x8e\x7e\xf8\xa7\x4c\x2c\x96\x31\ -\xcf\xc1\x57\x06\x2f\xb9\x6e\x64\xfe\x7b\x98\x7a\x39\x55\xcc\x7a\ -\x10\xcb\x20\x68\x04\x5d\x55\x7a\x89\xb4\x74\x45\xbf\x39\xc2\xdf\ -\x35\xc2\xc4\xee\x96\x57\xf4\xb2\xdc\xef\x04\x03\x87\x38\xec\x5c\ -\x6b\x5b\xe1\x59\xd7\x3a\xd9\x57\x42\x38\xc3\xc8\xf9\xa6\xba\x94\ -\x0b\x82\xae\x2f\xf7\xa8\xe8\x89\xcd\x7b\x3a\x1a\x8a\x16\xf5\x22\ -\x25\x89\x5c\xf9\xd0\xf0\x6b\xbc\x5b\xca\xf4\xa8\x9a\xd6\xc7\x91\ -\xaa\x46\x89\xf8\x11\x34\x04\xd1\xd8\xf1\xe4\x37\x89\x15\x0e\xfb\ -\x77\x03\xd5\x94\xa4\x48\x9a\x6f\x25\x32\xc4\xe4\x7b\xbd\x59\x26\ -\x9e\x4c\x7f\x26\xaf\xab\xfc\xb3\xee\x99\xc0\xa9\x21\xe5\xfc\x93\ -\x2c\xa4\x42\xd0\x08\xba\xf2\x2c\x60\xab\xf8\xdb\xc6\x88\x04\x71\ -\xee\x0d\xf8\xa4\xe1\x6f\x0b\x9f\x95\x24\xef\xc4\xd8\x3a\x8d\xb1\ -\x5a\x9c\x11\x61\xdc\xf9\xb0\xba\xb5\x53\x04\x5d\x6f\x46\x49\xc5\ -\x1f\x9e\x20\x4c\xcc\x29\xe9\x39\x10\x74\x22\x9a\xe4\xcb\x4f\xef\ -\x84\xbe\x46\xc5\x17\x10\x1d\xaf\x8a\xdf\xec\x17\x41\x23\x68\x63\ -\x19\x28\x95\xff\xf1\x98\x7f\x3f\xc8\xa5\x21\xbd\x6b\x31\x13\x82\ -\x4e\xc4\x32\x6a\xda\xac\x83\x55\x61\x36\x19\x5e\xeb\x8c\x20\xe7\ -\x77\x0c\x59\x05\x8a\xa0\x21\x77\xbe\x95\x46\x10\x57\xaa\x87\xb9\ -\x34\xa8\x7d\x11\x74\x62\xfe\xac\xaa\x95\xec\x7f\x1e\x11\xf3\x17\ -\x2a\x7a\x4a\xdb\xfe\x75\x6d\x9f\x08\x1a\x4e\x97\x46\xb0\x43\x82\ -\x63\x5c\xe5\x68\x50\x37\x1b\x76\x8f\x7a\xdb\xab\xcf\x4b\xf8\x6c\ -\x7e\x2f\xe5\xf9\x72\x89\xeb\xd7\x06\xf2\x05\xf9\x83\x8a\x97\x6f\ -\x7c\xef\x3a\xb7\x4f\x04\x0d\x8d\xb1\xe4\xa4\xbb\x51\x7c\x6e\x6b\ -\x54\x6f\x1a\x76\x8f\xaa\x84\x3d\xe8\x06\xd7\x48\x99\x5e\x5b\xc2\ -\x6b\xbf\x4c\x25\xdb\xa9\xe7\xc8\xba\xb7\x4f\x04\x0d\x8d\x95\x76\ -\xbf\x24\x3c\xc6\x91\x8e\xc6\xb5\x90\x41\xf7\xa7\xe5\xfc\x7e\x89\ -\x9f\xcf\x79\x52\xa6\x17\x96\xe4\x7a\x75\x7e\x97\x3b\x13\xca\xf9\ -\x0e\xda\x25\x82\x86\x6e\xf6\x95\x46\xb1\x79\x82\x63\xf4\x73\x34\ -\xb0\xdf\x19\x74\x7f\xe3\x64\xf2\xb2\xcc\xcf\xa8\x5d\xca\xf5\x98\ -\x12\x5c\xeb\x7d\x09\xe5\xfc\x0f\xda\x24\x82\x86\xa9\x57\x08\xea\ -\xd0\xae\xb7\x12\x1e\xa7\xc3\xd6\xc8\x4e\x27\x17\x47\xea\x61\x69\ -\x2f\xc7\x8c\x5b\xcf\xfb\x3a\x93\xc8\xb9\x9d\xf6\x88\xa0\xc1\x7b\ -\xc1\xc0\x5a\x09\x8e\xf1\x98\xad\xa1\x3d\x6f\xd0\xbd\x8d\x2d\xf9\ -\x10\x47\x83\x19\x6c\x51\x37\xa6\x4a\xfa\xe4\x04\x72\xd6\x2b\x29\ -\x67\xa7\x2d\x22\x68\x98\x96\x15\xa4\x91\x3c\x9d\xc2\xc2\x17\xcd\ -\x8f\x06\xc5\x43\xeb\x1e\xf4\x7f\x2a\xf2\x9c\x96\xb7\x95\x71\x6f\ -\xc3\xae\x6d\x7a\xdb\x4a\xc8\xa8\x3c\xae\xaa\x9f\x9b\x1c\x41\x43\ -\xa2\xde\x59\x63\xf1\xc0\x62\x31\x8f\x71\xb6\xa3\xd1\x35\x19\x70\ -\x5f\x73\x59\xfc\x2a\x91\x25\x3d\x2b\xf2\xac\xd6\x97\xf2\xd5\x79\ -\xae\x97\x34\xe8\xba\x0e\x8a\x29\xe7\x1b\x68\x7f\x08\x1a\x82\x39\ -\x51\x1a\xcc\x15\x31\xff\x7e\x5b\x47\xc3\xdb\xd9\x90\x05\x12\x8d\ -\xeb\xa9\xd2\x6a\xb4\x21\x72\x4f\xe3\x0d\xba\xa6\x8f\x98\x10\x44\ -\xd0\x90\x4f\x02\xa5\x95\x63\x86\x57\x7d\x65\x3b\xc6\x7d\x06\xdc\ -\xd3\x9c\xb6\xeb\xe9\x5b\xb1\xe7\x75\xac\xdc\xd7\x43\x06\x5c\xcb\ -\xc6\x31\xe4\x7c\x04\x6d\x0e\x41\x43\x34\x9e\x53\xc9\x36\x94\xb5\ -\x2f\x4e\xf8\xc1\x80\x61\x05\x7b\x5e\x8b\x2a\x6e\xd0\x7a\x9c\xdc\ -\xdb\x03\x05\x5f\x47\xd4\xb8\xe7\x0d\x68\x6b\x08\x1a\xa2\xb3\xbb\ -\x9a\x92\x27\x7a\xf1\x18\x7f\xef\xdc\x91\xf9\xb0\x82\xef\x67\xf5\ -\x84\x6f\x05\x65\xa0\x11\x77\x7c\x56\xc1\x13\xcc\x61\x78\xd0\x62\ -\x55\xda\x19\x82\x86\x78\xe8\xc8\x8b\x89\xd2\x98\x4e\x8e\x19\x53\ -\x3d\xde\xd6\x20\xbf\x2e\xf8\x7e\x56\xb1\x5d\xcb\x1e\x15\x7e\x6e\ -\x8f\xc8\x3d\x1e\x52\xc0\xb9\xdf\x0c\x29\xe7\x1b\x69\x5f\x08\x1a\ -\x92\xf3\xb6\x34\x28\x1d\x32\x35\x63\x8c\xbf\xff\x93\xa3\x61\x6e\ -\x58\xe0\xbd\x6c\x6e\xbb\x8e\x3b\x2b\xbe\xd8\xe8\x43\xb9\xcf\x3f\ -\xe6\x78\xde\xad\x19\x6f\x46\xd0\x90\x2f\x0f\xd8\x1a\xd6\x5e\x29\ -\xf4\xaa\x46\x16\x78\x2f\x9b\xda\xae\x63\x7c\xc5\x9f\x5b\x1f\xd5\ -\xbd\x41\x6e\x57\x8e\xc3\x08\xcf\x07\x88\xf9\x67\x8b\xb5\x69\x53\ -\x08\x1a\xd2\xe3\x14\xc7\xea\xae\xa4\x62\x2c\x32\x37\xc7\x11\x8e\ -\xeb\xa8\xba\x2c\x56\xb7\x2d\x14\x5a\x21\xe3\x73\xfd\x39\x40\xce\ -\x7a\x71\xd0\xb2\xb4\x27\x04\x0d\xe9\xb2\x8d\xa3\xa1\x0d\x4c\x29\ -\x2e\xb6\x88\xc6\xda\xe2\xb8\x86\x6b\x6a\xf0\xfc\x06\xd8\xee\x37\ -\xab\x73\xe8\x6c\x85\x93\x7d\xe4\xac\xdf\xa0\x66\xa6\x2d\x21\x68\ -\xc8\x76\x58\xa0\x4b\xe2\x6d\xe3\x1c\xe7\x40\xc7\x71\x8a\x08\x73\ -\xbb\xdb\x71\x0d\x93\x54\xf7\xb6\x4b\x55\x7f\x86\x87\xca\xfd\x3e\ -\x61\x31\x5d\x06\xc7\xbf\x35\x20\xa7\xc6\xac\xb4\x23\x04\x0d\xd9\ -\xb0\x95\xa3\xc1\x9d\x9c\xe0\x58\x1f\xa8\x62\x77\xfd\x7e\xc6\x45\ -\x20\xdb\xd6\xe4\x39\xee\x21\xf7\xfb\x56\xc6\xf5\xc3\xce\x64\x72\ -\x6a\x20\x68\xc8\x96\x8d\x1c\x8d\xee\x94\x04\xc7\x6a\xe4\x9a\x1e\ -\x5e\xc0\x7d\x68\x51\x7c\xea\x22\x91\xab\x6b\xf4\x2c\x95\xdc\xf3\ -\x05\x29\x1d\xaf\x97\x2d\x0c\xd3\x8d\x75\x68\x3f\x08\x1a\xb2\x65\ -\x1f\x47\xa3\xdb\x2d\xc1\xb1\x36\x94\x63\xac\x5b\x50\x54\x83\x9b\ -\x44\x74\xf2\xa4\xf9\x6b\xf4\x3c\x2f\x92\xfb\xbe\x2c\x85\x63\x8d\ -\xf4\x91\xf3\x81\xb4\x1d\x04\x0d\xd9\x73\xa5\xa3\xe1\x2d\x96\xe0\ -\x58\x3b\x67\x3c\x59\xe5\xc7\x1a\xb2\x22\xd2\x4d\x26\x97\xd7\xec\ -\x99\xbe\xaf\x92\xef\xb8\xbe\x87\x8f\x9c\xff\x4b\xbb\x41\xd0\x90\ -\x0f\xaf\xdb\x1a\x5e\xd2\xad\xa2\x74\x2a\xc9\x17\x0b\xb8\x07\x9d\ -\xf8\xfd\xe5\x80\x30\xb0\xe5\x6b\xf4\x4c\xf5\xdb\xc4\xd3\x72\xdf\ -\xfb\xc5\xf8\xfb\xa0\x64\x48\x6b\xd1\x6e\x10\x34\xe4\x33\x6e\xfb\ -\x8b\xad\xe1\xdd\x9e\xf0\x78\x7a\x3f\xc0\x4b\x0b\xb8\x8f\xd6\x10\ -\xab\xdb\xee\xaa\xd9\xb3\xed\x69\x7b\xb6\x9b\x44\xfc\xbb\xcf\x7d\ -\xca\xf1\x1e\xda\x0d\x82\x86\x7c\x38\xd5\xd1\xf8\x0e\x48\x70\xac\ -\x05\x0a\xca\x81\x71\x58\xc8\xe5\xc7\x3a\xe2\x60\x99\x9a\x3d\xdf\ -\x01\x36\x49\xf7\x0b\xf9\x37\xcb\x05\x94\xe3\xea\xb4\x1b\x04\x0d\ -\xf9\xf4\x9e\x7f\xb2\x35\x3c\xfd\xef\x24\xbb\xa2\x9c\x29\xc7\x99\ -\x27\xc7\x7b\x18\xa2\xa2\xa5\xbd\xec\xa8\xe1\x73\x6e\x2c\x64\x99\ -\x10\x72\x7e\xc1\x2f\xdf\x06\x9b\xbc\x22\x68\xc8\x89\x66\x47\xe3\ -\x4b\x9a\x89\xee\xbb\x9c\xf3\x5f\xf4\x0a\x78\x15\xf7\xe2\x8c\x1a\ -\x3e\xeb\x5d\xe4\xde\x3f\x0b\xf1\xd9\xdf\xf9\x94\xdd\x55\xb4\x1b\ -\x04\x0d\xd9\x33\xa3\x08\xd5\x19\x8e\xf6\xac\xc5\x30\xd5\xbd\x21\ -\x68\x94\xe3\xcd\x21\xc7\x38\x2d\xa7\xeb\xd7\xd7\xf7\x92\x8a\xbf\ -\xa3\xf4\x62\x35\x7c\xe6\x47\xcb\xbd\x8f\x4a\xf0\x56\x72\x2a\x6d\ -\x07\x41\x43\xf6\x04\x25\x5d\xd7\x61\x54\x47\x46\xc8\xaf\x70\x8c\ -\xea\xde\xa9\x39\xaf\xeb\xbf\x25\x81\x9c\x35\xef\xd4\x7c\xce\x61\ -\x54\xcc\x21\x8e\xdd\x69\x3b\x08\x1a\xb2\xe7\xe2\x90\x22\xd3\xaf\ -\xc4\x0f\xc8\x38\x66\xd0\xc4\x52\x5e\xd7\xbe\x67\x42\x39\x37\x78\ -\xb4\xa6\xcf\xbe\xb1\x23\xcb\xf9\x1e\xbf\x5f\xd7\xa7\xcc\x06\xd2\ -\x76\x10\x34\x64\x3f\xbc\x31\x39\x86\xd0\x6e\xb3\x58\xaf\xe0\x6b\ -\xdf\x22\x25\x39\x37\xd8\xa2\xe6\x92\x76\xdb\x36\xab\x49\x79\xe7\ -\x7a\xee\x4f\xfb\x41\xd0\x90\xcf\x58\x64\x5c\x74\xbe\x87\x5d\x0b\ -\x1a\x96\x99\x9c\xb2\xa0\xf5\xae\xe4\xf3\xd6\xb4\x1e\xfc\x57\xca\ -\x60\x4f\x97\x2f\xf0\x2f\x5d\xca\x4a\x4f\x22\xcf\x40\xfb\x41\xd0\ -\x90\x6d\xef\xf9\xc7\x94\xe4\xf6\x94\xea\xce\x25\x9d\xc7\x75\xeb\ -\xdc\xd2\xdf\xa7\x2c\xe7\x06\x2f\xd4\xb4\x2e\xcc\x2b\x43\x58\xba\ -\x0c\xb6\x73\xfc\xee\x9f\x2e\xe5\xa4\x27\x95\x67\xa2\x0d\x21\x68\ -\xc8\x8e\xcd\x32\x10\x9c\x16\xb5\xde\x6d\x23\xab\xbc\xcb\x2b\x66\ -\x28\xe7\x06\xdb\xd4\xb4\x3e\xcc\x6f\x2b\x03\x7b\x82\xab\x23\x5d\ -\xca\xe8\x1b\x45\x52\x7e\x04\x0d\x99\x72\x6b\x86\x92\xd3\x9b\xce\ -\xb6\x48\x1e\x88\x34\x7b\xce\x3f\x64\x2c\x67\xcd\xa7\x35\xae\x13\ -\xeb\xdb\xc2\x2c\x17\x95\x9f\xad\xe4\x31\xa9\x3a\x1d\x6d\x08\x41\ -\x43\x36\xf4\xce\x41\x74\x8d\x57\xe1\xf3\x54\xf2\xfd\x00\x77\xcc\ -\x49\xce\x0d\xae\xac\x71\xdd\x68\xec\x86\xfe\xad\x9a\xb2\xb3\xfb\ -\x24\x47\xf9\xdc\x4b\x1b\x42\xd0\x90\x1d\x97\xe7\x28\xbb\x06\x6f\ -\xc9\x12\xf0\x7e\x11\xaf\xf5\xc2\x02\xae\xb5\x4b\x86\x80\xea\x5a\ -\x3f\xf6\x96\x32\x78\xcd\xa3\xbe\x3c\x4e\x1b\x42\xd0\x90\x0d\x73\ -\xba\xf4\x88\xf2\x46\x6f\x47\x75\xb8\xc5\x6a\x01\x91\x1a\xed\x05\ -\x5e\xe3\x53\x35\xaf\x27\x2d\xb6\xf0\xbb\x7d\x1d\x65\x73\x31\xed\ -\x08\x41\x43\x36\xfc\xad\x60\x39\x3b\x79\x4f\x84\xad\xc7\xc4\x0f\ -\x16\x46\x1a\x72\x6d\xbb\xd5\xbc\xae\x9c\x2b\xe5\x30\xde\x51\x2e\ -\x87\xd2\x8e\x10\x34\x64\xc3\x4b\x86\x09\xda\x64\xea\xb2\x13\xb8\ -\x1f\x8f\xa8\xfa\x6e\xbe\x8b\xa0\x79\x18\xa5\x5e\x7d\x57\x07\x6e\ -\xa5\xde\x8c\x7e\xc8\x51\x26\x8b\x50\x26\x08\x1a\xd2\xe7\x53\x84\ -\x1b\x8b\xbe\xd4\x9d\xff\xcb\xd7\xa1\xa3\x72\x5e\xa5\x2c\x10\x34\ -\xa4\xcf\x3e\x3e\x02\xd2\x1b\xac\x8e\x51\xdd\xc9\x90\xf4\x5e\x82\ -\x97\x3a\xb8\x46\x96\x75\x3f\x9f\x73\xb8\x9b\x29\xbc\x48\xfd\xf9\ -\xff\xe1\x99\xf3\x52\x0e\x08\x1a\xd2\x67\xac\xcb\x62\x92\xab\x64\ -\x22\x6c\xe1\x08\xc7\x99\x47\x16\x34\x9c\x2a\x13\x7c\x75\x91\xf4\ -\x70\xea\x10\x20\x68\xc8\x82\x75\x5c\x84\xa3\x77\xf0\x1e\x90\xc2\ -\xb1\x37\xb6\xb8\xd1\x96\xcb\xa1\xca\xcc\x49\x5d\x02\x04\x0d\x69\ -\xf3\x61\x40\xa4\x82\x1e\x5f\x4c\xba\x01\x68\x2f\xe9\x8d\x3f\x54\ -\x61\x41\x3f\x49\x5d\x02\x04\x0d\x69\x72\xa2\x72\xdf\x45\x44\x8f\ -\x39\xff\xe4\xb2\x84\x77\xab\x14\xce\xa9\x53\x90\xbe\x52\x51\x49\ -\x9f\x47\x9d\x02\x04\x0d\x59\xe6\xdc\x58\x43\x7e\xaf\xa3\x13\x56\ -\xb1\x18\x6a\x71\xb7\xed\xf7\x7a\x03\xd6\xeb\x53\x90\xb5\xce\x6c\ -\xd7\x51\x41\x49\x6f\x4e\xdd\x02\x04\x0d\x49\xf1\xda\xce\x6a\x63\ -\x8f\xcf\x2f\x6f\x71\x91\xe3\xb3\xed\xb2\x72\x6c\xbe\x04\x43\x1f\ -\x17\x57\x4c\xd0\x5f\xcb\x64\x29\x75\x0c\x10\x34\xc4\x62\x3b\x0f\ -\xb9\x8c\x0f\x11\xd7\x3b\xb7\xc5\xfe\xaa\x3b\xad\xa4\xfd\x6f\x1f\ -\x90\xa5\xe2\x71\xf6\xa3\x1b\x6c\xf1\x58\x85\x24\xfd\x8a\x7c\xf9\ -\x50\xd7\x00\x41\x43\x24\xe6\x52\xfe\xb9\x9a\xa3\xe6\x08\xbe\xca\ -\xe5\x38\x7a\xc1\x82\x4e\xa4\xb3\x65\xc4\xe3\x5d\x55\x21\x49\x1f\ -\x4b\x5d\x03\x04\x0d\x51\xf9\xbb\x8f\x54\x74\x32\xf6\x27\x2c\x0e\ -\x88\xf8\x9a\xbe\x8c\xc5\x11\x32\xb9\xe8\x3c\xa6\x1e\x67\xbe\x49\ -\x62\x85\x87\xc9\xb8\x76\xd0\x92\xf3\x0f\x2a\x20\xe8\xaf\x12\x0c\ -\xfd\x00\x20\xe8\x1a\xb2\x62\x04\xc1\x8c\xb3\x38\x29\xc6\x78\xea\ -\x20\x59\x55\xe8\x77\xec\x8f\x64\x48\xe4\x2c\x91\xb6\x0e\xe3\x5b\ -\xc9\x76\x8c\x05\x2c\x46\x55\x40\xd2\x8f\x50\xe7\x00\x41\x43\x18\ -\xf4\x36\x44\xff\x89\x21\x19\x2d\x6a\x9d\x4c\x7f\xcd\x18\xa2\xbe\ -\x43\x75\xef\x51\x17\xf6\x5c\x3a\x26\x5b\xef\x22\x3d\xba\x42\xa1\ -\x78\x43\xa9\x7b\x80\xa0\x21\x8f\x5c\xcf\xba\x57\xbb\x69\xc4\xf3\ -\xea\x15\x76\xa7\xa8\xfa\x26\x53\xfa\x9a\xba\x07\x08\x1a\xfc\xd0\ -\xfb\xc7\xa5\x99\xc8\x48\x8b\x7a\x6b\x15\x6d\xf7\xe6\x65\x64\x61\ -\xcc\x17\x35\x94\xf4\x7e\xd4\x41\x40\xd0\xe0\xc5\x83\x19\x89\x47\ -\xe7\xd8\xb8\x24\xe2\x64\xd8\x2c\x16\x7b\xa9\xe2\xb7\xd6\xca\x9b\ -\x26\xea\x21\x20\x68\x70\xb2\x47\x0e\xf2\x99\xa0\xba\x93\x22\xad\ -\x1a\xe1\xba\x16\xaf\x58\x58\x5d\x10\x3a\x84\x71\x06\xea\x23\x20\ -\x68\x68\xb0\x98\x84\xce\xe5\x29\x22\xbd\x6d\xd6\xa9\x11\x7a\x8c\ -\x2b\x5b\xb4\xd6\x40\xd0\x37\x23\x68\x40\xd0\x60\x67\x40\xc1\x52\ -\xd2\xab\x0d\x77\x0d\xb9\xaa\x6e\xcf\x0a\xcb\xf9\x48\xea\x22\x20\ -\x68\x70\x63\x6f\x03\x04\xa5\xb7\xd3\xba\xce\xa2\x59\x4d\x49\xc6\ -\xe4\xc6\xb2\xb2\xa8\x85\x64\xfe\x00\x08\xba\x36\xac\x60\xf1\xa3\ -\x41\xd2\xd2\x2b\x0e\xcf\xb0\x18\xe2\x91\xfb\x63\x67\x59\x89\x47\ -\xcf\x19\x00\x41\xd7\x02\x9d\xc4\xa8\xd3\x40\x89\xfd\x20\xcb\xcb\ -\x2f\x95\x55\x85\x3a\x7f\xc7\xa2\x16\x47\x5b\x4c\x2c\xb1\x9c\xff\ -\x46\x9d\x03\x04\x0d\x51\x58\xa4\x44\x3d\x53\xfd\x65\xf2\x73\x49\ -\xe5\xbc\x11\x75\x0d\x10\x34\xc4\x41\xe7\xbd\xf8\xa9\xc6\x2b\xfb\ -\xb2\xe6\x0f\xd4\x31\x40\xd0\x90\x84\x65\x54\x3d\x36\x72\xcd\x9b\ -\xcd\xa8\x5b\x80\xa0\x21\x0d\x96\x46\xa8\x6c\x75\x05\x08\x1a\x41\ -\x9b\x3d\xdc\x41\x4f\x3a\x39\xdb\x53\x97\x00\x41\x43\x16\x2c\x84\ -\x60\x99\x10\x04\x04\x8d\xa0\xcd\x45\x6f\x5d\xf5\x39\xb2\x8d\xcc\ -\xce\xd4\x1d\x40\xd0\x90\x57\x4f\x7a\x02\xd2\xa5\xe7\x0c\x08\x1a\ -\x41\x9b\xdb\x93\xfe\x16\xf9\x06\xb2\x2b\x75\x05\x10\x34\x0f\xa3\ -\x08\xf4\x2a\xbe\xaf\x91\xb0\x27\x1b\x53\x47\x00\x41\x23\xe8\x22\ -\x59\xa3\xc4\xab\xf8\xb2\x64\x47\xea\x06\x20\x68\x04\x6d\x02\xfd\ -\x98\x38\x9c\x8a\x2d\xa8\x13\x80\xa0\x11\xb4\x69\x2b\x0e\x91\x73\ -\x77\x02\x27\xea\x03\x20\x68\x04\x6d\x1c\xfd\x6b\xde\x93\xde\x81\ -\x3a\x00\x08\x1a\x41\x9b\xcc\xc2\x4c\x08\x02\x20\x68\x04\x6d\x2e\ -\x1b\x58\x7c\x49\x28\x1d\x00\x82\x46\xd0\xe6\xf6\xa4\x27\xd0\x73\ -\x06\x40\xd0\x3c\x0c\x33\x19\x50\xf1\x9e\xf4\x76\x3c\x63\x40\xd0\ -\x08\xba\xec\x3d\xe9\x6f\x2a\x28\xe7\x4d\x78\xb6\x80\xa0\x11\x74\ -\x55\x16\xb3\x7c\x57\x21\x39\x6f\xcb\x33\x05\x04\x8d\xa0\xab\xc4\ -\xe2\x16\x5f\x54\x40\xce\x83\x78\x96\x80\xa0\x11\x74\x55\x57\x1c\ -\xfe\xc2\x22\x14\x00\x04\x0d\x66\xb2\x5c\x49\x27\x0e\xb7\xe2\xd9\ -\x01\x82\x46\xd0\x75\x60\x11\x8b\xdf\x98\x10\x04\x40\xd0\x60\xee\ -\xc4\x61\x19\x7a\xd2\x4c\x08\x02\x82\x46\xd0\xb5\xed\x49\x4f\x64\ -\x42\x10\x00\x41\x83\x99\xac\x65\x31\xd6\x40\x39\xff\x9e\x67\x03\ -\x08\x1a\x41\x43\xf7\xce\x2c\x9d\xf4\x9c\x01\x10\x34\x98\x89\x4e\ -\x55\x3a\x8e\x9e\x33\x00\x82\x06\x33\x59\xa2\xe0\x89\xc3\xc1\x3c\ -\x03\x40\xd0\x08\x1a\xfc\xe3\xa4\x7f\x2d\x40\xce\x43\x28\x7b\x40\ -\xd0\x08\x1a\x82\x59\x3e\xe7\x89\x43\xe4\x0c\x08\x1a\x41\x43\xc4\ -\x89\xc3\x3c\xe4\xbc\x29\x65\x0d\x08\x1a\x41\x43\xbc\x89\xc3\x2c\ -\x7b\xd2\xe4\x73\x06\x04\x8d\xa0\x21\x01\x8b\x59\x4c\xa2\xe7\x0c\ -\x80\xa0\xc1\x4c\xd6\xb1\xf8\x2a\x25\x31\x7f\x6c\x31\x90\x32\x05\ -\x04\x8d\xa0\x21\xdd\x9e\xf4\xb7\x09\xe5\xfc\x99\xc5\xbc\x94\x25\ -\x20\x68\x04\x0d\xe9\xb3\xa6\xc5\xf7\x31\xe5\xfc\xb5\xc5\x0a\x94\ -\x21\x20\x68\x04\x0d\xd9\xd1\x64\xf1\x7e\x44\x39\xff\xcf\x62\x41\ -\xca\x0e\x10\x34\x82\x86\xec\x99\xc3\xe2\x83\x08\x3d\xe7\xc5\x28\ -\x33\x40\xd0\x08\x1a\xf2\x63\x66\x8b\x47\x03\xe4\x7c\xaf\x45\x6f\ -\xca\x0a\x10\x34\x82\x86\x62\xf8\xaf\x87\x9c\x5f\xa7\x6c\x00\x41\ -\x23\x68\x28\x96\xbe\x16\xa3\x1c\x72\xbe\xdf\x62\x4e\xca\x06\x10\ -\x34\x82\x06\x33\x78\x4b\xe4\x7c\x1d\x65\x01\x60\x98\xa0\x01\x00\ -\x20\x5d\x28\x04\x00\x00\x04\x0d\x00\x00\x08\x1a\x00\x00\x41\x03\ -\x00\x00\x82\x06\x00\x40\xd0\x00\x00\x80\xa0\x01\x00\x00\x41\x03\ -\x00\x20\x68\x00\x00\x40\xd0\x00\x00\x08\x3a\x7e\x7e\x8e\x4e\x97\ -\x2c\x67\x2d\x29\xaf\x77\xef\xf4\xc8\xa6\xd6\x9a\x70\x37\xeb\xf6\ -\x0c\x77\xb3\x6e\xa0\xaf\x7d\x84\x45\x1f\xc3\x72\x08\x0c\xb3\xe8\ -\xc8\xf0\xbe\xf5\xb1\x07\x27\xb8\xbe\x56\x9f\x63\x37\x1b\xfe\xdc\ -\xf5\xbd\x0f\x4d\xb9\xbe\x97\xa1\x4d\xf9\xd1\xe2\x53\x5e\x6d\x19\ -\xd6\xf3\x4e\x9f\xf3\x56\x3f\x17\x87\x47\x01\x74\x18\x5e\x99\x9a\ -\x73\x10\xb3\x5b\x99\x98\x22\xe9\xb6\x1c\xef\xbb\xd9\x20\x41\xe7\ -\xfd\xdc\x5b\x53\xac\xef\x1d\x25\x17\x74\x5b\x40\xdb\x40\xd0\x39\ -\x0a\xba\x4b\x7a\x2a\x26\x56\xa6\xa6\x02\xe4\x9c\x47\x4f\xc1\xe4\ -\x2f\xa7\xc1\x06\x08\xba\xa8\xe7\x3e\x2c\xc5\xfa\xde\xbf\xc4\x82\ -\x0e\x7a\x5b\x43\xd0\x39\x0b\x7a\x84\xa1\x95\xa9\xad\x40\x41\xa7\ -\xdd\xc8\xd2\xae\xb0\x26\x7d\x31\xa5\x2d\xe8\xa2\x9e\x7b\x7b\x8a\ -\xcf\x68\x44\x89\x05\x9d\xc5\x97\x38\x82\x4e\x20\xe8\x4e\x43\x2b\ -\x53\x47\xc1\x82\x6e\x2e\x50\xce\xfd\x0b\xba\xe7\x4e\x03\x04\x5d\ -\xe4\x73\x4f\xab\xbe\x77\x96\x54\xd0\x83\x0b\x6c\x17\x08\xda\xa7\ -\x00\x86\x1a\x58\x99\x3a\x0b\x16\x74\x6b\x81\x82\x1e\x5c\x22\x49\ -\xa5\x2d\xe8\xce\x0a\x08\xda\xd4\x36\x95\xc6\xb0\x5a\x2b\x82\xce\ -\x5f\xd0\x6d\x25\x13\x74\x1e\x15\xd2\x54\x41\xb7\x1b\xd6\x18\xf2\ -\x14\xb4\x69\x22\x28\x5b\x9b\x4a\xf2\x2c\xd3\xac\x7f\x08\x3a\xa2\ -\xa0\xbb\x10\x34\x82\x46\xd0\xa9\xf7\xf6\xcb\x26\xe8\x30\x61\x8d\ -\x9d\x08\xba\x18\x41\x37\x23\x68\x04\x8d\xa0\x53\x15\x74\x73\xc9\ -\x04\x1d\x76\x78\xa9\x0f\x82\xce\x5f\xd0\xed\x08\x1a\x41\x23\xe8\ -\x54\x85\xd6\x5e\x22\x41\xf7\x89\x30\x56\x3f\x14\x41\xe7\x2f\xe8\ -\x2e\x89\x41\x45\xd0\x08\x1a\x41\xa7\xd7\xe3\x6c\x2a\x89\xa0\x87\ -\x46\x10\x74\x0b\x82\x2e\x46\xd0\x2d\x08\x1a\x41\x23\xe8\x54\x05\ -\xdd\x52\x12\x41\xb7\x14\xbc\x90\x0b\x41\x87\x5c\xe6\x8c\xa0\x11\ -\x34\x82\x4e\x4f\xd0\x1d\x25\x11\x74\x94\x05\x42\x1d\x08\xba\x18\ -\x41\x27\x5d\x41\x87\xa0\x11\x34\x82\x36\xb7\x4d\x45\x5d\x20\xd4\ -\xe1\x71\xfe\x4e\x04\x5d\x9c\xa0\x47\x20\x68\x04\x8d\xa0\x53\x15\ -\xf4\x88\x12\x08\xda\x6b\x28\xa3\x3d\xa7\x54\x08\x08\x3a\xc3\xe5\ -\xbe\x08\x1a\x41\x23\x68\xf3\xdb\x54\xd4\xd4\x02\x23\x7c\x9e\xef\ -\x30\x04\x5d\x8c\xa0\x93\x84\xd1\x20\x68\x04\x8d\xa0\xcd\x6d\x53\ -\x7e\x39\xc7\xbd\x9e\x5f\x4b\x06\x6f\x05\x08\x3a\xa1\xa0\xdb\x10\ -\x34\x82\x46\xd0\xa9\x0a\xba\xcd\x60\x41\x7b\x3d\xc3\xc1\x3e\xe1\ -\x77\xed\x08\xba\x38\x41\x77\x21\x68\x04\x8d\xa0\x53\x4f\xec\x64\ -\xaa\xa0\xdb\x7d\xae\xb7\x4f\x4e\x91\x1c\x08\x3a\x62\x65\x6a\x46\ -\xd0\x08\x1a\x41\xa7\x2a\xe8\x66\x43\x05\xdd\x11\x20\xe0\xce\x8c\ -\xdb\x21\x82\x56\xfe\xb9\x6b\xb3\x4e\x60\x8e\xa0\x11\x74\x9d\x04\ -\x6d\x6a\x9b\x8a\x12\xc1\xd1\x1e\xa2\x87\x3d\x18\x41\x67\x2f\xe8\ -\xd6\x14\x97\xa9\x22\xe8\xec\x13\xf6\x77\x20\x68\xe3\x05\x6d\x6a\ -\x9b\x8a\xd2\x19\x68\x0d\xb1\x88\xa5\x19\x41\xe7\x23\xe8\xf6\x94\ -\x96\xa9\x22\xe8\x7c\x2a\x6c\x2b\x82\x36\x5e\xd0\x26\xb6\xa9\x28\ -\x4b\xbc\x9b\x43\x7c\xa6\x15\x41\xe7\x23\xe8\x61\x29\xf5\xd6\x10\ -\x74\x7e\x4b\x6f\x9b\x0b\xbe\xbe\xb2\x0a\x3a\x8f\x2f\x51\x53\xdb\ -\x54\xd4\x08\x8e\xa0\x30\xbc\x76\x04\x9d\x8f\xa0\xfd\x7e\xdf\x1f\ -\x41\x1b\x37\xcc\x91\x65\xda\x47\x04\x9d\x5e\x7d\x37\xad\x4d\x85\ -\x9d\x20\x74\x96\x75\x53\x06\x0b\x70\x10\x74\x44\x41\xb7\xa5\x10\ -\x90\x8e\xa0\xd3\x65\x44\x88\x15\x6a\x4d\x08\xda\x58\x41\x9b\xd6\ -\xa6\xc2\x1e\xbf\x33\xc2\x75\x34\x21\xe8\x7c\x04\x3d\x38\x85\x6f\ -\x49\x04\x9d\xff\x36\x44\x1d\x2a\x9b\x1d\x2e\x10\x74\xf2\xfa\x6e\ -\x5a\x9b\xea\x11\xb2\x67\xdc\x1e\xa1\xa7\x3d\x0c\x41\xe7\x23\x68\ -\xbf\x87\x30\x14\x41\x17\x46\x1f\x9f\xe7\x92\xf5\x46\x9e\x08\x3a\ -\x79\x7d\x37\xa9\x4d\x85\x5d\xe2\xdd\x1a\x61\x4e\xa4\x05\x41\xe7\ -\x27\xe8\x11\x09\x97\xa9\x22\xe8\x6c\x68\x0a\xb1\x28\xa2\x15\x41\ -\x1b\x29\x68\x93\xda\x54\xd8\x21\xb4\xe6\x08\x9f\x6d\x43\xd0\xf9\ -\x09\xba\x29\x61\x21\x21\xe8\xec\x08\xb3\x25\x51\x33\x82\x36\x4e\ -\xd0\x26\xb5\xa9\xb0\xbd\xe2\xc1\x11\x7a\xdb\x1d\x08\x3a\x3f\x41\ -\xfb\x8d\x79\x36\x23\xe8\xc2\x69\x36\x30\xb2\x03\x41\x97\xa7\x4d\ -\xc5\x89\xe0\x08\x13\x55\x84\xa0\x73\x14\x74\x4b\x82\x71\x4e\x04\ -\x5d\xac\x10\x8b\x88\xec\x40\xd0\xe5\x69\x53\x61\x96\x78\x77\x46\ -\xfc\x7c\x5a\x4b\xbe\x11\x74\xc8\x07\xdd\x27\xc1\x32\x55\x04\x5d\ -\xbf\xc8\x0e\x04\x5d\x9e\x36\x15\x66\x89\x77\x7b\x8c\x1e\x77\x33\ -\x82\xce\x4f\xd0\x3d\x12\x2c\x53\x45\xd0\xf5\x8b\xec\x40\xd0\xe5\ -\x69\x53\x61\xea\x7e\x6b\x8c\x8e\x41\x2b\x82\xce\x57\xd0\x71\x27\ -\x04\x10\x74\xfd\x22\x3b\x10\x74\x79\xda\x54\x98\xe7\xd6\x12\xe3\ -\x6f\xda\x11\x74\xbe\x82\x8e\xbb\x4c\x15\x41\xd7\x2f\xb2\x03\x41\ -\x97\xa7\x4d\x85\xe9\x0d\x0f\x8d\xd1\x5e\x3a\x11\x74\xfe\x82\x8e\ -\xb3\x4c\x15\x41\xd7\x2f\xb2\x03\x41\x97\xa7\x4d\x85\x39\x6e\x9f\ -\x18\xe3\xd6\x41\x7f\x87\xa0\x33\x10\x74\xff\x18\xdf\x96\x08\xba\ -\x7e\x91\x1d\x08\xba\x3c\x6d\x2a\x8d\xe4\x47\x59\x75\x02\x10\x74\ -\x8c\x07\x1d\x75\x99\x2a\x82\xae\x5f\x64\x87\x69\x82\xee\x4a\x40\ -\x1e\xbb\x9d\x14\xd9\xa6\xd2\x58\x74\xd2\x99\xd1\x92\x6f\x04\x1d\ -\xe3\x41\x47\x5d\xde\x89\xa0\xeb\x17\xd9\x81\xa0\xcb\xd3\xa6\x82\ -\xe2\xb2\xdb\x12\x74\x04\xda\x10\x74\xfe\x82\x8e\xba\x4c\x15\x41\ -\xd7\x2f\xb2\x03\x41\x97\xa7\x4d\xa5\x91\xf8\xa8\x35\xa3\x25\xdf\ -\x08\x3a\xe6\x83\x8e\xb2\x4c\x15\x41\xd7\x2f\xb2\x03\x41\x97\xa7\ -\x4d\xa5\x91\x3a\x34\xab\x48\x0e\x04\x1d\xf3\x41\x37\x47\x78\x5d\ -\x46\xd0\xf5\x8b\xec\x40\xd0\xe5\x69\x53\x41\x65\x14\x66\x22\xd9\ -\x2f\x92\xa3\x3f\x82\xce\x5f\xd0\x51\x96\xa9\x22\xe8\xfa\x45\x76\ -\x20\xe8\xf2\xb4\xa9\xb4\x36\x11\xe8\x4a\xd0\x03\x47\xd0\x29\x0b\ -\x3a\xca\x98\x15\x82\xae\x5f\x64\x07\xbb\x7a\x97\xa7\x4d\xf9\xd5\ -\xf9\x8e\x14\xee\x7b\x04\x82\x2e\x46\xd0\x61\xc3\x72\x10\x74\xfd\ -\x22\x3b\x10\x74\x79\xda\x94\xdf\xf3\x6a\x4b\xe1\x8b\xbf\x1d\x41\ -\x17\x23\xe8\xb0\xcb\x54\x11\x74\xfd\x22\x3b\x10\x74\x79\xda\x94\ -\x9f\x5c\x47\xa4\xf0\xcc\x3b\x10\x74\x71\x82\x6e\x0d\xf1\x60\x11\ -\x74\xfd\x22\x3b\x10\x74\x79\xda\x94\xdf\xf1\xa2\x8c\x1f\xb7\x64\ -\xf0\x8c\x10\x74\xc2\x07\x1d\x66\x99\x2a\x82\x2e\x6f\x64\x47\x67\ -\xcc\xf1\x68\x04\x5d\x9e\x36\xd5\x27\xa5\x08\x0c\xbf\x2f\xfc\xc1\ -\x08\xba\x18\x41\x87\x59\xa6\x8a\xa0\xcb\x1d\xd9\xd1\x82\xa0\x73\ -\x15\x74\xde\x6d\x6a\x68\x4a\xf7\xde\x94\xc1\x9b\x18\x82\x4e\xe1\ -\x41\x07\x2d\x11\x45\xd0\xe5\x8e\xec\x68\x47\xd0\xb9\x0b\x3a\xcf\ -\x36\xd5\x92\xe2\xd8\x71\x5e\x43\x2f\x08\x3a\xa5\x6f\xce\x3e\x08\ -\xba\x34\x91\x1d\x9d\x29\xae\x06\x43\xd0\xe5\x69\x53\x6d\x29\xe6\ -\xd1\xe8\x48\x39\x92\x03\x41\xa7\xf4\xa0\xfd\x96\xa9\x22\xe8\x74\ -\x18\x9c\x61\x58\x5c\xda\x65\x8b\xa0\xcb\xd3\xa6\x3a\x52\x8c\x5f\ -\x6e\x4b\x79\xc9\x37\x82\x4e\xe9\x41\xfb\x2d\x53\x45\xd0\x08\x1a\ -\x41\x9b\xdb\xa6\xd2\x7c\x4e\x2d\x2a\xdd\xe4\xfd\x08\x3a\xa5\x07\ -\xdd\x27\x20\x12\x00\x41\x23\x68\x04\x6d\x5e\x9b\xea\x9f\x70\x19\ -\x7c\x14\x86\x21\xe8\xe2\x04\xed\xf7\x7a\xd3\x85\xa0\x11\x34\x82\ -\x36\xb2\x4d\x35\xe7\x28\xe8\x16\x04\x5d\xac\xa0\x87\x22\x68\x04\ -\x8d\xa0\x4b\xd5\xa6\x5a\x73\x14\x74\x1b\x82\x2e\x56\xd0\x41\x05\ -\x8a\xa0\x11\x34\x82\x36\xab\x4d\xb5\xe7\x28\xe8\x0e\x04\x5d\xbc\ -\xa0\x5b\x11\x34\x82\x46\xd0\xa5\x69\x53\x9d\x39\x0a\xba\x0b\x41\ -\x17\x2f\xe8\xfe\x08\x1a\x41\x23\xe8\xd2\xb4\xa9\xae\x9c\xe9\x8f\ -\xa0\x8b\x15\xb4\x5f\x5c\x25\x82\x46\xd0\x08\xda\x9c\x36\x35\x34\ -\xe5\x88\x8b\x30\xa1\x76\xcd\x08\xba\x78\x41\xb7\x20\x68\x04\x8d\ -\xa0\x8d\x6f\x53\x7e\xc7\x4c\xb2\xab\xce\xd0\x9c\x86\x60\x10\x74\ -\x4c\x9a\x10\x34\x82\x46\xd0\xc6\xb7\xa9\xd6\x94\x57\xfd\x85\x89\ -\xdf\x6e\x47\xd0\xc5\x0b\x3a\xec\xec\x30\x82\x46\xd0\x08\xba\xb8\ -\x36\xd5\x91\x62\xb4\x45\xd8\x32\xe8\x44\xd0\x66\x08\xba\x19\x41\ -\x23\x68\x04\x6d\x74\x9b\xea\x4c\x31\x5e\x39\xca\x97\x09\x82\x36\ -\x40\xd0\x7d\x10\x34\x82\x46\xd0\xc6\xb6\xa9\xfe\x29\xaf\xf8\x8b\ -\xf2\xfc\x87\x22\xe8\xe2\x05\x1d\x66\x99\x2a\x82\x46\xd0\x08\xba\ -\x98\x36\x35\x2c\xa3\x08\x8e\x30\x6d\xa8\x05\x41\x9b\x21\xe8\xa1\ -\x08\x1a\x41\x23\x68\x23\xdb\xd4\x88\x8c\x22\x38\xc2\xd4\xd5\x56\ -\x04\x6d\x86\xa0\x83\x0a\x18\x41\x23\x68\x04\x5d\x4c\x9b\x6a\xcf\ -\x28\x82\x23\xcc\x22\x98\x0e\x04\x6d\x8e\xa0\x47\x20\x68\x04\x8d\ -\xa0\x8d\x6b\x53\x59\x46\x70\xa4\x19\xc9\x81\xa0\x33\xae\x4c\xfd\ -\x73\x14\x74\x1e\x98\x2a\x68\xd3\x72\x28\xe4\x29\xe8\xb2\xe4\x8f\ -\x30\xa9\x4d\xa5\x99\x71\x2e\x4e\x24\x47\x93\x21\xcf\xbd\xb5\xee\ -\x82\xf6\xfb\xb6\x4e\x73\x7b\x9e\xbc\x68\x2e\x50\xd0\xfd\x0b\xba\ -\x67\x13\xf6\x24\xec\x40\xd0\xa9\xb5\xa9\xc1\x19\x47\x70\x84\xa9\ -\x03\xc3\x10\xb4\x39\x82\x6e\x49\xf1\x1c\x6d\x05\x0b\xba\x7f\x81\ -\x82\x2e\xaa\x27\xd9\x66\x80\xa0\x8b\x7a\xee\xed\x86\x0a\x3a\x49\ -\x9b\x6a\xce\x38\x82\x23\xcc\x79\x46\x20\x68\x73\x04\xdd\x94\xe2\ -\x39\x9a\x0a\x94\x73\x5b\xc1\x72\xce\x7b\x07\x8c\x24\x5f\x4a\x69\ -\x0b\xba\xa8\xe7\x3e\xcc\x50\x41\x27\x69\x53\x7e\xcf\xa6\x8f\xca\ -\x67\x48\xae\x0d\x41\x9b\x23\x68\xaf\xf1\xa8\xd6\x12\x49\xaa\x23\ -\xe5\xca\x9b\x65\x2c\xac\x09\x43\x3a\xad\x19\x1c\x33\xef\xe7\x9e\ -\x76\x82\x7d\x53\xda\x54\x1e\x11\x1c\x69\x45\x72\x20\xe8\x9c\x2a\ -\x53\x73\xca\xe7\xe8\xaf\xf2\xd9\x0d\xa2\x53\x5e\xc7\x4c\x91\xb3\ -\x7d\xa1\x41\x47\xc6\x5f\x48\x83\x33\x1a\x7f\x6c\x36\xfc\xb9\x77\ -\x44\x5c\xed\x56\x94\xa0\xe3\xb6\xa9\xce\x0c\x23\x81\xd2\x8e\xc2\ -\xa8\xbd\xa0\x01\x00\x6a\x0b\x82\x06\x00\x40\xd0\x08\x1a\x00\x00\ -\x41\x03\x00\x20\x68\x04\x0d\x00\x80\xa0\x01\x00\x10\x34\x82\x06\ -\x00\x40\xd0\x08\x1a\x00\x00\x41\x03\x00\x20\x68\x04\x0d\x00\x80\ -\xa0\x01\x00\x10\x34\x82\x06\x00\x40\xd0\x08\x1a\x00\x00\x41\x03\ -\x00\x20\x68\x04\x0d\x00\x80\xa0\x01\x00\x10\x34\x82\x06\x00\x40\ -\xd0\x00\x00\x08\x1a\x41\x03\x00\x20\x68\x04\x0d\x00\x80\xa0\x01\ -\x00\x10\x34\x82\x06\x00\x40\xd0\x00\x00\x08\x1a\x41\x03\x00\x20\ -\x68\x04\x0d\x00\x80\xa0\x01\x00\x10\x34\x82\x06\x00\x40\xd0\x00\ -\x00\x08\x1a\x41\x03\x00\x20\x68\x1e\x10\x00\x20\x68\x04\x0d\x00\ -\x80\xa0\x11\x34\x00\x00\x82\x06\x00\x40\xd0\x08\x1a\x00\x00\x41\ -\x03\x00\x20\x68\x04\x0d\x00\x80\xa0\x11\x34\x00\x00\x82\x06\x00\ -\x40\xd0\x08\x1a\x00\x00\x41\x03\x00\x20\x68\x04\x0d\x00\x80\xa0\ -\x11\x34\x00\x20\x68\x04\x0d\x00\x80\xa0\x11\x34\x00\x00\x82\xfe\ -\xff\x0c\xb3\xe8\xb0\xe8\xca\x08\x7d\xec\xc1\x31\xaf\xad\x33\xc3\ -\xeb\x6a\x90\xd6\xf5\xe4\x59\x29\x4d\x2b\x97\x06\xfd\x2d\xda\x33\ -\xbe\xae\x76\x39\x4f\xd0\xb5\x0c\xce\xa1\x8c\xbc\x68\xad\x50\xbd\ -\x8e\x83\x3e\x5e\x9b\xc5\x50\x04\x9d\xec\xe6\xda\x72\xac\xb4\xcd\ -\x08\xba\xd2\x82\x6e\xce\x59\x82\xc3\x10\xb4\xb1\x82\x76\xd2\x82\ -\xa0\xcd\x6f\x50\x5d\x31\x7a\xd2\x08\xba\x1c\xe5\xd2\x54\x90\x08\ -\x9b\x10\x74\x29\x04\xdd\xe8\x55\x0f\x46\xd0\x66\x3d\x14\x27\x6d\ -\x08\xba\x92\x82\x6e\x2b\x48\x84\x6d\x08\xba\x34\x82\x0e\xfb\xe6\ -\x83\xa0\x65\x0c\xaf\x88\x8a\xdb\x89\xa0\x2b\x29\xe8\x8e\x82\xea\ -\x53\x07\x82\x2e\x9d\xa0\xbb\xd2\x1e\x9b\xae\xa2\xa0\x8b\xac\xbc\ -\x08\xba\x7a\x82\xee\x34\xf0\x0b\x1f\x41\x9b\xfb\xfc\x3a\x03\x86\ -\xa7\x10\x74\xc0\x2c\x79\x96\x02\x29\xa3\x10\xcb\x24\xe8\x2a\x96\ -\x4b\x5a\x6f\x64\x45\xb6\x89\xaa\x3f\xbf\x3e\x52\x86\x23\x42\x0a\ -\xbf\x03\x41\x23\x68\x04\x8d\xa0\x11\x74\x31\xd7\x33\x22\xaf\xf1\ -\x68\x04\x8d\xa0\x11\x34\x82\xe6\xf9\xa5\x1f\x29\xd6\x8e\xa0\x11\ -\x34\x82\x46\xd0\x08\xba\xb8\xeb\x69\x4d\x10\x2a\x89\xa0\x11\x34\ -\x82\x46\xd0\x08\x3a\xc3\xeb\xe9\x13\x70\xfc\x66\x04\x8d\xa0\x11\ -\x34\x82\x46\xd0\xc5\x5d\x4f\x5b\x82\x88\x17\x04\x8d\xa0\x11\x34\ -\x82\x46\xd0\x19\x5e\x4f\x73\x96\x65\x8b\xa0\x11\x34\x82\x46\xd0\ -\x3c\x3f\x43\xcb\x16\x41\x23\x68\x04\x8d\xa0\x79\x7e\x08\x1a\x41\ -\x23\x68\xca\x05\x41\x23\x68\x04\x8d\xa0\x11\x34\x82\x46\xd0\x08\ -\x1a\x41\x23\x68\x04\x8d\xa0\x11\x34\x82\x46\xd0\x08\x1a\x41\x23\ -\x68\x04\x8d\xa0\x11\x34\x82\x46\xd0\x3c\x3f\x04\x8d\xa0\x11\x34\ -\xe5\x82\xa0\x11\x34\x09\xfb\x55\x7a\x69\x00\x11\x34\x82\x46\xd0\ -\x3c\x3f\x04\x9d\xd1\x43\x69\x45\xd0\x08\x1a\x41\x23\x68\x04\x5d\ -\x9c\xa0\x83\xf6\x91\x6b\x2e\xa8\xb2\x20\x68\xca\xa5\x08\x10\x34\ -\x82\x36\x4a\xd0\x61\xf6\x25\x1c\x8a\xa0\x11\x34\x82\x46\xd0\x08\ -\x3a\x7f\x41\x6b\x82\x76\x3d\x48\x75\xef\x30\x2a\x32\xe5\x82\xa0\ -\x11\x34\x82\x8e\x46\xbb\x0a\xde\x3b\xac\x0f\x0d\x1f\x41\x23\x68\ -\x9e\x1f\x82\xce\x5f\xd0\x7d\x44\xc2\x5d\x39\x56\x50\x2a\x32\xe5\ -\x82\xa0\x11\x34\x82\x0e\x49\x93\x0a\xde\x89\xb7\x95\x86\x8f\xa0\ -\x11\x34\xcf\x0f\x41\xe7\x2f\xe8\x1e\x32\x21\x18\x34\x69\xd8\x8c\ -\x88\x10\x34\x82\xe6\xf9\x21\xe8\xfc\x05\xdd\x43\x05\xef\xc2\x9b\ -\x77\x64\x07\x22\xa2\x5c\x10\x34\x82\x46\xd0\x36\x82\x76\xe1\xcd\ -\x33\xb2\x03\x11\x51\x2e\x08\x1a\x41\x23\x68\x43\x23\x3b\x10\x11\ -\xe5\x82\xa0\x11\x34\x82\x36\x34\xb2\x03\x11\x51\x2e\x08\x1a\x41\ -\x23\x68\x43\x23\x3b\x82\xce\x9f\x84\xe6\x8a\x0a\xba\xce\xe5\x52\ -\x05\x41\x57\xf1\xf9\x21\xe8\x8c\x28\x3a\xb2\x03\x11\x51\x2e\x08\ -\x1a\x41\x23\x68\x43\x23\x3b\x10\x11\xe5\x82\xa0\x11\x34\x82\x36\ -\x34\xb2\x03\x11\x51\x2e\x08\x1a\x41\x23\x68\x43\x23\x3b\x10\x11\ -\xe5\x82\xa0\x11\x34\x82\x36\x34\xb2\x03\x11\x51\x2e\x08\x1a\x41\ -\x23\x68\x43\x23\x3b\x08\x27\xa3\x5c\x08\xb3\x23\xcc\x0e\x41\x1b\ -\x1a\xd9\x81\x88\x28\x17\x04\x8d\xa0\x11\xb4\xa1\x91\x1d\x88\x88\ -\x72\x41\xd0\x08\x1a\x41\x1b\x1a\xd9\x81\x88\x28\x17\x04\x8d\xa0\ -\x11\xb4\xa1\x91\x1d\x88\x88\x72\x41\xd0\x08\x1a\x41\x1b\x1a\xd9\ -\x81\x88\x28\x17\x04\x8d\xa0\x11\xb4\xa1\x91\x1d\x88\x88\x72\x41\ -\xd0\x08\x1a\x41\x1b\x1a\xd9\x81\x88\x28\x17\x04\x8d\xa0\x11\x74\ -\x0e\x91\x1d\x9d\x31\xc6\xa3\x11\x11\xe5\x82\xa0\x11\x34\x82\xce\ -\x29\xb2\xa3\x85\x8a\x4c\x03\x47\xd0\x08\x1a\x41\x9b\x19\xd9\xd1\ -\x4e\x45\xa6\x81\x23\x68\x04\x8d\xa0\x8b\x8d\xec\xe8\xf4\x19\xe6\ -\xa0\x22\xd3\xc0\x11\x34\x82\x46\xd0\x05\x56\xc6\xb4\x1e\x38\x22\ -\xa2\x5c\x7a\x04\xcc\x6b\x20\x68\x04\x8d\xa0\x11\x34\x82\x46\xd0\ -\x3c\x3f\x04\x8d\xa0\x11\x34\xe5\x82\xa0\x11\x34\x82\x46\xd0\x08\ -\x1a\x41\x23\x68\x04\x8d\xa0\x11\x34\x0d\x1c\x41\x23\x68\x04\x8d\ -\xa0\x11\x34\x82\x46\xd0\x08\x1a\x41\x23\x68\x04\x8d\xa0\x79\x7e\ -\x08\x1a\x41\x23\x68\x04\x8d\xa0\x11\x34\x82\x46\xd0\x08\x1a\x41\ -\x23\x68\x04\x8d\xa0\xa9\xc8\x34\x70\x04\x8d\xa0\x11\x34\x82\x46\ -\xd0\x08\x1a\x41\x23\x68\x04\x8d\xa0\x11\x34\x82\xe6\xf9\x45\x4a\ -\x45\x8c\xa0\x11\x34\x82\x46\xd0\x08\xba\xc0\xeb\x69\x53\xe9\xef\ -\xb6\x84\xa0\x11\x34\x82\x46\xd0\x08\x3a\x21\x7d\x54\xfa\x3b\x2d\ -\x21\x68\x04\x8d\xa0\x11\x34\x82\x4e\xe1\xd8\x41\x9b\x78\x34\x21\ -\x68\x04\x8d\xa0\x11\x34\x82\xce\xff\x7a\x5a\x02\xe4\x9c\x4a\xb9\ -\x22\x68\x04\x8d\xa0\x11\x34\xcf\x2f\xda\xb0\x46\x9b\x0a\xde\x48\ -\x7a\x18\x82\x46\xd0\x08\x1a\x41\x23\xe8\xec\xaf\x47\x0f\x55\x0c\ -\x0d\x29\x66\x4d\x47\x5a\xd7\x5f\x37\x41\x67\x4d\x5a\x15\x27\x2d\ -\x9a\x0d\xba\x9e\x56\xca\x25\x12\x55\x14\x74\x1d\x9e\x5f\x67\x1a\ -\x63\xcf\x55\x16\x74\xff\x92\x34\x28\x04\x5d\x8e\x72\xe9\x28\xa8\ -\x3e\x75\x20\xe8\x52\x0a\x7a\x68\x9a\xe5\x59\xd5\x4d\x63\x8b\xe8\ -\xf5\xb4\x51\x91\x2b\x29\xe8\xb6\x82\x04\xdd\x86\xa0\x4b\x27\xe8\ -\xa1\x69\x0f\xd1\x54\x55\xd0\xcd\x05\x34\xa8\xfe\x54\xe4\x4a\x0a\ -\xba\xa9\x20\x41\x37\x21\xe8\xd2\x08\xba\x33\x46\xfb\xaf\xb5\xa0\ -\xf3\xee\xf9\x34\x53\x91\x2b\x2b\xe8\x22\xbe\xf0\x87\xa5\xdc\xd0\ -\x11\x74\x76\x62\x6e\xc9\x72\x92\xb3\xca\x82\xee\x21\x15\x3d\xcb\ -\x31\xc4\x0e\xa9\xfc\x54\xe4\x6a\x0b\xba\x31\xb7\xd1\x9e\xf1\x75\ -\xb5\x67\xd4\x13\x43\xd0\xe9\x4a\xb9\x2d\x8b\xe1\x8c\xd2\x09\x1a\ -\x00\x00\x10\x34\x00\x00\x82\x06\x00\x00\x04\x0d\x00\x80\xa0\x01\ -\x00\x00\x41\x03\x00\x00\x82\x06\x00\x40\xd0\x00\x00\x80\xa0\x01\ -\x00\x10\x34\x00\x00\x20\x68\x00\x00\x40\xd0\x00\x00\x08\x1a\x00\ -\x00\x10\x34\x00\x40\x45\xf9\x7f\xa9\x46\xf1\x4b\x87\xfe\xe4\x51\ -\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\ -\x00\x00\x56\x9e\ -\x89\ -\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\ -\x00\x01\x68\x00\x00\x02\x58\x08\x06\x00\x00\x00\x4f\x77\x7c\xe5\ -\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x5c\x46\x00\x00\x5c\x46\ -\x01\x14\x94\x43\x41\x00\x00\x0b\x20\x69\x54\x58\x74\x58\x4d\x4c\ -\x3a\x63\x6f\x6d\x2e\x61\x64\x6f\x62\x65\x2e\x78\x6d\x70\x00\x00\ -\x00\x00\x00\x3c\x3f\x78\x70\x61\x63\x6b\x65\x74\x20\x62\x65\x67\ -\x69\x6e\x3d\x22\xef\xbb\xbf\x22\x20\x69\x64\x3d\x22\x57\x35\x4d\ -\x30\x4d\x70\x43\x65\x68\x69\x48\x7a\x72\x65\x53\x7a\x4e\x54\x63\ -\x7a\x6b\x63\x39\x64\x22\x3f\x3e\x20\x3c\x78\x3a\x78\x6d\x70\x6d\ -\x65\x74\x61\x20\x78\x6d\x6c\x6e\x73\x3a\x78\x3d\x22\x61\x64\x6f\ -\x62\x65\x3a\x6e\x73\x3a\x6d\x65\x74\x61\x2f\x22\x20\x78\x3a\x78\ -\x6d\x70\x74\x6b\x3d\x22\x41\x64\x6f\x62\x65\x20\x58\x4d\x50\x20\ -\x43\x6f\x72\x65\x20\x35\x2e\x36\x2d\x63\x31\x34\x32\x20\x37\x39\ -\x2e\x31\x36\x30\x39\x32\x34\x2c\x20\x32\x30\x31\x37\x2f\x30\x37\ -\x2f\x31\x33\x2d\x30\x31\x3a\x30\x36\x3a\x33\x39\x20\x20\x20\x20\ -\x20\x20\x20\x20\x22\x3e\x20\x3c\x72\x64\x66\x3a\x52\x44\x46\x20\ -\x78\x6d\x6c\x6e\x73\x3a\x72\x64\x66\x3d\x22\x68\x74\x74\x70\x3a\ -\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\ -\x39\x2f\x30\x32\x2f\x32\x32\x2d\x72\x64\x66\x2d\x73\x79\x6e\x74\ -\x61\x78\x2d\x6e\x73\x23\x22\x3e\x20\x3c\x72\x64\x66\x3a\x44\x65\ -\x73\x63\x72\x69\x70\x74\x69\x6f\x6e\x20\x72\x64\x66\x3a\x61\x62\ -\x6f\x75\x74\x3d\x22\x22\x20\x78\x6d\x6c\x6e\x73\x3a\x78\x6d\x70\ -\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x6e\x73\x2e\x61\x64\x6f\x62\ -\x65\x2e\x63\x6f\x6d\x2f\x78\x61\x70\x2f\x31\x2e\x30\x2f\x22\x20\ -\x78\x6d\x6c\x6e\x73\x3a\x70\x68\x6f\x74\x6f\x73\x68\x6f\x70\x3d\ -\x22\x68\x74\x74\x70\x3a\x2f\x2f\x6e\x73\x2e\x61\x64\x6f\x62\x65\ -\x2e\x63\x6f\x6d\x2f\x70\x68\x6f\x74\x6f\x73\x68\x6f\x70\x2f\x31\ -\x2e\x30\x2f\x22\x20\x78\x6d\x6c\x6e\x73\x3a\x64\x63\x3d\x22\x68\ -\x74\x74\x70\x3a\x2f\x2f\x70\x75\x72\x6c\x2e\x6f\x72\x67\x2f\x64\ -\x63\x2f\x65\x6c\x65\x6d\x65\x6e\x74\x73\x2f\x31\x2e\x31\x2f\x22\ -\x20\x78\x6d\x6c\x6e\x73\x3a\x78\x6d\x70\x4d\x4d\x3d\x22\x68\x74\ -\x74\x70\x3a\x2f\x2f\x6e\x73\x2e\x61\x64\x6f\x62\x65\x2e\x63\x6f\ -\x6d\x2f\x78\x61\x70\x2f\x31\x2e\x30\x2f\x6d\x6d\x2f\x22\x20\x78\ -\x6d\x6c\x6e\x73\x3a\x73\x74\x45\x76\x74\x3d\x22\x68\x74\x74\x70\ -\x3a\x2f\x2f\x6e\x73\x2e\x61\x64\x6f\x62\x65\x2e\x63\x6f\x6d\x2f\ -\x78\x61\x70\x2f\x31\x2e\x30\x2f\x73\x54\x79\x70\x65\x2f\x52\x65\ -\x73\x6f\x75\x72\x63\x65\x45\x76\x65\x6e\x74\x23\x22\x20\x78\x6d\ -\x6c\x6e\x73\x3a\x73\x74\x52\x65\x66\x3d\x22\x68\x74\x74\x70\x3a\ -\x2f\x2f\x6e\x73\x2e\x61\x64\x6f\x62\x65\x2e\x63\x6f\x6d\x2f\x78\ -\x61\x70\x2f\x31\x2e\x30\x2f\x73\x54\x79\x70\x65\x2f\x52\x65\x73\ -\x6f\x75\x72\x63\x65\x52\x65\x66\x23\x22\x20\x78\x6d\x6c\x6e\x73\ -\x3a\x74\x69\x66\x66\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x6e\x73\ -\x2e\x61\x64\x6f\x62\x65\x2e\x63\x6f\x6d\x2f\x74\x69\x66\x66\x2f\ -\x31\x2e\x30\x2f\x22\x20\x78\x6d\x6c\x6e\x73\x3a\x65\x78\x69\x66\ -\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x6e\x73\x2e\x61\x64\x6f\x62\ -\x65\x2e\x63\x6f\x6d\x2f\x65\x78\x69\x66\x2f\x31\x2e\x30\x2f\x22\ -\x20\x78\x6d\x70\x3a\x43\x72\x65\x61\x74\x6f\x72\x54\x6f\x6f\x6c\ -\x3d\x22\x41\x64\x6f\x62\x65\x20\x50\x68\x6f\x74\x6f\x73\x68\x6f\ -\x70\x20\x43\x43\x20\x28\x57\x69\x6e\x64\x6f\x77\x73\x29\x22\x20\ -\x78\x6d\x70\x3a\x43\x72\x65\x61\x74\x65\x44\x61\x74\x65\x3d\x22\ -\x32\x30\x31\x38\x2d\x31\x31\x2d\x30\x33\x54\x31\x39\x3a\x31\x32\ -\x3a\x30\x38\x2b\x30\x31\x3a\x30\x30\x22\x20\x78\x6d\x70\x3a\x4d\ -\x65\x74\x61\x64\x61\x74\x61\x44\x61\x74\x65\x3d\x22\x32\x30\x31\ -\x38\x2d\x31\x31\x2d\x30\x38\x54\x31\x38\x3a\x33\x34\x3a\x34\x31\ -\x2b\x30\x31\x3a\x30\x30\x22\x20\x78\x6d\x70\x3a\x4d\x6f\x64\x69\ -\x66\x79\x44\x61\x74\x65\x3d\x22\x32\x30\x31\x38\x2d\x31\x31\x2d\ -\x30\x38\x54\x31\x38\x3a\x33\x34\x3a\x34\x31\x2b\x30\x31\x3a\x30\ -\x30\x22\x20\x70\x68\x6f\x74\x6f\x73\x68\x6f\x70\x3a\x43\x6f\x6c\ -\x6f\x72\x4d\x6f\x64\x65\x3d\x22\x33\x22\x20\x70\x68\x6f\x74\x6f\ -\x73\x68\x6f\x70\x3a\x49\x43\x43\x50\x72\x6f\x66\x69\x6c\x65\x3d\ -\x22\x73\x52\x47\x42\x20\x49\x45\x43\x36\x31\x39\x36\x36\x2d\x32\ -\x2e\x31\x22\x20\x64\x63\x3a\x66\x6f\x72\x6d\x61\x74\x3d\x22\x69\ -\x6d\x61\x67\x65\x2f\x70\x6e\x67\x22\x20\x78\x6d\x70\x4d\x4d\x3a\ -\x49\x6e\x73\x74\x61\x6e\x63\x65\x49\x44\x3d\x22\x78\x6d\x70\x2e\ -\x69\x69\x64\x3a\x65\x62\x62\x37\x37\x66\x39\x61\x2d\x36\x37\x61\ -\x65\x2d\x66\x35\x34\x30\x2d\x39\x35\x32\x31\x2d\x63\x36\x33\x39\ -\x63\x38\x33\x32\x38\x36\x64\x31\x22\x20\x78\x6d\x70\x4d\x4d\x3a\ -\x44\x6f\x63\x75\x6d\x65\x6e\x74\x49\x44\x3d\x22\x61\x64\x6f\x62\ -\x65\x3a\x64\x6f\x63\x69\x64\x3a\x70\x68\x6f\x74\x6f\x73\x68\x6f\ -\x70\x3a\x66\x37\x66\x34\x34\x31\x31\x33\x2d\x38\x35\x62\x66\x2d\ -\x62\x35\x34\x63\x2d\x61\x33\x30\x37\x2d\x62\x30\x65\x65\x33\x65\ -\x64\x63\x64\x63\x63\x63\x22\x20\x78\x6d\x70\x4d\x4d\x3a\x4f\x72\ -\x69\x67\x69\x6e\x61\x6c\x44\x6f\x63\x75\x6d\x65\x6e\x74\x49\x44\ -\x3d\x22\x78\x6d\x70\x2e\x64\x69\x64\x3a\x34\x35\x36\x66\x38\x30\ -\x33\x66\x2d\x31\x36\x33\x31\x2d\x31\x39\x34\x62\x2d\x61\x37\x39\ -\x61\x2d\x34\x32\x33\x32\x32\x65\x66\x39\x37\x62\x38\x37\x22\x20\ -\x74\x69\x66\x66\x3a\x4f\x72\x69\x65\x6e\x74\x61\x74\x69\x6f\x6e\ -\x3d\x22\x31\x22\x20\x74\x69\x66\x66\x3a\x58\x52\x65\x73\x6f\x6c\ -\x75\x74\x69\x6f\x6e\x3d\x22\x36\x30\x30\x30\x30\x30\x30\x2f\x31\ -\x30\x30\x30\x30\x22\x20\x74\x69\x66\x66\x3a\x59\x52\x65\x73\x6f\ -\x6c\x75\x74\x69\x6f\x6e\x3d\x22\x36\x30\x30\x30\x30\x30\x30\x2f\ -\x31\x30\x30\x30\x30\x22\x20\x74\x69\x66\x66\x3a\x52\x65\x73\x6f\ -\x6c\x75\x74\x69\x6f\x6e\x55\x6e\x69\x74\x3d\x22\x32\x22\x20\x65\ -\x78\x69\x66\x3a\x43\x6f\x6c\x6f\x72\x53\x70\x61\x63\x65\x3d\x22\ -\x31\x22\x20\x65\x78\x69\x66\x3a\x50\x69\x78\x65\x6c\x58\x44\x69\ -\x6d\x65\x6e\x73\x69\x6f\x6e\x3d\x22\x33\x36\x30\x22\x20\x65\x78\ -\x69\x66\x3a\x50\x69\x78\x65\x6c\x59\x44\x69\x6d\x65\x6e\x73\x69\ -\x6f\x6e\x3d\x22\x36\x30\x30\x22\x3e\x20\x3c\x70\x68\x6f\x74\x6f\ -\x73\x68\x6f\x70\x3a\x44\x6f\x63\x75\x6d\x65\x6e\x74\x41\x6e\x63\ -\x65\x73\x74\x6f\x72\x73\x3e\x20\x3c\x72\x64\x66\x3a\x42\x61\x67\ -\x3e\x20\x3c\x72\x64\x66\x3a\x6c\x69\x3e\x61\x64\x6f\x62\x65\x3a\ -\x64\x6f\x63\x69\x64\x3a\x70\x68\x6f\x74\x6f\x73\x68\x6f\x70\x3a\ -\x36\x32\x66\x36\x34\x31\x33\x62\x2d\x30\x36\x66\x34\x2d\x39\x30\ -\x34\x62\x2d\x38\x33\x63\x38\x2d\x64\x37\x35\x39\x64\x34\x30\x62\ -\x32\x64\x64\x35\x3c\x2f\x72\x64\x66\x3a\x6c\x69\x3e\x20\x3c\x2f\ -\x72\x64\x66\x3a\x42\x61\x67\x3e\x20\x3c\x2f\x70\x68\x6f\x74\x6f\ -\x73\x68\x6f\x70\x3a\x44\x6f\x63\x75\x6d\x65\x6e\x74\x41\x6e\x63\ -\x65\x73\x74\x6f\x72\x73\x3e\x20\x3c\x78\x6d\x70\x4d\x4d\x3a\x48\ -\x69\x73\x74\x6f\x72\x79\x3e\x20\x3c\x72\x64\x66\x3a\x53\x65\x71\ -\x3e\x20\x3c\x72\x64\x66\x3a\x6c\x69\x20\x73\x74\x45\x76\x74\x3a\ -\x61\x63\x74\x69\x6f\x6e\x3d\x22\x63\x72\x65\x61\x74\x65\x64\x22\ -\x20\x73\x74\x45\x76\x74\x3a\x69\x6e\x73\x74\x61\x6e\x63\x65\x49\ -\x44\x3d\x22\x78\x6d\x70\x2e\x69\x69\x64\x3a\x34\x35\x36\x66\x38\ -\x30\x33\x66\x2d\x31\x36\x33\x31\x2d\x31\x39\x34\x62\x2d\x61\x37\ -\x39\x61\x2d\x34\x32\x33\x32\x32\x65\x66\x39\x37\x62\x38\x37\x22\ -\x20\x73\x74\x45\x76\x74\x3a\x77\x68\x65\x6e\x3d\x22\x32\x30\x31\ -\x38\x2d\x31\x31\x2d\x30\x33\x54\x31\x39\x3a\x31\x32\x3a\x30\x38\ -\x2b\x30\x31\x3a\x30\x30\x22\x20\x73\x74\x45\x76\x74\x3a\x73\x6f\ -\x66\x74\x77\x61\x72\x65\x41\x67\x65\x6e\x74\x3d\x22\x41\x64\x6f\ -\x62\x65\x20\x50\x68\x6f\x74\x6f\x73\x68\x6f\x70\x20\x43\x43\x20\ -\x28\x57\x69\x6e\x64\x6f\x77\x73\x29\x22\x2f\x3e\x20\x3c\x72\x64\ -\x66\x3a\x6c\x69\x20\x73\x74\x45\x76\x74\x3a\x61\x63\x74\x69\x6f\ -\x6e\x3d\x22\x73\x61\x76\x65\x64\x22\x20\x73\x74\x45\x76\x74\x3a\ -\x69\x6e\x73\x74\x61\x6e\x63\x65\x49\x44\x3d\x22\x78\x6d\x70\x2e\ -\x69\x69\x64\x3a\x64\x66\x64\x62\x31\x33\x66\x62\x2d\x37\x62\x37\ -\x30\x2d\x39\x33\x34\x32\x2d\x39\x31\x38\x63\x2d\x61\x31\x31\x30\ -\x61\x61\x65\x62\x63\x62\x66\x32\x22\x20\x73\x74\x45\x76\x74\x3a\ -\x77\x68\x65\x6e\x3d\x22\x32\x30\x31\x38\x2d\x31\x31\x2d\x30\x33\ -\x54\x31\x39\x3a\x34\x36\x3a\x33\x39\x2b\x30\x31\x3a\x30\x30\x22\ -\x20\x73\x74\x45\x76\x74\x3a\x73\x6f\x66\x74\x77\x61\x72\x65\x41\ -\x67\x65\x6e\x74\x3d\x22\x41\x64\x6f\x62\x65\x20\x50\x68\x6f\x74\ -\x6f\x73\x68\x6f\x70\x20\x43\x43\x20\x28\x57\x69\x6e\x64\x6f\x77\ -\x73\x29\x22\x20\x73\x74\x45\x76\x74\x3a\x63\x68\x61\x6e\x67\x65\ -\x64\x3d\x22\x2f\x22\x2f\x3e\x20\x3c\x72\x64\x66\x3a\x6c\x69\x20\ -\x73\x74\x45\x76\x74\x3a\x61\x63\x74\x69\x6f\x6e\x3d\x22\x63\x6f\ -\x6e\x76\x65\x72\x74\x65\x64\x22\x20\x73\x74\x45\x76\x74\x3a\x70\ -\x61\x72\x61\x6d\x65\x74\x65\x72\x73\x3d\x22\x66\x72\x6f\x6d\x20\ -\x61\x70\x70\x6c\x69\x63\x61\x74\x69\x6f\x6e\x2f\x76\x6e\x64\x2e\ -\x61\x64\x6f\x62\x65\x2e\x70\x68\x6f\x74\x6f\x73\x68\x6f\x70\x20\ -\x74\x6f\x20\x69\x6d\x61\x67\x65\x2f\x70\x6e\x67\x22\x2f\x3e\x20\ -\x3c\x72\x64\x66\x3a\x6c\x69\x20\x73\x74\x45\x76\x74\x3a\x61\x63\ -\x74\x69\x6f\x6e\x3d\x22\x64\x65\x72\x69\x76\x65\x64\x22\x20\x73\ -\x74\x45\x76\x74\x3a\x70\x61\x72\x61\x6d\x65\x74\x65\x72\x73\x3d\ -\x22\x63\x6f\x6e\x76\x65\x72\x74\x65\x64\x20\x66\x72\x6f\x6d\x20\ -\x61\x70\x70\x6c\x69\x63\x61\x74\x69\x6f\x6e\x2f\x76\x6e\x64\x2e\ -\x61\x64\x6f\x62\x65\x2e\x70\x68\x6f\x74\x6f\x73\x68\x6f\x70\x20\ -\x74\x6f\x20\x69\x6d\x61\x67\x65\x2f\x70\x6e\x67\x22\x2f\x3e\x20\ -\x3c\x72\x64\x66\x3a\x6c\x69\x20\x73\x74\x45\x76\x74\x3a\x61\x63\ -\x74\x69\x6f\x6e\x3d\x22\x73\x61\x76\x65\x64\x22\x20\x73\x74\x45\ -\x76\x74\x3a\x69\x6e\x73\x74\x61\x6e\x63\x65\x49\x44\x3d\x22\x78\ -\x6d\x70\x2e\x69\x69\x64\x3a\x35\x31\x33\x66\x63\x34\x34\x65\x2d\ -\x65\x61\x37\x65\x2d\x64\x63\x34\x66\x2d\x62\x34\x63\x64\x2d\x31\ -\x30\x62\x34\x39\x38\x34\x66\x31\x38\x39\x33\x22\x20\x73\x74\x45\ -\x76\x74\x3a\x77\x68\x65\x6e\x3d\x22\x32\x30\x31\x38\x2d\x31\x31\ -\x2d\x30\x33\x54\x31\x39\x3a\x34\x36\x3a\x33\x39\x2b\x30\x31\x3a\ -\x30\x30\x22\x20\x73\x74\x45\x76\x74\x3a\x73\x6f\x66\x74\x77\x61\ -\x72\x65\x41\x67\x65\x6e\x74\x3d\x22\x41\x64\x6f\x62\x65\x20\x50\ -\x68\x6f\x74\x6f\x73\x68\x6f\x70\x20\x43\x43\x20\x28\x57\x69\x6e\ -\x64\x6f\x77\x73\x29\x22\x20\x73\x74\x45\x76\x74\x3a\x63\x68\x61\ -\x6e\x67\x65\x64\x3d\x22\x2f\x22\x2f\x3e\x20\x3c\x72\x64\x66\x3a\ -\x6c\x69\x20\x73\x74\x45\x76\x74\x3a\x61\x63\x74\x69\x6f\x6e\x3d\ -\x22\x73\x61\x76\x65\x64\x22\x20\x73\x74\x45\x76\x74\x3a\x69\x6e\ -\x73\x74\x61\x6e\x63\x65\x49\x44\x3d\x22\x78\x6d\x70\x2e\x69\x69\ -\x64\x3a\x65\x62\x62\x37\x37\x66\x39\x61\x2d\x36\x37\x61\x65\x2d\ -\x66\x35\x34\x30\x2d\x39\x35\x32\x31\x2d\x63\x36\x33\x39\x63\x38\ -\x33\x32\x38\x36\x64\x31\x22\x20\x73\x74\x45\x76\x74\x3a\x77\x68\ -\x65\x6e\x3d\x22\x32\x30\x31\x38\x2d\x31\x31\x2d\x30\x38\x54\x31\ -\x38\x3a\x33\x34\x3a\x34\x31\x2b\x30\x31\x3a\x30\x30\x22\x20\x73\ -\x74\x45\x76\x74\x3a\x73\x6f\x66\x74\x77\x61\x72\x65\x41\x67\x65\ -\x6e\x74\x3d\x22\x41\x64\x6f\x62\x65\x20\x50\x68\x6f\x74\x6f\x73\ -\x68\x6f\x70\x20\x43\x43\x20\x28\x57\x69\x6e\x64\x6f\x77\x73\x29\ -\x22\x20\x73\x74\x45\x76\x74\x3a\x63\x68\x61\x6e\x67\x65\x64\x3d\ -\x22\x2f\x22\x2f\x3e\x20\x3c\x2f\x72\x64\x66\x3a\x53\x65\x71\x3e\ -\x20\x3c\x2f\x78\x6d\x70\x4d\x4d\x3a\x48\x69\x73\x74\x6f\x72\x79\ -\x3e\x20\x3c\x78\x6d\x70\x4d\x4d\x3a\x44\x65\x72\x69\x76\x65\x64\ -\x46\x72\x6f\x6d\x20\x73\x74\x52\x65\x66\x3a\x69\x6e\x73\x74\x61\ -\x6e\x63\x65\x49\x44\x3d\x22\x78\x6d\x70\x2e\x69\x69\x64\x3a\x64\ -\x66\x64\x62\x31\x33\x66\x62\x2d\x37\x62\x37\x30\x2d\x39\x33\x34\ -\x32\x2d\x39\x31\x38\x63\x2d\x61\x31\x31\x30\x61\x61\x65\x62\x63\ -\x62\x66\x32\x22\x20\x73\x74\x52\x65\x66\x3a\x64\x6f\x63\x75\x6d\ -\x65\x6e\x74\x49\x44\x3d\x22\x78\x6d\x70\x2e\x64\x69\x64\x3a\x34\ -\x35\x36\x66\x38\x30\x33\x66\x2d\x31\x36\x33\x31\x2d\x31\x39\x34\ -\x62\x2d\x61\x37\x39\x61\x2d\x34\x32\x33\x32\x32\x65\x66\x39\x37\ -\x62\x38\x37\x22\x20\x73\x74\x52\x65\x66\x3a\x6f\x72\x69\x67\x69\ -\x6e\x61\x6c\x44\x6f\x63\x75\x6d\x65\x6e\x74\x49\x44\x3d\x22\x78\ -\x6d\x70\x2e\x64\x69\x64\x3a\x34\x35\x36\x66\x38\x30\x33\x66\x2d\ -\x31\x36\x33\x31\x2d\x31\x39\x34\x62\x2d\x61\x37\x39\x61\x2d\x34\ -\x32\x33\x32\x32\x65\x66\x39\x37\x62\x38\x37\x22\x2f\x3e\x20\x3c\ -\x2f\x72\x64\x66\x3a\x44\x65\x73\x63\x72\x69\x70\x74\x69\x6f\x6e\ -\x3e\x20\x3c\x2f\x72\x64\x66\x3a\x52\x44\x46\x3e\x20\x3c\x2f\x78\ -\x3a\x78\x6d\x70\x6d\x65\x74\x61\x3e\x20\x3c\x3f\x78\x70\x61\x63\ -\x6b\x65\x74\x20\x65\x6e\x64\x3d\x22\x72\x22\x3f\x3e\xd9\x32\x86\ -\x3f\x00\x00\x4b\x24\x49\x44\x41\x54\x78\xda\xed\x9d\x77\x78\x1d\ -\xc5\xf9\x70\x4d\xef\x45\x60\x7a\x37\x60\x7a\x15\xa6\x99\x8e\x68\ -\x26\x40\x08\x38\xd4\x84\x16\x04\x84\x5e\x05\xa1\x99\x2e\x7a\x2f\ -\x22\x94\xd0\x83\x68\x43\x87\x08\x4c\x2f\x26\xa2\x86\x0e\x22\x10\ -\xba\x01\x81\x29\x36\xa6\xe9\xdb\xf9\xe9\xbd\x9f\xd7\xeb\xed\x75\ -\x76\xf7\xfc\x71\x9e\xc7\x96\xae\x76\x77\x66\x67\xcf\x9d\x9d\x79\ -\xe7\x9d\x01\x7d\x7d\x7d\x03\x00\x00\xc0\x3c\xa8\x04\x00\x00\x04\ -\x0d\x00\x00\x08\x1a\x00\x00\x41\x03\x00\x00\x82\x06\x00\x40\xd0\ -\x00\x00\x80\xa0\x01\x00\x00\x41\x03\x00\x20\x68\x00\x00\x40\xd0\ -\x00\x00\x08\x3a\x04\x6a\xe4\x28\x80\x22\x39\xc8\xe2\x4a\xea\x01\ -\x4c\x02\x41\x03\xf4\xf3\xa4\x45\x9f\xc5\xb6\xd4\x05\x20\x68\x04\ -\x0d\xe6\x30\xb3\xc5\xb7\x22\x68\xcd\x2e\xd4\x09\x20\x68\x04\x0d\ -\x66\xb0\xa2\x4d\xce\x0d\x06\x51\x2f\x80\xa0\x11\x34\x14\xcf\x5e\ -\x2e\x82\x7e\x9e\x7a\x01\x04\x8d\xa0\xa1\x78\x9e\x77\x11\xb4\xe6\ -\x26\xea\x06\x10\x34\x82\x86\xe2\x98\x47\x64\xfc\x4f\x8b\x4f\x5d\ -\x24\xbd\x0d\x75\x04\x08\x9a\x9b\x01\xc5\x70\x9a\x88\x58\xff\xfb\ -\x5e\x17\x41\x8f\xb5\x98\x8e\x7a\x02\x04\x0d\x90\x3f\x5f\x58\xfc\ -\x26\xff\x3e\xce\x63\xa8\xe3\x0e\xea\x09\x10\x34\x40\xbe\x2c\x2a\ -\x02\xfe\xbb\xfc\x7f\x59\x0f\x41\x6b\x0e\xa3\xbe\x00\x41\x03\xe4\ -\xc7\xce\x22\xdf\xa1\xb6\x9f\x7d\xeb\x23\x69\x86\x3a\x00\x41\x03\ -\xe4\xc4\x83\x22\xde\xa9\x6c\x3f\x7b\xd1\x47\xd0\x4f\x52\x67\x80\ -\xa0\x01\xb2\x67\x32\x91\x6e\xa7\xe3\xe7\xed\x3e\x82\xd6\x5c\x46\ -\xdd\x01\x82\x06\xc8\x96\xcd\x44\xb8\xab\x78\x8c\x4b\xfb\x71\x28\ -\xf5\x07\x08\x1a\x20\x3b\x9e\xb0\xf8\xd5\xe3\x77\x0f\x87\x90\xf4\ -\x2d\xd4\x21\x20\x68\x80\xf4\x99\x4e\x24\x7b\x9f\xc7\xef\x07\x87\ -\x10\xb4\xa6\xdb\x62\x73\xea\x13\x10\x34\x40\x7a\xfc\x59\x04\x7b\ -\x90\xcf\x67\x8e\x08\x29\xe9\x3e\x99\x6c\x5c\x8e\x7a\x05\x04\x0d\ -\x90\x9c\x9b\x44\xac\x8b\x06\x7c\x6e\x44\x04\x49\x37\x72\x77\xac\ -\x61\x31\x2d\x75\x0c\x08\x1a\x20\x1e\xdf\x58\xbc\x1b\xf2\xb3\x4b\ -\x58\x9c\x63\x31\x26\x82\xa8\x3f\xb3\xb8\xdc\x62\x53\x8b\x19\xa8\ -\x6f\x40\xd0\x00\xe1\x98\x57\x24\x7a\x4c\xc4\xbf\x9b\x53\xa4\xfb\ -\x6b\xc4\x5e\xf5\xe7\x16\xd7\x58\x6c\x6f\xb1\x14\xf5\x0f\x08\x1a\ -\xc0\x9b\xcb\x44\x9c\x03\x63\xfe\xfd\xc2\x22\xf7\xaf\x22\x8a\xba\ -\xc1\x9b\x16\x23\x2d\xfe\x61\xf1\x17\x8b\xe5\x2d\xa6\xe1\xbe\x00\ -\x82\x06\x18\x39\xea\x27\x8b\xb7\x53\x38\xce\xac\x16\xd7\xc5\x94\ -\xb4\x13\x9d\xe6\xf4\x4e\x8b\xc3\x2d\xd6\x94\x45\x34\xdc\x2b\x40\ -\xd0\x50\x2b\x96\x50\xe9\x27\x3e\xda\xc0\xe2\xfe\x94\x44\xdd\xa0\ -\x47\x86\x53\x8e\xb6\x58\x95\xfb\x86\xa0\x11\x34\xd4\x81\x73\x45\ -\x80\xeb\x67\x70\x6c\x3d\x5c\xf1\x43\xca\xa2\xb6\x6f\xbf\x75\xa4\ -\x0c\xaf\x70\x1f\x11\x34\x82\x86\x4a\xf2\x95\x4c\xf2\x65\x35\xe6\ -\xbb\x88\x9a\x90\x80\x29\x0b\x7e\x93\xe3\xef\x60\xb1\x34\xf7\x13\ -\x41\x23\x68\xa8\x12\x5a\x72\xb7\xe7\x70\x9e\x3f\x66\x28\x69\x3b\ -\xb7\x5a\x6c\xc4\x7d\x45\xd0\x08\x1a\xca\xce\xc6\x22\xb5\x4d\x73\ -\x3a\x9f\x9e\xec\x7b\x25\x27\x51\xff\x4b\xf5\x27\x7f\x9a\x9e\xfb\ -\x8c\xa0\x11\x34\x94\x91\x97\xd5\x84\xbd\x07\xf3\xe4\x8c\x9c\x24\ -\xdd\x58\x20\x73\x3c\xa2\x46\xd0\x08\x1a\xca\xc4\x4c\x6a\xe2\xad\ -\xad\xf2\xe6\x10\x8b\x5f\x72\x14\xf5\xff\x2c\xf6\xb0\x98\x85\x7b\ -\x8f\xa0\x11\x34\x98\xce\xae\x22\xae\x22\x43\xd6\x96\x90\xa1\x88\ -\xbe\x1c\xf9\x4a\x7a\xd4\x4d\xb4\x01\x04\x8d\xa0\xc1\x54\x9e\x15\ -\x61\xcd\x66\xc0\xb5\xe8\x0d\x02\xce\x92\x68\x8c\x57\x03\x18\x9f\ -\x92\xa8\x7b\x25\x0c\x90\xb6\x80\xa0\x11\x34\x18\xc5\x1c\x22\xa9\ -\xd7\x4a\x78\xed\xf3\x88\xd0\x7f\x2f\xd1\x27\x49\x45\xad\xeb\x60\ -\x5f\xda\x04\x82\x46\xd0\x60\x0a\xab\x88\x9c\x5a\x2b\x52\x96\x9b\ -\x52\x10\xb5\xde\x4d\x66\x35\xda\x06\x82\x46\xd0\x50\x34\xa7\x8b\ -\x94\xe6\xac\x50\x99\xf4\xf2\xf2\x13\x2d\xbe\x4e\x28\xea\xf3\x14\ -\x19\xf6\x10\x34\x82\x86\x82\x17\xa7\xfc\xb7\xa2\x65\xd3\x63\xea\ -\x27\xa4\xd0\xa3\x66\x7c\x1a\x41\x23\x68\xc8\x9d\xd5\x45\x40\x7b\ -\x54\xbc\x9c\xba\x17\x7c\xb1\xc5\xb8\x84\xc3\x1e\x6b\xd3\x66\x10\ -\x34\x82\x86\xbc\x78\x40\xe4\x53\x97\xf4\x9d\x3a\x17\xc8\x95\x09\ -\x7b\xd3\x57\x11\x3f\x8d\xa0\x11\x34\x64\xcd\xe4\x12\xa6\x36\xbe\ -\x86\x65\xdf\xd0\xe2\x45\x95\x2c\xdd\xe9\x7a\xb4\x21\x04\x8d\xa0\ -\x21\x2b\xd6\x17\xd9\x5c\x5c\xe3\x3a\xd0\xf9\x39\x3e\x4c\x20\xea\ -\xfb\x2c\xe6\xa7\x2d\x21\x68\x6e\x06\xa4\xcd\xe1\x22\x99\xba\x8f\ -\xab\xce\xa8\xfa\x37\xbd\x8d\x2b\xe9\xef\x2c\x36\xa7\x3d\x21\x68\ -\x80\x34\xf9\x8f\x08\x66\x6a\xea\xe2\xff\xd0\x71\xcf\xd7\x26\x10\ -\xf5\x05\xd4\x21\x82\x06\x48\x83\x69\x45\x2a\x37\x53\x17\x93\x70\ -\x40\x02\x49\xbf\x4c\xfd\x21\x68\x80\xa4\x1c\x28\x42\x59\x92\xba\ -\x70\x65\x39\xf9\xf2\x8a\x23\x69\x9d\xd7\x64\x2d\xea\x10\x41\x03\ -\xc4\xe5\xb3\x9a\x46\x6f\x44\x45\x2f\x7f\xff\x31\xa6\xa8\x97\xa1\ -\xfe\x10\x34\x40\x54\xe6\x14\x81\xdc\x45\x5d\x84\x42\x8b\xf6\xe9\ -\x18\x82\xfe\xc4\x62\x05\xea\x0f\x41\x03\xc4\x19\xde\x60\xf9\x72\ -\xbc\xa8\x97\xa8\x90\x74\x09\x41\x03\x84\xe6\x21\x11\x07\x49\xea\ -\xa3\xb3\x9b\xc5\x98\x88\x82\xd6\x09\x9b\x06\x51\x77\x08\x1a\x20\ -\x88\xa9\x54\xff\xd6\x52\x6f\x52\x17\xb1\x19\x68\xf1\x78\x44\x49\ -\xff\xc8\xca\x43\x04\x0d\x10\xc4\x10\x11\xc6\x9e\xd4\x45\x62\xee\ -\x88\x28\xe9\x6f\xa8\x33\x04\x0d\xe0\xc7\x2d\x22\x8b\x69\xa9\x8b\ -\x54\xd8\x3b\xa2\xa4\x9f\xa4\xce\x10\x34\x80\x17\x5a\x12\xdd\xd4\ -\x43\xaa\x6c\xa5\xa2\xed\x8d\x78\x1b\x75\x86\xa0\x01\x9c\xfc\x5e\ -\x04\x71\x20\x75\x91\x3a\x7a\xc1\xcf\x17\x11\x24\xbd\x1b\x75\x86\ -\xa0\x01\xec\x34\x36\x55\x5d\x99\xba\xc8\x84\x79\x2d\x46\x46\x90\ -\xf4\x8a\xd4\x19\x82\x06\x68\xa0\x77\x13\xf9\x99\x7a\xc8\x9c\xe7\ -\x42\x0a\xfa\x73\x8b\x19\xa8\x2f\x04\x0d\x30\x8f\x48\xe1\x6a\xea\ -\x22\x17\x94\x0a\xbf\x3b\x0b\xf5\x85\xa0\xa1\xe6\xb4\x89\x10\x56\ -\xa1\x2e\x72\xe3\x9a\x90\x92\xfe\x3d\x75\x85\xa0\xa1\xde\xe8\xd7\ -\xe9\x6f\xa9\x87\xdc\x69\x0f\x29\xe9\x45\xa9\x2b\x04\x0d\xf5\x64\ -\x01\x91\xc0\x29\xd4\x45\x21\x5c\x18\x42\xd0\x24\xae\x42\xd0\x50\ -\x53\xce\x17\x09\x2c\x47\x5d\x14\xc6\x19\x21\x24\xfd\x27\xea\x09\ -\x41\x43\xfd\xf8\x48\x04\x30\x23\x75\x51\x28\x41\x21\x78\xbf\xa9\ -\xfe\x54\xb0\xd4\x15\x82\x86\x9a\x30\x9f\x3c\xfc\x8f\x52\x17\xa5\ -\x90\xf4\xe3\xd4\x11\x82\x86\xfa\xb0\xa9\x3c\xf8\x7f\xa0\x2e\x8c\ -\xe1\x25\x16\xb0\x20\x68\x00\xcd\x03\xf2\xd0\xcf\x4a\x5d\x18\xc3\ -\x1c\xaa\x3f\xb3\x9d\x97\xa0\x3f\x55\xec\xb4\x8e\xa0\xa1\x36\xc9\ -\x91\x46\x51\x0f\xc6\xb1\x4e\x40\x2f\xfa\x3a\xea\x08\x41\x43\xb5\ -\xf9\x9d\x3c\xec\x1b\x51\x17\x46\x72\x6c\x80\xa4\xe7\xa2\x8e\x10\ -\x34\x54\x97\xe7\xe5\x41\xa7\x2e\xcc\xe5\x15\x1f\x41\x3f\x44\xfd\ -\x20\x68\xa8\x26\x33\xca\x43\xfe\x31\x75\x61\x34\xbb\x07\xf4\xa2\ -\xb7\xa2\x8e\x10\x34\x54\x8f\xcd\xe4\x01\x3f\x91\xba\x30\x9e\xa7\ -\x7c\x04\xad\xb3\x0f\xb2\xb9\x2f\x82\x86\x8a\x71\x8a\x3c\xe0\x8b\ -\x50\x17\xc6\xb3\x79\x40\x2f\xfa\x68\xea\x08\x41\x43\xb5\xf8\xcc\ -\xa2\x97\x7a\x28\xdd\x7c\x81\x1b\xe3\x64\xc1\x11\xf5\x84\xa0\xa1\ -\x02\xcc\x29\x0f\x76\x3b\x75\x51\x1a\x8e\x09\xe8\x45\x3f\x4c\x1d\ -\x21\x68\xa8\x06\xa7\xc9\x43\x4d\xaf\xab\x3c\x0c\x53\xc1\xc9\x94\ -\x36\xa7\x9e\x10\x34\x94\x1f\x9d\x74\xe7\x43\xea\xa1\x54\x4c\x29\ -\x43\x52\x7e\x82\x7e\x8d\x7a\x42\xd0\x50\x6e\x16\x91\x87\xf9\x26\ -\xea\xa2\x74\xdc\x1e\xa2\x17\x3d\x9c\x7a\x42\xd0\x50\x5e\x4e\x94\ -\x07\x79\x6b\xea\xa2\x74\xec\xaf\xc2\xed\xbe\x32\x90\xba\x42\xd0\ -\x50\x4e\xba\xe5\x21\x9e\x92\xba\x28\x1d\xab\xcb\xf0\x54\x90\xa0\ -\x79\x3b\x42\xd0\x50\xd2\x71\x4c\x72\x0a\x97\x97\x81\x21\x7b\xd0\ -\x9a\x79\xa9\x2f\x04\x0d\xe5\xa2\x91\x21\x8d\xdc\xcf\xe5\x64\x2a\ -\x8b\xd7\x43\x0a\x9a\x3c\x1d\x08\x1a\x4a\xc6\xbf\xe5\xe1\x9d\x8c\ -\xba\x28\x2d\x8f\x45\xe8\x45\xef\x44\x7d\x21\x68\x28\x07\x33\xc8\ -\x43\x7b\x33\x75\x51\x6a\x6e\x8d\x20\xe8\x5f\xa8\x2f\x04\x0d\xe5\ -\xe0\x8f\xf2\xd0\xee\x4e\x5d\x94\x9a\x63\x23\x08\x5a\xf3\x57\x04\ -\x8d\xa0\xc1\x7c\x1e\x96\x07\x76\x71\xea\xa2\xd4\x9c\x1a\x51\xd0\ -\x9a\x59\x10\x34\x82\x06\xb3\xd1\x0f\xea\xff\xa8\x87\x5a\x0a\xfa\ -\x1e\x04\x8d\xa0\xc1\xfc\xe4\x48\xc7\x51\x17\xa5\xe7\xe4\x18\x82\ -\xd6\xac\x81\xa0\x11\x34\x98\xc9\xf1\xf2\x90\x0e\xa6\x2e\x4a\xcf\ -\x49\x31\x05\x7d\x17\x82\x46\xd0\x60\x26\x3f\x5a\xbc\x4f\x3d\x54\ -\x82\xfb\x62\x0a\x5a\xb3\x3d\x82\x46\xd0\x60\x16\x0b\xc9\xc3\x79\ -\x00\x75\x51\x09\x1e\x49\x20\x68\x9d\x0d\x6f\x36\x04\x8d\xa0\xc1\ -\x1c\xce\x91\x87\x73\x51\xea\xa2\xf4\x4c\x6d\xf1\x6a\x02\x41\x6b\ -\x4e\x43\xd0\x08\x1a\xcc\x60\x72\x35\x21\x87\xf0\xd4\xd4\x47\x25\ -\x16\x1b\xb9\x25\x4b\x7a\x3f\x82\xa0\x3f\x53\x35\x4b\x94\x85\xa0\ -\xc1\x54\x16\x96\x87\xf2\x06\xea\xa2\x12\x2c\xe9\x90\xad\x7e\x3b\ -\x1a\x26\xc2\x3d\x26\x82\xa4\xaf\x46\xd0\x08\x1a\x8a\x67\x63\x79\ -\x20\x37\xa0\x2e\x2a\xb5\x8a\xf0\x7a\x8b\x15\x5c\x7e\xff\x44\x04\ -\x49\x2f\x86\xa0\x11\x34\x98\x31\xa1\x34\x0d\x75\x51\x09\x36\xb1\ -\x68\xf1\xf9\xfd\xd2\x11\x04\xfd\x04\x82\x46\xd0\x50\xfc\xea\xc1\ -\x3b\xa8\x87\x5a\x31\x22\x82\xa4\x17\x40\xd0\x08\x1a\x8a\x61\x73\ -\x79\x08\x87\x50\x17\xb5\x23\x6c\xa4\xc7\x3d\x08\x1a\x41\x43\x31\ -\x3c\x2f\x0f\x21\x75\x51\x3f\xd6\x8b\xd0\x8b\x1e\x8a\xa0\x11\x34\ -\xe4\xcb\xf4\xf2\xf0\xbd\x47\x5d\xd4\x92\x29\x2c\xbe\x0f\x29\xe8\ -\x17\x10\x34\x82\x86\x7c\xd9\x4c\x1e\xbe\x83\xa9\x8b\xda\xb2\x53\ -\x84\x5e\xf4\x92\x08\x1a\x41\x43\x7e\x9c\x5a\xa7\x49\x20\xf0\xe4\ -\x83\x90\x82\xbe\x19\x41\x23\x68\xc8\x8f\x8f\x2c\x3e\xa7\x1e\x6a\ -\xcf\xfa\x11\x7a\xd1\xab\x20\x68\x04\x0d\xd9\x33\xbb\x3c\x70\x87\ -\x53\x17\x60\xf1\x5d\xdd\xc7\xa2\x11\x34\x98\xc4\xe9\xf2\xc0\xcd\ -\x46\x5d\x80\xac\x3a\x0c\xdb\x8b\x5e\x13\x41\x23\x68\xc8\x96\xf1\ -\x16\x9f\x50\x0f\x20\x2c\x1b\x41\xd0\x17\x21\x68\x04\x0d\xd9\x31\ -\xbf\xaa\x61\x32\x1c\x08\x64\x54\x48\x41\x7f\x27\x43\x64\x65\x2b\ -\xdf\x02\xb2\xcc\x7d\xa8\xc4\x80\x6f\x67\xb1\xa3\xc5\x91\x3a\x92\ -\x09\x41\x83\x29\x9c\x26\x0f\xda\x5a\xd4\x05\xd8\xf8\x53\x84\x5e\ -\xf4\xf9\x86\x97\x65\x5a\x8b\xe5\x2d\x8e\xb0\xb8\xd4\xe2\x45\x9f\ -\xb2\x8c\xb6\x38\x08\x41\x83\x29\x3c\xc5\xea\x41\x70\x61\x26\xd5\ -\xbf\xed\x59\x18\x41\x8f\x51\x66\xe5\x8b\x9e\x5d\xd2\x15\x1c\x21\ -\xe3\xe9\x9f\x85\x28\xc3\xd3\x16\xfb\x31\xc4\x01\x26\x8e\x3f\xdf\ -\x4f\x3d\x80\x0b\xf7\x47\xe8\x45\x1f\x50\xe0\x50\xc5\xa6\xaa\x7f\ -\xe7\xf2\x3b\x2d\xde\x89\xb0\x22\xf2\x53\x8b\x53\x2c\x96\x61\x0c\ -\x1a\x4c\x8e\x79\x5d\x83\xba\x00\x9f\xc5\x4b\x61\x78\x28\xe5\x73\ -\xdf\x2c\x6f\x77\x17\xba\x70\x9d\xe4\x8d\x79\x57\xc5\xdb\xc2\x4b\ -\x1f\xf7\xaf\xf2\x96\xc0\x24\x21\x18\x4b\x17\xc3\x1b\xe0\xc3\x92\ -\x11\xa4\xf7\xab\xc5\x3c\x29\x9e\xfb\x6e\x95\x6c\x1f\x45\x27\x4f\ -\x5a\xec\xaf\x42\x66\x6a\x44\xd0\x60\x02\x7d\xf2\x5a\x48\x5d\x40\ -\xd2\xa5\xdf\x9a\x13\x52\x3c\xef\xae\x29\x48\xf9\x3f\xf2\x16\x30\ -\x98\x30\x3b\x28\x1b\xbf\x93\x46\xbc\x1d\x75\x01\x3e\x9c\xa1\xa2\ -\x6d\x2e\x9b\xd6\x79\x87\x24\xe8\x29\xeb\xf1\xe8\x61\xc4\x41\x43\ -\x99\xb9\x5d\x1a\xf4\xa2\xd4\x05\xf8\xb0\x72\x44\x41\x6e\x9c\xd2\ -\x79\x9b\x22\x9c\x53\x4f\x0a\x9e\x65\xb1\x36\x0b\x55\xa0\x4a\xd1\ -\x1b\xa3\xa9\x07\x08\x60\x32\x8b\xaf\x23\xc8\x32\xe9\x6e\xf0\x93\ -\x4b\x64\x86\x7e\xc3\xfb\xc5\xe7\x3c\xe3\x65\xb2\x6f\x5f\x8b\x39\ -\x58\x49\x08\x26\x30\x9f\xe4\x3e\x18\x6e\xb1\x83\xc5\xb9\xb2\x48\ -\xc0\xce\x08\xf9\xfd\xd6\x16\x0b\x7a\x1c\x67\x4e\x69\xe4\x87\x55\ -\xb0\x8e\x9a\x64\x75\xe4\x26\x3e\xf5\xd4\xa8\x23\x4d\x8b\x7c\x7e\ -\x4a\xda\x97\x27\x57\x46\x10\xf4\x87\x11\x8f\xbd\x88\x8c\x37\x5f\ -\x63\xf1\x71\xc8\x73\x5c\x61\x31\x2f\x4b\xbd\xa1\x28\xa6\x96\xd8\ -\xcc\x4d\x44\xa2\xd7\x5a\xbc\x24\x33\xe5\x51\xc7\xe4\xde\x54\xfd\ -\xfb\xc8\x1d\x2c\x32\x6a\x92\x98\x55\xfd\xbb\x81\x25\xae\xa3\x69\ -\x24\xca\x40\x2f\xd3\xdd\xc5\xe2\x62\x8b\xe7\x54\xf8\x4c\x6c\x4e\ -\x74\xba\xd5\xc7\x2c\xce\xb6\xd8\xd6\x62\x25\x8b\x59\x68\x8b\xff\ -\xc7\x5f\x22\x46\x73\x2c\xe6\x73\xcf\x56\x96\x2f\xcd\x5b\x2d\x7e\ -\x70\xfc\x6d\x8f\x44\x6f\x1c\x63\x71\xb4\xc5\x2d\x16\xaf\xc9\xef\ -\x7e\x92\x7b\x33\x38\x8f\x32\x23\x68\x70\x63\x73\x89\xf3\xfc\x58\ -\xa5\x1b\x62\x64\xe7\x5b\x8b\x71\x16\xb7\x95\xb0\x7e\xf4\xc3\xd9\ -\x6a\xa1\x64\x91\x41\x5f\xc6\x7c\x23\xf5\xa4\xbf\x00\x66\x24\x5e\ -\x3e\x34\xa7\xdb\xfe\x76\x21\x11\xbc\xdb\x3d\x7b\x4b\x3a\x20\x4b\ -\x04\x9c\x7f\xa7\xbc\xe7\x4a\x10\x34\xd8\xa5\x73\xaa\xf4\x74\xfb\ -\x72\x44\x27\xc3\xf9\xb3\xc5\x74\x86\x8f\x7f\x2e\x23\x0f\xf1\xc3\ -\x39\xd7\x8f\x93\x2f\x2c\xce\x91\x1e\x60\xdd\xda\xe8\xcc\x16\x3f\ -\x47\xa8\xab\x4f\x24\xfa\xe3\x39\x8f\xdf\xdf\x64\x7a\x99\x11\x34\ -\xb4\x49\x0f\xa2\xaf\x60\x3e\x13\xf1\xcc\x6a\x48\xbd\x4c\x25\x6f\ -\x12\x37\x45\x8c\xc1\xcd\x93\xc7\x64\xd1\x43\x9d\xda\xeb\x03\x11\ -\xea\x47\xf7\x94\x7f\xf3\xf9\xfd\x2f\x12\x45\x34\x17\x82\x46\xd0\ -\xa6\xb1\xae\xc5\xbf\x0d\x94\x8e\x96\xe1\x56\x05\xd6\xcb\xe2\xaa\ -\x3f\xd5\xe3\x47\x86\x4a\xd9\x2b\xe6\x76\x48\x4d\xda\xed\xc1\x1e\ -\x75\xa0\x23\x3c\x1e\x94\xa1\x39\xfd\x46\xb6\xa2\xed\x6f\xb6\x96\ -\xc9\x3f\xaf\xde\xf7\x0f\x72\xdf\x11\x34\x82\x2e\x9c\x55\x65\x3c\ -\xd3\x74\xe9\xdc\xe3\x96\x3c\x26\x23\x96\x96\x45\x05\x0f\x95\x48\ -\xca\x6e\xdc\x28\x91\x20\x55\x6f\xc3\xbf\xda\xa2\x28\xf4\x44\xdf\ -\x50\xbf\x7c\x16\x6a\xe2\x84\x46\x3b\x88\xc4\xdf\x91\x10\x39\x7b\ -\xfd\x1d\x86\xa0\x11\x74\x91\xfc\xb5\x84\xd2\x39\x3a\xc3\x21\x8c\ -\xed\x32\xc8\xb5\x50\x34\xba\x37\xb8\x7d\x45\xdb\xef\xc2\xd2\x3b\ -\x4e\xa3\x5d\x0c\xb2\xc5\x55\xdb\x27\xc3\x4f\x42\xd0\x08\x3a\x6f\ -\x36\xf0\x99\x28\x29\x03\x77\xc9\x78\x70\x1a\xf9\x79\x77\x94\xd9\ -\xfd\x8f\x2a\x26\x66\x27\x7a\x3c\x7f\xfa\x0a\x84\x79\x36\x52\x78\ -\x76\xd9\x16\x8c\xbc\x9f\xf0\xb8\x3a\xa2\xe3\x79\x5b\xaf\x79\x72\ -\x69\x5f\xef\xcb\xcf\x6e\x33\x65\xd2\x1a\x41\x57\x9f\x8b\x2a\x24\ -\x9d\x7f\xc4\x7c\x85\x5f\x5d\xf5\xe7\xdb\xfd\xb6\xe2\x52\x76\xf2\ -\x86\xc5\x0c\x25\x94\xb2\x5e\xbd\x77\x87\x4f\xb9\x8e\x4f\x70\xfc\ -\x81\x12\xdd\xd1\xe7\x12\x83\xbf\x92\xed\xe7\xcf\x29\x03\xb6\xd0\ -\x42\xd0\xd5\x0e\x9b\xbb\xbf\x82\xd2\xf9\x51\x64\xbb\x96\xcf\x02\ -\x8e\xd9\x24\x66\x76\x84\x9a\xb0\x53\x4b\x5d\x79\x43\x5e\xe7\x4d\ -\x6e\xab\x4b\x59\x6c\xe3\x22\xe5\x0f\xe5\x4b\x59\x6f\x1e\x7b\x9d\ -\x6d\x08\xc7\x2f\xea\x62\x63\x59\xb1\xe9\xc6\x89\x2e\x11\x4b\xce\ -\xe1\x20\xfb\x36\x54\x0b\x21\x68\x04\x9d\x05\xdb\x05\x84\x17\x55\ -\x85\xaf\x65\x95\x97\xfd\x21\x7c\xa8\x86\x3d\xe5\x30\x5f\x6a\xa6\ -\x6d\xa8\xba\x89\xdc\xaf\x5e\xc7\xb5\x3e\x23\x0b\x4a\x9c\x4b\xa8\ -\x1b\xbf\x0f\xda\x75\xe7\xfa\x88\x75\xf3\xb1\xc4\x57\x0f\x90\xb7\ -\xb3\x46\xdb\x39\x8b\x21\x0e\x04\x9d\x05\x3b\x22\xa4\x5a\xf0\xb3\ -\x8d\xb0\xab\x11\x8b\xcc\x18\x38\xbd\x84\x76\x5e\xeb\xd2\x79\xb8\ -\x4f\x26\xff\xbc\xf2\x5a\x1c\x62\xfb\x6c\x50\xdc\x77\x9c\x85\x44\ -\x7a\x59\xfe\x0d\x6a\xc2\x9e\x81\x3f\x99\xf2\x85\x86\xa0\xab\xc5\ -\xd5\x88\xab\x12\xe8\x31\xd2\x7f\xa9\xfe\xed\x96\x0e\x91\x25\xde\ -\x43\x6c\x0c\x92\xde\x5e\x83\x15\x1c\xbf\xd7\x39\x3c\x0e\x92\x48\ -\x07\x3d\xe1\x75\xa7\x84\xa6\xbd\x2a\x91\x10\x79\xb5\xc7\x35\x64\ -\x75\xea\x6b\x2e\x79\x59\xf6\x97\xeb\x9e\x36\xc4\x71\x6e\xb2\x2d\ -\x2c\xf1\xcb\x18\x37\xad\x8a\x96\xf1\xce\x8b\xdd\x88\xe2\x40\xd0\ -\x59\xac\x08\x44\x6e\xe5\xe4\x05\x19\x6b\xd5\xc9\xa3\x9a\x2d\xa6\ -\xc8\xa0\x7d\x4c\x2e\x63\xb9\x59\xc7\x49\xeb\x2c\x87\x1d\x6a\xd2\ -\x84\x5a\x8f\x49\x98\x67\x9c\xec\x6f\xaf\xca\x31\x1e\x0d\xf8\xdc\ -\x4a\x11\xeb\x7d\x9c\x0c\x65\xcc\x2d\x43\x65\xfa\x67\x9f\x13\x66\ -\x87\xa0\x91\x33\x38\x43\xe2\xca\xda\xf6\x56\x92\xd8\xe1\x47\x1d\ -\x65\xd2\x52\x3d\x54\xf5\x67\x2e\x9c\x3b\xe1\xc2\xaa\xc6\x31\x2f\ -\x51\xe9\xec\xba\x72\xbf\xbc\x95\xd8\xf7\x2e\x6c\x2c\x5a\xf9\x1b\ -\x82\x46\xd0\x69\xb2\x24\x82\xab\x04\x8f\xc8\x4a\xb7\x32\xb4\x39\ -\xbd\x72\xef\x3c\x97\x32\xe8\x58\xe5\x7d\x54\xba\xe9\x51\x2f\xb5\ -\x1d\x7f\xcb\x80\xcf\x7a\x0d\x6f\xe8\x31\xef\xb7\x25\x9e\xda\x2d\ -\x37\xf9\x5e\xb6\xcf\x36\x23\x68\x04\x9d\x66\xcc\xe8\x1b\xc8\xad\ -\x32\xe8\xd7\xeb\x3d\x0c\x0d\x83\x3b\x40\x86\x61\xec\xd7\xfb\x6f\ -\x89\xc4\xd0\x21\x72\x59\xa4\x41\xd5\xc7\xfc\x4a\xce\xf5\xdf\x80\ -\xcf\x6e\xab\xfc\x33\x00\xea\x2f\x94\xc5\x3c\x86\x7e\x1a\x19\x1c\ -\xdf\x55\xfd\x99\x0b\x11\x34\x82\x4e\x85\xcb\x91\x5a\x25\xb9\xb9\ -\xe0\x76\x35\x85\xf4\x92\x2f\x92\x10\x3d\xfb\xb5\xe9\x30\xc6\x9d\ -\x72\x8a\x72\x38\xd7\x76\xde\xa0\xcd\x57\x47\x29\xff\xac\x75\xf6\ -\xff\x8f\x96\xde\xfe\x32\x12\xeb\xdc\xf8\x79\x3b\xb9\x38\x10\x74\ -\x5a\x2c\x5b\x31\x29\x3d\xa6\xe2\xef\x42\x52\x45\x74\x8e\x90\x45\ -\x72\x6c\x4f\x8b\xc8\x10\x42\x87\x9a\x34\x65\xe7\xcd\xb2\x00\x64\ -\xa6\x08\xc7\x4b\xba\x75\xd7\x4c\xb6\x2f\x87\xfb\x02\x3e\xdb\x12\ -\xe3\x4d\xe5\x9f\x16\xbb\xab\x09\x9b\x16\xf7\xc9\x8a\x53\x04\x8d\ -\xa0\x53\xe1\xa4\x8a\x88\xe8\x25\xdb\x83\xa1\x77\xb4\x18\x83\x9c\ -\x27\x8a\x32\xc8\x72\x3b\xb0\xd5\xa5\x97\xea\x1c\xbb\xd5\x39\x97\ -\x77\x56\xfd\x7b\x4f\x46\xd9\xa7\x72\x3b\x09\xf5\x3c\x2b\xe1\x12\ -\xf3\x99\x65\xcc\x58\x5f\xcb\x7b\xaa\x7f\x7b\x34\xaf\xcf\xce\x13\ -\xa2\x1e\xf5\x10\xc7\x15\xf2\x05\x34\xbd\xc7\xa4\xe2\x67\x26\x3e\ -\xe7\x08\xba\xbc\xbc\x59\x01\x01\x3d\xe8\x52\xae\xad\x11\xf3\x44\ -\x3c\x95\x62\x9b\x99\x4e\x16\x8b\x5c\xe8\xf2\xda\x7f\xab\x08\x36\ -\x6c\x2f\x59\x4b\x73\x43\xe9\x28\xbc\xec\x38\xd6\x96\x09\xae\x71\ -\x5d\x35\xf1\x8e\x27\x53\x07\x7c\xfe\xc5\x10\x75\xa8\xc7\xaf\xf7\ -\x55\x93\x26\x8f\x1a\xaa\x0c\xdf\x5d\x05\x41\x97\x93\xf5\x2a\x20\ -\x9e\x33\x7d\xca\xf7\x24\x62\x9e\x88\xeb\x13\x86\xa9\x1d\xe6\x32\ -\x99\x3c\x4a\xe2\x92\x97\x0c\x39\x31\x36\xb3\x2c\xcf\xd6\x3d\xd1\ -\xd7\x5d\xc6\xa6\x5f\x94\xfc\x27\x71\x32\x0c\xee\x25\x2b\x00\x7f\ -\x91\xe1\x07\xbd\xf1\xee\xd2\x21\xfe\xf6\x86\x18\x75\xa9\x7b\xca\ -\x23\x2d\x8e\x93\x7a\x69\x2c\x2f\x9f\x19\x41\x23\xe8\xb4\xb8\xb0\ -\xe4\xc2\x79\x40\x05\xa7\x47\x45\xcc\x13\xb3\x62\x84\xf6\xa1\x57\ -\xe8\xe9\x94\xaa\x5f\xba\x48\x74\xdf\x18\x8b\x55\x7e\xaf\x26\xdd\ -\xf9\xba\x31\x04\x73\x83\xdc\xaf\xa8\x51\x21\x3a\x91\xd5\xfb\xb6\ -\x63\xe9\xe5\xd5\x27\xa8\x70\xdb\x4f\x4d\x19\x30\x29\x18\x95\xbd\ -\x4d\x7d\xd6\x11\x74\x39\xf9\x57\xc9\x27\x03\x83\x26\x90\x66\x50\ -\xd1\x36\x07\xad\x03\x7e\x11\x06\x4b\xc8\xd2\xee\x1b\x65\xbc\xd5\ -\x9e\x24\x49\xff\xdd\xf0\x84\x31\xd6\x2b\x3b\xbe\x5c\x0f\x91\x49\ -\xc3\x59\x23\x7c\x61\x1c\x2c\x4b\xce\x7f\x74\x0c\x3d\xe8\xed\xc5\ -\xd6\x8e\x70\x2d\x7b\x4a\x0f\x3e\x49\x5d\x5e\x25\x5f\x78\x2f\xc9\ -\xff\x67\x41\xd0\x08\x3a\x4d\x3e\x28\xa9\x64\xbe\x8f\x50\xc6\x6e\ -\xa4\x3c\x11\xef\x79\x48\xf9\x59\x97\xcf\x5e\x27\xe3\xc3\x69\xb6\ -\xb9\x2d\x55\xf8\x9d\xc4\xa7\x90\xf3\x9f\x6d\x31\xd6\x65\x88\xe1\ -\x74\x15\x2d\x95\xe7\x8c\xb2\x84\xfc\x81\x04\xf5\xa7\x87\x4f\xae\ -\xb4\x58\xcd\x76\x5c\x9d\xb4\xbf\xd7\xe4\x67\x1d\x41\x97\x8f\x15\ -\x4a\x2c\x99\x96\x08\xe5\x7c\x10\x29\x4f\xb2\x1a\xee\x2f\xb2\xac\ -\xdf\x99\xb1\xed\x71\x19\xd3\xdf\x22\x62\x28\x5c\x5a\xe8\x73\x6e\ -\x2a\xcb\xa4\x6f\x73\x11\x72\xa7\x5c\xf7\xd2\x31\x8f\x7f\x66\x0a\ -\xf5\xa7\xdf\xc8\x9c\x1b\xeb\xea\xfc\x1b\x97\x21\x68\x04\x9d\x26\ -\xc7\x95\x50\x2e\xdf\xc6\x78\x38\x1f\x40\xca\xa1\x92\x2c\x6d\x51\ -\x50\x3b\x1c\x2c\x93\x6c\x8f\x28\xf7\x4d\x02\x4e\x96\x58\xfd\x34\ -\xce\xb5\xa8\x9a\x90\x30\x29\xe9\x7e\x8d\x8b\x39\x16\xc2\x6c\x86\ -\xa0\x11\x74\xdd\x57\x0f\x3e\x2b\x39\x0e\xf4\x6b\xf2\x56\x0e\x0e\ -\x94\xb8\x59\xcd\xd1\x12\x51\xa0\x5f\x91\x5f\x41\xc0\xa1\x84\xf3\ -\x3f\xd5\xbf\x67\xa3\x9e\xfc\xd3\xbb\xcc\xcc\x91\xa1\x90\x37\x93\ -\x09\xea\x4f\x5c\xc2\xd8\x6e\x90\xb1\xee\xac\xb2\xe5\x4d\x9e\xd2\ -\x5b\xd5\xfb\xb6\x18\xed\x61\x6a\xe2\x84\x49\x08\x1a\x41\x27\xa6\ -\x8c\xbb\x50\xff\x1a\xf2\x73\xca\x16\xd2\xf5\x2b\x02\x8e\xbd\x7b\ -\x8a\x9e\x8c\xdb\x4f\x25\xdb\xea\x4a\xa7\x05\xdd\x45\x56\xdc\x7d\ -\xe3\x38\x87\x8e\xb8\xb8\x44\x86\x35\xf2\x9e\x60\xbb\x24\x85\x3a\ -\xfa\x63\x59\x9e\x77\x04\x5d\x3e\x9e\xa8\xb0\x5c\x06\x4b\x19\x9b\ -\x55\x3d\xb6\xec\xca\x83\xfb\x65\x6c\x58\x4f\xb2\x2d\xa8\xfc\x77\ -\xba\xde\x40\xde\x68\x1e\x71\x19\xff\x7e\x52\x16\xa5\x2c\x6b\xc0\ -\x33\x90\x74\x23\xe4\x93\x11\x34\x82\xce\x8a\x87\x4b\x22\x86\x71\ -\x2e\x33\xf8\xe3\x64\x52\xe6\x1b\x97\xcf\xdb\x93\xb1\x93\xdf\x3a\ -\x3b\x1e\x17\x61\xaf\x25\x3d\xe0\x8b\x3c\x56\xa5\xbe\x2d\x71\xc9\ -\xcb\x18\xfa\x1c\x1c\x9d\xe0\x4b\xfc\x42\x04\x8d\xa0\xb3\x60\x66\ -\x47\x9c\xab\xe9\x7b\xe6\xad\x25\xab\xc2\xec\xaf\xc6\x8d\xbc\x0d\ -\xce\xcf\x1f\x6e\x2b\x67\x07\x22\x2d\x04\x3d\x9e\x7d\x81\x32\x30\ -\x69\x90\x23\xe4\x4e\xc7\x60\x5f\x9b\xa0\x9c\xd7\x22\x68\x04\x9d\ -\x05\x73\x96\xec\x81\x9f\xcc\xd6\xdb\x69\xfc\x6c\x1a\xdb\xcc\xbc\ -\x7d\x3c\x7d\x79\x5b\x39\xe7\x97\x08\x05\xa4\x99\xfd\x78\xf5\xbf\ -\x64\xf1\x87\xa9\x3d\xe5\x29\x25\xb5\xc1\x69\x32\x19\xe9\x56\x0e\ -\x9d\x3e\xf4\x5e\x19\x9f\x0e\xb3\xc0\xe9\x5e\x04\x8d\xa0\xb3\x60\ -\x56\x35\x61\x5b\x78\xd3\xf9\xc8\xb1\x62\xf0\x58\x79\x6d\x9e\xca\ -\x51\xa6\x17\x64\x28\xc4\xed\x6d\xe1\x07\x24\x9a\x2a\xa3\x65\x7c\ -\xf9\x24\x89\xb8\x98\xcd\xc0\x36\x3e\x93\x2c\x2d\xbf\x4c\xb9\x6f\ -\x46\xd1\x2b\xe3\xea\x27\x49\x5c\xf8\x10\xdb\x97\xfe\x00\x79\x4b\ -\x0b\x93\x3c\x69\x32\x04\x8d\xa0\xb3\xe0\x71\xc3\x25\xd0\xc8\x91\ -\xf0\x77\xe5\xbe\x03\x8c\xdb\x86\xa8\x4b\x2a\xef\x1c\xc5\xcf\x23\ -\xd6\x58\xbc\xa5\xfa\x77\x40\xd9\x53\xc2\x1b\x9d\x22\x33\x85\x21\ -\xf2\xe5\xfd\x98\x84\xef\x8d\x96\xc5\x2d\xaf\xcb\xf5\x1f\x29\xe1\ -\x98\x6b\x86\xf8\x42\x09\xdb\x81\x19\xab\x0c\x4d\x8e\x84\xa0\x89\ -\xe2\xc8\x92\xcb\x25\x3c\x4b\xff\x7b\xa7\x94\xca\xab\x85\xfe\x35\ -\xc2\x0d\x9d\x88\xfe\x7c\x8b\x35\x0c\x6e\xbf\x93\xc9\x90\xc5\x95\ -\x8e\xe1\x88\xb7\x65\x09\x78\x8b\x4a\x96\xec\xff\x99\x90\x75\xb5\ -\x3a\x82\x46\xd0\x59\x70\x9f\xa1\x72\x18\x2f\x8b\x09\x86\xc8\xff\ -\xd3\x5c\x00\xa0\xb3\x9f\xbd\x8c\x80\x7d\xdf\x5a\xf6\x2d\x68\x99\ -\x77\xd8\x9d\x54\xf4\x22\x97\x11\x32\xf4\xd5\xb8\x6e\xbd\x07\xe0\ -\x51\x16\x0b\xa7\x78\xfe\xb0\x2b\x50\x37\x41\xd0\x08\x3a\x0b\xae\ -\x37\x54\x12\x1b\xc9\xf5\xdd\x2b\x93\x4f\x59\x94\xfd\x25\x64\x3c\ -\x09\x27\x1a\xd0\x26\x75\x66\xb8\x53\x04\xe7\x4a\xc2\x55\x5d\x3a\ -\x15\xfa\x3e\x0e\xcd\xe8\x5a\xc2\xe6\xed\x38\x12\x41\x23\xe8\x3a\ -\xe4\x82\xd6\x2b\xfe\xec\x99\xd3\x46\xca\x4a\xb6\x34\x97\xf8\x6e\ -\x28\x33\xf4\x1f\x20\xe4\x89\xc6\x98\xd7\x28\x70\x98\x62\x0d\xc9\ -\x0b\xf3\xa9\x5c\xcf\xeb\x32\x3c\xd1\x98\x7c\x1b\xe8\xb2\xea\x4f\ -\xf7\xf4\xb7\xcd\xf8\xda\x8e\x09\x59\x7f\x87\x20\x68\x04\x9d\x05\ -\xdb\x1b\x26\x8a\x66\x99\x7c\x5a\x4a\xae\xef\x1c\x8b\x1d\x52\x2a\ -\xeb\xc9\x88\xd8\x95\x73\xe5\x8b\x2b\xef\xb6\x37\x9f\xe4\x4c\xf9\ -\x58\x4d\x9c\x06\x75\x23\x35\x69\x6a\x52\xfb\x22\xa5\x87\x72\xfc\ -\x32\xd9\x2f\xc2\x7c\x09\x82\x46\xd0\x99\xc4\x42\x9b\xb0\x0c\xfa\ -\x43\xdb\x43\xd7\x6e\x5b\x09\x78\xa6\x4a\xb6\x1b\xb5\x4e\x64\x73\ -\x9e\x6d\x36\xfe\x05\x39\xe6\x11\x36\xf4\xe2\x17\x9d\x20\xe8\x45\ -\x8f\x55\x89\x55\xe6\xa8\x02\xda\xdc\x1c\x22\xe6\xf1\x8e\x90\xbd\ -\x83\x1c\x9f\xd3\x21\x94\x07\x3b\x42\x2d\x77\xcb\xf9\x5a\x77\x8a\ -\xb0\xa2\x12\x41\x23\xe8\x4c\x28\x3a\x99\xfd\xad\xb2\xa2\xab\x71\ -\x3d\xe7\xc9\xcf\x75\x9e\x86\xad\x63\xc6\x98\xea\x1d\x3f\xae\x90\ -\xe3\x8c\x91\x57\xd0\x28\x71\xba\x8b\xca\x17\x45\x6f\x45\xc5\xfc\ -\x9e\x8c\xe7\xe6\xd9\xce\x16\x97\xde\xaf\xbd\x37\xac\xbf\x14\xb7\ -\x73\x89\x67\xdf\xc9\x36\x01\xf8\xb8\xc4\x32\x17\xf1\x6c\xac\x1b\ -\xb2\x03\x73\x27\x82\x46\xd0\x59\x71\x64\x41\x92\xd0\x0b\x07\x36\ -\x77\xb9\x9e\x9b\xd5\x84\xb4\xa2\x6e\x0b\x4e\x74\x2f\xea\x1a\xd5\ -\x9f\x42\x74\x8c\x48\x54\x47\x65\x3c\x25\xbc\x6c\x5b\x84\x70\x58\ -\x8c\xfa\x18\x2a\xe1\x65\x1f\xd8\xe2\x5c\xab\x24\xe7\x0f\x64\x4c\ -\x37\xaf\xf6\x35\xbb\xbc\xb5\xd8\x33\x0a\x7e\xec\x71\x6f\x36\x90\ -\x7b\xd8\x67\x8b\x7f\x9f\x3e\xc6\x39\x07\x4a\x4f\xdd\xce\xbc\x72\ -\x6f\x07\x67\xb0\xda\xb6\xab\x0c\x8b\x55\x10\x74\x39\x99\xbb\x20\ -\x51\x3c\xe5\x31\x89\x67\x1f\x93\xfc\x93\x6d\xbc\xf2\x46\x47\x0c\ -\xf3\x3b\x32\x71\x74\xa3\xe3\xb8\xdf\x48\xcf\x27\x4c\xd9\xa7\x97\ -\xde\xd9\x15\x6a\xe2\x9c\xd1\x3a\xa6\x56\xef\xe6\xa1\x13\xd8\xdf\ -\xa2\xaa\x93\x0d\xef\x52\x8b\x69\x73\x6a\x57\x73\x49\x54\xc8\x68\ -\xdb\xf9\x3f\x91\xa1\x0c\xe7\x35\xe8\x79\x06\x67\x7e\x66\xbd\xad\ -\xd4\x6b\x12\x8f\xfd\xb4\xea\xcf\x80\x17\x06\xfd\xc5\x3e\x4e\x86\ -\x50\xc6\x3b\x86\x52\x3a\x23\xc6\x2c\x4f\xa7\x26\xcd\x57\xed\xc6\ -\x97\x39\xd6\x2b\x82\xae\x21\xb7\xe4\x1c\x67\x7b\xb7\x4d\x7a\x2f\ -\xa8\x09\x3b\x39\x4f\xae\x26\xdd\xe5\x63\xa8\x63\x45\xd7\xd9\x2e\ -\xaf\xc4\xab\xaa\x09\x1b\x88\xea\x95\x63\xeb\x28\xff\x24\x51\x7f\ -\xf0\x88\x71\xd5\xc2\xb7\x6f\x3a\xaa\x87\x59\xbe\xaf\x88\x9c\x47\ -\xe4\xd8\x9e\xb6\x72\x59\x10\x74\x83\x4b\x6f\x78\x45\x91\x66\x1e\ -\xe5\x3f\x30\x66\x59\x9e\x0a\x71\xec\x31\x22\x73\x04\x8d\xa0\x0b\ -\x9d\x0c\x49\x92\x4b\x43\x4f\xf8\xd8\x37\xf7\xd4\xc9\xd9\x75\x12\ -\xf7\x9b\xa4\xa7\xb5\xad\xc4\xbe\x3a\x97\xd1\x3a\xff\x3f\x83\x47\ -\x19\x96\x73\x7c\xf6\x0a\xdb\xb8\xb3\x1e\x53\xde\x47\xce\xe5\x9c\ -\xdc\xd1\x89\x73\x96\xf7\x88\xc7\xfd\xae\x22\xe3\xcd\x1b\xe7\xd4\ -\x8e\x86\xba\x7c\xd9\xeb\x37\x9d\x9d\x1d\x9f\xd3\x0b\x3b\x2e\xc8\ -\xa9\xfc\xba\x1d\x24\x49\xde\x14\x26\xd3\xdd\x57\xf4\xa0\x11\x74\ -\xd6\x89\x93\xb2\xda\x75\xe4\xfa\x10\xe3\x88\x8b\x84\x5c\xdd\xf7\ -\x63\x40\x54\xc7\x15\x2e\x0f\xce\x8b\x8e\x9f\x3d\x22\x5f\x48\x73\ -\xf9\x1c\x67\x8d\x8a\xf4\x9a\xcf\xcf\x49\x1c\xb3\xb8\xd4\x7d\x9f\ -\x0c\x5b\x4c\xe3\xf8\xdc\x45\x39\x96\xff\xaf\x29\x94\x6d\x44\x88\ -\xf3\x7c\xc1\x18\x34\x82\xce\x9a\xa3\x32\x78\x40\xee\x0e\x38\xe7\ -\xea\x92\xc4\xc6\x2d\xec\xee\x45\xe1\x19\xe9\xe9\x36\x86\x44\xbc\ -\xb6\x18\x5a\x53\xb9\xef\x3d\xa8\xc7\x23\x75\xc6\xb2\x1d\x43\x2e\ -\x03\x5e\x45\x85\xcb\x62\x66\xf2\x8e\xdd\x7a\x23\x86\x4d\x73\x68\ -\x33\x33\x4a\xbd\x7e\xae\x82\x77\x1a\xd9\xc2\xe3\x73\x59\xf0\x55\ -\x8a\xe5\xdf\x21\xc4\xf9\xbe\x51\x66\x66\xf3\x43\xd0\x15\xe3\xa3\ -\x14\x1f\x92\x73\x7c\x26\xe6\x76\x95\xd5\x6b\xf6\x8d\x60\x4f\x95\ -\xb0\xba\x85\x5d\x16\x4e\x9c\x60\x13\xb4\x73\x51\x80\x9e\x9d\xbf\ -\x5a\xa2\x36\x74\x84\x82\xde\x8b\xf0\x70\x19\x87\x8e\xfa\xd0\x1c\ -\x52\x62\x31\xbf\x20\x43\x45\x8b\xe4\xd4\x56\xb6\xf1\x10\xee\x97\ -\x6a\xe2\xdd\xad\xf5\x98\xff\x3d\x39\xd6\x83\xde\x28\x60\x50\x8a\ -\xe5\xdc\x28\xe4\x79\xd7\x47\xd0\x08\x3a\x6b\x76\x4d\xe9\x21\xb9\ -\xc7\xe7\x1c\xba\x21\x5f\x25\xcb\xcc\x37\x08\x31\xfc\xf1\x77\x35\ -\x69\x0e\xdf\xa9\x1d\x82\xde\x54\x25\xdb\x81\x7a\xda\x1c\xc7\x44\ -\x93\xf0\x9d\xbc\x4e\xbf\x20\x75\xac\xbf\xd4\x86\xa9\x74\x13\x04\ -\x85\x49\xe9\xe9\x95\xa6\xf6\x15\x09\x4d\x6b\x7c\x76\x1e\x19\x83\ -\xce\xab\x7e\x9e\xce\x60\xb2\x6e\x21\x47\x24\x88\x17\xeb\x21\x68\ -\x04\x9d\x35\x3a\x3a\x22\x69\x62\xfb\xf3\x42\x9c\x23\x6c\x0f\xed\ -\x2d\x8f\x73\x4c\x9f\x52\x79\x75\xfa\xd1\xbf\x49\xe4\x47\xd1\xf2\ -\x1d\x2b\x43\x3a\x4a\xae\x69\x7f\xd5\xbf\xcd\xd7\x5a\xb2\xc8\x43\ -\xf7\x0a\x9b\x54\x71\x79\x98\xb7\x09\x98\x27\x38\xc9\x31\x0e\xbb\ -\xb7\x44\x37\xe4\x55\x7f\x4f\x66\x34\x0e\x3c\x53\xc8\xf3\xaf\x83\ -\xa0\x11\x74\x1e\xfc\x29\xe1\xaa\xc0\xa4\xe7\x9f\xc7\x63\x5c\xda\ -\xbe\x07\x5c\xd2\xdc\x11\x3a\x42\xe3\x74\x55\x6c\xc2\xa4\x77\x45\ -\xc6\xfb\x88\x84\x07\x1a\xd8\x16\xf4\x17\x58\xab\x0a\xce\xfc\xb7\ -\x9d\xe3\xef\xf6\xcf\xb9\x2e\x5f\xc9\xb0\x0e\xf4\xdb\xd5\xdb\x08\ -\x1a\x41\x9b\xc4\x0d\x11\x1f\x10\x3d\xee\x78\x40\xc2\x73\x0e\x94\ -\x15\x82\xce\x63\x7f\x22\xc3\x0f\xc3\x24\x2e\x39\xae\x90\xf5\xb0\ -\x8a\x4e\x5f\xfa\xdf\x82\x84\xfc\xa2\xe4\xfd\xd8\x45\x26\x22\x4d\ -\xbd\xf7\x0b\x48\xf4\xc3\x8d\x21\xbe\xc0\xfe\x2e\xbd\xfb\xc6\xdf\ -\xea\x31\xff\x3b\x72\xae\xd7\x31\x09\x87\xb7\xc2\x70\x3f\x82\x46\ -\xd0\xa6\x11\x76\x42\xe6\xfc\x14\x66\xb0\xb7\x71\x44\x21\x7c\x25\ -\x3d\xcc\x63\x52\x18\x53\x5c\xb3\xc0\x5e\xf2\x4b\x12\x67\xbd\x56\ -\xc1\xc3\x56\x8b\xca\x92\x6b\xe7\xef\x66\x93\xdf\x6d\x29\x31\xe8\ -\xf7\xa8\x70\x1b\xa5\xbe\xee\xd2\x6b\xde\x3a\xc7\x28\x0d\x3b\x8b\ -\xe7\x50\x87\x8f\x21\x68\x04\x6d\x1a\x1b\x8b\x28\xdd\xc6\x4a\xaf\ -\x90\x31\xc6\x29\x53\x3a\xd7\xec\xb2\xc8\xa1\xb1\x08\x65\x4a\x8f\ -\x90\xbc\x4b\x54\xb4\xdd\x2b\x06\xe7\x2c\x8b\x1e\x19\xe6\x39\x5a\ -\x65\x97\x44\x3e\xce\x2b\xfa\xfb\x12\x43\xfe\x9c\x4c\xf0\x3d\x2e\ -\x13\x6a\x51\xf3\x8c\x3c\x2f\xe1\x73\x93\x39\x26\x69\xcf\x2a\xe8\ -\x0b\x30\xaf\x05\x38\x08\x1a\x41\x1b\xc7\x40\xc7\x72\x5d\xfd\x90\ -\x1f\x21\x0f\x64\x9a\xf2\xd0\xbd\xcb\x7d\xa5\x27\xa7\x7b\x7b\x4b\ -\xfb\xe4\x76\x68\x5c\xcb\x48\x97\x1e\x9c\x1b\x97\xe7\x20\x89\x97\ -\xe5\x8b\x63\x53\x83\xef\x65\xd2\x31\xe1\x3b\x95\x7b\x46\xb9\x5d\ -\x0a\x5c\x0a\x7f\x52\x8e\xf5\xf7\x24\x82\x46\xd0\xa6\x4c\x0a\x6d\ -\xe6\x18\x73\x6b\xac\xbc\x9b\x2a\xa5\x73\xac\x20\x13\x63\x7a\x8c\ -\x73\xb4\x63\xf2\xaf\x91\x59\xef\x42\x0f\x51\x9f\xee\x78\x28\x46\ -\x4a\xde\x07\xaf\x5e\xf9\x8f\x19\x88\xe1\x47\x59\x80\x73\xac\x41\ -\xbd\xe4\x30\x44\xd9\x2c\xf7\x4b\xe9\x6d\x5f\xa2\xdc\xd3\x92\xae\ -\xed\xb2\x6c\x3e\x4f\xba\x72\xae\xbb\xdb\x10\x34\x82\x2e\x3a\xa3\ -\xdd\xa5\x8e\x06\x77\x41\x8a\x01\xff\x8d\xa8\x89\xf7\x7c\x1a\xf8\ -\xd9\x22\x3d\xfb\xcf\x3a\x1c\x4b\x95\x07\x29\xef\xd4\xa5\x7f\x71\ -\x9c\x33\xab\xc9\xaa\xb1\x29\x86\xf9\xe5\xc9\x11\x2e\x65\xe9\x15\ -\x19\xbf\x28\x4b\xf2\x8f\x92\xd8\xf4\x69\x7d\x56\xd5\x15\xbd\x13\ -\xfc\xa7\x05\xd4\xdd\x83\x08\x1a\x41\x17\xc1\x6a\x16\x97\xa9\x89\ -\x77\xb6\x38\xc6\x63\x42\x29\x2a\x4b\xc9\x32\xe0\x67\x43\x3e\x78\ -\x17\xb9\x2c\x4a\x69\x0c\xad\xec\x6a\x3b\xee\xab\x3e\xc7\xd0\xbd\ -\xfd\x75\x65\xd8\x24\x4b\x49\x6c\x58\xd2\x18\xf7\x75\x6c\xac\x29\ -\x5f\x34\x7e\xb9\x3a\xa6\x96\x37\x9e\xfd\x3d\x96\xd1\x17\xc1\xe6\ -\x05\xd4\xdd\x13\x08\x1a\x41\xe7\xc5\x8c\xb2\x02\x6d\x9c\xad\x71\ -\xdd\x6e\xb1\x58\x4a\x3d\xf1\x7d\x7c\x56\x9a\xf9\xf1\x71\xc0\x6b\ -\xf8\xc3\x32\xfe\xbd\x97\x01\x92\x58\xa7\xc2\xed\x43\x87\xac\xfd\ -\xce\xe2\x3a\xc7\x10\x94\x09\x9c\x5c\x50\x9d\x3c\xca\x52\x6f\x04\ -\x9d\x25\x93\x4b\x03\xb2\x4f\x76\xe8\x84\x40\x23\x52\x58\x26\xac\ -\x7b\x60\x5b\x48\xec\xf4\x0f\x19\x3f\xa0\xa3\x64\xcc\x79\x4c\x0d\ -\x05\xbd\xb0\x84\xb2\x4d\x99\xe0\x3e\xcd\x26\x4b\xb1\x37\x91\xb9\ -\x86\x2d\x64\xb2\xed\x14\x19\x57\x7f\xca\xf1\xc5\x6d\x12\xa3\x0a\ -\x7c\x7e\x1e\x0a\x71\x7d\xeb\x22\x68\x04\x1d\x05\x1d\x15\x71\xa0\ -\x63\x79\xee\xcf\x12\xd9\x90\x24\x3f\xee\xfc\xf2\x60\xeb\x3d\xfb\ -\x9e\xc9\xa9\x97\x35\x46\xa2\x24\x76\x91\x18\xdc\x71\x35\x11\xf4\ -\xc2\x8e\xe1\x85\x63\x42\x2e\x67\x6e\x4c\xc4\xde\x20\x62\x7b\x57\ -\xee\xd3\xd8\x90\x79\x25\x4c\x63\xac\x2a\x2e\x5b\xdc\x8c\x21\xda\ -\xb8\x7e\xf3\x9b\x05\x41\x23\x68\x3f\xe6\x93\x65\xda\xb7\xba\xf4\ -\x30\x95\x48\x35\x6a\x8f\x6b\x05\x19\x47\x6e\xf4\xb0\x74\x9c\xef\ -\xaf\x39\x3e\x98\x7a\x43\xdb\xdd\xd5\x84\x84\xfc\x1f\x18\x22\x8c\ -\xac\x05\xdd\xec\x98\x1b\xe8\x93\xe5\xef\x41\x7f\xb7\x85\x44\x38\ -\x54\x6d\x93\xdb\x0d\x0a\x7c\xae\x66\x51\xc1\x5b\x9e\x7d\x91\x42\ -\xfa\x01\x04\x5d\x01\x74\x63\x59\x42\xf5\xef\x50\x71\xb9\x8c\xcb\ -\xbe\xe1\x08\x27\xfb\x4e\xc6\x94\x0f\x8a\x20\x92\x25\x45\xc4\x67\ -\x48\xaf\xeb\xd1\x9c\x57\x85\x7d\x2d\xaf\xd7\xe7\xc8\xaa\x36\x3d\ -\xc1\xd8\x64\xbb\xbe\x83\x0d\x13\x46\x16\x82\xd6\x5f\x40\xc7\xbb\ -\x8c\xdf\xff\xe0\x98\x24\x75\x8b\x0f\x3f\x32\xc2\x64\x6c\xd9\xd8\ -\x26\xa7\x67\x6b\xb8\x2c\xc1\x9f\xcd\x65\xe9\x7b\x50\xa7\x84\x1d\ -\x55\x6a\x22\xe8\x86\x80\xb7\x11\x29\x5d\x28\x8b\x04\x74\x24\xc3\ -\x37\x1e\x79\x2a\x1e\x93\x70\xb4\x3f\x44\x58\x44\xb2\xbc\xac\x04\ -\xbc\x5e\x05\x27\xc2\xc9\x83\xef\x25\x3a\xe3\x6a\x79\x35\xdf\x59\ -\xbe\x34\x06\xa8\x49\x37\x85\x4d\x93\x7b\x64\xc8\xa4\x48\x41\xeb\ -\xfb\xf6\x4f\x8f\xf3\xe8\x5e\xf3\x3c\x1e\x7f\x37\x99\xb4\x91\xef\ -\x2b\x2a\xe6\xc6\x8e\x30\x79\x3d\x7b\xd7\xd8\x86\x53\x5e\x90\xff\ -\x1f\x2e\xf9\x53\xd8\xf2\xaa\xe2\x82\x9e\x56\x7a\x3a\xc3\x64\x18\ -\x42\x4f\xcc\x9c\x2b\xbd\xd5\xbb\x64\xc1\x85\x4e\xad\xa9\x77\x31\ -\xfe\x48\xa4\xf9\x9a\xc4\xa7\x8e\x92\xcf\x5c\x23\xbd\x62\xfd\x1a\ -\xab\x93\xb2\x87\x4d\x3b\xa9\x85\xbf\xbd\xc4\xc1\x5e\x2f\xe3\x91\ -\xa6\x3f\x98\x7a\x28\xe3\x04\x95\x5d\xa2\xf7\x87\x44\x8c\xd3\x4b\ -\x3e\x91\xa8\x7f\x9f\x64\x42\x68\x11\xb9\x1f\x27\x88\x08\xdc\x8e\ -\x7f\x57\x40\xcf\x71\x2f\x19\x6e\xea\xab\x30\xc7\x16\xf0\x9c\x26\ -\xd9\xc1\x05\x41\x97\x40\xd0\x03\x25\xbe\xf4\x2f\xb2\x32\xae\x5b\ -\x16\x02\x38\x6f\xa8\x1e\x3e\xd0\x29\x0c\x6f\x96\x15\x59\xfb\x59\ -\xec\x69\xb1\xb2\x4c\xc2\x25\xb9\x86\xe5\x65\x41\x41\x59\x64\x6c\ -\xdf\xdc\xf4\x22\x89\xcd\x8e\xb2\xd0\x24\xca\x98\xb8\xae\xf7\x6d\ -\x6d\x75\x75\x4e\x0a\x71\xd0\xab\xcb\x22\x1b\x1d\x9f\xbb\xa0\x0c\ -\xcd\xd8\x19\x2a\xf7\xa3\xdd\x47\xc8\xf6\xcd\x75\xb7\xf4\xb9\xb7\ -\xbb\xd4\x40\xcc\x7d\x52\x57\x45\x3c\xbf\x7f\x4b\xf0\x06\xc8\xae\ -\xde\x06\x09\xba\x49\x22\x21\x36\x90\xde\xb0\x0e\x64\xff\x45\xb9\ -\xef\xad\x37\x52\x7a\x4b\xba\xc7\xa6\x33\x6f\xcd\x9c\xe2\x70\xc8\ -\x42\x36\x01\x5c\xac\x26\xdd\x20\xd5\x04\x7e\x15\x31\x7e\x2e\x6f\ -\x06\x23\x65\xd2\xf2\x1a\x99\x00\x5c\xdf\x25\x74\xec\xd6\x90\xc7\ -\x3e\x22\xe4\x67\xbf\x96\x87\x6f\x06\xc7\x3d\x8c\xb3\x14\xdc\x99\ -\xde\xf2\x8f\x2e\x63\xc6\x76\xc2\x1c\xf3\x33\x69\x23\x5e\x2b\x14\ -\x87\xca\x22\x9c\xbe\x1a\x70\x46\xc1\x22\x8b\x33\x11\xfd\x91\x2a\ -\x6e\x23\x05\x04\xad\x26\xa4\xad\xfc\x9b\x0c\x39\xb8\x49\x48\xbf\ -\x96\xea\x9c\xc8\x43\x52\x7e\xdd\x99\x5a\xc2\xad\x36\xb1\x8d\x89\ -\x3d\x21\x93\x81\xa6\x3d\x5c\x6f\xca\xb0\xcd\x9e\xf2\xe5\x35\xd8\ -\x45\x3a\xf6\x86\x3c\xaf\xb0\xb1\x94\xed\x9f\xf2\xa5\x16\xe6\x5c\ -\x6d\x72\x8c\x91\x21\x7a\x63\xb3\xba\xd4\xeb\xb1\x31\xcb\x38\xda\ -\x71\x9c\xcd\x12\xd6\x99\xf3\x8b\xc3\xb9\x44\xfe\xce\x9a\x88\x59\ -\x73\x9c\x01\x22\x5b\x27\xe6\x5c\xc6\x00\x04\x9d\xbf\xa0\xe7\x93\ -\xfc\x04\x6e\x39\x24\xf4\xe4\xdc\x21\x29\xad\xc0\x9b\x46\x7a\x65\ -\x1b\x4b\x6f\xf8\x64\x59\xc9\xf5\xa8\x32\x63\x3b\x26\x2f\x7e\x10\ -\xa9\xee\x2c\x71\xd7\xf6\x57\xf1\x8b\x65\xf2\xf2\x7a\x49\x36\x73\ -\x9b\x44\x28\x8c\x96\x1c\x10\x49\x26\xb7\xee\xb4\x9d\xeb\x6e\x9f\ -\xfc\x1c\x7e\x1b\xa8\xbe\xae\xd2\x19\x6f\x8c\x2b\xe8\x7b\x94\x77\ -\x9e\xe8\xa9\x13\xbc\x6e\x97\x95\xbd\x0d\x92\xd9\x2b\x08\xda\x6c\ -\x41\xaf\x28\x82\x74\xbe\x86\x5e\x2c\x3d\xe9\x81\x31\x7b\xc2\xcb\ -\xc9\x04\xd1\x49\x22\x99\x67\x64\x2c\xfa\x33\x95\x4d\xe6\xb5\x2c\ -\x77\x90\xde\x59\xb9\xef\x64\x31\x43\xc6\xe7\xbe\xcd\x71\xbe\x11\ -\x3e\x8b\x1b\x96\xf0\xb8\x17\xeb\xa5\x38\x21\x14\x55\xd0\xfa\x4b\ -\x6a\x23\xe5\x9f\xd4\xe8\xa3\x1a\x89\xf9\x13\x19\xc7\x37\x49\x66\ -\x7b\x47\x2c\xc3\x7d\x08\x3a\x3f\x41\x1f\xa6\x26\xdd\x15\x63\xc7\ -\x18\xc7\x99\x5d\xa2\x36\xf4\xd8\xe2\xfd\x86\xf7\x84\xc3\xf2\x98\ -\x63\x92\xcd\x8d\x4d\x33\x0e\xc7\x73\x8e\xe1\xbb\x4d\xf4\xe9\x08\ -\x98\x6f\x65\x39\xbb\xdb\xd8\xe0\x4b\x3e\xe3\xcb\x1f\x66\x28\x68\ -\xbf\x57\xf8\x55\x54\xf1\x99\xe2\xf2\xe6\x3a\x59\xa9\x67\x9a\xcc\ -\x66\x50\xe1\x76\x96\x69\xf0\x28\x82\xce\x5e\xd0\x43\x1c\xe3\xcb\ -\x1d\x01\x3d\x1d\xb7\x24\x33\xad\x12\xbb\xdc\xa5\xa2\xef\x56\x61\ -\x2a\x2f\xca\x17\x54\xd8\xb7\x86\xf6\x0c\xe5\xbc\xa4\xcb\xf9\x76\ -\x75\xf9\xec\x7a\x32\x09\xd8\x08\xd9\xb3\xe7\x96\xde\xd0\x67\xa2\ -\x6e\x29\xe5\xbd\x93\x78\x12\x41\xeb\x54\xab\x5e\xa9\x5b\x97\x56\ -\xfe\x9b\xe4\x56\x11\xdd\xa6\x76\x32\x5c\x68\xa7\x44\x28\xcf\x0d\ -\x08\x3a\x5b\x41\xff\xd9\x56\xd9\x77\x3b\xc6\x53\x83\x86\x2d\x7e\ -\x2f\x21\x75\xdf\x55\xe8\x01\xfa\x52\xc2\xff\xf4\x17\xce\xb2\x12\ -\xfa\xa7\xc7\x4b\x8f\x96\xe1\x99\x06\xc3\x65\xf2\x72\x31\x5b\x98\ -\x51\x56\xbd\x40\xaf\x34\x93\x4e\xe1\x8e\xb3\x4d\x4c\x0e\xb3\x8d\ -\x95\x37\x3e\xff\xb4\xc7\xf1\xd7\x94\xdf\xff\x92\xa2\xa0\xff\xa5\ -\xfa\x93\xdb\x7b\xb5\x9f\x7d\x6a\x26\x66\xcd\xa9\x25\x59\x34\x36\ -\x7d\x84\x61\xc7\x43\x10\x74\x76\x82\x3e\xdf\xf6\x5a\xbc\x65\xc8\ -\x25\xb9\x7b\x88\x94\x3f\xad\xd8\xc3\xf3\xb0\x8c\xf1\xea\xbc\xcc\ -\x7a\x9f\xb9\x4e\x8f\x38\x6e\x2f\xa9\x3f\x15\xf1\xd5\x30\xca\xab\ -\xb0\xd7\xfd\xd8\xc0\xf1\xd9\x56\xc7\xef\x77\x97\x9f\x5f\x25\x31\ -\xd6\xbf\xf9\x3c\x60\xb3\x84\x78\x28\xbf\x72\x0c\x9b\xb8\x09\xfa\ -\xdf\x01\x0f\xed\x56\x05\x84\x44\x8e\x97\x70\x43\x2f\x7e\xce\xf0\ -\xdc\x4f\xca\xa4\xe7\x22\x25\x5b\xd9\x1b\xf6\xcd\xe6\x48\x04\x9d\ -\xbe\xa0\xa7\xb1\x85\x68\x1d\x1f\xf0\xd9\x29\x25\xde\xb5\x8a\xb1\ -\xa8\x63\x25\x26\x79\x2d\xf9\xe2\xf9\xda\xb0\xeb\x7b\x3d\xc4\xc2\ -\x1c\x7b\xdc\xb9\xdb\x67\xfc\x72\x79\x3c\xe5\x58\x68\x64\xcf\x94\ -\xf7\x8e\x9a\x74\x37\x0d\x67\x62\x9c\x4d\x1c\xc3\x30\x47\x04\x7c\ -\xb9\xe7\xd1\x86\xbe\x92\x89\xab\xe3\x65\xe5\xaa\x8e\x35\x9f\x5b\ -\xc6\x56\xbd\x98\x57\x3e\xb7\xbe\x84\x8b\xea\x30\xc4\x2b\xa4\xfc\ -\xaf\xc7\x68\x17\xff\xb1\x38\x53\x86\x9b\xca\x9a\x7a\x61\x78\x84\ -\x50\x49\x04\x9d\xa2\xa0\x27\x97\x1e\xf3\x37\x3e\xa1\x4e\x8d\x55\ -\x62\x47\xc6\x5c\x0e\x6c\x32\xff\x93\x71\xf2\x5d\x1c\x91\x18\x7a\ -\xa2\xea\x63\xc3\xae\x75\x3e\x15\xbc\x73\x4b\xe3\xb3\x07\xfb\x7c\ -\xee\xd4\x10\xcb\xb6\x67\xb3\xcd\x1d\x7c\x23\x43\x37\xca\xf1\xf9\ -\x9f\x1c\xd1\x21\x3b\xca\xcf\x6e\xf0\xb9\xd6\x39\x25\x74\x32\xab\ -\x4c\x80\x9f\x48\xaf\xbd\xc3\xb6\x84\x3d\x8b\x89\xb3\x55\x1c\x02\ -\x3f\x47\x04\x7e\xb3\xfc\xff\x58\x79\x3b\x58\xac\xc4\x52\x76\xce\ -\x2b\x85\x79\xb3\x38\x1e\x41\xa7\x27\xe8\x95\x45\xce\x7d\xd2\x98\ -\xdd\x42\xec\xce\x2f\xd9\x32\xe9\xb0\xab\xd5\x76\x11\xa1\x05\xe5\ -\x14\xbe\xda\x90\x6b\x3e\x38\xe4\xf2\xfa\xc6\xe7\xa7\xf6\xf9\xdc\ -\xd9\x2e\xc7\xbf\xda\xf1\x99\x99\xe5\xe7\xbf\x89\x54\x97\xf4\xb8\ -\xae\xad\xd5\xc4\xf9\xb1\xfd\xbe\x44\x4e\xca\x61\x7e\xe2\xb6\x8a\ -\x08\xd1\x44\x6e\x0f\x51\xff\x5b\x20\xe8\x74\x04\xbd\xa8\x9a\x74\ -\x97\x86\x85\x65\x81\xc8\xf9\x12\x93\x5c\xd5\xc9\x99\xd1\x21\x42\ -\xe4\xec\x5c\x55\xf0\xf5\x3e\x15\x61\x32\x27\x28\x16\xb5\xd3\x76\ -\xbf\xbf\xb2\xf5\x84\x9d\x71\xdc\x8b\x3b\x72\x6d\x5c\x9e\xa0\xc7\ -\x34\xcc\xd6\x11\xc8\x03\xa5\x4a\xb0\xed\x52\x09\xd9\x39\x44\xdd\ -\x0f\x41\xd0\xc9\x05\xfd\x57\x95\xfd\x96\x4c\xa6\xc5\x98\x2e\x21\ -\xe1\x4c\xce\x70\x35\xbd\xb8\x63\xaa\x10\x37\x75\xab\x82\xae\xfd\ -\x63\x15\x3e\x01\xba\xee\x35\xeb\x1d\xc8\xe7\x72\xf9\xdd\x14\xb6\ -\xa8\x8d\x4b\xe4\x67\x6b\xab\x09\xfb\x30\x3a\x3f\x3f\x9b\x48\xba\ -\xf1\x7f\xaf\x98\xe8\x7b\x7d\xae\x67\x8f\x82\xbf\xe8\xef\x2f\x8b\ -\x30\x4a\xc2\xcc\xf2\x65\x5e\xfa\x3d\x2a\x4d\x16\xf4\x96\x35\x12\ -\xf3\xb5\x2e\x3d\xa9\xfb\x5c\x3e\xd7\x23\xbd\xbc\xa0\x1b\xbb\x69\ -\xc6\x33\xfc\x6e\xec\x11\xa1\xe1\xf9\xed\xd1\xd7\x48\x57\xfa\xbe\ -\xcb\x70\xc7\x81\x01\xc7\xdd\x3e\x20\x26\xdb\x99\x3f\x63\xed\x10\ -\x79\x41\xf2\xe4\x24\xe4\x9a\x1a\xa3\x02\xea\x7a\x53\x04\x1d\x5f\ -\xd0\xdb\xab\xe0\x2d\x6b\xca\xce\xcf\x32\x09\xb5\x86\x8f\xc4\x1e\ -\xf3\x19\xbf\x6c\x56\xc1\x3b\xae\x3c\x9a\xe3\xab\x7a\x1a\x31\xac\ -\x0f\xd8\x42\xde\xdc\xc2\xbb\x82\xc6\xe1\x83\xe6\x20\x1a\x3d\xf6\ -\x43\x7d\x62\xab\x8b\xe6\x25\x79\x45\x47\xb2\xc9\x38\x22\x20\x0a\ -\x6a\x51\x04\x1d\x4f\xd0\x4b\xd4\xa0\xc7\x7c\x99\x0a\xb7\x33\xf7\ -\x2c\x29\x84\x0a\x3d\x94\x71\x59\x3e\x4c\xa9\x31\x36\x42\xd9\xfe\ -\x1b\xf3\xef\x57\x0b\x99\x7f\xe1\xf1\x92\xb4\x91\x73\x54\xfc\xdd\ -\xc0\xc1\x3f\xc3\xdd\xe8\xb2\x94\xc3\x44\x41\xbf\x5a\x61\x31\x5f\ -\x1f\x23\xc9\xcc\xf0\x80\xe1\x0a\xdd\xdb\x6c\x09\x38\xc6\x19\x21\ -\x17\x45\xc4\x29\x53\x1a\x31\xb3\x27\xaa\x09\x39\xa0\x17\x8e\x79\ -\x8c\x2b\x2b\xd8\x5e\x74\x02\xa6\xbd\x55\x09\x36\x37\x35\x90\xe5\ -\x22\xac\x2c\x45\xd0\x21\x05\x7d\x5a\x45\xc5\xfc\x80\x84\x0a\xc6\ -\xbd\x51\x1b\x85\x38\xc7\x3d\x01\x21\x6b\x41\x4b\x94\x75\x3a\xd1\ -\x5b\x84\xd1\x11\xde\x04\x92\x36\xc2\xbf\xdb\xbe\x20\x96\x48\x70\ -\x9c\x37\x2a\xda\x76\xee\xa0\x27\x1d\x7b\xa7\x24\xbf\xb6\x8e\xa0\ -\x23\x0a\x7a\xf3\x0a\x3e\x5c\xfa\x6d\xc0\xb9\xbb\xf3\xfc\x12\x8d\ -\xf0\x9a\xf4\x8e\x06\x87\xbc\x59\x27\x87\x38\xdf\xbb\x12\xf9\xe2\ -\x75\x8c\x4d\x02\x66\xb7\x3f\x90\x50\x3d\xdd\xe3\x6e\x93\x85\x31\ -\x5e\x9f\x7d\x2e\x85\x06\x78\x9c\x1c\xeb\x17\x35\x61\xdb\xac\xb8\ -\xb9\xb9\xbf\xac\x50\xbb\x19\x23\x5f\x5c\x1b\x20\xda\xd8\x4c\xe7\ -\xb3\x58\xed\x3b\x55\x82\xed\xae\x4c\x13\xf4\x7f\x2a\xf4\x80\xe9\ -\xb4\x99\x3b\xa8\x49\x53\x99\x9e\xe4\x58\x96\xdc\x60\x84\x2c\xeb\ -\x0d\xba\x61\x61\x13\xf5\x8c\xf2\x99\x44\x6c\x0e\x31\x9c\x31\x5e\ -\x24\xad\x5f\x13\x97\xf5\xc8\x6f\xa0\x65\x7e\x9e\x2c\x0e\x89\xd3\ -\xf8\xae\xb5\x1d\x6b\x93\x84\x0d\x79\xae\x8a\xb4\x1b\xfd\x25\x73\ -\x8c\x84\x0e\x22\xd9\xe4\x3c\xee\x93\x67\x64\x72\x04\x1d\x4d\xd0\ -\x8b\xfa\x44\x2d\x94\x29\x47\xc6\xf3\xb2\xb8\x64\x0a\xe9\x15\xb6\ -\x49\xd4\xc5\x98\x80\xbf\xfd\x51\x96\x36\x2f\xa7\xd2\x4b\xa9\xa8\ -\x7b\xdd\xb3\x7a\x2c\xfe\x79\x33\xe4\xb8\xf4\x41\x12\x57\xaa\x45\ -\x7c\xb8\x4b\xa4\xc4\x0f\xf2\x96\x30\x6b\x84\x86\x67\xcf\x07\xbd\ -\x6b\x0a\x0d\x79\x56\x09\x41\x1c\x53\xd2\x76\xf3\x94\xad\x9e\x11\ -\x6b\x7a\xdc\x59\xf6\x55\x9c\x26\x4e\x12\x8e\x28\xb1\xa0\xbf\x93\ -\xb1\xd0\xb7\x52\x78\x60\x97\xf2\xb9\x71\x7f\x8d\x70\x2c\x3d\x21\ -\x72\x98\x47\x9e\x86\xb0\x13\xb2\x3f\xaa\x09\xfb\x09\xda\xdf\x06\ -\x9c\x92\x3f\x2a\x44\xfc\xb3\x3d\x23\xdc\x7e\x09\x1a\xef\x64\x2e\ -\x0b\x5c\x66\x92\x65\xff\x87\x97\x20\x17\xcb\xeb\x12\x0a\xb6\x38\ -\x22\xcd\x8c\x11\xaa\xc4\xbb\xa9\x98\x1c\x07\x3d\x4c\x16\x2a\xf4\ -\xd5\x98\xb1\x01\xbd\xe9\xe3\x22\x1e\xef\x6e\x97\x49\xb8\xe9\x22\ -\x4e\xae\xfd\xe4\xb2\x58\x44\x47\x71\x5c\x24\x13\x2f\x8d\xb0\x3b\ -\x9d\x98\x67\x01\x97\x61\x88\x17\x6c\xc7\xba\x38\x41\xc3\x1d\x16\ -\xe2\x15\x75\x3a\xb9\x2e\x93\xee\xa9\xae\x9b\x2b\x54\xb8\x14\xb9\ -\x90\x5d\x02\x7f\x04\x9d\xc2\x4a\xc2\xa9\x65\x41\xc1\xb7\x35\x96\ -\xf4\xf8\x80\x5c\x0d\xbb\xc6\x58\x31\x78\xb5\x63\x62\x32\x4a\x4f\ -\xda\xbe\x2a\x4f\xbf\x26\xae\xea\xb8\x9e\xc5\x64\x91\x85\xde\x8d\ -\x64\x3b\x35\xf1\x7e\x71\xf6\xe1\x87\x0b\x12\x34\xda\xa7\x23\x2e\ -\x8c\xd1\xf1\xb0\xbf\x16\x74\xff\x74\xd8\xe0\xad\x72\x9f\x9a\x09\ -\x97\xcb\x1d\xaf\x6c\x88\x0f\x21\xe8\xf4\x92\x25\xcd\x15\x10\x4d\ -\x50\x07\xfe\xec\x53\x3f\xeb\xc6\x3c\xe6\x89\x8e\xe3\xfc\xa4\xe2\ -\x87\x10\x6e\xe1\xb3\x3a\xd0\xf9\x90\x24\xe9\x39\xb7\xca\x31\xec\ -\xb1\xd2\x0b\x48\x8f\xfa\x42\xe5\xbd\xc5\xd7\x90\x1c\x85\xac\x53\ -\x79\x9e\x20\x4b\x89\x67\x44\x92\x46\x0a\xfa\x26\x04\x9d\x7e\x3e\ -\xe8\x75\x25\xb2\x60\x4c\x4d\x25\xbd\x8f\x4f\xdd\x6c\x19\x33\x0e\ -\x58\xf7\x9c\x8f\xb5\xbd\xb1\x7c\x9f\x30\xa4\xf0\x62\xe9\x39\xcf\ -\x2e\x5f\x2a\xef\x39\x3e\x93\xa4\xe7\x3c\x54\x8e\xf1\xab\x84\x02\ -\x3e\x20\x63\xe0\x8d\xde\xf1\x55\x01\xb1\xad\x5b\xa4\x18\xa1\xf3\ -\xba\xf4\xc2\xce\x95\xc9\xbd\x1d\x64\xa8\x07\x21\x97\x43\xd0\x17\ -\x20\xe8\xec\xb6\xbc\x9a\x5d\x42\x91\xde\xac\xa1\xa4\x2f\x0e\x18\ -\x73\x8d\xbb\x0b\xf9\xe7\x16\xbf\x53\xfd\x89\xec\x3f\x49\x69\xfc\ -\xdc\xf9\xb3\x4b\x7c\xae\x3d\x68\xf5\xe0\xca\xca\x7f\xdf\xc1\x97\ -\x42\xb6\x9d\xe7\x02\xde\x04\x1e\xb2\xf1\x80\xbc\x65\x8c\x90\x71\ -\x77\xbd\x5a\x73\x15\x22\x2d\x4a\xc5\xd1\x19\x2e\xb0\x42\xd0\x21\ -\xd0\x9b\xbf\x76\xc8\x72\xe7\xba\x48\x5a\xef\x02\x32\xaf\xf2\xde\ -\x4d\xe2\x81\x04\xc7\xfe\xb7\x2c\x2f\x4e\xfb\x9a\x2f\xf4\xb8\xde\ -\x35\x65\xc2\x66\x5d\xe5\xbf\xfb\x8a\xdf\x6e\xeb\x3a\x4d\x68\x53\ -\x0a\xf9\x3a\x7e\x87\xd0\x2a\xc7\x75\x1e\xf7\xfa\x4a\x04\x9d\x8f\ -\xa0\xed\x2c\xa3\xfa\x37\xfd\x7c\x20\xe1\xab\x7a\x59\x56\x9a\xad\ -\x1b\x62\xf9\xb4\x09\xec\xef\x71\x8d\x7f\x93\xdf\xef\xed\x53\x8e\ -\x55\x42\x4c\x82\x46\x5d\xd4\x71\xb7\xc7\x71\x7a\x10\x5a\x6d\x16\ -\xaa\x9c\x87\xa0\xf3\x17\xb4\x9d\x26\x59\x2c\x72\x81\xac\x1a\x7a\ -\xbb\xa2\xd1\x20\x7e\x71\xc4\x17\x18\x3a\xb9\xa9\x85\xda\xd8\xca\ -\xaa\xd3\xe7\xfa\x97\x08\x11\x7d\x71\x4c\x8c\xb6\xb1\xa1\xcf\xf1\ -\x56\x40\x6a\x95\x41\x6f\x6e\xf1\x8e\xc7\x7d\x3e\x02\x41\x17\x2b\ -\x68\xaf\x5d\x16\xf4\x2b\xee\x5f\x24\x3e\xb2\x4b\x62\xad\xbf\x2b\ -\xb9\xa4\xff\x2d\xf9\x3d\x4c\xda\x5d\xe5\x25\x0f\xd9\x0d\xb5\xc5\ -\x4b\xdf\xe1\x73\xaf\xb6\x0b\x18\xd6\x08\x1a\xd3\x0e\xda\xcd\xc5\ -\xeb\x0d\xeb\x52\xc4\x56\x19\xe6\xf3\x69\x3b\x27\x20\x68\xf3\x04\ -\x1d\x24\xee\xcd\x54\xff\xbe\x75\xd7\x58\x3c\x2c\x93\x65\x65\x91\ -\xb7\x5e\x6e\x7d\xa4\x47\xf9\x56\x95\xf0\xaf\x3c\x17\x63\x4c\xee\ -\x13\x22\xd7\x98\x94\xf4\xba\x1f\x5b\x87\x38\xc7\xbb\x09\xef\xf9\ -\x93\x0c\x73\x54\x9e\xa5\x7c\xda\xcf\x5f\x11\x74\x79\x04\xed\xf7\ -\x8a\x34\x8b\xe4\xad\x58\x56\x66\xf1\xff\x28\xdf\xbe\x0d\x89\x3f\ -\x2f\x12\x1f\x6b\x50\x6f\x7a\x6b\x8f\xc9\xc3\x3c\x36\x43\xbd\x5c\ -\xa2\x6c\x9c\x4b\xb0\x6f\xb5\x7d\x66\x9c\x2c\x68\x71\xab\xf3\x8b\ -\x43\x9e\x67\xb1\x84\xf7\xf6\x61\x9f\x63\xcf\x83\xdc\x2a\x81\xdf\ -\x96\x79\xab\x23\xe8\xf2\x0b\x3a\x2c\xb3\x88\x94\xf4\xd8\xe6\x46\ -\xd2\x13\x1f\x21\x22\xb7\xf3\x4f\x11\xc3\xad\x2e\xbf\xb3\x73\x47\ -\x0a\xe3\xe5\xd7\xc9\x75\x39\x5f\xed\x6f\xc8\x50\xce\x6e\x3d\xf8\ -\x15\x1c\xab\x14\x7f\x91\x2f\x3b\xb7\x7a\xbc\x29\xe4\x79\x86\xa7\ -\x70\xcf\x1e\xf4\x39\x7e\x33\x72\xab\x04\x7e\x5f\xf6\x1b\x21\xe8\ -\xfa\x08\x3a\x0b\xe6\x90\x85\x29\xe3\x13\x08\xf3\x0b\x99\x28\x74\ -\xf6\x36\xcf\x48\x59\xcc\xd7\x49\xb8\x9c\x5b\x42\x27\xe7\xbe\x92\ -\x9b\x7a\xac\xf2\x7b\x32\xe4\xb9\x8e\x4d\xa9\x7e\x5f\xf0\x39\xc7\ -\x9e\xb4\xbf\xd2\xa3\x93\x72\x8d\xf6\x49\x53\xb0\x00\x82\x46\xd0\ -\x69\x30\x2c\x25\x89\x9e\xaf\xfa\x33\xbd\x35\x8e\xbb\x5b\x0a\xc7\ -\xec\xf2\xe9\x89\xdc\xe6\xf2\x79\xb7\xb4\xa2\x9b\x46\x38\xdf\xdb\ -\x29\xd5\xe9\x64\x01\xe7\xb9\x91\x76\x57\x7a\xb6\x08\xc8\x23\x33\ -\x00\x41\x23\xe8\xb4\x38\x27\x25\x49\x8f\x96\xde\xf3\x6a\xb6\x45\ -\x22\xe3\x62\x1c\x47\xef\x06\xb3\x8b\xf2\x4e\x4c\xe4\x16\x7b\xba\ -\x87\x8a\xb7\x4f\xa2\xdb\x96\x5c\xfb\x4b\x74\xca\xdc\x11\xeb\x71\ -\x1e\x19\x9f\xbf\x46\x05\x27\xcd\x9f\x81\x76\x57\x6a\xfe\xe1\x73\ -\x7f\xff\xa3\x4a\xb4\x85\x18\x82\x2e\x07\xfb\xa5\x3c\x2c\xd1\x2d\ -\xb3\xdc\xf3\x47\x58\x85\xf9\x2f\xe5\xbf\x05\xd3\x41\x1e\x7f\xe7\ -\xec\x39\x2f\x22\x93\xab\x49\xcb\xa0\x93\x3b\xe9\xcc\x76\x67\xca\ -\xd0\x87\x1e\xfb\x5f\xdf\x81\x4e\x7b\xda\x2e\x63\xff\x51\x92\x41\ -\xb5\xd0\xe6\x4a\xcb\x8c\x01\x73\x38\x77\xd3\x83\x46\xd0\x59\x90\ -\x45\x6e\xe3\x9b\x42\x2c\x0d\x7f\x36\x60\x62\x6e\x41\x59\x70\xd2\ -\x17\xa2\xe7\xac\x97\xe6\xff\x58\x82\xb0\xc5\xab\x68\x6f\xa5\x65\ -\x93\x98\x69\x07\x10\x34\x82\x4e\xcc\xfe\x39\x4a\xea\x3d\xe5\x9d\ -\x46\xb4\xc1\xb1\x3e\xc3\x24\xbb\xab\x89\x73\x4e\x3f\x68\x98\x84\ -\xfd\x7a\xd4\x3f\x2b\x32\xd3\x95\x95\x83\x03\xee\xfb\x1e\x08\x1a\ -\x41\x67\xc9\xb9\x39\xc8\xeb\x12\x09\xcb\xf3\xba\x86\xa5\x03\x22\ -\x21\x4e\x57\x13\x27\x28\x7a\xdb\x20\x31\x7f\x2f\x8b\x66\xce\x61\ -\x98\xa3\x92\x04\x75\x04\xd6\x44\xd0\x08\x3a\x6b\x0e\xcb\x48\x5e\ -\x3f\x06\xf4\x9a\xf5\x38\xef\x33\x2a\x7c\x4a\xd4\x2b\x0c\x91\xb2\ -\x4e\x4d\x7b\xb5\xbc\xfe\x36\x92\x2b\x05\x7d\x69\xdc\x47\x3b\x2b\ -\x1d\x0b\x87\x78\x6b\x6a\x42\xd0\x08\x3a\x0f\x4e\xca\x40\x64\x5e\ -\x7b\x20\xae\x1e\x72\x88\xe2\x1c\xf9\xfc\x8a\x16\xa3\x0a\x10\xf1\ -\x6f\xb2\xec\xbd\x5b\xc6\xd7\x75\x76\xc3\xb5\x5d\xca\xb3\x63\xc8\ -\xe3\xad\x4a\x3b\x2b\x15\x47\x65\x9c\x22\x00\x41\x43\x24\xae\x4a\ -\x49\x6c\xff\x93\xe8\x0a\x7b\xac\xf0\x6a\x12\x0a\xf7\x68\xc8\x63\ -\x1c\x2f\x7f\x7b\x48\x86\x02\x7e\x45\x56\x43\x1e\x20\xbd\xf9\x8d\ -\xe5\x4b\x65\x2e\x99\xac\x0c\x5b\x6f\x2f\x05\x9c\x47\x87\xf3\xbd\ -\x25\xd1\x00\x0b\xd2\xce\x4a\xc3\xfb\x55\x9a\x20\x44\xd0\xd5\xe0\ -\x96\x84\xd2\x1b\x27\x0b\x46\xe6\x96\x70\x3e\x9d\x4b\xfa\x83\x88\ -\xc7\x68\x4c\x08\x66\xbd\x77\xe4\xd7\x12\xc7\x3a\x52\xf5\xa7\x2c\ -\x3d\xcd\xe2\x0f\xc2\xe2\xc2\x7c\xf2\x05\x33\x8d\xad\x8e\xec\xc9\ -\x9b\xb6\x09\x71\x9e\xc6\x5b\x40\x23\x7e\x9c\x76\x66\x3e\x2d\x21\ -\xee\xeb\xbe\x08\x1a\x41\x17\xc1\xcb\x09\xc7\x9d\xdf\x4d\xf0\xf7\ -\x7a\xd5\xe0\xca\x01\x93\x86\x79\xd3\x88\x83\xfd\x4a\x56\x06\x36\ -\x7a\xc1\x4b\xa9\xe0\x0d\x00\xce\xb5\xd5\xeb\x5f\x18\x8f\x2e\x0d\ -\x61\xe6\x3b\x76\x44\xd0\x08\xba\x08\xa6\x4b\x28\xd9\xb8\x3c\xa7\ -\xbc\xb7\x15\x2a\x9a\xb1\x32\x1c\x62\x9f\xb5\xff\x5f\x88\xbf\x73\ -\xa6\x4a\x3d\x50\x7e\xfe\x38\xed\xcc\x68\x5e\x09\x71\x6f\x97\x47\ -\xd0\x08\xda\xc4\x04\xe5\x59\xf1\x8d\x41\x42\xd6\x63\xc6\x4a\xc6\ -\x19\xb7\x71\x88\x76\x72\x15\x2e\x93\x9f\xd7\xce\xe9\x17\xca\xef\ -\x47\xd0\xce\x8c\x64\xdd\x10\xf7\xf6\xa3\x32\x96\x0d\x41\xd7\x2b\ -\x48\xdf\x54\x5e\x97\xfc\x09\x5d\x32\x29\xe9\x85\xce\x37\x7d\xb2\ -\x8d\xed\x64\xfc\xdc\x6f\x22\x6f\xd6\x90\xbd\xab\x7f\x04\xd4\x6d\ -\xe3\x4d\xe1\x02\xda\x99\x71\x84\x99\xc8\xfe\x3b\x82\x46\xd0\x26\ -\x70\x5f\x09\x05\xfd\x9a\xc4\xb0\x66\x91\xd5\x2c\xcc\xb0\x46\x6f\ -\xc8\xe3\xbd\x28\x9f\xdf\x8c\x76\x56\x9a\xd8\xe7\x06\x1b\x20\x68\ -\x04\x6d\x4a\x2e\xdc\xcf\x4b\xda\x93\x76\xdb\x91\x25\x0e\x4b\x49\ -\xa4\x47\xd8\xf3\xae\x1d\xe1\xd8\xef\x96\x75\xc2\xa9\xa2\xdc\x18\ -\x32\xfa\x67\x00\x82\x46\xd0\xa6\x70\x61\x49\x84\xfc\xb1\xc5\x95\ -\x8e\x9f\xe9\x2d\xc4\x8e\x74\xc4\x65\x87\x45\x2f\x2c\xb9\x23\xe2\ -\x35\x44\xdd\x19\x7c\x46\xdb\xdf\x12\x23\x5d\x3c\x61\xe6\x41\x2e\ -\x43\xd0\x08\xda\x24\xe6\xb5\xf8\xb5\x04\x82\x6e\xec\x9f\x78\xb8\ -\xf2\xde\x63\xf1\x06\x99\xbc\x5b\x47\x18\x2c\x61\x7d\xfa\xdf\x3a\ -\x2f\xf4\x99\xd2\x5b\x7e\x3f\xc6\xf9\xef\x8d\x59\xbf\x2b\xd9\xbe\ -\x4c\x06\xd1\xde\x0a\x23\xec\xae\xf5\x43\x11\x34\x82\x36\x8d\xb3\ -\x0d\x97\xb3\x73\x52\xee\xbc\x02\xae\x61\xce\x04\xf5\xbb\xa6\x9a\ -\x90\xe0\x9f\xf6\x56\x0c\x2f\x86\xbc\xcf\x33\x21\x68\x04\x6d\x1a\ -\x03\x95\x39\xbb\x8d\xbb\x0d\x6d\xb8\x5d\xb3\xce\x3b\xfd\x4e\x4e\ -\xd7\x90\xc6\xc6\xa1\x8d\xad\xc3\x9e\xa5\xbd\xe5\xce\x66\x19\xbf\ -\x25\x21\x68\x04\x9d\x39\x1d\x06\xc8\xf8\x5d\x97\xd5\x7b\xcb\xf8\ -\x5c\xb3\xee\xed\xdc\x94\xf1\x35\x9d\x97\x62\x1d\x1f\x24\xc7\xbc\ -\x95\xf6\x66\xe4\xea\xd9\x15\x10\x34\x82\x36\x95\x3f\x14\x28\x66\ -\x9d\x33\xa3\xcd\xe2\x31\x8b\x5f\xe4\x67\xbf\xda\xc6\x9d\x83\x58\ -\x43\xf5\xa7\x08\xed\xc9\xe0\xda\x96\x4a\xb9\x9e\xcf\x52\x93\xa6\ -\x5a\x85\xec\x58\x2c\xe4\x7d\x7e\xaa\xec\x65\x45\xd0\xd5\x5f\x02\ -\x5e\xc4\x16\x53\x47\xca\xf9\x9d\x1b\xb4\x1e\x1e\xb3\x1c\x7a\x65\ -\xe0\xa5\xaa\x7f\x97\x97\x9f\x12\x5e\xdb\xa8\x8c\xea\xfa\x96\x80\ -\xd5\x88\x90\x6f\x68\x9d\x66\x15\x04\x8d\xa0\x4d\xe7\xe2\x9c\xa4\ -\xfc\x99\x4c\x4c\xce\x21\xe7\x6d\x53\x93\xee\xd2\x92\x46\x79\xe6\ -\x92\xd5\x83\x5a\x84\xa7\x7a\xa0\x77\x4c\x19\xe6\xb1\xbc\xfb\x88\ -\x0c\xeb\xfa\x69\x39\xc7\x6e\xb4\xbb\xc2\x7b\xcf\xef\x55\xa1\xbc\ -\x08\xba\xfa\x2c\x9a\xb1\x98\x9f\x54\xfd\xfb\xbc\x4d\x6b\xd1\x2c\ -\xe7\x74\xee\xf8\x72\x73\x41\x65\x6f\x76\xb9\xde\x85\x33\x3c\xdf\ -\x14\x92\xf3\x41\x9f\x67\x08\x6d\x2f\x13\x9e\x0d\xd9\x2e\x77\x44\ -\xd0\x08\xba\x2c\x3c\x92\xb2\x94\xbf\x97\xc5\x30\x6b\x39\xce\x73\ -\x8d\x2c\xdb\x1e\xe7\x88\x65\x2e\xaa\xdc\xba\x37\xff\x9b\xed\x5a\ -\xde\xc9\xe1\x9c\xb3\x85\x9c\x0c\x85\xf8\xf1\xe7\x61\x36\xa0\x18\ -\x80\xa0\x11\x74\x59\xd8\x36\xa1\x90\xf5\xe4\xde\xdd\x32\x3c\xa0\ -\xc7\xf5\xbc\xf6\x75\xbb\xc7\xf1\x77\xd7\x19\x50\xf6\xb7\x0a\x58\ -\x51\x66\x7f\x0d\x9f\x9d\xf6\x97\x1a\x8f\x57\x7d\x61\x0a\x82\xae\ -\x27\x8b\x44\x14\xb2\x8e\x9c\xe8\x54\xfd\xdb\x57\x85\x8d\x78\x98\ -\xd5\x21\xc3\x97\x0c\x29\xbb\x7d\xc7\x99\xdd\x73\x3c\xef\xb0\x1c\ -\x7b\xed\x75\x60\xf5\x90\x6d\xb7\xab\x4a\xe5\x46\xd0\xf5\x40\xe7\ -\x43\xb6\x6f\x63\xa5\x2c\x3e\xf1\x69\xe4\x2f\x4a\xac\xf0\x5e\xaa\ -\x3f\x23\xdc\x9f\x2d\x0e\x95\xe8\x8c\x06\x27\xc8\xc4\xdf\xd5\x12\ -\x93\x7a\x9d\x2c\x40\xe9\x93\x38\xe6\xa9\x0c\x29\x7b\xbb\xad\x5c\ -\xab\xe7\x7c\xee\xc6\xe6\xb4\xcf\xd1\x06\x13\x31\x7d\x84\xa5\xfc\ -\x1b\x20\x68\x04\x5d\x46\x0e\xb0\x35\xe2\x33\xa4\xc7\x9b\xd6\xd8\ -\xb4\x96\xfd\x6a\xf2\xef\x97\x0d\x2b\xf7\x4e\xb6\xeb\x1c\x5c\xc0\ -\xf9\x8f\x97\x73\xdf\x45\x1b\x8c\xcd\x51\x21\xdb\x61\xe5\xea\x18\ -\x41\xd7\x87\x99\x2d\xc6\xdb\x1a\xf3\xd4\xf2\xf3\x56\x99\xc8\x8b\ -\x2b\xe7\x0f\x25\x7a\x41\x27\x2f\x7a\x45\x62\xaf\x4d\x2a\xf7\x3a\ -\x39\x45\x70\xf8\x71\x91\x9c\xff\x4c\xda\x61\x64\xa6\x95\x10\xce\ -\x30\xbb\xfb\xcc\x8e\xa0\x11\x74\x99\xb9\xcd\xd6\xa0\x77\x76\xc9\ -\x6d\xf0\x60\x44\x39\xeb\x25\xdc\x8d\x94\x9b\x0b\x1b\x5a\xe6\xc6\ -\xcc\xff\x8f\xf2\xaa\x5c\xd4\x75\x34\x76\x64\x39\x95\x76\x18\x89\ -\x1b\x42\xb6\xc5\x43\xab\x58\x7e\x04\x5d\x2f\x36\x57\x13\x27\xc7\ -\xf7\x8a\x9b\x3e\x4e\xe2\x9b\xf5\x64\xe1\xb7\x22\xb7\x06\x3a\xc4\ -\xae\x57\x86\x35\x56\x2a\x41\x99\x57\x90\xf2\x8e\xb3\xbd\x35\x14\ -\x35\x8e\xda\xd8\x7a\x6b\x23\xda\x62\x28\xd6\x8d\xd0\x51\x98\x07\ -\x41\x23\xe8\x2a\xf0\xad\x34\xea\xf1\xf2\xfa\x18\xf4\xf9\x59\x54\ -\x7f\x66\xbc\x06\x4d\xf2\x2a\xd9\x54\x92\xf2\xce\x6b\x7b\x90\xa7\ -\x37\xe0\x7a\x3e\x94\x6b\xd9\x8e\xb6\x18\xc8\x27\x21\x05\xbd\x55\ -\x55\xeb\x00\x41\xd7\x0f\x7b\x0e\xdd\x6d\x6b\x50\xde\x59\xd4\x84\ -\x14\xa7\x53\x1a\x70\x3d\xf3\xd8\xea\x7f\x0e\xda\xa3\x27\xfb\x85\ -\x94\xf3\xc3\x55\xae\x07\x04\x5d\x3f\x0e\xb1\x35\xee\x3b\x6a\x50\ -\xde\xc6\xca\xbe\x91\x06\x5d\xd3\x6a\xb6\x2f\x8d\xc5\x68\x93\xae\ -\x99\x0c\xc3\xce\x83\xcc\x87\xa0\x11\x74\x15\x85\xd5\x18\x97\x9d\ -\xae\xe2\xe5\x9d\xcc\xe2\x2b\x59\x44\x63\xd2\x75\xad\x2d\xf7\x60\ -\x2c\x6d\x72\x12\x3e\x0b\x29\xe7\xcb\xaa\x5e\x17\x08\xba\x9e\xd8\ -\x97\x64\xef\x10\x72\x98\x60\x0f\x59\xf0\x52\xc6\xf2\x7e\x2e\x13\ -\x9e\xa6\x5d\xd7\x81\x72\x0f\xfe\x45\x9b\xfc\xff\x9c\x1a\x61\xb5\ -\xeb\x00\x04\x8d\xa0\xab\xc8\x96\xb6\x86\x7e\x76\x88\xcf\xeb\xe8\ -\x87\x7f\xca\xc4\x62\x19\xf3\x1c\x7c\x61\xf0\x92\xeb\x46\xe6\xbf\ -\xfb\x69\x97\x13\xc5\xac\x07\xb1\x38\x82\x46\xd0\x55\x65\x6a\x91\ -\x96\x6e\xe8\xd7\x47\xf8\xbb\x46\x98\xd8\xed\xf2\x8a\x5e\x96\xf2\ -\x8e\x35\x70\x88\xc3\xce\x95\xb6\x15\x9e\x75\x6d\x93\x03\x25\x84\ -\x33\x8c\x9c\xaf\xab\x4b\xbd\x20\xe8\xfa\x72\x87\x8a\x9e\xd8\x7c\ -\x72\xc7\x83\xa2\x45\x3d\x7f\x49\x22\x57\xde\x37\xfc\x1a\x6f\x97\ -\x3a\x3d\xac\xa6\xed\xf1\x01\x55\xa3\x44\xfc\x08\x1a\x82\x68\xec\ -\x78\xf2\x9b\xc4\x0a\x87\xfd\xbb\xa1\x6a\x42\x52\x24\xcd\xd7\x12\ -\x19\x62\x72\x59\xaf\x97\x89\x27\xd3\xef\xc9\xab\x2a\xff\xac\x7b\ -\x26\x70\x62\x48\x39\xff\x24\x0b\xa9\x10\x34\x82\xae\x3c\x73\xdb\ -\x1a\xfe\x96\x31\x22\x41\x9c\x7b\x03\x3e\x66\xf8\xdb\xc2\x27\x25\ -\xc9\x3b\x31\xba\x4e\x63\xac\x16\xa7\x44\x18\x77\x3e\xa8\x6e\xcf\ -\x29\x82\xae\x37\x23\xa5\xe1\x8f\x48\x10\x26\xe6\x94\xf4\x4c\x08\ -\x3a\x11\x83\xe4\xcb\x4f\xef\x84\xbe\x72\xc5\x17\x10\x1d\xad\x8a\ -\xdf\xec\x17\x41\x23\x68\x63\x19\x2a\x8d\xff\x91\x98\x7f\xbf\x81\ -\xcb\x83\xf4\xb6\xc5\x34\x08\x3a\x11\x8b\xab\x49\xb3\x0e\x56\x85\ -\x19\x64\x78\xad\x37\x82\x9c\xdf\x32\x64\x15\x28\x82\x86\xdc\xf9\ -\x5a\x1e\x82\xb8\x52\x3d\xc8\xe5\x81\xda\x13\x41\x27\xe6\xcf\xaa\ -\x5a\xc9\xfe\x67\x17\x31\x7f\xa6\xa2\xa7\xb4\x6d\xae\xeb\xf3\x89\ -\xa0\xe1\x64\x79\x08\xb6\x49\x70\x8c\xcb\x1c\x0f\xd4\xf5\x86\x95\ -\x51\x6f\x7b\xf5\x69\x09\xef\xcd\xef\xa5\x3e\x5f\x28\x71\xfb\x5a\ -\x5b\xbe\x20\xbf\x57\xf1\xf2\x8d\xef\x5e\xe7\xe7\x13\x41\x43\x63\ -\x2c\x39\xe9\x6e\x14\x9f\xda\x1e\xaa\xd7\x0d\x2b\xa3\x2a\x61\x0f\ -\xba\xc1\x15\x52\xa7\x57\x96\xf0\xda\x2f\x52\xc9\x76\xea\x39\xb4\ -\xee\xcf\x27\x82\x86\xc6\x4a\xbb\x5f\x12\x1e\xe3\x50\xc7\xc3\x35\ -\xaf\x41\xe5\xd3\x72\x7e\xb7\xc4\xf7\xe7\x2c\xa9\xd3\x73\x4b\x72\ -\xbd\x3a\xbf\xcb\xad\x09\xe5\x7c\x0b\xcf\x25\x82\x86\x7e\xf6\x94\ -\x87\x62\xe3\x04\xc7\x18\xec\x78\xc0\x7e\x67\x50\xf9\xc6\xc8\xe4\ -\x65\x99\xef\x51\xb7\xd4\xeb\x11\x25\xb8\xd6\xbb\x12\xca\xf9\x1f\ -\x3c\x93\x08\x1a\x26\x5e\x21\xa8\x43\xbb\xde\x48\x78\x9c\x1e\xdb\ -\x43\x76\x32\xb9\x38\x52\x0f\x4b\x7b\x21\x66\xdc\x7a\xde\xd7\x99\ -\x44\xce\xdd\x3c\x8f\x08\x1a\xbc\x17\x0c\xac\x9a\xe0\x18\x0f\xdb\ -\x1e\xb4\x67\x0c\x2a\xdb\xe8\x92\x0f\x71\x34\x98\xd2\x16\x75\x63\ -\xaa\xa4\x8f\x4f\x20\x67\xbd\x92\x72\x46\x9e\x45\x04\x0d\x93\xb2\ -\xb4\x3c\x24\x4f\xa4\xb0\xf0\x45\xf3\x83\x41\xf1\xd0\xba\x07\xfd\ -\x9f\x8a\xdc\xa7\xa5\x6c\x75\x3c\x8b\x61\xd7\x36\x85\x6d\x25\x64\ -\x54\x1e\x51\xd5\xcf\x4d\x8e\xa0\x21\x51\xef\xac\xb1\x78\x60\xc1\ -\x98\xc7\x38\xdd\xf1\xd0\x0d\x32\xa0\x5c\xb3\x5a\xfc\x2a\x91\x25\ -\x93\x57\xe4\x5e\xad\x25\xf5\xab\xf3\x5c\x2f\x62\xd0\x75\xed\x17\ -\x53\xce\xd7\xf0\xfc\x21\x68\x08\xe6\x58\x79\x60\x2e\x89\xf9\xf7\ -\x5b\x3a\x1e\xbc\xed\x0d\x59\x20\xd1\xb8\x9e\x2a\xad\x46\x1b\x26\ -\x65\xfa\xd6\xa0\x6b\xfa\x80\x09\x41\x04\x0d\xf9\x24\x50\x5a\x2e\ -\x66\x78\xd5\x17\xb6\x63\xdc\x65\x40\x99\x66\xb6\x5d\xcf\xc0\x8a\ -\xdd\xaf\x23\xa5\x5c\xf7\x19\x70\x2d\xeb\xc5\x90\xf3\x21\x3c\x73\ -\x08\x1a\xa2\xf1\xb4\x4a\xb6\xa1\xac\x7d\x71\xc2\xf7\x06\x0c\x2b\ -\xd8\xf3\x5a\x54\x71\x83\xd6\xa3\xa4\x6c\xf7\x14\x7c\x1d\x51\xe3\ -\x9e\xd7\xe6\x59\x43\xd0\x10\x9d\x9d\xd5\x84\x3c\xd1\x0b\xc5\xf8\ -\x7b\xe7\x8e\xcc\x07\x15\x5c\x9e\x95\x12\xbe\x15\x94\x81\x46\xdc\ -\xf1\x69\x05\x4f\x30\x87\xe1\x5e\x8b\x15\x78\xce\x10\x34\xc4\x43\ -\x47\x5e\x8c\x93\x87\xe9\xf8\x98\x31\xd5\xdf\xda\x1e\xc8\x2f\x0b\ -\x2e\xcf\xf2\xb6\x6b\xd9\xa5\xc2\xf7\xed\x41\x29\xe3\x01\x05\x9c\ -\xfb\xf5\x90\x72\xbe\x96\xe7\x0b\x41\x43\x72\xde\x94\x07\x4a\x87\ -\x4c\x4d\x15\xe3\xef\xff\xe4\x78\x30\xd7\x29\xb0\x2c\x1b\xdb\xae\ -\xe3\xd6\x8a\x2f\x36\x7a\x5f\xca\xf9\xc7\x1c\xcf\xbb\x39\xe3\xcd\ -\x08\x1a\xf2\xe5\x1e\xdb\x83\xb5\x5b\x0a\xbd\xaa\x07\x0a\x2c\xcb\ -\x86\xb6\xeb\xf8\xb6\xe2\xf7\xad\x49\xf5\x6f\x90\xdb\x97\xe3\x30\ -\xc2\x33\x01\x62\xfe\xd9\x62\x35\x9e\x29\x04\x0d\xe9\x71\x82\x63\ -\x75\x57\x52\x31\x16\x99\x9b\xe3\x10\xc7\x75\x54\x5d\x16\x2b\xd9\ -\x16\x0a\x2d\x9d\xf1\xb9\xfe\x1c\x20\x67\xbd\x38\x68\x09\x9e\x27\ -\x04\x0d\xe9\xb2\x85\xe3\x41\x1b\x9a\x52\x5c\x6c\x11\x0f\x6b\xbb\ -\xe3\x1a\xae\xa8\xc1\xfd\x1b\x62\x2b\x6f\x56\xe7\xd0\xd9\x0a\xc7\ -\xfb\xc8\x59\xbf\x41\x4d\xcb\xb3\x84\xa0\x21\xdb\x61\x81\x3e\x89\ -\xb7\x8d\x73\x9c\x7d\x1d\xc7\x29\x22\xcc\xed\x76\xc7\x35\xfc\xa8\ -\xfa\xb7\x5d\xaa\xfa\x3d\x3c\x50\xca\xfb\xa8\xc5\x64\x19\x1c\xff\ -\xc6\x80\x9c\x1a\xd3\xf3\x1c\x21\x68\xc8\x86\xcd\x1c\x0f\xdc\xf1\ -\x09\x8e\xf5\x9e\x2a\x76\xd7\xef\x27\x5d\x04\xb2\x65\x4d\xee\xe3\ -\x2e\x52\xde\x37\x32\x6e\x1f\x76\xc6\x93\x53\x03\x41\x43\xb6\xac\ -\xeb\x78\xe8\x4e\x48\x70\xac\x46\xae\xe9\x11\x05\x94\x43\x8b\xe2\ -\x63\x17\x89\x5c\x5e\xa3\x7b\xa9\xa4\xcc\xe7\xa4\x74\xbc\xa9\x6d\ -\x61\x98\x6e\xac\xce\xf3\x83\xa0\x21\x5b\xf6\x70\x3c\x74\x3b\x25\ -\x38\xd6\x3a\x72\x8c\x35\x0a\x8a\x6a\x70\x93\x88\x4e\x9e\x34\x57\ -\x8d\xee\xe7\x79\x52\xee\x8b\x52\x38\xd6\x03\x3e\x72\xde\x97\x67\ -\x07\x41\x43\xf6\x5c\xea\x78\xf0\x16\x4c\x70\xac\xed\x33\x9e\xac\ -\xf2\x63\x65\x59\x11\xe9\x26\x93\x8b\x6b\x76\x4f\xdf\x55\xc9\x77\ -\x5c\xdf\xc5\x47\xce\xff\xe5\xb9\x41\xd0\x90\x0f\xaf\xda\x1e\xbc\ -\xa4\x5b\x45\xe9\x54\x92\xcf\x15\x50\x06\x9d\xf8\xfd\x85\x80\x30\ -\xb0\xa5\x6a\x74\x4f\xf5\xdb\xc4\x13\x52\xee\xbd\x62\xfc\x7d\x50\ -\x32\xa4\x55\x79\x6e\x10\x34\xe4\x33\x6e\xfb\x8b\xed\xc1\xbb\x39\ -\xe1\xf1\xf4\x7e\x80\x17\x16\x50\x8e\xce\x10\xab\xdb\x6e\xab\xd9\ -\xbd\x9d\xdc\x76\x6f\xd7\x8f\xf8\x77\x9f\xfa\xd4\xe3\x1d\x3c\x37\ -\x08\x1a\xf2\xe1\x44\xc7\xc3\xb7\x4f\x82\x63\xcd\x5d\x50\x0e\x8c\ -\x83\x42\x2e\x3f\xd6\x11\x07\x8b\xd7\xec\xfe\x0e\xb1\x49\x7a\x70\ -\xc8\xbf\x59\x32\xa0\x1e\x57\xe2\xb9\x41\xd0\x90\x4f\xef\xf9\x27\ -\xdb\x83\xa7\xff\x9d\x64\x57\x94\x53\xe5\x38\xb3\xe7\x58\x86\x61\ -\x2a\x5a\xda\xcb\x9e\x1a\xde\xe7\xc6\x42\x96\xb1\x21\xe7\x17\xfc\ -\xf2\x6d\xb0\xc9\x2b\x82\x86\x9c\x68\x73\x3c\x7c\x49\x33\xd1\x7d\ -\x93\x73\xfe\x8b\xa9\x03\x5e\xc5\xbd\x38\xa5\x86\xf7\x7a\x07\x29\ -\xfb\x27\x21\x3e\xfb\x3b\x9f\xba\xbb\x8c\xe7\x06\x41\x43\xf6\x4c\ -\x25\x42\x75\x86\xa3\x3d\x65\xd1\xaa\xfa\x37\x04\x8d\x72\xbc\x99\ -\xe4\x18\x27\xe5\x74\xfd\xfa\xfa\x9e\x57\xf1\x77\x94\x5e\xb0\x86\ -\xf7\xfc\x70\x29\xfb\xc8\x04\x6f\x25\x27\xf2\xec\x20\x68\xc8\x9e\ -\xa0\xa4\xeb\x3a\x8c\xea\xd0\x08\xf9\x15\x8e\x50\xfd\x3b\x35\xe7\ -\x75\xfd\x37\x24\x90\xb3\xe6\xad\x9a\xcf\x39\x8c\x8c\x39\xc4\xb1\ -\x33\xcf\x0e\x82\x86\xec\x39\x3f\xa4\xc8\xf4\x2b\xf1\x3d\x32\x8e\ -\x19\x34\xb1\x94\xd7\xb5\xef\x9a\x50\xce\x0d\x1e\xaa\xe9\xbd\x6f\ -\xec\xc8\x72\xb6\xc7\xef\xd7\xf0\xa9\xb3\xa1\x3c\x3b\x08\x1a\xb2\ -\x1f\xde\x18\x1f\x43\x68\x37\x59\xac\x59\xf0\xb5\x6f\x92\x92\x9c\ -\x1b\x6c\x52\x73\x49\xbb\x6d\x9b\x35\x48\x79\xe7\x7a\x6e\xe6\xf9\ -\x41\xd0\x90\xcf\x58\x64\x5c\x74\xbe\x87\x1d\x0b\x1a\x96\x19\x9f\ -\xb2\xa0\xf5\xae\xe4\x73\xd4\xb4\x1d\xfc\x57\xea\x60\x57\x97\x2f\ -\xf0\xcf\x5d\xea\x4a\x4f\x22\x4f\xc9\xf3\x83\xa0\x21\xdb\xde\xf3\ -\x0f\x29\xc9\xed\x71\xd5\x9f\x4b\x3a\x8f\xeb\xd6\xb9\xa5\xbf\x4b\ -\x59\xce\x0d\x9e\xad\x69\x5b\x98\x43\x86\xb0\x74\x1d\x6c\xe5\xf8\ -\xdd\x3f\x5d\xea\x49\x4f\x2a\x4f\xc3\x33\x84\xa0\x21\x3b\x36\xca\ -\x40\x70\x5a\xd4\x7a\xb7\x8d\xac\xf2\x2e\x2f\x93\xa1\x9c\x1b\x6c\ -\x51\xd3\xf6\x30\x97\xad\x0e\xec\x09\xae\x0e\x75\xa9\xa3\xaf\x14\ -\x49\xf9\x11\x34\x64\xca\x8d\x19\x4a\x4e\x6f\x3a\xdb\x2e\x79\x20\ -\xd2\xec\x39\x7f\x9f\xb1\x9c\x35\x1f\xd7\xb8\x4d\xac\x65\x0b\xb3\ -\x5c\x40\x7e\xb6\xac\xc7\xa4\xea\x64\x3c\x43\x08\x1a\xb2\x61\x96\ -\x1c\x44\xd7\x78\x15\x3e\x4b\x25\xdf\x0f\x70\xdb\x9c\xe4\xdc\xe0\ -\xd2\x1a\xb7\x8d\xc6\x6e\xe8\x5f\xab\x09\x3b\xbb\xff\xe8\xa8\x9f\ -\x3b\x79\x86\x10\x34\x64\xc7\xc5\x39\xca\xae\xc1\x1b\xb2\x04\x7c\ -\x70\xc4\x6b\x3d\xb7\x80\x6b\xed\x93\x21\xa0\xba\xb6\x8f\xdd\xa5\ -\x0e\x5e\xf1\x68\x2f\x8f\xf0\x0c\x21\x68\xc8\x86\x99\x5d\x7a\x44\ -\x79\xa3\xb7\xa3\x3a\xd8\x62\xc5\x80\x48\x8d\xee\x02\xaf\xf1\xf1\ -\x9a\xb7\x93\x76\x5b\xf8\xdd\x9e\x8e\xba\x39\x9f\xe7\x08\x41\x43\ -\x36\xfc\xad\x60\x39\x3b\x79\x47\x84\xad\xc7\xc4\xf7\x17\x1e\x30\ -\xe4\xda\x76\xaa\x79\x5b\x39\x53\xea\xe1\x5b\x47\xbd\x1c\xc8\x73\ -\x84\xa0\x21\x1b\x9e\x37\x4c\xd0\x26\x53\x97\x9d\xc0\xfd\x78\x50\ -\xd5\x77\xf3\x5d\x04\xcd\xcd\x28\xf5\xea\xbb\x3a\x70\x23\xed\x66\ -\xd4\x7d\x8e\x3a\x99\x9f\x3a\x41\xd0\x90\x3e\x1f\x23\xdc\x58\x0c\ -\xa4\xed\xfc\x5f\xbe\x0e\x1d\x95\xf3\x32\x75\x81\xa0\x21\x7d\xf6\ -\xf0\x11\x90\xde\x60\xf5\x45\xd5\x9f\x0c\x49\xef\x25\x78\xa1\x83\ -\x2b\x64\x59\xf7\x33\x39\x87\xbb\x99\xc2\x73\xb4\x9f\xff\x1f\x9e\ -\x39\x07\xf5\x80\xa0\x21\x7d\x46\xbb\x2c\x26\xb9\x4c\x26\xc2\xe6\ -\x8b\x70\x9c\xd9\x65\x41\xc3\x89\x32\xc1\x57\x17\x49\x8f\xa0\x0d\ -\x01\x82\x86\x2c\x58\xdd\x45\x38\x7a\x07\xef\x21\x29\x1c\x7b\x3d\ -\x8b\x6b\x6d\xb9\x1c\xaa\xcc\xcc\xb4\x25\x40\xd0\x90\x36\xef\x07\ -\x44\x2a\xe8\xf1\xc5\xa4\x1b\x80\x4e\x2d\xbd\xf1\xfb\x2a\x2c\xe8\ -\xc7\x68\x4b\x80\xa0\x21\x4d\x8e\x55\xee\xbb\x88\xe8\x31\xe7\x9f\ -\x5c\x96\xf0\x6e\x96\xc2\x39\x75\x0a\xd2\x97\x2a\x2a\xe9\xb3\x68\ -\x53\x80\xa0\x21\xcb\x9c\x1b\x2b\xcb\xef\x75\x74\xc2\xf2\x16\xc3\ -\x2d\x6e\xb7\xfd\x5e\x6f\xc0\x7a\x75\x0a\xb2\xd6\x99\xed\x7a\x2a\ -\x28\xe9\x8d\x69\x5b\x80\xa0\x21\x29\x5e\xdb\x59\xad\xe7\xf1\xf9\ -\xa5\x2c\xce\x73\x7c\xb6\x5b\x56\x8e\xcd\x99\x60\xe8\xe3\xfc\x8a\ -\x09\xfa\x4b\x99\x2c\xa5\x8d\x01\x82\x86\x58\x6c\xe5\x21\x97\x6f\ -\x43\xc4\xf5\xce\x66\xb1\xb7\xea\x4f\x2b\x69\xff\xdb\x7b\x64\xa9\ -\x78\x9c\xfd\xe8\x5a\x2c\x1e\xae\x90\xa4\x5f\x92\x2f\x1f\xda\x1a\ -\x20\x68\x88\xc4\xac\xca\x3f\x57\x73\xd4\x1c\xc1\x97\xb9\x1c\x47\ -\x2f\x58\xd0\x89\x74\x36\x8d\x78\xbc\xcb\x2a\x24\xe9\x23\x69\x6b\ -\x80\xa0\x21\x2a\x7f\xf7\x91\x8a\x4e\xc6\xfe\xa8\xc5\x3e\x11\x5f\ -\xd3\x17\xb7\x38\x44\x26\x17\x9d\xc7\xd4\xe3\xcc\xd7\x49\xac\x70\ -\xab\x8c\x6b\x07\x2d\x39\x7f\xaf\x02\x82\xfe\x22\xc1\xd0\x0f\x00\ -\x82\xae\x21\xcb\x44\x10\xcc\x18\x8b\xe3\x62\x8c\xa7\x6e\x20\xab\ -\x0a\xfd\x8e\xfd\x81\x0c\x89\x9c\x26\xd2\xd6\x61\x7c\xcb\xda\x8e\ -\x31\xb7\xc5\xc8\x0a\x48\xfa\x41\xda\x1c\x20\x68\x08\x83\xde\x86\ -\xe8\x3f\x31\x24\xa3\x45\xad\x93\xe9\xaf\x12\x43\xd4\xb7\xa8\xfe\ -\x3d\xea\xc2\x9e\x4b\xc7\x64\xeb\x5d\xa4\x47\x55\x28\x14\x6f\x38\ -\x6d\x0f\x10\x34\xe4\x91\xeb\x59\xf7\x6a\x37\x8c\x78\x5e\xbd\xc2\ -\xee\x04\x55\xdf\x64\x4a\x5f\xd2\xf6\x00\x41\x83\x1f\x7a\xff\xb8\ -\x34\x13\x19\x69\x51\x6f\xae\xa2\xed\xde\xbc\xb8\x2c\x8c\xf9\xac\ -\x86\x92\xde\x8b\x36\x08\x08\x1a\xbc\xb8\x37\x23\xf1\xe8\x1c\x1b\ -\x17\x44\x9c\x0c\x9b\xce\x62\x37\x55\xfc\xd6\x5a\x79\x33\x88\x76\ -\x08\x08\x1a\x9c\xec\x92\x83\x7c\xc6\xaa\xfe\xa4\x48\x2b\x44\xb8\ -\xae\x85\x2a\x16\x56\x17\x84\x0e\x61\x9c\x92\xf6\x08\x08\x1a\x1a\ -\x2c\x28\xa1\x73\x79\x8a\x48\x6f\x9b\x75\x62\x84\x1e\xe3\x72\x16\ -\x9d\x35\x10\xf4\xf5\x08\x1a\x10\x34\xd8\x19\x52\xb0\x94\xf4\x6a\ -\xc3\x1d\x43\xae\xaa\xdb\xb5\xc2\x72\x3e\x94\xb6\x08\x08\x1a\xdc\ -\xd8\xdd\x00\x41\xe9\xed\xb4\xae\xb2\x68\x53\x13\x92\x31\xb9\xb1\ -\x84\x2c\x6a\x21\x99\x3f\x00\x82\xae\x0d\x4b\x5b\xfc\x60\x90\xb4\ -\xf4\x8a\xc3\x53\x2c\x86\x79\xe4\xfe\xd8\x5e\x56\xe2\xd1\x73\x06\ -\x40\xd0\xb5\x40\x27\x31\xea\x35\x50\x62\xdf\xcb\xf2\xf2\x0b\x65\ -\x55\xa1\xce\xdf\xb1\x80\xc5\xe1\x16\xe3\x4a\x2c\xe7\xbf\xd1\xe6\ -\x00\x41\x43\x14\xe6\x2f\x51\xcf\x54\x7f\x99\xfc\x5c\x52\x39\xaf\ -\x4b\x5b\x03\x04\x0d\x71\xd0\x79\x2f\x7e\xaa\xf1\xca\xbe\xac\xf9\ -\x03\x6d\x0c\x10\x34\x24\x61\x71\x55\x8f\x8d\x5c\xf3\x66\x23\xda\ -\x16\x20\x68\x48\x83\xc5\x10\x2a\x5b\x5d\x01\x82\x46\xd0\x66\x0f\ -\x77\xd0\x93\x4e\xce\xd6\xb4\x25\x40\xd0\x90\x05\xf3\x22\x58\x26\ -\x04\x01\x41\x23\x68\x73\xd1\x5b\x57\x7d\x8a\x6c\x23\xb3\x3d\x6d\ -\x07\x10\x34\xe4\xd5\x93\x1e\x8b\x74\xe9\x39\x03\x82\x46\xd0\xe6\ -\xf6\xa4\xbf\x46\xbe\x81\xec\x48\x5b\x01\x04\xcd\xcd\x28\x02\xbd\ -\x8a\xef\x4b\x24\xec\xc9\x7a\xb4\x11\x40\xd0\x08\xba\x48\x56\x2e\ -\xf1\x2a\xbe\x2c\xd9\x96\xb6\x01\x08\x1a\x41\x9b\xc0\x60\x26\x0e\ -\x27\x62\x13\xda\x04\x20\x68\x04\x6d\xda\x8a\x43\xe4\xdc\x9f\xc0\ -\x89\xf6\x00\x08\x1a\x41\x1b\x47\x73\xcd\x7b\xd2\xdb\xd0\x06\x00\ -\x41\x23\x68\x93\x99\x8f\x09\x41\x00\x04\x8d\xa0\xcd\x65\x6d\x8b\ -\xcf\x09\xa5\x03\x40\xd0\x08\xda\xdc\x9e\xf4\x58\x7a\xce\x00\x08\ -\x9a\x9b\x61\x26\x43\x2a\xde\x93\xde\x8a\x7b\x0c\x08\x1a\x41\x97\ -\xbd\x27\xfd\x55\x05\xe5\xbc\x3e\xf7\x16\x10\x34\x82\xae\xca\x62\ -\x96\x6f\x2a\x24\xe7\x2d\xb9\xa7\x80\xa0\x11\x74\x95\x58\xc8\xe2\ -\xb3\x0a\xc8\x79\x03\xee\x25\x20\x68\x04\x5d\xd5\x15\x87\xbf\xb0\ -\x08\x05\x00\x41\x83\x99\x2c\x59\xd2\x89\xc3\xcd\xb8\x77\x80\xa0\ -\x11\x74\x1d\x98\xdf\xe2\x37\x26\x04\x01\x10\x34\x98\x3b\x71\x58\ -\x86\x9e\x34\x13\x82\x80\xa0\x11\x74\x6d\x7b\xd2\xe3\x98\x10\x04\ -\x40\xd0\x60\x26\xab\x5a\x8c\x36\x50\xce\xbf\xe7\xde\x00\x82\x46\ -\xd0\xd0\xbf\x33\x4b\x2f\x3d\x67\x00\x04\x0d\x66\xa2\x53\x95\x8e\ -\xa1\xe7\x0c\x80\xa0\xc1\x4c\x16\x2e\x78\xe2\xb0\x85\x7b\x00\x08\ -\x1a\x41\x83\x7f\x9c\xf4\xaf\x05\xc8\x79\x18\x75\x0f\x08\x1a\x41\ -\x43\x30\x4b\xe5\x3c\x71\x88\x9c\x01\x41\x23\x68\x88\x38\x71\x98\ -\x87\x9c\x37\xa4\xae\x01\x41\x23\x68\x88\x37\x71\x98\x65\x4f\x9a\ -\x7c\xce\x80\xa0\x11\x34\x24\x60\x41\x8b\x1f\xe9\x39\x03\x20\x68\ -\x30\x93\xd5\x2d\xbe\x48\x49\xcc\x1f\x5a\x0c\xa5\x4e\x01\x41\x23\ -\x68\x48\xb7\x27\xfd\x75\x42\x39\x7f\x62\x31\x07\x75\x09\x08\x1a\ -\x41\x43\xfa\xac\x62\xf1\x5d\x4c\x39\x7f\x69\xb1\x34\x75\x08\x08\ -\x1a\x41\x43\x76\x0c\xb2\x78\x37\xa2\x9c\xff\x67\x31\x0f\x75\x07\ -\x08\x1a\x41\x43\xf6\xcc\x64\xf1\x5e\x84\x9e\xf3\x82\xd4\x19\x20\ -\x68\x04\x0d\xf9\x31\xad\xc5\x43\x01\x72\xbe\xd3\x62\x16\xea\x0a\ -\x10\x34\x82\x86\x62\xf8\xaf\x87\x9c\x5f\xa5\x6e\x00\x41\x23\x68\ -\x28\x96\x81\x16\x23\x1d\x72\xbe\xdb\x62\x66\xea\x06\x10\x34\x82\ -\x06\x33\x78\x43\xe4\x7c\x15\x75\x01\x60\x98\xa0\x01\x00\x20\x5d\ -\xa8\x04\x00\x00\x04\x0d\x00\x00\x08\x1a\x00\x00\x41\x03\x00\x00\ -\x82\x06\x00\x40\xd0\x00\x00\x80\xa0\x01\x00\x00\x41\x03\x00\x20\ -\x68\x00\x00\x40\xd0\x00\x00\x08\x1a\x00\x00\x10\x34\x00\x00\x20\ -\x68\x00\x00\x04\x0d\x00\x00\x08\x1a\x00\x00\x41\x03\x00\x00\x82\ -\x06\x00\x40\xd0\x00\x00\x80\xa0\x01\x00\x00\x41\x03\x00\x20\x68\ -\x00\x00\x40\xd0\x00\x00\x08\x1a\x00\x00\x10\x34\x00\x00\x20\x68\ -\x00\x00\x04\x0d\x00\x00\x08\x1a\x00\x00\x41\x03\x00\x00\x82\x06\ -\x00\x40\xd0\xe1\x50\x23\x47\x55\x8d\x26\x8b\x2e\x8b\xbe\x14\xe8\ -\xb1\x68\x09\x79\xde\xce\x94\xce\xd9\xa0\xd7\xa2\xbd\x80\x73\xb7\ -\x85\x38\x5f\x87\x5c\x5f\x1a\xe7\xeb\x94\x7b\xe6\x75\xae\xee\x94\ -\xeb\x35\x4c\x59\x3b\x33\x38\x97\x6e\x4b\xcd\x09\xee\x67\x77\xcc\ -\xe7\xa1\x37\xe6\x3d\x76\xbb\x86\x8e\x14\x9f\x53\xb7\xeb\xaa\x94\ -\x8b\x10\x74\x7e\x0f\xf4\xf0\x02\x04\x1d\xe5\xa1\xc8\x53\xd0\x59\ -\x94\xb3\xbb\x06\x82\x6e\x7c\xe9\x0e\x2a\xb1\xa0\xbb\x53\x7a\x46\ -\x9b\x3d\xea\x07\x41\x57\x5c\xd0\x6d\x19\x3d\x58\xdd\x05\x0a\xba\ -\x2f\xa0\x87\x99\xa7\xa0\x9b\x0b\x90\x65\x95\x04\xdd\x27\x6f\x77\ -\x65\x15\x74\x5a\x12\x6d\x47\xd0\xf5\x14\x74\x57\x86\x0f\x56\x91\ -\x82\x6e\x35\x44\xd0\xed\x05\x88\xab\x6a\x82\xee\x2d\xb9\xa0\x5b\ -\x33\x7c\xcb\x45\xd0\x15\x17\x74\x77\x45\x05\xdd\x66\x88\xa0\xb3\ -\x2c\x63\x37\x82\x2e\x85\xa0\xd3\x18\x87\xee\x45\xd0\x08\xda\x3e\ -\x09\x15\xe5\x18\x2d\x29\x0a\xba\x3b\xa7\x07\x2a\xcb\xf1\xc2\x2c\ -\xce\x93\xf6\xf5\xa6\x71\xdf\xb3\xb8\xbe\xb6\x0a\x0a\xba\x27\x61\ -\x1b\x6a\x49\xd0\x09\x42\xd0\x08\x1a\x41\x23\x68\x04\x1d\xf0\x16\ -\x91\xc5\xf8\x33\x82\x46\xd0\x08\x1a\x41\x23\xe8\x14\x04\xdd\xaa\ -\xb2\x19\x86\x44\xd0\x08\x1a\x41\x23\x68\x04\x9d\x50\xd0\x49\xea\ -\xb6\x17\x41\x23\x68\x04\x8d\xa0\x11\x74\x76\x82\x8e\x3b\x0e\xdd\ -\x92\x70\x22\x1e\x41\x23\x68\x04\x8d\xa0\x11\x74\x88\x48\x96\xa6\ -\x18\xd7\xd2\x81\xa0\x11\x34\x82\x46\xd0\x08\x3a\x7b\x41\xb7\xaa\ -\x74\xc7\x9f\x11\x34\x82\x46\xd0\x08\x1a\x41\xa7\x24\xe8\x38\xf5\ -\xdb\x87\xa0\x11\x34\x82\x46\xd0\x08\x3a\x7b\x41\x47\x1d\x87\x1e\ -\x8e\xa0\x11\x34\x82\x46\xd0\x08\x3a\x1f\x41\x47\x1d\x87\xee\x40\ -\xd0\x08\x1a\x41\x23\x68\x04\x9d\x9f\xa0\xa3\x8c\x43\xf7\x20\x68\ -\x04\xed\x96\x2c\xa9\x0b\x41\x23\x68\x04\x9d\x89\xa0\xa3\xd4\x71\ -\x1f\x82\x46\xd0\x5e\xe9\x46\xdb\x72\x38\x37\x82\x2e\xf7\x9b\x13\ -\x82\x0e\xbe\x86\x9e\x98\xe3\xd0\xad\x1e\xf5\x80\xa0\x6b\x26\xe8\ -\x26\x9f\x95\x4a\xc3\x11\x34\x82\x46\xd0\x89\x13\xf6\xc7\x19\x87\ -\xee\x08\x79\x2c\x04\x5d\x83\x1d\x55\xbc\x66\x8b\xc3\xee\x66\x81\ -\xa0\x11\x34\x82\x76\xbf\x86\xae\x98\xe3\xd0\x3d\x2e\x75\x80\xa0\ -\x6b\x2a\x68\xbf\xa1\x8e\x9e\x0c\x25\x8d\xa0\x11\x74\xd5\x05\xdd\ -\x1e\x73\x8e\xc7\xed\x6f\x18\xe2\xa8\xb1\xa0\x83\xf2\xd9\x36\x21\ -\x68\x04\x8d\xa0\x23\x5f\x43\x5b\x8c\x71\xe8\x56\x8f\x5e\x37\x82\ -\xae\xb9\xa0\xfd\x96\x96\x76\x23\x68\x04\x8d\xa0\x63\x09\xda\x6d\ -\x3c\x79\x50\xc4\xe3\x34\x21\x68\x04\xdd\x98\x34\xec\x51\xe9\xa7\ -\x4c\x44\xd0\x08\xba\xae\x82\x6e\x89\x38\x0e\xed\xd5\xe3\x46\xd0\ -\x08\xfa\xff\x18\xe4\x13\xd9\xd1\x86\xa0\x11\x34\x82\x8e\x24\x68\ -\xb7\x63\x76\xf9\x74\x90\xbc\xf6\x34\x44\xd0\x08\x3a\x54\x1e\x80\ -\xe1\x08\x1a\x41\xc7\x28\x67\xdc\xcd\x6c\xab\x20\xe8\xae\x90\xe3\ -\xd0\xad\x3e\xcf\x1b\x82\x46\xd0\xa1\x22\x3b\xd2\x0a\xbf\x33\x4d\ -\xd0\x79\xed\x5c\x5e\x57\x41\xf7\xd6\x58\xd0\xed\x21\xc7\xa1\x3b\ -\x7d\xda\x18\x82\x46\xd0\xb9\x46\x76\x20\xe8\x7a\x09\x3a\x6e\x9d\ -\x77\x55\x40\xd0\xcd\x21\x8f\xd9\xe3\x53\x06\x04\x8d\xa0\x73\x8d\ -\xec\x40\xd0\xf5\x12\x74\x4b\xcc\xde\xf3\xa0\x0a\x08\x3a\xcc\x38\ -\x74\x93\x47\x1c\x35\x82\x46\xd0\xb1\x23\x3b\xba\x33\xe8\x9d\xa7\ -\x01\x82\x36\x73\x92\xb0\x27\x82\x98\x3b\x22\xbc\xa5\x95\x41\xd0\ -\x5d\x01\x43\x37\x6e\xe3\xcf\xcd\x08\x1a\x41\x17\x15\x7e\x97\xa5\ -\xa0\x5b\x11\xb4\x91\x82\xee\x08\xe8\x25\x9a\x30\x19\x9b\x95\xa0\ -\x83\x04\xdc\x19\x20\x70\x04\x8d\xa0\x73\x0d\xbf\xcb\x52\xd0\x4d\ -\x86\x88\x13\x41\x4f\x4c\xb3\x4a\x6f\xc7\xeb\xb2\x09\xba\x29\xe0\ -\xf7\x3d\x01\x43\x20\x08\x1a\x41\xe7\x1a\x7e\x97\x95\xa0\x3b\x0c\ -\x12\x27\x82\x0e\x37\xcc\xd1\x5c\x03\x41\xfb\x49\xb8\x29\xc4\x5b\ -\x20\x82\x46\xd0\xb9\x86\xdf\xa5\x2d\xe8\xde\x08\xaf\xcb\x08\xba\ -\x38\x41\x77\xc4\xfc\x52\xad\x82\xa0\x3b\x3c\x86\x31\x5a\x43\x84\ -\xe1\x21\x68\x04\x9d\x6b\xf8\x5d\x91\xf2\x42\xd0\xc5\x09\xba\x39\ -\x66\xac\x73\x15\x04\xed\x35\x0e\x1d\x66\x21\x0b\x82\x46\xd0\xb9\ -\x86\xdf\x21\xe8\xfa\x2e\xf5\xee\x49\x79\x85\x6a\x59\x04\x3d\xc0\ -\x63\x92\xb4\x27\xc4\xbd\x40\xd0\x08\x3a\xb5\xc8\x8e\x36\x04\x8d\ -\xa0\x7d\x3e\x1f\x37\x4f\x72\x15\x04\xdd\xad\x82\x77\x4a\x69\x45\ -\xd0\x08\x3a\xcb\xc8\x8e\x1e\x04\x8d\xa0\x03\xda\x4d\x9a\x9b\xa0\ -\x96\x49\xd0\xed\x2a\xde\x5e\x83\x08\x1a\x41\xc7\xa2\xb5\x84\x31\ -\xc2\x08\xba\xf8\x6c\x76\x3d\x2a\xbd\x6c\x89\x65\x12\x74\x73\xc0\ -\x64\x77\x37\x82\x46\xd0\x69\x3e\xa8\x2d\x08\x3a\xf3\xf3\xa4\x7d\ -\xbd\x26\x08\xba\x3d\xc5\x32\x95\x49\xd0\x41\x89\xa3\xda\x11\x34\ -\x82\x46\xd0\x08\xba\x68\x41\x7b\x0d\x73\x0c\xaa\x81\xa0\xbb\x7c\ -\x04\xdd\x8c\xa0\x11\x34\x82\x46\xd0\x26\x24\xec\xef\x4e\x69\xe9\ -\x77\xd9\x04\xdd\xaa\xa2\xa7\x56\x45\xd0\x08\x1a\x41\x23\xe8\x5c\ -\xcb\xd9\x9e\xd2\xd2\xef\xb2\x09\xda\xeb\xed\xa1\x0b\x41\x23\x68\ -\x04\x8d\xa0\x4d\x11\x74\x53\xc4\xd7\xfc\xaa\x08\x3a\xce\x24\x29\ -\x82\x46\xd0\x08\x1a\x41\xe7\x5e\xce\xee\x14\x96\x7e\x97\x51\xd0\ -\x9d\x11\xc7\xdf\x11\x34\x82\x46\xd0\x08\x3a\xf7\x72\xc6\xdd\x28\ -\xb6\xec\x82\x6e\x8d\x38\xb4\x83\xa0\x11\x34\x82\x46\xd0\xb9\x97\ -\xd3\x6b\x98\x63\x78\xc5\x05\x3d\x20\x62\xfd\x23\x68\x04\x8d\xa0\ -\x11\x74\x21\xe5\xec\x4e\xb8\xf4\xbb\xac\x82\xee\x56\xe1\x37\x99\ -\x40\xd0\x08\x1a\x41\x23\xe8\x42\xca\xd9\x96\x70\xe9\x77\x59\x05\ -\xdd\x1e\xa1\xac\x08\x1a\x41\x23\x68\x04\x5d\x48\x39\xbd\x86\x39\ -\xda\x2a\x2e\xe8\x96\x08\xa1\x85\x08\x1a\x41\x23\x68\x04\x5d\x58\ -\x39\xbb\x94\x19\xa9\x6b\xf3\x14\x74\xe3\x7c\x1d\x08\x1a\x41\x23\ -\x68\x04\x6d\xb2\xa0\x5b\x13\x2c\xfd\x2e\xb3\xa0\x93\x5c\x17\x82\ -\xae\xa1\xa0\xd3\xa2\x6c\x82\x8e\x4b\x67\x4e\xe7\xa9\xba\xa0\x07\ -\xa8\x68\xc9\x83\xf2\xaa\x67\x04\x8d\xa0\x0b\xa3\x0b\x41\x67\x2a\ -\xe8\xf6\x0c\xeb\xb7\xab\x82\x82\xee\x8a\xb9\xf4\xbb\x1d\x41\x23\ -\xe8\x2a\x0a\xba\xad\xc0\xde\x5d\x1d\x04\xdd\x5c\xb0\x34\xca\x26\ -\xe8\xd6\x98\x4b\xbf\x9b\x33\x16\xf4\x20\x04\x8d\xa0\xab\x34\xcc\ -\x31\x1c\x41\x67\xfa\xfa\xdd\xad\x8a\x9f\x7b\xc8\x73\x0c\xb8\x43\ -\x15\x37\xcc\xd1\x99\xa0\x0e\x10\x34\x82\x4e\x4c\x53\x8a\x43\x1d\ -\x3d\x32\x69\x38\x00\x41\x4f\x44\x87\xf2\x4f\xd2\x1e\xf5\x7c\x4d\ -\x15\x16\x74\xdc\x61\x8e\xb4\xeb\xb9\x57\x45\x4b\x7d\x8a\xa0\x11\ -\x34\x00\x40\x35\x41\xd0\x00\x00\x08\x1a\x00\x00\x10\x34\x00\x00\ -\x82\x46\xd0\x00\x00\x08\x1a\x00\x00\x41\x23\x68\x00\x00\x04\x0d\ -\x00\x00\x08\x1a\x00\x00\x41\x03\x00\x00\x82\x06\x00\x40\xd0\x08\ -\x1a\x00\x00\x41\x03\x00\x00\x82\x06\x00\x40\xd0\x00\x00\x80\xa0\ -\x01\x00\x10\x34\x82\x06\x00\x40\xd0\x00\x00\x08\x1a\x41\x03\x00\ -\x20\x68\x00\x00\x40\xd0\x00\x00\x08\x1a\x00\x00\x10\x34\x00\x00\ -\x82\x46\xd0\x00\x00\x08\x1a\x00\x00\x10\x34\x00\x00\x82\x06\x00\ -\x00\x04\x0d\x00\x80\xa0\x11\x34\x00\x00\x82\x06\x00\x40\xd0\x08\ -\x1a\x00\x00\x41\x03\x00\x00\x82\x06\x00\x40\xd0\x23\x47\x75\x5a\ -\xf4\xd9\xe8\x4a\x70\x51\xce\x63\x69\xda\x22\xfc\x7d\x87\x45\xaf\ -\xcb\x31\xe2\xd2\x6d\x31\xc8\xe7\x7c\xdd\x29\x9e\x2b\x49\xb9\xd3\ -\xc2\xad\xfe\x7b\x12\x1c\xaf\xcb\xe5\x78\x9d\x31\x8f\xd5\x92\xf2\ -\xb5\xa5\x5d\x56\xbf\xeb\xec\x4b\x70\x4d\xdd\x25\x6f\x03\x7e\xc7\ -\x4d\x42\xaf\x3c\xef\x03\x0c\xaa\xdb\x34\xcb\xd8\x96\x95\xa0\x35\ -\x4d\x05\x08\xba\x33\x23\x51\xf6\xfa\x94\xa7\x6a\x82\xee\x4e\x20\ -\x17\xaf\x2f\xcc\xb4\x1e\x8a\x36\x97\x63\x75\x19\x54\xd6\xaa\x08\ -\x3a\xab\x7a\xc9\xea\xf9\xec\x46\xd0\xd1\x05\xdd\x96\xb3\xa0\x9b\ -\x33\x14\xa5\x5f\xaf\xaf\x6a\x82\xf6\x7a\xfb\x68\x89\x79\xbc\x56\ -\x8f\x2f\xbc\xb4\xda\x46\x87\x41\x65\xad\x8a\xa0\xb3\xaa\x97\xce\ -\x0c\x9f\x95\x16\x04\x1d\x4d\xd0\xdd\x39\x0b\xba\x3d\x63\x41\xf7\ -\xd4\x40\xd0\x83\x32\xb8\x96\x41\x29\xf6\xc6\xdc\x86\x4b\x5a\x0d\ -\x2a\x6b\x15\x04\x9d\x65\xbd\x64\x29\xe8\x0e\x04\x1d\x4d\xd0\x7d\ -\x01\x63\xb7\x69\x0b\xba\x33\x63\x41\xf7\xd6\x40\xd0\xad\x31\xde\ -\x20\xe2\xf6\xc8\xe2\xf4\xc6\x7a\x5c\x8e\xd3\x6c\x58\x59\xcb\x2e\ -\xe8\x2c\xeb\xa5\xb3\x80\x37\x5c\x04\xed\x73\x51\xed\x05\x0b\x3a\ -\xcd\xb1\xce\x5e\x95\xee\x98\x5e\xa7\x1a\x69\xd6\x8c\xb1\xc7\x78\ -\x71\x1a\x0d\xb9\x27\xa5\x2f\x9f\xde\x8c\xc7\xc6\xd3\x7a\x68\xcb\ -\x2c\xe8\x2c\xeb\x25\xad\xb2\x75\x97\x4c\xd0\xb1\xcf\x91\xb5\xa0\ -\x7b\x10\x74\xa9\x04\xdd\x15\xe3\x0d\x22\xee\x71\x3b\x52\x78\xf5\ -\xee\x31\xb0\xac\x65\x17\x74\x96\xf5\x82\xa0\x0d\x13\x74\x9c\x57\ -\x50\x04\x5d\x1c\x3d\x01\xaf\x5c\x71\x23\x73\xda\x53\x88\xbe\x68\ -\x4d\x39\x82\x23\xab\xb2\x96\x5d\xd0\x59\xd6\x0b\x82\x36\x50\xd0\ -\x9d\x08\xba\x34\x82\x0e\x1a\x13\x1b\x1e\xf3\xb8\xc3\x53\xe8\xfd\ -\xb6\xa7\x34\x84\x96\x75\x59\xcb\x2e\xe8\x2c\xeb\x05\x41\x1b\x28\ -\xe8\x5e\x04\x5d\x0a\x41\xb7\x78\x94\x39\x0d\x21\x36\x65\xd4\x2e\ -\x5a\x0d\x2c\x6b\x99\x05\x9d\x75\xbd\x20\x68\x03\x05\x1d\xf5\x5b\ -\x17\x41\x17\x43\x9b\x4b\x0f\xb7\x27\xc5\x21\x85\xde\x84\x51\x3e\ -\xdd\x29\x45\x09\xe5\x51\xd6\xb2\x0a\x3a\xeb\x7a\x41\xd0\x86\x0a\ -\xba\x0b\x41\x1b\x2f\xe8\x4e\x97\xba\xeb\x4a\x71\x52\xae\x3b\xe1\ -\x17\x77\x6f\x8a\xf7\x23\xeb\xb2\x96\x55\xd0\x59\xd7\x0b\x82\x36\ -\x54\xd0\x51\x26\x17\x10\x74\x31\x74\xbb\x5c\x5f\x47\x86\x52\x8c\ -\xfa\xba\x9c\xe6\x83\x95\x75\x59\xcb\x2a\xe8\x22\xda\x00\x82\x36\ -\x44\xd0\x6d\x08\xda\x68\x41\xf7\xba\xd4\x79\x6b\x8a\x0b\x43\xda\ -\x13\xd4\x41\x4b\xc6\x0b\x67\xd2\x2e\x6b\x59\x05\x9d\x75\xbd\x20\ -\x68\x83\x05\xdd\x8d\xa0\x8d\x15\xf4\x20\x8f\x95\x7e\xcd\x19\x4f\ -\xcc\x75\x27\xb8\x1f\xed\x25\x2b\xab\xe9\x82\xce\xa3\x5e\x10\xb4\ -\x41\x82\xee\x89\x39\xa9\x83\xa0\xf3\xa7\xd5\x47\x26\x69\x26\x27\ -\x8a\x5b\xa7\x9d\x29\x86\x7b\xe5\x51\xd6\x32\x0a\x3a\x8f\x7a\x41\ -\xd0\x06\x09\xba\x43\xa5\x97\xd0\x04\x41\x67\x4b\xbb\xcf\x44\x50\ -\xd6\x91\x1c\x71\xeb\xaf\xc9\xe0\xb2\x96\x51\xd0\x79\xd4\x0b\x82\ -\x36\x48\xd0\x6d\x2e\x37\xb6\x07\x41\x1b\x29\xe8\x2e\x9f\x7a\xcb\ -\x3a\x92\x23\x4c\xd2\xa4\x9e\x0c\x97\x9d\x67\x51\xd6\x32\x0a\x3a\ -\x8f\x7a\x41\xd0\x86\x09\xba\x3d\xc6\x04\x03\x82\x2e\x7e\x89\xb7\ -\xfd\xda\x3a\x54\x7a\x09\x8a\xe2\xde\xdb\x2c\x13\x37\x65\x51\xd6\ -\x32\x0a\x3a\x8f\x7a\x41\xd0\x86\x09\xba\x29\x46\x4c\x34\x82\x2e\ -\x7e\x89\x77\x5b\x40\x5d\xb4\xa4\x58\xaf\x41\xf5\xd0\x9c\x72\xdd\ -\xe5\x51\xd6\x32\x0a\x3a\x8f\x7a\x41\xd0\x86\x09\xda\xad\x32\x7b\ -\x11\xb4\x51\x82\x6e\x09\x78\xf8\x5a\x12\x84\x4c\x86\x39\x57\xd0\ -\x17\x76\x6b\xc6\xe7\xcf\xa2\xac\x65\x13\x74\x5e\xf5\x82\xa0\x0d\ -\x14\x74\x5b\xc4\x30\x1d\x04\x5d\xec\x12\xef\xbe\x10\xbd\xab\x34\ -\x7b\xb0\x41\xe3\x99\xed\x19\xf7\xe0\xb3\x28\x6b\xd9\x04\x9d\x57\ -\xbd\x20\x68\x03\x05\xed\x36\x7b\xdf\x8d\xa0\x8d\x11\x74\x67\x88\ -\x72\xf6\x64\x38\x06\x1c\x54\xaf\x5d\x19\x8e\x81\x67\x55\xd6\xb2\ -\x09\x3a\xaf\x7a\x49\x5a\xb6\x66\xe5\xbd\x5f\x22\x82\x4e\x20\xe8\ -\xae\x08\x61\x52\x08\xba\xd8\x25\xde\xdd\x21\x3e\x93\x76\xf2\xfe\ -\x41\x11\xae\xaf\xa7\x04\x65\x2d\x9b\xa0\xf3\xaa\x97\x24\x65\x0b\ -\x5a\x0c\x87\xa0\x13\x08\x3a\xca\x18\x16\x82\x2e\x76\x89\x77\x67\ -\xc8\xba\x8d\x1b\x87\xdc\x11\x71\xc8\xab\x37\xc5\x07\x2a\xaf\xb2\ -\x96\x4d\xd0\x79\xd5\x4b\x9c\xb2\xb5\xf8\xf4\x9a\xd3\x58\x04\x87\ -\xa0\x23\xbe\x22\x21\xe8\xfc\x68\x0a\x59\xd7\x51\xe7\x11\xa2\x4e\ -\xfa\xb5\x47\x18\xb3\xee\x2c\x41\x59\xcb\x24\xe8\x3c\xeb\x25\x8b\ -\x4d\x63\x7b\x23\xcc\x49\x20\x68\x9f\x9b\xdc\x11\xf2\x5b\x0f\x41\ -\x17\xbb\xc4\xbb\x25\xa4\x70\xe2\xe6\xc2\x88\x12\x36\xd7\x92\xf1\ -\x17\x43\x56\x65\x2d\x93\xa0\xf3\xac\x97\x34\x05\xdd\x1d\x63\xb9\ -\x7f\x99\x76\xf5\xce\x5d\xd0\x83\x42\x2e\xfd\x46\xd0\xc5\x2d\xf1\ -\xee\x8b\xd0\x93\x4d\xb2\xe4\x3b\xec\x7d\x6a\x8b\xb1\xd0\xc9\x84\ -\xb2\x96\x49\xd0\x79\xd6\x4b\x1a\xf2\xea\x51\xf1\x37\x6a\x40\xd0\ -\x01\x52\x0d\x33\xe1\x83\xa0\x8b\x5b\xe2\xdd\x1b\x61\x9c\x32\xc9\ -\x64\x5d\xd8\x48\x8e\xce\x14\x23\x38\xf2\x2c\x6b\x99\x04\x9d\x67\ -\xbd\xa4\xdd\x83\x6e\x46\xd0\xe9\x0a\x3a\x4c\x4c\x2b\x82\x2e\x6e\ -\x89\x77\x77\xc4\x32\xa4\x19\xc9\x91\x75\x04\x47\x9e\x65\x2d\x93\ -\xa0\xf3\xac\x97\xac\xc6\xa0\x5b\x11\x74\x3a\x82\x0e\xb3\xf4\x1b\ -\x41\x17\xb7\xc4\xbb\x33\x62\xfd\xa6\x39\xdc\xd0\x12\x42\x1e\x5d\ -\x25\x29\x6b\x99\x04\x9d\x67\xbd\xc4\x29\x5b\xb3\x72\x4f\x5d\x1c\ -\x67\x6e\x02\x41\x87\x90\x6a\x50\x3c\x25\x82\xce\x87\xe6\x88\xf5\ -\x9c\x75\x24\x47\x5b\x08\x79\x74\x94\xa4\xac\x65\x11\x74\xde\xf5\ -\x92\xa4\x6c\xad\x21\x86\x3c\x88\xe2\x48\x41\xd0\xad\x01\x37\x19\ -\x41\x17\xb7\xc4\xbb\x25\xa2\x74\xe2\x96\x61\x50\x88\x63\xa5\xb9\ -\x93\x47\xde\x65\x2d\x8b\xa0\xf3\xae\x97\xa4\x65\x6b\xf2\x78\x96\ -\x10\x74\x8a\x82\x0e\x5a\x7c\x80\xa0\x8b\x59\xe2\xdd\x17\xe2\xe1\ -\x48\xb3\x71\x07\x2d\x40\x69\x8d\xb9\x18\xc1\x84\xb2\x96\x45\xd0\ -\x79\xd7\x4b\x5a\x65\xeb\x44\xd0\xd9\x0a\xda\x6f\xe9\x37\x82\x2e\ -\x66\x89\x77\x6f\x0c\xa9\xa6\xb9\xec\xba\x27\x20\x6e\xbe\xb7\x44\ -\x65\x2d\x8b\xa0\xf3\xae\x17\x04\x5d\x12\x41\x37\xfb\x04\xbd\x23\ -\xe8\x62\x96\x78\x77\xc7\x2c\x47\x56\xbd\xb7\x34\x77\x72\xc9\xbb\ -\xac\x65\x11\x74\xde\xf5\x82\xa0\x4b\x22\x68\xbf\xf0\x1e\x04\x5d\ -\xcc\x12\xef\xb8\xc9\x66\xe2\xa6\xfe\x6c\x0f\x18\xc2\x48\x2b\x82\ -\xa3\x88\xb2\x96\x41\xd0\x45\xd4\x0b\x82\x2e\x91\xa0\x3b\x3c\x42\ -\x76\x10\x74\xf6\x0c\x8f\x59\xc7\xed\x29\x2e\xf9\x1e\x1e\x30\x09\ -\xd8\x9b\xe1\x79\xb2\x2e\x6b\x19\x04\x5d\x44\xbd\x20\xe8\x12\x09\ -\xda\x6b\xe9\x37\x82\x2e\x66\x89\xf7\xf0\x98\x0f\x75\x9a\xc9\x8b\ -\xda\x7d\x7e\x37\xbc\x44\x65\x2d\x83\xa0\x8b\xa8\x17\x04\x5d\x22\ -\x41\x7b\x4d\x14\x21\xe8\xfc\x97\x78\x87\x4d\x1d\x99\x75\x24\x47\ -\xa7\x8f\x04\x9a\x4a\x54\xd6\x32\x08\xba\x88\x7a\x41\xd0\x25\x13\ -\x74\x9b\x47\x61\x10\x74\xbe\x4b\xbc\x93\x2e\xb5\x4d\x3b\x51\x7c\ -\x5b\x8a\xe7\x28\xa2\xac\x65\x10\x74\x11\xf5\x82\xa0\x4b\x26\xe8\ -\xa6\x90\x0d\x00\x41\x67\xbb\xbc\x37\x29\x69\xc5\x27\xf7\x7a\xfc\ -\xbc\xbb\x64\x65\x2d\x83\xa0\x8b\xa8\x17\x04\x5d\x32\x41\x7b\xbd\ -\x6a\x21\xe8\x7c\x97\x78\x27\x25\xcd\x15\x7e\x6e\xf5\xd5\x59\xb2\ -\xb2\x9a\x2e\xe8\xa2\xea\x05\x41\x97\x50\xd0\xc3\x11\x74\xe1\x49\ -\xfa\x93\x12\x37\xc2\xa2\xc5\x23\x64\xab\x37\x66\x5b\x32\xa5\xac\ -\xa6\x0b\xba\xa8\x7a\x41\xd0\x25\x14\xb4\xdb\x64\x11\x82\xce\x77\ -\x89\x77\x52\xd2\xcc\x32\x17\x35\x3f\x84\x89\x65\x35\x5d\xd0\x45\ -\xd5\x0b\x82\x2e\xa9\xa0\x3b\x11\x74\x61\x4b\xbc\xa3\x86\xb0\xb9\ -\xf5\xbe\xd2\xce\xd3\x9c\xd6\x6a\xc5\xa2\xca\x6a\xba\xa0\x8b\xaa\ -\x17\x04\x5d\x52\x41\x37\x23\xe8\x42\x23\x38\xa2\x84\xb0\x0d\x4a\ -\x20\x9f\xb0\x91\x1c\x59\xc9\x3f\xaf\xb2\x9a\x2e\xe8\xa2\xea\x05\ -\x41\x97\x54\xd0\x41\x61\x3f\x08\x3a\xbb\xd9\xfb\x38\xe5\xea\xcd\ -\x70\x18\xa2\x57\x65\x17\xc1\x91\x57\x59\x4d\x17\x74\x51\xf5\x82\ -\xa0\x4b\x2c\xe8\x76\x04\x5d\xc8\x12\xef\xee\x94\x7a\x60\x6d\x29\ -\xd6\x75\x1a\xf5\x54\x64\x59\x4d\x16\x74\x91\xf5\x82\xa0\x4b\x2c\ -\xe8\x41\x08\xba\x90\x25\xde\x71\xae\xa3\x2b\xc5\xf2\xa4\x31\xbc\ -\x65\x5a\x59\x4d\x16\x74\x91\xf5\x82\xa0\x4b\x2c\x68\x2f\x91\x21\ -\xe8\x6c\x1b\x4f\x7b\x4a\x0f\x79\x56\x8b\x49\x5a\x4a\x58\x56\x93\ -\x05\x5d\x64\xbd\x20\xe8\x92\x0b\xba\x0d\x41\xe7\x3e\x41\x18\x47\ -\x80\xad\x29\xd7\x8f\xdf\xfc\x43\x19\xcb\x6a\xb2\xa0\x8b\xac\x17\ -\x04\x5d\x72\x41\x0f\x48\x59\xd0\x69\x6f\xef\x5e\x76\x41\xf7\xa6\ -\x24\x40\xaf\xe1\xa8\x34\x13\x1a\xa5\x9d\xa4\x3f\xcf\xb2\xa6\x2d\ -\xe8\x44\x3b\x43\x1b\x54\x2f\x59\x3e\xa3\xdd\x06\xd4\x6d\xda\xe7\ -\xe8\x34\x51\xd0\x5d\x31\x8f\xd5\x9e\xb1\xa0\x7b\x4a\x2e\xe8\x41\ -\x29\x7f\xe9\xf4\x26\x8c\xa5\x0d\xca\x0d\x9e\x64\x01\x4c\xd1\x65\ -\x35\x55\xd0\x45\xd7\x4b\x96\x82\xee\x42\xd0\xf9\x08\x3a\x6e\x22\ -\xf1\xe6\x8c\x05\xdd\x59\x72\x41\xb7\xa6\xfc\x7a\xd7\x93\xe2\x92\ -\x6f\xaf\xa5\xc7\x1d\x25\x2d\xab\xa9\x82\x2e\xba\x5e\xb2\x14\x74\ -\x1b\x82\xce\x47\xd0\x03\x12\xe4\x62\xc8\xaa\x01\xf4\x26\x78\x7d\ -\x37\x45\xd0\x1d\x29\x5f\x43\x9a\x91\x1c\x5e\xaf\xcb\xad\x25\x2d\ -\xab\xa9\x82\x2e\xba\x5e\x3a\x0b\x7e\xbb\x45\xd0\x29\x09\xba\x23\ -\xc1\xb1\x3a\x54\x70\x6e\x8f\xa8\x63\x5b\x83\x12\xca\xd1\x04\x41\ -\x77\xa7\x7c\x8f\xda\x73\x18\x33\x6e\x2e\x69\x59\x4d\x15\x74\xd1\ -\xf5\x92\x55\x0e\x90\x26\x04\x0d\x00\x00\x46\x40\x25\x00\x00\x20\ -\x68\x00\x00\x40\xd0\x00\x00\x08\x1a\x00\x00\x10\x34\x00\x00\x82\ -\x06\x00\x00\x04\x0d\x00\x00\x08\x1a\x00\x00\x41\x03\x00\x00\x82\ -\x06\x00\x40\xd0\x00\x00\x80\xa0\x01\x00\x00\x41\x03\x00\x20\x68\ -\x00\x00\x40\xd0\x00\x00\x08\x1a\x00\x00\x10\x34\x00\x00\x82\x06\ -\x00\x00\x04\x0d\x00\x00\x08\x1a\x00\x00\x41\x03\x00\x00\x82\x06\ -\x00\x40\xd0\x00\x00\x80\xa0\x01\x00\x00\x41\x03\x00\x20\x68\x00\ -\x00\x40\xd0\x00\x00\x08\x1a\x00\x00\x10\x34\x00\x00\x82\x06\x00\ -\x00\x04\x0d\x00\x00\x08\x1a\x00\x00\x41\x03\x00\x00\x82\x06\x00\ -\x40\xd0\x00\x00\x80\xa0\x01\x00\x00\x41\x03\x00\x20\x68\x00\x00\ -\x40\xd0\x00\x00\x08\x1a\x00\x00\x10\x34\x00\x00\x82\xa6\x12\x00\ -\x00\x10\x34\x00\x00\x44\xe0\xff\x01\xb6\x3c\x60\x86\xe1\x0e\xb0\ -\xdc\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\ -\x00\x00\xc7\x50\ -\x89\ -\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\ -\x00\x01\x90\x00\x00\x01\x90\x08\x06\x00\x00\x00\x80\xbf\x36\xcc\ -\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x0b\x13\x00\x00\x0b\x13\ -\x01\x00\x9a\x9c\x18\x00\x00\x0c\xb0\x69\x54\x58\x74\x58\x4d\x4c\ -\x3a\x63\x6f\x6d\x2e\x61\x64\x6f\x62\x65\x2e\x78\x6d\x70\x00\x00\ -\x00\x00\x00\x3c\x3f\x78\x70\x61\x63\x6b\x65\x74\x20\x62\x65\x67\ -\x69\x6e\x3d\x22\xef\xbb\xbf\x22\x20\x69\x64\x3d\x22\x57\x35\x4d\ -\x30\x4d\x70\x43\x65\x68\x69\x48\x7a\x72\x65\x53\x7a\x4e\x54\x63\ -\x7a\x6b\x63\x39\x64\x22\x3f\x3e\x20\x3c\x78\x3a\x78\x6d\x70\x6d\ -\x65\x74\x61\x20\x78\x6d\x6c\x6e\x73\x3a\x78\x3d\x22\x61\x64\x6f\ -\x62\x65\x3a\x6e\x73\x3a\x6d\x65\x74\x61\x2f\x22\x20\x78\x3a\x78\ -\x6d\x70\x74\x6b\x3d\x22\x41\x64\x6f\x62\x65\x20\x58\x4d\x50\x20\ -\x43\x6f\x72\x65\x20\x35\x2e\x36\x2d\x63\x31\x34\x35\x20\x37\x39\ -\x2e\x31\x36\x33\x34\x39\x39\x2c\x20\x32\x30\x31\x38\x2f\x30\x38\ -\x2f\x31\x33\x2d\x31\x36\x3a\x34\x30\x3a\x32\x32\x20\x20\x20\x20\ -\x20\x20\x20\x20\x22\x3e\x20\x3c\x72\x64\x66\x3a\x52\x44\x46\x20\ -\x78\x6d\x6c\x6e\x73\x3a\x72\x64\x66\x3d\x22\x68\x74\x74\x70\x3a\ -\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\ -\x39\x2f\x30\x32\x2f\x32\x32\x2d\x72\x64\x66\x2d\x73\x79\x6e\x74\ -\x61\x78\x2d\x6e\x73\x23\x22\x3e\x20\x3c\x72\x64\x66\x3a\x44\x65\ -\x73\x63\x72\x69\x70\x74\x69\x6f\x6e\x20\x72\x64\x66\x3a\x61\x62\ -\x6f\x75\x74\x3d\x22\x22\x20\x78\x6d\x6c\x6e\x73\x3a\x78\x6d\x70\ -\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x6e\x73\x2e\x61\x64\x6f\x62\ -\x65\x2e\x63\x6f\x6d\x2f\x78\x61\x70\x2f\x31\x2e\x30\x2f\x22\x20\ -\x78\x6d\x6c\x6e\x73\x3a\x64\x63\x3d\x22\x68\x74\x74\x70\x3a\x2f\ -\x2f\x70\x75\x72\x6c\x2e\x6f\x72\x67\x2f\x64\x63\x2f\x65\x6c\x65\ -\x6d\x65\x6e\x74\x73\x2f\x31\x2e\x31\x2f\x22\x20\x78\x6d\x6c\x6e\ -\x73\x3a\x70\x68\x6f\x74\x6f\x73\x68\x6f\x70\x3d\x22\x68\x74\x74\ -\x70\x3a\x2f\x2f\x6e\x73\x2e\x61\x64\x6f\x62\x65\x2e\x63\x6f\x6d\ -\x2f\x70\x68\x6f\x74\x6f\x73\x68\x6f\x70\x2f\x31\x2e\x30\x2f\x22\ -\x20\x78\x6d\x6c\x6e\x73\x3a\x78\x6d\x70\x4d\x4d\x3d\x22\x68\x74\ -\x74\x70\x3a\x2f\x2f\x6e\x73\x2e\x61\x64\x6f\x62\x65\x2e\x63\x6f\ -\x6d\x2f\x78\x61\x70\x2f\x31\x2e\x30\x2f\x6d\x6d\x2f\x22\x20\x78\ -\x6d\x6c\x6e\x73\x3a\x73\x74\x45\x76\x74\x3d\x22\x68\x74\x74\x70\ -\x3a\x2f\x2f\x6e\x73\x2e\x61\x64\x6f\x62\x65\x2e\x63\x6f\x6d\x2f\ -\x78\x61\x70\x2f\x31\x2e\x30\x2f\x73\x54\x79\x70\x65\x2f\x52\x65\ -\x73\x6f\x75\x72\x63\x65\x45\x76\x65\x6e\x74\x23\x22\x20\x78\x6d\ -\x6c\x6e\x73\x3a\x73\x74\x52\x65\x66\x3d\x22\x68\x74\x74\x70\x3a\ -\x2f\x2f\x6e\x73\x2e\x61\x64\x6f\x62\x65\x2e\x63\x6f\x6d\x2f\x78\ -\x61\x70\x2f\x31\x2e\x30\x2f\x73\x54\x79\x70\x65\x2f\x52\x65\x73\ -\x6f\x75\x72\x63\x65\x52\x65\x66\x23\x22\x20\x78\x6d\x6c\x6e\x73\ -\x3a\x74\x69\x66\x66\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x6e\x73\ -\x2e\x61\x64\x6f\x62\x65\x2e\x63\x6f\x6d\x2f\x74\x69\x66\x66\x2f\ -\x31\x2e\x30\x2f\x22\x20\x78\x6d\x6c\x6e\x73\x3a\x65\x78\x69\x66\ -\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x6e\x73\x2e\x61\x64\x6f\x62\ -\x65\x2e\x63\x6f\x6d\x2f\x65\x78\x69\x66\x2f\x31\x2e\x30\x2f\x22\ -\x20\x78\x6d\x70\x3a\x43\x72\x65\x61\x74\x6f\x72\x54\x6f\x6f\x6c\ -\x3d\x22\x41\x64\x6f\x62\x65\x20\x50\x68\x6f\x74\x6f\x73\x68\x6f\ -\x70\x20\x43\x43\x20\x32\x30\x31\x34\x20\x28\x57\x69\x6e\x64\x6f\ -\x77\x73\x29\x22\x20\x78\x6d\x70\x3a\x43\x72\x65\x61\x74\x65\x44\ -\x61\x74\x65\x3d\x22\x32\x30\x31\x35\x2d\x30\x39\x2d\x31\x33\x54\ -\x31\x35\x3a\x33\x35\x3a\x32\x39\x2b\x30\x32\x3a\x30\x30\x22\x20\ -\x78\x6d\x70\x3a\x4d\x6f\x64\x69\x66\x79\x44\x61\x74\x65\x3d\x22\ -\x32\x30\x31\x39\x2d\x30\x33\x2d\x32\x37\x54\x31\x35\x3a\x33\x33\ -\x3a\x35\x33\x2b\x30\x31\x3a\x30\x30\x22\x20\x78\x6d\x70\x3a\x4d\ -\x65\x74\x61\x64\x61\x74\x61\x44\x61\x74\x65\x3d\x22\x32\x30\x31\ -\x39\x2d\x30\x33\x2d\x32\x37\x54\x31\x35\x3a\x33\x33\x3a\x35\x33\ -\x2b\x30\x31\x3a\x30\x30\x22\x20\x64\x63\x3a\x66\x6f\x72\x6d\x61\ -\x74\x3d\x22\x69\x6d\x61\x67\x65\x2f\x70\x6e\x67\x22\x20\x70\x68\ -\x6f\x74\x6f\x73\x68\x6f\x70\x3a\x43\x6f\x6c\x6f\x72\x4d\x6f\x64\ -\x65\x3d\x22\x33\x22\x20\x70\x68\x6f\x74\x6f\x73\x68\x6f\x70\x3a\ -\x49\x43\x43\x50\x72\x6f\x66\x69\x6c\x65\x3d\x22\x73\x52\x47\x42\ -\x20\x49\x45\x43\x36\x31\x39\x36\x36\x2d\x32\x2e\x31\x22\x20\x78\ -\x6d\x70\x4d\x4d\x3a\x49\x6e\x73\x74\x61\x6e\x63\x65\x49\x44\x3d\ -\x22\x78\x6d\x70\x2e\x69\x69\x64\x3a\x62\x63\x62\x32\x35\x66\x32\ -\x62\x2d\x38\x65\x38\x37\x2d\x63\x37\x34\x36\x2d\x62\x38\x65\x64\ -\x2d\x34\x32\x64\x37\x64\x32\x61\x30\x38\x31\x61\x66\x22\x20\x78\ -\x6d\x70\x4d\x4d\x3a\x44\x6f\x63\x75\x6d\x65\x6e\x74\x49\x44\x3d\ -\x22\x61\x64\x6f\x62\x65\x3a\x64\x6f\x63\x69\x64\x3a\x70\x68\x6f\ -\x74\x6f\x73\x68\x6f\x70\x3a\x66\x32\x39\x34\x31\x34\x61\x31\x2d\ -\x62\x39\x34\x34\x2d\x62\x63\x34\x62\x2d\x61\x62\x33\x63\x2d\x65\ -\x36\x30\x65\x30\x38\x62\x31\x61\x39\x35\x61\x22\x20\x78\x6d\x70\ -\x4d\x4d\x3a\x4f\x72\x69\x67\x69\x6e\x61\x6c\x44\x6f\x63\x75\x6d\ -\x65\x6e\x74\x49\x44\x3d\x22\x78\x6d\x70\x2e\x64\x69\x64\x3a\x38\ -\x37\x37\x66\x61\x38\x37\x38\x2d\x32\x31\x61\x30\x2d\x65\x37\x34\ -\x62\x2d\x61\x61\x61\x63\x2d\x66\x37\x36\x31\x34\x64\x34\x33\x32\ -\x33\x37\x61\x22\x20\x74\x69\x66\x66\x3a\x4f\x72\x69\x65\x6e\x74\ -\x61\x74\x69\x6f\x6e\x3d\x22\x31\x22\x20\x74\x69\x66\x66\x3a\x58\ -\x52\x65\x73\x6f\x6c\x75\x74\x69\x6f\x6e\x3d\x22\x37\x32\x30\x30\ -\x30\x30\x2f\x31\x30\x30\x30\x30\x22\x20\x74\x69\x66\x66\x3a\x59\ -\x52\x65\x73\x6f\x6c\x75\x74\x69\x6f\x6e\x3d\x22\x37\x32\x30\x30\ -\x30\x30\x2f\x31\x30\x30\x30\x30\x22\x20\x74\x69\x66\x66\x3a\x52\ -\x65\x73\x6f\x6c\x75\x74\x69\x6f\x6e\x55\x6e\x69\x74\x3d\x22\x32\ -\x22\x20\x65\x78\x69\x66\x3a\x43\x6f\x6c\x6f\x72\x53\x70\x61\x63\ -\x65\x3d\x22\x36\x35\x35\x33\x35\x22\x20\x65\x78\x69\x66\x3a\x50\ -\x69\x78\x65\x6c\x58\x44\x69\x6d\x65\x6e\x73\x69\x6f\x6e\x3d\x22\ -\x32\x30\x34\x38\x22\x20\x65\x78\x69\x66\x3a\x50\x69\x78\x65\x6c\ -\x59\x44\x69\x6d\x65\x6e\x73\x69\x6f\x6e\x3d\x22\x32\x30\x34\x38\ -\x22\x3e\x20\x3c\x70\x68\x6f\x74\x6f\x73\x68\x6f\x70\x3a\x44\x6f\ -\x63\x75\x6d\x65\x6e\x74\x41\x6e\x63\x65\x73\x74\x6f\x72\x73\x3e\ -\x20\x3c\x72\x64\x66\x3a\x42\x61\x67\x3e\x20\x3c\x72\x64\x66\x3a\ -\x6c\x69\x3e\x61\x64\x6f\x62\x65\x3a\x64\x6f\x63\x69\x64\x3a\x70\ -\x68\x6f\x74\x6f\x73\x68\x6f\x70\x3a\x65\x37\x31\x62\x30\x32\x61\ -\x39\x2d\x38\x31\x30\x31\x2d\x34\x39\x34\x61\x2d\x62\x34\x38\x61\ -\x2d\x38\x34\x37\x33\x61\x64\x64\x34\x31\x61\x63\x38\x3c\x2f\x72\ -\x64\x66\x3a\x6c\x69\x3e\x20\x3c\x72\x64\x66\x3a\x6c\x69\x3e\x75\ -\x75\x69\x64\x3a\x34\x33\x46\x38\x37\x31\x32\x41\x45\x45\x36\x45\ -\x44\x43\x31\x31\x38\x31\x30\x41\x41\x36\x33\x30\x39\x43\x44\x31\ -\x30\x39\x41\x45\x3c\x2f\x72\x64\x66\x3a\x6c\x69\x3e\x20\x3c\x2f\ -\x72\x64\x66\x3a\x42\x61\x67\x3e\x20\x3c\x2f\x70\x68\x6f\x74\x6f\ -\x73\x68\x6f\x70\x3a\x44\x6f\x63\x75\x6d\x65\x6e\x74\x41\x6e\x63\ -\x65\x73\x74\x6f\x72\x73\x3e\x20\x3c\x78\x6d\x70\x4d\x4d\x3a\x48\ -\x69\x73\x74\x6f\x72\x79\x3e\x20\x3c\x72\x64\x66\x3a\x53\x65\x71\ -\x3e\x20\x3c\x72\x64\x66\x3a\x6c\x69\x20\x73\x74\x45\x76\x74\x3a\ -\x61\x63\x74\x69\x6f\x6e\x3d\x22\x63\x72\x65\x61\x74\x65\x64\x22\ -\x20\x73\x74\x45\x76\x74\x3a\x69\x6e\x73\x74\x61\x6e\x63\x65\x49\ -\x44\x3d\x22\x78\x6d\x70\x2e\x69\x69\x64\x3a\x38\x37\x37\x66\x61\ -\x38\x37\x38\x2d\x32\x31\x61\x30\x2d\x65\x37\x34\x62\x2d\x61\x61\ -\x61\x63\x2d\x66\x37\x36\x31\x34\x64\x34\x33\x32\x33\x37\x61\x22\ -\x20\x73\x74\x45\x76\x74\x3a\x77\x68\x65\x6e\x3d\x22\x32\x30\x31\ -\x35\x2d\x30\x39\x2d\x31\x33\x54\x31\x35\x3a\x33\x35\x3a\x32\x39\ -\x2b\x30\x32\x3a\x30\x30\x22\x20\x73\x74\x45\x76\x74\x3a\x73\x6f\ -\x66\x74\x77\x61\x72\x65\x41\x67\x65\x6e\x74\x3d\x22\x41\x64\x6f\ -\x62\x65\x20\x50\x68\x6f\x74\x6f\x73\x68\x6f\x70\x20\x43\x43\x20\ -\x32\x30\x31\x34\x20\x28\x57\x69\x6e\x64\x6f\x77\x73\x29\x22\x2f\ -\x3e\x20\x3c\x72\x64\x66\x3a\x6c\x69\x20\x73\x74\x45\x76\x74\x3a\ -\x61\x63\x74\x69\x6f\x6e\x3d\x22\x63\x6f\x6e\x76\x65\x72\x74\x65\ -\x64\x22\x20\x73\x74\x45\x76\x74\x3a\x70\x61\x72\x61\x6d\x65\x74\ -\x65\x72\x73\x3d\x22\x66\x72\x6f\x6d\x20\x69\x6d\x61\x67\x65\x2f\ -\x70\x6e\x67\x20\x74\x6f\x20\x61\x70\x70\x6c\x69\x63\x61\x74\x69\ -\x6f\x6e\x2f\x76\x6e\x64\x2e\x61\x64\x6f\x62\x65\x2e\x70\x68\x6f\ -\x74\x6f\x73\x68\x6f\x70\x22\x2f\x3e\x20\x3c\x72\x64\x66\x3a\x6c\ -\x69\x20\x73\x74\x45\x76\x74\x3a\x61\x63\x74\x69\x6f\x6e\x3d\x22\ -\x73\x61\x76\x65\x64\x22\x20\x73\x74\x45\x76\x74\x3a\x69\x6e\x73\ -\x74\x61\x6e\x63\x65\x49\x44\x3d\x22\x78\x6d\x70\x2e\x69\x69\x64\ -\x3a\x65\x31\x32\x31\x38\x63\x64\x37\x2d\x31\x32\x31\x31\x2d\x39\ -\x31\x34\x66\x2d\x38\x34\x62\x31\x2d\x39\x36\x36\x31\x31\x62\x31\ -\x32\x31\x38\x36\x36\x22\x20\x73\x74\x45\x76\x74\x3a\x77\x68\x65\ -\x6e\x3d\x22\x32\x30\x31\x35\x2d\x30\x39\x2d\x31\x33\x54\x31\x36\ -\x3a\x34\x32\x3a\x34\x37\x2b\x30\x32\x3a\x30\x30\x22\x20\x73\x74\ -\x45\x76\x74\x3a\x73\x6f\x66\x74\x77\x61\x72\x65\x41\x67\x65\x6e\ -\x74\x3d\x22\x41\x64\x6f\x62\x65\x20\x50\x68\x6f\x74\x6f\x73\x68\ -\x6f\x70\x20\x43\x43\x20\x32\x30\x31\x34\x20\x28\x57\x69\x6e\x64\ -\x6f\x77\x73\x29\x22\x20\x73\x74\x45\x76\x74\x3a\x63\x68\x61\x6e\ -\x67\x65\x64\x3d\x22\x2f\x22\x2f\x3e\x20\x3c\x72\x64\x66\x3a\x6c\ -\x69\x20\x73\x74\x45\x76\x74\x3a\x61\x63\x74\x69\x6f\x6e\x3d\x22\ -\x73\x61\x76\x65\x64\x22\x20\x73\x74\x45\x76\x74\x3a\x69\x6e\x73\ -\x74\x61\x6e\x63\x65\x49\x44\x3d\x22\x78\x6d\x70\x2e\x69\x69\x64\ -\x3a\x37\x39\x35\x61\x38\x30\x65\x30\x2d\x61\x32\x62\x61\x2d\x30\ -\x36\x34\x62\x2d\x39\x62\x33\x31\x2d\x36\x31\x31\x64\x33\x37\x64\ -\x36\x66\x38\x62\x30\x22\x20\x73\x74\x45\x76\x74\x3a\x77\x68\x65\ -\x6e\x3d\x22\x32\x30\x31\x38\x2d\x31\x30\x2d\x31\x34\x54\x32\x33\ -\x3a\x34\x30\x3a\x31\x31\x2b\x30\x32\x3a\x30\x30\x22\x20\x73\x74\ -\x45\x76\x74\x3a\x73\x6f\x66\x74\x77\x61\x72\x65\x41\x67\x65\x6e\ -\x74\x3d\x22\x41\x64\x6f\x62\x65\x20\x50\x68\x6f\x74\x6f\x73\x68\ -\x6f\x70\x20\x43\x43\x20\x28\x57\x69\x6e\x64\x6f\x77\x73\x29\x22\ -\x20\x73\x74\x45\x76\x74\x3a\x63\x68\x61\x6e\x67\x65\x64\x3d\x22\ -\x2f\x22\x2f\x3e\x20\x3c\x72\x64\x66\x3a\x6c\x69\x20\x73\x74\x45\ -\x76\x74\x3a\x61\x63\x74\x69\x6f\x6e\x3d\x22\x63\x6f\x6e\x76\x65\ -\x72\x74\x65\x64\x22\x20\x73\x74\x45\x76\x74\x3a\x70\x61\x72\x61\ -\x6d\x65\x74\x65\x72\x73\x3d\x22\x66\x72\x6f\x6d\x20\x61\x70\x70\ -\x6c\x69\x63\x61\x74\x69\x6f\x6e\x2f\x76\x6e\x64\x2e\x61\x64\x6f\ -\x62\x65\x2e\x70\x68\x6f\x74\x6f\x73\x68\x6f\x70\x20\x74\x6f\x20\ -\x69\x6d\x61\x67\x65\x2f\x70\x6e\x67\x22\x2f\x3e\x20\x3c\x72\x64\ -\x66\x3a\x6c\x69\x20\x73\x74\x45\x76\x74\x3a\x61\x63\x74\x69\x6f\ -\x6e\x3d\x22\x64\x65\x72\x69\x76\x65\x64\x22\x20\x73\x74\x45\x76\ -\x74\x3a\x70\x61\x72\x61\x6d\x65\x74\x65\x72\x73\x3d\x22\x63\x6f\ -\x6e\x76\x65\x72\x74\x65\x64\x20\x66\x72\x6f\x6d\x20\x61\x70\x70\ -\x6c\x69\x63\x61\x74\x69\x6f\x6e\x2f\x76\x6e\x64\x2e\x61\x64\x6f\ -\x62\x65\x2e\x70\x68\x6f\x74\x6f\x73\x68\x6f\x70\x20\x74\x6f\x20\ -\x69\x6d\x61\x67\x65\x2f\x70\x6e\x67\x22\x2f\x3e\x20\x3c\x72\x64\ -\x66\x3a\x6c\x69\x20\x73\x74\x45\x76\x74\x3a\x61\x63\x74\x69\x6f\ -\x6e\x3d\x22\x73\x61\x76\x65\x64\x22\x20\x73\x74\x45\x76\x74\x3a\ -\x69\x6e\x73\x74\x61\x6e\x63\x65\x49\x44\x3d\x22\x78\x6d\x70\x2e\ -\x69\x69\x64\x3a\x65\x61\x30\x36\x64\x65\x30\x66\x2d\x64\x34\x38\ -\x36\x2d\x32\x39\x34\x39\x2d\x38\x38\x30\x63\x2d\x31\x33\x33\x66\ -\x33\x61\x64\x65\x38\x31\x30\x35\x22\x20\x73\x74\x45\x76\x74\x3a\ -\x77\x68\x65\x6e\x3d\x22\x32\x30\x31\x38\x2d\x31\x30\x2d\x31\x34\ -\x54\x32\x33\x3a\x34\x30\x3a\x31\x31\x2b\x30\x32\x3a\x30\x30\x22\ -\x20\x73\x74\x45\x76\x74\x3a\x73\x6f\x66\x74\x77\x61\x72\x65\x41\ -\x67\x65\x6e\x74\x3d\x22\x41\x64\x6f\x62\x65\x20\x50\x68\x6f\x74\ -\x6f\x73\x68\x6f\x70\x20\x43\x43\x20\x28\x57\x69\x6e\x64\x6f\x77\ -\x73\x29\x22\x20\x73\x74\x45\x76\x74\x3a\x63\x68\x61\x6e\x67\x65\ -\x64\x3d\x22\x2f\x22\x2f\x3e\x20\x3c\x72\x64\x66\x3a\x6c\x69\x20\ -\x73\x74\x45\x76\x74\x3a\x61\x63\x74\x69\x6f\x6e\x3d\x22\x73\x61\ -\x76\x65\x64\x22\x20\x73\x74\x45\x76\x74\x3a\x69\x6e\x73\x74\x61\ -\x6e\x63\x65\x49\x44\x3d\x22\x78\x6d\x70\x2e\x69\x69\x64\x3a\x62\ -\x63\x62\x32\x35\x66\x32\x62\x2d\x38\x65\x38\x37\x2d\x63\x37\x34\ -\x36\x2d\x62\x38\x65\x64\x2d\x34\x32\x64\x37\x64\x32\x61\x30\x38\ -\x31\x61\x66\x22\x20\x73\x74\x45\x76\x74\x3a\x77\x68\x65\x6e\x3d\ -\x22\x32\x30\x31\x39\x2d\x30\x33\x2d\x32\x37\x54\x31\x35\x3a\x33\ -\x33\x3a\x35\x33\x2b\x30\x31\x3a\x30\x30\x22\x20\x73\x74\x45\x76\ -\x74\x3a\x73\x6f\x66\x74\x77\x61\x72\x65\x41\x67\x65\x6e\x74\x3d\ -\x22\x41\x64\x6f\x62\x65\x20\x50\x68\x6f\x74\x6f\x73\x68\x6f\x70\ -\x20\x43\x43\x20\x32\x30\x31\x39\x20\x28\x57\x69\x6e\x64\x6f\x77\ -\x73\x29\x22\x20\x73\x74\x45\x76\x74\x3a\x63\x68\x61\x6e\x67\x65\ -\x64\x3d\x22\x2f\x22\x2f\x3e\x20\x3c\x2f\x72\x64\x66\x3a\x53\x65\ -\x71\x3e\x20\x3c\x2f\x78\x6d\x70\x4d\x4d\x3a\x48\x69\x73\x74\x6f\ -\x72\x79\x3e\x20\x3c\x78\x6d\x70\x4d\x4d\x3a\x44\x65\x72\x69\x76\ -\x65\x64\x46\x72\x6f\x6d\x20\x73\x74\x52\x65\x66\x3a\x69\x6e\x73\ -\x74\x61\x6e\x63\x65\x49\x44\x3d\x22\x78\x6d\x70\x2e\x69\x69\x64\ -\x3a\x37\x39\x35\x61\x38\x30\x65\x30\x2d\x61\x32\x62\x61\x2d\x30\ -\x36\x34\x62\x2d\x39\x62\x33\x31\x2d\x36\x31\x31\x64\x33\x37\x64\ -\x36\x66\x38\x62\x30\x22\x20\x73\x74\x52\x65\x66\x3a\x64\x6f\x63\ -\x75\x6d\x65\x6e\x74\x49\x44\x3d\x22\x61\x64\x6f\x62\x65\x3a\x64\ -\x6f\x63\x69\x64\x3a\x70\x68\x6f\x74\x6f\x73\x68\x6f\x70\x3a\x61\ -\x63\x39\x37\x62\x66\x39\x32\x2d\x35\x61\x32\x35\x2d\x31\x31\x65\ -\x35\x2d\x61\x64\x61\x35\x2d\x38\x64\x30\x36\x30\x61\x65\x39\x34\ -\x37\x39\x35\x22\x20\x73\x74\x52\x65\x66\x3a\x6f\x72\x69\x67\x69\ -\x6e\x61\x6c\x44\x6f\x63\x75\x6d\x65\x6e\x74\x49\x44\x3d\x22\x78\ -\x6d\x70\x2e\x64\x69\x64\x3a\x38\x37\x37\x66\x61\x38\x37\x38\x2d\ -\x32\x31\x61\x30\x2d\x65\x37\x34\x62\x2d\x61\x61\x61\x63\x2d\x66\ -\x37\x36\x31\x34\x64\x34\x33\x32\x33\x37\x61\x22\x2f\x3e\x20\x3c\ -\x2f\x72\x64\x66\x3a\x44\x65\x73\x63\x72\x69\x70\x74\x69\x6f\x6e\ -\x3e\x20\x3c\x2f\x72\x64\x66\x3a\x52\x44\x46\x3e\x20\x3c\x2f\x78\ -\x3a\x78\x6d\x70\x6d\x65\x74\x61\x3e\x20\x3c\x3f\x78\x70\x61\x63\ -\x6b\x65\x74\x20\x65\x6e\x64\x3d\x22\x72\x22\x3f\x3e\x13\xde\x14\ -\x42\x00\x00\xba\x46\x49\x44\x41\x54\x78\xda\xed\xbd\x77\x7c\xdd\ -\x77\x75\xff\xef\x24\x64\x90\x90\xe5\x15\xdb\x5a\x57\x92\x65\x4b\ -\x96\xe4\xbd\x87\x2c\xcb\xb6\x64\x59\x92\xe5\x25\x79\xaf\x24\x4e\ -\xe2\x24\xce\x64\x04\x28\x2d\x14\x68\xc3\x2a\x94\x99\xb2\xcb\xf8\ -\x41\xd9\x1b\xca\x0c\x18\x03\x09\x90\x06\x68\x42\x4a\x19\x01\x12\ -\x08\xab\xd0\x52\xfa\xa5\xf3\xfd\x7b\x3f\x5f\xef\xcf\xfb\x6a\x58\ -\x92\x35\xee\x95\xae\x74\xcf\x1f\xe7\x21\x8f\xab\x7b\x3f\xf7\x33\ -\xce\xeb\x8c\xd7\x79\x9d\x49\xce\xb9\x49\x66\x66\x66\x66\x66\x66\ -\x43\xb5\x51\xff\xc0\x54\x49\x99\x99\xd9\x78\xb1\x3a\x6f\x3b\xed\ -\x3c\x98\x8d\x17\x33\x00\x31\x33\xcb\x0d\xbb\xce\xdb\xef\xbc\x39\ -\x6f\xcf\xb1\xf3\x61\x66\x00\x62\x00\x62\x66\x36\x98\xac\xe3\x53\ -\x09\x70\x74\xb7\x07\xbd\xed\xb1\xf3\x63\x66\x00\x62\x00\x62\x66\ -\xd6\xdb\x66\x78\x7b\x47\x1f\xc0\xd1\xdb\x3e\xe3\x6d\xbe\x9d\x2f\ -\x33\x03\x10\x03\x10\x33\x33\xec\xb9\xde\x7e\x3f\x08\xf0\xe8\x6e\ -\xaf\xf7\x76\xb1\x9d\x3b\x33\x03\x10\x03\x10\xb3\xfc\x34\x1a\xe4\ -\x0f\x0d\x11\x38\xba\xdb\xcf\xbc\x9d\xb4\xf3\x68\x66\x00\x62\x00\ -\x62\x96\x3f\xb6\xc0\xdb\x17\x46\x00\x1c\xbd\xed\x61\x6f\x1b\xec\ -\xbc\x9a\x19\x80\x18\x80\x98\x4d\x5c\x2b\xf6\xf6\x9a\x0c\x02\x47\ -\x6f\xfb\x80\xb7\xa5\x76\x9e\xcd\x0c\x40\x0c\x40\xcc\x26\x96\x51\ -\x6a\xfa\x8f\x2c\x82\x47\x77\x7b\xa1\xb7\x2b\xed\x9c\x9b\x19\x80\ -\x18\x80\x98\x8d\x6f\xdb\xe2\xed\x81\x51\x02\x8e\xee\xf6\x4b\x6f\ -\xc7\xec\xfc\x9b\x19\x80\x18\x80\x98\x8d\x3f\xab\xf5\xf6\xfe\x31\ -\x00\x8e\xde\xf6\x15\x6f\x5b\xed\x7a\x98\x19\x80\x18\x80\x98\xe5\ -\xbe\x3d\xc9\xdb\x8b\x73\x00\x38\x7a\xdb\xdb\xbc\x15\xda\xf5\x31\ -\x33\x00\x31\x00\x31\xcb\x4d\xbb\xc6\xdb\xf7\x73\x10\x3c\xa2\xfd\ -\x3e\x91\x45\x39\xc7\xae\x95\x99\x01\x88\x01\x88\x59\x6e\xd8\x5a\ -\x6f\x5f\xcf\x61\xe0\xe8\x6d\x3f\xf4\x76\xc0\xae\x9b\x99\x01\x88\ -\x01\x88\xd9\xd8\x59\x85\xb7\x77\x8f\x23\xe0\xe8\x6d\xf7\x7a\x5b\ -\x69\xd7\xd1\xcc\x00\xc4\x00\xc4\x6c\xf4\xec\xc2\xa4\x14\xe4\x26\ -\x88\xbd\x31\x15\xb4\xb8\xec\xda\x9a\x19\x80\x18\x80\x98\x65\x59\ -\x7e\xe4\xa7\x13\x08\x3c\xa2\x31\xa3\x72\x8b\x5d\x5f\x33\x03\x10\ -\x03\x10\xb3\xcc\x1b\x52\x21\x9f\x9b\x80\xc0\xd1\xdb\xfe\xd1\x5b\ -\x87\x5d\x6f\x33\x03\x10\x03\x10\xb3\x91\x1b\xd4\xd7\x57\xe6\x01\ -\x70\xf4\xb6\xf7\x7a\x5b\x6c\xd7\xdf\xcc\x00\xc4\x00\xc4\x6c\x78\ -\xf6\x02\x6f\x7f\xc8\x43\xf0\xe8\x6e\xaf\x33\x59\x14\x33\x03\x10\ -\x03\x10\xb3\xc1\xdb\x5e\x6f\xdf\xc9\x73\xe0\xe8\x6e\xbf\xf2\x76\ -\x87\xdd\x17\x66\x06\x20\x76\x91\xcd\x06\x96\x1f\xf9\x80\x01\x46\ -\xbf\xf6\x65\x6f\x4d\x76\x9f\x98\x19\x80\x98\x99\x75\xd9\xe5\xde\ -\xfe\xc6\x00\x62\xd0\xf6\x31\x6f\x73\xec\xbe\x31\x33\x00\x31\xcb\ -\x77\x3b\xe1\xed\xd7\x06\x0a\xc3\xb2\x17\x79\x3b\xdf\xee\x21\x33\ -\x03\x10\xb3\x7c\xb3\x4d\xde\xbe\x61\x20\x30\x62\x63\x26\xe6\xb0\ -\xdd\x4f\x66\x06\x20\x66\xf9\x60\x94\x5e\x3e\x64\x8e\x3f\xe3\x76\ -\x9f\xc9\xa2\x98\x19\x80\x98\x4d\x54\xbb\xc2\xdb\x5f\x9a\xa3\xcf\ -\xba\xbd\xc3\xdb\x5c\xbb\xdf\x0c\x40\x0c\x40\xcc\x26\x8a\x5d\xed\ -\xed\x67\xe6\xdc\x47\xcd\xfe\xcf\xdb\xb3\xbd\x9d\x6b\xf7\x9e\x01\ -\x88\x01\x88\xd9\x78\x96\x1f\xf9\x8c\x39\xf4\x31\xb3\xef\x7a\xdb\ -\x63\xf7\xa1\x01\x88\x01\x88\xd9\x78\xb2\x62\x6f\xef\x31\x07\x9e\ -\x33\xf6\x79\x6f\xab\xec\xbe\x34\x00\x31\x00\x31\xcb\x75\x7b\x6e\ -\x2a\x28\xcb\x9a\xe3\xce\x3d\x7b\x6d\x32\x73\x63\xf7\xa9\x01\x88\ -\x01\x88\x59\x4e\xd9\x41\x6f\xdf\x36\x27\x9d\xf3\xf6\x4b\x6f\x27\ -\xed\x7e\x35\x00\x31\x00\x31\xcb\x05\x5b\x92\x0a\x9b\xf5\xcc\x39\ -\x8f\x2f\x7b\xc8\x5b\xab\xdd\xbf\x06\x20\x06\x20\x66\x63\x61\x45\ -\xa9\xa0\x14\x6b\xce\x78\x7c\xdb\x47\x52\x26\x1b\x6f\x00\x62\x00\ -\x62\x36\x8a\x76\x93\xb7\xff\x32\xe7\x3b\xa1\xec\xc5\xde\xa6\xda\ -\xbd\x6d\x00\x62\x00\x62\x96\x2d\x6b\xf4\xf6\xcf\xe6\x6c\x27\xac\ -\xfd\xde\xdb\x51\xbb\xcf\x0d\x40\x0c\x40\xcc\x32\x69\x94\x38\x3e\ -\x6c\x0e\x36\xbb\x56\x52\x58\xea\x52\xc5\x39\x71\x2c\x68\x94\x6d\ -\xb5\xfb\xde\x00\xc4\x00\xc4\x6c\x24\x36\x2d\x15\x14\x5f\xcd\xc1\ -\x67\xd3\x52\xc1\x66\x3e\xa5\xc8\xcd\xba\xac\xd8\x95\x96\x95\xe7\ -\x92\x2c\xca\x6c\x7b\x0e\x0c\x40\x0c\x40\xcc\x86\x6a\x4f\xf5\xf6\ -\x1b\x73\xf0\xa3\x90\x79\x14\x95\xba\xc2\xa9\x25\xae\xf9\x25\x75\ -\x6e\xe1\xd6\x5a\x37\x65\xd2\x4c\x57\x56\x9e\x33\x20\xf2\xdf\xde\ -\x5e\xee\xed\x42\x7b\x26\x0c\x40\x0c\x40\xcc\xce\x66\xcd\xde\xee\ -\xcf\x77\xa7\x5e\x5a\x5a\xe6\x0a\xa6\x94\xb8\x59\x57\x14\xa7\x33\ -\x84\x6c\x7d\x16\x9f\x51\x3e\x67\xb6\x3b\xf1\xe8\x6e\x77\xfd\x3f\ -\xef\x72\xe5\x95\xb3\xdd\xb4\x73\x66\xb9\xd2\xdc\x01\x11\xec\x51\ -\x6f\xd7\xd9\xf3\x61\x00\x62\x00\x62\xd6\x97\xa5\xbc\xbd\xdd\x80\ -\xa3\xdc\x15\x17\x94\xba\xa9\x93\x66\xb9\xb2\xd9\xe5\xae\xa2\x76\ -\x8e\x9b\xe6\xff\x5c\x34\x3d\x95\x9d\xd2\x92\x07\xa6\x69\xe7\xce\ -\x72\x0b\x9b\x6b\xdd\xb5\x0f\xed\x70\x37\xff\x62\x8f\x3b\x78\x6f\ -\xab\x2b\xb8\xb2\xc4\xcd\xb8\xb8\x28\x97\xca\x59\xd1\xd0\x36\x5b\ -\x63\xcf\x8b\x01\x88\x01\x88\x19\xf6\x24\x6f\x2f\xf3\xf6\x3f\xd6\ -\x87\x28\x73\xd3\x2f\x28\x90\x43\x5f\xba\x7b\xa1\x3b\xf4\xa5\x36\ -\x77\xf5\x3f\x6c\x77\x6b\x4f\x2c\x73\x33\x9e\x5c\x28\x20\x29\x29\ -\x0a\xd9\x49\xc6\x3e\xb7\x18\x00\x29\x70\x4d\x77\xd7\xb9\x9b\x7e\ -\xd6\xe9\x0e\x7e\xa1\x55\x20\xb2\xed\x9e\x06\x1d\x47\xd1\x8c\x54\ -\x56\xb3\x9f\x11\x18\x5a\x67\x57\xd9\xf3\x63\x00\x62\x00\x92\xdf\ -\xf2\x23\x3f\xc9\x77\xe0\x20\xeb\xa0\x81\x3d\x79\xd2\x4c\x37\x77\ -\xc9\x5c\xd7\xfe\xa6\x8d\xee\xc6\x9f\x76\xb8\xeb\xfe\x69\x97\xbb\ -\xf6\x1f\x77\xc8\xb1\x77\x7e\x68\x8b\x5b\xd0\x58\xa3\xfe\xc4\x55\ -\xe7\x17\x84\xdf\xcb\x80\x63\x2f\x9c\x56\x22\x10\xd9\xff\xe9\x16\ -\x77\xfd\x0f\x76\xbb\xc3\x5f\x6e\x93\x9d\xfc\xf5\x5e\xb7\xe6\xba\ -\xa5\xee\xca\x49\x33\xfc\x67\x95\xe7\xea\xf9\xfb\xf7\x54\x90\x8d\ -\xb7\x67\xc9\x00\xc4\x00\x24\x8f\xac\xde\xdb\x17\xf3\xbe\x5c\x55\ -\x56\x2e\x07\x0e\x28\xf0\xf7\x8d\x7f\xb2\xda\x1d\xff\xee\x4e\x77\ -\xe3\x63\x1d\xee\xc8\x57\xb7\xf9\x0c\xa4\x55\x59\x08\x0e\xfd\xc4\ -\xa3\x1d\xee\x86\x1f\xed\x76\x5b\x5f\x5e\xef\xe6\x2c\x9a\xab\xdf\ -\x99\x75\xf9\x08\x19\x53\x64\x3c\x1e\x8c\x16\x6f\x9b\xef\xf6\x7e\ -\xb4\xd9\x35\x3e\x7f\xad\xca\x58\x7c\xee\x35\xdf\xde\xe1\xae\xfd\ -\xce\x0e\x37\x67\xc1\x1c\x37\xfd\xbc\x82\x5c\x2c\x65\x75\xb7\x87\ -\xbd\xed\xb6\xe7\xca\x00\xc4\x00\x64\x62\x5b\x89\xb7\xbf\xb5\x3e\ -\x47\xb9\x98\x4f\x80\xc0\xcc\x4b\x8a\xdc\xea\x6b\x96\xba\xa3\xf7\ -\xb5\xbb\x9b\x9e\xe8\x74\x57\x3f\xb0\xdd\x1d\xfa\x62\x6b\x3a\x13\ -\x88\xc6\xbf\x1d\xbd\x6f\x9b\xbb\xd1\x67\x23\x64\x26\x1b\x9e\xb1\ -\xca\x15\x4e\x4f\x29\x6b\xa1\xcc\x34\x5c\x07\x4f\xaf\x65\xeb\xcb\ -\xd7\xbb\x5d\xef\x6a\x74\xe5\xb3\x67\xeb\xf3\xf9\x1c\x3e\xef\xc4\ -\x8f\x3b\xdc\x9e\x0f\x6f\x71\x33\x2f\x2e\x74\x05\x57\x16\x67\xb6\ -\x74\x96\x1d\xfb\x54\x2a\x68\xa3\xd9\xb3\x66\x00\x62\x00\x32\xc1\ -\xfa\x1c\x7f\x6a\x7d\x8e\x00\x1e\x44\xfd\x53\xbd\xe3\x27\xf2\xef\ -\xfc\x60\x93\xbb\xe9\xe7\x9d\x2a\x55\x11\xf9\x1f\x3e\xd5\x76\x06\ -\x78\xf4\x00\x12\xff\x1a\x9c\x3c\xbf\x73\xe8\xde\x56\xb7\xea\xe8\ -\x12\x37\xe3\xa2\x42\x01\x81\xc0\x69\x08\x65\xad\xe2\x59\xa5\x02\ -\x86\x43\xfe\x33\xd7\xdf\xb1\xd2\x83\xd1\x0c\xd7\xf1\xbe\x26\x65\ -\x41\xfa\x3c\xff\xef\xf4\x43\x1a\x9e\xb9\x3a\x64\x49\xc5\xe3\xe6\ -\x5c\xbf\xc6\x5b\xa1\x3d\x77\x06\x20\x06\x20\xe3\xdf\xf6\x98\xfc\ -\x48\x28\x57\x51\x72\xa2\xa7\x50\xb9\x64\xae\x6b\x7d\xf5\x06\x77\ -\xe3\x63\x9d\x2a\x4b\xe1\xa8\x0f\x9d\x05\x38\x7a\xd8\xa9\x00\x24\ -\x38\xfa\x9b\x7f\xb9\xc7\x67\x0f\x9b\x5d\xcd\xfa\x79\x02\x80\x34\ -\x73\x2a\x75\x76\x30\x23\xfb\xa9\x5a\x59\xe9\x8e\x7d\xbd\xdd\x55\ -\x2e\xab\x74\x97\x4d\x9a\xee\x36\x3f\x7f\xad\x8e\x4b\x40\xe6\xed\ -\xd8\x37\xdb\x7d\x26\xb2\xdb\xd5\x6e\xa8\x16\x48\xe5\x78\x29\xab\ -\x77\x7f\xc4\x64\xe3\x0d\x40\x0c\x40\xc6\xa9\xad\xf4\xf6\x21\x03\ -\x8e\x72\x95\x98\x28\x35\x21\x15\x52\xff\xb4\x55\xca\x36\x6e\x7e\ -\x62\x4f\xba\xcf\x31\x68\xe0\xe8\x03\x48\xd4\x1f\xf9\x49\x87\xbb\ -\xfe\xfb\xbb\x5c\xd3\x5f\xac\x73\xb3\xe7\x55\x08\xa4\x0a\xa7\x94\ -\x9c\xd5\xd9\x33\xeb\xd1\xf4\x97\xeb\x54\xae\x02\xdc\xa6\xf8\xdf\ -\x5b\x7d\xed\x52\x35\xf0\xbb\x97\xce\x6e\xf8\xe1\x6e\x35\xd9\x0b\ -\x26\x97\x84\xbe\x4b\x69\xf9\x78\xba\x06\xcc\x14\xb5\xdb\xf3\x68\ -\x00\x62\x00\x32\x3e\x6c\xb2\xb7\x37\x58\x9f\x23\x4c\x78\x4f\xf5\ -\x4e\xfa\xaa\x0b\x0a\xdd\xca\x23\x4b\x94\x65\x9c\xfc\xf5\x9e\x7e\ -\xfb\x1c\xc3\x35\xf5\x47\xee\x6f\x77\x37\xff\x6a\x8f\x68\xbf\xeb\ -\x6f\x5f\xa9\xd2\x14\x65\xa7\xe2\x99\xa5\x7d\x3a\xfc\x92\x82\x52\ -\x37\xf3\xb2\x62\xfd\xfe\x96\xbb\xd7\xa9\xa4\x16\x32\x92\x2a\x7f\ -\x7c\xed\xee\xd8\x37\xda\x7b\x94\xcd\x28\x99\x6d\x7d\x45\xbd\xb2\ -\x1c\xa6\xd6\xc7\x19\x88\x60\x1f\xf7\x56\x6b\xcf\xa7\x01\x88\x01\ -\x48\x6e\xcb\x8f\xfc\x32\xef\xfb\x1c\xde\x98\xdb\xa0\xe4\x53\xdb\ -\x50\xad\x06\x35\x0e\xf8\xf8\x23\x3b\x03\x70\x9c\x6a\xcb\x18\x78\ -\xf4\x06\x12\xd8\x53\x00\xc9\xbe\x4f\x34\xbb\x25\x3b\x17\xba\xab\ -\x2e\x2c\x54\xcf\x85\xfe\x45\xf7\xfe\x08\x99\x04\x94\xe1\x6b\xfd\ -\xeb\xa1\x07\xf3\x3a\x32\xa4\x19\x17\x17\xba\x6d\xaf\x6f\x50\x03\ -\x3d\x5d\x56\xf3\x3f\x69\xac\x9f\xf0\x99\x09\x19\x14\xd9\x14\xb4\ -\xe3\x71\x54\xce\xea\x6e\xaf\x48\xd9\x5a\x5d\x03\x10\x03\x90\x9c\ -\xb2\x36\x6f\xdf\xb7\x72\x55\xb9\x4a\x47\x44\xfe\xb3\xab\x2a\x5c\ -\xdb\x6b\x37\xa8\xfc\x83\x33\x0e\x91\x7c\x76\x80\xe3\xcc\xfe\x48\ -\x9b\x4a\x5a\xd0\x81\xe9\x8f\xcc\x5b\x53\x15\x68\xbf\x97\x15\x85\ -\xcc\x21\x15\xd8\x57\x0d\x77\x85\x72\x9a\xb4\xb0\xa6\x97\x28\x6b\ -\xe2\xdf\x97\xec\x5c\xa0\x32\x16\x25\xb6\xee\xe0\x44\x3f\xe4\xc6\ -\xc7\x3b\x5d\xcb\xab\x36\xa8\x2c\xc7\x6b\x69\xc4\x8f\xc3\x6c\xe4\ -\xd7\xde\x6e\xb0\xe7\xd6\x00\xc4\x00\x64\x6c\xad\xcc\xdb\x27\x0d\ -\x38\x42\x9f\x43\x4e\xfa\x8a\x62\x31\x9a\xae\xf9\xd6\x76\x39\x5b\ -\x51\x62\xbf\xd4\x9a\x7d\xe0\xe8\x83\xad\x75\xe4\x2b\x49\x7f\xe4\ -\x7b\xbb\x5c\xd3\x0b\xd7\xa9\x6c\x15\x4b\x50\x57\x5d\x50\xe0\x3a\ -\x3e\xd0\xe4\xda\xee\x69\x48\x33\xb8\xc4\xcc\x9a\x99\x52\x29\x6b\ -\xd7\xbb\x1b\xdd\xc9\x5f\xee\xe9\x51\x6a\xd3\x7b\x7e\x6d\x5b\x68\ -\xb2\x9f\xde\xe6\x16\xb5\xce\xd7\x8c\x08\xe5\xaf\xa2\xab\x52\xe3\ -\x31\x23\x79\xd0\x64\x51\x0c\x40\x0c\x40\xc6\xa6\xcf\x81\xfc\xc8\ -\xff\xe6\xfb\x3c\x07\xa5\x21\x1c\xf0\x0c\xef\x74\x97\xef\x5b\xa4\ -\xd2\x11\xe5\x2a\x4a\x49\x99\xec\x73\x8c\xa4\xac\x45\xe6\xc0\x34\ -\xfb\x91\xd3\x6d\x6e\xed\x8d\xcb\x05\x74\x38\x7b\x32\x23\x81\xc0\ -\x93\x0a\xd2\xac\x2d\xbe\x13\x4c\x2e\x74\xb8\x90\x35\xb9\xe5\x77\ -\x7b\xd5\x57\x51\xf6\x94\x30\xb3\x78\x4f\x66\x51\x6e\xf8\xc1\x6e\ -\xb7\xfd\x2d\x9b\x44\x47\x06\x94\x78\x5f\x4a\x77\x68\x79\x8d\xb3\ -\xac\xe4\xdd\xde\xe6\xda\x73\x6d\x00\x62\x00\x92\x7d\xbb\xc6\xdb\ -\xbf\xd8\x3c\x47\xb9\xfa\x05\x80\xc7\xbc\xd5\x55\x6e\xe7\x3b\x36\ -\x6b\x66\x82\x68\xff\xd0\xa9\xb6\xac\xf5\x39\x86\x5f\xd6\x6a\x75\ -\xc7\x1f\x0e\xb4\xdf\xed\x6f\xd9\xe8\x36\x3e\x67\x8d\xdb\xf1\xb7\ -\x9b\x94\x6d\x14\x4d\x2f\xe9\x41\xfb\x05\x5c\x60\x68\x95\xcf\x9d\ -\xed\xda\xfe\xa6\x41\x59\x14\x00\xc4\x64\x7a\x04\x92\x98\x8d\x40\ -\x43\x26\xcb\xe9\x7c\x7f\x93\x5b\x79\x74\x89\x9b\xb7\xaa\xca\x15\ -\x5c\x11\x1a\xf8\xf4\x55\x0a\x26\x17\x87\x45\x55\xa9\x71\x71\x6d\ -\x9f\xe3\xed\x12\x7b\xc6\x0d\x40\x0c\x40\x32\x6f\xeb\xbd\x7d\xdd\ -\xca\x55\xe5\x8a\xb6\x27\x27\xf2\x23\xcc\x4d\xdc\xf0\xe8\xee\x30\ -\xcf\xf1\xe5\x21\xce\x73\x8c\x01\x90\x1c\x3e\xd5\xea\x6e\xff\x8f\ -\xfd\x6e\xf5\xd5\x4b\x5d\x45\x4d\x85\x9b\xbf\xb9\x26\x5d\x7a\xeb\ -\x5e\x82\x62\x1f\x08\xcb\xa5\x10\x54\x9c\x5d\x5d\x21\x99\x95\x43\ -\xc9\x60\xa1\xb2\xab\x7b\x5b\xbb\xde\xd3\x67\x36\x64\x24\xf4\x4d\ -\x28\xdd\xed\x7c\xdb\x26\xb7\xfa\xf8\x52\x57\x5b\x5f\x2d\x5a\x31\ -\x0d\x77\x80\x16\xd1\x46\x32\x35\xca\x5d\x69\x01\xc9\xdc\xbb\xc6\ -\x8f\x7b\xdb\x65\xcf\xbb\x01\x88\x01\x48\x66\xac\x2a\x65\x32\xeb\ -\x41\x7e\xa4\x20\xc8\x8f\x10\x61\xaf\xbb\x79\x79\x3a\x32\x3f\xfa\ -\xf5\xf6\x31\xe9\x73\x0c\xc7\xae\xf9\xd6\x0e\x01\xc1\xb4\xf3\x66\ -\xb9\xfa\xa7\xae\x74\xb7\xfe\xdb\x3e\x81\x03\xdf\x8d\xf9\x91\x1e\ -\xb2\x28\xa9\xa0\xd6\x0b\x00\x68\xc9\xd4\xec\x72\xb7\xfe\xf6\x15\ -\x6a\xae\x9f\xfc\xd5\x1e\x0d\x20\xa6\xcb\x74\x09\x70\x72\x4e\xae\ -\xff\x41\x68\xe0\x5f\x9b\x00\x0d\x64\x82\xfa\x3b\x57\xba\x15\x87\ -\x16\x2b\x43\x21\x23\x09\xd3\xf8\xb3\xd4\x43\x61\xef\x49\x0e\x4e\ -\xb9\x7f\xd6\x5b\x83\x3d\xff\x06\x20\x06\x20\xc3\xb3\x8b\xbc\x3d\ -\x37\xdf\x81\x23\x94\xab\x82\xe8\x20\x11\xf4\xe2\xed\x0b\xa4\x0f\ -\x85\x03\x0d\x25\x9d\xd6\xdc\x2a\x57\x9d\xc5\x68\x80\x6f\x7c\xce\ -\x6a\x81\x05\xb2\x25\x94\x9f\x98\x4d\x39\xf8\xf9\x56\xb7\xf2\xc8\ -\x62\x95\xb4\xd2\x4d\xf5\x54\xcf\x73\x00\xf5\xf7\x8a\x49\x57\xb9\ -\x0a\x9f\x91\x34\xbf\x74\xbd\x4a\x62\x88\x3c\x92\x81\xf4\x95\x79\ -\x51\xe2\xa2\x7f\x02\x13\x0d\x40\xe1\x27\xf3\x25\x9c\xbf\x2d\x2f\ -\xae\x73\x75\xb7\xad\x90\x6c\x7d\x59\x45\xb9\xbb\x2a\x91\x63\xa1\ -\xff\xa2\x92\x57\xee\xdc\x03\xaf\xf2\x56\x64\xfe\xc0\x00\xc4\x00\ -\x64\xf0\x76\x93\xb7\x1f\xe7\x3d\x70\x74\x93\x1f\x21\x72\xde\xf1\ -\xd6\x4d\x2a\xd3\x10\x61\xa7\x9b\xca\x59\x62\x50\x5d\xfd\xcd\x76\ -\x77\xdd\x23\x3b\x65\x94\x85\x0e\x67\xa8\xaf\xc2\xf1\x57\xaf\xae\ -\x72\x73\x6a\xe7\xe8\x7b\xc0\xa6\x22\x8b\x90\x2c\xca\x2f\xf6\x48\ -\x9b\x6b\x41\x53\xad\xd8\x5a\x80\x49\x0f\x59\x94\xe4\x9c\xf0\xef\ -\x64\x24\x55\xcb\x2b\xd5\x47\xb9\xf9\x17\x9d\x21\xb3\x39\x1b\x69\ -\xc0\x03\x0d\x03\x8f\x28\xfe\x02\x5c\x80\x0a\x74\xe3\xfd\x9f\xde\ -\xea\xda\x5e\xd7\xe0\x36\x3c\x7d\x95\xde\x33\x96\xbc\xf8\x99\x23\ -\xa5\x2e\x64\x51\x5e\x60\x7e\xc1\x00\xc4\x2e\xf2\xc0\xb6\x3a\x65\ -\x32\xeb\x2a\x57\x05\xa5\xdb\x19\x8a\x86\x37\xfd\xd9\x1a\x77\xfc\ -\xa1\x9d\x62\x57\x1d\xf9\xca\xb6\xac\xcd\x73\x00\x1c\x38\xd8\x28\ -\xe7\xce\x0c\x07\x43\x88\x38\xd8\xd8\x5f\x18\x49\xa9\xec\xea\x07\ -\xc3\x04\x3c\x7d\x08\xa8\xc6\x7c\x9f\xc3\xa7\xba\xf7\x47\xba\x64\ -\x51\x5a\xfe\xba\x5e\xb3\x2c\x57\xfa\x8c\x23\x28\xf1\xf6\x04\x92\ -\x28\x85\x42\xa3\x7c\xd5\xd5\x4b\xdc\xb5\x0f\x07\x19\x7a\x65\x23\ -\x43\x39\x3f\xa7\x43\x59\x8d\x75\xba\x94\x03\xc9\x50\x76\xbe\x7d\ -\x93\x6b\x78\xd6\x6a\x37\x67\xe1\x5c\x37\xed\xbc\x50\xea\x42\x46\ -\x25\xdb\xab\x7d\x07\x61\xff\x98\x68\xbb\x99\xaf\x30\x00\x31\xeb\ -\x66\x05\xde\xde\x64\xc0\x51\x26\xc0\xa0\x71\x3c\xf3\xd2\x22\x39\ -\xc6\xc3\xde\x61\xc3\x5c\x42\xde\x23\xdd\x38\xce\xd2\xcc\x06\x8d\ -\x78\x76\x92\x6f\xb9\xbb\x4e\xcd\x67\x9c\x66\x61\xd2\x1f\x40\x9e\ -\x04\x09\x14\x80\x64\xb8\xb3\x25\x37\x7a\x70\xd8\xf2\x92\x3a\x95\ -\xa1\x60\x8d\x5d\xf7\xbd\x9d\xfd\xc8\xa2\x6c\xd3\x77\xa6\xb7\x53\ -\x77\xcb\x8a\xae\xa1\x41\xfa\x23\xdd\xe8\xb9\x9a\x7f\x99\x5e\x22\ -\xa0\x9d\xbb\x68\xae\xdb\xf1\xb6\x4d\x9a\x7d\x11\xed\x77\x18\x14\ -\x66\xca\x60\xf4\x55\x58\x6c\x15\xb5\xc2\xb6\xdd\xb3\x41\xd7\x21\ -\x95\x48\xcf\xc3\x7c\xeb\x3d\x55\x3f\x06\xf6\x51\x6f\x8b\xcc\x6f\ -\x18\x80\x98\x95\x94\x3d\xcb\xdb\x1f\xf3\xbd\x5c\x95\xea\x26\x3f\ -\x42\x09\x87\x05\x4b\x44\xc4\x59\x95\x1f\x49\xe8\xb0\xd7\xfd\xd3\ -\x4e\x39\xde\x5d\xef\xdc\xec\xaa\xd7\xce\xd3\x60\x1e\x91\x3d\x53\ -\xde\x58\x10\x3a\x9c\xe9\xca\xe6\xcc\x56\x66\x80\xa4\xc8\x50\x59\ -\x5f\x64\x05\x94\x9a\x96\x75\x2e\x92\xf3\xa5\x64\x75\xf4\x6b\xdb\ -\xfa\x7f\xbd\x07\x4b\x7a\x3c\xfc\x0e\x3b\xd2\x97\xed\x59\xa4\x3e\ -\x50\x5a\x16\xa5\xb4\x67\x7f\x24\x66\x0a\xeb\xef\x5c\x29\x56\x1a\ -\xfd\x91\x91\xcc\xc1\xc4\x32\x1e\x80\x49\x56\xc4\x7b\x29\x2b\x99\ -\x3f\x47\xbd\x28\x66\x57\x00\xfb\x31\xde\x51\x72\x8f\xc9\xa2\x18\ -\x80\xe4\xab\x35\x7b\xfb\x9e\xd1\x72\x43\x9f\x83\x28\xba\xbc\x72\ -\xb6\x6b\x7d\x95\x77\xd0\xde\x39\xd3\xf0\xcd\x26\x2d\x57\xba\x55\ -\xdf\xda\xa1\x48\x9f\xcf\x58\xbe\x7f\x71\xd0\xad\xf2\x8e\xf8\x8c\ -\xbd\xe7\x11\xe0\x2e\x2a\x54\x76\x04\xc0\x75\x7e\xa0\xc9\x47\xe9\ -\x9d\x02\x9f\xc1\x00\x1c\x19\xd4\x91\xaf\xb6\x89\xae\xbb\xe6\x86\ -\x65\xfa\xdd\xb3\x7e\xb7\x44\x16\x25\x52\x74\xc9\x5a\xaa\x56\x54\ -\x86\x81\xc1\x8b\x8b\x7a\x94\xb5\xe2\x76\x45\xce\x23\xd4\x60\xbe\ -\x1b\xbf\x33\xe2\x5e\x51\xf2\xbb\x48\xae\x28\xbb\x79\x70\xbb\x16\ -\x60\x55\xaf\x9b\x27\x91\x4a\x65\x46\x0c\x2e\x8e\xdd\x14\xfc\x6f\ -\xbc\x5d\x6b\xfe\xc4\x00\x24\x5f\x6c\x79\xa2\x4c\x6a\xf2\x23\x33\ -\x92\x3e\x87\x77\x40\x6c\xf8\xa3\xf4\x02\x4b\x29\x9b\xf2\x23\x71\ -\xb3\x60\xd8\x3e\xd8\xee\xea\x9f\xbe\x4a\x59\xc6\x94\xb8\x59\x70\ -\x80\x09\xee\x58\x62\x8b\x93\xef\x2c\x93\x3a\xf8\xb9\x96\x50\x62\ -\x3b\x4b\xd9\x88\x9d\x1e\xad\xaf\xac\x57\xf9\x8a\xc6\x37\x7d\x8e\ -\xa1\x95\xd8\xb6\x69\x72\x1d\xc0\x42\x36\xbe\xdc\x67\x43\x93\x7b\ -\xc9\xc6\x77\x3f\x3e\xfa\x27\x1d\xef\x6f\x72\xb7\xfc\xcb\x5e\x35\ -\xcd\x33\x91\xc1\xa9\xc4\xf5\x8d\xd0\x23\xa2\xfc\x86\xe8\xe3\xc2\ -\xe6\xda\x64\xa1\xd6\xcc\x24\x23\x19\x33\x20\xf9\x07\x6f\x2d\x06\ -\x20\x06\x20\x13\xd5\xa6\x79\x7b\xb1\xf5\x39\xca\x12\xf9\x91\x20\ -\xbb\x81\xfc\x08\xe5\x1a\x9c\xb0\x9a\xd4\xd9\x92\x1f\x49\x96\x46\ -\xe1\x84\xc9\x70\x5a\x5f\x5d\xef\x2a\x6a\xe7\x88\xe1\xa5\x21\xbe\ -\x21\x38\x3e\x81\xdf\x55\x01\xfc\xe8\x4b\x34\x3c\x7b\x75\x28\x37\ -\x79\x50\xea\x6b\xc7\x08\x59\x00\xe5\x38\x24\xe5\x8b\xa6\xa5\xe4\ -\x84\xe9\x35\x0c\xa7\xac\xc4\xef\x02\x7e\xfc\x5c\x73\xfd\x32\x57\ -\x70\x65\x18\xaa\x2c\x89\x59\x40\x32\xa5\x4f\x49\x8b\xcc\x6e\xc3\ -\x5d\xab\x54\x02\x03\xc0\x64\x0c\x5d\xf6\xb6\x64\x9a\x1d\xa3\xf4\ -\x15\xbe\xc3\x59\xc8\x06\xa8\x03\xff\x38\xd0\x83\xdb\xdf\xd0\xa0\ -\x85\x57\x91\x6a\x9d\xbe\xce\x63\x73\x8f\xbd\xc7\x5b\xb5\x01\x88\ -\x01\xc8\x44\x93\x59\xff\xad\xd1\x72\xcb\x05\x1a\x44\xfb\xf3\x37\ -\x05\x99\x75\x9a\xb5\xe9\x7a\x7d\x16\xcb\x55\x44\xe1\xcc\x5b\xec\ -\xfe\xbb\x46\xff\xd9\x35\xe9\x86\x70\x0f\x76\xd3\x30\xb2\x28\x18\ -\x52\x80\xd0\xdc\xc5\xc9\x96\xc3\x9f\x86\x79\x8b\xee\x72\x2a\x80\ -\x05\x7a\x58\xbc\x76\x51\xdb\x7c\x81\xc9\x48\xbe\x6b\x5a\x36\xfe\ -\x17\x7b\xdc\xde\x8f\x37\x6b\x96\x03\xc7\x0d\x68\xc4\xef\x53\x5a\ -\x5e\x9e\xd6\xc7\x2a\xab\x98\xed\x56\x1c\x5c\xec\xd6\xdf\xb6\x42\ -\xec\x2f\x86\x11\xa3\xad\x3b\xb9\xdc\xad\x3d\xb1\xcc\x35\x3c\x73\ -\x95\x96\x5b\x71\x7e\xc8\x8e\xe8\xf3\x30\x47\x32\x20\x90\xf8\xef\ -\x80\xbe\x17\x40\x02\x10\x6d\xfb\x9b\x06\x57\x9d\x28\x0f\xf7\x2e\ -\xb1\x8d\x81\xbd\xd4\xdb\xa5\x06\x20\x06\x20\xe3\xd9\xd8\xc4\x76\ -\x9f\x95\xab\x82\x33\xc3\xd1\x52\x5a\x69\x7e\xd9\xfa\x10\xf5\x26\ -\x32\xeb\xd9\x04\x0e\x1c\x37\xc0\x81\x23\x5c\x75\xf5\xd2\xf4\x54\ -\xf7\x19\x7d\x8e\x91\x0e\x3a\x5e\x10\x9a\xd8\x0b\xb7\xd2\x1f\xd9\ -\xa2\xcf\xd4\x9e\xf5\x2f\x86\x26\x7d\xc7\x7b\x9b\x94\x29\x34\xbf\ -\xac\x4e\x0e\x37\x93\xb2\xf1\xd0\x81\x29\x27\x55\x2e\xad\x14\xed\ -\x57\x5b\x0b\xd3\xd9\x48\x99\x26\xcd\xe9\xdd\xc8\xce\x2b\x38\xd3\ -\xce\x0d\x32\x27\xf4\x7f\xc8\x90\x28\x4b\x91\xa1\xc1\x48\xbb\xe9\ -\xf1\x90\xed\x0c\x54\x52\xe4\x38\xc8\x5a\x42\x69\x6b\x97\x80\x88\ -\x12\x1b\xd7\xbb\x60\x10\x9b\x19\xb3\x68\x8f\x79\xbb\xde\x00\xc4\ -\x00\x64\xbc\x59\xa5\xb7\x77\x58\xb9\x2a\x6c\xde\xa3\x5c\x45\x83\ -\x57\xf2\x23\xf7\xb7\x6b\x8a\xfc\xe8\xd7\xb2\xd8\xe7\xe8\xe6\xd0\ -\xc8\x6e\x36\x3f\x6f\xad\x9c\x98\xa4\x42\xb2\x24\x7b\x2e\xa9\x95\ -\xa2\xd2\x64\xef\x47\xb1\xca\x4b\x1c\x03\xe5\x26\x14\x75\x89\xfc\ -\x8b\x67\x94\xba\x63\x0f\x6c\x1f\x56\xf9\x6a\xa0\xef\xca\x2c\x07\ -\x20\x02\x60\xc1\x94\x2a\x4d\x95\x0b\xac\x86\xf3\x5d\x23\x65\x18\ -\x96\x15\x65\xa9\xc6\xe7\xaf\x0d\x64\x83\x27\x92\x3e\xcf\x00\x93\ -\xff\x2a\xb1\xf9\xef\x26\x0a\xf2\x7d\xdb\xdc\xba\x9b\x96\xfb\xc0\ -\x21\xbc\x1f\xe7\x66\x0c\xcb\x5a\x5f\xf0\x56\x6f\x00\x62\x00\x92\ -\xeb\x76\x81\xb7\x57\x7a\xfb\xbf\xbc\x07\x8e\xe2\xb2\x64\x57\xc5\ -\x2c\x51\x50\x19\xc6\x53\x9f\xa3\xbb\x10\x60\x16\x80\x03\x67\x1a\ -\x97\x39\xb5\xbe\x76\x83\x8f\xca\xe7\xca\xa9\x33\x57\x32\x1a\x91\ -\x70\x77\x36\x14\xa0\xb2\xe5\x45\x75\x2a\x9f\x01\x2a\x44\xf6\x44\ -\xf4\xd9\xc8\xb8\x38\xa7\xcc\xa9\x00\xce\x34\xdc\xd7\x7a\x00\x9b\ -\x91\xc8\x93\x94\x0c\x51\xde\x3d\x82\x21\x20\x02\xf8\x73\x0e\x21\ -\x39\xa8\xff\xf2\xb3\x30\x67\x32\xd0\x64\x7e\xf7\x12\xdb\x81\xcf\ -\xb4\x68\x33\xe3\xe4\x84\x1a\x3d\xc6\xc3\x88\x7f\xe7\x6d\x96\x01\ -\x88\x01\x48\x2e\x1a\xa9\xf2\xa3\x79\xdf\xe7\x80\xee\x7a\x71\x91\ -\x9b\xe6\x1d\x57\x4d\xdd\x3c\xd7\xfe\xa6\x8d\xe9\xe9\xea\xac\xc9\ -\x8f\x44\xb9\xf4\x87\x76\xaa\x07\xd1\xf9\xa1\x2d\x6e\x71\xfb\x02\ -\x01\x18\x36\xea\x4e\x2b\x4a\x8e\x24\xe5\x32\x22\xf9\x8a\x9a\x39\ -\x6e\xfb\x9b\x37\xba\xdb\xfe\xb0\x2f\xab\xfa\x5d\x92\x45\xf1\x59\ -\x17\x8e\x1e\x89\x77\xed\x1b\x39\xb7\x40\x94\x5b\x81\x43\x6a\xe8\ -\xf3\x39\xe8\x64\x4d\x56\xf9\x71\xb6\x86\x2c\xa1\xf2\x72\x4d\x43\ -\x69\x6b\xe0\x6b\x82\x5c\x0b\xfd\x91\x96\x57\xd5\x6b\xb2\x9d\xf3\ -\xa1\x9d\xee\x63\x57\xd6\xfa\xbd\xb7\xe7\x79\xbb\xd0\x00\xc4\x00\ -\x24\x17\x6c\x5d\x22\xb1\x60\xf2\x23\x3e\xf2\x26\x62\xc5\xe9\x10\ -\x79\x33\xd1\x2c\x59\x90\xaf\x64\xb3\x5c\x15\xca\x26\x37\x3e\x8e\ -\x43\xdb\xee\x56\x5f\xbb\x54\x14\xdb\xf4\x7c\xc2\x18\x2e\x56\x0a\ -\x2b\x6a\x67\x2a\x03\xe3\x1c\xd0\xec\x66\x7e\x44\xe5\xa6\x6c\x0a\ -\x41\x26\xd9\x01\x8e\x1b\x47\x4f\x73\x9b\x01\xc0\xb4\x6c\xfc\x50\ -\xcf\x49\xb7\x41\x4f\xc9\xcb\x57\x55\xa8\x2c\x48\xbf\x83\x7e\x0e\ -\x53\xfc\xfd\x01\x49\xdc\x5b\xa2\xef\xec\x33\x31\x26\xeb\xe3\xfb\ -\x0c\x19\xd0\x32\x2f\x1b\xbf\xd7\x00\xc4\x00\x64\x2c\xe5\x47\xde\ -\x6d\x0d\xf2\x72\xcd\x51\xe0\x28\x11\xf9\xa3\xf6\xaf\xdd\xdd\x1e\ -\x38\x8e\x65\x51\x66\x3d\xce\x46\x48\x5c\xd1\x67\x37\x8d\x2f\x58\ -\x9b\xc8\x6d\x84\x7e\xcb\x18\x4f\x48\xcb\x4a\x8a\x83\x6c\x3a\xea\ -\xb7\x87\xbe\xd0\xea\x2e\x9f\x34\x5d\xd9\x59\xdd\xad\x2b\x54\x6e\ -\xc2\xa9\x2a\x8a\xff\x62\x16\xcf\x91\x77\xde\x91\x9e\x8b\x58\x62\ -\x41\xb2\x33\x7e\x38\xfd\x91\x48\xc1\x8e\x8a\x01\x95\xcb\x2b\x5d\ -\xfb\x1b\x1b\x94\xed\x9c\x2d\xc3\x0c\x83\x9b\xdb\x55\xc6\xdc\xfd\ -\x9e\x46\x95\xc5\x28\x6b\x49\xe7\xab\x7c\x4c\xb7\x27\xa2\x3d\xb7\ -\xc0\x00\xc4\x00\x64\xb4\x0c\x6a\x20\x9b\xd3\xfe\xd3\xe4\x47\x82\ -\x84\x06\x0c\xa4\x25\x3b\x17\x48\x49\x96\x4c\x80\x48\x33\x9b\xd1\ -\x35\xce\x48\xec\xa3\xc7\x3b\x15\x5d\xb3\x91\x30\x0e\xf7\x8d\x31\ -\x75\xb4\x87\x51\xaa\xe1\x27\xfd\x00\x1a\xca\x30\x9d\xba\x53\x6b\ -\x37\xff\xf9\xda\xa4\x5f\xd3\xd9\xd5\xc3\xc9\x96\xba\xf0\x83\xdb\ -\x75\xbe\x0e\x7c\xb6\x45\x7b\x41\xa2\x6c\x7c\x49\x71\xd9\x90\x33\ -\x92\x08\xce\xba\xf6\x4f\x2a\x70\x4b\x3b\x16\xba\x7d\x9f\xdc\xaa\ -\x9e\xc7\x80\x03\x95\xc9\xfd\x00\x03\x0f\x66\xda\xa6\x3f\x5d\xad\ -\x8c\x08\x51\xc8\x1e\xaa\xc3\x63\x63\xaf\xf5\x56\x62\x00\x62\x00\ -\x92\x4d\x3b\x90\x50\x03\x4d\x7e\xe4\xb2\xa0\x0f\x85\x88\xdf\xb6\ -\x7b\x1a\xc4\x36\x8a\xd3\xd5\x59\x73\x84\x49\x14\x4b\xa3\x98\xe6\ -\x2c\x43\x88\x94\x42\xd4\xe7\x28\x2e\xcb\x89\xac\xa3\x3b\xc0\x02\ -\x18\x94\xaf\xae\x7d\x68\xa7\xd6\xd3\x12\x6d\xc7\x3e\x11\x0e\x9c\ -\x08\xbc\x66\x43\xb5\x54\x7f\x89\xe2\x29\x09\x65\xb5\x4f\xe4\x0d\ -\x79\x7a\x1c\xfd\xae\xff\x6f\xb3\x7a\x33\x02\x5e\x9f\x51\x0c\xc7\ -\x81\x2b\xfb\x9c\x19\x98\x67\x4c\xc4\x33\xb4\x88\xc6\x17\x41\xc4\ -\x40\xaa\xc0\x5c\x47\x32\x30\xa6\xe4\xf7\x7c\x64\x8b\x84\x2b\xa7\ -\x8c\xfd\x24\xbb\x4b\x34\xe9\xee\x34\x00\x31\x00\xc9\xb4\xad\xf0\ -\xf6\x29\x03\x8e\x30\x81\x0d\x1d\x96\xb2\x15\xcc\x1c\x1c\x12\x65\ -\xa4\x81\xea\xe0\x19\x91\x1f\xb9\x3f\x50\x62\x29\x8f\x35\x78\x47\ -\x55\x38\x2d\x25\x07\x1c\xfa\x1c\xb9\x77\xae\xc4\x42\x3b\xbf\xc0\ -\xed\x7e\x77\xa3\xc0\xee\x8c\x45\x4d\x51\x92\xfd\xdc\x20\x90\x48\ -\x56\xb0\xff\x33\x2d\xc9\x44\x7e\xf6\x98\x6a\xe9\x2c\xe0\x87\xa1\ -\x3f\x82\x2c\x0a\x25\xa4\xde\xb2\x28\x43\x1e\xa8\x9c\x12\x98\x67\ -\xf3\x56\x86\xfd\xf4\x00\xa2\x18\x77\x03\x64\x23\xdc\x2f\x27\x7e\ -\xb2\x5b\xf4\xe3\xc5\xdb\xe6\x87\x63\x18\xdb\x06\x7b\xb4\x87\xbd\ -\x6d\x33\x00\x31\x00\xc9\x44\x9f\xe3\x75\xd6\x20\x2f\xd3\xe0\xdd\ -\xd4\x64\xc2\x78\xf5\x35\x4b\xdd\xc1\x2f\xb4\x2a\x92\xc5\xa1\x67\ -\xad\x86\x7f\x2a\xea\x48\x75\xa8\x21\xbc\xe5\xee\x75\x12\x5c\xc4\ -\xd1\x20\xb5\x9e\x03\x8e\xa6\xff\x79\x8a\xe9\x29\x81\xec\x35\x0f\ -\x6e\x57\xcf\x43\x5b\x06\x53\x7d\x93\x0f\x82\x26\xd8\x4c\xed\x40\ -\xa9\x3b\x19\xfa\x23\x9a\xa5\xf8\x5a\x76\xc9\x07\xd2\x04\xfb\x79\ -\xa7\xc0\x99\xa9\xf4\xb8\x6b\x9e\xe3\x1e\x4e\xa3\xbd\x34\xd5\x55\ -\xd6\xe2\x1e\x11\x2b\xee\xb1\x81\x87\x45\xa3\x4a\x00\xaf\x23\x83\ -\x99\x9e\x48\xb0\xe4\xc8\xb5\xfd\xa0\xb7\x25\x06\x20\x06\x20\xc3\ -\x95\x1f\xf9\xf7\xbc\xa7\xe5\x96\xc6\xa6\xe9\x4c\xb7\xa0\xb1\x46\ -\x0d\x50\x9c\x1b\xa5\x8a\x6c\xcb\xac\x6b\x4b\xdf\x13\x34\x5d\x9b\ -\xdc\xfc\x8d\x35\xdd\x24\x32\xca\x72\xa6\xcf\xd1\xdf\x79\x23\xab\ -\x20\xaa\x26\xca\xaf\x5e\x5b\xa5\x73\x38\x98\x28\x5e\x2b\x6b\x6b\ -\x2a\xa4\x4a\x7c\xc3\x0f\x77\x85\xad\x85\xd9\x56\x25\xfe\x76\x90\ -\x79\xa1\x8f\x01\x53\x0c\x00\x90\x6c\xfc\x30\xe8\xcf\xdd\x75\xc2\ -\x60\x7e\xb1\xa3\x04\x49\xfa\x81\x7a\x23\x51\xe3\x8b\x92\x56\xf3\ -\x8b\xeb\x54\x96\xcc\x21\x10\x71\x89\x86\xdd\x64\x03\x10\x03\x90\ -\xc1\xd8\x6e\x6f\x8f\x58\xb9\xaa\x5c\x51\x3e\x8e\xa0\xa2\xb6\xc2\ -\xb5\xbd\x76\x43\x97\xfc\xc8\xa9\xec\xca\x8f\xe0\x6c\xd4\xe7\xf8\ -\x6c\x8b\x5b\xda\xb9\x28\xbd\x62\x35\xe7\xfa\x1c\xfd\x59\x71\x99\ -\x9c\x20\x9b\xfd\x60\xa2\x51\x1a\x2a\x9a\x99\x1a\xf4\xfc\x48\xdc\ -\x4f\x4e\x8f\x02\x6d\x2a\x32\xbd\xac\xea\x85\xc5\x99\x8d\x64\x00\ -\x93\x12\x14\x9a\x56\x5c\xfb\xee\xb2\x28\x43\x0b\x3c\x82\xa0\x23\ -\x40\xb4\xf6\x86\x65\x92\x45\x11\x53\x6b\x80\x92\x16\x93\xfb\x80\ -\x4d\xdb\xeb\x36\xb8\xab\x3c\xe0\xe6\x18\x88\xfc\x26\x09\x2a\x0d\ -\x40\x0c\x40\xfa\xb4\x0a\x6f\x9f\x30\xe0\x08\x25\x95\x38\xf0\x05\ -\xf5\x13\x87\x7e\xd3\x13\x49\x49\xe5\x8b\xd9\x2f\xa9\x90\x79\x6c\ -\x90\xcc\x7a\x88\x64\xb3\x25\x3f\x92\xb5\xf2\x95\x3f\x5e\x4a\x58\ -\x2c\x64\x42\x5a\x84\x73\x39\x14\xe0\x8b\x93\xe0\xda\x4b\x7e\x69\ -\x91\x5b\xbe\x7f\x91\x1c\x2c\xa0\x3a\xdc\x6d\x83\x83\xa6\xfd\x22\ -\x8b\xf2\x78\xb8\x06\x8d\x2f\x58\xa7\xd2\xe5\x70\x7b\x13\x61\x63\ -\x62\xb8\x86\xec\xb4\x97\xea\x72\x32\x29\xdf\x57\xbf\xec\x50\x04\ -\x11\xff\x1a\x16\x77\xc1\xce\x2a\xb8\xa2\x38\xd7\xae\xfd\x03\xde\ -\x36\x1a\x80\x18\x80\x44\x9b\x9e\xc8\x8f\xfc\x8f\xf5\x39\x42\x53\ -\x97\x08\x78\xf9\xde\x45\x6a\xfe\x22\x51\xae\xa6\xee\x17\xb3\x2b\ -\x3f\x42\x53\x97\xc1\x43\x1c\x47\xe5\x92\x30\xb1\x9c\x63\x11\xe8\ -\xa0\x0d\xc9\x8e\x05\x9b\x6b\xdc\x0d\x8f\x76\xb8\xda\xf5\xd5\x3a\ -\x9f\xc3\x06\xf3\xb8\x1b\xde\x5f\x9b\x8d\x89\x6c\xfc\x68\xec\x4c\ -\xa1\xb7\xc5\xb5\x07\xb8\x98\xed\x81\x6e\x3b\x1c\x59\x94\x58\x06\ -\x0b\x2c\xab\x32\xd7\xfe\xfa\x06\x65\x39\x71\x3f\x7c\x9f\x99\x88\ -\x0f\x54\xf8\x6c\x44\x19\xe9\x89\x84\xb9\x9e\x9c\xbb\x0f\xde\xeb\ -\x6d\x9e\x01\x48\x7e\x03\xc8\xf5\x89\xb4\x41\xde\xf7\x39\xe2\x5c\ -\x00\x33\x15\xa2\x95\x3e\x1e\x69\xa5\x59\xee\x73\x3c\xb4\x43\x7d\ -\x02\xe4\x47\x16\x34\xd5\x84\x75\xb2\xe7\x17\x8c\xb5\x66\xd2\x88\ -\x8c\xf3\xd8\xfc\x92\x3a\x7d\x37\x1c\x2e\xcd\xf1\x91\x66\x85\x64\ -\x22\x34\xb8\xd9\x61\xd2\xf6\x9a\x0d\x61\xaf\x87\x07\xdc\x48\xcf\ -\xcd\xd6\xbc\x0d\xa5\x33\xca\x4a\xfb\x3e\xde\x2c\x2d\x2f\x1c\xba\ -\x64\x51\x86\x78\x7d\x24\xe5\x7f\x71\x90\x76\x41\x54\x93\x72\x68\ -\xba\x8f\xd6\x47\x50\x41\xb6\x4b\x4f\x84\x0c\x6e\x72\xc2\xfa\xcb\ -\xd1\xfb\xe1\x6e\x6f\x17\x19\x80\xe4\x17\x80\xac\x49\x85\x0d\x66\ -\xf9\x5d\xae\x2a\xef\xea\x73\xf0\x77\x22\x3e\x9c\x92\xf6\x7d\x9f\ -\xce\x2e\x2d\x57\x93\xd8\xc9\x62\xa4\x55\xc7\x96\x06\xfd\x2c\xad\ -\x93\x2d\xcd\xc5\x68\x73\xf0\xf4\x5d\x7f\xfc\x64\x20\xfb\x3f\xb5\ -\x55\x0d\xe1\x28\xed\x92\xa9\xc1\xcd\xb8\x46\x16\x67\xbe\xef\x13\ -\xcd\x8a\xd4\xb3\x4e\x68\xf0\x46\x0f\x83\xcc\x81\x5e\x58\x9c\xdb\ -\x18\xaa\x40\xa5\x18\x67\x49\x46\x85\xec\x3d\xf4\x5d\xd8\x75\x7d\ -\x05\x29\xdc\x7b\xf4\x8f\xb4\x88\xeb\xf0\x12\x51\xc7\x73\xf8\xba\ -\x3f\x96\x2b\xb2\x28\x06\x20\xd9\x35\x36\x95\xbd\xcf\x68\xb9\xe5\ -\x9a\x9f\x50\x6d\x7b\x5a\x89\xab\xbb\x6d\x85\xca\x06\x92\x1f\xf9\ -\x46\x96\xe5\x47\x90\x59\xa7\xc6\xfe\x30\x93\xc8\x6b\xe4\x80\x70\ -\x88\x44\xe9\xe3\x19\x38\xa2\x01\x84\x88\x48\x52\x92\x5b\xb0\xa5\ -\xb6\x8b\xcd\x94\x49\xd9\xf8\xc2\x52\xf5\x07\x28\xf1\x49\x36\xde\ -\x83\xbd\x28\xd5\xa3\x24\x8b\x02\x6b\x8b\x6b\xc7\xac\x0b\xfb\x47\ -\x86\xd2\xa3\x8a\x6b\x77\x01\xa0\x39\x0b\xe6\x68\x25\x30\xef\xd9\ -\x17\x31\x23\x32\xc4\x08\x68\xe6\x6f\xac\x0e\xbd\xa4\xf2\x9c\xbe\ -\x47\x3e\xe7\x6d\xbd\x01\xc8\xc4\x03\x90\x8b\xbd\xfd\x79\xde\x03\ -\x47\xf7\xe1\xb5\x27\x41\x33\x5d\xa0\x8d\x76\x5a\x7e\x24\x71\xbf\ -\xec\xaa\xe5\x6a\x78\xed\xa7\x1d\xae\xfd\x8d\x1b\x5d\xd5\xca\xc0\ -\xf2\x51\x14\x5b\x3a\x7e\xcb\x55\xbd\xb3\x04\x9c\x1c\x99\x1c\x11\ -\x3b\x6c\x2c\x00\x3a\xbb\xb2\xf1\x61\x39\x16\x0d\x6f\x2d\x80\xfa\ -\x79\x67\x92\x3d\x66\x0f\x48\x22\x4b\x8e\x3f\xaf\x38\xbc\x78\xe8\ -\x4b\xba\xa2\x0c\xce\xb9\xb3\xb4\xc0\x0a\x09\x1c\x1d\xf7\x97\xfb\ -\x06\x11\xd8\x5b\x80\xa3\x24\xe6\x3d\x20\x97\x95\xe7\x7c\xa0\xf1\ -\x06\x6f\xc5\x06\x20\x13\x03\x40\x6e\xf6\xf6\x13\x63\x57\xc5\x3a\ -\xfa\x0c\x57\xbd\x6e\x9e\xdb\xfe\x96\x8d\x5d\x7d\x8e\x2c\xaf\x93\ -\xbd\xe6\xdb\xdb\xdd\x2d\xbf\xd9\xeb\x1d\xc5\x96\x20\x2f\xfe\xa4\ -\xe1\xd5\xd1\xc7\x43\xf9\x8a\x79\x0f\xfa\x05\xf4\x29\xfa\x1b\x1e\ -\xcc\xb4\x6c\x3c\x99\x08\x0e\x9c\xfe\x15\x14\x58\x9c\x31\x60\x32\ -\x1a\xb2\xf1\xcc\x04\x75\xbc\xaf\x49\x25\x35\x8e\x01\xc2\xc0\x60\ -\xf5\xc8\xe2\x8a\x63\x7e\xa7\xed\x75\x0d\x5a\xbc\xd5\xd7\xf0\x24\ -\x9f\x45\x96\xc2\xe7\x70\x0f\x4b\x80\x31\xf7\xef\x9b\x3f\x26\x41\ -\xab\x01\xc8\x38\x05\x90\xc6\x24\xa5\xcc\xfb\x72\x55\xac\x3b\xf3\ -\x77\x45\xaa\x1e\x34\x28\x23\x65\xb5\xcf\xd1\x6d\x3b\x1d\x3f\xd9\ -\xbd\x0d\x93\x67\x72\x5a\xf3\x68\xe2\x9d\xeb\x59\x97\x15\x69\x37\ -\xfa\x4d\x8f\x75\xba\x95\x47\x96\x64\x1f\x40\xfa\x88\xe8\xc9\x2e\ -\x97\xec\x5a\xe8\x33\xcb\xad\xee\xa4\x07\xed\x01\xe5\x44\x32\x24\ -\x1b\x4f\x43\x1f\xdb\xfa\x8a\xf5\x6a\xf2\x5f\x19\x95\x02\x06\x51\ -\x92\x0c\x20\x52\x24\x10\x69\x79\x45\xbd\xc0\x0f\xfa\xf3\x19\x20\ -\xe2\xef\x53\x35\xd5\xef\x5a\xad\xb2\x19\xd9\xdd\x38\xb9\x2f\x90\ -\x45\x39\x6a\x00\x32\x7e\x00\xa4\x38\x49\x21\x4d\x7e\xc4\x47\xc4\ -\x38\x15\x4a\x0c\xab\xaf\x5e\xaa\x07\x91\xd2\x83\x64\xd6\xb3\xe9\ -\x54\x4e\x07\xa7\x02\x50\xd1\x48\x9e\x5d\x59\x21\xa7\xa2\x59\x82\ -\xf2\xf2\x89\x79\xce\x53\x81\x7d\xb5\xe6\xf8\x32\x77\xa3\x8f\x96\ -\xa9\xef\x93\x19\x8c\x76\x96\x59\xd2\xad\xb7\xc5\x1a\x5d\x6d\x11\ -\x94\x5c\x49\x96\x7b\x5b\x50\x6f\x13\x35\x5e\x64\x51\xe8\x8b\x40\ -\x20\x40\x6c\xf1\x6c\x40\x42\x49\x8a\xac\x82\xe0\x82\x7e\x1c\xc1\ -\x4d\x7a\x7d\x6e\xb7\xfb\x0a\x6a\x31\x93\xf9\xf3\x37\xd7\x04\x05\ -\xdf\xf1\xd5\x33\xfb\x70\xa2\xa9\x67\x00\x92\xc3\x00\xf2\xbc\x24\ -\x75\xcc\x6b\xe0\xe0\x27\xb5\x62\x4a\x0a\xb0\x5d\xf6\x7e\xb4\x59\ -\x6c\x96\xfe\x68\x93\x99\xd4\xad\xa2\x24\x86\x23\xd9\xf1\xb7\x9b\ -\x5c\xe5\xb2\xca\xa0\xf6\x7a\x71\x51\x2e\xc8\x75\x8f\x0a\x7d\x77\ -\xd7\xbb\x1a\x55\x1e\x1c\xb5\xec\xe3\x2c\xe2\x86\x65\xe5\xb3\x5d\ -\xd3\x0b\xd7\x85\xe5\x52\xde\x20\x31\x64\x73\x7e\x44\x3b\x3f\x9e\ -\xd8\xa3\xa1\xc1\xe5\xfb\x17\x8b\x59\x87\xb3\x3f\xdb\x4e\xf4\xee\ -\x99\xf2\x9a\xeb\x96\xa9\xbc\xda\x7b\x56\x24\xf6\x43\x00\x13\x82\ -\x11\x02\xa3\x71\x38\x27\xf4\x86\x6c\xca\xa2\x18\x80\x0c\xcf\x0e\ -\x7b\xfb\x9e\xcd\x73\x84\x3e\x07\xc0\x51\xb5\xa2\x52\x7a\x4a\x0c\ -\xe7\xe1\x38\xb2\xbd\x6f\x82\x26\x3c\x20\xb5\xf7\x63\xcd\x92\x30\ -\x67\xae\x84\xb5\xb6\xa9\xb1\xdd\x3a\x37\x6a\xc6\xc4\xf4\xec\xea\ -\x0a\x0d\x0f\xe2\x00\xa7\x64\x8a\xbe\x3b\xc2\xfb\x21\x2e\x7f\xaa\ -\xa9\xaf\x76\x3b\xde\xba\x49\x52\x34\xd9\x9f\xef\x09\x81\x04\x99\ -\x18\xb2\x28\xf3\x1b\x6b\x74\x0c\xa1\x3f\xd2\x7f\xdf\xab\x4b\x58\ -\x72\x86\xd8\x65\x02\x91\x07\x7a\x66\x22\xbc\x37\x6c\xc1\xad\x7f\ -\xb5\x5e\x33\x29\x9a\x0f\x19\x7f\xf7\x0b\xb2\x28\xb7\x7b\x3b\xcf\ -\x00\x64\x6c\x01\x64\xa9\xb7\xd3\xd6\x20\x0f\x02\x76\x53\x54\x32\ -\x48\xb9\x8d\xcf\x59\x1d\x18\x39\x8f\x27\x13\xcb\xd9\x94\x1f\xb9\ -\x7f\x9b\xf6\x3f\x48\x75\xf6\xb6\x15\xea\x73\x68\xe3\xdd\x8c\xd4\ -\xb8\x9c\x22\x1f\x3e\xfb\x6a\x96\xd6\xe9\x32\x25\xce\x8e\x14\xf6\ -\xa5\xe4\x9a\xc2\x00\xe4\x05\x16\x7f\xe1\x84\xd5\x6b\x78\x70\x7b\ -\x56\xcb\x5a\x2a\x65\x7a\x10\x01\xb4\x70\xf8\xe5\x73\x66\xa7\x77\ -\x87\xf4\x77\x6f\x88\x62\x3e\x23\xac\x0c\x40\x43\x8b\x55\x01\xdc\ -\x63\x69\xb0\x63\x52\xfd\xbe\x30\xa9\xbe\x78\xfb\x82\x40\xed\x1d\ -\xbf\xf7\xd9\x8f\x32\x2d\x1b\x6f\x00\x32\x38\xbb\x32\x15\x36\x88\ -\xe5\x7d\x83\x3c\x6a\x26\x11\x69\x4a\x33\x09\x2d\xa3\x9f\x85\xbd\ -\x19\xd9\x5d\x27\x1b\x9c\x03\xd4\xdc\x96\x57\xac\xd7\x86\x3d\x1e\ -\x66\x4a\x27\x13\x61\x9e\x63\x38\xe5\xab\xf6\x37\x34\x68\x7d\x2d\ -\x8e\x3a\xd7\x9a\xbc\x00\x09\xfd\x08\xcd\xdc\xa0\x71\xf6\x8c\x55\ -\x21\x6b\x64\xad\xee\xd7\xdb\xb3\xae\x71\x46\x5f\x83\x20\x63\xed\ -\x8d\xcb\xd5\x1b\x4a\xcb\xc6\xf7\xe1\xfc\x63\x26\x72\x85\x07\x91\ -\xcd\xcf\x5d\xe3\x6e\xfd\xfd\xbe\xb0\x6f\xe6\x54\xd7\x7b\x12\x20\ -\xed\xff\xf4\x56\x7d\x17\xe9\x65\x8d\xef\x2c\xf7\x93\x89\x16\x9f\ -\x01\x48\x96\x01\xe4\x49\x49\xea\xf7\x2f\x56\xae\x2a\xd7\xc4\xb3\ -\xa6\x92\xb7\xd4\xba\xdd\xef\x6d\x4c\x0f\xe8\x65\x7b\x9d\x2c\xeb\ -\x48\xf9\x2c\xd4\x66\x6b\x1b\xaa\x55\xe3\xd6\x56\xbb\x09\x46\xcb\ -\x1d\x74\xf9\x6a\x72\x89\xa2\x6b\x4a\x85\x1b\xff\x64\xf5\xd8\x97\ -\xaf\xce\xb6\x4d\x32\xc9\x12\x61\x4c\x35\xdd\x5d\xe7\xae\x63\xca\ -\xfc\xa7\x1d\xd9\x93\x45\x49\x9c\x3e\x8c\x30\xfa\x23\xf4\xe4\x60\ -\x8a\x71\xff\x92\x19\xc5\x5d\x22\xbd\x41\x84\xf3\xca\x7d\x05\x35\ -\x59\xc7\xd7\xeb\xfd\x78\xaf\xc6\x17\xae\x15\x18\x4d\x90\x7b\xe9\ -\x65\xde\x66\x1a\x80\x64\x07\x40\x5a\xbc\xfd\x93\x95\xab\xc2\x83\ -\x45\x8a\x8f\xa4\x04\xe2\x83\x0c\xe7\x8d\x8a\xfc\x48\x32\x40\xc6\ -\xe7\x40\x53\x25\xd2\x86\xe5\x75\xb6\x06\xe9\x44\x07\xf3\x69\xe7\ -\x14\xb8\x65\x7b\x17\x49\x33\x0a\x19\xf4\x19\x17\x17\xe6\xfc\x31\ -\x63\x1c\x27\xf7\x51\xed\xc6\x6a\x65\x4e\xa3\xb1\xe7\xe5\x70\x22\ -\x8b\x82\xf3\xdf\xfe\xd6\x4d\xea\xd5\x69\xa0\xf4\xb2\x33\x85\x33\ -\x61\xec\x51\x0a\x04\x20\xb6\xbf\x79\xa3\x8e\x2f\x9d\x29\xf9\xf7\ -\x81\xee\xcb\x7b\x31\xff\x42\x20\x35\x41\x4a\xa6\x68\xf3\x1d\x37\ -\x00\xc9\x1c\x80\x20\x3f\xf2\x77\x06\x1c\xe5\x4a\xf9\xb5\x8d\x6f\ -\x4a\x89\xab\xbb\x65\x79\x90\x59\xff\x79\xa7\x28\x94\xd9\x2b\x57\ -\xb5\x49\x7e\x9b\xcf\xa1\xe4\xb1\xe9\xcf\xd6\xb8\x54\x51\x59\xd2\ -\x6f\x29\xcd\xcb\x72\x55\xef\xe9\x7e\xce\x45\xeb\xab\x37\xb8\xfd\ -\x7f\xbf\x55\x8d\x62\x00\x75\xbc\x80\x9f\x94\x09\xce\x09\x4c\xb9\ -\xd5\xc7\x97\xea\x7a\xa3\x4c\xa0\xe6\x75\x96\x15\x98\xc9\x2a\x00\ -\x00\xc9\xa2\x14\x96\x05\xaa\xf7\xb4\x9e\xfd\x91\xb8\x1f\x85\x92\ -\xd6\x61\xff\x7b\x04\x4a\x71\xdd\x2f\xc7\x47\xa3\x9e\x9d\x29\xcc\ -\x92\xc0\xe2\x9a\x40\x19\xf0\x57\xbd\x6d\x30\x00\x19\x3e\x80\xd0\ -\xe7\x78\xb5\xf5\x39\x92\x26\xa8\x7f\xc8\xa1\xe6\x2e\xdf\xb7\xc8\ -\xed\xfb\x64\xb3\x3b\xa9\xdd\xd9\xdb\xb3\x3e\x24\x46\x8f\x83\x9e\ -\x4a\xcb\x2b\xeb\xdd\x9c\x85\x73\x7a\x2e\x19\xca\xf3\x6b\x13\x77\ -\x7f\x00\xec\x80\x6b\xe3\x0b\xd7\xe5\x74\xf9\xea\x6c\x24\x0c\xc9\ -\xc6\x17\x86\x5d\xf7\xc7\x1f\xd9\x19\x82\x93\x7e\x76\x77\x64\x4c\ -\x36\xfe\x1b\x61\xd8\x14\x70\x58\x7b\xd3\xf2\x24\xe3\x98\x91\xec\ -\xba\x2f\x4f\xcf\x89\x70\xff\x73\xff\x11\x34\x5d\xe3\xcf\x75\xcc\ -\x90\x0e\x25\x7b\x52\xd6\x9e\x58\xa6\xdf\x9b\x80\xf7\xe5\xbb\xbd\ -\xcd\x36\x00\x19\x1a\x80\x9c\xf4\xf6\x73\xeb\x73\x94\xb9\x19\x89\ -\xcc\x3a\x02\x7d\xa4\xfc\x28\xd8\x66\x55\xa6\x22\xd1\xad\x42\x29\ -\x95\xcf\x42\x3e\x62\x71\xfb\x82\x34\x80\xa5\xf2\xb4\xcf\xd1\x9f\ -\x4d\xbf\xa0\xc0\xcd\xdf\x54\xa3\x48\x98\x7e\xd0\x8c\x8b\x0a\xc7\ -\x75\x96\x4b\x70\xc0\xa4\x77\xd5\xf2\x4a\xd7\xfe\x86\x8d\xa2\xcc\ -\xd2\x23\xc9\xba\x6c\xfc\x43\xac\xd5\xdd\xeb\xf6\x20\x77\xd3\x36\ -\x3f\x91\x8d\xef\xba\xdf\x78\x16\x58\xf7\x5b\x77\x72\xb9\xee\xcb\ -\x43\xdd\x58\x59\xdc\xab\x00\x9d\xe4\x7a\x2e\x29\x9a\x88\xe5\xd4\ -\xff\xf6\xf6\x02\x6f\xe7\x1b\x80\x9c\x5d\x7e\xe4\x01\xcb\x3a\xca\ -\xc5\x2e\x21\x9a\x2d\xab\x28\x97\xc4\x03\x32\xeb\x38\xa9\xd1\x90\ -\x1f\x81\x96\xcb\x4f\x68\xa9\x00\x58\x97\xfc\x88\x65\x1d\x67\x4e\ -\x9f\x07\xf1\x44\x96\x6f\x71\xae\x38\x4f\x13\x81\xa0\x11\x69\xbf\ -\x28\x0a\xef\xf9\x50\xe8\x8f\x48\x70\x33\xcb\x6b\x75\xc9\x78\x21\ -\x68\x6c\x7f\xd3\x46\xc9\xc2\x88\xd9\x97\x6c\x25\xe4\x99\x80\x02\ -\x8c\x8c\xbd\x82\xa8\x53\x5d\x99\x0c\xfd\xa7\xa6\xbf\x58\x17\xe4\ -\xf3\x8b\x27\xec\x3d\xf7\x93\xb3\xf5\x47\xf2\x15\x40\x90\x1f\x79\ -\x8f\xf5\x39\xca\x35\xc7\x11\xb7\xf1\xd5\xdf\xb9\x52\x8d\x42\x4a\ -\x48\xd9\x95\xa2\x08\xab\x44\xe1\xeb\x33\xb1\x8c\x5e\x56\x2a\x55\ -\x1e\x38\xfb\xd3\x4a\xac\x5c\xd5\x5f\xf9\x6a\x46\x4a\xa5\x1f\xe8\ -\xa9\x2c\x90\x1a\x8f\xe5\xab\x01\xef\xc5\x82\x20\xbb\x0e\x6b\x8b\ -\x99\x0c\xca\x47\xcc\x5f\x5c\x9d\x75\x8a\x78\x98\x2d\x82\x51\xd8\ -\xf0\xec\xd5\xea\x6d\xc4\x19\xa7\xa9\xe9\x79\x9b\x8e\x1e\xe0\xc3\ -\xf3\x41\x7f\xa4\xb6\xbe\x5a\x20\x32\xc1\xef\xd9\x7b\x93\x19\xb8\ -\xbc\x07\x90\xa7\x78\xfb\x4b\x93\x1f\xe9\x26\xb3\xee\xd3\x76\x26\ -\xb9\x89\xb2\x62\xe3\x3a\xdb\xf2\x23\x44\x73\xcc\x74\xc0\x74\x41\ -\xa9\x37\x34\x55\x0b\x27\x8e\xcc\x7a\xb6\x76\x7f\x3c\xb9\x48\x0c\ -\xa0\x13\x3f\xde\x1d\xca\x2e\x94\xf8\x26\x60\x50\x13\xb3\x61\xa8\ -\xca\x8d\xcf\x5f\xeb\xae\xf5\x8e\x9d\x06\x78\x56\xc9\x1b\x09\xeb\ -\x8f\xe0\x89\xa6\xf9\xea\x6b\xc2\xd2\x31\xca\x58\xca\x42\x3e\xb9\ -\x55\x8c\xb1\xc3\xdd\xb2\x10\xb2\x97\x8e\xf7\x37\x29\xf8\xe2\x98\ -\xf3\xe0\xde\x7d\xab\xb7\x92\x7c\x05\x90\x03\xde\x7e\x69\x7d\x8e\ -\x20\x37\x11\xe5\x47\xd4\xe7\xf0\x0f\x4d\xd4\xfc\xc9\x9a\x1c\xb7\ -\x7f\x28\xaf\x7d\x28\xc8\x8f\xec\xff\x74\x8b\x40\x8b\xba\x73\xa0\ -\xe5\x96\x59\xb9\x6a\x90\xe2\x89\x44\xc8\x38\xba\x98\x8d\x4c\xe8\ -\x7e\x5c\xb2\x92\xb6\x72\x79\xb8\x4f\x01\x4e\x9c\x76\xd6\x65\x51\ -\x1e\xd9\xa9\xcc\x07\x70\xa0\xdf\x74\xe1\xa4\x2b\xdd\xf2\xbd\x8b\ -\xba\x76\x88\x74\x7b\x3d\x0d\xf5\xd5\x92\x92\x99\x91\x2f\xf7\xf0\ -\xff\x7a\x7b\x86\xb7\x73\xf3\x05\x40\xea\x4d\x7e\x24\x89\xec\x12\ -\xc1\xbb\xd9\x55\x41\xf0\xee\xba\x7f\xda\xa5\x32\x52\xb6\xe7\x39\ -\x48\xf7\xa3\x2a\xef\xda\x13\xcb\x45\x0b\x26\xeb\x30\x5a\xee\xd0\ -\x77\x7f\x1c\xf8\x5c\x8b\xdb\xf1\xb6\x4d\x3a\x7f\xf9\x92\x29\xc7\ -\x01\x40\xb2\xae\xb8\x90\xec\x9a\x51\xc8\x94\x29\x51\x69\x58\xf3\ -\xb9\x6b\x5c\x8d\xcf\x94\xa1\x1a\x93\x09\x1d\x3a\xd5\xc5\x1a\x24\ -\x28\xe2\xb5\x94\xdf\x24\xb6\x98\x3f\xf3\x49\x3f\xf4\xb6\x23\x1f\ -\x00\xe4\x1f\xf3\x9e\x96\x9b\xac\xf4\x2c\x88\xb5\xe5\x6f\x76\xed\ -\xcd\xc8\x66\x9f\x23\xcd\xbd\xf7\xd9\xcd\xd6\x97\xad\x77\xe5\x73\ -\x67\x77\xc9\xac\x5b\xb9\x6a\x68\xbb\x3f\x2e\x0f\xe2\x89\xd4\xe9\ -\x97\xee\x5e\x28\xd5\xd9\x7c\x39\x7f\xba\x87\xbb\xf5\x47\xd6\xdf\ -\xb6\x22\xec\x7e\xf9\xc5\x9e\xa0\xbd\xf6\xa5\xec\xca\xa2\x10\xfc\ -\x1c\xf8\x6c\x8b\x28\xed\x9d\x3e\x2b\x61\x28\xf1\x9a\x07\x03\x80\ -\xf1\x1a\xb2\xea\x8d\x7f\xba\x46\xfa\x64\x79\x76\x5f\xfe\x3c\x1f\ -\x00\xe4\x73\xf9\x5a\xf2\x50\x9f\x43\x65\xa2\x02\xc9\x8f\x88\xdd\ -\xf2\x2b\xe6\x39\xb2\xbb\xf4\x47\x34\xc9\xef\x06\x5e\xff\xae\x77\ -\x37\xba\xf9\x1b\x6b\xc4\xac\x82\x35\x94\x0f\x32\xeb\xd9\x2a\x5f\ -\xad\xbb\x79\xb9\x22\xde\xb0\xba\x36\x95\x9f\x59\xf4\xd4\x44\x15\ -\xa1\x2a\xa8\x22\x28\x4b\xf8\x71\x47\x56\xcb\xaf\x31\x10\xa2\x61\ -\x4e\x06\xbf\xf1\xd9\xab\x35\x13\x15\x87\x6a\x01\x33\xe4\x76\xa0\ -\x22\xb3\xf9\x32\x8f\xb2\xea\xaf\xe7\x03\x80\x7c\x26\xef\xfa\x1c\ -\xf0\xd3\x7d\x3a\x2d\xd9\x88\x86\x6a\xb7\xfd\xcd\xa1\x7e\xcc\x72\ -\x9c\xac\xed\x21\x8f\x83\x5a\x3e\xbb\x81\x5f\x7f\xf0\xf3\x2d\x92\ -\xdb\xa0\xf1\x1b\xcb\x2d\xa5\x06\x1c\xc3\x2b\x5f\xf9\x0c\x72\xe6\ -\xc5\x45\x6e\xdf\xa7\xb6\x6a\x0a\x5a\xcd\xf3\xe2\xfc\x05\x53\x6d\ -\x15\x8c\xf3\x4a\xeb\xe7\xa9\xa4\xc7\x0a\x63\x66\x3b\xb2\x42\xfb\ -\x3d\x15\x24\xdd\x19\x6e\xe5\x99\x02\x44\x58\xe0\xb5\xf5\xe5\xeb\ -\xc3\x22\x33\x28\xef\x1e\x60\x5a\x93\xb5\xc2\x4c\xb9\xe7\xc9\xf5\ -\xb8\xcf\x00\x64\xa2\xcd\x73\x4c\x0b\x11\x5a\xd9\xec\x72\xcd\x0b\ -\xd0\xe7\x20\xc5\xce\xea\x62\x9f\x64\x43\x9c\x96\x48\x41\x85\xbc\ -\x6b\x95\x1a\xe3\x1c\x47\x71\x3e\xc9\xac\x67\xc9\xc4\xf0\xf1\x80\ -\x41\xe6\xc8\xa6\xc7\xb1\x5c\x1e\x95\x4b\x92\x2e\x9c\x13\xca\x5a\ -\x34\xdb\x57\x1e\x5e\x22\xa2\x06\x6b\x75\xb5\x5d\x30\xc3\x19\x36\ -\xfb\x46\x00\x2a\xfa\x88\xf4\x3b\xd4\x97\xf1\x81\xd1\x82\xa6\x1a\ -\x0d\xbf\xde\xf2\xdb\xbd\xee\xd6\xdf\xed\x75\x8b\xb6\xd6\xe6\x03\ -\xad\xd7\x00\x64\x22\xd6\x88\x71\x2c\x05\x57\x96\x68\x39\xce\xe1\ -\xd3\xdb\xd4\x6c\xcc\xfa\x3a\x59\x68\xb9\xdf\xdf\xa5\x48\xac\xcd\ -\x47\x60\x95\x4b\xfb\x17\xab\x33\x1b\x5e\xc4\x0d\x5b\x6d\xe5\xa1\ -\xc5\x3a\xc7\x0c\xbb\xcd\xcc\x91\xdd\x1f\x39\x71\xef\x97\x07\x59\ -\x14\x82\x15\x82\x96\x86\x67\xad\x76\xd7\x7e\x7b\x47\xd8\xeb\xf1\ -\xb5\xcc\xc9\xa2\x50\x3a\xec\xfc\x40\x93\x9e\x33\x05\x45\xbd\x7a\ -\x8b\xe8\x7a\xdd\xe0\x33\xfc\xe3\x0f\xed\xd4\x1c\x09\x02\xa4\x79\ -\x00\xf2\x06\x20\xe3\x9e\xa5\x52\x1c\xd6\xc9\x12\x0d\x2d\x6e\x5b\ -\xe0\xf6\x7d\xbc\x59\xcd\x45\x6e\xe4\xac\xf6\x39\xbc\xd1\xe7\xa0\ -\xa1\x88\xb2\x6a\xd8\x1b\x1d\xa6\x89\xfb\x92\xcb\x36\x1b\xc9\xf2\ -\xa8\x99\x5a\x5b\x7b\xf0\x0b\xad\x9a\x97\x19\xf7\xd3\xe7\x59\x02\ -\x92\xa8\x6b\x05\x59\x83\x60\x86\xb2\x13\x3d\x12\xed\xf6\x18\x21\ -\x90\xa0\xa1\x05\x20\x41\x7d\xa7\x3c\xdc\xbb\x2f\x33\x39\x01\xb0\ -\x9d\x3e\x4b\xd9\xf2\xa2\x75\xa2\xa7\x03\x6c\x13\x9c\x95\x65\x00\ -\x32\x9e\x79\xf2\xdc\xc8\x64\x1d\xf3\x56\x55\xb9\x6d\x7f\xd3\xe0\ -\x4e\xfc\x28\xf0\xe4\xb3\xba\x67\x21\x0e\x5c\x3d\xde\xa9\x3f\x33\ -\xa5\x4b\x04\x16\x6a\xbf\x46\xcb\xcd\xf8\xf4\xb9\x8f\x66\x29\x99\ -\xb0\x25\x0f\x01\x3f\x95\x47\x0c\x9c\x07\x7c\x2e\x18\x8e\x25\xa8\ -\x5a\xd0\x5c\xab\x9d\xf1\xd2\xd7\x7a\x64\x64\x7b\x6b\x00\x0f\xf6\ -\x8b\xd4\xd4\xcf\x3b\x53\x7f\x2c\xae\x77\xbe\xa4\x48\xcf\x24\x7d\ -\x19\xac\xe0\xca\x62\xbd\x56\xcf\x44\xca\x00\xc4\x00\x24\x57\x98\ -\x28\xd3\x4a\xe4\x48\x70\xd8\x9b\x9f\xb7\x56\x93\xdd\x5d\x29\x7b\ -\x16\xfb\x1c\x5f\xdd\xa6\x87\x91\x3e\x07\x32\xeb\xa8\xc2\x4a\x7e\ -\x64\xaa\xc9\x8f\x64\x4d\x3c\xd1\x67\x74\xd0\x76\xe9\x2f\x55\x2e\ -\xab\x94\x93\xb2\xf3\x72\xf6\x5e\x20\xa0\x2b\x41\xce\x0b\x0a\xdd\ -\xaa\x63\x4b\x44\xc7\x4d\xcb\xa2\x0c\x23\x33\x8f\x00\x32\x7f\x73\ -\xb5\xe4\xde\xfb\xab\x08\x84\x15\x08\x33\xdd\xba\x9b\x96\x8b\xf0\ -\x10\xe5\xf7\x27\xa8\x44\x8f\x01\xc8\x78\x7a\x28\x62\xcd\x75\xe6\ -\xa5\x45\x7a\x28\x48\xcd\x11\x82\xcb\xe6\x3a\xd9\xb4\xcc\x3a\x74\ -\xc9\x44\x7e\xa4\x72\xe9\xdc\xb4\x7e\x96\xcd\x73\x64\xb7\x51\x4c\ -\xa0\xd0\xfa\xaa\x7a\x95\x60\x88\x68\x71\x50\x76\x6e\x06\x5f\xe2\ -\xa5\x8c\x34\x25\x09\xb6\x36\x3d\x77\x4d\xa0\x97\xff\x2c\xd9\x69\ -\x33\x44\x20\x81\xc9\xb8\xfa\xfa\x84\xc4\x30\xc0\xe7\x72\x8d\x68\ -\xb2\xa3\xb8\x70\xcb\xbf\xec\xd5\x32\x34\x58\x63\xd2\xd7\x2a\x28\ -\x9d\x48\x40\x62\x00\x32\x6e\xd2\xf2\x27\x85\x79\x8e\x45\xad\xf3\ -\xc5\xfa\xe0\x21\xa0\xb1\x97\x35\x59\x87\xa4\x5c\x85\x74\x35\x3d\ -\x15\xfa\x1c\x92\x59\x3f\x77\x96\xb8\xee\xdd\x67\x4d\xcc\xb2\x63\ -\x71\xba\x99\x72\x24\x19\x1f\x0e\x28\x6f\x37\x31\x8e\x50\xbe\x87\ -\xa0\x4b\xf2\x3d\xcb\x2b\x5d\xeb\x6b\x37\x28\x18\x1a\x92\x2c\xca\ -\xa9\x30\x0b\xb2\xee\x96\xe5\x67\x1d\x18\xe4\x1a\x31\x7f\x45\xc6\ -\x88\x14\x3c\x20\x42\x03\x7e\xc9\x8e\x05\x41\xbe\xc7\xdb\x04\x09\ -\xbc\x0c\x40\x72\x7e\x5f\xc2\x15\xa1\x31\x38\x67\xfe\x1c\xf1\xd0\ -\xc9\x38\x90\x5a\xef\xce\x82\xca\x8a\xfc\xc8\xd7\xc3\xb4\x3a\x3f\ -\x19\x60\xa3\x41\x99\x8e\xa0\xcc\x89\x8d\x8a\x11\xc5\x42\x13\xe5\ -\x3a\x2c\x6e\x9f\x98\xe2\x89\xa3\x3d\x58\xcb\xce\x0f\xee\xe3\x25\ -\x3b\x17\x68\xa3\xa3\x06\x6b\xbf\x7d\xf6\xc1\xda\x23\xa7\x03\xdb\ -\x70\xf9\xc1\x45\x61\xaf\xfa\x20\xb2\x47\x9e\x5b\x94\xa6\x99\x64\ -\x67\xd0\x90\x12\xda\xb6\x7b\x1a\x5c\xe5\x92\xb9\x62\x8d\x4d\x80\ -\x45\x69\x06\x20\x39\x5b\xc3\x4d\x64\xd6\x8b\x67\x94\x4a\xba\x01\ -\x6a\xa2\x26\x5f\xb3\x38\xcf\x11\x01\x89\xc9\x5e\x86\x0e\x9b\x5f\ -\xb2\x5e\x8a\xa8\x93\xb5\xfa\xd3\xe6\x39\x46\xbb\x7c\xc5\xf5\xe7\ -\x1a\x30\xff\x41\x33\x7d\xc2\x8a\x27\x8e\x36\xe5\xbd\x28\xa1\xdf\ -\x5e\x59\xec\xea\xfc\xb3\x25\x69\x1f\xef\xdc\x07\x92\x45\x81\xc4\ -\x70\xec\x9b\xdb\xdd\xbc\xc1\xee\xa0\x4f\x41\x72\x29\xd6\x3c\xd6\ -\x91\xa4\x7f\xc2\x44\x7b\x9c\x95\xaa\x7f\xda\xca\xf4\xca\xe8\xa2\ -\xf1\x3b\x2b\x65\x00\x92\x7b\x37\x77\xd7\x3a\x59\x6a\xa7\x07\x3f\ -\xd7\xa2\x08\x34\x1b\xc3\x51\xbd\xfb\x1c\x30\x55\x98\x1d\x61\x60\ -\xaa\x7a\x75\x95\xea\xef\x92\x59\x37\xf9\x91\xd1\x9f\x3e\x4f\xca\ -\x57\x4c\xf4\x33\x10\x6a\xe5\xab\xec\x89\x8b\xe2\xe4\x59\x0f\xcc\ -\x02\x35\xfa\x1c\x7d\x89\x8b\x1e\xf9\x6a\xd8\x44\x08\x5d\xfd\xaa\ -\x0b\x0b\x06\xfd\x19\x64\x1a\x6b\x6f\x5c\xae\x32\x30\xe0\x24\x16\ -\xe3\x03\x41\x5c\x94\x3f\xaf\xba\x66\xa9\x32\x4d\xb1\x18\x8b\xc6\ -\x5d\x76\x6f\x00\x92\x33\xe9\x75\xaa\x6b\x9d\x2c\xf2\x23\x3b\xdf\ -\xbe\x59\xd1\x0a\xa9\x6f\xb6\xd7\xc9\x12\xe1\xf2\x59\xec\x3c\x58\ -\x71\x70\xb1\x98\x3e\x6a\x14\x16\x97\x99\xd3\x1a\x23\xe3\x1a\x40\ -\xcf\x26\xeb\x94\x78\xe2\xb9\x56\xbe\xca\x56\x7f\xe4\x2a\xad\x37\ -\x08\xcf\x5d\x5c\x6f\xc0\xe4\xf9\xa1\x6e\xfa\x5a\x38\x7d\x26\xdd\ -\x91\x30\x81\xb6\x1e\x03\x2a\xd8\x55\x64\x12\x7d\xd2\xd7\xfd\x6b\ -\x00\x29\x58\x8a\x07\x3e\xb3\xb5\xc7\x6a\x68\xe9\xc5\x25\xb2\xf1\ -\xb0\xb5\x16\x34\xd6\xe8\x99\x63\xaa\xbe\x74\xfc\xac\x71\x36\x00\ -\xc9\x09\xf9\x91\x29\xc9\x02\x9d\xb9\xb3\xa5\xaf\x13\xb5\x75\xb2\ -\xbb\x4e\xb6\x4d\x29\xfb\x09\xff\x39\x2c\x91\x5a\x7f\xfb\x0a\x4d\ -\xcf\x2a\xa5\xbe\xca\xca\x55\x63\x2f\x9e\x38\xd3\xad\xbf\x73\xa5\ -\xb6\x0f\xc2\x20\xc2\x51\xd9\xb9\xc9\xde\x33\x18\x65\x51\x20\x88\ -\x2c\xed\x58\x28\xf5\x5d\xc0\x9b\xf3\x2f\x32\x49\x32\x89\x4e\x0f\ -\x90\x35\x04\x94\xbf\xa8\x14\x90\x35\xf0\xbc\x08\x44\x52\x7d\xbf\ -\x37\xe0\xb4\xb4\x73\x61\xfa\x99\xee\xa1\x58\x4d\xc9\xf8\x27\x61\ -\x33\x67\xeb\xab\x37\xb8\xf2\xca\x8a\x50\x5e\x9b\x52\x32\x1e\x66\ -\xaa\x0c\x40\xc6\x32\x85\x46\x12\x61\x6a\x42\x87\x55\x2d\xf6\x81\ -\x30\xa0\x97\x4d\xf9\x91\x28\xb3\x1e\x55\x4c\x51\x34\xe5\xa6\x0d\ -\x32\x28\x26\x3f\x92\x2b\x86\x73\xda\xf3\xa1\x26\x7f\x7d\xd6\x0b\ -\xd4\x2d\x13\x1c\xbd\x67\x52\x73\x1b\xde\x81\xb3\xe2\xf9\xda\x87\ -\x02\xed\x17\x07\xbf\xf3\x1d\x9b\x94\x09\xb2\xa5\x10\x10\xa9\x7f\ -\xda\x2a\x05\x5f\xf5\x4f\x5d\xa9\xd9\x8f\x7e\xd9\x74\xfe\xb5\xb0\ -\x28\x77\xbd\x6b\x73\xd8\x27\xd2\xeb\xd9\x16\x69\xe5\xbe\xa0\x25\ -\x87\xca\x2f\x9f\x0b\x79\x86\xe3\xc8\xf1\x60\xce\x00\x64\xac\xe4\ -\x47\x44\x87\xbd\xa8\xd0\x2d\xf3\x91\x09\xf2\x23\x00\x07\x35\xd6\ -\x6c\x36\xc8\x79\x6f\x78\xf0\x30\xb9\x3a\xde\xdb\xa4\xb4\x19\x5a\ -\xa1\x06\xa3\xc6\x4f\xda\x3c\xe1\x8d\x80\x62\xee\xa2\xb9\xd2\x56\ -\x5a\x71\x68\x89\xee\x15\x3b\x2f\xa3\x0b\x24\x68\xca\xe1\xc0\x2b\ -\x6a\xe7\xb8\x96\x57\xd4\xbb\xdb\xfe\xb0\x5f\xa5\xa6\x92\xe2\x52\ -\x39\x78\x64\x65\xd8\xa3\x4e\xdf\x04\x76\x16\x93\xe7\xa2\xe7\xf6\ -\xe1\xec\xc9\x24\x78\xce\x28\x91\x71\x4d\x69\xc8\xf7\x4b\x9b\xff\ -\x4e\xb2\xb5\xf3\xef\xb7\xba\x15\x07\x16\xab\x07\x19\xfa\x23\x39\ -\xb9\xb5\xd3\x00\x64\xd4\x65\xa8\x93\x75\xb2\xac\xe9\xdc\x11\xd7\ -\xc9\xfe\xf3\xae\x1e\x9b\xd0\xb2\x22\x3f\xf2\x40\x58\xc0\x73\xe4\ -\xf4\xb6\xf4\xbe\xe7\x69\x69\xf9\x11\x73\x1a\xb9\x56\xbe\x42\xb6\ -\x84\xe8\x57\x75\xf4\xa9\x56\xbe\x1a\xab\xbe\x24\x0d\x6e\x9e\x57\ -\x56\xdb\xb6\xbf\x71\xa3\x9e\xd7\x3b\xff\xfb\x40\xa0\xfe\xfa\x6c\ -\xfe\xe0\xbd\xad\x62\x2c\x1e\xf8\x7c\x8b\xca\x4e\x64\xf1\x7d\x06\ -\x62\xc5\xe1\xba\x36\xff\xd5\x7a\x77\xd3\x63\x1d\xfd\x07\x8a\x91\ -\xd0\xf2\xbd\x5d\xd2\x99\xdb\xf5\xff\x6d\x76\xd5\x6b\xe7\x09\x44\ -\xb4\x6b\x24\xb7\x08\x2d\x06\x20\xa3\x15\xd1\x40\xd5\xbb\x32\x11\ -\x7a\xdb\xf2\xa2\xba\xb0\x4e\xf6\x51\x84\xde\xb6\x65\xb1\xcf\x11\ -\xe4\x47\xa8\xe5\xe2\x8c\x36\x3d\x67\x8d\xbf\xf9\xca\x43\x6a\x3c\ -\x3d\x65\xba\x55\xb9\x68\xc5\x61\x08\x0d\x26\xdc\xee\xf7\x34\x4a\ -\xa0\xd2\xce\xcb\xd8\xd3\x7e\x29\x29\x4a\x75\xf7\xda\xa5\x02\x0d\ -\xf6\x8f\xc4\xc6\x3a\xcf\x2f\x4c\xc9\xf5\x77\xac\xd0\x33\xde\xd7\ -\x73\xa5\x61\x60\x7f\x5d\x21\x46\x0c\x94\x85\xf4\xb5\x56\x97\x81\ -\x47\x7a\xa3\x15\x35\x15\xfe\xfd\xaf\x0a\xd2\x41\xe5\xe5\x06\x20\ -\xf9\x02\x20\xcc\x74\xf0\x93\x9b\xef\xe8\x7d\xed\xee\x64\x96\xd7\ -\xc9\xc6\x28\x86\xc8\x88\x06\x5d\xfb\x1b\x1a\x5c\xd5\xca\x20\xb3\ -\xce\x40\xe0\x04\x16\x77\x1b\xf7\x46\x14\x5b\xe6\x9d\x03\x8e\x63\ -\xc3\xd3\x57\x29\x6a\xb5\xf3\x92\x1b\x40\x42\x7f\x44\xaa\xbb\xc8\ -\xa2\x3c\x67\xb5\x4a\xce\x4c\x9a\x13\xa4\x41\xb3\x67\x56\x6b\xce\ -\xc2\x39\xaa\x32\xf4\x97\x85\xd0\x43\xd9\xf2\x92\xba\xd0\x0b\x19\ -\xc4\xf3\x1f\xc9\x2e\x37\xff\xa2\x53\x9f\xb1\xf6\xc6\x65\xe9\x80\ -\xd4\x00\x24\x4f\x00\x84\x99\x0e\xa4\xd6\x59\x38\x73\xed\xc3\x59\ -\x94\x59\x4f\xca\x55\xd7\x24\x43\x87\x7b\x3f\xde\xac\x89\x5b\xd2\ -\xdf\x28\xb3\x6e\xc0\x91\xdb\x65\x13\xee\x95\x45\x6d\xf3\xc5\xfe\ -\xa9\xa8\x99\xa3\x66\xaa\x9d\x9b\x1c\x93\x8d\xbf\xbc\x58\x99\x00\ -\xb2\x28\x4c\x96\x9f\x78\x34\xa8\xfd\x92\x85\xb4\xbc\x62\xbd\x32\ -\xfc\xfe\x40\x68\x7a\x22\x71\xc2\xeb\xcf\x96\x85\x9c\xf1\x5c\xfb\ -\x7b\xe2\xce\xff\x39\xe8\xd6\xdc\xb0\x2c\x57\x02\x0b\x03\x90\x51\ -\x91\xa4\xb8\xa0\x50\x00\xc2\x04\x2a\xd1\x4a\xb6\xd8\x55\x52\xcb\ -\xfd\x59\xa7\xd8\x5c\x6b\xae\x5b\x26\xe7\x33\x35\x2d\x3f\x62\xe5\ -\xaa\xf1\xd1\xff\x98\xe5\xb6\xbd\xbe\xc1\x75\xbc\xb7\x31\xac\x02\ -\x36\xc0\xcf\x59\x7d\x3a\x64\x51\xb8\x5e\x0b\xb7\xd4\xba\xbd\x1f\ -\x6b\x76\xb7\xfe\xdb\x3e\x31\x1b\x2b\x93\xdd\xe8\xfd\x66\x21\xe7\ -\x14\x08\x68\x08\xf2\x86\x54\x85\x38\x15\x54\x22\x58\x18\x37\x6d\ -\xd2\x2c\x03\x90\xbc\x01\x90\x0b\x0b\xdd\xa2\x96\xf9\x4a\x79\x91\ -\x35\xc8\x28\x70\xc4\x5a\xe9\x0f\xc2\xea\xda\xe6\x97\xad\x77\xe5\ -\x15\xb3\x4d\x66\x7d\x1c\x9a\x76\x7f\xcc\x2a\xd5\x7d\xd2\xf8\xfc\ -\xb5\x21\xca\x34\x00\xc9\xed\xfe\x48\xdc\x4a\x38\xb9\xc4\xad\xf5\ -\x99\xc1\xad\xff\xba\x57\xbb\xeb\xc9\x24\x09\xdc\xfa\xcb\x42\x60\ -\x6d\x5d\xf7\xbd\xa1\x65\x21\xb1\x27\x42\x29\x5c\xc1\x85\x01\x88\ -\x01\xc8\x88\x69\xb9\x0f\xed\x08\xb4\xdc\xf7\x35\xb9\xc5\xdb\x16\ -\xa8\x01\x2b\xb6\x86\xc9\xac\x8f\x3f\xf1\x44\x1f\xd1\x2e\xd8\x52\ -\xe3\xae\x7b\x64\x97\xca\x23\xdd\x37\xdf\x99\xe5\x38\xed\x37\x19\ -\xc2\x9d\xbb\x70\x8e\xca\x5a\x55\x2b\xab\xba\x4a\x59\x7d\x3c\x87\ -\xfc\xdf\xd6\x97\x0d\x3d\x0b\x31\x00\x31\x00\xc9\x4c\x9f\xe3\xc1\ -\xed\x41\x5c\xf1\x2b\xdb\xdc\xaa\xab\x97\xca\xd9\x4c\xc0\x7d\x03\ -\x79\x55\x16\xe1\xfa\x35\xbe\x60\xad\xae\x29\x64\x87\xbe\x22\x58\ -\xb3\x1c\x97\x45\x49\x74\xad\x56\x1f\x5f\xe6\x96\x6c\x5f\xa0\x01\ -\x43\xa4\xe4\xbb\x07\x74\x71\x3d\x43\xf5\xda\x2a\x95\xb5\x87\x92\ -\x85\x18\x80\x18\x80\x8c\x8c\x96\xfb\xb5\xb0\x15\x90\x46\x39\x3b\ -\x22\xe2\xdc\x80\x36\x9e\x59\x9f\x63\xfc\x96\xaf\x12\x39\x0c\x98\ -\x36\x5b\x5e\x5c\x77\xd6\xa5\x45\x66\xb9\x0b\x24\x0c\xe6\xd6\xd4\ -\xcd\x53\x90\xb7\xe5\xee\x75\xe9\xe0\xa0\xc7\x33\x9a\x56\x5b\xae\ -\x1b\x52\x16\x32\xea\x00\x52\x1c\x68\xcc\x94\x57\x09\x6a\x98\x73\ -\x91\x4d\x2e\x31\x00\x19\x37\x00\x92\x88\xaf\x31\x70\x08\x2d\x97\ -\x26\xeb\x9c\x85\x73\x93\xed\x84\xb6\x15\x70\x22\x18\xd4\x4f\xd5\ -\xc5\x1f\xd9\xa9\x59\x81\x7e\xa9\xa0\x66\xe3\xa2\x37\xc2\x3c\x08\ -\xf3\x5e\x77\xb9\x23\xee\xf0\x97\xda\xdc\x8a\x43\x8b\x55\x25\xa0\ -\xff\x21\x91\xd2\xb2\x72\x81\xc0\xc2\xe6\x5a\x0d\x0d\xa2\xf6\x3b\ -\xa6\x00\x92\xea\x0a\x64\xc8\x98\x28\xa7\x4a\x15\xdc\x67\x4a\x08\ -\x7b\x32\x09\xcf\x1e\x93\xf2\xca\xd9\xae\x6a\x45\xa5\x5b\xd0\x54\ -\x0b\x18\x1a\x80\x8c\x07\x00\x21\x3a\x81\x2a\x88\x7c\x02\x8b\x85\ -\x24\x83\x72\xa1\x6d\x05\x9c\x68\xda\x57\x1b\x9f\xbd\x5a\xbb\xb7\ -\xd9\xbd\x12\x67\x87\xcc\xc6\x67\x16\x42\x2f\x92\x0d\x9e\x0c\x0c\ -\x4b\x3e\xe8\xb1\x0e\x31\xeb\x28\x5b\x31\x0b\x42\xf3\x1d\x43\x11\ -\x82\x69\x73\x80\x61\x30\x8a\xdb\x19\x03\x90\x54\xc8\x2e\x98\x3b\ -\xa2\xe1\x1f\xa9\xfe\x1c\x13\x00\x31\xbf\xb1\x46\xca\xdc\x9b\x9f\ -\xbb\xd6\xb5\xbe\x66\x83\x8e\x1d\xc9\x16\xc4\x57\x0f\x7c\xae\xc5\ -\xd5\xdd\xba\x82\x5d\x45\x06\x20\x39\x0f\x20\xa7\xdb\xa4\x8f\xb3\ -\xe3\x6f\x37\x49\x94\x6d\xb2\x6d\x05\x9c\x70\x16\x1c\x49\xa1\x02\ -\x04\xae\xb3\xb4\xaf\x8a\xed\xbc\x8c\x7b\x46\x9d\x7f\x5e\x3b\x3f\ -\xb8\xc5\x1d\x7f\x38\x2c\x93\x82\x82\xcb\x54\xf9\xaa\x63\x4b\x54\ -\x0e\x8a\xf2\x26\xc8\xd6\xc0\xa0\x1c\x4c\x19\x6b\x20\x00\xe1\x3e\ -\xa2\x0c\xaa\x7b\x27\xd5\x05\x14\x94\xa0\xd8\x2f\x83\x40\x64\xcc\ -\x2c\x24\x8d\xe2\xfd\x12\x0b\xe3\x98\x3b\x5a\x7d\x7c\xa9\x6b\xfa\ -\x8b\x75\x6e\xcf\x87\xb6\x68\x70\x11\xf5\x61\x00\x83\xe3\xba\xe3\ -\xbf\x0e\xb8\x3b\xfe\xfb\x80\xdb\xff\x99\x16\x05\x39\xcc\xb1\x90\ -\x21\xfb\xf7\x34\x00\xc9\x75\x00\xa1\xa1\x8a\xbc\xfb\xfc\x86\x1a\ -\xa9\x80\x5a\x83\x7c\x02\x4e\x9f\x4f\x2e\x71\xb3\xab\x2a\x74\x6f\ -\x50\xd2\x50\x76\x69\x99\xe5\x84\xc8\x2a\x71\xca\x88\x2e\x1e\x4a\ -\xca\xd0\x4c\xa0\x1f\xf8\xfb\xad\x01\x60\x66\xa4\xe4\xd4\x71\xfc\ -\x88\x27\xe2\x1f\x86\x0b\x20\x04\x94\x85\xd3\x4b\x34\xe4\x18\x33\ -\x0a\x32\x9d\xb8\x63\x84\x99\x30\x16\x67\x71\x7f\xad\x3c\xba\x44\ -\xeb\x1b\x90\x47\xd9\xff\xe9\xad\x2a\x9b\x52\x1a\xc7\x00\x0e\x24\ -\x5a\xc8\x9c\x18\x8c\x64\x67\x09\x1a\x60\xe8\xe7\x01\x4e\xe9\x55\ -\xbc\xa1\x6c\x6e\x00\x32\x1e\x00\x84\x8b\xb9\x64\xc7\xc2\x30\x4d\ -\x6e\x0f\xe6\x84\x1c\x1e\x64\x86\x00\x79\x1b\x4a\x57\x39\x22\x53\ -\x61\x96\x81\x32\xd6\xb2\xce\x45\x8a\xe4\x8f\x7c\x25\x3c\xcf\x38\ -\x6b\x4a\x56\x22\x4d\xb0\xca\x36\x21\xc1\xc0\xbe\xbb\x99\x66\xfa\ -\xa9\xa1\x03\x08\x19\x06\xea\xc1\x0d\x77\xad\xd2\x40\xe3\xa6\x3f\ -\x5d\x23\x5d\x2e\xb2\x85\x08\x14\x64\xb6\xfb\x3e\xd9\xac\x72\x1a\ -\xef\x01\x90\x21\x51\xcf\x32\x39\x1d\xdb\xe9\xb0\x71\x91\x91\x00\ -\x8e\x77\xcf\x47\xb6\x88\xa4\x83\x88\x24\x63\x01\xfd\xcc\x95\x19\ -\x80\x8c\x17\x00\x59\xba\xcb\x00\x64\x42\x96\xaf\xfc\xc3\x4f\x59\ -\xa1\xf3\x43\x5b\xdc\xce\x77\x6c\x0e\x75\x68\x2b\x5f\x4d\x8c\x32\ -\xd6\xb4\xc0\xac\xdb\xf3\xe1\x2d\x12\x33\x4d\x03\xc8\x3b\xbb\x00\ -\x24\x28\xfe\x86\xc1\x42\x4a\xd5\x67\xf3\x0f\x7d\x66\x20\x89\x00\ -\x27\x0b\xa9\x90\x3a\x61\x2d\x2f\x00\x41\x46\x21\xa0\xf8\xe1\x6e\ -\x11\x70\x60\x6e\xa6\x95\x30\x4e\x05\xdf\xc2\x67\xd2\x9f\xa1\xc7\ -\xba\xef\x13\x5b\x3d\xf0\xac\x54\x96\x42\xc9\x2b\x2c\xd8\x2a\x18\ -\x48\xb1\xdb\x00\xc4\x00\xc4\x6c\x6c\x9d\x4c\x90\x6a\x3f\xf6\xcd\ -\x76\xed\x7f\x30\xf9\x92\x89\xa5\xac\x4c\x39\xa9\xe5\x55\xf5\x61\ -\x1b\xe1\xa9\x3e\x00\x24\x11\x5b\xa5\x8c\xd9\xf9\xc1\xa6\xb0\xda\ -\xe1\xd4\xd0\x4b\x58\xf4\xcd\xe8\x63\xa8\x19\x7f\x7a\x00\x91\x55\ -\xd6\xf3\xfe\xc3\x76\x81\x0b\xec\xaf\x03\x9f\x69\x71\x9b\xff\x7c\ -\xad\x66\x56\xe2\x80\x23\x60\x44\x89\x6d\x10\xf7\xa1\x01\x88\x01\ -\x88\xd9\x98\xde\x1b\xe7\x17\x68\xa9\x18\xd3\xe7\xec\xdb\x36\xf1\ -\xc4\x09\x56\xc6\x3a\xb7\x40\xda\x55\xd1\xb1\xf7\x05\x20\xa5\xdd\ -\x76\xc0\x44\xa0\x19\x6a\x09\x8b\x32\x28\xd3\xef\x6c\x34\x44\xf1\ -\xbb\xb7\xdc\x11\x99\x87\x58\x54\x3f\xee\x90\x4f\xd9\xfa\x8a\x7a\ -\x2d\x94\x2b\x4d\x05\xf0\xe1\xf7\xc3\x9c\xca\x90\x98\x9d\x06\x20\ -\x06\x20\x66\x23\x61\x4f\x51\x17\x9e\x71\x49\x91\x58\x29\x44\x9b\ -\x3c\x8c\x5c\x27\xfe\x9c\xfe\xbb\xff\xc9\xff\xf3\x3a\x35\x4d\xfd\ -\x03\xaf\xc9\xe5\x64\x98\x6c\xdb\xdf\x34\x68\x07\xb7\x98\x2d\x85\ -\xe3\xc3\x31\x86\xc8\x39\xec\x06\x67\xbe\x81\x63\xa7\x56\x8e\x63\ -\x23\x82\xd5\x39\x38\x2f\x7c\x7f\xca\x20\xf1\xfb\x03\x90\xe9\x1e\ -\x4f\x1e\x64\x5a\xcc\x54\x10\x18\x00\x1e\x57\x7f\x73\x7b\x9f\x00\ -\xa2\xd7\xf9\x73\xc8\xf6\x43\x18\x50\xc7\xbe\xd1\xde\x6f\x06\x41\ -\xb9\x09\x16\xd7\xa5\x93\xa6\xea\x1c\xab\x49\xee\xcf\xed\xcc\xcb\ -\x8a\x5c\xd5\xb2\xca\x64\x79\xdc\xf6\x1e\x8b\xe4\xf8\x9d\xeb\x7d\ -\xb6\x01\x15\x77\xe5\x91\x25\x9a\xe5\x88\xd7\x2a\xbd\xac\x6c\x78\ -\xd7\xc2\x00\xc4\x00\xc4\x6c\xb0\x4e\x93\x52\x83\x36\x39\x9e\x1b\ -\x1c\x23\x0f\x3d\xcc\x16\x36\xc6\xcd\xdf\x58\xed\x16\x6f\x9b\xef\ -\x96\xef\x5b\xe4\x96\xec\x58\xe0\x16\x6f\x0f\xb6\x6c\xef\x22\xfd\ -\xac\xf5\xff\x5f\xbd\x6e\x9e\x68\x93\x71\x4d\x29\xef\xc1\xfb\x41\ -\x8f\x24\xfa\x94\xc2\x6a\x2a\x37\xbf\x3b\x60\x89\xf3\xc7\x59\x45\ -\x90\x20\x62\x9d\x5d\x5d\xe1\xaa\xd7\x54\x69\x5d\xeb\x42\x7f\x8f\ -\x2f\xdf\xbf\xc8\x2d\xed\x58\xe8\x96\xec\x5c\xa8\x9f\x9c\x8f\x45\ -\xad\xf3\x5d\xed\x86\xf0\xfd\xe7\xcc\x9f\xa3\xf3\x18\x19\x42\x4c\ -\x6d\xf3\x3e\x13\x75\xd5\x00\xa5\x20\x02\x06\x9a\xdb\xc8\x96\xf4\ -\x07\x20\xf4\x1c\x0a\x2e\x2f\xd1\xde\x75\xf6\xf8\xf4\x28\x39\x3d\ -\xb8\x5d\xe5\x26\xb2\x93\xdb\xfe\x7d\xbf\xe4\xdc\x53\x65\x65\x02\ -\x92\x2d\x77\xd7\xb9\xbd\x1f\x6d\x56\x29\x0a\x5f\xc1\x6b\x60\x4e\ -\x51\x12\x85\x82\xcb\x4f\x34\xb7\xe6\x6f\xaa\xd6\x42\x2c\x02\x16\ -\x58\x54\x1c\x53\xe9\xc8\xcf\xb7\x01\x88\x01\x88\x59\xff\x13\xc5\ -\xe5\x7a\xd0\x63\x8a\x4f\xbf\x02\x27\xc8\x8e\x95\xfa\xa7\xae\x94\ -\x22\x00\xf4\xcb\xab\xfd\x43\x4a\x5d\x19\x07\x01\xe5\xfa\xba\x7f\ -\xda\x29\xb6\x0b\x0f\x32\xce\x80\x3f\xf3\xff\xbc\x8e\x07\xbd\xed\ -\x9e\x06\x39\x81\xd9\xb5\x15\x7a\x2f\x22\x4e\x1c\x2b\x0f\x76\xce\ -\x64\x18\xa9\x40\x2f\x0e\xdf\x3d\x28\x1e\x70\x8c\x00\x01\xf7\xe2\ -\xe6\x3f\x5b\xe3\x76\xbd\x6b\xb3\x3b\xf8\x85\x16\xb1\xc7\xb4\x50\ -\xc9\xdf\xdf\xb1\x61\xcb\x3d\xcb\x4f\xfe\x2e\x6a\xa8\xff\xff\xb8\ -\x44\x8d\xdd\xe2\x9b\x9e\xbb\xd6\x83\xcd\x62\xbd\x1f\x65\x13\xce\ -\xaf\xce\x31\x9b\x32\x27\x12\x55\xbd\x38\x3c\xff\x4d\xde\xd1\xdf\ -\xf8\xe3\x8e\x7e\x01\xa4\xfb\x2a\x63\x56\x4f\x73\x0f\x01\x00\x30\ -\xa5\x0e\x7e\xde\x9f\xb3\x77\x37\x8a\x12\x5c\x34\x2b\xe5\x36\x3c\ -\x63\x95\x80\xe4\xe0\xe7\x5b\xb4\xf3\xa7\xf5\x55\x1b\xdc\x8a\xc3\ -\x8b\xdd\x12\x7f\x5d\x1a\x9e\xb9\x4a\x0c\x2a\xce\x77\xcb\x5f\xd7\ -\x6b\xc1\x95\x86\x04\x3d\xe0\x03\xdc\x19\x9e\x1f\x33\x00\x31\x00\ -\x31\xeb\x01\x1a\x49\x54\x46\x64\x8c\xba\x6a\xf1\x8c\x52\x4d\x14\ -\x37\x3c\x73\xb5\xeb\x78\x4f\xa3\x1e\xcc\x28\x29\x83\x73\x84\xd9\ -\x72\xf4\xfe\x76\x95\x1e\xc4\x70\x39\x1d\xae\x19\x7f\x4e\xff\xdd\ -\xff\xe4\xff\x79\x1d\x35\x6a\x56\x19\xf3\xfb\x44\x87\x38\x57\x9c\ -\x03\xd9\x07\x1c\x7b\x3d\xe4\x63\xe1\x40\x93\xef\x0d\x88\x45\x67\ -\x4e\xb6\xb4\xfc\xc0\x22\x57\x7f\xc7\x4a\x29\xcc\x12\x11\x73\xfc\ -\xd7\x7f\x7f\x77\xba\x09\x1b\x81\x41\xdf\xff\x6b\xf1\xfb\x27\xe7\ -\x20\xa1\x87\xf2\xef\x08\x06\x0a\x68\x1e\x08\x65\x1c\xb1\x83\x7e\ -\xb4\x5b\xcf\x04\xf4\x52\x28\xa7\x4b\x3b\x17\xaa\x2c\x76\x65\xdc\ -\x9c\x59\x36\x01\x36\x67\x26\x74\xde\x45\x2d\xb5\xfa\xde\xdc\x3b\ -\x7d\x02\x88\xb7\xe9\x17\x16\x08\x50\x01\x0f\xd4\xb5\x37\x3f\x7f\ -\xad\x5b\xe9\x81\x81\xeb\x80\x0f\xe1\xde\x5c\xba\x67\xa1\xb6\x12\ -\x92\xe5\xf2\x1e\x94\x05\x05\x10\xe7\x17\xa4\x4b\x5a\x7c\x26\xc3\ -\x7e\xd3\x29\x1d\x5e\x9c\x55\xc5\x0a\x03\x10\x03\x10\xb3\x2e\x35\ -\xd5\x32\x95\x94\x78\x08\x6b\xea\xab\x95\x65\x74\xbe\xbf\x49\x40\ -\x01\x3f\x1e\x87\x89\x23\x3c\x72\x3a\x33\xbb\x5c\x70\xa8\xd0\x28\ -\xf9\x33\x14\x4c\xca\x3d\x38\x4e\x39\x81\xe2\xb2\x4c\x94\x18\x06\ -\x95\x69\xd0\x97\x99\x2a\xf6\xcd\x2c\x57\xe1\xb3\x0c\x9c\x16\xfb\ -\x48\x90\xac\x20\x02\xd6\x6c\x80\xcf\xac\x70\xfe\x02\x8a\x0c\x7d\ -\xff\x08\x2e\x9a\x3f\x80\x4a\xea\x41\xa5\xf3\x03\x4d\xae\xee\xb6\ -\x15\xea\x07\xb0\xf5\x6f\x22\xac\x60\xa6\x74\xc4\xa0\x28\x4a\x03\ -\x7c\x4f\xcd\x81\xcc\x08\xf3\x3e\x94\x92\x62\x1f\x6d\xea\x39\xb3\ -\xd4\x9b\x28\x4e\x28\xb4\x7c\x7f\x32\x40\x32\x41\xf5\x52\xfc\xb5\ -\xe1\xf7\xd7\xdd\xb4\xdc\x9d\x3f\xe9\x72\xbd\x4e\xfd\xb4\x5e\xd7\ -\x94\x92\x20\xaf\x8f\xbd\x36\x53\xe3\x35\x00\x31\x00\xc9\xf6\x3e\ -\x87\x2b\x8b\x95\x71\xf0\x90\xa2\x90\x4a\x39\xea\xe6\x5f\x85\x49\ -\x5c\xd1\x22\x4f\x65\x69\x05\x31\x0a\xcb\x3e\x52\x27\xa2\x67\xf2\ -\x17\xe7\x02\x78\xa9\x56\x7d\x59\x51\xe6\xb3\x91\x04\x34\x88\x7e\ -\x29\x6b\x00\x56\x7c\x06\xbd\x0b\xc4\xff\x24\xb9\xe1\x1d\xf9\x8d\ -\x8f\x75\x2a\xdb\xc8\xd6\xea\xe5\xfe\x28\xa6\x94\xfb\x6e\xf9\x97\ -\xbd\xfa\x33\x43\x70\xe5\x73\xc3\x72\xb4\xf1\x5c\xda\x22\x8b\x2d\ -\xf2\x99\x65\xc7\x7b\x9b\xf4\xdd\x3a\x3e\xb0\x45\x60\x41\xa6\x85\ -\x50\x21\x7d\xb4\x79\xab\xab\x24\xb8\x58\x77\xcb\x0a\xe9\x4c\xd1\ -\x3f\xa2\x2f\xa2\x3e\x11\xdb\x0d\x8b\x43\xa3\x3d\x55\x54\xa6\x52\ -\x15\x80\x03\xb0\xb0\x62\xd7\xe4\xdc\x0d\x40\x0c\x40\xc6\xa8\x5c\ -\x85\xca\xa8\x28\x8c\x3e\x0a\xa4\x7e\x4c\x49\x86\x1a\x34\xe5\xa6\ -\x21\xad\x1b\xcd\x90\x03\x8d\x7a\x49\xd4\xbb\x19\x42\xc3\x79\xaa\ -\xe1\x39\x52\xa9\xfe\x44\x13\x69\xc6\x45\x85\xca\x36\x10\xd1\xa3\ -\xe9\x0f\x58\xee\xff\x74\x8b\x4a\x4a\x37\x7a\x10\xe3\xfb\x77\x3f\ -\x9e\xb1\x30\xed\xbb\xf1\xe0\x75\xf2\x57\x7b\x94\xf1\xad\xf7\x19\ -\x09\x25\x45\xca\x34\xe3\xb5\xac\x85\x0c\x11\x6a\x03\x4f\x75\x87\ -\xdc\x4e\x82\x84\xf5\xd5\x6e\xd3\x73\xd7\xb8\xb6\xd7\x6d\x08\x7d\ -\xb4\x07\xda\xd5\x2f\x23\x90\x50\xef\xe3\x47\xbb\xdd\x9e\x8f\x34\ -\xbb\x2d\xfe\xfa\xa0\x7c\x0b\x78\x40\x64\x00\x74\x36\x3e\x6b\xb5\ -\x7a\x1f\x9c\x13\x7c\x4b\xd9\xd8\x81\x88\x01\x88\x01\x48\xbe\x96\ -\xab\xca\x15\xc5\x91\x75\xc0\x18\xa2\xbc\x70\xf3\x2f\x42\xd4\x8d\ -\x03\x1b\x4b\xe7\x49\x69\x8b\x6c\x04\x27\x4e\x93\x9d\x63\x4c\xeb\ -\x63\xa5\x86\x0e\x1a\x71\xd9\x18\xe0\x81\x54\x3c\x8e\xab\xe3\x83\ -\x4d\x2a\xc9\xe1\xac\x54\x46\x3b\x35\xb6\xa0\xd1\xdf\xb9\xe0\x99\ -\xb9\xe9\x89\x4e\x0d\xd9\x55\x2e\x9e\x1b\xfa\x44\x05\xa5\x39\xbf\ -\xfb\x86\x5e\x16\x65\xa4\x28\x89\x4e\xb6\xb0\xe5\xc5\xeb\x04\x16\ -\x80\x07\xc4\x89\x5b\x7e\xbb\xb7\xab\x8f\x76\xdf\xb6\xae\x01\xc0\ -\xe4\x3a\xd0\x1f\xe3\xfa\xd0\x73\x3a\xf4\xa5\x36\xfd\xde\x85\x93\ -\xae\x50\x0f\xe4\x4f\xdd\x35\x6a\x96\xf3\xbe\x64\x33\x63\x94\x9d\ -\x19\x80\x18\x80\xe4\x1f\xb3\x2a\x96\x06\xe0\xc3\xb7\xfc\xf5\x7a\ -\x45\x7b\x3c\xc8\xca\x38\x72\xc1\x89\x76\xdb\xff\xc2\xb1\x31\xf4\ -\x35\x77\xd1\x9c\xa4\xac\x55\x3c\x30\x90\xa4\x02\x25\x14\xca\x6d\ -\x98\x11\x28\xd2\x1e\x87\x75\x27\x97\x4b\x14\xef\xea\x64\x93\x25\ -\x8d\x5a\xee\x2d\x1c\x53\x2e\x81\xc6\x19\x20\x92\x5c\x0f\x01\x9d\ -\x7f\x7e\x98\xd6\xe7\x7b\xa9\x7c\x93\x2b\x25\xad\x44\x1a\x9d\xa6\ -\xf6\x55\x17\x15\xa6\x87\xf2\xd8\xd9\x03\x63\x4a\x6c\x3d\x9f\xe5\ -\x01\x18\xb5\xf5\xd5\xba\x86\xf4\x93\x08\x14\xe2\xf7\x8c\x24\x0b\ -\x32\xae\xb4\xf9\x7f\x63\x76\x84\x8c\xb8\xc5\xdf\x03\x33\x66\x15\ -\xb9\xf5\x77\xad\x74\xab\xae\x5e\x22\x5a\xf8\xc9\x5f\x87\x0c\x6d\ -\xf6\xbc\x0a\xf9\x86\x31\x28\x67\x19\x80\x18\x80\xe4\x11\x78\xf8\ -\x07\x8c\x87\x97\x28\x96\x9a\x3f\x42\x72\x37\xfb\xe8\x96\x07\x75\ -\x2c\xb3\x8e\x81\x22\x70\xf6\x83\xe0\xf0\xb9\x77\x28\xe5\x50\xd6\ -\x8a\xb4\x4c\xfa\x36\xfc\x3d\x36\x62\xb9\xcf\x60\x73\xc1\xa4\xa2\ -\x77\x40\x33\x7c\xfb\x9b\x37\xca\x51\xc5\xb2\x48\x28\xcd\xe5\x36\ -\x68\xf4\x79\x2e\xee\x6d\x55\x44\x4e\x66\x86\xf0\x20\xdf\x5f\x0d\ -\xf6\xb1\x2a\xdf\x24\xd9\x5d\x64\xad\xf1\x6c\x72\x2d\xd8\x44\xc8\ -\x46\x49\x32\x0c\x11\x0f\x3c\x60\x03\x16\x94\xe3\xf6\x7d\x72\xab\ -\xe6\x5f\x2a\x6a\xe6\xc8\x0f\xf0\x9a\x38\x25\x2e\x36\xdb\x37\xdb\ -\x7b\x18\x1b\x0d\xd1\xa8\xaa\xbf\x73\xa5\x4a\x60\x64\xa2\x57\x3f\ -\xb0\x43\xef\x3f\x69\xd2\x53\x44\x36\x78\xea\xff\x1e\x54\xdf\x88\ -\x59\x1c\x32\x6a\x03\x10\x03\x10\x03\x90\x6c\x94\xac\x7c\xb4\xaa\ -\x52\x82\x8f\xcc\x69\x16\x6b\xe0\xca\x3f\x78\xb9\x08\x1c\x7d\xf6\ -\x04\xbc\x33\xe1\x98\x29\xb5\xa1\xb6\xba\x60\x73\x8d\x22\x4f\x80\ -\x43\x3b\xb7\xbd\x23\x45\x90\x0f\x99\x8b\x1d\x6f\xdf\xa4\xdf\xa1\ -\x9f\x02\x65\x58\x93\xcd\xa7\xc6\x1f\x68\xf4\x45\x38\x00\xec\x69\ -\x44\xb7\xbe\xba\x5e\xa5\x9b\x99\xa3\x09\x22\x09\xf9\x80\x61\xca\ -\x38\x01\xce\x94\x39\x8b\x97\x00\xea\xb8\x43\x83\x63\x6c\x7f\xd3\ -\x46\xb7\x74\xf7\x42\x37\x6b\x6a\xb1\x6b\x7e\x69\x9d\xbb\xd3\x3b\ -\xfa\x0d\x4f\x5f\xe5\x2e\x9d\x34\x4d\x0b\x9b\x22\x80\x88\xd5\xe7\ -\x01\x04\x5a\x2e\xcc\x33\xe6\x8c\xa2\x51\xb2\x62\x01\x15\x20\x05\ -\x89\x00\xd0\xa4\xfc\xd8\xf0\xec\xd5\xde\x93\x5e\xa2\xf7\x3f\xf9\ -\x9b\xbd\x9a\x32\x47\x35\x57\x5b\x2c\x0d\x40\x0c\x40\x0c\x40\x32\ -\xcf\x3a\xa2\x16\x4d\xf9\x8a\xe6\x23\x0f\x5d\xae\x66\x1d\x03\x36\ -\xd9\x99\xc3\xf8\x76\xa0\xbc\xc2\x12\x3b\xf0\xf9\x16\xb7\xe3\x6d\ -\x9b\x5c\xdb\xdf\x34\x68\x1a\x59\x83\x7c\x1e\x30\x68\xc6\xe6\x42\ -\x33\x7c\xa0\x7b\x5a\x83\x97\x8f\xec\x54\x1f\x46\xcd\x63\x66\x63\ -\x7e\xbc\x3b\x80\x5e\x1f\x46\xf6\xa4\x01\xc5\xef\x85\x21\xc5\x3b\ -\xfe\xf3\x80\xdb\xf6\x37\x1b\x34\xeb\x80\x94\x79\x56\x7a\x22\xdd\ -\x68\xce\x91\xb1\xc6\xce\x0d\x94\x07\x60\x4b\xa1\x5e\x9b\x1e\xf6\ -\xf3\xc0\xce\xc4\x37\x73\x1c\x94\xd7\x78\xfd\x65\x93\xa6\xeb\xb8\ -\xc8\x00\x39\xf6\x79\x2b\xab\x94\x49\x54\xad\xec\x02\x90\x6b\x98\ -\x83\xf1\xef\x13\x33\x19\x68\xe4\x69\x43\xfe\xe5\xe2\xa2\x44\x0d\ -\xb7\x5c\x33\x32\x04\x42\xcc\x94\x54\x2c\xac\xd0\xa0\xe0\xd3\xdc\ -\x21\xb7\xde\x67\x28\x64\x27\x63\x50\xd2\x33\x00\x31\x00\x99\xf8\ -\xb3\x1d\xf4\x0e\xe6\x2e\x9e\xab\xb2\x00\x2c\x17\x95\x70\xc6\x73\ -\x44\xde\xad\xec\x11\x1c\xf0\xee\x2e\x29\xf0\xd3\x39\x08\x7c\xfe\ -\x98\x8e\x3f\xb4\x33\x2d\x31\x4e\xe6\xc7\x14\xf5\xae\x77\x37\xba\ -\xed\x6f\xdd\x24\x26\x52\xe3\x0b\xd7\xb9\xa6\xbf\x5c\xa7\xec\xb0\ -\xb7\xa1\x16\x0b\x5b\x8c\xa8\x1e\xdb\xf5\xae\x46\x35\xa3\x6f\xff\ -\xe3\x7e\xed\xb9\x20\x0b\xa3\xff\x90\x39\x66\x5e\x69\x32\xa0\x37\ -\x53\x81\x87\xb6\xf6\xf9\xe7\x97\xd2\x19\x99\x20\x65\x4f\xce\x37\ -\xdb\xfb\x98\x15\x82\xfa\xcd\xeb\x79\x2d\x3d\x90\xb8\x15\x50\x42\ -\x8a\x37\x2c\x73\xb7\xfe\xeb\x3e\xb7\xff\x53\x5b\xfd\xfd\xe8\xb3\ -\x60\xff\x6f\xdd\x33\x10\x7a\x6f\x9c\x03\xc9\x8b\x14\x94\x0e\xd8\ -\xbb\xe3\x3d\x2f\x9a\x34\x59\xe2\x9b\x27\xfc\x35\x07\xbc\x38\x0f\ -\x52\x0d\xb8\xa2\x78\x2c\xd8\x69\x06\x20\x06\x20\x13\x7b\xbe\x23\ -\xa8\x94\x56\x6a\xad\x28\x8e\x76\x5c\x65\x1d\x13\xc0\xb8\xdf\x19\ -\x48\xdc\xfe\x96\x8d\x6e\xf3\xf3\xd6\xba\xb5\x37\x2e\xd7\xb3\xc0\ -\x60\x1d\x4e\x1f\xe7\x8f\xf3\x64\xd6\x81\xe7\x04\xe1\x45\xfd\x39\ -\xda\x85\x85\x69\x31\x4a\x22\x7b\x8c\xdf\x63\x76\x82\x68\x1f\xe9\ -\x0f\xca\x48\x23\x02\x90\xd8\x00\x4f\x16\x27\xf1\x59\x35\xeb\xe6\ -\x29\xb2\xdf\xe1\x9d\x7b\x64\xab\x01\x7a\x00\x19\xfa\x66\x61\x8f\ -\x47\x61\x22\xf3\x12\xb2\x84\x1e\x42\x9b\x89\x84\x49\xdb\x6b\x37\ -\x28\x4b\x68\xba\x7b\x9d\x26\xd2\x61\xc4\xa5\x01\xe4\xeb\xed\x9a\ -\xb7\x21\x9b\x99\xc2\x3c\x4e\xaa\x7f\x49\x19\x1d\x97\xcf\x46\x98\ -\x01\xa1\x64\xb6\xf3\xed\x9b\x3d\x80\x1e\xd0\xf9\xa4\xa7\x37\x46\ -\xac\x34\x03\x10\x03\x90\x89\x0b\x1e\xe2\xc8\x7b\x47\x43\xa4\x4e\ -\x09\x84\x46\xac\x39\xf5\xd1\x35\x68\xd1\x44\xdf\x34\x8e\x2f\x9c\ -\x74\x65\x58\x52\xe4\xaf\x8b\x08\x00\x33\xc3\xc2\x25\x45\xde\xc5\ -\x65\x03\x1a\xf3\x3a\xbc\x56\x36\x33\xac\x82\x9d\x91\xcc\x86\xf0\ -\xfb\x43\x2d\xdf\xa8\x01\xee\xa3\x76\xd1\x6c\xfd\x7b\xd0\xdb\x40\ -\xb2\x86\x06\x35\xcd\xee\x1b\x13\xa9\x16\x74\xbb\xc8\x32\x68\x8e\ -\xcf\x4a\xc4\x08\xa3\x90\xe4\x40\x7b\xeb\xf9\x7e\xf4\xa8\xd0\xb1\ -\xba\xe9\x89\x3d\x12\x94\x94\x00\xe7\x65\x5d\x00\x22\x59\x17\xfa\ -\x17\x9b\x6b\x74\x0c\x3d\x32\x67\x6f\x00\x19\x9f\xc7\x3d\xcc\x90\ -\xe1\x76\x9f\x7d\x51\x7e\x05\x94\xf6\x7d\xac\x59\xbf\x4f\xdf\x44\ -\x03\x86\x63\x33\x1b\x63\x00\x62\x00\x32\x31\x4b\x57\x3c\xe0\x38\ -\x98\xdd\xef\x69\x94\x14\x87\x65\x1e\x63\x57\xc2\x02\x44\xb8\x8f\ -\x91\x12\x9f\x2c\x9d\xab\xa2\x31\x61\x4f\x01\x3e\x21\x6b\x98\x25\ -\x8d\xa8\xd9\x95\x15\x6e\xdd\xcd\xcb\x5d\xe7\x07\xb6\x88\x9d\x46\ -\x89\x0d\xd6\x1b\xe5\xb4\xc5\xed\xf3\xe5\xb8\x83\xbe\xd4\x4c\xbd\ -\x9e\xf9\x93\xc1\x38\xea\x58\x36\x25\x53\xb8\xf5\xdf\xf6\x29\x70\ -\xe1\xfb\x02\x7a\x64\x2b\x11\x40\xe8\xed\xa0\x79\x75\x86\x32\x6f\ -\x61\x00\xc9\x65\x1d\x0b\xd5\xe3\xe2\xfc\x41\x01\xa6\x47\xc4\x7d\ -\x4c\xd9\x8e\x3e\x18\x25\x3f\x40\xc9\x26\xd1\x0d\x40\x0c\x40\x32\ -\xbe\x67\x7c\xa6\x22\xc7\x9b\x7e\xd1\x39\x6e\x9c\x6d\x8f\x61\xb2\ -\x09\x64\x38\x3d\xfa\x1e\xf4\x3f\xb6\xfe\xd5\xfa\x20\xe7\x1e\x37\ -\x2f\xa6\xb2\x77\x0f\x44\x09\x7a\x9c\xac\x76\x5f\x78\x07\x0e\x7b\ -\x8d\x2c\x83\xb9\x0c\x96\x78\xd1\xc0\x27\xc8\x60\x4e\x86\x2c\x83\ -\xcc\x01\xe7\xcf\xb3\x36\xdc\x5d\x19\x64\x37\xd3\xce\x29\xd0\x77\ -\x7d\x86\x3b\xa2\xde\x49\x5c\x00\x15\x01\x84\xf3\x72\xc7\x1f\x0f\ -\x68\x4e\xa4\x77\x09\x8a\xf3\xc3\xb1\xaf\x3d\xb1\xdc\xed\xfd\xe8\ -\x16\x7f\xac\x5b\x65\xd7\x7c\x67\x87\xb4\xd9\x28\x05\x42\x0b\x66\ -\x8b\xe0\xd4\xbe\x4a\x5f\x06\x20\x06\x20\x06\x20\xc3\x77\x1c\x34\ -\x34\x29\x99\x10\xb9\x5d\xfb\xed\x1d\x39\xdd\x30\x97\x16\x96\xbf\ -\x27\xc4\x30\x7a\x78\xa7\x58\x56\x39\x33\xd0\x98\x85\x99\x96\x93\ -\xbf\xde\xab\xc6\x6f\x45\x4d\x85\x9c\x9f\xf6\xbf\xa7\x32\xc4\x98\ -\x4a\x7a\x19\x94\x74\x78\x6f\x9c\x35\x65\xa4\x35\xc7\x97\x2a\x92\ -\x17\x90\xf9\x73\x7c\xec\xfe\xb0\x23\x83\x59\x20\xee\x93\xc8\xb0\ -\x52\x96\x31\xab\x74\x44\x92\xe7\x94\xd2\x00\x20\x68\xb5\x38\x79\ -\xa8\xbd\x15\xb5\x15\x81\x62\x9b\x0a\x00\x52\xb9\x6c\xae\x9a\xe7\ -\x87\xbf\xd2\x16\xca\x5d\x93\x4b\xce\x6c\x98\x97\x04\x89\x9d\xa7\ -\x4c\x9a\xea\xb3\xb6\x99\x3a\x5f\x5b\x5f\xb1\x5e\x54\xe0\xb5\x37\ -\x2d\x17\x20\x93\x41\xc1\x40\xb3\x0c\xc4\x00\xc4\x00\x24\x83\x00\ -\xc2\x03\xbc\xe9\xcf\xd6\x68\x82\x77\x54\xf5\xac\x86\x68\x07\x93\ -\xe1\x38\x4a\x27\x68\x5f\xcd\x59\x3a\x47\xcc\xa4\xc0\x14\x6b\x9d\ -\x90\xe5\x2c\xbe\x17\xce\x13\x47\x3e\xbf\xb1\x26\x2d\x3f\x3e\x92\ -\x61\x3e\xd1\x6c\x9f\x54\x90\x1e\xe6\xab\x5c\x5e\xe9\x36\xfe\xc9\ -\x6a\x51\x6b\x8f\xfb\xf3\x8b\x8c\x3a\x1b\x1f\x69\x56\x23\x73\x4e\ -\x79\x33\x2e\xf4\x22\xe3\xc8\x88\xdc\x79\x2a\x66\xbe\x61\x90\x93\ -\xbe\xdb\xd3\xdd\x61\xcd\x77\x70\x3f\x46\x50\x00\xdc\xe6\xad\xa9\ -\x52\x49\x8a\x12\x17\xd9\x47\x6f\x2d\xab\xa8\x7d\x06\x39\x80\xfe\ -\xc8\xc6\xe7\xac\xd1\x77\x61\x90\x14\x40\x69\x7a\xe1\x5a\x9d\x4f\ -\x80\x47\x8c\x2f\x03\x10\x03\x10\x03\x90\x0c\x49\x67\x7b\x87\x00\ -\xed\x52\xc3\x77\x89\x54\x7a\xae\x82\x07\x59\x07\xf4\x56\xb4\xb8\ -\x70\x3c\x97\x4f\x9a\xae\x86\xf0\xbe\x4f\x34\xeb\x9a\x1f\x3e\x35\ -\x31\xfb\x36\x5c\x1b\xd1\x8f\xbf\xbf\xcb\x55\x79\x67\x3f\x6d\xd2\ -\x10\xb4\x9c\x52\xa1\x97\x11\x1b\xcc\xfc\x2c\x9b\x3d\xdb\x2d\x6c\ -\xa9\x75\xed\x6f\x6c\x10\x60\x00\xca\xd7\x7a\x80\xda\xf9\xce\xcd\ -\xd2\x12\x63\x2a\xbf\x7b\x56\x42\x89\x28\x53\x59\x8f\x8e\xe5\xe2\ -\xa0\x35\x26\xba\xf8\x92\xb9\x2a\x45\xde\xfa\xfb\x7d\x6e\xe5\xd1\ -\x25\x6a\xb8\x97\xc4\xde\x49\x2a\x00\x48\x6d\x43\x28\xa3\x49\x20\ -\xb1\x0f\xea\x2e\x42\x97\x15\xd5\x15\xae\xe5\x95\xf5\xa2\x0b\x3f\ -\xf5\xff\x0e\xba\xe7\xb8\x6b\x44\x61\x86\x88\xc0\xfc\x07\x83\x8b\ -\x6a\xbc\x17\x97\x19\x80\x18\x80\x18\x80\x64\xca\x70\x12\xec\x4b\ -\x50\xe3\xfc\x54\x6e\x83\x07\x91\x71\x55\x32\x5c\x46\x83\x96\x48\ -\x14\x27\x84\xe0\x21\x0e\x50\x3d\x91\x09\xda\x5c\x07\x44\x60\xc6\ -\x51\xce\x62\x2f\x86\x32\x81\x54\xff\x8b\xae\x34\x89\xed\x1d\x26\ -\xe7\x87\xb2\x0d\xfd\x0a\x28\xac\x9d\x1f\xda\xa2\x49\x6c\x1c\x2d\ -\x59\xc6\x96\x17\xad\x73\x0b\x9a\x6a\xc4\xda\x0a\x3b\xe9\x83\x90\ -\xa1\x68\xb6\x99\xc8\x32\x92\x92\x13\xc0\xa0\x63\xb9\xa2\x58\x6a\ -\xb9\xc8\x8d\xa0\x35\xc6\xf7\x81\x25\x05\x3b\x8a\xbe\x47\x28\x89\ -\x95\xa7\xb3\xa5\xe9\x17\x14\xaa\x07\x42\x53\x5d\x7a\x5e\xfd\xd1\ -\x6f\xfd\xf1\x03\x7c\x00\x12\x20\x08\x68\xa0\x87\x55\xec\xbf\x07\ -\xa0\xcb\xfb\xab\xf1\x9e\x32\x00\x31\x00\x19\x0c\x80\xec\x36\x00\ -\x19\x8c\xf1\xd0\xd2\xb4\x84\xa5\x92\x8b\x7d\x04\xc0\x03\x21\xc3\ -\x1b\x7c\xf4\xcd\x44\x33\xac\xa4\xee\xcd\x64\x9c\x42\xc1\xe4\x62\ -\x0d\xcb\x01\x30\x13\x99\xa1\xc5\x40\x27\x3d\x91\xcd\xcf\x5d\x23\ -\x59\x92\xde\x8e\x1a\xca\xab\x86\xf9\xce\x9d\x25\xe7\x0b\x30\x50\ -\xce\xe1\x99\x40\xce\xe4\xda\x7f\xdc\x29\x45\x5a\x9c\x37\x11\x7b\ -\xcc\x32\x78\xde\x00\x9c\x54\x71\x66\x4a\x53\x00\x1c\xf3\x29\x51\ -\xf3\x0a\xc7\xce\xf3\x48\x93\xfc\x68\xb2\x65\x91\x9d\xe7\x94\x4d\ -\x09\x02\x26\x27\x7b\x3e\xe2\x20\x2b\x20\x41\xe6\xc3\x82\xa8\x55\ -\x57\x2f\x15\x35\x98\xcc\x43\x99\xd0\x40\xd9\x4d\x41\xd0\xda\xba\ -\x78\xd2\x14\x4d\xb5\x97\x55\xcc\x76\xe5\xde\xf8\x5e\x9a\xbe\x1f\ -\x7b\x31\x49\x03\x90\x71\x01\x20\x8f\xec\x52\x99\xc3\x00\xe4\x2c\ -\xec\x17\x58\x37\x97\x15\x8b\x2f\x4f\x79\x24\x17\x1b\xe6\x34\xc9\ -\xe9\x01\x2c\xdc\x52\x1b\xe4\x27\x7a\x33\x91\x92\x3a\x7a\xc3\x33\ -\x56\x05\x10\x9c\xe0\x14\x5f\x40\x92\xa8\x9d\x6b\x57\xe8\x23\xf2\ -\x58\x9a\xe2\x5e\x9f\xbb\x70\xae\x5b\x79\x78\x89\x22\x7a\x64\x4f\ -\x6e\xf9\xdd\x5e\x9d\xbf\xb6\xd7\x35\x88\x12\x8c\x73\xc6\xb1\x13\ -\x34\x68\x92\xbb\xb0\x34\x33\xec\x2d\x24\xf0\x2f\x2b\xea\xda\xd3\ -\x7e\x55\x4a\x59\x06\x6b\x77\x59\x0a\xa5\x0d\x95\x3f\xed\xd0\x24\ -\xfa\xe6\xe7\xad\x51\x46\xc0\xf1\x8a\xe9\x35\xad\x24\x7d\x4d\xa1\ -\x01\xc3\x02\x03\x38\x70\xf6\x00\x25\xc0\xb7\xff\xef\x5b\xf4\xba\ -\xa2\x19\xa9\x01\x9b\xf1\xbc\x86\xf7\xa4\x0f\x02\x50\xd2\x33\xe1\ -\xd8\x16\x6f\x5f\xa0\xf7\xcd\x81\x67\xce\x00\x24\xe7\x01\xe4\xab\ -\xdb\xc4\xb8\x60\xc8\xa9\xc7\xb0\x91\xd9\x19\xc6\x43\x35\xc7\xa7\ -\xf6\x44\xb6\x44\x85\x39\x27\x3f\x02\x0b\xe9\x57\x7b\xdc\x9a\xeb\ -\x97\xa9\x6c\xd5\x5f\xf3\x16\xa7\x45\xfd\x1c\x7d\xa8\x23\xa7\x27\ -\xf8\xa4\xfa\x57\xda\xa4\x25\xc5\x16\x46\x84\x06\x11\x84\x44\xfe\ -\x03\x79\x93\x9b\x9f\xd8\xe3\x9e\xea\x0e\x4a\x3e\x84\x68\x9f\x2d\ -\x7d\xc5\x89\x14\x7f\x5c\x02\x96\x89\x1e\x00\xe5\x2e\xfa\x0e\x94\ -\xbb\x34\xf3\x71\x49\xa1\x24\xf0\x59\x00\xd5\xfa\x9a\x0d\x92\x1c\ -\xb9\xed\xdf\xf7\x6b\x0e\x83\x8d\x91\x64\x3c\x6c\x10\x04\x34\xd2\ -\x12\xfb\x7d\xf5\xe3\x3c\x20\x22\xdf\xae\x26\xf8\xe7\x5b\x44\xea\ -\xa0\x6c\xb7\xf3\x1d\x5d\x2b\x6d\xfb\xed\xe5\xf9\xdf\x9d\xed\xb3\ -\xaa\xf6\x37\x34\xe8\x3e\x60\x9a\x7d\xfe\xa6\x6a\x65\xad\xd0\xd3\ -\x73\xc4\x17\x18\x80\x8c\x0b\x00\x79\x78\xa7\x5b\xd4\x36\x5f\xc2\ -\x71\x06\x14\xfd\xdb\xf4\xf3\x0b\xdd\xe2\x6d\x0b\x04\xb8\x9c\xb7\ -\x5c\x03\x10\x06\xc7\x90\xc2\x80\x96\x19\x19\x34\x44\xce\x44\xdd\ -\x94\x5f\xd4\xe0\xf5\xff\x36\xfd\x49\x85\x6e\xd9\x9e\x85\xee\xba\ -\xef\xf1\x3d\x26\x36\x80\xd0\xa7\xe2\xb9\xc0\x51\x36\xbd\x78\x9d\ -\x32\x0c\x18\x4a\x50\x7e\xe9\x65\xe1\xa8\x61\x59\x71\xce\xa0\xdb\ -\xaa\x34\x35\xd2\xf9\x91\xe2\x30\x6b\x11\xb3\x17\x35\xe2\x2b\xca\ -\xb5\x93\x9e\xf2\x27\x93\xe8\x38\xed\xb0\x6f\xa3\x5d\xd7\x8c\x8c\ -\x07\x4a\x30\xe5\x34\x40\x63\x66\x94\x4e\x1f\xe0\x38\x90\x46\xe1\ -\x3d\x71\xfe\x64\x93\x62\x85\xf9\x7b\x93\xf2\xe4\xd9\x00\x84\xac\ -\x07\x63\x46\x85\xd5\xca\x64\xd4\xcb\xf7\x2f\x96\x2e\x18\xc7\x28\ -\xf6\x9a\x01\x88\x01\xc8\xa0\x00\xe4\x21\x03\x90\xc1\x36\xd0\x57\ -\x1d\x5b\x2a\x47\x9d\x6b\x8e\x92\x52\x0d\x91\x27\xce\x8a\xfb\x01\ -\xa0\xc0\x19\xce\x5d\x34\x57\x9a\x4e\xe8\x75\x61\x38\xa9\xc9\xe7\ -\xcc\x14\xd7\x5f\xdf\xe3\xf4\xc4\x9f\x56\x8f\x8e\x95\xef\x8b\xc3\ -\x26\xe2\xc7\xc9\x22\x4d\x8f\x50\xa1\x40\xf6\xa2\xc2\x50\xaa\xba\ -\x62\x78\xa5\x2a\x94\x6c\xa3\x0c\x3b\xe7\xbf\x70\x5a\x4a\x65\xc4\ -\x2d\x77\xd7\x69\x58\x0f\xe6\xd6\x2d\x48\xa3\x7b\x47\xcd\x02\x28\ -\x1c\x3f\x52\xea\x38\xf1\x98\xf1\x0c\x95\xf2\x4b\x29\x8b\xde\x0e\ -\xfd\x12\x32\x0f\x9e\x7f\x3e\x67\x30\x00\x42\x09\x8b\x89\x7d\xb2\ -\x9b\xce\x0f\x6e\x11\xa0\x51\xea\xbb\xf6\xe1\x1d\xca\xd0\xa6\x9d\ -\x63\x00\x62\x00\x62\x00\x92\x39\x2b\x0e\xac\x9b\xc6\xe7\xaf\xd5\ -\x1c\x45\xae\x39\x49\x9c\x62\xc7\xfb\x9b\x44\x35\xed\x78\x6f\xa3\ -\xdb\xfd\xee\x46\xef\x48\x36\xa7\xfb\x22\xec\xc4\xe6\x27\xf5\xee\ -\x4b\x26\x4d\x71\xeb\x6f\x5f\xa9\x3a\x7b\x3e\xca\x9f\xc0\xd0\xd2\ -\xe6\xc4\x9f\x75\xaa\xf7\xc1\x3a\x5b\x86\xe8\xc8\x02\xd8\x22\x49\ -\xb6\x46\x26\x40\x06\x41\xe9\xa9\xa4\xbb\xc4\x48\x2a\x08\x19\x02\ -\x10\x7a\x5d\xb2\x52\x96\x2c\x86\xa5\x4b\xec\xbd\xdf\xf5\x77\x8d\ -\x7a\x0e\x29\x29\xb1\xac\x8b\xe9\x6e\x9c\xf2\xfc\x8d\xd5\x6a\x82\ -\x87\x52\x56\x90\x56\x2f\x1a\x09\xd3\x29\x99\x86\xe7\xbd\xc8\xa4\ -\x18\x6c\x45\x99\x77\x30\x25\xac\xb8\x00\x8d\xfe\x09\x2c\x2c\x80\ -\x4d\x4a\xc0\xbf\xdc\xa3\x45\x61\x06\x20\x06\x20\x06\x20\x99\x6c\ -\xa0\x17\x05\xf1\xb9\xd6\x57\xd5\xab\xa6\x9e\x53\xce\xf0\x81\xed\ -\x2a\xc9\x40\xcb\xa5\x1c\x49\x13\x96\x66\x2a\x54\x5e\x80\x85\x7b\ -\x82\x08\xf5\xe0\xe7\x5a\x5c\x89\x8f\x94\x89\x5a\xb7\xbc\xa4\x4e\ -\xff\x96\xef\x3a\x5a\xb1\x84\x4b\x50\x70\x22\xd9\xbb\xd1\xfe\xe6\ -\x8d\x6a\x68\x93\xb9\xc1\x4c\x22\x4a\xc7\xa1\x52\x56\x82\x5e\x1b\ -\xf7\xc7\x57\x2e\x9d\x2b\xd0\xa1\x09\xcf\xfb\x21\xc3\x7e\xe2\x47\ -\x41\x4f\x8a\x52\x10\x02\x87\x92\x62\x7f\x72\x50\xd5\x55\x66\x32\ -\x4c\xf9\x92\x81\xb2\x10\x28\xb9\x94\xbd\xc8\x68\x94\x49\x7c\x6a\ -\xab\xf6\x8a\x9c\x0d\x40\x30\x54\x15\x18\x7e\x84\xed\x25\xf9\x77\ -\x7f\xfc\xac\xb4\x35\x00\x31\x00\x31\x00\xc9\xa0\x45\x75\x54\xe6\ -\x02\x38\xcf\x39\xa3\x6f\x85\x9c\xf9\x67\x5a\x7c\xf4\xb8\x43\xc7\ -\x85\x13\x20\x02\x0d\x5b\x11\x3b\x95\x75\x40\xed\xc5\x41\x42\x03\ -\xa5\xb9\x0e\x55\x93\x99\x06\xfe\xcf\x04\x19\xdb\x7a\x2c\xc6\x22\ -\x33\xb9\xe1\x07\x81\x05\xa5\xd9\x8f\xcf\xb5\xaa\xe4\x44\xcf\x88\ -\xc9\x6d\x9e\x13\x76\xc8\x03\xd6\xf4\x30\x6e\xfb\xfd\x7e\xb1\x18\ -\xc9\xfe\x90\x2e\x81\x82\x0b\x05\x36\x52\x72\x55\x12\x2b\x2a\xcd\ -\xae\x26\x97\xbf\x2f\x01\xb9\x0b\x26\x5d\xa1\x19\x1f\x04\x14\x29\ -\x51\x09\x40\xa2\xe2\x70\xbf\xbd\x90\x30\xc3\xd2\xf9\x81\x26\xad\ -\x24\x30\x00\x31\x00\x31\x00\xc9\x06\x80\x4c\x29\xd1\x04\x3a\x8e\ -\xf7\xea\x07\x73\xc4\xf1\x9e\x6e\xd3\x03\x4f\xc9\xa1\x72\xf5\x5c\ -\x45\xd2\xac\x36\x65\xd8\x0d\x5e\xbf\xfa\x35\xfe\xff\x79\x8d\xa4\ -\x3d\x36\xd5\x08\x40\x98\x69\xa0\x5c\x81\xd0\x9f\x49\xd0\x0f\xcc\ -\x6a\x0b\x7b\xc3\x77\xbb\x9b\x9e\x08\x9b\x01\xd9\x54\x78\xfb\xff\ -\xdb\x1f\x36\x04\x7a\x20\x59\xbc\x6d\x7e\x88\xe4\x2f\x2e\x4a\xf7\ -\x50\x06\xab\xaa\x3b\x12\x1a\x30\xfd\x92\xb8\x2f\x84\x0c\x87\x81\ -\xc0\x65\x7b\x16\x69\x2f\x0a\x60\xc6\xbf\x21\x63\x42\x66\x42\xd6\ -\x53\xd6\x8f\x3a\xb1\x28\xc5\x4f\x29\x52\x16\x45\xe6\x6a\x00\x62\ -\x00\x62\x00\x92\x0d\x00\x49\x1e\x42\x18\x34\x63\x1d\xb9\xc3\x2c\ -\x22\xf3\x40\x0f\x89\x6b\x4e\xa9\x05\x09\x0a\x4a\x11\x4c\xc8\xd3\ -\xff\xc0\x71\x00\x16\x0c\xc7\xc1\xd0\xa1\x3e\x4e\x63\x5d\x7b\x2e\ -\x2e\x2e\x14\x6d\x3b\x6a\x46\x19\x88\xf4\x04\x65\x32\x0f\x96\x83\ -\xd1\x74\x8f\xeb\x7d\xd9\xbb\xb1\xfb\x5d\x8d\xae\xf9\x65\xeb\x25\ -\xc5\x0e\x41\x41\x59\xc6\x79\x41\x55\x37\x6b\x59\x46\x22\x67\x12\ -\xcb\x67\x53\x13\x86\x16\xeb\x6b\xd9\xe1\x51\xff\xb4\x95\x6e\xcf\ -\x87\xb7\xa8\x9f\x03\xb0\xdd\xf6\xfb\x7d\x6e\xdb\xdf\x34\x48\xaf\ -\x6b\xf1\x8e\x05\x92\x8e\x47\x55\x77\x46\x64\x75\xf5\x01\x20\xfc\ -\x1f\x93\xe8\x00\xa5\x01\x88\x01\x88\x01\x48\x96\x32\x90\xd9\x73\ -\x67\xcb\x91\xe4\x42\x06\xc2\x75\xc6\xf1\x03\x24\xac\xd3\x2d\xb8\ -\xac\x38\x2d\x53\xb2\xea\xe8\x92\x50\x72\x2b\x29\x4b\x2b\xb7\x32\ -\x24\x06\xdb\x28\x2a\xc1\x12\x9d\x2e\xdc\x5a\x1b\x1c\x24\x2b\x60\ -\xf3\x14\x44\x00\x63\x86\x69\xe9\x17\x01\xbe\x64\x65\x4c\x7d\xe3\ -\x84\xd1\x93\x42\x0e\x1d\x1d\x2c\xb2\x4f\x64\x45\xa2\xa8\x62\x7a\ -\x43\x61\x2a\xf3\x80\xa1\x99\x23\x7f\xad\xa6\x75\x9b\x47\xa1\x9f\ -\x52\x77\xeb\x0a\xb7\xe5\xee\x75\xca\x30\xd0\x33\xa3\xec\x04\x83\ -\x8a\xad\x86\x90\x22\x90\x23\x82\x2e\x4c\x6f\x86\x52\x1c\xd7\x16\ -\xc1\x45\x08\x02\xa2\xe5\xf6\x53\xca\xe2\xfb\x6c\x7a\xee\x1a\x95\ -\x39\x0d\x40\x0c\x40\x0c\x40\xb2\xb1\x2c\x68\x66\xa9\x1e\xe4\xed\ -\x6f\x09\x2b\x48\xc7\x52\xaa\x04\x66\x4f\x93\x8f\x2c\xe9\x69\xb0\ -\x77\x02\x69\x12\xa2\x54\x32\x24\x66\x3d\xc8\x30\xb4\x50\x29\x15\ -\x98\x36\x94\x57\x98\x19\x90\x34\x45\xaa\x4b\x9a\x9c\xd9\x07\x40\ -\xe4\xc4\xa3\x1d\x92\x3f\xc9\x27\x10\x61\x18\x94\x67\x85\xcd\x80\ -\x64\x62\x3b\xdf\xb6\x49\x0e\x1a\x27\x4c\x63\x9a\x28\x5f\x25\xa2\ -\x64\xa3\xa0\xe6\x6a\xe2\x66\xc3\x2c\x64\x19\x00\x3b\xf7\x57\xdc\ -\x48\x88\x16\x15\x5a\x5c\x88\x1a\xc2\xa4\x63\x5f\x47\xeb\xab\x37\ -\x48\x55\x99\x25\x55\xd0\xb3\x39\x26\xae\x77\x9c\x52\x87\xdd\x45\ -\x60\x30\x77\xd1\x1c\x65\xa7\x90\x2b\x34\x1b\xf4\x57\xeb\xb5\x4b\ -\xbd\xbf\x63\xe7\x77\x99\x89\x31\x00\x31\x00\x31\x00\xc9\x26\x8d\ -\xd7\x3b\x61\x86\xbe\xc6\x6a\x0e\x84\x8c\xe3\x3a\x1f\x29\x5f\xf3\ -\xad\x1d\xae\x70\x46\xca\xb5\xdd\xd3\xa0\x92\x0a\x4e\x67\xc8\x91\ -\x70\x02\x22\xca\x44\x9a\x6b\x95\x85\x50\xba\x99\x90\x32\xef\x7d\ -\x48\xbe\x03\x98\x94\x6c\x60\xd5\x2d\xd8\x52\xab\x88\x5f\xce\xfb\ -\xdc\xb0\x4e\x96\xd2\x4e\x49\x06\xc1\x42\x52\x2a\x53\x82\x74\x08\ -\xfd\x8b\xb2\x08\xf0\x65\xe5\xe9\x9d\xe4\xbc\x86\x4c\x11\xd0\x80\ -\xd1\xc5\x7a\x59\x48\x1b\x00\x09\xaf\xe5\x77\x63\xd9\x4c\xf4\x62\ -\xff\x7a\xcd\xac\x74\x3b\xce\xee\x1b\x09\x21\x54\x1c\xff\xa7\xa0\ -\x1a\x0c\x38\xf5\x27\xcd\x0e\x00\x41\xe5\x85\xd2\x7c\xe2\x27\x06\ -\x20\x06\x20\x06\x20\xd9\x11\x52\xf4\xce\x85\x85\x3b\x63\x01\x20\ -\x71\x59\x11\x9f\x8d\x52\x2c\x7b\x1b\x28\xb5\xb0\x83\x62\x58\x6b\ -\x47\x53\x41\x84\x8f\x5a\x7e\x64\xef\x00\x4c\x38\x9d\x89\x9b\x75\ -\x84\x92\x1f\x12\x26\x64\x6e\x0b\x1a\x6b\x74\xee\xe8\x2b\x8c\x74\ -\xd1\xd3\x40\xa5\x28\xcd\x7c\x3c\xb9\x50\x43\x9c\x0d\xcf\x5a\xad\ -\xfe\x53\x61\x02\x00\x2a\x51\xf9\x6b\xb0\xfe\x8e\x95\x7a\x16\xd9\ -\x30\x48\x29\x6d\xd3\x9f\xae\x51\x96\x11\xe5\x4f\xb8\x4e\x83\xd9\ -\x0c\xd8\x1b\x40\xae\xfe\x87\x76\x35\xfc\x59\x18\xd5\xdf\x72\x28\ -\xb2\x13\x64\x4c\xe8\x93\x51\xf6\x32\x00\x31\x00\x31\x00\xc9\xd2\ -\x24\x3a\x11\xe2\x68\xcf\x81\x00\x1e\xaa\xd1\x3f\xd6\xa9\xa6\xf8\ -\xa5\x1e\x3c\x70\x28\x34\x3e\xc9\x1e\x86\x24\x7c\x97\x0a\xb3\x03\ -\xb3\x92\x9e\x49\xd1\xcc\xe0\xbc\x18\x3a\x84\x71\x14\xa9\xc0\x39\ -\x27\xd5\x92\x81\xec\xed\x5a\x7f\x9f\xd3\x6c\xa6\x0c\x44\x04\x1f\ -\xa3\xfe\x7e\x25\xcf\x87\x33\x97\xe1\xdf\x0b\x30\xc2\xf1\xd3\xc3\ -\x60\x8e\xa4\xee\xb6\x15\x9a\xc1\x89\x92\x2a\xf3\x56\x56\xaa\x4c\ -\x45\xf6\xc7\x42\x28\xa6\xe3\x9f\xe9\x8e\xaa\x34\x49\x80\x42\x56\ -\x32\x39\x61\x57\x91\x5d\x0c\x05\xd8\x7a\x03\xc8\x91\xaf\x85\x9d\ -\xf1\x10\x2d\xae\xba\xa8\xef\x46\xba\x96\x50\xf9\x00\x82\xdf\xe1\ -\x18\x0c\x40\x0c\x40\x0c\x40\xb2\x71\x9e\x7d\xa4\xc6\xce\x6b\x4a\ -\x3d\xa3\xb2\x4b\xe3\x54\x68\xf2\x22\xb2\x47\x4d\xbb\xc6\x47\x89\ -\x12\xd6\xf3\x4e\x05\xc6\x55\xd3\x5f\xae\x1b\xbc\xe0\x5f\x5c\x38\ -\x74\x69\x58\x4e\x44\x74\xdb\xfa\xca\x7a\x0f\x4e\x6d\xaa\x7d\xe3\ -\x64\x60\xf3\x10\xad\x72\x4f\x5c\xf7\x48\xd7\x70\x1d\xf7\xd5\xd1\ -\xfb\xb7\x8d\xcf\x35\xb8\xa7\x92\xdd\x20\xfe\x7b\x90\x61\x21\xfb\ -\x21\xad\x29\xef\x34\x33\x29\x57\x2e\xe0\x98\x59\x1a\xde\xdb\x9f\ -\x63\x7a\x4b\x5b\x5f\x5e\xaf\xfe\x0a\x82\x8d\x64\x8b\x34\xc2\xf9\ -\x7f\xb2\x47\x5e\xbb\xf5\xe5\xeb\xdd\x53\xff\xf7\xa0\xb4\xa8\x28\ -\x8d\x72\x4d\xd2\xc7\x56\x3a\xbc\x06\x7d\x6f\x00\x21\xe3\x62\xf1\ -\xd9\x02\x1f\x68\x68\x00\xb2\xaf\x59\x90\xe9\x21\x33\xe1\xfa\xa3\ -\x48\x6c\x00\x62\x00\x62\x00\x92\x0d\x26\xd6\xf4\x50\x1b\xdf\xfb\ -\x91\xa0\x6d\x94\xed\x72\xcb\xb1\xaf\xb7\x6b\xfe\x80\xc9\x62\xca\ -\x1f\x17\x4d\x9a\x2c\xfd\x26\x18\x42\xd4\xe7\x29\x65\xc1\x0c\x52\ -\x04\x5d\x1c\x9a\xb0\x6a\xa2\x7b\xa0\x83\x9a\x49\x23\x98\x9f\x34\ -\xd5\x71\x4c\x64\x50\x73\x16\xce\x55\xdf\x04\x40\xda\xf5\xee\xcd\ -\xba\x6f\x98\x96\xa6\x26\x4f\x66\x42\xf3\x16\x70\x62\xbe\x61\xed\ -\x89\x65\x72\x6c\xd4\xe4\x71\x2e\xba\xb7\x4e\x8f\xbf\xe1\x40\xa2\ -\x6a\xd8\x73\x94\x71\x88\xfa\xd3\x4b\x98\x32\x05\x1c\x89\x82\x2f\ -\x64\x85\x45\xfe\xbc\x75\xbc\xa7\xd1\xdd\xf1\xc7\x03\xee\xe9\xee\ -\x90\x4a\x65\x64\x89\x71\xff\x38\x3f\x61\x75\x51\x8e\x84\x21\x45\ -\x46\xc2\x5c\x8e\x34\xb4\xfc\xf3\x17\xa5\xda\x51\x3e\xe0\x1a\xf7\ -\xb0\xa2\xb2\xae\xc1\xc0\xe4\xdf\xce\x06\x20\x87\x4f\x07\x86\x19\ -\x33\x22\xfd\x81\x42\x1a\x40\xfc\x7d\x7d\xab\x01\x88\x01\x88\x01\ -\x48\x16\x1b\xe9\x4f\x2a\x70\x5b\xff\xba\x3e\xe8\x48\x65\x31\x22\ -\x27\xc3\xc1\x01\x90\x65\x50\xa2\xe2\x1a\x53\x12\x41\xaa\x9d\x15\ -\xa4\xc8\x78\xb3\xa2\x16\x7a\xa9\x54\x5f\xcf\x0d\x6b\x5b\xd9\x87\ -\x8d\x2c\xf9\xf2\xbd\x8b\xe4\xb8\xd8\x48\x88\x46\x13\xbf\xc7\x9e\ -\x0b\x4a\x39\xad\xaf\xae\x77\x95\x8b\x43\x7d\x3d\x4e\x4b\x03\x3e\ -\x50\x53\x29\x9b\x30\x3f\xf2\x64\x0f\x56\x38\x3c\x6a\xf8\xd0\x80\ -\x3b\x3f\x10\x66\x0d\xb4\x85\xf1\xd4\x38\xe9\x77\xdc\xdf\xae\xe8\ -\x1e\x89\x74\xb4\xab\x70\x8a\x71\x7b\xdf\xc8\x81\x23\xdc\x0f\x6a\ -\x6a\x9f\x5f\xa0\x7e\x0a\x65\x40\xb2\x8d\xa7\xfe\xcf\x41\xed\xf2\ -\x80\xd1\x05\xa8\x70\x1e\x01\x70\x80\xb9\xfd\x0d\x1b\x03\xeb\xeb\ -\x1d\x9b\x35\xb5\xce\xff\x71\x1d\xc9\x6e\xe3\x60\x20\xd7\x44\xa2\ -\x98\x17\xf5\x61\xfe\x35\xda\x84\x78\x5e\x60\x86\xf5\xce\xa2\xce\ -\x00\x90\x53\x21\xc3\x5c\x77\xe3\xf2\x7e\x15\x76\xb5\xe7\xc6\x5f\ -\x67\x26\xee\xef\xf8\xe3\x7e\x03\x10\x03\x10\x03\x90\x6c\xf6\x41\ -\xc8\x02\xe8\x47\x64\xda\x91\x2a\xeb\xf0\x0f\x3d\x25\x2b\x06\xc2\ -\xe0\xe6\x5f\x92\x6c\x8b\xe3\x21\x07\x28\x36\x3d\x6f\x8d\x77\x52\ -\x87\x7c\xf6\xd0\xa8\xeb\x4e\x44\x8d\x90\x1e\x99\x02\x72\x26\x44\ -\xb6\xfb\x3e\xde\xec\xb6\xbe\x7a\xbd\x8e\x8f\xe8\x5b\xfb\xcf\xfd\ -\xfb\xc3\xe6\xd1\x2a\x54\x76\x77\x3f\xa5\x28\x1d\x41\xc3\x3a\x9a\ -\x9e\xac\x50\x45\xfe\x02\xd1\xbf\xba\x5b\x97\x2b\xf3\x81\x9d\x85\ -\x4a\x6b\xf3\x2b\xea\x5c\xfd\xd3\x56\xb9\x83\x5f\x68\x91\x63\xce\ -\x75\xb1\x44\xca\x8c\x64\x6f\x88\x5f\x72\x9e\x70\xc8\xa5\xe5\xe5\ -\x99\x69\x8e\xa7\x42\x39\x93\x7b\xa1\xb6\xa1\x5a\x59\x04\x12\xf1\ -\xc8\xaa\x77\xbc\xaf\x51\x00\x4e\xf6\x77\x89\x07\x07\xc4\x0a\xab\ -\x56\x55\x49\x5a\x86\xe7\x0c\xb1\x42\x66\x38\x36\xdc\xb5\xca\xad\ -\xbf\x7d\x85\x34\xc9\x28\x65\x41\xd1\xa5\x71\xbe\xec\xe0\x22\x57\ -\xff\xf4\x55\xfa\x3b\xf4\x5b\xb2\xc5\x68\xbc\x8e\x80\x82\xc5\x51\ -\x6c\x1d\x64\x87\x89\x24\x4b\xa6\xa7\xfa\x07\x10\x7f\x3e\x90\xb4\ -\x41\xa2\xbd\xbf\x85\x71\xdc\x5b\x2c\xb8\x62\x37\x09\x93\xf6\x06\ -\x20\x06\x20\x06\x20\x59\x32\x51\x30\x67\x97\xab\x29\x9a\xa9\x89\ -\x74\x1c\xde\xd1\xa4\x81\x79\xec\x9b\xed\xae\xcd\x3f\xc8\x0c\x7f\ -\x11\xf5\x13\xa9\xae\xbd\x71\x99\x9c\xdf\x15\x1e\x48\x76\xbc\x7d\ -\x53\x98\x92\xf6\x51\x25\x9b\xe3\xc8\x32\xf8\xfb\x9d\xff\x7d\x40\ -\x9b\x12\x71\x56\xa8\xc7\x4e\xbb\x60\x56\x90\x5e\xf1\xc7\x79\xfb\ -\x7f\xec\xd7\xde\x07\x4a\x2d\x44\xbc\xfc\x3f\x4e\x27\x30\x90\xc2\ -\x80\x19\xf7\x0f\x4e\x86\x46\x3a\xf4\x51\x40\x02\xfa\x27\x4e\x0e\ -\x50\x61\xed\x29\x0c\x22\xc0\x88\xc1\xbb\x5c\xee\x77\xc0\x54\xe3\ -\x38\x21\x3c\x84\x1d\xe7\xc5\x19\xe9\x77\x68\xcf\xb8\x7f\x2f\x36\ -\x3d\x52\x52\xe4\x7c\x91\x4d\x50\x8a\xe2\x19\xa2\xe4\x17\x33\x0e\ -\xb2\x38\x7a\x1a\x9b\x9f\xb7\x56\x20\x7c\xd3\xe3\x9d\x72\xe8\xf4\ -\x98\xc8\x2e\x51\xbf\x8d\x3d\xa6\xee\x76\x43\x62\x27\xfa\x30\x7e\ -\x07\xb5\x5d\x80\x6a\x9f\x07\x77\xfa\x2c\x62\x73\x15\x95\x0d\x08\ -\x20\xec\x74\xdf\xf1\xf6\xfe\xa9\xbc\x25\xfe\xdf\x20\x15\x20\x83\ -\xc2\xbd\x62\x00\x92\x87\x00\xb2\xb8\x75\xbe\xea\xf2\x06\x20\xd9\ -\x35\x6a\xd4\x38\xa5\xcd\x3e\xb2\x85\xab\x3f\xd2\xb9\x09\x86\xf7\ -\xa4\xa0\xeb\x1d\x04\xec\x20\xa6\xca\x19\xfa\x23\x5a\x9c\x5d\x55\ -\xa1\xe1\x36\xa6\xa1\xd9\x1e\x47\x64\xcb\x06\x41\x7a\x23\xca\x02\ -\xbc\xc3\xe4\x77\x99\x69\xe0\xef\x30\x7e\x28\x87\xe0\xf0\x4b\x4b\ -\x82\x6c\x38\x4e\x83\xc9\x65\x40\x01\xa7\xba\xfa\xf8\x32\x1d\x3f\ -\x0b\x8f\x90\xc2\xc0\x69\xd0\x30\xbf\xf5\x77\xfb\x74\x3c\x7c\x2f\ -\x98\x41\x34\x79\x01\x18\x32\x1c\xde\x73\xa3\x07\x0f\xb2\x2e\xb1\ -\xb3\x4e\xe5\x66\xd6\x01\xf8\x92\x09\xec\xf9\x48\xb3\xfa\x3a\x93\ -\x33\xd4\xef\xe0\xf7\x89\xd2\x79\x3f\xb2\x35\xce\xc5\x31\x7f\xbe\ -\x51\x3c\xe6\xbc\x31\x5c\x5a\x51\x33\x47\x99\x22\x5b\x0f\xc9\xf2\ -\xc8\x38\x00\x63\xb2\x20\x1c\xf9\x88\xee\x93\x04\x18\x39\xff\x0c\ -\x07\x72\x1f\xe0\xe0\x79\xee\xd3\xc3\xa1\x03\x00\xc8\xb5\x3e\xd0\ -\xd9\xff\xa9\x16\x05\x3e\x69\x35\xe0\x3e\x32\x90\xb6\xd7\x36\xa8\ -\x77\x63\x00\x92\x87\x00\x42\x24\x2a\x76\x90\x01\xc8\x28\x6c\x26\ -\x2c\x70\xf3\x1b\x6b\xe4\x78\x87\x7a\xbe\x7b\x53\x4b\x91\xce\x00\ -\xf8\xd1\x2b\xc2\x59\x5f\x15\xaf\x81\x76\x97\xcf\x94\xc6\x15\x80\ -\x40\xb9\x02\xe7\x08\x4f\x9f\x08\x9b\x89\x61\xca\x21\x71\x49\xd2\ -\xd1\xfb\xda\xb5\x26\x95\x86\x79\x3c\x4e\x32\x90\x8b\xfc\xef\xa3\ -\xdd\xc4\x6e\x0a\x9a\xa9\x38\x3c\x86\xd3\x70\x2e\xa8\xc9\x52\xa6\ -\xda\xf4\x9c\x35\xba\xfe\xf4\x42\x26\x27\x35\x78\xb2\x15\xea\xe2\ -\x44\xd2\x44\xd1\x31\x2b\xc9\xb9\x41\xc3\xd3\x81\xa6\xca\xb9\x20\ -\xd2\x87\x06\x1b\x67\x2f\x46\xdc\xef\x48\x75\xed\x81\xa1\xec\x47\ -\xc6\xb7\xef\x13\x5b\xf5\x59\xf4\x83\xc8\x0a\x58\x3f\xcb\xa6\x4a\ -\x32\x34\x9c\xf3\xfa\x3b\x56\x08\xe4\x39\x5f\x00\xda\x48\xcf\x97\ -\xa4\x56\x78\xbf\x5f\xed\x11\x93\xab\xcc\x5f\x53\x11\x01\x0a\xfa\ -\x06\xc6\xbe\x00\xe4\x6a\x7f\x7e\x0e\x7e\xae\xd5\x07\x21\x73\xba\ -\x96\x56\xf5\xea\xed\xe1\x43\x9a\xfe\xb2\xce\xdd\xf9\x3f\x07\x0d\ -\x40\xf2\x0d\x40\xa8\xef\x52\x8b\x85\x59\x33\x54\x7a\xa9\x01\xc8\ -\x30\xa6\x8a\xfd\xc3\x7b\x95\x3f\xe7\x34\x4d\x29\x43\x0c\xc7\x49\ -\x10\x51\x22\x89\x42\x06\x41\xe3\x1b\x47\x0d\xc3\x8b\xe6\x2c\x11\ -\x21\xa0\x41\x89\x02\x9d\xa3\x93\xbf\xde\xeb\x6e\xff\xc3\x7e\xfd\ -\x0e\x8d\x4e\x76\x55\xac\x3b\xb9\xdc\xad\xd8\xbf\x58\x43\x69\x38\ -\x35\xed\x42\xbf\x6e\x99\xa4\x37\xa2\x53\x80\xf2\xcb\x84\x31\x65\ -\x13\xca\x1f\x94\x9e\xd0\x4e\xe2\x3d\x70\x7c\xec\xbf\xe6\xde\x99\ -\x2c\xe0\x2a\x4c\x47\xeb\x44\xb5\x6a\xe4\x5e\x52\xe4\x1a\x5f\xb0\ -\x4e\xdf\x91\xac\x07\xf9\x8f\xb1\xda\x6b\xce\xb1\x8b\x58\xe0\x8f\ -\x23\x2a\x09\x03\xa6\x94\x90\x88\xd0\x9b\xee\x5e\xe7\xe6\xad\xaa\ -\xd4\x77\x49\x4f\x7a\x8f\xb0\xcf\x41\x39\x0a\x10\xa7\xc7\xc4\x39\ -\x03\xac\x39\x8f\x80\x37\xc7\x01\x2d\x97\xec\x0c\x83\xac\xc0\xe2\ -\x28\x40\x1e\xda\x6c\x26\x04\x2a\x39\xdf\x7c\x67\x4a\x9b\x94\x35\ -\xe9\x5b\x09\x18\x07\xf8\x6e\x7d\x01\xc8\xb1\x6f\x6e\xd7\xf9\xa3\ -\x89\x3f\xeb\xd2\xe2\x3e\xbf\x2f\xd9\x2a\x3d\x18\x48\x00\x06\x20\ -\x06\x20\x06\x20\xd9\x2c\x63\x95\x86\x07\x0e\x07\x8f\x33\x19\x6a\ -\x16\x12\xc1\x83\x9e\x15\xc2\x77\x94\x94\x4a\xbb\xed\xe1\x26\x13\ -\x98\xbb\x70\xae\x9c\x3d\xbd\x0b\x96\x16\xd5\xac\x9f\xa7\x92\x96\ -\x44\xf6\xce\x2b\x50\xa9\x84\xec\x62\x59\xe7\xa2\x20\x9c\xf7\xd3\ -\x0e\x01\x5a\xd8\x85\x1e\xf6\x40\x50\x6e\x61\x75\x2a\x7d\x0c\xee\ -\x0f\x32\x14\x0d\xb9\x9d\x13\xa6\xaf\x71\x90\x61\x90\xae\xac\x47\ -\x43\x5d\x3b\x43\xe6\xce\x16\x75\x97\x68\x9b\x7b\x24\xab\x99\xc7\ -\xe9\x70\x1f\xe2\x94\xb9\x87\xc9\x24\xae\x4f\x76\x72\xc8\x69\xfb\ -\xcc\x89\x6c\x0f\xe0\xe0\x35\x07\x3f\xdf\x22\x6a\x31\xd9\x06\xe5\ -\x36\xfa\x11\x53\x92\x85\x4d\xa5\x23\xd9\x67\x9e\xfc\x1e\x0d\x70\ -\xde\x0f\x7a\x2d\x8d\x6b\x40\x1e\xb0\xc2\x21\xdf\xfc\x8b\x4e\x89\ -\x18\xf2\x3a\xae\x81\x98\x71\x37\x2c\xd3\x0e\x11\x8e\x55\xe7\xe9\ -\x54\xa6\x58\x64\x61\xab\x21\x44\x00\x80\x11\x00\x39\x1b\x30\xf6\ -\x05\x20\x64\xa7\xc7\x1e\x68\x77\xd5\x75\xf3\x74\xcd\xfb\xcc\xaa\ -\xfd\x3d\xb5\xe9\xcf\xd6\x8a\xe1\x67\x00\x62\x00\x62\x00\x92\xed\ -\x2c\x24\x91\xa1\xd8\x76\xcf\x06\x49\x4f\x00\x0a\x43\x99\x2a\x27\ -\x72\xe6\x9a\xe1\x18\x52\xbd\x9d\x9e\x77\xfe\x38\x0a\x3e\x23\x48\ -\x78\xcf\x12\xeb\x07\xe7\x1e\x9b\xb8\xf4\x30\xd0\x71\xba\xf1\xf1\ -\xe0\xd8\xb4\x7d\xd0\x3b\xd7\xf2\xca\x2e\xc9\x0a\x32\x09\x1c\x4a\ -\xfc\x7d\x32\x12\xa9\xc8\x76\xff\xbc\xe2\x32\xbd\x17\xce\x49\x0d\ -\x67\x0f\x40\x2b\x8f\x2e\x71\xc7\xbc\xf3\xc2\x69\x66\xca\x21\xf6\ -\x98\xcd\xf0\x80\x41\x2d\x5f\x7b\xca\x7f\x12\x40\x82\x7b\x10\x87\ -\x49\xb6\xc4\x42\x24\xa8\xc6\x88\x45\x32\x25\xcf\xf0\x1f\xe5\xa3\ -\xf9\x1b\x6b\x94\x0d\x08\x48\x2f\x0b\x65\x2a\xfa\x34\x2a\xcb\x8c\ -\x10\x38\xc8\xf8\xc8\xba\x78\x4f\x00\x89\xb2\x1d\x25\x28\x9a\xdf\ -\x3c\x53\x80\x3d\xce\x9c\x3e\x15\x99\x19\x8d\x72\x9e\xbb\x16\x0f\ -\x30\x80\x2c\x43\x8a\x83\xbd\x07\x06\x93\x79\xc4\x19\x20\xe4\xda\ -\xe3\x75\x19\x0c\x11\xa0\x2f\x00\xe1\x7c\x93\x39\xad\x38\xb0\x58\ -\x81\x4f\x9f\x25\x2c\x7f\x7f\xa0\x3e\x6c\x25\xac\x7c\x05\x90\x0d\ -\x06\x20\xa3\x9b\x85\x94\xab\x36\x5e\xb9\xa4\x52\xd9\x04\x59\xc0\ -\x40\x8e\x56\xea\xaf\x5f\xd9\x26\xb0\xa1\x57\x45\x46\x41\x16\xd0\ -\xa7\x24\x78\x52\x7b\x17\x63\xa6\x38\x00\x41\x04\x2c\x32\x10\xd8\ -\x3e\x4c\x90\x53\xda\x20\x03\xe2\xf3\x61\x84\x41\x27\x25\xfb\x18\ -\xcc\x2e\x6c\xb1\xb0\xce\x4b\xa4\xc9\xa7\xa5\xd4\x04\x66\x31\x55\ -\xdc\x2d\x81\xc3\xcc\x94\x43\xe4\xbc\x00\x0e\xf4\x7a\x4e\x24\xea\ -\xb7\x00\x13\x91\x3c\xf4\xd4\x95\x87\x97\x48\xa2\x05\x70\xe0\x38\ -\xb4\xff\xe2\xd2\xb0\xff\x02\x80\x88\xc7\xc9\x7d\x0e\xd0\xe1\x4c\ -\x25\x22\x38\x42\x9d\x2a\xcd\xbd\x5c\x12\xca\x54\xb0\x90\xb8\x26\ -\xc8\xa5\xd3\x20\xe7\xdc\x02\x72\xa2\xc1\x3e\xd6\xa9\x7f\x63\xb6\ -\x06\xf0\x26\xf3\xa0\xbf\xb4\xeb\x5d\x8d\x7a\x1d\xcf\x5c\xa6\x32\ -\xb4\x74\xd9\xca\x5f\x83\x86\xbb\x56\x87\xc6\xfd\x94\x92\x41\xb3\ -\xc8\xfa\x04\x10\xcd\x82\xec\x76\xab\x8e\x2d\x09\xc2\x9b\x46\xe3\ -\x35\x00\xe9\x01\x20\x17\x17\xea\xe6\xbf\xfa\x81\xf6\x20\x39\x61\ -\x00\x32\x3a\x96\x30\xb2\x98\x8f\xa0\x07\xd1\x9f\x43\x00\xd8\x71\ -\x34\x38\x05\x9c\x0e\x11\x74\x7a\xa8\x6b\x10\x51\x33\x0e\x15\x50\ -\x58\x75\xcd\x52\xbd\x17\xb4\xd1\xdb\xff\xb8\x5f\x4e\x1e\x27\x8c\ -\xe3\x67\x0f\x04\x99\x04\x00\x32\x90\xe8\x5e\x69\x22\xf9\x4e\x04\ -\xbf\xfa\xf8\x52\xd7\xf2\xca\x7a\xb7\xeb\x9d\x9b\xe5\x70\x02\xfd\ -\x75\x67\xba\x79\x3b\xa2\x2c\xe3\x54\x9b\x22\x78\x00\x8e\xef\xcd\ -\x71\xef\xf9\xe8\x16\x95\x84\xc8\x28\x60\x95\xf1\xbd\x20\x0d\x68\ -\x18\xcf\xff\x14\x38\xf8\x6c\x82\xef\x3a\x6c\x80\x48\xc0\x17\xb0\ -\x01\x74\x78\xcf\x08\x14\x94\xb8\xe8\xf5\x28\x73\xf1\x0e\x92\x5e\ -\x16\x54\xdb\x35\xd7\x2d\x75\x9d\x1f\x6c\x52\x46\x44\xd6\x05\x70\ -\x48\xfe\xe4\x87\x61\x13\x21\xc0\xcc\x79\x03\x38\x98\xeb\x58\xb2\ -\x73\xa1\x66\x6e\x00\xc3\xee\x13\xef\x99\x2a\xe7\xc1\xee\xa3\xa7\ -\x33\x39\xd9\x26\x38\x14\x0a\x72\x9f\x00\xe2\x0d\x96\x1f\xf7\x29\ -\x60\xdc\x27\x80\xf8\xdf\x63\xf6\xc4\x00\xc4\x00\xc4\x00\x64\x14\ -\x01\x84\x07\x7c\x86\x1a\xea\x8d\x62\xe5\x10\x89\x2a\x1a\xf5\x8e\ -\x00\xe9\x75\xca\x1b\x9c\x67\x1c\x35\x3b\xb3\xb5\x9b\xa3\x0f\xfa\ -\x65\xbf\xa5\x32\xd6\x97\x5e\x51\xac\x99\x06\xde\x07\xc0\xa0\xd4\ -\x00\x2b\x4b\x42\x8a\x3e\x23\x21\x13\x02\xc8\x70\x6e\xe9\x99\x87\ -\x54\xdf\x59\x13\xef\xc5\x31\xb4\xbf\x71\xa3\x98\x42\x38\x4c\xfa\ -\x0b\x38\x7b\xc9\x94\x9c\x1a\x99\x6c\x08\xd9\x15\xbd\x0b\x32\x2d\ -\x9c\x18\x25\xbe\x86\x67\xae\x56\xc3\x5e\x80\xc1\x44\xfd\x39\x21\ -\x93\x4a\xef\xec\x4e\x65\x96\xe0\x40\xff\x06\xf2\x00\x3d\x2a\x36\ -\xf7\xc1\x58\xe2\xf3\xe7\x6f\xae\x71\x8b\x5a\x6a\x75\x2e\x69\x18\ -\x23\xdd\x41\xa9\x08\x20\x20\x8b\x8b\xf3\x2d\xf4\x33\x28\x57\xc1\ -\x56\x63\x17\x3a\xfd\x01\xb1\xac\x7c\xe6\x83\x63\xe7\xfb\x69\x93\ -\xe3\x17\x5b\x33\x4e\x45\xe6\x73\x59\x2f\x4b\x56\xa4\xcc\x63\x88\ -\x14\xe4\xfe\x00\x84\xe0\x00\xf1\xcd\x19\x7d\xec\x05\x31\x00\x31\ -\x00\x31\x00\x19\x23\x00\xc1\x59\xd3\x74\x26\xb2\x65\x62\x9b\x08\ -\x9e\x92\x07\x91\x77\xc7\x7b\x9a\xd4\xc0\xa6\xa6\x1e\xeb\xf5\x64\ -\x09\x67\x73\x0a\x64\x10\xf4\x3b\x82\xb4\x45\x58\x14\xa4\x7d\x12\ -\x1e\xac\xa8\xbd\x8b\x35\x75\x61\x61\xba\x2f\x82\xd3\x64\x42\x79\ -\xe3\x73\xd6\xa8\xb4\x02\xcd\x93\x0c\xa3\x77\xe4\xca\xc0\x19\x8e\ -\x81\xa6\x2c\x6c\xa1\x11\x03\x06\x59\x46\xd2\x7f\x01\x30\x58\x4c\ -\xc5\x94\x35\x8e\x8a\x05\x45\xe8\x6e\xc5\x89\x6d\x40\x96\x4c\xa0\ -\x24\xc3\x80\x71\x86\xae\x93\x07\x25\x1c\x2f\x1a\x54\xb7\xfe\x7e\ -\x9f\xee\x6f\xd1\x96\x3d\x50\x90\xb1\xa9\x8c\xf6\xe8\xee\x34\x08\ -\x1c\xfd\x7a\x98\xa7\x21\xeb\x50\x49\xd0\xff\x1f\x53\xde\x6b\x4f\ -\x2c\x17\x18\x03\x1c\x9c\x4f\x4a\x6c\x0c\xef\x11\x10\x64\x83\xce\ -\x0c\x6b\x0b\x05\x82\x03\x9f\x6d\x11\xc8\xcf\xbc\x78\x78\x62\x8f\ -\x03\x01\x08\x81\x87\x04\x15\x0d\x40\x0c\x40\x0c\x40\xc6\x96\x85\ -\xa5\x06\x77\xb2\x4b\x02\x91\x3e\xb6\xc4\xd1\x87\xa0\xec\x81\xd8\ -\x21\x3a\x48\x38\x71\xca\x10\xb3\x2e\x2b\x3a\x6b\xb9\x0a\xd0\xc0\ -\xc1\x02\x16\xb1\x4e\xbd\xa0\xa9\x56\x59\x4b\xf3\x4b\xeb\x24\x7d\ -\xc1\xe7\x22\xa3\xc2\xa0\x1a\xa0\xa5\xc6\xaa\xff\xb7\xe9\xfe\x77\ -\xa0\x99\x22\x09\x4e\xc9\x0c\xe7\xcd\xd0\x98\x80\xe4\xf2\x00\x24\ -\xea\xd9\x9c\x37\x4b\xbd\xb2\x38\x3b\x32\x92\xd2\x0b\x0e\x14\xa7\ -\x4b\xe6\xb2\xe3\x6f\x37\xa9\xb9\x0c\xad\x58\x7b\x53\x92\xc6\x3f\ -\x4e\xa9\xfb\x94\xf4\x68\x81\x7a\x94\xdd\x07\x24\xd4\xac\xf7\x40\ -\x21\x65\xda\xfb\x02\x15\x18\x5a\x70\x77\xe0\x93\xae\x99\xff\x4e\ -\x50\x65\x97\x21\x43\xf2\x94\xd0\x24\x67\x30\x90\x73\x4d\xd6\x81\ -\x73\x87\x3a\xac\xac\x23\x0b\x12\x36\x00\xdb\x71\x6f\x73\x16\xcc\ -\x09\x9a\x5d\xc3\xa4\x21\x1b\x80\x18\x80\x18\x80\xe4\x68\xb6\x21\ -\x45\xde\x64\xed\x28\xf5\x75\x98\x41\xbb\xdf\xb5\xd9\x9d\xfc\xd5\ -\x5e\x39\x21\x4a\x35\x55\xcb\x2b\xd3\x2b\x46\x43\xb6\x31\xf0\xfb\ -\xf1\x9a\x58\x82\xa2\xb1\x4d\x7f\x60\xf3\x9f\xaf\x55\xbf\x80\x9a\ -\x3c\x99\xcc\x1d\xff\x75\xc0\xed\x78\xdb\x26\x57\xbd\x6e\x9e\x32\ -\x07\x4a\x2d\x00\x4a\x49\x61\x59\xc8\x46\x68\xe6\x2f\x9e\x2b\xba\ -\x26\xa5\x18\xf5\x63\xbc\x93\xdb\x70\xd7\xea\x6e\x40\x12\x56\x9f\ -\x06\xe6\xd6\xc8\x27\xe8\x39\x36\xf4\xb8\xa0\xba\xd2\x80\xd5\x4a\ -\xd5\x73\x66\xf5\x39\xe9\x3c\xda\x06\x10\x43\x85\x26\x9a\xbf\xed\ -\x0f\xfb\x05\xea\x9c\x47\x7e\x8a\x12\xec\x0d\xea\xf5\xce\xb7\x6f\ -\xf2\xd7\x6c\x95\x9a\xcb\x04\x01\x9c\x4b\x32\x0e\xc9\x90\x2c\x9c\ -\x23\x2d\x32\x51\x77\x9f\xc8\x6c\xa3\xfc\x0c\x82\xc1\x7d\x61\xc9\ -\x15\x8a\xb9\x1c\xc3\x48\x26\xe7\x87\x0d\x20\x36\x89\x6e\x00\x62\ -\x00\x92\x1d\xe0\x90\x90\x61\x52\x8a\x21\xa2\xa6\xf9\xcc\x8e\x6a\ -\x04\x0f\x71\xe6\xeb\x4e\xae\x48\x3b\x6a\x5e\x77\xb6\x32\x0d\x35\ -\x79\xfa\x10\x61\xbd\x69\x89\xe4\xbd\xa1\xac\xd2\xdf\x50\xd3\xf9\ -\xe7\x9d\x41\x96\xe6\xab\x41\x3e\x9d\x3f\xb7\xbe\x6a\x83\xb2\x0f\ -\x86\xd4\x28\xc5\xdc\xf2\xbb\x7d\xee\xc0\xa7\x5b\x34\xc1\x3e\x55\ -\xfd\x8f\x19\xea\xc3\x88\xe1\xe4\xa3\x64\xb2\xa1\x5b\x7e\xb3\x57\ -\x6c\xad\xfa\xa7\xae\x74\x33\x3d\x80\x70\x8c\xb0\xc5\xd4\xef\x18\ -\xa1\xe3\x03\x30\x71\x48\x38\xdb\xb3\xb1\xbe\xc6\xe2\x9a\x91\x9d\ -\x51\x76\x5a\x7f\xdb\x0a\xb7\xfa\x9a\xa5\xba\x66\x00\xc5\xb2\xce\ -\x85\x3a\x67\x48\xc6\x90\x69\x30\x04\x18\x41\x83\xef\xc1\x73\xd0\ -\xf8\xc2\xb5\x3a\xf7\x4c\xea\xd3\xfc\xcf\x74\xaf\xa3\x77\xf6\x01\ -\xc9\x00\xe9\x93\x29\xc9\x66\xc4\x91\x94\xf8\x86\x05\x20\x45\xfe\ -\x7e\xbc\xa4\xd0\x6d\x7d\x45\xbd\xbb\xf3\xbf\x0c\x40\x0c\x40\x0c\ -\x40\x32\x32\xe7\x41\x0d\x3c\xce\x50\x54\xaf\xad\x52\xe3\x19\x3d\ -\x29\x1c\x33\x12\xe1\xb5\xf5\xf3\x34\x74\xa6\x32\xd5\x15\xc5\x03\ -\x36\xc6\x15\xe5\x25\x93\xc4\x94\xb6\x2a\xe6\xcf\x91\xc6\x15\xc3\ -\x82\x44\xf3\x34\x4f\xf9\xd9\x57\x5f\xe2\x6a\xef\x08\x3a\xde\xdb\ -\xe4\xda\xdf\xd4\x20\xd9\x0e\x69\x23\xdd\x1b\xb7\x14\x76\x68\xa8\ -\xae\xa8\x30\x64\x2f\x94\x59\x28\xd1\xa4\x55\x69\x99\x5f\xf8\xe5\ -\x9e\x44\x98\x71\x53\xa0\xa6\x66\xa0\x04\x03\xd0\xb1\x90\x4a\xc3\ -\x88\x45\xa5\x59\x07\x6f\x00\x61\x50\xd3\xe5\xc5\xa1\x91\x4e\x66\ -\x87\x13\xa4\x0c\x15\xca\x51\xd3\xa4\x8e\x1b\x65\xea\x35\x98\x77\ -\x69\xe8\x33\xd0\x6c\x47\xcd\x98\xa6\x3a\x19\x1c\x19\x47\x64\x62\ -\x65\x5b\xbf\x0b\xc0\x27\x53\xe2\xfe\xd1\xf1\x8c\x50\xb7\x6b\xc0\ -\x26\xfa\x2b\xfb\x6e\xa2\xc7\xbd\xe8\xcc\xbe\xd8\x20\xa1\x01\x88\ -\x01\xc8\x70\x00\x23\x99\xdc\xa6\xd9\xcb\xc3\x83\x63\x2c\xaf\x9c\ -\xed\x36\x3d\x67\xb5\xfa\x0a\x0c\xec\x11\x8d\xae\xbf\x6d\xa5\xca\ -\x1d\x9a\x51\xf0\x76\xc6\x2e\xed\xe2\xd0\xc8\x05\x7c\x00\x0c\x95\ -\xb3\xce\x0d\xfd\x80\x39\xb5\x73\x24\x21\x02\x6d\x96\x1e\x84\x18\ -\x50\xb0\x7f\xce\x32\xe9\x4d\x96\xc3\x42\xa4\xb8\x2d\x30\x4d\xb3\ -\x3d\x15\x4a\x49\xf4\x3e\x76\xfb\xec\x83\x49\x73\xd4\x77\x7b\xec\ -\x35\x3f\x15\xa2\xdc\x28\xba\x98\xa9\xc1\xc0\x6b\xff\x71\xa7\x1c\ -\x6e\x2a\x69\xf8\x67\xb4\xbf\xe4\x01\x69\x66\x32\x9f\x01\x78\x20\ -\xd7\xc2\xbe\x0d\x9a\xe3\x7d\xbe\xbe\x20\x99\x1b\xf1\xd7\x0d\xc6\ -\x14\xe7\x3e\xd2\x80\xe9\x61\x00\x10\x38\x55\xe6\x38\xd6\xde\xb4\ -\x5c\x52\x30\x6d\xaf\xdb\x20\x21\x49\x1a\xe3\xb0\xd0\x62\x53\x3d\ -\x5c\x8b\xd1\xd9\x57\x02\x63\x8d\xeb\x8f\x1a\x01\xbd\xaf\x4c\x28\ -\x06\x0f\x04\x20\x0d\x77\xad\x0a\x92\xee\xc5\x7d\x4f\xa2\x6f\x7e\ -\xae\x01\x88\x01\x88\x01\xc8\x20\xa8\xb1\x49\x9d\xfc\xf2\xe2\x34\ -\xd3\x49\xdb\xe0\x7c\x84\xcb\xf2\x24\x7a\x19\xd1\x59\x53\x9f\x8e\ -\xbb\xc7\xe3\x1e\x6d\x1e\xd2\xf4\x96\xc2\x69\x61\x0b\x20\xe7\x4e\ -\x0e\xec\xfc\x02\x01\x08\x20\x53\xb5\xac\x52\x8d\x70\x1e\x5c\x7a\ -\x18\x64\x06\xf4\x1f\xc8\x12\xe2\xb2\x9f\x41\x39\xf3\x53\x6d\xe9\ -\x63\xa1\x76\x4f\x56\x11\x26\xb8\x77\xab\x94\xb6\xd2\x3f\xf0\x48\ -\x7a\x30\xc1\x1d\xb6\xd0\x65\xdf\x01\x2a\x42\xf7\x4e\x70\xb6\xff\ -\x9e\xb3\xae\x2c\xc9\x08\x70\xd0\x03\xd2\xb5\xf0\xd7\x04\x06\x17\ -\x4b\xb0\x0e\x25\x6a\xc5\x31\xdb\x4b\xbf\xbe\x2c\xec\x1e\x57\xb3\ -\xde\xff\x3b\x25\x29\x64\x5b\x60\xa3\x01\x0c\x28\x10\x23\x3e\x88\ -\xec\x09\x20\x0b\x60\x93\x3d\x72\xfe\xd5\x0f\xe9\x36\x80\x39\xea\ -\x0a\xc3\xa7\x82\xbc\x08\x59\x27\x32\x35\x64\xb0\x99\x62\xa6\x0d\ -\x67\x90\xb0\x4b\xca\xc4\xb4\xb0\x0c\x40\x0c\x40\x92\xf5\x9f\xa5\ -\x02\x09\x4a\x1f\x94\x8c\x62\xcf\x21\x66\x17\x38\x20\x56\xc2\x32\ -\x2f\x40\xb3\x94\x0d\x72\x38\x19\x94\x4f\x29\x2d\xc0\xc5\x07\x4c\ -\x62\x19\x0b\x60\xe0\xcf\x58\x1a\x74\x7c\x74\x4c\xc9\x01\x91\x3a\ -\x22\x64\x34\x91\xa8\x65\xb3\xd2\x14\x99\x76\x1c\x7e\x94\xeb\x40\ -\x4a\x42\xbd\x87\x53\x23\xa3\xce\xf2\xbe\x00\x05\x12\xe2\xd4\xf3\ -\x27\x9f\x33\xc3\xcd\xf5\x11\xec\xc1\x7b\xc3\x1e\x8c\x61\xbf\x7f\ -\xa2\xfa\x0a\xdd\x75\x30\xaf\xc7\xf1\xee\xfb\x64\xb3\x2b\x9d\x3d\ -\xdb\x15\x0c\xb3\x71\x1e\xd9\x6c\x5c\x0f\x91\x08\xfc\xf5\x5a\xb0\ -\xa5\x56\x6c\x20\x40\xf2\x2e\x77\x44\xfd\x01\x88\x09\x51\x44\xb0\ -\xfb\x0a\x59\x80\x83\xec\x82\x41\xbf\xab\xbf\xb9\x5d\xa0\x40\x26\ -\xc1\xb9\x06\x74\x88\xf0\xe9\xf9\x90\xc1\xf1\xbd\xd2\x40\x71\x7a\ -\x6c\x77\x96\xf0\x13\xa2\x03\x25\xa3\xc9\x19\xe8\x7b\xf4\xf6\x05\ -\x4c\xf4\xd3\x47\x43\xb7\x4b\x82\x9d\x09\x19\x63\x61\xcb\x7c\x29\ -\x07\xf7\xa9\xe8\xed\xef\x6f\x84\x33\xd9\xd1\x6e\x00\x62\x00\x32\ -\x71\x01\xa4\x17\x38\xa4\xd7\x7c\x26\xcc\xa7\x38\x73\x40\xb9\x83\ -\x12\x14\x20\xc1\x7e\x6f\xfa\x03\x94\x8f\xb6\xdd\xd3\x20\x9e\xff\ -\xbe\x4f\x6e\xd5\xac\x00\xf5\x67\x9c\x2f\x19\x02\x5a\x41\xb3\xab\ -\x66\x2b\xd3\xe0\x7d\x70\x6a\xf1\x3d\xf9\x49\x66\x31\x67\xe1\x1c\ -\x01\x0b\xd3\xcb\x4c\x55\xb3\xfd\x4f\x5a\x49\xc9\x7c\x81\x74\x9d\ -\x1e\xd9\xa9\x72\x17\x11\x60\x2c\x39\x0d\x5b\x89\xd6\x3b\x3b\x66\ -\x15\xe8\x95\xd4\xdd\xbe\x42\xdf\x05\x47\x8a\xe3\x39\x7f\xd2\x15\ -\x6a\x0e\x9f\x4c\xa4\xcc\x87\xab\x00\x1b\x9b\xee\x37\xfa\x63\x67\ -\x96\x85\xec\xeb\x6c\x4e\x96\x61\x3b\xce\xe5\xac\x4b\x8b\x86\x36\ -\x35\x9e\xea\x8a\x94\xe9\x43\x70\xad\x38\xa7\xa8\x0b\x93\x31\x90\ -\x9d\x11\x05\x13\x9d\x6b\xf7\x7b\x51\xa8\xcf\x43\x00\x08\x19\x47\ -\x10\x4d\xac\xa9\xaf\x76\xed\x6f\xde\xa8\x99\x1b\x32\xb1\x74\xe6\ -\x95\xe3\xeb\x76\xc9\xda\x00\x0f\x96\x75\x69\x2d\xed\x95\x25\x19\ -\xdb\xcf\x1e\x19\x68\x0c\x52\x42\x2b\xe7\xfa\xd0\xab\xa3\xfc\xc9\ -\x79\x99\xbb\x64\xae\x82\xa9\xbe\x86\x55\x69\xa2\x93\x69\xdf\x61\ -\x4d\x74\x03\x90\x71\x0d\x20\xc5\x5d\x3a\x50\x44\xfb\x92\xa4\x38\ -\xbf\x20\xbd\x3d\x0f\xe7\x41\xc3\x91\x87\x04\x5a\x2b\x32\x1e\xc8\ -\x98\xc3\x34\x62\x19\x12\x43\x72\x38\x1e\xa2\x58\x40\x81\x06\x33\ -\x7f\x46\x9c\x0f\xad\x1f\x68\xac\x34\xaf\x71\xc4\x2c\x1d\x22\x0a\ -\x06\x88\x78\x6f\x18\x39\xb0\x99\x70\x6c\x7c\x66\xf9\x9c\x72\x31\ -\xa4\x56\xf8\xcf\xa0\x6e\xbe\xfb\x3d\x4d\x72\xe8\x2a\x21\xfd\x38\ -\x6c\x89\xe3\xcf\x99\x00\x8a\x01\x95\x6a\xbf\x12\xd8\x58\x5c\x5b\ -\x22\x6b\xbe\x17\x51\x26\xd3\xd4\x27\x7c\x64\xd9\x27\x53\xe8\xf4\ -\xe0\x86\xd7\x50\xb8\x65\x31\x12\x25\x8f\x65\x07\x16\xb9\x3a\xef\ -\xc8\xb9\x1f\xce\x0a\x20\xfe\xbb\xb7\xfc\xf5\x7a\xc9\xda\x07\x19\ -\xfa\x72\x65\x12\x34\x69\x35\x30\xe8\xff\x4d\x99\x60\x61\xd8\x7e\ -\xa8\x1e\x45\x32\x37\x43\xb9\x84\xba\x3f\x1a\x58\x64\x7a\x1c\x3f\ -\x59\x1a\xc7\x01\x18\xa2\x2a\x4c\x26\x42\x5f\x40\xe5\xc2\x44\x6e\ -\x5c\x19\x47\x73\xad\xdb\xe6\x33\x8e\x48\xcd\xe5\xdc\x1c\x1a\x07\ -\x3b\xda\x63\x2f\x0a\x60\xa4\xbc\x36\xf3\x29\xa1\x47\x96\x89\xbe\ -\x47\xef\x49\x7c\xe4\x59\x78\x46\x08\x80\x28\xb1\x22\x73\xc3\x30\ -\x6b\x5f\xbd\x8f\x20\x95\x93\x12\xfd\x9a\x79\x1e\xd6\x06\x18\x80\ -\x18\x80\x8c\x1b\x00\x51\x3f\xc2\x3b\x18\xbe\x03\xd2\xd8\x12\xce\ -\x3b\x3f\x6c\xd2\xa3\x0e\x8e\xee\x10\xd1\x29\xe9\x3e\x46\xb9\x02\ -\x50\x80\xc3\xdf\xfe\xa6\x8d\x5a\xe3\x2a\xc0\xf0\xe0\x40\x04\xc5\ -\xbe\x68\xe8\xae\x00\x04\xb5\x60\x1e\x50\xb2\x91\xee\x92\x1f\xb1\ -\x94\x15\xe5\x3f\xa6\x24\x2c\x2a\x1e\x3c\x1a\xb6\x88\x15\x22\x15\ -\x42\x7f\x41\x25\xa8\x38\xb9\x4c\x66\xf1\xcd\xf6\xb0\xf5\xf1\x74\ -\xa6\xc0\x21\x00\x04\xef\x49\xb9\x05\x87\x4e\xb3\x5b\xfb\x2e\x12\ -\x39\x73\x9c\x25\xe5\x18\x9a\xd6\x9b\x9e\xbf\xc6\x47\xdf\xf3\xf4\ -\xdd\x61\x83\x69\x3e\xa1\x1b\x78\x90\x4d\xc1\xd4\xa2\x8c\xd3\x5f\ -\xc3\x5c\x2b\x74\xef\x0f\x0b\xa5\xf8\x7d\x6a\xdf\x64\x35\xb0\x93\ -\x00\xa7\x1b\x7e\xb0\x6b\x70\x2c\x2c\x0f\xca\x68\x4c\xe1\xb4\x30\ -\xd4\x72\xc9\xf8\x00\x7f\x49\xb6\x78\x30\x11\x00\x78\xc7\x45\x99\ -\x8f\x4d\x7a\xec\x65\x27\x73\x8b\x7b\x2e\x34\x97\xe1\xbf\x2f\x51\ -\x39\xd9\x20\xc1\x40\x94\x3b\x51\x64\xfc\xe4\x70\x5f\xf0\xbe\xac\ -\x65\x8d\xe7\x84\xf3\x35\x2e\x80\x23\x82\x47\xb2\x9f\x9e\x2c\x8b\ -\xfb\x51\x59\x55\x79\x79\xe6\x7d\x81\xbf\x1e\xcb\x0f\x04\xa9\x16\ -\xb2\x54\x66\x85\xc8\xa8\x45\x2c\x28\xea\x9b\x5e\x2e\x00\x99\x96\ -\x12\x4b\xef\xb6\x3f\xec\x33\x00\x31\x00\xc9\x51\x00\x49\x75\xe9\ -\x47\x89\xc5\x94\xac\xe5\xe4\xc6\xc6\x41\x20\xfb\xd1\xfe\x86\x8d\ -\xa2\xac\xd2\xfc\xa4\x67\x00\xab\x88\xa6\x28\xcd\x51\x00\x84\x32\ -\x14\xd3\xd9\xf3\x56\x55\xa5\x85\x01\x67\x26\x42\x79\x51\xf6\x83\ -\x08\x57\x82\x81\x97\x87\x28\x2f\x32\xab\x62\x2f\x43\xb3\x1a\xde\ -\xe1\x31\x95\x4d\xaa\xcf\xc3\x46\xf4\x85\x23\xa7\xd1\x1a\x25\xc6\ -\xd3\x0d\xd6\x0c\xd6\xcc\x71\xdc\x61\x02\xba\x43\x51\x3c\x0c\x20\ -\x40\x0a\x80\x00\xb0\x90\xdd\x00\x24\xc9\x94\x68\x22\x03\x84\x38\ -\x66\x32\x25\xa8\xa8\xcc\x2c\x6c\x79\xd1\x3a\x45\xb2\x47\x7a\x95\ -\x6c\xb4\x67\xc4\xbf\xdf\x81\xcf\xb4\x28\xcb\x12\x30\x75\xcf\x8c\ -\x92\xd7\xaa\x27\xe3\x41\x82\x7e\x0d\xa2\x86\x80\x28\x74\xd7\xa5\ -\x1e\xac\x01\xab\x48\x03\x3e\x5b\x09\xab\xfd\xf5\xa1\x84\x55\x3c\ -\x83\x0c\xa3\x58\xbd\x19\x9a\xd4\xcc\xb3\x70\xfc\x00\x45\xdb\xeb\ -\x1a\xdc\xde\x8f\x36\xab\xf9\xdf\x7d\xc7\x47\xd8\xa2\xb8\x4d\x14\ -\x63\x32\xb8\xba\x5b\x56\xb8\x42\x1f\x48\xc8\xe9\xf9\x6b\x43\x56\ -\xc8\x71\x71\x9d\x09\x10\x00\x19\x01\xc7\x28\xb1\xa4\x32\xda\xf3\ -\x00\x3c\x9e\xe8\x54\x9f\xad\x60\x72\x71\xd6\xc0\x23\x96\x06\x29\ -\xef\x31\xd5\xce\xba\x00\x24\x76\x4a\x53\x67\xd7\x5b\x53\x09\xeb\ -\x15\x56\xc2\x32\x00\xc9\x41\x00\x11\xcd\x95\x9d\x03\xfe\x66\x16\ -\x0b\xc4\xff\x19\xa9\x0f\xca\x42\x44\xbc\x38\x4f\x22\x50\x9c\x0b\ -\xb5\x7e\x24\xb5\xd9\x03\xb1\xa8\x65\xbe\x7e\x97\x32\x49\xd4\x92\ -\x02\x78\x00\x04\x32\x06\x22\xab\xc8\x82\x82\x45\x15\x41\x49\x20\ -\xe1\x01\x85\xa8\x8b\x52\x17\x4e\x88\x86\x33\xd3\xdb\x9b\x9f\xb7\ -\xc6\x6d\x7d\xc5\x7a\x39\x6a\xd5\xfd\x1f\xeb\x90\x69\x9f\x06\xd9\ -\xc5\x57\xb6\x65\xdc\x79\xf0\xbe\x94\xbc\xf8\x7e\x92\xfe\xf0\x91\ -\x34\x51\x3f\x7d\x19\x04\xfe\xb8\x76\x48\x58\x70\x5e\xa8\x53\xc7\ -\xc6\x32\x00\x89\xa3\xa1\x5c\x85\x34\x07\x80\xb2\xe3\x2d\x9b\x04\ -\x3c\xbd\x55\x60\x35\xf3\x41\x1f\xc6\x67\x06\x94\x2b\xc8\x02\xf8\ -\x7e\x3d\xe4\xfd\x13\xda\x2f\x3d\x20\x00\x5b\x3d\x88\x64\x05\x2e\ -\xa0\xca\x9c\x8b\x04\x21\x07\x11\xd9\x73\x0c\xcd\x2f\x5d\xaf\x6b\ -\xc1\xcc\x05\xb5\xf5\xf6\x37\x36\x08\x18\xb5\xe3\xfd\x47\xa1\xc4\ -\x07\xd0\xc4\x32\x5f\xba\x47\x71\xba\x2d\xbd\x96\xb7\xf1\x2f\xd6\ -\x69\x97\x3b\x60\xc1\xb5\xe4\xbd\x28\x23\x72\x4c\x4c\xe4\x6b\x5d\ -\xed\x2f\xf6\x64\x6f\x12\x3c\xcb\xfd\x0e\x8e\xfb\xd6\xdf\xee\xf5\ -\xd1\xfd\xe6\xb4\x22\x70\xb6\xc0\x23\x02\x08\x74\x6e\x06\x4d\x91\ -\xb7\x99\xdc\x0f\xeb\xca\xa4\x4c\x0c\x40\x72\x1f\x40\x52\x41\x01\ -\x96\x07\x87\x1b\xb2\xc6\x47\xfc\x94\x98\xf8\x5c\xd8\x1e\x48\x92\ -\xe3\x58\x00\x8c\x15\x87\x16\xab\x27\x01\x10\xc4\x32\x53\x5a\x80\ -\xaf\x20\xc8\x99\xe3\xa4\xa6\x27\x20\x81\x83\x25\xed\x26\x7a\xa2\ -\x09\x4b\xb4\x85\x93\x65\x4b\x1d\x8e\x07\xfd\x28\x32\x17\x1a\xe5\ -\x69\xdd\xa3\xc7\x02\xf5\x15\xe7\x87\xb3\x95\x73\x3d\x95\xbd\xa8\ -\x13\xe7\x77\xe2\xa7\x61\xe1\x13\xa0\xc5\x77\x04\xcc\x00\x3f\xa4\ -\xc1\xa9\xe7\x33\xdc\xc5\x31\x93\x59\x31\x09\x4c\x99\x0a\xdb\xed\ -\xb3\x30\xa8\xb2\x38\x5f\xb2\x0a\x16\x1b\x45\xa0\x53\x04\x7e\xaa\ -\xe7\xde\x6c\x81\x94\xcf\x2c\x20\x02\x5c\x34\x69\xb2\xd8\x49\xfc\ -\x5e\x3a\x03\x49\x96\x0a\x01\xda\x38\xeb\xe8\x20\x42\xef\xa2\x50\ -\xe5\xbe\xd8\xf8\xef\x4e\x1d\x16\xa0\xf6\x71\x8e\xf8\x2c\xc4\x1b\ -\xa7\x3d\x29\xcc\xc2\x08\x40\x7c\xe6\x74\x7d\x7f\xe5\xaf\x53\x41\ -\xda\x1e\x00\x8b\xb2\xf6\x11\xc4\xc8\x12\x39\x16\x31\xab\x2e\x2b\ -\xf2\x0e\x6c\xa9\x4a\x71\x9a\x04\x1f\x85\x81\xbe\x6c\x0d\x09\x12\ -\x18\x69\xca\xfc\xee\xba\x74\x49\xaf\x34\x8b\xe0\xd1\x9d\xc6\xcb\ -\x1a\x5b\xee\x73\xb2\x57\x02\xaa\x01\x95\x11\x54\xc2\x2a\xb1\x12\ -\x96\x01\x48\xee\x00\x08\xbd\x07\x9c\xff\x14\xd5\x61\x4b\xd5\x53\ -\xb8\xfd\x3f\xf6\xbb\x67\xb8\xc3\xaa\xf3\xe3\x34\x63\xbd\x9c\xd7\ -\xc4\x65\x49\xf1\xf7\xc5\xb0\x4a\x6a\xe1\x94\xa8\x88\x4c\x01\x0a\ -\xe6\x1d\x28\x3b\xf1\x7e\x0c\xe4\xb1\x00\x09\xe7\x74\xad\x8f\xb6\ -\x71\x90\x11\x24\x88\x7e\x71\xb6\x38\x71\x58\x4c\xfd\x39\xc2\x4c\ -\x47\x9c\x9c\x4f\x95\x6a\x92\x15\xa8\x64\x52\xec\xff\x88\xfd\x17\ -\x01\x1f\x99\xd3\xd4\x92\x2e\xad\xa6\x1f\x75\x1d\xaf\xfa\x20\xfe\ -\xbb\x48\x29\xf6\xfe\xd0\x9c\x1f\x70\x4e\xe1\x54\xe8\xa1\xe0\x6c\ -\xeb\x4e\xae\x90\x24\x87\x48\x06\x95\x15\x6e\xff\xa7\xb6\xea\xbd\ -\x62\xd4\x4f\x79\x09\xf6\x59\x1c\x70\x2c\x4b\x68\xb1\x00\x0a\x19\ -\x11\x91\x3e\x4e\x9e\xef\x11\xd5\x6b\xfb\x2b\x17\x91\x41\xf0\x3b\ -\x7c\xaf\x08\x20\x44\xbc\x7c\xf7\xfe\x58\x5e\x94\xab\x60\x04\x2d\ -\xdd\xb5\x20\x48\xc3\x24\x4e\x2a\xca\xc4\x50\xae\xa3\xdc\xc5\x24\ -\x38\xe0\x97\x0d\xe1\xc2\xec\x67\x1d\x71\x71\x58\xd8\xad\x42\x50\ -\x03\x48\x72\x4d\xca\xb2\x0c\x1e\xdd\x01\x84\xeb\x7d\xdb\xbf\xed\ -\x53\xe9\x37\xbd\x32\xb9\x9f\xdf\xe1\xd8\xc8\x80\x25\x27\xef\xaf\ -\x91\x01\x88\x01\xc8\x98\x02\x08\xe0\x81\xa3\x24\x5b\x58\x75\x74\ -\x89\x9c\xe9\xd3\xdc\x21\xc9\x69\xb0\xc3\x3b\x44\x9b\x41\x90\x10\ -\x90\xd1\xc6\xbd\xe2\xb2\xae\x99\x0b\x7f\x1c\xa2\xe0\xd6\x57\xbb\ -\xba\x5b\x02\x1d\x91\xfa\xba\x76\x6c\x7c\x6f\x57\xba\xfc\xa1\xbd\ -\xe2\x3e\x93\x20\x4a\xa5\xc6\x3e\x98\xda\x7d\xb6\xb2\x0d\xa2\x77\ -\x4a\x54\x80\x23\x8e\x14\x27\x49\x54\x77\x99\x98\x5d\x57\xc9\x69\ -\x03\x1a\x7c\x5f\x4a\x79\x64\x4c\x80\xde\x91\xfb\xb6\x8d\xf8\xf3\ -\x11\xe2\x23\x93\xa1\xc4\x47\x56\x56\x38\x35\x25\xda\x2b\xd9\xd7\ -\x35\xdf\x0e\x5b\xf5\x20\x00\x50\x02\xe3\x3c\x12\x19\x6b\x85\xeb\ -\xf9\x85\xae\xe0\xf2\x20\xab\xa2\xd9\x0e\x0f\xb6\x87\x12\x71\x3f\ -\x1c\x38\x42\x83\x94\x5e\xb4\x6d\xb1\x37\x80\x78\xc0\x23\xd3\x23\ -\x63\xd4\x06\x41\x9f\x39\xd0\xab\xe8\x0e\x20\x6a\xd6\x27\xdb\xf5\ -\x38\x3f\x30\xe5\xe8\x97\x44\xcd\x27\x82\x04\xfe\x4c\xd9\x8e\x9e\ -\x89\xb2\xc3\x1f\xed\x4e\x3b\xe2\x71\x05\x1c\xc9\x7d\xa0\x20\xc6\ -\x03\xf5\xf6\xb7\x6e\x14\x29\x23\x7e\xd7\x4c\x52\x75\x07\x3b\x48\ -\x78\xed\xc3\x61\x4d\x30\xe0\x10\xb3\xbc\x3e\xa9\xbf\x28\x09\x78\ -\x80\x21\x18\xbb\xf5\x77\x7b\x0d\x40\x0c\x40\xc6\x08\x40\x92\x26\ -\x79\x10\x09\x2c\x76\x9d\xef\x6f\xd2\x30\x18\x91\x36\xef\x1f\x7b\ -\x19\x5a\x7a\xc4\x03\xd5\x0d\x34\xc8\x36\x00\x8d\xc5\xed\xf3\xb5\ -\xe6\x34\x96\x00\xb4\x02\xd5\x3b\x15\x4a\x1f\x19\xef\x51\x8c\xd0\ -\x61\x90\x21\x90\x29\x10\x5d\x43\x3d\xdd\xec\x23\x72\xca\x52\xa9\ -\x84\xbe\xaa\x21\x43\xef\x1c\x59\x66\x04\x0b\x89\x7e\x0c\x43\x70\ -\xe8\x31\x31\x81\x0c\x2b\x67\xc4\x5a\x4a\xfe\xdc\xc0\xec\x89\x64\ -\x82\x98\xf9\x91\xb1\x31\x6b\xa0\x06\xfd\x43\x61\xcb\x20\xc0\x45\ -\x39\x51\x6b\x75\xfd\x31\x13\x79\x72\x2c\x90\x13\xa0\xd0\x6a\x8e\ -\xe4\x54\xd8\x88\xb7\xf1\x4f\x56\x0b\x90\xc8\x08\x10\x70\x0c\x99\ -\x4e\x5b\xba\x71\x0f\x88\xd3\x4f\x8a\x19\x48\x77\x00\x89\x0b\xb5\ -\x22\x20\xc0\x90\x2b\x9f\x1b\xd4\x6e\xe9\x5b\xc5\x79\x0e\x00\x95\ -\x4c\x54\x9b\x00\x7d\xc4\xde\x9b\x51\x36\xa2\xf9\x99\xaf\x04\x20\ -\xe4\xda\xc8\x3c\x38\x62\xdc\x53\xc7\x92\x8c\x54\x6c\xba\x4c\x64\ -\x1c\xfe\x7d\x60\xae\x11\x28\x71\xaf\x53\xaa\x14\x41\xe4\x82\x82\ -\x91\xed\x6a\x1f\x21\x80\x70\x7f\xde\xe4\x83\x0b\x06\x5c\x07\x52\ -\xf9\xe5\x5e\xe5\x5e\x00\xf4\x6e\xff\x7f\x46\xe3\x35\x00\x19\x0b\ -\x00\x49\x85\x09\xf0\xc9\x49\x44\x49\xfd\x95\x92\x88\x1e\xa6\x28\ -\x6f\x4e\x24\x06\xad\x76\x6a\x49\x5a\x3e\x04\xd0\xa0\x59\x4e\xfd\ -\x9f\xe3\xa1\x86\x0e\x68\xa8\xf4\xf4\xb5\x6d\xb9\xc7\xa8\x39\x1d\ -\xa2\x79\xbe\x1b\x51\xf5\xce\xb7\x85\x5d\x18\xec\xe0\x20\x62\x27\ -\x5b\xa2\x7e\x9f\xde\xf0\xf7\xe5\x64\xba\xdb\xff\x19\xe7\x02\x43\ -\xa9\xfe\x99\x2b\xd5\x2f\xa0\x44\x34\x22\x2d\x25\x16\x24\x79\x87\ -\x48\xd3\x1c\x02\x41\x7a\xa6\xa0\x38\x6c\xfe\xa3\xef\x82\x03\xe7\ -\x58\xeb\x6e\x5b\x11\xb2\xbb\x27\x05\xa7\x76\xdb\xbf\xef\x93\x1c\ -\xfb\xcc\xc9\x45\x8a\x3c\xb9\x07\x70\xde\x64\x16\xe8\x43\x4d\x83\ -\x4a\xed\x23\xd3\x03\x9f\xd9\x1a\x14\x7c\xbf\xd1\xae\xec\x2a\x0e\ -\x19\x72\x8d\x1a\x00\x99\x27\x75\x03\x10\xff\xdd\xc9\x0a\x89\xc2\ -\xe9\xd9\xd0\xcb\x59\xd4\x3a\x5f\x60\x11\x23\xe0\xc8\xbc\xa3\x14\ -\x79\xf0\x73\x2d\xe9\xdd\xe3\xc3\x6e\x90\x77\xdb\x84\xa8\x41\x4e\ -\x18\x74\x3f\xe9\x48\x97\x2f\x19\x8c\xe4\xfb\x70\xee\xf7\x7f\xa6\ -\xc5\xed\xfd\x78\xb3\xae\x07\xe5\xa5\xb8\xa3\xfd\xc4\x4f\x3b\xd2\ -\x60\xa7\x60\xe5\xe1\x30\x08\x1a\x76\x87\x6c\x3b\xe3\xfa\xf3\xcc\ -\x70\xcc\xdc\xab\x80\x2d\xaf\x87\xfc\x01\xfd\x3b\xce\x14\x8d\x66\ -\xd6\xd1\xaf\x94\x49\xf2\x3d\x61\x7f\x91\x71\x16\xf7\xa3\x9a\x4c\ -\x10\xc7\x3d\x04\xe3\xf1\xe6\x5f\x59\x09\xcb\x00\x64\xb4\x01\x24\ -\x51\x4d\x25\xca\xa1\x89\xcb\xce\x0a\xca\x38\x25\x49\x7f\x83\x87\ -\x09\xc3\xc9\x45\x2d\x1e\x18\x48\x38\x38\x22\x38\xa2\x56\x1e\xe0\ -\x20\x3b\x91\x63\xd3\xc4\x49\x33\x19\x7a\x2f\xce\x0e\x27\xc5\x20\ -\x58\xdd\x1d\x2b\x5c\x6d\x7d\xb5\xdb\xf9\xf6\xcd\x72\xaa\x38\xd8\ -\x13\x49\x73\x9e\xeb\xc0\xc3\xcb\xcc\x48\xfc\x33\x80\x82\x43\x53\ -\xb4\xfd\xd3\x4e\xfd\x59\xce\x78\xb8\xc7\xf4\xb5\x6d\x72\x5e\x9c\ -\xef\x29\xbd\xb5\x94\xa0\x65\x5e\x54\x28\x60\xbb\xe5\xb7\xfb\xf4\ -\x39\x2a\x11\x26\x8a\xc1\x38\xb8\xaa\x95\x55\x72\xf6\x57\x7f\x3d\ -\x9c\x73\x1c\x38\x00\x01\x28\xa1\x2b\xa5\x88\xb5\xbc\xdc\x75\x7a\ -\x70\xc1\x19\xe3\xa0\x1b\x5f\xb8\x4e\x1b\x07\x89\x6c\xf9\xae\xcd\ -\xc8\x83\xfb\xcf\x89\x73\x1f\xbb\xdf\xd3\xe8\x9e\xe1\x33\x4e\xfa\ -\x2c\x04\x0e\x92\x8f\x49\x76\x70\xcf\x48\xb2\xcf\x70\xce\x36\xe9\ -\x1c\x70\x4e\x0f\x0d\x53\x7a\x05\xb0\xd3\xae\xf9\x9f\x75\x2a\x1b\ -\xd2\x26\xc4\x57\xd6\xbb\x86\x67\xaf\x96\x60\x22\x33\x27\x7c\x16\ -\x43\x74\xf4\x1e\xc8\xfe\x30\x9c\xfa\xbc\x35\x55\xba\xdf\x21\x1a\ -\xd0\x4f\x13\xf1\xc2\x67\x61\xf4\xd5\x60\x22\x51\xe6\x53\xdf\x86\ -\x99\x9c\x47\x82\x14\x8d\xd8\x7a\xe8\x68\xfd\x30\x00\x0c\xc7\xcc\ -\x3c\x12\x32\x38\xc8\xd8\xd0\xbf\xe3\xfb\x69\x87\x79\xe9\xd8\xf9\ -\x82\x33\xb4\xb0\x4e\x87\x99\x1d\x82\x34\x8e\xaf\xaf\x6c\xe8\xaa\ -\x0b\x0b\x94\x39\x47\x40\x35\x00\x31\x00\x19\x35\x00\x91\xa8\xdd\ -\xcc\x94\xbb\x7c\xd2\x55\xda\xbb\x70\xdd\x23\xbb\x34\x61\x4c\xdd\ -\x5f\x6b\x57\x2f\x0c\xd4\x5d\x1e\xac\x85\x5b\xe7\x8b\x6d\xc4\xc3\ -\x1e\x23\xc5\x9c\x04\x8d\x6e\x65\x2a\x40\x00\x4e\x3d\xd1\x3a\x35\ -\x7f\x7a\x38\x7c\x97\x38\x80\xc8\xbc\x05\x1c\x7f\x29\xdd\xde\xdb\ -\x3a\x6a\x0c\x1f\xfa\x1e\x48\x90\xf7\xb7\x43\x82\xa8\x7f\xed\x0d\ -\xcb\xa4\xd4\x4b\x23\x3f\x5d\xc2\xf0\xaf\xa3\x3f\x02\x0b\x0c\xa5\ -\x5a\x9c\x6f\x9c\x64\x07\x20\xe9\x53\xf0\xdd\xa8\x8b\x97\xf8\x4c\ -\x86\x6b\x85\xb4\x08\x40\xc5\x74\x38\xd9\x85\x9c\x52\xb2\x79\x11\ -\x87\xc5\xf5\x67\x18\x94\x3e\x06\x4e\xbc\x68\x5a\x4a\x9f\x17\xe6\ -\x39\x8a\xd5\xd8\x27\xc2\x65\x1f\x85\x26\xc8\x1f\x4d\x26\xc8\x87\ -\x9b\x75\x9c\x0e\xd7\x05\xd6\x10\xe7\x9f\xfb\x8d\xef\x45\x89\x8e\ -\x39\x20\x65\x5a\xe7\x85\x79\x9f\x48\x58\x20\x33\xc0\x44\xfb\xbe\ -\x24\x90\x08\x78\x7d\x94\xa9\xa1\x14\x07\xc8\x89\x96\xec\x8f\x1b\ -\x31\x4c\xfa\x54\x2c\x0d\x63\x90\x95\xfb\x76\xc3\xd3\x56\x4a\x90\ -\x10\x67\x0b\x63\x90\xac\x4b\xd2\x2a\x49\x1f\x68\xb4\xcb\x55\x83\ -\x02\x90\x53\x81\x3c\x01\x63\x4e\x00\xd2\xe7\xf0\x61\xa1\x54\x1d\ -\x78\x3d\x80\x6c\x00\x62\x00\x32\x2a\x00\x42\x84\x4a\xed\x94\x1b\ -\x93\x9b\x8e\xfa\xe9\x6e\xef\x68\xa9\xab\xe3\x40\x70\x42\x2c\xf5\ -\xa1\x7c\x42\x74\x7a\xfd\xf7\x77\xeb\x06\x55\xe9\x26\x17\x75\x8b\ -\x92\x3a\xbf\xa2\xcc\xa4\x39\xcf\x80\x21\x91\x6b\x64\x8a\xd1\x17\ -\xa0\x1c\xa0\xc6\xbf\xcf\xba\x98\x59\x40\xa4\x0e\xc7\xaa\xe9\xef\ -\xd1\xd8\x21\x01\x55\xd6\x1f\x2b\x8e\x31\xf6\x3d\x7a\x5f\x1b\x1c\ -\x00\xd2\xf3\x9a\x0b\xa9\xaa\x48\x4b\x82\xe8\x9a\xf9\x68\x99\xef\ -\xc1\x75\xb9\x31\x6a\x77\x01\xe4\xfe\x5e\xe0\x35\xbc\x56\x12\x18\ -\xfe\xb5\xd7\xf9\x8c\x89\xc8\x9c\x29\x75\x4a\x54\x6a\x72\xc3\x7a\ -\x7b\x28\x94\x6d\x70\xb6\x80\x07\xef\x0b\xa5\x9a\xa9\x71\xfe\xde\ -\x7d\x9e\x83\xa5\x4e\x64\x2d\xda\x27\x7e\xdf\xc8\x07\x01\xb9\x46\ -\xdc\x43\x9a\x43\xf1\x59\xce\x05\x93\xae\x08\x14\xd9\x91\xc8\x82\ -\x24\x1a\x6b\x51\xa9\x59\xa2\x99\x17\x25\x32\x3a\x93\xc2\x10\x6a\ -\x1c\x54\x05\x30\xb8\xef\x87\xa4\x01\x36\xca\x00\x72\xb4\x9b\x1a\ -\x2f\xcf\x37\x65\x3c\xad\x1a\x98\x9e\xea\xf3\x77\x28\x3b\x03\xea\ -\x04\x11\x06\x20\x06\x20\x59\x07\x10\x4d\x81\x43\x07\x95\x8a\xe7\ -\x5a\x77\xf2\x37\x7b\x54\xe6\xc0\xb9\xd0\x80\xdd\xf8\x9c\xd5\x12\ -\x72\xc3\x39\x01\x1a\x44\xe8\xa3\x41\xa5\x1d\xf6\xc0\xd7\xfd\xed\ -\xe9\x09\xf4\x2d\x3e\xb2\xef\x78\x6f\xa3\x58\x55\xd4\xd0\x91\x63\ -\xa7\x14\x02\x28\x12\xd1\xaa\x44\x91\x0a\x7b\xcc\x71\x38\x80\x0b\ -\x14\x63\x40\x91\x6c\x64\x44\x8a\xbb\x67\x01\x38\x22\x6f\x80\xaa\ -\x76\x63\xb5\xa2\xdf\xfe\x9c\x26\x7b\xd2\x39\x6e\xb4\xc1\x44\xe3\ -\xf4\xd9\x07\xd7\x8c\x08\x1b\x07\x08\xa0\x3f\xdd\x1d\x56\xa9\xa9\ -\xf9\x65\x75\x2a\x3d\x51\xfa\x99\x82\xea\x2d\x6a\x01\xd3\x4b\xd4\ -\xf8\xaf\xbb\x35\x50\x83\x61\xf2\x00\x1a\xda\xa5\x9e\x4c\xd4\x73\ -\xbf\x31\xe4\xc8\x7b\x72\x3e\xa2\x7e\x19\x9f\x47\xb4\xaf\x79\x8e\ -\x2f\xb4\xaa\x41\x4f\x39\x28\x93\xe0\xca\x35\xa3\x04\x47\x79\x90\ -\x63\x8c\x9f\x4b\xd6\x33\x16\xbd\x87\x5c\x06\x90\x70\xad\xb6\xab\ -\x6c\xa9\x6b\xd5\x3b\xd8\xf0\xc1\x04\xea\x0e\xdc\x57\x94\x26\x0d\ -\x40\x0c\x40\xb2\x0a\x20\x11\x3c\x90\x80\xde\xfe\xc6\xa0\xc9\x44\ -\xca\x4c\xf3\x18\x90\xb8\x21\xd1\x8e\x12\x68\x7c\x75\x5b\xce\x72\ -\xf9\x89\x84\x39\x5f\xe1\x58\x77\x89\xfd\xb5\x70\x4b\xad\x1c\x11\ -\xd3\xd1\x38\x3d\xfa\x33\xa2\xa1\x7e\x73\xbb\x1a\xe5\x44\xe6\x44\ -\xa1\xe9\x45\x52\x49\xd9\x62\x6a\x32\xef\xc2\x94\x37\x51\x1c\x0f\ -\x70\xc6\x27\xa7\xfd\x79\x44\x6c\xb0\x41\xc3\x80\x33\x06\xbc\x46\ -\x34\x4c\xe9\x65\x50\x3a\x8a\x19\x82\x98\x5a\x4f\x09\xbd\x0a\x4a\ -\x5b\x38\xde\x4b\x26\x4d\x51\x64\xba\xff\xef\x5b\x24\xed\xa2\x8d\ -\x75\xa9\xae\xf2\xe4\xac\xcb\x8a\x04\x20\xf4\x3f\xf8\x5e\xe9\xec\ -\x81\xd2\xc8\x63\x1d\x2a\xef\xc4\xda\x7f\x6c\x1e\xd3\x57\xa0\x81\ -\xce\x79\x3b\x1e\xe7\x39\xb2\x94\x8d\xc1\xb0\x42\xc5\x80\xbe\x0b\ -\xd2\xfc\x52\x63\xbe\xb8\x70\xc0\xed\x90\xf9\x06\x20\xa1\x8c\xd5\ -\xa1\x92\x66\x5f\x33\x21\x00\x08\x25\xba\xc8\x78\x34\x00\x31\x00\ -\xc9\x1a\x80\x48\xbd\xf6\xca\xb0\x5f\x83\x06\x32\x3b\x07\xc6\x83\ -\x8c\xf6\x19\xc0\x71\xdf\x36\x65\x1b\x34\x88\x51\x84\xe5\xa1\x8b\ -\x8a\xbf\x91\x10\x00\x53\x08\x27\x08\x38\xd2\xf4\xe6\xcf\x80\xe4\ -\xb2\xbd\x8b\xd2\xfb\x28\x22\x80\xe0\xa0\x55\x83\x3f\xaf\xc0\x6d\ -\xf5\x40\x44\xb9\x26\x93\x53\xd4\x91\xb2\x4b\x46\xa4\x7a\xfe\x95\ -\x25\x03\x3a\x48\x8e\x07\xa7\x8e\x01\x86\x34\xd0\x01\x3e\xc0\xe3\ -\x39\xee\x6a\x39\x0c\x7a\x1d\xa2\x70\x5e\x5e\x2c\xc7\x4f\xa9\x2e\ -\xad\xd8\x9a\xb0\xea\x18\x10\xe4\xdf\xc9\x24\x34\x94\xd8\x0d\xcc\ -\x60\x2f\xa1\x9f\x84\x46\x17\x25\x1d\x1c\xcf\x21\xff\xba\x9b\x7e\ -\xb1\x47\xe7\xb5\xb7\xdc\x4a\x36\x55\x6e\x29\x3b\x02\x68\xc8\xb1\ -\x94\xcf\x99\xad\xeb\x47\x19\x2d\xdf\xb2\x91\x3e\x01\x24\xd1\x2e\ -\x43\x42\x47\xa2\x8a\x05\xa5\x67\x00\x08\x03\x8f\x62\x40\x5a\x06\ -\x62\x00\x92\x35\x00\xe9\xc6\xb6\xa2\x4c\x75\xcb\xef\xf6\x8e\x8e\ -\x93\xc8\x60\xc4\x0a\x70\x90\x71\xe0\x70\x04\x1c\x3e\xad\xa7\xa4\ -\x43\x53\x15\x87\x19\xb3\x8a\xf8\x3d\x11\x5a\xbc\xf5\x77\xfb\xd2\ -\xc0\x83\x63\x84\x31\xd6\x76\x4f\x83\x1c\x95\x08\x02\x94\xb5\xca\ -\xca\xbb\xf5\x84\x66\x2a\xba\x57\xe9\xee\x91\x3e\x9a\xeb\x49\xaf\ -\x85\x72\x94\xa8\xca\xa7\xce\x0e\x78\x00\x18\x19\x1d\xce\x61\xfa\ -\x79\x83\x5f\x7f\x1a\x69\xd3\x7c\x17\x24\x63\x9e\xed\x8e\x89\x0c\ -\xa0\xe3\x9e\x1e\x1c\x2c\xdf\x99\xd7\x9c\x41\x3d\x4d\x05\x79\x11\ -\x32\x2f\xbe\x4b\xef\xe3\x3c\xe6\x01\x72\xcf\x47\x9a\xd5\xc8\x86\ -\x0a\x4c\xe6\x49\xc6\x91\xb5\x12\xde\x20\x54\x00\xc8\x92\x28\x6b\ -\xc1\xc2\x8a\xfb\xe7\x47\x63\x02\x3c\xd7\x01\x24\x10\x25\xda\xb4\ -\x41\x12\x10\xe9\xdd\x2f\x63\x9b\xe3\xf5\x3f\x34\x00\x31\x00\xc9\ -\x22\x80\xe0\x5c\xa6\x49\x72\x62\x41\x50\x54\xfd\x7a\xfb\xb8\x00\ -\x8f\x28\x0e\xa8\x8c\xe3\x07\x61\xb0\x6d\xfe\xc6\x6a\x39\x55\x26\ -\xc5\x35\xf4\xd7\xcb\x21\xf3\x5d\x61\x10\x45\x91\x41\xa2\xdb\x18\ -\xed\x2a\x7b\xf9\x49\x87\xf4\x86\xe8\x1b\x50\x16\x0a\xf2\xe3\x65\ -\x72\x56\x94\xb9\x78\x6f\x86\x22\x19\xc2\x23\xb2\xeb\x9e\x89\x70\ -\xce\xe1\xdc\xd3\x23\x42\x81\x57\x74\xda\x07\xb7\xf7\x4f\x69\xf5\ -\x19\x1e\x19\x0d\x6a\xc5\x93\xcf\x52\xba\xea\x0b\x3c\x00\x0b\x00\ -\x9f\xb2\x15\x0a\xb9\xb1\x47\x71\x36\x10\x8a\x72\xea\x00\x6d\x7a\ -\xdb\x61\x1f\x80\x1c\x07\x3d\x39\xce\xb1\x96\x58\x8f\xa2\x92\x00\ -\x09\x65\x34\x06\x39\x01\xf5\x7c\x07\x90\xa3\xdf\x08\xc1\x0a\x7d\ -\xad\x1e\x53\xe9\x12\x39\x2d\x70\x8d\xcf\x5f\xe7\x6e\xb4\x12\x96\ -\x01\x48\xd6\x00\xc4\x47\xa3\xd2\xaa\xf2\x3f\xe3\x5c\xc4\x78\x50\ -\x47\x95\x43\xf9\xc7\x1d\x1a\x6c\x63\x88\x6f\x51\x4b\xe8\x71\x50\ -\xfb\xd7\x4c\xc0\xaa\x2a\x95\x76\x28\xc9\xa5\x62\x06\xd2\xad\x0c\ -\xa4\x25\x49\xde\x89\x32\x80\x06\x75\x36\x4e\x6b\xc7\x41\x3e\x4a\ -\x78\xcc\x85\xf0\x3e\x2a\x6b\xf9\x07\x18\x9a\x2c\xce\x17\x67\x5f\ -\x51\x5d\xa1\x07\x97\x72\x4f\x3c\x5f\x51\x72\x05\xd9\x7a\x68\xaf\ -\xd0\x71\x99\x64\x8f\x7a\x58\x81\xe2\xda\x05\x1e\x64\x1e\x30\x8e\ -\xc8\x3c\x60\x08\x0d\xa6\xb6\xcf\x77\x03\xc8\xf8\xae\xf5\x4f\x5b\ -\xe5\x9e\xe5\xc1\x63\xc7\x5b\x37\x05\x25\x80\xc9\xc5\x83\xca\x60\ -\x98\x1a\x27\xcb\x42\x12\xe5\xda\x6f\xef\xe8\x97\x52\x3b\xa6\x2b\ -\x62\xfb\x50\xbf\x05\xec\x00\xf8\xc3\xfe\xef\xf3\x37\x55\x87\x6b\ -\x9b\xe7\x00\xc2\x3d\x75\xdc\xdf\x47\xec\xbb\x89\xb3\x39\x31\x48\ -\xa0\x14\xdb\xfa\xaa\x0d\x41\x3d\xd9\x03\x08\x74\x7c\x03\x10\x03\ -\x90\x8c\x02\x08\x8b\x69\xa6\x5f\xe0\xa3\xd1\xd7\x6d\x50\xd3\x72\ -\xb4\x66\x1e\x46\x5a\xae\x92\x14\xf8\xfd\xed\x62\x1b\x31\xab\x72\ -\xd1\xa4\x2b\xc3\x40\xdb\x86\x6a\xed\xcd\x20\x72\x5e\x7f\xc7\x0a\ -\xed\xc5\x88\x6b\x71\xc5\xe4\x49\x1c\x2c\x3f\xe9\x6d\xf0\x67\xed\ -\x75\xf8\x59\x67\xd7\x77\x3f\xd5\x55\x5f\xa6\x24\x06\x1b\xad\x78\ -\x66\x00\x0e\xa8\xbe\x00\x89\x76\x79\xfb\xf7\xd0\xd4\xf5\xe3\x3d\ -\x19\x5a\x92\x5b\xf7\xd7\x8b\x8c\x88\x1a\x34\x33\x06\xfc\x99\xb2\ -\xd7\xcd\x3e\x82\xa6\x89\x4f\xff\x85\xc1\x35\x66\x12\xa0\x47\xe3\ -\x20\xce\xe6\xfc\xe3\x12\x2d\x1a\xed\x0d\xcf\x5a\x2d\xf0\xd8\xfb\ -\x91\xe6\xf4\x82\xa7\xc1\x96\xbf\x34\x60\xb6\xa5\x56\xec\xab\x23\ -\xb9\xa6\x0a\xd0\xab\x07\x42\xa6\x77\x73\xb2\xda\x97\x65\x5b\x4c\ -\xc0\xc7\xed\x95\xa5\x56\xc2\x4a\x93\x1e\x98\x09\xea\x3d\x0f\xc2\ -\x7d\xcf\x20\xa5\x4a\xbb\x06\x20\x06\x20\x59\x01\x90\x02\xe4\x2a\ -\x8a\x5d\xd3\x5f\xd6\xb9\x5b\xff\x75\x5f\xce\xcb\x6c\x5f\xed\x1f\ -\x1e\x1a\xde\xb1\xc4\xc4\xba\x5a\x58\x49\x38\x6a\xa2\x2d\x1c\x0d\ -\x91\x3d\xdf\x23\x0e\xd3\x91\x09\x28\x62\x7d\x72\x61\x5a\x45\x38\ -\xf6\x36\xa2\x14\x0b\x92\x18\x0c\x66\x75\x07\x50\xa9\xd7\xfa\xcf\ -\x63\x32\xfc\xe0\xe7\x5a\xdd\x8a\x03\x8b\xfc\x7b\x84\xb2\x16\xbf\ -\xcb\x03\x8a\x43\x27\x53\x01\xd0\xba\x8b\x30\x86\x0c\x23\xc8\x6e\ -\x40\xb9\xad\xae\xab\x72\x15\x0b\xe7\xb8\xba\xdb\x97\x87\xe1\x3e\ -\xff\x9e\x80\x16\x0e\x81\x87\x9c\x01\x37\x58\x51\xd2\x13\xeb\x03\ -\x08\xca\x12\xb6\x15\x20\x46\xa3\x1c\x7a\x2e\xef\x43\xc9\x8a\xef\ -\x35\x94\x59\x89\x69\xe7\x85\x72\x25\x8a\xc1\x71\x0a\x9f\xfe\x42\ -\x4e\x64\x9e\x89\xe8\x63\x94\x6a\xe1\xba\x30\x15\x4e\x60\x30\xbd\ -\xbb\x74\x4e\xa9\xb1\xb0\xba\x4b\xf0\xb3\x44\x2c\x06\x44\x69\x00\ -\xf1\x19\x09\xbd\x3e\x00\xc6\x00\xc4\x00\x24\x6b\x25\xac\xa2\x99\ -\x29\xa5\xbb\x0c\xa0\x49\x37\xc8\x47\xdd\x39\x29\xb9\xed\x9d\x32\ -\xd1\x3b\xdb\x0d\x17\x6d\x9f\xef\xea\x9f\xb6\x52\xce\x5b\xbb\xb7\ -\x29\x6f\x78\x47\x98\x5e\x50\x94\x1c\xbb\x80\x24\x99\x03\x61\x60\ -\x0e\x99\x0b\x4d\x32\x4f\x0b\xbd\x02\x1c\xf3\xd4\x64\x48\x8e\xdf\ -\xeb\x0d\x22\x31\x12\x26\x5b\x20\x43\x63\x00\xb1\x6a\x79\x65\x10\ -\x10\x4c\x9c\x37\xe7\x6e\xfb\x5b\x37\xf5\x04\x91\x6e\x4d\x75\x3e\ -\x9f\x6b\xc1\xc3\x5c\x52\x1a\x22\x43\xa6\xbf\x29\x73\x91\x95\x3c\ -\xcb\x1d\x53\xc9\x8c\x69\x71\xae\x09\xba\x63\x51\xcd\x38\x96\xdc\ -\xb8\x86\x00\x26\xeb\x7d\x51\x40\xc6\x89\x90\x15\x51\xa6\x1b\x54\ -\x24\x5e\xdc\xb3\x84\xc5\xee\x72\xae\x37\xfd\x17\x76\xac\xd0\xab\ -\xc1\xd1\x04\xf9\x93\xd1\xbf\xb6\xda\x6c\xf8\xfd\x20\x2b\xc3\xdc\ -\x11\x65\x39\xc4\x02\x29\xd9\x71\xae\xc3\x86\xcb\xfc\x03\x8e\xc1\ -\x00\x08\xcf\x2c\xf7\x85\xd6\x10\x17\xf5\xec\x73\x41\x61\x3f\xf1\ -\xa8\x01\x88\x01\x48\x36\x9b\xe8\x28\xbd\x4e\x0f\x72\xdc\xd5\x6b\ -\xab\x34\xdd\x7a\xf2\x37\x7b\xc5\x26\xca\xb5\x6c\x84\xe3\xe1\xbb\ -\xc5\x7a\x38\xec\x20\x9d\x9b\x81\x28\xc7\xc9\x6e\x0d\x5e\xcf\xf7\ -\x62\x83\x61\xf7\x86\x33\x25\x29\x49\xd0\xfb\x73\x40\xf3\x3b\xee\ -\xcf\xe8\xf1\x7e\xc9\x9f\x69\x48\xe2\xf4\x61\x3c\x31\xad\xcd\xfb\ -\x10\xe9\x61\x6d\xaf\x6d\x38\x13\x44\x22\x93\xe8\x6b\x81\x49\x04\ -\x10\xa1\x65\x05\x67\x9f\x29\x70\x74\xc5\xd8\x0f\x0f\x98\xf0\xbb\ -\xfc\x3f\xe2\x8d\x9a\xf3\x98\x91\x4a\x33\xa6\x68\x9a\x33\x8b\x42\ -\xe6\xc1\x75\x8d\xc0\x77\x36\x26\x92\xca\x5e\xc9\x76\xc7\xc8\xc4\ -\xe2\xfb\xc6\x9d\x2e\x71\x0a\x9b\x81\x42\x26\xd3\xc9\xb6\xa2\x04\ -\x4a\xb6\x83\x01\x01\x7f\x22\x7d\x43\xdf\x89\x2d\x96\x6b\xae\x5b\ -\x2a\xf9\x0d\x40\x59\xd7\x28\x2a\x3c\xe7\xe9\x00\xe1\x60\x00\xe4\ -\xfa\xef\xed\x72\xdb\xdf\xb2\x49\xd9\x30\x41\x45\xef\x7d\xe8\x90\ -\x39\x0c\x40\x0c\x40\xb2\x3b\x07\x92\x34\x70\xa3\xbe\x15\x1a\x3b\ -\x52\xa7\xf5\x0e\x05\xc1\xc0\x9c\xda\xe3\x70\x7a\xf8\xcd\x58\x95\ -\xa4\x7e\xb9\x47\xec\xa5\x48\x07\x8d\x2b\x66\x35\x30\xe7\xb3\x31\ -\x1a\xeb\xa2\xb7\xf6\x41\x65\xc6\xb1\x72\x3e\x58\xf4\x44\x79\x05\ -\x66\x0b\xef\x71\x89\x07\x03\x32\x87\x9d\x6f\xdb\xdc\x37\x00\xc5\ -\xfe\x8d\xa4\xb8\x3b\xf5\xd0\xd3\x77\x82\x3d\xc3\xef\x5e\x38\xe9\ -\x4a\x01\x18\xfd\x12\x68\xb9\x64\x4a\x5c\x7f\xca\x5a\x73\x17\xce\ -\xd5\x9c\x08\x99\x47\x14\x45\x9c\x92\xf4\x60\xce\x06\x1e\x33\x9f\ -\x52\x2c\xc0\xd0\xb0\x24\xda\x51\xcc\xfa\x48\x00\x31\x00\x28\x93\ -\xf8\x61\x66\xa0\x40\xff\xc6\x9e\x17\x00\x92\x2c\x20\x23\x20\x72\ -\xba\x6b\x62\x9a\x63\xd7\x52\xb0\x44\x55\x97\xff\x6f\xf2\xdf\x95\ -\x69\xe9\x9a\xfa\x79\xea\x6b\x68\x1d\xaf\x3f\x3e\x95\x19\x53\x65\ -\x79\x0f\x1c\x83\x02\x10\x7f\x2e\xe9\x0f\x71\x3d\xa5\xdd\x95\x94\ -\xa6\xc9\x34\x11\x86\xe4\xff\x0d\x40\x0c\x40\x46\x4d\xca\x84\x07\ -\x19\x20\xa9\x5c\x5e\xa9\xda\x6a\x2c\x6f\x50\xcf\x1f\x4f\xf3\x21\ -\xfd\xcd\x5e\x1c\xbb\x3f\x88\xcb\x49\x34\x90\xc9\xfb\x0b\x0a\xd3\ -\x20\xc2\x9f\x89\x7e\x29\xa1\x20\xd5\x71\xe4\x6b\x7d\x68\x3c\x9d\ -\x0a\x60\x40\xaf\x05\x06\x17\xb4\x5d\x7a\x30\x34\xb7\x11\x33\xe4\ -\xef\x6a\xca\xf7\xd3\x53\xe8\x4e\x19\xa6\x6c\x13\x22\xef\x65\x2a\ -\x33\x91\x95\x5c\x3c\x69\x8a\x86\x01\x71\xf6\x75\xb7\xac\x50\xd9\ -\xee\x8e\x3f\x1e\x90\x13\x0e\x8a\xba\x33\xcf\x1a\x95\x6b\x30\xd4\ -\x3b\x10\xca\x1a\xec\x15\x81\xb2\x1b\x27\xf1\x91\x29\x61\xeb\x20\ -\x8e\x5b\x43\x93\x3d\xc4\x33\xa7\xbb\xe5\x07\x16\xcb\xe1\x1c\x1b\ -\x88\xce\x7d\x3a\x28\x07\x6b\x3f\xc5\x7d\x41\x06\x1d\xe3\x58\xc9\ -\xa2\x4e\x24\xaa\x05\x7a\x9f\x6f\x86\xfe\xca\xbe\x4f\x6c\xd5\xfd\ -\x04\x48\x32\xcc\x49\xdf\x27\x2a\x39\x4b\xec\x70\x56\xa9\x65\x1b\ -\x99\x02\x10\x4a\x58\xde\x7f\x6c\x7d\x59\xbd\x95\xb0\x0c\x40\x46\ -\x59\x4c\x31\x99\xc2\xe6\xf7\x88\xca\x79\xd0\x9b\x5e\xb8\x2e\xa1\ -\x52\x86\x35\xad\x38\x8b\xb1\x18\x2c\xcb\xd8\x7a\x52\x7f\x7e\x90\ -\x6a\x41\x82\x9c\xe9\x6f\xb1\xaa\x4a\x43\xb3\x5a\xea\xad\xc8\xa6\ -\xfb\xe8\x58\x93\xe7\xcc\x72\xf4\xc1\x4e\x8b\xc0\xc2\xa0\x1d\xe5\ -\x29\x44\x08\x2b\x57\x55\x6a\xe7\x06\x7b\xdb\x15\x65\x9f\x3a\xfb\ -\x71\xd0\x73\x8a\x19\x8f\x66\x59\x36\xd7\xb8\x05\x5b\x6a\x34\xef\ -\x40\xa9\x8e\x6c\x87\x8c\x00\xa5\x58\xa9\xef\x26\x99\x07\x0e\xa3\ -\xaf\x48\x3d\x96\xad\x60\xa7\xd1\x80\x06\x7c\x28\x7f\x01\x54\x48\ -\x83\xdc\xf8\x58\xa7\xbb\xe5\x77\xfb\xb4\x57\x5b\x12\x27\xdd\x07\ -\x4a\x7d\xe4\x4a\xd6\x03\xcb\x0b\x79\x95\xee\x20\x18\x17\x4a\x69\ -\x55\xaf\xbf\x0f\xe2\xde\x12\x4a\x51\xb1\x57\xc4\x1c\x0c\xb2\xe9\ -\x94\xe4\xc8\xf2\x96\xef\x5f\xac\xc5\x5b\x1c\x7b\x69\xaa\x3c\x51\ -\xca\x0d\x5b\x2b\x0b\xe2\x1c\x87\x65\x1a\x23\x2f\x61\xf9\x80\x87\ -\x8d\x95\xb1\x84\x15\x95\x08\xe2\x3e\x7b\x01\xc8\xb5\x06\x20\x06\ -\x20\xa3\xb8\x0f\x24\x3a\x26\x1c\x2a\x35\x7e\x4a\x21\x6c\xdc\xa3\ -\x91\x1c\x77\x71\x73\x63\x92\x99\x1c\x19\x67\xb2\x27\x11\xfc\x70\ -\xfc\xfb\xfe\xbe\x45\x12\xe8\x92\x50\xf7\x51\x38\x51\x7a\xcc\xc2\ -\xd0\x7f\x02\x20\x06\x92\x75\x4f\x03\x09\xfa\x5a\xde\x39\xd3\x4b\ -\x20\xca\x46\x26\x44\x43\x99\x43\x58\x9f\x0b\x60\x10\xc1\xe3\x98\ -\x61\x71\x31\x67\x72\xec\x1b\xdb\x25\xea\xa8\x9e\x87\xbf\x06\xe8\ -\x61\x11\xb9\x33\xa3\xc2\x71\x17\x77\x93\xb0\x00\x3c\x00\x44\x64\ -\x2c\x68\xda\xa3\xda\xab\x45\x49\x0f\x86\x89\x77\xad\x66\xf5\x60\ -\xb5\xd8\xdf\x17\x53\xfa\x10\x6d\x8c\x92\x36\x7c\xff\xce\x0f\x36\ -\xf5\x00\x41\x82\x06\x00\x08\x47\x84\x0c\x3c\xb3\x37\x80\x1d\xf7\ -\x28\x99\x11\xc7\x38\xbb\x32\x6c\x67\x04\x98\xa2\x84\x0c\xf3\x1a\ -\xbc\x1f\xa0\xa6\x66\xbe\x01\x46\x66\x9b\xe8\x3e\x00\x81\x81\x48\ -\x36\x0d\x2d\x9f\xd7\x6b\x7f\x89\x0f\x86\xf6\x7d\xbc\x59\x40\x6f\ -\x00\x62\x00\x32\xb6\x2b\x6d\xd1\x4f\x4a\x24\xde\x01\x14\x9a\xbc\ -\x70\xcf\x69\xde\x31\x77\x21\xc7\xf4\x58\x28\xc9\xe0\xfc\x8e\xde\ -\xb7\x6d\x5c\x80\x48\xd4\x5b\xc2\x69\x23\xfb\xa0\x2d\x7b\x0c\x0d\ -\x7a\x10\xa1\x89\x4d\x14\x4f\xb9\x05\x67\x7e\x36\x59\x77\x65\x14\ -\x88\x4e\x7a\x20\x39\xea\xcf\x3f\xce\x76\xc8\xab\x7a\x93\x45\x57\ -\x1a\x52\xf4\xc0\x05\x50\xd3\xe0\x26\xf3\xa0\x5f\x81\x33\x9e\x92\ -\xc8\x97\x30\xa4\xa8\x8d\x74\x33\x53\x5d\xe0\x91\xec\x23\xa7\x51\ -\x7f\xeb\x6f\xf7\xca\xd9\x44\x46\x1d\xc7\x72\x32\x99\x7c\xa7\x44\ -\xd6\x9f\x33\x2f\xf3\xef\xc3\xff\xaf\x38\xb4\xa4\xab\x17\x84\xc4\ -\x49\xb2\xbd\x90\x73\xc3\xc0\x66\xdc\x0b\xc3\xfd\x40\x1f\x88\x88\ -\x97\xcf\xa7\x41\x5f\x52\x6c\x4e\x7f\x54\x69\xbc\x2f\xae\x73\xd3\ -\xcf\xef\xca\x26\x8b\xa6\x97\xe8\x27\x41\xc0\xf1\x87\x0d\x40\x0c\ -\x40\xc6\x12\x40\x7a\xeb\x66\x15\x95\xca\x61\x08\x4c\x2e\x09\x13\ -\xda\x28\xa6\x32\xef\x00\xa0\x50\x73\xc7\xd1\x44\xa6\x54\x90\x1a\ -\x49\x80\xe5\xfe\x6d\xe9\x89\xed\x9c\x9a\x6a\xf7\xc7\x86\xb3\xe4\ -\x41\x94\x84\x89\x4a\x5a\x61\xbf\x3b\xce\x9b\x87\x57\xdf\x29\x4e\ -\x9e\x9f\x3a\xfb\x66\xc1\xe1\x28\x16\x87\xb2\x56\x9b\x1a\xf1\x9c\ -\x47\x4a\x11\xa2\xea\x96\x96\x0b\xdc\x00\xf1\xdd\xef\x6a\xd4\x76\ -\xc8\xb9\x8b\xe6\xca\x81\x93\x29\x86\xcc\x23\x34\xa1\xe9\x6f\x40\ -\x39\x96\x72\xf0\xa9\xae\xf2\x13\xdf\xaf\xed\x9e\x0d\x61\xf7\xc9\ -\x59\x26\xdf\x0b\x61\xa8\xf9\xff\x07\x04\x25\xe7\xdf\x6d\x68\x8d\ -\xb9\x1a\xad\xd0\x35\x90\xc8\x89\x41\x42\xee\xc9\xde\x83\x84\x71\ -\x19\xd8\xae\x77\x6f\x56\xe6\x69\x00\x62\x00\x92\x1b\x00\x72\xc6\ -\x24\x7b\xa9\xa2\x4e\x9c\x1c\x26\x59\x14\xff\xef\x0c\x7e\xd1\xb4\ -\x63\xad\x68\xe3\x0b\xd7\xaa\x16\x8b\x43\x84\x1a\x0c\xad\x30\x00\ -\xcb\xee\x34\x2b\x27\x0e\xff\x69\x32\xfa\xf4\xd8\xf4\x45\x34\xe1\ -\xfe\x44\xa7\xdb\xfb\x89\x66\x57\xb9\x34\xcc\x7a\xc4\x52\x80\x86\ -\x07\xbd\x13\xe7\x3b\xdc\xf4\xc4\x9e\xac\xe8\x43\x05\x19\xfa\xd0\ -\xe0\xa7\x87\xc0\xb9\xa4\xc9\x4d\x63\x94\x06\x7d\xcd\xfa\x6a\x45\ -\x93\xb0\xb1\x10\x8b\x54\x53\xdc\x1f\x5b\x90\x67\x0f\x62\x8f\xd0\ -\x8b\x35\xa5\xdf\x6d\xc1\x93\x14\x7f\x7f\x18\x16\x46\x21\xb4\x38\ -\xe3\x92\x41\x4c\xad\x17\x87\x79\x15\xca\x71\xd2\xcb\x4a\x8e\x91\ -\x4c\x8d\xb2\x48\x5c\x38\x65\xce\x7d\xac\xa5\x4c\xda\xfc\xf3\xb4\ -\x53\x1b\x16\xbb\x4b\x99\x5c\xe5\xb3\x42\x74\xe1\x28\x5d\xc6\xc1\ -\x4c\x03\x10\x03\x90\x9c\x03\x90\x33\xb6\xbf\x79\xc7\x42\xad\x3b\ -\xee\xca\x26\xda\x65\x39\x15\x0e\x8e\x88\x97\x39\x13\x14\x55\xd7\ -\xde\xb8\x5c\x83\x73\x94\x5a\x58\xf4\x04\xfd\xf5\xf0\x97\x82\x0c\ -\x08\xce\x4e\x00\xf3\xe8\xee\x90\xc5\xfc\x38\xf4\x20\xd4\xb4\x7d\ -\x68\x87\x9c\xec\xd1\x84\xfd\xc3\xf7\xa4\x34\xd3\xa7\x7d\x35\xbc\ -\x46\xaf\x23\x23\x38\x3d\xc8\x92\x96\x7f\xd8\xa0\xb2\xd6\x3f\x75\ -\x95\x7f\x70\x8b\xd3\xbb\xc9\xb5\x1e\xd5\x3b\xdf\xf6\xd7\x37\xb8\ -\x9b\x89\xf0\x33\x38\xbd\x1d\x76\x60\x6c\x57\x66\xb1\xf1\xd9\xab\ -\xc3\xa0\xe2\x95\x25\xc9\x7a\xd5\x59\x7a\xf8\x01\x86\x3b\xff\xf7\ -\xa0\x5b\xb2\x6b\xa1\xca\x58\xa5\x51\x6e\xfe\xa2\x50\x4a\x62\x50\ -\x92\x81\xc4\xa3\xdd\x98\x63\x41\xf1\x77\x87\xca\x6a\xcc\x57\x4c\ -\x1b\x04\xfd\xb7\x6b\x62\xbd\x20\xec\x93\xf0\xe7\x3f\x7d\x5f\xf9\ -\xf7\xbe\xd6\x83\xc8\x82\xa6\xda\x33\x26\x9f\xcd\x46\x1f\x40\x8e\ -\x25\x62\x8a\x73\x97\xce\x0d\xdb\x29\xbb\xf9\x8e\xb8\xce\xf6\xe8\ -\xd7\x0d\x40\x0c\x40\xc6\x03\x80\x0c\x04\x2c\x85\x09\xb0\x5c\x5c\ -\xa4\x86\xbc\xc0\xe5\xbc\xb0\xbf\x1a\xc7\x4c\xa4\x0f\x53\x07\xc9\ -\x11\x1a\xf5\x34\xaf\x61\x02\x11\x51\x33\x4d\xbb\xf3\x1d\x9b\x15\ -\xfd\x23\x2f\xae\x5a\xfc\xb7\xb6\xab\xe9\x4c\x44\x0c\xb8\xe0\xf0\ -\xd3\x96\xfc\x1d\x59\x13\xca\x4e\x9a\x41\xf8\x4e\x02\x4c\xde\x19\ -\x72\x2e\x07\xec\x65\xf8\xff\xe3\xbd\x29\x03\xc1\x28\x9a\xdf\x58\ -\xa3\x07\x0f\xf0\x50\x79\xcb\x1f\x77\xa3\x3f\x2e\x2d\xa4\x42\xfa\ -\x65\x24\x20\x92\x34\xd0\xa1\xbc\xd2\x63\x59\x73\xfd\x32\x37\xf5\ -\x9c\x30\x38\x28\xa9\x14\xff\x13\x66\xd6\x2d\xbf\xdd\xe7\x6e\xff\ -\x8f\xfd\x92\x93\x27\x1b\x09\x12\xf5\xe5\xe9\x65\x4f\x1c\xa7\x76\ -\x9c\x7c\xa5\x5b\x66\x94\xf4\x53\x60\x92\xad\x3d\xb1\xfc\xac\xcb\ -\xaa\x7a\x1b\xef\xcd\xf1\x28\x03\x39\xdd\x4d\x7b\xe9\xf1\x30\x35\ -\xdf\xdf\x2e\x6e\xb3\xd1\x03\x10\xb4\xc2\x10\xc5\x2c\x4b\xf6\xc4\ -\xa4\x33\x10\x1f\x54\xa0\x76\xc0\x73\x62\x19\x88\x01\xc8\xf8\x06\ -\x90\x81\xe4\x35\x92\x3a\x3a\x4e\x90\xfa\x3e\x37\x3e\x37\x39\xce\ -\x09\x07\x0a\xb8\x10\x5d\xc7\x72\x09\x8e\x13\x5a\x68\x6d\x7d\xb5\ -\x84\x08\x91\x56\x5f\xba\x7b\xa1\x5b\xba\xab\x9b\x25\x7f\xa7\xf9\ -\x4d\x29\x8d\x48\x8c\x1d\xee\xea\xd3\xbc\x60\xad\x1a\xe2\xec\x46\ -\x1f\x50\x38\xf2\x54\x88\xde\x01\x1d\x0c\xf9\x14\xe6\x27\x98\xc1\ -\x08\x36\x43\x0f\x24\xce\x94\xac\x68\xc8\x43\x77\x09\x70\x00\x72\ -\x00\x15\x34\x5b\x24\xca\x35\x7d\x3d\x25\x34\xc2\x61\x36\x21\xd6\ -\xc8\xff\x43\x39\xa6\xb7\x11\x98\x62\xa5\xc9\x5e\x93\x99\xea\x83\ -\x1c\xfc\x7c\x6b\x9f\x83\x8f\xb1\xef\x81\xcc\x85\xe4\x5a\x06\xa9\ -\xf8\x9b\xce\x40\xfc\xef\x90\x29\xf6\x00\x10\x4d\xe3\xef\x56\xd6\ -\xa8\x3e\x88\x39\xf7\x31\x03\x10\xee\x4f\x7a\x52\xad\xaf\xaa\x97\ -\x20\x6a\xf7\x9e\x14\xe5\xcc\x95\x47\x16\x8b\x41\x78\x24\x91\x3b\ -\x31\x00\x31\x00\x99\x58\x00\x32\x58\x80\x29\xee\x6a\x0a\x16\x25\ -\x35\x7c\xcd\x6a\x40\x2f\x4e\x96\x46\xf5\x69\x94\x9c\x78\x9d\xcf\ -\x7a\x00\x21\x9c\x2f\x56\xe3\xc1\x87\x21\x39\x49\xd7\x9f\xc5\xf1\ -\xa7\x65\x48\x9e\xe8\x54\x79\x8d\x92\x1b\xf4\x59\x00\x84\x81\x3f\ -\xa9\xda\x26\xd9\xcd\xa0\x40\x24\x01\x0e\x49\xd1\xff\xbc\x53\x73\ -\x13\xab\xae\x59\xaa\x5e\x07\x99\x19\x8e\x82\xb2\xdf\xca\xa3\x4b\ -\xa4\x96\xcb\x83\x1f\x9b\xdf\x31\x53\x8b\xbb\x40\x96\xed\x59\x24\ -\x20\xd4\x67\xf7\x91\x05\x5d\x27\x89\x8b\x8d\x9a\xeb\x18\x52\xb6\ -\x90\xec\x41\xe7\xf7\x36\xfa\x2c\x90\xec\xa8\xfb\xfb\x02\x7a\x9d\ -\xef\x6f\x72\xc5\x1e\x90\x04\x4a\xe6\xe0\xc7\x04\x40\xf4\x8c\xfb\ -\x4c\x1b\xd5\x02\xfa\x8f\xdd\x83\x03\xee\xff\xf5\x89\xb6\xdd\x61\ -\x03\x10\x03\x90\xbc\x04\x90\x0c\x1b\x33\x0e\x88\xcd\x5d\x31\x69\ -\xba\x86\xe8\xa2\x06\xd3\x60\x1c\x7f\x94\x30\xb9\x39\x01\x12\x64\ -\x48\xc8\x48\x90\x20\xe1\xc1\xd5\x80\x5d\x3f\x8e\xbc\x07\x70\x78\ -\x87\xaf\x25\x56\xfe\xf5\x28\x0a\x47\x4d\x2a\x74\x8b\xb8\x4e\x00\ -\x24\x19\x83\x44\x05\xb5\x97\x64\x8f\x98\x6d\xea\x23\x5d\x5e\x9c\ -\x16\x55\x64\xa2\x9b\xec\xe7\xf8\x00\xd9\x0f\x0d\x77\x26\x94\x39\ -\xce\xd8\x68\xc7\x81\xb0\x68\x88\x6c\x8f\x4c\xa7\x28\x01\x01\xca\ -\x8b\x51\xe6\x44\x93\xe1\xfe\xde\x2b\x9b\x33\xdb\x75\xbc\xa7\xd1\ -\x5d\xc7\x52\xa9\xee\xf7\x56\x22\x45\x6f\x7d\x90\xb1\x05\x10\x7a\ -\x5b\x64\x9f\x51\xe6\xbf\x87\x64\xbf\xbf\x5f\x9a\x5f\xb2\xde\x9d\ -\x78\xac\xc3\x00\xc4\x00\xc4\x00\x24\x93\x34\x64\x32\x1a\x9c\x24\ -\xcc\x15\xa2\x6b\x81\xc8\x20\xf7\xa0\x48\x4f\xeb\xeb\x81\x29\xc5\ -\xef\x21\x56\x37\x77\xd9\x5c\x51\x9b\xd9\x25\x4f\x4d\xba\x07\x8b\ -\x2c\x29\x85\x11\x29\xc6\x32\x13\xfd\x1d\x4a\x50\x53\x13\xdd\x31\ -\x1c\x39\xd1\x7e\x4d\xdd\xbc\x30\xa0\xe9\x8f\xe9\x68\x22\xbe\xb8\ -\xf3\x9d\x9b\x05\x18\x44\x94\xbc\x1e\x76\x18\x13\xea\x71\xc5\xeb\ -\x40\xe0\x87\xec\x3d\xc7\xc8\x30\x20\x02\x99\x0c\x80\xd2\xbb\xa0\ -\xf4\x57\x31\x7f\x8e\x2b\xaf\x9c\x2d\xd2\x83\xf6\xa4\x94\x96\x6b\ -\xb6\xa7\x7a\x4d\x95\x5b\x7d\x7c\xa9\x4a\x76\x1c\x03\xf7\x5e\x5f\ -\x52\x2e\x0c\x23\xd6\xdf\xb1\x32\x4d\x30\xb0\x7b\x6b\x94\x01\x04\ -\xfa\xae\x07\x85\x6d\xaf\x6f\x48\x06\x08\x4b\x7b\x64\xee\x51\x89\ -\xf7\x86\x47\x0d\x40\x0c\x40\x0c\x40\x32\x0e\x22\x71\x37\x3a\xfd\ -\x12\x6a\xfc\x94\x8b\x86\xd2\xc7\x88\x40\x22\x9d\xa1\x1f\xec\x52\ -\x89\x69\xe3\x9f\xac\x51\x44\x18\x87\x28\x63\x33\x1e\xe0\x60\x2a\ -\x7d\xdd\xc9\x15\x69\xe0\xd0\xfe\xea\xe2\xd0\x67\x98\xe5\xff\xbc\ -\xee\x96\x15\x2a\x0d\xc5\x61\x45\xe4\x46\x76\xbf\xbb\x51\x99\x02\ -\xeb\x79\x29\x6b\xe1\x00\x34\x9d\xee\x3f\xf3\xd0\x60\x65\x64\x92\ -\x46\xba\xd8\x6d\x3f\x08\xfa\x54\xfc\x19\x50\x40\xa0\x91\xe6\x3b\ -\x06\x28\x71\x8c\xd0\xac\xe3\x6e\x79\xc9\xd5\x78\x40\x93\x26\x56\ -\x2f\x06\x1b\x0c\x39\x32\x25\xdd\x5b\x36\x0f\x32\x26\x00\x42\x26\ -\x0b\xe1\xa4\x37\x88\x53\x7e\x94\x90\xa2\xcf\x5c\xa3\x68\xa5\x01\ -\x88\x01\x88\x01\x48\x26\xcb\x59\x09\x88\xc0\x4c\x5a\xe2\x33\x91\ -\x50\xce\xda\x39\xe4\x66\xf8\xa1\xc4\x41\x6b\x79\xd4\x83\xdb\x3d\ -\x80\xb4\xa4\x01\x26\xee\x14\xa7\xf9\xcd\xc4\x78\x90\x27\x0f\x12\ -\xf2\xf4\x71\xe8\x4b\xd0\xdc\xdf\xf7\x89\xe6\x20\xa3\xfe\x40\xf8\ -\x7d\xfa\x2d\x9d\x1f\xd8\xa2\x28\x92\x89\xef\xf2\xb9\xb3\xdd\x36\ -\x0f\x50\x6c\x3e\x84\xea\x3b\x22\x95\xdc\x64\x61\x13\xf7\x14\x0c\ -\x1d\x4a\x51\x92\x4e\xf9\xc7\xa0\x69\x05\x45\x5a\x7d\x1f\xff\x9d\ -\x70\x3e\x00\x05\x12\xf7\xfa\x5e\xdd\x40\x24\x82\xcb\x9c\xda\x39\ -\x81\xa2\x6d\xf7\xd4\xa8\x02\x08\xfe\x80\x6b\xc0\xbf\xcd\xb8\xa4\ -\xe7\x6a\x5f\x49\xc6\xf8\xfb\x7b\xef\x47\xb7\xe8\xba\x1a\x80\x18\ -\x80\x18\x80\x64\x2b\x13\x29\x0a\x20\xa2\x72\x96\x18\x55\x3b\x87\ -\xbf\xd6\x37\x71\xb0\xcc\x9b\x90\x75\x00\x0c\x3c\xe0\x71\xf9\x54\ -\x90\x57\x2f\x4a\x64\x49\x66\xbb\xad\x2c\xfb\xf1\x0f\x36\x59\x07\ -\x8e\x9d\x0c\x80\xe8\xff\xd0\x67\x5b\xdd\x55\x17\x17\x68\xd5\x2d\ -\x7a\x53\xc7\x12\x09\xf8\x1e\x3b\xd5\x33\x6c\xca\x52\x3c\x00\xaa\ -\x69\xff\x44\xd8\x5b\xc2\xae\xf9\x65\xfb\x16\x69\x20\x94\xbf\xf7\ -\x50\x10\x40\x47\xcc\xbf\x0e\xcd\x2f\x64\x4f\x86\xb2\x11\xd1\x6c\ -\x84\x00\xe2\x33\x42\xee\x19\x54\x9f\xc9\x50\x4b\x66\x95\x9e\xf1\ -\x5a\x4a\x9d\x5c\xd3\xd8\x2f\x31\x00\x31\x00\x31\x00\xc9\x22\x88\ -\x40\x89\x85\xf6\xcb\x83\x36\xec\x5d\x18\x89\xde\x14\xfd\x09\xa8\ -\x95\x33\x2f\x66\xfd\x6d\x81\x18\x64\xf4\x30\xc8\x40\xd0\xb5\x6a\ -\xb8\x6b\x95\xae\x8f\x56\xda\x26\x33\x29\xf4\x2b\x68\x98\x1f\xf4\ -\xe0\x81\xa4\xfa\x94\xf3\x66\x6a\x1a\x5d\x43\x8d\xdf\xdd\x39\xec\ -\xe3\x21\xdb\x20\xd3\x20\x12\x65\x36\xe6\x86\xf4\x70\x66\x1c\xd4\ -\x0c\x46\xa6\x04\x23\x0c\xd9\xf7\x0d\xcf\x58\xe5\x16\x36\xd7\x4a\ -\x2d\xf7\x22\x0f\x62\x8d\x2f\x5c\xd7\x43\x13\x4b\x19\x96\x3f\x5e\ -\xde\x83\x19\x04\x69\x60\xb1\xf8\xc9\x7a\x21\xa3\x06\x20\x94\xaf\ -\x00\x76\x09\x62\xa6\xce\x5c\x59\xbc\xac\x73\x61\x28\x5f\x9d\x6e\ -\x33\x00\xc9\x5b\x00\x79\x72\xa1\xe6\x18\x54\x5a\xb8\xcf\x00\x24\ -\xdb\x20\x72\x85\x04\x04\x17\x0b\x00\x86\x3b\x20\x78\x63\xa2\xc6\ -\x7b\xd9\xa4\x69\xda\x0d\xc2\xb9\x87\x21\x03\xd5\x52\x92\xf8\x3e\ -\x9b\x00\x28\x70\xea\x51\x53\x2b\xf4\x3c\x3a\xdc\xde\x8f\x36\xbb\ -\x29\xe7\x78\x87\x50\x5b\x2e\x20\x61\x1f\x89\x00\x66\x38\x83\x8a\ -\xa7\xc3\x3d\x80\x96\x15\xcd\xf3\xb6\x7b\x1a\xa4\xf3\xc5\x20\x22\ -\xab\x80\x91\x98\x61\xd7\xc8\xba\x93\xcb\xdd\xca\xc3\x8b\x05\x18\ -\x68\x9a\x45\x16\x16\xf3\x38\x94\xd8\xe6\xad\xa8\xd2\xb1\xf6\x16\ -\xf0\xe3\x7e\x64\xa1\x16\xc7\x88\x6c\x3b\xdf\xb5\xb8\x20\x7f\x57\ -\xce\x66\x1d\x40\x7c\xe6\x0a\x7d\x3c\x06\x04\x64\x8b\x55\x2b\x2b\ -\x15\x64\xf6\xbe\x97\xa7\x6a\x7e\x67\x99\xca\xb2\xdd\xd7\xde\x1a\ -\x80\xe4\x23\x80\x34\x18\x80\x8c\x1a\x88\x14\x84\xc6\x3a\x2c\x29\ -\x40\x44\xe7\xfc\xd4\xe0\x1d\x36\x7d\x10\xe8\xb5\x94\xc4\x70\xa6\ -\xec\xc2\x60\x70\x71\xf7\x7b\x1b\xf5\x7f\x7d\x4d\xae\xf3\x67\x32\ -\x81\x8e\xf7\x36\x69\x56\x65\xe5\x51\x0f\x60\x3f\xed\x0c\xcd\xf4\ -\x7b\x5b\x47\xb4\x09\x30\x02\x08\x8b\xb3\x1a\x5f\xb0\xce\xad\x3d\ -\xb1\xcc\xd5\x6e\xac\x76\x15\x35\x73\xc2\x3c\x8d\xcf\x90\x00\x4d\ -\x4a\x50\x64\x3d\x93\x13\xfa\xae\x96\x4b\x15\x94\xca\x11\xb5\xbf\ -\x71\xa3\xbb\xe9\xf1\x8e\x1e\x19\x10\x7f\x66\xb8\x91\x2d\x87\x94\ -\xfe\xd0\xe6\x5a\x7d\xdd\x32\x01\x0f\x40\x6c\xac\xac\x2c\x02\x48\ -\x32\x93\x04\x8d\x7c\xc6\x93\x8b\x5c\xaa\xe8\xcc\xfb\x98\x79\xa2\ -\xcd\xcf\x5b\x23\x91\x45\x03\x10\x03\x10\x03\x90\x51\x9c\x13\xa1\ -\xd9\x0d\x00\x6c\x7e\xee\x1a\x77\xf2\xd7\x7b\x07\xbd\x81\x91\xbe\ -\x07\xd7\x88\x07\x1b\xe9\x11\x7e\x07\x05\x62\x7a\x1a\x94\x8e\xb8\ -\x1e\x67\x88\x2f\x9e\x0a\xe2\x84\x1d\xef\x6f\x52\xa6\xd9\xf2\xd7\ -\xeb\x25\x3b\x72\x2c\x53\xbb\xe8\x93\x12\x56\xd8\x2d\xb2\x33\x2d\ -\x49\x1f\x97\x81\xb1\xba\x97\x41\x43\x2d\x9b\xf2\x59\x0a\x1b\x03\ -\xeb\x9f\xb6\x2a\xd9\x4c\x78\x95\x18\x3e\x38\x21\xa9\x0a\x77\x13\ -\x7c\xa4\xdc\x45\xa9\x2e\x95\xec\x75\x6f\x7e\x69\x9d\x7b\xa6\x3b\ -\x2a\x70\x52\x3f\x24\x65\x3b\x3f\xb2\x05\x20\x5a\x84\xf6\xdb\xbd\ -\x02\x83\xb0\x99\xb2\xe7\xeb\xb8\x76\xcc\x14\xd1\x1f\xe1\x9a\x1b\ -\x80\x18\x80\x18\x80\x8c\x2a\x88\x84\x85\x4c\xf4\x2c\x70\xae\x64\ -\x22\x83\x75\xe6\x51\x16\x5e\x4e\xda\x5f\x33\x35\x9d\x07\x00\x1f\ -\x6a\xd9\x28\xdb\x32\x9b\x81\x33\xbf\x31\x19\xfa\x1a\x92\x04\xfc\ -\xe9\x41\xee\x88\x4f\x76\x93\xf3\x99\xea\x87\x7c\x6f\x97\x98\x5f\ -\x77\xfe\xd7\x01\x95\xd4\x00\x05\xb6\xda\x91\x51\x68\x0f\xfb\xe2\ -\xb9\x41\xbc\x92\x19\x99\xee\x25\x34\xff\x3e\xac\xf1\xa5\xfe\x4e\ -\xb6\x56\xe4\x9d\x15\x99\x0a\x0e\xeb\x8e\xff\x3c\x20\xd9\x98\x29\ -\x7d\x38\x36\xb3\xcc\x00\x08\x01\xc7\x61\x7f\x5f\x31\xe4\x09\x31\ -\xa3\xf7\xeb\xae\x4a\xca\xde\x51\x03\xcb\x00\xc4\x00\xc4\x00\x64\ -\xb4\x41\x04\x85\x5b\x96\x24\x5d\x51\x2c\x0a\xeb\xa0\x65\x4a\x86\ -\xc1\xd8\x22\xfb\x38\x94\x48\x9b\x0c\x99\x42\xec\x5f\xaf\x05\x56\ -\x89\x48\x24\x4e\xa2\x4f\x7b\x74\xb7\xb2\x21\xa4\xbd\x8f\x25\x0a\ -\xc2\xfb\x3f\xd3\xa2\xcc\x03\xe5\x5f\x88\x1a\x88\xf1\xe1\xf8\x2f\ -\x9a\x74\xa5\x86\x09\x39\x9e\xe3\xbd\x9a\xf7\xe9\xf9\x94\xf7\x34\ -\xaa\x47\xc2\x04\x3b\xe7\x8a\x26\x3a\x02\x90\xcc\x95\x9c\xfc\xcd\ -\xde\xb4\x14\x3c\xff\x67\xf7\x53\xe6\x00\x84\x9e\x07\x3d\xa7\xe6\ -\x97\xae\x4f\x40\xba\xbc\x4f\x01\x4c\x06\x41\xe9\x7f\x1c\xea\xbe\ -\xb5\xd0\x00\xc4\x00\xc4\x00\x64\x74\x41\x84\x87\x31\x46\xe2\x71\ -\xef\x77\xc6\x77\xb3\x7f\x2d\x6c\x1f\x1c\xea\x7b\xb3\x74\x8a\x52\ -\x14\xe5\xa3\xea\xba\x79\x92\xc8\xc7\x41\x40\xab\x3d\xc3\x7c\xb6\ -\xb0\xe2\xe0\x62\xed\x87\x40\xd6\x64\xee\xa2\x39\x9a\x2d\x21\x7b\ -\x60\x40\x31\x36\xcc\x71\x4a\xcc\xc4\xd0\xa0\xed\xbd\x7d\x11\xd0\ -\x91\xba\xb1\x8f\x6c\x2b\xaa\xe7\xe8\x77\x22\x75\x57\x73\x2d\x17\ -\x17\x69\x8d\xad\x58\x68\x8f\x77\xaa\x94\x82\xb3\x2a\x33\x10\xc9\ -\x18\x80\xa0\x54\x40\xa0\xb0\xb8\x7d\x41\x10\xb2\x4c\x9d\x39\xdb\ -\xc4\x75\x84\xd4\x90\xce\x66\x0d\x40\x0c\x40\x0c\x40\xc6\xae\xb1\ -\x4e\x3f\x84\x9d\x18\xf4\x43\xb2\x35\x83\x31\x5c\xe0\x91\x93\xf7\ -\x8e\x9d\x69\x7a\x58\x50\xe8\x72\xd1\x83\x40\x6e\x1e\x47\x11\x2d\ -\xee\x65\xe1\x7e\x42\xb4\x91\x8c\x01\x09\x15\x9c\x3c\xf4\xd0\xd0\ -\xfc\x2e\x53\xc3\x3f\xec\x64\xef\x25\xed\x92\xf4\x52\x28\xe7\x2d\ -\x3f\xb0\x58\xa5\xab\xde\xd1\x2f\x20\x02\x09\x80\x09\x68\x48\x01\ -\x80\xe2\xcc\x44\xfe\xde\x66\x44\x32\x00\x20\xfe\x5c\x72\x9d\xc9\ -\x1a\x29\x5d\x41\xf8\x38\x63\x8b\xe4\xb4\x92\xb0\xf4\xec\xa3\xcd\ -\xd2\x5c\x33\x00\x31\x00\x31\x00\x19\x63\x00\xa1\x8c\x55\x3c\x23\ -\x25\x36\x93\x4a\x3a\xa7\x72\x03\x44\xd4\x3f\xf9\x68\x28\xaf\xc1\ -\xca\xa1\x07\xb1\xa8\x75\xbe\xa6\xeb\x01\x04\x00\x03\xe7\x4d\x99\ -\x49\xdb\x03\x67\x84\x9f\x50\x8a\xa3\x32\x31\x02\x8d\xe5\x95\x15\ -\xda\xf9\x11\xa5\x31\xe2\x24\x7a\x6f\xd9\x16\x9a\xfb\x5b\x5f\x1e\ -\x4a\x27\xbc\x4f\x5f\x4d\x72\x80\x02\x07\x55\x5e\x31\x5b\xbb\x4b\ -\x28\x69\x01\xc0\x00\x96\x95\xb3\x46\x0e\x20\x80\x37\xf2\xfa\x04\ -\x08\x67\xcc\xdc\xa4\xc2\xfc\xc7\xfc\x4d\x35\xea\x6f\xf5\x5e\x1b\ -\x6d\x00\x62\x00\x62\x00\x32\x16\xa5\x2c\xef\x14\xa5\x99\xd5\xb1\ -\x50\x93\xea\x63\x9e\x7d\xf8\xcc\x40\x83\x8a\xaf\xd9\xe0\xa6\x5d\ -\x36\x4b\xac\xaf\x93\xde\xb9\x5f\x87\xec\xc8\x8f\x3b\x24\x5f\xd1\ -\xf0\xcc\xd5\x92\x7a\x67\xf0\x2c\xea\x22\x91\x6d\x10\xb9\x32\xeb\ -\x31\x7f\x73\x8d\x9a\xe0\x88\xed\x51\x72\x02\x38\x42\xb3\xfc\xcc\ -\x06\x3e\x65\xac\xeb\x7f\x10\xe4\x4c\x78\x9f\x59\x3e\x63\xe9\xab\ -\xf6\xde\xfd\x7c\x01\x32\x55\xcb\x2b\xdd\x1d\xff\x75\x40\x02\x93\ -\x48\x8d\x6b\x35\xb0\x35\xd6\x87\x6d\x04\x00\x88\x5d\xce\xae\xaa\ -\x50\x40\xd3\x97\x34\x0f\x1a\x6b\x1b\x9e\xb6\x32\x94\xaf\x4e\x19\ -\x80\x18\x80\x18\x80\xe4\x84\x51\x1a\x20\x92\xdf\xf3\xa1\x2d\xa2\ -\xe4\x8e\x19\x78\x78\x67\x0e\x15\x17\x9a\x2f\xbd\x05\x66\x37\x66\ -\x5e\x52\x28\xb6\xd8\x2d\xbf\xdb\x2b\x21\x44\x58\x60\x37\x3e\xde\ -\xa1\x29\x64\x86\x10\x11\x64\xdc\xf1\xb6\x4d\x9a\x33\x09\x54\xdd\ -\x66\x81\x05\xf4\x62\x4a\x4d\x91\xd2\xdb\x57\x0f\x86\x6c\x8b\x7b\ -\x8f\xf7\x02\x10\xa6\x0e\x72\x1d\x2e\xce\x0c\xd0\x25\x23\xba\xcb\ -\x1d\x11\x25\x9a\x63\x05\xcc\x0c\x44\x86\x17\xc4\xc4\x8d\x9d\x52\ -\x50\x2e\xea\xe3\x1e\x9d\x1a\xca\x57\x07\x3f\xd7\x9a\xd6\xbf\x32\ -\x00\x31\x00\x31\x00\xc9\x11\x6a\xef\xe4\xa4\x17\x42\x29\x27\x53\ -\x7b\xd0\xcf\x3a\xc3\x81\x9c\xfa\x83\xdb\xd3\x7d\x8f\x20\x61\xd1\ -\x29\xc9\x15\xa2\xfc\xf2\xf2\xd9\x2a\x53\x21\xa6\x47\xe3\x94\x9e\ -\x88\xf6\x97\x27\xd4\x5e\x5e\x4f\xd9\x8d\x92\x46\xfc\x89\x12\x2f\ -\xfd\x93\xc1\x1e\x03\x94\xdd\xf5\xb7\xaf\xd0\xf7\x1f\xf4\x6c\x47\ -\xf2\x3a\xe8\xc0\xab\xaf\x5e\x2a\x10\x61\x38\x73\xb2\x0d\x1a\x0e\ -\xcb\xc8\x38\x20\x3d\x34\x3e\x7f\xad\xab\xa8\x9d\x73\x46\x06\xc2\ -\xfd\xc9\xfd\xc0\x0a\x5b\x2d\x90\xea\x83\xd6\x6d\x00\x62\x00\x62\ -\x00\x32\x96\x35\xe8\xcb\x8a\xf5\xf0\x52\xf2\x89\x4e\x3d\x2b\x59\ -\x46\x92\x09\x20\xbd\x4e\x76\xc0\x14\x39\x1a\x55\x5c\xff\x93\xbf\ -\xde\xa3\x3d\xf1\x93\x93\xa6\x77\x64\x8b\xc5\x15\xb8\x55\x2b\xaa\ -\x94\x65\x40\xe1\x54\x59\xea\xa1\x1d\x43\xbe\x6f\xba\x83\x07\xa5\ -\x2b\xb2\x1b\x96\x46\x45\x85\xd7\xa1\xf4\x8f\xe8\x95\x70\x5c\x9b\ -\x7c\x06\xf2\x74\x77\x58\x72\x2e\x43\x02\x22\xb3\x04\x1c\xc2\x6e\ -\x7a\xae\x8b\x7a\x5a\x33\x7b\x02\x08\x0d\x75\x7a\x24\xdc\x2b\x37\ -\xfc\x70\x57\x9f\xd9\xa4\x01\x88\x01\x88\x01\xc8\x18\x37\xd4\x71\ -\x86\x48\x95\x20\x49\x92\x69\x46\x96\xde\x2f\x91\x43\xa1\xc7\xd1\ -\xee\x1d\x37\xd7\x0e\x29\x91\xa3\x3e\x93\xa0\xcf\x81\xd0\x21\xf4\ -\xcd\xde\xfd\x84\xf8\x67\x9c\x03\xd2\xea\xe8\x5a\x21\x65\x41\x13\ -\x1b\x10\x92\x70\xe2\x4f\xc2\x44\xbc\xa4\xdb\xbf\xb3\x43\x99\x08\ -\x06\xc8\x90\x9d\xd0\x8c\xe7\xff\xbb\x53\x77\xc9\x76\xd8\x2d\x4f\ -\x23\x7c\x38\x4c\x2a\x9c\x1f\x53\xd1\x80\xc6\xb6\x7b\x1a\xdc\x53\ -\xdd\x41\x0d\x1a\x4e\x1e\xe6\xfb\xe5\x65\xf6\x31\xab\x54\xa4\x87\ -\xbd\x1f\x6b\x96\xe0\x26\xe7\xb3\x3b\x80\x70\xed\x69\x9e\x43\xf1\ -\x25\xe8\x38\xda\x4f\x76\x69\x00\x62\x00\x62\x00\x32\xc6\x00\xc2\ -\xc3\x07\x07\x9f\x07\xb5\x37\xcb\x65\x24\xc0\xc1\xb5\x8d\x43\x7f\ -\xfb\x3f\xb5\xd5\x2d\xe9\x58\x28\x27\x4b\xc9\x82\x21\x40\x1c\xf9\ -\x9e\x8f\x34\xfb\x2c\xa8\x48\x91\x66\x7f\xce\x57\x1a\x56\xde\xe1\ -\xc0\xc0\xc2\xf8\x37\xa6\x97\x89\x5e\x11\x78\x84\x02\x8a\x44\x3b\ -\x53\xef\x6c\x28\x04\x60\x3a\x3f\xb8\x45\x0b\xa5\x68\xca\xb3\xfe\ -\x96\xfe\x4a\x58\x97\xba\x5d\x0d\x7b\x4a\x27\x5a\x7e\x35\x82\xfa\ -\x3d\x93\xfd\x9c\xbb\x7d\xde\x09\x92\x45\xd1\xc8\x9f\x7e\x7e\xa1\ -\x81\xc8\x20\xa4\x75\x60\x5c\xb1\x3a\xf8\xd6\xdf\xed\x73\xbb\xde\ -\xdd\x28\x0d\xb3\x1e\x19\x08\x4b\xc9\xce\x29\x70\x5b\x5e\xbc\x2e\ -\xec\xae\xef\x87\x25\x68\x00\x62\x00\x62\x00\x92\x03\x4c\x18\x9c\ -\x29\x8e\x98\x7e\xc2\x88\xe6\x38\x92\x25\x54\x64\x33\x64\x02\x38\ -\xf1\x65\x7b\x17\x69\x5f\xf9\x05\x93\xae\x90\xbc\x09\x12\x23\x91\ -\x51\x43\x39\x88\x52\xd2\xa0\x9c\x6e\xaa\xab\xf9\x8f\x38\x22\xcd\ -\x6f\xa2\x58\xca\x1f\xd0\x7c\x71\xe0\xe5\x73\x66\x0b\x1c\x82\x7e\ -\x52\xa9\xe6\x47\x18\x32\xe4\x98\x38\x36\x34\xb0\x1a\xff\x7c\xad\ -\x7e\x37\x13\x4d\x60\x7a\x35\x18\xf7\x32\xdf\x09\x3a\x31\xa2\x7f\ -\x46\xef\x3d\x7b\xf6\xb1\xf3\xed\x9b\xdc\x6d\x7f\xd8\x2f\x32\x44\ -\x77\x00\x01\x60\x18\xe8\xac\xa8\xa9\xd0\xf0\xe7\xb1\x07\xda\xfb\ -\xbd\xe7\x0c\x40\x0c\x40\x0c\x40\x72\xa2\x1e\x3d\xd3\x6d\x78\xfa\ -\xca\xa0\x91\x75\x6a\xf0\xfd\x84\xb8\xc5\x0f\x49\x11\x7e\x97\x52\ -\xd2\xee\xf7\x36\xa9\x3f\x50\xbd\xb6\x4a\x03\x7d\x08\x18\x32\x09\ -\x4e\xb6\x40\x99\x49\xfb\x42\xee\x6b\x17\x7d\x93\x8c\x62\x24\x11\ -\x7b\x49\x71\x10\xda\x03\x44\x28\x81\xe1\xc0\xe9\x9d\xe0\x90\x00\ -\x46\xee\x35\xa6\xee\x0f\x7f\x25\x6c\x2b\x24\xf3\x01\xd0\x04\x20\ -\x19\xe8\x59\x68\xd0\xd0\xdf\x87\x38\x45\xc9\xaa\xf8\xcf\xe0\xf3\ -\x99\x60\xb7\x4c\xa4\xef\x7b\x8d\x73\xbf\xa8\x65\xbe\xca\x8b\x9c\ -\xb3\x9d\xef\xd8\xdc\x33\x03\x29\x0e\x59\x71\xf3\x4b\xea\x04\xca\ -\x03\x91\x3b\x0c\x40\x0c\x40\x0c\x40\x72\xc0\xb8\x26\xf3\xd6\x54\ -\xa5\xd7\xbf\x76\xd7\xb5\xea\x0d\x1a\x52\xae\xf5\x40\xc1\xfc\x08\ -\x0f\x30\xfd\x85\xed\x6f\xde\xa8\x89\xef\x85\x5b\xc2\xc2\x26\x9c\ -\x04\x03\x7d\x0c\xdb\x91\x05\xd0\x08\xbd\xed\xf7\xfb\xd5\xb7\x00\ -\x3c\xa0\x6d\xf6\xa7\x7b\x94\xd1\xec\xca\x3b\x26\x1a\xf3\x94\xb8\ -\x22\x5b\x8b\xa1\x34\x22\xdc\x4c\xd2\x51\xf9\xbe\x64\x3e\x44\xd4\ -\x08\x49\x52\xaa\x63\x58\xd3\x40\xe4\x4c\xe6\x15\xd2\x30\x64\xbb\ -\x52\x07\xf8\xee\x8e\x1e\x00\xa2\xec\xc3\x67\x27\x6c\x1e\xe4\x39\ -\x8f\xa5\x47\x03\x10\x03\x90\xcc\x01\xc8\x77\x77\x4a\x5d\x15\x07\ -\x65\x0f\x65\xa6\xca\x0a\x29\xd5\xf4\x29\x39\x41\x9b\xa5\xb1\x19\ -\x35\xa2\xba\x37\xa0\x61\x6b\x41\xa3\x6d\x79\x55\xbd\x5b\xbe\x7f\ -\x91\x04\x0b\x69\x70\x33\x0f\x71\xf1\xa4\x29\x92\x41\x97\xc4\xc8\ -\x79\x05\xca\x3e\x28\x51\xf1\x1a\x84\x0a\x6f\xfd\xd7\x7d\xba\xe6\ -\x0c\x8d\x31\x1c\x36\x1a\xce\x15\x7a\x2d\x25\x26\x36\x29\x22\xdb\ -\x42\x2f\x86\xb5\xbb\x64\x09\x99\x9e\x69\x00\x10\xe7\x2e\x9a\xeb\ -\xee\xf8\xe3\x01\xb7\xeb\x9d\x9b\x75\x1e\xc8\x88\xb2\x0d\x92\xe3\ -\x69\xee\x83\x73\x84\x7e\x99\xfa\x1a\x22\x57\xec\xec\x99\x81\x14\ -\x07\xdd\xab\x96\xbf\xae\x57\x80\x72\x36\x6a\xb9\x01\x88\x01\x88\ -\x01\x48\x8e\x18\xca\xb3\x6c\xf4\xa3\x14\x05\x80\x6c\x7e\xde\x5a\ -\x0f\x1e\x6d\x9a\x11\x39\x9a\xa8\xdd\x02\x20\x5c\x33\x32\x8a\x35\ -\x37\x2c\xd3\xd6\xbf\x15\x07\x16\xbb\xf5\x77\xac\x74\xeb\xef\x5c\ -\xe9\xd6\xfa\x7f\x63\x76\x63\xf3\x9f\xaf\x15\x43\x89\xeb\x45\x29\ -\x82\xdf\x27\x03\xa8\x5c\x32\x37\x80\xc7\x28\x3a\x55\x9c\xcb\xc6\ -\x67\xad\x76\x77\xfe\xcf\x41\xb7\xed\xf5\x0d\x02\x36\x7a\x26\x19\ -\x77\x90\xc9\xa0\xe1\x92\x9d\x0b\x35\x23\xb2\xe9\x4f\xd7\x28\xfb\ -\xa2\x17\x93\xf7\x6b\x71\xfd\xf7\x07\xb4\x51\x0d\x20\x43\x0b\x7a\ -\x67\x3d\x01\x04\xda\x2e\xd3\xfd\x28\x0a\xf0\xff\x83\x59\x77\x6d\ -\x00\x62\x00\x62\x00\x92\x43\xca\xa8\x34\x2e\x29\x31\xd1\xe8\x5e\ -\xbc\x6d\xbe\x2b\x2c\x4c\x69\x87\xf9\xf1\x87\xc2\x94\x77\x90\x4d\ -\x6f\x53\x29\x08\x0a\x2d\xa6\x7d\xe4\x89\x45\x99\x75\xa2\x47\x36\ -\xfa\x35\xfd\xc5\x3a\xb1\x6d\xb8\x66\x34\xb3\xa7\x48\xb0\x70\x74\ -\x17\x33\xd1\x67\x21\xea\x65\xaf\xc7\x96\x17\xad\x53\xcf\x82\x48\ -\x37\x1b\x4e\x92\x72\x19\xf4\x60\x56\xaf\x6a\xd0\xf0\xa6\xe5\xfa\ -\x7b\xbe\x0f\x1a\x96\xa6\x42\xf6\x01\x89\x42\x74\xf1\xa4\x7f\xd6\ -\x1d\x40\xd4\x3b\x4a\xca\x5b\x37\xfe\xa4\x63\x50\x6b\x00\x0c\x40\ -\x0c\x40\x0c\x40\x72\xc4\x88\xca\x01\x11\x86\xf6\x58\xc8\xb4\xfd\ -\x4d\x1b\x55\x9a\x52\x69\xc6\x67\x0e\x68\x4c\xa9\xf7\xf1\x58\x87\ -\x22\x44\xc0\x84\xe9\x6f\xae\x09\xf4\xdf\x98\x9d\x10\x39\xde\x9c\ -\xcc\x77\x10\x91\x53\xb2\x62\x4e\x62\x3a\x6c\xab\x51\x06\x0f\x2d\ -\x23\xf2\x9f\x3b\xbf\xb1\xc6\xdd\xfa\x6f\xfb\x5c\xe3\x0b\x3d\x80\ -\x9c\x9f\x25\x00\x49\x18\x44\x94\x62\xf8\xde\x5b\xee\xae\x13\x88\ -\x70\xaf\xaa\xdf\x93\xa7\x00\x42\xb6\xc9\x9a\x5a\x04\x2e\x21\x5c\ -\x10\x7c\x1c\xee\x05\x20\x64\x69\x4c\xf8\x4b\x9b\xed\xb1\xce\xc1\ -\x2d\x13\x33\x00\x31\x00\x31\x00\xc9\xad\x32\x03\xf5\x67\xa2\x66\ -\x76\x83\x1f\xfb\x46\xbb\x9b\xb7\xa2\x4a\x94\x59\x06\xfd\x88\xdc\ -\x2b\x97\x55\x6a\xfe\x62\xe7\x3b\x37\x77\x6d\x01\x7c\x64\xa7\x74\ -\xa5\x62\x93\x1a\x07\x40\x89\x8b\x3e\x08\x25\x0b\xb1\xa1\x2e\x29\ -\x1a\xb3\x5e\xc0\x8c\x4b\x0a\x05\x60\x64\x55\x08\x32\xc6\x59\x92\ -\x6c\x3a\x4c\x18\x61\x94\xea\x76\xbe\x63\x93\x7b\xba\xcf\xc4\x00\ -\xe0\x7c\x1d\x34\x24\x30\xe1\xbe\x42\xf5\x18\x3d\xb3\xee\x7d\x0d\ -\x01\x88\xbf\x97\xb8\xc7\x66\x5c\x5a\x14\xca\x5b\xff\xbc\x6b\xd0\ -\x03\xad\x06\x20\x06\x20\x06\x20\xb9\xc4\xc6\xf2\x0f\x72\xe5\xf2\ -\x4a\x5d\x9b\x5b\x7e\xb3\xd7\xd5\xdd\xb6\x22\xdd\xf0\xa6\x3c\x03\ -\x3d\x95\x68\x9a\xb9\x11\x84\x08\x99\x0e\x5f\xb2\x73\x81\xa8\xb1\ -\x44\x8f\x0b\x9a\x6a\xf4\x6f\x34\xcf\xe9\x35\xe4\xc2\x3c\x04\xc7\ -\x81\x1c\x0a\x0b\xa1\xd6\xeb\xfb\x64\xdf\xd9\x70\xbe\x20\x17\x4c\ -\x3f\xb7\x40\x92\xf9\x64\x64\x64\x62\xda\x68\x98\x47\x4d\xf5\xd8\ -\x38\x47\xee\x85\x72\xa7\x9e\xf7\x6e\x34\x71\x00\x04\xc9\xfe\xcb\ -\x7c\xa6\x4b\xe0\x32\x54\x4d\x36\x03\x10\x03\x10\x03\x90\x5c\x62\ -\x63\xcd\x4c\x89\x39\x44\x1d\x9a\xdd\x17\x4c\x71\x33\x25\xde\xa3\ -\xe9\x9c\x0a\xc3\x60\x38\x66\x28\x97\x38\x45\xb2\x0d\x06\xe8\xa0\ -\xc7\xc6\xe1\xbe\x5c\x19\xa6\xa3\xb6\xce\x80\x21\xe5\xb7\x4d\x7f\ -\xb6\x66\x54\x00\x24\xea\x79\x01\xb8\x9c\xbf\x6b\x1f\xda\xa9\xb2\ -\xdf\xcc\x4b\x8b\x75\x7e\xf2\x61\xd0\x50\xa5\xab\xe4\xde\x01\x34\ -\x18\xe6\xec\x0d\x0e\x9c\x93\x2d\x77\xaf\x73\x15\xd5\x15\x62\xfc\ -\x0d\x75\x43\xa6\x01\x88\x01\x88\x01\x48\x8e\xc9\x4c\x10\x31\xb2\ -\x32\xf6\xe6\x5f\xed\xd1\x4c\x08\xd4\x54\x7a\x23\xe3\xf5\x3b\x15\ -\x4c\x2e\xd6\xdc\x09\x82\x7c\xa3\x09\x20\x5d\x83\x86\x01\x50\x25\ -\x59\xff\x8d\x76\xd1\xa5\x79\x06\x26\x7a\x39\x2b\x96\xae\x58\x4f\ -\x4c\xf9\xf0\x8c\xa6\xb8\x07\x0a\x4a\xa0\x3b\xdf\xb6\x49\xec\x38\ -\xa4\x74\x06\xd3\x38\x37\x00\x31\x00\x31\x00\xc9\xe5\x32\x96\x8f\ -\x1a\xa1\xdb\x1e\xfb\xe6\x76\x77\xf3\x13\x9d\xa2\xeb\x0e\xf4\x80\ -\x22\x21\x42\x49\x2b\xb2\x9b\x72\xad\x59\x8c\xf4\x09\xb3\x1f\x08\ -\xf2\xad\xbe\x7a\xc9\xa8\xdf\x37\x71\xd0\xb0\x62\x5e\x85\xa8\xc4\ -\x9d\x1f\x6c\xd2\xdf\x0b\xa6\x4c\xdc\x65\x54\x61\x61\xd9\x4c\x95\ -\x34\xfb\x2a\x5d\xc5\x3d\x30\x64\x1d\xcc\x1e\x41\x1b\x87\x84\x31\ -\x54\xf9\x1c\x03\x10\x03\x10\x03\x90\x5c\x1c\x2a\x9c\x5c\xa2\xe6\ -\xe6\x9d\xff\x7d\x40\xcd\x4f\xca\x54\x03\x45\xf8\x28\x03\x2c\xeb\ -\x5c\x18\xf4\xa9\x00\x92\x54\x59\xee\xd0\x56\x8b\x61\x97\x15\xaa\ -\xb1\xbf\xe2\xd0\xe2\x8c\x4e\xa1\x0f\x55\x2e\x86\xa1\x4a\xe8\xcd\ -\x6d\xaf\x6b\x90\xc4\x8b\x4a\x7d\x13\xac\x27\xa2\xd2\xd5\xc5\x45\ -\xea\x99\x49\xb5\x00\x35\xe4\x3e\xd6\x09\xd3\x2c\x67\xc0\xb4\x6a\ -\x59\xa5\x3b\xf8\xf9\x16\x65\x67\x06\x20\x06\x20\x06\x20\x13\x44\ -\xe2\x7d\xed\x89\x65\x9a\x9d\x20\x42\x64\xc8\x0b\x67\xd7\x67\x93\ -\xda\x3b\x8b\x05\x8d\x35\x9a\x13\x81\x92\x39\x77\x69\x60\x1c\xa9\ -\x89\x4e\x99\x66\x8c\x81\x84\x19\x0c\x24\x55\xa0\x27\xaf\xf2\x19\ -\x08\x3d\x88\xb1\x38\xa7\xfc\x64\x26\x64\xf9\xbe\x45\xee\x19\xee\ -\x88\x18\x61\x00\xae\xfa\x4b\xa9\x89\x73\xef\x14\xcd\x4c\xe9\xfe\ -\x69\x7b\xf5\x06\x2d\xee\xea\xab\x74\xc5\x73\xcf\xc0\x6a\xf5\xea\ -\x79\xa2\xf0\x22\x59\x02\xab\xcf\x00\xc4\x00\xc4\x00\x64\x02\x18\ -\x4e\xb6\xb6\x7e\x9e\xea\xf6\xd0\x74\x6b\x37\x56\xf7\x1b\xb9\xc7\ -\xfd\xea\xec\x2b\x7f\x96\x3b\x2a\x8d\x23\xc4\x14\xf9\x3f\xca\x18\ -\x61\xe5\x6b\xf9\x98\xd6\xe2\x29\x17\xed\x7e\x5f\xa3\x5b\x71\x64\ -\x8c\x00\x24\x0e\x1a\xfa\x63\xe1\x5c\xb1\x0d\x91\x73\x85\x1c\x0c\ -\x0c\xa4\x9c\xca\xd8\x46\xf8\x1d\xf9\x7e\xf4\xd0\x18\x26\xe5\x79\ -\xed\x4b\xb5\x19\xf0\xd8\xf2\x92\x3a\x49\xdf\xb0\xe3\x9e\x5e\x9b\ -\x01\x88\x01\x88\x01\xc8\x44\x29\x63\x15\xa4\xdc\x2c\x9f\x41\xec\ -\x78\x6b\x90\xdc\x26\x6a\x86\x69\xd5\xff\x04\x76\xd8\xd2\xb7\xe6\ -\xba\x65\xee\xd6\xdf\xed\x75\xb7\xfd\x7e\x9f\xae\xd7\x4a\xef\xb0\ -\xe3\x42\xa8\xb2\x31\x62\x1e\x09\x40\x26\x07\x66\xd9\x58\x95\xb0\ -\xba\x93\x14\x98\x8b\x61\x68\x8e\xe6\x32\x25\x42\xb2\xb7\x4c\xa9\ -\x03\x8f\x25\x70\xc4\x15\xc9\xd0\xbb\x61\x57\xa1\xbc\x7c\x46\xe9\ -\xca\x67\x23\xd2\x5a\xfb\x42\xab\xd8\x7e\xbc\xbe\x66\xdd\x3c\x03\ -\x10\x03\x10\x03\x90\x89\xc8\xc6\x5a\x7d\x7c\xa9\xca\x2d\xec\xfe\ -\x1e\xc8\xc9\x05\xc7\x58\xaa\x12\xcd\x86\xbb\x56\xb9\x9b\x7d\x84\ -\x89\xa3\x80\x7d\xc3\x52\x27\x94\x69\xc5\x3c\x1a\x03\x10\x01\x40\ -\x28\x61\x31\xa4\x86\x3e\x55\xb6\x07\x09\x07\x3b\x68\xc8\xf9\x05\ -\xd4\x9e\xfa\x7f\x07\x25\x6d\x3f\x65\x94\x04\x26\xb3\xf5\x7d\x00\ -\x45\xa4\xf3\xe9\x65\x30\x54\xda\xbb\x74\x25\x09\x9c\x6f\x6d\x77\ -\xd7\xfb\xff\xab\x5a\x59\xa9\xeb\x30\xeb\xd2\x62\x57\xbd\xa6\xca\ -\x00\xc4\x00\xc4\x00\x64\x22\xb2\xb1\x88\x26\xd9\xb6\xd7\xf2\x8a\ -\xf5\x9a\xf3\x38\x1b\xe8\xc0\x78\x62\xf0\x10\xc9\x10\x86\xc2\x90\ -\x3a\x21\x23\xd9\xf5\x8e\xcd\x72\xe2\x64\x02\xa3\xcd\x3c\x12\x80\ -\x78\x47\x75\xe0\x33\x2d\xae\xf9\xaf\xea\x46\x95\xc6\x3b\xf0\xa0\ -\x61\x91\xc8\x09\xfb\xe3\xa0\x61\xe5\x6c\x1d\xdb\xb8\x00\x91\x54\ -\x24\x50\x84\xeb\x0d\x91\x82\x6c\x53\x00\x91\xa8\x39\xf7\xee\x7b\ -\xc0\xb2\xe2\x7b\xc2\xea\xd3\x0e\xf9\x44\x7f\xcd\x00\xc4\x00\xc4\ -\x00\x64\x42\x5a\xa9\x9b\xee\xa3\xc4\x6d\x6f\x68\x70\xd7\x7c\x7b\ -\xbb\x58\x35\x45\xd3\x4a\xce\xea\x18\xa1\xf4\xe2\x08\x5b\x5f\x5d\ -\x1f\xf8\xff\x5f\x6a\x75\xb7\xfc\xcb\x5e\xd7\xfa\xca\x7a\xed\x70\ -\xe1\x7d\x46\x1d\x40\x2e\x2b\xd6\xaa\xdb\xa6\xbb\xd7\xe5\x04\x80\ -\xa4\x07\x0d\xfd\xb3\x40\xa9\x90\x5e\x13\xac\xa4\xb8\x6d\x31\x67\ -\x41\x24\xd5\x25\xbc\x49\x06\x01\xb9\x62\xf9\xfe\xc5\x6e\xdf\x27\ -\x9a\x25\x53\x82\x94\xcd\xa1\x7b\xcf\x9c\xe5\x20\x1b\xb9\xf9\x17\ -\x9d\x12\xe6\x04\x70\x44\xc8\x48\x19\x80\x18\x80\x18\x80\x4c\x70\ -\x6d\xac\xb0\xbf\x01\x71\x45\x24\x4a\x06\xa2\xf3\x76\x07\x11\xa6\ -\xaf\x71\x84\xcc\x3c\x48\x78\xf1\x1b\xed\xee\x9a\xef\x6c\x17\x65\ -\x73\xb4\x87\x12\x73\x15\x40\xe2\xb9\xd2\x7d\xec\xcf\x35\xfa\x63\ -\xcc\xaa\xe0\x0c\x05\x22\x39\x36\xad\x4e\x0f\x8b\x21\x48\x2d\xcf\ -\xaa\x98\x2d\xe9\x7f\xc0\x02\x27\x0e\x00\x76\xdf\x52\xd9\xdd\xe8\ -\x77\x20\x23\x73\xe0\xb3\x2d\xca\xba\xb8\xfe\x11\x20\x0d\x40\x0c\ -\x40\x0c\x40\x26\xb0\x69\x21\x92\x7f\xd8\xaf\xf3\xd1\x31\x7b\x3e\ -\x26\x47\x39\xf6\x41\x44\xd7\xec\x76\x98\xdd\x4d\xa2\x82\xf5\xa5\ -\xcc\x8a\x4c\x3b\x6f\xd6\xd8\x94\xb0\xbc\x03\x63\xa6\x65\x4a\x0e\ -\x01\x48\xf7\x41\xc3\x39\xf3\xe7\xb8\x5b\x7f\xbf\xcf\x75\xbc\xbf\ -\x49\xd3\xeb\x63\x51\xee\x1b\x08\x3c\x50\x53\x66\xdb\x24\xf7\x01\ -\x01\x01\xb4\x6d\x26\xc9\xa5\x9c\xdb\x8f\xfc\x08\xa5\x2c\x02\x08\ -\xae\x3f\x1b\x1b\x7b\xef\x8b\x37\x00\x31\x00\x31\x00\x99\xe0\xcd\ -\x74\x40\x03\x69\xf6\x6b\x1e\xdc\xa1\x66\x38\x6b\x49\x07\xfb\xfb\ -\x34\x86\x37\x3f\x77\x8d\x22\xd0\x1b\x7e\x1c\x1e\xf6\x29\xa3\xcc\ -\x38\x12\x0b\xcb\x47\xce\x7b\x3f\xde\xec\xea\x9f\xb6\xf2\xac\xbd\ -\x9c\xb1\x6a\x44\x73\x9e\xe7\x6f\xaa\x76\x77\xb9\xa3\x2a\xf7\x21\ -\xa5\x0f\x63\x6b\xac\x07\x0d\x01\x38\xfa\x61\x1c\x4b\xc7\x7b\x9b\ -\xb4\x59\x92\xa0\x40\xa0\x31\x80\x6e\x15\x65\x2b\x9e\xd5\x13\xfe\ -\xba\x57\xaf\x9d\xd7\xa7\x1a\xb1\x01\x88\x01\x88\x01\xc8\x44\x9f\ -\x09\xb9\xa8\xd0\xd5\xac\xaf\x0e\x4b\xa6\xda\x17\xe8\x61\x1d\x54\ -\x64\xec\x41\x02\x67\xcd\xf4\x35\x42\x86\x70\xff\x69\xae\x8f\x36\ -\x0b\x4a\x83\x84\x1e\xf8\xb6\xbf\x75\xa3\xe6\x2e\x66\x8c\x21\x8d\ -\x77\xb0\x83\x86\x4c\xab\x37\x3c\x7b\xb5\x4a\x88\x28\x1b\x8f\x25\ -\xc5\x17\xe0\x98\x75\x65\xb1\x07\x8f\x46\x95\xd9\xce\x06\x1c\x11\ -\x3c\xc8\x4e\x58\x0c\xb5\x70\xeb\x7c\x05\x12\xa9\x3e\x80\xd0\x00\ -\xc4\x00\x64\x74\x01\xe4\x6b\xdb\x34\xd8\xc6\x7e\x87\xf1\x4a\x7b\ -\x1c\x77\xa2\x78\xc9\x9e\x6a\x1a\xa5\xbb\xdf\xdd\xe8\xa6\x0d\xa1\ -\x04\x44\xb3\x14\x85\x5f\xca\x32\xe8\x6a\xed\xf9\xf0\x16\x39\xf4\ -\xfe\xa6\xda\xb3\x73\xfc\xa5\x8a\xa0\xd9\xe3\xbe\xf2\xc8\xd8\xce\ -\x81\x9c\x0d\x44\x00\x0b\x40\xa4\xe1\x59\xab\xdd\xb3\xdd\x31\x0d\ -\x67\x42\x8f\xed\x0e\x32\xa3\xaf\x4a\x30\x4b\xf3\x33\x02\x8f\x41\ -\x3c\xa3\x02\x0f\xf6\xc2\xf8\xac\x93\xe3\x17\xe3\xaa\xb8\x8f\xe3\ -\x4f\x05\x5f\x80\x46\x18\xcf\xf5\xd5\x26\x65\x62\x00\x92\x75\x00\ -\x39\xbd\x4d\xda\x3a\x9b\x9f\xb7\x46\xd1\x19\xef\x35\x61\xa6\x78\ -\x73\xb5\x8c\x95\x34\xd3\x91\x36\xb9\xe5\xb7\x7b\xa5\xce\xab\x69\ -\xee\xd4\xe0\x9c\x37\x0e\xbb\xe5\xaf\xeb\xb5\xca\x14\x81\xc6\x79\ -\xab\xaa\xd4\x64\x1f\x3d\x6d\xaf\x00\x58\xbb\x3c\xf8\x2d\xed\x5c\ -\xe8\xae\x7a\x72\x61\x4e\x97\x0c\x0b\xa7\x05\x29\x90\xd6\x57\x6f\ -\xd0\x8c\x08\x82\x84\x72\xc2\x63\x74\x8f\x4f\x3d\x07\x45\xdd\xf5\ -\x61\x53\xe0\x20\x32\x8f\x6b\xbe\xb3\x43\xd7\x1a\x5a\x2f\xc7\xdd\ -\x97\x54\x0b\x65\x39\x7a\x3c\x57\x4c\x9a\x2e\x92\x06\x19\x2a\x20\ -\x62\x00\x62\x00\x92\x55\x00\x09\x7c\xf2\x36\xed\xdf\x46\x1c\x2f\ -\xd6\xd9\x79\xe8\xf2\x69\x51\xcf\xa8\x4b\xa2\x5f\x59\x22\x27\x80\ -\xb2\x6a\xf3\x4b\xea\x04\x28\x83\x02\x10\x9f\x6d\x20\xac\x47\x0f\ -\x85\xdf\x65\x81\xd0\xa2\x96\xf9\xa1\x8c\x95\x1a\xad\x63\x2f\x76\ -\x15\xb5\x73\x44\x93\x65\x20\x92\xe6\x7e\xae\x2b\xd9\xd2\xac\xe6\ -\xbe\xde\xfb\xd1\x66\x77\xa7\x07\x91\xb9\x0b\xe7\x8e\xfe\x8c\x48\ -\x2a\x48\xda\x50\x62\xa2\xe7\x71\xf4\x2c\x25\x26\xf5\x3c\x1e\x0e\ -\x7b\x4f\x96\xec\x0a\x6b\x7c\x25\x63\x93\xea\x09\x90\x50\x7f\xf9\ -\x2e\x94\xaf\x60\x72\x71\x4f\xa0\x85\x75\xe8\x54\x9b\x01\x88\x01\ -\x48\x96\x01\x24\x99\x68\x65\x28\x89\xfa\x2a\x75\xd3\xb5\x37\x2e\ -\x57\x44\x3b\x35\x07\x74\x97\x26\xac\x15\x97\x49\xca\xa4\xfd\x0d\ -\x0d\xee\xe4\xaf\xf7\x8a\x51\xa3\x2c\x62\x10\x20\x80\xb3\xa8\x7f\ -\xea\x4a\xed\x52\x07\x44\x36\x3f\x6f\xed\xa8\xf6\x41\x98\xad\xe0\ -\x38\xa9\xc9\x6f\xfe\xf3\xb5\x39\x45\xe3\x1d\x90\x0a\x7d\x69\x91\ -\x9e\x15\xfa\x7e\xb7\xfe\x6e\x9f\xc0\x58\xdb\x21\x47\x89\xde\x1b\ -\x1a\xfb\x33\x55\x4e\x8b\xf3\x3c\xfd\x05\x75\x80\xc7\x0d\x3f\xdc\ -\x2d\xa6\x1d\x74\x6f\xca\x70\x00\x45\xec\x95\xe9\xa7\xbf\x87\xe8\ -\x5b\x72\xfe\x97\xec\x58\xa0\x4d\x8d\xdc\x13\xec\x49\x1f\xea\x1e\ -\x10\x03\x10\x03\x90\x61\x03\x48\xfa\xa6\xfd\x52\x88\x78\xb8\x09\ -\xf7\x7c\x68\x8b\x5b\xd6\xb1\x50\xf4\x47\xb1\x6c\x8a\xcb\x26\xec\ -\xae\x85\xb1\xaa\xcf\xf3\xf0\xd7\x6e\xa8\x76\xb7\xff\xbf\xfd\x72\ -\x2a\x53\x06\x99\x85\x70\x3d\x68\xbe\x13\x99\x42\x80\xd8\xff\xa9\ -\xad\x89\x63\x1f\x9d\x3e\x08\xa5\x12\xa6\xbc\xb9\x57\x46\x1b\xbc\ -\x46\x3a\x68\x78\x95\x3f\xe7\x50\xa9\x99\xb3\x40\x5b\xaa\x68\x7a\ -\x4a\x19\x5d\xd6\x83\xa4\x54\x58\x05\xcc\x1a\x5e\x68\xba\x62\x5d\ -\xf5\x15\xcc\x91\x35\xf8\xff\xa7\xdf\x01\x08\x30\xe7\x23\x85\xe1\ -\xa2\xb2\x74\x69\x99\xe7\x90\x6c\x83\x7f\x47\xd9\xa0\xed\x9e\x06\ -\x31\xf2\xae\xff\xc1\xee\x7e\x67\x47\x86\x04\x20\xd7\x18\x80\x18\ -\x80\x0c\xd3\xc8\x46\x74\x23\xf9\xe8\x87\xba\x6b\xfb\x1b\x37\xba\ -\xca\xa5\x73\x43\x7f\x24\x3e\x68\xd6\x1f\xc9\x0c\x1b\xe7\xaa\x94\ -\x2b\xf4\x0e\x4c\x3b\x1e\x3c\x10\x50\x9a\x40\x9e\xe4\x6c\xe7\xb7\ -\x30\x99\x5e\xdf\xe7\x81\x03\x47\xc8\xef\xd6\xd4\xcd\x0b\x43\x89\ -\xa3\x70\x6d\xc8\x94\xaa\xd7\x56\x29\x8a\x46\x01\x76\x30\xc3\x90\ -\xb9\x04\x22\x38\xc7\x92\xc2\x32\xd1\x67\x29\xdf\xc6\xf2\x4f\x36\ -\x33\x91\x98\x7d\x40\x7b\xee\x6f\x4f\x39\x80\x41\xe9\x09\xa9\x9b\ -\x9d\x6f\xdf\x24\x70\x4b\xeb\xa5\xa5\x42\x16\xc5\xb5\x27\xd0\x28\ -\x29\x28\xd3\xfc\x08\x41\x04\x01\x1f\x59\xd5\x50\x76\x9f\x0f\x08\ -\x20\xd7\x19\x80\x18\x80\x8c\xd0\x62\x59\xeb\xc4\xa3\x1d\x6a\xb2\ -\x37\x3e\x7f\xad\xb6\xd0\xd1\xc4\x43\xe8\xcd\xd8\x5a\x99\x31\xca\ -\x58\x9c\x5b\x04\x16\xc3\x7a\xd8\x41\x64\x21\xc9\x7e\x11\xca\x47\ -\xc8\x59\x20\xf7\x8e\x33\x19\x2d\x05\x5a\x9c\x6d\xd5\x8a\x2a\xf5\ -\xcd\x76\xbe\x7d\xb3\xf6\x92\xf7\xd8\xf1\x3e\x0e\xca\x59\x30\xa1\ -\x08\x8c\x00\x91\xdd\xef\x6d\x14\x31\x01\x6a\x6d\x56\x32\x11\xb2\ -\x8f\xcb\x8a\xf5\xb9\x3c\x5b\x64\x3e\xbd\xb3\x04\x06\x04\x61\x43\ -\x12\xb4\xd1\xc7\x20\x3b\x55\xc0\xe6\x41\x8d\x63\xe2\xfc\x72\xcd\ -\x51\x00\x58\x73\xfd\x32\x9f\xa5\x6c\x13\x70\xa8\xd7\x91\x01\xe0\ -\x48\x03\x88\xbf\xa6\x6b\x4e\x2c\x33\x00\x31\x00\x69\xcb\x10\x90\ -\xb4\x6a\x4a\x16\x47\x05\xb7\x1c\x79\x71\x6e\xe2\x90\x56\x97\x5a\ -\x59\x6b\xa4\x65\x2c\x1f\xbd\xd7\x6e\xaa\xd1\x4c\x07\xe7\x9a\x52\ -\x21\xbb\x36\xce\xf6\x7b\xcc\x5e\xcc\x5b\x4d\x33\x76\x87\xb2\x10\ -\xd8\x74\xa5\xa9\xf2\x41\x65\x30\x23\x35\xf4\xb7\x16\x6e\xad\x55\ -\xb4\x8a\x54\xc8\x9c\x85\x73\x75\x4f\x8c\x37\xc5\x5b\xfa\x0a\x48\ -\xbf\x43\xef\xdd\x76\x4f\x83\xff\xfb\x55\x8a\xfa\x33\x0d\x22\x71\ -\x7b\x22\xbd\x45\x5d\xe7\x3e\x56\xd1\x32\x1c\x48\x4f\x69\xc9\xce\ -\x05\x5d\x41\x9a\xc0\xa3\x4c\x65\x64\x9e\xb7\x85\x5b\x6a\x03\x7d\ -\xdb\x67\x7e\xbc\xf6\xd0\xa9\x91\x95\xab\xfa\x05\x90\x1b\x0c\x40\ -\xf2\x13\x40\x1e\xcc\x3c\x80\xf4\x1e\x64\xe2\xe6\xed\xfc\xe0\x16\ -\xb7\x60\x73\xd8\xb9\x40\xe4\x66\x65\xad\x91\x35\xa4\xa9\x6f\xef\ -\xfd\x58\xb3\xbb\xfd\x3f\xf6\x2b\xba\xd4\x3c\xce\x20\x9c\x18\xaf\ -\x83\xce\xcb\x96\x3a\xb2\x90\x55\x57\x2f\x4d\x7e\x37\xcb\x83\x90\ -\x1e\x40\x70\xbc\xf4\x40\x00\x11\x18\x42\xb9\x38\x8d\x7e\xd6\x41\ -\xc3\xe2\xb0\xa0\x8b\xa6\xf1\x33\xdc\x61\xb7\xf1\x59\x41\x5a\xa6\ -\x24\x93\x83\x86\xa9\x50\xf2\x23\x7b\x87\x56\x8b\x38\x62\xda\xe9\ -\x27\x00\x70\x53\xd2\xef\x40\x7a\x05\x10\x63\x4e\x48\x3a\x59\x93\ -\x8b\x75\x3c\x15\x35\x73\xdc\x56\x7f\x9d\x91\x3a\xa1\xb4\x7c\x38\ -\x0b\xc0\x61\x19\x48\x1e\x03\x88\x1e\xe8\xe6\x5a\xb1\x79\xae\x79\ -\x70\xf8\x0c\x8c\xc1\x34\xda\x31\x9c\x06\xec\x10\xf6\x50\xb3\xaf\ -\x80\x9b\x1e\x6a\xa7\x95\xb5\x86\x31\x94\x57\x10\x76\x6b\x6c\x7b\ -\x7d\x83\xd6\xdd\x6e\x7f\xd3\x46\x05\x04\x64\x77\x67\xa5\x84\xfa\ -\xc8\x94\xe5\x41\xd7\x3e\xb4\x43\x8e\x85\x3d\xd8\x44\xd0\x5c\x8b\ -\x6c\x02\x3a\xce\x05\xa7\x7b\xc2\xdf\x07\x34\x7b\xc9\x4a\x47\x03\ -\xb8\xb2\x31\x8f\x03\xcb\x90\xc1\x42\x58\x6d\xcf\xf2\x99\xc8\x8a\ -\xc3\x4b\x94\x99\x64\xf2\x73\xd2\xe5\x46\xd6\xd1\x7e\xa9\xdb\xb3\ -\x74\xba\x4d\xc3\xa0\x94\x01\x21\x26\x40\x46\x28\x9b\x5d\xae\x63\ -\x9a\x92\x28\xec\x6e\x78\xc6\x2a\x65\x99\x37\xf9\xd7\x01\x40\x99\ -\x2c\x57\xf5\xae\x34\x50\xb2\xbe\xf3\x7f\x0f\xaa\x4f\x23\x42\x87\ -\x01\x48\x7e\x00\x88\xa6\x90\xfd\xc3\xbb\xf1\xd9\xdd\x9a\x6a\x5f\ -\xe9\x6a\x88\x67\xe3\x66\x23\xd3\x21\x1b\xa1\x6c\xc6\x4d\xce\x74\ -\x34\xd1\x52\x2e\x68\x0d\x8d\x2b\x00\x61\xae\xc3\x03\x06\x52\xed\ -\x37\xfd\xac\x43\x13\xc7\x64\x93\x33\x06\x33\x9c\x97\x4c\xb4\x33\ -\xbf\x83\x23\x07\xd8\x91\x36\x61\x4a\x3c\x9b\x3d\x09\x06\xe1\x70\ -\x32\x27\x7c\x44\xcc\x2c\x08\x92\x26\x80\x20\x8e\x6f\x3c\x6a\x93\ -\x01\xba\x1a\x34\x7c\xcd\x06\x65\x22\xf3\x37\xd6\x08\x54\x46\xba\ -\x7f\x9e\xe7\x80\xe0\x8e\x20\x8b\xbe\x07\xcf\x4a\x3a\x7b\xf0\xe0\ -\x71\xf2\x37\x7b\x7d\x10\xb6\x21\xa8\x05\x3f\x39\x48\xce\x33\x53\ -\x43\x5f\x6c\xf9\xde\x45\xda\xb7\xc2\xb4\xfa\xa8\x04\x85\x3f\x08\ -\xa4\x99\xd6\xd7\xd4\xbb\x8a\xda\x8a\xb3\x97\x51\x0d\x40\x26\x0e\ -\x80\x50\x2b\x8d\xec\x0c\x44\xd6\xb6\xbf\x65\xa3\xd2\x5d\x6d\x31\ -\xcb\x62\xba\x8b\xf4\x34\x74\x44\x6e\x72\x94\x59\xd9\x63\x80\xf3\ -\x9a\x16\x69\xbf\x56\xd6\x1a\x14\x08\xd0\x07\x59\x7f\xe7\xca\x34\ -\xf3\x0d\xe7\x3c\x98\xd9\x0a\xce\x2f\xfd\x08\xae\xf9\xb5\x0f\xed\ -\x54\xf9\xe1\xe0\xe7\x5b\x83\xb4\xc9\xf4\x2c\x51\x7a\x91\x31\xb9\ -\xa8\xd0\x35\xbf\x6c\xbd\x07\xac\x0e\x1f\x48\xb4\xbb\xe3\x3e\x03\ -\xe2\x18\xc8\x88\xc6\x63\x29\x53\xcb\xa8\xae\x08\x7d\xbd\xbd\x1f\ -\xd9\xe2\x6e\xfd\xfd\x7e\x37\x67\xc1\x1c\xdd\xc7\xc3\x0e\x86\x52\ -\x21\xb0\x63\x70\x70\xd7\x3b\x37\xab\xc4\xd8\x1d\x04\x08\xf2\x5a\ -\x5f\xbb\x41\xd7\x1e\x52\x42\xd8\xf9\x32\xd3\xcd\x5b\x53\xe5\x76\ -\xfc\xed\x26\xdd\x07\x7a\x7e\xc9\x38\x4e\x65\x07\x38\x78\x6f\xca\ -\xd2\xf4\x65\x3a\x3f\xb4\xc5\x2d\xd9\xbe\x20\xcd\x48\x23\x13\x32\ -\x00\xc9\x13\x00\x89\xce\x24\x46\x87\xdc\x94\x8b\xb7\xcd\xd7\xbe\ -\x86\x74\xc3\x2d\xcb\x37\x22\x8d\x5c\x6e\xfa\xdd\xef\x69\x94\x50\ -\xe0\x14\xd1\x7e\x4d\x16\x65\xb0\x3b\x42\x96\xf9\x88\x93\x0c\x82\ -\xa8\xbe\xee\xd6\x15\x83\xaf\x41\x17\x87\xdf\x6f\x7d\x55\xbd\x04\ -\x03\x89\xa2\x39\xef\xd9\xca\x40\x8a\x67\xa5\xd4\xe0\xc5\xc9\xb1\ -\x4a\x55\x35\x7c\xef\x80\xd6\xdf\xbe\x42\xfd\x84\xf1\x4a\xaa\x20\ -\x08\xc3\x71\xf2\xec\x30\x4c\x0b\x3b\x0b\x95\xe4\xe1\x4e\xab\x47\ -\x35\xe0\x35\xd7\x2d\xd5\xf9\xa1\x22\x10\x83\x2e\xfe\xce\xea\xdd\ -\x69\xe7\x14\xe8\xda\xc5\x60\xa1\xe9\xee\xba\x74\x05\x81\x0c\x25\ -\x6b\x15\x04\x0f\x64\x64\x43\xb1\x2c\xb6\xea\xea\x25\x9a\x51\x11\ -\x3d\xb8\x30\xa7\x06\x87\x0d\x40\xc6\x22\x9a\x8a\x35\x54\x1e\xf4\ -\x75\x27\x97\x8b\x3d\x45\xa3\x8e\x07\x23\x7b\x35\xd4\x90\x96\x43\ -\xed\xc4\xb1\x20\xcf\x51\x5e\x39\x3b\x1c\xc7\x14\xa3\xfd\x0e\xd8\ -\x53\x38\x77\x96\xab\xbb\x65\xb9\x32\x08\xf4\x91\xa8\xc7\x0f\x76\ -\xba\xbb\x34\x19\x48\x64\x0e\x84\x2d\x85\xab\x8e\x2d\xc9\x2a\x9d\ -\xb7\xc0\xdf\x53\x2c\x3f\x22\x38\x61\xab\xa2\x68\xa9\x3e\x03\xd9\ -\xff\xe9\xad\xca\x7c\xa8\xe5\x8f\x5b\x8d\x32\x06\x0d\x7d\xc6\x50\ -\x34\xbd\xc4\x1d\x7f\x78\x87\xca\x4e\xcc\x8b\xf0\x6f\x43\xb9\x7f\ -\x55\x8a\xf2\xd9\x0b\x59\x0c\xc1\x5b\x08\xe0\x82\xe3\xa6\x77\x78\ -\xc4\x9f\x33\x36\x51\x5e\x32\x69\x8a\xb2\x14\xc0\x17\x36\x1b\x65\ -\x48\x18\x8f\xd9\x2a\x57\xa9\xf4\xac\xcf\xe9\xd0\x35\xa3\xe4\x4d\ -\x00\x12\xa4\x8b\x72\xf2\x19\x35\x00\x19\x53\xfd\x1f\xff\x30\x4f\ -\x4e\x18\x3d\x38\x74\xa2\x1b\x52\xe9\x23\xa7\xb3\xdb\x1f\xe1\x21\ -\x20\x1b\x21\xca\xa9\x3b\xb9\x42\xf5\x71\x9c\x5a\x71\x81\xc9\xa2\ -\x9c\xd9\x03\x09\x94\x5c\x56\x93\x02\xbe\x48\x93\xac\xbb\x69\xb9\ -\x32\xc9\x21\xf5\xc0\x3c\x60\x74\xbc\xaf\x49\x25\x10\x51\x79\xb3\ -\x35\x4d\x7d\x59\x28\x6f\x30\xb7\xa0\x9a\x7e\x92\x85\x12\xcd\x12\ -\xc9\x4e\x1e\xe7\x8a\xce\x80\x48\xcc\x3a\x60\xc5\x31\x67\x41\x7f\ -\x02\x26\xd5\x60\xbe\x97\x44\x0d\xaf\x2c\x11\x3b\xb1\xf3\x03\x4d\ -\xca\x26\x22\x20\xf0\x5c\x50\xa6\x9c\x3d\xbf\xc2\x5d\x38\xe9\x4a\ -\xb7\x64\xd7\x42\x01\xaf\xaa\x04\x0f\x65\xaf\x4a\x10\xcb\xd8\x7c\ -\xf6\x0d\x8f\x76\xa8\x67\x86\x80\x27\xc0\x41\xe6\x91\xc3\x2c\x4a\ -\x03\x90\xb1\x2e\x8f\x44\xd9\x03\x6e\x96\x9a\xfa\x6a\xa5\xce\x44\ -\x3a\x80\x89\x6e\xec\x2c\x96\xb5\xa0\x2c\x92\xae\xb3\x78\x68\x51\ -\x5b\x10\xfc\x93\xec\x85\xc9\xa2\xf4\x50\xb6\xa5\xfe\xbe\xe3\x6d\ -\x9b\x54\xc2\x82\x8a\x4d\x36\x31\x63\x08\x0a\xb7\xcc\x60\x50\x36\ -\xa4\x7c\xa8\xf7\x9c\x99\x9d\xf2\x55\x2c\xcb\xa0\x66\x4b\xcf\x25\ -\x4d\x19\xf7\xd7\x9b\x66\x3a\xeb\x76\x01\x2f\x22\xf8\x71\xad\x96\ -\x5c\x16\xe6\x36\x98\xb3\x81\x95\xc4\xec\x05\x25\xc5\x82\x41\x0c\ -\x1a\x92\x85\x71\x8f\x6f\x7e\xfe\x5a\x81\x6a\x78\x16\xda\x74\xae\ -\x98\x30\x07\x64\x67\x4c\x29\x72\xdb\xde\xd8\xd0\xad\xcf\x91\xc5\ -\x3e\x65\x22\xc8\x08\x03\x0c\xe5\x02\x4a\xdb\xa2\xdf\x5f\x38\x2e\ -\xca\xcb\x06\x20\xb9\xc2\x34\x21\xd2\xa5\xbe\x4b\x64\xc4\x4e\x01\ -\x4a\x10\xdc\xd0\x34\xc1\xb3\xcd\xf0\x20\x6d\xa7\xb6\x4f\xe4\x83\ -\x12\x29\x75\x5f\x49\x47\xe4\xfb\xfc\x48\x2a\x2c\x97\xaa\x5c\x5a\ -\x99\x8e\x4e\x89\x5a\x01\x95\xe2\xc1\xee\xf7\x48\x05\x26\xd6\xc6\ -\xe7\xac\x51\x70\xa0\x46\x76\x71\x76\x9c\x2a\xa5\x32\x66\x12\x90\ -\xcd\xe8\x3d\x4d\x7d\x88\xc6\xb0\x77\x88\x2c\x6f\xea\x6b\x53\xde\ -\xb8\x9b\x11\x49\x85\x19\x11\x86\xf7\xee\x72\x47\xb4\xfb\x04\xba\ -\x7a\xe1\x00\x83\x86\x94\x13\x01\x0f\x82\x25\x4a\x91\x94\x8e\x35\ -\x3f\xe5\xb3\x8b\x13\x3f\xf2\xf7\xff\x1b\x36\x4a\xf3\xec\xd8\x7d\ -\x61\x7d\x6d\x56\x99\x92\x5f\x0c\x95\x00\x08\x2e\x5c\x2f\x86\x03\ -\x09\x54\x24\xe3\x52\x30\x6e\x06\x80\x0d\x40\x72\x6d\xfa\x36\xd2\ -\x6d\xa9\x79\x36\xdc\xb5\x4a\xca\x9d\x44\x4a\x44\x48\x59\xe5\x98\ -\xfb\x9b\x58\x83\x50\x3f\xd8\x2d\xc9\x0e\x00\x4d\x5c\x77\x1e\xc8\ -\x7c\xed\x8f\x24\x0d\xf4\x4d\x7f\x9a\xac\xa8\xf5\x19\x08\x3b\xc6\ -\x15\x1d\x16\x0f\xb6\x04\x16\xf6\x83\xc0\x1e\x82\x4e\x3d\x58\x59\ -\xf8\xa1\xde\x37\x64\x16\x34\xe7\x89\x62\x71\x8e\x67\x04\x1d\x1e\ -\x4c\x90\xe2\x80\x7a\x4a\x49\x2d\xdb\xb3\x28\xa3\x71\x6d\x18\xe8\ -\x63\x26\x04\x71\x41\x40\x04\x90\xe6\xef\xa2\x2b\xf7\xf1\xdd\x68\ -\x40\x73\x2d\x20\x34\xdc\xf8\x53\x00\x64\x5b\xd8\xd9\xe2\x1d\xf9\ -\x42\x1f\xf9\x53\x01\x88\x7b\xcf\xb3\xd9\x8b\xa4\x44\x4d\xe9\xec\ -\xba\x47\x76\xb9\x2d\x2f\xaa\xd3\xf3\x75\x65\xf2\xcc\x8f\xb3\x12\ -\xb2\x01\x48\x6e\xf7\x47\x66\xb8\xd9\x55\xb3\x25\x88\x47\x86\x80\ -\x03\xcb\xe6\x94\xab\xfa\x23\x5f\x6f\x0f\xac\x14\x0f\x28\x6b\x7d\ -\x54\x44\xa9\x46\xb2\x28\x79\x58\xd6\xe2\x1a\x00\x00\x50\x6f\xb5\ -\xae\xd4\x3f\xf4\x01\x04\x06\xdf\xff\x88\xcd\xcf\x43\x5f\x68\x75\ -\x0b\x9a\x6a\x45\xa3\xce\xb4\x23\x8d\xa4\x0c\x9c\x11\xb3\x2a\xfd\ -\x46\xcd\xfe\xdf\x91\xbc\xd9\xf0\x8c\x95\x63\xba\xb0\x29\x93\xcc\ -\x46\xa2\x75\x66\x42\xd0\xa7\x7a\x96\x3b\xea\x56\x1d\xed\x36\x68\ -\x98\x3a\xf3\x7a\x22\xcb\x7f\xd0\x5f\x0b\x16\x85\x51\xd6\x6b\x7c\ -\xc1\x5a\x39\xed\xa7\x4c\x9a\x1a\x80\x05\x86\x55\xb6\xca\xc6\x5f\ -\x0c\x6c\x48\x7a\x2a\x64\xfb\x95\xcb\x2a\x95\x45\xa9\xcf\x51\x36\ -\x2e\xb3\x7d\x03\x90\xdc\xee\x8f\x94\x2b\x62\xc2\x61\xcd\xdf\x18\ -\x6a\xe8\x0c\x37\x65\xb3\xa1\x97\x96\x8d\xff\xee\x4e\x65\x3e\xc8\ -\xa2\x2c\x6a\xa9\x95\x83\x1a\x27\x75\xd9\x8c\x66\x1f\x48\x97\x10\ -\xd1\x1f\xf9\x6a\x9b\xe4\xb8\xd1\x98\x7a\xf2\xa4\x29\x6a\xda\x96\ -\x9c\x6d\x96\x26\x29\x5f\xad\xbb\x71\xb9\xa2\x5c\x86\x38\xb1\x6c\ -\x68\x46\xad\x3c\xbc\x58\x8e\x49\x7d\x8f\x53\xfd\x5f\x5b\x86\xde\ -\xa8\xb9\xcf\x89\x0b\x9b\xca\xc7\x77\x76\xa9\x8d\x86\xd3\x53\x72\ -\xc4\x50\xa4\x9f\xe9\x41\x64\xf1\xf6\x05\x61\xd0\x30\xd5\xcd\x29\ -\xa3\xa4\x7c\x59\x91\x98\x87\x94\x6c\x29\x45\xce\x53\xb9\x76\x96\ -\xc0\xb4\x8a\x32\xa5\x0f\x9e\x8e\x0d\x63\xcd\xec\xd9\x9f\xa7\x20\ -\x0f\x7f\x8b\x7f\x76\x29\x4d\xd3\x9c\xa7\xdc\x98\x96\xd9\x1f\xbf\ -\xcf\x93\x01\xc8\x78\x28\x6b\xc5\x72\x12\x8a\xa1\x48\x54\x10\xc9\ -\x90\x25\x68\x31\x4d\x36\x69\xbf\xfe\xe6\x87\x75\x44\x59\x0b\x4d\ -\xa7\xca\x25\x21\x62\xa2\x56\x3b\xd1\xfb\x23\x44\xf5\x44\x86\x28\ -\xc1\x4a\xdf\xe8\xcb\xa1\xd1\xca\xd0\x19\x59\x08\x7d\x11\x4d\x25\ -\x9f\x9b\xd4\xac\x53\xfd\xbf\x07\x4e\x69\xdb\x3d\x1b\x82\x9c\x48\ -\x06\xcf\x59\x60\x24\xcd\x74\xf3\x56\x56\x89\x9a\x9d\x0e\x2c\xce\ -\x52\x7b\x27\x93\x45\xdb\x8b\xeb\x48\x83\x7f\xbc\x33\xef\x34\x68\ -\x78\x79\xe8\x1f\xb0\x83\x9e\xfd\x2d\x95\x4b\xe6\xea\xfa\xf0\xdd\ -\x30\xca\x76\x9c\x7f\xa6\xce\xe9\x37\xc0\xc4\x52\x26\x59\x1c\xfa\ -\x5c\x0b\x7d\x90\xa4\x35\xb3\x5f\xcd\xec\x33\x44\x99\x0c\x5a\x2e\ -\xf7\x00\xf4\x6f\x02\x88\xc9\x49\x99\x6d\x02\x94\x86\x0d\x40\xc6\ -\xd3\x43\xc2\x42\xa2\x70\xf3\xa5\xc4\x11\x27\x1d\x46\x25\x14\x8d\ -\x9c\x6c\x36\xfb\x24\x8b\xe2\xb3\x11\x1c\x54\xc3\x33\x57\xbb\xa2\ -\x64\x87\x35\xfd\x9a\x09\x59\xd6\x4a\x66\x37\x68\xd0\x22\x95\x1f\ -\x77\x57\xa7\x19\x33\xbf\xdc\x23\xf0\x66\x6d\x2d\x19\x09\x99\x19\ -\xce\xa8\xb7\x4c\x0c\x4e\x82\x92\x09\xb3\x1f\x50\x6b\x8b\xae\xca\ -\x5c\xf6\x81\x98\x1f\x02\x89\xbc\x27\x91\xb3\xa6\xdc\xbf\xd0\x3a\ -\xe8\x52\x25\xdf\x81\x92\x0d\x4e\xb6\xbf\x9e\xc1\x78\x1c\x34\xe4\ -\x3a\x40\xbd\xbd\xf3\xbf\x0f\x28\xdb\x98\x96\x30\x9a\x50\x04\x40\ -\x4d\x60\xf7\xbb\x13\x69\xf8\xcb\xbb\x68\xbf\x9c\x83\xa5\xbb\x17\ -\x8a\xf9\x18\x07\x0a\x47\x4c\xcb\xfd\x72\x90\x1f\xe1\xf9\xdc\xf2\ -\xe2\x3a\x5d\x7f\x9e\x5d\x56\xf7\x4e\xa0\x9e\xa2\x01\xc8\x78\x2c\ -\x6b\xc5\xa9\xd4\x39\x0b\xe7\x68\xa1\x14\x8d\xc0\x1b\x7c\x5a\xde\ -\x7d\xe1\x54\x56\xa6\x63\x1f\xdc\xae\xcc\x87\x19\x03\xd8\x3c\x38\ -\x59\x9c\xd8\x44\x93\x8d\xe7\xbb\x90\x69\x35\xbe\x60\x5d\x9f\xab\ -\x4d\x39\xc7\x44\x94\xd4\xcb\x71\x3a\x3b\xdf\xb1\x59\xe7\x23\x5e\ -\x97\xd8\x0c\x8d\xe7\x84\xf3\x14\xe5\xbf\x33\xe5\x2c\x35\xfb\x70\ -\x71\xa1\xeb\x7c\x7f\x32\xcb\x70\x6f\xeb\x90\xca\x2a\x80\x22\xdf\ -\x8d\xe3\xbe\x32\xea\x4a\x95\x8c\x7f\x10\x81\xe5\x46\xaf\x43\xbb\ -\xca\xff\x79\x97\x2b\x9f\x33\xdb\x55\xad\xaa\x52\xf9\x97\x41\x4e\ -\xa8\xeb\x00\x0b\xd9\x57\xd7\xa0\x68\x81\xab\xf7\xe0\xc2\x0c\x56\ -\x26\xca\x55\xec\x3c\xa7\xfc\xcb\xdc\x0f\x8d\x79\x40\x8c\x59\xa2\ -\x09\x58\xfe\x35\x00\x19\xaf\x0e\x4e\x8e\xc9\x3b\x6f\x1e\x18\xf6\ -\x2d\xb3\xe2\x16\x20\xe1\xc1\xc9\xee\xfc\x48\x9b\xb8\xf1\xec\x67\ -\xdf\xf1\xf6\x4d\xe1\x01\x49\xc4\xe6\x26\xca\x03\x42\x39\x04\xf2\ -\x42\xd4\x12\x3b\x1b\x7b\x8d\x28\x13\x27\xde\xf1\xde\x26\x89\xec\ -\x31\xc5\xac\x68\x73\x72\x49\xc6\x4b\x7d\x22\x58\x5c\x59\xa2\x73\ -\x4e\x59\x91\x9e\xd8\x70\xca\x98\x92\xb7\x79\x24\xcc\x8a\x94\x55\ -\x00\x48\x45\x13\x62\x88\x14\xc0\xa0\xff\x41\x69\x6a\xc7\x5b\x37\ -\xb9\xea\xf5\xf3\xdc\xe1\x2f\xb6\xb9\x3b\x7c\x46\xc2\x77\xa6\x8f\ -\x05\x4d\x3e\x2d\x45\x13\x69\xd6\x7f\xb2\x5a\xcf\xcf\x48\x02\xac\ -\x6b\x62\x80\xe5\x33\x41\x9a\xf9\x31\x23\x0a\x01\xd6\x84\x64\x32\ -\x1a\x80\x8c\xf7\xb2\x16\xe5\x07\xad\xb3\xbd\xa4\x48\xac\x29\x95\ -\x9b\x7e\xb9\x27\x6c\x42\xfb\x62\x76\xa5\xa5\x89\xd8\xa8\xa7\x2b\ -\x45\x2f\x0f\xc3\x5d\x72\x9a\xe3\x79\xd2\x39\x69\x4a\xd7\xdd\xb6\ -\xc2\xdd\xfc\xab\x3d\x83\x72\xce\x51\x26\x26\xe8\x24\x75\xaa\xbf\ -\xb0\xe6\xf8\x52\xf5\xae\x00\x12\x4d\x49\x97\x8e\x1c\x5c\x89\xb0\ -\xa1\xdf\xe2\x20\xb7\xbe\x62\xbd\x66\x08\x46\xb2\x63\x9b\xfb\x43\ -\x8c\xa0\xd7\x37\x04\x25\x82\x71\xa8\xd6\xdb\xe3\x59\x98\x19\x9a\ -\xe9\x64\x80\x1b\x9f\xb3\x5a\x94\xeb\xcb\x26\x4d\x77\xd5\x0d\xf3\ -\xd4\x23\x22\xfb\x20\xf0\xa1\x17\x11\xe5\xd0\xb9\x46\x94\xb8\x9a\ -\x5e\xb4\x4e\x4a\x03\xc3\x2f\xf1\xee\xd1\xfb\x53\xe2\x2d\x4c\x4a\ -\xbc\x0c\x6c\x4e\x70\x0a\xbc\x01\xc8\xc4\xc8\x48\xca\xc5\x44\x99\ -\x92\xc8\x54\x30\xc7\x41\x26\xa2\x88\x2a\xdb\xb2\x28\x5f\x0f\xa5\ -\x1c\x7e\xae\xbf\x63\xa5\xe6\x46\xc6\x73\x93\x90\x3e\x06\x7a\x52\ -\xbb\xdf\xd3\xa4\x4c\x6b\xc8\x83\x99\x5f\x0e\x25\x0c\x1c\xf3\xfe\ -\x4f\x6d\x95\xf0\x22\x8b\x88\x38\x27\x1a\x22\x1c\x26\xeb\x46\x12\ -\x1c\x0c\x9a\xf9\xac\x93\xc5\x4a\x9c\xf3\x01\x19\x57\x83\x34\xcd\ -\xff\x3c\xde\xe9\xa3\xf2\x85\xe3\x72\xc0\x30\x66\xe3\x61\x79\x5a\ -\x91\x5b\xb6\x2f\x0c\xe1\x72\xef\xb3\x7f\x67\xeb\xcb\xd6\xbb\x0b\ -\x26\x5d\xe1\x6a\x36\xcc\x13\xe0\xde\xe2\xff\xad\xf9\xa5\x75\x02\ -\x0d\x58\x74\xa8\x02\x90\x31\xee\x7a\xd7\x66\x77\xfc\x9f\x76\x0d\ -\x79\x08\x37\x92\x4c\xf8\x9c\x70\x9d\x67\x76\x4d\xc4\x4f\x7c\xb6\ -\xa2\x01\xc8\x84\xeb\x8f\x5c\x56\xac\x08\x7a\xde\xaa\x2a\xb7\xdd\ -\xa7\xf0\x0c\xc0\x51\x0b\xce\x36\xed\x17\xe1\x3e\x1e\xd8\x7d\x9f\ -\xd8\xaa\x92\xda\xf4\xf3\x0b\xd3\x34\xc5\xf1\x22\x1b\x8f\x33\xc2\ -\x11\x2d\x6e\x5f\x10\xea\xe1\xa7\x47\x70\x4e\x4e\x05\x11\x43\x9c\ -\x16\x8e\x9e\xc8\x14\x49\x75\x4a\x27\x64\x8c\xec\x73\x18\x6c\xdf\ -\x08\xa7\x1e\xfa\x2b\x33\x5c\xf3\x4b\xd6\xbb\x5b\x7e\xb7\x37\x19\ -\x2c\xcd\x4c\x10\x40\x29\x8b\x63\x86\x4d\x96\x56\x20\x18\x27\xf7\ -\x3b\xa5\xd3\xb8\x26\x01\xb9\x19\xb2\x6f\xc9\x8f\x90\x7d\xfb\xeb\ -\xc7\xbc\xc7\xa6\xe7\xac\x71\xe7\x4f\xba\xdc\x2d\x3f\xb0\xd8\xdd\ -\xfa\x6f\xfb\xb4\xd8\xab\x24\x99\xd1\x41\xff\xad\x70\x72\x50\x2f\ -\x1e\x6c\xc0\x10\xc9\x14\x27\xfd\x67\xd1\xe7\x98\xbf\xb9\x46\xe0\ -\x3b\x91\xca\xb8\x06\x20\xf9\x06\x20\xbd\x64\x1e\x90\x45\xa1\x39\ -\x48\x93\x54\x82\x70\xbf\xcc\xbe\x2c\x8a\x9c\x91\x7f\x08\x49\xe7\ -\xdb\xdf\xb0\xd1\x55\x2d\xaf\xd4\xc3\x2d\xaa\xe8\x38\x88\x6c\x4b\ -\x8a\x4b\x15\xe1\xd3\x5b\x60\x70\x33\x13\x80\xcb\x39\x81\xb1\xc5\ -\xf9\x67\x18\x91\x72\xdf\xb2\xce\x85\x69\x3d\x27\x3e\x0f\x47\xd6\ -\xef\x0a\x80\xa8\xc6\xea\xb3\xa2\xb6\x7b\x36\x28\xe2\xcd\x44\xe6\ -\x71\x46\x29\xcb\x1f\x1f\xfa\x50\x39\xb2\xe9\xee\xec\x8c\xc4\xa9\ -\x41\x88\x94\x55\xb4\x8d\xcf\x5f\x17\xa4\xf6\x7f\xb2\xbb\x07\x91\ -\x04\x10\x47\xae\x84\xfb\x91\x9e\xc4\x39\x93\x2e\xf5\x40\xbe\x4a\ -\xb2\xfa\x0b\x9b\x6b\xb5\x4c\x2a\x66\x20\x10\x21\xae\x3b\x4b\x06\ -\x22\xf9\x91\x6f\xb6\xa7\x4b\x87\x50\xea\x67\x5c\x5c\x94\xa6\x03\ -\xe7\xa1\x7e\x5c\x5e\x00\xc8\x67\xf3\x51\x86\x43\xb2\x28\xb3\x4a\ -\xd3\x35\x61\x14\x64\xe3\x8e\x01\x69\x00\x65\x53\xaa\xe1\x2b\x41\ -\xaa\x81\xba\x33\x4c\xa6\xb0\xdb\x7a\x86\x6a\xc3\x39\x1b\xdd\x26\ -\xa0\x5b\xbd\x6e\x9e\xbb\xee\xbb\x3b\x75\x8e\xb2\x51\xee\x03\x00\ -\x00\x27\xca\x5b\xac\x51\x25\x5b\x23\xf2\x17\xe0\x27\x94\x53\xb2\ -\x13\x1c\x5b\x8c\xae\xe7\x6f\xaa\x56\x10\x40\x59\x86\x92\x53\x36\ -\xae\x1d\xac\x32\x7a\x38\x55\x2b\x2a\xa5\x34\x9c\x8b\x80\x1f\xef\ -\x69\xf5\xda\xae\x28\x16\x73\xea\xea\x6f\xb6\x8b\x62\xde\xdf\x3d\ -\x2d\x00\xf7\xf7\xbd\x18\x67\x07\x17\xbb\x8b\x26\x4d\x76\xdb\xdf\ -\xbc\x51\x40\x42\x36\x08\x10\xa5\xfc\xfb\xee\xf9\x70\xb3\x32\xc6\ -\x7e\xef\xe9\x44\xce\x9d\x6c\x0d\xbd\xac\x54\x22\xa3\x02\x8d\x3a\ -\x8f\x57\x21\xdc\x9f\x0f\x00\xf2\xdd\x7c\x56\x93\xed\x21\x8b\x32\ -\xaf\x42\x11\x30\x8e\x82\x88\xed\xc8\xe9\xec\x8b\xc5\xf1\xe0\xf2\ -\x77\xf6\x72\x93\x89\x48\x2c\xae\x30\x37\x69\xbf\x69\xdd\xab\x9f\ -\x77\x66\xed\xbc\xc4\xcc\x21\x6e\x9a\xa3\xbc\x88\xf3\x6a\x7e\x59\ -\x9d\xab\xbb\x65\x85\x14\x07\x88\xaa\xb9\x66\xd0\xb4\x25\xf3\xef\ -\x5f\xc3\x30\x63\xd6\xca\x90\x89\xa3\xa5\x89\xbc\xf3\x9d\x9b\x93\ -\x9d\x1b\xa9\xdc\x29\xc5\xa4\xba\x66\x73\xc8\xd8\x00\xdd\xbd\x1f\ -\x6d\xd6\xbd\x45\xe3\xfa\x6c\x59\xb5\x04\x13\xbf\xb3\x43\x00\x5c\ -\xb5\xba\x4a\xcf\x42\xed\xc6\x1a\xf5\xbb\x44\xaf\xf6\xcf\x08\xc4\ -\x07\x09\x50\xf6\x31\xcf\x11\xd6\x2c\xec\xd6\xdc\x0f\x03\xa4\x3d\ -\xe4\x47\xf2\x5b\xad\xfa\x89\x7c\x00\x90\x5d\xde\xfe\x25\xdf\xb7\ -\xea\x49\x16\x25\x19\x78\x43\x71\x97\x94\x9d\x88\x0a\xc9\x92\xac\ -\xc9\x55\x27\xfa\x3f\x92\x45\xf1\xce\x72\xdf\x27\x9a\xdd\xa2\xd6\ -\xf9\x41\x16\xe5\xa2\xe1\x37\x94\xb3\x71\x7e\xe0\xe9\xa3\x4d\x74\ -\xcd\xb7\x76\x64\x5e\xce\x62\xa0\x79\x8c\xaf\x6c\x53\xe4\x8b\x88\ -\x1f\xd9\x09\x0e\x91\x26\x30\x4d\x5d\x2d\x17\xa2\x59\xfe\xf5\xec\ -\x31\xea\x7a\x1b\x5a\x59\x0c\x3e\x4e\xc9\x85\xed\x85\xc9\xba\x03\ -\x68\xd5\x38\x7d\x9c\xb7\xd6\x41\xfb\x73\x22\x40\x1d\x82\x2e\x1c\ -\x94\x6c\x56\xfb\xf2\xbb\x48\x98\xc0\xce\x02\xa8\x79\x6f\x16\x4b\ -\xf1\x3e\x64\x33\x3d\xd6\xc9\x26\xa0\xb3\xe7\x23\x5b\xdc\x82\xc6\ -\x1a\x6d\x28\x24\x53\xb4\x2d\x9e\xb2\xff\xf3\x76\x4b\x3e\x00\x08\ -\x76\xb9\xb7\x97\xe7\xfb\x6e\x0b\xc9\xc6\x17\x87\xc1\x29\xc0\x64\ -\xf9\xfe\x45\x02\x0f\x9c\x7b\x36\xfb\x23\xe9\x85\x39\x3e\xeb\xc1\ -\xda\x5e\xb7\x41\x5a\x4c\x53\xd2\xb2\xf1\x63\xfc\x40\x6a\x8f\xc6\ -\x4c\x31\xa6\xa8\x97\x0f\x94\x7d\x50\x42\xc2\xb1\x0f\xbb\xc1\x7e\ -\x96\xcc\x84\xfe\x06\xd7\x82\x52\x89\xa8\xd8\xa7\xda\x46\x07\xcc\ -\x92\xeb\x74\xfc\xa1\x50\xbe\x8b\x7b\x6a\xc6\x8a\x00\xa1\xcc\x79\ -\x4a\x49\x7a\x8d\x6b\x64\x16\x22\x0b\x12\x94\x17\x86\x7e\xaf\x32\ -\x00\x7b\x83\xcf\x26\x00\x06\x14\x02\xa0\x43\x5f\xee\x0d\x35\x01\ -\xfe\x1d\x19\x13\x0d\xcc\x3e\x10\xe6\x39\x38\xff\xac\xbc\x4d\xcf\ -\x73\x14\x96\xda\x9e\x9c\x60\xef\xf3\x56\x8a\x6f\xcd\x17\x00\x89\ -\x36\xdf\xdb\xc7\x0c\x48\xca\x95\xbe\x53\xb2\x29\x9a\x59\xea\x36\ -\x3c\x7d\x65\x7a\x08\x0a\xed\x9e\xac\x01\x49\xc2\x99\x87\x19\x46\ -\x09\x27\xd6\x92\xa7\x8e\xa5\x6c\xbc\x77\x90\x0c\xe6\x31\x43\x40\ -\xe4\x8f\x03\x8d\x2c\x2a\xc0\x82\x8c\x00\x62\x80\x9a\xb4\x3f\xee\ -\x90\x13\xe3\xdf\x88\x80\x35\x07\xe3\x7f\x22\x77\xa2\xed\x7f\xa7\ -\xb3\xa7\x94\x3c\x6a\x20\xf2\xa5\xa0\xb3\xd6\xf4\x97\xeb\x82\xf3\ -\x2e\x1a\x83\x20\xa7\xb0\x54\x0e\x1b\x3a\xec\xea\xeb\x96\xa5\xf7\ -\xba\x4b\xfb\x6d\x84\xf7\x26\x20\x42\x49\x8a\x6b\xc5\xe2\xad\xab\ -\x26\x17\xba\xc6\x17\xae\x0d\x25\x5d\x7a\x77\x8f\x87\x6b\xdc\xf8\ -\xe7\x6b\xd3\xb3\x4d\xb1\xcc\x65\xc0\x51\x76\xbf\xb7\x4d\xdd\x7d\ -\x6a\xbe\x01\x48\xb4\x56\x6f\xdf\xb1\xb2\x56\xb9\x24\x1d\x28\x0f\ -\xb0\x88\xa8\xed\x35\x1b\xd2\x6b\x75\xb3\x2a\x8b\xf2\xa5\x2e\x59\ -\x14\xa2\xf9\x15\x87\x16\xab\x61\xac\xfe\xc8\x28\xcb\xa2\x04\xea\ -\xee\x4c\xb7\xea\xea\xa5\x41\x12\x24\x2e\xd9\xf2\xe7\x81\xde\x03\ -\xcd\x6e\x26\x9a\x5b\x5f\x59\x2f\xa7\xba\x60\x4b\xad\x4a\x80\xf4\ -\x2b\xb6\xfe\xd5\x7a\x19\x32\x19\x4c\x1f\x03\x26\xbc\x07\xe0\x28\ -\x4d\xa5\xf1\x08\x26\xa7\x92\x86\xba\xff\xee\xb5\x1b\xaa\xd3\xeb\ -\x63\x47\xab\xcf\xc1\xac\x0c\xf4\xef\xf9\x9b\x6a\xb4\x29\x93\x8c\ -\x50\xea\x0a\x19\x2c\xb3\x02\x22\x94\x55\xb1\x03\xf7\xb6\x28\x50\ -\x40\xa1\x97\x32\x22\x0d\xf6\xaa\x28\xb3\x9e\x0b\xd9\x71\x6e\xd8\ -\xe3\xde\x4e\xf4\xe5\x4b\xf3\x15\x40\xa2\x3d\xc7\xdb\xbf\x1a\x90\ -\x94\x69\x19\x91\x64\xe3\x37\x55\x6b\x45\x28\x0d\x4a\xca\x28\xd9\ -\xa5\xfd\x86\x59\x09\xea\xcc\x88\xdc\xb1\x2a\x56\x03\x61\xde\x89\ -\x8c\xc6\x83\x4b\x79\x46\x2b\x5e\x7d\x36\x06\x00\x48\x8d\xf5\x2b\ -\xc1\x81\x02\x0c\x15\xb5\x73\x04\xb0\xb0\xd8\xa0\x6b\x4a\xfb\xeb\ -\xfc\x20\x1f\xa3\xed\x91\x17\x84\x5d\xdc\x64\x4f\xb3\x2b\x2b\xdc\ -\x4a\x0f\x84\x34\xc3\x71\x7c\x48\x66\xe0\x90\x60\x5e\x65\x8b\xf1\ -\x96\xb5\x2c\xe4\x8b\x01\x0c\x99\xe9\xa1\x99\x5f\x30\x39\xbb\xcb\ -\xa7\x24\x84\x98\xe8\x88\x55\x54\xcf\x11\x8d\x9a\x73\x07\x88\x65\ -\x6b\xff\x4d\x54\x0f\xe0\x7b\xa2\x91\x75\xe0\xd3\x5b\xdd\xd2\xce\ -\x85\xba\xff\xb8\xc6\xd6\xe7\x48\xdb\x3d\xde\x2e\xea\xcf\x87\xe6\ -\x3b\x80\x60\xd3\xbd\xbd\x26\xef\xcb\x5a\xa9\x64\x5f\x34\xba\x56\ -\xde\x29\xb2\x5f\x02\xa7\x8a\xd6\x12\xe5\x99\xac\xf6\x47\x4e\x27\ -\xfd\x11\xff\x30\x23\xd1\x01\xfb\x28\x68\x49\x65\x7f\x7e\x84\xec\ -\x03\x69\x0b\xca\x6a\x87\x13\xba\xe6\xb5\x1e\x48\x50\xaa\xa5\xc4\ -\x41\x69\x8b\x5a\x39\xec\x1f\x4d\xd7\x47\x60\x2b\x0e\x46\xb9\x85\ -\xd7\xc4\x75\xa4\xf4\x97\xa0\xe5\x2e\xd9\xbe\xc0\x3b\xc2\xf5\xca\ -\xb4\x00\x63\x40\x69\x3c\x01\x09\xd7\x85\xd9\x90\x0d\x77\xad\x0a\ -\xda\x52\x59\xdc\xc0\xa9\x05\x50\xfe\x5c\xd2\xe7\x90\xdc\x48\x32\ -\x65\x9f\xcd\x0d\x9c\xda\x81\xfe\xab\x70\x5d\x90\xad\x61\x16\x44\ -\x0a\xd3\xb3\x26\xac\x6e\xd5\x50\xed\x3d\xde\x6a\xcf\xe6\x3f\x0d\ -\x40\xba\xac\xce\xdb\xa7\xad\x3f\x12\x64\xc7\x51\x68\xa5\xfe\x0d\ -\xad\x55\xfd\x91\xc7\xb3\x37\x83\xd0\xfd\xa1\x66\x4e\x05\x27\xb2\ -\xde\x3f\xd4\x51\x9e\x25\x1b\x0f\x35\x80\x09\x50\x22\xbe\x07\xfb\ -\x86\xc6\xaa\x7a\x34\xf7\xb7\xab\xac\x46\x79\xed\x19\xee\x88\xb2\ -\x12\x7a\x35\xb5\x1b\xab\x45\x43\x8e\x33\x08\x7d\x46\xa8\xc9\xdf\ -\xa9\x99\x87\x89\xf3\x59\x52\x04\x80\x3a\x7d\x2d\x8e\xf1\xf1\x50\ -\xb2\x1b\x17\x40\x42\x29\xeb\x9b\x61\x36\x84\xac\x14\x40\x2f\xcb\ -\x94\x9a\x70\x02\xc0\x94\xaa\x28\x5d\x32\x58\x09\x4b\x8a\x4c\xe0\ -\xea\x07\xb2\x08\xb4\x49\x26\x03\x5d\x99\xef\x85\x56\x56\x45\x75\ -\x85\x00\x52\xca\x00\xd6\xe7\xc0\x1e\xf4\xb6\x7b\xb0\x7e\xd3\x00\ -\xe4\x4c\xdb\xe9\xed\xfb\x79\x0f\x24\xe5\xe5\x69\xfa\xe4\x6c\xff\ -\x90\xb5\xbc\xb2\xbe\x9b\x2c\x4a\x16\xd7\xea\x7e\xb1\x6b\xf0\x8b\ -\xfd\xdd\x30\xc5\x50\x1d\xce\x38\x7d\x32\x69\xde\x33\x67\x41\xe3\ -\x54\x4a\xad\xff\xec\x33\x8f\x57\xd7\xbb\xb2\xd9\xb3\x5d\xed\xa6\ -\x1a\xb7\xe2\xc0\x62\xd1\x9d\x6f\xfb\xc3\x7e\x77\xc7\x7f\x1e\xd0\ -\xbe\x71\x36\x14\xb2\xdb\x01\x70\x00\x24\xfa\x9d\x97\x48\x9c\x24\ -\x74\x65\x49\xef\x2f\x98\xe3\x1a\x5f\xb8\x2e\x94\x66\x7e\x90\xdd\ -\x73\x98\xc9\x6b\xc1\xf5\xe6\x7a\x70\x3f\x90\x85\x8d\x48\x92\x3e\ -\x15\xd8\x55\x94\x03\x39\x27\xb5\x0d\xd5\x6e\xf7\xbb\x1a\x15\x34\ -\x88\x4e\x7e\x6f\x16\xcb\xa5\x51\x7e\xc4\x67\x1d\xc8\x96\x00\xec\ -\x1c\x03\x00\x36\x4e\xd7\xc9\x66\xda\xfe\xbd\xbf\x3e\x87\x01\xc8\ -\xd0\xed\x02\x6f\x4f\xcb\xfb\x68\x24\xe9\x8f\x20\xf9\x40\xb4\xc8\ -\x82\xa5\x3d\x1f\x6d\xd6\x43\xa8\x88\x3d\xcb\xfa\x5a\x38\x2f\xca\ -\x19\x0c\xb7\xa1\x75\x24\x65\xdb\x4b\x8b\x46\x0c\x24\x38\x41\x9a\ -\xa4\x35\xeb\xe7\xa9\x6c\x46\x9f\x82\xcf\xe4\xb3\xc8\xb8\x2e\x9f\ -\x34\x5d\x5a\x5e\xa2\x19\xfb\x2c\x05\x49\x16\x26\xf9\xc9\x4e\x9e\ -\xe1\x0e\xab\x37\x44\x9d\x1e\x59\x70\xb2\x35\xd5\xcd\x3d\xc0\x69\ -\x87\x7a\x61\xaf\xe5\x4c\xdd\xa4\x65\xe2\x6a\x62\xd6\x04\x6b\x29\ -\x55\x16\x4b\x83\x99\x32\x1a\xce\xf4\xa8\x38\x66\xce\x85\xd4\x96\ -\x53\xc3\x23\x2b\x14\x4e\xe9\x1a\x68\x6d\x79\x45\xbd\xae\x2f\xb3\ -\x2f\x87\xb3\x3c\xd0\x4a\x06\x8d\x4e\x1b\x7f\x46\xda\x07\xd0\x88\ -\x7b\xed\x8d\x96\x2b\xfb\x6b\x6f\x05\xc3\xf1\x95\x06\x20\x03\x5b\ -\x95\xb7\xb7\x5a\x59\xab\x5c\x8e\x31\xca\xb5\xaf\xbd\x71\xb9\xca\ -\x59\x38\x16\xd5\xf6\xbf\x98\xc5\xb5\xba\xde\xb9\x68\xcf\x89\x8f\ -\x50\x37\x3f\x6f\xad\x86\xbf\x78\xf8\x0b\xa7\x94\x0c\xaf\xac\x05\ -\x6d\x97\xc6\xb0\xff\xfd\xbd\x1f\xd9\xa2\xde\x4b\x3c\x7e\xb4\x94\ -\x90\x17\x11\xe7\xbf\xb8\xeb\x7b\xe3\x70\x26\x27\xb2\x15\x6c\xae\ -\xeb\x78\x4f\xa3\xb2\x92\x3b\xff\xe7\xa0\x3b\xf0\xb9\x16\x51\x3e\ -\x17\x6f\x9b\xaf\xcc\x25\xce\x0c\x00\x74\xd4\xf7\x23\x0d\x36\xac\ -\x26\x0e\xe7\x90\xcc\x0e\xe5\xe2\x6b\x1f\xda\x19\xd6\xe5\x9e\xca\ -\xed\x6c\x84\xeb\x80\x28\xe1\xfa\xdb\x57\xea\x3c\x0c\x05\xbc\x63\ -\x9f\x23\xca\x86\xac\xbb\x79\x79\x5a\x4f\x2a\xab\x94\xf1\xa4\x24\ -\x4a\xd9\x10\xfa\x2f\x6b\x88\xd3\xf2\x23\x33\x52\x56\xae\x0a\xf6\ -\xd9\xa4\x74\x3f\x6c\x1f\x69\x00\x32\x38\x5b\x9a\x70\xa0\xf3\x1b\ -\x48\x92\xe1\xae\xc9\x89\xe0\x1e\x4d\xcf\xd1\x8a\x22\x8f\x3d\xd0\ -\x9e\x9e\x05\xa8\xbb\x65\xb9\xa2\xe1\x69\xc3\x1c\xee\xc2\x09\x72\ -\xec\xd4\xdc\xbb\x3b\xb0\x1b\x1e\xed\x10\x80\xe0\xe4\xc9\x18\xd0\ -\xee\x8a\x19\x84\x7a\x43\x49\x4f\x86\xcf\x9e\xbb\x68\xae\xdb\xf8\ -\x27\x6b\x24\xc0\xf7\x74\x9f\x95\xe0\x60\x0f\x7e\xbe\xd5\xb5\xbf\ -\xa1\xc1\xad\x3d\xb1\x4c\x25\x2b\x00\x47\xf4\x64\x36\xd2\x5d\x5c\ -\x28\xd0\x43\xfd\x15\x70\xe1\x18\x18\xa6\x8c\x8b\xc0\x42\x6f\x24\ -\x77\xfb\x21\xf4\x26\xf8\xae\x68\x65\xc5\x5d\xe3\x67\xa5\xe5\x26\ -\xdb\x18\xc9\x5e\xc9\xd6\x38\x3f\x7c\x57\x65\xaf\xf7\x66\x77\x68\ -\xf5\xfa\x1f\x84\x39\x1d\x88\x0c\x6c\x20\xe4\x7c\x8f\x17\x51\xcf\ -\x51\xb0\x9f\x7a\xdb\x96\x09\xdf\x68\x00\x32\x34\x3b\xea\xed\x37\ -\x56\xd6\x0a\x53\xca\x38\x53\x1c\x0a\x35\x65\x1c\x83\x06\xb4\x4e\ -\xb5\x65\x75\x1b\x22\x33\x16\x94\x9a\xa0\xca\x2e\x6c\x99\xaf\xc8\ -\x56\xb4\xcb\x41\x94\x23\x70\x1e\x64\x07\x94\xae\x18\x0e\x24\x12\ -\xee\x7e\xac\x4c\x38\xa3\x0f\xb6\xe7\xc3\x5b\xd4\xd8\x25\x53\xe1\ -\xfd\xf9\xae\x51\x6d\x55\x83\x6e\x1e\x04\x98\xe4\xc7\x91\xd2\x58\ -\x66\x79\x14\x32\x2d\x44\xd5\x4f\xfd\xbf\x83\x69\xfd\x2f\x36\x14\ -\xd2\x3b\x5a\x7d\xcd\x52\xd5\xdc\xcb\x7d\xf6\x04\x80\xf0\xbe\xfc\ -\xfe\x93\x27\x4d\x76\x97\x4d\x9a\xa6\x09\x78\x80\x91\x88\x3c\x97\ -\xfb\x21\xf4\x6f\x90\x4c\x8f\xbb\xd8\xfb\xeb\xfd\x04\x5a\x78\xb8\ -\x3f\x2a\x97\x84\xfb\x83\xec\x2e\xd2\x72\x0f\x8d\x82\x6c\x0e\x5a\ -\x59\x0b\x9a\x6a\x93\x3d\x21\x85\xa1\xec\x66\x7d\x0e\xec\xcf\x92\ -\x12\xfd\x24\x03\x90\xd1\x07\x10\xec\x32\x6f\x2f\xf5\xf6\x5f\xf9\ -\x2e\x8b\x12\xf7\x49\xe3\xc0\x89\x30\xf7\x79\xa7\x9e\x8e\x30\xb3\ -\x49\xfb\xfd\x72\x5b\x7a\x12\x5c\x02\x77\xcb\x2a\x43\xd9\xe8\x29\ -\x03\x0b\xdc\x29\x23\xf0\x8e\x6d\xf7\xdf\x35\xca\x19\xf6\x3e\x46\ -\x6d\x5a\xf4\x99\x00\x65\x2d\x94\x84\xf7\x7d\xb2\x59\xd9\x04\xb2\ -\x17\x71\xee\x23\x3d\xe8\x98\xea\x5a\x7f\x1b\xa7\x95\x97\xee\x5a\ -\xe0\xb6\xfd\x4d\x83\xf4\xb4\x6e\xfd\xd7\x7d\x61\xd9\x10\xf4\xe4\ -\x47\x77\xab\xd4\x07\x29\x80\xcf\x46\xcf\x69\xf3\xf3\xd6\x68\x8d\ -\x2a\xb2\xe2\x15\x4b\xe6\xb8\x6d\xf7\x34\x84\xf5\xb9\xa7\x73\xb7\ -\x94\x85\xd4\x07\xe7\x8d\xb5\xbd\x53\xa5\x95\x55\xde\xaf\xfc\x08\ -\xec\x36\xe4\xe1\x25\x3f\xf2\xd3\x28\x3f\x92\xc5\x0c\x35\x51\xe5\ -\xe5\xfc\x31\xbd\x3e\xf3\xd2\xe2\x6e\x19\xaa\x65\x1d\xde\xde\xe6\ -\xad\x3c\xd3\xfe\xd0\x00\x64\xf8\xc6\xc5\xf8\x80\x95\xb5\xca\x25\ -\x3d\x3e\x25\x51\x28\x8d\xd1\x34\x13\xc4\xd9\x14\x01\x4c\xd7\xb8\ -\x93\x81\x33\xca\x49\x1c\xc7\xe4\x7e\x24\xb6\xf9\x3b\xd4\x64\x86\ -\xfd\x62\x86\x30\xa0\x24\xfd\x57\xb7\xa9\x59\x0e\x48\xe1\xfc\xa9\ -\xa1\xcf\x5d\x3c\x37\x4c\x4a\x33\x31\x5f\x50\x9a\xde\x3a\x07\xa0\ -\x50\xde\x0a\x73\x20\xb3\x5c\xf5\xea\x2a\xd7\xfc\xb2\xf5\xfe\xf8\ -\xc2\x2e\x8a\x6b\x3c\xa0\x4a\x16\xe5\xc1\xed\x8a\x90\xa5\xae\xeb\ -\x81\x45\xac\xb6\xef\xef\xd2\x32\x2e\xce\x53\xae\xd3\x7b\x39\x2f\ -\x00\x02\xe7\x9d\xef\x1d\xb5\xb2\x7a\xf4\xc8\x90\x1f\x39\xbe\x4c\ -\x0e\x3d\x53\xf2\x23\x67\x5b\xad\xcc\xe7\x70\xad\xe8\x91\x91\xe1\ -\xc5\x15\x06\x56\xae\x92\x9d\xf6\xb6\x36\x5b\x7e\xd0\x00\x64\xe4\ -\xb6\xd5\xdb\x97\xad\xd1\x1e\x96\xfc\x4c\xd1\x92\x9f\x72\xd7\xf4\ -\x82\x75\x41\x16\x25\x59\xcc\x74\xe8\x54\xf6\x9c\x9a\x76\x42\x24\ -\x12\xec\xab\xaf\x5d\x96\x2e\xaf\x95\xa4\xcb\x4e\xe5\x2a\x63\x40\ -\xbf\xc5\xf9\x51\x06\x1b\xd4\xf1\x24\xaf\x81\x2d\x45\x16\xc1\xd4\ -\x3c\x35\x75\xb2\x06\xfa\x20\x61\xd8\xb1\xa4\x8b\x06\x1a\xa9\xbb\ -\x17\x26\xd4\xdd\xda\x39\x6a\x96\xf3\x1e\xb0\x80\x00\x90\xde\xce\ -\x54\x65\xb3\xaf\x6e\xcb\xe9\xcc\xa3\x2f\xad\x2c\x9c\xb5\x56\xe0\ -\x16\x27\xcb\xcb\x3c\x78\x2e\xd9\xb9\x20\x64\xa1\xc9\x7e\xf0\x6c\ -\xb3\xf4\xa2\x74\x4c\xeb\xab\x37\xa4\xe5\x47\xd4\xe7\x28\x35\x5a\ -\x6e\x32\x8a\x70\x2c\xdb\xfe\xcf\x00\x24\x73\x76\xa7\xb7\x5f\x58\ -\x7f\xa4\x5c\x03\x7a\xa2\xc9\xd6\xcd\x13\x05\x97\xde\x00\x7b\xc2\ -\xb3\xed\x50\x88\x8e\x6f\xf6\x9f\x45\x99\x68\x41\x63\x6d\x90\x8d\ -\x67\xf7\x75\x41\x98\xf9\x40\x9e\x84\xec\x63\xc8\x11\x71\x72\xcc\ -\x71\xff\x3b\x0d\xda\xed\x6f\xda\x28\xd9\x73\x00\x8a\xcc\x26\xf6\ -\x49\xba\x53\x8c\xf9\x37\x58\x3f\x94\x73\x98\xe8\x06\x28\xa0\xef\ -\x8e\xb7\xa9\xf4\xbe\x1a\xea\x08\x48\x56\xad\xa8\x72\x17\x4f\x9a\ -\x22\x99\x75\x14\x96\x63\x46\x95\x4d\x56\x59\xdc\xed\x71\xf2\xd7\ -\x7b\x44\x40\x60\xfd\x70\xa4\x51\x9b\xfc\x48\xda\xee\xce\x64\x9f\ -\xc3\x00\x64\xf4\xec\x0a\x6f\xaf\x35\x59\x94\x28\x13\x12\x1a\x98\ -\x2b\x8f\x2c\x51\xfd\x5f\xb3\x0f\x0f\x66\x77\xad\x2e\xc6\xa4\x31\ -\xfd\x87\xe6\x97\x06\x3d\x2b\x9c\x1c\x0d\xf7\xf4\x3a\xd8\x91\x6e\ -\x5c\xf4\x40\x70\x83\x07\x11\xbe\x0f\xcd\xf3\x75\x27\x97\xbb\xca\ -\x25\x73\x35\x68\x27\x15\xd9\x29\x25\x3d\x06\xe7\x66\x5d\x56\x24\ -\x90\x41\xb0\x12\x41\x46\xca\x58\x71\xe7\xfa\xa1\x71\x28\xb8\xa8\ -\x01\xc3\x1f\xec\x52\xbf\x67\xc5\xb1\xc5\x61\x6f\x86\xcf\x4a\xb2\ -\xde\xe7\xf0\x00\x4e\x76\x03\x63\x8d\x52\x69\x18\x74\x9d\x69\x7d\ -\x8e\x9e\xf2\x23\xf3\x46\xd3\xe7\x19\x80\x64\xc7\x16\x7a\xfb\x88\ -\xf5\x47\x82\x6c\xbc\xd6\xd9\x4e\x2f\x91\xe6\x54\x5c\xd2\xa3\x19\ -\x80\x6c\xca\xa2\x78\x27\xa3\x55\xa7\x1e\x30\xd6\x3f\x7d\xa5\x58\ -\x39\x48\xb5\x67\xf2\x33\xb5\x74\xe8\xa1\x1d\xca\x6a\xf8\x3c\x76\ -\x96\x93\x95\x48\xa6\x03\x76\x98\x07\x14\xc0\x44\x8d\xf7\x6e\x13\ -\xd8\x95\x4b\xe7\xba\x76\x9f\xc1\x9c\x4c\xf6\xa4\xe7\xfa\x30\x61\ -\x7f\x0b\x9a\xc8\xa4\x6e\xa4\x47\xf4\xcd\xf6\x2c\xf7\x39\xda\x04\ -\xfe\x64\x7e\x8d\x2f\x58\x2b\xb0\xb8\x52\x2b\x92\xad\xcf\x91\xd8\ -\x03\xbd\x65\xd6\x0d\x40\xc6\x37\x80\x74\x97\x45\x79\xd8\x80\xa4\ -\x5c\xcd\x55\xcd\x3e\xd4\x06\xb5\x55\x22\x58\x0d\xd1\x65\x79\x7e\ -\x84\x26\xee\x8d\x3f\xed\x0c\x53\xdf\xf7\x66\x6f\xe0\x11\x27\x1a\ -\xb7\x0a\x22\x01\x8f\x44\x0a\x3d\x01\xbe\x3b\xe4\x02\x32\x13\xea\ -\xf3\x34\xdb\xa7\x26\xa5\x35\xc0\x86\xf9\x16\x7e\xaf\x7b\xa9\x6c\ -\xbc\x18\x19\x47\xd6\x7a\x37\x49\x36\x09\xdd\x5a\xf4\xe1\xb7\x6e\ -\x72\xd5\x6b\xe6\xa5\xe7\x70\x4c\x7e\x64\x60\x99\x75\x03\x90\x89\ -\x01\x20\xd1\x6e\xf6\xf6\x6f\xd6\x1f\x29\x4b\xaf\xd5\xa5\x3f\x42\ -\xaf\x42\x53\xe6\x0f\xef\xcc\xea\xbe\xef\xd1\xec\x0f\x68\xdf\x39\ -\x59\xd6\xe3\x9d\x72\x7e\x4c\xaa\x43\xd1\x5d\xb6\x77\x91\x54\x86\ -\x99\x4c\x8f\xbd\x11\xe6\x40\x98\xd2\xa6\x9f\x72\xe2\xd1\x44\x81\ -\x76\xbc\x9f\x83\x4c\xc9\x8f\x7c\x8b\x7d\x31\x7b\xdc\xfe\x4f\x6f\ -\x55\x9f\x43\x8d\xfa\x73\x07\x37\xef\x93\x27\xc6\x28\xc1\x93\xc7\ -\xda\xb7\x19\x80\x8c\x9e\x21\x1b\xff\x16\x63\x6b\x05\x49\x0f\x9c\ -\x01\x53\xda\x2b\x0e\x2e\x56\x89\x82\x32\xd0\x78\xd0\x86\x1a\xea\ -\xbe\x73\x1c\x21\x99\x16\x3d\x13\xbe\x27\x43\x8a\x0c\x17\x32\x5f\ -\xc2\xc2\x26\xed\x19\xb9\xa0\x50\x73\x21\xf4\x87\xc4\xc8\xca\x63\ -\xe0\x08\x7d\x8e\x30\x4b\x84\x74\x0a\x92\xfe\x53\x4d\x66\xbd\xbb\ -\x7d\x2e\x91\x58\xca\x09\xbf\x66\x00\x32\xfa\xb6\x3a\xb9\x09\x4c\ -\x36\x3e\x91\x06\x21\x2a\x67\xce\x82\x01\x3c\x6d\x29\xbc\x6f\xdb\ -\xc4\x01\x92\x68\xa7\xc3\xa2\x2a\x7a\x26\x34\xf9\x61\x73\x01\x2e\ -\x07\x7d\x86\xb2\xe3\xed\x9b\x24\x2d\x7e\xe0\xb3\x2d\x61\xdf\x7a\ -\xbe\x01\x47\xa2\x79\x46\xa9\x8a\x79\x0e\xca\x7f\x90\x1f\xe2\x5c\ -\x89\xf5\x39\x64\xdf\x4a\x4a\xe2\x39\xe5\xcf\x0c\x40\xc6\xce\xf6\ -\xe5\xbd\x6c\x7c\x5c\xab\x7b\x59\xb1\x4a\x3a\xe8\x4b\x41\x07\x25\ -\x5a\x67\xee\x22\xd7\x45\x06\x47\x6a\x00\x25\x20\xa2\xf5\xaa\xda\ -\x86\x98\x67\x25\xac\x84\x7e\x0d\xc5\x1b\x40\xa5\xa4\x59\x53\x1f\ -\x54\x97\x25\xb3\x6e\xb4\x5c\x97\x6c\x4c\x7d\x46\xae\xfa\x31\x03\ -\x90\xb1\xb5\x73\xbc\xfd\x85\xb7\xff\x31\x20\xe9\xda\x9d\xb1\xa8\ -\x75\x7e\x18\x48\xf3\xd9\xc8\x78\x65\x29\x99\x0d\x8e\xe0\x10\x55\ -\x01\x56\x1e\x5d\xd2\xb5\xf7\xa5\x1b\x15\x3c\xcf\xed\x6f\xbd\x5d\ -\x95\xcb\x3e\xcc\x00\x24\x37\x6c\xb6\xb7\x37\x5b\x59\x2b\xac\xd5\ -\x9d\x7a\x4e\x90\x43\x5f\x7d\x7c\xa9\x7a\x02\x71\xf5\xa8\x01\xc9\ -\x44\x28\x57\x05\xbd\x31\x24\x5e\xe8\x73\x50\xba\xa4\xbf\xa1\xcd\ -\x93\x33\x53\xd6\xe7\x08\xf6\x31\x6f\xeb\xc6\x83\xef\x32\x00\xc9\ -\x2d\x43\x16\xe5\x8b\x06\x24\xe5\xe2\xf8\x53\xd6\x42\x7e\x04\x89\ -\x75\x89\xf2\x3d\x96\x5d\xd9\x78\xb3\x2c\x97\xab\x4e\x25\x22\x98\ -\x8f\xee\x76\x2d\xaf\xaa\x77\x73\x97\xcc\x0d\x32\xeb\x57\x58\x9f\ -\x23\xb1\x7f\xf6\x76\x64\x3c\xf9\x2c\x03\x90\xdc\xb4\xc3\xde\x7e\ -\x9e\xf7\x65\x2d\x66\x28\xa4\x6b\x35\x43\x42\x86\x4c\x3e\x53\xf2\ -\x90\x2c\xca\x17\x5b\x27\x74\x7f\x64\x42\x01\x47\x94\x1f\xf1\x99\ -\x64\xc7\xfb\x9a\xb4\x95\x51\x2a\x05\x17\x14\xf6\x50\x36\xce\x63\ -\xfb\x3f\x6f\x4f\xf7\x76\xde\x78\xf3\x55\x06\x20\xb9\x6b\xc8\xc6\ -\xff\xa5\xad\xd5\x0d\x86\xca\x2d\xb2\xf1\x8b\xb7\x2f\xd0\xa0\x1e\ -\xe2\x84\x59\x5d\xab\x6b\x96\x91\x72\xd5\xd5\x89\xcc\x3a\xeb\x80\ -\xd9\x27\x8f\xcc\x7a\x64\xde\xd9\x3c\x47\x5a\x66\x7d\xf6\x78\xf5\ -\x53\x06\x20\xb9\x6f\x0b\x12\x8d\x1b\x93\x8d\x9f\xd5\x25\xd7\x8e\ -\xca\xed\x11\xe4\xdc\x1f\xeb\x18\xdf\xe2\x84\x13\xb5\xcf\xf1\x95\ -\x6d\xee\xc4\x8f\x77\x27\xab\x88\xd7\x24\x7b\xe8\x4d\x7e\xa4\x9b\ -\x7d\xc9\xdb\xc6\xf1\xee\x9f\x0c\x40\xc6\x8f\x71\xb3\xfd\x63\xde\ -\x03\x49\x79\x94\x45\x99\xa9\xcc\x64\xcb\xdd\x75\x81\xf6\x9b\x65\ -\x59\x14\xb3\xc1\xf7\x39\x98\xe5\xb8\xf1\xf1\x0e\xb7\xfd\xcd\x1b\ -\x45\xcd\x26\xe3\x98\x61\xf2\x23\xd1\x28\x4d\x1f\x9a\x28\x7e\xc9\ -\x00\x64\xfc\xd9\x6d\xde\xfe\xc3\x68\xbf\x65\xd2\x44\xa2\x96\x5e\ -\xbd\x76\x9e\xdb\xfd\x9e\xa6\xb0\x56\xf7\x9f\x77\x59\x59\x6b\x8c\ -\x68\xb9\x50\xae\x61\x57\x1d\xbc\xb7\xd5\x2d\xed\x58\x28\x4a\x6e\ -\x7a\xdd\xb0\x01\x07\xf6\x72\x6f\x97\x4c\x24\x7f\x64\x00\x32\x3e\ -\x6d\x96\xb7\x7b\x8c\xad\x55\xa6\x5a\x3a\x32\xea\x48\x82\x2c\xdf\ -\xbf\xd8\xed\xff\xfb\xad\x6a\xb4\x33\xa0\x67\xb4\xdf\xd1\x01\x0e\ -\x36\x4f\x4a\x91\xf8\xbe\x76\x57\x77\xcb\x0a\x95\x18\x01\x76\xa3\ -\xe5\xa6\xed\xfd\xde\xe6\x4c\x44\x5f\x64\x00\x32\xbe\x6d\xbe\xb7\ -\xcf\x18\x90\x94\xcb\x69\x69\x95\xe9\x94\x12\xd7\x70\xd7\x2a\x6d\ -\xff\x0b\x4e\x6d\x9b\x01\x49\xb6\xe4\x47\xfc\x4f\x2d\xd8\xf2\x59\ -\x1f\x2b\x7c\x59\x9c\x05\xf5\x5a\xf2\x23\xb6\x15\x30\xca\x8f\x6c\ -\x9d\xc8\x3e\xc8\x00\x64\x62\x18\x1a\x39\xdf\xb6\x46\x7b\xb9\x56\ -\xcc\xd2\xac\x45\x4b\x09\xa7\xc6\xee\x71\x96\x37\xc9\xe1\x59\x59\ -\x2b\x63\x59\x07\x54\x6a\xca\x55\x3b\xdf\xb1\xd9\xd5\xac\xaf\x0e\ -\x32\xeb\x4f\xb1\x3e\x47\x62\xbf\xf6\x76\x63\x3e\xf8\x1e\x03\x90\ -\x89\x65\x70\xc9\xff\xdd\xfa\x23\xe5\xee\xaa\x27\x17\x2a\x23\x59\ -\xd0\x58\xe3\x3a\xde\xdb\xa4\x15\xa8\x08\x19\xda\xfc\xc8\xc8\xe5\ -\x47\x4e\xfe\x66\xaf\x84\x1f\x97\xef\x5b\xa4\x59\x0e\x96\x67\xa5\ -\x29\xd7\x56\xae\xfa\x2b\x6f\x53\xf3\xc5\xe7\x18\x80\x4c\x3c\x2b\ -\xf1\xf6\x06\x2b\x6b\x95\x69\x33\x60\x8c\x8c\x99\x41\xa0\xb9\x4e\ -\xd4\x9c\xcd\x0d\x7a\x13\x96\x96\xfb\xd5\x6d\xee\xa6\xc7\x3b\xdc\ -\x35\xdf\xde\xee\x1a\x9e\xbd\xda\x95\x14\x94\xaa\x5c\x25\x99\x75\ -\xa3\xe5\x62\x1f\x4f\x94\xb6\xf3\xca\xdf\x18\x80\x4c\x5c\xe3\x66\ -\xfe\x82\x95\xb5\x62\x7f\x64\x86\x9c\x5e\xc3\x33\x57\xbb\xeb\xfe\ -\x69\x97\x6a\xf7\xea\x8f\xd8\xfc\xc8\x59\x65\xd6\x29\x03\x42\xcb\ -\x6d\x79\x45\xbd\xab\xa8\xa9\xe8\x92\x1f\x29\x37\xe0\x48\xe4\x47\ -\x76\xe6\xab\x9f\x31\x00\x99\xf8\x86\xb6\xce\x0f\x0c\x48\xca\xd3\ -\x53\xd0\xec\x24\x6f\x7d\xd5\x06\x49\xc6\x6b\x7e\xe4\xcb\x6d\xb6\ -\x09\xb0\x0f\x99\xf5\xe3\x8f\x24\x32\xeb\xef\x6e\x74\x0b\xb7\xd6\ -\x6a\x09\x18\xb4\x5c\x93\x1f\x91\xfd\xde\xdb\x9d\xde\x9e\x94\xcf\ -\xfe\xc5\x00\x24\x3f\xec\x5c\x6f\xcf\xf6\xf6\xdf\x79\x0d\x22\x89\ -\x2c\x0a\xf3\x09\xd0\x4c\x17\x6e\xa9\x75\x7b\x91\x8d\x7f\x3c\x91\ -\x8d\xb7\xf9\x91\x20\x3f\xc2\x1e\x79\x7f\x4e\x98\x26\x5f\x79\x64\ -\x49\x7a\x0d\x71\x49\xa1\x6d\x05\x4c\xec\x0d\xf9\xd4\xe7\x30\x00\ -\x31\x8b\x56\xec\xed\x83\xd6\x1f\x29\x97\x33\xa4\xf9\x4b\x7f\x64\ -\xdd\xcd\xcb\xe5\x34\x19\x44\xcc\x57\xd9\xf8\x28\xb3\x0e\x70\x5c\ -\xf7\xc8\x2e\xb7\xe9\xb9\x6b\x5c\xf1\xcc\x52\xad\x93\xa5\x04\x68\ -\xc0\x21\xfb\xaa\xb7\xa5\xe6\x47\x0c\x40\xf2\xdd\x1a\xbc\x9d\x32\ -\x20\x29\x77\x85\x53\x4b\xdc\x14\x1f\x5d\x97\x55\x94\xbb\xa6\xbf\ -\x58\xe7\xae\xfb\xde\xae\xfc\x92\x8d\x4f\xb6\x3e\xd2\xe7\xc0\x5a\ -\x5f\xbb\xc1\x55\x2d\xaf\x14\x70\xcc\xbc\xac\xc8\xca\x55\xc1\x1e\ -\x1e\x6f\x32\xeb\x06\x20\x06\x20\xa3\x61\x27\xbd\xfd\x34\xef\x69\ -\xbf\xa9\x20\x8b\x42\x73\xb8\xb6\xbe\xda\xed\x7a\x57\xa3\x07\x91\ -\x4e\x81\xc9\x44\xa6\xfd\x76\x97\x1f\xa1\x94\xb7\x78\xdb\x02\xf5\ -\x88\xa0\xe6\xa6\x99\x6c\xf9\x0d\x1c\xff\x2f\x51\xc4\x36\x5f\x61\ -\x00\x62\xd6\x8f\x5d\xec\xed\x75\x26\x1b\x1f\x7e\x6a\xad\xaa\x37\ -\x6a\xff\x87\xee\x6d\xd5\x0e\x8b\xab\xff\x61\x62\xc9\xa2\x48\x7e\ -\xe4\xfe\xf6\xb0\xe9\xf1\xfe\x20\x3f\x42\xb6\xd1\xd5\xe7\xb0\x79\ -\x8e\x44\x7e\x24\x65\xfe\xc1\x00\xc4\x6c\xf0\xb2\x28\x26\x1b\x5f\ -\x5a\xae\xda\xbf\x56\xac\xce\x2a\x75\xf5\x77\xae\x74\x57\x4b\x16\ -\xa5\x73\xdc\xd3\x7e\xc5\x34\x3b\xdd\xe6\x6e\xfc\x69\x90\x1f\x69\ -\x7a\xe1\x3a\x57\x56\x31\xdb\x64\xd6\x7b\xda\xe7\xbd\x6d\x36\x7f\ -\x60\x00\x62\x00\x32\x3c\xdb\xed\xed\x1f\x8c\xf6\x1b\x64\xe3\x19\ -\x96\x9b\xb3\x60\x8e\x6b\x79\x65\x7d\xe8\x13\xfc\x60\x77\x57\xef\ -\x60\x1c\xd2\x72\x21\x0a\xec\x7c\xfb\x66\x57\x53\x37\x4f\x93\xfa\ -\x33\x4d\x66\x3d\xda\xcf\xf2\x45\x7e\xc4\x00\xc4\x00\x64\x34\xec\ -\xb8\xb7\x3f\x98\x2c\x4a\xb9\x7a\x02\x94\x77\x6a\xea\xab\xdd\xee\ -\xf7\x34\x4a\xa4\x71\xbc\xd0\x7e\x45\xcb\xfd\x87\x20\x2c\x89\xfc\ -\xc8\x92\x5d\x0b\x44\xcb\x8d\xf2\x23\x26\xb3\x2e\x7b\xae\xb7\x4b\ -\xed\x99\x37\x00\x31\x00\xc9\xac\x15\x78\x7b\xa5\x95\xb5\xca\x5d\ -\x49\x51\xa9\x40\x64\xe6\xa5\x45\x6e\xd5\xb1\x25\xa2\xbc\xd2\x7c\ -\xce\xd5\xfe\x48\xec\x73\x40\xcb\x3d\xfe\xd0\x0e\xb7\xe1\xe9\xab\ -\x44\xc7\x55\x69\x0e\x99\x75\x2b\x57\x61\x1f\x4e\x4a\xb7\xf6\xac\ -\x1b\x80\x18\x80\x64\xd1\x96\x7b\xfb\x7b\x2b\x6b\x95\xab\x57\x40\ -\xe9\x07\x50\xd9\xf4\xa7\x6b\xb4\x97\x9d\x9e\x02\x80\x92\x0b\xfd\ -\x91\xee\xf2\x23\x4c\xd9\x6f\x7d\xf9\x7a\x37\x67\xfe\x1c\x01\xc7\ -\xac\xcb\x8b\x0d\x38\x82\xa1\x5c\xdd\x66\xcf\xb5\x01\x88\x01\xc8\ -\xe8\x5a\x5b\xde\xcb\xa2\x24\x65\x2d\x06\x10\x27\x27\xfd\x91\xf6\ -\x37\x36\x48\x32\x1e\x69\x94\xb8\xd6\x75\xac\xfa\x1c\x50\x8f\xe9\ -\x73\x74\x7e\xa0\xc9\xcd\xdf\x58\xa3\x79\x0e\x4a\x56\xa9\x94\xcd\ -\x73\x78\xfb\x37\x6f\x37\xdb\x73\x6c\x00\x62\x00\x32\x76\x76\x8e\ -\xb7\x67\x79\xfb\x6d\xde\xd3\x7e\xbd\xa9\x9f\x70\x6e\x81\x5b\xd4\ -\x36\xdf\x75\x78\xa7\x7d\xd3\x13\x9d\xee\xf8\xc3\x3b\x47\xb5\xac\ -\x25\x99\x75\x98\x62\xbf\xdc\xe3\x0e\x7e\xbe\x45\x14\x64\x9a\xe3\ -\x6c\x6a\xa4\xf4\x66\xb4\x5c\x19\xa5\xd8\xc9\xf6\xfc\x1a\x80\x18\ -\x80\xe4\x86\xa1\x05\xf4\x56\xeb\x8f\x94\x49\xe5\x97\xfe\xc8\x0c\ -\xef\xb4\xd7\x5c\xb7\x4c\x1a\x52\x9a\xb1\xf8\x7a\x76\x65\x51\xa2\ -\xcc\x3a\xbd\x98\x6b\xbe\xbd\xc3\x6d\x7c\xf6\x6a\x57\x3c\xa3\x54\ -\x99\x51\x90\x1f\x31\xe0\xf0\xf6\x29\xeb\x73\x18\x80\x18\x80\xe4\ -\xae\x6d\x30\x59\x94\x64\xad\xee\xf4\x94\x68\xbf\xf4\x19\x9a\x5e\ -\x54\xa7\xad\x7d\x4c\xb4\x67\x5c\x16\xe5\x54\x78\x3f\x7a\x1c\x27\ -\x7e\xd2\xe1\xda\xdf\xb4\xd1\x55\x2d\xad\xec\x5a\x27\x6b\x7d\x0e\ -\xec\x11\x6f\x87\xed\xf9\x34\x00\x31\x00\x19\x1f\x76\xd4\xdb\x0f\ -\xf3\xbe\x3f\x22\xd9\xf8\x22\x35\xda\xe7\xad\xaa\x92\x73\x87\x42\ -\x2b\x59\x94\x0c\xd0\x7e\x25\x3f\xf2\x9d\x1d\xda\xb0\xd8\xf9\xfe\ -\x26\xb7\x08\x99\xf5\x73\x66\xa9\x94\x66\xba\x55\x69\xf9\x91\x67\ -\xda\xf3\x68\x00\x62\x00\x32\xfe\xec\xc9\x09\xa7\xde\x64\x51\xbc\ -\x4d\x3b\xd7\x3b\xf6\xf3\x0b\xdc\xb2\xce\x45\x6e\xff\xa7\xb6\xca\ -\xe9\x5f\xf3\xad\xed\xc3\x02\x12\x7e\x87\x92\xd8\xc9\x5f\xee\x11\ -\x3d\x77\xcd\x75\x4b\xc5\xaa\x82\x5d\x65\x32\xeb\x69\x43\x92\xa7\ -\xd4\x9e\x43\x03\x10\x03\x90\xf1\x6d\x0b\xbc\xfd\x9d\xd1\x7e\xcb\ -\x25\x87\xa2\x9e\xc4\xf4\x12\x57\xff\xd4\x95\x9a\x1b\x61\x36\x63\ -\xb0\xb2\x28\x51\x7e\x04\x86\x97\xe4\x47\xee\xae\x73\x65\x73\x66\ -\xab\x5c\x65\xf2\x23\x69\xfb\xa2\xb7\x46\x7b\xee\x0c\x40\x0c\x40\ -\x26\x96\x6d\xf4\xf6\x1d\x03\x92\x20\x8b\x42\xb6\x50\x5e\x31\xdb\ -\x35\xbf\x74\xbd\x3b\xf1\xd3\x84\xf6\xdb\x4f\x7f\xe4\x50\x22\xb3\ -\x0e\x68\xdc\xfc\x44\xa7\xdb\xf1\xd6\x4d\xae\x6a\x45\xa5\xde\x63\ -\xc6\x93\x0b\x4d\x7e\x24\xd8\xcf\xbd\xed\xb5\xe7\xcc\x00\xc4\x00\ -\x64\x62\xdb\x0d\xc9\xc3\x9e\xf7\xb2\xf1\x91\xf6\x5b\xdb\x50\xed\ -\x76\xbe\x63\xb3\x66\x36\x8e\x7f\x77\x67\x8f\xb2\x56\xec\x73\x90\ -\xa9\xec\xfd\x58\xb3\x5b\xb6\x67\x91\x9b\x71\x51\x22\x3f\x52\x6c\ -\x32\xeb\x49\x9f\xe3\x79\xde\x2e\xb1\x67\xcb\x00\xc4\x00\x24\x7f\ -\xfa\x23\xaf\x32\xb6\x56\x97\x2c\x0a\x1a\x5b\xab\xaf\x5d\x1a\x36\ -\x01\x3e\xd6\xe1\x8e\xfa\x9f\x00\x08\xcc\x2a\xb4\xb6\xea\x6e\x5d\ -\xa1\x81\x45\xb2\x8e\xa2\x19\x26\x3f\x92\xd8\xfb\xbc\xcd\xb2\xe7\ -\xc9\x00\xc4\x00\x24\x3f\xad\xd2\xdb\xe7\xac\xac\x55\x2e\x50\x88\ -\xb2\xf1\xcd\x2f\xad\x13\x70\xdc\xe8\x33\x92\x1d\x6f\xdb\xe4\x66\ -\xcf\xab\xd0\xff\xb1\x31\xd1\x1a\xe4\x69\xf9\x91\x7a\x7b\x7e\x0c\ -\x40\x0c\x40\xcc\xb0\x76\x6f\xf7\x9b\x2c\x4a\xb9\xa6\xc6\xc9\x48\ -\x1a\xee\x5a\xe5\x9a\x5f\x52\xa7\x81\xc4\xe9\xe7\x17\x98\xfc\x48\ -\xb0\x9f\xa4\x4c\x66\xdd\x00\xc4\x00\xc4\xac\x1f\x7b\x76\xbe\xcb\ -\xa2\x68\x89\x95\xcf\x42\x66\x5d\x56\x24\x0b\x53\xe4\x96\x75\x78\ -\x7b\xb5\xb7\x8b\xec\x19\x31\x00\x31\x00\x31\x1b\xc8\xae\xf2\xf6\ -\x96\x7c\xcf\x46\xe8\x8d\x30\xd3\x61\x59\x47\xd9\x27\xbd\x2d\xb1\ -\xe7\xc2\x00\xc4\x00\xc4\x6c\x28\xb6\xc6\xdb\x27\x2c\xf2\xce\x5b\ -\xfb\x96\xb7\x6d\xf6\x1c\x18\x80\x18\x80\x98\x8d\xc4\xf6\xa7\xf2\ -\x5d\x36\x3e\xbf\xec\xdf\xbd\xdd\x69\xf7\xbd\x01\x88\x01\x88\x59\ -\xa6\xec\x49\x89\x53\x31\x07\x3b\xf1\x65\xd6\xaf\xb2\xfb\xdd\x00\ -\xc4\x00\xc4\x2c\x1b\x86\xb6\xd1\xdf\x9a\xa3\x9d\x70\x76\xaf\xb7\ -\x15\x76\x7f\x1b\x80\x18\x80\x98\x8d\x96\x2c\xca\x69\x73\xbc\xe3\ -\xde\xfe\x39\x29\x51\xda\x3d\x6d\x00\x62\x00\x62\x36\xea\x76\x8d\ -\xb7\x9f\x99\x23\x1e\x97\xf2\x23\xcf\xb7\xfb\xd7\x00\xc4\x00\xc4\ -\x6c\xac\x8d\xd9\x80\x17\x79\xfb\x6f\x73\xcc\xe3\x46\x66\xdd\xe4\ -\x47\x0c\x40\x0c\x40\xcc\x72\xca\xca\xbc\xbd\xdb\x1c\x74\xce\xda\ -\xe7\xbd\xd5\xd9\x7d\x6a\x00\x62\x00\x62\x96\xcb\xb6\xdd\xdb\x3f\ -\x98\xc3\xce\x19\x7b\xcc\xdb\xcd\x76\x5f\x1a\x80\x18\x80\x98\x8d\ -\x27\xbb\xc9\xdb\xaf\xcd\x81\x8f\xa9\xb1\x91\xd2\x64\xd6\x0d\x40\ -\x0c\x40\xcc\xc6\xa5\x4d\xf6\xf6\x32\x73\xe4\xa3\x6e\x6c\xa0\xac\ -\xb4\xfb\xcf\x00\xc4\x00\xc4\x6c\x22\xd8\x8a\x44\x53\xc9\x9c\x7b\ -\xf6\x65\xd6\x4d\x7e\xc4\x00\xc4\x00\xc4\x6c\x42\x5a\xab\xb7\x47\ -\xcd\xd1\x67\xdc\xfe\x2d\xa1\x54\xdb\x3d\x66\x00\x62\x00\x62\x36\ -\xe1\x65\x51\x6e\x4f\xe5\xb9\x6c\x7c\x06\xed\xe5\xde\xa6\xda\x7d\ -\x65\x66\x00\x62\x96\x4f\x76\xa5\xb7\x37\x1a\x00\x0c\xdb\x3e\xe5\ -\xad\xca\xee\x23\x33\x03\x10\xb3\x7c\xb6\x95\xde\x4e\x19\x20\x0c\ -\x49\x7e\xa4\xc3\xee\x1b\x33\x03\x10\x33\xb3\x2e\xdb\xe7\xed\xbb\ -\x06\x10\xfd\x1a\x25\x3f\x93\x59\x37\x33\x00\x31\x33\x1b\xc0\x5e\ -\xe8\xed\x7f\x0c\x30\x7a\xd8\x1b\xad\xcf\x61\x66\x00\x62\x17\xd9\ -\x6c\x70\x36\xdb\xdb\x07\x0c\x38\xca\x3e\xeb\x6d\x83\xdd\x0f\x66\ -\x06\x20\x06\x20\x66\x43\xb7\x4d\xde\xbe\x98\x87\xc0\xc1\x06\x48\ -\x93\x59\x37\x33\x00\x31\x00\x31\xcb\x80\x9d\x48\xe5\x87\x6c\xfc\ -\x1f\x13\xf9\x91\x0b\xed\x9a\x9b\x19\x80\x18\x80\x98\x65\xce\x2e\ -\x4e\xfa\x23\x13\x15\x3c\xde\x99\x32\x99\x75\x33\x03\x10\x03\x10\ -\xb3\xac\xf7\x47\x3e\x32\x81\x80\xe3\x01\x6f\x6b\xec\xba\x9a\x19\ -\x80\x18\x80\x98\x8d\x9e\x35\x7b\xfb\xd6\x38\x06\x8e\xc7\x4d\x7e\ -\xc4\xcc\x00\xc4\x00\xc4\x6c\x6c\xed\x8e\x71\x26\x8b\x02\x45\xf9\ -\xaf\x52\x61\x93\xa3\x5d\x3f\x33\x03\x10\x03\x10\xb3\x31\x36\x64\ -\xe3\x5f\x3a\x0e\xc0\xe3\x5d\x49\x09\xce\xae\x99\x99\x01\x88\x01\ -\x88\x59\x8e\xd9\x42\x6f\x1f\xce\x41\xe0\xf8\xba\xb7\x36\xbb\x3e\ -\x66\x06\x20\x06\x20\x66\xb9\x6f\x87\x72\x44\x16\x85\xd2\xda\x33\ -\xec\x7a\x98\x19\x80\x18\x80\x98\x8d\x3f\xbb\xc5\xdb\x7f\x8e\x11\ -\x78\xdc\x6d\xf2\x23\x66\x06\x20\x06\x20\x66\xe3\xdb\x52\xde\xee\ -\x19\x45\xe0\xf8\x58\x2a\x28\x0c\xdb\xb9\x37\x33\x00\x31\x00\x31\ -\x9b\x20\xb6\x31\xcb\xb2\x28\x8f\x98\xfc\x88\x99\x01\x88\x01\x88\ -\xd9\xc4\x36\x9c\xfc\x2f\x32\x2c\x3f\x72\x9b\x9d\x57\x33\x03\x10\ -\x03\x10\xb3\xfc\x91\x45\x79\x9e\xb7\x3f\xa4\x46\x2e\xb3\x3e\xd3\ -\xce\xa7\x99\x01\x88\x01\x88\x59\xfe\x19\xda\x53\x1f\x1c\x06\x70\ -\x7c\xd9\xdb\x62\x3b\x7f\x66\x06\x20\x06\x20\x66\x66\x9b\x53\x41\ -\x93\xea\x6c\xc0\xf1\xa8\xc9\x8f\x98\x19\x80\x18\x80\x98\x99\xf5\ -\x65\xc8\xc6\xff\x38\xd5\xbf\xcc\xfa\x93\xec\x1c\x99\x19\x80\x18\ -\x80\x98\x99\x0d\xd4\x1f\x79\x59\xaa\xa7\xcc\x7a\xb9\x9d\x17\x33\ -\x03\x10\x03\x10\x33\xb3\xc1\xda\x71\x9b\x22\x37\x33\x00\xc9\x21\ -\x00\x31\x33\x33\x33\x33\x9b\x18\xf6\xff\x03\x36\x1d\xa4\xd2\x90\ -\x42\xb8\x04\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\ -" - -qt_resource_name = b"\ -\x00\x04\ -\x00\x06\xfa\x5e\ -\x00\x69\ -\x00\x63\x00\x6f\x00\x6e\ -\x00\x04\ -\x00\x07\x6f\xa3\ -\x00\x70\ -\x00\x69\x00\x63\x00\x73\ -\x00\x0c\ -\x0e\xf1\xfe\x23\ -\x00\x64\ -\x00\x65\x00\x66\x00\x61\x00\x75\x00\x6c\x00\x74\x00\x5f\x00\x70\x00\x69\x00\x63\x00\x73\ -\x00\x14\ -\x07\xf8\xab\xa7\ -\x00\x6e\ -\x00\x6f\x00\x73\x00\x69\x00\x67\x00\x6e\x00\x61\x00\x6c\x00\x73\x00\x65\x00\x6c\x00\x65\x00\x63\x00\x74\x00\x65\x00\x64\x00\x2e\ -\x00\x70\x00\x6e\x00\x67\ -\x00\x18\ -\x04\xef\xdc\xa7\ -\x00\x73\ -\x00\x70\x00\x65\x00\x63\x00\x74\x00\x72\x00\x75\x00\x6d\x00\x6e\x00\x6f\x00\x74\x00\x61\x00\x76\x00\x61\x00\x69\x00\x6c\x00\x61\ -\x00\x62\x00\x6c\x00\x65\x00\x2e\x00\x70\x00\x6e\x00\x67\ -\x00\x12\ -\x05\x89\xd6\x07\ -\x00\x41\ -\x00\x72\x00\x74\x00\x65\x00\x6d\x00\x69\x00\x73\x00\x33\x00\x2e\x00\x35\x00\x30\x00\x30\x00\x70\x00\x78\x00\x2e\x00\x70\x00\x6e\ -\x00\x67\ -" - -qt_resource_struct_v1 = b"\ -\x00\x00\x00\x00\x00\x02\x00\x00\x00\x02\x00\x00\x00\x01\ -\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x06\ -\x00\x00\x00\x0e\x00\x02\x00\x00\x00\x01\x00\x00\x00\x03\ -\x00\x00\x00\x1c\x00\x02\x00\x00\x00\x02\x00\x00\x00\x04\ -\x00\x00\x00\x68\x00\x00\x00\x00\x00\x01\x00\x00\x55\x51\ -\x00\x00\x00\x3a\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\ -\x00\x00\x00\x1c\x00\x02\x00\x00\x00\x01\x00\x00\x00\x07\ -\x00\x00\x00\x9e\x00\x00\x00\x00\x00\x01\x00\x00\xab\xf3\ -" - -qt_resource_struct_v2 = b"\ -\x00\x00\x00\x00\x00\x02\x00\x00\x00\x02\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\x06\ -\x00\x00\x00\x00\x00\x00\x00\x00\ -\x00\x00\x00\x0e\x00\x02\x00\x00\x00\x01\x00\x00\x00\x03\ -\x00\x00\x00\x00\x00\x00\x00\x00\ -\x00\x00\x00\x1c\x00\x02\x00\x00\x00\x02\x00\x00\x00\x04\ -\x00\x00\x00\x00\x00\x00\x00\x00\ -\x00\x00\x00\x68\x00\x00\x00\x00\x00\x01\x00\x00\x55\x51\ -\x00\x00\x01\x66\xf4\x63\xf3\x38\ -\x00\x00\x00\x3a\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\ -\x00\x00\x01\x66\xf4\x64\x1e\x30\ -\x00\x00\x00\x1c\x00\x02\x00\x00\x00\x01\x00\x00\x00\x07\ -\x00\x00\x00\x00\x00\x00\x00\x00\ -\x00\x00\x00\x9e\x00\x00\x00\x00\x00\x01\x00\x00\xab\xf3\ -\x00\x00\x01\x69\xbf\x92\x60\x38\ -" - -qt_version = 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/src/default_pics/Artemis3.500px.png b/src/default_pics/Artemis3.500px.png deleted file mode 100644 index e4dfeb1..0000000 Binary files a/src/default_pics/Artemis3.500px.png and /dev/null differ diff --git a/src/default_pics/Artemis3.ico b/src/default_pics/Artemis3.ico deleted file mode 100644 index 5677102..0000000 Binary files a/src/default_pics/Artemis3.ico and /dev/null differ diff --git a/src/default_pics/Artemis3.png b/src/default_pics/Artemis3.png deleted file mode 100644 index 0af2be8..0000000 Binary files a/src/default_pics/Artemis3.png and /dev/null differ diff --git a/src/default_pics/nosignalselected.png b/src/default_pics/nosignalselected.png deleted file mode 100644 index a9e40f8..0000000 Binary files a/src/default_pics/nosignalselected.png and /dev/null differ diff --git a/src/default_pics/spectrumnotavailable.png b/src/default_pics/spectrumnotavailable.png deleted file mode 100644 index 2c22abc..0000000 Binary files a/src/default_pics/spectrumnotavailable.png and /dev/null differ diff --git a/src/double_text_button.py b/src/double_text_button.py deleted file mode 100644 index d1d9b41..0000000 --- a/src/double_text_button.py +++ /dev/null @@ -1,59 +0,0 @@ -from PyQt5.QtWidgets import QPushButton -from PyQt5.QtCore import pyqtSlot - - -class DoubleTextButton(QPushButton): - """Subclass QPushButton. - - A click will deactivate/activate a series of 'slave' widgets depending - on the 'checked' status of the button.""" - - def __init__(self, parent=None): - """Extends QPushButton.__init__.""" - super().__init__(parent) - self.clicked.connect(self._manage_click) - - def set_texts(self, text_a, text_b): - """Set the two texts to be displayed.""" - self._text_a = text_a - self._text_b = text_b - - def set_slave_filters(self, simple_ones=None, - radio_1=None, - ruled_by_radio_1=None, - radio_2=None, - ruled_by_radio_2=None): - """Set all the 'slave' widgets. - - Keyword arguments: - simple_ones -- a list of widgets. - radio_1 -- a radio button. - ruled_by_radio_1 -- a list of widgets whose status depend upon radio_1. - radio_2 -- a radio button. - ruled_by_radio_2 -- a list of widgets whose status depend upon radio_2.""" - self._simple_ones = simple_ones - self._ruled_by_radio_1 = ruled_by_radio_1 - self._radio_1 = radio_1 - self._ruled_by_radio_2 = ruled_by_radio_2 - self._radio_2 = radio_2 - - @pyqtSlot() - def _manage_click(self): - """Set the status of all the 'slave widgets' based on the status of the instance.""" - if self.isChecked(): - self.setText(self._text_b) - enable = False - else: - self.setText(self._text_a) - enable = True - for f in self._simple_ones: - f.setEnabled(enable) - radio_btns = self._radio_1, self._radio_2 - ruled_widgets = self._ruled_by_radio_1, self._ruled_by_radio_2 - for radio_btn, ruled_by in zip(radio_btns, ruled_widgets): - if ruled_by: - for f in ruled_by: - if radio_btn.isChecked(): - f.setEnabled(enable) - else: - f.setEnabled(False) diff --git a/src/download_db_window.ui b/src/download_db_window.ui deleted file mode 100644 index 4b1ebfb..0000000 --- a/src/download_db_window.ui +++ /dev/null @@ -1,117 +0,0 @@ - -- -default_pics/Artemis3.500px.png -- -default_pics/nosignalselected.png -default_pics/spectrumnotavailable.png -- diff --git a/src/download_window.py b/src/download_window.py deleted file mode 100644 index 3abab1f..0000000 --- a/src/download_window.py +++ /dev/null @@ -1,134 +0,0 @@ -from PyQt5 import uic -from PyQt5.QtCore import Qt, pyqtSlot, pyqtSignal -from PyQt5.QtWidgets import QWidget -from threads import DownloadThread, ThreadStatus -from utilities import pop_up -from executable_utilities import resource_path -from constants import Constants, Messages - - -Ui_Download_window, _ = uic.loadUiType( - resource_path("download_db_window.ui") -) - - -class DownloadWindow(QWidget, Ui_Download_window): - """Subclass QWidget and Ui_Download_window. It is the window displayed during - downloads and software updates.""" - - complete = pyqtSignal() - closed = pyqtSignal() - _PROGRESS_CONEVERSION_FACTOR = 1024 - - def __init__(self): - """Initialize the window.""" - super().__init__() - self.setupUi(self) - self.setWindowFlags( - # Qt.Window | - Qt.CustomizeWindowHint | - Qt.WindowTitleHint | - Qt.WindowCloseButtonHint | - Qt.WindowStaysOnTopHint - ) - - self._no_internet_msg = pop_up(self, title=Messages.NO_CONNECTION, - text=Messages.NO_CONNECTION_MSG, - connection=self.close) - - self._bad_db_download_msg = pop_up(self, title=Messages.BAD_DOWNLOAD, - text=Messages.BAD_DOWNLOAD_MSG, - connection=self.close) - - self._slow_conn_msg = pop_up(self, title=Messages.SLOW_CONN, - text=Messages.SLOW_CONN_MSG, - connection=self.close) - - self._download_thread = DownloadThread() - self._download_thread.finished.connect(self._wait_close) - self._download_thread.progress.connect(self._display_progress) - self._download_thread.speed_progress.connect(self._display_speed) - self.closed.connect(self._download_thread.set_exit) - self.cancel_btn.clicked.connect(self._terminate_process) - self._size = 0 - self.target = None - - def _prepare_progress_bar(self, size): - """Prepare the progress bar for the upcoming download.""" - self._progress_bar.setMinimum(0) - self._progress_bar.setMaximum(size) - self._progress_bar.setValue(0) - - def activate(self, target): - """Start the download thread.""" - self._size = target.size - self.target = target.target - self._prepare_progress_bar(target.size) - self._download_thread.start(target) - self.show() - - def _download_format_str(self, n): - """Return a well-formatted string with the downloaded MB.""" - return f"Downloaded: {n} MB" - - @pyqtSlot(float) - def _display_speed(self, speed): - """Display the download speed.""" - ret = "Speed: " - if speed == Constants.ZERO_INITIAL_SPEED: - ret += "Calculating..." - elif speed == 0.0: - ret += "VERY SLOW" - elif speed == Constants.ZERO_FINAL_SPEED: - ret = "" - else: - ret += f"{speed} MB/s" - self.speed_lbl.setText(ret) - - @pyqtSlot(int) - def _display_progress(self, progress): - """Display the downloaded MB.""" - if progress != Constants.EXTRACTING_CODE: - self.status_lbl.setText(self._download_format_str(progress)) - elif progress == Constants.EXTRACTING_CODE: - self.status_lbl.setText(Constants.EXTRACTING_MSG) - if self._size > 0: - self._progress_bar.setValue(progress * self._PROGRESS_CONEVERSION_FACTOR) - - def show(self): - """Extends QWidget.show. Set downloaded MB and speed to zero.""" - self._display_progress(0) - self._display_speed(Constants.ZERO_INITIAL_SPEED) - super().show() - - def _stop_thread(self): - """Ask the download thread to stop.""" - if self._download_thread.isRunning(): - self.closed.emit() - self._download_thread.wait() - - @pyqtSlot() - def _terminate_process(self): - """Terminate the download thread and close.""" - self._stop_thread() - self.close() - - @pyqtSlot() - def _wait_close(self): - """Decide the action based on the download thread status and close.""" - if self._download_thread.status is ThreadStatus.OK: - self.complete.emit() - self.close() - elif self._download_thread.status is ThreadStatus.NO_CONNECTION_ERR: - self._no_internet_msg.show() - elif self._download_thread.status is ThreadStatus.BAD_DOWNLOAD_ERR: - self._bad_db_download_msg.show() - elif self._download_thread.status is ThreadStatus.SLOW_CONN_ERR: - self._slow_conn_msg.show() - else: - self.close() - - def reject(self): - """Extends QWidget.reject. Terminate the download thread.""" - self._stop_thread() - super().reject() diff --git a/src/downloadtargetfactory.py b/src/downloadtargetfactory.py deleted file mode 100644 index 631e938..0000000 --- a/src/downloadtargetfactory.py +++ /dev/null @@ -1,165 +0,0 @@ -from contextlib import contextmanager -from shutil import rmtree -from os import remove -import os.path -import stat -from constants import ( - Constants, - Database, - __BASE_FOLDER__, - ThemeConstants, - DownloadTarget, - SupportedOs, -) -from os_utilities import get_os -from web_utilities import get_folder_hash_code - -from zipfile import ZipFile -from tarfile import TarFile - - -class _ZipExtractor: - """Extractor class for zip files. - - Exposes a static method which can be used as a context manager.""" - @staticmethod - @contextmanager - def open(fileobj): - zipped = ZipFile(fileobj) - try: - yield zipped - finally: - zipped.close() - - -class _TarExtractor: - """Extractor class for tar files. - - Exposes a static method which can be used as a context manager.""" - @staticmethod - @contextmanager - def open(fileobj): - tarfile = TarFile.open(fileobj=fileobj) - try: - yield tarfile - finally: - tarfile.close() - - -EXTRACTORS = { - SupportedOs.WINDOWS: _ZipExtractor, - SupportedOs.LINUX: _TarExtractor, - SupportedOs.RASPBIAN: _TarExtractor, - # No extractor for MacOs, just download the file through the browser. -} - - -def _on_rmtree_error(func, path, excinfo): - """Function called whenever rmtree fails.""" - os.chmod(path, stat.S_IWRITE) - func(path) - - -def _delete_data_folder(): - """Delete the Data folder.""" - if os.path.exists(Constants.DATA_FOLDER): - rmtree(Constants.DATA_FOLDER, onerror=_on_rmtree_error) - - -def _delete_updater(): - """Delete the updater program.""" - if os.path.exists(Constants.UPDATER_SOFTWARE): - remove(Constants.UPDATER_SOFTWARE) - - -def _delete_software(): - """Delete the main program and the themes folder.""" - if os.path.exists(Constants.EXECUTABLE_NAME): - remove(Constants.EXECUTABLE_NAME) # Remove Artemis executable. - if os.path.exists(ThemeConstants.FOLDER): # One could not have the theme folder for some reason. - rmtree(ThemeConstants.FOLDER, onerror=_on_rmtree_error) - - -class _DataFolderInfo: - """Simple class to implement the interface of a 'target' object for the data folder: - - - url; - - hash_code; - - size.""" - def __init__(self): - self.url = Database.LINK_LOC - self.hash_code = get_folder_hash_code() - self.size = 0 - - -class _BaseDownloadTarget: - """Base class for the '_Download*Target' objects. - - Contains all the attributes needed by DownloadWindow and DownloadThread - to do the job.""" - def __init__(self, target, dest_path, target_enum, Extractor, delete_files): - self.url = target.url - self.hash_code = target.hash_code - self.size = target.size - self.dest_path = dest_path - self.target = target_enum - self.Extractor = Extractor - self.delete_files = delete_files - - -class _DownloadDataFolderTarget(_BaseDownloadTarget): - """Extend _BaseDownloadTarget. Represent the data folder.""" - def __init__(self, data_folder_info, dest_path=__BASE_FOLDER__): - super().__init__( - target=data_folder_info, - dest_path=dest_path, - target_enum=DownloadTarget.DATA_FOLDER, - Extractor=_ZipExtractor, - delete_files=_delete_data_folder - ) - - -class _DownloadSoftwareTarget(_BaseDownloadTarget): - """Extends _BaseDownloadTarget. Represents the main software.""" - def __init__(self, software, dest_path=__BASE_FOLDER__): - super().__init__( - target=software, - dest_path=dest_path, - target_enum=DownloadTarget.SOFTWARE, - Extractor=EXTRACTORS[get_os()], - delete_files=_delete_software - ) - - -class _DownloadUpdaterTarget(_BaseDownloadTarget): - """Extends _BaseDownloadTarget. Represents the updater software.""" - def __init__(self, updater, dest_path=__BASE_FOLDER__): - super().__init__( - target=updater, - dest_path=dest_path, - target_enum=DownloadTarget.UPDATER, - Extractor=EXTRACTORS[get_os()], - delete_files=_delete_updater - ) - - -def get_download_target(target_type, target=None): - """Return a Download*Obj based on the target download. - - These objects expose a common interface: - Attributes: - - url; - - hash_code; - - dest_path; - - target: an element of the enum DownloadTarget; - - Extractor: an object which exposes an 'open(fileobj)' method - to extract compressed files; - - delete_files: a function to remove the old files.""" - if target_type is DownloadTarget.DATA_FOLDER: - return _DownloadDataFolderTarget(_DataFolderInfo()) - elif target_type is DownloadTarget.UPDATER and target is not None: - return _DownloadUpdaterTarget(target) - elif target_type is DownloadTarget.SOFTWARE and target is not None: - return _DownloadSoftwareTarget(target) - else: - raise Exception("ERROR: Invalid download target!") diff --git a/src/executable_utilities.py b/src/executable_utilities.py deleted file mode 100644 index c8dae22..0000000 --- a/src/executable_utilities.py +++ /dev/null @@ -1,33 +0,0 @@ -import sys -from shutil import which -import os -import os.path - - -def _is_executable_version(): - """Return whether the binary version is running.""" - return hasattr(sys, "_MEIPASS") or "__compiled__" in globals() - - -IS_BINARY = _is_executable_version() - - -def get_executable_path(): - """Check whether the executable is in the PATH folder. - - Return the full path or just an ampty string if it is not found - in the PATH folder.""" - path = which("Artemis") - if path is not None: - return os.path.dirname(path) - else: # Assume that the executable is in the cwd. - return os.curdir - - -def resource_path(relative_path): - """Get absolute path to resource, works for dev and for PyInstaller.""" - try: - base_path = sys._MEIPASS - except Exception: - base_path = os.path.abspath(".") - return os.path.join(base_path, relative_path) diff --git a/src/filters.py b/src/filters.py deleted file mode 100644 index 43dedeb..0000000 --- a/src/filters.py +++ /dev/null @@ -1,847 +0,0 @@ -"""This module contains all the filter-related classes and functions. - -The only class exposed is Filters which provides the following methods: -- ok(signal_name): to check if all the filters are passed; -- reset(): to reset all the applied filters; -- refresh(): used when the theme is changed.""" - -from functools import partial -import webbrowser -from PyQt5.QtWidgets import QListWidgetItem, QTreeWidgetItem -from PyQt5.QtCore import pyqtSlot, QObject -from constants import ( - Constants, - Ftype, - Signal, -) -from utilities import ( - uncheck_and_emit, - connect_events_to_func, - filters_limit, - is_undef_freq, - is_undef_band, - safe_cast, - show_matching_strings, - get_field_entries, -) - - -class _BaseFilter(QObject): - """Base class for all filters.""" - - def __init__(self, owner): - """Positional argument: - owner - the object containing the filter screen.""" - super().__init__() - self._owner = owner - - def refresh(self): - """Refresh the screen.""" - pass - - -class _FreqBandMixIn: - """Mixin class for the frequency and band filters. - - Provides some functions used in both classes.""" - - @pyqtSlot() - def _set_min_value_upper_limit(self, lower_combo_box, - lower_spin_box, - upper_combo_box, - upper_spin_box): - """Forbid to a lower limit to be greater than the corresponding upper one. - - Used for frequency and bandwidth screens.""" - if lower_spin_box.isEnabled(): - unit_conversion = { - 'Hz': ['kHz', 'MHz', 'GHz'], - 'kHz': ['MHz', 'GHz'], - 'MHz': ['GHz'] - } - lower_units = lower_combo_box.currentText() - upper_units = upper_combo_box.currentText() - lower_value = lower_spin_box.value() - inf_limit = (lower_value * Constants.CONVERSION_FACTORS[lower_units]) \ - // Constants.CONVERSION_FACTORS[upper_units] - counter = 0 - while inf_limit > upper_spin_box.maximum(): - counter += 1 - inf_limit //= 1000 - if upper_spin_box.minimum() != inf_limit: - upper_spin_box.setMinimum(inf_limit) - if counter > 0: - new_unit = unit_conversion[upper_units][counter - 1] - upper_combo_box.disconnect() - upper_combo_box.setCurrentText(new_unit) - upper_combo_box.currentTextChanged.connect( - partial( - self._set_min_value_upper_limit, - lower_combo_box, - lower_spin_box, - upper_combo_box, - upper_spin_box - ) - ) - - @pyqtSlot() - def _reset_fb_filters(self, ftype): - """Reset the Frequency or Bandwidth depending on 'ftype'. - - ftype can be either Ftype.FREQ or Ftype.BAND. - """ - if ftype != Ftype.FREQ and ftype != Ftype.BAND: - raise ValueError("Wrong ftype in function '_reset_fb_filters'") - - apply_remove_btn = getattr(self._owner, 'apply_remove_' + ftype + '_filter_btn') - include_undef_btn = getattr(self._owner, 'include_undef_' + ftype + 's') - activate_low = getattr(self._owner, 'activate_low_' + ftype + '_filter_btn') - activate_up = getattr(self._owner, 'activate_up_' + ftype + '_filter_btn') - lower_unit = getattr(self._owner, 'lower_' + ftype + '_filter_unit') - upper_unit = getattr(self._owner, 'upper_' + ftype + '_filter_unit') - lower_spinbox = getattr(self._owner, 'lower_' + ftype + '_spinbox') - upper_spinbox = getattr(self._owner, 'upper_' + ftype + '_spinbox') - lower_confidence = getattr(self._owner, 'lower_' + ftype + '_confidence') - upper_confidence = getattr(self._owner, 'lower_' + ftype + '_confidence') - - default_val = 1 if ftype == Ftype.FREQ else 5000 - if ftype == Ftype.FREQ: - for f in self._frequency_filters_btns: - if f.isChecked(): - f.setChecked(False) - uncheck_and_emit(apply_remove_btn) - if include_undef_btn.isChecked(): - include_undef_btn.setChecked(False) - uncheck_and_emit(activate_low) - uncheck_and_emit(activate_up) - lower_unit.setCurrentText("MHz") - upper_unit.setCurrentText("MHz") - lower_spinbox.setValue(default_val) - upper_spinbox.setMinimum(1) - upper_spinbox.setValue(default_val) - lower_confidence.setValue(0) - upper_confidence.setValue(0) - - @pyqtSlot() - def _set_band_filter_label(self, - activate_low_btn, - lower_spinbox, - lower_unit, - lower_confidence, - activate_up_btn, - upper_spinbox, - upper_unit, - upper_confidence, - range_lbl): - """Display the actual range applied for the signal's property search. - - Used for frequency and bandwidth screens.""" - activate_low = False - activate_high = False - color = self._owner.inactive_color - title = '' - to_display = '' - if activate_low_btn.isChecked(): - activate_low = True - color = self._owner.active_color - min_value = lower_spinbox.value() - if lower_confidence.value() != 0: - min_value -= lower_spinbox.value() * lower_confidence.value() / 100 - to_display += str(round(min_value, Constants.MAX_DIGITS)) \ - + ' ' + lower_unit.currentText() - else: - to_display += 'DC' - to_display += Constants.RANGE_SEPARATOR - if activate_up_btn.isChecked(): - max_value = upper_spinbox.value() - activate_high = True - color = self._owner.active_color - if upper_confidence.value() != 0: - max_value += upper_spinbox.value() * upper_confidence.value() / 100 - to_display += str(round(max_value, Constants.MAX_DIGITS)) + ' ' \ - + upper_unit.currentText() - else: - to_display += 'INF' - if activate_low and activate_high: - title = 'Band-pass\n\n' - elif activate_low and not activate_high: - title = 'Low-pass\n\n' - elif not activate_low and activate_high: - title = 'High-pass\n\n' - else: - title = "Selected range:\n\n" - to_display = "Inactive" - to_display = title + to_display - range_lbl.setText(to_display) - range_lbl.setStyleSheet(f'color: {color};') - - -class FreqFilter(_BaseFilter, _FreqBandMixIn): - """Frequency filter class.""" - - def __init__(self, owner): - super().__init__(owner) - self.apply_remove_btn = self._owner.apply_remove_freq_filter_btn - self.reset_btn = self._owner.reset_frequency_filters_btn - self._frequency_filters_btns = ( - self._owner.elf_filter_btn, - self._owner.slf_filter_btn, - self._owner.ulf_filter_btn, - self._owner.vlf_filter_btn, - self._owner.lf_filter_btn, - self._owner.mf_filter_btn, - self._owner.hf_filter_btn, - self._owner.vhf_filter_btn, - self._owner.uhf_filter_btn, - self._owner.shf_filter_btn, - self._owner.ehf_filter_btn, - ) - - self.apply_remove_btn.set_texts(Constants.APPLY, Constants.REMOVE) - self.apply_remove_btn.set_slave_filters( - simple_ones=[ - *self._frequency_filters_btns, - self._owner.include_undef_freqs, - self._owner.activate_low_freq_filter_btn, - self._owner.activate_up_freq_filter_btn - ], - radio_1=self._owner.activate_low_freq_filter_btn, - ruled_by_radio_1=[ - self._owner.lower_freq_spinbox, - self._owner.lower_freq_filter_unit, - self._owner.lower_freq_confidence - ], - radio_2=self._owner.activate_up_freq_filter_btn, - ruled_by_radio_2=[ - self._owner.upper_freq_spinbox, - self._owner.upper_freq_filter_unit, - self._owner.upper_freq_confidence - ] - ) - - connect_events_to_func( - events_to_connect=[self._owner.lower_freq_spinbox.valueChanged, - self._owner.upper_freq_spinbox.valueChanged, - self._owner.lower_freq_filter_unit.currentTextChanged, - self._owner.upper_freq_filter_unit.currentTextChanged, - self._owner.activate_low_freq_filter_btn.toggled], - fun_to_connect=self._set_min_value_upper_limit, - fun_args=[self._owner.lower_freq_filter_unit, - self._owner.lower_freq_spinbox, - self._owner.upper_freq_filter_unit, - self._owner.upper_freq_spinbox] - ) - - connect_events_to_func( - events_to_connect=[self._owner.lower_freq_spinbox.valueChanged, - self._owner.upper_freq_spinbox.valueChanged, - self._owner.lower_freq_filter_unit.currentTextChanged, - self._owner.upper_freq_filter_unit.currentTextChanged, - self._owner.activate_low_freq_filter_btn.clicked, - self._owner.activate_up_freq_filter_btn.clicked, - self._owner.lower_freq_confidence.valueChanged, - self._owner.upper_freq_confidence.valueChanged], - fun_to_connect=self._set_band_filter_label, - fun_args=[self._owner.activate_low_freq_filter_btn, - self._owner.lower_freq_spinbox, - self._owner.lower_freq_filter_unit, - self._owner.lower_freq_confidence, - self._owner.activate_up_freq_filter_btn, - self._owner.upper_freq_spinbox, - self._owner.upper_freq_filter_unit, - self._owner.upper_freq_confidence, - self._owner.freq_range_lbl] - ) - - self._owner.activate_low_freq_filter_btn.toggled.connect( - partial(self._owner.activate_if_toggled, - self._owner.activate_low_freq_filter_btn, - self._owner.lower_freq_spinbox, - self._owner.lower_freq_filter_unit, - self._owner.lower_freq_confidence) - ) - - self._owner.activate_up_freq_filter_btn.toggled.connect( - partial(self._owner.activate_if_toggled, - self._owner.activate_up_freq_filter_btn, - self._owner.upper_freq_spinbox, - self._owner.upper_freq_filter_unit, - self._owner.upper_freq_confidence) - ) - - @pyqtSlot() - def reset(self): - """Reset the filter screen.""" - self._reset_fb_filters(Ftype.FREQ) - - def _ok(self, signal_name): - """Evalaute if the signal matches the frequency filters.""" - if not self.apply_remove_btn.isChecked(): - return True - undef_freq = is_undef_freq(self._owner.db.loc[signal_name]) - if undef_freq: - if self._owner.include_undef_freqs.isChecked(): - return True - else: - return False - - signal_freqs = ( - safe_cast(self._owner.db.at[signal_name, Signal.INF_FREQ], int), - safe_cast(self._owner.db.at[signal_name, Signal.SUP_FREQ], int) - ) - - band_filter_ok = False - any_checked = False - for btn, band_limits in zip(self._frequency_filters_btns, Constants.BANDS): - if btn.isChecked(): - any_checked = True - if signal_freqs[0] < band_limits.upper and signal_freqs[1] >= band_limits.lower: - band_filter_ok = True - lower_limit_ok = True - upper_limit_ok = True - if self._owner.activate_low_freq_filter_btn.isChecked(): - if not signal_freqs[1] >= filters_limit(self._owner.lower_freq_spinbox, - self._owner.lower_freq_filter_unit, - self._owner.lower_freq_confidence, -1): - lower_limit_ok = False - if self._owner.activate_up_freq_filter_btn.isChecked(): - if not signal_freqs[0] < filters_limit(self._owner.upper_freq_spinbox, - self._owner.upper_freq_filter_unit, - self._owner.upper_freq_confidence): - upper_limit_ok = False - if any_checked: - return band_filter_ok and lower_limit_ok and upper_limit_ok - else: - return lower_limit_ok and upper_limit_ok - - def refresh(self): - """Extend _BaseFilter.refresh.""" - super().refresh() - self._set_band_filter_label( - self._owner.activate_low_band_filter_btn, - self._owner.lower_band_spinbox, - self._owner.lower_band_filter_unit, - self._owner.lower_band_confidence, - self._owner.activate_up_band_filter_btn, - self._owner.upper_band_spinbox, - self._owner.upper_band_filter_unit, - self._owner.upper_band_confidence, - self._owner.band_range_lbl - ) - - -class BandFilter(_BaseFilter, _FreqBandMixIn): - """Band filter class.""" - def __init__(self, owner): - super().__init__(owner) - self.apply_remove_btn = self._owner.apply_remove_band_filter_btn - self.reset_btn = self._owner.reset_band_filters_btn - connect_events_to_func( - events_to_connect=[self._owner.lower_band_spinbox.valueChanged, - self._owner.upper_band_spinbox.valueChanged, - self._owner.lower_band_filter_unit.currentTextChanged, - self._owner.upper_band_filter_unit.currentTextChanged, - self._owner.activate_low_band_filter_btn.toggled], - fun_to_connect=self._set_min_value_upper_limit, - fun_args=[self._owner.lower_band_filter_unit, - self._owner.lower_band_spinbox, - self._owner.upper_band_filter_unit, - self._owner.upper_band_spinbox] - ) - - connect_events_to_func( - events_to_connect=[self._owner.lower_band_spinbox.valueChanged, - self._owner.upper_band_spinbox.valueChanged, - self._owner.lower_band_filter_unit.currentTextChanged, - self._owner.upper_band_filter_unit.currentTextChanged, - self._owner.activate_low_band_filter_btn.clicked, - self._owner.activate_up_band_filter_btn.clicked, - self._owner.lower_band_confidence.valueChanged, - self._owner.upper_band_confidence.valueChanged], - fun_to_connect=self._set_band_filter_label, - fun_args=[self._owner.activate_low_band_filter_btn, - self._owner.lower_band_spinbox, - self._owner.lower_band_filter_unit, - self._owner.lower_band_confidence, - self._owner.activate_up_band_filter_btn, - self._owner.upper_band_spinbox, - self._owner.upper_band_filter_unit, - self._owner.upper_band_confidence, - self._owner.band_range_lbl] - ) - - self._owner.activate_low_band_filter_btn.toggled.connect( - partial(self._owner.activate_if_toggled, - self._owner.activate_low_band_filter_btn, - self._owner.lower_band_spinbox, - self._owner.lower_band_filter_unit, - self._owner.lower_band_confidence) - ) - - self._owner.activate_up_band_filter_btn.toggled.connect( - partial(self._owner.activate_if_toggled, - self._owner.activate_up_band_filter_btn, - self._owner.upper_band_spinbox, - self._owner.upper_band_filter_unit, - self._owner.upper_band_confidence) - ) - - self.apply_remove_btn.set_texts(Constants.APPLY, Constants.REMOVE) - self.apply_remove_btn.set_slave_filters( - simple_ones=[ - self._owner.include_undef_bands, - self._owner.activate_low_band_filter_btn, - self._owner.activate_up_band_filter_btn - ], - radio_1=self._owner.activate_low_band_filter_btn, - ruled_by_radio_1=[ - self._owner.lower_band_spinbox, - self._owner.lower_band_filter_unit, - self._owner.lower_band_confidence - ], - radio_2=self._owner.activate_up_band_filter_btn, - ruled_by_radio_2=[ - self._owner.upper_band_spinbox, - self._owner.upper_band_filter_unit, - self._owner.upper_band_confidence - ] - ) - - @pyqtSlot() - def reset(self): - """Reset the filter screen.""" - self._reset_fb_filters(Ftype.BAND) - - def _ok(self, signal_name): - """Evalaute if the signal matches the band filters.""" - if not self.apply_remove_btn.isChecked(): - return True - undef_band = is_undef_band(self._owner.db.loc[signal_name]) - if undef_band: - if self._owner.include_undef_bands.isChecked(): - return True - else: - return False - - signal_bands = ( - safe_cast(self._owner.db.at[signal_name, Signal.INF_BAND], int), - safe_cast(self._owner.db.at[signal_name, Signal.SUP_BAND], int) - ) - - lower_limit_ok = True - upper_limit_ok = True - if self._owner.activate_low_band_filter_btn.isChecked(): - if not signal_bands[1] >= filters_limit(self._owner.lower_band_spinbox, - self._owner.lower_band_filter_unit, - self._owner.lower_band_confidence, -1): - lower_limit_ok = False - if self._owner.activate_up_band_filter_btn.isChecked(): - if not signal_bands[0] < filters_limit(self._owner.upper_band_spinbox, - self._owner.upper_band_filter_unit, - self._owner.upper_band_confidence): - upper_limit_ok = False - return lower_limit_ok and upper_limit_ok - - def refresh(self): - """Extend _BaseFilter.refresh.""" - super().refresh() - self._set_band_filter_label( - self._owner.activate_low_freq_filter_btn, - self._owner.lower_freq_spinbox, - self._owner.lower_freq_filter_unit, - self._owner.lower_freq_confidence, - self._owner.activate_up_freq_filter_btn, - self._owner.upper_freq_spinbox, - self._owner.upper_freq_filter_unit, - self._owner.upper_freq_confidence, - self._owner.freq_range_lbl - ) - - -class CatFilter(_BaseFilter): - """Category filter class.""" - - def __init__(self, owner): - super().__init__(owner) - self.apply_remove_btn = self._owner.apply_remove_cat_filter_btn - self.reset_btn = self._owner.reset_cat_filters_btn - # Order matters! - self._cat_filter_btns = [ - self._owner.military_btn, - self._owner.radar_btn, - self._owner.active_btn, - self._owner.inactive_btn, - self._owner.ham_btn, - self._owner.commercial_btn, - self._owner.aviation_btn, - self._owner.marine_btn, - self._owner.analogue_btn, - self._owner.digital_btn, - self._owner.trunked_btn, - self._owner.utility_btn, - self._owner.sat_btn, - self._owner.navigation_btn, - self._owner.interfering_btn, - self._owner.number_stations_btn, - self._owner.time_signal_btn - ] - - self.apply_remove_btn.set_texts(Constants.APPLY, Constants.REMOVE) - self.apply_remove_btn.set_slave_filters( - simple_ones=[ - *self._cat_filter_btns, - self._owner.cat_at_least_one, - self._owner.cat_all - ] - ) - - @pyqtSlot() - def reset(self): - """Reset the category filter screen.""" - uncheck_and_emit(self.apply_remove_btn) - for f in self._cat_filter_btns: - if f.isChecked(): - f.setChecked(False) - self._owner.cat_at_least_one.setChecked(True) - - def _ok(self, signal_name): - """Evalaute if the signal matches the category filters.""" - if not self.apply_remove_btn.isChecked(): - return True - cat_code = self._owner.db.at[signal_name, Signal.CATEGORY_CODE] - cat_checked = 0 - positive_cases = 0 - for index, cat in enumerate(self._cat_filter_btns): - if cat.isChecked(): - cat_checked += 1 - if cat_code[index] == '1': - positive_cases += 1 - if self._owner.cat_at_least_one.isChecked(): - return positive_cases > 0 - else: - return cat_checked == positive_cases and cat_checked > 0 - - -class ModeFilter(_BaseFilter): - """Mode filter class.""" - - def __init__(self, owner): - super().__init__(owner) - self.apply_remove_btn = self._owner.apply_remove_mode_filter_btn - self.reset_btn = self._owner.reset_mode_filters_btn - self._set_mode_tree_widget() - self._owner.mode_tree_widget.itemSelectionChanged.connect( - self._manage_mode_selections - ) - self.apply_remove_btn.set_texts(Constants.APPLY, Constants.REMOVE) - self.apply_remove_btn.set_slave_filters( - simple_ones=[ - self._owner.mode_tree_widget, - self._owner.include_unknown_modes_btn - ] - ) - - def _manage_mode_selections(self): - """Rules the selection of childs items of the 'Mode' QTreeWidget. - - If a parent is selected all its children will be selected as well. - """ - selected_items = self._owner.mode_tree_widget.selectedItems() - parents = Constants.MODES.keys() - for parent in parents: - for item in selected_items: - if parent == item.text(0): - for i in range(len(Constants.MODES[parent])): - item.child(i).setSelected(True) - - def _set_mode_tree_widget(self): - """Construct the QTreeWidget for the 'Mode' screen.""" - for parent, children in Constants.MODES.items(): - iparent = QTreeWidgetItem([parent]) - self._owner.mode_tree_widget.addTopLevelItem(iparent) - for child in children: - ichild = QTreeWidgetItem([child]) - iparent.addChild(ichild) - self._owner.mode_tree_widget.expandAll() - - @pyqtSlot() - def reset(self): - """Reset the mode filter screen.""" - uncheck_and_emit(self.apply_remove_btn) - parents = Constants.MODES.keys() - selected_children = [] - for item in self._owner.mode_tree_widget.selectedItems(): - if item.text(0) in parents: - item.setSelected(False) - else: - selected_children.append(item) - for children in selected_children: - children.setSelected(False) - if self._owner.include_unknown_modes_btn.isChecked(): - self._owner.include_unknown_modes_btn.setChecked(False) - - def _ok(self, signal_name): - """Evalaute if the signal matches the mode filters.""" - if not self.apply_remove_btn.isChecked(): - return True - signal_mode = self._owner.db.at[signal_name, Signal.MODE] - if signal_mode == Constants.UNKNOWN: - if self._owner.include_unknown_modes_btn.isChecked(): - return True - else: - return False - selected_items = [item for item in self._owner.mode_tree_widget.selectedItems()] - selected_items_text = [i.text(0) for i in selected_items] - parents = [ - item for item in selected_items_text - if item in Constants.MODES.keys() - ] - ok = [] - for item in selected_items: - if item.text(0) in parents: - ok.append(item.text(0) in signal_mode) - elif not item.parent().isSelected(): - ok.append(item.text(0) == signal_mode) - return any(ok) - - -class ModulationFilter(_BaseFilter): - """Modulation filter class.""" - - def __init__(self, owner): - super().__init__(owner) - self.apply_remove_btn = self._owner.apply_remove_modulation_filter_btn - self.reset_btn = self._owner.reset_modulation_filters_btn - self._owner.search_bar_modulation.textEdited.connect(self._show_matching_modulations) - self.apply_remove_btn.set_texts(Constants.APPLY, Constants.REMOVE) - self.apply_remove_btn.set_slave_filters( - simple_ones=[ - self._owner.search_bar_modulation, - self._owner.modulation_list - ] - ) - self._owner.modulation_list.itemClicked.connect(self._remove_if_unselected_modulation) - - @pyqtSlot(QListWidgetItem) - def _remove_if_unselected_modulation(self, item): - """If an item is unselected from the modulations list, hide the item.""" - if not item.isSelected(): - self._show_matching_modulations(self.search_bar_modulation.text()) - - @pyqtSlot(str) - def _show_matching_modulations(self, text): - """Show the modulations which matches 'text'. - - The match criterion is defined in 'show_matching_strings'.""" - show_matching_strings(self._owner.modulation_list, text) - - @pyqtSlot() - def reset(self): - """Reset the modulation filter screen.""" - uncheck_and_emit(self.apply_remove_btn) - self._owner.search_bar_modulation.setText('') - show_matching_strings( - self._owner.modulation_list, - self._owner.search_bar_modulation.text() - ) - for i in range(self._owner.modulation_list.count()): - if self._owner.modulation_list.item(i).isSelected(): - self._owner.modulation_list.item(i).setSelected(False) - - def _ok(self, signal_name): - """Evalaute if the signal matches the modulation filters.""" - if not self.apply_remove_btn.isChecked(): - return True - signal_modulation = get_field_entries( - self._owner.db.at[signal_name, Signal.MODULATION] - ) - for item in self._owner.modulation_list.selectedItems(): - if item.text() in signal_modulation: - return True - return False - - -class LocFilter(_BaseFilter): - """Location filter class.""" - - def __init__(self, owner): - super().__init__(owner) - self.apply_remove_btn = self._owner.apply_remove_location_filter_btn - self.reset_btn = self._owner.reset_location_filters_btn - self._owner.search_bar_location.textEdited.connect( - self._show_matching_locations - ) - self.apply_remove_btn.set_texts(Constants.APPLY, Constants.REMOVE) - self.apply_remove_btn.set_slave_filters( - simple_ones=[ - self._owner.search_bar_location, - self._owner.locations_list - ] - ) - self._owner.locations_list.itemClicked.connect(self._remove_if_unselected_location) - - @pyqtSlot(str) - def _show_matching_locations(self, text): - """Show the locations which matches 'text'. - - The match criterion is defined in 'show_matching_strings'.""" - show_matching_strings(self._owner.locations_list, text) - - @pyqtSlot(QListWidgetItem) - def _remove_if_unselected_location(self, item): - """If an item is unselected from the locations list, hide the item.""" - if not item.isSelected(): - self._show_matching_locations(self._owner.search_bar_location.text()) - - @pyqtSlot() - def reset(self): - """Reset the location filter screen.""" - uncheck_and_emit(self.apply_remove_btn) - self._owner.search_bar_location.setText('') - show_matching_strings( - self._owner.locations_list, - self._owner.search_bar_location.text() - ) - for i in range(self._owner.locations_list.count()): - if self._owner.locations_list.item(i).isSelected(): - self._owner.locations_list.item(i).setSelected(False) - - def _ok(self, signal_name): - """Evalaute if the signal matches the location filters.""" - if not self.apply_remove_btn.isChecked(): - return True - signal_locations = get_field_entries( - self._owner.db.at[signal_name, Signal.LOCATION] - ) - for item in self._owner.locations_list.selectedItems(): - if item.text() in signal_locations: - return True - return False - - -class ACFFilter(_BaseFilter): - """Autocorrelation function filter class.""" - - def __init__(self, owner): - super().__init__(owner) - self.apply_remove_btn = self._owner.apply_remove_acf_filter_btn - self.reset_btn = self._owner.reset_acf_filters_btn - self.apply_remove_btn.set_texts(Constants.APPLY, Constants.REMOVE) - self.apply_remove_btn.set_slave_filters( - simple_ones=[ - self._owner.include_undef_acf, - self._owner.include_variable_acf, - self._owner.acf_spinbox, - self._owner.acf_confidence - ] - ) - self._owner.acf_info_btn.clicked.connect(lambda: webbrowser.open(Constants.ACF_DOCS)) - - connect_events_to_func( - events_to_connect=[self._owner.acf_spinbox.valueChanged, - self._owner.acf_confidence.valueChanged], - fun_to_connect=self._set_acf_interval_label, - fun_args=None - ) - - @pyqtSlot() - def _set_acf_interval_label(self): - """Display the actual acf interval for the search.""" - tolerance = self._owner.acf_spinbox.value() * self._owner.acf_confidence.value() / 100 - if tolerance > 0: - val = round(self._owner.acf_spinbox.value() - tolerance, Constants.MAX_DIGITS) - to_display = f"Selected range:\n\n{val}" + Constants.RANGE_SEPARATOR \ - + f"{round(self._owner.acf_spinbox.value() + tolerance, Constants.MAX_DIGITS)} ms" - else: - to_display = f"Selected value:\n\n{self._owner.acf_spinbox.value()} ms" - self._owner.acf_range_lbl.setText(to_display) - self._owner.acf_range_lbl.setStyleSheet(f"color: {self._owner.active_color}") - - @pyqtSlot() - def reset(self): - """Reset the acf filter screen.""" - uncheck_and_emit(self.apply_remove_btn) - if self._owner.include_undef_acf.isChecked(): - self._owner.include_undef_acf.setChecked(False) - if self._owner.include_variable_acf.isChecked(): - self._owner.include_variable_acf.setChecked(False) - self._owner.acf_spinbox.setValue(50) - self._owner.acf_confidence.setValue(0) - - def _ok(self, signal_name): - """Evalaute if the signal matches the acf filters.""" - if not self.apply_remove_btn.isChecked(): - return True - signal_acf_list = self._owner.db.at[signal_name, Signal.ACF] - if signal_acf_list[0].unknown: # Unknown acf are the only acf of the signal. - if self._owner.include_undef_acf.isChecked(): - return True - else: - return False - else: - tolerance = self._owner.acf_spinbox.value() * self._owner.acf_confidence.value() / 100 - upper_limit = self._owner.acf_spinbox.value() + tolerance - lower_limit = self._owner.acf_spinbox.value() - tolerance - for v in signal_acf_list: - if v.is_numeric: - if lower_limit <= v.numeric_value <= upper_limit: - return True - elif self._owner.include_variable_acf.isChecked(): - return True - return False - - def refresh(self): - """Extend _BaseFilter.refresh.""" - super().refresh() - self._set_acf_interval_label() - - -class Filters(QObject): - """Global filter class. - - Provides the information about all the filters. Its only public attribute - is filters, which is a dictionary containing instances of all the filters. - The only exposed methods are reset(), ok(signal_name) and refresh(). - The class also connects the apply and reset buttons to the relevant functions.""" - - def __init__(self, owner): - super().__init__() - self.filters = { - "freq_filter": FreqFilter(owner), - "band_filter": BandFilter(owner), - "cat_filter": CatFilter(owner), - "mode_filter": ModeFilter(owner), - "modulation_filter": ModulationFilter(owner), - "location_filter": LocFilter(owner), - "acf_filter": ACFFilter(owner), - } - self._owner = owner - self._owner.reset_filters_btn.clicked.connect(self._reset) - - # Connect Apply and Reset buttons clicks to functions. - for f in self._values: - f.apply_remove_btn.clicked.connect(self._display_signals) - f.reset_btn.clicked.connect(f.reset) - - @property - def _values(self): - return self.filters.values() - - @pyqtSlot() - def _display_signals(self): - self._owner.display_signals() - - @pyqtSlot() - def _reset(self): - """Reset all the filters.""" - for f in self._values: - f.reset() - - def ok(self, signal_name): - """Check whether all the filters are passed.""" - return all(f._ok(signal_name) for f in self._values) - - def refresh(self): - """Refresh the relevant widgets when changing theme.""" - for f in self._values: - f.refresh() diff --git a/src/fixed_aspect_ratio_label.py b/src/fixed_aspect_ratio_label.py deleted file mode 100644 index d72b323..0000000 --- a/src/fixed_aspect_ratio_label.py +++ /dev/null @@ -1,38 +0,0 @@ -from PyQt5.QtWidgets import QLabel -from PyQt5.QtCore import Qt - - -class FixedAspectRatioLabel(QLabel): - """Subclass QLabel. A resizable label class.""" - - def __init__(self, parent=None): - """Initialize the instance. Set the pixmap to None.""" - super().__init__(parent) - self.pixmap = None - - def set_default_stylesheet(self): - """Set the initial stylesheet of the label.""" - self.setStyleSheet("""border-width: 1px; - border-style: solid; - border-color: black;""") - - def make_transparent(self): - """Make the label transparent. - - Remove text and border.""" - self.setText('') - self.setStyleSheet("border-width: 0px;") - - def apply_pixmap(self): - """Apply a scaled pixmap without modifying the dimension of the original one.""" - if self.pixmap: - self.setPixmap( - self.pixmap.scaled( - self.size(), Qt.IgnoreAspectRatio, Qt.SmoothTransformation - ) - ) - - def rescale(self, size): - """Rescale the widget and the displayed pixmap to the given size.""" - self.resize(size) - self.apply_pixmap() diff --git a/src/fixed_aspect_ratio_widget.py b/src/fixed_aspect_ratio_widget.py deleted file mode 100644 index 654fed4..0000000 --- a/src/fixed_aspect_ratio_widget.py +++ /dev/null @@ -1,26 +0,0 @@ -from PyQt5.QtWidgets import QWidget -from PyQt5.QtCore import QSize - - -class FixedAspectRatioWidget(QWidget): - """Subclass QWidget. Keep all the internal labels to a fixed aspect ratio.""" - - SPACE = 10 - - def __init__(self, parent=None): - """Initialize the instance.""" - super().__init__(parent) - self.labels = [] - - def resizeEvent(self, event): - """Override QWidget.resizeEvent. Rescale all the internal widgets.""" - h, w = self.height(), self.width() - h_lbl = h / 9 - self.SPACE - w_lbl = 5 * h_lbl - w_pad = w - 10 - if w_lbl > w_pad: - w_lbl = w_pad - h_lbl = w_pad / 5 - - for label in self.labels: - label.rescale(QSize(w_lbl, h_lbl)) diff --git a/src/loggingconf.py b/src/loggingconf.py deleted file mode 100644 index ca8b3c0..0000000 --- a/src/loggingconf.py +++ /dev/null @@ -1,43 +0,0 @@ -import logging -import logging.config -from constants import __BASE_FOLDER__ -import os.path - -"""Import the module to initialize the logging configuration. - -It is imported only for its side effects.""" - - -_LOGGING_CONFIG = { - 'version': 1, - 'formatters': { - 'general': { - 'format': '%(asctime)s::%(levelname)s::%(module)s::%(funcName)s::%(message)s', - 'datefmt': '%d/%m/%Y %I:%M:%S %p', - }, - }, - 'handlers': { - 'console': { - 'level': 'INFO', - 'formatter': 'general', - 'class': 'logging.StreamHandler', - 'stream': 'ext://sys.stdout', - }, - 'file': { - 'class': 'logging.FileHandler', - 'level': 'ERROR', - 'filename': os.path.join(__BASE_FOLDER__, 'info.log'), - 'mode': 'w', - 'encoding': 'utf8', - 'formatter': 'general', - }, - }, - 'root': { - 'level': 'DEBUG', - 'handlers': ['console', 'file'], - }, - # Add loggers if required - # 'loggers': {} -} - -logging.config.dictConfig(_LOGGING_CONFIG) diff --git a/src/os_utilities.py b/src/os_utilities.py deleted file mode 100644 index c9227f3..0000000 --- a/src/os_utilities.py +++ /dev/null @@ -1,38 +0,0 @@ -import sys -import platform -from constants import SupportedOs - - -def _is_mac_os(): - """Return True if running OS is Mac.""" - return sys.platform == 'darwin' - - -def _is_win_os(): - """Return True if running OS is Windows.""" - return sys.platform == 'win32' - - -def _is_linux_os(): - """Return True if running OS is Linux.""" - return sys.platform == 'linux' - - -IS_MAC = _is_mac_os() -IS_LINUX = _is_linux_os() -IS_WINDOWS = _is_win_os() -IS_RASPBIAN = IS_LINUX and 'arm' in platform.machine().lower() - - -def get_os(): - """Get the name of the current running operating system.""" - if IS_WINDOWS: - return SupportedOs.WINDOWS - elif IS_LINUX: - if IS_RASPBIAN: - return SupportedOs.RASPBIAN - return SupportedOs.LINUX - elif IS_MAC: - return SupportedOs.MAC - else: - return None diff --git a/src/settings.py b/src/settings.py deleted file mode 100644 index 84edb1a..0000000 --- a/src/settings.py +++ /dev/null @@ -1,43 +0,0 @@ -import os.path -from constants import Constants -import json -import logging - - -class Settings: - """Dynamically save and load the settings of the application.""" - - def __init__(self): - self._dct = {} - - def load(self): - """Load the setiings.json file.""" - if not os.path.exists(Constants.SETTINGS_FILE): - return - try: - with open(Constants.SETTINGS_FILE, 'r') as settings_file: - self._dct = json.load(settings_file) - except FileNotFoundError: - logging.info("No settings.json file") - pass # Invalid file. - - def save(self, **kwargs): - """Save the settings.json file. - - Also update the current settings specified in kwargs. - New settings can be dynamically added via this method.""" - for k, v in kwargs.items(): - self._dct[k] = v - with open(Constants.SETTINGS_FILE, mode='w') as settings_file: - json.dump( - self._dct, - settings_file, - sort_keys=True, - indent=4 - ) - - def __getattr__(self, attr): - """Return the corresponding setting. - - Return None if there is no such setting yet.""" - return self._dct.get(attr, None) diff --git a/src/spaceweathermanager.py b/src/spaceweathermanager.py deleted file mode 100644 index 98ce784..0000000 --- a/src/spaceweathermanager.py +++ /dev/null @@ -1,298 +0,0 @@ -import logging -import webbrowser -from PyQt5.QtCore import QObject, pyqtSlot -from constants import Constants, Messages -from switchable_label import SwitchableLabelsIterable -from weatherdata import SpaceWeatherData -from utilities import pop_up - - -class SpaceWeatherManager(QObject): - """Class to manage the spaceweather screen.""" - - def __init__(self, owner): - super().__init__() - self._owner = owner - self._owner.info_now_btn.clicked.connect( - lambda: webbrowser.open(Constants.SPACE_WEATHER_INFO) - ) - self._owner.update_now_bar.clicked.connect(self._start_update_space_weather) - self._owner.update_now_bar.set_idle() - self._owner.space_weather_data = SpaceWeatherData() - self._owner.space_weather_data.update_complete.connect(self._update_space_weather) - - self.space_weather_labels = ( - self._owner.space_weather_lbl_0, - self._owner.space_weather_lbl_1, - self._owner.space_weather_lbl_2, - self._owner.space_weather_lbl_3, - self._owner.space_weather_lbl_4, - self._owner.space_weather_lbl_5, - self._owner.space_weather_lbl_6, - self._owner.space_weather_lbl_7, - self._owner.space_weather_lbl_8 - ) - - for lab in self.space_weather_labels: - lab.set_default_stylesheet() - - self._owner.space_weather_label_container.labels = self.space_weather_labels - self._owner.space_weather_label_name_container.labels = [ - self._owner.eme_lbl, - self._owner.ms_lbl, - self._owner.muf_lbl, - self._owner.hi_lbl, - self._owner.eu50_lbl, - self._owner.eu70_lbl, - self._owner.eu144_lbl, - self._owner.na_lbl, - self._owner.aurora_lbl - ] - - self._switchable_r_labels = SwitchableLabelsIterable( - self._owner.r0_now_lbl, - self._owner.r1_now_lbl, - self._owner.r2_now_lbl, - self._owner.r3_now_lbl, - self._owner.r4_now_lbl, - self._owner.r5_now_lbl - ) - - self._switchable_s_labels = SwitchableLabelsIterable( - self._owner.s0_now_lbl, - self._owner.s1_now_lbl, - self._owner.s2_now_lbl, - self._owner.s3_now_lbl, - self._owner.s4_now_lbl, - self._owner.s5_now_lbl - ) - - self._switchable_g_now_labels = SwitchableLabelsIterable( - self._owner.g0_now_lbl, - self._owner.g1_now_lbl, - self._owner.g2_now_lbl, - self._owner.g3_now_lbl, - self._owner.g4_now_lbl, - self._owner.g5_now_lbl - ) - - self._switchable_g_today_labels = SwitchableLabelsIterable( - self._owner.g0_today_lbl, - self._owner.g1_today_lbl, - self._owner.g2_today_lbl, - self._owner.g3_today_lbl, - self._owner.g4_today_lbl, - self._owner.g5_today_lbl - ) - - self._k_storm_labels = SwitchableLabelsIterable( - self._owner.k_ex_sev_storm_lbl, - self._owner.k_very_sev_storm_lbl, - self._owner.k_sev_storm_lbl, - self._owner.k_maj_storm_lbl, - self._owner.k_min_storm_lbl, - self._owner.k_active_lbl, - self._owner.k_unsettled_lbl, - self._owner.k_quiet_lbl, - self._owner.k_very_quiet_lbl, - self._owner.k_inactive_lbl - ) - - self._a_storm_labels = SwitchableLabelsIterable( - self._owner.a_sev_storm_lbl, - self._owner.a_maj_storm_lbl, - self._owner.a_min_storm_lbl, - self._owner.a_active_lbl, - self._owner.a_unsettled_lbl, - self._owner.a_quiet_lbl - ) - - # Used by ThemeManager. - self.refreshable_labels = SwitchableLabelsIterable( - *self._switchable_r_labels, - *self._switchable_s_labels, - *self._switchable_g_now_labels, - *self._switchable_g_today_labels, - *self._k_storm_labels, - *self._a_storm_labels, - self._owner.expected_noise_lbl - ) - - @pyqtSlot() - def _start_update_space_weather(self): - """Start the update of the space weather screen. - - Start the corresponding thread. - """ - if not self._owner.space_weather_data.is_updating: - self._owner.update_now_bar.set_updating() - self._owner.space_weather_data.update() - - @pyqtSlot(bool) - def _update_space_weather(self, status_ok): - """Update the space weather screen after a successful download. - - If the download was not successful throw a warning. In any case remove - the downloaded data. - """ - self._owner.update_now_bar.set_idle() - if status_ok: - try: - xray_long = float(self._owner.space_weather_data.xray) - - def format_text(letter, power): - return letter + f"{xray_long * 10**power:.1f}" - - if xray_long < 1e-8 and xray_long != -1.00e+05: - self._owner.peak_flux_lbl.setText("Form -- -- -- -0 -0 -400 -185 -- -Downloading -- -- -:/icon/default_pics/Artemis3.500px.png :/icon/default_pics/Artemis3.500px.png- -- - -- -
-- -- - -12 - -- -Downloading updates -Please wait... - -- -Qt::AlignCenter -- -
-- -- - -12 - -- -status -- -Qt::AlignCenter -- -
-- -- - -12 - -- -Speed -- -Qt::AlignCenter -- -
-- -- -0 -- -0 -- --1 -- -false -- -
-- -- - -12 - -- -- - -Cancel -- -true -- -false -- -false -- -- - = 1e-8 and xray_long < 1e-7: - self._owner.peak_flux_lbl.setText(format_text("A", 8)) - elif xray_long >= 1e-7 and xray_long < 1e-6: - self._owner.peak_flux_lbl.setText(format_text("B", 7)) - elif xray_long >= 1e-6 and xray_long < 1e-5: - self._owner.peak_flux_lbl.setText(format_text("C", 6)) - elif xray_long >= 1e-5 and xray_long < 1e-4: - self._owner.peak_flux_lbl.setText(format_text("M", 5)) - elif xray_long >= 1e-4: - self._owner.peak_flux_lbl.setText(format_text("X", 4)) - elif xray_long == -1.00e+05: - self._owner.peak_flux_lbl.setText("No Data") - - if xray_long < 1e-5 and xray_long != -1.00e+05: - self._switchable_r_labels.switch_on(self._owner.r0_now_lbl) - elif xray_long >= 1e-5 and xray_long < 5e-5: - self._switchable_r_labels.switch_on(self._owner.r1_now_lbl) - elif xray_long >= 5e-5 and xray_long < 1e-4: - self._switchable_r_labels.switch_on(self._owner.r2_now_lbl) - elif xray_long >= 1e-4 and xray_long < 1e-3: - self._switchable_r_labels.switch_on(self._owner.r3_now_lbl) - elif xray_long >= 1e-3 and xray_long < 2e-3: - self._switchable_r_labels.switch_on(self._owner.r4_now_lbl) - elif xray_long >= 2e-3: - self._switchable_r_labels.switch_on(self._owner.r5_now_lbl) - elif xray_long == -1.00e+05: - self._switchable_r_labels.switch_off_all() - - pro10 = float(self._owner.space_weather_data.prot_el) - if pro10 < 10 and pro10 != -1.00e+05: - self._switchable_s_labels.switch_on(self._owner.s0_now_lbl) - elif pro10 >= 10 and pro10 < 100: - self._switchable_s_labels.switch_on(self._owner.s1_now_lbl) - elif pro10 >= 100 and pro10 < 1000: - self._switchable_s_labels.switch_on(self._owner.s2_now_lbl) - elif pro10 >= 1000 and pro10 < 10000: - self._switchable_s_labels.switch_on(self._owner.s3_now_lbl) - elif pro10 >= 10000 and pro10 < 100000: - self._switchable_s_labels.switch_on(self._owner.s4_now_lbl) - elif pro10 >= 100000: - self._switchable_s_labels.switch_on(self._owner.s5_now_lbl) - elif pro10 == -1.00e+05: - self._switchable_s_labels.switch_off_all() - - k_index = int(self._owner.space_weather_data.ak_index[8][11].replace('.', '')) - self._owner.k_index_lbl.setText(str(k_index)) - a_index = int(self._owner.space_weather_data.ak_index[7][7].replace('.', '')) - self._owner.a_index_lbl.setText(str(a_index)) - - if k_index == 0: - self._switchable_g_now_labels.switch_on(self._owner.g0_now_lbl) - self._k_storm_labels.switch_on(self._owner.k_inactive_lbl) - self._owner.expected_noise_lbl.setText(" S0 - S1 (<-120 dBm) ") - elif k_index == 1: - self._switchable_g_now_labels.switch_on(self._owner.g0_now_lbl) - self._k_storm_labels.switch_on(self._owner.k_very_quiet_lbl) - self._owner.expected_noise_lbl.setText(" S0 - S1 (<-120 dBm) ") - elif k_index == 2: - self._switchable_g_now_labels.switch_on(self._owner.g0_now_lbl) - self._k_storm_labels.switch_on(self._owner.k_quiet_lbl) - self._owner.expected_noise_lbl.setText(" S1 - S2 (-115 dBm) ") - elif k_index == 3: - self._switchable_g_now_labels.switch_on(self._owner.g0_now_lbl) - self._k_storm_labels.switch_on(self._owner.k_unsettled_lbl) - self._owner.expected_noise_lbl.setText(" S2 - S3 (-110 dBm) ") - elif k_index == 4: - self._switchable_g_now_labels.switch_on(self._owner.g0_now_lbl) - self._k_storm_labels.switch_on(self._owner.k_active_lbl) - self._owner.expected_noise_lbl.setText(" S3 - S4 (-100 dBm) ") - elif k_index == 5: - self._switchable_g_now_labels.switch_on(self._owner.g1_now_lbl) - self._k_storm_labels.switch_on(self._owner.k_min_storm_lbl) - self._owner.expected_noise_lbl.setText(" S4 - S6 (-90 dBm) ") - elif k_index == 6: - self._switchable_g_now_labels.switch_on(self._owner.g2_now_lbl) - self._k_storm_labels.switch_on(self._owner.k_maj_storm_lbl) - self._owner.expected_noise_lbl.setText(" S6 - S9 (-80 dBm) ") - elif k_index == 7: - self._switchable_g_now_labels.switch_on(self._owner.g3_now_lbl) - self._k_storm_labels.switch_on(self._owner.k_sev_storm_lbl) - self._owner.expected_noise_lbl.setText(" S9 - S20 (>-60 dBm) ") - elif k_index == 8: - self._switchable_g_now_labels.switch_on(self._owner.g4_now_lbl) - self._k_storm_labels.switch_on(self._owner.k_very_sev_storm_lbl) - self._owner.expected_noise_lbl.setText(" S20 - S30 (>-60 dBm) ") - elif k_index == 9: - self._switchable_g_now_labels.switch_on(self._owner.g5_now_lbl) - self._k_storm_labels.switch_on(self._owner.k_ex_sev_storm_lbl) - self._owner.expected_noise_lbl.setText(" S30+ (>>-60 dBm) ") - self._owner.expected_noise_lbl.switch_on() - - if a_index >= 0 and a_index < 8: - self._a_storm_labels.switch_on(self._owner.a_quiet_lbl) - elif a_index >= 8 and a_index < 16: - self._a_storm_labels.switch_on(self._owner.a_unsettled_lbl) - elif a_index >= 16 and a_index < 30: - self._a_storm_labels.switch_on(self._owner.a_active_lbl) - elif a_index >= 30 and a_index < 50: - self._a_storm_labels.switch_on(self._owner.a_min_storm_lbl) - elif a_index >= 50 and a_index < 100: - self._a_storm_labels.switch_on(self._owner.a_maj_storm_lbl) - elif a_index >= 100 and a_index < 400: - self._a_storm_labels.switch_on(self._owner.a_sev_storm_lbl) - - index = self._owner.space_weather_data.geo_storm[6].index("was") + 1 - k_index_24_hmax = int(self._owner.space_weather_data.geo_storm[6][index]) - if k_index_24_hmax == 0: - self._switchable_g_today_labels.switch_on(self._owner.g0_today_lbl) - elif k_index_24_hmax == 1: - self._switchable_g_today_labels.switch_on(self._owner.g0_today_lbl) - elif k_index_24_hmax == 2: - self._switchable_g_today_labels.switch_on(self._owner.g0_today_lbl) - elif k_index_24_hmax == 3: - self._switchable_g_today_labels.switch_on(self._owner.g0_today_lbl) - elif k_index_24_hmax == 4: - self._switchable_g_today_labels.switch_on(self._owner.g0_today_lbl) - elif k_index_24_hmax == 5: - self._switchable_g_today_labels.switch_on(self._owner.g1_today_lbl) - elif k_index_24_hmax == 6: - self._switchable_g_today_labels.switch_on(self._owner.g2_today_lbl) - elif k_index_24_hmax == 7: - self._switchable_g_today_labels.switch_on(self._owner.g3_today_lbl) - elif k_index_24_hmax == 8: - self._switchable_g_today_labels.switch_on(self._owner.g4_today_lbl) - elif k_index_24_hmax == 9: - self._switchable_g_today_labels.switch_on(self._owner.g5_today_lbl) - - val = int(self._owner.space_weather_data.ak_index[7][2].replace('.', '')) - self._owner.sfi_lbl.setText(f"{val}") - val = int( - [x[4] for x in self._owner.space_weather_data.sgas if "SSN" in x][0] - ) - self._owner.sn_lbl.setText(f"{val:d}") - - for label, pixmap in zip(self.space_weather_labels, - self._owner.space_weather_data.images): - label.pixmap = pixmap - label.make_transparent() - label.apply_pixmap() - except Exception as e: # This is a mess, so log an error and give up - logging.error(f"Forecast update failure: {e}") - pop_up( - self._owner, - title=Messages.SCREEN_UPDATE_FAIL, - text=Messages.SCREEN_UPDATE_FAIL_MSG - ).show() - - elif not self._owner.closing: - pop_up(self._owner, title=Messages.BAD_DOWNLOAD, - text=Messages.BAD_DOWNLOAD_MSG).show() - self._owner.space_weather_data.remove_data() diff --git a/src/switchable_label.py b/src/switchable_label.py deleted file mode 100644 index a69c8e4..0000000 --- a/src/switchable_label.py +++ /dev/null @@ -1,158 +0,0 @@ -from PyQt5.QtWidgets import QLabel -from constants import ForecastColors - - -class _BaseSwitchableLabel(QLabel): - """Subclass QLabel. Base class for the switchable labels.""" - - def __init__(self, parent=None): - """Set is_on to False and level to 0.""" - super().__init__(parent) - self.is_on = False - self.level = 0 - - def switch_on(self): - """Set is_on to True.""" - self.is_on = True - - def switch_off(self): - """Set is_on to False.""" - self.is_on = False - - -class SwitchableLabel(_BaseSwitchableLabel): - """Subclass _BaseSwitchableLabel.""" - - def __init__(self, parent=None): - """Define text and colors attributes.""" - super().__init__(parent) - self.switch_on_colors = () - self.switch_off_colors = () - self.text_color = '' - - def switch_on(self): - """Extend _BaseSwitchableLabel.switch_on. - - Apply the active state colors.""" - super().switch_on() - self._apply_colors(*self.switch_on_colors) - - def switch_off(self): - """Extend _BaseSwitchableLabel.switch_off. - - Apply the inactive state colors.""" - super().switch_off() - self._apply_colors(*self.switch_off_colors) - - def _apply_colors(self, start, end): - """Set text and background color of the label.""" - self.setStyleSheet( - f""" - color:{self.text_color}; - background-color: qlineargradient(x1: 0, y1: 0, x2: 1, y2: 0,stop:0 {start} ,stop: 1 {end}); - """ - ) - - -class SingleColorSwitchableLabel(_BaseSwitchableLabel): - """Subclass _BaseSwitchableLabel.""" - - THRESHOLD = 30 - - def __init__(self, parent=None): - """Set default active color.""" - super().__init__(parent) - self.active_color = ForecastColors.WARNING_COLOR - - def switch_on(self): - """Extend _BaseSwitchableLabel.switch_on. - - Apply the active state color if level >= THRESHOLD.""" - if self.level >= self.THRESHOLD: - super().switch_on() - self.setStyleSheet(f"color: {self.active_color}") - - def switch_off(self): - """Extend _BaseSwitchableLabel.switch_off. - - Apply an empty stylesheet.""" - super().switch_off() - self.setStyleSheet("") - - -class MultiColorSwitchableLabel(_BaseSwitchableLabel): - """Subclass _BaseSwitchableLabel.""" - - LEVEL_COLORS = { - 9: ForecastColors.KP9_COLOR, - 8: ForecastColors.KP8_COLOR, - 7: ForecastColors.KP7_COLOR, - 6: ForecastColors.KP6_COLOR, - 5: ForecastColors.KP5_COLOR - } - - MIN_LEVEL = list(LEVEL_COLORS.keys())[-1] - MAX_LEVEL = list(LEVEL_COLORS.keys())[0] - - def __init__(self, parent=None): - """Initialize the instance.""" - super().__init__(parent) - - def switch_on(self): - """Extend _BaseSwitchableLabel.switch_on. - - Apply the active state color based on LEVEL_COLORS.""" - if self.MIN_LEVEL <= self.level <= self.MAX_LEVEL: - super().switch_on() - self.setStyleSheet( - f"""color: {self.LEVEL_COLORS[self.level]}; - text-decoration: underline;""" - ) - - def switch_off(self): - """Extend _BaseSwitchableLabel.switch_off. - - Apply an empty stylesheet.""" - super().switch_off() - self.setStyleSheet("") - - -class SwitchableLabelsIterable: - """Iterable class of _BaseSwitchableLabel.""" - - def __init__(self, *labels): - """Set the labels to iterate through.""" - self.labels = labels - - def __iter__(self): - """Define the iterator.""" - for lab in self.labels: - yield lab - - def switch_on(self, label): - """Switch on the label 'label'. Switch off all the other labels.""" - for lab in self.labels: - if lab is label: - lab.switch_on() - else: - lab.switch_off() - - def switch_off_all(self): - """Switch off all the labels.""" - for lab in self.labels: - lab.switch_off() - - def set(self, attr, value): - """Set the attribute 'attr' equal to 'value' for all the labels.""" - for lab in self.labels: - setattr(lab, attr, value) - - def refresh(self): - """Refresh the state of all the labels. - - Used after the applied theme has changed.""" - for lab in self.labels: - if lab.is_on: - lab.switch_on() - else: - lab.switch_off() diff --git a/src/themes/acqua/acqua.qss b/src/themes/acqua/acqua.qss deleted file mode 100644 index 3bfc122..0000000 --- a/src/themes/acqua/acqua.qss +++ /dev/null @@ -1,631 +0,0 @@ -/* -Aqua Style Sheet for QT Applications -Author: Jaime A. Quiroga P. -Company: GTRONICK -Last updated: 22/01/2019, 07:55. -Available at: https://github.com/GTRONICK/QSS/blob/master/Aqua.qss -*/ -/* QMainWindow { - background-color:#ececec; -} */ - -QWidget{ - background-color:#ececec; -} - -QTextEdit { -} - -QPlainTextEdit { - border-style: solid; - border-color: qlineargradient(spread:pad, x1:0.5, y1:1, x2:0.5, y2:0, stop:0 rgba(0, 113, 255, 255), stop:1 rgba(91, 171, 252, 255)); -} -QToolButton { - border-style: solid; - border-top-color: qlineargradient(spread:pad, x1:0.5, y1:1, x2:0.5, y2:0, stop:0 rgb(215, 215, 215), stop:1 rgb(222, 222, 222)); - border-right-color: qlineargradient(spread:pad, x1:0, y1:0.5, x2:1, y2:0.5, stop:0 rgb(217, 217, 217), stop:1 rgb(227, 227, 227)); - border-left-color: qlineargradient(spread:pad, x1:0, y1:0.5, x2:1, y2:0.5, stop:0 rgb(227, 227, 227), stop:1 rgb(217, 217, 217)); - border-bottom-color: qlineargradient(spread:pad, x1:0.5, y1:1, x2:0.5, y2:0, stop:0 rgb(215, 215, 215), stop:1 rgb(222, 222, 222)); - border-width: 1px; - border-radius: 5px; - color: rgb(0,0,0); - padding: 2px; - background-color: rgb(255,255,255); -} -QToolButton:hover{ - border-style: solid; - border-width: 1px; - border-radius: 5px; - color: rgb(0,0,0); - padding: 2px; - background-color: rgb(255,255,255); -} -QToolButton:pressed{ - border-style: solid; - border-width: 1px; - border-radius: 5px; - color: rgb(0,0,0); - padding: 2px; - background-color: rgb(142,142,142); -} -QPushButton{ - border-width: 1px; - border-radius: 5px; - color: rgb(0,0,0); - padding: 2px; - border: 1px solid transparent; - background-color: transparent; -} - -QPushButton:hover{ - border-style: solid; - border-width: 1px; - border-radius: 5px; - color: rgb(0,0,0); - padding: 2px; - border-color: qlineargradient(spread:pad, x1:0.5, y1:1, x2:0.5, y2:0, stop:0 rgba(49, 147, 250, 255), stop:1 rgba(34, 142, 255, 255)); -} -QPushButton:pressed{ - border-style: solid; - border-width: 1px; - border-radius: 5px; - color: rgb(0,0,0); - padding: 2px; -} - -QPushButton:checked{ - border-style: solid; - border-width: 1px; - border-radius: 5px; - color: #ffffff; - padding: 2px; - background-color: qlineargradient(spread:pad, x1:0.5, y1:1, x2:0.5, y2:0, stop:0 rgba(49, 147, 250, 255), stop:1 rgba(34, 142, 255, 255)); -} - -QPushButton:disabled{ - border-style: solid; - border-width: 1px; - border-radius: 5px; - color: #808086; - padding: 2px; - background-color: transparent; -} -QLineEdit { - border-width: 1px; border-radius: 4px; - border-style: solid; - border-color: qlineargradient(spread:pad, x1:0.5, y1:1, x2:0.5, y2:0, stop:0 rgba(0, 113, 255, 255), stop:1 rgba(91, 171, 252, 255)); -} -QLabel { - color: #000000; -} -QLCDNumber { - color: rgb(0, 113, 255, 255); -} -QProgressBar { - text-align: center; - color: rgb(240, 240, 240); - border-width: 1px; - border-radius: 10px; - border-color: rgb(230, 230, 230); - border-style: solid; - background-color:rgb(207,207,207); -} -QProgressBar::chunk { - background-color: qlineargradient(spread:pad, x1:0.5, y1:1, x2:0.5, y2:0, stop:0 rgba(49, 147, 250, 255), stop:1 rgba(34, 142, 255, 255)); - border-radius: 10px; -} -QMenuBar { - background-color: qlineargradient(spread:pad, x1:0.5, y1:1, x2:0.5, y2:0, stop:0 rgba(207, 209, 207, 255), stop:1 rgba(230, 229, 230, 255)); -} -QMenuBar::item { - color: #000000; - spacing: 3px; - padding: 1px 4px; - background-color: qlineargradient(spread:pad, x1:0.5, y1:1, x2:0.5, y2:0, stop:0 rgba(207, 209, 207, 255), stop:1 rgba(230, 229, 230, 255)); -} - -QMenuBar::item:selected { - background-color: qlineargradient(spread:pad, x1:0.5, y1:1, x2:0.5, y2:0, stop:0 rgba(0, 113, 255, 255), stop:1 rgba(91, 171, 252, 255)); - color: #FFFFFF; -} -QMenu::item:selected { - border-style: solid; - border-top-color: transparent; - border-right-color: transparent; - border-left-color: qlineargradient(spread:pad, x1:0.5, y1:1, x2:0.5, y2:0, stop:0 rgba(0, 113, 255, 255), stop:1 rgba(91, 171, 252, 255)); - border-bottom-color: transparent; - border-left-width: 2px; - color: #000000; - padding-left:15px; - padding-top:4px; - padding-bottom:4px; - padding-right:7px; -} -QMenu::item { - border-style: solid; - border-top-color: transparent; - border-right-color: transparent; - border-left-color: transparent; - border-bottom-color: transparent; - border-bottom-width: 1px; - color: #000000; - padding-left:17px; - padding-top:4px; - padding-bottom:4px; - padding-right:7px; -} -QTabWidget { - color:rgb(0,0,0); - background-color:#000000; -} - -QTreeView { - background-color: transparent; - selection-background-color: transparent; - border: 0px; -} - -QTreeView::item { - background-color: transparent; -} - -QTreeView::item:hover { - border-right: 2px solid #4545e5; - color: rgba(0, 113, 255, 255) -} - -QTreeView::item:selected { - color: rgba(0, 113, 255, 255) -} - -QTreeView::item:active{ - background: transparent; -} - -QTreeView::item:disabled{ - color: #808086; -} - -QTreeView::item:selected:disabled{ - color: #808086; -} - -QListWidget { - background-color: transparent; - border: 0px solid transparent; - border-bottom: 2px solid #80CBC4; -} - -QListView { - background-color: transparent; - outline: 0; - border: 0px solid transparent; -} -QListView::item:hover { - color: rgba(0, 113, 255, 255); - background: transparent; -} - -QListView::item:selected { - color: rgba(0, 113, 255, 255); - background: transparent; -} - -QListView::item:disabled { - color: #808086; - background: transparent; -} - -QListView::item:disabled:selected { - color: rgba(0, 113, 255, 255); - background: transparent; -} - - -QTabWidget::pane { - background-color:rgb(226,226,226); - border-style: solid; - border-radius: 6px; -} -QTabBar::tab:first { - border-style: solid; - border-left-width:1px; - border-right-width:0px; - border-top-width:1px; - border-bottom-width:1px; - border-top-color: rgb(209,209,209); - border-left-color: qlineargradient(spread:pad, x1:0.5, y1:1, x2:0.5, y2:0, stop:0 rgba(209, 209, 209, 209), stop:1 rgba(229, 229, 229, 229)); - border-bottom-color: rgb(229,229,229); - border-top-left-radius: 4px; - border-bottom-left-radius: 4px; - color: #000000; - padding: 3px; - margin-left:0px; - background-color: qlineargradient(spread:pad, x1:0.5, y1:1, x2:0.5, y2:0, stop:0 rgba(247, 247, 247, 255), stop:1 rgba(255, 255, 255, 255)); -} -QTabBar::tab:last { - border-style: solid; - border-width:1px; - border-top-color: rgb(209,209,209); - border-left-color: qlineargradient(spread:pad, x1:0.5, y1:1, x2:0.5, y2:0, stop:0 rgba(209, 209, 209, 209), stop:1 rgba(229, 229, 229, 229)); - border-right-color: qlineargradient(spread:pad, x1:0.5, y1:1, x2:0.5, y2:0, stop:0 rgba(209, 209, 209, 209), stop:1 rgba(229, 229, 229, 229)); - border-bottom-color: rgb(229,229,229); - border-top-right-radius: 4px; - border-bottom-right-radius: 4px; - color: #000000; - padding: 3px; - margin-left:0px; - background-color: qlineargradient(spread:pad, x1:0.5, y1:1, x2:0.5, y2:0, stop:0 rgba(247, 247, 247, 255), stop:1 rgba(255, 255, 255, 255)); -} -QTabBar::tab { - border-style: solid; - border-top-width:1px; - border-bottom-width:1px; - border-left-width:1px; - border-top-color: rgb(209,209,209); - border-left-color: qlineargradient(spread:pad, x1:0.5, y1:1, x2:0.5, y2:0, stop:0 rgba(209, 209, 209, 209), stop:1 rgba(229, 229, 229, 229)); - border-bottom-color: rgb(229,229,229); - color: #000000; - padding: 3px; - margin-left:0px; - background-color: qlineargradient(spread:pad, x1:0.5, y1:1, x2:0.5, y2:0, stop:0 rgba(247, 247, 247, 255), stop:1 rgba(255, 255, 255, 255)); -} -QTabBar::tab:selected, QTabBar::tab:last:selected, QTabBar::tab:hover { - border-style: solid; - border-left-width:1px; - border-right-color: transparent; - border-top-color: rgb(209,209,209); - border-left-color: qlineargradient(spread:pad, x1:0.5, y1:1, x2:0.5, y2:0, stop:0 rgba(209, 209, 209, 209), stop:1 rgba(229, 229, 229, 229)); - border-bottom-color: rgb(229,229,229); - color: #FFFFFF; - padding: 3px; - margin-left:0px; - background-color: qlineargradient(spread:pad, x1:0.5, y1:1, x2:0.5, y2:0, stop:0 rgba(0, 113, 255, 255), stop:1 rgba(91, 171, 252, 255)); -} - -QTabBar::tab:selected, QTabBar::tab:first:selected, QTabBar::tab:hover { - border-style: solid; - border-left-width:1px; - border-bottom-width:1px; - border-top-width:1px; - border-right-color: transparent; - border-top-color: rgb(209,209,209); - border-left-color: qlineargradient(spread:pad, x1:0.5, y1:1, x2:0.5, y2:0, stop:0 rgba(209, 209, 209, 209), stop:1 rgba(229, 229, 229, 229)); - border-bottom-color: rgb(229,229,229); - color: #FFFFFF; - padding: 3px; - margin-left:0px; - background-color: qlineargradient(spread:pad, x1:0.5, y1:1, x2:0.5, y2:0, stop:0 rgba(0, 113, 255, 255), stop:1 rgba(91, 171, 252, 255)); -} - - -QRadioButton { - color: 000000; - padding: 1px; -} -QRadioButton::indicator:checked { - height: 10px; - width: 10px; - border-style:solid; - border-radius:5px; - border-width: 1px; - border-color: qlineargradient(spread:pad, x1:0.5, y1:1, x2:0.5, y2:0, stop:0 rgba(0, 113, 255, 255), stop:1 rgba(91, 171, 252, 255)); - color: #a9b7c6; - background-color: qlineargradient(spread:pad, x1:0.5, y1:1, x2:0.5, y2:0, stop:0 rgba(0, 113, 255, 255), stop:1 rgba(91, 171, 252, 255)); -} -QRadioButton::indicator:!checked { - height: 10px; - width: 10px; - border-style:solid; - border-radius:5px; - border-width: 1px; - border-color: qlineargradient(spread:pad, x1:0.5, y1:1, x2:0.5, y2:0, stop:0 rgba(0, 113, 255, 255), stop:1 rgba(91, 171, 252, 255)); - color: #a9b7c6; - background-color: transparent; -} -QStatusBar { - color:#027f7f; -} - -QSpinBox { - background-color: transparent; - border-width: 0px; -} - -QSpinBox:disabled { - color: #808086; - border-width: 0px; -} - -QSpinBox::up-button { - subcontrol-origin: border; - subcontrol-position: top right; - width: 16px; - image: url("./themes/acqua/icons/up-arrow.png"); - border-width: 0px; -} - -QSpinBox::up-button:hover { - image: url("./themes/acqua/icons/up-arrow_hover.png"); -} - -QSpinBox::up-button:pressed { - image: url("./themes/acqua/icons/up-arrow.png"); -} - -QSpinBox::up-button:disabled { - image: url("./themes/acqua/icons/up-arrow_off.png"); -} - -QSpinBox::down-button { - subcontrol-origin: border; - subcontrol-position: bottom right; - width: 16px; - image: url("./themes/acqua/icons/down-arrow.png"); - border-width: 0px; - border-top-width: 0; -} - -QSpinBox::down-button:hover { - image: url("./themes/acqua/icons/down-arrow_hover.png"); -} - -QSpinBox::down-button:pressed { - image: url("./themes/acqua/icons/down-arrow.png"); -} - -QSpinBox::down-button:disabled { - image: url("./themes/acqua/icons/down-arrow_off.png"); -} - -QComboBox { - border: 0px solid transparent; - border-radius: 2px; - padding: 1px 6px 1px 6px; - min-width: 2em; -} - -QComboBox:!editable { - selection-background-color: transparent; - selection-color: #FFFFFF; - background-color: transparent; -} - -QComboBox:disabled { - color: #808086; -} - -QComboBox:!editable:on, QComboBox::drop-down:editable:on { - background-color: transparent; - selection-background-color: transparent; -} - -QComboBox:on { - padding-top: 3px; - padding-left: 4px; -} - -QComboBox::drop-down { - background-color: transparent; - subcontrol-origin: padding; - subcontrol-position: top right; - width: 20px; - border-top-right-radius: 2px; - border-bottom-right-radius: 2px; -} - -QComboBox::down-arrow:enabled { - image: url("./themes/acqua/icons/down-arrow.png"); -} - -QComboBox::down-arrow:disabled { - image: url("./themes/acqua/icons/down-arrow_off.png"); -} - -QComboBox::down-arrow:hover { - image: url("./themes/acqua/icons/down-arrow_hover.png"); -} - -QComboBox::down-arrow:on { - top: 1px; - left: 1px; -} - -QComboBox QAbstractItemView { - background-color: #ececec; -} - -QScrollArea { - color: #FFFFFF; - background-color:#000000; -} -QSlider::groove:horizontal { - height: 5px; - background-color: qlineargradient(spread:pad, x1:0.5, y1:1, x2:0.5, y2:0, stop:0 rgba(49, 147, 250, 255), stop:1 rgba(34, 142, 255, 255)); -} -QSlider::groove:vertical { - width: 5px; - background-color: qlineargradient(spread:pad, x1:0.5, y1:1, x2:0.5, y2:0, stop:0 rgba(49, 147, 250, 255), stop:1 rgba(34, 142, 255, 255)); -} -QSlider::handle:horizontal { - background: rgb(253,253,253); - border-style: solid; - border-width: 1px; - border-color: rgb(207,207,207); - width: 12px; - margin: -5px 0; - border-radius: 7px; -} -QSlider::handle:vertical { - background: rgb(253,253,253); - border-style: solid; - border-width: 1px; - border-color: rgb(207,207,207); - height: 12px; - margin: 0 -5px; - border-radius: 7px; -} -QSlider::add-page:horizontal { - background: rgb(181,181,181); -} -QSlider::add-page:vertical { - background: rgb(181,181,181); -} -QSlider::sub-page:horizontal { - background-color: qlineargradient(spread:pad, x1:0.5, y1:1, x2:0.5, y2:0, stop:0 rgba(49, 147, 250, 255), stop:1 rgba(34, 142, 255, 255)); -} -QSlider::sub-page:vertical { - background-color: qlineargradient(spread:pad, y1:0.5, x1:1, y2:0.5, x2:0, stop:0 rgba(49, 147, 250, 255), stop:1 rgba(34, 142, 255, 255)); -} -QScrollBar:horizontal { - max-height: 20px; - border: 1px transparent grey; - margin: 0px 20px 0px 20px; -} -QScrollBar:vertical { - max-width: 20px; - border: 1px transparent grey; - margin: 20px 0px 20px 0px; -} -QScrollBar::handle:horizontal { - background: rgb(253,253,253); - border-style: solid; - border-width: 1px; - border-color: rgb(207,207,207); - border-radius: 7px; - min-width: 25px; -} -QScrollBar::handle:horizontal:hover { - background: rgb(253,253,253); - border-style: solid; - border-width: 1px; - border-color: rgb(147, 200, 200); - border-radius: 7px; - min-width: 25px; -} -QScrollBar::handle:vertical { - background: rgb(253,253,253); - border-style: solid; - border-width: 1px; - border-color: rgb(207,207,207); - border-radius: 7px; - min-height: 25px; -} -QScrollBar::handle:vertical:hover { - background: rgb(253,253,253); - border-style: solid; - border-width: 1px; - border-color: rgb(147, 200, 200); - border-radius: 7px; - min-height: 25px; -} -QScrollBar::add-line:horizontal { - border: 2px transparent grey; - border-top-right-radius: 7px; - border-bottom-right-radius: 7px; - background: rgba(34, 142, 255, 255); - width: 20px; - subcontrol-position: right; - subcontrol-origin: margin; -} -QScrollBar::add-line:horizontal:pressed { - border: 2px transparent grey; - border-top-right-radius: 7px; - border-bottom-right-radius: 7px; - background: rgb(181,181,181); - width: 20px; - subcontrol-position: right; - subcontrol-origin: margin; -} -QScrollBar::add-line:vertical { - border: 2px transparent grey; - border-bottom-left-radius: 7px; - border-bottom-right-radius: 7px; - background: rgba(34, 142, 255, 255); - height: 20px; - subcontrol-position: bottom; - subcontrol-origin: margin; -} -QScrollBar::add-line:vertical:pressed { - border: 2px transparent grey; - border-bottom-left-radius: 7px; - border-bottom-right-radius: 7px; - background: rgb(181,181,181); - height: 20px; - subcontrol-position: bottom; - subcontrol-origin: margin; -} -QScrollBar::sub-line:horizontal { - border: 2px transparent grey; - border-top-left-radius: 7px; - border-bottom-left-radius: 7px; - background: rgba(34, 142, 255, 255); - width: 20px; - subcontrol-position: left; - subcontrol-origin: margin; -} -QScrollBar::sub-line:horizontal:pressed { - border: 2px transparent grey; - border-top-left-radius: 7px; - border-bottom-left-radius: 7px; - background: rgb(181,181,181); - width: 20px; - subcontrol-position: left; - subcontrol-origin: margin; -} -QScrollBar::sub-line:vertical { - border: 2px transparent grey; - border-top-left-radius: 7px; - border-top-right-radius: 7px; - background: rgba(34, 142, 255, 255); - height: 20px; - subcontrol-position: top; - subcontrol-origin: margin; -} -QScrollBar::sub-line:vertical:pressed { - border: 2px transparent grey; - border-top-left-radius: 7px; - border-top-right-radius: 7px; - background: rgb(181,181,181); - height: 20px; - subcontrol-position: top; - subcontrol-origin: margin; -} -QScrollBar::left-arrow:horizontal { - border: 1px transparent grey; - border-top-left-radius: 3px; - border-bottom-left-radius: 3px; - width: 6px; - height: 6px; - background: white; -} -QScrollBar::right-arrow:horizontal { - border: 1px transparent grey; - border-top-right-radius: 3px; - border-bottom-right-radius: 3px; - width: 6px; - height: 6px; - background: white; -} -QScrollBar::up-arrow:vertical { - border: 1px transparent grey; - border-top-left-radius: 3px; - border-top-right-radius: 3px; - width: 6px; - height: 6px; - background: white; -} -QScrollBar::down-arrow:vertical { - border: 1px transparent grey; - border-bottom-left-radius: 3px; - border-bottom-right-radius: 3px; - width: 6px; - height: 6px; - background: white; -} -QScrollBar::add-page:horizontal, QScrollBar::sub-page:horizontal { - background: none; -} -QScrollBar::add-page:vertical, QScrollBar::sub-page:vertical { - background: none; -} diff --git a/src/themes/acqua/colors.txt b/src/themes/acqua/colors.txt deleted file mode 100644 index 12a2795..0000000 --- a/src/themes/acqua/colors.txt +++ /dev/null @@ -1,5 +0,0 @@ -active=#228eff -inactive=#808086 -off=#3a7bd5, #3a6073 -on=#00d2ff, #928dab -text=#ffffff \ No newline at end of file diff --git a/src/themes/acqua/icons/down-arrow.png b/src/themes/acqua/icons/down-arrow.png deleted file mode 100644 index b2cd4a5..0000000 Binary files a/src/themes/acqua/icons/down-arrow.png and /dev/null differ diff --git a/src/themes/acqua/icons/down-arrow_hover.png b/src/themes/acqua/icons/down-arrow_hover.png deleted file mode 100644 index f7ad171..0000000 Binary files a/src/themes/acqua/icons/down-arrow_hover.png and /dev/null differ diff --git a/src/themes/acqua/icons/down-arrow_off.png b/src/themes/acqua/icons/down-arrow_off.png deleted file mode 100644 index e7f0af3..0000000 Binary files a/src/themes/acqua/icons/down-arrow_off.png and /dev/null differ diff --git a/src/themes/acqua/icons/search_icon.png b/src/themes/acqua/icons/search_icon.png deleted file mode 100644 index dd0ec52..0000000 Binary files a/src/themes/acqua/icons/search_icon.png and /dev/null differ diff --git a/src/themes/acqua/icons/up-arrow.png b/src/themes/acqua/icons/up-arrow.png deleted file mode 100644 index 6f0f090..0000000 Binary files a/src/themes/acqua/icons/up-arrow.png and /dev/null differ diff --git a/src/themes/acqua/icons/up-arrow_hover.png b/src/themes/acqua/icons/up-arrow_hover.png deleted file mode 100644 index 149eae0..0000000 Binary files a/src/themes/acqua/icons/up-arrow_hover.png and /dev/null differ diff --git a/src/themes/acqua/icons/up-arrow_off.png b/src/themes/acqua/icons/up-arrow_off.png deleted file mode 100644 index ac2217f..0000000 Binary files a/src/themes/acqua/icons/up-arrow_off.png and /dev/null differ diff --git a/src/themes/acqua/icons/volume.png b/src/themes/acqua/icons/volume.png deleted file mode 100644 index 88e4c7e..0000000 Binary files a/src/themes/acqua/icons/volume.png and /dev/null differ diff --git a/src/themes/console_style/colors.txt b/src/themes/console_style/colors.txt deleted file mode 100644 index 8b504eb..0000000 --- a/src/themes/console_style/colors.txt +++ /dev/null @@ -1,5 +0,0 @@ -active= #ff9900 -inactive= #616161 -on=#fc4a1a, #f7b733 -off= #000000, #434343 -text=#ffffff \ No newline at end of file diff --git a/src/themes/console_style/console_style.qss b/src/themes/console_style/console_style.qss deleted file mode 100644 index 36357d7..0000000 --- a/src/themes/console_style/console_style.qss +++ /dev/null @@ -1,413 +0,0 @@ -/* -Dark Console Style Sheet for QT Applications -Author: Jaime A. Quiroga P. -Company: GTRONICK -Last updated: 24/05/2018, 17:12. -Available at: https://github.com/GTRONICK/QSS/blob/master/ConsoleStyle.qss -*/ -QWidget { - background-color:rgb(0, 0, 0); - color: rgb(240, 240, 240); - border-color: rgb(58, 58, 58); -} - -QPlainTextEdit { - background-color:rgb(0, 0, 0); - color: rgb(200, 200, 200); - selection-background-color: rgb(255, 153, 0); - selection-color: rgb(0, 0, 0); -} - -QFrame[frameShape="4"], -QFrame[frameShape="5"] -{ - border: none; - background: #FFFFFF; - max-width: 1px; -} - -QSlider::sub-page:horizontal { - background-color: #ff9900; -} -QSlider::sub-page:vertical { - background-color: #ff9900; -} - -QComboBox { - border: 0px solid transparent; - border-radius: 2px; - padding: 1px 6px 1px 6px; - min-width: 2em; -} - -QComboBox:!editable { - selection-background-color: transparent; - selection-color: #FFFFFF; - background-color: transparent; -} - -QComboBox:disabled { - color: #616161; -} - -QComboBox:!editable:on, QComboBox::drop-down:editable:on { - color: #ffffff; - background-color: transparent; - selection-background-color: transparent; -} - -QComboBox:on { - padding-top: 3px; - padding-left: 4px; -} - -QComboBox::drop-down { - background-color: transparent; - subcontrol-origin: padding; - subcontrol-position: top right; - width: 20px; - border-top-right-radius: 2px; - border-bottom-right-radius: 2px; -} - -QComboBox::down-arrow:enabled { - image: url("./themes/console_style/icons/down-arrow.png"); -} - -QComboBox::down-arrow:disabled { - image: url("./themes/console_style/icons/down-arrow_off.png"); -} - -QComboBox::down-arrow:hover { - image: url("./themes/console_style/icons/down-arrow_hover.png"); -} - -QComboBox::down-arrow:on { - top: 1px; - left: 1px; -} - -QComboBox QAbstractItemView { -background-color: #232629; -} - -QListWidget { - background-color: transparent; - border: 0px solid transparent; - border-bottom: 2px solid #ff9900; - color: #ffffff; -} - -QListView { - background-color: transparent; - color: #ffffff; - outline: 0; - border: 0px solid transparent; -} -QListView::item:hover { - color: rgb(200, 200, 200); - background: transparent; -} - -QListView::item:selected { - color: #ff9900; - background: transparent; -} - -QListView::item:disabled { - color: #616161; - background: transparent; -} - -QListView::item:disabled:selected { - color: #ff9900; - background: transparent; -} - -QScrollBar:horizontal { - background: transparent; - height: 10px; - margin: 0; -} - -QScrollBar:vertical { - background: transparent; - width: 10px; - margin: 0; -} - -QScrollBar::handle:horizontal { - background: #616161; - min-width: 16px; - border-radius: 5px; -} - -QScrollBar::handle:vertical { - background: #616161; - min-height: 16px; - border-radius: 5px; -} - -QScrollBar::add-page:horizontal, QScrollBar::sub-page:horizontal, -QScrollBar::add-page:vertical, QScrollBar::sub-page:vertical { - background: none; -} - -QScrollBar::add-line:horizontal, QScrollBar::sub-line:horizontal, -QScrollBar::add-line:vertical, QScrollBar::sub-line:vertical { - border: none; - background: none; -} - -QLineEdit { - border-style: outset; - border-radius: 10px; - border-width: 1px; - border-color: #ff9900; - background-color: transparent; - color: #ffffff; -} - -QTreeView { - background-color: transparent; - selection-background-color: transparent; - border: 0px; -} - -QTreeView::item { - background-color: transparent; - color: #ffffff; -} - -QTreeView::item:hover { - border-right: 2px solid #ff9900; - color: rgb(200, 200, 200); -} - -QTreeView::item:selected { - color: #ff9900; -} - -QTreeView::item:active{ - background: transparent; -} - -QTreeView::item:disabled{ - color: rgb(200, 200, 200); -} - -QTreeView::item:selected:disabled{ - color: #ff9900; -} - -QTabWidget::pane { - border-top: 1px solid #000000; -} - -QSpinBox { - background-color: transparent; - color: #ffffff; - border-width: 0px; -} - -QSpinBox:disabled { - color: #616161; - border-width: 0px; -} - -QSpinBox::up-button { - subcontrol-origin: border; - subcontrol-position: top right; - width: 16px; - image: url("./themes/console_style/icons/up-arrow.png"); - border-width: 0px; -} - -QSpinBox::up-button:hover { - image: url("./themes/console_style/icons/up-arrow_hover.png"); -} - -QSpinBox::up-button:pressed { - image: url("./themes/console_style/icons/up-arrow.png"); -} - -QSpinBox::up-button:disabled { - image: url("./themes/console_style/icons/up-arrow_off.png"); -} - -QSpinBox::down-button { - subcontrol-origin: border; - subcontrol-position: bottom right; - width: 16px; - image: url("./themes/console_style/icons/down-arrow.png"); - border-width: 0px; - border-top-width: 0; -} - -QSpinBox::down-button:hover { - image: url("./themes/console_style/icons/down-arrow_hover.png"); -} - -QSpinBox::down-button:pressed { - image: url("./themes/console_style/icons/down-arrow.png"); -} - -QSpinBox::down-button:disabled { - image: url("./themes/console_style/icons/down-arrow_off.png"); -} - -QTabBar::tab { - background-color:rgb(0, 0, 0); - border-style: outset; - border-width: 1px; - border-right-color: qlineargradient(spread:pad, x1:0.4, y1:0.5, x2:0.6, y2:0.5, stop:0 rgba(115, 115, 115, 255), stop:1 rgba(62, 62, 62, 255)); - border-left-color: qlineargradient(spread:pad, x1:0.6, y1:0.5, x2:0.4, y2:0.5, stop:0 rgba(115, 115, 115, 255), stop:1 rgba(62, 62, 62, 255)); - border-bottom-color: rgb(58, 58, 58); - border-bottom-width: 1px; - border-top-width: 0px; - border-style: solid; - color: rgb(255, 153, 0); - padding: 4px; -} - -QTabBar::tab:selected, QTabBar::tab:hover { - color: rgb(255, 255, 255); - background-color:rgb(0, 0, 0); - border-color:rgb(42, 42, 42); - margin-left: 0px; - margin-right: 0px; - border-bottom-right-radius:4px; - border-bottom-left-radius:4px; -} - -QTabBar::tab:last:selected { - background-color:rgb(0, 0, 0); - border-color:rgb(42, 42, 42); - margin-left: 0px; - margin-right: 0px; - border-bottom-right-radius:4px; - border-bottom-left-radius:4px; -} - -QTabBar::tab:!selected { - margin-bottom: 4px; - border-bottom-right-radius:4px; - border-bottom-left-radius:4px; -} - -QPushButton{ - /* border-style: outset; - border-width: 2px; */ - /* border-top-color: qlineargradient(spread:pad, x1:0.5, y1:0.6, x2:0.5, y2:0.4, stop:0 rgba(115, 115, 115, 255), stop:1 rgba(62, 62, 62, 255)); - border-right-color: qlineargradient(spread:pad, x1:0.4, y1:0.5, x2:0.6, y2:0.5, stop:0 rgba(115, 115, 115, 255), stop:1 rgba(62, 62, 62, 255)); - border-left-color: qlineargradient(spread:pad, x1:0.6, y1:0.5, x2:0.4, y2:0.5, stop:0 rgba(115, 115, 115, 255), stop:1 rgba(62, 62, 62, 255)); - border-bottom-color: rgb(58, 58, 58); - border-bottom-width: 1px; - border-style: solid; */ - color: rgb(255, 255, 255); - padding: 6px; - /* background-color: qlineargradient(spread:pad, x1:0.5, y1:1, x2:0.5, y2:0, stop:0 rgba(77, 77, 77, 255), stop:1 rgba(97, 97, 97, 255)); */ - background-color: transparent; -} - -QPushButton:hover{ - /* border-style: outset; - border-width: 2px; - border-top-color: qlineargradient(spread:pad, x1:0.5, y1:0.6, x2:0.5, y2:0.4, stop:0 rgba(180, 180, 180, 255), stop:1 rgba(110, 110, 110, 255)); - border-right-color: qlineargradient(spread:pad, x1:0.4, y1:0.5, x2:0.6, y2:0.5, stop:0 rgba(180, 180, 180, 255), stop:1 rgba(110, 110, 110, 255)); - border-left-color: qlineargradient(spread:pad, x1:0.6, y1:0.5, x2:0.4, y2:0.5, stop:0 rgba(180, 180, 180, 255), stop:1 rgba(110, 110, 110, 255)); - border-bottom-color: rgb(115, 115, 115); - border-bottom-width: 1px; - border-style: solid; */ - color: rgb(200, 200, 200); - padding: 6px; - /* background-color: qlineargradient(spread:pad, x1:0.5, y1:1, x2:0.5, y2:0, stop:0 rgba(107, 107, 107, 255), stop:1 rgba(157, 157, 157, 255)); */ - background-color: transparent; -} - -QPushButton:pressed{ - /* border-style: outset; - border-width: 2px; - border-top-color: qlineargradient(spread:pad, x1:0.5, y1:0.6, x2:0.5, y2:0.4, stop:0 rgba(62, 62, 62, 255), stop:1 rgba(22, 22, 22, 255)); - border-right-color: qlineargradient(spread:pad, x1:0.4, y1:0.5, x2:0.6, y2:0.5, stop:0 rgba(115, 115, 115, 255), stop:1 rgba(62, 62, 62, 255)); - border-left-color: qlineargradient(spread:pad, x1:0.6, y1:0.5, x2:0.4, y2:0.5, stop:0 rgba(115, 115, 115, 255), stop:1 rgba(62, 62, 62, 255)); - border-bottom-color: rgb(58, 58, 58); - border-bottom-width: 1px; - border-style: solid; */ - color: rgb(255, 255, 255); - padding: 6px; - /* background-color: qlineargradient(spread:pad, x1:0.5, y1:1, x2:0.5, y2:0, stop:0 rgba(77, 77, 77, 255), stop:1 rgba(97, 97, 97, 255)); */ - background-color: transparent; -} - -QPushButton:disabled{ - /* border-style: outset; - border-width: 2px; - border-top-color: qlineargradient(spread:pad, x1:0.5, y1:0.6, x2:0.5, y2:0.4, stop:0 rgba(115, 115, 115, 255), stop:1 rgba(62, 62, 62, 255)); - border-right-color: qlineargradient(spread:pad, x1:0.4, y1:0.5, x2:0.6, y2:0.5, stop:0 rgba(115, 115, 115, 255), stop:1 rgba(62, 62, 62, 255)); - border-left-color: qlineargradient(spread:pad, x1:0.6, y1:0.5, x2:0.4, y2:0.5, stop:0 rgba(115, 115, 115, 255), stop:1 rgba(62, 62, 62, 255)); - border-bottom-color: rgb(58, 58, 58); - border-bottom-width: 1px; - border-style: solid; */ - color: #616161; - padding: 6px; - /* background-color: qlineargradient(spread:pad, x1:0.5, y1:1, x2:0.5, y2:0, stop:0 rgba(57, 57, 57, 255), stop:1 rgba(77, 77, 77, 255)); */ - background-color: transparent; -} - -QPushButton:checked { - color: #ff9900; -} - -QProgressBar { - text-align: center; - color: rgb(255, 255, 255); - background-color: #616161; - border-width: 1px; - border-radius: 10px; - border-color: #616161; - border-style: inset; -} - -QProgressBar::chunk { - background-color: #ff9900; - border-radius: 10px; -} - -QMenuBar { - background:rgb(0, 0, 0); - color: rgb(255, 153, 0); -} - -QMenuBar::item { - spacing: 3px; - padding: 1px 4px; - background: transparent; -} - -QMenuBar::item:selected { - background:rgb(115, 115, 115); -} - -QMenu { - border-width: 2px; - border-radius: 10px; - border-color: rgb(255, 153, 0); - border-style: outset; -} - -QMenu::item { - spacing: 3px; - padding: 3px 15px; -} - -QMenu::item:selected { - spacing: 3px; - padding: 3px 15px; - background:rgb(115, 115, 115); - color:rgb(255, 255, 255); - border-width: 1px; - border-radius: 10px; - border-color: rgb(58, 58, 58); - border-style: inset; -} diff --git a/src/themes/console_style/icons/down-arrow.png b/src/themes/console_style/icons/down-arrow.png deleted file mode 100644 index b2cd4a5..0000000 Binary files a/src/themes/console_style/icons/down-arrow.png and /dev/null differ diff --git a/src/themes/console_style/icons/down-arrow_hover.png b/src/themes/console_style/icons/down-arrow_hover.png deleted file mode 100644 index f7ad171..0000000 Binary files a/src/themes/console_style/icons/down-arrow_hover.png and /dev/null differ diff --git a/src/themes/console_style/icons/down-arrow_off.png b/src/themes/console_style/icons/down-arrow_off.png deleted file mode 100644 index e7f0af3..0000000 Binary files a/src/themes/console_style/icons/down-arrow_off.png and /dev/null differ diff --git a/src/themes/console_style/icons/search_icon.png b/src/themes/console_style/icons/search_icon.png deleted file mode 100644 index dd0ec52..0000000 Binary files a/src/themes/console_style/icons/search_icon.png and /dev/null differ diff --git a/src/themes/console_style/icons/up-arrow.png b/src/themes/console_style/icons/up-arrow.png deleted file mode 100644 index 6f0f090..0000000 Binary files a/src/themes/console_style/icons/up-arrow.png and /dev/null differ diff --git a/src/themes/console_style/icons/up-arrow_hover.png b/src/themes/console_style/icons/up-arrow_hover.png deleted file mode 100644 index 149eae0..0000000 Binary files a/src/themes/console_style/icons/up-arrow_hover.png and /dev/null differ diff --git a/src/themes/console_style/icons/up-arrow_off.png b/src/themes/console_style/icons/up-arrow_off.png deleted file mode 100644 index ac2217f..0000000 Binary files a/src/themes/console_style/icons/up-arrow_off.png and /dev/null differ diff --git a/src/themes/console_style/icons/volume.png b/src/themes/console_style/icons/volume.png deleted file mode 100644 index 88e4c7e..0000000 Binary files a/src/themes/console_style/icons/volume.png and /dev/null differ diff --git a/src/themes/dark/colors.txt b/src/themes/dark/colors.txt deleted file mode 100644 index 784707f..0000000 --- a/src/themes/dark/colors.txt +++ /dev/null @@ -1,5 +0,0 @@ -active=#4545e5 -inactive=#546E7A -off=#283048,#859398 -on=#4776e6, #8e54e9 -text=#ffffff diff --git a/src/themes/dark/dark.qss b/src/themes/dark/dark.qss deleted file mode 100644 index dc42680..0000000 --- a/src/themes/dark/dark.qss +++ /dev/null @@ -1,468 +0,0 @@ -/************************************* -Main Window and Splitters -**************************************/ -QWidget:window { - background-color: #232629; -} - -QSplitter::handle { - background-color: transparent; -} - -/************************************* -Main menu (Bar) -**************************************/ -QMenuBar { - background-color: transparent; - color: #AFBDC4; -} - -QMenuBar::item { - background-color: transparent; -} - -QMenuBar::item:disabled { - color: gray; -} - -QMenuBar::item:selected { - color: #FFFFFF; - border-bottom: 2px solid #4545e5; -} - -QMenuBar::item:pressed { - color: #FFFFFF; - border-bottom: 2px solid #4545e5; -} - -QToolBar { - background-color: transparent; - border: 1px solid transparent; -} - -QToolBar:handle { - background-color: transparent; - border-left: 2px dotted #80CBC4; - color: transparent; -} - -QToolBar::separator { - border: 0; -} - -QMenu { - background-color: #263238; - color: #AFBDC4; -} - -QMenu::item:selected { - color: #FFFFFF; -} - -QMenu::item:pressed { - color: #FFFFFF; -} - -QMenu::separator { - background-color: transparent; - height: 1px; - margin-left: 10px; - margin-right: 10px; - margin-top: 5px; - margin-bottom: 5px; -} - -/************************************* -TabBar -**************************************/ -QTabBar { - background: transparent; -} - -QTabWidget::pane { - border: 0px solid transparent; - background: transparent; -} - -QTabBar::tab { - background-color: transparent; - border: 0px solid transparent; - border-radius: 10px; - color: #AFBDC4; - padding-left: 10px; - padding-right: 10px; - padding-top: 3px; - padding-bottom: 3px; -} - -QTabBar::tab:hover { - background: #4545e5; - color: #FFFFFF; -} - -QTabBar::tab:selected { - background: #4545e5; - color: #FFFFFF; -} - -QStackedWidget { - background: #232629; -} - -QSlider::sub-page:horizontal { - background-color: #4545e5; -} -QSlider::sub-page:vertical { - background-color: #4545e5; -} - -/************************************* -Progressbar -**************************************/ -QProgressBar -{ - border: 2px solid grey; - border-radius: 5px; - text-align: center; -} - -QProgressBar::chunk -{ - background-color: #88cc00; - width: 2.15px; - margin: 0.5px; -} - -/************************************* -Labels and Rich Text boxes -**************************************/ -QLabel { - background-color: transparent; - color: #CFD8DC; -} - -QDialog { - background-color: transparent; - color: #949a9c; -} - -QTextBrowser { - background-color: transparent; - color: #949a9c; -} - -/************************************* -Search Bar -**************************************/ -QLineEdit { - border: 2px solid #4545e5 ; - border-radius: 10px; - background-color: transparent; - color: #CFD8DC; -} - -QLineEdit:hover { - border-width: 1px; - border-radius: 10px; - border-style: solid; - border-color: #4545e5 ; -} - -QLineEdit:focus { - border-width: 1px; - border-radius: 10px; - border-style: solid; - border-color: #4545e5 ; -} - -/************************************* -Scroll bars -**************************************/ -QScrollBar:horizontal { - background: transparent; - height: 10px; - margin: 0; -} - -QScrollBar:vertical { - background: transparent; - width: 10px; - margin: 0; -} - -QScrollBar::handle:horizontal { - background: #374146; - min-width: 16px; - border-radius: 5px; -} - -QScrollBar::handle:vertical { - background: #374146; - min-height: 16px; - border-radius: 5px; -} - -QScrollBar::add-page:horizontal, QScrollBar::sub-page:horizontal, -QScrollBar::add-page:vertical, QScrollBar::sub-page:vertical { - background: none; -} - -QScrollBar::add-line:horizontal, QScrollBar::sub-line:horizontal, -QScrollBar::add-line:vertical, QScrollBar::sub-line:vertical { - border: none; - background: none; -} - -/************************************* -List -**************************************/ -QListWidget { - background-color: transparent; - border: 0px solid transparent; - border-bottom: 2px solid #80CBC4; - color: #AFBDC4; -} - -QListView { - background-color: transparent; - color: #AFBDC4; - outline: 0; - border: 0px solid transparent; -} -QListView::item:hover { - color: #FFFFFF; - background: transparent; -} - -QListView::item:selected { - color: #4545e5; - background: transparent; -} - -QListView::item:disabled { - color: #546E7A; - background: transparent; -} - -QListView::item:disabled:selected { - color: #88cc00; - background: transparent; -} - -/************************************* -Buttons -**************************************/ -QPushButton { - background-color: transparent; - color: #AFBDC4; - border: 1px solid transparent; - padding: 4px 22px; -} - -QPushButton:hover { - color: #FFFFFF; -} - -QPushButton:pressed { - color: #FFFFFF; -} - -QPushButton:disabled { - color:#546E7A; -} - -QPushButton:checked { - color: #4545e5; -} - -/************************************* -ComboBox -**************************************/ -QComboBox { - border: 0px solid transparent; - border-radius: 2px; - padding: 1px 6px 1px 6px; - min-width: 2em; -} - -QComboBox:!editable { - selection-background-color: transparent; - color: #AFBDC4; - selection-color: #FFFFFF; - background-color: transparent; -} - -QComboBox:disabled { - color: #546E7A; -} - -QComboBox:!editable:on, QComboBox::drop-down:editable:on { - color: #AFBDC4; - background-color: transparent; - selection-background-color: transparent; -} - -QComboBox:on { - padding-top: 3px; - padding-left: 4px; -} - -QComboBox::drop-down { - background-color: transparent; - subcontrol-origin: padding; - subcontrol-position: top right; - width: 20px; - border-top-right-radius: 2px; - border-bottom-right-radius: 2px; -} - -QComboBox::down-arrow:enabled { - image: url("./themes/dark/icons/down-arrow.png"); -} - -QComboBox::down-arrow:disabled { - image: url("./themes/dark/icons/down-arrow_off.png"); -} - -QComboBox::down-arrow:hover { - image: url("./themes/dark/icons/down-arrow_hover.png"); -} - -QComboBox::down-arrow:on { - top: 1px; - left: 1px; -} - -QComboBox QAbstractItemView { -background-color: #232629; -} - -/************************************* -RadioButton -**************************************/ -QRadioButton{ - color: #AFBDC4; -} - -QRadioButton:disabled{ - color: #546E7A; -} - -QRadioButton::indicator{ - width: 50px; - height: 50px; -} - -QRadioButton::indicator::unchecked { - image: url("./themes/dark/icons/off.png"); -} - -QRadioButton::indicator:unchecked:hover { - image: url("./themes/dark/icons/off_press.png"); -} - -QRadioButton::indicator:unchecked:pressed { - image: url("./themes/dark/icons/off_press.png"); -} - -QRadioButton::indicator::checked { - image: url("./themes/dark/icons/on.png"); -} - -QRadioButton::indicator:checked:hover { - image: url("./themes/dark/icons/on_press.png"); -} - -QRadioButton::indicator:checked:pressed { - image: url("./themes/dark/icons/on_press.png"); -} - -/************************************* -SpinBox -**************************************/ -QSpinBox { - background-color: transparent; - color: #AFBDC4; - border-width: 0px; -} - -QSpinBox:disabled { - color: #546E7A; - border-width: 0px; -} - -QSpinBox::up-button { - subcontrol-origin: border; - subcontrol-position: top right; - width: 16px; - image: url("./themes/dark/icons/up-arrow.png"); - border-width: 0px; -} - -QSpinBox::up-button:hover { - image: url("./themes/dark/icons/up-arrow_hover.png"); -} - -QSpinBox::up-button:pressed { - image: url("./themes/dark/icons/up-arrow.png"); -} - -QSpinBox::up-button:disabled { - image: url("./themes/dark/icons/up-arrow_off.png"); -} - -QSpinBox::down-button { - subcontrol-origin: border; - subcontrol-position: bottom right; - width: 16px; - image: url("./themes/dark/icons/down-arrow.png"); - border-width: 0px; - border-top-width: 0; -} - -QSpinBox::down-button:hover { - image: url("./themes/dark/icons/down-arrow_hover.png"); -} - -QSpinBox::down-button:pressed { - image: url("./themes/dark/icons/down-arrow.png"); -} - -QSpinBox::down-button:disabled { - image: url("./themes/dark/icons/down-arrow_off.png"); -} - -/************************************* -TreeViewMenu (Mode) -**************************************/ -QTreeView { - background-color: transparent; - selection-background-color: transparent; - border: 0px; -} - -QTreeView::item { - background-color: transparent; - color: #AFBDC4; -} - -QTreeView::item:hover { - border-right: 2px solid #4545e5; - color: #FFFFFF; -} - -QTreeView::item:selected { - color: #4545e5; -} - -QTreeView::item:active{ - background: transparent; -} - -QTreeView::item:disabled{ - color: #546E7A; -} - -QTreeView::item:selected:disabled{ - color: #4545e5; -} diff --git a/src/themes/dark/icons/down-arrow.png b/src/themes/dark/icons/down-arrow.png deleted file mode 100644 index b2cd4a5..0000000 Binary files a/src/themes/dark/icons/down-arrow.png and /dev/null differ diff --git a/src/themes/dark/icons/down-arrow_hover.png b/src/themes/dark/icons/down-arrow_hover.png deleted file mode 100644 index f7ad171..0000000 Binary files a/src/themes/dark/icons/down-arrow_hover.png and /dev/null differ diff --git a/src/themes/dark/icons/down-arrow_off.png b/src/themes/dark/icons/down-arrow_off.png deleted file mode 100644 index e7f0af3..0000000 Binary files a/src/themes/dark/icons/down-arrow_off.png and /dev/null differ diff --git a/src/themes/dark/icons/off.png b/src/themes/dark/icons/off.png deleted file mode 100644 index ef39d9e..0000000 Binary files a/src/themes/dark/icons/off.png and /dev/null differ diff --git a/src/themes/dark/icons/off_press.png b/src/themes/dark/icons/off_press.png deleted file mode 100644 index 3355d12..0000000 Binary files a/src/themes/dark/icons/off_press.png and /dev/null differ diff --git a/src/themes/dark/icons/on.png b/src/themes/dark/icons/on.png deleted file mode 100644 index 2244ffe..0000000 Binary files a/src/themes/dark/icons/on.png and /dev/null differ diff --git a/src/themes/dark/icons/on_press.png b/src/themes/dark/icons/on_press.png deleted file mode 100644 index 4754508..0000000 Binary files a/src/themes/dark/icons/on_press.png and /dev/null differ diff --git a/src/themes/dark/icons/search_icon.png b/src/themes/dark/icons/search_icon.png deleted file mode 100644 index dd0ec52..0000000 Binary files a/src/themes/dark/icons/search_icon.png and /dev/null differ diff --git a/src/themes/dark/icons/up-arrow.png b/src/themes/dark/icons/up-arrow.png deleted file mode 100644 index 6f0f090..0000000 Binary files a/src/themes/dark/icons/up-arrow.png and /dev/null differ diff --git a/src/themes/dark/icons/up-arrow_hover.png b/src/themes/dark/icons/up-arrow_hover.png deleted file mode 100644 index 149eae0..0000000 Binary files a/src/themes/dark/icons/up-arrow_hover.png and /dev/null differ diff --git a/src/themes/dark/icons/up-arrow_off.png b/src/themes/dark/icons/up-arrow_off.png deleted file mode 100644 index ac2217f..0000000 Binary files a/src/themes/dark/icons/up-arrow_off.png and /dev/null differ diff --git a/src/themes/dark/icons/volume.png b/src/themes/dark/icons/volume.png deleted file mode 100644 index 88e4c7e..0000000 Binary files a/src/themes/dark/icons/volume.png and /dev/null differ diff --git a/src/themes/elegant_dark/colors.txt b/src/themes/elegant_dark/colors.txt deleted file mode 100644 index 06e4153..0000000 --- a/src/themes/elegant_dark/colors.txt +++ /dev/null @@ -1,5 +0,0 @@ -active= #00ff00 -inactive= #9f9f9f -on=#fdfc47, #24fe41 -off=#f2f2f2,#eaeaea -text=#000000 \ No newline at end of file diff --git a/src/themes/elegant_dark/elegant_dark.qss b/src/themes/elegant_dark/elegant_dark.qss deleted file mode 100644 index 894bc44..0000000 --- a/src/themes/elegant_dark/elegant_dark.qss +++ /dev/null @@ -1,413 +0,0 @@ -/* -ElegantDark Style Sheet for QT Applications -Author: Jaime A. Quiroga P. -Company: GTRONICK -Last updated: 17/04/2018 -Available at: https://github.com/GTRONICK/QSS/blob/master/ElegantDark.qss -*/ -QMainWindow { - background-color:rgb(82, 82, 82); -} - -QWidget{ - background-color: rgb(82, 82, 82) -} - -QTextEdit { - background-color:rgb(42, 42, 42); - color: rgb(0, 255, 0); -} - -QSplitter::handle { - background-color: transparent; -} - -QSlider::sub-page:horizontal { - background-color: #00ff00; -} -QSlider::sub-page:vertical { - background-color: #00ff00; -} - -QTreeView { - background-color: transparent; - selection-background-color: transparent; - border: 0px; - color: #AFBDC4; -} - -QTreeView::item { - background-color: transparent; -} - -QTreeView::item:hover { - color: #FFFFFF; -} - -QTreeView::item:selected { - color: #00ff00; -} - -QTreeView::item:active{ - background: transparent; -} - -QTreeView::item:disabled{ - color: #000000; -} - -QTreeView::item:selected:disabled{ - color: #00ff00; -} - -QSpinBox { - background-color: transparent; - color: #AFBDC4; - border-width: 0px; -} - -QSpinBox:disabled { - color: #000000; - border-width: 0px; -} - -QSpinBox::up-button { - subcontrol-origin: border; - subcontrol-position: top right; - width: 16px; - image: url("./themes/elegant_dark/icons/up-arrow.png"); - border-width: 0px; -} - -QSpinBox::up-button:hover { - image: url("./themes/elegant_dark/icons/up-arrow_hover.png"); -} - -QSpinBox::up-button:pressed { - image: url("./themes/elegant_dark/icons/up-arrow.png"); -} - -QSpinBox::up-button:disabled { - image: url("./themes/elegant_dark/icons/up-arrow_off.png"); -} - -QSpinBox::down-button { - subcontrol-origin: border; - subcontrol-position: bottom right; - width: 16px; - image: url("./themes/elegant_dark/icons/down-arrow.png"); - border-width: 0px; - border-top-width: 0; -} - -QSpinBox::down-button:hover { - image: url("./themes/elegant_dark/icons/down-arrow_hover.png"); -} - -QSpinBox::down-button:pressed { - image: url("./themes/elegant_dark/icons/down-arrow.png"); -} - -QSpinBox::down-button:disabled { - image: url("./themes/elegant_dark/icons/down-arrow_off.png"); -} - -QPushButton{ - /*border-style: outset; - border-width: 2px; - border-top-color: qlineargradient(spread:pad, x1:0.5, y1:0.6, x2:0.5, y2:0.4, stop:0 rgba(115, 115, 115, 255), stop:1 rgba(62, 62, 62, 255)); - border-right-color: qlineargradient(spread:pad, x1:0.4, y1:0.5, x2:0.6, y2:0.5, stop:0 rgba(115, 115, 115, 255), stop:1 rgba(62, 62, 62, 255)); - border-left-color: qlineargradient(spread:pad, x1:0.6, y1:0.5, x2:0.4, y2:0.5, stop:0 rgba(115, 115, 115, 255), stop:1 rgba(62, 62, 62, 255)); - border-bottom-color: rgb(58, 58, 58); - border-bottom-width: 1px; - border-style: solid;*/ - border: 0px; - color: rgb(255, 255, 255); - padding: 2px; - background-color: transparent; -} -QPushButton:hover{ - /*border-style: outset; - border-width: 2px; - border-top-color: qlineargradient(spread:pad, x1:0.5, y1:0.6, x2:0.5, y2:0.4, stop:0 rgba(180, 180, 180, 255), stop:1 rgba(110, 110, 110, 255)); - border-right-color: qlineargradient(spread:pad, x1:0.4, y1:0.5, x2:0.6, y2:0.5, stop:0 rgba(180, 180, 180, 255), stop:1 rgba(110, 110, 110, 255)); - border-left-color: qlineargradient(spread:pad, x1:0.6, y1:0.5, x2:0.4, y2:0.5, stop:0 rgba(180, 180, 180, 255), stop:1 rgba(110, 110, 110, 255)); - border-bottom-color: rgb(115, 115, 115); - border-bottom-width: 1px; - border-style: solid;*/ - border: 0px; - color: #AFAFAF; - padding: 2px; -} -QPushButton:pressed{ - /*border-style: outset; - border-width: 2px; - border-top-color: qlineargradient(spread:pad, x1:0.5, y1:0.6, x2:0.5, y2:0.4, stop:0 rgba(62, 62, 62, 255), stop:1 rgba(22, 22, 22, 255)); - border-right-color: qlineargradient(spread:pad, x1:0.4, y1:0.5, x2:0.6, y2:0.5, stop:0 rgba(115, 115, 115, 255), stop:1 rgba(62, 62, 62, 255)); - border-left-color: qlineargradient(spread:pad, x1:0.6, y1:0.5, x2:0.4, y2:0.5, stop:0 rgba(115, 115, 115, 255), stop:1 rgba(62, 62, 62, 255)); - border-bottom-color: rgb(58, 58, 58); - border-bottom-width: 1px; - border-style: solid;*/ - border: 0px; - color: rgb(255, 255, 255); - padding: 2px; -} -QPushButton:disabled{ - /*border-style: outset; - border-width: 2px; - border-top-color: qlineargradient(spread:pad, x1:0.5, y1:0.6, x2:0.5, y2:0.4, stop:0 rgba(115, 115, 115, 255), stop:1 rgba(62, 62, 62, 255)); - border-right-color: qlineargradient(spread:pad, x1:0.4, y1:0.5, x2:0.6, y2:0.5, stop:0 rgba(115, 115, 115, 255), stop:1 rgba(62, 62, 62, 255)); - border-left-color: qlineargradient(spread:pad, x1:0.6, y1:0.5, x2:0.4, y2:0.5, stop:0 rgba(115, 115, 115, 255), stop:1 rgba(62, 62, 62, 255)); - border-bottom-color: rgb(58, 58, 58); - border-bottom-width: 1px; - border-style: solid;*/ - border: 0px; - color: rgb(0, 0, 0); - padding: 2px; -} -QPushButton:checked { - border: 0px; - color: #00ff00; -} - -QLineEdit{ - border-width: 1px; border-radius: 4px; - border-color: rgb(58, 58, 58); - border-style: inset; - padding: 0 8px; - color: rgb(255, 255, 255); - background:rgb(100, 100, 100); - selection-background-color: rgb(187, 187, 187); - selection-color: rgb(60, 63, 65); -} - -QLabel{ - color:rgb(255,255,255); -} - -QRadioButton{ - color: #FFFFFF; -} - -QRadioButton:hover{ - color: #AFAFAF; -} - -QComboBox { - border: 0px solid transparent; - border-radius: 2px; - padding: 1px 6px 1px 6px; - min-width: 2em; -} - -QComboBox:!editable { - selection-background-color: transparent; - color: #AFBDC4; - selection-color: #FFFFFF; - background-color: transparent; -} - -QComboBox:disabled { - color: #000000; -} - -QComboBox:!editable:on, QComboBox::drop-down:editable:on { - color: #AFBDC4; - background-color: transparent; - selection-background-color: transparent; -} - -QComboBox:on { - padding-top: 3px; - padding-left: 4px; -} - -QComboBox::drop-down { - background-color: transparent; - subcontrol-origin: padding; - subcontrol-position: top right; - width: 20px; - border-top-right-radius: 2px; - border-bottom-right-radius: 2px; -} - -QComboBox::down-arrow:enabled { - image: url("./themes/elegant_dark/icons/down-arrow.png"); -} - -QComboBox::down-arrow:disabled { - image: url("./themes/elegant_dark/icons/down-arrow_off.png"); -} - -QComboBox::down-arrow:hover { - image: url("./themes/elegant_dark/icons/down-arrow_hover.png"); -} - -QComboBox::down-arrow:on { - top: 1px; - left: 1px; -} - -QComboBox QAbstractItemView { -background-color: rgb(100,100,100); -} - -QProgressBar { - text-align: center; - color: rgb(240, 240, 240); - border-width: 1px; - border-radius: 10px; - border-color: rgb(58, 58, 58); - border-style: inset; - background-color:rgb(77,77,77); -} -QProgressBar::chunk { - background-color: #00ff00; - border-radius: 5px; -} -QMenuBar { - background:rgb(82, 82, 82); -} -QMenuBar::item { - color:rgb(223,219,210); - spacing: 3px; - padding: 1px 4px; - background: transparent; -} - -QMenuBar::item:selected { - background:rgb(115, 115, 115); -} -QMenu::item:selected { - color:rgb(255,255,255); - border-width:2px; - border-style:solid; - padding-left:18px; - padding-right:8px; - padding-top:2px; - padding-bottom:3px; - background:qlineargradient(spread:pad, x1:0.5, y1:0.7, x2:0.5, y2:0.3, stop:0 rgba(87, 97, 106, 255), stop:1 rgba(93, 103, 113, 255)); - border-top-color: qlineargradient(spread:pad, x1:0.5, y1:0.6, x2:0.5, y2:0.4, stop:0 rgba(115, 115, 115, 255), stop:1 rgba(62, 62, 62, 255)); - border-right-color: qlineargradient(spread:pad, x1:0.4, y1:0.5, x2:0.6, y2:0.5, stop:0 rgba(115, 115, 115, 255), stop:1 rgba(62, 62, 62, 255)); - border-left-color: qlineargradient(spread:pad, x1:0.6, y1:0.5, x2:0.4, y2:0.5, stop:0 rgba(115, 115, 115, 255), stop:1 rgba(62, 62, 62, 255)); - border-bottom-color: rgb(58, 58, 58); - border-bottom-width: 1px; -} -QMenu::item { - color:rgb(223,219,210); - background-color:rgb(78,78,78); - padding-left:20px; - padding-top:4px; - padding-bottom:4px; - padding-right:10px; -} -QMenu{ - background-color:rgb(78,78,78); -} -QTabWidget { - color:rgb(0,0,0); - background-color:rgb(247,246,246); -} -QTabWidget::pane { - /* border-color: rgb(77,77,77); */ - background-color:rgb(101,101,101); - /* border-style: solid; - border-width: 1px; - border-radius: 6px; */ -} -QTabBar::tab { - padding:2px; - color:rgb(250,250,250); - background-color: qlineargradient(spread:pad, x1:0.5, y1:1, x2:0.5, y2:0, stop:0 rgba(77, 77, 77, 255), stop:1 rgba(97, 97, 97, 255)); - border-style: solid; - border-width: 2px; - border-top-right-radius:4px; - border-top-left-radius:4px; - border-top-color: qlineargradient(spread:pad, x1:0.5, y1:0.6, x2:0.5, y2:0.4, stop:0 rgba(115, 115, 115, 255), stop:1 rgba(95, 92, 93, 255)); - border-right-color: qlineargradient(spread:pad, x1:0.4, y1:0.5, x2:0.6, y2:0.5, stop:0 rgba(115, 115, 115, 255), stop:1 rgba(95, 92, 93, 255)); - border-left-color: qlineargradient(spread:pad, x1:0.6, y1:0.5, x2:0.4, y2:0.5, stop:0 rgba(115, 115, 115, 255), stop:1 rgba(95, 92, 93, 255)); - border-bottom-color: rgb(101,101,101); -} -QTabBar::tab:selected, QTabBar::tab:last:selected, QTabBar::tab:hover { - background-color:rgb(101,101,101); - margin-left: 0px; - margin-right: 1px; -} -QTabBar::tab:!selected { - margin-top: 1px; - margin-right: 1px; -} - -QStatusBar { - color:rgb(240,240,240); -} - -QTextBrowser { - background-color: transparent; -} - -QListWidget { - background-color: transparent; - border: 0px solid transparent; -} - -QListView { - background-color: transparent; - color: #AFBDC4; - outline: 0; - border: 0px solid transparent; -} -QListView::item:hover { - color: #FFFFFF; - background: transparent; -} - -QListView::item:selected { - color: #00ff00; - background: transparent; -} - -QListView::item:disabled { - color: #9f9f9f; - background: transparent; -} - -QListView::item:disabled:selected { - color: #00ff00; - background: transparent; -} - -QScrollBar:horizontal { - background: transparent; - height: 10px; - margin: 0; -} - -QScrollBar:vertical { - background: transparent; - width: 10px; - margin: 0; -} - -QScrollBar::handle:horizontal { - background: rgb(101,101,101); - min-width: 16px; - border-radius: 5px; -} - -QScrollBar::handle:vertical { - background: rgb(101,101,101); - min-height: 16px; - border-radius: 5px; -} - -QScrollBar::add-page:horizontal, QScrollBar::sub-page:horizontal, -QScrollBar::add-page:vertical, QScrollBar::sub-page:vertical { - background: none; -} - -QScrollBar::add-line:horizontal, QScrollBar::sub-line:horizontal, -QScrollBar::add-line:vertical, QScrollBar::sub-line:vertical { - border: none; - background: none; -} diff --git a/src/themes/elegant_dark/icons/down-arrow.png b/src/themes/elegant_dark/icons/down-arrow.png deleted file mode 100644 index b2cd4a5..0000000 Binary files a/src/themes/elegant_dark/icons/down-arrow.png and /dev/null differ diff --git a/src/themes/elegant_dark/icons/down-arrow_hover.png b/src/themes/elegant_dark/icons/down-arrow_hover.png deleted file mode 100644 index f7ad171..0000000 Binary files a/src/themes/elegant_dark/icons/down-arrow_hover.png and /dev/null differ diff --git a/src/themes/elegant_dark/icons/down-arrow_off.png b/src/themes/elegant_dark/icons/down-arrow_off.png deleted file mode 100644 index e7f0af3..0000000 Binary files a/src/themes/elegant_dark/icons/down-arrow_off.png and /dev/null differ diff --git a/src/themes/elegant_dark/icons/search_icon.png b/src/themes/elegant_dark/icons/search_icon.png deleted file mode 100644 index dd0ec52..0000000 Binary files a/src/themes/elegant_dark/icons/search_icon.png and /dev/null differ diff --git a/src/themes/elegant_dark/icons/up-arrow.png b/src/themes/elegant_dark/icons/up-arrow.png deleted file mode 100644 index 6f0f090..0000000 Binary files a/src/themes/elegant_dark/icons/up-arrow.png and /dev/null differ diff --git a/src/themes/elegant_dark/icons/up-arrow_hover.png b/src/themes/elegant_dark/icons/up-arrow_hover.png deleted file mode 100644 index 149eae0..0000000 Binary files a/src/themes/elegant_dark/icons/up-arrow_hover.png and /dev/null differ diff --git a/src/themes/elegant_dark/icons/up-arrow_off.png b/src/themes/elegant_dark/icons/up-arrow_off.png deleted file mode 100644 index ac2217f..0000000 Binary files a/src/themes/elegant_dark/icons/up-arrow_off.png and /dev/null differ diff --git a/src/themes/elegant_dark/icons/volume.png b/src/themes/elegant_dark/icons/volume.png deleted file mode 100644 index 88e4c7e..0000000 Binary files a/src/themes/elegant_dark/icons/volume.png and /dev/null differ diff --git a/src/themes/material_design_dark/colors.txt b/src/themes/material_design_dark/colors.txt deleted file mode 100644 index 40ab6c1..0000000 --- a/src/themes/material_design_dark/colors.txt +++ /dev/null @@ -1,4 +0,0 @@ -active=#88cc00 -inactive=#546E7A -off=#304352,#d7d2cc -on=#3ca55c,#b5ac49 diff --git a/src/themes/material_design_dark/icons/down-arrow.png b/src/themes/material_design_dark/icons/down-arrow.png deleted file mode 100644 index b2cd4a5..0000000 Binary files a/src/themes/material_design_dark/icons/down-arrow.png and /dev/null differ diff --git a/src/themes/material_design_dark/icons/down-arrow_hover.png b/src/themes/material_design_dark/icons/down-arrow_hover.png deleted file mode 100644 index f7ad171..0000000 Binary files a/src/themes/material_design_dark/icons/down-arrow_hover.png and /dev/null differ diff --git a/src/themes/material_design_dark/icons/down-arrow_off.png b/src/themes/material_design_dark/icons/down-arrow_off.png deleted file mode 100644 index e7f0af3..0000000 Binary files a/src/themes/material_design_dark/icons/down-arrow_off.png and /dev/null differ diff --git a/src/themes/material_design_dark/icons/off.png b/src/themes/material_design_dark/icons/off.png deleted file mode 100644 index ef39d9e..0000000 Binary files a/src/themes/material_design_dark/icons/off.png and /dev/null differ diff --git a/src/themes/material_design_dark/icons/off_press.png b/src/themes/material_design_dark/icons/off_press.png deleted file mode 100644 index 3355d12..0000000 Binary files a/src/themes/material_design_dark/icons/off_press.png and /dev/null differ diff --git a/src/themes/material_design_dark/icons/on.png b/src/themes/material_design_dark/icons/on.png deleted file mode 100644 index 2244ffe..0000000 Binary files a/src/themes/material_design_dark/icons/on.png and /dev/null differ diff --git a/src/themes/material_design_dark/icons/on_press.png b/src/themes/material_design_dark/icons/on_press.png deleted file mode 100644 index 4754508..0000000 Binary files a/src/themes/material_design_dark/icons/on_press.png and /dev/null differ diff --git a/src/themes/material_design_dark/icons/search_icon.png b/src/themes/material_design_dark/icons/search_icon.png deleted file mode 100644 index dd0ec52..0000000 Binary files a/src/themes/material_design_dark/icons/search_icon.png and /dev/null differ diff --git a/src/themes/material_design_dark/icons/up-arrow.png b/src/themes/material_design_dark/icons/up-arrow.png deleted file mode 100644 index 6f0f090..0000000 Binary files a/src/themes/material_design_dark/icons/up-arrow.png and /dev/null differ diff --git a/src/themes/material_design_dark/icons/up-arrow_hover.png b/src/themes/material_design_dark/icons/up-arrow_hover.png deleted file mode 100644 index 149eae0..0000000 Binary files a/src/themes/material_design_dark/icons/up-arrow_hover.png and /dev/null differ diff --git a/src/themes/material_design_dark/icons/up-arrow_off.png b/src/themes/material_design_dark/icons/up-arrow_off.png deleted file mode 100644 index ac2217f..0000000 Binary files a/src/themes/material_design_dark/icons/up-arrow_off.png and /dev/null differ diff --git a/src/themes/material_design_dark/icons/volume.png b/src/themes/material_design_dark/icons/volume.png deleted file mode 100644 index 88e4c7e..0000000 Binary files a/src/themes/material_design_dark/icons/volume.png and /dev/null differ diff --git a/src/themes/material_design_dark/material_design_dark.qss b/src/themes/material_design_dark/material_design_dark.qss deleted file mode 100644 index f44726f..0000000 --- a/src/themes/material_design_dark/material_design_dark.qss +++ /dev/null @@ -1,489 +0,0 @@ -/* Palette - -Background: #29353B -Sec. Menu bkg: #263238 - -Label: #AFBDC4 -Label Selected/hover: #FFFFFF -Label Pressed: #FFFFFF -Selection: #88cc00 - -ScrollBars: #374146 - -Signal detail Labels: #CFD8DC -Signal detail Dialogs: #949a9c - -Disabled: #546E7A - -/************************************* -Main Window and Splitters -**************************************/ -QWidget:window { - background-color: #29353B; -} - -QSplitter::handle { - background-color: transparent; -} - -QSlider::sub-page:horizontal { - background-color: #88cc00; -} -QSlider::sub-page:vertical { - background-color: #88cc00; -} - -/************************************* -Main menu (Bar) -**************************************/ -QMenuBar { - background-color: transparent; - color: #AFBDC4; -} - -QMenuBar::item { - background-color: transparent; -} - -QMenuBar::item:disabled { - color: gray; -} - -QMenuBar::item:selected { - color: #FFFFFF; - border-bottom: 2px solid #88cc00; -} - -QMenuBar::item:pressed { - color: #FFFFFF; - border-bottom: 2px solid #88cc00; -} - -QToolBar { - background-color: transparent; - border: 1px solid transparent; -} - -QToolBar:handle { - background-color: transparent; - border-left: 2px dotted #80CBC4; - color: transparent; -} - -QToolBar::separator { - border: 0; -} - -QMenu { - background-color: #263238; - color: #AFBDC4; -} - -QMenu::item:selected { - color: #FFFFFF; -} - -QMenu::item:pressed { - color: #FFFFFF; -} - -QMenu::separator { - background-color: transparent; - height: 1px; - margin-left: 10px; - margin-right: 10px; - margin-top: 5px; - margin-bottom: 5px; -} - -/************************************* -TabBar -**************************************/ -QTabBar { - background: transparent; -} - -QTabWidget::pane { - background: transparent; -} - -QTabBar::tab { - background: transparent; - border: 0px solid transparent; - border-bottom: 2px solid transparent; - color: #AFBDC4; - padding-left: 10px; - padding-right: 10px; - padding-top: 3px; - padding-bottom: 3px; -} - -QTabBar::tab:hover { - background-color: transparent; - border: 0px solid transparent; - border-bottom: 2px solid #88cc00; - color: #FFFFFF; -} - -QTabBar::tab:selected { - background-color: transparent; - border: 0px solid transparent; - border-top: none; - border-bottom: 2px solid #88cc00; - color: #FFFFFF; -} - -QStackedWidget { - background: #29353B; -} - -/************************************* -Progressbar -**************************************/ -QProgressBar -{ - border: 2px solid grey; - border-radius: 5px; - text-align: center; -} - -QProgressBar::chunk -{ - background-color: #88cc00; - width: 2.15px; - margin: 0.5px; -} - -/************************************* -Labels and Rich Text boxes -**************************************/ -QLabel { - background-color: transparent; - color: #CFD8DC; -} - -QDialog { - background-color: transparent; - color: #949a9c; -} - -QTextBrowser { - background-color: transparent; - color: #949a9c; -} - -/************************************* -Search Bar -**************************************/ -QLineEdit { - background-color: transparent; - selection-background-color: #669900; - color: #669900; - border-width: 1px; - border-style: solid; - border-color: transparent transparent #669900 transparent; -} - -QLineEdit:hover { - border-width: 2px; - border-color: transparent transparent #88cc00 transparent; -} - -QLineEdit:focus { - border-width: 2px; - border-color: transparent transparent #88cc00 transparent; -} - -/************************************* -Scroll bars -**************************************/ -QScrollBar:horizontal { - background: transparent; - height: 10px; - margin: 0; -} - -QScrollBar:vertical { - background: transparent; - width: 10px; - margin: 0; -} - -QScrollBar::handle:horizontal { - background: #374146; - min-width: 16px; - border-radius: 5px; -} - -QScrollBar::handle:vertical { - background: #374146; - min-height: 16px; - border-radius: 5px; -} - -QScrollBar::add-page:horizontal, QScrollBar::sub-page:horizontal, -QScrollBar::add-page:vertical, QScrollBar::sub-page:vertical { - background: none; -} - -QScrollBar::add-line:horizontal, QScrollBar::sub-line:horizontal, -QScrollBar::add-line:vertical, QScrollBar::sub-line:vertical { - border: none; - background: none; -} - -/************************************* -List -**************************************/ -QListWidget { - background-color: transparent; - border: 0px solid transparent; - border-bottom: 2px solid #80CBC4; - color: #AFBDC4; -} - -QListView { - background-color: transparent; - color: #AFBDC4; - outline: 0; - border: 0px solid transparent; -} -QListView::item:hover { - color: #FFFFFF; - background: transparent; -} - -QListView::item:selected { - color: #88cc00; - background: transparent; -} - -QListView::item:disabled { - color: #546E7A; - background: transparent; -} - -QListView::item:disabled:selected { - color: #88cc00; - background: transparent; -} - -/************************************* -Buttons -**************************************/ -QPushButton { - background-color: transparent; - color: #AFBDC4; - border: 1px solid transparent; - padding: 4px 22px; -} - -QPushButton:hover { - border-left: 2px solid #88cc00; - border-right: 2px solid #88cc00; - color: #FFFFFF; -} - -QPushButton:pressed { - color: #FFFFFF; -} - -QPushButton:disabled { - color:#546E7A; -} - -QPushButton:checked { - color: #88cc00; -} - -/************************************* -ComboBox -**************************************/ -QComboBox { - border: 0px solid transparent; - border-radius: 2px; - padding: 1px 6px 1px 6px; - min-width: 2em; -} - -QComboBox:!editable { - selection-background-color: transparent; - color: #AFBDC4; - selection-color: #FFFFFF; - background-color: transparent; -} - -QComboBox:disabled { - color: #546E7A; -} - -QComboBox:!editable:on, QComboBox::drop-down:editable:on { - color: #AFBDC4; - background-color: transparent; - selection-background-color: transparent; -} - -QComboBox:on { - padding-top: 3px; - padding-left: 4px; -} - -QComboBox::drop-down { - background-color: transparent; - subcontrol-origin: padding; - subcontrol-position: top right; - width: 20px; - border-top-right-radius: 2px; - border-bottom-right-radius: 2px; -} - -QComboBox::down-arrow:enabled { - image: url("./themes/material_design_dark/icons/down-arrow.png"); -} - -QComboBox::down-arrow:disabled { - image: url("./themes/material_design_dark/icons/down-arrow_off.png"); -} - -QComboBox::down-arrow:hover { - image: url("./themes/material_design_dark/icons/down-arrow_hover.png"); -} - -QComboBox::down-arrow:on { - top: 1px; - left: 1px; -} - -QComboBox QAbstractItemView { -background-color: #29353B; -} - -/************************************* -RadioButton -**************************************/ -QRadioButton{ - color: #AFBDC4; -} - -QRadioButton:disabled{ - color: #546E7A; -} - -QRadioButton::indicator{ - width: 50px; - height: 50px; -} - -QRadioButton::indicator::unchecked { - image: url("./themes/material_design_dark/icons/off.png"); -} - -QRadioButton::indicator:unchecked:hover { - image: url("./themes/material_design_dark/icons/off_press.png"); -} - -QRadioButton::indicator:unchecked:pressed { - image: url("./themes/material_design_dark/icons/off_press.png"); -} - -QRadioButton::indicator::checked { - image: url("./themes/material_design_dark/icons/on.png"); -} - -QRadioButton::indicator:checked:hover { - image: url("./themes/material_design_dark/icons/on_press.png"); -} - -QRadioButton::indicator:checked:pressed { - image: url("./themes/material_design_dark/icons/on_press.png"); -} - -/************************************* -SpinBox -**************************************/ -QSpinBox { - background-color: transparent; - color: #AFBDC4; - border-width: 0px; -} - -QSpinBox:disabled { - color: #546E7A; - border-width: 0px; -} - -QSpinBox::up-button { - subcontrol-origin: border; - subcontrol-position: top right; - width: 16px; - image: url("./themes/material_design_dark/icons/up-arrow.png"); - border-width: 0px; -} - -QSpinBox::up-button:hover { - image: url("./themes/material_design_dark/icons/up-arrow_hover.png"); -} - -QSpinBox::up-button:pressed { - image: url("./themes/material_design_dark/icons/up-arrow.png"); -} - -QSpinBox::up-button:disabled { - image: url("./themes/material_design_dark/icons/up-arrow_off.png"); -} - -QSpinBox::down-button { - subcontrol-origin: border; - subcontrol-position: bottom right; - width: 16px; - image: url("./themes/material_design_dark/icons/down-arrow.png"); - border-width: 0px; - border-top-width: 0; -} - -QSpinBox::down-button:hover { - image: url("./themes/material_design_dark/icons/down-arrow_hover.png"); -} - -QSpinBox::down-button:pressed { - image: url("./themes/material_design_dark/icons/down-arrow.png"); -} - -QSpinBox::down-button:disabled { - image: url("./themes/material_design_dark/icons/down-arrow_off.png"); -} - -/************************************* -TreeViewMenu (Mode) -**************************************/ -QTreeView { - background-color: transparent; - selection-background-color: transparent; - border: 0px; -} - -QTreeView::item { - background-color: transparent; - color: #AFBDC4; -} - -QTreeView::item:hover { - border-right: 2px solid #88cc00; - color: #FFFFFF; -} - -QTreeView::item:selected { - color: #88cc00; -} - -QTreeView::item:active{ - background: transparent; -} - -QTreeView::item:disabled{ - color: #546E7A; -} - -QTreeView::item:selected:disabled{ - color: #88cc00; -} diff --git a/src/themes/material_design_light/colors.txt b/src/themes/material_design_light/colors.txt deleted file mode 100644 index 29e38f6..0000000 --- a/src/themes/material_design_light/colors.txt +++ /dev/null @@ -1,4 +0,0 @@ -active=#6ECE12 -inactive=#b3b3cc -off=#948e99,#2e1437 -on=#b993d6,#8ca6db diff --git a/src/themes/material_design_light/icons/down-arrow.png b/src/themes/material_design_light/icons/down-arrow.png deleted file mode 100644 index b2cd4a5..0000000 Binary files a/src/themes/material_design_light/icons/down-arrow.png and /dev/null differ diff --git a/src/themes/material_design_light/icons/down-arrow_hover.png b/src/themes/material_design_light/icons/down-arrow_hover.png deleted file mode 100644 index f7ad171..0000000 Binary files a/src/themes/material_design_light/icons/down-arrow_hover.png and /dev/null differ diff --git a/src/themes/material_design_light/icons/down-arrow_off.png b/src/themes/material_design_light/icons/down-arrow_off.png deleted file mode 100644 index e7f0af3..0000000 Binary files a/src/themes/material_design_light/icons/down-arrow_off.png and /dev/null differ diff --git a/src/themes/material_design_light/icons/off.png b/src/themes/material_design_light/icons/off.png deleted file mode 100644 index ef39d9e..0000000 Binary files a/src/themes/material_design_light/icons/off.png and /dev/null differ diff --git a/src/themes/material_design_light/icons/off_press.png b/src/themes/material_design_light/icons/off_press.png deleted file mode 100644 index 3355d12..0000000 Binary files a/src/themes/material_design_light/icons/off_press.png and /dev/null differ diff --git a/src/themes/material_design_light/icons/on.png b/src/themes/material_design_light/icons/on.png deleted file mode 100644 index 2244ffe..0000000 Binary files a/src/themes/material_design_light/icons/on.png and /dev/null differ diff --git a/src/themes/material_design_light/icons/on_press.png b/src/themes/material_design_light/icons/on_press.png deleted file mode 100644 index 4754508..0000000 Binary files a/src/themes/material_design_light/icons/on_press.png and /dev/null differ diff --git a/src/themes/material_design_light/icons/search_icon.png b/src/themes/material_design_light/icons/search_icon.png deleted file mode 100644 index dd0ec52..0000000 Binary files a/src/themes/material_design_light/icons/search_icon.png and /dev/null differ diff --git a/src/themes/material_design_light/icons/up-arrow.png b/src/themes/material_design_light/icons/up-arrow.png deleted file mode 100644 index 6f0f090..0000000 Binary files a/src/themes/material_design_light/icons/up-arrow.png and /dev/null differ diff --git a/src/themes/material_design_light/icons/up-arrow_hover.png b/src/themes/material_design_light/icons/up-arrow_hover.png deleted file mode 100644 index 149eae0..0000000 Binary files a/src/themes/material_design_light/icons/up-arrow_hover.png and /dev/null differ diff --git a/src/themes/material_design_light/icons/up-arrow_off.png b/src/themes/material_design_light/icons/up-arrow_off.png deleted file mode 100644 index ac2217f..0000000 Binary files a/src/themes/material_design_light/icons/up-arrow_off.png and /dev/null differ diff --git a/src/themes/material_design_light/icons/volume.png b/src/themes/material_design_light/icons/volume.png deleted file mode 100644 index 88e4c7e..0000000 Binary files a/src/themes/material_design_light/icons/volume.png and /dev/null differ diff --git a/src/themes/material_design_light/material_design_light.qss b/src/themes/material_design_light/material_design_light.qss deleted file mode 100644 index c85ceb8..0000000 --- a/src/themes/material_design_light/material_design_light.qss +++ /dev/null @@ -1,489 +0,0 @@ -/* Palette - -Background: #F5F5F5 -Sec. Menu bkg: #DCDCDC - -Label: #29353B -Label Selected/hover: #000000 -Label Pressed: #000000 -Selection: #6ECE12 - -ScrollBars: #DCDCDC - -Labels: #29353B -Dialogs: #29353B - -Disabled: #b3b3cc - -/************************************* -Main Window and Splitters -**************************************/ -QWidget:window { - background-color: #F5F5F5; -} - -QSplitter::handle { - background-color: transparent; -} - -QSlider::sub-page:horizontal { - background-color: #6ECE12; -} -QSlider::sub-page:vertical { - background-color: #6ECE12; -} - -/************************************* -Main menu (Bar) -**************************************/ -QMenuBar { - background-color: transparent; - color: #29353B; -} - -QMenuBar::item { - background-color: transparent; -} - -QMenuBar::item:disabled { - color: gray; -} - -QMenuBar::item:selected { - color: #000000; - border-bottom: 2px solid #6ECE12; -} - -QMenuBar::item:pressed { - color: #000000; - border-bottom: 2px solid #6ECE12; -} - -QToolBar { - background-color: transparent; - border: 1px solid transparent; -} - -QToolBar:handle { - background-color: transparent; - border-left: 2px dotted #80CBC4; - color: transparent; -} - -QToolBar::separator { - border: 0; -} - -QMenu { - background-color: #DCDCDC; - color: #29353B; -} - -QMenu::item:selected { - color: #000000; -} - -QMenu::item:pressed { - color: #000000; -} - -QMenu::separator { - background-color: transparent; - height: 1px; - margin-left: 10px; - margin-right: 10px; - margin-top: 5px; - margin-bottom: 5px; -} - -/************************************* -TabBar -**************************************/ -QTabBar { - background: transparent; -} - -QTabWidget::pane { - background: transparent; -} - -QTabBar::tab { - background: transparent; - border: 0px solid transparent; - border-bottom: 2px solid transparent; - color: #29353B; - padding-left: 10px; - padding-right: 10px; - padding-top: 3px; - padding-bottom: 3px; -} - -QTabBar::tab:hover { - background-color: transparent; - border: 0px solid transparent; - border-bottom: 2px solid #6ECE12; - color: #000000; -} - -QTabBar::tab:selected { - background-color: transparent; - border: 0px solid transparent; - border-top: none; - border-bottom: 2px solid #6ECE12; - color: #000000; -} - -QStackedWidget { - background: #F5F5F5; -} - -/************************************* -Progressbar -**************************************/ -QProgressBar -{ - border: 2px solid grey; - border-radius: 5px; - text-align: center; -} - -QProgressBar::chunk -{ - background-color: #6ECE12; - width: 2.15px; - margin: 0.5px; -} - -/************************************* -Labels and Rich Text boxes -**************************************/ -QLabel { - background-color: transparent; - color: #29353B; -} - -QDialog { - background-color: transparent; - color: #29353B; -} - -QTextBrowser { - background-color: transparent; - color: #29353B; -} - -/************************************* -Search Bar -**************************************/ -QLineEdit { - background-color: transparent; - selection-background-color: #669900; - color: #669900; - border-width: 1px; - border-style: solid; - border-color: transparent transparent #669900 transparent; -} - -QLineEdit:hover { - border-width: 2px; - border-color: transparent transparent #6ECE12 transparent; -} - -QLineEdit:focus { - border-width: 2px; - border-color: transparent transparent #6ECE12 transparent; -} - -/************************************* -Scroll bars -**************************************/ -QScrollBar:horizontal { - background: transparent; - height: 10px; - margin: 0; -} - -QScrollBar:vertical { - background: transparent; - width: 10px; - margin: 0; -} - -QScrollBar::handle:horizontal { - background: #DCDCDC; - min-width: 16px; - border-radius: 5px; -} - -QScrollBar::handle:vertical { - background: #DCDCDC; - min-height: 16px; - border-radius: 5px; -} - -QScrollBar::add-page:horizontal, QScrollBar::sub-page:horizontal, -QScrollBar::add-page:vertical, QScrollBar::sub-page:vertical { - background: none; -} - -QScrollBar::add-line:horizontal, QScrollBar::sub-line:horizontal, -QScrollBar::add-line:vertical, QScrollBar::sub-line:vertical { - border: none; - background: none; -} - -/************************************* -List -**************************************/ -QListWidget { - background-color: transparent; - border: 0px solid transparent; - border-bottom: 2px solid #80CBC4; - color: #29353B; -} - -QListView { - background-color: transparent; - color: #29353B; - outline: 0; - border: 0px solid transparent; -} -QListView::item:hover { - color: #000000; - background: transparent; -} - -QListView::item:selected { - color: #6ECE12; - background: transparent; -} - -QListView::item:disabled { - color: #b3b3cc; - background: transparent; -} - -QListView::item:disabled:selected { - color: #6ECE12; - background: transparent; -} - -/************************************* -Buttons -**************************************/ -QPushButton { - background-color: transparent; - color: #29353B; - border: 1px solid transparent; - padding: 4px 22px; -} - -QPushButton:hover { - border-left: 2px solid #6ECE12; - border-right: 2px solid #6ECE12; - color: #000000; -} - -QPushButton:pressed { - color: #000000; -} - -QPushButton:disabled { - color:#b3b3cc; -} - -QPushButton:checked { - color: #6ECE12; -} - -/************************************* -ComboBox -**************************************/ -QComboBox { - border: 0px solid transparent; - border-radius: 2px; - padding: 1px 6px 1px 6px; - min-width: 2em; -} - -QComboBox:!editable { - selection-background-color: transparent; - color: #29353B; - selection-color: #000000; - background-color: transparent; -} - -QComboBox:disabled { - color: #b3b3cc; -} - -QComboBox:!editable:on, QComboBox::drop-down:editable:on { - color: #29353B; - background-color: transparent; - selection-background-color: transparent; -} - -QComboBox:on { - padding-top: 3px; - padding-left: 4px; -} - -QComboBox::drop-down { - background-color: transparent; - subcontrol-origin: padding; - subcontrol-position: top right; - width: 20px; - border-top-right-radius: 2px; - border-bottom-right-radius: 2px; -} - -QComboBox::down-arrow:enabled { - image: url("./themes/material_design_light/icons/down-arrow.png"); -} - -QComboBox::down-arrow:disabled { - image: url("./themes/material_design_light/icons/down-arrow_off.png"); -} - -QComboBox::down-arrow:hover { - image: url("./themes/material_design_light/icons/down-arrow_hover.png"); -} - -QComboBox::down-arrow:on { - top: 1px; - left: 1px; -} - -QComboBox QAbstractItemView { -background-color: #F5F5F5; -} - -/************************************* -RadioButton -**************************************/ -QRadioButton{ - color: #29353B; -} - -QRadioButton:disabled{ - color: #b3b3cc; -} - -QRadioButton::indicator{ - width: 50px; - height: 50px; -} - -QRadioButton::indicator::unchecked { - image: url("./themes/material_design_light/icons/off.png"); -} - -QRadioButton::indicator:unchecked:hover { - image: url("./themes/material_design_light/icons/off_press.png"); -} - -QRadioButton::indicator:unchecked:pressed { - image: url("./themes/material_design_light/icons/off_press.png"); -} - -QRadioButton::indicator::checked { - image: url("./themes/material_design_light/icons/on.png"); -} - -QRadioButton::indicator:checked:hover { - image: url("./themes/material_design_light/icons/on_press.png"); -} - -QRadioButton::indicator:checked:pressed { - image: url("./themes/material_design_light/icons/on_press.png"); -} - -/************************************* -SpinBox -**************************************/ -QSpinBox { - background-color: transparent; - color: #29353B; - border-width: 0px; -} - -QSpinBox:disabled { - color: #b3b3cc; - border-width: 0px; -} - -QSpinBox::up-button { - subcontrol-origin: border; - subcontrol-position: top right; - width: 16px; - image: url("./themes/material_design_light/icons/up-arrow.png"); - border-width: 0px; -} - -QSpinBox::up-button:hover { - image: url("./themes/material_design_light/icons/up-arrow_hover.png"); -} - -QSpinBox::up-button:pressed { - image: url("./themes/material_design_light/icons/up-arrow.png"); -} - -QSpinBox::up-button:disabled { - image: url("./themes/material_design_light/icons/up-arrow_off.png"); -} - -QSpinBox::down-button { - subcontrol-origin: border; - subcontrol-position: bottom right; - width: 16px; - image: url("./themes/material_design_light/icons/down-arrow.png"); - border-width: 0px; - border-top-width: 0; -} - -QSpinBox::down-button:hover { - image: url("./themes/material_design_light/icons/down-arrow_hover.png"); -} - -QSpinBox::down-button:pressed { - image: url("./themes/material_design_light/icons/down-arrow.png"); -} - -QSpinBox::down-button:disabled { - image: url("./themes/material_design_light/icons/down-arrow_off.png"); -} - -/************************************* -TreeViewMenu (Mode) -**************************************/ -QTreeView { - background-color: transparent; - selection-background-color: transparent; - border: 0px; -} - -QTreeView::item { - background-color: transparent; - color: #29353B; -} - -QTreeView::item:hover { - border-right: 2px solid #6ECE12; - color: #000000; -} - -QTreeView::item:selected { - color: #6ECE12; -} - -QTreeView::item:active{ - background: transparent; -} - -QTreeView::item:disabled{ - color: #b3b3cc; -} - -QTreeView::item:selected:disabled{ - color: #6ECE12; -} diff --git a/src/themesmanager.py b/src/themesmanager.py deleted file mode 100644 index df4c398..0000000 --- a/src/themesmanager.py +++ /dev/null @@ -1,299 +0,0 @@ -from functools import partial -import os -import re -from PyQt5.QtWidgets import QAction, QActionGroup -from PyQt5.QtCore import pyqtSlot -from PyQt5.QtGui import QPixmap -from constants import Constants, ThemeConstants -from utilities import pop_up - - -class _ColorsHandler: - """Manage the theme's secondary colors. - - Contains a _Color inner class.""" - - class _Color: - """Characterize a color from a string. - - Can handle strings representing multiple colors.""" - - _MAX_COLORS = 2 - - def __init__(self, line): - """Define the color from the string 'line'. - - All relevant features are defined: - - if the format is valid; - - if 'line' represent a single color or a list of colors. - - the 'quality' of the color.""" - quality, color_str = line.split(ThemeConstants.COLOR_SEPARATOR) - color_str = color_str.strip() - self.quality = quality.lower().strip() - self.color_str = '' - self.color_list = [] - if ',' in color_str: - self.is_simple_string = False - self.color_list = [c.strip() for c in color_str.split(',')] - else: - self.is_simple_string = True - self.color_str = color_str - self.is_valid = self._color_is_valid() - - def _color_is_valid(self): - """Return if the color (or the list of colors) has a valid html format.""" - pattern = "#([a-zA-Z0-9]){6}" - - def match_ok(col): - return bool(re.match(pattern, col)) and len(col) == 7 - - if not self.is_simple_string: - if len(self.color_list) <= self._MAX_COLORS: - return all(match_ok(c) for c in self.color_list) - else: - return False - else: - return match_ok(self.color_str) - - def __init__(self, simple_color_list, double_color_list): - """Initialize the lists of valid _Color objects.""" - self.simple_color_list = simple_color_list - self.double_color_list = double_color_list - - @classmethod - def from_file(cls, colors_str): - """Return a _ColorsHandler object with two lists of valid _Color objects. - - If the file is empty or there are no valid colors return None.""" - if colors_str: - simple_color_list = [] - double_color_list = [] - for line in colors_str.splitlines(): - color = cls._Color(line) - if color.is_valid: - if color.is_simple_string: - simple_color_list.append(color) - else: - double_color_list.append(color) - if simple_color_list or double_color_list: - return cls(simple_color_list, double_color_list) - return None - - -class ThemeManager: - """Manage all the operations releted to the themes.""" - - def __init__(self, owner): - """Initialize the ThemeManager instance.""" - self._owner = owner - self._owner.active_color = ThemeConstants.DEFAULT_ACTIVE_COLOR - self._owner.inactive_color = ThemeConstants.DEFAULT_INACTIVE_COLOR - - self._theme_path = "" - self._current_theme = "" - - self._owner.spaceweather_screen.refreshable_labels.set( - "switch_on_colors", - ThemeConstants.DEFAULT_ON_COLORS - ) - self._owner.spaceweather_screen.refreshable_labels.set( - "switch_off_colors", ThemeConstants.DEFAULT_OFF_COLORS - ) - self._theme_names = {} - - @pyqtSlot() - def _apply(self, theme_path, save=True): - """Apply the selected theme. - - Refresh all relevant widgets. - Display a QMessageBox if the theme is not found.""" - self._theme_path = theme_path - if os.path.exists(theme_path): - if self._theme_path != self._current_theme: - self._change(save) - self._owner.display_specs( - item=self._owner.signals_list.currentItem(), - previous_item=None - ) - self._owner.filters.refresh() - self._owner.audio_widget.refresh( - self._owner.active_color, - self._owner.inactive_color - ) - self._owner.spaceweather_screen.refreshable_labels.refresh() - else: - pop_up(self._owner, title=ThemeConstants.THEME_NOT_FOUND, - text=ThemeConstants.MISSING_THEME).show() - - def _pretty_name(self, bad_name): - """Return a well-formatted theme name.""" - return ' '.join( - map( - lambda s: s.capitalize(), - bad_name.split('_') - ) - ) - - def _detect_themes(self): - """Detect all available themes. - - Connect all the actions to change the theme. - Display a QMessageBox if the theme folder is not found.""" - themes = [] - ag = QActionGroup(self._owner) - themes_menu = self._owner.settings_menu.addMenu("Themes") - if not os.path.exists(ThemeConstants.FOLDER): - pop_up(self._owner, title=ThemeConstants.THEME_FOLDER_NOT_FOUND, - text=ThemeConstants.MISSING_THEME_FOLDER).show() - return - for theme_folder in sorted(os.listdir(ThemeConstants.FOLDER)): - relative_folder = os.path.join(ThemeConstants.FOLDER, theme_folder) - if os.path.isdir(os.path.abspath(relative_folder)): - relative_folder = os.path.join(ThemeConstants.FOLDER, theme_folder) - themes.append(relative_folder) - for theme_path in themes: - theme_name = '&' + self._pretty_name(os.path.basename(theme_path)) - new_theme = ag.addAction( - QAction( - theme_name, - self._owner, - checkable=True - ) - ) - themes_menu.addAction(new_theme) - self._theme_names[theme_name.lstrip('&')] = new_theme - new_theme.triggered.connect(partial(self._apply, theme_path)) - - def _change(self, save=True): - """Change the current theme. - - Apply the stylesheet and set active and inactive colors. - Set all the new images needed. - Save the new current theme on file.""" - theme_name = os.path.basename(self._theme_path) + ThemeConstants.EXTENSION - try: - with open(os.path.join(self._theme_path, theme_name), "r") as stylesheet: - style = stylesheet.read() - self._owner.setStyleSheet(style) - self._owner.download_window.setStyleSheet(style) - except FileNotFoundError: - pop_up(self._owner, title=ThemeConstants.THEME_NOT_FOUND, - text=ThemeConstants.MISSING_THEME).show() - else: - icons_path = os.path.join(self._theme_path, ThemeConstants.ICONS_FOLDER) - - path_to_search_label = os.path.join(icons_path, Constants.SEARCH_LABEL_IMG) - - if os.path.exists(path_to_search_label): - path = path_to_search_label - else: - path = ThemeConstants.DEFAULT_SEARCH_LABEL_PATH - - self._owner.search_label.setPixmap(QPixmap(path)) - self._owner.modulation_search_label.setPixmap(QPixmap(path)) - self._owner.location_search_label.setPixmap(QPixmap(path)) - - self._owner.search_label.setScaledContents(True) - self._owner.modulation_search_label.setScaledContents(True) - self._owner.location_search_label.setScaledContents(True) - - path_to_volume_label = os.path.join(icons_path, Constants.VOLUME_LABEL_IMG) - - if os.path.exists(path_to_volume_label): - path = path_to_volume_label - else: - path = ThemeConstants.DEFAULT_VOLUME_LABEL_PATH - - self._owner.volume_label.setPixmap(QPixmap(path)) - self._owner.volume_label.setScaledContents(True) - - path_to_colors = os.path.join(self._theme_path, ThemeConstants.COLORS) - - active_color_ok = False - inactive_color_ok = False - switch_on_color_ok = False - switch_off_color_ok = False - text_color_ok = False - - if os.path.exists(path_to_colors): - with open(path_to_colors, "r") as colors_file: - color_handler = _ColorsHandler.from_file(colors_file.read()) - - if color_handler is not None: - for color in color_handler.simple_color_list: - if color.quality == Constants.ACTIVE: - self._owner.active_color = color.color_str - active_color_ok = True - if color.quality == Constants.INACTIVE: - self._owner.inactive_color = color.color_str - inactive_color_ok = True - if color.quality == Constants.TEXT_COLOR: - text_color_ok = True - self._owner.spaceweather_screen.refreshable_labels.set( - "text_color", - color.color_str - ) - for color in color_handler.double_color_list: - if color.quality == Constants.LABEL_ON_COLOR: - switch_on_color_ok = True - self._owner.spaceweather_screen.refreshable_labels.set( - "switch_on_colors", - color.color_list - ) - if color.quality == Constants.LABEL_OFF_COLOR: - switch_off_color_ok = True - self._owner.spaceweather_screen.refreshable_labels.set( - "switch_off_colors", - color.color_list - ) - - if not (active_color_ok and inactive_color_ok): - self._owner.active_color = ThemeConstants.DEFAULT_ACTIVE_COLOR - self._owner.inactive_color = ThemeConstants.DEFAULT_INACTIVE_COLOR - - if not (switch_on_color_ok and switch_off_color_ok): - self._owner.spaceweather_screen.refreshable_labels.set( - "switch_on_colors", - ThemeConstants.DEFAULT_ON_COLORS - ) - self._owner.spaceweather_screen.refreshable_labels.set( - "switch_off_colors", - ThemeConstants.DEFAULT_OFF_COLORS - ) - - if not text_color_ok: - self._owner.spaceweather_screen.refreshable_labels.set( - "text_color", - ThemeConstants.DEFAULT_TEXT_COLOR - ) - self._current_theme = self._theme_path - if save: - self._owner.settings.save(theme=os.path.basename(self._theme_path)) - - def apply_default_theme(self): - """Apply the default theme if no theme is set or the theme name is invalid.""" - pretty_name = self._theme_names.get(self._pretty_name(ThemeConstants.DEFAULT), None) - if pretty_name is None: - pop_up( - self._owner, - title=ThemeConstants.THEME_NOT_FOUND, - text=ThemeConstants.MISSING_THEME - ).show() - else: - pretty_name.setChecked(True) - self._apply(ThemeConstants.DEFAULT_THEME_PATH) - - def start(self): - """Start the theme manager.""" - self._detect_themes() - if self._owner.settings.theme is not None: - theme_path = os.path.join(ThemeConstants.FOLDER, self._owner.settings.theme) - theme_name = self._pretty_name(os.path.basename(theme_path)) - theme = self._theme_names.get(theme_name, None) - if theme is None: - self.apply_default_theme() - else: - theme.setChecked(True) - self._apply(theme_path, save=False) - else: - self.apply_default_theme() diff --git a/src/threads.py b/src/threads.py deleted file mode 100644 index 1e67add..0000000 --- a/src/threads.py +++ /dev/null @@ -1,328 +0,0 @@ -import asyncio -from enum import Enum, auto -from io import BytesIO -from math import ceil -import ssl -from time import perf_counter -import aiohttp -from PyQt5.QtCore import QThread, pyqtSignal, pyqtSlot -from constants import Constants -from utilities import checksum_ok, get_file_extension -from web_utilities import ( - get_cacert_file, - get_pool_manager, -) -# Needed for pyinstaller compilation. -import encodings.idna # noqa: 401 - - -class ThreadStatus(Enum): - """Possible thread status.""" - - OK = auto() - NO_CONNECTION_ERR = auto() - UNKNOWN_ERR = auto() - BAD_DOWNLOAD_ERR = auto() - UNDEFINED = auto() - SLOW_CONN_ERR = auto() - - -class _SlowConnError(Exception): - pass - - -class BaseDownloadThread(QThread): - """Subclass QThread. Base class for the download threads.""" - - def __init__(self, parent=None): - """Set the status to 'UNDEFINED'.""" - super().__init__(parent) - self.status = ThreadStatus.UNDEFINED - - # def __del__(self): - # """Force the termination of the thread.""" - # self.terminate() - # self.wait() - - -class DownloadThread(BaseDownloadThread): - """Subclass BaseDownloadThread. Download the database folder. Used also for software updates.""" - - progress = pyqtSignal(int) - speed_progress = pyqtSignal(float) - _CHUNK = 128 * 1024 - _DELTAT = 2 - - def __init__(self, min_bytes=1024**2): - """Just call super().__init__.""" - super().__init__() - self._min_bytes = min_bytes - self._data = None - self._exit_call = False - self._target = None - - def _pretty_len(self, byte_obj): - """Return a well-formatted number of downloaded MB.""" - mega = len(byte_obj) / self._min_bytes - if mega.is_integer(): - return int(mega) - else: - return ceil(mega) - - def _get_download_speed(self, data, delta): - """Return the download speed in MB/s.""" - return round( - (len(data) / self._min_bytes) / delta, 2 - ) - - @pyqtSlot() - def set_exit(self): - """Time to shutdown the thread. - - Executed in the main thread.""" - self._exit_call = True - - def start(self, target): - """Start the thread. Set the correct download options first.""" - self._target = target - super().start() - - def _download_loop(self): - """Read a chunck of the downloaded data at every iteration.""" - raw_data = bytes(0) - sub_data = bytes(0) - start = perf_counter() - prev_downloaded = 0 - while True: - try: - data = self._data.read(self._CHUNK) - except Exception: - raise _SlowConnError - else: - delta = perf_counter() - start - if not data: - break - raw_data += data - sub_data += data - # Emit a progress signal only if at least self._min_bytes has been downloaded. - if len(raw_data) - prev_downloaded >= self._min_bytes: - prev_downloaded = len(raw_data) - self.progress.emit(self._pretty_len(raw_data)) - if delta >= self._DELTAT: - self.speed_progress.emit( - self._get_download_speed(sub_data, delta) - ) - sub_data = bytes(0) - start = perf_counter() - if self._exit_call: - self._data.release_conn() - break - return raw_data - - def run(self): - """Override QThread.run. Download the database, images and audio samples. - - Handle all possible exceptions. Also extract the files - in the destination folder.""" - self.status = ThreadStatus.UNDEFINED - self._data = None - - try: - self._data = get_pool_manager().request( - 'GET', - self._target.url, - preload_content=False, - ) - raw_data = self._download_loop() - if self._exit_call: - self._exit_call = False - return - except Exception as e: # No (or bad) internet connection. - self._data.release_conn() - if isinstance(e, _SlowConnError): - self.status = ThreadStatus.SLOW_CONN_ERR - else: - self.status = ThreadStatus.NO_CONNECTION_ERR - return - if self._data.status != 200: - self.status = ThreadStatus.BAD_DOWNLOAD_ERR - return - if self._wrong_checksum(raw_data): - return - self._target.delete_files() - self._extract(raw_data) - - def _wrong_checksum(self, raw_data): - """Verify the checksum of the downloaded data and set the status accordingly.""" - try: - is_checksum_ok = checksum_ok(raw_data, self._target.hash_code) - except ValueError: # Invalid hash code. - self.status = ThreadStatus.NO_CONNECTION_ERR - return True - else: - if not is_checksum_ok: - self.status = ThreadStatus.BAD_DOWNLOAD_ERR - return True - return False - - def _extract(self, raw_data): - """Unzip and save the downloaded data into the destination folder.""" - try: - self.progress.emit(Constants.EXTRACTING_CODE) - self.speed_progress.emit(Constants.ZERO_FINAL_SPEED) - with self._target.Extractor.open(fileobj=BytesIO(raw_data)) as zipped: - zipped.extractall(path=self._target.dest_path) - except Exception: - self.status = ThreadStatus.UNKNOWN_ERR - else: - self.status = ThreadStatus.OK - - -class UpdatesControllerThread(BaseDownloadThread): - - on_success = pyqtSignal(bool) - - def __init__(self, version_controller): - super().__init__() - self.version_controller = version_controller - - def run(self): - if self.version_controller.update(): - self.on_success.emit(True) - else: - self.on_success.emit(False) - - -# class GenercWorkerThread(BaseDownloadThread): -# def __init__(self, func, *args, **kwargs): -# super().__init__() -# self._args = args -# self._kwargs = kwargs -# self._func - -# def run(self): -# self.status = ThreadStatus.UNDEFINED -# try: -# self._func(self._args, self._kwargs) -# except Exception: -# self.status = ThreadStatus.UNKNOWN_ERR -# else: -# self.status = ThreadStatus.OK - - -async def _download_resource(session, link): - """Return the content of 'link' as bytes.""" - ssl_context = ssl.create_default_context( - purpose=ssl.Purpose.SERVER_AUTH, - cafile=get_cacert_file() - ) - resp = await session.get(link, ssl=ssl_context) - return await resp.read() - - -class UpdateSpaceWeatherThread(BaseDownloadThread): - """Subclass BaseDownloadThread. Download the space weather data.""" - - _PROPERTIES = ("xray", "prot_el", "ak_index", "sgas", "geo_storm") - - def __init__(self, space_weather_data): - """Initialize the a local space_weather_data.""" - super().__init__() - self._space_weather_data = space_weather_data - - async def _download_property(self, session, property_name): - """Download the data conteining the information of a specific property.""" - link = getattr(Constants, "SPACE_WEATHER_" + property_name.upper()) - data = await _download_resource(session, link) - self._space_weather_data.set_property(property_name, data, get_file_extension(link)) - - async def _download_image(self, session, n): - """Download the data corresponding the n-th image displayed in the screen.""" - im = await _download_resource(session, Constants.SPACE_WEATHER_IMGS[n]) - self._space_weather_data.images[n].loadFromData(im) - - async def _download_resources(self): - """Download all the data.""" - session = aiohttp.ClientSession() - try: - t = [] - for p in self._PROPERTIES: - t.append( - asyncio.create_task(self._download_property(session, p)) - ) - - tot_images = range(len(Constants.SPACE_WEATHER_IMGS)) - t1 = [] - for im_number in tot_images: - t1.append( - asyncio.create_task( - self._download_image(session, im_number) - ) - ) - await asyncio.gather(*t, *t1) - except Exception: - self.status = ThreadStatus.UNKNOWN_ERR - else: - self.status = ThreadStatus.OK - finally: - await session.close() - - def run(self): - """Override QThread.run. Start the download of the data.""" - self.status = ThreadStatus.UNDEFINED - asyncio.run(self._download_resources()) - - -class UpdateForecastThread(BaseDownloadThread): - """Subclass BaseDownloadThread. Download the forecast data.""" - - class _PropertyName(Enum): - """Enum used to differentiate between the two data needed.""" - FORECAST = auto() - PROBABILITIES = auto() - - def __init__(self, owner): - """Set the owner object (a ForecastData instance).""" - super().__init__() - self.owner = owner - - async def _download_property(self, session, link, prop_name): - """Download the data from 'link' and set the corresponding property of the owner.""" - resp = await _download_resource(session, link) - resp = str(resp, 'utf-8') - if prop_name is self._PropertyName.FORECAST: - self.owner.forecast = resp - if prop_name is self._PropertyName.PROBABILITIES: - self.owner.probabilities = resp - - async def _download_resources(self): - """Download all the data needed.""" - session = aiohttp.ClientSession() - try: - await asyncio.gather( - asyncio.create_task( - self._download_property( - session, - Constants.SPACE_WEATHER_GEO_STORM, - self._PropertyName.FORECAST - ) - ), - asyncio.create_task( - self._download_property( - session, - Constants.FORECAST_PROBABILITIES, - self._PropertyName.PROBABILITIES - ) - ) - ) - except Exception: - self.status = ThreadStatus.UNKNOWN_ERR - else: - self.status = ThreadStatus.OK - finally: - await session.close() - - def run(self): - """Override QThread.run. Start the data download.""" - self.status = ThreadStatus.UNDEFINED - asyncio.run(self._download_resources()) diff --git a/src/updater.py b/src/updater.py deleted file mode 100644 index 1c9ef86..0000000 --- a/src/updater.py +++ /dev/null @@ -1,200 +0,0 @@ -import argparse -import os -import os.path -import sys -from PyQt5.QtCore import QObject, QProcess -from PyQt5.QtGui import QPixmap -from PyQt5.QtWidgets import QApplication, qApp -from download_window import DownloadWindow -from constants import Constants, DownloadTarget -from downloadtargetfactory import get_download_target - - -__VERSION__ = "0.0.1" - - -# Global stylesheet. -stylesheet = """ -/************************************* -Main Window and Splitters -**************************************/ -QWidget:window { - background-color: #29353B; -} - -/************************************* -Main menu (Bar) -**************************************/ -QMenuBar { - background-color: transparent; - color: #AFBDC4; -} - -QMenuBar::item { - background-color: transparent; -} - -QMenuBar::item:disabled { - color: gray; -} - -QMenuBar::item:selected { - color: #FFFFFF; - border-bottom: 2px solid #88cc00; -} - -QMenuBar::item:pressed { - color: #FFFFFF; - border-bottom: 2px solid #88cc00; -} - -QToolBar { - background-color: transparent; - border: 1px solid transparent; -} - -QToolBar:handle { - background-color: transparent; - border-left: 2px dotted #80CBC4; - color: transparent; -} - -QToolBar::separator { - border: 0; -} - -QMenu { - background-color: #263238; - color: #AFBDC4; -} - -QMenu::item:selected { - color: #FFFFFF; -} - -QMenu::item:pressed { - color: #FFFFFF; -} - -QMenu::separator { - background-color: transparent; - height: 1px; - margin-left: 10px; - margin-right: 10px; - margin-top: 5px; - margin-bottom: 5px; -} - - -/************************************* -Progressbar -**************************************/ -QProgressBar -{ - border: 2px solid grey; - border-radius: 5px; - text-align: center; -} - -QProgressBar::chunk -{ - background-color: #88cc00; - width: 2.15px; - margin: 0.5px; -} - -/************************************* -Labels and Rich Text boxes -**************************************/ -QLabel { - background-color: transparent; - color: #CFD8DC; -} - -QDialog { - background-color: transparent; - color: #949a9c; -} - -QTextBrowser { - background-color: transparent; - color: #949a9c; -} - -/************************************* -Buttons -**************************************/ -QPushButton { - background-color: transparent; - color: #AFBDC4; - border: 1px solid transparent; - padding: 4px 22px; -} - -QPushButton:hover { - border-left: 2px solid #88cc00; - border-right: 2px solid #88cc00; - color: #FFFFFF; -} - -QPushButton:pressed { - color: #FFFFFF; -} - -QPushButton:disabled { - color:#546E7A; -} - -QPushButton:checked { - color: #88cc00; -} -""" - - -class _ArtemisUpdater(QObject): - """Updater of the main software.""" - - def __init__(self, target): - super().__init__() - self.target = get_download_target(DownloadTarget.SOFTWARE, target) - self.download_window = DownloadWindow() - self.download_window.setStyleSheet(stylesheet) - self.download_window.cancel_btn.clicked.connect(qApp.quit) - self.download_window.complete.connect(self.start_main_program) - - def start(self): - """Close the main program and start the download.""" - self.download_window.activate(self.target) - - def init_ok(self): - return self.target.url and self.target.hash_code and self.target.size > 0 - - def start_main_program(self): - """Restart the (updated) main program and close the updater.""" - self.download_window.setVisible(False) - artemis = QProcess() - try: - artemis.startDetached(Constants.EXECUTABLE_NAME) - except BaseException: - pass - qApp.quit() - - -if __name__ == '__main__': - parser = argparse.ArgumentParser(prog='Artemis Updater') - parser.add_argument("url", nargs="?", default="", type=str, help="Download url") - parser.add_argument("hash_code", nargs="?", default="", type=str, help="sha256 of the file") - parser.add_argument("size", nargs="?", default=0, type=int, help="Size (KB) of the file") - parser.add_argument('--version', action='version', version=__VERSION__) - args = parser.parse_args() - - my_app = QApplication(sys.argv) - ARTEMIS_ICON = os.path.join(":", "icon", "default_pics", "Artemis3.500px.png") - img = QPixmap(ARTEMIS_ICON) - updater = _ArtemisUpdater(args) - - if not updater.init_ok(): - updater.start_main_program() - else: - updater.start() - sys.exit(my_app.exec_()) diff --git a/src/updatescontroller.py b/src/updatescontroller.py deleted file mode 100644 index 225fef9..0000000 --- a/src/updatescontroller.py +++ /dev/null @@ -1,144 +0,0 @@ -import logging -import subprocess as sp -import webbrowser -from PyQt5.QtCore import QObject, pyqtSlot, QProcess -from PyQt5.QtWidgets import QMessageBox, qApp -from constants import Constants, Messages, DownloadTarget -from downloadtargetfactory import get_download_target -from utilities import pop_up -from os_utilities import IS_MAC -from executable_utilities import IS_BINARY -from threads import UpdatesControllerThread -from versioncontroller import VersionController - - -class UpdatesController(QObject): - - def __init__(self, current_version, owner): - super().__init__() - self._owner = owner - self._download_window = self._owner.download_window - self._current_version = current_version - self.version_controller = VersionController() - self._updates_thread = UpdatesControllerThread(self.version_controller) - self._updates_thread.on_success.connect(self._startup_updates_check) - - def start(self): - """Start the thread.""" - if IS_BINARY: - self._updates_thread.start() - - @pyqtSlot() - def start_verify_software_version(self): - if not IS_BINARY: - pop_up( - self._owner, - title=Messages.FEATURE_NOT_AVAILABLE, - text=Messages.SCRIPT_NOT_UPDATE - ).show() - return - if not self._download_window.isVisible(): - self._updates_thread.start() - - @pyqtSlot(bool) - def _verify_software_version(self, success): - """Verify if there is a new software version. - - Otherwise notify the user that the software is up to date.""" - if not self._download_window.isVisible(): - if success: - new_version_found = self._check_new_version() - if not new_version_found: - pop_up( - self._owner, - title=Messages.UP_TO_DATE, - text=Messages.UP_TO_DATE_MSG - ).show() - else: - pop_up( - self._owner, - title=Messages.NO_CONNECTION, - text=Messages.NO_CONNECTION_MSG - ).show() - - @pyqtSlot(bool) - def _startup_updates_check(self, success): - self._updates_thread.on_success.disconnect() - self._updates_thread.on_success.connect(self._verify_software_version) - if success: - if not self._check_new_version(): - # Check for a new version of the updater only if Artemis is up to date. - self._check_updater_version() - - def _check_new_version(self): - """Check whether there is a new software version available. - - Does something only if the running program is a compiled version.""" - if not IS_BINARY: - return None - latest_version = self.version_controller.software.version - if latest_version is None: - return False - if latest_version == self._current_version: - return False - answer = pop_up( - self._owner, - title=Messages.NEW_VERSION_AVAILABLE, - text=Messages.NEW_VERSION_MSG(latest_version), - informative_text=Messages.DOWNLOAD_SUGG_MSG, - is_question=True, - ).exec() - if answer == QMessageBox.Yes: - if IS_MAC: - webbrowser.open(self.version_controller.software.url) - else: - updater = QProcess() - command = Constants.UPDATER_SOFTWARE + " " + \ - self.version_controller.software.url + \ - " " + self.version_controller.software.hash_code + \ - " " + str(self.version_controller.software.size) - try: - updater.startDetached(command) - except BaseException: - logging.error("Unable to start updater") - pass - else: - qApp.quit() - return True - - def _check_updater_version(self): - """Check is a new version of the updater is available. - - If so, ask to download the new version. - If the software is not a compiled version, the function is a NOP.""" - if not IS_BINARY or IS_MAC: - return None - latest_updater_version = self.version_controller.updater.version - try: - with sp.Popen( - [Constants.UPDATER_SOFTWARE, "--version"], - encoding="UTF-8", - stdout=sp.PIPE, - stderr=sp.STDOUT, - stdin=sp.DEVNULL # Needed to avoid OsError: [WinError 6] The handle is invalid. - ) as proc: - updater_version = proc.stdout.read().rstrip("\r\n") # Strip any possible newline, to be sure. - except Exception: - logging.error("Unable to query the updater") - updater_version = latest_updater_version - if latest_updater_version is None: - return None - if updater_version != latest_updater_version: - answer = pop_up( - self._owner, - title=Messages.UPDATES_AVAILABALE, - text=Messages.UPDATES_MSG, - is_question=True, - ).exec() - if answer == QMessageBox.Yes: - self._download_window.activate( - get_download_target( - DownloadTarget.UPDATER, - self.version_controller.updater - ) - ) diff --git a/src/urlbutton.py b/src/urlbutton.py deleted file mode 100644 index 8cc3451..0000000 --- a/src/urlbutton.py +++ /dev/null @@ -1,80 +0,0 @@ -from PyQt5.QtWidgets import QPushButton -from collections import namedtuple -from enum import Enum, auto - - -class UrlButton(QPushButton): - """Define the behaviour of the wiki button.""" - - class State(Enum): - """Possible states of the button.""" - ACTIVE = auto() - INACTIVE = auto() - CLICKED = auto() - - _UrlColors = namedtuple( - "UrlColors", - [ - "INACTIVE", - "ACTIVE", - "CLICKED", - "ACTIVE_HOVER", - "CLICKED_HOVER", - ] - ) - _COLORS = _UrlColors( - "#9f9f9f", - "#4c75ff", - "#942ccc", - "#808FFF", - "#DE78FF", - ) - - def __init__(self, *args, **kwargs): - super().__init__(*args, **kwargs) - - def set_enabled(self, state): - """Enable the button and set the stylesheet.""" - super().setEnabled(True) - if state is self.State.ACTIVE: - color = self._COLORS.ACTIVE - else: - color = self._COLORS.CLICKED - self.setStyleSheet(f""" - QPushButton {{ - border: 0px; - background-color: transparent; - color: {color}; - }} - QPushButton::hover {{ - border: 0px; - background-color: transparent; - color: {self._COLORS.ACTIVE_HOVER}; - }} - """) - - def set_disabled(self): - """Disable the button and set the stylesheet.""" - super().setEnabled(False) - self.setStyleSheet(f""" - QPushButton:disabled {{ - border: 0px; - background-color: transparent; - color: {self._COLORS.INACTIVE}; - }} - """) - - def set_clicked(self): - """Apply the stylesheet for the clicked state.""" - self.setStyleSheet(f""" - QPushButton {{ - border: 0px; - background-color: transparent; - color: {self._COLORS.CLICKED}; - }} - QPushButton::hover {{ - border: 0px; - background-color: transparent; - color: {self._COLORS.CLICKED_HOVER}; - }} - """) diff --git a/src/utilities.py b/src/utilities.py deleted file mode 100644 index 111a103..0000000 --- a/src/utilities.py +++ /dev/null @@ -1,217 +0,0 @@ -import logging -from functools import partial -import hashlib -from PyQt5.QtWidgets import QMessageBox -from constants import Constants, Signal - - -class UniqueMessageBox(QMessageBox): - """Subclass of QMessageBox. Overrides only the exec method. - - Only one instance of this class can execute super().exec() exec at a given time. - If another instance is the the exec loop, calling exec simply return None.""" - - _open_message = False - _font = None - - @classmethod - def set_font(cls, font): - """Store the font for all UniqueMessageBox(es).""" - cls._font = font - - def __init__(self, *args, **kwargs): - super().__init__(*args, **kwargs) - - def setFont(self, font): - """Extends QMessageBox.setFont. Apply the font only if it is not None.""" - if font is not None: - super().setFont(font) - - def exec(self): - """Overrides QMessageBox.exec. Call the parent method if there are no - other instances executing exec; also set the current font. - Otherwise return None,""" - if self.__class__._open_message: - return None - self.setFont(self._font) - self.__class__._open_message = True - answer = super().exec() - self.__class__._open_message = False - return answer - - def show(self): - """Extends QMessageBox.show(). - - Set the font before showing the message.""" - self.setFont(self._font) - super().show() - - -def uncheck_and_emit(button): - """Set the button to the unchecked state and emit the clicked signal.""" - if button.isChecked(): - button.setChecked(False) - button.clicked.emit() - - -def show_matching_strings(list_elements, text): - """Show all elements of QListWidget that matches (even partially) a target text. - - Arguments: - list_elements -- the QListWidget - text -- the target text.""" - for index in range(list_elements.count()): - item = list_elements.item(index) - if text.lower() in item.text().lower() or item.isSelected(): - item.setHidden(False) - else: - item.setHidden(True) - - -def get_field_entries(db_entry, separator=Constants.FIELD_SEPARATOR): - """Take a database entry and optionally a separator string. - - Return a list obtained by splitting the signal field with separator.""" - return [ - x.strip() for x in db_entry.split(separator) - ] - - -def pop_up(instance, title, text, - informative_text=None, - connection=None, - is_question=False, - default_btn=QMessageBox.Yes): - """Return a QMessageBox object. - - Keyword arguments: - informative_text -- possible informative text to be displayed. - connection -- a callable to connect the message when emitting the finished signal. - is_question -- whether the message contains a question. - default_btn -- the default button for the possible answer to the question.""" - msg = UniqueMessageBox(instance) - msg.setWindowTitle(title) - msg.setText(text) - if informative_text: - msg.setInformativeText(informative_text) - if connection: - msg.finished.connect(connection) - if is_question: - msg.setStandardButtons(QMessageBox.Yes | QMessageBox.No) - msg.setDefaultButton(default_btn) - msg.adjustSize() - return msg - - -def checksum_ok(data, reference_hash_code): - """Check whether the checksum of the 'data' argument is correct. - - Expects a sha256 code as argument.""" - if reference_hash_code is None: - raise ValueError("ERROR: Invalid hash code.") - code = hashlib.sha256() - code.update(data) - return code.hexdigest() == reference_hash_code - - -def connect_events_to_func(events_to_connect, fun_to_connect, fun_args): - """Connect all elements of events_to_connect to the callable fun_to_connect. - - fun_args is a list of fun_to_connect arguments.""" - if fun_args is not None: - for event in events_to_connect: - event.connect(partial(fun_to_connect, *fun_args)) - else: - for event in events_to_connect: - event.connect(fun_to_connect) - - -def filters_limit(spinbox, filter_unit, confidence, sign=1): - """Return the actual limit of a numerical filter.""" - band_filter = spinbox.value() * Constants.CONVERSION_FACTORS[filter_unit.currentText()] - return band_filter + sign * (confidence.value() * band_filter) // 100 - - -def is_undef_freq(current_signal): - """Return whether the lower or upper frequency of a signal is undefined.""" - lower_freq = current_signal.at[Signal.INF_FREQ] - upper_freq = current_signal.at[Signal.SUP_FREQ] - return lower_freq == Constants.UNKNOWN or upper_freq == Constants.UNKNOWN - - -def is_undef_band(current_signal): - """Return whether the lower or upper band of a signal is undefined.""" - lower_band = current_signal.at[Signal.INF_BAND] - upper_band = current_signal.at[Signal.SUP_BAND] - return lower_band == Constants.UNKNOWN or upper_band == Constants.UNKNOWN - - -def _change_unit(str_num): - """Return a scale factor given the number of digits of a numeric string.""" - digits = len(str_num) - if digits < 4: - return 1 - elif digits < 7: - return 1000 - elif digits < 10: - return 10**6 - else: - return 10**9 - - -def format_numbers(lower, upper): - """Return the string which displays the numeric limits of a filter.""" - units = {1: 'Hz', 1000: 'kHz', 10**6: 'MHz', 10**9: 'GHz'} - lower_factor = _change_unit(lower) - upper_factor = _change_unit(upper) - pre_lower = lower - pre_upper = upper - lower = safe_cast(lower, int) / lower_factor - upper = safe_cast(upper, int) / upper_factor - if lower.is_integer(): - lower = int(lower) - else: - lower = round(lower, 2) - if upper.is_integer(): - upper = int(upper) - else: - upper = round(upper, 2) - if pre_lower != pre_upper: - return f"{lower:,} {units[lower_factor]} - {upper:,} {units[upper_factor]}" - else: - return f"{lower:,} {units[lower_factor]}" - - -def safe_cast(value, cast_type, default=-1): - """Call 'cast_type(value)' and return the result. - - If the operation fails return 'default'. - Should be used to perform 'safe casts'. - Keyword argument: - default -- default value returned if the cast fails. - """ - try: - r = cast_type(value) - except Exception: - logging.error("Cast type failure") - r = default - finally: - return r - - -def get_file_extension(file): - """Return the extension of a file. Return None if there is not such property.""" - components = file.split('.') - if len(components) > 1: - return components[-1] - return None - - -def get_value_from_list_of_dicts(iterable, callable_ok, key_value): - """Return a value from a dict inside a list of dicts. - - The iterable is reversed first, then the value corresponding to the key key_value - is returned from the first dict for which callable_ok(dict) returns True""" - for d in reversed(iterable): - if callable_ok(d): - return d[key_value] diff --git a/src/versioncontroller.py b/src/versioncontroller.py deleted file mode 100644 index 105677b..0000000 --- a/src/versioncontroller.py +++ /dev/null @@ -1,122 +0,0 @@ -from io import BytesIO -import json -from constants import Constants -from os_utilities import get_os -from web_utilities import download_file - - -"""This module exposes just one class: VersionController. - -All the relevant information can be accessed with the dot notation on an instance of such class, e.g.: - version_controller.software.hash_code -is the hash_code of the latest release of the software running on the current OS.""" - - -def _download_versions_file(): - """Download the json file containing all the information - about the latest version of the software. Return a dictionary - containing only the information for the running OS. - - Return a dictionary from a json with the following structure: - { - "windows": { - "software": { - "version": "...", - "url": "...", - "hash_code": "...", - "size": ... - }, - "updater": { - "version": "...", - "url": "...", - "hash_code": "...", - "size": ... - } - }, - "linux": { - "software": { - "version": "...", - "url": "...", - "hash_code": "...", - "size": ... - }, - "updater": { - "version": "...", - "url": "...", - "hash_code": "...", - "size": ... - } - }, - "mac": { - "software": { - "version": "...", - "url": "...", - "hash_code": "...", - "size": ... - }, - "updater": { - "version": "...", - "url": "...", - "hash_code": "...", - "size": ... - } - } - "raspberry": { - "software": { - "version": "...", - "url": "...", - "hash_code": "...", - "size": ... - }, - "updater": { - "version": "...", - "url": "...", - "hash_code": "...", - "size": ... - } - } - } - """ - try: - version_dict = json.load( - BytesIO(download_file(Constants.VERSION_LINK)) - )[get_os()] - except Exception: - return None - else: - return version_dict - - -class VersionController: - """Dynamically create attributes corresponding to elements of a dictionary. - - Used to get updates information.""" - - def __init__(self, dct=None): - """Initialize the dictionary""" - self._dct = dct - - def __getattr__(self, attr): - """Override super().__getattr__. Dynamically create new attributes - corresponding to elements of the diciotnary.""" - if self._dct is None: - if not self.update(): - return None - dct_element = self._dct.get(attr, None) - if dct_element is None: - return None - if isinstance(dct_element, dict): - setattr(self, attr, type(self)(dct_element)) - else: - setattr(self, attr, dct_element) - return getattr(self, attr) - - def update(self): - """Reset the dictionary to the correspondig json file containing - the latest version information. Call this function inside a Qthread.""" - dct = _download_versions_file() - if dct is not None: - self._dct = dct - return True - else: - return False diff --git a/src/weatherdata.py b/src/weatherdata.py deleted file mode 100644 index cf1ad00..0000000 --- a/src/weatherdata.py +++ /dev/null @@ -1,381 +0,0 @@ -import logging -import json -import re -from PyQt5.QtGui import QPixmap -from PyQt5.QtCore import pyqtSlot, pyqtSignal, QObject -from threads import ( - BaseDownloadThread, - UpdateSpaceWeatherThread, - ThreadStatus, - UpdateForecastThread -) -from constants import Constants -from switchable_label import MultiColorSwitchableLabel -from utilities import safe_cast, get_value_from_list_of_dicts - - -class _BaseWeatherData(QObject): - """Base class for the weather data. Extends QObject.""" - - update_complete = pyqtSignal(bool) - - def __init__(self): - """Create a BaseDownloadThread object.""" - super().__init__() - self._update_thread = BaseDownloadThread() - - @property - def is_updating(self): - """Return whether the thread is running.""" - return self._update_thread.isRunning() - - def update(self): - """Start the thread.""" - self._update_thread.start() - - def _parse_data(self): - """Dummy function. Must be overrided by subclasses.""" - pass - - @pyqtSlot() - def _parse_and_emit_signal(self): - """Parse the data and emit an 'update_complete' signal. - - If the download was not successful, do not parse the data. - The 'update_complete' signal propagates the thread status up to the - calling slot.""" - status_ok = False - if self._update_thread.status is ThreadStatus.OK: - status_ok = True - self._parse_data() - self.update_complete.emit(status_ok) - - def _double_split(self, string): - """Given a string, return a list of lists. - - First split on each line. Then split each line on whitespaces.""" - return [i.split() for i in string.splitlines()] - - def shutdown_thread(self): - """Terminate the download thread.""" - self._update_thread.terminate() - self._update_thread.wait() - - -class SpaceWeatherData(_BaseWeatherData): - """Space weather class. Extends _BaseWeatherData.""" - - def __init__(self): - """Set all attributes and connect the thread to _parse_and_emit_signal.""" - super().__init__() - self.xray = '' - self.prot_el = '' - self.ak_index = '' - self.sgas = '' - self.geo_storm = '' - self.images = [ - QPixmap(), - QPixmap(), - QPixmap(), - QPixmap(), - QPixmap(), - QPixmap(), - QPixmap(), - QPixmap(), - QPixmap() - ] - self._update_thread = UpdateSpaceWeatherThread(self) - self._update_thread.finished.connect(self._parse_and_emit_signal) - - def _parse_data(self): - """Override _BaseWeatherData._parse_data. - - Set all the data.""" - if self.xray is not None: - self.xray = get_value_from_list_of_dicts( - self.xray, - lambda d: d["energy"] == "0.1-0.8nm", - "flux" - ) - if self.prot_el is not None: - self.prot_el = get_value_from_list_of_dicts( - self.prot_el, - lambda d: d["energy"] == ">=10 MeV", - "flux" - ) - if self.ak_index is not None: - self.ak_index = self._double_split(self.ak_index) - if self.sgas is not None: - self.sgas = self._double_split(self.sgas) - if self.geo_storm is not None: - self.geo_storm = self._double_split(self.geo_storm) - - def set_property(self, property_name, data, extension): - """Set a property to the object. Format the data based on the extension.""" - if extension == 'txt': - setattr(self, property_name, str(data, 'utf-8')) - elif extension == 'json': - setattr(self, property_name, json.loads(data)) - else: - logging.error("Invalid file extension") - setattr(self, property_name, None) - - def remove_data(self): - """Remove the reference to all the data.""" - self.xray = '' - self.prot_el = '' - self.ak_index = '' - self.sgas = '' - self.geo_storm = '' - self.images = [ - QPixmap(), - QPixmap(), - QPixmap(), - QPixmap(), - QPixmap(), - QPixmap(), - QPixmap(), - QPixmap(), - QPixmap() - ] - - -def _make_labels_table(forecast, probabilities, rows): - """Organize all the arguments to feed _get_lbl_value.""" - def get_first_split(x): - return x.split("/")[0] - - def get_second_split(x): - return x.split("/")[1] - - def get_third_split(x): - return x.split("/")[2] - - solar_row = rows["solar_row"] - event_row = rows["event_row"] - rb_now_row = rows["rb_now_row"] - ga_now_row = rows["ga_now_row"] - kp_index_row = rows["kp_index_row"] - return [ - [ - [forecast, solar_row, 3, None], - [probabilities, event_row + 1, 2, get_first_split], - [probabilities, event_row + 2, 2, get_first_split], - [probabilities, event_row + 3, 1, get_first_split], - [forecast, rb_now_row, 1, None], - [forecast, rb_now_row + 1, 3, None], - [probabilities, ga_now_row + 2, 1, get_first_split], - [probabilities, ga_now_row + 3, 2, get_first_split], - [probabilities, ga_now_row + 4, 2, get_first_split], - [probabilities, ga_now_row + 6, 1, get_first_split], - [probabilities, ga_now_row + 7, 2, get_first_split], - [probabilities, ga_now_row + 8, 2, get_first_split], - [forecast, kp_index_row + 3, 1, None], - [forecast, kp_index_row + 4, 1, None], - [forecast, kp_index_row + 5, 1, None], - [forecast, kp_index_row + 6, 1, None], - [forecast, kp_index_row + 7, 1, None], - [forecast, kp_index_row + 8, 1, None], - [forecast, kp_index_row + 9, 1, None], - [forecast, kp_index_row + 10, 1, None] - ], - [ - [forecast, solar_row, 4, None], - [probabilities, event_row + 1, 2, get_second_split], - [probabilities, event_row + 2, 2, get_second_split], - [probabilities, event_row + 3, 1, get_second_split], - [forecast, rb_now_row, 2, None], - [forecast, rb_now_row + 1, 4, None], - [probabilities, ga_now_row + 2, 1, get_second_split], - [probabilities, ga_now_row + 3, 2, get_second_split], - [probabilities, ga_now_row + 4, 2, get_second_split], - [probabilities, ga_now_row + 6, 1, get_second_split], - [probabilities, ga_now_row + 7, 2, get_second_split], - [probabilities, ga_now_row + 8, 2, get_second_split], - [forecast, kp_index_row + 3, 2, None], - [forecast, kp_index_row + 4, 2, None], - [forecast, kp_index_row + 5, 2, None], - [forecast, kp_index_row + 6, 2, None], - [forecast, kp_index_row + 7, 2, None], - [forecast, kp_index_row + 8, 2, None], - [forecast, kp_index_row + 9, 2, None], - [forecast, kp_index_row + 10, 2, None] - ], - [ - [forecast, solar_row, 5, None], - [probabilities, event_row + 1, 2, get_third_split], - [probabilities, event_row + 2, 2, get_third_split], - [probabilities, event_row + 3, 1, get_third_split], - [forecast, rb_now_row, 3, None], - [forecast, rb_now_row + 1, 5, None], - [probabilities, ga_now_row + 2, 1, get_third_split], - [probabilities, ga_now_row + 3, 2, get_third_split], - [probabilities, ga_now_row + 4, 2, get_third_split], - [probabilities, ga_now_row + 6, 1, get_third_split], - [probabilities, ga_now_row + 7, 2, get_third_split], - [probabilities, ga_now_row + 8, 2, get_third_split], - [forecast, kp_index_row + 3, 3, None], - [forecast, kp_index_row + 4, 3, None], - [forecast, kp_index_row + 5, 3, None], - [forecast, kp_index_row + 6, 3, None], - [forecast, kp_index_row + 7, 3, None], - [forecast, kp_index_row + 8, 3, None], - [forecast, kp_index_row + 9, 3, None], - [forecast, kp_index_row + 10, 3, None] - ] - ] - - -def _get_lbl_value(data, row, col, f=None): - """Return the well-formatted string-value of the label.""" - val = data[row][col] - if f is not None: - val = f(val) - val = val.rstrip('%') - if len(val) > 1: - val = val.lstrip('0') - return val - - -class ForecastData(_BaseWeatherData): - """3-day forecast class. Extends _BaseWeatherData.""" - - ROW_KEYWORDS = { - "solar_row": "S1 or greater", - "event_row": "III. Event probabilities", - "rb_now_row": "R1-R2", - "ga_now_row": "Geomagnetic Activity Probabilities", - "kp_index_row": "NOAA Kp index breakdown" - } - - LABELS_PER_COLUMN = 20 - - def __init__(self, owner): - """Initialize all attributes and connect the thread to _parse_and_emit_signal.""" - super().__init__() - self.forecast = [] - self.probabilities = [] - self._update_thread = UpdateForecastThread(self) - self._update_thread.finished.connect(self._parse_and_emit_signal) - self._today_lbl = owner.today_lbl - self._today_p1_lbl = owner.today_p1_lbl - self._today_p2_lbl = owner.today_p2_lbl - today_lbls = [] - today_p1_lbls = [] - today_p2_lbls = [] - flags = ['', 'p1_', 'p2_'] - for flag in flags: - title_lbl = getattr(self, "_today_" + flag + "lbl") - title_lbl.setText("-") - for index in range(self.LABELS_PER_COLUMN): - label = getattr( - owner, - "forecast_today_" + flag + str(index) + "_lbl" - ) - label.setText(Constants.UNKNOWN) - if flag == flags[0]: - today_lbls.append(label) - if flag == flags[1]: - today_p1_lbls.append(label) - if flag == flags[2]: - today_p2_lbls.append(label) - - self._all_lbls = [today_lbls, today_p1_lbls, today_p2_lbls] - - def _parse_data(self): - """Override _BaseWeatherData._parse_data. - - Set all the relevant data.""" - # Remove possible '(G\d)' from the kp_index table - self.forecast = re.sub( - '\(G\d\)', lambda obj: '', self.forecast - ) - self.forecast = self.forecast.splitlines() - self.probabilities = re.sub( - '\(G\d\)', lambda obj: '', self.probabilities - ) - self.probabilities = self.probabilities.splitlines() - - def _split_lists(self): - """Split the elements of forecast and probabilities.""" - return [i.split() for i in self.forecast], [i.split() for i in self.probabilities] - - def _find_row_with(self, data, text): - """Given a list of strings, return the index of the first string containing the target text.""" - for i, row in enumerate(data): - if text in row: - return i - return None - - def _get_rows(self): - """Get all the rows needed for updating the screen. - - Raise an exception if something goes wrong.""" - - rows = {} - rows["solar_row"] = self._find_row_with( - self.forecast, - self.ROW_KEYWORDS["solar_row"] - ) - rows["event_row"] = self._find_row_with( - self.probabilities, - self.ROW_KEYWORDS["event_row"] - ) - rows["rb_now_row"] = self._find_row_with( - self.forecast, - self.ROW_KEYWORDS["rb_now_row"] - ) - rows["ga_now_row"] = self._find_row_with( - self.probabilities, - self.ROW_KEYWORDS["ga_now_row"] - ) - rows["kp_index_row"] = self._find_row_with( - self.forecast, - self.ROW_KEYWORDS["kp_index_row"] - ) - - if any(row is None for row in rows.values()): - raise Exception('Missing Rows') - else: - return rows - - def _set_dates(self, forecast, solar_row): - """Set the date labels.""" - month = forecast[solar_row - 1][0] - today = forecast[solar_row - 1][1] - today_p1 = forecast[solar_row - 1][3] - today_p2 = forecast[solar_row - 1][5] - self._today_lbl.setText(month + ' ' + today) - self._today_p1_lbl.setText(month + ' ' + today_p1) - self._today_p2_lbl.setText(month + ' ' + today_p2) - - def _set_labels_values(self, labels_table): - """Set all the labels values.""" - for lbl_list, table in zip(self._all_lbls, labels_table): - for lbl, row in zip(lbl_list, table): - lbl.switch_off() - value = _get_lbl_value(*row) - lbl.level = safe_cast(value, int) - if not isinstance(lbl, MultiColorSwitchableLabel): - value += '%' - lbl.setText(value) - lbl.switch_on() - - def update_all_labels(self): - """Update all the labels values. - - If an exception is raised in the process, do nothing.""" - try: - rows = self._get_rows() - forecast, probabilities = self._split_lists() - labels_table = _make_labels_table(forecast, probabilities, rows) - self._set_dates(forecast, rows["solar_row"]) - self._set_labels_values(labels_table) - except Exception: - logging.error("Update ForecastData failure") - pass - - def remove_data(self): - """Remove the reference to the downloaded data.""" - self.forecast = [] - self.probabilities = [] diff --git a/src/web_utilities.py b/src/web_utilities.py deleted file mode 100644 index a89c091..0000000 --- a/src/web_utilities.py +++ /dev/null @@ -1,59 +0,0 @@ -import logging -import os -import sys -import urllib3 -from constants import Database -from executable_utilities import IS_BINARY - - -def get_cacert_file(): - """Return the path to the cacert.pem file. - PyInstaller requires _MEIPASS, Nuitka does not.""" - if IS_BINARY and not "__compiled__" in globals(): - ca_certs = os.path.join(sys._MEIPASS, 'cacert.pem') - else: - ca_certs = 'cacert.pem' - return ca_certs - - -def get_pool_manager(): - """Return a urllib3.PoolManager object.""" - return urllib3.PoolManager(ca_certs=get_cacert_file()) - - -def download_file(url, encoding=""): - resp = get_pool_manager().request( - 'GET', - url, - preload_content=True, - timeout=4.0 - ).data - if encoding: - return resp.decode(encoding) - return resp - - -def _download_multiline_file_as_list(url=Database.LINK_REF): - """Download a text file and return the last line as a list. - - The downloaded file is a csv file with columns (last version == last line): - data.zip_SHA256 | db.csv_SHA256 | Version | Creation_date""" - try: - return download_file(url, encoding="UTF-8").splitlines()[-1].split(Database.DELIMITER) - except Exception: - logging.error("Database metadata download failure") - return None - - -def get_folder_hash_code(): - f = _download_multiline_file_as_list() - if f is not None: - return f[0] - return None - - -def get_db_hash_code(): - f = _download_multiline_file_as_list() - if f is not None: - return f[1] - return None diff --git a/ui/About.qml b/ui/About.qml new file mode 100644 index 0000000..64c971a --- /dev/null +++ b/ui/About.qml @@ -0,0 +1,48 @@ +import QtQuick +import QtQuick.Layouts +import QtQuick.Controls +import QtQuick.Window +import QtQuick.Controls.Material + +Dialog { + x: (parent.width - width) / 2 + y: (parent.height - height) / 2 + + property int currentYear: new Date().getFullYear() + + modal: true + + RowLayout { + Layout.fillWidth: true + + spacing: 10 + + Image { + Layout.alignment: Qt.AlignCenter + + sourceSize.height: 80 + sourceSize.width: 80 + source: "qrc:///images/artemis_icon.svg" + } + + Label { + text: "" + + " Artemis
" + "ARTEMIS " + + qsTr("- The Radio Signals Recognition Manual") + "
" + + "
" + + "Powered By Python " + PYTHON_VERSION + " & Qt " + QT_VERSION + "Copyright (c) 2014-" + currentYear + " " + qsTr("AresValley") + + " GPLv3 License
" + + Layout.fillWidth: true + Layout.minimumWidth: 200 + + textFormat: Text.RichText + wrapMode: Text.WordWrap + + onLinkActivated: (link) => { + Qt.openUrlExternally(link) + } + } + } +} diff --git a/ui/Artemis.qml b/ui/Artemis.qml new file mode 100644 index 0000000..057280e --- /dev/null +++ b/ui/Artemis.qml @@ -0,0 +1,450 @@ +import QtQuick +import QtQuick.Window +import QtQuick.Controls +import QtQuick.Controls.Material +import QtQuick.Layouts +import QtQuick.Dialogs + + +Window { + id: window + width: 1100 + height: 800 + + Component.onCompleted: { + x = Screen.width/2 - width/2 + y = Screen.height/2 - height/2 + } + + title: qsTr("Artemis") + visible: true + + modality: Qt.ApplicationModal + flags: Qt.Window + + // Windows without upper bar + //flags: Qt.FramelessWindowHint + + signal loadSignal(int signalId) + signal showPref() + signal showDBmanager() + signal showCatManager() + signal openSigEditor(string type, var sig_param, bool is_new) + signal showSpaceWeather() + signal checkDbUpdates() + signal startDownloader() + signal openDbDirectory() + signal newDb(string name) + signal exportDb(string path) + signal importDb(string path) + + property var loadedList + + function populateList(signalsList) { + loadedList = signalsList + textFieldSearch.enabled = true + var currentIndex = listView.currentIndex + refreshList() + // Set the currentIndex back after refreshing the list + if (currentIndex >= 0 && currentIndex < listModel.count) { + listView.currentIndex = currentIndex + } + } + + function refreshList() { + listModel.clear() + for (var i = 0; i < loadedList.length; i++) { + var name = loadedList[i].name.toLowerCase() + var search = textFieldSearch.text.toLowerCase() + if (name.includes(search)) { + listModel.append(loadedList[i]) + } + } + itemChangedList() + } + + function itemChangedList() { + var selected_sig = listModel.get(listView.currentIndex) + if (selected_sig !== undefined) { + loadSignal(listModel.get(listView.currentIndex).SIG_ID) + editSignalMenu.enabled = true + } else { + editSignalMenu.enabled = false + } + } + + function clearList() { + listModel.clear() + loadedList = [] + textFieldSearch.clear() + textFieldSearch.enabled = false + } + + function lockMenu(toggle) { + if (toggle) { + openFileMenu.enabled = false + exportFileMenu.enabled = false + newSignalMenu.enabled = false + editCategoryMenu.enabled = false + } else { + openFileMenu.enabled = true + exportFileMenu.enabled = true + newSignalMenu.enabled = true + editCategoryMenu.enabled = true + } + } + + function bottomInfoBar(message, messageType) { + bottomInfoLabel.text = message + switch (messageType) { + case "warning": + bottomInfoLabel.color = Material.color(Material.Red) + break + case "info": + bottomInfoLabel.color = Material.foreground + break + } + } + + function openGeneralDialog(messageType, title, message) { + dialogGeneral.messageType = messageType + dialogGeneral.title = title + dialogGeneral.message = message + dialogGeneral.open() + } + + function openDialogDownloadDb(messageType, title, message) { + dialogDownloadDb.messageType = messageType + dialogDownloadDb.title = title + dialogDownloadDb.message = message + dialogDownloadDb.open() + } + + function openDialogDownloadArtemis(messageType, title, message) { + dialogDownloadArtemis.messageType = messageType + dialogDownloadArtemis.title = title + dialogDownloadArtemis.message = message + dialogDownloadArtemis.open() + } + + DialogMessage { + id: dialogDownloadDb + modal: true + + standardButtons: Dialog.Cancel | Dialog.Yes + + onAccepted: { + startDownloader() + } + } + + DialogMessage { + id: dialogDownloadArtemis + modal: true + + standardButtons: Dialog.Cancel | Dialog.Yes + + onAccepted: { + Qt.openUrlExternally("https://github.com/AresValley/Artemis") + } + } + + DialogMessage { + id: dialogGeneral + modal: true + + standardButtons: Dialog.Ok + } + + Dialog { + id: dialogNewDb + + x: (parent.width - width) / 2 + y: (parent.height - height) / 2 + + modal: true + closePolicy: Popup.NoAutoClose + + standardButtons: Dialog.Ok | Dialog.Cancel + + ColumnLayout { + anchors.fill: parent + + TextField { + id: newDbName + Layout.fillWidth: true + placeholderText: qsTr("New DB Name") + } + + } + + onAccepted: { + newDb(newDbName.text) + } + } + + FileDialog { + id: exportDialog + title: "Please choose a save folder..." + fileMode: FileDialog.SaveFile + nameFilters: ["Archive (.tar)"] + + onAccepted: { + exportDb(selectedFile) + } + } + + FileDialog { + id: importDialog + title: "Please choose a valid tar.gz archive..." + fileMode: FileDialog.OpenFile + nameFilters: ["Archive (*.tar)"] + + onAccepted: { + importDb(selectedFile) + } + } + + About { + id: aboutDialog + } + + Page { + anchors.fill: parent + leftPadding: 5 + rightPadding: 5 + bottomPadding: 5 + + header: MenuBar { + id: topBar + + Menu { + title: qsTr("File") + + MenuItem { + text: "New Database..." + onClicked: {dialogNewDb.open()} + } + + MenuItem { + text: "Load Database..." + onClicked: {showDBmanager()} + } + + MenuSeparator {} + + MenuItem { + id: importFileMenu + text: "Import Database" + onClicked: {importDialog.open()} + } + + MenuItem { + id: exportFileMenu + text: "Export Database" + onClicked: {exportDialog.open()} + enabled: false + } + + MenuSeparator {} + + MenuItem { + id: editCategoryMenu + text: "Edit Tags" + onClicked: {showCatManager()} + enabled: false + } + + MenuSeparator {} + + MenuItem { + id: openFileMenu + text: "Open Database Folder" + onClicked: {openDbDirectory()} + enabled: false + } + + MenuItem { + text: "Preferences" + onClicked: {showPref()} + } + + MenuItem { + text: "Exit" + onClicked: {window.close()} + } + + } + + Menu { + id: signalMenu + title: qsTr("Signal") + + MenuItem { + id: newSignalMenu + enabled: false + text: "New.." + onClicked: {openSigEditor('Signal', [], true)} + } + + MenuItem { + id: editSignalMenu + enabled: false + text: "Edit..." + onClicked: {openSigEditor('Signal', [], false)} + } + } + + Menu { + title: qsTr("Space Weather") + + MenuItem { + text: "Check Report" + onClicked: { + showSpaceWeather() + } + } + } + + Menu { + id: aboutMenu + title: qsTr("Help") + + MenuItem { + text: "Check for Updates" + onClicked: {checkDbUpdates()} + } + + MenuSeparator {} + + MenuItem { + text: "Documentation" + onClicked: {Qt.openUrlExternally('https://AresValley.github.io/Artemis')} + } + + MenuItem { + text: "Show Release Notes" + onClicked: {Qt.openUrlExternally('https://github.com/AresValley/Artemis/blob/master/CHANGELOG.md')} + } + + MenuSeparator {} + + MenuItem { + text: "Report Issue" + onClicked: {Qt.openUrlExternally('https://github.com/AresValley/Artemis/issues')} + } + + MenuSeparator {} + + MenuItem { + text: "About" + onClicked: { + aboutDialog.open() + } + } + } + } + + footer: Label { + id: bottomInfoLabel + font.pixelSize: 12 + leftPadding: 5 + rightPadding: 5 + bottomPadding: 5 + } + + RowLayout { + anchors.fill: parent + spacing: 20 + + ColumnLayout { + Layout.maximumWidth: 250 + + TextField { + id: textFieldSearch + enabled: false + Layout.fillWidth: true + Layout.topMargin: 10 + placeholderText: qsTr("Search") + onTextChanged: { + refreshList() + } + } + + RowLayout { + + ListView { + id: listView + Layout.fillWidth: true + Layout.fillHeight: true + highlightMoveDuration: 0 + clip: true + focus: true + ScrollBar.vertical: bar + highlight: Rectangle { color: Material.accent; radius: 5 } + onCurrentIndexChanged: { itemChangedList() } + delegate: Item { + id: listDelegate + width: ListView.view.width + height: 20 + Label {text: name} + MouseArea { + anchors.fill: parent + onClicked: listView.currentIndex = index + } + } + model: ListModel { + id: listModel + } + } + + ScrollBar { + id: bar + Layout.fillHeight: true + active: true + } + } + } + + ColumnLayout { + Layout.alignment: Qt.AlignLeft | Qt.AlignTop + Layout.fillHeight: true + Layout.fillWidth: true + + TabBar { + id: tabBar + width: parent.width + Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter + Layout.fillWidth: true + + TabButton { + text: qsTr("Signal") + } + + TabButton { + text: qsTr("Filter") + } + } + + StackLayout { + currentIndex: tabBar.currentIndex + Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter + Layout.fillHeight: true + Layout.fillWidth: true + + Item { + SignalPage { + id: signalPage + } + } + + Item { + FilterPage { + id: filterPage + } + } + } + } + } + } +} diff --git a/ui/CategoryEditor.qml b/ui/CategoryEditor.qml new file mode 100644 index 0000000..0e3e321 --- /dev/null +++ b/ui/CategoryEditor.qml @@ -0,0 +1,214 @@ +import QtQuick +import QtQuick.Window +import QtQuick.Controls +import QtQuick.Controls.Material +import QtQuick.Layouts + + +Window { + id: windowCategoryEditor + title: 'Artemis - Category Manager' + + width: 450 + height: 400 + + Component.onCompleted: { + x = Screen.width/2 - width/2 + y = Screen.height/2 - height/2 + } + + modality: Qt.ApplicationModal + flags: Qt.Window + + signal saveParam(var data, bool isNew) + signal deleteParam(int clbId) + + function loadList(dict) { + clearAll() + for (var i = 0; i < dict.length; i++) { + myModel.append(dict[i]) + } + } + + function itemChanged() { + var selected_cat = myModel.get(listView.currentIndex) + if (selected_cat !== undefined) { + renameButton.enabled = true + deleteButton.enabled = true + } else { + renameButton.enabled = false + deleteButton.enabled = false + } + } + + function getModel() { + var modelList = [] + for (var i = 0; i < myModel.count; i++) { + modelList.push(myModel.get(i).value) + } + return modelList + } + + function clearAll() { + myModel.clear() + } + + DialogMessage { + id: dialogDeleteConfirmation + modal: true + title: "Are you sure?" + message: "You are about to delete the selected category tag. The process cannot be undone." + messageType: "warn" + standardButtons: Dialog.Cancel | Dialog.Yes + + onAccepted: { + deleteParam(myModel.get(listView.currentIndex).clb_id) + } + } + + Dialog { + id: dialogNewCat + + x: (parent.width - width) / 2 + y: (parent.height - height) / 2 + + modal: true + closePolicy: Popup.NoAutoClose + + standardButtons: Dialog.Ok | Dialog.Cancel + + ColumnLayout { + anchors.fill: parent + + TextField { + id: newCatName + Layout.fillWidth: true + placeholderText: qsTr("Tag") + } + } + + onAccepted: { + saveParam([newCatName.text], true) + } + } + + Dialog { + id: dialogRenameCat + + x: (parent.width - width) / 2 + y: (parent.height - height) / 2 + + modal: true + closePolicy: Popup.NoAutoClose + + standardButtons: Dialog.Ok | Dialog.Cancel + + ColumnLayout { + anchors.fill: parent + + TextField { + id: renameCatName + Layout.fillWidth: true + placeholderText: qsTr("Tag") + } + } + + onAccepted: { + saveParam( + [ + renameCatName.text, + myModel.get(listView.currentIndex).clb_id + ], + false + ) + } + } + + Page { + anchors.fill: parent + + ColumnLayout { + anchors.fill: parent + anchors.rightMargin: 10 + anchors.leftMargin: 10 + anchors.bottomMargin: 10 + anchors.topMargin: 10 + + RowLayout { + Layout.fillHeight: true + Layout.fillWidth: true + + ListView { + id: listView + Layout.fillWidth: true + Layout.fillHeight: true + highlightMoveDuration: 0 + highlight: Rectangle { color: Material.accent; radius: 5 } + onCurrentIndexChanged: { itemChanged() } + delegate: Item { + id: listDelegate + width: ListView.view.width + height: 20 + Label { text: value } + MouseArea { + anchors.fill: parent + onClicked: { + listView.currentIndex = index + } + } + } + model: ListModel { + id: myModel + } + } + } + + RowLayout { + Layout.fillWidth: true + + Button { + id: addButton + text: qsTr("Add") + onClicked: { + dialogNewCat.open() + } + icon.source: "qrc:/images/icons/add.svg" + display: AbstractButton.TextBesideIcon + Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter + } + + Item { + Layout.fillWidth: true + } + + Button { + id: renameButton + text: qsTr("Rename") + onClicked: { + dialogRenameCat.open() + } + icon.source: "qrc:/images/icons/rename.svg" + enabled: false + display: AbstractButton.TextBesideIcon + Layout.alignment: Qt.AlignRight | Qt.AlignVCenter + } + + Item { + Layout.fillWidth: true + } + + Button { + id: deleteButton + text: qsTr("Delete") + onClicked: { + dialogDeleteConfirmation.open() + } + icon.source: "qrc:/images/icons/delete.svg" + enabled: false + display: AbstractButton.TextBesideIcon + Layout.alignment: Qt.AlignRight | Qt.AlignVCenter + } + } + } + } +} diff --git a/ui/DbManager.qml b/ui/DbManager.qml new file mode 100644 index 0000000..3a118bc --- /dev/null +++ b/ui/DbManager.qml @@ -0,0 +1,293 @@ +import QtQuick +import QtQuick.Window +import QtQuick.Controls +import QtQuick.Controls.Material +import QtQuick.Layouts + +Window { + id: windowDBmanager + + width: 500 + height: 400 + + modality: Qt.ApplicationModal + flags: Qt.Dialog + + title: qsTr("Artemis - Load Database") + + signal loadDB (string dbName) + signal deleteDB (string dbName) + signal renameDB (string dbName, string newDbName) + + function loadList(dict) { + clearAll() + for (var i = 0; i < dict.length; i++) { + myModel.append(dict[i]) + } + itemChanged() + } + + function itemChanged() { + var selected_db = myModel.get(listView.currentIndex) + if (selected_db !== undefined) { + lockMenu(false) + titleLabel.text = myModel.get(listView.currentIndex).name + totDocsLabel.text = myModel.get(listView.currentIndex).documents_n + totSignalsLabel.text = myModel.get(listView.currentIndex).signals_n + totImagesLabel.text = myModel.get(listView.currentIndex).images_n + totAudioLabel.text = myModel.get(listView.currentIndex).audio_n + } else { + lockMenu(true) + } + } + + function getModel() { + var modelList = [] + for (var i = 0; i < myModel.count; i++) { + modelList.push(myModel.get(i).name) + } + return modelList + } + + function clearAll() { + titleLabel.text = 'N/A' + totDocsLabel.text = '' + totSignalsLabel.text = '' + totImagesLabel.text = '' + totAudioLabel.text = '' + myModel.clear() + } + + function loadDBButton() { + loadDB(myModel.get(listView.currentIndex).db_dir_name) + } + + + function renameDb() { + if (textDBName.readOnly) { + textDBName.focus = true + textDBName.readOnly = false + renameButton.highlighted = true + createDbButton.enabled = false + deleteDbButton.enabled = false + } + else { + renameDB(myModel.get(listView.currentIndex).db_dir_name, textDBName.text) + textDBName.focus = false + textDBName.readOnly = true + renameButton.highlighted = false + createDbButton.enabled = true + deleteDbButton.enabled = true + } + } + + function lockMenu(toggle) { + if (toggle) { + deleteButton.enabled = false + renameButton.enabled = false + loadButton.enabled = false + } else { + deleteButton.enabled = true + renameButton.enabled = true + loadButton.enabled = true + } + } + + DialogMessage { + id: dialogDeleteConfirmation + modal: true + title: "Are you sure?" + message: "You are about to delete the database and all its contents permanently. The process cannot be undone." + messageType: "warn" + + standardButtons: Dialog.Cancel | Dialog.Yes + + onAccepted: { + deleteDB(myModel.get(listView.currentIndex).db_dir_name) + } + } + + Dialog { + id: renameDb + + x: (parent.width - width) / 2 + y: (parent.height - height) / 2 + + modal: true + closePolicy: Popup.NoAutoClose + + standardButtons: Dialog.Ok | Dialog.Cancel + + ColumnLayout { + anchors.fill: parent + + TextField { + id: newDbName + Layout.fillWidth: true + placeholderText: qsTr("New DB Name") + } + + } + + onAccepted: { + renameDB(myModel.get(listView.currentIndex).db_dir_name, newDbName.text) + } + } + + Page { + anchors.fill: parent + + RowLayout { + anchors.fill: parent + anchors.rightMargin: 10 + anchors.leftMargin: 10 + anchors.bottomMargin: 10 + anchors.topMargin: 10 + + ListView { + id: listView + width: 150 + Layout.fillHeight: true + highlight: Rectangle { color: Material.accent; radius: 5 } + onCurrentIndexChanged: { itemChanged() } + delegate: Item { + id: listDelegate + width: ListView.view.width + height: 20 + Label { text: name } + MouseArea { + anchors.fill: parent + onClicked: { + listView.currentIndex = index + } + } + } + model: ListModel { + id: myModel + } + } + + ToolSeparator { + rightPadding: 10 + leftPadding: 10 + Layout.fillHeight: true + } + + ColumnLayout { + Layout.fillHeight: true + Layout.fillWidth: true + + Label { + id: titleLabel + Layout.bottomMargin: 20 + Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter + font.pointSize: 15 + font.bold: true + } + GridLayout { + columnSpacing: 25 + columns: 2 + + Label { + text: qsTr("Total Signals:") + font.pointSize: 12 + font.bold: true + } + + Label { + id: totSignalsLabel + text: qsTr("0") + font.pointSize: 12 + font.bold: true + } + + Label { + text: qsTr("Total Documents:") + font.pointSize: 12 + } + + Label { + id: totDocsLabel + text: qsTr("0") + font.pointSize: 12 + } + + Label { + text: qsTr("Images:") + Layout.leftMargin: 15 + font.pointSize: 12 + } + + Label { + id: totImagesLabel + text: qsTr("0") + font.pointSize: 12 + } + + Label { + text: qsTr("Audio:") + Layout.leftMargin: 15 + font.pointSize: 12 + } + + Label { + id: totAudioLabel + text: qsTr("0") + font.pointSize: 12 + } + } + + Item { + Layout.fillWidth: true + Layout.fillHeight: true + } + + RowLayout { + Button { + id: deleteButton + text: qsTr("Delete") + icon.source: "qrc:/images/icons/delete.svg" + display: AbstractButton.TextBesideIcon + enabled: false + Layout.alignment: Qt.AlignRight | Qt.AlignVCenter + onClicked: { + dialogDeleteConfirmation.open() + } + } + + Item { + Layout.fillWidth: true + } + + Button { + id: renameButton + text: qsTr("Rename") + icon.source: "qrc:/images/icons/rename.svg" + display: AbstractButton.TextBesideIcon + enabled: false + Layout.alignment: Qt.AlignRight | Qt.AlignVCenter + onClicked: { + renameDb.open() + } + } + + Item { + Layout.fillWidth: true + } + + Button { + id: loadButton + text: qsTr("Load") + icon.source: "qrc:/images/icons/load.svg" + display: AbstractButton.TextBesideIcon + enabled: false + Layout.alignment: Qt.AlignRight | Qt.AlignVCenter + onClicked: { + loadDBButton() + } + } + } + } + } + } +} diff --git a/ui/DialogMessage.qml b/ui/DialogMessage.qml new file mode 100644 index 0000000..bcf8feb --- /dev/null +++ b/ui/DialogMessage.qml @@ -0,0 +1,55 @@ +import QtQuick +import QtQuick.Layouts +import QtQuick.Controls +import QtQuick.Controls.Material +import QtQuick.Window + + +Dialog { + x: (parent.width - width) / 2 + y: (parent.height - height) / 2 + + modal: true + closePolicy: Popup.NoAutoClose + + property string message + property string messageType + + RowLayout { + Layout.fillWidth: true + spacing: 10 + + Image { + Layout.alignment: Qt.AlignLeft | Qt.AlignTop + sourceSize.height: 60 + sourceSize.width: 60 + + source: { + switch (messageType.toLowerCase()) { + case "question": + return "qrc:///images/icons/dialog_quest.svg" + case "warn": + return "qrc:///images/icons/dialog_warn.svg" + case "error": + return "qrc:///images/icons/dialog_error.svg" + case "info": + return "qrc:///images/icons/dialog_info.svg" + default: + return "qrc:///images/icons/dialog_info.svg" + } + } + } + + Label { + text: message + + Layout.alignment: Qt.AlignLeft | Qt.AlignVCenter + Layout.fillWidth: true + Layout.minimumWidth: 200 + Layout.maximumWidth: 300 + + textFormat: Text.RichText + wrapMode: Text.WordWrap + } + } +} diff --git a/ui/DocumentsManager.qml b/ui/DocumentsManager.qml new file mode 100644 index 0000000..c5bd4ae --- /dev/null +++ b/ui/DocumentsManager.qml @@ -0,0 +1,538 @@ +import QtQuick +import QtQuick.Window +import QtQuick.Controls +import QtQuick.Controls.Material +import QtQuick.Layouts +import QtQuick.Dialogs + +Window { + id: documentsManageranager + + width: 800 + height: 500 + + Component.onCompleted: { + x = Screen.width/2 - width/2 + y = Screen.height/2 - height/2 + } + + modality: Qt.ApplicationModal + flags: Qt.Window + + title: qsTr("Artemis - Documents Manager") + + signal saveNewDoc (variant docParamLst) + signal updateDoc (variant docParamLst) + signal deleteDoc (string docId, string extension, string type, bool preview) + signal openDoc (string docId, string extension) + + + function loadList(dict) { + clearAll() + for (var i = 0; i < dict.length; i++) { + myModel.append(dict[i]) + } + itemChanged() + } + + function getModel() { + var dictionaryList = [] + for (var i = 0; i < myModel.count; i++) { + var dictionary = [ + myModel.get(i).doc_id, + myModel.get(i).name, + myModel.get(i).description, + myModel.get(i).type, + myModel.get(i).preview, + myModel.get(i).extension + ] + dictionaryList.push(dictionary) + } + return dictionaryList + } + + function itemChanged() { + var selected_doc = myModel.get(listView.currentIndex) + if (selected_doc !== undefined) { + + var docId = selected_doc.doc_id + var extension = selected_doc.extension + var name = selected_doc.name + var description = selected_doc.description + var type = selected_doc.type + var preview = selected_doc.preview + + nameField.text = name + fileNameField.text = docId + '.' + extension + descriptionField.text = description + lockMenu(false) + + if (type === 'Image' || type === 'Audio') { + switchPreview.visible = true + if (preview === 1) { + switchPreview.checked = true + } else { + switchPreview.checked = false + } + } else { + switchPreview.visible = false + } + } else { + lockMenu(true) + } + } + + function contentChanged() { + if (listView.currentIndex !== -1) { + myModel.set( + listView.currentIndex, + { + 'name': nameField.text, + 'description': descriptionField.text, + } + ) + } + } + + function lockMenu(toggle) { + if (toggle) { + openButton.enabled = false + switchPreview.visible = false + deleteButton.enabled = false + editButton.enabled = false + } else { + openButton.enabled = true + deleteButton.enabled = true + editButton.enabled = true + } + } + + function clearAll() { + nameField.clear() + fileNameField.clear() + descriptionField.clear() + myModel.clear() + } + + function previewChanged(is_preview) { + var previewItem = myModel.get(listView.currentIndex) + if (previewItem.preview !== is_preview) { + if (is_preview) { + for (var i = 0; i < myModel.count; i++) { + if (myModel.get(i).type === previewItem.type) { + myModel.get(i).preview = 0 + } + } + previewItem.preview = 1 + } else { + previewItem.preview = 0 + } + updateDoc(getModel()) + itemChanged() + changeSavedDialog.open() + } + } + + function validateFields() { + if (newPathField.text === '' || newNameField.text === '') { + // message file or name not selected + return false + } else { + return true + } + } + + function setEditFileTypeComboBox(type) { + for (var idx = 0; idx < editFileTypeComboBox.count; idx ++) { + if (type === editFileTypeComboBox.valueAt(idx)) { + editFileTypeComboBox.currentIndex = idx + break + } + } + } + + function editCurrentDoc(name, description, type) { + var selected_doc = myModel.get(listView.currentIndex) + var doc_param = [ + selected_doc.doc_id, + name, + description, + type, + selected_doc.preview, + ] + updateDoc([doc_param]) + } + + FileDialog { + id: fileDialog + title: "Please choose a file" + nameFilters: [ + "Image (*.jpg *.png)", + "Audio (*.mp3 *.m4a *.ogg)", + "Document (*.txt *.pdf)", + "All files (*)" + ] + + onAccepted: { + newPathField.text = selectedFile + + if (selectedNameFilter.name === 'Image') { + newFileTypeComboBox.currentIndex = 0 + } else if (selectedNameFilter.name === 'Audio') { + newFileTypeComboBox.currentIndex = 1 + } else if (selectedNameFilter.name === 'Document') { + newFileTypeComboBox.currentIndex = 2 + } else { + newFileTypeComboBox.currentIndex = 3 + } + } + } + + Dialog { + id: dialogAddNew + height: 400 + width: 400 + x: (parent.width - width) / 2 + y: (parent.height - height) / 2 + + modal: true + closePolicy: Popup.NoAutoClose + + standardButtons: Dialog.Save | Dialog.Close + + ColumnLayout { + anchors.fill: parent + + RowLayout { + Layout.fillWidth: true + + TextField { + id: newPathField + Layout.fillWidth: true + placeholderText: qsTr("Path") + readOnly: true + } + + Button { + text: qsTr("Browse") + onClicked: { + fileDialog.open() + } + } + } + + RowLayout { + Layout.fillWidth: true + + ComboBox { + id: newFileTypeComboBox + model: ["Image", "Audio", "Document", "Other"] + } + + TextField { + id: newNameField + Layout.fillWidth: true + placeholderText: qsTr("Name") + } + } + + ScrollView { + Layout.fillHeight: true + Layout.fillWidth: true + ScrollBar.vertical.interactive: true + + TextArea { + id: newDescriptionField + placeholderText: qsTr("Description") + wrapMode: TextEdit.WordWrap + } + } + } + + onAccepted: { + if (validateFields()) { + saveNewDoc( + [ + newPathField.text, + newNameField.text, + newDescriptionField.text, + newFileTypeComboBox.currentText + ] + ) + } + } + } + + Dialog { + id: dialogEdit + height: 400 + width: 400 + x: (parent.width - width) / 2 + y: (parent.height - height) / 2 + + modal: true + closePolicy: Popup.NoAutoClose + + standardButtons: Dialog.Save | Dialog.Close + + ColumnLayout { + anchors.fill: parent + + RowLayout { + Layout.fillWidth: true + + ComboBox { + id: editFileTypeComboBox + model: ["Image", "Audio", "Document", "Other"] + } + + TextField { + id: editNameField + Layout.fillWidth: true + placeholderText: qsTr("Name") + } + } + + ScrollView { + Layout.fillHeight: true + Layout.fillWidth: true + ScrollBar.vertical.interactive: true + + TextArea { + id: editDescriptionField + placeholderText: qsTr("Description") + wrapMode: TextEdit.WordWrap + } + } + } + + onAccepted: { + editCurrentDoc( + editNameField.text, + editDescriptionField.text, + editFileTypeComboBox.currentText + ) + } + } + + DialogMessage { + id: dialogDeleteConfirmation + modal: true + title: "Are you sure?" + message: "You are about to delete the selected document. The process cannot be undone." + messageType: "warn" + + standardButtons: Dialog.Cancel | Dialog.Yes + + onAccepted: { + deleteDoc( + myModel.get(listView.currentIndex).doc_id, + myModel.get(listView.currentIndex).extension, + myModel.get(listView.currentIndex).type, + myModel.get(listView.currentIndex).preview + ) + } + } + + DialogMessage { + id: changeSavedDialog + title: 'Change Saved!' + message: 'Your changes have been successfully saved!' + standardButtons: Dialog.Ok + } + + Page { + anchors.fill: parent + + RowLayout { + anchors.fill: parent + anchors.rightMargin: 10 + anchors.leftMargin: 10 + anchors.bottomMargin: 10 + spacing: 0 + anchors.topMargin: 10 + + ColumnLayout { + Layout.minimumWidth: 150 + RowLayout { + Component { + id: sectionHeading + Rectangle { + width: ListView.view.width + height: 30 + color: "#00000000" + Label { + text: section + font.capitalization: Font.AllUppercase + font.bold: true + font.pixelSize: 16 + color: Material.accent + font.letterSpacing: 0.5 + anchors.verticalCenter: parent.verticalCenter + anchors.horizontalCenter: parent.horizontalCenter + } + } + } + + ListView { + id: listView + Layout.fillWidth: true + Layout.fillHeight: true + highlightMoveDuration: 0 + clip: true + focus: true + ScrollBar.vertical: bar + highlight: Rectangle { color: Material.accent; radius: 5 } + onCurrentIndexChanged: { itemChanged() } + delegate: Item { + id: listDelegate + width: ListView.view.width + height: 20 + Label { text: name } + MouseArea { + anchors.fill: parent + onClicked: { + listView.currentIndex = index + } + } + } + + model: ListModel { + id: myModel + } + + section.property: "type" + section.criteria: ViewSection.FullString + section.delegate: sectionHeading + } + ScrollBar { + id: bar + Layout.fillHeight: true + active: true + } + } + + Button { + id: addButton + text: qsTr("Add") + Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter + icon.source: "qrc:/images/icons/add.svg" + display: AbstractButton.TextBesideIcon + onClicked: { + dialogAddNew.open() + } + } + } + + ToolSeparator { + id: toolSeparator + rightPadding: 10 + leftPadding: 10 + Layout.fillHeight: true + } + + ColumnLayout { + Layout.preferredWidth: 300 + + Label { + text: qsTr("FILE DETAILS") + font.letterSpacing: 0.5 + color: Material.accent + font.pixelSize: 18 + Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter + } + + TextField { + id: nameField + Layout.fillWidth: true + placeholderText: qsTr("Name") + onTextChanged: { + contentChanged() + } + } + + TextField { + id: fileNameField + Layout.fillWidth: true + placeholderText: qsTr("File") + readOnly: true + } + + ScrollView { + Layout.fillWidth: true + Layout.fillHeight: true + ScrollBar.vertical.interactive: true + + TextArea { + id: descriptionField + wrapMode: TextEdit.WordWrap + font.pointSize: 10 + onTextChanged: { + contentChanged() + } + } + } + + RowLayout { + Button { + id: deleteButton + text: qsTr("Delete") + icon.source: "qrc:/images/icons/delete.svg" + display: AbstractButton.TextBesideIcon + Layout.alignment: Qt.AlignRight | Qt.AlignVCenter + onClicked: { + dialogDeleteConfirmation.open() + } + } + + Item { + Layout.fillWidth: true + } + + Switch { + id: switchPreview + text: qsTr("Main") + + onCheckedChanged: { + if (checked) { + previewChanged(1) + } else { + previewChanged(0) + } + } + } + + Button { + id: editButton + text: qsTr("Edit") + enabled: false + icon.source: "qrc:/images/icons/rename.svg" + display: AbstractButton.TextBesideIcon + Layout.alignment: Qt.AlignRight | Qt.AlignVCenter + onClicked: { + editNameField.text = myModel.get(listView.currentIndex).name + setEditFileTypeComboBox(myModel.get(listView.currentIndex).type) + editDescriptionField.text = myModel.get(listView.currentIndex).description + dialogEdit.open() + } + } + + Button { + id: openButton + text: qsTr("Open") + enabled: false + icon.source: "qrc:/images/icons/open.svg" + display: AbstractButton.TextBesideIcon + Layout.alignment: Qt.AlignRight | Qt.AlignVCenter + onClicked: { + openDoc( + myModel.get(listView.currentIndex).doc_id, + myModel.get(listView.currentIndex).extension + ) + } + } + } + } + } + } +} diff --git a/ui/Downloader.qml b/ui/Downloader.qml new file mode 100644 index 0000000..e629bf2 --- /dev/null +++ b/ui/Downloader.qml @@ -0,0 +1,60 @@ +import QtQuick +import QtQuick.Window +import QtQuick.Controls +import QtQuick.Controls.Material +import QtQuick.Layouts + +Window { + id: windowDownloader + + width: 400 + height: 130 + + maximumHeight: height + maximumWidth: width + + minimumHeight: height + minimumWidth: width + + modality: Qt.ApplicationModal + flags: Qt.Dialog + + title: qsTr("Artemis - Downloader") + + signal onAbort() + + Page { + id: page + anchors.fill: parent + + ColumnLayout { + id: columnLayout + anchors.fill: parent + + Label { + text: qsTr("Downloading in progress...") + Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter + } + + ProgressBar { + objectName: "progressBar" + Layout.rightMargin: 20 + Layout.leftMargin: 20 + Layout.fillWidth: true + value: 0 + } + + Label { + objectName: "labelProgress" + Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter + } + Button { + text: qsTr("Abort") + icon.source: "qrc:/images/icons/abort.svg" + display: AbstractButton.TextBesideIcon + Layout.alignment: Qt.AlignHCenter | Qt.AlignBottom + onClicked: { onAbort() } + } + } + } +} diff --git a/ui/FilterPage.qml b/ui/FilterPage.qml new file mode 100644 index 0000000..26ba036 --- /dev/null +++ b/ui/FilterPage.qml @@ -0,0 +1,632 @@ +import QtQuick +import QtQuick.Controls +import QtQuick.Controls.Material +import QtQuick.Layouts + + +Page { + id: filterPage + anchors.fill: parent + objectName: "filterPageObj" + + signal applyFilter(var filterDict) + signal sendBottomAlert(string message, string messagType) + + property var filterDict: {} + + function updateFilterDict() { + filterDict = {} + if (switchFreq.checked) { + var unitFreqValue = comboBoxFreq.currentValue.value + var lower_band = parseFloat(textFieldFreq.text) * unitFreqValue * (1 - tolFreq.value) + var upper_band = parseFloat(textFieldFreq.text) * unitFreqValue * (1 + tolFreq.value) + filterDict['frequency'] = { + 'lower_band': lower_band, + 'upper_band': upper_band + } + } + + if (switchBand.checked) { + var unitBandValue = comboBoxBand.currentValue.value + var lower_band = parseFloat(textFieldBand.text) * unitBandValue * (1 - tolBand.value) + var upper_band = parseFloat(textFieldBand.text) * unitBandValue * (1 + tolBand.value) + filterDict['bandwidth'] = { + 'lower_band': lower_band, + 'upper_band': upper_band + } + } + + if (switchACF.checked) { + var lower_band = parseFloat(textFieldACF.text) * (1 - tolACF.value) + var upper_band = parseFloat(textFieldACF.text) * (1 + tolACF.value) + filterDict['acf'] = { + 'lower_band': lower_band, + 'upper_band': upper_band + } + } + + if (switchModulation.checked) { + var modulationList = [] + for (var i = 0; i < modelModulation.count; i++) { + if (modelModulation.get(i).checked) { + modulationList.push( + modelModulation.get(i).value + ) + } + } + filterDict['modulation'] = modulationList + } + + if (switchLocation.checked) { + var locationList = [] + for (var i = 0; i < modelLocation.count; i++) { + if (modelLocation.get(i).checked) { + locationList.push( + modelLocation.get(i).value + ) + } + } + filterDict['location'] = locationList + } + + if (switchCategory.checked) { + var categoryList = [] + for (var i = 0; i < modelCategory.count; i++) { + if (modelCategory.get(i).checked) { + categoryList.push( + modelCategory.get(i).clb_id + ) + } + } + filterDict['category'] = categoryList + } + applyFilter(filterDict) + } + + function resetAll() { + switchFreq.checked = false + switchBand.checked = false + switchACF.checked = false + switchModulation.checked = false + switchLocation.checked = false + switchCategory.checked = false + lockFreq(true) + lockBand(true) + lockACF(true) + } + + function lockFreq(toggle) { + if(toggle) { + textFieldFreq.enabled = false + comboBoxFreq.enabled = false + tolFreq.enabled = false + summaryFreq.text = '' + } + else { + textFieldFreq.enabled = true + comboBoxFreq.enabled = true + tolFreq.enabled = true + if (textFieldFreq.text !== '') { + updateSummaryFreq() + updateFilterDict() + } + } + } + + function lockBand(toggle) { + if(toggle) { + textFieldBand.enabled = false + comboBoxBand.enabled = false + tolBand.enabled = false + summaryBand.text = '' + } + else { + textFieldBand.enabled = true + comboBoxBand.enabled = true + tolBand.enabled = true + if (textFieldBand.text !== '') { + updateSummaryBand() + updateFilterDict() + } + } + } + + function lockACF(toggle) { + if(toggle) { + textFieldACF.enabled = false + tolACF.enabled = false + summaryACF.text = '' + } + else { + textFieldACF.enabled = true + tolACF.enabled = true + if (textFieldACF.text !== '') { + updateSummaryACF() + updateFilterDict() + } + } + } + + function updateSummaryFreq() { + if (textFieldFreq.text !== "") { + var unitFreqText = comboBoxFreq.currentValue.text + var lowFreq = (parseFloat(textFieldFreq.text) * (1 - tolFreq.value)).toFixed(1) + var uppFreq = (parseFloat(textFieldFreq.text) * (1 + tolFreq.value)).toFixed(1) + + if (tolFreq.value === 0) { + summaryFreq.text = lowFreq + " " + unitFreqText + } + else { + summaryFreq.text = lowFreq + " " + unitFreqText + " - " + uppFreq + " " + unitFreqText + } + } + } + + function updateSummaryBand() { + if (textFieldBand.text !== "") { + var unitBandText = comboBoxBand.currentValue.text + var lowBand = (parseFloat(textFieldBand.text) * (1 - tolBand.value)).toFixed(1) + var uppBand = (parseFloat(textFieldBand.text) * (1 + tolBand.value)).toFixed(1) + + if (tolBand.value === 0) { + summaryBand.text = lowBand + " " + unitBandText + } + else { + summaryBand.text = lowBand + " " + unitBandText + " - " + uppBand + " " + unitBandText + } + } + } + + function updateSummaryACF() { + if (textFieldACF.text !== "") { + var lowBand = (parseFloat(textFieldACF.text) * (1 - tolACF.value)).toFixed(1) + var uppBand = (parseFloat(textFieldACF.text) * (1 + tolACF.value)).toFixed(1) + + if (tolACF.value === 0) { + summaryACF.text = lowBand + " ms" + } + else { + summaryACF.text = lowBand + " ms" + " - " + uppBand + " ms" + } + } + } + + function loadLists(filterList) { + modelModulation.clear() + var modulationDict = filterList[0].modulation + for (var i = 0; i < modulationDict.length; i++) { + modelModulation.append(modulationDict[i]) + } + + modelLocation.clear() + var locationDict = filterList[0].location + for (var i = 0; i < locationDict.length; i++) { + modelLocation.append(locationDict[i]) + } + + modelCategory.clear() + var categoryDict = filterList[0].category + for (var i = 0; i < categoryDict.length; i++) { + modelCategory.append(categoryDict[i]) + } + } + + ColumnLayout { + anchors.fill: parent + + GridLayout { + rows: 2 + columns: 3 + rowSpacing: 10 + columnSpacing: 10 + + GroupBox { + Layout.fillHeight: true + Layout.fillWidth: true + + ColumnLayout { + anchors.fill: parent + + RowLayout { + Label { + text: qsTr("Frequency") + Layout.fillWidth: true + font.bold: true + font.pointSize: 12 + font.capitalization: Font.SmallCaps + } + + Switch { + id: switchFreq + onToggled: { + if(switchFreq.checked) { + lockFreq(false) + } + else { + lockFreq(true) + updateFilterDict() + } + } + } + } + + RowLayout { + TextField { + id: textFieldFreq + Layout.fillWidth: true + placeholderText: qsTr("Frequency") + validator: DoubleValidator{bottom: 0} + enabled: false + onTextChanged: { + if(switchFreq.checked && textFieldFreq.text !== '') { + updateSummaryFreq() + updateFilterDict() + } + } + } + + ComboBox { + id: comboBoxFreq + enabled: false + textRole: 'text' + model: ListModel { + ListElement { text: "Hz"; value: 1 } + ListElement { text: "kHz"; value: 1e3 } + ListElement { text: "MHz"; value: 1e6 } + ListElement { text: "GHz"; value: 1e9 } + } + onActivated: { + if(switchFreq.checked && textFieldFreq.text !== '') { + updateSummaryFreq() + updateFilterDict() + } + } + } + } + + Slider { + id: tolFreq + Layout.fillWidth: true + enabled: false + value: 0 + onValueChanged: { + if(switchFreq.checked && textFieldFreq.text !== '') { + updateSummaryFreq() + updateFilterDict() + } + } + } + + Label { + id: summaryFreq + color: Material.color(Material.Green) + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + Layout.fillWidth: true + Layout.fillHeight: true + } + } + } + + GroupBox { + Layout.fillHeight: true + Layout.fillWidth: true + + ColumnLayout { + anchors.fill: parent + + RowLayout { + Label { + text: qsTr("Bandwidth") + Layout.fillWidth: true + font.bold: true + font.pointSize: 12 + font.capitalization: Font.SmallCaps + } + + Switch { + id: switchBand + onToggled: { + if(switchBand.checked) { + lockBand(false) + } + else { + lockBand(true) + updateFilterDict() + } + } + } + } + + RowLayout { + TextField { + id: textFieldBand + validator: DoubleValidator { + bottom: 0 + } + onTextChanged: { + if(switchBand.checked && textFieldBand.text !== '') { + updateSummaryBand() + updateFilterDict() + } + } + Layout.fillWidth: true + placeholderText: qsTr("Bandwidth") + enabled: false + } + + ComboBox { + id: comboBoxBand + enabled: false + textRole: 'text' + model: ListModel { + ListElement { text: "Hz"; value: 1 } + ListElement { text: "kHz"; value: 1e3 } + ListElement { text: "MHz"; value: 1e6 } + ListElement { text: "GHz"; value: 1e9 } + } + onActivated: { + if(switchBand.checked && textFieldBand.text !== '') { + updateSummaryBand() + updateFilterDict() + } + } + } + } + + Slider { + id: tolBand + Layout.fillWidth: true + enabled: false + value: 0 + onValueChanged: { + if(switchBand.checked && textFieldBand.text !== '') { + updateSummaryBand() + updateFilterDict() + } + } + } + Label { + id: summaryBand + color: Material.color(Material.Green) + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + Layout.fillWidth: true + Layout.fillHeight: true + } + } + } + + GroupBox { + Layout.fillHeight: true + Layout.fillWidth: true + + ColumnLayout { + anchors.fill: parent + + RowLayout { + Label { + text: qsTr("ACF") + Layout.fillWidth: true + font.bold: true + font.pointSize: 12 + font.capitalization: Font.SmallCaps + } + + Switch { + id: switchACF + onToggled: { + if(switchACF.checked) { + lockACF(false) + } else { + lockACF(true) + updateFilterDict() + } + } + } + } + + RowLayout { + TextField { + id: textFieldACF + validator: DoubleValidator { + bottom: 0 + } + onTextChanged: { + if(switchACF.checked && textFieldACF.text !== '') { + updateSummaryACF() + updateFilterDict() + } + } + Layout.fillWidth: true + placeholderText: qsTr("ACF") + enabled: false + } + + ComboBox { + enabled: false + model: ['ms'] + } + } + + Slider { + id: tolACF + Layout.fillWidth: true + enabled: false + value: 0 + onValueChanged: { + if(switchACF.checked && textFieldACF.text !== '') { + updateSummaryACF() + updateFilterDict() + } + } + } + Label { + id: summaryACF + color: Material.color(Material.Green) + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + Layout.fillWidth: true + Layout.fillHeight: true + } + } + } + + GroupBox { + Layout.fillHeight: true + Layout.fillWidth: true + + ColumnLayout { + anchors.fill: parent + + RowLayout { + Label { + text: qsTr("Modulation") + Layout.fillWidth: true + font.bold: true + font.pointSize: 12 + font.capitalization: Font.SmallCaps + } + Switch { + id: switchModulation + onToggled: { + updateFilterDict() + } + } + } + + ListView { + Layout.minimumHeight: 200 + Layout.fillWidth: true + Layout.fillHeight: true + highlightMoveDuration: 0 + clip: true + focus: true + ScrollBar.vertical: ScrollBar { + active: true + } + delegate: Item { + width: ListView.view.width + height: 30 + CheckBox { + enabled: switchModulation.checked + text: value + onCheckedChanged: { + modelModulation.setProperty(index, "checked", checked) + updateFilterDict() + } + } + } + model: ListModel { + id: modelModulation + } + } + } + } + + GroupBox { + Layout.fillHeight: true + Layout.fillWidth: true + + ColumnLayout { + anchors.fill: parent + + RowLayout { + Label { + text: qsTr("Location") + Layout.fillWidth: true + font.bold: true + font.pointSize: 12 + font.capitalization: Font.SmallCaps + } + Switch { + id: switchLocation + onToggled: { + updateFilterDict() + } + } + } + + ListView { + Layout.minimumHeight: 200 + Layout.fillHeight: true + Layout.fillWidth: true + highlightMoveDuration: 0 + clip: true + focus: true + ScrollBar.vertical: ScrollBar { + active: true + } + delegate: Item { + width: ListView.view.width + height: 30 + CheckBox { + enabled: switchLocation.checked + text: value + onCheckedChanged: { + modelLocation.setProperty(index, "checked", checked) + updateFilterDict() + } + } + } + model: ListModel { + id: modelLocation + } + } + } + } + + GroupBox { + Layout.fillHeight: true + Layout.fillWidth: true + + ColumnLayout { + anchors.fill: parent + + RowLayout { + Label { + text: qsTr("Category") + Layout.fillWidth: true + font.bold: true + font.pointSize: 12 + font.capitalization: Font.SmallCaps + } + Switch { + id: switchCategory + onToggled: { + updateFilterDict() + } + } + } + + ListView { + Layout.minimumHeight: 200 + Layout.fillHeight: true + Layout.fillWidth: true + highlightMoveDuration: 0 + clip: true + focus: true + ScrollBar.vertical: ScrollBar { + active: true + } + delegate: Item { + width: ListView.view.width + height: 30 + CheckBox { + enabled: switchCategory.checked + text: value + onCheckedChanged: { + modelCategory.setProperty(index, "checked", checked) + updateFilterDict() + } + } + } + model: ListModel { + id: modelCategory + } + } + } + } + } + } +} diff --git a/ui/Preferences.qml b/ui/Preferences.qml new file mode 100644 index 0000000..bbc4c85 --- /dev/null +++ b/ui/Preferences.qml @@ -0,0 +1,151 @@ +import QtQuick +import QtQuick.Window +import QtQuick.Controls +import QtQuick.Controls.Material +import QtQuick.Layouts + + +Window { + id: windowPreferences + + width: 450 + height: 400 + + Component.onCompleted: { + x = Screen.width/2 - width/2 + y = Screen.height/2 - height/2 + } + + modality: Qt.ApplicationModal + flags: Qt.Window + + title: qsTr("Artemis - Preferences") + + signal saveMaterialAccent(string arg) + signal saveMaterialTheme(string arg) + + function saveAll() { + saveMaterialAccent(comboBoxAccent.currentText) + saveMaterialTheme(comboBoxTheme.currentText) + } + + function loadMaterialAccent(accent) { + for (var idx = 0; idx < comboBoxAccent.count; idx ++) { + if (accent === comboBoxAccent.valueAt(idx)) { + comboBoxAccent.currentIndex = idx + break + } + } + } + + function loadMaterialTheme(theme) { + for (var idx = 0; idx < comboBoxTheme.count; idx ++) { + if (theme === comboBoxTheme.valueAt(idx)) { + comboBoxTheme.currentIndex = idx + break + } + } + } + + DialogMessage { + id: dialogPreferencesSaved + modal: true + + title: "Preferences saved!" + message: "User preferences has been saved succesfully! Artemis restart is require for changes to take effect." + + standardButtons: Dialog.Ok + + onAccepted: { + windowPreferences.close() + } + } + + + Pane { + anchors.fill: parent + + ColumnLayout { + anchors.fill: parent + anchors.rightMargin: 15 + anchors.leftMargin: 15 + anchors.bottomMargin: 15 + anchors.topMargin: 15 + + RowLayout { + Layout.fillWidth: true + + Label { + text: "Material Theme" + font.pixelSize: 12 + clip: true + Layout.fillWidth: true + } + + ComboBox { + id: comboBoxTheme + width: 137 + height: 48 + model: [ + "System", + "Light", + "Dark" + ] + } + } + + RowLayout { + Layout.fillWidth: true + + Label { + text: "Material Accent" + font.pixelSize: 12 + clip: true + Layout.fillWidth: true + } + + ComboBox { + id: comboBoxAccent + width: 137 + height: 48 + model: [ + "Red", + "Pink", + "Purple", + "DeepPurple", + "Indigo", + "Blue", + "LightBlue", + "Cyan", + "Teal", + "Green", + "LightGreen", + "Lime", + "Yellow", + "Amber", + "Orange", + "DeepOrange", + "Brown", + "Grey", + "BlueGrey" + ] + } + } + + Item { + Layout.fillHeight: true + } + + Button { + text: qsTr("Save") + icon.source: "qrc:/images/icons/save.svg" + display: AbstractButton.TextBesideIcon + Layout.alignment: Qt.AlignRight | Qt.AlignBottom + onClicked: { + saveAll() + dialogPreferencesSaved.open() + } + } + } + } +} diff --git a/ui/SignalEditor.qml b/ui/SignalEditor.qml new file mode 100644 index 0000000..aea3c63 --- /dev/null +++ b/ui/SignalEditor.qml @@ -0,0 +1,204 @@ +import QtQuick +import QtQuick.Window +import QtQuick.Controls +import QtQuick.Controls.Material +import QtQuick.Layouts + + +Window { + id: windowSignalEditor + + width: 500 + height: 400 + + Component.onCompleted: { + x = Screen.width/2 - width/2 + y = Screen.height/2 - height/2 + } + + modality: Qt.ApplicationModal + flags: Qt.Window + + signal saveParam(string type, var data, bool isNew) + signal deleteParam(string type, int ID) + + property string paramType + property int paramID + property bool isNew + + property var validator_freq: /^\d+(\.\d+)?$/ + property var validator_all: /.*/ + + + function load(type, sig_param, is_new) { + clearAll() + isNew = is_new + paramType = type + + paramValue.placeholderText = paramType + + if (isNew) { + paramID = 0 + windowSignalEditor.title = 'Artemis - New ' + paramType + } else { + paramID = sig_param[0] + windowSignalEditor.title = 'Artemis - Edit ' + paramType + if (paramType === 'Frequency' || paramType === 'Bandwidth') { + var freq = changeUnit(sig_param[1]) + paramValue.text = sig_param[1] / freq.scale + loadUnitComboBox(freq.unit) + } else { + paramValue.text = sig_param[1] + } + paramDescription.text = sig_param[2] + } + } + + function save() { + if (paramType === 'Frequency' || paramType === 'Bandwidth') { + var scaleFactor = unitComboBox.currentValue.value + var mainValue = paramValue.text * scaleFactor + } else { + var mainValue = paramValue.text + } + var param = [paramID, mainValue, paramDescription.text] + saveParam(paramType, param, isNew) + changeSavedDialog.open() + } + + function clearAll() { + paramValue.clear() + paramDescription.clear() + loadUnitComboBox('Hz') + } + + function changeUnit(frequency) { + var digits = frequency.toString().length + + if (digits < 4) + return { scale: 1, unit: "Hz" } + else if (digits < 7) + return { scale: Math.pow(10, 3), unit: "kHz" } + else if (digits < 10) + return { scale: Math.pow(10, 6), unit: "MHz" } + else + return { scale: Math.pow(10, 9), unit: "GHz" } + } + + function loadUnitComboBox(unit) { + for (var idx = 0; idx < unitComboBox.count; idx ++) { + if (unit === unitComboBox.valueAt(idx).text) { + unitComboBox.currentIndex = idx + break + } + } + } + + DialogMessage { + id: changeSavedDialog + title: 'Change Saved!' + message: 'Your changes have been successfully saved!' + standardButtons: Dialog.Ok + + onAccepted: { + windowSignalEditor.close() + } + } + + DialogMessage { + id: dialogDeleteConfirmation + modal: true + title: "Are you sure?" + message: "You are about to delete the selected " + paramType + ". The process cannot be undone." + messageType: "warn" + standardButtons: Dialog.Cancel | Dialog.Yes + + onAccepted: { + deleteParam(paramType, paramID) + windowSignalEditor.close() + } + } + + Page { + anchors.fill: parent + + ColumnLayout { + anchors.fill: parent + anchors.leftMargin: 10 + anchors.rightMargin: 10 + anchors.topMargin: 10 + anchors.bottomMargin: 10 + + RowLayout { + + TextField { + id: paramValue + visible: paramType !== 'Description' ? true : false + Layout.fillWidth: true + placeholderText: qsTr("Frequency") + validator: RegularExpressionValidator { + regularExpression: paramType === 'Frequency' || paramType === 'Bandwidth' ? validator_freq : validator_all + } + } + + ComboBox { + id: unitComboBox + visible: paramType === 'Frequency' || paramType === 'Bandwidth' ? true : false + textRole: 'text' + model: ListModel { + ListElement { text: 'Hz'; value: 1 } + ListElement { text: 'kHz'; value: 1e3 } + ListElement { text: 'MHz'; value: 1e6 } + ListElement { text: 'GHz'; value: 1e9 } + } + } + } + + ScrollView { + Layout.fillWidth: true + Layout.topMargin: 5 + Layout.fillHeight: true + ScrollBar.vertical.interactive: true + + TextArea { + id: paramDescription + placeholderText: qsTr("Description") + wrapMode: TextEdit.WordWrap + font.pointSize: 10 + } + } + + RowLayout { + Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter + Layout.fillWidth: true + + Button { + id: deleteButton + visible: isNew ? false : true + text: qsTr("Delete") + icon.source: "qrc:/images/icons/delete.svg" + display: AbstractButton.TextBesideIcon + Layout.alignment: Qt.AlignRight | Qt.AlignVCenter + onClicked: { + dialogDeleteConfirmation.open() + } + } + + Item { + Layout.fillWidth: true + } + + Button { + id: saveButton + text: qsTr("Save") + icon.source: "qrc:/images/icons/save.svg" + display: AbstractButton.TextBesideIcon + Layout.alignment: Qt.AlignRight | Qt.AlignVCenter + onClicked: { + save() + } + } + } + } + } +} diff --git a/ui/SignalPage.qml b/ui/SignalPage.qml new file mode 100644 index 0000000..0298ca5 --- /dev/null +++ b/ui/SignalPage.qml @@ -0,0 +1,644 @@ +import QtQuick +import QtQuick.Controls +import QtQuick.Controls.Material +import QtQuick.Layouts + +import './components' as UIComponents + + +Page { + id: signalPage + anchors.fill: parent + objectName: "signalPageObj" + + signal openDocManager() + signal openSigEditor(string type, var sig_param, bool is_new) + signal addCatTag(int clbId) + signal deleteCatTag(int catId) + + property string urlSigidwiki + property var frequencyList + property var bandwidthList + property var categoryList + property var allCategoryList + property var modulationList + property var modeList + property var acfList + property var locationList + + + function populateSignalParam(sig) { + var sig = sig[0] + signalName.text = sig.name + frequencyList = sig.frequency + bandwidthList = sig.bandwidth + + var freq_lo = sig.frequency[0] + var freq_up = sig.frequency.slice(-1)[0] + var band_lo = sig.bandwidth[0] + var band_up = sig.bandwidth.slice(-1)[0] + + freqValue.text = format_range(freq_lo, freq_up) + bandValue.text = format_range(band_lo, band_up) + + categoryList = sig.category + allCategoryList = sig.all_category + modeList = sig.mode + modulationList = sig.modulation + locationList = sig.location + acfList = sig.acf + + descriptionTextArea.text = sig.description + + if (freq_lo !== undefined) { + bandBar.setBandBar(freq_lo[1], freq_up[1]) + } + + if (sig.url !== undefined) { + urlButton.visible = true + urlSigidwiki = sig.url + } + else { + urlButton.visible = false + } + + image.source = sig.spectrum_path + + if (sig.audio_path !== '') { + loadPlayer(sig.audio_path) + } else { + lockPlayer() + } + + lockMenu(false) + } + + function format_range(lower_freq, upper_freq) { + try { + if (lower_freq[1] !== upper_freq[1]) { + return lower_freq[3] + ' - ' + upper_freq[3] + } else { + return lower_freq[3] + } + } catch (error) { + return 'UNKNOWN' + } + } + + function loadPlayer(audio_path) { + audioPlayer.resetPlayer() + audioPlayer.loadSound(audio_path) + } + + function lockPlayer() { + audioPlayer.resetPlayer() + } + + function resetAll() { + signalName.text = "" + freqValue.text = "-" + bandValue.text = "-" + frequencyList = [] + bandwidthList = [] + categoryList = [] + modeList = [] + modulationList = [] + locationList = [] + acfList = [] + descriptionTextArea.text = "" + bandBar.resetBandBar() + audioPlayer.resetPlayer() + image.source = "qrc:///images/spectrum_not_available.svg" + lockMenu(true) + } + + function lockMenu(toggle) { + if (toggle) { + urlButton.visible = false + docManagerButton.visible = false + freqButton.enabled = false + bandButton.enabled = false + modulationButton.enabled = false + modeButton.enabled = false + acfButton.enabled = false + locationButton.enabled = false + addTagButton.enabled = false + } else { + docManagerButton.visible = true + freqButton.enabled = true + bandButton.enabled = true + modulationButton.enabled = true + modeButton.enabled = true + acfButton.enabled = true + locationButton.enabled = true + addTagButton.enabled = true + } + } + + Dialog { + id: dialogAddCategory + + x: (parent.width - width) / 2 + y: (parent.height - height) / 2 + + modal: true + closePolicy: Popup.CloseOnPressOutside + + ColumnLayout { + anchors.fill: parent + + Repeater { + model: allCategoryList + delegate: Button { + text: modelData.value + Layout.fillWidth: true + Layout.preferredHeight: 25 + highlighted: true + bottomInset: 3 + topInset: 3 + flat: false + onClicked: { + addCatTag(modelData.clb_id) + dialogAddCategory.close() + } + } + } + } + } + + ColumnLayout { + anchors.fill: parent + + Label { + id: signalName + color: Material.accent + font.pixelSize: 25 + horizontalAlignment: Text.AlignHCenter + Layout.topMargin: 10 + Layout.fillHeight: false + Layout.alignment: Qt.AlignLeft | Qt.AlignTop + clip: true + Layout.fillWidth: true + } + + RowLayout { + Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter + Repeater { + model: categoryList + delegate: Button { + text: modelData[1] + Layout.preferredHeight: 25 + highlighted: true + bottomInset: 3 + topInset: 3 + flat: false + ToolTip { + visible: hovered + text: 'Click to remove' + } + onClicked: { + deleteCatTag(modelData[0]) + } + } + } + + Button { + id: addTagButton + enabled: false + Layout.preferredHeight: 25 + Layout.preferredWidth: 25 + bottomInset: 3 + topInset: 3 + text: '+' + onClicked: { + dialogAddCategory.open() + } + } + } + + RowLayout { + Layout.fillWidth: true + + + ColumnLayout { + Label { + color: Material.accent + text: qsTr("FREQUENCY RANGE") + font.pixelSize: 12 + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + } + + Label { + id: freqValue + color: Material.accent + text: qsTr("-") + font.pixelSize: 18 + font.bold: true + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + } + } + + Item { + Layout.fillWidth: true + } + + ColumnLayout { + Label { + color: Material.accent + text: qsTr("BANDWIDTH RANGE") + font.pixelSize: 12 + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + Layout.alignment: Qt.AlignRight | Qt.AlignVCenter + } + + Label { + id: bandValue + color: Material.accent + text: qsTr("-") + font.pixelSize: 18 + font.bold: true + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + Layout.alignment: Qt.AlignRight | Qt.AlignVCenter + } + } + } + + UIComponents.BandBar { + id: bandBar + Layout.fillWidth: true + } + + + RowLayout { + width: 100 + height: 100 + Layout.topMargin: 5 + spacing: 15 + + ColumnLayout { + width: 100 + height: 100 + + RowLayout { + Button { + id: freqButton + enabled: false + contentItem: Label { + text: "FREQUENCY" + horizontalAlignment : Text.AlignLeft + verticalAlignment: Text.AlignVCenter + font.pixelSize: 14 + font.bold: true + } + Layout.minimumWidth: 120 + height: 25 + flat: true + bottomInset: 0 + topInset: 0 + rightPadding: 10 + leftPadding: 10 + bottomPadding: 0 + topPadding: 0 + onClicked: { + openSigEditor('Frequency', [], true) + } + } + ListView { + height: 25 + Layout.fillWidth: true + spacing: 5 + orientation: ListView.Horizontal + clip: true + model: frequencyList + delegate: Button { + text: modelData[3] + height: 25 + bottomInset: 3 + topInset: 3 + flat: false + ToolTip { + visible: modelData[2] !== '' ? hovered : false + text: modelData[2] + } + onClicked: { + openSigEditor('Frequency', modelData, false) + } + } + } + } + + RowLayout { + Button { + id: bandButton + enabled: false + contentItem: Label { + text: "BANDWIDTH" + horizontalAlignment : Text.AlignLeft + verticalAlignment: Text.AlignVCenter + font.pixelSize: 14 + font.bold: true + } + Layout.minimumWidth: 120 + height: 25 + flat: true + bottomInset: 0 + topInset: 0 + rightPadding: 10 + leftPadding: 10 + bottomPadding: 0 + topPadding: 0 + onClicked: { + openSigEditor('Bandwidth', [], true) + } + } + ListView { + height: 25 + Layout.fillWidth: true + spacing: 5 + orientation: ListView.Horizontal + clip: true + model: bandwidthList + delegate: Button { + text: modelData[3] + height: 25 + bottomInset: 3 + topInset: 3 + flat: false + ToolTip { + visible: modelData[2] !== '' ? hovered : false + text: modelData[2] + } + onClicked: { + openSigEditor('Bandwidth', modelData, false) + } + } + } + } + + RowLayout { + Button { + id: modulationButton + enabled: false + contentItem: Label { + text: "MODULATION" + horizontalAlignment : Text.AlignLeft + verticalAlignment: Text.AlignVCenter + font.pixelSize: 14 + font.bold: true + } + Layout.minimumWidth: 120 + height: 25 + flat: true + bottomInset: 0 + topInset: 0 + rightPadding: 10 + leftPadding: 10 + bottomPadding: 0 + topPadding: 0 + onClicked: { + openSigEditor('Modulation', [], true) + } + } + ListView { + height: 25 + Layout.fillWidth: true + spacing: 5 + orientation: ListView.Horizontal + clip: true + model: modulationList + delegate: Button { + text: modelData[1] + height: 25 + bottomInset: 3 + topInset: 3 + flat: false + ToolTip { + visible: modelData[2] !== '' ? hovered : false + text: modelData[2] + } + onClicked: { + openSigEditor('Modulation', modelData, false) + } + } + } + } + + RowLayout { + Button { + id: modeButton + enabled: false + contentItem: Label { + text: "MODE" + horizontalAlignment : Text.AlignLeft + verticalAlignment: Text.AlignVCenter + font.pixelSize: 14 + font.bold: true + } + Layout.minimumWidth: 120 + height: 25 + flat: true + bottomInset: 0 + topInset: 0 + rightPadding: 10 + leftPadding: 10 + bottomPadding: 0 + topPadding: 0 + onClicked: { + openSigEditor('Mode', [], true) + } + } + ListView { + height: 25 + Layout.fillWidth: true + spacing: 5 + orientation: ListView.Horizontal + clip: true + model: modeList + delegate: Button { + text: modelData[1] + height: 25 + bottomInset: 3 + topInset: 3 + flat: false + ToolTip { + visible: modelData[2] !== '' ? hovered : false + text: modelData[2] + } + onClicked: { + openSigEditor('Mode', modelData, false) + } + } + } + } + + RowLayout { + Button { + id: acfButton + enabled: false + contentItem: Label { + text: "ACF" + horizontalAlignment : Text.AlignLeft + verticalAlignment: Text.AlignVCenter + font.pixelSize: 14 + font.bold: true + } + height: 25 + Layout.minimumWidth: 120 + flat: true + bottomInset: 0 + topInset: 0 + rightPadding: 10 + leftPadding: 10 + bottomPadding: 0 + topPadding: 0 + onClicked: { + openSigEditor('ACF', [], true) + } + } + ListView { + height: 25 + Layout.fillWidth: true + spacing: 5 + orientation: ListView.Horizontal + clip: true + model: acfList + delegate: Button { + text: modelData[1] + height: 25 + bottomInset: 3 + topInset: 3 + flat: false + ToolTip { + visible: modelData[2] !== '' ? hovered : false + text: modelData[2] + } + onClicked: { + openSigEditor('ACF', modelData, false) + } + } + } + } + + RowLayout { + Button { + id: locationButton + enabled: false + contentItem: Label { + text: "LOCATION" + horizontalAlignment : Text.AlignLeft + verticalAlignment: Text.AlignVCenter + font.pixelSize: 14 + font.bold: true + } + Layout.minimumWidth: 120 + height: 25 + flat: true + bottomInset: 0 + topInset: 0 + rightPadding: 10 + leftPadding: 10 + bottomPadding: 0 + topPadding: 0 + onClicked: { + openSigEditor('Location', [], true) + } + } + ListView { + height: 25 + Layout.fillWidth: true + spacing: 5 + orientation: ListView.Horizontal + clip: true + model: locationList + delegate: Button { + text: modelData[1] + height: 25 + bottomInset: 3 + topInset: 3 + flat: false + ToolTip { + visible: modelData[2] !== '' ? hovered : false + text: modelData[2] + } + onClicked: { + openSigEditor('Location', modelData, false) + } + } + } + } + + ScrollView { + Layout.fillWidth: true + Layout.topMargin: 5 + Layout.fillHeight: true + ScrollBar.vertical.interactive: true + + TextArea { + id: descriptionTextArea + wrapMode: TextEdit.WordWrap + textFormat: Text.MarkdownText + font.pointSize: 10 + readOnly: true + } + } + } + + ColumnLayout { + Layout.fillHeight: true + Layout.fillWidth: false + Layout.alignment: Qt.AlignLeft | Qt.AlignTop + + UIComponents.AudioPlayer { + id: audioPlayer + Layout.alignment: Qt.AlignHCenter | Qt.AlignTop + } + + Image { + id: image + source: "" + Layout.preferredHeight: 300 + Layout.preferredWidth: 180 + Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter + fillMode: Image.Stretch + } + + Item { + Layout.fillHeight: true + } + + RowLayout { + Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter + + RoundButton { + id: urlButton + icon.source: "qrc:/images/icons/browser.svg" + display: AbstractButton.IconOnly + visible: false + text: "U" + onClicked: { + Qt.openUrlExternally(urlSigidwiki) + } + } + + RoundButton { + id: docManagerButton + icon.source: "qrc:/images/icons/documents.svg" + display: AbstractButton.IconOnly + visible: false + text: "D" + onClicked: { + openDocManager() + } + } + } + } + } + + + + } +} diff --git a/ui/SpaceWeather.qml b/ui/SpaceWeather.qml new file mode 100644 index 0000000..592d557 --- /dev/null +++ b/ui/SpaceWeather.qml @@ -0,0 +1,74 @@ +import QtQuick +import QtQuick.Window +import QtQuick.Controls +import QtQuick.Controls.Material +import QtQuick.Layouts + +Window { + id: windowSpaceWeather + + width: 1000 + height: 700 + + Component.onCompleted: { + x = Screen.width/2 - width/2 + y = Screen.height/2 - height/2 + } + + modality: Qt.ApplicationModal + flags: Qt.Window + + title: qsTr("Artemis - Space Weather") + + function updateBottomBar(message) { + spaceBottomBar.text = message + } + + + Page { + anchors.fill: parent + + footer: Label { + id: spaceBottomBar + font.pixelSize: 12 + leftPadding: 5 + rightPadding: 5 + bottomPadding: 5 + } + + ColumnLayout { + anchors.fill: parent + + TabBar { + id: tabBar + width: parent.width + Layout.fillWidth: true + + TabButton { + text: qsTr("Current") + } + TabButton { + text: qsTr("Forecasts") + } + } + + StackLayout { + currentIndex: tabBar.currentIndex + Layout.fillHeight: true + Layout.fillWidth: true + + Item { + SpaceWeatherCurrentPage { + id: spaceWeatherCurrentPage + } + } + + Item { + SpaceWeatherForecastPage { + id: spaceWeatherForecastPage + } + } + } + } + } +} diff --git a/ui/SpaceWeatherCurrentPage.qml b/ui/SpaceWeatherCurrentPage.qml new file mode 100644 index 0000000..21794e7 --- /dev/null +++ b/ui/SpaceWeatherCurrentPage.qml @@ -0,0 +1,400 @@ +import QtQuick +import QtQuick.Window +import QtQuick.Controls +import QtQuick.Controls.Material +import QtQuick.Layouts + +import './components' as UIComponents + + +Page { + id: spaceWeatherCurrent + anchors.fill: parent + + objectName: "spaceWeatherCurrentObj" + + property string g_now_text + property string s_now_text + property string r_now_text + + function loadReport(poseidon_data) { + setLight(lightG_now, 'G', poseidon_data['GSR_SCALES']['G_now']) + setLight(lightS_now, 'S', poseidon_data['GSR_SCALES']['S_now']) + setLight(lightR_now, 'R', poseidon_data['GSR_SCALES']['R_now']) + + setLight(lightG_24h, 'G', poseidon_data['GSR_SCALES']['G_max24h']) + setLight(lightS_24h, 'S', poseidon_data['GSR_SCALES']['S_max24h']) + setLight(lightR_24h, 'R', poseidon_data['GSR_SCALES']['R_max24h']) + + g_now_text = poseidon_data['GSR_SCALES']['G_now_text'] + s_now_text = poseidon_data['GSR_SCALES']['S_now_text'] + r_now_text = poseidon_data['GSR_SCALES']['R_now_text'] + + kIndexLightPanel.setLights(poseidon_data['AK']['k_index_round']) + labelKIndex.text = 'Kp Index: ' + poseidon_data['AK']['k_index'] + + aIndexLightPanel.setLights(poseidon_data['AK']['a_index']) + labelAIndex.text = 'A Index: ' + poseidon_data['AK']['a_index'] + + labelMux.text = poseidon_data['PROPAGATION']['MUX'] + labelEME.text = poseidon_data['PROPAGATION']['EME'] + labelMS.text = poseidon_data['PROPAGATION']['MS'] + labelHfNoise.text = poseidon_data['AK']['exp_noise'] + + labelPeakFluxClass.text = poseidon_data['XRAY']['peak_flux_class'] + labelPeakFluxClass3h.text = poseidon_data['XRAY']['peak_flux_class_3h'] + labelPeakFluxClass24h.text = poseidon_data['XRAY']['peak_flux_class_24h'] + } + + function setLight(lightId, type, level) { + lightId.text = type + level + + if (level === 0) { + + } else if (level === 1) { + lightId.Material.background = Material.Green + } else if (level === 2) { + lightId.Material.background = Material.Amber + } else if (level === 3) { + lightId.Material.background = Material.Orange + } else if (level === 4) { + lightId.Material.background = Material.DeepOrange + } else if (level === 5) { + lightId.Material.background = Material.Red + } + } + + DialogMessage { + id: gsrDialog + standardButtons: Dialog.Ok + } + + + Page { + anchors.fill: parent + + RowLayout { + anchors.fill: parent + anchors.rightMargin: 20 + anchors.leftMargin: 20 + anchors.bottomMargin: 20 + anchors.topMargin: 20 + + ColumnLayout { + Layout.fillHeight: true + Label { + id: labelKIndex + text: qsTr("Kp Index:") + font.pointSize: 11 + font.capitalization: Font.SmallCaps + Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter + } + UIComponents.KIndexLight { + id: kIndexLightPanel + width: 250 + Layout.fillHeight: true + Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter + + } + } + + ColumnLayout { + Layout.fillWidth: true + Layout.fillHeight: true + + ColumnLayout { + + Label { + text: qsTr("NOAA SPACE WEATHER SCALE") + font.letterSpacing: 0.5 + Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter + } + + Frame { + clip: true + Layout.fillWidth: true + + GridLayout { + anchors.fill: parent + rows: 5 + columns: 3 + + Label { + width: parent.width /3 + text: qsTr("Geomagnetic Storm") + font.capitalization: Font.SmallCaps + Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter + } + + Label { + text: qsTr("Solar Radiation Storms") + Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter + font.capitalization: Font.SmallCaps + } + + Label { + text: qsTr("Radio Blackout") + Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter + font.capitalization: Font.SmallCaps + } + + Item { + } + + Label { + text: qsTr("Current") + Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter + font.pointSize: 8 + } + + Item { + } + + Button { + id: lightG_now + text: qsTr("G") + font.pixelSize: 15 + Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter + font.bold: true + display: AbstractButton.TextOnly + ToolTip.visible: hovered + ToolTip.text: qsTr("Click for details") + onClicked: { + gsrDialog.title = "Geomagnetic Storms" + gsrDialog.message = g_now_text + gsrDialog.open() + } + } + + Button { + id: lightS_now + text: qsTr("S") + font.pixelSize: 15 + display: AbstractButton.TextOnly + onClicked: { + gsrDialog.title = "Solar Radiation Storms" + gsrDialog.message = s_now_text + gsrDialog.open() + } + Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter + font.bold: true + ToolTip.visible: hovered + ToolTip.text: qsTr("Click for details") + } + + Button { + id: lightR_now + text: qsTr("R") + font.pixelSize: 15 + display: AbstractButton.TextOnly + onClicked: { + gsrDialog.title = "Radio Blackout" + gsrDialog.message = r_now_text + gsrDialog.open() + } + Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter + font.bold: true + ToolTip.visible: hovered + ToolTip.text: qsTr("Click for details") + } + + Item { + } + + Label { + text: qsTr("24h Maximums") + Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter + font.pointSize: 8 + } + + Item { + } + + Button { + id: lightG_24h + text: qsTr("G") + font.pixelSize: 15 + display: AbstractButton.TextOnly + Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter + font.bold: true + } + + Button { + id: lightS_24h + text: qsTr("S") + font.pixelSize: 15 + display: AbstractButton.TextOnly + Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter + font.bold: true + } + + Button { + id: lightR_24h + text: qsTr("R") + font.pixelSize: 15 + display: AbstractButton.TextOnly + Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter + font.bold: true + } + } + } + } + + ColumnLayout { + Layout.alignment: Qt.AlignHCenter | Qt.AlignTop + + Label { + text: qsTr("X-RAY SOLAR ACTIVITY") + font.letterSpacing: 0.5 + Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter + } + + Frame { + clip: true + Layout.fillWidth: true + + GridLayout { + anchors.fill: parent + columnSpacing: 15 + columns: 2 + rows: 2 + + Label { + text: qsTr("Current Flux Class:") + font.capitalization: Font.SmallCaps + } + + Label { + id: labelPeakFluxClass + Layout.alignment: Qt.AlignRight | Qt.AlignVCenter + font.capitalization: Font.SmallCaps + font.bold: true + font.pointSize: 12 + } + + Label { + text: qsTr("Peak 3h Flux Class:") + font.capitalization: Font.SmallCaps + } + + Label { + id: labelPeakFluxClass3h + Layout.alignment: Qt.AlignRight | Qt.AlignVCenter + font.capitalization: Font.SmallCaps + font.bold: true + font.pointSize: 12 + } + + Label { + text: qsTr("Peak 24h Flux Class:") + font.capitalization: Font.SmallCaps + } + + Label { + id: labelPeakFluxClass24h + Layout.alignment: Qt.AlignRight | Qt.AlignVCenter + font.capitalization: Font.SmallCaps + font.bold: true + font.pointSize: 12 + } + } + } + } + + ColumnLayout { + Layout.alignment: Qt.AlignHCenter | Qt.AlignTop + + Label { + text: qsTr("RF PROPAGATION") + font.letterSpacing: 0.5 + Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter + } + + Frame { + clip: true + Layout.fillWidth: true + + GridLayout { + anchors.fill: parent + columnSpacing: 15 + rows: 2 + columns: 2 + + Label { + text: qsTr("MUX (MHz):") + } + + Label { + id: labelMux + Layout.alignment: Qt.AlignRight | Qt.AlignVCenter + font.capitalization: Font.SmallCaps + font.bold: true + font.pointSize: 12 + } + + Label { + text: qsTr("Earth-Moon-Earth:") + font.capitalization: Font.SmallCaps + } + + Label { + id: labelEME + Layout.alignment: Qt.AlignRight | Qt.AlignVCenter + font.pointSize: 12 + font.bold: true + font.capitalization: Font.SmallCaps + } + + Label { + text: qsTr("Meteor Scatter:") + font.capitalization: Font.SmallCaps + } + + Label { + id: labelMS + Layout.alignment: Qt.AlignRight | Qt.AlignVCenter + font.pointSize: 12 + font.capitalization: Font.SmallCaps + font.bold: true + } + + Label { + text: qsTr("Expected HF Noise:") + font.capitalization: Font.SmallCaps + } + + Label { + id: labelHfNoise + Layout.alignment: Qt.AlignRight | Qt.AlignVCenter + font.pointSize: 12 + font.capitalization: Font.SmallCaps + font.bold: true + } + } + } + } + + Item { + Layout.fillHeight: true + Layout.fillWidth: true + } + } + + ColumnLayout { + Label { + id: labelAIndex + text: qsTr("A Index:") + font.pointSize: 11 + font.capitalization: Font.SmallCaps + Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter + } + UIComponents.AIndexLight { + id: aIndexLightPanel + width: 250 + Layout.fillHeight: true + Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter + } + } + } + } +} diff --git a/ui/SpaceWeatherForecastPage.qml b/ui/SpaceWeatherForecastPage.qml new file mode 100644 index 0000000..4c27e76 --- /dev/null +++ b/ui/SpaceWeatherForecastPage.qml @@ -0,0 +1,758 @@ +import QtQuick +import QtQuick.Window +import QtQuick.Controls +import QtQuick.Controls.Material +import QtQuick.Layouts + +Page { + id: spaceWeatherCurrent + anchors.fill: parent + + objectName: "spaceWeatherForecastObj" + + function loadForecastReport(poseidon_data) { + if (poseidon_data['FORCST']['SUMMARY']['G_REPORT'][0] === 1) { + imageAttentionGReport.source = "qrc:/images/icons/dialog_warn.svg" + } else { + imageAttentionGReport.source = "qrc:/images/icons/dialog_info.svg" + } + labelGReport.text = poseidon_data['FORCST']['SUMMARY']['G_REPORT'][1] + + if (poseidon_data['FORCST']['SUMMARY']['S_REPORT'][0] === 1) { + imageAttentionSReport.source = "qrc:/images/icons/dialog_warn.svg" + } else { + imageAttentionSReport.source = "qrc:/images/icons/dialog_info.svg" + } + labelSReport.text = poseidon_data['FORCST']['SUMMARY']['S_REPORT'][1] + + if (poseidon_data['FORCST']['SUMMARY']['R_REPORT'][0] === 1) { + imageAttentionRReport.source = "qrc:/images/icons/dialog_warn.svg" + } else { + imageAttentionRReport.source = "qrc:/images/icons/dialog_info.svg" + } + labelRReport.text = poseidon_data['FORCST']['SUMMARY']['R_REPORT'][1] + + labelDay1kp.text = poseidon_data['FORCST']['SUMMARY']['PRE_DATES'][0] + labelDay2kp.text = poseidon_data['FORCST']['SUMMARY']['PRE_DATES'][1] + labelDay3kp.text = poseidon_data['FORCST']['SUMMARY']['PRE_DATES'][2] + + var timeRanges = ['00-03UT', '03-06UT', '06-09UT', '09-12UT', '12-15UT', '15-18UT', '18-21UT', '21-00UT'] + + for (var i = 0; i < timeRanges.length; i++) { + var timeRange = timeRanges[i] + for (var j = 0; j < 3; j++) { + var index = j.toString() + var labelName = 'labelKp' + (i).toString() + (j+1).toString() + var labelText = poseidon_data['FORCST']['SUMMARY']['kp'][timeRange][j]['textual'] + var colorText = poseidon_data['FORCST']['SUMMARY']['kp'][timeRange][j]['color'] + + eval(labelName + '.text = labelText') + if (colorText !== '') { + eval(labelName + '.color = colorText') + } + } + } + + + labelDay1Event.text = poseidon_data['FORCST']['PRE_DATES'][0] + labelDay2Event.text = poseidon_data['FORCST']['PRE_DATES'][1] + labelDay3Event.text = poseidon_data['FORCST']['PRE_DATES'][2] + + labelEventS10.text = poseidon_data['FORCST']['SUMMARY']['S_PROB']['probS1'][0] + ' %' + labelEventS11.text = poseidon_data['FORCST']['SUMMARY']['S_PROB']['probS1'][1] + ' %' + labelEventS12.text = poseidon_data['FORCST']['SUMMARY']['S_PROB']['probS1'][2] + ' %' + + labelEventMFlare0.text = poseidon_data['FORCST']['CLASS_M'][0] + ' %' + labelEventMFlare1.text = poseidon_data['FORCST']['CLASS_M'][1] + ' %' + labelEventMFlare2.text = poseidon_data['FORCST']['CLASS_M'][2] + ' %' + + labelEventXFlare0.text = poseidon_data['FORCST']['CLASS_X'][0] + ' %' + labelEventXFlare1.text = poseidon_data['FORCST']['CLASS_X'][1] + ' %' + labelEventXFlare2.text = poseidon_data['FORCST']['CLASS_X'][2] + ' %' + + labelEventPFlare0.text = poseidon_data['FORCST']['CLASS_PROTON'][0] + ' %' + labelEventPFlare1.text = poseidon_data['FORCST']['CLASS_PROTON'][1] + ' %' + labelEventPFlare2.text = poseidon_data['FORCST']['CLASS_PROTON'][2] + ' %' + + labelEventR1R20.text = poseidon_data['FORCST']['SUMMARY']['R_PROB']['probR1'][0] + ' %' + labelEventR1R21.text = poseidon_data['FORCST']['SUMMARY']['R_PROB']['probR1'][1] + ' %' + labelEventR1R22.text = poseidon_data['FORCST']['SUMMARY']['R_PROB']['probR1'][2] + ' %' + + labelEventR30.text = poseidon_data['FORCST']['SUMMARY']['R_PROB']['probR3'][0] + ' %' + labelEventR31.text = poseidon_data['FORCST']['SUMMARY']['R_PROB']['probR3'][1] + ' %' + labelEventR32.text = poseidon_data['FORCST']['SUMMARY']['R_PROB']['probR3'][2] + ' %' + + var geoActiveM0 = poseidon_data['FORCST']['GEO_MID_ACTIVE'][0] + ' %' + var geoActiveM1 = poseidon_data['FORCST']['GEO_MID_ACTIVE'][1] + ' %' + var geoActiveM2 = poseidon_data['FORCST']['GEO_MID_ACTIVE'][2] + ' %' + + var geoActiveH0 = poseidon_data['FORCST']['GEO_HIG_ACTIVE'][0] + ' %' + var geoActiveH1 = poseidon_data['FORCST']['GEO_HIG_ACTIVE'][1] + ' %' + var geoActiveH2 = poseidon_data['FORCST']['GEO_HIG_ACTIVE'][2] + ' %' + + var geoMinorM0 = poseidon_data['FORCST']['GEO_MID_MINOR'][0] + ' %' + var geoMinorM1 = poseidon_data['FORCST']['GEO_MID_MINOR'][1] + ' %' + var geoMinorM2 = poseidon_data['FORCST']['GEO_MID_MINOR'][2] + ' %' + + var geoMinorH0 = poseidon_data['FORCST']['GEO_HIG_MINOR'][0] + ' %' + var geoMinorH1 = poseidon_data['FORCST']['GEO_HIG_MINOR'][1] + ' %' + var geoMinorH2 = poseidon_data['FORCST']['GEO_HIG_MINOR'][2] + ' %' + + var geoMajorM0 = poseidon_data['FORCST']['GEO_MID_MAJOR'][0] + ' %' + var geoMajorM1 = poseidon_data['FORCST']['GEO_MID_MAJOR'][1] + ' %' + var geoMajorM2 = poseidon_data['FORCST']['GEO_MID_MAJOR'][2] + ' %' + + var geoMajorH0 = poseidon_data['FORCST']['GEO_HIG_MAJOR'][0] + ' %' + var geoMajorH1 = poseidon_data['FORCST']['GEO_HIG_MAJOR'][1] + ' %' + var geoMajorH2 = poseidon_data['FORCST']['GEO_HIG_MAJOR'][2] + ' %' + + labelEventActive0.text = geoActiveM0 + ' / ' + geoActiveH0 + labelEventActive1.text = geoActiveM1 + ' / ' + geoActiveH1 + labelEventActive2.text = geoActiveM2 + ' / ' + geoActiveH2 + + labelEventMinor0.text = geoMinorM0 + ' / ' + geoMinorH0 + labelEventMinor1.text = geoMinorM1 + ' / ' + geoMinorH1 + labelEventMinor2.text = geoMinorM2 + ' / ' + geoMinorH2 + + labelEventMajor0.text = geoMajorM0 + ' / ' + geoMajorH0 + labelEventMajor1.text = geoMajorM1 + ' / ' + geoMajorH1 + labelEventMajor2.text = geoMajorM2 + ' / ' + geoMajorH2 + } + + + ColumnLayout { + anchors.fill: parent + anchors.rightMargin: 20 + anchors.leftMargin: 20 + anchors.bottomMargin: 20 + anchors.topMargin: 20 + + ColumnLayout { + Layout.fillHeight: true + Layout.fillWidth: true + + Label { + text: qsTr("FORECAST SUMMARY") + font.capitalization: Font.SmallCaps + Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter + } + + Frame { + Layout.fillWidth: true + + ColumnLayout { + anchors.fill: parent + spacing: 15 + + RowLayout { + spacing: 20 + + Image { + id: imageAttentionGReport + sourceSize.height: 40 + sourceSize.width: 40 + fillMode: Image.PreserveAspectFit + } + + ColumnLayout { + Layout.fillHeight: true + Layout.fillWidth: true + + Label { + font.capitalization: Font.SmallCaps + text: qsTr("Geomagnetic Activity") + font.pointSize: 11 + Layout.fillWidth: true + } + + Label { + id: labelGReport + wrapMode: Label.WordWrap + Layout.fillWidth: true + } + } + } + + RowLayout { + spacing: 20 + + Image { + id: imageAttentionSReport + fillMode: Image.PreserveAspectFit + sourceSize.height: 40 + sourceSize.width: 40 + } + + ColumnLayout { + Layout.fillHeight: true + Label { + text: qsTr("Solar Radiation Storms") + font.pointSize: 11 + font.capitalization: Font.SmallCaps + Layout.fillWidth: true + } + + Label { + id: labelSReport + wrapMode: Label.WordWrap + Layout.fillWidth: true + } + Layout.fillWidth: true + } + } + + RowLayout { + spacing: 20 + + Image { + id: imageAttentionRReport + fillMode: Image.PreserveAspectFit + sourceSize.height: 40 + sourceSize.width: 40 + } + + ColumnLayout { + Layout.fillHeight: true + + Label { + text: qsTr("Radio Blackouts") + font.pointSize: 11 + font.capitalization: Font.SmallCaps + Layout.fillWidth: true + } + + Label { + id: labelRReport + wrapMode: Label.WordWrap + Layout.fillWidth: true + } + + Layout.fillWidth: true + } + } + } + } + } + + RowLayout { + Layout.fillHeight: true + Layout.fillWidth: true + + ColumnLayout { + Layout.fillHeight: true + Layout.fillWidth: true + + Label { + text: qsTr("3-DAY Kp INDEX") + font.capitalization: Font.SmallCaps + Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter + } + + Frame { + clip: true + Layout.fillHeight: true + + GridLayout { + anchors.fill: parent + columnSpacing: 15 + rows: 9 + columns: 4 + + Label { + text: qsTr("Time (UTC)") + } + + Label { + id: labelDay1kp + text: qsTr("Day 1") + Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter + } + + Label { + id: labelDay2kp + text: qsTr("Day 2") + Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter + } + + Label { + id: labelDay3kp + text: qsTr("Day 3") + Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter + } + + Label { + text: qsTr("00-03") + } + + Label { + id: labelKp01 + Layout.leftMargin: labelDay1kp.width * 0.3 + font.pointSize: 12 + font.bold: true + } + + Label { + id: labelKp02 + Layout.leftMargin: labelDay1kp.width * 0.3 + font.pointSize: 12 + font.bold: true + } + + Label { + id: labelKp03 + Layout.leftMargin: labelDay1kp.width * 0.3 + font.pointSize: 12 + font.bold: true + } + + Label { + text: qsTr("03-06") + } + + Label { + id: labelKp11 + Layout.leftMargin: labelDay1kp.width * 0.3 + font.pointSize: 12 + font.bold: true + } + + Label { + id: labelKp12 + Layout.leftMargin: labelDay1kp.width * 0.3 + font.pointSize: 12 + font.bold: true + } + + Label { + id: labelKp13 + Layout.leftMargin: labelDay1kp.width * 0.3 + font.pointSize: 12 + font.bold: true + } + + Label { + text: qsTr("06-09") + } + + Label { + id: labelKp21 + Layout.leftMargin: labelDay1kp.width * 0.3 + font.pointSize: 12 + font.bold: true + } + + Label { + id: labelKp22 + Layout.leftMargin: labelDay1kp.width * 0.3 + font.pointSize: 12 + font.bold: true + } + + Label { + id: labelKp23 + Layout.leftMargin: labelDay1kp.width * 0.3 + font.pointSize: 12 + font.bold: true + } + + Label { + text: qsTr("09-12") + } + + Label { + id: labelKp31 + Layout.leftMargin: labelDay1kp.width * 0.3 + font.pointSize: 12 + font.bold: true + } + + Label { + id: labelKp32 + Layout.leftMargin: labelDay1kp.width * 0.3 + font.pointSize: 12 + font.bold: true + } + + Label { + id: labelKp33 + Layout.leftMargin: labelDay1kp.width * 0.3 + font.pointSize: 12 + font.bold: true + } + + Label { + text: qsTr("12-15") + } + + Label { + id: labelKp41 + Layout.leftMargin: labelDay1kp.width * 0.3 + font.pointSize: 12 + font.bold: true + } + + Label { + id: labelKp42 + Layout.leftMargin: labelDay1kp.width * 0.3 + font.pointSize: 12 + font.bold: true + } + + Label { + id: labelKp43 + Layout.leftMargin: labelDay1kp.width * 0.3 + font.pointSize: 12 + font.bold: true + } + + Label { + text: qsTr("15-18") + } + + Label { + id: labelKp51 + Layout.leftMargin: labelDay1kp.width * 0.3 + font.pointSize: 12 + font.bold: true + } + + Label { + id: labelKp52 + Layout.leftMargin: labelDay1kp.width * 0.3 + font.pointSize: 12 + font.bold: true + } + + Label { + id: labelKp53 + Layout.leftMargin: labelDay1kp.width * 0.3 + font.pointSize: 12 + font.bold: true + } + + Label { + text: qsTr("18-21") + } + + Label { + id: labelKp61 + Layout.leftMargin: labelDay1kp.width * 0.3 + font.pointSize: 12 + font.bold: true + } + + Label { + id: labelKp62 + Layout.leftMargin: labelDay1kp.width * 0.3 + font.pointSize: 12 + font.bold: true + } + + Label { + id: labelKp63 + Layout.leftMargin: labelDay1kp.width * 0.3 + font.pointSize: 12 + font.bold: true + } + + Label { + text: qsTr("21-00") + } + + Label { + id: labelKp71 + Layout.leftMargin: labelDay1kp.width * 0.3 + font.pointSize: 12 + font.bold: true + } + + Label { + id: labelKp72 + Layout.leftMargin: labelDay1kp.width * 0.3 + font.pointSize: 12 + font.bold: true + } + + Label { + id: labelKp73 + Layout.leftMargin: labelDay1kp.width * 0.3 + font.pointSize: 12 + font.bold: true + } + } + } + } + + ColumnLayout { + Label { + text: qsTr("EVENTS PROBABILITY") + font.capitalization: Font.SmallCaps + Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter + } + + Frame { + Layout.fillWidth: true + GridLayout { + anchors.fill: parent + rows: 9 + columnSpacing: 15 + columns: 4 + + Label { + } + + Label { + id: labelDay1Event + text: qsTr("Day 1") + Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter + } + + Label { + id: labelDay2Event + text: qsTr("Day 2") + Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter + } + + Label { + id: labelDay3Event + text: qsTr("Day 3") + Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter + } + + Label { + text: qsTr("Solar Radiation Storm") + font.capitalization: Font.SmallCaps + font.bold: true + Layout.columnSpan: 4 + } + + Label { + text: qsTr("S1 or greater") + } + + Label { + id: labelEventS10 + font.bold: true + Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter + } + + Label { + id: labelEventS11 + font.bold: true + Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter + } + + Label { + id: labelEventS12 + font.bold: true + Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter + } + + Label { + text: qsTr("Solar Flares") + font.capitalization: Font.SmallCaps + font.bold: true + Layout.columnSpan: 4 + } + + Label { + text: qsTr("Class M flare") + } + + Label { + id: labelEventMFlare0 + font.bold: true + Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter + } + + Label { + id: labelEventMFlare1 + font.bold: true + Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter + } + + Label { + id: labelEventMFlare2 + font.bold: true + Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter + } + + Label { + text: qsTr("Class X flare") + } + + Label { + id: labelEventXFlare0 + font.bold: true + Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter + } + + Label { + id: labelEventXFlare1 + font.bold: true + Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter + } + + Label { + id: labelEventXFlare2 + font.bold: true + Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter + } + + Label { + text: qsTr("Proton flare") + } + + Label { + id: labelEventPFlare0 + font.bold: true + Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter + } + + Label { + id: labelEventPFlare1 + font.bold: true + Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter + } + + Label { + id: labelEventPFlare2 + font.bold: true + Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter + } + + + Label { + text: qsTr("Radio Blackout") + font.capitalization: Font.SmallCaps + font.bold: true + Layout.columnSpan: 4 + } + + Label { + text: qsTr("R1 - R2") + } + + Label { + id: labelEventR1R20 + font.bold: true + Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter + } + + Label { + id: labelEventR1R21 + font.bold: true + Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter + } + + Label { + id: labelEventR1R22 + font.bold: true + Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter + } + + Label { + text: qsTr("R3 or greater") + } + + Label { + id: labelEventR30 + font.bold: true + Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter + } + + Label { + id: labelEventR31 + font.bold: true + Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter + } + + Label { + id: labelEventR32 + font.bold: true + Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter + } + + Label { + text: qsTr("Geomagnetic Activity") + font.capitalization: Font.SmallCaps + font.bold: true + Layout.columnSpan: 4 + } + + Label { + text: qsTr("Active") + } + + Label { + id: labelEventActive0 + font.bold: true + Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter + } + + Label { + id: labelEventActive1 + font.bold: true + Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter + } + + Label { + id: labelEventActive2 + font.bold: true + Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter + } + + Label { + text: qsTr("Minor") + } + + Label { + id: labelEventMinor0 + font.bold: true + Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter + } + + Label { + id: labelEventMinor1 + font.bold: true + Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter + } + + Label { + id: labelEventMinor2 + font.bold: true + Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter + } + + Label { + text: qsTr("Major") + } + + Label { + id: labelEventMajor0 + font.bold: true + Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter + } + + Label { + id: labelEventMajor1 + font.bold: true + Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter + } + + Label { + id: labelEventMajor2 + font.bold: true + Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter + } + } + + Layout.fillHeight: true + clip: true + } + Layout.fillHeight: true + Layout.fillWidth: true + } + } + } +} diff --git a/ui/components/AIndexLight.qml b/ui/components/AIndexLight.qml new file mode 100644 index 0000000..834ebbb --- /dev/null +++ b/ui/components/AIndexLight.qml @@ -0,0 +1,140 @@ +import QtQuick +import QtQuick.Window +import QtQuick.Controls +import QtQuick.Controls.Material +import QtQuick.Layouts + + +Item { + + function setLights(aIndex) { + resetLights() + if (aIndex >= 0 && aIndex < 8) { + rect0.color = "#539bff" + } else if (aIndex >= 8 && aIndex < 16) { + rect1.color = "#0ccf43" + } else if (aIndex >= 16 && aIndex < 30) { + rect2.color = "#f0e000" + } else if (aIndex >= 30 && aIndex < 50) { + rect3.color = "#ffb700" + } else if (aIndex >= 50 && aIndex < 100) { + rect4.color = "#ff7b00" + } else if (aIndex >= 100) { + rect5.color = "#e80000" + } + } + + function resetLights() { + rect0.color = "#2b4d7f" + rect1.color = "#076823" + rect2.color = "#797200" + rect3.color = "#815f00" + rect4.color = "#814100" + rect5.color = "#750300" + } + + ColumnLayout { + anchors.fill: parent + spacing: 0 + + Rectangle { + id: rect5 + color: "#750300" + Layout.fillWidth: true + Layout.fillHeight: true + clip: true + topLeftRadius: 10 + topRightRadius: 10 + Label { + text: qsTr("SEVERE STORM") + anchors.fill: parent + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + font.bold: true + font.pixelSize: parent.height*0.2 + } + } + + Rectangle { + id: rect4 + color: "#814100" + Layout.fillWidth: true + Layout.fillHeight: true + clip: true + Label { + text: qsTr("MAJOR STORM") + anchors.fill: parent + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + font.bold: true + font.pixelSize: parent.height*0.2 + } + } + + Rectangle { + id: rect3 + color: "#815f00" + Layout.fillWidth: true + Layout.fillHeight: true + clip: true + Label { + text: qsTr("MINOR STORM") + anchors.fill: parent + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + font.bold: true + font.pixelSize: parent.height*0.2 + } + } + + Rectangle { + id: rect2 + color: "#797200" + Layout.fillWidth: true + Layout.fillHeight: true + clip: true + Label { + text: qsTr("ACTIVE") + anchors.fill: parent + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + font.bold: true + font.pixelSize: parent.height*0.2 + } + } + + Rectangle { + id: rect1 + color: "#076823" + Layout.fillWidth: true + Layout.fillHeight: true + clip: true + Label { + text: qsTr("UNSETTLED") + anchors.fill: parent + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + font.bold: true + font.pixelSize: parent.height*0.2 + } + } + + Rectangle { + id: rect0 + color: "#2b4d7f" + Layout.fillWidth: true + Layout.fillHeight: true + clip: true + bottomLeftRadius: 10 + bottomRightRadius: 10 + Label { + text: qsTr("QUIET") + anchors.fill: parent + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + font.bold: true + font.pixelSize: parent.height*0.2 + } + } + } +} diff --git a/ui/components/AudioPlayer.qml b/ui/components/AudioPlayer.qml new file mode 100644 index 0000000..cc676b4 --- /dev/null +++ b/ui/components/AudioPlayer.qml @@ -0,0 +1,156 @@ +import QtQuick +import QtQuick.Window +import QtQuick.Layouts +import QtQuick.Controls +import QtQuick.Controls.Material +import QtMultimedia + + +Item { + width: 200 + height: 80 + + property bool loop: false + + function loadSound(audio_path) { + player.stop() + player.source = audio_path + buttonPlay.icon.color = Material.accent + buttonPlay.enabled = true + buttonLoop.enabled = true + } + + function playSound() { + buttonPlay.icon.color = Material.foreground + buttonPause.icon.color = Material.accent + buttonStop.icon.color = Material.accent + buttonPlay.enabled = false + buttonPause.enabled = true + buttonStop.enabled = true + buttonLoop.enabled = true + playerPosition.enabled = player.seekable + player.play() + } + + function pauseSound() { + buttonPlay.icon.color = Material.accent + buttonPause.icon.color = Material.foreground + buttonPlay.enabled = true + buttonPause.enabled = false + player.pause() + } + + function stopSound() { + buttonPlay.icon.color = Material.accent + buttonPause.icon.color = Material.foreground + buttonStop.icon.color = Material.foreground + buttonLoop.icon.color = Material.foreground + buttonPlay.enabled = true + buttonPause.enabled = false + buttonStop.enabled = false + buttonLoop.enabled = false + loop = false + player.stop() + } + + function resetPlayer() { + player.stop() + player.source = '' + loop = false + buttonPlay.icon.color = Material.foreground + buttonPause.icon.color = Material.foreground + buttonStop.icon.color = Material.foreground + buttonLoop.icon.color = Material.foreground + buttonPlay.enabled = false + buttonPause.enabled = false + buttonStop.enabled = false + buttonLoop.enabled = false + playerPosition.enabled = false + } + + ColumnLayout { + RowLayout { + spacing: 0 + Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter + + RoundButton { + id: buttonPlay + icon.color: Material.foreground + icon.source: "qrc:/images/icons/player_play.svg" + display: AbstractButton.IconOnly + enabled: false + flat: true + onClicked: playSound() + } + + RoundButton { + id: buttonPause + icon.color: Material.foreground + icon.source: "qrc:/images/icons/player_pause.svg" + display: AbstractButton.IconOnly + enabled: false + flat: true + onClicked: pauseSound() + } + + RoundButton { + id: buttonStop + icon.color: Material.foreground + icon.source: "qrc:/images/icons/player_stop.svg" + display: AbstractButton.IconOnly + enabled: false + flat: true + onClicked: stopSound() + } + + RoundButton { + id: buttonLoop + icon.color: Material.foreground + icon.source: "qrc:/images/icons/player_loop.svg" + display: AbstractButton.IconOnly + enabled: false + flat: true + onClicked: { + if (loop) { + loop = false + icon.color = Material.foreground + } else { + loop = true + icon.color = Material.accent + } + } + } + } + + Slider { + id: playerPosition + Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter + Layout.preferredHeight: 20 + enabled: player.seekable + value: player.duration > 0 ? player.position / player.duration : 0 + onMoved: { + player.position = player.duration * playerPosition.position + } + } + + MediaPlayer { + id: player + audioOutput: audioOutput + + onPlaybackStateChanged: { + if (player.playbackState === MediaPlayer.StoppedState) { + if (loop) { + playSound() + } else { + stopSound() + } + } + } + } + + AudioOutput { + id: audioOutput + //volume: volumeSlider.value + } + } +} diff --git a/ui/components/BandBar.qml b/ui/components/BandBar.qml new file mode 100644 index 0000000..6486337 --- /dev/null +++ b/ui/components/BandBar.qml @@ -0,0 +1,261 @@ +import QtQuick +import QtQuick.Window +import QtQuick.Controls +import QtQuick.Controls.Material + +Item { + width: 400 + height: 20 + + function setBandBar(lof, upf) { + resetBandBar() + + if (lof < 30) { + selector.anchors.left = rectangleELF.left + } else if (lof >= 30 && lof < 300) { + selector.anchors.left = rectangleSLF.left + } else if (lof >= 300 && lof < 3000) { + selector.anchors.left = rectangleULF.left + } else if (lof >= 3000 && lof < 30000) { + selector.anchors.left = rectangleVLF.left + } else if (lof >= 30000 && lof < 300000) { + selector.anchors.left = rectangleLF.left + } else if (lof >= 300000 && lof < 3000000) { + selector.anchors.left = rectangleMF.left + } else if (lof >= 3000000 && lof < 30000000) { + selector.anchors.left = rectangleHF.left + } else if (lof >= 30000000 && lof < 300000000) { + selector.anchors.left = rectangleVHF.left + } else if (lof >= 300000000 && lof < 3000000000) { + selector.anchors.left = rectangleUHF.left + } else if (lof >= 3000000000 && lof < 30000000000) { + selector.anchors.left = rectangleSHF.left + } else if (lof >= 30000000000 && lof < 300000000000) { + selector.anchors.left = rectangleEHF.left + } + + if (upf < 30) { + selector.anchors.right = rectangleELF.right + } else if (upf >= 30 && upf < 300) { + selector.anchors.right = rectangleSLF.right + } else if (upf >= 300 && upf < 3000) { + selector.anchors.right = rectangleULF.right + } else if (upf >= 3000 && upf < 30000) { + selector.anchors.right = rectangleVLF.right + } else if (upf >= 30000 && upf < 300000) { + selector.anchors.right = rectangleLF.right + } else if (upf >= 300000 && upf < 3000000) { + selector.anchors.right = rectangleMF.right + } else if (upf >= 3000000 && upf < 30000000) { + selector.anchors.right = rectangleHF.right + } else if (upf >= 30000000 && upf < 300000000) { + selector.anchors.right = rectangleVHF.right + } else if (upf >= 300000000 && upf < 3000000000) { + selector.anchors.right = rectangleUHF.right + } else if (upf >= 3000000000 && upf < 30000000000) { + selector.anchors.right = rectangleSHF.right + } else if (upf >= 30000000000 && upf < 300000000000) { + selector.anchors.right = rectangleEHF.right + } + } + + function resetBandBar() { + selector.anchors.left = container.left + selector.anchors.right = container.left + } + + Rectangle { + id: container + radius: 13 + anchors.fill: parent + gradient: Gradient { + orientation: Gradient.Horizontal + GradientStop { + position: 0 + color: "#1a000000" + } + GradientStop { + position: 0.5 + color: "#26000000" + } + GradientStop { + position: 1 + color: "#1a000000" + } + } + + Rectangle { + id: rectangleELF + width: parent.width/11 + anchors.left: parent.left + anchors.right: rectangleSLF.left + height: 20 + color: "#00ffffff" + Label { + text: qsTr("ELF") + font.bold: true + anchors.fill: parent + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + } + } + + Rectangle { + id: rectangleSLF + width: parent.width/11 + anchors.right: rectangleULF.left + height: 20 + color: "#00ffffff" + Label { + text: qsTr("SLF") + font.bold: true + anchors.fill: parent + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + } + } + + Rectangle { + id: rectangleULF + width: parent.width/11 + anchors.right: rectangleVLF.left + height: 20 + color: "#00ffffff" + Label { + text: qsTr("ULF") + font.bold: true + anchors.fill: parent + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + } + } + + Rectangle { + id: rectangleVLF + width: parent.width/11 + anchors.right: rectangleLF.left + height: 20 + color: "#00ffffff" + Label { + text: qsTr("VLF") + font.bold: true + anchors.fill: parent + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + } + } + + Rectangle { + id: rectangleLF + width: parent.width/11 + anchors.right: rectangleMF.left + height: 20 + color: "#00ffffff" + Label { + text: qsTr("LF") + font.bold: true + anchors.fill: parent + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + } + } + + Rectangle { + id: rectangleMF + width: parent.width/11 + anchors.right: rectangleHF.left + height: 20 + color: "#00ffffff" + Label { + text: qsTr("MF") + font.bold: true + anchors.fill: parent + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + } + } + + Rectangle { + id: rectangleHF + width: parent.width/11 + anchors.right: rectangleVHF.left + height: 20 + color: "#00ffffff" + Label { + text: qsTr("HF") + font.bold: true + anchors.fill: parent + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + } + } + + Rectangle { + id: rectangleVHF + width: parent.width/11 + anchors.right: rectangleUHF.left + height: 20 + color: "#00ffffff" + Label { + text: qsTr("VHF") + font.bold: true + anchors.fill: parent + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + } + } + + Rectangle { + id: rectangleUHF + width: parent.width/11 + anchors.right: rectangleSHF.left + height: 20 + color: "#00ffffff" + Label { + text: qsTr("UHF") + font.bold: true + anchors.fill: parent + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + } + } + + Rectangle { + id: rectangleSHF + width: parent.width/11 + anchors.right: rectangleEHF.left + height: 20 + color: "#00ffffff" + Label { + text: qsTr("SHF") + font.bold: true + anchors.fill: parent + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + } + } + + Rectangle { + id: rectangleEHF + width: parent.width/11 + anchors.right: parent.right + height: 20 + color: "#00ffffff" + Label { + text: qsTr("EHF") + font.bold: true + anchors.fill: parent + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + } + } + + Rectangle { + id: selector + height: 20 + color: Material.accent + radius: 10 + z: -1 + } + } +} diff --git a/ui/components/KIndexLight.qml b/ui/components/KIndexLight.qml new file mode 100644 index 0000000..7512d10 --- /dev/null +++ b/ui/components/KIndexLight.qml @@ -0,0 +1,216 @@ +import QtQuick +import QtQuick.Window +import QtQuick.Controls +import QtQuick.Controls.Material +import QtQuick.Layouts + + +Item { + + function setLights(kIndex) { + resetLights() + if (kIndex === 0) { + rect0.color = "#539bff" + } else if (kIndex === 1) { + rect1.color = "#0ccf43" + } else if (kIndex === 2) { + rect2.color = "#0ccf43" + } else if (kIndex === 3) { + rect3.color = "#f0e000" + } else if (kIndex === 4) { + rect4.color = "#f0e000" + } else if (kIndex === 5) { + rect5.color = "#ffb700" + } else if (kIndex === 6) { + rect6.color = "#ff7b00" + } else if (kIndex === 7) { + rect7.color = "#e80000" + } else if (kIndex === 8) { + rect8.color = "#e80000" + } else if (kIndex === 9) { + rect9.color = "#e80000" + } + } + + function resetLights() { + rect0.color = "#2b4d7f" + rect1.color = "#076823" + rect2.color = "#076823" + rect3.color = "#797200" + rect4.color = "#797200" + rect5.color = "#815f00" + rect6.color = "#814100" + rect7.color = "#750300" + rect8.color = "#750300" + rect9.color = "#750300" + } + + ColumnLayout { + anchors.fill: parent + spacing: 0 + + Rectangle { + id: rect9 + color: "#750300" + Layout.fillWidth: true + Layout.fillHeight: true + clip: true + topLeftRadius: 10 + topRightRadius: 10 + Label { + text: qsTr("SUPER STORM") + anchors.fill: parent + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + font.bold: true + font.pixelSize: parent.height*0.3 + } + } + + Rectangle { + id: rect8 + color: "#750300" + Layout.fillWidth: true + Layout.fillHeight: true + clip: true + Label { + text: qsTr("EXTREME STORM") + anchors.fill: parent + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + font.bold: true + font.pixelSize: parent.height*0.3 + } + } + + Rectangle { + id: rect7 + color: "#750300" + Layout.fillWidth: true + Layout.fillHeight: true + clip: true + Label { + text: qsTr("SEVERE STORM") + anchors.fill: parent + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + font.bold: true + font.pixelSize: parent.height*0.3 + } + } + + Rectangle { + id: rect6 + color: "#814100" + Layout.fillWidth: true + Layout.fillHeight: true + clip: true + Label { + text: qsTr("MAJOR STORM") + anchors.fill: parent + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + font.bold: true + font.pixelSize: parent.height*0.3 + } + } + + Rectangle { + id: rect5 + color: "#815f00" + Layout.fillWidth: true + Layout.fillHeight: true + clip: true + Label { + text: qsTr("MINOR STORM") + anchors.fill: parent + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + font.bold: true + font.pixelSize: parent.height*0.3 + } + } + + Rectangle { + id: rect4 + color: "#797200" + Layout.fillWidth: true + Layout.fillHeight: true + clip: true + Label { + text: qsTr("ACTIVE") + anchors.fill: parent + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + font.bold: true + font.pixelSize: parent.height*0.3 + } + } + + Rectangle { + id: rect3 + color: "#797200" + Layout.fillWidth: true + Layout.fillHeight: true + clip: true + Label { + text: qsTr("UNSETTLED") + anchors.fill: parent + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + font.bold: true + font.pixelSize: parent.height*0.3 + } + } + + Rectangle { + id: rect2 + color: "#076823" + Layout.fillWidth: true + Layout.fillHeight: true + clip: true + Label { + text: qsTr("QUIET") + anchors.fill: parent + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + font.bold: true + font.pixelSize: parent.height*0.3 + } + } + + Rectangle { + id: rect1 + color: "#076823" + Layout.fillWidth: true + Layout.fillHeight: true + clip: true + Label { + text: qsTr("VERY QUIET") + anchors.fill: parent + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + font.bold: true + font.pixelSize: parent.height*0.3 + } + } + + Rectangle { + id: rect0 + color: "#2b4d7f" + Layout.fillWidth: true + Layout.fillHeight: true + clip: true + bottomLeftRadius: 10 + bottomRightRadius: 10 + Label { + text: qsTr("INACTIVE") + anchors.fill: parent + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + font.bold: true + font.pixelSize: parent.height*0.3 + } + } + } +} diff --git a/unused_installation_scripts/Linux/artemis3.svg b/unused_installation_scripts/Linux/artemis3.svg deleted file mode 100644 index 7626745..0000000 --- a/unused_installation_scripts/Linux/artemis3.svg +++ /dev/null @@ -1,39 +0,0 @@ - - - diff --git a/unused_installation_scripts/Linux/deploy_linux.sh b/unused_installation_scripts/Linux/deploy_linux.sh deleted file mode 100644 index dd33c55..0000000 --- a/unused_installation_scripts/Linux/deploy_linux.sh +++ /dev/null @@ -1,47 +0,0 @@ -clear -echo " - =================================== - Artemis 3 Deploy Script - LINUX - =================================== -" - -# Set the correct permissions for Artemis folder -echo "Gaining admin privileges and set folder read/write permission..." -echo "" -sudo chmod 700 $PWD/../../ -# Download necessary libraries with pip3 -read -p "Install the necessary Python libraries? [Y,N]..." doit -case $doit in - y|Y) pip3 install -r requirements_lin.txt --user > log;; -esac - -# Generation of shortcut -echo "" -read -p "Create a desktop shortcut? [Y/N]..." doit -case $doit in - y|Y) -cat << EOR > /home/$USER/.local/share/applications/artemis.desktop -#!/usr/bin/env xdg-open -[Desktop Entry] -Name=Artemis -StartupWMClass=artemis3 -Exec=sh -c "cd $PWD/../../ && python3 artemis.py" -Terminal=False -Icon=artemis3 -Type=Application -EOR -sudo cp ./artemis3.svg /usr/share/icons/ -echo " -Link copied in: /home/$USER/.local/share/applications/artemis.desktop -Icon copied in: /usr/share/icons/artemis3.svg -" - ;; - n|N) ;; - *) echo "invalid option $REPLY";; -esac -echo " - ================================ - SETTING COMPLETE - ================================ -" diff --git a/unused_installation_scripts/Linux/requirements_lin.txt b/unused_installation_scripts/Linux/requirements_lin.txt deleted file mode 100644 index 98560a7..0000000 --- a/unused_installation_scripts/Linux/requirements_lin.txt +++ /dev/null @@ -1,7 +0,0 @@ -pandas>=0.24.2 -certifi>=2019.6.16 -aiohttp>=3.5.4 -pygame>=1.9.6 -QtAwesome>=0.5.7 -urllib3>=1.25.3 -PyQt5>=5.12.3 diff --git a/unused_installation_scripts/README.md b/unused_installation_scripts/README.md deleted file mode 100644 index 321e18f..0000000 --- a/unused_installation_scripts/README.md +++ /dev/null @@ -1,62 +0,0 @@ -- -# ARTEMIS 3    - -*Radio Signals Recognition Manual* - -## ARTEMIS 3 - Unused Deployment Scripts - -This folder contains a third option to run Artemis 3 on your pc. The method of installation is based on an automatic script that set privileges, install dependencies and create a working shortcut to your desktop/menu. - -**For the sake of completeness, the documentation is available below, but we strongly discourage any attempt to use it.** - -## Run using deploy script - -
- -> ### Windows: -> -> 1. Windows don't offer a native version of Python. Download and install Python 3 (> 3.7) from the official website (https://www.python.org/downloads/). Be sure to select the flag `Add Python 3.x to PATH` during the first part of the installation. To verify the correct installation of Python open a CMD terminal (Open the **run** windows with **Win+R** and type **cmd**) and check the version of the just installed python 3 with: -> ``` -> python --version -> ``` -> 2. Use the `clone or download` button (https://github.com/AresValley/Artemis/archive/master.zip) to download the source code of Artemis 3. -> 3. Extract the .zip and place Artemis folder where you prefer. The code must always be accompanied by a `themes` folder. -> 4. To install the necessary libraries open the `Artemis/deploy/Windows` folder. Run (with a double click) the script `deploy_win.bat`. The script will: -> -> * Set the correct read/write privileges for Artemis folder. The main folder **must have the reading/writing permission** to download the Signals Database. -> * Install the required Python 3 libraries with pip3. -> * Generate a .pyw file (script launcher without console), and it will create a shortcut on the desktop. - - -
- -> ### Linux: -> -> 1. Linux already offers a native version of python on board. Please verify the presence of Python 3 and check the version (> 3.7) opening a terminal and typing: -> ``` -> python --version -> ``` -> If, for some reasons python, it is not present in your system follow the specific instructions to install it on your distro. For the common Linux OS: -> * **Ubuntu**, **Mint**: `sudo apt-get install python3.7` -> * **Fedora**: `sudo dnf install python37` -> 2. Use the `clone or download` button (https://github.com/AresValley/Artemis/archive/master.zip) to download the source code of Artemis 3. -> 3. Extract the .zip where you like (use `unzip Artemis-master.zip`). The code must always be accompanied by a `themes` folder. -> 4. To install the necessary libraries open the `Artemis/deploy/Linux` folder. Run the script `deploy_linux.sh` typing in a terminal: -> ``` -> cd PATH / TO / ARTEMIS / FOLDER /deploy/Linux -> sh deploy_linux.sh -> ``` -> -> 5. Follow the terminal instructions. At the end, you will find a shortcut to Artemis 3 in the main menu. The script `deploy_linux.sh` will: -> -> * Set the correct read/write privileges for Artemis folder. The main folder **must have the reading/writing permission** to download the Signals Database. -> * Install the required Python 3 libraries with pip3. -> * Generate a .desktop file (script launcher without console) in `$HOME/.local/share/applications` and it will copy the .svg Artemis icon in `/usr/share/icons/`. - - -
- -> ### MacOS: -> -> 1. To Be Completed... diff --git a/unused_installation_scripts/Windows/artemis3.ico b/unused_installation_scripts/Windows/artemis3.ico deleted file mode 100644 index 5677102..0000000 Binary files a/unused_installation_scripts/Windows/artemis3.ico and /dev/null differ diff --git a/unused_installation_scripts/Windows/deploy_win.bat b/unused_installation_scripts/Windows/deploy_win.bat deleted file mode 100644 index b9dee6c..0000000 --- a/unused_installation_scripts/Windows/deploy_win.bat +++ /dev/null @@ -1,69 +0,0 @@ -@echo off -echo =================================== -echo Artemis 3 Deploy Script -echo WINDOWS -echo =================================== -REM Check and gain admin permissions - IF "%PROCESSOR_ARCHITECTURE%" EQU "amd64" ( ->nul 2>&1 "%SYSTEMROOT%\SysWOW64\cacls.exe" "%SYSTEMROOT%\SysWOW64\config\system" -) ELSE ( ->nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system" -) - -if '%errorlevel%' NEQ '0' ( - echo Requesting administrative privileges... - goto UACPrompt -) else ( goto gotAdmin ) - -:UACPrompt - echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs" - set params= %* - echo UAC.ShellExecute "cmd.exe", "/c ""%~s0"" %params:"=""%", "", "runas", 1 >> "%temp%\getadmin.vbs" - - "%temp%\getadmin.vbs" - del "%temp%\getadmin.vbs" - exit /B - -:gotAdmin - pushd "%CD%" - CD /D "%~dp0" - echo: - -REM Set the correct permissions for Artemis folder -set artemis_path=%~dp0..\.. -icacls "%artemis_path%" /grant %USERNAME%:(OI)(CI)F /T > log -echo Gaining admin privileges and set folder read/write permission... DONE! - -REM Download necessary libraries with pip3 -echo: -set choice=Y -set /p choice=Install the necessary Python libraries? [Y,N]... -echo: -if /I '%choice%'=='Y' pip3 install -r %~dp0requirements_win.txt --no-color >> log - -REM Generation of shortcut -echo: -set choice=Y -set /p choice=Create a desktop shortcut? [Y/N]... -if /I '%choice%'=='N' goto end - -IF EXIST "%artemis_path%\Artemis.py" ( - ren "%artemis_path%\Artemis.py" "Artemis.pyw" -) - -echo Set oWS = WScript.CreateObject("WScript.Shell") > CreateShortcut.vbs -echo sLinkFile = "%USERPROFILE%\Desktop\Artemis.lnk" >> CreateShortcut.vbs -echo Set oLink = oWS.CreateShortcut(sLinkFile) >> CreateShortcut.vbs -echo oLink.TargetPath = "%artemis_path%\Artemis.pyw" >> CreateShortcut.vbs -echo oLink.WorkingDirectory = "%artemis_path%" >> CreateShortcut.vbs -echo oLink.IconLocation = "%~dp0artemis3.ico" >> CreateShortcut.vbs -echo oLink.Save >> CreateShortcut.vbs -cscript /nologo CreateShortcut.vbs -del CreateShortcut.vbs -:end -echo: -echo ================================ -echo SETTING COMPLETE -echo ================================ -echo: -pause \ No newline at end of file diff --git a/unused_installation_scripts/Windows/requirements_win.txt b/unused_installation_scripts/Windows/requirements_win.txt deleted file mode 100644 index 98560a7..0000000 --- a/unused_installation_scripts/Windows/requirements_win.txt +++ /dev/null @@ -1,7 +0,0 @@ -pandas>=0.24.2 -certifi>=2019.6.16 -aiohttp>=3.5.4 -pygame>=1.9.6 -QtAwesome>=0.5.7 -urllib3>=1.25.3 -PyQt5>=5.12.3