From 69852e3f0f1b68185be438d2ac48f2f4aaf4eaa0 Mon Sep 17 00:00:00 2001 From: Vinay Sajip Date: Thu, 21 Mar 2013 23:21:30 +0000 Subject: [PATCH 01/13] Initial commit in this branch. Test results are same as in develop branch: One failure (test_https_opener_director_handlers). --- .gitignore | 4 +- pip/util.py | 2 +- pip/vendor/distlib/database.py | 12 ++++-- pip/vendor/distlib/pkg_resources.py | 59 +++++++++++++++++++++++++++++ pip/vendor/distlib/wheel.py | 3 +- tests/test_finder.py | 2 +- tests/test_uninstall.py | 7 +--- tests/test_util.py | 13 ++----- 8 files changed, 79 insertions(+), 23 deletions(-) create mode 100644 pip/vendor/distlib/pkg_resources.py diff --git a/.gitignore b/.gitignore index e5df8c83215..22790ad72d2 100644 --- a/.gitignore +++ b/.gitignore @@ -17,9 +17,9 @@ dist/* docs/_build/* build/* *.pyc -*.pyo +*.pyo pip-log.txt pip.log *.~ .tox - +env/* diff --git a/pip/util.py b/pip/util.py index a5d24fda825..4df0d8b6f25 100644 --- a/pip/util.py +++ b/pip/util.py @@ -4,7 +4,7 @@ import stat import re import posixpath -import pkg_resources +from pip.vendor.distlib import pkg_resources import zipfile import tarfile import subprocess diff --git a/pip/vendor/distlib/database.py b/pip/vendor/distlib/database.py index df68c0ee7dd..0fd362d49c1 100644 --- a/pip/vendor/distlib/database.py +++ b/pip/vendor/distlib/database.py @@ -116,10 +116,10 @@ def _yield_distributions(self): for dir in os.listdir(realpath): dist_path = os.path.join(realpath, dir) if self._include_dist and dir.endswith(DISTINFO_EXT): - yield InstalledDistribution(dist_path, env=self) + yield new_dist_class(dist_path, env=self) elif self._include_egg and dir.endswith(('.egg-info', '.egg')): - yield EggInfoDistribution(dist_path, self) + yield old_dist_class(dist_path, self) def _generate_cache(self): """ @@ -888,8 +888,8 @@ def _get_metadata(self, path): return metadata def __repr__(self): - return '' % ( - self.name, self.version, self.path) + return '<%s %r %s at %r>' % ( + self.__class__.__name__, self.name, self.version, self.path) def __str__(self): return "%s %s" % (self.name, self.version) @@ -986,6 +986,10 @@ def __eq__(self, other): # See http://docs.python.org/reference/datamodel#object.__hash__ __hash__ = object.__hash__ +new_dist_class = InstalledDistribution +old_dist_class = EggInfoDistribution + + class DependencyGraph(object): """ Represents a dependency graph between distributions. diff --git a/pip/vendor/distlib/pkg_resources.py b/pip/vendor/distlib/pkg_resources.py new file mode 100644 index 00000000000..06e3c645d53 --- /dev/null +++ b/pip/vendor/distlib/pkg_resources.py @@ -0,0 +1,59 @@ +# This module is a shim to help migrate from the real pkg_resources +import os + +from pip.log import logger +from pip.vendor.distlib import database +from pip.vendor.distlib.database import DistributionPath, EggInfoDistribution +from pip.vendor.distlib.util import parse_requirement +from pip.vendor.distlib.version import legacy_key as parse_version +from pip.vendor.distlib.wheel import PYVER, ARCH + +class Requirement(object): + def __init__(self, *args, **kwargs): + self.__dict__.update(kwargs) + self.specs = self.constraints + + @staticmethod + def parse(s, replacement=True): + r = parse_requirement(s) + return Requirement(**r.__dict__) + + def __str__(self): + if not self.extras: + extras = '' + else: + extras = '[%s]' % ','.join(self.extras) + cons = ','.join([''.join(s) for s in self.constraints]) + return '%s%s%s' % (self.name, extras, cons) + +class Distribution(EggInfoDistribution): + def __init__(self, *args, **kwargs): + super(Distribution, self).__init__(*args, **kwargs) + self.project_name = self.name + self.location = os.path.dirname(self.path) + + def as_requirement(self): + return Requirement.parse('%s==%s' % (self.project_name, self.version)) + + def has_metadata(self, name): + return name == 'PKG-INFO' + + @property + def parsed_version(self): + try: + result = self._parsed_version + except AttributeError: + self._parsed_version = result = parse_version(self.version) + return result + + def egg_name(self): + s1 = self.name.replace('-', '_') + s2 = self.version.replace('-', '_') + return '%s-%s-%s-%s' % (s1, s2, PYVER, ARCH) + +database.old_dist_class = Distribution + +_installed_dists = DistributionPath(include_egg=True) +working_set = list(_installed_dists.get_distributions()) + +get_distribution = _installed_dists.get_distribution diff --git a/pip/vendor/distlib/wheel.py b/pip/vendor/distlib/wheel.py index 04a22788c82..7d8edbbf492 100644 --- a/pip/vendor/distlib/wheel.py +++ b/pip/vendor/distlib/wheel.py @@ -21,7 +21,6 @@ import tempfile import zipfile -import distlib from . import DistlibException from .compat import sysconfig, ZipFile, fsdecode, text_type from .database import DistributionPath, InstalledDistribution @@ -303,6 +302,8 @@ def build(self, paths, tags=None): ap = to_posix(os.path.join(info_dir, fn)) archive_paths.append((ap, p)) + import distlib + wheel_metadata = [ 'Wheel-Version: %d.%d' % self.wheel_version, 'Generator: distlib %s' % distlib.__version__, diff --git a/tests/test_finder.py b/tests/test_finder.py index 357c4764f8e..1017a1bfbe6 100644 --- a/tests/test_finder.py +++ b/tests/test_finder.py @@ -1,5 +1,5 @@ import os -from pkg_resources import parse_version +from pip.vendor.distlib.pkg_resources import parse_version from pip.backwardcompat import urllib from pip.req import InstallRequirement from pip.index import PackageFinder diff --git a/tests/test_uninstall.py b/tests/test_uninstall.py index 062ab620f38..35f43048821 100644 --- a/tests/test_uninstall.py +++ b/tests/test_uninstall.py @@ -209,7 +209,7 @@ def test_uninstallpathset_no_paths(mock_logger): """ from pip.req import UninstallPathSet - from pkg_resources import get_distribution + from pip.vendor.distlib.pkg_resources import get_distribution test_dist = get_distribution('pip') # ensure that the distribution is "local" with patch("pip.req.dist_is_local") as mock_dist_is_local: @@ -227,7 +227,7 @@ def test_uninstallpathset_non_local(mock_logger): """ nonlocal_path = os.path.abspath("/nonlocal") from pip.req import UninstallPathSet - from pkg_resources import get_distribution + from pip.vendor.distlib.pkg_resources import get_distribution test_dist = get_distribution('pip') test_dist.location = nonlocal_path # ensure that the distribution is "non-local" @@ -238,6 +238,3 @@ def test_uninstallpathset_non_local(mock_logger): uninstall_set = UninstallPathSet(test_dist) uninstall_set.remove() #with no files added to set; which is the case when trying to remove non-local dists mock_logger.notify.assert_any_call("Not uninstalling pip at %s, outside environment %s" % (nonlocal_path, sys.prefix)), mock_logger.notify.mock_calls - - - diff --git a/tests/test_util.py b/tests/test_util.py index 0e2fe08b731..939915fac3c 100644 --- a/tests/test_util.py +++ b/tests/test_util.py @@ -3,7 +3,7 @@ """ import os -import pkg_resources +from pip.vendor.distlib import pkg_resources from mock import Mock, patch from nose.tools import eq_ from tests.path import Path @@ -166,7 +166,7 @@ def dist_is_local(self, dist): @patch('pip.util.dist_is_local') @patch('pip.util.dist_is_editable') - @patch('pkg_resources.working_set', workingset) + @patch('pip.vendor.distlib.pkg_resources.working_set', workingset) def test_editables_only(self, mock_dist_is_editable, mock_dist_is_local): mock_dist_is_editable.side_effect = self.dist_is_editable mock_dist_is_local.side_effect = self.dist_is_local @@ -177,7 +177,7 @@ def test_editables_only(self, mock_dist_is_editable, mock_dist_is_local): @patch('pip.util.dist_is_local') @patch('pip.util.dist_is_editable') - @patch('pkg_resources.working_set', workingset) + @patch('pip.vendor.distlib.pkg_resources.working_set', workingset) def test_exclude_editables(self, mock_dist_is_editable, mock_dist_is_local): mock_dist_is_editable.side_effect = self.dist_is_editable mock_dist_is_local.side_effect = self.dist_is_local @@ -188,14 +188,9 @@ def test_exclude_editables(self, mock_dist_is_editable, mock_dist_is_local): @patch('pip.util.dist_is_local') @patch('pip.util.dist_is_editable') - @patch('pkg_resources.working_set', workingset) + @patch('pip.vendor.distlib.pkg_resources.working_set', workingset) def test_include_globals(self, mock_dist_is_editable, mock_dist_is_local): mock_dist_is_editable.side_effect = self.dist_is_editable mock_dist_is_local.side_effect = self.dist_is_local dists = get_installed_distributions(local_only=False) assert len(dists) == 3 - - - - - From d523ba607f4fd6cd75ce3a1222d98931ad48c4eb Mon Sep 17 00:00:00 2001 From: Vinay Sajip Date: Sun, 24 Mar 2013 00:49:34 +0000 Subject: [PATCH 02/13] Further replacement of pkg_resources references with distlib version. --- pip/baseparser.py | 2 +- pip/commands/freeze.py | 2 +- pip/commands/search.py | 2 +- pip/commands/show.py | 2 +- pip/index.py | 3 +- pip/vendor/distlib/pkg_resources.py | 118 +++++++++++++++++++++++++--- tests/test_show.py | 4 +- 7 files changed, 115 insertions(+), 18 deletions(-) diff --git a/pip/baseparser.py b/pip/baseparser.py index 7e3a8ac6fa1..1c97c7e530c 100644 --- a/pip/baseparser.py +++ b/pip/baseparser.py @@ -2,7 +2,7 @@ import sys import optparse -import pkg_resources +from pip.vendor.distlib import pkg_resources import os import textwrap from distutils.util import strtobool diff --git a/pip/commands/freeze.py b/pip/commands/freeze.py index 9c2ab7239ff..3b6ce2ff671 100644 --- a/pip/commands/freeze.py +++ b/pip/commands/freeze.py @@ -1,6 +1,6 @@ import re import sys -import pkg_resources +from pip.vendor.distlib import pkg_resources import pip from pip.req import InstallRequirement from pip.log import logger diff --git a/pip/commands/search.py b/pip/commands/search.py index b83ba37f685..fac79430c8f 100644 --- a/pip/commands/search.py +++ b/pip/commands/search.py @@ -1,6 +1,6 @@ import sys import textwrap -import pkg_resources +from pip.vendor.distlib import pkg_resources import pip.download from pip.basecommand import Command, SUCCESS from pip.util import get_terminal_size diff --git a/pip/commands/show.py b/pip/commands/show.py index f47f4b01e64..639aeff2e2f 100644 --- a/pip/commands/show.py +++ b/pip/commands/show.py @@ -1,5 +1,5 @@ import os -import pkg_resources +from pip.vendor.distlib import pkg_resources from pip.basecommand import Command from pip.log import logger diff --git a/pip/index.py b/pip/index.py index c27a5d3a984..6f4fbbe92f7 100644 --- a/pip/index.py +++ b/pip/index.py @@ -6,7 +6,7 @@ import gzip import mimetypes import posixpath -import pkg_resources +from pip.vendor.distlib import pkg_resources import random import socket import string @@ -805,4 +805,3 @@ def string_range(last): yield result if result == last: return - diff --git a/pip/vendor/distlib/pkg_resources.py b/pip/vendor/distlib/pkg_resources.py index 06e3c645d53..007d14a5fe0 100644 --- a/pip/vendor/distlib/pkg_resources.py +++ b/pip/vendor/distlib/pkg_resources.py @@ -1,17 +1,44 @@ # This module is a shim to help migrate from the real pkg_resources import os +import re +import sys from pip.log import logger from pip.vendor.distlib import database -from pip.vendor.distlib.database import DistributionPath, EggInfoDistribution +from pip.vendor.distlib.compat import string_types +from pip.vendor.distlib.database import (DistributionPath, + InstalledDistribution as DistInfoDistribution, + EggInfoDistribution) +from pip.vendor.distlib.locators import locate from pip.vendor.distlib.util import parse_requirement from pip.vendor.distlib.version import legacy_key as parse_version -from pip.vendor.distlib.wheel import PYVER, ARCH + +PY_MAJOR = sys.version[:3] + +NON_ALPHAS = re.compile('[^A-Za-z0-9.]+') class Requirement(object): + + state_machine = { + # =>< + '<' : '--T', + '<=': 'T-T', + '>' : 'F+F', + '>=': 'T+F', + '==': 'T..', + '!=': 'F++', + } + def __init__(self, *args, **kwargs): self.__dict__.update(kwargs) - self.specs = self.constraints + self.unsafe_name = self.name + self.project_name = NON_ALPHAS.sub('-', self.name) + self.specs = self.constraints or [] + if self.extras is None: + self.extras = [] + self.extras = tuple(self.extras) + self.index = sorted([(parse_version(v), self.state_machine[op], + op, v) for op, v in self.specs]) @staticmethod def parse(s, replacement=True): @@ -23,18 +50,37 @@ def __str__(self): extras = '' else: extras = '[%s]' % ','.join(self.extras) - cons = ','.join([''.join(s) for s in self.constraints]) + cons = ','.join([''.join(s) for s in self.specs]) return '%s%s%s' % (self.name, extras, cons) -class Distribution(EggInfoDistribution): + # copied from pkg_resources + def __contains__(self,item): + if isinstance(item,Distribution): + if item.key != self.key: return False + if self.index: item = item.parsed_version # only get if we need it + elif isinstance(item, string_types): + item = parse_version(item) + last = None + compare = lambda a, b: (a > b) - (a < b) # -1, 0, 1 + for parsed,trans, op, ver in self.index: + action = trans[compare(item,parsed)] # Indexing: 0, 1, -1 + if action=='F': return False + elif action=='T': return True + elif action=='+': last = True + elif action=='-' or last is None: last = False + if last is None: last = True # no rules encountered + return last + +class Common(object): + def as_requirement(self): + return Requirement.parse('%s==%s' % (self.project_name, self.version)) + +class Distribution(EggInfoDistribution, Common): def __init__(self, *args, **kwargs): super(Distribution, self).__init__(*args, **kwargs) self.project_name = self.name self.location = os.path.dirname(self.path) - def as_requirement(self): - return Requirement.parse('%s==%s' % (self.project_name, self.version)) - def has_metadata(self, name): return name == 'PKG-INFO' @@ -49,11 +95,63 @@ def parsed_version(self): def egg_name(self): s1 = self.name.replace('-', '_') s2 = self.version.replace('-', '_') - return '%s-%s-%s-%s' % (s1, s2, PYVER, ARCH) + return '%s-%s-py%s' % (s1, s2, PY_MAJOR) + + def requires(self, extras=()): + reqs = EggInfoDistribution.requires.__get__(self, None) + if 'requires' in self.__dict__: + del self.__dict__['requires'] + result = [] + for r in reqs: + r = parse_requirement(r) + dist = locate(r.requirement) + assert dist + result.append(dist) + debug('requires: %s -> %s' % (self, result)) + return result + +class NewDistribution(DistInfoDistribution, Common): + def __init__(self, *args, **kwargs): + super(NewDistribution, self).__init__(*args, **kwargs) + self.project_name = self.name + self.location = os.path.dirname(self.path) + + def requires(self, extras=()): + result = DistInfoDistribution.requires.__get__(self, None) + if 'requires' in self.__dict__: + del self.__dict__['requires'] + result = [] + for r in reqs: + r = parse_requirement(r) + dist = locate(r.requirement) + assert dist + result.append(dist) + debug('requires: %s -> %s' % (self, result)) + return result database.old_dist_class = Distribution +database.new_dist_class = NewDistribution _installed_dists = DistributionPath(include_egg=True) working_set = list(_installed_dists.get_distributions()) -get_distribution = _installed_dists.get_distribution +def get_distribution(name): + if isinstance(name, Requirement): + name = name.name + return _installed_dists.get_distribution(name) + +class DistributionNotFound(Exception): + """A requested distribution was not found""" + +class VersionConflict(Exception): + """An already-installed version conflicts with the requested version""" + +def find_distributions(path_item, only=False): + dp = DistributionPath([path_item], include_egg=True) + return list(dp.get_distributions()) + +# This is only here because pip's test infrastructure is unhelpful when it +# comes to logging :-( +def debug(s): + with open('/tmp/pkg_resources-debug.txt', 'a') as f: + f.write(s + '\n') diff --git a/tests/test_show.py b/tests/test_show.py index f0fe3885671..3d592fd4bc2 100644 --- a/tests/test_show.py +++ b/tests/test_show.py @@ -15,7 +15,7 @@ def test_show(): assert len(lines) == 6 assert lines[0] == '---', lines[0] assert lines[1] == 'Name: pip', lines[1] - assert lines[2] == 'Version: %s' % __version__, lines[2] + assert lines[2] == 'Version: %s' % __version__, '%r should be %r' % (lines[2], 'Version: %s' % __version__) assert lines[3].startswith('Location: '), lines[3] assert lines[4] == 'Requires: ' @@ -32,7 +32,7 @@ def test_show_with_files_not_found(): assert len(lines) == 8 assert lines[0] == '---', lines[0] assert lines[1] == 'Name: pip', lines[1] - assert lines[2] == 'Version: %s' % __version__, lines[2] + assert lines[2] == 'Version: %s' % __version__, '%r should be %r' % (lines[2], 'Version: %s' % __version__) assert lines[3].startswith('Location: '), lines[3] assert lines[4] == 'Requires: ' assert lines[5] == 'Files:', lines[4] From 0e37da26a173652b8709cfa0e4cef240a3a1b20f Mon Sep 17 00:00:00 2001 From: Vinay Sajip Date: Fri, 19 Apr 2013 23:08:54 +0100 Subject: [PATCH 03/13] Updated distlib metadata to support 1.3 metadata. --- pip/vendor/distlib/metadata.py | 124 +++++++++++++++++++++++++++------ 1 file changed, 102 insertions(+), 22 deletions(-) diff --git a/pip/vendor/distlib/metadata.py b/pip/vendor/distlib/metadata.py index e18ae21fc7d..c5169949553 100644 --- a/pip/vendor/distlib/metadata.py +++ b/pip/vendor/distlib/metadata.py @@ -5,15 +5,15 @@ # """Implementation of the Metadata for Python packages PEPs. -Supports all metadata formats (1.0, 1.1, 1.2). +Supports all metadata formats (1.0, 1.1, 1.2, and 1.3 experimental). """ from __future__ import unicode_literals -import re import codecs +from email import message_from_file import logging +import re -from email import message_from_file from . import DistlibException from .compat import StringIO, string_types @@ -22,6 +22,7 @@ logger = logging.getLogger(__name__) + class MetadataMissingError(DistlibException): """A required metadata is missing""" @@ -97,10 +98,26 @@ def system_message(self, level, message, *children, **kwargs): 'Obsoletes-Dist', 'Requires-External', 'Maintainer', 'Maintainer-email', 'Project-URL') +_426_FIELDS = ('Metadata-Version', 'Name', 'Version', 'Platform', + 'Supported-Platform', 'Summary', 'Description', + 'Keywords', 'Home-page', 'Author', 'Author-email', + 'Maintainer', 'Maintainer-email', 'License', + 'Classifier', 'Download-URL', 'Obsoletes-Dist', + 'Project-URL', 'Provides-Dist', 'Requires-Dist', + 'Requires-Python', 'Requires-External', 'Private-Version', + 'Obsoleted-By', 'Setup-Requires-Dist', 'Extension', + 'Provides-Extra') + +_426_MARKERS = ('Private-Version', 'Provides-Extra', 'Obsoleted-By', + 'Setup-Requires-Dist', 'Extension') + _ALL_FIELDS = set() _ALL_FIELDS.update(_241_FIELDS) _ALL_FIELDS.update(_314_FIELDS) _ALL_FIELDS.update(_345_FIELDS) +_ALL_FIELDS.update(_426_FIELDS) + +EXTRA_RE = re.compile(r'''extra\s*==\s*("([^"]+)"|'([^']+)')''') def _version2fieldlist(version): @@ -110,6 +127,8 @@ def _version2fieldlist(version): return _314_FIELDS elif version == '1.2': return _345_FIELDS + elif version == '1.3': + return _426_FIELDS raise MetadataUnrecognizedVersionError(version) @@ -127,7 +146,7 @@ def _has_marker(keys, markers): continue keys.append(key) - possible_versions = ['1.0', '1.1', '1.2'] + possible_versions = ['1.0', '1.1', '1.2', '1.3'] # first let's try to see if a field is not part of one of the version for key in keys: @@ -137,6 +156,8 @@ def _has_marker(keys, markers): possible_versions.remove('1.1') if key not in _345_FIELDS and '1.2' in possible_versions: possible_versions.remove('1.2') + if key not in _426_FIELDS and '1.3' in possible_versions: + possible_versions.remove('1.3') # possible_version contains qualified versions if len(possible_versions) == 1: @@ -147,23 +168,25 @@ def _has_marker(keys, markers): # let's see if one unique marker is found is_1_1 = '1.1' in possible_versions and _has_marker(keys, _314_MARKERS) is_1_2 = '1.2' in possible_versions and _has_marker(keys, _345_MARKERS) - if is_1_1 and is_1_2: - raise MetadataConflictError('You used incompatible 1.1 and 1.2 fields') + is_1_3 = '1.3' in possible_versions and _has_marker(keys, _426_MARKERS) + if int(is_1_1) + int(is_1_2) + int(is_1_3) > 1: + raise MetadataConflictError('You used incompatible 1.1/1.2/1.3 fields') - # we have the choice, either 1.0, or 1.2 + # we have the choice, 1.0, or 1.2, or 1.3 # - 1.0 has a broken Summary field but works with all tools # - 1.1 is to avoid - # - 1.2 fixes Summary but is not widespread yet - if not is_1_1 and not is_1_2: + # - 1.2 fixes Summary but has little adoption + # - 1.3 adds more features and is very new + if not is_1_1 and not is_1_2 and not is_1_3: # we couldn't find any specific marker if PKG_INFO_PREFERRED_VERSION in possible_versions: return PKG_INFO_PREFERRED_VERSION if is_1_1: return '1.1' + if is_1_2: + return '1.2' - # default marker when 1.0 is disqualified - return '1.2' - + return '1.3' _ATTR2FIELD = { 'metadata_version': 'Metadata-Version', @@ -185,12 +208,17 @@ def _has_marker(keys, markers): 'obsoletes_dist': 'Obsoletes-Dist', 'provides_dist': 'Provides-Dist', 'requires_dist': 'Requires-Dist', + 'setup_requires_dist': 'Setup-Requires-Dist', 'requires_python': 'Requires-Python', 'requires_external': 'Requires-External', 'requires': 'Requires', 'provides': 'Provides', 'obsoletes': 'Obsoletes', 'project_url': 'Project-URL', + 'private_version': 'Private-Version', + 'obsoleted_by': 'Obsoleted-By', + 'extension': 'Extension', + 'provides_extra': 'Provides-Extra', } _PREDICATE_FIELDS = ('Requires-Dist', 'Obsoletes-Dist', 'Provides-Dist') @@ -199,7 +227,8 @@ def _has_marker(keys, markers): _LISTFIELDS = ('Platform', 'Classifier', 'Obsoletes', 'Requires', 'Provides', 'Obsoletes-Dist', 'Provides-Dist', 'Requires-Dist', 'Requires-External', - 'Project-URL', 'Supported-Platform') + 'Project-URL', 'Supported-Platform', 'Setup-Requires-Dist', + 'Provides-Extra', 'Extension') _LISTTUPLEFIELDS = ('Project-URL',) _ELEMENTSFIELD = ('Keywords',) @@ -233,8 +262,8 @@ def __init__(self, path=None, platform_dependent=False, self.docutils_support = _HAS_DOCUTILS self.platform_dependent = platform_dependent self.execution_context = execution_context + self._dependencies = None self.scheme = scheme - self.dependencies = {} if [path, fileobj, mapping].count(None) < 2: raise TypeError('path, fileobj and mapping are exclusive') if path is not None: @@ -248,8 +277,8 @@ def __init__(self, path=None, platform_dependent=False, def set_metadata_version(self): self._fields['Metadata-Version'] = _best_version(self._fields) - def _write_field(self, file, name, value): - file.write('%s: %s\n' % (name, value)) + def _write_field(self, fileobj, name, value): + fileobj.write('%s: %s\n' % (name, value)) def __getitem__(self, name): return self.get(name) @@ -319,9 +348,57 @@ def __getattr__(self, name): return self[name] raise AttributeError(name) + def _get_dependencies(self): + def handle_req(req, rlist, extras): + if ';' not in req: + rlist.append(req) + else: + r, marker = req.split(';') + m = EXTRA_RE.search(marker) + if m: + extra = m.groups()[0][1:-1] + extras.setdefault(extra, []).append(r) + + result = self._dependencies + if result is None: + self._dependencies = result = {} + extras = {} + setup_reqs = self['Setup-Requires-Dist'] + if setup_reqs: + result['setup'] = setup_reqs + install_reqs = [] + for req in self['Requires-Dist']: + handle_req(req, install_reqs, extras) + if install_reqs: + result['install'] = install_reqs + if extras: + result['extras'] = extras + return result + + def _set_dependencies(self, value): + if 'test' in value: + value = dict(value) # don't change value passed in + value.setdefault('extras', {})['test'] = value.pop('test') + self._dependencies = value + setup_reqs = value.get('setup', []) + install_reqs = value.get('install', []) + klist = [] + for k, rlist in value.get('extras', {}).items(): + klist.append(k) + for r in rlist: + install_reqs.append('%s; extra == "%s"' % (r, k)) + if setup_reqs: + self['Setup-Requires-Dist'] = setup_reqs + if install_reqs: + self['Requires-Dist'] = install_reqs + if klist: + self['Provides-Extra'] = klist # # Public API # + + dependencies = property(_get_dependencies, _set_dependencies) + def get_fullname(self, filesafe=False): """Return the distribution name with version. @@ -335,7 +412,7 @@ def get_fullname(self, filesafe=False): version = _FILESAFE.sub('-', version.replace(' ', '.')) return '%s-%s' % (name, version) - def is_metadata_field(self, name): + def is_field(self, name): """return True if name is a valid metadata key""" name = self._convert_name(name) return name in _ALL_FIELDS @@ -371,20 +448,22 @@ def read_file(self, fileob): self.set(field, value) self.set_metadata_version() - def write(self, filepath): + def write(self, filepath, skip_unknown=False): """Write the metadata fields to filepath.""" fp = codecs.open(filepath, 'w', encoding='utf-8') try: - self.write_file(fp) + self.write_file(fp, skip_unknown) finally: fp.close() - def write_file(self, fileobject): + def write_file(self, fileobject, skip_unknown=False): """Write the PKG-INFO format data to a file object.""" self.set_metadata_version() for field in _version2fieldlist(self['Metadata-Version']): values = self.get(field) + if skip_unknown and values in ('UNKNOWN', [], ['UNKNOWN']): + continue if field in _ELEMENTSFIELD: self._write_field(fileobject, field, ','.join(values)) continue @@ -606,8 +685,9 @@ def todict(self, skip_missing=False): ('requires', 'Requires'), ('obsoletes', 'Obsoletes'), ) - if not skip_missing or field_name in self._fields: - data[key] = self[field_name] + for key, field_name in mapping_1_1: + if not skip_missing or field_name in self._fields: + data[key] = self[field_name] return data From 379f4f4502529a7e532b561d7d6ba9bc1dffe781 Mon Sep 17 00:00:00 2001 From: Vinay Sajip Date: Mon, 22 Apr 2013 23:41:16 +0100 Subject: [PATCH 04/13] Test parity with develop branch achieved. --- pip/req.py | 7 +- pip/vendor/distlib/pkg_resources.py | 181 ++++++++++++++++++++++------ 2 files changed, 148 insertions(+), 40 deletions(-) diff --git a/pip/req.py b/pip/req.py index a90c9b4c367..3fed074a088 100644 --- a/pip/req.py +++ b/pip/req.py @@ -1,7 +1,8 @@ from email.parser import FeedParser import os import imp -import pkg_resources +#import pkg_resources +from pip.vendor.distlib import pkg_resources import re import sys import shutil @@ -427,7 +428,6 @@ def uninstall(self, auto_confirm=False): if not self.check_if_exists(): raise UninstallationError("Cannot uninstall requirement %s, not installed" % (self.name,)) dist = self.satisfied_by or self.conflicts_with - paths_to_remove = UninstallPathSet(dist) pip_egg_info_path = os.path.join(dist.location, @@ -1082,7 +1082,8 @@ def prepare_files(self, finder, force_root_egg_info=False, bundle=False): elif is_wheel: req_to_install.source_dir = location req_to_install.url = url.url - dist = list(pkg_resources.find_distributions(location))[0] + dists = list(pkg_resources.find_distributions(location)) + dist = dists[0] if not req_to_install.req: req_to_install.req = dist.as_requirement() self.add_requirement(req_to_install) diff --git a/pip/vendor/distlib/pkg_resources.py b/pip/vendor/distlib/pkg_resources.py index 007d14a5fe0..a0169faaa0d 100644 --- a/pip/vendor/distlib/pkg_resources.py +++ b/pip/vendor/distlib/pkg_resources.py @@ -1,4 +1,5 @@ # This module is a shim to help migrate from the real pkg_resources +import logging import os import re import sys @@ -9,14 +10,35 @@ from pip.vendor.distlib.database import (DistributionPath, InstalledDistribution as DistInfoDistribution, EggInfoDistribution) -from pip.vendor.distlib.locators import locate +from pip.vendor.distlib.markers import interpret from pip.vendor.distlib.util import parse_requirement from pip.vendor.distlib.version import legacy_key as parse_version +logger = logging.getLogger(__name__) + PY_MAJOR = sys.version[:3] NON_ALPHAS = re.compile('[^A-Za-z0-9.]+') +def init_logging(): + # Since we're minimising changes to pip, update logging here + logger.setLevel(logging.DEBUG) + if not logger.handlers: + fn = os.path.expanduser('~/pkg_resources.log') + h = logging.FileHandler(fn, 'a') + f = logging.Formatter('%(lineno)3d %(funcName)-10s %(message)s') + h.setFormatter(f) + logger.addHandler(h) + +def log_files(path): + logger.debug('log of files under %s', path) + for root, dirs, files in os.walk(path): + dirs[:] = sorted(dirs) + for fn in sorted(files): + p = os.path.join(root, fn) + logger.debug(' %s', p) + + class Requirement(object): state_machine = { @@ -30,9 +52,12 @@ class Requirement(object): } def __init__(self, *args, **kwargs): + init_logging() + logger.debug('%s %s', args, kwargs) self.__dict__.update(kwargs) self.unsafe_name = self.name self.project_name = NON_ALPHAS.sub('-', self.name) + self.key = self.project_name.lower() self.specs = self.constraints or [] if self.extras is None: self.extras = [] @@ -43,6 +68,7 @@ def __init__(self, *args, **kwargs): @staticmethod def parse(s, replacement=True): r = parse_requirement(s) + logger.debug('%s -> %s', s, r.__dict__) return Requirement(**r.__dict__) def __str__(self): @@ -54,9 +80,12 @@ def __str__(self): return '%s%s%s' % (self.name, extras, cons) # copied from pkg_resources - def __contains__(self,item): + def __contains__(self, item): + init_logging() if isinstance(item,Distribution): - if item.key != self.key: return False + if item.key != self.key: + logger.debug('%s %s', item.key, self.key) + return False if self.index: item = item.parsed_version # only get if we need it elif isinstance(item, string_types): item = parse_version(item) @@ -69,20 +98,54 @@ def __contains__(self,item): elif action=='+': last = True elif action=='-' or last is None: last = False if last is None: last = True # no rules encountered + logger.debug('%s %s', item, last) return last class Common(object): def as_requirement(self): - return Requirement.parse('%s==%s' % (self.project_name, self.version)) + init_logging() + result = Requirement.parse('%s==%s' % (self.project_name, self.version)) + logger.debug('%s', result) + return result class Distribution(EggInfoDistribution, Common): def __init__(self, *args, **kwargs): super(Distribution, self).__init__(*args, **kwargs) self.project_name = self.name - self.location = os.path.dirname(self.path) + self.location = self.path + if not self.location.endswith('.egg'): + self.location = os.path.dirname(self.location) + + def _metadata_path(self, name): + parts = name.split('/') + root = self.path + if root.endswith('.egg'): + path = os.path.join(root, 'EGG-INFO') + if os.path.isdir(path): + root = path + result = os.path.join(root, *parts) + logger.debug('%s %s -> %s', self.path, name, result) + return result def has_metadata(self, name): - return name == 'PKG-INFO' + path = self._metadata_path(name) + result = os.path.exists(path) + logger.debug('%s %s -> %s', self.path, name, result) + return result + + def get_metadata(self, name): + path = self._metadata_path(name) + assert os.path.exists(path) + with open(path, 'rb') as f: + result = f.read().decode('utf-8') + return result + + def get_metadata_lines(self, name): + lines = self.get_metadata(name).splitlines() + for line in lines: + line = line.strip() + if line and line[0] != '#': + yield line @property def parsed_version(self): @@ -97,18 +160,24 @@ def egg_name(self): s2 = self.version.replace('-', '_') return '%s-%s-py%s' % (s1, s2, PY_MAJOR) - def requires(self, extras=()): - reqs = EggInfoDistribution.requires.__get__(self, None) - if 'requires' in self.__dict__: - del self.__dict__['requires'] - result = [] - for r in reqs: - r = parse_requirement(r) - dist = locate(r.requirement) - assert dist - result.append(dist) - debug('requires: %s -> %s' % (self, result)) - return result + def requires(self, extras=None): + init_logging() + try: + reqs = EggInfoDistribution.requires.__get__(self, None) + logger.debug('%s', reqs) + if 'requires' in self.__dict__: + del self.__dict__['requires'] + result = [] + for r in reqs: + d = parse_requirement(r) + logger.debug('%s -> %s', r, d.__dict__) + result.append(Requirement(**d.__dict__)) + logger.warning('requires: %s -> %s', self, result) + return result + except: + logger.exception('failed') + raise + class NewDistribution(DistInfoDistribution, Common): def __init__(self, *args, **kwargs): @@ -116,18 +185,39 @@ def __init__(self, *args, **kwargs): self.project_name = self.name self.location = os.path.dirname(self.path) - def requires(self, extras=()): - result = DistInfoDistribution.requires.__get__(self, None) - if 'requires' in self.__dict__: - del self.__dict__['requires'] - result = [] - for r in reqs: - r = parse_requirement(r) - dist = locate(r.requirement) - assert dist - result.append(dist) - debug('requires: %s -> %s' % (self, result)) - return result + def requires(self, extras=None): + init_logging() + try: + reqs = DistInfoDistribution.requires.__get__(self, None) + if 'requires' in self.__dict__: + del self.__dict__['requires'] + result = [] + logger.debug('requires(%s): %s -> %s', extras, self, reqs) + marked = [] + for r in list(reqs): + if ';' in r: + reqs.remove(r) + marked.append(r.split(';', 1)) + if marked: + if extras: + e = extras + (None,) + else: + e = (None,) + for extra in e: + context = {'extra': extra} + for r, marker in marked: + if interpret(marker, context): + reqs.add(r) + for r in reqs: + d = parse_requirement(r) + logger.debug('%s -> %s', r, d.__dict__) + result.append(Requirement(**d.__dict__)) + logger.debug('requires(%s): %s -> %s', extras, self, result) + return result + except: + logger.exception('failed') + raise + database.old_dist_class = Distribution database.new_dist_class = NewDistribution @@ -135,20 +225,37 @@ def requires(self, extras=()): _installed_dists = DistributionPath(include_egg=True) working_set = list(_installed_dists.get_distributions()) -def get_distribution(name): - if isinstance(name, Requirement): - name = name.name - return _installed_dists.get_distribution(name) - class DistributionNotFound(Exception): """A requested distribution was not found""" class VersionConflict(Exception): """An already-installed version conflicts with the requested version""" +def get_distribution(req_or_name): + init_logging() + if isinstance(req_or_name, Requirement): + name = req_or_name.name + else: + name = req_or_name + result = _installed_dists.get_distribution(name) + logger.debug('%s -> %s', name, result) + if result is None: + raise DistributionNotFound(name) + if isinstance(req_or_name, Requirement) and result not in req_or_name: + raise VersionConflict(result, req_or_name) + return result + def find_distributions(path_item, only=False): - dp = DistributionPath([path_item], include_egg=True) - return list(dp.get_distributions()) + init_logging() + logger.debug('%s (%s)', path_item, only) + try: + dp = DistributionPath([path_item], include_egg=True) + result = list(dp.get_distributions()) + except: + logger.exception('failed') + raise + logger.debug('%s', result) + return result # This is only here because pip's test infrastructure is unhelpful when it # comes to logging :-( From ac2493091709aa6ebf4a2ee675be7ca7453503b5 Mon Sep 17 00:00:00 2001 From: Vinay Sajip Date: Wed, 24 Apr 2013 15:20:29 +0100 Subject: [PATCH 05/13] Ensure old pip is gone from test virtualenv. --- tests/test_pip.py | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/tests/test_pip.py b/tests/test_pip.py index 7d98c31b524..95ac4296ba7 100644 --- a/tests/test_pip.py +++ b/tests/test_pip.py @@ -387,6 +387,17 @@ def __init__(self, environ=None, sitecustomize=None): self.run('python', '-c', '"import sys; sys.path.insert(0, %r); import pip; sys.exit(pip.main());"' % os.path.dirname(here), 'uninstall', '-vvv', '-y', 'pip') + # For some reason, the above command can return with a zero exit code, no + # stdout or stderr output, but without uninstalling. So we check specifically + # for a pip directory in the site-packages and zap it if it exists + spdir = self.root_path / self.site_packages + spcontents = os.listdir(spdir) + pattern = re.compile(r'pip-\d+(\.\d+)*(\.\w+)?-py\d\.\d\.egg$') + for spfile in spcontents: + fn = os.path.join(spdir, spfile) + if os.path.isdir(fn) and pattern.match(spfile): + shutil.rmtree(fn) + break # Install this version instead self.run('python', 'setup.py', 'install', cwd=src_folder, expect_stderr=True) From 88b9072bd5670eb93d30516a9509a4c86cd07b84 Mon Sep 17 00:00:00 2001 From: Vinay Sajip Date: Wed, 24 Apr 2013 16:26:36 +0100 Subject: [PATCH 06/13] Fixed requires() implementation to handle markers properly. --- pip/vendor/distlib/pkg_resources.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/pip/vendor/distlib/pkg_resources.py b/pip/vendor/distlib/pkg_resources.py index a0169faaa0d..681c2e8d601 100644 --- a/pip/vendor/distlib/pkg_resources.py +++ b/pip/vendor/distlib/pkg_resources.py @@ -188,9 +188,7 @@ def __init__(self, *args, **kwargs): def requires(self, extras=None): init_logging() try: - reqs = DistInfoDistribution.requires.__get__(self, None) - if 'requires' in self.__dict__: - del self.__dict__['requires'] + reqs = set(self.metadata['Requires-Dist']) result = [] logger.debug('requires(%s): %s -> %s', extras, self, reqs) marked = [] From 560d72a1a04e7dc87033c41b787d1cad74e35f92 Mon Sep 17 00:00:00 2001 From: Vinay Sajip Date: Wed, 24 Apr 2013 23:01:08 +0100 Subject: [PATCH 07/13] Skip test because it fails due to a bug in Distribute on Python 3. --- tests/test_uninstall.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/tests/test_uninstall.py b/tests/test_uninstall.py index 35f43048821..12964e81577 100644 --- a/tests/test_uninstall.py +++ b/tests/test_uninstall.py @@ -5,6 +5,7 @@ import sys from os.path import join, abspath, normpath from tempfile import mkdtemp +from nose import SkipTest from mock import patch from tests.test_pip import here, reset_env, run_pip, assert_all_changes, write_file, pyversion from tests.local_repos import local_repo, local_checkout @@ -59,6 +60,13 @@ def test_uninstall_namespace_package(): the namespace and everything in it. """ + # This test is skipped on Python 3 because the installation fails. + # The reason it fails is that distribute has a bug: setuptools/extension.py + # has the line "from dist import _get_unpatched". This should be using + # "from .dist" or "from setuptools.dist" under Python 3 - because it isn't, + # we get an "ImportError: No module named dist". + if sys.version_info >= (3,): + raise SkipTest() env = reset_env() result = run_pip('install', 'pd.requires==0.0.3', expect_error=True) assert join(env.site_packages, 'pd') in result.files_created, sorted(result.files_created.keys()) From e0025790cce57d4fcfaba8737a3aa512cf0e1981 Mon Sep 17 00:00:00 2001 From: Vinay Sajip Date: Thu, 25 Apr 2013 00:57:25 +0100 Subject: [PATCH 08/13] Moved shim to pip.compat. --- pip/baseparser.py | 2 +- pip/commands/freeze.py | 2 +- pip/commands/search.py | 2 +- pip/commands/show.py | 2 +- pip/compat/__init__.py | 0 .../distlib => compat}/pkg_resources.py | 18 ++++++++++++++++-- pip/index.py | 2 +- pip/req.py | 2 +- pip/util.py | 2 +- pip/wheel.py | 2 +- tests/test_finder.py | 2 +- tests/test_uninstall.py | 4 ++-- tests/test_util.py | 8 ++++---- tests/test_wheel.py | 3 +-- 14 files changed, 32 insertions(+), 19 deletions(-) create mode 100644 pip/compat/__init__.py rename pip/{vendor/distlib => compat}/pkg_resources.py (92%) diff --git a/pip/baseparser.py b/pip/baseparser.py index 024b70c4255..16a113f12d0 100644 --- a/pip/baseparser.py +++ b/pip/baseparser.py @@ -2,7 +2,7 @@ import sys import optparse -from pip.vendor.distlib import pkg_resources +from pip.compat import pkg_resources import os import textwrap from distutils.util import strtobool diff --git a/pip/commands/freeze.py b/pip/commands/freeze.py index 3b6ce2ff671..3bfaa1dbf5a 100644 --- a/pip/commands/freeze.py +++ b/pip/commands/freeze.py @@ -1,6 +1,6 @@ import re import sys -from pip.vendor.distlib import pkg_resources +from pip.compat import pkg_resources import pip from pip.req import InstallRequirement from pip.log import logger diff --git a/pip/commands/search.py b/pip/commands/search.py index fac79430c8f..b96f46643c0 100644 --- a/pip/commands/search.py +++ b/pip/commands/search.py @@ -1,6 +1,6 @@ import sys import textwrap -from pip.vendor.distlib import pkg_resources +from pip.compat import pkg_resources import pip.download from pip.basecommand import Command, SUCCESS from pip.util import get_terminal_size diff --git a/pip/commands/show.py b/pip/commands/show.py index 639aeff2e2f..c6c35534c04 100644 --- a/pip/commands/show.py +++ b/pip/commands/show.py @@ -1,5 +1,5 @@ import os -from pip.vendor.distlib import pkg_resources +from pip.compat import pkg_resources from pip.basecommand import Command from pip.log import logger diff --git a/pip/compat/__init__.py b/pip/compat/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/pip/vendor/distlib/pkg_resources.py b/pip/compat/pkg_resources.py similarity index 92% rename from pip/vendor/distlib/pkg_resources.py rename to pip/compat/pkg_resources.py index 681c2e8d601..e7abf731561 100644 --- a/pip/vendor/distlib/pkg_resources.py +++ b/pip/compat/pkg_resources.py @@ -110,8 +110,22 @@ def as_requirement(self): class Distribution(EggInfoDistribution, Common): def __init__(self, *args, **kwargs): - super(Distribution, self).__init__(*args, **kwargs) - self.project_name = self.name + project_name = kwargs.pop('project_name', None) + version = kwargs.pop('version', None) + # if args is None, the code is being called for test mocking only, + # so we take a different path + if args: + super(Distribution, self).__init__(*args, **kwargs) + if project_name is None: + project_name = self.name + if version is not None: + self.version = version + self.project_name = project_name + # if args is None, the code is being called for test mocking only, + # so we take a different path + if not args: + self.key = self.project_name.lower() + return self.location = self.path if not self.location.endswith('.egg'): self.location = os.path.dirname(self.location) diff --git a/pip/index.py b/pip/index.py index 3b7700b66d1..c1a737ac785 100644 --- a/pip/index.py +++ b/pip/index.py @@ -6,7 +6,7 @@ import gzip import mimetypes import posixpath -from pip.vendor.distlib import pkg_resources +from pip.compat import pkg_resources import random import socket import ssl diff --git a/pip/req.py b/pip/req.py index a1b4b29ed5c..34bd10c9cb9 100644 --- a/pip/req.py +++ b/pip/req.py @@ -1,7 +1,7 @@ from email.parser import FeedParser import os import imp -from pip.vendor.distlib import pkg_resources +from pip.compat import pkg_resources import re import sys import shutil diff --git a/pip/util.py b/pip/util.py index 7a6d36fce30..126c693423a 100644 --- a/pip/util.py +++ b/pip/util.py @@ -4,7 +4,7 @@ import stat import re import posixpath -from pip.vendor.distlib import pkg_resources +from pip.compat import pkg_resources import zipfile import tarfile import subprocess diff --git a/pip/wheel.py b/pip/wheel.py index 3e983960f60..9afeaa8d0d1 100644 --- a/pip/wheel.py +++ b/pip/wheel.py @@ -7,7 +7,7 @@ import functools import hashlib import os -import pkg_resources +from pip.compat import pkg_resources import shutil import sys from base64 import urlsafe_b64encode diff --git a/tests/test_finder.py b/tests/test_finder.py index 1017a1bfbe6..389f39dbc33 100644 --- a/tests/test_finder.py +++ b/tests/test_finder.py @@ -1,5 +1,5 @@ import os -from pip.vendor.distlib.pkg_resources import parse_version +from pip.compat.pkg_resources import parse_version from pip.backwardcompat import urllib from pip.req import InstallRequirement from pip.index import PackageFinder diff --git a/tests/test_uninstall.py b/tests/test_uninstall.py index 12964e81577..2fd3a81e415 100644 --- a/tests/test_uninstall.py +++ b/tests/test_uninstall.py @@ -217,7 +217,7 @@ def test_uninstallpathset_no_paths(mock_logger): """ from pip.req import UninstallPathSet - from pip.vendor.distlib.pkg_resources import get_distribution + from pip.compat.pkg_resources import get_distribution test_dist = get_distribution('pip') # ensure that the distribution is "local" with patch("pip.req.dist_is_local") as mock_dist_is_local: @@ -235,7 +235,7 @@ def test_uninstallpathset_non_local(mock_logger): """ nonlocal_path = os.path.abspath("/nonlocal") from pip.req import UninstallPathSet - from pip.vendor.distlib.pkg_resources import get_distribution + from pip.compat.pkg_resources import get_distribution test_dist = get_distribution('pip') test_dist.location = nonlocal_path # ensure that the distribution is "non-local" diff --git a/tests/test_util.py b/tests/test_util.py index 939915fac3c..d8934a2bafd 100644 --- a/tests/test_util.py +++ b/tests/test_util.py @@ -3,7 +3,7 @@ """ import os -from pip.vendor.distlib import pkg_resources +from pip.compat import pkg_resources from mock import Mock, patch from nose.tools import eq_ from tests.path import Path @@ -166,7 +166,7 @@ def dist_is_local(self, dist): @patch('pip.util.dist_is_local') @patch('pip.util.dist_is_editable') - @patch('pip.vendor.distlib.pkg_resources.working_set', workingset) + @patch('pip.compat.pkg_resources.working_set', workingset) def test_editables_only(self, mock_dist_is_editable, mock_dist_is_local): mock_dist_is_editable.side_effect = self.dist_is_editable mock_dist_is_local.side_effect = self.dist_is_local @@ -177,7 +177,7 @@ def test_editables_only(self, mock_dist_is_editable, mock_dist_is_local): @patch('pip.util.dist_is_local') @patch('pip.util.dist_is_editable') - @patch('pip.vendor.distlib.pkg_resources.working_set', workingset) + @patch('pip.compat.pkg_resources.working_set', workingset) def test_exclude_editables(self, mock_dist_is_editable, mock_dist_is_local): mock_dist_is_editable.side_effect = self.dist_is_editable mock_dist_is_local.side_effect = self.dist_is_local @@ -188,7 +188,7 @@ def test_exclude_editables(self, mock_dist_is_editable, mock_dist_is_local): @patch('pip.util.dist_is_local') @patch('pip.util.dist_is_editable') - @patch('pip.vendor.distlib.pkg_resources.working_set', workingset) + @patch('pip.compat.pkg_resources.working_set', workingset) def test_include_globals(self, mock_dist_is_editable, mock_dist_is_local): mock_dist_is_editable.side_effect = self.dist_is_editable mock_dist_is_local.side_effect = self.dist_is_local diff --git a/tests/test_wheel.py b/tests/test_wheel.py index 13f065a33a2..40aae43ce40 100644 --- a/tests/test_wheel.py +++ b/tests/test_wheel.py @@ -1,6 +1,6 @@ """Tests for wheel binary packages and .dist-info.""" import os -import pkg_resources +from pip.compat import pkg_resources import sys import textwrap @@ -186,4 +186,3 @@ def test_finder_no_raises_error(self, mock_get_distribution): p = PackageFinder( [], [], use_wheel=False) p = PackageFinder([], []) p.use_wheel = False - From 9371ebc1602be6134abd264b7c27e35df3d17ffe Mon Sep 17 00:00:00 2001 From: Vinay Sajip Date: Sat, 20 Jul 2013 08:04:07 +0100 Subject: [PATCH 09/13] Interim update. --- pip/compat/pkg_resources.py | 9 +++++++-- pip/wheel.py | 2 +- tests/unit/test_finder.py | 2 +- tests/unit/test_req.py | 2 +- tests/unit/test_wheel.py | 6 +++--- 5 files changed, 13 insertions(+), 8 deletions(-) diff --git a/pip/compat/pkg_resources.py b/pip/compat/pkg_resources.py index e0fa0bc019c..de22a6a5070 100644 --- a/pip/compat/pkg_resources.py +++ b/pip/compat/pkg_resources.py @@ -101,6 +101,11 @@ def __contains__(self, item): logger.debug('%s %s', item, last) return last +def parse_requirements(slist): + if isinstance(slist, string_types): + slist = [slist] + return [Requirement.parse(s) for s in slist] + class Common(object): def as_requirement(self): init_logging() @@ -177,7 +182,7 @@ def egg_name(self): def requires(self, extras=None): init_logging() try: - reqs = EggInfoDistribution.requires.__get__(self, None) + reqs = EggInfoDistribution.run_requires.__get__(self, None) logger.debug('%s', reqs) if 'requires' in self.__dict__: del self.__dict__['requires'] @@ -202,7 +207,7 @@ def __init__(self, *args, **kwargs): def requires(self, extras=None): init_logging() try: - reqs = set(self.metadata['Requires-Dist']) + reqs = set(self.run_requires) result = [] logger.debug('requires(%s): %s -> %s', extras, self, reqs) marked = [] diff --git a/pip/wheel.py b/pip/wheel.py index 3cba0664552..c558aa7835a 100644 --- a/pip/wheel.py +++ b/pip/wheel.py @@ -7,7 +7,7 @@ import functools import hashlib import os -import pkg_resources +from pip.compat import pkg_resources import re import shutil import sys diff --git a/tests/unit/test_finder.py b/tests/unit/test_finder.py index 61394c84e52..3967d880f1a 100644 --- a/tests/unit/test_finder.py +++ b/tests/unit/test_finder.py @@ -1,5 +1,5 @@ import os -from pkg_resources import parse_version, Distribution +from pip.compat.pkg_resources import parse_version, Distribution from pip.backwardcompat import urllib from pip.req import InstallRequirement from pip.index import PackageFinder, Link diff --git a/tests/unit/test_req.py b/tests/unit/test_req.py index 8d315174672..31946e80229 100644 --- a/tests/unit/test_req.py +++ b/tests/unit/test_req.py @@ -2,7 +2,7 @@ import shutil import tempfile -from pkg_resources import Distribution +from pip.compat.pkg_resources import Distribution from mock import Mock, patch from nose.tools import assert_equal, assert_raises from pip.exceptions import PreviousBuildDirError diff --git a/tests/unit/test_wheel.py b/tests/unit/test_wheel.py index e0578f2730d..548fef6c77b 100644 --- a/tests/unit/test_wheel.py +++ b/tests/unit/test_wheel.py @@ -1,5 +1,5 @@ """Tests for wheel binary packages and .dist-info.""" -import pkg_resources +from pip.compat import pkg_resources from mock import patch, Mock from pip import wheel from pip.exceptions import InstallationError @@ -150,12 +150,12 @@ def test_unpack_wheel_no_flatten(self): finally: rmtree(tmpdir) pass - + def test_purelib_platlib(self): """ Test the "wheel is purelib/platlib" code. """ packages = [("pure_wheel", "data/packages/pure_wheel-1.7", True), - ("plat_wheel", "data/packages/plat_wheel-1.7", False)] + ("plat_wheel", "data/packages/plat_wheel-1.7", False)] for name, path, expected in packages: assert wheel.root_is_purelib(name, path) == expected From 9fc84f8d9d0ff801279ce19be35fedce5badd621 Mon Sep 17 00:00:00 2001 From: Vinay Sajip Date: Sat, 20 Jul 2013 11:40:24 +0100 Subject: [PATCH 10/13] Fixed one or two places where the real pkg_resources was being used. Test parity with develop achieved. --- pip/vendor/distlib/metadata.py | 45 +++++++++++++++++++++++++++++++--- 1 file changed, 41 insertions(+), 4 deletions(-) diff --git a/pip/vendor/distlib/metadata.py b/pip/vendor/distlib/metadata.py index eb900369fb5..ab24fcd25d7 100644 --- a/pip/vendor/distlib/metadata.py +++ b/pip/vendor/distlib/metadata.py @@ -754,6 +754,7 @@ def __init__(self, path=None, fileobj=None, mapping=None, 'dev_requires': (None, list), 'test_requires': (None, list), 'meta_requires': (None, list), + 'extras': ('Provides-Extra', list), 'classifiers': ('Classifier', list), 'source_url': ('Download-URL', None), 'metadata_version': ('Metadata-Version', None), @@ -960,14 +961,50 @@ def _from_legacy(self): maintainer = {} return result + LEGACY_MAPPING = { + 'name': 'Name', + 'version': 'Version', + 'license': 'License', + 'summary': 'Summary', + 'description': 'Description', + 'classifiers': 'Classifier', + } + def _to_legacy(self): + def process_entries(entries): + reqts = set() + for e in entries: + extra = e.get('extra') + env = e.get('environment') + rlist = e['requires'] + for r in rlist: + if not env and not extra: + reqts.add(r) + else: + marker = '' + if extra: + marker = 'extra == %r' % extra + if env: + if marker: + marker = '(%s) and %s' % (env, marker) + else: + marker = env + reqts.add(';'.join((r, marker))) + return reqts + assert self._data and not self._legacy result = LegacyMetadata() nmd = self._data for nk, ok in self.LEGACY_MAPPING.items(): result[ok] = nmd[nk] - result['Requires-Dist'] = self.requires + self.meta_requires - result['Setup-Requires-Dist'] = self.build_requires + self.dev_requires + extras = set() + rlist = set() + r1 = process_entries(self.run_requires + self.meta_requires) + r2 = process_entries(self.build_requires + self.dev_requires) + if self.extras: + result['Provides-Extra'] = sorted(self.extras) + result['Requires-Dist'] = sorted(r1) + result['Setup-Requires-Dist'] = sorted(r2) # TODO: other fields such as contacts return result @@ -981,9 +1018,9 @@ def write(self, path=None, fileobj=None, legacy=False, skip_unknown=True): else: legacy_md = self._to_legacy() if path: - self._legacy.write(path, skip_unknown=skip_unknown) + legacy_md.write(path, skip_unknown=skip_unknown) else: - self._legacy.write_file(fileobj, skip_unknown=skip_unknown) + legacy_md.write_file(fileobj, skip_unknown=skip_unknown) else: if self._legacy: d = self._from_legacy() From bac126010971ca7e2309f4a26c7e62102dff1798 Mon Sep 17 00:00:00 2001 From: Vinay Sajip Date: Sun, 21 Jul 2013 00:48:31 +0100 Subject: [PATCH 11/13] Allow METADATA as well as pydist.json for now. --- pip/vendor/distlib/database.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/pip/vendor/distlib/database.py b/pip/vendor/distlib/database.py index bfe249bbc31..1441246aeac 100644 --- a/pip/vendor/distlib/database.py +++ b/pip/vendor/distlib/database.py @@ -498,6 +498,9 @@ def __init__(self, path, metadata=None, env=None): metadata = env._cache.path[path].metadata elif metadata is None: metadata_path = os.path.join(path, METADATA_FILENAME) + # Temporary - for legacy support + if not os.path.exists(metadata_path): + metadata_path = os.path.join(path, 'METADATA') if not os.path.exists(metadata_path): raise ValueError('no %s found in %s' % (METADATA_FILENAME, path)) From 194849e473ffc2f4f273f53677b7be8692ac452c Mon Sep 17 00:00:00 2001 From: Vinay Sajip Date: Mon, 22 Jul 2013 16:07:54 +0100 Subject: [PATCH 12/13] Fixed pkg_resources use in @patch decorators. --- tests/unit/test_util.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/unit/test_util.py b/tests/unit/test_util.py index 114f77e8ab2..b369ae75a95 100644 --- a/tests/unit/test_util.py +++ b/tests/unit/test_util.py @@ -168,7 +168,7 @@ def dist_is_local(self, dist): @patch('pip.util.dist_is_local') @patch('pip.util.dist_is_editable') - @patch('pkg_resources.working_set', workingset) + @patch('pip.compat.pkg_resources.working_set', workingset) def test_editables_only(self, mock_dist_is_editable, mock_dist_is_local): mock_dist_is_editable.side_effect = self.dist_is_editable mock_dist_is_local.side_effect = self.dist_is_local @@ -179,7 +179,7 @@ def test_editables_only(self, mock_dist_is_editable, mock_dist_is_local): @patch('pip.util.dist_is_local') @patch('pip.util.dist_is_editable') - @patch('pkg_resources.working_set', workingset) + @patch('pip.compat.pkg_resources.working_set', workingset) def test_exclude_editables(self, mock_dist_is_editable, mock_dist_is_local): mock_dist_is_editable.side_effect = self.dist_is_editable mock_dist_is_local.side_effect = self.dist_is_local @@ -190,7 +190,7 @@ def test_exclude_editables(self, mock_dist_is_editable, mock_dist_is_local): @patch('pip.util.dist_is_local') @patch('pip.util.dist_is_editable') - @patch('pkg_resources.working_set', workingset) + @patch('pip.compat.pkg_resources.working_set', workingset) def test_include_globals(self, mock_dist_is_editable, mock_dist_is_local): mock_dist_is_editable.side_effect = self.dist_is_editable mock_dist_is_local.side_effect = self.dist_is_local From b3a597fcee110e0776296da4247c7131abbb2008 Mon Sep 17 00:00:00 2001 From: Vinay Sajip Date: Fri, 13 Sep 2013 10:58:16 +0100 Subject: [PATCH 13/13] Added new files. --- pip/vendor/distlib/_backport/sysconfig.cfg | 84 +++++++++++++++++++++ pip/vendor/distlib/t32.exe | Bin 0 -> 65536 bytes pip/vendor/distlib/t64.exe | Bin 0 -> 69632 bytes pip/vendor/distlib/w32.exe | Bin 0 -> 66048 bytes pip/vendor/distlib/w64.exe | Bin 0 -> 69120 bytes 5 files changed, 84 insertions(+) create mode 100644 pip/vendor/distlib/_backport/sysconfig.cfg create mode 100644 pip/vendor/distlib/t32.exe create mode 100644 pip/vendor/distlib/t64.exe create mode 100644 pip/vendor/distlib/w32.exe create mode 100644 pip/vendor/distlib/w64.exe diff --git a/pip/vendor/distlib/_backport/sysconfig.cfg b/pip/vendor/distlib/_backport/sysconfig.cfg new file mode 100644 index 00000000000..1746bd01c1a --- /dev/null +++ b/pip/vendor/distlib/_backport/sysconfig.cfg @@ -0,0 +1,84 @@ +[posix_prefix] +# Configuration directories. Some of these come straight out of the +# configure script. They are for implementing the other variables, not to +# be used directly in [resource_locations]. +confdir = /etc +datadir = /usr/share +libdir = /usr/lib +statedir = /var +# User resource directory +local = ~/.local/{distribution.name} + +stdlib = {base}/lib/python{py_version_short} +platstdlib = {platbase}/lib/python{py_version_short} +purelib = {base}/lib/python{py_version_short}/site-packages +platlib = {platbase}/lib/python{py_version_short}/site-packages +include = {base}/include/python{py_version_short}{abiflags} +platinclude = {platbase}/include/python{py_version_short}{abiflags} +data = {base} + +[posix_home] +stdlib = {base}/lib/python +platstdlib = {base}/lib/python +purelib = {base}/lib/python +platlib = {base}/lib/python +include = {base}/include/python +platinclude = {base}/include/python +scripts = {base}/bin +data = {base} + +[nt] +stdlib = {base}/Lib +platstdlib = {base}/Lib +purelib = {base}/Lib/site-packages +platlib = {base}/Lib/site-packages +include = {base}/Include +platinclude = {base}/Include +scripts = {base}/Scripts +data = {base} + +[os2] +stdlib = {base}/Lib +platstdlib = {base}/Lib +purelib = {base}/Lib/site-packages +platlib = {base}/Lib/site-packages +include = {base}/Include +platinclude = {base}/Include +scripts = {base}/Scripts +data = {base} + +[os2_home] +stdlib = {userbase}/lib/python{py_version_short} +platstdlib = {userbase}/lib/python{py_version_short} +purelib = {userbase}/lib/python{py_version_short}/site-packages +platlib = {userbase}/lib/python{py_version_short}/site-packages +include = {userbase}/include/python{py_version_short} +scripts = {userbase}/bin +data = {userbase} + +[nt_user] +stdlib = {userbase}/Python{py_version_nodot} +platstdlib = {userbase}/Python{py_version_nodot} +purelib = {userbase}/Python{py_version_nodot}/site-packages +platlib = {userbase}/Python{py_version_nodot}/site-packages +include = {userbase}/Python{py_version_nodot}/Include +scripts = {userbase}/Scripts +data = {userbase} + +[posix_user] +stdlib = {userbase}/lib/python{py_version_short} +platstdlib = {userbase}/lib/python{py_version_short} +purelib = {userbase}/lib/python{py_version_short}/site-packages +platlib = {userbase}/lib/python{py_version_short}/site-packages +include = {userbase}/include/python{py_version_short} +scripts = {userbase}/bin +data = {userbase} + +[osx_framework_user] +stdlib = {userbase}/lib/python +platstdlib = {userbase}/lib/python +purelib = {userbase}/lib/python/site-packages +platlib = {userbase}/lib/python/site-packages +include = {userbase}/include +scripts = {userbase}/bin +data = {userbase} diff --git a/pip/vendor/distlib/t32.exe b/pip/vendor/distlib/t32.exe new file mode 100644 index 0000000000000000000000000000000000000000..c6ccc0c66b1205a7848157acad4fea1a05c65ed9 GIT binary patch literal 65536 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 DNggM; literal 0 HcmV?d00001 diff --git a/pip/vendor/distlib/t64.exe b/pip/vendor/distlib/t64.exe new file mode 100644 index 0000000000000000000000000000000000000000..034c0969bae4b5bfbd22ffb7c14ad1bdd93954c1 GIT binary patch literal 69632 zcmeFadw3K@)(1S3nIS_+=s`0Oz{m)LqVW>VstE%+4HM{*i9|t+ii!pil~oMgf-7QT zPkb{eW@UHPbys(F@7`9|eO(Nom=MT?YrqRZbct7LXjuYi60ZIIPW4O@Q1^SE@9!@U zOjpX@r-{rOg!0lXXBas+VJm|iuYe6^T)*V z`g_XfQ(Y;@ON(u`xlatR**4x$nu_bRjkXO+8)&nwM$GkAY!3nC5#gYn9u!Wq*a<;m|7-ET-(L_=UusK)?!DtfMAm@DR?)DS-ru}uvu$qNym_+{o9%ZiG1c$6QPIB%D(qv09WlKzq$~Ou zTXV>tPouh)ibYtx!dfD1lfrhQ#5jGf--o(3ATMjLuGcb6?;jA>dj?3Me=AJ&m$62L z&Gwfn`ugDQjhoTHIP~odmUZ(Pc3X9;>Mqz}dM`$iI;tMI#x)9fZbWx!P6L#J9R;nX zcRcb$;!%GGvdODfP-fPyAfg7jR?}2f096eAHN69nx4K@ZJNl)oNtKo)-Ir=?{+Ipz$?M zAVG=G^ye3}hFGKN-AN5B_2-XfZEAWXzQCVvpsoe}OBH=znq0HMOLQ^-oeHxp{A1L} zwjjce2sEp(9_i@@KIS+&i|D8PKcU+5c1Gf^VRk!);piY_b|SO%>jr-On4p;x7(}^l z5XM4b+xT8|19@!87E}<<( zO+3|XY3*SC8R`QX-C;*pu<&B-o64)k2nhc|g`aBRV^P@1B!s_h<;+0N+5v>_eU(?8 zBl5nS%zNZ$Dlhw9-mu2-~W#_ks9G46`E=Tj2Nc7X=62#>>zV zkg4Ejd^!l2UcUD?Z=N(NN>dTTlXY-ExX=)#p}{k+yTLTIw8M=`L#ro|D}myJGr$>r z3ft8r=h&3$9a8nL|!X|rIjmVbuFUmHM&pU&%O-42L& zFDTZ>AfMqA`4to%Sp>$YdiesX0!zpsekVd;Yrz<>)Q5xOg543e1MP>qoL7{X8n^4IaL(f9`9L`^d`P+}6AYQf?5SY^=Bv zpzKNzC@qWgq}31RNJ`$ue(-cBP6wtOeFhwQ18V-8Rr5HaZQuh?JSs`6D{=%J`46Z}SrErs}i zpL}WRcAD(@s46zoU#PG){_sVZFzrgUsgBYY_zUezGQ>P?LVq)pt0{jOof5NY{_TRL zBspgvzl^Y5C4=f!KhW5WY={!O4g%735Rk6R0U`M)VbNZ6 zi9+s*fs_TanM%~V5oNDPuNi`RjKkCdXbln}3afsIS4;hnuRtsqRfvPdtV3Z(6?PC4 zwYpV$x*oK19xnsSuxRCU3gW-J5&~9zq7~SqB0Ew=#{PJbd#xhRh$4k)RtY~pJp4x+ zDHJ7)yZM0$7$lGw=)9CToy6Z2rE)}F#+1sdY}#o4a$ikxFGL>{0ip8CuCm!ytSG2A zMnzalF~m%^Q(;^A`=EYE0VEpuAfhR(nYJxuw1t_Yu%-U_U=%@lHqf?Nt_z~J#Jj|o z2#3BKX5DBBr!vjAd|Db35q40)6kJk*nMc^%r^KG}SE3v^QY6r*o*xNpQvH#@VXcUp z09;gLVYhE)^5QE5LfP~F8Y-%<&zEnPZwoSRD{z)BVN( zc@^m+Lg>RnrFyp%y&K8NT=Ht-3+f$_^2P4r>MnJLRC5VZ!-1}lG^wkYZH)w4rT>9I z01+x(VGzNA2>zF;sP6p5ZkaVjfYl{RUZ-M5@^XJAa)yv+VZ_m?+$!rXE5IkY5*TBr|tU z!LpTX5t1ULfd{cUuCAA&ggL#(R2PFi=5;0(p-)ucArKcu&rLx_obUp|r!`#C4mY;{xprM@D^mj!((^H--b^ zdH1)8p;ny7*cWEa2{%y}=4fgkv=B3O3Ap+kpL_!mS(qIxVH~qG!af6QS1U>Y=1+-c z=U}+BpI|>>su@rXKn&Xh9Pr-`{n3fFr+}!;xRi+hS3Rb=LJ%XwU$LXu8D^V#HtjL3 z>0v)2rU!P?_0(LDriemQq%^|jV#W}W-b(WXU>1sHsDv~I>lEw;`GtgKeSM)wr@ob< zUy3^t3!-m|ZwAdIDo5M?-Rv;dh`=VWhCn0uPrJ9b2Q=&YO_Q_H0T6$}3o4`{@286V zZcJ&w6Hp4(ZU6K&q;NxQr;%Si6bs-5RPHb zrhh(4xo<~V*pb}=u_Ojj#2A7=B?6#&Wcmo1x+WDqri~?v8bP&qA+$kUObSjUG=&|R z^<8pdr8=5-LCQ;V*wcDAfxz8rf?ZrdfE@u1v-T3US!~&7f;%D7b}k}2!Ot*^uVKhn zP~;5s3ey27C!Qe|TN+)r;8glH4C*crxHg9W3~ejtoPyV+U{HUl%{Hjnn9?QZ=<0a> zA*6Ot3hUuB1XlsgOh&^k{6dg=b^XIG)M{X#GHo2qoD5z99fqQpkF)9JIW~)}28l?Z z4eDKkB1wP%4NCW0b^QGEGkbAzn%u(A17NJ#I2V8g)dBh)IW{AQ?|^OvJ>SH=AT^6( zr$awuHLRo>CL9QLSAJc|%{JS-B3JDv*ptmt%3bdwfKmJzJsb^Hg`}#6nrb&n1dYI| zL6E=a6)8ErQRDPFk{SjtPURU^u)FBl9z;n`H;O_7titbsI&Bz|XVD|9TBG%eCD@#$ zLF8=;Lx}{*%*LMr4p*5JI)vqmXAMbZ9i7bj9AyP#w()y&7Au4wH@{ zK8Ten!d%O`@QAq{!$V=-Ie4(FS@`AqI|=8cgaZ$v0&et*kHn8LjP>Y{8nHV?^a+5s znV*UH6{iji=KeTtl%ie|{bva#Nb9H@dLOX_#1}(N6ryMfsxQ-fJ(a0iPrzcriMg*pm0<~f#07jx{HC)MmRJk=08E=A ztO;wzt3j-r1-q5_qaHavZGbGj-5849>coFH{%6iR{HhY4cm;u+ccRugs>Y$1*d71J zt{qb1v>SyX13$ISq8d9yPAJGI1-kesOj@{JzY)U3rO`*^ZEF@B4 zQ=B2}qy?!&{R~Hn(7h+~u&VnUw=Qwb5*9&+s57O+BM>ppRlu zT}>5X%1Cb#Pi$@)Xs@9+rqM26d(XHU0tl)CB3_W=L7(0;e6bt##V7fUOqt#WqptX* zj??Nf*P*7s`xOwAm;1#C6>R21_mlGMc|VO|nB9^SW{Z4b_66zv(JR4kef-l58sMIk zD(Zp`u-7vcy{;Y@wUOH4**XM_`&VV*!2`r26!rqeQ6>3GAosw(kud}@M?I@kcbM8x zOyE~PrdlE3V+#(B+73uSMH`S)iT#f#%v^7aH;iYeZi7Y(m04}<1cM`?$sM2Os16zj)MXlFFL+In*y{VO{8fqv|`2Au;KPqXW-WEu-PjWs`@0uvi%Xut>!ImtZ- z=5G-Fe0mpvrrAQI#}4r@);`EjJ&>ESXm{hnmL`z{YKX)yYQUr=`;8H18{~Hg?4m*` zdL9C@V{_Q?4fN*u`Vm(}qRQkau!u!T%~xe6M7RgprMI`4-e~|IN~q{wM9}2(F+`r7 zjBFB-*PaFXtRt?%Z=C?TUgnJ5mKiFV>-R}d#6^yf|J=ga{&Urf3d`*3IB8{}v{JDL zjx6@(Z9|<`<^rI~3}@K!K{#)-_8lqo3v;yhmH3piSDi!!m2N1S*NZfEt+OieXG~0W zoSty1XX%M7)guQst4`KvjHq)uf$THu&Y(wTozsnnt8NJ1VpB3hv3YL85xdQ;#Fu%% z=2i_r)!=W54m^u;M}xsi)o+t<4hi!k#9_Mh^-K>?#Dbp!v$?ku&vNXSSEFKENj$XQ z17(?9n4?}=c#~bdP+B=eS}EHDZHtG48(fwv*E(d!2eR8vu_cbpfwqT${D!o`;o3IZ zvX?kMDardlTLZ*Z9iYAuq^e&(;8b(;16gXO95}9xSY!2Vjn%g`R^Qf$zTF0W%Pdbg zzI4A+bV_gxB26H5q3n@ zx0u|SjsmQcdq8Xo`#nuMNDpiA7GfQN$xbQyBxqrk4`j$Ig$<&;z*GXwQgkWe750oZ zOADXk0Z`v1)H%`TfrtfW3H?A1N_PEn5#$x zGGnfvP+%w2Tt0~Qx9k8x9CbZ9Tq)luy&an7nJ34hO5F&U!q!n1<8v!()lr%Nj}Ak& z+R*T`Ce=jkwgJ7FJ|o3Tl}XIw(Gg1dw%X`$T01G1Cmp$(Dcyh})pZOr9Bj*k1%YM# z2QSo57w_c2bu9N&k?OEpok$-F`p(0aLpv83_{E2m`4iPmLUBFv^Cv<7mTYgh3NSba zWU?In=vIzoGJWFqZ-FE&dld%4{^2;KugOnq&3TK+iOSmDXeN7QpEHH&$FJWy5Q& z^-9(7WmdS1lH#rpKEnem&IowNq!6VhSEs~(z9vNhW&&2UDnbBZ)oHD8 zRTfhF-YpdNy{8ak<&Vo{a-9XK_qle0w6v3~FdotfBTE`A1WN!TmK2y4`r?Gb(XO=u z0P1z8UP-vHi~SwchtX%zc^MYF&X66;dp{sUb`WJhAg%X4Ag%X4AnCn7kX<{!2V}?& zrTS?=in!B(4B2Z4N;2JGA8P6U$@Kxg5U1QhQ3~xdJ6r=xpoiff*avRjWvU zmR^m#Riv!sldwx%p~M-*VUzU;#)Hp7vrv3m8O|Z&T}o;x8$`MK>{E(4_RZg8j|CCc z9Q!v4LC!YE{)Iv`pIO#5s8By*s#&l98MYgTeQ78seBPqL@I2@E2HNmB>X|YeMwfOIR?Q-kjfoUuWHk3RsWn z{U_c?X^fpW9AfONTWA@&3!Ko3R0~+vmDCn%Grd0-c{gDq4TZe-Ek@q-{*vPKX>K#- zFw*&wFNA;vnWsYJ74jmCXSAb9j`@SuU{QnaxZ>ge!k)T!h(KXdG!KaC6O4&bvTz~M zo{Q(8eyC6s>n+22E3@8?e=gGITW|ld-k_wVavj#&66R|n9SfVM%yU;5phjj|-qSfjQ0dB7#-aAiu z0_4s;kRdQcbFi}fT?|q8bC4KZ526WDw<%(Xt&Q=c;A+WnzLaH6M-DO0e?-N)V_7>4z$pabGg{C2xsb&O`k zVlN5zL0IjBc!Pob;lvB5ly#HL9Ber04oWMx@^i6#i5(>Y6Rdg5UxPfsns@v$Je#8a zT0Cr__%(LpOp2vc#8M*k<{N1|f@FOo_b5tZa<cvhlHuq+R#Gi zI4m1`Y0}0H9q<|&9R4{HV7T5y zbO$s$Bk@uX20Z|fWDP@>}(=@Va105o+tO{%#NMi9A) zHp~BPc2LE}EA%qJda=YlU1(!}(AFT&f>EpLn-wT1_P?gL;aN=Y)n$kX#qVq(JOYd4AX9FdJTRj; z_DCio3h`2ufuHddQ;L`f)D&e{1D@<(xT29|-G+#Hp`xY!JEdrtm?-Ahe6%e^19*$X z=R1}1{IKJ@H8$|~q8urbBXqAYCB)-^I}*Qq0%{O_Aoytn8O5eUbb1^BK-^7jCjE6WQje;9IjMV##IbHxVuZK5*8Yz{OojT#cmeHO2@N4fkB zYK@t4V9&B;ihh-;-iP0l>RobIvCXdDMh`bFhJ#J-gkK{o;0#B~_l99Vf&Yc9e>tk; zzAwv49R4PS4L}F{a&56qt_k_wVa$Ke>KDOI`7_s9CDUay7v7gJuP*+G0>HrE4-m;?@K`E___S=VyXz2u+?Oc)39lM;$Z7D^}| zlu+Zs?2-HuR$d5Ylx08_vMJ5aQ<=FB8&Y-6=8Al%{tg9!<;A)Z?TIsPEtSQnJbQNhM^t{&5((gn%bt5a#eL zysWS9m(UsxDDJVK*lK#WJw*ukeG&oJ2`CN&if`q>x7ynO7btpl(C{}Fw!Zv=uK2Zf zem$n@iui2~42mz1`%Vvb#P>wXzrgf=7NdKOKB2>=mR`d$JA@eu{yAS^0}dJ+U^c-F z>(`HEFNFcqbsuF$F3Ynf7m$Ka&axsu;|;s82(a8Kc%P>Gzp$BPpz#?`T2jI`NC~i& z_3ebg7lF9mwPjR3(l_zWi$tXdw_;Yk1ml*l*N6o~F*|x?6w()Fxj>STuYZLCSaXKM zW9SPpJ!qaJBb{uM*_K*&)+_XhAMeI)Mv9U~sM*y-F9?Nd#;!pSZV=Uwe~F^r zfiS>dJw&s#lf){B$*@I`XotjKQ{vA>VvmryBCLyG7#D%X9+{z6J^;o8)s7N4S&_+a zq^w2hTAJ}SML-)O@#&&?I}gw^mTta}dZ$voS6B&n&8OG%@Je1Ju1J8ZuwEUe(H#dr z4tnPIHV8u~8ul607>yOb6r=GV9{e51yoichQOhXmWkjtguKrTZun@D#0ZUNzm)g0_ zuGLVo6Fy`tD{lTG5@g62Bsb$}dZ#`Kk|gXeB>T=1kXx|VT?Gu625Lv*Ua)Wx#*o<) zv++hgXk>>;OczO;leU!*TbGzfG0FYZr3VSy;IQrdiE9YYoA~PF^FLx6xQVX={Zafs zlh2Il*83|LTF-x9i)TFRF_0kt7^X@{D0!O@WeI;`Ui9g&n4D7p#<K>T8%DZ5EyoALJ@#@Q zz1%I>3#o2mgZfixpZ-A@ROXfhV- za|n(5jgfE;(uN{an(E;rtYldVb<z`m3^W=;nPUr= zTjnI z*0o_2&e?$}x)(D(S+vXWgk!T$*vRQ?6F<6L&|%h4^b7c6sbw4eKV?whBGwxEG#Jz|fw)i3waeQMV;G!C*c=2WL@yF(tLuV(0xa zf5wN_ar&yfv#a58VC*sh^g#4bOnvNy=%7beLr~4)Lq*zXq#2(Vm|YEab$IL%cUOZ) zipCI0Zut6VC*imso0bDUf;7G3fZmb@PVzFj=V_PlJ?J`F=s=Co8*aDW=HN{m1d@5$ zVnS|0(&Y$uPZnHDiqf`+K@l^>-E`89T9=)33+rU4GuAS>Iz9}rCkPDs@okW*SoODZTD zGi(8=Psqj0l3r505=<$GeKqY&e&&G=T{dmTx%woxxdiIzv>LZ!rb#Os47aqlm5)c2 zfI@Q)bQo!7>Lft*j%AVLJUC^JhS`xY>tr7XYvIKS`}Rk{+AZcLUQO7z+Eks@yC2*8 z!?W#&=e*n%Bv7qNA?mA{VSR}J**?U$5>OP>mSF!$EuopS(TrklKuaK|ul|EJ3op=y zSjlf*%}sO#0BrdY0H{AH+i-I0-UeO+$p2_3) zNzr`+Xe6HZzeEvh=pYC7v2x&$5_`x055!5!TaY7O+%chS@fnJ=cEcoT?Q(a=`!wAo z!y&VcO8Gj$(X(5S^i+lo%B+T?PP8?fZIlB$r0Bx{2S+TVXpK7=xFi)YQb`}D0xzZl zzecnA5g0-zAP_{ude2OHa)rR7-fnJh)y0IJ?oEJZICF;k`JSP__^ z{#5TNlcHaWx0}^rde0qFlzcMvo^mPrHxx@KPTG_gW6{{)4hPo3y28p3_*gwxmR5f` zNP5q<=#1Y$p;n4gw!C%QdlF>VCTx}_+z2Tww*i!qIOqThyVvKVbC~+l>Td>x*{!zX zKsS7US78P{CWRWP4dn44j}(Pr7FN)YQ&mHemRpI6z$g=k(9~&l^_5gFESBCb>7fIA z^~gsvB~-#1dE*UY+-3A37nPO~yvCVOy!7BLL~k|GWQpg+Gf@JNk+zW1f|VP5*zpI8 zG5B#SU1o=+_(edrER2PT`w-N7?vj>!QBLo6~5T*5=`=#i=MBo7_`dblL zsNSXbERv$MqUk-F6x}SMmq^tgqN2L<@Mg>~Tc9-?0v{WA831zafReXK*?z=02bdv@ z%v&cgVq};tp~4}s7~^mfvK`FZ1V#}`FaezhRT0LeI*^YIoMDbE91@G8Up_p?c^$m2 zBKdOsxr*I{qD!FKmAlsaRM))Nl}1|Z$`no$ z3uvT)Dp`mQY^Gl!N|7qk>5;i8qa;a9#>Ha1sg7*a6jakor1y$@jA0l*Jm43FxB(^Q z2s?{eagTV&XH|t3-%x6J{aU92UY;5M74*g*eq=YJReuR4p4nDVFQ6Y0=z$Lx%X*t~%sM4UW#A%>#^oE(BD7hX z_@9ad(GYq#5e@F8ggE!2bfUnEFkW5j?W%`f@`Uy`29=mG1hHwV$l^0N zhLJ>znIvS)&r|)Oyl$jtV!1_EgYe;JAHC`0AHaoLL=XZZ6uXmWLs&#sw>k{J&Ql8H z^FN^gsty&@<1}HZss(zMJ*Y4v1V#b|0!Bh41EjqO{8$EebDN@XNaOco--^YA=G`7tEmpu=5VLVM7TxJ@02yLEqZJS< zU9}&ZgizsALI+DC08V$KNYao*d%5L)5<P7Jwr4x$au2y>IE9kMm5uGrcnt-;YlpUL_)wPwvx5PC%%y;T%l!G zK4$+3)adYl5>bii$Ty)t#9!7M|E-j`lH%t|(M#wFmU|vO!DvU(6P$GzJ(oyPiJn;R z(($AfYPKM381%M?^@^8*R13NSP3k%1N{sOX@*zs{3Gh${q5ySp{C}h<9eX@A!$@Sn zNF;s(UXI>gpbal(nwXYgNK*XQh%RQ`i6`-#9M4=y3w9{3Ds72JMarRsmMWMlC%GdA z9b_?6ir50P>(l@6i_8~y%SV%u*^fQxwlw$Td`ar?bL=*DxqnP)7 z;v{WNeaZ6&BzOc1-x9=>SPUv9UxrxLJ=j2#Zno;14yf*6Lt7|TXO)}|q4u?LekPfE zNE-zn>me*-&e7Al3IW}PFLC*!g#G9JZZRhzxnZ_IQNl)fUI-4B>^KCr1?Kb za6bw`4*_LClK+Wnp>M~#4?g3UqqO0psl)*raZ#)OzW0~Js9WzO6$~TS@Q|NeC`A5B zJWcQ4mx6>^=_vDa2vMtw>8(K!o7PO>`=O-qg`+9!$B)3GMYRZX%WTSCwVp83cjn_% zTL<=6Q0``phGs-&yTWu-;t+5D6tfZC9uYx@u@QhbIPFUmwk3k00&6$Mt^%fP{Mb2U zGlNC=)I89p^Z6hL+MWQF3&;vVdK+kKde3`^?em-xw!Qzs)MKBa(Dw|XL#e4C<`-$e z`W;M-fPt()nh^C$aJDG09muner-IK1Q^!(CxseaRv5jow9neIOP36BGO!d$K1}rp0 zHTwEF7R;%0OdwBTFGdO-V6yZA(4ts+0XoZcihj9-J?t)F=Y-jVg(Z1=yJY9Q5*!L- z`*1o?s{RDf!}b$XT5$HMt>`N03E>SAzb%tZ?ui6Cq{m5KW|NOoSbq*-{ShbR*k4d6 z0L1}RqZ#fvXnXo45*t1x3%iFnicnus@t<7G3<%OeKDshfTxD#Lp_OvbwkE3MFu) zA`>1Ui_&4=bo#VQ;7O|vM6ci!GRA-s2topS_NF}?!_m9R$4eZ|ve`zaO0;xw#XkhV zG`)i`^1;G>AD)YpUIQOaJDp0Fij}q#yg`Y^G2ovNzJC-vev%r)G9WdPQ zk+-S7B@K1TY-g<_3R?jwK;Yb8j{(8HtrOVCwHW%58ILVfAJ7xN^ekq3 zjKzpf(;n3Kp47iOu5U||R_{+Y?nOn~t)dd2ajTw~sa~Te2CL(#-Sc!nkgXpXAXSrs zRj%&Q3ed)2<8qwI)W#LFZPM!R1{>$m+X(Ttf3Pu}vSlKhWDJ&8@6BA~EZAW<@tz3; zh~8Jb1^hTxx)P8Xjuf&%r+0#n$#uXUsPTPXh;0@~ySkcqir(nx%UT(jC{^E&=)SVv z3q)BEB+72$%b`*NpM*bPqYI6nVU$3xaHhzDEuqMAPhS={vJ5dUKo*u%HKik)r#}>M4(C|EXfn<(W}9IQ2(u5tjC_?CV9rY|_`jlM&_1zvjm>t>6gP=; ziheFsWAi-pGY)>}XT|Q%A^jThRAQXOe@MeEysuC5t;G@J_%u5oWk3yT>G1;-Yj=Z! z;ztSU@^0vR?%afsKB3bFZvy7*gbqsAW=X5(2Op8SBAq>1NjTJA?b$q;9d|W4+Ws9)Q{8{e zWRv}OcvWK+=#|{a?0httkVS{A+* z&c%Yw2UEI5Ykh)f(eJPCJ_1M??M^uL7u1))r4rT+AKkJrj+fmFfUDM18nGMv;mVf~ z;vfiMWti#D2_c^++}z-E{c5=3PUczBmpKY-S%v#_@`6d>2rO)|nxA)k3{;*2Yhj;w zl$4Cl#V#a4iecEQUecu~xthO(X@3MYzLcg8(p!8nIVZ6XuX>9eK}(CA&WBIJtiuLS zhE^MX!`pZp6xJa&6;K<4)e^zuvb za+0(;+juoz@KoZL?`%S-yj^KH=Hd^C2HJ7E3!GJUmqi?B{hNGWa%a4O>0Ue8?SFj2 z;~J*v136h$kNIt2p;|UtbF1JWcjshOq&H9X+dNdWWKMTWE5)g@m}F#=0Zi}kz)@`A z)Exb8Hys2{N*|WeSPU!;g@?vu#;J$(%j9=3uR*pAGHWNR)lZ;6EtCW6wc)&G7nU+J zR>*HhpxK5F*b<|_779#w8ZAEnRawCG!3NAa{R@O)2#(-iJWKu~cv8bjm;UvrX>9pH z(laXeb(PhIE_J^I#oXJ-TLt$H^Rb79@v*2G4V-MJ21wXRynNTq7>3G`yhgN|iR$?8M3A^*Vj=-x?M(}IkXe?Wbrs3cS@-;b%C=8q zQPC#|(fPsD3s|09mx1D4p?tSu5lw9*f1o_R1*bj`PaXOnJms1aTdI(Z1L3mc<8b^2 zyBwe29jXcC4-Abr)jLxeP(u-FP_GN@QA=tvQqd@bBWx(rLq&?@O4F`goJvHQ@l+-k zWrp{au?iePQ7SV&H88XRhG`U>AoEgTkT<;}Ai9$$**4%=DTjR`uv1#T4ll?RXp{cu zZ3OB3$BU-v*oRg-g(4Zmm$CUC7 zVfJYW`zq|%K!Q{dmU~GbkE#1^7GbE?>7Ot{iqa*ExED*!5=Se;=K6$zRE2i%irE6G zaM8#xc9eG9+@%c+>+91JE07*x9f^1GLgNi!3(%SoHsOJT1@=|ToMn&y4p-TrEQ^SEzH7S)%b2T|K zjDjRNC1p&y2B0;7(_6{9(9&SEq)NmOTn+?LH?%#Gz+4FOkAH*tX<#PxAv$Q`GtC%C zxDx1LhMc#b2tlguB+MU>q8v|ID1O3ud%7HzLZVCjlQ7J7!l~@2^RXNNTX80mWyelw zrDIazJGRcjcANTzv~m#i>rp$s0XffdUONe}4rE!x&-qCK{)*n7a z4L~N*kEYdN1}q&?>qsFAu|QIhe$=6TFLpfDl-F)#Cy~|taWQsYo zNw*G>7U=@*5C_($C298o^bmc8TjWJQrI1wpIx-ObO3^IQa=7Vk^SgYo5WUo$vzW@v4Lp|wSw}+u%-wE zqk;?g;6(VrKWXHTpA1Q%uVl8~xX1Lm7SO8g0`q4uuv=>ye^CTUYEGODF;(yRspbl? zy~gXHosq~)Ij(7?o7*3!cJ5h0cB zjj(Q7aU=1Ga}k|#h@Hlq-I&G^pIiS7D+I4Yg{b!zz4a1M{e&vMldP?1>t)o+8s#cT zS1=?!L${CQ@t;|xXNc0YRG(h@H&$ume#k)gTmuIO(SBFR2gi;fA=ZR75-E$iNeN+i zc}6c7e3YnK-((_vCraYT>iHra(04W=YGHa1)FJcc&0Db|d3RRWY}LM{PGpFivvB{G*3~GD3fd?W{)MZK z&~?y@^7~)Mr8fj|C09HCcc45T9REAKRsGoXJw|}mY4~G#JF1Hvoz^H>w_Vmd%!L*U7x-}Y&WCu61VZU-k?zzt|DUG z&g6fzVuZWMVxd4WUH^PdxQPh&l5%)TjeucMDenpE6OP-oJaGvW-+?&^zw+bI48oKX zpX?KNQpOx4<=A4A{cs^MhKE_^@#e`wNN=9(7P5M58s_|tZL zMm>HC)AbpL=UGYw)7y#=W^NkJ)#LupVq!ddXrBX51lrX=aj+Ll1{SJ~w85Fw6dLY^ z$EcbKvHP|y)+9?_nUqi9-!As_@F;?!yO$@Dryjhp=vslZxErO!{$tPP6b~To)QV1E z3$jOA{tQBa-0RS)q}L)0ug?hkBHVBsobaNX5sfVfZ9S&3&{xndK?Ws8n8)8hePH7? zz10fl-N(!MR_FwXDck|re~+Gmm7xY&gzV}d#63aO)?*Cj#l2O)odXHOfi~R8b3Tt) zO^oeLKfQ_jtR|A`4wdvFPtq9-4yUqbPC+MaI2@-x4q` z78OSd|1FD7;wDbM89e_7VZ9nv1C}6)pik%-_x@PcY|2`W`%x)diKBix3pKg<*Ev5@ z^H(?=0GQT7+>z@%KJ36zc|9oEC{A9fefUnoWe?dpE)xvnLZy5+JOjfl@^3ev2=s>8 z%zuNl=K6iWJq$16>T`HG+kwU8+9d8gTadi-?6wsBSfe{-su*x}SaSUFiowp+Cw4rI z!Nx&)8fX4zh*p+gHdvcq7zp0A}WiN zyDt3`y=^ZVubxT96@8sYY3Oj`8Y^sFD-smd`?|=9T)55k{V=Xei%v#05jM$PLUmq& z7c84DEh`ec*^OIajwgih4*J!^xuIdA(N}3ZqQw4}9_$*Ye#8w`sDQ)!yFVf->pA?& zj*TU3V<@ow(F?*2pE+^*_eErp=?a<#Tx~zw-ovsUpxmyX;@8oFoJ&8h8vk>AqkygX z2eN9J%{o1G{5Kw|8joErY+qJf6~*0IHU1a<;-VCHZPj?Ft9tWQQ{4Ef@$r6fk5k;a zRpX(Z=*{;8#hp<#{+AS&VYNYwmHmn!5S}csLBs@H*sT(BaK<7g5Rv!-Op(0me#i~? zhsHBspZMtiqFT+xf4dfA&vGyM3vqTj(>*f9=qF6XVGLN{Ht|q>mK!%hlxZEt+4 zUEKYvl(+B~Hc{~&c(Z@?3NnGD0Y>g;U`>^jQcz#LKe%$V^i)063XB^?vI%Dw*a6dP9X08& z!%Hg*C}k_ZH6%KI=II%b8jQkAyL!L&_h98opE>})1GPU;B?FtL!u6EAc?!CK5$lRt zG99@p0|PY|iW&z+JoMYdxB4$I$@wX z83?(Ou3WF2OxQ8e3s?Ya0dS+}JQYmh!5D-jAf%Dv1P;u`#7!8FWIJH~qMbxG;;1Vw zDChmiIpFl+g>+X&%d&M@skQ&JWF4W~)+atL=C+H!um-iqCw}txzV!-6(3)IZX)AAf z=iW-Bl^X{gDY1#?g4K|YADFdi4mzd?4VXgQIVcX7fCzYBP$|^ugf1{MZ z!9}x`axiiQ*B&goPKjsZ4DR*{7^pY$gU!fqtp+$n?dy30m^-U zBQAzJyYT^pTM!n<4hajTv=^hkTY6^(Mce7$F@Wq4WLXE%WgN-Ci3B;W`r(haS-Z^i zZW0{^Z(pxwHoIDphltuZ2j5YcO+0lCV)ULRQfO-|>kSH%+a}~(y5dFinqGK80%25M zOUI48XQDJt8Nlst3^rnplL(xrb*BRVp+h3LqjN6o$a%+O0JoJbfLj>UQz&}~V3R%_2VS;vp&Mu4 zVw_Cxb|k>yWh@G8RR^N?Qgws|%KN5>ryfYr@rVc&`c&MHT#u*LlYDmOH9`z2$F6iM zzgz&*Lp>fWDxQxD5;l~Ce;Qp24uI#z0MFM*wQm8!=%e@M%g}dKJXaa$SVnLeJu&nE2e}{cz>W=zi z2Gb?X=B?NW!LicjjIizMnKBEyOUg^(Y7}v7$2t`mvprnih!Z~^I_SU@x8j)Q?vfpn znu!~*9C}Bm@@&M>5-Gs-`K{E>Er|`kr?mibeF>8bF;Q{L0FMD;%UdBSvj=aG#iv2U zL8m#mjEg4dt))s#D^p^RVsKp#EeG@k(6$%ngqU|JmYKC_fWE*iVY?!+5>F^r4D20> z-2jv3u2B4bGZfgVO^0Y&T~2oME#fXiQ1w!x>ZL^0Gl63om16c`D0a~WsL>c{djDER znD>svE9NNlZXbnW-YmRD*sVAwRRy z!Kmj5u{qA}-$78a!BZK>??>+Fg!AA< zgIF%4=vQDp&FPyr12rCAdM4425VzAqF-(|dTq=Z2^~gksiLhdiSPKDes25t(8wExS zS_2JIl-xYo4K{3*F$VCmVkK_)8^Aru^fn_C_&@l89O#sy=ZHFQASdO|GZqC{btNz% z2Vl#@m0C9Bc#;k>p*-o&6;_OErl}ry>nB;(V$_$|Eedrmn`5Cs>FyFJz`7B+LZASy z0;i$i?nn{^m?vSJ&l%P15ZynMUw4KDAu(pGumS^(pokmD_kkkY)%$xp1VEq^Krd$# zrR}@X!hm|U)e(S$?qfdVQzydTEI-ho4eCXUk(KI|=nT+_?+l>|Xz=3GIzvU5Lfl*f zU9%FOo_zZ|-dIy&3vi>bZfH|Ofo|f~AftuZp_t}o?-F_8J|3*{4z|Pz7iU-yY1}v+ zs-b0O1qw&lqf2NQ$#^ya@3;m%Ub2wf1<(QP~D7Snrh z7LjHPh~F6sY{D(F#}edShppv9&>c|1DO!z!xff*^iUr ze>2~W7;@Vy$x#Zn@T%X?Vhw)Czz-StVf-#%N;z-c(~S+uxHgn%G`D?}nma|q^>%Oiv|jH-~C#^LovywVZbkC5);(~p`a zE|-~~yj*5ZzsqG7!ja1ZCoWttLsy1^4`7=2=j}n_?fKyC;P09O-i|)Gev3_;#oOH> zmi1@sJ%rJ(V0Q`Y4AJ%IiTGkW5z<5q1_1ZI31Nod!B+nFGr39nTwo1`+EjpBD#8ARM2p}-dwHC#<@IL6>fl|v>!u6m;=-3;|M$-xsn~(2^R}+Yycth z!IFz=l3cqLKoV;?M$-akm48ia4U@o4lVIsHViE)~2^36%QcMC*|4ATZzTP=7r*{qn zE!S8+8|8ax**d{Ra{%YOAW9M8Bk@`E8$m27QQ@3wdB(zdRuKNh*gX8etx6DP7Ozwz~8H9y0VC$Qi(If04awj5t zv=7kOsKkSiJ^I(TLa91RHiU|Q)uBS0l;g~hazYtFrK+J4?*QW)T;NDK>VkNWuuQAH zh}1X`|F6TPNRbQ=HI{?du!rJuD9%T5m<=C&l(?uY{{OwGgiA zp@*askd`H86_h>S?>}&`BJ6-+36`jS1BCBIq{c`LkfJBj`VEp8AjCO)2Pri`rF{dW zCqUIS&@d?3`vwSHhXx26^WG-@kK+@{=pjsWqG1{!=(S;o!T)04#dT0zJH@pD zE-^wheAi(hBNk-V0J#x4d{!Wbzh(t| z{7+V39RIBq$mhQhfk8ZGMFe@J6;SwMD^SYsw*qDSE-NsH&$a^d`3x&i$gi;i3%P6s zmheImV1zS%p%o^!$$eIM1%VwwZlmy9R=AzQFInLZ3O{d!IfYkP;Z6!it#A*8msnv^PVfa*n6Ag*bF454 zY<#8_&Y`ekg?$vBV1>s~INu8AQ`m2X3n`pqg@Y8%w89F7ZC1FH!r%S^c%W?}WCe`1 zI;n4*2jY8stFUFom4{m?7n_D_aI)U8V&1W0Jc#*=74u4OO@d}DwjO3^Crr z_vi3+Ho@MZIvgPG>Nn7YCLx*MNwtp#MvND+O8*Oslemus*J-trL%?7FL_a$;ACj*o z@P-k1XHcRmR5Q@vy?_q;FM!?xV`mCbXb<2a01@BRa&Sp@82ZSXw6M7j&|Qdy&93b; zaK+gv@iFw7KAozC536;1|%=oa?Ono^Go(_M4g|iRtRtuMMjUC_h>qX{1LeF5}a%iea<6l75 zMzneAU*CF)#XiC|(i%Uq);_5=dmz5>HVb2iI&W0E8`1%c_VtP|zJg$V&Fq?Z_P}{n zpPSOWs-r#9;!UuFLeYY0uugj~yt?mGX!uA}C#VX`e8IYKb)(vBNXp21MQ=A7@$EQT z#iKja^PuV;qcrUEAUqP`Vac$B@E|MN8ST;-N~8)~{pbfjK5^5%OL>_9g+#KVmNa;% z?)I0`u|CzM0P5=iZW+d62kWUjf={1y?+D{tZDZb7Av2Wrpxkw68sAqFAQd5eNiuv6 zfoDZ$0Hjq=+}dG;#qUY+dqVsk7r)2E?@{r4MEv%EbM*h~2Y((pj<_pE(-33>e*1W5 zhIS!F01^=5wErZRW^ELxOqHzkOe zW3}GDa|rkKkAT)JBI_Fi>gyPk0dM#+~niS1_b{e5=??-4jnghDRr|0?z z?jd}EuG5S-Fr0$i8t@6gepK^+r?na?h8_ss6NE4f;oHZXYKgaFTZvD5z#=N{Se*pt zxSPh>Dq-(}he>jqnV;Ndf)NJAdAL*R!5zO#|3B7*bBIOH^y)#OJ%mYX93uFWWYPkX zAyeU?GpQGZ&a&TCP1v_&Wl>q^Hw#VgXt+*5NlSYLW5mQ^WPuzcERLpEDkkmGZrW@3 ztnZ*&-_OE(-@e^PjgwYnso4L5jVV$wox6A$wp3!$&^zFa-Kw)OBl$&pQf6oNCZRAZ zicHXf(Pva!L$uxM1n}C0MXqvKt6_$M24pz6B>ItMyvnbAg&a~csiw)jLDJ=)!4E_5 z;urTuT86)T+Taw@Vn+M=Q}rt>o}D#mPl%B*AYWB|Db z3!|m^t=_GWhME9|ror^??}Pb)BG(%@{;8G{%y$7Azzny_V;v9C?dg05!T0l*Q}BNu zKK>vQp%TJ(lO|z9*}{k89d|x|$jed*?^y{pkwD#Elf0u$SY+eZ=~w|AOhyI#GSms} z5neB(*D=%tX%W{;kCU{B&2l*JcqIM+X5$IB^mr6;q!$WYC`L9M*sy4(xZM`ZgCb38 zQygvNA25XS?EE{qUqWf1jUZPid_V%i&PNqfC~XbWNS#omG~g1Q_*p$Eacs)7*Tql~f~={!P{KAi6;sV_`}FQ7B}3DJ2Y~EQOX24nIHwJe}?6Za1+k zkav#2k7Xx`=T1YX-pdf39mEGG8`W{!p?<)w8Nw=(qBmlKxaNJ8^`S4f>L3nOu1tUz zAZ{rrqVIcYnX3n-!DqSXx*S+n4>xX(l*<#a&eJ!39S!ie4QAsSiLwFsW{@qX7#hU0 z*>#z?9ljz1?A);qx4&0NGD%hqa;g0Aa7+KbF)F${EX2!wT8%##K(3W?hwGy}zWXSOn2R{g2u^DE0H%=Fq{4Zv? ze$0)pU>qBy4$+S})yxQH2-N*>@HH-tu(h=9BULci>0c>~ZxFe)Ged0UKM-zyf_|6d zzX2C+6rsc-mX(EGvF*^O<};TIVMhx&>e~Q~>*W)bB$| z!TthVivWef=kTC}0XkTW6^x7%dj}vN){~3*N=%+}3i*>Xhko!t-G}uS@x6s25q6BO z(~P@3E5O>|UM}l!eClgu?r3sks z^)x_n*AvKDbW=6~0dHGLdaBX%W?W@e_Ggp=V}hG&mlXXqUQF-ai8yV#)E|M10mO>3 z;_CfUbTLwhGRnkZBg$N@i#dRc7-|OQ5V~)J+**Nm%1fNN9hV?@V*M|xsLqV#(?Pc-n6}j*xbQ(Ta8Z+#JXsY*l9`dY z(?!=`Fv?AIof$5YNurA>mfMxbACF^8^Mb1ELg$8O$zLOmn=PGqQIdPdk2*6pU4Z>y$9J@Q3uOEh z6O_=f9v=|=FQG|Mp?zDEV=GBDsUF9BIfCRI!|;r6p$gNff?QUVuiK#YJLQy| z#EFhB^kvzngO<;w|Gm*1Qrr;#GO?T`<_@Kfv~e;{SbGi0r)@L>|hyD?ooK4kF+0@tAzUb4`i=?SfNYA9|3{>u1i3cGQGkjY+QX z*!vRl2ALSMO@X|B8?$bJ#a{PFmr?E?zhB0=U&i-5P|ZqCPQ2Yco~MmpJc@QiSJ&91 zel=+4>OyHzJ(ZI?e7lCIx9oYkIa#`yN1++3Q*Z5_2E3l}9MVa4@{S!@(D4J}SfG0H z4zK!ohXcOoJn2rH&fE7x{*h1Y)-pf1xwdjmqG02v1V|S8>!PWuAi`1zG2x!|J-!L~p#kpt>De5tn?R`5dXEgp z5fGF07S;wA*XrRv{u9~r-JrjPaZIEZit*>Mn|lRa;He(8Hkpx`n4AVM|h$;dEgs_b(JX}sMoN2;FH_j7R?A;WsK zDt!Z7k3Tl1>64-uN_n;tV#)ID!#58Nfyn&L1S07dz`zYRWa)jd|T(IyVh{@C^ zG{)*ZeS;DG!RoO-o^02#<0kevW7FjxU6LO5aL;RKJYGwg4PeVUGd@072u=?6rcM>Y z750nuL5B5jXa^v;ycJ-M*Xe_2*OC`Uw#HaDbOqQS%N}L#c(e;Yi!^F@Qo0vkRwfDq za@IbVerZGLg|9zP)>$Ka~6q3Bo_OUMu~0x9-Ot1pXf0CnNB)tpf6c;!f+%Run*bV6=P(gA{`4xB-Ms z0b%;opiSX}x+wg+d_rLAJBC;X*kZRUXtiTq4;P>h-ZTlWA@Z+SFKKVzK3lnYsyiDVt#BgJT+hM7H`8dG2RPOK3qf3-3eDNGBdtFNDtvG zsMR7aDS~8W!=GmmUJef~%-geUpf~TiQ0)4%U>@$3CgF-}=-U`8z8PLZ+D)M$M zEA-}lB&Q`mS;lEeBwM1~lZ|4s^#;lZ_UUu$0M-b%p`p2oN+=8A=<7@})7MK~<<=^u zcgbrec`cuAHIYVdbeve(x8OH*X3j=0P3xJVz6Ot_RNn98tsq&?nTUVU#K zig>WVVwzX$AJD+fl~S?@&lQ|-PRed+bfwN1K(hq4zcb@N4&!Q1XvhV2I_FxaRD&|_ zK;(8C^TI@i*3p}sYmZ1FC*mi5FZg-tu2VKJzPo|f_pP_QE-rLwlauu(iv_Tki{wUh zwz)t*pDy(}dT^lfJT;BvR;P#S-Ex=LYy0xIW#Y53HfDX@J@Pi!L0sPTb=wOXe}!IA z-A?z8)Q)~2!SA`1H@^zAORO2E)8u`j^zPo!Bh;D%bM1Wm&(1)`k-aLv9|sjzugES@ z6c~ytNcxa_MfI&nJ1L;WJ!b#o!1}xwLM7v$3r&MSCs_yYlnH@Xm8=J`^&wAP2Gjn3 zPzpLae`BfTVMfWyKfKowa!{h8#CP0Jk!yYjs(&A|l4!%>enJLyLwhQc8~%)uKUwm} z*>EgB9P#9R%oR{~?&5yc$bRnJjQpx2G4fnTY~+Q=-p9#O^fkR>o(^3yL$-=Txib{m zg}yRF!B>P%o1x-uR|4RS8H!4U26FG@@b-z2fjjbcN7~N`;&$hs6A@iWcf&aqzTT6JA};#Urhwxl9k=ZT0Sr1*_4$wRAY`%MT4f74)59{CO|6;ThgAC!N%b zthhi{!cgYJkGQUo+!y)I@QwjEQbRg$gbuWPtUcGq$p>nbRn2z1jp~`$_9>wOy{8{h z?M>9!8?i6{_3%|f#JM3`m>TH<#sYT;qPHY@j@u_lQP>y>S51%@u<7#2bgmT{&SRJs zF7zC;3l-0qTJoLWcqnwiiMdkeBZ!~KTIWmtcBTnEGY#i?%LZ^VG#>#_?>Tl>#Ir}q zXY|v~j6aNL9kAc}2^;NJ1%D#B?Y{!~`YZk9*+RPEB0Ha>$cRpz&v$h`2*6AAmOU&x z`qB6y5Bjl{g5N$Rd{f7F-6-xSy6c~hJ_Uu&v~n%U zv|;oH%(Qee_y2s0)26u%L=P2Hmv14MY;R}I;Ef#Q9r?DjB7Ysi0qgrLj6h5#TTc1I zcodX-V>~3816`0;Xcr~O*&XXQS+>V^-3VO^(Y}66#{1g$!>N!<$(UW?MCar04(x~> za452O%q~usu6U)-w8pFOxOI2xS*YXm$K(<^$pZ2j zDHcDL}O^=(Q;#~UxE@*Bn&2AxIt^;q(#!IaAp%ntyRR1PET>f#( zDv6x;_OgKupTsZAZTJLYf%X*B?uY{x#S_SrOcV0_x}AU9(Uk5 z!cRTx8g)h5Unhx^rwu*4D1*3v7@f0g7Zl!jyO}B1XQF5PM=CQzsudoitKg0tu+Fgi z(Ajv5??V)c?LtJ+TE^QkI`Z<~TXqB3aNcs9DuEH_H~*@u4Rz7Fmp|04b2k3o_S6K? zBA!BSx$Sq8zo12G?|wqs2%(kjAu;3@@9~V^W6l1+w7HtNah50VtyRA@LbI{~`L{lx z+iDMi{Q9?6MPF#>9tQc2Do3ujjC*~1U56hj+ykA|m#5{f+GVA-wDog%(sJ{2kxzw3 z=?}#4Qw*&_hr`vASRjobQgL@9YWUy5A`1$}{ex%H7*-4?PF#$(aov*_&6jI{p+8h* zXCeO6s6j2aNHW-O4Y`d~RM~JjJt2G(bATMR*Uh`QzC6?MDc$-c({KC5e*>-3%wOtT z|Bvxd1-Jf33ZG+&jZYFj`JU|kQoq%^>!rNw?A@m*U(6divNkL(h_te40|%BbE6K>i z*%Fy6E1Y+=z*>#7F4>4YdoPQ_TTszrT zlJVJ)B^A3ox$YyoRzWp8amq55!pB4ARqBm^3mp zPbxLUxg)WHb3l!Sj*-r_SCOWDH;vBEofwXfyxcL<_f-sNt;o9~HIU5T zLCX^>;;u;V$i_Y-a2kIzmuKQLtYeV#(Wei493xXh+;exQL+hGT1VT+VpbDgv&}C9? zd}L3@wbUj*cLH}0;kZI7;@;IpQF|*q16nHFk(LTio?92_)&;uLJH}V!xrYSC@;7t& z=@oJAVcgg0e6+=fZ^@)Lhsx7%;tUBg*zdt2uJ$>-8lz z|C9^=)T@i9{Eq6#y3g+7hu5E~i$7+^v8%4#)MIzCET)CKc*?zsg zL3J9KjXZ}(=E(5X6_M7COQm-~`g0vAx_jSrR1DZp4?A}Z0r^B6HWC#o-AONZ4D0Ts zmnD9pkOQ2mc?+FsQQCHB}_^Dv22Z^`8gU5dg--j&zD`E)h_9+2NuRA2A6}@7Ecg(JZyYEpJ%@BQ&binZ&oCzYCWyedAGSKm@iPS!0lP4@n*7!;l(8XqF5?B-V) zQGNzg9g5tGT<++5UfuV>%%)@`Z2W2@^p?Gw-mqdyvIA=Y_KrX4M2#&pnY)t=izmc3R?ta5Af0n$F8hM+YF?oP6**ah9!65}M zH*0@}+2XMQ3}dUmG(@W@WFttQOK}aI`Ob~sBSK*rciy44B3oR-dPzw+Y`q@!>Zgf$ zMa$VBqM5@p9h|BbErW({fS)|O+1n{@llE|--eT}`(QCR613X-b!bq>Fe}H>PksuS+NV@CGiU8&5rVZjDTM+-iC-Jhcy34w#FwTnX+trrfVHGH>UPl)Dg9~(fBtsg06`8cV7>ot1NY{R! zw&-hm1t%9tkce^g3&)UYU-annNaLRl#@3{%wnR)Dq=5!ycoXBUKX%x zTij01aZltuiEZ~?5iA$m=R!t{^r38_Ad$l7+eC;8E`dBU5WxEUnd?_r{a~lVwNzIZ$q^e>fXA=9Y%!5 zElEg3GCD3K*FDuz+zX+})=zJy7@~~h0u-8oP2b;a!UtKmn{ZfpdEZt(?kTGXwU(Ix zPQO0K9hS3XrA7>`=tQ^s<#SM{d)&Ur?pm!M$xP~MI2OAyrQujyct|86eGzz=6iG-1 zu1`r6*BI;3)zs;P2~*bR*6|-OgGc8}d;MYVx62pxLw(*6PUaYw5nBF5fUYnhJOE48NS30gLDGJR88R4nr$Qk~uTeA^-~+7HKzIN+J~ z0K=0tu*e`I2`?6bTTy4BWa$r=`!SZ<>hbtgrFg~W3`p-Vdw5KE`aMvzG+0zyTVti4 zS>el;-*>JP1jyqA`Sa#R2MEXFSHCTcgncqTlCVS^=d6~RFj)X)G_zIWTaC0WJ>Nl;IcmO; zH3NHE)6H?-%S6F*&5NC#8|z{^zQbkgZ~|J;!f8e37-Y^&G@ThaR5Eguk-oMT{3GK( zpBh>Z9*|zwlss^sl2e(?sHt@DZ>5Oe6qad;{If+Imc0F^GIk3%e{R23+m-!7$^J!T zJOzk|1x?S;rlPzfAr7Gn@22&($An8 z`zSwsm2^^j0$&e$B9=yM%OJTDMR z@Z>!cde$@k8F)-NtZ-7^F}j!2E@wX)4``Coe5Cc=h13wGyBXFdnSo9|O}xxzBg5FM z)yDfW33?1M5j^Q-o`Er3{)o&7ISqB`$cxyqvENCtMiOS{ag_|rC{xr?=-g2Rfpep@ zH30=M=Z=Be0m*glu}0tnJ0RMtAqVsp&y4^tj6c{_m+pMnTVm2NU&y{JmYz!*W^7zU z!^3XTsXo)%vf`A@{WJTLngQwAJVlmgSeKnT z%WspV-q0L`S1fn`y`EmyKw=gDdCz}wjz z6tb#cCMW15=`lTne;w!HgzJbF8@f)uUh-k@%-EVizQQHSvp<_9@%uj^9rAa{SMKVk z8%2#I2Vq1Gk@LmJ<=xn5WbzEe&Wsr*7skO?u-aF)Em*6M1qn`JWD_QNDaoFni+Lw} z0cBMn*T@f5(9A;Wh4%fY;bd!<$gCqN(`+9El#db9rZSn`1kC$ePJr3Z)V3;PT5vEX?;nPz)v!AUDSGeXiZ z-c=w2x%McO)2AX{q%wS0hy|txS3uAC9clX#j?EWoGauD=AP>objYj#voO`7vh9y1L zVOoKti-$iHeNg`8&>$FjUhCrZ($n<@YK82lo|JBN{|T3Wc!AC3=g2N8Z#2u^qp;WO z<4(r8>k2+7?7ALQZ$5_%evf_kyi_>H6Im~}nz~_ASLV3$-d{03G7Fgrxgv;Tygp7x z*$1{+5P+*p5UvvIM>FIbH}~Rp&~zN zl+oB*W(Lpa(q{!Ux6J!OQ+QF`!~Jk9hf9Ai2(?6v8Y;#wR$k_{zKXB*;@r{ixOCjh zWumw3qSl=m$>4xZK$aXE=d*O*70oEUvOK~X_Cz=ij<7FJ|Vq>A6! zjdV7afIvL1I3%cJq3U|oz*9`w*LhmSd# z${Lu8T@IcjN69wqU_X$u&GJ&zV1|>fgHN7OgIQ4qLQbLv(~AXf=yBerunaZSkp(2< zOqrXbWwXo+x~Mxod-1KFnA}U8I~K+`Vq4s+|45H1kMqe^_lqBM3O}Firv*TKLvkvg znISYzAX`r^fowW?FRm|)an!?0KZ_(@<*vr9a$`Dj`uMNW{;?gI#ENmO>PU@-Qwe-> z>p5Hz?zdCQ>TtS`yf(aLtZGpzK`J4H<`BI#Sug8P+upF?wLH70;N3`c2f(cBYot4p zA_;#jr5|IU481l!)%X!svbfM({ovhS5P7pGVp)qJAC&b&@kQ&yXzd>kf5p1|)WzNj z%dbD$?d=e00axV75-N7Zv;56owa0zy1bNFbht>ARYh&CEJ7tcESvgGeU-ELGK0#!C zHz>oFcpZagMe2p$kT4FmaqWkLiQ18WtGtlV@g!Rkn-rlu&j(lVd~65$!=H=~C)(i@ z?_4*R)D+J3va@Vkw)6Ijun`y@ColSi9PTINtJ{%VpH~-3sn1&=J`V9Y!~FzQ$U9bK zkQ&aE*x^AEiwpP`gsH_+u8iQq`p71!mY4?#2QOT6*a$qKYw)=2PJUZ#lC!cF* z&*>QEKGGtpB%!l67W_~=r)MpXX(DE z@R_L9jIr(lvHR3$d?g+S6<+A?2$K4wglVP zaatEi$TnG@Z3Fw9LowIcAT?P!jJgGaXzk`{l(AkK5FgDb!S~ z86PAqm)#(f8NnhpSR?&JztnNG2s%o|M~>Aycf{vvAv%q-*8?MN9;Z|IfTmnowh6(@S}qQ#nPu79id>N{tB7K2 z;-gX(XX9i@qJfhKJM07@#O@oig{@+HWWcVjcCuB~wP|6iAc1Z_cXKzqjo`AJYxwvx z4#j3&+QyW0moRtFJWfXW9(#$kg>NAun%S2F8g_f(OXLhzB;^9_!I~>s7KWk3&Ws<+ zB0rLnc|yQ#63`%L+&afTjlFa1ZvA(quuDCD-RE~H1LO z;$Qm;BO}JjxGl>2b#O?9d-WgGp`wl7Q+)s2d*j46e27avvPB=wL9waOW4;KCb67mU z>J?k3&DCU=!}F^>{1;h?C-u*_-ksAczDwuByHYPk9MoAweOTr$L&$(54^N9g^ zS>ZiNfKD;7E5P7H*G}iC6FR%Xy90!jtizgL+1;}a4L`3ZM8RFiOlKW9F^0FSh^*mZ zGKO9&{g(bq>sq^=}^s%gJEMGplpqby`rvitw*Tdg;)HoBgPUFqgdljb5E3VO-~ARahtS zF19Z3?VYc4%2%Na8*cWXz~znHCHV7}ab`EVVJ!Df_7L^z4P$v^Ovj8QS;zmPOUmy_ z36Qz6=G!&vi5Hs>ys#_agbvrD{?od`$>#s7-_Z~4<|KY(LzjV54V-OYg@JVj-f7_d z20mfnK?C15@VJ4=hwc2c4V-3Rp@B;b3>mn=zDf;z+V}7(7+E2Ogd)pY2Y*iOAM?raHWBF8u*}rPa62Vfo%qUU|>AUZTX#T;4}kg z8+et0RR-1@c!z;a25vX-2?Kv+;2#Y9z`)qQ+2wuKUv!}KS9`+*8*bld!@8w5?3@0H zJ+{AP()A5Lsr#3u#o{lEi9(F1duG2PK75QbVs!a!2FAq3#U~{8bM#Ldkeo8mnVL3e zaC*j&p_y63hL0F|+Uc%QqsL^AJ>$%AXMJV-+2>4{m@{eel&R;QcYf{#)AFXzxbUKU z_r)_k1(#gvoi+Qbg+-TLUVO!zxg{t9FSzoms~28#?RASv7nha$Dz0Br`Sqn$)it&L z8v?;lc-iv08*lo?iknxiQZs7<1$C97;y`VgFBnv+S_M^^s#O8y#!B=t)&^i7GKRHNK#rAVGfT<|vJXajx9r1^pcA{G6Qm#r>3W zx#T;h9E+AL;-^%dzmA`S7--=-8~_LZ#HoK}WkEHs1zmmes=gzf#wb$HPmtES!sXUh#xo2J0?K9`RoGDXN zlH4_}Qop~dvaB>zSzF^;QW|tsmzMinrTB+JzG{ES6{>Yr)s~jKLQ8zEnXYL0Rh5ea zrGXn=l{ICxfq<_pRCVKoq~a=HY0&2?tE~x@mXVSaJ#s%Y=n97Y{@MT`zS3$}1r4aK z4fx0dYqhSyglK!Dep6DC&T+ZBs}UyeqPepQDS#?g1Zt}(qB7_z4F-MHi>q#Qm4^eB zHP^dp$ZDBXgIJX{m7&Vgs>+*m_DLlYzp|!W8tfybYjOB`+^!pI!-1Z4o#2`kauKz< zHW+eMRW9|ByEG@@3x=yguG$J$S!q?36b7cGPUn=>R{JZfeC4ij6U(XsXSpiEHDwy7 zx}K%om8uDb0^za{jpx4(^i)+9l~&g1woAJwOS@}oLoQ!UZTR{nuAslPjP??}s+MAV zA*?69CiTHrSKEDd=gldx@f})1rE6=-d=oxDK6;juBjwB_H>qQHA>|T>`cKZ4@NiA( zVyX)DbjNTl@s;}RoFv})f2WAVfGZ?T?5fwK3nX24yKDWv8W{`0TJTWrTUJ?S;>viX zoJj^xzB)hS2g(ubbdOMpWyjNa3RAL)R}BePhL!|;j7lhCY0os0@2T-)5|x*RO6_Xf zh444UCWRiuRZj*1-wk13P%0KsIFw7L5xBJG7Q2s;h-ROdFelKDxf_% z8m}iE555|DvbLt$R}(Vrk@y;~CyiekxIQeAgI%qc_KSeYeHQ!m1HB+ zpHEXaEL>$-pf*@r5psR4Qnz;I`0-tMDYPd=L243XVZww7YPvsAdwqb}uBMb(J6yB0 zrgnMFh4iaIWr57&qmq*NFiEs&E=kN!_y<{1M}Mdvw8Tdp!0+^NZ^Rw_mPoYQ`nYfJ z2-Ssc};^Jq)Xb%cp6Vv@KHs5!3qQ9umXN>?UDV=}O62;YRPc;`WepY*<;eF$OzSeffN>$x<+om5o>KX_2tJgF% zuD#`(>(<{I*|71p+c$mdj&I+2*LVJ9^WES5-aX&{!4I3ZG;h84NB{ccZTH>(lL!9K zgFoH=Zx8+K;YW5ny7RHe|NV)dKlxP4uBU&od(Yl|`=9ycv%h-o`4?JWeCgK*UVi1( zgTHz0x3B;1_iwbl`G-IL>8(Hi#cKa+$J_6```)4VKlqOiKRSHm=&_IgcAQ;J^^Y=K zr)H==7sK^m-TwdT^8aD{e-^`g>Tu2Q{#Uo(>z!6zJxw@m`&Z8IY*!IKmsoD(rvr+L zCYF~^v>nAo?2KXL=kb-n)A<6nOR39hm-TXA4hJQ{bA5i;R6C+Oe0?|=;+~FhmCk%N zYi3FB_6I73w=XIUlr1qCUgBFE2*bb{r9Q0OTvL*mrJSnzVaGh504U-)e>A(Tccym4I5Y*l6)k+q*26^ zIEwISRW(ekufL^!bv*)!xLfLPSyP{$kbp#D?b@|09CLE&i|f}ZhZ=WgZt?tjY7mN*>!>iquYe*X#bh)aD@S;>6Z<=W+QLz)Rw_|FUa0+%oT zIy}p)ZpPhBp7JBSurwHQ!}~7t71#R1{w{yp&(2O2A%!Wu-gj|rot<*t+=4k%CQtAb ziXe#}?WNhY9wdMZPy(j$2j`%k9-t%W54wfkp_AwI%Dk zy$`{GaHm@SfuzEufFJSI>G9Azeg*yO8ZBX?1w+8Hux4yE%c3*yl|L+^Pg0Bxj)qIB zsHm)yIDy4>%WT0WNh4RS;!jsi`hG%19#Jp!DDp-{Ml*g=odD>Iw1B z9CIe3DOWI5iX4g7^+|DJ{848jI;pCvU9Ry(>XQ}It6qx{TN&8}VgW=hpdIl}bt%o3 zin*$N$gS+DV{8yg;=i^&y*Pa%cd=qF%w+)H8|!Q z7sBev;0Z3ATUqU|@)a7ATv%Qi3@r?uH+6!)+#u6N=}G^_B*m(v$%#2JiLokia%@ga zYMe@aI@v!UN2#<7hsp@0sEqPtl`(aI$_S*j+&j;f)6RgAybj~vYiC=Iy{?BlCOt`| zPfb(lb5aitY)fuUYH|4cElMm-%SuvNy9cPO5U{+z%9`p>S#vU4C0}XdN|#dqf>~$s zO&gJ*Ml8;38RE}alun(Z@#;pgUpu-xp059#*y1#2ymC(MubguR_@i+z8iUd;rpe^l zKPg@%5hrO*Vpp8=vz7WaW+!n3#w5q8jo1FJ6y@5TrCgy*Z|1!p+u6e z)Pg83G;JnRKJ-~mJ?3N_8r+uFD)<(>e2+H1iMh$dUyS`z%>B`_^>|^-l=ox2B&v+b zX)X2`>gA{Nle+)WqtuuJF2;v;Y2(lmAbm1)@?d{VrbA_di%f8lNuHUL)BRaz z4IsQ+4UM@<^&VX|ZSIc+kNx9R|ClFKEMvy*mw_tjp+tX-E1CXCQ?8O!`edMT1x6ei z)|S~iq$S-SGbBk3DH*7SOiflp<_tQN+B&d>nP5?x?r+8vxbHcxzH$|~ySf|qG)cwu zi&gz%zDGaOhs`$roGmH-S0VMny2*B z0p>I2pbXlSF(<7pCf%XZ>GSlG{>)q0=cM{$MkcF~(85UkN8&#c|B;ik+J?4fwAl3; z08WxLPHehOfo`Cm66gp2tN`(%V}dy%>ztH=(?jXBe=zkNqz2C%_)yXzM_XcRd`oPx z-FFMR+MGt-jIoyn__HRZoI56zs!oTNhtp?6rwj@VJe1s))aqzSH0fkMvFpT`B#s`J z17p>|$w~IyK8Lwo=8u4ZlVgkf^Ne`>;_k6{D1tHr<_+jkpq`(4&eN0a-ippYLl6$W ziit6J)%h_VqT#P1EKJ(OVv%rxeZ$Yf?;MQuyTG)eNzi{PxN)kXfx(B;+MKN^E#33@ zafFMv-@!WEl$SM;zL|PM+{l=UxRZ?oxjgo>=q>Ymd>b%PdP_@7RB6yq+8il4X;HK- zqIA&Cm8Z|Xbjrw5Nq0F`+ zt?4a;{Ar6)i%owO>+cM7m2^k;5M zzcDUD%&p8(W^V18kCt!e+l%?V${vA{=9{{Wu6V*z5>(36 z9F-C?K_$|ltjT;ILvxvn=P(yv!CYL-_pwmfC7E``l1}o!7(VL*8fku4i7rNK)YTh) zsb6B_<4gS#8xQ|o^h-{U>8UocGJdYFC)W>mY)b;v-WWLlnPF4`YNCPz!bh@FYTFO4PNxuJ3|3||#% z8i%+=s-ZXQI0PbC=uvq)UO;6@yrSCjaFy>87~ad+@gujlmB&a2d?v#=YGze!FzWhh z!JNwq3Xy%3S0SW&HP*{6@Ff8s<$jSA6MurUFJK%|M~cm z=&o!RHvSMluZHb@+EHFmSB9{R9H<=GD)lpI$0>tj<7NdtKJ+85_XUd4dyoz~BYsY( z>TCAq`Mer9>T;z{7r(;V+NELtB}V6gY72XuDIqgU{Yc29uh}yXsXE=m#nKn5M(pmH zdaBWhC&_c#c_Zox)g|aexq}+h*wi_3g)@sv{dQXz zgA;qYDY;sw)Gd{sA%?%V4{?&jr%)^0*qy}*fLT#(qP{)mt|_1EudK1F`9X(3CJRI_eLo)8B^oliKl}e5UHRYFANC`?^A^0%J zmpQ8U`sM$3SIbyipE26bsJqv$Uurb;)R3j2=9^9(qj!kJ7xU%sOALI8f&V-PVocJ> z&2OA@_jskAyTR+k-o!r#@O+FtnvKJq!^yG{HZ#DAgrPtC*BTg_H8!u~$LuKZVS z(J8J-V1@VEwXeClSOby?p6{;R_U4}TXIgHK+6*XuTZx3}3a=MOflPqX9an080=j=H0CNw@U+wn@Ap znCN;E^3ZlfocgkKx?f-FkO=IL>4!XY2^)ZkhDp9D7=ccVlp&Lv_@!YG z|7s)tqcGxsE=JsL;}-f6cQHoN%)v;!xdy_J>HMz*O4*1?ba*w;h4EuXU=VBQx=K5w zKJ^%>^J)Xv0HrMr7zuC0NIBoaoQ3&;ac==ieeT6bc|XQTyhkxozvnR${whYoGeL^r zM~vXbOzPO|pY(_P>ZLOO#9v#!O&8HDW13E3h`JM{K_W8w`U$osaw&i#5H#T1MM;`Y!L6uC>+<^JHa`DZu$~2i>5i_| zBwYMuEazcR<54mW{{{01<^bkDFljV22O}>)R!gJ#Mbk~gE^DaenD1a7#{3%d0Vb8W z6EQ`YDw9su_wtLvb8L;y3I6DSC*A*w9}{{d#(E#z0AIx%#C{NX9FqeA1%ArJeiVPj zg#M!p)`IwN13rY2IER3Dv+&$(DRmEU*ifZbyvy1ZcqL{N{tJQM$4DG`%jC}(v2!+G zIr$JsKB>T3jQIP3-#7Lq;9-o!ISM?T4~5v}p4hiBO~fzf<8U`RpATT)225~~H+Bbb z7e=+C&joxF^8{`A6Yxqt06F+C1ipoN{ja0}UONW97ym`TBiXE{u^$B{jkU{727c`f z%E5mD@UNH!ho}qig>g!4$G;W0;Vf>}!7gybR}4;o-##0h;eRKPy9`t^gk`vMMN0E$$sFB$+VmJ3xTUK62B36-W2@s&jmh#+5esm+ptSoff?u07sSZ~ z-i;Cedw@SW58U8?2$*`lou`Jzo&#Klk@$7M-IxQ!7Z}X7@fHG>GJq}o%Ym&J!HK}R z)A{ywaDD*z8)JVRxB*?sT>J$-hLQZA0DffbM}Y$`wEf2cuf{AQ{zBkg7-{2X;H4MY zb}#Uyd}x_C$!_X~kvv1dcQAs_L%{Pdw*7N~XU_x&#Lopjjd>mWZs4UJyZ(!S-U8C$ zFK`1!$`zP(DgF9323UrXvdV#vU~=%^2|Ukh=aUN@IhQja_>Th?G1V@?UJQI0v-usy z9dP|T>WlvdU^7N&RrJ0J=EL{l?**n_MV+w=3||esVBaJV(}w*+;APiP2l6ZizEDoT z;NJ?oxI%#p>H)k7Bl)iY4!+)wKVk{Nn0(?K0*o78>2~4@g_D==gjR_Iw9^eh%wCy3_TgILlVILGD zbK@f5kBxmh@DCWFpSOXdHqigX$p*fL5xRXH_|uKHeLL_2jKu#Cct(i@(dRJoa+nUEc#A*f#@z zau4$@_6LCO@7wu%fZzB5a{~S=fG=RAZmqzJerVI!0^pJ@Gz z@S*#`KlX=#f5u203;5Cl(23vyc=3a_y%6{}u@nC|aNAGm3+w{V-fpKA_!4FX{>Oot zKcnv01tvcNzOf5jh>@}czKW6W;M>59c2H;R`M^CpsVDaA$B^|rZr33f_-%}&y%YGF zv0K3P|4usmHvpTSVC-TSnD(Tdb_DR@r>Haj0%y0_{aXkewhJ8MKLU6)M%NAa`(Ka; z{%ye2-L}8L`aR5B_zV1ZOe=Qozfngp(!Z{~&^9I)e>o>1XBrl?+fdFTh+UwZIS{)* zIXBSwt_?-6U+e-C_t|!VryKhjK+$`bI08kFUF-ryM_ud!n~Yub)J4}^`~`}huh<2O z4zJh+W*EEZ?TW6g_zM&rS*fQ$(SsGcK+!=JyFk$$J)8a&D0-oiR$%Hgwq0~XbBvwY z=zr}mUbj3(%S>60)khH#^^d_L=Oq5ZXL$)*P#mMKBGRAi1ZsNM!2)CXN8F;fOMk2F%{!Z0n)f%iv8$4^HFv9Ul~aWX zno^rmx24{<`M#a^9lY=8eVO+!xZi(&-Tn3Vue*QK{Z038yMOZoZ4X)x9%a52Mymzj zXv%CF*Oc4jZCcQ@q^YiHUDM{KZB09y_BS1DvYL)IIkseO8Mh^Oi+9U{E&eTaTk5y0 z+p=lP<}FQIwr$zIW#^WbE&I2$ZaKK6ZHu+#(3YcHRI{TwwK=od)jX~_r#ZJdzuDVd z+`OQ9QS*{!e{)@Pee=5JP0gE|o0_*ZN88a#JJeRk*3_+;TU}enZIw3VZ}o0nu+_h{ nZfpJ4bz3)W-MqDF>$a`ix9;3peD8vLsrZ+_FEQ}H3`E}iUu_rqQoIMA(;?_;Kay;C;_|$97k+1oI zOgu9-Cx=mN^0Kcy`tDECWI!uRe7@ z-kP=7W@M!2$BVvU;!_tkZoIH7@pri7{#~08-j=y-R~>i1yK4=1H}ATPyZ&7=+>IO0 z@4AYI8{_Z+?%saycl=aVqUBzXAS|&Y3yTlk?M=k>2uYSPmNY?l88KC6Y~|%}o%lOS zVYlf|5`<(5;$OlQycUkESNB_lB*ERx0VyA4=I)3?k-{2X5N465&?3Bqtl#?Qwg`D> z%8p}#ko&E~ixE|yePc|}&Z>V@UOdaS(%Q`u{DGJ7p>|PUX^=<#%M*mv*EX)XTe@2i zj?X{>$`oi|euuwN|JW$x9tY<`@?ZSt7KHX|8y{@^4x)Hp(Ptn@5c)5| zkk3u!HLhL%JplehqzJ%K8~=vCQUBb6uwYd1|M&i1z<|%+`-xjHvgaLj3tIoqmdnb7 zaJxJyJSg4d??;Ny$exR&HZwt*>_3_cq7wX0(1738i>y+9PCzh@uIvP;9iT<+D?68I zXPVF0KyEv;gfgM%52`1oG}#6Dx`@Z=HDpI59J^o`egmAx%bKbM!Hn>-`whcT_Gbkw zMz%mLs*V-?k&Q<|2RnUQzme@gq;iE2ND5d2g3pV}bG=4(6@m7L2W5wmJ%=EoDYB(f z>sr~VY{|C?^0=KL-Y+RFAOJiIAVuwNYNgT}Z9a1Zc&+u-6&ZDPM)qtf>tv)N-{B2x zfV06HNUJrnXCXS=E;&%3V}qQG?0QmByFU*Y@UjfFx_NtkkjAG_5bEoB&h=(a8*=*H z9PZO$!w6KY^r6_xovk+_11D6!j?znW+JPh>-xe>W3X zv%evX#4SAW2{UoPOkBhMWF|h%6D2dz;{V9$7P>3)@1U7$WV=xps&P_X`QEy^x_|{; zm+k0&K9b<`zr^#;L4FM|%6?QA170vWjkB;{ur*-PLH7^dH8mg=BUK~f%q{*%0z zzkW>}Ks3gOhV{s@$glF(qwMB0S>O)|A_?z6>o5>Tb`F4ob7x4l-{k2w_itvn#k~h> zyzDK|UVT02Gp*Yb%tg`ql*k5)E{c2Gz08qf+Rgng@${#~1wOux=z>Xt-(ZO)L_*94A_NiM?J)s&_gqH6WoMnQ~ zUx>I!csqu;z!M5M>RksWw-254GABR+4xb^1*iY?(;P(QqmTgHFK$1o6;X(1K_FDfP zi1e~gV}{|YGYbh=yeu<=2w;hi{TQD5qCqpI)gC;TA&m>3OP4a-kq9Bh)zR3eCykWn zmw0jijN-adgy8GcC?F=Xn>bfi=U=L_~*7IfBp?vtt;ZSwA$UFgYvn8ecA!7GqTyz>U4*WBiyY; zHBS%#>atKG4!E;eyCYld);gArRdodApT$w$4$ff6!CIexE}}q|A@&r8M%h1$yj5t- z5%wBze#DhQ%tcN*+u8SMCa`T_KG(g$z*9g$cVMtV$40gnp5|_fZ8lb)7KBYUAmzhV z4V@gG{p$ow2-(g)&w^Vlpg{IJEJ=QdLSSm3`#7NgwPPrdmxlb={$C*oRzkcH;bf}n zXdIM^JAgja^ZGfx2kh*#i5QPgc&yyRYX?iy$7m@iAPIGK*<7-{v43T}7@sEFi`sP& z@!(r7^$hJ2ErT=vmqbIj9u%@kG7vJvO^qqTl7K5Qp7jHb{6 z|J#KK|L8Kvd{syRLs>!q-vNM98lz(C!S2b!eh@F$5g^VBG*E0&dqZa+$1i-2Ojkg3 zLD!O~Ys%V~Q1n50$rLZ9jTrg^5UEaC0)MN=`LimxN|Qqn!_N|ei~FhgMHsz$Evh!1 z3>(sBqxcL(&f$^$s(eaq>Q&_)3M|))Nj^5!>_!DZGWk zw^6v;6N6*0X=u38OIkm#ucUC%RI_0+!wXZbWrFrZ=?W?Xz2d)0!VOC55wbHIttyeR(D!;na zre(S^UQ8}CxNzy@eKU)V>Yo2~(&#wfCn_I_6JpJB)ose`L z>ICX^rxrYbG_Be$zGACVdhEfbm>{KU)luc{4PPHL`=yk6b3n=RICN0Ucn%!^a2bF> zyL=$Rd_ExL@aGXFub6})Wjo{_St&gQLbS@|0UMhI_P{CI$NmNN*Q=gh%-S@cm+hh8 z2yu)-i~sc78(e2YTfi5 zY0i5qWCet5)8{$pWM9s0$wyLq9|jzFO@)4Z_+` z7a^S}L>|-8mn4S62QpBx-8QQ8r@!NaoMJsn zW4lkAfCcaud`wS)mS=;Irw;AIIwD98axtU#s}uE{=D(0C1HMf75DlNL=r}L6sGZ7n z6t%197u6vTq7!0x6Y-mPtHBH0#0$KbQ$-)B4ZTI}T9e&%0g{}nQ_f|79V-at`0}A< zGQt>SEY=SJQg*n`a!Bc&qV~B{P48iLg9q*K*ik?R`xP%Bhmd?oZHUdCCg-uIM+yxL z6SMP^aKnl#sc47Z1|Hz_)v?Pl@)&JUMq)XF?m*Byy^MiFbrP3&idJruG6U{7=eQcZ zySUtd%YtjxY7GwB^r+QQw4tQQDNQeF%93(jZ^_eGI$DE$L7mynI`%_s&v_R)9cglo zYe>ofRTmu}lAR@6N^gpZKR67qI^#w| zju~>4ZCNS^S8cUf=3APg1s?%JS2e}7rvARC0Oe{JX!I*h1A;W|Rhm{s$6fDjOw&4s zWiPt`if(^;@jAH!#z>*S^+t<&W}9X~>DAU^72r>lWfFZ*l>?;AD=A=0NPQMC8p z;IVk31t+ia#PnG{_9qN0h6R zfR{S*wC;jVK2m+9W{gum10r8dM1J2m5c!}g_m;>`>827nOS+*%&XJ2RZO#kmKQ-rX zkhM&jpho%F_YvlF!Tcx(^q0eaHXr?0X;^X$ISXVPr@>~(MgSc}y2I()d9g1|5kHvr> zpLUXUlFO!H4843nK_=n$reu_)kJT!3UENZ;mz^Dgtfy|xRku2{PEb1+4T6NJGMeVq zy#~#3dl71mVxH1G#KDb%IU89*svh*+L%S#lV2Eu&eK& zgeH4nGE@HsNOO1J)=NVEySEEM+a2f}8wVeUva|0H6jQ-Qctjezog!*kI(606C8c_q zn}ehRB-F59N)cbFKA>9z>Gd^UpP%}~-v7!lAl;Y9y)yQ~%>$6zci{s(=*61njAqx; z)ap~-8rFs(sRy3dGR<=eIk@nKENduB2%q@SU{Te_lhO!~@u)p~05)LOb+R8X6NJ9a zm|R>UXg)Iw>t36GY?+{Dtf6oAYWhxDLEqx#^ew#u-*wxwgWSoGxHHAeo#Z9lnOVi1 zYbxM8^LX-RIGRUjThCov+XlE1kG*XRg~L7A7Bhvr&F*m$x;8jWqK)}db zSP8-Ssccg-2ZCD-khtvaGm7(2xK_LYamG8~qXjdzTrNU&?cDCkeW za_<>b1Vtk4+CfcYd~9YvMjaqI{!>W0xaFq3fN>NnDkOVshp|2S0g;_KWB%V&9s3`u z{*NycRojpMFI5}a5?af*F!6egZ0a)CNKQ72TgHRF*HYuKVT*S=douw*K{ zf^-oi)BzcUD`O|2kT8~su5UpmC4*v&zO|Td;Nb^o(*L_d5Wa!AR3Fp7KtW(GU?<&` zE9@uTLXojh-I@ht=9|dWrjY)^IH5jD*!NQ}4Y`-Xgc5b@hOS3xi&ftB=wgJ+yDR;> ztRRjIHYpVYPumk?qua}YUO(33p;7|2*0s$J=+1L!^oB? zo7mXZ=s_o%hqj{l9&jn>N*wH6?!kT+8Xeju8O4MYZ1zd(X&mJkUg{?uBB(KXJC>7v zC^rVBn}KJJzT)kKQii1mC?zU_)|mYPnW2u%Zb6C4Qk$Ws=xIK79xMYoIMftE{3;q8 z+GuY>MZ6w+z{w8$6)=<%u>1Q7^VeX*hc-jY7mA`ET4g>e0fYKA6{c0rHbXx(Lvzf~ z6J}_h8N$AWAl+t2HbWI==pHjvWrpg_(27zTN~)xaB7iQ9utcMwZS_Ngav8d?9bEv{ z#b$#>OiHa|lLS;oA&egac|1Tf34t6QppiA+QA!B{d1*qm(FBqvD5V4_KtL@eAVGo*Dd+E` zIoU=jJ82$uCsW4qnQky-g5r72soWNyb7JTSx@b;dFEKDN^m|0GEtptFF=c1tNm_tMv?3jgdukD%2*xf7DKz%f76vj+PuJ06aZ3fOEAi+1a)8L zMK4Y2o^vU6r<++&(qy9U&nb8bb<<%*D*GYgi`rMk6+SgJkpJzF{|B)HXo|UVzn+De zC8aGyKrtpZeu0muY{IYvtn5%N22_b!#Lyfw;#GfF3ba2EU)Z z>lS{Wg=Mhzji=G`IyMD)AVQ*<8K&$w0f~^*{G_Dc`y0SONz#?PJF5&h=gN9iaE1RU z%JE+SrhM#!+Y=>-aS4|lM*_<5u{lU{qmA=6&h@b?3GfS-wJTtK^;Z+h1pg5fQg8q# z2#aetJQ^{!XwYoN<7N>!&KdL{09r5Ux_lqZj3S>8*z z>$Lgc6XO+Zwxo*-j%!+3Gb;TulFLWn6WF zwHpYfVvX#lQ3V&aa~K%w+h9$!Ts1-7ESW-@Gi)vXip~Y5G8fpn+1u@mXdRp;GKV*~ zWU6G-y7lh{a@Y$?&@t>4FUTUBhmq+P&{OJAO#s?5c|kx|D=z{$B{d}1B@ zQb(~YWh56=0Qwkpz77ufHYFuEU}EpR9*ylpv9mDQ;}QsZ=8KqJQ*iz=-pgiCBF4@h z7|Vj6!;j5t_A}^oLYa>&Z2~$P-{_b^Wa4ZL2dFQQye8BJmPEL?hNDcD>4p}K%W-OW z7O)Zt7xG<}Lk-V{M-BJTH*$);Po1Rivv1RP_fh)3egxlj+nA>Zg$HV<_G>E?}^NKz+nET%XBdq5E~3G_I^9{@#3?9aDiJp5F`C9)+y5x$EFpBYA6%*3e;kj89-9KDjY z!RSHupHTLOzTbjkxJVA<79Dii{z&vGjW1KqUDNngr0TEAxv`rv0~yPKbK4(nNNea! zuE0PAGWq%5zUOp@XV1^1%!vu>MfxbZ8#!1?w>35q`d8x+(Ckykcg z{J?$}VRwll>VX7fRwF|(Txo3*PqjV1eYQw8I``7b=2<(M=kl%dmqo|po9C(=@yUJK zJ{snce+lB#s^(b_h_94o)%wI&9!M!VUKgpb=Y$70PS%>w)6Ew1-Oi~it+4slHzC8>PF zNW1TG?+$ic53ncd%(gN0lB+oY`sB{cBVxHb7h;2klcJ zf$yU&MaN6Q{@QuhN9~TGCHYnkV8v`R<}Ch^zExeH?~LHDpyy)qV`x5F4aFN4+<5h> zCpyxj&e0{Cjj2iCoa0+Llf$)}+Jp9@V$!45X(?SE1DliqVnmULol10A%FveDtZx-L z=Ca>@j7hiDfnzE&{4)xBaAsv&2Q3}4Xw}ZhGN#tXw7VRthpE+PlncYss>mWCV!KOQ z@@Q71;!!AN`!%R|qd2O~(%xn3uNMSVY6-V*ac^6wd7|1$)GEIjY=XKvUrV{P3D?D& z;NwlWnN8zO7>J{q)T8*P9|U7*F8R)b_xH$GDWyG_bb^%UCzpK!uB+^)VHLGy*qq;P zWK%rG6Xy<0L}RcQD_QQ4#&OMZopwSyz{Z);P*18=j&C;UnI01>i6(8QF#1?!NAF%J zgqaxTu~Aa%5JR`a6EF5KdmTxAxro6gX)`eZJK)%hP}yki&1l~Q&IgX_sh6r#*j->z zY&u{&{VV1m+bgvFZnJ^8cbfd5rpCwmv5leam>8<0aq+F#`8?)t9rW|sq1uuXDN{Rn z-v_&>qlsi>%^A7Xbmw9JFPXPk735ZiluT5@pye@>5fFWnZip;pGbs5 z6rNxDqeM7N;cH7HiSQ#7o?7~NBK#Uc1jl7Z)jPNSI0U;)xYbO!SLPZKd*plt}Y9CZGU9f)#a%(f*`w$>R) zsxRn}X5i0`zcmFNas{(uZyC1>z}fKuqwj8v`Ce+`PWtGpjZG`G6RZKWhI7#_yOyHg zsdXw$l;$ZcMJlM0a+x~{X@nofCH4$mSh=xh(EoEUHE$<<^a*>Z&pYX(r|+d+@1#$+ zrx!Is(E2$x{?HEAU|y7XdTB>)At3~3OOVzs*rjxIPD)lT z*yPFDZJ?sJ)rG4OFT1td)~MA-yBDt6j$$b0T9cZflGHLdL1h#5SPzv{pK6+W(#cJ?ebsUu_FmJ2*wB!RYBmj-9^V8H3$LxVe&wzqthrvqyv`#H#T zSm^cZXsr;4JN6VEEQJyQ%SDIQLCZyRQxAn9^8ubTFUs29gf@wE=FUqRQ+Tm4Ci4+36y_2Q6>4mg8XmBviT^$^H^qP@5Mu6QGwHn9PDgz378l#3L5#N!>_t9WvFj zv}!71fbhnFda?0>bqQf@yN9Y7?663g!6hkEoUPlFsaSpNU`LXaO;LFi zg@RhPrx3bydsm2i1nTNu-DhI4JKT$Meu@?s9lVPBwWla163V1p)}xU-^OOsdHaUVz zGEvL1;J!RvRL)P@glaQU$Fbn)ycVZ!?Gl7C*ISMIu!&ez^vAo{@7|+b1mx6{M7(!{ zFR(O_lNQ~{OqIGI@at?4y4L@|oKZlRR-t7=4~H{Ixu8G{`Q1=pQJ< zF|v#4hZ)YrM14Qyg$+SeS-s(FtqWEIagi!-6ur{XF?QW`Yz?vAC=Q%(K0YjGYMtyA zj3yS+ziP}b8Ld>e`O3fB~rW?ATpZafVMq>`Ij9>cg9I7sTUW2u16T5n^Y){Ulh zm)p^Bf!%`zFp#2_J0j)IhzHFUZSmt)$DxcNPvUdT}_X?(EaEWz_&F$*g zIEb>h8Zeui1B6G)r@lIjqJnn2dy#xjE4Q(6$bll&T073@AoZFo%j8rK6Q|O5l@t?= zh~ecZ7i%faft54~cE7_XL6$#ClVAny>Z*GTCiIzW?u4Kqf&aP|e|a@Y$a;~r$J$DXeT0~jWil_sAu=oMvw&2sR+}2is z{%Pg*wkqyA+Lpkj#kg0ACO0|PX-mqT>r{tlE~4E!Hdja~C7#`s(Yhojx25GkG9~nx z2{fCUz_D_O!?d&;14V*fh{mST=|QJH z6URAnUh@UByS1#Da)Uo#)ZuD&~&BG4*y z&YYb5Ok8{PHH!M6&ebV>uhgFjJ%?X=^hLxWVr5B=e5dv(39blDLTW4oEL0wue(NB1Li4UwpqwE;kT^a%WK z1o0{8_Ocy3>S#Rl2rsN1A+`x#XvZUa-$qDFE!~xYPE0I$np!1`UUsMoJmeNi&WYtKs9yXhmrdi{F%EK@QNymIm zggbdVP&9QonTkY37n?)PpwkiBBv8|6viyJ6ENuF_VKxor?@efakxwgxiO;M$buQ~5 zs>F&n*~dH}80b6eaq=|GPmXX7Sx<8xc7PDcXsylZa|`V6pmz2wG(EU;!q?i$4Up5e zVy(?(k5cr8_3;IF*>TF<#q3xI=}7P=rxB(ZAE{ig@lz^xFDf0SPU7>e1E4#?t?ed%x%1{z)c{gMk8*F5`S;KYw6bI_{kYJPt z&75Las#Kbc5jZF~u2&?bS4 zp{OL1blq)ashSYdGxj5}^8h~g9n7*GfNje%dx6){e4Z{@HKr-;S-4K1b2S$2>mXG? ztDu!Rv7$TbwBdq>97)wMlATzSvQUNTf)%{xLBDFdOc}@(UKtgRK_j+x- zx@v=V!L?E#zX0lVzl%iDY*@4<=M;S*mBy)#`xdzV;k@^os{_4;Lz#XUU! zC9}1Z#M}D-nu${E+9DenPxBJBMRs+m9Z1%#wDHAQ!x;2^F%(2481snZm{t#HySmb* zBL7l+?fANu+U3=)Kvzq(INZ?!4B?YQPJI!n7LCx(n6P4#%Xh_X+5j$K}ZUR&}gAbJpa++xo~emcW#OoA!9t+b zV~0Rza8Oq=!EUrE_uI4h>}WemJ;I?2#jB;%KduYe`8Isuwls~PA$Il4bCh=HeeGGW z(4bnNx~Iu!WbX$qU;qYJHfa zLLQ_jnwSu9+j)uuMUFEzI!CHmj%fYgl%;koU?R%E?OUQ z_-RDrjRAkLliKB3j9TPhgbiQ<%VMtco65CA1#flqIdH&Grc^}@rR9u>l{vB_21j+m zC1J)L>!+aC)*WQAeJxFgh#p=w!LE?d(!+c=3~N}e7%KHY2Qc6uZG6bDCy6Nr$VSU?@xy9G7i zXcIe5i`t=YaI^vKwwUr+|035{ku4=LZJJu`gkDg5Y#ACh*aWw9M!SG`@XYh98GE;63DNUBXS@*d0$HjO7P z^42K+Fey^8qe6R2&*N#%$Zg+X9wFXnL?`CClNfPzEK+d;t{Tu_$s1%;=43)xsufbUJ5*>19QV0?*pX89=oiEXkTotVZdWsC?Xy1sc>@ zyGS{g=c{WPqr7RH_(FlirZYI-dk=C!txa=XzASqA@R)bybfq&3 zat|!5nd_vyO`Adm{|_+l0p>mVF5RI#j7z;2bM_^W#{w3DbO zu6w7m!CH1RcCYo?Vy9}+%ALwwL;4h(C}MKuPR$9HqntNzq_Uk8p0;I2#pTu1=C^PL z0y$7K>9MLpD@pVv)9}Q!Cqh8J(qYp-CvNlYnZIO5MUip&n^1w61*6bF-YW3TgA2n4 z!8fZ1v^&n(wDbbVJzvG?57T`sWSW&Yoej~>QM=XVy45bPz+B=psObvrEt=r5$d63;<p#dNn7YQ`&VUoEbubE9<+QWsS6JMm=1V)Clt}$x5x@0U( zdhkNI-+GMZHKK07v>wnhBM({B`Qd}|Wv(f-&H~+#wYab#rz$fkirA`Zk1VipBF7G4 zF6|Ibd;&_TCOhl5HeMU(SzdH}=qs1UF}dB1>k0QkzEUAw4awG`!AgFILmBSbbZ_EH*J7nh1mA}!h(*Pfd<3+%=_Xv(D*F(Gh+}wC zSv&@{$LLe)RfO+`Ue`y`SR~igvL~jJJnwLQB;W13ba{uB&qwl-lF}C^VOLt@V@qfw zLYj|8>{K)l)_yTWhplE8`e@TsWI!-P3qFNnuf7x6GdP@-V!}YNmI{QJJDD1i)P2l1 z1*@wErIX(KqB5cr4D8Z4t4^@1f;pc)ro55 zKptvEyY+{#!YStrX|i%|70+YI}=ap8zW&T%WS@>eh@@SJD)d(&Bj1$%dHk@>bo2v#`N3 znCz!057}`{Yb>&D9;1zINir;?`*YyFG(^jdwBe;Y9uP)SI*k-_Sm-wIcr4i19vV1u z-HlOI<{Kyp_g%Mrp0M&6T2u~lMxX6%O7C%GAI|b7>M%HGqgt#g9#UW{Y3zhP9yv) zcxXFIbax;f;u9`D$SZy9#mhhuzoWsTahXh~-V?L~%E!~R{*K|~j*nBUj@^7jle9yF zW%=9WCkSp5!DRuiXIjTObKE0wsC|R({Gb@V2WWyt&wFC10lwDpYJ}T2MNEq)vR7(( z>Pvh>$HmYzw5MEood5*&S+Z;rw~s+w>%Q4}^OkQKEAHJV?hQsyx&@_2EE>dRu|a51 z_l7!h-g66q)Q%|3Lc&iXo2x_o!LKpHjQsHR4S34fAIX(@@$x}nB%N%i@AnP6E87x4u@Q3>9(O~seyf;BSz!He_wmLxc3mO zQI4AA(02q$>Tc>;UkAKY>=oZEmQuyY&v>yM2Yvs{3nc&O0(mJA5>Uz_X<6{RU#bY6 zUoYhZ&uyMw@7>*WdM@ks0y%+czj`z~htoqgAg`1AUv!{2J1ccVNd z_^@S;Jh42H6$pxF9fqm;ydn;80|$74kZf$jz;H_F`!fNo5kr3>_g*pdM{>W1i|gdd zV(4{pH;bX&xhRm-l(iL1tU$a!%M9Cd#XqW@r(bc#+*idF**e zIXHwfs}12G<9Vzwmq0uMh`wr+PlOU(BR4KNA=*55~)(AS3wI>gYGD4Y8H6H5Gc6;h%2%EFkJ zpGZc+)Mamk8$x>7_bQQtZhcA9x;dw#O7!uq3u7%Du$#kCq?yrdRbMeG(&)aZ*$3P~ za={eD^`>iP?_=aGbK1x|XF4%W0I;s=>IE9XLfluMxxqqa;UbbZ>D5mdCL@Ut^ z;^P-kw;1{aUnRO$-2NJmzejwG9%50V_eu{a(eFyLl<4=w@N-BTY(%tdV z0J`*L+D#*EW`8RueYF_64idPTEl+Z+)51iW>u>|YZhB!=FoKvqdh8=kL1q=;nS#bS z&`^gEq^AA?P1RDhI-AmM@B0%1^4Q?{d*rnyIUy|Q^(CCNwx*a1P4nx-6xxuo^%jlO zWph^p0DbIld6>njf%3d@`V`5jsEtIq{riQn}6Q7g@ z=gF8y2Cu>#IIqEriSQh?Q0KJZ_?{g)jJb--B(D==Q1<6Ge;!2XQl2?!l%4%d`!?u%zmQt+CD1=)a(ikn;O}JSUq21 z58`Gi*aFBqq|%tv+VC)ZLlLx$}urB*a4A8d}Coux6$PJF$9@~Q1rSb>yKeGb^IdGWY;^} zCT_98@N(?XN#(dO^!~-p#V5lKP{jLMR8A`TK;dI8G&x3*!(|HRz(br5T}m2S_n1yO zWjb$k1Sg@KZVb*;!tL8qC|SA&SKZLFAK&hU4gTH*AkdCNY*xij>#eQ4uh{0z;_r$qIS=23%nWfu)&4 zb&Z|_c|0B{(8ugblE#`T;O0k>9k7DNSM7plsp|#LQmjb^4tb)%g*#Y*BeE723L9WS zOiE8Kf@rVv1&Aj`B19Q%Bht;xc0BN6`fT#Jy4paYSqQt=4LgcYGj$vFzJqfW8VTjHoCkJU{zws)>j&FeHjDYL4 zduUO`Nmt@k2wbs_czSSMI{qXC1b(~<;f3`A`!ks{|Ig1tyz~|AVB*h0@Ft@aDA-4C zYZs#`w6dXd&ru9#=gxL)k$r)zm9)*{GgnV>bv31GU2T*SuzA@-ld+Q3w>>wRpG!>* z*nDa+rLonQBqRqegNZn7rm0*#c_+cEjwGcckKXM#=XK!z$mziFNSE)5hps1fY_gsA&(+^Jqj|Uxb#J;%d$ZsG_8dxwvxZ&&Cf+Dp>Y$|#r+i9R z9t?H9ab-h^W;IQ~`GA+%01O-3<|-2&$8jD9cFZ`iqb!NjIgg$997k}|N_mAj&8rFUjy!OzqTVSe^C!KFinRmBTGOtmZJ#UjVjb*)cDXBh#9+_&D4d9*K9*4z>_1vjc z$8fUd(8nMq4crOgq@sgmcz3Pt=1y46A}Ug|?G3>V`R=e7x)x#Vo4Ex0Gf=!3YQ+~D zAu&X10)>r{d{xpyh2==sDJ&i5z|1CwcOt2zAu5L7Bj9R>v)e<*1wtPkm8UIp^pQ!y zpvU1B!>^bS?!H&y>Gt$2cnDiP@n7}%-CpKmu5YqPpq@fmh6Kcqd z*PzP^yF*%`uuREQC0$SLgY{sF7|uk&Lmr3F4k@QHt;wM;DQOsx=QXd58E;^%HI2*l zn<(^n)YmczA`k6AM?O!nsqW%h+E)d!w0K0AWy!KGh!t zvPc1e^F;o7k(U)#P;0WV=+cQ<9$vmMlD9zrN9sRVpI7&*%WZ0o3e)W6xoVZu)CM~J z%lpvpKY%ieKHzr4xas?^hcH2)o1%vfdR&~#h>^E|56(>@wiiosq`P2m>UQi>oL z^p(pZm0v4S=caLyO3c-#4x$7Shku;NWz2aI7Y8AF)z|YcB960k97zShlj zOw>-TsTa6;9#7BJcOJoQ3OuLe#1)GyJo%He>~?QWjo-fp_eIRR7pBf=zl!&E)~MKn zpqPsMLfFLvdUnwyZG!`bh1llYkv~T{KP=f?f7^I%WX{IOivMT zc96+&y47kN!)Y$K?rH5StpkYpFAy_NJ&1I}_zb2GKoY&P<`>txg&MXD8eTND0ky2p zx8Ghv&segTNL0ovfcs$5Pu3FPr1bg-G|N-irywG(e>Qbv?0$qn;C(}ADio=^6ftxL z-d$i(z2qiIV@w?<*HSA7EKqlv>Q!7ne*srw>h)ykE%Aum#vEfK-T;wO5eIuXU=3}+ zTWO>?rtLRYKT{6?E!!jVZ9aA@LDHIdt&hz&{ln4>AG-m5EGxdqJidUk83;qCR!^GL zR8+^csI6{W{v-1qkyB}@%fnuOYYyoM}SoA|P&OwH8C z)731c$BAVt4GQC}Hb^xb>84>xuC|PxRIamI?5^S`vDi0W$^HcpY7T3H6K66|a|tY&3NR(88syTt(8IcT53wcuY+A=> zDb}vmDr|5pau%yGOSuV-S)Cqe#wOUgWO_MtJ>Dae?rE`WqT8s(+Q}Eiu8Pd$ z^tlbgc#ueJU6MJI0Luw*egZJqG>i*h{TO`#z%$e3d=7a9K~5sbtOO*WXi5U=igcJH zvl?{9tEGa$8QDi6?+|l+7!X=DgAlNN1H7(kr}%?=C@$3kdzXq7+n^8>L!W^kpxz`g zGy(PEd9(~1YXwWv<>a6pM_|Fc3pm||U5d36=i9hsKunrB}PG8Cq&!gDa9Hv;_4qN``o zly&lG8{o^)o)V8!d}JXAPtVp;&EC7Ik4buRs|9Vx8&sYF8UXZB3{wvYhX>#;ZXFXk zxH+Y~?@%m&dq+uaf92NUU|d`0^ofuS!9jyJfKXP~&$C zS0k(b{W8}9*=9YdyGIBnzg&qXwbUeUNoyUii7j_z&P0S&PK2%~FF2`>8#?)8+$h5l zik*3{1q?9*YCuOLsnSm_Nz-K6zW}|icC<&I^};S3j>|RxtaKi zeVuX+l<_XY@MTEiI(1BWx!aAw?;|ryva#zJ#%-mkP=4}KGn954QUmFIxSIuIH)mf6 zuHtdx!Bb8sNo2}*34xCyl)E^gEK3l|taVCLG+p{FZWgaotwbzQA{O$TgJ-6e+EtNq zMY?`95l^ZK9Ol$BOgKI>ljGQo$Ac(TNcji}O(qh`(Zq<9X&X!-63R@{?dvpwLt#|F z)%y4YDg4cpK=Mjg7mf#S>P+xIb_={}VIQfDl<56pxE>yyJol}Di#w-u2!atAPfCSvNB~5nVtR1j{2`kk?^Q3x_nN{o3 zJ@n+>gc8}&I2JFyq3w3I4SQBJT<<_f=sj+BE!u|&f_xc}4`#9lsJI#Rc<1vg{nvpB z%W1V8xoiv%1U3iBTH)i;z2@7Rxb!mtwx5_=jhT251uH8y#C_-B)M@9G^R~w8hu%{@ zwn~nIV~J-P?L-pLR(0ZQySSsS^Re~w zSC+*vnVT+tL7^Dehk;f>*NpkL>y8>f|i~3~%4OsA`&s@q=53{&jADc~nY<`#U zg(NZ0v?z3uc#@~36r)Cqeq1eJuK4v`6@@kd=E;sa_CPyv9GoQM9wK1~)ciD2^Hvb> z2sM`gh^Tog+>3Gu&3?#t-J_`42>_Tm55AFrGlz03!r!LmezP?iQS#1V0|Q-T|29(eKcdbIw3<^VN6SS-a~V^b3K8uxh>NV`7f@ELa}41S zsi+&i6yPDAt$3E+$G)cR zj+fnpB?H6t(l6%SddVimOTbB$}~VbTVIS*3Z&KbjeY*^i)1nJ$ak#(0*QvDUv^LhMb0%*A2Rcc@CBhUKXHHz#v&FEAS2s$;ji$Y4%imfv6a|$Xi?n% zDJ?`k)PLA4p;ljjCnS+UJ6R6>MZI)AWL#DVXu#654oiKtUe*f$&>?~&&;EP>9Ud{@ zZkzQiJ#YW2!CS;`{5j%hQsV^WN<8tzfB}#=FjSAtATA_R{mjXs$V;-d-pe<3u%E^4 zx^|zMs{IY-i`^E=2g`dYjf}NDcAGjL3Zvls8M2cs@?-x!0~Yy}WVkZVNCi{0x2Cit zfz%wWQ^l7%p#`4=l_Mc^ypc*4Ah40BcC@A#9!Cp)nu07QouLn40s_NM`4_B>V<*|>!4|$!Kf6@_geQ=INai4DAl7GUpwqD6aYm?= zk}AuB^H)gcsI^znCTJRehLmhF@v92B2;Z+~&{i1TKqt_LV|_5>8n=j7p0r{CI&@I} ziu!_IQjnJMHrmmI#q-jnh2anI9xHxu0l=5DImD>ZNjx5n?wOr4aDySyQ$2%?je}S# zjZ`Epb5!>EFb9x5wJS*=j8O(>UnU~ala+U&I4k(FVHvS_bdU3+#DItR>oiiNCI4KZKP>{rGxd-703OK zQq+3OgSSGq#If~*3$$p*=SdNphz;6}UUoNjU3iQIFDqXa&u$&A^HBi@>HL5fP}P=? zy42!X_+r(!f}*(QiWAk&7Boyb;{fw5?!`=nVK&y5PWf6G%;RYy$hk%Jq%(UZD$>$3C&4s0UF9#gnlB5lHdwTe=-9_zT zThIpnjFwNU?uj_KV5?dbE)VBLcJLNmJ*q|Y3PW&pelXD_W%XP%&ur6J>pQM}jmL3^ zw4{{e=`GLdDH`|Dy+AC|_hWU@a1>xjJ~EK2X|+Nrv3QqV9#dmvp8=*YgXUqC;xbZP z9Wuu}KtV<<*EkESv~ewEq|)JK^GRC5EEYotK~P2|9vSEzoE?^f<=+A- zinnc!I-gtHftav!UTSmeX|(0E!E3+Rs$FlGt&(m+i}ZAY>rTPEg>l>ktGN9h_;4Z* z{218`ea74yi>>jf7icgO*>UV7%*B>YL+B|OWo?u**V?)_mVV~`{qNCXNPAL7xKm0S zI@(6hq3Wyg>ON*fb`0gh_`FDt8re~*qu+cqlH36vhI$)t{RHP3DDw0d^+Pk5y7xAe ztd9wwm2p4@33^Pw%AcVbdPgm$3h;FN!A@o74m6%#9U!$LUTY(naB&HrFkwT!vLtys zIKakfm>+kb{K%sW6z?)4iOb-{3m70CqInZPTcSef43Ga43oI+kK(i;{u5OE zHOQ+mv*NEooJQ8tcA=b-wLdwN&m7JpZHYx@`e8je!kq3C>lkvz+X5_DUZTcjRftt;b(WMv*a%*b5ctVnyFD9>{dLE zfVX8uim|+JGX|~&F9wck`y->b%SZURL^#b$f2$)tDL(UuUlM(s9084=-0v!BER+9e5NSQ&k6m)b(%7#aLUyt}= zaUVw}Oy11_JbV#vO~1JWZz%{u_{9JgCI)a42JjdcKr8VB79)c;i7lY4adkn*=s`n0 zq}_OP%T(oD(pFeoTji{s^vt+Ei#uut4@_nPN*JyCXu)BPsrxYZ)xv44)>phl+Y$)M zkZwLoJd551NK;{A?w6O2RBc1JTN8gfeEY%-g*-R+G&!u{_nh~DC4fMO^sV17DBYN zKqNFxa5Z-<;5BXFVDWWX%ffJ;*jHIHBhtU8({#N5}IsUx(tHPffe{=Dt zRXo{;Ke| zg33;eO{EnW7&R6=jNXnK2lNdvX51xXXL5QEy|g$E*8rO5{`t>zz>13{Pl4gYr8&q< z<{|wbAS2ZJu)u0xl}vdaqJTWNww7+S_-*flNNGOe&0q)EAh9jAltA?CQM<|RWQs}> z=xj4<>kO?LHbl-vb8{rS+jSVfe{&F9*{p(&Dwij#$$}%2tepf8>0Au`3Weh=CPY)8 z9)J!Xfd@83B@KDdCZ=fk1usvYR(ynn;r5b-eA-K9VF7@Q60!XOumU!gdFGZ?3_XsB zt>uB9qT|blhERUvO_7RQ?4@+PylFh!d4nKm`ysjHb_++2U<(HYoeLW9dPJpl3xp%w zSjIjUPuw&Nz{*Ap%}0Syln?#e|butP}*mA0&H6JAf;EWR$cI z0Az)Os->$+8gj+Zi->Vm=ZcU2J3NM*3*)-cIr*ug>+n{O+5E4l`MA@W7H|Fp_Lu8X zMVYii|UvHP#AFV<7w$_t=P^H3T$IkO@wld0*V>zBP*<}rAoAC(_9Rb zIj9rZkwRc42AT5D-KiWa-5e|5nf)!SaOFM#UqWYL+FSHF$r-35icx@6H!_4~jkuzt z&jfO?QNuvtc_<)9KEsYvb-34uUrEau`f&2#<;cz=SO@F%%Mz$WVF>{`n>wTcUjtGa z;d1Z^K;kG86z3@Msu~}#YUjO(zYHEee{(<~seJzCT%5moG=H6Z{yHws-<-t!{Ur_Y zyk?`Hj3?%dp1Yr7o_=%gZoB$hV~jVVq#z!gS>M~8blhj0sB7{#eX)J_mJ zewr4qi2oW22k>je4@N zf}Q4W75fW!m$3J_>t)Bedj~tj-Q{c_cUQ3Aad$QQEqB+j|KP5l{fxWo*}rmk1N$L& zVW+^|&Fm5GZeibtOHFt=2r6UiDfZ2%_{2?vyfe!#u&wuH1eI~R5 zh&jk(AQ~5M;4wb-3dMY*kgYg7b0tghJWrXWIPn-sJcgJF%FS{mZ;8h|V8-OQaIkOI zw91UhbtQ-5G1X>Fo-4T}9^>LM8}nVo+j)$ST}3fy%_R~(>6+pXq2d?9=$!`0YDwws zxD30`BL32rj|czp=*K|=@z@QwrtqXLi`Zt%fA9-j#oeEG>F-P4k#EEPHU7Je@;oi+ zW{Z3+GF@@=-4=OfdapEvepRt7NuGqru{Ymsm7Ul%!`3^!S3a&`*VwsZa{I9!rQOmw zv=5U&z)wmh(QiLmInWI8ppk7O6=`E?o+sQfn(+ePL70p-7rpP$rQxJbo+F%vI8 zJL9hl{4286;r-P{Ir4BUY;6244kjS7wZdM_hDP8g1aH5&CMH+6dcTH$-pw^%%Qv-p zhvC2C=9*!7daD=LM#!=PYn9dSmQqZ7V%{_UJzVl=#}sd!}tHR_a%T$RayV9 z8w4mMYSFSufC|;JWM7*!g$4>z2ows)TH2Jhri;l7i&7da)s|32WgJ{b6i3Eo21i*` z#1?t1RI`?=?ydnu5N zw;%ELV?c$s7QEpuI5D+=bTwVP8E3lAE3>6SGl6k#iyQYb6Aw_j73v7PCDjG~5h|o> zD<6L=D;P-aiUspc%~;f5Dj7xxHY%}eR0pocNxQAk+zTZJ)%73;U4MED=i?x8b@^?n z#5|M;Bz!RovrvZ8zhFK1#jvZd2iHA_wMA&{5xySW^Z;9XY$SKAK@!Q_4!hF;2|n7^ zct5osq}Wl9+x%X6J;-pl>UuC3haXWb1(X8v0Sf>#0S-Vq0BeYU!FrGq^S4r_Uj}Rk z93q?0n&aQL9#lL;>9X};23sBHe}^&m7j*_l>V z%y+Opn~{ZOpD?5!=52>@?cF}_b%OV)kN}E*pZ~+a1Wa6NGFs3%(OyOT5jInT#~VW8 zi+neSun1vh1rA>>E>iV75ajC&dC_86Ri zq{EbETt^qVi~aoyEFdAPN?m^eiC)n9`6-OJ{x0X!x<>n?tJdN}Xnq(IaGMJkLZ-*n zRQ3l3kR5UOyR>S$R@cb!+1gur zkR%v;-)Jz~t1Hv+xw?|_hXeAJi!dKp-NVmvt*(U(GD#~`QeyrtQTr;E;>>05)ecS7 z^mA1i-_jOpA%rx~IRdv!ch)(CTOkHWyDTPu4W*fMFe(G08#Z&j^uFg2G5l8AU=InC zhcQB7t%*g0cq)BND?=pE58^1ICx=iR=BEZ+1DZq?#^5X?HhgMoD55DiUQBceh8EZA z;#~!E5CCGNEVmA9E}nDvE2${`9LOi$_e6xd72fq^LUM79vn}B~>ozn%;1) zc$@OiK~DiHY+IZp#@rt1Ui-P89U^XsqJR`tgmleee6&_l{H-kBrV7NAjGIl8BfW#9 z+tlj)c@>vH>bfywDi|`6)mtckVlf9jPHkm&!aWJ7F?nW2Noi$1rNbhP4C2Y(3h`Ai zuqgszQU}jwh6m+L#0H(7k)IDb&eyRef z%BY|3P-PWcAu9;fxJr>(&uSN>&hH~Z1ni=-n&ht`>x$>8u5n4MZq!t!;{yVx9;5$P z}BKQo8N>)YQBRWb4KXmaWLbp0o3+<88JImgmTzkykCV*;cYTbBXe| z<=XSN5UtD4DA1n2JD45e5thFc%AXA`EJMr5OU-2&p>~>%raX^|Ct1u3G7+(bd`7*; zvVtp|C=XG4BUpP8f02Wzy^&~hqNUjB(X%V zB!2q;9J2g5LU?S^EaQg1fS zjFVOp|0NIG3vZAlRUS0i>%do&BBdTPGP8t9M_6G9PaqEQh>Eb5<{9h)14sp4tjI3? zk%`kGlnT-e!-Y~xeQ;aq-+?`g)NyG6^yC0R63T-Xs-_~mSK&$%$_;d=p=+TyrK@fU z^V0|KH5su}GG}CA`~=%O6Q`P?xLF*z5ikyt4ARPZ6eL4}BPefIM+DvoZLHiatxSUp z3BZvolKBVeee+>bww5%oY&A{BH(QX?L@R7^x|~f;ak&1_p)APG$MvZ7CW47Vr!`~M z&~xWMPIC1yn{hdPF6`_5d&!JC5*UZ~Ij|uyfA~4lbmWsGe>-x#$A0g*3upb!@CB_| zaFJd3GU|xCml^(+NZe90{4VY`DG3h!rX|FwKf#*>Z?P9Xh8mBLIsXCN2lWx9GjErS zgSh+xYQB@vCYbU($Sn^Ar;y|U3!~;&mo=I#bhN*0hW`T2!ZK-ScJwtZD1Ht3>Am;D zKW0>X6y5sJ8n-+#D1#k5?Ya(qY*384i?9N{M%$6tae=2plX9x-bUvd85Fz2|eZbZ?ob0L%0K-2i@xySf!)pL*UwYSQkFvfnIO22AuD|96|giqyc zip%#Dg-{*>6Od|ehHN|M`bYs?RMPG@5lihm`0?@M z()p3;{7~UMh*BM2(W_PX2ybDHVj(^eZ4)%!LTB#9K%et<5?+FsImG-G4w@qx8}_lv zu+)nyl+o2kdcbXf0RUNrVDoM;mR)4xxy^x_gQx8Ry@QAI0mANJi*nv{0ya2xNqEva0$!!}EkyMPuG0G* zcnPL|XDEH?sxhz?amW%afdeg}6Y(+q@E6 z+O6f-s>a%Yx-9CG+78L?tOhBsmX7=qX!a1g;#p1We}F%o|GltmvIFl>K@rr04o04j zM(>BvK1oByX-MXk#hWjYT;5)sNF0fj3U8cWZD12hVOtfEG7i@!&#I7OKgQ^lFrWMf zMsI&C2JCUSl%tqQuG_}%!bytosZ5Riv;+Dl3fZI@+p&$IksA_dsA-MR&=ZANg$clA zHx#y&#T&h+`9!0)5mfEUib5=iZl~(RT%?vLJ zoFAlpHBw3unNAMP!4icQa9Z@xL|jG<5X?^MchJeURU*1vjj}>_f*uE5N$!M}GoKWr z#g&~iLdkzv&GCOhp;2?NsQ4X~g1A^=>shKfNy6UBj&)!XzR}PSg6ic(TBfj?6DT5q zOAPl(!Xur6^t)ORBj!CQ3ocY;aQ9yw&Or}|=2IyP1EpKLsP~H&^TQJi(g&eebEe%` z-|r8|#ImZ*>ro%9F$gT(Rx91wF!p?!2~o-^N|L6yY4wd_`JSaJh7-bhJ$8+SSFG#2 zvOFx1*0Dlafc6lm4wXR*za~hVK*eQcu#yHWDg%@aP6$kA>R6t65&KLipgny!ZZ3&k z&}GA&^~b2N$cgi(x2Wrdvjt3ljLh#yoa%QZOcml#9u<2em#L2-r8rmtO?Th|EDYn&qS z#!$Dz?arL?)@JPC2YLiw5D6|ukW`O}uD&yN`V_~^S#xL2#u3og25~8b(#)EHYldfu z=kGmJ#37D2BQ?q58G9*C@Khw@*s-?4BE$Yg1l^D9y}1I~Eo7uY)_X%{;kke$v+&zM zRA%A%*4~L2pZr~+ph#Ui8>i^M$7(LfLW-p}iabg$^gKf;Y&bXPGDQ>L6r(vK*5mbe8npxBax!o0u)JTidaoJBb4!3SpcJDGIhR6jFc3wufrc3=n8y%H?Q{{MS`9#C`%ikjm355M5jCxZ>=E!ivh} z3gh!@DH{tA12Mqp+}(-79zrQaf~h;Z1BRHoup7wGFKfZ=y%nuCX${@&;n%!PXT#`H zW?CcDwqZ20iDAd(nxz%LhV}WepzWNB6;OF@1co0_tkCMb*+7*tLK zqCgEgG$bS;e&EgvDX&37uVk6=o=DvqKrtu0(^->Y7tna zCy9vGU4kmny2h9&2nwFY9l5REW#gKX&}p%we6Jp$)Y(;qe0EJN%ShW%KL2$qcd<X77=jT>7FD0r zFtreRwovehiv)3k=%5)1RR0>OeW9fDq=|LGb`uzaIUC&^%{4W9Mu zbX)M}h$6%v0t*wTURxl%N)m)m&h*#gV1k@;JoV%qNk{mBQ=Wp3_h-p9iH*7s6w(dX7#&Kz<3_GD!gF4?^0=6tQz} z5cZ??wJVi)5iy~I+}*~}?JI0*^T6hbf&$;@TmlWO^A7dfA?~&m+9Y~KlWvr~4xtiD z0CqH&sU?cwl{8p>_dP7pq=%#9M&;@e+~ChCt5}s0G5|&Sl#b z#f_rb1~l%cewpA=&k~!EY6$LuUr#i!w;c@X z1`1OzcnSe`!|PLE1_v=G5lh_uA-#VC{9u#avV-~x3*F(xK^%1bQZ)RVg)bN5P&rnx zoSMmw9$7*rFs4R)BUB(nj1{jF$wGF-OTIp& z+fcnD3uEUQW7s7iy@{H33=^~=Ed@eN_aFk{Is9Uvd6F6Pp+qA9tr$0xH=zo4;@uyj zP7GOoIuT|ES`SV*A$APru|hvWqv;TJ!roY*f=ilJD4tnO+h7$uWF@V91RqS11|!32 ze1SsKi9+ZDGKD{ZSt%a7lCF9h6bMp$JSksz0i0JfR;vD}MgeV>uo&ARM0s#(hWW>| zq~rGYNdI03R$!-vo!|jw3SPvAt`MQ0U~JHMW7%nMIu6Emfh02oZrd(j$!a^qMMWaU zDeoL-A;sAWm9~>uWZ)Ijh1IR1Zk)14&Z`V70>qw0_r`_Y&<3qB*VBQfxe{dhz9m4O zG$lgyMddrlYw(hm;aS29=y_2((#rP{z0eI+jSiZ*{LLW_-|LKET>|qdEU~?W)3AXj zK3^=Tz+DWJ%Mn1YniZ@F8tCT}6XFM=G#0;`C5)tRVLjpsmAB9j&2zU<39BZI1FZ;u zqp$>D?Z^znS9KRiCI{YUy}1M>S&d5$kx}Y+!OG|w=u-0putaxS(giRHgG5P|96$4D zkf3p6GOWsHz^Z&ctV;51_$hYaXYm63tSE)UBG{Fez^;4=?8?haYqt6jXJ|xu4r{{j zL8X6n**TzrL7nbv-2E7K6zmf9fusW!r=(?|`kXDU4nsfx6b=2{skBIN>J>xIK@FJYuNTW}t`LI_DWkz+f z>WtGNN}PsUh9n9W2tEBYc!o*fSxlWG(B`_B0`|~CWWzNxO_67xhr**%Q7lrZKVVrr zN8=_WBB#_q*fk0Fmq?@P`t9#gH>>GxaIV{IyM}CYVH=dijBS?~5;bM#M}yCZ4uLKY zZS5T`cGxjAt?W)x96}u$C^i)7s6qVPFj;d=dql{FKLh77j)OgeL9W5iL0s$vhybN5 z)ftDdLsMOL47%2&tL7szzn1RKCMA7zkL>_Dt%C+V4?4>tyfYaa5i4SnyuY1U*>O4Z zKKn5Qgytr;SUxTsgAO;S!We75uwwSgOY8tZW=)zdc+O*#a2kyU2LSf*hT!3y5i_uU zKGBK`=Nb3rC{#sU@M87TM2ts=u#ko;cn?3=Lqk>BX>=C+@tSBIo#{9&4Bx^^30sSp zriDcZWXt_?58*bZ0hCbxO!9#ju-0hz9?lD}Clr|NA3&eRvSU!qg{RFI!-r4C#-C7I z3sl7Zk57UZN4qERxzWuw3Mc2o3y2!%f%#-BALGwxs7AI<3o4o{g3ndsgr2G3@sQlv zZDm&2osDq9UobqOu61BFK%ogZ7_0saas(L-?s@1=7}Lq`?Z`T~0pC|*9W*_L(2VEA zAKZ!hTn^E*#fieiPQj1ymj%awwm{sY^$q|_1eB8qr6QKZFGve5+0Cd^;4^>^f?43l zsMO#Q_?x9$yNWjTu)+F$9M}R-$9)#ML7Mq@lW-b0@CG|=927{#cD7OLz<}#Dg1v|f zyj}!G!KD=`bQ4q}h9W;?7*w6{CsvlpC`U_<&YRoxfdpK#cFxUKR5qj8R zNtH?=I6oO$i(p=Y#+VBTzkxo8<=PdgU~OKSMOmPYUkRE;Z-dwj7gbm&aHRL+&_3@{ z@8N1K*=1!x-V5!M_BSM`B)v5Vf{;vFq$i6VDmk9bs+rzA)j=MijYGj=cCce0lU0pd-RTy!=lUYqwq*fx(YK6%q!VueG_umDjamvV21NQ zEsbUbpSwi8SV>DwC*bWPZ z7t|7d7TXFztC$ZrfBldHsBolmC6$d8vZUsI-%G3ZB8TOu_fmHE`dgGzCa!|(Z4+yT zIIDqz2dH1%4$ibVz6-D5)laI1_wUZ9O=oI*G%2G_2>LIUcQ21NpLIt=-wsWzNXr8} zEdDd=2njXaW0d;RF6Bon&o4QQJNMW=r$iXb;(&j2Iw2HhqW4pO!W4%J=}5Q25aaD3 zBr#-&4aFpV&jsE#|4@DxuJt(Uxf63O%=8(DH1}xut`kW+5GD_Pg<6DqpNve>uE2%k z>5oBC=a5}kFjD)vRX9{id8O!uV|WeCTB^GM*CF0>7*wRI&Z97q)R|VVK#_j;et1$J z!4X3R8LZT33ZEt1NC{I4GNF*AK$CtNHZ#zD(e=P|z>5h&L-7frDmLNZDg=sd?m(zn z6rkVLwsU_BQ(8hSGD?{Ft%(ywawA3VPED+0bt+T@&ya3i77cA!;+-)^F0TB6HY<4t zOdrhAFllRYD4E!eyqQce3@yI#(LR57+~At9`a0j|D}4tds;&zR>u7tg??7Zg@MTAr z2YR-<_y+kZNy8Lf!+<2_?xrHRg{!5@b&+&CFN}#0L3w3LNyn~sAK2L#OQ1Uv`g(f$ zu!dzlOWW9l_5niDX3FO?K>oRsozzX4PkN?dqE+z*HTsAZaiZ?rOko3fWMmJml|B6{ z>)}XOs8=*bU<8)>R~{mZtD^$T z6}oo4rE2bv*e-->!QMg+@*?&#bOU?KUi*)2H?T+7OutwdHFXL}$Y-^dGK7V6Xfv(Y zlR&bzpbEAv(H(l4!R@Dg1(4EM7RSdzQ%U6V{rF8N-;K*YGgse?34G0p zh!BBqs{m8)P0`(MS?!F{=lT3+(g#Fv8oVA|oE! zgnd6Gd81&7xgm18=60k>IbAiHy(CBt3 z44AkH0B-2gI9z>k5j$$|?(M~VMJLbnMvtQ;UL|yB*lva35{`avJt*B4JL!B~G%u0v zJXq1B2=s$C6{N>2S0D5>W&6JC1N$XW6;1Mry8Y&iI8PrSErBLF_b_j?`M}~q_>3lY z0xt2j$4`b-8>L}8jkOMgu1Fy#DUZd?>r04T7pwmDk|R%+T(qS9j%y;k4Tjob-a43e#WRT})priH!Wx zv=48)@wV60h{I`35#A%}{ia5~+Z$9C?#K%t`Ritr76~S&9_1*E%15?s`OCksVQ`?` z=jUj~vYX9{pq-8+PH1c)_7#ua>JK(F!?}aaJX-%?XN0Z@koBmiT?ubDd`Dk61(~tT z3#Wo&Yq<$=QKA6bsi>o~;naFdJ!1dm`G1iD$Ifuv=YSSK_rG)8%>WI+0ayrF0ayq4 zEnpYm1HhMn^8m?L92XBz0LB7l0(d|bU@hQD!0!RO04D)00NK|_18^I_02mFp15gO? z0oDUH0(Jn70nPy8n!&dP+y>AA(g9h3TtF$n2Y3MRIAAki2jBz1R{+U3NDp8DOaROT zxB>S9)&u?s*a>I=Gy<9dk^exNfS~{#ARUke$OGIBSPggvuo+Mb==|KKuyN0(;OyBv z8>f5K#=UWut=-EW8+RP`KlR*xAlpIik${PSwbGvIIf8E za5-EF=jNRF8_DHzF8p!a0*K>n2iS{qN^+f!l7eF1>4yF7oSmD>O~UU)PR*$hA`Nep z0>`B}JNg~#@{DymogB2{a6735^|1trDu{A`cBC_C3F z&xSqEJBvzrIbR}om1O72`Fy8*j69UKt6-r!+r3O)fIPe1&K%ygY-D$b%bD$Q%5zGJ z`Rp8oM2N81hk4{4Z)s_X8!pc5B6%K=FDh|65eHt27zQI5^1z?)Q}^sXLY~@=h8J;X zWR9PR1b||myQBz76nNy>9*?tVp=+5u*Xu4QUL-F@REr4>_$nwa;0v-{1$VRPyH6wk z1;x3PVJAY$7kU@rTfVHs>kh|tq*<{Mr-94Z5ogXME-45L$jYrf zobIaOJbdm?gws;EQZH)T;sQ7C&33gH5S1iLfbc?_xC-s(mlQkE8;nB5fg$H9i*0x* zjTEju-zBBaVrmDT63`*nxws%F%x{oJ&ZVVjH>fd0nf8{+=&WS)@gl{bpCVMd0zTjE zL`y_1xU;kWtJ5VIC^wtW2D&}PA`feptkJujcX^#2LWXMj)L;jL0z^+%RDcGBN=M~Q z)!kd{^$-Dy68@*X^HhN@l@twsbONya^IYdG`_0fa6cgG+?-b``|j0b$Y+8*L7M|-RgU}n#w zVed6~r*#264}`rx81}w4?ERsz_lLvY9|?Pph>VJk>C#owt$UByp1q{9>#n~cuJ?^M z#rNskum6CX2g(Nx9+Gg&&|!(U-j+0c#K=(!rAn>Q>huPq$((Glrr1(Pk4dwS9hW|S z!tE0?CQWusnVLBbH$lyub;s;EbLY)pki9S`*O|8{zo76=S5a|E>0NFQ?_IoP>9V`; zSzflHoJ-`2IWHSGZ)N#PEcUuwc^hkr``fAu5hI{zi2Zis)KU9R+N+i3y3x${euP%Er^Ou)u{(pB3h*;V77jcbG zs07KpH=_M7GUD3)Lg6pZ{r|1a&$R$bDGq<36zQw|UB+EwhJ)TZ`@go_w)>KC?eF4S z1bTa{C0E{Cv8wXE`>U!~``6Sw@Zj2q9)4uquO9vN`o|uB;>o9;{>?KRo_%iP^S^yz z)9+q<>E%~`|A)=5{_(Zfw`|?E{f#%@+VS?zcWUc)?cVdJz5D9-A2@jE-S-YR9C`of zu|I$C;qi|?{^Z1`CqHXE_4ya4|MKNug{Hp+&iwtWubaR5$Juk=p1*MMyYGK!`4LAb z{@DTX>I2?24T%5g{QsxZ|EKBya}$!QyR!+&e>(r^>87G06LA;7U%@k6o`FYBFU#<7 z85yH;b4TF?k0XQQQUTx{V7<#&4BVuW#cl7Cv8p8NOlK*U?xKfO?;@{<2QS9!VsT8s znu6j=Ep-NoO~@{0uSkdD=MXQ&$ssO^2T+V~%P0;CPhlwx zmzm9b-MMg}_}m5TZCbw9?Frh=aOM^}gCEnd+#u_Wl49nX=?$9MJcZ>Dj)Q*={>Tpp zcLKb^1`cqCH>4=y3lx9}5CUF64_E?O;0)A}1Ih@VF_R}vo<1#sUb!wl-+jK7K1?{H z?(^MuuP-hp1~bme%1TVk6$+ojN4Hue4l_7r_%NTuq|@Q3LNIxvugZr|9HyQ5`S}t_ z*QKSUOG-;S%s0WOaAU5Q>jHt>=YZ3|vMKTMm^_ZfQp_c1D+5|mP0R+XAYUv_ZbHdI z*tPLPLrHoa{* zpM&)$mV#LG5Jybz^$=#mZt)C5o*453E5=1mFfM3?%=jR!9wJj}P{ zgUNm{Q37U;mo2Q>atdS)ix*2)C;7g`GZ?G4yu5;?>TIieuoVi23DBd!)JqUh1_)T&0WF&pkZLufK|7I z(FUPAC($9yLa@k!yb`b>z}^9Q!AdI1Mpg+Sd65%5vSr*Y9y$A`Jkygd8vmtVQmEAU zrH#%db5k?ZGLJ@|Y>0bqf7;H&L-QWKG*C+ebB<{at$jRmvatGJHV5k?S_FCKWEK>a zx}2dZJ14im!_QfQ%3hj_g22DNXW`@3}-ehBbL*Ebr z=-@uD&riF*H{hq;E9F1!zHU%Qcbr0NOMk==8>a*iZf6JExURu>4o_!1*9;Z?k=qkt z@5jU9BezM3?f&ivd+!|Igb_CK&eA5cv-?8|8(Fuxho@s!*|^DotGO@N*f<{`+#Rx6 zZTTkq5A`-O+Tw2rb6;ezaVr4f?w#>_!ramQP*`{hR{*{}Jy$FDk4D?b`KseEOxpv zG>#ED>SK7f%f1-lIPN|ci#T9T#CVy?-N>bSJOzu2gDkyiCG7}spOJ4ub_{LQh4%F} za%0%MCTNk$anDChp?TL8bMdR7@3v^+KQ|KbX7ah|7`9!Q<3!Ro@dw!?53>aNrsz|1 zbFqbl*?w}=L~xyhv_K3ah-zWk6Jv67H&Dool3cILITjO|N#HWWx4@+ZXL!zFl2f@c zt`bk^>vsFpN%o1MIcR))9HQ?T*oTeIbU87nKOC8k-3PYy$Sov)V18nMq?EFr3bypL z5dXi8T1TU&7w5Bl=GvF$V5xzPL!idCJfEjrT-`ZpyeG|x9k)eJw*zFL0^Aop&E-L| z;*RH^=qtF-Sx@hXPITEzUkuH!BgfPJDs6%|bH^8BN=n>*%x)>|Fq;1n8z)bLudwqAj5>Sg zzCc>R-N(*>Qj2plOACs}lwhZYb2CgGL~<^l-c!doI8INcG1;C$@7+N;(4iog)m!kC zxp!H)iS-t{_R(45t`?)vLFOisu_@#dr0V<3ZK_lJjE|nmyQUXos+!9!iproprqRoI z=d_X;1-Z^K`B>Z4Moq<*6IDH|d06|kx9`Pd^0eRTN#%~Sc6FHpmwlBGGq~$wLP<<3 zX-k*;_{#C1zLrqwinUiH8h4ib5@OSql{&c>#1`vty4l(Zo14rVR#lG>9j6uK+!+j4 zN8vj5JE$1TSlwTSEwCb5sHJ*X%y{FDF^Xjt+zkpuldp+v6IN^>TvF7;F&WvVA|`?wMhkc_n047zzUWkIFa`#gVVg1jH zh_NoOC!ZWgW2uCBJjeAFYk07aN#!<&#W~r_mwI`sX$c*C&EPUAW_xk&K z*cVXG(Q!oma>F#EzxhS?8hG|c`mPaLyxH^bZk zb0Ex_Fy%1iFbBa*JZfXYdsXj47dO6_!X)NSKFqse&V<*bil8j-5^}7C`lYOsWTD zQavCy+CvVxQM?qEOeuikl>x|(>Iu~m0)0JQK`S;@W z-xd4SH%&wguFkao@51okpUzdQ05w@WSFHka=KMe9=l}Dnuqg_s$|9pB8_|I*xOdsT zgM#Jq+t0+84bO|_%HK57P|4X=_?Wo~{_CFm_&K@geA(~HOQMx6Xl}Vi|EWR$TjBrk zv!|c!%l+k9;n~?&kAKAm7Geqpo+%&C`&iD+|G4mD)#d(=9zWUm9e7+TM9gA86?r^k zf<7ZI3-Pb9Xpp3Ki0GgFCOkXiN>>hr9?2)TW8*W-uTJ59NL*EV9O;vPGO4Voamqfj zaU21j+J0hKG9$tx4z^cUWNklpM&z?Lwz8{L19C2QH=7KNBWQ%dVHARlY8?w;yTrlIW6S$UostO z|6KS6;4Q<+snEKakO+V8+@F%$&G2Ie+yS8Z{;vUB0LK7l0oNge3IOSfECPhWnBX=G zumtcZ;B~-Jz&`*o_!|Yt0Js35hxR!_dmUsqLfoAmS-Om3`Q`cFN&z%kJP~Zok9EI~ zec~r%PgO{91$%1i>2RBg3VH`TofZRd$!&*VmKM2+J(j^x)*F35w>e-_w-U~gLnD@Q5@TYGkw%ad_J#l!Y+PSsX!*Qya zGlMVx%r{LS8&H0c3W-9h=&u-}NK{x9lN1XSk1PJ5_>oH|gX$oi0^3TenD8 zqAS;}(;d^D()G~G^!@a5y;c9UzC}OWpfQX$Of#G^{N2#QIKb#Kx{Vdan=Fr8T2hb^ zIrxjHheMUWRUTA+ru;^EQF)1BIz+{*mZ>UK@2lph7pn8s#cE!Cw|b?zO8ubvQT0>m zjp~=wuc_Zs?^YjHA6I{>{zCnC^?7xKrl;n5&0x(i%?OQJGhXA+%+us*N;LOq)@pvO zc}ep}%}1KgG=I~a*Ywa{uN|r#p|xwLXlH11v~KNE?MiKp_6h9QCwW7zP>cG`I~lhKCK08=f(|V0gvw zy5UX3F2jDqdxj4TpBVy%X2Z9J9}KOA7-M&%%-GwQU^E%+#tFvh#ygBoW1(@0vC`-_ zt~YKs?lgXE>~2am%`)Yhs!R`=)|)n%PMN+m^)jo?GtGCJE6l$#zhORU{)_o*bD!j4 z$s>{-$up8mlUF6LPJSf$x5)>R=Ud7x4_Y=@Jk~PnYU}gXm#urO&DPkIQ7NNS?n$|i zXpWBII1EnFM=@G4PBBmMN5wY9amA;KNac3r+sebrzbhkDT~R+CP<^i2q28lDp+2X+ zT{B-y>jf;RJXF5PRo?YbXzk@{}>Ui#kpzWQqY!}|65 z!3L$lhVq|hc);)n!wy4=ak=pkV;A#H<|*cR=6v&FbGf9-f?& zygvD*0$L**I0jJebsu%ddzyldKP&}Oi`xjQ*0^rlxfJ*#*{57$0=Vn zoV$ealwzOadgVOjE2#6cRc_RwcT}&d-%#&UA5(v%?ytK|r_fE%O$OGBbUbS9L%NN+ zKj^mT-qO|T_UpdXozY!D2}kR@>*G+5N9lF?Wc>vF6n&O{zTTyG>(}U?(m#jN?_=0v zt}~xA_f4Lb{8+Nfy2M&;T?bmnq}-k|C1q|39X!beKCda>RQyS~2(9fURS)&eYNL9U zj@Mr@j4)0$YRyWE)?&0+EU6Z|WxOTBGT54E9c`Uroo6ky-fdlJU2A>P`aA2p*3Ybe zw??MKrl?Y!DSS#<%7&DNl+RMQ1>hSXjTe<4DlaH+QkAQoRqat7R>i1$t4FIRs0-A~ z)PD6^w2kl7G1|XrIo+eWL%QjPp2nMu2T|9inC6*uW*cf$zvRiuE0UWn+1976o2<3g zChLHdi7CX8J%RXtO?glV3cd18Wi4vR3FTjui7LIS1Z{M`>X_=J>TA{as#i2SHG4IO zG)FWaYQ|{CYv*eVS(|zsZR)son9hWHQmK1H_kylo_nwZ^&j3Y#qyL@$i2iT-B*Sb& zk>MS~pU_Xp&`;cIR2q$FB?ZR2P-mVrK5u;0C>Xyn{%F*hQcSm-mY6C{e$x}CXH45o zJ5BGJj+#C<38wR=Ran`=pRO>S94(l%Kd22*ULW+>`E!7vF zm^YK6L{X)9Q1NTUlZs~)8x`*=&Y}m6SN2!Rl?muchbt9IjdF!@m9k2?M!8mb9<8Il zYKSUPHC&}oO;O#WdPViRYP)KOsur}bR~=F{sQRkq=us2Z!_`l#H>=-P?^hpHf1>_U zeWPZq=2K0LcC&V*u2pxx{vqUkv;Ix}F8yKs2l_6C-x%VIgV5IP=0)aZX21C<^B+*h zj+!T+ZmmZvcmeHsv-NfBr`D*HL1+iVQxqwh6hlffT0>gO11alL)~7s~@=OXf1Z0ov zqPR{m9LFvVie!aNk*)A6-d5~U)GH1t8WhLS=1(XZ6}Pec8I;M&{mKuNUn_fJe7IYs zR^av>#~wx^<@SOflv% z^RE%-Ve{wav*!5ZO!NdRlAlgKmmFiUS>{-_S$0{PEtf1^t>dh-tZ!NC(bfj1+?JA0 zWw}|*@BNBoyny>4(>udFU^o{y6dWj*qdjbW`} zv*D1T0V9gcs4zN=rN*_!&Bg}f3FA5AMPt0lV47)Kicw>`>A2~%sl~*Z_8nkg!*wpQHoJ_sd~BE zr(T7TcMW=yb?OFvy+L8LA@v1Ff1U9e<3{5q R@CyZgp};Q`_@73B{{w}j;d}r9 literal 0 HcmV?d00001 diff --git a/pip/vendor/distlib/w64.exe b/pip/vendor/distlib/w64.exe new file mode 100644 index 0000000000000000000000000000000000000000..acf9e6952f513a9a6d18a8f19ff4c662ac8cabc7 GIT binary patch literal 69120 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

*+ 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