diff options
21 files changed, 1319 insertions, 920 deletions
diff --git a/Lib/importlib/_adapters.py b/Lib/importlib/_adapters.py new file mode 100644 index 0000000..eedde49 --- /dev/null +++ b/Lib/importlib/_adapters.py @@ -0,0 +1,82 @@ +from contextlib import suppress + +from . import abc + + +class SpecLoaderAdapter: + """ + Adapt a package spec to adapt the underlying loader. + """ + + def __init__(self, spec, adapter=lambda spec: spec.loader): + self.spec = spec + self.loader = adapter(spec) + + def __getattr__(self, name): + return getattr(self.spec, name) + + +class TraversableResourcesLoader: + """ + Adapt a loader to provide TraversableResources. + """ + + def __init__(self, spec): + self.spec = spec + + def get_resource_reader(self, name): + return DegenerateFiles(self.spec)._native() + + +class DegenerateFiles: + """ + Adapter for an existing or non-existant resource reader + to provide a degenerate .files(). + """ + + class Path(abc.Traversable): + def iterdir(self): + return iter(()) + + def is_dir(self): + return False + + is_file = exists = is_dir # type: ignore + + def joinpath(self, other): + return DegenerateFiles.Path() + + def name(self): + return '' + + def open(self): + raise ValueError() + + def __init__(self, spec): + self.spec = spec + + @property + def _reader(self): + with suppress(AttributeError): + return self.spec.loader.get_resource_reader(self.spec.name) + + def _native(self): + """ + Return the native reader if it supports files(). + """ + reader = self._reader + return reader if hasattr(reader, 'files') else self + + def __getattr__(self, attr): + return getattr(self._reader, attr) + + def files(self): + return DegenerateFiles.Path() + + +def wrap_spec(package): + """ + Construct a package spec with traversable compatibility + on the spec/loader/reader. + """ + return SpecLoaderAdapter(package.__spec__, TraversableResourcesLoader) diff --git a/Lib/importlib/_bootstrap_external.py b/Lib/importlib/_bootstrap_external.py index 3396d5d..2dab45d 100644 --- a/Lib/importlib/_bootstrap_external.py +++ b/Lib/importlib/_bootstrap_external.py @@ -1259,6 +1259,10 @@ class _NamespaceLoader: # Warning implemented in _load_module_shim(). return _bootstrap._load_module_shim(self, fullname) + def get_resource_reader(self, module): + from importlib.readers import NamespaceReader + return NamespaceReader(self._path) + # Finders ##################################################################### diff --git a/Lib/importlib/_common.py b/Lib/importlib/_common.py index 71ce6af..0338304 100644 --- a/Lib/importlib/_common.py +++ b/Lib/importlib/_common.py @@ -9,6 +9,8 @@ import importlib from typing import Union, Any, Optional from .abc import ResourceReader +from ._adapters import wrap_spec + Package = Union[types.ModuleType, str] @@ -43,18 +45,15 @@ def get_resource_reader(package): # zipimport.zipimporter does not support weak references, resulting in a # TypeError. That seems terrible. spec = package.__spec__ - reader = getattr(spec.loader, 'get_resource_reader', None) + reader = getattr(spec.loader, 'get_resource_reader', None) # type: ignore if reader is None: return None - return reader(spec.name) + return reader(spec.name) # type: ignore def resolve(cand): # type: (Package) -> types.ModuleType - return ( - cand if isinstance(cand, types.ModuleType) - else importlib.import_module(cand) - ) + return cand if isinstance(cand, types.ModuleType) else importlib.import_module(cand) def get_package(package): @@ -64,7 +63,7 @@ def get_package(package): Raise an exception if the resolved module is not a package. """ resolved = resolve(package) - if resolved.__spec__.submodule_search_locations is None: + if wrap_spec(resolved).submodule_search_locations is None: raise TypeError('{!r} is not a package'.format(package)) return resolved @@ -74,7 +73,7 @@ def from_package(package): Return a Traversable object for the given package. """ - spec = package.__spec__ + spec = wrap_spec(package) reader = spec.loader.get_resource_reader(spec.name) return reader.files() diff --git a/Lib/importlib/abc.py b/Lib/importlib/abc.py index 55e7088..4be51e2 100644 --- a/Lib/importlib/abc.py +++ b/Lib/importlib/abc.py @@ -14,6 +14,7 @@ except ImportError: from ._abc import Loader import abc import warnings +from typing import BinaryIO, Iterable, Text from typing import Protocol, runtime_checkable @@ -297,49 +298,45 @@ _register(SourceLoader, machinery.SourceFileLoader) class ResourceReader(metaclass=abc.ABCMeta): - - """Abstract base class to provide resource-reading support. - - Loaders that support resource reading are expected to implement - the ``get_resource_reader(fullname)`` method and have it either return None - or an object compatible with this ABC. - """ + """Abstract base class for loaders to provide resource reading support.""" @abc.abstractmethod - def open_resource(self, resource): + def open_resource(self, resource: Text) -> BinaryIO: """Return an opened, file-like object for binary reading. - The 'resource' argument is expected to represent only a file name - and thus not contain any subdirectory components. - + The 'resource' argument is expected to represent only a file name. If the resource cannot be found, FileNotFoundError is raised. """ + # This deliberately raises FileNotFoundError instead of + # NotImplementedError so that if this method is accidentally called, + # it'll still do the right thing. raise FileNotFoundError @abc.abstractmethod - def resource_path(self, resource): + def resource_path(self, resource: Text) -> Text: """Return the file system path to the specified resource. - The 'resource' argument is expected to represent only a file name - and thus not contain any subdirectory components. - + The 'resource' argument is expected to represent only a file name. If the resource does not exist on the file system, raise FileNotFoundError. """ + # This deliberately raises FileNotFoundError instead of + # NotImplementedError so that if this method is accidentally called, + # it'll still do the right thing. raise FileNotFoundError @abc.abstractmethod - def is_resource(self, name): - """Return True if the named 'name' is consider a resource.""" + def is_resource(self, path: Text) -> bool: + """Return True if the named 'path' is a resource. + + Files are resources, directories are not. + """ raise FileNotFoundError @abc.abstractmethod - def contents(self): - """Return an iterable of strings over the contents of the package.""" - return [] - - -_register(ResourceReader, machinery.SourceFileLoader) + def contents(self) -> Iterable[str]: + """Return an iterable of entries in `package`.""" + raise FileNotFoundError @runtime_checkable @@ -355,26 +352,28 @@ class Traversable(Protocol): Yield Traversable objects in self """ - @abc.abstractmethod def read_bytes(self): """ Read contents of self as bytes """ + with self.open('rb') as strm: + return strm.read() - @abc.abstractmethod def read_text(self, encoding=None): """ - Read contents of self as bytes + Read contents of self as text """ + with self.open(encoding=encoding) as strm: + return strm.read() @abc.abstractmethod - def is_dir(self): + def is_dir(self) -> bool: """ Return True if self is a dir """ @abc.abstractmethod - def is_file(self): + def is_file(self) -> bool: """ Return True if self is a file """ @@ -385,11 +384,11 @@ class Traversable(Protocol): Return Traversable child in self """ - @abc.abstractmethod def __truediv__(self, child): """ Return Traversable child in self """ + return self.joinpath(child) @abc.abstractmethod def open(self, mode='r', *args, **kwargs): @@ -402,14 +401,18 @@ class Traversable(Protocol): """ @abc.abstractproperty - def name(self): - # type: () -> str + def name(self) -> str: """ The base name of this object without any parent references. """ class TraversableResources(ResourceReader): + """ + The required interface for providing traversable + resources. + """ + @abc.abstractmethod def files(self): """Return a Traversable object for the loaded package.""" diff --git a/Lib/importlib/readers.py b/Lib/importlib/readers.py index 74a63e4..535c828 100644 --- a/Lib/importlib/readers.py +++ b/Lib/importlib/readers.py @@ -1,8 +1,13 @@ +import collections import zipfile import pathlib from . import abc +def remove_duplicates(items): + return iter(collections.OrderedDict.fromkeys(items)) + + class FileReader(abc.TraversableResources): def __init__(self, loader): self.path = pathlib.Path(loader.path).parent @@ -39,3 +44,80 @@ class ZipReader(abc.TraversableResources): def files(self): return zipfile.Path(self.archive, self.prefix) + + +class MultiplexedPath(abc.Traversable): + """ + Given a series of Traversable objects, implement a merged + version of the interface across all objects. Useful for + namespace packages which may be multihomed at a single + name. + """ + + def __init__(self, *paths): + self._paths = list(map(pathlib.Path, remove_duplicates(paths))) + if not self._paths: + message = 'MultiplexedPath must contain at least one path' + raise FileNotFoundError(message) + if not all(path.is_dir() for path in self._paths): + raise NotADirectoryError('MultiplexedPath only supports directories') + + def iterdir(self): + visited = [] + for path in self._paths: + for file in path.iterdir(): + if file.name in visited: + continue + visited.append(file.name) + yield file + + def read_bytes(self): + raise FileNotFoundError(f'{self} is not a file') + + def read_text(self, *args, **kwargs): + raise FileNotFoundError(f'{self} is not a file') + + def is_dir(self): + return True + + def is_file(self): + return False + + def joinpath(self, child): + # first try to find child in current paths + for file in self.iterdir(): + if file.name == child: + return file + # if it does not exist, construct it with the first path + return self._paths[0] / child + + __truediv__ = joinpath + + def open(self, *args, **kwargs): + raise FileNotFoundError('{} is not a file'.format(self)) + + def name(self): + return self._paths[0].name + + def __repr__(self): + return 'MultiplexedPath({})'.format( + ', '.join("'{}'".format(path) for path in self._paths) + ) + + +class NamespaceReader(abc.TraversableResources): + def __init__(self, namespace_path): + if 'NamespacePath' not in str(namespace_path): + raise ValueError('Invalid path') + self.path = MultiplexedPath(*list(namespace_path)) + + def resource_path(self, resource): + """ + Return the file system path to prevent + `resources.path()` from creating a temporary + copy. + """ + return str(self.path.joinpath(resource)) + + def files(self): + return self.path diff --git a/Lib/importlib/resources.py b/Lib/importlib/resources.py index 4169171..db0e0c0 100644 --- a/Lib/importlib/resources.py +++ b/Lib/importlib/resources.py @@ -3,8 +3,10 @@ import io from . import _common from ._common import as_file, files +from .abc import ResourceReader from contextlib import suppress from importlib.abc import ResourceLoader +from importlib.machinery import ModuleSpec from io import BytesIO, TextIOWrapper from pathlib import Path from types import ModuleType @@ -18,6 +20,7 @@ from functools import singledispatch __all__ = [ 'Package', 'Resource', + 'ResourceReader', 'as_file', 'contents', 'files', @@ -27,7 +30,7 @@ __all__ = [ 'path', 'read_binary', 'read_text', - ] +] Package = Union[str, ModuleType] @@ -41,36 +44,45 @@ def open_binary(package: Package, resource: Resource) -> BinaryIO: reader = _common.get_resource_reader(package) if reader is not None: return reader.open_resource(resource) - absolute_package_path = os.path.abspath( - package.__spec__.origin or 'non-existent file') - package_path = os.path.dirname(absolute_package_path) - full_path = os.path.join(package_path, resource) - try: - return open(full_path, mode='rb') - except OSError: - # Just assume the loader is a resource loader; all the relevant - # importlib.machinery loaders are and an AttributeError for - # get_data() will make it clear what is needed from the loader. - loader = cast(ResourceLoader, package.__spec__.loader) - data = None - if hasattr(package.__spec__.loader, 'get_data'): - with suppress(OSError): - data = loader.get_data(full_path) - if data is None: - package_name = package.__spec__.name - message = '{!r} resource not found in {!r}'.format( - resource, package_name) - raise FileNotFoundError(message) - return BytesIO(data) - - -def open_text(package: Package, - resource: Resource, - encoding: str = 'utf-8', - errors: str = 'strict') -> TextIO: + spec = cast(ModuleSpec, package.__spec__) + # Using pathlib doesn't work well here due to the lack of 'strict' + # argument for pathlib.Path.resolve() prior to Python 3.6. + if spec.submodule_search_locations is not None: + paths = spec.submodule_search_locations + elif spec.origin is not None: + paths = [os.path.dirname(os.path.abspath(spec.origin))] + + for package_path in paths: + full_path = os.path.join(package_path, resource) + try: + return open(full_path, mode='rb') + except OSError: + # Just assume the loader is a resource loader; all the relevant + # importlib.machinery loaders are and an AttributeError for + # get_data() will make it clear what is needed from the loader. + loader = cast(ResourceLoader, spec.loader) + data = None + if hasattr(spec.loader, 'get_data'): + with suppress(OSError): + data = loader.get_data(full_path) + if data is not None: + return BytesIO(data) + + raise FileNotFoundError( + '{!r} resource not found in {!r}'.format(resource, spec.name) + ) + + +def open_text( + package: Package, + resource: Resource, + encoding: str = 'utf-8', + errors: str = 'strict', +) -> TextIO: """Return a file-like object opened for text reading of the resource.""" return TextIOWrapper( - open_binary(package, resource), encoding=encoding, errors=errors) + open_binary(package, resource), encoding=encoding, errors=errors + ) def read_binary(package: Package, resource: Resource) -> bytes: @@ -79,10 +91,12 @@ def read_binary(package: Package, resource: Resource) -> bytes: return fp.read() -def read_text(package: Package, - resource: Resource, - encoding: str = 'utf-8', - errors: str = 'strict') -> str: +def read_text( + package: Package, + resource: Resource, + encoding: str = 'utf-8', + errors: str = 'strict', +) -> str: """Return the decoded string of the resource. The decoding-related arguments have the same semantics as those of @@ -93,8 +107,9 @@ def read_text(package: Package, def path( - package: Package, resource: Resource, - ) -> 'ContextManager[Path]': + package: Package, + resource: Resource, +) -> 'ContextManager[Path]': """A context manager providing a file path object to the resource. If the resource does not already exist on its own on the file system, @@ -106,15 +121,17 @@ def path( reader = _common.get_resource_reader(_common.get_package(package)) return ( _path_from_reader(reader, _common.normalize_path(resource)) - if reader else - _common.as_file( - _common.files(package).joinpath(_common.normalize_path(resource))) + if reader + else _common.as_file( + _common.files(package).joinpath(_common.normalize_path(resource)) ) + ) def _path_from_reader(reader, resource): - return _path_from_resource_path(reader, resource) or \ - _path_from_open_resource(reader, resource) + return _path_from_resource_path(reader, resource) or _path_from_open_resource( + reader, resource + ) def _path_from_resource_path(reader, resource): @@ -154,15 +171,10 @@ def contents(package: Package) -> Iterable[str]: reader = _common.get_resource_reader(package) if reader is not None: return _ensure_sequence(reader.contents()) - # Is the package a namespace package? By definition, namespace packages - # cannot have resources. - namespace = ( - package.__spec__.origin is None or - package.__spec__.origin == 'namespace' - ) - if namespace or not package.__spec__.has_location: - return () - return list(item.name for item in _common.from_package(package).iterdir()) + transversable = _common.from_package(package) + if transversable.is_dir(): + return list(item.name for item in transversable.iterdir()) + return [] @singledispatch diff --git a/Lib/test/test_importlib/namespacedata01/binary.file b/Lib/test/test_importlib/namespacedata01/binary.file Binary files differnew file mode 100644 index 0000000..eaf36c1 --- /dev/null +++ b/Lib/test/test_importlib/namespacedata01/binary.file diff --git a/Lib/test/test_importlib/namespacedata01/utf-16.file b/Lib/test/test_importlib/namespacedata01/utf-16.file Binary files differnew file mode 100644 index 0000000..2cb7722 --- /dev/null +++ b/Lib/test/test_importlib/namespacedata01/utf-16.file diff --git a/Lib/test/test_importlib/namespacedata01/utf-8.file b/Lib/test/test_importlib/namespacedata01/utf-8.file new file mode 100644 index 0000000..1c0132a --- /dev/null +++ b/Lib/test/test_importlib/namespacedata01/utf-8.file @@ -0,0 +1 @@ +Hello, UTF-8 world! diff --git a/Lib/test/test_importlib/test_abc.py b/Lib/test/test_importlib/test_abc.py index d8b9fc8..d1c89c1 100644 --- a/Lib/test/test_importlib/test_abc.py +++ b/Lib/test/test_importlib/test_abc.py @@ -338,7 +338,9 @@ class ResourceReaderDefaultsTests(ABCTestHarness): self.ins.is_resource('dummy_file') def test_contents(self): - self.assertEqual([], list(self.ins.contents())) + with self.assertRaises(FileNotFoundError): + self.ins.contents() + (Frozen_RRDefaultTests, Source_RRDefaultsTests diff --git a/Lib/test/test_importlib/test_files.py b/Lib/test/test_importlib/test_files.py index fa7af82..1e7a1f3 100644 --- a/Lib/test/test_importlib/test_files.py +++ b/Lib/test/test_importlib/test_files.py @@ -21,7 +21,7 @@ class FilesTests: @unittest.skipUnless( hasattr(typing, 'runtime_checkable'), "Only suitable when typing supports runtime_checkable", - ) + ) def test_traversable(self): assert isinstance(resources.files(self.data), Traversable) diff --git a/Lib/test/test_importlib/test_open.py b/Lib/test/test_importlib/test_open.py index fd6e84b..b75675f 100644 --- a/Lib/test/test_importlib/test_open.py +++ b/Lib/test/test_importlib/test_open.py @@ -29,34 +29,32 @@ class OpenTests: self.assertEqual(result, 'Hello, UTF-8 world!\n') def test_open_text_given_encoding(self): - with resources.open_text( - self.data, 'utf-16.file', 'utf-16', 'strict') as fp: + with resources.open_text(self.data, 'utf-16.file', 'utf-16', 'strict') as fp: result = fp.read() self.assertEqual(result, 'Hello, UTF-16 world!\n') def test_open_text_with_errors(self): # Raises UnicodeError without the 'errors' argument. - with resources.open_text( - self.data, 'utf-16.file', 'utf-8', 'strict') as fp: + with resources.open_text(self.data, 'utf-16.file', 'utf-8', 'strict') as fp: self.assertRaises(UnicodeError, fp.read) - with resources.open_text( - self.data, 'utf-16.file', 'utf-8', 'ignore') as fp: + with resources.open_text(self.data, 'utf-16.file', 'utf-8', 'ignore') as fp: result = fp.read() self.assertEqual( result, 'H\x00e\x00l\x00l\x00o\x00,\x00 ' '\x00U\x00T\x00F\x00-\x001\x006\x00 ' - '\x00w\x00o\x00r\x00l\x00d\x00!\x00\n\x00') + '\x00w\x00o\x00r\x00l\x00d\x00!\x00\n\x00', + ) def test_open_binary_FileNotFoundError(self): self.assertRaises( - FileNotFoundError, - resources.open_binary, self.data, 'does-not-exist') + FileNotFoundError, resources.open_binary, self.data, 'does-not-exist' + ) def test_open_text_FileNotFoundError(self): self.assertRaises( - FileNotFoundError, - resources.open_text, self.data, 'does-not-exist') + FileNotFoundError, resources.open_text, self.data, 'does-not-exist' + ) class OpenDiskTests(OpenTests, unittest.TestCase): @@ -64,6 +62,13 @@ class OpenDiskTests(OpenTests, unittest.TestCase): self.data = data01 +class OpenDiskNamespaceTests(OpenTests, unittest.TestCase): + def setUp(self): + from . import namespacedata01 + + self.data = namespacedata01 + + class OpenZipTests(OpenTests, util.ZipSetup, unittest.TestCase): pass diff --git a/Lib/test/test_importlib/test_path.py b/Lib/test/test_importlib/test_path.py index abf8086..2110770 100644 --- a/Lib/test/test_importlib/test_path.py +++ b/Lib/test/test_importlib/test_path.py @@ -1,3 +1,4 @@ +import io import unittest from importlib import resources @@ -37,6 +38,17 @@ class PathDiskTests(PathTests, unittest.TestCase): assert 'data' in str(path) +class PathMemoryTests(PathTests, unittest.TestCase): + def setUp(self): + file = io.BytesIO(b'Hello, UTF-8 world!\n') + self.addCleanup(file.close) + self.data = util.create_package( + file=file, path=FileNotFoundError("package exists only in memory") + ) + self.data.__spec__.origin = None + self.data.__spec__.has_location = False + + class PathZipTests(PathTests, util.ZipSetup, unittest.TestCase): def test_remove_in_context_manager(self): # It is not an error if the file that was temporarily stashed on the diff --git a/Lib/test/test_importlib/test_read.py b/Lib/test/test_importlib/test_read.py index ff78d0b..f6ec13a 100644 --- a/Lib/test/test_importlib/test_read.py +++ b/Lib/test/test_importlib/test_read.py @@ -25,20 +25,19 @@ class ReadTests: self.assertEqual(result, 'Hello, UTF-8 world!\n') def test_read_text_given_encoding(self): - result = resources.read_text( - self.data, 'utf-16.file', encoding='utf-16') + result = resources.read_text(self.data, 'utf-16.file', encoding='utf-16') self.assertEqual(result, 'Hello, UTF-16 world!\n') def test_read_text_with_errors(self): # Raises UnicodeError without the 'errors' argument. - self.assertRaises( - UnicodeError, resources.read_text, self.data, 'utf-16.file') + self.assertRaises(UnicodeError, resources.read_text, self.data, 'utf-16.file') result = resources.read_text(self.data, 'utf-16.file', errors='ignore') self.assertEqual( result, 'H\x00e\x00l\x00l\x00o\x00,\x00 ' '\x00U\x00T\x00F\x00-\x001\x006\x00 ' - '\x00w\x00o\x00r\x00l\x00d\x00!\x00\n\x00') + '\x00w\x00o\x00r\x00l\x00d\x00!\x00\n\x00', + ) class ReadDiskTests(ReadTests, unittest.TestCase): @@ -48,13 +47,11 @@ class ReadDiskTests(ReadTests, unittest.TestCase): class ReadZipTests(ReadTests, util.ZipSetup, unittest.TestCase): def test_read_submodule_resource(self): submodule = import_module('ziptestdata.subdirectory') - result = resources.read_binary( - submodule, 'binary.file') + result = resources.read_binary(submodule, 'binary.file') self.assertEqual(result, b'\0\1\2\3') def test_read_submodule_resource_by_name(self): - result = resources.read_binary( - 'ziptestdata.subdirectory', 'binary.file') + result = resources.read_binary('ziptestdata.subdirectory', 'binary.file') self.assertEqual(result, b'\0\1\2\3') diff --git a/Lib/test/test_importlib/test_reader.py b/Lib/test/test_importlib/test_reader.py new file mode 100644 index 0000000..905d4fc --- /dev/null +++ b/Lib/test/test_importlib/test_reader.py @@ -0,0 +1,123 @@ +import os.path +import sys +import pathlib +import unittest + +from importlib import import_module +from importlib.readers import MultiplexedPath, NamespaceReader + + +class MultiplexedPathTest(unittest.TestCase): + @classmethod + def setUpClass(cls): + path = pathlib.Path(__file__).parent / 'namespacedata01' + cls.folder = str(path) + + def test_init_no_paths(self): + with self.assertRaises(FileNotFoundError): + MultiplexedPath() + + def test_init_file(self): + with self.assertRaises(NotADirectoryError): + MultiplexedPath(os.path.join(self.folder, 'binary.file')) + + def test_iterdir(self): + contents = {path.name for path in MultiplexedPath(self.folder).iterdir()} + try: + contents.remove('__pycache__') + except (KeyError, ValueError): + pass + self.assertEqual(contents, {'binary.file', 'utf-16.file', 'utf-8.file'}) + + def test_iterdir_duplicate(self): + data01 = os.path.abspath(os.path.join(__file__, '..', 'data01')) + contents = { + path.name for path in MultiplexedPath(self.folder, data01).iterdir() + } + for remove in ('__pycache__', '__init__.pyc'): + try: + contents.remove(remove) + except (KeyError, ValueError): + pass + self.assertEqual( + contents, + {'__init__.py', 'binary.file', 'subdirectory', 'utf-16.file', 'utf-8.file'}, + ) + + def test_is_dir(self): + self.assertEqual(MultiplexedPath(self.folder).is_dir(), True) + + def test_is_file(self): + self.assertEqual(MultiplexedPath(self.folder).is_file(), False) + + def test_open_file(self): + path = MultiplexedPath(self.folder) + with self.assertRaises(FileNotFoundError): + path.read_bytes() + with self.assertRaises(FileNotFoundError): + path.read_text() + with self.assertRaises(FileNotFoundError): + path.open() + + def test_join_path(self): + print('test_join_path') + prefix = os.path.abspath(os.path.join(__file__, '..')) + data01 = os.path.join(prefix, 'data01') + path = MultiplexedPath(self.folder, data01) + self.assertEqual( + str(path.joinpath('binary.file'))[len(prefix) + 1 :], + os.path.join('namespacedata01', 'binary.file'), + ) + self.assertEqual( + str(path.joinpath('subdirectory'))[len(prefix) + 1 :], + os.path.join('data01', 'subdirectory'), + ) + self.assertEqual( + str(path.joinpath('imaginary'))[len(prefix) + 1 :], + os.path.join('namespacedata01', 'imaginary'), + ) + + def test_repr(self): + self.assertEqual( + repr(MultiplexedPath(self.folder)), + "MultiplexedPath('{}')".format(self.folder), + ) + + +class NamespaceReaderTest(unittest.TestCase): + site_dir = str(pathlib.Path(__file__).parent) + + @classmethod + def setUpClass(cls): + sys.path.append(cls.site_dir) + + @classmethod + def tearDownClass(cls): + sys.path.remove(cls.site_dir) + + def test_init_error(self): + with self.assertRaises(ValueError): + NamespaceReader(['path1', 'path2']) + + def test_resource_path(self): + namespacedata01 = import_module('namespacedata01') + reader = NamespaceReader(namespacedata01.__spec__.submodule_search_locations) + + root = os.path.abspath(os.path.join(__file__, '..', 'namespacedata01')) + self.assertEqual( + reader.resource_path('binary.file'), os.path.join(root, 'binary.file') + ) + self.assertEqual( + reader.resource_path('imaginary'), os.path.join(root, 'imaginary') + ) + + def test_files(self): + namespacedata01 = import_module('namespacedata01') + reader = NamespaceReader(namespacedata01.__spec__.submodule_search_locations) + root = os.path.abspath(os.path.join(__file__, '..', 'namespacedata01')) + self.assertIsInstance(reader.files(), MultiplexedPath) + self.assertEqual(repr(reader.files()), "MultiplexedPath('{}')".format(root)) + + +if __name__ == '__main__': + unittest.main() diff --git a/Lib/test/test_importlib/test_resource.py b/Lib/test/test_importlib/test_resource.py index 1d1bdad..f8d861e 100644 --- a/Lib/test/test_importlib/test_resource.py +++ b/Lib/test/test_importlib/test_resource.py @@ -27,20 +27,21 @@ class ResourceTests: def test_contents(self): contents = set(resources.contents(self.data)) # There may be cruft in the directory listing of the data directory. - # Under Python 3 we could have a __pycache__ directory, and under - # Python 2 we could have .pyc files. These are both artifacts of the - # test suite importing these modules and writing these caches. They - # aren't germane to this test, so just filter them out. + # It could have a __pycache__ directory, + # an artifact of the + # test suite importing these modules, which + # are not germane to this test, so just filter them out. contents.discard('__pycache__') - contents.discard('__init__.pyc') - contents.discard('__init__.pyo') - self.assertEqual(contents, { - '__init__.py', - 'subdirectory', - 'utf-8.file', - 'binary.file', - 'utf-16.file', - }) + self.assertEqual( + contents, + { + '__init__.py', + 'subdirectory', + 'utf-8.file', + 'binary.file', + 'utf-16.file', + }, + ) class ResourceDiskTests(ResourceTests, unittest.TestCase): @@ -55,27 +56,26 @@ class ResourceZipTests(ResourceTests, util.ZipSetup, unittest.TestCase): class ResourceLoaderTests(unittest.TestCase): def test_resource_contents(self): package = util.create_package( - file=data01, path=data01.__file__, contents=['A', 'B', 'C']) - self.assertEqual( - set(resources.contents(package)), - {'A', 'B', 'C'}) + file=data01, path=data01.__file__, contents=['A', 'B', 'C'] + ) + self.assertEqual(set(resources.contents(package)), {'A', 'B', 'C'}) def test_resource_is_resource(self): package = util.create_package( - file=data01, path=data01.__file__, - contents=['A', 'B', 'C', 'D/E', 'D/F']) + file=data01, path=data01.__file__, contents=['A', 'B', 'C', 'D/E', 'D/F'] + ) self.assertTrue(resources.is_resource(package, 'B')) def test_resource_directory_is_not_resource(self): package = util.create_package( - file=data01, path=data01.__file__, - contents=['A', 'B', 'C', 'D/E', 'D/F']) + file=data01, path=data01.__file__, contents=['A', 'B', 'C', 'D/E', 'D/F'] + ) self.assertFalse(resources.is_resource(package, 'D')) def test_resource_missing_is_not_resource(self): package = util.create_package( - file=data01, path=data01.__file__, - contents=['A', 'B', 'C', 'D/E', 'D/F']) + file=data01, path=data01.__file__, contents=['A', 'B', 'C', 'D/E', 'D/F'] + ) self.assertFalse(resources.is_resource(package, 'Z')) @@ -86,90 +86,63 @@ class ResourceCornerCaseTests(unittest.TestCase): # 2. Are not on the file system # 3. Are not in a zip file module = util.create_package( - file=data01, path=data01.__file__, contents=['A', 'B', 'C']) + file=data01, path=data01.__file__, contents=['A', 'B', 'C'] + ) # Give the module a dummy loader. module.__loader__ = object() # Give the module a dummy origin. module.__file__ = '/path/which/shall/not/be/named' - if sys.version_info >= (3,): - module.__spec__.loader = module.__loader__ - module.__spec__.origin = module.__file__ + module.__spec__.loader = module.__loader__ + module.__spec__.origin = module.__file__ self.assertFalse(resources.is_resource(module, 'A')) -class ResourceFromZipsTest(util.ZipSetupBase, unittest.TestCase): - ZIP_MODULE = zipdata02 # type: ignore - - def test_unrelated_contents(self): - # https://gitlab.com/python-devs/importlib_resources/issues/44 - # - # Here we have a zip file with two unrelated subpackages. The bug - # reports that getting the contents of a resource returns unrelated - # files. - self.assertEqual( - set(resources.contents('ziptestdata.one')), - {'__init__.py', 'resource1.txt'}) - self.assertEqual( - set(resources.contents('ziptestdata.two')), - {'__init__.py', 'resource2.txt'}) - - -class SubdirectoryResourceFromZipsTest(util.ZipSetupBase, unittest.TestCase): - ZIP_MODULE = zipdata01 # type: ignore +class ResourceFromZipsTest01(util.ZipSetupBase, unittest.TestCase): + ZIP_MODULE = zipdata01 # type: ignore def test_is_submodule_resource(self): submodule = import_module('ziptestdata.subdirectory') - self.assertTrue( - resources.is_resource(submodule, 'binary.file')) + self.assertTrue(resources.is_resource(submodule, 'binary.file')) def test_read_submodule_resource_by_name(self): self.assertTrue( - resources.is_resource('ziptestdata.subdirectory', 'binary.file')) + resources.is_resource('ziptestdata.subdirectory', 'binary.file') + ) def test_submodule_contents(self): submodule = import_module('ziptestdata.subdirectory') self.assertEqual( - set(resources.contents(submodule)), - {'__init__.py', 'binary.file'}) + set(resources.contents(submodule)), {'__init__.py', 'binary.file'} + ) def test_submodule_contents_by_name(self): self.assertEqual( set(resources.contents('ziptestdata.subdirectory')), - {'__init__.py', 'binary.file'}) - - -class NamespaceTest(unittest.TestCase): - def test_namespaces_cannot_have_resources(self): - contents = resources.contents('test.test_importlib.data03.namespace') - self.assertFalse(list(contents)) - # Even though there is a file in the namespace directory, it is not - # considered a resource, since namespace packages can't have them. - self.assertFalse(resources.is_resource( - 'test.test_importlib.data03.namespace', - 'resource1.txt')) - # We should get an exception if we try to read it or open it. - self.assertRaises( - FileNotFoundError, - resources.open_text, - 'test.test_importlib.data03.namespace', 'resource1.txt') - self.assertRaises( - FileNotFoundError, - resources.open_binary, - 'test.test_importlib.data03.namespace', 'resource1.txt') - self.assertRaises( - FileNotFoundError, - resources.read_text, - 'test.test_importlib.data03.namespace', 'resource1.txt') - self.assertRaises( - FileNotFoundError, - resources.read_binary, - 'test.test_importlib.data03.namespace', 'resource1.txt') + {'__init__.py', 'binary.file'}, + ) + + +class ResourceFromZipsTest02(util.ZipSetupBase, unittest.TestCase): + ZIP_MODULE = zipdata02 # type: ignore + + def test_unrelated_contents(self): + """ + Test thata zip with two unrelated subpackages return + distinct resources. Ref python/importlib_resources#44. + """ + self.assertEqual( + set(resources.contents('ziptestdata.one')), {'__init__.py', 'resource1.txt'} + ) + self.assertEqual( + set(resources.contents('ziptestdata.two')), {'__init__.py', 'resource2.txt'} + ) class DeletingZipsTest(unittest.TestCase): """Having accessed resources in a zip file should not keep an open reference to the zip. """ + ZIP_MODULE = zipdata01 def setUp(self): @@ -241,5 +214,41 @@ class DeletingZipsTest(unittest.TestCase): del c +class ResourceFromNamespaceTest01(unittest.TestCase): + site_dir = str(pathlib.Path(__file__).parent) + + @classmethod + def setUpClass(cls): + sys.path.append(cls.site_dir) + + @classmethod + def tearDownClass(cls): + sys.path.remove(cls.site_dir) + + def test_is_submodule_resource(self): + self.assertTrue( + resources.is_resource(import_module('namespacedata01'), 'binary.file') + ) + + def test_read_submodule_resource_by_name(self): + self.assertTrue(resources.is_resource('namespacedata01', 'binary.file')) + + def test_submodule_contents(self): + contents = set(resources.contents(import_module('namespacedata01'))) + try: + contents.remove('__pycache__') + except KeyError: + pass + self.assertEqual(contents, {'binary.file', 'utf-8.file', 'utf-16.file'}) + + def test_submodule_contents_by_name(self): + contents = set(resources.contents('namespacedata01')) + try: + contents.remove('__pycache__') + except KeyError: + pass + self.assertEqual(contents, {'binary.file', 'utf-8.file', 'utf-16.file'}) + + if __name__ == '__main__': unittest.main() diff --git a/Lib/test/test_importlib/update-zips.py b/Lib/test/test_importlib/update-zips.py new file mode 100755 index 0000000..9ef0224 --- /dev/null +++ b/Lib/test/test_importlib/update-zips.py @@ -0,0 +1,53 @@ +""" +Generate the zip test data files. + +Run to build the tests/zipdataNN/ziptestdata.zip files from +files in tests/dataNN. + +Replaces the file with the working copy, but does commit anything +to the source repo. +""" + +import contextlib +import os +import pathlib +import zipfile + + +def main(): + """ + >>> from unittest import mock + >>> monkeypatch = getfixture('monkeypatch') + >>> monkeypatch.setattr(zipfile, 'ZipFile', mock.MagicMock()) + >>> print(); main() # print workaround for bpo-32509 + <BLANKLINE> + ...data01... -> ziptestdata/... + ... + ...data02... -> ziptestdata/... + ... + """ + suffixes = '01', '02' + tuple(map(generate, suffixes)) + + +def generate(suffix): + root = pathlib.Path(__file__).parent.relative_to(os.getcwd()) + zfpath = root / f'zipdata{suffix}/ziptestdata.zip' + with zipfile.ZipFile(zfpath, 'w') as zf: + for src, rel in walk(root / f'data{suffix}'): + dst = 'ziptestdata' / pathlib.PurePosixPath(rel.as_posix()) + print(src, '->', dst) + zf.write(src, dst) + + +def walk(datapath): + for dirpath, dirnames, filenames in os.walk(datapath): + with contextlib.suppress(KeyError): + dirnames.remove('__pycache__') + for filename in filenames: + res = pathlib.Path(dirpath) / filename + rel = res.relative_to(datapath) + yield res, rel + + +__name__ == '__main__' and main() diff --git a/Lib/test/test_importlib/zipdata01/ziptestdata.zip b/Lib/test/test_importlib/zipdata01/ziptestdata.zip Binary files differindex 12f7872..9a3bb07 100644 --- a/Lib/test/test_importlib/zipdata01/ziptestdata.zip +++ b/Lib/test/test_importlib/zipdata01/ziptestdata.zip diff --git a/Lib/test/test_importlib/zipdata02/ziptestdata.zip b/Lib/test/test_importlib/zipdata02/ziptestdata.zip Binary files differindex 9ee0058..d63ff51 100644 --- a/Lib/test/test_importlib/zipdata02/ziptestdata.zip +++ b/Lib/test/test_importlib/zipdata02/ziptestdata.zip diff --git a/Misc/NEWS.d/next/Library/2021-02-28-04-21-35.bpo-42129.V0KifQ.rst b/Misc/NEWS.d/next/Library/2021-02-28-04-21-35.bpo-42129.V0KifQ.rst new file mode 100644 index 0000000..4b8f502 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2021-02-28-04-21-35.bpo-42129.V0KifQ.rst @@ -0,0 +1,3 @@ +``importlib.resources`` now honors namespace packages, merging resources +from each location in the namespace as introduced in +``importlib_resources`` 3.2 and including incidental changes through 5.0.3. diff --git a/Python/importlib_external.h b/Python/importlib_external.h index 6b4cd39..108f59e 100644 --- a/Python/importlib_external.h +++ b/Python/importlib_external.h @@ -1529,7 +1529,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 67,0,0,0,115,20,0,0,0,100,1,100,2,108,0,109, 1,125,2,1,0,124,2,124,0,131,1,83,0,41,3,78, 114,0,0,0,0,41,1,218,10,70,105,108,101,82,101,97, - 100,101,114,41,2,90,17,105,109,112,111,114,116,108,105,98, + 100,101,114,41,2,218,17,105,109,112,111,114,116,108,105,98, 46,114,101,97,100,101,114,115,114,18,1,0,0,41,3,114, 130,0,0,0,114,231,0,0,0,114,18,1,0,0,114,7, 0,0,0,114,7,0,0,0,114,8,0,0,0,218,19,103, @@ -1540,7 +1540,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 114,41,13,114,137,0,0,0,114,136,0,0,0,114,138,0, 0,0,114,139,0,0,0,114,223,0,0,0,114,3,1,0, 0,114,9,1,0,0,114,147,0,0,0,114,235,0,0,0, - 114,190,0,0,0,114,242,0,0,0,114,19,1,0,0,90, + 114,190,0,0,0,114,242,0,0,0,114,20,1,0,0,90, 13,95,95,99,108,97,115,115,99,101,108,108,95,95,114,7, 0,0,0,114,7,0,0,0,114,12,1,0,0,114,8,0, 0,0,114,254,0,0,0,218,3,0,0,115,26,0,0,0, @@ -1580,7 +1580,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 0,115,6,0,0,0,8,2,16,1,255,128,122,32,83,111, 117,114,99,101,70,105,108,101,76,111,97,100,101,114,46,95, 99,97,99,104,101,95,98,121,116,101,99,111,100,101,114,75, - 0,0,0,114,22,1,0,0,99,3,0,0,0,0,0,0, + 0,0,0,114,23,1,0,0,99,3,0,0,0,0,0,0, 0,1,0,0,0,9,0,0,0,11,0,0,0,67,0,0, 0,115,254,0,0,0,116,0,124,1,131,1,92,2,125,4, 125,5,103,0,125,6,124,4,114,62,116,1,124,4,131,1, @@ -1608,7 +1608,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 5,109,107,100,105,114,218,15,70,105,108,101,69,120,105,115, 116,115,69,114,114,111,114,114,64,0,0,0,114,146,0,0, 0,114,160,0,0,0,114,84,0,0,0,41,9,114,130,0, - 0,0,114,58,0,0,0,114,42,0,0,0,114,23,1,0, + 0,0,114,58,0,0,0,114,42,0,0,0,114,24,1,0, 0,218,6,112,97,114,101,110,116,114,108,0,0,0,114,53, 0,0,0,114,49,0,0,0,114,243,0,0,0,114,7,0, 0,0,114,7,0,0,0,114,8,0,0,0,114,240,0,0, @@ -1621,9 +1621,9 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 41,7,114,137,0,0,0,114,136,0,0,0,114,138,0,0, 0,114,139,0,0,0,114,239,0,0,0,114,241,0,0,0, 114,240,0,0,0,114,7,0,0,0,114,7,0,0,0,114, - 7,0,0,0,114,8,0,0,0,114,20,1,0,0,12,4, + 7,0,0,0,114,8,0,0,0,114,21,1,0,0,12,4, 0,0,115,12,0,0,0,8,0,4,2,8,2,8,5,18, - 5,255,128,114,20,1,0,0,99,0,0,0,0,0,0,0, + 5,255,128,114,21,1,0,0,99,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,2,0,0,0,64,0,0, 0,115,32,0,0,0,101,0,90,1,100,0,90,2,100,1, 90,3,100,2,100,3,132,0,90,4,100,4,100,5,132,0, @@ -1660,9 +1660,9 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 117,114,99,101,78,41,6,114,137,0,0,0,114,136,0,0, 0,114,138,0,0,0,114,139,0,0,0,114,228,0,0,0, 114,244,0,0,0,114,7,0,0,0,114,7,0,0,0,114, - 7,0,0,0,114,8,0,0,0,114,26,1,0,0,57,4, + 7,0,0,0,114,8,0,0,0,114,27,1,0,0,57,4, 0,0,115,10,0,0,0,8,0,4,2,8,2,12,16,255, - 128,114,26,1,0,0,99,0,0,0,0,0,0,0,0,0, + 128,114,27,1,0,0,99,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,3,0,0,0,64,0,0,0,115, 92,0,0,0,101,0,90,1,100,0,90,2,100,1,90,3, 100,2,100,3,132,0,90,4,100,4,100,5,132,0,90,5, @@ -1754,7 +1754,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 103,101,46,60,108,111,99,97,108,115,62,46,60,103,101,110, 101,120,112,114,62,78,41,4,114,61,0,0,0,114,58,0, 0,0,218,3,97,110,121,114,219,0,0,0,114,234,0,0, - 0,114,7,0,0,0,114,30,1,0,0,114,8,0,0,0, + 0,114,7,0,0,0,114,31,1,0,0,114,8,0,0,0, 114,193,0,0,0,115,4,0,0,115,10,0,0,0,14,2, 12,1,2,1,8,255,255,128,122,30,69,120,116,101,110,115, 105,111,110,70,105,108,101,76,111,97,100,101,114,46,105,115, @@ -1847,8 +1847,8 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 109,101,44,32,112,97,114,101,110,116,45,112,97,116,104,45, 97,116,116,114,45,110,97,109,101,41,114,86,0,0,0,114, 10,0,0,0,41,2,114,16,0,0,0,114,58,0,0,0, - 90,8,95,95,112,97,116,104,95,95,78,41,2,114,33,1, - 0,0,114,55,0,0,0,41,4,114,130,0,0,0,114,25, + 90,8,95,95,112,97,116,104,95,95,78,41,2,114,34,1, + 0,0,114,55,0,0,0,41,4,114,130,0,0,0,114,26, 1,0,0,218,3,100,111,116,90,2,109,101,114,7,0,0, 0,114,7,0,0,0,114,8,0,0,0,218,23,95,102,105, 110,100,95,112,97,114,101,110,116,95,112,97,116,104,95,110, @@ -1860,12 +1860,12 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 3,0,0,0,67,0,0,0,115,28,0,0,0,124,0,160, 0,161,0,92,2,125,1,125,2,116,1,116,2,106,3,124, 1,25,0,124,2,131,2,83,0,114,121,0,0,0,41,4, - 114,40,1,0,0,114,142,0,0,0,114,16,0,0,0,218, + 114,41,1,0,0,114,142,0,0,0,114,16,0,0,0,218, 7,109,111,100,117,108,101,115,41,3,114,130,0,0,0,90, 18,112,97,114,101,110,116,95,109,111,100,117,108,101,95,110, 97,109,101,90,14,112,97,116,104,95,97,116,116,114,95,110, 97,109,101,114,7,0,0,0,114,7,0,0,0,114,8,0, - 0,0,114,35,1,0,0,158,4,0,0,115,6,0,0,0, + 0,0,114,36,1,0,0,158,4,0,0,115,6,0,0,0, 12,1,16,1,255,128,122,31,95,78,97,109,101,115,112,97, 99,101,80,97,116,104,46,95,103,101,116,95,112,97,114,101, 110,116,95,112,97,116,104,99,1,0,0,0,0,0,0,0, @@ -1876,9 +1876,9 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 68,124,2,106,5,100,0,117,0,114,68,124,2,106,6,114, 68,124,2,106,6,124,0,95,7,124,1,124,0,95,2,124, 0,106,7,83,0,114,121,0,0,0,41,8,114,123,0,0, - 0,114,35,1,0,0,114,36,1,0,0,114,37,1,0,0, - 114,33,1,0,0,114,151,0,0,0,114,189,0,0,0,114, - 34,1,0,0,41,3,114,130,0,0,0,90,11,112,97,114, + 0,114,36,1,0,0,114,37,1,0,0,114,38,1,0,0, + 114,34,1,0,0,114,151,0,0,0,114,189,0,0,0,114, + 35,1,0,0,41,3,114,130,0,0,0,90,11,112,97,114, 101,110,116,95,112,97,116,104,114,198,0,0,0,114,7,0, 0,0,114,7,0,0,0,114,8,0,0,0,218,12,95,114, 101,99,97,108,99,117,108,97,116,101,162,4,0,0,115,18, @@ -1888,7 +1888,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 116,101,99,1,0,0,0,0,0,0,0,0,0,0,0,1, 0,0,0,3,0,0,0,67,0,0,0,243,12,0,0,0, 116,0,124,0,160,1,161,0,131,1,83,0,114,121,0,0, - 0,41,2,218,4,105,116,101,114,114,42,1,0,0,114,8, + 0,41,2,218,4,105,116,101,114,114,43,1,0,0,114,8, 1,0,0,114,7,0,0,0,114,7,0,0,0,114,8,0, 0,0,218,8,95,95,105,116,101,114,95,95,175,4,0,0, 243,4,0,0,0,12,1,255,128,122,23,95,78,97,109,101, @@ -1896,764 +1896,776 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 95,95,99,2,0,0,0,0,0,0,0,0,0,0,0,2, 0,0,0,2,0,0,0,67,0,0,0,115,12,0,0,0, 124,0,160,0,161,0,124,1,25,0,83,0,114,121,0,0, - 0,169,1,114,42,1,0,0,41,2,114,130,0,0,0,218, + 0,169,1,114,43,1,0,0,41,2,114,130,0,0,0,218, 5,105,110,100,101,120,114,7,0,0,0,114,7,0,0,0, 114,8,0,0,0,218,11,95,95,103,101,116,105,116,101,109, - 95,95,178,4,0,0,114,46,1,0,0,122,26,95,78,97, + 95,95,178,4,0,0,114,47,1,0,0,122,26,95,78,97, 109,101,115,112,97,99,101,80,97,116,104,46,95,95,103,101, 116,105,116,101,109,95,95,99,3,0,0,0,0,0,0,0, 0,0,0,0,3,0,0,0,3,0,0,0,67,0,0,0, 115,14,0,0,0,124,2,124,0,106,0,124,1,60,0,100, - 0,83,0,114,121,0,0,0,41,1,114,34,1,0,0,41, - 3,114,130,0,0,0,114,48,1,0,0,114,58,0,0,0, + 0,83,0,114,121,0,0,0,41,1,114,35,1,0,0,41, + 3,114,130,0,0,0,114,49,1,0,0,114,58,0,0,0, 114,7,0,0,0,114,7,0,0,0,114,8,0,0,0,218, 11,95,95,115,101,116,105,116,101,109,95,95,181,4,0,0, 115,4,0,0,0,14,1,255,128,122,26,95,78,97,109,101, 115,112,97,99,101,80,97,116,104,46,95,95,115,101,116,105, 116,101,109,95,95,99,1,0,0,0,0,0,0,0,0,0, - 0,0,1,0,0,0,3,0,0,0,67,0,0,0,114,43, + 0,0,1,0,0,0,3,0,0,0,67,0,0,0,114,44, 1,0,0,114,121,0,0,0,41,2,114,4,0,0,0,114, - 42,1,0,0,114,8,1,0,0,114,7,0,0,0,114,7, + 43,1,0,0,114,8,1,0,0,114,7,0,0,0,114,7, 0,0,0,114,8,0,0,0,218,7,95,95,108,101,110,95, - 95,184,4,0,0,114,46,1,0,0,122,22,95,78,97,109, + 95,184,4,0,0,114,47,1,0,0,122,22,95,78,97,109, 101,115,112,97,99,101,80,97,116,104,46,95,95,108,101,110, 95,95,99,1,0,0,0,0,0,0,0,0,0,0,0,1, 0,0,0,3,0,0,0,67,0,0,0,243,12,0,0,0, 100,1,160,0,124,0,106,1,161,1,83,0,41,2,78,122, 20,95,78,97,109,101,115,112,97,99,101,80,97,116,104,40, - 123,33,114,125,41,41,2,114,77,0,0,0,114,34,1,0, + 123,33,114,125,41,41,2,114,77,0,0,0,114,35,1,0, 0,114,8,1,0,0,114,7,0,0,0,114,7,0,0,0, 114,8,0,0,0,218,8,95,95,114,101,112,114,95,95,187, - 4,0,0,114,46,1,0,0,122,23,95,78,97,109,101,115, + 4,0,0,114,47,1,0,0,122,23,95,78,97,109,101,115, 112,97,99,101,80,97,116,104,46,95,95,114,101,112,114,95, 95,99,2,0,0,0,0,0,0,0,0,0,0,0,2,0, 0,0,3,0,0,0,67,0,0,0,115,12,0,0,0,124, 1,124,0,160,0,161,0,118,0,83,0,114,121,0,0,0, - 114,47,1,0,0,169,2,114,130,0,0,0,218,4,105,116, + 114,48,1,0,0,169,2,114,130,0,0,0,218,4,105,116, 101,109,114,7,0,0,0,114,7,0,0,0,114,8,0,0, 0,218,12,95,95,99,111,110,116,97,105,110,115,95,95,190, - 4,0,0,114,46,1,0,0,122,27,95,78,97,109,101,115, + 4,0,0,114,47,1,0,0,122,27,95,78,97,109,101,115, 112,97,99,101,80,97,116,104,46,95,95,99,111,110,116,97, 105,110,115,95,95,99,2,0,0,0,0,0,0,0,0,0, 0,0,2,0,0,0,3,0,0,0,67,0,0,0,115,16, 0,0,0,124,0,106,0,160,1,124,1,161,1,1,0,100, - 0,83,0,114,121,0,0,0,41,2,114,34,1,0,0,114, - 197,0,0,0,114,54,1,0,0,114,7,0,0,0,114,7, + 0,83,0,114,121,0,0,0,41,2,114,35,1,0,0,114, + 197,0,0,0,114,55,1,0,0,114,7,0,0,0,114,7, 0,0,0,114,8,0,0,0,114,197,0,0,0,193,4,0, 0,243,4,0,0,0,16,1,255,128,122,21,95,78,97,109, 101,115,112,97,99,101,80,97,116,104,46,97,112,112,101,110, 100,78,41,15,114,137,0,0,0,114,136,0,0,0,114,138, - 0,0,0,114,139,0,0,0,114,223,0,0,0,114,40,1, - 0,0,114,35,1,0,0,114,42,1,0,0,114,45,1,0, - 0,114,49,1,0,0,114,50,1,0,0,114,51,1,0,0, - 114,53,1,0,0,114,56,1,0,0,114,197,0,0,0,114, + 0,0,0,114,139,0,0,0,114,223,0,0,0,114,41,1, + 0,0,114,36,1,0,0,114,43,1,0,0,114,46,1,0, + 0,114,50,1,0,0,114,51,1,0,0,114,52,1,0,0, + 114,54,1,0,0,114,57,1,0,0,114,197,0,0,0,114, 7,0,0,0,114,7,0,0,0,114,7,0,0,0,114,8, - 0,0,0,114,32,1,0,0,135,4,0,0,115,28,0,0, + 0,0,0,114,33,1,0,0,135,4,0,0,115,28,0,0, 0,8,0,4,1,8,6,8,6,8,10,8,4,8,13,8, - 3,8,3,8,3,8,3,8,3,12,3,255,128,114,32,1, + 3,8,3,8,3,8,3,8,3,12,3,255,128,114,33,1, 0,0,99,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,3,0,0,0,64,0,0,0,115,80,0,0,0, + 0,0,0,3,0,0,0,64,0,0,0,115,88,0,0,0, 101,0,90,1,100,0,90,2,100,1,100,2,132,0,90,3, 101,4,100,3,100,4,132,0,131,1,90,5,100,5,100,6, 132,0,90,6,100,7,100,8,132,0,90,7,100,9,100,10, 132,0,90,8,100,11,100,12,132,0,90,9,100,13,100,14, - 132,0,90,10,100,15,100,16,132,0,90,11,100,17,83,0, - 41,18,218,16,95,78,97,109,101,115,112,97,99,101,76,111, - 97,100,101,114,99,4,0,0,0,0,0,0,0,0,0,0, - 0,4,0,0,0,4,0,0,0,67,0,0,0,115,18,0, - 0,0,116,0,124,1,124,2,124,3,131,3,124,0,95,1, - 100,0,83,0,114,121,0,0,0,41,2,114,32,1,0,0, - 114,34,1,0,0,114,38,1,0,0,114,7,0,0,0,114, - 7,0,0,0,114,8,0,0,0,114,223,0,0,0,199,4, - 0,0,115,4,0,0,0,18,1,255,128,122,25,95,78,97, - 109,101,115,112,97,99,101,76,111,97,100,101,114,46,95,95, - 105,110,105,116,95,95,99,1,0,0,0,0,0,0,0,0, - 0,0,0,1,0,0,0,3,0,0,0,67,0,0,0,114, - 52,1,0,0,41,3,122,115,82,101,116,117,114,110,32,114, - 101,112,114,32,102,111,114,32,116,104,101,32,109,111,100,117, - 108,101,46,10,10,32,32,32,32,32,32,32,32,84,104,101, - 32,109,101,116,104,111,100,32,105,115,32,100,101,112,114,101, - 99,97,116,101,100,46,32,32,84,104,101,32,105,109,112,111, - 114,116,32,109,97,99,104,105,110,101,114,121,32,100,111,101, - 115,32,116,104,101,32,106,111,98,32,105,116,115,101,108,102, - 46,10,10,32,32,32,32,32,32,32,32,122,25,60,109,111, - 100,117,108,101,32,123,33,114,125,32,40,110,97,109,101,115, - 112,97,99,101,41,62,78,41,2,114,77,0,0,0,114,137, - 0,0,0,41,1,114,231,0,0,0,114,7,0,0,0,114, - 7,0,0,0,114,8,0,0,0,218,11,109,111,100,117,108, - 101,95,114,101,112,114,202,4,0,0,115,4,0,0,0,12, - 7,255,128,122,28,95,78,97,109,101,115,112,97,99,101,76, - 111,97,100,101,114,46,109,111,100,117,108,101,95,114,101,112, - 114,99,2,0,0,0,0,0,0,0,0,0,0,0,2,0, - 0,0,1,0,0,0,67,0,0,0,114,24,0,0,0,41, - 2,78,84,114,7,0,0,0,114,234,0,0,0,114,7,0, - 0,0,114,7,0,0,0,114,8,0,0,0,114,193,0,0, - 0,211,4,0,0,243,4,0,0,0,4,1,255,128,122,27, - 95,78,97,109,101,115,112,97,99,101,76,111,97,100,101,114, - 46,105,115,95,112,97,99,107,97,103,101,99,2,0,0,0, - 0,0,0,0,0,0,0,0,2,0,0,0,1,0,0,0, - 67,0,0,0,114,24,0,0,0,41,2,78,114,10,0,0, - 0,114,7,0,0,0,114,234,0,0,0,114,7,0,0,0, - 114,7,0,0,0,114,8,0,0,0,114,244,0,0,0,214, - 4,0,0,114,60,1,0,0,122,27,95,78,97,109,101,115, - 112,97,99,101,76,111,97,100,101,114,46,103,101,116,95,115, - 111,117,114,99,101,99,2,0,0,0,0,0,0,0,0,0, - 0,0,2,0,0,0,6,0,0,0,67,0,0,0,115,16, - 0,0,0,116,0,100,1,100,2,100,3,100,4,100,5,141, - 4,83,0,41,6,78,114,10,0,0,0,122,8,60,115,116, - 114,105,110,103,62,114,230,0,0,0,84,41,1,114,246,0, - 0,0,41,1,114,247,0,0,0,114,234,0,0,0,114,7, - 0,0,0,114,7,0,0,0,114,8,0,0,0,114,228,0, - 0,0,217,4,0,0,114,57,1,0,0,122,25,95,78,97, - 109,101,115,112,97,99,101,76,111,97,100,101,114,46,103,101, - 116,95,99,111,100,101,99,2,0,0,0,0,0,0,0,0, - 0,0,0,2,0,0,0,1,0,0,0,67,0,0,0,114, - 24,0,0,0,114,224,0,0,0,114,7,0,0,0,114,225, + 132,0,90,10,100,15,100,16,132,0,90,11,100,17,100,18, + 132,0,90,12,100,19,83,0,41,20,218,16,95,78,97,109, + 101,115,112,97,99,101,76,111,97,100,101,114,99,4,0,0, + 0,0,0,0,0,0,0,0,0,4,0,0,0,4,0,0, + 0,67,0,0,0,115,18,0,0,0,116,0,124,1,124,2, + 124,3,131,3,124,0,95,1,100,0,83,0,114,121,0,0, + 0,41,2,114,33,1,0,0,114,35,1,0,0,114,39,1, + 0,0,114,7,0,0,0,114,7,0,0,0,114,8,0,0, + 0,114,223,0,0,0,199,4,0,0,115,4,0,0,0,18, + 1,255,128,122,25,95,78,97,109,101,115,112,97,99,101,76, + 111,97,100,101,114,46,95,95,105,110,105,116,95,95,99,1, + 0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,3, + 0,0,0,67,0,0,0,114,53,1,0,0,41,3,122,115, + 82,101,116,117,114,110,32,114,101,112,114,32,102,111,114,32, + 116,104,101,32,109,111,100,117,108,101,46,10,10,32,32,32, + 32,32,32,32,32,84,104,101,32,109,101,116,104,111,100,32, + 105,115,32,100,101,112,114,101,99,97,116,101,100,46,32,32, + 84,104,101,32,105,109,112,111,114,116,32,109,97,99,104,105, + 110,101,114,121,32,100,111,101,115,32,116,104,101,32,106,111, + 98,32,105,116,115,101,108,102,46,10,10,32,32,32,32,32, + 32,32,32,122,25,60,109,111,100,117,108,101,32,123,33,114, + 125,32,40,110,97,109,101,115,112,97,99,101,41,62,78,41, + 2,114,77,0,0,0,114,137,0,0,0,41,1,114,231,0, + 0,0,114,7,0,0,0,114,7,0,0,0,114,8,0,0, + 0,218,11,109,111,100,117,108,101,95,114,101,112,114,202,4, + 0,0,115,4,0,0,0,12,7,255,128,122,28,95,78,97, + 109,101,115,112,97,99,101,76,111,97,100,101,114,46,109,111, + 100,117,108,101,95,114,101,112,114,99,2,0,0,0,0,0, + 0,0,0,0,0,0,2,0,0,0,1,0,0,0,67,0, + 0,0,114,24,0,0,0,41,2,78,84,114,7,0,0,0, + 114,234,0,0,0,114,7,0,0,0,114,7,0,0,0,114, + 8,0,0,0,114,193,0,0,0,211,4,0,0,243,4,0, + 0,0,4,1,255,128,122,27,95,78,97,109,101,115,112,97, + 99,101,76,111,97,100,101,114,46,105,115,95,112,97,99,107, + 97,103,101,99,2,0,0,0,0,0,0,0,0,0,0,0, + 2,0,0,0,1,0,0,0,67,0,0,0,114,24,0,0, + 0,41,2,78,114,10,0,0,0,114,7,0,0,0,114,234, 0,0,0,114,7,0,0,0,114,7,0,0,0,114,8,0, - 0,0,114,226,0,0,0,220,4,0,0,114,227,0,0,0, - 122,30,95,78,97,109,101,115,112,97,99,101,76,111,97,100, - 101,114,46,99,114,101,97,116,101,95,109,111,100,117,108,101, - 99,2,0,0,0,0,0,0,0,0,0,0,0,2,0,0, - 0,1,0,0,0,67,0,0,0,115,4,0,0,0,100,0, - 83,0,114,121,0,0,0,114,7,0,0,0,114,27,1,0, + 0,0,114,244,0,0,0,214,4,0,0,114,61,1,0,0, + 122,27,95,78,97,109,101,115,112,97,99,101,76,111,97,100, + 101,114,46,103,101,116,95,115,111,117,114,99,101,99,2,0, + 0,0,0,0,0,0,0,0,0,0,2,0,0,0,6,0, + 0,0,67,0,0,0,115,16,0,0,0,116,0,100,1,100, + 2,100,3,100,4,100,5,141,4,83,0,41,6,78,114,10, + 0,0,0,122,8,60,115,116,114,105,110,103,62,114,230,0, + 0,0,84,41,1,114,246,0,0,0,41,1,114,247,0,0, + 0,114,234,0,0,0,114,7,0,0,0,114,7,0,0,0, + 114,8,0,0,0,114,228,0,0,0,217,4,0,0,114,58, + 1,0,0,122,25,95,78,97,109,101,115,112,97,99,101,76, + 111,97,100,101,114,46,103,101,116,95,99,111,100,101,99,2, + 0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,1, + 0,0,0,67,0,0,0,114,24,0,0,0,114,224,0,0, + 0,114,7,0,0,0,114,225,0,0,0,114,7,0,0,0, + 114,7,0,0,0,114,8,0,0,0,114,226,0,0,0,220, + 4,0,0,114,227,0,0,0,122,30,95,78,97,109,101,115, + 112,97,99,101,76,111,97,100,101,114,46,99,114,101,97,116, + 101,95,109,111,100,117,108,101,99,2,0,0,0,0,0,0, + 0,0,0,0,0,2,0,0,0,1,0,0,0,67,0,0, + 0,115,4,0,0,0,100,0,83,0,114,121,0,0,0,114, + 7,0,0,0,114,28,1,0,0,114,7,0,0,0,114,7, + 0,0,0,114,8,0,0,0,114,232,0,0,0,223,4,0, + 0,114,61,1,0,0,122,28,95,78,97,109,101,115,112,97, + 99,101,76,111,97,100,101,114,46,101,120,101,99,95,109,111, + 100,117,108,101,99,2,0,0,0,0,0,0,0,0,0,0, + 0,2,0,0,0,4,0,0,0,67,0,0,0,115,26,0, + 0,0,116,0,160,1,100,1,124,0,106,2,161,2,1,0, + 116,0,160,3,124,0,124,1,161,2,83,0,41,3,122,98, + 76,111,97,100,32,97,32,110,97,109,101,115,112,97,99,101, + 32,109,111,100,117,108,101,46,10,10,32,32,32,32,32,32, + 32,32,84,104,105,115,32,109,101,116,104,111,100,32,105,115, + 32,100,101,112,114,101,99,97,116,101,100,46,32,32,85,115, + 101,32,101,120,101,99,95,109,111,100,117,108,101,40,41,32, + 105,110,115,116,101,97,100,46,10,10,32,32,32,32,32,32, + 32,32,122,38,110,97,109,101,115,112,97,99,101,32,109,111, + 100,117,108,101,32,108,111,97,100,101,100,32,119,105,116,104, + 32,112,97,116,104,32,123,33,114,125,78,41,4,114,146,0, + 0,0,114,160,0,0,0,114,35,1,0,0,114,233,0,0, + 0,114,234,0,0,0,114,7,0,0,0,114,7,0,0,0, + 114,8,0,0,0,114,235,0,0,0,226,4,0,0,115,10, + 0,0,0,6,7,4,1,4,255,12,3,255,128,122,28,95, + 78,97,109,101,115,112,97,99,101,76,111,97,100,101,114,46, + 108,111,97,100,95,109,111,100,117,108,101,99,2,0,0,0, + 0,0,0,0,0,0,0,0,3,0,0,0,2,0,0,0, + 67,0,0,0,115,22,0,0,0,100,1,100,2,108,0,109, + 1,125,2,1,0,124,2,124,0,106,2,131,1,83,0,41, + 3,78,114,0,0,0,0,41,1,218,15,78,97,109,101,115, + 112,97,99,101,82,101,97,100,101,114,41,3,114,19,1,0, + 0,114,62,1,0,0,114,35,1,0,0,41,3,114,130,0, + 0,0,114,231,0,0,0,114,62,1,0,0,114,7,0,0, + 0,114,7,0,0,0,114,8,0,0,0,114,20,1,0,0, + 238,4,0,0,115,6,0,0,0,12,1,10,1,255,128,122, + 36,95,78,97,109,101,115,112,97,99,101,76,111,97,100,101, + 114,46,103,101,116,95,114,101,115,111,117,114,99,101,95,114, + 101,97,100,101,114,78,41,13,114,137,0,0,0,114,136,0, + 0,0,114,138,0,0,0,114,223,0,0,0,114,220,0,0, + 0,114,60,1,0,0,114,193,0,0,0,114,244,0,0,0, + 114,228,0,0,0,114,226,0,0,0,114,232,0,0,0,114, + 235,0,0,0,114,20,1,0,0,114,7,0,0,0,114,7, + 0,0,0,114,7,0,0,0,114,8,0,0,0,114,59,1, + 0,0,198,4,0,0,115,24,0,0,0,8,0,8,1,2, + 3,10,1,8,8,8,3,8,3,8,3,8,3,8,3,12, + 12,255,128,114,59,1,0,0,99,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,4,0,0,0,64,0,0, + 0,115,118,0,0,0,101,0,90,1,100,0,90,2,100,1, + 90,3,101,4,100,2,100,3,132,0,131,1,90,5,101,4, + 100,4,100,5,132,0,131,1,90,6,101,7,100,6,100,7, + 132,0,131,1,90,8,101,7,100,8,100,9,132,0,131,1, + 90,9,101,7,100,19,100,11,100,12,132,1,131,1,90,10, + 101,7,100,20,100,13,100,14,132,1,131,1,90,11,101,7, + 100,21,100,15,100,16,132,1,131,1,90,12,101,4,100,17, + 100,18,132,0,131,1,90,13,100,10,83,0,41,22,218,10, + 80,97,116,104,70,105,110,100,101,114,122,62,77,101,116,97, + 32,112,97,116,104,32,102,105,110,100,101,114,32,102,111,114, + 32,115,121,115,46,112,97,116,104,32,97,110,100,32,112,97, + 99,107,97,103,101,32,95,95,112,97,116,104,95,95,32,97, + 116,116,114,105,98,117,116,101,115,46,99,0,0,0,0,0, + 0,0,0,0,0,0,0,2,0,0,0,4,0,0,0,67, + 0,0,0,115,64,0,0,0,116,0,116,1,106,2,160,3, + 161,0,131,1,68,0,93,44,92,2,125,0,125,1,124,1, + 100,1,117,0,114,40,116,1,106,2,124,0,61,0,113,14, + 116,4,124,1,100,2,131,2,114,58,124,1,160,5,161,0, + 1,0,113,14,100,1,83,0,41,3,122,125,67,97,108,108, + 32,116,104,101,32,105,110,118,97,108,105,100,97,116,101,95, + 99,97,99,104,101,115,40,41,32,109,101,116,104,111,100,32, + 111,110,32,97,108,108,32,112,97,116,104,32,101,110,116,114, + 121,32,102,105,110,100,101,114,115,10,32,32,32,32,32,32, + 32,32,115,116,111,114,101,100,32,105,110,32,115,121,115,46, + 112,97,116,104,95,105,109,112,111,114,116,101,114,95,99,97, + 99,104,101,115,32,40,119,104,101,114,101,32,105,109,112,108, + 101,109,101,110,116,101,100,41,46,78,218,17,105,110,118,97, + 108,105,100,97,116,101,95,99,97,99,104,101,115,41,6,218, + 4,108,105,115,116,114,16,0,0,0,218,19,112,97,116,104, + 95,105,109,112,111,114,116,101,114,95,99,97,99,104,101,218, + 5,105,116,101,109,115,114,140,0,0,0,114,64,1,0,0, + 41,2,114,128,0,0,0,218,6,102,105,110,100,101,114,114, + 7,0,0,0,114,7,0,0,0,114,8,0,0,0,114,64, + 1,0,0,249,4,0,0,115,16,0,0,0,22,4,8,1, + 10,1,10,1,8,1,2,128,4,252,255,128,122,28,80,97, + 116,104,70,105,110,100,101,114,46,105,110,118,97,108,105,100, + 97,116,101,95,99,97,99,104,101,115,99,1,0,0,0,0, + 0,0,0,0,0,0,0,2,0,0,0,9,0,0,0,67, + 0,0,0,115,76,0,0,0,116,0,106,1,100,1,117,1, + 114,28,116,0,106,1,115,28,116,2,160,3,100,2,116,4, + 161,2,1,0,116,0,106,1,68,0,93,34,125,1,122,14, + 124,1,124,0,131,1,87,0,2,0,1,0,83,0,4,0, + 116,5,121,74,1,0,1,0,1,0,89,0,113,34,100,1, + 83,0,119,0,41,3,122,46,83,101,97,114,99,104,32,115, + 121,115,46,112,97,116,104,95,104,111,111,107,115,32,102,111, + 114,32,97,32,102,105,110,100,101,114,32,102,111,114,32,39, + 112,97,116,104,39,46,78,122,23,115,121,115,46,112,97,116, + 104,95,104,111,111,107,115,32,105,115,32,101,109,112,116,121, + 41,6,114,16,0,0,0,218,10,112,97,116,104,95,104,111, + 111,107,115,114,88,0,0,0,114,89,0,0,0,114,149,0, + 0,0,114,129,0,0,0,41,2,114,58,0,0,0,90,4, + 104,111,111,107,114,7,0,0,0,114,7,0,0,0,114,8, + 0,0,0,218,11,95,112,97,116,104,95,104,111,111,107,115, + 3,5,0,0,115,20,0,0,0,16,3,12,1,10,1,2, + 1,14,1,12,1,4,1,4,2,2,253,255,128,122,22,80, + 97,116,104,70,105,110,100,101,114,46,95,112,97,116,104,95, + 104,111,111,107,115,99,2,0,0,0,0,0,0,0,0,0, + 0,0,3,0,0,0,8,0,0,0,67,0,0,0,115,100, + 0,0,0,124,1,100,1,107,2,114,40,122,12,116,0,160, + 1,161,0,125,1,87,0,110,18,4,0,116,2,121,98,1, + 0,1,0,1,0,89,0,100,2,83,0,122,16,116,3,106, + 4,124,1,25,0,125,2,87,0,124,2,83,0,4,0,116, + 5,121,96,1,0,1,0,1,0,124,0,160,6,124,1,161, + 1,125,2,124,2,116,3,106,4,124,1,60,0,89,0,124, + 2,83,0,119,0,119,0,41,3,122,210,71,101,116,32,116, + 104,101,32,102,105,110,100,101,114,32,102,111,114,32,116,104, + 101,32,112,97,116,104,32,101,110,116,114,121,32,102,114,111, + 109,32,115,121,115,46,112,97,116,104,95,105,109,112,111,114, + 116,101,114,95,99,97,99,104,101,46,10,10,32,32,32,32, + 32,32,32,32,73,102,32,116,104,101,32,112,97,116,104,32, + 101,110,116,114,121,32,105,115,32,110,111,116,32,105,110,32, + 116,104,101,32,99,97,99,104,101,44,32,102,105,110,100,32, + 116,104,101,32,97,112,112,114,111,112,114,105,97,116,101,32, + 102,105,110,100,101,114,10,32,32,32,32,32,32,32,32,97, + 110,100,32,99,97,99,104,101,32,105,116,46,32,73,102,32, + 110,111,32,102,105,110,100,101,114,32,105,115,32,97,118,97, + 105,108,97,98,108,101,44,32,115,116,111,114,101,32,78,111, + 110,101,46,10,10,32,32,32,32,32,32,32,32,114,10,0, + 0,0,78,41,7,114,19,0,0,0,114,70,0,0,0,218, + 17,70,105,108,101,78,111,116,70,111,117,110,100,69,114,114, + 111,114,114,16,0,0,0,114,66,1,0,0,218,8,75,101, + 121,69,114,114,111,114,114,70,1,0,0,41,3,114,209,0, + 0,0,114,58,0,0,0,114,68,1,0,0,114,7,0,0, + 0,114,7,0,0,0,114,8,0,0,0,218,20,95,112,97, + 116,104,95,105,109,112,111,114,116,101,114,95,99,97,99,104, + 101,16,5,0,0,115,30,0,0,0,8,8,2,1,12,1, + 12,1,6,3,2,1,12,1,4,4,12,253,10,1,12,1, + 4,1,2,253,2,250,255,128,122,31,80,97,116,104,70,105, + 110,100,101,114,46,95,112,97,116,104,95,105,109,112,111,114, + 116,101,114,95,99,97,99,104,101,99,3,0,0,0,0,0, + 0,0,0,0,0,0,6,0,0,0,4,0,0,0,67,0, + 0,0,115,82,0,0,0,116,0,124,2,100,1,131,2,114, + 26,124,2,160,1,124,1,161,1,92,2,125,3,125,4,110, + 14,124,2,160,2,124,1,161,1,125,3,103,0,125,4,124, + 3,100,0,117,1,114,60,116,3,160,4,124,1,124,3,161, + 2,83,0,116,3,160,5,124,1,100,0,161,2,125,5,124, + 4,124,5,95,6,124,5,83,0,41,2,78,114,148,0,0, + 0,41,7,114,140,0,0,0,114,148,0,0,0,114,217,0, + 0,0,114,146,0,0,0,114,212,0,0,0,114,194,0,0, + 0,114,189,0,0,0,41,6,114,209,0,0,0,114,150,0, + 0,0,114,68,1,0,0,114,151,0,0,0,114,152,0,0, + 0,114,198,0,0,0,114,7,0,0,0,114,7,0,0,0, + 114,8,0,0,0,218,16,95,108,101,103,97,99,121,95,103, + 101,116,95,115,112,101,99,38,5,0,0,115,20,0,0,0, + 10,4,16,1,10,2,4,1,8,1,12,1,12,1,6,1, + 4,1,255,128,122,27,80,97,116,104,70,105,110,100,101,114, + 46,95,108,101,103,97,99,121,95,103,101,116,95,115,112,101, + 99,78,99,4,0,0,0,0,0,0,0,0,0,0,0,9, + 0,0,0,5,0,0,0,67,0,0,0,115,166,0,0,0, + 103,0,125,4,124,2,68,0,93,134,125,5,116,0,124,5, + 116,1,116,2,102,2,131,2,115,28,113,8,124,0,160,3, + 124,5,161,1,125,6,124,6,100,1,117,1,114,142,116,4, + 124,6,100,2,131,2,114,70,124,6,160,5,124,1,124,3, + 161,2,125,7,110,12,124,0,160,6,124,1,124,6,161,2, + 125,7,124,7,100,1,117,0,114,92,113,8,124,7,106,7, + 100,1,117,1,114,110,124,7,2,0,1,0,83,0,124,7, + 106,8,125,8,124,8,100,1,117,0,114,132,116,9,100,3, + 131,1,130,1,124,4,160,10,124,8,161,1,1,0,113,8, + 116,11,160,12,124,1,100,1,161,2,125,7,124,4,124,7, + 95,8,124,7,83,0,41,4,122,63,70,105,110,100,32,116, + 104,101,32,108,111,97,100,101,114,32,111,114,32,110,97,109, + 101,115,112,97,99,101,95,112,97,116,104,32,102,111,114,32, + 116,104,105,115,32,109,111,100,117,108,101,47,112,97,99,107, + 97,103,101,32,110,97,109,101,46,78,114,214,0,0,0,122, + 19,115,112,101,99,32,109,105,115,115,105,110,103,32,108,111, + 97,100,101,114,41,13,114,172,0,0,0,114,97,0,0,0, + 218,5,98,121,116,101,115,114,73,1,0,0,114,140,0,0, + 0,114,214,0,0,0,114,74,1,0,0,114,151,0,0,0, + 114,189,0,0,0,114,129,0,0,0,114,178,0,0,0,114, + 146,0,0,0,114,194,0,0,0,41,9,114,209,0,0,0, + 114,150,0,0,0,114,58,0,0,0,114,213,0,0,0,218, + 14,110,97,109,101,115,112,97,99,101,95,112,97,116,104,90, + 5,101,110,116,114,121,114,68,1,0,0,114,198,0,0,0, + 114,152,0,0,0,114,7,0,0,0,114,7,0,0,0,114, + 8,0,0,0,218,9,95,103,101,116,95,115,112,101,99,53, + 5,0,0,115,44,0,0,0,4,5,8,1,14,1,2,1, + 10,1,8,1,10,1,14,1,12,2,8,1,2,1,10,1, + 8,1,6,1,8,1,8,1,10,5,2,128,12,2,6,1, + 4,1,255,128,122,20,80,97,116,104,70,105,110,100,101,114, + 46,95,103,101,116,95,115,112,101,99,99,4,0,0,0,0, + 0,0,0,0,0,0,0,6,0,0,0,5,0,0,0,67, + 0,0,0,115,94,0,0,0,124,2,100,1,117,0,114,14, + 116,0,106,1,125,2,124,0,160,2,124,1,124,2,124,3, + 161,3,125,4,124,4,100,1,117,0,114,40,100,1,83,0, + 124,4,106,3,100,1,117,0,114,90,124,4,106,4,125,5, + 124,5,114,86,100,1,124,4,95,5,116,6,124,1,124,5, + 124,0,106,2,131,3,124,4,95,4,124,4,83,0,100,1, + 83,0,124,4,83,0,41,2,122,141,84,114,121,32,116,111, + 32,102,105,110,100,32,97,32,115,112,101,99,32,102,111,114, + 32,39,102,117,108,108,110,97,109,101,39,32,111,110,32,115, + 121,115,46,112,97,116,104,32,111,114,32,39,112,97,116,104, + 39,46,10,10,32,32,32,32,32,32,32,32,84,104,101,32, + 115,101,97,114,99,104,32,105,115,32,98,97,115,101,100,32, + 111,110,32,115,121,115,46,112,97,116,104,95,104,111,111,107, + 115,32,97,110,100,32,115,121,115,46,112,97,116,104,95,105, + 109,112,111,114,116,101,114,95,99,97,99,104,101,46,10,32, + 32,32,32,32,32,32,32,78,41,7,114,16,0,0,0,114, + 58,0,0,0,114,77,1,0,0,114,151,0,0,0,114,189, + 0,0,0,114,192,0,0,0,114,33,1,0,0,41,6,114, + 209,0,0,0,114,150,0,0,0,114,58,0,0,0,114,213, + 0,0,0,114,198,0,0,0,114,76,1,0,0,114,7,0, + 0,0,114,7,0,0,0,114,8,0,0,0,114,214,0,0, + 0,85,5,0,0,115,28,0,0,0,8,6,6,1,14,1, + 8,1,4,1,10,1,6,1,4,1,6,3,16,1,4,1, + 4,2,4,2,255,128,122,20,80,97,116,104,70,105,110,100, + 101,114,46,102,105,110,100,95,115,112,101,99,99,3,0,0, + 0,0,0,0,0,0,0,0,0,4,0,0,0,4,0,0, + 0,67,0,0,0,115,30,0,0,0,124,0,160,0,124,1, + 124,2,161,2,125,3,124,3,100,1,117,0,114,24,100,1, + 83,0,124,3,106,1,83,0,41,2,122,170,102,105,110,100, + 32,116,104,101,32,109,111,100,117,108,101,32,111,110,32,115, + 121,115,46,112,97,116,104,32,111,114,32,39,112,97,116,104, + 39,32,98,97,115,101,100,32,111,110,32,115,121,115,46,112, + 97,116,104,95,104,111,111,107,115,32,97,110,100,10,32,32, + 32,32,32,32,32,32,115,121,115,46,112,97,116,104,95,105, + 109,112,111,114,116,101,114,95,99,97,99,104,101,46,10,10, + 32,32,32,32,32,32,32,32,84,104,105,115,32,109,101,116, + 104,111,100,32,105,115,32,100,101,112,114,101,99,97,116,101, + 100,46,32,32,85,115,101,32,102,105,110,100,95,115,112,101, + 99,40,41,32,105,110,115,116,101,97,100,46,10,10,32,32, + 32,32,32,32,32,32,78,114,215,0,0,0,114,216,0,0, 0,114,7,0,0,0,114,7,0,0,0,114,8,0,0,0, - 114,232,0,0,0,223,4,0,0,114,60,1,0,0,122,28, - 95,78,97,109,101,115,112,97,99,101,76,111,97,100,101,114, - 46,101,120,101,99,95,109,111,100,117,108,101,99,2,0,0, - 0,0,0,0,0,0,0,0,0,2,0,0,0,4,0,0, - 0,67,0,0,0,115,26,0,0,0,116,0,160,1,100,1, - 124,0,106,2,161,2,1,0,116,0,160,3,124,0,124,1, - 161,2,83,0,41,3,122,98,76,111,97,100,32,97,32,110, - 97,109,101,115,112,97,99,101,32,109,111,100,117,108,101,46, + 114,217,0,0,0,109,5,0,0,115,10,0,0,0,12,8, + 8,1,4,1,6,1,255,128,122,22,80,97,116,104,70,105, + 110,100,101,114,46,102,105,110,100,95,109,111,100,117,108,101, + 99,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0, + 0,4,0,0,0,79,0,0,0,115,28,0,0,0,100,1, + 100,2,108,0,109,1,125,2,1,0,124,2,106,2,124,0, + 105,0,124,1,164,1,142,1,83,0,41,4,97,32,1,0, + 0,10,32,32,32,32,32,32,32,32,70,105,110,100,32,100, + 105,115,116,114,105,98,117,116,105,111,110,115,46,10,10,32, + 32,32,32,32,32,32,32,82,101,116,117,114,110,32,97,110, + 32,105,116,101,114,97,98,108,101,32,111,102,32,97,108,108, + 32,68,105,115,116,114,105,98,117,116,105,111,110,32,105,110, + 115,116,97,110,99,101,115,32,99,97,112,97,98,108,101,32, + 111,102,10,32,32,32,32,32,32,32,32,108,111,97,100,105, + 110,103,32,116,104,101,32,109,101,116,97,100,97,116,97,32, + 102,111,114,32,112,97,99,107,97,103,101,115,32,109,97,116, + 99,104,105,110,103,32,96,96,99,111,110,116,101,120,116,46, + 110,97,109,101,96,96,10,32,32,32,32,32,32,32,32,40, + 111,114,32,97,108,108,32,110,97,109,101,115,32,105,102,32, + 96,96,78,111,110,101,96,96,32,105,110,100,105,99,97,116, + 101,100,41,32,97,108,111,110,103,32,116,104,101,32,112,97, + 116,104,115,32,105,110,32,116,104,101,32,108,105,115,116,10, + 32,32,32,32,32,32,32,32,111,102,32,100,105,114,101,99, + 116,111,114,105,101,115,32,96,96,99,111,110,116,101,120,116, + 46,112,97,116,104,96,96,46,10,32,32,32,32,32,32,32, + 32,114,0,0,0,0,41,1,218,18,77,101,116,97,100,97, + 116,97,80,97,116,104,70,105,110,100,101,114,78,41,3,90, + 18,105,109,112,111,114,116,108,105,98,46,109,101,116,97,100, + 97,116,97,114,78,1,0,0,218,18,102,105,110,100,95,100, + 105,115,116,114,105,98,117,116,105,111,110,115,41,3,114,131, + 0,0,0,114,132,0,0,0,114,78,1,0,0,114,7,0, + 0,0,114,7,0,0,0,114,8,0,0,0,114,79,1,0, + 0,122,5,0,0,115,6,0,0,0,12,10,16,1,255,128, + 122,29,80,97,116,104,70,105,110,100,101,114,46,102,105,110, + 100,95,100,105,115,116,114,105,98,117,116,105,111,110,115,41, + 1,78,41,2,78,78,41,1,78,41,14,114,137,0,0,0, + 114,136,0,0,0,114,138,0,0,0,114,139,0,0,0,114, + 220,0,0,0,114,64,1,0,0,114,70,1,0,0,114,221, + 0,0,0,114,73,1,0,0,114,74,1,0,0,114,77,1, + 0,0,114,214,0,0,0,114,217,0,0,0,114,79,1,0, + 0,114,7,0,0,0,114,7,0,0,0,114,7,0,0,0, + 114,8,0,0,0,114,63,1,0,0,245,4,0,0,115,38, + 0,0,0,8,0,4,2,2,2,10,1,2,9,10,1,2, + 12,10,1,2,21,10,1,2,14,12,1,2,31,12,1,2, + 23,12,1,2,12,14,1,255,128,114,63,1,0,0,99,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3, + 0,0,0,64,0,0,0,115,90,0,0,0,101,0,90,1, + 100,0,90,2,100,1,90,3,100,2,100,3,132,0,90,4, + 100,4,100,5,132,0,90,5,101,6,90,7,100,6,100,7, + 132,0,90,8,100,8,100,9,132,0,90,9,100,19,100,11, + 100,12,132,1,90,10,100,13,100,14,132,0,90,11,101,12, + 100,15,100,16,132,0,131,1,90,13,100,17,100,18,132,0, + 90,14,100,10,83,0,41,20,218,10,70,105,108,101,70,105, + 110,100,101,114,122,172,70,105,108,101,45,98,97,115,101,100, + 32,102,105,110,100,101,114,46,10,10,32,32,32,32,73,110, + 116,101,114,97,99,116,105,111,110,115,32,119,105,116,104,32, + 116,104,101,32,102,105,108,101,32,115,121,115,116,101,109,32, + 97,114,101,32,99,97,99,104,101,100,32,102,111,114,32,112, + 101,114,102,111,114,109,97,110,99,101,44,32,98,101,105,110, + 103,10,32,32,32,32,114,101,102,114,101,115,104,101,100,32, + 119,104,101,110,32,116,104,101,32,100,105,114,101,99,116,111, + 114,121,32,116,104,101,32,102,105,110,100,101,114,32,105,115, + 32,104,97,110,100,108,105,110,103,32,104,97,115,32,98,101, + 101,110,32,109,111,100,105,102,105,101,100,46,10,10,32,32, + 32,32,99,2,0,0,0,0,0,0,0,0,0,0,0,5, + 0,0,0,6,0,0,0,7,0,0,0,115,84,0,0,0, + 103,0,125,3,124,2,68,0,93,32,92,2,137,0,125,4, + 124,3,160,0,135,0,102,1,100,1,100,2,132,8,124,4, + 68,0,131,1,161,1,1,0,113,8,124,3,124,0,95,1, + 124,1,112,54,100,3,124,0,95,2,100,4,124,0,95,3, + 116,4,131,0,124,0,95,5,116,4,131,0,124,0,95,6, + 100,5,83,0,41,6,122,154,73,110,105,116,105,97,108,105, + 122,101,32,119,105,116,104,32,116,104,101,32,112,97,116,104, + 32,116,111,32,115,101,97,114,99,104,32,111,110,32,97,110, + 100,32,97,32,118,97,114,105,97,98,108,101,32,110,117,109, + 98,101,114,32,111,102,10,32,32,32,32,32,32,32,32,50, + 45,116,117,112,108,101,115,32,99,111,110,116,97,105,110,105, + 110,103,32,116,104,101,32,108,111,97,100,101,114,32,97,110, + 100,32,116,104,101,32,102,105,108,101,32,115,117,102,102,105, + 120,101,115,32,116,104,101,32,108,111,97,100,101,114,10,32, + 32,32,32,32,32,32,32,114,101,99,111,103,110,105,122,101, + 115,46,99,1,0,0,0,0,0,0,0,0,0,0,0,2, + 0,0,0,3,0,0,0,51,0,0,0,115,22,0,0,0, + 124,0,93,14,125,1,124,1,136,0,102,2,86,0,1,0, + 113,2,100,0,83,0,114,121,0,0,0,114,7,0,0,0, + 114,29,1,0,0,169,1,114,151,0,0,0,114,7,0,0, + 0,114,8,0,0,0,114,9,0,0,0,151,5,0,0,114, + 14,0,0,0,122,38,70,105,108,101,70,105,110,100,101,114, + 46,95,95,105,110,105,116,95,95,46,60,108,111,99,97,108, + 115,62,46,60,103,101,110,101,120,112,114,62,114,86,0,0, + 0,114,116,0,0,0,78,41,7,114,178,0,0,0,218,8, + 95,108,111,97,100,101,114,115,114,58,0,0,0,218,11,95, + 112,97,116,104,95,109,116,105,109,101,218,3,115,101,116,218, + 11,95,112,97,116,104,95,99,97,99,104,101,218,19,95,114, + 101,108,97,120,101,100,95,112,97,116,104,95,99,97,99,104, + 101,41,5,114,130,0,0,0,114,58,0,0,0,218,14,108, + 111,97,100,101,114,95,100,101,116,97,105,108,115,90,7,108, + 111,97,100,101,114,115,114,200,0,0,0,114,7,0,0,0, + 114,81,1,0,0,114,8,0,0,0,114,223,0,0,0,145, + 5,0,0,115,18,0,0,0,4,4,12,1,26,1,6,1, + 10,2,6,1,8,1,12,1,255,128,122,19,70,105,108,101, + 70,105,110,100,101,114,46,95,95,105,110,105,116,95,95,99, + 1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0, + 2,0,0,0,67,0,0,0,115,10,0,0,0,100,1,124, + 0,95,0,100,2,83,0,41,3,122,31,73,110,118,97,108, + 105,100,97,116,101,32,116,104,101,32,100,105,114,101,99,116, + 111,114,121,32,109,116,105,109,101,46,114,116,0,0,0,78, + 41,1,114,83,1,0,0,114,8,1,0,0,114,7,0,0, + 0,114,7,0,0,0,114,8,0,0,0,114,64,1,0,0, + 159,5,0,0,114,69,0,0,0,122,28,70,105,108,101,70, + 105,110,100,101,114,46,105,110,118,97,108,105,100,97,116,101, + 95,99,97,99,104,101,115,99,2,0,0,0,0,0,0,0, + 0,0,0,0,3,0,0,0,3,0,0,0,67,0,0,0, + 115,42,0,0,0,124,0,160,0,124,1,161,1,125,2,124, + 2,100,1,117,0,114,26,100,1,103,0,102,2,83,0,124, + 2,106,1,124,2,106,2,112,38,103,0,102,2,83,0,41, + 2,122,197,84,114,121,32,116,111,32,102,105,110,100,32,97, + 32,108,111,97,100,101,114,32,102,111,114,32,116,104,101,32, + 115,112,101,99,105,102,105,101,100,32,109,111,100,117,108,101, + 44,32,111,114,32,116,104,101,32,110,97,109,101,115,112,97, + 99,101,10,32,32,32,32,32,32,32,32,112,97,99,107,97, + 103,101,32,112,111,114,116,105,111,110,115,46,32,82,101,116, + 117,114,110,115,32,40,108,111,97,100,101,114,44,32,108,105, + 115,116,45,111,102,45,112,111,114,116,105,111,110,115,41,46, 10,10,32,32,32,32,32,32,32,32,84,104,105,115,32,109, 101,116,104,111,100,32,105,115,32,100,101,112,114,101,99,97, - 116,101,100,46,32,32,85,115,101,32,101,120,101,99,95,109, - 111,100,117,108,101,40,41,32,105,110,115,116,101,97,100,46, - 10,10,32,32,32,32,32,32,32,32,122,38,110,97,109,101, - 115,112,97,99,101,32,109,111,100,117,108,101,32,108,111,97, - 100,101,100,32,119,105,116,104,32,112,97,116,104,32,123,33, - 114,125,78,41,4,114,146,0,0,0,114,160,0,0,0,114, - 34,1,0,0,114,233,0,0,0,114,234,0,0,0,114,7, - 0,0,0,114,7,0,0,0,114,8,0,0,0,114,235,0, - 0,0,226,4,0,0,115,10,0,0,0,6,7,4,1,4, - 255,12,3,255,128,122,28,95,78,97,109,101,115,112,97,99, - 101,76,111,97,100,101,114,46,108,111,97,100,95,109,111,100, - 117,108,101,78,41,12,114,137,0,0,0,114,136,0,0,0, - 114,138,0,0,0,114,223,0,0,0,114,220,0,0,0,114, - 59,1,0,0,114,193,0,0,0,114,244,0,0,0,114,228, - 0,0,0,114,226,0,0,0,114,232,0,0,0,114,235,0, - 0,0,114,7,0,0,0,114,7,0,0,0,114,7,0,0, - 0,114,8,0,0,0,114,58,1,0,0,198,4,0,0,115, - 22,0,0,0,8,0,8,1,2,3,10,1,8,8,8,3, - 8,3,8,3,8,3,12,3,255,128,114,58,1,0,0,99, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 4,0,0,0,64,0,0,0,115,118,0,0,0,101,0,90, - 1,100,0,90,2,100,1,90,3,101,4,100,2,100,3,132, - 0,131,1,90,5,101,4,100,4,100,5,132,0,131,1,90, - 6,101,7,100,6,100,7,132,0,131,1,90,8,101,7,100, - 8,100,9,132,0,131,1,90,9,101,7,100,19,100,11,100, - 12,132,1,131,1,90,10,101,7,100,20,100,13,100,14,132, - 1,131,1,90,11,101,7,100,21,100,15,100,16,132,1,131, - 1,90,12,101,4,100,17,100,18,132,0,131,1,90,13,100, - 10,83,0,41,22,218,10,80,97,116,104,70,105,110,100,101, - 114,122,62,77,101,116,97,32,112,97,116,104,32,102,105,110, - 100,101,114,32,102,111,114,32,115,121,115,46,112,97,116,104, - 32,97,110,100,32,112,97,99,107,97,103,101,32,95,95,112, - 97,116,104,95,95,32,97,116,116,114,105,98,117,116,101,115, - 46,99,0,0,0,0,0,0,0,0,0,0,0,0,2,0, - 0,0,4,0,0,0,67,0,0,0,115,64,0,0,0,116, - 0,116,1,106,2,160,3,161,0,131,1,68,0,93,44,92, - 2,125,0,125,1,124,1,100,1,117,0,114,40,116,1,106, - 2,124,0,61,0,113,14,116,4,124,1,100,2,131,2,114, - 58,124,1,160,5,161,0,1,0,113,14,100,1,83,0,41, - 3,122,125,67,97,108,108,32,116,104,101,32,105,110,118,97, - 108,105,100,97,116,101,95,99,97,99,104,101,115,40,41,32, - 109,101,116,104,111,100,32,111,110,32,97,108,108,32,112,97, - 116,104,32,101,110,116,114,121,32,102,105,110,100,101,114,115, - 10,32,32,32,32,32,32,32,32,115,116,111,114,101,100,32, - 105,110,32,115,121,115,46,112,97,116,104,95,105,109,112,111, - 114,116,101,114,95,99,97,99,104,101,115,32,40,119,104,101, - 114,101,32,105,109,112,108,101,109,101,110,116,101,100,41,46, - 78,218,17,105,110,118,97,108,105,100,97,116,101,95,99,97, - 99,104,101,115,41,6,218,4,108,105,115,116,114,16,0,0, - 0,218,19,112,97,116,104,95,105,109,112,111,114,116,101,114, - 95,99,97,99,104,101,218,5,105,116,101,109,115,114,140,0, - 0,0,114,62,1,0,0,41,2,114,128,0,0,0,218,6, - 102,105,110,100,101,114,114,7,0,0,0,114,7,0,0,0, - 114,8,0,0,0,114,62,1,0,0,245,4,0,0,115,16, - 0,0,0,22,4,8,1,10,1,10,1,8,1,2,128,4, - 252,255,128,122,28,80,97,116,104,70,105,110,100,101,114,46, - 105,110,118,97,108,105,100,97,116,101,95,99,97,99,104,101, - 115,99,1,0,0,0,0,0,0,0,0,0,0,0,2,0, - 0,0,9,0,0,0,67,0,0,0,115,76,0,0,0,116, - 0,106,1,100,1,117,1,114,28,116,0,106,1,115,28,116, - 2,160,3,100,2,116,4,161,2,1,0,116,0,106,1,68, - 0,93,34,125,1,122,14,124,1,124,0,131,1,87,0,2, - 0,1,0,83,0,4,0,116,5,121,74,1,0,1,0,1, - 0,89,0,113,34,100,1,83,0,119,0,41,3,122,46,83, - 101,97,114,99,104,32,115,121,115,46,112,97,116,104,95,104, - 111,111,107,115,32,102,111,114,32,97,32,102,105,110,100,101, - 114,32,102,111,114,32,39,112,97,116,104,39,46,78,122,23, - 115,121,115,46,112,97,116,104,95,104,111,111,107,115,32,105, - 115,32,101,109,112,116,121,41,6,114,16,0,0,0,218,10, - 112,97,116,104,95,104,111,111,107,115,114,88,0,0,0,114, - 89,0,0,0,114,149,0,0,0,114,129,0,0,0,41,2, - 114,58,0,0,0,90,4,104,111,111,107,114,7,0,0,0, - 114,7,0,0,0,114,8,0,0,0,218,11,95,112,97,116, - 104,95,104,111,111,107,115,255,4,0,0,115,20,0,0,0, - 16,3,12,1,10,1,2,1,14,1,12,1,4,1,4,2, - 2,253,255,128,122,22,80,97,116,104,70,105,110,100,101,114, - 46,95,112,97,116,104,95,104,111,111,107,115,99,2,0,0, - 0,0,0,0,0,0,0,0,0,3,0,0,0,8,0,0, - 0,67,0,0,0,115,100,0,0,0,124,1,100,1,107,2, - 114,40,122,12,116,0,160,1,161,0,125,1,87,0,110,18, - 4,0,116,2,121,98,1,0,1,0,1,0,89,0,100,2, - 83,0,122,16,116,3,106,4,124,1,25,0,125,2,87,0, - 124,2,83,0,4,0,116,5,121,96,1,0,1,0,1,0, - 124,0,160,6,124,1,161,1,125,2,124,2,116,3,106,4, - 124,1,60,0,89,0,124,2,83,0,119,0,119,0,41,3, - 122,210,71,101,116,32,116,104,101,32,102,105,110,100,101,114, - 32,102,111,114,32,116,104,101,32,112,97,116,104,32,101,110, - 116,114,121,32,102,114,111,109,32,115,121,115,46,112,97,116, - 104,95,105,109,112,111,114,116,101,114,95,99,97,99,104,101, - 46,10,10,32,32,32,32,32,32,32,32,73,102,32,116,104, - 101,32,112,97,116,104,32,101,110,116,114,121,32,105,115,32, - 110,111,116,32,105,110,32,116,104,101,32,99,97,99,104,101, - 44,32,102,105,110,100,32,116,104,101,32,97,112,112,114,111, - 112,114,105,97,116,101,32,102,105,110,100,101,114,10,32,32, - 32,32,32,32,32,32,97,110,100,32,99,97,99,104,101,32, - 105,116,46,32,73,102,32,110,111,32,102,105,110,100,101,114, - 32,105,115,32,97,118,97,105,108,97,98,108,101,44,32,115, - 116,111,114,101,32,78,111,110,101,46,10,10,32,32,32,32, - 32,32,32,32,114,10,0,0,0,78,41,7,114,19,0,0, - 0,114,70,0,0,0,218,17,70,105,108,101,78,111,116,70, - 111,117,110,100,69,114,114,111,114,114,16,0,0,0,114,64, - 1,0,0,218,8,75,101,121,69,114,114,111,114,114,68,1, - 0,0,41,3,114,209,0,0,0,114,58,0,0,0,114,66, - 1,0,0,114,7,0,0,0,114,7,0,0,0,114,8,0, - 0,0,218,20,95,112,97,116,104,95,105,109,112,111,114,116, - 101,114,95,99,97,99,104,101,12,5,0,0,115,30,0,0, - 0,8,8,2,1,12,1,12,1,6,3,2,1,12,1,4, - 4,12,253,10,1,12,1,4,1,2,253,2,250,255,128,122, - 31,80,97,116,104,70,105,110,100,101,114,46,95,112,97,116, - 104,95,105,109,112,111,114,116,101,114,95,99,97,99,104,101, - 99,3,0,0,0,0,0,0,0,0,0,0,0,6,0,0, - 0,4,0,0,0,67,0,0,0,115,82,0,0,0,116,0, - 124,2,100,1,131,2,114,26,124,2,160,1,124,1,161,1, - 92,2,125,3,125,4,110,14,124,2,160,2,124,1,161,1, - 125,3,103,0,125,4,124,3,100,0,117,1,114,60,116,3, - 160,4,124,1,124,3,161,2,83,0,116,3,160,5,124,1, - 100,0,161,2,125,5,124,4,124,5,95,6,124,5,83,0, - 41,2,78,114,148,0,0,0,41,7,114,140,0,0,0,114, - 148,0,0,0,114,217,0,0,0,114,146,0,0,0,114,212, - 0,0,0,114,194,0,0,0,114,189,0,0,0,41,6,114, - 209,0,0,0,114,150,0,0,0,114,66,1,0,0,114,151, - 0,0,0,114,152,0,0,0,114,198,0,0,0,114,7,0, - 0,0,114,7,0,0,0,114,8,0,0,0,218,16,95,108, - 101,103,97,99,121,95,103,101,116,95,115,112,101,99,34,5, - 0,0,115,20,0,0,0,10,4,16,1,10,2,4,1,8, - 1,12,1,12,1,6,1,4,1,255,128,122,27,80,97,116, - 104,70,105,110,100,101,114,46,95,108,101,103,97,99,121,95, - 103,101,116,95,115,112,101,99,78,99,4,0,0,0,0,0, - 0,0,0,0,0,0,9,0,0,0,5,0,0,0,67,0, - 0,0,115,166,0,0,0,103,0,125,4,124,2,68,0,93, - 134,125,5,116,0,124,5,116,1,116,2,102,2,131,2,115, - 28,113,8,124,0,160,3,124,5,161,1,125,6,124,6,100, - 1,117,1,114,142,116,4,124,6,100,2,131,2,114,70,124, - 6,160,5,124,1,124,3,161,2,125,7,110,12,124,0,160, - 6,124,1,124,6,161,2,125,7,124,7,100,1,117,0,114, - 92,113,8,124,7,106,7,100,1,117,1,114,110,124,7,2, - 0,1,0,83,0,124,7,106,8,125,8,124,8,100,1,117, - 0,114,132,116,9,100,3,131,1,130,1,124,4,160,10,124, - 8,161,1,1,0,113,8,116,11,160,12,124,1,100,1,161, - 2,125,7,124,4,124,7,95,8,124,7,83,0,41,4,122, - 63,70,105,110,100,32,116,104,101,32,108,111,97,100,101,114, - 32,111,114,32,110,97,109,101,115,112,97,99,101,95,112,97, - 116,104,32,102,111,114,32,116,104,105,115,32,109,111,100,117, - 108,101,47,112,97,99,107,97,103,101,32,110,97,109,101,46, - 78,114,214,0,0,0,122,19,115,112,101,99,32,109,105,115, - 115,105,110,103,32,108,111,97,100,101,114,41,13,114,172,0, - 0,0,114,97,0,0,0,218,5,98,121,116,101,115,114,71, - 1,0,0,114,140,0,0,0,114,214,0,0,0,114,72,1, - 0,0,114,151,0,0,0,114,189,0,0,0,114,129,0,0, - 0,114,178,0,0,0,114,146,0,0,0,114,194,0,0,0, - 41,9,114,209,0,0,0,114,150,0,0,0,114,58,0,0, - 0,114,213,0,0,0,218,14,110,97,109,101,115,112,97,99, - 101,95,112,97,116,104,90,5,101,110,116,114,121,114,66,1, - 0,0,114,198,0,0,0,114,152,0,0,0,114,7,0,0, - 0,114,7,0,0,0,114,8,0,0,0,218,9,95,103,101, - 116,95,115,112,101,99,49,5,0,0,115,44,0,0,0,4, - 5,8,1,14,1,2,1,10,1,8,1,10,1,14,1,12, - 2,8,1,2,1,10,1,8,1,6,1,8,1,8,1,10, - 5,2,128,12,2,6,1,4,1,255,128,122,20,80,97,116, - 104,70,105,110,100,101,114,46,95,103,101,116,95,115,112,101, - 99,99,4,0,0,0,0,0,0,0,0,0,0,0,6,0, - 0,0,5,0,0,0,67,0,0,0,115,94,0,0,0,124, - 2,100,1,117,0,114,14,116,0,106,1,125,2,124,0,160, - 2,124,1,124,2,124,3,161,3,125,4,124,4,100,1,117, - 0,114,40,100,1,83,0,124,4,106,3,100,1,117,0,114, - 90,124,4,106,4,125,5,124,5,114,86,100,1,124,4,95, - 5,116,6,124,1,124,5,124,0,106,2,131,3,124,4,95, - 4,124,4,83,0,100,1,83,0,124,4,83,0,41,2,122, - 141,84,114,121,32,116,111,32,102,105,110,100,32,97,32,115, - 112,101,99,32,102,111,114,32,39,102,117,108,108,110,97,109, - 101,39,32,111,110,32,115,121,115,46,112,97,116,104,32,111, - 114,32,39,112,97,116,104,39,46,10,10,32,32,32,32,32, - 32,32,32,84,104,101,32,115,101,97,114,99,104,32,105,115, - 32,98,97,115,101,100,32,111,110,32,115,121,115,46,112,97, - 116,104,95,104,111,111,107,115,32,97,110,100,32,115,121,115, - 46,112,97,116,104,95,105,109,112,111,114,116,101,114,95,99, - 97,99,104,101,46,10,32,32,32,32,32,32,32,32,78,41, - 7,114,16,0,0,0,114,58,0,0,0,114,75,1,0,0, - 114,151,0,0,0,114,189,0,0,0,114,192,0,0,0,114, - 32,1,0,0,41,6,114,209,0,0,0,114,150,0,0,0, - 114,58,0,0,0,114,213,0,0,0,114,198,0,0,0,114, - 74,1,0,0,114,7,0,0,0,114,7,0,0,0,114,8, - 0,0,0,114,214,0,0,0,81,5,0,0,115,28,0,0, - 0,8,6,6,1,14,1,8,1,4,1,10,1,6,1,4, - 1,6,3,16,1,4,1,4,2,4,2,255,128,122,20,80, - 97,116,104,70,105,110,100,101,114,46,102,105,110,100,95,115, - 112,101,99,99,3,0,0,0,0,0,0,0,0,0,0,0, - 4,0,0,0,4,0,0,0,67,0,0,0,115,30,0,0, - 0,124,0,160,0,124,1,124,2,161,2,125,3,124,3,100, - 1,117,0,114,24,100,1,83,0,124,3,106,1,83,0,41, - 2,122,170,102,105,110,100,32,116,104,101,32,109,111,100,117, - 108,101,32,111,110,32,115,121,115,46,112,97,116,104,32,111, - 114,32,39,112,97,116,104,39,32,98,97,115,101,100,32,111, - 110,32,115,121,115,46,112,97,116,104,95,104,111,111,107,115, - 32,97,110,100,10,32,32,32,32,32,32,32,32,115,121,115, - 46,112,97,116,104,95,105,109,112,111,114,116,101,114,95,99, - 97,99,104,101,46,10,10,32,32,32,32,32,32,32,32,84, - 104,105,115,32,109,101,116,104,111,100,32,105,115,32,100,101, - 112,114,101,99,97,116,101,100,46,32,32,85,115,101,32,102, - 105,110,100,95,115,112,101,99,40,41,32,105,110,115,116,101, - 97,100,46,10,10,32,32,32,32,32,32,32,32,78,114,215, - 0,0,0,114,216,0,0,0,114,7,0,0,0,114,7,0, - 0,0,114,8,0,0,0,114,217,0,0,0,105,5,0,0, - 115,10,0,0,0,12,8,8,1,4,1,6,1,255,128,122, - 22,80,97,116,104,70,105,110,100,101,114,46,102,105,110,100, - 95,109,111,100,117,108,101,99,0,0,0,0,0,0,0,0, - 0,0,0,0,3,0,0,0,4,0,0,0,79,0,0,0, - 115,28,0,0,0,100,1,100,2,108,0,109,1,125,2,1, - 0,124,2,106,2,124,0,105,0,124,1,164,1,142,1,83, - 0,41,4,97,32,1,0,0,10,32,32,32,32,32,32,32, - 32,70,105,110,100,32,100,105,115,116,114,105,98,117,116,105, - 111,110,115,46,10,10,32,32,32,32,32,32,32,32,82,101, - 116,117,114,110,32,97,110,32,105,116,101,114,97,98,108,101, - 32,111,102,32,97,108,108,32,68,105,115,116,114,105,98,117, - 116,105,111,110,32,105,110,115,116,97,110,99,101,115,32,99, - 97,112,97,98,108,101,32,111,102,10,32,32,32,32,32,32, - 32,32,108,111,97,100,105,110,103,32,116,104,101,32,109,101, - 116,97,100,97,116,97,32,102,111,114,32,112,97,99,107,97, - 103,101,115,32,109,97,116,99,104,105,110,103,32,96,96,99, - 111,110,116,101,120,116,46,110,97,109,101,96,96,10,32,32, - 32,32,32,32,32,32,40,111,114,32,97,108,108,32,110,97, - 109,101,115,32,105,102,32,96,96,78,111,110,101,96,96,32, - 105,110,100,105,99,97,116,101,100,41,32,97,108,111,110,103, - 32,116,104,101,32,112,97,116,104,115,32,105,110,32,116,104, - 101,32,108,105,115,116,10,32,32,32,32,32,32,32,32,111, - 102,32,100,105,114,101,99,116,111,114,105,101,115,32,96,96, - 99,111,110,116,101,120,116,46,112,97,116,104,96,96,46,10, - 32,32,32,32,32,32,32,32,114,0,0,0,0,41,1,218, - 18,77,101,116,97,100,97,116,97,80,97,116,104,70,105,110, - 100,101,114,78,41,3,90,18,105,109,112,111,114,116,108,105, - 98,46,109,101,116,97,100,97,116,97,114,76,1,0,0,218, - 18,102,105,110,100,95,100,105,115,116,114,105,98,117,116,105, - 111,110,115,41,3,114,131,0,0,0,114,132,0,0,0,114, - 76,1,0,0,114,7,0,0,0,114,7,0,0,0,114,8, - 0,0,0,114,77,1,0,0,118,5,0,0,115,6,0,0, - 0,12,10,16,1,255,128,122,29,80,97,116,104,70,105,110, - 100,101,114,46,102,105,110,100,95,100,105,115,116,114,105,98, - 117,116,105,111,110,115,41,1,78,41,2,78,78,41,1,78, - 41,14,114,137,0,0,0,114,136,0,0,0,114,138,0,0, - 0,114,139,0,0,0,114,220,0,0,0,114,62,1,0,0, - 114,68,1,0,0,114,221,0,0,0,114,71,1,0,0,114, - 72,1,0,0,114,75,1,0,0,114,214,0,0,0,114,217, - 0,0,0,114,77,1,0,0,114,7,0,0,0,114,7,0, - 0,0,114,7,0,0,0,114,8,0,0,0,114,61,1,0, - 0,241,4,0,0,115,38,0,0,0,8,0,4,2,2,2, - 10,1,2,9,10,1,2,12,10,1,2,21,10,1,2,14, - 12,1,2,31,12,1,2,23,12,1,2,12,14,1,255,128, - 114,61,1,0,0,99,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,3,0,0,0,64,0,0,0,115,90, - 0,0,0,101,0,90,1,100,0,90,2,100,1,90,3,100, - 2,100,3,132,0,90,4,100,4,100,5,132,0,90,5,101, - 6,90,7,100,6,100,7,132,0,90,8,100,8,100,9,132, - 0,90,9,100,19,100,11,100,12,132,1,90,10,100,13,100, - 14,132,0,90,11,101,12,100,15,100,16,132,0,131,1,90, - 13,100,17,100,18,132,0,90,14,100,10,83,0,41,20,218, - 10,70,105,108,101,70,105,110,100,101,114,122,172,70,105,108, - 101,45,98,97,115,101,100,32,102,105,110,100,101,114,46,10, - 10,32,32,32,32,73,110,116,101,114,97,99,116,105,111,110, - 115,32,119,105,116,104,32,116,104,101,32,102,105,108,101,32, - 115,121,115,116,101,109,32,97,114,101,32,99,97,99,104,101, - 100,32,102,111,114,32,112,101,114,102,111,114,109,97,110,99, - 101,44,32,98,101,105,110,103,10,32,32,32,32,114,101,102, - 114,101,115,104,101,100,32,119,104,101,110,32,116,104,101,32, - 100,105,114,101,99,116,111,114,121,32,116,104,101,32,102,105, - 110,100,101,114,32,105,115,32,104,97,110,100,108,105,110,103, - 32,104,97,115,32,98,101,101,110,32,109,111,100,105,102,105, - 101,100,46,10,10,32,32,32,32,99,2,0,0,0,0,0, - 0,0,0,0,0,0,5,0,0,0,6,0,0,0,7,0, - 0,0,115,84,0,0,0,103,0,125,3,124,2,68,0,93, - 32,92,2,137,0,125,4,124,3,160,0,135,0,102,1,100, - 1,100,2,132,8,124,4,68,0,131,1,161,1,1,0,113, - 8,124,3,124,0,95,1,124,1,112,54,100,3,124,0,95, - 2,100,4,124,0,95,3,116,4,131,0,124,0,95,5,116, - 4,131,0,124,0,95,6,100,5,83,0,41,6,122,154,73, - 110,105,116,105,97,108,105,122,101,32,119,105,116,104,32,116, - 104,101,32,112,97,116,104,32,116,111,32,115,101,97,114,99, - 104,32,111,110,32,97,110,100,32,97,32,118,97,114,105,97, - 98,108,101,32,110,117,109,98,101,114,32,111,102,10,32,32, - 32,32,32,32,32,32,50,45,116,117,112,108,101,115,32,99, - 111,110,116,97,105,110,105,110,103,32,116,104,101,32,108,111, - 97,100,101,114,32,97,110,100,32,116,104,101,32,102,105,108, - 101,32,115,117,102,102,105,120,101,115,32,116,104,101,32,108, - 111,97,100,101,114,10,32,32,32,32,32,32,32,32,114,101, - 99,111,103,110,105,122,101,115,46,99,1,0,0,0,0,0, - 0,0,0,0,0,0,2,0,0,0,3,0,0,0,51,0, - 0,0,115,22,0,0,0,124,0,93,14,125,1,124,1,136, - 0,102,2,86,0,1,0,113,2,100,0,83,0,114,121,0, - 0,0,114,7,0,0,0,114,28,1,0,0,169,1,114,151, - 0,0,0,114,7,0,0,0,114,8,0,0,0,114,9,0, - 0,0,147,5,0,0,114,14,0,0,0,122,38,70,105,108, - 101,70,105,110,100,101,114,46,95,95,105,110,105,116,95,95, - 46,60,108,111,99,97,108,115,62,46,60,103,101,110,101,120, - 112,114,62,114,86,0,0,0,114,116,0,0,0,78,41,7, - 114,178,0,0,0,218,8,95,108,111,97,100,101,114,115,114, - 58,0,0,0,218,11,95,112,97,116,104,95,109,116,105,109, - 101,218,3,115,101,116,218,11,95,112,97,116,104,95,99,97, - 99,104,101,218,19,95,114,101,108,97,120,101,100,95,112,97, - 116,104,95,99,97,99,104,101,41,5,114,130,0,0,0,114, - 58,0,0,0,218,14,108,111,97,100,101,114,95,100,101,116, - 97,105,108,115,90,7,108,111,97,100,101,114,115,114,200,0, - 0,0,114,7,0,0,0,114,79,1,0,0,114,8,0,0, - 0,114,223,0,0,0,141,5,0,0,115,18,0,0,0,4, - 4,12,1,26,1,6,1,10,2,6,1,8,1,12,1,255, - 128,122,19,70,105,108,101,70,105,110,100,101,114,46,95,95, - 105,110,105,116,95,95,99,1,0,0,0,0,0,0,0,0, - 0,0,0,1,0,0,0,2,0,0,0,67,0,0,0,115, - 10,0,0,0,100,1,124,0,95,0,100,2,83,0,41,3, - 122,31,73,110,118,97,108,105,100,97,116,101,32,116,104,101, - 32,100,105,114,101,99,116,111,114,121,32,109,116,105,109,101, - 46,114,116,0,0,0,78,41,1,114,81,1,0,0,114,8, - 1,0,0,114,7,0,0,0,114,7,0,0,0,114,8,0, - 0,0,114,62,1,0,0,155,5,0,0,114,69,0,0,0, - 122,28,70,105,108,101,70,105,110,100,101,114,46,105,110,118, - 97,108,105,100,97,116,101,95,99,97,99,104,101,115,99,2, - 0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,3, - 0,0,0,67,0,0,0,115,42,0,0,0,124,0,160,0, - 124,1,161,1,125,2,124,2,100,1,117,0,114,26,100,1, - 103,0,102,2,83,0,124,2,106,1,124,2,106,2,112,38, - 103,0,102,2,83,0,41,2,122,197,84,114,121,32,116,111, - 32,102,105,110,100,32,97,32,108,111,97,100,101,114,32,102, - 111,114,32,116,104,101,32,115,112,101,99,105,102,105,101,100, - 32,109,111,100,117,108,101,44,32,111,114,32,116,104,101,32, - 110,97,109,101,115,112,97,99,101,10,32,32,32,32,32,32, - 32,32,112,97,99,107,97,103,101,32,112,111,114,116,105,111, - 110,115,46,32,82,101,116,117,114,110,115,32,40,108,111,97, - 100,101,114,44,32,108,105,115,116,45,111,102,45,112,111,114, - 116,105,111,110,115,41,46,10,10,32,32,32,32,32,32,32, - 32,84,104,105,115,32,109,101,116,104,111,100,32,105,115,32, - 100,101,112,114,101,99,97,116,101,100,46,32,32,85,115,101, - 32,102,105,110,100,95,115,112,101,99,40,41,32,105,110,115, - 116,101,97,100,46,10,10,32,32,32,32,32,32,32,32,78, - 41,3,114,214,0,0,0,114,151,0,0,0,114,189,0,0, - 0,41,3,114,130,0,0,0,114,150,0,0,0,114,198,0, - 0,0,114,7,0,0,0,114,7,0,0,0,114,8,0,0, - 0,114,148,0,0,0,161,5,0,0,115,10,0,0,0,10, - 7,8,1,8,1,16,1,255,128,122,22,70,105,108,101,70, - 105,110,100,101,114,46,102,105,110,100,95,108,111,97,100,101, - 114,99,6,0,0,0,0,0,0,0,0,0,0,0,7,0, - 0,0,6,0,0,0,67,0,0,0,115,26,0,0,0,124, - 1,124,2,124,3,131,2,125,6,116,0,124,2,124,3,124, - 6,124,4,100,1,141,4,83,0,41,2,78,114,188,0,0, - 0,41,1,114,201,0,0,0,41,7,114,130,0,0,0,114, - 199,0,0,0,114,150,0,0,0,114,58,0,0,0,90,4, - 115,109,115,108,114,213,0,0,0,114,151,0,0,0,114,7, - 0,0,0,114,7,0,0,0,114,8,0,0,0,114,75,1, - 0,0,173,5,0,0,115,10,0,0,0,10,1,8,1,2, - 1,6,255,255,128,122,20,70,105,108,101,70,105,110,100,101, - 114,46,95,103,101,116,95,115,112,101,99,78,99,3,0,0, - 0,0,0,0,0,0,0,0,0,14,0,0,0,8,0,0, - 0,67,0,0,0,115,100,1,0,0,100,1,125,3,124,1, - 160,0,100,2,161,1,100,3,25,0,125,4,122,24,116,1, - 124,0,106,2,112,34,116,3,160,4,161,0,131,1,106,5, - 125,5,87,0,110,20,4,0,116,6,144,1,121,98,1,0, - 1,0,1,0,100,4,125,5,89,0,124,5,124,0,106,7, - 107,3,114,88,124,0,160,8,161,0,1,0,124,5,124,0, - 95,7,116,9,131,0,114,110,124,0,106,10,125,6,124,4, - 160,11,161,0,125,7,110,10,124,0,106,12,125,6,124,4, - 125,7,124,7,124,6,118,0,114,214,116,13,124,0,106,2, - 124,4,131,2,125,8,124,0,106,14,68,0,93,58,92,2, - 125,9,125,10,100,5,124,9,23,0,125,11,116,13,124,8, - 124,11,131,2,125,12,116,15,124,12,131,1,114,204,124,0, - 160,16,124,10,124,1,124,12,124,8,103,1,124,2,161,5, - 2,0,1,0,83,0,113,146,116,17,124,8,131,1,125,3, - 124,0,106,14,68,0,93,86,92,2,125,9,125,10,116,13, - 124,0,106,2,124,4,124,9,23,0,131,2,125,12,116,18, - 106,19,100,6,124,12,100,3,100,7,141,3,1,0,124,7, - 124,9,23,0,124,6,118,0,144,1,114,50,116,15,124,12, - 131,1,144,1,114,50,124,0,160,16,124,10,124,1,124,12, - 100,8,124,2,161,5,2,0,1,0,83,0,113,220,124,3, - 144,1,114,94,116,18,160,19,100,9,124,8,161,2,1,0, - 116,18,160,20,124,1,100,8,161,2,125,13,124,8,103,1, - 124,13,95,21,124,13,83,0,100,8,83,0,119,0,41,10, - 122,111,84,114,121,32,116,111,32,102,105,110,100,32,97,32, - 115,112,101,99,32,102,111,114,32,116,104,101,32,115,112,101, - 99,105,102,105,101,100,32,109,111,100,117,108,101,46,10,10, - 32,32,32,32,32,32,32,32,82,101,116,117,114,110,115,32, - 116,104,101,32,109,97,116,99,104,105,110,103,32,115,112,101, - 99,44,32,111,114,32,78,111,110,101,32,105,102,32,110,111, - 116,32,102,111,117,110,100,46,10,32,32,32,32,32,32,32, - 32,70,114,86,0,0,0,114,45,0,0,0,114,116,0,0, - 0,114,223,0,0,0,122,9,116,114,121,105,110,103,32,123, - 125,41,1,90,9,118,101,114,98,111,115,105,116,121,78,122, - 25,112,111,115,115,105,98,108,101,32,110,97,109,101,115,112, - 97,99,101,32,102,111,114,32,123,125,41,22,114,55,0,0, - 0,114,63,0,0,0,114,58,0,0,0,114,19,0,0,0, - 114,70,0,0,0,114,21,1,0,0,114,64,0,0,0,114, - 81,1,0,0,218,11,95,102,105,108,108,95,99,97,99,104, - 101,114,22,0,0,0,114,84,1,0,0,114,117,0,0,0, - 114,83,1,0,0,114,54,0,0,0,114,80,1,0,0,114, - 68,0,0,0,114,75,1,0,0,114,71,0,0,0,114,146, - 0,0,0,114,160,0,0,0,114,194,0,0,0,114,189,0, - 0,0,41,14,114,130,0,0,0,114,150,0,0,0,114,213, - 0,0,0,90,12,105,115,95,110,97,109,101,115,112,97,99, - 101,90,11,116,97,105,108,95,109,111,100,117,108,101,114,180, - 0,0,0,90,5,99,97,99,104,101,90,12,99,97,99,104, - 101,95,109,111,100,117,108,101,90,9,98,97,115,101,95,112, - 97,116,104,114,29,1,0,0,114,199,0,0,0,90,13,105, - 110,105,116,95,102,105,108,101,110,97,109,101,90,9,102,117, - 108,108,95,112,97,116,104,114,198,0,0,0,114,7,0,0, - 0,114,7,0,0,0,114,8,0,0,0,114,214,0,0,0, - 178,5,0,0,115,80,0,0,0,4,5,14,1,2,1,24, - 1,14,1,6,1,10,1,8,1,6,1,6,2,6,1,10, - 1,6,2,4,1,8,2,12,1,14,1,8,1,10,1,8, - 1,24,1,2,255,8,5,14,2,16,1,16,1,14,1,10, - 1,10,1,4,1,8,255,2,128,6,2,12,1,12,1,8, - 1,4,1,4,1,2,219,255,128,122,20,70,105,108,101,70, - 105,110,100,101,114,46,102,105,110,100,95,115,112,101,99,99, - 1,0,0,0,0,0,0,0,0,0,0,0,9,0,0,0, - 10,0,0,0,67,0,0,0,115,190,0,0,0,124,0,106, - 0,125,1,122,22,116,1,160,2,124,1,112,22,116,1,160, - 3,161,0,161,1,125,2,87,0,110,24,4,0,116,4,116, - 5,116,6,102,3,121,188,1,0,1,0,1,0,103,0,125, - 2,89,0,116,7,106,8,160,9,100,1,161,1,115,78,116, - 10,124,2,131,1,124,0,95,11,110,74,116,10,131,0,125, - 3,124,2,68,0,93,56,125,4,124,4,160,12,100,2,161, - 1,92,3,125,5,125,6,125,7,124,6,114,130,100,3,160, - 13,124,5,124,7,160,14,161,0,161,2,125,8,110,4,124, - 5,125,8,124,3,160,15,124,8,161,1,1,0,113,88,124, - 3,124,0,95,11,116,7,106,8,160,9,116,16,161,1,114, - 184,100,4,100,5,132,0,124,2,68,0,131,1,124,0,95, - 17,100,6,83,0,100,6,83,0,119,0,41,7,122,68,70, - 105,108,108,32,116,104,101,32,99,97,99,104,101,32,111,102, - 32,112,111,116,101,110,116,105,97,108,32,109,111,100,117,108, - 101,115,32,97,110,100,32,112,97,99,107,97,103,101,115,32, - 102,111,114,32,116,104,105,115,32,100,105,114,101,99,116,111, - 114,121,46,114,15,0,0,0,114,86,0,0,0,114,76,0, - 0,0,99,1,0,0,0,0,0,0,0,0,0,0,0,2, - 0,0,0,4,0,0,0,83,0,0,0,115,20,0,0,0, - 104,0,124,0,93,12,125,1,124,1,160,0,161,0,146,2, - 113,4,83,0,114,7,0,0,0,41,1,114,117,0,0,0, - 41,2,114,5,0,0,0,90,2,102,110,114,7,0,0,0, - 114,7,0,0,0,114,8,0,0,0,114,13,0,0,0,255, - 5,0,0,115,4,0,0,0,20,0,255,128,122,41,70,105, + 116,101,100,46,32,32,85,115,101,32,102,105,110,100,95,115, + 112,101,99,40,41,32,105,110,115,116,101,97,100,46,10,10, + 32,32,32,32,32,32,32,32,78,41,3,114,214,0,0,0, + 114,151,0,0,0,114,189,0,0,0,41,3,114,130,0,0, + 0,114,150,0,0,0,114,198,0,0,0,114,7,0,0,0, + 114,7,0,0,0,114,8,0,0,0,114,148,0,0,0,165, + 5,0,0,115,10,0,0,0,10,7,8,1,8,1,16,1, + 255,128,122,22,70,105,108,101,70,105,110,100,101,114,46,102, + 105,110,100,95,108,111,97,100,101,114,99,6,0,0,0,0, + 0,0,0,0,0,0,0,7,0,0,0,6,0,0,0,67, + 0,0,0,115,26,0,0,0,124,1,124,2,124,3,131,2, + 125,6,116,0,124,2,124,3,124,6,124,4,100,1,141,4, + 83,0,41,2,78,114,188,0,0,0,41,1,114,201,0,0, + 0,41,7,114,130,0,0,0,114,199,0,0,0,114,150,0, + 0,0,114,58,0,0,0,90,4,115,109,115,108,114,213,0, + 0,0,114,151,0,0,0,114,7,0,0,0,114,7,0,0, + 0,114,8,0,0,0,114,77,1,0,0,177,5,0,0,115, + 10,0,0,0,10,1,8,1,2,1,6,255,255,128,122,20, + 70,105,108,101,70,105,110,100,101,114,46,95,103,101,116,95, + 115,112,101,99,78,99,3,0,0,0,0,0,0,0,0,0, + 0,0,14,0,0,0,8,0,0,0,67,0,0,0,115,100, + 1,0,0,100,1,125,3,124,1,160,0,100,2,161,1,100, + 3,25,0,125,4,122,24,116,1,124,0,106,2,112,34,116, + 3,160,4,161,0,131,1,106,5,125,5,87,0,110,20,4, + 0,116,6,144,1,121,98,1,0,1,0,1,0,100,4,125, + 5,89,0,124,5,124,0,106,7,107,3,114,88,124,0,160, + 8,161,0,1,0,124,5,124,0,95,7,116,9,131,0,114, + 110,124,0,106,10,125,6,124,4,160,11,161,0,125,7,110, + 10,124,0,106,12,125,6,124,4,125,7,124,7,124,6,118, + 0,114,214,116,13,124,0,106,2,124,4,131,2,125,8,124, + 0,106,14,68,0,93,58,92,2,125,9,125,10,100,5,124, + 9,23,0,125,11,116,13,124,8,124,11,131,2,125,12,116, + 15,124,12,131,1,114,204,124,0,160,16,124,10,124,1,124, + 12,124,8,103,1,124,2,161,5,2,0,1,0,83,0,113, + 146,116,17,124,8,131,1,125,3,124,0,106,14,68,0,93, + 86,92,2,125,9,125,10,116,13,124,0,106,2,124,4,124, + 9,23,0,131,2,125,12,116,18,106,19,100,6,124,12,100, + 3,100,7,141,3,1,0,124,7,124,9,23,0,124,6,118, + 0,144,1,114,50,116,15,124,12,131,1,144,1,114,50,124, + 0,160,16,124,10,124,1,124,12,100,8,124,2,161,5,2, + 0,1,0,83,0,113,220,124,3,144,1,114,94,116,18,160, + 19,100,9,124,8,161,2,1,0,116,18,160,20,124,1,100, + 8,161,2,125,13,124,8,103,1,124,13,95,21,124,13,83, + 0,100,8,83,0,119,0,41,10,122,111,84,114,121,32,116, + 111,32,102,105,110,100,32,97,32,115,112,101,99,32,102,111, + 114,32,116,104,101,32,115,112,101,99,105,102,105,101,100,32, + 109,111,100,117,108,101,46,10,10,32,32,32,32,32,32,32, + 32,82,101,116,117,114,110,115,32,116,104,101,32,109,97,116, + 99,104,105,110,103,32,115,112,101,99,44,32,111,114,32,78, + 111,110,101,32,105,102,32,110,111,116,32,102,111,117,110,100, + 46,10,32,32,32,32,32,32,32,32,70,114,86,0,0,0, + 114,45,0,0,0,114,116,0,0,0,114,223,0,0,0,122, + 9,116,114,121,105,110,103,32,123,125,41,1,90,9,118,101, + 114,98,111,115,105,116,121,78,122,25,112,111,115,115,105,98, + 108,101,32,110,97,109,101,115,112,97,99,101,32,102,111,114, + 32,123,125,41,22,114,55,0,0,0,114,63,0,0,0,114, + 58,0,0,0,114,19,0,0,0,114,70,0,0,0,114,22, + 1,0,0,114,64,0,0,0,114,83,1,0,0,218,11,95, + 102,105,108,108,95,99,97,99,104,101,114,22,0,0,0,114, + 86,1,0,0,114,117,0,0,0,114,85,1,0,0,114,54, + 0,0,0,114,82,1,0,0,114,68,0,0,0,114,77,1, + 0,0,114,71,0,0,0,114,146,0,0,0,114,160,0,0, + 0,114,194,0,0,0,114,189,0,0,0,41,14,114,130,0, + 0,0,114,150,0,0,0,114,213,0,0,0,90,12,105,115, + 95,110,97,109,101,115,112,97,99,101,90,11,116,97,105,108, + 95,109,111,100,117,108,101,114,180,0,0,0,90,5,99,97, + 99,104,101,90,12,99,97,99,104,101,95,109,111,100,117,108, + 101,90,9,98,97,115,101,95,112,97,116,104,114,30,1,0, + 0,114,199,0,0,0,90,13,105,110,105,116,95,102,105,108, + 101,110,97,109,101,90,9,102,117,108,108,95,112,97,116,104, + 114,198,0,0,0,114,7,0,0,0,114,7,0,0,0,114, + 8,0,0,0,114,214,0,0,0,182,5,0,0,115,80,0, + 0,0,4,5,14,1,2,1,24,1,14,1,6,1,10,1, + 8,1,6,1,6,2,6,1,10,1,6,2,4,1,8,2, + 12,1,14,1,8,1,10,1,8,1,24,1,2,255,8,5, + 14,2,16,1,16,1,14,1,10,1,10,1,4,1,8,255, + 2,128,6,2,12,1,12,1,8,1,4,1,4,1,2,219, + 255,128,122,20,70,105,108,101,70,105,110,100,101,114,46,102, + 105,110,100,95,115,112,101,99,99,1,0,0,0,0,0,0, + 0,0,0,0,0,9,0,0,0,10,0,0,0,67,0,0, + 0,115,190,0,0,0,124,0,106,0,125,1,122,22,116,1, + 160,2,124,1,112,22,116,1,160,3,161,0,161,1,125,2, + 87,0,110,24,4,0,116,4,116,5,116,6,102,3,121,188, + 1,0,1,0,1,0,103,0,125,2,89,0,116,7,106,8, + 160,9,100,1,161,1,115,78,116,10,124,2,131,1,124,0, + 95,11,110,74,116,10,131,0,125,3,124,2,68,0,93,56, + 125,4,124,4,160,12,100,2,161,1,92,3,125,5,125,6, + 125,7,124,6,114,130,100,3,160,13,124,5,124,7,160,14, + 161,0,161,2,125,8,110,4,124,5,125,8,124,3,160,15, + 124,8,161,1,1,0,113,88,124,3,124,0,95,11,116,7, + 106,8,160,9,116,16,161,1,114,184,100,4,100,5,132,0, + 124,2,68,0,131,1,124,0,95,17,100,6,83,0,100,6, + 83,0,119,0,41,7,122,68,70,105,108,108,32,116,104,101, + 32,99,97,99,104,101,32,111,102,32,112,111,116,101,110,116, + 105,97,108,32,109,111,100,117,108,101,115,32,97,110,100,32, + 112,97,99,107,97,103,101,115,32,102,111,114,32,116,104,105, + 115,32,100,105,114,101,99,116,111,114,121,46,114,15,0,0, + 0,114,86,0,0,0,114,76,0,0,0,99,1,0,0,0, + 0,0,0,0,0,0,0,0,2,0,0,0,4,0,0,0, + 83,0,0,0,115,20,0,0,0,104,0,124,0,93,12,125, + 1,124,1,160,0,161,0,146,2,113,4,83,0,114,7,0, + 0,0,41,1,114,117,0,0,0,41,2,114,5,0,0,0, + 90,2,102,110,114,7,0,0,0,114,7,0,0,0,114,8, + 0,0,0,114,13,0,0,0,3,6,0,0,115,4,0,0, + 0,20,0,255,128,122,41,70,105,108,101,70,105,110,100,101, + 114,46,95,102,105,108,108,95,99,97,99,104,101,46,60,108, + 111,99,97,108,115,62,46,60,115,101,116,99,111,109,112,62, + 78,41,18,114,58,0,0,0,114,19,0,0,0,90,7,108, + 105,115,116,100,105,114,114,70,0,0,0,114,71,1,0,0, + 218,15,80,101,114,109,105,115,115,105,111,110,69,114,114,111, + 114,218,18,78,111,116,65,68,105,114,101,99,116,111,114,121, + 69,114,114,111,114,114,16,0,0,0,114,26,0,0,0,114, + 27,0,0,0,114,84,1,0,0,114,85,1,0,0,114,112, + 0,0,0,114,77,0,0,0,114,117,0,0,0,218,3,97, + 100,100,114,28,0,0,0,114,86,1,0,0,41,9,114,130, + 0,0,0,114,58,0,0,0,90,8,99,111,110,116,101,110, + 116,115,90,21,108,111,119,101,114,95,115,117,102,102,105,120, + 95,99,111,110,116,101,110,116,115,114,56,1,0,0,114,128, + 0,0,0,114,40,1,0,0,114,30,1,0,0,90,8,110, + 101,119,95,110,97,109,101,114,7,0,0,0,114,7,0,0, + 0,114,8,0,0,0,114,88,1,0,0,230,5,0,0,115, + 40,0,0,0,6,2,2,1,22,1,18,1,6,3,12,3, + 12,1,6,7,8,1,16,1,4,1,18,1,4,2,12,1, + 6,1,12,1,20,1,4,255,2,233,255,128,122,22,70,105, 108,101,70,105,110,100,101,114,46,95,102,105,108,108,95,99, - 97,99,104,101,46,60,108,111,99,97,108,115,62,46,60,115, - 101,116,99,111,109,112,62,78,41,18,114,58,0,0,0,114, - 19,0,0,0,90,7,108,105,115,116,100,105,114,114,70,0, - 0,0,114,69,1,0,0,218,15,80,101,114,109,105,115,115, - 105,111,110,69,114,114,111,114,218,18,78,111,116,65,68,105, - 114,101,99,116,111,114,121,69,114,114,111,114,114,16,0,0, - 0,114,26,0,0,0,114,27,0,0,0,114,82,1,0,0, - 114,83,1,0,0,114,112,0,0,0,114,77,0,0,0,114, - 117,0,0,0,218,3,97,100,100,114,28,0,0,0,114,84, - 1,0,0,41,9,114,130,0,0,0,114,58,0,0,0,90, - 8,99,111,110,116,101,110,116,115,90,21,108,111,119,101,114, - 95,115,117,102,102,105,120,95,99,111,110,116,101,110,116,115, - 114,55,1,0,0,114,128,0,0,0,114,39,1,0,0,114, - 29,1,0,0,90,8,110,101,119,95,110,97,109,101,114,7, - 0,0,0,114,7,0,0,0,114,8,0,0,0,114,86,1, - 0,0,226,5,0,0,115,40,0,0,0,6,2,2,1,22, - 1,18,1,6,3,12,3,12,1,6,7,8,1,16,1,4, - 1,18,1,4,2,12,1,6,1,12,1,20,1,4,255,2, - 233,255,128,122,22,70,105,108,101,70,105,110,100,101,114,46, - 95,102,105,108,108,95,99,97,99,104,101,99,1,0,0,0, - 0,0,0,0,0,0,0,0,3,0,0,0,3,0,0,0, - 7,0,0,0,115,18,0,0,0,135,0,135,1,102,2,100, - 1,100,2,132,8,125,2,124,2,83,0,41,4,97,20,1, - 0,0,65,32,99,108,97,115,115,32,109,101,116,104,111,100, - 32,119,104,105,99,104,32,114,101,116,117,114,110,115,32,97, - 32,99,108,111,115,117,114,101,32,116,111,32,117,115,101,32, - 111,110,32,115,121,115,46,112,97,116,104,95,104,111,111,107, - 10,32,32,32,32,32,32,32,32,119,104,105,99,104,32,119, - 105,108,108,32,114,101,116,117,114,110,32,97,110,32,105,110, - 115,116,97,110,99,101,32,117,115,105,110,103,32,116,104,101, - 32,115,112,101,99,105,102,105,101,100,32,108,111,97,100,101, - 114,115,32,97,110,100,32,116,104,101,32,112,97,116,104,10, - 32,32,32,32,32,32,32,32,99,97,108,108,101,100,32,111, - 110,32,116,104,101,32,99,108,111,115,117,114,101,46,10,10, - 32,32,32,32,32,32,32,32,73,102,32,116,104,101,32,112, - 97,116,104,32,99,97,108,108,101,100,32,111,110,32,116,104, - 101,32,99,108,111,115,117,114,101,32,105,115,32,110,111,116, - 32,97,32,100,105,114,101,99,116,111,114,121,44,32,73,109, - 112,111,114,116,69,114,114,111,114,32,105,115,10,32,32,32, - 32,32,32,32,32,114,97,105,115,101,100,46,10,10,32,32, - 32,32,32,32,32,32,99,1,0,0,0,0,0,0,0,0, - 0,0,0,1,0,0,0,4,0,0,0,19,0,0,0,115, - 36,0,0,0,116,0,124,0,131,1,115,20,116,1,100,1, - 124,0,100,2,141,2,130,1,136,0,124,0,103,1,136,1, - 162,1,82,0,142,0,83,0,41,4,122,45,80,97,116,104, - 32,104,111,111,107,32,102,111,114,32,105,109,112,111,114,116, - 108,105,98,46,109,97,99,104,105,110,101,114,121,46,70,105, - 108,101,70,105,110,100,101,114,46,122,30,111,110,108,121,32, - 100,105,114,101,99,116,111,114,105,101,115,32,97,114,101,32, - 115,117,112,112,111,114,116,101,100,114,62,0,0,0,78,41, - 2,114,71,0,0,0,114,129,0,0,0,114,62,0,0,0, - 169,2,114,209,0,0,0,114,85,1,0,0,114,7,0,0, - 0,114,8,0,0,0,218,24,112,97,116,104,95,104,111,111, - 107,95,102,111,114,95,70,105,108,101,70,105,110,100,101,114, - 11,6,0,0,115,8,0,0,0,8,2,12,1,16,1,255, - 128,122,54,70,105,108,101,70,105,110,100,101,114,46,112,97, - 116,104,95,104,111,111,107,46,60,108,111,99,97,108,115,62, - 46,112,97,116,104,95,104,111,111,107,95,102,111,114,95,70, - 105,108,101,70,105,110,100,101,114,78,114,7,0,0,0,41, - 3,114,209,0,0,0,114,85,1,0,0,114,91,1,0,0, - 114,7,0,0,0,114,90,1,0,0,114,8,0,0,0,218, - 9,112,97,116,104,95,104,111,111,107,1,6,0,0,115,6, - 0,0,0,14,10,4,6,255,128,122,20,70,105,108,101,70, - 105,110,100,101,114,46,112,97,116,104,95,104,111,111,107,99, + 97,99,104,101,99,1,0,0,0,0,0,0,0,0,0,0, + 0,3,0,0,0,3,0,0,0,7,0,0,0,115,18,0, + 0,0,135,0,135,1,102,2,100,1,100,2,132,8,125,2, + 124,2,83,0,41,4,97,20,1,0,0,65,32,99,108,97, + 115,115,32,109,101,116,104,111,100,32,119,104,105,99,104,32, + 114,101,116,117,114,110,115,32,97,32,99,108,111,115,117,114, + 101,32,116,111,32,117,115,101,32,111,110,32,115,121,115,46, + 112,97,116,104,95,104,111,111,107,10,32,32,32,32,32,32, + 32,32,119,104,105,99,104,32,119,105,108,108,32,114,101,116, + 117,114,110,32,97,110,32,105,110,115,116,97,110,99,101,32, + 117,115,105,110,103,32,116,104,101,32,115,112,101,99,105,102, + 105,101,100,32,108,111,97,100,101,114,115,32,97,110,100,32, + 116,104,101,32,112,97,116,104,10,32,32,32,32,32,32,32, + 32,99,97,108,108,101,100,32,111,110,32,116,104,101,32,99, + 108,111,115,117,114,101,46,10,10,32,32,32,32,32,32,32, + 32,73,102,32,116,104,101,32,112,97,116,104,32,99,97,108, + 108,101,100,32,111,110,32,116,104,101,32,99,108,111,115,117, + 114,101,32,105,115,32,110,111,116,32,97,32,100,105,114,101, + 99,116,111,114,121,44,32,73,109,112,111,114,116,69,114,114, + 111,114,32,105,115,10,32,32,32,32,32,32,32,32,114,97, + 105,115,101,100,46,10,10,32,32,32,32,32,32,32,32,99, 1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0, - 3,0,0,0,67,0,0,0,114,52,1,0,0,41,2,78, - 122,16,70,105,108,101,70,105,110,100,101,114,40,123,33,114, - 125,41,41,2,114,77,0,0,0,114,58,0,0,0,114,8, - 1,0,0,114,7,0,0,0,114,7,0,0,0,114,8,0, - 0,0,114,53,1,0,0,19,6,0,0,114,46,1,0,0, - 122,19,70,105,108,101,70,105,110,100,101,114,46,95,95,114, - 101,112,114,95,95,41,1,78,41,15,114,137,0,0,0,114, - 136,0,0,0,114,138,0,0,0,114,139,0,0,0,114,223, - 0,0,0,114,62,1,0,0,114,154,0,0,0,114,217,0, - 0,0,114,148,0,0,0,114,75,1,0,0,114,214,0,0, - 0,114,86,1,0,0,114,221,0,0,0,114,92,1,0,0, - 114,53,1,0,0,114,7,0,0,0,114,7,0,0,0,114, - 7,0,0,0,114,8,0,0,0,114,78,1,0,0,132,5, - 0,0,115,26,0,0,0,8,0,4,2,8,7,8,14,4, - 4,8,2,8,12,10,5,8,48,2,31,10,1,12,17,255, - 128,114,78,1,0,0,99,4,0,0,0,0,0,0,0,0, - 0,0,0,6,0,0,0,8,0,0,0,67,0,0,0,115, - 144,0,0,0,124,0,160,0,100,1,161,1,125,4,124,0, - 160,0,100,2,161,1,125,5,124,4,115,66,124,5,114,36, - 124,5,106,1,125,4,110,30,124,2,124,3,107,2,114,56, - 116,2,124,1,124,2,131,2,125,4,110,10,116,3,124,1, - 124,2,131,2,125,4,124,5,115,84,116,4,124,1,124,2, - 124,4,100,3,141,3,125,5,122,38,124,5,124,0,100,2, - 60,0,124,4,124,0,100,1,60,0,124,2,124,0,100,4, - 60,0,124,3,124,0,100,5,60,0,87,0,100,0,83,0, - 4,0,116,5,121,142,1,0,1,0,1,0,89,0,100,0, - 83,0,119,0,41,6,78,218,10,95,95,108,111,97,100,101, - 114,95,95,218,8,95,95,115,112,101,99,95,95,114,79,1, - 0,0,90,8,95,95,102,105,108,101,95,95,90,10,95,95, - 99,97,99,104,101,100,95,95,41,6,218,3,103,101,116,114, - 151,0,0,0,114,26,1,0,0,114,20,1,0,0,114,201, - 0,0,0,218,9,69,120,99,101,112,116,105,111,110,41,6, - 90,2,110,115,114,128,0,0,0,90,8,112,97,116,104,110, - 97,109,101,90,9,99,112,97,116,104,110,97,109,101,114,151, - 0,0,0,114,198,0,0,0,114,7,0,0,0,114,7,0, - 0,0,114,8,0,0,0,218,14,95,102,105,120,95,117,112, - 95,109,111,100,117,108,101,25,6,0,0,115,38,0,0,0, - 10,2,10,1,4,1,4,1,8,1,8,1,12,1,10,2, - 4,1,14,1,2,1,8,1,8,1,8,1,14,1,12,1, - 6,2,2,254,255,128,114,97,1,0,0,99,0,0,0,0, - 0,0,0,0,0,0,0,0,3,0,0,0,3,0,0,0, - 67,0,0,0,115,38,0,0,0,116,0,116,1,160,2,161, - 0,102,2,125,0,116,3,116,4,102,2,125,1,116,5,116, - 6,102,2,125,2,124,0,124,1,124,2,103,3,83,0,41, - 2,122,95,82,101,116,117,114,110,115,32,97,32,108,105,115, - 116,32,111,102,32,102,105,108,101,45,98,97,115,101,100,32, - 109,111,100,117,108,101,32,108,111,97,100,101,114,115,46,10, - 10,32,32,32,32,69,97,99,104,32,105,116,101,109,32,105, - 115,32,97,32,116,117,112,108,101,32,40,108,111,97,100,101, - 114,44,32,115,117,102,102,105,120,101,115,41,46,10,32,32, - 32,32,78,41,7,114,17,1,0,0,114,174,0,0,0,218, - 18,101,120,116,101,110,115,105,111,110,95,115,117,102,102,105, - 120,101,115,114,20,1,0,0,114,113,0,0,0,114,26,1, - 0,0,114,101,0,0,0,41,3,90,10,101,120,116,101,110, - 115,105,111,110,115,90,6,115,111,117,114,99,101,90,8,98, - 121,116,101,99,111,100,101,114,7,0,0,0,114,7,0,0, - 0,114,8,0,0,0,114,195,0,0,0,48,6,0,0,115, - 10,0,0,0,12,5,8,1,8,1,10,1,255,128,114,195, - 0,0,0,99,1,0,0,0,0,0,0,0,0,0,0,0, - 1,0,0,0,1,0,0,0,67,0,0,0,115,8,0,0, - 0,124,0,97,0,100,0,83,0,114,121,0,0,0,41,1, - 114,146,0,0,0,41,1,218,17,95,98,111,111,116,115,116, - 114,97,112,95,109,111,100,117,108,101,114,7,0,0,0,114, - 7,0,0,0,114,8,0,0,0,218,21,95,115,101,116,95, - 98,111,111,116,115,116,114,97,112,95,109,111,100,117,108,101, - 59,6,0,0,115,4,0,0,0,8,2,255,128,114,100,1, - 0,0,99,1,0,0,0,0,0,0,0,0,0,0,0,2, - 0,0,0,4,0,0,0,67,0,0,0,115,50,0,0,0, - 116,0,124,0,131,1,1,0,116,1,131,0,125,1,116,2, - 106,3,160,4,116,5,106,6,124,1,142,0,103,1,161,1, - 1,0,116,2,106,7,160,8,116,9,161,1,1,0,100,1, - 83,0,41,2,122,41,73,110,115,116,97,108,108,32,116,104, - 101,32,112,97,116,104,45,98,97,115,101,100,32,105,109,112, - 111,114,116,32,99,111,109,112,111,110,101,110,116,115,46,78, - 41,10,114,100,1,0,0,114,195,0,0,0,114,16,0,0, - 0,114,67,1,0,0,114,178,0,0,0,114,78,1,0,0, - 114,92,1,0,0,218,9,109,101,116,97,95,112,97,116,104, - 114,197,0,0,0,114,61,1,0,0,41,2,114,99,1,0, - 0,90,17,115,117,112,112,111,114,116,101,100,95,108,111,97, - 100,101,114,115,114,7,0,0,0,114,7,0,0,0,114,8, - 0,0,0,218,8,95,105,110,115,116,97,108,108,64,6,0, - 0,115,10,0,0,0,8,2,6,1,20,1,16,1,255,128, - 114,102,1,0,0,41,1,114,75,0,0,0,41,1,78,41, - 3,78,78,78,41,2,114,0,0,0,0,114,0,0,0,0, - 41,1,84,41,1,78,41,1,78,41,83,114,139,0,0,0, - 114,146,0,0,0,114,174,0,0,0,114,79,0,0,0,114, - 16,0,0,0,114,88,0,0,0,114,171,0,0,0,114,26, - 0,0,0,114,218,0,0,0,90,2,110,116,114,19,0,0, - 0,114,203,0,0,0,90,5,112,111,115,105,120,114,48,0, - 0,0,218,3,97,108,108,114,51,0,0,0,114,52,0,0, - 0,114,73,0,0,0,114,29,0,0,0,90,37,95,67,65, - 83,69,95,73,78,83,69,78,83,73,84,73,86,69,95,80, - 76,65,84,70,79,82,77,83,95,66,89,84,69,83,95,75, - 69,89,114,28,0,0,0,114,30,0,0,0,114,22,0,0, - 0,114,37,0,0,0,114,43,0,0,0,114,46,0,0,0, - 114,54,0,0,0,114,61,0,0,0,114,63,0,0,0,114, - 67,0,0,0,114,68,0,0,0,114,71,0,0,0,114,74, - 0,0,0,114,84,0,0,0,218,4,116,121,112,101,218,8, - 95,95,99,111,100,101,95,95,114,173,0,0,0,114,35,0, - 0,0,114,159,0,0,0,114,34,0,0,0,114,40,0,0, - 0,114,251,0,0,0,114,104,0,0,0,114,100,0,0,0, - 114,113,0,0,0,114,197,0,0,0,114,98,1,0,0,114, - 219,0,0,0,114,101,0,0,0,90,23,68,69,66,85,71, - 95,66,89,84,69,67,79,68,69,95,83,85,70,70,73,88, - 69,83,90,27,79,80,84,73,77,73,90,69,68,95,66,89, - 84,69,67,79,68,69,95,83,85,70,70,73,88,69,83,114, - 109,0,0,0,114,114,0,0,0,114,120,0,0,0,114,124, - 0,0,0,114,126,0,0,0,114,147,0,0,0,114,154,0, - 0,0,114,163,0,0,0,114,167,0,0,0,114,169,0,0, - 0,114,176,0,0,0,114,181,0,0,0,114,182,0,0,0, - 114,187,0,0,0,218,6,111,98,106,101,99,116,114,196,0, - 0,0,114,201,0,0,0,114,202,0,0,0,114,222,0,0, - 0,114,236,0,0,0,114,254,0,0,0,114,20,1,0,0, - 114,26,1,0,0,114,17,1,0,0,114,32,1,0,0,114, - 58,1,0,0,114,61,1,0,0,114,78,1,0,0,114,97, - 1,0,0,114,195,0,0,0,114,100,1,0,0,114,102,1, - 0,0,114,7,0,0,0,114,7,0,0,0,114,7,0,0, - 0,114,8,0,0,0,218,8,60,109,111,100,117,108,101,62, - 1,0,0,0,115,172,0,0,0,4,0,4,22,8,3,8, - 1,8,1,8,1,8,1,10,3,4,1,8,1,10,1,8, - 2,4,3,10,1,6,2,22,2,8,1,10,1,14,1,4, - 4,4,1,2,1,2,1,4,255,8,4,6,16,8,3,8, - 5,8,5,8,6,8,6,8,12,8,10,8,9,8,5,8, - 7,10,9,10,22,0,127,16,25,12,1,4,2,4,1,6, - 2,6,1,10,1,8,2,6,2,8,2,16,2,8,71,8, - 40,8,19,8,12,8,12,8,31,8,17,8,33,8,28,10, - 24,10,13,10,10,8,11,6,14,4,3,2,1,12,255,14, - 68,14,64,16,30,0,127,14,17,18,50,18,45,18,25,14, - 53,14,63,14,43,0,127,14,20,0,127,10,22,8,23,8, - 11,12,5,255,128, + 4,0,0,0,19,0,0,0,115,36,0,0,0,116,0,124, + 0,131,1,115,20,116,1,100,1,124,0,100,2,141,2,130, + 1,136,0,124,0,103,1,136,1,162,1,82,0,142,0,83, + 0,41,4,122,45,80,97,116,104,32,104,111,111,107,32,102, + 111,114,32,105,109,112,111,114,116,108,105,98,46,109,97,99, + 104,105,110,101,114,121,46,70,105,108,101,70,105,110,100,101, + 114,46,122,30,111,110,108,121,32,100,105,114,101,99,116,111, + 114,105,101,115,32,97,114,101,32,115,117,112,112,111,114,116, + 101,100,114,62,0,0,0,78,41,2,114,71,0,0,0,114, + 129,0,0,0,114,62,0,0,0,169,2,114,209,0,0,0, + 114,87,1,0,0,114,7,0,0,0,114,8,0,0,0,218, + 24,112,97,116,104,95,104,111,111,107,95,102,111,114,95,70, + 105,108,101,70,105,110,100,101,114,15,6,0,0,115,8,0, + 0,0,8,2,12,1,16,1,255,128,122,54,70,105,108,101, + 70,105,110,100,101,114,46,112,97,116,104,95,104,111,111,107, + 46,60,108,111,99,97,108,115,62,46,112,97,116,104,95,104, + 111,111,107,95,102,111,114,95,70,105,108,101,70,105,110,100, + 101,114,78,114,7,0,0,0,41,3,114,209,0,0,0,114, + 87,1,0,0,114,93,1,0,0,114,7,0,0,0,114,92, + 1,0,0,114,8,0,0,0,218,9,112,97,116,104,95,104, + 111,111,107,5,6,0,0,115,6,0,0,0,14,10,4,6, + 255,128,122,20,70,105,108,101,70,105,110,100,101,114,46,112, + 97,116,104,95,104,111,111,107,99,1,0,0,0,0,0,0, + 0,0,0,0,0,1,0,0,0,3,0,0,0,67,0,0, + 0,114,53,1,0,0,41,2,78,122,16,70,105,108,101,70, + 105,110,100,101,114,40,123,33,114,125,41,41,2,114,77,0, + 0,0,114,58,0,0,0,114,8,1,0,0,114,7,0,0, + 0,114,7,0,0,0,114,8,0,0,0,114,54,1,0,0, + 23,6,0,0,114,47,1,0,0,122,19,70,105,108,101,70, + 105,110,100,101,114,46,95,95,114,101,112,114,95,95,41,1, + 78,41,15,114,137,0,0,0,114,136,0,0,0,114,138,0, + 0,0,114,139,0,0,0,114,223,0,0,0,114,64,1,0, + 0,114,154,0,0,0,114,217,0,0,0,114,148,0,0,0, + 114,77,1,0,0,114,214,0,0,0,114,88,1,0,0,114, + 221,0,0,0,114,94,1,0,0,114,54,1,0,0,114,7, + 0,0,0,114,7,0,0,0,114,7,0,0,0,114,8,0, + 0,0,114,80,1,0,0,136,5,0,0,115,26,0,0,0, + 8,0,4,2,8,7,8,14,4,4,8,2,8,12,10,5, + 8,48,2,31,10,1,12,17,255,128,114,80,1,0,0,99, + 4,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0, + 8,0,0,0,67,0,0,0,115,144,0,0,0,124,0,160, + 0,100,1,161,1,125,4,124,0,160,0,100,2,161,1,125, + 5,124,4,115,66,124,5,114,36,124,5,106,1,125,4,110, + 30,124,2,124,3,107,2,114,56,116,2,124,1,124,2,131, + 2,125,4,110,10,116,3,124,1,124,2,131,2,125,4,124, + 5,115,84,116,4,124,1,124,2,124,4,100,3,141,3,125, + 5,122,38,124,5,124,0,100,2,60,0,124,4,124,0,100, + 1,60,0,124,2,124,0,100,4,60,0,124,3,124,0,100, + 5,60,0,87,0,100,0,83,0,4,0,116,5,121,142,1, + 0,1,0,1,0,89,0,100,0,83,0,119,0,41,6,78, + 218,10,95,95,108,111,97,100,101,114,95,95,218,8,95,95, + 115,112,101,99,95,95,114,81,1,0,0,90,8,95,95,102, + 105,108,101,95,95,90,10,95,95,99,97,99,104,101,100,95, + 95,41,6,218,3,103,101,116,114,151,0,0,0,114,27,1, + 0,0,114,21,1,0,0,114,201,0,0,0,218,9,69,120, + 99,101,112,116,105,111,110,41,6,90,2,110,115,114,128,0, + 0,0,90,8,112,97,116,104,110,97,109,101,90,9,99,112, + 97,116,104,110,97,109,101,114,151,0,0,0,114,198,0,0, + 0,114,7,0,0,0,114,7,0,0,0,114,8,0,0,0, + 218,14,95,102,105,120,95,117,112,95,109,111,100,117,108,101, + 29,6,0,0,115,38,0,0,0,10,2,10,1,4,1,4, + 1,8,1,8,1,12,1,10,2,4,1,14,1,2,1,8, + 1,8,1,8,1,14,1,12,1,6,2,2,254,255,128,114, + 99,1,0,0,99,0,0,0,0,0,0,0,0,0,0,0, + 0,3,0,0,0,3,0,0,0,67,0,0,0,115,38,0, + 0,0,116,0,116,1,160,2,161,0,102,2,125,0,116,3, + 116,4,102,2,125,1,116,5,116,6,102,2,125,2,124,0, + 124,1,124,2,103,3,83,0,41,2,122,95,82,101,116,117, + 114,110,115,32,97,32,108,105,115,116,32,111,102,32,102,105, + 108,101,45,98,97,115,101,100,32,109,111,100,117,108,101,32, + 108,111,97,100,101,114,115,46,10,10,32,32,32,32,69,97, + 99,104,32,105,116,101,109,32,105,115,32,97,32,116,117,112, + 108,101,32,40,108,111,97,100,101,114,44,32,115,117,102,102, + 105,120,101,115,41,46,10,32,32,32,32,78,41,7,114,17, + 1,0,0,114,174,0,0,0,218,18,101,120,116,101,110,115, + 105,111,110,95,115,117,102,102,105,120,101,115,114,21,1,0, + 0,114,113,0,0,0,114,27,1,0,0,114,101,0,0,0, + 41,3,90,10,101,120,116,101,110,115,105,111,110,115,90,6, + 115,111,117,114,99,101,90,8,98,121,116,101,99,111,100,101, + 114,7,0,0,0,114,7,0,0,0,114,8,0,0,0,114, + 195,0,0,0,52,6,0,0,115,10,0,0,0,12,5,8, + 1,8,1,10,1,255,128,114,195,0,0,0,99,1,0,0, + 0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0, + 0,67,0,0,0,115,8,0,0,0,124,0,97,0,100,0, + 83,0,114,121,0,0,0,41,1,114,146,0,0,0,41,1, + 218,17,95,98,111,111,116,115,116,114,97,112,95,109,111,100, + 117,108,101,114,7,0,0,0,114,7,0,0,0,114,8,0, + 0,0,218,21,95,115,101,116,95,98,111,111,116,115,116,114, + 97,112,95,109,111,100,117,108,101,63,6,0,0,115,4,0, + 0,0,8,2,255,128,114,102,1,0,0,99,1,0,0,0, + 0,0,0,0,0,0,0,0,2,0,0,0,4,0,0,0, + 67,0,0,0,115,50,0,0,0,116,0,124,0,131,1,1, + 0,116,1,131,0,125,1,116,2,106,3,160,4,116,5,106, + 6,124,1,142,0,103,1,161,1,1,0,116,2,106,7,160, + 8,116,9,161,1,1,0,100,1,83,0,41,2,122,41,73, + 110,115,116,97,108,108,32,116,104,101,32,112,97,116,104,45, + 98,97,115,101,100,32,105,109,112,111,114,116,32,99,111,109, + 112,111,110,101,110,116,115,46,78,41,10,114,102,1,0,0, + 114,195,0,0,0,114,16,0,0,0,114,69,1,0,0,114, + 178,0,0,0,114,80,1,0,0,114,94,1,0,0,218,9, + 109,101,116,97,95,112,97,116,104,114,197,0,0,0,114,63, + 1,0,0,41,2,114,101,1,0,0,90,17,115,117,112,112, + 111,114,116,101,100,95,108,111,97,100,101,114,115,114,7,0, + 0,0,114,7,0,0,0,114,8,0,0,0,218,8,95,105, + 110,115,116,97,108,108,68,6,0,0,115,10,0,0,0,8, + 2,6,1,20,1,16,1,255,128,114,104,1,0,0,41,1, + 114,75,0,0,0,41,1,78,41,3,78,78,78,41,2,114, + 0,0,0,0,114,0,0,0,0,41,1,84,41,1,78,41, + 1,78,41,83,114,139,0,0,0,114,146,0,0,0,114,174, + 0,0,0,114,79,0,0,0,114,16,0,0,0,114,88,0, + 0,0,114,171,0,0,0,114,26,0,0,0,114,218,0,0, + 0,90,2,110,116,114,19,0,0,0,114,203,0,0,0,90, + 5,112,111,115,105,120,114,48,0,0,0,218,3,97,108,108, + 114,51,0,0,0,114,52,0,0,0,114,73,0,0,0,114, + 29,0,0,0,90,37,95,67,65,83,69,95,73,78,83,69, + 78,83,73,84,73,86,69,95,80,76,65,84,70,79,82,77, + 83,95,66,89,84,69,83,95,75,69,89,114,28,0,0,0, + 114,30,0,0,0,114,22,0,0,0,114,37,0,0,0,114, + 43,0,0,0,114,46,0,0,0,114,54,0,0,0,114,61, + 0,0,0,114,63,0,0,0,114,67,0,0,0,114,68,0, + 0,0,114,71,0,0,0,114,74,0,0,0,114,84,0,0, + 0,218,4,116,121,112,101,218,8,95,95,99,111,100,101,95, + 95,114,173,0,0,0,114,35,0,0,0,114,159,0,0,0, + 114,34,0,0,0,114,40,0,0,0,114,251,0,0,0,114, + 104,0,0,0,114,100,0,0,0,114,113,0,0,0,114,197, + 0,0,0,114,100,1,0,0,114,219,0,0,0,114,101,0, + 0,0,90,23,68,69,66,85,71,95,66,89,84,69,67,79, + 68,69,95,83,85,70,70,73,88,69,83,90,27,79,80,84, + 73,77,73,90,69,68,95,66,89,84,69,67,79,68,69,95, + 83,85,70,70,73,88,69,83,114,109,0,0,0,114,114,0, + 0,0,114,120,0,0,0,114,124,0,0,0,114,126,0,0, + 0,114,147,0,0,0,114,154,0,0,0,114,163,0,0,0, + 114,167,0,0,0,114,169,0,0,0,114,176,0,0,0,114, + 181,0,0,0,114,182,0,0,0,114,187,0,0,0,218,6, + 111,98,106,101,99,116,114,196,0,0,0,114,201,0,0,0, + 114,202,0,0,0,114,222,0,0,0,114,236,0,0,0,114, + 254,0,0,0,114,21,1,0,0,114,27,1,0,0,114,17, + 1,0,0,114,33,1,0,0,114,59,1,0,0,114,63,1, + 0,0,114,80,1,0,0,114,99,1,0,0,114,195,0,0, + 0,114,102,1,0,0,114,104,1,0,0,114,7,0,0,0, + 114,7,0,0,0,114,7,0,0,0,114,8,0,0,0,218, + 8,60,109,111,100,117,108,101,62,1,0,0,0,115,172,0, + 0,0,4,0,4,22,8,3,8,1,8,1,8,1,8,1, + 10,3,4,1,8,1,10,1,8,2,4,3,10,1,6,2, + 22,2,8,1,10,1,14,1,4,4,4,1,2,1,2,1, + 4,255,8,4,6,16,8,3,8,5,8,5,8,6,8,6, + 8,12,8,10,8,9,8,5,8,7,10,9,10,22,0,127, + 16,25,12,1,4,2,4,1,6,2,6,1,10,1,8,2, + 6,2,8,2,16,2,8,71,8,40,8,19,8,12,8,12, + 8,31,8,17,8,33,8,28,10,24,10,13,10,10,8,11, + 6,14,4,3,2,1,12,255,14,68,14,64,16,30,0,127, + 14,17,18,50,18,45,18,25,14,53,14,63,14,47,0,127, + 14,20,0,127,10,22,8,23,8,11,12,5,255,128, }; |