From 7d9376a64b87f98eaa274b985aab8b45e4f3148f Mon Sep 17 00:00:00 2001 From: David Anderson Date: Fri, 8 Feb 2013 00:38:35 -0800 Subject: [PATCH] Remove SCASM, which was pointless and buggy bloat. --- compiler/scasm/Makefile | 14 - compiler/scasm/Makefile.pl | 176 -- compiler/scasm/adminslots.asm | 240 --- compiler/scasm/amx.h | 432 ---- compiler/scasm/amx_compiler.cpp | 2392 ---------------------- compiler/scasm/amx_compiler.h | 110 - compiler/scasm/amx_data.cpp | 196 -- compiler/scasm/amx_data.h | 63 - compiler/scasm/amx_define.cpp | 90 - compiler/scasm/amx_define.h | 49 - compiler/scasm/amx_error.cpp | 198 -- compiler/scasm/amx_error.h | 109 - compiler/scasm/amx_label.cpp | 182 -- compiler/scasm/amx_label.h | 57 - compiler/scasm/amx_macro.cpp | 173 -- compiler/scasm/amx_macro.h | 58 - compiler/scasm/amx_nametable.h | 41 - compiler/scasm/amx_natives.cpp | 94 - compiler/scasm/amx_natives.h | 49 - compiler/scasm/amx_parser.cpp | 209 -- compiler/scasm/amx_parser.h | 36 - compiler/scasm/amx_proc.cpp | 159 -- compiler/scasm/amx_proc.h | 56 - compiler/scasm/amx_symbol.cpp | 140 -- compiler/scasm/amx_symbol.h | 65 - compiler/scasm/amxasm.cpp | 143 -- compiler/scasm/amxasm.h | 225 -- compiler/scasm/assembler.sln | 20 - compiler/scasm/assembler.vcxproj | 123 -- compiler/scasm/assembler.vcxproj.filters | 95 - compiler/scasm/cexpr.cpp | 545 ----- compiler/scasm/cexpr.h | 96 - compiler/scasm/plugin.asm | 80 - compiler/scasm/sasm | Bin 293840 -> 0 bytes compiler/scasm/sasm.exe | Bin 188416 -> 0 bytes installer/builder/CoreMod.cs | 3 - plugins/sasm | Bin 293840 -> 0 bytes plugins/sasm.exe | Bin 188416 -> 0 bytes 38 files changed, 6718 deletions(-) delete mode 100755 compiler/scasm/Makefile delete mode 100755 compiler/scasm/Makefile.pl delete mode 100755 compiler/scasm/adminslots.asm delete mode 100755 compiler/scasm/amx.h delete mode 100755 compiler/scasm/amx_compiler.cpp delete mode 100755 compiler/scasm/amx_compiler.h delete mode 100755 compiler/scasm/amx_data.cpp delete mode 100755 compiler/scasm/amx_data.h delete mode 100755 compiler/scasm/amx_define.cpp delete mode 100755 compiler/scasm/amx_define.h delete mode 100755 compiler/scasm/amx_error.cpp delete mode 100755 compiler/scasm/amx_error.h delete mode 100755 compiler/scasm/amx_label.cpp delete mode 100755 compiler/scasm/amx_label.h delete mode 100755 compiler/scasm/amx_macro.cpp delete mode 100755 compiler/scasm/amx_macro.h delete mode 100755 compiler/scasm/amx_nametable.h delete mode 100755 compiler/scasm/amx_natives.cpp delete mode 100755 compiler/scasm/amx_natives.h delete mode 100755 compiler/scasm/amx_parser.cpp delete mode 100755 compiler/scasm/amx_parser.h delete mode 100755 compiler/scasm/amx_proc.cpp delete mode 100755 compiler/scasm/amx_proc.h delete mode 100755 compiler/scasm/amx_symbol.cpp delete mode 100755 compiler/scasm/amx_symbol.h delete mode 100755 compiler/scasm/amxasm.cpp delete mode 100755 compiler/scasm/amxasm.h delete mode 100644 compiler/scasm/assembler.sln delete mode 100644 compiler/scasm/assembler.vcxproj delete mode 100644 compiler/scasm/assembler.vcxproj.filters delete mode 100755 compiler/scasm/cexpr.cpp delete mode 100755 compiler/scasm/cexpr.h delete mode 100755 compiler/scasm/plugin.asm delete mode 100755 compiler/scasm/sasm delete mode 100755 compiler/scasm/sasm.exe delete mode 100755 plugins/sasm delete mode 100755 plugins/sasm.exe diff --git a/compiler/scasm/Makefile b/compiler/scasm/Makefile deleted file mode 100755 index 919d6b70..00000000 --- a/compiler/scasm/Makefile +++ /dev/null @@ -1,14 +0,0 @@ -CPPFILES = amxasm.cpp cexpr.cpp amx_symbol.cpp amx_proc.cpp \ -amx_parser.cpp amx_natives.cpp amx_macro.cpp amx_label.cpp \ -amx_error.cpp amx_define.cpp amx_data.cpp amx_compiler.cpp - -FLAGS = -march=i386 -m32 - -all: sasm - -sasm: - g++ $(FLAGS) -DHAVE_STDINT_H -Wall $(CPPFILES) -o sasm -s - -clean: - -rm *.o - -rm sasm diff --git a/compiler/scasm/Makefile.pl b/compiler/scasm/Makefile.pl deleted file mode 100755 index d732ecb4..00000000 --- a/compiler/scasm/Makefile.pl +++ /dev/null @@ -1,176 +0,0 @@ -#!/usr/bin/perl -#(C)2004 AMX Mod X Development Team -# by David "BAILOPAN" Anderson - -# output will occur in bin.x.proc -# where x is debug or opt and proc is ix86 or amd64 -# You must use this script from the project src dir - -#options = -# debug - enable gdb debugging -# amd64 - compile for AMD64 -# proc=ix86 - assumed not amd64 -# clean - clean the specifications above - -$PROJECT = "sasm"; -$gccf = "gcc"; - -@CPP_SOURCE_FILES = ("amx_compiler.cpp", "amx_data.cpp", "amx_define.cpp", "amx_error.cpp", "amx_label.cpp", "amx_macro.cpp", "amx_natives.cpp", "amx_proc.cpp", "amx_parser.cpp", "amx_symbol.cpp", "amxasm.cpp", "cexpr.cpp"); - -@C_SOURCE_FILES = (); -my %OPTIONS, %OPT; - -$OPT{"debug"} = "-g -ggdb"; -$OPT{"opt"} = "-O2 -ffast-math -funroll-loops -fomit-frame-pointer -s -DHAVE_STDINT_H -DNDEBUG -Wall -Wno-unknown-pragmas -DOPT_TYPE=\"optimized\""; - -$OPTIONS{"include"} = ""; - -while ($cmd = shift) -{ - if ($cmd =~ /amd64/) { - $OPTIONS{"amd64"} = 1; - } elsif ($cmd =~ /debug/) { - $OPTIONS{"debug"} = 1; - } elsif ($cmd =~ /proc=i(\d)86/) { - $proc = $1; - if ($OPTIONS{"amd64"}) - { - die "You cannot compile for i".$proc."86 and AMD64.\n"; - } else { - $OPTIONS{"proc"} = "i".$proc."86"; - } - } elsif ($cmd =~ /clean/) { - $OPTIONS{"clean"} = 1; - } -} - -$gcc = `$gccf --version`; -if ($gcc =~ /2\.9/) -{ - $OPT{"opt"} .= " -malign-loops=2 -malign-jumps=2 -malign-functions=2"; -} else { - $OPT{"opt"} .= " -falign-loops=2 -falign-jumps=2 -falign-functions=2"; -} - -if ($OPTIONS{"debug"}) -{ - $cflags = $OPT{"debug"}; -} else { - if (!$OPTIONS{"amd64"}) - { - $proc = $OPTIONS{"proc"}; - if (!$proc) - { - $proc = 3; - } - $cflags = "-march=i".$proc."86 -m32 ".$OPT{"opt"}; - } else { - $cflags = $OPT{"opt"}; - } -} - -if ($OPTIONS{"amd64"}) -{ - $cflags .= " -m64 -DHAVE_I64 -DSMALL_CELL_SIZE=64 $cflags"; -} - -if ($OPTIONS{"debug"}) -{ - $outdir = "bin.debug"; -} else { - $outdir = "bin.opt"; -} - -if ($OPTIONS{"amd64"}) -{ - $outdir .= ".amd64"; - $bin = $PROJECT."_amd64.so"; -} else { - $proc = $OPTIONS{"proc"}; - if ($proc) - { - $outdir .= ".i".$proc."86"; - $bin = $PROJECT."_i".$proc."86.so"; - } else { - $outdir .= ".i386"; - $bin = $PROJECT."_i386.so"; - } -} - -unlink("$outdir/$bin"); -if ($OPTIONS{"clean"}) -{ - `rm $outdir/*.o`; - die("Project cleaned.\n"); -} - -#create the dirs -#build link list -my @LINK; -for ($i=0; $i<=$#CPP_SOURCE_FILES; $i++) -{ - $file = $CPP_SOURCE_FILES[$i]; - $file =~ s/\.cpp/\.o/; - push(@LINK, $outdir."/".$file); -} -for ($i=0; $i<=$#C_SOURCE_FILES; $i++) -{ - $file = $C_SOURCE_FILES[$i]; - $file =~ s/\.c/\.o/; - push(@LINK, $outdir."/".$file); -} - -if (!(-d $outdir)) -{ - mkdir($outdir); -} - -$inc = $OPTIONS{"include"}; - -for ($i=0; $i<=$#CPP_SOURCE_FILES; $i++) -{ - $file = $CPP_SOURCE_FILES[$i]; - $ofile = $file; - $ofile =~ s/\.cpp/\.o/; - $ofile = "$outdir/$ofile"; - $gcc = "$gccf $cflags -Dstrcmpi=strcasecmp $inc -c $file -o $ofile"; - if (-e $ofile) - { - $file_time = (stat($file))[9]; - $ofile_time = (stat($ofile))[9]; - if ($file_time > $ofile_time) - { - print "$gcc\n"; - `$gcc`; - } - } else { - print "$gcc\n"; - `$gcc`; - } -} - -for ($i=0; $i<=$#CPP_SOURCE_FILES; $i++) -{ - $file = $C_SOURCE_FILES[$i]; - $ofile = $file; - $ofile =~ s/\.c/\.o/; - $ofile = "$outdir/$ofile"; - $gcc = "cc $cflags -Dstrcmpi=strcasecmp $inc -c $file -o $ofile"; - if (-e $ofile) - { - $file_time = (stat($file))[9]; - $ofile_time = (stat($file))[9]; - if ($file_time > $ofile_time) - { - print "$gcc\n"; - `$gcc`; - } - } else { - print "$gcc\n"; - `$gcc`; - } -} - -$gcc = "$gccf $cflags -shared -lstdc++ -ldl -lm @LINK -o $outdir/$bin"; -print "$gcc\n"; -`$gcc`; diff --git a/compiler/scasm/adminslots.asm b/compiler/scasm/adminslots.asm deleted file mode 100755 index 2966301c..00000000 --- a/compiler/scasm/adminslots.asm +++ /dev/null @@ -1,240 +0,0 @@ -;(C)2004 David "BAILOPAN" Anderson -; Assembler version of Anti-Flood -#define VERSION "0.20-A" -#define PLUGIN_HANDLED -#macro ARGN(argc) (12+(argc*CELL)) - -.CODE - halt 0 ;Return point for end - -.NATIVE - register_plugin - register_cvar - random_num - register_clcmd - server_cmd - get_maxplayers - get_playersnum - get_cvar_num - set_cvar_num - get_user_flags - client_cmd - get_user_userid - -.DATA - Plugin db "Slots Reservation" - Version db VERSION - Author db "AMXX Dev Team" - Cvar db "amx_reservation" - CvarVal db "1" - Callback db "ackSignal" - loopBack db "amxres0000" - -.CODE -PROC plugin_init - push.c Author ;push author - push.c Version ;push version - push.c Plugin ;push name - push.c CELL*3 ;push 3 args - sysreq.c register_plugin ;call register_plugin - stack CELL*4 ;clean-up - - push.c CvarVal ;push Cvar initial value - push.c Cvar ;push Cvar - push.c CELL*2 ;push 2 args - sysreq.c register_cvar ;call register_cvar - stack CELL*3 ;clean-up - - push.c 90 ;push max range - push.c 65 ;push min range - push.c CELL*2 ;push 2 args - sysreq.c random_num ;call random_num - stack CELL*3 ;clean-up - stor.pri loopBack+CELL*6 ;store pri in loopBack[6] - - push.c 90 ;push max range - push.c 65 ;push min range - push.c CELL*2 ;push 2 args - sysreq.c random_num ;call random_num - stack CELL*3 ;clean-up - stor.pri loopBack+CELL*7 ;store pri in loopBack[7] - - push.c 90 ;push max range - push.c 65 ;push min range - push.c CELL*2 ;push 2 args - sysreq.c random_num ;call random_num - stack CELL*3 ;clean-up - stor.pri loopBack+CELL*8 ;store pri in loopBack[8] - - push.c 90 ;push max range - push.c 65 ;push min range - push.c CELL*2 ;push 2 args - sysreq.c random_num ;call random_num - stack CELL*3 ;clean-up - stor.pri loopBack+CELL*9 ;store pri in loopBack[9] - - push.c Callback ;push callback - push.c loopBack ;push loopback - push.c CELL*2 - sysreq.c register_clcmd ;call register_clcmd - stack CELL*3 ;clean-up - - zero.pri ;return 0 - retn ;final cleanup -ENDP - -.DATA - KickMsg db "kick #%d \"Dropped due to slot reservation\"" - -.CODE -PROC ackSignal - push.s ARGN(0) ;push the first argument - push.c CELL*1 ;push one argument - sysreq.c get_user_userid ;call get_user_userid - stack CELL*2 ;clean-up - - push.pri ;push the result of the last call - push.c KickMsg ;push the kick message - push.c CELL*2 ;push 2 args - sysreq.c server_cmd ;call server_cmd - stack CELL*3 ;clean-up - - zero.pri ;return 0 - retn ;final cleanup -ENDP - -.DATA - VisCvar db "sv_visiblemaxplayers" - -.CODE -;players, maxplayrs, limit -PROC setVisibleSlots - stack -CELL ;new variable - - load.s.pri ARGN(0) ;get first parameter into [PRI] - add.c 1 ;[PRI] += 1 - stor.s.pri -CELL ;[var] = [PRI] - - load.s.pri ARGN(0) ;Reset [PRI] to first param - load.s.alt ARGN(1) ;get second parameter into [ALT] - jeq setMax ;does players == maxplayers? - jump setLimitCheck ; -- no, jump to next check -setMax: ; -- yes - stor.s.alt -CELL ; store the maxplayers into [var] - jump endSetIf ; we're done, jump to the end -setLimitCheck: - load.s.alt ARGN(2) ;load the third param into [ALT] - jless setLimit ;is playres < limit? - jump endSetIf ; -- no, jump to end -setLimit: ; -- yes - stor.s.alt -CELL ;store limit into [var] -endSetIf: - - push.s -CELL ;push [var] onto stack - push.c VisCvar ;push cvar onto stack - push.c CELL*2 ;push 2 args - sysreq.c set_cvar_num ;call set_cvar_num - stack CELL*3 ;clean-up - - stack CELL ;restore stack - zero.pri ;return 0 - retn ;final cleanup -ENDP - -PROC client_authorized - push.c 0 ;push 0 args - sysreq.c get_maxplayers ;call get_maxplayers - stack CELL ;clean-up - push.pri ;store the result - maxplayers - - push.c 1 ;push 1 - push.c CELL ;push 1 args - sysreq.c get_playersnum ;call get_playersnum - stack CELL*2 ;clean-up - push.pri ;store the result - players - - push.c Cvar ;push cvar - push.c CELL ;push 1 arg - sysreq.c get_cvar_num ;call get_cvar_num - stack CELL*2 ;clean-up - xchg ;last result is now in alt - - load.s.pri -CELL ;load the first result into pri - sub ;pri = maxplayers - cvar - push.pri ;store the result - limit - - push.s ARGN(0) ;push the id - push.c CELL ;push 1 arg - sysreq.c get_user_flags ;call get_user_flags - stack CELL*2 ;clean-up - const.alt 2 ;2 = ADMIN_RESERVATION - and ;flags & 2 - - jeq setVis ;if (flags & 2) == 2, short circuit - ;otherwise check this condition - load.s.pri -CELL*2 ;load players into pri - load.s.alt -CELL*3 ;load limit into alt - jleq setVis ;if players <= limit, jump - jump setVisSkip ;otherwise skip -setVis: - push.s -CELL*3 ;push limit - push.s -CELL ;push maxplayers - push.s -CELL*2 ;push players - push.c CELL*3 ;push 3 args - call setVisibleSlots ;call setVisibleSlots - stack CELL*3 ;restore stack - zero.pri ;return 0 - retn ;finalize -setVisSkip: - - push.c loopBack ;push loopback cmd - push.s ARGN(0) ;push the id passed - push.c CELL*2 ;push 2 args - sysreq.c client_cmd ;call client_cmd - stack CELL*3 ;clean-up - - stack CELL*3 ;restore stack - const.pri PLUGIN_HANDLED ;return - retn ;finalize -ENDP - -PROC client_disconnect - push.c 0 ;push 0 args - sysreq.c get_maxplayers ;call get_maxplayers - stack CELL ;clean-up - push.pri ;store the result - maxplayers - - push.c 1 ;push 1 - push.c CELL ;push 1 args - sysreq.c get_playersnum ;call get_playersnum - stack CELL*2 ;clean-up - push.pri ;store the result - players - dec.s -CELL*2 ;players-- - - push.c Cvar ;push cvar - push.c CELL ;push 1 arg - sysreq.c get_cvar_num ;call get_cvar_num - stack CELL*2 ;clean-up - xchg ;last result is now in alt - load.s.pri -CELL ;[pri] = maxplayers - sub ;[pri] = maxplayers - cvar - push.pri ;store the result - limit - - push.s -CELL*3 ;push limit - push.s -CELL ;push maxplayers - push.s -CELL*2 ;push playersnum-1 - push.c CELL*3 ;push 3 args - call setVisibleSlots ;call - - stack 3*CELL ;clean up 3 vars - - zero.pri ;return 0 - retn ;finalize -ENDP - - -.PUBLIC - ackSignal - plugin_init - client_authorized - client_disconnect \ No newline at end of file diff --git a/compiler/scasm/amx.h b/compiler/scasm/amx.h deleted file mode 100755 index f237b537..00000000 --- a/compiler/scasm/amx.h +++ /dev/null @@ -1,432 +0,0 @@ -/* Pawn Abstract Machine (for the Pawn language) - * - * Copyright (c) ITB CompuPhase, 1997-2005 - * - * This software is provided "as-is", without any express or implied warranty. - * In no event will the authors be held liable for any damages arising from - * the use of this software. - * - * Permission is granted to anyone to use this software for any purpose, - * including commercial applications, and to alter it and redistribute it - * freely, subject to the following restrictions: - * - * 1. The origin of this software must not be misrepresented; you must not - * claim that you wrote the original software. If you use this software in - * a product, an acknowledgment in the product documentation would be - * appreciated but is not required. - * 2. Altered source versions must be plainly marked as such, and must not be - * misrepresented as being the original software. - * 3. This notice may not be removed or altered from any source distribution. - * - * Version: $Id: amx.h 3736 2008-08-16 20:13:12Z damagedsoul $ - */ - -#if defined FREEBSD && !defined __FreeBSD__ - #define __FreeBSD__ -#endif -#if defined LINUX || defined __FreeBSD__ || defined __OpenBSD__ - #include -#endif - -#ifndef AMX_H_INCLUDED -#define AMX_H_INCLUDED - -#if defined HAVE_STDINT_H - #include -#else - #if defined __LCC__ || defined __DMC__ || defined LINUX - #if defined HAVE_INTTYPES_H - #include - #else - #include - #endif - #elif !defined __STDC_VERSION__ || __STDC_VERSION__ < 199901L - /* The ISO C99 defines the int16_t and int_32t types. If the compiler got - * here, these types are probably undefined. - */ - #if defined __MACH__ - #include - typedef unsigned short int uint16_t; - typedef unsigned long int uint32_t; - #elif defined __FreeBSD__ - #include - #else - typedef short int int16_t; - typedef unsigned short int uint16_t; - #if defined SN_TARGET_PS2 - typedef int int32_t; - typedef unsigned int uint32_t; - #else - typedef long int int32_t; - typedef unsigned long int uint32_t; - #endif - #if defined __WIN32__ || defined _WIN32 || defined WIN32 - typedef __int64 int64_t; - typedef unsigned __int64 uint64_t; - #define HAVE_I64 - #elif defined __GNUC__ - typedef long long int64_t; - typedef unsigned long long uint64_t; - #define HAVE_I64 - #endif - #endif - #endif - #define HAVE_STDINT_H -#endif -#if defined _LP64 || defined WIN64 || defined _WIN64 - #if !defined __64BIT__ - #define __64BIT__ - #endif -#endif - -#if HAVE_ALLOCA_H - #include -#endif -#if defined __WIN32__ || defined _WIN32 || defined WIN32 /* || defined __MSDOS__ */ - #if !defined alloca - #define alloca(n) _alloca(n) - #endif -#endif - -#if !defined arraysize - #define arraysize(array) (sizeof(array) / sizeof((array)[0])) -#endif - -#ifdef __cplusplus -extern "C" { -#endif - -#if defined PAWN_DLL - #if !defined AMX_NATIVE_CALL - #define AMX_NATIVE_CALL __stdcall - #endif - #if !defined AMXAPI - #define AMXAPI __stdcall - #endif -#endif - -/* calling convention for native functions */ -#if !defined AMX_NATIVE_CALL - #define AMX_NATIVE_CALL -#endif -/* calling convention for all interface functions and callback functions */ -#if !defined AMXAPI - #if defined STDECL - #define AMXAPI __stdcall - #elif defined CDECL - #define AMXAPI __cdecl - #elif defined GCC_HASCLASSVISIBILITY - #define AMXAPI __attribute__ ((visibility("default"))) - #else - #define AMXAPI - #endif -#endif -#if !defined AMXEXPORT - #define AMXEXPORT -#endif - -/* File format version Required AMX version - * 0 (original version) 0 - * 1 (opcodes JUMP.pri, SWITCH and CASETBL) 1 - * 2 (compressed files) 2 - * 3 (public variables) 2 - * 4 (opcodes SWAP.pri/alt and PUSHADDR) 4 - * 5 (tagnames table) 4 - * 6 (reformatted header) 6 - * 7 (name table, opcodes SYMTAG & SYSREQ.D) 7 - * 8 (opcode STMT, renewed debug interface) 8 - */ -#define CUR_FILE_VERSION 8 /* current file version; also the current AMX version */ -#define MIN_FILE_VERSION 6 /* lowest supported file format version for the current AMX version */ -#define MIN_AMX_VERSION 8 /* minimum AMX version needed to support the current file format */ - -#if !defined PAWN_CELL_SIZE - #define PAWN_CELL_SIZE 32 /* by default, use 32-bit cells */ -#endif -#if PAWN_CELL_SIZE==16 - typedef uint16_t ucell; - typedef int16_t cell; -#elif PAWN_CELL_SIZE==32 - typedef uint32_t ucell; - typedef int32_t cell; -#elif PAWN_CELL_SIZE==64 - typedef uint64_t ucell; - typedef int64_t cell; -#else - #error Unsupported cell size (PAWN_CELL_SIZE) -#endif - -#define UNPACKEDMAX ((1L << (sizeof(cell)-1)*8) - 1) -#define UNLIMITED (~1u >> 1) - -struct tagAMX; -typedef cell (AMX_NATIVE_CALL *AMX_NATIVE)(struct tagAMX *amx, cell *params); -typedef int (AMXAPI *AMX_CALLBACK)(struct tagAMX *amx, cell index, - cell *result, cell *params); -typedef int (AMXAPI *AMX_DEBUG)(struct tagAMX *amx); -#if !defined _FAR - #define _FAR -#endif - -#if defined _MSC_VER - #pragma warning(disable:4103) /* disable warning message 4103 that complains - * about pragma pack in a header file */ - #pragma warning(disable:4100) /* "'%$S' : unreferenced formal parameter" */ -#endif - -/* Some compilers do not support the #pragma align, which should be fine. Some - * compilers give a warning on unknown #pragmas, which is not so fine... - */ -#if (defined SN_TARGET_PS2 || defined __GNUC__) && !defined AMX_NO_ALIGN - #define AMX_NO_ALIGN -#endif - -#if defined __GNUC__ - #define PACKED __attribute__((packed)) -#else - #define PACKED -#endif - -#if !defined AMX_NO_ALIGN - #if defined LINUX || defined __FreeBSD__ - #pragma pack(1) /* structures must be packed (byte-aligned) */ - #elif defined MACOS && defined __MWERKS__ - #pragma options align=mac68k - #else - #pragma pack(push) - #pragma pack(1) /* structures must be packed (byte-aligned) */ - #if defined __TURBOC__ - #pragma option -a- /* "pack" pragma for older Borland compilers */ - #endif - #endif -#endif - -typedef struct tagAMX_NATIVE_INFO { - const char _FAR *name PACKED; - AMX_NATIVE func PACKED; -} PACKED AMX_NATIVE_INFO; - -#define AMX_USERNUM 4 -#define sEXPMAX 19 /* maximum name length for file version <= 6 */ -#define sNAMEMAX 31 /* maximum name length of symbol name */ - -typedef struct tagAMX_FUNCSTUB { - ucell address PACKED; - char name[sEXPMAX+1]; -} PACKED AMX_FUNCSTUB; - -typedef struct tagFUNCSTUBNT { - ucell address PACKED; - ucell nameofs PACKED; //we need this for amxx to be backwards comaptible -} PACKED AMX_FUNCSTUBNT; - -/* The AMX structure is the internal structure for many functions. Not all - * fields are valid at all times; many fields are cached in local variables. - */ -typedef struct tagAMX { - unsigned char _FAR *base PACKED; /* points to the AMX header plus the code, optionally also the data */ - unsigned char _FAR *data PACKED; /* points to separate data+stack+heap, may be NULL */ - AMX_CALLBACK callback PACKED; - AMX_DEBUG debug PACKED; /* debug callback */ - /* for external functions a few registers must be accessible from the outside */ - cell cip PACKED; /* instruction pointer: relative to base + amxhdr->cod */ - cell frm PACKED; /* stack frame base: relative to base + amxhdr->dat */ - cell hea PACKED; /* top of the heap: relative to base + amxhdr->dat */ - cell hlw PACKED; /* bottom of the heap: relative to base + amxhdr->dat */ - cell stk PACKED; /* stack pointer: relative to base + amxhdr->dat */ - cell stp PACKED; /* top of the stack: relative to base + amxhdr->dat */ - int flags PACKED; /* current status, see amx_Flags() */ - /* user data */ - long usertags[AMX_USERNUM] PACKED; - void _FAR *userdata[AMX_USERNUM] PACKED; - /* native functions can raise an error */ - int error PACKED; - /* passing parameters requires a "count" field */ - int paramcount; - /* the sleep opcode needs to store the full AMX status */ - cell pri PACKED; - cell alt PACKED; - cell reset_stk PACKED; - cell reset_hea PACKED; - cell sysreq_d PACKED; /* relocated address/value for the SYSREQ.D opcode */ - /* support variables for the JIT */ - int reloc_size PACKED; /* required temporary buffer for relocations */ - long code_size PACKED; /* estimated memory footprint of the native code */ -} PACKED AMX; - -/* The AMX_HEADER structure is both the memory format as the file format. The - * structure is used internaly. - */ -typedef struct tagAMX_HEADER { - int32_t size PACKED; /* size of the "file" */ - uint16_t magic PACKED; /* signature */ - char file_version; /* file format version */ - char amx_version; /* required version of the AMX */ - int16_t flags PACKED; - int16_t defsize PACKED; /* size of a definition record */ - int32_t cod PACKED; /* initial value of COD - code block */ - int32_t dat PACKED; /* initial value of DAT - data block */ - int32_t hea PACKED; /* initial value of HEA - start of the heap */ - int32_t stp PACKED; /* initial value of STP - stack top */ - int32_t cip PACKED; /* initial value of CIP - the instruction pointer */ - int32_t publics PACKED; /* offset to the "public functions" table */ - int32_t natives PACKED; /* offset to the "native functions" table */ - int32_t libraries PACKED; /* offset to the table of libraries */ - int32_t pubvars PACKED; /* the "public variables" table */ - int32_t tags PACKED; /* the "public tagnames" table */ - int32_t nametable PACKED; /* name table */ -} PACKED AMX_HEADER; - -//This is always the same for us -#define AMX_MAGIC 0xf1e0 - -enum { - AMX_ERR_NONE, - /* reserve the first 15 error codes for exit codes of the abstract machine */ - AMX_ERR_EXIT, /* forced exit */ - AMX_ERR_ASSERT, /* assertion failed */ - AMX_ERR_STACKERR, /* stack/heap collision */ - AMX_ERR_BOUNDS, /* index out of bounds */ - AMX_ERR_MEMACCESS, /* invalid memory access */ - AMX_ERR_INVINSTR, /* invalid instruction */ - AMX_ERR_STACKLOW, /* stack underflow */ - AMX_ERR_HEAPLOW, /* heap underflow */ - AMX_ERR_CALLBACK, /* no callback, or invalid callback */ - AMX_ERR_NATIVE, /* native function failed */ - AMX_ERR_DIVIDE, /* divide by zero */ - AMX_ERR_SLEEP, /* go into sleepmode - code can be restarted */ - AMX_ERR_INVSTATE, /* invalid state for this access */ - - AMX_ERR_MEMORY = 16, /* out of memory */ - AMX_ERR_FORMAT, /* invalid file format */ - AMX_ERR_VERSION, /* file is for a newer version of the AMX */ - AMX_ERR_NOTFOUND, /* function not found */ - AMX_ERR_INDEX, /* invalid index parameter (bad entry point) */ - AMX_ERR_DEBUG, /* debugger cannot run */ - AMX_ERR_INIT, /* AMX not initialized (or doubly initialized) */ - AMX_ERR_USERDATA, /* unable to set user data field (table full) */ - AMX_ERR_INIT_JIT, /* cannot initialize the JIT */ - AMX_ERR_PARAMS, /* parameter error */ - AMX_ERR_DOMAIN, /* domain error, expression result does not fit in range */ - AMX_ERR_GENERAL, /* general error (unknown or unspecific error) */ -}; - -/* AMX_FLAG_CHAR16 0x01 no longer used */ -#define AMX_FLAG_DEBUG 0x02 /* symbolic info. available */ -#define AMX_FLAG_COMPACT 0x04 /* compact encoding */ -#define AMX_FLAG_BYTEOPC 0x08 /* opcode is a byte (not a cell) */ -#define AMX_FLAG_NOCHECKS 0x10 /* no array bounds checking; no STMT opcode */ -#define AMX_FLAG_NTVREG 0x1000 /* all native functions are registered */ -#define AMX_FLAG_JITC 0x2000 /* abstract machine is JIT compiled */ -#define AMX_FLAG_BROWSE 0x4000 /* busy browsing */ -#define AMX_FLAG_RELOC 0x8000 /* jump/call addresses relocated */ - -#define AMX_EXEC_MAIN -1 /* start at program entry point */ -#define AMX_EXEC_CONT -2 /* continue from last address */ - -#define AMX_USERTAG(a,b,c,d) ((a) | ((b)<<8) | ((long)(c)<<16) | ((long)(d)<<24)) - -#if !defined AMX_COMPACTMARGIN - #define AMX_COMPACTMARGIN 64 -#endif - -/* for native functions that use floating point parameters, the following - * two macros are convenient for casting a "cell" into a "float" type _without_ - * changing the bit pattern - */ -#if PAWN_CELL_SIZE==32 - #define amx_ftoc(f) ( * ((cell*)&f) ) /* float to cell */ - #define amx_ctof(c) ( * ((float*)&c) ) /* cell to float */ -#elif PAWN_CELL_SIZE==64 - #define amx_ftoc(f) ( * ((cell*)&f) ) /* float to cell */ - #define amx_ctof(c) ( * ((double*)&c) ) /* cell to float */ -#else - #error Unsupported cell size -#endif - -#define amx_StrParam(amx,param,result) \ - do { \ - cell *amx_cstr_; int amx_length_; \ - amx_GetAddr((amx), (param), &amx_cstr_); \ - amx_StrLen(amx_cstr_, &amx_length_); \ - if (amx_length_ > 0 && \ - ((result) = (void*)alloca((amx_length_ + 1) * sizeof(*(result)))) != NULL) \ - amx_GetString((char*)(result), amx_cstr_, sizeof(*(result))>1, amx_length_); \ - else (result) = NULL; \ - } while (0) - -uint16_t * AMXAPI amx_Align16(uint16_t *v); -uint32_t * AMXAPI amx_Align32(uint32_t *v); -#if defined _I64_MAX || defined HAVE_I64 - uint64_t * AMXAPI amx_Align64(uint64_t *v); -#endif -int AMXAPI amx_Allot(AMX *amx, int cells, cell *amx_addr, cell **phys_addr); -int AMXAPI amx_Callback(AMX *amx, cell index, cell *result, cell *params); -int AMXAPI amx_Cleanup(AMX *amx); -int AMXAPI amx_Clone(AMX *amxClone, AMX *amxSource, void *data); -int AMXAPI amx_Exec(AMX *amx, cell *retval, int index); -int AMXAPI amx_FindNative(AMX *amx, const char *name, int *index); -int AMXAPI amx_FindPublic(AMX *amx, const char *funcname, int *index); -int AMXAPI amx_FindPubVar(AMX *amx, const char *varname, cell *amx_addr); -int AMXAPI amx_FindTagId(AMX *amx, cell tag_id, char *tagname); -int AMXAPI amx_Flags(AMX *amx,uint16_t *flags); -int AMXAPI amx_GetAddr(AMX *amx,cell amx_addr,cell **phys_addr); -int AMXAPI amx_GetNative(AMX *amx, int index, char *funcname); -int AMXAPI amx_GetPublic(AMX *amx, int index, char *funcname); -int AMXAPI amx_GetPubVar(AMX *amx, int index, char *varname, cell *amx_addr); -int AMXAPI amx_GetString(char *dest,const cell *source, int use_wchar, size_t size); -int AMXAPI amx_GetTag(AMX *amx, int index, char *tagname, cell *tag_id); -int AMXAPI amx_GetUserData(AMX *amx, long tag, void **ptr); -int AMXAPI amx_Init(AMX *amx, void *program); -int AMXAPI amx_InitJIT(AMX *amx, void *reloc_table, void *native_code); -int AMXAPI amx_MemInfo(AMX *amx, long *codesize, long *datasize, long *stackheap); -int AMXAPI amx_NameLength(AMX *amx, int *length); -AMX_NATIVE_INFO * AMXAPI amx_NativeInfo(const char *name, AMX_NATIVE func); -int AMXAPI amx_NumNatives(AMX *amx, int *number); -int AMXAPI amx_NumPublics(AMX *amx, int *number); -int AMXAPI amx_NumPubVars(AMX *amx, int *number); -int AMXAPI amx_NumTags(AMX *amx, int *number); -int AMXAPI amx_Push(AMX *amx, cell value); -int AMXAPI amx_PushArray(AMX *amx, cell *amx_addr, cell **phys_addr, const cell array[], int numcells); -int AMXAPI amx_PushString(AMX *amx, cell *amx_addr, cell **phys_addr, const char *string, int pack, int use_wchar); -int AMXAPI amx_RaiseError(AMX *amx, int error); -int AMXAPI amx_Register(AMX *amx, const AMX_NATIVE_INFO *nativelist, int number); -int AMXAPI amx_Release(AMX *amx, cell amx_addr); -int AMXAPI amx_SetCallback(AMX *amx, AMX_CALLBACK callback); -int AMXAPI amx_SetDebugHook(AMX *amx, AMX_DEBUG debug); -int AMXAPI amx_SetString(cell *dest, const char *source, int pack, int use_wchar, size_t size); -int AMXAPI amx_SetUserData(AMX *amx, long tag, void *ptr); -int AMXAPI amx_StrLen(const cell *cstring, int *length); -int AMXAPI amx_UTF8Check(const char *string, int *length); -int AMXAPI amx_UTF8Get(const char *string, const char **endptr, cell *value); -int AMXAPI amx_UTF8Len(const cell *cstr, int *length); -int AMXAPI amx_UTF8Put(char *string, char **endptr, int maxchars, cell value); - -#if PAWN_CELL_SIZE==16 - #define amx_AlignCell(v) amx_Align16(v) -#elif PAWN_CELL_SIZE==32 - #define amx_AlignCell(v) amx_Align32(v) -#elif PAWN_CELL_SIZE==64 && (defined _I64_MAX || defined HAVE_I64) - #define amx_AlignCell(v) amx_Align64(v) -#else - #error Unsupported cell size -#endif - -#define amx_RegisterFunc(amx, name, func) \ - amx_Register((amx), amx_NativeInfo((name),(func)), 1); - -#if !defined AMX_NO_ALIGN - #if defined LINUX || defined __FreeBSD__ - #pragma pack() /* reset default packing */ - #elif defined MACOS && defined __MWERKS__ - #pragma options align=reset - #else - #pragma pack(pop) /* reset previous packing */ - #endif -#endif - -#ifdef __cplusplus -} -#endif - -#endif /* AMX_H_INCLUDED */ diff --git a/compiler/scasm/amx_compiler.cpp b/compiler/scasm/amx_compiler.cpp deleted file mode 100755 index c537d3c0..00000000 --- a/compiler/scasm/amx_compiler.cpp +++ /dev/null @@ -1,2392 +0,0 @@ -/* AMX Assembler - * Copyright (C)2004 David "BAILOPAN" Anderson - * - * This software is provided 'as-is', without any express or implied - * warranty. In no event will the authors be held liable for any damages - * arising from the use of this software. - * - * Permission is granted to anyone to use this software for any purpose, - * including commercial applications, and to alter it and redistribute it - * freely, subject to the following restrictions: - * - * 1. The origin of this software must not be misrepresented; you must not - * claim that you wrote the original software. If you use this software - * in a product, an acknowledgment in the product documentation would be - * appreciated but is not required. - * 2. Altered source versions must be plainly marked as such, and must not be - * misrepresented as being the original software. - * 3. This notice may not be removed or altered from any source distribution. - * - * Version: $Id: amx_compiler.cpp 921 2004-08-21 06:20:27Z dvander $ - */ - -#include "amxasm.h" - -Compiler::Compiler() -{ - curLine = -1; - cellsize = 4; - Output = 0; - stacksize = cellsize * 4096; - debug = false; - pack = false; - dopt = false; - Init(); -} - -Compiler::~Compiler() -{ - Clear(); - delete CDefines; - delete CError; - delete CLabels; - delete CMacros; - delete CNatives; - delete CSymbols; - delete PROC; - delete DAT; -} - -Compiler::Compiler(std::string &f) -{ - curLine = -1; - cellsize = 4; - Output = 0; - filename.assign(f); - stacksize = cellsize * 4096; - debug = false; - pack = false; - dopt = false; - Init(); -} - -bool Compiler::SetDOpt() -{ - bool state = dopt; - - dopt = dopt ? false : true; - - return state; -} - -bool Compiler::SetDebug() -{ - bool state = debug; - - debug = debug ? false : true; - - return state; -} - -bool Compiler::SetPack() -{ - bool state = pack; - - pack = pack ? false : true; - - return state; -} - -void Compiler::Load(std::string &f) -{ - filename.assign(f); -} - -void Compiler::Init() -{ - Compiler *c = this; - /* Load error handling */ - CError = new ErrorMngr(c); - /* Load symbol management */ - CSymbols = new SymbolList; - /* Load constant management */ - CDefines = new DefineMngr; - /* Load macro management */ - CMacros = new MacroList(this); - /* Load DAT management */ - DAT = new DataMngr(cellsize); - /* Load Proc management */ - PROC = new ProcMngr(CError); - /* Load Label management */ - CLabels = new LabelMngr(CError); - /* Load Native management */ - CNatives = new NativeMngr; - /* Load the default symbols + opcodes */ - InitOpcodes(); -} - -int Compiler::CipCount() -{ - std::vector::iterator i; - std::vector::iterator j; - int cipc = 0; - - for (i=CodeList.begin(); i!=CodeList.end(); i++) - { - cipc+=cellsize; - for (j=(*i)->params.begin(); j!=(*i)->params.end(); j++) - { - cipc+=cellsize; - } - } - - return cipc; -} - -void Compiler::WriteCell(FILE *fp, ucell *c, int repeat) -{ - unsigned char T[5] = {0,0,0,0,0}; - unsigned char code = 0; - int index = 0; - ucell p = (*c); - int i = 0; - - for (i=1; i<=repeat; i++) - { - if (pack) - { - for (index=0;index<5;index++) - { - T[index]=(unsigned char)(p & 0x7f); - p>>=7; - } - while (index>1 && T[index-1]==0 && (T[index-2] & 0x40)==0) - { - index--; - } - if (index==5 && T[index-1]==0x0f && (T[index-2] & 0x40)!=0) - { - index--; - } - while (index>1 && T[index-1]==0x7f && (T[index-2] & 0x40)!=0) - { - index--; - } - assert(index>0); - while (index-->0) - { - code=(unsigned char)((index==0)?T[index]:(T[index]|0x80)); - fwrite((void*)&code, sizeof(unsigned char), 1, fp); - bitsOut += sizeof(unsigned char); - } - } else { - fwrite((void*)c, sizeof(ucell), 1, fp); - bitsOut += sizeof(ucell); - } - } -} - -bool Compiler::Compile(std::string &out) -{ - if (CodeList.size() < 1 || !CError || CError->GetStatus() >= Err_Error) - { - return false; - } - - bitsOut = 0; - int32_t fileSize = 0; - int16_t magic = (int16_t)AMX_MAGIC; - char file_version = CUR_FILE_VERSION; - char amx_version = MIN_AMX_VERSION; - int16_t flags = 0; - int16_t defsize = 8; - int32_t cod, dat, hea, stp, cip, publics, natives, libraries; - int32_t pubvars, tags, names; - int hdrEnd = sizeof(AMX_HEADER); - - if (debug) - { - flags |= AMX_FLAG_DEBUG; - } - if (pack) - { - flags |= AMX_FLAG_COMPACT; - } - - std::vector ProcList; - std::vector::iterator pl; - std::vector NativeList; - std::vector::iterator nl; - std::map NameMap; - - /* Tables */ - std::vector Nametbl; - std::vector PublicsTable; - std::vector NativesTable; - std::vector::iterator ai; - std::vector::iterator nt; - - PROC->GetPublics(ProcList); - CNatives->GetNatives(NativeList); - - /* The only way I see to do this is to build the nametable first. - */ - - /* Public table starts right after the header */ - publics = hdrEnd; - for (pl = ProcList.begin(); pl != ProcList.end(); pl++) - { - NameRecord n; - AddrTable a; - n.Name = (*pl)->Symbol->sym.c_str(); - a.addr = (*pl)->ASM->cip; - a.offset = (int)Nametbl.size(); - Nametbl.push_back(n); - PublicsTable.push_back(a); - } - - natives = publics + (int)(PublicsTable.size() * (sizeof(int32_t) * 2)); - for (nl = NativeList.begin(); nl != NativeList.end(); nl++) - { - NameRecord n; - AddrTable a; - n.Name = (*nl)->S->sym.c_str(); - a.addr = 0; - a.offset = (int)Nametbl.size(); - Nametbl.push_back(n); - NativesTable.push_back(a); - } - - libraries = natives + (int)(NativesTable.size() * (sizeof(int32_t) * 2)); - pubvars = libraries; - tags = pubvars; - names = tags; - - /* Fill out the tables */ - int cOffset = names + sizeof(int16_t); - int16_t nameHdr = 0x1F; - for (ai = PublicsTable.begin(); ai != PublicsTable.end(); ai++) - { - int off = (*ai).offset; - NameMap[cOffset] = off; - (*ai).offset = cOffset; - cOffset += (int)strlen(Nametbl.at(off).Name) + 1; - } - for (ai = NativesTable.begin(); ai != NativesTable.end(); ai++) - { - int off = (*ai).offset; - NameMap[cOffset] = off; - (*ai).offset = cOffset; - cOffset += (int)strlen(Nametbl.at(off).Name) + 1; - } - - bitsOut = cOffset; - cod = cOffset; - dat = cod + CipCount(); - hea = dat + DAT->GetSize(); - stp = hea + stacksize; - cip = -1; - fileSize = hea; - - std::string amxname; - amxname.assign(out); - size_t pos = amxname.find(".asm"); - if (pos != std::string::npos) - { - amxname.replace(pos, 4, ".amx"); - } else { - amxname.append(".amx"); - } - - FILE *fp = fopen(amxname.c_str(), "wb"); - - fwrite((void*)&fileSize, sizeof(int32_t), 1, fp); - fwrite((void*)&magic, sizeof(int16_t), 1, fp); - fwrite((void*)&file_version, sizeof(char), 1, fp); - fwrite((void*)&amx_version, sizeof(char), 1, fp); - fwrite((void*)&flags, sizeof(int16_t), 1, fp); - fwrite((void*)&defsize, sizeof(int16_t), 1, fp); - - fwrite((void*)&cod, sizeof(int32_t), 1, fp); - fwrite((void*)&dat, sizeof(int32_t), 1, fp); - fwrite((void*)&hea, sizeof(int32_t), 1, fp); - fwrite((void*)&stp, sizeof(int32_t), 1, fp); - fwrite((void*)&cip, sizeof(int32_t), 1, fp); - fwrite((void*)&publics, sizeof(int32_t), 1, fp); - fwrite((void*)&natives, sizeof(int32_t), 1, fp); - fwrite((void*)&libraries, sizeof(int32_t), 1, fp); - fwrite((void*)&pubvars, sizeof(int32_t), 1, fp); - fwrite((void*)&tags, sizeof(int32_t), 1, fp); - fwrite((void*)&names, sizeof(int32_t), 1, fp); - - for (ai = PublicsTable.begin(); ai != PublicsTable.end(); ai++) - { - fwrite((void*)&((*ai).addr), sizeof(int32_t), 1, fp); - fwrite((void*)&((*ai).offset), sizeof(int32_t), 1, fp); - } - - for (ai = NativesTable.begin(); ai != NativesTable.end(); ai++) - { - fwrite((void*)&((*ai).addr), sizeof(int32_t), 1, fp); - fwrite((void*)&((*ai).offset), sizeof(int32_t), 1, fp); - } - - fwrite((void*)&(nameHdr), sizeof(int16_t), 1, fp); - - for (ai = PublicsTable.begin(); ai != PublicsTable.end(); ai++) - { - int off = (*ai).offset; - int offs = NameMap[off]; - const char *s = Nametbl.at(offs).Name; - fwrite(s, sizeof(char), strlen(s)+1, fp); - } - - for (ai = NativesTable.begin(); ai != NativesTable.end(); ai++) - { - int off = (*ai).offset; - int offs = NameMap[off]; - const char *s = Nametbl.at(offs).Name; - fwrite(s, sizeof(char), strlen(s)+1, fp); - } - - /* Write the code */ - - std::vector::iterator ci; - std::vector::iterator di; - ucell cop = 0; - for (ci = CodeList.begin(); ci != CodeList.end(); ci++) - { - cop = (*ci)->op; - WriteCell(fp, &cop, 1); - for (di = (*ci)->params.begin(); di != (*ci)->params.end(); di++) - { - cop = (*di); - WriteCell(fp, &cop, 1); - } - } - - std::vector dm; - std::vector::iterator dmi; - DAT->GetData(dm); - - ucell val = 0; - const char *s = 0; - for (dmi = dm.begin(); dmi != dm.end(); dmi++) - { - if ( (*dmi)->db ) - { - if ( (*dmi)->e.GetType() == Val_Number ) - { - val = (*dmi)->e.GetNumber(); - fwrite((void *)&val, sizeof(int32_t), 1, fp); - } else { - s = (*dmi)->e.GetString(); - for (int q = 0; q < (*dmi)->e.Size(); q++) - { - val = s[q]; - WriteCell(fp, &val, 1); - } - } - } else { - if (DAT->IsOptimized()) - break; - ucell c = (*dmi)->fill; - WriteCell(fp, &c, (*dmi)->e.GetNumber()); - } - } - - /* Was packing enabled? Re-output the actual size */ - if (pack) - { - fseek(fp, 0, SEEK_SET); - fwrite((void *)&bitsOut, sizeof(int32_t), 1, fp); - fseek(fp, 0, SEEK_END); - } - - fclose(fp); - - return true; -} - -void Compiler::Clear() -{ - DAT->Clear(); - CDefines->Clear(); - CMacros->Clear(); - CLabels->Clear(); - CNatives->Clear(); - PROC->Clear(); - CSymbols->Clear(); -} - -/* Two pass parser. - * The first pass applies macros + defines + directives - * natives, and data. - * The second pass eats up everything else (code, publics) - */ -bool Compiler::Parse() -{ - FILE *fp = 0; - char buffer[256] = {0}; - std::stack DefStack; - curLine = 0; - AsmSection sec = Asm_None; - lastCip = 0-cellsize; - int pass = 0; -Start: - fp = fopen(filename.c_str(), "rt"); - curLine = 0; - sec = Asm_None; - lastCip = 0-cellsize; - - if (!fp) - { - CError->ErrorMsg(Err_FileOpen, filename.c_str()); - return false; - } - - while (!feof(fp)) - { - fgets(buffer, 255, fp); - curLine+=1; - - /* Check for preprocessor directives */ - if (buffer[0] == '#') - { - std::string procline(buffer); - if (procline.substr(0, 6).compare("#ifdef") == 0) - { - std::string def; - std::string temp; - std::string comp; - StringBreak(procline, def, temp); - StringBreak(temp, def, comp); - DefineMngr::Define *D = 0; - if ( (D = CDefines->FindDefine(def)) == NULL) - { - DefStack.push(0); - } else { - if (D->GetDefine()->compare("0") == 0) - { - DefStack.push(0); - } else { - DefStack.push(1); - } - } - } else if (procline.substr(0, 7).compare("#ifndef") == 0) { - std::string def; - std::string temp; - std::string comp; - StringBreak(procline, def, temp); - StringBreak(temp, def, comp); - DefineMngr::Define *D = 0; - if ( (D = CDefines->FindDefine(def)) == NULL) - { - DefStack.push(1); - } else { - if (D->GetDefine()->compare("0") == 0) - { - DefStack.push(1); - } else { - DefStack.push(0); - } - } - } else if (procline.substr(0, 5).compare("#else") == 0) { - if (!DefStack.empty()) - { - if (DefStack.top() == 1) - { - DefStack.pop(); - DefStack.push(0); - } else if (DefStack.top() == 0) { - DefStack.pop(); - DefStack.push(1); - } - } else { - CError->ErrorMsg(Err_Misplaced_Directive); - } - continue; - } else if (procline.substr(0, 6).compare("#endif") == 0) { - if (!DefStack.empty()) - { - DefStack.pop(); - } else { - CError->ErrorMsg(Err_Misplaced_Directive); - } - continue; - } else { - /* Check for previous operations */ - if (DefStack.size()) - { - if (DefStack.top() < 1) - { - continue; - } - } - // only process directives on pass one - if (pass == 0) - { - ProcessDirective(procline); - } - } - continue; - } - - /* Check for previous operations */ - if (DefStack.size()) - { - if (DefStack.top() < 1) - { - continue; - } - } - - /* Strip the line */ - std::string line(buffer); - - StripComments(line); - Strip(line); - - if (line.size() < 1) - continue; - - /* Check for section state changes */ - if (line[0] == '.') - { - if (line.compare(".DATA") == 0) - { - sec = Asm_Data; - } else if (line.compare(".CODE") == 0) {; - sec = Asm_Code; - } else if (line.compare(".PUBLIC") == 0) { - sec = Asm_Public; - } else if (line.compare(".NATIVE") == 0) { - sec = Asm_Native; - } else { - sec = Asm_Invalid; - CError->ErrorMsg(Err_Invalid_Section, buffer); - } - if (pass == 1) - { - /* Update the labels */ - CLabels->CompleteQueue(true); - while (!LabelStack.empty()) - { - CLabels->EraseLabel(LabelStack.top()); - CSymbols->EraseSymbol(LabelStack.top()); - LabelStack.pop(); - } - } - } else { - /* Do pre-processing */ - CMacros->SearchAndReplace(line); - CDefines->SearchAndReplace(line); - - /* See if we're not in a section */ - if (sec == Asm_None) - { - if (line.size() > 0) - { - CError->ErrorMsg(Err_Wandering_Stuff); - } - } else if (sec == Asm_Invalid) { - /* Just ignore it */ - } else if (sec == Asm_Data) { - if (pass == 1) - continue; - /* Format is Symbol, [db|stat], Data */ - std::string symbol; - std::string data; - std::string buf; - std::string fmt; - - /* Do two splits - line into symbol into data */ - StringBreak(line, symbol, buf); - StringBreak(buf, fmt, data); - - /* Check if the symbol is already defined */ - SymbolList::Symbol *S = NULL; - if ((S = CSymbols->FindSymbol(symbol)) != NULL) - { - CError->ErrorMsg(Err_Symbol_Reuse, symbol.c_str(), S->line); - continue; - } - - if (fmt.compare("db") && fmt.compare("stat")) - { - CError->ErrorMsg(Err_Invalid_Stor, fmt.c_str()); - continue; - } - - if (fmt.compare("db") == 0) - { - /* Add and evaluate the expression */ - CExpr e(CError); - e.Set(data); - e.Evaluate(); - - /* Add into the DAT section */ - DAT->Add(symbol, e, true); - } else if (fmt.compare("stat") == 0) { - CExpr e(CError); - - if (data.find("fill") != std::string::npos) - { - std::string fill, amt; - StringBreak(data, amt, buf); - StringBreak(buf, data, fill); - CExpr t(CError); - t.Set(fill); - t.Evaluate(); - e = EvalE(amt, Sym_None); - DAT->Add(symbol, e, false, t.GetNumber()); - } else { - e = EvalE(data, Sym_None); - DAT->Add(symbol, e, false, 0); - } - } - CSymbols->AddSymbol(symbol, Sym_Dat, CurLine()); - } else if (sec == Asm_Public) { - if (pass == 0) - continue; - if (!IsValidSymbol(line)) - { - CError->ErrorMsg(Err_Invalid_Symbol); - continue; - } - SymbolList::Symbol *S = NULL; - if ( (S = CSymbols->FindSymbol(line)) == NULL) - { - CError->ErrorMsg(Err_Unknown_Symbol, line.c_str()); - continue; - } - if ( (S->type != Sym_Proc) ) - { - CError->ErrorMsg(Err_Symbol_Type, Sym_Proc, S->type); - continue; - } - if (!PROC->SetPublic(line)) - { - CError->ErrorMsg(Err_Unknown_Symbol, line.c_str()); - continue; - } - } else if (sec == Asm_Native) { - if (pass == 1) - continue; - if (!IsValidSymbol(line)) - { - CError->ErrorMsg(Err_Invalid_Symbol); - continue; - } - SymbolList::Symbol *S = NULL; - if ( (S = CSymbols->FindSymbol(line)) != NULL) - { - CError->ErrorMsg(Err_Invalid_Symbol, line.c_str(), S->line); - continue; - } - S = CSymbols->AddSymbol(line, Sym_Native, CurLine()); - CNatives->AddNative(S); - } else if (sec == Asm_Code) { - if (pass == 0) - continue; - std::string code; - std::string params; - SymbolList::Symbol *S; - - StringBreak(line, code, params); - - if (code.compare("PROC") == 0 || code.compare("proc") == 0) - { - /* Check if symbol is valid */ - if (!IsValidSymbol(params)) - { - CError->ErrorMsg(Err_Invalid_Symbol); - continue; - } - /* Check if the symbol is already used */ - if ( (S = CSymbols->FindSymbol(params)) != NULL) - { - if (S->type != Sym_Proc) - { - CError->ErrorMsg(Err_Symbol_Reuse, params.c_str(), S->line); - continue; - } - } - /* Create instruction */ - Asm *ASM = new Asm; - ASM->cip = lastCip + cellsize; - ASM->op = OpCodes["proc"]; - ASM->line = curLine; - lastCip += cellsize; - if (S == NULL) - { - /* Add symbol */ - S = CSymbols->AddSymbol(params, Sym_Proc, CurLine()); - /* Add to PROC list */ - PROC->AddProc(S, ASM); - } else { - ProcMngr::AsmProc *p = 0; - p = PROC->FindProc(params); - - if (p == NULL || p->ASM != NULL) - { - CError->ErrorMsg(Err_Symbol_Reuse, params.c_str(), S->line); - continue; - } else { - p->ASM = ASM; - } - } - /* Add to code list */ - CodeList.push_back(ASM); - } else if (code.compare("ENDP") == 0) { - /* This is, in theory, not needed - * Nonetheless, we check labels here - */ - CLabels->CompleteQueue(true); - while (!LabelStack.empty()) - { - CLabels->EraseLabel(LabelStack.top()); - CSymbols->EraseSymbol(LabelStack.top()); - LabelStack.pop(); - } - } else if (params.size() < 1 && code[code.size()-1] == ':') { - /* Label! */ - /* Check if symbol is valid */ - code.erase(code.size()-1, 1); - if (!IsValidSymbol(code)) - { - CError->ErrorMsg(Err_Invalid_Symbol); - continue; - } - /* Check if the symbol is already used */ - if ( (S = CSymbols->FindSymbol(code)) != NULL) - { - if (S->type == Sym_Label) - { - LabelMngr::Label *p = CLabels->FindLabel(code); - if (p == NULL) - { - CError->ErrorMsg(Err_Invalid_Symbol); - } else { - p->cip = lastCip+cellsize; - p->sym->line = CurLine(); - } - } else { - CError->ErrorMsg(Err_Symbol_Reuse, code.c_str(), S->line); - } - continue; - } else { - if (code[0] == '_') - { - LabelStack.push(code); - } - S = CSymbols->AddSymbol(code, Sym_Label, CurLine()); - CLabels->AddLabel(S, lastCip+cellsize); - } - } else { - /* Check if there is a valid opcode */ - int op = OpCodes[code]; - int argPos; - if (op == OP_NONE) - { - CError->ErrorMsg(Err_Opcode); - continue; - } - - Asm *ASM = 0; - - if (debug) - { - ASM = new Asm; - ASM->cip = lastCip+cellsize; - ASM->op = OP_LINE; - ASM->line = curLine; - ASM->params.push_back(curLine); - ASM->params.push_back(0); - CodeList.push_back(ASM); - lastCip+=cellsize*3; - } - - ASM = new Asm; - - curAsm = ASM; - - std::vector paramList; - - if (params.size() > 0) - { - FindArguments(params, paramList, argPos, true); - if (argPos != (int)(params.size()-1)) - { - assert(0); - CError->ErrorMsg(Err_Unexpected_Char, params[argPos]); - continue; - } - } - - ASM->cip = (lastCip+cellsize); - ASM->op = op; - ASM->line = curLine; - lastCip += cellsize; - - switch (op) - { - case OP_LOAD_PRI: - { - CHK_PARAMS(1); - PUSH_PARAM(1, Sym_Dat); - break; - } - case OP_LOAD_ALT: - { - CHK_PARAMS(1); - PUSH_PARAM(1, Sym_Dat); - break; - } - case OP_LOAD_S_PRI: - { - CHK_PARAMS(1); - PUSH_PARAM(1, Sym_Dat); - break; - } - case OP_LOAD_S_ALT: - { - CHK_PARAMS(1); - PUSH_PARAM(1, Sym_Dat); - break; - } - case OP_LREF_PRI: - { - CHK_PARAMS(1); - PUSH_PARAM(1, Sym_Dat); - break; - } - case OP_LREF_ALT: - { - CHK_PARAMS(1); - PUSH_PARAM(1, Sym_Dat); - break; - } - case OP_LREF_S_PRI: - { - CHK_PARAMS(1); - PUSH_PARAM(1, Sym_Dat); - break; - } - case OP_LREF_S_ALT: - { - CHK_PARAMS(1); - PUSH_PARAM(1, Sym_Dat); - break; - } - case OP_LOAD_I: - { - CHK_PARAMS(0); - break; - } - case OP_LODB_I: - { - CHK_PARAMS(1); - PUSH_PARAM(1, Sym_Dat); - break; - } - case OP_CONST_PRI: - { - CHK_PARAMS(1); - PUSH_PARAM(1, Sym_Dat); - break; - } - case OP_CONST_ALT: - { - CHK_PARAMS(1); - PUSH_PARAM(1, Sym_Dat); - break; - } - case OP_ADDR_PRI: - { - CHK_PARAMS(1); - PUSH_PARAM(1, Sym_Dat); - break; - } - case OP_ADDR_ALT: - { - CHK_PARAMS(1); - PUSH_PARAM(1, Sym_Dat); - break; - } - case OP_STOR_PRI: - { - CHK_PARAMS(1); - PUSH_PARAM(1, Sym_Dat); - break; - } - case OP_STOR_ALT: - { - CHK_PARAMS(1); - PUSH_PARAM(1, Sym_Dat); - break; - } - case OP_STOR_S_PRI: - { - CHK_PARAMS(1); - PUSH_PARAM(1, Sym_Dat); - break; - } - case OP_STOR_S_ALT: - { - CHK_PARAMS(1); - PUSH_PARAM(1, Sym_Dat); - break; - } - case OP_SREF_PRI: - { - CHK_PARAMS(1); - PUSH_PARAM(1, Sym_Dat); - break; - } - case OP_SREF_ALT: - { - CHK_PARAMS(1); - PUSH_PARAM(1, Sym_Dat); - break; - } - case OP_SREF_S_PRI: - { - CHK_PARAMS(1); - PUSH_PARAM(1, Sym_Dat); - break; - } - case OP_SREF_S_ALT: - { - CHK_PARAMS(1); - PUSH_PARAM(1, Sym_Dat); - break; - } - case OP_STOR_I: - { - CHK_PARAMS(0); - break; - } - case OP_STRB_I: - { - CHK_PARAMS(1); - PUSH_PARAM(1, Sym_Dat); - break; - } - case OP_LIDX: - { - CHK_PARAMS(0); - break; - } - case OP_LIDX_B: - { - CHK_PARAMS(1); - PUSH_PARAM(1, Sym_Dat); - break; - } - case OP_IDXADDR: - { - CHK_PARAMS(0); - break; - } - case OP_IDXADDR_B: - { - CHK_PARAMS(1); - PUSH_PARAM(1, Sym_Dat); - break; - } - case OP_ALIGN_PRI: - { - CHK_PARAMS(1); - PUSH_PARAM(1, Sym_Dat); - break; - } - case OP_ALIGN_ALT: - { - CHK_PARAMS(1); - PUSH_PARAM(1, Sym_Dat); - break; - } - case OP_LCTRL: - { - CHK_PARAMS(1); - PUSH_PARAM(1, Sym_Dat); - break; - } - case OP_SCTRL: - { - CHK_PARAMS(1); - PUSH_PARAM(1, Sym_Dat); - break; - } - case OP_MOVE_PRI: - { - CHK_PARAMS(0); - break; - } - case OP_MOVE_ALT: - { - CHK_PARAMS(0); - break; - } - case OP_XCHG: - { - CHK_PARAMS(0); - break; - } - case OP_PUSH_PRI: - { - CHK_PARAMS(0); - break; - } - case OP_PUSH_ALT: - { - CHK_PARAMS(0); - break; - } - case OP_PUSH_R: - { - CHK_PARAMS(1); - PUSH_PARAM(1, Sym_Dat); - break; - } - case OP_PUSH_C: - { - CHK_PARAMS(1); - PUSH_PARAM(1, Sym_Dat); - break; - } - case OP_PUSH: - { - CHK_PARAMS(1); - PUSH_PARAM(1, Sym_Dat); - break; - } - case OP_PUSH_S: - { - CHK_PARAMS(1); - PUSH_PARAM(1, Sym_Dat); - break; - } - case OP_POP_PRI: - { - CHK_PARAMS(0); - break; - } - case OP_POP_ALT: - { - CHK_PARAMS(0); - break; - } - case OP_STACK: - { - CHK_PARAMS(1); - PUSH_PARAM(1, Sym_Dat); - break; - } - case OP_HEAP: - { - CHK_PARAMS(1); - PUSH_PARAM(1, Sym_Dat); - break; - } - case OP_PROC: - { - CHK_PARAMS(0); - break; - } - case OP_RET: - { - CHK_PARAMS(0); - break; - } - case OP_RETN: - { - CHK_PARAMS(0); - break; - } - case OP_CALL: - { - CHK_PARAMS(1); - PUSH_PARAM(1, Sym_Proc); - break; - } - case OP_CALL_PRI: - { - CHK_PARAMS(0); - break; - } - case OP_JUMP: - { - CHK_PARAMS(1); - PUSH_PARAM(1, Sym_Label); - break; - } - case OP_JREL: - { - CHK_PARAMS(1); - PUSH_PARAM(1, Sym_Label); - break; - } - case OP_JZER: - { - CHK_PARAMS(1); - PUSH_PARAM(1, Sym_Label); - break; - } - case OP_JNZ: - { - CHK_PARAMS(1); - PUSH_PARAM(1, Sym_Label); - break; - } - case OP_JEQ: - { - CHK_PARAMS(1); - PUSH_PARAM(1, Sym_Label); - break; - } - case OP_JNEQ: - { - CHK_PARAMS(1); - PUSH_PARAM(1, Sym_Label); - break; - } - case OP_JLESS: - { - CHK_PARAMS(1); - PUSH_PARAM(1, Sym_Label); - break; - } - case OP_JLEQ: - { - CHK_PARAMS(1); - PUSH_PARAM(1, Sym_Label); - break; - } - case OP_JGRTR: - { - CHK_PARAMS(1); - PUSH_PARAM(1, Sym_Label); - break; - } - case OP_JGEQ: - { - CHK_PARAMS(1); - PUSH_PARAM(1, Sym_Label); - break; - } - case OP_JSLESS: - { - CHK_PARAMS(1); - PUSH_PARAM(1, Sym_Label); - break; - } - case OP_JSLEQ: - { - CHK_PARAMS(1); - PUSH_PARAM(1, Sym_Label); - break; - } - case OP_JSGRTR: - { - CHK_PARAMS(1); - PUSH_PARAM(1, Sym_Label); - break; - } - case OP_JSGEQ: - { - CHK_PARAMS(1); - PUSH_PARAM(1, Sym_Label); - break; - } - case OP_SHL: - { - CHK_PARAMS(0); - break; - } - case OP_SHR: - { - CHK_PARAMS(0); - break; - } - case OP_SSHR: - { - CHK_PARAMS(0); - break; - } - case OP_SHL_C_PRI: - { - CHK_PARAMS(1); - PUSH_PARAM(1, Sym_Dat); - break; - } - case OP_SHL_C_ALT: - { - CHK_PARAMS(1); - PUSH_PARAM(1, Sym_Dat); - break; - } - case OP_SHR_C_PRI: - { - CHK_PARAMS(1); - PUSH_PARAM(1, Sym_Dat); - break; - } - case OP_SHR_C_ALT: - { - CHK_PARAMS(1); - PUSH_PARAM(1, Sym_Dat); - break; - } - case OP_SMUL: - { - CHK_PARAMS(0); - break; - } - case OP_SDIV: - { - CHK_PARAMS(0); - break; - } - case OP_SDIV_ALT: - { - CHK_PARAMS(0); - break; - } - case OP_UMUL: - { - CHK_PARAMS(0); - break; - } - case OP_UDIV: - { - CHK_PARAMS(0); - break; - } - case OP_UDIV_ALT: - { - CHK_PARAMS(0); - break; - } - case OP_ADD: - { - CHK_PARAMS(0); - break; - } - case OP_SUB: - { - CHK_PARAMS(0); - break; - } - case OP_SUB_ALT: - { - CHK_PARAMS(0); - break; - } - case OP_AND: - { - CHK_PARAMS(0); - break; - } - case OP_OR: - { - CHK_PARAMS(0); - break; - } - case OP_XOR: - { - CHK_PARAMS(0); - break; - } - case OP_NOT: - { - CHK_PARAMS(0); - break; - } - case OP_NEG: - { - CHK_PARAMS(0); - break; - } - case OP_INVERT: - { - CHK_PARAMS(0); - break; - } - case OP_ADD_C: - { - CHK_PARAMS(1); - PUSH_PARAM(1, Sym_Dat); - break; - } - case OP_SMUL_C: - { - CHK_PARAMS(1); - PUSH_PARAM(1, Sym_Dat); - break; - } - case OP_ZERO_PRI: - { - CHK_PARAMS(0); - break; - } - case OP_ZERO_ALT: - { - CHK_PARAMS(0); - break; - } - case OP_ZERO: - { - CHK_PARAMS(1); - PUSH_PARAM(1, Sym_Dat); - break; - } - case OP_ZERO_S: - { - CHK_PARAMS(1); - PUSH_PARAM(1, Sym_Dat); - break; - } - case OP_SIGN_PRI: - { - CHK_PARAMS(0); - break; - } - case OP_SIGN_ALT: - { - CHK_PARAMS(0); - break; - } - case OP_EQ: - { - CHK_PARAMS(0); - break; - } - case OP_NEQ: - { - CHK_PARAMS(0); - break; - } - case OP_LESS: - { - CHK_PARAMS(0); - break; - } - case OP_LEQ: - { - CHK_PARAMS(0); - break; - } - case OP_GRTR: - { - CHK_PARAMS(0); - break; - } - case OP_GEQ: - { - CHK_PARAMS(0); - break; - } - case OP_SLESS: - { - CHK_PARAMS(0); - break; - } - case OP_SLEQ: - { - CHK_PARAMS(0); - break; - } - case OP_SGRTR: - { - CHK_PARAMS(0); - break; - } - case OP_SGEQ: - { - CHK_PARAMS(0); - break; - } - case OP_EQ_C_PRI: - { - CHK_PARAMS(1); - PUSH_PARAM(1, Sym_Dat); - break; - } - case OP_EQ_C_ALT: - { - CHK_PARAMS(1); - PUSH_PARAM(1, Sym_Dat); - break; - } - case OP_INC_PRI: - { - CHK_PARAMS(0); - break; - } - case OP_INC_ALT: - { - CHK_PARAMS(0); - break; - } - case OP_INC: - { - CHK_PARAMS(1); - PUSH_PARAM(1, Sym_Dat); - break; - } - case OP_INC_S: - { - CHK_PARAMS(1); - PUSH_PARAM(1, Sym_Dat); - break; - } - case OP_INC_I: - { - CHK_PARAMS(0); - break; - } - case OP_DEC_PRI: - { - CHK_PARAMS(0); - break; - } - case OP_DEC_ALT: - { - CHK_PARAMS(0); - break; - } - case OP_DEC: - { - CHK_PARAMS(1); - PUSH_PARAM(1, Sym_Dat); - break; - } - case OP_DEC_S: - { - CHK_PARAMS(1); - PUSH_PARAM(1, Sym_Dat); - break; - } - case OP_DEC_I: - { - CHK_PARAMS(0); - break; - } - case OP_MOVS: - { - CHK_PARAMS(1); - PUSH_PARAM(1, Sym_Dat); - break; - } - case OP_CMPS: - { - CHK_PARAMS(1); - PUSH_PARAM(1, Sym_Dat); - break; - } - case OP_FILL: - { - CHK_PARAMS(1); - PUSH_PARAM(1, Sym_Dat); - break; - } - case OP_HALT: - { - CHK_PARAMS(1); - PUSH_PARAM(1, Sym_Dat); - break; - } - case OP_BOUNDS: - { - CHK_PARAMS(1); - PUSH_PARAM(1, Sym_Dat); - break; - } - case OP_SYSREQ_PRI: - { - CHK_PARAMS(0); - break; - } - case OP_SYSREQ_C: - { - CHK_PARAMS(1); - PUSH_PARAM(1, Sym_Native); - break; - } - case OP_FILE: - { - /* Not yet implemented */ - assert(0); - /*CHK_PARAMS(3); - PUSH_PARAM(1, Sym_Dat); - PUSH_PARAM(1, Sym_Dat); - PUSH_PARAM(1, Sym_Dat);*/ - break; - } - case OP_LINE: - { - CHK_PARAMS(2); - PUSH_PARAM(1, Sym_Dat); - PUSH_PARAM(1, Sym_Dat); - break; - } - case OP_SYMBOL: - { - /* Not yet implemented */ - assert(0); - /*CHK_PARAMS(3); - PUSH_PARAM(1, Sym_Dat); - PUSH_PARAM(1, Sym_Dat); - PUSH_PARAM(1, Sym_Dat);*/ - break; - } - case OP_SRANGE: - { - CHK_PARAMS(2); - PUSH_PARAM(1, Sym_Dat); - PUSH_PARAM(1, Sym_Dat); - break; - } - case OP_JUMP_PRI: - { - CHK_PARAMS(0); - break; - } - case OP_SWITCH: - { - /* Not yet implemented */ - assert(0); - CHK_PARAMS(1); - PUSH_PARAM(1, Sym_Label); - break; - } - case OP_CASETBL: - { - /* Not yet implemented */ - assert(0); - CHK_PARAMS(1); - PUSH_PARAM(1, Sym_Native); - break; - } - case OP_SWAP_PRI: - { - CHK_PARAMS(0); - break; - } - case OP_SWAP_ALT: - { - CHK_PARAMS(0); - break; - } - case OP_PUSHADDR: - { - CHK_PARAMS(1); - PUSH_PARAM(1, Sym_Dat); - break; - } - case OP_NOP: - { - CHK_PARAMS(0); - break; - } - case OP_SYSREQ_D: - { - CHK_PARAMS(1); - PUSH_PARAM(1, Sym_Dat); - break; - } - case OP_SYMTAG: - { - CHK_PARAMS(1); - PUSH_PARAM(1, Sym_Dat); - break; - } - } /* Switch */ - CodeList.push_back(ASM); - } /* Asm_Code */ - } /* Section If */ - } /* Line processing */ - } /* While */ - - // go for second pass - if (pass == 0) - { - pass = 1; - fclose(fp); - if (dopt) - DAT->Optimize(); - goto Start; - } - - /* We're not done! Check the label Queue */ - CLabels->CompleteQueue(); - - /* and the procedure queue ... */ - PROC->CompleteQueue(); - - CError->PrintReport(); - - if (CError->GetStatus() >= Err_Error) - { - return false; - } - - return true; -} - -void Compiler::InitOpcodes() -{ - OpCodes["nop"] = 0; - OpCodes["load.pri"] = 1; - OpCodes["load.alt"] = 2; - OpCodes["load.s.pri"] = 3; - OpCodes["load.s.alt"] = 4; - OpCodes["lref.pri"] = 5; - OpCodes["lref.alt"] = 6; - OpCodes["lref.s.pri"] = 7; - OpCodes["lref.s.alt"] = 8; - OpCodes["load.i"] = 9; - OpCodes["lodb.i"] = 10; - OpCodes["const.pri"] = 11; - OpCodes["const.alt"] = 12; - OpCodes["addr.pri"] = 13; - OpCodes["addr.alt"] = 14; - OpCodes["stor.pri"] = 15; - OpCodes["stor.alt"] = 16; - OpCodes["stor.s.pri"] = 17; - OpCodes["stor.s.alt"] = 18; - OpCodes["sref.pri"] = 19; - OpCodes["sref.alt"] = 20; - OpCodes["sref.s.pri"] = 21; - OpCodes["sref.s.alt"] = 22; - OpCodes["stor.i"] = 23; - OpCodes["strb.i"] = 24; - OpCodes["lidx"] = 25; - OpCodes["lidx.b"] = 26; - OpCodes["idxaddr"] = 27; - OpCodes["idxaddr.b"] = 28; - OpCodes["align.pri"] = 29; - OpCodes["align.alt"] = 30; - OpCodes["lctrl"] = 31; - OpCodes["sctrl"] = 32; - OpCodes["move.pri"] = 33; - OpCodes["move.alt"] = 34; - OpCodes["xchg"] = 35; - OpCodes["push.pri"] = 36; - OpCodes["push.alt"] = 37; - OpCodes["push.r"] = 38; - OpCodes["push.c"] = 39; - OpCodes["push"] = 40; - OpCodes["push.s"] = 41; - OpCodes["pop.pri"] = 42; - OpCodes["pop.alt"] = 43; - OpCodes["stack"] = 44; - OpCodes["heap"] = 45; - OpCodes["proc"] = 46; - OpCodes["ret"] = 47; - OpCodes["retn"] = 48; - OpCodes["call"] = 49; - OpCodes["call.pri"] = 50; - OpCodes["jump"] = 51; - OpCodes["jrel"] = 52; - OpCodes["jzer"] = 53; - OpCodes["jnz"] = 54; - OpCodes["jeq"] = 55; - OpCodes["jneq"] = 56; - OpCodes["jless"] = 57; - OpCodes["jleq"] = 58; - OpCodes["jgrtr"] = 59; - OpCodes["jgeq"] = 60; - OpCodes["jsless"] = 61; - OpCodes["jsleq"] = 62; - OpCodes["jsgrtr"] = 63; - OpCodes["jsgeq"] = 64; - OpCodes["shl"] = 65; - OpCodes["shr"] = 66; - OpCodes["sshr"] = 67; - OpCodes["shl.c.pri"] = 68; - OpCodes["shl.c.alt"] = 69; - OpCodes["shr.c.pri"] = 70; - OpCodes["shr.c.alt"] = 71; - OpCodes["smul"] = 72; - OpCodes["sdiv"] = 73; - OpCodes["sdiv.alt"] = 74; - OpCodes["umul"] = 75; - OpCodes["udiv"] = 76; - OpCodes["udiv.alt"] = 77; - OpCodes["add"] = 78; - OpCodes["sub"] = 79; - OpCodes["sub.alt"] = 80; - OpCodes["and"] = 81; - OpCodes["or"] = 82; - OpCodes["xor"] = 83; - OpCodes["not"] = 84; - OpCodes["neg"] = 85; - OpCodes["invert"] = 86; - OpCodes["add.c"] = 87; - OpCodes["smul.c"] = 88; - OpCodes["zero.pri"] = 89; - OpCodes["zero.alt"] = 90; - OpCodes["zero"] = 91; - OpCodes["zero.s"] = 92; - OpCodes["sign.pri"] = 93; - OpCodes["sign.alt"] = 94; - OpCodes["eq"] = 95; - OpCodes["neq"] = 96; - OpCodes["less"] = 97; - OpCodes["leq"] = 98; - OpCodes["grtr"] = 99; - OpCodes["geq"] = 100; - OpCodes["sless"] = 101; - OpCodes["sleq"] = 102; - OpCodes["sgrtr"] = 103; - OpCodes["sgeq"] = 104; - OpCodes["eq.c.pri"] = 105; - OpCodes["eq.c.alt"] = 106; - OpCodes["inc.pri"] = 107; - OpCodes["inc.alt"] = 108; - OpCodes["inc"] = 109; - OpCodes["inc.s"] = 110; - OpCodes["inc.i"] = 111; - OpCodes["dec.pri"] = 112; - OpCodes["dec.alt"] = 113; - OpCodes["dec"] = 114; - OpCodes["dec.s"] = 115; - OpCodes["dec.i"] = 116; - OpCodes["movs"] = 117; - OpCodes["cmps"] = 118; - OpCodes["fill"] = 119; - OpCodes["halt"] = 120; - OpCodes["bounds"] = 121; - OpCodes["sysreq.pri"] = 122; - OpCodes["sysreq.c"] = 123; - OpCodes["file"] = 124; - OpCodes["line"] = 125; - OpCodes["symbol"] = 126; - OpCodes["srange"] = 127; - OpCodes["jump.pri"] = 128; - OpCodes["switch"] = 129; - OpCodes["casetbl"] = 130; - OpCodes["swap.pri"] = 131; - OpCodes["swap.alt"] = 132; - OpCodes["pushaddr"] = 133; - OpCodes["nop"] = 134; - OpCodes["sysreq.d"] = 135; - OpCodes["symtag"] = 136; - - std::map::iterator i; - for (i=OpCodes.begin(); i!=OpCodes.end(); i++) - { - CSymbols->AddSymbol((*i).first.c_str(), Sym_Reserved, 0); - } - - CSymbols->AddSymbol("db", Sym_Reserved, 0); - CSymbols->AddSymbol("PROC", Sym_Reserved, 0); - CSymbols->AddSymbol("ENDP", Sym_Reserved, 0); - CSymbols->AddSymbol("stat", Sym_Reserved, 0); - - char buf[24]; - sprintf(buf, "%d", cellsize?cellsize:4); - std::string CellDef("CELL"); - std::string Cell(buf); - CDefines->AddDefine(CellDef, Cell); - CSymbols->AddSymbol("CELL", Sym_Define, 0); -} - -char Compiler::OperChar(OpToken c) -{ - switch (c) - { - case Token_Or: - return '|'; - break; - case Token_Xor: - return '^'; - break; - case Token_And: - return '&'; - break; - case Token_Shr: - return '>'; - break; - case Token_Shl: - return '<'; - break; - case Token_Mod: - return '%'; - break; - case Token_Div: - return '/'; - break; - case Token_Mul: - return '*'; - break; - case Token_Sub: - return '-'; - break; - case Token_Add: - return '+'; - break; - case Token_Not: - return '~'; - break; - default: - return Token_None; - break; - } -} - -OpToken Compiler::OperToken(char c) -{ - switch (c) - { - case '|': - return Token_Or; - break; - case '^': - return Token_Xor; - break; - case '&': - return Token_And; - break; - case '>': - return Token_Shr; - break; - case '<': - return Token_Shl; - break; - case '%': - return Token_Mod; - break; - case '/': - return Token_Div; - break; - case '*': - return Token_Mul; - break; - case '-': - return Token_Sub; - break; - case '+': - return Token_Add; - break; - case '~': - return Token_Not; - break; - default: - return Token_None; - break; - } -} - char OperToken(OpToken c); - -/* Returns all the arguments in a list - * This takes literals and expressions into account - * In non-simple mode, It is assumed that the first ( is stripped! - */ -int Compiler::FindArguments(std::string &text, std::vector &List, int &end, bool simple) -{ - unsigned int i = 0, pos = 0; - char c = 0, d = 0, l = 0, size = 0; - std::stack Stack; - end = -1; - - for (i=0; iassign(text.substr(pos, - (i==text.size()-1 && text[i]!=')')? - (i-pos+1):(i-pos))); - } else { - p->assign(text.substr(pos, i-pos+1)); - } - Strip(*p); - pos = i+1; - if (p->size() < 1) - { - delete p; - } else { - List.push_back(p); - size++; - } - end = i; - if (text[i] == ')') - break; - } - } - } - - c = d; - } - - if (!Stack.empty()) - { - CError->ErrorMsg(Err_FatalTokenError); - } - - return size; -} - -void Compiler::ProcessDirective(std::string &text) -{ - Strip(text); - if (text[0] == '#') - text.erase(0, 1); - std::string directive; - std::string definition; - /* Split the directive */ - StringBreak(text, directive, definition); - if (!directive.compare("macro")) - { - Strip(definition); - size_t argPos = definition.find('(', 0); - if (argPos == std::string::npos) - { - CError->ErrorMsg(Err_InvalidMacro, curLine); - } else { - /* Store the symbol, which is read up to the occurrence of ( */ - std::string symbol; - symbol.assign(definition.substr(0, argPos-1)); - /* Check if the symbol is already defined */ - SymbolList::Symbol *S; - if ((S = CSymbols->FindSymbol(symbol)) != NULL) - { - CError->ErrorMsg(Err_SymbolRedef, S->sym.c_str(), S->line); - } - /* Store the argstring, which is the rest of the data */ - std::string argstring; - argstring.assign(definition.substr(argPos+1, definition.size()-argPos+1)); - /* Parse the arg string, storing the results and the offset to the end */ - int bPos; - std::vector ArgList; - FindArguments(argstring, ArgList, bPos); - /* Store the rest in a function string (macro definition) */ - std::string funcstring; - funcstring.assign(argstring.substr(bPos+1, argstring.size()-bPos+1)); - /* Push the macro onto the Macro List */ - Strip(funcstring); - Strip(symbol); - MacroList::Macro *m = CMacros->AddMacroBegin(symbol, funcstring); - std::vector::iterator i; - for (i=ArgList.begin(); i!=ArgList.end(); i++) - { - CMacros->AddMacroArgument(m, *(*i)); - } - CMacros->AddMacroEnd(m); - /* Make sure to add the symbol */ - CSymbols->AddSymbol(symbol, Sym_Macro, curLine); - //TODO: ClearList(ArgList); - } - } else if (!directive.compare("pragma")) { - std::string pragma; - std::string entry; - StringBreak(definition, pragma, entry); - if (pragma.compare("stacksize") == 0) - { - int stksz = atoi(entry.c_str()); - if (stksz < 100) - { - CError->ErrorMsg(Err_Invalid_Pragma); - } else { - stacksize = stksz; - } - } else { - CError->ErrorMsg(Err_Invalid_Pragma); - } - } else if (!directive.compare("define")) { - std::string symbol; - std::string def; - StringBreak(definition, symbol, def); - SymbolList::Symbol *S; - if ((S = CSymbols->FindSymbol(symbol)) != NULL) - { - CError->ErrorMsg(Err_SymbolRedef, S->sym.c_str(), S->line); - } - if (def.size() < 1) - def.assign("1"); - CSymbols->AddSymbol(symbol, Sym_Define, curLine); - CDefines->AddDefine(symbol, def); - } -} - -int Compiler::Eval(std::string &str, SymbolType sym) -{ - CExpr e(CError); - - e = EvalE(str, sym); - - return e.GetNumber(); -} - -/* The evaluator works by storing expressions on a stack. - Each expression is an RPN-ordered pair of lists for ops and values - Every time the stack is popped, the expression is evaluated by searching - for the highest operators and evaluating them. - Note that string literals are not allowed here yet. - */ -CExpr Compiler::EvalE(std::string &str, SymbolType sym) -{ - std::stack Stack; - std::string bpstr; - int i = 0; - rpn *r = new rpn; - int pos = 0; - - Stack.push(r); - - for (i=0; i<(int)str.size(); i++) - { - if (OperToken(str[i]) != Token_None) - { - if ((i == (int)(str.size() - 1)) - || ((OperToken(str[i]) != Token_Not && OperToken(str[i]) != Token_Sub) - && i == 0)) - { - CError->ErrorMsg(Err_Unexpected_Char, str[i]); - return 0; - } - if (str[i] == '<' && str[i+1] != '<') - { - CError->ErrorMsg(Err_Unexpected_Char, str[i]); - return 0; - } - if (str[i] == '>' && str[i+1] != '>') - { - CError->ErrorMsg(Err_Unexpected_Char, str[i]); - return 0; - } - /* Check to see if there are extra tokens */ - if (pos < i || (pos == i && (OperToken(str[i]) == Token_Sub))) - { - bpstr.assign(str.substr(pos, i-pos)); - Strip(bpstr); - CExpr e(CError); - e.Set(bpstr); - e.Evaluate(sym); - r->vals.push_back(e); - } - r->ops.push_back((char)str[i]); - if (str[i] == '>' || str[i] == '<') - { - i++; - } - pos = i+1; - continue; - } else { - if (str[i] == '(') - { - if (pos < i) - { - bpstr.assign(str.substr(pos, i-pos)); - Strip(bpstr); - CExpr e(CError); - e.Set(bpstr); - e.Evaluate(sym); - r->vals.push_back(e); - } - r = new rpn; - Stack.push(r); - pos = i+1; - continue; - } else if (str[i] == ')') { - if (pos < i) - { - bpstr.assign(str.substr(pos, i-pos)); - Strip(bpstr); - CExpr e(CError); - e.Set(bpstr); - e.Evaluate(sym); - r->vals.push_back(e); - } - if (Stack.size() < 2) - { - while (!Stack.empty()) - { - rpn *t = Stack.top(); - if (t) - delete t; - t = 0; - Stack.pop(); - } - CError->ErrorMsg(Err_Unmatched_Token, str[i]); - return 0; - } else { - CExpr t; - t = EvalRpn(r, sym); - delete r; - r = 0; - Stack.pop(); - r = Stack.top(); - r->vals.push_back(t); - pos = i + 1; - } - } else if (i == (int)(str.size() - 1)) { - if (pos < i) - { - bpstr.assign(str.substr(pos)); - } else if (pos == i) { - bpstr.assign(str.substr(pos, 1)); - } - if (pos < i || pos == i) - { - Strip(bpstr); - CExpr e(CError); - e.Set(bpstr); - e.Evaluate(sym); - r->vals.push_back(e); - } - } - } - } - - if (Stack.size() != 1) - { - rpn *t = 0; - while (!Stack.empty()) - { - t = Stack.top(); - if (t) - delete t; - t = 0; - Stack.pop(); - } - CError->ErrorMsg(Err_Unmatched_Token, '('); - return 0; - } - - Stack.pop(); - CExpr final; - final = EvalRpn(r, sym); - - delete r; - r = 0; - - return final; -} - -CExpr Compiler::EvalRpn(rpn *r, SymbolType sym) -{ - int i = 0, j = 0; - CExpr er, el; - std::vector::iterator Q; - std::vector::iterator R; - - while (r->ops.size()) - { - for (i=1; iops.size(); j++) - { - if (r->ops[j] == c) - { - if ((int)r->vals.size() <= j) - assert(0);// Can't have more ops than values - el = r->vals[j]; - if (i != Token_Not) - { - if ((int)r->vals.size() <= j+1) - { - assert(0); - } - er = r->vals[j+1]; - el.Oper((OpToken)i, er); - } else { - el.Not(); - } - R = r->ops.begin(); - Q = r->vals.begin(); - if (i != Token_Not) - { - R += j; - Q += j; - r->ops.erase(R); - r->vals[j+1] = el; - r->vals.erase(Q); - j--; - } else { - R += j; - r->ops.erase(R); - r->vals[j] = el; - } - } - } - } - } - - return r->vals[0]; -} - -void DestroyArgList(std::vector &List) -{ - std::vector::iterator i; - - for (i=List.begin(); i!=List.end(); i++) - { - if ( (*i) ) - delete (*i); - } - - List.clear(); -} - -void Compiler::PrintCodeList() -{ - std::vector::iterator i; - std::vector::iterator j; - - for (i=CodeList.begin(); i!=CodeList.end(); i++) - { - printf("OP: %d [%d]\n", (*i)->op, (*i)->cip); - for (j=(*i)->params.begin(); j!=(*i)->params.end(); j++) - { - printf("\tParameter: %d\n", (*j)); - } - } -} - -int Compiler::DerefSymbol(std::string &str, SymbolType sym) -{ - int val = 0; - - SymbolList::Symbol *S = NULL; - if ( ((S = CSymbols->FindSymbol(str)) == NULL) ) - { - if (sym == Sym_Label) - { - S = CSymbols->AddSymbol(str, Sym_Label, -1); - } else if (sym == Sym_Proc) { - S = CSymbols->AddSymbol(str, Sym_Proc, -1); - } else { - CError->ErrorMsg(Err_Unknown_Symbol, str.c_str()); - return 0; - } - } - if (sym != Sym_Dat && S->type != sym) - { - CError->ErrorMsg(Err_Invalid_Symbol); - return 0; - } - switch (S->type) - { - case Sym_Proc: - { - ProcMngr::AsmProc *p = 0; - - if ( ((p = PROC->FindProc(str)) == NULL) ) - { - /* Labels we handle differently. - Add it to the label queue - */ - p = PROC->AddProc(S, NULL); - PROC->QueueProc(str, CurAsm()); - val = ProcMngr::ncip; - } else if (p->ASM == NULL) { - PROC->QueueProc(str, CurAsm()); - val = ProcMngr::ncip; - } else { - val = p->ASM->cip; - } - break; - } - case Sym_Native: - { - val = CNatives->GetNativeId(str); - if (val == NativeMngr::ncip) - { - CError->ErrorMsg(Err_Invalid_Symbol); - return 0; - } - break; - } - case Sym_Dat: - { - val = DAT->GetOffset(str); - if (val == DataMngr::nof) - { - CError->ErrorMsg(Err_Invalid_Symbol); - return 0; - } - break; - } - case Sym_Label: - { - LabelMngr::Label *L = 0; - - if ( (L = CLabels->FindLabel(str)) == NULL ) - { - /* Labels we handle differently. - Add it to the label queue - */ - L = CLabels->AddLabel(S, LabelMngr::ncip); - CLabels->QueueLabel(str, CurAsm()); - LabelStack.push(str); - } else if (L->cip == LabelMngr::ncip) { - //if we don't queue the label the jump won't be resolved! - CLabels->QueueLabel(str, CurAsm()); - } - - val = L->cip; - break; - } - default: - { - CError->ErrorMsg(Err_Invalid_Symbol); - return 0; - break; - } - } - - return val; -} - -bool Compiler::IsSymbol(std::string &str) -{ - SymbolList::Symbol *S = 0; - - if ( (S = CSymbols->FindSymbol(str)) == NULL ) - return false; - - return true; -} - -rpn::~rpn() -{ -// ops.clear(); -// vals.clear(); -} diff --git a/compiler/scasm/amx_compiler.h b/compiler/scasm/amx_compiler.h deleted file mode 100755 index d919d030..00000000 --- a/compiler/scasm/amx_compiler.h +++ /dev/null @@ -1,110 +0,0 @@ -/* AMX Assembler - * Copyright (C)2004 David "BAILOPAN" Anderson - * - * This software is provided 'as-is', without any express or implied - * warranty. In no event will the authors be held liable for any damages - * arising from the use of this software. - * - * Permission is granted to anyone to use this software for any purpose, - * including commercial applications, and to alter it and redistribute it - * freely, subject to the following restrictions: - * - * 1. The origin of this software must not be misrepresented; you must not - * claim that you wrote the original software. If you use this software - * in a product, an acknowledgment in the product documentation would be - * appreciated but is not required. - * 2. Altered source versions must be plainly marked as such, and must not be - * misrepresented as being the original software. - * 3. This notice may not be removed or altered from any source distribution. - * - * Version: $Id: amx_compiler.h 835 2004-08-12 16:31:50Z dvander $ - */ - -#ifndef _INCLUDE_AMXCOMPILER_H -#define _INCLUDE_AMXCOMPILER_H - -#define CHK_PARAMS(d) \ - if (paramList.size() > d) \ - { \ - CError->ErrorMsg(Warning_Param_Count, paramList.size(), d); \ - } else if (paramList.size() < d) { \ - CError->ErrorMsg(Err_Param_Count, paramList.size(), d); \ - delete ASM; \ - ASM = 0; \ - } - -#define PUSH_PARAM(n,sym) \ - if (paramList.size() >= n) \ - { \ - ASM->params.push_back(Eval(*(paramList[n-1]), sym)); \ - lastCip+=cellsize; \ - } - -class rpn -{ -public: - ~rpn(); - //TODO: use linked lists, but not std::list - std::vector ops; - std::vector vals; -}; - -class Compiler -{ -public: - Compiler(); - ~Compiler(); - Compiler(std::string &f); - void Load(std::string &f); - bool Parse(); - bool Compile(std::string &out); - int CurLine() { return curLine; } - ErrorMngr *ErrorHandler() { return CError; } - void PrintCodeList(); -public: - int FindArguments(std::string &text, std::vector &List, int &end, bool simple = false); - void Clear(); - int CipCount(); - int CurCip() { return lastCip; } - Asm *CurAsm() { return curAsm; } - bool SetDebug(); - bool SetPack(); - bool SetDOpt(); - int DerefSymbol(std::string &str, SymbolType sym = Sym_None); - bool IsSymbol(std::string &str); -private: - void ProcessDirective(std::string &text); - void Init(); - void InitOpcodes(); - int Eval(std::string &str, SymbolType sym = Sym_None); - CExpr EvalE(std::string &str, SymbolType sym = Sym_None); - CExpr EvalRpn(rpn *r, SymbolType sym); - OpToken OperToken(char c); - char OperChar(OpToken c); - void WriteCell(FILE *fp, ucell *c, int repeat); -private: - std::vector CodeList; - std::map OpCodes; - std::stack LabelStack; - char *Output; - ErrorMngr *CError; - SymbolList *CSymbols; - DefineMngr *CDefines; - MacroList *CMacros; - DataMngr *DAT; - ProcMngr *PROC; - LabelMngr *CLabels; - NativeMngr *CNatives; - std::string filename; - int curLine; - int lastCip; - int cellsize; - int stacksize; - bool debug; - bool pack; - bool dopt; - int bitsOut; - Asm *curAsm; -}; - -#endif //_INCLUDE_AMXCOMPILER_H diff --git a/compiler/scasm/amx_data.cpp b/compiler/scasm/amx_data.cpp deleted file mode 100755 index 48758c35..00000000 --- a/compiler/scasm/amx_data.cpp +++ /dev/null @@ -1,196 +0,0 @@ -/* AMX Assembler - * Copyright (C)2004 David "BAILOPAN" Anderson - * - * This software is provided 'as-is', without any express or implied - * warranty. In no event will the authors be held liable for any damages - * arising from the use of this software. - * - * Permission is granted to anyone to use this software for any purpose, - * including commercial applications, and to alter it and redistribute it - * freely, subject to the following restrictions: - * - * 1. The origin of this software must not be misrepresented; you must not - * claim that you wrote the original software. If you use this software - * in a product, an acknowledgment in the product documentation would be - * appreciated but is not required. - * 2. Altered source versions must be plainly marked as such, and must not be - * misrepresented as being the original software. - * 3. This notice may not be removed or altered from any source distribution. - * - * Version: $Id: amx_data.cpp 828 2004-08-11 14:31:26Z dvander $ - */ - -#include "amxasm.h" - -DataMngr::~DataMngr() -{ - Clear(); -} - -void DataMngr::Clear() -{ - std::vector::iterator i; - - for (i=List.begin(); i!=List.end(); i++) - { - if ( (*i) ) - delete (*i); - } - - List.clear(); -} - -DataMngr::Datum::Datum() -{ - db = false; - offset = -1; - fill = 0; - zeroed = false; -} - -void DataMngr::Add(std::string &s, CExpr &expr, bool db, int fill) -{ - DataMngr::Datum *D = new DataMngr::Datum(); - - D->symbol.assign(s); - D->e = expr; - D->fill = fill; - D->db = db; - - int size = 0; - - if (db) - { - size = ((D->e.GetType() == Val_Number) ? - cellsize : D->e.Size() * cellsize); - } else { - size = (D->e.GetNumber() * cellsize); - } - - if (List.size() == 0) - { - D->offset = 0; - } else { - DataMngr::Datum *p = List[List.size()-1]; - if (p->db) - { - D->offset = p->offset + - ((p->e.GetType() == Val_Number) ? - cellsize : p->e.Size() * cellsize); - } else { - D->offset = p->offset + (p->e.GetNumber() * cellsize); - } - } - - cursize += size; - - List.push_back(D); -} - -DataMngr::Datum *DataMngr::FindData(std::string &sym) -{ - std::vector::iterator i; - - for (i=List.begin(); i!=List.end(); i++) - { - if ((*i)->symbol.compare(sym) == 0) - { - return (*i); - } - } - - return NULL; -} - -int DataMngr::GetOffset(std::string &sym) -{ - DataMngr::Datum *D = NULL; - - D = FindData(sym); - - if (D == NULL) - return DataMngr::nof; - - return D->offset; -} - -int DataMngr::GetSize() -{ - return cursize; -} - -void DataMngr::GetData(std::vector &dList) -{ - std::vector::iterator i; - - for (i=List.begin(); i!=List.end(); i++) - { - dList.push_back( (*i) ); - } -} - -void DataMngr::PrintTable() -{ - std::vector::iterator i; - DataMngr::Datum *p = 0; - - printf("Symbol\tSize\n"); - for (i=List.begin(); i!=List.end(); i++) - { - p = (*i); - printf("%s\t%d\n", p->symbol.c_str(), p->offset); - } -} - -//Rewrite the DAT section so empties are at the end -void DataMngr::Optimize() -{ - std::vector DbList; - std::vector MtList; - std::vector::iterator i; - - for (i=List.begin(); i!=List.end(); i++) - { - if ( (*i)->db ) - { - DbList.push_back( (*i) ); - } else if ( (*i)->fill == 0 ) { - MtList.push_back( (*i) ); - } else { - DbList.push_back( (*i) ); - } - } - - List.clear(); - - lastOffset = 0; - cursize = 0; - int size = 0; - - for (i=DbList.begin(); i!=DbList.end(); i++) - { - size = (( (*i)->e.GetType() == Val_Number - || (*i)->e.GetType() == Val_Float ) ? - cellsize : (*i)->e.Size() * cellsize); - (*i)->offset = lastOffset; - lastOffset += size; - (*i)->zeroed = false; - List.push_back( (*i) ); - } - - cursize = lastOffset; - DbList.clear(); - - for (i=MtList.begin(); i!=MtList.end(); i++) - { - size = ( (*i)->e.GetNumber() * cellsize ); - (*i)->offset = lastOffset; - lastOffset += size; - (*i)->zeroed = true; - List.push_back( (*i) ); - } - - MtList.clear(); - - optimized = true; -} diff --git a/compiler/scasm/amx_data.h b/compiler/scasm/amx_data.h deleted file mode 100755 index 3281a1e4..00000000 --- a/compiler/scasm/amx_data.h +++ /dev/null @@ -1,63 +0,0 @@ -/* AMX Assembler - * Copyright (C)2004 David "BAILOPAN" Anderson - * - * This software is provided 'as-is', without any express or implied - * warranty. In no event will the authors be held liable for any damages - * arising from the use of this software. - * - * Permission is granted to anyone to use this software for any purpose, - * including commercial applications, and to alter it and redistribute it - * freely, subject to the following restrictions: - * - * 1. The origin of this software must not be misrepresented; you must not - * claim that you wrote the original software. If you use this software - * in a product, an acknowledgment in the product documentation would be - * appreciated but is not required. - * 2. Altered source versions must be plainly marked as such, and must not be - * misrepresented as being the original software. - * 3. This notice may not be removed or altered from any source distribution. - * - * Version: $Id: amx_data.h 828 2004-08-11 14:31:26Z dvander $ - */ - -#ifndef _INCLUDE_AMXDATA_H -#define _INCLUDE_AMXDATA_H - -class DataMngr -{ -public: - class Datum - { - public: - Datum(); - std::string symbol; - CExpr e; - bool db; - int offset; - int fill; - bool zeroed; - }; -public: - ~DataMngr(); - DataMngr() { cellsize = 4; lastOffset = 0; cursize = 0; optimized = false; } - DataMngr(int cell) { lastOffset = 0; cellsize = cell; cursize = 0; optimized = false; } - void Add(std::string &s, CExpr &expr, bool db = false, int fill = 0); - DataMngr::Datum *FindData(std::string &sym); - void GetData(std::vector &dList); - int GetOffset(std::string &sym); - int GetSize(); - void Clear(); - void PrintTable(); - void Optimize(); - bool IsOptimized() { return optimized; } -private: - std::vector List; - int lastOffset; - int cellsize; - int cursize; - bool optimized; -public: - static const int nof = -1; -}; - -#endif //_INCLUDE_AMXDATA_H diff --git a/compiler/scasm/amx_define.cpp b/compiler/scasm/amx_define.cpp deleted file mode 100755 index dabe1767..00000000 --- a/compiler/scasm/amx_define.cpp +++ /dev/null @@ -1,90 +0,0 @@ -/* AMX Assembler - * Copyright (C)2004 David "BAILOPAN" Anderson - * - * This software is provided 'as-is', without any express or implied - * warranty. In no event will the authors be held liable for any damages - * arising from the use of this software. - * - * Permission is granted to anyone to use this software for any purpose, - * including commercial applications, and to alter it and redistribute it - * freely, subject to the following restrictions: - * - * 1. The origin of this software must not be misrepresented; you must not - * claim that you wrote the original software. If you use this software - * in a product, an acknowledgment in the product documentation would be - * appreciated but is not required. - * 2. Altered source versions must be plainly marked as such, and must not be - * misrepresented as being the original software. - * 3. This notice may not be removed or altered from any source distribution. - * - * Version: $Id: amx_define.cpp 826 2004-08-11 10:01:56Z dvander $ - */ - -#include "amxasm.h" - -DefineMngr::~DefineMngr() -{ - Clear(); -} - -void DefineMngr::Clear() -{ - std::vector::iterator i; - - for (i=List.begin(); i!=List.end(); i++) - { - if ( (*i) ) - delete (*i); - } - - List.clear(); -} - -void DefineMngr::Define::Set(std::string &s, std::string &d) -{ - sym.assign(s); - def.assign(d); -} - -DefineMngr::Define *DefineMngr::AddDefine(std::string &sym, std::string &def) -{ - DefineMngr::Define *D = new DefineMngr::Define; - - D->Set(sym, def); - - List.push_back(D); - - return D; -} - -DefineMngr::Define *DefineMngr::FindDefine(std::string &sym) -{ - std::vector::iterator i; - for (i=List.begin(); i!=List.end(); i++) - { - if ((*i)->GetSymbol()->compare(sym)==0) - { - return (*i); - } - } - return NULL; -} - -void DefineMngr::SearchAndReplace(std::string &text) -{ - std::vector::iterator i; - DefineMngr::Define *D = NULL; - int pos; - - for (i=List.begin(); i!=List.end(); i++) - { - D = (*i); - pos = FindSymbol(text, *(D->GetSymbol()), 0); - if (pos != -1) - { - text.replace(pos, D->GetSymbol()->size(), *(D->GetDefine())); - i = List.begin(); - } - } -} - diff --git a/compiler/scasm/amx_define.h b/compiler/scasm/amx_define.h deleted file mode 100755 index 6a543f99..00000000 --- a/compiler/scasm/amx_define.h +++ /dev/null @@ -1,49 +0,0 @@ -/* AMX Assembler - * Copyright (C)2004 David "BAILOPAN" Anderson - * - * This software is provided 'as-is', without any express or implied - * warranty. In no event will the authors be held liable for any damages - * arising from the use of this software. - * - * Permission is granted to anyone to use this software for any purpose, - * including commercial applications, and to alter it and redistribute it - * freely, subject to the following restrictions: - * - * 1. The origin of this software must not be misrepresented; you must not - * claim that you wrote the original software. If you use this software - * in a product, an acknowledgment in the product documentation would be - * appreciated but is not required. - * 2. Altered source versions must be plainly marked as such, and must not be - * misrepresented as being the original software. - * 3. This notice may not be removed or altered from any source distribution. - * - * Version: $Id: amx_define.h 821 2004-08-11 08:18:14Z dvander $ - */ - -#ifndef _INCLUDE_DEFINE_H -#define _INCLUDE_DEFINE_H - -class DefineMngr -{ -public: - class Define - { - public: - void Set(std::string &s, std::string &d); - const std::string *GetSymbol() { return &sym; } - const std::string *GetDefine() { return &def; } - private: - std::string sym; - std::string def; - }; -private: - std::vector List; -public: - ~DefineMngr(); - void Clear(); - DefineMngr::Define *AddDefine(std::string &sym, std::string &def); - DefineMngr::Define *FindDefine(std::string &sym); - void SearchAndReplace(std::string &text); -}; - -#endif //_INCLUDE_DEFINE_H diff --git a/compiler/scasm/amx_error.cpp b/compiler/scasm/amx_error.cpp deleted file mode 100755 index 5b145536..00000000 --- a/compiler/scasm/amx_error.cpp +++ /dev/null @@ -1,198 +0,0 @@ -/* AMX Assembler - * Copyright (C)2004 David "BAILOPAN" Anderson - * - * This software is provided 'as-is', without any express or implied - * warranty. In no event will the authors be held liable for any damages - * arising from the use of this software. - * - * Permission is granted to anyone to use this software for any purpose, - * including commercial applications, and to alter it and redistribute it - * freely, subject to the following restrictions: - * - * 1. The origin of this software must not be misrepresented; you must not - * claim that you wrote the original software. If you use this software - * in a product, an acknowledgment in the product documentation would be - * appreciated but is not required. - * 2. Altered source versions must be plainly marked as such, and must not be - * misrepresented as being the original software. - * 3. This notice may not be removed or altered from any source distribution. - * - * Version: $Id: amx_error.cpp 835 2004-08-12 16:31:50Z dvander $ - */ - -#include "amxasm.h" - -ErrorMngr::ErrorMngr() -{ - printf("Not instantiated with a compiler."); - Cmp = NULL; - line = -1; - assert(Cmp); -} - -void ErrorMngr::Clear() -{ - Totals[0] = 0; - Totals[1] = 0; - Totals[2] = 0; - Totals[3] = 0; - HighestError = Err_None; -} - -int ErrorMngr::CurLine() -{ - return ((Compiler *)Cmp)->CurLine(); -} - -int ErrorMngr::CurCip() -{ - return ((Compiler *)Cmp)->CurCip(); -} - -ErrorMngr::ErrorMngr(void *c) -{ - Cmp = c; - DefineErrors(); - Totals[0] = 0; - Totals[1] = 0; - Totals[2] = 0; - Totals[3] = 0; - line = -1; - HighestError = Err_None; -} - -ErrorType ErrorMngr::GetErrorType(ErrorCode id) -{ - if (id > fatals_start && id < fatals_end) - return Err_Fatal; - if (id > warnings_start && id < warnings_end) - return Err_Warning; - if (id > notices_start && id < notices_end) - return Err_Notice; - if (id > errors_start && id < errors_end) - return Err_Error; - return Err_None; -} - -void ErrorMngr::DefineErrors() -{ - List.resize(fatals_end+1); - - List.at(Warning_Hex_Start) = "Hexadecimal notation is 0xN, 0 missing"; - List.at(Warning_Null_Expression) = "Bad expression will evaluate to 0"; - List.at(Warning_Param_Count) = "Expected %d parameters, found %d"; - - List.at(Err_String_Terminate) = "String not terminated properly"; - List.at(Err_String_Extra) = "Unexpected characters after string end (character '%c')"; - List.at(Err_Unexpected_Char) = "Unexpected character found (character '%c')"; - List.at(Err_Wandering_Stuff) = "Unknown directive placed outside of a section"; - List.at(Err_Symbol_Reuse) = "Symbol \"%s\" already defined on line %d"; - List.at(Err_Invalid_Stor) = "Invalid DAT storage identifier \"%s\""; - List.at(Err_Unknown_Symbol) = "Unknown symbol \"%s\""; - List.at(Err_Symbol_Type) = "Expected symbol type %d, got %d (bad symbol)"; - List.at(Err_Invalid_Symbol) = "Invalid symbol"; - List.at(Err_Opcode) = "Invalid or unrecognized opcode"; - List.at(Err_Unmatched_Token) = "Unmatched token '%c'"; - List.at(Err_Param_Count) = "Expected %d parameters, found %d"; - List.at(Err_Unknown_Define) = "Unknown define referenced"; - List.at(Err_Misplaced_Directive) = "Misplaced preprocessor directive"; - List.at(Err_Bad_Label) = "Label referenced without being created"; - List.at(Err_Bad_Not) = "Wrong type argument to bit-complement"; - List.at(Err_Invalid_Operator) = "Operator used on bad type"; - List.at(Err_Invalid_Pragma) = "Invalid pragma"; - List.at(Err_Invalid_Proc) = "Procedure referenced that does not exist"; - - List.at(Err_FileNone) = "No file specified"; - List.at(Err_FileOpen) = "Could not open file \"%s\""; - List.at(Err_NoMemory) = "Ran out of memory"; - List.at(Err_PragmaStacksize) = "Invalid stacksize on #pragma stacksize"; - List.at(Err_InvalidMacro) = "Invalid or empty macro definition"; - List.at(Err_SymbolRedef) = "Symbol \"%s\" already defined on line %d"; - List.at(Err_Reserved) = "Symbol assigned to a reserved token"; - List.at(Err_MacroParamCount) = "Parameter count for macro \"%s\" incorrect"; - List.at(Err_FatalTokenError) = "Fatal token error encountered"; - List.at(Err_Invalid_Section) = "Section identifier \"%s\" is not valid, ignoring section."; -} - -void ErrorMngr::PrintReport() -{ - static char *ErrorSwi[4] = {"Notice", "Warning", "Error", "Fatal Error"}; - int i = 0; - - printf("+---------------------------+\n"); - - for (i=0; i<4; i++) - { - printf("| %ss: %s%d |\n", ErrorSwi[i], (i!=3)?"\t\t":"\t", Totals[i]); - } - - printf("+---------------------------+\n"); -} - -void ErrorMngr::ErrorMsg(ErrorCode error, ...) -{ - static char *ErrorSwi[4] = {"Notice", "Warning", "Error", "Fatal Error"}; - static char errbuf[1024]; - ErrorType type = GetErrorType(error); - if (type == -1) - return; - - int curLine = 0; - - if (line == -1) - { - curLine = ((Compiler *)Cmp)->CurLine(); - } else { - curLine = line; - line = -1; - } - - va_list argptr; - va_start(argptr, error); - - if (((Compiler *)Cmp)->CurLine() == -1) - sprintf(errbuf, "%s(%d): %s\n", ErrorSwi[type], error, GetError(error)); - else - sprintf(errbuf, "%s(%d) on line %d: %s\n", ErrorSwi[type], error, curLine, GetError(error)); - vprintf(errbuf, argptr); - - va_end(argptr); - - Totals[type]++; - - if (type == Err_Fatal) - exit(0); - if (type > HighestError) - HighestError = type; -} - -const char *ErrorMngr::GetError(ErrorCode id) -{ - if (id == fatals_start || id == fatals_end) - return NULL; - if (id == warnings_start || id == warnings_end) - return NULL; - if (id == notices_start || id == notices_end) - return NULL; - if (id == errors_start || id == errors_end) - return NULL; - if (id < notices_start || id > fatals_end) - return NULL; - return List.at(id); -} - -int ErrorMngr::DerefSymbol(std::string &str, int sym) -{ - return ((Compiler *)Cmp)->DerefSymbol(str, (SymbolType)sym); -} - -bool ErrorMngr::IsSymbol(std::string &str) -{ - return ((Compiler *)Cmp)->IsSymbol(str); -} - -void ErrorMngr::SetLine(int ln) -{ - line = ln; -} - diff --git a/compiler/scasm/amx_error.h b/compiler/scasm/amx_error.h deleted file mode 100755 index 83a0d8f1..00000000 --- a/compiler/scasm/amx_error.h +++ /dev/null @@ -1,109 +0,0 @@ -/* AMX Assembler - * Copyright (C)2004 David "BAILOPAN" Anderson - * - * This software is provided 'as-is', without any express or implied - * warranty. In no event will the authors be held liable for any damages - * arising from the use of this software. - * - * Permission is granted to anyone to use this software for any purpose, - * including commercial applications, and to alter it and redistribute it - * freely, subject to the following restrictions: - * - * 1. The origin of this software must not be misrepresented; you must not - * claim that you wrote the original software. If you use this software - * in a product, an acknowledgment in the product documentation would be - * appreciated but is not required. - * 2. Altered source versions must be plainly marked as such, and must not be - * misrepresented as being the original software. - * 3. This notice may not be removed or altered from any source distribution. - * - * Version: $Id: amx_error.h 835 2004-08-12 16:31:50Z dvander $ - */ - -#ifndef _INCLUDE_AMX_ERROR -#define _INCLUDE_AMX_ERROR - -typedef enum -{ - Err_None=-1, - Err_Notice, - Err_Warning, - Err_Error, - Err_Fatal, -} ErrorType; - -typedef enum -{ - notices_start, - notices_end, - - warnings_start, - Warning_Hex_Start, - Warning_Null_Expression, - Warning_Param_Count, - warnings_end, - - errors_start, - Err_String_Terminate, - Err_String_Extra, - Err_Unexpected_Char, - Err_Invalid_Section, - Err_Wandering_Stuff, - Err_Symbol_Reuse, /* Non-fatal version of Redef */ - Err_Invalid_Stor, - Err_Unknown_Symbol, - Err_Symbol_Type, - Err_Invalid_Symbol, - Err_Opcode, - Err_Unmatched_Token, - Err_Param_Count, - Err_Unknown_Define, - Err_Misplaced_Directive, - Err_Bad_Label, - Err_Bad_Not, - Err_Invalid_Operator, - Err_Invalid_Pragma, - Err_Invalid_Proc, - errors_end, - - fatals_start, - Err_FileNone, - Err_FileOpen, - Err_NoMemory, - Err_PragmaStacksize, - Err_InvalidMacro, - Err_SymbolRedef, - Err_Reserved, - Err_MacroParamCount, - Err_FatalTokenError, - fatals_end, - -} ErrorCode; - -class ErrorMngr -{ -private: - void DefineErrors(); - const char *GetError(ErrorCode id); - ErrorType GetErrorType(ErrorCode id); -private: - std::vector List; - ErrorType HighestError; - void *Cmp; - int Totals[4]; - int line; -public: - ErrorMngr(); - ErrorMngr(void *c); - void Clear(); - void ErrorMsg(ErrorCode error, ...); - ErrorType GetStatus() { return HighestError; } - void PrintReport(); - int CurLine(); - int CurCip(); - void SetLine(int ln); - int DerefSymbol(std::string &str, int sym = 0); - bool IsSymbol(std::string &str); -}; - -#endif //_INCLUDE_AMX_ERROR diff --git a/compiler/scasm/amx_label.cpp b/compiler/scasm/amx_label.cpp deleted file mode 100755 index 20882acd..00000000 --- a/compiler/scasm/amx_label.cpp +++ /dev/null @@ -1,182 +0,0 @@ -/* AMX Assembler - * Copyright (C)2004 David "BAILOPAN" Anderson - * - * This software is provided 'as-is', without any express or implied - * warranty. In no event will the authors be held liable for any damages - * arising from the use of this software. - * - * Permission is granted to anyone to use this software for any purpose, - * including commercial applications, and to alter it and redistribute it - * freely, subject to the following restrictions: - * - * 1. The origin of this software must not be misrepresented; you must not - * claim that you wrote the original software. If you use this software - * in a product, an acknowledgment in the product documentation would be - * appreciated but is not required. - * 2. Altered source versions must be plainly marked as such, and must not be - * misrepresented as being the original software. - * 3. This notice may not be removed or altered from any source distribution. - * - * Version: $Id: amx_label.cpp 926 2004-08-21 18:57:47Z dvander $ - */ - -#include "amxasm.h" - -LabelMngr::~LabelMngr() -{ - Clear(); -} - -LabelMngr::Label::Label() -{ - cip = -1; - sym = 0; -} - -void LabelMngr::Clear() -{ - std::list::iterator i; - - for (i=List.begin(); i!=List.end(); i++) - { - if ( (*i) ) - delete (*i); - } - - List.clear(); -} - -LabelMngr::Label *LabelMngr::AddLabel(SymbolList::Symbol *sym, int cip) -{ - LabelMngr::Label *p = new LabelMngr::Label; - - p->sym = sym; - p->cip = cip; - - List.push_back(p); - - return p; -} - -LabelMngr::Label *LabelMngr::FindLabel(std::string &sym) -{ - std::list::iterator i; - - for (i=List.begin(); i!=List.end(); i++) - { - if ( (*i)->sym->IsEqual(sym) ) - { - return (*i); - } - } - - return NULL; -} - -bool LabelMngr::SetCip(std::string &sym, int cip) -{ - LabelMngr::Label *p = NULL; - - p = FindLabel(sym); - - if (p == NULL) - return false; - - p->cip = cip; - - return true; -} - -void LabelMngr::QueueLabel(std::string &sym, Asm *ASM) -{ - std::string d(sym); - LQ[d].push(ASM); -} - -void LabelMngr::CompleteQueue(bool isLocal) -{ - std::map >::iterator i; - std::stack *stk = 0; - std::stack >::iterator> DeleteStack; - std::string search; - Asm *ASM = 0; - LabelMngr::Label *p = 0; - - for (i=LQ.begin(); i!=LQ.end(); i++) - { - search.assign( (*i).first ); - p = FindLabel(search); - stk = &((*i).second); - if (p == NULL || p->cip == LabelMngr::ncip) - { - if ((!isLocal || (isLocal && search[0]=='_')) && CError) - { - while (!stk->empty()) - { - CError->SetLine(stk->top()->line); - CError->ErrorMsg(Err_Bad_Label); - stk->pop(); - } - DeleteStack.push( i ); - } - } else { - while (!stk->empty()) - { - ASM = stk->top(); - ASM->params[0] = p->cip; - stk->pop(); - } - DeleteStack.push( i ); - } - } - - while (!DeleteStack.empty()) - { - LQ.erase(DeleteStack.top()); - DeleteStack.pop(); - } -} - -int LabelMngr::GetCip(std::string &sym) -{ - LabelMngr::Label *p = NULL; - - p = FindLabel(sym); - - if (p == NULL) - return ncip; - - return p->cip; -} - -bool LabelMngr::EraseLabel(std::string &sym) -{ - std::list::iterator i; - LabelMngr::Label *L = 0; - - for (i=List.begin(); i!=List.end(); i++) - { - L = (*i); - if ( L->sym->IsEqual(sym) ) - { - i = List.erase(i); - L->sym = 0; - delete L; - L = 0; - return true; - } - } - - return false; -} - -void LabelMngr::PrintList() -{ - std::list::iterator i; - - for (i=List.begin(); i!=List.end(); i++) - { - printf("Label:\t%s\t%d\t%d\n", (*i)->sym->sym.c_str(), (*i)->cip, (*i)->sym->line); - } -} - diff --git a/compiler/scasm/amx_label.h b/compiler/scasm/amx_label.h deleted file mode 100755 index 6cc5a245..00000000 --- a/compiler/scasm/amx_label.h +++ /dev/null @@ -1,57 +0,0 @@ -/* AMX Assembler - * Copyright (C)2004 David "BAILOPAN" Anderson - * - * This software is provided 'as-is', without any express or implied - * warranty. In no event will the authors be held liable for any damages - * arising from the use of this software. - * - * Permission is granted to anyone to use this software for any purpose, - * including commercial applications, and to alter it and redistribute it - * freely, subject to the following restrictions: - * - * 1. The origin of this software must not be misrepresented; you must not - * claim that you wrote the original software. If you use this software - * in a product, an acknowledgment in the product documentation would be - * appreciated but is not required. - * 2. Altered source versions must be plainly marked as such, and must not be - * misrepresented as being the original software. - * 3. This notice may not be removed or altered from any source distribution. - * - * Version: $Id: amx_label.h 835 2004-08-12 16:31:50Z dvander $ - */ - -#ifndef _INCLUDE_AMXLABEL_H -#define _INCLUDE_AMXLABEL_H - -class LabelMngr -{ -public: - class Label - { - public: - Label(); - SymbolList::Symbol *sym; - int cip; - }; -public: - ~LabelMngr(); - LabelMngr() { CError = NULL; assert(CError!=NULL); } - LabelMngr(ErrorMngr *e) { CError = e; } - LabelMngr::Label *AddLabel(SymbolList::Symbol *sym, int cip); - LabelMngr::Label *FindLabel(std::string &sym); - int GetCip(std::string &sym); - void Clear(); - bool SetCip(std::string &sym, int cip); - void QueueLabel(std::string &sym, Asm *ASM); - void CompleteQueue(bool isLocal = false); - bool EraseLabel(std::string &sym); - void PrintList(); -private: - std::list List; - std::map > LQ; - ErrorMngr *CError; -public: - static const int ncip = -1; -}; - -#endif //_INCLUDE_AMXLABEL_H diff --git a/compiler/scasm/amx_macro.cpp b/compiler/scasm/amx_macro.cpp deleted file mode 100755 index fdec1348..00000000 --- a/compiler/scasm/amx_macro.cpp +++ /dev/null @@ -1,173 +0,0 @@ -/* AMX Assembler - * Copyright (C)2004 David "BAILOPAN" Anderson - * - * This software is provided 'as-is', without any express or implied - * warranty. In no event will the authors be held liable for any damages - * arising from the use of this software. - * - * Permission is granted to anyone to use this software for any purpose, - * including commercial applications, and to alter it and redistribute it - * freely, subject to the following restrictions: - * - * 1. The origin of this software must not be misrepresented; you must not - * claim that you wrote the original software. If you use this software - * in a product, an acknowledgment in the product documentation would be - * appreciated but is not required. - * 2. Altered source versions must be plainly marked as such, and must not be - * misrepresented as being the original software. - * 3. This notice may not be removed or altered from any source distribution. - * - * Version: $Id: amx_macro.cpp 826 2004-08-11 10:01:56Z dvander $ - */ - -#include "amxasm.h" - -MacroList::~MacroList() -{ - Clear(); -} - -void MacroList::Clear() -{ - std::vector::iterator i; - - for (i=List.begin(); i!=List.end(); i++) - { - if ( (*i) ) - delete (*i); - } - - List.clear(); -} - -MacroList::Macro::~Macro() -{ - std::vector::iterator i; - - for (i=argList.begin(); i!=argList.end(); i++) - { - if ( (*i) ) - delete (*i); - } - - argList.clear(); -} - -MacroList::MacroList() -{ - printf("Not instantiated with a compiler\n"); - exit(0); -} - -MacroList::MacroList(void *c) -{ - CError = ((Compiler *)c)->ErrorHandler(); - Cmp = c; -} - -std::string *MacroList::BeginReplacement(MacroList::Macro *macro) -{ - std::string *mstring = new std::string(macro->macro); - - macro->arg = macro->argList.begin(); - macro->argpos = 0; - - return mstring; -} - -int MacroList::ReplaceArgument(MacroList::Macro *m, std::string *macro, std::string &arg, int pos = 0) -{ - int bPos = 0; - - bPos = FindSymbol(*macro, *(*m->arg), pos); - - if (bPos != -1) - { - macro->replace(bPos, (*m->arg)->size(), arg); - bPos += (int)arg.size(); - } - - m->arg++; - m->argpos++; - - return bPos; -} - -void MacroList::EndReplacement(MacroList::Macro *m, std::string *macro) -{ - if (m->arg != m->argList.end()) - { - CError->ErrorMsg(Err_MacroParamCount, m->symbol.c_str()); - } - - m->arg = m->argList.begin(); - m->argpos = 0; -} - -MacroList::Macro *MacroList::AddMacroBegin(std::string &symbol, std::string &mac) -{ - Macro *macro = new Macro; - macro->macro.assign(mac); - macro->symbol.assign(symbol); - return macro; -} - -void MacroList::AddMacroArgument(MacroList::Macro *m, std::string &arg) -{ - std::string *sArg = new std::string(arg); - m->argList.push_back(sArg); -} - -void MacroList::AddMacroEnd(MacroList::Macro *m) -{ - List.push_back(m); -} - -MacroList::Macro *MacroList::FindMacro(std::string &sym) -{ - std::vector::iterator i; - for (i=List.begin(); i!=List.end(); i++) - { - if ((*i)->macro.compare(sym) == 0) - return (*i); - } - - return NULL; -} - -void MacroList::SearchAndReplace(std::string &text) -{ - std::vector::iterator i; - MacroList::Macro *m = NULL; - int pos=0, symPos=0, bPos=0, argPos=0; - - for (i=List.begin(); i!=List.end(); i++) - { - m = (*i); - pos = FindSymbol(text, m->symbol, 0); - if (pos != -1) - { - /* Strip the arguments */ - std::string argstring; - symPos = pos + (int)m->symbol.size(); - argstring.assign(text.substr(symPos+1, text.size()-symPos)); - std::vector argList; - ((Compiler *)Cmp)->FindArguments(argstring, argList, bPos, true); - /* Build the macro */ - std::string *ms; - ms = BeginReplacement(m); - std::vector::iterator j; - for (j=argList.begin(); j!=argList.end(); j++) - { - argPos = ReplaceArgument(m, ms, *(*j), argPos); - } - EndReplacement(m, ms); - /* Search and replace */ - text.replace(pos, bPos-pos, *ms); - /* Cleanup */ - delete ms; - i = List.begin(); - } - } -} - diff --git a/compiler/scasm/amx_macro.h b/compiler/scasm/amx_macro.h deleted file mode 100755 index e8445f27..00000000 --- a/compiler/scasm/amx_macro.h +++ /dev/null @@ -1,58 +0,0 @@ -/* AMX Assembler - * Copyright (C)2004 David "BAILOPAN" Anderson - * - * This software is provided 'as-is', without any express or implied - * warranty. In no event will the authors be held liable for any damages - * arising from the use of this software. - * - * Permission is granted to anyone to use this software for any purpose, - * including commercial applications, and to alter it and redistribute it - * freely, subject to the following restrictions: - * - * 1. The origin of this software must not be misrepresented; you must not - * claim that you wrote the original software. If you use this software - * in a product, an acknowledgment in the product documentation would be - * appreciated but is not required. - * 2. Altered source versions must be plainly marked as such, and must not be - * misrepresented as being the original software. - * 3. This notice may not be removed or altered from any source distribution. - * - * Version: $Id: amx_macro.h 821 2004-08-11 08:18:14Z dvander $ - */ - -#ifndef _INCLUDE_MACRO_H -#define _INCLUDE_MACRO_H - -class MacroList -{ -public: - class Macro - { - public: - ~Macro(); - std::vector::iterator arg; - std::vector argList; - std::string symbol; - std::string macro; - int argpos; - }; -public: - MacroList(); - MacroList(void *c); - ~MacroList(); - void Clear(); - MacroList::Macro *AddMacroBegin(std::string &symbol, std::string &mac); - void AddMacroArgument(MacroList::Macro *m, std::string &arg); - void AddMacroEnd(MacroList::Macro *m); - MacroList::Macro *FindMacro(std::string &sym); - std::string *BeginReplacement(MacroList::Macro *macro); - int ReplaceArgument(MacroList::Macro *m, std::string *macro, std::string &arg, int pos); - void EndReplacement(MacroList::Macro *m, std::string *macro); - void SearchAndReplace(std::string &text); -private: - std::vector List; - ErrorMngr *CError; - void *Cmp; -}; - -#endif //_INCLUDE_MACRO_H diff --git a/compiler/scasm/amx_nametable.h b/compiler/scasm/amx_nametable.h deleted file mode 100755 index 80df9f7c..00000000 --- a/compiler/scasm/amx_nametable.h +++ /dev/null @@ -1,41 +0,0 @@ -/* AMX Assembler - * Copyright (C)2004 David "BAILOPAN" Anderson - * - * This software is provided 'as-is', without any express or implied - * warranty. In no event will the authors be held liable for any damages - * arising from the use of this software. - * - * Permission is granted to anyone to use this software for any purpose, - * including commercial applications, and to alter it and redistribute it - * freely, subject to the following restrictions: - * - * 1. The origin of this software must not be misrepresented; you must not - * claim that you wrote the original software. If you use this software - * in a product, an acknowledgment in the product documentation would be - * appreciated but is not required. - * 2. Altered source versions must be plainly marked as such, and must not be - * misrepresented as being the original software. - * 3. This notice may not be removed or altered from any source distribution. - * - * Version: $Id: amx_nametable.h 826 2004-08-11 10:01:56Z dvander $ - */ - -#ifndef _INCLUDE_NAMETABLE_H -#define _INCLUDE_NAMETABLE_H - -class NameRecord -{ -public: - const char *Name; - int32_t offset; -}; - -class AddrTable -{ -public: - int32_t addr; - int32_t offset; -}; - -#endif //_INCLUDE_NAMETABLE_H - diff --git a/compiler/scasm/amx_natives.cpp b/compiler/scasm/amx_natives.cpp deleted file mode 100755 index 710e1129..00000000 --- a/compiler/scasm/amx_natives.cpp +++ /dev/null @@ -1,94 +0,0 @@ -/* AMX Assembler - * Copyright (C)2004 David "BAILOPAN" Anderson - * - * This software is provided 'as-is', without any express or implied - * warranty. In no event will the authors be held liable for any damages - * arising from the use of this software. - * - * Permission is granted to anyone to use this software for any purpose, - * including commercial applications, and to alter it and redistribute it - * freely, subject to the following restrictions: - * - * 1. The origin of this software must not be misrepresented; you must not - * claim that you wrote the original software. If you use this software - * in a product, an acknowledgment in the product documentation would be - * appreciated but is not required. - * 2. Altered source versions must be plainly marked as such, and must not be - * misrepresented as being the original software. - * 3. This notice may not be removed or altered from any source distribution. - * - * Version: $Id: amx_natives.cpp 826 2004-08-11 10:01:56Z dvander $ - */ - -#include "amxasm.h" - -NativeMngr::~NativeMngr() -{ - Clear(); -} - -void NativeMngr::Clear() -{ - std::vector::iterator i; - - for (i=List.begin(); i!=List.end(); i++) - { - if ( (*i) ) - delete (*i); - } - - List.clear(); -} - -void NativeMngr::AddNative(SymbolList::Symbol *S) -{ - NativeMngr::Native *N = new NativeMngr::Native; - - N->S = S; - N->used = false; - - List.push_back(N); -} - -int NativeMngr::GetNativeId(std::string &sym) -{ - int pos = 0; - std::vector::iterator i; - - for (i=List.begin(); i!=List.end(); i++) - { - if ( (*i)->S->IsEqual(sym) ) - { - return pos; - } - pos++; - } - - return ncip; -} - -NativeMngr::Native *NativeMngr::FindNative(std::string &sym) -{ - std::vector::iterator i; - - for (i=List.begin(); i!=List.end(); i++) - { - if ( (*i)->S->IsEqual(sym) ) - { - return (*i); - } - } - - return NULL; -} - -void NativeMngr::GetNatives(std::vector &nList) -{ - std::vector::iterator i; - - for (i=List.begin(); i!=List.end(); i++) - { - nList.push_back( (*i) ); - } -} - diff --git a/compiler/scasm/amx_natives.h b/compiler/scasm/amx_natives.h deleted file mode 100755 index d570ee1f..00000000 --- a/compiler/scasm/amx_natives.h +++ /dev/null @@ -1,49 +0,0 @@ -/* AMX Assembler - * Copyright (C)2004 David "BAILOPAN" Anderson - * - * This software is provided 'as-is', without any express or implied - * warranty. In no event will the authors be held liable for any damages - * arising from the use of this software. - * - * Permission is granted to anyone to use this software for any purpose, - * including commercial applications, and to alter it and redistribute it - * freely, subject to the following restrictions: - * - * 1. The origin of this software must not be misrepresented; you must not - * claim that you wrote the original software. If you use this software - * in a product, an acknowledgment in the product documentation would be - * appreciated but is not required. - * 2. Altered source versions must be plainly marked as such, and must not be - * misrepresented as being the original software. - * 3. This notice may not be removed or altered from any source distribution. - * - * Version: $Id: amx_natives.h 821 2004-08-11 08:18:14Z dvander $ - */ - -#ifndef _INCLUDE_NATIVES_H -#define _INCLUDE_NATIVES_H - -class NativeMngr -{ -public: - class Native - { - public: - Native() { used = false; S = NULL; } - SymbolList::Symbol *S; - bool used; - }; -public: - ~NativeMngr(); - void AddNative(SymbolList::Symbol *S); - void Clear(); - NativeMngr::Native *FindNative(std::string &sym); - int GetNativeId(std::string &sym); - void GetNatives(std::vector &nList); -public: - static const int ncip = -1; -private: - std::vector List; -}; - -#endif //_INCLUDE_NATIVES_H diff --git a/compiler/scasm/amx_parser.cpp b/compiler/scasm/amx_parser.cpp deleted file mode 100755 index 7ed81a96..00000000 --- a/compiler/scasm/amx_parser.cpp +++ /dev/null @@ -1,209 +0,0 @@ -/* AMX Assembler - * Copyright (C)2004 David "BAILOPAN" Anderson - * - * This software is provided 'as-is', without any express or implied - * warranty. In no event will the authors be held liable for any damages - * arising from the use of this software. - * - * Permission is granted to anyone to use this software for any purpose, - * including commercial applications, and to alter it and redistribute it - * freely, subject to the following restrictions: - * - * 1. The origin of this software must not be misrepresented; you must not - * claim that you wrote the original software. If you use this software - * in a product, an acknowledgment in the product documentation would be - * appreciated but is not required. - * 2. Altered source versions must be plainly marked as such, and must not be - * misrepresented as being the original software. - * 3. This notice may not be removed or altered from any source distribution. - * - * Version: $Id: amx_parser.cpp 826 2004-08-11 10:01:56Z dvander $ - */ - -#include "amxasm.h" - -char isletter(char c) -{ - if (c >= 65 && c <= 90) - return c; - if (c >= 97 && c <= 122) - return c; - if (c == '_') - return c; - return 0; -} - -char expr(char c) -{ - if (c == '(') - return ')'; - if (c == ')') - return '('; - return 0; -} - -char literal(char c) -{ - if (c == '"') - return '"'; - if (c == '\'') - return '\''; - return 0; -} - -void StripComments(std::string &text) -{ - size_t i = 0; - char c = 0, l = 0; - - for (i=0; i=0; i--) - { - if (!isspace(text[i]) - || (isspace(text[i]) && (i==0))) - { - text.erase(i+1, text.size()-1-i); - break; - } - } - } - - if (text.size() == 1) - { - if (isspace(text[0])) - { - text.clear(); - return; - } - } -} - -/* This is a very simple symbol searcher - * It only restricts the pattern location to outside of - * string literals and other symbols. - */ -int FindSymbol(std::string &text, const std::string &sym, int startPos = 0) -{ - unsigned int i = 0; - char c = 0, d = 0, l = 0; - - for (i=startPos; i text.size() - i) - break; - - /* Skip literal strings */ - if (l) - { - if (d == l) - l = 0; - c = d; - continue; - } else { - l = literal(d); - if (l) - { - c = d; - continue; - } - } - - /* If the last character was a letter, we're in a symbol already */ - if (isletter(c)) - { - c = d; - continue; - } - - /* If the current character is a letter, test for a symbol */ - if (text.compare(i, sym.size(), sym) == 0) - return i; - - c = d; - } - - return -1; -} - diff --git a/compiler/scasm/amx_parser.h b/compiler/scasm/amx_parser.h deleted file mode 100755 index 512e3e34..00000000 --- a/compiler/scasm/amx_parser.h +++ /dev/null @@ -1,36 +0,0 @@ -/* AMX Assembler - * Copyright (C)2004 David "BAILOPAN" Anderson - * - * This software is provided 'as-is', without any express or implied - * warranty. In no event will the authors be held liable for any damages - * arising from the use of this software. - * - * Permission is granted to anyone to use this software for any purpose, - * including commercial applications, and to alter it and redistribute it - * freely, subject to the following restrictions: - * - * 1. The origin of this software must not be misrepresented; you must not - * claim that you wrote the original software. If you use this software - * in a product, an acknowledgment in the product documentation would be - * appreciated but is not required. - * 2. Altered source versions must be plainly marked as such, and must not be - * misrepresented as being the original software. - * 3. This notice may not be removed or altered from any source distribution. - * - * Version: $Id: amx_parser.h 821 2004-08-11 08:18:14Z dvander $ - */ - -#ifndef _INCLUDE_PARSER_H -#define _INCLUDE_PARSER_H - -void StringBreak(std::string &Source, std::string &Left, std::string &Right); -int FindArguments(std::string &text, std::vector &List, int &end); -int FindSymbol(std::string &text, const std::string &sym, int startPos); -void ProcessDirective(std::string &text); -void StripComments(std::string &text); -void Strip(std::string &text); -char isletter(char c); -char literal(char c); -char expr(char c); - -#endif //_INCLUDE_PARSER_H diff --git a/compiler/scasm/amx_proc.cpp b/compiler/scasm/amx_proc.cpp deleted file mode 100755 index 6dfb1f73..00000000 --- a/compiler/scasm/amx_proc.cpp +++ /dev/null @@ -1,159 +0,0 @@ -/* AMX Assembler - * Copyright (C)2004 David "BAILOPAN" Anderson - * - * This software is provided 'as-is', without any express or implied - * warranty. In no event will the authors be held liable for any damages - * arising from the use of this software. - * - * Permission is granted to anyone to use this software for any purpose, - * including commercial applications, and to alter it and redistribute it - * freely, subject to the following restrictions: - * - * 1. The origin of this software must not be misrepresented; you must not - * claim that you wrote the original software. If you use this software - * in a product, an acknowledgment in the product documentation would be - * appreciated but is not required. - * 2. Altered source versions must be plainly marked as such, and must not be - * misrepresented as being the original software. - * 3. This notice may not be removed or altered from any source distribution. - * - * Version: $Id: amx_proc.cpp 926 2004-08-21 18:57:47Z dvander $ - */ - -#include "amxasm.h" - -ProcMngr::ProcMngr() -{ - CError = 0; - printf("Instantiated without a compiler!\n"); - assert(CError); -} - -ProcMngr::ProcMngr(ErrorMngr *e) -{ - CError = e; -} - -ProcMngr::~ProcMngr() -{ - Clear(); -} - -void ProcMngr::Clear() -{ - std::vector::iterator i; - - for (i=List.begin(); i!=List.end(); i++) - { - if ( (*i) ) - delete (*i); - } - - List.clear(); -} - -ProcMngr::AsmProc *ProcMngr::AddProc(SymbolList::Symbol *Symbol, Asm *ASM) -{ - ProcMngr::AsmProc *a = new ProcMngr::AsmProc; - - a->ASM = ASM; - a->Symbol = Symbol; - a->pb = false; - - List.push_back(a); - - return a; -} - -bool ProcMngr::SetPublic(std::string &sym) -{ - ProcMngr::AsmProc *a = NULL; - - a = FindProc(sym); - - if (a == NULL) - return false; - - a->pb = true; - - return true; -} - -void ProcMngr::GetPublics(std::vector &pbList) -{ - std::vector::reverse_iterator i; - - for (i=List.rbegin(); i!=List.rend(); i++) - { - if ((*i)->pb == true) - { - pbList.push_back( (*i) ); - } - } -} - -ProcMngr::AsmProc *ProcMngr::FindProc(std::string &sym) -{ - std::vector::iterator i; - - for (i = List.begin(); i != List.end(); i++) - { - if ( (*i)->Symbol->IsEqual(sym) ) - { - return (*i); - } - } - - return NULL; -} - -int ProcMngr::GetCip(std::string &sym) -{ - ProcMngr::AsmProc *p = NULL; - - p = FindProc(sym); - - if (p == NULL || p->ASM == NULL) - return ncip; - - return p->ASM->cip; -} - -void ProcMngr::QueueProc(std::string &sym, Asm *ASM) -{ - std::string d(sym); - PQ[d].push(ASM); -} - -void ProcMngr::CompleteQueue() -{ - std::map >::iterator i; - std::string search; - ProcMngr::AsmProc *p = 0; - std::stack *stk = 0; - - for (i=PQ.begin(); i!=PQ.end(); i++) - { - search.assign( (*i).first ); - p = FindProc(search); - stk = &((*i).second); - - if (p == NULL || p->ASM == NULL) - { - while (!stk->empty()) - { - CError->SetLine(stk->top()->line); - CError->ErrorMsg(Err_Invalid_Proc); - stk->pop(); - } - } else { - while (!stk->empty()) - { - stk->top()->cip = p->ASM->cip; - stk->top()->params[0] = p->ASM->cip; - stk->pop(); - } - } - } -} - diff --git a/compiler/scasm/amx_proc.h b/compiler/scasm/amx_proc.h deleted file mode 100755 index 4bf2a35a..00000000 --- a/compiler/scasm/amx_proc.h +++ /dev/null @@ -1,56 +0,0 @@ -/* AMX Assembler - * Copyright (C)2004 David "BAILOPAN" Anderson - * - * This software is provided 'as-is', without any express or implied - * warranty. In no event will the authors be held liable for any damages - * arising from the use of this software. - * - * Permission is granted to anyone to use this software for any purpose, - * including commercial applications, and to alter it and redistribute it - * freely, subject to the following restrictions: - * - * 1. The origin of this software must not be misrepresented; you must not - * claim that you wrote the original software. If you use this software - * in a product, an acknowledgment in the product documentation would be - * appreciated but is not required. - * 2. Altered source versions must be plainly marked as such, and must not be - * misrepresented as being the original software. - * 3. This notice may not be removed or altered from any source distribution. - * - * Version: $Id: amx_proc.h 835 2004-08-12 16:31:50Z dvander $ - */ - -#ifndef _INCLUDE_AMXPROC_H -#define _INCLUDE_AMXPROC_H - -class ProcMngr -{ -public: - class AsmProc - { - public: - SymbolList::Symbol *Symbol; - Asm *ASM; - bool pb; - }; -public: - ~ProcMngr(); - ProcMngr(); - ProcMngr(ErrorMngr *e); - ProcMngr::AsmProc *AddProc(SymbolList::Symbol *Symbol, Asm *ASM); - ProcMngr::AsmProc *FindProc(std::string &sym); - int GetCip(std::string &sym); - bool SetPublic(std::string &sym); - void GetPublics(std::vector &pbList); - void QueueProc(std::string &sym, Asm *ASM); - void CompleteQueue(); - void Clear(); -private: - std::vector List; - std::map > PQ; - ErrorMngr *CError; -public: - static const int ncip = -1; -}; - -#endif //_INCLUDE_AMXPROC_H diff --git a/compiler/scasm/amx_symbol.cpp b/compiler/scasm/amx_symbol.cpp deleted file mode 100755 index 871cbdba..00000000 --- a/compiler/scasm/amx_symbol.cpp +++ /dev/null @@ -1,140 +0,0 @@ -/* AMX Assembler - * Copyright (C)2004 David "BAILOPAN" Anderson - * - * This software is provided 'as-is', without any express or implied - * warranty. In no event will the authors be held liable for any damages - * arising from the use of this software. - * - * Permission is granted to anyone to use this software for any purpose, - * including commercial applications, and to alter it and redistribute it - * freely, subject to the following restrictions: - * - * 1. The origin of this software must not be misrepresented; you must not - * claim that you wrote the original software. If you use this software - * in a product, an acknowledgment in the product documentation would be - * appreciated but is not required. - * 2. Altered source versions must be plainly marked as such, and must not be - * misrepresented as being the original software. - * 3. This notice may not be removed or altered from any source distribution. - * - * Version: $Id: amx_symbol.cpp 835 2004-08-12 16:31:50Z dvander $ - */ - -#include "amxasm.h" - -bool is_valid_symbol_marker(char c) -{ - if (c >= '0' && c <= '9') - return true; - if (isletter(c)) - return true; - return false; -} - -bool IsValidSymbol(std::string &text) -{ - size_t i = 0; - - if (!text.size() || !isletter(text[0])) - { - return false; - } - - for (i=0; i::iterator i; - - for (i=List.begin(); i!=List.end(); i++) - { - if ( (*i) ) - delete (*i); - } - - List.clear(); -} - -SymbolList::~SymbolList() -{ - Clear(); -} - -bool SymbolList::Symbol::IsEqual(std::string &s) -{ - return (sym.compare(s)==0); -} - -SymbolList::Symbol* SymbolList::AddSymbol(const char *szSym, SymbolType type, int line) -{ - SymbolList::Symbol *S = new SymbolList::Symbol; - - S->line = line; - S->type = type; - S->sym.assign(szSym); - - List.push_back(S); - return S; -} - -SymbolList::Symbol *SymbolList::AddSymbol(std::string &sym, SymbolType type, int line) -{ - SymbolList::Symbol *S = new SymbolList::Symbol; - - S->line = line; - S->type = type; - S->sym.assign(sym); - - List.push_back(S); - return S; -} - -SymbolList::Symbol* SymbolList::FindSymbol(std::string &sym) -{ - std::list::iterator i; - for (i=List.begin(); i!=List.end(); i++) - { - if ((*i)->IsEqual(sym)) - return (*i); - } - - return NULL; -} - -void SymbolList::PrintTable() -{ - std::list::iterator i; - for (i=List.begin(); i!=List.end(); i++) - { - printf("Symbol \"%s\" defined on line %d\n", (*i)->sym.c_str(), (*i)->line); - } -} - -bool SymbolList::EraseSymbol(std::string &sym) -{ - std::list::iterator i; - SymbolList::Symbol *S = 0; - - for (i=List.begin(); i!=List.end(); i++) - { - S = (*i); - if ( S && S->IsEqual(sym) ) - { - delete S; - i = List.erase(i); - S = 0; - return true; - } - } - - return false; -} diff --git a/compiler/scasm/amx_symbol.h b/compiler/scasm/amx_symbol.h deleted file mode 100755 index caa6f206..00000000 --- a/compiler/scasm/amx_symbol.h +++ /dev/null @@ -1,65 +0,0 @@ -/* AMX Assembler - * Copyright (C)2004 David "BAILOPAN" Anderson - * - * This software is provided 'as-is', without any express or implied - * warranty. In no event will the authors be held liable for any damages - * arising from the use of this software. - * - * Permission is granted to anyone to use this software for any purpose, - * including commercial applications, and to alter it and redistribute it - * freely, subject to the following restrictions: - * - * 1. The origin of this software must not be misrepresented; you must not - * claim that you wrote the original software. If you use this software - * in a product, an acknowledgment in the product documentation would be - * appreciated but is not required. - * 2. Altered source versions must be plainly marked as such, and must not be - * misrepresented as being the original software. - * 3. This notice may not be removed or altered from any source distribution. - * - * Version: $Id: amx_symbol.h 835 2004-08-12 16:31:50Z dvander $ - */ - -#ifndef _INCLUDE_SYMBOL_H -#define _INCLUDE_SYMBOL_H - -bool IsValidSymbol(std::string &text); - -typedef enum -{ - Sym_None, - Sym_Define, - Sym_Macro, - Sym_Proc, - Sym_Dat, - Sym_Reserved, - Sym_Label, - Sym_Native, -} SymbolType; - -class SymbolList -{ -public: - class Symbol - { - public: - bool IsEqual(std::string &s); - SymbolType type; - std::string sym; - int line; - }; - -public: - ~SymbolList(); - SymbolList::Symbol* AddSymbol(std::string &sym, SymbolType type, int line); - SymbolList::Symbol* AddSymbol(const char *szSym, SymbolType type, int line); - SymbolList::Symbol* FindSymbol(std::string &sym); - bool EraseSymbol(std::string &sym); - void PrintTable(); - void Clear(); -private: - std::list List; -}; - - -#endif //_INCLUDE_SYMBOL_H diff --git a/compiler/scasm/amxasm.cpp b/compiler/scasm/amxasm.cpp deleted file mode 100755 index c1793406..00000000 --- a/compiler/scasm/amxasm.cpp +++ /dev/null @@ -1,143 +0,0 @@ -/* AMX Assembler - * Copyright (C)2004 David "BAILOPAN" Anderson - * - * This software is provided 'as-is', without any express or implied - * warranty. In no event will the authors be held liable for any damages - * arising from the use of this software. - * - * Permission is granted to anyone to use this software for any purpose, - * including commercial applications, and to alter it and redistribute it - * freely, subject to the following restrictions: - * - * 1. The origin of this software must not be misrepresented; you must not - * claim that you wrote the original software. If you use this software - * in a product, an acknowledgment in the product documentation would be - * appreciated but is not required. - * 2. Altered source versions must be plainly marked as such, and must not be - * misrepresented as being the original software. - * 3. This notice may not be removed or altered from any source distribution. - * - * Version: $Id: amxasm.cpp 921 2004-08-21 06:20:27Z dvander $ - */ - -#include "amxasm.h" - -std::string filename; -std::string output_name; -Compiler Program; - -int main(int argc, char **argv) -{ - get_options(argc, argv, Program); - - if (filename.size() < 1) - { - print_version(); - print_options(); - exit(0); - } - - Program.Load(filename); - if (Program.Parse()) - { - if (Program.Compile(output_name.size() ? output_name : filename)) - printf("Done.\n"); - else - printf("Compile build failed.\n"); - } else { - printf("Compile failed.\n"); - } - - exit(0); -} - -void get_options(int argc, char **argv, Compiler &Prog) -{ - int i = 0; /* index */ - char opt_flag = 0; /* flag for option detection */ - char *option = 0; /* option pointer */ - for (i=1; i 2) - { - output_name.assign(&(argv[i][2])); - } else { - opt_flag = 'o'; - } - break; - } - case 'c': - { - Program.SetPack(); - opt_flag = 0; - break; - } - case 'v': - { - opt_flag = 0; /* no options expected */ - print_version(); - exit(0); - break; - } /* case */ - case 'd': - { - opt_flag = 0; - Prog.SetDebug(); - break; - } - case 'h': - { - opt_flag = 0; - Prog.SetDOpt(); - break; - } - case 'f': - { - opt_flag = 0; - Prog.SetDOpt(); - Prog.SetPack(); - } - } /* switch */ - } else { /* - */ - if (!opt_flag) - { - filename.assign(argv[i]); - } else { - switch (opt_flag) - { - case 'o': - { - output_name.assign(argv[i]); - break; - } - } - } - } /* if */ - } -} - -void print_version() -{ - printf("Small/AMX Assembler 1.02\n"); - printf("(C)2004 David 'BAILOPAN' Anderson\n"); -} - -void print_options() -{ - printf("\nOptions:\n"); - printf("\t-d\t\t- Add debug opcodes (will double file size)\n"); - printf("\t-v\t\t- Output version and exit\n"); - printf("\t-o\t\t- Specify file to write\n"); - printf("\t-c\t\t- Enable compact encoding\n"); - printf("\t-h\t\t- Optimize DAT section\n"); - printf("\t-f\t\t- Optimal Build\n"); - printf("\n"); -} diff --git a/compiler/scasm/amxasm.h b/compiler/scasm/amxasm.h deleted file mode 100755 index 287a26f7..00000000 --- a/compiler/scasm/amxasm.h +++ /dev/null @@ -1,225 +0,0 @@ -/* AMX Assembler - * Copyright (C)2004 David "BAILOPAN" Anderson - * - * This software is provided 'as-is', without any express or implied - * warranty. In no event will the authors be held liable for any damages - * arising from the use of this software. - * - * Permission is granted to anyone to use this software for any purpose, - * including commercial applications, and to alter it and redistribute it - * freely, subject to the following restrictions: - * - * 1. The origin of this software must not be misrepresented; you must not - * claim that you wrote the original software. If you use this software - * in a product, an acknowledgment in the product documentation would be - * appreciated but is not required. - * 2. Altered source versions must be plainly marked as such, and must not be - * misrepresented as being the original software. - * 3. This notice may not be removed or altered from any source distribution. - * - * Version: $Id: amxasm.h 824 2004-08-11 09:32:24Z dvander $ - */ - -#ifndef _INCLUDE_AMXASM_H -#define _INCLUDE_AMXASM_H - -//C includes -#include -#include -#include -#include -#include -//C++ includes -#include -#include -#include -#include -#include -#include -#include - -class Asm -{ -public: - int op; - std::vector params; - int cip; - int line; -}; - -#include "amx.h" -#include "amx_error.h" -#include "cexpr.h" -#include "amx_parser.h" -#include "amx_symbol.h" -#include "amx_macro.h" -#include "amx_define.h" -#include "amx_data.h" -#include "amx_proc.h" -#include "amx_label.h" -#include "amx_natives.h" -#include "amx_nametable.h" -#include "amx_compiler.h" //This should be last! - -#define SMALL_CELL_SIZE 32 - -typedef enum -{ - Asm_Invalid = -1, - Asm_None, - Asm_Data, - Asm_Code, - Asm_Public, - Asm_Native, -} AsmSection; - -/* From amx.c */ -typedef enum { - OP_NONE, /* invalid opcode */ - OP_LOAD_PRI, - OP_LOAD_ALT, - OP_LOAD_S_PRI, - OP_LOAD_S_ALT, - OP_LREF_PRI, - OP_LREF_ALT, - OP_LREF_S_PRI, - OP_LREF_S_ALT, - OP_LOAD_I, - OP_LODB_I, - OP_CONST_PRI, - OP_CONST_ALT, - OP_ADDR_PRI, - OP_ADDR_ALT, - OP_STOR_PRI, - OP_STOR_ALT, - OP_STOR_S_PRI, - OP_STOR_S_ALT, - OP_SREF_PRI, - OP_SREF_ALT, - OP_SREF_S_PRI, - OP_SREF_S_ALT, - OP_STOR_I, - OP_STRB_I, - OP_LIDX, - OP_LIDX_B, - OP_IDXADDR, - OP_IDXADDR_B, - OP_ALIGN_PRI, - OP_ALIGN_ALT, - OP_LCTRL, - OP_SCTRL, - OP_MOVE_PRI, - OP_MOVE_ALT, - OP_XCHG, - OP_PUSH_PRI, - OP_PUSH_ALT, - OP_PUSH_R, - OP_PUSH_C, - OP_PUSH, - OP_PUSH_S, - OP_POP_PRI, - OP_POP_ALT, - OP_STACK, - OP_HEAP, - OP_PROC, - OP_RET, - OP_RETN, - OP_CALL, - OP_CALL_PRI, - OP_JUMP, - OP_JREL, - OP_JZER, - OP_JNZ, - OP_JEQ, - OP_JNEQ, - OP_JLESS, - OP_JLEQ, - OP_JGRTR, - OP_JGEQ, - OP_JSLESS, - OP_JSLEQ, - OP_JSGRTR, - OP_JSGEQ, - OP_SHL, - OP_SHR, - OP_SSHR, - OP_SHL_C_PRI, - OP_SHL_C_ALT, - OP_SHR_C_PRI, - OP_SHR_C_ALT, - OP_SMUL, - OP_SDIV, - OP_SDIV_ALT, - OP_UMUL, - OP_UDIV, - OP_UDIV_ALT, - OP_ADD, - OP_SUB, - OP_SUB_ALT, - OP_AND, - OP_OR, - OP_XOR, - OP_NOT, - OP_NEG, - OP_INVERT, - OP_ADD_C, - OP_SMUL_C, - OP_ZERO_PRI, - OP_ZERO_ALT, - OP_ZERO, - OP_ZERO_S, - OP_SIGN_PRI, - OP_SIGN_ALT, - OP_EQ, - OP_NEQ, - OP_LESS, - OP_LEQ, - OP_GRTR, - OP_GEQ, - OP_SLESS, - OP_SLEQ, - OP_SGRTR, - OP_SGEQ, - OP_EQ_C_PRI, - OP_EQ_C_ALT, - OP_INC_PRI, - OP_INC_ALT, - OP_INC, - OP_INC_S, - OP_INC_I, - OP_DEC_PRI, - OP_DEC_ALT, - OP_DEC, - OP_DEC_S, - OP_DEC_I, - OP_MOVS, - OP_CMPS, - OP_FILL, - OP_HALT, - OP_BOUNDS, - OP_SYSREQ_PRI, - OP_SYSREQ_C, - OP_FILE, - OP_LINE, - OP_SYMBOL, - OP_SRANGE, - OP_JUMP_PRI, - OP_SWITCH, - OP_CASETBL, - OP_SWAP_PRI, - OP_SWAP_ALT, - OP_PUSHADDR, - OP_NOP, - OP_SYSREQ_D, - OP_SYMTAG, - /* ----- */ - OP_NUM_OPCODES -} OPCODE; - -void get_options(int argc, char **argv, Compiler &Prog); -void InitOpcodes(); -void DestroyArgList(std::vector &List); -void print_version(); -void print_options(); - -#endif //_INCLUDE_AMXASM_H diff --git a/compiler/scasm/assembler.sln b/compiler/scasm/assembler.sln deleted file mode 100644 index 8eb48566..00000000 --- a/compiler/scasm/assembler.sln +++ /dev/null @@ -1,20 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 11.00 -# Visual Studio 2010 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "assembler", "assembler.vcxproj", "{FFFC86BE-94E7-458A-A61B-4D0F3B45658B}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Win32 = Debug|Win32 - Release|Win32 = Release|Win32 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {FFFC86BE-94E7-458A-A61B-4D0F3B45658B}.Debug|Win32.ActiveCfg = Debug|Win32 - {FFFC86BE-94E7-458A-A61B-4D0F3B45658B}.Debug|Win32.Build.0 = Debug|Win32 - {FFFC86BE-94E7-458A-A61B-4D0F3B45658B}.Release|Win32.ActiveCfg = Release|Win32 - {FFFC86BE-94E7-458A-A61B-4D0F3B45658B}.Release|Win32.Build.0 = Release|Win32 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/compiler/scasm/assembler.vcxproj b/compiler/scasm/assembler.vcxproj deleted file mode 100644 index e2fe94b7..00000000 --- a/compiler/scasm/assembler.vcxproj +++ /dev/null @@ -1,123 +0,0 @@ - - - - - Debug - Win32 - - - Release - Win32 - - - - {FFFC86BE-94E7-458A-A61B-4D0F3B45658B} - assembler - Win32Proj - - - - Application - MultiByte - - - Application - MultiByte - - - - - - - - - - - - - - - <_ProjectFileVersion>10.0.40219.1 - true - false - AllRules.ruleset - - - AllRules.ruleset - - - sasm - sasm - - - - Disabled - WIN32;_DEBUG;_CONSOLE;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebug - false - - - Level3 - EditAndContinue - - - true - $(OutDir)assembler.pdb - Console - MachineX86 - - - - - WIN32;NDEBUG;_CONSOLE;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions) - MultiThreaded - false - - - Level3 - ProgramDatabase - - - true - Console - true - true - MachineX86 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/compiler/scasm/assembler.vcxproj.filters b/compiler/scasm/assembler.vcxproj.filters deleted file mode 100644 index 570fae74..00000000 --- a/compiler/scasm/assembler.vcxproj.filters +++ /dev/null @@ -1,95 +0,0 @@ - - - - - {4FC737F1-C7A5-4376-A066-2A32D752A2FF} - cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx - - - {93995380-89BD-4b04-88EB-625FBE52EBFB} - h;hpp;hxx;hm;inl;inc;xsd - - - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - \ No newline at end of file diff --git a/compiler/scasm/cexpr.cpp b/compiler/scasm/cexpr.cpp deleted file mode 100755 index 5a3efaab..00000000 --- a/compiler/scasm/cexpr.cpp +++ /dev/null @@ -1,545 +0,0 @@ -/* AMX Assembler - * Copyright (C)2004 David "BAILOPAN" Anderson - * - * This software is provided 'as-is', without any express or implied - * warranty. In no event will the authors be held liable for any damages - * arising from the use of this software. - * - * Permission is granted to anyone to use this software for any purpose, - * including commercial applications, and to alter it and redistribute it - * freely, subject to the following restrictions: - * - * 1. The origin of this software must not be misrepresented; you must not - * claim that you wrote the original software. If you use this software - * in a product, an acknowledgment in the product documentation would be - * appreciated but is not required. - * 2. Altered source versions must be plainly marked as such, and must not be - * misrepresented as being the original software. - * 3. This notice may not be removed or altered from any source distribution. - * - * Version: $Id: cexpr.cpp 921 2004-08-21 06:20:27Z dvander $ - */ - -#include -#include "amxasm.h" - -CExpr::CExpr() -{ - numVal = 0; - type = Val_None; - block = 0; - bDone = false; - CError = NULL; -} - -CExpr::CExpr(ErrorMngr *e) -{ - numVal = 0; - type = Val_None; - block = 0; - bDone = false; - CError = e; -} - -CExpr::CExpr(ErrorMngr *e, std::string &text) -{ - numVal = 0; - type = Val_None; - block = 0; - CError = e; - bDone = false; - data.assign(text); -} - -void CExpr::Clear() -{ - if (type == Val_Block && block) - delete [] block; - numVal = 0; - type = Val_None; - block = 0; -} - -CExpr::~CExpr() -{ - if (block && type == Val_Block) - delete [] block; -} - -char CExpr::IsLiteral(char c) -{ - if (c == '"') - return '"'; - if (c == '\'') - return '\''; - return 0; -} - -char CExpr::IsHex(char c) -{ - if (c >= '0' && c <= '9') - return c; - if (c >= 'A' && c <= 'F') - return c; - if (c >= 'a' && c <= 'f') - return c; - return 0; -} - -cExprType CExpr::GetType() -{ - return type; -} - -void CExpr::Set(std::string &text) -{ - data.assign(text); -} - -int CExpr::DeHex(std::string blk) -{ - size_t pos = 0, xc = 0, xpos = 0, ms = 0; - /* run through the characters */ - for (pos = 0; pos < blk.size(); pos++) - { - if (blk[pos] == 'x') - { - xc++; - if (xc > 1) - break; - xpos = pos; - } else if (blk[pos] == '-') { - if (pos != 0) - ms = 1; - } else if (blk[pos] != ' ' - && (blk[pos] < '0' || blk[pos] > '9') - && (!xc || (xc && !IsHex(blk[pos])))) { - CError->ErrorMsg(Err_Unexpected_Char, blk[pos]); - return 0; - } - } - if (xc > 1) - { - CError->ErrorMsg(Err_Unexpected_Char, 'x'); - return 0; - } - if (ms) - { - CError->ErrorMsg(Err_Unexpected_Char, '-'); - return 0; - } - if (xc) - { - if (xpos == 0 || blk[xpos-1] != '0') - { - if (CError) - CError->ErrorMsg(Warning_Hex_Start); - } - blk.erase(0, xpos+1); - pos = 0; - int j = 0; - while (blk[pos]) - { - blk[pos] -= 48; - if (blk[pos] > 16) - blk[pos] -= 7; - if (blk[pos] >= 16) - blk[pos] -= 32; - if (blk[pos] >= 16 || blk[pos] < 0) - { - if (CError) - { - CError->ErrorMsg(Err_Unexpected_Char, blk[pos]); - } - return 0; - } - j *= 16; - j += blk[pos]; - pos++; - } - - return j; - } - - return atoi(blk.c_str()); -} - -int CExpr::Size() -{ - if (type == Val_String || type == Val_Block) - return numVal; - if (type == Val_Number) - return (SMALL_CELL_SIZE/8); - return 0; -} - -const char *CExpr::GetString(int *d) -{ - const char *ret = 0; - - if (type == Val_String) - { - ret = data.c_str(); - if (d != NULL) - *d = numVal; - } else if (type == Val_Block) { - ret = block; - if (d != NULL) - *d = numVal; - } - - return ret; -} - -int CExpr::GetNumber() -{ - if (type == Val_Float) - { - memcpy((void*)&numVal, (void*)&fData, sizeof(float)); - } - return numVal; -} - -/* Returns true if the expr can be evaluated */ -int CExpr::Analyze() -{ - size_t pos = 0, xc = 0, xpos = 0, fd = 0; - /* run through the characters */ - if (data.compare("$") == 0) - { - return 1; - } - for (pos = 0; pos < data.size(); pos++) - { - if (data[pos] == '.') - { - fd++; - if (fd > 1 || xc) - return 0; - } else if (data[pos] == 'x') { - xc++; - if (xc > 1 || fd) - return 0; - xpos = pos; - } else if (data[pos] != ' ' - && (data[pos] < '0' || data[pos] > '9') - && (!xc || (xc && !IsHex(data[pos])))) { - return 0; - } - } - - return 1; -} - -cExprType CExpr::Evaluate(int symNum) -{ - size_t i = 0; - char litc = 0, c = 0; - cExprType t = Val_None; - std::string num; - - block = new char[2]; - bDone = true; - - if (data.compare("$") == 0) - { - type = Val_Number; - numVal = CError->CurCip(); - Update(); - return t; - } else { - if (CError->IsSymbol(data) - || (IsValidSymbol(data) && symNum == Sym_Label || symNum == Sym_Proc)) - { - type = Val_Number; - numVal = CError->DerefSymbol(data, symNum); - Update(); - return t; - } - } - - if (data.find('\'', 0) != std::string::npos || data.find('"', 0) != std::string::npos) - { - /* STRESS TEST */ - for (i=0; iErrorMsg(Err_String_Terminate); - t = Val_Error; - } else { - char cp = data[i+1]; - char *nc = 0; - if (cp == 't') - nc = "\t"; - else if (cp == 'n') - nc = "\n"; - else if (cp == '\\') - nc = "\\"; - else if (cp == '"') - nc = "\""; - else if (cp == '\'') - nc = "'"; - if (nc) - { - data.replace(i, 2, nc); - continue; - } - } - } - if (IsLiteral(c) != 0) - { - if (litc == IsLiteral(c)) - { - litc = 0; - /* The literal has terminated. Expect no more. */ - if (i != data.size() - 1) - { - t = Val_Error; - if (CError) - CError->ErrorMsg(Err_String_Extra, data[i+1]); - } else { - /* STRING DISCOVERED */ - t = Val_String; - /* Erase literals */ - data.erase(0, 1); - data.erase(data.size()-1, 1); - numVal = (int)(data.size()+1); - break; - } - } else { - litc = IsLiteral(c); - } - } - } - } else if (data.find(' ', 0) != std::string::npos) { - /* Build a mem block from values, store length in numVal */ - t = Val_Block; - size_t pos = 0, npos = 0; - numVal = 0; - pos = data.find(' ', 0); - block[numVal++] = DeHex(data.substr(0, pos)); - while ((pos = data.find(' ', pos)) != std::string::npos) - { - npos = data.find(' ', pos+1); - block = (char *)realloc(block, numVal+2); - if (npos != std::string::npos) - { - block[numVal] = (char)DeHex(data.substr(pos, npos-pos)); - } else { - block[numVal] = (char)DeHex(data.substr(pos)); - } - pos++; - numVal++; - } - } else { - if (data.find('.', 0) != std::string::npos) - { - /* Get as a float */ - fData = (float)atof(data.c_str()); - t = Val_Float; - memcpy((void*)&numVal, (void*)&fData, sizeof(float)); - } else { - /* Just get the number */ - t = Val_Number; - numVal = DeHex(data); - char buf[32]; - sprintf(buf, "%d", numVal); - data.assign(buf); - } - } - - if (litc) - { - if (CError) - CError->ErrorMsg(Err_String_Terminate); - } - - type = t; - - return t; -} - -void CExpr::Not() -{ - if (type != Val_Number) - { - if (CError) - CError->ErrorMsg(Err_Bad_Not); - } - numVal = ~numVal; -} - -void CExpr::Oper(OpToken op, CExpr &e) -{ - switch (op) - { - case Token_Xor: - { - if (e.GetType() != Val_Number) - { - if (CError) - CError->ErrorMsg(Err_Invalid_Operator); - } - numVal = numVal ^ e.GetNumber(); - break; - } - case Token_Shr: - { - if (e.GetType() != Val_Number) - { - if (CError) - CError->ErrorMsg(Err_Invalid_Operator); - } - numVal >>= e.GetNumber(); - break; - } - case Token_Sub: - { - if (GetType() == Val_Number) - { - if (e.GetType() == Val_Number) - { - numVal -= e.GetNumber(); - } else if (e.GetType() == Val_Float) { - numVal -= (int)e.GetFloat(); - } - } else if (GetType() == Val_Float) { - if (e.GetType() == Val_Number) - { - fData -= (float)e.GetNumber(); - } else if (e.GetType() == Val_Float) { - fData -= e.GetFloat(); - } - } - break; - } - case Token_Mod: - { - if (e.GetType() != Val_Number) - { - if (CError) - CError->ErrorMsg(Err_Invalid_Operator); - } - numVal = numVal % e.GetNumber(); - break; - } - case Token_Mul: - { - if (GetType() == Val_Number) - { - if (e.GetType() == Val_Number) - { - numVal *= e.GetNumber(); - } else if (e.GetType() == Val_Float) { - numVal *= (int)e.GetFloat(); - } - } else if (GetType() == Val_Float) { - if (e.GetType() == Val_Number) - { - fData *= (float)e.GetNumber(); - } else if (e.GetType() == Val_Float) { - fData *= e.GetFloat(); - } - } - break; - } - case Token_Div: - { - if (GetType() == Val_Number) - { - if (e.GetType() == Val_Number) - { - numVal /= e.GetNumber(); - } else if (e.GetType() == Val_Float) { - numVal /= (int)e.GetFloat(); - } - } else if (GetType() == Val_Float) { - if (e.GetType() == Val_Number) - { - fData /= (float)e.GetNumber(); - } else if (e.GetType() == Val_Float) { - fData /= e.GetFloat(); - } - } - break; - } - case Token_Shl: - { - if (e.GetType() != Val_Number) - { - if (CError) - CError->ErrorMsg(Err_Invalid_Operator); - } - numVal <<= e.GetNumber(); - break; - } - case Token_And: - { - if (e.GetType() != Val_Number) - { - if (CError) - CError->ErrorMsg(Err_Invalid_Operator); - } - numVal &= e.GetNumber(); - break; - } - case Token_Or: - { - if (e.GetType() != Val_Number) - { - if (CError) - CError->ErrorMsg(Err_Invalid_Operator); - } - numVal |= e.GetNumber(); - break; - } - case Token_Add: - { - if (GetType() == Val_Number) - { - if (e.GetType() == Val_Number) - { - numVal += e.GetNumber(); - } else if (e.GetType() == Val_Float) { - numVal += (int)e.GetFloat(); - } - } else if (GetType() == Val_Float) { - if (e.GetType() == Val_Number) - { - fData += (float)e.GetNumber(); - } else if (e.GetType() == Val_Float) { - fData += e.GetFloat(); - } - } - break; - } - default: - { - numVal = 0; - break; - } - } - - Update(); -} - -void CExpr::Update() -{ - if (type == Val_Float) - { - numVal = (int)fData; - } else if (type == Val_Number) { - fData = (float)numVal; - } - if (type != Val_String && type != Val_Block) - { - char buf[24]; - sprintf(buf, "%d", numVal); - data.assign(buf); - } -} diff --git a/compiler/scasm/cexpr.h b/compiler/scasm/cexpr.h deleted file mode 100755 index 97047513..00000000 --- a/compiler/scasm/cexpr.h +++ /dev/null @@ -1,96 +0,0 @@ -/* AMX Assembler - * Copyright (C)2004 David "BAILOPAN" Anderson - * - * This software is provided 'as-is', without any express or implied - * warranty. In no event will the authors be held liable for any damages - * arising from the use of this software. - * - * Permission is granted to anyone to use this software for any purpose, - * including commercial applications, and to alter it and redistribute it - * freely, subject to the following restrictions: - * - * 1. The origin of this software must not be misrepresented; you must not - * claim that you wrote the original software. If you use this software - * in a product, an acknowledgment in the product documentation would be - * appreciated but is not required. - * 2. Altered source versions must be plainly marked as such, and must not be - * misrepresented as being the original software. - * 3. This notice may not be removed or altered from any source distribution. - * - * Version: $Id: cexpr.h 821 2004-08-11 08:18:14Z dvander $ - */ - -#ifndef _INCLUDE_CEXPR_H -#define _INCLUDE_CEXPR_H - -/* This class is used for a single expression element - * It reads in a symbol and evaluates it. - */ - -typedef enum -{ - Token_None, - Token_Or, - Token_Xor, - Token_And, - Token_Shr, - Token_Shl, - Token_Mod, - Token_Div, - Token_Mul, - Token_Sub, - Token_Add, - Token_Not, - /* End */ - Tokens_Total, -} OpToken; - -typedef enum -{ - Val_None, - Val_Error, - Val_String, - Val_String_Hex, - Val_String_Number, - Val_Number_Hex, - Val_Number, - Val_Block, - Val_Hex, - Val_Float, -} cExprType; - -class CExpr -{ -public: - CExpr(); - CExpr(ErrorMngr *e); - CExpr(ErrorMngr *e, std::string &text); - void Set(std::string &text); - const char *GetString(int *d=NULL); - int Analyze(); - cExprType Evaluate(int symNum = 0); - cExprType GetType(); - int GetNumber(); - float GetFloat() { return fData; } - int Size(); - void Clear(); - void Not(); - void Oper(OpToken op, CExpr &e); - ~CExpr(); -private: - void Update(); - char IsHex(char c); - char IsLiteral(char c); - int DeHex(std::string blk); -private: - char *block; - std::string data; - cExprType type; - float fData; - int numVal; - bool bDone; -private: - ErrorMngr *CError; -}; - -#endif //_INCLUDE_CEXPR_H diff --git a/compiler/scasm/plugin.asm b/compiler/scasm/plugin.asm deleted file mode 100755 index d5c50d9d..00000000 --- a/compiler/scasm/plugin.asm +++ /dev/null @@ -1,80 +0,0 @@ -;(C)2004 David "BAILOPAN" Anderson -; Demonstration of AMX Mod X plugin writing in assembly. -#define VERSION "1.00" -#define AUTHOR "BAILOPAN" -#define PLUGIN "Asm Test" -#define CELL 4 -#macro ARGN(argc) (12+(argc*CELL)) - -.CODE - halt 0 ;Return point for end - -.NATIVE - get_user_name ;id, buffer[], maxLen - register_plugin ;name[], version[], author[] - register_concmd ;cmd[], callback[], access, descr[] - server_print ;fmt[], ... - -.DATA -Plugin db PLUGIN -Version db VERSION -Author db AUTHOR -Cmd db "amx_asmtest" -Callback db "cmdCallback" -Descr db "Test" - -.DATA -HELLO db "Hello, %s!" - -.CODE -PROC cmdCallback - stack -128*CELL - zero.pri - addr.alt -128*CELL - fill 128*CELL - push.c 127 - pushaddr -128*CELL - push.s ARG(0) - push.c CELL*3 - sysreq.c get_user_name - stack CELL*4 - pushaddr -128*CELL - push.c HELLO - push.c CELL*2 - sysreq.c server_print - stack CELL*3 - stack 128*CELL - zero.pri - retn -ENDP - -.CODE -;Technically PROC could simply be "proc" -; this is more for reasons of readability. -; feel free to use "proc" and omit ENDP -; if you would like to code one huge list of instructions. -PROC plugin_init - push.c Author ;push the plugin name - push.c Version ;push the plugin version - push.c Plugin ;push the plugin author - push.c CELL*3 ;push 3 arguments - sysreq.c register_plugin ;call register_plugin - stack CELL*4 ;clean up the stack - push.c Callback ;push string - push.c CELL ;push one argument - sysreq.c server_print ;call server_print - stack CELL*2 ;clean up the stack - push.c Descr ;push the description - push.c 0 ;push the access level - push.c Callback ;push callback - push.c Cmd ;push the command - push.c CELL*4 ;push 4 arguments - sysreq.c register_concmd ;call register_concmd - stack CELL*5 ;cleanup - zero.pri ;zero pri - retn ;return + cleanup -ENDP - -.PUBLIC - plugin_init - cmdCallback \ No newline at end of file diff --git a/compiler/scasm/sasm b/compiler/scasm/sasm deleted file mode 100755 index 4bcc84d8a0f3beaa1d6c75b713173e286fd07219..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 293840 zcmeFa4}jHE`agcFp{u=i1|ftbsTD#f|8`WD*jm?&SuMus&(xIusTpE7vQw+ub$9b8 zVzaVh?P_V4wV`EHDl2x-lGQQ@XWUr^V;jsizt`(|&Uyd2b0?wwd_KSL=QG^yJ^!Bb z{5#Ki&U4QDyswE5Kchp34iWd)G14i*RNc*a(E<3Lc14~P4T$uJL?eA7-6ID?c0~@$ z2Fykse53&y?Seek?!+>r2V9GCeD*?`AC?g|Kk~=6_&hWrFTxMoM+$8DG}La4M)|4i z7>O+F9Fcxmj$~vg%7>zipE{)ZAzti*pJC`^82aX?2h#kwvcx-;V;9Wp6j>0BM)?`g z6S(5z%FjhPs<-)b@QK|_-w=F; z;j=qFgYoH(Pj7rq$LG8F@UK5UN60VWgKxqE=twV{cf9?M59*R_>g}79fQxo@@wb)Lw(EsBk#BOw_Bhvir@R&^nUp6hR?U~ z*#nVsYf$u^192rQv zpM5No??49YQ-=I2$A{@^Th8D7wA%Dq2$Jc2EmJ5vrjMY4;BOv2OdnzyNx3pT(6)E! z@wS|_vAounQ!kjFW8qJ;>HZcz^`7N7+x8CM!)*OUw)}Z~^DmAM>yNkXi_s6$75MP) za(tLBu;qWY>0+C9^!>)dKMwt}{uGPv>9&4vTmR=4K5Yj7IF4Aqn=7~J&+yH^GJIGb zx8?WP^qaPQp-q#o{B!(!*Wxo0d2HXqwkMyNCLR29{V&vHgu2G^)fT>kH_)~})RzCq z*8iDJ=UaZ?ZPT*vDhU3HZEf&A?Z2Ccb^N%)*<#*fuX+xO4$M%1Q#s3)F zAMFauN7?jkHvK(Y|26c(@{EOdku4u=`>(L@F1PhL9$0^tO?R~I*IM`-dn~`(rb}(Q zi-q6G!aLc*Kh&0AXyLtR(>K^OZ7|`zhY$b$h7Z%1*m6hT<+eWuKV{30we`2!^7S^| z3*Y?v9zKM33+gZ3+BwQ*dqln+In}mz@~N_E&IPPL$EGi|^!&lXM^U5)K0ieM^_aK+ ziG0@o6+ZlP`a(SUcQ`&Q-)i}>*rsc<;6*Uc&8QqZ=7=LW$(;}>yI{(wiIK9hF*8S% zO)sykm_GFi%gf8gmXDcUKDm5K zWg?V4W$M`SveBbvloQ7H0A$S6$ndbnlx$Z7z^=)Q8Q*t7(c}aJ7cKA z96Kq&D#ew@_IGV3l}{O8Sy5I#efretf~;@^{gjOvRXL`@!*|HB1XrdgyAHI$_?a`y zrj<{hF?GtQNfRosEW5nF)(UXaBfavNUPtQ4m5INB3kM*!VSm4Eks4m`GX4lq;Yj05qd& zayhGw(Q4DGpxvXUM<$m~o;>yP^2oUH<&`rc$ej@xS3Y%IWWtOY(_jT6qbiZOeA@I0 zQ!2+r#?2@%zcezvTn3vp9-}JDXHKXjoEhbn$RnaaY22s@lOi)*yD^id!ZwV%V)}$i zd`-nTCg2H?va`+s31cCIsu|^D(V7Taq9%`;FeP&4kRfHq9o0W_=J2xy4=Fnq6nVdn zI?nrT%SVnx-2ssyBS)S-_^h&HP=V_Uu7dbqp8XE~W**lnE>F|p`pk1MTs;RZ4{HLg z%^cTyS9q9Qc`=7(-nGV0XX&32=9Ji9BP|1yY_D`J30iBYM#G_=;5ay)nvF+#9z3OAlU(DWqd0W9#?& zC>q@rli&b+cSgg3{Ki~z3crD8A-_>~D8JEi7{B3z4(E4g;LmULa2~&b*+_oFsl15a zpzIQU!%-f~Z%|UfZ!A(K@f%L|G=78FN`AvhpUH1bXg}sR9PZit#=>I`zp+4>$8R{x z*Yg|B_5yyx$-kN3`$Zy)_>Bd?Vt&K9S;Ft`n49^1U?g%Mzu{yo<2M#B%lX|S5_y>4 zheRSP_}w!SS;_B1Bas?@_liW;@cXbxWIexoMx<-EYk3^dIjRjRRzmJVXTKG)`{utkI8uIvkd?XU( zH=K$Xzp+p(;5VGVuKb2`)s5d+M0V#l7H~cI4JW!6zu}Db;Wrkk{rFvobt=D4hy3|H z1oG$iP{^O(amb(FXF&e^hMtrp->GhhnuSma)4+e$jq4P7W_6_X_aT)8KTZeu1Qi zGY!r~>Ss$j!8G0A`e~9rkLg0DFOl>}riU?|kn}}NCzvjj^d(G>WV*kk$1;5h(>)|z z!88e~FOc*krl&C-k@PgCXENQm4H<`3GCiB=I!VuDdLGlYlKwH%3z)8v^lYXVF}+;U zbC_Pj^b$$WWBNX(7fAYgrk684Tha@dUcvMnNCQ0G1Ik77fN~w z)0>#?FX^RB*D>8g()TfKm@bg?GNv1uj!1er)6Gmb{+ska%rtFLeVwFNFdb#OR?;h( zE?~Mw(ltzXV|uxy*D&3K=_Qh0&or0K^$R4uf$9EC&z5v8(_DVlPm}aUrVE+AMADm> z=CZIpA?eLbCzvjjbRE+pneH#?Elgj+bPq`zrn#J{FOYNt)61L+qFlrg zFueq6=vCyHe_ot?vwBNo;=H1YCI9Lit#}9jocn`{=xupXa{!dEX~6>6r{d~{JnCuW z!fRJ|yC^S`x{3JBeX(*Eb1#03yzrUT3*=92+3Ztiqo+t^EYrQZChzV960I-Z#jjMs z+!w1dYjAPmZ++e(bg`uNU)LYrQ(v4Y7(PXl1IJwn?4s{Ag^LLfJ}^3+4`A*vJPmc^m_u#Pt0^6^;1^cPBeu>HHtf7>x7R?*1xOMbdn zGt#U5^bn>W^3#_veYc;!hUuI9^e>pM_R|UnX3xs(m4Dqq zsGt8xJd?_syBx^0)&;6Q3O2VU<6D+TT2iyNeEdLi{npxH)y*9*?-i(2UDFZMbwZVH z{b$1JdQJksVru=9_~8lY{R2Bt&?Ke)Uab)^<0+kn*u;qW5#+%#q*|*A%xtZlxh9a; z-{xH!$m_0ow$)EEXTdU?y5GYr&{H7sG`khDz9aSzhZg=5*CK5-uG+r5(<# z$-lW~PEBQ3GaVztEadPI%CDu+8(@n8L3R1LzQQU(AXqcuPm)ICGUf?>mpZ7h5AkMZ zWjf;rfdE)*RkJo-GEs&Fn(oP_klC*Cq$Xq2g$=F370h@h~OLg+3d!X*Xro2^HF)wHM`|M0izUe z&K!eep=6%nXLd*CC6YPL&m?^wSYnfkM^lASXAAN)2^FpUmiyVcN`Dr>0%i_yxw{h8 z7I>F}YKy{zU_A<>u+$(uVeU~@q2ap10p2zg4$+kjryF=@=?3?~?y5e3<2d$qlc*B-T|FxnsXPWnsYC%e zQ;>n>punn|J6G+;pAlC}gk)=_;=UyOd8?|wowKSAr`Ddw`Kph06_~HqFUHi-;ZwoD zQT>=dbNo7c<`6J%Dlcq((jqwSR&_XjzFHW2b=K?SQt{Uxj*UykH@`Z0^J}G>UY-1U zs$>(2lZk@N!LG%wRbAz0LE^Q%Ug@#DsF1IYjJe{Dm8ZC$os}9|Rl z&Q>ZV(dt#uKgldImnoT!9tUIBO4v7`+6^v(_S+3jCU#4h^PY#>@^>x=jW zM4etjeln@7i#Jh>c2N036-h=bjs{i*93LBJ~&HUkj%m){28b+qG6T zCd@W%g-PisHF^iPQXg76T+yX^R#PN@&L`5bcv1Cxv}yjN*L# zs^vdXlW47qn!UxJh|a00+I4OG!w#7|{2Q4c{}7fJ#zxT1d`D&zZ>Zd-Fiws)=HH5$ zA%E_lFmqT2r{YHCg>J1nQlQl}G1!^vRRtJ39i>QpKlr2rIL6|&)w625a$F zivXS_Gj|Z=s%Nu69%?~8mHhilpIe|q1ZdP8>I3D3nLlSfM9bc~gbONrkO7L~OETvI z#l8;3PZ3OFqrb^K395G!Rmz{U83o!9hJ-Z^Mi>ag<<(iAW0-#~!@T*`$<42oHoZC- zxHScUE)k$nGdmmTb+)(hu3%SH-0z?#nvl|s?CD6w(wT=%lQ*(>WUPLeZQjQ7|Ujg4ulWBn1x{Gc7zDy2ZF5m%w$&!ZnA`ozVLvqt?TW4(mTuS*5m?5d! zH~Mf@AlF-gTp2E?JOmA`Kn9EV4}s)ASZl$J5pV@&h->ADJR1et(o&d4plpbj=;Mi&4Njlxm$tcr$zh zieyBcZGDBbj+*mbYwbLL&h3_Ur-chDk5C2>rOt|yCk^~al{lFkWYOC8FBy}*TJNH0 zf&CVzVTw~*wcY@=Ryl_tufbB7(q5Vk`F<%VFez7%&B!gp`dqPpJ|kysv88rv%s9mPQSlVM ze86^bprpk*w^;LXNjat0t2W>8F}-amLY_>4Ip0QK8+^x7P$bHF~;vl`&?U<#zKg=P`EFvcoPdZ~Ti_0pqqoDb+xFZ<}L_w}=X zv zu}i{qTqFEm7vBWzBlYKVP{tdC(=qd=Haj`qVBMINoaVr!%X@lICe9?7$5)5IFgRB| zt2t5`sCOjm-4w1zkCPFjTlBX!L&Z$3?y?V^;sl6pv&F@%k`p;wh!?Hc<;Zcx(Cq1nF z{jvsytgSi+TfL|y(6RhBtsV)s>Je^U`8f)#HFE8YMr-T*qMsW`A+ zIKoG)*tN)iB1`DIuL?>lQ~p$W3l}Ap*aQ4_H67wDq7JUC^*t*PcyDwy^XL87JyJJ$q@##p1obntkW*tV&+toV=)i6Q!F6W9k>iY)C#smAtiJ+jhecT z1Y5Y}$@qf$)o7!@x#}VWRQXoX=X$LoAwxXp4EOU!$eEW7Zj|CxZPE0lE(6%L$z;2o<_^Wq=cRp;zkA67Dq z(|8FMIGK}>oFd85Odf&cMUouLB%(%@*i z-bKop`tBI}h*Z5NYrHQShz884YW18}pz0OAu7xMX-?a-3tinZg13Y;|=@6dC8f=)i z+@qwSm~-yWLH>hVEcxLvx?93bctTVzGZSziB9H%h6FW?dB+M;uTdnohoC7Qdj=QJ` z{!VFAFQ)Yh-7u)13IEcg^<$aiqVwYKw#MrM^u4TzQsla#U5{lz{i$f`DpB!zBuuG- zhfZ2n_7r6^ok2r*Vn#zh^d{?c3u1o-fe9E@QXKM(cElH@;)^=0N|r3v9@8bYtyN9n zMUhDgkuhjgI$kUCd`Fz{f>g=kc^y+Fiw2_!+(WT1wF$GIGNqnJ<&yF1Q>E9tlGe9` zt;y2s>u-~R(d20>W|AI7=4$1G#NLS(!sNop6z36))Z%|VWgC7dB(95*J+MT%lQ*UkatQ8L&^elsY`>UODP z+op-F=nrfw3iP*0`g_2-RwYYqf147f;Z0#l=DvpxIzVW&$vvPWYj}WeF2gQrxhFiY^21FV|MHXT2NA9j<}-9QT-*0JP-f zG+6$PFUTAk=zl}P4EOp6M_Q|{HQt!>pjBN^c zP&Ql3kmHZkHbHV19Y-yRmb(P!NPQ0Of_fDaW(&CYpUxF(CJp;6da{}T%8wPon*W& zGdx{_FalE>hVYCGc|0U0PsM&!`54x%hpl65`@ZE-Rahj6(ufxJPrx zLssBCAScXf;krAcFi@~+N|@&nxI=A!-@#Le;jRN&T`z-0c5U9$Hg@9(I{^nliqN~( zsunXvB8~;t&t4l3FLTe+)kpQLO^*Cc=2r?$$lqlC@(&T1=nM5oXTL>GW#IQWSzOn} zIdMiZ2~jLjI8Ky@3OHp|ohsaYE~^fr5`}Aq!h!fV;1XF@^#H2?5dbk8Z5H{%uJv*x z|5|H0v^Ze;IjF=bbD^vGw5=IQjU?lxpWnMYXKseR>a?{uQ85YbuhZW!E$2(S5G|Ws zRyHkrX&)5(WfZ%MxL7JC#!TzqrPE{_e1)ux8EnzwYN|O^0)yX`GZ%jpa9^WYCtk5A zKhg2UnUN!wL;G;mDAdFGgiKGUb;^cfjp?N0E@?CB4BMyTTLNjYHFqrz1>p!P=48P zElZX*34kVZ13^;=n8zUl2X|=>xO^%K6z7D?_&LgaxPt<4AqpU&=K#DNeH-1%^ySt* zkipvbET`tO+TnQt898ls@~a!%uCnFA^~zt)sOXE)nW(w%72(W$tV3!9{FB2hc&?>0 zvU<&6^_syHfvzN=mnpS_Hgi1Sz)lcQSvH{WKyN{-*bcvGPi|ULVWZ~X+T!GRi!5xa z9s+n$f=NsGjJ-Ge9bLzftb6WY5f>&no-=3_Y;s^eEJ%$215uEKAB-=lmMloFe`Zx4 z&%m-}q`JmC+dyu+A$;x2f~@qXa&RSE6-&iL9j=Z6kF8X@M4LphfgK>p$xT!hbjsOW z{3)rWb^e&6j`*3;Bo2i!E|v8yIY!=bHS4a@b3&;gH~=ZE3&Xijm$NW4@I*dZ%nK2$2D zHexo|ZM2w@<4uEBRV~Rex@UUS_?BUw0?IkMCs|f{R^vj*#KCoxLV~wAA_LwYB^&kn z6G6YNldo`(HU~;A`BmUDB!(mzB8&i=(j{Bb1!OQzumC5R1}FYt=WxzmTNCCTO$ygB zcHyX1DcXXl)!42nYAh6iAd5{02LcTWASZ)$tSF6BbVv&|MZQt9i^4lO9?QRxYkLVk+wBx6IIWi#UmW(o2y=vDmAX+Sgn|p96BCVV2m1p z*7o$Gk93b=@~fyK7+7U(m5v~HSv3rIHGgVrdaDM8=VeVa$(0}@VV3DY4lfSYIhg(u zi%}I>%w;bQ{;h;!i8aUZ`|r9#t)qz}20hW<^;d0VwHnwB=hu|>6r$+wHKs}%vx`sD z;$&%KhKI|1Gx(ux2j|JQ^UGfH8cE-c<~%5I$hugZ7F)xUh0`;KY!|2BYH?efF5C`I z-_6FU2IDOYCk%g;QrExAprb0T;>4y7as{6Bfr2JiNlpRubN_*o18PLLr#>&u+z4>l zy*1m{#<=TR#2vCp(O=IIZm@8CL~S6^^IVfw7& zvI+y(TgQ)ffPE#ac3IgHs4s;7=YT!ofJL#q1GMKAnsDEUg|&0MYI8ac1m@c|HF;D=9yA+C zkD)LRbI{yJ;X-DH0X)6`?szUuxRXj?VnqxF3m8U`yWOMtE^Fce2{ZCu$+Im_!V_v} zX;XQEzg;2UotbR2|E!jYE-1Ta6kWoZ?D{TS246G}opMj%a)rX!wX4p_k+q-QKiJ*E zZ)r+4zHUmFY_vjc04sOt!7{Edg~7GT;4j2nBexbqRhZWZeu7tL=sJZ<%p?aQl?!aX z;#p6NH>658xa>RU6DT&jqcdztZ3+qQN;>r`&*F*&=e_4ia{CT3a)~iCN?g zk1D|FSAVE2te14Ywy*>O*8`bv1H#(EXouj!!NL%{acZ)QTNOjoVf3hSXNr=bcQ}-d zneVxpe^A}QvHwEsMllKkh5*9tR;SPwq?zOKfF8u3rduH6sSzN5WbiWgbsruBU4flh=fC)y^=TRM&aKhw!CWXX-)g$Tdrz1VXO zpW$(ui!ikpIcY(7AOeT{rG`)Kr#gbNsr{K&^!vQ?FFC3015((f*oWNI-m@+TwM{yV zb5Og~;{(`2f9f#yY^im6l6UQ_D6f;b0#7hOE{{lwjEmb)fcBMlAQ& z%lgZ~f*%B30-x=g&?TQz7s0L8T=pu>rYlUclXm5apIN=2w9Tp` zq6JleR%4 zu0F+`FrT@VuN}N-wXP73fb81Z{lzfW+U_COmH4bmt(Mr8xNw6AebW8zh!Zcm z@lz#50*6YCf}+#%OD#jp(u*qsXR8guNqDY&une;>b_+4u(19xt^Ub%fn!o*0fvvXZ zKV#8syi2hl&WvRH7LC7Xm>7JN-xP5&!GWGikj7-f>J~7?|7ttVe}DV7gTm%e)n0vj z2}LCji_IqGw`cxA8uDa5IXr=2_3)T8^h(OnmE(b=ul}`=y z7mGruC^cY%Vjs{XG#8tL8Jw0lSRzKVy2duWMy#FKFgp_1b8w#aWs}W4WnDY5W;fda zH0(HHZ0Wp?vNV?gP;7qHmg9(hp)(mhI;t>wQjX;qRV})9s(Ri=*uxf0xBE-M zA#7({PvF)Px{+Tfu@8+}6}t$!R~cMnk9Hq3+jER0SA%luD&ok3U4&0+C2OB*?kK9S z`tHrYuoT5o5q3Un{^e-}nI5y}-=8RC<;e;p)MM~?^tG%48SYjYq9tNdaQ=%#a0H0P zSbxusOy_8f`9x|7i-q>?UbrE1p0K0Y`RSO@MAsPoJ4kEk{wB@=Vc#5%X)_um%*=l| zkeNMQ-bgQx=ku%Xm60M_r!QJn^fbXA*DD6vCae67^TJhKK+I7{1y zilTTX6nCA7t)mr@B{za(*rAj&XK6GKk&DRzz1YY1D$`2AAf)yYjT6~po$T+gD2 z9?*qFawQ$m1XZKjB;w_#^EzZv4)v4iz&cEGf*1hy4vhB0KC@zwG2(11{G$0Zy7NN2 z?BEW82BIR__9=&@%Gtt>U4Wt)P3s&*i4~i*N&}h&v}(oBp+j}QpZV$mDmI}7lvRXi zKoK-JK&L~WH6>NniI-W$Y7sDjPCoL_ES)s3|K}w5B|1MAJ#SCvgA2#)(tU%^P+h!u zbOQs-^somp7?AF`1wd=U#%G3zX!@CXO~MhG@mSAXX?^lYvJv`71@c}FGUk-Gp$=aTeY>2=!uyYE?1dv=A2OPYlEuue58HvN za{zKNdYkpJEOl17U@9`}R5b&ZI#t+RDsXaoQcJ0i*x54JP4Jhk`aHc@i^3juvPfVF z2;;$jfeQA)DwSz&)|Ry_BoQEaCzXS6G?FLEXaq*Lc#$Fo5!m0=mie%nR_{`OL9GfAwh&!a})H`>w+04)g zYtAD>=iBJ3cVwu~AM8THdi6s^B0xH>H9;6u__c)TplKFsP(dE3I6RO`Nuq8;!tCMN zVxjXIvNmh>a`ke+M1fePQv@I;rK7#K67d^z9v<=##KFAt0qgC8EUXX8=yoW ztTE^RKIh8lprGU}*CmJpQeVu$#JUHBu{oKzM$7zDm2WQ(^(mOd%uTLKZ)99f#P!IPpf-XB!;kms3lHB2y< zVC%pxl$gBEHGw8@LBoCM35sJ*0gQ0?H%a9tGy1`R76TQh#5OwTSrw@sGk2qUKn8Nj z(caR=8?!dn=3|ax>qpYhe4+1C$@TC&)#3EVaq=Vn$agKeZ3QdE;>r zbjw@$LQi`+Qr^~@6okZ{sx?it+QgoY(BXnUq-syED)v34V`F+Nq8w;AR=vel-HI3s zIFl@8CSdywK6L|)bz7^pm=Asz#?-|F;LgzJ=7w#;Ji1Kb(PPKa*zoy1;;z+h^sDKr zA}q0}$*A*`}zXclcm^lGM1&kGP8J=jVY+kA`i!FpvF8)eo_!!|Jv zq6K*qcO{Mk4d@H;ei2t-j7QCJ?P6R1n-I3Yg}#U)+Ib2*!|Zz%LX#8%m~&Z!MW>=%n)CQkAYc$EOQf%rOH_RSfc^v>igU_ zvKhml-g&!SNT$CV-b;~mPX&r(U(gNWj|zD_3u`|-Dj7F8C4u8-5HQ?gqcgxM>b!`P zEs=kWsXVGQt-$xJhLLR9ZgY##BjSxO7#CV@0(|`LB*$|dAx&)mwzenJBnrugKg|2K zN7$9HSMq`@fEyya2C}40jqI-E{j1KCK`iOWLtM&VI(N&I;!${E|0XjEas^|l(b-e< zCSBs9C_Ct3zV&Oe9D`z$X}p&#ci?WMQj_I&R)#P+yNbr%>n2wu;a@~exzbH_#re`^ zsfwXDNzG0Y2X@ugoa%t8u1Y;O3>G@|LYa8_7fGX-*{p0zu1?1vbQoMBhrcu~n^%ki zIDqFV0JLJ-+~%1aG*0W-x_~;vN62y*&@jzbG;1Oe$od}d_^r`W?-Oe zWY;(YNqiiuk5k9S$LB>1AiI3>V=E53+f-i8r=+oT5$>y9Q4YC(01Z(U)6FLa>CB_b z_H5br)VjXxPX|JQF${h3J6-4i#{gIycNvmJ=AzudpT0+jhNoCtpvFOM#Vk)%o!HOZ z`@B}g=;IwB1El~;+iWT=?8C67gQsD%1q-f#i$UY(&4@n@LPtFah+2P)C}Ba48DZ{H zpyN(`r@PK&Fw#H%eWFt9b6-s?Pk(3ISXw%EW&J}PUgD7Ps5?p$W}zXr(0Sx=PXIny zv&vBP2dm%@mYpu03njwR%=T zr0Q(pUd)`PgZ1QiSKd@IUXy9y8eVg+i8L<`fNmo2(|06|_%3j!29#@Yg6RMrU+-LMrVbDwU^-hWm zwU|Hlnxe^ICh(4#8Fui;o7Tp^=#ZHr*A_x|QP^lcelJKAy!Kb%J!cd3LxnIe{>AKB zUqpE4BVps**z2~dl?>o(-mP9pq6o($3 z^%l*-#I{~0DNMneUv?ZnI=(_IO;?ffaA6OmydqTs71@+5 z*^HCTTDuYF_7HqVFSwCGQ6u6|4-oSf&H&qfWs8Xe?$4@Db;Y5o_BL|M z-q~Vmanuw`&phJ0yTi9~qEoW5I%4I?b+EV(^2G_D)p1-M>9AO?SgcoCQzZrI5z7=` zI|`0+HJ544U!rC@z9hi^4N?RA$4wtgVV;vEh7W{_w5Fl9qwWJlgdKHGCd<`c`1IKO z0LcG-j{i6k?X>kVJCW%5q<{k5dJJFuh74hJJ=PKN$*Yp(7=9S?(}o;* z=r9$TPn^iIb~THyZFm^$Nzbj|geQ}^%<%sZZH}cRKRI_AO4D=4N*#3px@;y3P=T4r zx#HMh$s<1!X=#u!2XC^htKxQm%l+QpBp1&0+%W-&k-rN>syW6@dhU-<6s*T*Z+&x=kAt{zD734KQo{ zBat`T7F!C)f`s|`OQavS0zt?0Ts+S;=>aq^I>a6NmUK*9Q2fH`k?vAK-&(NyTv4xz z+XYOh(8ZP4##=jxCKf;}oYih66MbJSRQ61$tlQf7Hf*P~LK$pGi|wBd)seH2SZWKl zsK-eaW5oRJHbp5wOQ*O!w*wm6V1;1XPQwZjuK{4tJYFKltpxEd;kjhLAv9h;l$4P%Dc%|X6 z%2l@5j)@->r$)q1CqqHMuvH}*Nxs~7ZL*OOR5|Z6=&8&10va-JQByxshcaE>eBs6Z zx`K{8kF|qKe11C`I4eSdNf#Kf3G;w86^KM4Jc{id8~^}#9x24pynEH`Dn4$_3-3iv zS*Vp|SpriQ4(fHwoGrd5MxZfQVhCac`c3VFGLYv=^?1z*3%OE5RM40M_|uD{{do}# zp=T?=Ty#OyQiVOhL~L^LqG`7$#>FJG=!=bhf7tyZ4~fwpq9esP;ZRlR3D5pHSAF>%9-M_LK+oAiT=LDnV&Y&CIqECc@5a7}Sq9`$r z`Y@L)Z{?|p*!+^MSRB%e64t8K#}ElNQhBuPVfl7?s1&VN>wx1X`E%~E7PBxfJq+`w zns^#1n$-uC8O%nx9S~?N&z-6%&ckSei5I=u04HZXT5YhJ%vRL~+Zr3Cc%!;SKi6Wc zty-(rw^r2(flG94_g5`Gg@`|0Sh<4RgdIiDDpV-!uc`TR?YHNK&A410D=_d$+dtK=4|Zb7WxOPCc3kpT3J5m)%; zbIsND8`u4)*MfuCilk5$PAq4~=pUA=OW^T4N*7C0*ns=&O!*HTNVg|!AasTzz2x@yf-Mp3^c0;hu1CHIIah=49+w+dat+f80f2{gcW_xT;P%PvuKzjoqaJhq+NO$1Ep=K@CRb1t+u3#^TQ zhPBn__^Lg>lGBdz(JP5F#czby+ehg+yX$eX{OPCpA7CnKuQVqMuOpBtW z3M`18t$cFf8*%utOVLlk@`XJridEW@Gn(EBTmVtv`c?c3Qxez#_n)N~5zg0k)y*Ar zCOj29(tE&`XwUvVV0X?JUIP_TroC*>-88#?sKyGl@tEw!qeG4J=P;6E?+mNI9=~Pe z>Mrx)*=>8fwv{IbsztJ^wI(foyb)fA`<+(7MbIt0yX*sr?tTD)eSjFvK58r^=m>q( z#u<5qlD3|zt$7<6@0rh^I}*IKkc+j#CjJrW)Q{q}BWj z@fx&}yAUsb?tx&qH~X|}VaL+KPW!2_Ghkt7cY%dHOZ(Un3oBsys$6aTKHxmp=%zMs zi$(*eg3I$y$-*4m0B<;RoU8e;)?^*B;u*bUDt!CQ%dV+^`^;9CwMEaa@j*lBIfh5X zFgfAQj63|e13H_C`va9WG2z8#U+oxM>~iI$+?>(87SA?|pT-pykUmM#@%<5x!VhTA zB#_`;nffh*+4gp)6|MwT;ajRS!=%3^Rlqf$^cI(uP5K^6QSf#ry`|Lp zIGh2|6Rl8xj!eN`qA|#8HvN@W@0c6hH9M6zo32{sZ|eUZymVX%z}=+544~_`-K4j2 z<%GLZ%Y3*$48W~!@VGsj1~km=J0#2LlXutASX(o2*U_tbVt_{7$>cOwE5}_&6%Me^ z@}$ekW;u71MBDNu$e(@J5h(BtlsxtNCz^yXA>w-Qxp1gWQ|1go5fQ{+*qQ-C3OqtE z(c^SxUFIAZ17Bfy0q$?5Sx8}?by>h3zL}`DAXBGZKw;(sbEpIiI*v-ydxZpLEVx5Y zUap>jlJSl@_W2Y1vN`Ul8E@>_9UPADcJI6Fs=GWA8vGx4R824}Xy!0VDoGCon zk=k3)V7G0~to~ZdM18Rd6Z5MQvmDP$zpudk_-bjjZ&Mg4mUaQ#70?o3L<3!HUeIp5 zgQ@o1mD8yImCv?*t$nN|*Vq~18^?-&(xQ;y;=vg}toSmU(M>Wi)A3#PG=gx)+KUxG zsEhNR5;Nua3Pgj^DLrrQl-+-|A`&Rw;hnNJv0``H!K3?1r6J|fU12k}L-(I#m%L!7 z(2aSyZ6x;r88Db1f??mlsKKy;nEoTNV#ooY>3-zPIycwJw&agF33(^m&Q<}1?Wa5Q z`Wqel&Q}%KF>{?NvX{#jAb-iT0bebG{koiUpmF*t5$xBS?fA+a!G2PU!x8K*!lsxT zHc73+C0JGjdxjk?-g^IK#W5Vg{(uqenX`b$SBPL=uaMw5fM7@vo?^mGwWd29!Tw^a zC2Mz9Bl z>-^Q$vGeb+AXbP2pW+t>BG}(?h%J|{LJ{n3V#C^rVCO5i91-kK6{O=%jUGH!Rv;Ss zu4AAAZ#uz#mQ7AjFE;p%7v`}YbW z9Krsj+VJcM_TC;kh+sEd;YF}t;7>1tJ>y3lAiZToLT+ZU1455{h7VcFbuvg3VPJyK0vy5V;0w-qtw=mHkCpT2b&8X~AclF4Ho9 zk@oPFmOwji^m6L_k=~4<>I^6FohGM?ZT-b76skxDRX2N8{muH`YT&b^Bt0<%dqCm`GOZr-EdnIml9&}4D*LEwGqk;|HVaJy;WroS2xG1 zaWd9s%!0RIU#u@~c8smEHSF_%qwR_t zlL(x0u2(SKCI`2@ z_Apqf&3p__4PXFKv>V^5V0>%A43QC(-t8bueZH@qi3=xVXG5@%<$?g4&Xv^)lar3+kwU}9GuS1m9fIE>*U zbu|TA0dMsL00}X{?E!Ba1Ps&^N8)jy1jnv%Bp#;K2P7_&0=YVxhcRhZI30su=jt`(lG9ao|G}k==JV;&DX$~v<-^&s05I(JYy!O2s!is}98CkoOR}5hCF7f=>1I=@FRRZS5$H8gT%yJP)yH$7bTV|T zz4RpXncl~)bb1nc$KAjjmeAjA<+c*4aV6OjdhIe{kDy&^Cadm;CA8Re7Lw3oE;n03 zf0cq<5_-^$asUcQXr!Xho`eQzaZU*xn4@VxLff#Nh#}-R4T#`HwSnzP=pilkCG-}g z?MWywPv9cu>~LL`WVv}l#}DR-UbbeIbWqa8mGDuFS%EiyjZha#q*G`9stV^v^B8~b z=Q{IejS((uOIGB2wD!YUW4s+a967~0ro@6-yUit7SDjm-dcG6z@}5Gi=L7`H9@8@4 z33w3F$(j!c*WR%nf_wFL;Ev9Qdwu{eY=fKGc;fOede5`220=?Nux?^^bC^{G@7d_9 zow2|G!m7_Tk*2sc}-v($JGh@HU>dF(LU z+tIGKEu3M5Ld-u~%yq6u=m&`BLsgz-Ny*jTnDh;&4Xl@9>k7Le2#ozzJl$4D(l@6{ z)y!=%r#eiW-CKz+5g~R`XPn8xZvascP_>26P&RHR$HWIxc?0Aky;B?^_`cGFhexpL znxqV)FCtfb;zj3&VUPSwJLp2V|5YyP&Vjqr?6H6;uU$>)77(_#NgAGF)~`nWs@1P1 zexcuV$qL2&4rzsPy#muq{d3%8vGC4PcnnX2Zw9jnyb4Ul+^@R(4J-2oykNdHf6i>z zZbQQSbF!1YGy%aUYfdNfrxD-@;c(59RefJB?F-W*Hq%kZV_X*sgOrWDg9AXDwYuPj zSDJoysr12DzAj3YE^^s#X?C)7QT_AWq97%BLg!QAA@!a~IlZ&EvoPD$_(*GrK;+dG zv57d6$wv)pr2isw+cGxj5$X}3S7<}_c#-sop=D?g&eT|sTA6fwWx{mQeJWY+1Cbi& z$H#8#3e6Ric&u8^nh4a%vgqmo7e*fv<_jlR0?=~`C|$Blh$QR} z9PDKnXOg=Gq!15ptMKO#s1N%P#Td^X;RHI4Z!_e<$Lh@RiB_N(EQ_mWEq1QZVl!P! zfOl)vVw2|t5AC{7wd=cX)9yZXUWE7k)U)Cm+7lk)8GCCsSeb#{g5)6fJ+uR!p7N?9 z`|}B^ej@qSszqi$XiU0fsVFE1Ly@VMEh^|WkXfS0baBWm2|io65l^`&zd41pVsZ*v z9mNC-wazL%XP4>kHz*?oSJbfbMY5v%=Lk6+rbrTZo~m}$Hfv|Te_u+ag(Z!cPe83! z2HMEN$kAEMuiPJ%?df3$aIyjnVpbH!Y=YK61H~*=p`#}Yv%%SzttR&cvmds>>@FuQ z5=H}l3##Z2TBFm#Gt ztA1FU`Y#9b1EpNC>nINGFbYJ!Y<)Yebuj&p#S~QFf0$Z$Q%C6OL0w1Z*mVuoZB45g zY;T8FxMM*l%ySyO_68+??7Tbe!+qKJ2>yrqS^+U{ZzuT6%00cpeDTe8iqCX$R=ZO? z!p)&yzEiwWmqB2W+PbzkYyUxO_{RUZayvP}&h9)KO0sA;XUA!H>`Q4_lug4_L^zx$ zox{$%9c(zAE=2NwyWOx1bSa+?TDSk>oqd<)*BHTKL&4IRId`;JP?@8dy92wXJGk3$ zzX}V(TbBUvrp@EJrQ-z}g1ZfOYMCEsIAc`U6ZLi*?%66h16}y@@H=fw8j?1rQ-b?I zsMR+6x#K)It#=*{+{Pjd)5LiQ#aY(}3wVaC~JLwt{#D_E4QEY)c<{6;Msas9d7 z=N08-PR)5-%Y4m=1u#Upp3UY@5Y`{Qwl&G6_x)@E!+FRyLfd368J(@V~>bPV5A9CdBkE`>Vjt=J@T%}zq3OF4$+mnuLM-x{(-+YlnY`K65oeooiHC~gmlFNN1vLtIPISfD-;~sKOHvH>k0t*eDjs(`3y!63xYl1GuF8g#?y|Rqw;;@Q4*E=2d5Py27!%9jxR+lD2 z&o^&-pNJ!jopm~_djL7G=sN9zo?N>Jq5RWfXDOOO8A$17NujFng_|G{3e+)}>z@wG z2tr?aI_zKC+NbUcNWiW8Az5OoH_o zMjosN0sBdoO}|tebJ)le$d|8RBhRx+A38ys+eW^o_=Roc6Pl@305)=kRXnaOX^LPY z@75|gPtg8OSde8SyC@8&;vd<5LpE|!xX!J17}zCkpCDGSkv)B^0w-v@IK*<;$gUQ# zoOeLj+v8~|vhIL5$5R7fkJ|_IxRtU32Ha3D&Bd2=kz()RdxMw4O&Yzx*JSLID zMlO4oh_|(oD^&wU+F;S{+QSao$V`AT*vPfgNA?NY<-uIvM&9OUZ|?-{kCnqdb;Xdt zSF({c3SoOTQtzh)bK13$XpMaUER7jG3Gd70%!h(ucOv&K29tOOG4?%CBxs5|gSaJ* zGl=hKwu_iNww*JG0_N%O3mB=-R|NGCK{h5#g?D^R&UEnv#y=zrRO0kUW9Bkf^QZ2F z7*ud1X99Vb*EBD88cwBX-bG#>PP{S~_fVZJ{TKfrQE@7r#807#u%dFD4?Z(N6`78% zV{9|yya;i*!ewn1vx=?$CYUSW{e*u~2~i7Nv@Mr}A(kIFd3C+kfh4@=Ydbi2I6cvv z@t*knt*se&Q1ZP=f?@E9&pEDEjT%Z5-6`Jvf$`Ydn%NDyh^b8O!E11_nl`Q9ao)5%eJHJY zbS1;HqrALga30`cj~|Cw0EB0R0$e;pPj>{l__$<&SmEMukvp9Bv9_jne(gY4a<(fG zW$5FCZ=lu`K98yG;$Zp=yvk)|Gw>;Q6sT$r&=Qyj>3OX%_BeSuPpev%1c~@p;Gj`c z{Txs)*rLs1ZNtMlV2{2P2y#f6mnJ%$7$T5}KhKmDnLo)9G;joGw3^Un9r;Uuc+}qv z)WK?TSQp<+R%a67LzKHXbU=TdD$rFftIprRk%w-d(t|Qopkbmwo7r0`zF9N?!<$iC zs?D(~crvL5hDIHeCiB|uLI=-kHKs}%vx`@1ak8{AvmeU*nEQ!(pqr6X+s-dLz#aB( zl)f9yi)UE_Y|orIoPOzTiG^@FbNe{;X%DBn^~`8aoUU`nza37eg>bsI;bvi5Y#wi! zh3&$Do?EUF)~t)mQ7_5O;8v)>p(hBAF8w?E*h5cp{3sn?kT5(4he0ZhP~%lqNyOUa z9@x|!m5`MyT&aag$;|Y29sN6S*klF#jx$wIxTBPf10aCZ3tCq}06^;>S;t%em9Ur8 z*b6RHzUh)Vs#f2cOQ6uzIXEa)f2W+ZQsSSyTDoI3_`nJCSM6SG*9x4Rike@1E;Ur_ z!myNWQv)M}>&bD$e?CqE(!FkO&7YeG=<~td#twKw{1ETgcL0(DAAS5HE)eHOPARL} z3z*_2MBJZ&>uqTo<$7EG!1cELg2vBzm4jy(>8)xs&!nX_rlf@KC1GOYtHho@P(-2d z*x9}bv&+FwJZ$;iO_o-H^ZPlP5(kE5bDzhNGmzz&UWX!9%Z06>1rM)`AlzN zD@M2u3s7+P}yQ(QaLp`FcdkB~P{5 zC|p?~xscd1L!^TodX2(mT4?oJFZBf%^~sn5UbdU1$S9m`hp8JNR*`RjW;hQ{Z5n4o znL*#xUS#)+r05iK(!GKhFE2w5FM8(NdEAI>PMCZTbN>_>vYQ8MJ8zq6-!?t-?vD;b zwc6@p^BoBi<^?bQfY@awbw|fIryae&)k3_JMehfOD0ONOOHK8}dI=Yr;?Bc`HS&^f zoqY=sV32|&pU!}Kvl?EWwBEjhb5FIrIe%e!D+=1E7 zy$YeTVt-VCp(o`9Eg`{W9Vd4pp}10X-kksY3Y}(Z&RjFX9x4q zm6e4%Cr5_+mrCL{(ZRKIlFz}2Cyo@C07eQq#PI+fF9&zD!Ca7k&clHTr`g(eEP)|it;kV{)P+Hv^=L1~$OWP7rN=r;nLajuuI-)%_*ti6g4hg~a+qS`q}IZ>TkYrr6rH9KQ@lsL zMajX84AI@>a&Xcp@UHc%g0hmerw2pd`2eRHISS((2Lnm_uJ)e<+Y6(7TG1r z@y%(qq{YpMD@saA_Lf#F08CFrI+{G43dzh`V>=elcU)`tt=q(l)40s`VJqs(exp(n zl)aA+s_AIGX!_0@tvlh(*NPXd@`zI`Vgak%?wd`i(D0%&Kj0nn3~e__8t<>GUJcoP zqB2jIV@2Tb{FsA#!Bdij?CG##F?>dz*jm5s3@*v##?0&^zRYby<6F zULLDdd(;sAj=#6Lx8BC<6}`^OL8lofYR+v;UkP87CdEYt7KT% z`CiWo%VSbBV9#nBz*EK^@3UVmtnLTM{;L|OYq_A$a?rtrZ~i{} zs5w!&nqz-@GDyd$!uduSSVs*Ivea@x&b@H9R;b3F-~Ivw%7+|xtjF4I`+71Q0`B`S z0f5H}c%*iVK7uO;bn{&ab_3u%Z859RSLmK(Dhu7c{o2L$$zwv;&OR=HEzm@JI5r6l zN^?URIlvU*ufe{wg(*YsQu*Hf8hIZkrDDR@JLszHdn_TLnIBIK$wg*~@{7>vDG=LF?1I?7%wnm3Ok%Qx{&!E5=` zdsA=)m6|S&w|1i@VC=%0O!>&lPz`yzZwmgq?j-wfi`~ls4S90pJkJ;2YG}^zpe5187Iz6fBH} z_N$`iuyCm(p$zWLx6aO;akOYb&_feb!8hJ6b;9&K0XvPopanTyjyo;S0`I(Crt%Pu z!0WgyV|Cn%eSWPwC5M9?87g1(Ogf}1hKp_=?Zq>WOws3W@@}+8`zcCa=fwCo#Y%mV z{}t~>>pET89Le==v=KUIQaAt0-i`JPJ2@~g*8aQE{@h>{Hut;H?3pk(L;g3t8*QaE zLAl?J_Bvv#c6!2s(7q2GC&jtec-;+aOoTWPhFEy$-DsuX$!hAq8?BGdL}vd!p6Aed zc+hjW>j>X-KxZ=7Vr|PE!FJz`c3c3}Z~AUDm_5>pB^L?3321@|dUV5H*gxSapE|rt znr<`RB^|b^I_>@@Y;6Ei)=^QjNd12~S%5i_=R(lg<$VRP2PyF0nJPK|gpe(&Vil|J zoxw&Ik<#)eL>jt&wbElj$M#JKOpPNC7TQ zkoVbOeF|ORg=DbSE)w0#;RfdAJ~1_$C#L>>nD7SNawn$txfCa+9_npbrvA)h+c_~M zU~Y0E(fW=bD&Cpr$i`l9kD~yg8LO_q>mzKs;7-ZlYp5PKs45p-dlvq2PrvC;Kgb zZI|-dEu-Lm3mVVx8egf65nd!i6kv(uVV4zDM^i)R>6_uB$@Au6sRTB3s_FtHaE-_^ zsEv>w;{vOB(5hLxi9R-CXT<8Ge_AV6F`tLqW`YeEoleL@<&;%4b>4!mcsDfefA3Vu z^IP|!D&O7Ia6f+Vm{H!`v7lY9ylF^O{Em>GS6$}oI?(LuM}U)dvA1^NMg%Z~-c5{5 z?1TGB^%RO^MJIN`d*yXge_dpgbVRk7n1@rZE<5rC`_rTkXUG^qF`w&FRU3P-!f7a-h}K1xB3tbk{9(rGCE`-t_Ew?O0>`Nk ztvSc50Rx#F%!!XngB2PM&3-8Q5UuTpHX?_LE!gqNR?H!W7WRf|7+nW4*f1Qf(j#Pk z2Y2@LJ)j_ESGK*CXsjaVXs_~WgeZGmR;g_+W<4|ea-!bs_^Y@PUqacEy>*80qC!s} zlAAI)ea1UXX?`fhA~Ro+bCmsp=hNg+UBzaI-8|kyjH~0Nt5&Jid|no_N0NktcGe4W zNMn|sTT?Zt;+WRX(TN9DYy;Se7=D{F#C`oI-02m)0>6r0phrjxx(~)$Jnj1%dO^(~ zB{d%EqMt8l4PdO4d~|S5N`9-={4SI1@+(rZ@W5J!D<%`)Z(M zsww)~yr8mF>FJk{j;#Pt|4t_~#+d`CSqE+r@VuGg_01$2psK*qz=z2(Moh%fgx6Zi zsYVy=5dCcPt|7Stlsv(D;xJJ?DC<#{ETD`d8ZMWFfqybmV$fVvyiBvOUAD%K|LxyZ z;q#`tLD|ZF^Tnx0Ppu1!X7q*>Mx>* z*bMIKwDTVOCv}@=r`#a{$ztEqC{yqbKmkp8;sFy#531L-$o$etd5f&g^<2Tz&2Bhh zEWtl6*EEh*Ibhd1V0HGD(D2ak#EW@T`7RWr;lDJVNVOZu9Xg)APRFrw`nQI=V0@CW zZz#u0ylBg)oOI#rRl(Bx@7=!0W>JsLW&y-Tli}@5)8;^jF>3{0Lcc~7pV5Q=@;BFm z(vX(_E_4!chxQmk?VnclcG?^sUps6!tYsEew5Jd3`=ekk$ExDVu@xu>4k$ERZS~Gb z5$_Isb8`r{yTiDJ%61OkUu%D;-(EVjzxka-XRGr2<9d+I@Wyo?o3Wj7{hl8E*eT;$ zv`frhT!ofnx9^TUI7Gbj3>PamJR6MB13~eH$(TBV-kgISGr#C640JjtvBxie*A-t} zGUq}(P{Q%)Zb`s%h%fYgD!Cp`4Cki;Jk;{?_} zS$Rja*xvQ ztySw`YH>R6Th1UM47yovkwz01}AFpQ)?-IaZh)s6>kB@l(3$T-vP=`8upu0f-k!^n{?;Le>VG1&{{zOz#i8^ zV#*$a{X=z$wguipHKYC=L_PxW0b*u0{PPt)U5q}eHp%!JbjXZ<*bFG>8qP@6(i=VJ z;|V$+i{Q|TPI3~%^Xl_URQ2F4uF<6$ehi8?&)CDlOu9}OO-4&OWOtP^BY0sr9tvFR z$gRP{caFiQYNj&y{e<~PqjZ>#-zUH@Uhb3{P#aubk{+>CnD;(7Q$vkA*9;Z|f&I9p zfNBfPD23uW*`!JB1dk8Sw8bR_>39a9xl>1f37om2u&VByVe^@sET`Tf_;CKFfH0H9be)I?B)nug4@YMy`!63wK{vBFXMhu zdc$oXZ-G#4cg0;U@sph%(q<{>ijW~T?x6FJKdlHCsF6&!08F7$)B}zo=^u& zEG_sr*#+uMg>HL5(<`+pxP#jsR(4_FhoUog@uz1shI|`1QfwgmOl`q2=WKT*WV#VX z@Nc+zTW23>4AgpB)VPkcH{9TY)L(atBv@OexK#_%ybrHQymlRN)|!Xd5@u5q*8 zNTAmYkmqN+!aCeZPz>Qki_AP3?y<~wZO?10K8Sz2y6;PvAe>sC?wW7HxP?<(41J9n zY(7aCAaG_2+fLgN22?=L7@u!l5U`#BBWPcK;OsEPrT1Arr&V|4KFb@w6~HubAHfoh=>swE zR);@J7Q~ClR&(YO@I{^yonvd#TqVqTni9z%S&Y$vP(qs*u$|)?<+$YGO4kp%-a<~{ zNnDo&<-ra;EMN;PAkJ7nsBrig?j(pic*%pV`%yplF7}eG*zxSzS($u}2aS3)ne|?bKVc?Dr3s#!E>>5luhJ+;SuX2) z9)J|M+~8jt(f|RxBcM52c3n0n`gQIUdLrKh)WWTNH=lTS;Fs05MvYQYdep}N%t}|c7 zPIOt>DmGmEAvxnoj&;|@D3wm;+@YY+>1vHm&~#j&2zjO>SazD0`KF@-1m$cp?5=~G z>upUPw*&WGy-UG|`y0sH!3D>K42`v)<7tAf1Q^XQCuydxajgBv)7fKowVDS#2EE4A z+JUUEO`^555js4DW?5l(ooMHW>pKk@MQHQ>rkUDfvb4@hZY%lF4& zW8Roxq?g%nT%q?2nEl^-?rBnJ2cK7NdodCj(=l^XClP{-RK7S@S$}gY(2=TISpHSAm1G=d{lbiB?^{a8ebu|3qWR zC~oUv`p+Os)%U%szK1ze!Yl>ZZ}xpstLE@9?bBi?5x#CQ{T-sZ6Z180rhZ_X<<(a` zo!(|wVWu+2k3NpK8QsK6K!!iC8Suy2+f}$nS4KN4`q<8H%A@~QqIb$}%4|j1r+cc+ z@aVqSW^9LUy`QpRr_c?JZM(^&u31P}m%L{LI76)5BW4LNMjrB1AI0U^(o=0O5h0(BH?ps%nQ2fHTu6|oH)!^aQ)s7l`RbZgK zE@3{={eqmguD&2FKtKyGG^`Ou07jjI3BDk{a=Pu8%vA>$QmP2oX|;7&19oJlcBxq5 z*40UVu?x4Ggt@>Wwp@A+-Ap~uB9`;k)$b}eMx(NBT|Lb2hLe#qA1Y-Ar8=Kn^T=+hW6k6y;bz zoUZ-2oxRgQ|4Jx2W81+ztp8X=|Ule?S6m?uTTFp>JF& zzvHDvS7XrCm0qAYXi-8pQ=jOVgZK)TaQXzqX=)5%;}&rCCg4KvNsK;19aiFd>d9i1 zda+6kZ3h?cU92d2@!pdcoOeQ)~r>@M;vJ-P+@mOQAU~G@}G7q(v z^|UwT9AO3RJG?8mc8G1jx8cgIS5-Ya+CumD-oUria&Lh?-t4`n-FvCqK+F$ggX)3H zq^|VsjS~|Yv=is^WZtHM3gXPDR8UH_R{4;UO ztDw?%OA8%OkaVTv03CCccIf~|usnsG9ZO*TSK5bw6UmJy=jF8- zYoHYkU|vX$>{Vw=UDDwmRLS54{GPzM|HTx4J!CQ*;72TbzU2(OZ-T4$NTJO>* z(Vow|$Y4AQrv%a2i|y$^!nPgqLmp4SaC^N9F;A3XtD_W{%Csj$=Qoa&Z={CiHwKDr zdmf_iJ3mD3K^dcu{I@JQ#5mQGPMM6QG2;Rs@_G=i1hd@(JDYm5AM zJziia3PzdLwR<})zGMsAg(}}GnzN$v)YVnRt2M*zotF1-1hOsB*)|Gs$n$b0#g6v! zuHHH!S*gu0BEM+%2%Gi6^0N-wf125Jxz5`pcWLlQbD?0b9JogQmZt>uW#GK?kzuj6OI2B&TGu-Dcbp?<(3)(V|6(waC&VjHUHOrBKk_Na;63rU&Nrmo#o||vO!$2n9Lnu~Rf)6fB9-`-*tV7EtTWxn zXG6q+e~$E|UFQj}GYvK^+$JHXcI<=nkR#?boHz_{d zc`V*ZJw|_}eOt)&7mS5xXJiEa|NWCSiUQ#N@1Ay%k)yu))OySswbUC&3j3eoJ-riqBS_p3Q0H*{3UX>QFByJ~G34LG(EUt*Ypg6_ICf%$kfJ z7}o41c`X%1@JtQA-zvvh>9etCY9_!x55k)yCcL}9nzQ@nnn?y_J=Dl+oNn8mQ}k&o zXVOqght1`FEKYulgk`K7(U;POD~w09d8EX8cPzf=Xc97Q`O+*(5dSZ)ClVEOrMh3EO)?fX(YFhIZql45BhTxe_-I+k-TMD`gtKI_`Mnz>V$xcP40`BMExjvP$aW0@Sq8alGx1fHZd8X? zS+)U9{wm8)X6|0jtRt%|_n4~jS6SYqAiTU>8u9$%+VC%X!lvJ4dd=sjQH+v5oX#DI!^AIi8}#RhIkAVn%3{ zWfY0Pa3YiB)yAZr{YdAQjx96S-ASlzv(!(TNHX3sYe7TM?|<@dHQ=nWJV7aDRb=D} zt+M=$!$QjUKfegp8X~JKuTx{$>F&lMGxqgVJKz5tix%mtETz6H)W3ZHbG;eJwL@gQ zPpK!_vJ7&s{o7q-d7A8iENRo;wh_>h*8>eXp}U%!x9jQb7G&X|T$2 zL?HgJR#|@L8cBfe2FXBhP5D1qWf^ZAg-4XoDhp8yImxRm_SpDeks@7#cPW3(E-f|4 zX+FJ6*}Of?zf^PYc)862)U#xLyzt&H3_v>rX3P01wq&u%=}ss9E$aBW)0MXLrO2e| zZ2wu8;2x3=Jlsa_A-SDR6Ye45`M%spqf<%xR@b`E!;#9ho>PnE+&!+Lo=(gMhD$ET{e!>jT2>~yKekLHulqvuCj5kZgiH719W3=**H))+Q~*|-Ov{= z-Krb%awWWGOKRF4-=)6gYhQnkl`8l48&mxIsFA;)bHi|n_jh^y(kc^Iz09j1u6mjH zKwR}Q=ZCoJWf}}|)o-O65?8&+VYx4{x`(xGF}V*=>w73nsr+IS?|&7w4vb9o1F7c!ki3PBN}N3mWmf! z>xRP?rs1mx>XB6T+iw@W&XoPu$XsXb9#Sscse0gQ>AyN%uG3|I(Ym!XA!KP4Ep03B zT!AH-HLVwsUK8Rr>%F1SuR=UpJy2#qVO3|3x3@71j1@F;m=(#=m-K!!2`|B)1O+CY zt~N{VFdaxOsD6nh$R{vMro9oed>-Zvqi#^_eus9W@kXZ06{-r9Ai~U8f1H$x?}= zwjn=5g3xuS9!=$iOoy0#w_M3Cpev}lr`{Tn_1@t9{dUi*{5`QEyD_iRyxN0-R-UZ0&C&A&%+jU)D9)!xv+)LMIQ{+RXuXn&?S|| zkW-jv!ICs-TGF5&5%uo*r{9Pq{#@dcs4Yoi-FP&V{YNj^*SdK3J2b96SVl_WQ{UMr zIwa#M+Cil>v>QfTX1ag7L15Rdg8Lg`Ds^?@|W$orRrEoo1YU z_gV9i-NPlXMa<>v8;r}1J;bt-peIT1mIIm|0kjYvkwPe{m@AVl4MMY$ad(CMVOu}S z*5*;VqKYBV$@$eJk}A>aH&*Wk-6%$V?t0=o@L}_FESKwb#$bHaknvW$55<*3#+zF) zB;`e>smz}HO+{R9?<3Hi8_LFe+rFnoYF|NP=X!PE9WEi^koJ^Rn3M_6DbA2@3QNC& z>j&iP3s;)}h3f}0)fK}9e#RT|gD<6|x?+m-c6o>Ck3JsL^vPEssqIi%k<$U;A^lbB zMqf#NCFHf8tluuyuQb%BPvr4PpGYwK*gc9~i3IbREXqo$=;;M}-7`E`=Kmc|!Iy6tTDl(>4rWE5&|u1JFuEbZ z=s%HQ?zMZwg2_aK*~#(LQbuQcAgmhpCqbVh3}Pah`asWP46F#OdU*m-H^oSKT<4B8gO^B9$@kfGUMVH7~~u1 zXiiCH;6z?aqNqBS(CH?jCtx=wbh@9=&zK}6bb7}7d<6-L4Zp>re3eSW&K+{z;Ux6u z?y-cnMnW%?BMPz*B$SHNJSgNwH71nOm(65*D4|fvy9Ww`gtGO~dBz)0DD`crHzB_( zGgcC^4D21qVP(aQLbr$-7U+g|{Ih0Y*S|Qhqo8zz7s@!I5Be@`M2C%Tp|T$=E+u!! z<54n&=Hzig4PuuM!FMuw)Rz>nYbWG!rpeF04L0zw{V%9;>uCv;3v{;?d6 z4Jj{6bvb!Fpj#}D^+HC*yPpSC@PR&DT|vd2{|V=j(w})U8Sa=+$-QaKf;_VI@Nd)d zNPUKS6Y|zJE5UU-S)QBfr3DgW8s@C631>MoMUo?p{I{;Vl4Uv`J#%Oq;8yyPkr5FJUr^} zC~JC;7}o6}s51}Y`R-CPa44tZdR9ZRVRhhaS*+*9Z4J%_SQWFSD%gD2Pc0Hz|H^pV zFjEOtA(~Yqrs@Yl6u4JDSjs}y9mx! z%15bmh1Gi$?dVLNBs53LZjQ5+vIU>Pt3x2D^={(f$>(wCM|;*JUCWVobbiS+)#511_2-hUvE zA^GE^Fdb|Y9Mk=9aGk`4c05?+j|VUOpe9*MtE86Lyv0Wr1#a-)EQ`hhN^Yr&UL&oN zcd}8*B-CDG2ZJ%-M}I9py6x3`Yb`e{fS@b$6buID=43{a^;U4+ALtm|P!mnRXf!7H zexZPx#agkVcastlOeX9uuun~6Y8*aW@^D{!Sj-lOs5CaTjFr%#^vjo61k+GUo~XD2CFx8 zWGJp2G9OB(wP}YOrudKiUouk5 zrd)7KEOI?_Ffui!cr*5BVOo96BMacR8|L(MtTQ}G@i}IvUIS!v``#-5QiMgHtNNMo^RlqTsP!mLjTe8kPb4AQ>LJyL89PkL|i)`TQyh@w&>3v|QFP+SGE^f2Gif%(-q_J@kv?9|z< z$NY};p}D)riApB2Y-!%IFyL(mUELbEk#||jDbT3eZL9PpryDC@?et#dsiSba<|tWA z5qt858tf@ALYH1HJbH3j`Zs+D1pV7 zQq+;mildqDNY~FNJC5q)o+uj9vy>1gST4UQ=5aAdgL>p+v{uNN6i?M~ofzQo5hw3hE?H>n9SBA(( zl_dw#i7%Xux~_bvR7y&xCnE$&ljCd?RVgM8Vb=%`RTa9MGj8jxD}de78+IU^323|k z**o+lTS@zHT-iaU-%1)$+4V&z5tSV6%X|XyMBruiPrQ&;PZq!eM=)`an=C6DIEUy$ zJ0>|r<$KGp45KS$Hld3NNY;i*I>PYoG^}?djr1DI+ACX`Qp=f44$7C7PMv_=@|T#) zJUxg0kXU3zt&c2NWb9LpSHn9`bM);R(z1mOUFen>?v{*CA2Kel8d8qXMEvUufL}SJ zJb$JPdY7Yesp;=MikJw-+yHuqiZ$S74_kgw!`I23l zau+2|ChwVQS=c#(s4V6?O+>O7vV@~obw=*gTGFHX)b+aBv`pYW2kr=0Plm+G>5dgW z>mj?L5JY?o#Tr5zCxqeh>?+Pk1e?^sh5Qql9V~^f4pfo#emM~h%@w6y7(ae0B-I0D zF-Xc`=4YiOwv9kWX={FrL<8! zaJ+AJvNb#2eNVC&ehLa*PMw6_Ag1+*Ab0#RTHruO=`$c((pZu7_fB6MbYh{e{Q~@{ z>p_04i?}((!k1YOl0x`qAmR-*74bV12Ti4Z-<%(}D&lz*Ytx;{GbQrrx#iWQXm9P^GF^1XC>d&No$+1T zJjOQG_9OHeVpXCZLvcWrgjY&g{x$*YP$il{e(U`8V4^TL+fwxkgZHWGX{nl;@tz~a zh()H~r`bP+Dw)79o=U2I?gUgQCk}X1rBYjc2vT_8Vld#zjVdzWjgt#wJK!yT77guy zHx2{dgX0YS((}Y~B>~vub!$z_JRlI|U?K>Yvpjb)RmyqP8XDJQ!rADu3_R;Kemdmg zC>jazEVkQI98|Bc(lVi`h<_!Hps7^Rmz0I9iulcF(^c~RX46!zv;3YW;z#_Zl7)t{ za_<$P0tai{*DF_9=IB^4PtG6Ye2h#fR7!FSl&6Z>&>m{2(&sTTOj0gvY>OF{8mUK) zz-EW`CMuo17Ynj@YR*!OzQBYBdF?4$DJGE1sDWf5oL}OE21)KEgf<`AdyOZ(at?bU zur{tI*y#_dopsg{U;&5p1B-c{_XT6|w;J{YayQGDIBjX(5(8(Qh z(%?{k5%nQB41NVQfb$jtUT*Uxg#$_MEx=g@ZN2dnheLZex}E|!+lS%6mYmsh6|F{J zeM~rXGVhr*IMh$1J_Lus|3MAle1L#|xA_t{kmNoBoR!daN`*svPr9B0IK9NElO5Q~ zddr)e>_|@}96H(XbQ&D$mr);r!{85a;H*W!9UVB3aHtNr!K9n5>znB`p z`2_(lwD}S^kmUXboH}T~H=g2fXzwc5Qvjz~7!GX7mrA*AS5qKMzl1|4GoMO>L;V=) zLvR@U57Yq876e>p^CfT~$u)1Rhr~_L?vVRyx-r~@p@8~b6W}oT+o=JZ9TD(tHeXU~kmU9PoR-i&Ydpo_ z(B7f0ryx6T3Q7kKY-PREnwVmf8=MG-PKM4%D>mx;Q6DNc2LBv2fTJHG%6M~az61^= zxz2#o8rrXnr#KwiyU6tvz}X@w9XPO+^={*$UQL1Au|_y_^3W4$aHt{j4aJq!yz*g3q+sI@`-pxWdbn?#QX>h22hWZd3 z2H)C&(-{Hp;J|?-_Yc6?7uw!zpD+~A-ZIxy0B4A>;A983vfh{SbOS~Ug+nJ7PD{%U^*yN%WrxAfpayVGK){dNd~%nqGQcq|PL_197#g2Uj~Py;x95%5PgUjhe`+@*li z8`{EDIJ7s$^%TI_D+~v=vfkr=894HmI>MoorH`h;p?(_mAvg@axdZ161iZBa2a?>? zfYT4!W7s}nD4@NUTu%XUs*`%oi3MIIty8FKjW{X=CBg$(fI& zWrzABsSjm`!9Pe1;9QA-|7G(fa3IN51I{JTt~8$FaA>ce>nVWqji7Ykz?R$vyV<~z z_u4W$baL0jX>h2&oca(P2LCoSfO8!Je#_=d;6Rd_1UN&X{mXcY!=b&AuBQM_n=l;M zlKV~nFmT#hICS#jLuqiRpF({I4uk)j8o;>)0sm?9C2%0gJpeeR&>oZuhxVRvJq2)1 z5~EIbU@PmrCC_=|te~BRLnrwM)8J752K6C04E|sT&S(UDpaTbz+*H6B0qyy0pD?n~ z-WRT?0M3oVf&&M(i}KKSnl4ax(y@ z9NO{5Q@q${uT?UfCxrzE4s2z;11+3gEgU-O%WxB}cc|~20EfZ_aHy}QJ_Lus z|3VGmOhdpw*?b8cNODU7=Rs)qNrgju(_BvhobF=O$qsB~y(RK6B!+@LEF3!dd`cP| z>R+Kg1c$-z>%f_XfcJLbK$3eKaHc~$fbA280@_>cdJ5oNB`i2_U@PnW^oxPBr-ef& zMX7M8|M9-~P{7~^a!+Ju9s)jt{9`D9B=-T}%!XEPY8FBh;LzSy$#5PP792RRmG$;P0dca26uqa+@zHHb`=x0M2}9pEsW3eTVjrbUg*xc~?+6 za9}Izo$<5D&R!M{om_KoTCq{zpZZX-G58m#0i2}>c!ABAz=0(972qs__FLmA4u|$G zcRdAg3c_$;E9;g2WZ>*=;n2xrlhfc(e+Ts;I1JvS25{a&!2hxN5;&0LY5`{%v~5%2 z(B2f+Qvl~sG3sOowzA%WjRwv>77m?!FewcV_4B9?!C~<295^2!;GG>fkmNQ3&Pr%c zX8VM`Lwj$yo&q=*2@4J!*vfkU;UlFr1^Ze!bkZ~x4)q%*0&WNngFl6PB0Fmla3AuI zp#YNHAAqwO+MA81c(KvmX4g{yXQHs+z=5r-x3h(_pM^swN6<*ZP(b}ot`l>;!{BeB z25`Pcz&F`^NwGnaYurSq+}A-n%Xo^zp}o$orvT0}VZng|TUoCUp9HQc=wRW{$z>DL zijDdcsSjm`!Ox}!aB30oQ#M}$2a;TKz}W!pI^!u0hxP`$o&q?(3Q7kKY-PQhzBhem ze+!3B?)zsN9O`eNJ_Luse?|@9{DOej+I$HdNOG+Jrw-a}Q{m8Fwd*N>(;*B8wzA$+ zbp}pH3x`ftj8B6@{Y>gZa2Wh{4xB9rxTOOJlH5*!vkBVc*gjz>puJaIPXU~>gas!% zu$A@J)*3jSEF3!dv8rW(9I9JD3_O7P@&P&3A0|&O`ogjRSvZkQ3g+nLj-kp{m>bp@N$_|5nlp4U<5dlA9 z^CfT~$#nsome9UuJjLPAUVqn90OvbF>A-=ltao+Z6k8Vyhfc;-r@^6qDD@#Y4E}v; z0B2VOyvpWF;6Rc)3~*XQ+c*^t?cL#e3gGM-h67t!?-AbpUsIs3nnMV5vUpq?9O@sU zJ_LusH*w(XgMb@3a3IMY1vtAwdpO%C36%O?cV*xh=hrwUUJz?u`1bng0mlPW$xgLPi1=`8RQydQM?UW4X8DYVJ z16x_|Fg_(zQ*eldLnj%An{bjt{UHf(82r7|08TdqJjv!u;6Rcq2Ar+y_v4308URa>SPDDvfk@o8#sqsICS#$U1@NrUrK!l4ukLHz&Qf} z@9)5YBzHF8^n>;swoe$@Xzvr(Qvl~$VZng|TUqb7uMC{777m@XPK87LraR+90fQgJ zJ&~Pr5%AgMA0rzixgmfv0NSy}Q@q${Z<}N|(}V>F4s2z;{Vkj$EF3y1X1EDM0rmSO zz+v!J)Bw)K2)NSbONtGW+(m#h7}|x#QydQMb#pxh*;y?p9XPO+_0Im%Wamf=hfc1q zNGmq#&!j$7Yz%%8HGp#^0)E-%OW;6~y9{tHfwsD3p{}O@&Q@VKu$A>H*BdxT zSvYhuqdW}`^>nVV9q!@Lw16x_| zZkmSk$X9Tpj8Bg(IqrC># zQvhd*u;9Rft*p13g>$ThLnp`5NWxG+{VuK(bG^ghM^OVfRS5W2n=dIgNOCs=PC2x5 zji)#q+B?Mc6u@~ySa9ILR@OW9Gn1We77m?Ud3##1QQw#PP_Z%iXQ=_4i3oU(&6mJ| zBsU6h#zFg~@f3$cdl$N%0yvumr2_}Hvfi!h3>=1br}lB)omNzm?)3WxS4xSj$yox^ZoOWwq|*1-9Pg+nKA-95}F*^?H3` zveU!Dp_2+K-H1pB6$v;P=!J+;d>O*iC{KwP)&Qb*Yq0N`Tfh0E#a27$kbt)X%yUXoSa7lfTUqZzywz0ToM7S5$uBpj!J+;G>O*iC{4sQo?0kTLk0SpV3LweN z2Aq}9USWuf7aQ&6T~7g=JA?%X4s2z;W)@Cw3x`hjO@%{!Q`d7;eJ#4)q5lz+v#?sR5i8fOEIamlPW$xo-idDYQ$Br#Kwi z>*0C|vh#_cbl|{N)*G_QWT&r%LnpVCrWG6Y=TaZa4ugM{8o=2R0sq_POW;6~s{@>t z(EemR#o^H2HLj-s&Ng8RlgQpj}`*#o^H25w52oJMRce2M%myz3fVpos5M; zC&P!Q6&v*#>O;lG;Gd@kaJnJj`8Hny2a?=2fYTM){}@kkIJ9?}>nVWKASfL;u$A>j zzh&U`w{Ym>(P3$DsK1^15F7^oEj5610s{WV=1br}lG_e&xB)RPYr#G~H*gjz>puH8YrvT1{ z!h(|>*vfj}ykX#+Vd2n8lT>nVUUL0E9$z*g34W8n<2aOk8fjU)^O)VFq>nCl$|e={|Jb1nkD(dJ8v4U$|t zz!?DTQ^r#q4(%P_dJ5ny6&4&gu$A>rT4Ay?(88gUONXWv8}-H1hqA-qXHf$<7bD;& zZN3B!B)Q!IXE3yDji)#q+B?_v6u{XeC>=PkmGy3{F>ubbaOmXTE7Rame?9dfI1GLr zHGm_VativX&6mJ|B)2c%Tmo&&R5-LZ&h-?)*)I$Sw&Z=w%MF~fEF3ziDM^Dv{S4|u za2WiybPqV!A>bAc97u8p0FL0$`>EJIVJM)z#jd9S&Y7~elO5Q~dY`^-;GAvY&`JFj zX>h1tLwyJigFlY$0p}J3++B9DX9bYt4h5W2Xs>68kG`sS_^GZZlRVblQ5Xaszf&6gA#B)MY&X9Tp57*BCHw6~}0DS-2$u;9Rf zt*qC5naR!|3x`ey<4-}FM$I|?gYRohjx|m6o*558P`() zCod=+IIxxVu3Bo~oNM9GN!8_PaHzkM`Vbrj{~k4fGZ6v5Yx5;=Aj$OsoN>@LN`*sv zx4WJKIJ<=5z*g3K_%#D(u!Tb>i!MupL;Zu)hu|>y#txhZ5O9G52a??BfHMi&!`MDy zD4@OPTu%X4L)kFx?u za%Th1gV0`Vh>I5+?S1Wf3gCo8fv2;PeoqPIh1` z>n&Ss;9O+k(8*U9roo~9HR?lf7<@+u&RYn$g98VW+%LR)D(#fy#h znkU0~OjvN>z*g4lVBuV1;m}EMhMO=HP`_^i90os@8o*hLfXCQ;NwGnayBTm+L;JGv z6o*55$GV<^?0g_79XPO+_0C#ovU910LnmeDrxhFZ1E~)c8-rg+4d8r@fM2rt5;&0L zMgh(`Xlsq9I2_u$()AR;X&QzDTUl?+%LdM677m>}ab6l6>hGjJ1c$-bQ3E)&2>3gj zFM$I|t^#m2K)YKi9NK%(^%TH4LX0}ufvv3f(n|);oQ;ap+i(8)10k}wod z-_CVnu6G#xZPWlx6M2t%#v5t#CB+6w?tZ}e6L97jPjNW3cd+XzfU`naaNxjJ*6YWw zM%EORSU7Z2a&B6&QGW{cp<-k3bEyFw`5?8xdB)~T;6Rdl3~-u4yWV(;!=b$kTu%X< zKLn)%2ez`_$mdP5U1{Oa$peGZ;81@H^&vP6{!3~AM?P#UaJ~@F_Tn0n+*5$l658!k z;n3bcT~7g=1Hy1%E9*VOPkGf847G6RWaT+&aHyY6eFzSN-@$>iD*|riz=0(99N@Hu zwinwc3z&*)7 zh5|@(&jZeG&|YVVix(U1{o;BG;EWR%95}Eg@29qKuC{RK zIwRm~ZN8-MK$2SoIQv37-FS+_p}l=wPXV08!h!<_wz6JNehsarV3>tNC+DA)mL2Mk zr#_S&2LCuUfO9wko@VnUa3IOO1~^@y{m^)d!=b%_uBQOb4}#Kx16x_|+UHEM4YzRU zWc-4tz;+k6QeNOEriPFHA~rNW`TJ6%r!oIS&EU@PlQ<7c62 z3a+tm=;YObX>h22l==`H2EVlf=L7`2l>-No-1~sj9onPVK4B=Jy%$_h0i2Am;A983 zvfgTbSE;7pS__9xejbnphx+%a55ZyZN7FsB(-#3BN&YbuK$80iaC$?VGsMMj0-8wD%iN zaX7Ts&h-?)c}`ex;J{YaJ93WcJEay5oeVf5Ej!eAr9PA$2LCT=0Owo;JjLcq;6Rf5 z3UCHM`=;>}heLa(xSj$yUkgeH4s2z;%bziD$}Ai@smP|mq5e|pLvR@UThsu~#R&Kf zn=gR_N$y*~84T?f<0%e@_HJ=K1#nu2;lNhboAR`QbG?N_C(rj!gG2qj)Q8|O_&=!u zoGTIVW}7d814*t9a4vziODY`No9%iE;1r8dCp)l}_1@rzg=z|JuyE+)+e{i9>T9SE z!C~+RI&iK-z?~g9kmP;>oT1PTVf%!UjrKlsJq2*C7Zw~iu$A>T&obG$(ZZpVwyAKa zuRk4dLvR@UdE67(xdj0aCjS`OAj$m(IHl0uZ9K(`jrO)nhBHH0aNxjJ*6VEH++^X< z$;k{i;d+PqP9ZqGo#5}GMkU3gGv0WcEcqnJ=uGY}02u)wuNxn6Af%z#^%3OdbHV2T zfi0Q;e9GkIW($N)MxB;cX4GFmy~)dQHtaVj#-CO4Jr0{AK~a^-6>cSWtrVAMyv7EC zd{Qg?O$vox;hGNO-y;;iSdsUCK52r##RRXmm!HbW^-Gys+;{e?@<}Q~VN0AlIAKrB zcsn{_Pt4@DN7&;sUSBrTFM&l&i;Z_&(?Qsm3)Fyi`Knmf`+=VdtSJ~_!xq~`sbP!q z=YDQ4Alnk>x!ebAKOo<0A*)*d#Sdh1Z4maPj5o=cj)yHac1{j^u0VCdo+M!(Wy2n6 z!xr0TGctUaG|aXryCsAzaZaZgVNa7UI$821>}i?Yt_WK`5%ZZb9S>V`wJmYpMlsl4nDIuDRn+#v zOztp*EnmTU(U^`GiP-4onhwHVEl{1X^%G*}K5p2)-G(i;N1U9-wkXf1GQ_sTxq@PZ zy)@&!Vab;wS(?cmgRmE6yhf>Ei;Z&EbP)FL;jkA;*wd$*uU}!hTD}LnrLFGP#}zds)Uih0PL*L~Ok6nhwIgOrSb!FO#sppJu`yZNnDZ+ogsr z%AZaGrcl@t=OFF_wm*>ZkgTFeKFH)wLD(zh`(nm)yhy}Go8++P2vjHRl@j)mHtcd6 zw%9(4ktGa(qC7SsY>9Ik#Rz+?jE9zdDU!9B+!+Xab;es~Ovl3(8|S;G1Gei0jT822 z3H!Fk4BHhpY_UD{#Izz2m=+IkD9RWv|)?wd~sUXqFhO3C~S%I2q)}X84sPXYcsjQV0%NxyPC}sYFljl zc6Y*mW82 z1!Fp1Bx2)O*K`o}2LjazyH3I$G}W*@#)d7nZ|R-JwkXe|(y)D+jkAVg{j*}GoDs-3 zAlJ%st;<@;XXHjNX<0q_MiI(q=EUdVO{!>FRiUCvw6481c4{TquX9}mFj{KH0zbch z3O^#rc(3+C@tlO>Q=PcB6a`te7`C^P<36u*2!l0gplgKTbt zRFQn?Rzj~X-Xx!CC%6(i)h{<+BWLG)mV7d9^etsjg^?ho1H=H3|uxO{X3WiGrT`hh81& zFQ8FBiuy{(YkNUM@2Anb5L?qjC%`21Rr-%9#MgfRRJJNJH`WxdR$9u|?LhVpdH5Jn(1dTd>_Z(!Pp=@PN1wy3cMaC0`1FWU^KCVD59Sd#ueTpjD z73yxn^3KTA`z!$MUz8X-)fIf`uyK!|7`exII*>XL10~ILWHJvn9tlm$+DSGzob< zO6?1V0TR|h^0p&c1Ia=w5n9lux&k{}S{f}dw1^&i_kaFQbXFFx89j1M0Y9X@Urohs!h-IAruv5rT0_GkqbTasDJp4Ru|}w$X0NCbzje=NshEQa!n&ASv0}sm*_(k$&(r zHy#D2Ei&HHZa!-jPuhZ`sw2%N6dd)1A-7}1?Wo0S!Y#PfD5k5)8&Iu+WUwPy3CSr| zA_avu)fL#;7Toyf5GeX7_VD$zIGp;L;&oa-PQk&7jM0ahf?GFw$Tdn*67Y6AF$^wsUvR-z^QRCm$_HO15$et`i!e z;HIG9v_;0t9^$k9sr0?JRCbEmjj!aCs0agE|L`f!_+h@=)Q% zMsl`SJ}<0%|5qrh3P#sA;=pq(DCe%L4no>%Dx|uDJn0{Po?f^LP4aRh4Tn|kd9$_a ze@FVhaDy^yS`I0}n4^FArUx6-Lu5}J!Q}W?Skflr-LnI#FW*}f)sy8+EPUiyBn-(p zvG(qVLAJJ#?~xxBkUh(iP1Pybqg4Xg)E_{-A^RzzaMWToQBZoK!&col0nw%SV7bXa z<$>gAlI$1)vV400slC;)@+nT-TM2KIwI{I}N$P%7RTYTxVNsTyIC|vjg0ddyJvi(( zlofg>-AbeJ11}HaL&$>x(`kmu8@2_DSLsMB*e*83Zuo^5TOeW;(0X5c;J#7N{S#LxaV5urz zRk5V(XeYf_`ow4#Dk?wP*zJJ^$kVkJKAj_X0NR!E}^JwtNi{V zhUpb3*10qd$udYDb|gz68RtkAL2|Q|NGi~#x&r2GwJos~DtcJ0uE36_wKtXen&S16 zUmnkuWn)F2uN?@ADvQ^T9=X1N14nUH@%pMBg_RYv?N~aU3UhjqZ&ek(s`>JYd1AIv?bh5V7>mE9 zha3swNXmzYI)O-)W=ggbBrT&+3{Hq*7wgLOO&yW_fmMzlQ^EQvJe>nkhE*z#%EGfK zw8K;O_$iD=PtGrpC}rxUkYQF9B4-HJVS^oDKN|TEWn54R>dCT1(x8bz z3~~gMH!xkKMC%c}x7V^8{D$dhc&we``Q zXEh2qGAZxxwdxt9oV#^Qbx3_-$RV$LNc)C^0XQL4>X%V(Lgj&f6nK4#n*2hk^VoF{ zo80B@oS!WXt0(6Sv8WRe`}73?v8wfn9nd=<77DKiQLvF5-Ucli?55ft7F9MlE z4nj-Ev>m}tpl0-941uMMYg^Xfqu^pq=7qSOVtNToH%>53jdviNj$W+a_b#C6dNa_f zY28jSjqG_dXdo0dHPzNM?9sG-b{kP2QB$GYFdaW3e^y|Mu$l4`&uHTB7Hc4BM)3m6fPJo#+ ziO<3&_GZB*ku%2_nk9SG6nn|!EIHMX_Z!@eiz;51 zZBrEA=%yZy2BRph?m}KwayBG`twee=B&Ml7J9_Lnod`-!MRwIADnIN% zADcU24>>KAQ;~)CR75xAR7C&LvqC-0A}&TT!JHImzDxHB73-c&k=UAwrZTCj*~kx_ z5~^2NknbzXAxFlb%Hq1wBkN2`POmDiV-3m)SsjwINCI#izugggv5FfOs1_$=Pd15q z{p~(PT+-HigV-x8me5wi0^RUlkqJf#pbFy3iUC4zRW*KfbiNUwMpQR#T-mc#)nt`d zPF`k%snWxNw~B?0Lq8;j*K%kZ(`{|X$U(@spT?azM&&z7v;u1MYdns_g1rBsoEHHF zRd8L|7);RoQZkV+a#KHzdNT%|fIS&@b0(ai0JF5RS8Ls{s2k~$noRR+W=cEPULQeV zp56DBxGwUS-V4IDUv%CE*$DbY6H~1Hy)Jf`s&o9ySkg4xP*#`m)($~_^W{=FHN_kK z-ptX)l+KI1TB3W{+V$acue`Y#ff(N_yg0cB}L{aNrFuwi; zi_p1XT=W@(4X!GuI*rT);~%F)8+G0>dcnBkhp=rg80X21iqn&>+aDIB+aCcb2ZJG$ z_7QM$xV|*hv#%0?B&)KQ%jT8a;AT zL0KE53fH`H#2rM>wHIMOGZtvC*rYX4ys4_KAka$hxiu^Ogu>b*?U1!f2yp=JvM(Ij zAxpI=zTf_iqB~)tGKjN>*>mh57S2-`EaggkDYhIL_*ZyqkEQ1vUm~o0`GnAjWT@VGlo^pKi|a>^tS=~YGPXm;+dGD7n3$=l=qKIB z^yRUmv~O#{a3Qp%jL`eDDk>{hle&fly5a5i0SdSZ;z}5)s#a4j05d{ETT`I7Emlpo zZF*o}(_yu=3JpdtX)4^wT>>+5z>zRG!*es1ycwLU{;3$o$*2wtuvDElJXcn%vG{ev+wFbgpR9jX z5|zbPIewf3gEE_l!_8-lkT(PcNp(dJjl#S26(|y*!pW|Ndn^X$r^=}17=6MT_0K=L z?*nU<73(CXgegV_b2axf{Pk6%i**NcoWDq6%Zx!r12l1(BZPLU&A6g%k2pAhFW(zp z`$%15r(<5@yiL2@0fmKyxz2KSk{c+Cd05f&+U_OG%xQ&U2&}Jc9Icat1K{l=>-Aol zqPw=bM+ctzSJyYL8nsLY{f703jtoEXZ&EL-0{7|EW@kq?mOA!+83^Sb74Of@XrI5s zW{_siXHz@TdbwkzchpMjtoJ;vu&^sD)(gF(7wd09>E5zy!vfv*rtItw4-|A}0)sy3 zxcQ8wA`x(Mr08y~1`J3HarwVRAm>aXZCcVaqsgkqRdTD!ib+z2494~il}In>b}7e< z1b*{RSDSjH{lN@C*H>ap_Mk4rWpeXk>=9TICWq1r>!EV;1~93= zmPy_APHPh|3Bi|AX1I#BqnpFzM7r^rd|i5Lh{+MJ#F#wcd>%{m+r<$kRU%COB=hP@ ze-e`y!-MowGPwf-NM!Oi_RfF{qV~%CNDkLFgZQOq)LRz9WO{{ zvH~7_Cc83#L?+u(7h-bkrbH&cf6?NIG5J1KffZr0H?7#3+yo}|*D|TwUI&@ulFp2p zgy5y!(wV%{kAS`VA-SVA#N>dNVodHj$S^rG#-vJw$v4hRXR;eS_)LEH0)k6q@*U~| z4rH9{@k=6;)7UhrcaMo$5hgeP3@f%K>%pY{S|)YdTUQh?3Bj;k)0y1MkAO^`ac6|d zZC;Eq`QF)v$=NX`RU%B@CifGh9dUk=d(EBRJ@xr?Cd;V{G5On1iAV)T@_dZRyUsF9&W$mt5@GU) z!RbuSkV_(m$umO%gia^BQDulM!0F`E8%gAaVJofJbS|#7io?21^RY`{Mwq;eW^7Fs zY!*a|_17|~+g_h-112F@+cv^v{*%!mG-K#1v4;%}#lf@V&wnJG$k}mEHchIF4pA$D zW(uv?x@ZbC`fJhXws&*O01X7&M$tHF`S&~o=GVnf5@BepnmIpK7sCdcx{wef=X5HO zy4ZbCdR^QD5B^wn90N#Xa&PKFJ#5ksiA?_foW&6v_194qSP>>qqZL~hgCUCZCewO^^0TS8R7v7hB5lNT_6L?(Mv7h>}H?-H48=i`X=?!TWQYq*<5=OTp3 z;k06FvNf30U(2L!d)ci6CL#D{hjb?IqZ^;eH)K*SG)|7v`|rcO`=pFva#@T?l?ao+ z4oGM6a(M7-vJC@BWODP<5e}qx56ves`7WC#)#UuB6=AXit=O7u3nul~GO62MVY7fq z2p-rzoyk-E2-v%ClZVMeOdhFE0)(0T>omjUiWrkB5hiDykz&=-(=x$tHdTWb%kxB23oJ zjxjm!RKw)T7?UayCNIpUGx@>I>cMC7j#=qUUPfJr$u<8;WU?EZCNbGQYDJiwKr6N; z+k;8{wM^=^SK1_C5`wLZ(wTheDd_y(U3*i6$;W2Jn7pE&VRBWBNtFnbJNHj#vJxJA zCXZ$SiM@L_>OxH3{Y@g1KRs!2#Ky^ws0yqIlYMB#*5tlmQhzOzy6qj%IA9Wj#oMMc zIn0lMHTmd`5hl-;TlFHnd(Xax$<;9?RU%BjeR?{R$HRlqw6r z5}BOArb#t9E^0-X{QGNIu{GHdOzN*?Qn$VJvO1)(=|naJ*R@P%az8%;GI^G~PbV}^ zZuex2$q!F9OsDiJ1+ zIW?WhS!E$62Qh%e-hCW(AtvXV<;uv_;*LI!SnsZX91sI5!ej}p*qS^9OzN*?Qn$T+ ze+NuL@I~`n@3!5hg$S9A<1y9t|e-*D|Tw-iuoTCL!p%b%e?M$zfmh zkD)4v%xjWG4uSKKV-glb=G!Tqz7D3|> zdaxe>>*7LrKV+zfwVeiQ?kvI=xGP;&E4^4jN|pT-r2( z#!1W0egv$GlZR>6oRPQSQCM^9q6W9FOI_5(>Ov(_7iA}=*TuJ2s|UX>?tKKoCDp|( zRE6r|`%lq4|7h4shD}))6=7Z1s2O4M37WBW(FaWGuVqrVy)nNBOhT}0lL(Xfc41#D z9!7)2x|mH}s4n&}a3V+K+u1a!E-s5&5j1N)fmeGR=?66WYtiVo_wsK68VF8p96{rx zrQspyOj?S{54}pW=G2AvFs!+CF$Xu}OI>V?)rCr=E{4d1mD(MX*5uzEsvi8hxRn7U zGI zpQ^x$Fxi_{Y)uXTllp6!)NQZBrhrKZUTXMD)0j9Dex)A)$Et@)B1{g@Ck(>pHoN}A zFj*gCQYFIV8$HvR>;?}$li&Rd6eKeF4s`(sa+cWRqeLdBv1wB89uu`9Om6-VR%}h4 z4JP&1GO63%x}O6kAsF^|I+J_(5s=9fO05hjl~KAp)Kmxq`rl zW9ZA!8A5YaGz{rrU%XE=6T?<|u_@8q5Y}~wnh`WpXvWsXB|xLU7L9IuH~$!*fneJh znigSSFW>7HM+nU$R0X68n(Ymm*DnomQp%=8^JG|ecGQfZdGkHy%bfG(fJT2U8r}A0 z{}7;o;P}na-25Z#t8Q{Cn)j#*p*ewJ?7&(J&-8Weg+VDQsoUBt%Cv+lFKclJ_YFMpF5-?}k2Gh~r1A8JiOhpP z3nFMPpcR{&QlQaai$=G-UUflkAo%e22pZ?Wa2MV9(CO<;J1Yb zpUFl41T%?DPNmND4c6oiZznQY#->S34vJb4CRfUGlQUk70F(M_nbd9XnS8(`1U-LE zXY!ZvFzMIieiuZTTqn;ws86X>dk4m}!wi%1+JQ(-szjLVe^h!+ETZZR z>hB!ZEvGIpBTODmGj^OT2b211nbd7>mu~|mA$a=d2$T6)LzFKc%^>#eI-`; z@K78aFTPqqIFY%NVm3`0FAj)Wk=#5;D>gUdfJT2U8r}A8{U$&I!S+!!PFj|ZLty@R z@$0#Y(>aFC)(1Jl_A;;yqHpx$mEtP ziz7B(tfwllB1~p!#n#1mFsZ+mN!|9kZU~r!pytO&T{ukM6bDDY z4ND0pGWwmwrb(k;m#7uV&BL@}b2Ala^w*-%ZEw{201X5?M$tG0{rX)9%pd)JKT~l! zqu(?7c!uq>P4HY?StrwHcZ>B|l}Ml6hi~;uJnx(g4}Op89SR`SXFE|9Bvk6+f!9dn z>0v8>-w83R{P3{uE9wF>!sGy&v2`&WOzN*?Qn$S$zX+Iw;EnI1bx|`=`SQ_RPhW|3 zF(?!V>tf}riFI)>n!=k$b0@9Xx|j(x`fJhXwwL=nKm);+d<2aH zaXNKz@13y5v*>21iy`})x@aG(3zbM+wCIvPmXCx7pUEx^Ad$&d)R~Nu$vc)LGWkup z#SuFyzDZSJMVRbPE4D6XgGv3hOzO6`$7cbP5IigISCLMVI1hfY9|4bwlh24S*{>qT zH+CY9u5yalV6Pn1&K^9r!L??y4cbGPGs@{HchI@QBfOxHZusD&){%o4Wq)LRz13RWO`A8D?CLKzjF}g^5fqX49mad@O23m~2fe zwk8*WN&U4<>bCdW#{rWNRDPY#WH&zo_U@}ri!iybJ^*6RL|Buxa$G_0mN%zIW*bx@ zOy0j=I+HEn!DsU2Tfs~slMhoDRFg2->g7ZxuVd3BCeMyq5hmY!i8(TJ%uB$e{#qt= z+nfDSz$666f0fSUPa|Q{ugQH*jWGG?tuZDa-P15BuaJ*0sS;uG^nKHre6^o?@R=OW z01}xTKwXH*)qQ$tq7B&XvNm#GBByXmPy_AE;6qU(z|aV_;r0clQTwy znf#=0gvs$EV@#g4hhegNj7gOUlUwbR&g2d7;4|5Q0VFcH4Rs+VN4${8lVO@ zt;v;OQhzOzy6wI5e!wII7k-}3WU~0=2$O%_9Ak3nu7=6pF(y?aOkUGIy(Yiz zqaJ)FC)||ICdQ;ngvp7!r8Bt|Jorq` zFH2`~3UwhSw|O>^$*b5jiOFo#iZHosF09y^Tn8rg*D|Tw-V<*JOhRzXC+SSqmcpc8 zle_nhFu7VE&j>U5KpVs4fEbf15hhRGHJ!WE|1^NnT>pq(1v_)QX^KWzd*=ed>Tle=Qo__I`dNKm$R=hY>VR zmpRIhfTQ0PJ(O?fYP!8X@L~Hb-_rIizXDTPadxcFszmziWWFdaaW;Buc<}q|^TWYb zB9s53E;RbJoQ?KTCWoR)oprvqE*T5lrf@Wm31jnJWS&A?UU`oyqTq!K6R> z?Rk8J$&ZG|n0$zzp{cAG9Ai=?!en2*C@zu7#mA`!pUI&NAd$%obs;8Sdn%F1{d^p; zbDM3VR)onBv|`7LO<+=gEt9(KomUeu3BgbAr!zV2>M)ZZ{v*QVIDH5sT$5+CGRKh% zVoa(;m~6xs#U(O%9X$9C@G}U2W-Ra8=SfSkP6%9iUVH2NVZcYkY`K<(E zqUjvgeM()BVnNf7W^8Vn0*(G!G`j5_jKOG%HGxZ9DmxQK*s(@5M z^ZRt7nH9D&h)tQBd&0WoqGklmT$-`DX$ds?YtiVoH{sO)4Fvne(CicT^?oiD%?nh8 z&~!3rK07MJ$v8G8npeZR;ZZY!=BsJ&YID;HX!O^j(QR+pk^l_^XRVCpW?TO{SU5C503-qfVzoC_)IihoT6fn+hR>`4EL@j|oK>8Rq|9 zYwi8q&U2sI zjWl$xCcR=y!wH8ZNOO?8t(Cb+rI{mHE@=+e(tLb^3zM6qs7Uj&J8zhm45V3eKeuXh z(}ty?Pa_T8t5+A;(s06sE4;etPxOHq;LyW?GwPWO_5 zG<#}kbS%)GrJ+wF4c)6vFWb^^Liuv9G&i{0>XclXeZ6eJ(#GE>mUfz(%C`eKS)@6{ zo%fF9*`Pq0Od(@*b2LjspGF$GSBE*I;e>h1ywW^(oC~>u(w1MpIoHbuq}T+7U#x*3zV@^6e>=bTjhGGK$?&4;Z}`qy0A3#X{4chHGjS>4JVwBANq35 z2pp4=KQ4EwrFq4%#}b2%m6LC-U~0~%9-fllh>2DXO_*Cz3g%V=7`y1oNYbZ4lI~UE3pSFRkg_B>lFwb{ zM)K=pJV;KzJORl;0X^R@NI;TOfaG4gBwsf!=N7E_t0d1R10>HBGR7t|8AWwu{88)q@jB?VXiF=CmiUN#-WzC z2QXt=EzK+Hk0d!A{^I#dnVQpIjQNA>L@P%mSUIJ@%8!zl#QFM*d$|S6E_w(9zDRbG zJQtD=-rT$-_v zoY%pFWWj(0Bu}W*NR}obNhv_`3wcSLFOq$@1q;b0E(TowV#CEw2xJ}T;;91U9&RcN zq^S6d&Fx7BtA!a}GC*=~A!BSZ!bsAmL6Yv(mN_<(oG|_s50cfD?zTEhTYmmxe=i&G z7qKZK&A;4KzVFY;BF*9My!R!~<^9eUGR7|YvNZH*q@jCtghLumcyWPOnitx+kQ*#* z`AKuWmkmhs%IzY}RcrJ+wF4c)8$vu)jQLe0xwX{wKK zNi(e3(L zCmfU@&4KQ=-n=NOG|xzuOPWKqG#|EgVNxMQMVc4gc|*NqAk8PYa;ru+SFkknX{4ch zwcu%68cyi-l2Bkb)a09 zhCYonbg#aD%9e%`Zg|lv%~*F^9g|D5kCzQtTIFQ1v{T$vR9{XOX%2Gdt&}_)6i9Q1 zkTJR$%F@uMk%sP7hC>=ocy7K|nmLENkh?M)lyw@F)m(p>Fj1JYFAEYjTTrqV-- zif(Rj=XLUufo>iYGDbHeSQ`2?($KxCc+!@J6Iv!nv#-0YrM;OwKWQG9EE`lvbD);y z-9ufNTrWjMn&;ek1HEJ*&FZ-5OZS^nmWDo!G<2_?f5MiA6S_a|)y=u?wtl%VsWhKT zmP?wR!bWw9o62k{D$;zN;gWQUmkgu{YH9R3&?uIMK8-YVuhiqVG@NklJg+pP-EHaL zSohP-9$q$}o3WF`(oS$w`7*-EB27zo-ZIIvL4h<~gpBDo*ReG8X{4chb$~+}PIzjr zSDGgeaUpk!wB;M|p5fv{)*5EVM4TG~E;9Q_QGk*V@z(a@8d@4qfi%N}is?7wSQ`2? z($Kx?@tCa}PFVY#M;b>sc&jv{)zZ9T$-%^+WA1QGgsC~_4&630YthP42@x-)AmaVu zXQ|}(wz(W`!HP%Ig#lkAw_M=C0ERJmqA!wfNKro|pY~D#k{Lq9*hK{+NuLHux>rpe zwUOk6sm~@yQvX7%h2-diJVBKgWY)b$54LwLOwb^ONIAP3euQb=X+d5L(^0o3kU3`eY7&l&&%bJjKaO+p^4W{>@~3F?>_SG21B}6QyyS3*hg?e zyQe%DR=0JxwfelI(!3~HE@_U^(yVRi!sKQtD$*=*=M{U&K$`XC+^VsN=`0O>8foZW zEt_FW!wDD9@=DXs-BvKUG&Sc+lg{1$Y+<8%FE^EiQdFe*c|Vt=GreRW&3;-M9q-Lx zY3S2PL-(roep?z&h&}0*ChBghi?rq2TU)#M5RZ5BjbdsZkGJ_8qv8aQ_mO1TeIC-B zCsd4XX0kN&X{4chb)-WYPI%=Bk2H=hQ)F=whj|i|P7W#4^cqSwt7%!+WOr9x3W)5#zj6AkB~0i!|Ct%w}om(?~=2 zYV|#~G@LNxQI9kZK=-#e5Q{i}Z^GNrtD2n6)SSKQjrGh%G(6dD5tCsNW2&XNU$6RM zFQRSf^1d^ZV|b(FxiH)^hRb^~>?cM2Fzo830t}xPD#jw_GKTbNFr<4m`EC}2ErJsc zer7@i1#&8NSJVhnP@X2%+hL=dwzIJ$qL;5rr(!J_&myIDOteu%0!&{{p3&SPNNlpib z*K`w5kZRsA*zHS=;WRgf(}3a6-$-#kI~>BaEj!##n)bzT>%TnG!@Cz;>x<#LQq<25 z=X$9C!y|->vBL$7A$=MQ>0X7V*%)%dJr5H3`cmW0K+dwGZkZp3mHTDG#Jvo zT6%|#At&^EFgb?JEDi+2)AsOS_#-`%;a)v>ajnL1h8x2fz;O8bCw-)PBc8zZ4onJ5d*%I z;(ng#?cD-_p+|;7p`jag!Ch7g?grySl}-nPwy6vfp2};RG{4jP)Wx}yr@?K)zxn*) zNam-y+`a7C+K@?Ueg}~m;%Fk^B?EMeg^aP4m5eTZ8g%Ji^}XFjmlHPJmmJ-@PIaPN z+RugTO{Y1Kl_%4BuF=Ro=0^50Ae-_}()=+}fnb zI`rAk)nfCC=&q>c)MsX5tGk+3=ek>+i&kI$JZY=d$1rWnW3M^cCG1fSt`uJMwA);1P18Pf|_v)1U-XpQdGJGZbHtTj%^xyPfm>dVoV zc$+=x&h|FJX@As9#(wUM@9uP&?V6L4%P(1O`GxUn@@-D}rKpzQop+6w49S0$$ggKX zRV+V!8u{s7y>qiIKPTi+mvcS)b-BB(J(ElG(}~igbKNIT*r?v$O=X1?6>0uRbxAtQ zO9s*$tfkQ_-D_AH`ZUtey$U#_;e^}o@=9~7yRA%V%Xj>3=j)oVy`}ach?@vFG;(p_APo{14%(@ed@YJ*`BKtzJT=w0kNFdzRP33th zDi%@Ggt)g_xZ6tx7Lg`oO#fcb7}BS~knYv@F&2aSHz(XcebZ&%W8H0al(u{=Vs958 zVi6UEB912_+i<)ACBY(AN|wta&JZfbA{0wQpGF$GR~ZgzIN`ZFJkmHo%dtlLqv54)i&zSac%w>+`&qMk8*lV2RtAP8iCR#HEGK$Q|T7}YL1tCBJD${{~y@PRr7CUSTv#2xCzO*Pjbp% zVR}M3%?(4fndeL<`pyWCL1~o zn|TF@Mbvfoh^MJ2 zTEw!p#KN`Z>&8wvd*2@x4X@p`KD?!T%$C&azo}_j-;-`ruFr^tx12Ze>|K7SSXkBq z_vNYyeQW;w!t!;Ql?zKhMyXxO+M7~co0qlrDHQ@aADUgq`q3;Snt`!Hhh9O`)`!8l z1d?i3Oj}=xLs`f!OG7in$%OFQn&#$yarv9$CS_45p|Q8 zIKes&`VC}87vnxUneK@k3<@kl#)oP;NWIkhvUJtUQ>}bqs-t3kxGom1J1yLz`OSCY z*V$mImo2c>?${biToXg z-h6pwIkp!!B^f}s9#7K2ijhbPlz@bd7@>ozY7$3x4)lS245k<%uGP+(;j6hNhk z<0^0ig1Zlng(sG;Xfik&p2+E9A0|DO(!pLld}l#M%6Uq{zEk?yE0$*NRQ%_Hk{Hui(4k=?P&u9o)7}kM)g+Ss({#cMbu2~Y>45z zz;G)j)=|{SETYi8rV#4f9Z`q1vxU4Hb<()bV5#H704NL)3Yvjk35w*;G z1wZ$IHlAgI8g@%c8x-caXcy_d64X|A8e+h$4xmQxjz-NoQffKn1xX=Wjlefy$Yssr zjY9IkijO>?e7dX6Mc7+l0&sUAz)J6}_HC-Y-b#5$B|dcutKDv5A2yz}SS4jd*`lgv z!*p4#VqbSGmf zAOe=or${iz5>QP`vAsUydhw}~xnAn9fHr=d?dRbvEk1RUA*sQ;RWf3glo1V2=WaC} zBt@zjG7Q31^H1}zykbQ+il!H>YYGp<&-TPqn?x%MURV7>`Kb^Nya;B|cq&TG4%Ee7p_?C{j;{E1)p@2i3?);9iBH9vIIv;`a7);e z;SmU?TFP1Igj&3nk`b$<3@kje0%n2(VewNLxkv%KgN681Ow>Ud^;r$QRcBM5GW_Am zp>vKJo^^@vH2KzoXPpb44pPqu$na2o3!WZ&N^al@fCYw!ZW@56fMsyPbK7CW1K=6T zS+;mjNk*)aGNR$f7@o&0couMWx`9XZh{;RzMv6JKTEi94d3{+()jq*4kqn`N`ZW&J zQM7Oc`?Z5^wlc?Yr@sz(Q~u;}Op3m8I-Sv7UP;fU(LdNFKC!3HcC`^)M$~;baTf=# zh;rimW8)E3Z4x2(&`pT4Ova{iaR}j6V~XVZWm%ya4X0})Pqtt8eUyrwi=OIYCJqSqSi>NBsGbLZ;q%poJol1;t}<{Cuved zJ>*P6#fcF$*^@LOqQ*Fr&|*bI4f7<8i>Q9?BnC2~x_MFw?ua_dlgf_C`oNRQFVa%4cv8uGMbx97RPtaEb*rStr{)^d)jj*}L)fNcm6Rbp zvu2>f`@BiV7MG@LHY4ghA>=6Wn3TZCYZW@&v~~rz=IlckNPF?AmwFh6 zDM+QX7oQsOFfzk1LK)HUY!+m;CCD@4&dC{E20@H*^T-1IOV5Z;?O~{DJ^jdT4&qUU z_MrE>2be>Ie;QyaA2ZeI25rk2^U8Xbkfw+0W8wAS3|TUqAMv4;rD9>Fhmtx>mf2U* zjrNt9U^y}@rM^t5(+s!gadS?11`EG&I({WXffnQjBM4ej?4fS?S2Aoiofk}{N3&NS8O#sXsQSC+IJW8sZXAP!n>Wo?RuH)$Yh4G?tW z1!9vr{zf*Y_|&f4oD+y_;Ws|Di{V5IGRg=-8PV{324cPi#CXnTgC`)k!zq$M{k$)8 z$SLbNWwWF#uUv<(FbWE^<5N513rU8v!)zJAjFO_2M5Y?Av=2ClE)WtF14fw)X3KoV zmNT4kNJW1DwWaBfDp6AfJtjW2lhxY0yl#QkC@ES=EY|dJaC@3O8JVo13~4An^=PKZ zShASCRf)*q;9(aR5A7`;#u$ky2`lvs?m~bofK8IFLRL12t*njR7K4oUtFsZMF_IY; z-CJ~OB_&0}3z+T#(B)d{KCwKaJA><_#ly=Z>X6%c)aJs=QFt}-BC2w#PL)EfOd$-D ztGK`ww{Za)-Xj?PF&1-0{6@xj&hVLbp|Mp`OHU&|!UDwd%9Wr;cCkEMMVI*0*36wv z@f2A-L1k+U}9zl1gxk7A=ZRsFEZI?3f4)F6tzKl?&)kt;VIt2 z8_ax-IMw4woY{`353lFWRsFlW!HA0n7U(hSlaV$WuF`8^HAi7NsA;%rVxak}3!_Yr z?3x-ec0Fe!+cm9s(b9nkvt_cD)d*801HozGExg`X_E^mbQj3nt&ZW8fQtqpB+)O@c z2*onnV=0nRw_3T`WSUmKn81?4La3zSu(@y;pW2G6bBACy@tz6B01;^m&a(9>+JHVO zBN|@8rndrwxuRMn*pZzcfC3Q3tP7TQ*{1RC4aQ! zyJ}{l*F@ASDao*v{Cg$eRa4gR?w7X~)?mFnLxo4;aE1Tn71XiXhrLU6{>{TAX2NM5n3r9mZq*Sq*imK)oO^uT{TWp ztJLFOQtb_?)zJto=MQV4_BEucn16^+rC!%aJE^T!1H9BeK~-j~DjKiolX6u2Z8Q=9XL%uTd{(X)N$g zG8ETEX>l)YSQ~Y?p@=Av7OI8fdeu^_-9>So%JWiOkLoP-`eBVh;Dkb(--&&_>xX_Y;($)cvworGLB%`gGBTN$mr3rvtzHkIHx?-d# z{UAqW@N$Y2MCIzI;Ez#Zc_uFo@ZEK(CaniswVlI*g8E2Iers>=k`8jl5>ECqMO z0#*w}w6S9rps=;-ZvhjF8?b=OPgH2w2ke-#fB!X^vhN+yfU@tiBy%hK{agmZ zN7--Yn;fm|;SigZjooplzuzEFm^yWRcMBVB==yhE!q)ZfCkp-^UB52{ZC(F%m96Xh z>HMZ!*AF6WPSo|*sNFhr{lTTumPgkMB-y3wVrjym>nZ`&tLyGk@Nd?2^IwwbdQM>j zx_;J@%&qHhESK+f?Vk@}h-}<%fY=^g(^zxa=gbg$s{Rykj#(KfZO!(vQvEiB;|Bfh z83B%qMxwl|ZHlf^s|t*UC4RH=@Rq6M@iG-iz{x<=hAzpBec*QlnBqJ5*`b>(B$nWF2|ZBuNj>r_<{e`B$7 zvCLOKX1yu8UggW#YNongJ>@8RMKr9+$0$=&sm?dpVkvc_RTP0ilore|v~N^z6>wuF zh!eB4vu8;*Sujq5Af{*&4R7MAo7B^nh|%jH&YOLUWZPBKqC7#bFWaJC)1#xasv~=b zHEh)E53({1!L&o&l_yQMw_*)DZ;a&G29^N>_KqB6VRfH2U}1OW*`Q&LBYgloAcXc> zSm7|Ig&pQ7nqXlk9&S@zt$rPDD>%WzhW>8bLX}$SD4Jklr+sY~U85dw6iu+OPPf@b z*Qt??q6rqZtDFPZ7Iwa)Xo7{kf4wc1QW;iJmxbjIB-(Kpd)ys3!Rgv(>)4jaYgtoE8h5vbg!wh0GS6f+N0g+#)?m9bXD5 ze9{WkLRPI9cmVBq3p#cbh^Kx?mkz7qEmBY_Dn+d`cg$<6BiL?)fY;&H&$?(z^ukn&f2+ph zjjFM;`V955|81Wk>vWC~>gsShTJQ zA7jF902V=N;hWF?P1rJSA381H*oy2mTpQ=zctqL}bqp87;I*N+t&J@Ro?$wN?x9|3@n+yxd2F33~n~^_6Y-*c5fOK831%EZOhG0PJ^ywqN!z zR-9*IU*k7K_5^$M7~>n#xsr|C98CDd9DWwN$QY%c#nQ1aI=JGp*psDoD=yK|k%?k- z&$pQ4cp*VP6J<0MQ<*Y`^0OYXLD_*61`jyugrGb%g=fsV8y9&<$g?qt{kWeI+z*us zlj-coM_~(+19Ph%6L0YKysz@!RUDj}^}OHV4NfgJb4f1owk|;{oM|+nKv{AxXVNgT zJQIt5y!^Q=vsIu5D|{-J4d)`nZky8vmYnul`J=QX zPb*?85N{3>u8q;Pyoim-Yl{I%wrw#sAkh{@niAc{-(z!5X*O@(mNYpZvHg3c`L`t7 z(!6qsEsbq6qAQ0lqG#ElQVAV&Pq5VOnK9DYdb{wB9vjLP6vLCjxCCav5UM;neCh?-aJE8-=pS=(fs# zVox?bNo>q${_n9dcUvd_t@ixSwzj5!i?#X4Z23~XW}>~j)wwv@z#NWy%zT*cA$({0 z5c&T=TvnoJV6}R#q00{X1~GYyDD_wuEgu>_ygFB3bdTzz{x{y>@6u0*mcW1x_k^@~ zmOi|@&Nvg3@9>RghSk&))TT)QWr5CA6C*Rc>03flzsT%1)2=fztH$wX6PejsqPs@V z4vlpz{HxE}#@oQ_zL}WA(PFtU*jt^pNk%+a zxL%`V%jdozHviw^q`EpeCy+=FUngE@&w`Dd;=%Wqqt#&d?~Zu}d@r1m2FSZmSdL#y z5~xksQy_)BfkKuf+kwKA-tL`}M)ni(GXF9ji@Xf4pWB{lTlujpjO}BYi+P>pi6o^={9!S+jn_5M6++y_w?SXIlYZU+g(j#-eOWqIu*BH2a++98X z&bgqwt#aMx{+`~Aw(y_UzEjm&I^(u9-K>2ltSip%ep{PnrswgM`h_RnhGRzj-N2p; zd)at|jt=OJKodL2`xTJ>S7|#o8HqNv_}>^&^of2FAnAybu*&m~iGa+Wn0qedT;*}j zg|1|mCd*!~xsdjCW(57`${Ss@=(i@(6?lj|#rr|WVVkF{;;dhJIa|LW#yLwo#vp(w z%ZW@klkS}*(j%LV+?N*gxNoLT4AUbcJg5EANx|y5G~0d0nPb(4C89Ta){?j$chPs( zYKEkbBo7`yN3XbX&jbagEYZgYh-4uam7ygt_qtg5LgCar-LVJgw{)kD6CDCu&(+W>xp0c>?a1@}hLGd_Gdbm$mrgVD-ML`PQBV*j1 zMD1}pGX(^(uCU=}LXgfuBN3;`jo9+_JI+P8!u70`%IBq&=$ibnN<&I?k+4LMnWurZ z=m#B^M60mWabELhR!~-ea=>(|m6L)hC>oL~0V_S8n&Och%5=uwvc}t}a~2I-q?N1n zj&N8yir6I{qmmNIA~$}{Y9~Z)0LF3h1xujPek`+vZlCh)l~EsaU!KX!z#x>ozg!8k z{;U1PAl9Bu2zIhAqBLDGDmJ8xr6t$~UYCRowsrV}eJwEXQeP`9DZ)#Zms?18+;eM5x zX$0Q>ewCu?Ra_t+;^*VnTpIPx$Y!PGE; zcvrHlZnZpa$@nz{XXaw`b zWfl#$?+`7}9PKb1tw20lzA42z^)CFm7L)a`7IIAUC5coq{< zm8ZC@sHVM6KS(!ELcJx->YNhujf{<&Ia3nw($XacFHjM?M#MkoJrRVbksPhxZ&KWm z$u&a9kH&CQ15_pAA7G^<_1}8$(9qlYJ$BA!832;^*qYC@>VYmcR?_FVZ!eSa-nOTPe1cU<_ZsJF0ch6jt}d4oL2UYnTfe)G_>9WQ*h8V{ZD&r$#LYf&HcC9wRhF+JCgHA$Qch~`RGr0 z5%Op3CAH8x>ng`ABMt5xrGs#?C=H+TnnNPz3~zel@Ssj+o)f~Fu|^%s1;Py8K}KWm zobNTbW~>5sX{sd#Z!p29dN^TkDTb|wn!Ze_);tk{MIWdOuWH6fG)cRrO(}T8@d32; zM(<~?WyxEKLjcK|y-ix}8mpNxwSlrn*mu^EXMNhW)db#nWr3ez;T=BR;JGY~XOj=5 z8z=ibX@srLrf=;t9x2(@<{{HH>*aJNmIjpxjXE9QIDW>6C$QrNhW;t+l)H3sh7{X| zE=J1R12Bpv>S8hao{+S4@t~Df?$O0iYkf$M`ZiWOPZu}H9y!ZyE%^fABq+N*1Q;ZF z9R0=DL)dhsB>7RtGf%L-|MyP2*}Lrybe!I#k=R+a$&|^HAxg3_Z#dW9mn3dv7tyM* zLz<*h;Brjhy$*|_D;m93M12O&rBf_LFPFdhY&pLi4z(^1r?;-}$qyBc{Tyaz_-nN+ zT#r|(kiXGE-xwn}{6W8qU_-5AWdun)+yZYK)_tW5C!|MIkxn508xI4w%X9(}?bjz_ zqIZ5on*+RyR9xI>bW=QU%Ye%+w|gB~>$33Hlx5-H@e)>5U)Dm{il`CH6mR#rPdh+e z$@W$m2OcW*$xC;{jo6EJYNCwrqS~f}-GSx9(?hYI>E*-IIH<&)On@J|GSIDM=zt6~ zlz^N*&(D240l5S4R3iFt%tEf2POy-xt&$QAAQzJ&I|VuNa!?wLM%U|>i4__i3k@gU z=M@2|J??jwQm7MA-~Ph9vk_pBKhb1C<9giJYgB)I+y@V0;dol^sVt7Wp*r)l9G@8T zJT1q5FpM9g2t}LJbY~vHa+w|w=a9OTEsnl8eU18pjLZECqt*NRtr}gpA7ivyq!TPlovjlZu++6WKHV9k726%12l&(ZR2|#Qj_)cu zk03U=u#JAO2+!%_{> z{8)OD5AS|7ts|KY(#)2=<3rQZ(?xhp%Zj{7PYO!~f7dC8ZP-CBT5f2sU?( z9<*EI$yc!$n$(`fF70U5_XBaf|L-*BUZS%y~5Z`V^nUp@Os!sCJjK%-*_4`Ns6u=%K@) zxa9lP=%0=Ab+@zrY4yeHr@j5Nxs-JF&vU%}vvMn2$i%>eB>l5c3i$QUUJD!FKM$9( ze?$L#X@`Z>Aoln9?XiX>ntY4 z9Yjh_Y11k0?Od1UL*F#X?u};&a5lkk88TaNwd&-T7^|B0c=JvydrPcmD2f>at)tYc z10^q-y@eCDsHy`T&+d`Nn0a8^OiDs1Ac^hr$6sWs#Qb?QD~w^O1e*Ija$#?U*B*#% zVIqT~=UGMRt)2tN@`YUtrTE&jxnv{`L;J6W96|G*%kdUH4=DeQ}-oi3`{3TAHFZ zOh@|TdZ85c!Sy#Ut{=5>TY#Lbz^4B}kO1PElNDRhbM}10W(Xx}gmUfV7JR^1OBLx?L4?`&^lxn)TU;gp~o|OPcsDn4c05KGgsOd%^V`{q?fyDEo z5au->^|XaarN?l3t9fFzW*3#b0Cq0$6m}h6iw3i&{sr@-7R$qRuzCD`aC-4NU7lBR zGFuBefaVsn$O$bTq_!;pCADNAyAxul?6NTV#W{U+m*DNJF zmf8B0#ii}IcB^Eyi?wa;32}+>{=$xv8lyGCosQGG^cXv8MAUG$HuOuRSl(;dT*eJ` z`4qsSr}?YFfE!CwO~u+AsaToI)sI&4aTP%vOVxyfDaR7o2)-t{oa#leIlQO?L4F7) z0l_8rl4rXm)xzD|&ju+rjJ8se3^pGAG@`zE!XU06w2z0^U>!?J zQ6+jHjLL3|sLfKA2ZT?Nv__Kq|A$Gi?SNvIMG-G}X3JTjszn|e7M8}cmzttSO3`RG zC9<%l!hF-)sce1OQq|H3B)#2;bFeWreZHMbr>Tok+F^l6g{8jKJ;67)Emhvk@b~zJ zLuHu(e6w%xx6O*z8Oa^A>~o~{_F6XC1?|1G-N%WU(_=K>Kx}zD239W!VpL|2vBx^i zI`q>h>z`u)D{w)KCzR}$;rS4vve|K2l9mF=9J zI9va(j#S(FzmQa~_20e9#sStJw(4%v`VWwzjj{gyjX;gE{sAa$TfbA2->oNR8`fmo z&siY$-i^}a%vu9tqcpkuQ(W9vlRwPjJX@0)=}9#CnUu6N`DmJSZt_^RCSQ|MtY2G` zkDIy(Y#n~=m$$fawrFVb=RFL?ZEEsODcTrK_G+#LYLq5#MQK};vV)pRKl+J)2oA-{ zV?AZ3l`lz0Fa}I`pzpyeCQvq|V2^&b*$|*4{LcLxEiO&6D3+Ke1YHpv%AFwP>AY7dC(&;e30mK2^P#*sAY z`8&swhj3;d95pOVydiclLdpGRi z2Ytx$Hr~S@DN`uYn>SMR8>_E+#H}S~q?#ppwwBJ=&8;OXQawvbik9Gy>mN2+a(ei- zQi>6?J$!Rh*X`jKm~BPi1BxXU#cg`{^Q35FJpAxxTA*!sc%PoKwXaqyc_uUVde)E{ z*;9tx=hlIhkPX4{b7gK=jc?UXMxDi3q6Y2HCpraLNUp+vAt~9B-oCYk`}fn%6IBy z3E1xQt_$1w_w!d2-6pniDcTrp=LQ{|+Su*^0sec~{vrJOV*7=W#jI*JadPbR@b5}V z3)`4{_r>;DvtlkDeow3DHnIK6^rM7T%>)nMe-~eD=OEdEEqO8gm~SKFyKyVY3W#gS ziTG})wJX3wRaoZm$aBYc=GiA#sDXgF8z>I}EOD3TE^vvPD%Pt1mrcBQ*^jHF;Vmq@c!@ZJ7B7zw zstDzMf7OQ5Dddbs@R>F-Li-yN=o95>bu$`i<;0(i4nMQowL>x~hKbG+rP#wOMQf)N zGB2PB4yb?L-iJB@q*{Kr4xn&RN2OZz%*h^%UWMEVvjO5hqV@@JS=t*C$?abgA+g!0 zfZWFVI)a^%NM$5+Ig3|1Hha7uudGj4In{UZ%0e{t^18Q^SBrWG*0Q=?G9)e#?p)Lv ziHA?}ATbx>T1XJ}Si%|b{q^WZhuLV#*vuNk;D0XrQ}=ebB%rs*Oa{5+bLJbmp*{m% zAW3uvyyi^X**^6r!wIVdmi3)*q+6Z$6;oElb#?d^b=nnB{pi+uJN$1D5~YcI{iZ4A zpU;GYRnIx{gBWn^%Q}ySOT?Ah_;cj`2px)(@YDwlLVL+~NCSk%$r%RrJwT}3%tIKV zGV{$wXt%qWm=~eg9|;JpUoHqmezy=hk!~%7J_f4)1B5!GO?FU6N7Sx=S zBD#bN0gz|K;R{&UmLeog;jY%^3R3U}0LOW_)>wx|(n)6Xxa_`~A$CNc4NKwfNsRES zwQ6rEg%3+^jHvyr6l+=gbeSxuKYk-fSKv1?)t7W@{m66$)L=sj`|&#~`3erFu@sFy z&9H>KQR7ZxUT&zvW_J7p32;H!AsgA$t51A@J%gTe;<=qaaYWPe)DuQglFOc#I_iJ7 z{q>#C7J(NELg;Aw7XX}e=Xmm{sry;16c^`MQMI^Ac%mpG3y<~_MgP(XST7Wp)lnzV zB1DpBu@1e5Ti7YjVZej5ah#kO$D|uRIq@ue1eEcfoVZrjG(9ILjxi*YpPabDP;{J} zIFezsPENqeeNIkn5F~t0PC&9mPr8~78&sWc*Tg;IccBQ6uNIB|RbTCW;sSfWJ+TE- zN3*^34y(ZJg|N7Yy6RW$D@=~v2kPCHhQ*!amiCSKG27BU)CrcQE!7DPSlSC%kA>~; z6if5SPiqMDBz9dqjeqYEcQ`2T1ta$t1BRWM6puR{czFE@P6k+5fs@Ag6K9Wyc8ouG z@8=!&2Y;O_*E6P#!!ScL>;(9KjA4As|1k{L{Pd5r!|s};9T}JYCw4gP#~s8lVH908 zi956H+g{TNmT!AnCp6&O4nJPz9y{q7u_WH&q0KvP=?QXI#XNE^*9n%~&+CK++3t^b=>$ve2|A$xxj)9z+|G(M{%Lk8QMR=!Uich|Dyycc!veg}^Xxs+ zEosuuYp09!FCJzqTG*rIU6b>u$)S|`vi0hEC=)*>Xx8@78s@y|6T($AHOy=y`w5vX z%xe>xWYPjgIISuD{@_L`Lpy34-&=>DW4&prypCHxgqeC2(iLK_l*Q4k730QK1xj~E zO$x@sD{FRL9$rbWq>F`DG!3uBIcjdN#cAP9BWe2vO*>DV)t7C;*~5Y#S^j~b?e z6xvw`sUxJUNP|^iHb_uHgHv@@mI8c`_B>wMU5r+U5{`ghR4ouQ5@rP%o`zPCdp~I9 z$*)C3#07zc4v-7}r6w1hN%xy&l4NlKMVbZGdu4xGl`C3#q28y4(rxzo8oYJH>W!fL zUNzITchWaOR%;CtY!P`mK$@8WMdN_&kya9;GHT zWJkkQ41bl%f!Wad5m^C?MPr~mQn6mvVv*&2Nw3=d8-g6aBT=O`eNB)Xa<@TGmUThf zMA8_-l=~Pa{+dp5=ZV}jfYipaYq==8*rc%nXLc>~SgTGqM4?C2=5l6W(*2RGizCuY zxl)>HWftP&;b#m7)0qR=mq_h{4D`vq(xFj{zN;6n=f({$t%Mg4fE_G}sMU71Irh6W zqP9wEJiOYp^gc(rX(ZZ=SoRDH0HQXc18cYF^A>~W@WsH9do>^-3V<2 zCyzM}Hz$q!V~$jv{Wr!O*UA%EK6d=w7cM(~`YVSWqvxU@!0%o!k6&>#i_SYN;1hFr z$37fKXvEm}>X+Oei1LuZV_%`1sa7|xv&Oz5bZd=$&8Y8bwBU#J*!LfKl8KmX{MeT% z`?6+-mz11ojeW<}St9Jbv2Q;UfO^NiKO6y+&)Bz>o}9vhuuHt;V_zQhnq=%dK=6gE z31eULwbt0T<#XrQcL(&8Z0y@=Z3FWrQqr;S`f&oMHTHEgM7L+`3kiPFC62Lg(gQ@f z!Ljd28SKp9u$%B=jeX1PY{%HQQBoaaU*B7~CGXhRQwrK+&0xUq82iqWYTGyVby-4f zSz}+djIZ9Y?|p07b&P#wa;nMZ=Oc8WMvZ+sip4Xl^bR&XXBhlDYmR$In>bH};20vR zO46hB(@Tl7g&r(4hhKPDPM0&cf&&(ET{%wcEkHYx0^-5KHdeD9)^P+Os zSl*#K-CEwE1~zQG0~+HdXd;6rZ<5Xd9++$k=sySe!W|!g9%%FOfip@&nvNU}lFdXP zk9#e+@se8s~{Sf0pQpS1c2( zYd^8D{)}!dtj9tC2i98lmb18;kL+VVMfq@AyajJO#Zy0|84B&d!I(}E28_HeEbcWT zil@-+{5&UFJ1wOhGn1|&$dg28RZL_X(OL5+xh0?I>}T1^v*(}%5W^jv@%WUYPLU_9 z+zxzObF&$THZV6kR#0JM*pa!}+p>H5$dy1)DR)^d}9E}JkurKn5x_8p(h z3w~S^vlTF+B!knrZ!yx~DPeFbt|BYsiCI6owI*i2k+$u4z&S6gz|JIE;=aoBvV7^s z-g#N+D6L>KFMHTQQ@jWVJ_$YEH7}be5V^*t{dgm{!Lcd&9|H$>gn;mZR%KrH=EqjH zV{H2JYUbE6HqGS~?u2>SQ9|7w3*H3!jskVJ%)0X+vx-~W}hduzacWjz1$!OX! zHa+x)hMH!MG*3L0_>p(pHasuG*wpzSySiHYC5zR#na+v2aMGF1V+TpU_g!5*Sr5BA zdv#TFg}#?K(|JaYm~CTq^>Pe`+_C*y}v#MiH~{%hKHImU`{YHKIz)l5k#wCtgP-jain1S8QiR zSG~86e`uBc)Quu;Li92$C8G4x?e= z%SYxwATxAREQP9??GBGKBR&z$Q=ou|#zY#0(x@%BV;v}siEJa%c>R6>C~+O=Nt0vN zftonj1-Jib?|AT97OQdIalq$NIH`A>D0AWe?mCd>%GW!VtYD6};T@~>(TF5_PjBk% zo$eiNJN`{<$j6Sqe%EEkkG#j7$LibY2UrIh8M0zL^o*Uk4)pvg-B}&$K+i5^P}Mc> zSU&S|y0v^}3iUlZ?$hf)@5vKO+ZShd(J$!n-2?es)`8Yc6q8AavzM3*zc?HFe|YMN zJZK}=fwG}j9+9mv9g34ZkXPkd7#MUysJ-jk1UZM=8&?wKRqP0>)XmTnL$2qV&RBcl z1eS;$ZbN$@kpeCkwbp@7F+{g#9q1i_$rWq&mQa?r5|iwKjJZ<7POd$o*2q`zEV1@9 zJKGU!zbdJYSo`^Fh)hDPeTWpaW9`cTza!RuSgLJbtgU$5uww0(hp`0SSbL@~m9B0Bh&_{Cggq^BSM0G!mPg}1yqAFO(FsMu4w7f$% zy0yH+SFmB@9iU%sVq5D#-5jj`#dRRGXU`a~-pb6nA~Cbh(@*wnO`eW8=18dQJgO5_qF>I!!-*l4|Eg!&ueA9{Vczm6iC_181Fbh2t{tsK~BD_Uedw zL$c%H`SoQh>&sU2GD8|~E~PQ&Q1q=*Cc1cH_@@a?s&8*fyZ9Wp|E#w^!}6qLNL_Lr z3wc_2OY zPCqc|bfLr+=>4 zG=x0}=%|YjHDzwmWi(e;IJv69v$Hl=@~e^j!mG}PvDr+f28=DOFWU&-daF_IQlqV7 zJ!eOIPOmv28lDo%o?;k$aXB*>&7M+|9}7=6tfQg(CC8vsHN=6=kJ!h4oh!z}vlwbj ziiR-{X|bNOqCIC;(>U#D3Is2(nnL6CWmD8}cMBt(Eo_dc>!k(Y6c29}fmW#du^SC9 z!R({VRzZWmLa!}(%u3gjS&GlFeqV~Crl{hQ993VFsw8Ex?V^KMA^ds1tffE1@<^WN)rK*J2Ya$|Y9SB<`(^(@&uhGo1 zZ1st-u%1(#sgYDu_%J&eN7g_%8VS*wp`~W9^1fhc%XJm7H(mu|5j*-g4V;QTdL#i8 zP^6(A+upqd;W(bTUG&B_yfDVFtKX-q2OpGX7}~6d+F2UeXl6vth<6!E`W*G;0 zHplSL-xSbfWZ-0<8l-8$oj!*CT*hDB4)VgqoLF;20<<7dAOr;3>Q7)vOd7Pl)wDGC zZ5zHvJn7eHVzbybt{9Mt^5>GP33z$ zJc%t9z2shQ0d8_qv}Z;2CUTQriviiGLRQ482}%*Lq%G(8#cXg!Gv7&R(G0qK+s26**)bP`l0-9u?#dPhb%Qe$3%a&EoFr`q$t%9ipgg zO7NKcZ(uwYu84-m#lsT}B!d|wIF1S0pZ)}%$MsgN92^778>B%9o#0OwE&8oVbj6}| zO;fxd(Z!3tY|aaTDJy=h;{7M*N!$+|O#p>!N(2R-TZ`j`CFMF(wc|zMo;n%cv(~#! z7;ho5R;cD!CnjuE5aszR9N5`v{dCcGdgYT|6Mo&!(dCtoVLf}i@(2^;>$!14RQa&O zCD#$+?60*;UY6}@mBtA^jERBQ9EgS^#&O-1&@jc69CTIvX>69xtth+^W;JK8M)oS4 z_>*joD-l$!q5(urUP&!kj`+B(OoFtyDcYp^E<3Iq8y7$=|JkFE6MX#VFEGpPi7T53 zCAZsL@}q9g9!xMo|BMH%F%HDSOQYe1rgM(El#5E|T#LwQ0DtFf@s^CB2r1>N)WurYKl4%Vzzx>F@}bOh^m!*!Tvf(;mg;$3E>#jd=Xn8NYMO)*i<8`LWMy zjiGR8*+@Uuw~rvmJ~z>iohaFEKX%2N%seXrCOJ03Bz*kX8+uT+{8+Bc?0o!K$CttV zcFd0t5K3-8*7AGd#1Rxj?^pHKB0BxpN5Zt_$2yru(BX2lA3H_r`TDW%7y^$Udsd#@ zW?W!~<8`|(Kh{OsF=eu4LTvm;rjsjpgS*YM;C5ICKQ`k+7Kj%!(WPB}tgmJ)aefRx zwwI9e@ngUKY>Wq-Mb!LW+=4)XKC!n{boj9f<{`NsdqfD@KBDJ*R|^+8TY#gPE#=|w z9e!+HrDg+CqD*g7M*LVifx$gL-fuQn@%pir7CV?9KRD0wW8>-8@?#xd^zmb7vQ85H zSStr}fM}k6zPoXLtmqkAGMMP4qIZuUJI9%7`>|u~9@Wud*D4sPwc5A0 zM4~1e+ue3VgVnyDE@#x;t9=8?V^L(MTmQ1Su6Nwm8+-NvDqM@Vb5(pmjoZ5 zcFFS|pEjM={HDvAA6BQlYkpGPixHNk0ea=3G z+2keiU5FttT90?hUnU4R*8C6xA<)2@Uxx{lCq8WfJ1EdtdI4A9uL~mTcd755(ylY@ zqFyHk8zZW}VN7B(nyM}^Q`O0=A&JdqP|uzg%bsQ!JX{!z zW>2FvzZrmob1>^{COHP3aYhp21GAQ{^4;On*7Hoj?bEELKyZFfQ3W?%Up7sRe$M67 z4tBPHIprr(o_!ikTp`dxwcO!0P$t)u0d~;qJ$f?Ynz-IKi`#Wcj;b9jcHq8 zxK+>5t;J*3TIa9SeL*d8lWVo}Y&alh^9}Jx)4B3KR2k_aQ=@TQwYQu3^7XgfAfACg^c=>=pG}mm%{h6jn*$#i!$uQ>Q&yLiLCB|qFau*?Q$7q&6tLe_H8$Jd)`9KFbSiU>_SqtXD z?a!=rbojHog`gcFJpQ!Hp9P#Pz~L;A@@{`tkHufJhk-KZm@?weUJw%Q812Z%xr!@B zL)G0acHqzceA0^1zM@+zMyq_rCq{dpt2$ydT64o(bD)DcK=k-|2EoQSHTyk*?3ykwK5Y*Jj&mpDc&AT8cfz1a z8ytFVfOe7Zur@HSrwz>So~o;NoJvA)!WCYv*XlP3x5)I_?0myo=_f|eZwh9yaq*O% z56xTD>@w#yqD-lO89s@c4WCX&Cvd_P7j8Ce7f*|(N2>^3ysXkX@uG_zY!?eTxFf3N zW6}d<|7L*F)OkZ$-qXS@N>Apb7V1ecGJ2#GAmFX=zhHMuiecLwy@h@iuW%zvk3Hew zvT#jGO)5SE6T>wV=+q@u1D>k;M@*a}LwQkbZS&`Q{t8=e(fdO6GWr3p$Ki+dTJZKa zUJuuTYx6P7b1gq*%Lx9@)|_wbripLT31f!nge}X$zo*m`(lVr;sc%xBjFe0fDm@5}G)>%0l1h3&d^lxl&+Yvq1SvSk*23XHr7G8^0>MgOXP4S+zWsM!R zNN=Eeq3Zl6$%26Z3jpibd#%NQvJS9@R0}!HUp)g2q7rj*<{vCOHx9|a!EW$ijYf=4 z7l5G`1RfiTo4+;s{nxVa28)q}E=HbY!e9iWoMJ{cfDy%v#Drqa0n5TafD=rEe?ZYOU6`kkrx zbp!dXJH&^2!^yJXS$JTc9Q~#gyciWmJf4ksJdAie;6G7w(b*7*XNeM8MEK<#y%jv0 z)&h=+VZHlc%&8E$KvbAFxWpSX7#?VOek=(A#$wyMM?#2r3pfuQ(esF4Vf&WS_0sLpgvS#9- zb~H=jjh9k-1WFs}uoQE#>;%#~WJM>B=1NupJ z@^HjBYr5uN8_;kD5P(k?mOe9Gc4b6;{F@Wp{e>CZK(IdZsHST%xaJ$vW3fIVLbR1= z#Q@$G>G3R@X*vMkz%7A`Y0O235oy=+*3#u$H3WcMw|NaVA5G&VDK+_V#0CYh~J~d zY6Muun~pfP0LysK(t74$Q$%$;m5b7ukfr7~?T~z=B;%JtSPe^6_QPO8^L@T#(vu;2 z9Y0}QpD)uO=eT}uk(QQ4m2tfp&z{+WrgI%QlxRYL_gwhHJ)R3E8k z>o?P4WCzFfo-fn9qt)1_hjSxb-KJYu9$Iskj^mUdLL78JID21 zrJg;mclk*Gg-?S4?JY9c@YajZge6?9Cq6&m874mt&1Q{^R-@ zy?JlpZ^rc{CS$wC^{gMA;LgkU7zhTNt2JHAdEI;}7XskcxZd&{PBMW1-yYXHyT|n* zJkv}Z*V|o0G9%qPuHSTu#>XDldrFdfT<3)a*SOx<)TBAAdt5)oe_TIaYHV{{rmkUWNHw{AK#=P>VwX@e%cS?P2Ne^(|f~|2_q` zWk0JJ#TZM|23&S|Ha*&`iJZzrP6QD(_%1w;A(U=sN~`$IshdjoI<7wYQT=}9%Tvmi zrJgcoQ`t|3PONpCCBl~VNs-peoi>HAe3JSAUu)}2)5>d7>sQ5^mLp8tQob~G0I!80 z;z(6!KQQ2iC3AlR2ea?3tG^g|l$PutrbvO5K$Ae9;W-5b$9C)4KciboN#5{*1$o68 z$93#CZ-cI)1wSESno?J~L*=H?Zb6cq+`>ouY@zo@X} z)IhUia+@_fCZk(!Zbok2z_KA3MI#0k<>r-Sw7)vPpdcf+s0^et2Iu3WB>$Sc4n)7% zF(au?ud>n+Wu+M-K@zkwatd=Z@B5$yjms5~&W?6ngZs5de zsi7SFZNXnuU(58B(!76P-Iosi$7v^YZ+{lDy*5%X7*`pQ()^rKRJc07bZ8OOki%et(c(h`Im1U?KBBm2P{%52O{|1vv3H= znY;EKlC+Sl-3y9JGr)+uZAZg_9ytT^3Qld-wxn6xT>Re+ygFzV=M)afyL`~lyg^q6 z+Lp9$o7>^kjJ74a>3fIdl6=%L$^RV{Xx1#yEN~s_mr&`pxfvN5*SQdb$rfnXz((M_ zyiqy1Fi3QpjKZSQ9I~j4{F01Lqb@i)qf^H4{E`x~zrdL}WW^(j^Y9%dxD(`!%qb`X z*cq_mPM{SY1=A+%(d>wv;+)}mrRW1kXACYXLmz-u;9sB8V$h?eGLShuzmSy$rHsfc zE*KpMWEG+np)zPFXnIqVA*~kz?ZxZRwMG=`dU<+QC0|XiiQ-z zKR^_AS7>f{PAN<)7dpB!uaLpAc#yu8QJgn8uNa;tj}+81zeIxpT~l9y!a>`Digd{4 z?5Jk-wSjr0+d)7GRuBmED=xxUmL{ioNZD{8L8dY=zw{V#a0Pjk66giZ=K!sYvJ&FE zFoUF}N|tORfaLI;0C&~A+_K_4XWOMib4uZk;hD*%;Al%q0~Zu&&&;kiAH1AZR0fAd zC17ZUlFRz&ol{6^CzTJ+8(vfl6SUezj~;X-d3WOKaNz<*s1xmS;5~2nh|CI{p9A*cwMH7H1R|!dz*Ut2qro63q}T=KV-P4NOAVZpQ;KdX zn#?2b#RCMYK!3oy4_PyHU$@OscP7c%IFHT%A4S{;wSjj8Tn+oLj_f$OLGhf!M^K&o zL3x3GImLzKAHC;#jTQ?ewgDxQ{gJ0}a3#YR5?i=<~1o`CURc;qMmwO~c;< z_&*5(Y{$9u5JNWw;f9vpf{tLT=I^pjI$6q$?i}d%w`r6l#?=0KU{h7MXDLYWN zA-da}*Y1DR{=vH4QMmSsU>wTL7|=F1d$&L{%hD-vH#RHs1T;FcWp#3ni;l59$!N)) zB%s}c-7&?l1&#|87L5oL6y@Z098sJvH#r5Ra#Lcbm2~7(xIsyy8!JVZqcmNP=n=Kt zfw&Apuvp5~ng3n55w7Ldea;aD_IVv$8+ z7C7%JEe_uh0SpsNk*@kXr%?R|0RJz!$*_^C`1elr7{C4 zas#)cVSHB!zj8Z>3gyA-3iFUl;X3S-;@ALbRZ1cPA2bx|F3Bq$i0rF#Oge6eI2jZh zt0oVaM-MN}84}1H7>M-lbygsJ!PyZQc}{7dEk^Kgj~)Sle0cs~^l!Rg(uQkZK}jAy z3v=@a2Rb71>K5pDR-BKG2W&aiojl|zA_{-iJ3?215_^AUw ze?Uinf?rtGs53eRI_8uN$H(wdfvX3S?VN?lO>u^v|6;NjMl{uXL}B~l5rsz{ogtA* zUj(fk&}T4rwF_d%E6GFPvyFcvi!gDpYxSc=fwS@o3fiC3y+;@=lnufcT=NS{nO4ey zO;77|80K85fxwnYb@dV4r^V~)3vg|N>jYfC!F49Cf8x3j*Zpp;t6zg_M_g-hy$IJ9 zhX(>{aP5TasL6Hp{c-Jm8|vYDH?B)@{Sw#pxE^_XU43esK%f}cHn^_A^=w=-rqtEv z;@Sn*3S1+&&ct;St}AdoerjF4!ZmbfU4436(7CU!elo6~JWy9ZAJ_hm*VS*tbtJB7 zM}S{kJK=iM6Ls}{aeW8ZQe4O3SjSvkAHlUN777O9B+8|@K7#9YxW0<(bX-5eHMe~r zF#D;x`jxnT^fc(>Ivoe17685DaqM#)t}Ad&Jrexmv|f8$N8#E7*A=)H;QGz8b@fxw zUI6DOSL50q*DbhSfNLwXQ!p3waGikb8eIRxHGp<5!cqA)xEA7iHm*}}t-v*aQ_hd! zdJ?YbX#YA~yWlzv*Z#O}!Sy;^+q?idaP5n0`U%L#wG*zhagE@*0@sZv1_HxyOg;T1 z=pBdgJLCE$u6=R6438X*!u3a7+jj+@cw%Jo>CpRvy879;9{(!j!S#Avx8S-M*AZuc z9-fe!jO%P%XXAR`LX^X`{gS%+Nx-8AuCs9+hwExwpT@No*N%8}zV%UoKrXJCxX#8k z7uPkoR^S@M1MxF)&A@djt}}35kL&lirXC##w8BH_ZT>&z-UlwKD*yjK19MBYN=R5`99yn9pVmihd#gWe!t(J59dB-&g*s0|8wrSf0%)({Ly^^Tm68 zzF|FVhlwBc_Bpr`x)#RB7158`4_*rkVJ)nIV?V(Um%%Lh+Xh$!4{M{I$7oVAPkfb(Gq+yQIhe%K0+EA!YIyiPW^#f-?$61UI7zrI;kPkQ!X2VKY2Ay9rFTiZr1&d&CEcM2h zeaFLIm<~h#NqfL7SPpl<1{m4S_=5{!$RFv4Fa}QNZhksk4h!HqSOIsy1_|HGeo%fZ z#>o}-)K2;vTmlQ>k^iE8;Uw4uXTUC434{NnR3nUr9WWUNb()wOHLQU< zU<=IPyW)Cb5p{9PWpSFe2zcUnZOji{UC*4Y$B%7Us641uTLoGs$N>;~XZP$9|V9)dmw__7v*#O6KdS)F)g8L(}O07g8Sj z+e#R8DeZF+<$*~s1#W~na2G6rJEk%2VZ_C>2TX;%a5)T{!T5x6FgS_&hlwy3ro&QL z2Wz48&x~uB2YX=y45QpZ)7c+Z!!+0n^Q1m5p*~?Ytb@(4fpT}j4mc;7{9nfSgpsfv zCd0!nWnO`kVG*1MtKfFn1Vd-gf8bOYOugm9Xn5FPm@nWWSOTkItLQ1T3-wtF=fc9v zn0MelSO*hk(yw4X3`u2Pfw6Gn%LsC9r2U^$(|9&AbPL(A`Zi1lGgVupMrJ_H_Ck%z#;crJush8T1<%cOB)) zpxe)7eujtLK)kRMhFwR0n@2x~i!kz4&w{xr{rTc42R2M1Ka>R;DmdbPsmR$jD{^R8#XPY-C-A0H!z;>qds5*OoAOS z6Q&e0Ug0uW18ZO_?1YMPjlG|A;VhU07r;!|{2=`sCas`8Ze)Bu#C~u(EWAmn6|fSn zgN<-2?7oG1EM~sUBHl;oudoA_!?abD3(hZPoWQ*>_EzTM$C)2s=xXL?SO9}ar}_!z zPuK#JVNe<6hLd3lEQh^t){~6aOy*-42Uo*1xEeW{yRC;jJOUnv~F|6pG&Z20wHUmL6o?(1{Z(BBU4>x+alkLc@5hN(yO^<~3^ zKlJsL!04m<`fA~dWBU5q;9O^4Um4}xb$nl69Xtrz;lvY&Z$8Is7zvAEGHig{I#55u z5;$gjUtcSn2-R&IKVUd4hKX=XL|5m8sI+I3GGpReL;UCei#YIo<=@l5zL0`U@@$R)o^xnUtbH%fjw{q z3|&Axr;{#>hUqW^=EG800k=*hUDygcVAL7Z&+V*hU<8~G6X9x@33tLGI5LKG;T+fu z4?B}|;W;oYhy7qYTnD-3#6TfkI1`q`R#*@H&LUkH4}%nunkr~`<=88 z4~2)rXqX5yU?$uOi{M0_gs+0hun88xF1Q^AFXH+ie}5JYQ(y{Q2D9N-SPX-v&`vM` zHp4X74QpY@KZy5y@(mZjRJb4J!WjwF7hDNz;cnOp$6Ua8$Rj@Jgt;&tZiDIYAk2eD zPG$VT1+Wg5z&5xMs=KH+=!7$PYBwIPgX!>lm5(X((Z6B?1GD7@DkSfGiW!s4yM42ztG=c0W5)QVGV4BEl}|XDLrr;3|&e-U@Rj zdueYN0hhrfxEE$Z`xT6DDBto_30J^ISP45}$SlgejP(|bhGj4neh+iu^egGF@Mc&G zcfod;kVbpm$Giz6;Ch${_rtkx!BwOS*TE_nI-79j41umNU3XFBZ+ zXTeIi6*j>=unSJVhI+oAbuf&BJ7F4}d@cEf%V8t+RxppjGB^{~ z!ED$DmqYas<%Uk!1LNUgw=f^T2$%;$vl!1X4%Wk6umi5TmGM-}@fb$JiSrpxuoc$A z%G*c>HbeC={VbbwUJ2u)2G|8VpfiX5_Xz7b7y);{MA!@G!pV2AA8de?uw)_q2yTO2(EfM&eF@_M#=vWH z>G!Y*=D|G;dEp}13im?wDC1@k`Gs*X9%jOH*a-9B*nd!7I1$#tnXnD+fc90a zC-TTQtbmDdFPsar?_%7*gvE>-m zR>5|dwS@XA<+=lmfNd}d#xAA*!!lR|YhV?eRY3oQ^I^#2oWHxu5w6PJzKsP;bi_->?YIh5KMJ z40wR?11G>{I2CroG8j_Ex)#R3$RfraycXucxCiOya2{-ct6?V`xq|ebBt94oSHe^{ z_94m#C&N-W6V}2i*b19qFYJV2Ygi{1lV7+9romM(7k0x^81gXt!)VwF*T7!56^1>< zIsnGO*p=)LQ(-R5hNW;Xtc3xOus@s+?d9wTBj7=p2)^t*^lw-X zgPvtvKSTS&D3}5(U>*#6mU#eX!6sM;yWsA1lxH2|3dX~2&ruIBtdjD;Nw5;mhs|&~ z?1nWk0o(y+(b&9k2$5Z=qknb6^jg1w*UoM=%y{gz0c6%!7x$ z&bkdo!3LNOyI>Ivevxv)au{Dvx#2pfHgLW39r6L=x6|%$^$ya7j`v9y&iRn`eu?^l zDR5E?^B63HRdD3zjB}U`gQ^*KFcLPxI@kr(HvO*zO3j z+Y4;{niDPmVY|cSJ8z8R9=|E0^~F)a@;Q!IsfCt`R*m)sRPO!e_V1TX(1MkA$5Ded z-b>!{Xj{-C;6QptKHCY}i*}EP7A~JDXC{B=;`&}WcRmxA`ukNz z1>Y8>rbPuacVmmd=Xlia_(}Fj2(qaWcH30y$-T>Y`TogK!Pi8oOZv+wHtIA=q5GBE9XCMJ z{#W;>Uq^T*dV;5(-mkY2UWG30XWF07l7Few26SmdlTLd$33H;ip_h5;es@ZByW&W| zllQpYah|6qBPuwYunhFA=r2H18aGD;`=4x!a@-arr|YT^y@bCtIxf(|mvFcL)lqhO z!h&mceAg1>os z!QUhO?5JSBhA77ze9`z~@XcFicPx^8mb~F`xH}g4yow^t_lt7)o!7rlD*H%1&t;#E z7wwK?cyFo$dZLrC0`!0lc1MBe-R3x@V~eK}&vLiNzSWejcqE-BJV(CdrN7<{XH5zxZ3VG(Nm`!l72FJk;VQ_^eprm^db9GcMK_4IpsSj zcjGz1GYvd+OIJB-@Ju2fuX=i@2+2na`j6-dp1LtEdSw5Xt;aN=2E zhm((U(dTTkJKo~GNjK67C%h2PHqyDk({oW&@T@3x8A-X)s>T=ey4`WKr*C?HTFvMY z=xLt1k(T7Q2Twkp(>y&%{rx92fMcRJodP@ACl)=j#_m`t`#a5TcY#rFX?V7}J<;Ah zd3aJ^G5SEf*&}^G(kjPO<@O{G^+Bjs+x6aSvwaf)YJGy3aAIXHfzM|tYT@!g5Oa){1%Lr+JKe&6nxZV`VT z`XcmWJ$0iWmZ4XmJ3V!yuh*e>H2JRYc06M~@KOhZ+Qcz}^Hn_KJ<}QFiNurcBOa;m zWIW|~WIUVtSxSF>XQ4Ns4>`UV^F$H)_?^D{VKtsXTnEz$GM*QFy=D*DAqIRb41S^S{5ha5qLsB_TGo6 zQrEan!jphU*5Ib{(uZh%mnREP4xY2Tcx3ELev9!`;knq;V~oja^q^0y+pZaX0=l=h zllZ&QlhKFtb&fNlhXk<(LNE19AKgh<4EkX$UgiwSd8tu`R6Ln@F7=GVC_@f*^9m#J=Rkv4$;F#vzFXtcTDrt zukGJI4m}-x$o@td)6h%Mt=2BN=vCXmJ z{cRn@`f>{T)t>3o01|&B`Wo~bMAM0b2?cSL*ce|i7@h3M1K&+*i$ zP$yxP=!NL_i=Jbir>P>>{Mv+P>>j(LNj&$MJ?`UDH=ccXyya8U2|1K&4*xXP&n4zK zI83|hIu_4tJV#18yav{r#vGc8z6@RJ&7>RWM>*(g(eDtw!kh+6Qdb(Kc%1Ea$K{@J z7{}mR^c?i-MXxr;;XanM;c3I;t*nwabr@@-ue_``X7<;)6MZ83?UF{FIgRU#I#0l} z4$rgVX*7G>=TLL;q}JITYsB-pcTXXn{cg{XLp_q;Dm?0q0icC zcRVC|;G3pv1n#wUH=gg^o-ps8(8HOx_S)soP0Z;q@5%9A@)Cz<37!)?J+x0aVQJ{= z(1)x$=p&rZ(GzH2eEInH;k#MlIo+He>2DHO1)kKeea9tvYQk57?_`OK*FgO+#%2EO zLf?wMQ1k?IS{xR+x}>gW2tezOyABHpTR?2Z(PH{a}a zkC{w7_I=*RL?rtaqC3%NNP5MC;xLW_w4dL;sAyNcNm*<0&;QoTTG}}NwxSoJTb(EO zqF121u0L!Vlpbv?d3KV9^9VMb#$5ll*(1j<@g(4x?e=_P_E7Dv_M3~R7SDA2rgrJ? z3$ko?^{FC!Bfs;WXV>u$eLVUmiKpG1mefza(SFirTJi42>#P4sJ=&SX#(nR-T|^H@ zpN#IUpF7bL&}XC9@!nK6>XD(~x@I_6()btGVWe&G4fIPqlJEUd&NOh73&;t)O4+BU z%kJpnT9s*^3tekGzp^MND>1+IQBE!f`&}R9^dmLDC;DTW$44S|5>GqvbaY#q+CBDhYiXx~oo!bD)g$SP9ES--8~`dsBJb z$3OJA9_#ok(bLea;%`LHLH8EFlQcWgOVOLWw1Hnq|C}W^OEUM{9T$1#amwBHCH{Yt zZt9vFV)1Rnw?lk!gX)X+q`v%$jeaP3&A^-gtKBivGtTS#>m?t37y6KMV&k}9j=uO! zW6nx5r{$ho8t_c%^0K_qFU8Jd+Ptra`A1$XO)(dJe1+-#dE5c{7AnPPd%Oq2fbfUx;)D1@^s*tjmIh;X{R6>pqF}n z!!s=^N79Kz-%@XP*kz1lncKm=wo1mcb(@!SS7VH1p^tgn%XuGqENK*>7n0A}3=n&P zIgLz?IXBs&oUGfK=bUn@A<#Gkx#rGB_TA^Fhu$mVK8%#F6MY70Kf`;|_@jKT@^hfr zk3Q8?XA*Z37Kt9;V0U~kdZRgS?sZNwo~U;WPsdOX-O%;V+dWJtio6c9Yey9vm_Nw> zj41oNhLO?z-6}`_=K96`&mz^nn2%9Z|GaUVbCA*IwtM`5mH%o)6=3UwbXY6OAXvOFSGdT>VJuetfXDyf)T^ zo`BAfGUtWEkCU)2UbE4ch;D!Dw_^$UaQBlC>ZlvfDdOQZP?vaQed#197LW5#?elt4 z8lDt9XW{pZ$6cO0JcW2J_VgI*q%!mlbgOHDb?5O_Dk^TMAln3LyRnb@G zqI38$=aJ8{zY{$VUHXY>e;Qx(c=Ve|-|4ASQQ?H8qc2AvZoZX!jQjCf&9{=4++&<` zxOG~M=u6OtORF2-kNB+8lCp%du89cImUFUr;_%GGtnVeVl8?vyil` z&O^J=V}o@6xy7yKIAmN(UP8GCSLF8GHPj<*5QnD&&l|ia%HQS*kI}7;n?2~==vL(o9l^Le-FI2y@Jz!KDfP~4@H)YLPbnSGB0Rpz zl8pHqaQZWx-9kR(dgdFBK@x&-F}Sq8oJKjCEduM{yp7?#jyna~$rx#Ne59rjeHs+q|wJQ}Kk2d+@2Zyd{Jnd5LD%i8g*aC_zr^+-C7Adb(Itk+f%=+n_NrEYl* z^mUJO^kjUS@mZ~{B&}>b1fFSltm2V!CE?kI#}y}^2kOXJ3umJ5MIWwQ#rS6Y(YjocRt=slc&yTDLEnu& zTv}=j<(h1rmc$>9ClAl5yf?Ky$9?y8jzm1`@pwC4yX!C$&mJG~gcE-ep5Q+XzZR~+ zmyA#9!jvc0!m`$FLC-{Yt#xzFeSWyLZV30{wx4Ug)|GpV`xsB&u3bwRQqW`Khc81e zzHEF}Whg~2LU)y+?tfN>7WVx$4qB_US^e zK|jrNf6C&1HY0?4a2E5bnbT&(uSot2eHB z#Gt35pYIvJk^dC*QuHC`^TsvvZ1jZ7eYZggor8EA)Ikfn zJ=MC5J?I4&Sg#2~Lx>-JNE?uzq#ujkj_z$uD1A2-y%&AAXZ|jbdlj-`>yIZ7->#|F z=g?*7r5Ea<&mC|~m3-96{^%EYreo-B=o!?5cun=hal%QMIzp*D^aY+e^*EPY%6{Q^ ze#SH2(_@?$%RR=hD~vT*iFuxJpIgg4#%w%8>eJ}c1?X$gBRtdK`nKeu0)0Drw5M*| zpK3tgkAAhMZmhvO&}Yrkmd}UC!x9zfR{4uS{}|os`Hw{OkSlfn^B?8rI*{i-qzsvO zoQc-gWeU;P5XX(4WuPtGYy2uaW74$O=PMaru5_C5>?WOqp79v%)s3D&98IEcG3Qm% zk-Uad5g}K3uMa1BEPCrjy8l^*pa#?N)4lFa!;>}5@EkYPBW<0BCz5o!cyEt2d&sWe zra|}ot!SEI#y8l^- zT(g(8jOkg3F1)+0(f!Xtl$*WOx2x?#IFXLJ*87|hNq*!W<1}>Fvk=vT;;?uYA_ITv zU%ec&X)vk(eDsazL*}sl`XBh)f=Yb7_`IzPEb zVh_5skx4hMF-M~xM0fQYJOh2un1_&ARc?#JEk%0d7nIjN-vwME$@>jqW_Fel;(WV#!}X~ z=)pJWp?`;F%+CerGtj;5?_~c9bo<5HA@>06rGxUyGY~TGiKh`y)pTRbq--~p$KAKP z@MMzCkoBLju8_=@deccn#$`16giG|$XJx2=#@fYE_Up+_|FJy{?_q!QUM8uNTsDyw zx)Z$=eI~lEb$1<}g?J|6_v{by;Eu%8j;9LGkmEObmh0olN-h+(;hEtXk1;MH&|?=^ zUxQ0TpNY=!GUtPObrLogJrDg9Pn|rFge#wgcq;M89OGFQ_w~doJZ*T+^5Su?HJb5+ z-tPT+qLcl)(KFF~#SuD=XPt7a%NvUxf$pumQlF{lh3L~g^J%QXbI^C8OMXmcHR`(r zJ?ai?y#{?cx};^=-&mVJ8A3oQ0`qKC5Z{t^9j&;4mHX$y%X4o~<( z>on5Pr})rw(bLhb%20~Fd7kwey%zl-I){358Tl-6wxS<-qxUts=)LGs=uY07>d>g8 zFofyo$9d{T8^)pMlK&ysg*a|W{AuXx&?k8AZ;Xjt^ep0kz*F~INDVVL@G8TjGC7a2 zdF1gT*PrI{_pwfT3=fnUd1}Hx?Iz=%4!aHOvp+cQ0iomT>IB6m|l7Chtvk z;&Gib7T-#IXL|bRA99g`WKp(TQg&9(iwy#~3p~$MYN(y3~V7H;(O*=u3R;pM<^!{TR>vjsBF0 zUT3ktlYI)&ThY()+@Er~*X31s#xAnXV-xy0=vHOyLZ5|hmB(NXHaR}_m*2A3gD&|s z)sfMElF|MCF?|2Y!FMx0tNtTxP>QD<&$*sy4O*8=IpudW+VNSHS$<#R$UHB{QRBG) zJBdw3pC3S(a?SnJkG~c7zr?@)!LEPxibrkJb7{>aYV(=yLCKh`Sx+_fe{-L)UpR`wYx8EFPtAMWT;+z?EGqN4J_Q;?TcG_f}r1uQc?$d##V(x#;!iR>$vB^j36ESlrwUI8aiogpVYA15-K7~%e4*iadZt-rCMRk2m9KrB3QS<1yy( zZuGLpysWc~bFUB<-Z9Twp9{yJ??d-?twQQN1>L^RyDnwOMvp=#8$-%T7F^{l!7~dF z7~+xhFNvoXaXB7eb9@_~ZFnyBjK`Sc6(=vT&sop$PV|}R-sX78Lp*vG`VxshsBy@8 z!8QKz1XNn5k&hmZ?kx@3zZ`ux?Uf*D@EYiU#xuP2=*O2@A4l5JC!>2ij!69WDAwMj z@09nv2I4o?wBhKL=$W3n$2n0FzR>5b=O;-k3r{{Cr)OM7T1DvP=)F*&@<6p&jf^;``d7HWheV?f602T42tF&B>m)J&$O90oP8 z?zKWPo=QB=N*r^|9``Xk8&3!6yg_HP-{IX;f@j^6+VP%eUW~Pku7PrL@kl2M0Q=*er1waFfH9Paf?F`f#y=f|NQ=_fUKdLjact{shZTF~d65;(LU zQ6BfXMK7M^czhj`oD;cUfXCM{DFIIx9&cmFU8cEs!XtgBCBGAwipN)4Rd|-*u}Vwo zrWw!jO&ni5*TqKNbfd41@?AHfRLWL7zUn3p@n<}~@|%t){50$QI>~Q7p6RCtT3*AJ zGF9No$1{WXrhdh|DRDHQ?>@tKemn6T7Gqs*Nk@KbZxSA>bmTYq3ebI(S$>~yi;r|9 zzw+CCdxnXp6p!P~z@g7s(1&kiwHwAPqxq{AC2fK=-2Yz9_+oWU3k8?h{M(X z+(>c!(R&^wjcD}a(OqeT4NXHl@;jl$czmtz7&~kkzzuh?FPu|NT-+gexh(uw{vy05V-CuD2R_MP7tJUj6C%5N$jzjJ)&Hy6)jJl^sv zZBvR~gf4kE&3T**iC&Ao7u{;?x1wjB>$|+_k6eTE;gNL0@igI)^@J%O#yy7w^ltPa z=R+KCWd98GS@G8U=c6w|x7xoPeH;3bp6MI+S?bY4&hxUragNiD9%Z3BCCQwg^woF!5C5Sv^cVEqD$N z6HhOm@bj(nEai6oiE)R=s_o;^m!OZuYw8=uS|c6ZFTpwuC;R2&iSXf(d{js}c!s27 zv~dG^nGaolv-L+Gy8M=F&;{P(mpsaEJ!hbEI5n4(`P#k4liz`@^Wl+lWZ^k}s&#!9 zp-)90Qcj~jtI*5Qz4amYwS#6nO?Z6GPd#|-7h0DmjJ$@O&9wnM-sUGKdK`K&y05&X zTQ2xjC7(mqaWqDzcEh-aq`}Yp6;pB4pK*v=t&m`dc7a+L{CC*L-%!j zmESH7Nb=riWDb;cit#MN$b{4pNT$Xf1?Z~=*!Wq+NuV9Eqc20o_-5@ zz$M<>O6sr&Jp$b-{?PN7htRFYQ!IK0y483}Mc;#N)rL9flasC6umpV(I!$G+U!x6c z(6^!cYQt7MKjU$F#$mK!FM8yqfnM(?NF9Yu;n;_6HQwUTE77gmFb%yO-Kvgr(RVHIDMoSE5^uqcZef^daRp%2$Uzb*7i~g1h|ad(o}hP=51${N;iD-!GdqbnPqc zCcg*YipN(wC*p}r^^(t9`j4-3(HEdwt>FvM3(+t1YzHpZ$ylsFZ$_s%hs+0}H=u`J z;k}%qcc8CFx2i|^Vx1oJv0mbL5*C4e*ev6`KXqt5Ng7Fb_T#at>rC{?R~mJl;XRHb zJl%N0J@aAILlt^xnst9_LZ5_g)t|c1GtsT$52gW%e8eA(zTQXt$>^=<7klR4SZ8IS zM_gr{|049M=vMi!LeE4W?-{>wF4%;=0=?9W?j)=WJ!*E~(C-vyzTr`1*ZLzQk$aVR ztkRI*z3=g%r=X9!+By%}=$p~GJ!9_6gYr;(yb^kQ^xWsz}L zk8Z!#djEFxG@~CxA1*Jw_~vE!&Wn?Q+>FO+JjWwAud}ZE zbo6u3t?E7xeHr@SJ!uh#$$D_Q`)c-PX!){)6Q$)8jjJ1 zK}j4((1)wH7<@6;Ti2V!pNi*aJXXg{@#Nx3o$K3EhNo&6Pd%P}c!u_0Iiu?Dza4mH z++baH`NO#R=$ZIUb>q>0qw(#=$7OW0kM?r+-xNF(=2@@lveB7LHbF^bjC%d_xPRYG3eFk`Cj&ydy5f-r{amd$;&kj zqdqy-41B+LKHimhukeh|@G?yfc&qSs;l0MfJNSFUTk+1g`S-;uKTcAK_bQ8c$-}_k z*2Ul*dCTzeN?oSoU5MA}94AlW%CfHOGV~O5Uv*uNrv;By-Urup7v4#?4xe{v!?0x5 zLU?~qT_@uG@ps0XjW=n&b$$oebs64uc!%p7QrC@m$KGb$uRGBraCw)yF2Ec6x8GOS)p%Fo{XOxv;qAt2)i(y$br3gFW-J&! zUa9L?yqjyRpGitZKZri$ypVlm{~YuqU$K5BsRX@}yjYzt)u3-h4<{}=uYqHkah}kE zz8BqUP1S>Lzuo(BS@IY97v@-W4w>fojWtLt`aE>2_*2mfe8iuFz6RY}`JAL#f?k8Z z%QJoEXf9W}>aZ41MUI#I`Np%ot>}&Dk4qd`=JPE->Pga3DU{=m!2aiT?lgPkc^#>X za6A(hTBnnMJ{>(9uYI{W4ld0qC*gDPY{m1ecvhJ`?&pFE@kG%l(!}$e*&}6^c&hL$ zb9-L(?rFx8`S(Calf?6`+2bx#51zQ(K+C_k550`*d+5;;2d{ztW&ABnEP65e)t)*N zfYezkdN(?UTJ!!{{dx}ilsm1jo0Oo>Lg$jTd4C41#9xEH9$n@RQ~r$a3ur#-hB>SCiFPceJk{k;QE#NF2UkO%5# zqFd!70=*dBm5+1GX}I%|gy;BtBOe!=J??yD;rS8IQ5N-4gzmg2(Cf3}QXf_5ap-r* z{399$RRvC3yGdO5mPze+`K zM7Qc!Iq1FUR{g33J#DFVzp6oBhi;X>7WA#?CwSI@act;8--~{`=nKqs;C_}fj7970 z0%OizZ1%X@GairQUhmfpr7hCYW6`bpRUY~RbXUK6$ef0|UzOvrFEjd8nc3scM+2T_ zJXZD5f!>L3RUeKk8OQe-_3@H94R?J+;wix6I)=S&_PFzrj3=?sI-M-^OmtVhH<{yb zr&Ell9gi!WRoSyL2p2JrSqLR4tF}ec;c5E>HNp+ai`-(Ec~)VU<$B&-L0r#p@J zho&K(u-Vl4Lql=>>rfQn$gGpk?7GS z*4NOI(38=JyM~sHuNL2#%A*{#vHNf5OYr=NXO|a``&^(FPvfK3?dD|PHaz?B#PHr! zXQbu6c53GWN7O3oc%;4~@T|h)^o+-S{TqEV`fz2>!Z-dg>#|E)#dy}?@s^h8)#%&N zt@=ST`d)Oae$b5`UuqqH$hFL2=vMK^py#4n#h-%yy^r{_(Z@V)9e*+U1azzTtI_k( zt?H*4z1&Cq-RN~b;t%;N--W%}I{p~+8R%B^lY)LTx>f$O(HnfkUyR=2BmQc1`xDmj zH={2=_f|iWr*8C>=)?8ZundlOWxo4rJf55JSf!PYz8rnHvzOBGotB4ge^oo=w?s^NX1yqDoig;T?7vX< z&oSqPrJUd3-vn&L8~1Er|M%b(nY|Zyd=Fj^-l}!Ry1mBimE)`Q%dokm`JDH8E)qQs z-HGn{9=wJ@aTxb)Si75k6EGA1{7Ub2A?;U)UWo3i{hau!@ipRe^{a0OrOPqhy*6mU zGx>Sn{i+ww$QOq1SK&8snG~O|d`W#J;VZ^>GVe`oX?&+)Ci)h1S6lX)^X=J|C3s`2 zjJ6EU-_LDrN;@yfj$uqA0xrpCW?9WpkzA+oU z=SkuzL!W@|tM57SHQ<|v&ow40%z2YOAZ^l#rv*=z%xg7fkMybY2K{DeCwU`5_Ix2Hn-Cx(3Bz(WeUWkKF9Not?y2i5`yb>sZl*r~6gk zV_NE>2j4lhM*j@iX&PUi{WJU~`o?Qsu5oZ7MarIlo{nzSKQqu5qF;d5R8ReVVc`2c z3-Q(AJKEDn=aM{EqPL=N5g-E(O;;*{5Y z*LxzK!`|>+@6w;M@TKAN)t{wKOYoKAvl@#v=-bd;V==>=@4;hH>a87b{8nQw%{6;H z=hEO?IKI4Tv~{`J>+bh4cpUZC{XPXf9KHYhVF$%w(eLx|FL=v)|B?KcqZgs?;Jv+N zP<&qI(k8sKw^`4nUFg;5-ukN4dvF$i+lTILOiNfa`aTO?+BX?J;O*htHwWKTeBRQL zcuLT({T=bt;alS)o;LI?=);XY$F0H8-@^AJ zds)lMHArd8EIjL9*N*#Sz1L%IOZn~0KSwzR)|RDsC%@_adqZN0s}_ABd74Rv>|r08 z=CDlW^BaBq9%m2xHZ=x%{XI^JJ9Iv2zsIwWnz+*k#m)E4O5E=laaX#&63%}lhYn`L z{$pAS`_9?vJ?=Q-&PGqAT>22=t}(|=JxRVDe7D&RQ4TI#T^i-Mov=Fz`v(a~-m2NZ ziTGXLff4i3kaGL_zMwAljrzoU-X!ke+vt1fuDEmlXK^R7@6VrE$DN6u-pb!uN_*7~ zjr$HC?N!0P+uE$-Za|OzGSD$k;#MCIsS{su+p{@G{mOgXGCsr6?R&kP>lx1+C!kM6 zpMcjiHjL~08R)ZjYDb;u3Ff>pSG&ee0iJOmYDbOqw;Kj|=x;X~W2X|&$1U3Nd?22! zW)EY~f4ZORcS2liy%xM_uTE!Jo#7-sv|J`(S?FExIjL*jDga7_P0pyMGwd~qGW`6!c| zScxYAPy5k<4x4x$F?-~=C!V=@_8wz+-u3P&#M5ys^(Xo6^X{p_(|nxaIpZ5se%xs_ zr>QpLkoh(=uCCd1^r&n&*D7}kK6C@*)dtqcKzNc={Qc*=P3DY zQr?d^$(gS1w)KBFQMB62!(^M8=^r8On6K!K>^Le#RKj>$B$u>@@m;Ia{`KfRGeslHLskF!OI#Nx8 z)XlMn{DH3r(T~{F{WiVAPrWSpskcq$?OU?1yUE7u=z(fKjPO(RnKY|Qcbu%xaJ?sg z$Jh=ZP3WKWEdP6LqgUG0I*E^L-s#F`pDkuAwXeRm>Hqkv{WkrUzk0||Kj^PE_~~7K zs>$_!slSB3>Mx$B?2?GYd(<&X-Jt(rd&)Mt%0?FZ$#( z!1MO{wfd`_{=D5Un?7}(E#`6CYI0HLuivrzzhc+b+W$$dH#*dk0R3iwdL`iGJpt&Rlhg1+N33DkEX(w1)T5NjoE0L zir2TRxdc9JG{Mk7qYp@J8FQ*>t~7n{GI4qd`n_}Mq2A`Zp@9@e{lRv~B`5vER%aXi zo=trzWih6`fyv1|MgBjWAKh6XzyH_g=;7zb;pfljc>RKnSv*r+D{r2*>7D@fsZ{oU z+Y9#k0JS+lLcW(taZMl_8D%o({+&+F|I0xAjl=&_$Avv3{J$Ncw+E^1 zBlXfz>cGg8*N#$~N49ApWMBWy>ltc{ zS&KP2XbgKh^#s>(u)mE=YnvhK7SmKYbn2w;{wv2zW8S+`#a`g*JO5XYgW<>NG!}O? zHnou2sjxj4_`O55JM^O?)B__3*(4h&dw=C6xsK_49(_3B;jHQ6nmEh!V(^^phN(-|k`ta52GX0QE-AO*(3u&K&VYq|I|E~W3Y1KYlqCQLXe@gtlryRc1A9PUn zdT!!-Z}*yBy6petJ@W;}>od>1&Gvw8bg4~MN%tE#UW;~}w$|b&{m$e3$+mHF@Hx); zg-u;`+-jSxSkl>Q8~wgb9T=P>`T4(oJeG+G?8J$xDZY|bz`!zp@qfV$6CtX~RH&j!ecW?4)1%Eon! zeav-Ey4qjAZTH_~*Bi9|6I!o#sQdu^Mu6HBaB^FK>K6CCfyWU1Ss)kv+zSz7jWcc1 zcpj>>jsM!FcF7=k(C=Oxeg1l@-M_}JYXfX`T0a`#&uMPY2-O#$YXf;)Vq$xs%6DLY z)Nu^K#Uq&2e~X#UT;+F?e%i+3L=K|7dCaEYIYzxNDYV)2fiU%pO+W9ap7MK5KKu}< zmpN3PL*8$8jAPsBIBW9=RW(9Fz8g_*16xPw&qk>aMoG|pL1KC>=&bujtGh-^$SbaG z(`el{TKzOSUv^k_h<@r2_2?lYe|U)Oa8K}A9|o&;f+b|hpn?s~s0Y!V^wg^B6;W28o2m+K8b%f{6n|Alqae`D?S--_cY zTRHur(qDgM_kYW->$Ly#TEFH{D+2WU0qU)QlfMs8i{;E`#dnZ8s5-^kZp9Sh)0@c1i&HEP}vaNUM&mHPR*ZXB7KDH6`{YZAM7}X!~o3`Nd z6cOKZh`Ke;wrh;K+fP3+Lap@EFZijaUGI1K%^+l>|FJ(f)Ia@oufO`yU-SMYyY8^7 z-S#uKIn-nN1d z$VH{2)QVB^{h&ztZT}P`+5 zR)0QLeK=MEUOQT^JVtdNP4KcXT^XjP?wiK0QYNdW`zP74X?OUF}pW zjwQI_SiSvNRd=ietaIwSk5^wh3I4^YA3aVzaGV7E=QzFd1XXoB!P}149mlKP$4fxN z3Hr$sRo@8&KOC+%g{$YoCE$@0b=P>cLoSQApQx9NSG}%)z2o)k5$f@i2!81#{n1J4 z-IFBX0McscM!B3s1-#SmddY%M4Jw+cp zU$ssl_{S-__3fsZ*K*(Bz%>2D z#p>aUC7|zO-STI(F^S;DB>jDoYEP1Y9e>u(T%zuoPVi&X^=s4BOVcIb@k{j2$*TDh zg7;mb3zOC2WC`d@)^E*FPhCpzE0^leE>#~~Dgm#~(8Ve0N4YIi@E5)AFMJW91T0I@ z|GZ4SkwWk%Df&Mt>R+yaPcPFOE>}e}30^x>H_TL9W=cTC<@&BG)EAc%{L|(7kyLem zss#L!s+(rM^C3y8;b=_a(XR-+>%h3P1PJNO=@OK&df$P*g*Ga&? zuG01V4MDe)mT8#*Gs2T&B*yS?$RrxF=Jux=9t?Bmw(x(jVTUUc8y$ zw{O)zvbww-wQKnZQk zx9O*s*wo$k$i9!Vef1ujdJ#(KV@qthd#O$BgxoM@yNpkHOZ!9j!8cjkKj~WbY-0Oq zfla*+CG?ehxs`XHO?5%OPd>9S_=6Ws#^`*|ryPCITh2 z{y}PoQ;T0ArzR_G`lS^%^(>UohqzAFS!`3=UDvDH*e>Q%j}f|u)B9JsoA{{fR>li# zKVZ%GHk8m8S5iAAHq`<7LKe1V+|OM3NPlP^H)B72)TTDMZpyyL_Fs6vGD6>fl-haB zrk1RdeM{MHSw)LM30=*p&M#cW_y{WXE!+F~ba!cg=yz}%HxkPq7j-k+*2ifvD5167 zjD5Jwrv42%Y2!Zeb5GD>P(tr3qjtF1yA|@lGTZ%xb{V0&o}_l3vZ)8xi24lMcUZ8! z4kh&2r>Gsy!`h(y5sOWiuryy@-XGcnKUiy1FFY;kTWr6^`#F@*x7SiT6*hGc^6>04 z+;Mw`7K0MHvVz*-PUd@1seiJ)hflv6p73*?XP*cS0=$&3A=UGSZkZ0eZ}qQ1uV3of{S1SRzKm#CeWZR%&pA6``3^!jRA z3`*$om#LkNHuV-%>NBrJa`uRp`hl|F=n?zm5ws8|J1|_tzhT7R|Q~!iY{fF&i zuh3$z^oRZmn>qK`uvydww)^n5K?&XdDz(G?iMwh=eT3~RwX_(N&_`dRcDC456Xbys zwgr4TXoPlbp?2zQ>Iv69f|uET@;WUBC3I6AwX@ZxzK1O9-(daz1}z39bjem~=S`b> z4J!2^+n)&i)(HLRO?v%XHdRKeB7^|Tn2(A96*^taonS;$ymdq1D<-qs)bC0x^B zQxCr_Y6aW3-zFU>p(PEB!FQPRAd3yQ2MO&qLf?Of+`UU&+eKZ;_T}w1^&FJYCGQef zBl&2Lc8J1@7q+x4pCoayK4va3MKTp_lc{? zroMozqu4&kr=?B(p?ly{I~fxni25wsh7W9N3zX1DcM{i!)H~!d2-`kFe= zc+8|()JNEEY^KLR30?XTaeZu4uR_it*nUUoKaJ2W9}^d+UOz&Xh@aSWIiFTR3H=Ff z{FFJMMbuihpS9T32T(#QKcxrr6kQu+erCIZPX)XBL%-f-dy%JwdOxSD?53;iw&^Fi ze)=sWlV8}Tbn$8L7dE}F&8EuQB=i&4mQ(6q{io}%Z0dT=5$q0mw?fVspY$uX?f=qG zE-}4qSI^n?`oq;u`Dmm*Fj{>*QrC@EOGkCsmW)=tLGocE7l}rzuF+zu86(^G z$LQ`cYM<+U^&vmo2&z3)e|f0-U+nlPsV=cxBf)6?U=J4AE%1OY2JS{?i9Ag$Da6MxY~BC&ObrzJ@%Zp zk5@I$nEQ|CN6vNWacaeJn)i*zO<;TX@f!8DIb|2msVftH%6^INo_o|eoX6lwZ^IUI#sLlX}xB=DjBZ{+BsgM7oMb>PEy-W z(#s-LUWEQ%?VVp}TU8v#&vNgb$LU0-qTs|>rl!KKO^9>I9=5Jy^+6vhvKOIC(z~Uz zO}ZrR4-A|gXceY4j=6_Dj4}}SAX`y3M8TE%BBD?Q8HgJNr=mhF>Rx2^^S#NbnFHC_ zo8$+ddwwV9dw#!r&)WRX+I!RKl=(2FfWN1LGo9wWPBMJ21NpZo|3kqRqyJ7l6;KUp z_r&*E&G8<;1oz^SU@Bn_CUDOrf&apuGa^6=<(Odj)P} z1s1SfhkbkUsBhPN;M>$EzFiswwzw>?z4rz7^G$)hyo0~z{c2$Kcb@gRs>-K%F7FZ? z$9e9^k^fV(UCP4CSVe#UdP02>tS1p=wU~j3qcev5=EN{5I^g_5Rs#FKdr7Jr9jPXVyeZv_Uswwgy z$6B<9<2E`Bl?QUQoC%|1|F%kQIO;DBFw^x2St#^JdkWD=t)FunicDCjl`BxdRn5y%E3t!HG-;X`{RXo++BDyRcH?CGZ49YE?YVuJE=Y9q>mnpGEwfRv{O_feHd?gh? zwcDArvd2O7S31?+6>I{=@tst!iylzDmam$9ys1-O<#GCF@NWj`RP(d9HEO;aSF2+5 z95|i!2;Zjdp#;`tWc1?u7j zHY;O!T|vXNcCww|;%QG*-0j8BSH^=JT>Mb+^6p1hlg^zSuO&hD f9kit3^9g)&rwh_D=5lI|Y;2crerUMy(Z%>1Guwp} diff --git a/compiler/scasm/sasm.exe b/compiler/scasm/sasm.exe deleted file mode 100755 index 9f924120c32c57fd8a5b2d0965ef057f3a8ca10e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 188416 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%0DR7RqZ1Ao^O!`D}?qm{V=VJkJzl>RKK>m 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 YJ{0vKJt&LwfjA$C^MN=YSep<23-+!;q5uE@ diff --git a/installer/builder/CoreMod.cs b/installer/builder/CoreMod.cs index f247facd..9eaad1b5 100755 --- a/installer/builder/CoreMod.cs +++ b/installer/builder/CoreMod.cs @@ -40,9 +40,6 @@ public override sealed bool ExcludeCopy(string file) return true; if ( (file.IndexOf("dlsym")!=-1) && Releaser.IsWindows ) return true; - if ( ((ABuilder.GetFileName(file).CompareTo("sasm")) == 0) - && Releaser.IsWindows ) - return true; if (ABuilder.GetFileName(file).CompareTo("svn_version.tpl") == 0) { return true; diff --git a/plugins/sasm b/plugins/sasm deleted file mode 100755 index 4bcc84d8a0f3beaa1d6c75b713173e286fd07219..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 293840 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 diff --git a/plugins/sasm.exe b/plugins/sasm.exe deleted file mode 100755 index 9f924120c32c57fd8a5b2d0965ef057f3a8ca10e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 188416 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%0DR7RqZ1Ao^O!`D}?qm{V=VJkJzl>RKK>m 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 YJ{0vKJt&LwfjA$C^MN=YSep<23-+!;q5uE@