From 02f027155365c25d959f76801215f3802bf883da Mon Sep 17 00:00:00 2001 From: furrtek Date: Tue, 23 Aug 2016 08:45:33 +0200 Subject: [PATCH] Added basic POCSAG receiver Added Yes/no modal screen (for future tx warnings) --- firmware/application/CMakeLists.txt | 3 + firmware/application/Makefile | 54 ++++++ firmware/application/baseband_api.cpp | 7 + firmware/application/baseband_api.hpp | 1 + firmware/application/bitmap.hpp | 28 +-- .../bmp_bulb_ignore.hpp} | 0 .../bmp_bulb_off.hpp} | 0 .../bmp_bulb_on.hpp} | 0 .../{fox_bmp.hpp => bitmaps/bmp_fox.hpp} | 0 .../application/bitmaps/bmp_modal_warning.hpp | 73 ++++++++ .../{splash.hpp => bitmaps/bmp_splash.hpp} | 0 .../{ => application}/bitmaps/bulb_ignore.bmp | Bin .../{ => application}/bitmaps/bulb_off.bmp | Bin .../{ => application}/bitmaps/bulb_on.bmp | Bin firmware/{ => application}/bitmaps/fox.bmp | Bin .../application/bitmaps/modal_warning.bmp | Bin 0 -> 830 bytes firmware/{ => application}/bitmaps/splash.bmp | Bin firmware/application/pocsag_app.cpp | 168 ++++++++++++++++++ firmware/application/pocsag_app.hpp | 142 +++++++++++++++ firmware/application/string_format.cpp | 2 +- firmware/application/ui_alphanum.cpp | 2 +- firmware/application/ui_navigation.cpp | 58 ++++-- firmware/application/ui_navigation.hpp | 16 +- firmware/application/ui_xylos.cpp | 19 +- firmware/application/ui_xylos.hpp | 6 +- firmware/baseband/CMakeLists.txt | 7 + firmware/baseband/proc_pocsag.cpp | 164 +++++++++++++++++ firmware/baseband/proc_pocsag.hpp | 97 ++++++++++ firmware/common/dsp_iir_config.hpp | 1 + firmware/common/message.hpp | 32 +++- firmware/common/pocsag_packet.cpp | 27 +++ firmware/common/pocsag_packet.hpp | 78 ++++++++ firmware/common/spi_image.hpp | 1 + firmware/portapack-h1-firmware.bin | Bin 762048 -> 765996 bytes 34 files changed, 944 insertions(+), 42 deletions(-) rename firmware/application/{bulb_ignore_bmp.hpp => bitmaps/bmp_bulb_ignore.hpp} (100%) rename firmware/application/{bulb_off_bmp.hpp => bitmaps/bmp_bulb_off.hpp} (100%) rename firmware/application/{bulb_on_bmp.hpp => bitmaps/bmp_bulb_on.hpp} (100%) rename firmware/application/{fox_bmp.hpp => bitmaps/bmp_fox.hpp} (100%) create mode 100644 firmware/application/bitmaps/bmp_modal_warning.hpp rename firmware/application/{splash.hpp => bitmaps/bmp_splash.hpp} (100%) rename firmware/{ => application}/bitmaps/bulb_ignore.bmp (100%) rename firmware/{ => application}/bitmaps/bulb_off.bmp (100%) rename firmware/{ => application}/bitmaps/bulb_on.bmp (100%) rename firmware/{ => application}/bitmaps/fox.bmp (100%) create mode 100644 firmware/application/bitmaps/modal_warning.bmp rename firmware/{ => application}/bitmaps/splash.bmp (100%) create mode 100644 firmware/application/pocsag_app.cpp create mode 100644 firmware/application/pocsag_app.hpp create mode 100644 firmware/baseband/proc_pocsag.cpp create mode 100644 firmware/baseband/proc_pocsag.hpp create mode 100644 firmware/common/pocsag_packet.cpp create mode 100644 firmware/common/pocsag_packet.hpp diff --git a/firmware/application/CMakeLists.txt b/firmware/application/CMakeLists.txt index 4bf2ccf1..6d0c7769 100644 --- a/firmware/application/CMakeLists.txt +++ b/firmware/application/CMakeLists.txt @@ -179,8 +179,10 @@ set(CPPSRC analog_audio_app.cpp ${COMMON}/ais_baseband.cpp ${COMMON}/ais_packet.cpp + ${COMMON}/pocsag_packet.cpp ais_app.cpp tpms_app.cpp + pocsag_app.cpp ${COMMON}/tpms_packet.cpp ert_app.cpp ${COMMON}/ert_packet.cpp @@ -236,6 +238,7 @@ set(INCDIR ${CMAKE_CURRENT_BINARY_DIR} ${COMMON} ${PORTINC} ${KERNINC} ${TESTINC ${HALINC} ${PLATFORMINC} ${BOARDINC} ${FATFSINC} ${CHIBIOS}/os/various + bitmaps ) # diff --git a/firmware/application/Makefile b/firmware/application/Makefile index 971d3258..988362ee 100644 --- a/firmware/application/Makefile +++ b/firmware/application/Makefile @@ -2190,6 +2190,30 @@ __/common/png_writer.cpp.s: cd /home/furrtek/portapack-hackrf && $(MAKE) -f firmware/application/CMakeFiles/application.elf.dir/build.make firmware/application/CMakeFiles/application.elf.dir/__/common/png_writer.cpp.s .PHONY : __/common/png_writer.cpp.s +__/common/pocsag_packet.obj: __/common/pocsag_packet.cpp.obj +.PHONY : __/common/pocsag_packet.obj + +# target to build an object file +__/common/pocsag_packet.cpp.obj: + cd /home/furrtek/portapack-hackrf && $(MAKE) -f firmware/application/CMakeFiles/application.elf.dir/build.make firmware/application/CMakeFiles/application.elf.dir/__/common/pocsag_packet.cpp.obj +.PHONY : __/common/pocsag_packet.cpp.obj + +__/common/pocsag_packet.i: __/common/pocsag_packet.cpp.i +.PHONY : __/common/pocsag_packet.i + +# target to preprocess a source file +__/common/pocsag_packet.cpp.i: + cd /home/furrtek/portapack-hackrf && $(MAKE) -f firmware/application/CMakeFiles/application.elf.dir/build.make firmware/application/CMakeFiles/application.elf.dir/__/common/pocsag_packet.cpp.i +.PHONY : __/common/pocsag_packet.cpp.i + +__/common/pocsag_packet.s: __/common/pocsag_packet.cpp.s +.PHONY : __/common/pocsag_packet.s + +# target to generate assembly for a file +__/common/pocsag_packet.cpp.s: + cd /home/furrtek/portapack-hackrf && $(MAKE) -f firmware/application/CMakeFiles/application.elf.dir/build.make firmware/application/CMakeFiles/application.elf.dir/__/common/pocsag_packet.cpp.s +.PHONY : __/common/pocsag_packet.cpp.s + __/common/portapack_io.obj: __/common/portapack_io.cpp.obj .PHONY : __/common/portapack_io.obj @@ -3030,6 +3054,30 @@ max5864.cpp.s: cd /home/furrtek/portapack-hackrf && $(MAKE) -f firmware/application/CMakeFiles/application.elf.dir/build.make firmware/application/CMakeFiles/application.elf.dir/max5864.cpp.s .PHONY : max5864.cpp.s +pocsag_app.obj: pocsag_app.cpp.obj +.PHONY : pocsag_app.obj + +# target to build an object file +pocsag_app.cpp.obj: + cd /home/furrtek/portapack-hackrf && $(MAKE) -f firmware/application/CMakeFiles/application.elf.dir/build.make firmware/application/CMakeFiles/application.elf.dir/pocsag_app.cpp.obj +.PHONY : pocsag_app.cpp.obj + +pocsag_app.i: pocsag_app.cpp.i +.PHONY : pocsag_app.i + +# target to preprocess a source file +pocsag_app.cpp.i: + cd /home/furrtek/portapack-hackrf && $(MAKE) -f firmware/application/CMakeFiles/application.elf.dir/build.make firmware/application/CMakeFiles/application.elf.dir/pocsag_app.cpp.i +.PHONY : pocsag_app.cpp.i + +pocsag_app.s: pocsag_app.cpp.s +.PHONY : pocsag_app.s + +# target to generate assembly for a file +pocsag_app.cpp.s: + cd /home/furrtek/portapack-hackrf && $(MAKE) -f firmware/application/CMakeFiles/application.elf.dir/build.make firmware/application/CMakeFiles/application.elf.dir/pocsag_app.cpp.s +.PHONY : pocsag_app.cpp.s + portapack.obj: portapack.cpp.obj .PHONY : portapack.obj @@ -4378,6 +4426,9 @@ help: @echo "... __/common/png_writer.obj" @echo "... __/common/png_writer.i" @echo "... __/common/png_writer.s" + @echo "... __/common/pocsag_packet.obj" + @echo "... __/common/pocsag_packet.i" + @echo "... __/common/pocsag_packet.s" @echo "... __/common/portapack_io.obj" @echo "... __/common/portapack_io.i" @echo "... __/common/portapack_io.s" @@ -4483,6 +4534,9 @@ help: @echo "... max5864.obj" @echo "... max5864.i" @echo "... max5864.s" + @echo "... pocsag_app.obj" + @echo "... pocsag_app.i" + @echo "... pocsag_app.s" @echo "... portapack.obj" @echo "... portapack.i" @echo "... portapack.s" diff --git a/firmware/application/baseband_api.cpp b/firmware/application/baseband_api.cpp index 8732eda5..62dfbcc1 100644 --- a/firmware/application/baseband_api.cpp +++ b/firmware/application/baseband_api.cpp @@ -133,6 +133,13 @@ void set_ook_data(const uint32_t stream_length, const uint32_t samples_per_bit, send_message(&message); } +void set_pocsag() { + const POCSAGConfigureMessage message { + 1200 + }; + send_message(&message); +} + static bool baseband_image_running = false; void run_image(const portapack::spi_flash::image_tag_t image_tag) { diff --git a/firmware/application/baseband_api.hpp b/firmware/application/baseband_api.hpp index 9b175f6f..01fea395 100644 --- a/firmware/application/baseband_api.hpp +++ b/firmware/application/baseband_api.hpp @@ -60,6 +60,7 @@ void set_afsk_data(const uint32_t afsk_samples_per_bit, const uint32_t afsk_phas const uint8_t afsk_repeat, const uint32_t afsk_bw, const bool afsk_alt_format); void set_ook_data(const uint32_t stream_length, const uint32_t samples_per_bit, const uint8_t repeat, const uint32_t pause_symbols); +void set_pocsag(); void run_image(const portapack::spi_flash::image_tag_t image_tag); void shutdown(); diff --git a/firmware/application/bitmap.hpp b/firmware/application/bitmap.hpp index 47ee91d6..6842fb92 100644 --- a/firmware/application/bitmap.hpp +++ b/firmware/application/bitmap.hpp @@ -97,22 +97,22 @@ static constexpr Bitmap bitmap_keyboard { }; static constexpr uint8_t bitmap_unistroke_data[] = { + 0x33, 0xC0, + 0x33, 0x00, + 0xB3, 0xCD, + 0xB3, 0xDF, + 0xB3, 0xD9, + 0xB3, 0xD9, + 0x9E, 0xD9, 0x00, 0x00, 0x00, 0x00, - 0x22, 0x00, - 0x22, 0x00, - 0x22, 0x00, - 0x22, 0x00, - 0x22, 0x00, - 0x22, 0x00, - 0xA2, 0x73, - 0xA2, 0x24, - 0xA2, 0x24, - 0xA2, 0x24, - 0xA2, 0x24, - 0x9C, 0x74, - 0x00, 0x00, - 0x00, 0x00, + 0x00, 0x1C, + 0x06, 0x3E, + 0x06, 0x67, + 0xCE, 0x43, + 0xFC, 0x01, + 0x78, 0x40, + 0x00, 0x00 }; static constexpr Bitmap bitmap_unistroke { diff --git a/firmware/application/bulb_ignore_bmp.hpp b/firmware/application/bitmaps/bmp_bulb_ignore.hpp similarity index 100% rename from firmware/application/bulb_ignore_bmp.hpp rename to firmware/application/bitmaps/bmp_bulb_ignore.hpp diff --git a/firmware/application/bulb_off_bmp.hpp b/firmware/application/bitmaps/bmp_bulb_off.hpp similarity index 100% rename from firmware/application/bulb_off_bmp.hpp rename to firmware/application/bitmaps/bmp_bulb_off.hpp diff --git a/firmware/application/bulb_on_bmp.hpp b/firmware/application/bitmaps/bmp_bulb_on.hpp similarity index 100% rename from firmware/application/bulb_on_bmp.hpp rename to firmware/application/bitmaps/bmp_bulb_on.hpp diff --git a/firmware/application/fox_bmp.hpp b/firmware/application/bitmaps/bmp_fox.hpp similarity index 100% rename from firmware/application/fox_bmp.hpp rename to firmware/application/bitmaps/bmp_fox.hpp diff --git a/firmware/application/bitmaps/bmp_modal_warning.hpp b/firmware/application/bitmaps/bmp_modal_warning.hpp new file mode 100644 index 00000000..7c49d21e --- /dev/null +++ b/firmware/application/bitmaps/bmp_modal_warning.hpp @@ -0,0 +1,73 @@ +unsigned char modal_warning_bmp[] = { + 0x42, 0x4d, 0xfa, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x96, 0x00, + 0x00, 0x00, 0x6c, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x28, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x04, 0x00, 0x02, 0x00, 0x00, 0x00, 0xa8, 0x02, + 0x00, 0x00, 0x13, 0x0b, 0x00, 0x00, 0x13, 0x0b, 0x00, 0x00, 0x07, 0x00, + 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x42, 0x47, 0x52, 0x73, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0xff, 0x00, 0x00, 0x5a, + 0xff, 0x00, 0x78, 0x78, 0x78, 0x00, 0x00, 0x7c, 0xff, 0x00, 0x00, 0xa9, + 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0x02, 0x03, 0x24, 0x66, 0x02, 0x30, + 0x00, 0x00, 0x02, 0x36, 0x24, 0x66, 0x02, 0x63, 0x00, 0x00, 0x02, 0x66, + 0x02, 0x63, 0x20, 0x00, 0x02, 0x36, 0x02, 0x66, 0x00, 0x00, 0x02, 0x36, + 0x02, 0x60, 0x20, 0x00, 0x02, 0x06, 0x02, 0x63, 0x00, 0x00, 0x02, 0x06, + 0x02, 0x60, 0x0c, 0x00, 0x00, 0x08, 0x03, 0x66, 0x66, 0x30, 0x0c, 0x00, + 0x02, 0x06, 0x02, 0x60, 0x00, 0x00, 0x02, 0x03, 0x02, 0x66, 0x0c, 0x00, + 0x00, 0x08, 0x06, 0x11, 0x11, 0x60, 0x0c, 0x00, 0x02, 0x66, 0x02, 0x30, + 0x00, 0x00, 0x02, 0x00, 0x02, 0x66, 0x0c, 0x00, 0x00, 0x08, 0x06, 0x21, + 0x21, 0x60, 0x0c, 0x00, 0x02, 0x66, 0x02, 0x00, 0x00, 0x00, 0x00, 0x06, + 0x00, 0x36, 0x60, 0x00, 0x0a, 0x00, 0x00, 0x08, 0x06, 0x42, 0x42, 0x60, + 0x0a, 0x00, 0x00, 0x06, 0x06, 0x63, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, + 0x00, 0x06, 0x60, 0x00, 0x0a, 0x00, 0x00, 0x08, 0x06, 0x54, 0x45, 0x60, + 0x0a, 0x00, 0x00, 0x06, 0x06, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, + 0x00, 0x03, 0x66, 0x00, 0x0a, 0x00, 0x00, 0x08, 0x03, 0x66, 0x66, 0x30, + 0x0a, 0x00, 0x00, 0x06, 0x66, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, + 0x00, 0x00, 0x66, 0x00, 0x1c, 0x00, 0x00, 0x06, 0x66, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x36, 0x60, 0x18, 0x00, 0x00, 0x08, + 0x06, 0x63, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x06, 0x60, + 0x0a, 0x00, 0x02, 0x36, 0x02, 0x63, 0x0a, 0x00, 0x00, 0x08, 0x06, 0x60, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x03, 0x66, 0x08, 0x00, + 0x00, 0x08, 0x03, 0x61, 0x16, 0x30, 0x08, 0x00, 0x00, 0x08, 0x66, 0x30, + 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x02, 0x66, 0x08, 0x00, 0x00, 0x08, + 0x06, 0x11, 0x11, 0x60, 0x08, 0x00, 0x02, 0x66, 0x06, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x02, 0x36, 0x02, 0x60, 0x06, 0x00, 0x00, 0x08, 0x06, 0x11, + 0x11, 0x60, 0x06, 0x00, 0x02, 0x06, 0x02, 0x63, 0x06, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x02, 0x06, 0x02, 0x60, 0x06, 0x00, 0x00, 0x08, 0x06, 0x11, + 0x11, 0x60, 0x06, 0x00, 0x02, 0x06, 0x02, 0x60, 0x06, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x02, 0x03, 0x02, 0x66, 0x06, 0x00, 0x00, 0x08, 0x06, 0x11, + 0x11, 0x60, 0x06, 0x00, 0x02, 0x66, 0x02, 0x30, 0x06, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x02, 0x66, 0x06, 0x00, 0x00, 0x08, 0x06, 0x11, 0x11, 0x60, + 0x06, 0x00, 0x02, 0x66, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x18, + 0x36, 0x60, 0x00, 0x00, 0x06, 0x11, 0x11, 0x60, 0x00, 0x00, 0x06, 0x63, + 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x18, 0x06, 0x60, 0x00, 0x00, + 0x06, 0x21, 0x21, 0x60, 0x00, 0x00, 0x06, 0x60, 0x08, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x00, 0x18, 0x03, 0x66, 0x00, 0x00, 0x06, 0x12, 0x12, 0x60, + 0x00, 0x00, 0x66, 0x30, 0x08, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x14, + 0x66, 0x00, 0x00, 0x06, 0x21, 0x21, 0x60, 0x00, 0x00, 0x66, 0x0a, 0x00, + 0x00, 0x00, 0x0a, 0x00, 0x00, 0x14, 0x36, 0x60, 0x00, 0x06, 0x22, 0x22, + 0x60, 0x00, 0x06, 0x63, 0x0a, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x14, + 0x06, 0x60, 0x00, 0x06, 0x24, 0x24, 0x60, 0x00, 0x06, 0x60, 0x0a, 0x00, + 0x00, 0x00, 0x0a, 0x00, 0x00, 0x14, 0x03, 0x66, 0x00, 0x06, 0x42, 0x42, + 0x60, 0x00, 0x66, 0x30, 0x0a, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x10, + 0x66, 0x00, 0x06, 0x54, 0x45, 0x60, 0x00, 0x66, 0x0c, 0x00, 0x00, 0x00, + 0x0c, 0x00, 0x00, 0x10, 0x36, 0x60, 0x03, 0x66, 0x66, 0x30, 0x06, 0x63, + 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x02, 0x06, 0x02, 0x60, 0x08, 0x00, + 0x02, 0x06, 0x02, 0x60, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x02, 0x03, + 0x02, 0x66, 0x08, 0x00, 0x02, 0x66, 0x02, 0x30, 0x0c, 0x00, 0x00, 0x00, + 0x0e, 0x00, 0x02, 0x66, 0x08, 0x00, 0x02, 0x66, 0x0e, 0x00, 0x00, 0x00, + 0x0e, 0x00, 0x00, 0x0c, 0x36, 0x60, 0x00, 0x00, 0x06, 0x63, 0x0e, 0x00, + 0x00, 0x00, 0x0e, 0x00, 0x00, 0x0c, 0x06, 0x60, 0x00, 0x00, 0x06, 0x60, + 0x0e, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x0c, 0x03, 0x66, 0x00, 0x00, + 0x66, 0x30, 0x0e, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x08, 0x66, 0x00, + 0x00, 0x66, 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x08, 0x36, 0x60, + 0x06, 0x63, 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x08, 0x06, 0x60, + 0x06, 0x60, 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x08, 0x03, 0x66, + 0x66, 0x30, 0x10, 0x00, 0x00, 0x00, 0x12, 0x00, 0x02, 0x66, 0x02, 0x66, + 0x12, 0x00, 0x00, 0x00, 0x12, 0x00, 0x02, 0x36, 0x02, 0x63, 0x12, 0x00, + 0x00, 0x01 +}; +unsigned int modal_warning_bmp_len = 830; diff --git a/firmware/application/splash.hpp b/firmware/application/bitmaps/bmp_splash.hpp similarity index 100% rename from firmware/application/splash.hpp rename to firmware/application/bitmaps/bmp_splash.hpp diff --git a/firmware/bitmaps/bulb_ignore.bmp b/firmware/application/bitmaps/bulb_ignore.bmp similarity index 100% rename from firmware/bitmaps/bulb_ignore.bmp rename to firmware/application/bitmaps/bulb_ignore.bmp diff --git a/firmware/bitmaps/bulb_off.bmp b/firmware/application/bitmaps/bulb_off.bmp similarity index 100% rename from firmware/bitmaps/bulb_off.bmp rename to firmware/application/bitmaps/bulb_off.bmp diff --git a/firmware/bitmaps/bulb_on.bmp b/firmware/application/bitmaps/bulb_on.bmp similarity index 100% rename from firmware/bitmaps/bulb_on.bmp rename to firmware/application/bitmaps/bulb_on.bmp diff --git a/firmware/bitmaps/fox.bmp b/firmware/application/bitmaps/fox.bmp similarity index 100% rename from firmware/bitmaps/fox.bmp rename to firmware/application/bitmaps/fox.bmp diff --git a/firmware/application/bitmaps/modal_warning.bmp b/firmware/application/bitmaps/modal_warning.bmp new file mode 100644 index 0000000000000000000000000000000000000000..d440f73c1db240f885f634bb190b1902563614b4 GIT binary patch literal 830 zcmZ?r{l&xp2GbZA7;+dG7&M@mk%5H)B(;KxfkBuXg4r1u7(m#`J*XJ0i39><7KU=A z{|pRK{~0PODi|1Q{xdMF{Lk?J|9=K1W|cH10|o{rGnF)^WCjMNG^S()1|~D6G>{lm zf&v2*8(5r;DS?N9frB|M&433amcYQk#LSci5@Qn-OyB|O1ewDC6;o7%h=Cl!#$cAf zz{SA8!RF+Yz{SA8#+D2cW?*ArgNlc^Lc|lG;>>Aa^&s0o>eCFM;tXjFG7JoCX<#k` z2Lppyf&|E1h`8_1u@P;oXURB;dwq@Ee9lLKT5$V4Uskb03}1GyL!79t=au(C8R1_rQ*Spox_l2QT# z8_2g{5w-*dHWifwa4103FsCtq0-Yhv0HlkDfk7aRfi1)}fdLeA3?RN)0w|Q(l6e>y z7$7mr0rEE}wn2PmP$)5_F&Tj5`M_bul*Y%vz`)1AzytPAGK>fINdk-q@&tlkS4&uzyM;KC9oyK*lY=G2{1Ou9U!(4C@rN4F)%O)f#M@sh=G9-06JYr>;M1& literal 0 HcmV?d00001 diff --git a/firmware/bitmaps/splash.bmp b/firmware/application/bitmaps/splash.bmp similarity index 100% rename from firmware/bitmaps/splash.bmp rename to firmware/application/bitmaps/splash.bmp diff --git a/firmware/application/pocsag_app.cpp b/firmware/application/pocsag_app.cpp new file mode 100644 index 00000000..940b89cd --- /dev/null +++ b/firmware/application/pocsag_app.cpp @@ -0,0 +1,168 @@ +/* + * Copyright (C) 2015 Jared Boone, ShareBrained Technology, Inc. + * Copyright (C) 2016 Furrtek + * + * This file is part of PortaPack. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, + * Boston, MA 02110-1301, USA. + */ + +#include "pocsag_app.hpp" + +#include "baseband_api.hpp" + +#include "portapack.hpp" +using namespace portapack; + +#include "string_format.hpp" + +#include "utility.hpp" + +#define POCSAG_IDLE 0x7A89C197 + +namespace pocsag { + +namespace format { + +static std::string signal_rate_str(SignalRate signal_rate) { + switch(signal_rate) { + case SignalRate::FSK512: return "FSK 512 "; + case SignalRate::FSK1200: return "FSK 1200"; + case SignalRate::FSK2400: return "FSK 2400"; + default: return "- - - - "; + } +} + +} /* namespace format */ + +} /* namespace pocsag */ + +void POCSAGLogger::on_packet(const pocsag::POCSAGPacket& packet) { + std::string entry = pocsag::format::signal_rate_str(packet.signal_rate()) + " "; + for (size_t c = 0; c < 16; c++) + entry += to_string_hex(packet[c], 8) + " "; + + log_file.write_entry(packet.timestamp(), entry); +} + +namespace ui { + +POCSAGAppView::POCSAGAppView(NavigationView& nav) { + baseband::run_image(portapack::spi_flash::image_tag_pocsag); + + add_children({ { + &rssi, + &channel, + &options_band, + &field_rf_amp, + &field_lna, + &field_vga, + //&text_debug, + &console + } }); + + radio::enable({ + tuning_frequency(), + sampling_rate, + baseband_bandwidth, + rf::Direction::Receive, + receiver_model.rf_amp(), + static_cast(receiver_model.lna()), + static_cast(receiver_model.vga()), + 1, + }); + + options_band.on_change = [this](size_t, OptionsField::value_t v) { + this->on_band_changed(v); + }; + options_band.set_by_value(target_frequency()); + + logger = std::make_unique(); + if( logger ) { + logger->append("pocsag.txt"); + } + + baseband::set_pocsag(); +} + +POCSAGAppView::~POCSAGAppView() { + radio::disable(); + baseband::shutdown(); +} + +void POCSAGAppView::focus() { + options_band.focus(); +} + +void POCSAGAppView::set_parent_rect(const Rect new_parent_rect) { + View::set_parent_rect(new_parent_rect); +} + +void POCSAGAppView::on_packet(const POCSAGPacketMessage * message) { + bool eom = false; + uint32_t codeword; + + if( logger ) { + logger->on_packet(message->packet); + } + + for (size_t c = 0; c < 16; c++) { + codeword = message->packet[c]; + + if (codeword & 0x80000000) { + // Message + console.writeln("Message !"); + + } else { + // Address + if (codeword == POCSAG_IDLE) { + eom = true; + } else { + function = (codeword >> 11) & 3; + address = ((codeword >> 10) & 0x1FFFF8) | ((codeword >> 1) & 7); + } + } + } + + if (eom) + console.writeln("Address:" + to_string_hex(address, 6) + " Function:" + to_string_dec_uint(function)); + //console.writeln("EOM"); + //console.writeln(to_string_hex(message->packet[0], 8) + "/"+ to_string_hex(message->packet[1], 8)); + + if (eom) + batch_cnt = 0; + else + batch_cnt++; +} + +void POCSAGAppView::on_band_changed(const uint32_t new_band_frequency) { + set_target_frequency(new_band_frequency); +} + +void POCSAGAppView::set_target_frequency(const uint32_t new_value) { + target_frequency_ = new_value; + radio::set_tuning_frequency(tuning_frequency()); +} + +uint32_t POCSAGAppView::target_frequency() const { + return target_frequency_; +} + +uint32_t POCSAGAppView::tuning_frequency() const { + return target_frequency() - (sampling_rate / 4); +} + +} /* namespace ui */ diff --git a/firmware/application/pocsag_app.hpp b/firmware/application/pocsag_app.hpp new file mode 100644 index 00000000..dc2e399a --- /dev/null +++ b/firmware/application/pocsag_app.hpp @@ -0,0 +1,142 @@ +/* + * Copyright (C) 2015 Jared Boone, ShareBrained Technology, Inc. + * Copyright (C) 2016 Furrtek + * + * This file is part of PortaPack. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, + * Boston, MA 02110-1301, USA. + */ + +#ifndef __POCSAG_APP_H__ +#define __POCSAG_APP_H__ + +#include "ui_widget.hpp" +#include "ui_navigation.hpp" +#include "ui_receiver.hpp" +#include "ui_rssi.hpp" +#include "ui_channel.hpp" + +#include "event_m0.hpp" + +#include "log_file.hpp" + +#include "pocsag_packet.hpp" + +class POCSAGLogger { +public: + Optional append(const std::string& filename) { + return log_file.append(filename); + } + + void on_packet(const pocsag::POCSAGPacket& packet); + +private: + LogFile log_file; +}; + +namespace ui { + +class POCSAGAppView : public View { +public: + POCSAGAppView(NavigationView& nav); + ~POCSAGAppView(); + + void set_parent_rect(const Rect new_parent_rect) override; + + void paint(Painter&) override { }; + + void focus() override; + + std::string title() const override { return "POCSAG RX"; }; + +private: + static constexpr uint32_t initial_target_frequency = 466175000; + static constexpr uint32_t sampling_rate = 1536000; + static constexpr uint32_t baseband_bandwidth = 1750000; + + uint32_t batch_cnt = 0; + uint32_t address, function; + + MessageHandlerRegistration message_handler_packet { + Message::ID::POCSAGPacket, + [this](Message* const p) { + const auto message = static_cast(p); + this->on_packet(message); + } + }; + + static constexpr ui::Dim header_height = 1 * 16; + + RSSI rssi { + { 21 * 8, 0, 6 * 8, 4 }, + }; + + Channel channel { + { 21 * 8, 5, 6 * 8, 4 }, + }; + + OptionsField options_band { + { 0 * 8, 0 * 16 }, + 7, + { + { "FR .025", 466025000 }, + { "FR .050", 466050000 }, + { "FR .075", 466075000 }, + { "FR .175", 466175000 }, + { "FR .206", 466206250 }, + { "FR .231", 466231250 } + } + }; + + Text text_debug { + { 0, 40, 240, 16 }, + "Debug..." + }; + + Console console { + { 0, 32, 240, 272 } + }; + + RFAmpField field_rf_amp { + { 13 * 8, 0 * 16 } + }; + + LNAGainField field_lna { + { 15 * 8, 0 * 16 } + }; + + VGAGainField field_vga { + { 18 * 8, 0 * 16 } + }; + + std::unique_ptr logger; + + uint32_t target_frequency_ = initial_target_frequency; + + void on_packet(const POCSAGPacketMessage * message); + void on_show_list(); + + void on_band_changed(const uint32_t new_band_frequency); + + uint32_t target_frequency() const; + void set_target_frequency(const uint32_t new_value); + + uint32_t tuning_frequency() const; +}; + +} /* namespace ui */ + +#endif/*__POCSAG_APP_H__*/ diff --git a/firmware/application/string_format.cpp b/firmware/application/string_format.cpp index 5e151297..156faaa8 100644 --- a/firmware/application/string_format.cpp +++ b/firmware/application/string_format.cpp @@ -99,7 +99,7 @@ std::string to_string_dec_int( static void to_string_hex_internal(char* p, const uint32_t n, const int32_t l) { const uint32_t d = n & 0xf; - p[l] = (d > 9) ? (d + 87) : (d + 48); + p[l] = (d > 9) ? (d + 55) : (d + 48); if( l > 0 ) { to_string_hex_internal(p, n >> 4, l - 1); } diff --git a/firmware/application/ui_alphanum.cpp b/firmware/application/ui_alphanum.cpp index c4155ff9..6e49ce7d 100644 --- a/firmware/application/ui_alphanum.cpp +++ b/firmware/application/ui_alphanum.cpp @@ -116,7 +116,7 @@ AlphanumView::AlphanumView( add_child(&button_done); button_done.on_select = [this, &nav, txt, max_len](Button&) { memcpy(txt, txtinput, max_len + 1); - on_changed(this->value()); + if (on_changed) on_changed(this->value()); nav.pop(); }; diff --git a/firmware/application/ui_navigation.cpp b/firmware/application/ui_navigation.cpp index aba9e24b..2fc35cff 100644 --- a/firmware/application/ui_navigation.cpp +++ b/firmware/application/ui_navigation.cpp @@ -28,7 +28,8 @@ #include "portapack.hpp" #include "event_m0.hpp" #include "portapack_persistent_memory.hpp" -#include "splash.hpp" +#include "bmp_splash.hpp" +#include "bmp_modal_warning.hpp" #include "ui_about.hpp" #include "ui_setup.hpp" @@ -52,6 +53,7 @@ #include "ais_app.hpp" #include "ert_app.hpp" #include "tpms_app.hpp" +#include "pocsag_app.hpp" #include "capture_app.hpp" #include "core_control.hpp" @@ -184,7 +186,7 @@ void NavigationView::display_modal( ) { /* If a modal view is already visible, don't display another */ if( !modal_view ) { - modal_view = push(title, message); + modal_view = push(title, message, false); } } @@ -228,9 +230,10 @@ TranspondersMenuView::TranspondersMenuView(NavigationView& nav) { /* ReceiverMenuView ******************************************************/ ReceiverMenuView::ReceiverMenuView(NavigationView& nav) { - add_items<2>({ { + add_items<3>({ { { "Audio", ui::Color::white(), [&nav](){ nav.push(); } }, { "Transponders", ui::Color::white(), [&nav](){ nav.push(); } }, + { "POCSAG", ui::Color::cyan(), [&nav](){ nav.push(); } }, } }); on_left = [&nav](){ nav.pop(); }; } @@ -437,17 +440,37 @@ void NotImplementedView::focus() { ModalMessageView::ModalMessageView( NavigationView& nav, const std::string& title, - const std::string& message -) : title_ { title } + const std::string& message, + bool yesno +) : title_ { title }, + yesno_ { yesno } { - button_done.on_select = [&nav](Button&){ - nav.pop(); - }; - add_children({ { - &text_message, - &button_done, - } }); + if (!yesno) { + button_done.on_select = [&nav](Button&){ + nav.pop(); + }; + + add_children({ { + &text_message, + &button_done + } }); + } else { + button_yes.on_select = [this,&nav](Button&){ + if (on_choice) on_choice(true); + nav.pop(); + }; + button_no.on_select = [this,&nav](Button&){ + if (on_choice) on_choice(false); + nav.pop(); + }; + + add_children({ { + &text_message, + &button_yes, + &button_no + } }); + } text_message.set(message); @@ -458,8 +481,17 @@ ModalMessageView::ModalMessageView( }); } +void ModalMessageView::paint(Painter& painter) { + (void)painter; + portapack::display.drawBMP({64, 64}, modal_warning_bmp, false); +} + void ModalMessageView::focus() { - button_done.focus(); + if (!yesno_) { + button_done.focus(); + } else { + button_yes.focus(); + } } } /* namespace ui */ diff --git a/firmware/application/ui_navigation.hpp b/firmware/application/ui_navigation.hpp index 40c3e060..9ec130a1 100644 --- a/firmware/application/ui_navigation.hpp +++ b/firmware/application/ui_navigation.hpp @@ -264,15 +264,20 @@ public: ModalMessageView( NavigationView& nav, const std::string& title, - const std::string& message + const std::string& message, + bool yesno ); + void paint(Painter& painter) override; void focus() override; std::string title() const override { return title_; }; + + std::function on_choice; private: const std::string title_; + const bool yesno_; Text text_message { }; @@ -280,6 +285,15 @@ private: { 10 * 8, 13 * 16, 10 * 8, 24 }, "OK", }; + + Button button_yes { + { 40, 13 * 16, 64, 24 }, + "YES", + }; + Button button_no { + { 152, 13 * 16, 64, 24 }, + "NO", + }; }; } /* namespace ui */ diff --git a/firmware/application/ui_xylos.cpp b/firmware/application/ui_xylos.cpp index d5e33cfd..40a844a5 100644 --- a/firmware/application/ui_xylos.cpp +++ b/firmware/application/ui_xylos.cpp @@ -415,14 +415,19 @@ XylosView::XylosView(NavigationView& nav) { };*/ // Single transmit - button_transmit.on_select = [this](Button&) { + button_transmit.on_select = [this,&nav](Button&) { if (tx_mode == IDLE) { - // audio::headphone::set_volume(volume_t::decibel(90 - 99) + audio::headphone::volume_range().max); - tx_mode = SINGLE; - button_transmit.set_style(&style_cancel); - button_transmit.set_text("Wait"); - generate_message(); - start_tx(); + /*auto modal_view = nav.push("TX", "TX ?", true); + modal_view->on_choice = [this](bool choice) { + if (choice) {*/ + // audio::headphone::set_volume(volume_t::decibel(90 - 99) + audio::headphone::volume_range().max); + tx_mode = SINGLE; + button_transmit.set_style(&style_cancel); + button_transmit.set_text("Wait"); + generate_message(); + start_tx(); + //} + //}; } }; } diff --git a/firmware/application/ui_xylos.hpp b/firmware/application/ui_xylos.hpp index 9b97a0e5..5299b870 100644 --- a/firmware/application/ui_xylos.hpp +++ b/firmware/application/ui_xylos.hpp @@ -25,9 +25,9 @@ #include "ui_navigation.hpp" #include "ui_font_fixed_8x16.hpp" -#include "bulb_on_bmp.hpp" -#include "bulb_off_bmp.hpp" -#include "bulb_ignore_bmp.hpp" +#include "bmp_bulb_on.hpp" +#include "bmp_bulb_off.hpp" +#include "bmp_bulb_ignore.hpp" #include "message.hpp" //#include "volume.hpp" diff --git a/firmware/baseband/CMakeLists.txt b/firmware/baseband/CMakeLists.txt index 5b9dc8ef..548a2831 100644 --- a/firmware/baseband/CMakeLists.txt +++ b/firmware/baseband/CMakeLists.txt @@ -298,6 +298,13 @@ set(MODE_CPPSRC ) DeclareTargets(PERT ert) +### POCSAG RX + +set(MODE_CPPSRC + proc_pocsag.cpp +) +DeclareTargets(PPOC pocsag) + ### NFM Audio set(MODE_CPPSRC diff --git a/firmware/baseband/proc_pocsag.cpp b/firmware/baseband/proc_pocsag.cpp new file mode 100644 index 00000000..b4fa467c --- /dev/null +++ b/firmware/baseband/proc_pocsag.cpp @@ -0,0 +1,164 @@ +/* + * Copyright (C) 1996 Thomas Sailer (sailer@ife.ee.ethz.ch, hb9jnx@hb9w.che.eu) + * Copyright (C) 2012-2014 Elias Oenal (multimon-ng@eliasoenal.com) + * Copyright (C) 2015 Jared Boone, ShareBrained Technology, Inc. + * Copyright (C) 2016 Furrtek + * + * This file is part of PortaPack. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, + * Boston, MA 02110-1301, USA. + */ + +#include "proc_pocsag.hpp" + +#include "event_m4.hpp" + +#include +#include + +#define FREQ_SAMP 24000 +#define BAUD 1200 +#define SPHASEINC (0x10000u * BAUD / FREQ_SAMP) + +#define POCSAG_SYNC 0x7CD215D8 +#define POCSAG_IDLE 0x7A89C197 + +void POCSAGProcessor::execute(const buffer_c8_t& buffer) { + /* 1.536MHz, 2048 samples */ + + if( !configured ) return; + + const auto decim_0_out = decim_0.execute(buffer, dst_buffer); + const auto decim_1_out = decim_1.execute(decim_0_out, dst_buffer); + + auto audio = demod.execute(decim_1_out, audio_buffer); + + for (c = 0; c < 32; c++) { + + // Bit = sign + const int32_t sample_int = audio.p[c] * 32768.0f; + const int32_t audio_sample = __SSAT(sample_int, 16); + dcd_shreg <<= 1; + dcd_shreg |= (audio_sample < 0); + + // Detect transitions to adjust clock + if ((dcd_shreg ^ (dcd_shreg >> 1)) & 1) { + if (sphase < (0x8000u-(SPHASEINC/2))) + sphase += SPHASEINC/8; + else + sphase -= SPHASEINC/8; + } + + sphase += SPHASEINC; + + if (sphase >= 0x10000u) { + sphase &= 0xffffu; + + rx_data <<= 1; + rx_data |= (dcd_shreg & 1); + + switch(rx_state) { + + case WAITING: + if (rx_data == 0xAAAAAAAA) { + rx_state = PREAMBLE; + sync_timeout = 0; + } + break; + + case PREAMBLE: + if (sync_timeout < 600) { + sync_timeout++; + + //pocsag_brute_repair(&s->l2.pocsag, &rx_data); + + if (rx_data == POCSAG_SYNC) { + packet.clear(); + rx_state = SYNC; + frame_counter = 0; + rx_bit = 0; + } else if (rx_data == POCSAG_IDLE) { + rx_state = WAITING; + } + + } else { + rx_state = WAITING; // Abort + } + break; + + case SYNC: + rx_bit++; + if (rx_bit >= 32) { + rx_bit = 0; + + //pocsag_brute_repair(&s->l2.pocsag, &rx_data); + + packet.set(frame_counter, rx_data); + + if (rx_data == POCSAG_IDLE) { + rx_state = WAITING; + + packet.set_timestamp(Timestamp::now()); + //packet.rate = pocsag::SignalRate::FSK1200; + + const POCSAGPacketMessage message(packet); + shared_memory.application_queue.push(message); + + } else { + if (frame_counter < 15) + frame_counter++; + else + rx_state = WAITING; + } + } + break; + + default: + break; + } + } + } +} + +void POCSAGProcessor::on_message(const Message* const message) { + if (message->id == Message::ID::POCSAGConfigure) + configure(*reinterpret_cast(message)); +} + +void POCSAGProcessor::configure(const POCSAGConfigureMessage& message) { + (void)message; + + constexpr size_t decim_0_input_fs = baseband_fs; + constexpr size_t decim_0_output_fs = decim_0_input_fs / decim_0.decimation_factor; + + constexpr size_t decim_1_input_fs = decim_0_output_fs; + constexpr size_t decim_1_output_fs = decim_1_input_fs / decim_1.decimation_factor; + + const size_t demod_input_fs = decim_1_output_fs; + + decim_0.configure(taps_11k0_decim_0.taps, 33554432); + decim_1.configure(taps_11k0_decim_1.taps, 131072); + demod.configure(demod_input_fs, 4500); + + rx_state = WAITING; + configured = true; +} + +int main() { + EventDispatcher event_dispatcher { std::make_unique() }; + event_dispatcher.run(); + return 0; +} diff --git a/firmware/baseband/proc_pocsag.hpp b/firmware/baseband/proc_pocsag.hpp new file mode 100644 index 00000000..76c5a860 --- /dev/null +++ b/firmware/baseband/proc_pocsag.hpp @@ -0,0 +1,97 @@ +/* + * Copyright (C) 2015 Jared Boone, ShareBrained Technology, Inc. + * Copyright (C) 2016 Furrtek + * + * This file is part of PortaPack. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, + * Boston, MA 02110-1301, USA. + */ + +#ifndef __PROC_POCSAG_H__ +#define __PROC_POCSAG_H__ + +#include "baseband_processor.hpp" +#include "baseband_thread.hpp" +#include "rssi_thread.hpp" + +#include "dsp_iir.hpp" +#include "dsp_decimate.hpp" +#include "dsp_demodulate.hpp" + +#include "pocsag_packet.hpp" + +#include "message.hpp" +#include "portapack_shared_memory.hpp" + +#include + +class POCSAGProcessor : public BasebandProcessor { +public: + void execute(const buffer_c8_t& buffer) override; + + void on_message(const Message* const message) override; + +private: + enum rx_states { + WAITING = 0, + PREAMBLE = 32, + SYNC = 64, + LOSING_SYNC = 65, + LOST_SYNC = 66, + ADDRESS = 67, + MESSAGE = 68, + END_OF_MESSAGE = 69 + }; + + static constexpr size_t baseband_fs = 1536000; + + BasebandThread baseband_thread { baseband_fs, this, NORMALPRIO + 20, baseband::Direction::Receive }; + RSSIThread rssi_thread { NORMALPRIO + 10 }; + + std::array dst; + const buffer_c16_t dst_buffer { + dst.data(), + dst.size() + }; + std::array audio; + const buffer_f32_t audio_buffer { + audio.data(), + audio.size() + }; + + dsp::decimate::FIRC8xR16x24FS4Decim8 decim_0; + dsp::decimate::FIRC16xR16x32Decim8 decim_1; + + dsp::demodulate::FM demod; + + uint32_t sync_timeout; + + uint32_t dcd_shreg; + uint32_t sphase; + uint32_t rx_data; + uint32_t rx_bit; + bool configured = false; + rx_states rx_state; + + size_t c, frame_counter; + + pocsag::POCSAGPacket packet; + + void configure(const POCSAGConfigureMessage& message); + +}; + +#endif/*__PROC_POCSAG_H__*/ diff --git a/firmware/common/dsp_iir_config.hpp b/firmware/common/dsp_iir_config.hpp index 50aca1d5..657d0197 100644 --- a/firmware/common/dsp_iir_config.hpp +++ b/firmware/common/dsp_iir_config.hpp @@ -40,6 +40,7 @@ constexpr iir_biquad_config_t audio_48k_hpf_300hz_config { constexpr iir_biquad_config_t audio_24k_hpf_300hz_config { { 0.94597686f, -1.89195371f, 0.94597686f }, { 1.00000000f, -1.88903308f, 0.89487434f } + }; // scipy.signal.butter(2, 300 / 8000.0, 'highpass', analog=False) diff --git a/firmware/common/message.hpp b/firmware/common/message.hpp index 6cbdba66..71a6f31e 100644 --- a/firmware/common/message.hpp +++ b/firmware/common/message.hpp @@ -32,6 +32,7 @@ #include "baseband_packet.hpp" #include "ert_packet.hpp" #include "tpms_packet.hpp" +#include "pocsag_packet.hpp" #include "dsp_fir_taps.hpp" #include "dsp_iir.hpp" #include "fifo.hpp" @@ -73,9 +74,12 @@ public: OOKConfigure = 25, RDSConfigure = 26, AudioTXConfig = 27, + POCSAGConfigure = 28, - FIFOSignal = 28, - FIFOData = 29, + POCSAGPacket = 30, + + FIFOSignal = 31, + FIFOData = 32, MAX }; @@ -270,6 +274,18 @@ public: baseband::Packet packet; }; +class POCSAGPacketMessage : public Message { +public: + constexpr POCSAGPacketMessage( + const pocsag::POCSAGPacket& packet + ) : Message { ID::POCSAGPacket }, + packet { packet } + { + } + + pocsag::POCSAGPacket packet; +}; + class ShutdownMessage : public Message { public: constexpr ShutdownMessage( @@ -602,6 +618,18 @@ public: const uint32_t pause_symbols; }; +class POCSAGConfigureMessage : public Message { +public: + constexpr POCSAGConfigureMessage( + const uint32_t rate + ) : Message { ID::POCSAGConfigure }, + rate(rate) + { + } + + const uint32_t rate; +}; + // TODO: use streaming buffer instead class FIFOSignalMessage : public Message { public: diff --git a/firmware/common/pocsag_packet.cpp b/firmware/common/pocsag_packet.cpp new file mode 100644 index 00000000..88bbc997 --- /dev/null +++ b/firmware/common/pocsag_packet.cpp @@ -0,0 +1,27 @@ +/* + * Copyright (C) 2015 Jared Boone, ShareBrained Technology, Inc. + * Copyright (C) 2016 Furrtek + * + * This file is part of PortaPack. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, + * Boston, MA 02110-1301, USA. + */ + +#include "pocsag_packet.hpp" + +namespace pocsag { + +} /* namespace pocsag */ diff --git a/firmware/common/pocsag_packet.hpp b/firmware/common/pocsag_packet.hpp new file mode 100644 index 00000000..f06ac960 --- /dev/null +++ b/firmware/common/pocsag_packet.hpp @@ -0,0 +1,78 @@ +/* + * Copyright (C) 2015 Jared Boone, ShareBrained Technology, Inc. + * Copyright (C) 2016 Furrtek + * + * This file is part of PortaPack. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, + * Boston, MA 02110-1301, USA. + */ + +#ifndef __POCSAG_PACKET_H__ +#define __POCSAG_PACKET_H__ + +#include +#include + +#include "optional.hpp" + +#include "baseband.hpp" + +namespace pocsag { + +enum SignalRate : uint32_t { + FSK512 = 1, + FSK1200 = 2, + FSK2400 = 3, + DEBUG = 4 +}; + +class POCSAGPacket { +public: + void set_timestamp(const Timestamp& value) { + timestamp_ = value; + } + + Timestamp timestamp() const { + return timestamp_; + } + + void set(const size_t index, const uint32_t data) { + if (index < 16) + codewords[index] = data; + } + + uint32_t operator[](const size_t index) const { + return (index < 16) ? codewords[index] : 0; + } + + SignalRate signal_rate() const { + return FSK1200; + } + + void clear() { + for (size_t c = 0; c < 16; c++) + codewords[c] = 0; + } + +private: + //SignalRate rate = FSK1200; + uint32_t codewords[16]; + Timestamp timestamp_ { }; +}; + +} /* namespace pocsag */ + +#endif/*__POCSAG_PACKET_H__*/ diff --git a/firmware/common/spi_image.hpp b/firmware/common/spi_image.hpp index fa1cfa4f..90ccd452 100644 --- a/firmware/common/spi_image.hpp +++ b/firmware/common/spi_image.hpp @@ -68,6 +68,7 @@ constexpr image_tag_t image_tag_capture { 'P', 'C', 'A', 'P' }; constexpr image_tag_t image_tag_ert { 'P', 'E', 'R', 'T' }; constexpr image_tag_t image_tag_nfm_audio { 'P', 'N', 'F', 'M' }; constexpr image_tag_t image_tag_tpms { 'P', 'T', 'P', 'M' }; +constexpr image_tag_t image_tag_pocsag { 'P', 'P', 'O', 'C' }; constexpr image_tag_t image_tag_wfm_audio { 'P', 'W', 'F', 'M' }; constexpr image_tag_t image_tag_wideband_spectrum { 'P', 'S', 'P', 'E' }; diff --git a/firmware/portapack-h1-firmware.bin b/firmware/portapack-h1-firmware.bin index 548ba57ceebfc76158464894d32e523b6e1d4b99..d257526b34617bdaf2fef61117d3451d85f286f8 100644 GIT binary patch delta 71933 zcmX?bP;boxy@oA}g*WR1{GE>&F)%Q&FbF(kWng&72Ei9K85kaFGBA7u(NHm%+(dSW z8W^7u%D*Vaz|bgxDhE@8i>}8dK__u(xQ{U{oNi~vC?A{|v$!qZ!0=6lmCH@r zEyIoF+Zjg253>KX-Ll+RSFn5)No4%+@85La`EO@*&G4V$$MS6lGwUjrZ%+idRxp0J z`JX{~h1-!I99A3;j{Nu`dF2O(6{E4dHb}(#2G`6hKfY)(zHVl|{Fb5W%8wtC>F+w~ ztNy-wUM2o+f)(>;e&*Z!&aa%9n_mSpU0^@*wE zt>-rwjgI`_(W-xbc|frt0O-Qtd9IJu{!d@!s^Hm8>=Hf9ITG~aIre_!^7&x4K}6zXsOU@^G)gF`^dB}mFwi|Gc#2Z{eG&p{$Le=sO8 zT5~)2fAHaB`oa8Q<_k84n?E=V7_AtMg&q7qFmN;eVBT=^2a5nm^yUu+hFLP+a>5RW zUo&#;`smHyvHz1B|H>dY36~lBPrc^jX8JJu5C7^YH|Ez|j3CuaA143VU;jD2AEe#S z_~Z``1BMT`{&~1Dez5=f_!&b2ivt4#gZmB9OEuFEc2><0V-R3~0`3eMZH5a4?gCpG zm08^UKQI*WdNO=F!@&4q(jWgX3`Sg@EMG+u7(aCXz5kYzYyMkKE|zak1QPxi z2#QLrmLDuu0((#B)-y10=rJ%bEa-7%XxQxrHJ{2~CYh6c;GGYp{Au*c%aj~y?LF#S-OUT?`LS zM}F8uGJVkb!}9HkFoTkT+mRm+B9Hud5^0hUl`t!zm;=mtlVd z$Oi@DFvl|pY-RIiadY?~W6k(s=YN)uJPeEzj{Tm#U^bHo+wR{?9~ys7e^<>Y##lRDmy=PPY2okba;KPNn7sZ@ zpRkS5g6V+K^m&|&N=yZM)8B1loW%N(je+6Mbi>n3yCKZ&A5SxtGcpEFe<;RWEi`w3 zf%^_o27x`I3<3v483Y>irss(>%L%ojiBHg*K2Mxkfhp(z^aJ9|qKtaemp&uajWbVEXZI zx3-*#6qs)On_d9oAJCiLcb-W`VAnomT_^OW^X*}jQ&_x@VL!6?1yGPP zFfcHBOC&IUn6htrfh2P&qu%tqCdM?TFM8Acq?pgM>M<~U(VPBnFJlo%NbV9-gmB6K zWXbtXte2#ueXK$iE!-GCWKZ8H$XL%NpwGZi$T6MoGE)&#g8uYGR~7 z{TU6W&l6>Q#OS#Fq5`u8BdZ|;LxACQJ|$**M#Jg<#2J@yef+`rf&VAthti+Z*GVw$ z5{UoJxZ28Xrex?34hF^#5x=(wSEIRH~qmG#v+~%e-+#;_AU@(5cpv@J?<={ zk-!f_28NH)3=Av87z9A#+daYoggSn7V&XUw57{MMB}PLdL)E zv40tqHQbaFEcP<&m(XAkurQjgr^R@Q@$vLtKPGXe=YOZa%V12=O8LzSExd00U|?YQ z5c7Ng=lK2`KR6V`j86REQ26(K@m~kG|KB-&Oix(EC@16bM+YQepWj7p*xf3tZ@Bq+EsZ4lVoAjQUDVZ^}jar(tYjI-7Le>eC6%D1duY@T~x z2sr%zuCXJ)h=HL{oq@qnoq=JZIs-$X`t*OfjPC@t|M&eAqy$pU<@xXXhX2ziEMb%} z2dQ?@V-R2fVFd^{r!1@2a*G=c&&$Lj@bSK090#NG;l)^p! zeb?Q|u)hY0uey_Ae}~a_Au%Q`X0`=J3=A8LraMV8O`Co~pK*d1%=n3{3=A7Vn2~`Y zk!AZk1I9_rJd83742H4{42Cic4AT|L7)`hYRT&r#sxdG)s!qRG#uz?*p&XM=d*MyS z?S(g)Oa&R`r!RlSG?h_dyX|WxT}BrFFTVoY^WHGE=e=QW&wIntp7(}zd)^ziV-L1) zNHMY-{So)z{?I>Nk&(l*UgJaMUyTp@|1u~P>^o zE>%=wP!!n8?$M?q%y?L834^pGqm^U=gVwi;%wEi%njg&n3he#j#-Jb&z@Q-5!N90C@48akRERR1#0R!CT!!1RFKL+iu5pGFLt3VA1?l7P-2{|n30^Iz;G(0 zY_Gz;>2XXPw<0w^6#e+phjuW*sht)q67(_e|7)XCu_G7vTGlzOX`S9TXbOTln4erzbAuf^m zaBR9TGly!u<_9mZLn^$9bBN#-h(iRna`|w1DljO0nDv)aS%G13B8R7pfzpS`e?^qp zypogIJQWx;Kgj$Bg=K^fgMy$fGeemjGdS!64VV}Two3R&cq-I0sC+o|lSxg1VOgS> zr;LHhhuuFploc3~lZ8Dk3{*aB`N^!Rz@VBc=ow<5@?q^y1%{_-{GJ5{Dj$~rRAx|M z=rEQ|;PLD+Q28+br!vD5W4Q!QFOah|KivOSuy=wFgTfShW`^nZ%nY;anHk;*GBeDx zXJ%Mr4{?a1X9gs}gTl68tALMyrviiOheQ9kR23MOCh~d87^r^O{f`OkAZ||!1Jw^( z{(+ps=^0|6`eEHaW@Qeq$7vj3zb^k(u-C$uK>=hL$kHQ@5X(TRZDaEEcWfMD(wZN7 zet|;di9aND9W002Km9!$hp3R|hZ3-YFHi*wE2g`#bIdb#2w+gK31CpL2w+e!31Cn# z2w+gq31Cpr2w+f931CoA2w+f<31Co=2w+eU2>|E5>F(?tbM*=W7!+~>7!)!B7!*9NFeuCjU{IJ6u$_sE zV;T>e!A2&Af{okfiE%7qX4vSi34llLdO-u}P zz6VSr~k9(Sj7d384d>?heMmD zZ*t%WVv=#4&gRIGhb&&_$dQH2|K!M_1yU#H#1RIf%bYl(m>z7Je#wbr6O+W|>21y& zZr~VJ-#q=2Ge;Yr#b%Iw3<_?WnHa)0Pfv5jmx&V$23yCYdNB4OPYyLE2iNJZJUPlhbdndxBsTwTObl_` zrvLKdumg!%d2^^SP1rU)$(tjL>A;@pySzCzu^rgP#Bg@o^dcV)J2sW=Obj;Lr*HG& zn8kKrI}^j%?bE}2Ih@$;Y-eJ4v3>eHUydd=_8m+NDm$jD`EeAnIqzU%h~F`No*#!4 zQ`wH`yFhfuj_KF@IHH&q?3ixk&oPVXz>ewX{5kZP&hME1&!0mK#1{+TFk@oax!o^- zV;&@>F;D>u--X6Du^SB&2uLcL)gygyMj2hm{NC6e-^|skF9Vg z6GQXP>0QAbT1*diOy3sF;lwt5ClkYxozwpXbC|Jh-pRzUf9G_o5RM`?gRwy<4H3@N*&8-;RMv6bv%Vrbbly(pBUPN-@(6GPW-CWbk? znHaKmgCmqFj6;oyeb02QFb*ju$vxBE!Z>a*CAdyk3g>VG(OKafSxgD8+pmRlTw?^q z*t$rLGOiqOZ1FiPahaZwymP(CY&e<+G035ma5FPejkk?D@>cB>eU zbxcyAwi76G2yA8cQDFH0J@^-c^5bNIy$@WsGsSa6FtR9psQf!UE`ehkm%$#8iy0I` z_iUF-lUV17Y;(jtdU{PRrz@PvsM?k*$0S+6GpBNYfwlaDA`yK;s65Vl~?w8IX z#nj-oJu96GVRKl@~k!gb4 z_PR2T1>6b>AKL#YFo3LyI032m1h%p;{Qv&uzXF58hsr1OZVU<++!z$rxiKg_a$``K z;>Mr=YQtY~V^DbE#-Q-TjX~i9NG-_UP%N;O`9tXsRv%VR1%^N0cl`RLsKC(4@aOyQ zUjlm*T&JIF1Xto$S80>;07`Sq!r|SDJ3RPr4La*L6J7aZMsoAM-msE;-ohPV=0J7$f0eHNNfdSMzC@64$1NGXEttHJ+Bq1K{58BJJq-d_B%_kddus1E`PLnwwA z!203yf0zNckqj`HKEI2@mZ`^c`n@g=DW2K?jTjgdEf^F(O#45brJKV_q~d>r5~ueh zh6fUw42mBL|Nq!K!E<_0H;0oHs1F9UgMoc(a|Yu?25rWRiXSBZPG8r}VZb2E@p%-#Z9B{G=34@ms~ zzVW}nUQj%+z(*Jv7?9-`g5{@Q>fuPy*7?VwtlW^?aKm_ULxAz)2CkV&8H_U+lvzK> z|1(f#S!dkvB3r_`xPj$E`1HhH4rvb0zn~01@Bj3cUJeT#&7Z6ch71Y}iXT#bD>G;@ zFwbP1!TLcCtfu%sgQBE2!z=@aiy;aha{f<$(aRAb1ag>*00V=-J|>2keM}5q`=$r= zap*C>db zi}8thFnw_O&-lUUH`51&KMEiG{&IORd{{j_aw11G(*)1y+a_|Ts40G6{G-L7>?yWF z@x!0rS`12_8Y>h(eE;2|q{tA&z_i9{h2n<~zo$*&5KB?~@c6eDgV@UM6^bA3{nld8 zSUGov;)k2RTa>I;1~IH(q4?qQ?=On4l$lm}G6YF5&WvWb81QL@gpwkI;)i3uYgYXK zzW6_j0@H^Tzke#vW|-^pVXw@e|NjjRFfkMyU}89MfQf9~S>sWH4f| zFqB=P_+c)X-C)SPR)2-!hiSj3Z<)lQBBA)9>9-Ms?8<-@iXUo!>#sCoNLr!zq2l-S z50f~wEWCc#Z}`7g;2;x&!$CyJFhPl7>&Xp446L3RZi*iQerLG-|E~L=QGw}$(QnTU z40{V!O%IyPk;kYo{orJd!1^pVR__cq1!JMpLWll;-~W$Ef$77MU&4D2xD~8sVi4ZS z?aeqrszQc=L5t}Er^m1Fc7GX^IJ~2hIlLKXu$`9w!1jkx;eet-!LRR@zlHZs@nldi zILO2RDtZ(SFfqt)<@QmoV9*x4z^L%+yT@-1W#$#klmCD3{>SFU<~_xY!B0s#L#cpq zaJf^>&!ePoZ!*jaYR1Q559X6Fi4Mf*X<*-TujiKoO@M353 zmd?15&A@YDQ-M2349e#N73?5BBS=0OA_uY^#Ft1xGywKF(E8AXr%P-f6%Fg2F0Ffp0wpisf2^ymAY?c%dI;u*E~{D4&r0$Uj}et*9M z=YQDB${^3c!yv}cx&b7UKYihB4sp)MKUf$vGJb#0pMG#Qhpc44Pmb9}42ld4lQlA| z8Ge5k_z95?nf`q?hoS86A8m>!S-*dO{+CteLB@~opMNmQXvlp3&i?27_tNREb2!vx zZ$gzE{mUk!!0_Yy#UG3^1~T8jKmGmvd+_$oIUMPX?D~ILJ$`>znf`q)hr2e%AAXPD z-~awzuY8+xv(2(){`{loo;Mo5Q6dd2bpZ*I8j{85pefOO{brFZU z>_(`PxxYZc@%{VCzmVYA`{Ubp?ddlcaZEK*_@MrqQH@hUK$&T6nUf*|hf;=%c7ehN zncs@loXT1Z4AT~5{QqwH$4!YrQG-F@gT?RZ3l?)ouqb@c`aONmVh%kPg%5(ir@vdw zVdlAEHNur2w)SseV_=;q!63*W!XVG^?fbJ|tPH8nwbCpT6d5!a|b1mbrVp`xi-3>&~@toeYjH3?3XIjpY z1)}qob6jCj_^|iKbhi~870MYuH5u5HSQUPMPyX4U$fk6X5yX!D$)KRgkWkE~^!t1G z^oJ`rS{ZYur?2D)6nFlm5o zuHu-^rEr)DTy1SQG=14BjtE_kA8VYxUIYymZ-B;5!PW*(^eut-X zt>MT~(fP@s$$E$BqN4WbjOF6@mK_cVV z_v63P6I3!3GJbuZ^czI7|JG*E0yQ`?etmZYi^ze=$QvJ8@ zOuyM=6gm$`fBU``D#H1LaYAyJLf5jc0}|i9FM{g3_LE)4fZ^NsS$`O1EM!0lmtE#T zSA+Do?-RiyU%$Wo&om*eV?hT5rw%*YEd@{xeTd01H%s1+M>RlwqFn z_50=j|G>`L|BJ(uMTT+4x9^L7GRi2(eEU9c`r$1c_L5@1l`~lx;++|1Bxf2jL^#_^ zEXcHw`1+k|y7X3#c5bs@%!*7C6tcg5H=Mq9D~CRx{D%)e7iWOlwQ?U`|DXP9D~FTn z?cWR<3>VpCK5w%3)R1AE{Pp{#-wYbI7djQ0XPjjH_WkCMuix{h2X5n#HV^;BsH&LM zskk`vBx^K-w)5gdmKoo^@B8ufd&r;0O$pg**-i|LBqsMbNS>DZETNn{v4vUj>vx;! zi??x{Wm@7ny=Xf}8PkKq(_d}pP-2`oop%REGSi2{(~EX+M1kmYJ2)PR$$cpMslZ@i zBln@`CoH$D@SJ{ZCx;(n>U7av9E%x+r|;awA#Dkoop3k;DL(|Za{DkSDlq*0zUx1u z!jJFje;C2M&HuR+etcK>1Cd+vze3^1cggL%yE(KO*_wZ|?`1eT-EI#@6BEPH?T7Yo z$S{JYZy)UCkYaqb{r6surHot`Rx>dKtYKncI68gRehxdf)jvU+w!hoYQN+k6_aW?$ zf)azGzzVq!fq%B=9pq4AWlA_YebO}?s1NZj4W~=+<#0rI>`~l z)ZsO~?IedAm+XfOaA$DB$?4Zla;S01eh2{bKb)A(c8WuTQDVCODGq5DrVpGy1onb@ zkTM@)et>$9paubiAA-jBLE-=ZKIgvzgUkoVAE1u91jiCE&+y0eb*DHqSY$p(|CoO3 z6o(Xx?1w#nrvEs_aYRV=1H(@SWl%>`fkC)HU~j45^mC^<7AS1^rNAI#@ca9kUm*Jx zj=?(gpuq;|503w*_nqNTP?!K!)dNY;{WOA&TwdGHl}o zu!Qu7pZ})Io#oK5So2@T^v83B98haifkDUM_jhZke)C_T!G!~E2ads#0BHCFG{hkN z;pD&Rb!Ryg6dFK2Hu(Kr1Z>v^G#9P>H+|n(4n3xqf2Y4Y%OS-iaC|z~ISv!11AnJG zoa1m~n)7#h$2krQ#_;I}&v6JdvHqQY?HtE6#=_~j=Q%D3oFG#OK;FTKE_&KLOSbqCu__E{DTj31c)Ouu!3Lxr(m`u__Y*-T7-rsrJbaA2G{ zeeFe#Xt~Y5H5ph|$Qa6g(EG`kA!aAVv#J@*oaA)~_d z`5?-F`o&8eij3c;f4;=ATSWFl{13jBppvlr7smv?6*3?4|4cu0nL|lU_Jhk0zSTUd zIA=1?VEpj!CrB>%kLZREdk?q?9Ajbt%~cBQo6dEG!%zC~PnHK74FA6$|I2fN=Q!8; z-yIw?lQKXqF`Hg|g+pB~>lfE-O$G%9*2yv-p8Qv2V4d;*yTC8D383Wl<@fX*S2#>W z4*pkWuwq~bd!YI!Nan)tX;(S)7$c_ZU*)i5V*WKf>newgRtb1)sPT^>1M>t82AK~z z|Fs#cz#Ub_4{AR_BGtbQ7-T>_n+;bvRAi+;r2GJR@ZcY&wG0~U7eH+0zl;nT42&PX zPycw8LsrV*Ki6t421c;euYPc?kojQ$8x(>zzo%qo)bLB*jDnakoj=tUzXdX4(8QT4a_rnRX8)A??4$bo3Rn;cpoI_f4z43Er*=)VdKc6$%FeK;}w&`od-i~KqL-AxV& z7MTyPe@^GR#bLz6aALaMEsi{<2`9I&yT!4Hv0moGu^&ti6bxiOaQ)`r@L?|~T0j{b zhC!L4Z9|5e%!gmUGu=S0?)wkoaf8Fe<3AhH;0j0&BY3Q>ZG(a#NYw+Vo|69=Zqgq< zVyI@AKK~AfvO(St1~ml+PVclN4rAp6O$HqUnGaijD>JYtDKNMg%M~csElUx0RxV@N z0BUt?I6nQ;9S%1m;~yN}3Jf3}49c1e$w|q{HU^+*V^LDBQ(yq8x7%xQ3Q`JyWR!nQ z&$`PYV<7V(`ZuT?VPN>am4!i`fn&8?2j^!KGBJcoDy1Z)EKOlP_wW1U zzYNMON(m_n43ATk>p;$D1!tB6$EGj3&k@0RY5MQ`9F|N9$EKS-;5fh-GX47l4tW-t z56OR~OFiU}V@fza-RdDn9*fL}Pd}%xdC0McMdrh#pVM<5ajapH`C#>Py3Ava2`n-n zKKz)z;W5V#7MTx4Kc=sF!tshl>ci|`(`P;9P~w&O@Z%@Lj3o>#rvJWYPe1vT!pbUBV=DVMJ>)sZBx#!;S#Fa$SyxLnWV`L^;P8-Y z_}yW|z&i8q_w?zEFF33jC8yiI;Lrz^JRoY}^tmrMR_glvX5V|j4U|B+>%MPgW#D0$ z&CYTaRJH#5zU`m>15lOw@B7Ao3Jm|gZ<}8Hl0#E);x9`EP{DHb|L5l*;f2%JzU0sr z;{L^;!FmByp#1;7_5Z)`zkg1D^^zk^+58vl0}h6NpmBeV4;MKf=p-=cuw78jP+*YG zoZ+sK@$b9Z^x{_>rYuq)gnmq4^NPcZ>C6A=KVET!Dc<O|bvD;pkd2I!S?2uv z9`}=RHnX<-4GD&i-!-P^zvggeWShSEHOFGcC)2~Hi?p z8vaZd_{^cEGUY$01B>SY0|s4& z3(TJXzMuO8D()_T<}WTxKlhnKPQdd2yp`-LBtGo@GjD~|2d+QU|9s|%kU9FFd5x4O zNaVyn1%`R6cvnh%Nd5=nU-&(};0uR>S^1B7D|uH)d}#i=K$+1bnqiL9%ZngB_doU( zQXe+_Ua5SWVXjNT-W|XG|Nn88iDA3!K^Dey(~o`OC}ENMkokMM-B%6;Ziye-843*Z zGX8#-o}T%YLzOXOdjD4rd!`pZreFBVVK6;`pHrd!!&Wv1UWQbkRR5(ej2{aArFiqK zF-}PF1XUe^|B}6vJ(Zi2y~S57PD=I`o|>HW|2x}1Gv#cT`|Szd37*NR3EoO8lvCxV z{{Q~#uf}TmhFI@7Po2qe-nuIur)y6A|NZ^n7%$`1QVr4GF`nj=W4tX^m`ygB`v3dm zzkihMR$r=TkZOqVj_`Dv9O3P}!f~?w)c@bF{Z&x%Tpi>j)ezzx>ghW<)Z1@`&t$Ku z|G%I7J6$=*E1DtOC8{ORJIFI)a*%iAitx#yQ~!V8{dbwNxmPs9qaZ(TKhNaJe%>i7 zk|rliWmNzFeeK^p%Joj(UeOHCg9MBp1$cU~SbKWruXq$tpFQ>e_j!LWDZ9fZUA^1mhnsGaonkB$kbpxapgcaPJHi>+%E7<6p@ ze_!=?sngGk1`HFSg>^sNAu<#uNL*ZWrhTG?u7!JN;U|9Hpy7~eB6JU_?8Fp-IoLGe8U!#j}0{}>n?-%mIC!J#K7{!fEJ^23`S3=a$#+$9wf zmM1XiF<$^xI?|wCMcoe$B}Vn>3x9BU)=Pij{P7`@MU8QGk#wY_^arLN`#;C`n=&lU zU^8Bv@Z~$xe->S)iwX=szu*1E?k$nQpuu#ZLGjD?xc}ex9&iJV@R|rPFsOi*jzedr zz~!4V`&PykpwZk#|JnC4Fnrj`#{jB$dN;I~EprmNz_?zK!Gb~RgL3F!MF!<=8AFa0 z*3JLF>-+;(0v}%dwqW@Ged!+^lNZlA*tcf8HD$0HOBOI_FS9%3`vFw z?jXa#7H(x>V8~$5V7wst!Sl!TxSt#mERr9De@x%?lOvw-|8%Ke9D0n!(>;H2Xe+4x zHDD-!&TN@)Wy!d!(7+(^VbyKtIM=!bvP zKmX#;fbfJqJe#ikn?q4x4%h%MsFGvjfBpm6)rVnMj)KI8-C)&B zAM&Rc{^3xT1qm$%3$cD+hg*LNY(V_<#y=e5lHFiwt`F>R^EZK|-KTH-!yz7343_@? z-Te>Db+i7lFn}DO_Yc(W26+^O!S(0&KfjZ6W;iikWKd2{d7Ql{d$tt2HrGv18TkG8 z<7^4}2g(1x3;hG}xBs55^p~T^n<0Zan?alTf`$R3;{WgK{w8FArf(pv0Fapoc?LyL z2?LU!{2w9jkn#U}_kWOR!SwlmIi%I2ez!UaUSv@C`Q7)oaz;Xi2Dnkcdg1@~T(GjB z|Ev%Ge@~zO@Gplb%a8BH|EK@@%b~#Z=;w5qe;i7&6MiOTaI9vVX~FRK`=dV`DAf>eTfY=6J6`3F+#`HxA7c{R&QjukA^ zS*QK~UigP&r3S;l@2bB!R{a02G=26z4q4;FKQtIXeU65+OblPnF)@@1GBY^-XJ82Y z1PVw5293o}-@rcc|M#ltum5qVI;j6l%HUtkGm~M)-|v-w_*Y1N`1V(uA;y?-GK;cu zLxFO<8vcJ5gsNqn@%MW&SnY$q(*yo;~Txxv9&SsO|D ze5i7^8GpZD1S`+`tI43^?P(}9S=sx)A^!@&$^XA!`NzNF`}d#!r}}Y9v3&pj>i^Un zPPO{H-=LA}f8UjUfs&g19}Nca4IlPSIK#xid7g31FjJa~d;sz;C3u}%QNez!1 z{(b-TACUlc{({t={4>3dkyFC@`}g4g%&VD{z{zVG>-7KMAOC_RujxNQ$!p4QNV+=U zR&bh$q2W9e!<6$(3=jV?Ff5#Yk&#nWTH?du-w+S<|A%?t)o+jo>Zda@aSGQ@-oP?h zVzqRI2m`}J*2(|A-~FHKt--)ytewE1tjM69Y+)evA^1m@n>K?!gHUaNafrE8fd#|A z?;HPXFeH1YcxI;-82tO*^k18y!@x&Zg5cE+#sPG6PI{~I$;o}p~qU;)?R2G!yCA7nvM1}G&LgLMe}VV%vOEq76qfnoL%L!QaD-UY0=nXS1*LPEcTATg^GKD1m+Y|L-clG#C^a{(ZmkLxI8I z0Z2Q~RNl$@-aiZx%#1V}7Nku!9OO28IG~U-ZX!=RebTkZOtF(;qN%>M-5>J)Mt*Q;X^F@99=7oH|TveoxO};dBan^uv%rgW>P@Y5xrv z{(qnR^T+p<|J6KqI5AvM^aQ04uiu&s%HDiaA15ezhd?8M;}0l?b^mHI$bn_#yq`d2 zwEu%-6#hZ|a$*I!b(w^cglvDqGxBe^TCA(Ux zLDE~1L2e?b2K{zsER5Y7L(VE=QaLH&Qg4b)BFbDoLe z;BN*7#kUL$CqUWdHv@y?TLy-^pwRfkz>xTsfnni428M^w$b>{G0|Tf+0EIv`MhGnW z0SW>0=@Z#GO~p$7czRc5u+3CXP+)kLsFswL^!t0%|LJ$wIc1oN|4jeI&S|95`HNvD zX#QmF-)y(p9UN;{HwY-}HN0-fYskvrn8`5X_jiT=(*rm-B`mUkTQY!D_Wu=7&Tasy z)@xYZz&zW6LBRSoSoQDkjQ{1lIi|c$ko9Josll*1;m7v{Kc_F?;FL;n`u*d3#^1y2 z{8u+9h<~{JpN+wi;s1B}Uz!XS3>?!ywGOD6(*K|70jTNj{ZoMf)Nlul4}3Vy#9(li ziQ&O%CWeFm7#I{kFfeTV%D~|G0TQ(nH!x3Pn)vVg!{5{8I62kodw(ZoaII#a$vETB z_xu02R!Dw``7uFRk0H51z&gcjaf6v>fi>3(b#Pr*4pnQw@aOwUuv)htACy5&Eq#XM z21ex><~p8S;KtU!?}@+JXL7Ah$^bRYCjS7LYXGi^gsL@+r3xYyetf_1hjBJ@y%N`C zu9YmS6&Sdu@l5~s-R~c$De(6@6F6)9|EI~oG@EM$_hfPJBZj<_#k{$u@=OM;P|#-J znRUikGD9kXcNWjY$PBI(Q3<>gzki?h3#4O|-*AaW|tbN&^piG-(&uP3av=+^a`Z52bm4R z0=(emsG!*#@eeouO+UxQsT3FfOMyYx;J?B5??Jy57=9T1{tjxpA2Im-UF)9$!vurh z-_`ypFvJ-A{;u>7Vu2jk0%@oPpoSC3a2N(T>i>7pa#ZmTGyhHZGMFkKKz8(cLuEbBvdu1VT@`QM3?8k z>F2aLWkL+WemVYAf#Ht9_wR>)Dll{yeE+`xrvgKW!SC<0|0*z87)X405BAIV@6A6! zfi(eaHmIURHTlYa1qSgCg8!!5@o+lS|Nh?pAGF3)<`2g@1`WXr3Jkx$pZovkJI@aW z4Xz6y8UG)Q3v7nM^a- zXZ`*D?GH%B=ii_;c8mMiAArnU^8feuNBN>3?}RwIwA# zc>Us8ZNT=-I%ymW=^4 zJfZOu*7etJ{`cMRmxqG*hqOP_m+*6Hgh+ni_^H64-OaIbahrv~zwd&-6v2UZ^(V)Q zZ{Jt_*IJp&xGtbeAL z32<8Z<^NG&;4t|A{W4he!SDCaH5fDuzJ0g;&*uFiQ#%1P_8|V@%5M#Ze|r;{nHfO4 zmq5iI$Y~%9NxetFx)1)I{!f6jp#H%hWrhS}*@D;tP|=*4wlwYc_i2Bb!38?gPepGf ze~u}i6BNBg6gDUP&S06$X#6`t{6p$*Lk89f|GsPfWSPY}n@2$^k$tlGhp6A|vn?4| z6I>IT6WFIpe7N;{cLw_kM&sQH|G&HZX8|=BlfQjm|L=yfaYK)CG(&NNK%(;I1_9;I z4IDE;4c*`0J%2IJ&}8`iJ@hZ6^agn&fSH-$p#US;JBs{}St?d=d17Gj{kz9+1qL01 z@84a1gC>SHFoVJzk&GmNPxlkzlwviL0wGQXzVctIGZd1NlR(Mp;h*XAggA}r z%l|Mat&U?*WS-2Vv^tJ!1*kLnK8{UkbsUEh!(_=1?!OeWs^#P@x)m#&xhKE>e*Tx# zN~sB4EB=2!^`AqDErUUkXNBYklV1-qyA|avDx7(zz5l)!tcGXB|L;5gvt}e@70W>M z^G)WT{{H(quq@w-|KC^sXP)ja%&E$>_2=|5VNL_4IX|bb5a!fiYX3R?5{NGPIsK0? zr%FKlPh|$sK)`Az!3zn>3RxhlBAlfsOHFGF!=uc1h_0>V1bwolZR{~5dSdq=X5_&PARkM z-;i{T(5qtb{rdv2-T)kW3x7_ZC(5b7#PECi0Z~phxtO2Xax4rpoEYxPFg$iP$hs|_ zV36UQpeW<;{=47L=`3QLdQ4$IrkjXyYA`wem>ws_sm7%HV|tqyr;>*B4^TTFGHVSA z3y?cOm^(vY>)}N24CbWY-%tJ$*t`A08;%CX=>Za)9GSnq&jOFl2yC@9_;2v*J7T1! z7R>Jk%YtTON(_E|Z-Mead<}zN-)oTg3>p8vxBP^J07xD(d-MPMBXCmPG5uo(rzDHm zhl~HG-;>~!FpNP`3ep;a#`i(vyG&P?Zb!Ei}MBs1?TVIeg1-G!UU)HN^)+sVf%+V2P6Jr?|;M`jKl}CKSto) zz7ii2e_-tPt&`%Eb1VF(mcj4oUpn?%Jha>TU@%Qw5(wrvs5+6c;D=>(C(E7*l zK!br@(jZ}b0)sB|1tkW?nGzrB|CT3!Mv4Fb|8Eb9c+kuZFGGw0X9uIwA8-}4vf_yW zh<)pa0zW(XDwK``-jDhDSkW&)D>w97h{(N`& zF+D<-Q%2|OZ;*N^a4H0OmNmmIW1SPr1q}xA5BC4SD`LQ7)M6hB{!U*Y%PD0P^_P`F zk%95UvR{z#l)v8_|1z%l`(5lWavumZkhgXN^Tfa3tA0*@Bg?75A^MMVh4_bGf2YgH zamsNpfqBpWPIr>yOcMJ2od>*BBlExNIs*pr4{QHU-zLXt#_{nlNKfD2>0jhHRqB&} zfjR>Tf4+Y=`^Bip!ocCgbOF@%*#37hJM&dWMWz|Qzi<4j$Y#Od$^YlO$xlrN=GnT2 zoRbB-{~Pj57Vzd=!9AI4>fi6j|8cJP`u)v+4F+BCPyz!tGs6OIW`;G~%nXOPnHdgp zGc%mwW@fm`&CGD0o0$PLyuc{K=*n&-4NX zP7My}zaTX`{!Cv0;xU7H3;s;Mpuj1{!SYXm;p=zJ|I^=rcwhg5cvAnT^C)ua)Cd0r z4HX3Z{{Fq~=P$)hhIijr{Z?d9C;$x|eEn+x?&VM5WoCHA&CKv0>OE#2W(Gk8MutQg zMuv^jj0}lVjNmTcF|aR-phIYKa9_^+4f3TP>KNcwc828}gjpy4`9A6Y^gW84MjW7Z zTH+sg|4jd;$f?1!;_q|?B~C34(8!MXhx@;$2PtuCF;)JZUI!92{sr>xhTqdSC~@jB zdHkLJK#5a_$?)%VK4nfVj@LgyvKhapJ1BGNFfsm}o(B@$4HgA0`vr+!{4@O=NVFR) z%JF-e3a1uF5I9WV|C(;3!l~tE3Fck3_m6Qez*Js3dy*?!m||^ zBqp1CKTa_BUYzg=Dys#S_5VA4kqW1e*zfP<|3M*L@>7#R)Cez`T<`r`LgareNNtpVQZ{@{T5y!{-OIP$i$AH)6_Y&I4*%X`9G%{sdF0W*!=@#PwO9w9(*4p{xLFGF#P`R z^A|MyvzuI)Ackt#bkVcYBO-nS^@5NbI;(o`^$ns z?8Bn}I%eUkH#^)1y#a%a!PoBwzYG|3?8H7y`M=NU>qSil#@QN%e3RwC!^m>p zixa+m&;KDXTPs^TS#Y+%q^xWOhU{d)NngK<{L)|u1Q)G4xR@CZ@-Q<5DlvldL!%@k z!x0{4215--hJ})hpm?okFjQe=I4H@;aFd6b;h+{H!$V0%2GE3cq5>lWBgkJr{{K(Z zVPsI0Vq^%EW@LB>5`)GpsHMmSZe^Y@`1+mWmjXkH!PoCBzZ4i841Rup@K=F>#aqTe zIpNQDsehmbKPW6w`#3zH)<0-5r|5@BaA#Y|@A^+rHT?Da<(~=+8w`GaU;h_0RPgir zV{rHS=lA7E#ySs406=}@1SnB=m*7r)9rLPRqE&cyrw*x;eo{0?=yd% z1hamAFZl~<89b2q`F;7nUN{Ev|>vlyy?EE{O zPnT0E&ip524CUwdP5(e+C_lgR{Z(K%V({}j*I&>W%Fpj?(0~DrG-(+8{QmC`BD^iY zHi0rP%pQmxpfMCt(B|qsT}~yx?>`h64jBCWUi=Rfb3eb&hdO%pKZHrFV3Q8Gf$C|P zSs*uqFvLtqP&@ve{!f>)CZr3z28x-1!?+l{<&-&r{{jcYhwt}(qc&j0K1@YAt_D<2 zLK?7Q9~?o)tDzoOb54&_%*Xck<17V+nR4E8Gacs`oZR&5y9rq2CRpSESVS8vA}J42 z^8_rS1Qv+|i*Op8+yv?+Nc^5|pwB7d!~0u-VZBqQW1xYj6G)u(x1qcOL%&m}V=GkT z&o7XjH^I7hLUn)o^)O3;fx{AH$6Kh_i(k_x=yQs2-2DYw`VjSR`Wk&sIgVd{LA|&8 zzo%c)=giSN@RxVR@9#^0D>Cp;m}AJh;^+76V39c>k+m5K2f$)$!D5qsZ_hE{x{nOA1GegEF{U&)hc#@p`&f0kx5Xqa5+ zRAiWOlJ(v9vY(xb>@p`=8E3rvUhtDmhCx^Q0=x2q> zvykQc_pSe@hZ%DkFx^ zB}_Q=m`Z+6_b}l!V2b`dy~>1Bhr{G2s57zg*YtHJoLU^xVBU;h(;t9%OkiI9ujxXj zoLU?&e}Gh`{hICq;(^w=i+%9@HNDJ~Q%i07FOZzcFBfm2sgDy}yp`(B|i^=`3s@^oS!Se{9GtMgG}WF zNJvcm0a?8d@&xFR0pt<{QhIFpufQPsq45W(AP1Ex+uO`J1(@o8eEA_$&+}A42}a3L_f4>`n`~Elh5#uHx7ed?(8u=9Yp!k2fofW5&oQ42yHH`nK*I98&q|NyY z@es%h92wufqw>Fhzk(#skn!hx36hgQ{2VlX3KE|)gURFMrf=U@{hI#AiqockGE@$| z9De`3?k{RNEc(IpKVl$3?8Ca>kaAe`!_EKb0|}5d-b|j5QBBaH6bXW;{{Fr-M2d}p zQG4Q20gek?-gBK8Z;E}W{jIX`bP4vT&e+mq28$b?vCpdkQ4QGIW+F!<*pnaZM z|3y}ae31V;{gVx+mssZ?4rTV4Nf}HtetkdvM`R`U3Xu=r|4a|E<&0pO^=JATTTUaL zAK&-?X94XZn+Y26v;5DuT8V*WCP>HT-+U`XKXCkGQ+^T0toY`;_uuJUcAOUVet#I0 zcE@qpDOj_tVw@q|5Z3VHd&_?|@TzUldXRtrlo^bmW>owJCHJ#`xlB(!=LQ!SA|L+! zG2ifEFX(KA1N_VkpiLW~WCp_@woV4mnln!N@qOh#234jBk2B{wY2R9yrNQv#`-eZ8 zo(yb^N?B|xL_WOw#k4x2L%M@`)osZ(NsvQ8L16!%k%48!ukXgcL0cfiK9v6iZF~To z81U=6;cuQ5q95A+vaJyP(EN8gmp!KvQ|7xZIWx_=%`jVn!}zlV zc(vW+H{TchNzP_tWS>CuK1*aI6sd(Ep2dRX~Se2jeWZ z)twS;l9CN^4IsBX{>R3^v663v*ax|ve5;KZ*k&@%`1Sq9FHpeh{^eL9`a$b2qv?+4 zq8mO;KWxt_%Jlf}^jr3vHd!Jcw86do-`~GOo7BI*2mN7O@%#I8lzuQ|vXtFJ!Sxe<4F9zrS07)t~=uzIO{NEOa4rigP!JgZ36o{{7wH$MgmVPBl=~v%-N>iv!fC z68$jy&-7a$UhYrONOack={$~{QuQJqtbclYF(`_y5d9$cpOHaeh3JQ_zwVwOI_y6q z1J?@C4^4l$RTH=>bUQ;9o|Q^Utk4LG0lF49b-mQVe1% zL_YBTG>4k~;UC28n7>>~jEW!=`2R67aMiC6{SXW_UL0(^4%m22u<>et7?hc3LX3Lx zLltV&X{b@=aHC%Rg*a3XYSO2FAcwMpO=1C?#Q2A0CCI@~|BJ0;nDO&_u@#aaa;n7S-`}JDimmwkz5XA_KTm#ZFvx=YA_9WU3|WHA4Eci0426Qs z48?-X3}u4M4E2J{3>$4284lW_)>fcBAN?DcC;s}b^?!Pg6Q>@B)-O=%l!9H8MQZ?4I|zaRg@vEuXhH-8nt zYv2yJH3%^?bO|yu7zjanuZ^~h42{+Z+d-YUGYTRfvVTGP{rT|pHt82Ay{S*%=*%g} z)b(%r8D~x-4p6}*`hoTLbT$`G4UU4JpzQtj*K{)%PC2I1pVPx!IMp;f!J@~088iGa zW}19LS-D|?a&m))^5O;o<;M+48GJLDX8Z(=k1qk4p$Jwz@7MGzE}RNXsz0ZHbK%tD zxc&=da>=jh8m^os^*_Hm{0Dj2_UDK1r+-*8uquIyL*Wmi{}mY+XZ-yB^9M+^+b>N9 z3kL4#AHFC4WMu%U;-0C%ApC*pzaj(3#%Ewv#=lsVtQkN9wZb31{!?UNp7HbhO|XpG zFGB{-*&9Iv2j2e;A1CmD8!W%Sch&z^VEFuf{T~DHI=2D=W`=2k%nWk{nHe?+GBcbI zgoJFNEh9rBTF8D;a9|MmpamUMIR_n6`TafcCn#*6p)BP94T*{|@G|`RZuFPOo5NT+ zL773unEfpK;ptIsoC03Eer?W3%2r_5l#rbKIb%`wr-a4H1$&X}5Ku1vu$7%*;szN8 zmPxD=e|=Z@8|=-#mc!UO!J0wCSb~9Z@~`jz{!HKE#_7fJ0vzzIKc};~bE51-~!u5N9fxQ3dwZb3u(p)DiBLTg5biMEUk2a!S? zx1=A`2kul*06?&;e{YG!$OcN?WX_o;51=c@PE32C#Q(kukT0xgLFlL zb$$BL3^nDOyW(WlN%5Hj|C#L~Z#{cOHAo_a1`V_(X_JQ>&BkB7ATH|WV z$gt6F`aMt1ih9uxhks|e8Ouv|7&36InA{Ai{~1?mF#P%6{)=(NukS9ub+!ukYr+6&QYfH~Fo}AmPn3{c(agbdA%O@3VgJfyZC?XY)bF zU-&0|{%-$EgTWHC^y~Yje;}u)|C?^)%{j|R^aBUni|i|e zn}2;5_><`d^5U7F8E(J6cmC2b^8|a*e4PQqukVe&rvLNil&Jsw{qcWZut)f2^Flqs zH|g{Dj-MI~&fvlu)Vc*_@Pi(V3mMl9 z#Y0+wZlKy?#z{zX6S7rU_`}1$)A#vsDmWzkRA884@cDbpPtdr~zwa~tgO+rB|8DXZ zWP%~ogbPB5hAE^adFMZ<=-c>rx|}bkf`I{eA;|adJYZd%P+g$90hDJz7@`Zb5JdPx z=iljhzMM*N>^~J462Xf>9{qs~&wT%W_YY`z=KJ@Xe?Y@C-@jk|0~((B{{7+~ko&%W zKl=ybzLS4I?mGtV=zvO0gdLzk8Q~9}f2Y6m<@68}{V@3l^8-c(2?o&*$9{l{b&(HD z|EK%-aaz^?0iOj2(FvM3M)Z0P%P@PeYBSwn@|w*sBci}vL4=vXKo}7Q%mxfwSv5Fr zy#DU>hnbm~ot>50o9O|wH^T#FZ;1{D@Z>Y7<*5MGQ?QkffrUZnL-B7`hX3C${0F(? zhvavif1uqjH~%xrfLe2=|3GI@egFRQ-*h>DPAR+JpusM1LCpegj0XraGk_d&0ct47 z;UHYF6|rvO)AtwPh-v*Zz099ePwXpn-Na3>Xxg9m&wuQF;y-Jk3>UIXubp?8|zecy++15V^aDbfx&(GTx_Ksrq# zA0#n%!0`ogN@VE#W>98UVr0m06aHZKQ^YgFP2@w=e?|sSv%T%_FGUT8PKMXt=l?cP z=2^k4B>X|;C(kN2@VJiuKb{pLA42|sR0jS5>GS);^nlg#|Mx|pAOcS{+B@+xyl`M< zSRgXJFOXBt<>4=l6(S$>{xm4hW_T>2$)Ew=TT}O6Vvnv66kpkMGrB*%QCdDbJqX9Kb)^&8~W|KIukzfcAZ=4!0`@jU@7vlc4D z_`gy4Hp2r6kW4UGW&u>@%fCLjj2l>HGF0aIzu9mZOR!Aa?`n?^-%tNz&|tXu=0T-* z)pX%tPGtq*55_+0!Z~8ub_ca;#=Imae$X z#(Xu=Q(%S22lsyhD?zcL3=RF~KS4Z`-#n|h!8+}Ka47N5)L0?>q38!B?5=@TDF5bA z;scAP{eXn`DX_TsZw@71uz1uDjg`zZeth2t7U%xWp~RC2mhk%liONl2iT}U2R+@Xf z|GxSUi(Je_W(HOzu9+Gugg)$sM#g-wsyDxs890@=!7}Th5itoYbN`nzgCYa>EUp=^ zzkmEaJuZY(qW;KlMw3s^85v|&{QvIuPsLMag~*3Ze;FB+R)~DK_gm4MQBf)u#Gden zkpbl0E5BtuLG*&ZjNs1AncpDZ%3mNg%YK1$FaBk~Ahz=0pQcuw!QMI5%A_lv6?G{devE461Alpk^_<7lZQa@5R537_=E)fA{}AJt>q^ zL*e~*&i~2`Obno9@UOoI|2AS!W_bNw|2JqZ_x1PJKc=q=S^eYtPOvQ7FHn+$$bybP3;PRdTL1XI3M~8mCn(wd2kZU+-QzFFz8~M` zfaPBPoNgD!sUr03?*wm&1my|_ZRU$93h%zl{heMC#%Wfc^@D3B?*#r8pxjpL!@mNw z4Q<9BMh4LpA|HRw)L{7W-Ry_)3Xu=ZKXq4#d}#OyQd|2Iq_gU$^a_y=@!|{|NWnB zCL06D>DT@#GVreu`Je@Lc-SvP29U!~{ewAN73y$Fs2#4qc)$+d`48rBk>AEEnP+_e ze&RpK;i5lv>sN?;5CU7v54M&E>~c=9%h`T{tYiMkIh$=3$IK{aP}pqwrwI<57r!B4 zBl3%V76;gp<#0g!4FXA-2I`rLi~YZ1%tBZCKe^#6+#~Z zuKX49Vo(GrssGK$0CLsqpP<0~{=FQm{Rmk5!5?fs3K{Rd|NRXjqyD&V_^=n0u0O^y zGEDJePykI>gOcxIk?GqaIMsMg{%2(Xop34g!RP<<7ZIEqO#1()3q^A3i3oq-`_Z7x zH0w4a$4a&p>oWvDnEjs~63J;{*ZF^S2IH*RQjZfDRTv*ItE4z_tPuS0?jPd=CY2N? zCh*Xc(1*1D3JjCsn^w2{{r{iAfyY6{b^57DPBo_W|E7P6-+u;; zvlls3xE_FP6Z{|swL>`xWCsh>j%qYJKL115fn>wFD9$LR**~XqMRO{M6#Z9VU# zQzFa^|Ns97osDf5&1oja`(FXPj`HJA1qPuHb^oC4fv#vyC8orG)7M3Fs<`<5V^C&B zY7Gc~IQtLL8rc4GJGeEl_^059kAFa`Y5#ve`U}!Bco+_88GH0Th-c`(oC z-}H)DP7RLjV4lgp=_^3I`Cy*Rzv(wXDm%bD)_>F4;y|MZVBXum)6GD<2r%#J-|1-} zo&%V-_wV#+Af5)8xAgDyV{x2n9D-mTXr&HF?&oii%gX*vSBd9T;dl(@CH$Qp5YMT> zaT?6?_&dEJo>Pru3z%p4cltVz+#E1Z^6&I}Ah}jBkLmApo&-)cjyy2$^`Gfh37k@1 z4kFCpcK>w|X7Fah+ak;iPeqs+-it6Z{1RbiU=w9#;1^|P5D{f&uwh|fkQQZT`2St% zM^c8|YU!DxGroVf0h_n;&-8g9(^bK|MSrHB0rB|2yzW2Ke3^N`~FGJ zmRlh=S=3u`vZ%MhWKnOBj>~^UycK4F)GN+nF;0fLK1i>Mg)R9^h&SB;@?-E4XF!?YrGC zNE_+fcgtV5p<*V#&OurFzYaoKTE9R|Fpyr=Uyw=gZ{HPuff{WfG3j5uP<3LzKut-I znBXr3hO-9$4ZeNnssE+GFcZvV|E0i?3T83=QeXfrm;d(t?@tAWKL+2v|NN=IaKhl* z_pd({7^WC}`wq&;2?pQ3gO=*+7<~Kw@+Sv;!bs>t5qJv#D1m`O4-}f91cW?o1nNLQ z`eqy{|3PI!zlWD-fH$DV@`b zNB9H7A4Ud{b98=9|B=pVQ!o5s%5O+#iQ^Z@zfXUFWFP$iIrjdKOgE6&;XeutLMtr{ zzI|^4d+72HQ0MBx56KM%dxchl)UWz|=lKD*Ei4c(?POtK0B!ph*ji&C$ngF9ZtzM4 z&}`fp14gCq-#7n)%+IlJWtzS@gVS842;5h{A&Tfl!$JhIbXxGk&i~WxHwOm!2i?lWpc`>1cBu(@Ho`)|8%)5PK^kV8_pPf{eIxT0z-`fWKYe~ zloSJ@57+;LcCmc?o(1=BlbXhNec0&n&F#EkYb9JJONz`f?(>YF`E;6rXRRW#k#WMZ- z_ZdH!SN#6|^+&c_@ETcp1qK-#p$}&N*MJYyknlE6hz7R{62zGq(!`k=a>SV#c5pK= z6p1r4bOFtmUINu7bAOPrbEiU9+|1aW4D6^RTC)5Mt> z7PK)k%n@g10HyRr;>-*U(`GP$f{lGE!z9MZ%^9ExE#VIxzo#qYaMrMV{r=$p^aVMb zGAu8@ANW80Kn|yl#mZj-dk^PAc8-J?eE+@>jX(1j=ny{!Wfo1gi%!|IoR}|w_B-_b zny!+|nZoiCv>&f0m(xt*+dt%m$O2ngloS+&KV1GZ{Z=lg2h+4a(^c{~kMVf@;Zih6 zV4U&t`{_T^zvXf2F}ePmu9nYPBP0Cb?Qez|j5D>o7?fXr|NmEjL6QMf?7aN`^Y8Y3 z`J5VzEW#g*e@}l^z?mTT>W_dYC~vU+fSkbo|GVQqz6U&>8E!%!{`{YwQOGGLAoRf* ze0?n_3OSXSg#S+8Rmf@Pw*N1$_tR9+5Im0u*M}EB7{T)m-@Y^dQ)J-q z)-mLq%;C+pf@3mhlLgy~58wO$DKKzvFxU%9*AXHN3XbWF3?I{`n-y{Dc(kFIwH$8N zslSR0oG4~Z{0}lK3~JT^H&FTqnP!;I$Pkz@eN_>sic7#>9&cU`_-A@uF{hlA;t!4)JDeCV2!65#j@4ukIW{{kO z_Ybh#|L>Lm6c|2yxBEN&NC~Hk-nZ{n|9PQqIQkQE+yE$-t`TPjFDw3-$H=fTjgg@- zn~~vS+H|o}&N!y0Kc<(Ja++~W{AIu(^g-{}^ev^F7953O9%z+nDW{6q?tcc#Op_UB z^Q{BT2hDZzzwqt*#(&fG$~d)54*wFEot2fHBsg1O(yA;2hSf=elRkXU_@kX+!7w|6 zS&@12%kSTR1}H~5TQC?lFe|?N&h>M8PZ_6@!i>M59n{~xtAOoV`IBP>qq)$Br9VSV zS3dvtJ@Mc4b7hFVN7{CiqL8baG76yjhEDQ`A#hDobOBfj@rZF-E7BDgdrcbvk=hTRh z`LoW6^+JfPc7_InbjA$#@6SOe;e{A1P8Ry$1|AIl@cq_rP#8b|4Oz1SvjMbj1ytg} zFmlP4_+$FMa?WKEU%pQPui^)(fo#EMG35WS=>PPZ3Qj$hEbw9!4GCNoiNJ@O|EHg; z;FRDJ_|OfiJwBZHKm9`mr;d=&2aca;Cw1yoa>_Bi{5##RlGDfF)W0I>N=bzbp$|vF z_Y;5);@Ko~Sz>WQx%8XwhyPYNRXJYYw9W~1B+tk1vwu!MRmrKx#QcByuS!lSv8(@> zW;4%X)aJavFpF`vCIiO`{tvJJP1ma8bQ1EAUK7dxSRBiC?_Zv3a#M(@c6F+!(3>ew&(Bv{|6+P89;gcti<$7)tpK)ssEI- zK?S|ghZ(;W7?QI!4478VaA#T}_<`a7bb%U96P_2}|NLK-@jBzh_Z$DG2h?zi)eC%> z{oCJDYlYB<{XZEQR8|Onc>P~%h2V!1|5R3jL_sH}sv2mm{BQ8}d){A=%K`a>&Hou}03EP)UxJyzRcZRVT22KX&;e@yzpMTi z*c%`@{Z=h!h}(?cig^kQ-cFH@9}G@z`ucqWoUaOAWBK)aJ6t3ZDpCg#k(=q50oGIY zdwNM7XM|DUACT+j{S{jA|2t?ShpNGU1EG~)zq^9PC;bJ*0K-Mjhl&h5D{Kt;KUn^o z{;!TxjcMth>1y?yN*Y2RKK*7;E>4)BJe$E%_JstClF)~jzb7hNGR$UpC&6LJq68{I zAN-zPP|vBQBJ|HF$ArRt^s zS~4)`SzmN|0BV*Cefa%@ZLOCl$gThW3#|gRl>UG3{0ri<{RQPEmJ4h%L1o_azr_#w z6dD)=K4|@6W$05fWYA-n#31xx^=}(*o|PQOK(<}|!Li;FY}SqcLaPiJEExDdO#Tfr z>%kxEN(OC?3mntK8#py(gg&hMp~=8B^pANK!IU{LnlWAOER(%??6=2@iU(?lEIMs9#!MuCFjwu^3L^FI3i1ZeiHqqd9LWH*# zgOK8XgVhNizVrV9MMKKp=@l)U3iSdXUj1ZekWi8^*JR+GuslKNgVRp~21SPSgs8#mKO+mXYCL6(fTnC~Z|S zG8i^8g7+FPtO8B#fvR7~(VVk77%~`*I5UJk%=j^_jZ=n2=tIYk=?ZO}S?V9YAN==u z6XRqC4XKMN9s(a;{a|O%Wca)ZblJ?FUm6TdE19N$|IR;sV;iTel)#7caA~Fwk-uTm zUw%w~(Z;D{n)QoiwpKRN3YJOQ$*i-pvRNl(C%^yB|A$clG@QAFkAY!f2P4D74n_tS zHU@@+9gGZ&os84Zzu{1vp3u(8#U%7&dQLm1T$;d#!XL~GZfD#MD`iL}Xe2N_V8{^o zkpBa8=`6%oAX0cMONLUlVg{p;wc&yc!4KR2D`!Y$GidQ$kYZp^v@{Z`kYJc4VQnN> zAjM#9#5hUAAUd0I}AOBBZ*TJbLb`dI$@D2Zm^Z%!R>flr|i~VU_q117k zVYY%hk@PX6-U`R8=6PEI)) z;a}Nq(jCu0O>^b+hQ$qRGdZo3GBg-Ie`otOy`_`WOGEGj{~u6M`t|$l9|{bD9~6FM zxG|auevtVQV)_7lJm3mm28IU7>EAjzEi?o_+y|fC_4PZb^Dgk=!+(%!fe&x~BdcC1 zIX$e4(}=_QM~0gKsBt!-i&IL*2+Z65UnArH_a*;9%_5M=mn4}Pu1Zcn*2S45Hv2E6 z`d3hrl;T*+wt{V{z=wzbr`vUN>Vyb>VEhGY5($1N{lT*mlt~%?f$DU>|DdLm_kWO0 z9^j3cTmOMp;jpdDa1;C>|Le(fP)dMd&{R5`w`vAxsk-FP>HE4lwRpaKU-X~b6Qp|I zujya9ITg5A!6!l=a9b`pU9N{Sj;ZtS^tv8SDW>SZ(`WT?+HigO&ivniLEyuJf72iI zaGG#^`Tpb|h~M~cx?C@(8k6jg>2AH8YGymZqGA8C+>{xFYAuY_7^Dgql&#E+3)p9< zGQ9ep`Nz_fok62Ofq`{4`^+dAYXiX#=l@J!1Ty3Guj!|HIpx&8eee1YD#q6TV42OT zD4k)zFgt^5^7HS$e=D607&IGL6`y}U_-8s_AEye>=kLAX#ZX_rZ~Qggu8&hpYUwY| z*$irYle68VYkAjd7x5@aP2-)y|AF)G^t?V!DI@Fu5-Z++Px!$x6SSAGk7=bSAvMRYRzYykx^ux_bo+Qs}I9{-uXtB+HTsr%pbTYa2TT)IC%OXR+O5BxR# zUmvF!)7C%J#riqrqMrT(nac$}jr;ju1@OxJ50cCbuo(Zt3+aj+>|_qxVmBj$1Rn!~3LgVQVizNWV%PM(eom$Oci;d07x$9z zR%3V+Anx5^_CVs@_oM&Cyg~HA|DxVcB{Ue`eSh;GvlGMbU0{%$D)2$+Let`;0Sdtdl`r&&h zbp1L=48)H`;)6zOi;?ygz51S3kG4KT;DapE`V7Gj)1d1!1U?-6gMCpuCwN&>g~9vp z6~957q27Nl`OS(Hj=o@zA8-qhVg|PhKn{apfvxauZ2TWAe@~a2#3{!l`FFbABu+6g zUih*S1_lOY&`AcLzcc@xo;8V6iOKNS^u9@)0X`hReq_G*F8b$}Vkhg1@18#yl)2Pc zWf&(Hduqr${~q{AAC!JizcZQBK(Fv; zwwrV(lbHoWc7tBS=kF{3urWY%J^81%+K548Cg^IDc|Sm=fBrSyY6_MVO+);S*>96f9Cfv^gl1F@VOQ zKY#!EYx=#ZoGvVaAGZFOt~QO+iRIIGr~lJ)rg2Jfl>DpNP_VbbVtU^+PO19IzZjGm zW-`uV^!W5W_cuHIsDEMbNl9=1D>7ubeg59?E8C4pF)}XO?N$e~N05Zjrcd9W{R7>> z20D2iWIJdHv^oQWsv1N4hOgfr{L%E*Fy}CSny8wTnxvdy!SMC_wLhxfE@m9Yi<1l( zzJ5RdM;UZZ|8(`~oXYj9ele{8?afkPko0C+#X4Ein_02KfMqh%l=t7~faN~^=1^do z$~={2D#LWfY5X4=f3PxeC~=r(x-m^)nF<<`P+(wM$vpMTcb$Kb>0>nEcgO*LOe-H&N-&17&pa`XH|AVduXaArHni2ls2d*l(|4jcigHuig6yl&U z`nk$X8MnbD)`bYrKBHIP{r)FpeEaVFQ(*7(H>q4Eb}zq|p&ghZ@Ie>a=m8yCF7RR5 zA4uaz;KNPK12fjmILI zufuTnzY4Q*w(}CN-x9MWBq|tZKKrisZ@S5BPCX{Ef74TDb7p~d(_fg)If3c_pXo_+ zI4vZK{&;#bPWTb`{JZIYMj249mHheqJNy6Xo91vPFxmZ`E;5(Xgh%=5bzPViGr+9=4EEf#u!z%m1fWE#wR{5cqKK*AZ_khQ|_y44_re z0w1pZI_Pc4@GOAE_<;nglE8;^zxH_>GCYv*P!jlX;@7lAoGN+(A9{XiGVJhnFnk~( zpd|32^_M2YR__4A2NL{B0w3yrX)0?BcMc^$u}3oPc;a=P>zq%Z$>jW^FK{>jze%!+)I ztG#)qfGWf#e|T2B{r>ZB1z4`!TV9cG@@McWE}kjxzE1_qzWO`8W-+G}%e(Kt|4pB@ zm{TT+??du0HU<$T5i_2ZoDwV; zdV-Gx`o*)7VaDh0M}C4_B=|ejlR@Ft_oYAQf@}<6(6GM1pcvpK@L|u-=@Lsg_i5Pt zRe&Coxj>$oVHpbp!!Z^HhBqt>3}0Co7;IS?80=UX7!ItN{%;AVR6Xb{?j>vt3<>hg z4E6HN3_R=%44`F9ply8*7cepi&Sqqo!p^|JxP+0xa5f`@gETWkw>&dLzdSR8Ln;Hq za|s58XDkd1;zkS#G3*QsDeMdk4`(wn9Gnf!ilCx|fq_95y#0@bfjL3OgZ;yVAMd`) z{rjwZyPg3Qpfi6;fLj_3YjJ=OplbxQWp%;`?wNXSXQca6yK^2l*e$8Bz@KMvRj{og>DJ z{2#>rNiZ<3jLz0D0Ck4Ge)sz&3~tp--__2c;>Q2M{U>sVi2uWTv#X3kVw&=6dd3P) z4Vlm1pZ#N6J+I+zgIq&=gP1qdOz95hSr4*5f4}u_`kED-5=>|RO+U7RQ;l!uKgcyD zpxWVs{PbTdIDNQ2eV6_ZvMuAs_JEa~9*kVzN^Bn!gTS%ri&k+4F{%EW{%sYfACv2k z>29kz<)lo1C^O`BxEf1W@R*rxV$c@6V95YlD69EndfjSH3#KO-9nw9w3ahT?92B(|1;d)et-BwfdRDWmvI9lgW$^P zv(|EEDIEQy%|!kBfk&}#Vxb%uKlu?@2tgk}oQVx95nJ7|t;9cL1U&Of0Qd>>B! zo!+;OQ!Ppq%-i(0+goUr=;Us1W<`<7C%|b^Xv*8~&;ALmc>CS@N1G?B64wg;4|;#H zKs}Kf2V<#%CU52$i<4h`-|}0T!NpjjfR#ak0d#v{luWz<{|CuG)A`nO+F8u}!^*&; z#A7P7l4k2GCx&i7Ocy0#{-y5SSBAKv$i-{eJGZr1t}fH{Y%P zZ&tp|@Jzyh;mvmw#{bhjHgcLc1%j8czxn?3A3HpY^M0rU&y`$Igg6D1y+H#w&>{z1 zL;wE{>QnH7F1OgXk<+Q3?*rc-1qKTnz7Je~U>Cp5@M2Iv=!r4-_c5O~gfs7lx?iB3uAY-rI6;ASVXHiY7{jy;EDW4V42p~^ z_&m-=IY* zTq{_Vct6PfV3`Rr=hjbtPY`|Wrxh1i;L=aVl>#gNf3E|LhOUe;`1HN;x4;U%4{X1= zR`7jb{>`$2?*qecu?-jYI>48bOxN4OnZ&~P;o0x$Q?_s_$nbr*@_TjW=0v7>GN$jI zt7fD@PrTy$u;SPB3tKpCly?4OV-WM;XW;#?5Ww4GCrN&NTppzWM$Tpzz*`VSKK|2e&B zJEsoQi(k_>K*Se=#T9-|f3TfXi)q)d={!5Y>Px}mpMFfY*}Ii!Rb@K=sz=qjgpPAA_Ldt)d><4_&)sn z$2A*NR%IuA`tJQ#V#fdPC;nI{b5G`;E#_J5tiW(mg71Uo?BtYU;rk%@WBR+DoHq4*A0GZ*ow+zs#ze;S z({t&SEHh-LeEMGgS9-;_?@NBZ{a*Elk%48#r|;W-zx^)qhnssFdi;HsjOxYd_z9R{`yhQ*v}>pYiGYxu0*p`}_s1O5m9B>HG1YZ@ahAKi ziIE{mo8cy_BBK)Lj8ETp*Z;I+5S}f)LT0kOcZH$cWI1o?>9UjGexLqBc9ym5&HP*G zaBWhdUumtJuzU2fu=?^eIwe&_hh$N;Lb=KO}}74nvzE;m`wTXyna@Yz&vznA~` zuPi%jHh3{1#Dt#_(kp%ifJ~75CA#97n z6mDf?(1b1l{H8pc0dzRSo9}wR9)Z{1efYle|5Yf9<=+7)%l!XlDC^hXc~F+_|A|l* z=qy}NiTL5W@_z+}z2J$IXMYtKGQ+`4$^QxrreM|`@aZ)lzE}JQonG_d`xWq!GH<>^ zj>-M-{mfq$aAE)ddpmUe1C&BQMLeXj20F5a=Y!|J>Hl_f&T(t{3+kK+Y~{-E&S1zW zF!=TT=6}#?7{&|^B@IK+DGM+EK==|$hG70fFrOjg^Y;??^!fA&lAHRMz^$}1qGz3-J2mVYyu$NQJ z<_cI&@t-0C+X_cRP|NccIQ-aFe*At6EGPVrcZ0!R&Zt0JY8rX zXN$(i@5%o`tE3XZWGtAB`hP)@+1ryrDuc=UVgRV1p5Qrs-#$(?JJH{Z!PU-O2{}*D zA&jd3LA&!le&_s`;l}%+@9%S{tTpETWGnM<6H8(wj|`Ofio`h$aGB=qyQ z=!&o3!~T3+XTTt1$NORCukG)Sa4Ip@Gbl4NINYgYWmw0=(4frB(5lSL(51}GFiDx2 zVY)Ii!(3%%hNa5P46Buy88$03GwfDoW;mqG%y3MZnc=iDGs6XCW`=9Z%nbLHnHioc zGc&wZW@h-R%*^mlnVErAg_(g*g_%K2g_%KCg_%KBg_%K1g_*%fg_*%xg_*%gg*l$V zU4@y!M}?UoRE3!#T7{V*S%sM)TZNgSScRFPT7{XRNrjoAONE(Xk_t1!OciE^MJmh; zt5uj8Hmfi*>{4N7IHJPLa7Klh;gSk7!z~qNh6gIl3@=oe8Q!ZfGyGIp{_YqjvqZs9 zknhj_1a;D9OUN*QDo5TAyg#P1o#K2~&#cPKz^ls4Afn35Afw96prXpmpsC8tV5rK> zV4=#)V5iE=;Ht{Z;G@dS5TeS=5T(k@kfzGaP@u}pP_4?$&Ot3YP6GB9jYWo9_T!oaW>WDhF?!*Nw+1{PL^dWLf#gIO6EuB$RL z*swA%+*f60=wW4Gc&5tCP{PW<@KKeS;Rq`O!!K24hBd4V49sfG41ZV|7&z6K8J@5* zFbJqIGnlY3FvzGeGsv(pFes@pGvu%_FlebUGlZ})Fc_*agS)YoYRn8hYzz!`YRn9G z*ccex)R-BLusJX=1gbGJgsVX!CRL4@p+t?Dp+b$Bp+=3Fp+SwAp+$|Ep#!8@jhSJB z8Z*NbHD-nxYRn9C)tDI;sZBRJ!>J@<`vVllvwk$L5d=3rcs|_uH$CGFryhsPUx^hw z9}fPTKJN^t64!_CeE&iG)&HiSI>V{NAqke9_HX)^Gn{H%AHF~Q2a>J(H(li{rwYeu zFfZfZ^Z*d=>K~9?(7)+5XE~KP4uE;K|E4cH%c;T90amH{Z~C>foLZduU>?uEtm$tv zxWpyieBbudf+5yZ!+`h0$v+khF`kA7ydRGInQn28)25#FFDrwIl8LFrO3?{R6L>$w z{;>eB&j0v*!!J>AXN&v8??2YLHMwqHyHo$9GR|O7{`q~*?*%B)xCp&u2F_fO{ z=q)i_YVzyv)BagANX=RTo|l%MB{eZJLt;f#g7n1K-z|SI&0tXc_&xV0^9&)ykKZ$Y zvVi#Y-&21=3^MeVm@Ylp&|7M92e`)m^!>*_i50KE%l^>ymRKP@SqE&zDyZBmupIvn zh+Z|YUNvv2$@`)5xBf}2c=i4Ne0S+r_+gpr|f zKO;lneny6c`xzMu4>B@b+{eg}xSx^X;C@C1#>0#ZANMgb6z*qa5Zuqmz{A48pfmmB zc~0s2#$Ru~-~aIkT(!OWe(L{oDC_9|TgocFv!Mq)@qGCD=d3b<_wLUQsJe~+7eiTV z{!c?varaLnRD8kz7vPl{Zw;OX{5RnFaN&;v1L*S1_uqy8Dg-ltwgbEepI!%AmH|4w zuE5~ucd_4ybE3FEya)Fq54eF!%^xQqOD{m38yJQ(H>UhoVBiL=rnz^4bCEsI2S0F6 zlIMdLyeC=Vjp#|vR~FbR&3HiK{r6wszMH^S#tasvPQ(9(4jI3{XH4IJk#ljtKeWyp z&xfr@oi|Wl3DU&i`4CA&=k0^q^i7vI^>n8HVdnWP!MrNNK%gPG!IA-V`uN)a3T9lZ z4ZJ`H?|l4j_H)}Nt`$5Vx_(dRxy&h3|M@qFSMmGx_htWoDKRKdVtD-B@ehMC8|duD z72F@Pe{ii-VBq;s{tu)s<+p<(h2^ z>+iS!TPR03^Lk1ca7uv0wErnGfJ{>V&*{yz@`b#_hwra`f&@Uv9q@cG`3<^d;(;17 zgO?IBLxuPBW0yG<#JE3rgAYad_x(8ZZnsb0i+)Z2bD2{~fcHcHPfgGSf+5=q-VdEW zr|Vte)Tod7{okBp13`En3=E1OnZ}yo8hqp=;nhD-+6vBXvkd9 z2g~LCWKd>QGGyRb!S$iwKgUcB2HwyQDL+BhFZ`teRucQuk^y9F~K|&dk87&dk8A&deaJ&deaLKE3ZMr;!!U2fyEZ z-dhx&#c+R!{K>*#%)qfqli}O<;J={rC>W=F`d;^w5nMR_|NikG$n|2sm{#z75dJm& z*Hun~`c*$zR`7iI{&R(LG{fTJlnd!!|;{W$2e?h_i;d=#G^ytrpv9S-BwBs&< z#)BTlFetOEkg8|k`p^i~+zM8<>8GJzhMOS+?}ywUufIDZS&|D?mk3rj@23XXDN#Q{ zl>ZxpjAJx}I3^OR&KIn%>!%?D$jNR$Rw_p`fYh<9kYeEa;09Jz&-=j&tgIaB=5DB) z<-wvkKb0AN7)#_u<~{y?>{sI^(6}`310GM1@5-PmxxgyJe=;btdOwi(@ZIPK*M@?< za_Y?BlY&9@>M z!rq#olN~(bo#UJzegFEOb+#1)F+;L5qv8PxMw1WU=l@{U`E*eu<2~rm@tT{Q z4ss`dDrfL`@p{gc$Z-4r-3fdc$%pUreq^}ud{F)|{nkxRIVMB(>A!Ar8Zdzd#&2)BL|VgSPwy6Hk!(mH#XmK=jmqkd*rJ_ZDSP9%Whi{(JR5mKEF| zPW;#MW>9<}@&5bbe?dwN%KwcPhb|5=c#s^+Xq+6X0*>jhpRCG>v8oKL29eI7=yJ~Z zVHzo6!NBvO@}EXtW*!5(l9>0C?~8v-zjcdKj`8;NpSL)rtz>`lg455;-x>@c`@a4M z*;n-+bm;;E!v}lN?1s5IGXp5q$nY>Q8ZhvDSoL@Mo7HnsGy2BZz^#1#S|DdHrvOla> zaDPbpXR?C(L;OG872F?U{(;m*{+ph6ms5jd37F^jZ~DBuoN64sV4l{$>1RN^GB8j0 z-}GM~UObrh=kIildz>mNnSVg0Jp21aIlDo{dUZpR_xpy&68a5U8EP{n7z8K3|32f- z^n!bw8XU@CeFy$dUvQ68jY9{lZ{^?V=k9U3iGh3rT32BCALOz+un(&LPS?86sa1az z%uD*Kw^XA%nYF7cfmR)hF(@k1SqU$Vpzh;0B+l#;b36M;bdT_v1ev*QDP zKr!8`&de}Hof#bC_UgfKw$*1RMaC{~2d9D$Q$PG-FT(6%$+^5`NZtfhte#56+;oT2^p>SpQdHrPK=U z53~O(tl<980giyyKT<0-7mSWGCGSM`r& zw%Qc+$(r6844}26s}nT5A4+`u?gp04{-*{`2&&$o#i_fMr5QnT7GSy9e~Mr^1+bg~ zSeG_fCg9)n4Uag*GGxF!$A6%3SoT{1dYsV(HD(6IdyEW)R~Q*0teF`;$TNfUYv2_| zhKW}g8F;uD7#goJGHkre$l!Q`kzwN%Mush13=A7@GcsHRiQQpj_;{I-p@WBk;UY-v z%5=TQoC@_De!lu{_aBs4K}mJzFC*^<5--22{xby6tuFj+;A`OhG{C_7fdu!5px^pn zS+Reha_nhj8`=2(LX8)%JrkVfE2bXp)zyJFSX`8(JUin+a`)R;431zTO zt=~%1&pzh#l;Qed4Z3q{?*TVZjsO)+pyCLWSbvpbx$}iF-|Xd#>vI9=!d}G>3(gTYW0j4xIQrd1P$+jme-=5?fm5Xz5l4=ble}N zLg!OKGa%d_`2Il}(cB*_e=#UAqMYpvIphg6x(2!_2{c}opoLoT)^C-r_hw}PHRQE^ zGpex}NcbFJ(2!utaL!O*VES<5zcGWTmjbxb4Eh0DRKoP(*?$EF4MnC8pTIQp2fiP? zo*=cq{wpvre~|y7$-w0;sw9!Y<(*-8K!W?jyZ<7J93HQ}uliHJ_kbH{k2Waa7z)H0 zK5Uj^nBXbLppYTN!0^8u6kZGr23uJedN+tFiF#(Zaeuh*fBJ&woDxol|0`thdNVS_ z8Xl1NZ}{%};a|!boL*d>b0ye77g_#iTM1hBIO8YV3hocGKNT|mfA9Ja8edFU&%}_z z!N8EOHT~CfPKWv?@G|@Bzqk}1eK+}GV4zU|T6TXP%oqBp%wS-cX&hoE2^Kv97FGPA z%wS-UWh?;}+XWW;3lcNTHkK@yuRI$(nfLztTCfZkNX8%ss(LY4>={VRFxObJ;9xzt zR|m@NAVc$vB?^9kMbsGHfB*X<-;6kTq^JD6W$EKzU@s$v~jq|{iVKoqQE+0W@EFF6gk z-hF@bk7)(>2g@JR*S+MN;NbD2M@c#35(9$<_k|e}42ti*oBveExTeg=Fqj83g=3-mW`gy}{bx`%E+~3% zSNS%>Q3*-S%!}q8Odq2Eg4&SpzQ6zb2^>=Iz9;=>&=9$($YAUpYWP&bpy0nD$js?K z48Ud@|J7i~bbI$bA8h8Ae_r(uK;_T-@7I6)Qq=VBWQcHPw0QV^!Cyv$r{7I~fg%XB z9`*fq{T~b(EEkv+9UVYPyWy8Sc%AC|@5(6RCBHxs2GJpgB9s101ge7zMO-f$eCx%A zzo3@0>|f>wotr@J?f472gb0*1LHVUbiyue`B`kf$uow`PpXZPJj2k`M)v4 zSL6T2?9=PtamqWgg9UT`Pg0)E@L57+vVyX5gMxB$Lxl3;1`q4U4ZFZ*Klu$YTV%$& z?`mMP7ykui>(3G#)9=6Il&|Li8)Neybeh9w3DL=*vnL&tLFbFAHau=v0ybnT)DY1b z@4kQk4RT<~--BRlIVU$LD>s1jC@AaOGEJ7ZW>jLF%rMoOL2D-G4BhE^Q{R2(`wzN8 z;j;wSWC3O61{dYzh77RzeV&gSbn93A|K0{Qo@>Ut?@&eGs+{#s+x+{_!{(q18&87qjQ|=k>zMK68Ia&H|iFdf^X9*s# zGayb#ZK!|TkPr5w3)B&yMn@ai5zK!(e-{)_jH_xvouJ9&Y!?h56G)Q11xrGK-4oxnTe-S@BHpuhEJf%0vJ&k|yj z4V0A|8kCb80_v3)H#k^7ZU_WBf(hyfu^I2ayMP^W@K1-5x3`byX9>Q^8mpxmbXRa# zMK%2Y{`QxLr^yQA>HojK_{FH~=4rjcYV!Z@kA5*JyLdXSaGd=A`<-9R%1)l1D?BFu z|9?af$u~oL`n&HZ{%WoG^j-B|_!>3vFf-SO^gp0I z_-fu-Yd=efPv%h8Zs;-2ZiungU9-AD!}@gt=u+YT-+O*#WhmD(Xw4L#@$UP%UkVId zAH4s7N{G)A{F9}W4IUhDW6)w|09A6@+RO|I8<-gCwU`;&wU`+uYcVs-(PCy;rNzvk z1KPT)#moRYtYN+70y}mnp5D<0he===RrpeZ%_(4P(~RtOt|aG*&Ck49WnNBNczMGL#v#X7bN? z_nqml?u`H6)qj2VUf=LpLSnMNvUWqbadv~s>N#$SZg0HbHyFV6t3dTfK=n(^c=!F$ zACP`_aKZLjLb85xtFm^3qH%VE8rXn4U?*6>jZlLcVg6TZrZPiThUAQQ-w%R~c=q!$ z*a=dTcPVQ(h*)Pgob`U+ps~uqnE5pGA;r}iGc{*{953}3g5R6GH+z1T5S%QatliL{9LE`xtCcL z?_c%ay3-yf)Pe7NsPh(4{2=iXe4xpT@2!8Uy@D$QD<)J(GjTgJurNDcs9<1|aDMrH z#y`2)ISRUyg=Z%xu+3haz&`tNg2-&;`b3V|$%&$~7bkMgew@fPTRDkkc5)K;?8Qku zvmYn1&Q?z5ot>O4HhXb0-|WZ9;Vy#c2%6T9dOARwrHfB!E3Pl4gZ_a}dJ!2zu64LaNaH1G0J;`?_&u-vsj z8elmMupDUK1tiA|mOJrB87v1{%)U6`jPh&-kR0fiwHM!a{gDI9$$6VHEKUH;xqOrW zUA9{fTHWyC`|3Z24?qPB3mXH&95x09er;F_ftf)?o0;JbI|GA;HZ!=j4Qf3se9y>W z_?(ep2L}T~fEF`D;TuMVz~_t%jc*tk3ZFAFOnk%0F!4Df!@@U=3>%*_GHiUq$Z+vF zBSR9{5lLXjCwixveyo@H{(b3Rkgv1;{5Q2^V43mud+C2o2Cf-zzbF2V0xORMEB_Dn z&&%)2eua7K&-xhgDZpSBi?RO1j}ZzCp8^afzWDC>$C80{#@p|q|1}wSX1x9G_}dq( z-v_LJmhx?ej}kAxxBZ%}tUv2E1IPq-?|Oq-$VO=VaRzH~25WKh{wVSPyWVe*^Q8Yc zfMx8#GDpCM{r|22mgD_n4VJS4%UOYS34>)A{+NSh%)v6(p}JVXa-V)1GKAI}{x=ky z@%HrT^~tOCBb4G?9&`Pg2j0}P=7#Ubt7#IxS zGBOyxU}U(%!oaZbEh9tV3r2=3tPBhr-!d{3zF=fH_?D4j;tNLbobJW9j0_uJFftgv zVr01Zf{~$vgMp!kgMs1UTSf-PmyFxYx~1Bn;kr~L+%W1tn4h5zlnA4t6YzVrvExCF5*ep-XowEPAY(I7SP|3Sxjz5Raq z2dK3SQgiNy30T*uAE5daBy#izXe{B)chCQzQG~bOpZ)+fMIK1hzxnR)A2f9E_B+o{ zPe^BEJB=YYEs6hr|CH?@l=0Mh}{0FrGL1N+HJ1s$CQvX4XOOTi^ z_|8j^n81GphOY+y4c>lt{-MCI5X`azU&Hy|;EnKi#{c}_l|ui%w}7wuV$hnN_mfjk z2sGFL3abC#LqG@leaQSjeceyaTlLNV1opj4}!`55KqkW|R@|c=)~H_rves{_}aWFn~H{oj+Tg1TI)-aCs>* z%#dJEdiQ#GmA~H@7DuwnM07v={_H=ajD^g@?@qrNWrRE)ez*Jm@cWkkf0S=C zu!EP%yZvl;629;UIsk6T0J1jZrv}_w#@XJ^k_;@~AgeuoPH*_lsTNW5Pt=kL6JO{kOAerhm0{670XpXbBx7yj5}u*xis1i53}s)t0fv1D6_2!ZkTU9xk23ca)XRF+f3;W_F16nsqGKrY=#-HBN$Cs zCWFl3`tbBO(*)*;1~L!7uK??{W&j=Hx)Jp28IJU4hq84SN-M8P)qw^nN^j=>m4L@Ng&F3f)n#) zMh0#Vt`AASB$OkZIVBioaDBM)W4gsZP8p^@`qRVyahim1eCYfInqK4j(EEpF1?Pud ze`P#D{r9pzhm~(LJdR*lkzy=a!JsU~!1193sxkwta_L{l#Kq2kg5E4EL3zsuEI#w^ z^n3p}B{Xcnyw1OnNvXHrQ~rR?PXetv0i6cw0UD474@OUy`_E~n#QP`1jq^j)Uv_Uz z29Q~%e?Y6i4!D8(#vnb*d8U{B=d_Su_ycM%fmWvd|IYN^L5V?;Z3WkdyT7L&`_DOx zkLyF)Z&1nxnXvQU)I2URG2TCn4169BzH|OroX5zZ#bChj@_X=)sk6A$m?n5mJ;aq{ zr3=;qT8atMmiLdx`?-wn;{4G6+it}a zGfwc~IGi6keotfODiPuQ;Pbmq#%{%bGtLk0zZDobKe+s!-oeaOC&c-I`M2GQ95c=j z|9^qR|NNRR!NOI-!};OBuN*Uw$ev%*XRvUUaB+TU0IR6|HC>FAtBQ;BgB_S}{cHLx z2>;JdkouoLr^~T%S=BGlXJ&9SU}o?$U}gw6U}i`#U}nfPU}h*cU}gZ_>NmrHnPGte zGs8LqW`;us%naKMm>E(Gm>Gf$m>KpNFf&{*U`;t1wRG`0Yhd6cOzzowT8?L5{AqS-Gq055U{F1u&CdU=_Q<8bpo6pc)_BeozR>g*ndoC;^Hdd z0G(jZ@!{nE>2+LOG4-c@K2^TW@LPgoa>0WGZi$A>3`K^_3=M{mr7Rnfy!Bm$nPI0P zGs8hcW`+}n%nV&d%nTwd3=AqP3=HQDA%}-D6f!Y9HiQHrC@4Xd{A*}1MSNsqIKsjJ zUj6mWkeT71Au|JitPwMVf)O)#$JHNDD*$9DD+5ET0W*V*5i^5}5i>&yD+7bK5i>)) z5oG9p2`dA`L?g&*Fi;Bt6c2A$85l&^7#KjiNtAGWY!tU35yey8Qy*m`!QXFhf9wm4Xpn0zv*5)TzX8^ zKc-jlaH(;agGIOeo4$gFOM^om%$xIX`VAf~Ehe)c(^+`AG&nx~0oj!IZ@LMH2fAc{ z<3rfL=_$NiYAkQQfBZkakC#i0V=Y*f*1zd{c)7GVrhs{Z|E9kK>8Szpe*T><$H%3? zkpkvD{5#!`k4uJW(x2%$d|X;;GXFrf?ED+5PBh zv;KjuSYe;cpsdQkGFjdGw*=>8_L&+CoF7bovdlJ~w>r^eHpk?7PR5VOYI*;Z`1alFhXTX1@BIHYz%uG!8FjFXEm(%>zY16e)X-j>pbVBV z0Ly&+Cpz0=y5(efa1&hKdvSui_fLuE-!1=6&lBX5sDJkT_CKQ)AHM(iYXQAn7PN}p zbCL?DAR`mQ#6OG-Q`i_70$G?CHvVB`XklkyaQw^2a1nH>CkF$=!M}_QAOA2ioZw(! zaQw%}Ao!P&p@oxyp^=%1;ov_;h8)R%f7!SMlfhqe%xgdN9+MZYx|3=B9v%=@jE zm7lfUiRFR;1ILHyza`9mJlDwj_kGbHP%`WP{rI^MwCOza59k=818xiSr?Uxj8QEnV zXJP;~l0l7VNa#RFNQ2r3yhC~-_`qC|1Q?!wm-;_FM}$j>N#n=# z2_jrNJc{5u>>a9Je82O5`Uw#(8I~8{ul%3>0?y(P1&i(ZKV3tVOG)6x_nqL?FM0nJ zvR-`O{eOCtD3=-A{yzeHFBnaqCd#Fu!tob0=f_}%Xj=+wJ)FhlaX{kv_aLxbfyMMk zqFfOyFTNlAH{DK*%ZTOW_hA}Q1Ifr z)W7XL;#?I>EU&(UjF93AV3PhfJxYp8h0$Vqy%d)uWAgNwQe2CJ1^)`{MQ@Nl{EmM4 zB0I|EiyR-;K^x@k*e+k3K3|$sT7~07=WhcBwhwXtu&;vW_`vyl`aNk*6Dy7npn*5G z4@OunUgY@D{C@!75;%H(bFN_j!1;Ij zKY1>fdeF7*@4wIfC%%IH!-GEpE7(8W{R5J}^#^o%?yK*4{}^U-tWsp)T){RuJ%Mv7 z*HrGQ|G)44%em5k;m!B;KRH*t{l4b6fXDyuoxebr!oT_6`@@id*So@yXELuh=L+u0 zoYVe%kN(HG;^}vf{{{^5-~kno@6D{487xJunHlV?nHij|Ax9`qlx1Qtl%9S~fy;s8 z&o7WeD*sHEQ{-}~U-wsm;r(}RutNjD4)p~))C=m+dw;PxR2%A0d9Xuezz%)*6Xej> z-~ax{bm-~7AcyYw2XiPWdO;5L06EmxnwcR8>d;16CI&(2>E9H&w6r)rwEbG6!1h7; zw~RN_Oy*gv4FA6${m1t}k%2==!;onO$A>boyzuYoUP@d}LXm$#^RsOKST`7e)1HF$ z^m$5L3Zenv6D$6I2kr0w|9$3v4Tf*u?WSK=;!^CiyC6D|FVMv7?h+zJ52&*nHUPCr`IWSEmAZ8qrvd>d(U452KL!n z3?h^7dP^w2PPprxV6Zyj*>?@FZ0+CaZYo?696x@8)cXFNzD$KHisLw#C-ZkYhbq@J zg$chw%LU&4)?C5<$@0)&1uTkT&VsiO2eTN#CjEw0YMFux-ktwee z+`Qj_4}W|6-TObtAsT zD8s~XQHqHnf`yskqYM+nM=2(TaBF6U7;9#RL~CY-G;3ytY-?t4uLBe_2W6QU0;QQ4 z4yrOSECi)^9VUi}(o772N=ytJrI{EKm6#YVN;5G`RAplL2ohIiVi1&JVvq%UMAlmi zv{Y#(*eB1vU;jB@Vmto4emn{h!XG$t5Kb^OI?|QjT&8(5=|OG4($PtcMWP-zAVnuYRA422+@WtkWz%1kfP{HN#f?|a+dXWx1L zfW{!dedn0IUXx4Kh4F_11E@-P^*!Z>0>dF?1+Qp^n+A^p{u?~~zWSE}L#x4mgO}gm z{a0X^pe*GT%}@%JoBKLNe&?Ag8GpX;>-*u#F@dd4@wQ7WC9N@2FT{V|KD5w zD=@Hr`1x;ppB9%CBMbY7q94=OXmcsBfX>R8enFe-2h#)V>8EtKUPGF8Ko#ifZ60FvA8?fkCRxH{kGD`DePGK9`h0 z@?X&T|7;)P|0>9`eTexxJwl($f`$FVx8KvJ=ySy}`Td*zMW0JeA?qKD$;;=444?va z%3p1UEH_IArWGt7!v1M6uzdhsCt|?0k7M?KrWI@-I{r*E6&IXZ2_L978Un5cUu3KiFsXII-MJlu}S)Tfz3>{a+^K zUvX?JSy%I{kZXu)VEgdxKhJ9BS*$aeX1xBs;U~`uwhyd-*j6x_uzg_s!#Mj1gN*4i z$+=EfFM_VDJm41LGhNAuOQXK&C)0y$H`bG^hZ&SPl@v2LR*p+UI3p$*XkThaiaZ-To!_2=-D?#e# z{x9q>?%-sRbk<_vSZ%@Z`g_Pvkod~qAic|e^KbaD_Z4IP^ixJ$N+Om2nN~B-49rGMW?%&a7oG3{{XEzdiA~f2WUwu=t4PIHtza4 zy~cz~iRIb%_5Y_YGU2kS4+QPiV31%g_))^PW}JA^&f{4+e*;5z=j_d z3~V1{e}Pi8)UWAxOu5v!*gs7D0pc_Ln$BYe=GTJxuYOLqG2>E`VgHZ{=3n|b#}jm+ z;=A9V`@dQYSw0y4pI&FiB_+WA!3%8e_Maegw)~vF!i+1xpc?Ak<-ZIW6jn5N{r`UJ zpTa6l29XsXznA`2Si$z83aq~TC&*1DKc{P$b7}Ft`w!|cM1y4_eojv?=MrJL^Zm>J z=@sT&Spv)cYcNbvW&0rX6Qqj&=k!nJTy9RuKfOKgen0SsQReRVssHYMH-<)-&I*J}_{c!XI@oxQATM6R7`w8Nm{xQAEf=hwV3vBmxuy42gn7+b- zOQT-UmYG4!mYJd2j+sH)mYG4pmYG4-mYJd9r#Umj=X^E?MMvfXQk87qY?&Dtp55ok zQ)XrW?aI)yWoGcPV`k8`WoCG3%gkV8%go?v%go?!3%Z|{nW5O0nW5d5nW4{?nPHkO zGs8SvW`y{%nZhM%nbjT85sUCGcZ_y^<$slWf&y3gHzNbz3K_N!_TaFV`60D} z?SteGkO5-g5EA||{gow`0^g*68Vsx-{{J^%UF)&`qQtLjO&_X3gd0qyCRUnGH0el)yNX!{Gn-?Y}J< zKn`9E4(1jA7-#(dUi%XiuTuY%ACxGteBk@Xpv(%^!MqZrqwXhY;~49Qu7A^WY`7!@ zTK|C#tp5K!60Gan-|16qxO`Y%eBbwf`V$*28z%O@)0J$wbevv%H~-J1v^h?Lfo(FI z(&jj>HLR0geE<8Oc>+TQi}Lrl7vJOm7b@xAvy-^}KYqzslBufDtg5!~=$Z%PKE(U#{-vlxwq zGMFZ9dw#&}!iMQtc3cK5Y#%&-O`m7SCB-N_eWx9lJ;&?6OeK)RzS2!W>zP#&ah^9`Ca~>1%t?%x8JM(Nv~l2aNrN90k`+h^l1)UTQnB^ zRbY7h{rf+r*-8u|lP7pfC_YY@;JrBEqVjBp4-!wlgU0V4e}DdOdXXbnhFTO@_4jRE@$!4g&*>FTTrNs%A1r?Ho#&hJ?0e2nLk36hqlV&>9lZY=imVWuEHdrM_r^cd z?>TWv)hqwI16mUj!8+sR_tyW0494CmhT@Zrya7r;VFvu}8Ao^2C-6=n228JMJ z29$2qL3<{KjrvRs4IusR=5c}=-k@=sL~|yFkNQjuhUQERf(A?sAI+E;3=NnV*cm1< zXfm*UIR0}>w#d}_?a6DLAenamPXz{+4>rFyome*KCGI0Sd+- zKGUzG%6eeF0hs^m=LPUm_$S}L{#>K10hS3dejxGqyYAmLV3`-+3w}*jRz{Lh_zSvm z5wt)g`IiF2Pw>fA&weT}fVu`RM86;WwM$unLBcDVVIsIc#QLG&*K`9{E@dgTl4&=k$55TwzS6zo&n5Pr>@3{10Oz=VMP6q|+BxQlEvl$KsFnOPlU{HMeJsos_&Vq0ML2?WX4AbpBxnva> zKfC}P2&@F^MKOPn`kUznvc~L>p(lv8`aQkIlS{9j^@HMXMh3YRtRH-T8mt7-oWDUA zm9Tzr{i)=svV!%4;BQ6-tre^vY=4@q1kpc#ftuT_A54FOctSrwYWRPEbn^U=Si$;% z^M}w1)(>nyK(;XdP-IY9!T6#5C);Y3RhkT1E0{kd{$yLh^5NTmP!s;M=6|ylEFV7n zH(0^);q8ALP>b6Q)MWFsXJ$yUXJ#<9XJ#m~2W_yO9^}QPR-gTs@d3|Co&$;%94r2R z-|{cUmt%z{1M7$Nzd$V{)(^LTBxZn$f%X4HR`IQ5TJhogs-Ge&SU#-(&$oi*!j#FPOe;ZtXZa25TV}b5thQiy`F-~vP$&re2X()B zef~>>OHWV~J+EhGc+SkgP-oA~@S>iX;lox|hKUp=~esXrhMm}ha%zki=@n7}2>^Zff8aGT}!cZGk`6MVSpSe}3X{(t%-A1)sci65{Q z%ggVV;4PNb@D|J3=MOd@3N29T2OVnr??zyL`wt5S=Gj84geD*NmQWO(e9Sw>KxFdc@5*4=iXYPh{J4C$9)JJw z52V}o$Mj`>TzUa#|FAHyF<6*@4}_e;`l0rx0fWSB83U%tn-e*wf?6PwD_K7j{gj_w zoXoS9SxK9LYbNWAoP-zOZ~W6>5L)-d&=}DeK?#JN{fs zOb32U3*b`GVE&-;hlN2#NyfyGfoH;+1lA8VzbzOv8FCU{en0<{2fWvl`GeG-={^Bm zE;6j369Uc(t>Kx$wf5=vhF=^?p#G@Pbk+|}zo)MW;8Ll7^xX`+W8^2e)iC1+sCH-m zaO8KF5`*F-1~vxP4{pC1l!YdPF75mk@h^aBk{knr7V8B82Br^|znNw*f7tdLv@l5d z-@Zr&J?;zg;057#erYf$F&Hv1eGvZ*sxfjv$F+dd$pL$2hQd%LhKC+Zpk_fZWSkYL zT>z?tV8g7<_RI_iT8;^|+cPsTNZgg=Vq#$6V`5+cmC*tY%nS?*zWs-_5g0w07(RM4 zF?8EcUlhn?P|y6q_cw#G5v1kKz+uE;yy(=T!ywEsljXzl-=Hu)^V@)d`Gezcr3cI( z%ziT{GtXj9a86)OY;I~UWo~XRV=i|tXDvFE0MfDU_u>pjZF)?bel`~`O z2Hy-8hCNCgh8b?GAM}1rzY@fy!N&OW@%Q-u)0u*~)asc(too(F@b$R@!!cz!uV{vc z;5z)#_y2zt7piZZBvuZ7Be{HwsA36?YYt-x@_;N$llzZ4i+44!|V z@>_v{-@Cy;IqmWHdA}4Gc)eo`9w$BiKI4}HLxjQO?^D2+H9r16;g^S3XCd-Fs{~)zK%Ll>V41~6R z*1I);(g&yjfZ`8Zr*7b3V4NW92`VEG{Fm_rm7G3*LE~;LA1Z#UGl2LZztk8U%sJL_ zC^4PWU|{+%<-d?8s5fWv7gU?Dd`S5XszX>lX#54Kw*3W?v--8q>FGsn1_u+iGi-r)qG#UPX zU;W?3jBy&XI)j>a27@;5Ejv%C75~3y{8wNQHIQ2Q-{8gfS3g060{?&VJ+Sba?8J59 z7MGQSQnH!XOfG45E{AA-Vduy7NemAd)fi{9n9g;&eUU*gv}OL zf*jWWhmiqP`~Ci<6$O@(pQ~rt0;-AeoL)27YtDV`6COdN&O?GB3`{doyz+uds z@X`B7gXrXs-YktSjV+BVi7tutM-o|*T#{OngjUHZ3QaHpS05R_gjPKIzV|oiswbw& zE0hhCKDU3C+|quhy;$;AJ7^$sv+UjW03+dwEh*d(s|>rHISjj;U{#W8)HaH01X(_}aZUsCZOI@yd6#z&*!=H5L0@8zq9&>GI^4A7%OSw6)5S)94L zK2gTRW;Nu7Sk~D*YqJyB!SyZ6j2GYc{nTK1^IiIv=^F0!pkwA(KE(dmDY@X>t zlbL7dCnP7Z%wC_cIDu`pjKbpt_Swqd{X?v?7bh}(kowOKYAKj2GVn}TpTP2==$`?D zCPRM0i|W`>Hr$E8m?Ff&NFoRq%k zz|5ev@1*oi2WEy#@~5O9IxsU7fC?;?U*L8M>=*#Ya3+S2kxUG)9GDp%e?RccfWa1A z*ukm>edrmkEDWH*oyXtrL+?@l|9#Ql`bK3<_z=LO?~{IlCc!~V$gcjopsc{4>=n)M z71|nT`KbWjUhxc^Xnn!ww0iyPQdVF9&5@ddRWX0K3BKJ<-0Oj{RKgzv<_{PDDKJbh zc=lZsbS1iXkHO=#N8dsFumrp_3>GIpivKS8Pk|xD;L&%{e+mpH29LfA{zF_7#Ps16 zxQ`49R#>}X#z`gy&`<)b{Qz2n25Cd|{0AMSa1pEn=J)MUAzVz1EVsT#{GFZ<%C&*z z*7tvZwu^*ud4UAO|4dH`=c-`2^Y+;djv5u7}^Z zfkyy19H(bRaxG&L;h8QJ#Z|+k@N@cvC@uvi3*YIRqPWzUKL410D~d~x<=uCqztef5 zx#U>heOLTDT`!tzicH%NwH3@CZvSFh!TjOIFI~_)9lR4Y{a!TJF1Kgj5B*kVXfS4) zoT1FO-nyZ#fo~?$j1S+p|5IkTV$3|bLbh-(YvbqwjuT*~Nbp z7`(mtrd%}mo#5qd#lQ)bwFk>i`QwIlN8_XK%l}Sa6w77C^8EX*f79>8aw+Nk`riLf zqg2b|*Z0Z)GDFZJsB_2?DVaoEs?g!sljv0@?7yX~E6UP-|7U0Ot zz~P9r1_P;YAeha>Ffo~lVSytvL&M8ZvjwVZ;QLtjIBwq-$Hm6T#QAIbzId)6#r~h@ zJG=6l^;J?Ac@1Fn9DJw82dPOsw1!uB{ z;KcK}f8@fW1p_P;TMYD0r@D!4{wnf(5{&2M9d560}11C&!6lpBO*vd?(`{m~y| z21n!n#+;KIprV{JK77Ca!J@qc5k$rGTWTr)m=pYp?);ivI`WA4c-prYI}K70@S zF5)AvokroYMHl3;lVnnvZw z87HyL?%XNC@@4Nh)#U)z3HDJ1Mh61X~L7e!K<^qz1M(s90Tis z+|wxVnoKV3Jg;J1NB|j3tG-wzli%X(D_$S8<70(af+yC;;=3Bux zS;<>)vXZyJQTS6`ukGCqDSj`pfObmtvObmf#OyLZMg-i^Lg-i^E1xySF_I~)!z-h|> zDp?d3vNIekWMY_D02xvGu+=%EeFNiU7KVr46aPbQ7GV4k17D{1;rqHDkn^Emd~XCV z(-W)b0?&kjZWeg>{X3SM1s;5#1764nTEgd8#KaH?wF^|`sKZ+UkH2UBc=-MJKTx`P zAo210p?{#n^+4jo_pAT@fCmR21%T!X9(*tT3z-La3hwxyst1n_yaX3C55A}WRbZHE z09rG(>X!n8qrrcJ_uq9vyA2H9f8Y2EQpkw@RAAuot}%F=`tUnH=nMu>Zc2Lio%5Fh zLx{n{@2tN-xhM!yWjir5KuQ^A@H7sn)B!mhh6T1x56a=vU|RKadQA?Om(;!Qi~mY` zvoJ_iG&yNrkSJi#5WT3ua2GT+`5=c&Bk1mTraw$_92dDfxjpWGzw(bsg+b%N1s0oo z&ly!xoNhk{EpC0_%Al~umqB5LFN4Ape+Gq8L1u;xzNmxYjNTF%1?~sjR`^bj%H_&p z`r<$RST0u-%kA&y{!drQ}u1Me@1ySnh)s z%)8}t*?}*H%jc?+DsVzC#LQ6a#LQ6U#LO_+ ziJ4)p6Enj>CuWAVPRtCuoR}F-I59I^cVcGHc4lVacV=ez>cq^z=*-L@^sD z>&(nx?aa*J@660l?##@P=*-N};0#&e0CMy9t=tR@N-PWvlQP{HS4m_%_`d8Xo1D1% zMaJ2N409`HWacux7uRC2W?-_o`Cag*7K1`UVuCdT!wf@)o1i1y<`r`FF-iWMu2;l0 zL*&hm6;4bSKn?Bbpxpx-KJ1Nf+J38u%Z-t(+ZnX=Y`R(rR~^%<`svF`xHehb_#W{0 znPhRs!@v^~(w;ZId;SF-F!NfXFo9tz<79@}VxAHek0TFA-1u(u7otkY^Tv0xztbm_ za=lPW$gq|8~FbB?*9r5DhBtzxBpkj0wo&ejM*78 z+(B#m4!E%dOy5?{rNnpV`zr8tDUh)5X95gJg zGydN@;3ne=aV|%|^i>sHMJx}#OZ=U#P{}31^58qy-|04$Tyg?RKbX8F5J~lHk zumo(+s^rRGWGeeP{Yn*=1(U+Q>3r2(GD0`Lr~hKKF)&mt&|u(Fyz%|k&*?VRTxkM2 zD5CR!PTy3`Rm5mMUA2ZQo8`^-yg$>Y)PVPgMgEz-55jW!GyO#kmln&L@4A1ci`8RfJvEt45 zUB9RQspXO|Tl+gXL%~#%OVhzXSqrSD7^;}789Igxs6Fj%a zHE?M$O8x%9^nk;tQ{u|=`n?Pcj3R#wSRDQsusS?&-oB`jtBIXSVdHkSPA)k{CWVdD z-MYB?m_9g9zt+VS#q_~>yHPjS3r40>Kc~y|a&@Vs{M2Mfu2HC&>A<9P=X)%OSEWz| z;e~jPq7)8$4LCPl3 z1(h5OybL$LFZw;bW*S!j)6Tl-=caMVu-yEf`Fr}iXvmkrDH??%6;%gp7H;JN-?1u8e|*K~)uTt+9|py1-)nzO|1_6NOXS*jfj?|ApPqAhUi;1smWlhd-C!P<0u!$c0|Ubb76t}> z1_lPk>9GsAjO!VWGBJPxNZ=?F0}BHKg94OqaFmIGm4Si5;V2UW=rXK;qf88-q9_4M z7eLiFKM2B^9NQ2qrd{QydTfY_tV@Zku=f(uakz!4^}`yN1PhGW}}7IIx< z;-0|8%b z;Ri^Zfk7T*6N5a%fB5JsNF0gJ0#dMj^HQ$0Jf@B(85kT-F)$RKWMD{y(ux-t7#21% zFl=mOU}!uE!4pq1FdRI|z_9To1H;AbQ#Wx1b67T>VPIHzhJgW_84s@_%-DFEfr0TM z1A`z)J;;pdg}b>VEKV^nOgx2M_rY@r-N-Ij2-f{@AD4v1Sq6rQXA!y;pCa6Eh-5cN z_r@m-42E#K5ANoYH^k=TgWXJ6y$!L{5oGBZ28M??JREop;bgECYifk}m|20-o_A!WW=`4}8MF5C{o)CWejE6?bz=;YS9BMnOh!)?6sa2+o=t1sNHT zW9*<1BZHz4BLgUu;8_z(j5U5_U|2|kdG&-0bo|J`kVt}o1kK}RWGLii1eYU%9~tyW zD~zU>9^ldj7pV+LMIJ2C9&Bb{C~QHL6UdnkIWR%#1%zR4WqixPa1l#j3i2^BID+s= z28NFx;N@mL*vt3xye} zmi;e^Ffx1;fusktnqH2fP!yjVA*HT3Bg02=toj)Q#qnuh_=8KrLV}UO5rnY>P@)7L z-P;|1axt^cM9V{Yd@z47BPy~CrUFiG=ead%Ev$hMuvq3P!CEog3}?MrcfNg z0{5amBZDE-Kt;j^qMEnWl{=ZS-cXN`p->OvCPPw?<}^%)s9>O;(9By1jGKTgzR zWOxX5pdeubQT;f*m5IAw=m9Sx@hdPWFf{OOS7YX8VzixT$;hB+1#zsRA;AbiGdq=q zTe<$A4I{%t8|q~uMq5S(MO&iHt4DPcmIyHnU}TsW0P&-v4T*llV%|kNMuv}eQ1eb{ zqZZSRPIxjJxG`?)&&ZJI57AyoqH`SWrn9keKe99gg|`jF477rVq0t_n3pVcIlBoA* zWDtY~NFa$WK&};_r6@zAKO@6IsE-nfFwYLT9z-_q0lXUpG1@?cnE{3sM3@;sc!BWr zZ|vN0Obx=*!#KE&EENM884Lrl2gSlbMux&5Mh3$mMwH$aq`7&JgIhQ;K^T!UKvmNQ zBtFCu3=EE`j0}Zo5Gw+MF%ytu93ul`9I6%YR^oJ1PVUW?3v(D54(33N07V$_eJF5* zfpq2~bQ9aM0<|-c!x!eEiP?+{8?&*ShpjisiRey(>Z$sR*^CT~AU9#DX~=1q6=pIr zEX+i>XJS6284mJiVFn^O9|Vc#GjcH)f&{_6J+ONis~8y)t04Lr(=j6mZx0(w4p#*E z4TPco+X%83+GEEOK3quMZAKpMa?8XVMutWt{R{EyN7BBLhg+RXv6_(~u$qyfuzLE% zrCh?i3=9k)A;wxp2F2RxOuXDlObHUx(|Ea^;uf|rGBmbAd@cymLdw_zlFva&KS2^T zD@>4>&c?^x1#a&@hOc3Sr6C3e$4QI~7bijO?m`W9!yZJefm*&Gj4RiJhD;vsK$r_- z6;5Gf*f@o;o?+o+Nbd}k9AK@5kCPY~7^g5Y2u{I~?~ptPGca*7BSRs`ENHYMn^!o4 zkwI`OBgR0?!jsGl3>&9|$3Z4DGBo1Q4suT7Oh$%@AT{V6+wBkex!qXUla11nk`0ol z>xpn{*($DJWH`725_lVDqXr%*3kA-`bPK#p**;Z-`!l2M!Oe^efm*co|}z zA?RX7B=ZapV5A9tl*)VIf$iVKxo0smPvBynK3SUksNKV-j0}R$A;vjgK@FwEs~E#Z># zc&roRZ3YG!%WuzD;(p0!w@`$Mfl-VJ+C+0$;8m; ziR!b99tbm_K0`6$q385%CfrK(3*(p=8snK562qAo3PBht+Y5%{H{)VBXwCo<&H(}b z&JY%agbXDp1Vu2o1$!$P8W|Wc_@)*YC#I(=C^9&vq!gtV7h5qX__~$mC6{F8=UFkh z1u5tm7@0z7Qv(QX4&fU@X(IzOu(*-2A%jb5Qfa!Lo*qL%esXbQx?V{|38?EUQa>?; ziD6?3B4`Ek5JBshjpU^qCI-el!U^bL4iiITE)&DWWF`i|6x3jDOhz&fQhT5#pu&{t zX{OvoNf*nQ7$%l8F>EYgV%S)YY6vXrek{PAF%}jg!Wj~}3=D#mObmvVObiPvnHU@^ znHUr+w_BNUpJU{^ID?5na3&K&;0z{)#2MSgEV#97m;(BzJC$&UF$K6ypH;$L#FXPY zov)Ppv5J%LFR0Pe7#J9G7#J8dpcr&c7f5Oa)AT7y++oubiWphzmHsm@MEz%|sHk9I zsQJ&pu<}2{|Ns9Pn3z@4m<$*gn9Nktn35S7n9`V%6&RSzn9@LEObH4MOl)9rHl_p~ z1_lo1v@`=AkXQl(0~0e-8c2*yP%wc9q!VNg15`{=5h4ciG#i6ieF6g)0|N(}lT!j0 z0|OgdGDw_(je!j+9^wiSPk@Rur-9XjtOKb}Gk}USq%p`aFtDY8xeOc(3}y)uAafz+ zaWF8jC2)b9pA5DQVj2en19N>E2gvn_Vg?`@VjLR-6Ic}FehvnvG&TkX1~!o91U8V7 zf`SQbAfF~f#o3rp#X&rfdSY?VrMe8{j7(mXIFiT)y04Zf)U`vLH zv4O-C6+vVIOpG~=fq_j(D1m_?4di4{Xo!G>z{=7<=S*@jFo>8XFt8~pB`~mo{0mmY zmcYQKqLKg(2L`YRa~cDiQ@v9HLz)3d8xI46KpF#Eh-(4^DE1gYe6s{lK(i(DFfcGc zVwVHtb5M+f_{^YiVoGB&0Lk-#LyakokAZ=KkAZ;)?4e{B5A2l$7!Tx$Gy@RNQGkJg zBaML}O#n2`#lXN}mcW(_W3wf&CBWDqhk)2ZpahjB#K6EH1d5Vmq3!QVxzA{^e5hw; F0014_@-UkUGRjOZmSvvGD7&3gj#-zH#p#nkVY`()bGwy1 zOS_dkYrB;^+jc8?_G1q=F`hBn!Xd@TuJlLTgZo4MbVWuE&wBL_H~(vVkpID;P_Xxa zn}`U50*?rT!U87-g$;oxz~Z3c#-QM!#0XYk;x?U&i9QXiflmZ{0tT z_axjQ-V2;Qk(ooBSL(y6{|XFdo)QL9AC^upW#Z80mHN>4Ux7i(Gr&OVL+A9hOdP7b zQXfkHD=^4=b{I%~D42eqi9?-N>O=H@1qKn%0|rtb!lnx|bEx`hd@uq#Rl}V)r+(bX z2zKj_t>!-Fo(c>yA5Q&)xJBl}(SOsAv2f_{tosLXip+NP&B`U?s)4iDm7Qg{*K5`nE;K3tv(3`!rI{%|TQ zFf2~w@RTu7`e6M>M48PiIhoBvVJhBDKIQc6!VlZQ2CJjgF{(?Avsyt)51XIL(C6mRRspsR6)-W1CE!eBz$)Mn3!pz`q z!pz`h!pty_jhVsEgqb181mciFw+u*X2L*1yRskOYPXz|m4@y6|R23MOCh~d87^r@b z{>cP(5Vxm=f$9g5pCIROdWIONe&GAbtjyu{IE@4BSN6XJdrx>WD1a;jSvtiOVi_o@ z6-G>d$HpNht?}W_A5e&t_&}0YV-DQ@>F?P%M1?dyTmdU+fhtJMo$kiYG0*sd4}-!P z9|naJJ`4&+d>9lC_%JB!@nKNd;lrS?#fL#*gAaqk8XpFQ6+R3KOMJjtZ@N1>$6P%I zUj~IgJ`4&!d>9nI_%JAZ@L^DROObiCgw$BseSj5a!uxz`N6vrVRrVY!sv#E2q39+br zi1*_{ufl;r!J~wk0Ytm_PCsPH(Z_VhaeI&zhZQ5+9Y+R*56h-cvgRlf0x4i% zVNd{xHLPG_xZp5d%!VTjtmcg4^dcJ$4Y6H6K|y@LkwM{zBZC6NawdiojtmOZ8*DhF zL>8gQae?Kg-?QP6k?8u#sH~iTtdk!iD`d-|A(8cy0Zmo}A{zvf^}^6A36Y%ylGVb{ zD+iIiWXqu?#rab?gV9(yA!(byUYMJeA@X8&9BNW8e<)`#TBFKqK;*;hI8;PV{XllJ zE<~o!jzdOe6N-#6ScXACU@MciM1snP#Xki0o^YIg&W=Nj>5Sv_XLcN6Y!1tr7|u9O zce3a3QuAHT#1I4KgHsbIhky(D=mhD6SqagJ(uoD`cO0j0vgdGPD_G9NaK~}_KYNZ< zT%efYaNu!hT0VV~14j_k9mnZxjvRT&;&qN3S;+iPjvQJbb#hJ|VIaE9i6e?>!Sd;s zoH#Zy-B>=o&6&du9K+9-Pru~M(Z=@!Y#)OH+X^NIu@%$PTsVrDoK{S~<-*a#v|z>b zI9HA!wsk9*81}80zRi`RjqAe-CI+^ZU^lwCag?#itz=@*TRHuZ8;2Xyg_YB}+&MP! zf!uv>B@@Hjl}rr(R!%?V&M^(_M#WW3492UbXL)dVG0j>veVYe|8Pnla)8Bb;7=hfX z%wlU;!^F_LW_p+}hZEbJHB1aE)=Z!0%hAMkd<_%BlQq-T{5Xo(nAb8f z$giC~&yPcj$!zWPT_Dw3rsGoxUxY!-*|?9TP*!y6OLdIn3CK*D*2FubXZa!coNb zU>y^~+jY}7g>bmB{aMGvz_EV%zYq>RHnH_g3@YoV8-;RMv6-xAVsKeMy(pBUPRMEl z6NA?VCWe>|Obl8Zz!Az6#-YY^e8Y6DFb*lEn;WLPg>l?sQgE8C6wcuWqO-y|vX~T{ zwqFb9xW)*Iv2~FgWn4N=pj6H0km595FN#AA!WZBI@#CU6qM&?M5dTmVM-mc$yIwR0 z7bDXgr|niT9P5~*Kn*8Q<`CG*?4!W&|9kK+2Ia@e0(%!YZD)$-h+t$<{BZOC^tc3$ zZCoF~E@n^=-MC#Ykwc1+$!gX@S%9 zv@{Mo5WOsoLk~n>OXKj;Q~t2;H{$~q1%?L<3ZQZXDzUCq{1Egci@(!0_k$j$gkN z6&N}h{(S%aOJJ{p)AVy~9Cm6T{fyoc83pbK+(2f)f=x<^$y4#euHT?Y3vr%q)XtH_ z1vWo{#esogy4+h1rRfLSIppjVKCJ%(X{fR; z_cc(j{n*OFz$?e)$K}s{!GM85k@3U69~KPEAG&|DJpj@3e={l?Ffe}DJpE(`hb;G- zpIjdD9}Ispd{{pHV+V&UkH;@i8U*!FWZb4pb#hp7*8XCc$+Uv`gXQ$tPL5Vxv40#J z1oncQ3Bmr}l7|n}LjC z_7>PGk-_YJK;r-RjsFGqg5rTi0Ax4>Bg-!Y%TK@5!;zxR@{dDVxgojXhVkNt0OQ9E zTr-n07-ujjvwryg*Fc$NopHm9Yzgb)29^)*(-V6+q&XD-DljN~`1f;qOD~6oj^s~P z215pr$dSLw3|b7#GZ|;Fe)#qWBy#yDgQBE2!z=@aiy;ah&itJIqL(8=2;?vq0S1N( zo0u46HZw7BZJr*~$Dzlx#(8>EAICCqy$wo0Yn-PW^>btifIKI=8Bv%_KX8muWcz`B z4i?7x*dGiZxPLQ(V(i2J{|XEYAD;YY`XKZN#8UqUB2B;~=Rd{|{lAz#sQ#A!p!}af zgYlx=hxY&SAErXtjsFYwI)Lm*;BesNWMF9FVPIfz;CJXyVqoA=VqoATeTpkP`W>1ft$Pvw?;5L2RL=F`- zg%64Uv>22<#a1YMi20|*pya8sLg7RBzZNA$h9Cx}HC8JWJ_P)mHi<(lMd5?BVS|OpN z$e{2+?O)A`|KAt?XHj7KFyr@6<=G5#T|VrU`Sbt(2avl4jDOx z56u4*8H^Y#3}sg+eE9np#BMNTUaP-C;lsDT)3;3GP?1ph@aV4*gY3$H6$&5j{?%V; z#E`T?;lqu;(?3k&(6X@lUBBV~-V0lq7#Ox8B4>gU!`713eaO;?)Ep$6tJ*v7;V zux)w}jNbs^H^KN0+n5*(woTsz;}>jWVwkXP`lIO_UTg{5z-};_!J)a{5862UEqSt;XGiWlH8cSE0 zn9Ougs9;k1^Zm?r^I076jM`^@z>0o>tqd8zzrTU=KWt@XkZ0gw5MyZF0FtSnesDI2 zIOpddEDRbMzrWW{e>j^%Rx;ry$7~}8MFxh+8X49MzrQQ|gh;1M7oWpnD9in`P4Oh_ z_wV2TvdTQj`0<_jC!>sp%=ho&f4+Zjot`>}LtXae4~UYhf7xUd7=ClK%HzV7JZA=Ub+oww{;CLZp_Lqf$L6_-*g1Uk) z;{yeCMpXeN21S+?@*jTwn=ZGIBaQLv^wxzO(PHu+^8WEE2q<$XF|X5P$Z#<(kpEEn zZ~C`|99f|Z+nE?HY-3`00E+SLObia&nHU1LGcjz~#>8*{6sy~r7zDN>@aqu+O4j}Y1;_XAJO4t0s+r zT*NWeNdCk0zl>^}3IfVZYs;Jz890S~5 zzJ34piCvps8Fu>smZ{m z#H#T7d-2Z(MK-0Aj39RIPX+}|hJ<1^rQhGvr!%hPXl1OK-oBC}P(1jTk{9O#CPhUL zPbW^L2FXfC2IX(xJ*K~3$)U?x`72Zj#MPayx{6~u*8@--IPg0ZY@dE?6-R__#E&&j zUoV12f(t-03=9kfTN_l_eAvC;GCmDBsqpK2`VUrbR*$CvzrH6;_g>AB&hq;^?~m!* zR&zv2$$c>UFXJF*z1Tr3XO^>83dk6S9ZU>-JEm)`;mA?3`N^QkdWY$vqW26Z#v6>P z3=f!8C6t1szkLt?A?pQl75C5SyVh{L6BGUq@$#?leE*r0I24%`etqZsKYia?jv0)5 zriZWNkY!vuy>uOiGUM#&GuLt08ngUX&ah;V$oTdB`mgi^l?;W9U*8w~29e^wwHdTP z4T_9k-vhxSdSG(#bk6l0+eO*`u_-AiGAaD}&h(E>NdV0HJN@cCSB7{f zD`%E-R!YHMsCSNS;3#4W*fHH|BS#lg!j9?3Hga?^icb&R#L+1p^n+1taV@8!vGd|m zP#5CTKMs$d-}|S3+{EE(eC3C7h9=mZ%YURo-C6V#p$`t3W@FE$wqhHu}G{Q;%=Z{LM}v&krQ9+3X_eJ@l*@(1IDW)%WZtyNm(Dx9_X|Fv?iSfD$gd%!955>2Kc`flae{b}kd4d91pbISU{6C`%^Ng?GAOHUccGme{9G)yPj5EG{-}IAF zMnUG=_jS`BZ{e_)RQs)*$;uG#%s3-C(~u#;*Y*N0cy9(eTe=woogG1lj`f=3>pj<*!%lPpx8{F^ z!jJEo+jVzyXfv`+{>{Gkz|QG$dpMey4(#0iXb*=BBNNB}Y5O>&7=LY--p8?&k!!*N zCI*3pObiEhPCvDu!;WqDPmrGNdWj3+f+Be>n3C)HwvT2O#_-X#71W{QuwQ z{8wO*{;=`a^mV5=WLTs>Ec`Y7+$jzX7U>V&zo!2>#UaHa^FinTbcxd(M}%ZP6#QmT z2K6Bo7=#N1_NuZ?e|MT=fx>}b3Jfv^zrRDwey|JHR|kzFNPpP)bNae79102xpsMD8 zU7)ZBRn^3w)8C!p(9o!Xs;U61N`9Tp{QG z_x=AA7<3GNfA@y!cmD+%H#p$dup1WpppgyG=z;VH%b(Ndo#jwa`0x|rZWXXy1!yjk z{5k#JSq?p>$RE@B&T&XFUD!Qc>l}v(lfjSa3FkQ6n0S6nUvZAZg3*5Z!*d+MOmF{8 z|8|aJ8e`=2-t!!xjC#`_pXZ2XoG{(~0!K7s*7VsII5Zi3rysq*q0VRd=XD3$O!iq8 z42&OM|DOKq0*4A?#B}+K9NA2-eoybY$l<`)IQ{HJj%c~rzcm?HR>&C2e3=`ob@k71AHp{-5r4iNlR?;q=~19EOY>)AxfY^XVTiaVRq0n=X8rW4DORhx5Pq zR)Pw_?q3`e_*O`Nxc_hZqstshYBC?T{Nh{9vx;*j^9;rh&whgB4*wI~@L}%(w+p+N z7(jE77dB1Ty29Znz4|B10}Y1%-;e+0Il*(BYyIyIj+sdrAeYEZpL~TwT`uSs*KAD& z1qRm1G9N;IDKfCm`2Stt7uy6-(n|R^{l*mz6A{B-$_!Qv>|hTh{{+c6{F|fS4ojxjKc{zH<&e>O@)P9V#y^G(%o8*iWIo*asm)*o?u0Ua;QOh;ApPO>Ujqi| z4=?^szi^d9MONy=m0uto2mdgwWzb;10Ae%$Wn|D`VEk}@y5KbqS*Zm-xmIg2FoNyA z^n+`K^oR9-K|#3Y?{trA9Da-`)2CnKP-n9EHT}Rf4kfd)A1n_*rcC<7bAsm>+e)4l zG9PSyX1Pu3U|ucNz&w*@HOnec+-3dXSt0$w{V&@J=?^Y{w@X~-5Mg36*gakECWjn| z_PfcU1){5Na>VdRe>nYLfx&L?0k;i%r$4$0&SEEjPv^VEA;BX3A^OjBty>&MOb7N% zkGsW@#}u${`?*^jix};sKbZYydZ1t+{h{hF|Ar5HLGc30-7w4u9v5rdpkSEcCjBAf zU#1(#`rF=+e2pr*jU>7ACuVXT~>$)IB({lVs+G6Rc}0)vaOT!C`k zvJ_!wPZk7E|&{^<+vaVX0!KpJBFu$6_Ob%O$f90Sut=1Kp)&!7JA9)~KI z^oQMlH5jBmO!zTf;68^3Q^MZqQTI8l7+t4Nz0aX-B>f={EN%RQi6K-{DJ3aoX$teX zf8SUCWl&~ON=Q*)c$}hK2Xa0uII%bEp8n}RM+D=m>D~`GESVncn%?$+;{apMboYlG z@+{IHUjLh(^^il3Nny|Qu7@0XEYcsU{!IV#kYf*v^arUw)Au~$Si>Uy;n45tIgdFe zut^j1mHyE1hhfGN1{TwQ-~9s+ih0| zhlf3c!c&gpMoaIDl#0abNwpyb6}_kAlX z0}sP&c9yH4O7Y+KbN}=ofGW#>-%tKiVEFg_-1NgQIWz@V{<35Ml?zw@e|`=U-Z}m6 zOAc)zc}|6i;RI2itY&;G@r@!=xp1Dym09kvU~ z843*2nKRrqGX8zHn|}BehbfEXhgrX-|9QpX#Z>cay2opdFvSl)88m_}u+HXM3$l@M zGRvHQ-^+e7&Sutjzahc!@q57Z{jWKk8TF6KN2=9Kgj+EC7-|FfBt3PV6gXq+k!(( z3`-78=la4S6&3rR=|P5@)Q6Y9AUbS+gLM4*$F@OW?}|gH!4K-y{`y|?la+x{A;aOo zreELFekw4qcpfld&}F#5?D_BezdxWdZ^9uah66{Y*L~rT6Hxp=ZzcN*@eif{=dFF=N_>$12~yGVZ@R))4h6IQKjy9ET_N$o z`o{ugMw4iUIZiJxg7}Aju&E(Lpc{QCcY#~~($?Xm}14j!6b_LZZA zMG}<%-+kp!;P&{TouR-mFXQj`SD)PXGV?`QHdH^_ ze=jLJ!zCTPSgajAt5!S;D4X{Gd&l1w%Jy(MTQ3%CThG=Nj{+K}{r_I|_n&glGzPV3 z21_r9!4_UD){g=h*DsW`VEF%i*I#hy@`3LUh0PQi;b{$^m{I?Tkd@ht-b&x!y4A2KpBs2^rxxcHWVq3|~YgUewihL3L<7#99!U`Ra7 z#31;Nf#JdL|Nk%kW?-m0%*0^$j)B39@ec#T?88h9f$ta?4F51N6ux6%Sa_I;A@L6b z!^C$C49gEQF+5~oWZ3wQfnnWYCWeWB7#J?Tn=bT|Lr?Dc4-E#14|{$yJTPEzmsCht zp1`2Td;wI;NPQ6eJw5IxhZ5uT>5V@*JnN-C-2C++l0}Vic9C?Xq|}E?zd$n-rVNWS z*o+q^eEDAVpGBAHq5{Lu@4mm;y(KajG?*?lD1P~V?*I3_2i!oTu_gix3@QQ)44`p; zcxkB2zLjwWXyA1bsB{81T^KSLG#D>PeDDPKY@jNqul&W~%OdeX`1kZ*zc}IapTYqKi4R_2C1M|*{hdDL4~K$4j{*au z#0Mj=DE|kxpVN>0;ZTre_mKD?4Ho15@cuuj2xXl5|GU$F#ufj+U!QLHmqT2V87wXE zLH;*PS_>?_e|q9y4oUY{KS2)V`S9--Oj-~uz3iVk)Kj2P0C_A&LE^(@uxh3c=l{V} z|M~~AtAF~zzZ~M6yTQ^dAJV69{L7&XcHLsI5Z8x%xcR5RI^w4*{^Jmj>IO^y|33W> z%)m|mSQtP?y8Qz+P(hZ1FsPjV|2^hUa?T7V#)}Nf$tjPs7iG_uV%O%n2`X*E|2)o? zkbjW;|GU;d5MTVy^hy6Xintvz{(oQnKOy7)_X*Se|8q#IEB$G861>Qu@bkOqALWdM z3=L!H3I=V~3;)0Of|V8hXMOPhd;9c>|2afiet!4R1M3x>bnSN-K!A^BnY&kxFa49X1*$}wii4N{(r#vCgaH#~0m|NYTVkV;VB$H~(;~)L{7c{pxRy75~3SP4(uKHJ<%bg8|gGb~wbu zu;nllgDM*{!^FP~3>!a!!U2InW$*M2>=XZge>8PAr>aB$&!i0g)jTs9X8ir`_?Lf$ zTy)RUTdB)%G|NnrDfAd3|;fFEHWFKYah6T!wNXDB()w0a^`~4+Y z?X@4;47$eujaervC|j5-H*lEUmN4_=U$M9$9qb@Es1DW{f4|T82Qq!{4{e4<Yb_#X`h@eLpL1{`E!IC+?f;p$-~hR=tY z82FDcG3Xv)Vz4~I#9(`biJ|c$1H;Gn3=D~X85kHpAmRa(HC`z=Fo=Js`VY!V|G$5O zXO4w`Kq=Ym4{}!ez_pc?p??G8#Q)z^{-|M;%`gLyTR5;%2DW1as0yZ3KM>T>@D zN?m7uL(y|KHtzXfPOiD>85xJD6)HXc$O-==%+-r<8waFz9*fdupe|82tPG z<-ayVi8143kYBjgaI73QyD>k$&;C1|i;Yu`Y4-o=T5OyuP9ESe;GPM} zScm?A9Q^#BHbajw%VY^<{(U$6ugt(bvnT_UwI2ThslM=U z`UEyk9VX7d)AzA)YB7EOGyN5af9KD133g7Wuv0$`89-&su^$Eu|G#_x`uY9i4>ivn zP7D_mJwe&L>W?OavNzw<#|cW_A%+SJpz!YaqrmX}d+R?<205^doc9x`jP`$!OvS(H z8`wFen6my&Kf}%`6%zALg8?#H16pIV`fGPr*Z z>K;WOVPX*c&A?y?YEgl*5IZA7AgD$4mw{p8djRdkdL?jH3GMx z6})AqC8vTyLJ{oa)qmAj%QrBn%X(`})1EBr{W$%hWQNC{g>@FyMtrx>IMO2y@uBfc@0?^95Wea{P~{oV;VQ7gvH@MmJA?;`~L|jXE%Tp z>ou%yV4iKkAYlC(toYA&&mVH$98+E=$a*u))L>Yh@Z*-}i_AK^eO2KXPsYH51vrIgFVTVhp~22hCS#82tXe1e}UDg4^_v>JOAEL0Etn zyv7hTjxYXU;;-p-yqrpL>whaS=oZv}=Q2EV_T{a0W(V(|NW(SHSo2?oEv z=lxe;h%xy6J?lScb>Q#skZe*6wE)zT02vO$AV>ZG4q9U<{vq(!^nbjZ3I+wg6&O+s zet!q8C^Rtm{oMlWL|3Q@pzwj{g1Aic*K|KVP6Y#x-w^vmz^WCYszEJ9RJ$O$7{PYQ zn3NcN|E};`fx*Gx_xCs8^^6i9Hv9sW<6psZ4F}vn6(6#FH-Ap&-V8H|$| zXZ-&D_pdPn^8~h;Of%SL{rztC52V8TFM|f-#l?N>VD*1~{P}M6lR@L#1qS8KP7D{V z85n1At>>D4mY-8wQsRTqKc3ZA46HLj)s@R%o)r=w6n_bC_%MCr84gJm3xn_9J;3uU z5+8WL{+aL{G7bz`J1P#EVeu2-l;ZgO2W0b#AJYp2I3+k9gLyN4OrIdYX(syRKckX% zg#tscgLc86@1;Kq_BMQHntoe=Gm+`x|LJyuoCZuQ{!A|r

8v`8&NskaNZK4c|Bv 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 d)xcfEq~kQ*u95rk_V`xrlUi&H3