From 97ea0fc43983d93052cd25f94c015f648bf33b96 Mon Sep 17 00:00:00 2001 From: Janus Date: Wed, 15 Aug 2018 19:01:28 +0200 Subject: [PATCH 01/76] aiorpcx: replace network loop with asyncio and try to maintain ten sessions --- electrum/address_synchronizer.py | 4 +- electrum/daemon.py | 4 +- electrum/gui/qt/main_window.py | 2 +- electrum/network.py | 85 +++++++++++++++++++++++++------- electrum/util.py | 13 +++++ 5 files changed, 85 insertions(+), 23 deletions(-) diff --git a/electrum/address_synchronizer.py b/electrum/address_synchronizer.py index 56203d671..d0e8dff1f 100644 --- a/electrum/address_synchronizer.py +++ b/electrum/address_synchronizer.py @@ -139,14 +139,14 @@ class AddressSynchronizer(PrintError): if self.network is not None: self.verifier = SPV(self.network, self) self.synchronizer = Synchronizer(self, network) - network.add_jobs([self.verifier, self.synchronizer]) + #network.add_jobs([self.verifier, self.synchronizer]) else: self.verifier = None self.synchronizer = None def stop_threads(self): if self.network: - self.network.remove_jobs([self.synchronizer, self.verifier]) + #self.network.remove_jobs([self.synchronizer, self.verifier]) self.synchronizer.release() self.synchronizer = None self.verifier = None diff --git a/electrum/daemon.py b/electrum/daemon.py index ccdce4a0a..72d6ece8b 100644 --- a/electrum/daemon.py +++ b/electrum/daemon.py @@ -128,8 +128,8 @@ class Daemon(DaemonThread): self.network = Network(config) self.network.start() self.fx = FxThread(config, self.network) - if self.network: - self.network.add_jobs([self.fx]) + #if self.network: + # self.network.add_jobs([self.fx]) self.gui = None self.wallets = {} # Setup JSONRPC server diff --git a/electrum/gui/qt/main_window.py b/electrum/gui/qt/main_window.py index 4d2eb241a..b62dd3e9b 100644 --- a/electrum/gui/qt/main_window.py +++ b/electrum/gui/qt/main_window.py @@ -712,7 +712,7 @@ class ElectrumWindow(QMainWindow, MessageBoxMixin, PrintError): if not self.wallet: return - if self.network is None or not self.network.is_running(): + if self.network is None: text = _("Offline") icon = QIcon(":icons/status_disconnected.png") diff --git a/electrum/network.py b/electrum/network.py index 5793ad621..4a7215ced 100644 --- a/electrum/network.py +++ b/electrum/network.py @@ -39,20 +39,42 @@ import dns.resolver import socks from . import util -from .util import print_error +from .util import print_error, PrintError from . import bitcoin from .bitcoin import COIN from . import constants -from .interface import Connection, Interface from . import blockchain from .version import ELECTRUM_VERSION, PROTOCOL_VERSION from .i18n import _ from .blockchain import InvalidHeader +import aiorpcx, asyncio, ssl +import concurrent.futures NODES_RETRY_INTERVAL = 60 SERVER_RETRY_INTERVAL = 10 +class Interface(PrintError): + @util.aiosafe + async def run(self): + self.host, self.port, self.protocol = self.server.split(':') + async with aiorpcx.ClientSession(self.host, self.port) as session: + ver = await session.send_request('server.version', [ELECTRUM_VERSION, PROTOCOL_VERSION]) + print(ver) + + def __init__(self, server): + self.exception = None + self.server = server + self.fut = asyncio.get_event_loop().create_task(self.run()) + + def has_timed_out(self): + return self.fut.done() + + def queue_request(self, method, params, msg_id): + pass + + def close(self): + self.fut.cancel() def parse_servers(result): """ parse servers list into dict format""" @@ -162,7 +184,7 @@ def serialize_server(host, port, protocol): return str(':'.join([host, port, protocol])) -class Network(util.DaemonThread): +class Network(PrintError): """The Network class manages a set of connections to remote electrum servers, each connected socket is handled by an Interface() object. Connections are initiated by a Connection() thread which stops once @@ -179,7 +201,6 @@ class Network(util.DaemonThread): def __init__(self, config=None): if config is None: config = {} # Do not use mutables as default values! - util.DaemonThread.__init__(self) self.config = SimpleConfig(config) if isinstance(config, dict) else config self.num_server = 10 if not self.config.get('oneserver') else 0 self.blockchains = blockchain.read_blockchains(self.config) # note: needs self.blockchains_lock @@ -244,6 +265,7 @@ class Network(util.DaemonThread): self.socket_queue = queue.Queue() self.start_network(deserialize_server(self.default_server)[2], deserialize_proxy(self.config.get('proxy'))) + self.asyncio_loop = asyncio.get_event_loop() def with_interface_lock(func): def func_wrapper(self, *args, **kwargs): @@ -424,7 +446,7 @@ class Network(util.DaemonThread): self.print_error("connecting to %s as new interface" % server) self.set_status('connecting') self.connecting.add(server) - Connection(server, self.socket_queue, self.config.path) + self.socket_queue.put(server) def start_random_interface(self): with self.interface_lock: @@ -781,10 +803,10 @@ class Network(util.DaemonThread): if b.catch_up == server: b.catch_up = None - def new_interface(self, server, socket): + def new_interface(self, server): # todo: get tip first, then decide which checkpoint to use. self.add_recent_server(server) - interface = Interface(server, socket) + interface = Interface(server) interface.blockchain = None interface.tip_header = None interface.tip = 0 @@ -804,12 +826,12 @@ class Network(util.DaemonThread): '''Socket maintenance.''' # Responses to connection attempts? while not self.socket_queue.empty(): - server, socket = self.socket_queue.get() + server = self.socket_queue.get() if server in self.connecting: self.connecting.remove(server) if socket: - self.new_interface(server, socket) + self.new_interface(server) else: self.connection_down(server) @@ -1078,16 +1100,15 @@ class Network(util.DaemonThread): with b.lock: b.update_size() - def run(self): + def _run(self): self.init_headers_file() - while self.is_running(): - self.maintain_sockets() - self.wait_on_sockets() - self.maintain_requests() - self.run_jobs() # Synchronizer and Verifier - self.process_pending_sends() - self.stop_network() - self.on_stop() + these = [self.maintain_sessions()] + these = [self.asyncio_loop.create_task(x) for x in these] + self.gat = asyncio.gather(*these) + try: + self.asyncio_loop.run_until_complete(self.gat) + except concurrent.futures.CancelledError: + pass def on_notify_header(self, interface, header_dict): try: @@ -1321,3 +1342,31 @@ class Network(util.DaemonThread): @classmethod def max_checkpoint(cls): return max(0, len(constants.net.CHECKPOINTS) * 2016 - 1) + + def start(self): + self.fut = threading.Thread(target=self._run) + self.fut.start() + + def stop(self): + async def stop(): + self.gat.cancel() + asyncio.run_coroutine_threadsafe(stop(), self.asyncio_loop) + + def join(self): + return self.fut.join(1) + + async def maintain_sessions(self): + while True: + while self.socket_queue.qsize() > 0: + server = self.socket_queue.get() + self.new_interface(server) + remove = [] + for k, i in self.interfaces.items(): + if i.has_timed_out(): + remove.append(k) + for k in remove: + self.connection_down(k) + for i in range(self.num_server - len(self.interfaces)): + self.start_random_interface() + self.notify('updated') + await asyncio.sleep(1) diff --git a/electrum/util.py b/electrum/util.py index 7963c1a2b..4a3629cd4 100644 --- a/electrum/util.py +++ b/electrum/util.py @@ -925,6 +925,19 @@ def make_dir(path, allow_symlink=True): os.mkdir(path) os.chmod(path, stat.S_IRUSR | stat.S_IWUSR | stat.S_IXUSR) +def aiosafe(f): + # save exception in object. + # f must be a method of a PrintError instance. + # aiosafe calls should not be nested + async def f2(*args, **kwargs): + self = args[0] + try: + return await f(*args, **kwargs) + except BaseException as e: + self.print_error("Exception in", f.__name__, ":", e.__class__.__name__, str(e)) + traceback.print_exc(file=sys.stderr) + self.exception = e + return f2 TxMinedStatus = NamedTuple("TxMinedStatus", [("height", int), ("conf", int), From 8080a713b2fa8e56cc5d9d8bf977c2cdf55c1f47 Mon Sep 17 00:00:00 2001 From: Janus Date: Thu, 16 Aug 2018 12:09:41 +0200 Subject: [PATCH 02/76] aiorpcx: pass ssl context, sleep after connecting --- electrum/network.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/electrum/network.py b/electrum/network.py index 4a7215ced..01febd145 100644 --- a/electrum/network.py +++ b/electrum/network.py @@ -58,9 +58,13 @@ class Interface(PrintError): @util.aiosafe async def run(self): self.host, self.port, self.protocol = self.server.split(':') - async with aiorpcx.ClientSession(self.host, self.port) as session: + sslc = ssl.SSLContext(ssl.PROTOCOL_TLS) if self.protocol == 's' else None + async with aiorpcx.ClientSession(self.host, self.port, ssl=sslc) as session: ver = await session.send_request('server.version', [ELECTRUM_VERSION, PROTOCOL_VERSION]) print(ver) + while True: + print("sleeping") + await asyncio.sleep(1) def __init__(self, server): self.exception = None From 89a01a64636f9f061a7c9cf2eb842feff12cb92f Mon Sep 17 00:00:00 2001 From: Janus Date: Thu, 16 Aug 2018 18:16:25 +0200 Subject: [PATCH 03/76] aiorpcx: pin certificates --- electrum/__init__.py | 2 +- electrum/interface.py | 404 ++++++++++-------------------------------- electrum/network.py | 37 +--- 3 files changed, 105 insertions(+), 338 deletions(-) diff --git a/electrum/__init__.py b/electrum/__init__.py index 48a60c15c..556fc329b 100644 --- a/electrum/__init__.py +++ b/electrum/__init__.py @@ -4,7 +4,7 @@ from .wallet import Wallet from .storage import WalletStorage from .coinchooser import COIN_CHOOSERS from .network import Network, pick_random_server -from .interface import Connection, Interface +from .interface import Interface from .simple_config import SimpleConfig, get_config, set_config from . import bitcoin from . import transaction diff --git a/electrum/interface.py b/electrum/interface.py index 357d913a2..678c726a6 100644 --- a/electrum/interface.py +++ b/electrum/interface.py @@ -28,343 +28,131 @@ import socket import ssl import sys import threading -import time import traceback +import aiorpcx +import asyncio import requests -from .util import print_error +from .util import PrintError ca_path = requests.certs.where() from . import util from . import x509 from . import pem +from .version import ELECTRUM_VERSION, PROTOCOL_VERSION +class Interface(PrintError): -def Connection(server, queue, config_path): - """Makes asynchronous connections to a remote Electrum server. - Returns the running thread that is making the connection. - - Once the thread has connected, it finishes, placing a tuple on the - queue of the form (server, socket), where socket is None if - connection failed. - """ - host, port, protocol = server.rsplit(':', 2) - if not protocol in 'st': - raise Exception('Unknown protocol: %s' % protocol) - c = TcpConnection(server, queue, config_path) - c.start() - return c - - -class TcpConnection(threading.Thread, util.PrintError): - verbosity_filter = 'i' - - def __init__(self, server, queue, config_path): - threading.Thread.__init__(self) - self.config_path = config_path - self.queue = queue + def __init__(self, server, config_path, connecting): + self.connecting = connecting self.server = server - self.host, self.port, self.protocol = self.server.rsplit(':', 2) - self.host = str(self.host) - self.port = int(self.port) - self.use_ssl = (self.protocol == 's') - self.daemon = True + self.host, self.port, self.protocol = self.server.split(':') + self.config_path = config_path + self.cert_path = os.path.join(self.config_path, 'certs', self.host) + self.fut = asyncio.get_event_loop().create_task(self.run()) def diagnostic_name(self): return self.host - def check_host_name(self, peercert, name): - """Simple certificate/host name checker. Returns True if the - certificate matches, False otherwise. Does not support - wildcards.""" - # Check that the peer has supplied a certificate. - # None/{} is not acceptable. - if not peercert: - return False - if 'subjectAltName' in peercert: - for typ, val in peercert["subjectAltName"]: - if typ == "DNS" and val == name: - return True - else: - # Only check the subject DN if there is no subject alternative - # name. - cn = None - for attr, val in peercert["subject"]: - # Use most-specific (last) commonName attribute. - if attr == "commonName": - cn = val - if cn is not None: - return cn == name - return False - - def get_simple_socket(self): + async def is_server_ca_signed(self, sslc): try: - l = socket.getaddrinfo(self.host, self.port, socket.AF_UNSPEC, socket.SOCK_STREAM) - except socket.gaierror: - self.print_error("cannot resolve hostname") - return - e = None - for res in l: - try: - s = socket.socket(res[0], socket.SOCK_STREAM) - s.settimeout(10) - s.connect(res[4]) - s.settimeout(2) - s.setsockopt(socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1) - return s - except BaseException as _e: - e = _e - continue - else: - self.print_error("failed to connect", str(e)) - - @staticmethod - def get_ssl_context(cert_reqs, ca_certs): - context = ssl.create_default_context(purpose=ssl.Purpose.SERVER_AUTH, cafile=ca_certs) - context.check_hostname = False - context.verify_mode = cert_reqs - - context.options |= ssl.OP_NO_SSLv2 - context.options |= ssl.OP_NO_SSLv3 - context.options |= ssl.OP_NO_TLSv1 - - return context - - def get_socket(self): - if self.use_ssl: - cert_path = os.path.join(self.config_path, 'certs', self.host) - if not os.path.exists(cert_path): - is_new = True - s = self.get_simple_socket() - if s is None: - return - # try with CA first - try: - context = self.get_ssl_context(cert_reqs=ssl.CERT_REQUIRED, ca_certs=ca_path) - s = context.wrap_socket(s, do_handshake_on_connect=True) - except ssl.SSLError as e: - self.print_error(e) - except: - return - else: - try: - peer_cert = s.getpeercert() - except OSError: - return - if self.check_host_name(peer_cert, self.host): - self.print_error("SSL certificate signed by CA") - return s - # get server certificate. - # Do not use ssl.get_server_certificate because it does not work with proxy - s = self.get_simple_socket() - if s is None: - return - try: - context = self.get_ssl_context(cert_reqs=ssl.CERT_NONE, ca_certs=None) - s = context.wrap_socket(s) - except ssl.SSLError as e: - self.print_error("SSL error retrieving SSL certificate:", e) - return - except: - return - - try: - dercert = s.getpeercert(True) - except OSError: - return - s.close() - cert = ssl.DER_cert_to_PEM_cert(dercert) - # workaround android bug - cert = re.sub("([^\n])-----END CERTIFICATE-----","\\1\n-----END CERTIFICATE-----",cert) - temporary_path = cert_path + '.temp' - util.assert_datadir_available(self.config_path) - with open(temporary_path, "w", encoding='utf-8') as f: - f.write(cert) - f.flush() - os.fsync(f.fileno()) - else: - is_new = False + await self.open_session(sslc, do_sleep=False) + except ssl.SSLError as e: + assert e.reason == 'CERTIFICATE_VERIFY_FAILED' + return False + return True - s = self.get_simple_socket() - if s is None: + @util.aiosafe + async def run(self): + if self.protocol != 's': + await self.open_session(None, execute_after_connect=lambda: self.connecting.remove(self.server)) return - if self.use_ssl: - try: - context = self.get_ssl_context(cert_reqs=ssl.CERT_REQUIRED, - ca_certs=(temporary_path if is_new else cert_path)) - s = context.wrap_socket(s, do_handshake_on_connect=True) - except socket.timeout: - self.print_error('timeout') - return - except ssl.SSLError as e: - self.print_error("SSL error:", e) - if e.errno != 1: - return - if is_new: - rej = cert_path + '.rej' - if os.path.exists(rej): - os.unlink(rej) - os.rename(temporary_path, rej) - else: - util.assert_datadir_available(self.config_path) - with open(cert_path, encoding='utf-8') as f: - cert = f.read() + ca_sslc = ssl.create_default_context(ssl.Purpose.SERVER_AUTH) + exists = os.path.exists(self.cert_path) + if exists: + with open(self.cert_path, 'r') as f: + contents = f.read() + if contents != '': # if not CA signed try: - b = pem.dePem(cert, 'CERTIFICATE') + b = pem.dePem(contents, 'CERTIFICATE') + except SyntaxError: + exists = False + else: x = x509.X509(b) - except: - traceback.print_exc(file=sys.stderr) - self.print_error("wrong certificate") - return - try: - x.check_date() - except: - self.print_error("certificate has expired:", cert_path) - os.unlink(cert_path) - return - self.print_error("wrong certificate") - if e.errno == 104: - return - return - except BaseException as e: - self.print_error(e) - traceback.print_exc(file=sys.stderr) - return - - if is_new: - self.print_error("saving certificate") - os.rename(temporary_path, cert_path) - - return s - - def run(self): - socket = self.get_socket() - if socket: - self.print_error("connected") - self.queue.put((self.server, socket)) - - -class Interface(util.PrintError): - """The Interface class handles a socket connected to a single remote - Electrum server. Its exposed API is: - - - Member functions close(), fileno(), get_responses(), has_timed_out(), - ping_required(), queue_request(), send_requests() - - Member variable server. - """ - - def __init__(self, server, socket): - self.server = server - self.host, _, _ = server.rsplit(':', 2) - self.socket = socket - - self.pipe = util.SocketPipe(socket) - self.pipe.set_timeout(0.0) # Don't wait for data - # Dump network messages. Set at runtime from the console. - self.debug = False - self.unsent_requests = [] - self.unanswered_requests = {} - self.last_send = time.time() - self.closed_remotely = False - - def diagnostic_name(self): - return self.host - - def fileno(self): - # Needed for select - return self.socket.fileno() - - def close(self): - if not self.closed_remotely: - try: - self.socket.shutdown(socket.SHUT_RDWR) - except socket.error: - pass - self.socket.close() - - def queue_request(self, *args): # method, params, _id - '''Queue a request, later to be send with send_requests when the - socket is available for writing. - ''' - self.request_time = time.time() - self.unsent_requests.append(args) - - def num_requests(self): - '''Keep unanswered requests below 100''' - n = 100 - len(self.unanswered_requests) - return min(n, len(self.unsent_requests)) + try: + x.check_date() + except x509.CertificateError: + self.print_error("certificate has expired:", self.cert_path) + os.unlink(self.cert_path) + exists = False + if not exists: + ca_signed = await self.is_server_ca_signed(ca_sslc) + if ca_signed: + with open(self.cert_path, 'w') as f: + # empty file means this is CA signed, not self-signed + f.write('') + else: + await self.save_certificate() + siz = os.stat(self.cert_path).st_size + if siz == 0: # if CA signed + sslc = ca_sslc + else: + sslc = ssl.create_default_context(ssl.Purpose.SERVER_AUTH, cafile=self.cert_path) + sslc.check_hostname = 0 + await self.open_session(sslc, execute_after_connect=lambda: self.connecting.remove(self.server)) + + async def save_certificate(self): + if not os.path.exists(self.cert_path): + # we may need to retry this a few times, in case the handshake hasn't completed + for _ in range(10): + dercert = await self.get_certificate() + if dercert: + self.print_error("succeeded in getting cert") + with open(self.cert_path, 'w') as f: + cert = ssl.DER_cert_to_PEM_cert(dercert) + # workaround android bug + cert = re.sub("([^\n])-----END CERTIFICATE-----","\\1\n-----END CERTIFICATE-----",cert) + f.write(cert) + # even though close flushes we can't fsync when closed. + # and we must flush before fsyncing, cause flush flushes to OS buffer + # fsync writes to OS buffer to disk + f.flush() + os.fsync(f.fileno()) + break + await asyncio.sleep(1) + assert False, "could not get certificate" - def send_requests(self): - '''Sends queued requests. Returns False on failure.''' - self.last_send = time.time() - make_dict = lambda m, p, i: {'method': m, 'params': p, 'id': i} - n = self.num_requests() - wire_requests = self.unsent_requests[0:n] + async def get_certificate(self): + sslc = ssl.SSLContext() try: - self.pipe.send_all([make_dict(*r) for r in wire_requests]) - except BaseException as e: - self.print_error("pipe send error:", e) - return False - self.unsent_requests = self.unsent_requests[n:] - for request in wire_requests: - if self.debug: - self.print_error("-->", request) - self.unanswered_requests[request[2]] = request - return True - - def ping_required(self): - '''Returns True if a ping should be sent.''' - return time.time() - self.last_send > 300 + async with aiorpcx.ClientSession(self.host, self.port, ssl=sslc) as session: + return session.transport._ssl_protocol._sslpipe._sslobj.getpeercert(True) + except ValueError: + return None + + async def open_session(self, sslc, do_sleep=True, execute_after_connect=lambda: None): + async with aiorpcx.ClientSession(self.host, self.port, ssl=sslc) as session: + ver = await session.send_request('server.version', [ELECTRUM_VERSION, PROTOCOL_VERSION]) + print(ver) + connect_hook_executed = False + while do_sleep: + if not connect_hook_executed: + connect_hook_executed = True + execute_after_connect() + await asyncio.wait_for(session.send_request('server.ping'), 5) + await asyncio.sleep(300) def has_timed_out(self): - '''Returns True if the interface has timed out.''' - if (self.unanswered_requests and time.time() - self.request_time > 10 - and self.pipe.idle_time() > 10): - self.print_error("timeout", len(self.unanswered_requests)) - return True - - return False - - def get_responses(self): - '''Call if there is data available on the socket. Returns a list of - (request, response) pairs. Notifications are singleton - unsolicited responses presumably as a result of prior - subscriptions, so request is None and there is no 'id' member. - Otherwise it is a response, which has an 'id' member and a - corresponding request. If the connection was closed remotely - or the remote server is misbehaving, a (None, None) will appear. - ''' - responses = [] - while True: - try: - response = self.pipe.get() - except util.timeout: - break - if not type(response) is dict: - responses.append((None, None)) - if response is None: - self.closed_remotely = True - self.print_error("connection closed remotely") - break - if self.debug: - self.print_error("<--", response) - wire_id = response.get('id', None) - if wire_id is None: # Notification - responses.append((None, response)) - else: - request = self.unanswered_requests.pop(wire_id, None) - if request: - responses.append((request, response)) - else: - self.print_error("unknown wire ID", wire_id) - responses.append((None, None)) # Signal - break + return self.fut.done() - return responses + def queue_request(self, method, params, msg_id): + pass + def close(self): + self.fut.cancel() def check_cert(host, cert): try: diff --git a/electrum/network.py b/electrum/network.py index 01febd145..9e5b33d83 100644 --- a/electrum/network.py +++ b/electrum/network.py @@ -47,38 +47,14 @@ from . import blockchain from .version import ELECTRUM_VERSION, PROTOCOL_VERSION from .i18n import _ from .blockchain import InvalidHeader +from .interface import Interface -import aiorpcx, asyncio, ssl +import asyncio import concurrent.futures NODES_RETRY_INTERVAL = 60 SERVER_RETRY_INTERVAL = 10 -class Interface(PrintError): - @util.aiosafe - async def run(self): - self.host, self.port, self.protocol = self.server.split(':') - sslc = ssl.SSLContext(ssl.PROTOCOL_TLS) if self.protocol == 's' else None - async with aiorpcx.ClientSession(self.host, self.port, ssl=sslc) as session: - ver = await session.send_request('server.version', [ELECTRUM_VERSION, PROTOCOL_VERSION]) - print(ver) - while True: - print("sleeping") - await asyncio.sleep(1) - - def __init__(self, server): - self.exception = None - self.server = server - self.fut = asyncio.get_event_loop().create_task(self.run()) - - def has_timed_out(self): - return self.fut.done() - - def queue_request(self, method, params, msg_id): - pass - - def close(self): - self.fut.cancel() def parse_servers(result): """ parse servers list into dict format""" @@ -539,7 +515,7 @@ class Network(PrintError): self.close_interface(self.interface) assert self.interface is None assert not self.interfaces - self.connecting = set() + self.connecting.clear() # Get a new queue - no old pending connections thanks! self.socket_queue = queue.Queue() @@ -810,7 +786,7 @@ class Network(PrintError): def new_interface(self, server): # todo: get tip first, then decide which checkpoint to use. self.add_recent_server(server) - interface = Interface(server) + interface = Interface(server, self.config.path, self.connecting) interface.blockchain = None interface.tip_header = None interface.tip = 0 @@ -1368,9 +1344,12 @@ class Network(PrintError): for k, i in self.interfaces.items(): if i.has_timed_out(): remove.append(k) + changed = False for k in remove: self.connection_down(k) + changed = True for i in range(self.num_server - len(self.interfaces)): self.start_random_interface() - self.notify('updated') + changed = True + if changed: self.notify('updated') await asyncio.sleep(1) From c53caecd1e130d889f952e5b7e6d1d4c0b206b85 Mon Sep 17 00:00:00 2001 From: ThomasV Date: Fri, 17 Aug 2018 14:51:02 +0200 Subject: [PATCH 04/76] fix else statement --- electrum/interface.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/electrum/interface.py b/electrum/interface.py index 678c726a6..563a43e52 100644 --- a/electrum/interface.py +++ b/electrum/interface.py @@ -123,7 +123,8 @@ class Interface(PrintError): os.fsync(f.fileno()) break await asyncio.sleep(1) - assert False, "could not get certificate" + else: + assert False, "could not get certificate" async def get_certificate(self): sslc = ssl.SSLContext() From f733cb89475872d5d59188ed8fccfbaa3f35b0ec Mon Sep 17 00:00:00 2001 From: Janus Date: Mon, 27 Aug 2018 20:39:36 +0200 Subject: [PATCH 05/76] aiorpcx: socks support --- electrum/gui/kivy/uix/ui_screens/proxy.kv | 2 +- electrum/gui/qt/network_dialog.py | 2 +- electrum/interface.py | 47 +++++++++++++++++------ electrum/network.py | 39 +++++++++---------- electrum/util.py | 22 +++++++++++ 5 files changed, 77 insertions(+), 35 deletions(-) diff --git a/electrum/gui/kivy/uix/ui_screens/proxy.kv b/electrum/gui/kivy/uix/ui_screens/proxy.kv index 738a8ffd5..b7231855e 100644 --- a/electrum/gui/kivy/uix/ui_screens/proxy.kv +++ b/electrum/gui/kivy/uix/ui_screens/proxy.kv @@ -14,7 +14,7 @@ Popup: height: '48dp' size_hint_y: None text: app.proxy_config.get('mode', 'none') - values: ['none', 'socks4', 'socks5', 'http'] + values: ['none', 'socks4', 'socks5'] Label: text: _('Host') TextInput: diff --git a/electrum/gui/qt/network_dialog.py b/electrum/gui/qt/network_dialog.py index ecc7695b8..0acdbcd25 100644 --- a/electrum/gui/qt/network_dialog.py +++ b/electrum/gui/qt/network_dialog.py @@ -239,7 +239,7 @@ class NetworkChoiceLayout(object): self.proxy_cb.clicked.connect(self.set_proxy) self.proxy_mode = QComboBox() - self.proxy_mode.addItems(['SOCKS4', 'SOCKS5', 'HTTP']) + self.proxy_mode.addItems(['SOCKS4', 'SOCKS5']) self.proxy_host = QLineEdit() self.proxy_host.setFixedWidth(200) self.proxy_port = QLineEdit() diff --git a/electrum/interface.py b/electrum/interface.py index 563a43e52..5dd9c60e3 100644 --- a/electrum/interface.py +++ b/electrum/interface.py @@ -34,7 +34,7 @@ import asyncio import requests -from .util import PrintError +from .util import PrintError, aiosafe, bfh ca_path = requests.certs.where() @@ -42,16 +42,38 @@ from . import util from . import x509 from . import pem from .version import ELECTRUM_VERSION, PROTOCOL_VERSION +from .util import NotificationSession class Interface(PrintError): - def __init__(self, server, config_path, connecting): + def __init__(self, server, config_path, connecting, proxy): + self.exception = None self.connecting = connecting self.server = server self.host, self.port, self.protocol = self.server.split(':') + self.port = int(self.port) self.config_path = config_path self.cert_path = os.path.join(self.config_path, 'certs', self.host) self.fut = asyncio.get_event_loop().create_task(self.run()) + if proxy: + proxy['user'] = proxy.get('user', '') + if proxy['user'] == '': + proxy['user'] = 'sampleuser' # aiorpcx doesn't allow empty user + proxy['password'] = proxy.get('password', '') + if proxy['password'] == '': + proxy['password'] = 'samplepassword' + try: + auth = aiorpcx.socks.SOCKSUserAuth(proxy['user'], proxy['password']) + except KeyError: + auth = None + if proxy['mode'] == "socks4": + self.proxy = aiorpcx.socks.SOCKSProxy((proxy['host'], int(proxy['port'])), aiorpcx.socks.SOCKS4a, auth) + elif proxy['mode'] == "socks5": + self.proxy = aiorpcx.socks.SOCKSProxy((proxy['host'], int(proxy['port'])), aiorpcx.socks.SOCKS5, auth) + else: + raise NotImplementedError + else: + self.proxy = None def diagnostic_name(self): return self.host @@ -67,8 +89,8 @@ class Interface(PrintError): @util.aiosafe async def run(self): if self.protocol != 's': - await self.open_session(None, execute_after_connect=lambda: self.connecting.remove(self.server)) - return + await self.open_session(None, execute_after_connect=self.mark_ready) + assert False ca_sslc = ssl.create_default_context(ssl.Purpose.SERVER_AUTH) exists = os.path.exists(self.cert_path) @@ -84,8 +106,8 @@ class Interface(PrintError): x = x509.X509(b) try: x.check_date() - except x509.CertificateError: - self.print_error("certificate has expired:", self.cert_path) + except x509.CertificateError as e: + self.print_error("certificate problem", e) os.unlink(self.cert_path) exists = False if not exists: @@ -102,7 +124,11 @@ class Interface(PrintError): else: sslc = ssl.create_default_context(ssl.Purpose.SERVER_AUTH, cafile=self.cert_path) sslc.check_hostname = 0 - await self.open_session(sslc, execute_after_connect=lambda: self.connecting.remove(self.server)) + await self.open_session(sslc, execute_after_connect=self.mark_ready) + assert False + + def mark_ready(self): + self.connecting.remove(self.server) async def save_certificate(self): if not os.path.exists(self.cert_path): @@ -129,13 +155,13 @@ class Interface(PrintError): async def get_certificate(self): sslc = ssl.SSLContext() try: - async with aiorpcx.ClientSession(self.host, self.port, ssl=sslc) as session: + async with aiorpcx.ClientSession(self.host, self.port, ssl=sslc, proxy=self.proxy) as session: return session.transport._ssl_protocol._sslpipe._sslobj.getpeercert(True) except ValueError: return None async def open_session(self, sslc, do_sleep=True, execute_after_connect=lambda: None): - async with aiorpcx.ClientSession(self.host, self.port, ssl=sslc) as session: + async with NotificationSession(None, None, self.host, self.port, ssl=sslc, proxy=self.proxy) as session: ver = await session.send_request('server.version', [ELECTRUM_VERSION, PROTOCOL_VERSION]) print(ver) connect_hook_executed = False @@ -146,9 +172,6 @@ class Interface(PrintError): await asyncio.wait_for(session.send_request('server.ping'), 5) await asyncio.sleep(300) - def has_timed_out(self): - return self.fut.done() - def queue_request(self, method, params, msg_id): pass diff --git a/electrum/network.py b/electrum/network.py index 9e5b33d83..de1b7b8cf 100644 --- a/electrum/network.py +++ b/electrum/network.py @@ -36,7 +36,6 @@ import ipaddress import dns import dns.resolver -import socks from . import util from .util import print_error, PrintError @@ -434,6 +433,7 @@ class Network(PrintError): server = pick_random_server(self.get_servers(), self.protocol, exclude_set) if server: self.start_interface(server) + return server def start_interfaces(self): self.start_interface(self.default_server) @@ -444,22 +444,13 @@ class Network(PrintError): self.proxy = proxy # Store these somewhere so we can un-monkey-patch if not hasattr(socket, "_socketobject"): - socket._socketobject = socket.socket socket._getaddrinfo = socket.getaddrinfo if proxy: self.print_error('setting proxy', proxy) proxy_mode = proxy_modes.index(proxy["mode"]) + 1 - socks.setdefaultproxy(proxy_mode, - proxy["host"], - int(proxy["port"]), - # socks.py seems to want either None or a non-empty string - username=(proxy.get("user", "") or None), - password=(proxy.get("password", "") or None)) - socket.socket = socks.socksocket # prevent dns leaks, see http://stackoverflow.com/questions/13184205/dns-over-proxy socket.getaddrinfo = lambda *args: [(socket.AF_INET, socket.SOCK_STREAM, 6, '', (args[0], args[1]))] else: - socket.socket = socket._socketobject if sys.platform == 'win32': # On Windows, socket.getaddrinfo takes a mutex, and might hold it for up to 10 seconds # when dns-resolving. To speed it up drastically, we resolve dns ourselves, outside that lock. @@ -783,10 +774,10 @@ class Network(PrintError): if b.catch_up == server: b.catch_up = None - def new_interface(self, server): + async def new_interface(self, server): # todo: get tip first, then decide which checkpoint to use. self.add_recent_server(server) - interface = Interface(server, self.config.path, self.connecting) + interface = Interface(server, self.config.path, self.connecting, self.proxy) interface.blockchain = None interface.tip_header = None interface.tip = 0 @@ -1082,9 +1073,7 @@ class Network(PrintError): def _run(self): self.init_headers_file() - these = [self.maintain_sessions()] - these = [self.asyncio_loop.create_task(x) for x in these] - self.gat = asyncio.gather(*these) + self.gat = self.asyncio_loop.create_task(self.maintain_sessions()) try: self.asyncio_loop.run_until_complete(self.gat) except concurrent.futures.CancelledError: @@ -1339,17 +1328,25 @@ class Network(PrintError): while True: while self.socket_queue.qsize() > 0: server = self.socket_queue.get() - self.new_interface(server) + asyncio.get_event_loop().create_task(self.new_interface(server)) remove = [] for k, i in self.interfaces.items(): - if i.has_timed_out(): + if i.fut.done(): + if i.exception: + try: + raise i.exception + except BaseException as e: + self.print_error(i.server, "errored because", str(e), str(type(e))) + else: + assert False, "interface future should not finish without exception" remove.append(k) changed = False for k in remove: self.connection_down(k) changed = True - for i in range(self.num_server - len(self.interfaces)): - self.start_random_interface() - changed = True - if changed: self.notify('updated') + for i in range(self.num_server - len(self.interfaces) - len(self.connecting)): + if self.start_random_interface(): + changed = True + if changed: + self.notify('updated') await asyncio.sleep(1) diff --git a/electrum/util.py b/electrum/util.py index 4a3629cd4..ec4d44342 100644 --- a/electrum/util.py +++ b/electrum/util.py @@ -38,6 +38,7 @@ from locale import localeconv from .i18n import _ +from aiorpcx import ClientSession, Notification import urllib.request, urllib.parse, urllib.error import queue @@ -947,3 +948,24 @@ VerifiedTxInfo = NamedTuple("VerifiedTxInfo", [("height", int), ("timestamp", int), ("txpos", int), ("header_hash", str)]) + +from .blockchain import deserialize_header + +class NotificationSession(ClientSession): + + def __init__(self, scripthash, header, *args, **kwargs): + super(NotificationSession, self).__init__(*args, **kwargs) + self.scripthash = scripthash + self.header = header + + @aiosafe + async def handle_request(self, request): + if isinstance(request, Notification): + if request.method == 'blockchain.scripthash.subscribe' and self.scripthash is not None: + args = request.args + await self.scripthash.put((args[0], args[1])) + elif request.method == 'blockchain.headers.subscribe' and self.header is not None: + deser = deserialize_header(bfh(request.args[0]['hex']), request.args[0]['height']) + await self.header.put(deser) + else: + assert False, request.method From b120584f97c757deeb8e23e70631829ddb8fadfb Mon Sep 17 00:00:00 2001 From: Janus Date: Fri, 27 Jul 2018 12:29:04 +0200 Subject: [PATCH 06/76] aiorpcx address synchronizer --- contrib/requirements/requirements.txt | 1 + electrum/address_synchronizer.py | 11 +- electrum/network.py | 46 +---- electrum/synchronizer.py | 259 +++++++++++++------------- run_electrum | 1 + 5 files changed, 139 insertions(+), 179 deletions(-) diff --git a/contrib/requirements/requirements.txt b/contrib/requirements/requirements.txt index 99b859c30..3860c9cd4 100644 --- a/contrib/requirements/requirements.txt +++ b/contrib/requirements/requirements.txt @@ -8,3 +8,4 @@ jsonrpclib-pelix PySocks>=1.6.6 qdarkstyle<3.0 typing>=3.0.0 +aiorpcx>=0.7.1 diff --git a/electrum/address_synchronizer.py b/electrum/address_synchronizer.py index d0e8dff1f..ed9f190e3 100644 --- a/electrum/address_synchronizer.py +++ b/electrum/address_synchronizer.py @@ -22,6 +22,7 @@ # SOFTWARE. import threading +import asyncio import itertools from collections import defaultdict @@ -138,16 +139,18 @@ class AddressSynchronizer(PrintError): self.network = network if self.network is not None: self.verifier = SPV(self.network, self) - self.synchronizer = Synchronizer(self, network) - #network.add_jobs([self.verifier, self.synchronizer]) + self.synchronizer = Synchronizer(self) + #network.add_jobs([self.verifier]) + self.network.futures.append(asyncio.run_coroutine_threadsafe(self.synchronizer.send_subscriptions(), self.network.asyncio_loop)) + self.network.futures.append(asyncio.run_coroutine_threadsafe(self.synchronizer.handle_status(), self.network.asyncio_loop)) + self.network.futures.append(asyncio.run_coroutine_threadsafe(self.synchronizer.main(), self.network.asyncio_loop)) else: self.verifier = None self.synchronizer = None def stop_threads(self): if self.network: - #self.network.remove_jobs([self.synchronizer, self.verifier]) - self.synchronizer.release() + #self.network.remove_jobs([self.verifier]) self.synchronizer = None self.verifier = None # Now no references to the synchronizer or verifier diff --git a/electrum/network.py b/electrum/network.py index de1b7b8cf..e00a9c057 100644 --- a/electrum/network.py +++ b/electrum/network.py @@ -20,6 +20,7 @@ # ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN # CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. +import asyncio import time import queue import os @@ -204,7 +205,6 @@ class Network(PrintError): self.callback_lock = threading.Lock() self.pending_sends_lock = threading.Lock() self.recent_servers_lock = threading.RLock() # <- re-entrant - self.subscribed_addresses_lock = threading.Lock() self.blockchains_lock = threading.Lock() self.pending_sends = [] @@ -226,7 +226,6 @@ class Network(PrintError): util.make_dir(dir_path) # subscriptions and requests - self.subscribed_addresses = set() # note: needs self.subscribed_addresses_lock self.h2addr = {} # Requests from client we've not seen a response to self.unanswered_requests = {} @@ -245,6 +244,7 @@ class Network(PrintError): self.start_network(deserialize_server(self.default_server)[2], deserialize_proxy(self.config.get('proxy'))) self.asyncio_loop = asyncio.get_event_loop() + self.futures = [] def with_interface_lock(func): def func_wrapper(self, *args, **kwargs): @@ -338,26 +338,6 @@ class Network(PrintError): interface.queue_request(method, params, message_id) return message_id - @with_interface_lock - def send_subscriptions(self): - assert self.interface - self.print_error('sending subscriptions to', self.interface.server, len(self.unanswered_requests), len(self.subscribed_addresses)) - self.sub_cache.clear() - # Resend unanswered requests - requests = self.unanswered_requests.values() - self.unanswered_requests = {} - for request in requests: - message_id = self.queue_request(request[0], request[1]) - self.unanswered_requests[message_id] = request - self.queue_request('server.banner', []) - self.queue_request('server.donation_address', []) - self.queue_request('server.peers.subscribe', []) - self.request_fee_estimates() - self.queue_request('blockchain.relayfee', []) - with self.subscribed_addresses_lock: - for h in self.subscribed_addresses: - self.queue_request('blockchain.scripthash.subscribe', [h]) - def request_fee_estimates(self): from .simple_config import FEE_ETA_TARGETS self.config.requested_fee_estimates() @@ -578,7 +558,6 @@ class Network(PrintError): # fixme: we don't want to close headers sub #self.close_interface(self.interface) self.interface = i - self.send_subscriptions() self.set_status('connected') self.notify('updated') self.notify('interfaces') @@ -683,11 +662,6 @@ class Network(PrintError): # Copy the request method and params to the response response['method'] = method response['params'] = params - # Only once we've received a response to an addr subscription - # add it to the list; avoids double-sends on reconnection - if method == 'blockchain.scripthash.subscribe': - with self.subscribed_addresses_lock: - self.subscribed_addresses.add(params[0]) else: if not response: # Closed remotely / misbehaving self.connection_down(interface.server) @@ -1078,6 +1052,7 @@ class Network(PrintError): self.asyncio_loop.run_until_complete(self.gat) except concurrent.futures.CancelledError: pass + [f.cancel() for f in self.futures] def on_notify_header(self, interface, header_dict): try: @@ -1212,21 +1187,6 @@ class Network(PrintError): callback(x2) return cb2 - def subscribe_to_addresses(self, addresses, callback): - hash2address = { - bitcoin.address_to_scripthash(address): address - for address in addresses} - self.h2addr.update(hash2address) - msgs = [ - ('blockchain.scripthash.subscribe', [x]) - for x in hash2address.keys()] - self.send(msgs, self.map_scripthash_to_address(callback)) - - def request_address_history(self, address, callback): - h = bitcoin.address_to_scripthash(address) - self.h2addr.update({h: address}) - self.send([('blockchain.scripthash.get_history', [h])], self.map_scripthash_to_address(callback)) - # NOTE this method handles exceptions and a special edge case, counter to # what the other ElectrumX methods do. This is unexpected. def broadcast_transaction(self, transaction, callback=None): diff --git a/electrum/synchronizer.py b/electrum/synchronizer.py index 48635df81..6cc3b7bdf 100644 --- a/electrum/synchronizer.py +++ b/electrum/synchronizer.py @@ -22,102 +22,86 @@ # ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN # CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. +import traceback +import ssl +import asyncio +from aiorpcx import ClientSession, Request, Notification, TaskGroup from threading import Lock import hashlib +import concurrent.futures # from .bitcoin import Hash, hash_encode from .transaction import Transaction -from .util import ThreadJob, bh2u +from .util import ThreadJob, bh2u, PrintError, aiosafe +from .bitcoin import address_to_scripthash +from .version import ELECTRUM_VERSION, PROTOCOL_VERSION -class Synchronizer(ThreadJob): +def history_status(h): + if not h: + return None + status = '' + for tx_hash, height in h: + status += tx_hash + ':%d:' % height + return bh2u(hashlib.sha256(status.encode('ascii')).digest()) + + + +class NotificationSession(ClientSession): + + def __init__(self, queue, *args, **kwargs): + super(NotificationSession, self).__init__(*args, **kwargs) + self.queue = queue + + @aiosafe + async def handle_request(self, request): + if isinstance(request, Notification): + if request.method == 'blockchain.scripthash.subscribe': + args = request.args + await self.queue.put((args[0], args[1])) + + +class Synchronizer(PrintError): '''The synchronizer keeps the wallet up-to-date with its set of addresses and their transactions. It subscribes over the network to wallet addresses, gets the wallet to generate new addresses when necessary, requests the transaction history of any addresses we don't have the full history of, and requests binary transaction data of any transactions the wallet doesn't have. - - External interface: __init__() and add() member functions. ''' - - def __init__(self, wallet, network): + def __init__(self, wallet): self.wallet = wallet - self.network = network - self.new_addresses = set() - # Entries are (tx_hash, tx_height) tuples self.requested_tx = {} self.requested_histories = {} self.requested_addrs = set() - self.lock = Lock() + self.scripthash_to_address = {} + # Queues + self.add_queue = asyncio.Queue() + self.status_queue = asyncio.Queue() - self.initialized = False - self.initialize() - - def parse_response(self, response): - if response.get('error'): - self.print_error("response error:", response) - return None, None - return response['params'], response['result'] + async def send_version(self): + r = await self.session.send_request('server.version', [ELECTRUM_VERSION, PROTOCOL_VERSION]) def is_up_to_date(self): - return (not self.requested_tx and not self.requested_histories - and not self.requested_addrs) - - def release(self): - self.network.unsubscribe(self.on_address_status) - - def add(self, address): - '''This can be called from the proxy or GUI threads.''' - with self.lock: - self.new_addresses.add(address) - - def subscribe_to_addresses(self, addresses): - if addresses: - self.requested_addrs |= addresses - self.network.subscribe_to_addresses(addresses, self.on_address_status) - - def get_status(self, h): - if not h: - return None - status = '' - for tx_hash, height in h: - status += tx_hash + ':%d:' % height - return bh2u(hashlib.sha256(status.encode('ascii')).digest()) - - def on_address_status(self, response): - if self.wallet.synchronizer is None and self.initialized: - return # we have been killed, this was just an orphan callback - params, result = self.parse_response(response) - if not params: - return - addr = params[0] + return (not self.requested_addrs and not self.requested_histories) + + def add(self, addr): + self.requested_addrs.add(addr) + self.add_queue.put_nowait(addr) + + async def on_address_status(self, addr, status): history = self.wallet.history.get(addr, []) - if self.get_status(history) != result: - # note that at this point 'result' can be None; - # if we had a history for addr but now the server is telling us - # there is no history - if addr not in self.requested_histories: - self.requested_histories[addr] = result - self.network.request_address_history(addr, self.on_address_history) - # remove addr from list only after it is added to requested_histories - if addr in self.requested_addrs: # Notifications won't be in - self.requested_addrs.remove(addr) - - def on_address_history(self, response): - if self.wallet.synchronizer is None and self.initialized: - return # we have been killed, this was just an orphan callback - params, result = self.parse_response(response) - if not params: + if history_status(history) == status: return - addr = params[0] - try: - server_status = self.requested_histories[addr] - except KeyError: - # note: server_status can be None even if we asked for the history, - # so it is not sufficient to test that - self.print_error("receiving history (unsolicited)", addr, len(result)) + # note that at this point 'result' can be None; + # if we had a history for addr but now the server is telling us + # there is no history + if addr in self.requested_histories: return + # request address history + self.requested_histories[addr] = status + h = address_to_scripthash(addr) + result = await self.session.send_request("blockchain.scripthash.get_history", [h]) self.print_error("receiving history", addr, len(result)) hashes = set(map(lambda item: item['tx_hash'], result)) hist = list(map(lambda item: (item['tx_hash'], item['height']), result)) @@ -128,23 +112,44 @@ class Synchronizer(ThreadJob): if len(hashes) != len(result): self.print_error("error: server history has non-unique txids: %s"% addr) # Check that the status corresponds to what was announced - elif self.get_status(hist) != server_status: + elif history_status(hist) != status: self.print_error("error: status mismatch: %s" % addr) else: # Store received history self.wallet.receive_history_callback(addr, hist, tx_fees) # Request transactions we don't have - self.request_missing_txs(hist) + # "hist" is a list of [tx_hash, tx_height] lists + transaction_hashes = [] + for tx_hash, tx_height in hist: + if tx_hash in self.requested_tx: + continue + if tx_hash in self.wallet.transactions: + continue + transaction_hashes.append(tx_hash) + self.requested_tx[tx_hash] = tx_height + + for tx_hash in transaction_hashes: + await self.get_transaction(tx_hash) + # Remove request; this allows up_to_date to be True self.requested_histories.pop(addr) - def on_tx_response(self, response): - if self.wallet.synchronizer is None and self.initialized: - return # we have been killed, this was just an orphan callback - params, result = self.parse_response(response) - if not params: - return - tx_hash = params[0] + async def request_missing_txs(self, hist): + # "hist" is a list of [tx_hash, tx_height] lists + transaction_hashes = [] + for tx_hash, tx_height in hist: + if tx_hash in self.requested_tx: + continue + if tx_hash in self.wallet.transactions: + continue + transaction_hashes.append(tx_hash) + self.requested_tx[tx_hash] = tx_height + + for tx_hash in transaction_hashes: + await self.get_transaction(tx_hash) + + async def get_transaction(self, tx_hash): + result = await self.session.send_request('blockchain.transaction.get', [tx_hash]) tx = Transaction(result) try: tx.deserialize() @@ -160,54 +165,44 @@ class Synchronizer(ThreadJob): self.print_error("received tx %s height: %d bytes: %d" % (tx_hash, tx_height, len(tx.raw))) # callbacks - self.network.trigger_callback('new_transaction', tx) - if not self.requested_tx: - self.network.trigger_callback('updated') - - def request_missing_txs(self, hist): - # "hist" is a list of [tx_hash, tx_height] lists - transaction_hashes = [] - for tx_hash, tx_height in hist: - if tx_hash in self.requested_tx: - continue - if tx_hash in self.wallet.transactions: - continue - transaction_hashes.append(tx_hash) - self.requested_tx[tx_hash] = tx_height - - self.network.get_transactions(transaction_hashes, self.on_tx_response) - - def initialize(self): - '''Check the initial state of the wallet. Subscribe to all its - addresses, and request any transactions in its address history - we don't have. - ''' - for history in self.wallet.history.values(): - # Old electrum servers returned ['*'] when all history for - # the address was pruned. This no longer happens but may - # remain in old wallets. - if history == ['*']: - continue - self.request_missing_txs(history) - - if self.requested_tx: - self.print_error("missing tx", self.requested_tx) - self.subscribe_to_addresses(set(self.wallet.get_addresses())) - self.initialized = True - - def run(self): - '''Called from the network proxy thread main loop.''' - # 1. Create new addresses - self.wallet.synchronize() - - # 2. Subscribe to new addresses - with self.lock: - addresses = self.new_addresses - self.new_addresses = set() - self.subscribe_to_addresses(addresses) - - # 3. Detect if situation has changed - up_to_date = self.is_up_to_date() - if up_to_date != self.wallet.is_up_to_date(): - self.wallet.set_up_to_date(up_to_date) - self.network.trigger_callback('updated') + self.wallet.network.trigger_callback('new_transaction', tx) + + async def subscribe_to_address(self, addr): + h = address_to_scripthash(addr) + self.scripthash_to_address[h] = addr + status = await self.session.send_request('blockchain.scripthash.subscribe', [h]) + await self.status_queue.put((h, status)) + self.requested_addrs.remove(addr) + + @aiosafe + async def send_subscriptions(self): + async with TaskGroup() as group: + while True: + addr = await self.add_queue.get() + await group.spawn(self.subscribe_to_address(addr)) + + @aiosafe + async def handle_status(self): + async with TaskGroup() as group: + while True: + h, status = await self.status_queue.get() + addr = self.scripthash_to_address[h] + await group.spawn(self.on_address_status(addr, status)) + + @aiosafe + async def main(self): + conn = self.wallet.network.default_server + host, port, protocol = conn.split(':') + sslc = ssl.SSLContext(ssl.PROTOCOL_TLS) if protocol == 's' else None + async with NotificationSession(self.status_queue, host, int(port), ssl=sslc) as session: + self.session = session + await self.send_version() + self.wallet.synchronizer = self + for addr in self.wallet.get_addresses(): self.add(addr) + while True: + await asyncio.sleep(1) + self.wallet.synchronize() + up_to_date = self.is_up_to_date() + if up_to_date != self.wallet.is_up_to_date(): + self.wallet.set_up_to_date(up_to_date) + self.wallet.network.trigger_callback('updated') diff --git a/run_electrum b/run_electrum index dd35c3516..3db004e22 100755 --- a/run_electrum +++ b/run_electrum @@ -48,6 +48,7 @@ def check_imports(): import qrcode import google.protobuf import jsonrpclib + import aiorpcx except ImportError as e: sys.exit("Error: %s. Try 'sudo pip install '"%str(e)) # the following imports are for pyinstaller From 8f36c9167de1bfd2505ef5516cd43661962b9c27 Mon Sep 17 00:00:00 2001 From: Janus Date: Wed, 29 Aug 2018 18:41:51 +0200 Subject: [PATCH 07/76] aiorpcx: remove callback based code, add session to Interface --- electrum/address_synchronizer.py | 18 +- electrum/gui/kivy/main_window.py | 5 +- electrum/gui/qt/network_dialog.py | 4 +- electrum/interface.py | 41 +- electrum/network.py | 607 ++---------------------------- electrum/verifier.py | 36 +- electrum/version.py | 2 +- 7 files changed, 102 insertions(+), 611 deletions(-) diff --git a/electrum/address_synchronizer.py b/electrum/address_synchronizer.py index ed9f190e3..07b0f9588 100644 --- a/electrum/address_synchronizer.py +++ b/electrum/address_synchronizer.py @@ -135,15 +135,25 @@ class AddressSynchronizer(PrintError): # add it in case it was previously unconfirmed self.add_unverified_tx(tx_hash, tx_height) + def on_default_server_changed(self, evt): + for i in self.network.futures: + if i.done() and i.exception(): + raise i.exception() + if not i.done(): + i.cancel() + self.network.futures.clear() + self.network.futures.append(asyncio.get_event_loop().create_task(self.verifier.main())) + self.network.futures.append(asyncio.get_event_loop().create_task(self.synchronizer.send_subscriptions())) + self.network.futures.append(asyncio.get_event_loop().create_task(self.synchronizer.handle_status())) + assert self.network.interface.session is not None + self.network.futures.append(asyncio.get_event_loop().create_task(self.synchronizer.main())) + def start_threads(self, network): self.network = network if self.network is not None: self.verifier = SPV(self.network, self) self.synchronizer = Synchronizer(self) - #network.add_jobs([self.verifier]) - self.network.futures.append(asyncio.run_coroutine_threadsafe(self.synchronizer.send_subscriptions(), self.network.asyncio_loop)) - self.network.futures.append(asyncio.run_coroutine_threadsafe(self.synchronizer.handle_status(), self.network.asyncio_loop)) - self.network.futures.append(asyncio.run_coroutine_threadsafe(self.synchronizer.main(), self.network.asyncio_loop)) + self.network.register_callback(self.on_default_server_changed, ['default_server_changed']) else: self.verifier = None self.synchronizer = None diff --git a/electrum/gui/kivy/main_window.py b/electrum/gui/kivy/main_window.py index b5468bb7f..2ea871e22 100644 --- a/electrum/gui/kivy/main_window.py +++ b/electrum/gui/kivy/main_window.py @@ -15,6 +15,7 @@ from electrum.util import profiler, InvalidPassword from electrum.plugin import run_hook from electrum.util import format_satoshis, format_satoshis_plain from electrum.paymentrequest import PR_UNPAID, PR_PAID, PR_UNKNOWN, PR_EXPIRED +from electrum import blockchain from .i18n import _ from kivy.app import App @@ -114,10 +115,10 @@ class ElectrumWindow(App): from .uix.dialogs.choice_dialog import ChoiceDialog chains = self.network.get_blockchains() def cb(name): - for index, b in self.network.blockchains.items(): + for index, b in blockchain.blockchains.items(): if name == b.get_name(): self.network.follow_chain(index) - names = [self.network.blockchains[b].get_name() for b in chains] + names = [blockchain.blockchains[b].get_name() for b in chains] if len(names) > 1: cur_chain = self.network.blockchain().get_name() ChoiceDialog(_('Choose your chain'), names, cur_chain, cb).open() diff --git a/electrum/gui/qt/network_dialog.py b/electrum/gui/qt/network_dialog.py index 0acdbcd25..268e01b7f 100644 --- a/electrum/gui/qt/network_dialog.py +++ b/electrum/gui/qt/network_dialog.py @@ -31,7 +31,7 @@ from PyQt5.QtWidgets import * import PyQt5.QtCore as QtCore from electrum.i18n import _ -from electrum import constants +from electrum import constants, blockchain from electrum.util import print_error from electrum.network import serialize_server, deserialize_server @@ -103,7 +103,7 @@ class NodesListWidget(QTreeWidget): chains = network.get_blockchains() n_chains = len(chains) for k, items in chains.items(): - b = network.blockchains[k] + b = blockchain.blockchains[k] name = b.get_name() if n_chains >1: x = QTreeWidgetItem([name + '@%d'%b.get_forkpoint(), '%d'%b.height()]) diff --git a/electrum/interface.py b/electrum/interface.py index 5dd9c60e3..5ed8aa714 100644 --- a/electrum/interface.py +++ b/electrum/interface.py @@ -31,6 +31,7 @@ import threading import traceback import aiorpcx import asyncio +import concurrent.futures import requests @@ -43,18 +44,23 @@ from . import x509 from . import pem from .version import ELECTRUM_VERSION, PROTOCOL_VERSION from .util import NotificationSession +from . import blockchain class Interface(PrintError): - def __init__(self, server, config_path, connecting, proxy): + def __init__(self, network, server, config_path, proxy): self.exception = None - self.connecting = connecting + self.ready = asyncio.Future() self.server = server self.host, self.port, self.protocol = self.server.split(':') self.port = int(self.port) self.config_path = config_path self.cert_path = os.path.join(self.config_path, 'certs', self.host) self.fut = asyncio.get_event_loop().create_task(self.run()) + self.tip_header = None + self.tip = 0 + self.blockchain = None + self.network = network if proxy: proxy['user'] = proxy.get('user', '') if proxy['user'] == '': @@ -71,7 +77,7 @@ class Interface(PrintError): elif proxy['mode'] == "socks5": self.proxy = aiorpcx.socks.SOCKSProxy((proxy['host'], int(proxy['port'])), aiorpcx.socks.SOCKS5, auth) else: - raise NotImplementedError + raise NotImplementedError # http proxy not available with aiorpcx else: self.proxy = None @@ -128,7 +134,17 @@ class Interface(PrintError): assert False def mark_ready(self): - self.connecting.remove(self.server) + assert self.tip_header + chain = blockchain.check_header(self.tip_header) + if not chain: + self.blockchain = blockchain.blockchains[0] + else: + self.blockchain = chain + + self.print_error("set blockchain with height", self.blockchain.height()) + + if not self.ready.done(): + self.ready.set_result(1) async def save_certificate(self): if not os.path.exists(self.cert_path): @@ -161,16 +177,25 @@ class Interface(PrintError): return None async def open_session(self, sslc, do_sleep=True, execute_after_connect=lambda: None): - async with NotificationSession(None, None, self.host, self.port, ssl=sslc, proxy=self.proxy) as session: + q = asyncio.Queue() + async with NotificationSession(None, q, self.host, self.port, ssl=sslc, proxy=self.proxy) as session: ver = await session.send_request('server.version', [ELECTRUM_VERSION, PROTOCOL_VERSION]) - print(ver) + self.print_error(ver, do_sleep, self.host) connect_hook_executed = False while do_sleep: if not connect_hook_executed: connect_hook_executed = True + res = await session.send_request('blockchain.headers.subscribe') + self.tip_header = blockchain.deserialize_header(bfh(res['hex']), res['height']) + self.tip = res['height'] execute_after_connect() - await asyncio.wait_for(session.send_request('server.ping'), 5) - await asyncio.sleep(300) + self.session = session + try: + new_header = await asyncio.wait_for(q.get(), 300) + self.tip_header = new_header + self.tip = new_header['block_height'] + except concurrent.futures.TimeoutError: + await asyncio.wait_for(session.send_request('server.ping'), 5) def queue_request(self, method, params, msg_id): pass diff --git a/electrum/network.py b/electrum/network.py index e00a9c057..4509b6382 100644 --- a/electrum/network.py +++ b/electrum/network.py @@ -20,14 +20,12 @@ # ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN # CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. -import asyncio +import concurrent.futures import time import queue import os -import errno import random import re -import select from collections import defaultdict import threading import socket @@ -39,18 +37,15 @@ import dns import dns.resolver from . import util -from .util import print_error, PrintError -from . import bitcoin +from .util import PrintError, print_error, bfh from .bitcoin import COIN from . import constants from . import blockchain -from .version import ELECTRUM_VERSION, PROTOCOL_VERSION -from .i18n import _ -from .blockchain import InvalidHeader from .interface import Interface import asyncio import concurrent.futures +from .version import PROTOCOL_VERSION NODES_RETRY_INTERVAL = 60 SERVER_RETRY_INTERVAL = 10 @@ -163,7 +158,6 @@ def deserialize_server(server_str): def serialize_server(host, port, protocol): return str(':'.join([host, port, protocol])) - class Network(PrintError): """The Network class manages a set of connections to remote electrum servers, each connected socket is handled by an Interface() object. @@ -183,10 +177,10 @@ class Network(PrintError): config = {} # Do not use mutables as default values! self.config = SimpleConfig(config) if isinstance(config, dict) else config self.num_server = 10 if not self.config.get('oneserver') else 0 - self.blockchains = blockchain.read_blockchains(self.config) # note: needs self.blockchains_lock - self.print_error("blockchains", self.blockchains.keys()) + blockchain.blockchains = blockchain.read_blockchains(self.config) # note: needs self.blockchains_lock + self.print_error("blockchains", list(blockchain.blockchains.keys())) self.blockchain_index = config.get('blockchain_index', 0) - if self.blockchain_index not in self.blockchains.keys(): + if self.blockchain_index not in blockchain.blockchains.keys(): self.blockchain_index = 0 # Server for addresses and transactions self.default_server = self.config.get('server', None) @@ -201,6 +195,7 @@ class Network(PrintError): self.default_server = pick_random_server() # locks: if you need to take multiple ones, acquire them in the order they are defined here! + self.bhi_lock = asyncio.Lock() self.interface_lock = threading.RLock() # <- re-entrant self.callback_lock = threading.Lock() self.pending_sends_lock = threading.Lock() @@ -322,29 +317,6 @@ class Network(PrintError): def is_connecting(self): return self.connection_status == 'connecting' - @with_interface_lock - def queue_request(self, method, params, interface=None): - # If you want to queue a request on any interface it must go - # through this function so message ids are properly tracked - if interface is None: - interface = self.interface - if interface is None: - self.print_error('warning: dropping request', method, params) - return - message_id = self.message_id - self.message_id += 1 - if self.debug: - self.print_error(interface.host, "-->", method, params, message_id) - interface.queue_request(method, params, message_id) - return message_id - - def request_fee_estimates(self): - from .simple_config import FEE_ETA_TARGETS - self.config.requested_fee_estimates() - self.queue_request('mempool.get_fee_histogram', []) - for i in FEE_ETA_TARGETS: - self.queue_request('blockchain.estimatefee', [i]) - def get_status_value(self, key): if key == 'status': value = self.connection_status @@ -415,11 +387,6 @@ class Network(PrintError): self.start_interface(server) return server - def start_interfaces(self): - self.start_interface(self.default_server) - for i in range(self.num_server - 1): - self.start_random_interface() - def set_proxy(self, proxy): self.proxy = proxy # Store these somewhere so we can un-monkey-patch @@ -475,7 +442,6 @@ class Network(PrintError): self.disconnected_servers = set([]) # note: needs self.interface_lock self.protocol = protocol self.set_proxy(proxy) - self.start_interfaces() @with_interface_lock def stop_network(self): @@ -558,6 +524,7 @@ class Network(PrintError): # fixme: we don't want to close headers sub #self.close_interface(self.interface) self.interface = i + self.trigger_callback('default_server_changed') self.set_status('connected') self.notify('updated') self.notify('interfaces') @@ -638,91 +605,6 @@ class Network(PrintError): """ hashable index for subscriptions and cache""" return str(method) + (':' + str(params[0]) if params else '') - def process_responses(self, interface): - responses = interface.get_responses() - for request, response in responses: - if request: - method, params, message_id = request - k = self.get_index(method, params) - # client requests go through self.send() with a - # callback, are only sent to the current interface, - # and are placed in the unanswered_requests dictionary - client_req = self.unanswered_requests.pop(message_id, None) - if client_req: - if interface != self.interface: - # we probably changed the current interface - # in the meantime; drop this. - return - callbacks = [client_req[2]] - else: - # fixme: will only work for subscriptions - k = self.get_index(method, params) - callbacks = list(self.subscriptions.get(k, [])) - - # Copy the request method and params to the response - response['method'] = method - response['params'] = params - else: - if not response: # Closed remotely / misbehaving - self.connection_down(interface.server) - break - # Rewrite response shape to match subscription request response - method = response.get('method') - params = response.get('params') - k = self.get_index(method, params) - if method == 'blockchain.headers.subscribe': - response['result'] = params[0] - response['params'] = [] - elif method == 'blockchain.scripthash.subscribe': - response['params'] = [params[0]] # addr - response['result'] = params[1] - callbacks = list(self.subscriptions.get(k, [])) - - # update cache if it's a subscription - if method.endswith('.subscribe'): - with self.interface_lock: - self.sub_cache[k] = response - # Response is now in canonical form - self.process_response(interface, response, callbacks) - - def send(self, messages, callback): - '''Messages is a list of (method, params) tuples''' - messages = list(messages) - with self.pending_sends_lock: - self.pending_sends.append((messages, callback)) - - @with_interface_lock - def process_pending_sends(self): - # Requests needs connectivity. If we don't have an interface, - # we cannot process them. - if not self.interface: - return - - with self.pending_sends_lock: - sends = self.pending_sends - self.pending_sends = [] - - for messages, callback in sends: - for method, params in messages: - r = None - if method.endswith('.subscribe'): - k = self.get_index(method, params) - # add callback to list - l = list(self.subscriptions.get(k, [])) - if callback not in l: - l.append(callback) - with self.callback_lock: - self.subscriptions[k] = l - # check cached response for subscriptions - r = self.sub_cache.get(k) - - if r is not None: - self.print_error("cache hit", k) - callback(r) - else: - message_id = self.queue_request(method, params) - self.unanswered_requests[message_id] = method, params, callback - def unsubscribe(self, callback): '''Unsubscribe a callback to free object references to enable GC.''' # Note: we can't unsubscribe from the server, so if we receive @@ -744,297 +626,37 @@ class Network(PrintError): self.close_interface(self.interfaces[server]) self.notify('interfaces') with self.blockchains_lock: - for b in self.blockchains.values(): + for b in blockchain.blockchains.values(): if b.catch_up == server: b.catch_up = None + @util.aiosafe async def new_interface(self, server): # todo: get tip first, then decide which checkpoint to use. self.add_recent_server(server) - interface = Interface(server, self.config.path, self.connecting, self.proxy) - interface.blockchain = None - interface.tip_header = None - interface.tip = 0 - interface.mode = 'default' - interface.request = None - with self.interface_lock: - self.interfaces[server] = interface - # server.version should be the first message - params = [ELECTRUM_VERSION, PROTOCOL_VERSION] - self.queue_request('server.version', params, interface) - self.queue_request('blockchain.headers.subscribe', [True], interface) - if server == self.default_server: - self.switch_to_interface(server) - #self.notify('interfaces') - - def maintain_sockets(self): - '''Socket maintenance.''' - # Responses to connection attempts? - while not self.socket_queue.empty(): - server = self.socket_queue.get() - if server in self.connecting: - self.connecting.remove(server) - - if socket: - self.new_interface(server) - else: - self.connection_down(server) - - # Send pings and shut down stale interfaces - # must use copy of values - with self.interface_lock: - interfaces = list(self.interfaces.values()) - for interface in interfaces: - if interface.has_timed_out(): - self.connection_down(interface.server) - elif interface.ping_required(): - self.queue_request('server.ping', [], interface) - - now = time.time() - # nodes - with self.interface_lock: - if len(self.interfaces) + len(self.connecting) < self.num_server: - self.start_random_interface() - if now - self.nodes_retry_time > NODES_RETRY_INTERVAL: - self.print_error('network: retrying connections') - self.disconnected_servers = set([]) - self.nodes_retry_time = now - - # main interface - with self.interface_lock: - if not self.is_connected(): - if self.auto_connect: - if not self.is_connecting(): - self.switch_to_random_interface() - else: - if self.default_server in self.disconnected_servers: - if now - self.server_retry_time > SERVER_RETRY_INTERVAL: - self.disconnected_servers.remove(self.default_server) - self.server_retry_time = now - else: - self.switch_to_interface(self.default_server) - else: - if self.config.is_fee_estimates_update_required(): - self.request_fee_estimates() - def request_chunk(self, interface, index): - if index in self.requested_chunks: - return - interface.print_error("requesting chunk %d" % index) - self.requested_chunks.add(index) - height = index * 2016 - self.queue_request('blockchain.block.headers', [height, 2016], - interface) - - def on_block_headers(self, interface, response): - '''Handle receiving a chunk of block headers''' - error = response.get('error') - result = response.get('result') - params = response.get('params') - blockchain = interface.blockchain - if result is None or params is None or error is not None: - interface.print_error(error or 'bad response') - return - # Ignore unsolicited chunks - height = params[0] - index = height // 2016 - if index * 2016 != height or index not in self.requested_chunks: - interface.print_error("received chunk %d (unsolicited)" % index) - return - else: - interface.print_error("received chunk %d" % index) - self.requested_chunks.remove(index) - hexdata = result['hex'] - connect = blockchain.connect_chunk(index, hexdata) - if not connect: - self.connection_down(interface.server) - return - if index >= len(blockchain.checkpoints): - # If not finished, get the next chunk - if blockchain.height() < interface.tip: - self.request_chunk(interface, index+1) - else: - interface.mode = 'default' - interface.print_error('catch up done', blockchain.height()) - blockchain.catch_up = None - else: - # the verifier must have asked for this chunk - pass - self.notify('updated') - - def on_get_header(self, interface, response): - '''Handle receiving a single block header''' - header = response.get('result') - if not header: - interface.print_error(response) - self.connection_down(interface.server) - return - height = header.get('block_height') - #interface.print_error('got header', height, blockchain.hash_header(header)) - if interface.request != height: - interface.print_error("unsolicited header",interface.request, height) + interface = Interface(self, server, self.config.path, self.proxy) + try: + await asyncio.wait_for(interface.ready, 5) + except BaseException as e: + import traceback + traceback.print_exc() + self.print_error(interface.server, "couldn't launch because", str(e), str(type(e))) self.connection_down(interface.server) return - chain = blockchain.check_header(header) - if interface.mode == 'backward': - can_connect = blockchain.can_connect(header) - if can_connect and can_connect.catch_up is None: - interface.mode = 'catch_up' - interface.blockchain = can_connect - interface.blockchain.save_header(header) - next_height = height + 1 - interface.blockchain.catch_up = interface.server - elif chain: - # FIXME should await "initial chunk download". - # binary search will NOT do the correct thing if we don't yet - # have all headers up to the fork height - interface.print_error("binary search") - interface.mode = 'binary' - interface.blockchain = chain - interface.good = height - next_height = (interface.bad + interface.good) // 2 - assert next_height >= self.max_checkpoint(), (interface.bad, interface.good) - else: - if height == 0: - self.connection_down(interface.server) - next_height = None - else: - interface.bad = height - interface.bad_header = header - delta = interface.tip - height - next_height = max(self.max_checkpoint(), interface.tip - 2 * delta) - if height == next_height: - self.connection_down(interface.server) - next_height = None - - elif interface.mode == 'binary': - if chain: - interface.good = height - interface.blockchain = chain - else: - interface.bad = height - interface.bad_header = header - if interface.bad != interface.good + 1: - next_height = (interface.bad + interface.good) // 2 - assert next_height >= self.max_checkpoint() - elif not interface.blockchain.can_connect(interface.bad_header, check_height=False): - self.connection_down(interface.server) - next_height = None - else: - branch = self.blockchains.get(interface.bad) - if branch is not None: - if branch.check_header(interface.bad_header): - interface.print_error('joining chain', interface.bad) - next_height = None - elif branch.parent().check_header(header): - interface.print_error('reorg', interface.bad, interface.tip) - interface.blockchain = branch.parent() - next_height = interface.bad - else: - interface.print_error('forkpoint conflicts with existing fork', branch.path()) - branch.write(b'', 0) - branch.save_header(interface.bad_header) - interface.mode = 'catch_up' - interface.blockchain = branch - next_height = interface.bad + 1 - interface.blockchain.catch_up = interface.server - else: - bh = interface.blockchain.height() - next_height = None - if bh > interface.good: - if not interface.blockchain.check_header(interface.bad_header): - b = interface.blockchain.fork(interface.bad_header) - with self.blockchains_lock: - self.blockchains[interface.bad] = b - interface.blockchain = b - interface.print_error("new chain", b.forkpoint) - interface.mode = 'catch_up' - maybe_next_height = interface.bad + 1 - if maybe_next_height <= interface.tip: - next_height = maybe_next_height - interface.blockchain.catch_up = interface.server - else: - assert bh == interface.good - if interface.blockchain.catch_up is None and bh < interface.tip: - interface.print_error("catching up from %d"% (bh + 1)) - interface.mode = 'catch_up' - next_height = bh + 1 - interface.blockchain.catch_up = interface.server - - self.notify('updated') - - elif interface.mode == 'catch_up': - can_connect = interface.blockchain.can_connect(header) - if can_connect: - interface.blockchain.save_header(header) - next_height = height + 1 if height < interface.tip else None - else: - # go back - interface.print_error("cannot connect", height) - interface.mode = 'backward' - interface.bad = height - interface.bad_header = header - next_height = height - 1 - - if next_height is None: - # exit catch_up state - interface.print_error('catch up done', interface.blockchain.height()) - interface.blockchain.catch_up = None - self.switch_lagging_interface() - self.notify('updated') - - else: - raise Exception(interface.mode) - # If not finished, get the next header - if next_height is not None: - if next_height < 0: - self.connection_down(interface.server) - next_height = None - elif interface.mode == 'catch_up' and interface.tip > next_height + 50: - self.request_chunk(interface, next_height // 2016) - else: - self.request_header(interface, next_height) - if next_height is None: - interface.mode = 'default' - interface.request = None - self.notify('updated') + finally: + self.connecting.remove(server) - # refresh network dialog - self.notify('interfaces') - - def maintain_requests(self): with self.interface_lock: - interfaces = list(self.interfaces.values()) - for interface in interfaces: - if interface.request and time.time() - interface.request_time > 20: - interface.print_error("blockchain request timed out") - self.connection_down(interface.server) - continue + self.interfaces[server] = interface - def wait_on_sockets(self): - # Python docs say Windows doesn't like empty selects. - # Sleep to prevent busy looping - if not self.interfaces: - time.sleep(0.1) - return - with self.interface_lock: - interfaces = list(self.interfaces.values()) - rin = [i for i in interfaces] - win = [i for i in interfaces if i.num_requests()] - try: - rout, wout, xout = select.select(rin, win, [], 0.1) - except socket.error as e: - if e.errno == errno.EINTR: - return - raise - assert not xout - for interface in wout: - interface.send_requests() - for interface in rout: - self.process_responses(interface) + if server == self.default_server: + self.switch_to_interface(server) + + #self.notify('interfaces') def init_headers_file(self): - b = self.blockchains[0] + b = blockchain.blockchains[0] filename = b.path() length = 80 * len(constants.net.CHECKPOINTS) * 2016 if not os.path.exists(filename) or os.path.getsize(filename) < length: @@ -1052,73 +674,18 @@ class Network(PrintError): self.asyncio_loop.run_until_complete(self.gat) except concurrent.futures.CancelledError: pass - [f.cancel() for f in self.futures] - - def on_notify_header(self, interface, header_dict): - try: - header_hex, height = header_dict['hex'], header_dict['height'] - except KeyError: - # no point in keeping this connection without headers sub - self.connection_down(interface.server) - return - try: - header = blockchain.deserialize_header(util.bfh(header_hex), height) - except InvalidHeader: - self.connection_down(interface.server) - return - #interface.print_error('notified of header', height, blockchain.hash_header(header)) - if height < self.max_checkpoint(): - self.connection_down(interface.server) - return - interface.tip_header = header - interface.tip = height - if interface.mode != 'default': - return - b = blockchain.check_header(header) - if b: - interface.blockchain = b - self.switch_lagging_interface() - self.notify('updated') - self.notify('interfaces') - return - b = blockchain.can_connect(header) - if b: - interface.blockchain = b - b.save_header(header) - self.switch_lagging_interface() - self.notify('updated') - self.notify('interfaces') - return - with self.blockchains_lock: - tip = max([x.height() for x in self.blockchains.values()]) - if tip >=0: - interface.mode = 'backward' - interface.bad = height - interface.bad_header = header - self.request_header(interface, min(tip +1, height - 1)) - else: - chain = self.blockchains[0] - if chain.catch_up is None: - chain.catch_up = interface - interface.mode = 'catch_up' - interface.blockchain = chain - with self.blockchains_lock: - self.print_error("switching to catchup mode", tip, self.blockchains) - self.request_header(interface, 0) - else: - self.print_error("chain already catching up with", chain.catch_up.server) @with_interface_lock def blockchain(self): if self.interface and self.interface.blockchain is not None: self.blockchain_index = self.interface.blockchain.forkpoint - return self.blockchains[self.blockchain_index] + return blockchain.blockchains[self.blockchain_index] @with_interface_lock def get_blockchains(self): out = {} with self.blockchains_lock: - blockchain_items = list(self.blockchains.items()) + blockchain_items = list(blockchain.blockchains.items()) for k, b in blockchain_items: r = list(filter(lambda i: i.blockchain==b, list(self.interfaces.values()))) if r: @@ -1126,14 +693,14 @@ class Network(PrintError): return out def follow_chain(self, index): - blockchain = self.blockchains.get(index) - if blockchain: + bc = blockchain.blockchains.get(index) + if bc: self.blockchain_index = index self.config.set_key('blockchain_index', index) with self.interface_lock: interfaces = list(self.interfaces.values()) for i in interfaces: - if i.blockchain == blockchain: + if i.blockchain == bc: self.switch_to_interface(i.server) break else: @@ -1149,119 +716,6 @@ class Network(PrintError): def get_local_height(self): return self.blockchain().height() - @staticmethod - def __wait_for(it): - """Wait for the result of calling lambda `it`.""" - q = queue.Queue() - it(q.put) - try: - result = q.get(block=True, timeout=30) - except queue.Empty: - raise util.TimeoutException(_('Server did not answer')) - - if result.get('error'): - raise Exception(result.get('error')) - - return result.get('result') - - @staticmethod - def __with_default_synchronous_callback(invocation, callback): - """ Use this method if you want to make the network request - synchronous. """ - if not callback: - return Network.__wait_for(invocation) - - invocation(callback) - - def request_header(self, interface, height): - self.queue_request('blockchain.block.get_header', [height], interface) - interface.request = height - interface.req_time = time.time() - - def map_scripthash_to_address(self, callback): - def cb2(x): - x2 = x.copy() - p = x2.pop('params') - addr = self.h2addr[p[0]] - x2['params'] = [addr] - callback(x2) - return cb2 - - # NOTE this method handles exceptions and a special edge case, counter to - # what the other ElectrumX methods do. This is unexpected. - def broadcast_transaction(self, transaction, callback=None): - command = 'blockchain.transaction.broadcast' - invocation = lambda c: self.send([(command, [str(transaction)])], c) - - if callback: - invocation(callback) - return - - try: - out = Network.__wait_for(invocation) - except BaseException as e: - return False, "error: " + str(e) - - if out != transaction.txid(): - return False, "error: " + out - - return True, out - - def get_history_for_scripthash(self, hash, callback=None): - command = 'blockchain.scripthash.get_history' - invocation = lambda c: self.send([(command, [hash])], c) - - return Network.__with_default_synchronous_callback(invocation, callback) - - def subscribe_to_headers(self, callback=None): - command = 'blockchain.headers.subscribe' - invocation = lambda c: self.send([(command, [True])], c) - - return Network.__with_default_synchronous_callback(invocation, callback) - - def subscribe_to_address(self, address, callback=None): - command = 'blockchain.address.subscribe' - invocation = lambda c: self.send([(command, [address])], c) - - return Network.__with_default_synchronous_callback(invocation, callback) - - def get_merkle_for_transaction(self, tx_hash, tx_height, callback=None): - command = 'blockchain.transaction.get_merkle' - invocation = lambda c: self.send([(command, [tx_hash, tx_height])], c) - - return Network.__with_default_synchronous_callback(invocation, callback) - - def subscribe_to_scripthash(self, scripthash, callback=None): - command = 'blockchain.scripthash.subscribe' - invocation = lambda c: self.send([(command, [scripthash])], c) - - return Network.__with_default_synchronous_callback(invocation, callback) - - def get_transaction(self, transaction_hash, callback=None): - command = 'blockchain.transaction.get' - invocation = lambda c: self.send([(command, [transaction_hash])], c) - - return Network.__with_default_synchronous_callback(invocation, callback) - - def get_transactions(self, transaction_hashes, callback=None): - command = 'blockchain.transaction.get' - messages = [(command, [tx_hash]) for tx_hash in transaction_hashes] - invocation = lambda c: self.send(messages, c) - - return Network.__with_default_synchronous_callback(invocation, callback) - - def listunspent_for_scripthash(self, scripthash, callback=None): - command = 'blockchain.scripthash.listunspent' - invocation = lambda c: self.send([(command, [scripthash])], c) - - return Network.__with_default_synchronous_callback(invocation, callback) - - def get_balance_for_scripthash(self, scripthash, callback=None): - command = 'blockchain.scripthash.get_balance' - invocation = lambda c: self.send([(command, [scripthash])], c) - - return Network.__with_default_synchronous_callback(invocation, callback) - def export_checkpoints(self, path): # run manually from the console to generate checkpoints cp = self.blockchain().get_checkpoints() @@ -1310,3 +764,4 @@ class Network(PrintError): if changed: self.notify('updated') await asyncio.sleep(1) + diff --git a/electrum/verifier.py b/electrum/verifier.py index 4a0d82ec4..f64e7fa47 100644 --- a/electrum/verifier.py +++ b/electrum/verifier.py @@ -21,9 +21,10 @@ # CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. +import asyncio from typing import Sequence, Optional -from .util import ThreadJob, bh2u, VerifiedTxInfo +from .util import ThreadJob, bh2u, VerifiedTxInfo, aiosafe from .bitcoin import Hash, hash_decode, hash_encode from .transaction import Transaction from .blockchain import hash_header @@ -45,17 +46,21 @@ class SPV(ThreadJob): self.merkle_roots = {} # txid -> merkle root (once it has been verified) self.requested_merkle = set() # txid set of pending requests - def run(self): - interface = self.network.interface - if not interface: - return + @aiosafe + async def main(self): + while True: + await self.run() + await asyncio.sleep(1) - blockchain = interface.blockchain + async def run(self): + blockchain = self.network.blockchain() if not blockchain: + self.print_error("no blockchain") return local_height = self.network.get_local_height() unverified = self.wallet.get_unverified_txs() + #print("verifier run", len(unverified)) for tx_hash, tx_height in unverified.items(): # do not request merkle branch before headers are available if tx_height <= 0 or tx_height > local_height: @@ -65,31 +70,26 @@ class SPV(ThreadJob): if header is None: index = tx_height // 2016 if index < len(blockchain.checkpoints): - self.network.request_chunk(interface, index) + # FIXME disabled until async block header download has been merged + pass #await self.network.request_chunk(tx_height, None) elif (tx_hash not in self.requested_merkle and tx_hash not in self.merkle_roots): - self.network.get_merkle_for_transaction( - tx_hash, - tx_height, - self.verify_merkle) self.print_error('requested merkle', tx_hash) self.requested_merkle.add(tx_hash) + self.verify_merkle(tx_hash, await self.network.get_merkle_for_transaction( + tx_hash, + tx_height + )) if self.network.blockchain() != self.blockchain: self.blockchain = self.network.blockchain() self.undo_verifications() - def verify_merkle(self, response): + def verify_merkle(self, tx_hash, merkle): if self.wallet.verifier is None: return # we have been killed, this was just an orphan callback - if response.get('error'): - self.print_error('received an error:', response) - return - params = response['params'] - merkle = response['result'] # Verify the hash of the server-provided merkle branch to a # transaction matches the merkle root of its block - tx_hash = params[0] tx_height = merkle.get('block_height') pos = merkle.get('pos') merkle_branch = merkle.get('merkle') diff --git a/electrum/version.py b/electrum/version.py index cf185907d..53387af39 100644 --- a/electrum/version.py +++ b/electrum/version.py @@ -1,7 +1,7 @@ ELECTRUM_VERSION = '3.2.3' # version of the client package APK_VERSION = '3.2.3.1' # read by buildozer.spec -PROTOCOL_VERSION = '1.2' # protocol version requested +PROTOCOL_VERSION = '1.4' # protocol version requested # The hash of the mnemonic seed must begin with this SEED_PREFIX = '01' # Standard wallet From 9bfb5fe71f7027fc904f4dee9afcd9856deee4c4 Mon Sep 17 00:00:00 2001 From: Janus Date: Wed, 29 Aug 2018 15:15:15 +0200 Subject: [PATCH 08/76] address synchronizer: use aiorpcx session object in network's interface, request, fees --- electrum/synchronizer.py | 78 ++++++++++++++++++++++------------------ 1 file changed, 44 insertions(+), 34 deletions(-) diff --git a/electrum/synchronizer.py b/electrum/synchronizer.py index 6cc3b7bdf..f65793132 100644 --- a/electrum/synchronizer.py +++ b/electrum/synchronizer.py @@ -32,10 +32,11 @@ import concurrent.futures # from .bitcoin import Hash, hash_encode from .transaction import Transaction -from .util import ThreadJob, bh2u, PrintError, aiosafe +from .util import ThreadJob, bh2u, PrintError, aiosafe, bfh, NotificationSession from .bitcoin import address_to_scripthash from .version import ELECTRUM_VERSION, PROTOCOL_VERSION - +from .network import parse_servers +from .bitcoin import COIN def history_status(h): if not h: @@ -47,20 +48,6 @@ def history_status(h): -class NotificationSession(ClientSession): - - def __init__(self, queue, *args, **kwargs): - super(NotificationSession, self).__init__(*args, **kwargs) - self.queue = queue - - @aiosafe - async def handle_request(self, request): - if isinstance(request, Notification): - if request.method == 'blockchain.scripthash.subscribe': - args = request.args - await self.queue.put((args[0], args[1])) - - class Synchronizer(PrintError): '''The synchronizer keeps the wallet up-to-date with its set of addresses and their transactions. It subscribes over the network @@ -79,9 +66,6 @@ class Synchronizer(PrintError): self.add_queue = asyncio.Queue() self.status_queue = asyncio.Queue() - async def send_version(self): - r = await self.session.send_request('server.version', [ELECTRUM_VERSION, PROTOCOL_VERSION]) - def is_up_to_date(self): return (not self.requested_addrs and not self.requested_histories) @@ -134,6 +118,8 @@ class Synchronizer(PrintError): # Remove request; this allows up_to_date to be True self.requested_histories.pop(addr) + if self.wallet.network: self.wallet.network.notify('updated') + async def request_missing_txs(self, hist): # "hist" is a list of [tx_hash, tx_height] lists transaction_hashes = [] @@ -170,12 +156,37 @@ class Synchronizer(PrintError): async def subscribe_to_address(self, addr): h = address_to_scripthash(addr) self.scripthash_to_address[h] = addr + self.session.scripthash = self.status_queue status = await self.session.send_request('blockchain.scripthash.subscribe', [h]) await self.status_queue.put((h, status)) self.requested_addrs.remove(addr) + async def request_fee_estimates(self): + from .simple_config import FEE_ETA_TARGETS + self.wallet.network.config.requested_fee_estimates() + histogram = await self.session.send_request('mempool.get_fee_histogram') + fees = [] + for i in FEE_ETA_TARGETS: + fees.append((i, await self.session.send_request('blockchain.estimatefee', [i]))) + return histogram, fees + @aiosafe async def send_subscriptions(self): + self.wallet.network.banner = await self.session.send_request('server.banner') + self.wallet.network.notify('banner') + self.wallet.network.donation_address = await self.session.send_request('server.donation_address') + self.wallet.network.irc_servers = parse_servers(await self.session.send_request('server.peers.subscribe')) + self.wallet.network.notify('servers') + histogram, fees = await self.request_fee_estimates() + self.wallet.network.config.mempool_fees = histogram + self.wallet.network.notify('fee_histogram') + for i, result in fees: + fee = int(result * COIN) + self.wallet.network.config.update_fee_estimates(i, fee) + self.print_error("fee_estimates[%d]" % i, fee) + self.wallet.network.notify('fee') + relayfee = await self.session.send_request('blockchain.relayfee') + self.wallet.network.relay_fee = int(relayfee * COIN) if relayfee is not None else None async with TaskGroup() as group: while True: addr = await self.add_queue.get() @@ -189,20 +200,19 @@ class Synchronizer(PrintError): addr = self.scripthash_to_address[h] await group.spawn(self.on_address_status(addr, status)) + @property + def session(self): + s = self.wallet.network.interface.session + assert s is not None + return s + @aiosafe async def main(self): - conn = self.wallet.network.default_server - host, port, protocol = conn.split(':') - sslc = ssl.SSLContext(ssl.PROTOCOL_TLS) if protocol == 's' else None - async with NotificationSession(self.status_queue, host, int(port), ssl=sslc) as session: - self.session = session - await self.send_version() - self.wallet.synchronizer = self - for addr in self.wallet.get_addresses(): self.add(addr) - while True: - await asyncio.sleep(1) - self.wallet.synchronize() - up_to_date = self.is_up_to_date() - if up_to_date != self.wallet.is_up_to_date(): - self.wallet.set_up_to_date(up_to_date) - self.wallet.network.trigger_callback('updated') + for addr in self.wallet.get_addresses(): self.add(addr) + while True: + await asyncio.sleep(1) + self.wallet.synchronize() + up_to_date = self.is_up_to_date() + if up_to_date != self.wallet.is_up_to_date(): + self.wallet.set_up_to_date(up_to_date) + self.wallet.network.trigger_callback('updated') From 5117a520aeb91875ab6b0a0192490f3cc15ec3d0 Mon Sep 17 00:00:00 2001 From: ThomasV Date: Fri, 31 Aug 2018 14:43:02 +0200 Subject: [PATCH 09/76] fix start_network --- electrum/network.py | 1 + 1 file changed, 1 insertion(+) diff --git a/electrum/network.py b/electrum/network.py index 4509b6382..3df3f51d7 100644 --- a/electrum/network.py +++ b/electrum/network.py @@ -442,6 +442,7 @@ class Network(PrintError): self.disconnected_servers = set([]) # note: needs self.interface_lock self.protocol = protocol self.set_proxy(proxy) + self.start_interface(self.default_server) @with_interface_lock def stop_network(self): From 9543a108be4feaba269f638ffc082db5429a7244 Mon Sep 17 00:00:00 2001 From: Janus Date: Fri, 31 Aug 2018 15:25:09 +0200 Subject: [PATCH 10/76] aiorpcx: revive some maintain_sockets code, reintroduce NODES_RETRY_INTERVAL and SERVER_RETRY_INTERVAL usage, and fix --oneserver --- electrum/network.py | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/electrum/network.py b/electrum/network.py index 3df3f51d7..e0c8f398c 100644 --- a/electrum/network.py +++ b/electrum/network.py @@ -759,9 +759,35 @@ class Network(PrintError): for k in remove: self.connection_down(k) changed = True + + # nodes + now = time.time() for i in range(self.num_server - len(self.interfaces) - len(self.connecting)): if self.start_random_interface(): changed = True + if now - self.nodes_retry_time > NODES_RETRY_INTERVAL: + self.print_error('network: retrying connections') + self.disconnected_servers = set([]) + self.nodes_retry_time = now + + # main interface + if not self.is_connected(): + if self.auto_connect: + if not self.is_connecting(): + self.switch_to_random_interface() + changed = True + else: + if self.default_server in self.disconnected_servers: + if now - self.server_retry_time > SERVER_RETRY_INTERVAL: + self.disconnected_servers.remove(self.default_server) + self.server_retry_time = now + changed = True + else: + self.switch_to_interface(self.default_server) + changed = True + + # TODO: request fee_estimates if needed (now in synchronizer) + if changed: self.notify('updated') await asyncio.sleep(1) From 6700364ac854275c7ecfcd3d0eaaa7c23111aacd Mon Sep 17 00:00:00 2001 From: SomberNight Date: Wed, 29 Aug 2018 18:57:10 +0200 Subject: [PATCH 11/76] interface: fix cert handling notably os.unlink cannot be inside the "with open" --- electrum/interface.py | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/electrum/interface.py b/electrum/interface.py index 5ed8aa714..b386f0f77 100644 --- a/electrum/interface.py +++ b/electrum/interface.py @@ -103,19 +103,19 @@ class Interface(PrintError): if exists: with open(self.cert_path, 'r') as f: contents = f.read() - if contents != '': # if not CA signed + if contents != '': # if not CA signed + try: + b = pem.dePem(contents, 'CERTIFICATE') + except SyntaxError: + exists = False + else: + x = x509.X509(b) try: - b = pem.dePem(contents, 'CERTIFICATE') - except SyntaxError: + x.check_date() + except x509.CertificateError as e: + self.print_error("certificate problem", e) + os.unlink(self.cert_path) exists = False - else: - x = x509.X509(b) - try: - x.check_date() - except x509.CertificateError as e: - self.print_error("certificate problem", e) - os.unlink(self.cert_path) - exists = False if not exists: ca_signed = await self.is_server_ca_signed(ca_sslc) if ca_signed: From a4ffa0b22a9577f2aaa8bb731af4671ad3dc6a3d Mon Sep 17 00:00:00 2001 From: SomberNight Date: Wed, 29 Aug 2018 18:59:47 +0200 Subject: [PATCH 12/76] interface: clean-up proxy username/pw handling --- electrum/interface.py | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/electrum/interface.py b/electrum/interface.py index b386f0f77..ad6ea7c1b 100644 --- a/electrum/interface.py +++ b/electrum/interface.py @@ -62,16 +62,11 @@ class Interface(PrintError): self.blockchain = None self.network = network if proxy: - proxy['user'] = proxy.get('user', '') - if proxy['user'] == '': - proxy['user'] = 'sampleuser' # aiorpcx doesn't allow empty user - proxy['password'] = proxy.get('password', '') - if proxy['password'] == '': - proxy['password'] = 'samplepassword' - try: - auth = aiorpcx.socks.SOCKSUserAuth(proxy['user'], proxy['password']) - except KeyError: + username, pw = proxy.get('user'), proxy.get('password') + if not username or not pw: auth = None + else: + auth = aiorpcx.socks.SOCKSUserAuth(username, pw) if proxy['mode'] == "socks4": self.proxy = aiorpcx.socks.SOCKSProxy((proxy['host'], int(proxy['port'])), aiorpcx.socks.SOCKS4a, auth) elif proxy['mode'] == "socks5": From f12074397fd2855db6a2584010a203cc2eeda9c8 Mon Sep 17 00:00:00 2001 From: Janus Date: Fri, 31 Aug 2018 16:46:49 +0200 Subject: [PATCH 13/76] aiorpcx: reintroduce periodic fee updates --- electrum/network.py | 47 +++++++++++++++++++++++++++++++++++++--- electrum/synchronizer.py | 26 ---------------------- 2 files changed, 44 insertions(+), 29 deletions(-) diff --git a/electrum/network.py b/electrum/network.py index e0c8f398c..1d5055f69 100644 --- a/electrum/network.py +++ b/electrum/network.py @@ -240,6 +240,9 @@ class Network(PrintError): deserialize_proxy(self.config.get('proxy'))) self.asyncio_loop = asyncio.get_event_loop() self.futures = [] + self.server_info_job = asyncio.Future() + # just to not trigger a warning from switch_to_interface the first time we change default_server + self.server_info_job.set_result(1) def with_interface_lock(func): def func_wrapper(self, *args, **kwargs): @@ -312,11 +315,40 @@ class Network(PrintError): self.notify('status') def is_connected(self): - return self.interface is not None + return self.interface is not None and self.interface.ready.done() def is_connecting(self): return self.connection_status == 'connecting' + @util.aiosafe + async def request_server_info(self, interface): + await interface.ready + session = interface.session + self.banner = await session.send_request('server.banner') + self.notify('banner') + self.donation_address = await session.send_request('server.donation_address') + self.irc_servers = parse_servers(await session.send_request('server.peers.subscribe')) + self.notify('servers') + await self.request_fee_estimates(interface) + relayfee = await session.send_request('blockchain.relayfee') + self.relay_fee = int(relayfee * COIN) if relayfee is not None else None + + async def request_fee_estimates(self, interface): + session = interface.session + from .simple_config import FEE_ETA_TARGETS + self.config.requested_fee_estimates() + histogram = await session.send_request('mempool.get_fee_histogram') + fees = [] + for i in FEE_ETA_TARGETS: + fees.append((i, await session.send_request('blockchain.estimatefee', [i]))) + self.config.mempool_fees = histogram + self.notify('fee_histogram') + for i, result in fees: + fee = int(result * COIN) + self.config.update_fee_estimates(i, fee) + self.print_error("fee_estimates[%d]" % i, fee) + self.notify('fee') + def get_status_value(self, key): if key == 'status': value = self.connection_status @@ -512,6 +544,7 @@ class Network(PrintError): being opened, start a thread to connect. The actual switch will happen on receipt of the connection notification. Do nothing if server already is our interface.''' + old_default_server = self.default_server self.default_server = server if server not in self.interfaces: self.interface = None @@ -525,6 +558,10 @@ class Network(PrintError): # fixme: we don't want to close headers sub #self.close_interface(self.interface) self.interface = i + if not self.server_info_job.done(): + self.print_error('cancelled previous request_server_info job, was it too slow? server was:', old_default_server) + self.server_info_job.cancel() + self.server_info_job = asyncio.get_event_loop().create_task(self.request_server_info(i)) self.trigger_callback('default_server_changed') self.set_status('connected') self.notify('updated') @@ -785,10 +822,14 @@ class Network(PrintError): else: self.switch_to_interface(self.default_server) changed = True - - # TODO: request fee_estimates if needed (now in synchronizer) + else: + if self.config.is_fee_estimates_update_required(): + asyncio.get_event_loop().create_task(self.attempt_fee_estimate_update()) if changed: self.notify('updated') await asyncio.sleep(1) + @util.aiosafe + async def attempt_fee_estimate_update(self): + await asyncio.wait_for(self.request_fee_estimates(self.interface), 5) diff --git a/electrum/synchronizer.py b/electrum/synchronizer.py index f65793132..eba1ec7f0 100644 --- a/electrum/synchronizer.py +++ b/electrum/synchronizer.py @@ -35,8 +35,6 @@ from .transaction import Transaction from .util import ThreadJob, bh2u, PrintError, aiosafe, bfh, NotificationSession from .bitcoin import address_to_scripthash from .version import ELECTRUM_VERSION, PROTOCOL_VERSION -from .network import parse_servers -from .bitcoin import COIN def history_status(h): if not h: @@ -161,32 +159,8 @@ class Synchronizer(PrintError): await self.status_queue.put((h, status)) self.requested_addrs.remove(addr) - async def request_fee_estimates(self): - from .simple_config import FEE_ETA_TARGETS - self.wallet.network.config.requested_fee_estimates() - histogram = await self.session.send_request('mempool.get_fee_histogram') - fees = [] - for i in FEE_ETA_TARGETS: - fees.append((i, await self.session.send_request('blockchain.estimatefee', [i]))) - return histogram, fees - @aiosafe async def send_subscriptions(self): - self.wallet.network.banner = await self.session.send_request('server.banner') - self.wallet.network.notify('banner') - self.wallet.network.donation_address = await self.session.send_request('server.donation_address') - self.wallet.network.irc_servers = parse_servers(await self.session.send_request('server.peers.subscribe')) - self.wallet.network.notify('servers') - histogram, fees = await self.request_fee_estimates() - self.wallet.network.config.mempool_fees = histogram - self.wallet.network.notify('fee_histogram') - for i, result in fees: - fee = int(result * COIN) - self.wallet.network.config.update_fee_estimates(i, fee) - self.print_error("fee_estimates[%d]" % i, fee) - self.wallet.network.notify('fee') - relayfee = await self.session.send_request('blockchain.relayfee') - self.wallet.network.relay_fee = int(relayfee * COIN) if relayfee is not None else None async with TaskGroup() as group: while True: addr = await self.add_queue.get() From 19387ff91133174ada0cf0a59e8e62bc6b3cd7e4 Mon Sep 17 00:00:00 2001 From: Janus Date: Fri, 31 Aug 2018 18:06:11 +0200 Subject: [PATCH 14/76] aiorpcx: simplify open_session --- electrum/interface.py | 33 ++++++++++++++++----------------- 1 file changed, 16 insertions(+), 17 deletions(-) diff --git a/electrum/interface.py b/electrum/interface.py index ad6ea7c1b..1db430fe7 100644 --- a/electrum/interface.py +++ b/electrum/interface.py @@ -81,7 +81,7 @@ class Interface(PrintError): async def is_server_ca_signed(self, sslc): try: - await self.open_session(sslc, do_sleep=False) + await self.open_session(sslc, exit_early=True) except ssl.SSLError as e: assert e.reason == 'CERTIFICATE_VERIFY_FAILED' return False @@ -90,7 +90,7 @@ class Interface(PrintError): @util.aiosafe async def run(self): if self.protocol != 's': - await self.open_session(None, execute_after_connect=self.mark_ready) + await self.open_session(None, exit_early=False) assert False ca_sslc = ssl.create_default_context(ssl.Purpose.SERVER_AUTH) @@ -125,7 +125,7 @@ class Interface(PrintError): else: sslc = ssl.create_default_context(ssl.Purpose.SERVER_AUTH, cafile=self.cert_path) sslc.check_hostname = 0 - await self.open_session(sslc, execute_after_connect=self.mark_ready) + await self.open_session(sslc, exit_early=False) assert False def mark_ready(self): @@ -171,22 +171,21 @@ class Interface(PrintError): except ValueError: return None - async def open_session(self, sslc, do_sleep=True, execute_after_connect=lambda: None): - q = asyncio.Queue() - async with NotificationSession(None, q, self.host, self.port, ssl=sslc, proxy=self.proxy) as session: + async def open_session(self, sslc, exit_early): + header_queue = asyncio.Queue() + async with NotificationSession(None, header_queue, self.host, self.port, ssl=sslc, proxy=self.proxy) as session: ver = await session.send_request('server.version', [ELECTRUM_VERSION, PROTOCOL_VERSION]) - self.print_error(ver, do_sleep, self.host) - connect_hook_executed = False - while do_sleep: - if not connect_hook_executed: - connect_hook_executed = True - res = await session.send_request('blockchain.headers.subscribe') - self.tip_header = blockchain.deserialize_header(bfh(res['hex']), res['height']) - self.tip = res['height'] - execute_after_connect() - self.session = session + if exit_early: + return + self.print_error(ver, self.host) + subscription_res = await session.send_request('blockchain.headers.subscribe') + self.tip_header = blockchain.deserialize_header(bfh(subscription_res['hex']), subscription_res['height']) + self.tip = subscription_res['height'] + self.mark_ready() + self.session = session + while True: try: - new_header = await asyncio.wait_for(q.get(), 300) + new_header = await asyncio.wait_for(header_queue.get(), 300) self.tip_header = new_header self.tip = new_header['block_height'] except concurrent.futures.TimeoutError: From e9ceeb85af014a0a54835ab9bf0dbb554db456f1 Mon Sep 17 00:00:00 2001 From: Janus Date: Tue, 14 Aug 2018 17:50:20 +0200 Subject: [PATCH 15/76] async block headers --- electrum/blockchain.py | 2 +- electrum/interface.py | 212 ++++++++++++++++++++++++++++++- electrum/network.py | 38 +++++- electrum/tests/test_interface.py | 28 ---- electrum/tests/test_network.py | 118 +++++++++++++++++ electrum/verifier.py | 3 +- 6 files changed, 364 insertions(+), 37 deletions(-) delete mode 100644 electrum/tests/test_interface.py create mode 100644 electrum/tests/test_network.py diff --git a/electrum/blockchain.py b/electrum/blockchain.py index c4c557826..e0ab5d162 100644 --- a/electrum/blockchain.py +++ b/electrum/blockchain.py @@ -308,7 +308,7 @@ class Blockchain(util.PrintError): elif height == 0: return constants.net.GENESIS elif height < len(self.checkpoints) * 2016: - assert (height+1) % 2016 == 0, height + assert (height+1) % 2016 == 0, (height, len(self.checkpoints), (height+1) % 2016) index = height // 2016 h, t = self.checkpoints[index] return h diff --git a/electrum/interface.py b/electrum/interface.py index 1db430fe7..23119333b 100644 --- a/electrum/interface.py +++ b/electrum/interface.py @@ -87,7 +87,7 @@ class Interface(PrintError): return False return True - @util.aiosafe + @aiosafe async def run(self): if self.protocol != 's': await self.open_session(None, exit_early=False) @@ -183,11 +183,15 @@ class Interface(PrintError): self.tip = subscription_res['height'] self.mark_ready() self.session = session + copy_header_queue = asyncio.Queue() + conniface = Conn(self.server, session, lambda idx, tip: self.network.request_chunk(idx, tip, session)) + block_retriever = asyncio.get_event_loop().create_task(self.run_fetch_blocks(subscription_res, copy_header_queue, conniface)) while True: try: new_header = await asyncio.wait_for(header_queue.get(), 300) self.tip_header = new_header self.tip = new_header['block_height'] + await copy_header_queue.put(new_header) except concurrent.futures.TimeoutError: await asyncio.wait_for(session.send_request('server.ping'), 5) @@ -197,6 +201,212 @@ class Interface(PrintError): def close(self): self.fut.cancel() + @aiosafe + async def run_fetch_blocks(self, sub_reply, replies, conniface): + async with self.network.bhi_lock: + bhi = BlockHeaderInterface(conniface, sub_reply['height'], self.blockchain.height()+1, self) + await replies.put(blockchain.deserialize_header(bfh(sub_reply['hex']), sub_reply['height'])) + self.print_error("checking if catched up {}-1 > {}, tip {}".format(sub_reply['height'], self.blockchain.height(), bhi.tip)) + if sub_reply['height']-1 > self.blockchain.height(): + last_status = await bhi.sync_until() + assert last_status == 'catchup', last_status + assert self.blockchain.height()+1 == bhi.height, (self.blockchain.height(), bhi.height) + + while True: + self.network.notify('updated') + item = await replies.get() + async with self.network.bhi_lock: + if self.blockchain.height() >= bhi.height and self.blockchain.check_header(item): + # another interface amended the blockchain + self.print_error("SKIPPING HEADER", bhi.height) + continue + if bhi.tip < bhi.height: + bhi.height = bhi.tip + await bhi.step(item) + bhi.tip = max(bhi.height, bhi.tip) + +class BlockHeaderInterface(PrintError): + def __init__(self, conn, tip, height, iface): + self.tip = tip + self.height = height + self.conn = conn + self.iface = iface + + def diagnostic_name(self): + return self.conn.server + + async def sync_until(self, next_height=None): + if next_height is None: + next_height = self.tip + last = None + while last is None or self.height < next_height: + if next_height > self.height + 10: + could_connect, num_headers = await self.conn.request_chunk(self.height, next_height) + self.tip = max(self.height + num_headers, self.tip) + if not could_connect: + last = await self.step() + self.tip = max(self.height, self.tip) + continue + self.height = (self.height // 2016 * 2016) + num_headers + if self.height > next_height: + assert False, (self.height, self.tip) + last = 'catchup' + else: + last = await self.step() + self.tip = max(self.height, self.tip) + return last + + async def step(self, header=None): + assert self.height != 0 + if header is None: + header = await self.conn.get_block_header(self.height, 'catchup') + can_connect = blockchain.can_connect(header) if 'mock' not in header else header['mock']['connect'](self) + + bad_header = None + if not can_connect: + self.print_error("can't connect", self.height) + #backward + bad = self.height + bad_header = header + self.height -= 1 + checkp = False + if self.height <= self.iface.network.max_checkpoint(): + self.height = self.iface.network.max_checkpoint() + 1 + checkp = True + + header = await self.conn.get_block_header(self.height, 'backward') + chain = blockchain.check_header(header) if 'mock' not in header else header['mock']['check'](header) + can_connect = blockchain.can_connect(header) if 'mock' not in header else header['mock']['connect'](self) + if checkp: + assert can_connect or chain, (can_connect, chain) + while not chain and not can_connect: + bad = self.height + bad_header = header + delta = self.tip - self.height + next_height = self.tip - 2 * delta + checkp = False + if next_height <= self.iface.network.max_checkpoint(): + next_height = self.iface.network.max_checkpoint() + 1 + checkp = True + self.height = next_height + + header = await self.conn.get_block_header(self.height, 'backward') + chain = blockchain.check_header(header) if 'mock' not in header else header['mock']['check'](header) + can_connect = blockchain.can_connect(header) if 'mock' not in header else header['mock']['connect'](self) + if checkp: + assert can_connect or chain, (can_connect, chain) + self.print_error("exiting backward mode at", self.height) + if can_connect: + self.print_error("could connect", self.height) + chain = blockchain.check_header(header) if 'mock' not in header else header['mock']['check'](header) + + if type(can_connect) is bool: + # mock + self.height += 1 + if self.height > self.tip: + assert False + return 'catchup' + self.iface.blockchain = can_connect + self.height += 1 + self.iface.blockchain.save_header(header) + return 'catchup' + + if not chain: + raise Exception("not chain") # line 931 in 8e69174374aee87d73cd2f8005fbbe87c93eee9c's network.py + + # binary + if type(chain) in [int, bool]: + pass # mock + else: + self.iface.blockchain = chain + good = self.height + self.height = (bad + good) // 2 + header = await self.conn.get_block_header(self.height, 'binary') + while True: + self.print_error("binary step") + chain = blockchain.check_header(header) if 'mock' not in header else header['mock']['check'](header) + if chain: + assert bad != self.height, (bad, self.height) + good = self.height + self.iface.blockchain = self.iface.blockchain if type(chain) in [bool, int] else chain + else: + bad = self.height + assert good != self.height + bad_header = header + if bad != good + 1: + self.height = (bad + good) // 2 + header = await self.conn.get_block_header(self.height, 'binary') + continue + mock = bad_header and 'mock' in bad_header and bad_header['mock']['connect'](self) + real = not mock and self.iface.blockchain.can_connect(bad_header, check_height=False) + if not real and not mock: + raise Exception('unexpected bad header during binary' + str(bad_header)) # line 948 in 8e69174374aee87d73cd2f8005fbbe87c93eee9c's network.py + branch = blockchain.blockchains.get(bad) + if branch is not None: + ismocking = False + if type(branch) is dict: + ismocking = True + # FIXME: it does not seem sufficient to check that the branch + # contains the bad_header. what if self.blockchain doesn't? + # the chains shouldn't be joined then. observe the incorrect + # joining on regtest with a server that has a fork of height + # one. the problem is observed only if forking is not during + # electrum runtime + if ismocking and branch['check'](bad_header) or not ismocking and branch.check_header(bad_header): + self.print_error('joining chain', bad) + self.height += 1 + return 'join' + else: + if ismocking and branch['parent']['check'](header) or not ismocking and branch.parent().check_header(header): + self.print_error('reorg', bad, self.tip) + self.iface.blockchain = branch.parent() if not ismocking else branch['parent'] + self.height = bad + header = await self.conn.get_block_header(self.height, 'binary') + else: + if ismocking: + self.height = bad + 1 + self.print_error("TODO replace blockchain") + return 'conflict' + self.print_error('forkpoint conflicts with existing fork', branch.path()) + branch.write(b'', 0) + branch.save_header(bad_header) + self.iface.blockchain = branch + self.height = bad + 1 + return 'conflict' + else: + bh = self.iface.blockchain.height() + if bh > good: + forkfun = self.iface.blockchain.fork + if 'mock' in bad_header: + chain = bad_header['mock']['check'](bad_header) + forkfun = bad_header['mock']['fork'] if 'fork' in bad_header['mock'] else forkfun + else: + chain = self.iface.blockchain.check_header(bad_header) + if not chain: + b = forkfun(bad_header) + assert bad not in blockchain.blockchains, (bad, list(blockchain.blockchains.keys())) + blockchain.blockchains[bad] = b + self.iface.blockchain = b + self.height = b.forkpoint + 1 + assert b.forkpoint == bad + return 'fork' + else: + assert bh == good + if bh < self.tip: + self.print_error("catching up from %d"% (bh + 1)) + self.height = bh + 1 + return 'no_fork' + +class Conn: + def __init__(self, server, session, get_chunk): + self.server = server + self.session = session # type: aiorpcx.ClientSession + self.request_chunk = get_chunk + async def get_block_header(self, height, assert_mode): + res = await asyncio.wait_for(self.session.send_request('blockchain.block.header', [height]), 1) + return blockchain.deserialize_header(bytes.fromhex(res), height) + + def check_cert(host, cert): try: b = pem.dePem(cert, 'CERTIFICATE') diff --git a/electrum/network.py b/electrum/network.py index 1d5055f69..92378d9fa 100644 --- a/electrum/network.py +++ b/electrum/network.py @@ -37,7 +37,7 @@ import dns import dns.resolver from . import util -from .util import PrintError, print_error, bfh +from .util import PrintError, print_error, aiosafe, bfh from .bitcoin import COIN from . import constants from . import blockchain @@ -533,7 +533,12 @@ class Network(PrintError): if self.server_is_lagging() and self.auto_connect: # switch to one that has the correct header (not height) header = self.blockchain().read_header(self.get_local_height()) - filtered = list(map(lambda x: x[0], filter(lambda x: x[1].tip_header == header, self.interfaces.items()))) + def filt(x): + a = x[1].tip_header + b = header + assert type(a) is type(b) + return a == b + filtered = list(map(lambda x: x[0], filter(filt, self.interfaces.items()))) if filtered: choice = random.choice(filtered) self.switch_to_interface(choice) @@ -668,7 +673,7 @@ class Network(PrintError): if b.catch_up == server: b.catch_up = None - @util.aiosafe + @aiosafe async def new_interface(self, server): # todo: get tip first, then decide which checkpoint to use. self.add_recent_server(server) @@ -677,8 +682,8 @@ class Network(PrintError): try: await asyncio.wait_for(interface.ready, 5) except BaseException as e: - import traceback - traceback.print_exc() + #import traceback + #traceback.print_exc() self.print_error(interface.server, "couldn't launch because", str(e), str(type(e))) self.connection_down(interface.server) return @@ -713,6 +718,29 @@ class Network(PrintError): except concurrent.futures.CancelledError: pass + async def get_merkle_for_transaction(self, tx_hash, tx_height): + print("getting merkle for transaction", tx_hash, tx_height) + return await self.interface.session.send_request('blockchain.transaction.get_merkle', [tx_hash, tx_height]) + + def broadcast_transaction(self, tx): + fut = asyncio.run_coroutine_threadsafe(self.interface.session.send_request('blockchain.transaction.broadcast', [str(tx)]), self.asyncio_loop) + return True, fut.result(1) + + async def request_chunk(self, height, tip, session=None): + if session is None: session = self.interface.session + index = height // 2016 + size = 2016 + if tip is not None and height + 2016 >= tip: + size = tip - height + #if index * 2016 < height: + # size = height - index * 2016 + res = await session.send_request('blockchain.block.headers', [index * 2016, size]) + conn = self.blockchain().connect_chunk(index, res['hex']) + if not conn: + return conn, 0 + self.blockchain().save_chunk(index, bfh(res['hex'])) + return conn, res['count'] + @with_interface_lock def blockchain(self): if self.interface and self.interface.blockchain is not None: diff --git a/electrum/tests/test_interface.py b/electrum/tests/test_interface.py deleted file mode 100644 index 402588ca8..000000000 --- a/electrum/tests/test_interface.py +++ /dev/null @@ -1,28 +0,0 @@ -import unittest - -from electrum import interface - -from . import SequentialTestCase - - -class TestInterface(SequentialTestCase): - - def test_match_host_name(self): - self.assertTrue(interface._match_hostname('asd.fgh.com', 'asd.fgh.com')) - self.assertFalse(interface._match_hostname('asd.fgh.com', 'asd.zxc.com')) - self.assertTrue(interface._match_hostname('asd.fgh.com', '*.fgh.com')) - self.assertFalse(interface._match_hostname('asd.fgh.com', '*fgh.com')) - self.assertFalse(interface._match_hostname('asd.fgh.com', '*.zxc.com')) - - def test_check_host_name(self): - i = interface.TcpConnection(server=':1:', queue=None, config_path=None) - - self.assertFalse(i.check_host_name(None, None)) - self.assertFalse(i.check_host_name( - peercert={'subjectAltName': []}, name='')) - self.assertTrue(i.check_host_name( - peercert={'subjectAltName': [('DNS', 'foo.bar.com')]}, - name='foo.bar.com')) - self.assertTrue(i.check_host_name( - peercert={'subject': [('commonName', 'foo.bar.com')]}, - name='foo.bar.com')) diff --git a/electrum/tests/test_network.py b/electrum/tests/test_network.py new file mode 100644 index 000000000..8181951de --- /dev/null +++ b/electrum/tests/test_network.py @@ -0,0 +1,118 @@ +import asyncio +import tempfile +import unittest + +from electrum.constants import set_regtest +from electrum.simple_config import SimpleConfig +from electrum import blockchain +from electrum.interface import BlockHeaderInterface + +class MockConnection: + def __init__(self): + self.q = asyncio.Queue() + self.server = 'mock-server' + async def get_block_header(self, height, assert_mode): + assert self.q.qsize() > 0, (height, assert_mode) + item = await self.q.get() + print("step with height", height, item) + assert item['block_height'] == height, (item['block_height'], height) + assert assert_mode in item['mock'], (assert_mode, item) + return item + +class TestNetwork(unittest.TestCase): + def setUp(self): + self.config = SimpleConfig({'electrum_path': tempfile.mkdtemp(prefix="test_network")}) + + def blockchain_iface_pair(self, forkpoint=2002): + b = blockchain.Blockchain(self.config, forkpoint, None) + class FakeNetwork: + max_checkpoint = lambda: 0 + class FakeIface: + blockchain = b + network = FakeNetwork + return FakeIface + + def test_new_fork(self): + blockchain.blockchains = {} + conn = MockConnection() + conn.q.put_nowait({'block_height': 8, 'mock': {'catchup':1, 'check': lambda x: False, 'connect': lambda x: False}}) + def mock_connect(block_header_iface): + return block_header_iface.height == 6 + conn.q.put_nowait({'block_height': 7, 'mock': {'backward':1,'check': lambda x: False, 'connect': mock_connect, 'fork': self.mock_fork}}) + conn.q.put_nowait({'block_height': 2, 'mock': {'backward':1,'check':lambda x: True, 'connect': lambda x: False}}) + conn.q.put_nowait({'block_height': 4, 'mock': {'binary':1,'check':lambda x: True, 'connect': lambda x: True}}) + conn.q.put_nowait({'block_height': 5, 'mock': {'binary':1,'check':lambda x: True, 'connect': lambda x: True}}) + conn.q.put_nowait({'block_height': 6, 'mock': {'binary':1,'check':lambda x: True, 'connect': lambda x: True}}) + ifa = BlockHeaderInterface(conn, 12, 8, self.blockchain_iface_pair()) + self.assertEqual('fork', asyncio.get_event_loop().run_until_complete(ifa.sync_until(next_height=8))) + self.assertEqual(conn.q.qsize(), 0) + + def test_new_can_connect_during_backward(self): + blockchain.blockchains = {} + conn = MockConnection() + conn.q.put_nowait({'block_height': 8, 'mock': {'catchup':1, 'check': lambda x: False, 'connect': lambda x: False}}) + def mock_connect(block_header_iface): + return block_header_iface.height == 2 + conn.q.put_nowait({'block_height': 7, 'mock': {'backward':1, 'check': lambda x: False, 'connect': mock_connect, 'fork': self.mock_fork}}) + conn.q.put_nowait({'block_height': 2, 'mock': {'backward':1, 'check': lambda x: False, 'connect': mock_connect, 'fork': self.mock_fork}}) + conn.q.put_nowait({'block_height': 3, 'mock': {'catchup':1, 'check': lambda x: False, 'connect': lambda x: True}}) + conn.q.put_nowait({'block_height': 4, 'mock': {'catchup':1, 'check': lambda x: False, 'connect': lambda x: True}}) + ifa = BlockHeaderInterface(conn, 12, 8, self.blockchain_iface_pair()) + self.assertEqual('catchup', asyncio.get_event_loop().run_until_complete(ifa.sync_until(next_height=5))) + self.assertEqual(conn.q.qsize(), 0) + + def mock_fork(self, bad_header): + return blockchain.Blockchain(self.config, bad_header['block_height'], None) + + def test_new_chain_false_during_binary(self): + blockchain.blockchains = {} + conn = MockConnection() + conn.q.put_nowait({'block_height': 8, 'mock': {'catchup':1, 'check': lambda x: False, 'connect': lambda x: False}}) + mock_connect = lambda bhi: bhi.height == 3 + conn.q.put_nowait({'block_height': 7, 'mock': {'backward':1, 'check': lambda x: False, 'connect': mock_connect}}) + conn.q.put_nowait({'block_height': 2, 'mock': {'backward':1, 'check': lambda x: True, 'connect': mock_connect}}) + conn.q.put_nowait({'block_height': 4, 'mock': {'binary':1, 'check': lambda x: False, 'fork': self.mock_fork, 'connect': mock_connect}}) + conn.q.put_nowait({'block_height': 3, 'mock': {'binary':1, 'check': lambda x: True, 'connect': lambda x: True}}) + conn.q.put_nowait({'block_height': 5, 'mock': {'catchup':1, 'check': lambda x: True, 'connect': lambda x: True}}) + conn.q.put_nowait({'block_height': 6, 'mock': {'catchup':1, 'check': lambda x: True, 'connect': lambda x: True}}) + ifa = BlockHeaderInterface(conn, 12, 8, self.blockchain_iface_pair(1000)) + self.assertEqual('catchup', asyncio.get_event_loop().run_until_complete(ifa.sync_until(next_height=7))) + self.assertEqual(conn.q.qsize(), 0) + + def test_new_join(self): + blockchain.blockchains = {7: {'check': lambda bad_header: True}} + conn = MockConnection() + conn.q.put_nowait({'block_height': 8, 'mock': {'catchup':1, 'check': lambda x: False, 'connect': lambda x: False}}) + conn.q.put_nowait({'block_height': 7, 'mock': {'backward':1, 'check': lambda x: False, 'connect': lambda x: x.height == 6}}) + conn.q.put_nowait({'block_height': 2, 'mock': {'backward':1, 'check': lambda x: True, 'connect': lambda x: False}}) + conn.q.put_nowait({'block_height': 4, 'mock': {'binary':1, 'check': lambda x: True, 'connect': lambda x: False}}) + conn.q.put_nowait({'block_height': 5, 'mock': {'binary':1, 'check': lambda x: True, 'connect': lambda x: False}}) + conn.q.put_nowait({'block_height': 6, 'mock': {'binary':1, 'check': lambda x: True, 'connect': lambda x: True}}) + ifa = BlockHeaderInterface(conn, 12, 8, self.blockchain_iface_pair()) + self.assertEqual('join', asyncio.get_event_loop().run_until_complete(ifa.sync_until(next_height=7))) + self.assertEqual(conn.q.qsize(), 0) + + def test_new_reorg(self): + times = 0 + def check(header): + nonlocal times + self.assertEqual(header['block_height'], 7) + times += 1 + return times != 1 + blockchain.blockchains = {7: {'check': check, 'parent': {'check': lambda x: True}}} + conn = MockConnection() + conn.q.put_nowait({'block_height': 8, 'mock': {'catchup':1, 'check': lambda x: False, 'connect': lambda x: False}}) + conn.q.put_nowait({'block_height': 7, 'mock': {'backward':1, 'check': lambda x: False, 'connect': lambda x: x.height == 6}}) + conn.q.put_nowait({'block_height': 2, 'mock': {'backward':1, 'check': lambda x: 1, 'connect': lambda x: False}}) + conn.q.put_nowait({'block_height': 4, 'mock': {'binary':1, 'check': lambda x: 1, 'connect': lambda x: False}}) + conn.q.put_nowait({'block_height': 5, 'mock': {'binary':1, 'check': lambda x: 1, 'connect': lambda x: False}}) + conn.q.put_nowait({'block_height': 6, 'mock': {'binary':1, 'check': lambda x: 1, 'connect': lambda x: True}}) + conn.q.put_nowait({'block_height': 7, 'mock': {'binary':1, 'check': lambda x: False, 'connect': lambda x: True}}) + ifa = BlockHeaderInterface(conn, 12, 8, self.blockchain_iface_pair()) + self.assertEqual('join', asyncio.get_event_loop().run_until_complete(ifa.sync_until(next_height=8))) + self.assertEqual(conn.q.qsize(), 0) + self.assertEqual(times, 2) + +if __name__=="__main__": + set_regtest() + unittest.main() diff --git a/electrum/verifier.py b/electrum/verifier.py index f64e7fa47..61642364e 100644 --- a/electrum/verifier.py +++ b/electrum/verifier.py @@ -70,8 +70,7 @@ class SPV(ThreadJob): if header is None: index = tx_height // 2016 if index < len(blockchain.checkpoints): - # FIXME disabled until async block header download has been merged - pass #await self.network.request_chunk(tx_height, None) + await self.network.request_chunk(tx_height, None) elif (tx_hash not in self.requested_merkle and tx_hash not in self.merkle_roots): self.print_error('requested merkle', tx_hash) From 2157eae4990ed5d80a78880409e0ebcf20ab27f5 Mon Sep 17 00:00:00 2001 From: SomberNight Date: Wed, 29 Aug 2018 18:54:25 +0200 Subject: [PATCH 16/76] fix request_chunk --- electrum/network.py | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/electrum/network.py b/electrum/network.py index 92378d9fa..0436359ce 100644 --- a/electrum/network.py +++ b/electrum/network.py @@ -730,15 +730,13 @@ class Network(PrintError): if session is None: session = self.interface.session index = height // 2016 size = 2016 - if tip is not None and height + 2016 >= tip: - size = tip - height - #if index * 2016 < height: - # size = height - index * 2016 + if tip is not None: + size = min(size, tip - index * 2016) + size = max(size, 0) res = await session.send_request('blockchain.block.headers', [index * 2016, size]) conn = self.blockchain().connect_chunk(index, res['hex']) if not conn: return conn, 0 - self.blockchain().save_chunk(index, bfh(res['hex'])) return conn, res['count'] @with_interface_lock From 3f0d79f07d8353639e03f7d56c8a46fa59df17a1 Mon Sep 17 00:00:00 2001 From: SomberNight Date: Fri, 31 Aug 2018 16:32:45 +0200 Subject: [PATCH 17/76] blockchain.py: better handling of missing headers. more restrictive verify_chunk. --- electrum/blockchain.py | 32 +++++++++++++++++++++++++------- 1 file changed, 25 insertions(+), 7 deletions(-) diff --git a/electrum/blockchain.py b/electrum/blockchain.py index e0ab5d162..a7befad25 100644 --- a/electrum/blockchain.py +++ b/electrum/blockchain.py @@ -146,7 +146,10 @@ class Blockchain(util.PrintError): def check_header(self, header): header_hash = hash_header(header) height = header.get('block_height') - return header_hash == self.get_hash(height) + try: + return header_hash == self.get_hash(height) + except MissingHeader: + return False def fork(parent, header): forkpoint = header.get('block_height') @@ -166,8 +169,10 @@ class Blockchain(util.PrintError): p = self.path() self._size = os.path.getsize(p)//80 if os.path.exists(p) else 0 - def verify_header(self, header, prev_hash, target): + def verify_header(self, header, prev_hash, target, expected_header_hash=None): _hash = hash_header(header) + if expected_header_hash and expected_header_hash != _hash: + raise Exception("hash mismatches with expected: {} vs {}".format(expected_header_hash, _hash)) if prev_hash != header.get('prev_block_hash'): raise Exception("prev hash mismatch: %s vs %s" % (prev_hash, header.get('prev_block_hash'))) if constants.net.TESTNET: @@ -180,12 +185,18 @@ class Blockchain(util.PrintError): def verify_chunk(self, index, data): num = len(data) // 80 - prev_hash = self.get_hash(index * 2016 - 1) + start_height = index * 2016 + prev_hash = self.get_hash(start_height - 1) target = self.get_target(index-1) for i in range(num): + height = start_height + i + try: + expected_header_hash = self.get_hash(height) + except MissingHeader: + expected_header_hash = None raw_header = data[i*80:(i+1) * 80] header = deserialize_header(raw_header, index*2016 + i) - self.verify_header(header, prev_hash, target) + self.verify_header(header, prev_hash, target, expected_header_hash) prev_hash = hash_header(header) def path(self): @@ -303,17 +314,24 @@ class Blockchain(util.PrintError): return deserialize_header(h, height) def get_hash(self, height): + def is_height_checkpoint(): + within_cp_range = height < len(self.checkpoints) * 2016 + at_chunk_boundary = (height+1) % 2016 == 0 + return within_cp_range and at_chunk_boundary + if height == -1: return '0000000000000000000000000000000000000000000000000000000000000000' elif height == 0: return constants.net.GENESIS - elif height < len(self.checkpoints) * 2016: - assert (height+1) % 2016 == 0, (height, len(self.checkpoints), (height+1) % 2016) + elif is_height_checkpoint(): index = height // 2016 h, t = self.checkpoints[index] return h else: - return hash_header(self.read_header(height)) + header = self.read_header(height) + if header is None: + raise MissingHeader(height) + return hash_header(header) def get_target(self, index): # compute target from chunk x, used in chunk x+1 From 14a032a0b16c498602ff63cd5482af123891f0c1 Mon Sep 17 00:00:00 2001 From: SomberNight Date: Fri, 31 Aug 2018 16:46:03 +0200 Subject: [PATCH 18/76] disconnect from servers on exception --- electrum/interface.py | 2 ++ electrum/network.py | 18 ++++++++++-------- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/electrum/interface.py b/electrum/interface.py index 23119333b..7631e65fd 100644 --- a/electrum/interface.py +++ b/electrum/interface.py @@ -244,6 +244,8 @@ class BlockHeaderInterface(PrintError): could_connect, num_headers = await self.conn.request_chunk(self.height, next_height) self.tip = max(self.height + num_headers, self.tip) if not could_connect: + if self.height <= self.iface.network.max_checkpoint(): + raise Exception('server chain conflicts with checkpoints or genesis') last = await self.step() self.tip = max(self.height, self.tip) continue diff --git a/electrum/network.py b/electrum/network.py index 0436359ce..58ad60692 100644 --- a/electrum/network.py +++ b/electrum/network.py @@ -809,14 +809,16 @@ class Network(PrintError): asyncio.get_event_loop().create_task(self.new_interface(server)) remove = [] for k, i in self.interfaces.items(): - if i.fut.done(): - if i.exception: - try: - raise i.exception - except BaseException as e: - self.print_error(i.server, "errored because", str(e), str(type(e))) - else: - assert False, "interface future should not finish without exception" + if i.fut.done() and not i.exception: + assert False, "interface future should not finish without exception" + if i.exception: + if not i.fut.done(): + try: i.fut.cancel() + except Exception as e: self.print_error('exception while cancelling fut', e) + try: + raise i.exception + except BaseException as e: + self.print_error(i.server, "errored because", str(e), str(type(e))) remove.append(k) changed = False for k in remove: From c89020725b34a416c19cb45d580c958a3e2a3805 Mon Sep 17 00:00:00 2001 From: Janus Date: Fri, 31 Aug 2018 18:38:08 +0200 Subject: [PATCH 19/76] address synchronizer: fetch initial addresses from wallet --- electrum/address_synchronizer.py | 1 + 1 file changed, 1 insertion(+) diff --git a/electrum/address_synchronizer.py b/electrum/address_synchronizer.py index 07b0f9588..ab19dab2e 100644 --- a/electrum/address_synchronizer.py +++ b/electrum/address_synchronizer.py @@ -154,6 +154,7 @@ class AddressSynchronizer(PrintError): self.verifier = SPV(self.network, self) self.synchronizer = Synchronizer(self) self.network.register_callback(self.on_default_server_changed, ['default_server_changed']) + self.network.trigger_callback('default_server_changed') else: self.verifier = None self.synchronizer = None From 2187615c08e5209a5eb649c367406b6eacfe0c13 Mon Sep 17 00:00:00 2001 From: SomberNight Date: Fri, 31 Aug 2018 19:51:32 +0200 Subject: [PATCH 20/76] verifier: request proofs in batches --- electrum/network.py | 1 - electrum/verifier.py | 51 ++++++++++++++++++++++---------------------- 2 files changed, 25 insertions(+), 27 deletions(-) diff --git a/electrum/network.py b/electrum/network.py index 58ad60692..f0aa4a61f 100644 --- a/electrum/network.py +++ b/electrum/network.py @@ -719,7 +719,6 @@ class Network(PrintError): pass async def get_merkle_for_transaction(self, tx_hash, tx_height): - print("getting merkle for transaction", tx_hash, tx_height) return await self.interface.session.send_request('blockchain.transaction.get_merkle', [tx_hash, tx_height]) def broadcast_transaction(self, tx): diff --git a/electrum/verifier.py b/electrum/verifier.py index 61642364e..39ecf82af 100644 --- a/electrum/verifier.py +++ b/electrum/verifier.py @@ -24,6 +24,8 @@ import asyncio from typing import Sequence, Optional +from aiorpcx import TaskGroup + from .util import ThreadJob, bh2u, VerifiedTxInfo, aiosafe from .bitcoin import Hash, hash_decode, hash_encode from .transaction import Transaction @@ -49,10 +51,10 @@ class SPV(ThreadJob): @aiosafe async def main(self): while True: - await self.run() + await self._request_proofs() await asyncio.sleep(1) - async def run(self): + async def _request_proofs(self): blockchain = self.network.blockchain() if not blockchain: self.print_error("no blockchain") @@ -60,33 +62,30 @@ class SPV(ThreadJob): local_height = self.network.get_local_height() unverified = self.wallet.get_unverified_txs() - #print("verifier run", len(unverified)) - for tx_hash, tx_height in unverified.items(): - # do not request merkle branch before headers are available - if tx_height <= 0 or tx_height > local_height: - continue - - header = blockchain.read_header(tx_height) - if header is None: - index = tx_height // 2016 - if index < len(blockchain.checkpoints): - await self.network.request_chunk(tx_height, None) - elif (tx_hash not in self.requested_merkle - and tx_hash not in self.merkle_roots): - self.print_error('requested merkle', tx_hash) - self.requested_merkle.add(tx_hash) - self.verify_merkle(tx_hash, await self.network.get_merkle_for_transaction( - tx_hash, - tx_height - )) + + async with TaskGroup() as group: + for tx_hash, tx_height in unverified.items(): + # do not request merkle branch before headers are available + if tx_height <= 0 or tx_height > local_height: + continue + + header = blockchain.read_header(tx_height) + if header is None: + index = tx_height // 2016 + if index < len(blockchain.checkpoints): + await group.spawn(self.network.request_chunk, tx_height, None) + elif (tx_hash not in self.requested_merkle + and tx_hash not in self.merkle_roots): + self.print_error('requested merkle', tx_hash) + self.requested_merkle.add(tx_hash) + await group.spawn(self._request_and_verify_single_proof, tx_hash, tx_height) if self.network.blockchain() != self.blockchain: self.blockchain = self.network.blockchain() - self.undo_verifications() + self._undo_verifications() - def verify_merkle(self, tx_hash, merkle): - if self.wallet.verifier is None: - return # we have been killed, this was just an orphan callback + async def _request_and_verify_single_proof(self, tx_hash, tx_height): + merkle = await self.network.get_merkle_for_transaction(tx_hash, tx_height) # Verify the hash of the server-provided merkle branch to a # transaction matches the merkle root of its block tx_height = merkle.get('block_height') @@ -143,7 +142,7 @@ class SPV(ThreadJob): else: raise InnerNodeOfSpvProofIsValidTx() - def undo_verifications(self): + def _undo_verifications(self): height = self.blockchain.get_forkpoint() tx_hashes = self.wallet.undo_verifications(self.blockchain, height) for tx_hash in tx_hashes: From 4d95452ae706e0c29a6abd6a64547c8e7cae9567 Mon Sep 17 00:00:00 2001 From: SomberNight Date: Fri, 31 Aug 2018 20:56:58 +0200 Subject: [PATCH 21/76] wallet: partial fix for race in on_default_server_changed --- electrum/address_synchronizer.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/electrum/address_synchronizer.py b/electrum/address_synchronizer.py index ab19dab2e..65a754026 100644 --- a/electrum/address_synchronizer.py +++ b/electrum/address_synchronizer.py @@ -142,10 +142,12 @@ class AddressSynchronizer(PrintError): if not i.done(): i.cancel() self.network.futures.clear() + if self.network.interface is None: + return + # FIXME there are races here.. network.interface can become None self.network.futures.append(asyncio.get_event_loop().create_task(self.verifier.main())) self.network.futures.append(asyncio.get_event_loop().create_task(self.synchronizer.send_subscriptions())) self.network.futures.append(asyncio.get_event_loop().create_task(self.synchronizer.handle_status())) - assert self.network.interface.session is not None self.network.futures.append(asyncio.get_event_loop().create_task(self.synchronizer.main())) def start_threads(self, network): From 9c363db440936b51c567e5f7a1827e9a644dc79f Mon Sep 17 00:00:00 2001 From: Janus Date: Tue, 4 Sep 2018 12:36:47 +0200 Subject: [PATCH 22/76] async block headers: avoid duplicate tip fields, handle electrumx server skipping blocks --- electrum/interface.py | 40 ++++++++++++++++------------------ electrum/tests/test_network.py | 15 +++++++------ 2 files changed, 27 insertions(+), 28 deletions(-) diff --git a/electrum/interface.py b/electrum/interface.py index 7631e65fd..59a87b579 100644 --- a/electrum/interface.py +++ b/electrum/interface.py @@ -204,30 +204,26 @@ class Interface(PrintError): @aiosafe async def run_fetch_blocks(self, sub_reply, replies, conniface): async with self.network.bhi_lock: - bhi = BlockHeaderInterface(conniface, sub_reply['height'], self.blockchain.height()+1, self) + bhi = BlockHeaderInterface(conniface, self.blockchain.height()+1, self) await replies.put(blockchain.deserialize_header(bfh(sub_reply['hex']), sub_reply['height'])) - self.print_error("checking if catched up {}-1 > {}, tip {}".format(sub_reply['height'], self.blockchain.height(), bhi.tip)) - if sub_reply['height']-1 > self.blockchain.height(): - last_status = await bhi.sync_until() - assert last_status == 'catchup', last_status - assert self.blockchain.height()+1 == bhi.height, (self.blockchain.height(), bhi.height) while True: self.network.notify('updated') item = await replies.get() async with self.network.bhi_lock: + if self.blockchain.height()-1 < item['block_height']: + await bhi.sync_until() if self.blockchain.height() >= bhi.height and self.blockchain.check_header(item): # another interface amended the blockchain self.print_error("SKIPPING HEADER", bhi.height) continue - if bhi.tip < bhi.height: - bhi.height = bhi.tip + if self.tip < bhi.height: + bhi.height = self.tip await bhi.step(item) - bhi.tip = max(bhi.height, bhi.tip) + self.tip = max(bhi.height, self.tip) class BlockHeaderInterface(PrintError): - def __init__(self, conn, tip, height, iface): - self.tip = tip + def __init__(self, conn, height, iface): self.height = height self.conn = conn self.iface = iface @@ -237,31 +233,33 @@ class BlockHeaderInterface(PrintError): async def sync_until(self, next_height=None): if next_height is None: - next_height = self.tip + next_height = self.iface.tip last = None while last is None or self.height < next_height: if next_height > self.height + 10: could_connect, num_headers = await self.conn.request_chunk(self.height, next_height) - self.tip = max(self.height + num_headers, self.tip) + self.iface.tip = max(self.height + num_headers, self.iface.tip) if not could_connect: if self.height <= self.iface.network.max_checkpoint(): raise Exception('server chain conflicts with checkpoints or genesis') last = await self.step() - self.tip = max(self.height, self.tip) + self.iface.tip = max(self.height, self.iface.tip) continue self.height = (self.height // 2016 * 2016) + num_headers if self.height > next_height: - assert False, (self.height, self.tip) + assert False, (self.height, self.iface.tip) last = 'catchup' else: last = await self.step() - self.tip = max(self.height, self.tip) + self.iface.tip = max(self.height, self.iface.tip) return last async def step(self, header=None): assert self.height != 0 if header is None: header = await self.conn.get_block_header(self.height, 'catchup') + chain = self.iface.blockchain.check_header(header) if 'mock' not in header else header['mock']['check'](header) + if chain: return 'catchup' can_connect = blockchain.can_connect(header) if 'mock' not in header else header['mock']['connect'](self) bad_header = None @@ -284,8 +282,8 @@ class BlockHeaderInterface(PrintError): while not chain and not can_connect: bad = self.height bad_header = header - delta = self.tip - self.height - next_height = self.tip - 2 * delta + delta = self.iface.tip - self.height + next_height = self.iface.tip - 2 * delta checkp = False if next_height <= self.iface.network.max_checkpoint(): next_height = self.iface.network.max_checkpoint() + 1 @@ -305,7 +303,7 @@ class BlockHeaderInterface(PrintError): if type(can_connect) is bool: # mock self.height += 1 - if self.height > self.tip: + if self.height > self.iface.tip: assert False return 'catchup' self.iface.blockchain = can_connect @@ -360,7 +358,7 @@ class BlockHeaderInterface(PrintError): return 'join' else: if ismocking and branch['parent']['check'](header) or not ismocking and branch.parent().check_header(header): - self.print_error('reorg', bad, self.tip) + self.print_error('reorg', bad, self.iface.tip) self.iface.blockchain = branch.parent() if not ismocking else branch['parent'] self.height = bad header = await self.conn.get_block_header(self.height, 'binary') @@ -394,7 +392,7 @@ class BlockHeaderInterface(PrintError): return 'fork' else: assert bh == good - if bh < self.tip: + if bh < self.iface.tip: self.print_error("catching up from %d"% (bh + 1)) self.height = bh + 1 return 'no_fork' diff --git a/electrum/tests/test_network.py b/electrum/tests/test_network.py index 8181951de..39781e64d 100644 --- a/electrum/tests/test_network.py +++ b/electrum/tests/test_network.py @@ -30,6 +30,7 @@ class TestNetwork(unittest.TestCase): class FakeIface: blockchain = b network = FakeNetwork + tip = 12 return FakeIface def test_new_fork(self): @@ -43,7 +44,7 @@ class TestNetwork(unittest.TestCase): conn.q.put_nowait({'block_height': 4, 'mock': {'binary':1,'check':lambda x: True, 'connect': lambda x: True}}) conn.q.put_nowait({'block_height': 5, 'mock': {'binary':1,'check':lambda x: True, 'connect': lambda x: True}}) conn.q.put_nowait({'block_height': 6, 'mock': {'binary':1,'check':lambda x: True, 'connect': lambda x: True}}) - ifa = BlockHeaderInterface(conn, 12, 8, self.blockchain_iface_pair()) + ifa = BlockHeaderInterface(conn, 8, self.blockchain_iface_pair()) self.assertEqual('fork', asyncio.get_event_loop().run_until_complete(ifa.sync_until(next_height=8))) self.assertEqual(conn.q.qsize(), 0) @@ -57,7 +58,7 @@ class TestNetwork(unittest.TestCase): conn.q.put_nowait({'block_height': 2, 'mock': {'backward':1, 'check': lambda x: False, 'connect': mock_connect, 'fork': self.mock_fork}}) conn.q.put_nowait({'block_height': 3, 'mock': {'catchup':1, 'check': lambda x: False, 'connect': lambda x: True}}) conn.q.put_nowait({'block_height': 4, 'mock': {'catchup':1, 'check': lambda x: False, 'connect': lambda x: True}}) - ifa = BlockHeaderInterface(conn, 12, 8, self.blockchain_iface_pair()) + ifa = BlockHeaderInterface(conn, 8, self.blockchain_iface_pair()) self.assertEqual('catchup', asyncio.get_event_loop().run_until_complete(ifa.sync_until(next_height=5))) self.assertEqual(conn.q.qsize(), 0) @@ -73,9 +74,9 @@ class TestNetwork(unittest.TestCase): conn.q.put_nowait({'block_height': 2, 'mock': {'backward':1, 'check': lambda x: True, 'connect': mock_connect}}) conn.q.put_nowait({'block_height': 4, 'mock': {'binary':1, 'check': lambda x: False, 'fork': self.mock_fork, 'connect': mock_connect}}) conn.q.put_nowait({'block_height': 3, 'mock': {'binary':1, 'check': lambda x: True, 'connect': lambda x: True}}) - conn.q.put_nowait({'block_height': 5, 'mock': {'catchup':1, 'check': lambda x: True, 'connect': lambda x: True}}) - conn.q.put_nowait({'block_height': 6, 'mock': {'catchup':1, 'check': lambda x: True, 'connect': lambda x: True}}) - ifa = BlockHeaderInterface(conn, 12, 8, self.blockchain_iface_pair(1000)) + conn.q.put_nowait({'block_height': 5, 'mock': {'catchup':1, 'check': lambda x: False, 'connect': lambda x: True}}) + conn.q.put_nowait({'block_height': 6, 'mock': {'catchup':1, 'check': lambda x: False, 'connect': lambda x: True}}) + ifa = BlockHeaderInterface(conn, 8, self.blockchain_iface_pair(1000)) self.assertEqual('catchup', asyncio.get_event_loop().run_until_complete(ifa.sync_until(next_height=7))) self.assertEqual(conn.q.qsize(), 0) @@ -88,7 +89,7 @@ class TestNetwork(unittest.TestCase): conn.q.put_nowait({'block_height': 4, 'mock': {'binary':1, 'check': lambda x: True, 'connect': lambda x: False}}) conn.q.put_nowait({'block_height': 5, 'mock': {'binary':1, 'check': lambda x: True, 'connect': lambda x: False}}) conn.q.put_nowait({'block_height': 6, 'mock': {'binary':1, 'check': lambda x: True, 'connect': lambda x: True}}) - ifa = BlockHeaderInterface(conn, 12, 8, self.blockchain_iface_pair()) + ifa = BlockHeaderInterface(conn, 8, self.blockchain_iface_pair()) self.assertEqual('join', asyncio.get_event_loop().run_until_complete(ifa.sync_until(next_height=7))) self.assertEqual(conn.q.qsize(), 0) @@ -108,7 +109,7 @@ class TestNetwork(unittest.TestCase): conn.q.put_nowait({'block_height': 5, 'mock': {'binary':1, 'check': lambda x: 1, 'connect': lambda x: False}}) conn.q.put_nowait({'block_height': 6, 'mock': {'binary':1, 'check': lambda x: 1, 'connect': lambda x: True}}) conn.q.put_nowait({'block_height': 7, 'mock': {'binary':1, 'check': lambda x: False, 'connect': lambda x: True}}) - ifa = BlockHeaderInterface(conn, 12, 8, self.blockchain_iface_pair()) + ifa = BlockHeaderInterface(conn, 8, self.blockchain_iface_pair()) self.assertEqual('join', asyncio.get_event_loop().run_until_complete(ifa.sync_until(next_height=8))) self.assertEqual(conn.q.qsize(), 0) self.assertEqual(times, 2) From d367199553545d5e93052a8704f39d3054331bbb Mon Sep 17 00:00:00 2001 From: Janus Date: Tue, 4 Sep 2018 16:57:07 +0200 Subject: [PATCH 23/76] async block headers: remove BlockHeaderInterface and Conn classes, make self.height a local --- electrum/interface.py | 208 +++++++++++++++------------------ electrum/tests/test_network.py | 132 ++++++++++----------- 2 files changed, 158 insertions(+), 182 deletions(-) diff --git a/electrum/interface.py b/electrum/interface.py index 59a87b579..763bc07d3 100644 --- a/electrum/interface.py +++ b/electrum/interface.py @@ -171,6 +171,13 @@ class Interface(PrintError): except ValueError: return None + async def get_block_header(self, height, assert_mode): + res = await asyncio.wait_for(self.session.send_request('blockchain.block.header', [height]), 1) + return blockchain.deserialize_header(bytes.fromhex(res), height) + + async def request_chunk(self, idx, tip): + return await self.network.request_chunk(idx, tip, self.session) + async def open_session(self, sslc, exit_early): header_queue = asyncio.Queue() async with NotificationSession(None, header_queue, self.host, self.port, ssl=sslc, proxy=self.proxy) as session: @@ -184,8 +191,7 @@ class Interface(PrintError): self.mark_ready() self.session = session copy_header_queue = asyncio.Queue() - conniface = Conn(self.server, session, lambda idx, tip: self.network.request_chunk(idx, tip, session)) - block_retriever = asyncio.get_event_loop().create_task(self.run_fetch_blocks(subscription_res, copy_header_queue, conniface)) + block_retriever = asyncio.get_event_loop().create_task(self.run_fetch_blocks(subscription_res, copy_header_queue)) while True: try: new_header = await asyncio.wait_for(header_queue.get(), 300) @@ -195,121 +201,109 @@ class Interface(PrintError): except concurrent.futures.TimeoutError: await asyncio.wait_for(session.send_request('server.ping'), 5) - def queue_request(self, method, params, msg_id): - pass - def close(self): self.fut.cancel() @aiosafe - async def run_fetch_blocks(self, sub_reply, replies, conniface): + async def run_fetch_blocks(self, sub_reply, replies): async with self.network.bhi_lock: - bhi = BlockHeaderInterface(conniface, self.blockchain.height()+1, self) + height = self.blockchain.height()+1 await replies.put(blockchain.deserialize_header(bfh(sub_reply['hex']), sub_reply['height'])) while True: self.network.notify('updated') item = await replies.get() async with self.network.bhi_lock: - if self.blockchain.height()-1 < item['block_height']: - await bhi.sync_until() - if self.blockchain.height() >= bhi.height and self.blockchain.check_header(item): + if self.blockchain.height() < item['block_height']-1: + _, height = await self.sync_until(height, None) + if self.blockchain.height() >= height and self.blockchain.check_header(item): # another interface amended the blockchain - self.print_error("SKIPPING HEADER", bhi.height) + self.print_error("SKIPPING HEADER", height) continue - if self.tip < bhi.height: - bhi.height = self.tip - await bhi.step(item) - self.tip = max(bhi.height, self.tip) - -class BlockHeaderInterface(PrintError): - def __init__(self, conn, height, iface): - self.height = height - self.conn = conn - self.iface = iface - - def diagnostic_name(self): - return self.conn.server + if self.tip < height: + height = self.tip + _, height = await self.step(height, item) + self.tip = max(height, self.tip) - async def sync_until(self, next_height=None): + async def sync_until(self, height, next_height=None): if next_height is None: - next_height = self.iface.tip + next_height = self.tip last = None - while last is None or self.height < next_height: - if next_height > self.height + 10: - could_connect, num_headers = await self.conn.request_chunk(self.height, next_height) - self.iface.tip = max(self.height + num_headers, self.iface.tip) + while last is None or height < next_height: + if next_height > height + 10: + could_connect, num_headers = await self.request_chunk(height, next_height) + self.tip = max(height + num_headers, self.tip) if not could_connect: - if self.height <= self.iface.network.max_checkpoint(): + if height <= self.network.max_checkpoint(): raise Exception('server chain conflicts with checkpoints or genesis') - last = await self.step() - self.iface.tip = max(self.height, self.iface.tip) + last, height = await self.step(height) + self.tip = max(height, self.tip) continue - self.height = (self.height // 2016 * 2016) + num_headers - if self.height > next_height: - assert False, (self.height, self.iface.tip) + height = (height // 2016 * 2016) + num_headers + if height > next_height: + assert False, (height, self.tip) last = 'catchup' else: - last = await self.step() - self.iface.tip = max(self.height, self.iface.tip) - return last + last, height = await self.step(height) + self.tip = max(height, self.tip) + return last, height - async def step(self, header=None): - assert self.height != 0 + async def step(self, height, header=None): + assert height != 0 if header is None: - header = await self.conn.get_block_header(self.height, 'catchup') - chain = self.iface.blockchain.check_header(header) if 'mock' not in header else header['mock']['check'](header) - if chain: return 'catchup' - can_connect = blockchain.can_connect(header) if 'mock' not in header else header['mock']['connect'](self) + header = await self.get_block_header(height, 'catchup') + chain = self.blockchain.check_header(header) if 'mock' not in header else header['mock']['check'](header) + if chain: return 'catchup', height + can_connect = blockchain.can_connect(header) if 'mock' not in header else header['mock']['connect'](height) bad_header = None if not can_connect: - self.print_error("can't connect", self.height) + self.print_error("can't connect", height) #backward - bad = self.height + bad = height bad_header = header - self.height -= 1 + height -= 1 checkp = False - if self.height <= self.iface.network.max_checkpoint(): - self.height = self.iface.network.max_checkpoint() + 1 + if height <= self.network.max_checkpoint(): + height = self.network.max_checkpoint() + 1 checkp = True - header = await self.conn.get_block_header(self.height, 'backward') + header = await self.get_block_header(height, 'backward') chain = blockchain.check_header(header) if 'mock' not in header else header['mock']['check'](header) - can_connect = blockchain.can_connect(header) if 'mock' not in header else header['mock']['connect'](self) + can_connect = blockchain.can_connect(header) if 'mock' not in header else header['mock']['connect'](height) if checkp: assert can_connect or chain, (can_connect, chain) while not chain and not can_connect: - bad = self.height + bad = height bad_header = header - delta = self.iface.tip - self.height - next_height = self.iface.tip - 2 * delta + delta = self.tip - height + next_height = self.tip - 2 * delta checkp = False - if next_height <= self.iface.network.max_checkpoint(): - next_height = self.iface.network.max_checkpoint() + 1 + if next_height <= self.network.max_checkpoint(): + next_height = self.network.max_checkpoint() + 1 checkp = True - self.height = next_height + height = next_height - header = await self.conn.get_block_header(self.height, 'backward') + header = await self.get_block_header(height, 'backward') chain = blockchain.check_header(header) if 'mock' not in header else header['mock']['check'](header) - can_connect = blockchain.can_connect(header) if 'mock' not in header else header['mock']['connect'](self) + can_connect = blockchain.can_connect(header) if 'mock' not in header else header['mock']['connect'](height) if checkp: assert can_connect or chain, (can_connect, chain) - self.print_error("exiting backward mode at", self.height) + self.print_error("exiting backward mode at", height) if can_connect: - self.print_error("could connect", self.height) + self.print_error("could connect", height) chain = blockchain.check_header(header) if 'mock' not in header else header['mock']['check'](header) if type(can_connect) is bool: # mock - self.height += 1 - if self.height > self.iface.tip: + height += 1 + if height > self.tip: assert False - return 'catchup' - self.iface.blockchain = can_connect - self.height += 1 - self.iface.blockchain.save_header(header) - return 'catchup' + return 'catchup', height + self.blockchain = can_connect + height += 1 + self.blockchain.save_header(header) + return 'catchup', height if not chain: raise Exception("not chain") # line 931 in 8e69174374aee87d73cd2f8005fbbe87c93eee9c's network.py @@ -318,27 +312,27 @@ class BlockHeaderInterface(PrintError): if type(chain) in [int, bool]: pass # mock else: - self.iface.blockchain = chain - good = self.height - self.height = (bad + good) // 2 - header = await self.conn.get_block_header(self.height, 'binary') + self.blockchain = chain + good = height + height = (bad + good) // 2 + header = await self.get_block_header(height, 'binary') while True: self.print_error("binary step") chain = blockchain.check_header(header) if 'mock' not in header else header['mock']['check'](header) if chain: - assert bad != self.height, (bad, self.height) - good = self.height - self.iface.blockchain = self.iface.blockchain if type(chain) in [bool, int] else chain + assert bad != height, (bad, height) + good = height + self.blockchain = self.blockchain if type(chain) in [bool, int] else chain else: - bad = self.height - assert good != self.height + bad = height + assert good != height bad_header = header if bad != good + 1: - self.height = (bad + good) // 2 - header = await self.conn.get_block_header(self.height, 'binary') + height = (bad + good) // 2 + header = await self.get_block_header(height, 'binary') continue - mock = bad_header and 'mock' in bad_header and bad_header['mock']['connect'](self) - real = not mock and self.iface.blockchain.can_connect(bad_header, check_height=False) + mock = bad_header and 'mock' in bad_header and bad_header['mock']['connect'](height) + real = not mock and self.blockchain.can_connect(bad_header, check_height=False) if not real and not mock: raise Exception('unexpected bad header during binary' + str(bad_header)) # line 948 in 8e69174374aee87d73cd2f8005fbbe87c93eee9c's network.py branch = blockchain.blockchains.get(bad) @@ -354,58 +348,48 @@ class BlockHeaderInterface(PrintError): # electrum runtime if ismocking and branch['check'](bad_header) or not ismocking and branch.check_header(bad_header): self.print_error('joining chain', bad) - self.height += 1 - return 'join' + height += 1 + return 'join', height else: if ismocking and branch['parent']['check'](header) or not ismocking and branch.parent().check_header(header): - self.print_error('reorg', bad, self.iface.tip) - self.iface.blockchain = branch.parent() if not ismocking else branch['parent'] - self.height = bad - header = await self.conn.get_block_header(self.height, 'binary') + self.print_error('reorg', bad, self.tip) + self.blockchain = branch.parent() if not ismocking else branch['parent'] + height = bad + header = await self.get_block_header(height, 'binary') else: if ismocking: - self.height = bad + 1 + height = bad + 1 self.print_error("TODO replace blockchain") - return 'conflict' + return 'conflict', height self.print_error('forkpoint conflicts with existing fork', branch.path()) branch.write(b'', 0) branch.save_header(bad_header) - self.iface.blockchain = branch - self.height = bad + 1 - return 'conflict' + self.blockchain = branch + height = bad + 1 + return 'conflict', height else: - bh = self.iface.blockchain.height() + bh = self.blockchain.height() if bh > good: - forkfun = self.iface.blockchain.fork + forkfun = self.blockchain.fork if 'mock' in bad_header: chain = bad_header['mock']['check'](bad_header) forkfun = bad_header['mock']['fork'] if 'fork' in bad_header['mock'] else forkfun else: - chain = self.iface.blockchain.check_header(bad_header) + chain = self.blockchain.check_header(bad_header) if not chain: b = forkfun(bad_header) assert bad not in blockchain.blockchains, (bad, list(blockchain.blockchains.keys())) blockchain.blockchains[bad] = b - self.iface.blockchain = b - self.height = b.forkpoint + 1 + self.blockchain = b + height = b.forkpoint + 1 assert b.forkpoint == bad - return 'fork' + return 'fork', height else: assert bh == good - if bh < self.iface.tip: + if bh < self.tip: self.print_error("catching up from %d"% (bh + 1)) - self.height = bh + 1 - return 'no_fork' - -class Conn: - def __init__(self, server, session, get_chunk): - self.server = server - self.session = session # type: aiorpcx.ClientSession - self.request_chunk = get_chunk - async def get_block_header(self, height, assert_mode): - res = await asyncio.wait_for(self.session.send_request('blockchain.block.header', [height]), 1) - return blockchain.deserialize_header(bytes.fromhex(res), height) - + height = bh + 1 + return 'no_fork', height def check_cert(host, cert): try: diff --git a/electrum/tests/test_network.py b/electrum/tests/test_network.py index 39781e64d..07b5996c9 100644 --- a/electrum/tests/test_network.py +++ b/electrum/tests/test_network.py @@ -5,12 +5,18 @@ import unittest from electrum.constants import set_regtest from electrum.simple_config import SimpleConfig from electrum import blockchain -from electrum.interface import BlockHeaderInterface +from electrum.interface import Interface -class MockConnection: - def __init__(self): +class MockInterface(Interface): + def __init__(self, config): + self.config = config + super().__init__(None, 'mock-server:50000:t', self.config.electrum_path(), None) + class FakeNetwork: + max_checkpoint = lambda: 0 + self.network = FakeNetwork self.q = asyncio.Queue() - self.server = 'mock-server' + self.blockchain = blockchain.Blockchain(self.config, 2002, None) + self.tip = 12 async def get_block_header(self, height, assert_mode): assert self.q.qsize() > 0, (height, assert_mode) item = await self.q.get() @@ -22,76 +28,63 @@ class MockConnection: class TestNetwork(unittest.TestCase): def setUp(self): self.config = SimpleConfig({'electrum_path': tempfile.mkdtemp(prefix="test_network")}) - - def blockchain_iface_pair(self, forkpoint=2002): - b = blockchain.Blockchain(self.config, forkpoint, None) - class FakeNetwork: - max_checkpoint = lambda: 0 - class FakeIface: - blockchain = b - network = FakeNetwork - tip = 12 - return FakeIface + self.interface = MockInterface(self.config) def test_new_fork(self): blockchain.blockchains = {} - conn = MockConnection() - conn.q.put_nowait({'block_height': 8, 'mock': {'catchup':1, 'check': lambda x: False, 'connect': lambda x: False}}) - def mock_connect(block_header_iface): - return block_header_iface.height == 6 - conn.q.put_nowait({'block_height': 7, 'mock': {'backward':1,'check': lambda x: False, 'connect': mock_connect, 'fork': self.mock_fork}}) - conn.q.put_nowait({'block_height': 2, 'mock': {'backward':1,'check':lambda x: True, 'connect': lambda x: False}}) - conn.q.put_nowait({'block_height': 4, 'mock': {'binary':1,'check':lambda x: True, 'connect': lambda x: True}}) - conn.q.put_nowait({'block_height': 5, 'mock': {'binary':1,'check':lambda x: True, 'connect': lambda x: True}}) - conn.q.put_nowait({'block_height': 6, 'mock': {'binary':1,'check':lambda x: True, 'connect': lambda x: True}}) - ifa = BlockHeaderInterface(conn, 8, self.blockchain_iface_pair()) - self.assertEqual('fork', asyncio.get_event_loop().run_until_complete(ifa.sync_until(next_height=8))) - self.assertEqual(conn.q.qsize(), 0) + self.interface.q.put_nowait({'block_height': 8, 'mock': {'catchup':1, 'check': lambda x: False, 'connect': lambda x: False}}) + def mock_connect(height): + return height == 6 + self.interface.q.put_nowait({'block_height': 7, 'mock': {'backward':1,'check': lambda x: False, 'connect': mock_connect, 'fork': self.mock_fork}}) + self.interface.q.put_nowait({'block_height': 2, 'mock': {'backward':1,'check':lambda x: True, 'connect': lambda x: False}}) + self.interface.q.put_nowait({'block_height': 4, 'mock': {'binary':1,'check':lambda x: True, 'connect': lambda x: True}}) + self.interface.q.put_nowait({'block_height': 5, 'mock': {'binary':1,'check':lambda x: True, 'connect': lambda x: True}}) + self.interface.q.put_nowait({'block_height': 6, 'mock': {'binary':1,'check':lambda x: True, 'connect': lambda x: True}}) + ifa = self.interface + self.assertEqual(('fork', 8), asyncio.get_event_loop().run_until_complete(ifa.sync_until(8, next_height=8))) + self.assertEqual(self.interface.q.qsize(), 0) def test_new_can_connect_during_backward(self): blockchain.blockchains = {} - conn = MockConnection() - conn.q.put_nowait({'block_height': 8, 'mock': {'catchup':1, 'check': lambda x: False, 'connect': lambda x: False}}) - def mock_connect(block_header_iface): - return block_header_iface.height == 2 - conn.q.put_nowait({'block_height': 7, 'mock': {'backward':1, 'check': lambda x: False, 'connect': mock_connect, 'fork': self.mock_fork}}) - conn.q.put_nowait({'block_height': 2, 'mock': {'backward':1, 'check': lambda x: False, 'connect': mock_connect, 'fork': self.mock_fork}}) - conn.q.put_nowait({'block_height': 3, 'mock': {'catchup':1, 'check': lambda x: False, 'connect': lambda x: True}}) - conn.q.put_nowait({'block_height': 4, 'mock': {'catchup':1, 'check': lambda x: False, 'connect': lambda x: True}}) - ifa = BlockHeaderInterface(conn, 8, self.blockchain_iface_pair()) - self.assertEqual('catchup', asyncio.get_event_loop().run_until_complete(ifa.sync_until(next_height=5))) - self.assertEqual(conn.q.qsize(), 0) + self.interface.q.put_nowait({'block_height': 8, 'mock': {'catchup':1, 'check': lambda x: False, 'connect': lambda x: False}}) + def mock_connect(height): + return height == 2 + self.interface.q.put_nowait({'block_height': 7, 'mock': {'backward':1, 'check': lambda x: False, 'connect': mock_connect, 'fork': self.mock_fork}}) + self.interface.q.put_nowait({'block_height': 2, 'mock': {'backward':1, 'check': lambda x: False, 'connect': mock_connect, 'fork': self.mock_fork}}) + self.interface.q.put_nowait({'block_height': 3, 'mock': {'catchup':1, 'check': lambda x: False, 'connect': lambda x: True}}) + self.interface.q.put_nowait({'block_height': 4, 'mock': {'catchup':1, 'check': lambda x: False, 'connect': lambda x: True}}) + ifa = self.interface + self.assertEqual(('catchup', 5), asyncio.get_event_loop().run_until_complete(ifa.sync_until(8, next_height=5))) + self.assertEqual(self.interface.q.qsize(), 0) def mock_fork(self, bad_header): return blockchain.Blockchain(self.config, bad_header['block_height'], None) def test_new_chain_false_during_binary(self): blockchain.blockchains = {} - conn = MockConnection() - conn.q.put_nowait({'block_height': 8, 'mock': {'catchup':1, 'check': lambda x: False, 'connect': lambda x: False}}) - mock_connect = lambda bhi: bhi.height == 3 - conn.q.put_nowait({'block_height': 7, 'mock': {'backward':1, 'check': lambda x: False, 'connect': mock_connect}}) - conn.q.put_nowait({'block_height': 2, 'mock': {'backward':1, 'check': lambda x: True, 'connect': mock_connect}}) - conn.q.put_nowait({'block_height': 4, 'mock': {'binary':1, 'check': lambda x: False, 'fork': self.mock_fork, 'connect': mock_connect}}) - conn.q.put_nowait({'block_height': 3, 'mock': {'binary':1, 'check': lambda x: True, 'connect': lambda x: True}}) - conn.q.put_nowait({'block_height': 5, 'mock': {'catchup':1, 'check': lambda x: False, 'connect': lambda x: True}}) - conn.q.put_nowait({'block_height': 6, 'mock': {'catchup':1, 'check': lambda x: False, 'connect': lambda x: True}}) - ifa = BlockHeaderInterface(conn, 8, self.blockchain_iface_pair(1000)) - self.assertEqual('catchup', asyncio.get_event_loop().run_until_complete(ifa.sync_until(next_height=7))) - self.assertEqual(conn.q.qsize(), 0) + self.interface.q.put_nowait({'block_height': 8, 'mock': {'catchup':1, 'check': lambda x: False, 'connect': lambda x: False}}) + mock_connect = lambda height: height == 3 + self.interface.q.put_nowait({'block_height': 7, 'mock': {'backward':1, 'check': lambda x: False, 'connect': mock_connect}}) + self.interface.q.put_nowait({'block_height': 2, 'mock': {'backward':1, 'check': lambda x: True, 'connect': mock_connect}}) + self.interface.q.put_nowait({'block_height': 4, 'mock': {'binary':1, 'check': lambda x: False, 'fork': self.mock_fork, 'connect': mock_connect}}) + self.interface.q.put_nowait({'block_height': 3, 'mock': {'binary':1, 'check': lambda x: True, 'connect': lambda x: True}}) + self.interface.q.put_nowait({'block_height': 5, 'mock': {'catchup':1, 'check': lambda x: False, 'connect': lambda x: True}}) + self.interface.q.put_nowait({'block_height': 6, 'mock': {'catchup':1, 'check': lambda x: False, 'connect': lambda x: True}}) + ifa = self.interface + self.assertEqual(('catchup', 7), asyncio.get_event_loop().run_until_complete(ifa.sync_until(8, next_height=7))) + self.assertEqual(self.interface.q.qsize(), 0) def test_new_join(self): blockchain.blockchains = {7: {'check': lambda bad_header: True}} - conn = MockConnection() - conn.q.put_nowait({'block_height': 8, 'mock': {'catchup':1, 'check': lambda x: False, 'connect': lambda x: False}}) - conn.q.put_nowait({'block_height': 7, 'mock': {'backward':1, 'check': lambda x: False, 'connect': lambda x: x.height == 6}}) - conn.q.put_nowait({'block_height': 2, 'mock': {'backward':1, 'check': lambda x: True, 'connect': lambda x: False}}) - conn.q.put_nowait({'block_height': 4, 'mock': {'binary':1, 'check': lambda x: True, 'connect': lambda x: False}}) - conn.q.put_nowait({'block_height': 5, 'mock': {'binary':1, 'check': lambda x: True, 'connect': lambda x: False}}) - conn.q.put_nowait({'block_height': 6, 'mock': {'binary':1, 'check': lambda x: True, 'connect': lambda x: True}}) - ifa = BlockHeaderInterface(conn, 8, self.blockchain_iface_pair()) - self.assertEqual('join', asyncio.get_event_loop().run_until_complete(ifa.sync_until(next_height=7))) - self.assertEqual(conn.q.qsize(), 0) + self.interface.q.put_nowait({'block_height': 8, 'mock': {'catchup':1, 'check': lambda x: False, 'connect': lambda x: False}}) + self.interface.q.put_nowait({'block_height': 7, 'mock': {'backward':1, 'check': lambda x: False, 'connect': lambda height: height == 6}}) + self.interface.q.put_nowait({'block_height': 2, 'mock': {'backward':1, 'check': lambda x: True, 'connect': lambda x: False}}) + self.interface.q.put_nowait({'block_height': 4, 'mock': {'binary':1, 'check': lambda x: True, 'connect': lambda x: False}}) + self.interface.q.put_nowait({'block_height': 5, 'mock': {'binary':1, 'check': lambda x: True, 'connect': lambda x: False}}) + self.interface.q.put_nowait({'block_height': 6, 'mock': {'binary':1, 'check': lambda x: True, 'connect': lambda x: True}}) + ifa = self.interface + self.assertEqual(('join', 7), asyncio.get_event_loop().run_until_complete(ifa.sync_until(8, next_height=7))) + self.assertEqual(self.interface.q.qsize(), 0) def test_new_reorg(self): times = 0 @@ -101,17 +94,16 @@ class TestNetwork(unittest.TestCase): times += 1 return times != 1 blockchain.blockchains = {7: {'check': check, 'parent': {'check': lambda x: True}}} - conn = MockConnection() - conn.q.put_nowait({'block_height': 8, 'mock': {'catchup':1, 'check': lambda x: False, 'connect': lambda x: False}}) - conn.q.put_nowait({'block_height': 7, 'mock': {'backward':1, 'check': lambda x: False, 'connect': lambda x: x.height == 6}}) - conn.q.put_nowait({'block_height': 2, 'mock': {'backward':1, 'check': lambda x: 1, 'connect': lambda x: False}}) - conn.q.put_nowait({'block_height': 4, 'mock': {'binary':1, 'check': lambda x: 1, 'connect': lambda x: False}}) - conn.q.put_nowait({'block_height': 5, 'mock': {'binary':1, 'check': lambda x: 1, 'connect': lambda x: False}}) - conn.q.put_nowait({'block_height': 6, 'mock': {'binary':1, 'check': lambda x: 1, 'connect': lambda x: True}}) - conn.q.put_nowait({'block_height': 7, 'mock': {'binary':1, 'check': lambda x: False, 'connect': lambda x: True}}) - ifa = BlockHeaderInterface(conn, 8, self.blockchain_iface_pair()) - self.assertEqual('join', asyncio.get_event_loop().run_until_complete(ifa.sync_until(next_height=8))) - self.assertEqual(conn.q.qsize(), 0) + self.interface.q.put_nowait({'block_height': 8, 'mock': {'catchup':1, 'check': lambda x: False, 'connect': lambda x: False}}) + self.interface.q.put_nowait({'block_height': 7, 'mock': {'backward':1, 'check': lambda x: False, 'connect': lambda height: height == 6}}) + self.interface.q.put_nowait({'block_height': 2, 'mock': {'backward':1, 'check': lambda x: 1, 'connect': lambda x: False}}) + self.interface.q.put_nowait({'block_height': 4, 'mock': {'binary':1, 'check': lambda x: 1, 'connect': lambda x: False}}) + self.interface.q.put_nowait({'block_height': 5, 'mock': {'binary':1, 'check': lambda x: 1, 'connect': lambda x: False}}) + self.interface.q.put_nowait({'block_height': 6, 'mock': {'binary':1, 'check': lambda x: 1, 'connect': lambda x: True}}) + self.interface.q.put_nowait({'block_height': 7, 'mock': {'binary':1, 'check': lambda x: False, 'connect': lambda x: True}}) + ifa = self.interface + self.assertEqual(('join', 8), asyncio.get_event_loop().run_until_complete(ifa.sync_until(8, next_height=8))) + self.assertEqual(self.interface.q.qsize(), 0) self.assertEqual(times, 2) if __name__=="__main__": From 234273809aca6f47b5350c8eb3818f09483f113c Mon Sep 17 00:00:00 2001 From: ThomasV Date: Thu, 6 Sep 2018 15:44:11 +0200 Subject: [PATCH 24/76] set interface.session before marking as ready --- electrum/interface.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/electrum/interface.py b/electrum/interface.py index 763bc07d3..45a05576a 100644 --- a/electrum/interface.py +++ b/electrum/interface.py @@ -180,7 +180,8 @@ class Interface(PrintError): async def open_session(self, sslc, exit_early): header_queue = asyncio.Queue() - async with NotificationSession(None, header_queue, self.host, self.port, ssl=sslc, proxy=self.proxy) as session: + self.session = NotificationSession(None, header_queue, self.host, self.port, ssl=sslc, proxy=self.proxy) + async with self.session as session: ver = await session.send_request('server.version', [ELECTRUM_VERSION, PROTOCOL_VERSION]) if exit_early: return @@ -189,7 +190,6 @@ class Interface(PrintError): self.tip_header = blockchain.deserialize_header(bfh(subscription_res['hex']), subscription_res['height']) self.tip = subscription_res['height'] self.mark_ready() - self.session = session copy_header_queue = asyncio.Queue() block_retriever = asyncio.get_event_loop().create_task(self.run_fetch_blocks(subscription_res, copy_header_queue)) while True: From 5ef04a039b7686ebc6f8c9328fb7cd7c102863ef Mon Sep 17 00:00:00 2001 From: ThomasV Date: Thu, 6 Sep 2018 15:53:41 +0200 Subject: [PATCH 25/76] move NotificationSession --- electrum/interface.py | 24 +++++++++++++++++++++++- electrum/synchronizer.py | 2 +- electrum/util.py | 22 ---------------------- 3 files changed, 24 insertions(+), 24 deletions(-) diff --git a/electrum/interface.py b/electrum/interface.py index 45a05576a..19581bf94 100644 --- a/electrum/interface.py +++ b/electrum/interface.py @@ -32,6 +32,7 @@ import traceback import aiorpcx import asyncio import concurrent.futures +from aiorpcx import ClientSession, Notification import requests @@ -43,8 +44,29 @@ from . import util from . import x509 from . import pem from .version import ELECTRUM_VERSION, PROTOCOL_VERSION -from .util import NotificationSession from . import blockchain +from .blockchain import deserialize_header + + +class NotificationSession(ClientSession): + + def __init__(self, scripthash, header, *args, **kwargs): + super(NotificationSession, self).__init__(*args, **kwargs) + self.scripthash = scripthash + self.header = header + + @aiosafe + async def handle_request(self, request): + if isinstance(request, Notification): + if request.method == 'blockchain.scripthash.subscribe' and self.scripthash is not None: + args = request.args + await self.scripthash.put((args[0], args[1])) + elif request.method == 'blockchain.headers.subscribe' and self.header is not None: + deser = deserialize_header(bfh(request.args[0]['hex']), request.args[0]['height']) + await self.header.put(deser) + else: + assert False, request.method + class Interface(PrintError): diff --git a/electrum/synchronizer.py b/electrum/synchronizer.py index eba1ec7f0..3fe16a251 100644 --- a/electrum/synchronizer.py +++ b/electrum/synchronizer.py @@ -32,7 +32,7 @@ import concurrent.futures # from .bitcoin import Hash, hash_encode from .transaction import Transaction -from .util import ThreadJob, bh2u, PrintError, aiosafe, bfh, NotificationSession +from .util import ThreadJob, bh2u, PrintError, aiosafe, bfh from .bitcoin import address_to_scripthash from .version import ELECTRUM_VERSION, PROTOCOL_VERSION diff --git a/electrum/util.py b/electrum/util.py index ec4d44342..4a3629cd4 100644 --- a/electrum/util.py +++ b/electrum/util.py @@ -38,7 +38,6 @@ from locale import localeconv from .i18n import _ -from aiorpcx import ClientSession, Notification import urllib.request, urllib.parse, urllib.error import queue @@ -948,24 +947,3 @@ VerifiedTxInfo = NamedTuple("VerifiedTxInfo", [("height", int), ("timestamp", int), ("txpos", int), ("header_hash", str)]) - -from .blockchain import deserialize_header - -class NotificationSession(ClientSession): - - def __init__(self, scripthash, header, *args, **kwargs): - super(NotificationSession, self).__init__(*args, **kwargs) - self.scripthash = scripthash - self.header = header - - @aiosafe - async def handle_request(self, request): - if isinstance(request, Notification): - if request.method == 'blockchain.scripthash.subscribe' and self.scripthash is not None: - args = request.args - await self.scripthash.put((args[0], args[1])) - elif request.method == 'blockchain.headers.subscribe' and self.header is not None: - deser = deserialize_header(bfh(request.args[0]['hex']), request.args[0]['height']) - await self.header.put(deser) - else: - assert False, request.method From 6e80ba7b4fd8a3b6e6b2124c5d8ef64e89a62f5c Mon Sep 17 00:00:00 2001 From: Janus Date: Thu, 6 Sep 2018 16:18:45 +0200 Subject: [PATCH 26/76] asyncio: labels, crash_reporter, fx: migrate requests use to aiohttp --- contrib/requirements/requirements.txt | 2 + electrum/base_crash_reporter.py | 18 +- electrum/daemon.py | 6 +- electrum/exchange_rate.py | 218 ++++++++++-------- .../gui/kivy/uix/dialogs/crash_reporter.py | 12 +- electrum/gui/qt/exception_window.py | 11 +- electrum/network.py | 15 +- electrum/plugins/labels/labels.py | 84 ++++--- electrum/plugins/labels/qt.py | 4 +- electrum/util.py | 16 ++ 10 files changed, 226 insertions(+), 160 deletions(-) diff --git a/contrib/requirements/requirements.txt b/contrib/requirements/requirements.txt index 3860c9cd4..3536b894e 100644 --- a/contrib/requirements/requirements.txt +++ b/contrib/requirements/requirements.txt @@ -9,3 +9,5 @@ PySocks>=1.6.6 qdarkstyle<3.0 typing>=3.0.0 aiorpcx>=0.7.1 +aiohttp +aiohttp_socks diff --git a/electrum/base_crash_reporter.py b/electrum/base_crash_reporter.py index a5702e2e6..6cd94a49b 100644 --- a/electrum/base_crash_reporter.py +++ b/electrum/base_crash_reporter.py @@ -19,6 +19,7 @@ # ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN # CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. +import asyncio import json import locale import traceback @@ -26,14 +27,13 @@ import subprocess import sys import os -import requests - from .version import ELECTRUM_VERSION from .import constants from .i18n import _ +from .util import make_aiohttp_session -class BaseCrashReporter(object): +class BaseCrashReporter: report_server = "https://crashhub.electrum.org" config_key = "show_crash_reporter" issue_template = """

Traceback

@@ -60,16 +60,22 @@ class BaseCrashReporter(object): def __init__(self, exctype, value, tb): self.exc_args = (exctype, value, tb) - def send_report(self, endpoint="/crash"): + def send_report(self, asyncio_loop, proxy, endpoint="/crash"): if constants.net.GENESIS[-4:] not in ["4943", "e26f"] and ".electrum.org" in BaseCrashReporter.report_server: # Gah! Some kind of altcoin wants to send us crash reports. raise Exception(_("Missing report URL.")) report = self.get_traceback_info() report.update(self.get_additional_info()) report = json.dumps(report) - response = requests.post(BaseCrashReporter.report_server + endpoint, data=report) + coro = self.do_post(proxy, BaseCrashReporter.report_server + endpoint, data=report) + response = asyncio.run_coroutine_threadsafe(coro, asyncio_loop).result(1) return response + async def do_post(self, proxy, url, data): + async with make_aiohttp_session(proxy) as session: + async with session.post(url, data=data) as resp: + return await resp.text() + def get_traceback_info(self): exc_string = str(self.exc_args[1]) stack = traceback.extract_tb(self.exc_args[2]) @@ -125,4 +131,4 @@ class BaseCrashReporter(object): raise NotImplementedError def get_os_version(self): - raise NotImplementedError + raise NotImplementedError diff --git a/electrum/daemon.py b/electrum/daemon.py index 72d6ece8b..f2a9316e0 100644 --- a/electrum/daemon.py +++ b/electrum/daemon.py @@ -22,6 +22,7 @@ # ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN # CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. +import asyncio import ast import os import time @@ -126,10 +127,9 @@ class Daemon(DaemonThread): self.network = None else: self.network = Network(config) - self.network.start() self.fx = FxThread(config, self.network) - #if self.network: - # self.network.add_jobs([self.fx]) + if self.network: + self.network.start(self.fx.run()) self.gui = None self.wallets = {} # Setup JSONRPC server diff --git a/electrum/exchange_rate.py b/electrum/exchange_rate.py index 1d543a95a..e94c0468e 100644 --- a/electrum/exchange_rate.py +++ b/electrum/exchange_rate.py @@ -1,18 +1,21 @@ +import asyncio +import aiohttp +from aiohttp_socks import SocksConnector, SocksVer from datetime import datetime import inspect -import requests import sys import os import json -from threading import Thread import time import csv import decimal from decimal import Decimal +import concurrent.futures from .bitcoin import COIN from .i18n import _ -from .util import PrintError, ThreadJob, make_dir +from .util import PrintError, ThreadJob, make_dir, aiosafe +from .util import make_aiohttp_session # See https://en.wikipedia.org/wiki/ISO_4217 @@ -23,6 +26,7 @@ CCY_PRECISIONS = {'BHD': 3, 'BIF': 0, 'BYR': 0, 'CLF': 4, 'CLP': 0, 'RWF': 0, 'TND': 3, 'UGX': 0, 'UYI': 0, 'VND': 0, 'VUV': 0, 'XAF': 0, 'XAU': 4, 'XOF': 0, 'XPF': 0} +PROXY = None class ExchangeBase(PrintError): @@ -32,34 +36,41 @@ class ExchangeBase(PrintError): self.on_quotes = on_quotes self.on_history = on_history - def get_json(self, site, get_string): + async def get_raw(self, site, get_string): # APIs must have https url = ''.join(['https://', site, get_string]) - response = requests.request('GET', url, headers={'User-Agent' : 'Electrum'}, timeout=10) - return response.json() + async with make_aiohttp_session(PROXY) as session: + async with session.get(url) as response: + return await response.text() - def get_csv(self, site, get_string): + async def get_json(self, site, get_string): + # APIs must have https url = ''.join(['https://', site, get_string]) - response = requests.request('GET', url, headers={'User-Agent' : 'Electrum'}) - reader = csv.DictReader(response.content.decode().split('\n')) + async with make_aiohttp_session(PROXY) as session: + async with session.get(url) as response: + return await response.json() + + async def get_csv(self, site, get_string): + raw = await self.get_raw(site, get_string) + reader = csv.DictReader(raw.split('\n')) return list(reader) def name(self): return self.__class__.__name__ - def update_safe(self, ccy): + @aiosafe + async def update_safe(self, ccy): try: self.print_error("getting fx quotes for", ccy) - self.quotes = self.get_rates(ccy) + self.quotes = await self.get_rates(ccy) self.print_error("received fx quotes") except BaseException as e: self.print_error("failed fx quotes:", e) + self.quotes = {} self.on_quotes() def update(self, ccy): - t = Thread(target=self.update_safe, args=(ccy,)) - t.setDaemon(True) - t.start() + asyncio.get_event_loop().create_task(self.update_safe(ccy)) def read_historical_rates(self, ccy, cache_dir): filename = os.path.join(cache_dir, self.name() + '_'+ ccy) @@ -78,13 +89,16 @@ class ExchangeBase(PrintError): self.on_history() return h - def get_historical_rates_safe(self, ccy, cache_dir): + @aiosafe + async def get_historical_rates_safe(self, ccy, cache_dir): try: self.print_error("requesting fx history for", ccy) - h = self.request_history(ccy) + h = await self.request_history(ccy) self.print_error("received fx history for", ccy) except BaseException as e: self.print_error("failed fx history:", e) + import traceback + traceback.print_exc() return filename = os.path.join(cache_dir, self.name() + '_' + ccy) with open(filename, 'w', encoding='utf-8') as f: @@ -100,9 +114,7 @@ class ExchangeBase(PrintError): if h is None: h = self.read_historical_rates(ccy, cache_dir) if h is None or h['timestamp'] < time.time() - 24*3600: - t = Thread(target=self.get_historical_rates_safe, args=(ccy, cache_dir)) - t.setDaemon(True) - t.start() + asyncio.get_event_loop().create_task(self.get_historical_rates_safe(ccy, cache_dir)) def history_ccys(self): return [] @@ -116,8 +128,8 @@ class ExchangeBase(PrintError): class BitcoinAverage(ExchangeBase): - def get_rates(self, ccy): - json = self.get_json('apiv2.bitcoinaverage.com', '/indices/global/ticker/short') + async def get_rates(self, ccy): + json = await self.get_json('apiv2.bitcoinaverage.com', '/indices/global/ticker/short') return dict([(r.replace("BTC", ""), Decimal(json[r]['last'])) for r in json if r != 'timestamp']) @@ -126,8 +138,8 @@ class BitcoinAverage(ExchangeBase): 'MXN', 'NOK', 'NZD', 'PLN', 'RON', 'RUB', 'SEK', 'SGD', 'USD', 'ZAR'] - def request_history(self, ccy): - history = self.get_csv('apiv2.bitcoinaverage.com', + async def request_history(self, ccy): + history = await self.get_csv('apiv2.bitcoinaverage.com', "/indices/global/history/BTC%s?period=alltime&format=csv" % ccy) return dict([(h['DateTime'][:10], h['Average']) for h in history]) @@ -135,8 +147,8 @@ class BitcoinAverage(ExchangeBase): class Bitcointoyou(ExchangeBase): - def get_rates(self, ccy): - json = self.get_json('bitcointoyou.com', "/API/ticker.aspx") + async def get_rates(self, ccy): + json = await self.get_json('bitcointoyou.com', "/API/ticker.aspx") return {'BRL': Decimal(json['ticker']['last'])} def history_ccys(self): @@ -145,8 +157,8 @@ class Bitcointoyou(ExchangeBase): class BitcoinVenezuela(ExchangeBase): - def get_rates(self, ccy): - json = self.get_json('api.bitcoinvenezuela.com', '/') + async def get_rates(self, ccy): + json = await self.get_json('api.bitcoinvenezuela.com', '/') rates = [(r, json['BTC'][r]) for r in json['BTC'] if json['BTC'][r] is not None] # Giving NULL for LTC return dict(rates) @@ -154,85 +166,86 @@ class BitcoinVenezuela(ExchangeBase): def history_ccys(self): return ['ARS', 'EUR', 'USD', 'VEF'] - def request_history(self, ccy): - return self.get_json('api.bitcoinvenezuela.com', - "/historical/index.php?coin=BTC")[ccy +'_BTC'] + async def request_history(self, ccy): + json = await self.get_json('api.bitcoinvenezuela.com', + "/historical/index.php?coin=BTC") + return json[ccy +'_BTC'] class Bitbank(ExchangeBase): - def get_rates(self, ccy): - json = self.get_json('public.bitbank.cc', '/btc_jpy/ticker') + async def get_rates(self, ccy): + json = await self.get_json('public.bitbank.cc', '/btc_jpy/ticker') return {'JPY': Decimal(json['data']['last'])} class BitFlyer(ExchangeBase): - def get_rates(self, ccy): - json = self.get_json('bitflyer.jp', '/api/echo/price') + async def get_rates(self, ccy): + json = await self.get_json('bitflyer.jp', '/api/echo/price') return {'JPY': Decimal(json['mid'])} class Bitmarket(ExchangeBase): - def get_rates(self, ccy): - json = self.get_json('www.bitmarket.pl', '/json/BTCPLN/ticker.json') + async def get_rates(self, ccy): + json = await self.get_json('www.bitmarket.pl', '/json/BTCPLN/ticker.json') return {'PLN': Decimal(json['last'])} class BitPay(ExchangeBase): - def get_rates(self, ccy): - json = self.get_json('bitpay.com', '/api/rates') + async def get_rates(self, ccy): + json = await self.get_json('bitpay.com', '/api/rates') return dict([(r['code'], Decimal(r['rate'])) for r in json]) class Bitso(ExchangeBase): - def get_rates(self, ccy): - json = self.get_json('api.bitso.com', '/v2/ticker') + async def get_rates(self, ccy): + json = await self.get_json('api.bitso.com', '/v2/ticker') return {'MXN': Decimal(json['last'])} class BitStamp(ExchangeBase): - def get_rates(self, ccy): - json = self.get_json('www.bitstamp.net', '/api/ticker/') + async def get_rates(self, ccy): + json = await self.get_json('www.bitstamp.net', '/api/ticker/') return {'USD': Decimal(json['last'])} class Bitvalor(ExchangeBase): - def get_rates(self,ccy): - json = self.get_json('api.bitvalor.com', '/v1/ticker.json') + async def get_rates(self,ccy): + json = await self.get_json('api.bitvalor.com', '/v1/ticker.json') return {'BRL': Decimal(json['ticker_1h']['total']['last'])} class BlockchainInfo(ExchangeBase): - def get_rates(self, ccy): - json = self.get_json('blockchain.info', '/ticker') + async def get_rates(self, ccy): + json = await self.get_json('blockchain.info', '/ticker') return dict([(r, Decimal(json[r]['15m'])) for r in json]) class BTCChina(ExchangeBase): - def get_rates(self, ccy): - json = self.get_json('data.btcchina.com', '/data/ticker') + async def get_rates(self, ccy): + json = await self.get_json('data.btcchina.com', '/data/ticker') return {'CNY': Decimal(json['ticker']['last'])} class BTCParalelo(ExchangeBase): - def get_rates(self, ccy): - json = self.get_json('btcparalelo.com', '/api/price') + async def get_rates(self, ccy): + json = await self.get_json('btcparalelo.com', '/api/price') return {'VEF': Decimal(json['price'])} class Coinbase(ExchangeBase): - def get_rates(self, ccy): - json = self.get_json('coinbase.com', + async def get_rates(self, ccy): + json = await self.get_json('coinbase.com', '/api/v1/currencies/exchange_rates') return dict([(r[7:].upper(), Decimal(json[r])) for r in json if r.startswith('btc_to_')]) @@ -240,13 +253,13 @@ class Coinbase(ExchangeBase): class CoinDesk(ExchangeBase): - def get_currencies(self): - dicts = self.get_json('api.coindesk.com', + async def get_currencies(self): + dicts = await self.get_json('api.coindesk.com', '/v1/bpi/supported-currencies.json') return [d['currency'] for d in dicts] - def get_rates(self, ccy): - json = self.get_json('api.coindesk.com', + async def get_rates(self, ccy): + json = await self.get_json('api.coindesk.com', '/v1/bpi/currentprice/%s.json' % ccy) result = {ccy: Decimal(json['bpi'][ccy]['rate_float'])} return result @@ -257,35 +270,35 @@ class CoinDesk(ExchangeBase): def history_ccys(self): return self.history_starts().keys() - def request_history(self, ccy): + async def request_history(self, ccy): start = self.history_starts()[ccy] end = datetime.today().strftime('%Y-%m-%d') # Note ?currency and ?index don't work as documented. Sigh. query = ('/v1/bpi/historical/close.json?start=%s&end=%s' % (start, end)) - json = self.get_json('api.coindesk.com', query) + json = await self.get_json('api.coindesk.com', query) return json['bpi'] class Coinsecure(ExchangeBase): - def get_rates(self, ccy): - json = self.get_json('api.coinsecure.in', '/v0/noauth/newticker') + async def get_rates(self, ccy): + json = await self.get_json('api.coinsecure.in', '/v0/noauth/newticker') return {'INR': Decimal(json['lastprice'] / 100.0 )} class Foxbit(ExchangeBase): - def get_rates(self,ccy): - json = self.get_json('api.bitvalor.com', '/v1/ticker.json') + async def get_rates(self,ccy): + json = await self.get_json('api.bitvalor.com', '/v1/ticker.json') return {'BRL': Decimal(json['ticker_1h']['exchanges']['FOX']['last'])} class itBit(ExchangeBase): - def get_rates(self, ccy): + async def get_rates(self, ccy): ccys = ['USD', 'EUR', 'SGD'] - json = self.get_json('api.itbit.com', '/v1/markets/XBT%s/ticker' % ccy) + json = await self.get_json('api.itbit.com', '/v1/markets/XBT%s/ticker' % ccy) result = dict.fromkeys(ccys) if ccy in ccys: result[ccy] = Decimal(json['lastPrice']) @@ -294,10 +307,10 @@ class itBit(ExchangeBase): class Kraken(ExchangeBase): - def get_rates(self, ccy): + async def get_rates(self, ccy): ccys = ['EUR', 'USD', 'CAD', 'GBP', 'JPY'] pairs = ['XBT%s' % c for c in ccys] - json = self.get_json('api.kraken.com', + json = await self.get_json('api.kraken.com', '/0/public/Ticker?pair=%s' % ','.join(pairs)) return dict((k[-3:], Decimal(float(v['c'][0]))) for k, v in json['result'].items()) @@ -305,45 +318,45 @@ class Kraken(ExchangeBase): class LocalBitcoins(ExchangeBase): - def get_rates(self, ccy): - json = self.get_json('localbitcoins.com', + async def get_rates(self, ccy): + json = await self.get_json('localbitcoins.com', '/bitcoinaverage/ticker-all-currencies/') return dict([(r, Decimal(json[r]['rates']['last'])) for r in json]) class MercadoBitcoin(ExchangeBase): - def get_rates(self, ccy): - json = self.get_json('api.bitvalor.com', '/v1/ticker.json') + async def get_rates(self, ccy): + json = await self.get_json('api.bitvalor.com', '/v1/ticker.json') return {'BRL': Decimal(json['ticker_1h']['exchanges']['MBT']['last'])} class NegocieCoins(ExchangeBase): - def get_rates(self,ccy): - json = self.get_json('api.bitvalor.com', '/v1/ticker.json') + async def get_rates(self,ccy): + json = await self.get_json('api.bitvalor.com', '/v1/ticker.json') return {'BRL': Decimal(json['ticker_1h']['exchanges']['NEG']['last'])} class TheRockTrading(ExchangeBase): - def get_rates(self, ccy): - json = self.get_json('api.therocktrading.com', + async def get_rates(self, ccy): + json = await self.get_json('api.therocktrading.com', '/v1/funds/BTCEUR/ticker') return {'EUR': Decimal(json['last'])} class Unocoin(ExchangeBase): - def get_rates(self, ccy): - json = self.get_json('www.unocoin.com', 'trade?buy') + async def get_rates(self, ccy): + json = await self.get_json('www.unocoin.com', 'trade?buy') return {'INR': Decimal(json)} class WEX(ExchangeBase): - def get_rates(self, ccy): - json_eur = self.get_json('wex.nz', '/api/3/ticker/btc_eur') - json_rub = self.get_json('wex.nz', '/api/3/ticker/btc_rur') - json_usd = self.get_json('wex.nz', '/api/3/ticker/btc_usd') + async def get_rates(self, ccy): + json_eur = await self.get_json('wex.nz', '/api/3/ticker/btc_eur') + json_rub = await self.get_json('wex.nz', '/api/3/ticker/btc_rur') + json_usd = await self.get_json('wex.nz', '/api/3/ticker/btc_usd') return {'EUR': Decimal(json_eur['btc_eur']['last']), 'RUB': Decimal(json_rub['btc_rur']['last']), 'USD': Decimal(json_usd['btc_usd']['last'])} @@ -351,15 +364,15 @@ class WEX(ExchangeBase): class Winkdex(ExchangeBase): - def get_rates(self, ccy): - json = self.get_json('winkdex.com', '/api/v0/price') + async def get_rates(self, ccy): + json = await self.get_json('winkdex.com', '/api/v0/price') return {'USD': Decimal(json['price'] / 100.0)} def history_ccys(self): return ['USD'] - def request_history(self, ccy): - json = self.get_json('winkdex.com', + async def request_history(self, ccy): + json = await self.get_json('winkdex.com', "/api/v0/series?start_time=1342915200") history = json['series'][0]['results'] return dict([(h['timestamp'][:10], h['price'] / 100.0) @@ -367,8 +380,8 @@ class Winkdex(ExchangeBase): class Zaif(ExchangeBase): - def get_rates(self, ccy): - json = self.get_json('api.zaif.jp', '/api/1/last_price/btc_jpy') + async def get_rates(self, ccy): + json = await self.get_json('api.zaif.jp', '/api/1/last_price/btc_jpy') return {'JPY': Decimal(json['last_price'])} @@ -381,7 +394,6 @@ def dictinvert(d): return inv def get_exchanges_and_currencies(): - import os, json path = os.path.join(os.path.dirname(__file__), 'currencies.json') try: with open(path, 'r', encoding='utf-8') as f: @@ -426,13 +438,22 @@ class FxThread(ThreadJob): def __init__(self, config, network): self.config = config self.network = network + self.network.register_callback(self.set_proxy, ['proxy_set']) self.ccy = self.get_currency() self.history_used_spot = False self.ccy_combo = None self.hist_checkbox = None self.cache_dir = os.path.join(config.path, 'cache') + self.trigger = asyncio.Event() + self.trigger.set() self.set_exchange(self.config_exchange()) make_dir(self.cache_dir) + self.set_proxy('bogus', self.network.proxy) + + def set_proxy(self, trigger_name, *args): + global PROXY + PROXY = args[0] + self.trigger.set() def get_currencies(self, h): d = get_exchanges_by_ccy(h) @@ -451,13 +472,18 @@ class FxThread(ThreadJob): rounded_amount = amount return fmt_str.format(rounded_amount) - def run(self): - # This runs from the plugins thread which catches exceptions - if self.is_enabled(): - if self.timeout ==0 and self.show_history(): - self.exchange.get_historical_rates(self.ccy, self.cache_dir) - if self.timeout <= time.time(): - self.timeout = time.time() + 150 + async def run(self): + while True: + try: + await asyncio.wait_for(self.trigger.wait(), 150) + except concurrent.futures.TimeoutError: + pass + else: + self.trigger.clear() + if self.is_enabled(): + if self.show_history(): + self.exchange.get_historical_rates(self.ccy, self.cache_dir) + if self.is_enabled(): self.exchange.update(self.ccy) def is_enabled(self): @@ -497,7 +523,7 @@ class FxThread(ThreadJob): def set_currency(self, ccy): self.ccy = ccy self.config.set_key('currency', ccy, True) - self.timeout = 0 # Because self.ccy changes + self.trigger.set() # Because self.ccy changes self.on_quotes() def set_exchange(self, name): @@ -508,7 +534,7 @@ class FxThread(ThreadJob): self.exchange = class_(self.on_quotes, self.on_history) # A new exchange means new fx quotes, initially empty. Force # a quote refresh - self.timeout = 0 + self.trigger.set() self.exchange.read_historical_rates(self.ccy, self.cache_dir) def on_quotes(self): diff --git a/electrum/gui/kivy/uix/dialogs/crash_reporter.py b/electrum/gui/kivy/uix/dialogs/crash_reporter.py index 04582b953..00e96f2f0 100644 --- a/electrum/gui/kivy/uix/dialogs/crash_reporter.py +++ b/electrum/gui/kivy/uix/dialogs/crash_reporter.py @@ -1,6 +1,7 @@ import sys +import json -import requests +from aiohttp.client_exceptions import ClientError from kivy import base, utils from kivy.clock import Clock from kivy.core.window import Window @@ -102,6 +103,11 @@ class CrashReporter(BaseCrashReporter, Factory.Popup): self.ids.crash_message.text = BaseCrashReporter.CRASH_MESSAGE self.ids.request_help_message.text = BaseCrashReporter.REQUEST_HELP_MESSAGE self.ids.describe_error_message.text = BaseCrashReporter.DESCRIBE_ERROR_MESSAGE + self.proxy = self.main_window.network.proxy + self.main_window.network.register_callback(self.set_proxy, ['proxy_set']) + + def set_proxy(self, evt, proxy): + self.proxy = proxy def show_contents(self): details = CrashReportDetails(self.get_report_string()) @@ -115,8 +121,8 @@ class CrashReporter(BaseCrashReporter, Factory.Popup): def send_report(self): try: - response = BaseCrashReporter.send_report(self, "/crash.json").json() - except requests.exceptions.RequestException: + response = json.loads(BaseCrashReporter.send_report(self, self.main_window.network.asyncio_loop, self.proxy, "/crash.json")) + except (ValueError, ClientError): self.show_popup(_('Unable to send report'), _("Please check your network connection.")) else: self.show_popup(_('Report sent'), response["text"]) diff --git a/electrum/gui/qt/exception_window.py b/electrum/gui/qt/exception_window.py index 1774a043f..c4e337f1a 100644 --- a/electrum/gui/qt/exception_window.py +++ b/electrum/gui/qt/exception_window.py @@ -41,6 +41,10 @@ class Exception_Window(BaseCrashReporter, QWidget, MessageBoxMixin): def __init__(self, main_window, exctype, value, tb): BaseCrashReporter.__init__(self, exctype, value, tb) self.main_window = main_window + + self.proxy = self.main_window.network.proxy + self.main_window.network.register_callback(self.set_proxy, ['proxy_set']) + QWidget.__init__(self) self.setWindowTitle('Electrum - ' + _('An Error Occurred')) self.setMinimumSize(600, 300) @@ -88,16 +92,19 @@ class Exception_Window(BaseCrashReporter, QWidget, MessageBoxMixin): self.setLayout(main_box) self.show() + def set_proxy(self, evt, proxy): + self.proxy = proxy + def send_report(self): try: - response = BaseCrashReporter.send_report(self) + response = BaseCrashReporter.send_report(self, self.main_window.network.asyncio_loop, self.proxy) except BaseException as e: traceback.print_exc(file=sys.stderr) self.main_window.show_critical(_('There was a problem with the automatic reporting:') + '\n' + str(e) + '\n' + _("Please report this issue manually.")) return - QMessageBox.about(self, _("Crash report"), response.text) + QMessageBox.about(self, _("Crash report"), response) self.close() def on_close(self): diff --git a/electrum/network.py b/electrum/network.py index f0aa4a61f..7d6e49504 100644 --- a/electrum/network.py +++ b/electrum/network.py @@ -110,7 +110,7 @@ def pick_random_server(hostmap = None, protocol = 's', exclude_set = set()): from .simple_config import SimpleConfig -proxy_modes = ['socks4', 'socks5', 'http'] +proxy_modes = ['socks4', 'socks5'] def serialize_proxy(p): @@ -437,6 +437,7 @@ class Network(PrintError): socket.getaddrinfo = self._fast_getaddrinfo else: socket.getaddrinfo = socket._getaddrinfo + self.trigger_callback('proxy_set', self.proxy) @staticmethod def _fast_getaddrinfo(host, *args, **kwargs): @@ -710,9 +711,13 @@ class Network(PrintError): with b.lock: b.update_size() - def _run(self): + def _run(self, fx): self.init_headers_file() - self.gat = self.asyncio_loop.create_task(self.maintain_sessions()) + jobs = [self.maintain_sessions()] + if fx: + jobs.append(fx) + jobs = [self.asyncio_loop.create_task(x) for x in jobs] + self.gat = asyncio.gather(*jobs) try: self.asyncio_loop.run_until_complete(self.gat) except concurrent.futures.CancelledError: @@ -789,8 +794,8 @@ class Network(PrintError): def max_checkpoint(cls): return max(0, len(constants.net.CHECKPOINTS) * 2016 - 1) - def start(self): - self.fut = threading.Thread(target=self._run) + def start(self, fx=None): + self.fut = threading.Thread(target=self._run, args=(fx,)) self.fut.start() def stop(self): diff --git a/electrum/plugins/labels/labels.py b/electrum/plugins/labels/labels.py index d5fa50b2c..cf0833c5d 100644 --- a/electrum/plugins/labels/labels.py +++ b/electrum/plugins/labels/labels.py @@ -1,6 +1,6 @@ +import asyncio import hashlib import requests -import threading import json import sys import traceback @@ -10,7 +10,7 @@ import base64 from electrum.plugin import BasePlugin, hook from electrum.crypto import aes_encrypt_with_iv, aes_decrypt_with_iv from electrum.i18n import _ - +from electrum.util import aiosafe, make_aiohttp_session class LabelsPlugin(BasePlugin): @@ -18,11 +18,11 @@ class LabelsPlugin(BasePlugin): BasePlugin.__init__(self, parent, config, name) self.target_host = 'labels.electrum.org' self.wallets = {} + self.proxy = None def encode(self, wallet, msg): password, iv, wallet_id = self.wallets[wallet] - encrypted = aes_encrypt_with_iv(password, iv, - msg.encode('utf8')) + encrypted = aes_encrypt_with_iv(password, iv, msg.encode('utf8')) return base64.b64encode(encrypted).decode() def decode(self, wallet, message): @@ -55,37 +55,27 @@ class LabelsPlugin(BasePlugin): "walletNonce": nonce, "externalId": self.encode(wallet, item), "encryptedLabel": self.encode(wallet, label)} - t = threading.Thread(target=self.do_request_safe, - args=["POST", "/label", False, bundle]) - t.setDaemon(True) - t.start() + asyncio.get_event_loop().create_task(self.do_post_safe("/label", False, bundle)) # Caller will write the wallet self.set_nonce(wallet, nonce + 1) - def do_request(self, method, url = "/labels", is_batch=False, data=None): + @aiosafe + async def do_post_safe(self, *args): + await self.do_post(*args) + + async def do_get(self, url = "/labels"): + url = 'https://' + self.target_host + url + async with make_aiohttp_session(self.proxy) as session: + async with session.get(url) as result: + return await result.json() + + async def do_post(self, url = "/labels", data=None): url = 'https://' + self.target_host + url - kwargs = {'headers': {}} - if method == 'GET' and data: - kwargs['params'] = data - elif method == 'POST' and data: - kwargs['data'] = json.dumps(data) - kwargs['headers']['Content-Type'] = 'application/json' - response = requests.request(method, url, **kwargs) - if response.status_code != 200: - raise Exception(response.status_code, response.text) - response = response.json() - if "error" in response: - raise Exception(response["error"]) - return response - - def do_request_safe(self, *args, **kwargs): - try: - self.do_request(*args, **kwargs) - except BaseException as e: - #traceback.print_exc(file=sys.stderr) - self.print_error('error doing request') - - def push_thread(self, wallet): + async with make_aiohttp_session(self.proxy) as session: + async with session.post(url, data=data) as result: + return await result.json() + + async def push_thread(self, wallet): wallet_data = self.wallets.get(wallet, None) if not wallet_data: raise Exception('Wallet {} not loaded'.format(wallet)) @@ -102,16 +92,16 @@ class LabelsPlugin(BasePlugin): continue bundle["labels"].append({'encryptedLabel': encoded_value, 'externalId': encoded_key}) - self.do_request("POST", "/labels", True, bundle) + await self.do_post("/labels", bundle) - def pull_thread(self, wallet, force): + async def pull_thread(self, wallet, force): wallet_data = self.wallets.get(wallet, None) if not wallet_data: raise Exception('Wallet {} not loaded'.format(wallet)) wallet_id = wallet_data[2] nonce = 1 if force else self.get_nonce(wallet) - 1 self.print_error("asking for labels since nonce", nonce) - response = self.do_request("GET", ("/labels/since/%d/for/%s" % (nonce, wallet_id) )) + response = await self.do_get("/labels/since/%d/for/%s" % (nonce, wallet_id)) if response["labels"] is None: self.print_error('no new labels') return @@ -140,12 +130,15 @@ class LabelsPlugin(BasePlugin): self.set_nonce(wallet, response["nonce"] + 1) self.on_pulled(wallet) - def pull_thread_safe(self, wallet, force): - try: - self.pull_thread(wallet, force) - except BaseException as e: - # traceback.print_exc(file=sys.stderr) - self.print_error('could not retrieve labels') + @aiosafe + async def pull_safe_thread(self, wallet, force): + await self.pull_thread(wallet, force) + + def pull(self, wallet, force): + return asyncio.run_coroutine_threadsafe(self.pull_thread(wallet, force), wallet.network.asyncio_loop).result() + + def push(self, wallet): + return asyncio.run_coroutine_threadsafe(self.push_thread(wallet), wallet.network.asyncio_loop).result() def start_wallet(self, wallet): nonce = self.get_nonce(wallet) @@ -159,9 +152,14 @@ class LabelsPlugin(BasePlugin): wallet_id = hashlib.sha256(mpk).hexdigest() self.wallets[wallet] = (password, iv, wallet_id) # If there is an auth token we can try to actually start syncing - t = threading.Thread(target=self.pull_thread_safe, args=(wallet, False)) - t.setDaemon(True) - t.start() + asyncio.get_event_loop().create_task(self.pull_safe_thread(wallet, False)) + self.proxy = wallet.network.proxy + wallet.network.register_callback(self.set_proxy, ['proxy_set']) def stop_wallet(self, wallet): + wallet.network.unregister_callback('proxy_set') self.wallets.pop(wallet, None) + + def set_proxy(self, evt_name, new_proxy): + self.proxy = new_proxy + self.print_error("proxy set") diff --git a/electrum/plugins/labels/qt.py b/electrum/plugins/labels/qt.py index df4ae55c2..2a66d98eb 100644 --- a/electrum/plugins/labels/qt.py +++ b/electrum/plugins/labels/qt.py @@ -38,11 +38,11 @@ class Plugin(LabelsPlugin): hbox = QHBoxLayout() hbox.addWidget(QLabel("Label sync options:")) upload = ThreadedButton("Force upload", - partial(self.push_thread, wallet), + partial(self.push, wallet), partial(self.done_processing_success, d), partial(self.done_processing_error, d)) download = ThreadedButton("Force download", - partial(self.pull_thread, wallet, True), + partial(self.pull, wallet, True), partial(self.done_processing_success, d), partial(self.done_processing_error, d)) vbox = QVBoxLayout() diff --git a/electrum/util.py b/electrum/util.py index 4a3629cd4..61f0b9f54 100644 --- a/electrum/util.py +++ b/electrum/util.py @@ -37,6 +37,8 @@ from locale import localeconv from .i18n import _ +import aiohttp +from aiohttp_socks import SocksConnector, SocksVer import urllib.request, urllib.parse, urllib.error import queue @@ -947,3 +949,17 @@ VerifiedTxInfo = NamedTuple("VerifiedTxInfo", [("height", int), ("timestamp", int), ("txpos", int), ("header_hash", str)]) + +def make_aiohttp_session(proxy): + if proxy: + connector = SocksConnector( + socks_ver=SocksVer.SOCKS5 if proxy['mode'] == 'socks5' else SocksVer.SOCKS4, + host=proxy['host'], + port=int(proxy['port']), + username=proxy.get('user', None), + password=proxy.get('password', None), + rdns=True + ) + return aiohttp.ClientSession(headers={'User-Agent' : 'Electrum'}, timeout=aiohttp.ClientTimeout(total=10), connector=connector) + else: + return aiohttp.ClientSession(headers={'User-Agent' : 'Electrum'}, timeout=aiohttp.ClientTimeout(total=10)) From 0ad504bdf0afe24167f27e0922f5e53b77d205fd Mon Sep 17 00:00:00 2001 From: SomberNight Date: Thu, 6 Sep 2018 16:45:43 +0200 Subject: [PATCH 27/76] interface: catch many common exceptions explicitly --- electrum/interface.py | 29 +++++++++++++++++++++++++---- electrum/network.py | 2 +- electrum/util.py | 9 +++++++++ 3 files changed, 35 insertions(+), 5 deletions(-) diff --git a/electrum/interface.py b/electrum/interface.py index 19581bf94..d0e63f2f9 100644 --- a/electrum/interface.py +++ b/electrum/interface.py @@ -36,7 +36,7 @@ from aiorpcx import ClientSession, Notification import requests -from .util import PrintError, aiosafe, bfh +from .util import PrintError, aiosafe, bfh, AIOSafeSilentException ca_path = requests.certs.where() @@ -68,6 +68,10 @@ class NotificationSession(ClientSession): assert False, request.method + +class GracefulDisconnect(AIOSafeSilentException): pass + + class Interface(PrintError): def __init__(self, network, server, config_path, proxy): @@ -134,7 +138,12 @@ class Interface(PrintError): os.unlink(self.cert_path) exists = False if not exists: - ca_signed = await self.is_server_ca_signed(ca_sslc) + try: + ca_signed = await self.is_server_ca_signed(ca_sslc) + except (ConnectionRefusedError, socket.gaierror) as e: + self.print_error('disconnecting due to: {}'.format(e)) + self.exception = e + return if ca_signed: with open(self.cert_path, 'w') as f: # empty file means this is CA signed, not self-signed @@ -147,7 +156,13 @@ class Interface(PrintError): else: sslc = ssl.create_default_context(ssl.Purpose.SERVER_AUTH, cafile=self.cert_path) sslc.check_hostname = 0 - await self.open_session(sslc, exit_early=False) + try: + await self.open_session(sslc, exit_early=False) + except (asyncio.CancelledError, ConnectionRefusedError, socket.gaierror, ssl.SSLError, TimeoutError) as e: + self.print_error('disconnecting due to: {}'.format(e)) + self.exception = e + return + # should never get here (can only exit via exception) assert False def mark_ready(self): @@ -204,7 +219,10 @@ class Interface(PrintError): header_queue = asyncio.Queue() self.session = NotificationSession(None, header_queue, self.host, self.port, ssl=sslc, proxy=self.proxy) async with self.session as session: - ver = await session.send_request('server.version', [ELECTRUM_VERSION, PROTOCOL_VERSION]) + try: + ver = await session.send_request('server.version', [ELECTRUM_VERSION, PROTOCOL_VERSION]) + except aiorpcx.jsonrpc.RPCError as e: + raise GracefulDisconnect(e) # probably 'unsupported protocol version' if exit_early: return self.print_error(ver, self.host) @@ -228,6 +246,9 @@ class Interface(PrintError): @aiosafe async def run_fetch_blocks(self, sub_reply, replies): + if self.tip < self.network.max_checkpoint(): + raise GracefulDisconnect('server tip below max checkpoint') + async with self.network.bhi_lock: height = self.blockchain.height()+1 await replies.put(blockchain.deserialize_header(bfh(sub_reply['hex']), sub_reply['height'])) diff --git a/electrum/network.py b/electrum/network.py index f0aa4a61f..631178aed 100644 --- a/electrum/network.py +++ b/electrum/network.py @@ -817,7 +817,7 @@ class Network(PrintError): try: raise i.exception except BaseException as e: - self.print_error(i.server, "errored because", str(e), str(type(e))) + self.print_error(i.server, "errored because:", str(e), str(type(e))) remove.append(k) changed = False for k in remove: diff --git a/electrum/util.py b/electrum/util.py index 4a3629cd4..571c57f63 100644 --- a/electrum/util.py +++ b/electrum/util.py @@ -34,6 +34,7 @@ import hmac import stat import inspect from locale import localeconv +import asyncio from .i18n import _ @@ -925,6 +926,10 @@ def make_dir(path, allow_symlink=True): os.mkdir(path) os.chmod(path, stat.S_IRUSR | stat.S_IWUSR | stat.S_IXUSR) + +class AIOSafeSilentException(Exception): pass + + def aiosafe(f): # save exception in object. # f must be a method of a PrintError instance. @@ -933,6 +938,10 @@ def aiosafe(f): self = args[0] try: return await f(*args, **kwargs) + except AIOSafeSilentException as e: + self.exception = e + except asyncio.CancelledError as e: + self.exception = e except BaseException as e: self.print_error("Exception in", f.__name__, ":", e.__class__.__name__, str(e)) traceback.print_exc(file=sys.stderr) From be50394f1163c248ac7fe84e14d4cb7c2f42ac5c Mon Sep 17 00:00:00 2001 From: Janus Date: Thu, 6 Sep 2018 17:18:26 +0200 Subject: [PATCH 28/76] aiorpcx: increase crash reporter timeout, avoid is_running in kivy --- electrum/base_crash_reporter.py | 2 +- electrum/gui/kivy/main_window.py | 2 +- electrum/gui/kivy/theming/light-0.png | Bin 0 -> 480803 bytes electrum/gui/kivy/theming/light.atlas | 1 + 4 files changed, 3 insertions(+), 2 deletions(-) create mode 100644 electrum/gui/kivy/theming/light-0.png create mode 100644 electrum/gui/kivy/theming/light.atlas diff --git a/electrum/base_crash_reporter.py b/electrum/base_crash_reporter.py index 6cd94a49b..cc63159c2 100644 --- a/electrum/base_crash_reporter.py +++ b/electrum/base_crash_reporter.py @@ -68,7 +68,7 @@ class BaseCrashReporter: report.update(self.get_additional_info()) report = json.dumps(report) coro = self.do_post(proxy, BaseCrashReporter.report_server + endpoint, data=report) - response = asyncio.run_coroutine_threadsafe(coro, asyncio_loop).result(1) + response = asyncio.run_coroutine_threadsafe(coro, asyncio_loop).result(5) return response async def do_post(self, proxy, url, data): diff --git a/electrum/gui/kivy/main_window.py b/electrum/gui/kivy/main_window.py index 2ea871e22..0fd45be86 100644 --- a/electrum/gui/kivy/main_window.py +++ b/electrum/gui/kivy/main_window.py @@ -697,7 +697,7 @@ class ElectrumWindow(App): if not self.wallet: self.status = _("No Wallet") return - if self.network is None or not self.network.is_running(): + if self.network is None or not self.network.is_connected(): status = _("Offline") elif self.network.is_connected(): server_height = self.network.get_server_height() diff --git a/electrum/gui/kivy/theming/light-0.png b/electrum/gui/kivy/theming/light-0.png new file mode 100644 index 0000000000000000000000000000000000000000..c418938ae505e7c0c6c035f71940164eee06e176 GIT binary patch literal 480803 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 TCiaS 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

y%14;_zXL>Z4!xqZi&u1z?@ z<3ObzHa!p%#?xo%%0zWq;fr{>5riDD>UbKf3S;Ps0&kwKYJ!hJL+`h##BfJyGIufs zNBJju{uHWg2jV=yRJ66tVp9IwE}bFXsFLV9pj9rQyN+iE#IzccS3g5*S@q*n)l� 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�=me7jtm(-e7EQN^op7Sq-4NwtfIdH7LGDYt+SW+ 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

6VNh69Pu4fZ`DU~%(H-jdw)*PcwQ6mfD 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%0AW7%v6h?eUo&YK(~{0K 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 DeC`tS7V&~ zAJ5-I_L6U6X1F{tv23!^w_Bmf7P8%)O$;9GzS5`JeBBkEvbnU2_PefN)N7ptPT4$7 zD=Lx&sr?=TS{@M(-b6fO$0p^$xZdN>@e^$jG&cfaGr5aT`DGsBmP`KTLtH!4VWz1VRT<@cLtKF> zutf#f!e@j}TL}RCy-wABor3#Q_=hnApfgGnL0Q0hgxswxWvi}CI3w4W{hS!ybi%!d zUS)Ix=we`;YRl0I$-8MHjdg7Y+=8cg*DIj2%#)iD}Txz)?A2RN}BE&F4mah)Pp_RhzfHH}Wm7$Oy`Sjx}zw)-fyH zzm_x-b%n5-B)l4%(3lWRNCs}x%guALxc1b@+R5m(TO&99fn5`$X*@9N4XSIX?!-&C`}opHe{7-BO@$mAJWoqCj2kUC-Sqcm9Nld>!w}du zYS`KIJhyX~*uD>D&QmOA9eS3_%xdOjEkfuhjS{0yCWkV5bYrQDzh;iCcrfS^N!|8_ zPDX|hQY43I7Kd-Z%~cxSbV6VDbA`h~=DISrX=DwJ>uA@t$MfG7wy=dQY~lZI?Em(o z=g^tI6nk*sb^U+5zpwwszl1mbCC&1Ccx$`c$T|hQ=btIxe-)!~+P^6QTY%Ra;@e)$ z4i7=oTcoMN(|-Ho!)#n-9J-z)4&P1#Uo5JJ*-=8B0--&jQ4IHL>@dMN9|!kNVR z3#0Ztrs2YGseSU_8jk#Y%{#7u^B%LRC%mA`Lz&(AmEX7IIz*z>BK>`@tEckVEg1r^D~ zqcVzujv=c}7VJhzXI~SfAYukZ**J4G4gxsQ_>U|-q&@^O>5cbUqrahGv&U&hgREUC3t#0*ZZ znqj#r_T{kWOi}C>%d?{LLLM{Q3*Y^0TOhH*w?l-+17?Z~VfQiaOh$MaX^~xPgs$ zR`(0O`Kj=Szex6pYq+RW@SHKBQ5pKCS8{SDCyZr|DcRltPkRjAFM2FR8~E?^Hjh&e zoT3nzw%DI4{BJhopK@K`&XcXs>#6fRb>1nfUc`%Er zfyqZ^wuk$3%DQ>n=9(sM%xjwr$YY$M78R!$n(s}y@nI*qG#8=M5Qh;~W-|um&~vvQ z5%qCvZb8iS>`+S02vkASv|-eu6pXVvT{Z5+CU1qgDM>hqU_n$iC4*697(`zyX!j*#Yb@^soz3 zxg3#WGUQz8yF5(?YqQr!O(yHH+F&w5TK_Q{*H|@jL!!&q;09C$7=n*SaolDG>0;~) z#yq=}_(5TVc;*WHH#F5-99OR*5K&z!R;8K~gSdRfD7@%JmHvv2s($Qwnf82D=I)nw z{Isu;LJ{a>a+p-!B1U@{Q(go^7DQHq6^OaXI#6_ykl#oQgU~24OWF1T*c|6VPD-Pk zxHBEeD$7~ovDsGB2vt^hgl9^Kwp@xkkDEJ=Fery!na!kF(*fs!5I58echU0SU*pJA zZ@C*2wIu82c7HBtwg<|ssw)rrQm-rZ3rw*=zOzIFURjC$3FOc_Lxf8$odw#^0;Wt2 zh9H@wIkRtvc%6pFkLbe?yLljHqKT1Ul#h^B9OEF(dCh&;t3Lk6UW~Kn!DTlCFZ%Q^ zu!SvbVGI9xvH#m|*+X~lPowZ1jEzCv4m{`$gZ&SB{cmynqd#-tZI536JXiB`ia&e< z=p35$f8;O5)c@WL`mH}={f=dtNwoT@^;4ihL;QoEWm~n%B%0DB`_L(Ctv7g#n}Yyu zl$k8Y?e#Z(Zo=Kt3AlUB!KvRjuCejU-I?t--+5!};Y}Z#(e8^*@dlmT!^UfC@C&bC z{@4GA^*n=S?A13_{~Yv+Ut#GDzrf;f1IvL*>BrBbA@T+|l4{q z0J8LV>VlXC98t;=kkanCQFLXfh^oLfas|}MS6{1AJOY-Lf0^LI$%bU|($kum(jod^ zh}9o^{p0V>wmoXSx%wf2?LScj?F)pSvf`0l-u&Ti%!BBK6waZlgi@wQHKC>9$Ec7p z-;7P^YA|KuLO3T9D<$v#CZ%HRNa_}LDaYDo)Hux20JTC(a@Y{4g~?zp z3RY3t8a5`cO$Ou*%2v$EA=dA>*$4ZTmKO>Zn?y#4(_V%5b$op4at=l%#F1h95M4Oa zW$zgel;$o1=EMvp?}(-+VvY+-StKzv5P2s+({SuV4gclp1*>=f;=&1aMq>w>wsS_t ztfMBtHPC$0gF6QGMWmpDwNa&%_%drucZli{DjR%jc9(~{C+z2Z;q1xn!=JbRMN1bR zc*ElLpVmeGAH@Eb44**AzaD(zz-x=2|9sbH3tQO2eZ&55x#bLc`>p`aN=N)ri2s0f zE(%`_;fLA&$o>1j>0^&Q@Ro-zeLm~@xrEMv!+*ioDKQHSC|2`e#&?At1|_&F*3?JR69pBw{Ham+`|2b`=kW;YzqG{ zRsbArx%E2-&?yWRt|N+A4YH$YjNbK*o|ZmYv-3gMImGhgeU*4xNjR%dR;KKwLNwh-Ig^Mty%IDltAl2w-i|#!XX%IzuiW87oupyt zvRPp`iHfozrg|KZaFYV_-j-uSH90o2AEt^iqJ_L>rn?GZ2?q0tgIob+ja*y7NyM$j zLOH}*mhI{2_NVwU7%38Cq==>fs7yJ;E=`C~D>7=^HDctH$2=z8fFK1o6Di!RNp*`! ziKCGf`#_$!`YGg0PiPLj7`5khnU7~B+aI~k>NS5)|AO6+Z3iw(Vsi+Zq>~kxy}&;3 zGI##<2hl~)QP+9aPm*gdBXk0JmXj;U%5c_l|1CENGAV>fra~DLqfKKnEUBe;Hy}5v z9jTj|SVkB&mQmddRC|B~CW zL$M%KgcMz{6e$UxC`}lE9mbu(mQsVqXc{~DI{?|Zv=zxk` zE~1GsBE_lhHx+$nvf9~oYY!N;dI1BqVNly;oz5PF#6$^8&|T$tUUPlKcTjmzsDMdg z;Lm7$+*7%Y#h;Rt`tR%!oU^b^y&ZdCX1A;zP!v*Dz_5$U8ECpDCy+a-enKJQZ6$+O z+x;IsR|=0sx?sXKnA(Vp=blz0u@3&2VtJjGK3VHs@8~g#(8x3)6$;U&GM%AauEWt! zlL7GZPdoy%Yw|sx`3hi50r061v>U=B5Jx}XRoTK8w(uEX?yNVEg#Qmy-}&4FzqkA5 z@lX4|^W;V3i|<6bkcCTM3w-0}t)8Dl_!!boylsKEw?aIVnB#*7%-dO(HtpU?ln|v{;(Aau2vCd7i{ie&s2xpzu#wIY<=~Vuo z0uMNwtiAB2q|D>`kCg&b!u+PXx0RV>ADXV;CS}4Y$`L0Oh=&7s;j`)g%k7bDSX^8 zpY)BVh|r#V>=NM-4#huc-w$5p8-J+`5BTj_9HPqxVkUc5%0`f{83*Am?qUVQN=dJb zY^z|WP$TTP*&IE-)zl0zi5fax@Y62W=0cZK-1SP(^g1vTVAQ}JhE8awq4u9blCo+h zM0P2j613n{$UtPqkx&7(U5-R7BO#iIDKRBU7B8?1nG92vNdS#NE>Q>-G7ivWqRK=i z#SjT~gbdpXWP)y<5xNRh2!tK7G|Tcw2laa|Igvm8*t?Z2?7?B1;2a~jF=x{Y77IdO z1)XE;eCo+i%zhlGn~!`)shv;Gw7O!dXcltVwq~?sh85HqW=3%Z!V*?pqnXwRWj&Mg zoVbX>JcxCZH_$7ly+x{f=(rwCajoSVdJ+f#r zn>t3S+N`HB#>~j{2PPJu+EOx&SbSx>wYd&-FO(gSa}Z29w2+0P-g6CZy!Kc$dNI9Y(( z4iew^PS*R`#QMKUTpvdK`X6Ik`_=8wN${OAw|KnbO-sE~!tGdbaLV;Juid9G1vUveD}1>z-2GP0u&3qo?=*r=}R3w94jZ_VjT! zjw_Df9siB(k9;9V+Ej~^$|xxg_?J&mzU#e|PkTI_VU@1?@jv2c9{i1b*Ib9$Qk1zU zmEtl*e409KVGH*GH{Em-d7gjjf-UO0=JwlfXEYjd;e{98@AYZ30JQx(kG7*Uszq2a zvjz0$L7A}vonBz)!2H#tm-xDaH#mgrf%8c6e`tlSBo4?8Qr0TxE`j_)&AnuvUwhE9 ze~zduH>FedyiOtJ`ex7(RWJo;riQi3+|rQOIp=ix42b$9Bd-b1ZupZ=w3XvoWULz9 zbZ`pyw%nMK)I{6``aqFP>`>(sKDD~SxgZGV(S$5LTisr#pXR-370I+2Glc>~>enzD zm~sfNOcns)Kpwv>%W-I{Hp!#j9>+OVUE0lxahVhhF@xB8$;TX;IYS@%va%$mxy(d# zq+5%)-q2LRbruOlAaq37)yco)-8D;pd5g9^>(5bthY2qV(n3_4!$XR=9)Mj$UJyes zG^4dQ@%Q`xU1xoL!OW%eUJR*mb4LnCf=$XZuR?H#bMV{Lda9L+^#bd^3UMEHB3hfi^mv?PZ96iU)tLrN6v|C%(H& zv8w~IA(p1DqG+(HNYlVbRtQiu)=csfS2V7N#;Z8gC;|~%jcriV0nLLtkjY4i=};qv zGBbiKLQ|U3h=J+%)SC2LDOQ_w0TThc-yW-h+>pzTG38;*+c5m4VIXL7AW$IsB*sib z>Y}vNyZd8&OqZK1$;rjVYv39?|<>i!w$TD{y*;ayhr|Q#$$i< z>j~MVz(v?gz%{HM{$B_F*Ez>ed(O*FUJP?zMasCc4f$q>?>X>0o%fu!Jm-s-UHc5A zM?!WHF|Hu4rCfQ}fj4Zw`Yz>PT7N&V9gp65;B~VfIL+_h1MEV>zdrEVxqsO>UcLgt z9^%^XQ{Q-m?xoLy>`^G}BF2L><^MkL`k5;xL?S)_PIKz-=6We&goeVqOBYcUz&ybFPkO#i(9J5OFhHvbCX zaS&!uypkB-ao~50x8L1uKizZofBP+G(%bt(5FQU+#9Tov|L1*s=zE5*A^h>%nVsqK z(@wc&=x#^*zk?IA1tG?}iqlQR=k6r`j_1)Iu1s00ne1yP-#7XEpXPJA%+y6rwd0>! zWIA1+n-cx_i<$eoS8!(m_tq~?qey)1kFi*-pQ4zU+9FKfXX^7V_1=8?rZzbBx;~{1 z1h}l=5f3AO`WMlE?}r#|N=HayH}nGG8-I-B$Nq&gDbqIdf#>m<{a?z%4*Vk@pDCDa zOu1&NZKgVT@A3qnM!mCzFJOGm-`7ny-SnU=%ihbUVf}CMpiZarp6jo_{>c|!c;WrZ z0!Wmfe8tXJ%t{TbLaIz>U37-BVv2`Z%0%Pvs3Ls*5vv*9AmSB5cff@1Go~_+#Ww(i zc7qQm2BkZgZV_C>He6gs$`-(LA{Wd?ob~1YdD8Clw0qlb?WhBTI>|U; znrz_q9~+-zb>pUgpJusMRjFzI(Wa&gq&(tz?UYe&h{GWH7za(JPi}BTve1-51M9_;t)!vj!{j-xvd$;WPM(<2PdPKPMFmtQJoMzCi$ot9*Ha;H7Aal z<>L{bjPy=Kb(d^Lk?5F2G$QM@Sz3=84UC4-*)U2`bk6RmoQuBVXRdTJ`Xk@~cy03N zsc~AnvUVappS<&pT>i(GsyfmzI58kbD`X-08-yS-Nm*d}U&sSl5y(1$tP_+K>6o(M zsd6F{gyhu~vY;5P!HI#&+Z!(blS|1v--z^l(9TJ{Ho6~e-4D1K{gJNtnJZP!MLK79 zP!!oPqG8l%U@xsl)@$2DNp^HJqeyqj^iD+kWMuhxe2U^m?q_f!&gNW{w=}|ILc#W*F!T>x3 zBFbx%SM7-2aOFE?#hu9N_s95{E;lVg2htcF)Ucxt?B2Fp+I^nfKTpp3Vm78&2A-3$ z1)O(8j$B0CEdm|vFev>4@9wI@MfLto$0Z@IN6u6ZBwU2M%A1^B>>;()wri zbG|m;UAc8|2Dx>pFZUnr~Kwq%ANY#>Aur$ z<=XF6jW7RVI^XdOW(N)NbQuRu#h@WR=7AL7_AL6FDED_)$5XE}bs|46{f7UBW3Nx!>W>sD`T5jwxguKl+J`6AnP=cy5T4xsVsvpi(-Fb%` zKO*_&$>0SDDLc3}Gkv;9mpLyU%C-yoKJ>bw%hKc_xYOowD?2g^kj;V%Q5HDg2D{G? z`_4c;vAA0Lyb{f3QUfHZ8#oCB3X5<@C4jEE+WOr)_wP9UiRmn`NNkaD!MkWRN zt29j~YV)Ss>ev*lD=@edLSspG3DlqrtFU9JOdOceNo)Ox7#xRY#bm3Id^wVxG})5H zN>sfXsgJ|xuvxzYFCVkkmJMr>-Y62HRR>dL(RH-y$~0@y&1!>-%=3?&<6nN&I()@P z9jmw5yjyl73p)hk*zynva7Ivgp0e5f-u-pw`nJCvYW=1)XV_Vup)8mXOgH7EUFI4N4z(RuohWcHp|D% z`W>k)>*G+bMp%htOC~#M^5y7kHPWn@!Ev;HL>`^AD;DV*FjYSK88OlZvDPFPp4 zDQtCG$GHu~nX#b4)FHIF>O*Vorv_F9>mt;t4|YdRVJ7p_F4mt-Os&PS0cJDlyb>+0 zmR3)&?+n;|hMaGMvPfe*o5d`kveO1gG|EGuEUiPY8+zLXee&X=NS8Sg85pZbY}uiW ze%WpSB;PE@kEpuyj(F7%=hm5psxnf7h5-))G}w7Mx) zckhm&dj<@C3>cvBL|%6F{!RBN9{l|&eJ6KPuYVs`zxWx9{^RSQ zdION5?B)AkviA6U^^ErxS@8<&t0`Ar!kvHm)lmK<_(}k)_>TSG{?SNDEo|Wn4+pr(IQ}L8(ogJvS^cZ~zxkFO_vYOF zFJ8Nptax(@K2-lSM?bL0)h}A0Dfb(%qVS#jUsit2XL=4=coXP6;C5p9G>-o3EY;e> ziOugLC1vehh4N1u-}M~uF}U`Rd2qMGSKEm(TIBEzuViVi)9$fPvBZxW{MC=A_qaz> z)JZ{rQwnWO*X>lrfti%sbZqk5^tsc&d2`vjfrhL2^*_VnkAEw3gN8V0h-FOA)I?l2 zP)0nAc+k*%<5TE==nvR6SWm+C-@2n9ZQKx=J^1iN6bX_b~S*i_jLn zFz`8ecb}>7KgMT63DBkiOu~iAp6CvtXX7qft8rdSA$Q6LA5lJ&vF|H#-}JI&9{7%H zQT|EfFVY6#D0%5i0fd~0y1*rnT}Eg7KOVX0H79o8@!Y7nej0j>AOvk!l7s!|rT`i&W|ASo;{YXOdK)*baR;rJLU{bFwM$$;6WXX_UL$2{TFVSdGaV zQs}=L9NS3q+TbR61g1um!Vq$%D*P9o&pie^rFOt$CcySiMYkuqxH646*hF1uU96u3o#Ao&D7HIJo^hW%FN42+ud+-1JHu+g8t# z8p>GyXVLtT*Khp*=Y4s}+BNeQ8KXfh$`oV24iJLXvmF|%S_iL~(EtV`la)}EC^k56 zOt-dXN;|9Dl^c|0NQD@5MBPP0%gA&jvfP%W8nEqL$rYeFY1|F6G6k}h4KlqjTB5|% zcr@vp$-~CjDcFQ$oHa&GQYqa{z=<(M=l&cYlX4_~ixGGoyfbFHNV#@rh0zSm&cM!& zRTP0?SB|q%uP3sOsIz3$&)Nu!Yim&#y{1w5Q`;fC40K8B6XG_6Wk_EL<1v)9X?&8V zyq23@w#>OdR4AXxTn!q9V503&4RviaGQD-PHiEJi{lUEw{`bH9mc>@c2A@oV|JC31 z?>y-BC$YBC{lPDSpZu3i=e&6Nk)SUEpj`dw18>-tf(8E3!&mpe=$6;eIr~d6yP3b_ z;Xpb!@4Ymg9sl{j?-p+wU+chYXFs_ArS;#S@GK~v2D}4c|I1E12=pWXn&lrq@cJ>O z{*7zE|Jwi3dIt*6BJ^Ie|MGAD;Qf}P+s!{7_}${yr;hyd{ukYHHJ!8nI4L$RxdiyP zbiX&o{V#iQ8*LUJ`14m(_e&kNu!Svr?s4sR{uGzI{(Ka^31#2U{JvN0e|dZtuHMFp zj~%$%^nZE(H9&#m6$f5h{M_XDd*Ary`(G9hAYK6Zj{*PZzMixHWy3E4Jr00o@T>!` zoB2?C#>ar~-v6>@5ruEMKbqmU-=6-h{{!!Wv^>xB;OBpj)uSuKUO2_N-~JWBfAF&` zmTMcwCl<4fX!x7Rr{e=m9b;+G}xQ0WRA{(9>;O{QnhpA`12Q`5=%5JpE)IG*O zO|cHf?V{lt{)O*j{xxr9J&w(U8@CgrfPmlnlbrnHUuWBJ8J89DMbF|#zvtI@-@**d z+8TpeRJ}Q>Y=vg&-njy7VG9%7Tj4*?bGC2a&aq?1?lC*SloH^6aR*4+$wRl9L${gw zm|0lG^FyP7U9BKi?9Rx}NJ44I#LV_AT=usO<;tzt9|dmNxSo;vlVMLi2efDS}$haDHt*}E_73LW=GkpXEmPDXVr zplD+X9b4EZq@uArf3M52nZ~dgQ*&HYD} ztwhZ%Me-ANdE7pE9F~qos-w}xQlzMoH+zLCiIlZz)@nL=?zIo}!s3M|Jh<&$xcPnX zM^apr@l3BVslgB)g2K1b-T5r9-LhBL{mKX*T=z!!8(OwVYWIL0JV}e_U=e5!Oxwaq z9^XE=9-TH%EzJhXj-s12EuPKy|S1UJ7Q2e-W|EM9oRYai&*$#a^u znzByMT45kkRH-ehqmiYfk(0-vJZ|z6*343*w-O!JBK4{@Shd#%sjUY~W@Xh{UN>5@ z=T=Q`VApGAeOVffJV}#jBenMGrm@$r#+{iA(QEs_Bw|i0s7IR-xJrEp#sTfz2A*s+ zb0or^HX8YEI_=bA`k9Z9>2hsXZh!&M8%1`7jyrqz1$JDJ#&Cx;rt4W07eziR<(ZTl zXGmEmKx|mKwdUwY=L!8wksc{&u6?vP4y8P$D;fJc+=Bg4%9UHgWq;c+vppkZ$ulRz z?u;x}OtpeEF!MvRunP5YbLepT_o?9BPa)-cxbDE~b{_&b@ZL8@?0-lFx_5O0$Y!3{ zp1gc&s=xzpIOinPZ^QBZgj~>4`O#&mMDyXhTraHu1&;5BxZ!*2+4jD^^0fZ+KH2)n z>O3y^^$R}bbKYyj8&5rQ;0@;-1D{CWvc31;y|%E0EqtNizl|qU*G?AEd!{<{%`u&;)eD8G*o{zf6@N+u+QWilz)Bt!ylaz{x@KM zFqQkvcyi-i&5^(6TSMS%z)gcsF5#c}Jyzz5iM4u@N8+F%{=~O2zhhe)8$fs2XP#=@ zHdAZ&X^i>f-#3i@o?LU&KW+Z|F83SnNryu`+ehF1d}jaRf3p2!2iSG{Kd|Q$f5Gl| z{tnxJgfR(b#kpj~?iFbbM949Ul|L zRlr%KXn{5+ILLSsH@>w_UxM<-YW}=y!|q31=e2*%obTuoE2u510G>7Z2*njqW_Ij} zxx(xliFiBR+eYjlYVY>Iz|oC24gATRwxJ@O!fB@adn~8BE3g@IfRrc!2q{W?;mLJ0 zI0^GEmGX+l@h!sm+NJ}s8;efP$-jxA{ITew7nE5JwsV`NgtCNTWA|#pVr6HwIT*~6 z#KH)7R;*>=a!zDDGgCv)&^N9M81+)>IBc3BtgVPR2Q$%R3vFOSCk9735}i!+ws+&& zzl1P*{)src?VaSiwwr7=L>|Z_fuHMW&Nk66`IN^;$Mlff!!UNqQWDg zk??x7o1y5engyeBL0-<#qRqKAbSpSkh+$)8C7vlE>zI(9P0>(QF`oRJNb#CH5WA3d z#{F$d{})rAajC({bR;LKT*kis7PS5E9=obGecV6eqrG6O&{5MW4E8E$$9hzkk-4A` z`}T^t?NDbTW+-&!umH_0#2|+#a^XCen&YEz(euk@c;dXE{IN)vjMYmmBge87iKuN( za09-|u0Q6{@zr?rKu1kSt{YQ^cQWW&ps2v7w>=0zjP10{fjs92TRF+-ac)Bzyq)C{C}Gc6c_B9{M`)ia?XL@S-1)K ziA@JXc6RFb&2^`}$Ln?-e%8z5n#?R&XCI&Sl!aOawv#dc*}cyewy=fICl0)}|5w0Y z?SJ|5`7rYh5S|Zu7}ED}_QRjC|2vO<#Ux9>+y$3TPE_{7{V#8xx9MWmY-=o<+5auK zoN?d}&$;71os+2l;P|hfjc1-zr(GE5`@9L#MrLLaebe`F0#Mzw!tvOW)EYl>(9eDs zbE8pW2iTL%>*;o$>2vD8n*MEUiDA=P?e=1uUGg{XvvFkOd^6GKZ``NVC=bA3FQS;3f{nNL{T|Xz+9v>Kv@N>V0-a~(n;<}ruTb9B`Ipdj} z@a!Mv#K-=eUDa|@;5`1JeBI+NLq|q&j(UETW`#*;?=5WMZt>{~|5=t@ z1-zmtins3Gz5C3gM~{9^m;gC|SC1v_opuFQ0vhJHFsMvX>ElooeWPHiDiSSv7k9%= zuU_-wZ+<*_;oqg~34#T+G4rA)$xOr4Omuc6JVANy1NA@czurq%)@-}HmmHfD^PD`F zXS>#5Rvr#TH=>!Z~b#S!J3?6KM`bSo&Ls(d`8YE` z63ciD%4_9&9P3;D+^gptrTe#*E}e@C3brS_|DbUicaX=aZk&SRw+-A}J7E2(1J}3g zvG#l|@`?4nRGK;r)&M_-@B&F7<&_`?3Bnr6pjM=%KFox#*{YLuen<8yzx4P~70d zcDkO)=R~n+FLb5tg{XRBI42jga=!~P zmuj_BMi4Q`OIOy-KkX0Xy$elv0&up*&!NOHiZ)^FJd>)nX2*XQYab7XUp?^oubg#R zqNa+LQ?`V)AyfmSGNo=@&!GySk-U0mnrY`YJ>e$of638(5H3j%9qaus8GPwfI|XnB z>aqP%Uk3c`Mmy<@)J2x0B;~LM73WP(Q25fjTx5Fo?a$8xcig9Q z2ubNGAHJ{8b59trsS=!gH?K))hLTU(l~+;!?|)+0&o)Qm9WSAyh~NF2?4$?X;vSzy z_u|;ytyiDIWOa}C`*g2$PxZXFL4T{c;Jt#t~jOHto_spmkaSe(dE@nV68VBW_jDLGe)81e^a5C6?8xZ?Yd$HzRrQl4kH#)?*uL|3q2HzUbwRu+lwikWlK zSpyc2-@@$L8tXZP4il5)eXJkr!40wdeer)KE7K9O~6@gI<*`d6qAc_ zG^h~#bT549ONQ~WmDf{tG&PfJZRjI=Nb{)EjjzP|j=Heb95#yDu18`}imVcIJ50A1 zX%uK|$~st$wf*vbbIngRe&x=a^$RO+C!3iQe239)2u^VyNnrsbEFKSel+P$VcjI4$ z{DM2<+TWva!Hg9q!R0khCcs$CQ<6J{ps|`8*EIXo^;qAyOW};Cqx{>A9-q=zB;g++ z98B_-IBNSXG{d+1$9LWwulcD=+b{1smZq_3h{}aCBC)jAjze?YE|yJE*-eeBl2EUk zW@M@;t*pb+Ev7swdR-WnaN>w@0bYQ)BQUeqgtO(Pg_OcFk9HA-DpZYdY`{4bv^w%N z^GfU=>U1T|r#>+0597YkfY&6if9UJri~hNn+O|sW{zOC3K&Td=J)c{6oP}k74 zX)1f&s4k>VKWh78db;W!QdMj5sT*H9ui)-jT3P;NrWFA8a@qlo1^Z8dhLtoctJwd| zx9qsP6oH#yEu}g#clTvN3NlzX|JUc^-oh5P@cF}m-|f9?|4RqoOz6EA^rZbSUc2t{bf^zq5OIa+=o->*aW*S78ceWkV4R$u+K9a9U1WX(N83GAI1~ONr zDwV2RRd+h~414eO`Teo?x%XD35=aONdOvV-Pwlhz-fOSD_V7H<=lMLFcnExn#y`NV zJTfQ1rD>Wz6?o61>2I9^P&C)X!U`lyrk4nJpla60T?w!&1q7IbTkp^UZVUl|39Oya!%7@omT$I8VDv=@*^wx&xO8o5;ChwbAnB~e0z#d4|F&H0@US3iE(0wc)y*q|hN|Lu~t{4gFv4ifl5?WV2 zF3{d;FLmX_CND(VSvzlbo$}ErK#Ji#vG$m>I-qU!99TzV+>S5{cCqpdz~}wP0Eo&a z+Q=x2RyxKZ)((cj5c*57vRv27%h&xYqS5AfjIIwFHbDt78ciob`y91vHCQu2?A~H_ zY!9?&V4R8A5?L38>6#57K~jk%5lMjKZy)&5AJ5dDyAs0Hpq(422A(iN8l8kjO~EVR zj}VK`hAl4{`Tk$e>X{U53kBQh5M_O+#-=K2KU^HZV96}3h;=!-hmKe)`MRdb4G_=d zZEZvHe9%+&zy9Ftwf}S9V$<(KNLL^|sMOyC`#De7a!iB)6XV*V;=dJ?&=3(0d zwH`on719~Y`R)JKYg&lyO`5=ZzJt7gwHqg!RQ*kCViR8!_P?(Dc?hpTyyM#c8D4*; zHrM`k=WqAF-UFaRl3xkj0!yEVxw=6}^O~;zh43iWvF}ED3M9|{A`j_N;lgwInTcjk z63{j8Wq9{ds#Bu>ry&G%(;b@zPkuhpd5{3 zIU2`!-yySn2MUX(UzuS6$q3RWC%U38WLE&?D7yR1mOuVnDK6e)`=d7Zo@yqn84C(F zp)RnVMd_&y=@T`3{#3H>XDiC8b`U6OBm*V4GiY~2F(t-bshgnL1ZQ28_1KxFoIgxR z$FP{-&?vxpA|6*;ELtnA(tMu?&ee2%^o82t^{f)98tcwD zMz483B9L5KbFt%KRm3G(<3_)2VhkeaO4_QBv;lnN&*PfmlM1CZL%M!}x9enw%4-GL zE3-NpaQk4y4WZ9XNx|nv%Y1Tm%ndPeOaA~%hd%3g*JttlccS58hj>34EZ~K)iKUqu zn)b3aJcbsJnBt^KM;1gXnHVctyHZ{F-Ce&57{2FLDE`FwPpJ)W)gTC0MB^wVU5%30 zz@D#n`vY@2^5hlb=lTv&BuPT3iQUboSr$e7T;E5YyyEr;=FFb2N6Bj>UF|4{M!1p) zHKpDHFVuZ0{)FLsZuP4`7k+n_)~=KoE2`!+rX#yJX)PYHhR1Mw*`6AjSlSC?Yp_6w z_oLxq`~EwLcYT(nL!b36{R7+(BcEIy^SRM7Hzfr(gg&-d*WGW3AZ91u9yS& znj^=^Lr&Um5!bt>FLvI4p>|CMf&~gfiwRE0aQ-l1XPTm{S6{2M3F;g%Aaob3DAO0(xrIiydF(o>_9P3{|~R7Y5I7#W*;ZGTj8@g9HtxpMcJEy_`J z(cG&lK+&XyNk(W`K)*F8ry1PEG{|Ck|2jET5c>qyI{X_O3r@{Uo z9KDd&-SvU}uaDQPFReb)?BkhhrS~>s+c$n)J;)w%^p5qk0;_)Tgzz9Snf>2zV-NeW zji60Z0v?0%TbtO#CjN=wcn8u>%*#&~`kP??s}Jr3I(7TvUI2dgX$P?Ddrs1R)fcs| zN3)LOt<9Gw?SK8j*$4eDeNiO~zYy}2Z=8J3a`@N(iG}vM8vcWKOZ`ihtbNpcNSnV| zg0isow_X-Dd|zMwu%Gly?ZbmUYrmh;{tVkn*Y~-xKc}yAru8|czZ>^|`mwC{fh?eO zavZ1kKRLtx!$WRMSy)RZJ>xl%P%lHj{AT+7C0tf@eCMnkTnubWMVmmI5qa7rhqX7> z2AgF7zk2c5p1X6;J@@3?+}!Y?CfpZc{7*1(0vvfLVZd$Mw$bbL&H|qLX!{!gZZ1#i z=JKQ#P9CxP$EeHAfi<>T13Q*x5bFqcV}%ln=xi$Ek{?a^v$Ic#;xmZPt%b}dFX@p+ z44|QF1Cq`$daAQ67x>-ZBl<_j3XY^%AhSp!kVs6+o)J|Gg-BGevz=ns#Y*;`qiLm1 zhmnC`*d#^=tzVdv*z(2?r~REM&^=tcwb#`&073LeX89QK0BWt)23`@+pn_4OOBMtL z#A17$`Y>AP11B-VI+H-iv7s1f%4oYu>Idfa*RRh?A*aGgGqBMjsy=mVA=`vuJL6CX zZpx!?PYd7M#rMtOgLC*`D16hgokK8E>Uz9~@rk?@~^S85}(3F(Jgm%j1md`%>I zjdb=a;;wslhR(|dTD^Ihs*I`>IOS7Duim_zbY3=K*S$N@*{^`)HT5K=+IckzpA#So#YQ_n z5u{>5r1yq%Y?4lW?rWucIo2Wf`o|$~vY9*eTq^1*h=fKKgR17<2i0?t2VnUa^hbuE zdd{+TMfwrU`-g2;cOw8E8V>~NFfy&w$=-9su8ZYtr=o%tB2+Ex8Nsw5sju=Rt_qp7p0j95gP!UZm) zHHZ*P(;7HxY{sC`2=$M#aPo*hS02~r%Ht1hlqT&){Li0Si|n5f)pgB{;_KEH9r?ZY zLh}NfUH1K_G=J?aFT?BwDpOf#O(+5ftQi`Ulq){nH< zbJZJo%qg_-Wb7HD!jU)K2+h4su@*25;Yap=|H`vYS?^n~Y3+Yq^@h51YK=#;4qkX8Faia<=fCXd zytRA#{vRB@5QU$t+kI({$Pm~yiS>NucFKY^Mf^1nz(!AiPy2HEzfWK9OyAGcW@A}^ z(>)K9l0Bz?)`)edw?A#W54+#fS3JZ1&a{t*I=(ZGRnylqwSA~%Yrpxy-yf|oC^MCoEerop-e&Mfix~Eg;T_egA z)3sVtP%Vj3O9Z2t)P%O^w3rQnz4N!TGA!sPI7@Kub(+tEF8IlUiH~-Jk@Ilvf}jno zy5N3CI%+Z1tqAFY8LrB4MvMgG$_i0#Q#0Jhm^dB$GT_JuR(#Qg^T1-W>9s0qt~0}T zL9*2VH({%)75j}z0#X~)u36#Z6pB_Lj*KdZ1un)=L5n(++%d`;lW7?6ZC%`taOvQf z%FmzhInK;ki$VKr0)nm4TPrc$+$o1akrUQzglr4YLQbMngtjEiytJ*|uUw7C%74)I z|4^A$wEbO39a|yP=6Pi+X_QxgCdU&t0xorw67QStl#AbW&Qr+Z?=E+P)LMu^Bn3Vn_EzD@ejFwHZ3Nu4P-z+Y| z@#C;sx!+24dpa`I1r|=fW$b_T&n5&tuYOY~{`&OaPeIwgo@D0RKv(R4^}*fOzG>f) zYv1|9#s1fQ?|+B(8&LA{{jZCU$MIG|xV$m`!R7y&lobTvwjX>Cm;LT@ad`;VV#4EV=`+Tfcx z{*G%->F?qH^)B|j{$F9{VCIecUmrh@U4kw}+zEUhbIHRV^CLkye>3@>0+gXWZ`}X7 z@;2ha|G4&d=DsXqU7Og%CLViS`$zj8*#Cn|uOv)g2jRuEx81S-b=BV>4&m@D#1&1` z0oCA}u6^eZuP0gE`r6;;(%;*U!b{0|AKd@C`1jzukj@950NO#?y9)T$N4w6ozcY9L z{vWJq@ytzCFxX$^!CA~ z@xO_O#7BUav|6qA&CShC&(F_e`_UNx6P%I`Fh4)f?Ck7D;m**M zcn8FVB0Srzne({_u`(!YiSh*1w^NY?(P@b=g@@A$?ux7nOYQAjby+sW<$W|~ zL?Ts9(D@8b)kluHuTDT6(4tF!o{>@G(hL(y1Vh2JGD+eb+8MG2eGH7r0)ZAX} zol4nPp?0jT$*xhSc9*EzhN&Lho8z0)ii0l2@e}6o=dFdi%)$abHa2BpW=5tnb{O?x z@q`(#Sc*+ZH9AOk_kt`QetW09|E(3pCvG5)|G@U2IeLIi6P*u1v4rMngPtxW-{;nj zZ%(dy!#O^9-O$HAw?Y+770t2Ft@z+|!*JCb&QWW}H>2eHKu@1MIfG(ZGs5e~gQEww z|BN{P1By@FP~QL6Djt4&$K4AuNyf1utw%FnF^eaxQ6DiZhJ632%*jJ&wQz=t(dqsPzN$PWAW!QYc%WB*X(dwgemB> zPs`;ETDfzvI{KEDnN29i z6-B7;QIrHCQ zZi7a7y0!C#Ys=r*`xxr~Fp9SVdr){$ZT$Nv9{tR{5WcT5{zp*#A)}=yT>CrSkDs#Mb#IE-zA}7a^^2?({EI2SR z#;?4Dbhga~ZQ>?nZo}WTG`e+6eEyvBw^_dt&YI}mZ2Vmt)}0jfIrZZ;eclJ}e?1j& zeS1EoAE$2Dr|ffMe@e-PB)OCW0;ZRDjrvWu?mx9s5|XWdn=bIy7ExBQ+R-xrgkjGI_|n& z+jQckbW;uu)+3$X;ORWQol%|G4o8g7aj6(YQsppAKm~MDaNCT>f@KJa2~#4=;Nm9= z-tAguJUb4q8k?-%UG0P1YQipeFPqh6%xkn1skYXV?v+Hy>{dolB9lNDlYz@w)Vn}a zyH`1Hyy%ssW!>4q-5mEKiVX{3szN&ge#LJD7heTGBMjC%mf@W z7)oeh&rU&-ph9x2qFTbU7iQ_y@27n5>J>fyO&`~;Z|_)nV(VKFdBcWFuwxVowdVhm zAcUCDbamPHyi*^3&F9f~9tYr_KaRfo_b-Xr^f!p`?Vu-sh_Y+-`g+U^*o?vNkjH0h~pIfNoho*edG4asc`Pua4ou0XlD{P zEh?kYQsgq^?q#zOb_s7)U7&Y^kK2{;@il4si=SA}r7(gptPNYnkYTHUeo@cGDklc9 z?2;qKQ`AqYs?O(MSHb;a=KX`)$#uO2nYt)t%VM8%U8c6%?X99aZ6}$mfXL)=TZ%nJ zW)$eu&+{~*G>EJfC|AeY{qi!d+%t!=Cs{m+4fhHQHHk7&s7ZbR#7Rfr$Y|;I>M743 zCpUk329HctL@8iL7>-S`YUL|-7@EZZ{SHl4yUw`0E|c}c`@i8gGv>bQ99UYo_V@Q4f5`1z_om2oZ+a8(rv0xuxE*G; zF#ksfPKlpHA6`EBh5EONO>E*T6V3hW zr+}Z@|LTJ~Nw%Lu=pW&Co_6R|kd8DzxLRBv z#6!fZAN2R(zJD?JLhT=_ACGpOGp+wv_xX{u|3c#^fMEf{G4U^dm2G(oJVHqVH{Zz} zKvh?}k!w8woEmPISAW6Kdi3TdkJ4Jdy2XO8jQ|Nb#aA49x^rt}{h?GD+B zO_>034ulub+I5TnJJ9R93iPEbdHm4yGVawL5Kgo^sbi&LQ;EG16G?r zOw2f~jqx-PSK5$oQJ9_cTz6KpN0%9<5Zcg->jzUcJL`bT0^b!XlP_zu2>Xr{&UWkw zY~5~;5^*fG<|^FnK#`&0D7dw3I^eQpLJ*-cNr0-C#K*s@o$P((z{j`!U7UGQ8Pyug z{HrE!!PM3MYFfK63QxeACY#y9bN=uxWHUDcP%J%>(EWB4UWIf)O{k+TUB{YnEbO82 zp9YWqcUXG=N3{3VAp~6*t?#pPBku_Ylha(ZnNO#o~1ABgCm8Fy|n$@E! zj@%y)76W~L7VZksQw4NtClX9fRD)rt9~!emnA<(8Fgu6yEppm+=mhKp#wp|pYN7%} zq+E8a(BZ!?J^c%*lWn_#bPiH)tpH;4d=Z?)zK=Lsgk}ztQ$k7%9xMf)M0 z1rKWfsh_U+)KA~@$olofK5)k)S?AH>+BZFI2;BY!8*X9~oA|20wQt&Ylt=M$`$+F? zk7k`~e|N{dkF;N302#m=-_Ec9*B|2FHne|Tem?2^U$OhYzKP|JeU^fMgy+d7zBCAU z%H^a#@o$(qYX@OCtlw>tfd2h&@CUnQ>GcP!7FDhM-)a+A`wzRxO>AOV&Kgnx$NEN<3FoaqTBWcufNaH1GijLCmFhi$xCHJRcdR1Fi6I%= z-}u2!c+(39Jp1Qvj>*j5fu0QP5)iCOdA{Z?e!|sJ0z4yz^rQa%yKhRS&p+XnH`ICC zgqrJ{AZMxMo+$&_jt~dmjdeJ@r80T`f4?hUF6XjMCap_eK-qbZjt+PF)Ba zBcE#?j0{K&BmvS4(zG5%1EGQ}HuQtqa#DznqhY;^Vz8pt?0wkth`C0tV4@X~TRKP1 z_Snz3Jv{z}qqz8z9H*kF%O{Xzw%QO2REMXW*9`K&kLWgo(<+xix z|1QUIob74Sb~(M1cUNZ7eFfNe)iE5OREoTX+<3Ee_2MyBecBFD;&kSm+Yq6(4e zi#u`tZ^f~{7>021N0~k^qLwVa2{cpF@hu$7sE`T>(gh~`>lnJG>eu3jw7x+K|2jx} zYlfN>97|N|2pD8}3H*-W(eHWO!$U>DqgxND~>4&=+1!U^s%aSJC!PW=)+XvMrDY z=ti7mFzSfd!D=IAP&JumnS@H~@&CD~?)qR$WP2=~Bgofv?WwO8dmenBi@^$jM?;0# zSbId8@Vv8#Le*+#OK=}d3cFTeYE+oB z6R~}#Nap0wBea5CC8Fv;-otq+708tlp_cY5ix{rBCRWRLZzH5n4d@v(YKo?29IWvW zn|ny(kU0kayHNFS=EmQOe)R`Ccx+1QYaxp^BP%Xpk5C03%C3e|v0_#Rq*Y4Z3S^2+ z($FS0v58G=ViOOKopbeL=vV%Pli&L?{>$YT^8c0jj$ZfTWf1&sY@T@P`>Wjx?X8c3r z00>QHa5q5GZZTf$JBJLYJ>R0d6 z(|_utCchEiprKVp=lEa zFz$nbq{5^lqb{_1+LolgtPIj9ayTt0!AWD#L^c>Zr$zMz>qX8Vk|ea&ysqpQ0--dF z$2cEha+CsD0aP`Wctjnm#)N8D8sGk7X6e9koZERfBu9YDpq9sLsMk5>B9or0*&P`$ zB2>5tQd!j-Q^!gp&PynVBIyKmtEiFiU{2b7A$zki!_R-#o#jd^GeTKlq(~7R73%)C zjkYUjN|3j}L&LE}m`PyQG{jjLB(SxF-p~w3l3Q{#B(8HS28}#iS}A0Xv3+)no!^`2 zTP|M-Z~Kdn#4XPU=OYuo6|@z}5@{et$GU(Y(q7QFLwh1L_T+jQ5bY3bf>NU<_uMBT zz758I6qc_02;chh(r>$E%6Xp3<494#xV9S=YzNoeca?H`WZFYhmG!YjATGm+2jJKu zw#nOp3xrw$3P*+zC*pZoCbb-t7m=xDb3rFz?asi7s2v=bMjisb{NYW`y#b$2}xh36XftnFE*Ng0{2KWZ|ABbXcI z;-h@(SMTFhe;8=*%JI0W>jj2LSz5)ai312l?X_8z#G+Zf%N#zyc)9PS-BOnU8yzE? z*u*9_v58GQ6uR?GlsG3m{(JbfoBj{GuDp;RXsF_hMwrH!^m=C9I+}F6^?$BCTh*l9 zt<}9b)B2|@J8fGJxzC4yn;KoG_2bk>;Y0qgVPADWn%>i7G}e^)GYJEpad{)ItTVLR za7=4d{L|MzZCoDo?ta=aoic7|Qvcj;p^x0ir>=e-zq@0Gu+(QPF${rGSuh&4sLJED z17H)I_-aQAkTrHf6h4}iOsy>H++)k`?3xam-HWSeXO%+Bb~%J%MYOsmo0hB8l!z=q zo}^s;v!mGmzitohtsl0-;}B;z`rQT->vHjHHn~xd{Y;TPU$d9orR?eV#N*c~PMw!2 zmXVbrFb>h7E!rKk+zC{eyb_9z{T^Y<1%!R8VfWGF)_8;y>43(rz}@<$AbahSU%zQ+ zO&CpQc==y%skNI9N+GC)Rz`66Fzo4>*(i0k;?lJmd{Kg<=@~iNt=)k=SEl-_XZQW> zD+iQhM<$d4)jh+K1m~h~KJDo`NMEiRcTFM?l2g%Yp^)K~gfM7BilRnH<4A9Yv~vy@ zj-$5Rb*KBQ1Kr<>+!O2tLr(3N*bQ7jsvYXm8I?>|Hk|;S4yZ|93k~BwDIrAcCT)X& zBTzIs5h>WEQA_00Id8pnn(MxKxqR{O+>myjSV`^Dgja#)8Zoz;@!)0z#CgC(2rOw7 zbm|DcYp+2qUgLQYud#=3E(bT>m|yo3C2zfTntUpQag@t?&5ByRB?CfTD$zkm5t6d* z`y}UES$)i%!1RiF;;5?uDaX9Z-Hg3JT~%QWY?av?qs|&ZFYS8!c^4|(dk%ydC~`-& zLnvBMwq+%vlR?%JWm*qh0=P2eYCWsk)6-HoA9QX_si;{CwZI_=jyRSF^jFXB`;y$Ax4{iv`3|s6*x6YBczLB<)}G)7_E#5c?%_jHQC$dVtd5%zG+8ju7Oo*EsS%V z>#}j%yIL*SxjnGu0%Foby$D$lCwC z(ee;hk7{u2zIY%+9qmG1L3Rq~XA_&)#3nYei8JG#`YnU0oT7@fpYYxM{O|rGH@xaa z{A#a5Cp6)%4XXcVdagX&v*z^h(-&I*k#7G>Y5RrN{{msOFSy@_TlPrDLBiRcJzNtqm1aMdM*t|>AQCMlwO=cF9`6NgVKa`} zYwp5$@6R1m|GrYaRvMEniHa&xNu;Ss+CuHOz7n~{>vvYmVv)}DwYH8lb()urS~)`!3#yKbS0K;mIh z{SnpR8Xf$DPiH<5dBK}|&ZhF(i@P2tc2mo(=A6W)&&E|is~ssMxHpDTW|)9(0lMU{!rf%X>2rvpVQmB%^Hf53A%yL?_7HBkCJY3r zrd&2t>|<2L_2JXk-0y>blGEFp5{pP7*RG1nR4d3UD2#!Ti93N+^sBxKk+FYd*aZ&i>8#0Y*(^F zkh-;@ONELOr$dEqK^(PFrxLqYt-(A~M@qKk=vWW0R=5So>w@PSDOU|AKpU^uw3yGbxpzKPaWp)JEg6QY4)RjX^bW=Ojm1CVy z*Tplq09Pmk7u2{)82J`raW>ClYCoFZXjlFC0 zT?iLZd>U7Ou4?t2n!o8z^79h5y==;%mDG%}=ujG0&GtI=gmz)5RL{CHwFfOZMl_4r zF&0@c$EWNv6P+GmR|f`n!f271c84pnZB()DoP!CYihS4>GiSk$y<+P$uBLEoqfT2W z!&Qc|uE=L`ISnxhR2GRK$pVAB#_WB~xa!|JC$+AUbdhUT#Cj~gW=9+_z6TbT0hpQ! zgj9HBvoSJb&C|FYf!Q>g7E z0EA}^RbmdfPj7kb9kW8C-8ebBwo^K#NoB^X!EqVdX`|4eG_|^est-IhF#g;32R#7`BwWzAN|DQw^PU@jZ5rQR8yeJF2_&} znsQ?$kVo2GXs7Hf@MQs|F>q4R2{>up_4vZW1zCcX}2STwjCN1wk$>)(TjwqAs;s|xJf-W-2lWFbx8^L_6 zI%No!TargO6oRA`oX$o%m~j+k3{!E zq}xosFK9Resmz>UCjjPT3=}}tM(H%p+b|ANS^G7d)!YtMjo~ip><)uND`ocbp6-7C za@g~=H`V2f>VaQo)7iUcglX7iVbDC9O`0swL8{)arpU34L6f0u@+AUE5MZ^>)jHT{4(ixk@!WsloWYFryaW~`GO2K@@Td0ld zxPkfdXy(1Zh4274D+XOuM(r#x?Nqe8KyHx)#woZZ+=F}zR8umk$fC$oIZ2=@O6_>j zC?5S-54E2r>G`&%YfJp}S_n-tM9l(;$R9P;M>YQ3LiK^C1}UvC{SrtG8k%Am;wt3h zNLAK8lW|0&MSJxa$Ci%yz*M0s5wm5zkNEIZ%}s1#6Pwt?CQiWsVg_ZqU@*)fiMWUq z(G0s8?dZC04@~^boA^pZ2@r7-a9L3XQH8)LR`e^ennlK0WOWq^)^v!^4F5~BApe;` z`j>T?)>QzStlywIG31FvuI{7o!ui{dij=)mCzobRswmfH2?;c85re29wTI-y8HKYrk^!tc=$H*9iPIJvd?o zqmIN=6?#{eN3OYBH@#-a)gO$tTAy)5asapF)~uCa`biy@S1v*pNfSI5t==>g(_*ws z#1fROjX1$DgWb!6imn-C&_$ZbaK9z`DGUTzfNsllrbK8-l|(6#(iq%z?fFK$z0U1d zsI4{^(Z_F%MKiY$(G8uuQItP*>>Fj5wUmuOR9*i-1>obiM$UU)gjN7SY+~C<0wKrA z7^uY9W-KWMCoRzd#sjk&&>)4Q)1udrW=1vztYSJ_aFz%4_n9REQFUU1sk7cg3au%~ z+IGjN6{K=TRy*Jpgr3xyvC~<(XbCqJGIAgnl>Mkrzc!XfuIVWBu0(pOtxl7f64$N^ zvxMTOC>CyG`dLMF_wVO~3_^^IvBox4h4K>T5n2VbE1(2r$SK+6!ro}XKhk+$|JxE2 zHPM4zB;n#=$LB?y@7^kA_Tn%LZ9$%*QAZ9PxzmF%RXZhur7Yr*C8#PH9~%3%H>Tct z#S>8SB3l=2NXn@=B^_j~j3~nQ*wy>-eV^js3kp5`!#xzCk|`VdzeZNMh*>orLmZme zH=~nqVi6C`kyfS82FGqR+d$QZarhT@@885GHnE9KJW2$hfD%JKrW&^?ixFiehS9W0 zNRvncn`r=F1u)>UQTs0|#vx;rL`JQ^xF0EsMrml%!r#O{7t{`bMh#OURA! zr@y@FX%0)%UDIug{uFcsX^E<#JzRx$&&qOH(L~{VYpM(WPZrV(7h|#fQHRdo3-%bb z8=^%e9Acf`t0sY5mQvu^gw~Cm^G)~qgS!v&oR1_*x1}nBT-G{#YNaN0TUvU=dfCctqXP*k!GNr z5@m!@X@xS-858pa4HJjnRheKMkNxOT@A;!!M7TGg?N*(eFp)+yTp*HXdF~~j)k~Id zDR2GFL2}Mdbd@^BmQ7)ZQgADf&&0a&T@;0_l}gULs9VBxg;#p8(5royX>+_~^S6aG z(-Jauu~t4i#VN;rOX^2?JciaNDqpQN0op=tLn%3} z=SJ-@YQ`(0owh=Jh~^Xx}U1Ek5?6M-w3SuF8nPv`bWtiNjKgWh9GGT4-cvOV;WVtQKlJ zcQ;x0U2v-GDi#Pe)M8wnV?Xw6kW?0AUrhwd&SX5Lw4b!m;X;r zx;14ys8BRn0FTXZ)vkuMaOGGq5ON<4511o|=`XLk-^-OUAX)e0Z$8sEv58G=ViS)D zk##3P3b6;2U5de&v>nJtk)$jL>81nVD;g6CpaR_PQK?Tk%&FRA#wipFjkNSbz9?M( zC+Isj86IDixc*Q6seABGiaJo}^_X8&twfgz&olBp{U_I|*mR|!99E!o*Z!H!Wub-wQ;3cA}4FO2!N z&*|AWyx+I}hgB~9?4t8bONji1i-o&n(M26!<8-S5-p56iK@!xfuklbrPf6dw~8{_X#q(o$5n_q zA~hkC$y8lGtFZ5y%EkY>(;>OZ_zJAH6@r=*Av6==xl;R+_Z|J!+tZytR>b44j>@-) zECE%fFfKu~L~Ew5CNMAz5aU#?3ac|VDp5Pgsn%5S$pB(qB5ySkGpsU``#CC7k>*l+ z1}8l`&wyMWN)#3eCTrXj1tJk@Cm}{mxjYV|Lk0i$3kUqnw67(XY zZME`TQ}B)ueA;bOMw*27t)AhTB3we!xrnK~@A6aL_%}NEL-*^)|7@t=_+Tft&dx}u zf6qH4rHa6)v z#e-Z7GC9;$1k{GL+pS~(f5*P#+k6~&!CYw#*tX+8PC31TXO{dUGMcEcv7t&dwt_X;B6fua< zPAH11y6vY2;n_EIW4`TaBD^q&-OWjlj)Z6h1$)v-PcAsPMN}V9arDmeeJFByuClVr zfNYahrdl!8vS1X+3o|V6C=$v71`8T49f|i8BhB~Z86c~xSvHP`FX0J00C6y62j& zUGOJA|BuntO>E*ZMS9A=nwRbrGzK4ZbgM1)lF>e~3hiUCrETJrDHEZQ?RFv84|8+Dchcs z#7ammY>#C^+s?4E+)jq3Kai?{RE+Id;t-qYzksARP#vL+up*SFg1mODq=I(G?rxE? zDY;6-2-Q(-a2`ZP{p2eJRkW)J z6mdP%O;x8?xfR=Rc$Lw4WZN&~fx zqH!XJj%alPoyrs$UahQQ5V9zGrWlKH36<+&z6y=2s;b8;05OOng(??G2lYCRy|zS0 zjNA1X1w_`A{Ub>z7fKCo8Qt`Iuxs1*UkS;J1dnUZ_aycm8jsVh#OiP8-+LE8IRDM9 zwRt%#@anQrA5D$yd~6n@S;?fruz1`n#}4{HyVRf)+^H(EX3kEuFV@939%A0FGh#F$ ziuA#qAYE2jdq$~4I}x+fkWLBO$f+3Raxo>ct@Wp-Qv_N;kOjvUEPQ?xzVrR&ws%}1 zC9lMK)>&oSG8AbPv(1mt&D@ChcvbC zItWh$J-^0YGWhnVB45H%&fu7w!J zKv5rUY&D{QLJo2kOdjnd6=6zBdbN&xMNpJtp!N}@RxJ&mCZrN!So-9f2g%N#FMa5J zt@!H;7dz=b9VM>_=xc#J(!`R7M(8b=I(Vz-1;d@xQ|}@NZK*lqPftT`ohP;{6`O{_qdhn=zmJp`<4!Ao?4cuD$<%)?hz0bsBDEaI_=eTkWL0w zX<~pPN>#Kg*P?%6)SUD-#JuiZN*&d2WjOS3){~qBk0q5rLamLE019%nyn5#-+57s! z<^trufG56GKHJ5udSF*f#%c=*X=%T)`$=eor0?HMj38k^Mt3<^jqOoa*)%K{b4 z_1qgqjwOX|qjKMPb`t2HII+$!pLN;-Hu|$C<7irQSBx5>wl8G9waD zDm-clx1_u+XVai|9rbsK9D~L@@ zm^E4n6?avAcZNgG8g#{Q8C=Stw7RZq2NuhMHl&$VrHW;6pr~RnY<*rQ%wDq0=*Y*M z&3zDbc@(>mP;{_kT^hc23dGRFP9vO$!YjykexAEO{lV~#$FKUEZkurxppa_%djfe& zbbF>6)pqmrP_dOq%3ad-02ORIbb!aLj;)?_M>1l?xEG0O9e@n$Dg+xwX5;q_hMH>n zf@6e}ExerPDwkJDkK74+%c#~xfs?H|2pXu<6XJ3$e~=^*brX+{r$FW5;k(_r@Na|k zG{lvv!_KaaK}q-=JA8}7)sa%W1tpF?3;p|!LPF-caW+#Z$5K<9yxlC%ay+j0|RuFk6D?5+pCe`a00#jFQmUYBE(6K}|lKWrUA`-$^Y03V@KlSmu=$J8Msr zg2AD#4xdO6%^u)YkX%kW^#OK2@BJPe`BXKy`9wJWq7~BbPu%&2w$s^+B!v(wD6CO5 zrDYKyMVhhFwqqz!S@+5rs+~{+#3CYMrm&|FDNZcspez+3!%hjK#?}>5W|IX$5^$1) z(Sf1Pesxh6w@o{2eE|;NA~?rQ8bqjPY^d#S-wg3@86Cd69*g5C*;yitA`D#5p#lQd zPueESShjTK zYUZu2T%3K5*nS1hcZiwXArHZ$mY}ED?V+?K#!0g^$)OJ7hj%=2HQxQ{Hu=tHpzsRd zywF@@(ZtX&f?|wO5FFMj0UQB;Q03ysG<(S)F5WcFC=y~(xeTsF9>?~039*c`fr$kk zSJtQ$qh&K#g-_@>I31T+Zw1c=YC8BW%Y>EJGViTL##3nYeiA`+cpF3&|06j?e zo?t=%pRDW?EjT;L!tQ=V$L7uME#SOXe{YR2nJGFjnt_ZMqU1p-<%nJ<;l$6S{Pymn z{^8MwKu<#KZvuV+J4PnLd>d5Y>Ok|=D7~4^Irr#0`CL49_eklUjL=G;h_a)d1@hU* zbY+h#Nc*Uri#X$$@&(;e}(~qY>%OX($UkFr)?a3agN;F^VHO>zcHzXzvQ~z}quVU%sO8{NFpwJ{iIV zpiX11l?tRrIP!D|-$6KkAuj&L`!xH~)j0n?NM{q$ZXhL6)oJy{fw7HKO9^1PMO}R@^oXf;%Ri&ChRq64ZBiKWbrtvV52VT{VToUM2I_|ahT9PDR_lVT`EwB zK$!TZRGYvFK~Dhh16@JB{jWp%tPjPh8*WbW^A`Q4Us~boekZ51HzAt|4lTu2Vh9S3 zxR9taoMcF`uKt<1E`u0Qpf>JJ1UjHjtyxhb8&T9YZjcp0N+l#aRV}no_9NwDp&c(> zjf=mL#Bly|O!yAa)9Z2wQ1jMFn|}--UWb?d{*KwpSA5UgGg>7`$!~8+^*Tiiu$j;6w2ZY30Sv6FuG(UFKfi~o`D4!Ko7H||ID6|4)tUSEC(0Af$bk2n+eJSYb zhL%t#g4Bg0fyOgb7tO>t+Wru(KBV8?eUuYFmn!e1^j9j6OOu3%Y(|ACR_tuWWGmLH zvB##Ihhy`0KeEuvbbDIGv@$ztC5Oh*hP1&!^36X)eEV;03N~$G6Pwt?CLWA${-K92 z1GkAyY+@5%Em*4-1``(W#2BytwhU00E+%W6{zwd0>?}t~ z8!AVF64J`dzPzO$`TzCHS0B1Dboaf}4(AD;g4DcIKt0hilm!|NM7zQ>W07Vi+bbu*Qd?UN-^b$zrCXuY;dD$H zZGjV=k_o&n0=SlnUPlWjxdNs(3;W>PRmLQu8AoqP+krOVp@~B~DI`rt#_bRXqZpEb zViux8H;|p%N}zB)cYCb*?}PT^u%B03yh>55AS9~I=$DFQ#MBQA9H05&>aU+R2v@zQ zO_=Eba#lt{tnJmJmd|$(MCur)8+AeV5IrV2;q`C>l|>K^LY3B)2+|P9v$|+Qxl(cR zlVhFpBZYgw(xJKPd$*sD)2CrQ$M9@m@0u4yOl&M~OfHcaU|(;?cS`-g*3tib7lV#* zi*WBd|H0?|=VPXKr%1j5@jOF^HL`Xi9=KktbDQC15UwKRPeFVCuJZ8X#N&4}bN0OY z-~+#&vGwUK@=l5pGcHUStvX9xB*BgrrR%dCz_h{b^{Yhnkx;qzKLpmsNLih*;1~i< zgG}(~#5jKD>xYgXZ`qH(S|qOly;N&4=2+p7))uz`J}SoV8>e%(Ukb$5xh)b*7(|Kz z3`P-`kPjna*@}ZYR^LXXZLK)QyJE@hB2EJxQ>Sd4*8MZgXKzgVDeFWLrh~Mn%ysD? z^_Esw?Aa@ya~VwU5mPu&ihqe@eu6#??bN>PN7D_~k8P<%T~JNutfr9$5aAMvIGpMcFF|zR*Rz0Ck@%-(7y&v-zylbwxCSk{pP6lcJ#9%7RvS%n% zuTbTuAZ-`4q?iL4bv;cZEn?jt#obspyW*1sZYY-L7iMN=MmOAW!|)Anc*A4f*ME#U zxV8hezbC+2t?YEevI*iDKIP>52H(+_v#;L|ya;&DLo{iKVQVSFzBi6*f2hBIzyMT*UO-0T@yjC0UVl z#P*$%4oX@)Z5vWBW5L-!y<92DYcD>jmZ1DFBO-mj7vcwTXW$96x^iO!tI;G1$I+`#%bg^4H(< zp4MEEe{B-VR|WG7r0qDiBy!;ll-4hJEEpX!x&!+&j>$(?)cNrDedDt?uSwQZ048Wu zxln8b%BPJ60Uu)MJfg=BM`Ww3ux;5+0*W1!MLS=$;*va0?F5mxOhTj>nY5S3g|`%8 z`htaOaNP!QRfR!S?9;ZWid>)>E>xV;f*>e0*hWz`#>@u}CC*+_i z5~3ZdNNK{r^;iT{%giOXF}P}0J-9*&3FM&`uWL1o^f-<#9w@`1Ul{B1>necq=(S0? z`04HLox9iSJ~a@Y3%c5{&-DYZk-K#S+g9SJ1VAFnzSsD#h~+y}9Q}k2{6qjvs{ z78gHJ_V2x~8r`{&PCs)6z_&a<@y`F4)83Id(iz14Ytld{gv5B!7*AQPQ*dQ0*)W_c=s{7s-lD)_IwU_p*JAZ#nrxQYVE|7PE)Di?@ z2#`u4U?&a)8|oxzj8s{Q(J_w9c(n@ULL?bQ+B4BUX@A3a#qc5U2VWyUUpH`nvYL+tBBe4onE-*WgvxA4igjQzDg-lesrMGOIf zw?1c@?&C*#-y2To$=`lGd%orY($+0@cnR=)qqgew@?^uga-Gva4qS-Y3*m``-Y1#5 z?33!A|FO7m+a0>$myYZ5-><5#xo)8M{85m%iosH#YK0iL1Y$P?r6LJ|M6QF2jr?Gg zLM6wD2zDUW+80`>7!P7xosSF#F}d(H1wd8Zw;gu9Bs%;nNiPakr-`vuhOi#>_5l0c zj;nu}w9h@__x(cPikGz&#ucgUab@)fR_x<+6@}6sq)?_vtFUyRIdViA7Ear#@=!W7 zb92KvS;HB^LThu~#=`)8L*6f$$r7<^PMp8jF`bnL!8im)8H_u%@!#1gl9}LfB0`ih zD?a)|y z?-fsc`XB!BU;M@W<72(St6%;6k-x&d7aOAfInV{R0^6vgWivnzXwyh&HmgaENv`4a2<*mnPCwUQ z=-=_Q<)=q~6Kc)hQM0TC+(Lcak11k|gb)a!_VqOp|K|Wtr)H6Dqn;ma+bu~GS=FRD zj*5Exhm!ihlI>3ee*xTL`_mg8SpNhLt%te}A2R9>Yf<}zdVXy@=HyK4H=k<5r<|Lc zD}cCR+Z!1HXL=l*J|9k>mtWEMl&>_{{%+vqz#i&zSOJG@zfaPe{z*HxiA{W!;}75d z{>$5$e?GYSnxu+5LKxKdsfT)s)_1QR&F6`TZzU_bQ@q!=xcF~BRGX?ZBI5O^Y-qAr!JPaD9W=k%YGMxZLX2lheC(&t7s&YF9 zQH~>dC-Ll)+oAW=mAH88$CoY%atTy-+r0x4$J@5dZ+;xzx3kB*V zb(yg;5`iQ`y=gfan3Yvg3i7_`8bVhjJH^(8m_H!)u85_sbx3#s?$nRHHDloL+e&NGz?$SsQyY@sfRnQn&N?T?)$299^A>flS_JUT-g5`qPl zfJg%E*;Ft5@eT)mb@l$%OFnhh>cM-+cYe-F?*Lw4bcNQ>R1>7%FmbIGfvXHx29oCx zIv=BV!A(5pw{G|NS8k7S{s@PE{DdxeR|!%hT=BmvfVldZS+_5|Txva!sBcC*ZLM!=0`OK7X?7{`Zan(q;ZTTTxhg+B=U}6>y&Bj4A6zHO`f9Fu1s5=nkKZTw}8I5dO4wYZ2D4x7XGs5*8$9%)7ObC@!u8}2TiTVAokq<6jRU7ak;W>>59 zo0HD;s}mO&Nba#tbARw|C%tKeGq9z`0GPB3R7h-^R{=t z``yQ1`N~%gzS0~4jp3hDKSFi_X9N3ybDO_AsGR`qrkz+HqY3T5pf*mIfO+5ma5r$U z`OMp10mhH9BVaO?1K{62hTHvWz<;DZ?#BcZLwtkb{|exnZ9i4gPU^YQ+_!wX!(y_2 zVmpzP+n$oNqgnn0;AOyVz^85ht?kc*5I#3C{vRVpz?nAiaL$`E8q@Rh^WMIF`?RDL zYJn}I^E%L`oF*G zu(-JR@}ej{G&eW5@K|r#_D=%e$f;wMP~YQTYx|_6cRben{VK%ibNVY8lWS`e|3rA} zTi=?*_LlEYss2N%(RnpF`b*npAQBY!LHY08;orUOo$tN7QueE>Q_1hV`uWcvJ~lo7 z>OlIizt$80w?H|tM8)k{-xP_?xj)7%WTMk@81#ZGL3?bn0gQ7IMv!+*nmU9kT1g$g5lBJH-NNttprW>44?hcMb7_s z9k+J2sa8!9p#rC==yn61G6O?en(408&+Ks!*$iQ-%Q?$!Gz@ZkmBXn`h1(4kI!ei7{lmlY zz3&)xp8U(@gHGj(L4Wlyr~24$=6>-F(`A3I7t-zwNq1jRdZCqECF{wc3k|b~R=vW+ z>aR=np&-Qxh1&p!z#oyT_u=8+yZnbcLifdG?7ua4{-idcoym^4jI8n11q!mZwz>SL zlHL864%OXvvKsu=^-7<4A8LOZB`?8x7I1cxydD(5j&4lI&=}pp;sUI*6?g%JJFWDS z!JW_eoVVN=N2>>8xw_tnhae8)F;+}jsO#+4YF;W8R8iF^>58e3Ii zEtpu8sJCne%diqTNx|(Zd`Ni9nkBt9oM*gMHp~fv>(rMacqxHBrF7-6t9?mynCjwe z2FBAU@0jUKq6KA3?o3JDt{hWQA5t&@qo}l(Q25?)@PF!wD#pTr~{&=bU&42RefBqZS zTyxF*t6uf0@ndsDj~R+pNn3dG?>1mRl0ep+3e~2;ODCzx@{$3I>*1MQEAs)@)Z0yn*mYv@Alr|d- z|9;cwS=NpJtZ6%8y^L8m?9a6CiKA@75@@j=buOCENYV(9?WyC(k1scDfYX^MXF7&2 z#47o!fbEQ0PvV)tg}_<1-y`YpW4Moh&4Z19HvIc-6XU;eT&+A-`~E7yMx+0szJH}) z|8K$4CvRulGyW3N$6=md?@KfLKs$zOEZ>eO+mK+q8U4olu=WC;&Qa|v&F8F zv#Qd0^T!K--^(4vCHHuTdr^jFQHgMw(O6CB%C zA?R47C0ZTWgU0&G90|R|(-)`lw%^Lt`Jr(<@yzR(etcIUYa5=^h~NjXkt0G8$>!`J zeT$Vo9w(n6-}?!&vu?|0pLnns{o5lNALu6whsJ27imMB%#>c5*M4E+ko80S2TRSP) zMIFN2tkv6XrDq3)^Nr3E;UZu!a8^{#P^0c`Y?lo zH}gxEpY%_CqpIQ~Q)n&&L$y*;+Qies4*^IO2}wfhNxiE0NUqT@_VsfwzLlT6saoL(oPXChxC4w-sd#GBc!wU*t_ngd+DJ# z{?;SJ`9+F520l3`)gPGhgzZJD5UBF)gzgsOsifL+cJBO~UI;V0QL+yumx7)u=_b(E6O6iJ0rt>N} z?A$4KT?qNva@Mk@+LC&5)eY|SPO-z4

aM%Mrmlr;g;$FFSoz~;B&c#?4`}`7b^*;mQiub*5%j4QxzfN)dGf61V zRZttdu~TGV3?7+er67DB!bj4C>z(+1^5$zO)tek|g0-#Ok7y zI1O$A?Z&atO+wWPvHZ~x@^6aW&d*qZ_UpBL1_$`M?u_r%*cp zc2GM7B6WoFC^emb@>!u4daKi(>b5h~=>pq zUAb}n$p$wV@)HNZ#DS2r&LZehkHZk?OBw>2pP%;zk-!Pg!~poJhU?f-23!O@8Mu^s zzD!fkiT5|><4f7crMMhfnRA-R{o2mhYULWGs5X&uL&U8>wMVSfD(ciTiFAg_dN?-{JKx- z?(ZIQ*3+g)OOZIZbX3eC*NQ|0$%@mMlky0@G zHLduUuP(#3r!RTo=6A*E3tcCE^O6lh=~_Qu0?08}0#_nE6T+Pe>A@t~anR}ZdAd(n z#Gbr##O9fl8gfKSXvSz;Bt)F|*#0OKA7Xs) zAJn+3*vInb8H`$l0$a-fN38I$<|}aE;`|^ zmuyC=jkdDsUH~$ro(Qu+VGh`5Yail5%z39s%CC>zhW{Gu_nGp4hyGpf*0!gw#J_xX zVD@WTq(vkhM~Y?WFQ8E$r3Frln#s~P&=)`M!Is;(RpQX*ttXOy%=x1Omt^qTOyK{;;5fQU{#ctbf(77d*1UN z#Maq}Yp%KGID7YgqO-7&g)F2CW!x2%e`8uz-yKx#lhnmdBszie61n;xWg2b>tt~%! z{q@&>_Ib~H-ai_ptug*5hWV3#XHgsIbJQ<I+&rzokTul99zo+@_QsBI1UpE1N4}6N65wP?nH~}V89`kIW!+GiT$K}Jp?0R$=W^KSKOB*ClkK6TEx;wV zuaMNHHhdH6Ie3Nbi)??&_V0ucPCN!|fQQ4{O>cw2J)$-~yQ~}j1@(L%HlMOFDg(7+ zFa%cT=H`Y#IX^!iH)sQ_-3mAKozuQ=#8k+R!dh{g(Jntt`;rN zo9v{?`erz`Pn4#Al5pZSbMRKG<0pM@7WJ9ds*j}hbXAx6Vljf)JUrr6%z znCsG|;O*@x>59wn*;fd*qr5F|%YcqpZi}KVx;?RF3nW{_sF$!hgrgrFhA00}>Hgg_ zw9k5;m3@!Vi-cw-&-@@))Et9k63&!NL=jPd2bhI`7l5URMh)dys&(w!KsUf_G+U@6 zDjAT3I_+S6hPd&@Oh_0_P*am!4Sd3IyYR;p%MZr5bYqBj+^_c4~x*8*-tT%0(6^N_%*q;OM^^B~R-|4?mncTyz#;=81&# zg+@;oTr9M0!f|gH2^RIanJ5&jPkz(TP3oJyJqThU!lLSz(V^D_zm$eL@;VdI7Q_}% z2a^RHye3DW0Es|$zxw>RK0h#tGy-+U{_hbz8qChER0w$-Ggoa(eX1r5*Bp?0x(0A5aD zcPU*p>gwDgIN82c?7NJ(?NZU(ingVqor|I;imgI(BAFFgOJoWph^(7Jh^(9_!q#W3 zR;$PMh1S;BM1|La&aMX~5<;EUGx4J}p+U*Qc*TyttFr$)tM8b-wfExpb_hFDS7~4r zD^R38vdd%E(g{T0&KD}iOJ-1rYRNi$EB^c)J~m$Q=cY!wvl_*2J;_5{Bd44;E*lt6 z0Q+D6#plmU(*OGNKcAXX_hoq~e@U*+uFKEVM`bgJ=uoBnxAIDV(r#BPd7h8Hkiq}O z?E3oauWub245nQqU!N%cXsYT$iC*o$1f$aE$cW^p%N<+(?7N=%%;iU-4e)4kr5k$p zc4{O1dDJi7`>5|LCxAPsjq}@pd#EG51J)y+4@I%u7(vRZOTz7%J_K9`d8k97U7a{MRi<3`dKee4^f{ioH)N`Yn zFhnHX58P&ZK~m1CsUWr;&yXGvn{8}#2E?ZQgz~;j%{;l9I@M&A_2}I_z)iOQID~MW zZHl5G&nNcy7sTnt@fq&4YsavW?%ks{{wEq2Wz(-!V6-8^Khvzgv?0p>utxa9tQ)A$ z-xTX*6erA^<@x#f)eSlX4|7*sTek7vU$F*|?UZ`FuLPb(?J!JfG!dxB0&2$4my`-% z`=aLSA8uSsJyyRX>3=uvE(d;(Q=Ki7@f=V)3V!3!_TwuQ6T^NY?AoE8j~&(>0UI?h z9&WCGxzW5Ht)<*dm^fqV^D_~loiKG^{hqRh%_;yj9!(X1KmLpBUfPO-KToM1bTh6< zmP%Ux>DylU!vFEu^zgKOzw`aymaF=2DdoP?9S@PD9Flz3cf9f?fBNOv_dhizWdJ8p z%JsV7r{AV(`mo#7WzSEj@IBRtd}ZV<{aq4^#1O2-9%@%O8%3GGN=tNSO_m7-D=Dj( zr-9_$ymuu-j^A{r=AQoNPO|f(c%@KcTlPe*9%7V&9BUCfVL039RiQO|*oz0=&PRUa zgrD;U+}_q!Rt9+#2^MKvN)%lgmDFMVY>}`{L~XNmndIms+^O^CPugxPbPA4y(vG-m z2qM^%iiD?)%Q}@;BiBFrr!^Wi^MDy{nAp7=PHw5ve+`wf&;2a zhrLd>T6cXnmgD5TUv-q<7P6$qa8qdb(h(}x&V^g#__u-THNO6H&Rb~_;RZ!@jm&MCJlEsrB8LEBt z7`QhszV8UVr`!@Wb%jZu78Sl0aXDg3sH-Q)O(?cb;jlFk$E#TkvPppy(XrUp4BF&@ zutrcYN+!dkwa(HIBJ4Vz?Ep$P2EHTQE5~=j=xyBp#~;?-*Ou}9-;=WE>Na@-t(D4g z$t<6QLEmI!Grek(Rcn4|_s6*1S11-uzpv$CKYl(La(j-e63;Y+1o#hwfC_RB@ ztjH7N2;;G}+J~xdYZSFy;r~B-?;UT+RbBai_o=EIU+R9ZvqCE(kiZBL48~Xj0|q0o z!6Ms+vBz@6X~r}2vps^riE)k?+Zb#-#v=h{P!j~$A`37=1SOPOQmgaJ@8+sH>-Wd0 zy6?W%-BL?xA<5S6&+D5io;r2vti9J>yEj0!wp_jh?G=_ovrGk_NY z-$4K#O9a6GWkN*$4nnkl0A$A*nJ;kNsA-s`~sMUq}`X5UYk?Dq-4f02-;(Jek#i`8>R#@r%mGX(hS zUyI+%b!29_f&*-vP`%)t1P8#&2z{{&oFr+|%*G3*z@M)_?)!7P>t5GH{R?p2B>?jh z{AYx;h7Qn|w5>ee0*H_1hTm5-)L^LaKU}xmx1=4#cIOHAXOjTF8bCBNGZO)=bvfyy zjDYoH#Umcv6i&#K2;l!bg3}2?-z$%QK)4pC6H);_@<5z}g{8%-CtR=c>GJLo@c(S! ze~+xQzN6KE*GT#<;5W_en-B0<9!XaA-O{mFXSM&8sV}AeOR4Qrw#&DBtR20N%P}P< z^qB#{fnBC*bP2~^G6Ej4j<83Q{o|D%|E0R`{NAdnc(5GT&6NDkB^N*ctq)~R{%c?Q z{L6vM|KUUb@}in$f0-~irTop2$94Qa{ogCE`i@s!{KEh5p*n_#%hoUeSVf6z<-@|T zCIWtQDd@1F?E~!T`2^c0cQ{VlEN$9?`X@U}rm&3_Q&ceq8;t5^qq)&=)j*9+EFw;T zzSoz3sBLF|bc_wBzd{zh$()^U6#9RLmlRTIZIo19Knc&s(cmv^{`yba=BKuO=WAn9 zEw;St!FzBbN929cTaX5aWYMf>_C=P9`Bb##u=!iWJ-6Zy&+5*^+YR-u?m?QMpb%Su z9etpvuW7*mW{3!3_E|$aM%!iQHnerK#0F>mrWmimbk*U;1n5;A zDb5aky=PDQ;Z&d6;_~mhy2+t~dFwN!d3oZGFR*K6bZl`Qbr+>yx4R->Md!91}Of-trLs#!02T zgO3f8RAwE6egRtnlZh&(hLk2|SwR>#XLt*uc2NN#vkv5YGPU2+>d>|fgJzZ@;Iw}NJbRl)M|$ZYkhmi^O0AC?I^pk?4B%+BrBZD;D_Hq8{Y|Fey; zY1o(;ab(u6n(`U5%4Sn-gDI+7aBX-4=M>eQSub;qC%1IyD@|=Y?|ZSzPvdw21&?Rg zt;DJ;DI|JG$mDgMDgP4|?s&g$c~Q%r{=Ozu9a##ga?HT@y|w41{vlaqLF5Bzejufb zSapxL!v|saAuHQuUj=OvmV|ckSTQ*}*0@&K%a4x%U{`$PBU|K?%c=}sZN?-e{R5jH z$o->>`QLeKYVMV&$UtN1`vgz)*4ZiAMAN%~53~dFX;-R^cD&Cd5{Fg6z z@rw^~925ED1w#e+A0terFC^r5pH1k6w*#LAz6jhx0RAURoNsjhH3Aj)9D)WL&pa%TuK8aNjw_Xb+CIHZbz{kw&>kn|BQ^niA zBRC${NB*A){60r#Rjk=m@tX&(KA!vS5pJapOhN$sO+vqGu$lr>M*ol2|G%A10Ihpp zjwhuKM~A>FTP|M9l-e>KU}%pq0D>Ja13;4f)0O}7w{`2iVNK-SOasO5P@QGRG9Fa3ssu8WPcipB} z_kH`&$*OJmVYBEb&8!d!QZ9w+_2w8>nKui;XnEzJ50LlY;SRj}v(WW^@YY?v}R1|D9?mucOVXI&Bs1i=(DLWul1x~$M3({=6-+9ZGF2Jpl|$*W2P2UKQpns5(42)nDbIJ5cFle9Q6^ofu&%j z=GUmzKx3c;iv(3dDMPA8UNO8Yk}^C*1Ju1Owb@=~Px^6hfIsk4PSd|UjoWsPBl!++ z7kKP!2Rksfc(WQKK95ytP>o#K(U!4da=7+a4>DQdX|d7|6t*cAk**j1^N{_E?|th_ zar4Q`0RE=`lQ3~kg-Qa|p2rqpd0s5HMcflpUE#WLF!wBHsJ3L59P+kzud(}pvXv!n zPCDFN>8jIkbwF(gTfNy62NQP60J)h!``3oEP0bCkv0|>` zj8@&$nKUX}jQU0+sv5C5Vvl(epm7T)8UoA>y`|5UZH@2G3g&n@>-?7g{E8Z2Vn1uvTy)kV?HrMaH0 zJBuycEcWgpU25rDm9E`qyKv;VR$kWQNCB{a`p_q~ImchtNS_P7S@az5vHiJ^|G(Bk z_d{=d;}0xJ-`+{Gnb|w8ys|!>yC>r8uVVA(7^)P<*G(-G6!0He( zn(tp@HQ!%^dtyn_CSZJSZtmuz2=U#Qt#@4>x2raJZ^I-! zf+C*<@Sh+!BA1KT7Z6wgrQ@Zvh*g2n3gJ9%0N!s8LYZIEe+OO){EeCYZSmbxfj_yw znuw^Fi<%;U; zA^$JrqFdzQg+$4mw!Lo77Cv#koBw!M(=TjD7Lg5d243dP6jzP0jk#L6(Fusy#(S_a zLTnJ6ZIq9q3{3saVc%-MMElku48^Xq>9=PUOAzN=%+CogO96IW9^?`9=apEr_c zBYUdB6NF6?sx>-8m@H_lhifM+NcD@rriKvX4{7{H$pWwtEe#VZX#v=SbQ}0@qUu{iWRB{MMe^`t}^&emFmH#UfMZ zUQfL3YN(!$#g9ksiNKkLPL|mQAV$Q+r8No4=#71!Fd_Wl)RpB3s_$ob!%$98VFVyEQD&1^Kb zpE(5owlOj)&a_f9>rNPz8DnfCAtDcWA9_oaM7T(9?y4@$Q_+U!KS3_}A+Q%ZLV8N* zUBT-lnK|=0n3D<)2kM*r$DHqfRM-B<-u%XQ#8x}6ra>xtUcw2NOLl6>%EFH58NFA~xV&8VAEuaG_0qWDif`q7X6 z#EW12;@JnoOc;s$KLL0Na1lYY><~eK?-K;Uow)*VJfv2DzmBBcgbCUKg5%-21VO@* z5m0*cua|T@On^t)Gy?OZYi8FF7$zmaE7vJsD}?^>E5NT1qP4l1ok_TL-eP8# z-488*BigBq{Igp6vR)j^3a~6`D?kDMON#U`U0@{Vf2b}$`rXm&XzL#3J2SJ^?Ck8y z^z`(Og6VLGAVybK(}-qfW|n4WX9tB7qdc$sid;XeR)GI;g3AASgfZtjf}^iS&;lv)y{qvH|d40|-0uWh)zz7G6nidw0wKl9ZWUv&M$ zbzG&r<_BMN=jE4QesW%&{7lsio>6{Zq5rH6+vh({nDad9&0s_XFihK3Lc(>X;eUjD z@E-VOgBiolSui^@8dK%G^Bg-LhiB3(tBU%x8BHf@Mq>u5TOF#I8BTHLs5T>_e#YRY zu4!AM=67BsOMVgTdr{E+GrSMg=8K|QCNEhjyk?jVA-%(V>mOV)b&H?Bx`Itrp%Re} za!Z9G^VB5yp0~w0=pPo1B{9|(sh8$6S!)iPyG87~6@O?}yOZ3mul2OwNllKfI-v{P!>5Z~vpjPWs`~eAGA-7d;-_nTDNd*mjA{h9-q2ewY!! zPz>LDh5>L3@$J+^7c`4;$fLa&`;fl_pYL%#+ef;xSBL)fkUQ=5eE@yqtq~K?u9A#7 z#WfR|%oM81gNVI|yJr24w9*y*zESDPk_`C_`GG7>MeH!Sl21>l3g<&vw=6MS#c(mC zF$`)(wJIC0o2m^XtBcH;z)Y?nm&ayVPoyo+^5^>Yq+ibg{O*6K+UDnOCK=!1UA!F^ zos7BD5!)TM1F;!wMn+v&GNeNYN|9(^;8_t8=?$gAmdrRLv`^?Z@VDXfn_S+xP4~QK zw>#q(((HGhg?s&FHO96l;61q)^hCZaIt!xL4(SjR9Vu$TLGQJYgwmDCEH-iA2jYF1+8~XT`txSz^=fun8p&;*F}9zDrq4EwO$Wih z#2Kxo(U~-=n~bSxa5YEIj9ktVgQOCPL5>#tZsSD*pDvy)H}-nWE=9H(OlBJ1qv7bn zJK> z_G=V^X=ZlJb1$j$-uv${vsX&`{vyI25mfqbl+>_QLBCPJKgs~e!{$`x_~*rY%&cSr z3CD!|cxD8^ik zStw(;fdF7&^f-@k-VZzIDem(P1QF1u5!gp9;Qs+%A?QE6j^LOqDcfZmmCk@V z;aqM8uCO2=`CyOh#e{q3=#0Yqv8iJH8-SlSvq#Fa<-V-!kEQVC6u}`jL1^y*@S%t6 z;O?irl)zT#67G*BV3FX|YqPdI;A0Gc!tRR!@Q=Gb@f!{Ge|41hpAz5IU(U~e-RoYm z@Q@$i{j|$Jbk&EdHn@27yFS%Fe&xk4_=Sh*kWQGbDFdiL(LFLGwvG%|z;0^72B5t{ zv4 znl?B;1ntaO2lGDw0+T5b7@66RZ!xDk@Ff0$j)#wmk(u`|`_}CoihH4k( z6+3HgUWqa@QZfAm6I(oUvEehXEp5lRq~#j)gHXCPyi}VqqMEZ*xsoXtz2+Ax{zu-N z+wZ*~wLkcUTYy`#^t#WPJ8cK5ogv&wX0`>hEfP~m6M{w%f0Gr*ol9hhKCp;s5z`XV zVR;=ivc1sRNB{c$`s77zds)%u|L@h7-|~ToX5Zl^BGj;AuH}g(5=rXIdIMM)2;Y&i zwprFeQRb-)q$q=)uq*?5A;K$X$Q9vs59VcAWMnm{3`E5siXrbB{n(T@Antiw1FKe0 zts<;uq!?LlSZq`p#-^tv`QG;3g(p=?9yiOkD;;WLr8 zMB0H$N4UOhIXC)}MJu9nKrD8x;~aaPv{z{IUfSh8$F+O0E3UYvZuQnHYotGA#&~g- zna6z@=U@MtSG;%+kAO+>i0P6Szxd#LKlGtrid_;_$X{kqb7swo@*f@4{dMnt_q*T! zhBv(7ewPR=gtoR3N?Bb*0RMXl!1^Nup})by0sbMd0VK5u6Xz~r^8ZSL6W}xgJ$R8I zfOgk|5CHoRZzJIUNoICQLHi#N?x=kP{e=dhyxp3}{<^&W;orLG|9aYgP10-1-Lne5 z4R{qn5VBgP5sa*tkL-Vn0MLF%(&pm#t!8#{mStZvvoCi#9U6_s(N1}ElpVgGot>4L z^;iWt8L(J5DIPZx^&qX4We71*#)|F>5Vj zmAagcmi#lbeUio`on>aX6w8-1ZEt2PBf@}3JKu-h3h=*;0Q}D*T+@`$7T-e{gZ2{y zNGAy(u5>buw)21x;oU;eF1hvu9NwwL>w|5ta{Y6G%O(BVqbMbybV!Y+0>p%KO73O7 zN1Bx^g;F!3!rF6tBt7#V74}b8e)4ry_11v@jOdo>vDU3}3)&KA7(+8cDi1?S$c zd-Ihqec?+lzw)CWu9CgD{H|*0n=aq=(SLpAOJ4M7ab_LW);~Dz-O8|W5oL@Fs|wYD zelucu08?}G!u8EgsiEqm$$44Qhr~m#W0o(X$V5CLQ!EWK@Ny*0#HXLCx#Wo}d3)|( zs7`D#=Qc{5N(d>suv-Z^hxw8g7y%M?nsBeRcw*k3@$L`W_$h}q_r=K9H`R!`=DPh{ z17~;>wW`_FM$aOqPUwhkyoWZ%tLXqfm$TdK)Wfray7_9C{jo$IoB(Ayz&hVZsW@&8 zK?GWG=*D`AMUkB`Kd*|(%n;L&i5YB3kPJLC7?WVjk!fH7KxN2kV_tD=j8&m=UWLre z|ME4tzvzGV-Nm2CR6SiK895$Ol}OUAx~`P;^Ll5&HDkO z2U!c(U%_{}%DO%ETd7+U-}aXk)hyk$GW#AjPWSs}2_>D6L|B zK_^8?3tSarLYQ!oNmb1I#7q@abZYDrRTO)4!7u0eZ5O85nLjy*UIuVcTVLFKJKNv2 z$4_jjP#sGwuGg?e9bX+c;xUXG&Qbva2J=^&< z0r)GQANi;Jud3CjBF0aWTrVf@LO&C|mgp~=rCli=z(h|(9Wgr)OAaL&mds*vH;Uc2 zGnik{?R9TAR#Gh(8uw5Qtz@GPs1Y9?u84SdLCXua&zu5l_5O=3a~0X~rZ!P)GP}r4|ad1uJ_`%f6J#n6+f=ge`?idZ*iuLMT>ihI|rG5?B;L$+n$%d z_{ERJiGW`7(w83krw@JNm-5JMjFeu8lz^rqqTj5~Y`f`-E3WwZC6`=s+#)*)CAOvs zYX8q8r$7CgMx$}8`+2>~umtlF zfps!gEVDw0MsGK>Z!x0iKN8Jvuv#6U+;+L&Q4zHU(4Co?Da!`di~UqtrBEMh-3lRc z*&SsOm|1&vcJ^jTJIw4ru}&#i=*?_pWcktaeb`M>m2e+FoxnnBvP#RY5+eQ=5gd}A zCpZeuV3ip%YNgoQIPmyF81li6U+)24!7xSaL7NB;iocZf%Vu`m_0JzhE1g|2tL&Cz z3I08jtvufH_{;Mtrdf~K{jtB_^@+z<)c-p-@>ub>c6%Xu$}1iM@V_4HUvte@G&VND zZMW^w%1Q_CgYW->3!ZqNee#l*eBVpncjZ;rRxCXq0C|hW6@Pd6m8bvcD=*%AqL2OC zWx)ZkewtH8&_<(YgzpLldGQ=Z4wwS#InQp_vRW_G=Di*8RkKrTB8g1xnrtFNamUk% zoB^shFHJc55m+v29k1Hfn(uu$x9flT9-a56S1PG(f#}CTV=8p*i=e+J$cP)r8)bkQ`|KyLaIV51WME}Q8PlK#+aG&p#q;Xs3d01 z@2VtAH`IJThyK7TKb))owbV`hkCpXzzpljbxVJ@2J}LImhDdovlr87jT{-@bb35tg zH4_Q{o);S5@#7Wk|58G|Za#{HQb8w!oB;k?qSY6JzF`AV9YDS7p^F{v%ePW!49u(} zJG5Kev72;ZMYq?no2p$c5Ws&e+yb^nWG>u?j?i+xC)BeL-q@a*J)xV}&ddeDzwKwB zjUze#i8F@af5r&l-{=9EcSMG-S0hWDY;dS+)6eYsgP(7xvH5u-e!XE&3UnB(P?&IF zSg4sX%rglJ8MK7|pk=))?WSM8$M-&*h^;m2b-a4Hki#lDqU9MZNa+gJ=y-frzMaX^ zo>_0dxa&^Xe^`fnSG#LH>p8EfJPcVQ!&Vrt3a>$c=t;;f1`EhWtUy{hyeeueB~>nE3UYrjC_`+SHJZ6`~UF+AO6XDCH`lp>^w7E zM1E3Y_V#u>d9j%tJ{~=Q5o-Mt38H^z6F}KD1i`;M9|_=p)XZ$u2{1#Tbj}dY;l+f~ zh+iy3;*NG5%dYevak6)>lia61^{D`ikB?spJkHEE5r!OqPqRvcKSG>uZzv=T*&Kcn%PeR|0HSN z%r*l3@BZ%Z{;$B>?jscd)<*K1gnOf;(yvI`J~ubFcccwRY5#Qs=q%Ov+r?|y2O|Q2 zFKebZi_e}gXDg$qWu5YL-MUp)^RAhhnbGX*Y>(k62s1M?ZgzHdZ{Y+uRBX3&O5`&$ zGo6At@QCR91)2F###};(Ml2(f;00Zf?()_ zu{LluL5TE3FegUGpg)rIduH~52f58}heacQr9HsLm!qIbj%;8o={dk9Gy&bDg*Kppc zn~PMa=RCCN zY?t!2EYUV6bYrCrs@a)y3re`v%(`ORHYuKVYBj;*ZN@p9$i2FKXhlXpHhdGRnWztp zN-SJ8M^ziT9459nzWe8^e*YW1l1(Cyk8H@jx+Tq(F?ZNh^7}ML~oDZ1p zZp4bl(87W--ZC}o=G>U6UpLFWq%pDbtOT?nWn#3^3Uy3D zTVWP*hOl#c4cnQU+~!TjjHLrZz%cGkRuZa!Q<|9+@R| zBc1E>rJwERv)7Gj!{eWaCI1Pt@3vvD4>;c!cR~m?IRll*Dh2Jby#Igg?kjK9*3FPl zRV>S)n|m@7mCValM1KL&WuWDiwxH7&D{ZsZK5@_WaBx-!@-8>lyWEm^KbFH-a3#56 z^j~YotD@14Ij$Ye{@@QTuhpu0P3-gYC?5I}om|N~Yu5bKWtY9^5kVh+>ZO+^=gn+; z(vSYk&-C8%mbct~*=3iF0&yjI=dOO<{E1o=U18)W0a2vv3AH47&AZ-p^*cDS6vxr5 zLJ-w@F7O?M_V_A6@bA{++{VLUJ;L#Qgpeov90D!)>4emU0|b!pNIm{XoPFs_U*Z|h zcn1A`|A}VyEJ^1S;5#Ao2P1&eVFbQdwT!?Y;S?B+_K&_F(F(|cJ(4b9Er>7zNEs!seDH%GeAmlf_Oh2rN`Xl;d){C$xWdft_=~^z3x4{if0}js zg0&B=DgiXd6l&p;wiYG+)_~{f>FIGoKN~OB>r<2$D}?_d7>fV7V%btetPP_#`t)1xNIEXzsvZh7r(gw-j81Wbjv!o zM1&H771C4Qd*#P}<~0|;;LlIwd3?KU4Fh1bRMr|h%CNsC2@b3#lnL%mJdsO9E4R&i z+TM-TovTktt#MO4@Qiniu89?AC=#_A_(WvF+NoD%JZ9{*V|LP$m;J$OzRL9ZmzyP< z1kWo%c7_O|b44_?kUhi9LZLh3A|q*Q>hYdqd>wV+pR6yLM_C6fFK) z6-{lFEn;*E>G$y-Y)lXvBt6cYAt!GqA37v;jftvk(2QAeIV)aj2oe{-hYY!J3`4g{ znGP`L&`tFL;Owl01;w|A;V7984-4&6yR>-el% z#kBf#2>!pbPE2t{N-BnGhMR~LZ8tX&K?9RA6i;|68ESg5>1?^jJsX+f&0!W9mYAX#t3*a* z5buDhB$tb1;6)$TPo-`r$nTMgEJgICMqjSl7EvY*2ve&;hH5>TEn|E48+Y8JY+*sS z)pEP3KF}O!!UynQ{F4aGn3NoV0VJkDrt zz&6HarP_aI(p24KOl^d?8o+-lXBC-m#!ww|ZqQ9_?CD*<{|gPK9{(J(r$V#n5 zg{&YfkV6dQ70CY-Xxz|er1WwYzWG%<`?cOLer)UnAqzQA0873B7C0PCa|$Hp~0J zhy_({L6#AHaiHEG{m{!^*gB5D`9p4I=6>$ie(jWJUhu4U#iprSZoBPQU-`;czVGtO zFCUh_y5y2e@++>n<{N%~hNTxPw6b zzmA7V@b7qRL=)gTf)ijHA&R&KcouLIaPU4-0Uomvd&V<@C~~Dz`AJD9jr?>M!Ku<@ zHKIKlg@kCFnN`r2`M%amO8ZEiElAo`3%NcS*X$%(fTnUk&`*WtUxc z2SMAR$EyFmU?c%+0ZC5Ksfd5z2Y%oS-utJSS+iKz#c}+zz%TvOPyN(-2f)xqsQ)zr zfJ_OI|1H4s2+$thS4CcZlK}ojD8JV_ijqH)wiQl(NY1vZ3CaA1lXidmFNJgb=b?c zSZ{s8d7n}I-AHf*oJ4SJaFq2tt1N&Gz}$m5W-~h=>HiXRDNY0n0M@qst0hHd_J=26 zyAOq}zvmw9p!sO$@$bQ@@ollozwm{6Jh%9Jqu&jveC<^izu>=}$o+iri(gfvF;2)t zgDewqY&`z)r*m}DM#R|I2EO>kuMWqviHVIYFVFLx-}#iI_Se_E=%PEXxbhP}9?|=| z^1F(%-+uF(-~9GBzxmCN$T`rxSy=|K4BKf)kzGG*jlS0^eO94#oW6x9ZbK9q^dddVu zlfY90^B-rzm&pj`d|*h}Pzq@qdwjb*pfLa|lbs9|WKvp*`)L^kGtC_K(D{D%$tHuD#@^GI03O49N z(lKhmd8@1;XhNO{?=3v`9f~XfRTZN3W|%od1r;fpHf%L7vmT0sWnQEn^G>1I&;VsE z)N0GR1Bm-ly$?}Q{4N*u(-_FE!=P*S0v~P3`a@* zM_)ntdo;M`Q_+@Z_I3DQ8X|T!$Z`$5h@FUX&!8t-Z7J`-cvr5H;&a2uA#X#kt@$kF zrdqC>5@{@hCRk+Qo(t{}OzX$4^6-u|t{r7Md&Q?d)s(VdtD3f!OL^RZ%;KNB<+?8& z7j6FAVQ+r(pNwreeao9_QGQlrRL?x)jJIC>(T{%J%&s3z2e{;!&+NYIqaXd}$vpni zi1Zl-QAD;QHv5^&ues(oc;+*^_p+M`fpYsSLfNb~@C5?>|JzdP@4=XbTJUp(5`||F zm;jrL_s=E(gfeQnX4Q4C|B>vdllE7<;uXCA{qLvMYCQuu%gnYDz-Wa){ZGs+EkOKw zalcWze{RECD{G?tm|5bz-+S}TH{bU9*T4R@>#n;lEskaP```b5z5L}bzlRX5?*S_> zeBldk`}oH{zG7x~6_NZh-`KG>au+c|&?_86b3gf$Klzb&yyG307JURWd&>O${7y5w z^JopTuH;{{IENO&fv~(zKySFthItq^gm#Wno zQ3UhzOH``~NfHg60HgY!<#)k3a4L(7o2bN1Zii-Dp7I#5QgL$qeoK}1^eQ&R(R@1>r^&W zXy!&cH&PEh=dD&XO-;)dG2bzqa@6c$8)INnnmXNRROQlTY6~r^9h@a;ch#?Fw!4zE zVrU!`F{B-%GX7b#T+J}^XaRyIfV`c#jFP(&XRWqq)}ek9B%92ug84{910xDF1FJdV zdZ?QiY1M2gMK(Z+Ax2h<%B$&#Vo)7fwa9TU=RM(4hC=oR%8+$HgOHRXiGD89B8}Vi zAnt%mh4YYPqCSu%1Lzp)fXh;OzaqM+xn2$W7=y#I-kqYeV$64Juy3zF>^m%tRcwC3 z+g{MDP>r<=fF7Z&VtJLW#LZnl6tww zFtZF(2Yee<`m%Z|Y8muAbPQ`}kY`dqH%kXtdRTPtk+r)pw_@q?yuYp5wwtPbEvSh6 z+b~64CQPotvIVt06Ra4RVW$ovdt5ixhGxUqGGlBQladLj>@XUWtEK+hRa1A;sLYh$ z-{={Z`9S+`#!#ukU}0cic~Mut_ThwW7ksB#@}t6DWLVV-@b3#gPGBNrix{KuUHCa^`xQ(`qDk zIL<^CX#Zy5%aO^}c;$~AuZ}gYt^4jRZ+VM5?}BG-bIMVg2JL0_G|Ni#_&}=r}P>AV4xZ!Um0L3P2bNPqjeyq~_RYw0uqWzJXb??6W?i+vR zXMW~}UAuPmNA~Xl#c_P-6|Z>3=LkTp1o;z$ez>;)|D%yQca* z(W{;l{n;CT@S?>Ny{~q=MWZoJ6cw56$}wAY0%TdZ?c;c@_Wjh{tH)Mef6(jbkRd!$>2mEX#)99kE=II$#jW zl=+G=XRvi?Nwu_ZroOZlQ@%x($HrLK6FW!du*?TVy{J(60H6`68}Wh+o?;Wv8F23gv0R90a6kSEG*!`&(0(T^2HJ-a>b)6UVD zu$UpAu>>ZiSyhl*Q6jL?M=r9nmKS`oun?Fl+m_JIlRb@XMmBCNulRDfmnB#d8A%1Q z4EnjO-!66*8Bq*bh-aXhxtRM19#JD&G~+%%4{{Y+m!1r*Y$N5W)~A9(f`sa zMf==FUtI^M*03`zwV8#zzIw1vV{F=NYY#Tgd&z}L0KH94ov!c$$zdc2UooSCED9+A zN{noPWd*2ru`!5Y5Q!YjsxnK_P-{uUr)*fGe3o^=x4|;Q$)nszGc3(L4yfi>qX%(U zVj%T%Svw8WHvx@-(O40S`(^j+G4>yT9MTAXYqe)L#(gcYn)6>kR*f7;sq{}KXoFmY zosm`Tynann)rPTsgK^qPqPp2J7)MD}Y>dom6{A09ok*hccF68`22KC6O zHXOO-{?otNb&vn&y0$*$JIz(zD6=0Jg8za00Tu{rs-k3N)S-J;2wv=Uh`wze5h4)%J{@Z0G_5XsWJnat?%cl_x za`u1eGoSy}O*8d{qpkB3Kk*ak6<1yL#cbfdk(izZik)d@kjFoM#TD1Q?UGB5$^xhm z=(A5DM9r6hFB7QqokuG5{}|RIln49*a1H?w>>%U|{~MvA!K3N{{&3iBx81fCc(R$z zuu7l4hA=GkIkwV&3HXQKnOW?;Km6Ixe)ek@UU=c1ggME2=Yc=>+;jEX*S^;8+O@0w z)vtbaU%%h402W2j;GOS$XZE8%`lJ4PzUO<`yLYd<{r218=)iyUF9%$~! zZ+g?4URN9=&bb!?ZyW93BawdyAh}U&r$YeqrS<@ffd7&8%As3?ewI&9Pw$YlTyC@g z@ue7F!iY#<0mS>o{z|dGu|ni;Mbc0QfZ!N8z-oV94_Zc@6E-t5V+Enp!0AG!6|uf>i%N{XWyO0I_DA`2cvx8 zQRYBdMW9I-=N^=q*#{)Og1{$Jkj*T{V1aU~)6L`D_zV$0phyN0E;oV{v$b8_+sZxW$&AXUj;imL!9 zLD#-`wq1bB|NH0ot20*k&(}A7(nzTH%)0%Y)ESv!t{SPn(UTkU5u^$n<8g;tP9AT> zTg+{%K~}M;eY-igol6bb?n=t6m+Btsf`me`y}%p=02yim%tz>^s7pME?Bq02wU=Z2 z_hJ=qmL!m*@<{|P!TJ-Xu8F!}Y9Q)fkec!CDB7l}c|7(_x5MjsIm5#*6iAVb4v zWiFB&szub=2 zdJU(RGvYjG3DyJtD%>~)a4QZ^9(hA?42xCcW}m6nAFwg^c1F9c$%FS`%lolL6Weq$ zOxA_(fcN;$lt?E64I=N$>MmT2*oizfDK;XoDuP(*Cq^0p14Ngis^qZWmwkIROq?My zoaIs_hsway$Wb}%t)`+r5NQUBg06w{rpmJLDbDAz_7d#7%d~&L)E=l`iP)2*c2hz7 zpYTPgKZcR(&^W>@)E7|KpzEOS%uX95c5WxpR3$OCpJZ%14IfV$G_XotHdZsDs*yGf zKV?*=P0)D7mThT}Wmr1!8z+Wzk#ImS4_b zzKiP~Mzc4GJ-g|wv~+9T+n%T=L&IcFS;36BpX1f~zJT?Q?z}rNsySl#nAlv=Qb1vso3<+D)jJ{fMXjueTx<;4r~~@oa)aqe*ZEoCVxgumDCU zuA{I2k?fe0_N`mD{s53js+d_ysCj>Pp``B#et0n=>Nk?_?*R(nfAHP!e)qLM_G3SG zkW~-sfFhz>rUU@oaKjD!>aYGP6dNZ{+e?c9efra%h7o52kY9Z9#q8R(>u3&u@=w70 z&;R_-f8kAUdea*u)e1&Jb#Za=SyNL}M~GAvx&LKt^DZF*-z>m;IqZ!3k4MLhA**3_ zc2*+{fbtki;9VVAuMX4-VL+|hcAWs=BZ7k~Uu~kHBV}lXSYT`2HYl!1ne$(k8>|3T zGg~Us489$a|4jsE@AaNdz22BO{;mA%l>QWtMh8GSj06taFn)K0jn0OSvYf1-+D5|V z9zTcZSG$OYozv>5w(l+jWSb0@wu0qG%|xDv?y|`YDjP&zH~NzKfu|;?$(J>vv;M8i z&42YR&i&c<5xYq^>S0CM5m2@(B(BIh{yJ3K%5*)O{4c`dd6t**FP zQN0>jZ;+E>c=HxlP00o<2TMVDVzRcUnPV#z(XHYulV+z>W$M|6eS0~#<>jjb`+9^F zLF59kjWq&nDT<+~DCg$U64I@4%N8n48&6?tzpst^ThP7J7>jY!<6^@$LlHI@n9>;K zRZ#(#7W1U>$e75B#PGgIV#poJoLT0E0qjxqQ(i+N6=HuLq8zJckO*}mv?OQ^pr1?1 zux{6E&gIi!ZUSX3gEJIEp^w(l-_t&VP~%f40Zs^vpD#E22a z{|7c+9kJY}KJ}>xpzA8NmtLAoY~KEi)6aQYLH$?S z9^{{Pm8p-u``z#Ezw2G^I_A0;UU*^l-d(${i;4C-@(BYMk!>3!^|PZq%aBM8X5p=1?Y{Z()<_ikITZ-&m2gIfG zWF5VK)Cr&poND*w2sr?q+6YN~(RrDpR4XHC`@P zrVWgaT%)WCBd`&o;y6UmR~WFWH!ylE6C7RH-vAX3f)2qE6OWv0uVgaJ%*=42t;qL3 z33w`j@;_CaXXy}v@MPavEVmc9n=n3&=JgLZS*$-sDARR)vCe75cSoz>QaU_06C9ln z+RSWO(%T7+fD_FEC{4i6O1jg`u6YQy|Cl{y_uJn4;eUNb?Az1jXJKSk{lycxk6LYv zW^|5rY6xDAyWv=i_i@=l0z`q-4!usjafC)cn<;mAQ4@{;v1H}DKx5CE)a z;8W-eIuS&%nL5zlCwd1&TnmreLkG?8y;Fz#i%P3CDy~Y$<#u~B=cWi>Q$~aEB#%OW zQ69=huJ#tK;o7fuD`9zPC*M#ZVJxqk)KxEr$2YNob!Z&k?FR?@B>f(ns#E56U~FFY zVM@@0+E%l4yI~E;yPif4-q0X{Zd_J~hP>j)Y9e<-Uc%a^by-|41J@IliQKR}Hk^Zg z7rH$uGc1aXbQya0h_7AyW6*%Xw_o&)p~ZT8>lTb0gM^MtV-&Qcp>Bj z9Z(n8LgdaMVXQY`dq393v8u7-6w{7#VSKw0jf0${Qq14-hQp1UYzm8}jHqhn%*p#8 zrIEyrxbAFlsLM4!)z1%J)712npM$IXs1>yTvN=rN`yz28%+lq-oGxK@WNznHv}!@+=&rb@;Gusb_Xu z&D8QCH6kg55Z4b+_j9~DVw!%qsIM*04~5#20OX$N4(sds%Pzd|VUKv5nf>CM-+c1< zPkP!PC+4RSq?zrz_H&>8)r}j+=8s35aGY(OKJy=s%%6r-GgLR@HQnCi*Na6;M@NMq z`gaxqWb7fRYR~Z~1<3_4og<_I>>~_MlLQvP4nm}GJ)nDx0Z>>JMHS#&GpiO~CBThE z&UBB}{QqGjzHkU&X72jyum8#upZLVvfXF##-uqNiTJ&27M8*3v%1MqK4G#_2(R=O<*U9ULL(n0Z%Is6Kx|FZ~`|Hly+5GiZH zf64kNbvyPG%6FbYpzR;cJmDOkKp3~~Af)>ojr&_V3=)C^;Dni(y+_i;1jofg;RGnR z_q&pQ$jlC$;O#$VkJT-2kW=d#$~BDfm?2(u^cJ` zF_77k#6%3$iqVTbT^V@>&1OY|&r1u}_G$0@vW=fs5lIurOOPcB@ka;p77CDudTGd; zD~W_w#dxW?N}}oW%|Gp3pNXc5RhkvNmYPFh-)%kCtz9!b_G8rvkc2qvb10qW=Iz=Vi4m{qG%T(}pMYL#*jBBi5G zo&qMwOwi9MYCsmn6_(|)gV4(f&&ovf+Hmj=w6KSMBqCSA+L;b3)2${Br(NpRF0Phn z**Tit6MLu$iwg3AFD8XWBKE!AT%{N#W>~dA-?>l@iYhSY9I5ZgcT>74Y%=i5v}x`j z>dle+0oB~F4IS8GqSg#fjaCb?2p?|&Z7{=yz_wB$k5ojI)&tC;(43%`DwLfwEb~&o zYvc##j^Abf}+TorWo^8ucb58!$~6R&{~+ z>Y-wWRU+bwxz3@U%{;T4&t5mi)Z?FHE-BUitD&PnQ1xS^YJu#H=2*+{ZUD7qS-*|?us@OAlt?Y4 zX^%x=%4)u-`Ef#~Qswlw-;V(*VUm~>U9p$>=x@izvi1qs(}T9Rz3rW26Whjqz8?G2 zFRO>kx#&ZX*DXQs>}gpdsne%5Heb?e^PmeSW;?c6#@{OA^_(# z4uCT1pXd4P#KgpxI-O1)Btq5q-e+I>(wFk5KmF;BkW%2x%t^|fb3bwT@Zrz=`Jey! z?Qeebo6i7V01PDM1f~6-^WGmevv*3GEc;_ADp;})Mvf;}s6gPZyY9NY)oNwqCfZbu_m>XI0SfEJCWpErhXpsyK&|(NVryvF+(% z`F#Y2&-A+GOY?;Ouu)Qcf>WIS6Y!zp_#X-@9cb^8^va?_#AEiDJ!}?{Uo`qTCI0OP zx~*%ky+HsMTyXAitoqo;J{}md7SV3^X}9}St1-=HZO8;Li>TFBMgCs$l9vn}0nQnX zMx8XxD1ESTY@C1o6PcY|13kxw!`7q# zj6Pz9F3TY&3$DeVf;Cf+w+1J_J2RG@e3L#PB6Y7EY!A_oD?zuti=5V zB`^>Ltd8;h<`Sn3kB|Mq&wtWpp4stxug+;qRfv)Zr8(xY2+68uZVD32a8lb~AXE|7 z$RVqFpKmg&o`dDfa!V^z_a9{EY@2@SEsJ5kg7OIZL7I=qR+~=YBG^$F z0-O=WSlWlh12A_h*g&e+3};v;gM}5%%`a)U?^r*9daX)p%>iKV+mZN*e~ zpa@&(Q-DdTPed1E4n4F#U|Rwly!c^I0HeM4Ab6znvsGF#n)yGVYDZ{2PpO{?Oi{y+biSUD*xCxQBqtRy{O_mYpz_$`gh1CeD0H+hqb#dMD{}CAgaFp|Q&RsyEz+ce$=Orzh zS)<7R85REXW)|Oa%Prr0+~Xd%n?i+NQnqvF&cW{8yCI|wL}nI+L6yikH+bV4-}shy zzx&-4VD`;#e)De=Kyg-rdV&VUo9?{x&OhI|bLVux`!STK<&yG? zFTOb4wQH9LI`4bm`@T#7>8)Z|i?(dp@(e=hIT$(xhidvMLC9~MAe^_x#|}`G{%a7T z+R4aorFdYs*xq>YeIHmUqT+E8kw2O^gOWP2i9<6j4U^Dd#He*s+;~g%;Od`%PVN!4qxQu3Z`%nvx*5cHUwmA zmm2|^GAL@6t17Sv7Vzxv&TGe>1z9?9c4`Br>X75{xiJ<89M)MesVXMTQ>z($C-pK% z?wr+)d7sM`dujk9{xA0V!Q;B1~X4>sD1ap z=$pSZ&sjes+?G0uBgniG32$Oh6>fuQCSXmewPLmu!MMbfH{6(5u9$L+N=p`3R8iN? zJkZyK$69f0hh5Ho8>kH$R{>p$#w}+97*xQf1(`>OH1K;3+7(a*`j)#?D?|t8eY&sD z7&W%!2_`f82O-|(={GE-0^}4G(T~H-z(EqhAQJ~?ExYGVe=u*+s-j3n-BrkwitQcG z>{gE!3^iS!iie7aO(AMe5xG|$N(@k9upuL3wdCaS^{aA9RlMe9FExBkg_xj+%u9FC z(;$L&9X8ak%w^W;&lBxA;Jbc6ZepwtTcR<=nHxk6deRfm zeafFE=BEYf=Wfr}uDRyTQ&Ww_dt2}5j)+YItp8QW&jKpWRL!wx7C)ANXNC|JuMqN= z@8JYS{~j(YK;#OcG}s~m^p6n$$VNh{1N_GY{&0+QpPHIFg#g+q8~}$4VBIf3w;#>H z|J7gp)i3Kl`)nXMW~qqJn7>m%yJu|Bry=UGI9=;9c)}mw=s; zP6HOp?XwyYZ=7<znw|K;xmTR_G3^WyWcGJqs^<&{_F1jj;`5J^7BYLr%u zM&oRbbO0Cy#l8^oTVZXotc>#6~|mU21-^yOo-~Qj2zQ&KO<=XrH(*UEMJacC&aPYYPDWP zh~_^9crS1j;Tn{Jqj03cf5}QXli)PiU7UZ}#_O#F`!EE!nJv}q}Q6+KR!hJdCVTOV_Gvxe*jkDB!DN{ebN0ak$3I2-&DOm z&ZbQpnVPCIHdf=d+xmR@%U@R%IR=A1Gc%JMJh-1`bCPr0+Ej%YR~kD&Cw z-c#A#*`KtjO-lBf|^5UoW+@JG(IBcy5;A#YatsP~! zU-QIRzuao1O(KYzMWDl^Qq|-0#7;T9Afj(!4#cS@Hp)#InkXFNJxoY8xdBV6C`T^! zlI2o$XU!k{u=t1b+V+OKucom%_AaR!d~Xq@3}7_S{{pQwAnhU`XoguVy9Lsr2~&V^kY<+g4&p~ye_(+p0HYkt5i)@FJ%h(_|BW< zx$5IpJGGagcFv*hlB^rQ7>qIe*WYGiqal^;P08{LZ$V^Gqkw#`d_jY(!motAQB|Ur! zZsPky{94SOV+2ZnK#pOWKBQv|Q*4Ta+tAfM>3sSwI)|?2AI@w0gCDLb+F7&yz=wMl zkx2NyY-vIC=CIn5nCQy#Tz)Z^wHD2m?-KWXOB`NcPc*QbtEpzmRVSoJl){K^v_Cx1 zel@z>F#hGwFW!~aQF1R`&%(m}stH{Hk$wS$9#lQ)(%$yAcaBYN8~eo}^*?9+E7yJH zm-p`7efuB&;pIoA;}?#IikS_LbOIdCb4`9Lg1n#uB~E#nOIr>alZ1(LM3_7u1V&Zz zAI&x(sDjTDfPa;6u9G~bUVTi99kCG9^vVuMaWUL1oJ z&aslj)GPk(CX|a4;0J@j86&4(g2oceufMl7B9vESHRA3GV82HImgB7Uu_|FI;0VKh zk8p4;?xPpOBK;u7&;H*1Pe1;=w{W+^?5~VYs4^%m} zB|Jn_eKY$FNfU%BBu9NLJ=k3o+x=NdH<;PiPw@61v&ZaS&CFl4{yUF-`Dn`?%dWll z291qPaPrABm_=lnNRpVd&N_v~#THXjAsZ=|f zcizQkK68ymhlWa}!OopKhEadWNz;sOHuq~5C^n?;eRI1!mQ5+hp? z{T{@9xn^Io7_Cgfrn9l>Ezs*=2llgNUk|nWs1FA#psFJ`k>~OiVX<&3$kmzQ&9DkV z;n0EMQBPj82K^eS1`gT4x-^K*rzw6pmCG2S;u3`4mkm|#L*}5UMb@r4W*w|}6d5cP z3)Hd@b$2Dm4>*_{e9;$HA-j!WtOwh#jhT3J-D<_JCd_B3t6U2aP!HS81vo7C zJ?`#zU?o?XEm<%W?z^>YxNO*Y46dG-t0#2Gn3Y&6PNAxtS_)$YU0s9-bTK3Krhua3 zVv;s6L}XT#QR{oQbl`EBvn|ys%xp2XZi89_xk=QVG8>OUvC*%Z`c;D(RK|_UMu;XH zSz-a+Wso?hq!F2`nQ5WV;=lBnJ_lt>XX6?#7w$C%Pa1k_LV~|A!@Rjd?cY1$`I zkv{2s_BZ*`?N`M!=eGT!kJqVetyn+x4ANY<0=*BU_M+$=g6g7}=!twFzv!{$MYF{_ z#NL~wLkGFXa@|lHa98Zr%!31QlE}H4)dlsxztHaeznL9dKlQtB`Jcz6;}>A*DBvF!PCq@{y#LS*Hl(>K ziUP=oRiHD$Dm8hI@cY9qgm{81Bb?J=R^9&-#ouENfMZy#Rx1_fA>2J(0-)*_U|Iw= zz&DED%gFmE_%D_2%iRCS%#tEfA2ZCcVi|ZMl{!1NzxB&gW z*vAm~6a1THmY_-MTTssL7Tb;i<$1m;5xtfHkQRTV)d85Eo*p-|9-$xA34LoBXh~{V zD4SSrt6uCUAvmNuv$M0=x~Tu?y}O=aFuGhya3GYzeT|Xx$O!rgiJ6u6@Hhb!`u+ zl>$bWAGMMJAi@|{UW22}FiQP|`cZy6QTA2>I4FP5K{EDO>{&(WAeas#uW^mpS zUwVJT@vgsX*Dl3zg(!l#xfU}slfWuHe`aQ!QGeu)9ozZrXFty=r<_5h5+UW7MdZ2G zH~}P2r_(3PQW}jKwOWlNiH6&Tus;h`X=u0Sk2toYSz`XHqa$L3&OF|8eYh3?KJWUY1-k&Iw92O z6H^*t$&@Ebj68C|3E-S+JF5P`m2xxZwl(*ykK5#FU=f1n2c+f<A8^_H4X*j*wpOkcwTXlzF)Ep}elAi27eRHxf}1Eo{iP88js(>V zbBXX9QEvl`4U8QPS=O@6ds;s3C+v(8o9pN7vA$*v>JHTmyijB~3+x$R5Vqxu7OfbT z024*~W}tgCP|6@=K{Q!g===eg2jp^9l~c>H%@oitT-hO^z?auKOvB2I?6LfB4;rpLpK6M)l<;dp*W!;byRcWl`L< z0&}6%pEQ#5k1+H}l>ZIOcYZvcIk)W(Tv?;Gqsk!l47@iY6v<<$lrDjvhx&r7(Us4= zY%Y_vmd#psiaj^N>^%37>xO!lJDt~94r8o3PeyvoefO99GhW$nv5m!75m4kayZN!P zv4?E}WoGtkZ++`YPdKlj{tNYUcjryle)V_$;18-R|LrI4ef?uOBKGgvm2Wuz{F|!I zmCg+_V`uTcbO6)|k+5>&yv(Ci{r@QD3H1LtR%?LQiof;r;1fMTf3(;U=k1&;qxOXh zl!ySDo2*9KuO|$xWt4pIYytJR-GOLf`eg(K>fdl5Ya!AwWS(I_g{+jmCl)YMxPJC z%H_-BFZHs_>W@amrej4~20@LB4FcC@~{v7bf579mzv&ZZRv!ENa z#uT}^<6S>VssukX^!q(pttw+<;qz#;zPxqsyz?%mrnb`WXH=^t=r5-=tB-OsN3&Tc zikidkN@oGU;$n-Hm3Fb8j4T@+Cho=hov)ItJ|--%njRGv900`!4YBc>bpBPbtksC_ z{adcwn_*1_QMldC%h$R_*K_j0gB~+yJ2ENT34Ti27{i#b!2;eJE;EQG5EW67360FF zzO$-(-jmz(;}+9}TR-f^Pt9;qALILrC%YB#XCESa0l7#e8VE!H!D*N-h1w>+@zw9k z=Fa^hSO0p)zUwm7*j%O32j9!de25rZ?8KO;7#fdcovJDAK~w=(gPJ#7hR9`cWSo@C zjWyg%zpa_&oUOBm75Tn(n=qH4hR}o`2|bpP^x|>6rk%@3H>kq8C)g;WJ(h2I{rBrW zm$M)Xkja&ZZ?uwt$^&^Q`pW}d4u&Z#Q2&-bthx&Z}E!}MH-B*%^ z`XXWS{O`#D&?cPMsA6~-?Hsj-?fO5=cEow7X-c(PEkUah08G08pgQ%`Q*UE65}N}4 z?6c3#pZ2t;MTN@$DEKcySwg`KFthS?1$ZTaO#tOHZx#GUX7;r_&-+mn71?ySB6{Ot znEUU|ELNykFd8AY)y=Isl7TI-TD^d^f|sKXfYJd1V6(Hc<$Y0QHG145ME;v|b8~x( zeEp07^ots;!{yquv$MX4!jHPrNB1}S)LHXgkum^*>K~14yWF3jo15E9IJxn{QBjr- ztONZb6~JIvy0F7q2fzb%ge@&Cy|h}bKFK*(PLBHwHG+qL{xsl=1P8zht7`p6vx3`4 zd5s3#dsVB^(v8QO*_Z8o!c!jBo0;vC^mD*p5uA<>m6P$6l0Iu@Uww$S|Cl{yYs{1f ze*W6I^wROJpQe45mS&lpoFR&0s?}r-P%oVTSr&%!!-wY?8{0?}LA%{1jw^sKevg@) zY!XF&SQ#MCJyGO}Z9yD|ZBI>&v1iX+96r1cFuwo$UwmBm$O$ z*N5B66oAr(MBC9PfAN&j2tv5u%Xx*#w=--)5P|MaydsxD+w9~+heaG?)v7V5niiU} zsT9@Q*uYGA;Yx@mJye`Bc}p|HsuAN)Zs@>=`nKV$cD{1YC#Y}Ea1ku65VQA=rDVnw;P+8?v6s_zX|4w>$Z9+ z9=iSlV8&c=0f!TCXMSbw^wS>}0C?%8mnIuGZ-3h9<6B-68P(jYKeyQWr;W|+U%2dl z|MqdZr;lyjZsL=Amb=1TVy1EeT>{{U)d*#opZxE|0RRQ?V)dNLNa15C0LQRSr_&xA z8!Ow#16w35nc4I&{^Bp*efQmWi`B@#fd03>^(|M3`wesbflHA zP#Vw*a9;xVs-%5U6x}W9?80$S5|oBwfFsU;V(2}>MnQIqPzj!72q-Zw%Ad4mNK_^U#orQGoRDc)YjqWJkQy- zZKzE$bON+mJ(iZ1fS5RjB#Ah5=x#P|K7~pp_&xjmj3^4znWd%n&upFhU zy$Hi=Z92eRaVlR;amz6~T5Us1vg(SFI^%F6W(;Z}k3Ym|oQTFfsyKNEgMRLb9gQ<; zI&_usXD7Az&)@i0HayO};?&?JGD`~G@YQT@!25zCV1+ucOu{A*KZwN>YHr=)dxt;9 z&P{jQ`(KuF_OH~HjK##Ub4Yl}`i89LEKa0KtRS1?gt~@2iaa)!K{hV6Cm~6VO-*d7 zs(QC=kDr~>wtH@8rIp$4TF!n$jY7l@1uk+NqT1!8OKv33zHDEAjO$T`Y5e_MZuGj9 z`(@p#4@rM{2>ajYc|6c|xv%9Y_Z1um!+H-gd_Po20E51uGk}xj?X+IRxW$^0vB3ED3afS2wvj#FIv{!OUu=L1f4qRhf^Sftky^tbeG-Ex*_0 z6(5xE9X>_La+xO6vc4Bh>$1Znu5&rmz3;U;NJR zv@W~s=N|Mv8jVb;EGv4e1zO2bZ8XpJ--TJI1dy{zbAHT@!#bVLAy$E_Bt6c|dY}8; z=l1{6AN^6rDmC5%SpnEx5lvsO{2v$5{fl%gnmdg#R3OxPkPahThquBS|$7+jG@DEl?^08WFAmvCvO##FQ ztUfZ1y4*Tj-#?GmUu{Iazt5_YeGUvpOBK${%vf<8DXS5FH*yZ6R)WR{2OolMKW2~F z8arACj>+${ba1WKB#vXYZ3|k&Wt1MuNIlHWEz|3D$+AEm%JYZ~8#WU~35O2d&4vxz zSXkJPb4IP!WNd6BjmBCzk6y1&mgVGmM!(-D%c?|?F&N}5EG!cAYVV(UEQ<;UfIUP4 zq7Q|wDFY}AA<84NMvp>7JMQI1Hb49&ytAf29_@CBYGzq)Nhd8XSu{E4Es?3)H0C5W z=1`YM-pFtkc`2UsWEE$*p@A1lJ(X=0y>XY^%#&JL_`)Y_{3#t-(lPN0nbioSc1DAK z#XB=wRYC-dFkT>{9VAoRba#7~yY(NwVK@9imnZ*9L(ycS$Q-_(+aR~#*KiP3A)170 zf_h!qplis*Kw`BbD`vwB+$=9MolaZhha zH&!!tJ2d8xr2P}_(b2-04^4jwZ;p6&`CQctzRlnt;BD`G=h#%z{I8YBpKfN>&vp0< zpZ?s>ed)8GxQhUK$|?g7&NP&O{j%8!k3v1tZM38u#p|)6iH{l3>-BCVL@RRwAkUVT zmd^d|@BZ#tLezGsy5DFtGKzA0MHIix|1V4amHGao>i5pADaOTwoH8MEGQ5Q-JCZq&HVqGqg0*W>#l7C19}&7&Gt$;{%Gq($h(DD4{6 zo?I=HdSj>`L!6k!7163%lqK4l&D)k-EVWvy4tmyXIC@n_%jL9lsjdK!j3PB)wWmE6 z!Fo8Yya>fq$`OL-0<{Adgl1$m?IWx8JsUgT&Zty1IW}!JVP^40nAvGeZ$_1-DI3G8 zHFLGd)QgQl&2V+7jhj`bkQ*~x9H6qp;e)0XuIh;D&iOQB|8KAKzxj8HpL^$&t8Kji z7hhuLULs?Mm7bAsh+e`Zb7ny%Q!-2x%KsR~9MYBYgTGVft}jQsU)J@DSJjD5t*M`S z8+eb9VuOPAPd+E2MJ!&CdVMjMiM(%WbYz1CxO1Pi_THo0)#8rv0RG2)Q68~$pp1+e z59#&O5pPzntZeL#JL>lB^Z{IY>7~iW?c1Mr+LJH1Br>b!UfqLp3x7Lv*2!P_${&6u zHM8u5RT&6zQDpWsNxxHkTTaGHFl>Zq;v;I}{9vqzM3*(vO8~WA*zG@ZD!@_C{mwh@ z{I_$?Ij0nG6VU(Cm%jAFz+bQm-aO#{_>cd%+>VXBmT4vBU+D~p%&aUg_!MAML1!NY zuw~AE0^9=J3Y=Al`3;Y^i10`2)`3;#f+LhN^darZ)ai8U&v?c&zKhkIe*^4>8*W%Q zRs$80bODS+&ONKt^UBQ3%rLrNygCBqzC7LpsLssH^wzNej^evMstr%Bi1K#{_i8z} ziwF+GA@D0w1=_5pyOhk0V_E6cxnH(<^XAUn+}uAm8jTl5QFIDHSg%i^4RMrJN^!(m zaSm|rlivF~f30&Q{r|`U;17eD+0~Nffj?k1f_S2yd!>`-XMx|jk7XaT$LvAckwb-H z*$AkRI^%k#|6?pw3&+}r`CrZzJ%v5}Kc-U(1t3V?n44grv5 zIa!utX6)a87b`1ER4P?AZ$5?b@g|24A7WwQzykySl+?80dEXby>Hga53FT40&aw4N z9+0g`0T_*l4a>H{s#uo5m)JoMXt}~WznTsZfi*3Z2wXDH%F>)BvkEfIc1qL@-!-#2 zC#HegN+{D(qytzq?nT9s8w>_H2&WsIYs) z|Igl=$6HdB=llG+BWxhPk5ODnL@?lUK*9qO)pHY3ev6_wCVg`zzPg&#q8zwZXRu z4)hs8b2&68jWTZzmaa2a4oPtzs*GUOeyCNkyl$w1^2kgz6xEH|5cCY0 z@;;-TKwC!D8x?2BIg1=*d9JygZT{}OIr}Tf+q>2g4P7Xr=bPCx6dpASYIqfmaiOg~ zq;ZrpbD>ExZ-}knKaR31-NZL;kiRwKq%ZYZoDZsz- zmRWsP)*h4Y*=BanHciitX|l%$I&8z7u)K8pFFh_49>&9ce<8SW0Yn|@2D2#d>FvA6 zf*0lC7c;YWyyG2fHk@?&KUSPyD&*%fZoPB!UGIC>+uk<&*5CP^LzZH2Y^?1DmR6&} zYPw5AC2`nd1%M;4h1b~Ia`#A<8XYEf2<_?yClAW~`4KMNQBCu5(M1>CTEx{;{H~`y z^{Hn8eMKC88Q<-H<2QbzwEmX_eI@vhN=|^%BS2E=AyUpx-bO`K1 zW%f2asZb7>g>-<>$zV{nvApL!C!c)s;|hg9*|xjlIPP|d@AergKZ1F;deI@7E5}xA zczC!rIyyRC0Q4puWm?(CwPJshgwjh6#TUp!uKX)J0e*)-4480W50M8VCrPSWNUQm%JSvApJgyB81-|VdPWyeHues(L z_4EuB-(sewX6Wth5ciczfHZBBWf>P=e6cM)eqv%5&UxZEX33HP8jUb5WLb+ndnW1W zsZy)e86TgZ(U_s#ZqaVH@cu4#?0~tsxxLPNe?&%9t|Nub9=P=VmQ}#B33JyEIfP1p z1t9?QPPXcz!Rq?C1e4gji}M37S4?ds1$D27ylQNhY_Kt|{<}TMn>HY79-1;nt6~IH z%RS1C45!GeAOTHGeFab+A>$c_s&9(ld0cnGKYLj)?24HUEz8s8uV@7;(POy^>M|Gd(ReHnh@$Y zNXowL^mzvv*rNMUcKw6BZ;zJilq<(@QMl~#mS9>iY}nCMZK-z*HrrYjC914i-#+zQ<5(I2m4;bEY^kl$g9k`>vF` zuSxm+@AT-;PdUX$wTn&BCBhyn8D?lcn_>v@FH~QI)pPhEjC_*`ZbSKhSl;-wZF>K$ zcETTJYJIcEr;($XdY5_$ha!24+9IEny50VpEornR@|IDX7VUA_-CK-J+ce#r(Du44 zubO%bVuirgg{-vsKZN%ez{~9c!18&3V;1%9tXB{E#b9RkzW2Sa{@T~Rw%G-g4qD#! z?sxYO53l~?N~8^DX3bo?zxDO&Uw`wB-`#S^to}t+`GQ0^n7K~mZuRcwevu@aMw=>vHu?iHWL;`5iE@R2TCu1^0+eQ zzjXa~WgUv+X5R9ax4aBkO^2w@0k^kWtuiwPbga>(B4c0kLP;`LB>?e0Gn9_dJ7=G0N{81w|#8WrCjJK>eniMuh8*07#JQNrckmB6~AT0aalL{ zU!f={y<1Dt>30V;ig%ZFBF2rvjc)@NvVChHYQF##Jv8~1C z3G+MczzV&^uKtsgv-I{>saBJDB|sd<3(A#p@x>S0HP>9D@$pg2Vn#*=$#YMZ<*Zw` zhVk)nwr<@@nug`g`t_%>ZQGqpO-(##;16)c72m3(@%j13>%IvO@2BLzI^dav`R)b| zk(a?j62Q{xwz$+jru}`+O82*1xSpJ#M_5zR-L(uKwd|DH3H5IR%$Zw{eBEIUjIpTj z1OPHugaa7FgAgSmMWo({oFiUZ_3aysJvX)eruW}$8(uw&4bDRJa^M_u0rNyE9^AiwS}2i%#+|9lKb|HQf}ez9W_}1mS#XEe3^XNM^N>!q=~I* z!B7h8Do)FWmYEHjVLh;PgIK%DG*C6EYE%cH8sVHbnl)3a*YLeYrEXT~Mb?j~nWeD_ z=SaMfDByHgbNCA6lWqI2vl{mQA>Z7+nt0%GSoB=OE|#+ur3u~eAcD7xIWu8qKIkvx zoVfxE2bIzdkpCBc^3#6P2k(gnMpOnKgy!N%PO@`L2dEAntk9kpKRJ}C2dE3r^ z>`C$;-JkOujBMPvF>1CeC-p^*`Fz=3mZ5U-TUsR@fswmp>HhB^jsSv&3GYD>UaJ4y zG94UJi345oCxKt4;~g@4)m2x$>amY~>|YVmw`H$?{p-s^TtU2N1R(DUt32#G+r(4o z>i;5r-)!NsUb^Ss4%`cz({=7r=C_OZeo6&Hp+NKDr+LqS)XZu-ckX-{(CFd{r~*IP zxN&25^UG(j3|;63kv1|iLIL1Q1wb!_CELuV3-h+S>( zk61_%_-cYDz==FKC4dOZvR@M`bS&(M@41?I-}e9d)2%%pC1@ zm|o+!Wb#jo6oA1Kz|7IxJH++Ze_OxwOHW+zJd{d+JWrXLYO;KJjWui50mnc1_R1Mh{T@frtom(y?^r=kId}<|qdN0IP7dEtLR; zk8tN>T^}8Sa&-1%!IeGoFeT~sq^+OzG;MlrkL>O((%oCkwMV7ew3IcB(Y9zbL_Fn* z#v$J=(g~Thb82{t&AVnQKiA65*J75QTVptNQL^lA%f>${%rclf;I3 zQ)&*MIFepRb=at`hUy9<88NbDPE*SqjXr0!#N4ueShC!F-%9-2^~Pyu8pob#Hn`fB z^$gkRBg^dEWh?CXN|oVhtY;EinVI!Rk!7*jl*3Oud{f8^BH<##6$sW)aEm_d_xF)p zPK7nPtIs0CMZ$SOQ)t@ZryM?uL*K8=%z7rV;c4vnN|ke$t+3Namf5nNA+y2N#<6D_ zr=4kj?RxWlD`ClUvt|8QEioE>PE*UAvSp5B#H_la7$d_*((CYvQ)&+LMiLvwf7e7hd&*CtrBl1(#iRP{*2K8#bK0=BzW%{l~;< zsU$z!<|n&$jeYQM|MqX^?)wb)Pj>I#om5?Ro(jvE(6ASyUW`&it`NXn=`uV*=$D6* zH|B6kOaTAO=m4^50uU)JfaNgxMU;KEyWMWrfsYn0`=yJ$Kl98pUr6Z7DxlZD{`D$C zOUe{{rR5(w8&(L#?@izd#s5iQo0)BqG)4gb3GhvV1@mY^Hi7wb@8{#XzU2`M@L6f!dRLs$_)TR zBO@bybllHNPk}N8UO>2e#0csRGMP0RxNb zxj3f3OtqNNNsq_@+ERvvJZw@Zrd|VF!9uT(gO#%Ey})l1!2i1maPr^JJbp55u^0rd+#r1(iyb>#zUzUeChC z7hi1N=TxgPNm5P+LF)BhmMsfOo@Qqct%rVM?Po36VQj|Oyr1F^M%uu7;2FR<99$^V z0VSj@=;GHde1!K!yVaGEdp_>`ftRy+%QPr3+$Z1$g=U0qucRQ^W13Uy+XOOawjNP; z(2y}+6~is)F;7!QQ>dLo{}5DbNRf9fIqy>FiCr}GE4^wxY0fGuxBJ$eS1VaF4asgZ zyI82d$bA+teo(R$Zo@X8I-qD07ED!96OZudCAB?q)v`04JNNN!Y z6^;aq${b)QBBT(s4yStOu5^gk4$b|2q?EIL zmMh)R<-zBLV$2LOp%iGO!PS4QiDOi;rFo=gd&Z(_tW_&cu-ek)KpUDlsviwQD~#ca ztO8__k=BfM1ioryeTD|il0K+cP1GT+8Y!k&SVfKqvp6!vks!~MP2_gVTN?VEFJX7z zGot#6Ct%4hWA<#rHW2RnBDfot!sWKCaAPeJ6`CYt*<4-D|&pM zLNk-K5K-i*O6FVA?1b>+P~9Ucvtq6##?$$je+tXLZQ7=p=2QUxl}wpOgJ7{?zI?Vi z_voRUhv*vjk-G~(-m+p!jGXDXo=W9DnVHSZUixeQGqEU+u)I>kAA8o>XMH01$xmK( z>7|$c=!z?@IA9u_cfb2R{XN5L|Fq`v^@dr?v*VlJ`pO$_`QZ>>cqM?(OD?A7jV+qOZN zHUG=Zeg)>;@8jEVzx`FmAAkJc71sK!3)qK~b=>h68SUq#Bo@4v4q2aB$Pi$Jv3IAL z-2t4zKD<$i%mL+BD=ynz53^1>z=oM=*REZEL9qUpZBESWtIcL}alZP}13-ke(_)}$ z1#lJtgijGxp*<|L&Qt7Xbab>iGBPqv$12|%85x<8)HgOZHhqB9fQ*igYIu0Kzv%Be z0o=8L>Cw^Atg!Z%JOCxvMVVHw1pir=<$wOX#lEtQZ6Gfd6C)#?+}saDMn*=q0RPZv zG+vt|$+5r~!J-9l0YNbb3&-DLi~ba0e(Is)nY1s3K}1j%l+X1NLO&fyQVutW zdzYlI5y1QXAuBY3Qsp-Z;amTYFvdif^ZpEY;~}l=qw=T#nYr%(bf<2L@u%*ud})a< zWBHdZ9RV_GwT0>XN>700%U5yly_@*@*T1c&Jf-6aaQ*e)R)7Bp!^7Rt2AwG(D;S>I z?VJbhP_ws0`188IXL27uWG7!JBFs(efaek#@jVXAgK|JA^A?t8S79le4{-)MWLY-9 z@6eX(x)+f_pRg&RTayf!wNvME_1_I8CxB|g=Daa#Vws?tK|6)H)bNr9mtfVJ)UuqG zcevE3nZuUWH2pQR>alzB)(xL0K52(h-RW^Jz;tw|keLgkCZtH8N6HEr)2+~1gtg5E zj9*8|N%XG%Z1kO(>os%BE&g+ln{m&%wxVc5ountG*2;<6o@VZ76~shT1r-r{NP2)e z)*L{sIU|~p)f~iilRR3I%K9<#0hmpUrcsNQX??wF)|e4fsSS;d%32Lu9%HpyL>^Vy z8Mm}Ux$sa`SbY@1Zz{}NTHOETPOM0NUZk~Qa zJp}4NGs8@|u&Nog$jB>Bc{L(WGxEEe{&UZ2yJvmB&%X1ilP#+LlFU5^vnLr=>ollP zvz2WAMVACTY~IiF-N_L5IQ*wX>k6`4f8?s?G&TLT3bwRLoZxb{S3Sv3uS8mZ`srs}kxQ?B z&1)|E_T`tqwYjfjU;EnECd=1tIQOyZ>(4i+W?nP5-*xZb<}))tIn=KIr8qZGH5zAF zNX3S5%{a@p7eAMvXPn?Z+9oWr*Agst6NjTt50w-#;Qa(E@(^JN%n*R*I1l25`U@ai z-}I(89siDZyyLBsUS7tlOUjNr?zrE0{No>g)px)9-HF${<~7aBFTY#`&=wsABM&jP=Io=%`-={smaU zCosoCvcf}d5wF+l@00Xg;AUVea7^)u2>^V5fW8InBs{AlgtnLUUo0h$z(nzVkON!J z%CLwdLID6^Wgtwq|5o621jW$13G*Cuo`qkM^eble$-`LnN97k# z>W%bffV}323+`2iANc5}K6mU(U-0ZZ_jg?B#_zo=NC3m|&U4LgOP;~O0Uq<1$1pWD z$B%w=vzpC0YPBAgEE#6$(gDg>K$eL(Hm0YW%*}Nk=Pb+c{?OSk9C~88o#TAm?7jMs zoqTT*VO|^|kmY*d2Ry*}IV}D<)27WshDBE_49Vr}aahWE1q*co^m{bz(CyU>tYxRp zb#Ve5ZBUn#C8mj3wj_m~26)4oQLxtz4ti=8=UUFIiIYn`NyQN@>&eG9#+$0=%pJ4+ zqu*ueb7qLEyG+rG1ZNejVTJu%xg-lK7jxz$y!WBv<_h+-8pef2bc~Pcr!jE)XQCJG z{61sf-)XB(nDo29Qq|B=Ra`Z;sOd?XUgR3+9Wu3J%%@l)v%#8}Z5q)|^|f<5aj**YI#DxcdUjUPbi;BFl?qg9F*AvnR4%VT z6i^9DfspCFb8Aq?0^0$S58*gCjOEl-ZvInRh6QSZ+JJWfiuYS&OH-rW$Y{4=wexm- zrK&=W_kF_IcR!wug;Hsvi*IY6HuHQ%! zjL57Vn@=$pdlY*EXGAq8S96eOHhp))ExWL#?bk%n3wN&eZs>7X{5;Ig$5;>ZL9fjF zOgS?Yva1%kN;N-2mN!`Z5b}?cwXSjFpZ(cgt6u8!v5h^7mQ|2M+V<8&7@lf|eB0aP zq-c&obwczsL_3uxyo|J9``?4^>BRj1thZ&iR|5F&_mBiF1U@iv&aX-yuJHmeSY;1D z1GYKO5;Gh|-BbA=&1Usx7B2Glk}IybBER&~OYfk?D<5;t*&nSre`+Q2>mGaN8UNAK zcgO4h_HY083xD{Bf4JZrX4s$q`SEK{IQ`Urj4WU3A)jgb8z!fAf9(D5e}ChB?|a{Y zF8P3DZIh^|i#>@u@K z@BMoT-~v5p(Vkk@ zwNoH36a&x+3py0?IYQfy11=_nk<4c$U~j9pBPcL_Sp0TA9ln6YQnqQ1FlRYJctP1$ zrIg+UrFTS=BS--NU}ifc{T6`@{EyiCzR~slcHnmjW9_|!KJ6}B9{bypzG-GVACg8q zD!&kN>7~z@1i13*&u=BXX90-f=#L2=Df^Y7p<$LTUC!+6ECU05lu=oE9xYG;m^lUq z`&hbkV8QWmOh~m>EO8r+Y##hakz@DnamL5DasK&F*_ZO{e#=L$x%RwB?fGz;oamlQ zFFkK@s?ozCA{b?!PoW&A!;y2)vXBH23f_AbPAkw|?C_MMu*elm-4$>HML576l@v3x zQ|2brzsUu_wqCM|87*%buZv|dZlH;#CZU00Ezwu^s`MMaN0uXRP2rt$(MV;(_>W^o zKQhCP>u%u0=XZ9h8w`@Rb*8o zt(j6Yi#&3<8P15Em2Mg?ZDrQnkumebj1%6F`CUKk)6hw$6IGsS*fYSMNNM#CfvrIY zP_kKhWafh_i2=RNHC~*?Nb9}M5dF#&I|L0vF z{NR85{%c+{S^6da)nC1TVA;{f{AtzsqYbQ`*^cjjW8)il?%cBTaJc>h?1oz8-D|L{ z4j`0CTpvyMc!1KqU(y`G17JG=_-`Os=x&wNeguaB^bi2YaRk8B2DT8|I@i_yhpmD~ zvRr@t^^?FdGy5$`TM8gakwWkI&6_v>;ktF}{$ly^<#+GewJR^u`}yMcZellI#NC%E z0y8taUDC5G5K@-lKPFf-Zz5PSYm!nrSq2tMdE3ZN@gm_@+j2j~;I)1m<_Z|ZHFMnHbIzs=wjldD`s5~l%RD^vTczyZZ z;h%e;^4DB*jVhHMDwT*lhgK`2S`84j*=!NV5!Gsl#w?WpWs1O3vTUIeAdX?@&h0cB zGel8Dnzj!a_y>qRZ|Z)sJnq^`>0%v6 zcqO}e$H8EwunWA`NkrANSo)ajn4bEcwYS|#?@3c^`&^ZQqpHM7guKk!Uf!E|lZ4C} zP&0f@s%BD86|x>^HnDuxWHTc2U{z4vENRR4v|vD3T6auUU@n5COic*4c-d0sC}Blbin&t%D%@zhjrjUHZ`q?dJZynI||97mcb}kk@9qdWY*(xZ^M}iPx>m>&r=KuLeOAtnw zm&~Ml4X#D$r%$(7FGIZGO40a=;IM@Pj76 zDd+yu<$0#pM3&bK9G0zC&7HAvOV2v{oR3u_e?sDH*}9c0 z-nM(s%({R3w=3QWj9zxxWsxO)=MMF(e!f99&6&RW*4zGKXTr~}xZ;Wj&APoWF*Cd3 zv!CsA=FS64iVkXs=o5FXOBMtAHUSjhPO!Qz15O6MONT7)5haED|1fYWA?=$ZSb%RO zfXwcN|DzrN`<9!3>$iUEN$-8{dv7qaKbQ1pW;RoR>E_zCYk&1CU-`<77hZVbXU;g| zjJt2V@y4tm-OCI9h!TL=qE7~N`!=twLUIBRTk!g?tAJ+_EUGJtpMDPfKH=W|6JdT^>?P1G0?v^1 z>t^<^hqu;`$}gJCL_L3z=a=(bp?m(K5xc zDH_5JWzxW0n95riQzrV&s4S8BDwY~b1?DA|Bt#>L+8dizIb}){KiH_AlXnnR?lJKz z9?k%ZESOUbCtoB6#N=E^W+YDm-%DKpW~&UIk429WJsVZq@D*$C`GIEd+8*^iW-7n^ zh0a#JxlYtqArZR7FlkJTF@KG)xFfyhnoE` zm!L`x{g|ye7HbMxRhXHD=Iu6|z);QMTm(~7?3f;t<Uu6e6xU5^tP}4w#J3kc6QVy0{ zVk2#=-pJL=JWYc^!LdtU???tztw2zyL%QBZ>^~%ra-P9HQKa9f~W?;@II0n{3m?A z=LdCb?>RXD1Ez#Zs(-TtKfS!ibHz&(;`3aBBOqtDW5H)62?z*k1kA4=(p9hK! z`YiWv+O}=>M+6t~`;V&FDC%KpAbj@A8|^Jhd~;bUw(P~ z-uJ$DS)S*A9YxX02w=k(;CtqR3oiJ(4}bW>%~!nQ6<>JETi&wi?Qeg3nF25`torlp z{B&l5h@f!#yqUd(VBrjWJW{`zy-(8D%xsXL445If%g+P_u77ep5cUW)(_YXqQP#>p>IDJ}qCQ!IRK z<)fpcjpBS|+Z~2(@_-cbxJzn0^14qcRl+L z7bs;07(3Fvn~M5LczRB2 zrh1Jm!{S)jdh;xi4GDTP@F~`67*Ux5co10+7CV&TZLTd8In~$Hy}v0|^RA}9@k2L8 zr~L2TR0g-mMb9^Qy0E@rQ#A)*-iu(u4+|G7a~a4NR!vs`w3EzOgT<#S>ia4Kr)<>R zT|d&>j~RD=^@&++{%G5lE{|lx2~oviIm#uJhiK)@K^B?CkyMF9)+_Rc;bvu(xe!a9 z*RZJu^0^U9HsHlj68bf?rF{v`j4F;+mg(;H zob3v=ASv#T6&?a<0(pYuP}gg8ZwP0d{}M`UKD5A<`;1QN$wlK}J|BE8d~n?8I_G^^ z<{UB)z70`IC%gnm6^JHRS!x?xkE+!=t*XaMBr_?4)^DzFt+8s2Tn+F|6c0-A3TLiQ z)IAKR7!gbu_{3;djCLeh-KbT~d<^X#hW4s5`Oux_jKat+Fq3A4 zt}~y1n)c*Z@|*w9Hh1cU=KW25^0mYo4NoKYWF{9o$-KztWcj4jn8LLhsFF&(nJmxb zCvw@;L;(L=Z-rgE+1i@b&DD&%`cVS(deIXMbn|Tgg~OjMn_(aMOuAH-{Wek$fMJbH_5nW`?G@fo z0H+z?HiC6&HDM9`Sm5W9ngyBKBSI7i50?Sw0w)mOf71l(|Lwrck-qRhQl#B(|M1Ok ze)ALl@-P3gCF$8_b{hda74L4%y!_=a|EHBJSN_4%p7yk>ue|cgO}E@~OREd;m+tMQ z^HDVlkxp-Zy8zZbbXo38 z0zpX>UIJxYeok;#uN7rmz+B;F5Ygcd5MiM=Jvutt?26H+IDVD`r@ULBRxjNDlcJub z^}O9hHh5S(02WlpY@4L(2<>_-A>^Y}(u@ONA}Bh}AXvU&-+Te(_5^Sz;aNXwQF#`X zF9`s*@8kC)Qi}QN?^yPudqjTvmxMZsQ zy)6A;>B8&C&i?4tUpV8X&;8{a7ndzb04FB)P_6dUXv{G=IU0_02}4867#Qd$&pmP6 zAqUK|oGi=dy}%|Xr+~l_Fg4X+Y-|rRGZTljU2l8a+nkZVy?bAq__9NKk&c9HU7gRq zBqyxRBEs|i9S*`1U_l7LyrXpyhhNG(+A0>%SmC^VILmcekbSYQYFJe;D|B}qQO(S^ zQr7L*;gOuJ%Y{3}U`RwQBhRI%DbzG;HBBxn9PD~T9y!Z|nwck>6V=$^*4N$8i4E&r zwppV$eUkp;?p0K|+l-53c2dzrqC0P5r@E$)Z_k+_EQDQqZ~X@68Js98XHs4FHQwI1 z!M|zzr~Yr(>~=A!z3!{1wyZ*2F2e7&&5__uS#}ZJ_24Y>CG@_YOhKd^)x=-~0S_QAAzt;AI*&OBIOuP;hlW(DFkB z{YJ&ZaUQqYJ0gs0^lEbHF{-;0eeLi*TC?c1Fn;Oaaze{uV3h;=Y9Ctqe2iR!N^HZ(q&y z9XHs>Y197pe~xkM>&O}HxtwM$G7E11QSR|`kd6sIE;K7eZIR~KWCnREo0%}1xJzul z8FudUo1M3x4rJWzP@jk1(Ar`(UOXf)pOzBqs`Gu#2ZyuVqVe>?zpOA1MpH8les65x|2dSpR=m{9g+1?c29**s$UHEX#%o1diQt@{8+Ty8h1rTg+@|^XAQeymsx{ z^GfhfCw1I9Gy4lkj{!D3{pnA?jC~N@6|wOY%=~3~xd8%TZqkV*U!YeU85yy{d!U>D zAOWJTRDTYbDJ=J;BBiwS_Ys)=+XU-;UvZ8mA(dYfpzAmlb?oK`$Y7q}Z?9EW>D^Eq z(^G8E0qwD|vF3r&5guwWv++U+Fhj5w9z{?_{FE>ktpT1)=!?bH|FVC}@P$o;ej1_U zD&Ng3&^_N~1dI5@p={4XAzgFu8-afza3kzXzfG}k9C#(6%_jnXPf)hJMA8)SZ)WzX z2T`TcQw8pOE_o!#;`%?*+w+h}I>5);)5*K4)*gZ|@M8ENLAke=luCfv**$pgnVAU= zOHmZzeagVViNP{l#Q5jA$O@nTnVA`CwNh8;nVoGEo&bm5f$8M4&inJ&TJzyV8S(UO zKfM0Ehx|f84t7mAOURIO0pa=k7WctrvXBI@0AqX282cFN`y@|P8xJ<-tj~8kimO7&v zi)x=xpGcjNq*%3rlt3euwark=aE$<+Ym(J#MpBXH0wPjx4nuY9=pIKjE!u)+1>zJM z%WROP4Ah#aH^M9s$U7GydHN@JDH$KNxhB+;z3-U;1^+xg0avS-OA@ANGp1D2hMWbC z0YQiRxcf9NSp2<%eqqZkaRXHFX^L;Q<)j zY>qW+#?V@0Xf+HZP-{cQAn$kbeIhMLft^8BIOj}R45}E7#LU+rt%g(z^~A72@B;=3 zL>^)sS!CA2kS|g$nBgkUqS)jkvve+{@!^JB`HnpM)C-)wVb_YNI&cgYorSpzFwQlz zHB#s$EBq-8a!lrBuCSk(g7*nUn7=DKL(;Ut_k{nH<&Cc}e(Rmud{L_L4^>ooY#kpt z(#(_j+~iOt^TbW5-IUrhn2k%736Gx>?It#3L62cmW>fcwt+$HNaW=c$Ztl&rIS$~z z-(yagrvUpU(c}Z24-RL!y_ZOu+PQPIzI5$BCXROy7TmG3>@2Fu6EC~$vM;^$t#3W( zx5^DS+>oAg&N)AU^yTM1;mIGVM%rM816=Oao|tKW$;Ex2{on^b*t-1k%MbRn^HKt? z1C_b#vdi2lXP&!0j`SMB!WqmOp6I_=GB~-v;|r_O9)bekOoCPRc;HEd#r0hrfrMF$ zMN);3#_-7mB|w?t?Z*TKz}Nx28Gcb0d-v7uuUvA;B`?0}s;h34bcdO}M$+Xa9{`0X zz=jPQel^eYbI(5e>_0TKpM33WU)%YVr#z)fAoEkIaV5*C6n0k}4RsYPJ~R@ALrnEK*cq7xplSG`6@M^$(qH0fCX zn}n2%y|yr0z(XQt){yiy!lL$xMSZR<>h~0aCr`J2A z<_KXxM{NB6eM!Ne@nS+GSDBx@%bbQ0lqmm$FdmL3fd9dwY)qKr|47msfKLElGP9pP zfa-LI#gy_$noGO;t^DqJ)U)BBZzcRb#nrmbxvMj{=w^|wHqdz`A!Ja+a@jhdCcpZa-eMC`Av)N#Ba)Qap z-CTI#g@;Um`QdA>S(1?bQTIqrEq?dg-uAY`H7<4&=BR^hLqza$oFi}o>{krnYl+NOtbw&Bnub;)mtb)P`g@H2 zDx|%R*#X1Xp|97d4;UH<0MWc7mvdGzUyaS;Mru1=)ZiO;`~3Nvm%7S|$IIMB4tpkM zC-}mHI4pGJk$eDTSl5DF&WQk3Lqj~mL=N18^keYfly7|lzw0iW{`m|)|5(Pc=Q|rX zK1NF_QWW95lzDHh)DwA8G004`44j8b+vD3}R#+yK%z>MP)||*Z#JPyukmcZ05x1Zx z7d4>mVN5Uu^1`wi%qE0Qf-;dO1`)(n$UT1dHqG60JMEcqC4+rtl`gM4@9{pHkBpGd zNzxqio?U9$?XpA*(+_Ke13v5dALcSbdF#LnTJVR?@2X)|?u#+@5IC%z=6|HMAr@?&t- zCxd&EnVl&(T1Mm+JPaWd#a?5~ia;pL6@jloHzM8U(HBkr^S-_FyV0lDjq~IUPAflN zS5{A~l?k;)WF9$>JlK?IOo^FUnQNflDUr;2rdu#QCuQxBhH_#DZ27sgb1PfObyKau zy@^+E4!uDQVLrGZ&`s2RM9we8ME)zk(*eO!#b_J=0RR9=L_t($W}o@Yb<4A;eO;vd z6f5FybKD(~&z|$6AN}aAk~837<(zZQNuKhwUw-TppLE_wD$cJ5tdY69zxn0sot<9zg#=RNP4TROc!w^bIP+jahz zfmac-0o(=rC-4Pe_mLb5&{hBE0KX2LMriL(fPW=euJ>w#q_-5CHQ>z;S%r@bc?$)j zyqO)S?N9#lm%qH`!V51fLqeV;=>y#$xQO`|Q2XBZzW1KTKmPIm57=6Sm(+?+A}O{& z5Ev5}`J=Az03#>~qQ&F0xJIc+XaN&{@+W^X^Vfg<*K5D@r7!)`)1UtI#}SmIRWqv- zk_cmFPXXQ|X`PuZz3Z;Kl4FlO_74f^2KObd>vDZ&HcPNa3=vkNbqGRqh6^Gqc+dPir1JDf;a~pmb9%pP@a#iwXU39Kjm9Fa3D;zH7|vFAwt4G2!0y z6Z(4@op6>i%;L)X+n$F>UQEYJs7V-qy9v+jbg^&#oiR2x_DE8095xvq9$qk(B-tmf zxpqfFy1d+%y<*f> zZcP2{AIq(OO`^U&vua|v#4OL8yq8JB1;%&s#L=zZAUZ%)utdb z(wdk{gPC0d%b_=wRZ{5blPWc6EP*laXgJ{v;;Nw>H!xISqDzPlVD{bY>%!ui&sXP89ZGX%8##tX8p|a#;h|dJ~ zIB-wE>=;?0kP8n**Gr|d@-_2C8YnZF#q;m#F!1)s_?GaWx4iug+x7k1#y(I zJ~8vZV)FAS=6vC%bC>+XsPcsL zflXkt*tg~bANasCB^^ibGMF;6iWOvmg!F+=2i~cWZD0ggd+f2tUdH~xf7vI{vDB|N zv)u$xUj_QjY|rTEXcfo(I;2v}DLVip zoj^!K+D|9T0W5UoFD()~2)rdmh>0IyVFp=N~dZxdfn z@W47K$+9-vw%tReQm41K59boR4-P#g$iL>AYb4!^B%c2Cryo+_5Ad<8ul@6c_B{9( zM(Qhn^wPr*{tt^7z$gEij+(u&&@EiI?`14|c+0_jn6reY3^joDxwBIn6#zGD#+n7k55I~_Lvvmpi$U-D`2q~xfg9D56-nvWg6nP zNIgtTv~x(BkTie{EEU$0RdQ4@S<~akz#0ZgW~zCa<+94GQJW56dcqmA7C?6d$c2xK z!xDS8A-0df#AM)Ps5DSW?|k2{gJNxGszSRCc~uMz8moq(w{F1^D+BZ46S7G|uVBar z#YD5;)b0&Nqoy;`Sk#4v!D{|A zSMkS$WL`zC$pHHaNVF*Cyh;_GyqSJz^4Ce(mz3`Ofvc~ddDRKo zDCeKcMF#gHV%|7FIe-`Z_TC`+L!bK8a4qirP}S0>8w!ltX0w^xdtKK0KhJ;u^C$K* zg7+)uoO4cc#yL+sWA#z%pW2S|_y6@9-+0LLYnQTd5~sbIw2i{1t?hgBhSgflxY~ola0<{a;CEn%PR=wEq77zn__z`M>wk&Tb&w zZ88OnTFT)FbQO?uh4}bvbix>C;Fk7X= z6EFizj*gDD7p4D$j#8pl)W2TTV~?b`XxqL>1RoYKCuu3c{r_Zw5^`~xKnQKm2%z=L zggNWA1h0!$@!MjBK}?AK-w51LgogaL5lL0xWx&S?O1Ts0xczs(22(m?tNYdXdNcd} zL0&ENilYU@gV)>8HRmtOMB zbN6@5?|$sgT2igAA$ZU{nND_&`zzalZ{%6~%|6SvzWXJ|HUXxlrtagg152<5bt#W2 zEOd)!dn<|+v&F++&IcBGoM8h2f9jsZE3y>VN?5gLT5fg@tAZ^Vm5rQ?pIVJYu~~mB zFr3fGEGtrhO^sPZ$C_&aXo`0uMVev41{ zjN8OrO}qLT6FmND#xZ}A;8s->)ni45nHMgXWtqnn@2)g9atltAH4{lJ@J8;#^z4M< zS*$vPxi)I$FqfMenW&^DYhg7)8i2Sht280XO>r;O`wTB=8O((nWB`f4eCR(+^!K7< z$XMgeC3B)@0<&2KMN652e9@d)qBKjv+Csg?+z>wPaYPQQ#UhFVobw2|V1+LMULELD z@W+S*Rm^e+Ne!}!BNEmoq(^Kg$YP@>!m5GH&$~V>>J3o>j^OeiJBVVV8JRM(kV+tj zI5%?a643c%l-_vYqtTDSo_kiLocpTSRmli8nbj+Q(*_0v~ZVMC3~ z8F?yeXE|mf_Q8WB&9HPvCEfWP5}8&bRU(jUEg)yPjj_@{4c{q-B)cz+H*X!*epevph#&OR=Q>~BCLg|CA= zZmZAZKe+eiryX?00qbN0xQPJzmk<`>=Mfe~vy$#AEU`y~NU9N-ai2|ahh0hlOg90a zqevxpBzi79!X%xYoxOZ`c=%Vx#>T3^9STHyM@f1I@Ww(pf@*;*#}Q1c1>f`XHr~Ca^|_OF)Z`Ekgxn2^j+R zW&Kwd>;FK}rx_t6A%+g=;gKR1$N@i3NI`lofebLA!*5V3inbFxdms>&4iMT_g8v1l zEsotyAdCEO1^xjFPmvD-NIDhxeLCR3l=qm~MvUc5h&cYR9FmGbjQ zk?uN|-Xq=r z@(Q|h#cKu>8MchXmSm2>*_>6Wsc+db)9RyP;}Bb&;Y`CiklcwOda?jEAD>P$uPlQ6pw?D2?R%;xjXdoNrF zg)a010fdxq)-p9(nPM=sP=IYg`Z?%Fkl#e!zM1BhJGkfXru?V=pQ2xRt7FNTF?|C@ z&yq-4?3DRn-E|gTiERldQCG+$&~lK5s^A2!Elb+SGN};~36Q0tGHWE$vRDR@e3s&} zrj+M`*evl7wSyPI94L38K}ibLhU7AZBnT0>D7ZmHDOBb}lm(=&lG9@G4KLP(JPG~cb5I^ejE~J)byJ!IpYzB=4_GBadBsQ_kjbLR6xWP6!N^USiL~En_sUFt zb97v7`0XT_*tVU%8Z|`|SPf zy*s=FyM&BIXansxBK`_FguziM{C6}WyBi;ygCU5ed%}!1mSgsBeqJ_x!_lbj=lEo| z?|>7YOrL4c`ubiJLz$=>!KxXX0D5z)NirQ+Yr}NVh`6{P(t2if_FlBGv~Lcv7q=FrsT=6e1ZjW6ZnaQt09jX<+y3``yzEfeYR5AbskOB|aV+ zn;(!>Z}3uo{W=OCfu5jhfYGMbDAu!XPAO(Cw*vuplbeZ&i7S|bj0wDM%m6s+13zQ2 z#-FWskiPmEpAEKd`}PD7P;-RBV)-U1O16nh#kI3Qn@8w>aWB-{+9 zY1agLw~ql%UtZfH0li(pHYW#jWOSlxAu26`$ZpjHhklGol+L870qg;{N4VgWFLjr~_pqmXrEL2GJq^{cPO z? z?*{(?k!RpywIM@A=rTM+rR0$4zQU*PHF(W6w2(`d%*7u@iQU&q)i z9s9+Jf}C94fw$o4tw59 zuY7pGJL4`)FT=m77X$hmF;)=NI!-N3uM3sh*3FBUODd4nWT{0;u~+hrWF3%LA3ifx z5cd0p=`FcW06f~ft|Kz z!yJKuxqcpXT%HadZSSX8M*%}kXQ|P)qgqlJy8Cf4L*1Er4l0M5^l0mOMOf(Y7!^7Z zHo`mwnMtrbus1{*UXo!19rpa#_*r~dzjOrSi$fT-Rb4RGF}_ZJnLh}b`FX998MA?N zB&NHgIOfi!V?xrcXalK><=BkP`OKi$eu!x24O~KEAYT@DF`TTTJENsT_VXfspp_P4 zA8S}Ds)qGbuGfzoi%a6z!Zu^&qU1?4sijR?h4lojs@9MlO|6q07)j^o-_77m22vmR zDtmnHqav5L`u*s5rgNsn^N27ln>eRx5;Zh+^HwTff=WaA^d+yq9odz4KKvC?q<`?B zsopw&JAP%c?K@SwPv3PwD-5=t`x>Vwxvvso{crp$6^X*SS}$yFev)2OF+1%m!646Y zenyrH44=7KBQa0(wC7@8_Tuz>+-8cbI{In!U?tb3#~aJfa{&bYh0lK+CKo>x8{Ek2a-VpR63Un-~>s%Xo5@Z5CJ67n`MgYzPj<9sOzlcW+Glv-f-4S zg0PpPGvI8HHrn4!A!19A8idNDrz9SsHtxlz6H`h8r0~R`uK>z>Wp+HSg%Xh2*zFi` z+Wt+kID}WYGRxazbS_#8wTzy601bv@k^?4ec;6G&58d$yB zeUGMnh7isu_-2pRO!6Tabc0zU_ALDECX*f|fgoK~{V@`1_3vr7z5UY1^p zP4tN?g3xuEmaPiLC9BQSd`m*cR~6A<08=Zn5npCqt%lQOTZS3)Z8rY4Fu`o6*}S)s zY&Y4*$NJ=x#j?2V(r48?Svs1Q3V3@%cb`vTCoc?A-O1`)^VS!;ySW0@Tzn%LRaSq;`!Ww$Am3J$HL6|3rF4nLoingz)@l_0Oi>+aO5((nQidUr zeG5*F64I%C`6WriI8EN9BC?VqrA}ufZk{D2mOd{pMH#*nc@7usR>84^P{l7t!|>Ia ziC-8k+z=bK7vVw=&Wx@HdqUh47^a%U`!ipZi(Xn9rK7$X<^^!82{ryLTbY8fbw*7t zIk{seEeGE`i=rq8RXzyodZv6tnhRwdQ5|(qKkvYH`_G@czItMRqIagN7~QwO!kVzK z&MoPd>1I-HtJZ!xn+ zy?ciqPA$J^r`TQ+bcALr8P2M7IIwjEXm8oAQo5&()Vi2%ZRWzPr%iPAE4j?&6arf5 zX-cOKzEc#0&pUjZ{4w?Qa^Asx&7r0AaYyrkd|u2U`JfN+(KCOB^81#KPHoa9BOrEU z>U>+odvihWd|R{Wu`b9b<^z&O4ZJa!-t&>7z`VBXKNG1oHT56kKe(h1)RA!z2(8D3 z`Z;1?o38vI{jlA4TuhrtQl0=?1fUapGy`wU?4kaWs&O_Xp&9nh zbOgy@i)>4b={RGP7d-nj(2-~Y1i@(mcyd z`0stSmC)Hwp!U%lhw#&b3D$)210)nQ{SHQmg$S(LZ}nVg+V?9jDYG22#-9mf6JH`#okIf}>w@58!(Kls(&3x3_(r zeep~DCiwTqm2xXo_e03mGU}tG7{vAL9pYoX3b(zmA?}@1QqWh(hz3z55A*adWenOn zTIvHO68;fCmMS-*b?a)(`kg@x4an54qK| z1_InI7Lp`BKaw>l8^`8z6tcT|Z3;jI6-F+j7{!{Sy9~;JC!{GbIU+rLPY7`?kIJ}y zRlni?=#| zH2KqcIso(OoG~B(_jU2+R7;F#vQcSEji{jWQ*s%4Q zO(z(N!zzO?2Ivmm8$yJ*=%u2i;vR0-hhIZP|D?fw#o(a)U0!hU~A4DS=+h59spuBW0MCL zwG7+Stapri>+%O*tWnWih8Ex@v?*w(Bya02hPyfDEc2!EFsK5oQeuhQ^cmW5 z`2j;<_zz0RZK3f1crC(I5dc`|qtt=`+)ZR+25-PW2otww^{7L8=!5pYZ9DYSDx5vB zgvk1!ywPxdh4;TBwDhPd$%O1vI9}Abhg_e3s zstE`!`eM@%1waEQxHMN*grKLMs|fS))0;YN8zIvhr-~7tYU7UcZZHjpR!ESm+o@ys zl;zVf{qf3ED^^TTqps(^WA^GDGs)$gkOS)dzRgEN$aJ;Z3Yl5>&(t5p z4YKnv(fzR;b}>z!)jV9|eoOshT(#E45CUc$2mgx21)QC?!Yla~PdU#`yycaPd4b@S zfFfyki{0G8g(T5Aif(pHzQ!?ydB)~Zi$(RM*_f?Tja=;b2s{NTg&p>$Lyv}&(dX%> z=Nm?gQrdWWd9n!_hQ zjeqa=Kib13kbh>PFK=-^q%><->^E8+Zg~Rlcu>z2z*H>e@1sB7CjFynX5+qtX2xzu zd4FzcmaS>bw+P?X`Q9{L5xx%%&;v|Jyq?g%ITRoW#wT=r{OIR_D?H~G|2&bHK%T=s z6H#=2`1n?W!#S`Hf`%M=`at-4tOn2sZX>Gn5fR^4K5+&JX0_JA7=6F&I7$e3 z>e}8ES5cgnUsu<8nA8ZQIlWnT+fy zm<(MDEM$i~?o?7do(ve|NX6)%YA#uhWdv;=ZLj#b3`719Prhe_l#vV#uLaf5y^6pX zSi#OZgSN$~YM?*k0b^aGZr;YoUh&x<1`DK^gXMr;OG_vID222;S2cs5nMyQ4B>Zba z;1#6@6$WS=mO)9{Nm+T7t#pJST^#Q(?ghuH(4tA9ssMm&kNFxrIZC$zYDoy0jS|k;2UvR(w=U7 z&}B?Iyi<*CT3A0z$vUo=TSgjNU0jV?(&b324eY9o6Jatb&Uj*dB$cNNEt@N|s`xce zcVLit0Lu)+(G|qGEo`i1KK8Xal4QvvG2O)u1@)45WN2T%omkS|46S zt4WARMz1zlTu<}`LQ3q0t$_}LU>-Tk_8>1Y2>8q#AX1B>BEluirui}VKOVU?oP(FJ zU(@hB9sV(~vso=6q}nx^d@sgz<@2OJ^~_zqX}Oe73Fi4)TjqPfNW&3EVXHBFrE($X zAS_y()Q~`5JEek}RI^EtNMwdvycQ~VYEIY4(dTT%?`>gAbMsfQx0!HBOwgCQZuXp7 zE#Hjco65f%1vJlAp&6_1;ww~HvK4-e^1j=zA-H*MxuFK_q}7msLou)T{;>})NZS4r z;7C8#0MnB%Q0uY_ey2(fuD4@*B52p=fGZPCwtt2~=Tn(BNr?|qckv0n8@Nr4hP}n2 z43u+X=Jtgv@#>SkwG{7SYm%6M{2mkwo&u%(PS-Z-s8XvyQX8&R$SGAp!FGIaD1pn` z=FasjVfaM^D~+e#hHVPb1I*krqot+I?7N8vQ=~y}+ku1wZ+l0mjmU3iBgTN=h}8WA z9B+IO&ZuZ<^z;y-oWXyNpC=! z8l6xgWzt__8EaqoLwWid5dMJrNoqL7DXu)#2cej1rwPxGw|odNpP-AX2hz*10i@rL zZTZ*(mDjt0SU9ylzwyv_j}o=24}Yx^5_sH=*)@@<2MVdTL6^SKCsEIDvzuvY>T^7LmoYRsVEW2ym6L?{M`j z%=!+qzhgzW8t{#mt7bL2DY_=^wB9n?<$S)_^B4V@OfPB^NmESGCtOO*&t=%&(ekB+ zl5P4^*kv-$h*ZkQfq216Ug~6B?ws4674E;`JidX8fx|?;^YT^qB($*wbbnK)z4E3q zco`XnpsL$p3yI8yuLpC#hjE60mF2^NzZ66xB3=@FmcrJegK5O|95Z6OaWQ<~$+FXOo2JNS zp*u7N^udywk2xEub{54^1UZjn}Qr81h}aGhVP-?SDw~kDiK{wUHX3 zTmXzX98Jppr|O~J27$lSA4|t{lvIACr$8;@-%M|LCFb=`O(~kKHCjyH&5D2^Mn;Tb zF3;_1E4T>a^|l1O{B|GS*j`>{I7^bwI?@RpDe=zLNf5|X+%l}7X~n){g$wsefC3w^$u1=HQ7r$<73}lA z2;r7LM?2#S_QkdJw{~`RJ{r=SkCdYliU*wbNo7SQlG6cS;R+4=nfe8$&XwfA$nCa! zOdxAhVnZPPcDO}G41dwpS(tY>I6Y|W3oU`sG>rGmiq8qwpWMVODbhFk_>c`N0`LEo z^tUPi;Q3h7*v}#SQADQHpFx*nSD)klH~7lDrY-VJ;IS_vd>6iFJM-zJ=#f0cGE*wf zyrT4TV$%3F&+6~h6t>gz)FX(2+xW5YOQ(u35B9@>RdHEB^@ z!E17x-RG8-_RnX`tEd_em&BB1g=o7;EU8KJdD|f^g4W+AJ)>IL4bs2sv74P@EnkCP zC-r72ePTAt=OlDp%;%6z%J)BD%{zzYzNYk{7x-`c?OArc6>x9J1!f%O3TreJsaLkI zP8|Cx5KmB3XmpDUaZ38iPbrD}!lXnTJH%KkDRK{+3(%=9(CgY&Wo?)#a+=s1bmf@6 z+WbdI9({Sa4z?k%T@r94K+pU%hyHDT*FpIebn=d11#%ZC%f zml%mq0fw?+9p*p0^#W#TY47n*B@|F}8bJJ2jTK44Ri zuLb^(Yfxt^b#>@zGSsZcFz{>;8ut(z;AWp>(|HKF%@3>#oYnofZbujv{-O;}m6qx@ zJsevL5;ecsZPpK8^^bqi&MsL7&P2lu{48z`5{I=;`|~^Po9h+K1Auys6d2NXx!s8c zbHI^`)~^NMDCs3^85|*wlNik03TkB9bQeh?x&Z?W(b3Vywad0;0!LanUF?MnHkI?% zezw-u$C0R3A0$ff{M?Jh{%iwadEhWs1h{+-kfkLU5JcT+32R`7d1na9{(64IPEB4& z88?pcOzVaf;G(_u;k`=ac+z@k<<MKnCbs##ODgJ;G@4Ak{PsgwDLrK>G|UpS9)LOqOP%GSKyHSsl@mr-Ri=J zY{h%1tgQy3|6F?T?NVhdt6Kzf=V|sPm-KubX(u%tvanfU;xQoi;vvE}EFJULIFa{2 zb5ZHQxXnKIvoLbW+@4VSfT`Igf3qWYOlHoD@J~HVx#?t0HciFl9MfCmK?#%N*^oIuO_53&<*40VW}GzhQ6&Q}8$b8TA>{_5if` z{i({ym03vM5du=5yXQo4vO`d&8Y1FP2l3pm>z5-+`#b`R%uRlZTgqQ%Ee&#}=ks&S zE=&0?{f##AH40ba6@G|(GR?due5abE)Nn81bp=!HmnDAVm8rLF{08-GIK1+_#ERG-HfH7j{1*F0VF7WU>;3P? z7;=h6%zC2-Lk>p>{Tyd=&fq$QquBa=a}Es;<>YUR+_s^^>1Ntd&Lbjq_`esH=NVK_ zTw;9)l?dTFfuloj?NWdvsmnkF$P-%Fd}DcB<&b%};{ z)aZQ|_ec=nU5EfE6kra74<_6}3Sr;z3Q6yk9>w63lNHkpuslxkkdj&p-ZdBk?@nPr zCNW@>HUW16zg$D@$b{*D{u+4*YL-!uRTa-dz%}g9f)czm+N+FuW{IjD) zfX~=7V@DR@qt7&ee}4}6ng7)P8NysP6$TnaVGYs>DKFNKbf16I&u-SB(TiZ?Kvv!I z9;Aa_Io^p~&3J~zXRK+u6#0PioqnZi593{cnN$AxzG z`+u+(6u7a!ov*6>n2tFB)$=}VeY=z7AMv^VH?pYP`> z69D|Wyyy0&3uA$-)gR)W)jf!nXVceFjAbU?Bf%CV+nnW6mRwimGl$i3(+T5el{Gq! zM82GH)tqcmw-7_fCN4n#K_A=FX2(CZxw`~7Px#zH#hn!x*%ryk_>$}xU}cKxU2{H1 zN2^?A!I}Z)lI=B}qNCLSV|>2f27Uyqd&s_!mS@oZ%){@qckEbOpIf3Su%_)HNQI1; zj}gDWu)>FtKK-tVSidbHQ5$aOaNseknqyAgz8t|b>T2-AntU=jLDKDt-Z#v!n%L;@ z6KHyjYwIB9TND|$3DoE8+h6R;-S;ds$HrmOH)RySM`j8>O-e=*?H-;`VeODF%C<54 z#YVM3xj=9Ib&Te*|5AU<^Gc(WSZdUCJc3{;|6jS_{IQ6T+U$gEy0BF(hQ3C$AJIq_ z->y6|wLhI+NHKaI)A!%?Q#I`N9m51H`r!>rV&6<}%g=wwpkq1Wr=(Vg(%>eHu%2pI zUa1$2($7KM8%}NVIe`2Eau4uW-d#7Js>`z|R5pH2rSgw4 zmDtC9pP#YtmRP_7ONiNt{~}L`$g+#Um(WECK!`0hR~$S>aXAv=^t@a!R2^!iQLEx9 zJ`tQYsD%F(dAE7;kq~tBqdzzzIzzqw49LU%4B?lYUc9 z55>mGZj>LnW8i}n$QhbqQ$FWmA!(A9Zl-(~k4#zm6q+6N_)i{qn)%nij||wK0J>kX zgeLIy355XOn&-Zh1O>MaI4ne5(>YyMkI|Szpy!kj5H(~Yr~nJphV_Oj_a_)k+d#>N z?e8^jU^ihKV}fvK^L6Hv_Di9<;QZQ!ZP0pbun9tS|1o*-#t-uI?^Jta(gLPcAHx^b z{7P>Cl2{Nvl>z8#s;SFQTMfA3`}_8fSJ%^nOxc_wgpZmS z2U@g4dZXL>E|lQA7=%g+0Hb{g()w=~!se(DfG;@l^C z-Nq?4jnJ)tV?)FTbjp~U2T7#IoT}e+o|ZP7OP3r!Nte&0f5G|{$YD2yiArYXqEE^K zdBKD$S2lNrNv*z;Uwwejoh?%-g~SX^r6H-r0p96>alA8){c!d9n8qT=aQJSd@ zh_~PTAS8}%oDA1eoKhQeOp<8|OQ6{dCj*<2GvXBQd)geQ5oV!HcY)Xi-)%LrZl!f; z_*YBC_yb3KiZXA3Q*^B}*n`8nj44glD)N?C2puuoZ(#M69Gt6PsB@W;`B}**#x1?jl-a085p}lXksN zrqJ{^tQMXm#HFwz4#d%jTc&?m+UufZADG{oBK6UD{@oSitn=s!2cQN9E@getTW^e3 zBIOxiCl_h#NXY-5lB7ZpRx|&D<0##HR4*;@ji72uR!#!P`$Y>TwaGPpX^g`w*w?EDUCU7&zHhsTi^XwVq@3#7uPk87S~hGwUf_938|q`&*()e$S`ffW5;P$BZH+RUA5A-VTh^@Q!2Xh(g&p3f<~P>D_%p%Q%n{YCcx z-Xunt6=##ejym>8Ux;27Xwj$M9->4XVq*r#KWJkRZ8${`T!X7DVt)9y^{Y&saeFLv znvfZ4x~v7<=+<%!hTCP25}fTKlc3#Bk#9nPP75EOSE&n+H#_jfwTtw!Q&7zu9ilL3 zo6Jj}80mVuVED;!KPu@BoB#2@`ck9ESFLR0+0{U$y*W zRO?y$R`0ZGzsz7}E*kS%)H#7i5*C0BS2ug@&SA{#}))3`I>i`KRwH@*a)60&)!_+l-1mZd1K2ydBesmN*0In7DC z1k6#g4PNMKN<$0s)>`qsTPS@v{3(?rJpJqMa-{-K2 z0x&;FV35v6IiuP->&xwPIS$k5V>dRJjYOXdagq_CCUCI7yy+Q2O}`Z15m`iqUH}~+ zH&H%mcLF1vwkOVKTRVzqxgQRU_FO>tdsXO2lI@kL$|}rL-Tl!^=Bf!PrD?6^@i5Oe z|7iNT!tD@O(6}iDSshrp;cG4${RpJX6gS%JT)_dUm)^kJ*7Z}@!LuAj15rD?ed!B) z;=hD3aB@%E3w8kziJnh<=`)->HS0;HF3a|;b2e9YeojxWU?|5sl#~trQ=y#vOer|U z;D&2d%!JF+ZS_6jt#jn@qbuk3?Aq6W;al-_%Vnbfk^U)0(AfPAh1iA4vz%P+nNzl_v3^AO~aFJ zj}&O~;=^AAO@;Yv5&0A5zqT#kTjca%TlX>%awjMzh~3a+rI(%~mpbUDqlIW2M&VoD zCJ7{;l+o?T5fk1gZX(ZWmt*W%Z~Hl=5yW-*-$43qz-LO*zmcFss4E||9Z+A5U?l*~ zl@2^*0k=tgei{EjWE4Uo;#G!Y+3tOkqDuSU|89~zc}pz^`mQwGcAyn-9ZywId~}WS2~4P0=>qsl|Tu%HqCntznvVXH$8yNvq#)rSlEz}SLz%@@ zMv}m~*H_|VBerw>jzY@Qb;d`D>M-C;x9+2y5ha0CHcj?I2Sz-F7p=~xBbONL;b!Ab z0^=+#b&|8|zoXN-mhcU<4-gM-13qPLFE++XTRZ>c^Zov88kjQnuJO~Ze)ZOjeZz<% zbMQ?&^r~MXr*%q4I_QwqA5{Knk1?s2VmDT)PT@GtE`cmjqsy3|%ynckskG{n>1PL7 z5OX6fk$X$ux-)*2?S?f!aa4RHA4lkk^18L zM^*qIcYeYeylj;i6f;tvNe`w2KGP6b^vCz=@_xqfV)6c!W;#0A%dl&nx9edSH+B1H zgfxf<1zNPtjUH;(|2-0A=ftCD3de~QWv;J0-vTGdRGdyi9$-b@aNIip3Ks3_e6&+t z>tPNI+QUs;e0#mby}0_^gcEI&r?v7)?*|AYnOFwaC%%4AO!Quk_D-BTk*p!=u-w80 z74GLSM1SH~0CmWyRZY>nlg>g+TRvO`lI{xBtn&h@gB&b?a1{k|Da9nyLy@r zlTKEhxc9wQTTPQ(@(W{7F}8P>z3lpGPkHMIVLncmffgv+h(?4d+xg#;nCEOwwtmug z6JU?o&R8xtzWzn3qM@j9{jQNF-eS{g{*||#czjl~fnaVWLLO>?Xp%tf5BFb271(Xs zB`c~1o=AFkkcjUQv6GDE<;PW%rDdjiN^0J{G)76Rnv^8Dsu+Dn`TUB}Ws6BiYt@sU z3Oe?NW*zd#m)0)~VrEdxa2OgYqM|21l7JW~dHeTZTQi|6QjVtCbJvvA{XEXYr-9B@|_rFQ9@3NO|I~~>c z3?q4ADGteY;L^(A*kx3Ca@+>xf6_jebQj7E&W}jb-&a=%?a8>zQ}$hi=mD#tQ^9Z~ zFqZ0^Ov@B6*$dU?14kYUO&W_Zn`3#HB0Api4Ek%#E47&{mMLkxt>kXXcZ@U3CzS7C1lhalZnJv3`*1BUD&h4n%~utD82HI7XW68H)mOagK#i(1o)aJaZ~km)YLT@1!^hHg zE!Iq_6hg`xTgnw3Jm(irSCY*Ny>Bj@C0D6g*0+5uVv@qSYLJ5T$;lvoPKB zG!hXG#a&(c>heLf)E=-ev#bGV<#&McH9nb-?8T3|AIoEZiQbAgvS`tQQ0S28i7LMx zY9sw9n!j9&Evf0!FIlbC%lp#47@h|Ut(xZ%x+kuLK3)_s6NRI40;q$EaiB=SeTWUg zbFM*?rqXaN)IqPROwe(cNWayZG}DGTtT2Xu7a^fO%+7SjZ?i+$6&@kbMLHyt#EEX? zRfCx$cUkWsz|S!MO>h81WT8uC8T3aF;%D+MnVgB!X~@Qz*8=w+ox;O%GfwVoIsaTA zay&MP=60ht4x>$jg@I?e5@1MtLM)r=x}=>Mb#y}3y=`gd7_xvG!1_XmGfxu;gY9n+ z9;xaNJcs&yI%Iuah}qE~Wu1HnF40q!(T(iYLlzPG6<+K)za{=A+ocNi`%SwBGcIPV8J=J*|I< z-Esl>1JZHoPD2&*#JXNGpUvH)(0~7vIMbtla+|O6fLS5}37_43EQwqq;sY`nl1vUV zOXoKsX_|ggbIyUih)o&&f?3pir^H-JaWIsWS=bzf1#kcOr0KenRRgBwRHzL{m^f_) z^MIlh0^|ikDP1`sy8kpemgHB}VMWL?Os0LHLD4BZT#CA?YO<*0SEXwrN{n)tA##r% z79Satw-~&@Ueg8fmDXvxqym0S+BOyE1hju>QaF|MfMj||Vo0f~rN++a;f&c;n%ZK# z-E|*07bO8vTPkDQDQ9zN%mQ1@`SRHk9I>UTkirmaCi)_(vs|jVI)B<|DPui4Sm|Dg z_ybKzHm(Ozs!ZFjAz^=07~Vw#I*D>%l=#rc3;suVF>o_jLp7?R(I1NMi*(et%|9tWMEis50IGA zCRbt7)*OUbdJJWvPvfd2vl4?G$w(s?n?&$Hj4=8o2*~AOAY5TnA=n|o-<_|=I0*DW zqPAN`E~1O#C_b-LfNtQ~%Ix}O=yz_B4N3NY&t)h81^3&PMHHPr6n<^dzX3i9sW;s& zJgsQ2Lh;;zsPM`bkGXzlbom1W%ksg2A#8r^g@VI|pSuog8RKfF(wtE*w#uYfv~dM4}$MAocEHagJ+nVnPK1RT_aN z;R&>Kxu19(G$y();R&+s8mo^!xMSQx9%>+I_M)=>k(-2#>w?9m4ywz$$D%!n|ESuS+41vMUHLjtLCp&Lrf?G zEUNI0+S1ENxu^)qyoAS|0#sSmmFTUDrcJnFE>Pu*faO|0TcX&p>DuXnH5o!Hk%C03 z2~gX4 z);6tB`n*#bQmB`acj%hn1ZBfE($$LbAuijHaR4{iFpvuv!4LfnaE>ryMUx|?xwzZdnQ zf}`S>&?t?d$7!7M>|SN7??hn+9D!>{oe;|pg^7h8#H(D^?xCj{)2?^LMttxsnZhH- z4aPGrpy>#w(hs!ldS|Wc@r>%-e4Zn3mr_@4}W+lL`!Ng8Nrr_#wZB9kTkJY#Zez zB!u?aTP&W8+j1MO2py7Y=F+O92Gf7Ws@u7ol8Ujst{g>^hhAgUdS;VGHQfH2+yb)Q0J|qiRC;dYFWTsqUxx_lN;{`qFBGR~4LPQ*?TL%?*}gnsoVs#$Tx1 zf=V5Mp-g-v`XduV;YqN6=MJG`ATK1Tu@^RYFR&Uix1GA$i2qM%0iTEsFNp*p999hs=YjjQ^&==NG)m9~T5j)su?rXp094(NW3>+P!Tu23E_ifgA z8PtsFBipQ0P}^T72d{JhUH^X8{$nCBYAaJ37{H^8$e7a}W+-ZThAay1*Xw3|y{s1d z0+9xTeGzIa2M-BX6{8;PCzq|ERX=A{IIE64NpW9cjgNn>$t@Cs;v_yfG1p&T`}n1C ztD@Z4&20|OvAi9@J2q?V)Nu0BSpTI5>~%)C@&5(OwRw;z13X!jZQjqC^eX$)PFh0& z*)FUV6a-b(Q{g!TR^vFu#qMTQ&1_8a$ZbQNYg9XZA6i&i)O>gVc*3p zo=q*he$E+7`@*=XgJ?FBP%X-ZMlCCj^;&XZX)rt9?4a)Ae^4z%Tv?x8UOa7(SZ7j0 zO#Rn?{qMBZN2vygOM_5M=~@w?vwOdStMGDdi=9>YW&urjEIWM@5Kb0UrpJa@^5Ze4 z?gu$m*(~NEV^9J`n1zO`ilC@-sVIuIC(s6VFWM`F07?&wiUnA!;-KEGl#GJv9*@Q^ zo+L9C9BM5l#+Zg)DeWv(0*KON(6s+$KmPJZQGEGA8%BUJal0DH3AiFLm{RFfbmnaO zc=z3FaXtB+3cXH$85Nw?rANL4D z!O=5sy-0nAlWp~rKknwKD2U5M6<=#vY%ZWsQUi`frKq@}se3RexCQ|#28E8FtX@;& z4U9%=_QBTN?>Uit`&icWxzZ90<&|m(PPEAlp5Ze(#^VI0O1`4k_(}*1JHBLahtMv1ayJ?CfqB)iU1g5s%l3Vjz6uZe)SK?!-hq(oS z<9|2F;6pkGIX^W6-l%p%JQ{BBq12-C;^0MN3r$hD@#mRLqs7r0WrcKE=gK;eQ5AN8 z?L)$jjs#OUS=?c^Bo_rpG>OgOm8p=|STGYRwov*iOSpKAVYO&JD)i;nW!7wxuEi8F zFtt$+^+jY_nj_*U=<1@~+^~D?rvi}Qt~D$U6|0v2spJI*J?5)??}Kl-+7>@T1uB*f zci*+LAC!!8iY!X38?y1?#)%QZj$%3g^}sG8KEo1SM^A+vm$^h#ls1Q9SXAkZvOgqI zQ6WdgLSvFv#SXH@{sl}MQG=L35LSV{fZmKdl`cdzg=-FJ!JZ>euaAq62pd2vV)|)H zrxRNP1C9WV{A-J|2Z*y7_!EgCYBJc~iL6rvqKHmncmYFK2Na_Lw5X^$t*_;~;V})B z+zilS%V-v&Sk%|pZIwBxvI}bX=Az@7!R;jl$YC)~Hp>r3w2s2Ndyn!aeo|P z*IxhcA(?xn6fy$=@k|yNzk*4lFJY+VOR)997DZ3_EmdpiKh2VfNoS|v z3=tVze<1z8jYgo&fg`98n_qk7Gx0TpZ9 zN^l>J;fO2+!#LoebqMmzvM2js8eHrd>vtLDA+sDt1JNp)l$jkdML5or)m)XH=ZU!YJa zByvr7mrTyc>|pZeM&r^Awsx>??cJdM?CQgtva3X0=_AJfx_F#;Gc&e^y>9fhs0{j_ zB=yc596nIOE@&er3U#?r4mNTVt7B?uVPU`UXL|Q zO7WKBFbQkkay@*F3f>Sg7ufWgzNWluD?5UW8l-(0-5CTGYhFhPN52HqiC84DNE7tw zNQM^_^fC$Ob@EJH{V8&0={VRT!~?Vm&4xcgX9PD$UNF^UniO?@Qa7S^lB9k~wu}k$ z$FaCo?V6n0S`Gb4;=hbX@PR8bp`!3ma2nJ|!KTeRY6ewEKve@-E;Qs;x&y8ljp6+m z`K!WJ_e7hkKgj%Po)+~xx8*3`S!{)ZxiLGw?(Z%{;4MiC)1e2ZFAZMAKaKV-BrpR1 zzl-E&A{~&dA!_7LL#fsN{s7+tcr>m1I{ug0J&JCRSIMA67#11b3I>UL;T`P~4%#rATm!yK9RSEydm4EjRD?H}~Gm zB~XU{G*5Iz@O7P+DTsXil5yz8~uH zg^A8w?whf;bd30J&pWL74<1o%;Nl=f=5(ETXU#XJVYn_$s^8e|fsX~^rfxfLnhQhq z26_4#6sfpFO3O-V>ogQpt&7Cw@4PxbV7tUe4NGQ4k*3_2 zV(_t~hH>UYkp!4hzb72IpNl%x0}B@xIquqvk4J3cGA&M*A2&*?S_9 zu7A;-_8koVTNgRck9pkQU*`SqJIMFfbamDw{Rtw3ey_T6k!%`*XH+s{#d3Lt)4TyD zas%4XfluT{Zy8p^gVr3p+_nFRowA>5WUV&Oj}Ki;#J#*bVR$29auvHs0zEkTKN77X6XQ;Tu5?}avYZMEScK%AVM zo{r#RqzB(&cm9ViGx3+}nF`TS2y@PG$)A3x7N5K;FI`&S4IfESQPMn;iz*y$b^_re!$&0)*Xnygeeys zaFM=0?D~0qqL(e8H;|l)f)+dIa}OhWP-R@%RaZmAP3i4g5c+xOPxR6MJ4W)o^*?=C zNz=gPgZV&aJmVuu%rV{HK- ze;-SYm^ALzKV976_kA(3K64(vE0sQt;=>2EybOF7!YlHIjmLMro7{hN*HXcax9RwQ z$l|`WiM!}XsE7SZ1X<$*&CW~XtMOGgI?urbt1QIL)(^opHcn!#liucC_YV+v+X-Ps zewX7pJ+=T_xJf3VUGlgF$W3@qP)=412zH8$HS!|{T>-tdm}$2)p;75t(wma^oA)YRs1HUC5dJ1<@3x!%HZeUqjMZ)A8bZwQs^Rs_sZh=04=K%4mFVI=fF z2DHDa?)Z2`dU5-%8x}N8#zXD*4Qzr+RRDFC9q6u8K9{8huz>1`lbq^q_du5m20v|a z-oV!{zPgY>nk|n=tuHmxcAywncI2?+tA-slqEV!@(E^q=lz6Be{1R1x6!M5a~^ zKygv``ywx|I$I6S0Cc)u$V1#kLu}IFuzmXSyYb9tPKLejU-hJk80Jc*9lul5r0p~g zc7PBw59#SLyk7*+h3ENr<;f^?gY5Z!eaF39)z`Rx3Yed8zxu-Q)(+Ffet`Lxyfus9 zpkKa4Ax$$$t(fAe9W9Sh9u2)tMLr&4g%pi$V*+xh31!3%T9Zr5S%FZD23eU?-tZLe zFg1=d3cehp7tYV1#g2&omxla^MOY31;yd74yVbEF( z;pBP?f}nJrwVgr(#n-we{E$U&g@lxm#4E?%7kaPq0A0Ax*E}_L?bxPQnyUZzxphVA z2(;RsO4alVd@)YXbabZWw*x0f=&FaNs*viN)Gm^$pCR+!868TEG)eDTT^LPjyu;1s zM!yNK3T8a=DL2z>Q8YDspAToD%|X1vk6{;wG$avxQ>5ZYD4v4{!pOtUgptW*%(M-m z+!O{!LA0tiqTJHd4=PHI&9o0OKm%1G)(lK&%~snImsncT9qnd*rq|@OuoH$2>pmfL zxt!t|9QJzDb(O*?ety~whnGF4 znyRb?W!w%B0`CFjD2PwlX{T%K%Ah3ZTN#Kf zAV+%7CO{$7G8P}~O+*E!mdPs=q$G9Z*3WwMsD~fM)dW^}@8Ju!Jo3hZ@y-|hJqlT9 zKJ5GwV^^ULSHKRmI3)@m321n~(QktZ2UtU~pHKkwZ&59`tfSe+M!@ve#l4mkkocBS z^nXgjoWtz$aYxm0QkzYwmPLH=jE%a#PiE}o>o^4BO$2Hh*ly|tG`mQ)8!d1U+)WZF zUr(KO>h=}b$X!~l2R_I~r+8LxQDm2vxi6tSS|;P+Pc{*#P~k8&J`~SG-|&@CxJX?} zNLp(l1;p+LuoM|%rB_0e-sGQ(*|SOKfIASv%3iXduMFrf|5*F8T#kfchej(Yl6u&HP^aQ0cMk_qrhq$m{mD63u^sAT{)<?!+zEZRh4 z2?TVOz5XG)T01#8NnkUmFYc&tsuQU_y}BfV2AZVJ4F5DksMsR=PFJgrO_LoEZ~ERe zsENuB8xsKbmMi|D_ZdndpQ^US2FC&cq{xQw@}AL5CCg07fSQu9S<2+tn|dQjICthd zkWWRIUYmJg-wVRqrK0%ZQT6wwuw{WW$W-kuYfzxbK*gN!+r7O>3002Q2{F2!tGt+p zO99xj&wZsqO16@x1`uCBTSrB!06SHy5iwp~_r+Qa%s|(3AuS&mC_AiKv^%;u+RR%B zh?*}fK`z_MQ7hSruu)n~uvJgU!Qv$m(m79TOAmrRa?P6(=#^%0vvVgJpKlsEZg zEY9=qflQS#L`XSEOJ%^3RD}QjrYVZ8asXTsD>vc2@+Eigg%QN5H8=Y4-<-tT=y4kD zxqkzhlplf1igkYNq{w0LM-o~OzCw763IjD6*_2uqKXcFZ!OYI<(^&@dhZ02vg~)J= zeSIhDVRvKmbne}IE^G~Cb!qERC`r^M&c~R!G&$?I9tZ;K>+4+6nbR2 z2WYCX-vbN6_2w-13BMB(SwpRIXY~OfO6Z3-ZK`Ny9vZx!bK#!FjPU+=5=dr+F8KnZ z*EKQ(X42hHNww2dp|$*kxre>nCoI`XEzpujI1z5G78(`pNr zJD_$yIa|3t|J8JRfF+iozT9V7Ngcg)n__-3P)p-o#PS>B_5I^XoobxznLNf35x|?| z#jn2T)!XSBVE-{sJTI1<6-mDOs}3oSt_zAEQKMdjl-uu}HUGI9(`VQ2atA9B+#b=b zeWn8QCOlskn!eQ^0DGlJPaf=FNQ`@$9^pRt(L5(W0vZlSqx`KE!d)fE!2l=bbB{ zFGHEcjwcWBWra?6P0N6zi4;Pe2j;O*t4{gwM(Fb&{8#?=53O zx|9o9*$5RV=cm_k?7{ND%ODt`mwNy6Rl3N#-+BC2xhZ*Gu~8qSnGpM-hH?YIq~|t? zK>DHUeb~FEzm9c>U4tZ3ZWYR}Xvx|DI1Z%12vSbp1%?y{DUVz~l!z;6y_fZBo=C2K ziSArN-EkGIzYYC|D}25$9x`72>aelf4P&{#A?|KS5suS$`WYlRCa(Ip_KyglHUPPi zjyw%RX55?FMc))mm19yR>FJdzvpmNaMP8CW@Fxo-!efXWR0vJ<$kW!8>rdR!C!e|s zsdw|vWJdfC3>CcD$_FGmRkzw6y0t#nAfAEe$YU*U7DfgklIy}wCwEs5&t~xFx%YyJ zUXG&5(-%_HeYJ1z8P@*(6{?~@9*-M20(;|6AzP{ic8^xB?xVTV*&*pNpYx?bCxn!FqQ6<$-1 zj|sIEhZ>+F96<52L~JKAFC8XhL?@=8FP0gj7mJy&h;Jq z4e^hPje0(`4~9o~-g*m%H3Hukh}lV&w(+_tbjj*&^~O4f1F9DohKyvlm30tRm*>#Q zNr19^X#t$cBJbw7Qz+{IjM}n=Z`04dOD6A@8y*?W&hG$1gzLLJg#ecCmN4T?5sKg( zS!S#9if?|KQe6gW@Iz^9;P6c&mPh7{=`2V8kAk;I(oJ}jHj49f;`gCEciD*MSp#b= zsP0tO^)hdy+yP;FM9PPn$V8E}xlRSW?R8Xp_#Rr}i3FOdz;2?I7->ZmxhH8}?7Gn3 zME@5*V@Z^h||#(EBwEoy-_ODMtRp(Tes})LcWx)P25lcd%7B>}Ww_JF0h_ zgFfdst{Ad(s;)ctSmp~x3s?gx>&|IjjG9d^9v8ZU?eC&RK6g!yr@pdCNc&IwP+}RO zbg46%<=q9Z)Kdp5JZ5L| zTvuVYuJ<{#cdmZsOTSLZH3*r14Jrb{nHV&S4iLS(Q$D`P+4o~B5CI&1xN}fmU$Byh-+-YB>!n&Yzc(NoOl6N5ceRsLPoiPS@qY?r<<)!0x6R zp!@km;Ido);m7(0pHqWoRK}iC3m#<#=Yd2k#A1>e;J6Lh06BnOO+HYwwBR4O^5o-| zAy6%6%jO}V(G39O2?{r(Hq9}d1SAzT!L-PAv~<`CV}3s+5xYC&kX%y1Dr}Kf6Y-SrzDB#;YY?8f?xH;cDs-z@uJu^1-lDI5J#-3j z>2dy83e}b6Z;AJuNM|?V2!gL-638zykbH-JB+lx|x2>E?-!!Lgu8*@vdi8wQfOpi> zv~-GF`P7hIJ(dyL-#pXch+RVi2lhpxW)wY9iuq6p1k=G=VnAffh*&$zq$~*6p%zr{ zyIVd|yHI3`AQ@*D&jj$=_B$zL{C30#_Z*+xz9W^;nnBf7&dN)_ioW7n75&1F7##Nz z8VzF6*7!d2`l2Sck+O|t6(H=us3fg@=(iq+svK8EX5^uCbswM1vuRJT}`iwmm&iK(0ksKU@CMEa!JHr z_>wFT!dN(*2czzvS`;UGwdiy*sPc2^Vol!X5Ix{+)$}X9 zA7L%os>m7D%WgIH!u>CDiM$EGDheAyE~aWhBR4}_z*kYfJ9#E9^h(4o1`s7>UMr6^ z85VMr35q#UlYX9w*h*HDpoH>6d`!Il7NLwUTSyddV~P&CWSlbN-3@xP%Ki_a z7Dxe^uvMig#80d5m!Gz!@nT{UO~9!Yfa!Wgi9r zX;-M!s$EKu#4-^TH!(Fj7d>XsmId~WH=1Cb&!nwQm_0zuFit1J(u)QjPuu8vXl8QIt*rVjLW_v9#(DdTw8^eDm--V|jdi27?I$^hU2 z;KE7ce;e$k83Ck5jpG!Z(FYK{Waa(Nq+&Z_(OsSt8M({pbvpE>iko5l86# zPY0dH@o5yaKSuPZ_oqSp1wT^Qv zzT@fao}R7CkwE`OsLymFrKIevVf!HWZuaf%Z63Thuy!llF@y;Ty~A!%_MZJDi2hM4 z67mh^{&FKb{*%@3`RDt!h-cZf5AfSLT;umsc&-Spj4+4*dT7%_E~^A9wA(#NfkY)E zoSwi1Ti6*fBj2Eh!0{Y-Vva?*!3-gyR+~t$q^_b?&(r8!OV?_gSZu{v>_V=hsyk$ZrFa@1Kb>>~#Q& zRHb;BpWgINbjcg^Z&;(v{ZW4831PM`O}FaGN} zu_G4tKUp6#X_3oTkzVr>)fOr{%!AhiW0u0HbpRtf8D`=<*!?w39SvzaW?&W2+~cEKXeafm=SgKi` z-{x0BTRPJ_av}8b8>lKxRa_6w&<^bPLuPdjlh6<`>wy398}ah7VXy1$7_$DSz1$+R zf1_H3dzJeJZK~IbypD3wFUU3^8RG(O4BrUsf1f2iaYMFcEAIIAqYT=ZZwX1wYImX)QfOWj}+s>8nVG})XDc#)8 ziyjG)CI-huDXCU3^^6Z~BLE*l73NPeUmV{Se{T8wDT!Q^O4BKzYSS{TcjNWxO)l?N z_^O>4p66B-(8Z=wVil3=L37&y&EMl+XBV!xX4WGvtbpl8OmN02%d?W~47pd-BwUX6 zN~$DQ(4`{H-d*)~rCAM`B74$2HH};Vxr2iBzzf3M+~Qc|AbU07evQ~{B#^XNu#CLTR{1f`5Q!y+H`{-+JhFM#nvco| zVcYD$Pa>4sjI?Q_y$e|_S)BVEluEk{=mlCv7QHLMS@touOSi-Y{*q2ClEMqywopUT zfkj71fGU>}E$f2e2_}>#e0xPG1ICUC`l8*t$y4_FfspIKEWwL(HuDE&hlN;EOOa(( z^Hn@XRzDf>|5Z(+sg`y3x$+YY6}8&5E70G&!)EbW=$px9D}uhDAtinn_nEbL55daT1CbBW zkpz7y3LR^RQq@FEK6*`-Z@g(oQBbL<1`UEOp?{M&xhBH=Fmd;LYcj&7BLuE7@3`u@ z-+R8ZmrDcH@{NA;chiequRO&oCC#BtO}N#@-1aF)ePcb$LpQr+g4O2Dg??I?j|1BhLOlGVx?X?lKuGYPKhOdA^)oq5&g+DC(7)@K$M%iOy^ z**Y(W;>~zj+sj>4>`xFFGAlry0p{h;^v0B~?s1Q+8tG8-6*)G5e?-e&KwQ^VvTwX@ zhZ3KfmMA7{-tt)?tVlX)y-ex{A+so9_6+wWn`18WBi=_h1RWP-j5;ZF?YItvF@(=} zoxvr@a1C0&e%cPu5mwa#OS_i?44}A553N`(g8ff$qLv0%w}j~9%7pzFF8?C-e2R>51isRvp8I~ zTLY$%tko?bnuv|Ba9WBVI{}z9R3A|gwVZR+v5@VvMilF!{VRUecKl>Tej&300>TK!Vg3?jxD=j+&HjMp-3r9jf*LX( zgB5=u{8O6#Vy}_6&_qggQPWjKJ#GD7pqXEpQu9KmwGfqIEPG!c1wq zFid-^YMgzDg}yKG+3^6$wClw%1TSdw%W2;0BV_*SkN|c9c7o5KxELW!xw*g>o~Uhi zf6^p6Gs`@NkB#f&EsQTzzQ+HO#iWt^g|)@OV$P|{0%HxHLL;y_tI^nBNIZ~`Zf&Te6jo3{I~ zXrPD26v0li)+5l@!o=~Q?S>ike*@}%#HY^xqt4h#@;3VJWViDL zyV_8{vQ=m7d9?b*?qx3o8FJ{xDH_uwS5mAB!>Bs#MTeGV7VrHHjLXl_3bkX^fEFJL zdbDQ5D-+Hnn->OPd5F9$E`jTyb+n78=_#ybx$EcJituH|_llKh!6?QkqNvLnIzm<) zN%ecYg@?#MW=x-Vu}sL-NWi4MljK?QTp}PD2Et;59E4JQjJK8FiB zJC3(qmw?@;d9}p2YDls7ZW_fCFOgUxYV(=(C4udF$(EXPv#Db7H-XW!mX53(<*v%r zux#QYlZlFXDW=QEgS)wig8P>{7pmj6dYhFOnMmrOU9O&^)qu}DRaGOq>eUtE*DE7Og|F$vS#>Rboojj5O9^=0S&Mf+ZQ0ZPy_4AKk27oi2mllUVV#s!T0+!X&W5o=O% zX~Q*P5k5YRBsdSnShARCF}I)*U)i`-QdYjI1zxOuKKTTQ?GtjO0~F1fxds^ot$8Q& z66P+ollV%hj92t!9@dBqx&4~98_^Sgc``rR^7Z!pEqIO``wQ^^%qv?&2Ghd#eK$)e zDW&=K8MfsH(bEw_=SNO6H}@Mi!Bfq>tL*a9EA1?tftwm?CY7|F&N(eA=j(cCd=m{@ zGwrB5O}Lwngsh1>^g6h54+#-&w?_Nb*-55K6bMxof|;e9FNs2m*(~2iMC^&*PntnC z@{2Mu#4o<+wO718UwL7y1zF)(F@$~8;LBJ}xaj>lhEV(QAWJRhUw6u#@{?pPF*EJ)0*10gbS11yV;#*;yPO%JFFFqwP2c|n@76$X{y$VJoZeaW zs7!U|EGuy$fba4!F?OZ~@oFABpI1X$R}DfN;Q^*{wYcqkX*H?N>JmfgA=WeI9yJW; z0tXS|FkBJ^B0&g}nqOYdAZ9P4oq{v4iOm|wisGY`I9 z36Kt{{S#1lv4pGp1KAMN_CN%lZXq(uuHbB%a?DAjpNV0DWPh58i@>TNNMCSS?RZQw zGrit;^$k46L!jM*?EIc!huuq62+K34Rpbl>a&&1+q^HgDrcOX*h?fZvRcc)mHeiGtq#RZFo%8oki3H1tPd_~a_< z9fqUg>eg{90q8ihDs5|C363*#x+~{PeLTy%_EUm6bdJjU0obex+^&tVO|YnKsW##V zo}2y6v08Ft+&#lBC{6ckUh(snSApiAFFIb?v|Lf=wxTIOnG|Uf1 z5LB;sdGFiZcG-NklrD1B^z<(R(R>aHK0QA_zmjo+fIura+Y1C~j{(jK3d2?H(!qB= z#*i1di^|iZc>a7aaQ~wqb<_x7Ja>)6RxA&HDLb}RWM<=@2alWT_|J2REAevIm5bov zc<;QV42Ka;Bb8yEy__Ne_5J(3QD*(>d6Mcg#Q6)s;9G^8d2X-9s+%ocDOG&BbM}xSWx`8VP$Stkgb81?e1}Fm|4~IzYp+ z(^u1bE`0%RK=q+3XbH&yKNoh1`+*s6zGh3jA%cBaeOu$?o9^(8reQ#i2Ih)FZmAOf(zA6KJ13p$E5&{%0Z#<|K_?P5g# z?6|TNd)@3>X;GzixGc;3Un$hrkF7m2H`48NweC+Q5b0gAwcCw)$txEr*RKIg)!k5( zv_~|Skc`#P$2eC5^w;g=!P);p3q`3kc&Dx@S7sEyEwmoqE+Be0d`E-ZKrVW;xotB0 zNo%xMpKhHbqf9W5q!{Pg=kwST*T%b#nkZ|GTxs74B*($Rxgv)9kp)#x#?KufB%h5_W98uF^84*y5#i$BYX?SJXU2o zkKcMc?P+a6^(a=WYg%lk_12@wmlLs_cv97EhtPvG$D4Lpz8y;T`j>ca8fUl`=XIiT za7kmlU9;=2hxta{70J2kYB6EkP=Fx?Hfh+W)4e;%T+~NFi*u>sK#2m3 z+F-!Ya5-v}&V>q{v|=l#WPc(Zxa}n|bWT}A>3}L~`|PwF)_ZmkADoCL{N=Q8s#SCU zf@;ZW3_v>A%PL&9i|)yxeLZ_?n#75`*L>nZ6vOykGeBI7P7i83Y*hHigi!A?bl zHXEY8zOj7({HK$nt$*&`Vx^6we?-O(^4dX3(LHl${iE;W1CzFgQL*qyo$X$n1)AH5 zBFKLLJfBBOu&HKoZ=E=v`12Zds$i1-rMpFY?+T)Z2W!3!4EqM`g1Da8|GO;87$Ftva8K3*RF?NYK$+7_d?$cE?P54PR~Ht z=7K(}!#APSiJqmk0!#o&>y=jH>hnHbySR-L&&g>m&$k1MtGZz*%`B9Uh)wWd=We7Y`+3M|>+TLArVK2&#Qz>eGNR6$H!hjC zQ^`QkD7OZ(*7ERH&co=#68D&-6%BnPrEiCyOFZEI0>wA-B`9Iy;A37L(U$&~uEm6Z zu~Wwlah*yHhDn_Rzp2h^Ets)Y@RlKyX?SmfXDd_ys>7nNzbKwFYI;Wa1MVL@PQsj8 za316d3#z}qtry5vB;m;jlQ8y$dnUH2JkOZ@-7$7os+q|2UMKAF@A0?L3@YV5HIj-a zP}(_<>25A|lnnEgyngqsbba73Y;EW)yZ>xB6=k_1Cx1<5P&o(DSz3yBxKtcBxqOd)bO zkp~GPgI6!}TEg#cjI9^owu4^|%`nX)@*#tqAJJI4w6CHD-nK0=o3ZuAQtY$c$hmb- zc5^o*{8=LSb_{Fx?!+O9qVDpuQbk5i=j})936wIbH>1zhCx-mP=mxdsQg?3U*PPI$ z)gA^mPy&%>E39iH-RKd1#4_SrXW;TXVpNqMDRs9v-7hDulNCBFcpPS3ft8~xKID2P z-rxWuqkl0vH?4Zc?t`To5--=oWbFh!xHvdsi>s@zH<~w|vkSEXJ%Qk$le*zIPblVo zmG2)A_IQ+!+cD3wx+zCst4Lr0Mpty`as^l8LFLZ#YRxEv$=S@R3E6;HlQD|Msp4;WOVevI<{p6r^hJdDcP!gSq}t?JT~@IiohtNKcxaEzyQ1M(*@lySD)DZ3dQZ!xv+cG#EEagZN_&BqB%iWG3_g#<#a4LN$zd%pdbko_>Gp~q|vuSbY?FP%6Vg)|5vKL-Wl z98I{Yh^v`o37axPWU{XJB5tp5iq1Y=MP}0-U4%kjvhmC-`Z-Bz&TSII2oeA~)2UjW zf04{(-+pD#(xM^Om{Oy_?OyVuUI26)^-sFL`tRkXgd;v(Q}o^Y19)3s^`aj}#!T7P zKM6@^4SR|e-@}bh@(TM2P+{6XpWCHSxW#v%cnmZJ$_^?aIBXmJbaQd(jbiE5Ipb|+ zA5gD32zGrbJ$SGuEYY?oqCc3VQW1$^3UOj$xLti^3=uxPLvfJluPOLJvxz1iUkowujU@n#ZZPOtu_vt^W@sX+aTmEqfeR|GHH_#bIqKH5l=&L}8)N~1e zTe+}a&M!6pjoSAqp8Tpv1Eo3K-@hM?Z)vYFY=m-Yval07bz4;B(1QffJKA+v#A-!S z0slKeKeYY7k$HAOeZG$DSO5dh8Q?ar!b4@qK>XI{%kk1L^RKetJcUk#--vjWNu=5S zyWbLGe@rrp)5km~J~gJ%ska2bGWtzKX{-%co}B}tZ2s!plx~pQ+~Y=3 ztbBC}d5{gTZbC zpn;s%q}Z|tE@^YOa?HAbdlmbhvxIBz08y($*gS>i9E(sI+-1n@#mrgfQ{HqMV-DRA zpR|3^+VqPB4rNAZ6IIcO!0N@(Xuz;L*U;9|TB;KsdVyJRmAgkCqCaNiQDX_f-YpAi zH(f{56%8HuQ-;%JOLg`FP%%3ewxoj2jfrQmt{vA+v>e7 zW=P0565;99RY|buvn?eQ<_GNShwE^<5(>?(;mi9F5A<0gK>O!ax#=-%U&>uC%oQ|@ zIZK_wTF?4O60yMFDR=Uz0Bz%FK{G@m%8rEEPt*hh1%MJ&Z@;%h`B!)bVEA8uYsD7u z@BBjW%asL zTgdUAH^>?mmjC`-aoE=~8Qo*Hh@%`5{!D-AZ_Yo>c~~1|+*G6-0*@}OJ01^266hQS zy~2{v&ads`09kpZ<2TEG6PrX-z4>xkdcO^eBE|Jku*jygI0Je%52>P-!j0mqUdvuYb$2rXAR>X ztp|6@FB*QmtV`K@+2rJp{j;w7T^$i2{3C?~H1u=&;aEUhOnFWvlB*? zj=e3z(#^+SZ6tiYa>L% zDi8lSXXvLA?%i>?6yfj+`?p!DP*0X& z4q=O%Z!)YC56aR}dPCk;(cfX^tI~ke0=iTJ?T`ULpJi=exwM#gi%IW;InJrTFUe5l zr6ahEvIp(&!=G^S_p=4T^gpU%4y^vPsXgkSOyUfx4Ji&m> zf|4^k&ERXC5PXFN!IbHS37PK2e$auh&SKJvIOo1B3h#}f2YtymGzfr6)O3uwm#*Dx zV7*%B1(gUg<}uio@h-P@2l?V;J%0S2Kbsf%>D$rsCgl>}O+P=nQw-nn!OF;}9r;y< zjWaIo5c}(M`cc<=v;K7+f;j^|Lti9r7&rL#Yoqv#h>uw2QXl7 zqaW^6=yqO1rVJzanVqW}GDwB6sgAji4unXkP0ark_*sv7+BhCVKf`h5D|qs z3Sx6hb^GC>RRXnVeJ@;G=}!>BSl+nu$2d#0=KSLqSG8~gbIR>*esPcnB?X1>I^2(p zoTvQo@Q{LN?kr}+yq}pKiv@3BCy=HT|2F71h#is`&SCl zxE~jSyfLN}pV|tCK-8$%joSH4OY4(Eu=w*hS0CubqtR2-wvFQY`9^ zjITz5fHd(xOMy3tf^U*>@5kd##a_Ve`r(hhR-BIg3h=n+*M$mmd0mP z5Wky`l`r6vab27uU%pEkPK!@MRzCplsOW<{>Kh9bk9jD^oR9_%(al7wV#BHo2Q!0y zcd4bvHNLrm=$IOgP;c&BtOr8im9(Y`oC*vE5`1U+*IjJ+D&s_cTIZz^HpWJJaGNQ@ zm%!6Voih_5(w_5NiJSc`2b*N*)x*{&Id3i${#xHGuB|VryB$%c$;bwq&r&lH&d*QI zY8d8GHqb|N5GOza9izewsd3u)lF_`wKEA6>#~t2BFYW{k1$=`Kwbt&{9-E=%qE2Yj zzFoe|5o4cJr%x6`wsYVurH&Zg@xa0s{Qy3SiiyHTBE7l06G&clwuIMAHsF^g?p?+* z+y?t(GSD8?SxRGv3tJCEqU^s(HIx@)PC)AV^Z+D?` zBi1j_X%;Oq{{r3pgG&PJlb%`Sy0jLr8!|{-uBPfpRIO5pTrMZ6O*0ujQX{9b$m^fSJSN+Jss(g%8&jI`H3_{2;sG!^%~v4 z-|e{zJM!_MjuD93>JYt-oCHn}1Ko+}Ccb}f(UMyVdAv&^14Y@hWj<*&-a_*Nul!HH zn6>i-9u_DlwRUJ!Z*W+UV`WvroaMr@Jl$te_{i>#?R8$nnjX2L25*qE9Yf4;%Lr;4 z7qs{58oVi?t$|btYw;w)%sxJ#5-g+RK4w)qv*V@RiYmeK(=^wkw`X33r*D@haG_st zRSR%VSh&0+6dcmIMEk4!5k=<-X>~5flVYoBLi9i0Sm;3TfWMV+;@etU?I&7PWi*;~4VfIm*oxRMaL{Iccn`NEfZ&tI1 zF=}?cGP@ja-AOp#=MTE14}B$Z9^#`iuiQ41eXZ*3eEANSS#{PISz+Vh;eFjQhC;pT zUJ>7bN&!5RVt32wx`)H!{RH4$fj6X5+<_JfHh;~ypR689!;g$|ex5(Buxnrm_N2|G zxGR7YV%E;aJf(5{ydNdC)q(d&TGep)<%8kpJnYcHs^2bGxD&Y>FrB!Nxjd%~ZtI;%#~^ z4QruiPGzDu*GB6BSGn9jaFVW^f7f%y{T3&*LpETTwH+Te8)#%;cUQ+ZJLL33YThu* z`t`fZB3JWlrguHV!`+{8esw2w-KWQZ?cy2kJ8?{x>K9D&T%4DhukNcA(<22@f&<@( zD8^Ash!KGYp_1xBDkq5Gkn?h`yaYn*Va|1iVCfhCsQ0JG&X z)#mo70jZNQa&J@OTK?M&5lpf=eIi1p>d(KKL3HuRWk)G^Ea8IKsb5-GY?{J@pGqRr z43Nem{%S6Ph)N%|@^kSk&(>R|_aSHkFvP?nx2s{okvK(Qh`cB1aPO$Wr#5z#43>pg z^W{|b|AyOmqS$sk-WGycD1&QfUOIN-m9}>$k$ouyKlG?d{lH2BMWH1l{SMWUs>m0I zGROw>x_ohCMb0X(4zk>lQ)mK>TFH3#IU+h!;F2W$9JwyPFyrQI>US9gXixRU#)UVw|56v+5q}SoTmez(ll1 zY2$XrGoHHJHlrmz)qYd7cz?-OvSbr$@EB_+YQ;WPY+Rcz&~U8taMi&G{@cyH@g(~O z6zBJs&@BCDa}u^&v!v{)YZ>h>;v_@#%NqF|Ot|dO*j&s#zJd%EPO?ECfIh#Z1iJKC zKjhh8iC?orguK}b6&OkM~<&P1we?Pqw& zNSR1U4#8| zNqg5LIis$%MYZ{{tPfE51#la#puYocSTOW(Mq*z_`dKKp>M{9HLUT}?HD&+VCbI@p zZ0i$KA(RV^#qmKWL$~iVa_-Z$h)99+=Fc@Bwi6aTqTFR3uhJ)ywY!Eb6Kb{mC8(wV z!&s84yl7{ZT&}2lH-euCyV|sBoDn|D7->if_D{7lRUpF~7_Wfldlmq1hu4nWRe;a+ zrOjDcm(idY&X3Lm>zTF9A)0Fv>fQMDA9nxfrq`iqYokG)3Ofe=)6co^cba0JI&HSb zDIvJQeHp%6C5ZW;f)u8#$^LlQpPao@`>sR1b6IEJmj-B$d1k!AKtl`YY-*~|3?jS< z|Mm0y_|N+KBwT4%2}H9o7=QDH=IpcR6GJo#2YbdtI?Ld-J9sI~VgjIhOgHVQxR*wd z6b(I9z5i{WiSbb}NY~tt>S@iP?69EcDP*DCF#x)mUX!%Jj=TiEA@AV{xr-V}guY_m z7e*aljd6gzLkOcf_$B}(_%AC5NKL?LMKD-F7FTPI(DF|=Ma!7sQ+JQrP^K8cAB(6T zYTaJpcgf;;v~_(df%SuDnGO3jKF(VY+meqE`8JvZBD%93x&;Jt=hidXX08LjFTX*V zi%WUin{R`H{(J*boM{t}5Z*h%0{a&@#=U83gKs}@bHc$W8R1{F50~?!-@Oc)ai4xs z%;%(_wuVO>(f{;6w2o-j9~25@CL{B;~9!nqf^+RkKz9N24XQP&Pbzs0a^ zEI*3PVB!xSOAUX0$Uc1UP;KEY+Iqf`7ziBQ&!SEK+bl=`)ZswIDQp#*;S!Sazzy{t zrH|U`5v}L?ujCJ66A3u6<{Cz#n|ty}R%{tBCVp^5se>?727aG{iSplL5(MH=nj+pR zPZ@BPQa1VF|<)RgVU_b zAJm87!}EYB=P@Xo4iI6B=C{7y^**tr$WIEAV{QI-VhqlK6? z3)`jbotiql2k1MQfL|J*s|X#`Oi?2{J@D~u!F&^0VQ?c)Fr*=>!%Q|Z1mFGqO{X)Zyr%t| z7_VoEQPVw5=f&4?b-wYm5HqB%TyKETso&AzyeV+6;prW9xc_uTsc`3u5gEmsShlJ< zt~jUUT%#@FS?u$G3yOH#%<3$wrNdt%hOzSoTMxxGVs#NgFJgX(oRI#H!$iBZLr+XVG@}tvknRqVW^{)V(%lWCrBRSZ zV5G?Cl15q>-JPR5_U!k6j$`+`9ec6sy07bu@Aq@w5gbzyG+zr++^WtI5)jZI(cpv# z74rpIPKzbSJ--Li9iz);&AQ%^7Yj1>pQid zd`;zV;gS{dzuu!xBKr@QKpW}J3z$Ll(7v*M)Xdfv8#vC_U~9q|n51}x zBLN9MJUm>S+zMXoZt_JvVn5FtDbirOWM3+Pc;dv~G9a1~6Y(31ii#S378zDWN+uQ= zKak}JRFl~WII>Z#%90S#Y%@V^q;6IUAN`zB z6UmYnLrY@^J6X0?4c|ao=o^9%pCA32A>6ey3Q2vyL-{S)E`~0SHM_2anT1X7n*gs@ zkoy2&-@wa|LvWh-33+n%rak*&1Xw452SJ#eRCe$NEM}YmSZ$oi6>v=v?2+pA*=T+9 zEBVcI$*9Wbpviu(DpRg8LFjChRnb+mIsA|D?>g#^%_>Fky=V~nqUH7R>u@?8B7@pw<_ z=nlVv@7wXnxr73yg^wrsKXUz3EAUR9Fdrl|jk{l;hHzl#h7RKsTlWt_@p0?;46K`BpiH)O56wuNHZI zb$XS9jBXT!b?Y5QH}zthiMDDCz-TW2zS!fI`JIcqFbH>Hv&Xl$K*80(o8`?PmG+tG z0ROB@;&})Bg3Ty^Q+>eGk?(nF z!fb4KSp99AZA9ktho420 zB!6Mf+VK`989euU`5#ikZSz!TPuB8&AJ=2t@)8%`x94Z>^+U&*C5a0^A})g?d!O$O)_j zv$3Oz3lU^{9Ax}c7{B>-6jVIfvT%`r{f1o_HR3B_-yh&JU{E|H8flTa!Yz|krV)!M zYw z*(Q`duI{X_ud_KHO^>w|i zZ$=$5MFW|<$RQ9TyA?il?$3($hME!0vjOR_Iuxx7MV!62(QPjQWt;4t16IS9R;?Zi zm;DY?wl?XNqAX|p<EE;)|Lm)_ob*Xbsu6MBq`|Z zE@ud8CeByC|4y@=ytgbL@`1P~^I6iD*%J-)3kZ*{tO_DqYgt`%fmil<`epV9<_yjr z(5egzM+MG#s8-yxhS_k&Zy-cX3OHrRwEa18dCc*XBnBNLEQuuRavutB<*KjHD$;X9 z{gT}P)$<0bk=<5vE@WAvLxL8~Iqp8!(M}>T^PpJUl!;T9-q3-k^|nfRG&qWM=(_kRYH({ONOUOZK$SPo*QS13*Q>J1OmXtL~ zLX4>!r*LlZY>j9s*Wi|tQcwcl&l;Fc9`rE9VdI&4Al)ngk$if&{bLNT^R) zR~o7=zx(2hCvQKn$<=)LFfq)qdJ7N6tPy`GS5w>_iSEnl(eTI66jzFAS8lKh(9 zpw^2Y{{xwe6{?9ed)Ytjf8R@Jy0jSvv30!{?%(b`fzj!Q?HY6vykOSTS1zvQYa3g@ zsyoLdIo?+~<%C1<4}9cUeG4#8ch3#}Qz91i#2F;v9ruB|Hzp-4;!i`0-tnT+PR0ln z0}~T7Co~j=6KAok!7x4wLOF>|j1 z*4_fo3xr6aUO=z+h_~O}Q9n}XT-ibHb8j~t;&}qk&X5|`)=gp7-e4p3+#%rv+1D#o z5PoK#gu*rFIC?c zH5t_N8wG4@y}=UxCjryaF8;LT_IlsLeik?AVk+U)+Bw1`n4?-xrzEUQlZ=_>yGg3# z`Bvh~cE*XQDzW=i=eF~H!GN{cHLeqhf6XTaqSH(QgO`0N#L^DE5SG?noRCgq0jH=L zT&rI9v0}LB0xVFU6G$K)P}%`^RCj&8>Bg#}*u}+rI-!RzG8WRZri0&p^d`(BX3|Ba zxG55-#HVESex9-LI6K;}gF2@ky!fTw;CY~g=4DP-h==qA3@jM+50IJXYtyR%_88D# zm~RyOU;)gJif#*q3em|TdAELj!4$ztTXFr$h*yHuXP!k#Hy=U_jL$_^B8orU*g@A$ zB)&~=!4o6?C!Bu?n5x}-hmO&AmZm{EE)RG~P;v z5*!S#3XKn<#tW^8@?A=%JYFR-ve!!&sT8}%>Nm+*ux;5DTOFNR8dP))`F0C%!_^98C_=!RoK?QKBMb{5V6Z^mu-+SO^9guDl z286<@%zNGztn2Z){dT}6BMb0+!K1^&=-wibQbnP_`@n|sigl)v)m>%BFx$WF6*TBS z_>OwFQn3=JGmW6&SUdjEQc81!l)8G-<>e(fwqCGVS3w{nw4k71+2)oajy0qRa(qOy zMHlk=u1(%LBr4ApgQwqv!b$|3hE^0v@K8f+pY!gfr$w#U=HnBS?x0g#G#!S7OI7iC za$jQ#-N5NvfGHYoakX7rsS_$bP2^*ooQ;s4+8Xuue28{P<^XDdsOQleQRQcn_&LX- zj-N~?p|RjL1rSwwus?BJ$SxWh@O(IiY3q#kz8PG}{NbH%ms|oyQ5s4-UebQ;LCd-2 zKbLCkFo87JsY__DSx^ycr&mE-nE!^sYL-PkA5u0ws zlXq(*ytDJbWI$+u4p+7(oG}BDrom;cG%O5s?tk`{h^2F8(%72Gjetmdri!8*TY-y^V#__aO_!!Q~19_EZW}OyKZlxpRVeT!`z){4=!oE zA%>0kn+5oL+zR44mKYWc>2ik5pZ-Xv3B8Hm-6^>2Gj41BEW@QxkfK@ z*Wb~h z;XbNkeo05Ttu&+P6cnq0wzzH+(u1DC&oO}ySb6(GPS2$l8m26^#MUWkSRY$d<49=q z61H4%BpaUB*y#dKydT2}L}DgpLQ7(+^>q6Gpum{?m|gX0HIBkxjYf&Ls;prq9z|2Wwk zdYkiqa;4|#@c z8pH8<;Ax*b+W`^-BfM`GH&%t$1%Pnbr=@_y)ywAL*u+D!U>Y6F458*k5QJa6vj0PI ze-&|XA|hVcF_;tYN}_#k#dG&TvSs?|aJ2@St5-3i!TR8HBx@(snP-I=EA7EG7|?%j zwWkzPC1-eRSyr!F>5bY|CrHp?UN|s_q<1E!OYUV2>W{EeeP1dgb77T0S+ku$4sp{$ zvXC4L?g@GEB>mob5U%w!znUTIk5 z!+H|S;jRQBeB4?v3|BHh5u|}3*(~MA&wo%^$MjUKa4Xp#II`Y+mg=a*ZewaZM$jMq ziWw(S9>|-=M!M7BGqRf?i`a}z4YgPcT^8DDCypfh!J8aDy$!Hk`{1e2hZ*dkikRBS zt^85*TIjH*YQIrua{m3NA#w>{`H9t5r=X6iCm%ATL?gUx#?ay5?*bw=mLhqgT=)Jt z`M>|3YSp)Cihn-cl7aTk@rM;5p6}MPlZiHSqqesz_9v{ibPZ63!VIKb;#Xq!NgH=1 zzJwyvHM$bNV~oCfKJceT&gFpON$0PNio8|<{kBu{UuXEVNrC#U7?eAFA0B@6KxZ4^ zEJI&wdf{iEdLdgU_%z?BLp9LbDYhBpv8uG}1LPTGFBRXm6JQ6RVh@rK>dHRze7M;c zW^&h#vQNi1w5W&vcet(K!RCfP8)%zci{l6i1_i66HZ!|Bh9X5SzwD-1z_c!hZBoVVI#>A<3pGzjC$6L|GKFsa!RDLGYVT-NL5MTp z8bvek+Vkmsyr>rp%T4T*9n>BN?qwxIX^3GO*MVFvD!URx!smF-C37##2oZQbz~_L+ zYn9q#p$&=D_?w&l72@{;{y8RHGWob)RuZhL8P0vay+^K*KcG0r+=!adv*8bj(-Q_Z zIv*5{NzGS2Fb)_smwenl$6LRL27gK5P<2Vk@P%dtA)%vE+~6gKy6|($?@#VaedH^2W8$R0_qtx)OjW~s zbZ-uP3Q9?Z-|WPozWz)0^;SJ{@0}8P(=p-o8a=wko8(3t#>?Js*8}9*U2V8wW`*~T zF&|VCr5wRo9J(rHG`-0|-L>TDfKF2ScAP_n6q0KXs@Sfrp?4ujga~)jF|?WG(6}1# z$y(L#L(%i#r;H(F$HnahbDFYFYwVFB?)9e>>w-;`Ay$J9?bPWHRNVXqUK^~6PW8uL0L;35< z3%InDGAJ0cjeM>cg3qWPw9hJ?8u6m+;JwZj>YANvHqDT0@w@x>4iXn|8(GRkT(~Ed zSFK6!pECp*y$-CMxe^WNtgTXvK4(%^W={_!X~FkY2BcCv%&nR_3{aX4HBWmoanDWq zJMR5v$IgFI-{|?y^A9RY7XQPXHd!eopVIXqtwdW}4G?QfOp!0#$?Kw5;5Z}e?1!v( zj(HJ{)2v&2x_z(@VmCXlfAn-$8|oOiicy!DzMDVnh4)+zyMI;9rrS1K^^f1&W?iPZ z-+nKzQx64}d2xQwU{D|fB^L$X=$|r%5Coj|s2Tk#dZt|*3Y-&~y*+OUlyEBR8y@I? zS^8>~LOiQwj1wS(%l)%jj#lcV@CF131(`00V~7_oOhLY=RiomjagN)>|M}@x2r7&KY#+aM zs63U?tP(p}Cek(r{r}sHL;&ukv1_N5VR|p8s!?AoYI4FmB1*035s<3Xf)Zp)7Dm!V zMV*#aJAGIT;`hk;GvSJ3+aTK^|l11PdnsUtl`#-fN7zDru~GI@q&&(=_p-8Tjpa3n$%R*(cMWk(a`1< z{FZi|0hV*D=vIbYTP+Y(=vui z|II-q?L#uFc7ev8-ozzZ8koZ2xDt7T9=E(p!up@I49{}J(f*kDyDZu@m{rQi$f#PY z%4^D4cX5aKB*oDOKw;y|;oFcYBbQ$UOM<8Mc@Cj;k|PjH%kj+#YC z+SZ*cWO~T4mn}(7F6o@2t-W+JHPOr-bH*}UYdpDMNSlmirVNnXpJ7PGG}dkEzW0hu zQ#uxQz82mbaAShFU$M#&eow?YIm(CKLL;qUXS%x&^p_~x8;Y8o@o&4a(9WKl>U}|s zNw#uVkV-xK=D8p9c|I&l=qmW1;RY`kbX<;Vjt!~FpbGL_n>$1h_%Ebn9#6>X3gGMji`IEEN>BXfOuGiXT90}mEgwZ-ZzIpQ;dFIwCerr@p z7)g?*AAC~%1_0hgmUH-J=zCpfz)Fk;ULo=`3)qbT3CWL=5Xec_f;UAnozme%!tw!j zEwcQ~irdq?V4R>3%0)v%6ZqfLm2nG0uOKlx^bhXZ%(Kb0fBCX;e(s{-;5e3|;z4i$}Bpkm-yCRgkc?5*h z0};O)XI-d&5$>VW<_$_y(*2tXy6FN}c>I$(Fxen+%Zt>~nIy<>yl(;pyK#}HXa};-LzeU^jxe1^`I%*AMe!}D z>uRB9`F0KON8a;ZP1w*6?HDeYXd}Vl?mv$j0pnI}{UQ63)&V3e6$9ipx3F0ij^Xcp zDV^A_8SaNU{by=0-IO|dEKPhrfDIt$CKe%AsPlVaTG^#B zzE*}3v*hy2ThX1xuXo&ny$t!A%i>33~3!*&*k83j&x9&@36qxrTMQeS|!XrcjqI!If!YR|GWpsRJm|!zt z@UGbsBy0t}cW!xCfqLw3xT( z+eSpIVG*Rvy^8DxFApi8-~Z#BT?bv7dSS@`cG&+z%9vE3Pk676OM5dX(~tNq8im~D zKWPTHM%k+Eu)jcQ&s^p)Z2hma`rl&@ZHbDS^CRLZ8*{p8`+0kP)}8njfkc=&WN;d2 zVg64~cZ12?)zuYJ)GrpfbGt_9)9acuf&B0+?NY!UV9|*RPVcA9q5OBmc7{`fpNbE_ zN})uk+o?XSN0K#LK~F_s(ha8YR$ElcP{^}5_s|UoSjIS%uD5hx^CYy_8d2Ef975jr zA(X1W0O1-6S$V~3XIuzr&3OOm%Oh#VcN4 z$eJ^X+^+GdL35dTxqACWS_b2d(s#IGCeteu=}meUM#E!7XI?PeFC^cYtAARKHkpa6 z`zN$(jYsz1p+>5B53Ow4gT>Z`&r#39L&TxOGC%)sf4ANXdg=wjz<2NpO@B0*9HRWI z>j@zTo3yTpoN9~hr;woAb~BfOLe#m?K(+;!8aOY~jp+B`?^h1Ojm)%sNJOE~&xivW zdQ8_mY)W6i*Y`g1DAWt`6n_=ZoiH9Pm{}QgN#_%=O{qDZdj26zW=MzGG4ap=8HU># zHD7Kjh0aMA53@|n4m`6EO7YLuF~$BrsP)`#?fJiLGMy6?Y9ugdg!{@9X`P<v<`r_@yfi8Q95^<0l6 zPi!UcQcFR6xAhMv&hPA8?OE8gO&QEnn$N_2t9j~a<|lbw#}BuMd1uCBSf64CzwspFQ^{y~V*~57@Q9AJQAy|M?h`j;m?P6rd02%Q7GboV4hvT#|hE^Sv>N>;o z2PdRO(h$Or6+&6AmM9&dQT|O}D&hlJtjMM}u*J(19g0Kaczhn(_|#}dvlKv~7DPMo z2J)%*n7+BP+OQP@Ci*qj!rzEEzMKu3F}rRt82iaZMOsc}HdWVOjhM{&mkZdxF|2^I zup`13a`?Yhz!SGJUn|H~qEloBQizgHqux!edisqlv=c_6E3J0v1`autigw=Z|8(iO z56%^K7}LBd8{~{Jelj{q>=l!-nGZ!k2q$|lynWtsWHbiMN)g36_U-*HrQzq*RrVv`oq9fUyvJ&rWnb*Y!oq^oRl)~t znRaYdTzxjuSfmwSNFk*ig&x>pH6lsR!6~|HRf(qW%^kk*wN0bIYWay;l)#DdZL=5Y z81A!rLv0zX+2FWxb@`l6TBw9w2^cDHI>VPIe?fiU%wsm*ogaiP*~z z5U3~U5-63#$yGB81gMfs@(W(I4rD|zF)%E7YlncxR9E6Ix)`MsAyq4}S~a<94cJZ0 zV0I;RmeR^=bkl*fw*b?bMawWSl}*gDTf+?V>%BAYaa2z2&&y^OL7VU6th?QS>c{P` zCf?&98q;4F6p=w`q<7Ag$xX$SsLchTtk1l`lfUmxAHVO9?Nm|mf$D0NcP6*&JUf0l z4okd0@6bDg8jKVD1V*QPWR$4FE5($edv_n>Sgr8w`sSjv$&}vv6Ds&4&tvr+PEa zg9yEGqEe;8Z4-&v#ZU|R%Pu)A_={Ty+>W9DSvGMWc&(@SrC#iO8(wi6;QnlBc1Lq_ zXkJ6BvS_0iykOwffbjbGtQ~@OeXw_LqR2;n@sU1$x5)(A&!FxYPX+wyON!_S?n z(Vw46tDUYk#9I_o_Z{z3Mr4F5Va>)tX;&Ym)lFA`$ z>9T#;N>)6XqN@>-%zUfXq3yU`MSMr9bS{|iDTtOCU4wJ5K;W_yb&n|ehdy~OZ$@B~ z_+7ulc(pZj<{V&4p(X9A8lo%v1;nrve_$qU{P7tYaj@YV)%6^FJtk_J2>J53x;rug z=W5=UQVIq9!;sz&BPQbEYgW=Ae91aaSPe_Pf z!hxP5<=5&sJmMP^{BeH1-9I&ZDPt|*Vt(m|u;*CL@{iJ--6o$I=4h39PxrooqxF_8z_%M2@( z*bG$TO>MbJdhjgbGYa56uYmJH_4hi=qs5%(5;GsYcA{4Bq7 zqj{V3`W16moz1Wq(Kiq;v5}j0 z1OBLJ5${XWBqq{k0P>C<3pNGS#E%W+t$T`-lmyml!rsVlT}(c>0^L-KHEs*QxVK*6 zXkAlXb{cceEkI9b{;r01kl0QO0P-3lTJ>sa+m66W-m1bzr(z^cTl&0JdiuT zegO+qWwC5~DV3t|&#cT?&$F{=8%~iq1rP$Z{`tINJ0zZmJCiY+E z$L=JJK!8n2H)VG;6vdalQu;2s?1{Ib{#B<&ac%$SdS}r_m&hm+yncSZc$^0cBZMYv z8>YLP&p=pSR#!~-+eT-9T267HhsyEz7$_s72u zJ#49o9h3o89jmyHW$m8?p7=j(V@!Nrr+aoli$G*C=%F@MFIt0=ek!2kLu`!$^OH)3?pAV$Gyl#-vpo~kv6lIc9gU$(@Ku9|9mwd&&ug)5J86Bj*bx=s*tCApipUnH^qlF_&0N`=!Kzoa|HT+0Xy+epn< zNAsn2W(jSf7?-b#w#O&PjMC)BgT$kXh@d{o5bYbv*o_L`(nKpy1fnnaGD)xNe_5Bk zjocKtB_mB_W}}VtqG2G#mlah9?mdb-HNPy7YUJQ7^0g`Yvtvv-(86Xx2lJzNYlylw zihiE2PC}a3%k?mHg|kj!4M)6w?aaPVZRh*y(m=;;izP?I{K|CkQpn-?jGeEkyzs@> zWzBhf4>HQ7-tWNykmH4)16UAMfE$ULJTun)7azyKQe<#i2@QVNuj7jXRvPQ#L8hNj z|K*!+(yyMaqCR53b6yb>%p5*0sznp`2JAJ=NHl$!ucIY6H3|;zWT=FQC#9UQT_h*$ z4;y`h=?&UOTKOx(r_M9tpBaE1kRWt@g(k8USxAdR+O_+dBhak_+(!9B#ge$#lBA6T zxU1+Jj87;(omUFMsyM(|>s9qFj{>)$LDQ~SA ze0cm4+6tIfP*r5yEM#HnAB-$Yk^Hq%y283&)Zd9GZpO}f11W=agg~0J~QHIaBz!?#PaH&ah0=YUuwaCpVaX_m|0r~1>sq``U)xoUZl)Liw4t*nBzcLs!2cb?FawM=n70;yK-QaIZ zbFrgCjv7ISqLf?{|J0BQ_X_JatgnyN@+F($W__Vs_$L-GNVyhus-5_6#i>fgBpm8d zbKHFbkAh_^6`o?1_=nX#A=BaLS;Fhd8)J>|A;+Y_Nx(XP3^O5JC#k7BE#0A!Zd>KI zhhT+%Bi!RhyW9Rdsl)x@2AVSa#h|Oi#0G~pv(tVUD-r2itcTBG8{2KJSIUmFKApA? zFi{aq2v8;+#<-9?4QhYNMC;FCYhoF!4$r|FLXA=WuT{3gEirK3szh zWv1F>(Y64TU%)a%o?N<+aHscV9&V2jq}RClmsOyi&e>CBQJ9F?%-=M^%dp8?=>9Sf z%<~Dwg|F5a<(l;^ZKV;$=ce24Fgs zZ%>}MTBO?3C-IQ9$5F6@g0v;$2%Jilv=I&jeh*?uY0_8ZUc!?uKiuBo5#{n7_>(pJ zsw1Vzzs5UVxe7za;h+6DtQeFaOQZbGYEM~o)_FwiBi&79n_upYP<5a>^Al{=Y^RIB z{5-*^{maw&yrz+6SDxPsaFz>iE4jBf=i>STB9M)cM|`1Nkig-=MEj!a{XNL$;Bn%- z-Ook}pH4l%c++ZFf|O47xSbx8)f+$ea7~}QGI~d>O(By=XshU@4pptCBhfy$2Dit= z@=D?YEDH`pj|7pn>N%fQ=;(*z&1iga9;kFI{XG$BqMh$wlEjTo*EKQ|m9uMcmd|rU zHPiFUX>NB(xL_c;ojf+lVtAe3ZzHwm^VMG$+@E6vyf=vW_{LX`v+)6xVa*}o@4a?H zW`hTI|2od{kJ+^@wC5kU^b0$B2ROMHi}rMg5{@{wc5Hvc;|kgK`q_44)>bX5BB`}6o%`tUYmw9;+T{%>MHGF=iSzrE#;psJUfNdEygM&ZI0LOxQo zpJEE;uuC0edei2%wlQqoh_^RjL<CJ%z|f7X4!#0NL)s)S`$VUiZtPbckKiJmD1Ot$$JuZ*@n9Q)1)`> zpw3JCU>R)~36<3Xi}IDU_KqWwIg zuh&~_UHARjPBk0qo6@G0YI>4R8NT56J}Rrei)OVoAuGBiQCKtE^h(0y=h!Y#tYKk# ziC(g0oho;88$oA(0{SD(jH6pt2$6fMiI;gCE%9!HpD&>uf6a061h(s&^<1g7$O<{! z6LjCbzC>m7#zOCV_XnjK)fMYcikAZE{WDHRy|(dEDB=@qWI9b-b7A&1nS7Y#x2V}iE!q66Dm

y%14;_zXL>Z4!xqZi&u1z?@ z<3ObzHa!p%#?xo%%0zWq;fr{>5riDD>UbKf3S;Ps0&kwKYJ!hJL+`h##BfJyGIufs zNBJju{uHWg2jV=yRJ66tVp9IwE}bFXsFLV9pj9rQyN+iE#IzccS3g5*S@q*n)l� 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�=me7jtm(-e7EQN^op7Sq-4NwtfIdH7LGDYt+SW+ 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

LspQYi>b08uvTt{zR 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 IrtbIu2PQs=-v9sr diff --git a/electrum/gui/kivy/theming/light.atlas b/electrum/gui/kivy/theming/light.atlas deleted file mode 100644 index acae07b06..000000000 --- a/electrum/gui/kivy/theming/light.atlas +++ /dev/null @@ -1 +0,0 @@ -{"light-0.png": {"electrum_icon640": [2, 702, 320, 320], "nfc_stage_one": [324, 900, 489, 122], "nfc_clock": [2, 460, 243, 240], "stepper_full": [324, 781, 392, 117], "stepper_left": [247, 583, 392, 117], "stepper_restore_password": [247, 464, 392, 117], "stepper_restore_seed": [2, 341, 392, 117], "qrcode": [2, 194, 145, 145], "manualentry": [149, 205, 145, 134], "gear": [2, 33, 105, 159], "calculator": [296, 211, 128, 128], "save": [426, 211, 128, 128], "share": [556, 211, 128, 128], "star_big_inactive": [686, 211, 128, 128], "nfc_phone": [816, 213, 128, 126], "logo": [815, 906, 128, 116], "error": [718, 784, 128, 114], "textinput_active": [848, 784, 114, 114], "close": [641, 612, 88, 88], "important": [731, 612, 88, 88], "paste_icon": [945, 945, 75, 77], "globe": [946, 267, 72, 72], "camera": [821, 636, 64, 64], "carousel_deselected": [887, 636, 64, 64], "carousel_selected": [953, 636, 64, 64], "clock1": [641, 517, 64, 64], "clock2": [707, 517, 64, 64], "clock3": [773, 517, 64, 64], "clock4": [839, 517, 64, 64], "clock5": [905, 517, 64, 64], "confirmed": [324, 715, 64, 64], "contact_overlay": [390, 715, 64, 64], "icon_border": [456, 715, 64, 64], "info": [522, 715, 64, 64], "logo_atom_dull": [588, 715, 64, 64], "nfc": [654, 715, 64, 64], "pen": [720, 715, 64, 64], "shadow": [786, 715, 64, 64], "tab": [852, 715, 64, 64], "unconfirmed": [918, 715, 64, 64], "mail_icon": [396, 404, 65, 54], "settings": [964, 834, 54, 64], "card": [946, 216, 64, 49], "tab_disabled": [641, 483, 96, 32], "tab_strip": [739, 483, 96, 32], "closebutton": [964, 789, 60, 43], "arrow_back": [971, 531, 50, 50], "contact": [463, 409, 49, 49], "wallets": [514, 418, 60, 40], "network": [396, 354, 48, 48], "bit_logo": [109, 141, 44, 51], "add_contact": [446, 359, 51, 43], "wallet": [155, 148, 49, 44], "btn_create_account": [945, 911, 64, 32], "action_group_dark": [984, 731, 33, 48], "action_group_light": [109, 91, 33, 48], "action_bar": [576, 422, 36, 36], "card_btn": [837, 483, 38, 32], "btn_create_act_disabled": [877, 483, 32, 32], "tab_btn": [911, 483, 32, 32], "tab_btn_disabled": [945, 483, 32, 32], "tab_btn_pressed": [979, 483, 32, 32], "dropdown_background": [614, 423, 29, 35], "overflow_background": [645, 423, 29, 35], "blue_bg_round_rb": [821, 614, 31, 20], "lightblue_bg_round_lb": [854, 614, 31, 20], "white_bg_round_top": [887, 614, 31, 20], "card_bottom": [920, 618, 32, 16], "card_top": [954, 618, 32, 16], "dialog": [641, 590, 18, 20], "btn_send_address": [988, 619, 18, 15], "btn_send_nfc": [641, 466, 18, 15], "create_act_text": [984, 719, 22, 10], "create_act_text_active": [971, 519, 22, 10], "action_button_group": [1008, 719, 16, 10], "overflow_btn_dn": [1008, 624, 16, 10], "shadow_right": [641, 583, 32, 5], "btn_nfc": [1011, 931, 13, 12]}} \ No newline at end of file From 8fe066707a928cc864a6b11353dcc56049101187 Mon Sep 17 00:00:00 2001 From: ThomasV Date: Thu, 6 Sep 2018 17:47:10 +0200 Subject: [PATCH 30/76] rm import --- electrum/plugins/labels/labels.py | 1 - 1 file changed, 1 deletion(-) diff --git a/electrum/plugins/labels/labels.py b/electrum/plugins/labels/labels.py index cf0833c5d..30c0c3127 100644 --- a/electrum/plugins/labels/labels.py +++ b/electrum/plugins/labels/labels.py @@ -1,6 +1,5 @@ import asyncio import hashlib -import requests import json import sys import traceback From dc51e82f5463767178c73d17d01198d3cfc7f6f2 Mon Sep 17 00:00:00 2001 From: SomberNight Date: Thu, 6 Sep 2018 18:25:23 +0200 Subject: [PATCH 31/76] fx: don't dump trace if getting rates fails --- electrum/exchange_rate.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/electrum/exchange_rate.py b/electrum/exchange_rate.py index e94c0468e..6a89a6e06 100644 --- a/electrum/exchange_rate.py +++ b/electrum/exchange_rate.py @@ -11,6 +11,7 @@ import csv import decimal from decimal import Decimal import concurrent.futures +import traceback from .bitcoin import COIN from .i18n import _ @@ -97,8 +98,7 @@ class ExchangeBase(PrintError): self.print_error("received fx history for", ccy) except BaseException as e: self.print_error("failed fx history:", e) - import traceback - traceback.print_exc() + #traceback.print_exc() return filename = os.path.join(cache_dir, self.name() + '_' + ccy) with open(filename, 'w', encoding='utf-8') as f: From 617103bb2a54990741ade636b697b42ec51cd462 Mon Sep 17 00:00:00 2001 From: Janus Date: Thu, 6 Sep 2018 18:29:55 +0200 Subject: [PATCH 32/76] labels: fix saving single label --- electrum/plugins/labels/labels.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/electrum/plugins/labels/labels.py b/electrum/plugins/labels/labels.py index 30c0c3127..623023cb7 100644 --- a/electrum/plugins/labels/labels.py +++ b/electrum/plugins/labels/labels.py @@ -54,7 +54,7 @@ class LabelsPlugin(BasePlugin): "walletNonce": nonce, "externalId": self.encode(wallet, item), "encryptedLabel": self.encode(wallet, label)} - asyncio.get_event_loop().create_task(self.do_post_safe("/label", False, bundle)) + asyncio.get_event_loop().create_task(self.do_post_safe("/label", bundle)) # Caller will write the wallet self.set_nonce(wallet, nonce + 1) @@ -71,7 +71,7 @@ class LabelsPlugin(BasePlugin): async def do_post(self, url = "/labels", data=None): url = 'https://' + self.target_host + url async with make_aiohttp_session(self.proxy) as session: - async with session.post(url, data=data) as result: + async with session.post(url, json=data) as result: return await result.json() async def push_thread(self, wallet): From 8f4b57f718fa31abbb098397f4dc8c592ee44c39 Mon Sep 17 00:00:00 2001 From: ThomasV Date: Thu, 6 Sep 2018 18:49:37 +0200 Subject: [PATCH 33/76] run freeze_packages --- contrib/deterministic-build/requirements.txt | 76 ++++++++++++++++++++ 1 file changed, 76 insertions(+) diff --git a/contrib/deterministic-build/requirements.txt b/contrib/deterministic-build/requirements.txt index c75d9fc48..45ca2c6ad 100644 --- a/contrib/deterministic-build/requirements.txt +++ b/contrib/deterministic-build/requirements.txt @@ -1,3 +1,37 @@ +aiohttp==3.4.4 \ + --hash=sha256:0419705a36b43c0ac6f15469f9c2a08cad5c939d78bd12a5c23ea167c8253b2b \ + --hash=sha256:1812fc4bc6ac1bde007daa05d2d0f61199324e0cc893b11523e646595047ca08 \ + --hash=sha256:2214b5c0153f45256d5d52d1e0cafe53f9905ed035a142191727a5fb620c03dd \ + --hash=sha256:275909137f0c92c61ba6bb1af856a522d5546f1de8ea01e4e726321c697754ac \ + --hash=sha256:3983611922b561868428ea1e7269e757803713f55b53502423decc509fef1650 \ + --hash=sha256:51afec6ffa50a9da4cdef188971a802beb1ca8e8edb40fa429e5e529db3475fa \ + --hash=sha256:589f2ec8a101a0f340453ee6945bdfea8e1cd84c8d88e5be08716c34c0799d95 \ + --hash=sha256:789820ddc65e1f5e71516adaca2e9022498fa5a837c79ba9c692a9f8f916c330 \ + --hash=sha256:7a968a0bdaaf9abacc260911775611c9a602214a23aeb846f2eb2eeaa350c4dc \ + --hash=sha256:7aeefbed253f59ea39e70c5848de42ed85cb941165357fc7e87ab5d8f1f9592b \ + --hash=sha256:7b2eb55c66512405103485bd7d285a839d53e7fdc261ab20e5bcc51d7aaff5de \ + --hash=sha256:87bc95d3d333bb689c8d755b4a9d7095a2356108002149523dfc8e607d5d32a4 \ + --hash=sha256:9d80e40db208e29168d3723d1440ecbb06054d349c5ece6a2c5a611490830dd7 \ + --hash=sha256:a1b442195c2a77d33e4dbee67c9877ccbdd3a1f686f91eb479a9577ed8cc326b \ + --hash=sha256:ab3d769413b322d6092f169f316f7b21cd261a7589f7e31db779d5731b0480d8 \ + --hash=sha256:b066d3dec5d0f5aee6e34e5765095dc3d6d78ef9839640141a2b20816a0642bd \ + --hash=sha256:b24e7845ae8de3e388ef4bcfcf7f96b05f52c8e633b33cf8003a6b1d726fc7c2 \ + --hash=sha256:c59a953c3f8524a7c86eaeaef5bf702555be12f5668f6384149fe4bb75c52698 \ + --hash=sha256:cf2cc6c2c10d242790412bea7ccf73726a9a44b4c4b073d2699ef3b48971fd95 \ + --hash=sha256:e0c9c8d4150ae904f308ff27b35446990d2b1dfc944702a21925937e937394c6 \ + --hash=sha256:f1839db4c2b08a9c8f9788112644f8a8557e8e0ecc77b07091afabb941dc55d0 \ + --hash=sha256:f3df52362be39908f9c028a65490fae0475e4898b43a03d8aa29d1e765b45e07 +aiohttp_socks==0.1.6 \ + --hash=sha256:943148a3797ba9ffb6df6ddb006ffdd40538885b410589d589bda42a8e8bcd5a +aiorpcX==0.7.3 \ + --hash=sha256:24dd4fe2f65f743cb74c8626570470e325bb777bb66d1932e7d2965ae71d1164 \ + --hash=sha256:5120ca40beef6b6a45d3a7055e343815401385dc607da2fd93baca2762c8a97d +async_timeout==3.0.0 \ + --hash=sha256:474d4bc64cee20603e225eb1ece15e248962958b45a3648a9f5cc29e827a610c \ + --hash=sha256:b3c0ddc416736619bd4a95ca31de8da6920c3b9a140c64dbef2b2fa7bf521287 +attrs==18.2.0 \ + --hash=sha256:10cbf6e27dbce8c30807caf056c8eb50917e0eaafe86347671b57254006c3e69 \ + --hash=sha256:ca4be454458f9dec299268d472aaa5a11f67a4ff70093396e1ceae9c76cf4bbb certifi==2018.8.24 \ --hash=sha256:376690d6f16d32f9d1fe8932551d80b23e9d393a8578c5633a2ed39a64861638 \ --hash=sha256:456048c7e371c089d0a77a5212fb37a2c2dce1e24146e3b7e0261736aaeaa22a @@ -13,9 +47,41 @@ ecdsa==0.13 \ idna==2.7 \ --hash=sha256:156a6814fb5ac1fc6850fb002e0852d56c0c8d2531923a51032d1b70760e186e \ --hash=sha256:684a38a6f903c1d71d6d5fac066b58d7768af4de2b832e426ec79c30daa94a16 +idna_ssl==1.1.0 \ + --hash=sha256:a933e3bb13da54383f9e8f35dc4f9cb9eb9b3b78c6b36f311254d6d0d92c6c7c jsonrpclib-pelix==0.3.1 \ --hash=sha256:5417b1508d5a50ec64f6e5b88907f111155d52607b218ff3ba9a777afb2e49e3 \ --hash=sha256:bd89a6093bc4d47dc8a096197aacb827359944a4533be5193f3845f57b9f91b4 +multidict==4.4.0 \ + --hash=sha256:112eeeddd226af681dc82b756ed34aa7b6d98f9c4a15760050298c21d715473d \ + --hash=sha256:13b64ecb692effcabc5e29569ba9b5eb69c35112f990a16d6833ec3a9d9f8ec0 \ + --hash=sha256:1725373fb8f18c2166f8e0e5789851ccf98453c849b403945fa4ef59a16ca44e \ + --hash=sha256:2061a50b7cae60a1f987503a995b2fc38e47027a937a355a124306ed9c629041 \ + --hash=sha256:35b062288a9a478f627c520fd27983160fc97591017d170f966805b428d17e07 \ + --hash=sha256:467b134bcc227b91b8e2ef8d2931f28b50bf7eb7a04c0403d102ded22e66dbfc \ + --hash=sha256:475a3ece8bb450e49385414ebfae7f8fdb33f62f1ac0c12935c1cfb1b7c1076a \ + --hash=sha256:49b885287e227a24545a1126d9ac17ae43138610713dc6219b781cc0ad5c6dfc \ + --hash=sha256:4c95b2725592adb5c46642be2875c1234c32af841732c5504c17726b92082021 \ + --hash=sha256:4ea7ed00f4be0f7335c9a2713a65ac3d986be789ce5ebc10821da9664cbe6b85 \ + --hash=sha256:5e2d5e1d999e941b4a626aea46bdc4206877cf727107fdaa9d46a8a773a6e49b \ + --hash=sha256:8039c520ef7bb9ec7c3db3df14c570be6362f43c200ae9854d2422d4ffe175a4 \ + --hash=sha256:81459a0ebcca09c1fcb8fe887ed13cf267d9b60fe33718fc5fd1a2a1ab49470a \ + --hash=sha256:847c3b7b9ca3268e883685dc1347a4d09f84de7bd7597310044d847590447492 \ + --hash=sha256:8551d1db45f0ca4e8ec99130767009a29a4e0dc6558a4a6808491bcd3472d325 \ + --hash=sha256:8fa7679ffe615e0c1c7b80946ab4194669be74848719adf2d7867b5e861eb073 \ + --hash=sha256:a42a36f09f0f907579ff0fde547f2fde8a739a69efe4a2728835979d2bb5e17b \ + --hash=sha256:a5fcad0070685c5b2d04b468bf5f4c735f5c176432f495ad055fcc4bc0a79b23 \ + --hash=sha256:ae22195b2a7494619b73c01129ddcddc0dfaa9e42727404b1d9a77253da3f420 \ + --hash=sha256:b360e82bdbbd862e1ce2a41cc3bbd0ab614350e813ca74801b34aac0f73465aa \ + --hash=sha256:b96417899344c5e96bef757f4963a72d02e52653a4e0f99bbea3a531cedac59f \ + --hash=sha256:b9e921140b797093edfc13ac08dc2a4fd016dd711dc42bb0e1aaf180e48425a7 \ + --hash=sha256:c5022b94fc330e6d177f3eb38097fb52c7df96ca0e04842c068cf0d9fc38b1e6 \ + --hash=sha256:cf2b117f2a8d951638efc7592fb72d3eeb2d38cc2194c26ba7f00e7190451d92 \ + --hash=sha256:d79620b542d9d0e23ae9790ca2fe44f1af40ffad9936efa37bd14954bc3e2818 \ + --hash=sha256:e2860691c11d10dac7c91bddae44f6211b3da4122d9a2ebb509c2247674d6070 \ + --hash=sha256:e3a293553715afecf7e10ea02da40593f9d7f48fe48a74fc5dd3ce08a0c46188 \ + --hash=sha256:e465be3fe7e992e5a6e16731afa6f41cb6ca53afccb4f28ea2fa6457783edf15 \ + --hash=sha256:e6d27895ef922bc859d969452f247bfbe5345d9aba69b9c8dbe1ea7704f0c5d9 pip==18.0 \ --hash=sha256:070e4bf493c7c2c9f6a08dd797dd3c066d64074c38e9e8a0fb4e6541f266d96c \ --hash=sha256:a0e11645ee37c90b40c46d607070c4fd583e2cd46231b1c06e389c5e814eed76 @@ -64,6 +130,16 @@ urllib3==1.23 \ wheel==0.31.1 \ --hash=sha256:0a2e54558a0628f2145d2fc822137e322412115173e8a2ddbe1c9024338ae83c \ --hash=sha256:80044e51ec5bbf6c894ba0bc48d26a8c20a9ba629f4ca19ea26ecfcf87685f5f +yarl==1.2.6 \ + --hash=sha256:2556b779125621b311844a072e0ed367e8409a18fa12cbd68eb1258d187820f9 \ + --hash=sha256:4aec0769f1799a9d4496827292c02a7b1f75c0bab56ab2b60dd94ebb57cbd5ee \ + --hash=sha256:55369d95afaacf2fa6b49c84d18b51f1704a6560c432a0f9a1aeb23f7b971308 \ + --hash=sha256:6c098b85442c8fe3303e708bbb775afd0f6b29f77612e8892627bcab4b939357 \ + --hash=sha256:9182cd6f93412d32e009020a44d6d170d2093646464a88aeec2aef50592f8c78 \ + --hash=sha256:c8cbc21bbfa1dd7d5386d48cc814fe3d35b80f60299cdde9279046f399c3b0d8 \ + --hash=sha256:db6f70a4b09cde813a4807843abaaa60f3b15fb4a2a06f9ae9c311472662daa1 \ + --hash=sha256:f17495e6fe3d377e3faac68121caef6f974fcb9e046bc075bcff40d8e5cc69a4 \ + --hash=sha256:f85900b9cca0c67767bb61b2b9bd53208aaa7373dae633dbe25d179b4bf38aa7 colorama==0.3.9 \ --hash=sha256:463f8483208e921368c9f306094eb6f725c6ca42b0f97e313cb5d5512459feda \ --hash=sha256:48eb22f4f8461b1df5734a074b57042430fb06e1d61bd1e11b078c0fe6d7a1f1 From 52b877ac3d978021ff77f2196c737d2b838a48d0 Mon Sep 17 00:00:00 2001 From: Janus Date: Fri, 7 Sep 2018 11:34:56 +0200 Subject: [PATCH 34/76] network: add singleton accessor classmethod, port trustedcoin to aiohttp --- electrum/exchange_rate.py | 11 +--- .../gui/kivy/uix/dialogs/crash_reporter.py | 9 +-- electrum/gui/qt/exception_window.py | 9 +-- electrum/network.py | 8 +++ electrum/plugins/trustedcoin/trustedcoin.py | 60 +++++++++++-------- 5 files changed, 51 insertions(+), 46 deletions(-) diff --git a/electrum/exchange_rate.py b/electrum/exchange_rate.py index 6a89a6e06..4503ce31d 100644 --- a/electrum/exchange_rate.py +++ b/electrum/exchange_rate.py @@ -17,7 +17,7 @@ from .bitcoin import COIN from .i18n import _ from .util import PrintError, ThreadJob, make_dir, aiosafe from .util import make_aiohttp_session - +from .network import Network # See https://en.wikipedia.org/wiki/ISO_4217 CCY_PRECISIONS = {'BHD': 3, 'BIF': 0, 'BYR': 0, 'CLF': 4, 'CLP': 0, @@ -27,8 +27,6 @@ CCY_PRECISIONS = {'BHD': 3, 'BIF': 0, 'BYR': 0, 'CLF': 4, 'CLP': 0, 'RWF': 0, 'TND': 3, 'UGX': 0, 'UYI': 0, 'VND': 0, 'VUV': 0, 'XAF': 0, 'XAU': 4, 'XOF': 0, 'XPF': 0} -PROXY = None - class ExchangeBase(PrintError): def __init__(self, on_quotes, on_history): @@ -40,14 +38,14 @@ class ExchangeBase(PrintError): async def get_raw(self, site, get_string): # APIs must have https url = ''.join(['https://', site, get_string]) - async with make_aiohttp_session(PROXY) as session: + async with make_aiohttp_session(Network.get_instance().proxy) as session: async with session.get(url) as response: return await response.text() async def get_json(self, site, get_string): # APIs must have https url = ''.join(['https://', site, get_string]) - async with make_aiohttp_session(PROXY) as session: + async with make_aiohttp_session(Network.get_instance().proxy) as session: async with session.get(url) as response: return await response.json() @@ -448,11 +446,8 @@ class FxThread(ThreadJob): self.trigger.set() self.set_exchange(self.config_exchange()) make_dir(self.cache_dir) - self.set_proxy('bogus', self.network.proxy) def set_proxy(self, trigger_name, *args): - global PROXY - PROXY = args[0] self.trigger.set() def get_currencies(self, h): diff --git a/electrum/gui/kivy/uix/dialogs/crash_reporter.py b/electrum/gui/kivy/uix/dialogs/crash_reporter.py index 00e96f2f0..f02222fd7 100644 --- a/electrum/gui/kivy/uix/dialogs/crash_reporter.py +++ b/electrum/gui/kivy/uix/dialogs/crash_reporter.py @@ -103,11 +103,6 @@ class CrashReporter(BaseCrashReporter, Factory.Popup): self.ids.crash_message.text = BaseCrashReporter.CRASH_MESSAGE self.ids.request_help_message.text = BaseCrashReporter.REQUEST_HELP_MESSAGE self.ids.describe_error_message.text = BaseCrashReporter.DESCRIBE_ERROR_MESSAGE - self.proxy = self.main_window.network.proxy - self.main_window.network.register_callback(self.set_proxy, ['proxy_set']) - - def set_proxy(self, evt, proxy): - self.proxy = proxy def show_contents(self): details = CrashReportDetails(self.get_report_string()) @@ -121,7 +116,9 @@ class CrashReporter(BaseCrashReporter, Factory.Popup): def send_report(self): try: - response = json.loads(BaseCrashReporter.send_report(self, self.main_window.network.asyncio_loop, self.proxy, "/crash.json")) + loop = self.main_window.network.asyncio_loop + proxy = self.main_window.network.proxy + response = json.loads(BaseCrashReporter.send_report(self, loop, proxy, "/crash.json")) except (ValueError, ClientError): self.show_popup(_('Unable to send report'), _("Please check your network connection.")) else: diff --git a/electrum/gui/qt/exception_window.py b/electrum/gui/qt/exception_window.py index c4e337f1a..1d30b3eea 100644 --- a/electrum/gui/qt/exception_window.py +++ b/electrum/gui/qt/exception_window.py @@ -42,9 +42,6 @@ class Exception_Window(BaseCrashReporter, QWidget, MessageBoxMixin): BaseCrashReporter.__init__(self, exctype, value, tb) self.main_window = main_window - self.proxy = self.main_window.network.proxy - self.main_window.network.register_callback(self.set_proxy, ['proxy_set']) - QWidget.__init__(self) self.setWindowTitle('Electrum - ' + _('An Error Occurred')) self.setMinimumSize(600, 300) @@ -92,12 +89,10 @@ class Exception_Window(BaseCrashReporter, QWidget, MessageBoxMixin): self.setLayout(main_box) self.show() - def set_proxy(self, evt, proxy): - self.proxy = proxy - def send_report(self): try: - response = BaseCrashReporter.send_report(self, self.main_window.network.asyncio_loop, self.proxy) + proxy = self.main_window.network.proxy + response = BaseCrashReporter.send_report(self, self.main_window.network.asyncio_loop, proxy) except BaseException as e: traceback.print_exc(file=sys.stderr) self.main_window.show_critical(_('There was a problem with the automatic reporting:') + '\n' + diff --git a/electrum/network.py b/electrum/network.py index d14d22953..7794738ef 100644 --- a/electrum/network.py +++ b/electrum/network.py @@ -158,6 +158,8 @@ def deserialize_server(server_str): def serialize_server(host, port, protocol): return str(':'.join([host, port, protocol])) +INSTANCE = None + class Network(PrintError): """The Network class manages a set of connections to remote electrum servers, each connected socket is handled by an Interface() object. @@ -173,6 +175,8 @@ class Network(PrintError): verbosity_filter = 'n' def __init__(self, config=None): + global INSTANCE + INSTANCE = self if config is None: config = {} # Do not use mutables as default values! self.config = SimpleConfig(config) if isinstance(config, dict) else config @@ -244,6 +248,10 @@ class Network(PrintError): # just to not trigger a warning from switch_to_interface the first time we change default_server self.server_info_job.set_result(1) + @staticmethod + def get_instance(): + return INSTANCE + def with_interface_lock(func): def func_wrapper(self, *args, **kwargs): with self.interface_lock: diff --git a/electrum/plugins/trustedcoin/trustedcoin.py b/electrum/plugins/trustedcoin/trustedcoin.py index ccd24e332..638cda279 100644 --- a/electrum/plugins/trustedcoin/trustedcoin.py +++ b/electrum/plugins/trustedcoin/trustedcoin.py @@ -22,10 +22,9 @@ # ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN # CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. - +import asyncio import socket import os -import requests import json import base64 from urllib.parse import urljoin @@ -38,8 +37,9 @@ from electrum.mnemonic import Mnemonic from electrum.wallet import Multisig_Wallet, Deterministic_Wallet from electrum.i18n import _ from electrum.plugin import BasePlugin, hook -from electrum.util import NotEnoughFunds +from electrum.util import NotEnoughFunds, make_aiohttp_session from electrum.storage import STO_EV_USER_PW +from electrum.network import Network # signing_xpub is hardcoded so that the wallet can be restored from seed, without TrustedCoin's server def get_signing_xpub(): @@ -104,34 +104,44 @@ class TrustedCoinCosignerClient(object): self.user_agent = user_agent def send_request(self, method, relative_url, data=None): - kwargs = {'headers': {}} - if self.user_agent: - kwargs['headers']['user-agent'] = self.user_agent - if method == 'get' and data: - kwargs['params'] = data - elif method == 'post' and data: - kwargs['data'] = json.dumps(data) - kwargs['headers']['content-type'] = 'application/json' + print("send_req") + return asyncio.run_coroutine_threadsafe(self._send_request(method, relative_url, data), Network.get_instance().asyncio_loop).result() + + async def handle_response(self, resp): + if resp.status != 200: + try: + r = await resp.json() + message = r['message'] + except: + message = await resp.text() + raise TrustedCoinException(message, resp.status) + try: + return await resp.json() + except: + return await resp.text() + + async def _send_request(self, method, relative_url, data): url = urljoin(self.base_url, relative_url) if self.debug: print('%s %s %s' % (method, url, data)) + headers = {} + if self.user_agent: + headers['user-agent'] = self.user_agent try: - response = requests.request(method, url, **kwargs) + proxy = Network.get_instance().proxy + async with make_aiohttp_session(proxy) as session: + if method == 'get': + async with session.get(url, params=data, headers=headers) as resp: + return await self.handle_response(resp) + elif method == 'post': + async with session.post(url, json=data, headers=headers) as resp: + return await self.handle_response(resp) + else: + assert False + except TrustedCoinException: + raise except Exception as e: raise ErrorConnectingServer(e) - if self.debug: - print(response.text) - if response.status_code != 200: - message = str(response.text) - if response.headers.get('content-type') == 'application/json': - r = response.json() - if 'message' in r: - message = r['message'] - raise TrustedCoinException(message, response.status_code) - if response.headers.get('content-type') == 'application/json': - return response.json() - else: - return response.text def get_terms_of_service(self, billing_plan='electrum-per-tx-otp'): """ From 1fa07c920ca0e4a9533c51c11410b43ae02482e3 Mon Sep 17 00:00:00 2001 From: SomberNight Date: Fri, 7 Sep 2018 17:07:15 +0200 Subject: [PATCH 35/76] network: restore previous API for broadcast_transaction --- electrum/network.py | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/electrum/network.py b/electrum/network.py index 7794738ef..85fe82139 100644 --- a/electrum/network.py +++ b/electrum/network.py @@ -734,9 +734,18 @@ class Network(PrintError): async def get_merkle_for_transaction(self, tx_hash, tx_height): return await self.interface.session.send_request('blockchain.transaction.get_merkle', [tx_hash, tx_height]) - def broadcast_transaction(self, tx): + def broadcast_transaction(self, tx, timeout=5): fut = asyncio.run_coroutine_threadsafe(self.interface.session.send_request('blockchain.transaction.broadcast', [str(tx)]), self.asyncio_loop) - return True, fut.result(1) + try: + out = fut.result(timeout) + except asyncio.TimeoutError as e: + return False, "error: operation timed out" + except Exception as e: + return False, "error: " + str(e) + + if out != tx.txid(): + return False, "error: " + out + return True, out async def request_chunk(self, height, tip, session=None): if session is None: session = self.interface.session From 26172686b87780ab5341b86d62fb97d1a74e6a08 Mon Sep 17 00:00:00 2001 From: SomberNight Date: Fri, 7 Sep 2018 19:34:28 +0200 Subject: [PATCH 36/76] restructure synchronizer/verifier <--> interface coupling --- electrum/address_synchronizer.py | 26 ++++++++++----------- electrum/interface.py | 32 ++++++++++++++++--------- electrum/network.py | 7 ++++-- electrum/synchronizer.py | 27 +++++++++------------ electrum/verifier.py | 40 +++++++++++++++----------------- 5 files changed, 68 insertions(+), 64 deletions(-) diff --git a/electrum/address_synchronizer.py b/electrum/address_synchronizer.py index 65a754026..80708b18d 100644 --- a/electrum/address_synchronizer.py +++ b/electrum/address_synchronizer.py @@ -26,6 +26,8 @@ import asyncio import itertools from collections import defaultdict +from aiorpcx import TaskGroup + from . import bitcoin from .bitcoin import COINBASE_MATURITY, TYPE_ADDRESS, TYPE_PUBKEY from .util import PrintError, profiler, bfh, VerifiedTxInfo, TxMinedStatus @@ -59,6 +61,7 @@ class AddressSynchronizer(PrintError): # verifier (SPV) and synchronizer are started in start_threads self.synchronizer = None self.verifier = None + self.sync_restart_lock = asyncio.Lock() # locks: if you need to take multiple ones, acquire them in the order they are defined here! self.lock = threading.RLock() self.transaction_lock = threading.RLock() @@ -135,20 +138,15 @@ class AddressSynchronizer(PrintError): # add it in case it was previously unconfirmed self.add_unverified_tx(tx_hash, tx_height) - def on_default_server_changed(self, evt): - for i in self.network.futures: - if i.done() and i.exception(): - raise i.exception() - if not i.done(): - i.cancel() - self.network.futures.clear() - if self.network.interface is None: - return - # FIXME there are races here.. network.interface can become None - self.network.futures.append(asyncio.get_event_loop().create_task(self.verifier.main())) - self.network.futures.append(asyncio.get_event_loop().create_task(self.synchronizer.send_subscriptions())) - self.network.futures.append(asyncio.get_event_loop().create_task(self.synchronizer.handle_status())) - self.network.futures.append(asyncio.get_event_loop().create_task(self.synchronizer.main())) + async def on_default_server_changed(self, evt): + async with self.sync_restart_lock: + interface = self.network.interface + if interface is None: + return # we should get called again soon + await interface.group.spawn(self.verifier.main(interface)) + await interface.group.spawn(self.synchronizer.send_subscriptions(interface)) + await interface.group.spawn(self.synchronizer.handle_status(interface)) + await interface.group.spawn(self.synchronizer.main()) def start_threads(self, network): self.network = network diff --git a/electrum/interface.py b/electrum/interface.py index d0e63f2f9..517253abd 100644 --- a/electrum/interface.py +++ b/electrum/interface.py @@ -32,7 +32,7 @@ import traceback import aiorpcx import asyncio import concurrent.futures -from aiorpcx import ClientSession, Notification +from aiorpcx import ClientSession, Notification, TaskGroup import requests @@ -82,11 +82,15 @@ class Interface(PrintError): self.port = int(self.port) self.config_path = config_path self.cert_path = os.path.join(self.config_path, 'certs', self.host) - self.fut = asyncio.get_event_loop().create_task(self.run()) self.tip_header = None self.tip = 0 self.blockchain = None self.network = network + + # TODO combine? + self.fut = asyncio.get_event_loop().create_task(self.run()) + self.group = TaskGroup() + if proxy: username, pw = proxy.get('user'), proxy.get('password') if not username or not pw: @@ -231,18 +235,24 @@ class Interface(PrintError): self.tip = subscription_res['height'] self.mark_ready() copy_header_queue = asyncio.Queue() - block_retriever = asyncio.get_event_loop().create_task(self.run_fetch_blocks(subscription_res, copy_header_queue)) - while True: - try: - new_header = await asyncio.wait_for(header_queue.get(), 300) - self.tip_header = new_header - self.tip = new_header['block_height'] - await copy_header_queue.put(new_header) - except concurrent.futures.TimeoutError: - await asyncio.wait_for(session.send_request('server.ping'), 5) + async with self.group as group: + await group.spawn(self.run_fetch_blocks(subscription_res, copy_header_queue)) + await group.spawn(self.subscribe_to_headers(header_queue, copy_header_queue)) + # NOTE: group.__aexit__ will be called here; this is needed to notice exceptions in the group! + + async def subscribe_to_headers(self, header_queue, copy_header_queue): + while True: + try: + new_header = await asyncio.wait_for(header_queue.get(), 300) + self.tip_header = new_header + self.tip = new_header['block_height'] + await copy_header_queue.put(new_header) + except concurrent.futures.TimeoutError: + await asyncio.wait_for(self.session.send_request('server.ping'), 5) def close(self): self.fut.cancel() + asyncio.get_event_loop().create_task(self.group.cancel_remaining()) @aiosafe async def run_fetch_blocks(self, sub_reply, replies): diff --git a/electrum/network.py b/electrum/network.py index 85fe82139..8cf94273d 100644 --- a/electrum/network.py +++ b/electrum/network.py @@ -243,7 +243,6 @@ class Network(PrintError): self.start_network(deserialize_server(self.default_server)[2], deserialize_proxy(self.config.get('proxy'))) self.asyncio_loop = asyncio.get_event_loop() - self.futures = [] self.server_info_job = asyncio.Future() # just to not trigger a warning from switch_to_interface the first time we change default_server self.server_info_job.set_result(1) @@ -278,7 +277,11 @@ class Network(PrintError): def trigger_callback(self, event, *args): with self.callback_lock: callbacks = self.callbacks[event][:] - [callback(event, *args) for callback in callbacks] + for callback in callbacks: + if asyncio.iscoroutinefunction(callback): + asyncio.run_coroutine_threadsafe(callback(event, *args), self.asyncio_loop) + else: + callback(event, *args) def read_recent_servers(self): if not self.config.path: diff --git a/electrum/synchronizer.py b/electrum/synchronizer.py index 3fe16a251..841303124 100644 --- a/electrum/synchronizer.py +++ b/electrum/synchronizer.py @@ -159,20 +159,16 @@ class Synchronizer(PrintError): await self.status_queue.put((h, status)) self.requested_addrs.remove(addr) - @aiosafe - async def send_subscriptions(self): - async with TaskGroup() as group: - while True: - addr = await self.add_queue.get() - await group.spawn(self.subscribe_to_address(addr)) - - @aiosafe - async def handle_status(self): - async with TaskGroup() as group: - while True: - h, status = await self.status_queue.get() - addr = self.scripthash_to_address[h] - await group.spawn(self.on_address_status(addr, status)) + async def send_subscriptions(self, interface): + while True: + addr = await self.add_queue.get() + await interface.group.spawn(self.subscribe_to_address(addr)) + + async def handle_status(self, interface): + while True: + h, status = await self.status_queue.get() + addr = self.scripthash_to_address[h] + await interface.group.spawn(self.on_address_status(addr, status)) @property def session(self): @@ -180,11 +176,10 @@ class Synchronizer(PrintError): assert s is not None return s - @aiosafe async def main(self): for addr in self.wallet.get_addresses(): self.add(addr) while True: - await asyncio.sleep(1) + await asyncio.sleep(0.1) self.wallet.synchronize() up_to_date = self.is_up_to_date() if up_to_date != self.wallet.is_up_to_date(): diff --git a/electrum/verifier.py b/electrum/verifier.py index 39ecf82af..f1bc1aad6 100644 --- a/electrum/verifier.py +++ b/electrum/verifier.py @@ -48,13 +48,12 @@ class SPV(ThreadJob): self.merkle_roots = {} # txid -> merkle root (once it has been verified) self.requested_merkle = set() # txid set of pending requests - @aiosafe - async def main(self): + async def main(self, interface): while True: - await self._request_proofs() - await asyncio.sleep(1) + await self._request_proofs(interface) + await asyncio.sleep(0.1) - async def _request_proofs(self): + async def _request_proofs(self, interface): blockchain = self.network.blockchain() if not blockchain: self.print_error("no blockchain") @@ -63,22 +62,21 @@ class SPV(ThreadJob): local_height = self.network.get_local_height() unverified = self.wallet.get_unverified_txs() - async with TaskGroup() as group: - for tx_hash, tx_height in unverified.items(): - # do not request merkle branch before headers are available - if tx_height <= 0 or tx_height > local_height: - continue - - header = blockchain.read_header(tx_height) - if header is None: - index = tx_height // 2016 - if index < len(blockchain.checkpoints): - await group.spawn(self.network.request_chunk, tx_height, None) - elif (tx_hash not in self.requested_merkle - and tx_hash not in self.merkle_roots): - self.print_error('requested merkle', tx_hash) - self.requested_merkle.add(tx_hash) - await group.spawn(self._request_and_verify_single_proof, tx_hash, tx_height) + for tx_hash, tx_height in unverified.items(): + # do not request merkle branch before headers are available + if tx_height <= 0 or tx_height > local_height: + continue + + header = blockchain.read_header(tx_height) + if header is None: + index = tx_height // 2016 + if index < len(blockchain.checkpoints): + await interface.group.spawn(self.network.request_chunk, tx_height, None) + elif (tx_hash not in self.requested_merkle + and tx_hash not in self.merkle_roots): + self.print_error('requested merkle', tx_hash) + self.requested_merkle.add(tx_hash) + await interface.group.spawn(self._request_and_verify_single_proof, tx_hash, tx_height) if self.network.blockchain() != self.blockchain: self.blockchain = self.network.blockchain() From fd40dee33702c4003abf32e1f9b4401ac82c20d5 Mon Sep 17 00:00:00 2001 From: SomberNight Date: Fri, 7 Sep 2018 19:35:35 +0200 Subject: [PATCH 37/76] make sure to retry nodes for network --- electrum/network.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/electrum/network.py b/electrum/network.py index 8cf94273d..9fc65ee1d 100644 --- a/electrum/network.py +++ b/electrum/network.py @@ -854,10 +854,10 @@ class Network(PrintError): for i in range(self.num_server - len(self.interfaces) - len(self.connecting)): if self.start_random_interface(): changed = True - if now - self.nodes_retry_time > NODES_RETRY_INTERVAL: - self.print_error('network: retrying connections') - self.disconnected_servers = set([]) - self.nodes_retry_time = now + if now - self.nodes_retry_time > NODES_RETRY_INTERVAL: + self.print_error('network: retrying connections') + self.disconnected_servers = set([]) + self.nodes_retry_time = now # main interface if not self.is_connected(): From 56c3c76d8b674095e295b15922933c5d03df1d9d Mon Sep 17 00:00:00 2001 From: SomberNight Date: Fri, 7 Sep 2018 19:54:26 +0200 Subject: [PATCH 38/76] follow-up 26172686b87780ab5341b86d62fb97d1a74e6a08 --- electrum/interface.py | 1 - 1 file changed, 1 deletion(-) diff --git a/electrum/interface.py b/electrum/interface.py index 517253abd..0c1515eae 100644 --- a/electrum/interface.py +++ b/electrum/interface.py @@ -254,7 +254,6 @@ class Interface(PrintError): self.fut.cancel() asyncio.get_event_loop().create_task(self.group.cancel_remaining()) - @aiosafe async def run_fetch_blocks(self, sub_reply, replies): if self.tip < self.network.max_checkpoint(): raise GracefulDisconnect('server tip below max checkpoint') From 7500b1fbee57cd34bcdaaec7846e88a97cc8b829 Mon Sep 17 00:00:00 2001 From: SomberNight Date: Fri, 7 Sep 2018 20:26:45 +0200 Subject: [PATCH 39/76] detect lost connection supersedes #4697 --- electrum/interface.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/electrum/interface.py b/electrum/interface.py index 0c1515eae..21e165e18 100644 --- a/electrum/interface.py +++ b/electrum/interface.py @@ -68,7 +68,7 @@ class NotificationSession(ClientSession): assert False, request.method - +# FIXME this is often raised inside a TaskGroup, but then it's not silent :( class GracefulDisconnect(AIOSafeSilentException): pass @@ -238,8 +238,15 @@ class Interface(PrintError): async with self.group as group: await group.spawn(self.run_fetch_blocks(subscription_res, copy_header_queue)) await group.spawn(self.subscribe_to_headers(header_queue, copy_header_queue)) + await group.spawn(self.monitor_connection()) # NOTE: group.__aexit__ will be called here; this is needed to notice exceptions in the group! + async def monitor_connection(self): + while True: + await asyncio.sleep(1) + if not self.session or self.session.is_closing(): + raise GracefulDisconnect('server closed session') + async def subscribe_to_headers(self, header_queue, copy_header_queue): while True: try: From 64a03c245ce6aec596f9db0d58fe3ca632ddc17a Mon Sep 17 00:00:00 2001 From: SomberNight Date: Sat, 8 Sep 2018 00:25:38 +0200 Subject: [PATCH 40/76] small timeout change (re KeyError: can happen after proxy settings change) --- electrum/interface.py | 2 +- electrum/network.py | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/electrum/interface.py b/electrum/interface.py index 21e165e18..a0c928b34 100644 --- a/electrum/interface.py +++ b/electrum/interface.py @@ -213,7 +213,7 @@ class Interface(PrintError): return None async def get_block_header(self, height, assert_mode): - res = await asyncio.wait_for(self.session.send_request('blockchain.block.header', [height]), 1) + res = await asyncio.wait_for(self.session.send_request('blockchain.block.header', [height]), 5) return blockchain.deserialize_header(bytes.fromhex(res), height) async def request_chunk(self, idx, tip): diff --git a/electrum/network.py b/electrum/network.py index 9fc65ee1d..497ca02b1 100644 --- a/electrum/network.py +++ b/electrum/network.py @@ -32,6 +32,8 @@ import socket import json import sys import ipaddress +import asyncio +import concurrent.futures import dns import dns.resolver @@ -42,9 +44,6 @@ from .bitcoin import COIN from . import constants from . import blockchain from .interface import Interface - -import asyncio -import concurrent.futures from .version import PROTOCOL_VERSION NODES_RETRY_INTERVAL = 60 @@ -700,7 +699,8 @@ class Network(PrintError): self.connection_down(interface.server) return finally: - self.connecting.remove(server) + try: self.connecting.remove(server) + except KeyError: pass with self.interface_lock: self.interfaces[server] = interface @@ -757,7 +757,7 @@ class Network(PrintError): if tip is not None: size = min(size, tip - index * 2016) size = max(size, 0) - res = await session.send_request('blockchain.block.headers', [index * 2016, size]) + res = await asyncio.wait_for(session.send_request('blockchain.block.headers', [index * 2016, size]), 20) conn = self.blockchain().connect_chunk(index, res['hex']) if not conn: return conn, 0 From 32528d6aa64bee26cf2560c6ce1fad34c80715c6 Mon Sep 17 00:00:00 2001 From: SomberNight Date: Sat, 8 Sep 2018 01:10:41 +0200 Subject: [PATCH 41/76] rm dupe code --- electrum/synchronizer.py | 13 +------------ 1 file changed, 1 insertion(+), 12 deletions(-) diff --git a/electrum/synchronizer.py b/electrum/synchronizer.py index 841303124..f03b18cf3 100644 --- a/electrum/synchronizer.py +++ b/electrum/synchronizer.py @@ -100,18 +100,7 @@ class Synchronizer(PrintError): # Store received history self.wallet.receive_history_callback(addr, hist, tx_fees) # Request transactions we don't have - # "hist" is a list of [tx_hash, tx_height] lists - transaction_hashes = [] - for tx_hash, tx_height in hist: - if tx_hash in self.requested_tx: - continue - if tx_hash in self.wallet.transactions: - continue - transaction_hashes.append(tx_hash) - self.requested_tx[tx_hash] = tx_height - - for tx_hash in transaction_hashes: - await self.get_transaction(tx_hash) + await self.request_missing_txs(hist) # Remove request; this allows up_to_date to be True self.requested_histories.pop(addr) From 136df7e5ee8bb51636feed4d4d2d342411416574 Mon Sep 17 00:00:00 2001 From: SomberNight Date: Sat, 8 Sep 2018 01:34:33 +0200 Subject: [PATCH 42/76] wallet: recreate Synchronizer and Verifier when switching servers not that nice but solves races --- electrum/address_synchronizer.py | 4 ++-- electrum/interface.py | 12 ++++++++++-- electrum/network.py | 26 ++++++++++++-------------- electrum/synchronizer.py | 4 ++-- 4 files changed, 26 insertions(+), 20 deletions(-) diff --git a/electrum/address_synchronizer.py b/electrum/address_synchronizer.py index 80708b18d..f976b1f55 100644 --- a/electrum/address_synchronizer.py +++ b/electrum/address_synchronizer.py @@ -143,6 +143,8 @@ class AddressSynchronizer(PrintError): interface = self.network.interface if interface is None: return # we should get called again soon + self.verifier = SPV(self.network, self) + self.synchronizer = Synchronizer(self) await interface.group.spawn(self.verifier.main(interface)) await interface.group.spawn(self.synchronizer.send_subscriptions(interface)) await interface.group.spawn(self.synchronizer.handle_status(interface)) @@ -151,8 +153,6 @@ class AddressSynchronizer(PrintError): def start_threads(self, network): self.network = network if self.network is not None: - self.verifier = SPV(self.network, self) - self.synchronizer = Synchronizer(self) self.network.register_callback(self.on_default_server_changed, ['default_server_changed']) self.network.trigger_callback('default_server_changed') else: diff --git a/electrum/interface.py b/electrum/interface.py index a0c928b34..d0a06c87f 100644 --- a/electrum/interface.py +++ b/electrum/interface.py @@ -72,6 +72,14 @@ class NotificationSession(ClientSession): class GracefulDisconnect(AIOSafeSilentException): pass +class CustomTaskGroup(TaskGroup): + + def spawn(self, *args, **kwargs): + if self._closed: + raise asyncio.CancelledError() + return super().spawn(*args, **kwargs) + + class Interface(PrintError): def __init__(self, network, server, config_path, proxy): @@ -89,7 +97,7 @@ class Interface(PrintError): # TODO combine? self.fut = asyncio.get_event_loop().create_task(self.run()) - self.group = TaskGroup() + self.group = CustomTaskGroup() if proxy: username, pw = proxy.get('user'), proxy.get('password') @@ -255,7 +263,7 @@ class Interface(PrintError): self.tip = new_header['block_height'] await copy_header_queue.put(new_header) except concurrent.futures.TimeoutError: - await asyncio.wait_for(self.session.send_request('server.ping'), 5) + await asyncio.wait_for(self.session.send_request('server.ping'), 10) def close(self): self.fut.cancel() diff --git a/electrum/network.py b/electrum/network.py index 497ca02b1..c3fe875f9 100644 --- a/electrum/network.py +++ b/electrum/network.py @@ -242,9 +242,6 @@ class Network(PrintError): self.start_network(deserialize_server(self.default_server)[2], deserialize_proxy(self.config.get('proxy'))) self.asyncio_loop = asyncio.get_event_loop() - self.server_info_job = asyncio.Future() - # just to not trigger a warning from switch_to_interface the first time we change default_server - self.server_info_job.set_result(1) @staticmethod def get_instance(): @@ -330,7 +327,6 @@ class Network(PrintError): def is_connecting(self): return self.connection_status == 'connecting' - @util.aiosafe async def request_server_info(self, interface): await interface.ready session = interface.session @@ -560,7 +556,6 @@ class Network(PrintError): being opened, start a thread to connect. The actual switch will happen on receipt of the connection notification. Do nothing if server already is our interface.''' - old_default_server = self.default_server self.default_server = server if server not in self.interfaces: self.interface = None @@ -570,14 +565,18 @@ class Network(PrintError): i = self.interfaces[server] if self.interface != i: self.print_error("switching to", server) - # stop any current interface in order to terminate subscriptions - # fixme: we don't want to close headers sub - #self.close_interface(self.interface) + if self.interface is not None: + # Stop any current interface in order to terminate subscriptions, + # and to cancel tasks in interface.group. + # However, for headers sub, give preference to this interface + # over unknown ones, i.e. start it again right away. + self.close_interface(self.interface) + if len(self.interfaces) <= self.num_server: + self.start_interface(self.interface.server) + self.interface = i - if not self.server_info_job.done(): - self.print_error('cancelled previous request_server_info job, was it too slow? server was:', old_default_server) - self.server_info_job.cancel() - self.server_info_job = asyncio.get_event_loop().create_task(self.request_server_info(i)) + asyncio.get_event_loop().create_task( + i.group.spawn(self.request_server_info(i))) self.trigger_callback('default_server_changed') self.set_status('connected') self.notify('updated') @@ -876,12 +875,11 @@ class Network(PrintError): changed = True else: if self.config.is_fee_estimates_update_required(): - asyncio.get_event_loop().create_task(self.attempt_fee_estimate_update()) + await self.interface.group.spawn(self.attempt_fee_estimate_update()) if changed: self.notify('updated') await asyncio.sleep(1) - @util.aiosafe async def attempt_fee_estimate_update(self): await asyncio.wait_for(self.request_fee_estimates(self.interface), 5) diff --git a/electrum/synchronizer.py b/electrum/synchronizer.py index f03b18cf3..d8a887607 100644 --- a/electrum/synchronizer.py +++ b/electrum/synchronizer.py @@ -151,13 +151,13 @@ class Synchronizer(PrintError): async def send_subscriptions(self, interface): while True: addr = await self.add_queue.get() - await interface.group.spawn(self.subscribe_to_address(addr)) + await interface.group.spawn(self.subscribe_to_address, addr) async def handle_status(self, interface): while True: h, status = await self.status_queue.get() addr = self.scripthash_to_address[h] - await interface.group.spawn(self.on_address_status(addr, status)) + await interface.group.spawn(self.on_address_status, addr, status) @property def session(self): From ddee03d324a119e7e6d3085b80b2c5a3f59834e2 Mon Sep 17 00:00:00 2001 From: SomberNight Date: Sat, 8 Sep 2018 02:15:51 +0200 Subject: [PATCH 43/76] interface.run: catch more exceptions --- electrum/interface.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/electrum/interface.py b/electrum/interface.py index d0a06c87f..4c76d1fe7 100644 --- a/electrum/interface.py +++ b/electrum/interface.py @@ -152,7 +152,7 @@ class Interface(PrintError): if not exists: try: ca_signed = await self.is_server_ca_signed(ca_sslc) - except (ConnectionRefusedError, socket.gaierror) as e: + except (ConnectionRefusedError, socket.gaierror, aiorpcx.socks.SOCKSFailure) as e: self.print_error('disconnecting due to: {}'.format(e)) self.exception = e return From 57e66324cb5e7eac8df946598e660de528594870 Mon Sep 17 00:00:00 2001 From: SomberNight Date: Sat, 8 Sep 2018 15:36:16 +0200 Subject: [PATCH 44/76] batch fee estimates --- electrum/interface.py | 3 ++- electrum/network.py | 16 +++++++++------- 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/electrum/interface.py b/electrum/interface.py index 4c76d1fe7..903b1e2d6 100644 --- a/electrum/interface.py +++ b/electrum/interface.py @@ -170,7 +170,8 @@ class Interface(PrintError): sslc.check_hostname = 0 try: await self.open_session(sslc, exit_early=False) - except (asyncio.CancelledError, ConnectionRefusedError, socket.gaierror, ssl.SSLError, TimeoutError) as e: + except (asyncio.CancelledError, ConnectionRefusedError, socket.gaierror, + ssl.SSLError, TimeoutError, aiorpcx.socks.SOCKSFailure) as e: self.print_error('disconnecting due to: {}'.format(e)) self.exception = e return diff --git a/electrum/network.py b/electrum/network.py index c3fe875f9..bf1709c61 100644 --- a/electrum/network.py +++ b/electrum/network.py @@ -37,6 +37,7 @@ import concurrent.futures import dns import dns.resolver +from aiorpcx import TaskGroup from . import util from .util import PrintError, print_error, aiosafe, bfh @@ -343,14 +344,15 @@ class Network(PrintError): session = interface.session from .simple_config import FEE_ETA_TARGETS self.config.requested_fee_estimates() - histogram = await session.send_request('mempool.get_fee_histogram') - fees = [] - for i in FEE_ETA_TARGETS: - fees.append((i, await session.send_request('blockchain.estimatefee', [i]))) - self.config.mempool_fees = histogram + async with TaskGroup() as group: + histogram_task = await group.spawn(session.send_request('mempool.get_fee_histogram')) + fee_tasks = [] + for i in FEE_ETA_TARGETS: + fee_tasks.append((i, await group.spawn(session.send_request('blockchain.estimatefee', [i])))) + self.config.mempool_fees = histogram_task.result() self.notify('fee_histogram') - for i, result in fees: - fee = int(result * COIN) + for i, task in fee_tasks: + fee = int(task.result() * COIN) self.config.update_fee_estimates(i, fee) self.print_error("fee_estimates[%d]" % i, fee) self.notify('fee') From 4a88ca1a3a5b26fef068751e98e034e0e2bedeb9 Mon Sep 17 00:00:00 2001 From: SomberNight Date: Sat, 8 Sep 2018 17:56:29 +0200 Subject: [PATCH 45/76] fix --offline option for fx and trustedcoin --- electrum/exchange_rate.py | 3 ++- electrum/plugins/trustedcoin/trustedcoin.py | 7 +++++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/electrum/exchange_rate.py b/electrum/exchange_rate.py index 4503ce31d..e4d0e3481 100644 --- a/electrum/exchange_rate.py +++ b/electrum/exchange_rate.py @@ -436,7 +436,8 @@ class FxThread(ThreadJob): def __init__(self, config, network): self.config = config self.network = network - self.network.register_callback(self.set_proxy, ['proxy_set']) + if self.network: + self.network.register_callback(self.set_proxy, ['proxy_set']) self.ccy = self.get_currency() self.history_used_spot = False self.ccy_combo = None diff --git a/electrum/plugins/trustedcoin/trustedcoin.py b/electrum/plugins/trustedcoin/trustedcoin.py index 638cda279..8227a3a8a 100644 --- a/electrum/plugins/trustedcoin/trustedcoin.py +++ b/electrum/plugins/trustedcoin/trustedcoin.py @@ -104,8 +104,11 @@ class TrustedCoinCosignerClient(object): self.user_agent = user_agent def send_request(self, method, relative_url, data=None): - print("send_req") - return asyncio.run_coroutine_threadsafe(self._send_request(method, relative_url, data), Network.get_instance().asyncio_loop).result() + network = Network.get_instance() + if network: + return asyncio.run_coroutine_threadsafe(self._send_request(method, relative_url, data), network.asyncio_loop).result() + else: + raise ErrorConnectingServer('You are offline.') async def handle_response(self, resp): if resp.status != 200: From c49e563881f3b7101d98ca768f58b0b7fee9bea2 Mon Sep 17 00:00:00 2001 From: SomberNight Date: Sat, 8 Sep 2018 18:10:21 +0200 Subject: [PATCH 46/76] verifier: if we fail to verify SPV proof, disconnect from server --- electrum/verifier.py | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/electrum/verifier.py b/electrum/verifier.py index f1bc1aad6..1013648b5 100644 --- a/electrum/verifier.py +++ b/electrum/verifier.py @@ -24,12 +24,11 @@ import asyncio from typing import Sequence, Optional -from aiorpcx import TaskGroup - -from .util import ThreadJob, bh2u, VerifiedTxInfo, aiosafe +from .util import ThreadJob, bh2u, VerifiedTxInfo from .bitcoin import Hash, hash_decode, hash_encode from .transaction import Transaction from .blockchain import hash_header +from .interface import GracefulDisconnect class MerkleVerificationFailure(Exception): pass @@ -94,14 +93,10 @@ class SPV(ThreadJob): verify_tx_is_in_block(tx_hash, merkle_branch, pos, header, tx_height) except MerkleVerificationFailure as e: self.print_error(str(e)) - # FIXME: we should make a fresh connection to a server - # to recover from this, as this TX will now never verify - return + raise GracefulDisconnect(e) # we passed all the tests self.merkle_roots[tx_hash] = header.get('merkle_root') try: - # note: we could pop in the beginning, but then we would request - # this proof again in case of verification failure from the same server self.requested_merkle.remove(tx_hash) except KeyError: pass self.print_error("verified %s" % tx_hash) From b33b2c094507afedc96ec18794fb0850503e9eb9 Mon Sep 17 00:00:00 2001 From: SomberNight Date: Sat, 8 Sep 2018 18:38:58 +0200 Subject: [PATCH 47/76] synchronizer: more batching --- electrum/synchronizer.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/electrum/synchronizer.py b/electrum/synchronizer.py index d8a887607..ff17a34c4 100644 --- a/electrum/synchronizer.py +++ b/electrum/synchronizer.py @@ -118,11 +118,12 @@ class Synchronizer(PrintError): transaction_hashes.append(tx_hash) self.requested_tx[tx_hash] = tx_height - for tx_hash in transaction_hashes: - await self.get_transaction(tx_hash) + async with TaskGroup() as group: + for tx_hash in transaction_hashes: + await group.spawn(self.get_transaction, tx_hash) async def get_transaction(self, tx_hash): - result = await self.session.send_request('blockchain.transaction.get', [tx_hash]) + result = await asyncio.wait_for(self.session.send_request('blockchain.transaction.get', [tx_hash]), 20) tx = Transaction(result) try: tx.deserialize() From 77d86f074f5134bf496867991d1043445d087a26 Mon Sep 17 00:00:00 2001 From: SomberNight Date: Sat, 8 Sep 2018 19:11:02 +0200 Subject: [PATCH 48/76] verifier: don't try to request same chunk multiple times --- electrum/network.py | 11 +++++++++-- electrum/verifier.py | 2 +- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/electrum/network.py b/electrum/network.py index bf1709c61..d51b8ab15 100644 --- a/electrum/network.py +++ b/electrum/network.py @@ -751,14 +751,21 @@ class Network(PrintError): return False, "error: " + out return True, out - async def request_chunk(self, height, tip, session=None): + async def request_chunk(self, height, tip, session=None, can_return_early=False): if session is None: session = self.interface.session index = height // 2016 + if can_return_early and index in self.requested_chunks: + return size = 2016 if tip is not None: size = min(size, tip - index * 2016) size = max(size, 0) - res = await asyncio.wait_for(session.send_request('blockchain.block.headers', [index * 2016, size]), 20) + try: + self.requested_chunks.add(index) + res = await asyncio.wait_for(session.send_request('blockchain.block.headers', [index * 2016, size]), 20) + finally: + try: self.requested_chunks.remove(index) + except KeyError: pass conn = self.blockchain().connect_chunk(index, res['hex']) if not conn: return conn, 0 diff --git a/electrum/verifier.py b/electrum/verifier.py index 1013648b5..493d402f0 100644 --- a/electrum/verifier.py +++ b/electrum/verifier.py @@ -70,7 +70,7 @@ class SPV(ThreadJob): if header is None: index = tx_height // 2016 if index < len(blockchain.checkpoints): - await interface.group.spawn(self.network.request_chunk, tx_height, None) + await interface.group.spawn(self.network.request_chunk(tx_height, None, can_return_early=True)) elif (tx_hash not in self.requested_merkle and tx_hash not in self.merkle_roots): self.print_error('requested merkle', tx_hash) From 57cac47944860e5b77e7ffc58cf4f757481137a8 Mon Sep 17 00:00:00 2001 From: SomberNight Date: Sat, 8 Sep 2018 22:44:14 +0200 Subject: [PATCH 49/76] fix synchronizer: ask for missing txns on start Previously it could happen that a wallet was fully synced, except it had missing transactions, and it would not recover from this state. --- electrum/synchronizer.py | 29 ++++++++++++++++++----------- 1 file changed, 18 insertions(+), 11 deletions(-) diff --git a/electrum/synchronizer.py b/electrum/synchronizer.py index ff17a34c4..a939f77e3 100644 --- a/electrum/synchronizer.py +++ b/electrum/synchronizer.py @@ -22,19 +22,15 @@ # ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN # CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. -import traceback -import ssl import asyncio -from aiorpcx import ClientSession, Request, Notification, TaskGroup -from threading import Lock import hashlib -import concurrent.futures -# from .bitcoin import Hash, hash_encode +from aiorpcx import TaskGroup + from .transaction import Transaction -from .util import ThreadJob, bh2u, PrintError, aiosafe, bfh +from .util import bh2u, PrintError from .bitcoin import address_to_scripthash -from .version import ELECTRUM_VERSION, PROTOCOL_VERSION + def history_status(h): if not h: @@ -45,7 +41,6 @@ def history_status(h): return bh2u(hashlib.sha256(status.encode('ascii')).digest()) - class Synchronizer(PrintError): '''The synchronizer keeps the wallet up-to-date with its set of addresses and their transactions. It subscribes over the network @@ -65,7 +60,9 @@ class Synchronizer(PrintError): self.status_queue = asyncio.Queue() def is_up_to_date(self): - return (not self.requested_addrs and not self.requested_histories) + return (not self.requested_addrs + and not self.requested_histories + and not self.requested_tx) def add(self, addr): self.requested_addrs.add(addr) @@ -167,7 +164,17 @@ class Synchronizer(PrintError): return s async def main(self): - for addr in self.wallet.get_addresses(): self.add(addr) + # request missing txns, if any + async with TaskGroup() as group: + for history in self.wallet.history.values(): + # Old electrum servers returned ['*'] when all history for the address + # was pruned. This no longer happens but may remain in old wallets. + if history == ['*']: continue + await group.spawn(self.request_missing_txs, history) + # add addresses to bootstrap + for addr in self.wallet.get_addresses(): + self.add(addr) + # main loop while True: await asyncio.sleep(0.1) self.wallet.synchronize() From 2f224819ac5ea2e6a57aaf298ec304cecb69ad18 Mon Sep 17 00:00:00 2001 From: SomberNight Date: Sun, 9 Sep 2018 01:15:06 +0200 Subject: [PATCH 50/76] interface: small clean-up --- electrum/interface.py | 30 ++++++++++++++---------------- 1 file changed, 14 insertions(+), 16 deletions(-) diff --git a/electrum/interface.py b/electrum/interface.py index 903b1e2d6..4c02191e4 100644 --- a/electrum/interface.py +++ b/electrum/interface.py @@ -27,19 +27,14 @@ import re import socket import ssl import sys -import threading import traceback -import aiorpcx import asyncio import concurrent.futures -from aiorpcx import ClientSession, Notification, TaskGroup -import requests +import aiorpcx +from aiorpcx import ClientSession, Notification, TaskGroup from .util import PrintError, aiosafe, bfh, AIOSafeSilentException - -ca_path = requests.certs.where() - from . import util from . import x509 from . import pem @@ -52,6 +47,7 @@ class NotificationSession(ClientSession): def __init__(self, scripthash, header, *args, **kwargs): super(NotificationSession, self).__init__(*args, **kwargs) + # queues: self.scripthash = scripthash self.header = header @@ -59,8 +55,8 @@ class NotificationSession(ClientSession): async def handle_request(self, request): if isinstance(request, Notification): if request.method == 'blockchain.scripthash.subscribe' and self.scripthash is not None: - args = request.args - await self.scripthash.put((args[0], args[1])) + scripthash, status = request.args + await self.scripthash.put((scripthash, status)) elif request.method == 'blockchain.headers.subscribe' and self.header is not None: deser = deserialize_header(bfh(request.args[0]['hex']), request.args[0]['height']) await self.header.put(deser) @@ -211,7 +207,7 @@ class Interface(PrintError): break await asyncio.sleep(1) else: - assert False, "could not get certificate" + raise Exception("could not get certificate") async def get_certificate(self): sslc = ssl.SSLContext() @@ -339,8 +335,8 @@ class Interface(PrintError): header = await self.get_block_header(height, 'backward') chain = blockchain.check_header(header) if 'mock' not in header else header['mock']['check'](header) can_connect = blockchain.can_connect(header) if 'mock' not in header else header['mock']['connect'](height) - if checkp: - assert can_connect or chain, (can_connect, chain) + if checkp and not (can_connect or chain): + raise Exception("server chain conflicts with checkpoints. {} {}".format(can_connect, chain)) while not chain and not can_connect: bad = height bad_header = header @@ -355,8 +351,8 @@ class Interface(PrintError): header = await self.get_block_header(height, 'backward') chain = blockchain.check_header(header) if 'mock' not in header else header['mock']['check'](header) can_connect = blockchain.can_connect(header) if 'mock' not in header else header['mock']['connect'](height) - if checkp: - assert can_connect or chain, (can_connect, chain) + if checkp and not (can_connect or chain): + raise Exception("server chain conflicts with checkpoints. {} {}".format(can_connect, chain)) self.print_error("exiting backward mode at", height) if can_connect: self.print_error("could connect", height) @@ -414,12 +410,14 @@ class Interface(PrintError): # joining on regtest with a server that has a fork of height # one. the problem is observed only if forking is not during # electrum runtime - if ismocking and branch['check'](bad_header) or not ismocking and branch.check_header(bad_header): + if not ismocking and branch.check_header(bad_header) \ + or ismocking and branch['check'](bad_header): self.print_error('joining chain', bad) height += 1 return 'join', height else: - if ismocking and branch['parent']['check'](header) or not ismocking and branch.parent().check_header(header): + if not ismocking and branch.parent().check_header(header) \ + or ismocking and branch['parent']['check'](header): self.print_error('reorg', bad, self.tip) self.blockchain = branch.parent() if not ismocking else branch['parent'] height = bad From cdca74aa399402546af0ab86ed645da327fe0410 Mon Sep 17 00:00:00 2001 From: SomberNight Date: Sun, 9 Sep 2018 05:00:09 +0200 Subject: [PATCH 51/76] move max_checkpoint from network to constants --- electrum/blockchain.py | 3 ++- electrum/constants.py | 11 +++++++++-- electrum/interface.py | 13 +++++++------ electrum/network.py | 4 ---- electrum/tests/test_network.py | 18 +++++++++++++----- 5 files changed, 31 insertions(+), 18 deletions(-) diff --git a/electrum/blockchain.py b/electrum/blockchain.py index a7befad25..4936f0bec 100644 --- a/electrum/blockchain.py +++ b/electrum/blockchain.py @@ -28,6 +28,7 @@ from .bitcoin import Hash, hash_encode, int_to_hex, rev_hex from . import constants from .util import bfh, bh2u + MAX_TARGET = 0x00000000FFFF0000000000000000000000000000000000000000000000000000 @@ -315,7 +316,7 @@ class Blockchain(util.PrintError): def get_hash(self, height): def is_height_checkpoint(): - within_cp_range = height < len(self.checkpoints) * 2016 + within_cp_range = height <= constants.net.max_checkpoint() at_chunk_boundary = (height+1) % 2016 == 0 return within_cp_range and at_chunk_boundary diff --git a/electrum/constants.py b/electrum/constants.py index 12cb4b1de..af3f7205a 100644 --- a/electrum/constants.py +++ b/electrum/constants.py @@ -37,7 +37,14 @@ def read_json(filename, default): return r -class BitcoinMainnet: +class AbstractNet: + + @classmethod + def max_checkpoint(cls) -> int: + return max(0, len(cls.CHECKPOINTS) * 2016 - 1) + + +class BitcoinMainnet(AbstractNet): TESTNET = False WIF_PREFIX = 0x80 @@ -66,7 +73,7 @@ class BitcoinMainnet: BIP44_COIN_TYPE = 0 -class BitcoinTestnet: +class BitcoinTestnet(AbstractNet): TESTNET = True WIF_PREFIX = 0xef diff --git a/electrum/interface.py b/electrum/interface.py index 4c02191e4..d612ca9d4 100644 --- a/electrum/interface.py +++ b/electrum/interface.py @@ -41,6 +41,7 @@ from . import pem from .version import ELECTRUM_VERSION, PROTOCOL_VERSION from . import blockchain from .blockchain import deserialize_header +from . import constants class NotificationSession(ClientSession): @@ -267,7 +268,7 @@ class Interface(PrintError): asyncio.get_event_loop().create_task(self.group.cancel_remaining()) async def run_fetch_blocks(self, sub_reply, replies): - if self.tip < self.network.max_checkpoint(): + if self.tip < constants.net.max_checkpoint(): raise GracefulDisconnect('server tip below max checkpoint') async with self.network.bhi_lock: @@ -298,7 +299,7 @@ class Interface(PrintError): could_connect, num_headers = await self.request_chunk(height, next_height) self.tip = max(height + num_headers, self.tip) if not could_connect: - if height <= self.network.max_checkpoint(): + if height <= constants.net.max_checkpoint(): raise Exception('server chain conflicts with checkpoints or genesis') last, height = await self.step(height) self.tip = max(height, self.tip) @@ -328,8 +329,8 @@ class Interface(PrintError): bad_header = header height -= 1 checkp = False - if height <= self.network.max_checkpoint(): - height = self.network.max_checkpoint() + 1 + if height <= constants.net.max_checkpoint(): + height = constants.net.max_checkpoint() + 1 checkp = True header = await self.get_block_header(height, 'backward') @@ -343,8 +344,8 @@ class Interface(PrintError): delta = self.tip - height next_height = self.tip - 2 * delta checkp = False - if next_height <= self.network.max_checkpoint(): - next_height = self.network.max_checkpoint() + 1 + if next_height <= constants.net.max_checkpoint(): + next_height = constants.net.max_checkpoint() + 1 checkp = True height = next_height diff --git a/electrum/network.py b/electrum/network.py index d51b8ab15..52ae10652 100644 --- a/electrum/network.py +++ b/electrum/network.py @@ -818,10 +818,6 @@ class Network(PrintError): with open(path, 'w', encoding='utf-8') as f: f.write(json.dumps(cp, indent=4)) - @classmethod - def max_checkpoint(cls): - return max(0, len(constants.net.CHECKPOINTS) * 2016 - 1) - def start(self, fx=None): self.fut = threading.Thread(target=self._run, args=(fx,)) self.fut.start() diff --git a/electrum/tests/test_network.py b/electrum/tests/test_network.py index 07b5996c9..b28dff770 100644 --- a/electrum/tests/test_network.py +++ b/electrum/tests/test_network.py @@ -2,7 +2,7 @@ import asyncio import tempfile import unittest -from electrum.constants import set_regtest +from electrum import constants from electrum.simple_config import SimpleConfig from electrum import blockchain from electrum.interface import Interface @@ -11,9 +11,6 @@ class MockInterface(Interface): def __init__(self, config): self.config = config super().__init__(None, 'mock-server:50000:t', self.config.electrum_path(), None) - class FakeNetwork: - max_checkpoint = lambda: 0 - self.network = FakeNetwork self.q = asyncio.Queue() self.blockchain = blockchain.Blockchain(self.config, 2002, None) self.tip = 12 @@ -26,6 +23,17 @@ class MockInterface(Interface): return item class TestNetwork(unittest.TestCase): + + @classmethod + def setUpClass(cls): + super().setUpClass() + constants.set_regtest() + + @classmethod + def tearDownClass(cls): + super().tearDownClass() + constants.set_mainnet() + def setUp(self): self.config = SimpleConfig({'electrum_path': tempfile.mkdtemp(prefix="test_network")}) self.interface = MockInterface(self.config) @@ -107,5 +115,5 @@ class TestNetwork(unittest.TestCase): self.assertEqual(times, 2) if __name__=="__main__": - set_regtest() + constants.set_regtest() unittest.main() From e3fb991b1be0ae96de74e5c15cbb91507b5abdc8 Mon Sep 17 00:00:00 2001 From: SomberNight Date: Sun, 9 Sep 2018 05:05:08 +0200 Subject: [PATCH 52/76] clean-up network start/stop a bit --- electrum/network.py | 28 ++++++++++------------------ 1 file changed, 10 insertions(+), 18 deletions(-) diff --git a/electrum/network.py b/electrum/network.py index 52ae10652..bdef5eec4 100644 --- a/electrum/network.py +++ b/electrum/network.py @@ -723,18 +723,6 @@ class Network(PrintError): with b.lock: b.update_size() - def _run(self, fx): - self.init_headers_file() - jobs = [self.maintain_sessions()] - if fx: - jobs.append(fx) - jobs = [self.asyncio_loop.create_task(x) for x in jobs] - self.gat = asyncio.gather(*jobs) - try: - self.asyncio_loop.run_until_complete(self.gat) - except concurrent.futures.CancelledError: - pass - async def get_merkle_for_transaction(self, tx_hash, tx_height): return await self.interface.session.send_request('blockchain.transaction.get_merkle', [tx_hash, tx_height]) @@ -819,16 +807,20 @@ class Network(PrintError): f.write(json.dumps(cp, indent=4)) def start(self, fx=None): - self.fut = threading.Thread(target=self._run, args=(fx,)) - self.fut.start() + self.main_taskgroup = TaskGroup() + async def main(): + self.init_headers_file() + async with self.main_taskgroup as group: + await group.spawn(self.maintain_sessions()) + if fx: await group.spawn(fx) + self._wrapper_thread = threading.Thread(target=self.asyncio_loop.run_until_complete, args=(main(),)) + self._wrapper_thread.start() def stop(self): - async def stop(): - self.gat.cancel() - asyncio.run_coroutine_threadsafe(stop(), self.asyncio_loop) + asyncio.run_coroutine_threadsafe(self.main_taskgroup.cancel_remaining(), self.asyncio_loop) def join(self): - return self.fut.join(1) + self._wrapper_thread.join(1) async def maintain_sessions(self): while True: From 096b3e6026ed4610a70aa171c33880ff052b2220 Mon Sep 17 00:00:00 2001 From: SomberNight Date: Sun, 9 Sep 2018 05:32:07 +0200 Subject: [PATCH 53/76] network.maintain_sessions: rm redundant 'update' notifications --- electrum/network.py | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/electrum/network.py b/electrum/network.py index bdef5eec4..5858ed213 100644 --- a/electrum/network.py +++ b/electrum/network.py @@ -840,16 +840,13 @@ class Network(PrintError): except BaseException as e: self.print_error(i.server, "errored because:", str(e), str(type(e))) remove.append(k) - changed = False for k in remove: self.connection_down(k) - changed = True # nodes now = time.time() for i in range(self.num_server - len(self.interfaces) - len(self.connecting)): - if self.start_random_interface(): - changed = True + self.start_random_interface() if now - self.nodes_retry_time > NODES_RETRY_INTERVAL: self.print_error('network: retrying connections') self.disconnected_servers = set([]) @@ -860,23 +857,18 @@ class Network(PrintError): if self.auto_connect: if not self.is_connecting(): self.switch_to_random_interface() - changed = True else: if self.default_server in self.disconnected_servers: if now - self.server_retry_time > SERVER_RETRY_INTERVAL: self.disconnected_servers.remove(self.default_server) self.server_retry_time = now - changed = True else: self.switch_to_interface(self.default_server) - changed = True else: if self.config.is_fee_estimates_update_required(): await self.interface.group.spawn(self.attempt_fee_estimate_update()) - if changed: - self.notify('updated') - await asyncio.sleep(1) + await asyncio.sleep(0.1) async def attempt_fee_estimate_update(self): await asyncio.wait_for(self.request_fee_estimates(self.interface), 5) From 48a5b8527ade20941d784893f757ec3167292e82 Mon Sep 17 00:00:00 2001 From: SomberNight Date: Sun, 9 Sep 2018 21:16:48 +0200 Subject: [PATCH 54/76] split up interface.run --- electrum/interface.py | 78 ++++++++++++++++++++++++++----------------- 1 file changed, 48 insertions(+), 30 deletions(-) diff --git a/electrum/interface.py b/electrum/interface.py index d612ca9d4..597f33a32 100644 --- a/electrum/interface.py +++ b/electrum/interface.py @@ -122,6 +122,47 @@ class Interface(PrintError): return False return True + async def _try_saving_ssl_cert_for_first_time(self, ca_ssl_context): + try: + ca_signed = await self.is_server_ca_signed(ca_ssl_context) + except (ConnectionRefusedError, socket.gaierror, aiorpcx.socks.SOCKSFailure) as e: + self.print_error('disconnecting due to: {}'.format(e)) + self.exception = e + return False + if ca_signed: + with open(self.cert_path, 'w') as f: + # empty file means this is CA signed, not self-signed + f.write('') + else: + await self.save_certificate() + return True + + def _is_saved_ssl_cert_available(self): + if not os.path.exists(self.cert_path): + return False + with open(self.cert_path, 'r') as f: + contents = f.read() + if contents == '': # CA signed + return True + # pinned self-signed cert + try: + b = pem.dePem(contents, 'CERTIFICATE') + except SyntaxError: + self.print_error("error parsing already saved cert:", e) + return False + try: + x = x509.X509(b) + except Exception as e: + self.print_error("error parsing already saved cert:", e) + return False + try: + x.check_date() + return True + except x509.CertificateError as e: + self.print_error("certificate has expired:", e) + os.unlink(self.cert_path) + return False + @aiosafe async def run(self): if self.protocol != 's': @@ -129,42 +170,19 @@ class Interface(PrintError): assert False ca_sslc = ssl.create_default_context(ssl.Purpose.SERVER_AUTH) - exists = os.path.exists(self.cert_path) - if exists: - with open(self.cert_path, 'r') as f: - contents = f.read() - if contents != '': # if not CA signed - try: - b = pem.dePem(contents, 'CERTIFICATE') - except SyntaxError: - exists = False - else: - x = x509.X509(b) - try: - x.check_date() - except x509.CertificateError as e: - self.print_error("certificate problem", e) - os.unlink(self.cert_path) - exists = False - if not exists: - try: - ca_signed = await self.is_server_ca_signed(ca_sslc) - except (ConnectionRefusedError, socket.gaierror, aiorpcx.socks.SOCKSFailure) as e: - self.print_error('disconnecting due to: {}'.format(e)) - self.exception = e + if not self._is_saved_ssl_cert_available(): + done_saving_cert = await self._try_saving_ssl_cert_for_first_time(ca_sslc) + if not done_saving_cert: return - if ca_signed: - with open(self.cert_path, 'w') as f: - # empty file means this is CA signed, not self-signed - f.write('') - else: - await self.save_certificate() siz = os.stat(self.cert_path).st_size - if siz == 0: # if CA signed + if siz == 0: + # CA signed cert sslc = ca_sslc else: + # pinned self-signed cert sslc = ssl.create_default_context(ssl.Purpose.SERVER_AUTH, cafile=self.cert_path) sslc.check_hostname = 0 + # start main connection try: await self.open_session(sslc, exit_early=False) except (asyncio.CancelledError, ConnectionRefusedError, socket.gaierror, From b381a7fdbfbd73f1050ec9fe0af64476a566ed3d Mon Sep 17 00:00:00 2001 From: SomberNight Date: Sun, 9 Sep 2018 22:01:55 +0200 Subject: [PATCH 55/76] follow-up prev --- electrum/interface.py | 44 ++++++++++++++++++++++++++----------------- 1 file changed, 27 insertions(+), 17 deletions(-) diff --git a/electrum/interface.py b/electrum/interface.py index 597f33a32..5cdcd4297 100644 --- a/electrum/interface.py +++ b/electrum/interface.py @@ -69,6 +69,12 @@ class NotificationSession(ClientSession): class GracefulDisconnect(AIOSafeSilentException): pass +class ErrorParsingSSLCert(Exception): pass + + +class ErrorGettingSSLCertFromServer(Exception): pass + + class CustomTaskGroup(TaskGroup): def spawn(self, *args, **kwargs): @@ -126,16 +132,13 @@ class Interface(PrintError): try: ca_signed = await self.is_server_ca_signed(ca_ssl_context) except (ConnectionRefusedError, socket.gaierror, aiorpcx.socks.SOCKSFailure) as e: - self.print_error('disconnecting due to: {}'.format(e)) - self.exception = e - return False + raise ErrorGettingSSLCertFromServer(e) from e if ca_signed: with open(self.cert_path, 'w') as f: # empty file means this is CA signed, not self-signed f.write('') else: await self.save_certificate() - return True def _is_saved_ssl_cert_available(self): if not os.path.exists(self.cert_path): @@ -147,33 +150,32 @@ class Interface(PrintError): # pinned self-signed cert try: b = pem.dePem(contents, 'CERTIFICATE') - except SyntaxError: + except SyntaxError as e: self.print_error("error parsing already saved cert:", e) - return False + raise ErrorParsingSSLCert(e) from e try: x = x509.X509(b) except Exception as e: self.print_error("error parsing already saved cert:", e) - return False + raise ErrorParsingSSLCert(e) from e try: x.check_date() return True except x509.CertificateError as e: self.print_error("certificate has expired:", e) - os.unlink(self.cert_path) + os.unlink(self.cert_path) # delete pinned cert only in this case return False - @aiosafe - async def run(self): + async def _get_ssl_context(self): if self.protocol != 's': - await self.open_session(None, exit_early=False) - assert False + # using plaintext TCP + return None + # see if we already have cert for this server; or get it for the first time ca_sslc = ssl.create_default_context(ssl.Purpose.SERVER_AUTH) if not self._is_saved_ssl_cert_available(): - done_saving_cert = await self._try_saving_ssl_cert_for_first_time(ca_sslc) - if not done_saving_cert: - return + await self._try_saving_ssl_cert_for_first_time(ca_sslc) + # now we have a file saved in our certificate store siz = os.stat(self.cert_path).st_size if siz == 0: # CA signed cert @@ -182,9 +184,17 @@ class Interface(PrintError): # pinned self-signed cert sslc = ssl.create_default_context(ssl.Purpose.SERVER_AUTH, cafile=self.cert_path) sslc.check_hostname = 0 - # start main connection + return sslc + + @aiosafe + async def run(self): + try: + ssl_context = await self._get_ssl_context() + except (ErrorParsingSSLCert, ErrorGettingSSLCertFromServer) as e: + self.exception = e + return try: - await self.open_session(sslc, exit_early=False) + await self.open_session(ssl_context, exit_early=False) except (asyncio.CancelledError, ConnectionRefusedError, socket.gaierror, ssl.SSLError, TimeoutError, aiorpcx.socks.SOCKSFailure) as e: self.print_error('disconnecting due to: {}'.format(e)) From ecf4ea9ba7984dcd0f75c4317ded359f909cff73 Mon Sep 17 00:00:00 2001 From: SomberNight Date: Sun, 9 Sep 2018 23:08:44 +0200 Subject: [PATCH 56/76] move (de)serialize_server to interface; and use it --- electrum/gui/qt/network_dialog.py | 4 ++-- electrum/interface.py | 19 +++++++++++++++++-- electrum/network.py | 19 ++++--------------- 3 files changed, 23 insertions(+), 19 deletions(-) diff --git a/electrum/gui/qt/network_dialog.py b/electrum/gui/qt/network_dialog.py index 268e01b7f..7949eab5a 100644 --- a/electrum/gui/qt/network_dialog.py +++ b/electrum/gui/qt/network_dialog.py @@ -33,7 +33,7 @@ import PyQt5.QtCore as QtCore from electrum.i18n import _ from electrum import constants, blockchain from electrum.util import print_error -from electrum.network import serialize_server, deserialize_server +from electrum.interface import serialize_server, deserialize_server from .util import * @@ -337,7 +337,7 @@ class NetworkChoiceLayout(object): def update(self): host, port, protocol, proxy_config, auto_connect = self.network.get_parameters() self.server_host.setText(host) - self.server_port.setText(port) + self.server_port.setText(str(port)) self.autoconnect_cb.setChecked(auto_connect) interface = self.network.interface diff --git a/electrum/interface.py b/electrum/interface.py index 5cdcd4297..2b63c1978 100644 --- a/electrum/interface.py +++ b/electrum/interface.py @@ -30,6 +30,7 @@ import sys import traceback import asyncio import concurrent.futures +from typing import Tuple, Union import aiorpcx from aiorpcx import ClientSession, Notification, TaskGroup @@ -83,14 +84,28 @@ class CustomTaskGroup(TaskGroup): return super().spawn(*args, **kwargs) +def deserialize_server(server_str: str) -> Tuple[str, int, str]: + # host might be IPv6 address, hence do rsplit: + host, port, protocol = str(server_str).rsplit(':', 2) + if protocol not in ('s', 't'): + raise ValueError('invalid network protocol: {}'.format(protocol)) + port = int(port) # Throw if cannot be converted to int + if not (0 < port < 2**16): + raise ValueError('port {} is out of valid range'.format(port)) + return host, port, protocol + + +def serialize_server(host: str, port: Union[str, int], protocol: str) -> str: + return str(':'.join([host, str(port), protocol])) + + class Interface(PrintError): def __init__(self, network, server, config_path, proxy): self.exception = None self.ready = asyncio.Future() self.server = server - self.host, self.port, self.protocol = self.server.split(':') - self.port = int(self.port) + self.host, self.port, self.protocol = deserialize_server(self.server) self.config_path = config_path self.cert_path = os.path.join(self.config_path, 'certs', self.host) self.tip_header = None diff --git a/electrum/network.py b/electrum/network.py index 5858ed213..ebe40f058 100644 --- a/electrum/network.py +++ b/electrum/network.py @@ -20,7 +20,6 @@ # ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN # CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. -import concurrent.futures import time import queue import os @@ -33,7 +32,6 @@ import json import sys import ipaddress import asyncio -import concurrent.futures import dns import dns.resolver @@ -44,7 +42,7 @@ from .util import PrintError, print_error, aiosafe, bfh from .bitcoin import COIN from . import constants from . import blockchain -from .interface import Interface +from .interface import Interface, serialize_server, deserialize_server from .version import PROTOCOL_VERSION NODES_RETRY_INTERVAL = 60 @@ -126,6 +124,7 @@ def deserialize_proxy(s): if s.lower() == 'none': return None proxy = { "mode":"socks5", "host":"localhost" } + # FIXME raw IPv6 address fails here args = s.split(':') n = 0 if proxy_modes.count(args[n]) == 1: @@ -147,19 +146,9 @@ def deserialize_proxy(s): return proxy -def deserialize_server(server_str): - host, port, protocol = str(server_str).rsplit(':', 2) - if protocol not in 'st': - raise ValueError('invalid network protocol: {}'.format(protocol)) - int(port) # Throw if cannot be converted to int - return host, port, protocol - - -def serialize_server(host, port, protocol): - return str(':'.join([host, port, protocol])) - INSTANCE = None + class Network(PrintError): """The Network class manages a set of connections to remote electrum servers, each connected socket is handled by an Interface() object. @@ -794,7 +783,7 @@ class Network(PrintError): if self.interface: server = self.interface.server host, port, protocol, proxy, auto_connect = self.get_parameters() - host, port, protocol = server.split(':') + host, port, protocol = deserialize_server(server) self.set_parameters(host, port, protocol, proxy, auto_connect) def get_local_height(self): From 3d424077fd310b0644e7a466a813f4f411bd66ac Mon Sep 17 00:00:00 2001 From: SomberNight Date: Mon, 10 Sep 2018 00:59:53 +0200 Subject: [PATCH 57/76] introduce NetworkParameters namedtuple --- electrum/gui/kivy/main_window.py | 15 +++---- electrum/gui/kivy/uix/dialogs/settings.py | 11 +++-- electrum/gui/kivy/uix/ui_screens/proxy.kv | 5 ++- electrum/gui/kivy/uix/ui_screens/server.kv | 8 ++-- electrum/gui/qt/main_window.py | 2 +- electrum/gui/qt/network_dialog.py | 26 +++++++----- electrum/gui/text.py | 14 ++++--- electrum/interface.py | 7 ++-- electrum/network.py | 48 +++++++++++++--------- 9 files changed, 80 insertions(+), 56 deletions(-) diff --git a/electrum/gui/kivy/main_window.py b/electrum/gui/kivy/main_window.py index 0fd45be86..4ba41465d 100644 --- a/electrum/gui/kivy/main_window.py +++ b/electrum/gui/kivy/main_window.py @@ -94,8 +94,9 @@ class ElectrumWindow(App): auto_connect = BooleanProperty(False) def on_auto_connect(self, instance, x): - host, port, protocol, proxy, auto_connect = self.network.get_parameters() - self.network.set_parameters(host, port, protocol, proxy, self.auto_connect) + net_params = self.network.get_parameters() + net_params = net_params._replace(auto_connect=self.auto_connect) + self.network.set_parameters(net_params) def toggle_auto_connect(self, x): self.auto_connect = not self.auto_connect @@ -267,11 +268,11 @@ class ElectrumWindow(App): if self.network: self.num_blocks = self.network.get_local_height() self.num_nodes = len(self.network.get_interfaces()) - host, port, protocol, proxy_config, auto_connect = self.network.get_parameters() - self.server_host = host - self.server_port = port - self.auto_connect = auto_connect - self.proxy_config = proxy_config if proxy_config else {} + net_params = self.network.get_parameters() + self.server_host = net_params.host + self.server_port = net_params.port + self.auto_connect = net_params.auto_connect + self.proxy_config = net_params.proxy_config if net_params.proxy_config else {} self.plugins = kwargs.get('plugins', []) self.gui_object = kwargs.get('gui_object', None) diff --git a/electrum/gui/kivy/uix/dialogs/settings.py b/electrum/gui/kivy/uix/dialogs/settings.py index 4e63c4a50..5247c0ffb 100644 --- a/electrum/gui/kivy/uix/dialogs/settings.py +++ b/electrum/gui/kivy/uix/dialogs/settings.py @@ -8,6 +8,7 @@ from electrum.i18n import languages from electrum.gui.kivy.i18n import _ from electrum.plugin import run_hook from electrum import coinchooser +from electrum.network import NetworkProxy from .choice_dialog import ChoiceDialog @@ -154,13 +155,16 @@ class SettingsDialog(Factory.Popup): self._coinselect_dialog.open() def proxy_status(self): - server, port, protocol, proxy, auto_connect = self.app.network.get_parameters() + net_params = self.app.network.get_parameters() + proxy = net_params.proxy return proxy.get('host') +':' + proxy.get('port') if proxy else _('None') def proxy_dialog(self, item, dt): if self._proxy_dialog is None: - server, port, protocol, proxy, auto_connect = self.app.network.get_parameters() + net_params = self.app.network.get_parameters() + proxy = net_params.proxy def callback(popup): + nonlocal net_params if popup.ids.mode.text != 'None': proxy = { 'mode':popup.ids.mode.text, @@ -171,7 +175,8 @@ class SettingsDialog(Factory.Popup): } else: proxy = None - self.app.network.set_parameters(server, port, protocol, proxy, auto_connect) + net_params = net_params._replace(proxy=proxy) + self.app.network.set_parameters(net_params) item.status = self.proxy_status() popup = Builder.load_file('electrum/gui/kivy/uix/ui_screens/proxy.kv') popup.ids.mode.text = proxy.get('mode') if proxy else 'None' diff --git a/electrum/gui/kivy/uix/ui_screens/proxy.kv b/electrum/gui/kivy/uix/ui_screens/proxy.kv index b7231855e..087254add 100644 --- a/electrum/gui/kivy/uix/ui_screens/proxy.kv +++ b/electrum/gui/kivy/uix/ui_screens/proxy.kv @@ -63,7 +63,7 @@ Popup: height: '48dp' text: _('OK') on_release: - host, port, protocol, proxy, auto_connect = app.network.get_parameters() + net_params = app.network.get_parameters() proxy = {} proxy['mode']=str(root.ids.mode.text).lower() proxy['host']=str(root.ids.host.text) @@ -71,6 +71,7 @@ Popup: proxy['user']=str(root.ids.user.text) proxy['password']=str(root.ids.password.text) if proxy['mode']=='none': proxy = None - app.network.set_parameters(host, port, protocol, proxy, auto_connect) + net_params = net_params._replace(proxy=proxy) + app.network.set_parameters(net_params) app.proxy_config = proxy if proxy else {} nd.dismiss() diff --git a/electrum/gui/kivy/uix/ui_screens/server.kv b/electrum/gui/kivy/uix/ui_screens/server.kv index 293d46452..686ee3be4 100644 --- a/electrum/gui/kivy/uix/ui_screens/server.kv +++ b/electrum/gui/kivy/uix/ui_screens/server.kv @@ -56,8 +56,8 @@ Popup: height: '48dp' text: _('OK') on_release: - host, port, protocol, proxy, auto_connect = app.network.get_parameters() - host = str(root.ids.host.text) - port = str(root.ids.port.text) - app.network.set_parameters(host, port, protocol, proxy, auto_connect) + net_params = app.network.get_parameters() + net_params = net_params._replace(host=str(root.ids.host.text), + port=str(root.ids.port.text)) + app.network.set_parameters(net_params) nd.dismiss() diff --git a/electrum/gui/qt/main_window.py b/electrum/gui/qt/main_window.py index b62dd3e9b..539b72293 100644 --- a/electrum/gui/qt/main_window.py +++ b/electrum/gui/qt/main_window.py @@ -562,7 +562,7 @@ class ElectrumWindow(QMainWindow, MessageBoxMixin, PrintError): def donate_to_server(self): d = self.network.get_donation_address() if d: - host = self.network.get_parameters()[0] + host = self.network.get_parameters().host self.pay_to_URI('bitcoin:%s?message=donation for %s'%(d, host)) else: self.show_error(_('No donation address for this server')) diff --git a/electrum/gui/qt/network_dialog.py b/electrum/gui/qt/network_dialog.py index 7949eab5a..b9b185e8f 100644 --- a/electrum/gui/qt/network_dialog.py +++ b/electrum/gui/qt/network_dialog.py @@ -335,7 +335,9 @@ class NetworkChoiceLayout(object): w.setEnabled(False) def update(self): - host, port, protocol, proxy_config, auto_connect = self.network.get_parameters() + net_params = self.network.get_parameters() + host, port, protocol = net_params.host, net_params.port, net_params.protocol + proxy_config, auto_connect = net_params.proxy, net_params.auto_connect self.server_host.setText(host) self.server_port.setText(str(port)) self.autoconnect_cb.setChecked(auto_connect) @@ -368,7 +370,7 @@ class NetworkChoiceLayout(object): self.nodes_list_widget.update(self.network) def fill_in_proxy_settings(self): - host, port, protocol, proxy_config, auto_connect = self.network.get_parameters() + proxy_config = self.network.get_parameters().proxy if not proxy_config: proxy_config = {"mode": "none", "host": "localhost", "port": "9050"} @@ -409,9 +411,10 @@ class NetworkChoiceLayout(object): def follow_server(self, server): self.network.switch_to_interface(server) - host, port, protocol, proxy, auto_connect = self.network.get_parameters() + net_params = self.network.get_parameters() host, port, protocol = deserialize_server(server) - self.network.set_parameters(host, port, protocol, proxy, auto_connect) + net_params = net_params._replace(host=host, port=port, protocol=protocol) + self.network.set_parameters(net_params) self.update() def server_changed(self, x): @@ -440,14 +443,14 @@ class NetworkChoiceLayout(object): pass def set_server(self): - host, port, protocol, proxy, auto_connect = self.network.get_parameters() - host = str(self.server_host.text()) - port = str(self.server_port.text()) - auto_connect = self.autoconnect_cb.isChecked() - self.network.set_parameters(host, port, protocol, proxy, auto_connect) + net_params = self.network.get_parameters() + net_params = net_params._replace(host=str(self.server_host.text()), + port=str(self.server_port.text()), + auto_connect=self.autoconnect_cb.isChecked()) + self.network.set_parameters(net_params) def set_proxy(self): - host, port, protocol, proxy, auto_connect = self.network.get_parameters() + net_params = self.network.get_parameters() if self.proxy_cb.isChecked(): proxy = { 'mode':str(self.proxy_mode.currentText()).lower(), 'host':str(self.proxy_host.text()), @@ -457,7 +460,8 @@ class NetworkChoiceLayout(object): else: proxy = None self.tor_cb.setChecked(False) - self.network.set_parameters(host, port, protocol, proxy, auto_connect) + net_params = net_params._replace(proxy=proxy) + self.network.set_parameters(net_params) def suggest_proxy(self, found_proxy): self.tor_proxy = found_proxy diff --git a/electrum/gui/text.py b/electrum/gui/text.py index 61e3ac1db..c27eb2df0 100644 --- a/electrum/gui/text.py +++ b/electrum/gui/text.py @@ -7,7 +7,10 @@ import electrum from electrum.util import format_satoshis, set_verbosity from electrum.bitcoin import is_address, COIN, TYPE_ADDRESS from electrum.transaction import TxOutput -from .. import Wallet, WalletStorage +from electrum.wallet import Wallet +from electrum.storage import WalletStorage +from electrum.network import NetworkParameters +from electrum.interface import deserialize_server _ = lambda x:x @@ -376,8 +379,9 @@ class ElectrumGui: def network_dialog(self): if not self.network: return - params = self.network.get_parameters() - host, port, protocol, proxy_config, auto_connect = params + net_params = self.network.get_parameters() + host, port, protocol = net_params.host, net_params.port, net_params.protocol + proxy_config, auto_connect = net_params.proxy, net_params.auto_connect srv = 'auto-connect' if auto_connect else self.network.default_server out = self.run_dialog('Network', [ {'label':'server', 'type':'str', 'value':srv}, @@ -389,13 +393,13 @@ class ElectrumGui: auto_connect = server == 'auto-connect' if not auto_connect: try: - host, port, protocol = server.split(':') + host, port, protocol = deserialize_server(server) except Exception: self.show_message("Error:" + server + "\nIn doubt, type \"auto-connect\"") return False if out.get('server') or out.get('proxy'): proxy = electrum.network.deserialize_proxy(out.get('proxy')) if out.get('proxy') else proxy_config - self.network.set_parameters(host, port, protocol, proxy, auto_connect) + self.network.set_parameters(NetworkParameters(host, port, protocol, proxy, auto_connect)) def settings_dialog(self): fee = str(Decimal(self.config.fee_per_kb()) / COIN) diff --git a/electrum/interface.py b/electrum/interface.py index 2b63c1978..718fe6a14 100644 --- a/electrum/interface.py +++ b/electrum/interface.py @@ -84,13 +84,13 @@ class CustomTaskGroup(TaskGroup): return super().spawn(*args, **kwargs) -def deserialize_server(server_str: str) -> Tuple[str, int, str]: +def deserialize_server(server_str: str) -> Tuple[str, str, str]: # host might be IPv6 address, hence do rsplit: host, port, protocol = str(server_str).rsplit(':', 2) if protocol not in ('s', 't'): raise ValueError('invalid network protocol: {}'.format(protocol)) - port = int(port) # Throw if cannot be converted to int - if not (0 < port < 2**16): + int(port) # Throw if cannot be converted to int + if not (0 < int(port) < 2**16): raise ValueError('port {} is out of valid range'.format(port)) return host, port, protocol @@ -106,6 +106,7 @@ class Interface(PrintError): self.ready = asyncio.Future() self.server = server self.host, self.port, self.protocol = deserialize_server(self.server) + self.port = int(self.port) self.config_path = config_path self.cert_path = os.path.join(self.config_path, 'certs', self.host) self.tip_header = None diff --git a/electrum/network.py b/electrum/network.py index ebe40f058..440d41cad 100644 --- a/electrum/network.py +++ b/electrum/network.py @@ -32,6 +32,7 @@ import json import sys import ipaddress import asyncio +from typing import NamedTuple, Optional import dns import dns.resolver @@ -44,6 +45,7 @@ from . import constants from . import blockchain from .interface import Interface, serialize_server, deserialize_server from .version import PROTOCOL_VERSION +from .simple_config import SimpleConfig NODES_RETRY_INTERVAL = 60 SERVER_RETRY_INTERVAL = 10 @@ -106,7 +108,12 @@ def pick_random_server(hostmap = None, protocol = 's', exclude_set = set()): return random.choice(eligible) if eligible else None -from .simple_config import SimpleConfig +NetworkParameters = NamedTuple("NetworkParameters", [("host", str), + ("port", str), + ("protocol", str), + ("proxy", Optional[dict]), + ("auto_connect", bool)]) + proxy_modes = ['socks4', 'socks5'] @@ -118,7 +125,7 @@ def serialize_proxy(p): p.get('user', ''), p.get('password', '')]) -def deserialize_proxy(s): +def deserialize_proxy(s: str) -> Optional[dict]: if not isinstance(s, str): return None if s.lower() == 'none': @@ -369,9 +376,9 @@ class Network(PrintError): else: self.trigger_callback(key, self.get_status_value(key)) - def get_parameters(self): + def get_parameters(self) -> NetworkParameters: host, port, protocol = deserialize_server(self.default_server) - return host, port, protocol, self.proxy, self.auto_connect + return NetworkParameters(host, port, protocol, self.proxy, self.auto_connect) def get_donation_address(self): if self.is_connected(): @@ -416,14 +423,13 @@ class Network(PrintError): self.start_interface(server) return server - def set_proxy(self, proxy): + def set_proxy(self, proxy: Optional[dict]): self.proxy = proxy # Store these somewhere so we can un-monkey-patch if not hasattr(socket, "_socketobject"): socket._getaddrinfo = socket.getaddrinfo if proxy: self.print_error('setting proxy', proxy) - proxy_mode = proxy_modes.index(proxy["mode"]) + 1 # prevent dns leaks, see http://stackoverflow.com/questions/13184205/dns-over-proxy socket.getaddrinfo = lambda *args: [(socket.AF_INET, socket.SOCK_STREAM, 6, '', (args[0], args[1]))] else: @@ -465,7 +471,7 @@ class Network(PrintError): return socket._getaddrinfo(addr, *args, **kwargs) @with_interface_lock - def start_network(self, protocol, proxy): + def start_network(self, protocol: str, proxy: Optional[dict]): assert not self.interface and not self.interfaces assert not self.connecting and self.socket_queue.empty() self.print_error('starting network') @@ -487,9 +493,11 @@ class Network(PrintError): # Get a new queue - no old pending connections thanks! self.socket_queue = queue.Queue() - def set_parameters(self, host, port, protocol, proxy, auto_connect): + def set_parameters(self, net_params: NetworkParameters): + proxy = net_params.proxy proxy_str = serialize_proxy(proxy) - server = serialize_server(host, port, protocol) + host, port, protocol = net_params.host, net_params.port, net_params.protocol + server_str = serialize_server(host, port, protocol) # sanitize parameters try: deserialize_server(serialize_server(host, port, protocol)) @@ -498,21 +506,21 @@ class Network(PrintError): int(proxy['port']) except: return - self.config.set_key('auto_connect', auto_connect, False) + self.config.set_key('auto_connect', net_params.auto_connect, False) self.config.set_key("proxy", proxy_str, False) - self.config.set_key("server", server, True) + self.config.set_key("server", server_str, True) # abort if changes were not allowed by config - if self.config.get('server') != server or self.config.get('proxy') != proxy_str: + if self.config.get('server') != server_str or self.config.get('proxy') != proxy_str: return - self.auto_connect = auto_connect + self.auto_connect = net_params.auto_connect if self.proxy != proxy or self.protocol != protocol: # Restart the network defaulting to the given server with self.interface_lock: self.stop_network() - self.default_server = server + self.default_server = server_str self.start_network(protocol, proxy) - elif self.default_server != server: - self.switch_to_interface(server) + elif self.default_server != server_str: + self.switch_to_interface(server_str) else: self.switch_lagging_interface() self.notify('updated') @@ -781,10 +789,10 @@ class Network(PrintError): with self.interface_lock: if self.interface: - server = self.interface.server - host, port, protocol, proxy, auto_connect = self.get_parameters() - host, port, protocol = deserialize_server(server) - self.set_parameters(host, port, protocol, proxy, auto_connect) + net_params = self.get_parameters() + host, port, protocol = deserialize_server(self.interface.server) + net_params = net_params._replace(host=host, port=port, protocol=protocol) + self.set_parameters(net_params) def get_local_height(self): return self.blockchain().height() From 97ea4679a7c920eaa0c95ad1f9d94bcd23451f12 Mon Sep 17 00:00:00 2001 From: SomberNight Date: Mon, 10 Sep 2018 01:08:28 +0200 Subject: [PATCH 58/76] network: fix monkey-patching in set_proxy --- electrum/network.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/electrum/network.py b/electrum/network.py index 440d41cad..24ba11820 100644 --- a/electrum/network.py +++ b/electrum/network.py @@ -426,7 +426,7 @@ class Network(PrintError): def set_proxy(self, proxy: Optional[dict]): self.proxy = proxy # Store these somewhere so we can un-monkey-patch - if not hasattr(socket, "_socketobject"): + if not hasattr(socket, "_getaddrinfo"): socket._getaddrinfo = socket.getaddrinfo if proxy: self.print_error('setting proxy', proxy) From b2547601a50cb9cac4b4d5ef75a961adfc330c57 Mon Sep 17 00:00:00 2001 From: SomberNight Date: Mon, 10 Sep 2018 01:08:51 +0200 Subject: [PATCH 59/76] rm dead code --- electrum/network.py | 53 --------------------------------------------- 1 file changed, 53 deletions(-) diff --git a/electrum/network.py b/electrum/network.py index 24ba11820..a08402738 100644 --- a/electrum/network.py +++ b/electrum/network.py @@ -599,59 +599,6 @@ class Network(PrintError): self.recent_servers = self.recent_servers[0:20] self.save_recent_servers() - def process_response(self, interface, response, callbacks): - if self.debug: - self.print_error(interface.host, "<--", response) - error = response.get('error') - result = response.get('result') - method = response.get('method') - params = response.get('params') - - # We handle some responses; return the rest to the client. - if method == 'server.version': - interface.server_version = result - elif method == 'blockchain.headers.subscribe': - if error is None: - self.on_notify_header(interface, result) - else: - # no point in keeping this connection without headers sub - self.connection_down(interface.server) - return - elif method == 'server.peers.subscribe': - if error is None: - self.irc_servers = parse_servers(result) - self.notify('servers') - elif method == 'server.banner': - if error is None: - self.banner = result - self.notify('banner') - elif method == 'server.donation_address': - if error is None: - self.donation_address = result - elif method == 'mempool.get_fee_histogram': - if error is None: - self.print_error('fee_histogram', result) - self.config.mempool_fees = result - self.notify('fee_histogram') - elif method == 'blockchain.estimatefee': - if error is None and result > 0: - i = params[0] - fee = int(result*COIN) - self.config.update_fee_estimates(i, fee) - self.print_error("fee_estimates[%d]" % i, fee) - self.notify('fee') - elif method == 'blockchain.relayfee': - if error is None: - self.relay_fee = int(result * COIN) if result is not None else None - self.print_error("relayfee", self.relay_fee) - elif method == 'blockchain.block.headers': - self.on_block_headers(interface, response) - elif method == 'blockchain.block.get_header': - self.on_get_header(interface, response) - - for callback in callbacks: - callback(response) - @classmethod def get_index(cls, method, params): """ hashable index for subscriptions and cache""" From 6b2509b1064de5d73c3e3cb4ed9ee8b52df3137d Mon Sep 17 00:00:00 2001 From: SomberNight Date: Mon, 10 Sep 2018 01:09:35 +0200 Subject: [PATCH 60/76] interface.run: catch OSError instead of subtypes --- electrum/interface.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/electrum/interface.py b/electrum/interface.py index 718fe6a14..6368cf230 100644 --- a/electrum/interface.py +++ b/electrum/interface.py @@ -147,7 +147,7 @@ class Interface(PrintError): async def _try_saving_ssl_cert_for_first_time(self, ca_ssl_context): try: ca_signed = await self.is_server_ca_signed(ca_ssl_context) - except (ConnectionRefusedError, socket.gaierror, aiorpcx.socks.SOCKSFailure) as e: + except (OSError, aiorpcx.socks.SOCKSFailure) as e: raise ErrorGettingSSLCertFromServer(e) from e if ca_signed: with open(self.cert_path, 'w') as f: @@ -211,8 +211,7 @@ class Interface(PrintError): return try: await self.open_session(ssl_context, exit_early=False) - except (asyncio.CancelledError, ConnectionRefusedError, socket.gaierror, - ssl.SSLError, TimeoutError, aiorpcx.socks.SOCKSFailure) as e: + except (asyncio.CancelledError, OSError, aiorpcx.socks.SOCKSFailure) as e: self.print_error('disconnecting due to: {}'.format(e)) self.exception = e return From 526319630e265a28c4cbbca19c97c42879dce43e Mon Sep 17 00:00:00 2001 From: SomberNight Date: Mon, 10 Sep 2018 02:30:27 +0200 Subject: [PATCH 61/76] network: minor fix in switch_to_interface --- electrum/interface.py | 2 +- electrum/network.py | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/electrum/interface.py b/electrum/interface.py index 6368cf230..1ac52d0be 100644 --- a/electrum/interface.py +++ b/electrum/interface.py @@ -212,7 +212,7 @@ class Interface(PrintError): try: await self.open_session(ssl_context, exit_early=False) except (asyncio.CancelledError, OSError, aiorpcx.socks.SOCKSFailure) as e: - self.print_error('disconnecting due to: {}'.format(e)) + self.print_error('disconnecting due to: {} {}'.format(e, type(e))) self.exception = e return # should never get here (can only exit via exception) diff --git a/electrum/network.py b/electrum/network.py index a08402738..b9e12752f 100644 --- a/electrum/network.py +++ b/electrum/network.py @@ -569,9 +569,10 @@ class Network(PrintError): # and to cancel tasks in interface.group. # However, for headers sub, give preference to this interface # over unknown ones, i.e. start it again right away. + old_server = self.interface.server self.close_interface(self.interface) if len(self.interfaces) <= self.num_server: - self.start_interface(self.interface.server) + self.start_interface(old_server) self.interface = i asyncio.get_event_loop().create_task( From e8f87d2e62cd5d56a66c68a44ffed195ea1e0413 Mon Sep 17 00:00:00 2001 From: ThomasV Date: Mon, 10 Sep 2018 13:06:48 +0200 Subject: [PATCH 62/76] remove requests and pysocks from requirements --- contrib/requirements/requirements.txt | 2 -- 1 file changed, 2 deletions(-) diff --git a/contrib/requirements/requirements.txt b/contrib/requirements/requirements.txt index 3536b894e..9d5cf1961 100644 --- a/contrib/requirements/requirements.txt +++ b/contrib/requirements/requirements.txt @@ -1,11 +1,9 @@ pyaes>=0.1a1 ecdsa>=0.9 -requests qrcode protobuf dnspython jsonrpclib-pelix -PySocks>=1.6.6 qdarkstyle<3.0 typing>=3.0.0 aiorpcx>=0.7.1 From 061231494dc065aebb3108c3425f7add1a2dc7ff Mon Sep 17 00:00:00 2001 From: ThomasV Date: Mon, 10 Sep 2018 13:26:50 +0200 Subject: [PATCH 63/76] revert rm requests --- contrib/requirements/requirements.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/contrib/requirements/requirements.txt b/contrib/requirements/requirements.txt index 9d5cf1961..85dd81bee 100644 --- a/contrib/requirements/requirements.txt +++ b/contrib/requirements/requirements.txt @@ -1,5 +1,6 @@ pyaes>=0.1a1 ecdsa>=0.9 +requests qrcode protobuf dnspython From 3e3d3871615e0f22eb5c72a1c16c1338e363ac45 Mon Sep 17 00:00:00 2001 From: SomberNight Date: Mon, 10 Sep 2018 15:18:11 +0200 Subject: [PATCH 64/76] fix kivy: follow-up 3d424077fd310b0644e7a466a813f4f411bd66ac --- electrum/gui/kivy/main_window.py | 2 +- electrum/gui/kivy/uix/dialogs/settings.py | 1 - electrum/gui/kivy/uix/ui_screens/server.kv | 3 +-- 3 files changed, 2 insertions(+), 4 deletions(-) diff --git a/electrum/gui/kivy/main_window.py b/electrum/gui/kivy/main_window.py index 4ba41465d..0ba85313d 100644 --- a/electrum/gui/kivy/main_window.py +++ b/electrum/gui/kivy/main_window.py @@ -272,7 +272,7 @@ class ElectrumWindow(App): self.server_host = net_params.host self.server_port = net_params.port self.auto_connect = net_params.auto_connect - self.proxy_config = net_params.proxy_config if net_params.proxy_config else {} + self.proxy_config = net_params.proxy if net_params.proxy else {} self.plugins = kwargs.get('plugins', []) self.gui_object = kwargs.get('gui_object', None) diff --git a/electrum/gui/kivy/uix/dialogs/settings.py b/electrum/gui/kivy/uix/dialogs/settings.py index 5247c0ffb..07530a0a7 100644 --- a/electrum/gui/kivy/uix/dialogs/settings.py +++ b/electrum/gui/kivy/uix/dialogs/settings.py @@ -8,7 +8,6 @@ from electrum.i18n import languages from electrum.gui.kivy.i18n import _ from electrum.plugin import run_hook from electrum import coinchooser -from electrum.network import NetworkProxy from .choice_dialog import ChoiceDialog diff --git a/electrum/gui/kivy/uix/ui_screens/server.kv b/electrum/gui/kivy/uix/ui_screens/server.kv index 686ee3be4..ee959cbab 100644 --- a/electrum/gui/kivy/uix/ui_screens/server.kv +++ b/electrum/gui/kivy/uix/ui_screens/server.kv @@ -57,7 +57,6 @@ Popup: text: _('OK') on_release: net_params = app.network.get_parameters() - net_params = net_params._replace(host=str(root.ids.host.text), - port=str(root.ids.port.text)) + net_params = net_params._replace(host=str(root.ids.host.text), port=str(root.ids.port.text)) app.network.set_parameters(net_params) nd.dismiss() From fffec71fb38e13bba5e4b8d3071e4cd46233e55c Mon Sep 17 00:00:00 2001 From: SomberNight Date: Mon, 10 Sep 2018 16:43:04 +0200 Subject: [PATCH 65/76] kivy fx: make sure displayed fiat values get updated --- electrum/exchange_rate.py | 9 +++++---- electrum/gui/kivy/main_window.py | 1 + 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/electrum/exchange_rate.py b/electrum/exchange_rate.py index e4d0e3481..f943c2516 100644 --- a/electrum/exchange_rate.py +++ b/electrum/exchange_rate.py @@ -486,7 +486,8 @@ class FxThread(ThreadJob): return bool(self.config.get('use_exchange_rate')) def set_enabled(self, b): - return self.config.set_key('use_exchange_rate', bool(b)) + self.config.set_key('use_exchange_rate', bool(b)) + self.trigger.set() def get_history_config(self): return bool(self.config.get('history_rates')) @@ -519,7 +520,7 @@ class FxThread(ThreadJob): def set_currency(self, ccy): self.ccy = ccy self.config.set_key('currency', ccy, True) - self.trigger.set() # Because self.ccy changes + self.trigger.set() # Because self.ccy changes self.on_quotes() def set_exchange(self, name): @@ -541,8 +542,8 @@ class FxThread(ThreadJob): if self.network: self.network.trigger_callback('on_history') - def exchange_rate(self): - '''Returns None, or the exchange rate as a Decimal''' + def exchange_rate(self) -> Decimal: + """Returns the exchange rate as a Decimal""" rate = self.exchange.quotes.get(self.ccy) if rate is None: return Decimal('NaN') diff --git a/electrum/gui/kivy/main_window.py b/electrum/gui/kivy/main_window.py index 0ba85313d..e100fba18 100644 --- a/electrum/gui/kivy/main_window.py +++ b/electrum/gui/kivy/main_window.py @@ -156,6 +156,7 @@ class ElectrumWindow(App): def on_quotes(self, d): Logger.info("on_quotes") + self._trigger_update_status() self._trigger_update_history() def on_history(self, d): From b279d351d83d5c66ab8e9aac12af795b71158704 Mon Sep 17 00:00:00 2001 From: SomberNight Date: Mon, 10 Sep 2018 17:12:05 +0200 Subject: [PATCH 66/76] interface.session: add default timeout to send_request --- electrum/interface.py | 14 +++++++++++--- electrum/network.py | 4 ++-- electrum/synchronizer.py | 2 +- 3 files changed, 14 insertions(+), 6 deletions(-) diff --git a/electrum/interface.py b/electrum/interface.py index 1ac52d0be..4630dd902 100644 --- a/electrum/interface.py +++ b/electrum/interface.py @@ -53,8 +53,9 @@ class NotificationSession(ClientSession): self.scripthash = scripthash self.header = header - @aiosafe async def handle_request(self, request): + # note: if server sends malformed request and we raise, the superclass + # will catch the exception, count errors, and at some point disconnect if isinstance(request, Notification): if request.method == 'blockchain.scripthash.subscribe' and self.scripthash is not None: scripthash, status = request.args @@ -65,6 +66,13 @@ class NotificationSession(ClientSession): else: assert False, request.method + async def send_request(self, *args, timeout=-1, **kwargs): + if timeout == -1: + timeout = 20 if not self.proxy else 30 + return await asyncio.wait_for( + super().send_request(*args, **kwargs), + timeout) + # FIXME this is often raised inside a TaskGroup, but then it's not silent :( class GracefulDisconnect(AIOSafeSilentException): pass @@ -262,7 +270,7 @@ class Interface(PrintError): return None async def get_block_header(self, height, assert_mode): - res = await asyncio.wait_for(self.session.send_request('blockchain.block.header', [height]), 5) + res = await self.session.send_request('blockchain.block.header', [height], timeout=5) return blockchain.deserialize_header(bytes.fromhex(res), height) async def request_chunk(self, idx, tip): @@ -304,7 +312,7 @@ class Interface(PrintError): self.tip = new_header['block_height'] await copy_header_queue.put(new_header) except concurrent.futures.TimeoutError: - await asyncio.wait_for(self.session.send_request('server.ping'), 10) + await self.session.send_request('server.ping', timeout=10) def close(self): self.fut.cancel() diff --git a/electrum/network.py b/electrum/network.py index b9e12752f..e6f77d614 100644 --- a/electrum/network.py +++ b/electrum/network.py @@ -695,7 +695,7 @@ class Network(PrintError): size = max(size, 0) try: self.requested_chunks.add(index) - res = await asyncio.wait_for(session.send_request('blockchain.block.headers', [index * 2016, size]), 20) + res = await session.send_request('blockchain.block.headers', [index * 2016, size]) finally: try: self.requested_chunks.remove(index) except KeyError: pass @@ -816,4 +816,4 @@ class Network(PrintError): await asyncio.sleep(0.1) async def attempt_fee_estimate_update(self): - await asyncio.wait_for(self.request_fee_estimates(self.interface), 5) + await self.request_fee_estimates(self.interface) diff --git a/electrum/synchronizer.py b/electrum/synchronizer.py index a939f77e3..ba4611d64 100644 --- a/electrum/synchronizer.py +++ b/electrum/synchronizer.py @@ -120,7 +120,7 @@ class Synchronizer(PrintError): await group.spawn(self.get_transaction, tx_hash) async def get_transaction(self, tx_hash): - result = await asyncio.wait_for(self.session.send_request('blockchain.transaction.get', [tx_hash]), 20) + result = await self.session.send_request('blockchain.transaction.get', [tx_hash]) tx = Transaction(result) try: tx.deserialize() From e2338581eb5f0aa2320a793e96db8ee38de2517f Mon Sep 17 00:00:00 2001 From: SomberNight Date: Mon, 10 Sep 2018 18:39:10 +0200 Subject: [PATCH 67/76] broadcast_transaction: introduce async variant --- electrum/commands.py | 2 +- electrum/gui/kivy/main_window.py | 2 +- electrum/gui/qt/main_window.py | 2 +- electrum/gui/stdio.py | 2 +- electrum/gui/text.py | 2 +- electrum/network.py | 10 +++++++--- 6 files changed, 12 insertions(+), 8 deletions(-) diff --git a/electrum/commands.py b/electrum/commands.py index e2cf87a26..1e38b1024 100644 --- a/electrum/commands.py +++ b/electrum/commands.py @@ -255,7 +255,7 @@ class Commands: def broadcast(self, tx): """Broadcast a transaction to the network. """ tx = Transaction(tx) - return self.network.broadcast_transaction(tx) + return self.network.broadcast_transaction_from_non_network_thread(tx) @command('') def createmultisig(self, num, pubkeys): diff --git a/electrum/gui/kivy/main_window.py b/electrum/gui/kivy/main_window.py index e100fba18..9ccabfbb8 100644 --- a/electrum/gui/kivy/main_window.py +++ b/electrum/gui/kivy/main_window.py @@ -880,7 +880,7 @@ class ElectrumWindow(App): Clock.schedule_once(lambda dt: on_success(tx)) def _broadcast_thread(self, tx, on_complete): - ok, txid = self.network.broadcast_transaction(tx) + ok, txid = self.network.broadcast_transaction_from_non_network_thread(tx) Clock.schedule_once(lambda dt: on_complete(ok, txid)) def broadcast(self, tx, pr=None): diff --git a/electrum/gui/qt/main_window.py b/electrum/gui/qt/main_window.py index 539b72293..22d7144e8 100644 --- a/electrum/gui/qt/main_window.py +++ b/electrum/gui/qt/main_window.py @@ -1616,7 +1616,7 @@ class ElectrumWindow(QMainWindow, MessageBoxMixin, PrintError): if pr and pr.has_expired(): self.payment_request = None return False, _("Payment request has expired") - status, msg = self.network.broadcast_transaction(tx) + status, msg = self.network.broadcast_transaction_from_non_network_thread(tx) if pr and status is True: self.invoices.set_paid(pr, tx.txid()) self.invoices.save() diff --git a/electrum/gui/stdio.py b/electrum/gui/stdio.py index d155efb08..d3d16342c 100644 --- a/electrum/gui/stdio.py +++ b/electrum/gui/stdio.py @@ -200,7 +200,7 @@ class ElectrumGui: self.wallet.labels[tx.txid()] = self.str_description print(_("Please wait...")) - status, msg = self.network.broadcast_transaction(tx) + status, msg = self.network.broadcast_transaction_from_non_network_thread(tx) if status: print(_('Payment sent.')) diff --git a/electrum/gui/text.py b/electrum/gui/text.py index c27eb2df0..d00528ccc 100644 --- a/electrum/gui/text.py +++ b/electrum/gui/text.py @@ -354,7 +354,7 @@ class ElectrumGui: self.wallet.labels[tx.txid()] = self.str_description self.show_message(_("Please wait..."), getchar=False) - status, msg = self.network.broadcast_transaction(tx) + status, msg = self.network.broadcast_transaction_from_non_network_thread(tx) if status: self.show_message(_('Payment sent.')) diff --git a/electrum/network.py b/electrum/network.py index e6f77d614..89ab8ff64 100644 --- a/electrum/network.py +++ b/electrum/network.py @@ -671,10 +671,14 @@ class Network(PrintError): async def get_merkle_for_transaction(self, tx_hash, tx_height): return await self.interface.session.send_request('blockchain.transaction.get_merkle', [tx_hash, tx_height]) - def broadcast_transaction(self, tx, timeout=5): - fut = asyncio.run_coroutine_threadsafe(self.interface.session.send_request('blockchain.transaction.broadcast', [str(tx)]), self.asyncio_loop) + def broadcast_transaction_from_non_network_thread(self, tx, timeout=10): + # note: calling this from the network thread will deadlock it + fut = asyncio.run_coroutine_threadsafe(self.broadcast_transaction(tx, timeout=timeout), self.asyncio_loop) + return fut.result() + + async def broadcast_transaction(self, tx, timeout=10): try: - out = fut.result(timeout) + out = await self.interface.session.send_request('blockchain.transaction.broadcast', [str(tx)], timeout=timeout) except asyncio.TimeoutError as e: return False, "error: operation timed out" except Exception as e: From 54cc822227ca7f68e58e7bf19eb9960072cdcb99 Mon Sep 17 00:00:00 2001 From: SomberNight Date: Mon, 10 Sep 2018 19:03:06 +0200 Subject: [PATCH 68/76] network: send out 'interfaces' event on new_interface network dialog was not always showing up-to-date data --- electrum/network.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/electrum/network.py b/electrum/network.py index 89ab8ff64..d2fc8beb8 100644 --- a/electrum/network.py +++ b/electrum/network.py @@ -636,8 +636,9 @@ class Network(PrintError): self.add_recent_server(server) interface = Interface(self, server, self.config.path, self.proxy) + timeout = 10 if not self.proxy else 20 try: - await asyncio.wait_for(interface.ready, 5) + await asyncio.wait_for(interface.ready, timeout) except BaseException as e: #import traceback #traceback.print_exc() @@ -654,7 +655,7 @@ class Network(PrintError): if server == self.default_server: self.switch_to_interface(server) - #self.notify('interfaces') + self.notify('interfaces') def init_headers_file(self): b = blockchain.blockchains[0] From 19e244a85ee282354d7576267a175d4d9667aa7a Mon Sep 17 00:00:00 2001 From: SomberNight Date: Mon, 10 Sep 2018 19:47:36 +0200 Subject: [PATCH 69/76] interface: rm unnecessary writes to self.tip --- electrum/interface.py | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/electrum/interface.py b/electrum/interface.py index 4630dd902..0b026ce68 100644 --- a/electrum/interface.py +++ b/electrum/interface.py @@ -339,7 +339,6 @@ class Interface(PrintError): if self.tip < height: height = self.tip _, height = await self.step(height, item) - self.tip = max(height, self.tip) async def sync_until(self, height, next_height=None): if next_height is None: @@ -348,12 +347,10 @@ class Interface(PrintError): while last is None or height < next_height: if next_height > height + 10: could_connect, num_headers = await self.request_chunk(height, next_height) - self.tip = max(height + num_headers, self.tip) if not could_connect: if height <= constants.net.max_checkpoint(): raise Exception('server chain conflicts with checkpoints or genesis') last, height = await self.step(height) - self.tip = max(height, self.tip) continue height = (height // 2016 * 2016) + num_headers if height > next_height: @@ -361,7 +358,6 @@ class Interface(PrintError): last = 'catchup' else: last, height = await self.step(height) - self.tip = max(height, self.tip) return last, height async def step(self, height, header=None): @@ -509,6 +505,7 @@ class Interface(PrintError): height = bh + 1 return 'no_fork', height + def check_cert(host, cert): try: b = pem.dePem(cert, 'CERTIFICATE') From 557334aa366108609f1415d3df6beec2853cbb03 Mon Sep 17 00:00:00 2001 From: SomberNight Date: Tue, 11 Sep 2018 11:44:49 +0200 Subject: [PATCH 70/76] interface: introduce tip_lock --- electrum/interface.py | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/electrum/interface.py b/electrum/interface.py index 0b026ce68..1b7e32a3d 100644 --- a/electrum/interface.py +++ b/electrum/interface.py @@ -117,11 +117,13 @@ class Interface(PrintError): self.port = int(self.port) self.config_path = config_path self.cert_path = os.path.join(self.config_path, 'certs', self.host) - self.tip_header = None - self.tip = 0 self.blockchain = None self.network = network + self.tip_header = None + self.tip = 0 + self.tip_lock = asyncio.Lock() + # TODO combine? self.fut = asyncio.get_event_loop().create_task(self.run()) self.group = CustomTaskGroup() @@ -308,8 +310,9 @@ class Interface(PrintError): while True: try: new_header = await asyncio.wait_for(header_queue.get(), 300) - self.tip_header = new_header - self.tip = new_header['block_height'] + async with self.tip_lock: + self.tip_header = new_header + self.tip = new_header['block_height'] await copy_header_queue.put(new_header) except concurrent.futures.TimeoutError: await self.session.send_request('server.ping', timeout=10) @@ -329,12 +332,12 @@ class Interface(PrintError): while True: self.network.notify('updated') item = await replies.get() - async with self.network.bhi_lock: + async with self.network.bhi_lock and self.tip_lock: if self.blockchain.height() < item['block_height']-1: _, height = await self.sync_until(height, None) if self.blockchain.height() >= height and self.blockchain.check_header(item): # another interface amended the blockchain - self.print_error("SKIPPING HEADER", height) + self.print_error("skipping header", height) continue if self.tip < height: height = self.tip From 1728dff576ce5e435cfeb9695211c05c59939e6f Mon Sep 17 00:00:00 2001 From: SomberNight Date: Tue, 11 Sep 2018 12:25:57 +0200 Subject: [PATCH 71/76] fix prev: that's not how you use the context manager... --- electrum/interface.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/electrum/interface.py b/electrum/interface.py index 1b7e32a3d..64e773842 100644 --- a/electrum/interface.py +++ b/electrum/interface.py @@ -332,7 +332,7 @@ class Interface(PrintError): while True: self.network.notify('updated') item = await replies.get() - async with self.network.bhi_lock and self.tip_lock: + async with self.network.bhi_lock, self.tip_lock: if self.blockchain.height() < item['block_height']-1: _, height = await self.sync_until(height, None) if self.blockchain.height() >= height and self.blockchain.check_header(item): From 3b6af914e1e89b1b86cdad73f10ec1ba260b9d6a Mon Sep 17 00:00:00 2001 From: ThomasV Date: Tue, 11 Sep 2018 14:57:59 +0200 Subject: [PATCH 72/76] add multiplexing capability to NotificationSession, simplify interface --- electrum/interface.py | 77 ++++++++++++++++++++-------------------- electrum/synchronizer.py | 4 +-- 2 files changed, 40 insertions(+), 41 deletions(-) diff --git a/electrum/interface.py b/electrum/interface.py index 64e773842..bac6f59f6 100644 --- a/electrum/interface.py +++ b/electrum/interface.py @@ -47,22 +47,21 @@ from . import constants class NotificationSession(ClientSession): - def __init__(self, scripthash, header, *args, **kwargs): + def __init__(self, *args, **kwargs): super(NotificationSession, self).__init__(*args, **kwargs) - # queues: - self.scripthash = scripthash - self.header = header + self.subscriptions = {} + self.cache = {} async def handle_request(self, request): # note: if server sends malformed request and we raise, the superclass # will catch the exception, count errors, and at some point disconnect if isinstance(request, Notification): - if request.method == 'blockchain.scripthash.subscribe' and self.scripthash is not None: - scripthash, status = request.args - await self.scripthash.put((scripthash, status)) - elif request.method == 'blockchain.headers.subscribe' and self.header is not None: - deser = deserialize_header(bfh(request.args[0]['hex']), request.args[0]['height']) - await self.header.put(deser) + params, result = request.args[:-1], request.args[-1] + key = request.method + repr(params) + if key in self.subscriptions: + self.cache[key] = result + for queue in self.subscriptions[key]: + await queue.put(request.args) else: assert False, request.method @@ -73,6 +72,17 @@ class NotificationSession(ClientSession): super().send_request(*args, **kwargs), timeout) + async def subscribe(self, method, params, queue): + key = method + repr(params) + if key in self.subscriptions: + self.subscriptions[key].append(queue) + result = self.cache[key] + else: + result = await self.send_request(method, params) + self.subscriptions[key] = [queue] + self.cache[key] = result + await queue.put(params + [result]) + # FIXME this is often raised inside a TaskGroup, but then it's not silent :( class GracefulDisconnect(AIOSafeSilentException): pass @@ -122,7 +132,6 @@ class Interface(PrintError): self.tip_header = None self.tip = 0 - self.tip_lock = asyncio.Lock() # TODO combine? self.fut = asyncio.get_event_loop().create_task(self.run()) @@ -280,7 +289,7 @@ class Interface(PrintError): async def open_session(self, sslc, exit_early): header_queue = asyncio.Queue() - self.session = NotificationSession(None, header_queue, self.host, self.port, ssl=sslc, proxy=self.proxy) + self.session = NotificationSession(self.host, self.port, ssl=sslc, proxy=self.proxy) async with self.session as session: try: ver = await session.send_request('server.version', [ELECTRUM_VERSION, PROTOCOL_VERSION]) @@ -289,14 +298,10 @@ class Interface(PrintError): if exit_early: return self.print_error(ver, self.host) - subscription_res = await session.send_request('blockchain.headers.subscribe') - self.tip_header = blockchain.deserialize_header(bfh(subscription_res['hex']), subscription_res['height']) - self.tip = subscription_res['height'] - self.mark_ready() - copy_header_queue = asyncio.Queue() + await session.subscribe('blockchain.headers.subscribe', [], header_queue) async with self.group as group: - await group.spawn(self.run_fetch_blocks(subscription_res, copy_header_queue)) - await group.spawn(self.subscribe_to_headers(header_queue, copy_header_queue)) + await group.spawn(self.ping()) + await group.spawn(self.run_fetch_blocks(header_queue)) await group.spawn(self.monitor_connection()) # NOTE: group.__aexit__ will be called here; this is needed to notice exceptions in the group! @@ -306,33 +311,29 @@ class Interface(PrintError): if not self.session or self.session.is_closing(): raise GracefulDisconnect('server closed session') - async def subscribe_to_headers(self, header_queue, copy_header_queue): + async def ping(self): while True: - try: - new_header = await asyncio.wait_for(header_queue.get(), 300) - async with self.tip_lock: - self.tip_header = new_header - self.tip = new_header['block_height'] - await copy_header_queue.put(new_header) - except concurrent.futures.TimeoutError: - await self.session.send_request('server.ping', timeout=10) + await asyncio.sleep(300) + await self.session.send_request('server.ping', timeout=10) def close(self): self.fut.cancel() asyncio.get_event_loop().create_task(self.group.cancel_remaining()) - async def run_fetch_blocks(self, sub_reply, replies): - if self.tip < constants.net.max_checkpoint(): - raise GracefulDisconnect('server tip below max checkpoint') - - async with self.network.bhi_lock: - height = self.blockchain.height()+1 - await replies.put(blockchain.deserialize_header(bfh(sub_reply['hex']), sub_reply['height'])) - + async def run_fetch_blocks(self, header_queue): while True: self.network.notify('updated') - item = await replies.get() - async with self.network.bhi_lock, self.tip_lock: + item = await header_queue.get() + item = item[0] + height = item['height'] + item = blockchain.deserialize_header(bfh(item['hex']), item['height']) + self.tip_header = item + self.tip = height + if self.tip < constants.net.max_checkpoint(): + raise GracefulDisconnect('server tip below max checkpoint') + if not self.ready.done(): + self.mark_ready() + async with self.network.bhi_lock: if self.blockchain.height() < item['block_height']-1: _, height = await self.sync_until(height, None) if self.blockchain.height() >= height and self.blockchain.check_header(item): diff --git a/electrum/synchronizer.py b/electrum/synchronizer.py index ba4611d64..8182f8321 100644 --- a/electrum/synchronizer.py +++ b/electrum/synchronizer.py @@ -141,9 +141,7 @@ class Synchronizer(PrintError): async def subscribe_to_address(self, addr): h = address_to_scripthash(addr) self.scripthash_to_address[h] = addr - self.session.scripthash = self.status_queue - status = await self.session.send_request('blockchain.scripthash.subscribe', [h]) - await self.status_queue.put((h, status)) + await self.session.subscribe('blockchain.scripthash.subscribe', [h], self.status_queue) self.requested_addrs.remove(addr) async def send_subscriptions(self, interface): From 09dfb0fd1da16c4660f50607ab559297044b363b Mon Sep 17 00:00:00 2001 From: Janus Date: Tue, 11 Sep 2018 17:16:37 +0200 Subject: [PATCH 73/76] fix off-by-one error when syncing from genesis w/o checkpoints --- electrum/interface.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/electrum/interface.py b/electrum/interface.py index bac6f59f6..e35890004 100644 --- a/electrum/interface.py +++ b/electrum/interface.py @@ -381,7 +381,7 @@ class Interface(PrintError): height -= 1 checkp = False if height <= constants.net.max_checkpoint(): - height = constants.net.max_checkpoint() + 1 + height = constants.net.max_checkpoint() checkp = True header = await self.get_block_header(height, 'backward') @@ -396,7 +396,7 @@ class Interface(PrintError): next_height = self.tip - 2 * delta checkp = False if next_height <= constants.net.max_checkpoint(): - next_height = constants.net.max_checkpoint() + 1 + next_height = constants.net.max_checkpoint() checkp = True height = next_height From e829d6bbcfd65910ff778406a0f14ac9cececa77 Mon Sep 17 00:00:00 2001 From: SomberNight Date: Tue, 11 Sep 2018 20:24:01 +0200 Subject: [PATCH 74/76] wallet: put Sync and Verifier in their own TaskGroup, and that into interface.group --- electrum/address_synchronizer.py | 54 +++++++++++++++++++------------- electrum/daemon.py | 2 +- electrum/gui/kivy/main_window.py | 2 +- electrum/gui/qt/__init__.py | 2 +- electrum/gui/stdio.py | 2 +- electrum/gui/text.py | 2 +- electrum/interface.py | 22 ++++++------- electrum/network.py | 14 +-------- electrum/synchronizer.py | 8 ++--- electrum/util.py | 18 ++++++++--- electrum/verifier.py | 12 ++++--- run_electrum | 2 +- 12 files changed, 74 insertions(+), 66 deletions(-) diff --git a/electrum/address_synchronizer.py b/electrum/address_synchronizer.py index f976b1f55..4793074d4 100644 --- a/electrum/address_synchronizer.py +++ b/electrum/address_synchronizer.py @@ -26,11 +26,9 @@ import asyncio import itertools from collections import defaultdict -from aiorpcx import TaskGroup - from . import bitcoin from .bitcoin import COINBASE_MATURITY, TYPE_ADDRESS, TYPE_PUBKEY -from .util import PrintError, profiler, bfh, VerifiedTxInfo, TxMinedStatus +from .util import PrintError, profiler, bfh, VerifiedTxInfo, TxMinedStatus, aiosafe, CustomTaskGroup from .transaction import Transaction, TxOutput from .synchronizer import Synchronizer from .verifier import SPV @@ -62,6 +60,7 @@ class AddressSynchronizer(PrintError): self.synchronizer = None self.verifier = None self.sync_restart_lock = asyncio.Lock() + self.group = None # locks: if you need to take multiple ones, acquire them in the order they are defined here! self.lock = threading.RLock() self.transaction_lock = threading.RLock() @@ -138,34 +137,45 @@ class AddressSynchronizer(PrintError): # add it in case it was previously unconfirmed self.add_unverified_tx(tx_hash, tx_height) - async def on_default_server_changed(self, evt): + @aiosafe + async def on_default_server_changed(self, event): async with self.sync_restart_lock: - interface = self.network.interface - if interface is None: - return # we should get called again soon - self.verifier = SPV(self.network, self) - self.synchronizer = Synchronizer(self) - await interface.group.spawn(self.verifier.main(interface)) - await interface.group.spawn(self.synchronizer.send_subscriptions(interface)) - await interface.group.spawn(self.synchronizer.handle_status(interface)) - await interface.group.spawn(self.synchronizer.main()) - - def start_threads(self, network): + self.stop_threads() + await self._start_threads() + + def start_network(self, network): self.network = network if self.network is not None: self.network.register_callback(self.on_default_server_changed, ['default_server_changed']) - self.network.trigger_callback('default_server_changed') - else: - self.verifier = None - self.synchronizer = None + asyncio.run_coroutine_threadsafe(self._start_threads(), network.asyncio_loop) + + async def _start_threads(self): + interface = self.network.interface + if interface is None: + return # we should get called again soon + + self.verifier = SPV(self.network, self) + self.synchronizer = synchronizer = Synchronizer(self) + assert self.group is None, 'group already exists' + self.group = CustomTaskGroup() + + async def job(): + async with self.group as group: + await group.spawn(self.verifier.main(group)) + await group.spawn(self.synchronizer.send_subscriptions(group)) + await group.spawn(self.synchronizer.handle_status(group)) + await group.spawn(self.synchronizer.main()) + # we are being cancelled now + interface.session.unsubscribe(synchronizer.status_queue) + await interface.group.spawn(job) def stop_threads(self): if self.network: - #self.network.remove_jobs([self.verifier]) self.synchronizer = None self.verifier = None - # Now no references to the synchronizer or verifier - # remain so they will be GC-ed + if self.group: + asyncio.run_coroutine_threadsafe(self.group.cancel_remaining(), self.network.asyncio_loop) + self.group = None self.storage.put('stored_height', self.get_local_height()) self.save_transactions() self.save_verified_tx() diff --git a/electrum/daemon.py b/electrum/daemon.py index f2a9316e0..c939d1097 100644 --- a/electrum/daemon.py +++ b/electrum/daemon.py @@ -243,7 +243,7 @@ class Daemon(DaemonThread): if storage.get_action(): return wallet = Wallet(storage) - wallet.start_threads(self.network) + wallet.start_network(self.network) self.wallets[path] = wallet return wallet diff --git a/electrum/gui/kivy/main_window.py b/electrum/gui/kivy/main_window.py index 9ccabfbb8..0dbb5280f 100644 --- a/electrum/gui/kivy/main_window.py +++ b/electrum/gui/kivy/main_window.py @@ -512,7 +512,7 @@ class ElectrumWindow(App): def on_wizard_complete(self, wizard, wallet): if wallet: # wizard returned a wallet - wallet.start_threads(self.daemon.network) + wallet.start_network(self.daemon.network) self.daemon.add_wallet(wallet) self.load_wallet(wallet) elif not self.wallet: diff --git a/electrum/gui/qt/__init__.py b/electrum/gui/qt/__init__.py index b49826c66..3fd204d7d 100644 --- a/electrum/gui/qt/__init__.py +++ b/electrum/gui/qt/__init__.py @@ -236,7 +236,7 @@ class ElectrumGui: if not self.daemon.get_wallet(wallet.storage.path): # wallet was not in memory - wallet.start_threads(self.daemon.network) + wallet.start_network(self.daemon.network) self.daemon.add_wallet(wallet) try: for w in self.windows: diff --git a/electrum/gui/stdio.py b/electrum/gui/stdio.py index d3d16342c..cbb0d3403 100644 --- a/electrum/gui/stdio.py +++ b/electrum/gui/stdio.py @@ -34,7 +34,7 @@ class ElectrumGui: self.str_fee = "" self.wallet = Wallet(storage) - self.wallet.start_threads(self.network) + self.wallet.start_network(self.network) self.contacts = self.wallet.contacts self.network.register_callback(self.on_network, ['updated', 'banner']) diff --git a/electrum/gui/text.py b/electrum/gui/text.py index d00528ccc..981340139 100644 --- a/electrum/gui/text.py +++ b/electrum/gui/text.py @@ -30,7 +30,7 @@ class ElectrumGui: password = getpass.getpass('Password:', stream=None) storage.decrypt(password) self.wallet = Wallet(storage) - self.wallet.start_threads(self.network) + self.wallet.start_network(self.network) self.contacts = self.wallet.contacts locale.setlocale(locale.LC_ALL, '') diff --git a/electrum/interface.py b/electrum/interface.py index e35890004..da2e08ad8 100644 --- a/electrum/interface.py +++ b/electrum/interface.py @@ -24,24 +24,21 @@ # SOFTWARE. import os import re -import socket import ssl import sys import traceback import asyncio -import concurrent.futures from typing import Tuple, Union import aiorpcx -from aiorpcx import ClientSession, Notification, TaskGroup +from aiorpcx import ClientSession, Notification -from .util import PrintError, aiosafe, bfh, AIOSafeSilentException +from .util import PrintError, aiosafe, bfh, AIOSafeSilentException, CustomTaskGroup from . import util from . import x509 from . import pem from .version import ELECTRUM_VERSION, PROTOCOL_VERSION from . import blockchain -from .blockchain import deserialize_header from . import constants @@ -83,6 +80,14 @@ class NotificationSession(ClientSession): self.cache[key] = result await queue.put(params + [result]) + def unsubscribe(self, queue): + """Unsubscribe a callback to free object references to enable GC.""" + # note: we can't unsubscribe from the server, so we keep receiving + # subsequent notifications + for v in self.subscriptions.values(): + if queue in v: + v.remove(queue) + # FIXME this is often raised inside a TaskGroup, but then it's not silent :( class GracefulDisconnect(AIOSafeSilentException): pass @@ -94,13 +99,6 @@ class ErrorParsingSSLCert(Exception): pass class ErrorGettingSSLCertFromServer(Exception): pass -class CustomTaskGroup(TaskGroup): - - def spawn(self, *args, **kwargs): - if self._closed: - raise asyncio.CancelledError() - return super().spawn(*args, **kwargs) - def deserialize_server(server_str: str) -> Tuple[str, str, str]: # host might be IPv6 address, hence do rsplit: diff --git a/electrum/network.py b/electrum/network.py index d2fc8beb8..20ebde59a 100644 --- a/electrum/network.py +++ b/electrum/network.py @@ -211,9 +211,6 @@ class Network(PrintError): self.banner = '' self.donation_address = '' self.relay_fee = None - # callbacks passed with subscriptions - self.subscriptions = defaultdict(list) # note: needs self.callback_lock - self.sub_cache = {} # note: needs self.interface_lock # callbacks set by the GUI self.callbacks = defaultdict(list) # note: needs self.callback_lock @@ -272,6 +269,7 @@ class Network(PrintError): callbacks = self.callbacks[event][:] for callback in callbacks: if asyncio.iscoroutinefunction(callback): + # FIXME: if callback throws, we will lose the traceback asyncio.run_coroutine_threadsafe(callback(event, *args), self.asyncio_loop) else: callback(event, *args) @@ -605,16 +603,6 @@ class Network(PrintError): """ hashable index for subscriptions and cache""" return str(method) + (':' + str(params[0]) if params else '') - def unsubscribe(self, callback): - '''Unsubscribe a callback to free object references to enable GC.''' - # Note: we can't unsubscribe from the server, so if we receive - # subsequent notifications process_response() will emit a harmless - # "received unexpected notification" warning - with self.callback_lock: - for v in self.subscriptions.values(): - if callback in v: - v.remove(callback) - @with_interface_lock def connection_down(self, server): '''A connection to server either went down, or was never made. diff --git a/electrum/synchronizer.py b/electrum/synchronizer.py index 8182f8321..a74961a31 100644 --- a/electrum/synchronizer.py +++ b/electrum/synchronizer.py @@ -144,16 +144,16 @@ class Synchronizer(PrintError): await self.session.subscribe('blockchain.scripthash.subscribe', [h], self.status_queue) self.requested_addrs.remove(addr) - async def send_subscriptions(self, interface): + async def send_subscriptions(self, group: TaskGroup): while True: addr = await self.add_queue.get() - await interface.group.spawn(self.subscribe_to_address, addr) + await group.spawn(self.subscribe_to_address, addr) - async def handle_status(self, interface): + async def handle_status(self, group: TaskGroup): while True: h, status = await self.status_queue.get() addr = self.scripthash_to_address[h] - await interface.group.spawn(self.on_address_status, addr, status) + await group.spawn(self.on_address_status, addr, status) @property def session(self): diff --git a/electrum/util.py b/electrum/util.py index d252faa75..9d79ef99a 100644 --- a/electrum/util.py +++ b/electrum/util.py @@ -35,14 +35,15 @@ import stat import inspect from locale import localeconv import asyncio - -from .i18n import _ +import urllib.request, urllib.parse, urllib.error +import queue import aiohttp from aiohttp_socks import SocksConnector, SocksVer +from aiorpcx import TaskGroup + +from .i18n import _ -import urllib.request, urllib.parse, urllib.error -import queue def inv_dict(d): return {v: k for k, v in d.items()} @@ -972,3 +973,12 @@ def make_aiohttp_session(proxy): return aiohttp.ClientSession(headers={'User-Agent' : 'Electrum'}, timeout=aiohttp.ClientTimeout(total=10), connector=connector) else: return aiohttp.ClientSession(headers={'User-Agent' : 'Electrum'}, timeout=aiohttp.ClientTimeout(total=10)) + + +class CustomTaskGroup(TaskGroup): + + def spawn(self, *args, **kwargs): + # don't complain if group is already closed. + if self._closed: + raise asyncio.CancelledError() + return super().spawn(*args, **kwargs) diff --git a/electrum/verifier.py b/electrum/verifier.py index 493d402f0..3b502e7af 100644 --- a/electrum/verifier.py +++ b/electrum/verifier.py @@ -24,6 +24,8 @@ import asyncio from typing import Sequence, Optional +from aiorpcx import TaskGroup + from .util import ThreadJob, bh2u, VerifiedTxInfo from .bitcoin import Hash, hash_decode, hash_encode from .transaction import Transaction @@ -47,12 +49,12 @@ class SPV(ThreadJob): self.merkle_roots = {} # txid -> merkle root (once it has been verified) self.requested_merkle = set() # txid set of pending requests - async def main(self, interface): + async def main(self, group: TaskGroup): while True: - await self._request_proofs(interface) + await self._request_proofs(group) await asyncio.sleep(0.1) - async def _request_proofs(self, interface): + async def _request_proofs(self, group: TaskGroup): blockchain = self.network.blockchain() if not blockchain: self.print_error("no blockchain") @@ -70,12 +72,12 @@ class SPV(ThreadJob): if header is None: index = tx_height // 2016 if index < len(blockchain.checkpoints): - await interface.group.spawn(self.network.request_chunk(tx_height, None, can_return_early=True)) + await group.spawn(self.network.request_chunk(tx_height, None, can_return_early=True)) elif (tx_hash not in self.requested_merkle and tx_hash not in self.merkle_roots): self.print_error('requested merkle', tx_hash) self.requested_merkle.add(tx_hash) - await interface.group.spawn(self._request_and_verify_single_proof, tx_hash, tx_height) + await group.spawn(self._request_and_verify_single_proof, tx_hash, tx_height) if self.network.blockchain() != self.blockchain: self.blockchain = self.network.blockchain() diff --git a/run_electrum b/run_electrum index 3db004e22..0a43adbcf 100755 --- a/run_electrum +++ b/run_electrum @@ -135,7 +135,7 @@ def run_non_RPC(config): if not config.get('offline'): network = Network(config) network.start() - wallet.start_threads(network) + wallet.start_network(network) print_msg("Recovering wallet...") wallet.synchronize() wallet.wait_until_synchronized() From 8b8ca14c6da1041174cebcc50e06a125fb280ab9 Mon Sep 17 00:00:00 2001 From: SomberNight Date: Tue, 11 Sep 2018 20:37:53 +0200 Subject: [PATCH 75/76] move get_index from network to session --- electrum/interface.py | 9 +++++++-- electrum/network.py | 5 ----- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/electrum/interface.py b/electrum/interface.py index da2e08ad8..1d165f6f0 100644 --- a/electrum/interface.py +++ b/electrum/interface.py @@ -54,7 +54,7 @@ class NotificationSession(ClientSession): # will catch the exception, count errors, and at some point disconnect if isinstance(request, Notification): params, result = request.args[:-1], request.args[-1] - key = request.method + repr(params) + key = self.get_index(request.method, params) if key in self.subscriptions: self.cache[key] = result for queue in self.subscriptions[key]: @@ -70,7 +70,7 @@ class NotificationSession(ClientSession): timeout) async def subscribe(self, method, params, queue): - key = method + repr(params) + key = self.get_index(method, params) if key in self.subscriptions: self.subscriptions[key].append(queue) result = self.cache[key] @@ -88,6 +88,11 @@ class NotificationSession(ClientSession): if queue in v: v.remove(queue) + @classmethod + def get_index(cls, method, params): + """Hashable index for subscriptions and cache""" + return str(method) + repr(params) + # FIXME this is often raised inside a TaskGroup, but then it's not silent :( class GracefulDisconnect(AIOSafeSilentException): pass diff --git a/electrum/network.py b/electrum/network.py index 20ebde59a..06d33935f 100644 --- a/electrum/network.py +++ b/electrum/network.py @@ -598,11 +598,6 @@ class Network(PrintError): self.recent_servers = self.recent_servers[0:20] self.save_recent_servers() - @classmethod - def get_index(cls, method, params): - """ hashable index for subscriptions and cache""" - return str(method) + (':' + str(params[0]) if params else '') - @with_interface_lock def connection_down(self, server): '''A connection to server either went down, or was never made. From ecc296cf6751cea95ef077e254a92ce8c7f8510e Mon Sep 17 00:00:00 2001 From: SomberNight Date: Tue, 11 Sep 2018 20:39:16 +0200 Subject: [PATCH 76/76] fix race in session.subscribe --- electrum/interface.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/electrum/interface.py b/electrum/interface.py index 1d165f6f0..d1e83c397 100644 --- a/electrum/interface.py +++ b/electrum/interface.py @@ -75,8 +75,8 @@ class NotificationSession(ClientSession): self.subscriptions[key].append(queue) result = self.cache[key] else: - result = await self.send_request(method, params) self.subscriptions[key] = [queue] + result = await self.send_request(method, params) self.cache[key] = result await queue.put(params + [result])

LspQYi>b08uvTt{zR z{-uf0c=w4Ia38>jAO?Voeck^+1`F$Mct$J5OL&A)gVKyQ+BwisBMVsc3ztogqHp&YG41Ud9S-?X!~7|3s7U^yK| zUr|Y+@*KT}&&w~zYy3Ozn}q^<(QPa2_Yw(+FMe#n(0h5v%wdqf4LZ6#F=$w5bZW6# zKX`6uYP4F`qn>_HW-j}!mA-UJzpSaTap3+Xssox99rT~rC&nw|0__f?G!MMM zBTQR6u#GVYiFkxh_42K3ur~D$I(5|&msXns&lC6(dg-3S_Ipr@w$?QOME(F-WQZPp zNzL)&vkxam_2WR?O3cZexiQ;e()GZsF=|mDcwa%aLcef)3o-P;1q3 zWXM_GVy;M!tV?-0W71=o1<;JVE~~qLi&Ug%S}i2hXS?4mp}uG5;YTyoMY8;;r`Dq@ z;E4Lt-~YlD>`qNlXJBlyDC~72ba-_<$I0??>`;i?5$bZFCj8yDo7{-v`>d!flfm7! zgwaLaYT5(eG(7Eu(ATeCbxv1VffhFSv@MQ=^s~qE*&Of+-dkC3Y>xh-{_T(Z1w_1? z^s~kHU&A^v15ex}52iqxhDO$jKeOPnnHDqb+HJIHBm>BdjbH|fr}j-}8M_B@(yI8$ z()NoBaqISQVM>}J7{`IOkm^eE&i?zOyIXrU*5UH|q=7L5_nYqc(Mb~hprE^-&6$2w z)%X^oqK5}bzyR*x0!Y)5@b&S`LB5)uqXmgkIoLiDzQt4)wyTPqM)+^0?T+TZK>5&X zo3e3q)uO$H%4tpVl@A$GD5+G{orsPm67G>LDxpwpuB!SMdwoH{VE@ODA2&3hksNp< zJvC-5q}XOkw+qnKVscFz{2AG~F3HTsu;ksG)e{|iEdX?!F!p?4YK~zQu z_M~z<_;f}!bQ`wNiQB4lvRmDL`X?;d9slIaZGA_JG#OJ@9C^{y4?g4Me7B1gax93^H8~V z2&fhIh;Rv8aSz%kVna%ggD-4@1%6hPx9__u%+1O`obIgMp!?_7Ivqjg7$yWVZL~p} zmQXtgxT$elR&vANWrcAam$i62{FFvuMvw!Z;1YFq|JWp4?m(j00v<{Z;IzX&%E?xS z6XJUqM6PiI54tCe4Bu8 zd|kj^&gRS8uJHbmy zci1%^RsWtC!9YhQ*5@J(o##Z|#Ox7|K_55CX%xx9JSpD-!fDi(C-c7BR^h+gL1||P z(oBJ9o+u07eEiBiFkMpRzX!mfDu#ER*aD+A_n;bfYiuBX zHl8+*ytF$gxh_9Aa{MqTk7d_{^|rq(a^f3Nd`s)eOW81o2DbX0PR4g?cH&v`3(*!p zSMPqo=(^e{2cG~9(7@fj07bnT_$SWlfCEHlM`c-AYYq6w^H>d%9kO*Dz1?o9S#U{w z#ZU7s9RHazZ&?0ra5q7cy+EY+C$$#+40P=`%`Icj(fTACDd)rbY*t^0KHe7RSg#pN z#2pT4hFJPtyb0kVdKwFfB7dKpJIe{w_Iiij+pu$x;2VyNM!HZm$%(0 z`njvV0`I_I0w=?ne&=DB|Kt7fNN3y7fjALH@A?987R^dCP!PN2C);%W`OboFPEC8p zzLPUwG+>gpS5E6GE;k!$gJZvRV9x{{h8sC$6`<$p$ly~S%+*!Fw8N?VufY%Qi!m9J zEl$k}GQ+c(s-_n;*zIDo>aRYAX%!P3^xcV>@&V(!y_A{1em;4wPP<;{{KcEX@y%&J zNo&WIru>_W1Z$_}BHscyC#Sg4ru+e+AKUcpX=OdDqBKDO#10;ZG7w4Go{bRxos%#IlV9&Q)!87w3=P%3+Gm^jS|OFXBrNO`hD9D zfd(kg&oc7y?aJ$5bx~jB{Ip=po+XH$vV8F1L2v*g$cL>hEWCdNa_y(D10aq7sotlp z@2*sbx(XRiY99D>2SFT6npsE&7(RV-f1vZd2HXCWAuY0f$c)v>s2?r2os9%p(B^sM1 zFj}t=Gr1gj)t>JcyHF?}&hH-^!{Gc=-!E-KV!h5!=4(+VX;lu3S6dI*0#7PsPti+- z`NiH377`UMUb>uL`ZjK6%pJq_6Kp#N<%Fv_VhEndrkW=X$-{?h&Q^hcyYNibb8fwK zs$8)K%qj4Yi10`ibjy-D?ig%)qGWp%%$gDn(qzqG%>D?P_#-O9gG0pU z$1l9s4V$^QwQeYyW^yzxVR%Z=3V%YWn)-GkGw*hon4952)cC)tAJdhF zlEpU?q^4ruySoTgW4KM|u?0+4lr@vcSQ+i#2M?NmY~82_lBr=NNRudX zcp-7nHvmn&_J7fT`|KoYE5<4jM0SrP@tf=`JbVhx6aGq*KVT0(0<;Hf=cn!gBi~9F z(;Tq@G`V>NK#{K+_?~N#rm4`qt6?^>B=0UK1U=Y;++v?q)r*SlBg~3y)lq(N zEY~>W{5Hy>(SrC%a?#@`uU)BpqbO0tC-i5AEV#O(ZH8w)b_{yrO;FHq5xwf553IU`)dI6+41$%%Wve|l)QTQ1@Pb>?Hy_g5NhIf3XEv}y_ zvVdHE3PJ~48PoBC2-2TgG)yax*it&%HB&t&aK#sbbPyna|Gu}ta!le!bPiafMyW5j z9=CSt>FUZkC572IR<`vU5aSaMc1yhNZpKXUtaX+(-p z$%#@&+(KlTC-|egeO|ro@0kO+Y`!32W2Hwp197pL3;&j8dYcTFNdWC~2qj`f|GNZS zxZ`u6p{ul*b8h%nluUifRnjbXz>0WXd;ehDFe zCmffm^Pe-vlT5;jk{&{HJH0kCgN&7jH2zhkM>8WJOLKw1>fwQ-qjQzgzoyAqrA77Z zE+cX`LBTtDPXipl{u1)kWYq}R!=C$N+j36Ij9XU(E|!Bgg}wjs%h_LAO~3m?$ug+( zHud4A*irj0woHSLlQi7oZw!2a2L#yQUBglX{<;*2H3q$Ds2B0v+sJy2p=Ap`328e? zD*e_TYVb?(sq(Xx5L^%B^F=sR24f_*xgJGCM@HMnE}_6-j`fSIpIfX(1Wyv*ae_X4 z$y_$)w<6aZOIJkraIHA^NH`ZjA?T@{7ZTk}M&yNz@}ij=oJu+z@xbA`aoSG)D5DeP zaDHJ)>^*zb!w>l$(+6OW#;QzKr-b@|99|A4);V`TZ}};RyE-QauVwCQ4wAvmcB1Y2 zz$1$&)}Ba4)4tz~W-l}~DL})C;fLlo9fOhf-Qb&cDrg$5fj7~Q+?d_yhyUdEG<7VI zJ25ju2h3-*6rUcv90a4ik!%z42Izx|D|6aU4wZ+B<`*3hNmgH{qsshzNs9o_tT|)@ zSbd?x-n|IU9*D_=$ITvpnz%;LsnlkZ@~}pSlM7x?j47tlmLqTGg@vA2st+I+0&#>rFvGxEeerLqq7$k1FwuSGXnGN88)roP-f+T^?N0w^8X6 z_`XRtVW1M6-ecCX6U|cC=RJut;}%{}nY!_3YG!qG)|;4$M(^w=SfT_d#}pI-NuCl@ z*yRdPeJ^4=Q;E2|9&|O?O>HJ7RYt&=Gp|DuPsl%N!B9>hpcR~TkUxSCpmjMnSe&msU&S%kfq_ia+xlK8M%(L~de z&H;9Z3=kbzo(0~>I-EX#PgK2>d!$t-)YwbrAMsmGOKqzpk*Xo z1nRm64CZEfnB?fI61}GrDWRy9NBNOG_W1H$JRJ-KsAa<5n*vQ-#LIMVQryV?doCGo za~yIj#24Gqc9~FFR&s{Jq08E|lX(VjQcFh@k?Yg(`Lv~$`t4)TdX3_AogdVj9zCJ! zlvtp>eX{7()Z*%B8{2}~t*BSX8Ku3b8oTPZ$(fA}ibXcGMh z3qQhs!^F1Agr#^M9vIrbB*Forkr=4urQrUZ*GKs(BO9 zUHyhSh?dkk9pE9oFvX##JOKg|UDeAL`06pTcv#<;yF5Xw{^a>{qX+v|hfhM=o-0J1 zO7+|@AEYOlgt*(=N6P?ap;}npPCJ)Xhpl7SH3(Bove6xNTwa@l*r29)1y+-{yVv`jvVg?l(vK&X< zHDHYKJ~P!p1lo;p8rI#CIh|{-n#Fi8nQHd+26_0BcZkFs$7eXqeqK}vs5Wzz+sd&@ zI5VwVR2nfh*%Y*`r)#X)_0OEU{4ryd0u2+_6}22};gXVJ55_+C#!J6imau(h^eI~_ zb1i8_w8@upEn6Cyl%L=!)X}kSP!u6&B1~aKqf29Rf=0CA>!9s^<8{4~?QD z{qoSc?lN(uE$kjKF>wO7<_GTP4Xy(R9gFtSYAiG~8LG%(n<>ngUs5tqAq`K`n`vREy0PT8;;wvpnP2UCJbd=|cJ$cmCqNJ4B#dSeyU3iAcoMc<4nEULd z$!ukf(C&?fz^-e}np}(%I1r0|8RB~X{=K8=wM8RZOQQv!Y4#;YYd;#ecZRyzPKAMo zNbGpWpabm>V=m;~V=i97Ix^q$?&#=PA|WPrxkrChYT%_>i$^GVI&C#Kb^X@n6L48i z;tLht3O)EHl*lYqp3oFMOpb9G%Q753x8axr^$ z#z5I9aB?J0Ji%7ifRD1aX8AMZy`nIC8=)*FQ`6qLz^=YyDiW|B%yiCrpoa(&%XANu z6l)=D{Ivjm@~3f{-S0-WLJuSuxhPumF^1Bm#I{^%_s(>BFBj+Mtt1VsPdf(5&UhF> za+TR}UUgYD9@Fm}HqRtyS83ojs<(+A;;WqdwMl=EpQAhu^`cHqhjFKrT^Rcnn?6@I zr*hddv#T(9G-QDPc^vN91n=~JIECzoH8!s&gPp~4 zrpl&>5CrV!5C|w-R+-t@HZ)xWUZ?aI!L<9C?XvJ-Q|+g9b=M@5MMXO$v*WX~O5b6s zAOu0sc{ls_FI!Y1C9F%vi-!!LbcUDt<^U^LA{L9y4+{&!5zF`eS|DA7+|lHuwGTn4uQ z--%$~rOevqCAkYJ6@_g)Z+tu`i7BKtLF*;OUEj0s8Jd6bz2y0G*H<;` zd9lG(aUB`o#6wd|IJ5R+Fg2Ljk7{X58X?{%iTlZp@Xe1@K?(m`#)ax^hJZJ(Q=_sN zDP+*C@Sdkj8GHdXI0jh<$cxZ_)6n=JgMy1z_W^-7-l6g^0+<8+JlJ%DisRxRp z;T-}hS+_B5S#UF}zQ8(SFc_kr8zWDt*3+#L@{5Wj?DOnSAyL z;dHp{+i2~8$}ZrZy;VfB?w)#2=3bd;&vLqTWl;_9ksz@o2p1jO9#QEhp&wc*#cRqp z0`AcIy^M3`Ge3F3wK{>TNzCqgy-1@Z892*brt1t@5}E1kWnw44@?og(=Hr?|zErmT z@zD6K-}>49N(VNgNZ#5Ex?F%`pW|N$$&Y&cAaP-J+o@%OvfbmvIkTJP$T^Jl`IFF- z)9FO<9*l#jgol!Xe$Q9$%E?628TM~Edx>gfD0Ij#spgpT__{BW(&Vy@mzL&D83Osd zgb!Cs$5FjA)*?3#dZvQiX6ydi+P4u+4q2}Vz5ZzmL4bRU_S!UHnEHy22*fQ8mT6=0 zuAKqbuSK9)sj=?A^`|=P*!0KsJ$Ah&znHjBvI1maG^%%=6pY>-5LLPnK|O2MA|n*M zt|Eu(UVa{bt9e$}As)dzp^!@VQ!EI0h?*L5JI$TMOR690WiGnoZ< zt<09q!hH_akm-Ai1ZkIpl%mmr%jMO;|uH6 zUgoijqCQQJbZoQyqs@@S?C@DL1YP7hqhgRVAjW=bx#WwQsm}~t`8&$kvsY}#;L~a#$YiFwwn*LZMt(w+i_~ zpJ!N5ghKIiY_gk!EB%KYZ9Q6P5~O#27|KlQHeHUw=G1TyXNSv6)zV4@{3X#E*T24v zmw|@R$7p>7?UB?4%GQ>4IfvYY!;GDb5=vX{1#TY>X!29 zq{sEvu>BK-V(*!C>&J>?S)~FO0&_LxA?CINp(gXeBzb8(bZfUiqdOJ@(?)r)tHDdz zvkH?w;mERxs`^_m>R+1snm~M)`UjD#NMr4DWxNs$+6tT1Eu+uBgw^DS$p-eXtS2Rv z|5U9W$|ufy(UXn`amYMftLC37ZFszGH6#q7?v=uE^)LA1$x~j*+{4*B7t`WKT?pIt zpsUEsPu2ID?UH>7a8|ZfsH6-VJ;+LvVs3_9ar?qxg6A21;ax4?(!rF_$eR#|EZG}+ zt5&9Sfnu31<0kIil+()L>(L#o}ju;WGzuyYuMC57w9`R6km&E-iRYN_+%UNUp zqb>o3!SY|u)xWKd%$T-!{694EdNL=OW)D85W$5dycFxWUD+{sPW;b&{MXZK^)v}_wL`^iXhZyVwZ!<9D?2ssn1^8E| zmB$JUAX)jL3brkiJa-qu@+vA-t&_bL#L;hQeaJoy4MaajJRxCyv@(1-zbSw7=FPRj z_C>~IeHIi%--VFfS9i6E+E4%S@QIfuHVtBjCxO>skP8pkHC~bq;T^n*RRyO8Oo|*`UKYxM^_-eZJ>WiUR&l@_GWj#%Ni5fM#v5v)Gu5s={D(9N7aQIF(&|p=@!;2abL93I0^lsvk52m5^xsPRHGYw)^ zjAS3E<<1i0`D8!@;S_sVJ2p2bvvSFMxqMWpi~i;nP@{c%uQcZj1=|E_Ojq&mucIvZ zk?maz+P-Ia24zg-?;oN(TR%Zx8HYT$?6?RIlvcVi~^b7wNz_JDxWi< z6f(y4&yQX?;RqzV-CZhna8#Kvm6LcRmJ@+zlIRH>7TO!{?jl1d4>-nB-y?Gk3H&77 z@OdPC=a{r{JjHxZ&fxy=rrV{_eW@G6j~iT%zLDd4iKB{MqdZ+Aev0gKW>5c!Khy|Y z2;J{ZhfMKY?Nc>#d3m)(Ax+m=-9xQ^Ih4Ym!gzf2B^DGVVRjjTzb^z$0JjG zl#-L{@od^t(=w$ataBMNF0e_jwzRBY{`Hc!4joVoW$(gN7nAdy5&`xFL(T;iw&ICab4~I6EzxaLcc5tu;H1_i4No&PXB0suu5s_TiKsEoif%C=YRH8?$ z$O_f8mdyUI0=AQfY?v+8r(cBGdVAz9Dkq+VuKwUU8b~XOX}m^J6z;x#H0;SJavI{t zjTy}@`NvzB;EVlNtHyWwdY`uWaak^&BHBuBLL|VeDvZZlhQ+&m?PfFXulT>UzgtF`NoYf33;K*8&wZ8Y*$M3A(6l?K1&Yo~qu(oDU ztZZSIMptoiipq`N8?yAvj~W%1Y_-jg5~dvh`;8!MrC)y>CEjD*B;%PExE^wY$?J^4 zjq$)v?2_Yv0>R>+1N8(b1_ervw+0PfNNG0RInw6Sa9@(U-yhkQJpa)mgGhTo%DMIQv0q~DD9ce-@9Ar1$*566Rn^c3Coqs4Lck#(Cr?s-QlJMO$U z`_U6L&2G^b=dCLo@o|O8+_v-^dMW;}Dn0_O1?fDmv**4nZfEkoP^-u8S2WoeOx{PF zu9RD3h6yDCNkx?Nt8b~YBYh^LCdBeAdmf`DJwv>TnI{e_<(>{Xc%XB)U@k=L&e!N@ zuO`QRm=aaK^ZE`{;F$V*VIcFuLIbA_uZx{+aLU6!4LKsbC|}e+REYK>q08f%T{T>) zDdY+&(&KuQk`hZO*)VFK)n-5X)%E!J`0X8~#$svxHV<|+T7`xaN9q?geFZ{pj^@T< zj$USyx|EF%>=`RO&ijg8|1=m);(UEOWS#L~ozI-`n96tCZ{CG7215|E>=!Ds8$Vr7 z-yUSnu^ytg8xbG+6^!5GL*_J)XWosv%OqHwoC9ltbc5U z+iSM!?Z6AE%U{iynJDDUS?Fy#bBfbbR!)X4dUq>P;i=8sz%_4fXuf+#qZADh>0uL_ zqnZBj?xf=j(6Moljj(E`BiwyI)%Rnl&vok7k#>fu3)R;B$rfTP!Zk;M0RdX5-Cdan z1J$lAm!C~|)=!$6W4q(ox~+Q*+3y8gOlr)YHkf`X_WJvPVF+Q67BqzyGdU9Yx>+^w zy&{NzDZZRI;|QjN$J)5>2sFH{TglK4*lwP{-DOZY+UFQZAlcEv+nr!!Vs$Ht)$rqo zZ*7}g)l>$p{>pjmh`KF;)ZBr-%&4cq3tb;bs{tEG4ftS)pxA9b>25h{>nMB4%bya; z_n-64?8f^x2d0$NheJu&2(u`zGX81@e|;w{#p8D1J7&F2RjBW?+LpRXdGP<}y7F)+ z`|tgXJ%rxMz9es?lzm@IwhATtUNRD)*E04Ym6AwGWUDA;&(2^*L^5_`A4_C6V;_u} z`F-Z?{r>rz>l$5G%rnpP+0Hrlx$kp8Oqh#CBSqGDr;;#6CI$11Lcz{v`7Kn{sW+H5 zfPtpGR1n;eqPUekR!Yjg-1D(8i=^*LqoNR?JXHF^pTsrA3 z9kq#SL@HQmez^QB3HCt1pA-?5tw`m4<5SJxVfqib$v_Vgd3TOLTO`obx39-N`Eh6H zVAGsKn+fu%-P9Q5x~H|x_UUu>F>ha*kXk2})cc)bIp&yUQ4yXZICW8xe16ReL9=I@ zmW5YMI47LZpAyO?Xt==62as@X^`s(SIZ65M;{AA*P0m!vcZ z*2l%JTAkF6Ja>D~0W#aelH-OO0-=TrlNRyDLhWVoJl}3pKO0Q>V^|wEUY97{oOMq5 zx>Frsz-@Htvr2#iMZMcUXzZSeIK-B>z$k= z(z6be|8$)5{hQLee5&XcIzWHESQHhwE#C{(k@OPRo|=b$5H&gqI+tQFNjUy42CCbG z&7lj)Mo_l|v-lu`tQ5{9)r@(FO^L2^)6AV7hb*oZ&Nye3_HScDIEz?F6Tv-t=x8U~& z!a4};He>u@Wn=fKb;JT6A(e86af*r}3gDwmj&L~Qxdt4c*4|lIm?ajiYdN;*6F~Av z9g#481`piv{5<#6Cr6TWbTN`3%?5^JWl-lEEwC}H&g-_s=Je=9F}RQD5i#De~6 z37JfOmj4NJ`^>)W&^+E`gpv3;627_aA9i>xb;-+=>M`^#Ezo?;NY$E3mf@qJQeN$- zWf6)FdAziiko=B4zhOC2Q!MEzd#v3XQZ}m_7WoeglxX(*LKsK{^`o}T+ z*ClJz&fwVtn5J&{g|_?aF5M12o83MCxO&u`nMyQE7F(vk8`L!SBLX8F0%>y6cW75E z1{XjGR$wU7mfuc(QdBB$$RQpah!q;AxZub!Z4BM4S(hvACq=>+Wb_dG-xHG}Cq$7$ zYAI>4A2V#{u3(+=iq zi4nvOeX;#(KwFT0sN0E1$@aP57sI7-2P>ZeXjJ+b7ZX_2h@Xh`w%3_Yb)=tBMlj$< zAI$v%ZSGTl^-Fc*m!FPz2yBy2mBRxdkAS>{rV))Kl*?5Q7piUYJ3<6am$|EWXUF{e z0=v~woM;+{%VF_)_!;vj@_$`C(OQ#HacbuJ4Xr%J?nB}kHez1v^V&MCyD}Eq316s5 zD9&I*w&|=d8Pyy6{4*n%g1q3a=a18zmI)q^Z`Ra%Gxn-9l&>4yVO9vgKZ=idk!1C= z%^&=MCbxdF^zP#ENw_#8gd`6gcSMq1RDXxG2IX?5M!xfS$>EOoB;m8YOs5R{mMF~d z9WO;xD|V2q8eV_mw)P%?mF3oq5H!{`Sp@oUaADf&g&}m26YLS;enQ@PNn2KqAgOz? z!|cq^;Jg!Ai?d{C7BP9aaXmBf`+R-4-Ofx&$(c7YPV!!9ZMOXJk`-L06p{Yws|K`c*D#7nsSvW`OUvH((!@yL0(^;sHUZUl|bbjGqd z{=mqikp@wM^OKSM>(#%rc)m@@w<6^#X{sca^J0O8UouE}IQjGG-_%PAS~d1ZC} zZpDv5-Dw-is(-sEj+`auSpQtM_u3xXRzMv$xL}v^ zkjLkqk{}-=I*2rx+(+>!(tD6r6hsnZtbP%Zpp062e8%rHnhZ&G?dOne5TY=Pj~!tDWClK>JGQ12$cHVwUy2`LV>y^ zdY7ZanWYUv>R5|q-yI4U*`20y4krw(zEJV=a(&&)zjNESZ+8=OBSx}e_MLMX9yH?h z2Z4Y?x<(Jwu&W>1=>{WbNsB6&i|T($1=e7HwK{XdfC z#bprW{C)PBY^40dwOE0yp=jL}el%PC&6nn3I3;UJ+s0*!>jS1EDp%`6aTLVPXLaF@ zPp%)3{_%%>kH2KLY<(c>w0nPo_95}+rm$PXN}bDk-ZHX$y-3FNW!k-Yf@bQ7wdEqs z>Fm6U29I7|tB_?F(F>r{fy;xh#UHv9+J61@4C8x|Er+x>6jqaWK$ULgU(()#4>AGr z0lJR-8XnYu(oGzAT$>kqRg+TR_-UyjjABaGK#B6<8`}D)fdcwN+&;71_h(z`wU1W! zCJKdQ>|`_+Ty!PfQ`uK{)2>>+{ZoPVXIEk2-+Mu}y%CnM%~D+=h~FSXOIGfnK0^ zXKxspqi<>D9Ofyenj2JSo&zLQ2pD_4&k32yeNTzz9)Sq?wSd0J;{B?9;Tej=k!Z~* zZrFSllDbE&MpN!Rc;7wjjPv+N>&^_%DDmj`640e5xoC`Qivm}vHz_o8NfckCilfNI z8jnw`UnB?6MK*&{(;lE-^Jlk)n+n{V;@Hc_i|>*#IPY(1I#&13`IEZk)`OstQpJi5 z^g4O-`J3Tx+J-iAUth&iKRBq!8KLS@Kb3>H_pN|-*cAX!%)|L%ACUt~$c80d=cIlhtebF>SdQU^*PK1l zTvN-{N3hYy2|5lVrRhSdLf2VNe7*Z9(z2;xKYHfVhv$(8pJx(u+CsZaSaF$(t}{CI z5r=0cPo>AC4M5P8HZg>o-jbL;D|Eb68*?OA)zU$+^6uu58V)r#km{}JHDJ+a+ZI|? zr+q(IFw*@A#MMJacMCR%xhCxkR(oI7JY8t*81?v!akb2yu;!A8RWC}LE>)g>y@uQ% zBr6Ohx6@KgJ~%h!I2AC3h^M?Am>1Fj`qW<_*y*+buHd1^x^5KQ{G)TK^&!j4`=Q6n zwW4kiwsFWJJ)KLKu1 zmL`s4->V`tW~QCH6~B5n=S;~E5hd8%++3rnt*uQ{D4%5H+u7Nnmi69oYycVA$p&cX zpR;S{5a@4s+9mseQK4aX%TL8N7ovBztsLGj5y{2|cf@81Xw~xG!0;+#fIS`ja&%Qp z(?U2UdOwC&ga)rQvC?%0{-80^8+vPkd63p?kCKSiH!h&vcz&9xk7x)hVC(g3*{rXarst- zjYGl^zDO0-!T{D48{&|{^T+0vbtya#R-&RSKZtF?v%L|yIXX$Hl)2pYFmL|h9ZgOf zVKf$DIR?3Irpx&H3`s~7y@AQSmWcxOdYGdC+l6@r^znH?RclOIG^LI;f6k&AS}cX4 z1eYuspyp=JBlqiIP@mVP*wt0j@??9jq7{H=4~T8vMYW6>C)3(l1nn{6=-uzKgAsro zGY=Zgj30aa!_kcTzTZFS2F(cRHrViuX70NBne1Uk8PkP>wJ9 zZ0jzgBAMe0G+mCTJk2f2lc-_}h`<+z=&{GIT>80nJjoOrUkz#Pd`)x*T~=mI%tI|A z>Wk9$X1nue;`t}RfNZ;Y@IY)=iQHp}{4zdMuRFKc1*oPZXn#tyC< zT)G`mz(U+#WJPZWh2fLAcRaMV49W*7i-Rbi*$OeS_U&qya`mfJe+!SCFh-EM9x!Q6jw!zrgFp}3Z0v1wnqxkDyEBoX$~crZqMW-Ag{6(e?Z2&i7OI~& z6OEEpEudc zaM7-Hk~gF-z~SqkiL}-q8W6=Q3}bSi#8*o$iKavmlNfBbX=+zY#_VtPkf9Jxunp}C=-}*&?;ma?({fBK_eAAm}(PhJU zL;xvMpmyKIvS1HSM4a?f^s{E0E~UHpu@eA|qOP}U(375z(kPE#;YqrLNXai4;%IR@ z5+!lh2IF?5G%)_Yq+RSu|KCWyP^kRQV2OL{@fO7ReWMMn?Dos#jL%Y3gX#l6M=iJ7UGX+nlX8t{%KFNniOY zsae%NT0>oU_M^fvWb*Ur!F)V6OmAXeO(4?$KbCYLT)N-1z= znCF}KFcdTE93H>UcP``3hD(~s8+QNw8VGG zt7}h|s-)!0CJ%0#&Z{dZv(z8|%m~@MsPkCS^HBbE_$m+dxs1vA!hTL)eirJLrNC~_ z(lQbI%bE7I{_X(j4XnC*de1QZ>UZjwRBwm+`8Ix}OQ3RE)e@1gDYdsY;xnQ;R+9Nd z<^|wp(bhRoTViO}kqk=oEZRp5;NCW{F}b7F2?x~+kX^sy{{{} zzdIev?F7m=AApZ${7hZ?@O-&a@3oy9#%**m)oF@g!#LI-(n<0oW#(7u&V;B)-|0CS zNDMyurLy~^MFnj^oj)uch0e0H{i6A3<0L%KU;>{U0m2t$j7?jpqSA5s)||YxHN+#H zgtYd(D2?6y;&vUK*5ClP>4mfm#nw9@JYIW+^7u#RNSaH*Abz`l(vf_F+*z4^@PPU% zuw(^Au7X$Ppkx)xv#uxBVz7~HjtmD)SnF=G>-;sgX|5?Q1T8%cKSeNCEYIt;`n&Wl zYfUVwfajg})uo_iaB}qGReztr=)i+Sr27>Wo~6A>zgM!;)TG2MA}II^xD^)3ul}N( z>(ilFZ|^x^ya0}qCkR1z8s@c$o(gVFI2x=QS zD!lwL_rz3nbQ?pU`DdZdm4_n&1eVpdA1RLuqFmBP1QpY-Yusd;UXs>2=*T_R=J`yX zz%DHRC{HF)KI?`yLSw!_H@kVjf}HrdRpTfs$+_Gl?N|53OShZi*_nu(TEkdTw$-P! z(zFOxHRj#;G^YXWy+nC9q0ywVy4ZoGE-Y;Qll>*NA*_ym{t-V`MAFUq< z;n!bOF*w>$5*i<C7GKz{>{k8~Rw{3gQaRU!B!*48(G4z* zN~8@ou04_s7xBDx%=qZQG>C@Q`{r*Rm=rQ*gv_Ot%MaX~lALP9;^S(Q6hN7E${2e6 z4Z5N_uhKY-imHZMmZ}Dmvkz_q2DWCI%nS%-&x4DT0k1(q4WtlM0*W>ByYZ{{Rq`Wz z)1PwgifKr1WuGuzAWm+l=Edh9@0lYQC5@6Z&Cj%u{QAV+pc%?Ho;8TmGm?h_BIh$- z8HP}0vgZDpx}O}J0i!*U7iA1rcqms_@U4c99I(DvLSDt4b&Dr4C$L1yeV^AU`KcC+ zy~HhiiqR)dUKEz0^V};!({rr%HqF{e;rsg2Co*b?$w9mrlUAYqs*m+qDqjuxk@&-o zwoqrbo5@AbEpQC{UJe*-%tu0G4vNMY?1NMBFl9;;bC~JC*5K_wgR_%dV$NS3i$6)J0&Y^sH=4-k6o_@Jjc{ zO>o~!t$0H_ign`9W+gEFqVsq6$H@wYNAz54^73L?b=IOCLArNU>h{RPZFZV{#Cd^{ z5@+~i<2D~Wr~pMnVpxrn>-V|GZHyflN5?6;(H=>WvP;xfzNENA6D?XyP*k%WdUx^- z*4z57vE|v>yqCpD1%)Zwso}lP9(}*%F}0iFX2!5*Gjr4Rd9D0uo<)pDl0vEq((tic zI*UXMVw_UQ^G%E|*pZ_ZOMs|o{+ZtxB6j5?hCpa6NLz(CEfXCu*MIUBPeeMh!tOGA zb~&JRAJ;krWEKgSY81eO=iSi&&lT5 z4E=M)6@;5KYw!aZ5z(A0$Yg%Y5_7Bl<*CRaCxk!`Io?AnM_x{@r;!K(qmdq2mxlRp z5s7}3`_2GzDy4=Ti!CI;LO4BrcOn)J2;TFAN#$}He_(uv$sVNJk8A%-IJP zo6y#l+I2C?LypZrt~Rc3AHtc-7x+ZpdNUF1zm1xi1TufA$QsSq%5~_asqTMRt!FyOBnlOt3WfV9J@jo(XwG{a*G#ZqK2s?o=x7l@G&~>hvaDlNwae$ zd`d-;>}4e)7RB!dg%rRI4N{=IinolVE`@vTsu%CFs5 zmc9;!Q9S~Gqg8Hs!ZnWWeK^f~5|S%A%Eiekb81@+{YdFT1Fu@JtE+2+-VYL*76J1A z6*s3Ma;^GS3%ZE}B2i3q{+Lic zcCnD8jxUEQt)1#SLzFNs*oX*VI2uSp=zs`jojgg)x^lku;nI%3RA?8!PmxYt|E%O0 zi_eK)kOS5MB=sW6O<8cojt4l$gxh< zNo?hia|bA;<>=_w#Ox(oxA4I#d$&bua0QeHR?Hu!jSe*iwUERPrdZV%a|enW0QcX8 zvSd@8piA8qw|H@@kGbv)mm_0+F77Tq0BEy|Da~S3xl3`O&xKOeK>M=b_AAZ|m{^cT z3)MPoF}Wt6{co{@$Ex)=8(^s;$KgTDYaWKyAK%paPkko3u#97VoY3thXqIWtm+;l<4Rn436U-ri=hcsX8O=HSc=8$}sF15OW2&3qbxXds*O{ko39tMd& zd_R&uDWT92K43I{NyjiTY_PM2Z3;kK3y|LJp!~C4H7}Py1+kw^tYTQY&cWCdgv+zT zg>@9P@zJCs$QAU)>xzhA5+30JiY?A ziI5EN76vjwWqjC6oRCarZ#_HEhrir~9WVxSttHoLB*w1^Pl=6^WlxsvU5`V1 zUxIse)k>!i-tCC@g5uesW4RUEk?^XvZ_y|LyQce>xil6|n5l`otJ0fXKHlO`uul3* z!t`n@g}H9}u}}?oOZtx(1}&tnEnK<@KTBPjNQ(DfL1ZFLS?H7FmM{gmz_=+6TW zszqfp)HB;!h`8y0S;=8koJs3M21|xzsV(jFN~_NpEdBaSjK~{5unp?zpR?^Sb!B8EOKDIRvjY9LgiC?m{i33=|k4=fp1`am&lFN zYBgYXAnQWgCeg5!>yug&!SGX|10WX+P)0Xv9DRGtApu7p;ujqC`!ryryMKK=^YvMq ziNhJ3!WVv8rec@v7$UcEHi$_TPOa>UJlX}^y;V#L2sPT`j-OpvG;tcq$C!vv6Pp$aH~UVOz_JD9HB`NtInOt0o*VW|q;85g$F zSa=t6K$qV2fb#6<_jEsH+^_ktBWNw-7_p5T2l;e5zWa+#gb(coY?C`LBwJxm&e{|U zOPX$&F;OqxHQI$VqN7aAAEOwKn%}l`y;V?Dwc%CLkOI5_sWDKlaG$P=h*xSCK506T zrM0hq*1B*FOu|1vg69v6yXjp{con-T*IZ^=<`luplK zG+@F^lvNDJ4f3zwf0Y(-uc}Mc&dMe#>>^uYf;?5~i)QP_o@g6jU3?oR!U2I+zo@{%dY(YDyksl?Mv_G>{X2=-6`of|evXMXzK|QL$&!nPv7*Q@i~xKmVKJi_FLsH2zah?Y!FP)YhaHFp zcQX_oR0o<~Lpz$aSash9|Q4Qd7(_Qa9Dhb_9xBV%y zE?uCdbAKc4zdXdolX=UtG!F*Z+@o@KT=l{W0{r~Jra*JH99R;D?*XTk@)j5l>U=Jx zKXIhTR>d-!41Oa*qfF8|M=QNT4rau%VZO{v0mfCx0IP;gvQUSx z=f#$TaSxHI7ClQLm z;K>j8%?1c_+h#aA=oFbQk~;tiuvuyI5Oz>VLIh+NRu9n@peR(eRGz$H+y~drx5|LZ zb&uX7j}GC3ZRme6grp3G&KG3s3Isx~A0C9^%>}k2KudSEmnOUtT3|4Z!d=X%=4#VS zT-sYb+mf``&KBuqy(53w1%}D?(331`;2lg^cG3Nk!ZXugM)w&)whLT3f#&nVJCUg2 z?5^4DC4a6J*6@^9>X^m6?8b?80>~biD;*m#P8~5Hr>J6tjK2#IjXaQ%h={1n=xRn^ z1j#sW_Z>o8rF2?D%q(AGUCKiBLAmNDl?&T<1KFlkF}}P(O6e*^2OZ(POxM8noP&dy zR~wf_pcA3!E{!9IwiHEsr1LTq=4QnVkHN+x%i20N!!KWWe!c2e=or7D8Yl{)8h|+Q zk&@_sKTsE}u#@zFc4LY$x#wnn0R0fn~Fn^qh)kzgm=Fq`i)2*p>E+#HZl;2J#IgoX z;dG!jyWKGJ<5L^95e_G^B%D0{_JFzcuRDF7ifYzj&0l>=q$o7d=9(&`Hjd@O&C<_0 zaM;P8WOQYRMd@7@N(6V92df@J#8-#vCehuy`t2g$%!Qj{$vbkyZl>hTeS4sSGGW2I zvPxcZHni$0iCgPThnK6*t>ShCb6?Y>7_)C5$ixcoicMvKgKhGqMU#UVVB^kj+utUn zj;KcY){u2D%~4^D+)|a19ak zCdLLW6V4IX>O(ej%U+(9_KJs~tBX%@v!Se0WK0&W(*{Nc$L+XE_Jt@=L^46SQFxcz zqH>3voL@;Qo929oj~0Ufeh>2ika{?x?9mbT{%clq=wbXDSXeTZ2B>#OOBpkRLSir? zxs$Q4aU`!O^xKhpo7z6Wp#UyL{nIMw>aini99!~PJHg8)$O7Em$xHT?8F9QfI2is# zNumAxL?g@UZL@0}u4g2L`+vSZYZR_4C-(wIgaBdexzbmn+pkatYi&X#ZnKMlt2jaG z-{(7-{^W=NsDchRNiBS>D`NHosHgu{ zuaV*sb=|s;)ec!E7LAtM>HeERmjV=u3f58YiU)Lr9>XR9>uUt0q~MD${(P^(8$d?# zY1p==9?a`1YH49Nes_qdWm_^wx^XcKB-3cHt`d&b!`ykb1khty54fm6Qk%m#&yd%X zW}6sjy1lN$;HdijTSPOa5hE7;erYBVcdwa#V!{@dmxU-9o3?133wC&&TYXgE&lLY{ zML_!x>`M3@_S;k|0$h99w9%BuUt5;cI;B7;u>xW*MXih{|Gu!XfH(?j5hc+rgjIoc z(!4so`(>0{^c#jZ42Wcl#Tmo3>p=WcAvpOJ|9Vju@Xh_3m_5&Kf(|Qo4WY_bUS$%| zQVhBhR`O!`2{)!uW}3AXq`^B$ls zWpL&W7paMTCGBUvO_-EZPd>jW!!vfE^#?3drf- z=|PjI-w{u-y;e&~L!r*&Hv2E=g%8i5-QhN!Rtgb`EN{NmeurPgpPf!Ve(`Pf1RybhDv!u%S>zsv3y|Hng|A#U68SErvwmn| zJpr)>Y5+a~2UA(ls=eq=X>2b@*MOqbunnzwP~B*X8@bDz2;Y zcLAu6FdrYha!4uz%Jq&xG;U@tXRSSyDh1-w(p%rzLCaM^D!3rMq0Dp5#yqXx(w#si zT)GEFAqzZoBmUlBQrrFk2b0b5vgrR*7;eMdz$@cnYZqz z5$}J%qx}Q)8ZH55K>~ed$6dc!HtbZExC7()@0fuZ zRe@1oWgPBEO$?Zi*4zIsts)ure7p;QY{G?)WYU3LYDqXa$NeY0&P2-Wikk zoPEn%Wv?30Z3h4%I$xWc1rI!TMW1BaK7XO7R--y_}n#rpK$-Qykpsh{2K_L53$ zyRNs+kodm?=^)Gu(XB9eRYB~~pKbQU8}_QJ{`UyWaNRQb!qi|fk=XnL)1w<5=&zjG z#2DnPqm-fhkBRKF`6c1x->*(R97A`SzCrH?guie5vwRiOk3lb(6$3C0&cY{&lXZyq zMiw1VFf$6jmCNW&!<(V+Z!>Tk|NFhS2k&r1$vkg6Zt;llOUsn}?JP@ozwDZdaU9waz=pzFZlzHyHPV6)hse zP-9;FjTZ5Sui0Ny;oq@N+RK43a~`qMI*qXdf__?KmSSe?44g0$)am)$NA!3SvhciG z;POVR%NXAfhxdQS)palm?Fts9?^taOrFcr=;;hP9{CoR{r&|+O*VQw&%LV^DV3is> z^dn%~N~{6%lUcNbt?0*V+D@8~?mtInsVrLO>xTLnse0yanJ@c_gcWG5)_IcwV~%u* z19;tTJPnnGyT#Id4@SHFOC{>Ygo`fUxIjLd&|Z)K>+99p zL%Pi8vuM}OV&L14o9!TNL}{6S!9kKr8_=z zxrC!eDTaK0Hu%r&sqp5*PN;jnMhZxGBITujBR{mG84IH3G7^09<5^2WXBw(lYXX!# zE**SI6D^Y(3uX}hb3^?fIia-kj8)>5ERI)xGTE+~L9pTcCe|o~?)r+54Q(|l(!&^s=*xearIKk{ERa&-RbF}8!s|hsMlVmM3#^I;y&zQRkvf@?S7zx|$ zgD})Y*!#Bs_MQB2p#oGt5-tEIZpe&9f5623;^Lm}e_ukxJ`x=>EIeVltD2kmY6%_u zpiS9WgprW7R|@ZPC1&`UgF_NBWIRs1+)K*ZTP4+14N*Lk~1{% zR-KD-iZL<{K5((8opW68^X6L~iOxuRKLK~hFdX!t?fgxNL(l+2)w$ADOaG&winl=& z1N86xmDvr;R6)CSfh0G-wP4pY54)1%24dn{wRW_ey66zzL2C4cy6qRa=>Kc^z3$ey>;B8V^Qj0%TYQ*1Rni4fUdSn zia~2-;bpk1riD?|;p@*|J%+Ckd9i7 zklhZKs>9`+`763j2n4HCD;6r_#J)TI*&cTBwSa4BIXCBuD}_?s*}4Y{ zzq24hpelJOHQoW$AxAU_oU@ogr%6)jG^A%{Kaz+e*#)LsW#?^ZDzvm1F#NYuVOUS- zL>+15t#T~SH{@U66wY>F(>slfNHGsae8Yp)Y<+z*c8%T2wUDPvwF$QIJas`zsUNu! zT80uGP>}0#kr?|`O^64tFZYblC`8EHU0c&hnQ!XY`0AWuzRknM0q00#nPino|2DHJ ztrMx0Bv4=cXC@S?=L%V(P((eu$TwM8h@LxJ$@9-&r4vaXPItu<%(DrzlX%9c=9q?& z@wg9iu|d=5r3;zeb}ZtlDA}9AyS)&Xq}z!Zd>t+;Z2PHD&Xcv^9x@nE?3J?BHB)=ikI(Pu4H@cCI@#1;;e%aY zoSy{tr}dv>Bk6fl1{37%w{{}#S0urwhGfh3J|F9=mxxl8b65h4a@afaPJSCVg(6?4 zJBB5gr!ZfXyVbH>fwWKzRcsz#x8@jsZhh94jRc!e|LtX8@p&z9nVLL3ZSGq2K&C^c zJ4~zl28&+&W4q?g`1kKUzz*%sT2hCbxN#+ln2--_VATvmNs{e4IL6A$Eg0^$Y;qeo?A<`>>h9~_9O=%HieIhPLRQJ*- z$^{vp^`?Z$hpAY~bk`R~fLJ^fel#lj9C&f)^o_FRKu6Gvyel=2L}ULvf%n^jlTpj# zSgcIt^fUR7b2bH=EWvhg&!-b73FajDW*eY0$W|G;jX(W(&Pi~lE-1t=aIV18M`mjnizb2<#q`5>HY4ZA-);+H`^l;qU+4E z9UiH6C#>2_7=;$?p(XDa9y!vnhqnCsN5|2@10+zYgIpy91VNsOw8CXgN~FMW@+lx24@BTUSMp8RXAj~*T7b_ZL_x5!9O*@t%Ym{mB zqp0+>^zBr;>7qdiyT$`VFXiu;lDBqYCxuGt?tWdZTMnAI6CS076fGM33nRb$l|Saq zN4u2T@55<_q2Y~N*}??k0knY<{Oq+%hw()7vA(xv~Z*36-Avl~s;AJ3WS^vg&_VYdz^_SIdeZZf6XH8kQX3yb7j<%{M^vf;CiS%o|OL*S;`;dVOLsFGO5+t zlhqR&^?hMA;2_}d0tHw`K>RUo<9Wpne^SL=;%z&VpZtD`&zx~wCz#4Dt4}EY5XO%8 zJL+~UMP1ylJG~SXV|q*GKFwu$RXd>Ac}!sRPkdl;0X-VQZzuFC8&hYezM1EfT5wKk zbN(KxK3ny3Jnq{f z6Zeu^-D~%)52qVskfle=ssEWT4rLDk2T|VfB2iTZ%QQys+Q7WJ&ni@zE<|tofK|ebf^A%|`*Ip9(c$pO;u|DOwhv zE@;@;X%tyYDZWERxguKiQfhH_EOH-KUGPiYcnLyp*-G2ngJ*vZu+}?fiVzfzuQLi| zo0NR`y=B;g5UmxP$Xp%89&(*b6?-`uFGA?7!cJAi}*z4D;g4gl>o0ma%Ui$0m zWCk2e^algvJ6v7U_;ZnDr3TTK$r=g-Ukcz}2X-mD}78qpUKS>$(?vCPaIzdP*X?cB-Pz zik1kwi28sR~BfXbqf zrvZ>eMzRqIw)=t?*Fu>=1L+elsyGAU)<4cXx)yOWbCm^e04-yq37ik^K8qfD#ImeS zb5dqmiqc0ZzYF`RCHE{5~ z8ql{?z)tJ23Pf`;1n|vrh~E?P%PU@*ES8!|sJ73XPmnp8S_QN8q^+K3T&%a|yJ^wRwqR)*1nSFhog3m-A2 z>tQ3c5f$i?S(lwpKrpc4W|pi%mlt7(%}{PM%BuQfJ~fa-4^u!q*IJSJ&dVx0$-{WQ zkP)`%OtK6pjpMO3vzx0y<5*b;if>B3{5OCBSWh90?J<|XTjw3v)Cp;AwnId7Zojr0 zW9TC{2pUdkPzdB1<6sl)v(0Le*-VKd+tMnt=tZg5=z^T6kH3&Upni5iAGty1tIU=8 z&s|qu6I?v_)dsqKhqy7E9sW|Syz(icGqTOUzRRX{4E=8_=SyNC{(ra);+uvF4>_kK zck!<^H68V=bk<8@KB1QS{m$x7@|VCYyCEHNP(G5)I&V0PO^3;cJibtp**fV#B{ZoJ1pvPnEC&L4 zSf7hXj#DNY1&>PWy<;i$G!sX${5UyQuo+lMdf{Md&jXwniL&FEhaCU^%6w}u>3d7*}iJOFX3SS)Ml4yHC1F?8oCVSzK+CL@Bx0v zioRe>*#3CdvRmd!m=7-GxlB&J*A(x?r(qnYqc`vCrU9}J5fJWQc-Z;KpO<|28&g$b z&z;*l%s8C%{ykRcxlrNhM&F2tH(g8Sc7N7zRqzZ8RFB)wXxr85*nA;45p&!i_wGC}KF9kFf7=ek-dE$# zYPEi>QDqaiwVTVT(!O-darJqt$Ab~0IYQg{KcS4nTX{yPmlDA{6ZTYIO)1|h*uVS< zDlIJk-5cvU{Kd7PI4vebw+vH`%wa?U`^Lw%SMFi54e9E3yamU1U0o*{9=MqQTIP+A zj?n$<;v(T=bh5j?=#0HrB>~?1L8#%hwL?MWU|3k^Eyop52_PQD^UY%XO^uz8!A;SN zKH|4=yfHzBko%&uJHPE~alLr>bHhbXl-{6n)sgRv1w;M7x_?=4HOVsKXgUq7?G34z zG9~|5Emh#F7>IX#E-qj`mf}v7FE8nu?soofqE0L`L!cO5+%E^w8OFncw}E?@SwXfu z=qfl=Jal}wpglx;#60mFyTrqwX=>e%?2qsCT4b!HDW1Q@Mm=|P1tG(%8H4CYQ@8Ex ztVR*f?%(rPqS~fX@}(a7YL5FX4;Gbue>U@ZdGS4N^sQAv(1#MD?&5M-Zd*;>af8J9 zkW#JgJCzLbg3k>{gRUJjO9`xlQU&BS#4mL#sLCbE1J9SuS^JYtc3N6kmXTMb#mNh7 znME9n<=2_5*kC2gM{=OX_bAurr;{np@6`Q7vUev6>Z$O$G1?STF58~zjmxuNtL+cD)Xz&U>6uN+)SlGPXk7F#fM+Ffo|-Lm9x zAQ`hy);Rkv>U{5)h;gB@_!S5`vV_^Ze$9d*1c_3(tD8R`Mwy zPT6Oly|3%q`xG(p$m|{6oNyZx?0F;t^u@CgJ2CM*bEIhD<%~+2mN#vTqpP&yeTs-z z_=dXVw`OH(+e_4xxEa5BLN7ksp_Q*@;F^|wnc%A=>%V-C6m&g|ER@fK+9~AK6L&}7 zW%?)%AUSAd!mWg^N7y6padve^{{gVXo-UWlgKq1@nDMe#p(zR0*4Sbpc@u0^Jf!%P zYj&lx4d6(U1?)q>Q1}dy@KY8ksm@7ESqQl$IfYODR(Ne=O%fEQtYUHN4%3Ie7=1r$ z_mka+mQv>Qv^(`VyJM-Ietsqf@O7(D-w56S_(_nVA%X=eJ+(ZD-_`S(F0ce6crG>$ zUgKi-As(&PKSR0bz))89xn)sn#uVWjY8J}LzK%7FkK~ZD14Bm1k_9k8+dTwb`{u|Y zPd|`%?7h*+T*R8!&w`4gs{sv`7>*(Mz!RNmb-F*tjGQuc3hi1oW&xB%!-uT2=l{xo zhz>PGKdHv!Rm#?_;PXul67L;&r{mkd3iEG2(4jwmcO~x!4}RxAEI>rNpdS$Qx|x{# zoJEKfYzFA%dUyvgM)=F7g*u?S{NjVaNyM-y=n8>ujzt>w6K!X@ZN&^&(3E$M*&{x` zb_ONe-UqR5O`z1vPBy?xPo3ma4+c`-s?`v_O^lawQ5X1_oL``9;&3^Bfxp=8i1zKO zK5X*D1cdy$$|=sES(vQr%p05e#8+}3r&Mo`oL@yO5=0(d2%KDC9|IJu}qqJ{_FlXYltYNXDGtH`RYbyKo~jYJNzi@A+O%`PduMk%esD;OO#d!(h^hJo0e!=ysslQxXrU6xEHs zn);yKEP;9N-%z{yaUGX?r6ZOIV*xiiQ1CD31=QE&zTSYn4&Ezip*@UV47u9?eMNcR z6rh&LKZA?{-iuYy)JhSKB^j`Fwbf?6w&{jb=tI#-O--kq2omFz8p>nE$AD;H-6#e` zsJS>WY%O8JIXe6kmYsDT%}^}J<})+|1}yhYz0^7E8qjD!U?uuryUHBsjO-whcd^a@ zClZrEI;x`_mp@9*by|a`e-HI&Ru#b5_lmqh0Fv@w*BVkx;NZ!N%EuDBcPk%c0u`F* zZv9f|aPRGB1(Z!(IX7%5YSZpz`$FUby&|&EIJ&=l#|m4xuouDj9&vSarb2S#Bv8ct z`cw11*>n|NMS+3=0cs9ur?xJTj?T*ZA#T=Un1*t_@%^qgf%-M-+A_;W>BZ<2JOpCU z)7^PU)1rga*Of@yUHZOxxLtf~r<+?|?lS;4KWuN$g^`bV4P8W{zt=@bfZimt3qQr; zC}}8_mZ#+$zE!0fklXGzk(~Ln5gstTvY|=k2jzmzoBPyg8ikm zMi+JLUASMG!89^NJkNzEFZ+5;4cG)+3H>l>TBI;- zTG7Ch%T^S-jI!v<#wNFKL zNcuSa6K4u~jF2X!c6vKcyGzb%>-sl7`^E#?FK+w?HkPcvs~Smv~zJ22F439%L0* z-$-dt%8{axKx{Ntiie`itUv4?CToC^8Y^RtaxJ@Gx@*!RG;YhktD2a^hS3DF;Z&?p zHu6z}Y=Jnt{=H)GNj7b9x1`8vEku9dDTKQ);|H)+847!tXsPJF4egjK7pb53K*cb3!+*bzkU#I#dwqR2J<@um?g=v^@ipP z7?a%#aFM)#yXQ<(!|}3O-_aLWqNVp8uaY)D$WNf#8tWTpKSxykYZ$*etilW_ymy5# z3pd2nzrlyq2>MkywV1=Mu9H$}t;wN?i}3N@k|&|mc2(`Xi9;Z3<8sx|Ih`EB%&zJF zkZ-2wz57f?4((BId6t4u@mo2V_K;s{RuSH?paREQ;3x+`mV76iZFD(HC73 zq88AZs6~(o{BPp1S}pBH26yl7&H_x%v@=+lYJUlk^!@X>iSNFB)`vc%UV{#T6^F~q zc@-JTRTB1wYc4vi1zHslBr!mjX7MeOVADjFWMZA>x@f8aPnho#i>OiIvMgT#rT?B2 zRdgaxAHf5Wd2C|UL*i;s*uOJJJiGnQM=pQG(fss1SJ&m(^;&Y3DeT9NYvnBJ@RLuc zyJ)4#rWtmVT60-nYS9;h0e~Ot%p1T!460m_7D9Q`)<6$oH#X?Lgp+$|_vP{T+4)4j0N`oe7ig^tP6Rb4)&k@hS zDy$XzFLY8X2Q*>P(BF=CO_IkGIANL=jT##c!=R4SAcF5P`;S-Uy>m>^s7-s!-#*@& zm;<+y<9);QVqoBEhMIipc1mM8bCS|Id1gc&b`^Mr7ZQ1keJ@+BLG#tfxQDsJ8G**Z zdU?jKIM+aWWXU3b@5Hv7zkn9Oj!o`TmoQijZD(qIvx00 z0>q4q3>_pDUqtq@Wik3Fjq zptr+l==bgOGZJ7KQAw#%-6cwxkg>MVL?f{xehtr@J(=`jwDS zbj-_gt9=`&zHTQB@GQ5sk|ky{w<#q9EN(LoxQoFl^B4A@-mXT=SROrpFntlS#vg&d z$lKZlLD!v;u>$tyb5wR?nWGrZ(DBt)A>9Z$UJQaYBWb_pk05Ie28ax&ojumdX49pq zD^nSarf~3Q^?k!y={gz13p4;S{J?S|M;M!83`FF-EK|`TmkqRu{o7;3doIVoqaT$* zxR`p6jW~}}^)h~SI~6=)AAu%ZMAJ=++H$&6c&A?mBvv^YEO6fMCDGVP%Qe2`V3aH(%nfpDSXU64z7W7|_B0*k{mV@p_}1vBx_shukp^L_`7+;U z23)HGcP*5G6f?89k`iYl{zO{xvR>A(+KtX_goI6^@fznL`W!^Az1#-PoT8P3s}SO- z37TSn6@-Nh`^RG!6nA9N(Q;mBw9vSA-=*q_!-4i{TbXr(=fR4#VIkbi$P|q9GgQOr zrXyyf4oj}Yl3RoL?e{u4r?zlmjMMU(3F@v#DNxor9?$Z`e#7TvP2=mO3;6D-B6x9a z+$zj3_?@Uu$vZtkr>IP5d-phDQ3OHZ#-gV1bx|DTRMAL-p4*rYKa5uHd=h@v z!e~*$IQZ)CAL))6UkV75Wfm6OSQp!w;(3aCTAMsRu03vd=3dEW;BZs;Lh>H$H5NEX z%_XWvNW@=28uC=M55Hkx6*P}f8w9^eo{zA(Sxl50BM&0nfJ*AUx){Z;Or~w}SFf3- zfzH#8gbaRGmWSEXzD+90GDxdyoZMwdy=Fm}50}tVNLY1xhB~DNvZY~EMQv-$ORITq znmj>ec~leBU3boh#curW7F5XflfRKaysSYJ_wPCzIB5b5ZWt?nBSBYY49P3hc{*^Z zKk4b>&cXr`FlqrRidW)AUN*|mWILw9$zy;d%EEN33 z-Uu9h{Y{oJgB%Jt@%OG&OXJ8-#e^44O~)EX49XP;Xj=O%+lBtB{T6(5)cC5r-Zl6dADx@>`o zIps&IA!m(vt(I?9S63r$F|Ayl)CKJ+a~er9=TJ*tl?kmjC`jc4I%G1XWL?GGtCP;; z^x(UFX&B&XiJ_LgmRO&Etpv5J4nmD2MKMH6U8ji-3-pY|$Tla#q5#&g#@4WrqlChh z^l6=GO{%??f_Y6S5j5&{KD?9i@!=Q2NCSz^vFNMhO{Bb>QMpm0h|rDmvMmj#c>#Bw zyVTzP{P4F4VK8glOK^=7M+)vFHN4M_IAc!gQUSybi3_8nA>hU!_;Cot^@worM{+3+ zJQc!9D1j>h15)_#!;aD<{fD~>)2&6e^4NitVFfnC8F|7Cb_p37^-H+8*2QTKz}&|U zJ1CU>=>Uev4!Tyj$mWgeV4@Tfu3$3~L@A@bZo^_sDLXJlG!F`6aVvgLsCa0=CjRY% zn`LMM;iAed4nS29%u0$(Eh2|6&&#!Gz}4el`~o;85M^rRmdJcK+@@t~ZTXo$$omjOMdk{RF)zg8H>=_W)T5*+1U4MsFbLl*Mn74T z+mw1t(jk=|JMpHuLaLh#{cH9q=^fznZWK@$huo3o!=d-}Qu2by_erT}pal~#@5_dm z;tP&(540JpYD2eK`rc&p5#aqgXQbQY=ceF!a@k;{IE-P2C$>PR@HW_x*|^A`i&IIn z=Lg=i`!@UO2yCnERNLjU??s#U@R!FQOZ9&@sb14gTM@qEVMgD2b@Z9Jf*#+4BT;(~Ub4mta#{E?{AlpF-0pKQ({u_xKZqIrW44nKmS z1XowZ5m*L89`GT#x#_ujz#Q(SCQ0EGTEgObaz=1LXXN%Hz$|AkZh!^5J!hA|G#!sB z3BFfDN)-+;6Qk6Gshiyu(YlRR*G&F_u0Ea?g`d3%;FV8purui5Xm^|1;WJz%_7PTG z;Nw$+C6Rf;90Tb;4Rnbl(5Tu>88+&b&7oJ$qxdO2i7!6~*>J<7tr^UH!;5AY8n&Y5$h3cHxr_;I}x6eMVPru-@qR{g=AG3O|M)cZ~w_2=2ECBdw zuG>zl(_EH%?u=DG_2ES3nUcHjM%rrZjy zW3)5)_HCBrJv#MW6Z^xWR2hF6&w{kK91~`{-(jjc*RO`Um$g@1m@Y$TKK>95U^FIl zdQ^Rp=l!fY9$kyW3{nDs!UOrCZ5-v60~Eyp9P8Q>Y-7YV+H|T1A!6 zxNU;rIyd4+RS{q8=!dlOh5)2v*^aX+^K!$62ft|Ta9on!VI|zF&+b|PmGtzsjuOoL z$y)_#VjLMsp3!O8S{Mue>6IfK9XjmdyqRxC?N~AUzKJh&T61@<5564c_HJqlH+1`j zZ;B*Nmu@_7Grs$z08m5@WP!p!lbk>e)lk=uzxPANo9j0!xAfKDLfQSDzm$7O{?Mvr zi@{(0)p3!=u{iGBlN+>*75do1$DxJlIOK3+Rf(~6;gr5&K^a8R8pWOZg84Dic3aUO zcICYQ#VD+S;$b+yBITBOaCss~#3RT5_4tT; z_B#GU5X39&&jab(W|=2r+#h+*Wxyd?O(SR9!_Pnmn zMYF47>tux`D^-osJ3(`A!|`6>15 z7<17QlL85&AaiXCwe_`yCViLfW%}+`v5n$7yA>{T;)V|RMmy`)wcJkJCF`_0nRi_RLmQJ5oISiVc zFYezcb2ST-I{!4$GLEvfGB-x|hrmJ+-{_H$!OK;;@}(Nf#@0DNF%)S94AO^d;N`az_wRcScUmUD{Q4ghj z88$Ytje8$CRG06hT?EXudcs#H*wg-tVg56 zu^Cv@Q&By6fL|+Nhq$$_z98xRGQa_9%8OUjxyjHF$&R2#IZeRE$G}MoTL!4#GHaYH z8V5%M%iXLF&eVKnKga}{eC&1=ehG$7NQm62MFAl|ol*Hmn9kMJyiZR z7c~zogEcmeq|@0a2q{A_Njj#?b^e%ZYw}+rfLk$mj>M^51f_M7>_~ZXUV{M@6Gql9 zx0uj)(P~ouMr_bl_J0K>?JwZvVXQ*&_nOB-VPxP*7&DL6)k*?e-`xz%V4%&hbwCEi z()%$n-hHvfQxJ$2#BrZ$8=QGV=q)tb8R))hi{;aTYuOYqVCx!K`u(f!-6hLH74((Vgc@}58!esruyQfWD^*c(n|eR->*$v%E6vM)X19xYqHNdh@*>#ut} z)Rp1S-Gu+TGQ*(1z(CeTLeMYQE`3D~{?`1`ck&7}^K zfb`L$Eq=FBmLK6~MczW4Z3>rof_lI~VWrBYl={Gbq7>c$T=Z6&9%t>3x^%?WamERT z7`e(-yv7mF9!&Wvqei{pR(V@D`RfR}nxHEafEvkzYKydvRte}i^V1CUWL8dz9=mdnSvTwx#MQZ3oz54!kLv}&32A=?27>36;sOa1v6m6(!XB`Tq@e^ z&($DbHt?+2e$h^F2<-144iiSzJx>B6RB1*;)HWnoPi&y;S{EZpp>QpKZSQYB^k!+B7wBM?0`+I|-9_)C<(E5;wW?uM>zrK~Xa?r`&1 zvGDk98}akVp$Y@t#H4Qj?>~a0Z{cUZ*jB~8&XRD&61slgq0euAxHSBYK7^ZLCYQLl zwH8^7mEx8zqrP{3YvZC4JcCl;wq01%o`q;`#%bq0C zJ5uQ?nha99)JQGYKX&DP&|dLC>pKiDBlCE;3TT^pG^`>;(hSo(tUHB@;EXW3 zY5kQk6JU95EwE;T{+U-RI5gW zg*x0XX^89h6Ml>CW?Rly9X{}w0zv8E-rGklYKPU$xIB;ooFsTe)HMq5x<%0 zo1fTXZL;0bC#K}uDlX2W_!yR{>M3tmq1(yo&Y_$3M2myqvApXBHwIa0mf~uOk9{JV zJu}f3jmr}HI>E^}eXjS{PQv`r$>-`Rpow8tv{e?@my1^h_XusV*ksPvODjitSR|c5 zohBiZj2l|>z6ttP8-c>UBcHi7R`h~X<4MR@@q%k%N~fTQ^)N-fWJqS zXj|9JS&V=zu|fdLC<3(V(VGorxuau66n}n;z*mbUxO3m={6$qv7`_oKcyK**+xnda zK$>%(l9G&N*~?Fkq3N}*;`*CR=KHsUG645PxECJ&xW>u1anR{7^^Y6S)Ej{IjJPt`xa2moh_$hEE2KF>4*0K-Sd{$Qod@Bv6gzNyyqw6yndr5swb!&`Tzg8;kNhdcu@04TU`*3 zUV5x{mmv!L?1zl*HUlE!aIno6{QAHk&13_Eo$2_uMY9gDguX5%h6;xQ=ff`s34PSl zw%BGqwC+Z4Z>65d{?s1&b)MZ+!hl@GMIbR#=rN~MZcbf}J8IM`yd3yhO+mB+^yifW z?UUq(lQ^(7*`PU_wDa(N_>+(4t|NtI1)Y(?5xik`;ym8}X^sKRj+FI~(UVd(#C11( z!zb`8@fUjKRMQ_n>_A@)S$>kO2dVh}w*BAl|K=5V+C9M*F%ma2rrEETf`HFeGs{cm IrtbIu2PQs=-v9sr literal 0 HcmV?d00001 diff --git a/electrum/gui/kivy/theming/light.atlas b/electrum/gui/kivy/theming/light.atlas new file mode 100644 index 000000000..acae07b06 --- /dev/null +++ b/electrum/gui/kivy/theming/light.atlas @@ -0,0 +1 @@ +{"light-0.png": {"electrum_icon640": [2, 702, 320, 320], "nfc_stage_one": [324, 900, 489, 122], "nfc_clock": [2, 460, 243, 240], "stepper_full": [324, 781, 392, 117], "stepper_left": [247, 583, 392, 117], "stepper_restore_password": [247, 464, 392, 117], "stepper_restore_seed": [2, 341, 392, 117], "qrcode": [2, 194, 145, 145], "manualentry": [149, 205, 145, 134], "gear": [2, 33, 105, 159], "calculator": [296, 211, 128, 128], "save": [426, 211, 128, 128], "share": [556, 211, 128, 128], "star_big_inactive": [686, 211, 128, 128], "nfc_phone": [816, 213, 128, 126], "logo": [815, 906, 128, 116], "error": [718, 784, 128, 114], "textinput_active": [848, 784, 114, 114], "close": [641, 612, 88, 88], "important": [731, 612, 88, 88], "paste_icon": [945, 945, 75, 77], "globe": [946, 267, 72, 72], "camera": [821, 636, 64, 64], "carousel_deselected": [887, 636, 64, 64], "carousel_selected": [953, 636, 64, 64], "clock1": [641, 517, 64, 64], "clock2": [707, 517, 64, 64], "clock3": [773, 517, 64, 64], "clock4": [839, 517, 64, 64], "clock5": [905, 517, 64, 64], "confirmed": [324, 715, 64, 64], "contact_overlay": [390, 715, 64, 64], "icon_border": [456, 715, 64, 64], "info": [522, 715, 64, 64], "logo_atom_dull": [588, 715, 64, 64], "nfc": [654, 715, 64, 64], "pen": [720, 715, 64, 64], "shadow": [786, 715, 64, 64], "tab": [852, 715, 64, 64], "unconfirmed": [918, 715, 64, 64], "mail_icon": [396, 404, 65, 54], "settings": [964, 834, 54, 64], "card": [946, 216, 64, 49], "tab_disabled": [641, 483, 96, 32], "tab_strip": [739, 483, 96, 32], "closebutton": [964, 789, 60, 43], "arrow_back": [971, 531, 50, 50], "contact": [463, 409, 49, 49], "wallets": [514, 418, 60, 40], "network": [396, 354, 48, 48], "bit_logo": [109, 141, 44, 51], "add_contact": [446, 359, 51, 43], "wallet": [155, 148, 49, 44], "btn_create_account": [945, 911, 64, 32], "action_group_dark": [984, 731, 33, 48], "action_group_light": [109, 91, 33, 48], "action_bar": [576, 422, 36, 36], "card_btn": [837, 483, 38, 32], "btn_create_act_disabled": [877, 483, 32, 32], "tab_btn": [911, 483, 32, 32], "tab_btn_disabled": [945, 483, 32, 32], "tab_btn_pressed": [979, 483, 32, 32], "dropdown_background": [614, 423, 29, 35], "overflow_background": [645, 423, 29, 35], "blue_bg_round_rb": [821, 614, 31, 20], "lightblue_bg_round_lb": [854, 614, 31, 20], "white_bg_round_top": [887, 614, 31, 20], "card_bottom": [920, 618, 32, 16], "card_top": [954, 618, 32, 16], "dialog": [641, 590, 18, 20], "btn_send_address": [988, 619, 18, 15], "btn_send_nfc": [641, 466, 18, 15], "create_act_text": [984, 719, 22, 10], "create_act_text_active": [971, 519, 22, 10], "action_button_group": [1008, 719, 16, 10], "overflow_btn_dn": [1008, 624, 16, 10], "shadow_right": [641, 583, 32, 5], "btn_nfc": [1011, 931, 13, 12]}} \ No newline at end of file From 573760daf009192e02706527bf6c1ce514c8010b Mon Sep 17 00:00:00 2001 From: Janus Date: Thu, 6 Sep 2018 17:25:11 +0200 Subject: [PATCH 29/76] remove generated kivy theming --- electrum/gui/kivy/theming/light-0.png | Bin 480803 -> 0 bytes electrum/gui/kivy/theming/light.atlas | 1 - 2 files changed, 1 deletion(-) delete mode 100644 electrum/gui/kivy/theming/light-0.png delete mode 100644 electrum/gui/kivy/theming/light.atlas diff --git a/electrum/gui/kivy/theming/light-0.png b/electrum/gui/kivy/theming/light-0.png deleted file mode 100644 index c418938ae505e7c0c6c035f71940164eee06e176..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 480803 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 TCiaS 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

6VNh69Pu4fZ`DU~%(H-jdw)*PcwQ6mfD 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%0AW7%v6h?eUo&YK(~{0K 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 DeC`tS7V&~ zAJ5-I_L6U6X1F{tv23!^w_Bmf7P8%)O$;9GzS5`JeBBkEvbnU2_PefN)N7ptPT4$7 zD=Lx&sr?=TS{@M(-b6fO$0p^$xZdN>@e^$jG&cfaGr5aT`DGsBmP`KTLtH!4VWz1VRT<@cLtKF> zutf#f!e@j}TL}RCy-wABor3#Q_=hnApfgGnL0Q0hgxswxWvi}CI3w4W{hS!ybi%!d zUS)Ix=we`;YRl0I$-8MHjdg7Y+=8cg*DIj2%#)iD}Txz)?A2RN}BE&F4mah)Pp_RhzfHH}Wm7$Oy`Sjx}zw)-fyH zzm_x-b%n5-B)l4%(3lWRNCs}x%guALxc1b@+R5m(TO&99fn5`$X*@9N4XSIX?!-&C`}opHe{7-BO@$mAJWoqCj2kUC-Sqcm9Nld>!w}du zYS`KIJhyX~*uD>D&QmOA9eS3_%xdOjEkfuhjS{0yCWkV5bYrQDzh;iCcrfS^N!|8_ zPDX|hQY43I7Kd-Z%~cxSbV6VDbA`h~=DISrX=DwJ>uA@t$MfG7wy=dQY~lZI?Em(o z=g^tI6nk*sb^U+5zpwwszl1mbCC&1Ccx$`c$T|hQ=btIxe-)!~+P^6QTY%Ra;@e)$ z4i7=oTcoMN(|-Ho!)#n-9J-z)4&P1#Uo5JJ*-=8B0--&jQ4IHL>@dMN9|!kNVR z3#0Ztrs2YGseSU_8jk#Y%{#7u^B%LRC%mA`Lz&(AmEX7IIz*z>BK>`@tEckVEg1r^D~ zqcVzujv=c}7VJhzXI~SfAYukZ**J4G4gxsQ_>U|-q&@^O>5cbUqrahGv&U&hgREUC3t#0*ZZ znqj#r_T{kWOi}C>%d?{LLLM{Q3*Y^0TOhH*w?l-+17?Z~VfQiaOh$MaX^~xPgs$ zR`(0O`Kj=Szex6pYq+RW@SHKBQ5pKCS8{SDCyZr|DcRltPkRjAFM2FR8~E?^Hjh&e zoT3nzw%DI4{BJhopK@K`&XcXs>#6fRb>1nfUc`%Er zfyqZ^wuk$3%DQ>n=9(sM%xjwr$YY$M78R!$n(s}y@nI*qG#8=M5Qh;~W-|um&~vvQ z5%qCvZb8iS>`+S02vkASv|-eu6pXVvT{Z5+CU1qgDM>hqU_n$iC4*697(`zyX!j*#Yb@^soz3 zxg3#WGUQz8yF5(?YqQr!O(yHH+F&w5TK_Q{*H|@jL!!&q;09C$7=n*SaolDG>0;~) z#yq=}_(5TVc;*WHH#F5-99OR*5K&z!R;8K~gSdRfD7@%JmHvv2s($Qwnf82D=I)nw z{Isu;LJ{a>a+p-!B1U@{Q(go^7DQHq6^OaXI#6_ykl#oQgU~24OWF1T*c|6VPD-Pk zxHBEeD$7~ovDsGB2vt^hgl9^Kwp@xkkDEJ=Fery!na!kF(*fs!5I58echU0SU*pJA zZ@C*2wIu82c7HBtwg<|ssw)rrQm-rZ3rw*=zOzIFURjC$3FOc_Lxf8$odw#^0;Wt2 zh9H@wIkRtvc%6pFkLbe?yLljHqKT1Ul#h^B9OEF(dCh&;t3Lk6UW~Kn!DTlCFZ%Q^ zu!SvbVGI9xvH#m|*+X~lPowZ1jEzCv4m{`$gZ&SB{cmynqd#-tZI536JXiB`ia&e< z=p35$f8;O5)c@WL`mH}={f=dtNwoT@^;4ihL;QoEWm~n%B%0DB`_L(Ctv7g#n}Yyu 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