From c3d87b2a906b3d09e0b687c399124673ffc47ff6 Mon Sep 17 00:00:00 2001 From: JP Hutchins Date: Thu, 25 Jun 2026 14:18:12 -0700 Subject: [PATCH] feat(transport): add COBS+CRC16 serial framing for MCUboot raw recovery Add a pluggable `SerialFraming` to `SMPSerialRawTransport` plus a `Cobs` framing that wraps each raw SMP packet as COBS(header || payload || CRC16) || 0x00 -- MCUboot's `BOOT_SERIAL_RAW_PROTOCOL_COBS` (intercreate/mcuboot#5, layered on mcu-tools/mcuboot#2755). The trailing 0x00 makes the byte stream self-synchronising and the CRC-16/XMODEM rejects damaged frames, so the decoder drops a corrupt or truncated frame and resyncs at the next delimiter. `Cobs` is a frozen, slotted dataclass that owns its connection's reassembly buffer (the transport feeds/takes/resets it); `framing=None` leaves the bare length-prefixed raw path unchanged. Vendor the params-advertising `serial_recovery_raw_cobs` fixture from smp-server-fixtures release fa39f8c2 (intercreate/smp-server-fixtures#12), and unify the MCUboot serial-recovery integration test over every framing (console Auto/BufferSize, raw, raw+COBS). Also strengthen the DFU upload test to match the image's SHA256 TLV against the reported slot hash. Co-Authored-By: Claude Opus 4.8 Claude-Session: https://claude.ai/code/session_01KKXy7L2Udjw929nie2c363 --- src/smpclient/transport/serial/__init__.py | 2 + .../transport/serial/framing/__init__.py | 28 + .../transport/serial/framing/cobs.py | 150 + src/smpclient/transport/serial/unencoded.py | 43 +- tests/fixtures/smp-server/SHA256SUMS | 2 + tests/fixtures/smp-server/VERSION | 9 + tests/fixtures/smp-server/manifest.json | 27 + ...c2_mps2_an385_serial_recovery_raw_cobs.hex | 2649 +++++++++++++++++ ..._an385_serial_recovery_raw_cobs.signed.bin | Bin 0 -> 132504 bytes tests/integration/servers.py | 5 +- tests/integration/test_image_management.py | 8 +- tests/integration/test_serial_recovery.py | 193 +- tests/integration/test_serial_recovery_raw.py | 62 - tests/test_cobs.py | 214 ++ tests/test_smp_serial_raw_transport.py | 111 +- 15 files changed, 3388 insertions(+), 115 deletions(-) create mode 100644 src/smpclient/transport/serial/framing/__init__.py create mode 100644 src/smpclient/transport/serial/framing/cobs.py create mode 100644 tests/fixtures/smp-server/zephyr_f33aa2bc4a43_smp_server_fa39f8c2_mps2_an385_serial_recovery_raw_cobs.hex create mode 100644 tests/fixtures/smp-server/zephyr_f33aa2bc4a43_smp_server_fa39f8c2_mps2_an385_serial_recovery_raw_cobs.signed.bin delete mode 100644 tests/integration/test_serial_recovery_raw.py create mode 100644 tests/test_cobs.py diff --git a/src/smpclient/transport/serial/__init__.py b/src/smpclient/transport/serial/__init__.py index 50d5009..eaa3cfc 100644 --- a/src/smpclient/transport/serial/__init__.py +++ b/src/smpclient/transport/serial/__init__.py @@ -8,4 +8,6 @@ from smpclient.transport.serial.encoded import BufferSize as BufferSize from smpclient.transport.serial.encoded import FragmentationStrategy as FragmentationStrategy from smpclient.transport.serial.encoded import SMPSerialTransport as SMPSerialTransport +from smpclient.transport.serial.framing import SerialFraming as SerialFraming +from smpclient.transport.serial.framing.cobs import Cobs as Cobs from smpclient.transport.serial.unencoded import SMPSerialRawTransport as SMPSerialRawTransport diff --git a/src/smpclient/transport/serial/framing/__init__.py b/src/smpclient/transport/serial/framing/__init__.py new file mode 100644 index 0000000..470994e --- /dev/null +++ b/src/smpclient/transport/serial/framing/__init__.py @@ -0,0 +1,28 @@ +"""Pluggable wire framing for the raw serial SMP transport. + +`SMPSerialRawTransport` sends bare bytes when its `framing` is `None`; a `SerialFraming` +wraps each SMP message instead (e.g. `cobs.Cobs`). A framing owns its connection's +reassembly buffer, so it is stateful: one instance per transport. +""" + +from typing import Iterator, Protocol + + +class SerialFraming(Protocol): + """Wire framing plus a stateful frame decoder for one serial connection.""" + + def encode(self, data: bytes) -> Iterator[bytes]: # pragma: no cover + """Yield the wire bytes framing the SMP message `data`.""" + + def feed(self, data: bytes) -> None: # pragma: no cover + """Buffer received bytes for decoding.""" + + def take(self) -> bytes | None: # pragma: no cover + """Return the next decoded SMP message, or `None` if no complete frame is buffered. + + Unconsumed bytes persist for the next call (a read may span frame boundaries), and a + framing that can detect corruption drops the damaged frame and resynchronises. + """ + + def reset(self) -> None: # pragma: no cover + """Discard buffered bytes so a new connection starts clean.""" diff --git a/src/smpclient/transport/serial/framing/cobs.py b/src/smpclient/transport/serial/framing/cobs.py new file mode 100644 index 0000000..f5da3e3 --- /dev/null +++ b/src/smpclient/transport/serial/framing/cobs.py @@ -0,0 +1,150 @@ +"""COBS+CRC16 framing for MCUboot raw serial recovery (intercreate/mcuboot#5). + +The COBS codec matches MCUboot's ``boot/boot_serial/src/cobs.c``; the CRC is +reused from `smp.packet`. +""" + +import logging +from dataclasses import dataclass, field +from typing import Final, Iterator + +from smp.packet import CRC16_STRUCT, crc16_func + +logger = logging.getLogger(__name__) + +_DELIMITER: Final = 0 +_CODE_FULL: Final = 0xFF + +_MAX_BUFFER_BYTES: Final = 1 << 16 +"""Resync ceiling: bytes with no `0x00` delimiter past this are noise, not a frame, so the +buffer is dropped. 64 KiB is far above any SMP-over-serial frame (recovery's +`BOOT_SERIAL_MAX_RECEIVE_SIZE` is a few KiB), and bounds memory on a delimiter-free stream +(e.g. a wrong-baud or wrong-protocol peer) the way the length-prefixed transport already does.""" + + +def cobs_encode(data: bytes) -> bytes: + r"""COBS-encode `data`, with no frame delimiter appended. + + >>> cobs_encode(b"").hex() + '01' + >>> cobs_encode(b"\x01\x02\x03").hex() + '04010203' + >>> cobs_encode(b"\x00").hex() + '0101' + >>> cobs_encode(b"\x11\x00\x22").hex() + '02110222' + >>> cobs_decode(cobs_encode(bytes(range(256)))) == bytes(range(256)) + True + """ + out = bytearray([_DELIMITER]) + code_index = 0 + code = 1 + for byte in data: + if byte != _DELIMITER: + out.append(byte) + code += 1 + if code != _CODE_FULL: + continue + out[code_index] = code + code_index = len(out) + out.append(_DELIMITER) + code = 1 + out[code_index] = code + return bytes(out) + + +def cobs_decode(encoded: bytes) -> bytes: + r"""Decode a COBS frame whose delimiter has been stripped; inverse of `cobs_encode`. + + >>> cobs_decode(bytes.fromhex("04010203")).hex() + '010203' + >>> cobs_decode(bytes.fromhex("0101")) + b'\x00' + >>> cobs_decode(bytes.fromhex("00")) + Traceback (most recent call last): + ... + ValueError: 0x00 code byte in COBS frame + >>> cobs_decode(bytes.fromhex("0511")) + Traceback (most recent call last): + ... + ValueError: truncated COBS frame + """ + out = bytearray() + src = 0 + while src < len(encoded): + code = encoded[src] + src += 1 + if code == _DELIMITER: + raise ValueError("0x00 code byte in COBS frame") + for _ in range(1, code): + if src >= len(encoded): + raise ValueError("truncated COBS frame") + out.append(encoded[src]) + src += 1 + if code != _CODE_FULL and src < len(encoded): + out.append(_DELIMITER) + return bytes(out) + + +def _decode_frame(frame: bytes) -> bytes | None: + r"""Decode and CRC-verify one COBS frame; return its SMP message, or `None` if damaged. + + >>> message = b"\x0a\x00\x00\x01\x00\x01\x00\x05" + >>> _decode_frame(cobs_encode(message + CRC16_STRUCT.pack(crc16_func(message)))) == message + True + >>> _decode_frame(cobs_encode(message + b"\x00\x00")) is None # wrong CRC + True + >>> _decode_frame(b"") is None # empty frame (a stray delimiter) + True + >>> _decode_frame(cobs_encode(b"\x00\x00")) is None # decodes to an empty message + CRC + True + """ + try: + decoded = cobs_decode(frame) + except ValueError: + return None + if len(decoded) <= CRC16_STRUCT.size: # nothing but (at most) a CRC: no message to carry + return None + message, crc = decoded[: -CRC16_STRUCT.size], decoded[-CRC16_STRUCT.size :] + if crc16_func(message) != CRC16_STRUCT.unpack(crc)[0]: + return None + return message + + +@dataclass(frozen=True, slots=True) +class Cobs: + """`SerialFraming` for MCUboot COBS+CRC16 raw serial recovery. + + A value that also owns its connection's reassembly buffer, mutated in place (frozen + forbids rebinding the field, not mutating the `bytearray`); `reset` clears it. Self- + synchronising: a corrupt or truncated frame is dropped and decoding resumes at the next + `0x00` delimiter. Stateful, so use one instance per transport. + """ + + _buffer: bytearray = field(default_factory=bytearray, repr=False, compare=False) + + def encode(self, data: bytes) -> Iterator[bytes]: + """Yield the one COBS frame for the SMP message `data`.""" + yield cobs_encode(data + CRC16_STRUCT.pack(crc16_func(data))) + bytes([_DELIMITER]) + + def feed(self, data: bytes) -> None: + """Buffer received bytes for decoding.""" + self._buffer.extend(data) + + def take(self) -> bytes | None: + """Pop the next CRC-valid SMP message from the buffer, resyncing past bad frames.""" + while (end := self._buffer.find(_DELIMITER)) != -1: + frame = bytes(self._buffer[:end]) + del self._buffer[: end + 1] + if (message := _decode_frame(frame)) is not None: + return message + if frame: # a stray delimiter gives an empty frame; only log real drops + logger.warning(f"COBS: dropped a {len(frame)} B frame, resyncing") + if len(self._buffer) > _MAX_BUFFER_BYTES: # no delimiter in this much: noise, not a frame + logger.warning(f"COBS: discarding {len(self._buffer)} delimiter-less bytes, resyncing") + self._buffer.clear() + return None + + def reset(self) -> None: + """Discard buffered bytes so a new connection starts clean.""" + self._buffer.clear() diff --git a/src/smpclient/transport/serial/unencoded.py b/src/smpclient/transport/serial/unencoded.py index 05dcf0c..0c1a281 100644 --- a/src/smpclient/transport/serial/unencoded.py +++ b/src/smpclient/transport/serial/unencoded.py @@ -20,6 +20,7 @@ from smpclient.exceptions import SMPClientException from smpclient.transport.serial.common import _SerialTransportBase +from smpclient.transport.serial.framing import SerialFraming logger = logging.getLogger(__name__) @@ -28,6 +29,8 @@ class SMPSerialRawTransport(_SerialTransportBase): def __init__( self, mtu: int = 384, + *, + framing: SerialFraming | None = None, baudrate: int = 115200, bytesize: int = 8, parity: str = "N", @@ -47,6 +50,8 @@ def __init__( bytes. A serial link has no MTU of its own, but the SMP server's receive buffer does -- this should match the server's `CONFIG_MCUMGR_TRANSPORT_NETBUF_SIZE` (Zephyr default 384). + framing: optional wire framing for each SMP message (e.g. `Cobs()`); + `None` sends the bare `[header][payload]`. baudrate: The baudrate of the serial connection. OK to ignore for USB CDC ACM. bytesize: The number of data bits. @@ -76,9 +81,16 @@ def __init__( exclusive=exclusive, ) self._mtu: Final = mtu + self._framing: Final = framing logger.debug(f"Initialized {self.__class__.__name__}") + @override + def _reset_state(self) -> None: + """Clear the framing's reassembly buffer so a (re)connection starts clean.""" + if self._framing is not None: + self._framing.reset() + @override async def send(self, data: bytes) -> None: if len(data) > self.max_unencoded_size: @@ -87,12 +99,41 @@ async def send(self, data: bytes) -> None: ) logger.debug(f"Sending {len(data)} bytes") with self._serial_exception_to_disconnected(): - self._conn.write(data) + if self._framing is None: + self._conn.write(data) + else: + for frame in self._framing.encode(data): + self._conn.write(frame) await self._drain_tx() logger.debug(f"Sent {len(data)} bytes") @override async def receive(self) -> bytes: + if self._framing is None: + return await self._receive_length_prefixed() + return await self._receive_framed(self._framing) + + async def _receive_framed(self, framing: SerialFraming) -> bytes: + """Return the next message from `framing`, reading more bytes as needed. + + `framing` owns the buffer, so a read that spanned into the next frame -- or that + delivered several frames at once -- is drained from it before any further read. + """ + logger.debug("Waiting for framed response") + while (message := framing.take()) is None: + data = await self._read_all() + if data: + framing.feed(data) + # `_read_all` does not await (pyserial is synchronous), so yield each + # iteration -- otherwise a non-stop non-framing stream would spin without + # ever suspending, and an outer request timeout could never fire. + await asyncio.sleep(0) + else: + await asyncio.sleep(self._POLLING_INTERVAL_S) + logger.debug(f"Finished receiving framed {len(message)} B response") + return bytes(message) + + async def _receive_length_prefixed(self) -> bytes: logger.debug("Waiting for response") message = bytearray() diff --git a/tests/fixtures/smp-server/SHA256SUMS b/tests/fixtures/smp-server/SHA256SUMS index e75b525..96f935e 100644 --- a/tests/fixtures/smp-server/SHA256SUMS +++ b/tests/fixtures/smp-server/SHA256SUMS @@ -43,3 +43,5 @@ bf5b803bc5b3a108e7c5bfba025a6b923bf39603525b9e980638940dd24dd482 zephyr_4.4.0_s 5cb70b1a4dee7ec367dd298813e40e01f05f62f408025c607880a3f1f8e96fa5 zephyr_4.4.0_smp_server_0eae053d_qemu_cortex_m0_serial_buf512.hex afd094784f98011121b292e2325afc30fd0d342378d9a091f05f0a7b95859f54 zephyr_f33aa2bc4a43_smp_server_27c54835_mps2_an385_serial_recovery_raw.hex f73694b0eb9feb6e53311a0143be81b0cb5c163a7af29ff7cb6a44fe5c618798 zephyr_f33aa2bc4a43_smp_server_27c54835_mps2_an385_serial_recovery_raw.signed.bin +d38b208c0259d772e60eaa534c1bee7a1522cd6b4043cbba4ed52bbd9ac5eed2 zephyr_f33aa2bc4a43_smp_server_fa39f8c2_mps2_an385_serial_recovery_raw_cobs.hex +ebe37ddd46f94b06b34a4ac081f32b482b32c6f83e29114c27b13fc56a4e729a zephyr_f33aa2bc4a43_smp_server_fa39f8c2_mps2_an385_serial_recovery_raw_cobs.signed.bin diff --git a/tests/fixtures/smp-server/VERSION b/tests/fixtures/smp-server/VERSION index 23fbf46..a7eba85 100644 --- a/tests/fixtures/smp-server/VERSION +++ b/tests/fixtures/smp-server/VERSION @@ -33,5 +33,14 @@ # next includes #2755 and #2746, re-vendor the whole set from a single release and drop # this note. # +# Additional pin — the COBS raw serial-recovery fixture `serial_recovery_raw_cobs` (mps2): +# tag: fa39f8c2 https://github.com/intercreate/smp-server-fixtures/releases/tag/fa39f8c2 +# commit: fa39f8c2ce1bacf9907af8df4b04c397be2763cb (smp-server-fixtures) +# zephyr: main f33aa2bc (post-4.4.0) +# +# COBS+CRC16 framing (CONFIG_BOOT_SERIAL_RAW_PROTOCOL_COBS) is not upstream MCUboot +# (intercreate/mcuboot#5); the fixtures repo's build-patched job applies it to this one +# fixture, whose artifacts carry the fa39f8c2 hash and so do not collide with the others. +# # To bump: re-download the artifacts + SHA256SUMS + manifest.json from a newer # per-commit release and update the `tag` above. diff --git a/tests/fixtures/smp-server/manifest.json b/tests/fixtures/smp-server/manifest.json index 3300dbb..bc58a63 100644 --- a/tests/fixtures/smp-server/manifest.json +++ b/tests/fixtures/smp-server/manifest.json @@ -745,5 +745,32 @@ "target": "mps2_an385", "transport": "serial_raw", "udp_port": null + }, + { + "artifact": "zephyr_f33aa2bc4a43_smp_server_fa39f8c2_mps2_an385_serial_recovery_raw_cobs.hex", + "buf_count": 4, + "buf_size": 384, + "config": "serial_recovery_raw_cobs", + "groups": [ + "os", + "img", + "stat", + "settings", + "fs", + "shell", + "enum", + "zbasic" + ], + "ip_family": null, + "line_length_max": 128, + "mcuboot": true, + "qemu_cmd": "qemu-system-arm -cpu cortex-m3 -machine mps2-an385 -nographic -chardev socket,id=con,host=127.0.0.1,port=,server=on,wait=off -serial chardev:con -serial null -monitor none -device loader,file=zephyr_f33aa2bc4a43_smp_server_fa39f8c2_mps2_an385_serial_recovery_raw_cobs.hex -device loader,file=zephyr_f33aa2bc4a43_smp_server_fa39f8c2_mps2_an385_serial_recovery_raw_cobs.signed.bin,addr=0x20050000", + "recovery_buf_count": 1, + "recovery_buf_size": 1024, + "run": null, + "serial_recovery": true, + "target": "mps2_an385", + "transport": "serial_raw", + "udp_port": null } ] diff --git a/tests/fixtures/smp-server/zephyr_f33aa2bc4a43_smp_server_fa39f8c2_mps2_an385_serial_recovery_raw_cobs.hex b/tests/fixtures/smp-server/zephyr_f33aa2bc4a43_smp_server_fa39f8c2_mps2_an385_serial_recovery_raw_cobs.hex new file mode 100644 index 0000000..a120209 --- /dev/null +++ b/tests/fixtures/smp-server/zephyr_f33aa2bc4a43_smp_server_fa39f8c2_mps2_an385_serial_recovery_raw_cobs.hex @@ -0,0 +1,2649 @@ +:10000000A84F0020B11E0000711A00009D1E0000C4 +:100010009D1E00009D1E00009D1E000000000000AF +:100020000000000000000000000000002D1F000084 +:100030009D1E0000000000008120000071280000CB +:10004000ED200000ED200000ED200000ED2000007C +:10005000ED200000ED200000ED200000ED2000006C +:10006000ED200000ED200000ED200000ED2000005C +:10007000ED200000ED200000ED200000ED2000004C +:10008000ED200000ED200000ED200000ED2000003C +:10009000ED200000ED200000ED200000ED2000002C +:1000A000ED200000ED200000ED200000ED2000001C +:1000B000ED200000ED200000ED200000ED2000000C +:1000C00010F8012B11F8013B012A28BF9A42F7D002 +:1000D000D01A7047034613F8012B002AFBD1181AD7 +:1000E00001387047492108B5094803F049FE01F07D +:1000F00063F8024620B14421064803F041FEFEE7C2 +:10010000054801F0CDFB4421044803F039FEFEE729 +:10011000865C0000AA5C00004C590000D85C00001E +:1001200030B587B003F01AFE03F019FE49211E48CE +:1001300003F026FE03F011FE03A800F0DBFD0446E9 +:100140001A4D44212A68131A5A425A41184803F09A +:1001500017FE03F0D8FD28B14421164803F010FE25 +:10016000FFF7C0FF2B68A34202D045211248F5E7F4 +:10017000039B49215A68114803F002FE0399104875 +:100180004B7D0A7DC98A0091492103F0F9FD49217F +:100190000C4803F0F5FD03A800F02AF845210A48B1 +:1001A00003F0EEFDFEE700BF135D00008C020020AF +:1001B0002C5D0000515D0000715D0000945D000049 +:1001C000C35D0000E15D0000065E000021B1012971 +:1001D00006D06FF015007047044B53F8300070479D +:1001E000024B03EBC0035868704700BF545900002E +:1001F00010B502680D4C536812891344236004F053 +:1002000076FC01F0ABFB01F07FFE23681B6883F3F3 +:100210000888002383F31488BFF36F8FBFF36F8FB9 +:100220002368BDE810405B68184700BF80020020CB +:1002300008B5024803F096FD002008BD315E0000BD +:10024000014B1B68184700BF00000020014B1860DD +:10025000704700BF0000002030B5044685B00D4651 +:1002600010220021684605F021F902238DF80230A2 +:10027000044B2A4621466846019303F00BFC05B067 +:1002800030BD00BF41020000044608B5EFF3118302 +:10029000202383F31288BFF36F8F04F028FC2046DD +:1002A00001F020FE024803F05DFD03F0DEFFFCE7F5 +:1002B0006E5E0000014B0360002070475C59000037 +:1002C000F8B506460C4600230A4F3D6825B95BB9D0 +:1002D0003C6000202660F8BD31462868FFF7F0FE3C +:1002E00020B12B466D69F1E75C61F2E76FF07700B2 +:1002F000F1E700BF8402002070B5104B0D461C686A +:10030000B4B10F4B196800238B4202DB6FF0010080 +:1003100070BD224612F8106B864202D0144601339B +:10032000F2E7E06804F0A8FF28B100202C60EFE7B6 +:100330006FF00C00ECE76FF01200E9E7040000201A +:100340005C59000080B505460E461746984603F0F6 +:100350006FF9034601F0DCFE0446DFF818904246D0 +:1003600049F8003039463046A84754F8090001F0F2 +:1003700071FE00BF080000002DE9F347174642F266 +:100380001602424DADF800202A888046ADF80220C2 +:1003900000220C461E4601921BB9032002B0BDE8A4 +:1003A000F087DFF8EC9099F8003053B9394804F041 +:1003B00037F8384803F0BFFF374B1860012389F83E +:1003C00000304FF00409B5F800A0CA4524D8C4F3A2 +:1003D0000B0444EA0830BCB2B5F80080ADF8040064 +:1003E000201D80B24044B0F5803FADF80640D4DA1D +:1003F000294B80B21B68834246DB042341460DEB48 +:100400000302244803F0E7FF0246D8B14521234800 +:1004100003F0B6FC0420C1E7042349461D480DEB58 +:10042000030203F09EFF58BBBDF80430B8EB133F46 +:1004300003D1C3F30B03A34224D0BDF80630043329 +:100440009944C2E708F104013B463246114803F0E3 +:10045000C2FF014618B1024645211148D8E72B8852 +:100460006A4604331C44A4B204230A482C80ADF825 +:10047000024003F0B0FF003818BF012080008DE774 +:1004800005208BE7022089E7012087E7A8000020EC +:10049000EE1000201457000088020020A85E000023 +:1004A000D55E00002DE9F04F9B4682460E469146F0 +:1004B000484F9DB044214848299D3C6803F060FCAA +:1004C000289B0DF150080393279B4A460293269BD5 +:1004D0003146009350465B46CDF8048000F08CF81E +:1004E00078BB5DB1C4462B46624603CA59601CA95D +:1004F0008A421860944603F10803F5D100234A4666 +:10050000009331464FF6FF7306A800F09BF80546AE +:1005100028B144210246314803F032FC11E0DDF8F5 +:100520002CB044215B460A9A2D4803F029FC494629 +:10053000504603F0B6FC58452AD24421294803F01E +:100540001FFC3C6842E0934237D1102A20D144215D +:10055000254803F015FCBDF81030202BF1D1059A89 +:100560007368134403F120050CAA144618685968EF +:10057000083303C4AB422246F7D1202240460CA9DF +:1005800003F08DFC0446194B01251B689842D8D115 +:100590000DF1120304AA05A906A800F09FF800288F +:1005A000CFDB11D1059906A803F06BFCBDF8122032 +:1005B0000028CAD14FF6FF700D4931F8023B834243 +:1005C000C1D144210B48A7E7012DBAD120461DB067 +:1005D000BDE8F08F0C000020105F00003A5F0000C3 +:1005E0006E5F00009D5F0000006000008C02002034 +:1005F000685C0000CF5F000070B511489CB00C46ED +:10060000DDE92256442103F0BBFB684600F0F0FC14 +:1006100035B1002E04DD32462946684603F0E1FC80 +:100620006289238961681344E26868461A4403F0CA +:10063000D8FC6946219803F0FAFC00201CB070BD7C +:10064000346000002DE9F3411E4604469DF82080E9 +:100650000D4617464346324644211F4803F090FB9F +:1006600024B94FF0FF3002B0BDE8F081002DF8D082 +:10067000002FF6D046F6081CEB68298919446B68F0 +:100680005A5858181FFA82FE0192E6456B891FD10D +:10069000B3EB124F4FEA124CE3D15CF800300193F8 +:1006A00046F60713BDF804209A42DAD1C4E9005790 +:1006B000268184F80A806B89BDF806200B44E3602C +:1006C0006B89002013440B44043163612161CAE744 +:1006D000002BE5D0C5E700BF4B6000002DE9F743D4 +:1006E0000D4616461F46044600283BD00368002BE3 +:1006F00038D04368002B35D04FF6FF78436944214A +:1007000001930369009302894FF6FF732E4803F0AB +:1007100037FBD4F814E02269724503D344212289BF +:100720002A4807E0A07A48B1E368934206D84421FA +:100730002289274803F024FB012015E021684B891A +:100740002BB1E368934202D104322261E3E770B136 +:10075000E3689A4202D8981A03280AD844211D480F +:1007600003F00EFB4FF0FF3003B0BDE8F08373469B +:10077000EFE7496804388958B0EB114FC1F30F49CE +:100780004FEA114C02D244211348E9E720898BB289 +:10079000404501D0984214D107B13B8023690F48EE +:1007A00004332B60A6F8009023698AB204336344B3 +:1007B00023613388442100932B6803F0E1FA002081 +:1007C000D2E704326244C0E77D600000D4610000DB +:1007D000D36000000B610000516100009A610000CD +:1007E0002DE9F04306460C4685B0CDE9002391463D +:1007F0001F4602460B462348442103F0C1FAB36862 +:10080000A34239D91B1B4B4536D344211E4803F064 +:10081000B7FA0FB32146304602AA03F083FA051E49 +:100820002CDB013CDDF808804C442146304602AA0E +:1008300003F078FA051E21DBDDE9024930464A461D +:10084000214603F0FBFA051E18DB03F088FA77B1A6 +:10085000444513D9013CE8E7611E304602AA4944E9 +:1008600003F060FA051E09DBDDF80880DDE74C4483 +:10087000A04503D30134D8E74FF0FF35284605B033 +:10088000BDE8F083026200004F620000F7B5144635 +:10089000CDE9002305460E461F4602460B46084892 +:1008A000442103F06DFA44B13B46224631462846C6 +:1008B00003B0BDE8F040FFF793BF204603B0F0BDA2 +:1008C000796200002C2310B559434218146A0CB900 +:1008D00003F0E8FC41580D4B994206D1D1681389C9 +:1008E0005B1802D25189C91801D300200CE0A3681B +:1008F0009942FAD2106920F4F97020F00100000545 +:10090000000DB0FA80F0400910BD00BF3DB8F3966D +:100910001FB52C2303FB02010A6A0AB903F0C2FCCB +:100920000023CDE9023301934FF480730093034B0E +:10093000FFF7B8FD05B05DF804FB00BFEF10002025 +:1009400030B505460C464B8885B003934B7802932F +:100950000B784421019343880093437802780D4833 +:1009600003F00EFA2A7823789A4210D80CD36A78CA +:1009700063789A420BD807D36A8863889A4206D86C +:1009800060EB000005B030BD4FF0FF30FAE701200A +:10099000F8E700BFA06200002C2370B503FB010440 +:1009A0000D46266A00F06AF82A460346314620467C +:1009B00000F00AF8044618B14521024803F0E0F9B6 +:1009C000204670BDD6620000F0B51D460623002407 +:1009D000012787B08DF80720244A254E51681068FA +:1009E0008DF80D3004AB03C331788DF80E408DF8CF +:1009F0000F70A1BB3A4602200DF10D03FFF7BCFCBE +:100A0000044660BB3A46394602200DF10E03FFF75B +:100A1000B3FC044618BB02213A4608460DF10F0309 +:100A2000FFF7AAFC0446D0B93A46032102200DF193 +:100A30000703FFF7A1FC044688B90822042102201D +:100A400004ABFFF799FC044648B92B7853B1042254 +:100A5000052102202B1DFFF78FFC18B1044620460C +:100A600007B0F0BD01233370F9E700BF445900001F +:100A7000EF1100200048704798020020004870479E +:100A8000900200202DE9F84305464FF000083D4E46 +:100A90002B6E013373D195F8643095F86520013BD6 +:100AA000DAB1013323D005F1140105F14000FFF75D +:100AB00047FF431E5C425C4128462C6600F02CF93F +:100AC0000346C0B12146284600F08EF94FF0FF33AF +:100AD0002C4484F864802B66DAE7013309D149217C +:100AE000294803F04DF9294B1868BDE8F883012423 +:100AF000E2E71446E0E74FF02C0909FB04592246CF +:100B00004421234803F03CF9D9F820700FB903F0D1 +:100B1000C9FB2146284603F012FA20B9D9F8101073 +:100B200011F0100908D01B4B18683368834226D097 +:100B3000284600F045F9C9E721462846FFF7C2FEDE +:100B4000B8B915482246442103F01AF90F4B18682A +:100B500033688342E9D0114B114A4521002C18BF5C +:100B60001A46104803F00CF92146384603F0E2F922 +:100B7000D9E7224649462846FFF7CAFEE8E7014B77 +:100B8000B2E700BF8C020020176300000C000020B9 +:100B90003963000008000020716300000D6300004D +:100BA00005630000A66300002DE9F043DFF81C9107 +:100BB00085B004460F46D9F8006003F0E5F9024617 +:100BC00028B1D9F80060304605B0BDE8F083014691 +:100BD000204603F0C1F9054648B157213C4803F0CF +:100BE000CFF8204603F0E8F9002DEAD1EBE7014603 +:100BF0002046FFF767FE70BB2A464921354B364831 +:100C000084F8645003F0BCF801212046FFF75AFE37 +:100C1000024600282FD0012384F86530636C4921F7 +:100C20000293B4F842302D4A019394F841302C4895 +:100C3000009394F8403003F0A3F84FF0FF3323669D +:100C40002046FFF71FFF0646264B1B6883421AD03B +:100C5000D9F80060C5E7012384F86430A36949210D +:100C60000293E38A204A0193637D1D480093237D0C +:100C700003F086F8C8E784F8650049211B4B164845 +:100C800003F07EF8D9E7204694F86010FFF784FE61 +:100C900005460028DCD1226E14490E4B002A18BFED +:100CA0000B4602464921124803F06AF82C22236EB3 +:100CB00002FB0348D8F8200003F032F83871D8F866 +:100CC00020305B68C7F80080BB608AE70C0000201A +:100CD000CE63000005630000F1630000446400007F +:100CE000206400008C020020186400000D630000E6 +:100CF0004E64000010B50446064803F05EF905484E +:100D00002146FFF751FF0446024803F012F920463E +:100D100010BD00BF98020020F7B52C25016E0646D5 +:100D200005FB01052B699B063BD501AA6F6803F003 +:100D3000BBF80446A8B91C4A019B9742B766F36604 +:100D400008D9D91906D2194A914203D8286A58B944 +:100D500003F0A8FA3B4600224921154803F010F899 +:100D60000324204603B0F0BD21463A4603F03CF888 +:100D7000044678B10346002249210E4803F000F8EA +:100D80003B46002249210C4802F0FAFF0023C6E945 +:100D90001A33E6E702463B464921084802F0F0FFD5 +:100DA000DFE70324F2E700BFFFFF232000F03F202E +:100DB00074640000A4640000DE6400000B650000A1 +:100DC00010B50446836E00224921064802F0D8FF80 +:100DD0000021E26EA06E04F069FB0020C4E91A0055 +:100DE00010BD00BF3B65000038B500220B4605462C +:100DF0000C460848492102F0C3FF2C2303FB04558D +:100E0000286A08B903F04EFA2146BDE8384003F0DD +:100E100091B800BF6C6500002DE9F04F0026036813 +:100E20009DB002934368DFF8C0E1039383688A466C +:100E3000DDE902150493C36805930369DDE904B78E +:100E40000693436907938369DDE9062C0893C36918 +:100E500098460993089B00935AF806400CAB24BAB5 +:100E60005EF8049B9C514FEAF223A14483EAB2133B +:100E7000009C83EA72634B4424EA020402EA0C09F0 +:100E800084EA09042344434485EA0B044FEA713899 +:100E900088EAB1080C4005EA0B0984EA090488EAEB +:100EA000B1580436A044402E03EB070443445F4688 +:100EB000DDF8008040F088804FF0100A4B4E0A9613 +:100EC00056460AF1010A0DF1700E0AF00F070EEBFB +:100ED000870757F8407C06F00F094FEAB74801979B +:100EE00088EAF71806F10E0707F00F070EEB8707E1 +:100EF00057F8407C09364FEAF74E8EEA774ECDF828 +:100F00002CE006F00F060DF1700E0EEB86060EEBD0 +:100F1000890959F840EC56F8406CBAF1400F764414 +:100F2000DDF804E088EADE08DDF82CE046448EEACD +:100F3000972E764404EA02084FEAF42E2CEA0407BE +:100F400087EA08078EEAB41EDDF828808EEA746E00 +:100F5000774458F804EF49F8406C77443744009ED2 +:100F60004FEA733E3E4481EA0507CDF828808EEAB9 +:100F7000B30E07EA030701EA05088EEAB35E87EAC3 +:100F800008077744374406EB0B0ECDF800C0AB469C +:100F900022D1029E3E440660039E1E44049B46608E +:100FA0000B448360059B2B44C360069B7344036121 +:100FB000079B23444361089B13448361099B63445B +:100FC000C3611DB0BDE8F08FAB46CDF800C00D4643 +:100FD0009446194622463FE794460D462246194656 +:100FE00074463B466CE700BFA0590000DC59000086 +:100FF00010B50446C8B17022002103F06CF80B4B09 +:101000000B4A0C49C4E900230B4B0C48C4E90213FA +:101010000B4BC4E9040301200A4BA36103F1745391 +:10102000A3F52303A3F69243E36110BD85AE67BB2E +:1010300067E6096A72F36E3C3AF54FA57F520E518E +:101040008C68059BABD9831FF7B5274E3068836842 +:101050005B6C03B19847306883685B6B002B2AD1C7 +:10106000224C234D234F306883689B69002B2CD082 +:101070000DF10701012298470128216825D141B9C6 +:101080002968E9B16A680B6891422B6000D16B60F6 +:1010900021603A889DF80700531C9BB20A447F2BBD +:1010A0003B801072DFD94B60134803F016F8002321 +:1010B0003B802360D6E798470028D1D103B0F0BD2C +:1010C00045210E4802F05CFEF8E721680029F5D0C2 +:1010D000084A1388002BF1D04B60074802F0FDFF4F +:1010E000002313802360E9E768070020080300203D +:1010F00020030020EC10002018030020966500005B +:1011000010B5044B044618688368E1B25B689847E1 +:10111000204610BD680700202DE9F047DFF88490D5 +:101120008046D9F800500C4617461F4E65BBEFF3BA +:10113000118A202383F31288BFF36F8F1B4A116833 +:1011400029B11B4843688B4201D002F0C6FF194801 +:10115000036833B1D0F804C019686345016008BF63 +:1011600041608AF31188BFF36F8F136043B919464A +:101170001A463360C9F800103A602846BDE8F08787 +:1011800003F108025D683260AC42A8BF2C463168AA +:101190002246404604F063F93368291B01222546A4 +:1011A0002344E6E714030020100300200C03002072 +:1011B000200300201803002037B5204D2B7813B1F1 +:1011C000002003B030BD1E4A1E48C2E900331A4653 +:1011D000C0E900331C49013202F07FFF082A01F107 +:1011E0008801F8D1194C1A48206004F045F810B372 +:1011F0002068836823B19B6C13B10022154998477E +:10120000206883685B6B0BB1984748B1206883689E +:101210009B69002BFAD001220DF107019847F4E7F2 +:1012200000220D4B20681A8083689B6A03B198479F +:1012300001232B70C4E74FF0FF30C2E7F01100200C +:101240001803002020030020280300206807002046 +:10125000C056000049100000EC1000202DE9F041BC +:101260000025DFF88080204BD8F800101C680B7830 +:101270001E4F5A1CE41B62F30203D8B00B7063BA12 +:101280004B808B884D705BBA8B800822284603F018 +:1012900011F82246394603F00DF86B46D8F80020C5 +:1012A00046BA51681068224603C33946184604F00E +:1012B000D6F82CAA6946065304F10A0002F07BFF17 +:1012C00000F5B0736B4403F8B05C094B411C1B681C +:1012D0002CA85B6898474421064802F051FD58B09D +:1012E000BDE8F081C007002078070020F111002040 +:1012F000C4070020D46500002DE9F0474FF0FF340B +:1013000000250B460121D4B00594069407940AAE3B +:101310000246C6E90055089530A80091CDE901556F +:101320000421099503F0C3FE4022294620A804F0B9 +:10133000BDF8814B03211C93052304221D937F4B91 +:101340000DF1180ACDE91E3A7D4B7E4821937E4B64 +:1013500005AFCDE923367D4B0DF11C0826937C4B60 +:10136000CDE92B01CDE92838CDE92D37279109ABFF +:101370001CA930A808AC229202F0C7FE30B30325A6 +:101380002A464421734802F0FBFC0A21724803F00C +:1013900047FF72490222704803F035FF29466E4824 +:1013A00003F00EFF4DB9674903226B4803F02BFF92 +:1013B0006B4B6948196803F00DFF0A21664803F07A +:1013C00037FFFFF74BFF54B0BDE8F0873B685A1C6E +:1013D000D5D0D6F80090B9F1000FD0D07668614A28 +:1013E00033B9DAF80010B1F1FF3F18BF0B461360B4 +:1013F00000211068FEF7EAFE2146C0B2FEF77CFF2E +:1014000005460028BBD13B68554F002B3DD12068D5 +:10141000D8F8003082683D609342B0D82B46294608 +:10142000FFF7DEF90028AAD1D8F800204E4B1A6049 +:10143000206802F018FDB6FBF0F303FB00FA3A68EF +:10144000494902EB0A030968A6EB0A069819884283 +:1014500038BF00264421454802F092FC206802F083 +:1014600002FD0128D04606D9206802F0FCFC0138B4 +:1014700019EA000F3DD153464A463968206802F008 +:10148000C8FC00287FF47BAF2DE03A6893427FF4DC +:1014900077AF354A334412689342C9D96FE7C245E2 +:1014A000206828BFC24602F0E5FC402201460CA895 +:1014B00003F0FCFF524649460CA803F0D0FF534608 +:1014C000396820680CAA02F0A4FC08B1054657E769 +:1014D0003B68D14453443B60A8EB0A08206802F003 +:1014E000C2FC4045DBD93EB93B68334443443B60D2 +:1014F00046E74FF0400AF1E7206802F0BBFC082203 +:1015000001460CA803F0D2FF324609EB08010CA8F3 +:1015100003F0A5FFD4F800903968484608EB0104B1 +:1015200002F0A1FC214603460CAA484602F071FCD9 +:1015300000287FF424AFD7E7DC650000DD4E000013 +:10154000E2650000E7650000E74E0000DB6C00008C +:10155000E34E00000B6600007807002019660000CB +:1015600070070020740700206C070020EB65000066 +:1015700010B504460A210A4803F052FE0222094926 +:10158000074803F040FE2146054803F019FE0A21F2 +:10159000034803F04DFEBDE81040FFF75FBE00BFFB +:1015A0007807002019660000002307B50221009388 +:1015B000034AA423034803F03DFE03B05DF804FB97 +:1015C000F1110020780700202DE9F04F072904468B +:1015D000ADB040F24581037813F0050F40F0408133 +:1015E0004388A1F108055BBA9BB2AB42C0F03881D9 +:1015F0009D4B186083885BBA8380FFF7D5FFA68870 +:10160000012E40F0E880E37923B1012B00F0DB806C +:101610000820ECE02778FFF72DFA054602F0CDFC14 +:10162000284602F0B1FC07F00707044688B10246DD +:1016300045218E4802F0A4FB3446284602F079FC8E +:1016400014B12046FFF794FF2DB0BDE8F04FFFF72F +:10165000ABBF002F40F0B5803146854803F0E0FD78 +:1016600006228449824803F0CEFD0521804803F01C +:10167000D3FD2746DFF80082DFF80092DFF800A2F2 +:101680007B4205F1200203F02C03D658002E6AD0CD +:101690002023002130460CAAD8F800B002F0A4FBA9 +:1016A0000C9B4B450CD10023CDE902330193402321 +:1016B0003246009328461CAB0CA9FEF7F3FE834686 +:1016C000DAF800305B454ED10023324600930CA976 +:1016D0004FF6FF7306A8FEF7B5FF002856D04FF06F +:1016E000FF361421624803F09BFD664904226048DE +:1016F00003F089FD39465E4803F06CFD4EB90422C3 +:1017000061495B4803F07FFD2022594814A903F08A +:1017100071FD07225D49564803F075FDBDF846305E +:101720001CAE01939DF845304021009330469DF852 +:101730004430574A02F084F9129B43B1421E3E2ABC +:1017400005D8C0F14001534A304402F079F93046DF +:10175000FEF7C0FC31460246454803F054FD142113 +:10176000434803F065FD7B1C022B4FF0010787D136 +:1017700005213F4803F058FD39463D4803F058FD28 +:10178000FFF76CFD284602F017FC56E70DF1120337 +:1017900004AA05A906A8FEF7A1FF00289FD1BDF85D +:1017A0001230102BF2D1BDF81030202B97D13046DB +:1017B000059914AA02F018FB061E18BF01267642EE +:1017C0008FE70824DEE7294604F108002DB0BDE8C4 +:1017D000F04FFFF791BD002E7FF41AAFE379052B90 +:1017E0000AD0062B12D0012B7FF412AF30462DB059 +:1017F000BDE8F04FFFF7BCBE3046FFF7B9FE192039 +:10180000002103F0F8FD0120FEF73EFD02211848FB +:1018100003F006FD00B308221F49154803F0F3FC4E +:10182000D0B14FF48061124803F0D4FCA0B109227A +:101830001A490F4803F0E7FC70B101210C4803F08E +:10184000C9FC48B102210A4803F0F2FC20B12DB0D6 +:10185000BDE8F04FFFF702BDFFF7A6FE0220C6E786 +:101860002DB0BDE8F08F00BFC00700201C6600004F +:1018700078070020406600000C0000203DB8F39679 +:101880008C020020476600004C6600005166000094 +:101890005966000065660000696600007266000017 +:1018A00001232DE9F04F06460024DFF8A48085B01F +:1018B00088F80030274B284F186098F8003013B98B +:1018C00005B0BDE8F08F02F04AFA336803AAC4F508 +:1018D000816138199847002802DC039B002BECD06B +:1018E000251800200146DFF8709085420DDC6C1A47 +:1018F00031B18D42E1DD22463846394403F0BDFD69 +:10190000B4F5816F08BF0024D7E719F801BB00F1D7 +:10191000010ABBF1000F19D1401A002815DD7C180F +:101920002246214602F061FCA0F10A03B3F57E7F56 +:1019300002460AD801902146584602F0BBFC019AA3 +:1019400018B92046911EFFF73FFE51465046CCE79E +:1019500095120020C407002096120020BFF36F8F5D +:1019600072B64FF0FF32114BC3F88020C3F88420C9 +:10197000C3F88820C3F88C20C3F89020C3F89420C3 +:10198000C3F89820C3F89C20C3F88021C3F88421B1 +:10199000C3F88821C3F88C21C3F89021C3F894219F +:1019A000C3F89821C3F89C21704700BF00E100E014 +:1019B00008B50348034A0021121A02F035FC08BD9D +:1019C000E0000020A8160020074808B5074A08498B +:1019D000121A02F02BFCBDE808400648064A0749E7 +:1019E000121A02F023BC00BF00000020DC0000201F +:1019F00048A40000000000200000002048A40000CF +:101A000037B505460C46C9B18B6814480093D1E937 +:101A10000023452102F0B4F9636945210093D4E91C +:101A200003230F4802F0ACF94521E2690D4802F0AA +:101A3000A7F94521A2690C4802F0A2F9012D06D1AF +:101A4000EFF3058245210948103A02F099F9214641 +:101A5000284603B0BDE8304001F000B87C660000C5 +:101A6000B0660000E4660000F86600002B67000026 +:101A700008B5034B1B689847BDE8084000F0DABA88 +:101A80001000002030BFFFF7FDBF00BF2DE9F0417F +:101A900005460B4EDFF82C80324606EB0807CC1BC0 +:101AA0002046094903F0DBFCA01942460021083C0E +:101AB00003F0FCFC2C6707F10800BDE8F08100BFD3 +:101AC00000000000040000004459000010B5204C44 +:101AD0004521204802F054F9A36A990136D51E48E1 +:101AE000452102F04DF91E20A36ADA0104D51B48F6 +:101AF000452102F045F91F20154CA36A1B0304D5AC +:101B00001748452102F03CF92120A36A590304D566 +:101B10001448452102F034F922200D4CA36A9A039F +:101B200004D51148452102F02BF92320A36ADB03D9 +:101B300004D50E48452102F023F92420044A936A73 +:101B40006FEA03436FEA1343936210BD1D20CBE796 +:101B500000ED00E043670000606700007867000068 +:101B600097670000BA670000E467000003680000A0 +:101B700070B5244C06460D462348452102F000F975 +:101B8000A36AD9043BD52148452102F0F9F8172072 +:101B9000A36A1A0504D51E48452102F0F1F8182061 +:101BA000184CA36A9B0511D545211A4802F0E8F8A4 +:101BB000A26BA36A190408D54521174802F0E0F882 +:101BC0001EB1A36A23F40043A36219200D4CA36A3B +:101BD0005A0504D51148452102F0D2F81A20A36A0B +:101BE000DB0504D50E48452102F0CAF81B20054A42 +:101BF000936A43F47F43936200232B7070BD1620D9 +:101C0000C6E700BF00ED00E0336800004E6800004A +:101C1000646800007C6800009A680000B4680000F6 +:101C2000D468000070B5224C06460D462148452177 +:101C300002F0A6F8A36AD90637D51F48452102F05D +:101C40009FF81120A36A1A0704D51C48452102F009 +:101C500097F81220164CA36A9B0711D54521184806 +:101C600002F08EF8626BA36A190608D54521154863 +:101C700002F086F81EB1A36A23F08003A36213204A +:101C80000B4CA36ADA0704D50F48452102F078F817 +:101C90001420A36A064ADB0658BFA36A936A43F07E +:101CA000FF03936200232B7070BD1020CAE700BFB2 +:101CB00000ED00E0F16800000C69000064680000BD +:101CC00044690000616900007C6900002DE9F04171 +:101CD000614B04465F6800258AB0C7F3080685F3A8 +:101CE0001188BFF36F8F02F07F43B3F17F4F07D1AD +:101CF00002F00C03082B14D14521584802F040F89B +:101D000000252C464FF00008F31E8DF80780092BA4 +:101D100000F29180DFE803F00A8488808F8F8F8F34 +:101D20008F8C10074CBF0C460125EBE745214C4832 +:101D3000494E02F025F88DF80780F36A9A0705D519 +:101D40004521484802F01CF800232DE0F36A002BDF +:101D500002DA45214448F5E7F36A5B00F4D54521F2 +:101D6000424802F00DF87369A26943F4807373610D +:101D7000BFF34F8FBFF36F8F32F8023C726922F4CA +:101D800080727261BFF34F8FBFF36F8F03F47F4296 +:101D9000B2F55F4F28D1DBB2022B25D14521226855 +:101DA000334801F0EDFF23689DF80720CAB902AE61 +:101DB00004F12007324620686168083403C2BC423F +:101DC0001646F7D1099A002D42D0C2F3080121B975 +:101DD0006FEA52226FEA42220992184602A9FFF7DF +:101DE0000FFE0AB0BDE8F0811B4B9A6AD2B22AB14D +:101DF00001200DF10701FFF715FF0FE09A6A12F4B9 +:101E00007F4F05D001200DF10701FFF7B1FE05E07E +:101E10009B6AB3F5803F97D3FFF758FE0346C3E7AD +:101E200000200DF10701E6E700200DF10701ECE7C6 +:101E30004521104886E7104917F4F87F0F4A1048EB +:101E400018BF0A46A6F11003452101F099FF7BE770 +:101E50006FF30802C0E700BF00ED00E0CE690000AC +:101E6000FE6900001A6A0000406A0000536A000020 +:101E7000776A0000986A0000B5690000A069000058 +:101E8000C16A0000044B5A6942F010025A615A6953 +:101E900022F008025A61704700ED00E0EFF308807D +:101EA000EFF3098101B57246FFF710FF01BD00BFD6 +:101EB0000A4880F30888202080F3118808484FF4EE +:101EC0008051401880F30988EFF314800221084301 +:101ED00080F31488BFF36F8F02F0B2F9A84F00208F +:101EE000A8160020BFF34F8F0549064BCA6802F4BD +:101EF000E0621343CB60BFF34F8F00BFFDE700BF2D +:101F000000ED00E00400FA05002318460649D1F868 +:101F10009020C2F30722934200DB7047C1F898304B +:101F2000C1F8A0000133F6E700ED00E01EF0040F59 +:101F30000CBFEFF30880EFF30980816911F8021CF0 +:101F40000229FFD001B5724602F072F901BD00BF4F +:101F500040B2002807DB01234109034A00F01F00BB +:101F6000834042F82130704700E100E040B2002891 +:101F700001F10101ACBF00F16040064B4FEA411195 +:101F8000C9B2ABBF00F5614000F00F0080F800134C +:101F90001954704714ED00E0054B064A23F0404306 +:101FA00023F07F039360BFF34F8FBFF36F8F7047B2 +:101FB0000000000000ED00E042F8203C009B0B49CF +:101FC00042F81C3C019B21F0010142F8183C029BA5 +:101FD00042F8081C42F8143C4FF0807342F8043C6D +:101FE0000023203A02654367704700BF45030000A5 +:101FF00000B50B4B15469860026F0A4B0E461A60EF +:102000002C4686F309880020034B98472046002180 +:1020100000220023014C20475D42000045030000E0 +:10202000BC100020C80700201022014B1A61704725 +:1020300000ED00E0054B5A699B689A421FBF044AB5 +:10204000536843F080535360704700BFBC100020BA +:1020500000ED00E0084B9B6883420BD1EFF3058352 +:1020600043B1064B5A6842F080525A605A6A22F4D1 +:1020700000425A6203F027B9BC10002000ED00E0D6 +:1020800011498A684FF030001044EFF3098C80E862 +:10209000F01F202080F31288BFF36F8F0B4F4FF09B +:1020A00000664A698A603E60106F094C2060506F7C +:1020B0000023536780F3118802F1300090E8F01F8D +:1020C0008CF3098870470000BC10002004ED00E08C +:1020D000C8070020002320210348C2180133202B09 +:1020E00082F80013F9D1704700E100E008B5EFF382 +:1020F0000583064A103B02EBC30152F833004968DE +:102100008847BDE80840FFF795BF00BF3057000083 +:102110000148006870470000C80700200121024BF9 +:10212000024A034800F09EB800000420000000208E +:10213000A05A000007B502460C48C0F898200B686A +:1021400023F01F03134343F01003C0F89C308B6847 +:1021500043F00103C0F8A0308B68054800930B687A +:10216000442101F00DFE03B05DF804FB00ED00E03A +:10217000DD6A000038B50E4B0D46D3F890300446AA +:10218000C3F30723013B9842024607D9452109487A +:1021900001F0F6FD6FF01504204638BD44210648D5 +:1021A00001F0EEFD29462046FFF7C4FFF4E700BF2B +:1021B00000ED00E0F56A0000206B00002DE9FF4112 +:1021C0000F46984605460026BE420EDA6B685BB3A2 +:1021D000B8F1000F12D0591E0B420AD032464521E9 +:1021E000134801F0CDFD6FF01502104604B0BDE8B4 +:1021F000F0811F2BF2D92B681942EFD1D4B22246BD +:1022000044210C4801F0BCFD2B6801A90193D5E9DC +:10221000010302F037F8034320460393FFF7AAFFB8 +:1022200010F1160FDFD0421C01360C35CCE700BF91 +:10223000466B0000716B00000522044BC3F894202C +:10224000BFF34F8FBFF36F8F704700BF00ED00E00B +:10225000BFF35F8F0022024BC3F89420704700BF8A +:1022600000ED00E010B5034C01232278FFF7A6FF34 +:10227000207010BD9E1600202DE9F0435A4A5B4E97 +:10228000D2F890303568C3F307239D4285B000F241 +:10229000A880D2F890204421C2F30722544801F0CC +:1022A0006FFD0024FFF7D4FF0C27A54219D1514F31 +:1022B00068463D70FDF7FEFF4FF0000881464E4C2A +:1022C0004E4D4F4EC14514D100203B784649D1F8C0 +:1022D0009020C2F3072293427DDBFFF7ADFF002081 +:1022E00045E07168204607FB0411FFF723FF013426 +:1022F000DBE700984FEA081C00EB0811CB6823408D +:10230000B3F5000F49D00BD8B3F5001F32D0B3F5A9 +:10231000800F37D0B3F5801F14D008F10108D1E742 +:10232000B3F1007F42D0B3F1805F48D0B3F1807F3A +:10233000F3D150F80C30886801F0A4FF4A6840F0EF +:10234000887009E050F80C30886801F09BFF4A68FB +:1023500040F0885040F43020039001A93878CDE94E +:102360000123FFF707FF002831DA6FF0150005B0F1 +:10237000BDE8F08350F80C30886801F083FF4A68AC +:102380003043E9E750F80C30886801F07BFF40F0FB +:1023900000704A6840F40030DEE750F80C3088687E +:1023A00001F070FF4A6840F08270D5E750F80C30B9 +:1023B000886801F067FF4A6840F48020CCE750F855 +:1023C0000C30886801F05EFF4A682843C4E73B7818 +:1023D00001333B70A1E7C1F89830C1F8A000013388 +:1023E00075E74FF0FF30C2E700ED00E0AC5A0000A7 +:1023F000996B00009E1600200000F0FF0000021103 +:102400000000081108B5024B1B689847002008BD62 +:10241000CC070020034B044A1860937843F0020372 +:1024200093707047CC0700201400002008B50548C1 +:1024300001F098FC002383F31188BFF36F8F04230E +:10244000184602DFC46B000070B54568066928684D +:1024500002F012FF38B94521124801F091FC6FF0EB +:102460001204204670BD286883681B689847041EC4 +:1024700005DA224645210C4801F082FCF1E7D5E956 +:1024800001231A44A24207D923464521074801F0F7 +:1024900077FC6FF01504E4E7301D02F00BFF002419 +:1024A000DFE700BFCD6B0000ED6B0000146C000097 +:1024B00013B504460B4801F043FF012802D010F188 +:1024C000860F0CD10123002106480DF1070201F00F +:1024D00048FF20B99DF807301B1B5842584102B0F5 +:1024E00010BD00BFF8560000014801F099BF00BFC1 +:1024F000F856000008B5074802F0BEFE38B106489D +:10250000FFF788FF0448FDF7A1FE002008BD6FF02B +:102510001200FBE7A45600001D2500000A2838B56C +:102520000446074D04D1AB680D2128465B689847E7 +:10253000AB6803485B68E1B29847204638BD00BFEE +:10254000A456000038B50546002910461C462A69E5 +:1025500014DB6B685B698B4210D95B1A9C420DD807 +:10256000084D6B6A01336B6213682246194402F00E +:1025700076FF0020AB692344AB6138BD6FF01500D6 +:10258000FBE700BF2408002040F2092213B50F4BDF +:1025900004460421019300920D4B0E4801F004FC07 +:1025A00003220D4B0092019304210C4B0C4801F0C7 +:1025B000FBFB23691A7932B1626818685168526965 +:1025C000497902F073FF002002B010BD7D6C00005D +:1025D0000B980000240800208D6C0000F997000083 +:1025E0000008002000292DE9F8438046174646DB05 +:1025F000D0F80490D9F814308B4240D95B1A9A4233 +:102600003DD8D9F81030B1FBF3F203FB1212002AC7 +:1026100035D1B7FBF3F603FB167686BB194C1A4A85 +:10262000636BD2690133636322B1934202D300200A +:10263000BDE8F883D9F81030B1FBF3F505F10F03CD +:1026400004EB8304D9F81030B7FBF3F3B342EED9AF +:102650007019FF2898BF236806F101069CBF01335B +:102660002360D8F8043004341A695968D8F8103057 +:1026700049791B6802FB003002F018FFE2E76FF0B7 +:102680001500D5E724080020000800202DE9F74FA9 +:102690000D1E91461F46D0F810A06BDBD0F80480C9 +:1026A000D8F81430AB4265D95B1B9F4262D8D8F88A +:1026B00004301B68B5FBF3F203FB1252002A59D118 +:1026C000B7FBF3F403FB1474002C53D12B4EA34639 +:1026D000F36A0133F362D8F80430D8F800001A68BE +:1026E000597902F0E3FEBB4510D32548836933B125 +:1026F000F26A934208D322D1036A2BB10123BC4270 +:102700001FD1F3692344F361002013E0D8F80430AB +:102710000BEB05011A68DAF80030D8F8000019440C +:10272000019202F0CBFE019A38B16FF00400336AD7 +:102730000133336203B0BDE8F08F9344D3E7002345 +:10274000DDE713B1026AA242DED9D8F80420DAF834 +:1027500000E004EB050C527919F804101EF80CB0D7 +:10276000FF2A0CBF01EA0B0141EA0B010EF80C1025 +:102770000134C4E76FF01500DCE700BF2408002037 +:102780000008002070B50F4D00EB8104A04201D17C +:10279000002070BD4378017813F0010FC1F30113DD +:1027A0000CBF4FF400324FF48032061D01F00F01D0 +:1027B00055F8230001F063FF10F1860FE9D0304691 +:1027C000E4E700BFD85B0000054B1B7833B180689D +:1027D0004FF0FF324FF0FF3300F0BCBA704700BF3C +:1027E000A3160020034B1B7813B1806800F060BB78 +:1027F000704700BFA31600204FF0E0230D4A9969EF +:10280000126818699B69002908BF1146002B08BF90 +:10281000134610F4803F084801D1994205D201685F +:10282000114401604FF0E021096900681044C01AAA +:10283000704700BFB8100020A81000202022002000 +:10284000074B83F82320074B074A1A60074B013ACE +:1028500018604FF0E0235A61072298611A617047AF +:1028600000ED00E0B810002090D00300A810002078 +:10287000684620F007018D4631B5EFF3118520231E +:1028800083F31288BFF36F8FFFF7B6FF0D4B0E4A2D +:10289000186811680D4C0844106000221A60236803 +:1028A0000B49C01AB0FBF1F001FB00332360094B68 +:1028B00029461A6001F042F8FFF7BCFBBDE8314041 +:1028C00085467047A8100020B4100020B0100020EA +:1028D00090D00300AC1000202DE9F04180462E4F2F +:1028E00069B1B0F1FF3F0AD14FF0E022136923F044 +:1028F000010313614FF07F433B60BDE8F081FFF7B8 +:102900007BFF4FF0E0230022244C99692368B8F143 +:10291000FF3F00EB0306224B3D681A601FD0214B9E +:102920001868301A34D4204BDFF880E01B684FEA77 +:10293000E87C13EB0803A3FB0E324CF1000C1B1ACE +:1029400043F60A500EFB0C2262F10002834272F140 +:1029500000001DDBB3F1807F72F1000201DB6FF03C +:102960007F434FF0E0203B60013B826943610023DD +:1029700083614FF000700E4B914258603BBF481985 +:10298000801A891A80192ABF891920602160B4E74A +:1029900043F60953E5E700BFB8100020B41000204B +:1029A000A8100020B0100020AC10002090D0030030 +:1029B00000ED00E010B5074B1C68074B1B68E41ADC +:1029C000FFF71AFF054B2044B0FBF3F0044B1860EF +:1029D00010BD00BFB4100020B010002090D0030044 +:1029E000AC10002070B516461D465A1C03680446FC +:1029F0001344C2689A4205D20821006A02F059FBCA +:102A0000002070BD65B93278204602F055FB0028E1 +:102A1000F6D03544B5420CD1A3680133A360F0E78A +:102A2000AB1E062B8EBF0023054AD35C1833DAB2E7 +:102A3000EAE723685A1C226015F8012D1A70E9E7AD +:102A400041A4000010B504464521034801F098F95F +:102A5000204602F01CFC00BF5F950000F7B504465D +:102A60000D46EFF31187202383F31288BFF36F8F96 +:102A70001A4A0428966898BF194B127C94BF53F8E1 +:102A80002030184B009245210246174801F078F992 +:102A90003DB1EB69C3F308031BB14521134801F0B5 +:102AA0006FF936B1304602F00CFC034608B10278EB +:102AB00002B90F4B324645210E4801F061F9294613 +:102AC0002046FFF7BFFF87F31188BFF36F8F3046B3 +:102AD00003B0BDE8F040FFF7BDBA00BFBC10002056 +:102AE0003C5C00007395000089950000B6950000DD +:102AF00081950000DC95000038B50A4B53F8204062 +:102B0000013053F82050A54200D838BD606830B17C +:102B1000037EDB0701D402F097FB0834F3E7236858 +:102B20009847FAE7505C0000012270B5284B86B048 +:102B300003201A70FFF7E0FF0420FFF7DDFF254CAC +:102B4000254D2646AE4204F130040FD300F04CFD73 +:102B5000204CAC4226D300F05BFDFDF7E1FA1F4AA2 +:102B6000938923F00103938106B070BD54F80C3CA7 +:102B7000059354F8103C049354F8143C039354F810 +:102B8000183C029354F81C3C019354F8203C0093E9 +:102B900054E90A2354E90C0100F0F4F954F8303CEC +:102BA0005E65CEE7D4E90A23B3F1FF3F08BFB2F177 +:102BB000FF3F05D052EA0301206803D100F040FA3C +:102BC0003034C6E70649183000F0C8FDF8E700BF0A +:102BD000A31600203058000030580000600100208B +:102BE000C75300000023012270B586B0CDE904234D +:102BF0000F220193CDE9023214230F4D0F4E03FB38 +:102C000000550F4906EBC016044601EB00214FF4B6 +:102C1000807230460B4B009500F0B4F9337C2C7475 +:102C200023F004033374084B013403EB0433EE60E8 +:102C30006B6006B070BD00BFBC100020E00000203B +:102C4000A82600209F520000A81600207FB5002073 +:102C5000FFF752FF264B83F30888264C0025636953 +:102C600043F400736361E02384F82230E57725762E +:102C70006576A576636A43F4E0236362FFF702F9A1 +:102C8000FFF7D2F94FF0FF33A362E362FFF7F4FAE4 +:102C9000FFF744FA184800F0C7F90120FFF72CFFAE +:102CA0000220164CFFF728FF00F096FC144B4FF45F +:102CB00020525C61134B1449059301232046CDE952 +:102CC0000353CDE90155114B009500F05BF9064621 +:102CD000237C204623F00403237402F04DFB284696 +:102CE000FFF780FF31462046084AFFF781F900BF11 +:102CF000A826002000ED00E0E00100206001002097 +:102D0000BC10002043960000A8270020292B0000BB +:102D100037B58268054692F90E300C468B4213D0C7 +:102D2000117C0B4811F01F0FCDE900434FF0440117 +:102D300014BF6E23792301F023F82146A86803B05D +:102D4000BDE8304000F09CBB002003B030BD00BFA8 +:102D50004B9600002DE9F743044690461E46EFF3DC +:102D60001189202383F31288BFF36F8F484FC16806 +:102D7000BA6871B1836893421FD058EA06011ED128 +:102D800089F31188BFF36F8F6FF00F0003B0BDE8B8 +:102D9000F08392F90E000131C4E902212061CDE9EE +:102DA000001023464421BA683A4800F0E9FF89F34D +:102DB0001188BFF36F8F0020E8E70069EBE792F915 +:102DC0000E5093F90E3002469D42A8BF1D46442185 +:102DD000314800F0D5FFA36893F90E30AB424EDDC9 +:102DE00029462046FFF794FF054622464946CDE98D +:102DF00000862A4800F018FB064603462246442176 +:102E0000274800F0BDFF002E0CBF6E2379230093EE +:102E100044212346BA68234800F0B2FF002ECAD0EE +:102E200023464421BA68204800F0AAFFEFF3118737 +:102E3000202383F31288BFF36F8FA3680BB323683B +:102E400026699C420AD04BB193F90E309E42A8BF2E +:102E50001E466FF07F039E42B8BF1E4644211348B2 +:102E6000224600F08DFF31462046FFF751FF40B16A +:102E700039460A4802F0BCFA6FF00A0086E70025DE +:102E8000B3E7002DF4D187F31188BFF36F8FF3E719 +:102E9000BC10002081960000B1960000A41600200E +:102EA000D4960000F99600001897000034970000AF +:102EB00073B583680546002B53D02D4A9268934220 +:102EC00052D1C368024644212A4800F059FFEB68FA +:102ED000012B04D9013BEB60002002B070BDEFF381 +:102EE0001186202383F31288BFF36F8F2846296948 +:102EF000FFF70EFF2C68A54217D100241E4BAC60D3 +:102F000000932A46234644211C4800F039FF14B39D +:102F100094F90E3020462B610023A36702F03BFAA0 +:102F20003146174802F064FAD6E7002CE5D0D4E920 +:102F3000003213605A600023227CC4E9003322F07F +:102F40000202A360227404F1180000F09FFCAC6040 +:102F500094F90E30D4E7EC6086F31188BFF36F8FDD +:102F6000BAE76FF01500B8E74FF0FF30B5E700BFE4 +:102F7000BC1000205997000018FCFFFF7697000056 +:102F8000A41600202DE9FF47994600F15803C0E937 +:102F90001633109B4FF000088381042303740F9BAA +:102FA0000F4604468373C0E90688C0F8088080F89D +:102FB0000F8000210020073222F0070607EB060AE7 +:102FC000C4E90A0123463A4644211548CDE9026A7C +:102FD000CDE9006700F0D4FE51462046FEF756FDCD +:102FE0000E9BC51D25F00705A566C4E9187602935A +:102FF0000D9BAAEB050501930C9B2A4600933946CD +:103000004B462046FEF7D8FF064BC4F854809B6819 +:1030100003B1DB6E2846E36604B0BDE8F08700BF6D +:10302000A0970000BC1000200123037483810023BB +:10303000C0E91833C366014B98607047BC1000208C +:1030400038B50446EFF31185202383F31288BFF3CC +:103050006F8F037C5B070FD5183000F017FC237CC3 +:10306000204623F00403237402F095F92946BDE8B5 +:103070003840044802F0BCB985F31188BFF36F8F64 +:1030800038BD00BFA41600206FF00A01084A9368FB +:103090009967084958674B6843F080534B60002399 +:1030A00083F31188BFF36F8F9368986F704700BFE9 +:1030B000BC10002000ED00E038B590F9102001466A +:1030C000002A037C04DA03F07F03037402F01CF986 +:1030D0000D4D2A4652F8184FAB68944200D004B9FF +:1030E000EC688B4207D01A7CD20604D1DA897F2A99 +:1030F00001D9A2692AB1A34202D0204600F0CEFA3B +:1031000023466B6138BD00BFBC10002070B590F93C +:103110001020037C002A2FDBD9062DD11A4C63F036 +:103120007F032246037452F8183FE169934207D1A6 +:10313000C0E900210860E0610FE09942F8D01B6807 +:10314000002BF5D093F90E6090F90E50AE42F4DDED +:103150005968C0E9003108605860A569954200D0FF +:1031600005B9E568A3681A7CD20606D1DA897F2AF8 +:1031700003D9AA690AB9636170BDAB4202D028467F +:1031800000F08CFA6561F7E7BC100020034648B9EF +:10319000EFF3058232B9064A51699268914201D033 +:1031A000FFF772BF83F31188BFF36F8F704700BFC3 +:1031B000BC10002038B5184CA168E0690B6881424A +:1031C00014BF1A46002249680B605960A368E16980 +:1031D0002AB9124AC3E900210B60E3610AE092F9BF +:1031E0000E5093F90E00854212DD5168C3E90021AB +:1031F0000B605360A569094B9D4200D005B9E56895 +:10320000A3689D4202D0284600F048FA656138BDA7 +:103210008A42DED01268DBE7BC100020D410002008 +:10322000002A2DE9F8430CBF4FF010084FF00808B2 +:10323000027C044618EA020F0D4664D148EA0203F4 +:10324000D2090CD10374B8F1080F7DD1A36813B172 +:10325000204602F061F8202704F118060FE003F081 +:103260007F03037402F050F8EDE785F31188BFF394 +:103270006F8FEFF3118587F31288BFF36F8F30469E +:1032800000F004FB0B30F0D0A66D04F15807B742F4 +:1032900013D04FF0000986B1304602F03DF8C6F871 +:1032A000789006F1180000F0F1FA0B3002D03046A9 +:1032B000FFF72CFFA66DB742EDD1274B9B689C42D0 +:1032C00042D1EFF30587003F18BF0127DFF8889050 +:1032D0004B4653F8186F9E4200D00EB9D9F80C60D7 +:1032E000D9F80830B34202D0304600F0D7F9B8F12F +:1032F000100FC9F8146006D0204600F0ACFF17B1DB +:103300001648FFF791FE144B9B68A3421ED1EFF3C2 +:103310000583DBB9A289D20711D585F31188BFF3E4 +:103320006F8F83F31188BFF36F8F0423184602DF7A +:10333000EFF31185202383F31288BFF36F8F2846A4 +:10334000BDE8F843FFF7A0BE0027BFE785F311886B +:10335000BFF36F8FBDE8F883BC100020E0010020B0 +:1033600070B50F4D06462B4653F8184F9C4200D0BF +:1033700004B9EC68AB681A7CD20604D1DA897F2ADA +:1033800001D9A2692AB1A34202D0204600F086F9F1 +:1033900023466B613046BDE87040FFF7F7BE00BFC3 +:1033A000BC10002070B5EFF31186202383F3128840 +:1033B000BFF36F8F1A4CA168E0690B68814214BF9C +:1033C0001A46002249680B605960A368E1692AB96E +:1033D000144AC3E900210B60E3610AE092F90E5040 +:1033E00093F90E00854216DD5168C3E900210B6098 +:1033F0005360A5690B4B9D4200D005B9E568A368F1 +:103400009D4202D0284600F049F965613046BDE88A +:103410007040FFF739BE8A42DAD01268D7E700BFA2 +:10342000BC100020D4100020F8B5124B0C46DDE98A +:10343000067611469868104A1060EFF31182202238 +:1034400082F31288BFF36F8F9D68284601F06EFFEC +:10345000B6F1FF3F08BFB7F1FF3F06D03A4633460B +:10346000064905F1180000F079F92046BDE8F8405A +:10347000FFF70ABEBC100020DC100020C75300007C +:10348000F8B50446EFF31187202383F31288BFF3C6 +:103490006F8F037C49B203F01F02002A0CBF012684 +:1034A000002635D103F07F032A4D037401F02CFF71 +:1034B0002A46037C817363F07F03037452F8183F3C +:1034C000E869934207D1C4E900200460EC610DE093 +:1034D0009842F8D01B68002BF5D093F90EC08C45AC +:1034E000F6DD5968C4E900310C605C60AC69944257 +:1034F00000D004B9EC68AB689C4202D0204600F0D2 +:10350000CDF86C6187F31188BFF36F8F3046F8BD3B +:103510009B071CD5856801F0F7FE81732B689D42DF +:1035200009D16B68C4E900531C606C60EAE76A6803 +:103530009A42F6D01B68002BF3D093F90E208A42F2 +:10354000F5DD5A68C4E9003214605C60DAE7817323 +:10355000D8E700BFBC100020F8B550EA01030546CB +:103560000C4603D101F0CEFE0020F8BDEFF3118729 +:10357000202383F31288BFF36F8F134E134BB06871 +:10358000186001F00AFFB0682A4623461049183037 +:1035900000F0E4F8B36804461A7C5F6742F0040266 +:1035A0001A746FF00A029A670A4A536843F080530C +:1035B0005360002383F31188BFF36F8F01F04BFF3B +:1035C000201A20EAE070D0E7BC100020DC100020B8 +:1035D000C753000000ED00E0024B03F11802C3E9FD +:1035E00006227047BC100020EFF31181202383F3E3 +:1035F0001288BFF36F8F054B9A68D37B013BD3735F +:1036000081F31188BFF36F8F704700BFBC1000209B +:10361000EFF31180202383F31288BFF36F8F034BE6 +:103620009A68D37B0133D373FFF79ABEBC10002096 +:10363000014B9868704700BFBC100020027C034615 +:1036400012F01F0210D10A4988420DD009490868BA +:1036500068B1D9897F2909D893F90E20064B1B68D8 +:103660009A42B8BF0020704700207047104670474C +:10367000E000002098000020E01000200122044B10 +:10368000C01A044BC0105843034B1A54704700BF74 +:1036900060020020ABAAAAAAA4160020F8B50C4B21 +:1036A0000C4D1E7CFFF7CAFF1823044603FB06558A +:1036B000284600F0EBF8084F34B1BB5D2846E21A0B +:1036C0000649D31700F04AF80023BB55F8BD00BFE8 +:1036D000BC10002060020020A41600207D360000EF +:1036E00070B5EFF31186202383F31288BFF36F8F39 +:1036F0000F4D104BAC681868A04202D1FFF7CEFF07 +:1037000011E000221A602B7C0B4AD35C5BB120468F +:10371000FFF794FF38B1237CDB0604D1FFF74AFDA5 +:103720006869A042EAD086F31188BFF36F8F70BD3D +:10373000BC100020DC100020A4160020024B1868EA +:10374000984208BF00207047A0000020024B186874 +:1037500008B1FFF72FB970479C000020B3F1FF3F7D +:1037600008BFB2F1FF3F2DE9F84F044699461546D0 +:103770001F4600F081808160EFF31188202383F3DE +:103780001288BFF36F8FB9F1000FDFF8F4A025DBCB +:10379000FFF7DCFF3B4B06461B68003B18BF0123CD +:1037A000451949EBE0795B1949F100024FF0010935 +:1037B000DAE90057C4E904325D1942EB0707FFF765 +:1037C000BDFF0346DFF8C0E0DEF804A0EBB9C4E9B2 +:1037D00000EACAF80040CEF8044028E06FF0010388 +:1037E000DAE900125B1A4FF0FF3161EB02025B1B5A +:1037F00062EB0902012B72F10001BCBF0123002220 +:103800004FF00009C0E90432D9E7D3E9041CD4E938 +:1038100004208A4270EB0C0B25DA891A5A686CEB8B +:103820000000C3E90410C4E9003214605C60FFF7D3 +:1038300085FF84420FD1134B1B6801330BD1B9F1C3 +:10384000000F02D1FFF782FF0646304601F0ECFD83 +:103850000021FFF741F888F31188BFF36F8F2846E6 +:103860003946BDE8F88F521A60EB0C005345C4E9A5 +:103870000420ACD01B68A9E700252F46EFE700BF66 +:10388000780200209C000020A0000020F8B504462B +:10389000EFF31186202383F31288BFF36F8F026842 +:1038A00072B3FFF74BFF184B5B689C4208D0D2E91C +:1038B0000431D4E90475DB1941EB0501C2E9043197 +:1038C000D4E900320025A04213605A60C4E90055D3 +:1038D0000ED000200D4A136823F001018C4204BF72 +:1038E00043F00103136086F31188BFF36F8FF8BDB7 +:1038F000FFF72CFF01F098FD2946FEF7EDFFE8E702 +:103900006FF01500E6E700BFA0000020E4100020E3 +:10391000EFF31182202383F31288BFF36F8F064BDE +:1039200040F001001B681B1A5842584182F311886D +:10393000BFF36F8F704700BFE410002000232DE914 +:10394000F047DFF8BC902F4CC9F8000023600E460A +:10395000FFF7F4FE2C4FDFF8B480D9F80050D7E918 +:1039600000CE4FEAE57A50B1D0E904319D427AEBBE +:1039700001021EDA5B1B61EB0A01C0E9043115EBA1 +:103980000C054EEB0A02C7E9005200254FF0FF3349 +:1039900028462360C9F8005001F046FD2946FEF78D +:1039A0009BFF86F31188BFF36F8FBDE8F047FFF7E9 +:1039B00097BE13EB0C0CA5EB03034FF0000541EB96 +:1039C0000E018268C7E900C1C9F80030C8F80000DC +:1039D000D0E900310B605960C0E9005586F31188C9 +:1039E000BFF36F8F9047EFF31186202383F3128884 +:1039F000BFF36F8FC8F80050FFF7A0FEADE700BF20 +:103A0000E81000209C00002078020020E410002034 +:103A100010B5EFF31184202383F31288BFF36F8F67 +:103A2000FFF794FE0346054AD2E90001181841EB5E +:103A3000E37184F31188BFF36F8F10BD780200200B +:103A40000CB430B58BB004460D462022002102A8EC +:103A500001F02CFD02238DF80A300D4B002D03934D +:103A6000069412DB01D06B1E1C440FAA0E9902A80B +:103A70000794019200F00EF815B10022069B1A700F +:103A80000BB0BDE8304002B070470024EDE700BF46 +:103A90000F5500002DE9F04F837815469A07074629 +:103AA000D0F8048085B040F19F8000260878002877 +:103AB00000F09C80252808D001F1010A3946013622 +:103AC000C047002880F286808AE091F801B001F1B9 +:103AD000020ABBF1250FF1D0002401211F2C25D8AB +:103AE000ABF12002102A06D8844B01FA02F01842EA +:103AF0000ED1032A5AD0ABF13002092A08D9BBF102 +:103B00002A0F33D1630605F1040501D444F02004E3 +:103B10001AF801BBBBF1000FE0D139462520C047A0 +:103B200000285DDB394658460236C9E77F2CE2D9CA +:103B3000BBF16C0F29D021D8BBF1680F2CD0BBF1A1 +:103B40006A0F30D0BBF14C0F2DD0ABF16302122ABB +:103B500000F2A580DFE802F02C4EA3A3A3A34EA39E +:103B6000A3A3A3A3AD9DA3A331A37700BBF12E0F05 +:103B7000DED160063AD444F04004C9E7BBF1740FCB +:103B8000C6D0BBF17A0FC3D0DFE7220648BF44F4AA +:103B9000007444F08004BBE7E30548BF44F40074BC +:103BA00044F48074B4E744F42074B1E71024AFE720 +:103BB000394615F8040B013682E72C68504B002C6F +:103BC00008BF1C46A1464B4619F8010B20B9341B0F +:103BD0001E190435514669E73946C0470028F2DA14 +:103BE000BB7843F00403BB704FF0FF36304605B09E +:103BF000BDE8F08F20061DD5A10543BF073525F090 +:103C0000070555F8080B55F8040B00280DF10409B9 +:103C10004946B8BF40424FF00A02B8BF44F480643E +:103C200001F05CFC6405A0EB090956D44C460DF18B +:103C3000040B5EE0E20555F8040BE6D5A3054CBF86 +:103C400040B200B2E1E70A2224F01004A4B2200638 +:103C500033D5A10543BF073525F0070555F8080BF7 +:103C600055F8040B10B924F01004A4B20DF10409A6 +:103C7000494601F033FCE306A0EB0909D6D53946E5 +:103C80003020C0470028ABDBBBF1000F1ED101364E +:103C9000CCE710224FF0780B44F01004D7E74BF03C +:103CA0002002782A7FF439AFCBF1780242F010027B +:103CB000CDE708224FF0000BC9E7E30555F8040BE8 +:103CC000D0D5A1054CBFC0B280B2CBE7394658462B +:103CD0000236C0470028A9DA82E739462D2001368E +:103CE000F7E7013C39461BF80400C0470028FFF6FF +:103CF00077AF002CF5D14E446CE700BF812801005E +:103D0000F2970000704710B50120FEF7D1FB0128A3 +:103D1000044603D1FEF7E8FB204610BD0020FCE777 +:103D20000020704730B500290446154685B011DBE8 +:103D300083688B420ED96368C068194401AA00F0F9 +:103D4000CCFB28B96268019B9B1A2B60029B6B60BD +:103D500005B030BD6FF02100FAE77047704770473B +:103D6000002070470FB407B504A951F8040B019166 +:103D7000FCF772FA03B05DF804EB04B070477047CB +:103D80000FB407B504A951F8040B0191FCF764FACC +:103D900003B05DF804EB04B070470379C2880021DA +:103DA0005A43183001F082BB10B50446C360BDF819 +:103DB0000830C28003610171FFF7EFFF21460398CD +:103DC000FCF77EFA002818BF6FF0770010BD0029BD +:103DD00008DB8068884205D9401A904234BF002031 +:103DE000012070470020704770B516461A460546F8 +:103DF0000C46FFF7ECFF48B16968E8682144826827 +:103E000014683246A446BDE8704060476FF0150064 +:103E100070BD70B516461A4605460C46FFF7D7FF2B +:103E200048B16968E8682144826854683246A4460B +:103E3000BDE8704060476FF0150070BD10B50B46CF +:103E40000446FFF7C4FF40B16168E0681944836825 +:103E50009B682BB1BDE8104018476FF0150010BDEE +:103E60006FF05700FBE708B5C0688368DB689847C8 +:103E7000006808BD08B5C0688368DB68984740796A +:103E800008BD48B103683BB143682BB1C0688842A4 +:103E900094BF0020012070474FF0FF30704701F0C1 +:103EA0000DBB084600F02ABE01292DE9F341174653 +:103EB00001D900F0F7F92C2303FB0104D4F820808A +:103EC000B8F1000FF5D0E368268940461E4404236C +:103ED00031460DEB0302FFF787FF054620B10125B0 +:103EE000284602B0BDE8F08146F60813BDF804206C +:103EF00064899A421AD1BDF806309C4201D003254C +:103F0000EEE7042340460DEB0302A119FFF76CFF17 +:103F10000028E4D146F60713BDF804209A42EED1FA +:103F2000BDF80610214431443960D9E7002CF1D0A6 +:103F3000E5E77047002382681946FCF7A7BC08B57F +:103F40002C2303FB0101086A08B900F0ABF9042235 +:103F5000BDE8084000F0D8BDF8B513460F46164638 +:103F600000210246054600F02CF8044650B93346BD +:103F70000121284605F12C0200F023F810B1002F92 +:103F800018BF04462046F8BD002110B50446084677 +:103F9000FCF71CF904F12001C0B2FCF7ADF940B9FF +:103FA0000121FCF713F904F14C01C0B2FCF7A4F9AC +:103FB00008B100F077F910BD70477022002101F0C0 +:103FC00075BA08B52C2303FB0100006A08B900F09C +:103FD00069F920230021FFF707FF003818BF0120EF +:103FE00008BDF8B50C4610B1F9B10AB90120F8BD09 +:103FF00000278D1800F12806AC42F7D0836E5A1CBA +:10400000826614F8011B03443F2A83F82810F3D971 +:104010003146FCF701FFD0E9083213F5007342F195 +:104020000002C0E908328766E6E70846DFE7F8B530 +:104030000C46054600284BD000294AD08B6ED1E9AA +:104040000821D800121841F10001C4E9082180229A +:10405000581C38282344A0664FF0000783F8282016 +:1040600004F128060BD9C0F140023946304400F073 +:1040700032F820463146FCF7CFFE3846A766C0F13D +:1040800038020021304400F026F8236A626A1BBA25 +:1040900012BA3146C4E918232046FCF7BDFE2B1D99 +:1040A000211F243551F8042F0433100E03F8080C97 +:1040B000100C03F8070C100A03F8060C03F8052C83 +:1040C000AB42EFD120467022002100F004F801201D +:1040D000F8BD0846FCE701F0E9B900230B6043682E +:1040E00013B9C0E90011704719604160704770B59D +:1040F00006460D460024AC4200DB70BD305DFCF787 +:10410000FFFF0130F9D00134F5E72DE9F04F85B01C +:1041100005460E4690461F4600F0FDFE20B96FF0A2 +:104120004C0005B0BDE8F08F4FF014090023344671 +:104130004FF0010A09FB08693B60284602A900F01C +:10414000DEFE60B1DDE902324FF0000B0093C345A3 +:104150000CD10021284600F01EFF0028EDD1284692 +:1041600000F002FF0028DAD00020DAE7A14598BF6E +:10417000344661688A4214D121680098019201F0A6 +:104180009DF9019A68B9237C7BB9D4E902312846AC +:10419000984768B184F810A03B68143401333B6041 +:1041A000CBE714340BF1010BD1E76FF06F00B8E7E8 +:1041B0006FF02200B5E70123F0B50D180024184672 +:1041C000A94201D11355F0BD11F8017B3FB1013374 +:1041D000DBB2FF2B00F10106175404D13046135512 +:1041E00004460123461C3046EAE7F0B500240546A4 +:1041F0002046AC4204D20E5D631C46B94FF0FF303E +:10420000F0BDAB42FAD0CF5C0133175401301F1B15 +:10421000FFB2BE42F5D8FF2E04D0AB423EBF002411 +:10422000145401301C46E4E701F040B901F017B91D +:1042300001460068FDF7E4BB00210120FDF7E0BB6B +:1042400008B5FDF7A9FEFDF7B3FBFDF7BDFBFDF7D4 +:1042500041FFFEF7FBFC6FF08500704761B662B668 +:1042600080F31188BFF36F8F704772B6002383F31A +:104270001188BFF36F8FBFF34F8F30BF62B6BFF3AC +:104280006F8F7047202809D9B0F1004F08D8013846 +:10429000B0FA80F0C0F11F0040007047082070475E +:1042A0003E20704708B5FEF7C1F808B5FEF7AAF83A +:1042B000002008BD0A448A4200D1704711F8013B32 +:1042C00040BA80B25840C0F303134340180380B291 +:1042D0004340580100F4FF505840ECE72DE9F0410D +:1042E00006460D4617461C46ABB1D0F80880D8F8F4 +:1042F00000309847002D11DB84420FD8031BAB42DE +:104300000CD3D8F808E023463A4629463046F4460E +:10431000BDE8F04160471846BDE8F0816FF0150038 +:10432000FAE74FF0FF324FF0FF330430FEF712BDD3 +:104330000430FEF7BDBD4368D3E90203C01A7047DD +:1043400038B5456804460069FFF7EBFF2B8A206902 +:10435000002B0CBF6FF085050125FFF7E9FF28460C +:1043600038BD2DE9F8430D1E064690461C46D0F890 +:1043700004902DDBEA18D9E902315B1A9A4227D85A +:104380000069FFF7CEFFD9E9007299F81130B4B196 +:10439000D7F8089015441D443846D9F8003098479E +:1043A000002D12DB844210D8031B9D420DD82346FA +:1043B000424629463846D9F80490C8470446306931 +:1043C000FFF7B6FF2046BDE8F8836FF01504F6E767 +:1043D0006FF01504F6E72DE9F0410C4646680546F6 +:1043E000006990461F46FFF79CFF002C15DBD6E9BD +:1043F0000231E2195B1A9A420FD8D6E90003E1189C +:10440000737C19443B464246FFF768FF044628691F +:10441000FFF78EFF2046BDE8F0816FF01504F6E748 +:10442000F0B50024056985B01022002147680646D2 +:10443000684601F03BF82846FFF773FF2C702546CD +:10444000BB68A34205D83069FFF772FF284605B064 +:10445000F0BDD7E9000121441B1B102B28BF1023FE +:104460006A46FFF73BFF051EEDDBBB681B1B102BED +:1044700094BFE4181034E3E7F7B51C460023164652 +:1044800082682360A3600D465369694601AA984774 +:10449000019B5A1E01921BB96FF0150003B0F0BDCD +:1044A0000098A26847682168676085B9B31AD0F898 +:1044B00000C0634528BF634603FB07111A4421600F +:1044C000A26002689A4206D808300090E0E76B1AB2 +:1044D000B3FBF7F3EBE70020E0E713460022FFF71A +:1044E000CBBF43689B680B60012313607047436830 +:1044F00000205B69C1E90030704743685868704725 +:10450000436800205B681B680B60704743685B680A +:10451000586842400A4042405A6000207047436851 +:1045200000205A6853680B4353607047436800206B +:104530005A68536823EA01035360704743680020B8 +:104540005A6853684B405360704730B5B3F1C06F41 +:1045500044681CD0B2F5800F19D00120B2F5001FBD +:10456000656800FA01F102D16962002030BDB2F144 +:10457000A07F0CBFA962E9626268B3F1806F0CBFD3 +:10458000116351636368996363681962EDE76FF0C3 +:104590008500EBE730B50369586800B30024884212 +:1045A00019D108688CB99C685860A14200D1986004 +:1045B000002008602AB15A680A609A68596002B9F6 +:1045C000996000200FE02846E9E720609868814262 +:1045D00008BF9C60ECE705680446002DF3D1002A73 +:1045E000E9D16FF0150030BD08B543689B68984766 +:1045F000002008BD08B5062000220321FDF7B6FC07 +:10460000BDE808400620FDF7A3BC08B5072000223E +:104610000321FDF7ABFCBDE808400720FDF798BC7F +:1046200008B5102000220321FDF7A0FCBDE80840DA +:104630001020FDF78DBC08B5112000220321FDF7E5 +:1046400095FCBDE808401120FDF782BC70B54368B9 +:1046500002695B6805469E6B9E63516809B10C68F0 +:1046600001B970BD8A68324002D028464B6898472D +:104670001CB1236821461C46F2E72346FAE738B509 +:1046800012F4403F0C46456816D012F0320F13D199 +:1046900093030ED5130307D5FFF741FF6B681C6129 +:1046A00000206B68DC6138BD5303F7D5FFF73EFF90 +:1046B000F4E76B685961F3E76FF08500F3E70123D6 +:1046C00003FA01F1FFF7DBBF30B503695C68012332 +:1046D00003FA01F1236819422BD022F4702323F04E +:1046E00001031BB9237A23B1930317D56FF085001B +:1046F00015E0D503FAD4900310D56068EFF3118567 +:10470000202383F31288BFF36F8F130308D5036848 +:104710001943016085F31188BFF36F8F002030BD0E +:104720005303F7D52368026823EA010313400360AB +:10473000F0E76FF01500F2E7036900205B685A6844 +:104740001B68126813400B60704710B50369586806 +:1047500009C80140EFF31184202080F31288BFF3D1 +:104760006F8F186842400A4042401A6084F31188F3 +:10477000BFF36F8F002010BD03695B685A681B6828 +:104780001940EFF31180202383F31288BFF36F8F5A +:1047900013680B43136080F31188BFF36F8F002001 +:1047A000704703695B685A681B681940EFF3118012 +:1047B000202383F31288BFF36F8F136823EA01036A +:1047C000136080F31188BFF36F8F00207047036977 +:1047D0005B685A681B681940EFF31180202383F34C +:1047E0001288BFF36F8F13684B40136080F31188FA +:1047F000BFF36F8F002070476FF08500704703692B +:10480000426800205A60704730B50368136005792C +:10481000046804EBC504A34202D36FF0010030BD6D +:104820005C7908338C42F1D10020F8E7436858687E +:1048300070472DE9F0411F460E4615460446D0F854 +:1048400004804046FDF7C0FFD8F800103A463144D6 +:10485000284600F004FE6068FDF7C4FF0020BDE8B4 +:10486000F0812DE9F0411F460D4616460446D0F86A +:1048700004804046FDF7A8FFD8F800003A463146CC +:10488000284400F0ECFD6068FDF7ACFF0020BDE8B7 +:10489000F08138B5044645682846FDF795FF0021AC +:1048A0006A68286800F002FE6068FDF79BFF002040 +:1048B00038BD43681B685A68920743BF1B680020D5 +:1048C0000B704FF0FF30704743681B685A68D2077F +:1048D000FCD419607047034610465AB15B681A68E9 +:1048E0005068C00705D40120D0601B680A781A60A0 +:1048F000704700207047034610465AB15B681A683B +:10490000506810F0020005D00220D06001201B6822 +:104910001B680B7070474268EFF31180202383F30C +:104920001288BFF36F8F11688B6823F004038B60CC +:1049300013680122DA6080F31188BFF36F8F70472C +:1049400043681B685A68D2075ABF9868C0F3800052 +:10495000002070474268EFF31180202383F3128810 +:10496000BFF36F8F11688B6823F008038B601368A7 +:104970000222DA6080F31188BFF36F8F7047FFF770 +:10498000DFBF43681B68586810F002001CBF9868BE +:10499000C0F3C0007047704708B50246FFF7F1FF4B +:1049A00020B9BDE808401046FFF7CABF08BD03693B +:1049B000C3E901127047026953680BB19168184747 +:1049C000704710B54268EFF31184202383F31288F7 +:1049D000BFF36F8F11688B6843F008038B60136817 +:1049E0005B689B0701D5FFF7E6FF84F31188BFF3EF +:1049F0006F8F10BD10B54268EFF31184202383F34D +:104A00001288BFF36F8F11688B6843F004038B60CB +:104A100013685B68DB0701D4FFF7CDFF84F31188CF +:104A2000BFF36F8F10BD08B5002203210120FDF7F1 +:104A30009DFA0120FDF78CFA002203211046FDF7B4 +:104A400095FABDE808400020FDF782BA032108B5B9 +:104A500008460022FDF78AFA0320FDF779FA0220C2 +:104A600000220321FDF782FABDE808400220FDF78D +:104A70006FBA08B5002203210520FDF777FA05205B +:104A8000FDF766FA042000220321FDF76FFABDE866 +:104A900008400420FDF75CBA37B54568044600219C +:104AA000A86801AAFFF7B0FE002812DB019B0022D4 +:104AB00019791868FDF766FE00280ADB23691A6871 +:104AC0005AB903222B6820469A60EB689847002069 +:104AD00001E0831CF2D003B030BD61684B68002B4D +:104AE000EFD0B3FBF2F309680B61EAE770474FF0D0 +:104AF000E022136923F001031361704780681838BE +:104B000020F007001038704738B515460C4661B1E3 +:104B10005AB1FFF7AFF92146254411F8013B834212 +:104B200003D1A942F9D1012038BD0020FCE730B5FE +:104B3000026A0346D2E9014084424FF0000002D3EA +:104B40000123D36030BD18745068242501305060B3 +:104B5000186A4268541E0268184605FB04225C1954 +:104B600050F8045BA04242F8045BF9D1012099603F +:104B7000E8E7F0B5064604468BB001AD0F46944613 +:104B80000FCE0FC50FCE0FC5216A33684A682B6060 +:104B900022B90223CB6000200BB0F0BDFB072068D8 +:104BA000A56813D524260B68013A06FB02337E075D +:104BB00003D41A7C0AB10F23ECE7224603F1240147 +:104BC00053F8046B8B4242F8046BF9D1B90741BF2B +:104BD000226A536803F1FF335360AC4505D2236A60 +:104BE000002BD8D00422DA60D5E77A0748BF2060CE +:104BF0003B0701D40120CFE7143406AB93E807004C +:104C000084E80700F6E710B502601A44029B012908 +:104C100083604FF00003C26003740375836101D8A1 +:104C2000036210BD24224A43243A8418046283504C +:104C3000026A8C1E9460026A02295360026AD36081 +:104C4000026A1374026A53741EBF036A2430186028 +:104C5000E7E7182871F100030ED3B0F5807F71F1FA +:104C600000030BD3B0F5803F71F1000308D3002996 +:104C700014BF0920052070470120704702207047AB +:104C80000320704737B50024002508290A46CDE9DE +:104C900000450AD80146684600F0E1FBDDE9000165 +:104CA00003B0BDE83040FFF7D4BF002003B030BDF3 +:104CB00000B1C1607047436803608368013383605B +:104CC000006AFFF7F5BF08B50268C3689A4205D3CA +:104CD000006A0821FFF7ECFF002008BD0120FCE777 +:104CE00038B504460D46FFF7EEFF40B123681B7848 +:104CF000B5EB531F04D00A21206AFFF7D9FF00202B +:104D000038BD10B50446FFF7DEFF38B123681A78C6 +:104D1000FF2A05D00A21206AFFF7CAFF002010BD34 +:104D200001332360FBE710B5027D044632B1FFF783 +:104D3000E8FF48B100234FF0FF3223752046BDE85D +:104D400010400721FFF715BF10BD2DE9F84F0446AD +:104D50000E4691461D46FFF7B6FF804628B1A36870 +:104D600043B90321206AFFF7A3FF4FF00008404634 +:104D7000BDE8F88F2268177807F01F0BBBF11F0FF3 +:104D800012D1FDB1206A18B1037C0BB11521EAE7FD +:104D900001232B7000252368013563602B442360B9 +:104DA000A368013BA360E2E7BBF1170F0CD9ABF19D +:104DB0001803D9B2032905D801259D40A94504D27D +:104DC0000521CFE70721CDE70025E36805F1010ABA +:104DD0005244934201D20821C4E74A46002130469A +:104DE00000F064FB15B986F800B0D3E72268711EA5 +:104DF000531913F80109934201F8010FF9D1236AFD +:104E0000002BC8D01B7C002BC5D00737FFB2022F68 +:104E1000C1D949463046FFF735FF8245BBD0152141 +:104E2000A0E738B50C4611460546FFF759FF08B90B +:104E3000002038BD042200232846A118FFF785FF73 +:104E40000028F5D02B682360F3E7002337B504462C +:104E50008DF80330FFF744FFA8B1042220460DF17E +:104E600003030DEB0201FFF770FF60B19DF80350E3 +:104E700065B901992046FFF75AFE50B9636823606F +:104E8000A3680133A360002003B030BD6FF00F01B1 +:104E9000F0E72575F8E738B504460D46FFF7C1FF82 +:104EA00048B12268E3689B1A6A689A4204D90821CB +:104EB0002046FFF700FF002038BD70B50D460021E9 +:104EC00004461646FFF70CFF38B132462946204605 +:104ED000BDE870400023FFF738BF70BD0422FFF724 +:104EE000ECBFFFF7FBBF38B5022204460D46FFF7C3 +:104EF000D2FF18B123686A681344236038BD38B5FF +:104F0000032204460D46FFF7C6FF18B123686A68FE +:104F10001344236038BD10B505210446FFF795FF03 +:104F200050B1237D4BB96FF00042A368934205D383 +:104F300005212046FFF7BFFE002010BD5B00A360E7 +:104F4000FBE7037D23B98068B0FA80F04009704721 +:104F50000368C268934205D21878A0F1FF03584253 +:104F60005841704700207047FFF7DDBE38B50D4649 +:104F700006210446FFF7B4FE08B9002038BD00231F +:104F8000042229462046FFF7E0FE0028F5D0A3685A +:104F90000133A360F2E7F0B58FB00446FFF793FE4C +:104FA00000285DD0236800221D780023CDE902236C +:104FB00023466D0905AA04F12007164618685968AA +:104FC000083303C6BB423246F7D118683060062D5D +:104FD0001CD02A1F0023012A4FF008028DF804304C +:104FE0000DEB020198BF01AB05A8FFF7AEFE064628 +:104FF000002835D0042D3BD019D8023D012D21D9F0 +:10500000059B2360A368013BA3602AE001A905A8D2 +:10501000FFF7ACFF20B3059B089A934204D3082105 +:10502000206AFFF745FE1BE01D786D09CFE7052DCF +:10503000E6D1DDE90232B3F1004F72F1000113D382 +:105040002946EDE7E3682168029A5B1A9A4203D881 +:10505000059B13440593D3E708212046FFF72BFE59 +:10506000002630460FB0F0BDDB185241CDE90232C8 +:105070009DF8045025B16FF00F020023CDE9022303 +:10508000029B8DF82850079305A8FFF75AFF0146A9 +:1050900038B1002DB4D005A8FFF733FE0028AFD1FA +:1050A000DEE705A8FFF777FF0028EDD1D8E7FFF787 +:1050B000AABD00B1C160704710B50368C468A342BF +:1050C00005D3006A0821FFF7F4FF002010BD02F0AD +:1050D0001F0242EA41111970036801330360012085 +:1050E000F4E770B505460E46104619461446FFF71C +:1050F000C9FD22463146431E2846BDE87040FDF7F3 +:1051000071BCF8B51746C368026804469A420D465A +:1051100006D30821206AFFF7CCFF00263046F8BDF1 +:105120009B1A4A689A42F4D80E4656F8043B53B18B +:1051300004213046FFF7A6FD6A6823681344E2683D +:1051400003449A42E5D33246042339462046FFF70A +:10515000C8FF06460028E0D020682968884202D0AF +:105160006A6800F08AF923686A6813442360D5E707 +:10517000082A73B513460C4606D9006A0521FFF7C5 +:1051800098FF002002B070BD8E1816F9012C002A7D +:105190000FDA0A466C466946B24204D10121224622 +:1051A000FFF79FFFEEE712F8015BED4301F8015BAB +:1051B000F2E70021F3E713460A460021FFF791BF0B +:1051C00007B5042201910DEB0201FFF7D1FF03B0F7 +:1051D0005DF804FB07B5042201910DEB0201FFF716 +:1051E000EAFF03B05DF804FB0222FFF78ABF032247 +:1051F000FFF787BF07B5CDE900126946FFF7F4FF57 +:1052000003B05DF804FB07B5CDE900126946FFF76E +:10521000EEFF03B05DF804FB1F220421FFF74CBF33 +:105220001F220521FFF748BF1F220721FFF744BFB8 +:10523000FFF7FABF1FB50024CDE90144069C009496 +:10524000FFF7E1FC04B010BD10B5436904463BB95B +:105250000020E2684042537843F00103537010BDD0 +:1052600098470028F4D00028B8BF4042FF28A8BFC4 +:10527000FF20E3681870ECE740B1C368587810F07D +:1052800001001EBF1878B0FA80F040097047EFF3B4 +:105290001183202383F31288BFF36F8FFEE710B5CD +:1052A0002024EFF3118384F31288BFF36F8FFEF78E +:1052B000DCFFF6E703460020C3E90033C3E9020040 +:1052C00070470020704738B58589EFF3118120229F +:1052D00082F31288BFF36F8F037C13F0080404D0AD +:1052E00081F31188BFF36F8F38BD0122FDF798FF5E +:1052F000EB07F9D584F31188BFF36F8F04231846A9 +:1053000002DFF1E7FEF74EB8D0E9003213605A60D1 +:105310000023C0E90033704708B5FFF7F5FF037CB1 +:1053200023F0020303740023836008BD38B50446EC +:105330000D46FDF7C1FE237C43F002032374D5B173 +:10534000A5602B689D4209D16B68C4E900531C60BD +:105350006C6010E06A689A42F6D01B68002BF3D0AC +:1053600093F90E1094F90E209142F3DD5A68C4E9C6 +:10537000003214605C6038BD10B5EFF31184202357 +:1053800083F31288BFF36F8FFDF7C0FE84F311889B +:10539000BFF36F8F10BDFDF7B9BEFDF78DBE08B529 +:1053A000037C014613F0280F0CD183680BB1FFF783 +:1053B000B3FF0B7C084623F004030B74BDE80840E0 +:1053C000FDF7A4BE08BD38B50446EFF311852023D0 +:1053D00083F31288BFF36F8FFEF79AFA18B9A4F11E +:1053E0001800FFF7DCFF85F31188BFF36F8F38BD1E +:1053F0000846FDF7CBBE38B505460C46FEF7ACF8BF +:10540000B4F1FF3F08BFB5F1FF3F0AD00A23A0FB6C +:105410000303B0F1004F73F1000301D36FF00040BC +:1054200038BD4FF0FF30FBE708B50246FEF786F9BE +:1054300070B1D0E904319B1A61EBE272B3F1004F15 +:1054400072F1000104DA002AACBF1846002008BD42 +:105450006FF00040FBE708B5FEF7DAFA08BD0A4432 +:10546000914200F1FF3300D1704710B511F8014BA4 +:10547000914203F8014FF9D110BD884210B501EBFC +:10548000020402D98442234607D8431EA14207D012 +:1054900011F8012B03F8012FF8E70244824200D1F2 +:1054A00010BD13F8011D02F8011DF7E70346024481 +:1054B000934200D1704703F8011BF9E710B5013999 +:1054C0000244904201D1002005E0037811F8014F19 +:1054D000A34201D0181B10BD0130F2E7F0B504461D +:1054E0000846C2F13705EDB202F01F02B4FBF2F636 +:1054F000274602FB1641CBB2092984BF5B19DBB2F8 +:105500003033BA42344600F8013BEFD9F0BDD1E95F +:10551000043293421EBF5A1C0A6118707047000083 +:10552000000000001856000000000000FC550000BC +:1055300000000000E055000000000000C45500001D +:1055400000000000A85500000000000050560000B8 +:10555000000000006C5600000000000034560000FF +:1055600000000000C056000000000000A45600002B +:105570000000000088560000F52400000000000034 +:105580003D2800000000000000000000DC56000084 +:10559000000000001457000000000000F856000052 +:0855A0003102000000000000D0 +:1055A8009A940000245B000048580000B2000020D4 +:1055B80060100020E945000000000000A8940000E9 +:1055C800485B000048580000B40000206C10002020 +:1055D800E945000000000000B69400006C5B000084 +:1055E80048580000B600002078100020E945000067 +:1055F80000000000C4940000905B000048580000C0 +:10560800B800002084100020E945000000000000D8 +:1056180011950000E85B000090580000C0000020D1 +:10562800000000000000000000000000D29400000C +:10563800B45B00006C580000BA00002090100020F5 +:10564800FF47000000000000E7940000C05B000076 +:105658006C580000BC00002098100020FF47000094 +:1056680000000000FC940000CC5B00006C580000B7 +:10567800BE000020A0100020FF470000000000002E +:1056880035950000F45B0000A0580000C20000201F +:105698002C000020994A00000000000043950000FB +:1056A8000C5C0000A0580000C4000020500000203E +:1056B800994A00000000000051950000245C000099 +:1056C800A0580000C600002074000020994A00007D +:1056D80000000000A26C0000FC5A000030580000D6 +:1056E800B0000020240000208925000000000000F0 +:1056F800596C0000CC5A000000000000AC000020EB +:10570800D00700204924000000000000676C00005A +:10571800E45A000000000000AE000020E807002066 +:0857280049240000000000000C +:10573000C0560000B7490000C0560000B74900003D +:10574000A4560000B7490000A4560000B749000065 +:1057500088560000B749000088560000B74900008D +:10576000FC5500004D460000E05500004D4600008D +:105770000000000039420000000000003942000033 +:105780000000000039420000000000003942000023 +:105790000000000039420000000000003942000013 +:1057A0000000000039420000000000003942000003 +:1057B000C45500004D460000A85500004D460000AD +:1057C00000000000394200000000000039420000E3 +:1057D00000000000394200000000000039420000D3 +:1057E00000000000394200000000000039420000C3 +:1057F00000000000394200000000000039420000B3 +:1058000000000000394200000000000039420000A2 +:105810000000000039420000000000003942000092 +:105820000000000039420000000000003942000082 +:10583000452500008D260000E5250000FB44000002 +:10584000EF440000E3440000BF46000001450000B3 +:105850000D4500001F4500002D4500003D4500009E +:105860004B4500009545000000000000C9460000BF +:10587000394700004B47000079470000A34700006C +:10588000CF470000F94700000000000000000000C2 +:105890002D48000033480000634800009348000092 +:1058A000B3480000C94800000000000000000000EC +:1058B00000000000D7480000F7480000F54900004C +:1058C0001749000041490000C34900005549000044 +:1058D0007F4900008349000097490000ED4A00001D +:0C58E0009949000000000000AF490000E2 +:1058EC00005F0000040000005D5E0000040000008A +:1058FC00A25E000004000000215E00000400000015 +:10590C00D96A000004000000489600000400000062 +:10591C00295E0000040000001D950000040000003A +:10592C00736C000004000000C5650000040000005A +:08593C00975E0000040000006A +:10594400020400000000000019110000EF400000F4 +:10595400010000000200000004000000000000003C +:105964000000000000000100DC56000001000000FF +:105974000000010000000800DC56000002000000E6 +:105984000000090000000800DC56000003000000CD +:105994000000110000000400DC560000982F8A4229 +:1059A40091443771CFFBC0B5A5DBB5E95BC256396D +:1059B400F111F159A4823F92D55E1CAB98AA07D885 +:1059C400015B8312BE853124C37D0C55745DBE72A8 +:1059D400FEB1DE80A706DC9B74F19BC1C1699BE428 +:1059E4008647BEEFC69DC10FCCA10C246F2CE92DB8 +:1059F400AA84744ADCA9B05CDA88F97652513E98DC +:105A04006DC631A8C82703B0C77F59BFF30BE0C6E2 +:105A14004791A7D55163CA0667292914850AB72770 +:105A240038211B2EFC6D2C4D130D385354730A650D +:105A3400BB0A6A762EC9C281852C7292A1E8BFA2E4 +:105A44004B661AA8708B4BC2A3516CC719E892D14C +:105A5400240699D685350EF470A06A1016C1A419CF +:105A6400086C371E4C774827B5BCB034B30C1C39CE +:105A74004AAAD84E4FCA9C5BF36F2E68EE828F748D +:105A84006F63A5781478C8840802C78CFAFFBE90A7 +:105A9400EB6C50A4F7A3F9BEF27871C600000020A5 +:105AA4000000000000000B0602000000B45A0000D1 +:105AB40000000000B56B00002A0002020000002074 +:105AC400BD6B000022000B111856000000010000FD +:105AD40010000000000000000000000000000000B2 +:105AE4001856000000000000000100000000000043 +:105AF40000000000000000009F1600201C5B000056 +:105B0400145B0000000000000010000000002000F2 +:105B1400000200000010000004000000000000006B +:105B2400FFFFFFFF00300140374600000000000087 +:105B3400003001400001000000300140000200007C +:105B440000300140FFFFFFFF00200140214600001C +:105B5400000000000020014000010000002001407E +:105B64000002000000200140FFFFFFFF0010014081 +:105B74000B4600000000000000100140000100007E +:105B8400001001400002000000100140FFFFFFFF71 +:105B940000000140F5450000000000000000014045 +:105BA400000100000000014000020000000001406C +:105BB400FF0300004C8002400000000003000000CE +:105BC4000880024001000000030000000080024041 +:105BD40000000000FC550000E0550000C455000022 +:105BE400A855000000FC3F2000040000C80000206D +:105BF4000060004040787D01045C0000734A0000AE +:105C04000C5C0000000000000050004040787D0162 +:105C14001C5C00004D4A0000245C000000000000F1 +:105C24000040004040787D01345C0000274A0000B9 +:105C34003C5C000000000000F9950000079600009D +:105C44001B9600002A96000036960000205500009E +:105C5400205500008055000088550000A055000024 +:105C6400A8550000010002001000110012002000DD +:105C740021002200230024003000310032003300D0 +:105C8400FFFF25633A20456E7465722074686520B1 +:105C940073657269616C207265636F7665727920D1 +:105CA4006D6F64650A0025633A204572726F722035 +:105CB400696E697469616C697A696E6720626F6F75 +:105CC4007420636F6E736F6C652E207263203D20A9 +:105CD40025640A0025633A20426F6F746C6F616417 +:105CE40065722073657269616C2070726F6365738D +:105CF4007320776173207465726D696E6174656475 +:105D040020756E65787065637465646C790A002526 +:105D1400633A205374617274696E6720626F6F74A2 +:105D24006C6F616465720A0025633A204C65667481 +:105D340020626F6F745F676F207769746820737572 +:105D44006363657373203D3D2025640A0025633A2F +:105D54002053746179696E6720696E207365726976 +:105D6400616C207265636F766572790A0025633A07 +:105D740020556E61626C6520746F2066696E6420C4 +:105D8400626F6F7461626C6520696D6167650A009A +:105D940025633A20426F6F746C6F6164657220638F +:105DA4006861696E6C6F61642061646472657373A9 +:105DB400206F66667365743A20307825780A00256A +:105DC400633A20496D6167652076657273696F6E09 +:105DD4003A207625642E25642E25640A0025633A2C +:105DE400204A756D70696E6720746F207468652031 +:105DF400666972737420696D61676520736C6F7472 +:105E04000A0025633A204E657665722073686F75C3 +:105E14006C642067657420686572650A006D63753B +:105E2400626F6F74006F735F68656170002A2A2A5D +:105E3400205573696E67205A6570687972204F53D4 +:105E4400206275696C642066333361613262633445 +:105E5400613433202A2A2A0A0063627072696E74DC +:105E6400665F7061636B616765004661696C656458 +:105E740020746F207265626F6F743A207370696E5C +:105E84006E696E6720656E646C6573736C792E2E13 +:105E94002E0A007379735F6765746F707400666CA3 +:105EA4006173680025633A205368617265642064F5 +:105EB40061746120544C5620686561646572207772 +:105EC40072697465206661696C65643A2025640AA8 +:105ED4000025633A205368617265642064617461CB +:105EE40020544C5620646174612077726974652073 +:105EF4006661696C65643A2025640A00626F6F7498 +:105F04006C6F616465725F696E666F0025633A2029 +:105F1400626F6F747574696C5F696D675F76616CCD +:105F240069646174653A20666C61736820617265A6 +:105F3400612025700A0025633A20626F6F747574BE +:105F4400696C5F696D675F76616C69646174653AF9 +:105F540020544C5620697465726174696F6E2066B2 +:105F640061696C65642025640A0025633A20626FC8 +:105F74006F747574696C5F696D675F76616C696471 +:105F84006174653A20544C56206F66662025752C42 +:105F940020656E642025750A0025633A20626F6FC0 +:105FA400747574696C5F696D675F76616C6964614F +:105FB40074653A20544C56206265796F6E6420698A +:105FC4006D6167652073697A650A0025633A20620A +:105FD4006F6F747574696C5F696D675F76616C6906 +:105FE400646174653A20544C56202564206E6F74A5 +:105FF400207065726D69747465640A0025633A20C3 +:10600400626F6F747574696C5F696D675F76616CDC +:1060140069646174653A2045585045435445445F6A +:10602400484153485F544C56203D3D2025640A00A6 +:1060340025633A20626F6F747574696C5F696D676C +:106044005F686173680A0025633A20626F6F747534 +:1060540074696C5F746C765F697465725F6265679E +:10606400696E3A20747970652025642C2070726FF3 +:1060740074203D3D2025640A0025633A20626F6F39 +:10608400747574696C5F746C765F697465725F6E45 +:106094006578743A20736561726368696E67206617 +:1060A4006F722025642028256420697320616E792D +:1060B40029207374617274696E6720617420257578 +:1060C40020656E64696E672061742025750A002559 +:1060D400633A20626F6F747574696C5F746C765F79 +:1060E400697465725F6E6578743A2070726F746556 +:1060F4006374656420544C56202564206E6F7420AC +:10610400666F756E640A0025633A20626F6F74755A +:1061140074696C5F746C765F697465725F6E6578C0 +:10612400743A20544C562068656164657220617429 +:10613400202575206F76657272756E7320736563A2 +:1061440074696F6E20656E642025750A0025633AB4 +:1061540020626F6F747574696C5F746C765F6974B8 +:1061640065725F6E6578743A206D616C666F726DEE +:10617400656420544C56206174202575206F766523 +:106184007272756E732073656374696F6E20656EC9 +:10619400642025750A0025633A20626F6F74757454 +:1061A400696C5F746C765F697465725F6E65787430 +:1061B4003A20544C5620256420666F756E64206125 +:1061C40074202575202873697A65202564290A00BE +:1061D40025633A20626F6F747574696C5F746C76B2 +:1061E4005F697465725F6E6578743A20544C56200A +:1061F4002564206E6F7420666F756E640A002563D3 +:106204003A20626F6F745F65726173655F72656770 +:10621400696F6E3A20666C6173685F6172656120B4 +:1062240025702C206F66667365742025752C207389 +:10623400697A652025752C206261636B77617264CD +:1062440073203D3D20256868750A0025633A206265 +:106254006F6F745F65726173655F726567696F6E96 +:106264003A2064657669636520776974682065728D +:106274006173650A0025633A20626F6F745F73630C +:1062840072616D626C655F726567696F6E3A202535 +:10629400702025752025752025640A0025633A2081 +:1062A400626F6F745F76657273696F6E5F636D7032 +:1062B4003A20766572312025752E25752E25752098 +:1062C400767320766572322025752E25752E2575F8 +:1062D4000A0025633A204661696C656420746F2066 +:1062E400616464206461746120746F2073686172F6 +:1062F4006564206D656D6F727920617265612E0A27 +:10630400007072696D617279007365636F6E6461A8 +:1063140072790025633A204E6F20736C6F74207479 +:106324006F206C6F616420666F7220696D616765B0 +:106334002025640A0025633A20626F6F745F7661DA +:106344006C69646174655F736C6F743A20736C6F0D +:10635400742025642C2065787065637465645F73AC +:106364007761705F747970652025640A0025633A4B +:1063740020626F6F745F76616C69646174655F73CA +:106384006C6F743A206865616465722076616C692B +:10639400646174696F6E206661696C65642025644C +:1063A4000A0025633A20496D61676520696E20748F +:1063B400686520257320736C6F74206973206E6F79 +:1063C400742076616C6964210A0025633A20466171 +:1063D400696C65642072656164696E6720696D61CA +:1063E400676520686561646572732E0A0025633AE7 +:1063F40020496D61676520256420257320736C6FC7 +:10640400743A20696D616765206E6F7420666F75DC +:106414006E640A005072696D6172790025633A20D6 +:10642400252D397320736C6F743A20766572736905 +:106434006F6E3D25752E25752E25752B25750A0045 +:106444005365636F6E646172790025633A20496D08 +:10645400616765202564206C6F61646564206672E1 +:106464006F6D2074686520257320736C6F740A0047 +:1064740025633A20496D6167652025642052414DAA +:10648400206C6F616420616464726573732030787A +:10649400257820697320696E76616C69642E0A0020 +:1064A40025633A204572726F72207768696C737441 +:1064B40020636F7079696E6720696D616765202557 +:1064C400642066726F6D20466C61736820746F205F +:1064D4005352414D3A2025640A0025633A20496D00 +:1064E4006167652025642052414D206C6F616469A9 +:1064F4006E6720746F203078257820697320666178 +:10650400696C65642E0A0025633A20496D616765EC +:106514002025642052414D206C6F6164696E6720B0 +:10652400746F2030782578206973207375636365F0 +:10653400656465642E0A0025633A2052656D6F76A2 +:10654400696E6720696D6167652025642066726FD6 +:106554006D205352414D20617420616464726573EF +:106564007320307825780A0025633A2052656D6FD0 +:1065740076696E6720696D61676520256420736C98 +:106584006F742025642066726F6D20666C61736879 +:106594000A0025633A204E6F7420656E6F75676834 +:1065A400206D656D6F727920746F2073746F7265DE +:1065B40020696E636F6D696E672064617461210A7E +:1065C4000073657269616C5F616461707465720007 +:1065D40025633A2054580A00696D61676500646157 +:1065E4007461006F66660025633A205772697469A6 +:1065F4006E67206174203078257820756E74696C1C +:1066040020307825780A0025633A2052583A203001 +:106614007825780A0072630025633A204661696C24 +:10662400656420746F206F70656E20666C6173689A +:106634002061726561733A2025640A00696D61679F +:10664400657300736C6F74006861736800766572BB +:1066540073696F6E002568752E2568752E2568751B +:10666400002E2575006275665F73697A6500627530 +:10667400665F636F756E740025633A2072302F6114 +:10668400313A2020307825303878202072312F613B +:10669400323A2020307825303878202072322F6129 +:1066A400333A20203078253038780A0025633A20A0 +:1066B40072332F61343A20203078253038782072B4 +:1066C40031322F69703A20203078253038782072A2 +:1066D40031342F6C723A20203078253038780A0013 +:1066E40025633A2020787073723A20203078253060 +:1066F40038780A0025633A204661756C74696E67C0 +:1067040020696E737472756374696F6E206164645A +:106714007265737320287231352F7063293A2030E3 +:1067240078253038780A0025633A20556E68616E02 +:10673400646C6564204952516E3A2025640A002530 +:10674400633A202A2A2A2A2A2055534147452046BB +:1067540041554C54202A2A2A2A2A0A0025633A2021 +:1067640020204469766973696F6E206279207A65A6 +:10677400726F0A0025633A202020556E616C6967A8 +:106784006E6564206D656D6F7279206163636573F6 +:10679400730A0025633A2020204E6F20636F7072C5 +:1067A4006F636573736F7220696E7374727563744B +:1067B400696F6E730A0025633A202020496C6C656A +:1067C40067616C206C6F6164206F66204558435F7D +:1067D40052455455524E20696E746F2050430A003E +:1067E40025633A202020496C6C6567616C207573C1 +:1067F40065206F662074686520455053520A002551 +:10680400633A202020417474656D707420746F2085 +:106814006578656375746520756E646566696E6513 +:106824006420696E737472756374696F6E0A0025EF +:10683400633A202A2A2A2A2A2042555320464155BF +:106844004C54202A2A2A2A2A0A0025633A20202086 +:10685400537461636B696E67206572726F720A00AC +:1068640025633A202020556E737461636B696E67EB +:10687400206572726F720A0025633A2020205072DC +:106884006563697365206461746120627573206552 +:1068940072726F720A0025633A20202042464152E8 +:1068A40020416464726573733A20307825780A0055 +:1068B40025633A202020496D7072656369736520F1 +:1068C4006461746120627573206572726F720A006C +:1068D40025633A202020496E737472756374696F5E +:1068E4006E20627573206572726F720A0025633AB6 +:1068F400202A2A2A2A2A204D5055204641554C54F4 +:10690400202A2A2A2A2A0A0025633A20202053749E +:1069140061636B696E67206572726F722028636FA2 +:106924006E746578742061726561206D696768743E +:10693400206265206E6F742076616C6964290A0098 +:1069440025633A20202044617461204163636573A8 +:10695400732056696F6C6174696F6E0A0025633A1F +:106964002020204D4D46415220416464726573736A +:106974003A20307825780A0025633A202020496E91 +:10698400737472756374696F6E20416363657373A6 +:106994002056696F6C6174696F6E0A005265736585 +:1069A4007276656420457863657074696F6E20281B +:1069B4000053707572696F757320696E74657272B5 +:1069C4007570742028495251200025633A20535091 +:1069D40053454C20696E20746872656164206D6F44 +:1069E400646520646F6573206E6F7420696E6469DA +:1069F40063617465205053500A0025633A202A2AA3 +:106A04002A2A2A2048415244204641554C54202ADF +:106A14002A2A2A2A0A0025633A2020204275732054 +:106A24006661756C74206F6E20766563746F722076 +:106A34007461626C6520726561640A0025633A20A2 +:106A440020204465627567206576656E740A0025AA +:106A5400633A2020204661756C7420657363616C11 +:106A64006174696F6E20287365652062656C6F7749 +:106A7400290A0025633A20415243485F455843455B +:106A84005054207769746820726561736F6E202595 +:106A9400780A0A0025633A202A2A2A2A2A204465E9 +:106AA400627567206D6F6E69746F722065786365B7 +:106AB4007074696F6E202A2A2A2A2A0A0025633AEA +:106AC400202A2A2A2A2A20257320256429202A2AD2 +:106AD4002A2A2A0A006D70750025633A205B256412 +:106AE4005D20307825303878203078253038780AA1 +:106AF4000025633A204661696C656420746F2061E7 +:106B04006C6C6F63617465206E6577204D50552001 +:106B1400726567696F6E2025750A0A0025633A203D +:106B240050726F6772616D204D50552072656769B0 +:106B34006F6E20617420696E6465782030782578E2 +:106B44000A0025633A20506172746974696F6E207B +:106B540025753A20636F686572656E6365206368A6 +:106B640065636B206661696C65642E0A0025633A6F +:106B740020436F6E666967757265204D50552072AB +:106B84006567696F6E20617420696E646578203072 +:106B94007825780A0025633A20746F74616C20723A +:106BA4006567696F6E20636F756E743A2025640A99 +:106BB40000464C4153485F30005352414D5F300012 +:106BC40061626F727428290A0025633A2050617249 +:106BD400656E7420646576696365206973206E6FE1 +:106BE400742072656164790A0025633A20506172E9 +:106BF400656E7420696E697469616C697361746926 +:106C04006F6E206661696C7572653A2025640A00AE +:106C140025633A20556E6465726C79696E672061EC +:106C24007265612073697A6520697320696E737572 +:106C34006666696369656E742C2072657175697224 +:106C440065733A20307825782C206861733A2030B7 +:106C54007825780A00626F6F745F6D6F64654031E8 +:106C6400303000626F6F745F696E666F403000721F +:106C74006574656E74696F6E00666C6173685F73CA +:106C8400696D5F737461747300666C6173685F73BC +:106C9400696D5F7468726573686F6C64730073699F +:106CA4006D5F666C6173685F636F6E74726F6C6C3A +:106CB4006572006D61785F77726974655F63616C9A +:106CC4006C73006D61785F65726173655F63616C9D +:106CD4006C73006D61785F6C656E006279746573C6 +:106CE4005F726561640062797465735F7772697459 +:106CF40074656E00646F75626C655F777269746544 +:106D04007300666C6173685F726561645F63616C74 +:106D14006C7300666C6173685F726561645F74694B +:106D24006D655F757300666C6173685F7772697413 +:106D3400655F63616C6C7300666C6173685F777226 +:106D44006974655F74696D655F757300666C617302 +:106D5400685F65726173655F63616C6C7300666C18 +:106D64006173685F65726173655F74696D655F7592 +:106D7400730065726173655F6379636C65735F75D6 +:106D84006E6974300065726173655F6379636C6505 +:106D9400735F756E6974310065726173655F6379E1 +:106DA400636C65735F756E697432006572617365D7 +:106DB4005F6379636C65735F756E697433006572C4 +:106DC4006173655F6379636C65735F756E69743451 +:106DD4000065726173655F6379636C65735F756E7B +:106DE4006974350065726173655F6379636C65739B +:106DF4005F756E6974360065726173655F6379638C +:106E04006C65735F756E6974370065726173655F75 +:106E14006379636C65735F756E697438006572615C +:106E240073655F6379636C65735F756E697439004C +:106E340065726173655F6379636C65735F756E69B1 +:106E44007431300065726173655F6379636C657377 +:106E54005F756E697431310065726173655F637962 +:106E6400636C65735F756E6974313200657261734A +:106E7400655F6379636C65735F756E697431330044 +:106E840065726173655F6379636C65735F756E6961 +:106E94007431340065726173655F6379636C657323 +:106EA4005F756E697431350065726173655F63790E +:106EB400636C65735F756E697431360065726173F6 +:106EC400655F6379636C65735F756E6974313700F0 +:106ED40065726173655F6379636C65735F756E6911 +:106EE4007431380065726173655F6379636C6573CF +:106EF4005F756E697431390065726173655F6379BA +:106F0400636C65735F756E697432300065726173AA +:106F1400655F6379636C65735F756E6974323100A4 +:106F240065726173655F6379636C65735F756E69C0 +:106F34007432320065726173655F6379636C657383 +:106F44005F756E697432330065726173655F63796E +:106F5400636C65735F756E69743234006572617356 +:106F6400655F6379636C65735F756E697432350050 +:106F740065726173655F6379636C65735F756E6970 +:106F84007432360065726173655F6379636C65732F +:106F94005F756E697432370065726173655F63791A +:106FA400636C65735F756E69743238006572617302 +:106FB400655F6379636C65735F756E6974323900FC +:106FC40065726173655F6379636C65735F756E6920 +:106FD4007433300065726173655F6379636C6573E4 +:106FE4005F756E697433310065726173655F6379CF +:106FF400636C65735F756E697433320065726173B7 +:10700400655F6379636C65735F756E6974333300B0 +:1070140065726173655F6379636C65735F756E69CF +:107024007433340065726173655F6379636C65738F +:107034005F756E697433350065726173655F63797A +:10704400636C65735F756E69743336006572617362 +:10705400655F6379636C65735F756E69743337005C +:1070640065726173655F6379636C65735F756E697F +:107074007433380065726173655F6379636C65733B +:107084005F756E697433390065726173655F637926 +:10709400636C65735F756E69743430006572617317 +:1070A400655F6379636C65735F756E697434310011 +:1070B40065726173655F6379636C65735F756E692F +:1070C4007434320065726173655F6379636C6573F0 +:1070D4005F756E697434330065726173655F6379DB +:1070E400636C65735F756E697434340065726173C3 +:1070F400655F6379636C65735F756E6974343500BD +:1071040065726173655F6379636C65735F756E69DE +:107114007434360065726173655F6379636C65739B +:107124005F756E697434370065726173655F637986 +:10713400636C65735F756E6974343800657261736E +:10714400655F6379636C65735F756E697434390068 +:1071540065726173655F6379636C65735F756E698E +:107164007435300065726173655F6379636C657350 +:107174005F756E697435310065726173655F63793B +:10718400636C65735F756E69743532006572617323 +:10719400655F6379636C65735F756E69743533001D +:1071A40065726173655F6379636C65735F756E693E +:1071B4007435340065726173655F6379636C6573FC +:1071C4005F756E697435350065726173655F6379E7 +:1071D400636C65735F756E697435360065726173CF +:1071E400655F6379636C65735F756E6974353700C9 +:1071F40065726173655F6379636C65735F756E69EE +:107204007435380065726173655F6379636C6573A7 +:107214005F756E697435390065726173655F637992 +:10722400636C65735F756E69743630006572617383 +:10723400655F6379636C65735F756E69743631007D +:1072440065726173655F6379636C65735F756E699D +:107254007436320065726173655F6379636C65735C +:107264005F756E697436330065726173655F637947 +:10727400636C65735F756E6974363400657261732F +:10728400655F6379636C65735F756E697436350029 +:1072940065726173655F6379636C65735F756E694D +:1072A4007436360065726173655F6379636C657308 +:1072B4005F756E697436370065726173655F6379F3 +:1072C400636C65735F756E697436380065726173DB +:1072D400655F6379636C65735F756E6974363900D5 +:1072E40065726173655F6379636C65735F756E69FD +:1072F4007437300065726173655F6379636C6573BD +:107304005F756E697437310065726173655F6379A7 +:10731400636C65735F756E6974373200657261738F +:10732400655F6379636C65735F756E697437330089 +:1073340065726173655F6379636C65735F756E69AC +:107344007437340065726173655F6379636C657368 +:107354005F756E697437350065726173655F637953 +:10736400636C65735F756E6974373600657261733B +:10737400655F6379636C65735F756E697437370035 +:1073840065726173655F6379636C65735F756E695C +:107394007437380065726173655F6379636C657314 +:1073A4005F756E697437390065726173655F6379FF +:1073B400636C65735F756E697438300065726173F0 +:1073C400655F6379636C65735F756E6974383100EA +:1073D40065726173655F6379636C65735F756E690C +:1073E4007438320065726173655F6379636C6573C9 +:1073F4005F756E697438330065726173655F6379B4 +:10740400636C65735F756E6974383400657261739B +:10741400655F6379636C65735F756E697438350095 +:1074240065726173655F6379636C65735F756E69BB +:107434007438360065726173655F6379636C657374 +:107444005F756E697438370065726173655F63795F +:10745400636C65735F756E69743838006572617347 +:10746400655F6379636C65735F756E697438390041 +:1074740065726173655F6379636C65735F756E696B +:107484007439300065726173655F6379636C657329 +:107494005F756E697439310065726173655F637914 +:1074A400636C65735F756E697439320065726173FC +:1074B400655F6379636C65735F756E6974393300F6 +:1074C40065726173655F6379636C65735F756E691B +:1074D4007439340065726173655F6379636C6573D5 +:1074E4005F756E697439350065726173655F6379C0 +:1074F400636C65735F756E697439360065726173A8 +:10750400655F6379636C65735F756E6974393700A1 +:1075140065726173655F6379636C65735F756E69CA +:107524007439380065726173655F6379636C657380 +:107534005F756E697439390065726173655F63796B +:10754400636C65735F756E697431303000657261A8 +:1075540073655F6379636C65735F756E69743130ED +:10756400310065726173655F6379636C65735F7520 +:107574006E69743130320065726173655F6379637B +:107584006C65735F756E6974313033006572617355 +:10759400655F6379636C65735F756E6974313034EC +:1075A4000065726173655F6379636C65735F756EA3 +:1075B40069743130350065726173655F6379636C3A +:1075C40065735F756E697431303600657261736519 +:1075D4005F6379636C65735F756E6974313037000E +:1075E40065726173655F6379636C65735F756E69FA +:1075F400743130380065726173655F6379636C65FB +:10760400735F756E69743130390065726173655FDB +:107614006379636C65735F756E69743131300065CD +:10762400726173655F6379636C65735F756E6974AA +:107634003131310065726173655F6379636C6573C1 +:107644005F756E69743131320065726173655F63B1 +:1076540079636C65735F756E69743131330065727B +:107664006173655F6379636C65735F756E697431AB +:1076740031340065726173655F6379636C65735F50 +:10768400756E69743131350065726173655F637954 +:10769400636C65735F756E69743131360065726150 +:1076A40073655F6379636C65735F756E697431319B +:1076B400370065726173655F6379636C65735F75C9 +:1076C4006E69743131380065726173655F63796323 +:1076D4006C65735F756E69743131390065726173FD +:1076E400655F6379636C65735F756E69743132309D +:1076F4000065726173655F6379636C65735F756E52 +:1077040069743132310065726173655F6379636CEA +:1077140065735F756E6974313232006572617365C9 +:107724005F6379636C65735F756E697431323300BE +:1077340065726173655F6379636C65735F756E69A8 +:10774400743132340065726173655F6379636C65AB +:10775400735F756E69743132350065726173655F8C +:107764006379636C65735F756E6974313236006575 +:10777400726173655F6379636C65735F756E697459 +:107784003132370065726173655F6379636C657369 +:107794005F756E69743132380065726173655F6359 +:1077A40079636C65735F756E697431323900657223 +:1077B4006173655F6379636C65735F756E6974315A +:1077C40033300065726173655F6379636C65735F01 +:1077D400756E69743133310065726173655F637905 +:1077E400636C65735F756E69743133320065726101 +:1077F40073655F6379636C65735F756E6974313348 +:10780400330065726173655F6379636C65735F757B +:107814006E69743133340065726173655F637963D3 +:107824006C65735F756E69743133350065726173AD +:10783400655F6379636C65735F756E697431333644 +:107844000065726173655F6379636C65735F756E00 +:1078540069743133370065726173655F6379636C92 +:1078640065735F756E697431333800657261736571 +:107874005F6379636C65735F756E69743133390066 +:1078840065726173655F6379636C65735F756E6957 +:10789400743134300065726173655F6379636C655C +:1078A400735F756E69743134310065726173655F3D +:1078B4006379636C65735F756E6974313432006526 +:1078C400726173655F6379636C65735F756E697408 +:1078D4003134330065726173655F6379636C65731A +:1078E4005F756E69743134340065726173655F630A +:1078F40079636C65735F756E6974313435006572D4 +:107904006173655F6379636C65735F756E69743108 +:1079140034360065726173655F6379636C65735FA8 +:10792400756E69743134370065726173655F6379AC +:10793400636C65735F756E697431343800657261A8 +:1079440073655F6379636C65735F756E69743134F5 +:10795400390065726173655F6379636C65735F7524 +:107964006E69743135300065726173655F63796384 +:107974006C65735F756E697431353100657261735E +:10798400655F6379636C65735F756E6974313532F5 +:107994000065726173655F6379636C65735F756EAF +:1079A40069743135330065726173655F6379636C43 +:1079B40065735F756E697431353400657261736522 +:1079C4005F6379636C65735F756E69743135350017 +:1079D40065726173655F6379636C65735F756E6906 +:1079E400743135360065726173655F6379636C6504 +:1079F400735F756E69743135370065726173655FE5 +:107A04006379636C65735F756E69743135380065CD +:107A1400726173655F6379636C65735F756E6974B6 +:107A24003135390065726173655F6379636C6573C1 +:107A34005F756E69743136300065726173655F63BA +:107A440079636C65735F756E697431363100657284 +:107A54006173655F6379636C65735F756E697431B7 +:107A640036320065726173655F6379636C65735F59 +:107A7400756E69743136330065726173655F63795D +:107A8400636C65735F756E69743136340065726159 +:107A940073655F6379636C65735F756E69743136A2 +:107AA400350065726173655F6379636C65735F75D7 +:107AB4006E69743136360065726173655F6379632C +:107AC4006C65735F756E6974313637006572617306 +:107AD400655F6379636C65735F756E69743136389D +:107AE4000065726173655F6379636C65735F756E5E +:107AF40069743136390065726173655F6379636CEB +:107B040065735F756E6974313730006572617365D2 +:107B14005F6379636C65735F756E697431373100C7 +:107B240065726173655F6379636C65735F756E69B4 +:107B3400743137320065726173655F6379636C65B4 +:107B4400735F756E69743137330065726173655F95 +:107B54006379636C65735F756E697431373400657E +:107B6400726173655F6379636C65735F756E697465 +:107B74003137350065726173655F6379636C657372 +:107B84005F756E69743137360065726173655F6362 +:107B940079636C65735F756E69743137370065722C +:107BA4006173655F6379636C65735F756E69743166 +:107BB40037380065726173655F6379636C65735F01 +:107BC400756E69743137390065726173655F637905 +:107BD400636C65735F756E6974313830006572610A +:107BE40073655F6379636C65735F756E697431384F +:107BF400310065726173655F6379636C65735F758A +:107C04006E69743138320065726173655F637963DC +:107C14006C65735F756E69743138330065726173B6 +:107C2400655F6379636C65735F756E69743138344D +:107C34000065726173655F6379636C65735F756E0C +:107C440069743138350065726173655F6379636C9B +:107C540065735F756E69743138360065726173657A +:107C64005F6379636C65735F756E6974313837006F +:107C740065726173655F6379636C65735F756E6963 +:107C8400743138380065726173655F6379636C655C +:107C9400735F756E69743138390065726173655F3D +:107CA4006379636C65735F756E697431393000652F +:107CB400726173655F6379636C65735F756E697414 +:107CC4003139310065726173655F6379636C657323 +:107CD4005F756E69743139320065726173655F6313 +:107CE40079636C65735F756E6974313933006572DD +:107CF4006173655F6379636C65735F756E69743115 +:107D040039340065726173655F6379636C65735FB1 +:107D1400756E69743139350065726173655F6379B5 +:107D2400636C65735F756E697431393600657261B1 +:107D340073655F6379636C65735F756E69743139FC +:107D4400370065726173655F6379636C65735F7532 +:107D54006E69743139380065726173655F63796384 +:107D64006C65735F756E697431393900657261735E +:107D7400655F6379636C65735F756E697432303007 +:107D84000065726173655F6379636C65735F756EBB +:107D940069743230310065726173655F6379636C55 +:107DA40065735F756E697432303200657261736534 +:107DB4005F6379636C65735F756E69743230330029 +:107DC40065726173655F6379636C65735F756E6912 +:107DD400743230340065726173655F6379636C6516 +:107DE400735F756E69743230350065726173655FF7 +:107DF4006379636C65735F756E69743230360065E0 +:107E0400726173655F6379636C65735F756E6974C2 +:107E14003230370065726173655F6379636C6573D3 +:107E24005F756E69743230380065726173655F63C3 +:107E340079636C65735F756E69743230390065728D +:107E44006173655F6379636C65735F756E697432C2 +:107E540031300065726173655F6379636C65735F6C +:107E6400756E69743231310065726173655F63796F +:107E7400636C65735F756E6974323132006572616B +:107E840073655F6379636C65735F756E69743231B2 +:107E9400330065726173655F6379636C65735F75E5 +:107EA4006E69743231340065726173655F6379633E +:107EB4006C65735F756E6974323135006572617318 +:107EC400655F6379636C65735F756E6974323136AF +:107ED4000065726173655F6379636C65735F756E6A +:107EE40069743231370065726173655F6379636CFD +:107EF40065735F756E6974323138006572617365DC +:107F04005F6379636C65735F756E697432313900D0 +:107F140065726173655F6379636C65735F756E69C0 +:107F2400743232300065726173655F6379636C65C6 +:107F3400735F756E69743232310065726173655FA7 +:107F44006379636C65735F756E6974323232006590 +:107F5400726173655F6379636C65735F756E697471 +:107F64003232330065726173655F6379636C657384 +:107F74005F756E69743232340065726173655F6374 +:107F840079636C65735F756E69743232350065723E +:107F94006173655F6379636C65735F756E69743271 +:107FA40032360065726173655F6379636C65735F14 +:107FB400756E69743232370065726173655F637917 +:107FC400636C65735F756E69743232380065726113 +:107FD40073655F6379636C65735F756E6974323260 +:107FE400390065726173655F6379636C65735F758E +:107FF4006E69743233300065726173655F637963EF +:108004006C65735F756E69743233310065726173C8 +:10801400655F6379636C65735F756E69743233325F +:108024000065726173655F6379636C65735F756E18 +:1080340069743233330065726173655F6379636CAD +:1080440065735F756E69743233340065726173658C +:108054005F6379636C65735F756E69743233350081 +:1080640065726173655F6379636C65735F756E696F +:10807400743233360065726173655F6379636C656E +:10808400735F756E69743233370065726173655F4F +:108094006379636C65735F756E6974323338006538 +:1080A400726173655F6379636C65735F756E697420 +:1080B4003233390065726173655F6379636C65732C +:1080C4005F756E69743234300065726173655F6325 +:1080D40079636C65735F756E6974323431006572EF +:1080E4006173655F6379636C65735F756E69743220 +:1080F40034320065726173655F6379636C65735FC5 +:10810400756E69743234330065726173655F6379C7 +:10811400636C65735F756E697432343400657261C3 +:1081240073655F6379636C65735F756E697432340C +:10813400350065726173655F6379636C65735F7540 +:108144006E69743234360065726173655F63796396 +:108154006C65735F756E6974323437006572617370 +:10816400655F6379636C65735F756E697432343807 +:108174000065726173655F6379636C65735F756EC7 +:1081840069743234390065726173655F6379636C55 +:1081940065735F756E69743235300065726173653D +:1081A4005F6379636C65735F756E69743235310032 +:1081B40065726173655F6379636C65735F756E691E +:1081C400743235320065726173655F6379636C651F +:1081D400735F756E69743235330065726173655F00 +:1081E4006379636C65735F756E69743235340065E9 +:1081F400726173655F6379636C65735F756E6974CF +:108204003235350064697274795F726561645F75D3 +:108214006E6974300064697274795F726561645F59 +:10822400756E6974310064697274795F7265616432 +:108234005F756E6974320064697274795F72656126 +:10824400645F756E6974330064697274795F726512 +:1082540061645F756E6974340064697274795F7205 +:108264006561645F756E6974350064697274795F01 +:10827400726561645F756E697436006469727479DD +:108284005F726561645F756E6974370064697274E6 +:10829400795F726561645F756E69743800646972D0 +:1082A40074795F726561645F756E697439006469BD +:1082B4007274795F726561645F756E6974313000E0 +:1082C40064697274795F726561645F756E69743133 +:1082D400310064697274795F726561645F756E6997 +:1082E4007431320064697274795F726561645F75B8 +:1082F4006E697431330064697274795F72656164A4 +:108304005F756E697431340064697274795F726583 +:1083140061645F756E697431350064697274795F84 +:10832400726561645F756E69743136006469727474 +:10833400795F726561645F756E6974313700646971 +:108344007274795F726561645F756E697431380047 +:1083540064697274795F726561645F756E697431A2 +:10836400390064697274795F726561645F756E69FE +:108374007432300064697274795F726561645F7528 +:108384006E697432310064697274795F7265616414 +:108394005F756E697432320064697274795F7265F4 +:1083A40061645F756E697432330064697274795FF5 +:1083B400726561645F756E697432340064697274E5 +:1083C400795F726561645F756E69743235006469E2 +:1083D4007274795F726561645F756E6974323600B8 +:1083E40064697274795F726561645F756E69743211 +:1083F400370064697274795F726561645F756E6970 +:108404007432380064697274795F726561645F758F +:108414006E697432390064697274795F726561647B +:108424005F756E697433300064697274795F726564 +:1084340061645F756E697433310064697274795F65 +:10844400726561645F756E69743332006469727455 +:10845400795F726561645F756E6974333300646952 +:108464007274795F726561645F756E697433340028 +:1084740064697274795F726561645F756E6974337F +:10848400350064697274795F726561645F756E69E1 +:108494007433360064697274795F726561645F7500 +:1084A4006E697433370064697274795F72656164EC +:1084B4005F756E697433380064697274795F7265CC +:1084C40061645F756E697433390064697274795FCD +:1084D400726561645F756E697434300064697274C6 +:1084E400795F726561645F756E69743431006469C3 +:1084F4007274795F726561645F756E697434320099 +:1085040064697274795F726561645F756E697434ED +:10851400330064697274795F726561645F756E6952 +:108524007434340064697274795F726561645F7570 +:108534006E697434350064697274795F726561645C +:108544005F756E697434360064697274795F72653C +:1085540061645F756E697434370064697274795F3D +:10856400726561645F756E6974343800646972742D +:10857400795F726561645F756E697434390064692A +:108584007274795F726561645F756E697435300009 +:1085940064697274795F726561645F756E6974355C +:1085A400310064697274795F726561645F756E69C4 +:1085B4007435320064697274795F726561645F75E1 +:1085C4006E697435330064697274795F72656164CD +:1085D4005F756E697435340064697274795F7265AD +:1085E40061645F756E697435350064697274795FAE +:1085F400726561645F756E6974353600646972749E +:10860400795F726561645F756E697435370064699A +:108614007274795F726561645F756E697435380070 +:1086240064697274795F726561645F756E697435CB +:10863400390064697274795F726561645F756E692B +:108644007436300064697274795F726561645F7551 +:108654006E697436310064697274795F726561643D +:108664005F756E697436320064697274795F72651D +:1086740061645F756E697436330064697274795F1E +:10868400726561645F756E6974363400646972740E +:10869400795F726561645F756E697436350064690B +:1086A4007274795F726561645F756E6974363600E1 +:1086B40064697274795F726561645F756E6974363A +:1086C400370064697274795F726561645F756E699D +:1086D4007436380064697274795F726561645F75B9 +:1086E4006E697436390064697274795F72656164A5 +:1086F4005F756E697437300064697274795F72658E +:1087040061645F756E697437310064697274795F8E +:10871400726561645F756E6974373200646972747E +:10872400795F726561645F756E697437330064697B +:108734007274795F726561645F756E697437340051 +:1087440064697274795F726561645F756E697437A8 +:10875400350064697274795F726561645F756E690E +:108764007437360064697274795F726561645F7529 +:108774006E697437370064697274795F7265616415 +:108784005F756E697437380064697274795F7265F5 +:1087940061645F756E697437390064697274795FF6 +:1087A400726561645F756E697438300064697274EF +:1087B400795F726561645F756E69743831006469EC +:1087C4007274795F726561645F756E6974383200C2 +:1087D40064697274795F726561645F756E69743817 +:1087E400330064697274795F726561645F756E6980 +:1087F4007438340064697274795F726561645F759A +:108804006E697438350064697274795F7265616485 +:108814005F756E697438360064697274795F726565 +:1088240061645F756E697438370064697274795F66 +:10883400726561645F756E69743838006469727456 +:10884400795F726561645F756E6974383900646953 +:108854007274795F726561645F756E697439300032 +:1088640064697274795F726561645F756E69743985 +:10887400310064697274795F726561645F756E69F1 +:108884007439320064697274795F726561645F750A +:108894006E697439330064697274795F72656164F6 +:1088A4005F756E697439340064697274795F7265D6 +:1088B40061645F756E697439350064697274795FD7 +:1088C400726561645F756E697439360064697274C7 +:1088D400795F726561645F756E69743937006469C4 +:1088E4007274795F726561645F756E69743938009A +:1088F40064697274795F726561645F756E697439F5 +:10890400390064697274795F726561645F756E6958 +:10891400743130300064697274795F726561645FC8 +:10892400756E69743130310064697274795F72658F +:1089340061645F756E697431303200646972747990 +:108944005F726561645F756E6974313033006469A8 +:108954007274795F726561645F756E697431303405 +:108964000064697274795F726561645F756E6974BD +:108974003130350064697274795F726561645F7562 +:108984006E69743130360064697274795F7265613E +:10899400645F756E69743130370064697274795F2D +:1089A400726561645F756E69743130380064697230 +:1089B40074795F726561645F756E69743130390012 +:1089C40064697274795F726561645F756E6974312C +:1089D40031300064697274795F726561645F756EC9 +:1089E40069743131310064697274795F72656164EC +:1089F4005F756E69743131320064697274795F72C3 +:108A04006561645F756E69743131330064697274D1 +:108A1400795F726561645F756E69743131340064C5 +:108A2400697274795F726561645F756E69743131FE +:108A3400350064697274795F726561645F756E692B +:108A4400743131360064697274795F726561645F90 +:108A5400756E69743131370064697274795F726557 +:108A640061645F756E697431313800646972747958 +:108A74005F726561645F756E697431313900646970 +:108A84007274795F726561645F756E6974313230D6 +:108A94000064697274795F726561645F756E69748C +:108AA4003132310064697274795F726561645F7533 +:108AB4006E69743132320064697274795F7265610F +:108AC400645F756E69743132330064697274795FFE +:108AD400726561645F756E69743132340064697201 +:108AE40074795F726561645F756E697431323500E3 +:108AF40064697274795F726561645F756E697431FB +:108B040032360064697274795F726561645F756E90 +:108B140069743132370064697274795F72656164B3 +:108B24005F756E69743132380064697274795F728A +:108B34006561645F756E6974313239006469727499 +:108B4400795F726561645F756E6974313330006496 +:108B5400697274795F726561645F756E69743133CB +:108B6400310064697274795F726561645F756E69FE +:108B7400743133320064697274795F726561645F61 +:108B8400756E69743133330064697274795F726528 +:108B940061645F756E697431333400646972747929 +:108BA4005F726561645F756E697431333500646941 +:108BB4007274795F726561645F756E69743133369E +:108BC4000064697274795F726561645F756E69745B +:108BD4003133370064697274795F726561645F75FB +:108BE4006E69743133380064697274795F726561D7 +:108BF400645F756E69743133390064697274795FC6 +:108C0400726561645F756E697431343000646972D1 +:108C140074795F726561645F756E697431343100B3 +:108C240064697274795F726561645F756E697431C9 +:108C340034320064697274795F726561645F756E61 +:108C440069743134330064697274795F7265616484 +:108C54005F756E69743134340064697274795F725B +:108C64006561645F756E697431343500646972746A +:108C7400795F726561645F756E697431343600645E +:108C8400697274795F726561645F756E6974313499 +:108C9400370064697274795F726561645F756E69C7 +:108CA400743134380064697274795F726561645F29 +:108CB400756E69743134390064697274795F7265F0 +:108CC40061645F756E6974313530006469727479FA +:108CD4005F726561645F756E697431353100646912 +:108CE4007274795F726561645F756E69743135326F +:108CF4000064697274795F726561645F756E69742A +:108D04003135330064697274795F726561645F75CB +:108D14006E69743135340064697274795F726561A7 +:108D2400645F756E69743135350064697274795F96 +:108D3400726561645F756E69743135360064697299 +:108D440074795F726561645F756E6974313537007B +:108D540064697274795F726561645F756E69743198 +:108D640035380064697274795F726561645F756E29 +:108D740069743135390064697274795F726561644C +:108D84005F756E69743136300064697274795F722C +:108D94006561645F756E697431363100646972743B +:108DA400795F726561645F756E697431363200642F +:108DB400697274795F726561645F756E6974313666 +:108DC400330064697274795F726561645F756E699A +:108DD400743136340064697274795F726561645FFA +:108DE400756E69743136350064697274795F7265C1 +:108DF40061645F756E6974313636006469727479C2 +:108E04005F726561645F756E6974313637006469D9 +:108E14007274795F726561645F756E697431363836 +:108E24000064697274795F726561645F756E6974F8 +:108E34003136390064697274795F726561645F7593 +:108E44006E69743137300064697274795F72656178 +:108E5400645F756E69743137310064697274795F67 +:108E6400726561645F756E6974313732006469726A +:108E740074795F726561645F756E6974313733004C +:108E840064697274795F726561645F756E69743167 +:108E940037340064697274795F726561645F756EFA +:108EA40069743137350064697274795F726561641D +:108EB4005F756E69743137360064697274795F72F4 +:108EC4006561645F756E6974313737006469727403 +:108ED400795F726561645F756E69743137380064F7 +:108EE400697274795F726561645F756E6974313734 +:108EF400390064697274795F726561645F756E6963 +:108F0400743138300064697274795F726561645FCA +:108F1400756E69743138310064697274795F726591 +:108F240061645F756E697431383200646972747992 +:108F34005F726561645F756E6974313833006469AA +:108F44007274795F726561645F756E697431383407 +:108F54000064697274795F726561645F756E6974C7 +:108F64003138350064697274795F726561645F7564 +:108F74006E69743138360064697274795F72656140 +:108F8400645F756E69743138370064697274795F2F +:108F9400726561645F756E69743138380064697232 +:108FA40074795F726561645F756E69743138390014 +:108FB40064697274795F726561645F756E69743136 +:108FC40039300064697274795F726561645F756ECB +:108FD40069743139310064697274795F72656164EE +:108FE4005F756E69743139320064697274795F72C5 +:108FF4006561645F756E69743139330064697274D4 +:10900400795F726561645F756E69743139340064C7 +:10901400697274795F726561645F756E6974313900 +:10902400350064697274795F726561645F756E6935 +:10903400743139360064697274795F726561645F92 +:10904400756E69743139370064697274795F726559 +:1090540061645F756E69743139380064697274795A +:109064005F726561645F756E697431393900646972 +:109074007274795F726561645F756E6974323030E1 +:109084000064697274795F726561645F756E697496 +:109094003230310064697274795F726561645F753E +:1090A4006E69743230320064697274795F7265611A +:1090B400645F756E69743230330064697274795F09 +:1090C400726561645F756E6974323034006469720C +:1090D40074795F726561645F756E697432303500EE +:1090E40064697274795F726561645F756E69743204 +:1090F40030360064697274795F726561645F756E9D +:1091040069743230370064697274795F72656164BE +:109114005F756E69743230380064697274795F7295 +:109124006561645F756E69743230390064697274A4 +:10913400795F726561645F756E69743231300064A1 +:10914400697274795F726561645F756E69743231D6 +:10915400310064697274795F726561645F756E6908 +:10916400743231320064697274795F726561645F6C +:10917400756E69743231330064697274795F726533 +:1091840061645F756E697432313400646972747934 +:109194005F726561645F756E69743231350064694C +:1091A4007274795F726561645F756E6974323136A9 +:1091B4000064697274795F726561645F756E697465 +:1091C4003231370064697274795F726561645F7506 +:1091D4006E69743231380064697274795F726561E2 +:1091E400645F756E69743231390064697274795FD1 +:1091F400726561645F756E697432323000646972DD +:1092040074795F726561645F756E697432323100BE +:1092140064697274795F726561645F756E697432D2 +:1092240032320064697274795F726561645F756E6D +:1092340069743232330064697274795F726561648F +:109244005F756E69743232340064697274795F7266 +:109254006561645F756E6974323235006469727475 +:10926400795F726561645F756E6974323236006469 +:10927400697274795F726561645F756E69743232A4 +:10928400370064697274795F726561645F756E69D1 +:10929400743232380064697274795F726561645F34 +:1092A400756E69743232390064697274795F7265FB +:1092B40061645F756E697432333000646972747905 +:1092C4005F726561645F756E69743233310064691D +:1092D4007274795F726561645F756E69743233327A +:1092E4000064697274795F726561645F756E697434 +:1092F4003233330064697274795F726561645F75D7 +:109304006E69743233340064697274795F726561B2 +:10931400645F756E69743233350064697274795FA1 +:10932400726561645F756E697432333600646972A4 +:1093340074795F726561645F756E69743233370086 +:1093440064697274795F726561645F756E697432A1 +:1093540033380064697274795F726561645F756E35 +:1093640069743233390064697274795F7265616457 +:109374005F756E69743234300064697274795F7237 +:109384006561645F756E6974323431006469727446 +:10939400795F726561645F756E697432343200643A +:1093A400697274795F726561645F756E6974323471 +:1093B400330064697274795F726561645F756E69A4 +:1093C400743234340064697274795F726561645F05 +:1093D400756E69743234350064697274795F7265CC +:1093E40061645F756E6974323436006469727479CD +:1093F4005F726561645F756E6974323437006469E5 +:109404007274795F726561645F756E697432343841 +:109414000064697274795F726561645F756E697402 +:109424003234390064697274795F726561645F759E +:109434006E69743235300064697274795F72656183 +:10944400645F756E69743235310064697274795F72 +:10945400726561645F756E69743235320064697275 +:1094640074795F726561645F756E69743235330057 +:1094740064697274795F726561645F756E69743270 +:1094840035340064697274795F726561645F756E06 +:109494006974323535006770696F40343030313368 +:1094A400303030006770696F4034303031323030E2 +:1094B40030006770696F4034303031313030300003 +:1094C4006770696F403430303130303030006D7047 +:1094D40073325F66706761696F40343030323830A0 +:1094E4003463006D7073325F66706761696F403416 +:1094F40030303238303038006D7073325F667067E8 +:1095040061696F4034303032383030300072657405 +:1095140061696E65646D656D0072657461696E651F +:10952400645F6D656D5F7A65706879725F72616D95 +:10953400007561727440343030303630303000752C +:1095440061727440343030303530303000756172BF +:10955400744034303030343030300025633A2048A1 +:10956400616C74696E672073797374656D0A005554 +:109574006E6B6E6F776E206572726F7200756E6BB4 +:109584006E6F776E0025633A203E3E3E205A45506A +:1095940048595220464154414C204552524F522082 +:1095A40025643A202573206F6E204350552025648E +:1095B4000A0025633A204661756C742064757269EB +:1095C4006E6720696E746572727570742068616E5E +:1095D400646C696E670A0A0025633A2043757272E7 +:1095E400656E74207468726561643A202570202861 +:1095F4002573290A004350552065786365707469A2 +:109604006F6E00556E68616E646C656420696E747B +:1096140065727275707400537461636B206F766544 +:1096240072666C6F77004B65726E656C206F6F703D +:1096340073004B65726E656C2070616E6963006DBA +:1096440061696E006F730025633A202570202872CB +:10965400656164792028792F6E293A2025632920B1 +:109664007072696F206368616E67656420746F202F +:1096740025642028776173202564290A0025633A2C +:1096840020257020746F6F6B206D757465782025AC +:10969400702C20636F756E743A2025642C206F72D1 +:1096A4006967207072696F3A2025640A0025633A5D +:1096B4002061646A757374696E67207072696F20C3 +:1096C4007570206F6E206D757465782025700A00A2 +:1096D40025633A206F6E206D75746578202570209F +:1096E400676F745F6D757465782076616C75653A23 +:1096F4002025640A0025633A20257020676F7420B2 +:109704006D757465782025702028792F6E293A208C +:1097140025630A0025633A2025702074696D656FFE +:109724007574206F6E206D757465782025700A003D +:1097340025633A2061646A757374696E6720707278 +:10974400696F20646F776E206F6E206D7574657815 +:109754002025700A0025633A206D757465782025EC +:1097640070206C6F636B5F636F756E743A20256451 +:109774000A0025633A206E6577206F776E65722044 +:109784006F66206D757465782025703A20257020E9 +:10979400287072696F3A202564290A0025633A20EB +:1097A400737461636B20257020666F722074687215 +:1097B4006561642025703A206F626A5F73697A6517 +:1097C4003D257A75206275665F73746172743D25F8 +:1097D4007020206275665F73697A6520257A75202A +:1097E400737461636B5F7074723D25700A00286E38 +:1097F400756C6C29001800B76C00001C00C76C0065 +:10980400002000D76C00001800DF6C00001C00EA88 +:109814006C00002000F86C00002400066D00002895 +:1098240000176D00002C002A6D000030003C6D0014 +:10983400003400506D00003800626D00003C00767A +:109844006D00004000896D000044009C6D000048DC +:1098540000AF6D00004C00C26D00005000D56D00DB +:10986400005400E86D00005800FB6D00005C000E21 +:109874006E00006000216E00006400346E00006819 +:1098840000486E00006C005C6E00007000706E009A +:10989400007400846E00007800986E00007C00ACB8 +:1098A4006E00008000C06E00008400D46E0000884A +:1098B40000E86E00008C00FC6E00009000106F0049 +:1098C400009400246F00009800386F00009C004C46 +:1098D4006F0000A000606F0000A400746F0000A877 +:1098E40000886F0000AC009C6F0000B000B06F00F7 +:1098F40000B400C46F0000B800D86F0000BC00ECD6 +:109904006F0000C00000700000C40014700000C8A4 +:109914000028700000CC003C700000D000507000A3 +:1099240000D40064700000D80078700000DC008C63 +:10993400700000E000A0700000E400B4700000E8D3 +:1099440000C8700000EC00DC700000F000F0700053 +:1099540000F40004710000F80018710000FC002CF1 +:1099640071000000014071000004015471000008FE +:1099740001687100000C017C7100001001907100FD +:10998400001401A47100001801B87100001C01CC7E +:109994007100002001E07100002401F4710000282E +:1099A40001087200002C011C7200003001307200AA +:1099B400003401447200003801587200003C016C0C +:1099C400720000400180720000440194720000485B +:1099D40001A87200004C01BC7200005001D072005A +:1099E400005401E47200005801F87200005C010C9C +:1099F4007300006001207300006401347300006888 +:109A040001487300006C015C730000700170730006 +:109A1400007401847300007801987300007C01AC29 +:109A24007300008001C07300008401D473000088B7 +:109A340001E87300008C01FC7300009001107400B5 +:109A4400009401247400009801387400009C014CB7 +:109A5400740000A00160740000A40174740000A8E4 +:109A64000188740000AC019C740000B001B0740063 +:109A740000B401C4740000B801D8740000BC01EC47 +:109A8400740000C00100750000C40114750000C812 +:109A94000128750000CC013C750000D0015175000F +:109AA40000D40166750000D8017B750000DC0190CC +:109AB400750000E001A5750000E401BA750000E836 +:109AC40001CF750000EC01E4750000F001F97500A8 +:109AD40000F4010E760000F80123760000FC013842 +:109AE40076000000024D7600000402627600000851 +:109AF40002777600000C028C7600001002A176003A +:109B0400001402B67600001802CB7600001C02E0B6 +:109B14007600002002F576000024020A770000286F +:109B2400021F7700002C02347700003002497700CE +:109B34000034025E7700003802737700003C02882C +:109B440077000040029D7700004402B2770000488D +:109B540002C77700004C02DC7700005002F1770066 +:109B64000054020678000058021B7800005C0230A2 +:109B740078000060024578000064025A78000068AA +:109B8400026F7800006C02847800007002997800FB +:109B9400007402AE7800007802C37800007C02D81A +:109BA4007800008002ED78000084020279000088C9 +:109BB40002177900008C022C790000900241790090 +:109BC4000094025679000098026B7900009C028090 +:109BD400790000A00295790000A402AA790000A8E7 +:109BE40002BF790000AC02D4790000B002E9790028 +:109BF40000B402FE790000B802137A0000BC022807 +:109C04007A0000C0023D7A0000C402527A0000C803 +:109C140002677A0000CC027C7A0000D002917A00BC +:109C240000D402A67A0000D802BB7A0000DC02D07D +:109C34007A0000E002E57A0000E402FA7A0000E823 +:109C4400020F7B0000EC02247B0000F002397B0051 +:109C540000F4024E7B0000F802637B0000FC0278F3 +:109C64007B000000038D7B00000403A27B0000083E +:109C740003B77B00000C03CC7B00001003E17B00E6 +:109C8400001403F67B000018030B7C00001C032067 +:109C94007C00002003357C000024034A7C0000285B +:109CA400035F7C00002C03747C00003003897C007B +:109CB4000034039E7C00003803B37C00003C03C8DE +:109CC4007C00004003DD7C00004403F27C0000487B +:109CD40003077D00004C031C7D00005003317D0010 +:109CE400005403467D000058035B7D00005C037054 +:109CF4007D00006003857D000064039A7D00006898 +:109D040003AF7D00006C03C47D00007003D97D00A7 +:109D1400007403EE7D00007803037E00007C0318CA +:109D24007E000080032D7E00008403427E000088B4 +:109D340003577E00008C036C7E00009003817E003C +:109D4400009403967E00009803AB7E00009C03C041 +:109D54007E0000A003D57E0000A403EA7E0000A8D4 +:109D640003FF7E0000AC03147F0000B003297F00D2 +:109D740000B4033E7F0000B803537F0000BC0368B7 +:109D84007F0000C0037D7F0000C403927F0000C8F1 +:109D940003A77F0000CC03BC7F0000D003D17F0069 +:109DA40000D403E67F0000D803FB7F0000DC03102F +:109DB400800000E00325800000E4033A800000E80E +:109DC400034F800000EC0364800000F003798000FE +:109DD40000F4038E800000F803A3800000FC03B8A5 +:109DE4008000000004CD8000000404E2800000082C +:109DF40004F78000000C040C810000100421810091 +:109E04000014043681000018044B8100001C046017 +:109E140081000020047581000024048A8100002848 +:109E2400049F8100002C04B48100003004C9810027 +:109E3400003404DE8100003804F38100003C04088F +:109E440082000040041982000044042A8200004871 +:109E5400043B8200004C044C82000050045D8200EC +:109E64000054046E82000058047F8200005C049059 +:109E74008200006004A18200006404B282000068D1 +:109E840004C48200006C04D68200007004E88200DE +:109E9400007404FA82000078040C8300007C041E21 +:109EA400830000800430830000840442830000881F +:109EB40004548300008C04668300009004788300BB +:109EC4000094048A83000098049C8300009C04AEE0 +:109ED400830000A004C0830000A404D2830000A86F +:109EE40004E4830000AC04F6830000B0040884009A +:109EF40000B4041A840000B8042C840000BC043E9E +:109F0400840000C00450840000C40462840000C8BB +:109F14000474840000CC0486840000D00498840077 +:109F240000D404AA840000D804BC840000DC04CE5D +:109F3400840000E004E0840000E404F2840000E80B +:109F44000404850000EC0416850000F00428850054 +:109F540000F4043A850000F8044C850000FC045E1B +:109F64008500000005708500000405828500000856 +:109F740005948500000C05A68500001005B8850031 +:109F8400001405CA8500001805DC8500001C05EED8 +:109F940085000020050086000024051286000028A4 +:109FA40005248600002C053686000030054886000E +:109FB4000034055A86000038056C8600003C057E96 +:109FC4008600004005908600004405A286000048F3 +:109FD40005B48600004C05C68600005005D88600EE +:109FE400005405EA8600005805FC8600005C050E56 +:109FF4008700006005208700006405328700006840 +:10A0040005448700006C05568700007005688700CA +:10A014000074057A87000078058C8700007C059E13 +:10A024008700008005B08700008405C2870000888F +:10A0340005D48700008C05E68700009005F88700AA +:10A044000094050A88000098051C8800009C052ED1 +:10A05400880000A00540880000A40552880000A8DC +:10A064000564880000AC0576880000B00588880087 +:10A0740000B4059A880000B805AC880000BC05BE91 +:10A08400880000C005D0880000C405E2880000C82C +:10A0940005F4880000CC0506890000D00519890064 +:10A0A40000D4052C890000D8053F890000DC055246 +:10A0B400890000E00565890000E40578890000E86E +:10A0C400058B890000EC059E890000F005B189002C +:10A0D40000F405C4890000F805D7890000FC05EAEE +:10A0E4008900000006FD8900000406108A000008AB +:10A0F40006238A00000C06368A00001006498A00EE +:10A104000014065C8A000018066F8A00001C068290 +:10A114008A00002006958A00002406A88A000028E8 +:10A1240006BB8A00002C06CE8A00003006E18A00B5 +:10A13400003406F48A00003806078B00003C061A37 +:10A144008B000040062D8B00004406408B00004825 +:10A1540006538B00004C06668B00005006798B007A +:10A164000054068C8B000058069F8B00005C06B2DE +:10A174008B00006006C58B00006406D88B00006865 +:10A1840006EB8B00006C06FE8B00007006118C0041 +:10A19400007406248C00007806378C00007C064A84 +:10A1A4008C000080065D8C00008406708C000088A2 +:10A1B40006838C00008C06968C00009006A98C0007 +:10A1C400009406BC8C00009806CF8C00009C06E22C +:10A1D4008C0000A006F58C0000A406088D0000A8E1 +:10A1E400061B8D0000AC062E8D0000B006418D00CC +:10A1F40000B406548D0000B806678D0000BC067AD2 +:10A204008D0000C0068D8D0000C406A08D0000C81E +:10A2140006B38D0000CC06C68D0000D006D98D0093 +:10A2240000D406EC8D0000D806FF8D0000DC061279 +:10A234008E0000E006258E0000E406388E0000E85B +:10A24400064B8E0000EC065E8E0000F006718E0058 +:10A2540000F406848E0000F806978E0000FC06AA1F +:10A264008E00000007BD8E00000407D08E00000899 +:10A2740007E38E00000C07F68E00001007098F001C +:10A284000014071C8F000018072F8F00001C0742C2 +:10A294008F00002007558F00002407688F000028D6 +:10A2A400077B8F00002C078E8F00003007A18F00E2 +:10A2B400003407B48F00003807C78F00003C07DA6A +:10A2C4008F00004007ED8F00004407009000004815 +:10A2D40007139000004C07269000005007399000A7 +:10A2E4000054074C90000058075F9000005C077210 +:10A2F4009000006007859000006407989000006853 +:10A3040007AB9000006C07BE9000007007D190006E +:10A31400007407E49000007807F79000007C070AB7 +:10A3240091000080071D910000840730910000888F +:10A3340007439100008C0756910000900769910033 +:10A344000094077C91000098078F9100009C07A25D +:10A35400910000A007B5910000A407C8910000A8CF +:10A3640007DB910000AC07EE910000B007019200FA +:10A3740000B40714920000B80727920000BC073A03 +:10A38400920000C0074D920000C40760920000C80C +:10A394000773920000CC0786920000D007999200C0 +:10A3A40000D407AC920000D807BF920000DC07D2AB +:10A3B400920000E007E5920000E407F8920000E84C +:10A3C400070B930000EC071E930000F00731930085 +:10A3D40000F40744930000F80757930000FC076A51 +:10A3E40093000000087D9300000408909300000887 +:10A3F40008A39300000C08B69300001008C993004A +:10A40400001408DC9300001808EF9300001C0802F5 +:10A4140094000020081594000024082894000028C3 +:10A42400083B9400002C084E94000030086194000E +:10A434000034087494000038088794000001020274 +:04A444000303030308 +:10A44800613D00006059000001000000FFFFFFFFB0 +:10A45800851A000000000000AB4200000000000068 +:10A4680000000000000004200000000000C20100FD +:10A478000000000000000000010000000060004033 +:10A48800010100000060004001020000006000407F +:10A4980000C20100000000000000000001000000F0 +:10A4A800005000400101000000500040010200007F +:10A4B8000050004000C20100000000000000000041 +:10A4C8000100000000400040010100000040004081 +:10A4D800010200000040004002000000FFFFFFFFF3 +:0AA4E800A0000020A00000200400E6 +:10A4F200000000000000000000000000000000005A +:0EA5020000000000000000000000000000004B +:10A51000C8000020C800002000000000000000006B +:04A520000E00000029 +:04A5240015E015E049 +:0400000300001EB12A +:00000001FF diff --git a/tests/fixtures/smp-server/zephyr_f33aa2bc4a43_smp_server_fa39f8c2_mps2_an385_serial_recovery_raw_cobs.signed.bin b/tests/fixtures/smp-server/zephyr_f33aa2bc4a43_smp_server_fa39f8c2_mps2_an385_serial_recovery_raw_cobs.signed.bin new file mode 100644 index 0000000000000000000000000000000000000000..77bc22916db71a55a3125356d4127cc995492a20 GIT binary patch literal 132504 zcmeFZdwdi{)<0a`J+~w?$>ah|EUM%IQC2sC zuHmMju0*0P5M2>;my1d!7#{-0;N8`Ae=}T^fGlxQnh-A?0#0Wp$^5?6lc@VV&;IfL z_5Sg`@Tqi9bzROmb?VePr%u&PhkKqQB$FpBA=Mm9c=G@M`~MOJ>K2XRznhoIH_yuC z+wuHm`tNk;oge*9^XDzh`*s`Q%Vjb{*I{TQj*PZdcrTYD zxkUce;n%ti#(O$7{~%*y&Jt(ZSt38AoKrL%=Q>%trm=cvp=){942C$<@nzL7zC`oq zyDGYhxayhFCz0>?A0>YNHuo3bhUzV7aRa_6RDdWi3YGC^sN_k%s8v0)dM0TzD~vNy zVWu+Kj<%hypx>WXJ(ClV7!vu|xDj5DuoQ1N#_P&yt?Mf` z()aNpuBWxI=(5rHR$=+&VRPOJ4=8(^;=`7|8^Wa5Zp4?O9VL$TE{mZ%GC^~EM+w`$ zx0_|1#e2G9xI^KAzW8uPzA;SXmz#<&bH%${DedD@jop!a&GB6>w*A#^mK#@`nO1a} zEga<|_P)Z2-qqgLOY&nb;ha<IOcR}TWd4Bi;lD``g8W#XzUS=_$gf@}HS>WXtq>cx~ zF{ODzBzVg}jW18gER6)`4$SpAgnWUqT2bn&{#CMu#5PjiD-ja}< z#wonM-u&|E- zo?pkHr&s&mlt>#{Iz~$|>0Fz|hmiV_bPr|mwcp=BM&Ws5Gn19-$rhM;jn(2wEhW#I zWm||FHDZ?jj7^-U*Z7CK#|pe)mMRnXixcGuA}6snjf=RqP@s>p9k` zY3Hmaw*h${E4o>~=7}{$J~ptYlF8q*JSg=&kj0<*G>aD#$M6N3F?{Urv-koshQA)q zSxBJujLiZ$NX8O*W35(XYz`qoPVQwOJ?PuViup3jr3R*zvf{0JlmEBE=Ef>vO4(!RMV5>vRj4e;?<#)=vdc(=+ z`;W>5AzDuC9jftbWlY*o**lc?^f7~FI~1D`tu?=Q;$W?ny{!UxWgQQC1wf;{NQP#% zG(m3fBfOz?0KenioKWXtPng_wu0;H``Reh@=&pCgo``eL_r;ZNa7}Duc*57a3b1lj z&t#Cy0+s!jDzf;c?O8nKkzfA9Sd=$3l7kxI3E>N+Zda&cZADoNS0mKa){w3ZgfG6M zgg?EjOA{9>Gu&Tl!YeM+knzSgtco$niJ4lF>`Rl`gb{(3Zjz7^2(L`{-3C5dvvT{) z+d-wfZ&dNxT9V-a_xt;pTt{(SHxqY4`lRO=7hZ0!Il7{O99>=^PF-=dO4GH039lqr zJ=WLWF2onpHb?rO5OxUXmB#hySi2S~c0wG6wnDVFukQ=xnOr8<@l4V^&ivKcXLzVEPM_WI&3bQe<{3==fn!@L9_JAj+ z6MOm9q(TYDQ1$FxFQgUSFgDZx~`QZnvh;7XZ zV8uR>I%RpRtYOzK4|&=AHC2;WKJKbGQBl)dMMr4u3Qw`6jo8jM8QRJ(FJj5qLis># znyg7kX`3MsYen@-)&HudBiB+H#^`BBMSdK8@MzUvs_oTlt7Zrl)l*llS$Uya-@S;? z@48XPu6$fOW#!Szf|XpCi#q^0`$eb8{_tAGzhef?=Rj3?$IQee!@}3ua@@ll+-BrgtsfUN+09zlM?ijrO6nXg-RAV>Wu_z z23SF|9E~Fg6GR2I-FI^T| z-)rs&iTC*qqeR?k!(a)F7|V1KgF!LVGRm4NHlLZWX2oJ@N+rquB0x)DMQMgT-h?^? ztr{H@yv2rY*07?ODCUf1q0I`5+Fwb;`YXufaWz@|$J`h`A5RS-j75pf1-CUmrp(Nx zoSJ`#^6mB#+i~@mV(~JdOn9ZfdnVaFlQ`1O#(T8IN5KPzwgzEL%Odd1^bwSa*!%#+BNe@c^t;)`0rb&>X++pH0O=t(@9k{Hx?)MAK+)O_6`w_iJ@M`XrR#dB2k|i;H%9ML=*eQi=JU zATJ47T4D#=BmCD=ihRpp4PS`+sRlHzw%X^m6UWLd^z%rwNf;M+TpZ!q>2jP-k*5vT z*d9vu6uQ_j*F$w?tZa-Zu=PYfri>Lt^pzC?9*_Qv#|yy0FnbgJK01gA;h}T4Qs_fc zi%|qT=SUc&YrWX2$Ru!O)C$HvHU9k~|~K3mW+!y;Ra>h7#p@p*~3h?Q%Mm zqQWb8uP(0CR(>^tne??~MmJ&DoG06eow0wN_K~<8zsXpgpzn^{IOoi&s~=UDU;P;C zHE*F`BEf(5W_rryY4Kc`6o1}HHk4n!@X!vSLf~>(VPabhze;Awo1(V(!*G24zHt19 z@nP<+!YlWT+QIKJ#D_KcQ;UCnT}hFae~8H~Hb8eS7-7-zB2 zb?Jfa7NZ-makZ8>cLko%ix^Nc(cEPuGrDw4>m_BwAY{TJsd^w1@l9dLGumsB+Ib8y zH%Ee7A|#Uq75)^86WFrixl|i5w~{s^7K-ZT(Vq3z={!TKS$=??4>0!n`&`q?! z=XV)r{$?re(rJ!$l9b_POqjE8@M6trCE4LKC_f`Dn6rJIMyZGPW~}!@H*2F~Np86Fee%i9sfK1E z|ChpmD`Uz~!Zu^M0Z%qR)~he$mdAQ^?&P160r3C$hb+DhfWBc!(!Ri@RD?3)9`e!*KIdP){4cHVF{&r`9SM=7sD?JKIw&C6K6e49dc z9qG(TKCcnb_wRCHXefB(|K)7@HFnPB^9OwME3hyh1 zU3thGCht(Dj3@r;7H3UzONB^l&>pT=rt|-hZqF!LKC0$XZ>LmLGsPL_CwBYte=nD= z>=KVi&YDY2YoKBbvP&#a(&QGtPBsC)_X;wZ4k#-{+N)iXJpX@NvqP0 zopoL@?)s;+3pA!U{|<@qEKqn-J@aG8M?*6w7zC$J13o5lDeMe`D$&9i!)GuC=4Q<- zJGh1ePOZI+-Ck{OT?$+&Zulm|L59r51Hi%6vMQbLYo|TO4RqIjtNy}D4R(uCs^|K6f-f)o<)vXoc zk_Vlj+Y&L^N3DnLGtCpb)$ydbQFt|FbgkH=aGne=l_?vs9=-uw>(Cyt$GgqV$<-z| zES-Cky+&9W$ynLfMk2wlB1C?$H`WtdW)Yr1U*^`dw54KFA~V5uuQ~skbUW}KffB640 za!0^XV>Z9j^RAxA&xbzjSwEZ=$oMb)#Bt^%c_pLvq(pdX zPf-4#bSl6Y)3F}nyXt1s?6Eb=TNpkPTs;ssD-I*70|sjRfKc4u{Tbki}qywE`5 zocJC1kkWmq4PvFMqydo6AJ7P;hstHG0lHocC*K!I^Q61e7bSc1eRvaNob0(&@Z1W8 zWLe6KF~=go&-*okr3G@e0BLe0cymN2I9i%p5=vcyM=;92RVE3Y($M#ll2dG`O!rZn zE|K!tq*m9p6PG0I?2u%@I`s^2qxexiro2aCOl}^55&l3Kj&WV>!^*$$=aoMa)I~N9 z>JBXAM?9b;&R&0M3*{eUDRdA!)qhO#Z+pL&VjSNF^q4(Q_3BDl*!1SYIJvKl_DAVK z`yQG@=4PD->j~&(6?SpGDzv2DJRN2sMXON_z{ zZ;Z#_jwx+OJ8RhCBJjwuB9mv6^{fk;eW9Xp_NeoVmOqBJlxE1W%-Hf+&)M{IhF4u& z02G_Z3rg#+l!=6gZ(<!efYyoz{gLH0ggng+IV!N5x%TlT*)qOmzx$AhsnB!d6 z2VBO3Z@C<8(*(UOWzMlC0!!dlB`bG*p&d5826(J5OfDi;&Snp>GLiLUor~?}*n&1j z7?piBV26Jpu1G+QcO;Ve8G3@3mZ)nr|(XQ9q@kC zso(LDl37RUKT`~ipDCJM`tA(QEffm9VkB6kG+raCIDtPw{Swr^9O1tk_T_0sW7ZtV znw=)R*QuRXcqMXg`*PTs_oi;Ns#YeoF+G?)M+; zmuPFzwj#k>F;Bmfz61?&v7S;p<~7J$N{7c9wZgeh^U8CbNozI>Dbz~$nXOZW#RB0! zgO2o>lCmov8a2g~5fV;}9K>{jA9$^1t!ZvO^^cXu%dfXhhHeDz;Iy({^ED~HydkCd za$#oiW!*v@U@;70#yuSg#`kN5Lf>>B?T6bz`!VOn%cDXb!3O?x2t#c;+tjzMq>aM9 z3a}T7ypQu7ODpWz8XfiA=-9@;!8LOS7GQ3{169h@b8__n+jzU8>EhtWCvD%wWbvQq zv?rg?&1z%IxUxv_VjIoB2EFR9XqVFBiN+nm3(BI}5e?9i>P?`FWl!3Rx^3Eesw)t= zt#+eF4=+TrV#qbr>#x?Xj;W8A8(_l{$HRVJco?l7g#=WsJ^u)~IN^5zIwm#9KN!&! z>*0M_;CsNs3kwtnf4}GcGLmg*O9LnDiqO`GQ!g7hi|UslP6GeQZwJfXgBG5`s;z5q z`qI#16@EV&(W<@`li$!loWJ$oRd$!>aJL42iB!RjGLhi@D6yh+Qn9`v-DeY)m&MD& z!djFia$W5?C8ch%(9&&A;Nh1jm(4L`3|;%0UGu*rWAafyP2u=k(9iq`G^X*h{rBoQ zNRoNTDT~Z0$rrxEdRLBLuE_V2PS_~T_E<#Xc)~x+15IFUx(K_;*c|S;2CJvL{Oa-w z5>C7&F08%g3-??>-T)U)N+jV?xA?++Jv5(MN5*h+A~flz!QtObMcXNn3JEmPu9vPa zdj_5qCZR+yw&j#gDt!j4>3Edj03Gz>F}#q6Uws4lD%`xV8@mF_oQ}5fwsFXp2Ph6E z|9vVBJaVJ~A8@#IniodmSI5BjlD6TK;zQV>(AGb4wfZ0(@mPOYuQ|mFvF&0 zF`_X872*V;5_4t=<~@sF=~!Kth#Gtg_p`94Nt=6n7T@=27T~;ew_CQv|%LQ;%^e^ly*TM zr*H?GH-N&#dA;A?sd<2{IuyQgjSUZ*bd!&Wx1?ta&nTH@OL2<)Xzw1eL$rxE7dwmB ziL=E#VK4R@yuQ(@S6T}nyHgnHCeOvo6Z#zj*C@AMs9e%wuiPyr7u%N;`yMaJx*{#O z{cO>KTbN0E(9#R8;E4`#ooE_ttJG&iTZ{GQ{Z7H?W~}it*WWHp5H3`{B=Vp+Y!t`m zehy`p=s)vo+)m+J(1WgRIcu``c}TxOqIQH_9``*V8icdxhZEn#EX536vBEbFE#0B#{7w~~roL6OiExzvHyndytjk~We&glDD#5m{ueVfGo^5%#Qjx|(U(UnaiI)=w48DrWbo8YaEE6Ru zsT6f{f`OnkRAQi?IQ|v5AQ{y!hBmD2(pqszWt@-pqgu%n8*Q&daiKakO&xe|=QCBF z&|@~nVAnOyOU8_X74lHs?2?2NqdX(UO^0q#EKe3-eP;GsZi<&b?l&L$yd~x6cwtn> zDTUNVzr@RL_0RPUZ&}zfUeI+ATcMB#$eRGywSZ;PX^CmDdohOx^Z$bUbAi_?{c3)@ zl#5wIIg7OY5;o8cHa~Q;nPkj)Wmg^2uA2nMtXUbEf+fU`+mkzq#59F$v_7F|!6ME?cq`3xBzz`kfImx#e;!3rceEHZuLe zw=eF9h>*+vy@$#J!=6NcgkD)z7v%$)GIOHxyABNUO>_h$+Qm`4GH@jAd zwKDq;i%dNuzueDRQ{5jnIRH;FTA1aFwm1xRr{Op4MQ+uMk8P*>s}8}8{M-mFy&}S7 z{vg#rqh8a?jxwB~U)PE;_|8Y*4c2@mLZF3R#i24q{>k_EdP z@~g=1dD2CH8L*ceFCQH^*%@oc$l9Ojjn75N`aN3=)(m`keL%O5hj%JY{;$yP-*N)k zMt6sY6xT+pVzG4?gyM$mq;oHCGR#_<+7yY| zUw*ZAUP5V-e0bp3_L!Z_v+rK3o#!b^k0V*SdVE{JgJ(6#fM9~bs`Y5yM zE2h9#n6BuAxzx7}nkIsN(*R$Rh8L(lnk1Kp3w#x#(aqv(yga_2WOhUHC&^R7@Y90R zNgb_6>CX3mEot1B!OOjXFCH-DBHfNe?X|6#iOk;3!qY;m%=IxZ8mu{PeOKWKDiOJU z=Fe}txD$j=pexGONutT;tjTZ57jmtcZg#Ixez}i*?Ql1npoeDL4vRfmX8H{+{0$c* zCq|tY=-lk+qi_X7Y3?+S!Ake6lOcyJ_;RAJr;<1&|45PKeC>C_@AQ?Q)}k}?gT4cF zwTg9$3re)7X)fitBYl2}zAsTU)8p{FsgL?z=sc|hK0A?KM0yNq9g-gDWh82!?!q(J zoLr+5rZ^Me?MVqN%&=o`VQhez7z@e4>@&*0>0@?s!fscA*Wx$VG`3804sVAH>4=3j zK)?U0k9q#E_f=PnpVrg`MmP-Z3DD?rL92V9(+z{Xlv|mJ$EBebZ|-9nYP@?~vOle6 zO7?ewsSc)HDhl#=L=Y#lA1y49ioeUqAObrIBrary_>soz6L#&&vH#ac#i4BOWt50g+(0jamEc_SH z>Ne0wM7kg8&q&QkR7ZcNQMZrb2ZGk#xP3ZM>tHAjt!e6wXql@wHR#c1Jlaf9+cXch z`CORrDe!iZHrh^3XU~ij?1Sl5dFO?^`#em!S|{-Bv5sigC@$;1%eH*KY;IC zg6*_9C(+O6B>4?FNrC*DvrWWifNUib3J}#4FIS)!QwN{*FDZX>Lz67!Lx(Lu8_D=~ zOPKNt^`Xk^%(f1ZSdB8%7f)9`Mx*u0`D zXrkGW#b1wH9#MmBfWa{U6^uR04%a0ide%(7xD1+B+wtFDRhKe%u zfy#`cfE)Z#0M0OlEgh>J>Hgn4#`>2#k^<+Il$Xp_XoiI9KZ|;q2G~u`fBKP=JAJTD zPl)26qc}WvUio?#`Kf#%%2R9bL$&-w_eJTv^8PQr=i)p3waz!y?>X+zr4<=WV4VA~ zv@GKkRv5r#bC#BR;F=tloOE2z1GEzXP4roM81I?&cFR@z;>R1Y&E_ zs`HBTi(M9T_7CmmaW4(}W5&XRULdf*V05o}(#u^jnm2rZaeaS!tiT?qPM4(E&D)yN zs*_?DSD%++#dmx3M z<5}IDFo&+p`89byr;o9=UaBsnQfk?e4e(m!SLZ|jz%CtfZVfT^{AyV9&~>W|i7j6K zJND+5!H0es?PP6?$^$Lzi1W&~wNvM8wY&xI0p*qL(5B!)m}<$k2NIpu02woB7FKe2 zGbXw>E5wWSA8R3v$U7X#^;l|%<3iwiw_QvWHO}#08hmzdqBmLQnCk;cVzQWiB-wjH z+S8rO#$=;*uBP2C^X!Z%+HB3~JkjP}u#m~i^X7}J^X&lD1xA$`<NGDFeCG5kl;5*H_P+@iMITFw ztP?xkp|q6s2Y>86))LdLi6J(uVk8l}E~gN^mh4FsEMA&}`QMx9Ni4H?X}nb&w0Ig# zV6Vw>eiNvG%>0+1Y6XR=-YE9^F*hj=6n2V7CGfZ#iNa5DnLIv|UxnWsbnYoOQcwL! zTq%)T2M8b4xUtU(yNB*M(%@#aMxGmn4+A`7E@a&F_oXA`(Wv~=!S9>^joMIa zZP}|7o1>D&g1wskk;BT(b2Y^;H|3-~8@_t2KrqR>kXM}hTGQeTl;sbFuU*lGlkzju z8k$~iTG^t*iWcLEb(23)3)PCf1huspj7$zs73f#$4>{UT{Yc+KFOCNc)L*wjJfYN1 zXwY$|*s{V(lk9?bcoBSf6n>Lj8`&c=Lc`tBon>NU)XG=<`!>dB=}{7 zjDZv^Xc7(ylMp?%OQdaNL{Pf0w;J$J5CJAuhw z=}&gveVW?7*#YW_j)iABL0+$<*msMG`@9oOT^xy*U+$%GX-5AJB{6rvX$WW=#_VUi zHn8)Rh2vs4!N9u({rRdLu>0`v0KUR)a{Lz*Y&Oubvs~% zZp-sAV`BrQzDm^|jf1|Y$69@zs(VqN^8|l^$jE;PZTH>fdqp%omodrsdcr>vKFAlH zh@FT8y9Su7i_((86~C+RpYX@Nr|w5jK|Nz1>xco2$#c8iBYe782gsc@ewf;FBgVg?hmCy zzSo64BK+aIxb6(&+lWVc73rUlD1S#fAm+EMd}zR_X?qslA==g{MRV*e(9Yn0T`;~* z%O`wDOXqv<67~sPhqj@@hdH6{8E^p#?ITww9MobB*VgAqd&KmW$-cAD7rzbIJ&cvq z^Fm?+U6=3eLyW--b;`KhSGr=gM}6f#M((Rqa?FvjmbO^o1w@G^7r)?&Yk#kjY9Z7< zTm-&}1m_G;y{J@zUre4quuC+_MFV@p#QkH1hAOt}ahC4rYr#b(dFlYw2TbzxfjlV% zeD6ToLiryyw1DURNOQNqSB7Ub_*-V|1ApbK{ME+V5Qh9hLF& z?0#mv7V%)wGIaioP|NJ@--EqgySi#noq+|cL|zDsHeRj|?GXImfy8UO9rJNH5}mKC&8&KD)9&9Op1u2M zi%GttpU&Zp6V7VlPI1_QrMBEh;a%b?*skQ76)pb`a8vn1l- z^B(5Lk}Gd+IDaV-QRg>sv$;1olk>Q;F=>WB7AGC7a)gO-zKh>0{f^Ug7st8IfWJG| z?-q|MwMkp`h26Gw%+%pda%I%I^Out4HQcLgBfFRV9rrgjgNgqCj1A!ZB2w32-gj(2 z-r~4)=T!eAXzvf}_jL2@9oZ*NN3qTC2aM)nU;VAg>Z8#7t?3EZ2Lbw4(W7T5JgKWp0~?!144)T}HrFNd$vBq#NEzz6tLKmC4>$~%0-jd6_x@9zIV*~?y& z7}QyO|GOQ#L_ehPpY`wc6vh;GAFZW4-P5;A-1IQXDU=V@HiBy+fbn&_E#^tLmm$|0 ztCQqyp!p%>Bo}W`yz_R6_&WC%pSJi}W!YRlhsc|2V{X#WxW6nWi`HO;bLWRG0?b%X0A7-3b$=$~3*`{@-InfZ6y|~| z)B0|NuEW)N5LKPDpGHc)7iQq!FA6Z@S3quzqw<(5z+U0PyG?RdA1n~mvi5CqY5m!0 z+nOd@=nQ!wq+*-P71t}?TpnXcu_ncQio$P$Ey_YV__ZSExTh6R(gs# zgGh2BmxT2~=~2odOI1nnUjHxZy#-nL0EJ?Ac(PC{{7kXz@Oq)61z%VH*|o<{#=qqM z3(oLtYtnZa7z#~%XuC8W`(rec&m?aN^FEgl-Nkz^d>c;DP>aAN+$LCH!kL^+lCs|?2cB+Es!hA%s7qpe|9WgUP1ziEp;W@_HGHV z+{;XO+|?auf>(Kh@LZE5QJ#2IcdN4SEi#5;F+J=P)(bZZjp|-^(taX;7~+J}EzJ15 zpT-^3GMcc~?-q4{*db(0Ao8J*7P_)Y9vyzvHT^1gaDDo=rhTd5i|OKg6$chLjKDat z4Hk@4UtcLksuUw-Xq!pLsh7Ed#u&dZadnUUXga9dN#R;gSNvC_9N7~(D(nXSY~5~X zSi8mB2K)Veh(`N!B8_^F@fZ0lpeMVNQmiAyH4sOq-;HQfI-f1DEg8dCswAkv8cXE! zeZLq-VDwICvS8X@i$zomp8ChQOz)2|J_Mi zMp9N?gf~I{M`We?d?!MGX(CbGZ6Fk#VLMQ3=fg}k8{lj^@4po#Bf-D)%~xw2iOdAncLJ>kz-Gnc7rreUzJ7m%|=&52+yiO4tgO}a=hyG(LTDEA^`?UgzzH;CyEGEO!S zFPHU>xkz=4%-5~L{Cl7u_Ks59zek1aL~j(Lxxg?Id@^LlHzLP|qq!v^!^I_Ng|#oZ zpQF&&>h!u(E1Y^7fs{vkguMXSocqmP&Jc92Ylw=UcYk!f*#a7gujWlncTWHD;%m%H z^Ax*G+I-V8`BtO=(kn>4H~v3Mf0~-f{}E{cQYsRyzi+Ue=Kt2-JNV53atdevz@Bf0 z-sOQ8)OU51lNgy{)*-D|^9J=4!2aZG!(m0OhhA|fbc!mZ6RNJ?94a^p>~BE2ahFJS z5@OR+&&Y2Qv4+u={!hIcj0PedWfR7m#s`>W1L(_IWAMg>yx`I$m7H(8suw)edsbo_ z{m?hGd6|4(63%ty!yk^m3|894>!@k4(l+*~Z?uh<)i*ufUc?)*>fA)0i#=R(tMRcc z-i@>msUK-OVg;!G4N*ekX4p_Kub|Ojn;XgaszCWw=Y4tbUuI*Cpm-$8Ho#A=WmPk_ zL?ID-DSIkuT+%4-F7d9O_1dVGbX=K>5$A<7k6GwS{+JaQuLNh#5Z+U2=X*t~n-fQh zc6IOja0^|z)9$COTC4x+!|FK0B>R*-V*E~GU3@2{1dTh?3X7n3o8&JM&1_KpM$pPo z@_^EbecV`v#_J753X>JsM_2%Qm*_p3XJh12*j})-*yU9*^6-IwN{9l`o|Q&|j@=l4 zN=JJ3ixG6CjQl{Ky)yklJNlw}o=JZE2-WktlcRPVBI5-eBE*dH)4l&*?g6zNjm?Ob zje|v6+A^Zd;+~&&sB2q-_Bgn^5GU(e*Nd?&B(qmaDtp|OaDx6d9^d_tRj|n%yZd+R zMT?Lm*3Gm-zn21+r8s^cFFg2H?A7-*hx^7-DL+iaM@t7Iz&Ke_W_fN9v{ zx}bVPzxJP(X#Bs@JRCfc<&FcN!LyYGO}O`<%iK;qI;(Hz!DV;%GLy_XCV!RwN`U5O zAa6zQx2nH74ev`4KS}c~c)zumWVO169bbLB!Adp7WjKjE-cCK=Cb@L5ot66U)OILW z-`p#ybtyL&pdC6kN}<6@f9JM*1pfVHJj_u1%Ri7$_4!}grQ>+ zv7=01#`|6Nbz%TI@D`on6v@`Wfr@E(K{inIJQiLK6NsD0D4G1)lYZ5Dqh%1&j3f#%4K5sT%tZmYKKre%rG`q z7;$=oSg*LuPrH)*8x$AlV92JF(E4}iVoqsQ|HP|DsjbDS?|(U3J@Yj1yC1YEz>-K8nic^Jsh%Pn=(0MBP@zebKT+@y})$~Hsf%Jx^MH%H8$J3bN0!WoJ zk=^3G=}pkow=~5S@5Yl#6WVG_Q*tq}fdafqelr|}gj$tmb*(E3PX&KsjRjwHsg`X7 zc5IXb;sI?8pj80v^+y?@MH+&m)lYvZt!scgrQsj&gr5!89F6UW^}(Mqa1!S>&VYVL zl*M&R^wv``7}L4MeZiHAR(PdFwMF?oupX#vH$g|#`-c0dCi>~Xy)Kno%VU~M^6f`Q zs&M`gVs5%1&4q^LQH~&5@Q89Vzo}_&@$BN}@Rgp!;VW0_U7rf+{*sbCqW{d9ty<_f z^a~qKUXZMMcwPiv(5SRaiYdNSZ#TFPKsr|U%@!_5fR3a28ux-?lYCd->k{3&r7>X? zzhsQj9~HeBbg^j!zdq{}9VbfN$6cfSr5P_MdWs8)qns8U?W8Sw^C?P4Z)Gyh=~>#c zZ84ZZPhe#+$$t%*Ra|dDw4}L}fv3^bt!GT~jeS2#w9lxOz4PI;7S?LO$c%y>td5CZ zkI1-4a3w7IsI1)^m7#!<`ZREa^ceoAYzof}i>zPbew1 zr^UFM#rj{h#fc>Ay&iX#XETjZSk|WPN**?1QWm^OuNh);$F;#bU?ui&@J{Tw$6+U6 zEc~3eE9($#PEVpJMO2Hs=Pf2D*q$fMQ#4aq@x7iGxQd<^)p+ZwQQJtO{K!Bdb`gy7 z+c#Iy z;E5gjIR;#9;yk+$Ke zPkr}PKN*jAoMA6B%9U#C^c-3)bS{#$sd2Yx>W=3aYllevAfQiQs}fK4h;x11wZ_$? z-hg;WD#wi2|7Rvi5+o8sBjcu{O{%vU<-dZjqA^THIUDVpTkpi)0y|dUYzi!ZN06yE zdPsdTVg-zHni}H}-DALt=%)0+ek4vs>pXN{p5kCY8{bK{qW#%OWk~-Au|g}={%DLR ztwZOZUZv^&!8Itll2Wh7OW5@^w>}5DHXzB(%vg=EsnO(*!g7a)dRi$wx1+D)eTY#2 zB{!(@khZ!=ZS|2b$yz1%GL+jI!y)i0<~00}(2egKD^PF3ACyqrL0oJO!vV7Pug-M7Nu#4Z#Fk71P z1Ci{re!|m{+txIp7=Es0Bxgb(hpbny{Ijn2W2Q!u=nJtD)M=b|FSi??Z$bVplZS zUA5G?gfhs)$$)?F%!Nt}Ay~JgabGxxSjxHKT~9N~d&36xjQEq-)1zxM-J7L1ca-|i zD~Ida(ZXWA%OAk*{cqLV5%wTd)TTj|{h)_JASdzKB*I?cio z{dNA6og71NRH&##1nYk*Uy2(!tn>PUGY88r!p$8QuzOJ|B)j7f$3|PZO|SLuQS%az z_v8SR6C3!UN4r6fdqd{qMw3|FXkwlkhqaroLRlKMp4%O)?vHdK#)47|$uY zxCpt9vaC`QqJ>8BS;%i^^vI{B?Pa5p-xV6ok4AnvNAqdjX)+8SdW%7D=eHG5|7OlFRTvWfp z+&YqP0S{4HJqX&6??}hfc)pDEHqw_!OdaB)krd#j6YQc1ql#E>6~AqvZ1i(pS2hUm zb!D08=dn;CpNafbXn;}tY-OX6zc!S_k19V})u2yBK81H=8QsHO6S+%pu zB}dquD+o?DDy?Sz=pb$a;HS7P#d9mtZlohfek7$i?-zJoui`Z(G@jz6nKy`+v&@0M z(nBM72gOS}gx8od8}buE7T!kj(hlKeEz3YY7dlGu()^59hI=^h$_8G;DPC6z#voN4 z!#mVAe;&hcdefp~sOJAXhV8xS>KGPXeFSx*cn;?e4dVF&@S%8WpN`@=9M9{KijkHf zQT~3s@qV0Lgf?4CvdF=YdknfE4U&}~DLT~sNO^34m5rRiIV`ZUl*Zz-{wnB!&%>%8 zhlt+ry*;C1u!FR__WUJIj(z4&b-U=lok{vxZAO8~`cArIPCiZ_aQ-{Waxn*Ldug3T zo-LQPhrR1R%yj<%WXg9A<|-o@7l8R@qyz_Y_>B%d(-;u&=aP+ z3qbjM`s`xp!80wGyEse78z&&%d%0+s$i4gPlHo!yu%?RS-0FX~$G})yR$ZQNTXorm zTURW&{lS2{9`5URM9<=_1HU!dd<@?^lAf!L@7P(DboG&PaITv3`GB^gq3Y1J+UZZ> ztnIaaPCz^yz97OJf4`T8gQ|=5wf^+7hooe@FVRoGy5^w8ZMmvEatZQvgsQDn3B$|G zH$%2258XhM?9o3rbO%i$q~@#P4}{yLRXqmwRg6C!cRG(>!8rSoBqRgu!r@4hkme!% z9(hk9-H&$-!VxqcP*pawi$28vu-Q?>52D&8SYkN}E z`$dvUYkLfv37=SI@Y2!1-i*TIYvN{8X}P?gfgUs8B>zE)EydfsLQ8E=%;q0@Qfgrz z77evw!aaI~(E9_QL4P#%m$sxW(|JA-*{dBZl8Zi#w%yi0h?|Clv;?<5>B<619gpZ5 zTfK{%t)BS~ZdZ9n*+rQAA0-OAq4~Zy3GPBk-i$L`5o!%3d*GMk-%~asZAN+$sSfEG zr0q!0Bh^~*9ceStlSp+)&me6_dfvL?%^|MCjT2vyj#03ZjctQes$Ex^h#PCzu@OI| z7v{Y}=~dW7Z*5`hGh(pH%A?7KLYHF2Swvc&exq8}t8Lh!EYx|*FV9H)ThoCya&0-* zqy$o{kmS^b)iYCokJh7e+vUO{yZi`OuhN8aKiXk&?&tlOf*Un$;U0h|mN?eOqB*<_4R2JS+XcoD|Tnz4e zvi6cZn(|fjRvTkEG@rZNm5+OG_8wPWB{8#jJR1qIzYClw_p#l%qz-kS1QyjZY5y9~ zhr$cotz7B57A7Adsh};r1Cfpcy(vb!LFYD4WxL*E<}3N6Ox&z$29aPr^ntp&u>O@2 zoLD1-w!`401M8;IOtpuJJe?;5=fmz*bqYkn`v>`wnS#5z+T&IIgr2W5L2t=bqX`YI z$H1+zqD>ynrWMhdcMRP3I4Hv4Z5MCBnG{MhGv@J=n4@xYJp8gzTdLV*KI0V~hYtFR zMp;}Yf08OW=xXW2Nr^Z)(hJ*zHLDiKXvYujRx!@?Z2+=wA8aJ~8+eqsB7YMH4RvqC z+&w%&^1CvaNk+u;;+zTkYeIion+9{`8FelWa+xYu+Ip64MNE_WjgGAfV>364vD<1Q z!B-=EHT>SH?kE>6Exo-Al*l#0zoNH4@7mNzuDn_s37*3~QJMIRi|IBpX@OhHMPXWX zUr>flO$_UV`LpKFUNGmK5VL*=tk-ci&k4gI#^cW%*FKmATq+go3K`lp;knsc?5|35$F z7}PTBsy~#b)-d@~tM^DhOT3lz=7e0VF5sC$@F5)osQ3|Rq=|&Etla!qqaKz)3TCs} zCgKE>S)SO>+W)Aqxmw&4XvMutI4$u2Qy+u)JUwhx()I%8I_!B>N5<}ds|9?|c{FZ| zx4xzbx2n}wSI?w*A46|8G;2#^<+bo1{QLcU=fO+(R;G1ZWj&)Uou3vfe;=Z)k+$Ej z1dNzF8E9k3SH+a-l+iA2(-;WNy)AON`;J1-%cx?3O$sNMofh}3^*-jiVf>+b# zQW;OrjzWh;dvq^@`VAt%;}NUCm4``ix0PvKzeej}!fbw8RrbX6E`e zxJLpd&Q_l2WHOE3VL0J*A)*PBxdpAX4E2|7!ufjw2dUBE8v(+$=Y2Cdh3w|&P-PuZR zUpn^d(5`*&Oz-mQqtqXE-JH1#z?mNG7~l>ddHE&e%zoeI3^@R;XD2uQhjiHQg3s zmOH~0m09aAcrQy7@5xVHC{UV7X6Bg0*`!5johi~gQ%JXgoqvf;zipK363L(ucEP~e zCdNs>eH+-Y=6x^jmReBkZKzDf&T4`1l@tl`kr2j_wrTLN!fj%rFIC*^()&+~xxO8u zru1=~z@n#<=`9eX%>f?DMWP;L%7g(x6i-WsDnEuzd=7h@3^^-( zi}^z1`>9vfC|G@QHP<_tfTyOSWd>G<+o8D^!Y`La&qb(bYpA{I5=r*m0cLL`xHD4f zyAkDMTV@Zo?L?g* zBK?gTzqF*%(~>#Z))?e>A%BzReaI)qu*w^*vkkwA zO7H8^`1>e*_WQ$?1U}Uzm9*@hGx4w{7Q-q`Dzm|hVU%0KOvBmAvp8FG0rxU(pUI9o z59?tGP7KGDaiw2?G6|Z^_&ZXwNjk}m;Ukbm$@Mskf^-|wgGf&y?MEtTE`~q%Zr=s8 zw-!9385MIz57?;nqC5Pgf=&6f@+(mQPPgM`h=73RW4b%7JCnr^77!Aed{-c996G@eaQ(=vcGeR6fohWZfufm_ z&_P#CW`86Y>enM`f#O18O-JqOL0GB(9P)I+n`zAW_|rIFWh1z6duL_47{Ok6#Kz>A z5tXw^A@`n?&QuP+`zaq?bu5SzU7w*5=#5Wbo{65%KRw8YH-}EB*!Wfc`#q&8_-GrR z)L#cFd(hzfK%CujE1+2nXl?;CV<|4$*bYvt@Xba366DWC{z&8}Aoe=yCv!l81$%1+ zGfux<@6`HBQ1TA_SAL=FoFvSl`URD2xGSW8lK46Hz?!LC%X*>Z6-1gvf(!e3pC7q& z|7Bd@hCy0PMlYA4k22bXjsulNCFwY0?X27hD_}fIP`NZ7CE8IUL5n+C`wvSlp%XFd zW;q=v7_v}isb2PvE&EoQUGj-PNBl@?N7VCzmQnZ;^_OL1ZoYx~o3#JLx7^(KT1G(M zPQnd4$^Lr~-SQRg3OKLa4S%Ed9U8&%nv!9*z(%6C3V%H>9E|UK4Lc9CReA@iVQ}sq zhF6KU{8;ZHX|?!%r)~>wAgIXj{?2bLt0KFExgIM_f*zB6JKVq=Pw3Gg3tUGH+Yd$FI4as`kXzt<=j?R3pG z@Gf1G3VeCKCn_z)Yz^z7H^R`>>Kp7wF^F`acaC|X`|ZRtC(W1oTY4i^Y{V*Z zcos)+zo6ILdJ^kcEfTEKGYfO)JJ{2l$8u}+OnQSgUHk5X&zv~4XBOu!a%fI#)NgcU z9QvM$@AOWHBJ?tmFB6vW0?aCca>By@Z_WxX`v&<710<>-1$?d>wX9)5iVjE zUU#jw+9=2Nk{tF7)lW9#T)4W57NITN*dM3uk<{NCD2^1@YRG2_sfo%J_^na^#}5i4 z7>-V~@nVA97+J1z@I36{(skvef;lMC9(A%6w+}^oM1*S&cg8AeLCF_!K9*{DI44MZ z#7!d4tNmz%B5_nDZKFwvwtzFMI1d9BO~6eRCVFSKCYu(i^W0^p5J>sE;Qj zSNGE`!x!giO2fe;@MhPx?j7W<(^x;C6GI<$ptrS(R;ADNI4`0FeLhh7aJIch(L#5R z-r&u)cR-{31h!K_E3HfSLY`>URI&#(*J@X<7uI@TnPWlB;%~4=Z)ivQD)ayGbDNnn7cL4KH*uIjL&kIjFC=b`1Dt^IZndVi4WR7+hHTcZ=Js*WE?#n1 z87nSXmTfCg!a(eXWSHgJ&34Ai=A{c|IRb5+5tIW1%^p|mxU-Z}1K7vxb){fjnj(uxAccmjCHQH8W|MWNDoOA?i}%nW_TLxZP1wUuzEZL$8;@TqdcD+Q?e3 z#GaPgYZ5B*pTL_3K&{3qzVuyi=<#$lq=c*^_|-Wny6M$oqE7+Nu^6c(vm(;)eevT3 z_qIKnr}D=zr@EB0bg(QRE~a4L9aXXQ4&8-xM-(W8%HuRL@T({VI?6iauzt`vsR*7d znFXvz@dajWI^9Y7BeQ^%>710Zx5jY}8i8hb5)HzfhtN8bt3}NK>5T9!^(!dq_ zmf{b(G*yQRGHf59wTvi>u`si^s8A`6gH|f(5_(wwFV%!|$&2@?(jB*-BW+5YGqG9g0L!Thk@tOK5_=har7EkRqH1%_C#A6=S{= z$Assh^TwX^F8n`(Lj@Xp6#uJ}C+X+oFyRQ`c^B?wyZ{?69H}@M)88(x$4YPsyLqNw zn}?Q^C8@6M>YrQx>M|8tk{|esa1iu1LQ#K}teAhjx&-M7Ef38%@=D;u**8 zf#nEg>i1OLO=vU0?;v_`vbTtF@NU*YwUyt!VCOz-z!Q(1Mhx~5H+->(r~qtI&~df= zp5qtqDgW!e<3!dZze^ceJLI#Dv2E{nQJ~O~_LcTq&&pfXK&OcTIt}mUNS;7LIt*R# zpeMm?ge_Hq(C0HESCVJQcZEbf*w<8r-M%gz5*SwNx@*@%Z8Ndgm;y;h?x0!z&jt@S zhV0Y+teR%IzN8}H(ACE{?su>!YIeW^wX$Zjwn|lbY4hqGTqW^$RJb&?*Hq(vxhea?lYj8V6AW zjGxvZ((2DcS9+rNJ(f0oER|b$7j<1#p{xq_+u)zQ(#t2Gmvqk1`v-#LT_#Bb|HfQU zvNJ%BvWTBJu|v}`&?AP6UfkL3A(Uc==Ta9n_7g}LDgMP?iPfFKCW6TW}xh^c#!AbSW%_sJZ8OCT%vkk4ope2%M;_qxmE%ouc>K%OM>Z7QoSyMaKfts3CwR{z6 z6|VM-!`}M=J=zkHqy-}F%j~ym&j|jN=u6eLgt35Z#O$|J-F0-S#-dbM6UZ2kVBA1;m26Z;#pZZdFus7bItHE_TIjX=~4 zDkmJ)v*m7$T&BeXx$rS87Bn*A4F$UwAl{gx+EkD|n2&|t$wnP+Vh?@8SB~;Nyq;j! z81rhHxP2Tf>7H^Z_5n*VkEw^<^;lS3r|-eui#E^=TpefDiUU9yS=r9Mv@vnM>Glh0 z0#mI%93g%+sPsEnc#tZK1@&QWmQu=Is1<)RlIz~qOf02>{pmrfO$B*S9FRU(pg!qW*-p1NcM6&Nn7Vnm?lY&>g(3b>WVTl3X$ft->eReggg&FLf8*p|=BHEFzjPv+RT}VG z#S2b@pstQZKMoFXeu?xW!$|wr{2JDAs%kCn|2Uuu-B+okPuFM<6Q4BR&v8yz!-rv> z@JYaXBvQYre1~e%>z&0y>|yl(FpvKK$;Z`DwZLPmc?7u0+*!&L-Jvr?8m_>*?{rr< zwMVj0v321<-*^s)nYnJFrQkdj3DF&}c`|r>jNvoimp~EHW`%jkTaQD2r35Ag*$?o@ zliV901fs051QvN0B%Ph99fR*R-3=Kyp7Fs5_tEAzd<5xxCN$cw1mA8^let|7e+o#0 z@olt%*2Ci7G(6uI)VpyHmg}&*3@R<;z6tlA3a$kH88l=yVdC0g3d#W7X58N#R0&lQ zudkBS=DRGbWE{>h`1aZ$)ve?>NHI40?h-!ntx8m-Mql{)8UqyBsPL#L;^Uc3bX3S^ zUhtal7_Rz#V`^@owquOFzDQY<#ChpSDZ*W3b*`Y{7orxG!#8}hu+mcz2*$_=VE=9QAO0gtBRw#@3n)3oMATCRh z<_7;7MU7SI=ag!1ytHN>V^Vl?1qHN61O0mjHnk9&Q`4r^?YV+2PYWwfi%en67z+$` zZ`2(RdAD?)?24uw_NSzk6m7^8thpooj^SJ5iZO@A)pr@|%-n(g(gDV3Dn|*- zJr7a(JFy$0%q5O0NIc-n;bDXs_`>`Vi#+N`PN(5>8SGCSKIO}Fl-if{)ju*N*9bHi z|1daaEqzI4==PO5SOZ4U&ehrA2l7hoVdAI{GZ=QU(quj(IqaVoVU)8riB{D354qO(yaD2@|`5utfEj6C40Z znG3v)K?*eCnCu&!f0WR;1&<`_`yd0!XnhLkJ-`D*`JNecLfZX2Y|r%WF_@Vtu#d6xF*2dmFcI}vpqrUNtDNW1n3l@&yQfPC3Z4~eqXo& z82d;m_5Tx@jMVO-a+zvAf|2?WW^1s2TVNh~)`mTw zS*B{i{>=f^q&}afns}8&Wle&oQhW<#n3+2Uh*8^zAiKfLJL)rI7QQ_c>3=#R(t8Ka z6Na>hM=%$u6!sEhrafxIVc%H8WYlY`PTPxv#sh5s0lD z?SFuD#Sd@gPK@@YJ{96a{N&LXisgBCYtE55M&{sxQF=_q@vZqc6X&FTc(l(de1Cr5 z*2cMrE=N`Z*lFVW4~^@6nn@31zL2^6|Fl^h{-G$jeq_6l&< z8G_!B2p(8HQjQ2}i5TD9NMc>Nfx+2@;n+O#zic4GO(&DHUk&Jm`J}J6FA<%*$pM>L z5>XKt#;^CVyj4gt%#xbve&qrc(H#aMbYell!Y!h~m z=_Vkn4wX87lc4ZM>sLXxTU4OL-ib(BtDLFD6M<%Rk8Ql3+`sOtcPvfdyi0B4$l1Gzw*@=>r)@SQ0UIXsG!p!dE5fN+*@26hP{mml;^aE(rZOt z(! zi_x$3#pw%uVfj&xeU2-3%9vy?vX?rRV@LO`H?=q_yV`o;jLtSu&T}#PXbtGduMppQ zCH_f&Eye$>xpoiEEjY4q%)_y@RU^&}h67WS%(}t;_Xaq@;a2}#7L%aLM?@oWPEdmp zN)UU=Oly?P<^4a;DX~>=j1Zn{Vq6^NRjHuEh-2&MN(y*t#52Jn?sIZ8BQPR}MQkK? zyyM77$Lf)d)gu#B@&<665J3RGc@en!(WAn%yYTD|T=_hTIu^UNo7m&7y+mXk8F-?{ z6YO|#H5*s4xH^k(&~?Bo!1-wpk0)k4(c$VJkX=!cdf~lZY7Fs~r{$bx<4K#G)9rXq z!q=Peg_FG&lp+Ps8n7Dcg(N)d#kj8gb=_6RS1+Er2MjGAjhe

T3RIf7!YYk6(Cgh*HZ&40>IW8OE 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 literal 0 HcmV?d00001 diff --git a/tests/integration/servers.py b/tests/integration/servers.py index 6b16d63..d264a3f 100644 --- a/tests/integration/servers.py +++ b/tests/integration/servers.py @@ -40,6 +40,7 @@ from smpclient.transport import SMPTransportDisconnected from smpclient.transport.serial import ( FragmentationStrategy, + SerialFraming, SMPSerialRawTransport, SMPSerialTransport, ) @@ -304,8 +305,8 @@ class QemuSocketSerialRawTransport(SMPSerialRawTransport): `SMPSerialRawTransport` unchanged. """ - def __init__(self, url: str, mtu: int = 384) -> None: # noqa: DOC301 - super().__init__(mtu=mtu) + def __init__(self, url: str, mtu: int = 384, framing: SerialFraming | None = None) -> None: # noqa: DOC301 + super().__init__(mtu=mtu, framing=framing) self._url: Final = url @override diff --git a/tests/integration/test_image_management.py b/tests/integration/test_image_management.py index f895d86..f80914d 100644 --- a/tests/integration/test_image_management.py +++ b/tests/integration/test_image_management.py @@ -11,6 +11,7 @@ from smp import packet as smppacket from smpclient.generics import success +from smpclient.mcuboot import IMAGE_TLV, ImageInfo from smpclient.requests.image_management import ImageStatesRead from smpclient.transport.serial import SMPSerialRawTransport, SMPSerialTransport from tests.integration.conftest import ( @@ -70,7 +71,12 @@ async def test_dfu_upload(fixture: ServerFixture) -> None: assert offsets[-1] == len(image) # ran to completion (incl. SHA match) states = await cs.client.request(ImageStatesRead()) assert success(states) - assert any(not im.confirmed for im in states.images) # landed in a second slot + uploaded_hash = ( + ImageInfo.load_file(str(signed_image(fixture))).get_tlv(IMAGE_TLV.SHA256).value + ) + assert any(im.hash == uploaded_hash for im in states.images), ( + "the uploaded image's SHA256 must land in a slot" + ) else: assert ( offsets[-1] >= cap diff --git a/tests/integration/test_serial_recovery.py b/tests/integration/test_serial_recovery.py index 87f80d0..292dd4f 100644 --- a/tests/integration/test_serial_recovery.py +++ b/tests/integration/test_serial_recovery.py @@ -1,62 +1,174 @@ -"""Reset-into-bootloader (MCUboot serial recovery) integration test. +"""Reset-into-bootloader (MCUboot serial recovery) integration test, over every framing. A fully-featured app reboots into MCUboot serial recovery via `os reset -boot_mode=BOOTLOADER` (smp 4.1.0, PR #113), and the bootloader's SMP server accepts a -fragmented image upload -- the path a client uses to recover a device that can't be -updated from the app. - -Recovery advertises MCUmgr params (`CONFIG_BOOT_MGMT_MCUMGR_PARAMS`, -mcu-tools/mcuboot#2746), so the client negotiates the decoded reassembly buffer (`Auto`) -rather than being told it out of band. An explicit `BufferSize` that caps below the -advertised buffer covers the override path a client uses when it opts out of negotiation. +boot_mode=BOOTLOADER` (smp 4.1.0), and the bootloader's SMP server reassembles a +fragmented image upload -- the path a client uses to recover a device it can't update +from the app. Recovery advertises MCUmgr params (mcu-tools/mcuboot#2746), so the client +negotiates the cap rather than being told it out of band. + +One parameterized test covers every recovery transport permutation as a sum type: + +- `Console` -- SMP-over-console (base64 + length + CRC16 + line framing), negotiated via + `Auto` and, as the opt-out path, an explicit `BufferSize` capped below the buffer. The + cap is `buf_size - 4` and the message expands ~1.37x on the wire. +- `Raw` -- the unframed `[header][payload]` (`BOOT_SERIAL_RAW_PROTOCOL`, mcu-tools/mcuboot#2755). +- `RawCobs` -- raw + COBS+CRC16 framing (`BOOT_SERIAL_RAW_PROTOCOL_COBS`, intercreate/mcuboot#5). + +Both raw framings carry the whole SMP message into the server's decode buffer, so the cap +is the advertised `buf_size` itself. A full recovery upload stalls intermittently under +emulation (flash-erase latency), so each leg proves fragmented *progress* and then reads +image state to confirm the recovery img group is still coherent; byte-level upload +verification lives in `test_image_management.py`. """ from __future__ import annotations +from typing import NamedTuple + import pytest +from _pytest.mark.structures import ParameterSet from smp import packet as smppacket from typing_extensions import assert_never from smpclient.generics import success +from smpclient.requests.image_management import ImageStatesRead from smpclient.requests.os_management import MCUMgrParametersRead -from smpclient.transport.serial import Auto, BufferSize +from smpclient.transport.serial import Auto, BufferSize, Cobs, SMPSerialTransport from smpclient.transport.serial.encoded import _FRAME_OVERHEAD from tests.integration.conftest import ( RECOVERY_UPLOAD_TIMEOUT_S, assert_chunks_maximized, connected, - fixture_params, reboot_into_recovery, signed_image, upload_image, ) -from tests.integration.servers import QemuSocketSerialTransport, ServerFixture, SocketSerialEndpoint +from tests.integration.servers import ( + FIXTURES, + QemuSocketSerialRawTransport, + QemuSocketSerialTransport, + ServerFixture, + SocketSerialEndpoint, +) pytestmark = [pytest.mark.integration, pytest.mark.asyncio] -_RecoveryBuffer = Auto | BufferSize -"""How the client sizes recovery uploads: negotiate from params, or cap explicitly.""" +_SocketTransport = QemuSocketSerialTransport | QemuSocketSerialRawTransport + + +class Console(NamedTuple): + """SMP-over-console framing, sized by a fragmentation strategy.""" + + strategy: Auto | BufferSize + + +class Raw(NamedTuple): + """Unframed raw `[header][payload]`.""" -_BUFFERS = [ - pytest.param(Auto(), id="negotiated"), - pytest.param(BufferSize(buf_size=256), id="buffersize-256"), + +class RawCobs(NamedTuple): + """Raw framing wrapped in COBS+CRC16.""" + + +_Recovery = Console | Raw | RawCobs + +_VARIANTS: list[_Recovery] = [ + Console(Auto()), + Console(BufferSize(buf_size=256)), + Raw(), + RawCobs(), ] -# Only the canonical recovery image: the `serial_recovery_buf` matrix varies the app's -# netbuf but drops into the same MCUboot recovery server, so its buffers are exercised in -# app mode (echo/fs/img buffer-fill tests), not here. -@pytest.mark.parametrize("buffer", _BUFFERS) -@pytest.mark.parametrize("fixture", fixture_params(lambda f: f.config == "serial_recovery")) -async def test_upload_to_mcuboot_recovery_smp_server( - fixture: ServerFixture, buffer: _RecoveryBuffer -) -> None: +def _fixture(variant: _Recovery) -> tuple[str, str]: + """The fixture `config` and a test-id `label` for `variant`.""" + match variant: + case Console(strategy=strategy): + match strategy: + case Auto(): + return "serial_recovery", "console-negotiated" + case BufferSize(): + return "serial_recovery", "console-buffersize-256" + case _ as unreachable: + assert_never(unreachable) + case Raw(): + return "serial_recovery_raw", "raw" + case RawCobs(): + return "serial_recovery_raw_cobs", "raw-cobs" + case _ as unreachable: + assert_never(unreachable) + + +def _build_transport(variant: _Recovery, url: str) -> _SocketTransport: + match variant: + case Console(strategy=strategy): + return QemuSocketSerialTransport(url, fragmentation_strategy=strategy) + case Raw(): + return QemuSocketSerialRawTransport(url) + case RawCobs(): + return QemuSocketSerialRawTransport(url, framing=Cobs()) + case _ as unreachable: + assert_never(unreachable) + + +def _assert_negotiated_cap(variant: _Recovery, transport: _SocketTransport, advertised: int) -> int: + """Assert the negotiated message cap and the on-wire size for `variant`; return the cap.""" + match variant: + case Console(strategy=strategy): + assert isinstance(transport, SMPSerialTransport) + match strategy: + case Auto(): + cap = advertised - _FRAME_OVERHEAD + case BufferSize(buf_size=buf_size): + cap = buf_size - _FRAME_OVERHEAD + case _ as unreachable: + assert_never(unreachable) + assert transport.max_unencoded_size == cap + wire = sum(len(p) for p in smppacket.encode(bytes(cap), transport._line_length)) + assert cap < wire < 2 * cap # base64 + line framing expands the message ~1.37x + return cap + case Raw(): + assert transport.max_unencoded_size == advertised # the message is the wire + return advertised + case RawCobs(): + assert transport.max_unencoded_size == advertised + (frame,) = Cobs().encode(bytes(advertised)) + assert ( + advertised < len(frame) <= advertised + advertised // 254 + 4 + ) # COBS + CRC + 0x00 + return advertised + case _ as unreachable: + assert_never(unreachable) + + +def _recovery_params() -> list[ParameterSet]: + """One skip-aware param per permutation, pairing each variant with its fixture.""" + by_config = {fixture.config: fixture for fixture in FIXTURES} + params: list[ParameterSet] = [] + for variant in _VARIANTS: + config, label = _fixture(variant) + fixture = by_config.get(config) + if fixture is None: + params.append( + pytest.param( + variant, None, id=label, marks=pytest.mark.skip(reason=f"{config} not vendored") + ) + ) + continue + reason = fixture.unavailable_reason() + marks = [pytest.mark.skip(reason=reason)] if reason else [] + params.append(pytest.param(variant, fixture, id=f"{fixture.id}-{label}", marks=marks)) + return params + + +@pytest.mark.parametrize("variant, fixture", _recovery_params()) +async def test_upload_to_mcuboot_recovery(variant: _Recovery, fixture: ServerFixture) -> None: advertised = fixture.recovery_buf_size - assert advertised is not None, "serial_recovery fixture must advertise recovery params" + assert advertised is not None, "recovery fixture must advertise MCUmgr params" async with connected(fixture) as cs: assert isinstance(cs.endpoint, SocketSerialEndpoint) - transport = QemuSocketSerialTransport(cs.endpoint.url, fragmentation_strategy=buffer) + transport = _build_transport(variant, cs.endpoint.url) async with reboot_into_recovery(cs.client, transport, cs.endpoint.url) as bootloader: await bootloader._initialize() # negotiate buf_size (a no-op for explicit BufferSize) @@ -65,26 +177,7 @@ async def test_upload_to_mcuboot_recovery_smp_server( assert success(params) assert (params.buf_count, params.buf_size) == (1, advertised) - match buffer: - case Auto(): - target = advertised - case BufferSize(buf_size=override): - target = override - case _ as unreachable: - assert_never(unreachable) - - # The decoded payload fills the buffer minus the 2-byte frame length + 2-byte - # CRC16 that share it; base64 + 128-byte line framing then expands it ~1.37x on - # the wire (the negotiated 1024 B buffer -> ~1400 B per message), which the - # server decodes incrementally back into the buffer. - assert transport.max_unencoded_size == target - _FRAME_OVERHEAD - wire = sum( - len(packet) - for packet in smppacket.encode( - bytes(transport.max_unencoded_size), transport._line_length - ) - ) - assert target < wire < 2 * target + cap = _assert_negotiated_cap(variant, transport, advertised) offsets = await upload_image( bootloader, @@ -93,4 +186,8 @@ async def test_upload_to_mcuboot_recovery_smp_server( subsequent_timeout_s=RECOVERY_UPLOAD_TIMEOUT_S, ) assert offsets[-1] >= 4096 # the bootloader reassembles the fragmented upload - assert_chunks_maximized(offsets, transport.max_unencoded_size) + assert_chunks_maximized(offsets, cap) + + states = await bootloader.request(ImageStatesRead(), timeout_s=5.0) + assert success(states) + assert len(states.images) >= 1 # the recovery img group is coherent after the upload diff --git a/tests/integration/test_serial_recovery_raw.py b/tests/integration/test_serial_recovery_raw.py deleted file mode 100644 index 486a392..0000000 --- a/tests/integration/test_serial_recovery_raw.py +++ /dev/null @@ -1,62 +0,0 @@ -"""Reset-into-bootloader MCUboot *raw* serial-recovery integration test. - -The raw-framing analog of `test_serial_recovery.py`: the app reboots into MCUboot serial -recovery and the bootloader's SMP server -- built with the raw (non-console) protocol -(`BOOT_SERIAL_RAW_PROTOCOL`, mcu-tools/mcuboot#2755) -- reassembles a fragmented upload -sent over `SMPSerialRawTransport`. - -Recovery advertises MCUmgr params (mcu-tools/mcuboot#2746), so the client negotiates the -cap. Raw framing carries the whole `[header][payload]` with no base64/length/CRC, so the -negotiated cap is the advertised `buf_size` itself (no `- 4`): ~1024 B per message on the -wire, versus the encoded transport's ~1400 B. -""" - -from __future__ import annotations - -import pytest - -from smpclient.generics import success -from smpclient.requests.os_management import MCUMgrParametersRead -from tests.integration.conftest import ( - RECOVERY_UPLOAD_TIMEOUT_S, - assert_chunks_maximized, - connected, - fixture_params, - reboot_into_recovery, - signed_image, - upload_image, -) -from tests.integration.servers import ( - QemuSocketSerialRawTransport, - ServerFixture, - SocketSerialEndpoint, -) - -pytestmark = [pytest.mark.integration, pytest.mark.asyncio] - - -@pytest.mark.parametrize("fixture", fixture_params(lambda f: f.config == "serial_recovery_raw")) -async def test_upload_to_mcuboot_raw_recovery_smp_server(fixture: ServerFixture) -> None: - advertised = fixture.recovery_buf_size - assert advertised is not None, "serial_recovery_raw fixture must advertise recovery params" - - async with connected(fixture) as cs: - assert isinstance(cs.endpoint, SocketSerialEndpoint) - transport = QemuSocketSerialRawTransport(cs.endpoint.url) - - async with reboot_into_recovery(cs.client, transport, cs.endpoint.url) as bootloader: - params = await bootloader.request(MCUMgrParametersRead(), timeout_s=2.0) - assert success(params) - assert (params.buf_count, params.buf_size) == (1, advertised) - - await bootloader._initialize() # adopt the advertised buf_size as the message cap - assert transport.max_unencoded_size == advertised - - offsets = await upload_image( - bootloader, - signed_image(fixture).read_bytes(), - max_bytes=4096, - subsequent_timeout_s=RECOVERY_UPLOAD_TIMEOUT_S, - ) - assert offsets[-1] >= 4096 # the bootloader reassembles the fragmented upload - assert_chunks_maximized(offsets, transport.max_unencoded_size) diff --git a/tests/test_cobs.py b/tests/test_cobs.py new file mode 100644 index 0000000..5ddeb1d --- /dev/null +++ b/tests/test_cobs.py @@ -0,0 +1,214 @@ +"""Tests for the COBS+CRC16 serial framing (`smpclient.transport.serial.framing.cobs`).""" + +from __future__ import annotations + +import doctest +import random + +import pytest +from smp.packet import CRC16_STRUCT, crc16_func + +from smpclient.transport.serial.framing import cobs +from smpclient.transport.serial.framing.cobs import ( + _MAX_BUFFER_BYTES, + Cobs, + cobs_decode, + cobs_encode, +) + + +def test_doctests() -> None: + """Run the module's doctests under pytest (CLAUDE.md: specific docstrings must be tested).""" + results = doctest.testmod(cobs) + assert results.attempted > 0 + assert results.failed == 0 + + +def _frame(message: bytes) -> bytes: + """The full COBS wire frame (delimiter included) for `message`.""" + (wire,) = Cobs().encode(message) + return wire + + +def _corrupt(message: bytes) -> bytes: + """A full COBS frame that decodes cleanly but whose CRC16 is wrong.""" + return cobs_encode(message + CRC16_STRUCT.pack(crc16_func(message) ^ 0xFFFF)) + b"\x00" + + +_M1 = b"\x0a\x00\x00\x01msg-one" +_M2 = b"second\x00message" +_M3 = b"\xff\xff third\x00" + + +@pytest.mark.parametrize( + "data", + [ + b"", + bytes([0]), + bytes(10), + bytes([0xFF]) * 253, # the COBS off-by-one lives at a 254-byte non-zero run + bytes([0xFF]) * 254, + bytes([0xFF]) * 255, + bytes([0xFF]) * 508, # two maximal runs back to back + bytes(range(256)), + b"\x00leading\x00and\x00trailing\x00", + ], +) +def test_cobs_roundtrip(data: bytes) -> None: + encoded = cobs_encode(data) + assert 0 not in encoded, "COBS output must contain no 0x00" + assert cobs_decode(encoded) == data + + +def test_cobs_roundtrip_fuzz() -> None: + """Deterministic fuzz over the payload shapes that stress COBS (mirrors mcuboot's ztest).""" + rng = random.Random(0x1234567) + for _ in range(2000): + n = rng.randrange(600) + mode = rng.randrange(4) + if mode == 0: + data = bytes(rng.randrange(256) for _ in range(n)) + elif mode == 1: + data = bytes(n) + elif mode == 2: + data = bytes([0xFF]) * n + else: + data = bytes(rng.randrange(256) if rng.randrange(4) else 0 for _ in range(n)) + encoded = cobs_encode(data) + assert 0 not in encoded + assert cobs_decode(encoded) == data + + +def test_cobs_decode_zero_code_raises() -> None: + with pytest.raises(ValueError): + cobs_decode(b"\x00") + + +def test_cobs_decode_truncated_raises() -> None: + with pytest.raises(ValueError): + cobs_decode(b"\x05\x11") # code promises 4 more bytes, only 1 present + + +def test_cobs_framing_one_terminated_frame() -> None: + frames = list(Cobs().encode(b"\x00message\xff" * 8)) + assert len(frames) == 1 + assert frames[0][-1] == 0, "frame is 0x00-terminated" + assert 0 not in frames[0][:-1], "only the trailing delimiter is 0x00" + + +def test_cobs_framing_roundtrip() -> None: + decoder = Cobs() + decoder.feed(_frame(bytes(range(256)))) + assert decoder.take() == bytes(range(256)) + + +def test_cobs_framing_split_across_feeds() -> None: + decoder = Cobs() + wire = _frame(_M1) + decoder.feed(wire[:4]) + assert decoder.take() is None # no delimiter yet + decoder.feed(wire[4:]) + assert decoder.take() == _M1 + + +def test_cobs_framing_byte_at_a_time() -> None: + decoder = Cobs() + wire = _frame(_M1) + results = [] + for b in wire: + decoder.feed(bytes([b])) + results.append(decoder.take()) + assert results[-1] == _M1 + assert all(r is None for r in results[:-1]) + + +def test_cobs_framing_multiple_frames_drained_one_per_take() -> None: + decoder = Cobs() + decoder.feed(_frame(_M1) + _frame(_M2) + _frame(_M3)) # three frames in one feed + assert decoder.take() == _M1 + assert decoder.take() == _M2 + assert decoder.take() == _M3 + assert decoder.take() is None + + +def test_cobs_framing_leftover_preserved_across_feeds() -> None: + decoder = Cobs() + w1, w2 = _frame(_M1), _frame(_M2) + decoder.feed(w1 + w2[: len(w2) // 2]) # feed ends partway into frame 2 + assert decoder.take() == _M1 + assert decoder.take() is None # frame 2 incomplete; its prefix is retained + decoder.feed(w2[len(w2) // 2 :]) + assert decoder.take() == _M2 + + +def test_cobs_framing_resyncs_past_bad_crc() -> None: + decoder = Cobs() + decoder.feed(_corrupt(_M1) + _frame(_M2)) + assert decoder.take() == _M2 + + +def test_cobs_framing_resyncs_past_leading_garbage() -> None: + decoder = Cobs() + decoder.feed(b"\x11\x22\x33\x44\x00" + _frame(_M1)) # truncated-frame tail + delimiter + assert decoder.take() == _M1 + + +def test_cobs_framing_skips_empty_frames() -> None: + decoder = Cobs() + decoder.feed(b"\x00\x00\x00" + _frame(_M1)) + assert decoder.take() == _M1 + + +def test_cobs_framing_lone_corrupt_frame_yields_none() -> None: + decoder = Cobs() + decoder.feed(_corrupt(_M1)) + assert decoder.take() is None # no false message; the caller times out and retransmits + + +def test_cobs_framing_drops_empty_message_frame() -> None: + decoder = Cobs() + (empty_frame,) = Cobs().encode(b"") # a structurally valid frame carrying a 0-length message + decoder.feed(empty_frame) + assert ( + decoder.take() is None + ) # not a real message (CRC of b"" is 0x0000); dropped, not surfaced + + +def test_cobs_framing_caps_delimiterless_buffer_and_resyncs() -> None: + decoder = Cobs() + decoder.feed(b"\x11" * (_MAX_BUFFER_BYTES + 1)) # a stream with no 0x00 delimiter: noise + assert decoder.take() is None # dropped at the ceiling rather than buffered without bound + decoder.feed(_frame(_M1)) + assert decoder.take() == _M1 # and a real frame after the noise still decodes + + +def test_cobs_instances_have_independent_buffers() -> None: + a, b = Cobs(), Cobs() # default_factory gives each its own buffer (no shared-default trap) + a.feed(_frame(_M1)) + assert b.take() is None + assert a.take() == _M1 + + +def test_cobs_reset_clears_buffer() -> None: + decoder = Cobs() + decoder.feed(_frame(_M1)[:4]) # a partial frame from a prior (aborted) connection + decoder.reset() + decoder.feed(_frame(_M2)) + assert decoder.take() == _M2 # the stale partial was discarded, not prepended + + +def test_cobs_framing_stream_fuzz() -> None: + """Many frames as a randomly-chunked stream: every message round-trips, in order.""" + rng = random.Random(0xC0B5) + messages = [bytes(rng.randrange(256) for _ in range(rng.randrange(8, 300))) for _ in range(50)] + stream = b"".join(_frame(m) for m in messages) + decoder = Cobs() + received: list[bytes] = [] + i = 0 + while i < len(stream): + step = rng.randrange(1, 64) + decoder.feed(stream[i : i + step]) + i += step + while (out := decoder.take()) is not None: # drain every frame the chunk completed + received.append(out) + assert received == messages diff --git a/tests/test_smp_serial_raw_transport.py b/tests/test_smp_serial_raw_transport.py index 53ef77e..83dbcf5 100644 --- a/tests/test_smp_serial_raw_transport.py +++ b/tests/test_smp_serial_raw_transport.py @@ -10,11 +10,13 @@ import pytest from serial import SerialException from smp import header as smphdr +from smp.packet import CRC16_STRUCT, crc16_func from smpclient.exceptions import SMPClientException from smpclient.requests.os_management import EchoWrite from smpclient.transport import SMPTransportDisconnected -from smpclient.transport.serial import SMPSerialRawTransport +from smpclient.transport.serial import Cobs, SMPSerialRawTransport +from smpclient.transport.serial.framing.cobs import cobs_encode @pytest.fixture(autouse=True) @@ -252,3 +254,110 @@ async def test_send_and_receive() -> None: t.send.assert_awaited_once_with(b"some data") t.receive.assert_awaited_once_with() + + +@pytest.mark.asyncio +async def test_send_with_cobs_framing_encodes() -> None: + t = SMPSerialRawTransport(framing=Cobs()) + t._conn.write = MagicMock() # type: ignore + p = PropertyMock(return_value=0) + type(t._conn).out_waiting = p # type: ignore + + msg = EchoWrite(d="Hello pytest!").BYTES + await t.send(msg) + + expected = cobs_encode(msg + CRC16_STRUCT.pack(crc16_func(msg))) + b"\x00" + t._conn.write.assert_called_once_with(expected) + + +@pytest.mark.asyncio +async def test_receive_with_cobs_framing_decodes() -> None: + t = SMPSerialRawTransport(framing=Cobs()) + await t.connect("/dev/ttyUSB0", timeout_s=1.0) + + m = EchoWrite._Response.get_default()(sequence=0, r="Hello pytest!") # type: ignore + (wire,) = Cobs().encode(m.BYTES) + t._conn.read_all = MagicMock(side_effect=[wire]) # type: ignore + + assert await t.receive() == m.BYTES + + await t.disconnect() + + +@pytest.mark.asyncio +async def test_receive_with_cobs_framing_fragmented() -> None: + t = SMPSerialRawTransport(framing=Cobs()) + await t.connect("/dev/ttyUSB0", timeout_s=1.0) + + m = EchoWrite._Response.get_default()(sequence=0, r="fragment me across reads") # type: ignore + (wire,) = Cobs().encode(m.BYTES) + t._conn.read_all = MagicMock(side_effect=[wire[:5], b"", wire[5:]]) # type: ignore + + assert await t.receive() == m.BYTES + + await t.disconnect() + + +@pytest.mark.asyncio +async def test_receive_two_cobs_frames_in_one_read() -> None: + """Two frames in one read: the second is drained from the persisted decoder buffer. + + The next receive returns it without consulting read_all again. + """ + t = SMPSerialRawTransport(framing=Cobs()) + await t.connect("/dev/ttyUSB0", timeout_s=1.0) + + m1 = EchoWrite._Response.get_default()(sequence=0, r="first") # type: ignore + m2 = EchoWrite._Response.get_default()(sequence=1, r="second") # type: ignore + (w1,) = Cobs().encode(m1.BYTES) + (w2,) = Cobs().encode(m2.BYTES) + t._conn.read_all = MagicMock(side_effect=[w1 + w2]) # type: ignore + + assert await t.receive() == m1.BYTES + assert await t.receive() == m2.BYTES # from leftover; read_all not consulted again + assert t._conn.read_all.call_count == 1 + + await t.disconnect() + + +@pytest.mark.asyncio +async def test_receive_cobs_framing_resyncs_past_corrupt_frame() -> None: + """A corrupt frame ahead of a good one is dropped; receive resyncs to the good frame. + + The two frames carry *different* payloads, so a decoder that wrongly accepted the + corrupt frame would surface `dropped`, not `recovered`. + """ + t = SMPSerialRawTransport(framing=Cobs()) + await t.connect("/dev/ttyUSB0", timeout_s=1.0) + + dropped = EchoWrite._Response.get_default()(sequence=0, r="dropped") # type: ignore + recovered = EchoWrite._Response.get_default()(sequence=1, r="recovered") # type: ignore + corrupt = ( + cobs_encode(dropped.BYTES + CRC16_STRUCT.pack(crc16_func(dropped.BYTES) ^ 0xFFFF)) + b"\x00" + ) + (good,) = Cobs().encode(recovered.BYTES) + t._conn.read_all = MagicMock(side_effect=[corrupt + good]) # type: ignore + + assert await t.receive() == recovered.BYTES + + await t.disconnect() + + +@pytest.mark.asyncio +async def test_receive_framed_yields_so_an_outer_timeout_can_fire() -> None: + """A non-stop stream that never forms a valid frame must not wedge the loop. + + `_read_all` is synchronous, so the loop must yield each iteration; otherwise an outer + `asyncio.timeout` could never fire on a wrong-baud / wrong-protocol / noisy peer. + """ + t = SMPSerialRawTransport(framing=Cobs()) + await t.connect("/dev/ttyUSB0", timeout_s=1.0) + + m = EchoWrite._Response.get_default()(sequence=0, r="never valid") # type: ignore + corrupt = cobs_encode(m.BYTES + CRC16_STRUCT.pack(crc16_func(m.BYTES) ^ 0xFFFF)) + b"\x00" + t._conn.read_all = MagicMock(return_value=corrupt) # type: ignore # endless, never valid + + with pytest.raises(asyncio.TimeoutError): + await asyncio.wait_for(t.receive(), timeout=0.2) + + await t.disconnect()