From 45c3643f85ccebc781b81a83d391ed0cc73c79ea Mon Sep 17 00:00:00 2001 From: Yegor Trakhinin Date: Fri, 27 Aug 2021 00:53:14 +0300 Subject: [PATCH 1/3] add support for streaming replication protocol --- Makefile | 8 +- aiopg/__init__.py | 2 + aiopg/connection.py | 854 +++++++++++++- aiopg/utils.py | 12 + requirements.txt | 1 + tests/conftest.py | 121 +- tests/pg_configs/pg_hba.conf | 27 + tests/pg_plugins/10/wal2json.so | Bin 0 -> 163624 bytes tests/pg_plugins/11/wal2json.so | Bin 0 -> 174592 bytes tests/pg_plugins/12/wal2json.so | Bin 0 -> 201912 bytes tests/pg_plugins/13/wal2json.so | Bin 0 -> 208656 bytes tests/pg_plugins/9.6/wal2json.so | Bin 0 -> 161856 bytes tests/test_async_await.py | 40 + tests/test_connection.py | 23 + tests/test_cursor.py | 1841 +++++++++++++++++++++++++++++- 15 files changed, 2914 insertions(+), 15 deletions(-) create mode 100644 tests/pg_configs/pg_hba.conf create mode 100644 tests/pg_plugins/10/wal2json.so create mode 100644 tests/pg_plugins/11/wal2json.so create mode 100644 tests/pg_plugins/12/wal2json.so create mode 100644 tests/pg_plugins/13/wal2json.so create mode 100644 tests/pg_plugins/9.6/wal2json.so diff --git a/Makefile b/Makefile index bdedbf9c..92787e9c 100644 --- a/Makefile +++ b/Makefile @@ -39,17 +39,17 @@ lint: .lint fi test: flake - pytest -q tests + pytest -q tests --no-flaky-report vtest: flake - pytest tests + pytest tests --no-flaky-report cov cover coverage: flake - py.test -svvv -rs --cov=aiopg --cov-report=html --cov-report=term tests + py.test -svvv -rs --cov=aiopg --cov-report=html --cov-report=term tests --no-flaky-report @echo "open file://`pwd`/htmlcov/index.html" cov-ci: flake - py.test -svvv -rs --cov=aiopg --cov-report=term tests --pg_tag all + py.test -svvv -rs --cov=aiopg --cov-report=term tests --pg_tag all --no-flaky-report clean-pip: pip freeze | grep -v "^-e" | xargs pip uninstall -y diff --git a/aiopg/__init__.py b/aiopg/__init__.py index 41d9493b..32214db6 100644 --- a/aiopg/__init__.py +++ b/aiopg/__init__.py @@ -12,6 +12,7 @@ IsolationLevel, ReadCommittedCompiler, RepeatableReadCompiler, + ReplicationMessage, SerializableCompiler, Transaction, connect, @@ -34,6 +35,7 @@ "Connection", "Cursor", "Pool", + "ReplicationMessage", "version", "version_info", "DEFAULT_TIMEOUT", diff --git a/aiopg/connection.py b/aiopg/connection.py index ca32bda0..d21bb717 100755 --- a/aiopg/connection.py +++ b/aiopg/connection.py @@ -4,24 +4,32 @@ import datetime import enum import errno +import functools import platform import select +import selectors import sys import traceback import uuid import warnings import weakref from collections.abc import Mapping -from types import TracebackType +from types import MappingProxyType, TracebackType from typing import ( Any, + AsyncGenerator, Callable, + Coroutine, + Dict, Generator, + Hashable, List, + Literal, Optional, Sequence, Tuple, Type, + Union, cast, ) @@ -34,9 +42,12 @@ ClosableQueue, _ContextManager, create_completed_future, + execute_or_await, get_running_loop, ) +ReplicationSlotType = Union[Literal[87654321], Literal[12345678]] + TIMEOUT = 60.0 # Windows specific error code, not in errno for some reason, and doesnt map @@ -688,11 +699,256 @@ async def copy_expert(self, *args: Any, **kwargs: Any) -> None: "copy_expert cannot be used in asynchronous mode" ) + async def create_replication_slot( + self, + slot_name: str, + slot_type: Optional[ReplicationSlotType] = None, + output_plugin: Optional[str] = None, + timeout: Optional[float] = None, + ) -> None: + """Create a streaming replication slot. + + NOTE: only available with psycopg2's logical or + physical replication connection factories. + + """ + raise psycopg2.ProgrammingError( + "create_replication_slot cannot be used " + "with a non-replication cursor" + ) + + async def drop_replication_slot( + self, + slot_name: str, + timeout: Optional[float] = None, + ) -> None: + """Drop a streaming replication slot. + + NOTE: only available with psycopg2's logical or + physical replication connection factories. + + """ + raise psycopg2.ProgrammingError( + "drop_replication_slot cannot be used " + "with a non-replication cursor" + ) + + async def start_replication( + self, + slot_name: Optional[str] = None, + slot_type: Optional[ReplicationSlotType] = None, + start_lsn: Union[int, str] = 0, + timeline: int = 0, + options: Optional[Dict[Hashable, Any]] = None, + decode: bool = False, + status_interval: float = 10, + timeout: Optional[float] = None, + ) -> None: + """Start replication on the replication connection. + After this, no other commands can be performed on the cursor except + receiving replication messages and sending feedback packets. + + NOTE: only available with psycopg2's logical or + physical replication connection factories. + + """ + raise psycopg2.ProgrammingError( + "start_replication cannot be used with a non-replication cursor" + ) + + async def start_replication_expert( + self, + command: str, + decode: bool = False, + status_interval: float = 10, + timeout: Optional[float] = None, + ) -> None: + """Start replication on the replication connection using the + raw START_REPLICATION command provided by PostgreSQL. + After this, no other commands can be performed on the cursor except + receiving replication messages and sending feedback packets. + + For advanced usage only, in most cases, `start_replication()` + will be sufficient. + + NOTE: only available with psycopg2's logical or + physical replication connection factories. + + """ + raise psycopg2.ProgrammingError( + "start_replication_expert cannot be used with " + "a non-replication cursor" + ) + + async def send_feedback( + self, + write_lsn: int = 0, + flush_lsn: int = 0, + apply_lsn: int = 0, + reply: bool = False, + force: bool = False, + timeout: Optional[float] = None, + ) -> None: + """Report to the server that all messages up to a certain LSN + position have been processed on the client and may be discarded on + the server. + + If the `reply` or `force` parameters are not set, this method + will only update internal psycopg2 structures without sending + the feedback message to the server. + + The feedback message will be automatically sent the next time + `read_message()` is called if `status_interval` timeout is reached + by then. Methods such as `message_stream()` and `consume_stream()` + handle this transparently under the hood without requiring any client + interference. + + NOTE: only available with psycopg2's logical or + physical replication connection factories. + + """ + raise psycopg2.ProgrammingError( + "send_feedback cannot be used with a non-replication cursor" + ) + + async def message_stream( + self, + ) -> AsyncGenerator["ReplicationMessage", None]: + """Keep yielding replication messages received from the server + and also send feedback packets in a timely manner when + the `status_interval` timeout is reached. + + The client must also confirm every yielded and processed message + by calling the `send_feedback()` method on the corresponding + replication cursor (every `ReplicationMessage` instance has a + reference to it). + + NOTE: only available with psycopg2's logical or + physical replication connection factories. + + """ + raise psycopg2.ProgrammingError( + "message_stream cannot be used with a non-replication cursor" + ) + # noinspection PyUnreachableCode + yield + + async def consume_stream( + self, + consumer: Union[ + Callable[["ReplicationMessage"], Coroutine[Any, Any, Any]], + Callable[["ReplicationMessage"], Any], + ], + ) -> None: + """Enter an endless loop reading messages from the server and + passing them to a client-provided `consumer` callback one at a time. + The `consumer` callback can be either a coroutine function + or a callable receiving only one parameter - + a `ReplicationMessage` instance. + Also, send feedback packets in a timely manner when + the `status_interval` timeout is reached. + + The client must also confirm every received and processed message + withinthe callback by calling the `send_feedback()` method + on the corresponding replication cursor (every `ReplicationMessage` + instance has a reference to it). + + In order to make this method break out of the loop and return, + the provided `consumer` callback can throw a + psycopg2.extras.StopReplication exception. + Any unhandled exception will make it break out of the loop as well. + + NOTE: only available with psycopg2's logical or + physical replication connection factories. + + """ + raise psycopg2.ProgrammingError( + "consume_stream cannot be used with a non-replication cursor" + ) + + async def read_message( + self, + timeout: Optional[float] = None, + ) -> Optional["ReplicationMessage"]: + """Try to read the next replication message from the server. + When called, also automatically send feedback packets to the server if + `status_interval` timeout is reached. + + Block until either a message from the server is received, + the feedback status interval is reached, or an optionally provided + timeout has elapsed. In the latter case, return None, otherwise, + return the received message wrapped in a `ReplicationMessage` instance. + + The client must confirm every processed message by calling the + `send_feedback()` method on the corresponding replication cursor + (every `ReplicationMessage` instance has a reference to it). + + Basically, this method has to be called in a loop to keep up with the + flow of messages coming from the server and also to periodically + send feedback packets, especially if there are no messages to be + received. + + This is why methods such as `message_stream()` or `consume_stream()` + are preferred over this one because they will keep up with the flow + of messages without explicitly requiring the client to call them over + and over again. They will also automatically handle sending feedback + packets in a timely manner each time the `status_interval` timeout + is reached. + + NOTE: only available with psycopg2's logical or + physical replication connection factories. + + """ + raise psycopg2.ProgrammingError( + "read_message cannot be used with a non-replication cursor" + ) + @property def timeout(self) -> float: """Return default timeout for cursor operations.""" return self._timeout + @property + def wal_end(self) -> int: + """Return the LSN position of the current end of WAL on the server + at the moment when last data or keepalive message was received + from the server. + + NOTE: only available with psycopg2's logical or + physical replication connection factories. + + """ + raise psycopg2.ProgrammingError( + "wal_end is not available on non-replication cursors" + ) + + @property + def feedback_timestamp(self) -> datetime.datetime: + """Return a datetime object representing the timestamp at the moment + when the last feedback message was sent to the server. + + NOTE: only available with psycopg2's logical or + physical replication connection factories. + + """ + raise psycopg2.ProgrammingError( + "feedback_timestamp is not available on non-replication cursors" + ) + + @property + def io_timestamp(self) -> datetime.datetime: + """Return a datetime object representing the timestamp at the moment + of last communication with the server + (a data or keepalive message in either direction). + + NOTE: only available with psycopg2's logical or + physical replication connection factories. + + """ + raise psycopg2.ProgrammingError( + "io_timestamp is not available on non-replication cursors" + ) + def __aiter__(self) -> "Cursor": return self @@ -723,6 +979,560 @@ def __repr__(self) -> str: ) +class ReplicationMessage: + """A streaming replication protocol message. + + This is just a wrapper around psycopg2's `ReplicationMessage` class + modified to expose the asynchronous `_ReplicationCursor` implementation + through the `cursor` property. + + As the attributes of the original psycopg2 message class are defined + as read-only at the C level API, we keep them as such by proxying + them through properties and not instance attributes. + + """ + + __slots__ = ("_impl", "_cursor") + + def __init__( + self, + impl: psycopg2.extras.ReplicationMessage, + cursor: "_ReplicationCursor", + ) -> None: + self._impl = impl + self._cursor = cursor + + @property + def payload(self) -> Any: + """Return the actual data received from the server. + + The data type depends on the replication mode used, + the `decode` option passed in to `start_replication()` or the logical + decoding output plugin used in case of logical replication. + """ + return self._impl.payload + + @property + def data_size(self) -> int: + """Return the raw size of the message payload. + + When physical replication is used, this number corresponds + to the actual WAL segment size in bytes stored within + the server's write-ahead log. + + When using logical replication, this number represents the WAL entry + size in bytes after it has been transformed by any sort of logical + decoding plugin (before possible unicode conversion) and usually + differs from the raw WAL entry size stored on disk. + + """ + return cast(int, self._impl.data_size) + + @property + def data_start(self) -> int: + """Return the LSN position of the start of the message.""" + return cast(int, self._impl.data_start) + + @property + def wal_end(self) -> int: + """Return the LSN position of the current end of WAL on the server.""" + return cast(int, self._impl.wal_end) + + @property + def send_time(self) -> datetime.datetime: + """Return a datetime object representing the server timestamp + at the moment when the message was sent. + """ + return cast(datetime.datetime, self._impl.send_time) + + @property + def cursor(self) -> "_ReplicationCursor": + """Return a reference to the corresponding asynchronous + `_ReplicationCursor` object. + """ + return self._cursor + + def _xlog_fmt(self, xlog: int) -> str: + return "{:x}/{:x}".format(xlog >> 32, xlog & 0xFFFFFFFF) + + def __repr__(self) -> str: + return ( + f"<" + f"{type(self).__module__}::{type(self).__name__} " + f"data_size={self.data_size}, " + f"data_start={self._xlog_fmt(self.data_start)}, " + f"wal_end={self._xlog_fmt(self.wal_end)}, " + f"send_time={self._impl.__repr__().split(':')[-1][1:-1]}" + f">" + ) + + +class _ReplicationCursor(Cursor): + """A cursor used for communication on replication connections. + + To use it, you have to provide a `connection_factory` option when + establishing a new connection to the server and optionally a + psycopg2.extras.ReplicationCursor `cursor_factory` when creating a cursor + on this connection. + There are two connection factories available provided by psycopg2, each one + corresponding to a specific replication mode: + - psycopg2.extras.LogicalReplicationConnection to open a special type + of connection that is used for logical replication; + - psycopg2.extras.PhysicalReplicationConnection to open a special type + of connection that is used for physical replication. + + """ + + # a mapping of streaming replication protocol-specific commands + # to methods that are used to log these commands when 'echo' mode + # is enabled on the cursor + _repl_command_to_repr_method = MappingProxyType( + { + "create_replication_slot": "_create_replication_slot_repr", + "drop_replication_slot": "_drop_replication_slot_repr", + "start_replication": "_start_replication_repr", + "start_replication_expert": "_start_replication_expert_repr", + } + ) + + def __init__( + self, + conn: "Connection", + impl: psycopg2.extras.ReplicationCursor, + timeout: float, + echo: bool, + isolation_level: Optional[IsolationLevel] = None, + ) -> None: + super().__init__(conn, impl, timeout, echo, isolation_level) + # time between feedback packets sent to the server + # set after either `start_replication()` + # or `start_replication_expert()` methods get called + self._status_interval: Optional[float] = None + + async def create_replication_slot( + self, + slot_name: str, + slot_type: Optional[ReplicationSlotType] = None, + output_plugin: Optional[str] = None, + timeout: Optional[float] = None, + ) -> None: + """Create a streaming replication slot.""" + await self._execute_replication_command( + "create_replication_slot", + timeout, + slot_name=slot_name, + slot_type=slot_type, + output_plugin=output_plugin, + ) + + async def drop_replication_slot( + self, + slot_name: str, + timeout: Optional[float] = None, + ) -> None: + """Drop a streaming replication slot.""" + await self._execute_replication_command( + "drop_replication_slot", + timeout, + slot_name=slot_name, + ) + + async def start_replication( + self, + slot_name: Optional[str] = None, + slot_type: Optional[ReplicationSlotType] = None, + start_lsn: Union[int, str] = 0, + timeline: int = 0, + options: Optional[Dict[Hashable, Any]] = None, + decode: bool = False, + status_interval: float = 10, + timeout: Optional[float] = None, + ) -> None: + """Start replication on the replication connection. + After this, no other commands can be performed on the cursor except + receiving replication messages and sending feedback packets. + """ + if status_interval < 1: + raise psycopg2.ProgrammingError( + "status_interval must be >= 1 (sec)" + ) + + self._status_interval = status_interval + await self._execute_replication_command( + "start_replication", + timeout, + slot_name=slot_name, + slot_type=slot_type, + start_lsn=start_lsn, + timeline=timeline, + options=options, + decode=decode, + status_interval=status_interval, + ) + + async def start_replication_expert( + self, + command: str, + decode: bool = False, + status_interval: float = 10, + timeout: Optional[float] = None, + ) -> None: + """Start replication on the replication connection using the + START_REPLICATION command provided by postgres. + After this, no other commands can be performed on the cursor except + receiving replication messages and sending feedback packets. + + For advanced usage only, in most cases, `start_replication()` + will be sufficient. + + """ + if status_interval < 1: + raise psycopg2.ProgrammingError( + "status_interval must be >= 1 (sec)" + ) + + self._status_interval = status_interval + await self._execute_replication_command( + "start_replication_expert", + timeout, + command=command, + decode=decode, + status_interval=status_interval, + ) + + async def send_feedback( + self, + write_lsn: int = 0, + flush_lsn: int = 0, + apply_lsn: int = 0, + reply: bool = False, + force: bool = False, + timeout: Optional[float] = None, + ) -> None: + """Report to the server that all messages up to a certain LSN + position have been processed on the client and may be discarded + on the server. + + If the `reply` or `force` parameters are not set, this method + will only update internal psycopg2 structures without sending + the feedback message to the server. + + The feedback message will be sent automatically the next time + `read_message()` is called if `status_interval` timeout is reached + by then. Methods such as `message_stream()` and `consume_stream()` + handle this transparently under the hood without requiring any client + interference. + + """ + await self._execute_replication_command( + "send_feedback", + timeout, + write_lsn=write_lsn, + flush_lsn=flush_lsn, + apply_lsn=apply_lsn, + reply=reply, + force=force, + ) + + async def message_stream(self) -> AsyncGenerator[ReplicationMessage, None]: + """Keep yielding replication messages received from the server + and also send feedback packets in a timely manner when + the `status_interval` timeout is reached. + + The client must also confirm every yielded and processed message + by calling the `send_feedback()` method on the corresponding + replication cursor (every `ReplicationMessage` instance has a + reference to it). + + """ + while True: + msg = await self.read_message() + if msg: + yield msg + + async def consume_stream( + self, + consumer: Union[ + Callable[[ReplicationMessage], Coroutine[Any, Any, Any]], + Callable[[ReplicationMessage], Any], + ], + ) -> None: + """Enter an endless loop reading messages from the server and + passing them to a client-provided `consumer` callback one at a time. + The `consumer` callback can be either a coroutine function + or a callable receiving only one parameter - + a `ReplicationMessage` instance. + Also, send feedback packets in a timely manner when + the `status_interval` timeout is reached. + + The client must also confirm every received and processed message + within the callback by calling the `send_feedback()` method + on the corresponding replication cursor (every `ReplicationMessage` + instance has a reference to it). + + In order to make this method break out of the loop and return, + the provided `consumer` callback can throw a + psycopg2.extras.StopReplication exception. + Any unhandled exception will make it break out of the loop as well. + + """ + while True: + msg = await self.read_message() + if msg is not None: + try: + await execute_or_await(consumer, msg) + except psycopg2.extras.StopReplication: + return + + async def read_message( + self, + timeout: Optional[float] = None, + ) -> Optional[ReplicationMessage]: + """Try to read the next replication message from the server. + When called, also automatically send feedback packets to the server if + `status_interval` timeout is reached. + + Block until either a message from the server is received, + the feedback status interval is reached, or an optionally provided + timeout has elapsed. In the latter case, return None, otherwise, + return the received message wrapped in a `ReplicationMessage` instance. + + The client must confirm every processed message by calling the + `send_feedback()` method on the corresponding replication cursor + (every `ReplicationMessage` instance has a reference to it). + + Basically, this method has to be called in a loop to keep up with the + flow of messages coming from the server and also to periodically + send feedback packets, especially if there are no messages to be + received. + + This is why methods such as `message_stream()` or `consume_stream()` + are preferred over this one because they will keep up with the flow + of messages without explicitly requiring the client to call them over + and over again. They will also automatically handle sending feedback + packets in a timely manner. + + """ + # try to receive a replication message immediately + # and also send a feedback packet to the server if + # `status_interval` timeout is reached + msg = self._impl.read_message() + if msg is not None: + return ReplicationMessage(msg, self) + + # otherwise, let the event loop poll the connection for incoming + # replication messages + fut = self._conn._loop.create_future() + fd = cast(int, self._impl.fileno()) + + self._conn._loop.add_reader(fd, self._read_message, fut) + fut.add_done_callback(functools.partial(self._read_message_done, fd)) + + try: + return await asyncio.wait_for( + fut, + timeout or self._status_interval, + ) + except asyncio.TimeoutError: + return None + + def _read_message(self, fut: "asyncio.Future[ReplicationMessage]") -> None: + # is added as an I/O callback if `read_message()` cannot return a + # replication message immediately + # replaces the connection's original `_ready()` callback + # while the client is waiting for an incoming message + # the connection's original `_ready()` callback will be restored after + # this I/O operation either completes or times out + if fut.done(): + return + try: + msg = self._impl.read_message() + except (SystemExit, KeyboardInterrupt): + raise + except BaseException as exc: + fut.set_exception(exc) + else: + # read-event might have been triggered by a server keepalive + # message + # if no replication message was received, + # try again next time + if msg is not None: + fut.set_result(ReplicationMessage(msg, self)) + + def _read_message_done( + self, + fd: int, + fut: "asyncio.Future[ReplicationMessage]", + ) -> None: + # is called after `read_message()` either completes successfully by + # returning a replication message or times out, + # restores the connection's original `_ready()` I/O callback instead of + # instructing the event loop to completely stop polling the fd + # for read-events. This is done not only for the sake of aesthetics + # and completeness (queries and such are not supported on the cursor + # after replication streaming has been started) but also to check that + # the connection's fd is still valid by modifying its I/O callback + # which requires a syscall on behalf of the poll/epoll/kqueue + # OS resource under the hood. + loop = fut.get_loop() + # safety measure - uvloop has very different low-level APIs + # and doesn't use the selectors module + selector = getattr(loop, "_selector", None) + try: + # special case for systems that do not support modern I/O polling + # mechanisms and only have the 'select' system call at + # their disposal, in which case, no syscall will be performed + # by the selectors module when modifying its key (mainly keeping + # asyncio's `_WindowsSelectorEventLoop` in mind because IOCP + # low-level event loop APIs are not supported by this library). + if selector and isinstance(selector, selectors.SelectSelector): + select.select([fd], [], [], 0) + loop.add_reader(fd, self._conn._ready, self._conn._weakref) + except OSError as os_exc: + if _is_bad_descriptor_error(os_exc): + with contextlib.suppress(OSError): + loop.remove_reader(fd) + # forget a bad file descriptor, don't try to + # touch it + self._conn._fileno = None + + @property + def wal_end(self) -> int: + """Return the LSN position of the current end of WAL on the server + at the moment when last data or keepalive message was received + from the server. + """ + return cast(int, self._impl.wal_end) + + @property + def feedback_timestamp(self) -> datetime.datetime: + """Return a datetime object representing the timestamp at the moment + when the last feedback message was sent to the server. + """ + return cast(datetime.datetime, self._impl.feedback_timestamp) + + @property + def io_timestamp(self) -> datetime.datetime: + """Return a datetime object representing the timestamp at the moment + of last communication with the server + (a data or keepalive message in either direction). + """ + return cast(datetime.datetime, self._impl.io_timestamp) + + async def _execute_replication_command( + self, + command_name: str, + timeout: Optional[float], + **kwargs: Any, + ) -> None: + if timeout is None: + timeout = self._timeout + + waiter = self._conn._create_waiter(f"cursor.{command_name}") + + if self._echo: + # get the appropriate logging method for + # a specific replication command + repr_method = self._repl_command_to_repr_method.get(command_name) + if repr_method: + logger.info(getattr(self, repr_method)(**kwargs)) + + try: + # execute psycopg2's original method + # for the specified replication command + getattr(self._impl, command_name)(**kwargs) + except BaseException: + self._conn._waiter = None + raise + + try: + await self._conn._poll(waiter, timeout) + except asyncio.TimeoutError: + self._impl.close() + raise + + def _create_replication_slot_repr( + self, + slot_name: str, + slot_type: Optional[ReplicationSlotType], + output_plugin: Optional[str], + ) -> str: + command = f"CREATE_REPLICATION_SLOT {slot_name} " + + # determine the replication slot type + if slot_type is None: + slot_type = self._conn.raw.replication_type + + if slot_type == psycopg2.extras.REPLICATION_LOGICAL: + command += f"LOGICAL {output_plugin or ''}" + elif slot_type == psycopg2.extras.REPLICATION_PHYSICAL: + command += "PHYSICAL" + + return command + + def _drop_replication_slot_repr(self, slot_name: str) -> str: + return f"DROP_REPLICATION_SLOT {slot_name}" + + def _start_replication_repr( + self, + slot_name: Optional[str], + slot_type: Optional[ReplicationSlotType], + start_lsn: Union[int, str], + timeline: int, + options: Optional[Dict[Hashable, Any]], + decode: bool, + status_interval: float, + ) -> str: + command = "START_REPLICATION " + + # determine the replication slot type and name + if slot_type is None: + slot_type = self._conn.raw.replication_type + + if slot_type == psycopg2.extras.REPLICATION_LOGICAL: + command += f"SLOT {slot_name or ''} LOGICAL " + elif slot_type == psycopg2.extras.REPLICATION_PHYSICAL: + if slot_name: + command += f"SLOT {slot_name or ''} " + + # tweak the LSN format so it shows up in the correct + # form within the logs + if type(start_lsn) is str: + lsn_lst = start_lsn.split("/") + lsn = f"{int(lsn_lst[0], 16):X}/{int(lsn_lst[1], 16):08X}" + else: + lsn = ( + f"{cast(int, start_lsn) >> 32 & 4294967295:X}/" + f"{cast(int, start_lsn) & 4294967295:08X}" + ) + + command += lsn + + if timeline != 0: + command += f" TIMELINE {timeline}" + + # extract logical decoding plugin options from a dict and format them + # according to the format in which they would appear in a raw + # START_REPLICATION command + if options: + command += " (" + for k, v in options.items(): + if not command.endswith("("): + command += ", " + command += f"{k} {v}" + command += ")" + + return command + + def _start_replication_expert_repr( + self, + command: str, + decode: bool, + status_interval: float, + ) -> str: + return command + + async def _close_cursor(c: Cursor) -> None: c.close() @@ -737,6 +1547,21 @@ class Connection: _source_traceback = None + # mapping of psycopg2 miscellaneous connection factories to library cursors + # that provide some additional support for those connection types + _conn_impl_to_library_cursor = MappingProxyType( + { + psycopg2.extras.PhysicalReplicationConnection: _ReplicationCursor, + psycopg2.extras.LogicalReplicationConnection: _ReplicationCursor, + } + ) + # same as the above mapping but for psycopg2 cursor factories + _cursor_impl_to_library_cursor = MappingProxyType( + { + psycopg2.extras.ReplicationCursor: _ReplicationCursor, + } + ) + def __init__( self, dsn: Optional[str], @@ -946,8 +1771,31 @@ async def _cursor( scrollable=scrollable, withhold=withhold, ) - cursor = Cursor(self, impl, timeout, self._echo, isolation_level) - return cursor + + # check if there are any library cursor types that provide + # additional support for the underlying psycopg2 connection, + # otherwise, use the default `Cursor` implementation + lib_cursor_type = self._conn_impl_to_library_cursor.get( + type(self._conn), + Cursor, + ) + # same as the previous check but for psycopg2 cursor factories, + # the result of this statement may also override the above step to + # prevent any undefined behavior when combining conflicting psycopg2 + # connection and cursor types + if cursor_factory is not None: + lib_cursor_type = self._cursor_impl_to_library_cursor.get( + type(impl), + Cursor, + ) + + return lib_cursor_type( + self, + impl, + timeout, + self._echo, + isolation_level, + ) async def _cursor_impl( self, diff --git a/aiopg/utils.py b/aiopg/utils.py index 86d66ccb..9c435474 100644 --- a/aiopg/utils.py +++ b/aiopg/utils.py @@ -14,6 +14,8 @@ Union, ) +Corofunc = Callable[..., Coroutine[Any, Any, Any]] + if sys.version_info >= (3, 7, 0): __get_running_loop = asyncio.get_running_loop else: @@ -37,6 +39,16 @@ def create_completed_future( return future +async def execute_or_await( + maybe_corofunc: Union[Corofunc, Callable[..., Any]], + *args: Any, + **kwargs: Any +) -> Any: + if asyncio.iscoroutinefunction(maybe_corofunc): + return await maybe_corofunc(*args, **kwargs) + return maybe_corofunc(*args, **kwargs) + + _TObj = TypeVar("_TObj") _Release = Callable[[_TObj], Awaitable[None]] diff --git a/requirements.txt b/requirements.txt index e55a00e8..229d4da9 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,6 +1,7 @@ coverage==5.5 docker==5.0.0 flake8==3.9.2 +flaky==3.7.0 isort==5.9.3 -e .[sa] sphinx==4.1.2 diff --git a/tests/conftest.py b/tests/conftest.py index cd161ecf..f72b4ab6 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -3,6 +3,8 @@ import contextlib import gc import logging +import os +import pathlib import re import socket import sys @@ -26,6 +28,11 @@ ) +@pytest.fixture(scope="session") +def base_dir(): + return os.path.abspath(pathlib.Path(__file__).parents[1]) + + @pytest.fixture(scope="session") def unused_port(): def f(): @@ -38,6 +45,10 @@ def f(): @pytest.fixture def loop(request): + # support running unittests on Windows + if sys.platform == "win32": + asyncio.set_event_loop_policy(asyncio.WindowsSelectorEventLoopPolicy()) + loop = asyncio.new_event_loop() asyncio.set_event_loop(None) @@ -107,6 +118,22 @@ def docker(): return APIClient(version="auto") +@pytest.fixture +def retrieve_task_result(): + """Done callback to retrieve and immediately log possible exceptions + from unawaited background tasks, otherwise logging may be postponed till + the task gets garbage collected. + """ + + def go(task): + try: + task.result() + except asyncio.CancelledError: + pass + + return go + + def pytest_addoption(parser): parser.addoption( "--pg_tag", @@ -126,6 +153,23 @@ def pytest_addoption(parser): ) +def pytest_configure(config): + config.addinivalue_line( + "markers", + "skip_pg_tag(pg_tag): skip test for a given version of postgres", + ) + config.addinivalue_line( + "markers", + "skip_pg_tag_older_than(pg_tag): skip test " + "for postgres versions older than a specific version", + ) + config.addinivalue_line( + "markers", + "skip_pg_tag_newer_than(pg_tag): skip test " + "for postgres versions newer than a specific version", + ) + + def pytest_generate_tests(metafunc): if "pg_tag" in metafunc.fixturenames: tags = set(metafunc.config.option.pg_tag) @@ -139,7 +183,7 @@ def pytest_generate_tests(metafunc): @pytest.fixture(scope="session") -def pg_server(unused_port, docker, session_id, pg_tag, request): +def pg_server(base_dir, unused_port, docker, session_id, pg_tag, request): if not request.config.option.no_pull: docker.pull(f"postgres:{pg_tag}") @@ -148,15 +192,36 @@ def pg_server(unused_port, docker, session_id, pg_tag, request): name=f"aiopg-test-server-{pg_tag}-{session_id}", ports=[5432], detach=True, + command="-c hba_file='/etc/postgresql/pg_hba.conf' " + "-c shared_preload_libraries='wal2json' " + "-c wal_level=logical " + "-c max_wal_senders=10 " + "-c max_replication_slots=10", ) + volume_bindings = { + os.path.join(base_dir, "tests", "pg_configs", "pg_hba.conf"): { + "bind": "/etc/postgresql/pg_hba.conf", + "mode": "rw", + }, + os.path.join(base_dir, "tests", "pg_plugins", pg_tag, "wal2json.so"): { + "bind": f"/usr/lib/postgresql/{pg_tag}/lib/wal2json.so", + "mode": "rw", + }, + } + # bound IPs do not work on OSX host = "127.0.0.1" host_port = unused_port() container_args["host_config"] = docker.create_host_config( - port_bindings={5432: (host, host_port)} + port_bindings={5432: (host, host_port)}, + binds=volume_bindings, ) container_args["environment"] = {"POSTGRES_HOST_AUTH_METHOD": "trust"} + container_args["volumes"] = [ + "/etc/postgresql/pg_hba.conf", + f"/usr/lib/postgresql/{pg_tag}/lib/wal2json.so", + ] container = docker.create_container(**container_args) @@ -199,6 +264,32 @@ def pg_params(pg_server): return dict(**pg_server["pg_params"]) +@pytest.fixture(autouse=True) +def skip_by_pg_tag(request, pg_tag): + """Custom pytest marker allowing to skip some tests if the feature under test + isn't supported by a particular version of postgres + (allows specifying exact, 'older than' and 'newer than' version matches) + """ + + tag = request.node.get_closest_marker("skip_pg_tag") + if tag and tag.args[0] == float(pg_tag): + pytest.skip(f"not supported on postgres version {pg_tag}") + + newer_tag = request.node.get_closest_marker("skip_pg_tag_older_than") + if newer_tag and float(pg_tag) < newer_tag.args[0]: + pytest.skip( + f"not supported on postgres versions " + f"older than {newer_tag.args[0]}" + ) + + older_tag = request.node.get_closest_marker("skip_pg_tag_newer_than") + if older_tag and float(pg_tag) > older_tag.args[0]: + pytest.skip( + f"not supported on postgres versions " + f"newer than {older_tag.args[0]}" + ) + + @pytest.fixture def make_connection(loop, pg_params): conns = [] @@ -221,6 +312,32 @@ async def go(**kwargs): loop.run_until_complete(conn.close()) +@pytest.fixture +def make_replication_connection(loop, pg_params): + conns = [] + + async def go(**kwargs): + nonlocal conn + kwargs["enable_hstore"] = kwargs.pop("enable_hstore", False) + params = pg_params.copy() + params.update(kwargs) + conn = await aiopg.connect(**params) + + async with conn.cursor() as cur: + try: + await cur.drop_replication_slot("test_slot") + except psycopg2.errors.UndefinedObject: + pass + + conns.append(conn) + return conn + + yield go + + for conn in conns: + loop.run_until_complete(conn.close()) + + @pytest.fixture def create_pool(pg_params, loop): pool = None diff --git a/tests/pg_configs/pg_hba.conf b/tests/pg_configs/pg_hba.conf new file mode 100644 index 00000000..400a7ddc --- /dev/null +++ b/tests/pg_configs/pg_hba.conf @@ -0,0 +1,27 @@ +# Put your actual configuration here +# ---------------------------------- +# +# If you want to allow non-local connections, you need to add more +# "host" records. In that case you will also need to make PostgreSQL +# listen on a non-local interface via the listen_addresses +# configuration parameter, or via the -i or -h command line switches. + +# CAUTION: Configuring the system for local "trust" authentication +# allows any local user to connect as any PostgreSQL user, including +# the database superuser. If you do not trust all your local users, +# use another authentication method. + + +# TYPE DATABASE USER ADDRESS METHOD + +# "local" is for Unix domain socket connections only +local all all trust +# IPv4 local connections: +host all all all trust +# IPv6 local connections: +host all all all trust +# Allow replication connections from localhost, by a user with the +# replication privilege. +local replication all trust +host replication all all trust +host replication all all trust diff --git a/tests/pg_plugins/10/wal2json.so b/tests/pg_plugins/10/wal2json.so new file mode 100644 index 0000000000000000000000000000000000000000..db4b6f61bd5419a82fa9575dd0ffc303aa5fd3cc GIT binary patch literal 163624 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 z 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 literal 0 HcmV?d00001 diff --git a/tests/pg_plugins/11/wal2json.so b/tests/pg_plugins/11/wal2json.so new file mode 100644 index 0000000000000000000000000000000000000000..3051819e19d7c2e6b651059829ab7af8d631d743 GIT binary patch literal 174592 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 Cd}ELR literal 0 HcmV?d00001 diff --git a/tests/pg_plugins/12/wal2json.so b/tests/pg_plugins/12/wal2json.so new file mode 100644 index 0000000000000000000000000000000000000000..3da52a1a4f20b557ea094c2228512b96b7c77b01 GIT binary patch literal 201912 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

oU01}582L0T-Vi~|m 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 Qm4Emc!>-K~$UKJs2OCXJvj6}9 literal 0 HcmV?d00001 diff --git a/tests/pg_plugins/13/wal2json.so b/tests/pg_plugins/13/wal2json.so new file mode 100644 index 0000000000000000000000000000000000000000..6d74e854c2bdc89845bfe7c9c7103b2f10f0a087 GIT binary patch literal 208656 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 literal 0 HcmV?d00001 diff --git a/tests/pg_plugins/9.6/wal2json.so b/tests/pg_plugins/9.6/wal2json.so new file mode 100644 index 0000000000000000000000000000000000000000..76de6ff599900b8994353ff9733f585fab51cbcc GIT binary patch literal 161856 zcmeFad0-RO`Zqq4q>z%76iQ2l34~g-%3=!^*@_KqA%T<~MHWkG15`>|+k`~~s!fzI z1W@6+EBA_u%T>HyWzm)@$aY9=_|6b|Fx-S#%Y}s# zcXF6^6a)tYkc>9?Q)E`f(ZLGZ(P857EcK|-krqTJtm5s$DhDs9$IYrK+R?0{5gYp3 ztG1ti%vABTBjM6#+)-aSm4`O4>IKJVIatt+8r^u%F+J7x|L%~iB1}-_wdR*}Re*L> z&0)560uLkpMvj>*n1!U(|D5yHD{>bB|6=`B z+=|?3;N!sG`JX#l!T+TdeLiXhz6Fdg*6%5;*gL%yct7xQoUbJ6_EzGGCZdbU?b3># zV_SiHAS2@P%_^Vs`4=#Jv*4nMN%!fe@@ZE2B&luW%Z`FoxVlz{OvRFtIrFQlO6q*2 zwZ4)Pp=5SNRfSOEo>W{??ydFCsi^aLYbO;KR907cCzZ~s^zycgx0IAEDkTP`l@+%D zanyp62`Yzz%F?-7qi@JPvg@BCTb+LG#u za-rBezq)pDL3NeSyU17Qt@J|O8qidi33I)rHSpr>>e~4wK7S2-H*0=fNkyGXE_mz8 zN^86&H`P^F2@}got44blyQ?aELfv902UnNOg7>O`R22u!@%pMDNT~HzmXdlUWtG)+ zoH0{xqPMiRZ0^Lxbp@qmbG-t|F7=i87DLX$3g28-nqOTmOn|1Pb>0{v_)Y>6?*Zmw zc%#g#& z=x?>Bvq@}KS(J;YV=kI z(nPOM4X}b*Zz&6~+B$?sb#W}{_JwhCO6Hf&sVFO%jS(W0j2j7R1T7UXdN6)VYS;kg z;L3_wWqs?a`wkFFya=OGxMNmbojUeQ(Eq|nk9&AQNx#1RW2LKOrG9;LW99yRuU1nR zrZ#r|p;lWQjO+}i1&CFUzSR$v;x!F=;qkx1p*A{O70>%e5R)*I_%L2*4I(@YBSnd3?M&j_3>UpjP&sO1rI^Sq;t-d$x zV1zW^VCsu~4(QP`s}XL@ z1}f{|a8T@%tb@0UK?NaQ2e;_p4jtU8gJopt#2I=H%Z!&+D9;Fsv| z*XrP1bnyFh@UA-e1|3`rS!&*-gWGlZn|1JRI`~!{yt@wGtb;pr@Vz>C4;}n~4z6D( zeyD?As>465gJgI}YA*X!T|b?_BB_#hp8tqwj|2ft4TAEJYA(7}i5;G1;t zJRN+q4n9l=->QROtAjV|;Q2cEULD-2gCEerhwI=U>fi-B_+cHqPzP6Z@FE@jqz*np z2S1~OkJQ0k4JXVlIU%^nA-ICgK11|?t6`UUrx4AZu+Skydrrc)t$RL7RG+=}KR?b= z@&D7~O)CEXU&mUN|9^VCMaBQ$J>IU;{ddQeD&Bv3yj#WpPmd3%`2XLIlU<>s&g-4m zIVU?OxkKkBB2KbgA^%?G-_dB)B`3Q>d)&6B_NNL*i4I?aJG%S$$)cR^0{fi*6m5a_ zSlM_&Cs!ud|JK`Q3LNxz@C-U>3w(=(kXyF7LOYLlbIaGbY)$)56^;=d{x9o)n{He8 zy6xqIu5e+pczidS`kyMinOM7`JCC2tuRqt@pMoM9Qce|)2hC4KIY*9L^8=@B!Mnj1 zay_BbyRm>^b}R4v8I2YNj<`c__|5Ln=aIRjd$8FS@Pfi4FESSgqqe{l zREp(mcF^>zNFafN&iY|j`jedX%f!C^HoNnolWBKBvQQj4>0BuUntg+Y_Vwison9Pv ziT*54XirYFt6^XCr{_GOw^8$iikn@by{^*-T;Xw1C7U#oi<^r>dyhAJLa%$S_$kor zPj-dAfDOtmXpMXd+2LDYLeW-NXmYcwEUMi72RV8&2u`^|MptN$tL&h%9zc&=wAER^ zNW8K*TqBZ_iwpvkEa=0M-KUQ!JjMfy~ReZ%sXLu2*!ql*EiCm36u26y5U3Nf8 zV#*cmb%j26$pe+ytm;R#O|iV(9N7q)sDI4p2<2vKY}l1mxZ?0M=XB=`=Z(&i89Q4B z*sl}ap+6`WDRtBV6kod$U)Ic6fbBZ|LtvlZxmk>?fv;FVEImIU(C^<+2;2#YZh5Id zG4QY7DF&kMP?6w&-5vVW6FMA^%OuaB!@hjC++K~z0r8kTdR|QKkH_TgJSGFD{0Yu2 z;_;O^%~N%T&9-$%qIQMzN`1(w;RHHNc3p7>1IpEKru~9cq}u_tJl!VFh#uznGj>vz zo!!^gJ;1Uv=zB2w+%BB{9MQja4uNpe^_p_6OWf^x_na>s%$};_%&eRlr$3)xecro3 z6a1IE8uA{c68Ya}b;)`EKu!4$UQ%2b9y4|)Yyv?1`9ghetA?D0YX!e0aw9NRJLQBQ zRbwK=GJ0S}B%cj4jI2E{MILFwh+F+Cimc07MnP}C=aJ`NP@XCd9`R>I9!E3xo4f=; z^S$ExEgHpq)TdZ3&%`i2Vhh|36t^s8)-OpG{5F?71Or1UW@!G8>X&p7d^=s?)IzU7 zzVAL+5SqSCKrG0>pjKBn$qb<1L z+M7=1>FsT+v-eV+y<5)wZ`<2)`2L9wJ&oauaC~$H+$I+w)D5=46DT*F5pBVLV@7Bq zhr0F@jKe|jgzKg%%OTe-H`Wt8oZC2+dcYI<$rCP{qBNkben}!43Z}b4MSE?*5a{cd zcm!MUDpqQT(yt(`Ut&S&6_hkya`9g9J3Eo{`%1Zn@k$f?e&nHa{aB5SxB4Y!!S^Lo zQBh9o)oKqm%6e5BTd;pj_D8HlvY(G>mWz_AMblDfq-+E)5{g8~n8$@ju0Rt85g)Hb zwk;#GHT}c6S3;-@W)z2h^n||3X;yqdjz}0-w(j-d3n9z%m3MTCa+^P%fTj>;8kH=M z$UZ?fcFWg0FxcOi?+|iMDQ{muD04!1I!-JA%OlS~mwcfdB1S8~C?=nETanxro*o8b zSLn5v)IFzwJRZpLe5RV_lsf}|-+1a7WdosYW;|i6{R-#?HPdr2-+iI<(y18EZ3cxa zg#5h=baO$6Ot0iKl;w%6u0a#=w2=`rNUya{+m`Ef{+`G+YEK&V z1HxM7-|7}D?OX@&`{q}mi9kaRG0vpm&3g_}-P9F3H%b=}$rD{LGyeub*wG1{1(Hc1 znY}jdkI5iSFD0Xn(h_T8=;x;2F-8h)TfU}g&?7%j;|Po=gR!z3)L=M(X;~QhY6oql zC<5^ee&Ulb*Ew9ls4s;j+hx|m&@rX%muM8LjLx*2&uM01H)Cg9KE&V8HUDKSG&hmv zGr5#cAQ3XOWcUCW5fhdVH9l)6yW~5WhM}V~umXr!FR(AZesqT3rs*9y-*wxGEQ}DB zeB;1S*otT_cgfbCbl&X>74Oa2=aScOrY{{P@0Ja5g~I7Ho4odoQMrp0DI0>7rz;dZ ziFRc8xK`3ZXZn+nu%@OUKN{6tbcWHCIC;Q^1$$l3$`y z!yfaB^#TgYcRx|D+FoWgTOgOPWoEQTJXt>wZVVEh-#Xjbu+)PoX}U=e0taou-mt%Sj^)T zqy_Y`1t|0D#MrI_&Pd?MFHt`Pv3$RQMTFW79R*)^IHn{ILk$)}v1 zFbAGR%`IOy&?VR6lzUmSt8C#U*uP>AmMQhir$b>gFfb2zW;dKM+XA})N6BOh^g>*s zWU#&LOtS@gQ`m~H*_|syjd<5#yic*8~*(eQArna+Tk61Wph;2MOdb}ed8q`yq^3p=(r5_lT0xHc?gvu}v7=8tYF_^rbP|&n&G)u=lxd{YR&hj!z zRvrhx2%Q6Jluf-!xz7pQh_i~=eC?Er3ZWMHz$LF|gI#`!MtNutAA)1#tAA9|z`DMX zG6H({EI8r35?QGN{Y){l1#IO;o+5TDXTOKo&~BNH;D$4uZGo$)ckk?g?}jrSkiS^< zGx)OMOtLNb6-B!3<+QCnFuvk|zbz^w#M2)Jn>FQa!NC-P;an??op&KEray@npk2fV ztI!`B36R&oMao7XBP&fFqiYC&3#PIN^o*=vWcf6{$Oofj6VeZYd@W8SaBkYs7Q6$c z$U3-^#V0qDmh2t5nUPNLihe%IZ9{Tg2M^lTh&YvqoaX-8(HrBQ4~0hIU7NLX8h z`BNFf;JIe*(H-r<3U2k2@|##^^YyHzwmZDQpnOBEE77X!Z@H23aubvmlr6`pGnwNf zcL0ibL{4Gt&`eP7MSG!aQBjJ5`)q4&!h$?94v73ckvKSc?aLuA9x@j>j@Pm=3{ayHudaSKpvdNt zk>;XsWhQjbd!PW()d|zJyX-xeEMYS=HI+`L&nTb@7nu0T;{s?{7>cmL2bKew96D?3 z0krxhv_$>_JZw9b@D=hwRIoy(*b<6D$9$c!NTv!F$;#W`u;p>!3<9$Vn?|cCWg#+H zJj&yeZCi$S>=^~jIcS${%`4z^YIrAccW^W@vjx|XuJTyyaPD%+p4ZN}%AAuhGFOak zgB99hTA_K7I&E9rSfQQ83T+W~i%`M}?KvAOVTCpdE3`0bE^)u@Ws?CGC4>1|xvr2c zc5)7~R%SHONmo0D)^I({b zt;IHAeN0Qbve8rIiG?`vmh-mX=n$02#0z;Ze2k94GZYu{dXf#D)KES$oJ|!^6N>y2 zM`3Ns9tLV8kTQ>1OBp~L(zf7Oh^$|PQ-jOumz2QL#siEo<8KRmheV1Afk zRg@gQMW@nCzyB!7jVFn~K$vUWF&c}0u4tI8{lUq`If;5slrz$aK;5rVI|S1J*sGml z3$`KO;G7NW$&EB(luVKu+9?OAE7_v%M&Q`)`~zfcQTH{g2H|D4sQVLe+si51ny!uQ z(Q)UOCZNe3 z`Unj<2<`(&Jj#m%0F=hvr*wYGp&OmlG5@j~|2@46AxEEU>n)kM2^E%EC zCmq@FFWV9cOh;hVV{(>jZdLm&begX)Y=HzeC9T&jE0{kpfN8popEk|=oOKidBTn#( z}l2=$`PPPP7_{>^K=#?a^AVg4tAbyRfdvrh$$bj*ZPztN$^s@3u_QI(jdyUehTa%F2)#i!;44pX?rLu&W1*pS z#izt2qPItzI#anJUCEFpAn@}Xb)se`-?lre$s2#i*IKM{V~hT9t_7Wk^*)?^0F5|D zpc4VC8axW10YTgz+jl2=d zu57M@fiVEhI`rs53_x>TEd#K*S4&Ib+%`}VLTN0;=HRQCB5Eop$}<=VPF%u?ul|us z*ZhV}R!s90U*N#bbHce-uy}QcZ=6bNg`=O6#>;4xuurcJ&DLM)0c62hJ%B9ez+zIT z#}xq7H*STlw4$&D2Cx%Lt*4%29#d|H%*Zwt0l70d=tct3MH{}o66KDdjEqI18n7cc zYJZ^8pzr?)NQQxgZQihL9OY5623MxAhYuBKtLHSfa9P~x9Ub_FdxVhq*3U6w_AVE< z76-)-K#T;o2NuwtC|_ABQ}m7SL*ORfcz`H}=o@KPy^%MP6-qafQ_QwkwG|YJ)0Q-+ z^|U1QFzkaG>gs2+4)skvD(SGh1uChcas8_vl{9*`1u7|~p)Mf(!Y!I>bj{aO^OdZb zO-RZede)@yM0vR8JWqjwfuLOwNnz=pl6HB5!k@|teL$9h(Lpf77~{RcIk(oVX(aohR63dpzw%X z?j+jZp!1Ca&^V_!Z-~%VFrAEVi3dvc$yog8!siA+<7s+OOwF?&=&UC-yOTY!rB!ka z@qiwYx~45hR6FAvrXd;rq#lua;s?z5+G%Y#w<(6WOpi#8|9~T^u3isB?xD#*jBKYy zIZWxP#b)G+_W=mK9-(D|elyY&uhU*(9;(`2VGhcLe8gbBEpb9lIB$Or=G!ZgW0e7< zS2*`hq}IaFPugx_4dld$uH;1PiD)7biJWLcOQIp9TsZZQd?sQJVIL;!e=~UQoBf!H znusJomBa5vqmzR$>8L+Brx~{Z`rLH8Q$0qe&=3{<^K+VU&*2Ghy^ib9fw;bfIYwE^ zxdyJLVBuHMw}Tryhaw&@GqndN`ZOCvdx^-!iJUs3V4SESYVZ%ht!e#0dW>7~S0X(~ zq@*t#m7yaY6(`MUj_KXv-l+FI+U5V$L&P!kJG}1!Q+Mc>rfOspuENg;X!T)7p5PI+DCUib=R_x5LwV0S&e01{l*;&<+> zLOZ*2=VOsh=^k5wIxSJsgktROP4$m;$*- zb%6MN2p{D`#&T(*;2(r5!*tuw=ggX=bnniKyyy}9LsixJrPAa7#)$GnwRNG|=9D{S zg01-~a+~r6aE?FA^!LbpDn>bA>Q6bRXcb%8LJbl47=c(ag6b(y(U!?=Kyk~HGI9S3 zQ4DTD@kw9m?Oh-O#X?5$jWQM}k?Tk&x_@O-W_G+2?glEbuY#n83k z1Wve%l0EVk>MGnV+>Co!H-w7c#Qm_it+i;gTOKhG^R2H|cA0|vmd#Ud!S!2?&!pQ% zaW}5-dbix&6FNqba5Dr3oBc;IuG(`Q-K67Xn1Pj-&<6b;fqqDUw3ou}+*5CKVRx8D zzI>N;UI4n#*cg#dqDRW(Ou>W8@?G*2vn%)s?oWWpPTKg;?mxtRg~ya%LFh>K#kP;bl`{&ucIcGky5RDLBJc>Y+sZj;6<0%wfquGl-X( z8kT`RJc4eIYqs6Fky!GZ>73Vt*M3Y6X}aN@$$`20XjL-JY_Rp%5HJ&NuR=l%w*WAd3c%2U8XoNRUB zE@S1{cc?OXt4sE8#(5$_UU>l^O*Jrm8t8Pl*Mt_{*vh=YH6dS30v5T}d4qGRE${+- z0TG+Pd4nsI?3RZqMv$|9u?2TgYs>AowJd+oFgyoYQLp{kQ}+7w%m zHU`;ssPlS{GHtA9kP3!_sAccb_}61N;=-x-oT%Q=qVw_?ff_vA#uIPrI`4Ln&$0GiAPl0;@4CM0T@fY3jFy4jQXk0J!8X7_1nx z2IX+v7Jkdr2XO$HEWxcI%B|puuu8<3mXRnZa#TBPfxhf47Prxdb3e$!mKPQ)%Cler z{C0xhhXYMO_k#>Yy04XnFps@w0gU^jlq7Y8q{x$mjN3fYSn{CV-B)0RK1wMWL>6EP z$fVc;T{WJ8dOj$cUGk!QWnBwXhC@9*Gg!HPP%JP9(+CEUZus{Bnr+LtY}j$+O(ub~ z{=S8-YkNW0*)6zlBhbV+h=T19=;H?djWBY6;gOeab%&RW%DR7%aQ|k6ftnT`07RuA z2KRsgMb?lwUp{g7V+}kils6a~B!W;nl0eHrA34cwAX}GUP;t+TI_zY*y7A()nt7Y;fx71j&e z1P7$!nUA}H#h#hL(@IS9%UPj$vAevUn>66@aMr_ zNBpJGUE$ygzIzG~V(f^scXrIDCwi~PGxmXt10-50Nk!!F9Ib{oU zrjZgZYW9SC-h=Gn2`|C@okd%Z4~p-<;yP(MBm6hmVMO6td!1Qn4|y~wXJai;EHB{P z_5q_&%Xpb07xF*5(sls`e6RVCID_ig>6l3hzoX6R7Uwxob5{oJ9*t%tn=B0H-h~mbZ8y&cHw*+Z zat=e4t+T>;AE13(@kSZcyF!q+{SMNjYYRPY=6VbzJ*JQzn;;Z= z+>BX5)8i<(VK9npCQ$V#AwAm1^oaZSTwISNWwfeCUQ7>>^tgxgps%=p?Zhu0Z-H&Z zI-HkI;F#NO!88!XT>lm!3v2-jNAcUnEQ)4O*+xk5>0^9_%YFFG_Nrlix`;znwW;CfvsxT zUKyrpm>tvb7pyzCZval@4wxIy2ejTm6ZG8ZfXwA2Gnvcmp_5t6WLm|@=WJ^z@3)?C z)+Jh>*n&@@7*l0nT$Nv{R9Tjl|ig|Yz=gvlpb+# z?I*X;-Zv4lrV*$^+@NHziWx-rv#P%BsC>1P8*~V}Ry^SE!`!v~5C|eyBH{477NcE4 zhVlf~L3u)@y)Q;fYuoMgBY=_bF_34|`p*pzH0neay@(d29_qta+mI(UiyFZQ6O$Mj z!#37ZQ#sAyZlJlJXgr+eaUD&F(X*O^WEjVUy+=3 z(@H$|JrL)gs+4g40b2XkFGj3!lN&sZt%HfvtHo)q{VM3D#^ zps6D`vkt_Jeo0SR%9+`9%(jCZYcVl0nkkUi4Q<=fV;%@R2!1dkkHF>_ICv$%v8cTQ ziw5SHJw?qx5tIayBm1%IgOza6W~Dub1TBmnCk8mDz)B8FjCA~6g1;{8w+C>2H6MF2 z&Ay4AaOw{|Xx)`?3I{ln4#zuC9MTd{!|Uad&D+|7qbKwM9=yhi>Psm4DsWXOKz=(d z7>~c{l9z5)Y)q@A&B_?q9GP|sx1VrwdT9ISCv3sH;3HaG9)F18e*rYCw*;g>gyr_$ zXhrYs?1G-4#hmi|4qdJd=QU$cQ_4kB?E}gkfti9Kv@^1XrHQ;Dq?e8Cr!U`>*E=uX1X~cJWjN|oG%XT?XflO^?x)1I*#E~wm@|P zEDRlVH@q$u+nU;Oa!+Wl|2y1<>Ioej+8ejCkxy++!$ntks(7k!1RnXfxf*tgfEiiU z|DzK*aeF&Bj-K-?-hcCOqNoz_uX>Q}E>E2Dh9IUooGt z=>$`yxXg%8qka{)}8T1Ra=dHyI5??skg7k<{EcAC% zk5bQdWX$Taw25P|px6U1{*I`N5|r33?}d0@&j<}|R}?gOvL4J>2kN??xQC?GgJwFNX5 z6|@%H{0K!JT5~l+EBtN&Eod>J#2;ZbzB!8EO9` z>7Vo-rND6RhE$%4K7}eg6$Kz%uEP#R-f*Zyt5%#SDs8}VN4`lAkS6E;N*q$}VI1;q z1cxU2QB`F>sU6PE#2luDU|Vhpb7f@RNhWz3mwcHj`TdyWb}`BIJs=rylDrB~P4f2` z=Dgd|z+^l96mw(~8~UjUT$=+3;wJhDVr3}TCKaqSZ5D5fMzKLbj3aHiGH+wNKDR9{c2&cA18lu_GE1qTPHC@4DJQux^@yMG@q8}#FuYnd!M>*o6 z&us;0PXXI2iO4^Icj(>7dKQEBg+jrZs9}So{=$biaES};i_orAkaFRo4J@RC za|v`E1C3_SQMhmw0e4N|N|=js8-6H-&__?d4mLiHsf^uA^^X2|3KwDE2?2JXTgFNl zyWADP*6o<%(gm1$LPIl^VT2$zl5B8Y!0^zFJ!O7Pf+1Z3Bs@@v4l8;CH#Y@qfE_$_ zgKhPFh|(guIHweaeuZI?0Gy+q|GLY@;t9m-`7Q8Uu5#dfiDcnUx0PF{8}{I44q_CS zel&#z-ZN-cfi$MxM3r_3eT@1GB@=aiFZWl}6S3bXa5lUl77giZ3mc&no+8CF3U7Gi zp|3mZmzN6uFY&0}a(X;s(Fgdg44)0pLeL)Rj+be``gS_yh37qeFdeEX^`uG=aj?@C zpx>2_tGtLitRGkT4A?+r0=mNsO-ed5fdxT59)Yk03YeiwaPQ1Wx_732`RH<6fEI`@ zS;fMG1HpaBlFAA2f_EaHp+a$pn_XD9%8leLtoRONLqTCY6A3mcTbu|kXeuVd)amV3~+<$!`p=P5km8h8T+ z)-ST*VfE#=`tvY^DFYXV&haN@_mM_wx82W3<998E(MIlFhAD&X3(8ySfl`PFTlr7k zRE8#;ALHKD7PePo&OhJwC`ckv@^(0N2o^!e-n%hbG%Za)I_d{e@_Gs+cz-Dt8!W?N zR91jW8Hz7ZC2*>>MD-w1{lVb5#lSBN{icx&0FuNpwk7eFJv<@uA(O$z0!e%gL^iM z_98vwGIox9OFmYc7#vtx;!19a&Sga9&llN+09@S-?Xd-~H_^iE2W1V^cgxGNu-My6 zgF3pEO_aeTv;z(S9R2|^I8C6x(kca8&t}p)a9bN>mD>yO&3-eb3lY(!VeI@vPIv@z zQqg9NP`D45BB#W!=ih~W7P^J_EL|g<2+h?%P`2+n1pltV3k34uzrNgbE@?B{-KkCUkUqFUuRPH zaH-Ft0ZcoAX$1_8d*NRYVY@v6Dv%d~uR^$MPtjfkFDcPU@Ll4R!>dpW?(?-rA7$4s zx)oXGFE}xvYk&v>tmj{#5PySq^&NDH6a#kCO-SK*U?0f{co8~52#+%>eXwQfZn!nm zA>dhdEr=P`81M4G2 z7+rooqutMIR#QN)jkDsHBA-Na%)Nsd?hM@NfGffmyBt{xu@~OYG!0~tdwOc?{6SsJtjuBBBiF8HHcnM>o>kRpd$ z@Wc&X2xq$bnolhw`q$R51R3PNN;H(8D6wQwVnIq_3+r)a zVv|0O5)F$tn5(>tUB(+rA_;J2d_IfY{28`GFXG61m=Q&LDIwgeGYF%6ldj5B_$}Z8 z1540AzK_g=k?MXq8yFaKSmz@O-k@1MoR^GI+cb@$;8weWt&g&5M+>Vb^yMWed!Jez2||DRZ2ZdE{BLI`?@jH?)NP$upEa zaF?ChZ#M~iGH^A#ZjKaUZNvSh^$(ACrG0Dhegf>Ac;uS7{qr-ejF+9Q(mzY|Q-~V3 zCO;CVXH$O)e9V4l0P8b#{6yFUg8O4J2f@^lu(F9349bgOMC%HeyBEvWNdG@rhacj2 z-3jj|!jt288wihn&k>ByA)K4e5W-D_5YDZD%9_ufd>VQbam4os@dzP0IbyyJaTyR} zv+s{jaZj@ma^BR-exm6Mde#SSXZxn?-s~@tGU5Y~PLtW>{}dbRsV;8IMAG0bM6j|0 z;%K6j7w5Ctu^M%n7omP7@)$2$TiAapooRKKDtt9y`i5YjuVHz z;J|(f%*!Nc6H^K_;wk1c!gA2i;I#br%_0a@49{k2{1tudrn^SvJeR{k_lt~g!Rr`s z`O0%MNWvgt7KPqXN`V)lX9n4CmBkHtl5?L$++Rd;ESR{uaR}F->TdAkW`KX@RFCmYtBrY0bd$5~lxg zim{QH(E9y*EGOtETfb9wd{4JgMlNOjjv_j8Cg18S>C#w7XR;4--c74p{NY!y$o+OjU-7KOcIaW_n8{G?;z#0w5b>kkyG#r ze*Z6F3K@mp&!guK=zO>3@AD=vkN1m%bbe zOY0o7D=P60B5%0^uNOJ5skFS@TP`fgC}pqe$rzl0&D`D@iz>=92KV%%6noJRn!pZ_ z>e>ptQ%7ya8-HRA^j4jC9mt$ZT~B}So^=B1F$9$HUxn%?J*8O2-Iw zHQus{(n<%zgp4|&58miQZ)sU9Wasqje|7GFYX%PL)yG@Z7lt`1>Ks+oK1Zpe%1>`K zA}7_*tA$D{GX~Ett;E}f^blXIp8z%0brpofRKh!sO8u3-jKNiYyeFx5Myw9@^e>~j zvV5L*aUI#dgn3hi1IS)E!=1u`KnIx2W%$!n9&s?Ge}2^k0#x_~ z5_ItMMW{`h(H9e=`RrnCsy{B)q*t3>GgL9l@AD!U5c^p@%dhHLeg*93z0eb{?}6{( zB|m+Y8$*IB&iq;u1&o5;qHX3j_TQtI{&Oi7;JT5-D2DoWC-y=SR5OKYCPx$i3X`Ht*YarmcmR8Ds9kQ z97&7Cnp*GdibX8&%ILLQRR}x*VFjP*hFHwl3=JO;xPkvehpLn@yrtySIyh;mkVOhy z5z9!Fc<^2$2cuc!Q(vm(Sm3R#!w6umsHiHd^p|`4_~Lfql~WvsL{itH;wY`1rCJ{faXo}y3Z|)1UOm6GqN)$Q zuc;3q#~S#E>Ju9Wu?8fNKCIVbEO<%~;C!ENaUb@6trnFFZCOaKdg}wZWpn*i^Ww@O zE63!Zd?BGGGnNtiu-BI17gn(l#yF^%cR{MHnRh`VWQZ4}!KIWd;)B_(AK8=jl|mZkJkr=; zWCp9lk`gb{-85iSlq1qH^-vA-fP=jWPm6pmn^nu|8^?$S4Dn#KlvhN>_C7wB~!1k)pnZd?IlFVxeLT|LiV4n_9yBW2Yh z-BkJ=LmVs}^Crs17r-19RSvvl4(}#pt(=>H_s-STmCo@xc)Z02MvFxjkXys6n^%E% zF(UWJGHI+gR1)TMEf972kn%jA!uZmOb>#)^EXfms`hnGm8CsvPH`Vbq4Og4o*>Z@3 zM#}}UOnTv{W1KZSb@kP1MpiRvD_nH)XuWa~EKN=<=UxPd6w=`#6JLm=wV$7XFT`Z# z#rSE7`M<+cmnf~F3Fjr}R`FV<#S78YcAgwBY}WFqJ_B9^OJEuHzeR#8T4v7+S(Q~* z&_rBEUmUkY&9r$K+gOY_7J8ASDi>qv!v?sDMI#^aS6RIfD`tHD5Bbckm@}6#s;X8K zBu&07WALRJ4QJ*w7W?evh;{UZ_&lBdxA;6Q&#v&+GAaKxm4LTxYKfbr^B5gp9JVG+ z5GE9j^SBF~4tHVEm`UzQHw<=E&+=h$;fSYPe;wWl>ZtNAv(k$``KvVXzS5STcsqNEY>97CRSSfgdFq>Qp=JfWQTMzLo2CB? zlsJDr2bC{JI~Q!oZrs5#1YVrMO4YG#U-o<$X=d0;-EM(N-f&?((e5B zaxe4O`I0zVT%WS)`SUCAy4scwYr$V#ZR-WZ>D6ga--t3U=n5;bt4PZO2mbQ$hfN{= z*VQ;=6Ux{Q7c%dOMt9+OHI65!z8*W;pbOp`jowQ1_eY~95Kej^8l8k=;e+`7UmOFE zM5FW^QQ@P}s1;jcs$8}B7=$kke;tB`docPP$X!KbeO`m`s z$Bkcr9viv=Yz}>!&*NjvH}Yg(K-mAMut6g19JI>}qXmUJJRIfRT+;?v6&W6D0`k zlSi~qA7!&FG}jB)b{TSI|I7>m6MZ56@_}~}blS&*!gTyixi1?1nt+qrC*NTxNNO{3 zwJ~g3mC(?}@Yv3gZw`NJ_}k9ikU7fQCb^-_9fnm2Vbf}(b7x_^iKqqQ_bmR-{9odC zHF*7jzx&|-tKlcXsp{uiV_aUd{_?r?1!UK=4&Pg_)d;M`~qtGe!3C&0zJkzv^7SJ z#I+C#5dJ@be*n9IYl-0n_=Uh9+m`U1z#j^fBgFreXmlUS9KR^3%_zcfS#ITwZ|3;7 z@IwLDjnK(YnTW4u&_97=OkTVnj}y@-%L0BNB77(&C{70=KIy#}F}fE1m5FAI#n{b2 zh2a+Cevt|zEXGS2q{u?{ZUmnLcSWP6digOvF4*fafC`x0KZk%Pu8T%LBESXyp?-Z$ zLudY^ag+ZB#tC-7FT@`Q{!5rPZq@%3FOCnQQMzKt@!`*yK4XACkM$SflmE+szZT>1 zFs^J}$bTgC8LL{o(xf`17xP1rg~iWC&}V-ejbgV~rH{uC#n&#<2kqFmj`LUJi`tK% zJsIs2sNF?zUL1=*0{zeDe?0I%9{7LL1KRt?WA7VR-GC{BeP&XQ!^g@Gf(tiB(1+zB z9Is|)OM-yAf!IfTzd3F+XCI!G1p&84vyb+kbIMEf(b|7K7iDW!Z4H4d;Ow)N=0tp0 zZo`pY2|yoQ$7G-9RQ-@@*#~zXu@6!n`)m$7*pa3n`b@z^Ir?aFPpXVnF@i>qCrj8z z!}~qT_0#-<8#|c3W|bdq#$k1>9aqp;eKzHMd~hk3)iu31^#9`bD#!mtX8*(L|9KCr zFx0$ZqE#N(^>;zWkQ&0^IEB%!6l@S9UeMK!pxt^XLtR+I}R z-D$CEG__st#=)FGBh&N)5>?v|i>blfb}coC=H_04kT8irhPKNtCs3Q$0WumA<_@{FS0}few9`*-BE~QfEDl0M=|K<{9M<9x!G)f0oBAO2qw1KN6ZP(j^2Rz zVd9U2;StNtur%=}A`>hxcSrd&p_?ts;E}{LR8F>hn1%9LDyLii2165nqq4&?s|U)z zQ#s4B40$&34=QI{-XflVQhA`I3}z&rqjJ9W5b+d5s<^D%kgpR(RvBl#D;E_5t4y)J zJs1^}cstaaY27#;l{VrEROVVgr53YD+SXVHJ5aH*iq9&-!-?(1ThX$}`iT>jj^a#I z>aEve?VOk*&OzmN>t|P@(n(wmZVlG@$*81@kD#)`nm`PCh<5^Qt(ATcB=HJyBP#b< zXH(@$R@q>kPnBM*vdQYBN^e%#Y^BHa6Z?w8L9^A`3tgOe71OQR`cL$9Vva~B3%i6Q z>VZ)xwtpA}qhPy_oc@<~i_&2gXSumUF zK~A%|5jDn>%wRkTN&*;^9*JYn6e0QHwt~>%p)uewL?n2JK~9v1^0GJ%B9q_2)2NEyCc@xJ;RD8aQ5BqSyp@n(P`;IiY0vwtW3-$DMA80=h$%+ zXf0g{(s4Usbt9~fZi03vD24;gn5GBwF^Xp0O~rlv!6%LII@Kq2rM(DCA840kry`Ct zW>%rd?6L`_sRaObn*#_&l8ljLHg7~F)tGF$6T{tf_zK`=)37qNL2LV*nN%!>H`@0{ zuM4IiF}sD>c1%IX*#=OAcH9oOyqIU<>N>Oedtj$shh9tW%>p)!o{>w=Wf7M4 z{A82|h*iK$vmqZOU&DeR?H$5#ilju^bA&TooJr;Ogi}D#D|B`tqokceF?p1jO=UBD znLJsf;hol&%2Py^FOn19?Eqtw+a|%IX&o^rlAmLNm$oSv<=x_Apf;LJ^hCYUY+3~; zq**UV%OMf25YoPY1q^*%Pn0UZt0_PG6Z6WQW>(H2F_>RQ9NQmuOxl4MoWcX{0RX0N>5Cm%; zY)S5Jpl&x=Q}a-9uokm573n0ohk;bLTHou0N(Mtqwx(d9BwxxZovan;ujEX|IbBFf z2h+`QT~0qSak z3Bs_e#KX1niC^kg%Tt={xZd z0k46c312WEeJ4in)$WHvw50q%k1AMR9EBnNBUkJsri7HA4j{@5mSaUI|GWidlV$Z~ zD4(i;kIX{CFN_&|Ck_CEcG>WzlyYtj%2v7&EkzI+H|zBnYbm10*ja~To=!1{uOnbh z)>{+ocy-2i^hfb^ZH5O60HOZb@q={xaH0_H-&1T)OVWQ*^_j;u(1muP3j z$Eldbiu5!{Vt-bAhl;~k@dy>&tVo_soWzRcm&6iQ+(^ZnSdo6TA<@r@Z&R_J6~CsU z%!+5I_!m}8!gu0d@nw36T-A+y*zOy2k13@)IoIMw>PhMGEQ$n6KxN?;;B-q)c`pGj z?*1ZprF_7O4e2wv$^64i`dIBMJJWFA8lo~tEMWCh}qhbmGK-uwu zI6}LR(*$8}YR10+vOI$>OU+u2qF@=Git-hdUh*y7dZK(K%^@x!iHJYZ7{C<^5D}@< ziN4)EJ&-QaPISf$W!a4+nD#vt1xsaLlz+%V*-RJugtU_z0j5d$7|421Lk2+ru%m1u zK50KvTgT5FDE>^3ADPX4@!cVWfsi&#ypBOgkMw^b`E5;ei|<=7HU?wPPaDl95y5)m zQdB%5%|Irry8xA9R!Oi{0yk|8tF*CZVW6gsWtFzpPvF+Hajast(le%M<3*a)ldbKu zP?^A3r(16(1`}C}!CabKleumIaD`l0n)}dtfET-Fi);t7GS{bW6WPOTQmou~tR{u4q zcv;IPYXixdD^7!on}v4WF$d*$c2mu=8}@V_E!feE76tL&xtO`#awGxeF;q^lOhg;VMte?EEMNcxicn; zv<7BihkG!<(gMu#4%Y)cEy&^J7!7H6aCiaX+{q%OL)-Q!uV7`96BCgslbm7N50y-P zD6ZSBhOX(Rt9m8DFNcu0O*uc19&8+#`cc%IEl${P>Q5*%CVnFhL}t30iXDxZe@#Qk z3zwd{f}o&Duc-mHJsAUEw0}90=Eq;~ZL}966gvu?#PkR5B8g2!z%ls&sElIrqznsce%W_18J&Vf8f@xwZ1YK6c z1TDaK<`}GmHW|AX9VK?RLG!L7Ls+nabqADPe?VumWis^d>ZWqC<#q&g*HLgX0`ZdT zP##TzD_MrX`CUC#fOlgZ*R^;J_&9p@1y$EEkD{D!6iko6_g%A2GWn$PN67S0eLxNAOXVm6cXBvOpDX0t?@ zkVJgxStzyMMe4d%?1b}`%gOIu?`C5_u-*@McD;vHOjZX{Z`XCKVz$zosk^Rc6|2=+ zh{|7BCE0owanSW%R_SDY0XlcRk5$rzwD+${xIAo+Pk2;4H$iZbbZ-y4Vu$BBP6?SHPkU~i}8IKS+)X&405lK zW+#O0hII_#0ets(o*IdF28Bk(VR%O95X3Cmwb3vK;0`jCn+(LH-BiT0t6P2+!pBk# zZ*&_@p(j|@Ajx(sI0jmirAtSY3x7npjpa#%YPTZZv)kaXZX>8{wPYa{yN#r-NVaq$ zxQluuALnKe(9OLEvP=f_Z1?VTqS5X;%!j7#xn(4F1cIgeH8ijU%WQmiA4p}4OhW2D zXc%xz0j#nd=>%{0Io2O-dh~pRNa=E8kIRXRU`ar~^vJ3rY{5iGJ+4}eO1lM!`pS&V z)iAk;a1MBV?D1%W17|vMd>cayG#WE$K*38H4DQ#ASJ>5anxW_Jj>FFaPB4k<(AH*^8=*wTr62& zWX7ha$oS8YO*6J`gt=xj8GUIdWJwlsQWwfec6xSRu&3q2H})Uh@PvIH%(2=JLPU~% zH%w@6UyZC~v;TQ1y3?KnhUNB5EQ-ALB#gV+_O>v2j{O&e(Omn-U|C^*8;0Cur}gwa zJH1c1(w>63W4?U_I;G0q9Yej^e#vNT+Ss4REP1p26*#}v{tV!CcKR_NpFJlB?=Q1Q zMhU_Kdxvp?u+Toa2wORJx+7q*y&8OOu^)t$OYH9?3c{`S*CBnW-46Sg*$+bQa{FrN zP;Wm2{M+n5!|>bf-Ns{=$G#Jq2ka8kP|$u0#_JvS@!)f({d#D)!d`=r4cVVTMqg>a zHv_-!V-G|BRrWFrhQ0PEIPbH6gW%q8KhjAM{$)QhSP{f>$ylrpB_dE6~ z1kwTfI!pxb+Udtw587{W~J z)gRk`%*8U)J`(=_)ZS~dAbe(@gr54`-W%QZg?%OZ=&*fIu^@bD@0TeEU)jUZ=WDw> z99L28-fTfQYX1Y49RI4MVzK882?iINZT*I$&ranhXz(#fl^x)-JI zIt#)8QL2XG*NDKxi7z;y0$pHyNMd`0lFi(_b!}G&L=^m(c ztth<@ujh->F*wR8N>9Pg;i9w~-BJLR;QvBVYKO%}ktj`s&qj#SR)Zjn6r~^06E0Ee z1x&Xny$7pDiPF873c_gcgz_FyTA7B&jz#GUMA#Vc#9^!`-3DKcgLHJ#c$kUan;=SG zLeGh!v>vfFNtAAfn6Md?z6%PCR%3UPE=lyVUTXGCc<#GVzU6$q5yMCli&ApDLFz(D;& zln%k4e~MD&ctJP^!-nITVo|C>Fk-W$KlBt0(wPCM7^LIyi_swct0$6_L3$9jCm5uj zh=Mi->3ZaWwgzbcG&38dlc*&cq~GAdb_VGdm}xOcA7h|f4boJ^f098O1?Aftq)X9_ zHiPtI3euNBT8_@?V36Dx`W+2Y19~L|ZDVMiC{2g-RD<+b5oS_@^Z`1qvq5?uNhRGN zSr9~*7^Igj$GXoT<+R77X^`kwz9fSbhAwu4bT$0h%^+=n^4$$m!Znzr4AM97XAgta zJOO#wAbCWjV1slmLU9T6>@-MK=-XWesR)tvhCw=lPT6gc(lN&N7^L>-;=Kl`-&o{5gY-%v z5}!dD=tAa$cQNALG)SuuJ#QJL+Yz5{8>Gb;0q+>3A#l$Dbet9W&mjE+!FSLgwMB>j z+aO&9w;nP``2fCWkb1!7@1w`ybq^b)Jk-7fIa0}2Z~^@CwLwZjPagp@NIwc7oP5k6Eoh6Z zXpsI635r2F44x5#Gy(qn)*xjfSsgb>zr&v=3{nYP_nkosf#7?Cv<+kP2ZPl4GC??L zke(hX2tUG+IQ(RgD$zMV8>HJH=of<&gblwUu3_dWI18GcHb|cVcm_^}2hYMU$UVOq zq*}E7j)4GO{xC=eboig>Dx}JD2I&(hA4QMBXM$16MW>2JX$jOd7^SlacB4@mfzfC( zN-v<_6O7Wm(5#J7I@J$j#V9R?m&`_K*C31)qcjp8Y-g0NO~zO;N8<5 zGz|8&H%bro!B{a$8IYcAl;%Ls4n}FNgU-^VEJ#Q(N+;mfPDbhd-WV%JDf4oS6{9o? zTsj-2Y;;vR4v>Bc#6q(!P$>yx#VCCb*GWccH!QImrJFIvx*4S-=&J5UsV}_bfOOP) z7$pP9GmO&dOpFzybUnmo8YL&fEnt+sMeGKR(v6UQhfyl&kEz=z+2Dy4M(Jy47BWg7 zV9B=9D2)M7HcAgzF`NJdUDzm{f$LTqrCZR`YmCx!Xj^NP?iqvOWR$jDh2dnBo=1e- zW0X>}keZEBC+M=?DEZL#7o(Jjw05si>Igyi8Kr0eQnOK-jV$#5^n~Xh1Ub6uA)}Ol zVezn0`U*q)5u;>9=6lpA%}hXQHcD;L0e>}0U!cSP2G_wMj~S&q1|T&XrK!Mt+$imV zpeLX;rDmh_4lp+vB{zUip>rVNX`|E=z-NpSZN)wdF7W){jnaMpi?J&KkD^H1-7}M9 zk_r&QkpLM82?+s05(0z}26BfUAS46=;gWC!2xsIH7G!~?|} z?|YY3*JHi#-}Tn@f8VO=na+s2_VdilS5@C#UwvI&UEPD=yUU$)2yJ(}lOBS+18^OT zzQ>)E4x{gNC#{D{_qmfE2bcSyH4J+YAqBAyxs$E~-9dNK5{$-&-ASDht&gDNY7FBL zoCQ4(gB;!X7k3ihGI+$Dw4g2Wi`(eTS!L2k=I!u#XI}m$eQokmIHOkwd$!r+nt-A1 zdkN_f*Y$`D)AuuEyL{W>Xt%E#T6uhrF^GMi!IP0jXVNCEbtQt#6Ac|){T2d@AsFWx zycMv#gm(Eq1Zc=b2G{Tx0DFy?O`uJ5^=C=0+_P#Y z;mRe<6^eTNddR{xkYXZU#aDN)Ye*Y-x5reN=Nh^PEPC`qdUO?#TaT@<$TbXpgNARw zmblc;xxf|=4@3|r^2*5&7ghuAvKJs$_#etgp({DYe2u}An3{Ap@wZ_BrgkTeA;uuc zQ+r5!QHZ3Jn#_5BoEQ}YxF_NEhUas1L~6=#^0^ful$e_KBKe#H2C2OX8scMUoSN|( zV6Rxu`aZmLiW48OzAxc;k%82b+K)Ut!U0s>>!m`Tf0d#k^L&6YS4E>oQ%6={e2Lp& zYHEO{8{$_qrjBB@S9GABW5xiE6N`!fSJEem;<-4$V|lHTB#iNZt0*g3{9*#GCZArA zcs1h3>wSlEe~CoHxanl-{Rb;XA&K?!$?L_x*P`4j`ARDCa~Pzd^Jc~r-J~!-Xr+#^~_+-{?Z4>q=4bog}AI9vX5$utI;#*Lzh~# z<`TmU?Vk&!;R2D;^ok>ttqBNnPJz<^Gl%5~Nb6?^h}QIZ ztZx>xaPmo?Pg$GAW;i3gk?fM6T{j%*Qp}{ziwW-(Z$tC+C4_ei6VaN!@)B^{ zC$4A*c=eWYq#tnzEYi=u0`&*Q>qs-{7nA2vaW7iaFQLxI#Sr3Lb{%j|h@H8BFTWY^ zTjDiDdiqwvC&k<3*>W4;PsJV#omA;L(7-ky($Sr+4 z3tlsAelHZRBBwYr?N9~^J6K3G({92*Oy7Ao3dv^L1IX;@SMLFRhM9J21Pa#>Eyqkt zM`)(s@(2p~X4(f?C>)?2MP^zJ4ZrUgTJTne)Q2(1<@I%1PJejN_bXDW;p;b%3GdZ0 zND@YT6HwAN();mq;MlZH1Ui!d>9$^_Jq>Gbs)g zT^P8pE zwvCly&vj8QZpTjoyWZW>!P)D*AHrg~V1Om|9?^&zL0P?vq$u(Hc)-Q9&LbWnTtWxO z3f^7oT}o$Q4V1*a%Q8XhITP0PuGlCUlbPo=p!DfWI5v58W0R3NCJQ)mLe!$ZlC~s@3y_a8>sX&GysV$h?3y8Zy8usN zNM(u$;!GplUv$Dq%bZR)OLSrV4E{fLj<~x9a07V`5-$b-FCd&R?im4iAz{Dh0~cj3 z^7LX38Vmh1mo%WhE}2hAXD&S-*4G;zc7A4ZJ1FG!cEYz@o1}gzD}a#F71Sy1@P%et z=IM*mWd8|;62BbZad#B4jVD{LHx}QXNAZ=_iEfOq7yz&fGj9AntW6^5`76e5_UcUl zV+h7&uelYl7=~n!y_TSw7G$p@>;>Dii25$9jLW`|EAw&^kiC`FV8@2+mOD}KBxAs4 zA9;`H1ijgheoJ)T$;f_;AeDTX%`YMgd9$DEh%i&!USKs?up#@!pHcAC^ns^OAYmKr z%P>}R+@2mlkMW>OJOc`=NV*L!8Bja{->755fRa4owBUrAn45Jmad?j?H-~rYaIp(} za|i4J=oR1L5s~X>>>FY@x;A$>#d^e@7=gJX z=nG6rNRV546&m_{fGJCJ?p&_3_xKqhk~^Pl`Zmp+W8^lnR_!;4z?n_1s&6zrB*|Uy z3fkgFRs&q#4UJweQQGVUK_-9>Mtm{+nY*GV3Ne>J*W}!@rU4e?;h5Ytv=cke5HPuC zv*QyD50P@$4gpU5W~iCFei=ZomqhW+V^Fbyh@S5{VKr*_WvGoK==GjU1S0}*jmMq= zF3SOU2R9kTKLDc#`&k>)jL^O$FHN9_#0zkHo?HaRGAK@kc^Rlh$Y(|a?nAgtbk75v z%Y|P{%*Qazlc)Ys;u_YM-vgY{;sW%1UM1l%A_Bh7larlFQHqGqtK|?JE8c*Kd6S4! zCALAcyvgKWEs~L#^5znrAoxc{d3YZLPwUT*1AHd;=u8v%Ck7*L8R2@d4(EZq<%H*m zJBYJ_@O*I{QcK<%!i&W7*?`X`+$6ro`6O>6;T7UW#7*AS)M2$aitLql3*j{)dOYB} zspr|Ev?t&PsKYwZsTlBKrkQ53c`)F|37;qKquk@f*=%^|(7X>Gf%83S=*+y&dZNMW zrGq`0MOYOSOcbdl(8I$X$WNS!rhdav-st-a$B1v1muJgWNcAq?tI!4ao`{~GmJ7`I zr8xQL_hUcCq(vb^4jszLn&^m==1?^Q7Y&Jk{isEN-!u~NaKZ?15)2)27D}GGVL(AT z^IQ6TD8GqM3W1dC!8xS__(psh&VB`jAD|X9MSREHjBK7btk3Yi5I6=wG^`&P7(#Rg zoGH_q$cMmT{h1WK;z#ttuq+xJC*H{doXtNcYcF0Q&H#$*Xn4qU*x*l5@T68C-F6=j z_Pq$6^!m%rLC}czp|`)DAa)zTIRD%;!P6_|qu2Zk_nSniht8y)D(#sNC^J(w}IA5>o^GT zh3vA;-n5?(rv59)Xsb7E2}ZR4N>cCirrpyEg{!uLe783(iS#?zvd^35orJ>9Ytgdb zn|4M#3fEJ^1Kza5ktp22mV@53Hxb?bo7i&Hn|5XZg|bH4$x9C?w5 zFvIserckD@1hQSe1L!+k+9xBy44-A*4b=8a%K*=lWS%o2sjxri0r4v_T8f5{bNq0` za#23bk6%~`aJa194&q|9)$>0{;l;^xcl_U>ad98ws?Bu8#SQ31-@a;UGHWn3`9J96 z@@*9|2i%7gTU=2DocJ>!rr08S{63r>iYK#MT7U7 z@q7uciv-vx!HGo%Z_ zEnvk@{|oNJ+yl{9e4MaX>_Ai&KSMZ9#L~IX5>6C%k%r9!L*HNm3HdHNNkVz_GUh$q8FA*jSRxzY31ogdDxQByAgTZ3QOhCC_@u zg|L#U-e45d2CPq&Ot9cV@jOy*$t2Fd)Icwhb7fOJkB};vKF-a7es2fB_3SyXs0;v} zNjO^E2$z;Dp$@U)2ohMyQo?a^fR-$yS&3pnSS9*s~uRdUfH>ii5Q5hYs*VqDXTb@<3}4Q+{7(lQ=3 z@q5Ylsw)6`y+n!US+``z&9Z`Y@yE#N8g_CFhPRPZx?mi7RBVQdrAvVf_%?J#X%n-o zN8CtwB@KWh#sWS|8Gm#f;ML0bYQ#$E8p0h#!x+G46GkSC1-zDUk~kYimaZfJWHAq} zDLsevy@XK$coX3aF%1K`^g_a!hKI_PZn+;Sd%gl(dhtA{iB0bKj{l4mJEj5b?#WoQ z1HU~Q%fMkRFKBvfM*n84BO6SxqtR0tD~0I9AqOE*>5-_lv~=+Eikk^@R%a2>;-M5v?>Q#wIaKt7cj?Zvj3oe z%WHlhSzP(Vc{bT(MRo_GqI?QrQ)DCGmQUq*%_Yyj<I(g}T+FE+|o(XPJB0G&nk`r-n)d^M#To*hHL zdd+Kq;_V5Q#I zw;VT{d=ZFOuhB8tsw)M#=mr7SRQ8)8l9A7>GnhhS#R&`sYbH_R#M7|SnoT$nCQ|E; ziPpSTB;N&7t;W5e#$_48+gd=4y@G3>)C zD|8e$Ar)KAgcHSLNV3i$oP-T;R_#w<(sxCZVa=iCeerr9!&(#o*yEcRU@qm-MUPuB z1gw=Z#qe({tWDGti$$Yx(z2{lu$Rjr)+nZOLo^ftr}7C%!d_5JJFF_ssAJ`+!aA2~ z$Ehyb!o`OiTnmAbbrDsGIT!B!)VgF3Iu^@6u%|_(t#?pi$<03=VYLIigFcNAN$7iP zCvm*u3#xeob%+zwh;ujLM3IXaue28#{((MR!%Ml&uqeoevFMh2B{3N5Q zNPIyrJV!5B;w;3g^*nK^MGwr!trw_&o%oJ&<&0sz=!Ar0y~FTs68|>=@Q2iMwP=QM z)@NL6Xcn~?2i7UVTg3#z-w=Pd;J-Fn-(89D-X|WU&c6^o5Ib@lV3$dPgRvDXxaHF* z$77Ggq7W?$&&NK>LX1h*orsk~po2*T-$HY- zyKrCZY;RNv44?jcQa4IA=t={@16$qOp#x-GUd)5_=*LD_6OlZ zulIKO&9TtAFJnH%?2cx59^XA_a){dKd)r`&q7{vX}c@k|g z(XRSES_%U!g)3tzbc}?I)FZVzr3KpG2O8hK$P?J8f%z<^rECmzBCnV&h+|Kn>zjau z2eX+#646n|hJfz~alSy_$`8yaMU8j>Jr$Tq&=4Q=0z7LhczVUHi2K0orGVqax-!6X zt^u4V1|e|<8jb=^7NwYg1?K()I79qe1bAK#cnahHp#Tb*W5Lwxoq+G2jrdBDUly>X zg=kue+L%cd7!sp=te1OzM$EZEIbIIR2@!A!*0}I3SH0P#ikgYl@bJ!7 zUXsiI*yZQ+>h9kURQjmW(u98;=nVVUhc-8@OqiQ z;(qQxa1$y#jE+%b7%1_dAS_0wQHgj1{vVxAKJhXwyaoYjLF#x(1xZZr$rgE378gZH!I~kd*@;WIo8P9NlUFG$z5}}pG{@n*H2Xqu^9(_FRX2SBFeVRRM)k76g>cw5%&@9g)&exdFEFTj zbrWE(XzmPn?KyzsL_tr$>j@`{shHMPZ=`<7YNP~Eog%-g0HLqg4_@!zT`+Qej4gbKt3(uO;|7P8Kz%B$(74;5QO%hV?c7C&6+=SIxg9cn9Rvd@I3{ zfdIdg;4%#Gn(rkTt|kvJiB2Kfx&v@9VnxdgOBdZ0Rg5I{pz^#oin3b0oU zX8o{6z;VJ0mnZno2An9~9sqba;bid${E#q$aE4fkk)2Su4RDT#E(Kh48{m9Vi-<@l zehF}qk-i5~C@O_{Kq>~ysYXuAIK2->{*hJMNqGZ_w{H4UF*;FBfkCtY( zFwCfsjeZT_p3m47YD^I)g>@jJkGiq}!$^$tLWiqAwcnJ|Wi#8&`g zLZt+Yks>FImEcbpg%heIcpFC31o;$P{K;H^@*%kRqp1MpGjQ=|L-7f<#Et1U2GfVy zi1dz*&sCY2pSLQJcL3aJ{$?1GYAY^>ai|1Vt_HIAIdx zM@p$3NIxwSSCjuB!i&YnNY=H3?*YydaTF)q+C0KbMK0kXyi3?5GLbK9M-W~n0vOJ< zg``~}a=HO7BD_*WlTR_>RiX_7ytah!S)$iiz@>y&i@oTA+A_jxL>@Y#ww&S6vgaanZ(diL;Q8h7@26@H9g8}!V@EEbS6W}z$LL7&J6J_wl zio4K(6MM71jW`#IOw1tMR!oMICd&2yc47`Xb7EiC$B9U!?uqjDOM7t}M%u(o*2jxI z#P3hIgE$+`o0xL|0fHN7RC=QS8R+lX9SyK_8`Q_6VEB&dgkDUZl*n5;;zFGCCUsQ? zoooxZ8}}r71OsGJ5~mSf@vaHj$Ek0en2120)Scc;6x$IclX_5i7d!|ErjwGdA^)=w zk#UnUdSK2aUWAh-^<`Ez#CaGcllrlm`wr6h>!lJN5=_eciL@8s%c@J@-X$>y)pcEz zZsQUCb=~%YjaP6oQkTT~I5C|#K03amm;l}Cq;8$XiDbZ1w*+x-KfuYvPZWm{8FjJ) zlf*~SfMo|Jiz65bb*Z$amss8lu zrx7W=cW2_rH+%ahG^)3L2{X{aV1gn=|^5ylO zBddEw5au4KxQ&QfuXm@crfj?*2EF9k=Jg&0n3{$!Ienj;JRhF% z&7%gs%VCx2d#jZ5$bAS&w{H&u+yjX7$ngQrBfmznkMdoa3|78Lz>oIL><_Da*^n%J z|3bIK`chHT#`kMFI@WhPazQ)avyqVR8v_g5``#LcaqhbaVmtVz!h;=sEf}VqeCHxe zI{Q{*{3rM#(M5^AAJCayeCy+}!`$~QLbaQ3FdUQQ`w2ne^X<#V`mL{HZ(P*)iohq? zx3vtXJ>OkuP4S(mftkK0Xpa4);FjjwJ`n!(ojU*<%6xx80?6>)42Sgboi`TOLcY=H z-hRFt;m=Ip-;k*L`vQ}2i`MrU_-FfW#4It#Hyk_%_{v~uuJ2*kHPH7yS_k>o6=A1| zFBkmteDw&NA->CMF?4)w;DMpOQOJ@7z9{6!VZIA;asSr02KB>z2hcqud_N(m3w^VJ zU*xNR{>4T|kJNP}UCp613<`p-%6ImY6|8!*L`W30W{iBxaOF%~ag>JC_ru?}KA zI?a^lx{l%m!pf9mtdqDFiktFW*I8z2GeCDFh|UNub2PJdvN(>RV2&Z2A*v82W+mYq zVZzzwSiHTOxSD!S=Bi|M^86KsIh|gsOJ1_b zFwY=31%G#Am@^1YQ=6gU0m_>=SYB#Gmz(wbp`E%aGiUqJ>YIZYHhfngK20BAbAbn2 zzr!Fh=lReYb30T|G#k$YEV|=#Z_1T!ET%^RUbGjaUU5+j;KfuiPV7$wyo4}zf|J-> zIuf+~7hsf`8wDFo7hIeb%kJMO$RVqaLA8U@IK0KW6O_CLTSH}zZxN*C3)Hq5(X_`Jb@ zT&}g4_bOcuwF9&J6f8UBehKIDId$`a7zSxBLh->EN}|^pDg$F9LA5p7j7QIA&t9>b z1qt(A;()nmmd(AIW=k{|fU;Vsb4xURmc=_QfVp;>)vXucE24Qdk(Gc*14x(anf+9{Vt+c$m8eOhb;A zZtEn~V(nn*x=vEHFIkrE>nzpVi!(%?bYW+y;vl#vPr9+QRA({E(v=BP)sb-X5b4eY z+3spF@})<+NR2n5dFW;3$nVf2+HIUm`8Y2e(Tc)p^2kFj8^*xt9?igE=M}uIagZYA z(SbO~N-5Ij_UOlg_cRLT9P;=Or;eOc%uc;>nZhL2AT2P6)jzt?#_G<>vhIk6t2EXr)R<+_|Hfpba0u#)Q7$Y6@Ct$D z08)_{3g-csPGBm49R#WX#KOmg{Qy(|C?~6mjVSRwQX?;B^$vU`AUBj1K}B06-^pdx zMstH`VKwTP1EHLiBd4MS%o?071-KbHAn{|?GvLu`DAmeKZq=YyQJRD95K{8Lv0eHo_$U%6YO}K5<|0cXz z6LxqCkMk-*4s`2L2SXR~zSLx|gW>57usgjw*maj=wUO+%RMW7&a)`=PETyRLbbTMt zj8!zUo)=F%=c;p)Huabin>qNGc+0%jjVs! zp~5w`3jZZEtZy6y&)Eb|u2KP}#(e2=ejD9Kc8i!7qZtD|?;ftacILLij0Qf9Z?QPS!7qfyG(CK9|D z{S^tAj$Z(ZOvk4PFdb*K!Fis`Av{i-X6YfLglB|)qa_x#m52FyboOMe${FBO9F8E> zItMM7ldRXo1&Y?#3(5))PB^!s-MU=2*2C$G&_a*rpsPGBTbc20*UcOcEvh-%eP3`g zA~UxCUX8@~;mLw}Tk~~qF*7_NDQjK9%&=G+iL8IX3RLAgl8n&F9+9dxOn4>1OJA zlil3kmSjEPXnxFYZVWa*shc_E-&W0XyuIll`@tq#5hSx?i$gmO!7p8nj31%hPj(ry zUS*Irj&3Q^_&n)!*Y$LMoyPaBH!M4dIQ~{@e7na+Tbf8_{bjm9=iR6{M7v9aiax8G z>7Ao?b2q!$|AC`fX0>*96O?N|MujP7zH!r}kzupnim*AKKSPsn<_MpdWs>QqXX|)3 z+8hML`Mz8(Xm3RD8f4&GSXMSa^_usipswRS^@gtFKK1fCF6#@-`_0e1+sNYs4oN0Q8JXBY?F3&#!H|95856B$upvMrzm$k8?AoLUE}B3S7I}w zX!t3lgFI>Qj3^ph)fVM+V1t@>+IO-1M1d@Gd8MEot{&v2)yyb5;-4%ptwH;&DBd{c zOVsiwaam!uVc6k0}be7!@NVP|128v zlW|fq_eXW^gZ54+Zy$j2ol$#%R*ACpI_<@==_!29P(#dHh;+!DSi`S6Gsg&s-U{tf zpjqjc;8jU&hYbDv!B3q{FmaEYc z4Wkg^m@I)N(7j(s4Wp*@s_AC#597;BjEYV-FPCrxbE+fLfUI z(NhC?ipOirtuq~XuV}?rL2+W{hA;~aYrDq08yvm$%I%V)JElH{m|(2E55mcwRR`&^ z-J0qVP$g@s_0Z1)`*|Eg{g8Tc!zs-O#OmsoQEkavoWNnH%~m+kZm|M2JS_P*8vu6N z=6cB@+U@8x*lSo^fabw2+g)#KZCGP;{rjjtsOzcMi@KgN-<0(Tl%Iov@`i)#>kyg$ zX5Gu5f{dmN#8hK8`j&6n;&BxHZXS#Jcn&56+fZMJJ}TS{;0glk0DM582|z|7rY*!D zyBj5U%dQP$_eZ8uVzoF7KXyKU% z9tpgu>wiPNQ4p1(XgjJO;}kGQegqyBr|>lkjEciiDt<-FHE5}bo{vqXQo8k6FU5d< zYd1@G#&dRhw{F)$#nX@}n`1KB5 znTnI_=p(wGW^GYqvi?WiV?6QR=%^piS8?nNjh+kgfjZId&APi~_+xXc1M}O~m^U~u z^9`#(V^Z~wvw!D=^}3m-&5^RXHte)n9tD}v?zm01wO48qo;J@^B<2XITgP1w0m~2mtNA%^ll#n zy$U|5`1K*h&7p?%vBvBP%(1O8_XVYWtC4bmG&hKZohzBjQA`0B%X)O5bFG3YV1h=X z2aYJ>Ft?8i^MHSWCTTreIT+HME(hzMQ9| zoLtNY&2-5b6I;1vUKv$Fep`#sqTm5JoCu=OAGA4(IWeh}^G6zS5MSgejp$@VPX@*-d$eUTB#Np8-=RJV_U<;6k2$h}ZVT^wXeSo-2CC`Kif6)Z_B@J}vO zc~EwDu!)a6iBkj*?x*2l?s|KzJ&BK(1_ipJEN`d8OQWvuW>4xnNW(5pLRntPbdbiC zfU%mycajDc!Wemf@a1MY`$pGpA zd_bTGKu-+1a^hDsq4YdT73%;j#fYoe3?L85W#l#h6}$1p6Me;g0C%SWI0)c2jE#yX z0rcw)#1jDIvdkE*NgOUY%!0`51rWz&ndgC3&Puud@ij^yIMxh3kV<&eli=IPoh10K z8T%hH0Q?gGPyK~|1<*v`6##ryn!i-jjX6i1XXGs!&nhgna+1r7<2uewCu4qT$d#H0 z5z0J-`Z3IlBHy;PI|z=&;RsUG_tBymyg6S{1{p*|bzKORXr2qht2i7%GUzQcMVSj~ zp53SzY^A9$Mb?wJ5cQmu77hf^M4&eSZmuru2H-G(b^!hkKsoHPM#beQxqK1%D7nyK z9%L2iunYopSTzAUY$X8y4VtdC!&-LQ4g-5CdFKMf9uJlo=4+8Ti@<|Q?j$oRd6)o| zJV}5`diw#OlKlbrU(pOsD@R|av0rd~Cj(#?B=E?gz)vE#Qy}f(tMIBB0MeEVD1){f zp^V2g&1q$Xb-uK!d?_U0sHc!;BO@1s8?E9Fd}&o;CIDK+>?^IBLx5Io0pMS(8Jt#P zYpVh|dJJ?ug!9>2UAXdTgmQ~6T#rINbl?Pu*B>|P`g>5AB)@=OC*}TRGEwC zB6TCDcsHuXuqob8yuyffpF%In!&;|FIK?}rNc7D5gqCfLep4q3xt{i=E)>FmueAa) z)o@Ocr!xW-NI`(0JHr&%60X1mO+p2RDiX64tE;-2UARnEV@lf`az~hB<&`$>3gS^l zO~`4@#fqPHu%qE-)gVL7PEwTgqAlsjs^52^5%{NOK}VFv>GZ)R$RD+!;B5daL${J^ za+3}W$CO;&!!)en8jamKT%y_C32(mc;IS&meSVu7_!VHYbUCm0=NftM54hB!Q)^!f-y8niaMB{(Rf&7PTc}6wLDzIpNaRc?h zbTAHQyTr)zaoQ+63-$Xm0W1X2tv`Sn04^dh9>9+P%86fbE=sRvVNQ2BfQoDJm7NXX zRseGW$XOmQCwZKtfbYERu{tNGK~Xv2!b*D|1efsR=PKmn_CSt}?niC@f%*|ZE_@rn zH3VJ&@Ew820Mx*ga^hEfgHmQL82$>N;7**HcoeE1<5dW*5Yus|2PoE~x|KJ~wxfkt zV>yQPuCC?)IjpK%-6&JJ$^VH)<7FUxtZMPTC#^kC*`G^lb;_Qk>v>}EVx2tLE$9Yo zzHa1cHd!`Kkm~^3bUiQ03srrz`!ju-HLS07Gc`TKZZ_>W4*aH@Woqj>Px*kXF0yfj zjceuT<}5hpPT6elV&c>oE4GGJtWl`sF~z~C;UZ@(wlJg5*d6v)7S43Dt&|N9# zT&cRi3~^M^o27CIqPbbQkZTC)L@-R_(y4z_3PM)U^akBbkA1J2X;%PmypV^yeR;7i zuoF|yl2I7#4&A=o=V&gmn?pBBBQeL|LF$=ybLj47vZJ}#ZvM^=pg^W>mS@6Yx*)@4 zjxO-z^MWJ{pQ;pvd$GyE%-W(0^rC0A>~-x$3-d}IyzD|Av)*$^8lo`6`fF^sq)(la zOr7f}X-O+d`@$rpYE1Ulr4kcozL#ugSi>C6`|alUg3Yh#W_sjrr`7Y`Fg>kL9ICm& z2%&Edm!Xs%jFC1?${l2zr*Oi|KN8NC6DA(Cc#3ALmU|PMWdpoAP~*_nH4+E5h6d#r z-OS;>OR-Srp3tD2u2C4g_bU!^P;POMzIhr_oY@}ND6}aCmcs5Zo9e=B3cRREs1a7zB{c3Bg1XI$)S$_kV75Dhe|c8Tic0w>YfH=sk}%$p$pQW&vk(pgL84RM1XNh zAG`|l$IMlvyc`T~M5uTi795l);k}il=34d=lHumTu>7?P+ULpV4!(`xK61V!C{M1leH*bCSXBd2mN(*6`AwAN^45M3 zM!TzZGA}v++%>3@n`3{B;FjMRgAAi6*~DOBJ@$eBCxZLHx1+k?6xw+}HF-R_4l4_C z$Paa|d!7#NWdqByu592D$-EsO(j4aJ01+;p{V)& zaEVkMU>j-p$7vDUk{6p78f>c@B{$l+rL2L<~-(#SRkxCQGZnk~EV7f}Dc3;!7* zCmptthJU6eY2AgDt-J6xEvyJa%#*4MyA7e5vJ34#2zKFnstXrL6xoIJt?WX))0Z98 zzYe_2CuJ9!cc3Ec28>5kVCH6I@i9)od^#w&m`ws>;OiJM=9mccfo6N%eM|(`-LvG{ z`Irc0h*KRw_BjhC z0IrGPTg7w!S_*i)gr!EzD%52_j@&9TGlE-1a^y{mSrL68Kc^>^m@Sp4+DLYCYsmRB z1asuJkqaWYZN$DeagU>q6|C<~+!GPHH*t^D5=82erDNbLz3MUsmLx-7S%k^eP<2P5 z%;A|bhiA${o+*=_F$Vf0K|DOd?jRm6iIp#hOJ8Os!?_@)Eykd0@MRu! zH{qI%$JUPO*W7jCcKgP{K{tEsQUphy?6re#_S!L)WzQXSv*-9Hb%WV^2i@$wX(;9; zjF-&WgWFh^J$lg1GXITfh}7huo0koE+akGQn zEl1Z?K87$ikLdErb(MFOqWq{XH?Oap+YRNTy1aXRW^P^`x7@L!6_xVdT$H9iw618k2iN2015t*xUm|{qJg0U< z4fim#SHgeRl{sL6gPUhooGVZLxQq*2tE=VanIpQu%ZCFJ2N$w$t;OjE)5TWnaa-46 z&EsW_&P#+>TBCbfK3xlp_caEuiodWiWQ%WrQir0to+ncz`hLBXG?kHogL9S^N(%6y zPad~D4NHm;Vm!Dnq(+fOv|O@I?+ZCjbwPIm@&mORRqp4CLErMA$PJPXR?XJ3uw?_$ z&4XLS?pJJG+#)tXNanG>;pht1t#^!Z&lL};*+WGVmZ$E2D;8lh-SODGf+b};t_=SR zn#9igYVH)bRxtvy+%-^C?-efSv2%9{8yI)t! zpngLa*zFf7T6fDy6>0bA-j@-BNaI!Ldhq4{An;(^-lS+`JzwC)<9*aWqU)*0U`J?u zs_KI>R)opGI=03p7XzJ&=>e`I41Z1$dE>2xs7Ks!Ls-FkdYmBN$YV9|)pX`V52rKv zTZ@n&6#N@HusEC`U*1^%(8H70kO~mUo9iFSmsc-F8FT3aL7v}Ao@$n>V14rYR?@2* z^WREZ+}8XA)5d1qGuh;X!~D*ZvKh-$Z4Tk72e2=60f-+7;Co=_0r2yk@jUK-TAD70 zxHOl8OKu3nPQ$urcW9-3vZv)J!T@WdS&Ebst6GTp{luzc*Z{LW(IgyT7b+6H#9QX< zn0=wn@2YL#2Avxv1-6^*WWsw^w=hKoPS7t^2zo(bnaxRm|jQkb|>QmOOLf%SzP4vQhIPK4Q?Q$J6&kuWzw3kX^!;|2lGJ+GmQDkFy{WB9n3?Fox3g(P}nq=iEkV)!3Qf9XHN_AtYJm< z54Buww_wg|SW_G=x7jV|E$pb!E%e-{c8i_06ILjOOk&*YUL(Kj+~wOht2@6KJTn>j4S71B98V;j~%M?){WVK*9HcQg#Q8;+vk z{~Qey?S_-i;CB}0ISW@f3->q+kL!XAn!h;GU5;fzXN6 zj&j5L)q&RU%Am29fm z%QOE=y`2u^Z^J}}tM`}#x94^p54tDAasTPSt+a7Xq#>UmX5{4VVOR?l3 z_lysG*TwU++k6#NY7z1>xl))dw;x~TmV2rX#Q^DYH(!LK7I9nT`ksDr@fP=9$#CEk zB&~D@cHr9e3)KG$ zG}S)P@tCUDg8QkmM zl5>Xj*fjT?#^uI_EQ#xQcHaNKZsisdwSoX%NUGRm!!_Phy19sEEO#ed4ej?+``!4u z3;Gsr1HivuD*Q;lhvFGF)2j>dehzZ1_%Yx41!`A*E z9h}J(b-1afE9tD&nys8t^DLC38+nG4vx|?qY|-_!^F^C1 zv=^frmfv`=`AfSwxECYPS2uIlhrh&uDgDy^_>(ZTk{)3R*}XFJKk_E;;n9|XNMLz_Zve>g4Mv%=W=S7{Pz z3*%1zoHs|RyvNcJ&p!hmIH@}VyWDLqK|!Udaz|<@mw7;?rjgFnG}TT`MWpZHHt!13 z_i)hnaM1U3(r0V>K?AEnAMb7k8yet-W?gl$K#Y={lVch6PHzZTO@=Yb9j*@Ze z*jD!(ww|LHmC>;KH1~QF!n(MB*oAR>A?i1Rrf@BQ;{eLpT5%;x?W-_=bCMMU=qHco zu0`u^w2nlpRg$b~Ie^!pg-HWLYrd{#v_7D!quqaNHMF?aA$JngxmOk8%0SL<{VOyf z2QoU3O_1`8)|=z)Q_0S;RhR!n&V#brz#5(khn}F6*5Yn z*0@ZRlO(PqQCk0YaN1&XYI8bH+NMBsvJxYAWcAYpDstQ=|Mv8rQ7*aBK_P8>>Azqj zU1yvJsionWNW%gI6Q5YxijmtnaMr$@y3~=K&7R|Fk(f zb2J?9AL`(&^a9&@?E=P366|M#O8v;u%XK4j^f1{7h1Y4nV);!sGe?hC%`!(H*G{0F z%WSexj-KLBw#9A^<>*G;EOYcZ4&2}6=<9VOv))&dQFxB-rm~(rx()yRn&gkN-new= zZhr6Lt-_-k_lW8>%zzqq+ezko7jNT!g)YzIUnGHIZz^8FI?hfqKe~A1wH{?T<54#@ zPi|72H`N&E4g`<_3fvU#oT%=x}l6Fz*F4p=-iUK|j0XDahuF;L%KJ-uH^c z^h>{Gw;FobBdamr!9`%Z-7+2Uq;1vddiu0P)`tuAD4zy}`j&??!RryXh!?#VtyovMArc@iqJI z=J7~tpghHWO8j$Q*^%l+hfU`wfkg+R@rc+#bb9I#uo+@f{z>2#+>6r^=9t`r@?%<{15tD;@ZFlh6Zu8m^#>=(Gw(%whF9kmp;&qdQ*G)FBCz)+< z*fB9S$m?zgF9naC64dK%2d}$rUYjt8oV>0H@;dC`rQpXyybe2f9kzLG599T5kk>N~ zUJ6c`8r16<2d`&rUWYN7oqFZoV*Be22QLL*72@@VgV!52uOtj`C$9}bULQJmDL7_Y zP_GXiygsyf@m1tbUe5-3eed9<;0+;O-#d7HZ}X}}9&z&Oyw|qT;|k>*1wR|&<#B~_ zj>n}gDGDZG>^phQ2=Zz#dDU$#Lc&vUf=*uT9gN!BjQ9uJPDXbG86`NBQm|`!&{+u% zUJ0645&qZ*|C^2Ed0!%gcaeXkQ~;WydNh2x4;wXJG0~9X;^tL1UNR|nFQ&Sf-FFf1 zDDY~5$M?+UN%9|1UBG|$<{{LNQFW{BxO|6>3hs7BP{(|Sj`_B|37VHZn63@-Dsb>p z@Z}+11rA;Xw!O(v=-nW_-$AcnzS&6o-tVCI+w|3-?*?<#)`bxcdIb-g5u_jCpdX>> z{iPV7JWf3=Cm;F}G4%4>aqgHh%s^_Q-S!EQPjKg8;=rx1FX^7gDN-KhAlF(bBe%dV zhh!sgv&N9yc<$4MJ08WGbAX4LgnXbBvlqOfh>!g71&lm6Gk(&6fj>#pEk8q1Ki|1% zquER_v3V6)kOwC=-4H~-pH2DHY|6I9@PDjH?8&0q;Qz>K#R!3OcUWg{24Cgu(GF)T z*i|2N_GpK*N86os6rI)X4m-FjWpvI0P1)s`<$SFL#l<4NC%MkP9e&)8`U`JIsdv+}atD$AOI&^ov}5G7IpB^T?Py*ygA=0&O)>do%>{G!_du0`F;~WcLRg z-SdcKA3pCK7uG%2G)MRRRgvhMz}^i~0<JC>-^evOfcZhljp|R<%Y!qh@N4 z->K*l)upo>U8>*!{G!L-EJv5lvb*#I{Mc^4-KBG6m)-`Nz*Sm^w485{y z7lixM#QB3qYkziGqiT^N_&!S>wm1t!vO9QMh0!n?2jrP~=#0^CCOf3J;^_N$gK`>zYPKSqzD*7jSW zc(Sy&gZ6{3vi~lJ{R;k1$o{(=_TOdO9|!vv-)-A}K-xd50ro$rhY(E)@MW7kq%+Rf z1v=w5hp}*md-+j>;?<65=mOp$Z}f6R!x+^P=8gNqy)i_SwDv|*$QxxE!S=?(;H$iG z%;60MZ-Qky8jd-%R)_%XOQ z>ZtEx*LTGG$f`p41MGTXSetb{qhyY(56{%2O}Q))Jds-0Y7+Wovm()%I{7Rm1oxO7 z;&$8OVzKwFT47M!tEUxL7cP$LbUY~TdqtwfZCnB^E2BLurZ_Dn#6&)INSiLQK~Y} zH)~q83CW&B8i64ihj~6wstdzWu*T|wg~Gj(8eCC7SJ%^sf5`gquDB%Jh&7soMnvBy z?bb&85H#W`jYFUHlsFI6Y1v*K&UT}N?I*3+CazZ(|${tY2c+cS7>e^>o^evOe5tN5j>)R+G?a#}tWHqdus{%NmE`-j_H~qcdLS ztS^ZvF7AQTS^Yw|xI|4taf1|z7PmDhZm5IpywkG%Ih^en2iuEVvBh>7byyc@99pqQ z;@~9pJR<%P-9R(mRK#J!_MLEfFK7~)@v|b)W*iL4`^v#K>%r4`=aX=@roKue+Zsip z*{0c-Mb9K|4P$||M5cUtLOZQ()bn{DaF zMpX$q-Vf*V%{(aJ*dGgcjBU}h%|bFjG^g5)B>BMqps>c^-SzNh`5 z(!u4eH>?YE{S27=Pg#$9Q?IR3$TXSnn0Ch)$yk$c7nSzH9W*VAoXm%%15C>Z^wrf1 zz{uLFCqr~nvBC)(X`hBWX|E=slNvPJ;h0=SyT8!d7=d;Zm0sNI6Zpp@Ragmuc%>r$ zHhl7$9?d8jw#0iZbsmOpo?YRzU$ViLB z?JM0FbnPxaaXkH3m}_Pv10mX-e6A)uV@EeUH8^=Citc1!%~*sI0m%ES4{tVkFM#$+ zE~L5n7Yb~zlIWX?Wo6;{Xo{YTMU?9R6r^gT9F6om1W1%yfl?gaDru}?nudXPJMb}d!UF9D^|W&H zCe779R+BK$IMUROy{BlCI;s$xZRG1cGe9&fW-Qi$6QQ?H?`brpE z{}Bh<5X;wWmPP~rVy_;3!eb_T2#2|gmuZEUpy@eyu5b^4gn3w{Isjlcfx`fL&j)ZE zz%>Bo@^2V3i*`rhUpD`O`qxqXkO+TgeItM`0jvaIb?>62@Vd|hF4W@YCx0JZ&+*T? z^*}4*-|-FA4fq>e!yGKOP`5P~Pg>;>Qz0gxHK>Vn?(jB@d8-x8j=5d^-qm*f*jw7nM98Kqm}lH z0q}pXMiAg1t*ijx|5>A}KU$d}ca@KeSyi;n<4x}6O-|Q(=66+w$3=tdXEC?gdhQ@I z>iGx(>iG@1j??J>Mb9%eN)b7piuujflP}ScdQK)lJue5~KUbswv7Xj6Z3<5cozcS# zRts;J*VSB6$Wqnv+T&vfdbO&LrQNBfw%l5*Ws>2t(_#3p&=@M<06qdRHw{2$Q4?HO z0FsJY6tkNE%mh$FU@?Ge0a!h|DefF9nZTt6>!4zPT~E!8!24Pic^+%vdkl)sP;^&# z)UUaVZ)hkyh^8apTlgdZfzwjqdjLKl@Ckt8WsvwJCw|{BG8>ge&20?h(I-GX93^CSqapy{5P@0%3s(Rqt}U28j+(is z8H!9)u?)aI0M=DA40-U0)^3l{Uin1p^}1R<(fSu%;HH*I5(oDuKHZ=m0C8+M^{hI@ z*NQ){(fNSXS*_9KQ+BWEb_Uqxs-5+L!}UrPxq9{6OjY2ck1uH?`E;~*qwxoiMt7U# zpwH60rg4>>-}@up%fxAZ>ZsQ<=R3gL`x~wOa6Xf56M7u9sW5@%ZhaWM2mf!Y+HRxcguY-7DYvP^%l^8?Os&WwDu82cJ z=&t`s-b0TDD*mQTZg)%A?s{v81KFb{Od(nJgCWXJ!&>Y>9vzPCd;n_IK}G>yUoU^_ z^e_HGY54~)27Ov9;xj?0tn7vdhDsr?&=_D8P7$1}F^oK(Z$$1|?6O*ZzB;xl1JV-5K76Ij^j#@T@%-|EH( z{f5C$V9|oNJK%4*@aguX*_cv^m+s=@JF_t!it#h@{~C`Z;PimcOspFbsbBKf2(~NW4`MpNy{V#%Fw((c{zYi3QhqFp8}# zaqbA5F!7nTZvNfF4dWJkrWk}4#MNRc37_c~nT@aX!ORVxULzatgAe%eR4&+sR(>)v z+>Ply@OJ|EoH4a=Q6AO_@#$66_)bS`Eyd@I>5VT`JfpNPc`(jmI;Pi}7*2)5yP= z;b%g9WB+`(1E0a_7gogU3dmIz9T1yF#|~ylZYOxn=&YH6 z5LY^brGAM){URv13kBn?9hz3wb@PBxpo48fQU=5)AxL}@fRf!49Fls3EX1Ne3fh;n zuV*K-cNdCDiI8GaJ<>TL-o2zY5w@tb5U+d)OeeW=P;bpxJ1)b)Nb1}tp_SYFhV;Ot zj?^0?IWuUOr0Jgp8i50K1rY;0uUPvH|LmWlS*YiU{**cWPK!-tHTxcs0h~@YwdUsez6QcRI zY%8W+GHB8#Fi2ejPRj~Bz0mkoLd-S4Cp}gB4O4hkWI1Th~(_VWJ{^yxV@yy z02!`jM5qB7SrMU}JTT=Qq2Lr{ z7%TY$s1hbwR?`L~?2xYm(!!v(Yn+NA<7q_EyGyH1nV>rbQBRN5>R!;riCPI=oTR<2 zi*+FtlMwQgv&_OSDsO}dnc@%v6Q*Y2vg&t;I3+k4gqbtlp$S-=5i-XP;29wySO5vx zfmM)@+Q_7>g(QnXGB{_4SJTOJAjxRR(!mpS?Oghv7SEG`1f==2$lqm2TV>S}^j~A^ zDx6GORUix(hAJRt3fQ=eSEG=q&7a%0!MBN#X5eFHuUx(?yK%|vMJwktWH&8czGB|8 zhUI52${w1Pm%Y4U*{X(R*-MtrX;^NwLR_7nHzRLQ|3!^UR<7&nyXJ#+T#hUI@o zLN+YOv3O4-><7cXAAc zGk9~L?20u_f6B0B4NZ$0VO`^&Q=wsX!|auC+n-Tm#q6a`e+F+^!&%E3S2W;if99gx z1kx?Q$&JM7_db#V=l6?G9% zao5#=va+rl)b;1GDwNrzAXS@;YuS!BLHAPpT{4Y>FBH)!}i$s#?T2 zVHx)x;Odm5Wr)ty|%K&aha``OL9R-GV=}P*Ng+wdt1!$&~Y`Rn- zOwrifr!rY0HSPtS@W}K);z>tvozL{M>En5M_M;Ik^SsJgE$7_B$KR(KWiy{mRBSF2<^GeP> zz!2lqF$rs`Qe`?2S8+c)p3B3w(;dcv2-H%;d8&(z3}lITiX}Kzsia6OiM`{Z)Ojo< zbrJ=g;3dn{0#nlYRF%3lEMlI?U8TBEn29|iSOXaz9p!nU|CzlmW&AG66|q;v;!S3U zu^{sei1e9l3t&)_WK*fETIpxEOHFK%V)`{(_nWg?4vV?F##`LlUik9woV6dfuhb3! zzHL^`i5=GRef){JH@y7yZn|q7X?-5n1wicF*|;9I4u1|mh(F#^`qSzj>CGd+ot#S- z|IhZEak1Bn9-gbo7=O)Ue1pfh?+-SHd&>>pI&XC1QTLd=gMYmC8gIdxYu4YCbC1|} z&pqD#?#2;!p0_(U?OlA=J@>e?_PGyDd9&Sf*SXj3cF*1C-f$>3{}^|BY<`P(R_rY& zy4$^)doJ$WS>ChW`q!3?-~9ByE}M48pY@(`yJBx?aW}=TXgPc9-S1jI5j$(nMojM; zH>?BA{`&AC%(|tu*6PlB*sZK{kD2Fg!$3#G;395ccb%KsdrrCS4EIN#x70n#d)Te5 z1Hsn06E*kf+U47ByK?&4%U7hgU3-svB+;~`_2pLg2(%wUop-hDcYm_8hU?IF_rp8) zyFYilmk)5Q{jJ~N>%P|5IVUmX4YhvykGwOzW!@b3jo$1h+^_8PmcHWtT?@0RrS(wj z6B}+Cb&q(My7x|YkK7--;3V&Rv2*5JzGB1e+{GdMbv=@S!}sBjNB6S`I_6NT`)0J- z?(UxQh|4iIH{`yr#bCUz^-1rfM<02_{mstU`7PdkA43Ha8*h%c9Oyjqs5^`ao#Q?0 z{wwD2(UzBS-FGbrJ+j9=22W0kUDVq!o;veZYI+nUx#7J?>Gvd8Y1p`@K)T@Ye0z^c4r(oW0Lm>E5&RpgZ@Fd!09e zX+P|ZdsqIEx6C~@c4dou78v~lMxe6PJ*MVfh|!FvGWT|ja$>XEd+(LLDWk;K2D z)qA$p{fC_|dsn_AcHRjnIg)5g6gavSPZmDxzHjG{`(N8*iy%WUyW{iRV{2u1e4Tr& zxBo7;RCAAi)-5e{k3ZzzP>XNyHr(Z%$p7;vJ~$RzdqV77`tKF@O|gqx+^&P}cb)z2 z`=)BRj=0})ymjAnZ=O2z=YO{?cF7zJ+0weN^~-!c*y>%+z+U`4%zGGrTN!hY8F?hJ z?`UG=aRi-ksP+3R{w}xS%4OGkx8S~|m72x&w*De^_6gp6Z_dZullOTi#LhX{yU&~d zX|4hCkFEdL(QkQkZuU;_zUMCYcK_2qfto~>7G@p*7bys_!*FtrKdl$j-|DD)JR63X z`;MK5++Vlsh4|ON0h;!-dy@CEcbkxaN^XDT5p(xA1nKiP#x5Ye z?T`&jMW47D1)V*xKdwXm**ml2Cas0|r_bCW4x{A3MdGp-k_jw20FYP?| zy~`$1)&d?J1f{-mqc`-3cY^uP{b~$)eH$1n|A!$w1f@7+9;4Y&?)PuRh`(up3Vj^C zd!tt_8@tcl(}H$Tg|km^Z`}z^ja_g8ZEVDKk{Y#IU4$P`xGX0LG02NSVJ-61S#?yMo`UblNB@p0==>}@Bw#|*iX^KJ*U@uG{}JKnx`|FVg#E4HpcLF|$f zpKy=dyKPJ25^utL)Gh9IXYY2m@B0!&b>22NQ*+Po=05ISJaOOve)ZhVd;58LSVqgk zb9Q;SHg;Z%d-tr^xcTO;ZE=i~Qd0x>KPw=aL*Ju`Mz3z-D;HNMZ? zdI&Y|FVZUV)#HZ%-&3ps{?761yp{L%{q=S4ed4gg-2FvbrC&V0=H4)b+xHijPF%qS z>wdY>Tjk!c?j7D;-h$X$=fuuGDR$Ng&tWY)>~Qy{;z3k;?fCr+F9m$l?4jpw_P&HJ zUM$dBf9LG|H@lBc?RV$A3}xOITX3Rx7jzTNzZ5(FMDFR_-`3L$=;;RqkA^{4?q{ZU zyZ`8{b06XBKKH=X2r4{S1Zhy?Z)Vq)~`@t#i z;cMM5I^M(gPsh$Z`2p{EICp8LHsi9cHpdJEj~hd;f;y>04c_peK_%UXVxsC{pbds*yknAsus z$ffH;|Mu+JbF+I?4W+&7*Y|8#zy8r(y*J+s?!12|G4%PCgYJ)E%RY>?`I|e}xp(e- z`3d5%JMOJ}VkJYfym{V&Cp}stV%{Cz*puFRHx2EXSm!?IdP`&T_=)@T9kI8zc=Pd; zEB-GA-9c|31e5!@_+Yal(|{`-?Twfb9+`rvfV3aAm;Ro!mqs1-4%*K4nreSK^{o3P zC$_33cp&}EGZhLRH!XRrJ6Z0H`!qQ1H8_1|r$@FPG7JBLisE;zU+;F?;TB`KJAgqi z<_mN#qHd`Eon{azHn`pt+w1Pe+WBU#%eCl_m-nuRQ?%xm4b}DTF$X)r5sdejJ4j!i zbNBxJ#6M82&fAyM1(M<(HF6t)ZtW0mwv627KJSnTi9yW4cklYIxCdr?`?37LvoPYm zIy<(UoV}&qPw!jpo$79fU$hh^digC^uOIJ%cLW3dkJr;!pPK{MW4Zuyqa-`-AUeCv z{Tg{0|F)A{fEZMJe#>+2g1vj(II5oqFCeJR6;21E(8{}ikGpF&hFw)Rz{Bo+1%v8W zoI_fx!&`dW&8ES*mNG8JhCto$*dF)3DZ@qg%g#af2Eg7DA~ilUK?`PVJ}sQB>ssAU zPrXd#zd8P(`{}~&+uWBA_iE?7)%&A9cU$eteRr`vdKQl3{8%3rn%KE>+%wm?{yO)} zxvpPxKM$AF`=I*+UL!|`t^ZvZ#F14eIy)a z-2TTn(Qo?5A@`88*L&I<|5EIN6TQ(_ZoAE0PqII!YrT8qJZ~8uc+JCA>J%4dlZ5%fb@y$QYq6Z(Vk$pHg zYh4d+K2clRjk_<;T6*o^itBIjc6e`x_ww+y8*a*ZUnfW8md!Ar?r~o2W8P1G;@$k9 z`y3V@cznCPGrR8jiTl+ZL+<@9{Ee^fSmz#ahxSx+?$6!WCHRE__rHtY%jo-$kFVk8 z7saK^ar2Jj358eLqW|gfyZ7|O&O6opTWHF*%X_W?=DXdaAAZ6+5x&!IZ_zit`OW|R zEpPo#Z}u+sHUNj&j{?}^UVyds_(R@_=;&P~vU~483Jd+zQujyBA^0VS+-0EA5#HWM z-Lt@Q_rG_>R<`VMpKgJypvjLa-afRs<7gQ7JK$`;*s{)j&(7Vr?sNZaYREmG91(9N zruSj@CCqNGyARiOMfX2p()PiE{xAl;KlcPUX#b0Rphw-KVi&d$!jFkR=|=l+Ge-`mjT9=&g@;vO*)JLd%V-|+aa+-KcSO+6c1IR_r?N+|5km$76Y zbaUv`eK&lo7B>$cFLus}kGs#H{xrzE4A46Fd##7uHyye?w&oP90DlS}7zn-PSS-j7 zLq_j&CqbX1yhAW8pP2HVeKgi_@@F5#Ztv7scZ;{p{r4T9&QH~Hk;J?;K#Cm3_T`}wyMW&h@I^2AS$b+)+Q z-{~E6|D%M`{q9FvhSq;}&epS+mEGf)y4AVs@4N5*2mUtJf`B=8*_!z1{$dX7;()i| znhjUF^G4iFOCS7mcVhQ9ZoA>WYp%cY)!VS{T-LVXfy-CGa(wW5V%dM3c<}a>UwM4Y zeGaSWzNw`T?7?dH%Juv4=$&(D<$Hyzy=%_iYjWM#6)Xj1mVSuW$9uPsGCY0aQq=m$ z7Lxz3Gkh<@-#l?>z}-GHaNC&s_vm`%(rwi9SGni=x#zEP&kvyI6+gkFcXM|?K5=9{ z-%x))J#h$T1QdP2+3U_7y2U%&D|n;VtaneYU4Nx}>>Z!|847=}g4i+B@k6 zQAyMqq2B^ojVRgLQfW))M7CHI?*d^aP@F@oc4v=ryRoR9%bsQIe<+0O2++ z%a#4%{1zbE7hm1h)78C!Xqoi;%AMQG6~v13*>o+N@l$CE&R6k-*v8M8rs-V9A4^ro zoLZ)m9Z8qQ!R~SJd@-RU!8aeVvqEWtX#g%c)$w86RYpKj(4wPrb!T^HkDusFqW3nR z`%e1pl`KRaJJVgW^A8>TKA>-H1z&UU}OuXlCVKo5oWi=(MRUGE6ERzO&1fFvThA>Ike ztBz9$bEIS@Smp^rZ)kR16e{j3=6QN%e4;*L=za~4S&);gT7`_09!nKRvm8wZOe7o` zFEU^K;Zi1tqrJ`|)m>YHc&Cb);YoC{ZoIf*Ihj zjX;vzj^i7L=u0-FHxYLx@-wx6JG7>Xibeu6&}q_k2z9Qw*dNF6-8qPdAvxKE5|~y< zZRfau)d%kWcIb?gEBX}61vdh9fDJ09%aab~gtG%kxep!_-~D{G=u|R(rAo&f7^A(E zt)#QbQb(zf$`w(-Qm4tN5U$t(b}9l)#~5uWen$b{v)^U>fMe zF3=4e7?4WMR2W-G+F~R!0ZxtNM#sTmB{9$$FBGd08!c9FO};b?%MKoZW(7hEqIkVQ zfM<$hJ4|~Nrqk$sFX+)-DwUN(t8>|WCc);+6ctMx-5dTR?24wO53nTk%7?e`ie9K99q`e^QrMF1e@$CR3Pp6iL1IgXc_5&QjJWq`Z;{; zfPEWFg8EW2s6u(?tg9_;~>H3)%E19;CPDlWE<98*>B=e5n)#tD7>h7c?m8z4&DpkypRE{t9>AY|W`Z1jD ztMCHKRK+Af7p%^CXmBcn1qdhAYll-j1DZ|EhXAK=td}dJg8{ZxN}~>}c0Bt;Ih8i1 zJn3JZtBonij5Mf9GP*b(Aud+4Fxtg**2j7=j77{TOp<`(JB~g6>b`;XtxL{}o&*_(9i8p{G#1!eqHWptdDBWDDRfL`IgO0JM` zDB^4S29xo@J}`frIaLL z0EQP!{zP`L$clw3#`j^#gvBiQ&{kG(hlLNvmk==^8JGhSEihplx>F^hLvfhLiEQ4f zji%uT;J^>$Mh#jxuO5SIH-xpd4TqT+n@9+^${8t;kjJ51LokKiscNmA*VN7;(Ue*y z!Bbv#&5E2^wWYj@Y?qTx7qQHZLGo&5>KSM*3}txgfkh-12CRjZs$z*Nq^fn+i4XX# z`>Atd|H_foo(!;>-K%n`u0ArBrE(gRB{#CG2m+JuGU*HheTbbo8Aclr93soo0V@YD z50lIccV(~`6~R1sh46w217zvr*~D4v&vQ#(^gm6PhTNFDH>~>+M*z!B6zI#S?4$ARe7<9UIgSNDuRZMXasn zZpeazeQS(KsfL6Q)TEW?CkW(RW2H(z{xQwN0m*IN!y@=AU*7qbR;SQ+MK3=^Y|LH9$t!HB{M_z zH4EM(Cab)iaA-lm=xsjJn5Ati(~S5`OJG*aQIXH8X+ehSu!3?m_#in4p6At-RGHU& zSi*AN96!TORmn;4&8>q&cv8(mm3Tq+20j(Eb9)A7)x2Pj57T;PSd5t#$Ki!kaCl$B zGGBpIkox9o@Vl_B8NhBpy_45*DwBh8cvG=Ns+s+Ci#tn<6tRC4H=I~m?GF(ADkf1iwf9= zBd4bZsb`m2C#PY=|{2X$cpAxoq% zFc)Aj^B(IE<_~8YOOHQ->=Mg7av;hTWL~5SFu4=(H%PJ|>R31Z0(rv&S_Q_6d6$5+e}J2qZ6Rd01p+JVwfnVigfrFH7s5*-*tx z@L48>$nc~J*-VZW2~43VAM+BLpDR(cIzE>z^wwMQrNZ8-n$1D zuaL?c4~x7F*trQHZCsDKyd5J{b^elWFxX?F6%+|X)DR14jocZioS8XNgJ2FJGn$Q8 z%isn)0#d!Cq@asts2K(#3k$~BX>Us;6McgN?VZWC0qoc~M}ss0O2B@lQ4QvKH3j)7 z>&^w(mS&dU=P>R=Px&U-@afpuLc-N#mu7ix$$jOT)dOB`V1 zg9mW_;3bwy`Cz3bO)p@VgH53kZ%C5(CD@{2QRbZ%91QXqAeAhWBbja3Fmd2TcLyN9 zKVgW4Wd&(n7^#i+w>cy(ku=nK=wyi~+(X%7;ss;xdKKKSYqHqPlRhORi7@j_t|OIfbSj!=FZ8Qdg7 zPN+?Kh)o&Gl?+Mdj$9ELmG^fwaBT!T#_ASoP|R){2-3q~I>6qVkKJ}YbBS|3WXlJM zYqUfoS!=OKs1pZQQ;-vOF`N!&g0BC>(FL@2n%OfwNYhp!*9v{7kQ3K|Wvn=Aoh7Uw z2oyO?Y#)mqIYNW1ii|fqx1yTESv-elRVPJV#Tw5Gf{(>*0Q)g+rIKe?7;=4)6iOD8 zcO$xWNl;&oSxb!aLaMVB*i()Su|cQk9aeJ*8~OeS><&3FOB@)<1xBk&aO!BvvKUdP zaNgK8f(XHyAOME-K^HHR6lY|Y7oWCOeF*Q-Y6{C~_xv1I0Wg8j()C71^ zPjg=5puP3MP*N*2HcK|_VgW`IIQCP>3s*GBVzhLY?FDcgf&7qNZ=xPuy&9$xmyz5l z)@z3npRrqICmL29=2LuvwOC_`ETjRJIotC-Me7i;rEp9(Qw2pwEB+XwvSw+v@lBqU zE>F7owf82*lO+FwnXcvneX9m=Y=j?H5@X{vEIh`CPvx;2H=2iuS24T;Z9)9eG6;G| zD;@c0eLi`(SO!R$5XuVN=`yXfzK@hyGBxmWM;#-oFp{(pYNtpV)VYaI$ooV{bD@lJ zDPTnGk~uTU;HbimG5!$n5(7R~56uOpdD8A6FuBI9lhjD;PK>{bQecC(r_mH~MP@SQ zEjg;>hVu3RN(h~YlgdkyL=bt<1Sg{c9pg7ErFn0_ImZ$tw+kc5CL1>8ma%y@Y8FT6 zJXQ0Bc_2NlW;|zDUk=^zYXv+w89RttSBA1Y{b9t_vm8DKS>X+QuYCbC)#G5uT2yiCH+Q zS5ieI7_{oJ*>>RQR9nrZ zSC=YV4B2di&%~$TBqPiO7XhI@LK;3-rmZr{XcMMpi%SIHN5);()dP+gR6}sbtRcL14pTI*BTE}+voi^sK3eK9=U@W`LphR9VY^sCSS(j8kip@t zi-v$vh3AUUwwMEklp!eVrgYyuRX4FcqL6dBYb z7~jNXIXGYz7ET^!J50wsp`8jyMbgD*MwaD-ICMwcyfRF(lclo;5`D6eGon3_1rd=N z?1ytk>&<3{rcJ#dAW0mXz>yJW&if07eIYzpKZ@|JImDo~in77YK(g|h*b2GCVsXq& zMZ;<7%?vYTX2in`4JeXM6r?bnB}~N9rBE$dN>w1E?P~;CbWJDi>T*>PKEY>mC_`IAZWoMwmP&{`elbB;$0bD{(?20m<4go zV#k@Q3w&$r1qOjNqLZ)&`3Py+x6zoq;UOW*A)sZXjrRF)#$dw&9W+Wg^DIxx7B<)t zF61qth#^nls|J6g9}Tx>73e zYJ`0%9a({JB~S|!LT|!T76dqOXM`WD1uQnUn_ z6C%eS>cio%uL?sUhgu0|%o^fq%ja;o5Q(s(O-EPn8tP^1IHFWocGDDKMv#G!w9Ap$ zrLF=6)zlq^XIV(e6AFixitGgPoD137SPAP^8u4KY-x zr81DmI*~&t4%=KDlA=E`zD+UeIFwBdj`JJWMCd+Vt0&pSv^ht@zG<`Ti#x3^0iZ=%_A z)9rar7OR!4s@M<+0ZhgX(V5Td2iPTEO}ii`IhL#H=_!_#WTK<1J!#zPfh-FS(*?rL zhmdR`;BIi-!{iwmcM(SgkPj9nipG+;ACPm}P8_98IwskH6eL$mR(U6cv)7(@cUzL3 z&I8@u3ha6FI5b+_EFOQ`}>dh`2 zYjCAj%5!2%Z(njPX*yi3ETu}dcel}GAy~Y}s$@qI`%ml2h!{zCC)AI4kj3U}IGblY ze4pRA^oL>0(pc)Nc&U|qF{^xVYw5Uvu)*e&7i-#;&=!vmYR5|B`OIqCRpCUiQky%D ztd&vBaxOH-YAozfF5|S3p8@Yu`Zi7)5UR6Ou){cRcV?L54(#9%>cSq0ynON+5Il-^ z_aW5EPBCxuD>Y)hS*yhPrepUaQ=hn}&LAx?h%O`E&hMvUco^q2a*mL}QlY~qaujI^ zH|s6dS&1ft1c(NBE6J?0MhN!H${0draJ$8%5X-7& zr&?fA@JWdEka#axz+0(Uen=Nd4T3O}_&J>E*fS}|B(zP#@jSVUYU*ILwvJ<|CEtWa z2I+MLjfb=(T$~vyL-B?>9PA}y)3>Ogh=c8*93l50Fi3}DPEN^7z5fr2MP&uaRbRsze zl7gABc+^T*6_7bVN5ph|1wUrIz}hVt5^94ep#tnipbRUoJ^8HB`_@>eG7iylC`h$?trI1W`K zUi++H&^46UKFb)pUrGb3?>{AEPh$oT=C)9A>=TbK{9ibxa1 z(J@q*MYjX_bIDFrnwbk`WQ}x=NtUEl9%VRiFsE}Qc9grq0V)_J^7z%+ro))=VYa_| z>SG*IYdhfPk#~8OZg1h9nk|sz?@-7SNqlrFqv@L+1AU05QL=;yOqkRr+Rl)TM;3>Q z0d3$ZV}O=4dq@rw!^tH`J%K8ZWh%%38HTKuM=?Efo&kJlyIPx4}Z*gX9mG zQC37AE*J+Sr0l3FjANtZUg0BFiMAf~!6+~e_o*x&lbCP9A5~;b;D|CqMjvO#pw+iQl5HJa4w^=U{3PA_fxhjHsblS_iFXAekXwJLKj&h!faT{$?Qxz+u z@Yn8O@xcVYQUFUZX?7PV%mdWmKLRt(GS@_L+KTh$dxkZDhGXZSMrH~UbLqs}>^--o zDtyEnWE1i5*QJM6*__NsF6-*R z329eygZd<9w@xdNE+tTNnj*+ds)gfk?B;@_K#1EoaDsZl-jaI(&7hMB(nw169gHJh z)=4qfE##`yTfVwbfgDPS;iTObCkr#lnJ*^JhhwAh0(F5eC(ta3mpmm3rXtzaD0ep< zj;2PH1e|5k*4|BfeZ+P9R;{CX7~@7}wl-cVg1zkea@0Ew1_-lFKEuc)Of$%9^8RGc zXmKS8rUXWW+zF?_BB@B$q+MW_+d1U7;RxDa)s^gNi~DWe-A;ZO8GK0Emu)f64G|=h zz<@65b;7|}Ez)OtCRf=&9EYpS1_pr}+V}NwtS!!;#kd-KLA)S~;A+5h77oQaE}V9Xo}wc@M^`NhRiq2wA4T(X8h-m$x%KF=_a;RYkIl`Fs>iD?F7@qPp2opxOfVc3~bl zVDCd>$Q+ZgGf@{#G2~DE(28b{fDrk{vS&BG21evO4Ci&jN@LiZuS5;i?cbC zR%tUvNI3bML=JSF@{ot|#j_>!{y+wsV0j}2Mp|`2T&Flx9tIl@0%JhSD2RxiNA#$H zxdqDyB5~4do$=IoQ&(?Sva7AT>zYoy_+)(+6P-g)WU>r~AxoY%E_`@N+eKr7$P%zq zxQKURW)p@jL9RN^8LUpCXB63fCPXc=MH?5x5?N&7`-u&02Sp(s<|zzO{OT0O#(&7yfLCr3 zqFIqDPVlaanF6@gi37_vleU2kBP=k^SP`EdM|>bqgc&J9umCtyFBMq(U;_CJ5Hw^O zwLxBFM@%SC-WFsLr)lBvwNV%iP{1z0wQd{iPNKRolWiujlz{x16ar?C2`XW)g1t5^ zhcu}0t<%h@ZZ{;^ts?(|NDvj_RXo|%O-@356f-ELGQ6*cD%z|ll`?uULY18YX{)d) zGH0Q@O@|aQO|cSCo;-rM^wJ^r3PyJw&N+g?K+X}! zm#bF!Jrc5;6c-_LOyUA2LuWW^1V;(9>odZ}tG29V#t)`98vu0D5OA?oV+3%ox(SCW@W-z z92hk^ZuARkokB9%B&KR!Z zdEYo=&xFq6wBg5<1r_P>9AMC69XRI*rE=4S|t@$=+(Qo>BU&nFiTD-pZC=FE~5i2M>su%&1NzqyGQYRMUdPH~EA=}r zV{3xQ1!8)W2qgsJ9 z*r4VLTLRL%DrQ7iXpYQ=$j#)VWfeVK)YwtFXN?FaLu4jQ$J{-=y>4eRHA^6E2051M3@t1{5AF(C&&-w|RepH|G%` zqdf_{MZDd&r9J@5JW;G?My}|riXI0q&B+EAi&l_NV>nZl+*6WR5_Wo>6)YgThySqk z3bs3$yu;Ck)mTzEazkRd&|d(#rWJzT9mN(r!S7wt0!rcdE(Dtg-~~ZK5T8tM;Q%I9 z0IUOaHa)zhED8D$q|yk{hF?9TfEk-0DlvgO>Ww{S%9fxmZ8QlXM7T*9U853gf3a!8 zVhBSEO`%EQx#2L?!c7;+EGryR&C$1Uw&Y;WJSCS}60q5HKwL~79+V|#-Yd2*N02P( zTNsq&Nr3~OLx@#)1Q@T=L<>+%wuSYTET4JlnhtQVxkEJy7#YrNqc91budzatrXd7x zU$vrmSAm1RXk>gJR^T?XQ5%6nNwG~{8K~bjjBTegGgx48WMV7?E#jC0 zti=tq?7(hOL*5@S#Ud$424e^Tef*T79GufalFVNKra(Fj5bqpuPF1DdEs}Pi)+R_4 z@+#tWVTT!ZpA09sNkRczfb`nvYf9{78i_%^71l$dz)YAErU z3^yfanF;Ohs}mstbIpv-jfSWIYx zX!6f!6eH=hKg^g@uwVj4wK}l?F*oYbp;gFaGdXK|2j{jgSTJ|-yi4ZIpSy7Wg3IP# zx?u6#iwd>zVs;sh4Jk7UxAckSW%&N`MT-~By=avG>svVYqLE_hB4Cav`$e!twDjWH z$Tl3fOyEl4qiXdc_%Uh3(MrW-(BfhS(PBIUnBIa%_|iohktphgK6k@C;)Cn8i$>tJ zW-sDUYqo;&cvpM9+~qPh{={#0)9C^Rns7LTj3fb$$g}MwBf+a8T=1(%30cQNFBTa} zs+g9MmgaAtNReqa<}3jjm%Jj_J~oK#hBBf*)ib$OFl42gzW8 zX)!L_T$NzHVvO;cEgkjJ9cAucMe$BP_cju%q%>bQ5i!&gCFd_FNk&jJYy9uShh{?%7jXnmC5C}OO;bk3;2KKJ+?Yo+mS91M~JHVQyDLZVPGznl3XBeIBbrEUobTt8=xWrUo zD^TxQrzJh|s#JPhOujOdA{s0haOsh;O6Lloe*(z_niLwxUJV;_u0+C+neooc0DVWK z3Mv^N5X_bxD?6Tyi4G+%Hxw!8h7dZuEbQ8iNuF`4r>Cg?`pylQQhg4(Au{wMS0&Ay zbSME7b&_2jW)B^CJtV;q2~@FR7t@Cva+3MS?`z_WmEV=A%2)3pfrw)xvOkjbNBCff z0y=UIDUK;;yvs?pE)8|>+zcSXj~uilj15LN8fe@&I^kC&H1Cd1c$H2PR%e2%-779#ubSL=MMd{)!SU zY#hKxk~F_?VfWQE25DTzp%=VNERfD+fHmy{R!#EGU$$6~0ysyA86&;Jj*Zqc_Gsh$ z<}cR1GScSRbBBY#CWEyPU(7-tAbO{lHJD9lJwF9^saS zCc<3hID34JHG(Xn^sPF{Jb~%qlO~x%_~jT#gh>wXn1q4COTqX6M+GmMA`cGoNr#bg zUQ)M@g(0PVteg)~un}MLfrpO`43cZ1Sw8Jz>efi!;*ptkdLV*Ei&^y1OI?VOX>IbU zY%Vl}nH_n_f=*>9b%+ld*uP^FWj}PZV6mg8Xdp4AWp+4hm)dX)VAPb~Vj&G7KYxvU zIxBdLloFg_@DV5cZr-IcRwNDNBQPJ0;Bl&ggiUnYjKGLlGiJPZ1s=g|rZ9OC$^kM| zIZMhcLYNG1G`n+K^lK&Ru=Q1BY@3FHgb9jSI5UE&dPI+n{20hfQ3?D`1|pb~YPby?Vws`2a4IHGio8g6 zn1#NyoKcQzJE9Qgt3|a8OdFvGOf^plBXKm5-c!W@-8fNW`5;rqQi_$3-h~w|%Hd0p z#7BrzG77Yt);T>14VF^1)f|p6xuA6pKg0xvDw`_up%|@d92tXRB77S7Sco-{+tUZ! zp}0uRgO(yEo7TTB_`mYSEnNbV*tGE^jM*T%VLO^@;~Z;RE7)T59#NanDF7$IBhp1* zA#;#RF+)IMh>dG(GWmKq(*%rQy3mH#oXEltCaYcE!k!YZhh~jki!*AHRZgv-&K6Ga z?u^RPSdDQW!Jj^8!@F;A4Uwp{W`l`aFEMLLPa95bbfz}&1RasEli>`jVS?g4JRP`U zNT)}P4&SkaCYaA3@)ro`O90pyQUC$|wPZ76<2Fo*A`~SSzLO84EHp=tddJ2ucn8xI z*9AvtmCKc2>#-f6pZBSnA00v(hY5(A1bh-*$}EBFPCtJHpBer$zfwWjyfB6^RK^ME ztII4haME}Oj0m5681qP`j})8UjK?Nh6it18I<|t)LlX=uNak`?&e^Nd{>Vh4quEmA zP6d{qT)8UYM(Zo>e!z8p6P>gUhbL@{Qkia$x89Y68z9LUTgS0I_pwaEmw@W=E8_UZ z2jv!0<|zpgRtQQ>f?Sx_4^W_Ix)_%EYd&|1PX-}@5J4OMCLkskr1Q{RIboEXCw9Up z!w1eE#SH07g1`s|v~tD(dYaE)z(8P56raJMA_+L`)VvDKuV-JA7ECaYTyQZeSQ=_I z5E$%4b4~iA)!o_EK|dtqI8Vv7#Tiua&7I~^i?d0=^Q7o7=O-U!0iv!u{e)jLI-dks)FP!#cgMf^cw3EJ(Q(i9pPDqhsr zkQKIX3Zq(_jS4DbOhvtW?^-iFDk`XiFctOg$HEU(R8VEfRMb1294fy4%r@xEv=yj+ zZ-kT|780Ier@vXJz20ioW}VW>R#`SH@++-cY>uM2IgIAxGThO2I6quP(f)>IZsJ>! zR*7({&qx(*-QwUku4n%1kTDZ>>_{&wLseqVf@!V3%Qo|M?rVe`RBh&1juY;x0YaY= zoE7&5RTjyhm)pT3)A|c}q&9=~S8tSYBuD=v1ESigHiLWB8&y)%Yk200klF&)cD+&3 zQPciu9i_g*{s<|xLv4!=@0toX<-%sD)U~{~QOl@a=$NYF|L58sM!10z>!5Y$KH3P~ zMksMQr6?iN>f*Hqg81@claczXuETy;Ew~b<`H8U%?Lw0uaoo zct!h9Ht7GZ2K^@+^nX`G9-{qQ@+tn1zbN*We2RSoDLqT*e^KCu?4A0t%=Xv8tfT98 zxaDEaZFf$!hMStwuw<#NRoP*ESG(~GS%exIfd(z_oodiB%B65i5JTJPLX9E?b@?M@ z8JgBRMXdoL!`%b>M;jp)Rrdxh_cm%7WkG|M2O70J5D}?xOK86mL;YbCDX7yomP79X zVni%QwENB4eFGOG=qO@2lpQ~{UR7MdrPf!8*o1yr%G1`vi7d1mBUK{)gO2^G9orAf zu~t!>TAZYU+Nz-xN88zHX}bm@_BNUELOb&a&fzMJ)$cCp;IC{)aRonOi~1G(J6jZ) z|6OMpihNhDSZx&i#9PcG%tOIXOOX*Hy}SNGTQN*t?fzBUeNw?kr7zc+c;-gE(XK%A zr*3@x&ib{p2hUa%HYwPDfhi(f`=|BpfRsWv6#V2{>nrNr5pT0SDyYbr9?j$6uTJ%l zo$7#sic*WSSwWpJX8+EedZS2U_P@SSZxl^5R#0)|dU~T+qMm|^FxLw(HPDX)PbFcC zGoYa21LW?s$klcBj-Aaqd(g^EA}SpbSy%c@3io2pe9Ndig;7+du+ASILU`6xEsT_Q zUu@8Qx~}^h1=jAVFYW*9A{Z&QMTxj6WY!Hl88mM=Lud*ccm4qq^ zEr`Agu8K3Y43me-bS^p%G!5fL)fC6etP1-}1yp{cWtgys3HqK~F+&A!u|>Xub<*^b zRdk&aMDv*jqV9+B=XyFB#Tuw7sMvD7Futb=QgbbGaRuv;`?*D~uCo^+R!F5v`Bl%m zU)lls6+H4BgAH_P*Um+9vqE@GJ5_}PzV|ENuRG7QrE1#*zWMy1?4trJF{z%yO29_K zK=s13Y$Od-FDwpJ7N+k%$h1Fju6Y9EI!k7Fj+N$3I;;N>tWoRVM4A;D6e&Y*4eakD z0-k1tbW<2BGz=s4EgAV4i$PpLr7MKxz>PZKTV)h340rZj>EuY^0wiABz1bofaZzSV z?Yi;4e&e}PU&m`;9+ZyLmY#71m9Chu(os2%B4xVL6-7!%B_fKHj)Brghlfp(!MTfhmIaRa+*S6|^SU|;_gfYy5j|eJC0ji@obx8YqVb?yXOyNVe z-hyexR0%`%!jz%1FdnB%A7{xGlU7jCz!Ds8^_Qagk6CkY5qtdT_F{kV(e7BUrb$sc@*4OLr2xq5r$vG3Kd6ssn9hgTj(5>Pt1br!1fqrk) z)@q^PH--%qid1F-mEWkE5Xj@ksD4Mb2;Y=hJ|kD~LBSp?qMJV_;1_IBT!k#aU~^Wa zRb>JURIyNzKv5K_2%8@lWDW&L1vE3z8w8WfTiRT)u~6`GTa-|+U5d=c zLhn8~s%;YrJ}pJ2qTa=FwxWW^+M+=PkCP(PR`14&wylEimLgM8@16-ND%e^wZB0eJ z`$F0FsNjoIWGd?2`?uPP3O*)9rlNTq{8gg9#ZoY-;7wUmjT$DW_3r&rifyfeN=Z0R z3Ox7JWpb#f;G=c(O-}2bP6rhge9e*|soV+LU?tqQ7enTmS% zek+rk6#Q_VO!iOf-7;YadQ@MYe_D}1bau7o+ z_!G;_egy-zMO+7E+i8|Z0}5Vgi#95#j3R6YEZdYTST7XZYZ)}4;Fm0eHY%trG2Pia zOZSb338*YF74=SMjByoot&R>T7)(C0D7DB8SJ;_u)){`qV!K)K@+@AP6`UnSo-=V^ zs@1#Zv}r9-96dU2;U`)W;1gMoP8K}WO27^%sER`rNJc1cN)=I+B2(Jf8idtXhgRkz zzM!BE4Kgcrl+7s8L6ub~Qc!0+lWU3{Duz)*Q8T>Mmf(y)!2qvKikDgqa+^g06;(o_ ze_F9s&HumA2q;xl^MRv+s`h3wdZ(5h6`PSy7xTJxJs@8~$)~hxaS}=>U7%5Ce|uB@0G=e%9KoPVnnc&eP~M8lzXo?jk$2$7IX8sT)FVua`Qrc;Sc3T*CDPM z7K*&!icgU8KX{W0D(*4o#w7|X^$`=fcSEPp6tohSj&K#- z%6v|^ihdrN`W-5*jKoKt7K8eqa&6dCgG$k!)IPjhR43-_I3V^|Y^sc!w)B!25SIcwwoCwn~Q0WJ83a?FPf`8sMnrc1$*ejcBWN3bsy^wpvH~ zX+~SEr+qb?O1M%3yl)lTqWeMYFcegC0RLat73~m3x~}LR4@J>s5sCNM`5{j)x%FtFpWshmAbI?c`Dk`WOU{f)yOwpNb)|mx(Y*svUP{dMo zMD4yoc=ag}!SCCZFs|U-5rYUh=3$h+7HKx1&Au$nul)I*0l$%)+ zkL1FYa-%ci!govHM(4zZJ0+l@v*N-qf}a!w9}DKC;6W*hInq&G+u4GAAVhyS^^5lX zhtsua-+oj?eow`U_Wl1C#Zn1BN4Sn%pMoj?B>Z7YLf{^n3ac9zh82zr>%@z}&x-gT zk}F14@SC=%UqMxthEl%w&8G8zkSpR33i_v;N5-V+U0O;}QNikrieY43Q;}Ojr z|D;fQgKfA``zi!QVJa%B&s#nvzAxZ_Z57!PyiclV>!#dQ4C+xIY)V4y7TtyMyz4Ym z@-K2l6$MLzjFBh3tJ(<-D!6Ax#n&GpsUs9@Uz-)wVT?TKosI-~Qt+mrt%CJ*_<|LGD_ z8SxASpOPXYC3>d=Gzfe|yYJWTwH45MsVQ1dS+oWetZR4Yj@O^gP=oPq{TB85Oi!8Tj8S;4=#w63Y%JYWlVPEG60r=<{Hxq|t{b&d6AS_%gwsut5S%13MzkH2LxSrg=uu1T!|UK7I>BAHY#2#H)*+2#g=8J@hNh}APWWj znp}C1c`Ho4tL2J%r>rzZzmhB0GeyB)mDp?QBt@~WM_3V690@mt6<;`1VS%M;isyml zW>_kFRbWM%$^xVe^l?FH`vP+h;a6~l2;v*?PR@?jMW;=xIJR2eCKOa2+qzotLQq%1 z~wSdfeKgq=IUGU?<Ox*IzZW#Qg>U+xJhMK=~QQ*R4!2zmBdXtO_eg# z(n9EPuikQrib9KE?@5#0|D~w z+HtB7V8WVy6gCipEd>=99#HAHHqdAVRkOLC-drd3W;x}P-qYf}c52xjHeyYuk@Ty#~n^*9&tIQ+NNWmv;(V&7~k|Nr)4o>UcYqnxS!8f#`Tx1>DS?4-m=cPeswJkaph^spaBy1h zg1#cIin7$TGu@=1wr-`q&VEOW-m3`0%&XkJH)yRA7K|AY3>D3XZL7F~pRq;#3VzoX zZC3C_TNGFDC0o?5pkmU1g1aQTe^9P4nF_8v!;l-ZQ*gBu8KUZ)Zz~Qe_-R|TNx?7J zqCo|}IHNng`=c}MxC*|<77Z%+aa$Cjs?O;lJEx?A9To{+L7j!sHNCsmR!l1RIa}l_ zs3@DZdZ$<;u&dzvEVfAng9-RyvEC<$FSR2k6t52iMLOKmbCq6+sk(T*bQ(vE^wiD;|HJXQ&2X^UZ8!BJZ@q~N3! z;k0z66Z)s5RX&3v3hoamqLfgMHi+75N2&y%h=M^!o1z^>D54$JF4V-q=NMgqX%ctOM^wyJ zc!n+V6;$jS5@4RAxf2(Okmz-@U1 zH|0Sw*NbXPycD{-^vE~ueA8*txa4x{h^4S zt!yx-m616`=@aNm(EkeC{}1h$E2hsBS23`|zne~}O$hp5+MxfXw*Px%9J2F=B4hq; zwqNPf2>+n}71L*nUly!gQJXL*I0WskY|!q?2(63K_Yva%#GK2f)h7zZyDZY~erfkH zxneh?;CAt{IH&su;yAk37~9N+XUI*WzR)}m{(fD0o^SoP_!EF`EH|Zkr-INZ;GkQAK>n9o z`F})&g4PL@Umc0cl$C*=M16*D$(){%E6abF?^;Qba2@YLi-kJbT&V8#72;lVVc47I z!q*?8I@gY&zP;<9P;Y{PZ=5@=1M40Kd2(~7^(Mdu&7;_$W*D3Q5_0H_vBOrYGi-Na zg9`4jMg4y);H|bOuHXl4QU6B;{Jbr?=3fQWSz+51Mk+jUI(yW4zexyAWeV%G>4-2q z>qh66+P_W%NnT6GOIE=BXU#MO7}V?Dhv1j7t;S<1#?mGeko$j z3ae>Db-PupM1aH<4UmZLO}-|GekY)wf=9_dzu|cIM8<2ky~u(AOTD=iNHF1W;;sLwVo^SC*nje^>JLmWDUaKW6H zHyAH!SJ%s4J!>NyaRoIlht$y*9KF%l!Qp&tBriMHNm-kL7swT=soi~_3rMVqJsZ8qoUqD9#pKui@~$yQLkJZal##*NJ=9QqHfuB>>o z?K>XrD6+zwF161OT7}0_4F5^0z@wQr{V#H(LvZ2iwIn$WH>9#=?E;!u;wlm#Zn&og z^wti7R(`aV|34UBr;D+|g41C50U=T_{AL~A6LD+6TYVIa6=DCRbo^eq;@68lCE$}m zk&g9TP^6%afo0&KDZM#8z)8U+wrJ=Y0XGFjVZwbjf-nI%@c})_SC?rd{jDmz>-SBb-{?yDoL&VacR{E#b~pkaI;p-taZU@ z5kKoC>GoH0orQYuIn0}TjyLx$O)LM>&LF9vwr?P7I)qkjus!beY&%OTxK)-b2!n!?wkWQk zBSVs03wThjB!0%5>0I#ot%8qPgf}Xv zC=wq17U7_K*{lS#)9&xER2xuGTTx%p9|P1{&)J3v1(jXk-7}4N_f&*;eZmc81&O%A zFJEV{1@jdAnG_+0Gc~O@$}`kcDkyhQ6lKY#DDfk{r{Zw8l@{NVu|I3k@^!fHS$_D@ z;iLyM7y29S8`S#N&i3o*k>jknjxP?i*ocKJDa$IU$aHNGFfSlrCy1vltqyeH$XjN43*ip*}exAyhDnPb*jg;o^4*~ z0Cd*$2ZgGSSn3WcDSv4tZBW7ANKvF4CG1H;pBe9sXyK`rc!N5z1woO5mr7A&3@7wY z>7`Qe+Yb&Mwer9j z2BU}M`uB1@FgJ{;xsS_pO<&Y{nsOL!HF>rv*(F!~fg1ejdGSCQy8WkqxBdJS5}k zZ#I1H9P|9v^UU=Fa{Vj0#?Lq92ju#cTon(chyHFuGrV4pK1y%>c@(9u_G_>R{_4x^ zsd=VsRId76gBLC_<@$MnwTsNXelg&&OU-@xa&!Il73QjMbA?|@)EDXWb(_8RY-|YCzDpU3axxOUVpr(Pe{5SIaxOP*nuN;KyAKz(8 zPLbNm2%xB*STHNpIpQJ4N1MUTu0?vk!!fV{%Y&WHRefNu7^qgo?MTU>#1^8 zJe+l=o&Hc_v;O~5#t;ASX}JEESDTWj<*L6T`tNf8Cu_~~_sCU$KU9A#G~8eK_ddhF z^ck+dM&=iu*QM)C&33u!uRk_x-z)uWkZW4|4K;XH==USJ>TfLS4=RSLI~p~=K%y-d z%2mU{6LPQ7s5i;>TVq}tiqarrxc|$geYl@5NcrP(ZPstNzrNqIzxN5=;r=x6c(?Sc zQ7(;yh3kJ`>itlz8h84M+`lSU4ONBPYaDWw;G>}<4KIc3ZlzX3^Q2+vpR z{aotnc&`fG!u6G|nvtT%rr}dzJrNGK|3WCGLh~tdGM*j<>#46Ew`=xFxW90UhW580 z)SqTSXn&f>9qv!FAAaBV|21TK)U*c8O3<8!@OZlfPn#dmL{2puAlzQtshs=Qni^rg z=m~bX{ikF+rMsSrA_FbmuAA(XJde&ovyN zdw<>d>n`8a3jXSNx}U%8I`izHT*LjpUVqxI8NR{D1`2=de{I^7hd*%p`B78;Rk{9j z%-sJ%t}QupAO4XA{dTN=o72<^{&vfF3AySoRixxTBiAvxhQB`_^kg9Y1%fNG=6<RX>0luHRWQCD+Q;m#cmkJ6u1^XYDu4H~rji_;ae^{`L#KAC#+p^!HJ@ z4}bAD+&=te+y7I1^oxiKD`q53y3kV@z3RD37@yza-bDcPU`w>3>%^Rw8kW1xl31hq zhdB=&(Wv}zXXKbh<*kl)Y@_lwI71D~J!kDnjp`raT-UJtNPNAeQTm21Q z5;D&$KiXN@u>2Tj>7M$U26mleofjIGALqPq>)c2K*E!yKsbTqS=jRQ}PjH-fHtOd@ z=fJxfmCtdUy^YFGa=eD+Cr5Ck0@pdEN%90A=|fMJK5KUKv{JFGo4mk4ydIOm&C6 zU#hP!vM+MY16p0F{@$C+{fXv+ADlGx^_|(zNcqjUQvGM7f35%LQeR(8)$$KZx&F}l z6QX~QNFD19)3{HC@ca?VX@9Hr3_rAegd!@c3dNkVTgQ=pOSJlhu@I; zcS*Uv6MK|&^fBqbe3PlD{eMpC>xtd%hneT!mih;z{_)cP52e2Tz~3`s=YAvgUy}OD zucLu4(QUraK{f3(DZfj~wg0zC`COrcYRC$dHl!pGTV1{}RgQ)(r2nv}OfpBm9&4$5bf-PmddY?X0O z=lW4PpWCFLMNP_knv`!q`RoSkzTc#Ntx5Txaz9bR?Q2s0aFc!xHYxvRlk)#;QvPz2 z^4~NmKl<>-d^x*G`NAgUtD2PeqP&qj4>zg5rAhhDCgtyKQobMMjmCWp<#VI#a=y}} z{&$-6{|eWi1lX{;nqF`3=q<|Gg&Vzeaf@IXNEwNFzR8fby9X zGb1l+Qh!a8@r@;Qq zcB1>Zlf1@sJ`LrK_;P8J`p&jge&O}iQgL3|DUbRixqK~K@rNh1uL})dWtv~{*Bulk|pU#(x*(z#eO8#iRG@Q!&nOdn*^;6^99ncrdtYtIv7GHiD z;n1KGerIn7Ff(W> zoT-+4kRn6U)Ulzrt*5IUHP-YF`kiZ~+1ic)6eWAwwSzU?eXH8K{l3+!6P-yv*|w^? z(|4+q;19S9^fJ|S3L=}z=S%n|ukTljWyoV~#7~cHS-Emech{+m@ZEStryO_)FD~%3)#Xjh+N8L9KS2s1N~FN z17jjP%N%h&UoHBj@tQMSsDfVEEHJE8p{b=(o*wfMscJS|fQZG{Fc}>`OT2c9rF1Gi zmL1L3QozX>DOCz7XvAbW>u<}|#uzG;GEM>$U!R@q0tXysnbSUAseoZU*+Qu@*BErUzg`^(qcqI#tWDW8L z_W-r_u@v_X?gTU-A@KdtLa9h(s?;FeK%iEtBNJ5#_r>gmB!B^anF(f?T@m>sb**L{ znp6==RxPK}S%!@LsFhNn2jpVBAVMBc$VryUGkKlGJRv5u!a$n9jv0?Tz#CAw474*a zZB~gec9A57d1a_qCv=2b62fPw$DB)KQv9LTMs9lb{{B3M_TKWG-wkK|K9+6aIkMwDx?eT7^Ly%cjbH2~wuQ#(IbWMZCh4 zH~e&>LoDDSxVuc2W~wV3sdPhy4jYSZ2&rf^Y>mMTWCBH5WoJ-*AY08sLH+dh6e&U~ zpSvMMgfbfl)LSpDBhxhfd~qQf`NgFgCK^&2?~arh?<4^^lal*-0ik;8hms(MTQLReZ99xLPX zn<3Q*$~P7irVLm6%L^*lidSj=B)v-eeXU;d^}2Vo^;xx-ru^BgHyBiPyQ{ss)T}HI zdXzOD6g7$zy`^HK_n$>OhSJtiXH{9?CD2FRkJ5IsC3bH6eKHw>hrd9d^=KVW)S_)< zOYC1^I_+%o!*ihTTjwN}cb6{koQ%)OXKj-oJ_NlLI&5u}a$d%y=s&y(`jrRMfAXL& zsQ!0>hhIT=93T7d?zE_a)zKb240>C?lT64T?|+~=yC)B8_!@W{&O5CQlQ10VwtOWX zUI!h2i(#Yh1w8x@nt5QkP3V8NQhK05E5AQj&YQpZ-vx*#FZSbrhfhLBdMw`mhT|E3 zcqjC)kT96(MZm*Pq2JO`*D?Q_fQQFI?+Ji7ep|xt*TwvR?;1bJ31d7q`n|%8`U4Ly zw*8Oz55n5>0}p@p^DlToYWbv3o4eo}p6zL_A6erPhJk+b9M)A==7*0PJ*#1IRpRtT%LF%h$RO^yxC!j){&QtK$48@ r%Pl#g%bq3kkzuj*jk%{{BXid>{xkruiTSO2)9~wqj6V|q!AySur5{f) literal 0 HcmV?d00001 diff --git a/tests/test_async_await.py b/tests/test_async_await.py index 7d0a389f..f2aad588 100644 --- a/tests/test_async_await.py +++ b/tests/test_async_await.py @@ -1,5 +1,8 @@ import asyncio +import time +import async_timeout +import psycopg2.extras import pytest import aiopg @@ -260,3 +263,40 @@ async def test_sa_connection_execute(pg_params): result.append(value) assert result == [(1,), (2,), (3,), (4,), (5,)] assert conn.closed + + +async def test_replication_cursor_read_message_non_blocking( + loop, + retrieve_task_result, + make_replication_connection, + make_connection, +): + async def read_message(): + async with async_timeout.timeout(timeout=2.2, loop=loop): + await repl_cur.read_message() + + conn = await make_connection() + cur = await conn.cursor() + repl_conn = await make_replication_connection( + connection_factory=psycopg2.extras.LogicalReplicationConnection + ) + repl_cur = await repl_conn.cursor() + await repl_cur.create_replication_slot( + slot_name="test_slot", + output_plugin="test_decoding", + ) + await repl_cur.start_replication(slot_name="test_slot", status_interval=2) + + task = loop.create_task(read_message()) + task.add_done_callback(retrieve_task_result) + # let one loop iteration go through so the task's `__step()` + # method gets run to let our `read_message()` function block on receiving + # a message from the server + await asyncio.sleep(0) + t1 = time.time() + await cur.execute("SELECT 1") + t2 = time.time() + dt = t2 - t1 + task.cancel() + + assert dt < 2, dt diff --git a/tests/test_connection.py b/tests/test_connection.py index 747285ad..180d3367 100755 --- a/tests/test_connection.py +++ b/tests/test_connection.py @@ -12,6 +12,7 @@ import aiopg from aiopg import DEFAULT_TIMEOUT, Connection, Cursor +from aiopg.connection import _ReplicationCursor PY_341 = sys.version_info >= (3, 4, 1) @@ -88,6 +89,20 @@ async def test_close_twice(connect): assert conn.closed +async def test_with_default_connection(connect): + conn = await connect() + cur = await conn.cursor() + assert isinstance(cur, Cursor) + + +async def test_with_connection_factory(make_replication_connection): + conn = await make_replication_connection( + connection_factory=psycopg2.extras.LogicalReplicationConnection, + ) + cur = await conn.cursor() + assert isinstance(cur, _ReplicationCursor) + + async def test_with_cursor_factory(connect): conn = await connect() cur = await conn.cursor(cursor_factory=psycopg2.extras.DictCursor) @@ -96,6 +111,14 @@ async def test_with_cursor_factory(connect): assert 1 == ret["a"] +async def test_with_ambiguous_cursor_factory(make_replication_connection): + conn = await make_replication_connection( + connection_factory=psycopg2.extras.LogicalReplicationConnection, + ) + cur = await conn.cursor(cursor_factory=psycopg2.extras.DictCursor) + assert isinstance(cur, Cursor) + + async def test_closed(connect): conn = await connect() assert not conn.closed diff --git a/tests/test_cursor.py b/tests/test_cursor.py index d662d286..eca1b81a 100644 --- a/tests/test_cursor.py +++ b/tests/test_cursor.py @@ -1,13 +1,47 @@ import asyncio +import collections import datetime +import json +import math import time +import async_timeout import psycopg2 +import psycopg2.errors +import psycopg2.extras import psycopg2.tz import pytest - -from aiopg import IsolationLevel, ReadCommittedCompiler -from aiopg.connection import TIMEOUT +from flaky import flaky + +import aiopg +from aiopg import IsolationLevel, ReadCommittedCompiler, ReplicationMessage +from aiopg.connection import TIMEOUT, _ReplicationCursor + +REPLICATION_CONN_FACTORIES = [ + psycopg2.extras.LogicalReplicationConnection, + psycopg2.extras.PhysicalReplicationConnection, +] + +# postgres has expanded pg_replication_slots view's set of columns +# since version 9.6 +REPL_SLOT_VIEW_COLUMNS_BASE = [ + "slot_name", + "plugin", + "slot_type", + "datoid", + "database", + "active", + "active_pid", + "xmin", + "catalog_xmin", + "restart_lsn", + "confirmed_flush_lsn", +] +REPL_SLOT_VIEW_COLUMNS_LT_10 = REPL_SLOT_VIEW_COLUMNS_BASE.copy() +REPL_SLOT_VIEW_COLUMNS_LT_13 = REPL_SLOT_VIEW_COLUMNS_BASE.copy() +REPL_SLOT_VIEW_COLUMNS_LT_13.insert(5, "temporary") +REPL_SLOT_VIEW_COLUMNS_GTE_13 = REPL_SLOT_VIEW_COLUMNS_LT_13.copy() +REPL_SLOT_VIEW_COLUMNS_GTE_13.extend(["wal_status", "safe_wal_size"]) @pytest.fixture @@ -38,6 +72,27 @@ async def go(**kwargs): return go +@pytest.fixture +def connect_replication(make_replication_connection): + async def go(**kwargs): + output_plugin = kwargs.pop("output_plugin", None) + conn = await make_replication_connection(**kwargs) + if isinstance(conn.raw, psycopg2.extras.LogicalReplicationConnection): + output_plugin = output_plugin or "wal2json" + else: + output_plugin = None + + async with conn.cursor() as cur: + await cur.create_replication_slot( + slot_name="test_slot", + output_plugin=output_plugin, + ) + + return conn + + return go + + @pytest.fixture def cursor(connect, loop): async def go(): @@ -48,6 +103,89 @@ async def go(): cur.close() +@pytest.fixture +def pg_to_psycopg2_lsn(): + # psycopg2's hex LSN representation is always 4 bytes long, + # while LSNs returned by postgres are variable in length and may omit + # the leading 0 + def go(pg_lsn): + lsn = pg_lsn.split("/") + lsn = f"{int(lsn[0], 16):X}/{int(lsn[1], 16):08X}" + return lsn + + return go + + +@pytest.fixture +def lsn_to_decimal(): + def go(lsn): + return int(lsn.split("/")[1], 16) + + return go + + +@pytest.fixture +def get_xlogpos(lsn_to_decimal, pg_to_psycopg2_lsn): + async def go(repl_cur, as_int=True): + # return server's current xlog flush location + await repl_cur.execute("IDENTIFY_SYSTEM") + xlogpos = (await repl_cur.fetchone())[2] + return ( + lsn_to_decimal(xlogpos) if as_int else pg_to_psycopg2_lsn(xlogpos) + ) + + return go + + +@pytest.fixture +def repl_slots_view_row(pg_tag): + # postgres has expanded pg_replication_slots view's set of columns + # since version 9.6 + if float(pg_tag) < 10: + row = collections.namedtuple( + "ReplSlotsViewRow", + REPL_SLOT_VIEW_COLUMNS_LT_10, + ) + elif float(pg_tag) < 13: + row = collections.namedtuple( + "ReplSlotsViewRow", + REPL_SLOT_VIEW_COLUMNS_LT_13, + ) + else: + row = collections.namedtuple( + "ReplSlotsViewRow", + REPL_SLOT_VIEW_COLUMNS_GTE_13, + ) + + return row + + +@pytest.fixture +def get_repl_slot_details(repl_slots_view_row): + async def go(cursor, slot_name): + query = """ + SELECT * FROM pg_replication_slots + WHERE slot_name = '{slot_name}' + LIMIT 1; + """ + await cursor.execute(query.format(slot_name=slot_name)) + raw_row = await cursor.fetchone() + return repl_slots_view_row(*raw_row) if raw_row is not None else None + + return go + + +@pytest.fixture +def tbl_insert_wal_segment_size(pg_tag): + return { + "9.6": 112, + "10": 112, + "11": 112, + "12": 112, + "13": 112, + }.get(pg_tag, 112) + + async def test_description(cursor): async with cursor as cur: assert cur.description is None @@ -325,12 +463,1703 @@ async def test_iter(connect): assert item == tst -async def test_echo_callproc(connect): +async def test_echo_callproc(log, connect): conn = await connect(echo=True) cur = await conn.cursor() - # TODO: check log records - await cur.callproc("inc", [1]) + with log("aiopg") as watcher: + await cur.callproc("inc", [1]) + ret = await cur.fetchone() assert (2,) == ret + assert len(watcher.output) == 2 + assert watcher.output == ["INFO:aiopg:CALL inc", "INFO:aiopg:[1]"] cur.close() + + +async def test_replication_family_standard_cursor(cursor): + with pytest.raises(psycopg2.ProgrammingError): + await cursor.create_replication_slot(slot_name="test_slot") + + with pytest.raises(psycopg2.ProgrammingError): + await cursor.drop_replication_slot("test_slot") + + with pytest.raises(psycopg2.ProgrammingError): + await cursor.start_replication(slot_name="test_slot") + + with pytest.raises(psycopg2.ProgrammingError): + await cursor.start_replication_expert( + "START_REPLICATION SLOT test_slot LOGICAL 0/00000000" + ) + + with pytest.raises(psycopg2.ProgrammingError): + await cursor.send_feedback() + + with pytest.raises(psycopg2.ProgrammingError): + async for _ in cursor.message_stream(): + pass + + with pytest.raises(psycopg2.ProgrammingError): + await cursor.consume_stream(lambda msg: msg) + + with pytest.raises(psycopg2.ProgrammingError): + await cursor.read_message() + + with pytest.raises(psycopg2.ProgrammingError): + _ = cursor.wal_end + + with pytest.raises(psycopg2.ProgrammingError): + _ = cursor.feedback_timestamp + + with pytest.raises(psycopg2.ProgrammingError): + _ = cursor.io_timestamp + + +@pytest.mark.parametrize( + "conn_factory,output_plugin,slot_type,slot_type_str", + [ + ( + psycopg2.extras.LogicalReplicationConnection, + "test_decoding", + psycopg2.extras.REPLICATION_LOGICAL, + "logical", + ), + ( + psycopg2.extras.PhysicalReplicationConnection, + None, + psycopg2.extras.REPLICATION_PHYSICAL, + "physical", + ), + ], +) +async def test_create_replication_slot( + make_replication_connection, + cursor, + get_repl_slot_details, + conn_factory, + output_plugin, + slot_type, + slot_type_str, +): + repl_conn = await make_replication_connection( + connection_factory=conn_factory + ) + repl_cur = await repl_conn.cursor() + + await repl_cur.create_replication_slot( + slot_name="test_slot", + slot_type=slot_type, + output_plugin=output_plugin, + ) + + res = await get_repl_slot_details(cursor, "test_slot") + assert res + assert res.slot_name == "test_slot" + assert res.plugin == output_plugin + assert res.slot_type == slot_type_str + + +@pytest.mark.parametrize( + "conn_factory,output_plugin,slot_type", + [ + ( + psycopg2.extras.LogicalReplicationConnection, + "test_decoding", + "logical", + ), + ( + psycopg2.extras.PhysicalReplicationConnection, + None, + "physical", + ), + ], +) +async def test_create_replication_slot_inferred_from_conn_type( + make_replication_connection, + cursor, + get_repl_slot_details, + conn_factory, + output_plugin, + slot_type, +): + repl_conn = await make_replication_connection( + connection_factory=conn_factory + ) + repl_cur = await repl_conn.cursor() + + await repl_cur.create_replication_slot( + slot_name="test_slot", + output_plugin=output_plugin, + ) + + res = await get_repl_slot_details(cursor, "test_slot") + assert res + assert res.slot_type == slot_type + + +async def test_create_replication_slot_logical_no_output_plugin( + make_replication_connection, +): + repl_conn = await make_replication_connection( + connection_factory=psycopg2.extras.LogicalReplicationConnection + ) + repl_cur = await repl_conn.cursor() + + with pytest.raises(psycopg2.ProgrammingError): + await repl_cur.create_replication_slot(slot_name="test_slot") + + +async def test_create_replication_slot_physical_with_output_plugin( + make_replication_connection, +): + repl_conn = await make_replication_connection( + connection_factory=psycopg2.extras.PhysicalReplicationConnection + ) + repl_cur = await repl_conn.cursor() + + with pytest.raises(psycopg2.ProgrammingError): + await repl_cur.create_replication_slot( + slot_name="test_slot", + output_plugin="test_decoding", + ) + + +@pytest.mark.parametrize( + "conn_factory,output_plugin", + [ + (psycopg2.extras.LogicalReplicationConnection, "test_decoding"), + (psycopg2.extras.PhysicalReplicationConnection, None), + ], +) +async def test_create_replication_slot_existing( + make_replication_connection, + conn_factory, + output_plugin, +): + repl_conn = await make_replication_connection( + connection_factory=conn_factory + ) + repl_cur = await repl_conn.cursor() + await repl_cur.create_replication_slot( + slot_name="test_slot", + output_plugin=output_plugin, + ) + + with pytest.raises(psycopg2.errors.DuplicateObject): + await repl_cur.create_replication_slot( + slot_name="test_slot", + output_plugin=output_plugin, + ) + + +@pytest.mark.parametrize( + "conn_factory,output_plugin,log_str", + [ + ( + psycopg2.extras.LogicalReplicationConnection, + "test_decoding", + "INFO:aiopg:CREATE_REPLICATION_SLOT test_slot " + "LOGICAL test_decoding", + ), + ( + psycopg2.extras.PhysicalReplicationConnection, + None, + "INFO:aiopg:CREATE_REPLICATION_SLOT test_slot PHYSICAL", + ), + ], +) +async def test_echo_create_replication_slot( + log, + make_replication_connection, + conn_factory, + output_plugin, + log_str, +): + repl_conn = await make_replication_connection( + echo=True, + connection_factory=conn_factory, + ) + repl_cur = await repl_conn.cursor() + + with log("aiopg") as watcher: + await repl_cur.create_replication_slot( + slot_name="test_slot", + output_plugin=output_plugin, + ) + + assert len(watcher.output) == 1 + assert watcher.output[0] == log_str + + +@pytest.mark.parametrize( + "conn_factory,output_plugin", + [ + (psycopg2.extras.LogicalReplicationConnection, "test_decoding"), + (psycopg2.extras.PhysicalReplicationConnection, None), + ], +) +async def test_drop_replication_slot( + make_replication_connection, + cursor, + get_repl_slot_details, + conn_factory, + output_plugin, +): + repl_conn = await make_replication_connection( + connection_factory=conn_factory + ) + repl_cur = await repl_conn.cursor() + await repl_cur.create_replication_slot( + slot_name="test_slot", + output_plugin=output_plugin, + ) + + await repl_cur.drop_replication_slot("test_slot") + + assert not await get_repl_slot_details(cursor, "test_slot") + + +@pytest.mark.parametrize("conn_factory", REPLICATION_CONN_FACTORIES) +async def test_drop_replication_slot_non_existing( + make_replication_connection, + conn_factory, +): + repl_conn = await make_replication_connection( + connection_factory=conn_factory + ) + repl_cur = await repl_conn.cursor() + + with pytest.raises(psycopg2.errors.UndefinedObject): + await repl_cur.drop_replication_slot("test_slot") + + +@pytest.mark.parametrize( + "conn_factory,output_plugin", + [ + (psycopg2.extras.LogicalReplicationConnection, "test_decoding"), + (psycopg2.extras.PhysicalReplicationConnection, None), + ], +) +async def test_echo_drop_replication_slot( + log, + make_replication_connection, + conn_factory, + output_plugin, +): + repl_conn = await make_replication_connection( + echo=True, + connection_factory=conn_factory, + ) + repl_cur = await repl_conn.cursor() + await repl_cur.create_replication_slot( + slot_name="test_slot", + output_plugin=output_plugin, + ) + + with log("aiopg") as watcher: + await repl_cur.drop_replication_slot("test_slot") + + assert len(watcher.output) == 1 + assert watcher.output[0] == "INFO:aiopg:DROP_REPLICATION_SLOT test_slot" + + +@pytest.mark.parametrize( + "conn_factory,slot_type", + [ + ( + psycopg2.extras.LogicalReplicationConnection, + psycopg2.extras.REPLICATION_LOGICAL, + ), + ( + psycopg2.extras.PhysicalReplicationConnection, + psycopg2.extras.REPLICATION_PHYSICAL, + ), + ], +) +async def test_start_replication( + loop, + connect_replication, + cursor, + get_xlogpos, + get_repl_slot_details, + conn_factory, + slot_type, +): + repl_conn = await connect_replication(connection_factory=conn_factory) + repl_cur = await repl_conn.cursor() + xlogpos = await get_xlogpos(repl_cur) + + before_start_repl = await get_repl_slot_details(cursor, "test_slot") + assert not before_start_repl.active + + await repl_cur.start_replication( + slot_name="test_slot", + slot_type=slot_type, + status_interval=1, + start_lsn=xlogpos, + ) + # with physical replication, a slot won't be marked as active + # until you start consuming from the stream + if slot_type == psycopg2.extras.REPLICATION_PHYSICAL: + async with async_timeout.timeout(timeout=1.1, loop=loop): + await repl_cur.read_message() + + after_start_repl = await get_repl_slot_details(cursor, "test_slot") + assert after_start_repl.active + + +@pytest.mark.parametrize("conn_factory", REPLICATION_CONN_FACTORIES) +async def test_start_replication_slot_type_inferred_from_conn_type( + loop, + connect_replication, + cursor, + get_xlogpos, + get_repl_slot_details, + conn_factory, +): + repl_conn = await connect_replication(connection_factory=conn_factory) + repl_cur = await repl_conn.cursor() + xlogpos = await get_xlogpos(repl_cur) + + before_start_repl = await get_repl_slot_details(cursor, "test_slot") + assert not before_start_repl.active + + await repl_cur.start_replication( + slot_name="test_slot", + status_interval=1, + start_lsn=xlogpos, + ) + # with physical replication, a slot won't be marked as active + # until you start consuming from the stream + if conn_factory == psycopg2.extras.PhysicalReplicationConnection: + async with async_timeout.timeout(timeout=1.1, loop=loop): + await repl_cur.read_message() + + after_start_repl = await get_repl_slot_details(cursor, "test_slot") + assert after_start_repl.active + + +@pytest.mark.parametrize( + "conn_factory,slot_type", + [ + ( + psycopg2.extras.LogicalReplicationConnection, + psycopg2.extras.REPLICATION_PHYSICAL, + ), + ( + psycopg2.extras.PhysicalReplicationConnection, + psycopg2.extras.REPLICATION_LOGICAL, + ), + ], +) +async def test_start_replication_wrong_slot_type( + connect_replication, + get_xlogpos, + conn_factory, + slot_type, +): + repl_conn = await connect_replication(connection_factory=conn_factory) + repl_cur = await repl_conn.cursor() + xlogpos = await get_xlogpos(repl_cur) + + with pytest.raises(psycopg2.errors.ObjectNotInPrerequisiteState): + await repl_cur.start_replication( + slot_name="test_slot", + start_lsn=xlogpos, + slot_type=slot_type, + ) + + +@pytest.mark.parametrize("conn_factory", REPLICATION_CONN_FACTORIES) +async def test_start_replication_status_interval_default( + connect_replication, + get_xlogpos, + conn_factory, +): + repl_conn = await connect_replication(connection_factory=conn_factory) + repl_cur = await repl_conn.cursor() + xlogpos = await get_xlogpos(repl_cur) + + assert repl_cur._status_interval is None + await repl_cur.start_replication(slot_name="test_slot", start_lsn=xlogpos) + assert repl_cur._status_interval == 10 + + +@pytest.mark.parametrize("conn_factory", REPLICATION_CONN_FACTORIES) +async def test_start_replication_status_interval_override( + loop, + connect_replication, + get_xlogpos, + conn_factory, +): + repl_conn = await connect_replication(connection_factory=conn_factory) + repl_cur = await repl_conn.cursor() + xlogpos = await get_xlogpos(repl_cur) + + assert repl_cur._status_interval is None + await repl_cur.start_replication( + slot_name="test_slot", + start_lsn=xlogpos, + status_interval=1, + ) + assert repl_cur._status_interval == 1 + + t1 = time.time() + async with async_timeout.timeout(timeout=1.1, loop=loop): + await repl_cur.read_message() + t2 = time.time() + + dt = t2 - t1 + round_func = math.ceil if dt < 1 else math.floor + assert round_func(dt) == 1, dt + + +@pytest.mark.parametrize("conn_factory", REPLICATION_CONN_FACTORIES) +async def test_start_replication_status_interval_invalid( + connect_replication, + get_xlogpos, + conn_factory, +): + repl_conn = await connect_replication(connection_factory=conn_factory) + repl_cur = await repl_conn.cursor() + xlogpos = await get_xlogpos(repl_cur) + + assert repl_cur._status_interval is None + with pytest.raises(psycopg2.ProgrammingError): + await repl_cur.start_replication( + slot_name="test_slot", + start_lsn=xlogpos, + status_interval=0.5, + ) + assert repl_cur._status_interval is None + + +async def test_start_replication_logical_options( + loop, + connect_replication, + cursor, +): + repl_conn = await connect_replication( + connection_factory=psycopg2.extras.LogicalReplicationConnection + ) + repl_cur = await repl_conn.cursor() + await repl_cur.start_replication( + slot_name="test_slot", + options={"add-tables": "public.tbl"}, + ) + await cursor.execute("INSERT INTO tbl VALUES(%s, %s)", (4, "d")) + await cursor.execute("INSERT INTO tbl2 VALUES(%s, %s)", (1, "a")) + + msgs = [] + async with async_timeout.timeout(timeout=2, loop=loop): + async for msg in repl_cur.message_stream(): + msgs.append(msg) + if len(msgs) >= 2: + break + + # wal2json postgres plugin allows you to filter tables from which you want + # to receive meaningful replication messages, changes from other + # tables will be streamed as dummy events + # because we've only specified the "tbl" table within the plugin options + # the 'insert' event from "tbl" should be a fully-fledged replication + # message, on the other hand, "tbl2" table's event should + # be a dummy/empty message + assert len(json.loads(msgs[0].payload)["change"]) == 1 + assert len(json.loads(msgs[1].payload)["change"]) == 0 + + +async def test_start_replication_physical_options( + connect_replication, + get_xlogpos, +): + repl_conn = await connect_replication( + connection_factory=psycopg2.extras.PhysicalReplicationConnection + ) + repl_cur = await repl_conn.cursor() + xlogpos = await get_xlogpos(repl_cur) + + with pytest.raises(psycopg2.ProgrammingError): + await repl_cur.start_replication( + slot_name="test_slot", + start_lsn=xlogpos, + options={"add-tables": "public.tbl"}, + ) + + +@pytest.mark.parametrize("conn_factory", REPLICATION_CONN_FACTORIES) +async def test_start_replication_no_slot( + make_replication_connection, + conn_factory, + get_xlogpos, +): + repl_conn = await make_replication_connection( + connection_factory=conn_factory + ) + repl_cur = await repl_conn.cursor() + xlogpos = await get_xlogpos(repl_cur) + + with pytest.raises(psycopg2.errors.UndefinedObject): + await repl_cur.start_replication( + slot_name="test_slot", + start_lsn=xlogpos, + ) + + +async def test_start_replication_logical_decode( + loop, + connect_replication, + cursor, +): + repl_conn = await connect_replication( + connection_factory=psycopg2.extras.LogicalReplicationConnection, + output_plugin="test_decoding", + ) + repl_cur = await repl_conn.cursor() + await repl_cur.start_replication( + slot_name="test_slot", + status_interval=1, + decode=True, + ) + await cursor.execute("INSERT INTO tbl VALUES(%s, %s)", (4, "d")) + + async with async_timeout.timeout(timeout=1.1, loop=loop): + msg = await repl_cur.read_message() + + assert not isinstance(msg.payload, bytes) + + +async def test_start_replication_logical_no_decode( + loop, + connect_replication, + cursor, +): + repl_conn = await connect_replication( + connection_factory=psycopg2.extras.LogicalReplicationConnection, + output_plugin="test_decoding", + ) + repl_cur = await repl_conn.cursor() + await repl_cur.start_replication(slot_name="test_slot", status_interval=1) + await cursor.execute("INSERT INTO tbl VALUES(%s, %s)", (4, "d")) + + async with async_timeout.timeout(timeout=1.1, loop=loop): + msg = await repl_cur.read_message() + + assert isinstance(msg.payload, bytes) + + +@pytest.mark.parametrize( + "conn_factory,start_repl_options,log_str", + [ + ( + psycopg2.extras.LogicalReplicationConnection, + {"add-tables": "public.tbl"}, + "INFO:aiopg:START_REPLICATION SLOT test_slot LOGICAL {xlogpos} " + "(add-tables public.tbl)", + ), + ( + psycopg2.extras.PhysicalReplicationConnection, + None, + "INFO:aiopg:START_REPLICATION SLOT test_slot {xlogpos}", + ), + ], +) +async def test_echo_start_replication( + log, + connect_replication, + get_xlogpos, + conn_factory, + start_repl_options, + log_str, +): + repl_conn = await connect_replication( + echo=True, + connection_factory=conn_factory, + ) + repl_cur = await repl_conn.cursor() + xlogpos = await get_xlogpos(repl_cur, as_int=False) + + with log("aiopg") as watcher: + await repl_cur.start_replication( + slot_name="test_slot", + start_lsn=xlogpos, + options=start_repl_options, + ) + + assert len(watcher.output) == 1 + assert watcher.output[0] == log_str.format(xlogpos=xlogpos) + + +@pytest.mark.parametrize( + "conn_factory,start_repl_query", + [ + ( + psycopg2.extras.LogicalReplicationConnection, + "START_REPLICATION SLOT test_slot LOGICAL {xlogpos}", + ), + ( + psycopg2.extras.PhysicalReplicationConnection, + "START_REPLICATION SLOT test_slot {xlogpos}", + ), + ], +) +async def test_start_replication_expert( + loop, + connect_replication, + cursor, + get_xlogpos, + get_repl_slot_details, + conn_factory, + start_repl_query, +): + repl_conn = await connect_replication(connection_factory=conn_factory) + repl_cur = await repl_conn.cursor() + + before_start_repl = await get_repl_slot_details(cursor, "test_slot") + assert not before_start_repl.active + + await repl_cur.start_replication_expert( + start_repl_query.format( + xlogpos=await get_xlogpos(repl_cur, as_int=False) + ), + status_interval=1, + ) + # with physical replication, a slot won't be marked as active + # until you start consuming from the stream + if conn_factory == psycopg2.extras.PhysicalReplicationConnection: + async with async_timeout.timeout(timeout=1.1, loop=loop): + await repl_cur.read_message() + + after_start_repl = await get_repl_slot_details(cursor, "test_slot") + assert after_start_repl.active + + +@pytest.mark.parametrize( + "conn_factory,start_repl_query", + [ + ( + psycopg2.extras.LogicalReplicationConnection, + "START_REPLICATION SLOT test_slot LOGICAL {xlogpos}", + ), + ( + psycopg2.extras.PhysicalReplicationConnection, + "START_REPLICATION SLOT test_slot {xlogpos}", + ), + ], +) +async def test_start_replication_expert_status_interval_default( + connect_replication, + get_xlogpos, + conn_factory, + start_repl_query, +): + repl_conn = await connect_replication(connection_factory=conn_factory) + repl_cur = await repl_conn.cursor() + + assert repl_cur._status_interval is None + await repl_cur.start_replication_expert( + start_repl_query.format( + xlogpos=await get_xlogpos(repl_cur, as_int=False) + ) + ) + assert repl_cur._status_interval == 10 + + +@pytest.mark.parametrize( + "conn_factory,start_repl_query", + [ + ( + psycopg2.extras.LogicalReplicationConnection, + "START_REPLICATION SLOT test_slot LOGICAL {xlogpos}", + ), + ( + psycopg2.extras.PhysicalReplicationConnection, + "START_REPLICATION SLOT test_slot {xlogpos}", + ), + ], +) +async def test_start_replication_expert_status_interval_override( + loop, + connect_replication, + get_xlogpos, + conn_factory, + start_repl_query, +): + repl_conn = await connect_replication(connection_factory=conn_factory) + repl_cur = await repl_conn.cursor() + + assert repl_cur._status_interval is None + await repl_cur.start_replication_expert( + start_repl_query.format( + xlogpos=await get_xlogpos(repl_cur, as_int=False) + ), + status_interval=1, + ) + assert repl_cur._status_interval == 1 + + t1 = time.time() + async with async_timeout.timeout(timeout=1.1, loop=loop): + await repl_cur.read_message() + t2 = time.time() + + dt = t2 - t1 + round_func = math.ceil if dt < 1 else math.floor + assert round_func(dt) == 1, dt + + +@pytest.mark.parametrize( + "conn_factory,start_repl_query", + [ + ( + psycopg2.extras.LogicalReplicationConnection, + "START_REPLICATION SLOT test_slot LOGICAL {xlogpos}", + ), + ( + psycopg2.extras.PhysicalReplicationConnection, + "START_REPLICATION SLOT test_slot {xlogpos}", + ), + ], +) +async def test_start_replication_expert_status_interval_invalid( + connect_replication, + get_xlogpos, + conn_factory, + start_repl_query, +): + repl_conn = await connect_replication(connection_factory=conn_factory) + repl_cur = await repl_conn.cursor() + + assert repl_cur._status_interval is None + with pytest.raises(psycopg2.ProgrammingError): + await repl_cur.start_replication_expert( + start_repl_query.format( + xlogpos=await get_xlogpos(repl_cur, as_int=False) + ), + status_interval=0.5, + ) + assert repl_cur._status_interval is None + + +async def test_start_replication_expert_logical_decode( + loop, + connect_replication, + cursor, +): + repl_conn = await connect_replication( + connection_factory=psycopg2.extras.LogicalReplicationConnection, + output_plugin="test_decoding", + ) + repl_cur = await repl_conn.cursor() + await repl_cur.start_replication_expert( + "START_REPLICATION SLOT test_slot LOGICAL 0/00000000", + status_interval=1, + decode=True, + ) + await cursor.execute("INSERT INTO tbl VALUES(%s, %s)", (4, "d")) + + async with async_timeout.timeout(timeout=1.1, loop=loop): + msg = await repl_cur.read_message() + + assert not isinstance(msg.payload, bytes) + + +async def test_start_replication_expert_logical_no_decode( + loop, + connect_replication, + cursor, +): + repl_conn = await connect_replication( + connection_factory=psycopg2.extras.LogicalReplicationConnection, + output_plugin="test_decoding", + ) + repl_cur = await repl_conn.cursor() + await repl_cur.start_replication_expert( + "START_REPLICATION SLOT test_slot LOGICAL 0/00000000", + status_interval=1, + ) + await cursor.execute("INSERT INTO tbl VALUES(%s, %s)", (4, "d")) + + async with async_timeout.timeout(timeout=1.1, loop=loop): + msg = await repl_cur.read_message() + + assert isinstance(msg.payload, bytes) + + +@pytest.mark.parametrize( + "conn_factory,start_repl_query,log_str", + [ + ( + psycopg2.extras.LogicalReplicationConnection, + "START_REPLICATION SLOT test_slot LOGICAL {xlogpos}", + "INFO:aiopg:START_REPLICATION SLOT test_slot LOGICAL {xlogpos}", + ), + ( + psycopg2.extras.PhysicalReplicationConnection, + "START_REPLICATION SLOT test_slot {xlogpos}", + "INFO:aiopg:START_REPLICATION SLOT test_slot {xlogpos}", + ), + ], +) +async def test_echo_start_replication_expert( + log, + connect_replication, + get_xlogpos, + conn_factory, + start_repl_query, + log_str, +): + repl_conn = await connect_replication( + echo=True, + connection_factory=conn_factory, + ) + repl_cur = await repl_conn.cursor() + xlogpos = await get_xlogpos(repl_cur, as_int=False) + + with log("aiopg") as watcher: + await repl_cur.start_replication_expert( + start_repl_query.format(xlogpos=xlogpos) + ) + + assert len(watcher.output) == 1 + assert watcher.output[0] == log_str.format(xlogpos=xlogpos) + + +@pytest.mark.parametrize("conn_factory", REPLICATION_CONN_FACTORIES) +async def test_read_message( + loop, + connect_replication, + cursor, + get_xlogpos, + conn_factory, +): + repl_conn = await connect_replication(connection_factory=conn_factory) + repl_cur = await repl_conn.cursor() + xlogpos = await get_xlogpos(repl_cur) + await repl_cur.start_replication( + slot_name="test_slot", + status_interval=1, + start_lsn=xlogpos, + ) + await cursor.execute("INSERT INTO tbl VALUES(%s, %s)", (4, "d")) + + async with async_timeout.timeout(timeout=1.1, loop=loop): + msg = await repl_cur.read_message() + + assert isinstance(msg, ReplicationMessage) + + +# for some reason and very rarely, a random replication message gets +# received during extensive test runs - the size of the payload differs +# from the logically decoded WAL entry size corresponding to +# the "never to be inserted" `(4, "d")` tuple. +@flaky(max_runs=3, min_passes=1) +@pytest.mark.parametrize("conn_factory", REPLICATION_CONN_FACTORIES) +async def test_read_message_timeout( + loop, + retrieve_task_result, + connect_replication, + cursor, + get_xlogpos, + conn_factory, +): + async def insert_row(): + await asyncio.sleep(10) + await cursor.execute("INSERT INTO tbl VALUES(%s, %s)", (4, "d")) + + repl_conn = await connect_replication(connection_factory=conn_factory) + repl_cur = await repl_conn.cursor() + await repl_cur.start_replication( + slot_name="test_slot", + start_lsn=await get_xlogpos(repl_cur), + ) + # launch in a separate task so that `read_message()` times out + # before a row gets inserted + task = loop.create_task(insert_row()) + task.add_done_callback(retrieve_task_result) + + t1 = time.time() + async with async_timeout.timeout(timeout=1.1, loop=loop): + msg = await repl_cur.read_message(timeout=1) + t2 = time.time() + + dt = t2 - t1 + round_func = math.ceil if dt < 1 else math.floor + assert round_func(dt) == 1, dt + assert msg is None + task.cancel() + + +@pytest.mark.parametrize("conn_factory", REPLICATION_CONN_FACTORIES) +async def test_message_stream( + loop, + connect_replication, + cursor, + get_xlogpos, + conn_factory, +): + repl_conn = await connect_replication(connection_factory=conn_factory) + repl_cur = await repl_conn.cursor() + xlogpos = await get_xlogpos(repl_cur) + await repl_cur.start_replication( + slot_name="test_slot", + status_interval=1, + start_lsn=xlogpos, + ) + for i in [(4, "d"), (5, "e")]: + await cursor.execute("INSERT INTO tbl VALUES(%s, %s)", i) + + msgs = [] + async with async_timeout.timeout(timeout=2.2, loop=loop): + async for msg in repl_cur.message_stream(): + msgs.append(msg) + if len(msgs) >= 2: + break + + assert len(msgs) == 2 + for msg in msgs: + assert isinstance(msg, ReplicationMessage) + + +@pytest.mark.parametrize("conn_factory", REPLICATION_CONN_FACTORIES) +async def test_consume_stream_corofunc_consumer( + loop, + connect_replication, + cursor, + get_xlogpos, + conn_factory, +): + async def consumer_callback(message): + nonlocal msgs + await asyncio.sleep(0.01) + msgs.append(message) + if len(msgs) >= 2: + raise psycopg2.extras.StopReplication + + msgs = [] + repl_conn = await connect_replication(connection_factory=conn_factory) + repl_cur = await repl_conn.cursor() + xlogpos = await get_xlogpos(repl_cur) + await repl_cur.start_replication( + slot_name="test_slot", + status_interval=1, + start_lsn=xlogpos, + ) + for i in [(4, "d"), (5, "e")]: + await cursor.execute("INSERT INTO tbl VALUES(%s, %s)", i) + + async with async_timeout.timeout(timeout=2.2, loop=loop): + await repl_cur.consume_stream(consumer=consumer_callback) + + assert len(msgs) == 2 + for msg in msgs: + assert isinstance(msg, ReplicationMessage) + + +@pytest.mark.parametrize("conn_factory", REPLICATION_CONN_FACTORIES) +async def test_consume_stream_callable_consumer( + loop, + connect_replication, + cursor, + get_xlogpos, + conn_factory, +): + def consumer_callback(message): + nonlocal msgs + msgs.append(message) + if len(msgs) >= 2: + raise psycopg2.extras.StopReplication + + msgs = [] + repl_conn = await connect_replication(connection_factory=conn_factory) + repl_cur = await repl_conn.cursor() + xlogpos = await get_xlogpos(repl_cur) + await repl_cur.start_replication( + slot_name="test_slot", + status_interval=1, + start_lsn=xlogpos, + ) + for i in [(4, "d"), (5, "e")]: + await cursor.execute("INSERT INTO tbl VALUES(%s, %s)", i) + + async with async_timeout.timeout(timeout=2.2, loop=loop): + await repl_cur.consume_stream(consumer=consumer_callback) + + assert len(msgs) == 2 + for msg in msgs: + assert isinstance(msg, ReplicationMessage) + + +# although each test is run sequentially, +# sometimes unexpected entries are fsynced to WAL breaking the test assertions +# (possibly done by some postgres background process) +# is flaky mostly only during long test runs +@flaky(max_runs=3, min_passes=1) +async def test_replication_message_physical( + connect_replication, + cursor, + get_xlogpos, + tbl_insert_wal_segment_size, +): + repl_conn = await connect_replication( + connection_factory=psycopg2.extras.PhysicalReplicationConnection + ) + repl_cur = await repl_conn.cursor() + xlogpos = await get_xlogpos(repl_cur) + await repl_cur.start_replication( + slot_name="test_slot", + status_interval=1, + start_lsn=xlogpos, + ) + await cursor.execute("INSERT INTO tbl VALUES(%s, %s)", (4, "d")) + + async with async_timeout.timeout(timeout=1.1): + msg = await repl_cur.read_message() + + assert isinstance(msg, ReplicationMessage) + assert isinstance(msg.cursor, _ReplicationCursor) + assert isinstance(msg.data_size, int) + assert msg.data_size == tbl_insert_wal_segment_size + assert msg.data_start == xlogpos + assert msg.wal_end == xlogpos + msg.data_size + assert msg.wal_end == msg.data_start + msg.data_size + send_time_approx_jitter = abs( + ( + msg.send_time.replace(microsecond=0) + - datetime.datetime.now().replace(microsecond=0) + ).total_seconds() + ) + assert send_time_approx_jitter <= 2 + assert isinstance(msg.payload, bytes) + + +# although each test is run sequentially, +# sometimes unexpected entries are fsynced to WAL breaking the test assertions +# (possibly done by some postgres background process) +# is flaky mostly only during long test runs +@flaky(max_runs=3, min_passes=1) +async def test_replication_message_logical( + connect_replication, + cursor, + pg_tag, + get_xlogpos, +): + repl_conn = await connect_replication( + connection_factory=psycopg2.extras.LogicalReplicationConnection, + ) + repl_cur = await repl_conn.cursor() + xlogpos = await get_xlogpos(repl_cur) + await repl_cur.start_replication(slot_name="test_slot", status_interval=1) + await cursor.execute("INSERT INTO tbl VALUES(%s, %s)", (4, "d")) + + async with async_timeout.timeout(timeout=1.1): + msg = await repl_cur.read_message() + + assert isinstance(msg, ReplicationMessage) + assert isinstance(msg.cursor, _ReplicationCursor) + assert isinstance(msg.data_size, int) + # for some reason, on postgres 9.6 only, the original xlogpos is always + # shifted by 40 bytes, although the size of the raw WAL segment is still + # 112 bytes + assert msg.data_start == xlogpos if float(pg_tag) >= 10 else xlogpos + 40 + assert msg.wal_end == xlogpos if float(pg_tag) >= 10 else xlogpos + 40 + assert msg.wal_end == msg.data_start + send_time_approx_jitter = abs( + ( + msg.send_time.replace(microsecond=0) + - datetime.datetime.now().replace(microsecond=0) + ).total_seconds() + ) + assert send_time_approx_jitter <= 2 + msg_payload = json.loads(msg.payload) + assert len(msg_payload["change"]) == 1 + msg_payload = msg_payload["change"][0] + assert msg_payload["kind"] == "insert" + assert msg_payload["schema"] == "public" + assert msg_payload["table"] == "tbl" + assert msg_payload["columnvalues"][0] == 4 + assert msg_payload["columnvalues"][1] == "d" + + +@pytest.mark.parametrize("conn_factory", REPLICATION_CONN_FACTORIES) +async def test_replication_message_repr( + loop, + connect_replication, + cursor, + get_xlogpos, + conn_factory, +): + def xlog_fmt(xlog): + return "{:x}/{:x}".format(xlog >> 32, xlog & 0xFFFFFFFF) + + repl_conn = await connect_replication(connection_factory=conn_factory) + repl_cur = await repl_conn.cursor() + await repl_cur.start_replication( + slot_name="test_slot", + status_interval=1, + start_lsn=await get_xlogpos(repl_cur), + ) + await cursor.execute("INSERT INTO tbl VALUES(%s, %s)", (4, "d")) + + async with async_timeout.timeout(timeout=1.1, loop=loop): + msg = await repl_cur.read_message() + + assert repr(msg) == ( + "<{cls_name} data_size={data_size}, data_start={data_start}, " + "wal_end={wal_end}, send_time={send_time}>".format( + cls_name=f"{type(msg).__module__}::{type(msg).__name__}", + data_size=msg.data_size, + data_start=xlog_fmt(msg.data_start), + wal_end=xlog_fmt(msg.wal_end), + send_time=msg._impl.__repr__().split(":")[-1][1:-1], + ) + ) + + +# although each test is run sequentially, +# sometimes unexpected entries are fsynced to WAL breaking the test assertions +# (possibly done by some postgres background process) +# is flaky mostly only during long test runs +@flaky(max_runs=3, min_passes=1) +async def test_send_feedback_force_logical( + loop, + pg_params, + connect_replication, + cursor, + get_xlogpos, + get_repl_slot_details, + lsn_to_decimal, + tbl_insert_wal_segment_size, +): + repl_conn = await connect_replication( + connection_factory=psycopg2.extras.LogicalReplicationConnection, + ) + repl_cur = await repl_conn.cursor() + xlogpos = await get_xlogpos(repl_cur) + await repl_cur.start_replication(slot_name="test_slot", start_lsn=xlogpos) + await cursor.execute("INSERT INTO tbl VALUES(%s, %s)", (4, "d")) + async with async_timeout.timeout(timeout=1.1, loop=loop): + msg = await repl_cur.read_message() + + # send feedback message immediately telling Postgres that WAL entries + # before and including this message should become unavailable for this + # replication slot and can be removed by the checkpointer process some + # time in the future + await msg.cursor.send_feedback( + flush_lsn=msg.data_start + tbl_insert_wal_segment_size, + force=True, + ) + + flush_lsn = lsn_to_decimal( + (await get_repl_slot_details(cursor, "test_slot")).confirmed_flush_lsn + ) + # ensure that confirmed_flush_lsn has been updated for this + # replication slot + assert flush_lsn == msg.data_start + tbl_insert_wal_segment_size + # simulate connection loss + repl_cur.close() + await repl_conn.close() + + # simulate reconnection + repl_conn = await aiopg.connect( + **pg_params.copy(), + enable_hstore=False, + connection_factory=psycopg2.extras.LogicalReplicationConnection, + ) + repl_cur = await repl_conn.cursor() + xlogpos = await get_xlogpos(repl_cur) + # no other postgres backends are currently active, so the server's xlogpos + # after reconnection should be equal to the last confirmed flush LSN + # before connection loss + assert xlogpos == flush_lsn + + await repl_cur.start_replication(slot_name="test_slot", status_interval=1) + async with async_timeout.timeout(timeout=1.1, loop=loop): + msg = await repl_cur.read_message() + + # ensure that the last replication message is not redelivered by the server + # after reconnection + assert msg is None + + await cursor.execute("INSERT INTO tbl VALUES(%s, %s)", (5, "c")) + async with async_timeout.timeout(timeout=1.1, loop=loop): + msg = await repl_cur.read_message() + + # ensure that new WAL entries are still delivered as replication messages + assert isinstance(msg, ReplicationMessage) + + +# although each test is run sequentially, +# sometimes unexpected entries are fsynced to WAL breaking the test assertions +# (possibly done by some postgres background process) +# is flaky mostly only during long test runs +@flaky(max_runs=3, min_passes=1) +async def test_send_feedback_auto_logical( + loop, + pg_params, + connect_replication, + cursor, + get_xlogpos, + get_repl_slot_details, + lsn_to_decimal, + tbl_insert_wal_segment_size, +): + repl_conn = await connect_replication( + connection_factory=psycopg2.extras.LogicalReplicationConnection, + ) + repl_cur = await repl_conn.cursor() + await repl_cur.start_replication(slot_name="test_slot", status_interval=1) + await cursor.execute("INSERT INTO tbl VALUES(%s, %s)", (4, "d")) + + msg = None + try: + async with async_timeout.timeout(timeout=1.2, loop=loop): + async for m in repl_cur.message_stream(): + msg = m + # update pyscopg2's internal structures so that a feedback + # message will be automatically sent when the + # current `status_interval` of 1 second is reached + # this will tell Postgres that WAL entries before and including + # this message should become unavailable for this replication + # slot and can be removed by the checkpointer process + # sometime in the future + await m.cursor.send_feedback( + flush_lsn=msg.data_start + tbl_insert_wal_segment_size + ) + except asyncio.TimeoutError: + pass + + assert isinstance(msg, ReplicationMessage) + + flush_lsn = lsn_to_decimal( + (await get_repl_slot_details(cursor, "test_slot")).confirmed_flush_lsn + ) + # ensure that confirmed_flush_lsn has been updated for this + # replication slot + assert flush_lsn == msg.data_start + tbl_insert_wal_segment_size + # simulate connection loss + repl_cur.close() + await repl_conn.close() + + # simulate reconnection + repl_conn = await aiopg.connect( + **pg_params.copy(), + enable_hstore=False, + connection_factory=psycopg2.extras.LogicalReplicationConnection, + ) + repl_cur = await repl_conn.cursor() + xlogpos = await get_xlogpos(repl_cur) + # no other postgres backends are currently active, so the server's xlogpos + # after reconnection should be equal to the last confirmed flush LSN + # before connection loss + assert xlogpos == flush_lsn + + await repl_cur.start_replication(slot_name="test_slot", status_interval=1) + async with async_timeout.timeout(timeout=1.1, loop=loop): + msg = await repl_cur.read_message() + + # ensure that the last replication message is not redelivered by the server + # after reconnection + assert msg is None + + await cursor.execute("INSERT INTO tbl VALUES(%s, %s)", (5, "c")) + async with async_timeout.timeout(timeout=1.2, loop=loop): + msg = await repl_cur.read_message() + + # ensure that new WAL entries are still delivered as replication messages + assert isinstance(msg, ReplicationMessage) + + +# although each test is run sequentially, +# sometimes unexpected entries are fsynced to WAL breaking the test assertions +# (possibly done by some postgres background process) +# is flaky mostly only during long test runs +@flaky(max_runs=3, min_passes=1) +async def test_without_send_feedback_logical( + loop, + pg_params, + pg_tag, + connect_replication, + cursor, + get_xlogpos, + get_repl_slot_details, + lsn_to_decimal, + tbl_insert_wal_segment_size, +): + repl_conn = await connect_replication( + connection_factory=psycopg2.extras.LogicalReplicationConnection, + ) + repl_cur = await repl_conn.cursor() + xlogpos_before = await get_xlogpos(repl_cur) + await repl_cur.start_replication(slot_name="test_slot") + await cursor.execute("INSERT INTO tbl VALUES(%s, %s)", (4, "d")) + + async with async_timeout.timeout(timeout=1.1, loop=loop): + msg = await repl_cur.read_message() + + flush_lsn_before = lsn_to_decimal( + (await get_repl_slot_details(cursor, "test_slot")).confirmed_flush_lsn + ) + # ensure that the slot's confirmed_flush_lsn hasn't changed + assert xlogpos_before == flush_lsn_before + # simulate connection loss + repl_cur.close() + await repl_conn.close() + + # simulate reconnection + repl_conn = await aiopg.connect( + **pg_params.copy(), + enable_hstore=False, + connection_factory=psycopg2.extras.LogicalReplicationConnection, + ) + repl_cur = await repl_conn.cursor() + xlogpos_after = await get_xlogpos(repl_cur) + flush_lsn_after = lsn_to_decimal( + (await get_repl_slot_details(cursor, "test_slot")).confirmed_flush_lsn + ) + + # ensure that the new xlogpos has advanced by the size of the previously + # fsynced WAL entry + if float(pg_tag) < 10: + # for some reason, on postgres 9.6 only, the original xlogpos is always + # shifted by 40 bytes, although the size of the raw WAL segment + # is still 112 bytes + assert ( + xlogpos_after == xlogpos_before + tbl_insert_wal_segment_size + 40 + ) + else: + assert xlogpos_after == xlogpos_before + tbl_insert_wal_segment_size + # ensure that the slot's confirmed_flush_lsn hasn't changed + # after reconnection + assert flush_lsn_after == flush_lsn_before + await repl_cur.start_replication(slot_name="test_slot") + + async with async_timeout.timeout(timeout=1.1, loop=loop): + dup_msg = await repl_cur.read_message() + + # ensure that the last message before connection loss is redelivered by the + # server because there was no feedback message sent + assert isinstance(dup_msg, ReplicationMessage) + assert dup_msg.payload == msg.payload + + +# although each test is run sequentially, sometimes unexpected entries +# are fsynced to WAL breaking the test assertions +# (possibly done by some postgres background process) +# is flaky mostly only during long test runs +@flaky(max_runs=3, min_passes=1) +async def test_send_feedback_force_physical( + loop, + connect_replication, + cursor, + get_xlogpos, + get_repl_slot_details, + lsn_to_decimal, +): + repl_conn = await connect_replication( + connection_factory=psycopg2.extras.PhysicalReplicationConnection, + ) + repl_cur = await repl_conn.cursor() + await repl_cur.start_replication( + slot_name="test_slot", + start_lsn=await get_xlogpos(repl_cur), + ) + await cursor.execute("INSERT INTO tbl VALUES(%s, %s)", (4, "d")) + async with async_timeout.timeout(timeout=1.1, loop=loop): + msg = await repl_cur.read_message() + + # send feedback message immediately telling postgres that WAL entries + # before and including this message can be automatically removed + # during checkpoints + await msg.cursor.send_feedback( + flush_lsn=msg.data_start + msg.data_size, + force=True, + ) + + restart_lsn = lsn_to_decimal( + (await get_repl_slot_details(cursor, "test_slot")).restart_lsn + ) + # ensure that restart_lsn has been updated for this + # replication slot + assert restart_lsn == msg.data_start + msg.data_size + + +# although each test is run sequentially, sometimes unexpected entries +# are fsynced to WAL breaking the test assertions +# (possibly done by some postgres background process) +# is flaky mostly only during long test runs +@flaky(max_runs=3, min_passes=1) +async def test_send_feedback_auto_physical( + loop, + connect_replication, + cursor, + get_xlogpos, + get_repl_slot_details, + lsn_to_decimal, +): + repl_conn = await connect_replication( + connection_factory=psycopg2.extras.PhysicalReplicationConnection, + ) + repl_cur = await repl_conn.cursor() + await repl_cur.start_replication( + slot_name="test_slot", + status_interval=1, + start_lsn=await get_xlogpos(repl_cur), + ) + await cursor.execute("INSERT INTO tbl VALUES(%s, %s)", (4, "d")) + + msg = None + try: + async with async_timeout.timeout(timeout=1.2, loop=loop): + async for m in repl_cur.message_stream(): + msg = m + # update psycopg2's internal structures so that a feedback + # message will be sent automatically when the current + # `status_interval` of 1 second is reached, + # this will tell postgres that WAL entries before and including + # this message can be automatically removed during checkpoints + await m.cursor.send_feedback( + flush_lsn=msg.data_start + msg.data_size + ) + except asyncio.TimeoutError: + pass + + assert isinstance(msg, ReplicationMessage) + restart_lsn = lsn_to_decimal( + (await get_repl_slot_details(cursor, "test_slot")).restart_lsn + ) + # ensure that restart_lsn has been updated for this + # replication slot + assert restart_lsn == msg.data_start + msg.data_size + + +async def test_without_send_feedback_physical( + loop, + connect_replication, + cursor, + get_xlogpos, + get_repl_slot_details, +): + repl_conn = await connect_replication( + connection_factory=psycopg2.extras.PhysicalReplicationConnection, + ) + repl_cur = await repl_conn.cursor() + await repl_cur.start_replication( + slot_name="test_slot", + start_lsn=await get_xlogpos(repl_cur), + ) + await cursor.execute("INSERT INTO tbl VALUES(%s, %s)", (4, "d")) + + async with async_timeout.timeout(timeout=1.1, loop=loop): + await repl_cur.read_message() + + restart_lsn = ( + await get_repl_slot_details(cursor, "test_slot") + ).restart_lsn + # ensure that this slot's restart_lsn is None because it has + # never been reserved + assert restart_lsn is None + + +@pytest.mark.parametrize("conn_factory", REPLICATION_CONN_FACTORIES) +async def test_wal_end( + loop, + pg_tag, + connect_replication, + cursor, + get_xlogpos, + conn_factory, +): + repl_conn = await connect_replication(connection_factory=conn_factory) + repl_cur = await repl_conn.cursor() + xlogpos = await get_xlogpos(repl_cur) + await repl_cur.start_replication(slot_name="test_slot", start_lsn=xlogpos) + await cursor.execute("INSERT INTO tbl VALUES(%s, %s)", (4, "d")) + + async with async_timeout.timeout(timeout=1.1, loop=loop): + msg = await repl_cur.read_message() + + assert repl_cur.wal_end == msg.wal_end + if conn_factory == psycopg2.extras.PhysicalReplicationConnection: + assert repl_cur.wal_end == xlogpos + msg.data_size + else: + if float(pg_tag) < 10: + # for some reason, on postgres 9.6 only, the original xlogpos + # is always shifted by 40 bytes, although the size of the raw + # WAL segment is still 112 bytes + assert repl_cur.wal_end == xlogpos + 40 + else: + assert repl_cur.wal_end == xlogpos + + +@pytest.mark.parametrize("conn_factory", REPLICATION_CONN_FACTORIES) +async def test_feedback_timestamp( + loop, + connect_replication, + cursor, + get_xlogpos, + tbl_insert_wal_segment_size, + conn_factory, +): + repl_conn = await connect_replication(connection_factory=conn_factory) + repl_cur = await repl_conn.cursor() + xlogpos = await get_xlogpos(repl_cur) + await repl_cur.start_replication(slot_name="test_slot", start_lsn=xlogpos) + await cursor.execute("INSERT INTO tbl VALUES(%s, %s)", (4, "d")) + + async with async_timeout.timeout(timeout=1, loop=loop): + msg = await repl_cur.read_message() + + feedback_timestamp_approx_jitter = abs( + ( + repl_cur.feedback_timestamp.replace(microsecond=0) + - datetime.datetime.now().replace(microsecond=0) + ).total_seconds() + ) + assert feedback_timestamp_approx_jitter <= 2 + + await asyncio.sleep(1) + await msg.cursor.send_feedback( + flush_lsn=msg.data_start + tbl_insert_wal_segment_size, + force=True, + ) + + feedback_timestamp_approx_jitter = abs( + ( + repl_cur.feedback_timestamp.replace(microsecond=0) + - datetime.datetime.now().replace(microsecond=0) + ).total_seconds() + ) + assert feedback_timestamp_approx_jitter <= 2 + + +@pytest.mark.parametrize("conn_factory", REPLICATION_CONN_FACTORIES) +async def test_io_timestamp( + loop, + retrieve_task_result, + connect_replication, + cursor, + get_xlogpos, + conn_factory, +): + async def insert_row(): + await asyncio.sleep(1) + await cursor.execute("INSERT INTO tbl VALUES(%s, %s)", (4, "d")) + + repl_conn = await connect_replication(connection_factory=conn_factory) + repl_cur = await repl_conn.cursor() + await repl_cur.start_replication( + slot_name="test_slot", + status_interval=2, + start_lsn=await get_xlogpos(repl_cur), + ) + + io_timestamp_approx_jitter = abs( + ( + repl_cur.io_timestamp.replace(microsecond=0) + - datetime.datetime.now().replace(microsecond=0) + ).total_seconds() + ) + assert io_timestamp_approx_jitter <= 2 + + task = loop.create_task(insert_row()) + task.add_done_callback(retrieve_task_result) + async with async_timeout.timeout(timeout=2.2, loop=loop): + await repl_cur.read_message() + + io_timestamp_approx_jitter = abs( + ( + repl_cur.io_timestamp.replace(microsecond=0) + - datetime.datetime.now().replace(microsecond=0) + ).total_seconds() + ) + assert io_timestamp_approx_jitter <= 2 + task.cancel() + + +@pytest.mark.parametrize("conn_factory", REPLICATION_CONN_FACTORIES) +async def test_read_message_done_callback( + loop, + retrieve_task_result, + connect_replication, + get_xlogpos, + conn_factory, +): + def get_callback_by_fd(fd): + return loop._selector.get_key(fd).data[0]._callback + + async def read_message(): + async with async_timeout.timeout(timeout=1.1, loop=loop): + await repl_cur.read_message() + + repl_conn = await connect_replication(connection_factory=conn_factory) + repl_cur = await repl_conn.cursor() + repl_conn_fd = repl_cur._impl.fileno() + await repl_cur.start_replication( + slot_name="test_slot", + status_interval=1, + start_lsn=await get_xlogpos(repl_cur), + ) + + assert get_callback_by_fd(repl_conn_fd) == aiopg.Connection._ready + + task = loop.create_task(read_message()) + task.add_done_callback(retrieve_task_result) + + await asyncio.sleep(0) + assert get_callback_by_fd(repl_conn_fd) == repl_cur._read_message + await asyncio.sleep(1.1) + assert get_callback_by_fd(repl_conn_fd) == aiopg.Connection._ready + task.cancel() + + +# sometimes the connection's fd isn't closed in a timely manner as specified +# by the test +# is flaky mostly only during long test runs +@flaky(max_runs=3, min_passes=1) +@pytest.mark.parametrize("conn_factory", REPLICATION_CONN_FACTORIES) +async def test_read_message_done_callback_bad_descriptor( + loop, + connect_replication, + get_xlogpos, + conn_factory, +): + def break_fd(): + loop.remove_reader(repl_conn_fd) + repl_cur._conn._conn.close() + + repl_conn = await connect_replication(connection_factory=conn_factory) + repl_cur = await repl_conn.cursor() + repl_conn_fd = repl_cur._impl.fileno() + await repl_cur.start_replication( + slot_name="test_slot", + status_interval=1, + start_lsn=await get_xlogpos(repl_cur), + ) + + loop.call_later(0.9, break_fd) + async with async_timeout.timeout(timeout=1.1, loop=loop): + await repl_cur.read_message() + + with pytest.raises(KeyError): + loop._selector.get_key(repl_conn_fd) + assert repl_cur._conn._fileno is None + + +# postgres doesn't support SQL queries on logical replication connections +# before version 10 +@pytest.mark.skip_pg_tag_older_than(10) +async def test_replication_logical_query_support(make_replication_connection): + repl_conn = await make_replication_connection( + connection_factory=psycopg2.extras.LogicalReplicationConnection + ) + repl_cur = await repl_conn.cursor() + await repl_cur.execute("SELECT 1") + + +# postgres doesn't support SQL queries on logical replication connections +# before version 10 +@pytest.mark.skip_pg_tag_older_than(10) +async def test_replication_logical_hstore_support(make_replication_connection): + await make_replication_connection( + enable_hstore=True, + connection_factory=psycopg2.extras.LogicalReplicationConnection, + ) From 0f6b21f510837ec99c2d82a790bddbbfc3595452 Mon Sep 17 00:00:00 2001 From: Yegor Trakhinin Date: Fri, 27 Aug 2021 20:30:37 +0300 Subject: [PATCH 2/3] fix python3.6 compatibility issues --- aiopg/connection.py | 17 +++++++---------- tests/conftest.py | 7 +++++-- tests/test_cursor.py | 3 +++ 3 files changed, 15 insertions(+), 12 deletions(-) diff --git a/aiopg/connection.py b/aiopg/connection.py index d21bb717..249cff86 100755 --- a/aiopg/connection.py +++ b/aiopg/connection.py @@ -24,7 +24,6 @@ Generator, Hashable, List, - Literal, Optional, Sequence, Tuple, @@ -46,8 +45,6 @@ get_running_loop, ) -ReplicationSlotType = Union[Literal[87654321], Literal[12345678]] - TIMEOUT = 60.0 # Windows specific error code, not in errno for some reason, and doesnt map @@ -702,7 +699,7 @@ async def copy_expert(self, *args: Any, **kwargs: Any) -> None: async def create_replication_slot( self, slot_name: str, - slot_type: Optional[ReplicationSlotType] = None, + slot_type: Optional[int] = None, output_plugin: Optional[str] = None, timeout: Optional[float] = None, ) -> None: @@ -736,7 +733,7 @@ async def drop_replication_slot( async def start_replication( self, slot_name: Optional[str] = None, - slot_type: Optional[ReplicationSlotType] = None, + slot_type: Optional[int] = None, start_lsn: Union[int, str] = 0, timeline: int = 0, options: Optional[Dict[Hashable, Any]] = None, @@ -1112,7 +1109,7 @@ def __init__( async def create_replication_slot( self, slot_name: str, - slot_type: Optional[ReplicationSlotType] = None, + slot_type: Optional[int] = None, output_plugin: Optional[str] = None, timeout: Optional[float] = None, ) -> None: @@ -1140,7 +1137,7 @@ async def drop_replication_slot( async def start_replication( self, slot_name: Optional[str] = None, - slot_type: Optional[ReplicationSlotType] = None, + slot_type: Optional[int] = None, start_lsn: Union[int, str] = 0, timeline: int = 0, options: Optional[Dict[Hashable, Any]] = None, @@ -1374,7 +1371,7 @@ def _read_message_done( # the connection's fd is still valid by modifying its I/O callback # which requires a syscall on behalf of the poll/epoll/kqueue # OS resource under the hood. - loop = fut.get_loop() + loop = self._conn._loop # safety measure - uvloop has very different low-level APIs # and doesn't use the selectors module selector = getattr(loop, "_selector", None) @@ -1454,7 +1451,7 @@ async def _execute_replication_command( def _create_replication_slot_repr( self, slot_name: str, - slot_type: Optional[ReplicationSlotType], + slot_type: Optional[int], output_plugin: Optional[str], ) -> str: command = f"CREATE_REPLICATION_SLOT {slot_name} " @@ -1476,7 +1473,7 @@ def _drop_replication_slot_repr(self, slot_name: str) -> str: def _start_replication_repr( self, slot_name: Optional[str], - slot_type: Optional[ReplicationSlotType], + slot_type: Optional[int], start_lsn: Union[int, str], timeline: int, options: Optional[Dict[Hashable, Any]], diff --git a/tests/conftest.py b/tests/conftest.py index f72b4ab6..dba7e055 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -45,8 +45,11 @@ def f(): @pytest.fixture def loop(request): - # support running unittests on Windows - if sys.platform == "win32": + # support running unit tests on Windows + asyncio_supports_iocp = ( + float(f"{sys.version_info.major}.{sys.version_info.minor}") > 3.6 + ) + if sys.platform == "win32" and asyncio_supports_iocp: asyncio.set_event_loop_policy(asyncio.WindowsSelectorEventLoopPolicy()) loop = asyncio.new_event_loop() diff --git a/tests/test_cursor.py b/tests/test_cursor.py index eca1b81a..7efaca67 100644 --- a/tests/test_cursor.py +++ b/tests/test_cursor.py @@ -2139,6 +2139,9 @@ def break_fd(): async with async_timeout.timeout(timeout=1.1, loop=loop): await repl_cur.read_message() + # skip one loop iteration, so that `read_message()`'s + # `_read_message_done()` done callback gets called + await asyncio.sleep(0) with pytest.raises(KeyError): loop._selector.get_key(repl_conn_fd) assert repl_cur._conn._fileno is None From 044771496f788f6e09a85cc043d5af5d915734a0 Mon Sep 17 00:00:00 2001 From: Yegor Trakhinin Date: Sun, 19 Sep 2021 00:37:53 +0300 Subject: [PATCH 3/3] add some more fine-grained unit tests to cover edge case paths --- tests/test_cursor.py | 124 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 124 insertions(+) diff --git a/tests/test_cursor.py b/tests/test_cursor.py index 7efaca67..17f3a6fe 100644 --- a/tests/test_cursor.py +++ b/tests/test_cursor.py @@ -3,7 +3,9 @@ import datetime import json import math +import sys import time +from unittest.mock import Mock, patch import async_timeout import psycopg2 @@ -1323,6 +1325,33 @@ async def test_echo_start_replication_expert( assert watcher.output[0] == log_str.format(xlogpos=xlogpos) +@pytest.mark.parametrize( + "conn_factory,output_plugin", + [ + (psycopg2.extras.LogicalReplicationConnection, "test_decoding"), + (psycopg2.extras.PhysicalReplicationConnection, None), + ], +) +async def test_execute_replication_command_timeout( + make_replication_connection, + conn_factory, + output_plugin, +): + repl_conn = await make_replication_connection( + connection_factory=conn_factory + ) + repl_cur = await repl_conn.cursor() + + with pytest.raises(asyncio.TimeoutError): + await repl_cur._execute_replication_command( + command_name="create_replication_slot", + timeout=0, + slot_name="test_slot", + output_plugin=output_plugin, + ) + assert repl_cur._impl.closed + + @pytest.mark.parametrize("conn_factory", REPLICATION_CONN_FACTORIES) async def test_read_message( loop, @@ -1388,6 +1417,73 @@ async def insert_row(): task.cancel() +@pytest.mark.parametrize("conn_factory", REPLICATION_CONN_FACTORIES) +async def test_read_message_poll_callback_done_future( + loop, + connect_replication, + get_xlogpos, + conn_factory, +): + repl_conn = await connect_replication(connection_factory=conn_factory) + repl_cur = await repl_conn.cursor() + await repl_cur.start_replication( + slot_name="test_slot", + status_interval=1, + start_lsn=await get_xlogpos(repl_cur), + ) + dummy_fut = loop.create_future() + dummy_fut.set_result(None) + + assert repl_cur._read_message(dummy_fut) is None + + +@pytest.mark.parametrize("conn_factory", REPLICATION_CONN_FACTORIES) +async def test_read_message_poll_callback_exception( + loop, + connect_replication, + get_xlogpos, + conn_factory, +): + repl_conn = await connect_replication(connection_factory=conn_factory) + repl_cur = await repl_conn.cursor() + await repl_cur.start_replication( + slot_name="test_slot", + status_interval=1, + start_lsn=await get_xlogpos(repl_cur), + ) + repl_cur._impl.close() + dummy_fut = loop.create_future() + + repl_cur._read_message(dummy_fut) + + assert isinstance(dummy_fut.exception(), psycopg2.InterfaceError) + + +@pytest.mark.parametrize("conn_factory", REPLICATION_CONN_FACTORIES) +async def test_read_message_poll_callback_sysexit_exception( + loop, + connect_replication, + get_xlogpos, + conn_factory, +): + repl_conn = await connect_replication(connection_factory=conn_factory) + repl_cur = await repl_conn.cursor() + await repl_cur.start_replication( + slot_name="test_slot", + status_interval=1, + start_lsn=await get_xlogpos(repl_cur), + ) + dummy_fut = loop.create_future() + + repl_cur._impl.read_message = Mock(side_effect=SystemExit) + with pytest.raises(SystemExit): + repl_cur._read_message(dummy_fut) + + repl_cur._impl.read_message = Mock(side_effect=KeyboardInterrupt) + with pytest.raises(KeyboardInterrupt): + repl_cur._read_message(dummy_fut) + + @pytest.mark.parametrize("conn_factory", REPLICATION_CONN_FACTORIES) async def test_message_stream( loop, @@ -2147,6 +2243,34 @@ def break_fd(): assert repl_cur._conn._fileno is None +@pytest.mark.skipif( + sys.platform != "win32", + reason="No need to do a 'select' syscall on platforms except Windows", +) +@pytest.mark.parametrize("conn_factory", REPLICATION_CONN_FACTORIES) +async def test_read_message_done_callback_verify_fd_via_select( + loop, + connect_replication, + get_xlogpos, + conn_factory, +): + repl_conn = await connect_replication(connection_factory=conn_factory) + repl_cur = await repl_conn.cursor() + repl_conn_fd = repl_cur._impl.fileno() + dummy_fut = loop.create_future() + dummy_fut.set_result(None) + await repl_cur.start_replication( + slot_name="test_slot", + status_interval=1, + start_lsn=await get_xlogpos(repl_cur), + ) + + with patch("select.select") as mocked_select: + repl_cur._read_message_done(repl_conn_fd, dummy_fut) + + mocked_select.assert_called_once_with([repl_conn_fd], [], [], 0) + + # postgres doesn't support SQL queries on logical replication connections # before version 10 @pytest.mark.skip_pg_tag_older_than(10)