From 424d6f05d9aaa0000302df70be10c2598886a030 Mon Sep 17 00:00:00 2001 From: sparky4 Date: Mon, 3 Apr 2017 15:19:08 -0500 Subject: [PATCH] [16_ca needs huge amounts of work and I should remember what needs to be done soon][OpenVGMFile needs to be ported to 16_snd.c]going to port rest of code to borland c some time so we can use the core components of id engine here [going to add 16_us.c eventually but the debug system and CA_ PM_ and MM_ usage is priority now] added animation delay test back wwww [older zcroll renamed to xcroll][zcroll is now the pre menu game loop system with PROPER data usage with CAMMPM][the graphical version of show memory is added and is still buggy as fuck] --- EXMMTEST.LOG | 113 +++++ bcexmm.dsk | Bin 1086 -> 1250 bytes bcexmm.exe | Bin 133666 -> 146642 bytes bcexmm.mah | 1040 +++++++++++++++++++++++++++++++++++++++++++ bcexmm.prj | Bin 8017 -> 8333 bytes makefile | 5 +- src/exmmtest.c | 78 +++- src/lib/16_in.c | 13 +- src/lib/16_mm.c | 47 +- src/lib/16_mm.h | 3 +- src/lib/16_tail.c | 90 ++-- src/lib/16_tail.h | 8 +- src/lib/16_tdef.h | 27 +- src/lib/16_vl.c | 132 ++++-- src/lib/16_vl.h | 88 +++- src/lib/16_vl_1.c | 580 ++++++++++++++++++++++++ src/lib/bakapee.c | 4 +- src/lib/hb/democ3.c | 82 ++++ src/lib/hb/democ6.c | 59 +++ src/lib/scroll16.c | 14 +- 20 files changed, 2258 insertions(+), 125 deletions(-) create mode 100755 EXMMTEST.LOG create mode 100755 bcexmm.mah create mode 100755 src/lib/16_vl_1.c create mode 100755 src/lib/hb/democ3.c create mode 100755 src/lib/hb/democ6.c diff --git a/EXMMTEST.LOG b/EXMMTEST.LOG new file mode 100755 index 00000000..c6688f39 --- /dev/null +++ b/EXMMTEST.LOG @@ -0,0 +1,113 @@ +NOVID +======================================load===================================== +====================================load end=================================== +contents of the buffer +[ + + +] + +yay! +======================================read===================================== +====================================read end=================================== +contents of the buffer +[ +{ "backgroundcolor":"#000000", + "height":30, + "layers":[ + { + "data":[1, 2, 3, 4, 0, 3, 3, 3, 3, 3, 3, 3, 3, 4, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 1, 2, 3, 4, 5, 6, 7, 8, 0, 1, 0, 1, 0, 0, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 5, 6, 7, 8, 9, 10, 11, 12, 4, 1, 0, 1, 0, 0, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 9, 10, 11, 12, 13, 14, 15, 16, 0, 1, 1, 1, 5, 8, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 13, 14, 15, 16, 0, 0, 4, 0, 0, 0, 0, 0, 8, 8, 11, 11, 11, 3, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 0, 0, 0, 0, 8, 8, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 0, 0, 0, 0, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 0, 0, 0, 0, 11, 11, 11, 11, 11, 11, 11, 11, 3, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 39, 11, 11, 11, 11, 11, 11, 3, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 3, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 3, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 3, 3, 3, 3, 1, 2, 3, 4, 3, 3, 3, 3, 3, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 3, 11, 11, 11, 11, 5, 6, 7, 8, 6, 6, 6, 6, 6, 3, 3, 3, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 3, 3, 11, 11, 11, 11, 11, 9, 10, 11, 12, 6, 6, 6, 6, 6, 6, 6, 6, 3, 3, 3, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 3, 11, 11, 11, 11, 11, 11, 11, 13, 14, 15, 16, 3, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 3, 3, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 3, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 3, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 3, 3, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 3, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 3, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 3, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 3, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 3, 3, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 3, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 3, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 3, 3, 3, 3, 3, 6, 6, 6, 6, 6, 6, 6, 3, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 3, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 3, 3, 3, 3, 3, 3, 3, 3, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 3, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 3, 3, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 0, 0, 0, 0, 0, 0, 0, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 3, 3, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 0, 11, 11, 11, 11, 11, 0, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 3, 3, 3, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 0, 11, 0, 0, 0, 11, 0, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 3, 3, 3, 11, 11, 11, 11, 11, 11, 11, 11, 0, 11, 0, 11, 11, 11, 0, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 0, 11, 0, 0, 0, 0, 0, 11, 11, 11, 11, 11, 11, 1, 2, 3, 4, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 0, 11, 11, 11, 11, 11, 11, 11, 11, 1, 2, 3, 4, 5, 6, 7, 8, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 0, 0, 0, 0, 0, 0, 0, 0, 11, 5, 6, 7, 8, 9, 10, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 9, 10, 11, 12, 13, 14, 15, 16, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 13, 14, 15, 16], + "height":30, + "name":"bg", + "opacity":1, + "type":"tilelayer", + "visible":true, + "width":40, + "x":0, + "y":0 + }, + { + "data":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + "height":30, + "name":"fg", + "opacity":1, + "type":"tilelayer", + "visible":true, + "width":40, + "x":0, + "y":0 + }, + { + "data":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + "height":30, + "name":"top", + "opacity":1, + "type":"tilelayer", + "visible":true, + "width":40, + "x":0, + "y":0 + }, + { + "height":30, + "name":"ob", + "objects":[ + { + "height":16, + "name":"trunk", + "properties": + { + "walkable":"0" + }, + "type":"nonc", + "visible":true, + "width":32, + "x":128, + "y":32 + }, + { + "height":16, + "name":"stump", + "properties": + { + "walkable":"0" + }, + "type":"nonc", + "visible":true, + "width":16, + "x":144, + "y":128 + }], + "opacity":1, + "type":"objectgroup", + "visible":true, + "width":40, + "x":0, + "y":0 + }], + "orientation":"orthogonal", + "properties": + { + + }, + "tileheight":16, + "tilesets":[ + { + "firstgid":1, + "image":"ed.png", + "imageheight":64, + "imagewidth":64, + "margin":0, + "name":"wwww", + "properties": + { + + }, + "spacing":0, + "tileheight":16, + "tilewidth":16 + }, + { + "firstgid":17, + "image":"forest.gif", + "imageh \ No newline at end of file diff --git a/bcexmm.dsk b/bcexmm.dsk index c37ee82b40e4be6ce232499c7f6e097b22361542..6238e6eb01f0a40f60a82e73d416296fd6a079df 100755 GIT binary patch delta 141 zcmdnT@rZMRlCm=+2Ll6xAme?8wG34ZZVW;|7#!pr&;%V-Q zwljHsef69fm>3?gFfyEHnYi%`({-lF3M^uqr!q1zO;%+Qp1g`VV)6?n9?lmsKvNke ftG$>U$Si@bO^W#|qts-17I6*^h9rjn{}~tnO`avI delta 89 zcmaFFxsPLl68}vGHUq!I3Nn+`5|m&x$K;>P(m;d$|7TzT0MVip_y7O^ diff --git a/bcexmm.exe b/bcexmm.exe index a23eaf701de7015735f204616bf261991f9e5257..78240e17435cefa372565be1f85a0b382dd6417b 100755 GIT binary patch literal 146642 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%0A4pqZSsb1@F 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%0Db!#G_A+ft!*LO9n~J{5Othdq?QBc zSE;KZ#aq-}>Ji{O*Bn}+mI4dAmG-Q*QF~dNsMqLI^;`A3^kw>LeJwQRF8xFOp#Giy zqt2lRlZ?}i9E{#yk_VG3Mo%*JIv{c^8)ZAlT{t z*a@){V{2ol#mf>hC2%u`$%_zyUbnXu5~YP-|t@Oe#HHhdn0W4 z*WGWq-*<0y?{x2mEq~N~%*{OUp5~DMHl7PSJv;+o-48Xb`^!B(Pl;!yXOU+qG{Q>H zL!Nb>=RBJ{n>|}SA9xOW4tb7vj(MD3k2l5J(%Z`0+S|t4%iGtR?j7hI>Miotd9U}* z_b&9_>RsYp>b=W*xAy_>dT%UF%WDPvnTk`|7MbYtGTY29gcXtl%qdkWps8z>tCX3_ zb;=FO&3JKhiE@W>AFPw7lnub4&B_kQ$pPgT(wfOt#P zdvGH1JL+c4K7Yrehz`rQi*}LLODob!G4GtJQA@PM9KIvF2}Q;_lLo|AxC-sj znRkUg7=yYM@fTsez6beF6v?pKT4KhXDY8(zYEg%}&4Rr~R@yzV(0&yHwrecb94ggn z^(VE3X&uehw!$v@LHk`(bOX}7Qs1DziurJRqpQ)|NQeD0(8x9h8#%@>BNs9}(ijbU zW}J}^Tr2`ImKx)Y3Zu#hLaM8c8l%>jVoWurLBeNY?tDGu98c2WE3a6VpeIS-sEE%* z@LJI54<9fx;~MDs`5}L`FIX}uKOf=hnqWa7Em)0U;iT$f-vle&UpcADOz$%wcR*&p zJW4M2`zmXyC{*e%oKRU)UXF0JKUh&#>8ti59Q22(13~{3e=xxEeFXt_LP3WM?3dmz{$U1M{?OlU>m7D*_#jR#R1mj;aon2WtIj z|C-A3vP!ykM9#3x!Fd^U#}PSsrZ)^Ma7}epVHNILSRM=&;)+7_cDcWpdNVC&c-~-8 zs)A*e)x~sWS&=`GSxISq24oISBQ}K{3xm~Vm1g%hgz}5af+5P6U+%N~U|SKyKv|%$8e@M#K`GUw0)-7{Fxd~w=#!N;A`dspO&gYxF*tJwf+PB5 zWv2JZ%NRA09Pt`5*RU_HrBt4rSIM-BDCq;OrK6GY&KWl`LnxFw_xg@#;H5e};o57@T zC{!IR^r3;_7m?n9j|zfQer>SKR5;SNqjh$h?1>a#xVnGD9?a^HJw&kR=Tf zmYO!nx3pkdKCVX-#!eptiDsU}YF(Uw}YbfVdN0nqUb!F(*4ejg+XQHo9kHn&i}oI1CNgFBqukhc34+9fD5H@s;=+C}}iW8k73_ zt5N(uMMcolA+rpiP?iW%R(}7oN&c*1!-;P3mITzLftFKaUYJ=Ku76(8R~ahy2Psc( zm9Nmg*k9d;NPTOHkti8jccmJHFV712ifs1zvRGyj(R4)5GKB=qmIIB0yk^>9h-JT^ zufl53VSd?@`Lgq@>tzG7L791Z8G|7O=-~-vkmO2h{9=e%L(w8isj8Ta(N-O(flO2d z1BGa?j8I`31~M8BLXr@`q(*j7$quR9S#1_M}yj;eMQTGt4MLLSK9n1}MYcNm^ z(*-DI1+r*h0P3Je$|{Qk)_546Yl(FZYK_rR7A!PXUp7>NDenCOK~sT55=;>w!tjtS zIA$^xSq_%$?1na=usx(QDFB7l2#DYYbvVJO?8jR@XDHyzbN98JTyu<-Pg=J%wGlW7^ldJdisMFi@t%1 zf+3X|!C(OKx{6SKp$ScygR}An`6naWq%u+$6weOe1{9=v4Gc`~Q-BVn1S^{EFDKv$ zC-(&+2P#A9eN7swSyP3Jtcazb&2YNE*as}L=;6i#7hHi73XW>-sb+nm4&BT<+XLU*%v^DW^_Y^tRLA4tqNQumdw8&^bUy*+ZwLS4fI1>$pAT@@} zhU-mIPI}*4ce>visx?GQ%T>W#(nj49SeafJ{d! zgT2@%H>1Bf38<{@I0CaBDt|uA>MoIyu91;$;YeCX;0|oDd@}&E4gr{VWx)VSmyb|Z zC18XCA-@ddntCt4Dnu4jAVlq1X66orDtzP3n>V7BRT2%7UWu86H8S$b2$1v13NN1o zIms{e`>G0jrtR8@Rvn<5Sg;G708J7=DT)e8FsTexPw-EsMzo`amYh`v%0d_}L`AUD z>VAq<_^K=;oFYa3a^GZMWm$!<+A6&@=`1v7BZbwbteTTZ)ATe$(k?c`(y)aE;P+KP z0p(W`B*3SHVjvrANmD>jhU(!Jz7W~(n9kbGfS{@E@&dUdkb=5cc55vrO##y?pG1=* z6Cu#0GLm1|uiQu7VA>h*W#`dU9ZekWHz=XTdYyLD+KW zo?=Y7LZyX1%-ahBb+GHJV8Htu;zdDUZ9@zf`d}ksrjAJgsXmf6e=(+dGF)95A}F+a z0qt(h21?2U1-^20T}2gY?5nN`AzWA88TQhjr%(-%1EyF(Im;cEHZCi(@3>CgU>jeM z#!R18RG70PbVLp2`7p4+mz7L{ELD|G4wV5%7{-k0qwNF1VroDjPbusVbQrEp}MV3r%*OBiX5 z4Th`ChM)j7kIB}e&<#wI6)mg@2K^AMK%iu@$+FUHfXV<0#wr7*Ejlcte=Zw2WLUZx z=sOx~3q&C^DYqI{R7r?o{a~0Meq}kSf+8jdO$l%`A01xi13X|vu|l8aSY2#|F$T#7 zLxi*dNp~sC&`J`~stQoy6qi|kT}6cq`NJVAfS%4O0}xtcEeEX`8O=6Lu|Bj;g$W)e zBPQVEN_k&1VBT7eSu5d8chc%uz0BxVwXS*WOt0G&xMWW_8uRAeTF zEVp1X6o*AI31%D|i^__N!5*`(!U^Vm(e2f&mh5Nv#Z_1~2i45({bEF@^^(>oI%AoK4KnxfSMQE!aauk{tNHHufy9mWT zEZH%PIzKBz3zDf_UB-&)SkYt_s%2Q(sVytQqE4y5tfUle0C_2bIGg1mu&yd&)#Y{g zo6G=vxVo&cvfPpeLVR8){PybEY_!{INUqe@nuc2$k z*Wjx0G%#yebuGi~&5?i*4G1e%QC5U*v8sssBO#J9*`!##a6+~dh?7}Bjw+H3!XjGf zK_$)Bj)-H@T>;xMh{cP7lB$rYA`>9KPHAQ7WeJh3R_>d%7 zVHzS-61rZF(~_VJn3u{hlF{UFE%jXmdkG_jOfnR-5~dJ1TS198l{C3Pp*xb(2@1&` z-#OViuzCu!X^7`!=amM1=yce40IVDuznD4{5ePO!vN6OPVmaA^Ybs1l7sB->IHm<^ zpxlWujep$AUt$HJKLHNZScDNogZ?U4;y7?zr(a4<~u)s3<<`07TR*AR(#*l}1?qq0m2LZic>Q3JxX z0W1yLg#>{B+{9&?kDCD--C-!9rbUbrtd)cCl%0T?RbizGmFSJ8+1Ys+xp}yl zf_>94mt=*cVJ1yv<}@2lA+-JkpXop#Ft`yzpcAmR#L|?kHnJ>feXO#i^@06`8=2i; z^{Qz|Sc8G4FPIGhmuYH(Iw49rl4=RlktT9Cm z>zA38!LX)M3fr6&m{VQZ%9vPIF$_1%IB29{=P#o4*>aH}I~(Rkh1tgN3yW#eiHgcv zBV@r1uqEgt^Pif`J zGGdm|GVP17UT!uZZbtj+7!lGdFh>W?rOCWC5f)EiM${>Du+<-#gIOV)K>E0_3@tdh ziq%ySUa-j_RtNoB!0HOjB4PIhf`h3aExB2S8nhFTrZf75{7!6=wJKEM`+sek%?iRW z5QOteK7yqpg6P5CMXW!?D$@24e0sl`^{0XtolQ1rA<6E}q}(jSQTf^BER+)mRpkF_ z$=#4=K)_L0h}&cV$>NbK6|-(y$zZk2!f<4$ARJcP^nz5Q@??`=@TCa5Y!xP?-%o4k z#Sj$L4N{JYvw@Y|KZb>WNGc~pBjp$o*p^&JCY|K^?<{Wv4VMXvxF2vgEgtu;tu%2O z$q_8Ux~)klQq?>h?0bT;=_;SzS+;1tQpuHGhO%~_cz5gnpjg82*_@l>5YS0Hpv$qJ zfKnFo*arYUT(6ZUN4un&E|$?R^rD#Q!DsGlz_BB|cM^_5WCLRGNqm&0;}8r7D3tUd o4uRz${_p!1@@he|Gi;-wsm0U#Pt|P&ECo2tsk$sc3ZToBs{1cM8DKFW3-D2Ls_w6V-vEjL zvj7(Zx=`mwfHwha0VRO>fa?L{0LO=>>Y4!e1O8!6)omM+s+(;=n^IGCNr2fYsk(QD zrRshL$OhbQOVu4qLm1#Ozy*Nn3sQAI8jdnXr|RwiOadGlm8#nTSP8geWU6i&;P=7@ z$#sBd0YB2ctzV;kTW<$^qIp~YUx1+Sw*FnfCcqqfhTVXAz@Gun0DcC@23!TO z=qDL^wGSD-0<;5m19kwm0yY8G04e}QfC9j5z;r+cU_2ldAOcQn9x{9lI0V=O*a_GM z_&wk$Kq=rMz-@p`z<7WT5E33Td<19%ya{*-@LRx5fT;ipuvxp-@I2rVz#KppAQhkm zysKGjcoFbxzypBW0H=hthU0)=0DcO%4sapB4EQ8zt)T(18SqoUBEW3G6@W@{tziLR zy%;~ zViKTRQ!0K9_z2Jl*aCPK@FbuJ@H?SY+$NTaYXM%sM}|`Ic|Z-|Hh>MF1-Q(m;v=R~ z@x|m)aSh=8p`~Im;6i}kS}Oh=@ZFG7@piz40JEi3JeXQ4egJp{@J0&i0?2@e0XcwC zfIkl_6=wnt+DgUQfX~xP#diQN1L^>kfTe&N022Wkz&|c172g8<9^eD~6p#bB5HJ*= z1$;BSRJ<4@Z zcpuOTXaej2GyvWNyasp`uo>_Nzy`qY0d;_90c!xYfNH>#fL{U10FMKT0fm6&fQJFg z0QUh301E*wz+6Bc;8uVGa06f_U>YC`FcpvixC~$iTm+B+qXB7v6o3_A0*C-DATk{7 z2lN2C04D(_0LKAG0iOX50X_!o2Yd*4AJ7VD0_*@Z0Nw<=26z>)8Sn?d2EgwDb%199 zYXG%?YQU3#UjfPhj{}MUg@EONhXKm~_W=q33jr>`TtFV+R={ZOwB%0BwB!|l0>E6r zEWl*I2!IGUElf-P0jf)U@f2)PyzTE;2yx8fSG`)fH43g;Eb?1`AfhjfEK_u zz-GW2z!QLC!2N)`0XG7!2227>H!M!R0$>4z^ox@}0<-}(0la|M#-I-Xn*k*g1mU5{ z=TSiZH~4=k@V^xJHz?2mVe3nKMq58+&jdL`E6CF2LhYfAD}@^Imx50!5qufX2!Xpb z>q~^%#>_^!UGCeil!v=sJ$B=b_G=BEo{Bvcy$5|(kFZ@U9607}wt0_r`lMe7HT%;~ z?1ZFjv&%Ev$5twWw#c|s(As@?+p0hCZEp6rMY`Z=jr_UpkWccVuGPZ&Ukd5%wT<<+ z=I@!X^uX8swfp6-&-hVDBg>ZAm{BV}quu#|wEcmS^uL8qZT8N*Y3%Ug+=`hi1zllI zNm9kkGC?Z5#;=+GmR8s^q42W$2W9D|v3MF^f6H4M3L25K@fqP3R5BYcCQ2zF7^p1Q z)C+q?`_d`}pVcdv8r>Fu4%+lW_G*WI&xGw(q2UT4sMAP(;p#mTe9|INdx_xJ zvzMiKxmWNT*vtKR`LW;^*~^1?`HA2cCf2-Pd#J&!*)w5WGm4n_PTC?gVVvaG<8di} zG~n@m{wU({L3-Tn7c}xG@@LtfyGPk8W+`r~y?Tyj>NnZ%7U|_(@&RwN7&?~yiF=HE z2+`DRMRX_Gm8IIGP>Ws3$IoAz>jkxl5v&M{{n`gLg`&OsK@Bh9tMe4l#tUd{uFqk8 z)4W|08fFL?wbC=%zzM~#6Nqwu2P^9v@0L5fGdGPM?=ko_Lg+$S+BABr_P{aOVU%5> zuj=Ds-*X=oE8?cnnT<|S8KGxNPr8h*BeI9B@A3L%kxb;8}Qe7QqD zEjvuI%OV$8{Eq?^iyNb<{bTcQE#(WaEo%Q{K>vh zZ?j%-C#j_^Em-otQRqF@+lB<1HJSTE-z>7ut2k{dvdQfSjvP4JbFgBU?Lf$UV0T5( zwkEUjz|q~Y1cwd;4xHc#j+vWzg8c^qyOXS<`Ms5v-UGe+yv-W#J|T34uDM8G*(BJi zgIo3cztVnR9XJrs?X7-i;!xon$@isG@)JmY8p*$&dN}>SpbYu)>FSdZN=Ns9quX2Y zcR_AD@b&%<-RBh_3F!w$cT~T#cFj_iQ}pJZ(hIzi`DMBt`GPO2aBTGx?y+m-&d`wF z&%BW-<-s__JfSXVUlgo_ePDRMx8D zj$@`!C%w|MxzW?TI`6aIgSrpHd0Ex^%S}ak{j`uy>(FmLdUA`fIf)p=VOm-sf3>8^ zsxqunYy^XXmHj5cxds2<>kQnds04+K3E>>mB~2#6(%Yd$79g70n7Q9Mx1~UD_s&uvDKH3h7)KPKNwUjH&Onjk zbD4Y&W7=v*1VvINRQ2H*6lrdBZ6U69yq%IT`5-D-yEZy z^$S{OulVK|LF;CcQ45j5$sqYr5R$iF;%%|4`+(W`!K?qqr~j2A+BdSHDm)nBg)URA1o5?->qx;3B`s+&Ht zJ$VEVPae@fJ!yE(q|H=zWyiCEE5FTgQV`l49Zvi?Aqb&c^S3L?)W)t?d-u&=+MKn@ zkQ>SC@MO-rbFR4h$%mEnzBKxA=5u~gTvpJ;fUFu`h^Fl1>KzX&NedS&Y8J!v=qn4$ zW#N`$(f$f%@|5Wl-NV#U%fAWyQ3(ZtU+H|so%UA{a~z2?-}B{lwK*c=g;jaqw>kP0 zrOnZU=4cE4NpK##fxVrzo}hg)hc>&x|P61)tXKJC>pRQ5X_@QdeAoe{T$1XZJVjp(XT-$4|qN| z*HYngs^*<0wY6!U(M)mzphcr01128h_uaMY-u>rBh9Zd>cDcJw>v z1$z3^AeVZ~`&a6M-9k{I`cUBNvIe<8pQT)L^osvpTOK{dCpeP+<1Ha;>~CxL!bEF=UCxX-U9t>X%tQ118g8OFW)c z;u(@9&!A*dl359vvs&myU(;xA^BAP0orlH-9A~rhdWv;&UQe(po*A#0vUJ-;Aua#T zwABS~&6^9!bTOom?1;Q1Xxzzuqky7Jp(Ok@`bEJR`0Egc3+gor?vb*q&%D2ESm1cr zUNK{`M>9KpUzyJ5>Y_Kdx!UnPxO(^;`znLCtV_V0!7Ehqx&rlKxfiT27xY0yp~@Ks z!IN6O>`X=YQO^)cU57FF} zD}igmvu~?<|5y^zUmiYs8jmUI2koy!$DuATE_}4pe7G!G-iM3a$y;^;Oi40LCp%8^dCvk{gd_Qx2~wC zrlIDiEg!IdKTR%7h6r1Cy9ANw(%;&9!nuBqv{2Ust@Ku169!b;ozjvfy*f>~^4H}d zrOy$Oz*aYc{O{$&a7c7uFbJW?C&+V8a zJ{aL`p=ld4unzjj?k%Eo-A$5n-OT_8AXlQPKQL-Yb=pl*b=J*Ny>^=rcv`a?dH=&m zdXTrnNJ?|7$jYB8d6CeA>=gtHEm0id(EN3GAQrMC!#i`HB)BJ4+i#J; zc#wn`M>!Zw;T&h+rxD1I)s8-Z3;s?@SdPJB4{SB z)f%mE{SA`F5k}J~JiPM4bJ0ZO3>Yj*URZ9;gZ$J5M=J>xtq_1%y}-07lTd6exBkw$ z7VtZ3trZmWPqnHuHSdPi4wEzRZ6BLLLnEQHC=NZS)ly(o97g-JBsa~b7Sd&~5c7Nv z=|Ngbeah>$K$1}1tnaKBn(vnG+>RCM!37mz!JS+Y9_n7O#}-;KU5gQ@^Ne!(h0%L# z(??^B+pB~~y=HroxW_g>ba;A>=abiM^(lL76=!Vj>-{OirXJp7^9w1jkEb7=>9PuI zm7qZ;0hvM$0;D!wdV zWuGmrLWj|;k7e(MTP38rRas@fU79A|D!GTRLx>Q#RzYy4f@q4Vn0c$DD^8`KoFWVT zB*j#n4R^5U9JhYUsF0a0&h6`-5F(8mZetNi?(u%1v*Co|oGbb7mYjhN5%7*B@GkvC z^`#AYJS_r*El?N*|HeC|HgS$52wQ{=H%l9Ck}$sY$_9tD?l$_(m6kL&ES5sLhI=Jw zb?WMM`y`=ZnN**%XF@RRyF~L#Mt0gw!`#=@9;%hJf_J7?fP~7ZksQN9*VeRWWQ&Nr zV7*bu*ytE0(SmOSt$=SG7P>e?M#hXbBoGArIQY*k^g{{eQsNnUZ;QUU_K;L7YK1m{ z0E++$V|8ZOS#=)!dO=tu+BG5~cj@-lHmTuBcAwQKgs?calByiIQ%I_5wCj+pww)uY zX+~C_5rRkulGHZaH);h4B?*g468ld415XE=8W~X48zcv zP;=n7{k40uD1BB9veu;Oh1vtZV|gfZGs{RNP%JTsD<46(4ue#}QgtXALhV8H(Z_35yqK?L#HCussQaFHH;Ui_o0e_;V1&2MCN|Tuor))$RxAgOnvOEo0o}&q0Ufa4ogyEqJ#-x^E4oll z6NT&pp3Z<>35^T*Yib&EY8z|Xb86c&6=)#uSDqGZ#k%c+ zZQmF4@6?O50x!1JG#UgOC8VGB&;eGbHE`xEk&B3!k&VIPzF9t_>#J>(zf145`?A25 zL@m)t{D_s*0o}eRTf;u(!zc?G@M9F@Q`W#1DoXyCbqG(dYoAA>M-ifRFfxZkMq^q8 zW67$US-%v#t+Td@2To>Z)k>Ze^gT3-jjO?u zvH+yN!B~7S6M&o^sexIvPDUK+`;lPIw;qE`lSa)FR|4Kzg zkM$a@BE#Sa5NJJ`U`1X@76O;4b&+;eXe$xDWno*f(Yris^A<#~HVAiOeW1uLsubnz zu9*2W^b1p~h@W-ONFhuPNqZ*L3%loAoh}|}#Nt{ZJC8N67r(UFKBZXzgASzuX?QB8 zUk;&iG_cuicm^|^YTeOR=NT(@DO&5zP+>&9vdW=A`4Ak+G=vmRm}bqDO2$;8<(}PXJ66n*SpGaZ20=%5wmO~2Eg-Wqa zDYoXj0=Iupc9uxsSuK>NeMdA7t0TMEQbsxj(;ClL>V|Wbit@tUR2~&hrRMyTQem<* z)!$SNm7FX^Rx-U>yk$n{yK+-VBvZ-ejwtQf{A{Q<@0qZcBcw+&i=oWJKqOK_^8>?x zko#g*uZI`$Ykn~YCvTte})%OgnN%O2q# zvQ4Ph2FCT!t8YZ4X&Q1C>LabML9I3-gj7LRmxWkCA9!33jTqxac385-JEfSe10w+_ z1_F|iEpU$lzJS4NP?ByWxt}Ygff+~=4&Ci7>&6lktqhZ5-R}%6QGk&#u=;!OKkVzG zUB1Ta5Vf?LcaKGqh??$d7&xmxg_@1z$$^6JDKYd7BsOW~wmImVO<35n)?NR7!jc6d zFRJQ~;;Md%YUyG2$hm<(cfmN%n!z!h8;C?ydmu!AT48Seo96>$ad+=I@J`F9qR-YXDkJ#X&BlbU2uw~qD-$r&?HU7VTm|Q5r;A25G%^8 zA_AYmD#27Qz}jJ9e?|7!$o?WcM~#4N=?}vg2dmdT3c`4@#4PlTRNugs8B4|Esjxt{ zGB7KzAzlo!8mWR{9Y-iyF{|np)EGl4j?qJj7$r6${)}Q5od=_rB2kQZa2uwXo>4D^kw~C^37Z)g=;Y* z?x+x^erbOtr{4yzSQ1Ua&`oJ@Y&^#@4YcFRwywSI;IbC4-2FSCEvrUVZ@7mda~!s zsg0o{7&A#XY=(V7bK{dorZ%2FcEKyNFTcn=RDaR*#h#>!=@)slugo_0G(Y`xaKu*& zbnj#02inpa=|TO8?kf0Nnh zb6^t0P9n0(Xt9hID_Oq<)Jf~tNE;s!);}w4d{kKfYiT3)AMI;N{?y+JU8a^cj|$mT zBtjLv`Rn;hcDwS47MY5uWc`BFhF^cbNN!KsxIyxzZIYzgL*^!r0oeZJ%gjcYVqsBf8w9G;ZdQYUA1oo3`WrC_RHL!(8JY$*9%pkKMjci%V+)g+L9F(8XqbE` zYCWF|oOQwimacv#CKR;L5{=~hc}sXHt{o8ae7ivhiysqLxhdHW8h>lptG67hnJchu zAgmk;c`^@0mkA5V&R#^Rdvmqe(;8}5N=yLSGFWnI!2*h@DAx<6*fh=6Gu!-a3d}1M z-j<7{82&=zwznnWPiwATv3tv5o|?ez^Uk>_$`<(I_*@#ctpQ$MTdobd3)x^m8kdSR zRd`ki)+b^vLZ1q5;>gbuO7A2bF^`V4%ehui&D&(ib{NsVa>0IGzQywkh7=)^81K1{ zMJ`65$u8$(CdswhefgHqt)W{egPbecbxApLr~T4voP!gg0nujrt=K@xZgr^$kRC=m zNOfO6AJcQ70AMANb<^0I0-Cw&$AreT6ojcl9X7(Cdr-f%Miwl{^*X}CnNh~`ncNoB zX()S3fkkmx?A1f7cTF$!7#lRg4(QZU#px1{p+Tz)87ofT>oGTIlXq4KJFto%CF*fx zLJs7sIGs+7w7>?F?wL?=+6`06>H9n*5bhCqD(}&-_kI1&3e66kfCSj6d0)s0jiqGt zSP>e!e)-smLZf-F-1L%A;nsOS%xM!}9Rs~pd}YkaDSSd_6a6f?mF6D{pW5|&qKi(h zVP_y6twDd~k`{CsW5t!%KsSbpVs_}Ek`Jq_7XE*k=}<|9y4L~Kt7BgHROr#f(4;wO>5tW<#`!5BB_}(VbX|==Z3_KRqsP!)D01^ilyF3Sj zVCePoccGyaC?`Fi*_7TSze@vMPejQPJU6l!3?4b(0-eg|3bV`;LqlL4WXR7lc{C1r z*KCNCju5&a409&9C?OQ1o`}PgKP&~IOA~gWZ1)+GMBGq)k2j+6Kr0lf{4z>2FL1l^ z{G|@lC>M-_qP_A#?a~MrIfDkZY6XsU^UR}Q3tAW zDHA6(Wi?V(U2sE84(WnV3M?^9-|e(BDj41OV_Ew9p;LVa!BM0ToD0r!lS@1QI?4< zCR)lw+PHC#-vX2;Vvd6k6LuTjww9S2q#8%0rrG>CHUd3E7|&&bG4(BFVSCFAig2H> zR~xY9a%|cW&sXw6d&PA#JpYhj%|G>raaFrL`*Y>Cnx>fKVapwh_q54lkeiE-6k z{j_GH4d^?!XxOg0bL;z)aw@qmL3oREyp{3)?@= z(5Jnvoq}89q@iJcy&_|`6I+HK2>BR6pY|>YT@WQ)Bycg0EepO1n@Mz(ZH6sKq+F%T zPy*%3`)h5O=(iZEn63?7)ifH0-Ae+TvqnGg+wcz)nW1lv#= z!99)|=^n*UOQp1`yg`nnUgR((L+Hx$frvFImJ%8Nw#>%V7|-$7Yu>PVOk2GEDc5`DHDMzd9K zj%Y3lf7O6+m|JKa9sHRRyo{kCC+XTs?Np`50!Fc?Ls9i5g@*IyAX{TMn=`QvR}utVj~!2{he{&0(3D$(AEH11ReXi>;2R-ji{V=#1YunNB^Akdb8aY?o|UAP zQ-iit=IwHe}M zaPl0?YLF+(+R&QNMJ!G4!7+`_J9(nIgGj{is(cE%gmzK-ndi6&3|_9VIZQ6I%EdO) z7G$=h^O(Jgwp^@?DCNa$jr1M%+%`*sXJ}=a`0f~wu}$18LE|6po%tt(4nb)B7?0Q{ z{t2N}3<;1l!j&)6(0F3#hkF>moNFmK_ba}1^FF9O#aDdXD-}yH=;knX#n)9p&3%u# zr+6`tU<&`A#xzWUa3I$ z_T0NK{j@kPsj9cP6|<#w(`;4ySX0v!RX~VkW88NY7UWopl28bK2{LhY-<_(an2VJU zqBPVvuIrIHO^QxFFvx7ga@eECz%Yeb?a%b?y=5tjuI#9V{}~ME*>D|K2gW5IV+K+O zMiGsL3Ghl+2Zzy}8W-_2|9}56F=;e9#{*469X1sE4JJ!t@C$(wa92rmI219MVtuY| z)B!VX$fM--w-j_Mj&9~4aeBImCb=-kKLqOpJXJeR+gBywdG(Wp*rf<(9!}ruJuH|H zm)?YBWq*ZGIGx25hcox5cfyU=mBw_FN2zvLK3m->Ov$EQm^)EvIx4-Ha?~(7ddvC+ zh>V{r0}GK`&5gyExL~I%gsUAIGd@WmL+I3Pe1dF`VmyMvEK&|TE&nLW|9VK$cgMH7e?m@%=;H>=D1NhcR9prxXN z5)^(O?Q6=s1DnX_Fc3s@zKEQ8loh_(Uqtf}k3gG(6}I|Fn0%t$`eVtPi6vhy(ro68 z0vi<{1EkDa1MgxF6ov|Nno;@a58$I#hk^~LejI#;om;Ll*`Ptjc063+Jr5ecgsd~J zS_XH*evJUaYdmw{=e1*@vIG7oX6&6}7XSn9$%TruE`Sr05d8d2^6wFxbzPGL>IBKZ zPf$l>-4dMLLJ;!tKG>4DjdK^_be7|k2@4_?OecMgPM@R8=ja9#(im>5(!%VN*@%a~ zI$o&$^|D`LW9qR{epN5YyK>9b9-e+m#}>ZTE7Vs0?C_K5?YTJ z$v;FBYdqmB183e`_-^nzh9c3=-6FgIp1YK)N=-OS>wL6`N!0!}v zML&M8vVn6mYp7X$&)Jimk`OYjbw|G3_=T~TUhCQKEe8$wgQ+l zGFXPrbg)Gy%xBcwSD`yQSs(^Jxr&qDI$5G1$uXc<4CFRXN=rJ7uV`{gM#(9g&qY=b z*J?+{#*Y|1%tVg@P6}Z9^TC)##T3LFV`|P_gboZ%JJG%FD=;b4o2VG$VYfB}l4A`@ z{RMjwO8n2k>=L7pp4JiGoy)C)J4YQbM#E!PluUL3$X!y1Fr}$#AT6!xcHuBNrdbG4 zEgwb?lo!qYJyN;Rj&bn8VdWUJM2RiW6ep3XUbYE+7m) z=v^rDj4ILcqJ7PX!1^0pNy3r{(iggZ5caUJ_5T2S4<=@i0JXrm7?KtKZH_+15{`ag z8F`>|`wtsJS=6?xNb?ZEW?DH+^6zGxIxosUycx@_kj_y~;ys$!nHYclp^I7y`dRm3 zh?8K1J~*##2d+E7)JR+!MX6ma2yHb(C&b`5MO6+I3``|QREl;`6#AE|cQnkEZL@84 zKf)dls>pU(JlJzFxshwi;9R_TmRB|4#j@w%atUt>9bZ7kyulfnWc5ZKq49Q~wIK!m3}hUmN`Fe>&M4RLULlrFh%3g`6za-KuKFofHC2!XZB-9} zU*qLrDdq&;h*7pZWUWiPk|7^O0OtUYu;C4fK}~;HAoZbdP`%&=a4<$8%8HR;0PUY+ zluMXVG5te+w>i3LE`?tauP`R9;84^N8V9W%(n`x*H9D{$!*SLTUPm{)cfoNT334e? z@)2RjQB&D6+Jt@oPa5#{IU9g8ES>+P0i#Z*7dy)0txX=Ufh6aK2t#w$I9P@$-O}Y>qG0;wR62O4a0`kfz@!D z0rqd{h39+EU{X483etk`p#lE|^%&ETbv$0W0!_-x7tny&-tC=-THmgl;>U zM%+jnVz!zN907wu1;VyEytsOh2zf0w9Uh~?l1=Y2jVhXB86qiE;6mNr`OrTe<2n+N;~mV@-;C6ra~={~KV!7C7vLbXE=rS7WtV)qw(gYqUyW z2<=GiwSJ;~ALee79H4q=2_HYunDVXJj{Xt{QN6Ed76p6DO$v^UFx)bD01U{NFojAD z#!eUwKb9R#0{1}PU2ODqgL}GglAz=_QEKaTp!NXmggg5&?cH{+LH=L1j7w`IA7_!97V+Ae#Wofrl>m zikf<{)t+57)mD@WZ1Jq%52f_&RowEzLsrn1$#;xG z;*eZSKdh)|ypEKBTv36?ClQ%ql@eGyOE4F!>Z3LA5IkQ+lIS!OSOfFBG5N(>4CPoP zLk&j8O@ze{N5**=nVQepKc2w&RsyG!zQ^eU!#9e5?1#ledmxS*%{Y!w_|4!n93hA- z&i!Z>H}v5B88Xm`B^pmlg83l9U_Xw>KwR|wR7LYkc5YCir zdgBI#c=N=>=5=9V&D)Rd_UtO7t>_x&S9vA+9U%(-v=m?!n~Q!Roa4jzSy;l!sLSdI z9s%Ew5V?m+5p0FJ;ENEMFlVq~iv<%FFkEM*krBFtSf8oMsZ1~Sz;~L2G*np)_P(LQ zJG!9=_CHYiF&1=;ySjha+&&UIkZ-7$6j6=}27=iUAp(tw`ZC02WG54`L{YQ^$dUu6 z+7;0Uc;`L>&odD`wh=5BYht|IoWbP|+9Jj>I%dZ?582r&0yywB*kfz~K?86Z5Cbbi zQct5-&T@VJ~Lrn-4vh7&qy+r2-)fo3o0DbyM&P8~orU{Jzk*lI*anxG<~U^q4P z$2bKuDW?EUsn`HvZDz(jN*@!)gXIQysphryskM=vnD4^l`h@}Gll&q`2+=}IEP=Y| zBmA)YA`hMZ{E!SWIhWGA_V`caqIoZI0tiVWvs-v(O{aT66`+RdTwa z^zxc1jLEr~14Ar|=W^!ei^WoxlGh!Qyk*!_$4Rure4^rk(sNSD>-0K~r(l|u9iPz@ zyBbq1&R{Zo2M+YY?@Y@C3d9BuV!{s}`VlP+e2y>agzJ~cioTDQ{ACo&uM)#(;`baF z7y|jci$bDneNeb>AcdpDAZ!iXMpF$cQlN6=bz%8Ui|_)hH}rJs6>RyC;w?K#*uDdM z1QT*car7Mc9R+@vPNVo8-oOeUz(mlAZTi8b(-PROOf2{1iUET88e>!1{BUz{A+7bl5= zA7Sbw^x~4Xe{h=ySCELoWR3y4xQBOfOfW)q#0sVA0jmb3KVY?cpIc_d;u3!=p^lc` z?lH_bqZHn(jw2i$2}zWLMyU>}G4ox+U#v)B?;@7xtG4@~uSQD#4oQsS$j0&je$+z1 zN}=oHg^*$at>Z_KsgnPX23nr(ch-p+v`#Xy7rqdRiaD4n;`NXuiIlvCDP}&_QbX{& z5N0q)v8U!^CZM&~LaU}U2?)%$8X#uL>Vp&s<`RzY6dM-GU;`2%GK|{?j^G*6rLD>e z8xd^(KH>}?X$w9QJyafR7YqxqwXykzH80*rkl!)GOVlK1Vum^BfKl@t8D7+7Fell* zSkGXBBm7-xmoC^397u&HqcAjpKDx-E2j|Hgec9p~X=R?||Fz(3k$x@d*sMr>U-tnn z)r9266k~zMgxiX3Y_~0x3N&H+#7!eO>k-27b=qe^Sr7wiX{E1WMId<6>I}F+6S;A` ziO-rJ9B0CzpW!>7Zaq;m#iQtRZ{G`lzzQs&VCeXMSnG_PFHlFhn4HBar=ch=Vdl0@9)14oAK*fZ(lTtmcAFhN zo-y$1izS{-+P5pL+sD_fNP-Pjm|hRT2+>9RbX}P8A~L*e^Sbs0rP}sWFQ&eCYSTF0 z7;a*c{KG}(>L-!X)ur2;Hdh_$Hf-Z{MTq$A)HF1hlT+j<^SrzqD82u@glErHLJQVk z73JE=o;%>*tA)Y0pA=8%N|OJga~4M#kaBViv03LT7TaAi?QcYl1vr21#ug1T9I)r$ z(-CqyP{(y;he?y~*U%*cRCm-=iTt$US@{zrrIZyrdLkFQ7ZFK&kUh#b)6UUXVP9Fl z{E2z5dor!3$Vb7^p96y)kut!!ge-M*=>N$cM&M4IwKc+bP7Q(JMbZl?5X$0z;I&S* zQekpp*tCgYY=OIma{F=%`7OiLA1cHESD?#RC#{8i!eVAhDJ=f|*OeO$d)euztMGPx z=`j3VSZ)SthWA+TSOnb5f*FR@^_B2e?87{FLu8heZME;s3z>{IfvG_(lit2hQ^ z=ZdcfvA)9A6D>4hxrtgl$c_#6KLf8sUN{+T=%NMObgZhzHz53&g0=KB1Qs;>B*SwPKjzTm_-hQg z@i!^79DgmLhah0O;n^=Z{Wh}nhS5vpR9>9Zua{X=i z%l{SWf2KbDLeFeKP+DPF3}und5?c?{sn&9HW7)-QYN2I8#jGK2Y}(L+31<%+#%Q;- zP$1*cc(1`TcKw%{+mZ?% zhFm5aGtUmHnz1x~i?3H>0}q>ne8^b?tC&eA>Jh)#Z^1rNZ7Q?Ns*W=dm}Auex{4_x zn2xZenvXSWt{&b;#spqcaYqbUx4D4a_$AH>9hE{j4H1Sy$P5Z~PoyxR&Godp0p*g@ zk}isGkM1tVSgs8VKcOrerdi&{AG45477iV2H< zUa{MP?Y&s(YVYhESfoK{^zNtAom|EkiP0)Tx_!%;RHO~oNW6#GoY&+&3UvijpBw1Y z&P5b`bilpOsNgLXhp3U2sjppqU`Mq&M-&DeUDlQ8#7^P)u{Crgc1fHLvXHJFwovFIRj#`r^} z%IE(LIj`j8q}{6@gl>IN zn%U8XmFp7%dbu-7qEIne`P9Q_jM&{EHs&O=BTTlrF4@&d8a8!kkJ-_OvknE=K%n5* z=;mq2vK4xQ+b_A~p-pnIc|vz|L%)fZ#%kCb?-t3Q0VQn)cIct%__f!=f8`nk4A{5K zx3SSc3be8<-xi&dSs<4oXuFY?OCqx8AUk({;@P|%7XQdZxkmHhz!1_3NF2+#df1di z_mA*|UCVq}yNL#PGa}sNCWl<8zWFc`vUb~Q3c~1x0CM^P@HV zQo!8yx$ES^cp%9xDdBKdd4 z!mu}m!`?$B|B+abJ~Tw~e;t2~I20hD#TB_3xSjE2JfcnR z21IF8*NyA_qc5!O(TzWzF&AIQh(_1_mXnXi{FpgVV4`D9j7>O}?$q0I ziZZ-qR-y1mbngXhz2hZ+Ppnd)J|sCtFRnmJ+*=bGRBeH&eiqJ=6qz=bbMr=MShmB$ z{8peTVRenQc6`|X3pHOGuT1jKiNBnyW*jg2*J~C@;U_#wMU+FSX<%GtJBtacnx zNa0m-35VjWfp`9=wf%cdRrNE~7b%Jj4Jb0f#feZ4`|1CP2-tg%uTI!B2D`pNi={Ku z&nssMn!*&joHSX`kk8Qiqj}wvs0XaQ4?Z+d#0 zG#3bXt9wHy2-J2umO==0!r7UbD@lzZI%CgMgaanlr1Zc;vD6^P6zpxEEIbYc8K0N} zO|l&+o=dUHmmMjLSXQLQ3!IKYboB)r?Cd2p4vGkL0W<k<1*5|4r8vM#$CSJR zNA6X`tz^6Eg6#?#EysJ`e$~-6x)8D9P&`l0cf4V`vUx5%^^)w z?V-x!xK0^tKHS$Ai)cbbQ{~q~h3v9U&s#N(*^aKl`TFl*pVNeN}br zI5JcfUwl?!%B1Aqh>!vE>0e@*RVTW;ZJ0LZSp&ZzJ)3&1t?D%+%-F3}YmFNGecmV} zXsdU}CS0z)))}L-L@ZIo&gYFu9$@oU92-i!_m69h_6W+0rL4vayVVkj+Xp573nhL^ zO&oRqMNb&|NT^YH)j+UkFL~;YrvoC`pr|a1tkaYpQ>CPTorZRgc^E6|*bL$(_G<`Rx#JB*TY0eWu0nVVPqt%Kd8QyGr-*B-Q|KHpYE$(Gh_9 zsLDD`)Z$F$g!l;`HMa6%(iv1QmUvoPT5_F%X{4+mHR+&LGu_O@Jx)zzTH!)G(PVyS zeErW18cm)73Bw{DUuhdfHAq`5C#B_ zy&xpko%+GWYIw1c#`6`ci5KfQZ?QSleMD;w8>2#w@R7M<+YL76B|m+<_~7dYIun zf{7K@{w}C2Fi3S1bCD^8Z0ZWsP-u7j`g_Z~x?#-3p+$BuBJy-bug14H<8k2Y$TWxI zegP-^7&gqu1*ZsF#;I28g>*q;jES}E+AX>vSzj`a8RHL=`9KP#;qSPR4S$D)aM8MA z3sLy%sG9Qn^)33n`uFuaxHTK+k(j(>raHQsxxr%c3%C`aaH_8vpPRtLrIknNdINtF zyJ5^UM5WbC<1zian-UjtT1M|qf-lHCucrvQ-~QGc3fb>S8V9?+8JW; z2HKoil!nzmdy)KCnxbn=s6PB$GB<_trK)-w$;}s(C|46*u_dmuY;g3!jVx6!Io#ln9@EQaO{$?uK5gPX~!u9f_?@i4w2A^D$+1;Hq>G4=wRNVihl zCHY^B1<@(N*b76De56Isd^B`hKA^D~N~o%VF*PY&n5ZUJXiwhQHqY$ZfCUi=@Ob~8%xz#d_xBi6qm zOW}Z;QOj1U+^8#WB^rf=6*y2$W)n(JQf$$#7|_dK8D=psB9lKQB6&$Hqqd z&}>4-n>O0wv|@u6jU*vO(Vdk|uiKao)k&mA%IE%K!`jZqbx1{5+K%qV{kBJd13dHE zkcL(87yMw-1TmwXh{Ls{Jbwa12E$Ay{vhr-Zy%C#q{>6_PC*!kwhu#F?N`{a$(+rd zN-F4?Ii=*{7C@p)OcEfYI_B#xM+zqKFzRDlBb3U@9A!>Q`{J15;7Vf5%khyA)+A8u_w= z9N%DnpuvDAej5Y3mXCdA248^Cc;N0uWuxgb<_tKCzUcIr;4He)>49Q#LUx=W7a?*m znnn&rj|E=_?}__wP}T0rM7e3>GDW%4I&*Gx@?C)W3@^ zd;ix8idPL0k4dgCKFJ-&MWjpyC8ax#XFCEg8GM8WAq8DZLUSV-k$5#RS(z|RSlQ5o zBP{srxZOu$9vVLnjm{2yN(tS`%r?gT6oNxpVP z5a8^Uxgo%wL9UPkxMe^Ok-|f1RGwpdS9ES7JKH6CvIgXi6Xn0xhQI=`qOdP6Vpo>C z8nmjv@C&V>R*=7Vv=s?dJFhxHt%>z@f;s^U?I3j`x+({slcJ{%Nz7@202uGqPQ)8_$uiIcLd`nauybp?)CrtL_ zTroCR|NnvXyXQx`@cDh91m>pSmI{ z1u8olVVga7N6_KLK00OvE1AH~59@n&PpF(yVWAGR(_+XY!T29`=MhsIRJKu7`H?Q{; z=CIHxmG<|>@g-Xg4qX7t2Ha){e-1_wGT1N5K2-X*a>I3wuHtv8lW;&24hvTJeY`G! z8!gz9geym0pLdrAdQ^53=A=5hC-1tUnAM*a)T-`}S7qS6@$HU>qP>xf5LPW;$qm@& zNW^zVybu*%LI^lu5Ykh6lG;cN$D-Y8%|!z_W{OL!qeS~}bI6V-LmV6xsgyw~zvTa&1;&mw z5E8Fm#D?{0lMR!A$ZX6-l>lI^4$Hj!7Ghsz~k5nAK z#1~ufwMsI-b-*o|1wwuz@SEEy@EaBg6Hc|G1NZM&JHEkR^tt43wcz)JQXHr|#>in~ zu5!Ad6^D^fgDz-*U}y1vlZagK&uAY=Bd#O5*m9n&bO#ZIjAC?;N?&Yv_Bj*R01MOi zYFuHjDoa*MBMz;`pI0{{+N8iKVe9Sx4~gfX}2j z;$87b-m0q-a7?mB>8av~yO@-1I}>mm8%v=QWx178_KH{pt|tWhGXbJ{hw+MFpis8G zj&@FuC*?7)RVdrGA?EgYjH+?F^4Vt3jA!T!-!N_Yk{PS$=~_+stQlTRwgGVO>cg2GfQ%gf*cwdr``i64{FN+5!;{D5b@Q)G-*%%MLG$HtdcrfXOQBw8C zgU2NVkFv!OyeJ_!J047$UbK)qr-JUFp;R>p%9S@W5A@YM;0w8n$4NeDh04<3;aJbZWzlf<6Sj0fA))EAAqZj^J> zgQLnu{nw~hMm3IZ9(8EcccYA>$BoV!eaGkrM*nj3n$a(fo;UL0k(DFYj{M8W){*}h z**)^eh~5#_krPK^%7h~@?MwJzELW|NSgzAy_G@i0{AH1-hn`ctOjMx4!wli1Z%s?C z{Ja19L2~Us*q6>4?h!h$1K4mc{hYN_oWxy)C*cWu#FN}6PFsQR1s^33-!JI(zCyen z5PIM$>rSg!rj%okuAV%H+S{t`TY*E-TZMHCS8Q0c0^u8eT)1H&J=BvkRx}MxEzX>_ zLcq8CaBsw}WL(c$T_s?vG7@?Ol}z&(yjk;C;4?#St`O+B!-q(E871AGkQBS**B4I5 z--RVv-kI}}7AL`(V_B zgfIAI!q)-&gYa*oi~P1|L%1OwJ-0p75Dqf z`j!^_jxij0YQbj2y}A-~<&+lbCS15f{$ki5WuMieFVf@kfg8{cG*N6AiSzP?!b13< zGdK1g=umnXr;2Z4+2C^#DTdD@j0*6^ir@-teQ!Hn>ACk&;$}?z>~u+avB6)dgy@du zUL5M64K8x1qw=tnj}%>x2eSIo^MC^3o1+#td{A-a_*^K8QwxK(6x}zZLgD2WF1{HL zd`C4*Si)KfEU`+YYuNEh&%KYP;EAxLqbYGL!-OU5cQGtYD3DFN#7e@UrbpB)<7+8bV zJ{6SaT(L24g@1~XorGgi>sgez+mBECHrm&X5H9I#z+;nr!w5mia;{Lakb%mGCS>aa zd_DlF*MA7Z1Cq*VA5aS+;LLlY8|$>*shIV*=qnU6YoHW+En0QQUETB?z>3sHzE09( z#ZO0NXq%`)^^2q!x)Fm`5b3!%LUyiba6JxTq~~hS9S#3rY#5~H!ujc3xzl1DF>s8K zBNkQ`*y#b|kX;t{?WB|2V)!kcYI^}MhsjyCC*6T#Q}AS?O$|7L^yt_-UNAv`RcOBm z8%ep=baHh(Uw-&UQhrD!o}V(pJq(@ShD}gy3{Cx@;e9{t7LwnDdpLaL%2G@433l8C zlLWWevQ*ktq@08)Gev@d_ya3hB+(G}hrkvreebFOjHF6TlXs>IGG2!*Dy-4y2tAI# z!wyA%`sgryKOLqo!oiWFY3gBmy7XnxVfrN6>q@2r^yK6Lj|^OjKu*}?`NB&m++hu5 z;Y;N}91X5LOLv`aT)aZH5%(0VU=74B0dC6ZBXY3sTNL1U7u{jW9Jzb$Tj4p_Cb}?d z#%aYy;3S+;(9(>ChT&S_GK-F0?!gO4Wzl;uJuSwR2fVNg+$t_Bys%Y#u<+Ve@u9+7 zTE&M8Z)+7FDZHaq{7E4MD(zHYy@7%DJ`Tggu8uTVFdV|66!nf%esyJd2KO`6mj_}f zX*oshbmIr32Xol3q&D%y+QM(Ff&0VM5^Rd|xrgsJZoF%SFKzCMCA;%m#UB>}(+3I# zDQV|@D>56ak8H0HPQAR8hFGt|1ah+#C!IIOD>fN%&J`Z0SToZKkGN7p%xT4sDcaSD zpj#Vq*~v=wgwvTI6lmklum+A{)(C_5`p6rnA4B_PTxx@L7f#B+ya;E1T7y{wD~YAl z^*s6whxF*a*IQXDKgWJDL|Z~BEO;hv_A$McL)?TL?U?B6V-J0xcVgKSsBGTh@JXc( zUl*h6=yji_t#W)DouKI#N6c~CB6yA3F6U-qN@5;RwBFJ(C#X7{UF>4_>=~9}Uc{c@ z2}H1(^_nIgwPmNw&(tHls!i-2=M%B%>$4`%`k@Xng>Ma zf^G1>P;=^n4H(_<4G+@SK)Z`bQqdeofL(~~`)SWO- ztjk>x&FQ&o-DfP-?XgCyWeuQ;aa}u0W&a_?NR#E{@)*}0VX1&IYD`L?w|cbz;h{+k z){`GFmq>TS*&6&{h$!Ihm*@ixvA2ofb>dv4hwmDFkTf<7Hhqs_fGeK9k47_5buFEM zSjoTDOOLS+fPyFKD(YBNUt&~u2#OsYSA}ZI<{u1ID15n>G7U9%GSm8U)0yI$i%;=} zC&F9Dmpg%;wDfc_J?ZIbB0U-DX%dp}JAykL*})n3)pzbYCReqmk;9EI_e%Ee-PxX| zb=%l;wHmi7cRU{qDH_jp6=mOQAt>=VRvfmc^L&$7$PhlXu0%nW(C})aq3%e4M7y~RtQ&vO))wx$X>t4{)wJYFnW;U+Qh0$$r(D=k4$^Vy_*3V5x zC0Ah9nG8q=TnYnJEFM>ud>VUU7U7Rg7nzrvFEW2@`d#wxk~f++nh%)Sat_2M*%w_c zz{=kLUNYu6eC3{9|9?wb2o&i9drgDS8!pR%kvJb`S=q{gA1Gq>PFx${`Gh%KvO`Jj z@^iNim#c0W9+Oqtbw4h|T7g{j-Q7%Kub7F6 z#Z8~iqA-+k!MO@PEDSDqC<=z0_gK}OtR9-=6YBXpS4FIWs}*bDDY}TDk86Y?$Wf2! zQ$-!0zb=8Jtm?VR1UPzvrjmY|N>VY|;NzmWMvgvH2$6;nNp~^hr~*!NVNUo2I!?Sr zaqSx8lg{DM$!BDYwh@Wb>FNxz@HoehDZ4oKPt#rsUkPr*EqSoJvy~veZxdY)GDROf zwN<}=xl&QA3{B{$na4-sZgIv0wEV_Z#+bLg6zaCt{c5B@T~F86(QT(}0*)o+t9iWs zANJlmzN(^Y8=kiJDJdttfp7pr2k9N8h8hS>ke+gYKpH6&5d`dtsEAaN-g^&KdJ{#I zE+QZzf+!*aQon0vayB69?fri5^LySua$ucYd-l{dYi7-?DW?{ce2$^SL#t>xCC-kr zJj(fSq1@A!aAQu5pWl_KNezHsZ?U2We?Nt7AaDE)j@3s8e>WU05(D-U?|$^4Q0s@& z7hJiDGx(}w{E_M7Mt^sQmOjCKyHM_>hnY|v!t1fPWa{=n96z~ky@AdA?!yOlJ-NKu zFc=LMTUAA*cN%ZXv%xm&5jGWEWG=6hl|Ip$oz^S!a%ue%x5>(v&O*7NkGw=Q1+7OF z4SpXL-u$tR#&XAw*7DXv-gOrkbWEP)tIk`aw}y?ORwTY=W_s^DLOOUTl-s}xh$GJU zooXc5*mA?R$tH5>JIS#_cE zp0{RDBbOVh?o0lTl^mVP>l=OuQUy~toXC|gdGq3}LEm1E(5emRQ?<|AUY}B(A(Ow~ z%aePVs@x|kH&WuVDSZ#T_b9s#Jvr|zd)`ytVRrrW=xO%6_j$+Jm5}E-<(=2gd&)bo zo%fV?Vq3R~;ZCR`th7AjJAUop(T6u4KD;bF7c7*!@}UzBOFw+L9I6&B)auCRmNO*e zu=Rk8{tyQ$`qV=wCGit>VXxlnJK}KRhur2VcVnNnyg)n<3Mb&tSx)K%{P~BEIE?=A z!JEjHhfaBAKNqZyxj&N1FP0xGmESBUmCElA9}DH)eE8r^g-3atUY`615V3HGXrCgqk%6_rVC`#(x*+Y?FcS4m+g{O3|VEt4uPliL4( zl+^ymk}8y2@}ZO|m82$&K9CS5f9@35A6BtEIQ9HF=*6$)VLShe-^)3*Y>0I%FKEkg z*2BXSdsygAdg%Nx9ju^R=?t(u0I=tGsNkk@&2n-hKM^>z`7)L@(0qg~5pf6Vg)4mVbtnCT=SR z2@t#-Vkv{jD!laAoB#Asph*2+pQX=56AJ4)Y@o+Bc4A z+N?#(R<()_CogvC+~~Q6tz+xdd-nfg`u~tWzrTC;%-_BE@7<}t>#5Q;Yt^n(x8Ae$ z8#HXxxYP471yLJKo40A(u6>hcaV=w?h_qpPW=ecolDkovGVXHjM(G(tGL!rC&30F; zS+k}I%uLVpb2dmwOV3P=PjP2truWH=PjzQ|GEbbj0< zItyK8Y%A+kTznsoJ2gHdBRQ>)yLWtYiYG~XXrCRQnVs{u;oJAk$xccil&0gCWp($? z^mt?}GBqomfA*)7>Kxl%ad8jE zHPF1*64N^w0w_->)Cu!B7byL#1Rr|OG9h#AD(OLK}|CE3D zhn!)A^!3DNl&@GV;URdgX@k`CBu{5|Qch~>kXlYhbWDbqoFpkeJN}ve>B(7rlZThj zNF1ykvQeGo(Jhm@|LP+%{I5JZ|5b#l2l1r+n<)QXgmvpmG5WulLnYw2tfp242-?hbt+ z>GK|a|2}URLpDl*C^wWULUo%N zP;Y8Lk{6*&S!tzgsK_=ssGi<=gQz0T=hJiCnA>>VS$(B^)Iw3*2}4kwvRBP?qeKbG zDO&r-XQj)GqH%i1$%CNo5fCxTVP+BcAbeC}F&JjX$<$P)pyMIvvX6$uAuCeFNe%qu z>%6yG`TaR8DbTe-D!!^ztzEgQ0##~PuA)H2+LbG&5~u2Hz&)Kx-}FHkKVqneae?}) z8SGBaO!8#96LT^%b273$GEYs?l1gN`+b6$(ED>i`VtiV;da8mSx|Xq0uT;BorBqS@ z^{MiMYOF;ZDlBod8I*=$NQJ?8nVJe!qP5H*S**r*Y79M63p10Plq9Q_#Kt!67#oLH zfqYaL9G&4V8J!rNSjt`39Sxzf-ntXf;Ul-@{~OV8IFN8Vk8Jrp|EqA(iLIK)qRBX9 z9vm`5XjJZj(SyrJ4|d1Pv6YmsyjR)j+3_jxtdxH(1aS~K&3M$siln{N`C9!uqAOGx z{O|?31ca3h3F%=h@i1vQu=ty#@v3nqhP;^w8k3P1862Bo9*7yiqe;N^u_PL$rwuHx z5|JIg91*DG9mxD6k7(98iHXoQy>n8CnpmV^o~Zf|(l8@6>{_fysUFvnKuQqub%*O-9G5nozPY62RWCoK`p9z4J}+{=ZGzC*J9 z(W8u@oVN%TlhGcbj8tL4^LVNDP$wxw7ypSedxy1u&lRtaht-jlli;n9M=B{kJ3BKu zAqRrn%444EzOd6CAaKm*7=LXL<$$>^xj zf9qub6jPocLOcdSB9I|eo3xyG216Igv3#D4=!h{ULoQP=(AAS?_aMX#!FjC0y}8Ol zCn}5Z=u489!Mq%My;gL`HY9l&l&L>jR&*YD<;?=KAmCY;G32!Zl~r$+@^bpu<&+iX zw(6H;Wq1;kd&}updMy2IApd>6 z)su#*BJtiQJvZx%u_(OBS7l}9lX7$)XVs|=gm#cBb+VM;L7DLx?)XeKwW}B_hxm^O ztG0p2$#bH|lA+AZ_#yC@r`HJvp_%AKVPnu;90V*)Rle%bA8FybJ0~ev6Z$#qfa5CY z8t6Lc2Iv;(Hs~(sK8S=La4?VnnIJpJ3GxN`g91Q7pb$_PC;}7(DhMhBa)XM3o(2^M zl?0Url?9atRRC22RRL84)d1B3)dAH5)dw{MH3r3int@t?T7g=F;y~>{9YD{4I)l1^ zx`BFtdVvx^Nub`KzMy`f6i^x{1C$BM1`Pxa2E71!5i}e$0yGNr3g|V^8=$v9qd{Xp z?}5gG#(~CzCW0n|J_3CVnhu%?nhlx@nh#nCS`1nWS`JzXS`AtY$^~rzZ31lpZ3S%y z?F8)x?FH=z9RPg}`U3PN=rHIg=s4&k=oIKQ=nUu_=sf5G=pyJ6=qJ$6plhI;pgSNE zfjS2Hf`UO|ph!?bP+?F}P&B9{s0^q)s1m3es1~RJs3|BG)E?9c)D095@__n*(muJPR3R}{NlY~oQ=P=rATc%Zssae_D^?=y6Ejob zyNNOyw^Px?WoEZeBn?usNwaixWpRBvX2>Z5K;tyhJS~ef_N0*3IjIPSH*!)+T6vIs zJGtB-?fm`Hhe!*5YI;tVheRjJA#qoX?FVB>-(3wkGm?@s>qaNKF_*-b#w2NQ-RLAo z(h&Kbs&J~rm`lh}xc8&2X2qg&h`VGbXn<10DNS#fxWK7(I-aBvv=)-WM7X{Dqa0hw zX?5S^Z1uwFwv5Pf&Vg|_)&huATJ_!O{r{_(f}^ptOT?-%<$pED&_UcCvoP9ol5&rH z@`mxGgPd2?k~910oc`c~gUD&+V-B4#5^>Avt_O24>Fv)kNqb5~vFHrJs=yE;Sfq zFw4=;LLmW8m&;{$hJ=_QK|cN=A%P*jAtB!Pb8e!JL$}!B=ayp2mFRXg~!-}z9Igbu3t^N_#2{+x5fEaAkA_23ctOi_s z3g7vkd=BJuAfE&I9LVQDJ_qtSkk5g94&-wnp9A?E$mc*l2l6?P&w+dnVmY^(&K_$|vB z5`=+PN)S%IW@{vf04Wd&uwJ@Efi_8iYtl84_f2n;F7nFhoe~uCg2Dj%q>CGLK!PG( zP!yn-WJxg;CQ$-;OSb~i03)SKadL{kB0&j|0wn=vN*7$@P3A~Y+6&469Fi_&L5C$M z=LO{fnB@91AjN+C4x$DX0ZPkPl|YFSR0icpPzCgw1XV$HSy$D_>!hRv)j@3~r~z6k zK~0cNR%0ztNeOC$)VckvK+PnG zCDYj}QZ8CUj1*`?rm-VosJ@iSzMvKoB!ixppdTnjg8qcEHzh~` zt&kv<%w`8ANCUktWjP&k)WHpq0s2sa0iX}0P-lXYq)=y(S!}5U+2m*bodh|g92;2- zU?3^W=+gj$$VPHjg2AA+(fArdrm`0$cmXs?f}x;o61+%$%_@Pf zm&g@j=1H1t$ zDZ!hd<`TR`a>*MKybbzXg3+KW61)SdCtK1O@)3JMf_Fi~BzO0$&Cq3-|)5wS9t`lH78Am$#0L&mW$s}KZnaGIE4`3Fu zwnKv1$ZSV{fH}y1Qy0Ko6sU6mz&sT3a3H{Z6naz;zydOZ{2;+XGMo5@04ySNNizu+ zlR0EcIKUDzk4%XGSV|UdsOLmeQ609c`DJ3P0hz+Cyy(+;*XtBio9=Lq#UIjU<)Zrzmnh+Qik4_U@MtMIq7ReY$G4jXbHBH2u8?6BVq>$XJsVVNy1ot z33icCwn2j3B!pF=0DJHg4l5+sOM+No2Cxsm$+1>~{lv~naDY#Vjg=4p2S^|rWB`0d z0$8#M@HsJAK^wq9;$m?Ud_nx#M-m)@WNee*OCs213BDpeEW!?O7(ek5E5Q-s$6k=& zDDh>7BsfN@FdtIhj5tmzvrGw2kV@=j3UHECWG5x~np9vF8Ney>3_HL9z9Hq=Gy!m$ zcw$l&b5?Rc0f&ea)MeJNKz)xf$>lOlVg)Cs#CHR@l zXBWc&ej)Q%XaRt$WG;)A;8${y*+~Wa#B1aSHk4MdNBl-8-zmX$a+Ad~fZxd-79{{~ zpnsiZ0Nf-FzRm==MQnVa4d4%A=MFo-ZDR8J65JsMZzsWBBKS-R?h(%89RT+U~&|Wq$qul-^@yBw+LgYbF7wzq7d#2>O7zTmS~W&I(Fk()(<%1UC8yTPA^> z-eQL(aM0h_uM#-vudG-AfDgUKnn>VFe_^8}@S{Jo*Cg<#SJ_({ zCEXkmf%Go#CqWRs$0tb;OmFiV3?PL5!MjTkO0V-O93YJT#-~XTPJiW20T4lN@f-;v z=}rEP1W^=q5wG(6ayF} z!P5XkB!~tWDnW68VG@+^f|6cP3ShW=RhkN@0e~`a87V%fb$Ym2Dl(W6@ZHpR7I%SQ2^Cw2{u=P>TsD~0H6lIVhL&j zESI1b{e`cVpf+3@KLt<+AVz|^0BI7`1IUozS%6Fl>H}m;&;a1L1PuWi76NDl&{%@T z0PQ7c0`Q&$F#zvN&=kcPD?u}Qo{f{BIbO|_pasBU30eXym7o=d_@^X@rM~2}1g&W# zD>?w64K2WmOAtq&Vx=W$OV_jV611ZmStSYD)6J}!1RdxFR!@SC^hefBg6C*CzBm)0 z6aAfkB|&F;gMXC`@H|pKJP@EejZkBHXAf#u!+mE@<#y{XIKD)kh&sIsR5sIpr{w$hRyKr$)~ ze*7g!2k@03gBH`w9DoQF6EbNg`AOy{3$?5wv|d@Bt>9LKRuWdCGGi*Z%<7ZHvCGu6 z!5@{V#VE@~#-sdL5$4c3x^@QAEL|ysXa`*vgAtEnf{aHcI^-`CRcXmkmggrk_HX<= z&de96sU>qLn5lwWz1c&W@}*^N~`Ev9*!jbQ=TnGNg!vx&X;IC z&BGiopGTlhm4v^5+EHRW5J>KWSv9K>D4@#5Yfq$ZdA5Q}p!oc6f?J-g;8wy_nM0>#WX;7678 zO>arxLU6^yx4rRXpuSW*mLDsW6^{jExt?U5>UN}rE4E0%R&0@Vp|UF5;N$GI;;~}3 zfc45Mmn^c%v&^cBaP&O2V#Sy`2(P@b*gSmI~-v4Hi;@@#=I zG)GIzAe8;0?Ac`5Rf~HUGOwD$djN{_?*pg~e=LBif)4-`$HoDul78r|3)wDI=B<`u zrDdfqL0+FQh(>~EMN)bKlqWaR5r$gb*cs@czHMx;BPuKD~XR0Tz<@HR2l&Q zrc*ih2be+SBo|;Nm2+EwSyawI0cO)$8qA^6JOh`xR2oPC=F#RF%%?FLET9cESV)^` zu!z>xU@>j1!4h;$@?$QgZ8TU$pVMGDm6j5`T0s*uSV{HI2%4*?oR8zxY8tD-8rn*O zwY0Ma>u47Za;db7!1H?ARf7$*rv@9LpykKhMBVZ)F*hso0>BoUq+LFty*1cMlQq~z zr7;G6wnKgt*g=bEuoIkDF1yf=DX<$otpaWF}SG4_yvFx{-TIk$-L$HI9sg;Im5wTmFE-Q zQk?WgxEn4i_}2g`^;6z>EI(E#D;_K6Z@lpwM<`Vs3+!f$+?37yH2kOn$_P~wRwygN z1iDmrak3Pum-yD34a>#yV}&~7P5mtDLd9&kNdBn$lKfE-T7E1S%g=Xgxe@^LW3L?k zgCKpL=h=3S?Iq`=kX&GSD*GL_PiNx?xRf^W>LS~(Qy)Y>)lB%2<&6d}0jT0g=;xZ5)9FDCX3#Sl%%o>Em_@(WU^e|lgE=rc$q%|y$czN@DCAs%`Sgwk z3n1cdDWN$||WI+Ih{}ge_pbvONFB-qfD2 zdp-Z|704UxEvkC9n*d4^@^Q2?x_eKc4@duy2#&)o&N#kO;mlg9=yXAY4JOO4qs`9yKD(n-Kphb`ANf2L}^c%go?)k z)~kE}B0|fL70QZ70%eXk$WH0jbf4YS<+3KcGGi)-)+@`i6)M(5@Oa;kT$#WY#MRm&Y?Nt3dTFl69(@82l)0 z#bKpYy@UWzy3znpF`ED?W*dOwm=)ZL&?@O8iRM{^?yx_+iTSYDCyLir;tH8snIA652# zNK}%6C>mNKn`RWn9GedWk)9FkNX3$j{%%rO| zm_>6nm`%59Fo*8YU@rYqgL(9j2J`9X8Z4muG+0Q#&|neWrNLr)K!YW8w+2h;F%6c{ z(;6(NUu&>}UeaJCovpztx2Lbb#WuTVZ9De82THOy@)p(3G`{U zRnGM+7t4-IT9m0S0BdA5RE5lW!q zu{>KY7LdVJ64@+W3w9N_D8ZJa9aV#mbe?$;TEQO!O2&pGl#;QUJWHou3lUzB+^7wp zte17TAeW@eV3y64g073=C~Z{_Knc>b04f_+=B)^=BxLF;Q3)PT^hrip!7a}cD9+bK zejX2=jf|;^vqD*ZtWXxH&#M0^^(TW{eymUusM@)Mz={d?0Mvj%4l@)tvf-j?M>0yW z<;ikc@mL^%j$!pNJ!kd#yDUzE2K+r1CmDXr8(~9;mWt5d+YMTLw&JlsBmO>96;~I{ zQ)TrfNca^QVMElZ%5!7Hqw?Iu8*|JPHE2a>0hy?(<)#pR#c=DD1^$g6%d>2Hsw$iD z#+tnruwF^es-ZPUt5j8B0qd0oT6nvrj*u0VL(9eTWA#zfXf542OsBOqm_b`;Fq5{_ zU>0qo!EE}x26Jc^4d&8h4d&6l8qB924HnQ|8Z4xJG+0EtX|R|kYOsWM*I+44(_k6R z(O@~v)L;c2sliHGSA$iwnFgzAiUwxFKV!!s-3CC+(3tG7ps5X zL>p+A&9sRITjw*Veb z>v_IgEBY=-U8N;cS82)A6%(wOt>9LKoe`>zWQ*nJ9dvq+hq7LEg=bZ+Zr-$HaFv!! z{qa!U`Ci?1Tft>km1oPP2SO>u(Gx(afL;KqF5&^6EU8L80k2d%uRl>hE0h(F6|Ikv;q?T|3{dPlYQcd(MBfGnV5uLWdDRgvGJc{P{@KPu)Y<=J{=HT-mMgU#^f z=O4fTuOAC!dfSDit=7{0x@Q~B_h|4AKcT@o`nd+V^pFPY=|K%P(62PGI{a<)Q|+>Y z9?)PX3i$s(*ZpLVoz07InK4@y|54=-tBTt-m_m1IFq!Vq;3XcyUzOV_hhsnTVhM)v zAbyzxyvPH2FS)OBC=cM1BzS?l_;v|~aDVQQJ1qxuSV|-q#C>@Sx#e;o_u=y-$l*?& zD)&{s$=%4$3I}GK*aqrEg(PP=Qc zf~IJ&k`~us6|JnnYN}4l5Ud~3zdP)Cvh8%sVpd(zK8ygJT~|0&dRKGiFJd5Kzn5>d-#B|pKJOA#H(-qKlp#7~~f zN`8`W(|*Q0;U~{!CI6c5mww#*Eu9TFAEUt|!aqva*L3=_1~ce54QA30HJC*wX)v44 z(qImqt-)NnN`rY+oxhUHrpvU;0=iIxg>;1mi|AYp7SkmfETQu>SW0s>SVlk5U^!KX zwd5|8PqoWR`l<%2s5<>6*R9rSmo-$K^^(h`>OdDU*U=sNRW9AF!Fsw=gAH`A29F5; zo7!bFeMf^W^fL`Up$9eCO25=#8{MwKb~;sq9rP^?cG58#{O<~XNq$vl|>M0cWrTA zegDj)%OC1HkW2RpT)MR6XERb;Eaa1CcWtp$;XcSwGDd)@uq3A8NZn7cSOb03Fk2;D;%-Ae@BM@)*-C)gq3gN+z| z*aZ=Q%?-iW*APaJkqCMmTli04XZ|mwD7G&=O@GBU`)i~Wwjh+D*Rgs2ckGhChkfz) zu>t-8_O;t+9qOPBu^}Oj`p|gnEXcy9f|1xyFqsC?`80%XrJ-~`wkLc^!|6%v7&u2G zVYQE<*Jwd{8~X(w&|=hJ#i<`FNds9a8pg`dBCI?u#h#&MSOr?1RiqWL5MPPaqE%RJ zOnvL%(0fF?v2=- zx0&_F_$vidwlun%rDHUmff3pO4B)abcFU$mSPnhG2GUb(1U<{%pxi;_z{}JkJ4fMI69zHbTt0~bP>JeFLWZmL#Oe3=*1}8 zz&TFi2=+BM*i~*ar?9cY!pUk1Usg-_vHHTrnu|czLIkt6B8(-8sw`PlXX&B_%N8}+ zOQH^YUDRW5iD%hpQJ=jh8nCgVAsZ)Jvhku7n<6@}sp2^{OLSptMPIf-q_C|bm3=C* z*a?x%z85*nW(;9I#!yzsc$*b9K42w{@vNFLk;NI4SQldo>t#%3>Bh%wurZsBHRiDC z##}bXn9ueb3)xX)F*{={VdstI>?dO-yJ4(iw~e)onYqkvu4j?v23Ez~$euN~uo&|b z7He)}9nD>AsJWZHX6|9{m|w8>%_D4rd6dmCkFojYakkDp$&Q&{vuoyQcF+8l8Md>m z5Oy$CuzkmB+s?CwwhJuQ_9N?IyTtn1eq|}Pn=I3Ii@j<4gN?P_W-DwaUt_cLT$__` zwfXU{Y%cz_Er|bY3*mwGaQ?JClDDuIc~5&8-rHW5zhW=XN82m&srD*-qrECW zVXwh&+G}#*sKrYu(bs{e4AOf0s!14-jwp2a5^* zA!4q7xLEHWA@=!4ii7@9;+%g0!CX&?U{@j0$Q3P`x=M>!R~gaKRZjGEl^1WiDu{)y ziej~^ve@IQB96PNi_5NB;*P7X@DHdb3I;R~r2`s?8Uc+(y?_|eHlV5K5YSF^4(K3y z1UxVL26Pc`26Pu62lNoj0(y!A0lmb*fJAXNz$5Mj^b!7neMLxMvWN&w5hVgsMY+H< zQ9m$UbPCK6Jp%`b%)m_XVqlhdB``<47C1;O3mh!g1r8DW178qd1imH?2fisz296fr z2EHRm(7Pfu=sn>MdS6rx8Y^lCeIQx~jT0S$J`@9jCW@g!lf>|#8Ddn>T=7QGJTW6^ zzSthLKztXpO8gMCPW&8{EA9mC7QVrIMe*Q$qHgeh(K+~2(LeYz@oMnrVtMcvVomTN zu{Zdz_&WGIAwtdzTgWfMH{@603b`fU z1Q;KL1RL{0!i-NtB8)>Jk;dVWDC1a20pmo-Q^v0$g^cSV#SAkv+Hi%IG$KMv8Bc{) zFlvTY1XVExgjO|%hgLV<4XtTR3$10$46SX<39Vzy4=r!34sB>`4sC4g4vjG`hc-3t zhc+{8VXcgcVQq{~VR1%MSUV#ptb;K=tfR3o>^Wn7SSMqDSZCu%SQq1BSXaXl-rXn@ z-oq##-qWZU-pi;G-omIKo@g`=Pcr(2_c7iM?`up5f5Dg%{*o~xe5A1_e3bE3_{+xq z@YfCBh&PRhh|xyrhRyMSNtu6EW485HZV`5;5PH5wXx% z8L`ON60yYC6|u}X8nMFoCSs*=K4Oh=Ibxl`B6AI&$n{2GBaa)?BTpD}BEL1(M4mBrMxHeeMV>Rx zM1E&ni9B!o7J0!SQ5TH@Q9l`FqkcAOM*U(miu&DX8gYv_unGu?Um5exzN+6 zXd!xqy6JUV96Gxs70}ZTRvP-bEUnDSK@UFzBYqX=;;OK;a~SJu!@gbzM)GIrFxCRL z?Ur;hYeT2A9?-|}bSd=nDd^_!aQ5mC_8fF+3Z~#0I4L#&Ix`znB4iR6_Vd5}-NgSaci(_=QI8Nt_ujxW@o~{w!(=Wvj^tiZ4 zPl-$PwD^_&AePgs;&;l7o77?4qAueet!_M^bq#|xHtejs;baMhAM0-fuxvw~0_N-m zBb1FW!rALa1bfRU&Bhqz*?6M@^l1%t$*9S$8qY$9Hez>;rYzWO&Z5nhtf?8t+L&!w zFS8v>H9NC(vnv~AcE{=41UAo1WJ^pp#=pfeVlF{Ka8*Phj8n>cPps zKBNmxCB11kl8j>+18`z)I2}YL(ZOUU9YW^Qp=2=~Mpn|{WF38pY@#odZS)oL1$~Vi zrEic^^j&h1zDItc?~~u@SaOGsBb0rJ1JdJh0D1}uXH!XGHj|WMlW;b9HmSM6*kvshrHiYkrtutVR;}QPPheCj@;t z`k3`JL_2PTYd+FQG)}XY!91Z1<_UFi$i5Bc1pP20cm>DwN8=R#I9v@d1MU6*<^m@$ z_WuU0`8$mJuVUOEK|dkUbQ{Lz+i~i22bRwFkyLtwjKpT!@pKKDg-yWA=q2#^GWnAJ zM83ti{wIv%?_=As54(xe?6*iX`-3!Kw@GVuha|GQWH7r&US;>m1oi+&t?hIzD+se+ z5&8uyM!#WC(@PkW-vyru<|Q2Sk^tnV6!KCAbCB|ooO+n4)W=LEhJ26fH7?-(i;Ix2 zpDCF+*v9jmZts(=|d**BCur6ZCR1=;d0Ymuo`{)3&q-ZHHd23wpT(S`IsA zD`2;474(X=ut~Kuwx#xwuVNtwX_k-rOnw+taKiv8SD_|E??4**;+zd4dWHr2#$*YAg8ZEPT%C! z*xQiR(fnChsxVjJm@Dvx>_gs&O~BIeB#!w4k7XD=;({E^8F(i)hj(Ukc`r7f$Fqez zfi32VY$@;0mh%+0il?&GJe{rM8EiezWE=SlY%?FmcJbkCFCT&X0!FgW_$c-Te;IA& zRkWFR*fBnaoxl?P*I1oD%_p)md^$VNXRr%=CcDUIu^;(t_7k7Oe&%yAADYL0<@4EZ zd^!7_=dzo8J^O=iV0ZXNc8~915BN^T#4g6g9%hQY%pvwMAF-eLiBFloIKTqLVHPBg zurP6yMTldpfH=jT65n8cb%qrYS8+YV@2s4-$*PK5tbw@8;>11HUEIeUi}3z}@@&ER z3qtVMg~7)OlTQ#1K3O>VJmJIF2|xac@a10#7Y@n?@G~Na{~&_-RT0W>h%nBLa2{Yp z@L;0=4>bz%qQ+Cal2Mq~G79n5MiJiGc$#-HqIn&3E_!a}58$e3wr$-{aHF_xT)iEMH`Pz*m^la2>*QzQLTqH=8s0R&y5LVJ_mk z&Bc6=xrFaCm-0`|W&D7-j(=|E@`L7je#qRwzcjb=!{!ct%-qROn7jDb=5GFtxrcvi z?&W9Aef&FfKmXqRl>cBJ;6Iv&`4#gBziJ-k*UV%5x_O-6Fi-GX=1G3r{F>i2Px1Ta zH=Ni`b7s51P1_ILVY|qEY(H{8+a(@g`-unHuJ91sFFeeaBnsMwi^8^-KqEy1+i20+ zwqL~Aj*IrT6QY;xoETy|FJ7^IFUHs|h;g>dVzTYF_{jD^OtVpAnawahv2C<%vu(ER zv~95+v~9JW!qa)%cH57(L$=GduWUct4%_b9j@TUbqqac%aa)-Ef-S;+$yUgI*;dy6 zldZY^wk_6v*A{2LXG^x@V1Z>?7}4F!+N(Pn+q*cL*!wu5aLrXATv}Bay21?|Q3P7J zDCw)TM+NBZs<o;+nZYu3T=0TT#MteaYCy%u;+bSOe-XOxWpbF0BFFfvxk328l$1OJF$VBlWnIa~VX<`a4ulkteifOp|Wd_+IW|HkGX$=O2G&x4WpY3aBKiBsmjE)R9WCy4z8XWNE*O)*9i9uHGy7k3XRnqH%YXF zevXCKio@+d9igo{!DiP5dbuYwlm~a+^n=wd6ZX58pr_wM4a|fMZw@&|7lDf_$T!ec zr|EiV-;LntW^xu<`$xKyT!PNJOur(jxJ4zKohCWZ$S*QKjF=;_hom$e%^JX()fju0 zI??xFxq6=sreoRL&=6DTIB1U#*)BSsouCugPjn)*!6fF(rm{#jjXlk#W9QWjmd0kX z7uam}BAd&`u=#jez!uQMT;9OR@`BI z&{wWRU%4B7zO zZ=6wruRx!-)hNaH8KwCNqYS@nl;sbMXLu0$u?pzJ8k_Mv-b_bdHh}jvvw4;|guh|F z%BQ0Lnr2SobImDyllc+1*{1Sf+X7z1wwRZ&t>k5Gt9Yz!4UevKgxU9 zkMV5#N!W(IhHdB+KV(17zpZVJEu6YdJpUEgiq|RL2e2 zif-}=j$3@8<2GOBxWm^w9Ab;ZPwaH~i(`%eanTVdm@`xqaE6Hz&R|i)87VqC3yAK{ z!Xm?2M7-uKDmFVSh;7a)Vvn5_(@6%jl z`g9TleY%PleR_&_eG{G;O}qD@pl=U{R51v{(*++3Nnhgf{hNYP-Cbo+!*e1 z8}GY{8Pi>5jpMHJhEG5RqewtSqjEqsBQBt}@oGS4;p2p2aPdu zf?#_HnrgfkG}D+LG|N~LG~3t^G|$))w9wcaw8%Idw8S_awA}bDXr*y4Xthx^c#Tm$ zIM=8dywqqBywPYEyxHgxyv0Zk-fE-=Z!@xjw;RKQcN(t*?=s#9-VNGktO)+p*b#id zI28PuaXR>vaW43*@ni5g>S~0_N?If~GC>DKjLrkXa)=6C+a1MG@)dvWN_Gdqk$WJ0i&X0W0Tpann z`AOsl=8nj5=F!OU=E=wj=9S1v=C6^HO%e5xX^)y}7KoZ=7LJ;3R*ITwR*RZtHjkQP z#zxIGdqvGRlcE-wgQ6ChL!%bM&a>1U8@0@w6Scxz5Vg|W6t&vi8nxE^Dr&nKT41Lc zQDB!@tiUNVy1;3(Oo20Iy#i;=1_iz|8y8rF)vp!Mf2%P%SOZIT_=SQbO|oZiGd^fty9 zoW4p;`Zm^z#$y&X4fdw_n0YP6deBO&2W`fB&}PiQw$h?>CuUs-Xepf7D2)>tWngnE zi@8$;YGMt@CJ$q>%CI|CqfS;GbEz8CA8SG`*qVY^T^h>j(Qw$CBB3=4u!giC>`sMQ zE9%C&P!ZUkim^D%x7y;irgm6c>HynSM_LZHr)OAaT9G{uJ61fc3cFM_tQ*zD{`A_g zP1VD?QGKi%HNu)v3`?a=v2N51>qX63CT)i`qpoZyjc3EL@pKd&fUDGAWv@abzfNaj z?Pv+sjg~`Of5Jv%o#`EH8ybUqnBK*D()*aZjm0fr<8blZhgd@zPb2sQtQ}3H6=BP& zjP<12{A1X=reU3E2G)sYVr#`LnvON5Y^*W81-sU0*tI6|1#~uFg!Q4tuzf9|Tli9} zOE06x_zHT0Z>DGY7WxC$pe|$W=~t{h-NxFJkNBLrV8aTA4J%BXpi!_}xy4ypTAZWR zVY_-(d`DY}3$z1lSlwX5>L#wj9(E0Mou-Hzu!G&CuZUZ8q9AONU?9Pk2wX;oHK^^P z0NX1HvhPG8_M<4wu8AV-mMF@YQH&Wz8Rjs`fhsenQJn?Aj#UJ9tcFG{7H`yst*Z{3 zW;9{5j23Kx(TZ&_V%ZL(HP(*WurG`_cG76eelgm^-qnF|vmlw2P zs{>nCjG4q*n0;BC*^eceX`pmA+{|RJm|1MPnZst8!(az{i7hlour=meSU-A~Z8pcU zJ?01OfH{sGGRL#?<|O8{O=d3JM=a1bm4(@6u;R9vth8-5)|BS3CboH4M_Pb&q!nzS zZ8dw*wgI$}EwF83OKqFkD%&S4*S3vqwrywIZ9CZ>+irHiwugOV+sm%l_A$eLh&k*> zn9F{gh1pNADEmoP*#0%EWdDX$v!7;l>_4#j_8(az`z01R zgY~yl?2h6*!!GzByTM@JjczRCGA zKk9r1Yglh!-Re!=3~N$pSc6LQ`H+wF8P8wwnZPGvJ?bN$NqmOSM|_sgRKC&YV}8JA z8b9PSgMZ~Slb`pQ#V`BJ=2v|df)?`|K1+C@?^0gYcLgu+yOLM&UBhenuH}t=*YTFV zxxAh4dj34tuM&MX@>JhVd=S>LMq(Z7U94eE!y48`tYIDV-Ni5Yp5ym@zvFhli#*cr zN8Z!#GJnbMXFl5RChqUM&FA^u;Vb+ai&cKj#d^OM7<04~$Nge4-e@fx{+)!Me^(Lg z-(3{;?;)P{?vE?MSK5OMZEuOBHjOW zG0^`_F~a{X@v8sZVzmEgF~k2|ta*(Wi~T2vRsNI22LH)oum2RReN7c7{67|_{iloX z{bz_P{pt_P`F%+K})eNwp!f(w^^JJfby`eteJeh8oe>LMXT>7d z6|u~9RjhGc6PsMWVO{Np_}q0q; zsyi4{IRnCssDKEga6lBsQ3Z`+0fmg>0fmjK0dAvSKoO%+Kry39Kyjm4KuIGxpp-E@ zptLa}psX<}pgiaqjJGNpuLV>FRWaVg80;;K!QKm~V@wXHYs?6!XUq*q#x9P*usaUJ z<;o*4%N+^5_A+LH?_!qs9%gZ4F%SC?-}OaCYvC$b3wK~mWH0tJdx-+ z(6?D%It{vQ8Fbqo%q)*VzkLVY_C3qM4V9Vn4s=^6f00J>VOWn@POI=WSch3l8}M9g zDcpel2^+C*YcuvIY={2YK^OB~bQN^X1MGJYSTAux#{@yggo`g}A*_}3!&*r?)=F~3 zNjg-VqHlbO6+;R9;_!fJ^C z!X4wbg=8+UyjMEcHjgaK^WW1x6^F-duy)`!XZv`zGSB_4vnyEzEbo4L;OtCR=kcwR zPeZKY*)cN2b<#d{V4bE!Ub?i@=XJ6*uPl>%)5v!CF9i2#zJ1BAJa?PlCb9>-a>L!v zZ!N4tI?p@&#*)v$x1w<0=Qo;smFK^s|21+1d43x1UHyL|C-U;p)D;LzxQX>AT(Rx) zq3814I|sZ-zenCm!o5epK#cfwT^|lyO0L3xX}F&ZoKJ4#xsM9+kUx-aS-8Iu)DxB| zT^BzDMN@3cfpv$FpMwfvqZw5fn->pWLj>IA$2X)7R+Bi^xNs?a2=;?99ky9Wd+y8p z)FtPwLtZ4=i#DX$;gy<7-!)`0sA+}>Oy&%J77 z5L%?6Za%La>5EaPjz^-Z`gQZB2Mz@*h|}MYXwYlOx2VLjC__E3X%Q#%y-d&yShHtZXR%f{F-@`XYEhc{* zdG_`9vIqCu4 zT3_XsBX7H|rhGX^Y&CDay}#>uWB5n%%K>3G8>ezyu&Iw#zn>GwZs1ut)vLrTa-Orc zRre5XCeI4!_qy~StzvZ_;a2E|JzRZDnet~LDc=)rBkX4<_eXae#&M~DVxBsnZ>wJ5 z?Tyn;iA^LtPd~f0s&MJsf(DZacR}BQJ;X@;eC%s-t}L3Q#--m0y&ifm z^g-yeET=uY@+NjJ^f+|hY^lTC{5KgrDhxdd{dS{+YZ9FNqs`?i3cVltIP-U^$8FD_ z%_CKeJOj}0Hak_^EoUn}?CiI)shtZ3tZ(@Y-zjG+yPl7Mv)NzeDgygJzKM0(Ki{`X z{SNv<=*RdzRTsGQsQ(tQI7cmlex(08^#`}!QGs0*-+8j@&7t~%3A}-I#;rb3qi!I4 z0`vxO^^Y$7!oWEB4pg7+esN%|`jbn)KQLb1MEGR#KN#4Gn;x8UJ_&5kuC~ER@8Ah} zZguIU!QHs~!9@FTqeE~LZdGw&~| zg=Qt?Uj_XQHJ>jPo$_Z{ed-{}zXtjt;7_eff6ThTtfQTOfc~^~w%O>?BmTYBEW+1A z@9^)TX1nFHw_+V^=kU#}Qdjv)tyZ^R_hwl}8{;7Fs~^nzLCtgX-=BS(>V|$Z^oO%= zR7bk>{+v5i68f#sf1Puy8gT2~DR&uPegrl0?2&thahywkFz+V&c<6s2|KIbju}^jB zeZ#wr)9ftvT{yOSc)PL8rN3QxlscQb?uPzRVS=|G&Nv)e#Hs$!?}gq{^gDH-OaHp) zYvUrqgV4V#`kXILoca22#23~jg#QZtvk@O#m$~%fkp=1s!Vf|(9hs-Da_QqnZmzDO z{D+`#J8~0T=P#%d#=G?Q5uzjce&9p5-lL6d^%3F6pfAMM_}DGyL}M%UDdju?{WN1U zrx4uhISTU&@;^!VX3o4>Ngnxo(6~r_#W*}o_z8oH2V8oX-I2A7+q2Ny%@d4(&l!hL ztQ}R*XR7C+e`#%_vR!()Jw@ekOUVl8W9*5z&fgLCUOMm+t``=bzVv)6IWN-mg>xefbXh9eItCRsZGXZ>naKXAQB!{8E<+ zPv&o;=0N`u%7lEeY@NSp`G>2yQYQaT&!6Lw)m8aXbue^MyVvKpr0AiLGq%FUURV-G zg$`A}qMd%|V?(pmp;9J)1ED?CVYD+ybYVy=L+9_t&^UDjdE}tI+d`u~vU)zWi3&r{ zh5kyYL^ZqRd>PuAn{o`55B=-Vj;htAZ(cA~MFW2uRx75-*)M_ zSUB$x9tAzbn)zLqJ`Zd8J;GSdtVXv}@4NGR9xIa%36Ft(p}Nrc*v-GEIZk~-cr5gN z%(3cIH~(S0%lw@2+yZ)w`HcF~&A+SFsa8SX68gSYi~6TazZm*z=yHbt)zJUt(zESO z^&Rx_(1+XW=C_YE*AL{`4*JooxxByEq5lYd2k7rWH@HK^r%t2$&hJo6-YKJz{QGmC zll%t7Lh2ZOyAc}-Q-$B1bWqz5W*Z^-4T_JeJh-MHYaS~Q`3;Jn`!aIWE4;7HCoI1^ z`L!R5d*o&4I9ZX(brV5#S-~S%wDLO?&iv1kIVfj+BELb&=9YzAwU=*{QAC(Uy#8-A zRv=?*E~X6@_hK~b+J{>csFTvILkvH){T|E;@ZWoUohZlSU&GM?S(Mt0ogu%?K0P?o z8wQ@IV9H#ycJ10@q0$Ki6{<_{>jOM$cok}mz9Xl&l+0$+q%z<(B+lMx^thIG<~eDpNAH$JvNu0 z3qwCANG;`%kkWJ?l{-eB+X0I-ll8=7XOZ*a< zP2%_ZSd-xcQeiir{S)7LE+TaLzq72#_4pB=Xz`7K6E{-jLcd0?%1X;e{d>7_T`%qE zkb1v2*co#Av7f|;i{+O-KF8A!ryQNWOsrnYe?)HSa{S2|`A>1ib33`Mh;;fjP0FR+ z=Zeo1ULZc(4VOteQ*BC|_FW@>5jRq~?a|{kWg>5xoc8JdQC_w@rzXm{9V+JvKI*3L z>iT*-Dd%a)hl-gif!5Ehoot+SMxY zeU&PcW3ac7yRV4D%%devzk+VNqC%&=V^eg}iF@f|+Ca7<-yChfmO((xyz`%XDq zyY)|YpUZXqezm#c&mJewZ7oIVIC|Kj8~>(1E>&LU^B&zRx8BX?#!v9*{-39l?u_5* zuJ5)JrRvnPtLtw*B<`hq<$J!D-%HNfd*k5xsqy#de{}nE zr(3SqUXSj^z2`jN9{Ri&_xu~(ay{QG*G>2FEv?4A8=ZRD+jH8Rooa`}?;ib0krQxw zs*x^_Gm$^&;Ph-6ho8ae7vwo`x-;Xsqj}D$Pvaird|F2OGDoh*DBeC(F5~av^f^*b z8cv^QP(Ju`wJX2t!|CfJ9lZM>9e=^;kJf|JpQh)d{?CWt^dF^OaGK+n^*FAQeu7_v z8U1*KemFR-)4}P-q#cj20+fE?|0@IUo^r+$oPJjF(XSt*T-yDH)CW$#B|cO0p`@qb z^yfkcU%ztO4|10K35HiA4r_?7IBxRlsAT*Mz`KliG$BgQXlwSE^*{3B5}ss!{1GW4u5o{ z=%f?((qC}f|BQ>zD;&O0;p*d=c<~eY8IqooD^FfLKie(G%Re;k&zQ#^`t6MGZqk0_ zrZ;2UjwT&Ca&xTo>u2OS(fqK6{&JPxw%!IXIv-AJTq>doZKVyG&vcR`GcRH zbjNXha`LRC!*4Z4nw^52)VcAY_RNg*eAM6I#&!E_ZdjChkrUo}YdM)C{eq7^$mrJ> z^vkJFrz0m{N;{B`I_Vew;TdwZ+8ICOq{Fv& zrppoXcK3SZ?Y{JU%=`UAqRd{}CCNl%lveT9y^RoI#GR_(@z%G;~1ydCDI z-|g}xbX`uXl#jfVOxm5^@1;ZH=Mty9MT#%7opLUA>-|*X z$lDE4AM&R4EAn=W#M9*MOUZ|P{W(P^Jx$)Oaoc}|D{t4P8)d&_^2WAO^3wCh+cuO?sn(P z!#~eHU$;JU${XuGujLR#@YXdReY~rm*0sxNkJm5HuJ+a+UVLbNFYcA=7duaHt>8}- z)=B5bhu}Y_eS1rPz_CX%`1d)|p@U;D3V;0!j#bEW;Mk`b&#g(7>)}|gkLSm5HMXn& zJv*UT=xMlB>Z3g5drP6i=j+3*@sf`G&oDFXga$W0)J~Y4o{w_px^d4=*k0-dw|4S5 z<8i3;3wb`kmp)!oeI9PlPs6Qlp~GKsw>_SnaFiP#id%8hv8&H?(;HlVg09OsTgnHw=1Uyhxo%vcKNr~ynT!JQhej^?|rFuXnr8yrU`3`q1yeV+lntZgue~PM{f91SMf2udf0u=Ymeu9 z^?SZo{`!0`pXYn!c)r_z+go3HbdT@7a=qvO+y46MTOZwPx94k|WE{PDD6zb8cle;p ziGu@-Gy7=I$apUX(!~eAG|r%{b$pQ<&+s=*@^OUfb@^v=v47E{eHnbZ$l+h~=m|2< zKch#-%X8?_^D>^hHpRc59=#(Y{ja1`-Wc}(T|3{?s}D*&m#llA@UX}ga`%GJH=tKv zmUQ~Fua&7+_jlt%^=d_WKFY0h8WJDXF+$SQ^y(;~qbD{Cc(_D-%0#t| z8y~7y53?M-x}TfAzq_u1uFIJ$<)c@dB@TWaDCILB4dTV@ww%;@jc^anb8f1R}FXZZdU zc@DlG%y{l;o^#6e`2Nj|^pBizVtjr#gzrC*deZp*bD0PDV~sl=>$4{nUnmIwT#(Ms z6D@Vodieg5^n8r}WkdMh3Q{k8?+-ftxJvp7KNJVk`C*fw$M-rNz8@{^fZs22`Tm9s zzTblUlmp*yCHd&rO;RrH-bLzz?{^oUsohV~)A+tp=_RcS?|V&^8MW|-?zHy z7rA@`U6<1-<-_;)OB}vGQp#sOjuM}Ko|e(ivuSsFzt0~MznD1XEmG=nDUWila_jxO z#Nqo}r9SxnDT%}PcS<~s@1GSqe11=gPI?;OpW?RvM3?VRb>sSd37J!GM^6w9l2eV>W>%qe915G`aR#Fucw~%+QSB_ zL$+pC7^C=X(BLKdOU6E!Cq@llqZqYHy(%~EzGlqkm5DJ&-WP<`Ab7x=RUT!#1oth2 zuLIsTEWVQhNB+ek5Ebl@P z5&il1rjl#hS=2#fSyUr)R4e(SQgW*} zb<(PcgybS1HC>_|5^5KxUZOM1scMjM#HvVD&cw089ps=YrLh^-$eVV1b7Kyf+b@D!nD%;G> z)F8qx+XuVKyC~_AIP=8mH0x=LIJ%eJ@@$Ve<0su(*XfvvVD_4`fNgQ&;v{eer%a>{ zx!}f`iarVTi!fjCErb2N_A$X}a$`+khD<3jUSm@sA&b0($8 zMFWT*j+Q9YhHM}ZJzkvOh;xECCyH~DIKQRmeD#lWiWG3Fgie#t>EfIrSi0l z85|>p{!Yeai8xEeStic9iq19fDnKwPF$8nw+KSj8~jovA#cZqYiI2t?ek<%lo2TJ{0Zpv1pf1M7w+{+68AD z^E1&dUx;?$_(xZ}ye-=09nmiDZlrc$0(LQRb`@s>+T}~pF8>tmvRbsu_o7{X6z#Hh zecI)#U)C;EIhA8^&@SI@P`i-t-_$N^)~8)4>X)>OGX7)Q#WK(?RM}>(NNJakM7v0j z#F-~fr}?;O7o2qM!WXPVlxDhi@f&EDECcO=6Bj3eGdN`;0QK|Qg^!>IB+Eu=7cTgA zwF}=oA8T@5`2SeDAipQmeNVd(`iXXdc9vvWEWDq;h%+E1# zmYc&2$7=a6X_pcMa2sQ!Y0h-*vYCN)8Ow+H;%q>>lo@CjzRFJ5E~5=kyNon6!fi;q zZ0gS2I{WkmgX_Xq7~IJHqEW@i7X}xCzbvXziLDU%(=?@b>m0@^P_(m%=hB( zehxyUzx(i01~I(crNRM5#!`VRwm+47wp}pi>g~_v{_QV>wvsa#0du0O_#LyiRG4gd zO9c{Eb6g`}K2ZjYI{wct6*jOyn8MPJ14@AKgA5?N)&Rn%b37|Q*apI97(h7AHk?%g zgf|*Mc%9)v_*6cBH>Vjuc(t){3j~IJ7miN>!f`eL;j;}O{8z#ohwu|s^9a74=NIEZ zc&o9V1;Sk87Z(UrIhAwyf$+n4Qzr)1&o21K~L75Z<{#2=5XIj|qh1#KlSAYzV@81j5O(Q4pR;L3mOi ze8K+$!jamO>AnZygnk0y(9V)9i)ENx2xnZD$lxp$XPG$Z5Z)&cj!)NwSLv$KJ3>F?!tcEU|Z)6j%MebLQ_aT&!XMutgp=>zgz%@<2jLX;OA!9te-6S|2!vB*n|W;t z!tWLcmmY~TPn=HkC4q39bO?WWgAo3TK=|td;W%+|5;z-z@Ye*w$+A%p{#FXY-xdh} z;C}(($nVK?--B>MKY?&)XGxaDGE6RnGcHSHaF&X*Oq_HGe@7r3XSw;_e;2|(5per@ zeGvXnf$-IWW;h#w@XrLoS7t)^S1Abp!a=wVLHH_n-jcFEBpWko8;jkj@fKSz+sc^+ z+gY2LYI|{Z;J5?MM!+7@n~Li&=LOF10sgs#_(g+l)R#CK9Qfzv;a3dqA%0b^Fn*20 zKY;&!6Zl_b{^BOg{wDB$fXN6=G&AgWHgeOq__(3HUWK{ zZOl0)pwBJVY&JJ!x0CPR1pPL1J$5@q{SxTUGyh{-FWn}f zPnB)vB-69oxoW#ZXi;(IiPOoMJAgh;I_US3Pk4OY`-=3fmm^I;KWPH`IB{_jI2!`} zgbC=AWuri!i^1Kk7cL(^)?8@*&$nKX+LP(N2l|A50{YO-k}Qj5m|W0jT$ae-EEQ*& zIO(9z1?cB+?lhqPYxBRl^>VyG+G*x`wq8y*0sS)s!*DhL`X`ux{%_5Ut(Q|xZ|mhG z2iG;fjAe6a}mynj}$NI!nmrC?9F)%Kdd{jVTtU#(}~m2U(aJ+(x~h*RX#hD;6e{hOx73~N2621WgnsWFRV#aM478PfnIGyINEKCiYbW`IH@~z+0IMl+_XtFRhaN^=5a0aJL1OR^iEzjYc)+Sjt z%G7AFJX5390_vl@RF_3frZyeisBZ|6-;?RS2la%00`<_&k}Qj5n8wfp-tsUmOT<|! z&N6Y*p*dm!%{a@=cI&@tYIF;@^;_#PHRfBG8Uuo6IGKZ!@eM)D!qkXc8Ky>`<(V2s zItaHRQzPll+Y6kc2ZWy}5YC<2FL4w&5YA22uNd50{i{iC=mX8f$)n3!Y>gB$JvH^w1Du-1;Q^%LHIcW;mZZW&)rA} zX99NN$}S)rX9Ey^r9k+#!X{2jMFO!e10L!`T3YKPeFYOeTaspMvnG9faEu zgg@ub+XhyPK;-roPUdP+UNH2UkC<H!93%OvVXU!*u@yIRY|Dw`JMsE{H(vkmYfR$4!;3i`{T9xWzS9^q z)*3!D&)mk`*4)A5u69%QtM)bbHz%{KKEqsU{>8k@yoXiQ{pLgFqvqqRrJgfiFkd!b zGv6}bG2b^oF+VfEGQTy~m|4~cYjbP7wVSn{dH!$L!y77U${qVta|b%s$7yz`n@7 z-2StDr#)ytZa;0mY`sx2bQeZ)+d-{rHaX#e55WC;FE79`mj6z3KbZ zx7ug=gZ=~jQ~b01?f$s`X#Yw6GyK2vFZVy;f6@PgKQAyWP#V}Yuuou8pf+%Lpd-)~ zhzCvyED2l@xGr#0;I_bDxJmB0z^mLImm3_$t#1bg4+}O0+k&SDFA6@C^>WsaStGJH z$sV8m+wAkR@5_ER`{nHSv%kq+lf5=OJEtUPY|gBlIXQ>rEXX-NXK~KCITz+!oO5N) zA9L=>c_`3J`%Y7sF!(1beYx45)@^;PJ zKd&yYK5tfDQ(jwMZ(e`iF?q}KF37t)@7lb(^X|)gAn(z~Rz7UAVOtH`e%QoeO~c~DP8xROu-k_{HtgwP&kuWL zSkCa`;rk4)8-Dcgg~N{@e)8~lhJP^p^WonQ&n?`taF@b83->OZTi986V&S!ge=5AK z@YTXVQEpMFXjIYmMN^8V71b4;P;^Ss(xR)2?kIY^=$WFIi~dpcWzjc9-xvK@A|IKr9GwnrAL>ZRC-3~^3n@RFD*68HYwYpY(m*?W&4y>mmOSocv*Yd z@nt8KomRHEY)RR9WtWs)S$1vN^<}q}-BtEr*)wG?mc3c_S=m=*sywH>uzY0scIB1j zQ_Bx5Zzw;aJX+pgeq8yP1~lZfqNyVM?SZ((nV#O-ZQwhyvr zf<#By?RK}Fuou|J+E>_ruy3juvglvZPOR>?cv+cH`#ZXuhWuEiPFIq2Kufk_;TPv+Et*@+qTHjdzf&+iB*7D7|W&7XTNU02`8?$i+y|h>U?v3zw*uVC4BRJ$M|mXJq-W7?0d`if$s}nseiP8 zJO7UUJ^YjW5r5Qwr2lsRo&J0LgZ>Bn5BVSVKk9!RynoXFl>Zt3v;OBn{+Io)`d|0| z!~d559shg&5BwkbKl88jukwHGU+w?a|DAu0|3|KvFa!QTRv;&k7bpk}4-^GP1V#l$ z2Py(}f%-s0;QYXafr|t8am(m~+&B6f_l$mmmRQ66q9cN(!A*mk2e%9E8$2L5DOeq> z4b}$-xJh(Ta0z#aULCwI_(1R>ZV`Qk8$>_i_Rt@L1zAN|C0Uzfjm_FNYmcnjtQlF2 zS-;9^&&uH>@g5}SD0Mt1KVHYFjo-j4`P^l~?d`}*HMbrgY&0V?#~8mcPT>=g2aSh~ zzrz==7;hRs8Y9h3xlwX^bAq`SI{RbHv?r`*L4_BskF8bKD0?S+54#o|h}wPjG4>*~ z?z!mOi|s4Hf}8BW*!S8G+K-`gpSNG+#PB@Mnch@wrsYJemhIsDojI{`4^F|{2fO6} zRe|kN1=>|}<3KHEa*FK#iWB%FoO&PE{C^#1i~pH>&FNxZULqmB-Ct z706h#(aB9&9V-$63FjKVBAgc;X`oX)9~E~)@Uq=1MEtB z3VrFfkF&$@L5Dx#zX&Y4irHV`-!8CoUdeKtnRFVtQ)iL$htR+^T)Hy?2*}fW>3qm&7PHgSaxsrJ=ynX zKb-wa_7~Y-XK#|TOHNhJfjNig#B=&{ew}kx&J{V=<~*D8Va|8x_rl!ma(BwzBX?r% z#}x+Wf)1zvulcuP}d${9W?*&#%otBELC* zUjD++C80lu?m%NdhtB>Gc(4j`3hE2m3Zexk7F+o?LiS;hlvK6uwdTcHu{b!J_?& z4lJ5ebZAja(eXuR6rEjkNzn^MZx?-0^mWm9McWm>UHn<`Nh97x!+thm)rjv#tQldK z_)GFj3Q9^#%1bsa*}P=Sk{wDWl)+$6W& zeSl`M_`O32932UUjz_=jhW#tr)69Yg=m~C$KFUyzhEAUp{U`V@M?e3;e;X)y59qi8EPU6$)^7!Zfo$wye(xRFB(P;* zr@-!kJp&U1Re^($n1iv7n*$MTANL1-9XLL4a^S4M*IDl zW(7lF;OO8sAmGkm;KX1h_%}1y5bO+g2YZ9_gU1F>3Z50bBzRfyn&97pUj@Gn{t)zK zP0wn`nw@nRlGmPfeAby+=VV=!bywE2S??oz!?H(YZ=bz)_N45Cv%9nBXP=h6IQ#1C zTeI)Z{#*7_*(++g1Dyt2I0^RCFd zI`5{uTk`HeGGEGjKku`=)p=R@dHIF;qw}}Q-!^|j{=WH>^QYxc&+pG)lz(FW>G?~s zxzEqP6ubNS{9E$x#P)tU|Bd|j@;}S}I{*9pwJ=jwC?^yO6^2HJMuo9f zEmR*mJk%0u56uf58A^r*LJLD@g_ehYAG$VlUFgQpZK1nEPllcjJs)}{^jYZ3(AS~w zL)itx3d##c7i?CrdBK(i`xjIeR257sm<}#1C|FpqsNi_;;iQ673QjFpTyRxEwkqJ> ztwU4?w`?upUaf1n%itlT<$Z3?n!~MGM{Ail)i}#oW-K=@G%m%?xrSS`Zs9A&M~tVq zGwWUBpT@VW7z4<}Xme|R`4pnGd7L}GT%Ctidl}~jKc)CB3wF~Ow9{N8VhkW>HyZbH z+tnM!Cq}V3mgjcIdfNxdILvI}9r!us#pZjgBv+f`ux)q6vYp22@eu29ER!=?L7t~q zkhfU(gZYoLg8Ub@gl%VIKWu7mXHT$qwZp6&=dp6^vyZmVu&=eRw{K>h_&O5tPkWfJ z$XD*G@bM;@yG&@BY)<3ItH|RBvJtEQ30dMzO^HY{9B=P$Y9gHMi#NwA<4J-o{mHg) zr;{G(>F?F)71J7~RZnS@|E+9g&vKp1!Uw!pTUyJK7UYMhM3viDWDuIVuv5 zsitsqj8Z30ojHA0{X`OLYo|}Hs)3%23`C{6)>xvcJ(6sTQf@LCcPX@O9mUP*dM%#c zX_%(- zI{`N?3A1K;DNe|v)HT&tOxATczT-k|m^DdCa(u@X>LkX>aV1S+O-qx#{fF#df#UC|zSc6R;D>bk}%sd09FqxNP}1kWUUTY9Orr7NCj;fWSzyDQQr zvsqa`tFaDBZ#>$QY?CLWt&v!DkEB&htFEh*Vp?`;i6^5ydivLen%biAgyd`L3Ojy0 z)-Mfei$`Fqws71DbcegTVlA5B1?fwQmI^mD$2AvgkEhqQ5{_x8|gKw=-e& zwM~@*m@YM=&Pz=~&I*(3g0_(%=k#&?x;fzeu)JT%%SG2Z*$qC&C zD3T?ORMRvy+8?QzIZNnH*)D;;tfSTU=?ANOQvGj?hkFujk+|e(=nc1c4@Z&}LYmaq zMxtAwQ>*kK^>|Gz-0BtIqO_detnTe%mCORb?7e>+<3D0rlhXl=Dnze{%vcp!y zWSYE44aFy;-O-~WbyUl^R94h9O=F&`271Fiy4;$k%5c0p+|s#@)HJiEYEEUWyVqet zsSZLU?Ga|YuNPVL>RC6PWcDOWw|Z7@O{71<6p=6);anH1#D0j^hU1;OS@fJ}MOW84 z3YAQayTT~N!lqqaZoG}YC+L>oksuqU1=AXjB{5UbSWciu7z4EifJA%RVh%sdYH-B5 zo?gQp(Rho7xmqAWi~E#VTmwitL5qM8W+gnq(aF+emsx6S*NuUMJ(k9P(y}6k5<%gd zdN)jm+}_9ok)$I(62<}phx7vt9kKa@V{u@Mq{)5Vy^}SH6PeZ1mx#2cr8d(4E~!H2 zof+w+AXt*DbSV;dnlLHW-8{XgDjts!ALvdrwP=k~U02g|P-Fqw`lEsj60eO>fdr)s z2gVjuG&5I{;6x`!xRo*E}g;R#wW zEfzzs64e|5At8LDDZ=%Yeer~}oD4b|>q*9A@R##^r4wyj(3@&^Lrb`)P6H5G=7gh3 zW|&g-6K=Gkp|ZN#DMH#=A&OlZAn@-+Jij^t6U3`~(33h-W=xNmI}SRT0Z5NhajG|7 z|8%}1o3+Ql)?iFYo4q(4u0(is^q}U}nySeP_6qk#8i6Z<&d5&KU8s%%l&}UIhc(~; zN7h_6n$aib&-_@t6&tdtnN@%=S5LILxhs-RX^zEU@Sb#%lPReyc9V4k1F52+YO1z+ zdy+fN#=Ms~YQm1(H9fLhdSv%hq;e;~7vrNz2e4xZV9!M3F)*J?xMMZ(>PVN;J_AigBD0p%DI+Wo|%@Ly5RoS0R z&8RSNW31JS1E90Tw7{Pn$9N&w#(E;r(Gq4++8i6eXzj&1jjW5e#>4a1#dt7`QN%J7 zi&p>u4sMRLv5s-W$)1E@KPE7e>5Mxg?HIi6U9skH7n9Z9OTWX(z69Zch9JH0H&jlrEGgYrgCq`f|Ryu@md*TA;e(eTwR&H9e8}Di)8nOF(Cqhz`IJ zEuFgE%&sU3hcy&W>4A`d4393>p-2Uq0qBX*Fx3;&w%5$6 zsSRq*^qG@&VA8>?n}s4~K|>O&p*^8k8_$g3_jHNWwK;lvy_(W;XYj@!Hd7;q?>pyQO-8f|N%coq*Wow{CTF{$Q@ z`G?=u%eGch^EF;-MxF6tR+%j242U;KKmh+ol`}f3yI-+%scxDvtGdw%&74)|1Zu15 zW;vnyidhX+D%RD??t^eaxJx!ER4W11PshcYm4yL9(-doKl5tC@m^&i*>@0&>L0Bt^xinP_5b)jJ9+{nK_lf zd|3c*w8s<-)kjG>r318&s?G&{YM%VBY4iHXKd(=onAa!I%(Ko^@HPJ?;i{ zW;aYS!-6YS(uAGFnSi`&(~r5UudNUFL|bZwrRr-NJK|x+8;c2@Ab24LYpdv)b&*<_ zY+bCrwyv*R14)ACwf?D$^?{#Kuy7z%McSPp@C5!!*9C@!22`|kQUTbiqr$)r9Yb~+ zBi7s9#Ztx1B@w|X9?*>d;svQCjJ4|2;YM_`btY+qquqMDo5Sw9hjJyXm6wEA9L9iY zx2tZsUawQSw%%3Jx`m|nO4*EUuk)N>s}fb_KB&jgEz28Drz~QwDI;_ioWP+jRGcYr zq+WA)5mnjI*VCD(?vWH3PlPiW(Gw^!M!VICu#+KN>{|~1S>(1z>SHm>IU0n zdnM7-3q&U(n4hhDD3XjKJr2}i@n9|KFesO3fm!FbU?U0ZVM<|8ccWOz!w599HjMRX zy9KJ_v%Mjep{Kn-U-zuqNeP9cmA+>R@dO!L@f_{k?Q92kcZ;fbT7k{ftmLghw7CzH zSZo1}^|E?r#Oa<4xOm+#g!nKA5X&-MiSkgcmPx4j;jT`t%Le##DG3JPVnDP<;)I<5 zpak5}E1r(1Bat_t4i_~H{$Yd)m|}#up$^3eCYb*wgh`JnLnI4YxE}(JarTFf{@3X>M(0Nq_s_RWQFCBct`?O zvc)a|c!f+Y?5WCfy*U;}DQ3hbWJb9}Sn{$CO(df%Y%^kRUN6zj>n!^b3RD4TBB0y4 zzzt|qz||DMvFeePwI=G2K=Cw3TS#z@Rv+=$e6c>e5-Qr=uCpa#eesq^lgHUk%r!Y- zMXUuc&5gNf9V$Gang>+N0GgWNP%YZL76*XsQsEAT#oo;LbSbv+lF0&3c{$Y^)SZu$_bBtgR(tcuv8qqpkIK& zrjxW_ss3;mO2v^OEhmY13r%hp9W4g9>`t~)ZlbS6_AXUIQInL^0emOJ%@R$f8qca@ zTBWo4m{zG0O_as|dKH|Qpb|UL7QKI|dS(AWu`?&{W@PPBHMh35v8thwhb1_vlGTc8 z5!vcLQt5RZP79#d8P*O`0*4bLFhR{vZ$V{+(}Kzh^gYGv!FT3T>q3VG#4N_jMj45@ zOHYUjFi77pLS%s;PkX)~kW+?GoRHAqb9sXGoQy7O7snU9)Y8#`04ZK8%ulkqqEIq) z_qt0TqVjy&x@}rj#bkHv2!Vo*ori^`HFzS-1|o(6vo4krvMW2wjA$Y$6!C@1tO+^H z>aD|h$JNmUfVC2HmK_Y3*hnqfP?7~iuk10l!27*)Lpr3URM%7~R_h(ufT~#=Q4S6( z)-2>o$Rbr(j29+p9jJ8|p0%~8*={||_$_U+o}sU9#|b$w3!KKoVrI(7fcQOHrOEi| zbQvAj>`MUZ2uiPh}@gmO7>?CI=RwqNz z&;1^!8+(7#+%u$YL*{XuIBNCFD%0 zlc%90+Lm;JdZX0|${0CT$$Z5SXywGtu%bS#)FjMM*G7Bhy8gke1wt}={Wq5HoWp0h85IQ&&nma8;o5p4X5Ws%3em{;O!MaBeA1}4Er7CUp!d_e1 zHPApH(Ch3aOGt)8F)#EaAzjqIY*Wir0vnYq8N?KpWwl-{%R@SlCi#;mO?4!O03Wop ZiV=~P+*navrL0UlBswZNPP20RaJ&KI&N_PahP~g};;eJJoL|&8>Qi+_9aaNs zwW_M0lqKb%az#0&G%4lEPkC8>AwQO9<+JjD9F!a7GC5OTb*wlR9Zwv09dXAc>5P5C zc0wA-7_i0AlVKP!ieCi}X6OuASggrvQLsc-#S(j&pO?K0;faLiz+_fJli5msN1V@! z@MAck6$^D6CWjK5UCc{_Ek)TtLfek_v4mD8lyYHr2wNfSPGNToYZ&SM4Gxu@vjU$W z-iyz~W$q#9*z^3;n`Se4Otw@i^UPMZRDXkSZ(-BDfuM)Y709kVI7j&~v+`%M|I63! zWa;y3@a-*R%}p&HUzJE&6-J2KJg{4o*(`RZn47R43I{ix#?%s90j-5LjD~2Sof@8Z zn1c!Z`39Np59^&?U5|TOVekvFu^?_T z7p>mCzRqrb$N8ANMzS6V`Mc8SboQh`PlT;RgUP7@Mk<%UF7Zp4i5y-_kU5SV1{ygB#Ix#!(`=iLo0 zoP0H^2w&31Y(ZI6)S?G)!=E;^J6_Z-p^s zMCnr^ieGUn-{g1l6M0n5$!)S%UX?yeZ=^?(A?Z?3+9|Dwi{g9ng*Yx2#LHqvJR!D- zs`$(E)$_qKQ9YuX0aYjdiyc4MisGH#`fiEzf7G(B0WscvF!i$cZx!5tkk zx24=#!o1$TZ5Pcc&t52d0Zp?tAMXlS)ev|;_-@x1jmK26cG`lpwUTY3%-%?+rmafG z)i`G4KV^C}qo+c;?hC}g+i&ahnFIsrl#nK0O@YmZ&8f$e(KPe3iL&8zpH8N5$O-Dv zUY(&E4VRN4c_iti$j8DAWOHv*5NYrD8%maa)m}D>Hm@Fuo@QqYeLR4U^T^`@u3`X# S7{)bvLfynI#K_^sbAJFcL)a|< diff --git a/makefile b/makefile index 3e73a7cb..69486b5b 100755 --- a/makefile +++ b/makefile @@ -134,7 +134,7 @@ LIBFLAGS=$(WLIBQ) -b -n # VGMSNDOBJ = vgmSnd.$(OBJ) 16_snd.$(OBJ) #OLDLIBOBJS=bitmap.$(OBJ) 16render.$(OBJ) -GFXLIBOBJS = 16_vl.$(OBJ) 16_vlpal.$(OBJ) 16text.$(OBJ) bakapee.$(OBJ) scroll16.$(OBJ) 16_vrs.$(OBJ) 16_spri.$(OBJ) $(OLDLIBOBJS) +GFXLIBOBJS = 16_vl.$(OBJ) 16_vl_1.$(OBJ) 16_vlpal.$(OBJ) 16text.$(OBJ) bakapee.$(OBJ) scroll16.$(OBJ) 16_vrs.$(OBJ) 16_spri.$(OBJ) $(OLDLIBOBJS) 16LIBOBJS = 16_mm.$(OBJ) 16_pm.$(OBJ) 16_ca.$(OBJ) 16_tail.$(OBJ) 16_head.$(OBJ) 16_enti.$(OBJ) 16_dbg.$(OBJ) 16_in.$(OBJ) kitten.$(OBJ) 16_hc.$(OBJ) 16_wcpu.$(OBJ) 16_timer.$(OBJ) jsmn.$(OBJ) 16_map.$(OBJ) 16text.$(OBJ) DOSLIBOBJ = adlib.$(OBJ) 8254.$(OBJ) 8259.$(OBJ) dos.$(OBJ) cpu.$(OBJ) !ifeq DEBUGSERIAL 1 @@ -276,7 +276,7 @@ pcxtest2.exe: pcxtest2.$(OBJ) gfx.lib $(DOSLIB) #planrpcx.exe: planrpcx.$(OBJ) gfx.lib maptest.exe: maptest.$(OBJ) 16_map.$(OBJ) 16_head.$(OBJ) gfx.lib $(DOSLIB) $(16LIB) fmemtest.exe: fmemtest.$(OBJ) -exmmtest.exe: exmmtest.$(OBJ) $(16LIB) $(DOSLIB) +exmmtest.exe: exmmtest.$(OBJ) $(16LIB) gfx.lib $(DOSLIB) vgmtest.exe: vgmtest.$(OBJ) vgmsnd.lib $(16LIB) $(DOSLIB) gfx.lib db.exe: db.$(OBJ) wcpu.exe: wcpu.$(OBJ) $(16LIB) $(DOSLIB) @@ -345,6 +345,7 @@ joytest.exe: $(COPYCOMMAND) $(DOSLIB_JOYSTICK:$(to_os_path))$(DIRSEP)$(DOSLIB_MEMMODE)$(DIRSEP)test.exe joytest.exe 16_vl.$(OBJ): $(SRCLIB)/16_vl.c $(SRCLIB)/16_vl.h +16_vl_1.$(OBJ): $(SRCLIB)/16_vl_1.c $(SRCLIB)/16_vl.h 16_vlpal.$(OBJ): $(SRCLIB)/16_vlpa_.c $(SRCLIB)/16_vlpal.c $(SRCLIB)/16_vlpal.h bakapee.$(OBJ):$(SRCLIB)/bakapee.c $(SRCLIB)/bakapee.h 16render.$(OBJ):$(SRCLIB)/16render.c $(SRCLIB)/16render.h diff --git a/src/exmmtest.c b/src/exmmtest.c index 3c440c17..945aa954 100755 --- a/src/exmmtest.c +++ b/src/exmmtest.c @@ -45,6 +45,9 @@ //#define EXMMVERBOSE__ // #define PRINTBBDUMP #define BUFFDUMP +#define NOVID + +#define KEYP IN_Shutdown(&gvar); printf("\n\npress any key to continue!\n"); getch(); IN_Startup(&gvar); #define BBUFNAME bigbuffer//gvar.ca.tinf[0] #define INITBBUF static memptr BBUFNAME; @@ -60,11 +63,12 @@ #endif //////////////////////////////////////////////////////////////////////////// - +#ifdef __BORLANDC__ void VGAmodeX(sword vq, boolean cmem, global_game_variables_t *gv) { printf("VGAmodeX dummy:\n %Fp %Fp %Fp\n", &vq, &cmem, gv); } +#endif //printf("* %Fp\t", *BBUF); //printf("* %04x\t", *BBUF); @@ -101,8 +105,7 @@ void segatesuto() // // } // printf("]\n"); -// printf("press any key to continue!\n"); -// getch(); +// KEYP } #endif @@ -110,6 +113,10 @@ void main(int argc, char *argv[]) { byte w; +#ifndef NOVID + boolean done; + ScanCode scan; +#endif static global_game_variables_t gvar; #ifdef INITBBUF INITBBUF @@ -139,7 +146,7 @@ main(int argc, char *argv[]) dbg_debugca=1; #endif #ifdef PRINTBBDUMP -//0000PRINTBB; printf("press any key to continue!\n"); getch(); +//0000PRINTBB; KEYP #endif if(argv[1]){ bakapee1 = argv[1]; if(argv[2]) bakapee2 = argv[2]; } @@ -148,6 +155,12 @@ main(int argc, char *argv[]) bakapee1 = "data/koishi~.pcx"; bakapee2 = "data/test.map"; } +#ifndef NOVID + Startup16(&gvar); + + // save the palette + modexPalSave(&gvar.video.dpal); modexFadeOff(4, &gvar.video.dpal); //modexPalBlack(); +#else //NOVID //printf("main()=%Fp start MM\n", *argv[0]); MM_Startup(&gvar); //printf("ok\n"); #ifdef __16_PM__ @@ -156,12 +169,13 @@ main(int argc, char *argv[]) { #endif PM_Startup(&gvar); PM_CheckMainMem(&gvar); PM_UnlockMainMem(&gvar); -//0000 printf("PM Started\n"); printf("press any key to continue!\n"); getch(); +//0000 printf("PM Started\n"); KEYP #ifdef __DEBUG_PM__ } #endif #endif +#endif //NOVID #ifdef __DEBUG_MM__ dbg_debugmm=0; #endif @@ -169,7 +183,7 @@ main(int argc, char *argv[]) // printf(" done!\n"); #ifdef PRINTBBDUMP //0000 -PRINTBB; printf("\n\npress any key to continue!\n"); getch(); +PRINTBB; KEYP #endif #ifdef __DEBUG_MM__ dbg_debugmm=1; @@ -203,33 +217,63 @@ PRINTBB; printf("\n\npress any key to continue!\n"); getch(); #ifdef PRINTBBDUMP PRINTBB; #endif + //endif // BUFFDUMP //printf("dark purple = purgable\n"); //printf("medium blue = non purgable\n"); //printf("red = locked\n"); - // printf("press any key to continue!\n"); + // KEYP // DebugMemory_(&gvar, 1); if(baka) printf("\nyay!\n"); else printf("\npoo!\n"); #ifdef BUFFDUMPPAUSE - printf("press any key to continue!\n"); getch(); + KEYP #endif #ifdef FILEREAD } #endif #ifndef BUFFDUMPPAUSE - printf("press any key to continue!\n"); getch(); + KEYP #endif #endif //filereadload -/*#ifdef __WATCOMC__ - IN_Startup(&gvar); - ShapeTest_(&gvar); - IN_Shutdown(&gvar); -#endif*/ +#ifdef __WATCOMC__ +#ifndef NOVID + VGAmodeX(1, 0, &gvar); + modexPalUpdate0(&gvar.video.palette); +// ShapeTest_(&gvar); + for (done = false;!done;) + { + while (!(scan = gvar.in.inst->LastScan)) + {} + // SD_Poll(); + + IN_ClearKey(scan); + switch (scan) + { + case sc_Space: + MM_ShowMemoryVidVer(&gvar); + break; + case sc_O: + modexPalUpdate0(&gvar.video.palette); modexpdump(&gvar.video.page); + break; + case sc_P: + modexpdump(&gvar.video.page[0]); + break; + case sc_V: + VL_PatternDraw(&gvar.video, 0, 1, 1); + break; + default: + //case sc_Escape: + done = true; + break; + } + } +#endif +#endif DebugMemory_(&gvar, 1); MM_DumpData(&gvar); @@ -237,6 +281,9 @@ PRINTBB; printf("\n\npress any key to continue!\n"); getch(); //printf("bakapee1=%s\n", bakapee1); //printf("bakapee2=%s\n", bakapee2); MM_FreePtr(BBUFPTR, &gvar); +#ifndef NOVID + Shutdown16(&gvar); +#else #ifdef __16_PM__ #ifdef __DEBUG_PM__ if(dbg_debugpm>0) @@ -245,6 +292,8 @@ PRINTBB; printf("\n\npress any key to continue!\n"); getch(); #endif CA_Shutdown(&gvar); MM_Shutdown(&gvar); +#endif //NOVID + IN_Shutdown(&gvar); free(bakapee1); free(bakapee2); printf("========================================\n"); printf("near= %Fp ", gvar.mm.nearheap); @@ -299,6 +348,7 @@ PRINTBB; printf("\n\npress any key to continue!\n"); getch(); #endif printf("\n"); #endif + printf("old_mode=%u VL_Started=%u", gvar.video.old_mode, gvar.video.VL_Started); //printf("based core left: %lu\n", (dword)_basedcoreleft()); //printf("huge core left: %lu\n", (dword)_hugecoreleft()); } diff --git a/src/lib/16_in.c b/src/lib/16_in.c index f4d90dbb..a3e3fabd 100755 --- a/src/lib/16_in.c +++ b/src/lib/16_in.c @@ -503,7 +503,7 @@ IN_GetJoyButtonsDB(word joy) // /////////////////////////////////////////////////////////////////////////// static void -INL_StartKbd(global_game_variables_t *gvar) +INL_StartKbd() { INL_KeyHook = NULL; // Clear key hook @@ -680,7 +680,7 @@ IN_Startup(global_game_variables_t *gvar) } } - INL_StartKbd(gvar); + INL_StartKbd(); gvar->in.MousePresent = checkmouse? INL_StartMouse() : false; for (i = 0;i < MaxJoys;i++) @@ -1183,8 +1183,13 @@ boolean IN_CheckAck (global_game_variables_t *gvar) // // see if something has been pressed // - if (inst.LastScan) - return true; + if(!gvar->in.IN_Started) + getch(); + else + { + if (inst.LastScan) + return true; + } buttons = IN_JoyButtons () << 4; if (gvar->in.MousePresent) diff --git a/src/lib/16_mm.c b/src/lib/16_mm.c index fb308db6..f5f0770e 100755 --- a/src/lib/16_mm.c +++ b/src/lib/16_mm.c @@ -1150,7 +1150,7 @@ void MM_SetLock(memptr *baseptr, boolean locked, global_game_variables_t *gvar) void MM_SortMem(global_game_variables_t *gvar) { mmblocktype far *scan,far *last,far *next; - unsigned start,length,source,dest;//++++,oldborder; + unsigned start,length,source,dest,oldborder; //++++int playing; // @@ -1173,8 +1173,8 @@ void MM_SortMem(global_game_variables_t *gvar) SD_StopSound();*/ -// oldborder = bordercolor; -// VW_ColorBorder (15); + oldborder = gvar->video.bordercolor; + gvar->video.bordercolor = modexPalOverscan(15); if(beforesort) beforesort(); @@ -1267,7 +1267,6 @@ void MM_ShowMemory(global_game_variables_t *gvar) //dword wwww; byte scratch[160],scratch0[4096],str[16];//[[[[scratch1[160], //byte d = '#'; -//[[[[ VW_SetDefaultColors(); //[[[[ VW_SetLineWidth(40); //++++mh temp = bufferofs; //++++mh bufferofs = 0; @@ -1409,6 +1408,46 @@ void MM_ShowMemory(global_game_variables_t *gvar) //++++mh bufferofs = temp; } +void MM_ShowMemoryVidVer(global_game_variables_t *gvar) +{ + mmblocktype far *scan; + unsigned color,temp,x,y; + long end;//,owner; + //char scratch[80],str[10]; + + temp = gvar->video.ofs.bufferofs; + gvar->video.ofs.bufferofs = gvar->video.ofs.displayofs; + scan = gvar->mm.mmhead; + + end = -1; + + while (scan) + { + if (scan->attributes & PURGEBITS) + color = 5; // dark purple = purgable + else + color = 9; // medium blue = non purgable + if (scan->attributes & LOCKBIT) + color = 12; // red = locked + if (scan->start<=end) + Quit (gvar, "MM_ShowMemory: Memory block order currupted!"); + end = scan->length-1; + y = scan->start/320; + x = scan->start%320; + VL_Hlin(x,x+end,y,color, &gvar->video.ofs); + VL_Plot(x,y,15, &gvar->video.ofs); + if (scan->next && scan->next->start > end+1) + VL_Hlin(x+end+1,x+(scan->next->start-scan->start),y,0, &gvar->video.ofs); // black = free + + scan = scan->next; + } + + VL_FadeIn(0,255,&gvar->video.palette,10, &gvar->video); + IN_Ack(gvar); + + gvar->video.ofs.bufferofs = temp; +} + //========================================================================== /* diff --git a/src/lib/16_mm.h b/src/lib/16_mm.h index 36825c90..bd529c03 100755 --- a/src/lib/16_mm.h +++ b/src/lib/16_mm.h @@ -25,8 +25,6 @@ #include "src/lib/16_head.h" #include "src/lib/16_hc.h" #include "src/lib/16_tail.h" -//++++mh #include "src/lib/16_in.h" - #ifdef __DEBUG__ // 1 == Debug/Dev ; 0 == Production/final #define OUT_OF_MEM_MSG "MM_GetPtr: Out of memory!\nYou were short :%lu bytes\n" @@ -198,6 +196,7 @@ void MM_SetPurge(memptr *baseptr, int purge, global_game_variables_t *gvar); void MM_SetLock(memptr *baseptr, boolean locked, global_game_variables_t *gvar); void MM_SortMem(global_game_variables_t *gvar); void MM_ShowMemory(global_game_variables_t *gvar); +void MM_ShowMemoryVidVer(global_game_variables_t *gvar); void MM_DumpData(global_game_variables_t *gvar); dword MM_UnusedMemory(global_game_variables_t *gvar); dword MM_TotalFree(global_game_variables_t *gvar); diff --git a/src/lib/16_tail.c b/src/lib/16_tail.c index 3b1cb42c..daa9fadc 100755 --- a/src/lib/16_tail.c +++ b/src/lib/16_tail.c @@ -25,7 +25,6 @@ #include "src/lib/16_tail.h" #include "src/lib/16text.h" - /* ========================== = @@ -40,38 +39,9 @@ void Startup16(global_game_variables_t *gvar) { #ifdef __WATCOMC__ start_timer(gvar); - - // DOSLIB: check our environment - probe_dos(); - - // DOSLIB: what CPU are we using? - // NTS: I can see from the makefile Sparky4 intends this to run on 8088 by the -0 switch in CFLAGS. - // So this code by itself shouldn't care too much what CPU it's running on. Except that other - // parts of this project (DOSLIB itself) rely on CPU detection to know what is appropriate for - // the CPU to carry out tasks. --J.C. - cpu_probe(); - - // DOSLIB: check for VGA - if (!probe_vga()) { - printf("VGA probe failed\n"); - return; - } - // hardware must be VGA or higher! - if (!(vga_state.vga_flags & VGA_IS_VGA)) { - printf("This program requires VGA or higher graphics hardware\n"); - return; - } - - if (_DEBUG_INIT() == 0) { -#ifdef DEBUGSERIAL - //printf("WARNING: Failed to initialize DEBUG output\n"); -#endif - } - _DEBUG("Serial debug output started\n"); // NTS: All serial output must end messages with newline, or DOSBox-X will not emit text to log - _DEBUGF("Serial debug output printf test %u %u %u\n",1U,2U,3U); - - textInit(); #endif + gvar->video.VL_Started=0; + TL_VidInit(gvar); gvar->mm.mmstarted=0; gvar->pm.PMStarted=0; MM_Startup(gvar); @@ -115,7 +85,51 @@ void Shutdown16(global_game_variables_t *gvar) CA_Shutdown(gvar); MM_Shutdown(gvar); #ifdef __WATCOMC__ - VGAmodeX(0, 1, gvar); + if(gvar->video.VL_Started) + VGAmodeX(0, 1, gvar); +#endif +} + +void TL_VidInit(global_game_variables_t *gvar) +{ +#ifdef __WATCOMC__ + // DOSLIB: check our environment + probe_dos(); + + // DOSLIB: what CPU are we using? + // NTS: I can see from the makefile Sparky4 intends this to run on 8088 by the -0 switch in CFLAGS. + // So this code by itself shouldn't care too much what CPU it's running on. Except that other + // parts of this project (DOSLIB itself) rely on CPU detection to know what is appropriate for + // the CPU to carry out tasks. --J.C. + cpu_probe(); + + // DOSLIB: check for VGA + if (!probe_vga()) { + printf("VGA probe failed\n"); + return; + } + // hardware must be VGA or higher! + if (!(vga_state.vga_flags & VGA_IS_VGA)) { + printf("This program requires VGA or higher graphics hardware\n"); + return; + } + + if (_DEBUG_INIT() == 0) { +#ifdef DEBUGSERIAL + //printf("WARNING: Failed to initialize DEBUG output\n"); +#endif + } + _DEBUG("Serial debug output started\n"); // NTS: All serial output must end messages with newline, or DOSBox-X will not emit text to log + _DEBUGF("Serial debug output printf test %u %u %u\n",1U,2U,3U); + + textInit(); + + // get old video mode + //in.h.ah = 0xf; + //int86(0x10, &in, &out); + gvar->video.old_mode = vgaGetMode();//out.h.al; +#else + gvar->video.old_mode = 3; #endif } @@ -489,3 +503,13 @@ void booleantest() printf(" sizeof(boolean)=%s\n", boolean_to_binary(sizeof(boolean))); printf("end of boolean test\n"); } + +#ifdef __BORLANDC__ +word modexPalOverscan(word col) +{ + //modexWaitBorder(); + outp(PAL_WRITE_REG, 0); /* start at the beginning of palette */ + outp(PAL_DATA_REG, col); + return col; +} +#endif diff --git a/src/lib/16_tail.h b/src/lib/16_tail.h index 4de636c6..dc43c895 100755 --- a/src/lib/16_tail.h +++ b/src/lib/16_tail.h @@ -96,10 +96,16 @@ if(gvar.in.inst->Keyboard[sc_PgUp]){ \ rotateL(gvar.video.palette, sizeof(gvar.video.palette)/sizeof(gvar.video.palette[0])); \ VL_UpdatePaletteWrite(&gvar.video.palette, 0); IN_UserInput(1, &gvar); }*/ +#ifdef __BORLANDC__ +#define PAL_WRITE_REG 0x03C8 /* Color register, write address */ +#define PAL_DATA_REG 0x03C9 /* Color register, data port */ +word modexPalOverscan(word col); +#endif -void DebugMemory_(global_game_variables_t *gvar, boolean q); void Shutdown16(global_game_variables_t *gvar); void Startup16(global_game_variables_t *gvar); +void TL_VidInit(global_game_variables_t *gvar); +void DebugMemory_(global_game_variables_t *gvar, boolean q); void ClearMemory (global_game_variables_t *gvar); void Quit (global_game_variables_t *gvar, char *error); void turboXT(byte bakapee); diff --git a/src/lib/16_tdef.h b/src/lib/16_tdef.h index 2c2d0f72..a3ac0ae4 100755 --- a/src/lib/16_tdef.h +++ b/src/lib/16_tdef.h @@ -354,13 +354,16 @@ typedef struct } kurokku_t; //===================================// -#define PALSIZE 768 +#define PALSIZE 768 #define NUMCHUNKS 416 //keen +#define MAXSCANLINES 240 // size of ylookup table + //video typedef struct { unsigned int offscreen_ofs; unsigned int pattern_ofs; + unsigned bufferofs, ylookup[MAXSCANLINES], linewidth,displayofs; } ofs_t; //unfinished typedef struct @@ -376,8 +379,10 @@ typedef struct typedef struct { + boolean VL_Started; char old_mode; //old video mode before game! byte palette[PALSIZE], dpal[PALSIZE]; //palette array + byte far palette1[256][3],far palette2[256][3]; page_t page[MAXPAGE]; //can be used as a pointer to root page[0] word vmem_remain; //remaining video memory byte num_of_pages; //number of actual pages @@ -392,6 +397,10 @@ typedef struct ofs_t ofs; //offset vars used for doslib word vh; //video combined height //0000word startclk; float clk, tickclk; //timer + //wolf3d vars + boolean screenfaded; + word bordercolor; + boolean fastpalette; } video_t; //from scroll16 @@ -642,17 +651,16 @@ typedef struct //TODO: USE THIS!!!! //========================================================================== //actual global game varables! -/*typedef enum { - ENGI_QUIT, - ENGI_RUN, - ENGI_MENU, - ENGI_PAUSE -} engi_stat_t;*/ -//ENGI_INPUT, +/*typedef struct { + boolean clearmem; +} vidsw_t; + +typedef struct { + vidsw_t vsw; +} sw_t;*/ typedef struct { -//---- engi_stat_t engi_stat; video_t video; // video settings variable ca_t ca; // ca stuff pm_t pm; // pm stuff @@ -662,6 +670,7 @@ typedef struct in_info_t in; // 16_in info player_t player[MaxPlayers]; // player vars map_view_t mv[4]; +// sw_t sw; } global_game_variables_t; #ifdef __WATCOMC__ diff --git a/src/lib/16_vl.c b/src/lib/16_vl.c index 82e81375..833a75a6 100755 --- a/src/lib/16_vl.c +++ b/src/lib/16_vl.c @@ -43,16 +43,18 @@ void VGAmodeX(sword vq, boolean cmem, global_game_variables_t *gv) { case 0: // deinit the video // change to the video mode we were in before we switched to mode 13h - modexLeave(); - in.h.ah = 0x00; - in.h.al = gv->video.old_mode; - int86(0x10, &in, &out); + if(gv->video.VL_Started) + { + modexLeave(); + in.h.ah = 0x00; + in.h.al = gv->video.old_mode; + int86(0x10, &in, &out); + } + gv->video.VL_Started=0; break; default: // init the video - // get old video mode - //in.h.ah = 0xf; - //int86(0x10, &in, &out); - gv->video.old_mode = vgaGetMode();//out.h.al; + if(gv->video.VL_Started) + return; // enter mode modexEnter(vq, cmem, gv); break; @@ -163,6 +165,8 @@ void modexEnter(sword vq, boolean cmem, global_game_variables_t *gv) } break; } + VL_SetLineWidth (cm.offset, &gv->video.ofs); + gv->video.VL_Started=1; } void @@ -171,6 +175,39 @@ modexLeave() { vgaSetMode(TEXT_MODE); } +/* +==================== += += VL_SetLineWidth += += Line witdh is in WORDS, 40 words is normal width for vgaplanegr += +==================== +*/ + +void VL_SetLineWidth (unsigned width, ofs_t *ofs) +{ + int i,offset; + +// +// set wide virtual screen +// + outport (CRTC_INDEX,CRTC_OFFSET+width*256); + +// +// set up lookup tables +// + ofs->linewidth = width*2; + + offset = 0; + + for (i=0;iylookup[i]=offset; + offset += ofs->linewidth; + } +} + page_t modexDefaultPage(page_t *p) { @@ -416,8 +453,7 @@ modexClearRegion(page_t *page, int x, int y, int w, int h, byte color) word poffset = pageOff + y*(page->stridew) + xoff; // starting offset word scanCount=w>>2; // number of iterations per row (excluding right clip) word nextRow = page->stridew-scanCount-1; // loc of next row - byte lclip[] = {0x0f, 0x0e, 0x0c, 0x08}; // clips for rectangles not on 4s - byte rclip[] = {0x00, 0x01, 0x03, 0x07}; + LRCLIPDEF byte left = lclip[x&0x03]; byte right = rclip[(x+w)&0x03]; @@ -498,8 +534,7 @@ modexCopyPageRegion(page_t *dest, page_t *src, word scans = vga_state.vga_stride+8; //++++0000 the quick and dirty fix of the major issue with p16 video display wwww word nextSrcRow = src->stridew - scans - 1; word nextDestRow = dest->stridew - scans - 1; - byte lclip[] = {0x0f, 0x0e, 0x0c, 0x08}; // clips for rectangles not on 4s - byte rclip[] = {0x00, 0x01, 0x03, 0x07}; + LRCLIPDEF byte left = lclip[sx&0x03]; byte right = rclip[(sx+width)&0x03]; @@ -580,6 +615,7 @@ modexCopyPageRegion(page_t *dest, page_t *src, } } +//check 16_vl_1.c /* fade and flash */ void @@ -782,14 +818,16 @@ modexPalUpdate0(byte *p) } } -void +word modexPalOverscan(word col) { //modexWaitBorder(); vga_wait_for_vsync(); outp(PAL_WRITE_REG, 0); /* start at the beginning of palette */ outp(PAL_DATA_REG, col); + return col; } +//check 16_vl_1.c void modexputPixel(page_t *page, int x, int y, byte color) { @@ -858,7 +896,7 @@ void modexDrawChar(page_t *page, int x/*for planar selection only*/, word t, wor } } -void modexprint(page_t *page, sword x, sword y, word t, boolean tlsw, word col, word bgcol, const byte *str) +void modexprint(page_t *page, sword x, sword y, word t, boolean tlsw, word col, word bgcol, boolean sw, const byte *str) { word s, o, w; word x_draw; @@ -867,38 +905,46 @@ void modexprint(page_t *page, sword x, sword y, word t, boolean tlsw, word col, word addrr; byte c; - if(tlsw){ x-=page->tlx; y-=page->tly; } - x_draw = x/4; - addrq = (page->stridew) * y + (word)(x_draw) + - ((word)page->data); - addrr = addrq; - s=romFonts[t].seg; - o=romFonts[t].off; - w=romFonts[t].charSize; - romFontsData.chw=0; - - for(; *str != '\0'; str++) + switch(sw) { - c = (*str); - if(c=='\n') - { - x = x_draw; - romFontsData.chw = 0; - addrq += (page->stridew) * 8; + case 0: + printf("%s\n", str); + break; + case 1: + if(tlsw){ x-=page->tlx; y-=page->tly; } + x_draw = x/4; + addrq = (page->stridew) * y + (word)(x_draw) + + ((word)page->data); addrr = addrq; - y += 8; - continue; - } + s=romFonts[t].seg; + o=romFonts[t].off; + w=romFonts[t].charSize; + romFontsData.chw=0; - // load the character into romFontsData.l - // no need for inline assembly! - // NTS: It might even be faster to just let the modexDrawChar point directly at ROM font than to copy per char! --J.C. - _fmemcpy(romFontsData.l,MK_FP(s,o+(w*c))/*ROM font location*/,w/*char size*/); - modexDrawChar(page, x_draw/*for mode X planar use*/, t, col, bgcol, addrr); - x_draw += 8; /* track X for edge of screen */ - addrr += 2; /* move 8 pixels over (2 x 4 planar pixels per byte) */ + for(; *str != '\0'; str++) + { + c = (*str); + if(c=='\n') + { + x = x_draw; + romFontsData.chw = 0; + addrq += (page->stridew) * 8; + addrr = addrq; + y += 8; + continue; + } + + // load the character into romFontsData.l + // no need for inline assembly! + // NTS: It might even be faster to just let the modexDrawChar point directly at ROM font than to copy per char! --J.C. + _fmemcpy(romFontsData.l,MK_FP(s,o+(w*c))/*ROM font location*/,w/*char size*/); + modexDrawChar(page, x_draw/*for mode X planar use*/, t, col, bgcol, addrr); + x_draw += 8; /* track X for edge of screen */ + addrr += 2; /* move 8 pixels over (2 x 4 planar pixels per byte) */ + } + //printf("print xy:%dx%d tlxy:%dx%d\n", x, y, page->tlx, page->tly); + break; } - //printf("print xy:%dx%d tlxy:%dx%d\n", x, y, page->tlx, page->tly); } void modexprintbig(page_t *page, word x, word y, word t, word col, word bgcol, const byte *str) @@ -1103,6 +1149,8 @@ modexWaitBorder_end() } +//=========================================================================== + // // printings of video memory information // diff --git a/src/lib/16_vl.h b/src/lib/16_vl.h index cec79507..c3c44c7c 100755 --- a/src/lib/16_vl.h +++ b/src/lib/16_vl.h @@ -58,6 +58,14 @@ #define PLANE(x) (1 << ((x) & 3)) #define SELECT_ALL_PLANES() outpw(0x03c4, 0xff02) +// clips for rectangles not on 4s +#define LRCLIPDEF \ + byte lclip[] = {0x0f, 0x0e, 0x0c, 0x08}; \ + byte rclip[] = {0x00, 0x01, 0x03, 0x07}; + +#define VCLIPDEF \ + byte pclip[] = {1,2,4,8}; + typedef union { byte red; @@ -73,12 +81,54 @@ extern byte far* VGA; /* The VGA Memory */ #define VGA_256_COLOR_MODE 0x13 #define TEXT_MODE 0x03 -#define AC_INDEX 0x03c0 #define SC_INDEX 0x03c4 +#define SC_RESET 0 +#define SC_CLOCK 1 +#define SC_MAPMASK 2 +#define SC_CHARMAP 3 +#define SC_MEMMODE 4 + +#define CRTC_INDEX 0x3D4 +#define CRTC_H_TOTAL 0 +#define CRTC_H_DISPEND 1 +#define CRTC_H_BLANK 2 +#define CRTC_H_ENDBLANK 3 +#define CRTC_H_RETRACE 4 +#define CRTC_H_ENDRETRACE 5 +#define CRTC_V_TOTAL 6 +#define CRTC_OVERFLOW 7 +#define CRTC_ROWSCAN 8 +#define CRTC_MAXSCANLINE 9 +#define CRTC_CURSORSTART 10 +#define CRTC_CURSOREND 11 +#define CRTC_STARTHIGH 12 +#define CRTC_STARTLOW 13 +#define CRTC_CURSORHIGH 14 +#define CRTC_CURSORLOW 15 +#define CRTC_V_RETRACE 16 +#define CRTC_V_ENDRETRACE 17 +#define CRTC_V_DISPEND 18 +#define CRTC_OFFSET 19 +#define CRTC_UNDERLINE 20 +#define CRTC_V_BLANK 21 +#define CRTC_V_ENDBLANK 22 +#define CRTC_MODE 23 +#define CRTC_LINECOMPARE 24 + +#define GC_INDEX 0x03ce +#define GC_SETRESET 0 +#define GC_ENABLESETRESET 1 +#define GC_COLORCOMPARE 2 +#define GC_DATAROTATE 3 +#define GC_READMAP 4 +#define GC_MODE 5 +#define GC_MISCELLANEOUS 6 +#define GC_COLORDONTCARE 7 +#define GC_BITMASK 8 + +#define AC_INDEX 0x03c0 #define SC_DATA 0x03c5 -#define CRTC_INDEX 0x03d4 #define CRTC_DATA 0x03d5 -#define GC_INDEX 0x03ce #define MISC_OUTPUT 0x03c2 #define HIGH_ADDRESS 0x0C #define LOW_ADDRESS 0x0D @@ -94,12 +144,33 @@ extern byte far* VGA; /* The VGA Memory */ #define PAL_DATA_REG 0x03C9 /* Color register, data port */ #define PAL_SIZE (256 * 3) +//=========================================================================== + +#define SCREENSEG 0xa000 + +//#define SCREENWIDTH 80 // default screen width in bytes +//#define MAXSCANLINES 240 // size of ylookup table + +//#define CHARWIDTH 2 +//#define TILEWIDTH 4 + +//=========================================================================== + +// +// VGA hardware routines +// + +void VGAMAPMASK(byte x); +void VGAWRITEMODE(byte x); +void VGAREADMAP(byte x); + /* -============================ Functions =============================- */ /* mode switching, page, and plane functions */ void VGAmodeX(sword vq, boolean cmem, global_game_variables_t *gv); void modexEnter(sword vq, boolean cmem, global_game_variables_t *gv); byte vgaGetMode(); void modexLeave(); +void VL_SetLineWidth (unsigned width, ofs_t *ofs); void modexsetBaseXMode(); page_t modexDefaultPage(page_t *p); page_t modexNextPage(page_t *p); @@ -116,6 +187,7 @@ void modexClearRegion(page_t *page, int x, int y, int w, int h, byte color); void modexCopyPageRegion(page_t *dest, page_t *src, word sx, word sy, word dx, word dy, word width, word height); /* Palette fade and flash effects */ +void VL_FadeIn (int start, int end, byte far *palette, int steps, video_t *v); void modexFadeOn(word fade, byte *palette); void modexFadeOff(word fade, byte *palette); void modexFlashOn(word fade, byte *palette); @@ -129,6 +201,7 @@ void VL_LoadPalFile(const char *filename, byte *palette); void VL_LoadPalFilewithoffset(const char *filename, byte *palette, word o); void VL_UpdatePaletteWrite(byte *palette, word o); void modexSavePalFile(char *filename, byte *palette); +#define MenuFadeIn() VL_FadeIn(0,255,&gamepal,10) /* fixed palette functions */ void modexPalBlack(); @@ -137,7 +210,11 @@ void modexPalWhite(); /* utility functions */ void modexPalUpdate(byte *p); void modexPalUpdate0(byte *p); -void modexPalOverscan(word col); +word modexPalOverscan(word col); +void VL_Plot (int x, int y, int color, ofs_t *ofs); +void VL_Hlin (unsigned x, unsigned y, unsigned width, unsigned color, ofs_t *ofs); +void VL_Vlin (int x, int y, int height, int color, ofs_t *ofs); +void VL_Bar (int x, int y, int width, int height, int color, ofs_t *ofs); void modexputPixel(page_t *page, int x, int y, byte color); byte modexgetPixel(page_t *page, int x, int y); @@ -168,7 +245,7 @@ static inline byte modexreadPixel(page_t *page, int x, int y, word addr) #endif void modexDrawChar(page_t *page, int x/*for planar selection only*/, word t, word col, word bgcol, word addr); -void modexprint(page_t *page, sword x, sword y, word t, boolean tlsw, word col, word bgcol, const byte *str); +void modexprint(page_t *page, sword x, sword y, word t, boolean tlsw, word col, word bgcol, boolean sw, const byte *str); void modexprintbig(page_t *page, word x, word y, word t, word col, word bgcol, const byte *str); void modexpdump(page_t *pee); void modexcls(page_t *page, byte color, byte *Where); @@ -176,6 +253,7 @@ void VL_PatternDraw(video_t *video, word pn, boolean sw, boolean allsw); void modexWaitBorder(); void modexWaitBorder_start(); void modexWaitBorder_end(); +void VL_WaitVBL(word num); void VL_PrintmodexmemInfo(video_t *v); #endif diff --git a/src/lib/16_vl_1.c b/src/lib/16_vl_1.c new file mode 100755 index 00000000..a6928b27 --- /dev/null +++ b/src/lib/16_vl_1.c @@ -0,0 +1,580 @@ +/* Project 16 Source Code~ + * Copyright (C) 2012-2017 sparky4 & pngwen & andrius4669 & joncampbell123 & yakui-lover + * + * This file is part of Project 16. + * + * Project 16 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 3 of the License, or + * (at your option) any later version. + * + * Project 16 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. If not, see , or + * write to the Free Software Foundation, Inc., 51 Franklin Street, + * Fifth Floor, Boston, MA 02110-1301 USA. + * + */ + +#include +#include +#include +#include "src/lib/16_vl.h" + +/* +============================================================================= + + PALETTE OPS + + To avoid snow, do a WaitVBL BEFORE calling these + +============================================================================= +*/ + + +/* +================= += += VL_FillPalette += +================= +*/ + +void VL_FillPalette (int red, int green, int blue) +{ + int i; + + outportb (PAL_WRITE_REG,0); + for (i=0;i<256;i++) + { + outportb (PAL_DATA_REG,red); + outportb (PAL_DATA_REG,green); + outportb (PAL_DATA_REG,blue); + } +} + +//=========================================================================== + +/* +================= += += VL_SetColor += +================= +*/ + +void VL_SetColor (int color, int red, int green, int blue) +{ + outportb (PAL_WRITE_REG,color); + outportb (PAL_DATA_REG,red); + outportb (PAL_DATA_REG,green); + outportb (PAL_DATA_REG,blue); +} + +//=========================================================================== + +/* +================= += += VL_GetColor += +================= +*/ + +void VL_GetColor (int color, int *red, int *green, int *blue) +{ + outportb (PAL_READ_REG,color); + *red = inportb (PAL_DATA_REG); + *green = inportb (PAL_DATA_REG); + *blue = inportb (PAL_DATA_REG); +} + +//=========================================================================== + +/* +================= += += VL_SetPalette += += If fast palette setting has been tested for, it is used += (some cards don't like outsb palette setting) += +================= +*/ + +void VL_SetPalette (byte far *palette, video_t *v) +{ +// int i; + boolean fastpalette; + fastpalette=v->fastpalette; + +// outportb (PAL_WRITE_REG,0); +// for (i=0;i<768;i++) +// outportb(PAL_DATA_REG,*palette++); + + __asm { + mov dx,PAL_WRITE_REG + mov al,0 + out dx,al + mov dx,PAL_DATA_REG + lds si,[palette] + + test [ss:fastpalette],1 + jz slowset +// +// set palette fast for cards that can take it +// + //mov cx,768 + //rep outsb + //jmp done + +// +// set palette slowly for some video cards +// +#ifdef __BORLANDC__ + } +#endif +slowset: +#ifdef __BORLANDC__ + __asm { +#endif + mov cx,256 +#ifdef __BORLANDC__ + } +#endif +setloop: +#ifdef __BORLANDC__ + __asm { +#endif + lodsb + out dx,al + lodsb + out dx,al + lodsb + out dx,al + loop setloop +#ifdef __BORLANDC__ + } +#endif +done: +#ifdef __BORLANDC__ + __asm { +#endif + mov ax,ss + mov ds,ax + } + v->fastpalette=fastpalette; +} + + +//=========================================================================== + +/* +================= += += VL_GetPalette += += This does not use the port string instructions, += due to some incompatabilities += +================= +*/ + +void VL_GetPalette (byte far *palette) +{ + int i; + + outportb (PAL_READ_REG,0); + for (i=0;i<768;i++) + *palette++ = inportb(PAL_DATA_REG); +} + + +//=========================================================================== + +/* +================= += += VL_FadeOut += += Fades the current palette to the given color in the given number of steps += +================= +*/ + +void VL_FadeOut (int start, int end, int red, int green, int blue, int steps, video_t *v) +{ + int i,j,orig,delta; + byte far *origptr, far *newptr; + + VL_WaitVBL(1); + VL_GetPalette (&v->palette1[0][0]); + _fmemcpy (v->palette2,v->palette1,PALSIZE); + +// +// fade through intermediate frames +// + for (i=0;ipalette1[start][0]; + newptr = &v->palette2[start][0]; + for (j=start;j<=end;j++) + { + orig = *origptr++; + delta = red-orig; + *newptr++ = orig + delta * i / steps; + orig = *origptr++; + delta = green-orig; + *newptr++ = orig + delta * i / steps; + orig = *origptr++; + delta = blue-orig; + *newptr++ = orig + delta * i / steps; + } + + VL_WaitVBL(1); + VL_SetPalette (&v->palette2[0][0], v); + } + +// +// final color +// + VL_FillPalette (red,green,blue); + + v->screenfaded = true; +} + + +/* +================= += += VL_FadeIn += +================= +*/ + +void VL_FadeIn (int start, int end, byte far *palette, int steps, video_t *v) +{ + int i,j,delta; + + VL_WaitVBL(1); + VL_GetPalette (&v->palette1[0][0]); + _fmemcpy (&v->palette2[0][0],&v->palette1[0][0],sizeof(v->palette1)); + + start *= 3; + end = end*3+2; + +// +// fade through intermediate frames +// + for (i=0;ipalette1[0][j]; + v->palette2[0][j] = v->palette1[0][j] + delta * i / steps; + } + + VL_WaitVBL(1); + VL_SetPalette (&v->palette2[0][0], v); + } + +// +// final color +// + VL_SetPalette (palette, v); + v->screenfaded = false; +} + + + +/* +================= += += VL_TestPaletteSet += += Sets the palette with outsb, then reads it in and compares += If it compares ok, fastpalette is set to true. += +================= +*/ + +void VL_TestPaletteSet (video_t *v) +{ + int i; + + for (i=0;i<768;i++) + v->palette1[0][i] = i; + + v->fastpalette = true; + VL_SetPalette (&v->palette1[0][0], v); + VL_GetPalette (&v->palette2[0][0]); + if (_fmemcmp (&v->palette1[0][0],&v->palette2[0][0],768)) + v->fastpalette = false; +} + + +/* +============================================================================= + + PIXEL OPS + +============================================================================= +*/ + +//byte rightmasks[4] = {1,3,7,15}; + +/* +================= += += VL_Plot += +================= +*/ + +void VL_Plot (int x, int y, int color, ofs_t *ofs) +{ + byte mask; + VCLIPDEF + + mask = pclip[x&3]; + VGAMAPMASK(mask); + *(byte far *)MK_FP(SCREENSEG,ofs->bufferofs+(ofs->ylookup[y]+(x>>2))) = color; + VGAMAPMASK(15); +} + + +/* +================= += += VL_Hlin += +================= +*/ + +void VL_Hlin (unsigned x, unsigned y, unsigned width, unsigned color, ofs_t *ofs) +{ + unsigned xbyte; + byte far *dest; + byte leftmask,rightmask; + int midbytes; + + LRCLIPDEF + + xbyte = x>>2; + leftmask = lclip[x&3]; + rightmask = rclip[(x+width-1)&3]; + midbytes = ((x+width+3)>>2) - xbyte - 2; + + dest = MK_FP(SCREENSEG,ofs->bufferofs+ofs->ylookup[y]+xbyte); + + if (midbytes<0) + { + // all in one byte + VGAMAPMASK(leftmask&rightmask); + *dest = color; + VGAMAPMASK(15); + return; + } + + VGAMAPMASK(leftmask); + *dest++ = color; + + VGAMAPMASK(15); + _fmemset (dest,color,midbytes); + dest+=midbytes; + + VGAMAPMASK(rightmask); + *dest = color; + + VGAMAPMASK(15); +} + + +/* +================= += += VL_Vlin += +================= +*/ + +void VL_Vlin (int x, int y, int height, int color, ofs_t *ofs) +{ + byte far *dest,mask; + VCLIPDEF + + mask = pclip[x&3]; + VGAMAPMASK(mask); + + dest = MK_FP(SCREENSEG,ofs->bufferofs+ofs->ylookup[y]+(x>>2)); + + while (height--) + { + *dest = color; + dest += ofs->linewidth; + } + + VGAMAPMASK(15); +} + + +/* +================= += += VL_Bar += +================= +*/ + +void VL_Bar (int x, int y, int width, int height, int color, ofs_t *ofs) +{ + byte far *dest; + byte leftmask,rightmask; + int midbytes,linedelta; + + LRCLIPDEF + + leftmask = lclip[x&3]; + rightmask = rclip[(x+width-1)&3]; + midbytes = ((x+width+3)>>2) - (x>>2) - 2; + linedelta = ofs->linewidth-(midbytes+1); + + dest = MK_FP(SCREENSEG,ofs->bufferofs+ofs->ylookup[y]+(x>>2)); + + if (midbytes<0) + { + // all in one byte + VGAMAPMASK(leftmask&rightmask); + while (height--) + { + *dest = color; + dest += ofs->linewidth; + } + VGAMAPMASK(15); + return; + } + + while (height--) + { + VGAMAPMASK(leftmask); + *dest++ = color; + + VGAMAPMASK(15); + _fmemset (dest,color,midbytes); + dest+=midbytes; + + VGAMAPMASK(rightmask); + *dest = color; + + dest+=linedelta; + } + + VGAMAPMASK(15); +} + + +/* +============== + + VL_WaitVBL ******** NEW ********* + + Wait for the vertical retrace (returns before the actual vertical sync) + +============== +*/ + +void VL_WaitVBL(word num) +{ +//PROC VL_WaitVBL num:WORD +//PUBLIC VL_WaitVBL +#ifdef __WATCOMC__ + __asm { +#endif + wait: +#ifdef __BORLANDC__ + __asm { +#endif + + mov dx,STATUS_REGISTER_1 + + mov cx,[num] + // + // wait for a display signal to make sure the raster isn't in the middle + // of a sync + // +#ifdef __BORLANDC__ + } +#endif + waitnosync: +#ifdef __BORLANDC__ + __asm { +#endif + in al,dx + test al,8 + jnz waitnosync + + +#ifdef __BORLANDC__ + } +#endif + waitsync: +#ifdef __BORLANDC__ + __asm { +#endif + in al,dx + test al,8 + jz waitsync + + loop waitnosync + + ret + } +} + +//=========================================================================== + +void VGAMAPMASK(byte x) +{ + __asm { +// cli + mov dx,SC_INDEX + mov al,SC_MAPMASK + mov ah,x + out dx,ax +// sti + } +} + +void VGAWRITEMODE(byte x) +{ + __asm { +// cli + mov dx,GC_INDEX + mov al,GC_MODE + out dx,al + inc dx + in al,dx + and al,252 + or al,x + out dx,al +// sti + } +} + +void VGAREADMAP(byte x) +{ + __asm { +// cli + mov dx,GC_INDEX + mov al,GC_READMAP + mov ah,x + out dx,ax +// sti + } +} + +//=========================================================================== diff --git a/src/lib/bakapee.c b/src/lib/bakapee.c index 9af09403..bab3eba7 100755 --- a/src/lib/bakapee.c +++ b/src/lib/bakapee.c @@ -283,7 +283,7 @@ void ding(page_t *page, bakapee_t *pee, word q) // pee->coor = rand()%256; // modexcls(page, pee->coor, VGA); colorz(page, pee); - modexprint(page, page->sw/2, page->sh/2, 1, 0, 47, 0, "bakapi"); + modexprint(page, page->sw/2, page->sh/2, 1, 0, 47, 0, 1, "bakapi"); break; case 7: if(pee->coor <= pee->hgq) @@ -294,7 +294,7 @@ void ding(page_t *page, bakapee_t *pee, word q) break; case 8: colorz(page, pee); - modexprint(page, page->sw/2, page->sh/2, 1, 0, 47, 0, "bakapi"); + modexprint(page, page->sw/2, page->sh/2, 1, 0, 47, 0, 1, "bakapi"); break; case 9: if(pee->coor <= pee->hgq) diff --git a/src/lib/hb/democ3.c b/src/lib/hb/democ3.c new file mode 100755 index 00000000..43f581c7 --- /dev/null +++ b/src/lib/hb/democ3.c @@ -0,0 +1,82 @@ +/* +===================== += += DemoLoop += +===================== +*/ + +static char *ParmStrings[] = {"easy","normal","hard",""}; + +void DemoLoop (void) +{ + int i,level; + +// +// check for launch from ted +// + if (tedlevel) + { + NewGame(); + gamestate.mapon = tedlevelnum; + restartgame = gd_Normal; + for (i = 1;i < _argc;i++) + { + if ( (level = US_CheckParm(_argv[i],ParmStrings)) == -1) + continue; + + restartgame = gd_Easy+level; + break; + } + GameLoop(); + TEDDeath(); + } + + +// +// main game cycle +// + displayofs = bufferofs = 0; + VW_Bar (0,0,320,200,0); + + while (1) + { + CA_CacheGrChunk (TITLEPIC); + bufferofs = SCREEN2START; + displayofs = SCREEN1START; + VWB_DrawPic (0,0,TITLEPIC); + MM_SetPurge (&grsegs[TITLEPIC],3); + UNMARKGRCHUNK(TITLEPIC); + FizzleFade (bufferofs,displayofs,320,200,true); + + if (!IN_UserInput(TickBase*3,false)) + { + CA_CacheGrChunk (CREDITSPIC); + VWB_DrawPic (0,0,CREDITSPIC); + MM_SetPurge (&grsegs[CREDITSPIC],3); + UNMARKGRCHUNK(CREDITSPIC); + FizzleFade (bufferofs,displayofs,320,200,true); + + } + + if (!IN_UserInput(TickBase*3,false)) + { +highscores: + DrawHighScores (); + FizzleFade (bufferofs,displayofs,320,200,true); + IN_UserInput(TickBase*3,false); + } + + if (IN_IsUserInput()) + { + US_ControlPanel (); + + if (restartgame || loadedgame) + { + GameLoop (); + goto highscores; + } + } + + } +} diff --git a/src/lib/hb/democ6.c b/src/lib/hb/democ6.c new file mode 100755 index 00000000..dcad4bed --- /dev/null +++ b/src/lib/hb/democ6.c @@ -0,0 +1,59 @@ +/* +===================== += += DemoLoop += +===================== +*/ + +static char *ParmStrings[] = {"easy","normal","hard",""}; + +void DemoLoop (void) +{ + +///////////////////////////////////////////////////////////////////////////// +// main game cycle +///////////////////////////////////////////////////////////////////////////// + + displayofs = bufferofs = 0; + VW_Bar (0,0,320,200,0); + VW_SetScreen(0,0); + +// +// Read in all the graphic images needed for the title sequence +// + VW_WaitVBL(1); + IN_ReadControl(0,&control); + +// set EASYMODE +// + if (stricmp(_argv[2], "1") == 0) + EASYMODEON = true; + else + EASYMODEON = false; + +// restore game +// + if (stricmp(_argv[3], "1") == 0) + { + VW_FadeOut(); + bufferofs = displayofs = 0; + VW_Bar(0,0,320,200,0); + if (GE_LoadGame()) + { + loadedgame = true; + playstate = ex_loadedgame; + Keyboard[sc_Enter] = true; + VW_Bar(0,0,320,200,0); + ColoredPalette(); + } + VW_Bar(0,0,320,200,0); + VW_FadeIn(); + } + + // Play a game + // + restartgame = gd_Normal; + NewGame(); + GameLoop(); +} diff --git a/src/lib/scroll16.c b/src/lib/scroll16.c index 0cbb7397..6f90915b 100755 --- a/src/lib/scroll16.c +++ b/src/lib/scroll16.c @@ -589,7 +589,7 @@ mapDrawTile(tiles_t *t, word i, page_t *page, word x, word y) //modexDrawBmpRegion (page, x, y, rx, ry, t->tileWidth, t->tileHeight, (t->data)); #endif #ifdef __DEBUG_MAP__ - if(dbg_maptext){ sprintf(global_temp_status_text2, "%u", i); modexprint(page, x, y, 1, 0, 1, 2, global_temp_status_text2); } + if(dbg_maptext){ sprintf(global_temp_status_text2, "%u", i); modexprint(page, x, y, 1, 0, 1, 2, 1, global_temp_status_text2); } #endif break; } @@ -604,7 +604,7 @@ if(dbg_pagedelayrendermap) if(!y) y+=TILEWH; else y-=TILEWH; poopoffset%=player[0].enti.speed; //printf("y: %d\n", poopoffset); #ifdef __DEBUG_RF__ -if(dbg_pagedelayrendermap){ sprintf(global_temp_status_text, "%-3u", mv->dx); modexprint(mv[0].page, player[0].enti.x, player[0].enti.y-28-(poopoffset*8) , 1, 0, PALMAPDRAWW, 1, global_temp_status_text); } +if(dbg_pagedelayrendermap){ sprintf(global_temp_status_text, "%-3u", mv->dx); modexprint(mv[0].page, player[0].enti.x, player[0].enti.y-28-(poopoffset*8) , 1, 0, PALMAPDRAWW, 1, 1, global_temp_status_text); } #endif /* the position within the map array */ i=ty * mv->map->width + tx; @@ -613,7 +613,7 @@ if(dbg_pagedelayrendermap){ sprintf(global_temp_status_text, "%-3u", mv->dx); mo mapDrawTile(mv->map->tiles, mv->map->layerdata[0].data[i], mv->page, mv->dx, y); for(z=1;z<=2;z++) if(mv->map->layerdata[z].data[i]){ - sprintf(global_temp_status_text2, "%u", mv->map->layerdata[z].data[i]); modexprint(mv->page, mv->dx, y, 1, 0, PALMAPDRAWW, z+2, global_temp_status_text2); + sprintf(global_temp_status_text2, "%u", mv->map->layerdata[z].data[i]); modexprint(mv->page, mv->dx, y, 1, 0, PALMAPDRAWW, z+2, 1, global_temp_status_text2); //mapDrawTile(mv->map->tiles, mv->map->layerdata[z].data[i], mv->page, mv->dx, y); } } @@ -644,7 +644,7 @@ if(dbg_pagedelayrendermap){ sprintf(global_temp_status_text, "%-3u", mv->dy); mo mapDrawTile(mv->map->tiles, mv->map->layerdata[0].data[i], mv->page, x, mv->dy); for(z=1;z<=2;z++) if(mv->map->layerdata[z].data[i]){ - sprintf(global_temp_status_text2, "%u", mv->map->layerdata[z].data[i]); modexprint(mv->page, x, mv->dy, 1, 0, PALMAPDRAWW, z+2, global_temp_status_text2); + sprintf(global_temp_status_text2, "%u", mv->map->layerdata[z].data[i]); modexprint(mv->page, x, mv->dy, 1, 0, PALMAPDRAWW, z+2, 1, global_temp_status_text2); //mapDrawTile(mv->map->tiles, mv->map->layerdata[z].data[i], mv->page, x, mv->dy); } } @@ -666,7 +666,7 @@ void mapDrawWRow(map_view_t *mv, int tx, int ty, word y) mapDrawTile(mv->map->tiles, mv->map->layerdata[0].data[i], mv->page, mv->dx, y); for(z=1;z<=2;z++) if(mv->map->layerdata[z].data[i]){ - sprintf(global_temp_status_text2, "%u", mv->map->layerdata[z].data[i]); modexprint(mv->page, mv->dx, y, 1, 0, PALMAPDRAWW, z+2, global_temp_status_text2); + sprintf(global_temp_status_text2, "%u", mv->map->layerdata[z].data[i]); modexprint(mv->page, mv->dx, y, 1, 0, PALMAPDRAWW, z+2, 1, global_temp_status_text2); //mapDrawTile(mv->map->tiles, mv->map->layerdata[z].data[i], mv->page, mv->dx, y); } } @@ -688,7 +688,7 @@ void mapDrawWCol(map_view_t *mv, int tx, int ty, word x) mapDrawTile(mv->map->tiles, mv->map->layerdata[0].data[i], mv->page, x, mv->dy); for(z=1;z<=2;z++) if(mv->map->layerdata[z].data[i]){ - sprintf(global_temp_status_text2, "%u", mv->map->layerdata[z].data[i]); modexprint(mv->page, x, mv->dy, 1, 0, PALMAPDRAWW, z+2, global_temp_status_text2); + sprintf(global_temp_status_text2, "%u", mv->map->layerdata[z].data[i]); modexprint(mv->page, x, mv->dy, 1, 0, PALMAPDRAWW, z+2, 1, global_temp_status_text2); //mapDrawTile(mv->map->tiles, mv->map->layerdata[z].data[i], mv->page, x, mv->dy); } } @@ -722,7 +722,7 @@ void shinku(global_game_variables_t *gv) gv->video.page[/*!*/(gv->video.p)].dx, gv->video.page[/*!*/(gv->video.p)].dy, 96, 16); - modexprint(&(gv->video.page[/*!*/(gv->video.p)]), x, y, type, 1, col, bgcol, global_temp_status_text); + modexprint(&(gv->video.page[/*!*/(gv->video.p)]), x, y, type, 1, col, 1, bgcol, global_temp_status_text); //0000printf("dx=%u dy=%u\n", gv->video.page[/*!*/(gv->video.p)].dx, gv->video.page[/*!*/(gv->video.p)].dy); } gv->kurokku.tiku=0; -- 2.39.5