[Python-modules-commits] [binaryornot] 01/03: Import binaryornot_0.4.0.orig.tar.gz

Vincent Bernat bernat at moszumanska.debian.org
Sun Nov 15 22:07:24 UTC 2015


This is an automated email from the git hooks/post-receive script.

bernat pushed a commit to branch master
in repository binaryornot.

commit 85c8dab392bee2f68f8cf95d17efcc52b289099f
Author: Vincent Bernat <bernat at debian.org>
Date:   Fri Oct 9 22:37:00 2015 +0200

    Import binaryornot_0.4.0.orig.tar.gz
---
 .gitignore                                         |   4 +
 .travis.yml                                        |  21 +--
 AUTHORS.rst                                        |  12 +-
 HISTORY.rst                                        |  21 +++
 README.rst                                         |  20 ++-
 appveyor.yml                                       |  36 +++++
 appveyor/install.ps1                               |  88 ++++++++++++
 appveyor/setup_build_env.cmd                       |  16 +++
 binaryornot/__init__.py                            |   2 +-
 binaryornot/check.py                               |   6 +
 binaryornot/helpers.py                             |  89 ++++++++++--
 requirements_dev.txt                               |   2 -
 setup.cfg                                          |   2 +
 setup.py                                           |  14 +-
 tests/files/decoding-error                         |   1 +
 tests/files/lookup-error                           |   1 +
 tests/files/pixelstream.rgb                        |  67 +++++++++
 tests/isBinaryFile/README.md                       |  25 ++++
 tests/isBinaryFile/encodings/big5.txt              |   1 +
 tests/isBinaryFile/encodings/big5_B.txt            |  22 +++
 tests/isBinaryFile/encodings/bom_utf-16.txt        | Bin 0 -> 94 bytes
 tests/isBinaryFile/encodings/bom_utf-16le.txt      | Bin 0 -> 92 bytes
 tests/isBinaryFile/encodings/bom_utf-32.txt        | Bin 0 -> 184 bytes
 tests/isBinaryFile/encodings/bom_utf-32le.txt      | Bin 0 -> 184 bytes
 tests/isBinaryFile/encodings/bom_utf-8.txt         |   1 +
 tests/isBinaryFile/encodings/test-gb.txt           |   1 +
 tests/isBinaryFile/encodings/test-gb2.txt          |   1 +
 tests/isBinaryFile/encodings/test-kr.txt           |   1 +
 tests/isBinaryFile/encodings/test-latin.txt        |  18 +++
 tests/isBinaryFile/encodings/test-shishi.txt       |   2 +
 tests/isBinaryFile/encodings/test-utf16be.txt      | Bin 0 -> 100 bytes
 tests/isBinaryFile/encodings/utf8cn.txt            |   1 +
 tests/isBinaryFile/encodings/utf_8.txt             |   1 +
 tests/isBinaryFile/grep                            | Bin 0 -> 29664 bytes
 tests/isBinaryFile/index.js                        | 156 +++++++++++++++++++++
 tests/isBinaryFile/no.lua                          |   2 +
 .../isBinaryFile/null_file.gif                     |   0
 tests/isBinaryFile/pdf.pdf                         | Bin 0 -> 81879 bytes
 tests/isBinaryFile/perl_script                     |   2 +
 tests/isBinaryFile/russian_file.rst                |  49 +++++++
 tests/isBinaryFile/trunks.gif                      | Bin 0 -> 40074 bytes
 tests/test_check.py                                | 114 ++++++++++++++-
 tox.ini                                            |   4 +-
 43 files changed, 762 insertions(+), 41 deletions(-)

diff --git a/.gitignore b/.gitignore
index 0cae6af..540b759 100644
--- a/.gitignore
+++ b/.gitignore
@@ -17,6 +17,7 @@ develop-eggs
 .installed.cfg
 lib
 lib64
+.eggs
 
 # Installer logs
 pip-log.txt
@@ -46,3 +47,6 @@ htmlcov/
 
 # Profiling
 binaryornot_profile
+
+# Hypothesis
+.hypothesis
\ No newline at end of file
diff --git a/.travis.yml b/.travis.yml
index 7dd5cf4..3b7d14f 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,15 +1,16 @@
 # Config file for automatic testing at travis-ci.org
 
+sudo: false
 language: python
+python: 2.7
+env:
+    - TOX_ENV=py26
+    - TOX_ENV=py27
+    - TOX_ENV=py33
+    - TOX_ENV=py34
+    - TOX_ENV=pypy
 
-python:
-  - "3.3"
-  - "2.7"
-  - "2.6"
-  - "pypy"
+script: tox -e $TOX_ENV
 
-# command to install dependencies, e.g. pip install -r requirements.txt --use-mirrors
-install: pip install -r requirements.txt
-
-# command to run tests, e.g. python setup.py test
-script: python setup.py test
\ No newline at end of file
+install:
+    - pip install tox
diff --git a/AUTHORS.rst b/AUTHORS.rst
index eb74da6..7eba27f 100644
--- a/AUTHORS.rst
+++ b/AUTHORS.rst
@@ -5,7 +5,7 @@ Credits
 Development Lead
 ----------------
 
-* Audrey Roy (`@audreyr`_)
+* Audrey Roy Greenfeld (`@audreyr`_)
 
 Contributors
 ------------
@@ -13,8 +13,18 @@ Contributors
 * Nick Coghlan (`@ncoghlan`_)
 * Ville Skyttä (`@scop`_)
 * Vincent Bernat (`@vincentbernat`_)
+* Daniel Roy Greenfeld (`@pydanny`_)
+* Philippe Ombredanne (`@pombredanne`_)
+* Aaron Meurer (`@asmeurer`_)
+* David R. MacIver (`@DRMacIver`_)
+* Raphael Pierzina (`@hackebrot`_)
 
 .. _`@audreyr`: https://github.com/audreyr
 .. _`@ncoghlan`: https://github.com/ncoghlan
 .. _`@scop`: https://github.com/scop
 .. _`@vincentbernat`: https://github.com/vincentbernat
+.. _`@pydanny`: https://github.com/pydanny
+.. _`@pombredanne`: https://github.com/pombredanne
+.. _`@asmeurer`: https://github.com/asmeurer
+.. _`@DRMacIver`: https://github.com/DRMacIver
+.. _`@hackebrot`: https://github.com/hackebrot
diff --git a/HISTORY.rst b/HISTORY.rst
index 629d941..9d6858f 100644
--- a/HISTORY.rst
+++ b/HISTORY.rst
@@ -3,6 +3,27 @@
 History
 -------
 
+0.4.0 (2015-08-21)
+~~~~~~~~~~~~~~~~~~
+
+* Enhanced detection for some binary streams and UTF texts. (#10, 11) Thanks `@pombredanne`_.
+* Set up Appveyor for continuous testing on Windows. Thanks `@pydanny`_.
+* Update link to Perl source implementation. (#9) Thanks `@asmeurer`_ `@pombredanne`_ `@audreyr`_.
+* Handle UnicodeDecodeError in check. (#12) Thanks `@DRMacIver`_.
+* Add very simple Hypothesis based tests. (#13) Thanks `@DRMacIver`_.
+* Use setup to determine requirements and remove redundant requirements.txt. (#14) Thanks `@hackebrot`_.
+* Add documentation status badge to README.rst. (#15) Thanks `@hackebrot`_.
+* Run tox in travis.yml. Add pypy and Python 3.4 to tox enviroments. (#16) Thanks `@hackebrot`_ `@pydanny`_.
+* Handle LookupError when detecting encoding. (#17) Thanks `@DRMacIver`_.
+
+
+.. _`@pombredanne`: https://github.com/pombredanne
+.. _`@pydanny`: https://github.com/pydanny
+.. _`@asmeurer`: https://github.com/asmeurer
+.. _`@audreyr`: https://github.com/audreyr
+.. _`@DRMacIver`: https://github.com/DRMacIver
+.. _`@hackebrot`: https://github.com/hackebrot
+
 0.3.0 (2014-05-05)
 ~~~~~~~~~~~~~~~~~~
 
diff --git a/README.rst b/README.rst
index 8b80ce7..b3afe2d 100644
--- a/README.rst
+++ b/README.rst
@@ -8,8 +8,9 @@ BinaryOrNot
 .. image:: https://travis-ci.org/audreyr/binaryornot.png?branch=master
         :target: https://travis-ci.org/audreyr/binaryornot
 
-.. image:: https://pypip.in/d/binaryornot/badge.png
-        :target: https://crate.io/packages/binaryornot?version=latest
+.. image:: https://readthedocs.org/projects/binaryornot/badge/?version=latest
+        :target: https://readthedocs.org/projects/binaryornot/?badge=latest
+        :alt: Documentation Status
 
 
 Ultra-lightweight pure Python package to guess whether a file is binary or text,
@@ -21,7 +22,7 @@ using a heuristic similar to Perl's `pp_fttext` and its analysis by @eliben.
 Status
 ------
 
-It works, and I'm using this package in various places. But it doesn't cover all edge cases yet.
+It works, and people are using this package in various places. But it doesn't cover all edge cases yet.
 
 The code could be improved. Pull requests welcome! As of now, it is based on these snippets, but that may change:
 
@@ -35,8 +36,10 @@ Features
 
 Has tests for these file types:
 
-* Text: .css, .json, .txt, .svg
-* Binary: .eot, .otf, ttf, .woff, .png, .jpg, .tiff, .bmp
+* Text: .txt, .css, .json, .svg, .js, .lua, .pl, .rst
+* Binary: .png, .gif, .jpg, .tiff, .bmp, .DS_Store, .eot, .otf, .ttf, .woff, .rgb
+
+Has tests for numerous encodings.
 
 Why?
 ----
@@ -46,11 +49,14 @@ You may be thinking, "I can write this in 2 lines of code?!"
 It's actually not that easy. Here's a great article about how *perldoc*'s
 heuristic to guess file types works: http://eli.thegreenplace.net/2011/10/19/perls-guess-if-file-is-text-or-binary-implemented-in-python/
 
+And that's just where we started. Over time, we've found more edge cases and
+our heuristic has gotten more complex.
+
 Also, this package saves you from having to write and thoroughly test
-those 2 lines of code with all sorts of weird file types, cross-platform.
+your code with all sorts of weird file types and encodings, cross-platform.
 
 Credits
 -------
 
 * Special thanks to Eli Bendersky (@eliben) for his writeup explaining the heuristic and his implementation, which this is largely based on.
-* Source code from Perl's `pp_fttext`: https://github.com/mirrors/perl/blob/blead/pp_sys.c#L3287
+* Source code from the portion of Perl's `pp_fttext` that checks for textiness: https://github.com/Perl/perl5/blob/v5.23.1/pp_sys.c#L3527-L3587
diff --git a/appveyor.yml b/appveyor.yml
new file mode 100644
index 0000000..54ff1d5
--- /dev/null
+++ b/appveyor.yml
@@ -0,0 +1,36 @@
+environment:
+  matrix:
+    - PYTHON: "C:\\Python27"
+      PYTHON_VERSION: "2.7.9"
+      PYTHON_ARCH: "32"
+      TOX_ENV: "py27"
+
+    - PYTHON: "C:\\Python33"
+      PYTHON_VERSION: "3.3.5"
+      PYTHON_ARCH: "32"
+      TOX_ENV: "py33"
+
+    - PYTHON: "C:\\Python34"
+      PYTHON_VERSION: "3.4.3"
+      PYTHON_ARCH: "32"
+      TOX_ENV: "py34"
+
+
+init:
+  - "ECHO %PYTHON% %PYTHON_VERSION% %PYTHON_ARCH%"
+
+install:
+  - "appveyor/setup_build_env.cmd"
+  - "powershell appveyor/install.ps1"
+
+build: false  # Not a C# project, build stuff at the test step instead.
+
+test_script:
+  - "%PYTHON%/python setup.py test"
+
+after_test:
+  - "%PYTHON%/python setup.py bdist_wheel"
+  - ps: "ls dist"
+
+artifacts:
+  - path: dist\*
diff --git a/appveyor/install.ps1 b/appveyor/install.ps1
new file mode 100644
index 0000000..20ae59b
--- /dev/null
+++ b/appveyor/install.ps1
@@ -0,0 +1,88 @@
+# Sample script to install Python and pip under Windows
+# Authors: Olivier Grisel and Kyle Kastner
+# License: CC0 1.0 Universal: http://creativecommons.org/publicdomain/zero/1.0/
+
+$BASE_URL = "https://www.python.org/ftp/python/"
+$GET_PIP_URL = "https://bootstrap.pypa.io/get-pip.py"
+$GET_PIP_PATH = "C:\get-pip.py"
+
+
+function DownloadPython ($python_version, $platform_suffix) {
+    $webclient = New-Object System.Net.WebClient
+    $filename = "python-" + $python_version + $platform_suffix + ".msi"
+    $url = $BASE_URL + $python_version + "/" + $filename
+
+    $basedir = $pwd.Path + "\"
+    $filepath = $basedir + $filename
+    if (Test-Path $filename) {
+        Write-Host "Reusing" $filepath
+        return $filepath
+    }
+
+    # Download and retry up to 5 times in case of network transient errors.
+    Write-Host "Downloading" $filename "from" $url
+    $retry_attempts = 3
+    for($i=0; $i -lt $retry_attempts; $i++){
+        try {
+            $webclient.DownloadFile($url, $filepath)
+            break
+        }
+        Catch [Exception]{
+            Start-Sleep 1
+        }
+   }
+   Write-Host "File saved at" $filepath
+   return $filepath
+}
+
+
+function InstallPython ($python_version, $architecture, $python_home) {
+    Write-Host "Installing Python" $python_version "for" $architecture "bit architecture to" $python_home
+    if (Test-Path $python_home) {
+        Write-Host $python_home "already exists, skipping."
+        return $false
+    }
+    if ($architecture -eq "32") {
+        $platform_suffix = ""
+    } else {
+        $platform_suffix = ".amd64"
+    }
+    $filepath = DownloadPython $python_version $platform_suffix
+    Write-Host "Installing" $filepath "to" $python_home
+    $args = "/qn /i $filepath TARGETDIR=$python_home"
+    Write-Host "msiexec.exe" $args
+    Start-Process -FilePath "msiexec.exe" -ArgumentList $args -Wait -Passthru
+    Write-Host "Python $python_version ($architecture) installation complete"
+    return $true
+}
+
+
+function InstallPip ($python_home) {
+    $pip_path = $python_home + "/Scripts/pip.exe"
+    $python_path = $python_home + "/python.exe"
+    if (-not(Test-Path $pip_path)) {
+        Write-Host "Installing pip..."
+        $webclient = New-Object System.Net.WebClient
+        $webclient.DownloadFile($GET_PIP_URL, $GET_PIP_PATH)
+        Write-Host "Executing:" $python_path $GET_PIP_PATH
+        Start-Process -FilePath "$python_path" -ArgumentList "$GET_PIP_PATH" -Wait -Passthru
+    } else {
+        Write-Host "pip already installed."
+    }
+}
+
+function InstallPackage ($python_home, $pkg) {
+    $pip_path = $python_home + "/Scripts/pip.exe"
+    & $pip_path install $pkg
+}
+
+function main () {
+    InstallPython $env:PYTHON_VERSION $env:PYTHON_ARCH $env:PYTHON
+    InstallPip $env:PYTHON
+    InstallPackage $env:PYTHON tox
+    InstallPackage $env:PYTHON wheel
+    InstallPackage $env:PYTHON setuptools
+    InstallPackage $env:PYTHON hypothesis
+}
+
+main
diff --git a/appveyor/setup_build_env.cmd b/appveyor/setup_build_env.cmd
new file mode 100644
index 0000000..77fcbf6
--- /dev/null
+++ b/appveyor/setup_build_env.cmd
@@ -0,0 +1,16 @@
+:: To build extensions for 64 bit Python 3, we need to configure environment
+:: variables to use the MSVC 2010 C++ compilers from GRMSDKX_EN_DVD.iso of:
+:: MS Windows SDK for Windows 7 and .NET Framework 4
+::
+:: More details at:
+:: https://github.com/cython/cython/wiki/64BitCythonExtensionsOnWindows
+
+IF "%PYTHON_ARCH%"=="64" (
+    ECHO Configuring environment to build with MSVC on a 64bit architecture
+    ECHO Using Windows SDK %WINDOWS_SDK_VERSION%
+    "C:\Program Files\Microsoft SDKs\Windows\%WINDOWS_SDK_VERSION%\Bin\SetEnv.cmd" /x64 /release
+    SET DISTUTILS_USE_SDK=1
+    SET MSSdk=1
+) ELSE (
+    ECHO Using default MSVC build environment for 32bit architecture
+)
diff --git a/binaryornot/__init__.py b/binaryornot/__init__.py
index 7719808..c3f85a4 100644
--- a/binaryornot/__init__.py
+++ b/binaryornot/__init__.py
@@ -1,3 +1,3 @@
 __author__ = 'Audrey Roy'
 __email__ = 'audreyr at gmail.com'
-__version__ = '0.3.0'
+__version__ = '0.4.0'
diff --git a/binaryornot/check.py b/binaryornot/check.py
index e9e0a42..77da12c 100644
--- a/binaryornot/check.py
+++ b/binaryornot/check.py
@@ -7,13 +7,19 @@ binaryornot.check
 Main code for checking if a file is binary or text.
 """
 
+import logging
+
 from .helpers import get_starting_chunk, is_binary_string
 
 
+logger = logging.getLogger(__name__)
+
+
 def is_binary(filename):
     """
     :param filename: File to check.
     :returns: True if it's a binary file, otherwise False.
     """
+    logger.debug('is_binary: %(filename)r' % locals())
     chunk = get_starting_chunk(filename)
     return is_binary_string(chunk)
diff --git a/binaryornot/helpers.py b/binaryornot/helpers.py
index f9d126c..ee45c1e 100644
--- a/binaryornot/helpers.py
+++ b/binaryornot/helpers.py
@@ -1,16 +1,24 @@
 # -*- coding: utf-8 -*-
 
+
 """
 binaryornot.helpers
 -------------------
 
 Helper utilities used by BinaryOrNot.
 """
+
+import chardet
+import logging
+
+
+logger = logging.getLogger(__name__)
+
+
 def print_as_hex(s):
     """
     Print a string as hex bytes.
     """
-
     print(":".join("{0:x}".format(ord(c)) for c in s))
 
 
@@ -26,13 +34,16 @@ def get_starting_chunk(filename, length=1024):
         return chunk
 
 
-_printable_extended_ascii = b'\n\r\t\f\b'
+_control_chars = b'\n\r\t\f\b'
 if bytes is str:
     # Python 2 means we need to invoke chr() explicitly
-    _printable_extended_ascii += b''.join(map(chr, range(32, 256)))
+    _printable_ascii = _control_chars + b''.join(map(chr, range(32, 127)))
+    _printable_high_ascii = b''.join(map(chr, range(127, 256)))
 else:
     # Python 3 means bytes accepts integer input directly
-    _printable_extended_ascii += bytes(range(32, 256))
+    _printable_ascii = _control_chars + bytes(range(32, 127))
+    _printable_high_ascii = bytes(range(127, 256))
+
 
 def is_binary_string(bytes_to_check):
     """
@@ -51,12 +62,68 @@ def is_binary_string(bytes_to_check):
     if not bytes_to_check:
         return False
 
-    # Check for NUL bytes first
-    if b'\x00' in bytes_to_check:
-        return True
-
     # Now check for a high percentage of ASCII control characters
     # Binary if control chars are > 30% of the string
-    control_chars = bytes_to_check.translate(None, _printable_extended_ascii)
-    nontext_ratio = float(len(control_chars)) / float(len(bytes_to_check))
-    return nontext_ratio > 0.3
+    low_chars = bytes_to_check.translate(None, _printable_ascii)
+    nontext_ratio1 = float(len(low_chars)) / float(len(bytes_to_check))
+    logger.debug('nontext_ratio1: %(nontext_ratio1)r' % locals())
+
+    # and check for a low percentage of high ASCII characters:
+    # Binary if high ASCII chars are < 5% of the string
+    # From: https://en.wikipedia.org/wiki/UTF-8
+    # If the bytes are random, the chances of a byte with the high bit set
+    # starting a valid UTF-8 character is only 6.64%. The chances of finding 7
+    # of these without finding an invalid sequence is actually lower than the
+    # chance of the first three bytes randomly being the UTF-8 BOM.
+
+    high_chars = bytes_to_check.translate(None, _printable_high_ascii)
+    nontext_ratio2 = float(len(high_chars)) / float(len(bytes_to_check))
+    logger.debug('nontext_ratio2: %(nontext_ratio2)r' % locals())
+
+    is_likely_binary = (
+        (nontext_ratio1 > 0.3 and nontext_ratio2 < 0.05)
+        or
+        (nontext_ratio1 > 0.8 and nontext_ratio2 > 0.8)
+    )
+    logger.debug('is_likely_binary: %(is_likely_binary)r' % locals())
+
+    # then check for binary for possible encoding detection with chardet
+    detected_encoding = chardet.detect(bytes_to_check)
+    logger.debug('detected_encoding: %(detected_encoding)r' % locals())
+
+    # finally use all the check to decide binary or text
+    decodable_as_unicode = False
+    if (detected_encoding['confidence'] > 0.9
+        and detected_encoding['encoding'] != 'ascii'):
+        try:
+            try:
+                bytes_to_check.decode(encoding=detected_encoding['encoding'])
+            except TypeError:
+                # happens only on Python 2.6
+                unicode(bytes_to_check, encoding=detected_encoding['encoding'])
+            decodable_as_unicode = True
+            logger.debug('success: decodable_as_unicode: '
+                         '%(decodable_as_unicode)r' % locals())
+        except LookupError:
+            logger.debug('failure: could not look up encoding %(encoding)s' %
+                         detected_encoding)
+        except UnicodeDecodeError:
+            logger.debug('failure: decodable_as_unicode: '
+                         '%(decodable_as_unicode)r' % locals())
+
+    logger.debug('failure: decodable_as_unicode: '
+                 '%(decodable_as_unicode)r' % locals())
+    if is_likely_binary:
+        if decodable_as_unicode:
+            return False
+        else:
+            return True
+    else:
+        if decodable_as_unicode:
+            return False
+        else:
+            if b'\x00' in bytes_to_check or b'\xff' in bytes_to_check:
+                # Check for NULL bytes last
+                logger.debug('has nulls:' + repr(b'\x00' in bytes_to_check))
+                return True
+        return False
diff --git a/requirements_dev.txt b/requirements_dev.txt
index 162f801..cecc5a6 100644
--- a/requirements_dev.txt
+++ b/requirements_dev.txt
@@ -1,5 +1,3 @@
--r requirements.txt
-
 # The following are for local development
 invoke
 flake8
diff --git a/setup.cfg b/setup.cfg
new file mode 100644
index 0000000..0a8df87
--- /dev/null
+++ b/setup.cfg
@@ -0,0 +1,2 @@
+[wheel]
+universal = 1
\ No newline at end of file
diff --git a/setup.py b/setup.py
index 4543b4a..a0ee5e3 100755
--- a/setup.py
+++ b/setup.py
@@ -10,16 +10,20 @@ try:
 except ImportError:
     from distutils.core import setup
 
-if sys.argv[-1] == 'publish':
-    os.system('python setup.py sdist upload')
-    sys.exit()
+
+# Python 2.6 does not have expectedFailre, unittest2 is a backport
+tests_require = ['hypothesis']
+try:
+    from unittest.case import expectedFailure
+except ImportError:
+    tests_require.append('unittest2')
 
 readme = open('README.rst').read()
 history = open('HISTORY.rst').read().replace('.. :changelog:', '')
 
 setup(
     name='binaryornot',
-    version='0.3.0',
+    version='0.4.0',
     description='Ultra-lightweight pure Python package to check if a file is binary or text.',
     long_description=readme + '\n\n' + history,
     author='Audrey Roy',
@@ -31,7 +35,9 @@ setup(
     package_dir={'binaryornot': 'binaryornot'},
     include_package_data=True,
     install_requires=[
+        'chardet>=2.0.0',
     ],
+    tests_require = tests_require,
     license="BSD",
     zip_safe=False,
     keywords='binaryornot',
diff --git a/tests/files/decoding-error b/tests/files/decoding-error
new file mode 100644
index 0000000..6b3a997
--- /dev/null
+++ b/tests/files/decoding-error
@@ -0,0 +1 @@
+���
\ No newline at end of file
diff --git a/tests/files/lookup-error b/tests/files/lookup-error
new file mode 100644
index 0000000..0b47449
--- /dev/null
+++ b/tests/files/lookup-error
@@ -0,0 +1 @@
+������
\ No newline at end of file
diff --git a/tests/files/pixelstream.rgb b/tests/files/pixelstream.rgb
new file mode 100644
index 0000000..b4183a3
--- /dev/null
+++ b/tests/files/pixelstream.rgb
@@ -0,0 +1,67 @@
+������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ [...]
                                                                     #" $"  









(&$*'%*(&+(&,)'*(')'%                                                

&$#(%#*'%+(&+(&,)'


//////.........///


+(&+)')'&)&%)&$'$"&#!$" %"!#!#! # $" %"!&$"(%#)'%*(&,)(-*(-*(-*(-+)-+).+),*(*)'*(&$" 





(&$(&$*(&+)&-*(-+),*(-+)-*(,*(+(&)&%'&$                     '$#(&$*(&+(&,)'-+)-+).+)-*(,)',)',*(+(')'%'%#


      ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ddd    [...]




���������������   T6
Z:!0                                                            jG,qM0�[=|U6d<
f?!`;
   8)08)08)08*18*18*18*18*18*18*18*18*18*18*1=/5   mK1wT8uQ4xR4�`AqJ+///������������������,)'pH)|U8Z<zU8sO3vT8                           eB'pK/�\?�]>~V5�_>tK+mD$nE%�X8�[;tL-a:
3!                                                            
nK0jF)hC%sK-�Z:�`@�X8h?pG'kD#nG(qL/uR7   ���������������������   V4]:
`;
pI*xO/�^>�gG�Z9|T4�]>oH)qK,kE)uR6mJ/%#!      ���������������� [...]

������������   bF-\<#1                                                             fC(�^A�hI�iI�eE|T5wS5   5'.5'.5'.5'.5'.5'.5'.5'.6(/6(/6(/6(/6(/6(/:-3   jI/vR7wR5zT6uM.mD$000������������������.+)tL,~W8zT7\@WC3T8#   ���������������������   gD(sN2{U6�Y8~T2�[9|R0�[9�cA�mL�nL�iIsL-;(                                                            
+mJ/iE(qJ-yQ1�kK�xV�mK�cA�[:�[:tL,oI,uR6   ���������������������   tS9qL0{U7sJ+uJ(�a?�gE�_>�\<sL,kC%sL-�_B}Z?xW=&$"      ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ccc      KB;tR7   ���������������������         





,,,;;;???DDDHHH!!!555���������   aC+hI/2!                                                            
iE)nG)yQ0T2zN+qG'qI*   7)07)07)07)0 [...]
   ���������������������   rN1xQ3�cC�jH�mI�jF�a=�]8�[6�U0�U1�Z8uL+3                                                             

oK/vO1�Y8~S1�Z6�]9�[6�S.}N*�]:�a?�W8|W:   ���������������������   `>"fA#sK*�_<�a=�kF�lH�iG�`>�_>zQ1"'
c@%cA'$#!      ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ddd      E<5a="   ������������������lll			444<<<AAAEEEIIINNNRRRWWWOOO   ���������   U7O0+
                                                            b=!e>lB �]8�W1xK(sI)   6(/6(/6(/6(/6(/6(/6(/6(/6(/6(/6(/6(/6(/
+
                           EEE���������������41.xI$wI&pD#oF'
      ���������������������   ^9
nF&qF#�S.�U/xF�R+�V/�V/�Q*�T-xJ%rF$6!                                                            `;lD%wL+|M)�R,�O(�e>�\5�R+�W1xK&qF$g?!   ���������������������   gB&kC$xM*~O*�P)�O'�Q*�P,{N+tI'C:+���dgPV3`>$&#!      ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������nnn^YThE(   ������������������666***>>>BBBGGGKKKOOOSSSWW [...]
+nJ.�aB�kH�mH�qJ�mG�fC   8)08)08)08)06(/7(/8)08)07)07)08)08*19*1   =/5   yT6�[:T2�d@�nH�jD      ���������������742�e>�hD�b?{Q1>+      ���������������������   wR4�a@�d@�^7�mE�|S�g>�b9�yP�W�yP�kE�eAB-
                                                            
+}X:|T4�Z7�b<�zR�|S�tK�zQ�zQ�rI�vP�a=�Y8   ���������������������   �Z;�a@�iE�uN�c;�qH�jB�[5�fCmYA��z��s��seiU;*
=<<      �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������Ё��      vqmxU8   ������������������666555LLLPPPTTTYYYKKK***         


OOO���������   `C,eH0/                                                            

wT8�]>�oM�gB�mF�vP�nJ                                                

}U5�dB�jF�_;�rL�tM      ���������������963�kD�`:�iE�cBmH,      ���������������������   �Y:~T2�mI�vO�b:�}T�sJ�wN�}T��Z��[�e>�kGF1                                                             

~X:�dC�gC�pJ�W��]�sJ�uL�~U�xO�zT�c>�fD   ���������������������   �Z:�kI�qL�~W�nE�tK�tL�mH�^;|r]�޽�������Ȭ
	���      ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������      ���tP4   ������������������666@@@ZZZ@@@%%%


         RRR������������������   eI1gH16&                                                            
zW;�\=�gD�uP�|U�qJ�mI�lJ�bB�]>qL0sP4wU:wU:;)
:(sQ6rP5xU;{Y>rP54$dG1�aA�iG�`=�iD�xS�{T�{U      ���������������963�wP�{U�d@�`>�cD1"   ���������������������   �aA�oL�mH�qJ�V��\�~U��Z��Y�~U�V�|U�vRG1                                                             "�gG�hF�zV�}W��X��W��\��Z�yP��W�|U�vQ�mJ                           �mK�jG�qK�~W�~U�V�iB�kG�lJ__S�Ӷ�������ȭ	���      ��������������������������������������������������������������������������������������������������������������� [...]
+M4!O4 [>'N7%K6&,   3     ~Z=�]>�`@{R1}S2�V5~T3�V5�fE�mL�jIxM+)�`>�lG�sM�wP�rL�`9�f?      ���������������741�lE�uN�kE�nK�dCtL-

   H0
cB(pO4}[?�cEV6}Q0�fC�nI�rK�W�yP�g>�kB�h?�h?�h?�vM�~W��[�jF�W3�fD�`@�cD�`B|W9vP2rL.oJ,qK-lG){U7�]?�fH~X:oJ,�[=~X:�dE�gG�eD�dA�]9�`:�jC�c:�vM��W��c��W�_6�vN�qJ�vQ�tP�lI�eC{Q0~U4�X8�V4�_=�oK�{W�wR�W0�nF�uL�yQ�yS�nJ�aA]XJ�޽�����Ÿ��
���      ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������      ���oJ,	                                                                     
+[9
]9
5#                                                         
+  +,,
+
+-

NYy���
lI-~W7�W4�fB�b>�iE�gC�lH�pL�lH�a=~O+f?!0
�a;�f?�f>�g@�qJ�gA      ���������������631�O(�e>�b<�Z6�[8�_?N5!   

uP4xT7yT6�Z:xM+}P,yJ%�c>�e>�f>�kB�xO�qH�sJ�wN�{R�xO�zR�oH�R,�R-vH$�[8�W5�X6�X8�\<�X8�X8�_>�a@�`?�jI�`@pF%oE$nD$|R1�Y7�\:�c?�`;�e?�mF�mF�uL�yP��\��W�\3�V-�X0�_8�iB�gA�e?�[6�b>�`=�c?�gC�mH�uP�vP�`9�S+�W/�\3�jA�e>�b?|S2^TE����ҫ�ҫ��y���      �������������������������������������������������������������������������������������������������������������������� [...]
+   iF,qJ+pH({Q0�S/�Z5�^8�g@�b:�f>�e<�tK�sJ�rI�kB�mD�f=�]5�]5�X0�hA�Z4�^:�Z7�W4�Y5�b>�`=�`=�[7�Y5�[7�U2|P,�T0�]9�U1�U1�Z5�]8�_:�e?�iC�qJ�d=�f=�kB�g>�_6�`7�kB�_6�`8�b:�jB�hA�f?�kD�qK�c<�e>�g@�d=�]5�_6�c;�\3�h?�c;�c<�X4�Y8}t`�Ӷ�������ƫ
+���      ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������      ���uN0zS4vN/�\<�_@~Y<xU:mJ1jI.bA'aA'lK2lL4hI0cD+aB)dD+^>$mK2sR7uS8xU:rO3sO3rM0sK,�cC�cC�`?�a?�W6}T4sK,}W9�]?�^A�[>}X:}W9sN0pK-�bD~X;}X:Y;tN0oL/a?%   �('�76�DD�CC�98�--�""��

�   qM1�V4�^7�rI��Y��Z�V�{R�~U�lC�oF�V�}T�|SwS7 kG+�`9�g@�tM      ���������������852�tN�qK�mF�b;�a;�Z7�c at I4#   4$�]<�]<�X4�gA�{S�yQ�rJ�qI�kB�pG�f=�wN�V�~U��Y�tK�pG�f>�c=�tM�uO�pJ�hC�d?�d?�Z5�kF�sN�sN�uP�kF�iD�`;�Z5�tO�qL�mH�nI�e@�c<�\6�pJ�xQ�{T�yR�uN�vN�iA�f>��_�zQ�yP�zQ�nE�lC�c:�uM�~V��Y��W�{R�}T�kB�mD��\�yP�xO�vM�kE�Y5xO.PH7���������~�g���      ������������������������������������������������������������������������������������������������������������������������������������� [...]
+	�   [?�a?�lE�pG�sJ�zQ�}T�V��[��W�mD��Y�vM�yP�xO�lK	(aB*wR5      ���������������631�qK�vO�{U�rK�mF�iC�iE�a@   	�gF�mJ�uQ�vO�rJ�}T�~U��Z�{R�uL�yP��W�zQ�xO��X�~V�zR�{T�sL�jE�tO�nI�sN�pL�e@�oI�qK�rM�iD�pJ�rM�lH�jF�c>�iD�sM�nI�tO�vP�d?�oI�lG�nJ�jF�nI�uO�tM�pI�d<�{S�zQ�xO�~U��^�wN�vM�tK�uL�yP�|S��W��W�zQ�f=��b�xO�xO�yQ�X�gC�Z:`YE�Ǥ�ҫ�ҫ���
	���      ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������      ����\<�eD�rP�fB�jG�zW�rP�hF�gF�V4�nM�a@�Y8�cB�cC�cA�dC�oM�eC�fC�sR�qN�qN�lI�b?�uP�iD�d@�oJ�sO�tN�fA�xT�pL�gC�uQ�[�wS�lH�hD�nJ�^;�b>�kG�pL�pL�eB�hH�

�32�87�43�,+�"!����   yV:�fD��Z��Y�vM��W˗n��_�{R��W�wN�lC�nE�wN�xO�|S�{S|Y>8(

+   GGG���������������631�kE�uN�tM�tM�|U��[�jF�jF@/"   U<(�pM�]9�xR�xP�pH�|S�{R�xO�V��a�vM�{RÏf��a�}U�yQ�d>�}X�kG�_<�gE�hF�hF�jF�vR�kH�iF�yU�vR�tQ�jG�_=�mJ�d@�b?�lH�pL�pL�c?�tP�lJ�c@�qN�~[�xT�oJ�pJ�yR�h@�pG�{R��W��X�xO��]��X�uL��Zѝt��]�yP�|S�~U�i@�nE�yP�{R�xQ�nJ�oM__S�޽�������α   ���      �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������б��      ����mL�qP�xT�|W��^�� [...]


�X9�yS�sL��`��`��Z�|W�~Z�fJ   
+�iF�{W�lG�vO�qI�V�V��b��d��c��_ÏfĐg��`��_�nH�wTH1!
"$$%)
G3#�nK�pOU?-*
'
!& 
!
=)�gD�qNB/)
'
#&))
O9'�a?��\�lE��X�sJ�yP��Y��X��d��b�}T��`ΚqǓj��]�yPɕl��Y��a�wN�wN�V�wP�}X�xUcYH����ҫ�ҫ��v���      �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������б��      ����[;~S1�X3�T-�O'�_7�xP�b9~K#�Q)�\3�Z1�e=�f>�nF�nF����¶�Ȼ�Ķ·�����������������������µ�Ǻ�������������ɽ�ǻĹ�����������������������������÷���	��
�

������l  	xT8�V4�[ [...]
�iB�vO�oH�e<�d<|K%zL'�W3%   O0wK'}O*�V0�b;�kB�xO�tK�d;�c:�[2�S*�a8�{R�a9wG!cA%rrr   rrrHHH
tJ)[8
rrr   iiiqqq
�V4�W7*% BBBrrr   rrrc?"zL'�S-�W/�\3�mD�lC�uL�e<�b9�\3�P'�_6�sJ�sJ�`7�S*�X/�U,�^5�jA�lC�uN�^8�S/q]BeiU��seiUeiU.
xww      ///                        ���������������������������������������������������������������������������������������������������������������������������������������������������      ���|S2�X6�e@�wO��X��`�{R�kB�vM�pG�{R�tK�tK�g [...]
+	����l  	vR5�Y6�rJ�tL�eB�yR�wP�sK�jA�uL��W�g>�oF�mD�jA�wN�h?�sK�qI�tM�zS�{T�qJ�`;�iD�nI         �b<�nG�h@�i@�oG�vP�uP�uQ]A+   %�c@�b?�mG�oH�c;�tK�i@�jA�pG�{R��Y��`�zQ�hA�jD�_<$      gD)      

mJ.�]=�bC$   
^@(/ 
   '}T5�Z:oK/
   
+_C.
   +
�X7�eA�wR�g@�f=�pG�sJ�sJ�h?�qH�xO�|S��Y�wN�{R�nE�xO��Y�mD�i@�mD�mD�sK�c=�jF�eB�a at 5- !sP5gE*���      �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������б��      ����bA�_=�e@�`9�Y0�`7�\3�V-�c:�^5�X/�kB�g>�jA�uL�wN��������������������������������������������������������������������������������������������Ϋ��   ���������z  
	xS7�fD�`:�hA [...]
+   hD'vI%�b=�`9�lD�xO�|S�rI�oF�f=�Z1�a8�Y2O)�V2tJ);$
         
G1lG*rN0iD'Q5            
nI+qL/{U8wQ4
+            S6oH)pF$Q-�a;�c;�lC�zQ�sJ�{R�f=�h?�_6�h?�X/�^5�d;�Z1�]4�^5�f=�jA�yP�vN�tM�_9�d?zN*�V4oF&e?!jE)���      ������������������������```��������������������������������������������������������������������������������������������������������������������������������������������������б��      ���tK*~R0}N)�Q)�R)�Q(�N%�P'�X/�\3�]4�a8�^5�_6�U,�^5��������������������������������������������������������������������������������������������Ϋ��   ����������   b>"yN,� [...]
U6
X8W6
$
���������������   ]<!`?%Z8
Y9
   �����������䎎�#
+b?$nG)vK)�Z5�_8�a:�Y1�Z1�`7�e<�R)�Y0�X/~J!�T+�\3�a8�\3�b9�`7�f=�U,�X0�\4�]6�R,yJ%vH$i>
e=
e?!���      ������������������������000��������������������������������������������������������������������������������������������������������������������������������������������������б��      ���zP0�W5�gB�f>�a8�uL��Y�yP�yP�vM�~U�yP�oF�mD�uL�f=��������������������������������������������������������������������������������������������̫��   ���������  W;$xN.�d@
   
�^A�l [...]
+   �gF�hE�_:�g@�pH�e<�i@�sJ�jA�^6�mF�uP�eB�\<uQ5	�����������ѩ��	\?'^?(T5

+���������������   _A)dD,bC*[<$   �����������ѩ��
	kK1sO3�^?�eA�iC�nG�kC�kB�h?�vM�uL�b9�Y0��Z��[�zQ�rI�~U�{R�rI�jA�nE�mD�a9�qI�rK�]7�U/�uP�jI�_@���      ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������Б��      ���[;T2�^9�oG�mD�wN�|T��\�uL�yP�|T�{R�rI�g>�}T�wN�������������������������������������������Ⱦ�ɿ��������������������������������������������ά��
�  �����|u|�,  J4!zT53!

   
�`B�gC�yR�|S��[�kB�|S�yP�rI�a8�wN�uL��W��W��W��[�oH�hF         �mF�qJ�oG�b9�nE�rI�sK�sM�pK�sP8'   L6$�nK�c?�a;�uM�rJ�e<�h?�rJ�iB�oI
                                                                                                   
�dC�rN�gA�xQ�qH�rI�b9�}T�~U��W�}T��^�V�wN��W�zQ��]�mD�|S�uL�oF�`7�zQ�wN�~V�uO�nK�iH���      ������������������������```������������������������������������������������������������������������������������������������������������������������������� [...]


   +
�_?�wS�nG��X�xO�qH�nE�sJ�yP�|S��X�}T��^�|S�uL�^:            �tM�iC�sK�|S�yP�yP�}U��Y�rM�iEzS4   
	�lI�gC�lG�lE�{S�xO�xO�~U�|V�xS   �x\�x\�x\�x\�x\�x\�v[�tY�tY�tY�tY�v[�v[�tY�tY�sX�tY�tY�tY�tY�uZ�v[�v[�w[�v[�v[�v[�w[�x\�x\�x\�x\�x\   �]=�lI�nI�lE�qI�sJ�qH�yP��\�yP�V�|S�}T��[��\�sJ��Z�yP�qH�oF�rI�rI�|S��X�zQ�xR�jG�_>���      ���������������������   ������������������������������������������������������������������������������������������������������������������������������������������������������      ���uK+wK*�S/�Q+�S,xH#{M(�W3�R-�T0|M(~N(�S-�\4�^5�_6���������������������������     [...]
+%#"$""

   $
e>pA
�T-�X0�a8�d;�b9�V-�Z1�`7�Z1�T+�V-�`8a>#            �`9�`9�^7�W.�\3�Y0�W.�P(�Q+�W3�T1
+   H,yL)�W3�\6�]6�\3�`7�V.�T-tF"   oS at oS@oS at oS@oS at oS@oS at oS@oS at oS@oS at oS@oS at oS@oS at oS@oS at oS@oS at oS@oS at oS@oS at oS@oS at oS@oS at oS@oS at oS@oS at oS@oS@   a:rH&}O+�W1�a9�]4�[2�\3�^5�^5�R)�]4�c:�^5�W.�N%�Y0�[2�`7�c:�`7�Y0�Z1�Y0�\4~M'yL)yO.���      ������������������PPP���������������������������������������������������������������������������������������������������������������������������������������������������������      ���zR3xN-�T2�Z7�hD�^;�U3mM4H2"�aA�Y6�\8�Z5�xR�wO�kC���������������������������  [...]
+--,10/+*)"! 


+   	jC%�fB�sL�zQ�zQ�lC�g>�c:�zQ�xO�mD�zQ��[�xQ            �~W�oH�g?�e<�d;�uL�yP�mE�jD�wR�oKiJ2   #�Y6�rN�mG�f?�`8�e<�c;�mG�_<   �rX�rX�rX�rX�rX�rX�rX�rX�sY�tY�tY�tY�tY�tY�tY�tY�tY�tY�tY�rX�rX�rX�rX�rX�rX�rX�rX�rX�rX�rX�rX�rX�rX   hC&�[:�mJ�kF�pH�oF�mD�\3�tK�tK�h?��\�V�yP�tK�[2�uL�~U�wN�zQ�nE�jA�]4�uL�tK�c=�nK�iH���      ���������������PPP��������������������������������������������������������������������������������������������������������������������������������������������� [...]

	--,:98:98210'%%


   
X7
�[7�_9�e=�lC�h?�tK�pG�oF�sJ�{R�tK�uNyT7         �]6�d=�d=�jA�lC��W�wN�wO�wO�lF�lH�eB
   b>"�X5�_:�_8�iA�kB�xP�nI�cA   oS at oS@oS at oS@oS at oS@oS at oS@oS at oS@oS at oS@oS at oS@oS at oS@oS at oS@oS at oS@oS at oS@oS at oS@oS at oS@oS at oS@oS at oS@oS at oS@oS@   eB'b;
�\:�]8�c<�tK�lC�uL�rI�vM�sJ�zQ�~U�wN�nE�f=�R)�mD�g>�g>�qH�jA�uL�pG�nE�gA�iF�`?���      ������������OOO��������������������������������������������������������������������������������������������������������������������������������������������������������������б [...]
+$""654CBBA@@554)('

   [<"�U2�e?�h@�yP�yP�qH�jA�`7�lC�h?�d=�b;         �Z3�b;�jB�qH�yP�uL�oF�b9�jB�d=�^9�Y5M4    1 �T1�Y5�b=�f?�tK�uM�gB�W5   �rX�tY�v[�v[�uZ�rX�rX�rX�rX�rX�rX�rX�rX�tY�tY�tY�tY�tY�tY�tY�tY�tY�v[�v[�x\�x\�x\�x\�x\�x\�x\�x\�x\   hF+oI*xM,�Z6�mF�mD�uL�tK�xO�i@�lC�mD�e<�a8�nE�lC�^5�`7�d;�qH�i@�yP�xO�sJ�h?�^8�\9{Q0���      �����ˈ��


����������������������������������������������������������������������������������������������������������������������������������������������������� [...]
&%$765GGFCBB554(&%


      >+�^:�nG�rJ�|S��W�{R�zQ��Y�{R�mE�e>         �g@�hB�lD�tK�~U�{R�wN�yP�~V�vO�hB�[7U4
+   U4�]:�b=�pJ�zR�pH�jE�cA   oS at oS@oS at oS@oS at oS@oS at oS@oS at oS@oS at oS@oS at oS@oS at oS@oS at oS@oS at oS@oS at oS@oS at oS@oS at oS@oS at oS@oS at oS@oS at oS@oS@   rP5~W9�Z8�kF�hA�tK�yP�{R�}T�~U�|S��W�xO�mD�mD�xO�xO�nE�tK�lC�rI�wN�zQ��X�{R�rL�pM�bA���      +++


___���������������������������������������������������������������������������������������������������������������������������������������������������������������������      ���8'   """###
+
+
+   


   �cC�fD�pK������������������������ǹ�   ������������������������������������   ������ø��������������������|S�~U�~U�{R�V�V��Z�nE�X�^<1"10/=<;;:90/.$""
+
+	   �gF�jD�nE�tK�vM��X�|S�tK��Y�yR�rK         �wP�wP�pH�rI�tK�xO�~U�|S�qH�}V�wQ�mI�nK4#   M7%�kH�iE�kF�pI�xQ�qL�dC   �tY�tY�tY�tY�tY�tY�tY�tY�tY�tY�tY�uZ�v[�v[�v[�v[�v[�v[�v[�v[�tY�tY�tY�sX�tY�tY�uZ�v[�v[�x\�x\�x\�w[   tQ6zT6�eC�mI��Y�yP�oF�{R�}T�~U�|S�~U��W��Y�oF��]�sJ�yP�}T��Z�vM�oF�vM�zQ�~U�sM�gD�jI���      WWW@@@)))����������������������������������������������������������������������������������������������������������������������������������������������������� [...]
+
+
+


######   [?)�a@�jG������������������������Ȼ�   ������������������������������������   ������÷��ȿ�����������������_őh�VŽe͙p�uL��]�lC�pH�rM�eC

0/.0/.('&


      V:$�dC��^�}T��^őh��]��]˗n��\�xQ�gA         �iC�uN��Y��Z��^��`��^��_��d��^�qJ�hC�nJ�Z;   
�iF�lI��\�|V��Z�zU�rP   oS at oS@oS at oS@oS at oS@oS at oS@oS at oS@oS at oS@oS at oS@oS at oS@oS at oS@oS at oS@oS at oS@oS at oS@oS at oS@oS at oS@oS at oS@oS at oS@oS@   mK0�^?�cB�iE�uMőh�yP��^őh�VÏf͙p�vM��\�mD�tK�}T�~U�qH�{RȔk�}T��^Ïf�� [...]


$""




+
+   
N5 Y;�oL�{U��^��d��Z��ZŽeÏf�wN�uN�}V         �nG�{U��]��[��_��[��YƒiŽe�}T�pI�}W�[6�iE$   cG1�wS�zU�|V�|W�qM�vU   �uZ�v[�tY�tY�sY�rX�rX�rX�rX�sY�v[�v[�v[�uZ�tY�tY�uZ�tY�rX�sY�sX�rX�rX�rX�sY�uZ�uZ�tY�tY�tY�tY�tY�uZ   uS8vP2�X7�oK��Z��^��^��[��^��^��`��]�pG��b�wN��X�qH�kB�{R��]��Z��a��d��^��Y��Z�xU�^=���      ���������������@@@���������������������������������������������������������������������������������������������������������������������������������������������� [...]

!!!##################


,�]>����ƻ������������������ɹ�   ������������������������������������   ������ƺ���������������������`�|S�f=�g>�}T��Y��c��]�oF�mD�kB�oH�mH�hGP9'   $eE+wQ2�V4�iC�qI�|S�~U��]��W�b9�b9�zQ�}T�xQ�wP         �e>�oH�|T�pG��Z��b�d;�\3�{R�|S��W�wO�lF�c?�]9
   ~Y;�b>�vQ�}W�[7rG%   �sX�tY�tY�tY�tY�rX�rX�rX�rX�rX�rX�rX�rX�rX�rX�rX�rX�rX�rX�rX�sY�tY�tY�v[�v[�v[�v[�v[�v[�v[�v[�v[�v[   hE*vP1�X7�iE�vN�~U�V��`�|S�f=�g>�|S��Y��a��\�oF�mD�kB�tK�xO��W��X��_�|S�a9�]7�gD�gF���      ���� [...]
+W9!iB$�T1�_8�mE�tK�sJ�\3�kB�S*�\3�Z1�]4�c;�`9�_8         �pI�mF�qI�]4�i@�S*�V-�Y0�a8�]4�c:�c;�U.�[6�S.S9$   9'�X3�[5�Y2xK&wM+   oS at oS@oS at oS@oS at oS@oS at oS@oS at oS@oS at oS@oS at oS@oS at oS@oS at oS@oS at oS@oS at oS@oS at oS@oS at oS@oS at oS@oS at oS@oS at oS@oS@   `>"pJ,U4�c>�b:�sJ�c:�c:�[2�a8�Y0�d;�jA�kB�`7�[2�c:�jA�qH�nE�rI�^5�i@�V-�]5�T.}P-�V5���      ���������������������000����������������������������������������������������������������������������������������������������������������������������������������������� [...]

-���μ�����������������˿���                                          ���õ��¸�������������������f=�vM�wN�c:�lC�g>�\3�b9�i@�sJ�V�tK�tK�nG�lF�Y7K3!         V8!nG)�V3�f?�~U�kB�zQ�kB�uL�pG�uL�nE�kB�h?�]5�`9�\5         �e>�tM�f>�tK�qH�pG�lC�nE�h?�^5�g>�`8�c<�\6�lF�^:	9&�kE�gA�c>�`<�X6   �v[�tY�tY�uZ�v[�v[�v[�v[�v[�v[�v[�v[�uZ�v[�v[�v[�v[�w\�x\�x\�v[�v[�v[�x\�x\�v[�v[�v[�v[�v[�x\�x\�z^   hE*X:�eC�jF�lE�uL�uL�f=�vM�wN�c:�kB�f=�]4�b9�h?�rI�V�sJ�vM�pG�uL�lC�qH�pG�^7�Y6vM,���      �������� [...]
+
+
+######





######   ��}���̺��������úѿ�п�ξ�Ⱥ�³����������������������������������������˽��ƽ���������������ƻ���c�b9�c:�uL��W�yP�xO�xO�zQ�jA�h?�sJ�lC�h?�uM�nHyO-*
      S:&{V9�hE�qK�jB�h?�rI�i@�e<�zQ�sJ�kB�kB�kB��Y�tK�vO�wP         �mF�g@�c<�tK�pG�lC�g>�lC��^�zQ�xO�yP�W�pI�d=�f@�jD�d>�b<�e>�lF�V2�W5   oS at oS@oS at oS@oS at oS@oS at oS@oS at oS@oS at oS@oS at oS@oS at oS@oS at oS@oS at oS@oS at oS@oS at oS@oS at oS@oS at oS@oS at oS@oS at oS@oS@   vS7vO0�Y7�fA�jB�pG�wN�}T�b9�e<�tK�V�xO�yP�yP�zQ�jA�f=�sJ�jA�f>�uM�rK�]6�d=�`<�h [...]
+	lc^������ij�Ķ����������������������������������õ�̽��ù�������������������ʽ��z�pG�zQ��\��c��[�wN�|S�|S��[�vM�zQ�nE�yP�f=�mF�hC~V7
!�`B�dC�oJ�zR��W�sJ�V�jA�zQ�jA�e<�sJ�mD�V��]��`�zSzU7         �sL�c<�uM�mD�\3�rI�pG�sJ��ZŽe��^�vM�vM�|T�lD�mF�f?�qJ�lE�Y1�nG�f@�^;   �x\�x\�v[�v[�tY�tY�tY�rX�rX�sX�sX�rX�rX�rX�rX�rX�rX�rX�rX�rX�rX�rX�tY�tY�tY�tY�tY�v[�v[�v[�w[�v[�v[   }X;�fE�c@�jE�pH�{R�g>�uL�qH�yP��\��c��[�xO�|S�|S��[�uL�yP�kB�sL�a:�hB�iC�c>�pM�jJ�cE���      ������������������������PPP [...]
 ���������������   <"D(Q0S-Z1j>n?uD
}J"{G
�P'�M$�P'�P'{G
�L#�M$�N%uAxD�L#xD{G
|J"vFvG"

%)
]gK%)
2+
P/���                                 ����������������������������������������������������������������������������������������������������������������������������������������������������      ���yR5vP3wQ3,






!!!


   \X4>;$31
����a��=LH%>�NN�>>�66�DD�ff   ����ĺ����������������������������������������������������������ɻ��z�~U�pG�jA�}T�uL�wN�nE�b9�g>�xO�kB�yP� [...]
���������������   N4U:$Q6 
���������������   [?)eF-pL1yQ2�U3�]9�mG�`9�sJ�{R�vM�sJ�~U�pG�jA�}T�uL�wN�oF�a8�g>�xO�kB�uM�oJ�c at 8=-��p��x��x��d]]]      ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������      ���uN/xQ3vO0nK1      


   
   ��pkf7+)��T��J��<�MM�JJ�55�--�;;W,,40.����ƻ����������������������������������������������������������Ȼ��{�tK�sJ�tK�uL�{R�yP�rI�kB�U,�jA�kB�g>�kB�qH�tK�tK�mD�qH�uL�sJ��X�tK�kB�V-�g>�nE�nE�lC�oF�tK�qH�mD�sJ�qH�pG�xQxS6         �iC�jD�f>�oF�mD�wN�rI�uL�i@�vM�xO�uL�oF�e<�a8�mD�tK�i@�oF�lC�sJ�pH�kE�a<�fC�[<tP3 ���������������   Z<&aC+_B*:(222��������ξ��
O2
X;%Z=&F.&&&���������222
aB*rQ6|V8�\;�^;�P+�d>�f>�c:�kB�rI�uL�tK�rI�uL�uL�zQ�zQ�sJ�jA�U,�jA�jA�c<�`;�^;G at -y�a��x��x[aF���      ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������      ���vO0{S5�Z;�`@�[<jF* 
   
@*P6!   ��alf864 ��y��O{t8   ^,,�II�22�CC�<<!QKF���ʻ��Ȼ�Ȼ�ʽ�ʽ�Ȼ�ɼ�ʽ�Ȼ�ʽ�Ȼ�˿�ƹ�Ȼ�ʽ����������������ö��}�}T�kB�lC�mD�d;�e<�rI�d;�g>�Z1�c:�nE�i@�zQ�|S�wN�mD�e<�kB�e<�nE�pG�kB�a8�W.�e<�oF�i@�zQ�}T�vM�oF�^5�kB�kB�f?�f?         �[4�hB�e>�pG�yP�vM�uL�^6�lC�lC�h?�h?�pG�Y1�\4�a9�oF�i@�oF�vM�~U�{R�e>�d=�Z5�V3pJ+C-            hH.oN5nN4_@'         5!_>%a?%eC(_@'G/
      
F/
N5 nI+wN.�_<�X1�`9�[4�b9�lC�kB�xO�zQ�|S�lC�lC�lC�d;�f=�rI�e<�f=�Y0�a9�gA�\8�dBYT=��i��x��x{�^
���   [...]
+  6$U:%   ��flg775!��h��Z��=ic0	q22�DD8s_M�}g��y������������������������������~��y��z����������������������i��`��X�}T��Z�}T�pG�rI�~U�pG�V�V�{R��W��`��Y��_��Z�~U��]��W�qH�qH�wN�g>��X�zQ��X��]��[��[��\��Y��Y��_��X�mF�g@         �tM�yS�yS�|U��]�|T�}V��X��Z�X�rJ�e>�nG�d<�vN�xP�{S�zR��Y��_��X��W��X�yP�zT�jF�V5]@(nI-1!lL4B/bF/]B-dI2�`C�_@
                  �aC�bC
                  �bA�`>�hB�yR�uL�~U��[�zQ�~U��c��Z��`��X�}T��[�~U�pG�rI�}T�nE�V�|S�tM�oL�lKFA.��i�� [...]
+
 

   ��iys>                  
      ?+tQ2�hA�rI�W�vM�{R�rI�f=�uL�wN�}T�|S�yP�{R�xO�yP�oF�vM��X�xO�|S�}T�h?�vM�wN�V�V�xO�|S�|S�{R�sJ�yP��W�{R�{R�}T�kB�tK�sJ�{R�}T�uL�}T�uL�uL�nE�wN�V�}T�{R�yP�mD�rI�h?�uM�zR�pH�zS�pJ�gA         �mH�pJ�kF�kC�lE�e>�kE�vO�mG�wQ�uO�f@�kE�lF�vO�tM�sL�qJ�nG�oG�kB�pG�zQ�tK�wP�tN�jH            			$ 
   �Z9�]=F1                ;)�hF�`>G2!               	>+
�jF�nH�sL�lC�uL��X�xO�{R�V�i@�vM�wN�~U�V�wN�|S�{R�zQ�sJ�yP��W�yP�sL�kG~T4LH2��p��x��xv\ [...]


 8
 E D0

+   fb=OJ(><
"!

+FB(<:
852/+(   E0zU7�rL�{T�xQ��]�zS��d��Y��Z�W��^�~V��\��Y�sK�pH�yQ�W�xP��c�zR��c�W��\��Z��^��Y��\��X�uM�oF�yP�|T�zQ��c�xOőh�|S��_��Z��d��]��_��`�|S�tK�rI�zQ�~U��b�xOőh�vM��^��^��a�X��Z��]�lF�oJ         �yT�oI�|V�qK�Y�|V�Y�{V�tO�|W�gB�vQ�^9�pJ�zT�{U�xQ�{T��\��]��^��^đh�wN��Z�sL�sNH2                	D1"�pN�pM�xV�hF�lK�gG�]=�\<�hF�lI�jG�uR�lI�xV�lK�iI�fF�lL�jH�sP�tP�mG�mE�yP��W�{R��d�}T��d��X��^��\��`��[��^��Z�xO�qH�{R�}T�{R��b�qK�[�aA8=-��p��x��x�d   ���      ��������������� [...]
+
+
      # _C+}W8�b=�a=�_;�wS�uQ�uQ�rM�kF�{V�}X�~Y�tN�iC�nH�rL�vP�jD�]7�vQ�{U�}W�vQ�qK�{U�vQ��b�wQ�iC�kE�uO�{T�pJ�]5�xP��Z��_��W��Y�|S�}TǓj��_�sJ�qH��W�uL�~U�a8�zQ��[��a�}T��\�}V�|U��f��^�sM�e@�uP      "
�jE�yT�{V�tN�}X�xS�sO��a�mO�pL�[7�qM�X4�lH�Z5�jD�Y�~X��Z��[�|T�xPŒj��b�yQ�b;�vP�b>�W3�X6�[:�oN�mK�tR�pM�iF�mI�~Z�sO�jG�\:�fD�eB�c@�`=�]9�vQ�tQ�qM�nJ�dB�qO�sP�wT�pL�iC�pI�wP�W�sJ�d;��W��^��`��X�|S��[�VȔk��Y�rI�tK�~U��Z�xO�a8�zR�{U�wT�fEFA.y�a��x��x`eI���      ����������������� [...]
\>$kE&vM+}S1�_=�[:�\;�];�bA�cA�_=T1|Q.yN+�\:�X5|P-�T1�W4�`=�a>�]:�dB�c@�eB�^;S0|P-{O,�\9|P-{N+�V2�[6�d?�kE�e>�qI�kC�xO�kB�^5�^5�^5�g>�pG�W.�b9�d;�lC�qH�jA�rI�f>�vN�kDngblfalf`jd_ga]f`[20.


{S3�fB�`=�gC�`;�lG�c?�^:�T1	@*�W5{O,vJ'�V3�[7�iD�e@�nH�e?�pI�rJ�iA�_7�c:�]5�b;�]6�V0�X4�X4�eB�_=�dA�`<�jE�kG�b=�Y4�Z6�S.�^:�\8�U0�W2�]7�jE�gA�hB�hB�mH�kF�eA�Y5�W2�U/�hA�a:�[3�c:�g>�qH�sJ�nE�xO�tK�xO�nE�`7�]4�]4�mD�a8�Z1�a8�f=�nE�qH�c<�dA~U5D?,��i��x��xbjL
+���      �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������Ϯ��      ���zV9Y;#
+)	*M�����tNr"=kv�Db~<~�YVy8Ut'_O
f@


X""�55�77b''	4%3"5#6"9&<(E1"C0 =*B.:'L1
_?%�\=�hI�hI�_@{S3pH(yQ1{S3�eEyV:hG-�\<xP0qI)uM-�_?�eE�mM�fF�X8{Q0zQ1�X4�uQ�uO�nG�rJ�g>�\3�_6�|S�~Uőh��]�jA�i@�e<�^5��]��Z�uL�nG�c<�W2������������������20.|N*�pK�rN�jG�[7�[8�\9wL)pM1   )
�mL}R0�X6�V4}Q.�eA�uQ�pK�a;�g@�_8�[3�h@�yP��_��\�d=�d>�^9�\7�`;�uP�rM�e@�mG�]7�Z2�a;�uM��\�X�lE�b;�Z3�b;�g@�~W�yQ�lE�vO�a:�Z3�`9�tM��[��]�zR�kC�]4�i@�kB��Z�~U�qH�wN�h?�^5�c:�|S��Z��d��Z�oF�f=�g>�d;��Z�xR�eA�\<80!��i��x��xZ`F���      ���������� [...]
+   GGG���������������2/,zL)�V3�X5�Y6zO+hD(2\:4"!0

+uN1gE*	I4xL)�V3�Y5�_;�W2�\6�[4�T,�`7�jA�e<�g?�e=�`9�U.�`9�\5�]6�`9�Z3�d=�e=�W/�]5�jA�kB�c;�f>�b:�U,�lC�^5�a8�_6�]4�lC�a9�^6�\4�g>�nE�f=�lC�d;�Y0�pG�a8�f=�^5�f=�c:�e<�^5�]4�e<�lC�kB�sJ�f=�^5�i@�d;�h@�^7�X4sI(VQ9��i��x��x{�^
���      �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������      ���	
.<Q	]^s�WPt/_�Of�T:of�.g�8T�
a�8t�M��qTs0���E];(	

      CCC���������������������������������������������������������???������������������������������0!       J4"|U6�oF�d;�f=�a8�g>�jA�oF�pG�wN�rI�fD+

I4"Z>)      ���������������30-�`=�b?�iF�a?�lJxU:	Hk?

         V=)�kG�sM�wQ�oH�nG�jB�jA�c:�nE�i@�nE�oF�pG�uM�yQ�{S�|S�}T�}T�vM�kB�jA�h?�lC�g>�pG�nE�qH�yP�{R�{R�|S�|S�xO�xO�nE�f=�kB�h?�b9�mD�vM�qH�wN�zQ�zQ��X�}T�vM�vM�pG�c:�jA
+      *
S8$�iE�vM�vO�sO�kH8=-��i��x��x|�^
+���      �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������      ���2!   
+4D
+fzU'Ty�mBwd�-E{
n�RN0N�JpRR%Bk
k�Jcx=
;


M3
������   ���������������������������������������������������������???���������������������������   ���   vO/~R.�^:qN31!(gF,��Z�vM�uL�xO�wN�{R�c:gF,
Y9 �jB�nG�iC      ���������������31/�V3�^;�X6/
"#	4M(Bc5	


+1J&   	      	�Z6�Z5�oI�iC�_8�^5�xP�{S�mF�nG�vO�mF�f>�g?�h@�e=�X1�sL�mF�g?�c;�jB�|T�sL�oH�nG�sL�jB�nG�iA�c;�Y2�pI�tM�qJ�a9�a9��Y�uN�pI�jB�uN�oH�lE�jB�c<�`8�nF�yP�kC�f=�kB��_   �uL�rI�iElL2&2"qK-�V1�^;	   ��}CI5
+]@)653      �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������      ~zw
	"
@������En3��}2iFSyA�����A|f�.��tLs)w�YNk')
]A*   ������   ���������������������������������������������������������???���������������������������   ������   ~V6�nL�iD�b;�i@�W2\B-0#�wP�}T�{R�yP�yP�dB(�e?��Y�nF�_8�a:      ���������������30.�fB�`=�V4.!   ;W3Hk@
*
-
2K+%'?'j�dDg=   S8#�iF�iE�^:�iE�b=�jE�uP�Z�tO�nJ�d@�iE�eA�gB�a<�lH�pK�c?�b>�Z6�mI�tP�{W�oJ�pK�iD�gB�iD�iE�_:�lH�qL�d@�]9�Y4�lH�sO�zV�rN�qL�lH�hC�mI�mH�\7�jE�zT�kE�c<�g?�jB��Z��b   �V�{R�xO�|S�}T~T31!K5%�fB�W4�V5xX.$�^BvT8'%$      ������������������ [...]
+	 I3#   ������   ���������������������������������������������������������OOO���������������������������   ������   �]?�X7�b>�lE�}T��X�~U�lH6%�bA��Z�|S�kG,
�iB�V�jA�nF�pI�uN      ���������������41/�mJ�eB�dB~T3]A+    Fk9;X2  
+c�WOuF

   �fD�[8�b>�fB�gB�[<�jI�kH�jG�\:�^=�nL�gF�jH�[9�jH�]<�X7�`>�`>�dB�iG�eC�jH�bA�]<�mK�]<�gF�\:�kJ�cB�\:�`>�[9�fE�fD�fD�iG�fD�^=�kJ�]<�fE�^<�gF{V:�[9�fB�e@�yR�zR�}T�~U   �vM��Z�wN�|S�wN�tK�|SsN1/ �`>�lI�jH�bB�Z=uQ4)'$      �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������      ��~*
 
9V-Ci 2\��v3gW�(J�
B}
l�:b�-Bx��tQv1]~/u{XDK


 2!   ������   ��������� [...]
+%7#MrD
*   wM+~R/�Z7�^:|O,                                                                                                                           �`=�^:�d>�^7�[3�jA   �d;�a8�^5�d;�X/�]4�f>�c;vQ47%�\7�W3}R0xP1rL.*'&      ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������nnn


YURkJ0`C,
"D���}y�R�Ő��d�4:tL���a�њ�����x��j.N
.'!ZA.R6    ������   ���������������������������???���������������������������������������������������������   ������   zU8�^>�jG�jD�{R�`7�i@�e<�kB�bA)uK)8$�c:�V�{R�vM�rK�iC�oH      ���������������30-S/�];
   

	' +$  
+  
+;X2,B(^�J
sK+   �cB�c@�hE�_<�\9      ���������������������������������������������������������������������������������������������������������������������      �dC�dA�tO�]6�b:�g>   �sJ�i@�S*�e<�c:�xO�xO�vM�wOcD+I3"�X3�\8{Q0yQ1,*(      ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������^^^      E?9mK0nL2	 Ev�nNm<Fn h�Q��[v�?.c~�e\H5cWw7��_~�R!:
V;&T7     [...]
R|H

Ee7;X2'
!u�Z
)Q2   �_=�W4�a>�];�_?      ���������������������������������������������������������������������������������������������������������������������      xR4�aA�gD�c>�mF�oF   �mD�mD�`7�b9�Z1�i@�i@�h?�uL�{R�pJ(�d>�_<V5.+)      ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ccc      E<5b?#X9! Ug.%>

B-P
aQ:p�KhyESg<%Np�f�öXrM'

%%'
]<"   OOO!!!������������������������������???������������������������������YYY������������������������������   ���   iD'vL*�Y4�]6�c:�b9�_6�^5�`7�R)L#   ,	�[2�\3�b9�`8�[4�]7�^8      ���������������0-,{N*T2|Q0J/
	   

   Ch>'  "6
E,   zO-|Q.}R.|R1vO/      ���������������������������������������������������������������������������������������������������������������������      iF)rK,�V4�V1�\4�^5   �T+�N%�W.{G
�[2�]4�`7�\3�d;�a8�d;I0
U7}P-wN-,*(      ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������bbb      I at 9nL1sO4$ 

 R
t_F�Ĵ���������
?/
gH/fE+lK0iH.hG-8''...������������������������������???������������������������������fff������������������������������///      zT5�a?�];�b>�mF�nG�pI�tM�xQ�qJ�lE
                           EEE���������������2/-�hF�^=�^=

   /sM1
7&'
?\9
I1%   *
   �bA�\;�a?|S4vP3      ���������������������������������������������������������������������������������������������������������������������      fE+uP3�[;�b?�tN�vO   �tM�qJ�gA�tM�sL�uN�jD�rK�gA�gA�lE�X9/ �dB�bB-+)      ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ [...]
Sf$#0
	iL6tU<zY>xV;|[?~\BvU:[A+������������������������������???������������������������������???������������������������������   kM6   �aC�jI�iG�yU�uP��\�wR�lG�vQ�nI�e@�Z5?-|X=�{V�sN�yU�kG�wT�^B������������������0.+�fD�mM�aB
	�`@�gH�aCqS;�_B\A-   
zU9oI,*
*
   �eE�pO�jI�hJ�]A      ���������������������������������������������������������������������������������������������������������������������      rR8�\@�fG�rQ�oK�iD   �jE�hC�\7�zU�zU�xS�uP�yT�rM�~Y�wR�[	�^>�cD,)'      ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������fff      PF>}Y<~Y=~Y<}X:|X;vS7M5#
(?
+
#6$
$ R;)kL2vU:wT8uQ6zW:wS7uR6xT9L5#                              /"
                           
1$



+






2#cB(   �aA�tR�kI�gD�pK�iD�{W�xS�tP�sO�rM�d at S<)<'�pK�tP�{W�kH�jG�mJ444������������������1.,yO.�^>bE/$�^>�`A�]>�]@�[=lN9   1#{U8pI,�^?rJ+   \?�fF�fF�`@~Y;      ���������������������������������������������������������������������������������������������������������������������      vT:vR4�gG�];�tP�fG   �kG�rM�sO�pK�[7�qL�rM�Z�rM�jF�qL�hD)
gI3�dE.+)      ���������������������������������������������������������������������������������������������������������������������������������� [...]
+	   @=:EB>1.+-*(IDBLGDNIFPLHRMIROJSOKTOKSNIOKHMIEKFCIFBIEAIEAIEAIEAIDBIDBIEAHDAHEAJFBIEAIDAHDAHCAHDAIDBIEBJFBIEBJFBJFBJFCIEBJFBJFCJFBJFBIFBLGDNJFRMI                                             TOKga\f`\c^Ye_[d^Y


iiiiiigggfffffffff_ZV^XT                                          _YU]XTZUQVRM                                                                                                                     


PKGUPMXTO_YUd_[                                          \VR      ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ooo                                                                                                                                                                                                                                             [...]
\ No newline at end of file
diff --git a/tests/isBinaryFile/README.md b/tests/isBinaryFile/README.md
new file mode 100644
index 0000000..5a10e89
--- /dev/null
+++ b/tests/isBinaryFile/README.md
@@ -0,0 +1,25 @@
+Test files borrowed from https://github.com/gjtorikian/isBinaryFile
+by Garen J. Torikian
+
+Copyright (c) 2013 Garen Torikian
+
+MIT License
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/tests/isBinaryFile/encodings/big5.txt b/tests/isBinaryFile/encodings/big5.txt
new file mode 100644
index 0000000..1b35c0f
--- /dev/null
+++ b/tests/isBinaryFile/encodings/big5.txt
@@ -0,0 +1 @@
+BIG5_TW   �Тעբ��s�X�c�餤�����
diff --git a/tests/isBinaryFile/encodings/big5_B.txt b/tests/isBinaryFile/encodings/big5_B.txt
new file mode 100644
index 0000000..a5d031c
--- /dev/null
+++ b/tests/isBinaryFile/encodings/big5_B.txt
@@ -0,0 +1,22 @@
+OpenVPN HOWTO ���媩 
+�@�̡Gliyi Ķ �峹�X�B�Gopenvpn �o���ɶ��G2005-09-16 �I���G3435 �r��G �i�p �� �j�j  
+OpenVPN HOWTO 
+ 
+����
+�����ɴy�z�@�Ө嫬��Home��Office���q�H��OpenVPN���t�m�C�o��HOWTO�|�F�@�ӧ��㪺�t�m��ҡA�bman page��U�������@�ӧ�²�檺�Ҥl�C 
+
+��HOWTO�����٦��p�U�榡�G 
+
+PDF 
+PostScript 
+
+���[������
+��L���@�ǫܦn�����ɤ�HOWTO �����P��ҤU�t�mOpenVPN�ӧ@�C 
+
+�򥻪��G�D(Tunnel)����
+OpenVPN�i�H�Ыب�ذ򥻪��G�D�����G
+
+Routed IP tunnels -- �A�Ω󤣻ݼs�����I���IIP(point-to-point)�q�H�C��_�����G�D�Ӳ���o�󦳮IJv�ǦӥB����t�m�C��HOWTO���ɲ[�\�FRouted IP tunnels�C 
+Bridged Ethernet Tunnels(�����G�D) -- ��Ω�IP��ij�ΫDIP��ij���G�D�C�o���������G�D��A�X��ϥμs��(broadcast)�����ΡA��p�Y��Windows�������C�t�m�_�ӵy�L�_���ǡC��������G�D��Mini-HOWTO�C 
+Routed IP tunnel HOWTO
+�ڭ̷|���մy�z�@�ӧ��㪺�t�ΰt�m�A�����A�Ψ쨾����AVPN�ANAT�H�ΥL�̩��������ۤ����p�A�ڭ̤��|�t�ߪ��@�����@���������QVPN�]�m�C
diff --git a/tests/isBinaryFile/encodings/bom_utf-16.txt b/tests/isBinaryFile/encodings/bom_utf-16.txt
new file mode 100644
index 0000000..83bd768
Binary files /dev/null and b/tests/isBinaryFile/encodings/bom_utf-16.txt differ
diff --git a/tests/isBinaryFile/encodings/bom_utf-16le.txt b/tests/isBinaryFile/encodings/bom_utf-16le.txt
new file mode 100644
index 0000000..0ac1e46
Binary files /dev/null and b/tests/isBinaryFile/encodings/bom_utf-16le.txt differ
diff --git a/tests/isBinaryFile/encodings/bom_utf-32.txt b/tests/isBinaryFile/encodings/bom_utf-32.txt
new file mode 100644
index 0000000..8804c33
Binary files /dev/null and b/tests/isBinaryFile/encodings/bom_utf-32.txt differ
diff --git a/tests/isBinaryFile/encodings/bom_utf-32le.txt b/tests/isBinaryFile/encodings/bom_utf-32le.txt
new file mode 100644
index 0000000..4950e14
Binary files /dev/null and b/tests/isBinaryFile/encodings/bom_utf-32le.txt differ
diff --git a/tests/isBinaryFile/encodings/bom_utf-8.txt b/tests/isBinaryFile/encodings/bom_utf-8.txt
new file mode 100644
index 0000000..da93914
--- /dev/null
+++ b/tests/isBinaryFile/encodings/bom_utf-8.txt
@@ -0,0 +1 @@
+UTF-8 chinese UTF8格式的中文,包含中文标点符号“”。看看能不能看清楚
diff --git a/tests/isBinaryFile/encodings/test-gb.txt b/tests/isBinaryFile/encodings/test-gb.txt
new file mode 100644
index 0000000..d48e3a9
--- /dev/null
+++ b/tests/isBinaryFile/encodings/test-gb.txt
@@ -0,0 +1 @@
+��ͨ
diff --git a/tests/isBinaryFile/encodings/test-gb2.txt b/tests/isBinaryFile/encodings/test-gb2.txt
new file mode 100644
index 0000000..651769e
--- /dev/null
+++ b/tests/isBinaryFile/encodings/test-gb2.txt
@@ -0,0 +1 @@
+��ͨͨ��ͨͨ����
diff --git a/tests/isBinaryFile/encodings/test-kr.txt b/tests/isBinaryFile/encodings/test-kr.txt
new file mode 100644
index 0000000..8d59bba
--- /dev/null
+++ b/tests/isBinaryFile/encodings/test-kr.txt
@@ -0,0 +1 @@
+�׷��� �̷��� ���� ���� �ø������ϴ� ����
diff --git a/tests/isBinaryFile/encodings/test-latin.txt b/tests/isBinaryFile/encodings/test-latin.txt
new file mode 100644
index 0000000..688ea43
--- /dev/null
+++ b/tests/isBinaryFile/encodings/test-latin.txt
@@ -0,0 +1,18 @@
+
+-*- coding: latin-1 -*-
+
+Mit freundlichen Gr��en
+mit freundlichen Gr��en
+
+Das ist ein �pfel.
+Was k�nnen Sie jetzt machen?
+
+Machen wir eine �bung!
+Wor�ber?
+Dar�ber.
+
+Das ist euro: �
+Euro: �!
+
+�Clinux
+
diff --git a/tests/isBinaryFile/encodings/test-shishi.txt b/tests/isBinaryFile/encodings/test-shishi.txt
new file mode 100644
index 0000000..f7afb0a
--- /dev/null
+++ b/tests/isBinaryFile/encodings/test-shishi.txt
@@ -0,0 +1,2 @@
+ʩʦʵʫʿ,ʶʳʯʨʬʷ,ʾʷʵ,ʱʰʮʭʺʪʯʨʬ,ʼʹʯʨʬʴ,ʵʷʫ.
+ʫʦʧʨʩʺʪʫʿʫʬʮʭʮʯʰʱʲʳʴʵʶʷʸʹʺʻʼʽʾʫʿ
diff --git a/tests/isBinaryFile/encodings/test-utf16be.txt b/tests/isBinaryFile/encodings/test-utf16be.txt
new file mode 100644
index 0000000..bc5cc2e
Binary files /dev/null and b/tests/isBinaryFile/encodings/test-utf16be.txt differ
diff --git a/tests/isBinaryFile/encodings/utf8cn.txt b/tests/isBinaryFile/encodings/utf8cn.txt
new file mode 100644
index 0000000..3c0f00b
--- /dev/null
+++ b/tests/isBinaryFile/encodings/utf8cn.txt
@@ -0,0 +1 @@
+UTF-8 chinese UTF8格式的中文,包含中文标点符号“”。看看能不能看清楚
diff --git a/tests/isBinaryFile/encodings/utf_8.txt b/tests/isBinaryFile/encodings/utf_8.txt
new file mode 100644
index 0000000..0c3dd90
--- /dev/null
+++ b/tests/isBinaryFile/encodings/utf_8.txt
@@ -0,0 +1 @@
+中文
diff --git a/tests/isBinaryFile/grep b/tests/isBinaryFile/grep
new file mode 100755
index 0000000..b66cf83
Binary files /dev/null and b/tests/isBinaryFile/grep differ
diff --git a/tests/isBinaryFile/index.js b/tests/isBinaryFile/index.js
new file mode 100644
index 0000000..2b468f8
--- /dev/null
+++ b/tests/isBinaryFile/index.js
@@ -0,0 +1,156 @@
+var assert = require("assert");
+var fs = require("fs");
+var path = require("path");
+var isBinaryFile = require("../index");
+
+var FIXTURE_PATH = "./test/fixtures";
+
+describe('isBinaryFile()', function() {
+  it('should return true on a binary program', function(cb) {
+    isBinaryFile(path.join(FIXTURE_PATH, "grep"), function (err, result) {
+      assert(result);
+      cb();
+    });
+  });
+
+  it('should return true on a binary program, accepting bytes & size', function(cb) {
+    var bytes = fs.readFileSync(path.join(FIXTURE_PATH, "grep"));
+    var size = fs.lstatSync(path.join(FIXTURE_PATH, "grep")).size;
+
+    isBinaryFile(bytes, size, function (err, result) {
+      assert(result);
+      cb();
+    });
+  });
+
+  it('should return false on an extensionless script', function(cb) {
+    var bytes = fs.readFileSync(path.join(FIXTURE_PATH, "perl_script"));
+    var size = fs.lstatSync(path.join(FIXTURE_PATH, "perl_script")).size;
+
+    isBinaryFile(bytes, size, function (err, result) {
+      assert(!result);
+      cb();
+    });
+  });
+
+  it('should return false on an extensionless script, accepting bytes & size', function(cb) {
+    isBinaryFile(path.join(FIXTURE_PATH, "perl_script"), function (err, result) {
+      assert(!result);
+      cb();
... 359 lines suppressed ...

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/python-modules/packages/binaryornot.git



More information about the Python-modules-commits mailing list