home *** CD-ROM | disk | FTP | other *** search
/ The Unsorted BBS Collection / thegreatunsorted.tar / thegreatunsorted / programming / misc_programming / abc9701.cde < prev    next >
Text File  |  1996-12-23  |  902KB  |  1 lines

  1. Alexander Podkolzin            ABC GROUP EXTRACTOR            APP@nw.sbank.e-burg.su         11-12-96 (11:34)       PB                     138  3650     ABCXTRAC.BAS'-------------------------------------------------------------------------π' ABC group extractor. Extracts all "*.BAS" files from a group (*.ABC).π' I cann't explain all details about ABC structures, as (1) - I am notπ' the author of ABCREAD programme and (2) - it is copyrighted byπ' the ABC programmer - William Yu !π' I'd recommend to use ABC extractor separately from your main ABC archive,π' in a "temp" directory. Copy to it ABC extractor and a group file you'vπ' chosen.π' I do not give you any warranty, use it on your own risc!π'-------------------------------------------------------------------------π  DEFINT a-zπ'π  s$ = LTRIM$(RTRIM$(COMMAND$))π'π  IF NOT FileHere(s$) OR s$ = "" THENπ     PRINT "File not found !"π     ENDπ  END IFπ'π  d = INSTR(s$,".")π'π  IF MID$(s$,d+1,3) <> "abc" OR d = 0 THENπ     PRINT "It's not ABC file!"π     ENDπ  END IFπ'π  NameFile$ = s$π'π'π  ABCD$ = CHR$(227)π  %FALSE = 0π  %TRUE = NOT %FALSEπ  %MaxLen = 1024π'π  CLSπ  PRINT "Extracting :"π  Position& = 0π  source = FREEFILEπ  OPEN NameFile$ FOR BINARY AS sourceπ  DOπ     Buffer$ = space$(%MaxLen)π     SEEK #source, Position&π     GET$ #source, %MaxLen, Buffer$π     d = INSTR(Buffer$,ABCD$)π'π     IF d = 0 THENπ        EXIT LOOPπ     ELSEIF d = 1 THENπ        Buffer$ = ""π     ELSEπ        Buffer$ = LEFT$(Buffer$,d-1)π     END IFπ'π     INCR Position&,dπ'π     IF LEN(Buffer$) > 165 THENπ'π' There are in ABC packets chars with code=0 (<32) sometimes, soπ' we have to remove them...π'π        Buffer$ = RemoveRubbish$(Buffer$)π'π        IF OnlyDigits(MID$(Buffer$,140,11)) THENπ           CLOSE dest             'π           DestName$ = MID$(Buffer$,154,12)π           PRINT destname$π           dest = FREEFILEπ           OPEN DestName$ FOR output AS destπ'π'      Header:π'π           PRINT #dest,CHR$(39)+STRING$(75,45)π           PRINT #dest,CHR$(39)+" Author  : "+MID$(Buffer$, 1,31)π           PRINT #dest,CHR$(39)+" Subject : "+MID$(Buffer$,32,30)π           PRINT #dest,CHR$(39)+" Origin  : "+MID$(Buffer$,63,30)π           PRINT #dest,CHR$(39)+" Date    : "+MID$(Buffer$,94,22)π           PRINT #dest,CHR$(39)+" System  : "+MID$(Buffer$,117,22)π           PRINT #dest,CHR$(39)+STRING$(75,45)π'π           PRINT #dest,CHR$(39)π           PRINT #dest,MID$(Buffer$,166)π        END IFπ     ELSEπ        PRINT #dest,Buffer$π     END IFπ'π  LOOPπ  CLOSE                           ' All filesπ'π  PRINT "Thank you for using this program!"π'π  ENDπ'π'--------------------------------------------------------------------------π  FUNCTION FileHere%(FileNAME$)π     s$=DIR$(FileNAME$)π     IF LEN(s$)=0 THENπ        FUNCTION = %FALSEπ     ELSEπ        FUNCTION = %TRUEπ     END IFπ  END FUNCTIONπ'--------------------------------------------------------------------------π  FUNCTION OnlyDigits%(s$)        ' Checks if s$ contains only digitsπ'π     IF LEN(s$) = 0 THENπ        FUNCTION = 0π        EXIT FUNCTIONπ     END IFπ'π     s$ = REMOVE$(s$,ANY " 0123456789")π'π     IF LEN(s$) = 0 THENπ        FUNCTION = %TRUEπ     ELSEπ        FUNCTION = %FALSEπ     END IFπ'π  END FUNCTIONπ'---------------------------------------------------------------------------π  FUNCTION RemoveRubbish$(s$)π'π     DIM PTR AS BYTE PTRπ     DIM ptr0 AS BYTE PTRπ'π     ptr0 = STRPTR32(s$)π'π     FOR i%=0 TO LEN(s$)-1π        PTR = ptr0+i%π        IF @ptr < 32 THENπ           @ptr = 32π        END IFπ     NEXTπ'π     FUNCTION = s$π'π  END FUNCTIONπ'--------------------------------------------------------------------------πTyler Barnes                   UPDATE OF BASE CONVERSION      comp.lang.basic.misc           11-14-96 (16:16)       QB, QBasic, PDS        32   1381     BASE.BAS    'Here's an update to my base conversion thing. This version is smaller,π'faster, and neater. (I simplified a part at the end and removed some ofπ'the exponent stuff I was doing.)ππDECLARE SUB Base2Base (Number1$, Digits1$, Number2$, Digits2$)πCONST Bin = "01", Oct = "01234567", Dec = "0123456789", Hex = "0123456789ABCDEFππSUB Base2Base (Number1$, Digits1$, Number2$, Digits2$)πNumber1$ = UCASE$(Number1$): Digits1$ = UCASE$(Digits1$)πDigits2$ = UCASE$(Digits2$): Number2$ = ""πIF Digits1$ <> "0123456789" THENπFOR I% = LEN(Number1$) TO 1 STEP -1πIF Digits1$ = "01234567" THEN FinalNum& = VAL("&O" + Number1$): EXIT FORπIF Digits1$="0123456789ABCDEF" THEN FinalNum&=VAL("&H"+Number1$):EXIT FORπCD$ = MID$(Number1$, I%, 1)πCV% = INSTR(Digits1$, CD$) - 1πFinalNum& = FinalNum& + (CV% * (LEN(Digits1$) ^ ABS(I% - LEN(Number1$))))πNEXT I%πELSEπFinalNum& = VAL(Number1$)πEND IFπIF FinalNum& < 0 THEN FinalNum& = FinalNum& + 65536πIF Digits2$ = "0123456789" THEN Number2$ = LTRIM$(STR$(FinalNum&)): EXIT SUBπIF Digits2$ = "0123456789ABCDEF" THEN Number2$ = HEX$(FinalNum&): EXIT SUBπIF Digits2$ = "01234567" THEN Number2$ = OCT$(FinalNum&): EXIT SUBπDestBase% = LEN(Digits2$)πDOπRemainder% = FinalNum& MOD DestBase%πFinalNum& = (FinalNum& - Remainder%) / DestBase%πNumber2$ = MID$(Digits2$, Remainder% + 1, 1) + Number2$πLOOP UNTIL FinalNum& = 0πEND SUBπToshihiro Horie                GRAPH INTEGRALS                www.ocf.berkeley.edu/~horie    11-13-95 (00:00)       QB, QBasic, PDS        133  4476     NINT.BAS    DEFDBL A-Zπ'#####################################################################π'//GRAPH (ALMOST) ANY INTEGRAL WITHOUT KNOWING ITS ANALYTIC SOLUTIONπ'//PROGRAMMED FOR CALCULUS STUDENTSπ'//BY TOSHIHIRO HORIE  11/13/95π'//BASED ON SIMPSON.BAS BY T. Horieπ'#####################################################################πDECLARE SUB GRID (XC%, YC%, XS%, YS%, XN%, YN%)πON ERROR GOTO erπCONST FALSE = 0, TRUE = NOT FALSEπCONST e = 2.7182818#πVARS:π      OPTION BASE 1π      DIM SHARED ISECT(3)π      DIM XOLD(2), YOLD(2), YP(2)ππ      iformat$ = "X=+##.# Integral=+#######.###"π      XS% = 640: YS% = 480:   'dimensions of screen 12π      XC% = XS% \ 2: YC% = YS% \ 2π      XM% = 10: YM% = 5: 'X AND Y DIMENSIONS OF GRIDπ      XN% = XS% \ XM%: YN% = INT(XS% \ YM% * 1.33333)π      XI = .2: 'coarseness of the plotted lineππMAIN:π      GRID XC%, YC%, XS%, YS%, XN%, YN%π      'GOSUB EQUATION: 'get endpoints a and bπ      'LINE (a * XN% + XC%, 0)-(a * XN% + XC%, YS%), 7, , &HAAAAπ      'LINE (b * XN% + XC%, 0)-(b * XN% + XC%, YS%), 7, , &HBBBBπ      x = -XC% / XN% - 1: GOSUB EQUATIONππDOπx = x + XIπ      FOR N = 1 TO 2π'TRANSLATE TO SCREEN COORDINATES....π                GOSUB EQUATIONπ                IF y(N) > YM% THEN y(N) = YM%π                IF y(N) < -YM% THEN y(N) = -YM%ππ                XP% = x * XN% + XC%π                YP%(N) = -y(N) * YN% + YC%π                LINE (XOLD%(N), YOLD%(N))-(XP%, YP%(N)), N + 9π                XOLD%(N) = XP%: YOLD%(N) = YP%(N)π      NEXT NπLOOP WHILE x < (XC% / XN%)ππa = -XC% / XN%: PSET (-XC% * XN - 1, YC%)π'A=0:PSET (xc%, yc%):'to start at originπLOCATE 5, 1: COLOR 7: PRINT "Calculating...": COLOR 15ππCONST b = 0                           'from definition of integral?πDO: '------------------------------------------------------------------πastart = aπN% = 10                               '50 subdivisions (N% must be even!)πh = (b - a) / N%                      'dx for each subdivisionπintegral = 0                          'init integral to 0πs = 0                                 'init sumπx = a + h: GOSUB EQUATION: s = s + y(1) * 4πx = a + h + h                         'init x position to startπFOR lp% = 1 TO N% - 2π        GOSUB EQUATIONπ        IF ((lp% - 1) MOD 2) = 0 THENπ                s = s + y(1) * 2π        ELSEπ                s = s + y(1) * 4π        END IFπ        x = x + hπNEXT lp%πx = a: GOSUB EQUATION: s = s + y(1)πx = b: GOSUB EQUATION: s = s + y(1)ππ  integral = -h / 3 * sπ  xpi% = INT(astart * XN% + XC%)π  ypi% = INT((-integral) * YN% + YC%)π  LINE -(xpi%, ypi%), 14π  LOCATE 60, 1π  PRINT USING iformat$; astart; integral;π  PALETTE 7, RND * 64: 'flash the Calculating promptππa = a + XIπIF INKEY$ <> "" THEN STOPπLOOP WHILE a < (XC% / XN%): '---------------------------------------------πENDππer:πy(1) = 0πRESUME NEXTππEQUATION:π'WARNING: you MUST set b=1 by definition, to get correct graph for LOGs.πy(1) = 1 / (1 + x ^ 2)          ' take the integral of this function (for x>0)πy(2) = ATN(x)                   ' analytic solution+C (0 if don't know)π                                '  If we're lucky, this is zero, andπ                                '  the yellow and blue lines will overlap.π'y(1) = 2 * x / (1 + x ^ 4)π'y(2) = ATN(x ^ 2)πRETURNππDEFINT A-ZπSUB GRID (XC%, YC%, XS%, YS%, XN%, YN%) STATICπSCREEN 12: CLS : COLOR 15πWIDTH 80, 60: LOCATE 1, 1πPRINT "Basic Integral Grapher v1.0"πPRINT "uses Simpson's Rule for fast calc"πPRINT "by Toshihiro Horie 11/13/95"πPRINT "Internal revision: 11/25/95"πLOCATE 1, 58: PRINT "Today's date:"; DATE$πLOCATE 24, 4: PRINT "Scale: 1 unit= 1"ππLINE (XC, 0)-(XC, YS), 15: LINE (0, YC)-(XS, YC), 15:          REM CenterπCN = -1πFOR X1 = XC TO XS STEP XNπ        CN = CN + 1: IF CN MOD 5 = 0 THEN CL = 12 ELSE CL = 14π        LINE (X1, YC)-(X1, YC + 3), CLπ        LINE (X1 + 1, YC)-(X1 + 1, YC + 3), CLπNEXT X1πCN = -1πFOR X1 = XC TO 0 STEP -XNπ        CN = CN + 1: IF CN MOD 5 = 0 THEN CL = 12 ELSE CL = 14π        LINE (X1, YC)-(X1, YC + 3), CLπ        LINE (X1 + 1, YC)-(X1 + 1, YC + 3), CLπNEXT X1πCN = -1πFOR Y1 = YC TO YS STEP YNπ        CN = CN + 1: IF CN MOD 5 = 0 THEN CL = 12 ELSE CL = 14π        LINE (XC, Y1)-(XC + 4, Y1), CLπNEXT Y1πCN = -1πFOR Y1 = YC TO 0 STEP -YNπ        CN = CN + 1: IF CN MOD 5 = 0 THEN CL = 12 ELSE CL = 14π        LINE (XC, Y1)-(XC + 4, Y1), CLπNEXT Y1πEND SUBππToshihiro Horie                FUNCTION GRAPHER               www.ocf.berkley.edu/~horie/    11-24-96 (00:00)       QB, QBasic, PDS        355  10174    FGRAPH.BAS  ' Improved Function Grapher                     'π' Log, scaling, incr, and root bugs fixed.      'π' Copyright (c) 1996 Toshihiro Horie            'ππCONST version = 6.72πDEFSNG A-ZπDECLARE FUNCTION atan! (x!)πDECLARE FUNCTION asin! (x!)πDECLARE FUNCTION acos! (x!)πDECLARE FUNCTION csc! (x!)πDECLARE FUNCTION sec! (x!)πDECLARE FUNCTION cot! (x!)πDECLARE FUNCTION log10 (x) : DECLARE FUNCTION ln (x)πDECLARE FUNCTION sinh (x) : DECLARE FUNCTION csch (x)πDECLARE FUNCTION cosh (x) : DECLARE FUNCTION sech (x)πDECLARE FUNCTION tanh (x) : DECLARE FUNCTION coth (x)πDECLARE FUNCTION acosh! (x!) : DECLARE FUNCTION asech! (x!)πDECLARE FUNCTION asinh! (x!) : DECLARE FUNCTION acsch! (x!)πDECLARE FUNCTION acoth! (x!) : DECLARE FUNCTION atanh! (x!)πDECLARE SUB grid (x1!, y1!, XS!, ys!, XC!, YC!, XN!, yn!, xm!, ym!)πDECLARE SUB radianmarks (XC, YC, XS, ys, XN)ππCLEAR , , 32767: 'allocate more stack to error handlerπON ERROR GOTO 60ππ'ln(x) divided by LOG(10)/LOG(e) gives common logπ'Common LOG is defined in function LOG10π'LN natural log is defined in func LNπCONST l = 2.3025851#πCONST e = 2.7182818#πCONST pi = 3.14159265357989#πCONST DX = 1 / 1048576ππ'##########################################################π  XS = 640: ys = 480:        'dimensions of the screenπ  xm = 10: ym = 16:          'X AND Y DIMENSIONS OF GRIDπ'##########################################################πππSCREEN 12: CLS : COLOR 15: LOCATE 1, 1πPRINT "FUNCTION GRAPHER Version "; versionπPRINT "by Toshihiro Horie Rev 04/06/96"πCOLOR 7: LOCATE 24, 4: PRINT "Scale: 1 green unit= 1"πGOSUB VARSπXC = XS \ 2: YC = ys \ 2πXN = XS / xm: yn = INT(XS / ym * 4 / 3)πincr = xm / XC * 4: M1 = 0πCALL grid(x1, y1, XS, ys, XC, YC, XN, yn, xm, ym)πREM =======================START GRAPHING!!!=================================πxi = incrπDEF SEG = 0: ' if scroll lock is on, then double the speedπIF (PEEK(&H417) AND &H10) THEN incr = incr * 2: DEF SEGππ'DRAW FIRST POINT.......................πx = -XC / XN - 1πGOSUB equationπXP = x * XN + XCπYP = -Y * yn + YCπPSET (XP, YP), 15ππDOπLOCATE 1, 67:  PRINT TIME$π'....................................................KEY CHECK....πin$ = INKEY$: xmode = 1π  IF in$ = "*" THEN xmode = 16π  IF in$ = "+" THEN xmode = 4π  IF in$ = "-" THEN xmode = 1 / 4π  IF in$ = "." THEN xmode = 8π  IF in$ = " " THEN xmode = -4: 'reverseπ  IF in$ = "," THEN xmode = 1 / 8πxi = incr * xmodeππIF UCASE$(in$) = "Q" THEN GOSUB ASKπIF in$ = CHR$(27) THEN ENDπ'INCREMENT THE X, FIND SLOPE............π'if flat curve then speed upπ'IF ABS(M1) < .1 THEN xmode = 1.5πx = x + xiπGOSUB equationπM1 = (Y - yold) / (x - xold)π'.................................................BOUNDARY CHECK..1πIF Y > (YC / yn) + 16 OR Y < (-YC / yn) - 16 THENπ   Errflag2 = 1π   xi = incr * 2π   GOTO SKIPπ ELSEπ   xi = incrπEND IFπ'TRANSLATE TO SCREEN COORDINATES..................................1.5πXP = x * XN + XCπYP = -Y * yn + YCπIF Errflag2 = 1 THEN PSET (XP, YP), 15: Errflag2 = 0πIF Errflag = 1 THEN PSET (XP, YP), 15: Errflag = 0π'DRAW LINE F(X)...................................SLOPE CHECK.....2πIF ABS(M1) > 64 THEN xi = incr / 8πIF ABS(M1) > 256 THENπ        ' vert asymptote - probablyπ        'LINE (XP, 0)-(XP, 479), 7, , &HCCCCπ        xi = incr / 16π        PSET (XP, YP), 15πELSEπ        xi = incrπ        LINE -(XP, YP), 15πEND IFπ'CIRCLE (XP, YP), 3, 12π'PSET (XP - 1, YP), 14: PSET (XP + 1, YP), 14: PSET (XP, YP), 14π'FIND CRITICAL POINTS.............................................3πIF MOLD * M1 < 0 THEN '(Mean Value Theorem)π      CIRCLE (xold * XN + XC, -yold * yn + YC), 4, 11π      COLOR 11π      LOCATE 28, 4: PRINT USING "(+###.###"; xold;π      PRINT USING ",+#####.###) "; yoldπ      COLOR 15π      PSET (XP, YP), 15πEND IFπSKIP:π'SHOW SLOPE AND X,Y COORDINATE....................................4πLOCATE 25, 4: PRINT USING "(+###.##"; x;πPRINT USING ",+#####.##) "; YπIF SGN(Y) * SGN(yold) <= 0 THEN '...............x-roots (misses mins)π      LOCATE 27, 4: PRINT USING "RootX=###.##"; xoldπEND IFπMOLD = (Y - yold) / (x - xold)πxold = x: yold = YπIF x <> 0 THEN LOCATE 26, 4: PRINT USING "slope=+####.##   "; MOLDππskip2:πLOOP WHILE x < (XC / XN)πENDπ'======================================================================ππASK:πxold = xπLOCATE 1, 1: PRINT STRING$(80, 255);πLOCATE 1, 1: INPUT "X COORDINATE"; x: GOSUB equation: y0 = Yπx = x + DX: GOSUB equation: der1 = (Y - y0) / (DX)πLOCATE 1, 38: PRINT USING "Y COORDINATE IS +######.###"; y0πLOCATE 2, 35: PRINT USING "1st DERIVATIVE  IS +######.####"; der1πY = 0: y0 = 0: der1 = 0: x = xoldπRETURNππ60 :πxi = .05πXPE = x * XN + XC: CIRCLE (XPE, YC), 8, 8πLOCATE 25, 5: PRINT USING "Error: ####.##   "; xπErrflag = 1πRESUME skip2ππVARS:π'fill in the polynomial's coefficients hereπ'Don't forget to take out the apostropheπ'before the Y=C4*X^4+C3*X^3... equationπ'note:CA/X, CB/X^2, etc. causes overflows near x=0πC4 = .2πC3 = 0πC2 = -1πC1 = 0πC0 = 2πCA = 0πCB = 0πCC = 0πRETURNππequation:π'=================================================================================================π'Use LOG10(X) instead of LOG(X) for common logs!!!!πY = e ^ xπ'  y = C4 * X ^ 4 + C3 * X ^ 3 + C2 * X ^ 2 + C1 * X + C0 + CA / X + CB / X ^ 2 + CC / X ^ 3π'          4th         3rd         2nd         1st       0th      -1th        -2nd       -3rdπ'=================================================================================================πRETURNππFUNCTION acos (x)π'0<=y<=piπIF x < 0 THENπ      acos = ATN(SQR(1 - x * x) / x) + piπELSEIF x = 0 THENπ      acos = pi / 2πELSEπ      acos = ATN(SQR(1 - x * x) / x) '(normal)πEND IFπEND FUNCTIONππFUNCTION acosh (x)π'x >= 1πacosh = ln(x + SQR(x ^ 2 - 1))πEND FUNCTIONππFUNCTION acoth (x)π'│x│ > 1πacoth = .5 * ln((x + 1) / (x - 1))πEND FUNCTIONππFUNCTION acsch (x)π'x <> 0πacsch = ln(1 / x + SQR(1 + x ^ 2) / ABS(x))πEND FUNCTIONππFUNCTION asech (x)π'0 < x ≤ 1πasech = ln((1 + SQR(1 - x ^ 2)) / x)πIF x > 1 THEN ENDπEND FUNCTIONππFUNCTION asin (x)πasin = ATN(x / SQR(1 - x * x))πEND FUNCTIONππFUNCTION asinh (x)πasinh = ln(x + SQR(x ^ 2 + 1))πEND FUNCTIONππFUNCTION atan (x)πatan = ATN(x)πEND FUNCTIONππFUNCTION atanh (x)π'│x│ < 1πIF x >= 1 THEN ENDπatanh = .5 * ln((1 + x) / (1 - x))πEND FUNCTIONππFUNCTION cosh (x)πcosh = (e ^ x + e ^ -x) / 2πEND FUNCTIONππFUNCTION cot (x)πcot = 1 / TAN(x)πEND FUNCTIONππFUNCTION coth (x)π'undefined at x=0πcoth = 1 / tanh(x)πEND FUNCTIONππFUNCTION csc (x)πcsc = 1 / SIN(x)πEND FUNCTIONππFUNCTION csch (x)π'undefined at x=0πcsch = 1 / sinh(x)πEND FUNCTIONππSUB eqsπ'  y = (PI / 2 - X) * TAN(X)π'  y = sinh(x)π'  Y = atanh(x)π'  Y = tanh(X)π'  Y = (2 * x) / (SQR(x ^ 2 + x + 1))              'AP CALC AB 1995 #1Bπ'  Y = (X + 2) / (X ^ 2 + X + 1) ^ 1.5             '1st der #1Bπ'  Y = e ^ (-X ^ 2)                                      'Bell curveπ'  Y = -2 * X * e ^ (-X ^ 2)                             '1st derπ'  Y = 2 * X * e ^ (-X ^ 2) * (2 * X ^ 2 - 1)            '2nd derπ'  Y = X * ln(X)π' --above are test questions from ch7π'  Y = (1 / X ^ 2) ^ Xπ'  Y = (2 ^ (COS(X) - 2)) / Xπ'  Y = (3 ^ (SIN(X) - 1)) / Xπ'  Y = X ^ (X + 1)π'  Y = X ^ ln(X)π'  Y = X ^ (-SQR(3))π'  Y = X ^ (SQR(2))π'  Y = (1 + 1 / X) ^ X        'e AS X->infinityπ'  Y = X ^ (1 / X)π'  Y = X ^ (1 / ln(X))π'  Y = (ln(X)) ^ (-2)π'  Y = 1 / x - 1 / SQR(x)               '\________π'  Y = X * (1 - COS(X)) / (X - SIN(X))  '\/~~~^~~~\/π'  Y = (ln(X)) ^ 2π'  Y = e ^ x - x + 3 * SIN(5 * x) - 2π'  Y = 1 - 2 * COS(x) ^ 3ππEND SUBππSUB grid (x1, y1, XS, ys, XC, YC, XN, yn, xm, ym)ππFOR x1 = XC TO XS STEP XN: LINE (x1, 0)-(x1, ys), 10, , &HAAAA: NEXT x1: REM Vertical downπFOR x1 = XC TO 0 STEP -XN: LINE (x1, 0)-(x1, ys), 10, , &HAAAA: NEXT x1: REM Vertical upπFOR y1 = YC TO ys STEP yn: LINE (0, y1)-(XS, y1), 2, , &HAAAA: NEXT y1:  REM Horizontal rightπFOR y1 = YC TO 0 STEP -yn: LINE (0, y1)-(XS, y1), 2, , &HAAAA: NEXT y1:  REM Horizontal leftππCN = -1πFOR x1 = XC TO XS STEP XNπ        CN = CN + 1: IF CN MOD 5 = 0 THEN CL = 12 ELSE CL = 14π        LINE (x1, YC)-(x1, YC + 3), CLπ        LINE (x1 + 1, YC)-(x1 + 1, YC + 3), CLπNEXT x1πCN = -1πFOR x1 = XC TO 0 STEP -XNπ        CN = CN + 1: IF CN MOD 5 = 0 THEN CL = 12 ELSE CL = 14π        LINE (x1, YC)-(x1, YC + 3), CLπ        LINE (x1 + 1, YC)-(x1 + 1, YC + 3), CLπNEXT x1πCN = -1πFOR y1 = YC TO ys STEP ynπ        CN = CN + 1: IF CN MOD 5 = 0 THEN CL = 12 ELSE CL = 14π        LINE (XC, y1)-(XC + 4, y1), CLπNEXT y1πCN = -1πFOR y1 = YC TO 0 STEP -ynπ        CN = CN + 1: IF CN MOD 5 = 0 THEN CL = 12 ELSE CL = 14π        LINE (XC, y1)-(XC + 4, y1), CLπNEXT y1πCOLOR 15: LOCATE 30, 1π'PRINT "▒ KEYBOARD GUIDE:  [*] for WARP, [+] for FAST, [-] FOR SLOW, [Escape] to stop. ▒";πLOCATE 29, 60: PRINT "[" + LTRIM$(STR$(-xm \ 2)) + "," + LTRIM$(STR$(-ym \ 2)) + "]";πPRINT "x[" + LTRIM$(STR$(xm \ 2)) + "," + LTRIM$(STR$(ym \ 2)) + "]";ππLINE (XC, 0)-(XC, ys), 15: LINE (0, YC)-(XS, YC), 15:          REM Centerππradianmarks XC, YC, XS, ys, XNππEND SUBππFUNCTION ln (x)π'the LOG function in QBASIC returns natural log for some odd reason...πln = LOG(x)πEND FUNCTIONππFUNCTION log10 (x)πlog10 = LOG(x) / lπEND FUNCTIONππSUB radianmarks (XC, YC, XS, ys, XN)πCL1 = 9: CL2 = 4πCN = -1: FOR x1 = XC TO XS STEP (XN * pi / 2)π        CN = CN + 1: IF CN MOD 2 = 0 THEN CL = CL1 ELSE CL = CL2π        LINE (x1, YC)-(x1, YC - 3), CLπ        DRAW "D2R1L2R1"π        'LINE (X1 + 1, YC)-(X1 + 1, YC - 3), CLπNEXT x1πCN = -1: FOR x1 = XC TO 0 STEP (-XN * pi / 2)π        CN = CN + 1: IF CN MOD 2 = 0 THEN CL = CL1 ELSE CL = CL2π        LINE (x1, YC)-(x1, YC - 3), CLπ        DRAW "D2R1L2R1"π        'LINE (X1 - 1, YC)-(X1 + 1, YC - 3), CLπNEXT x1πEND SUBππFUNCTION sec (x)πsec = 1 / COS(x)πEND FUNCTIONππFUNCTION sech (x)πsech = 1 / cosh(x)πEND FUNCTIONππFUNCTION sinh (x)πsinh = (e ^ x - e ^ -x) / 2πEND FUNCTIONππFUNCTION tanh (x)πtanh = sinh(x) / cosh(x)πEND FUNCTIONπMattias Andersson              ANSI FIRE                      phobia2@hotmail.com            11-05-96 (15:55)       QB, QBasic, PDS        270  6765     ANSIFIRE.BAS' Ok, I'm back again... (Phobia that is...)π' This time I've made a flame in textmode...π' Errr... Comment or something...π'π' phobia2@hotmail.comπ'π' Don't tell me how slow it is... I know how slow it is...π' QB is kinda limited when it comes to speed...π' And the source isn't in any way optimized... most of you canπ' probably make a flame that 1000 times faster...π' But I was first! :-)π' And I don't wanna comment this one... to mezzy source...π' Just love it or hate it...π'π' See ya later!π'πDECLARE SUB addcol ()πDECLARE SUB plot (x1!, y1!, c1!)πx = 1πy = 20πn = 1πWIDTH 80, 50πCLSπFOR a = 20 TO 40π   plot a, 20, 9π   plot a, 21, 9πNEXT aπRANDOMIZE TIMERππhej:πn = n + 1πIF n = 500 THENπ   nn = 20π   n = 0πnewline:π   c2 = INT(RND * 3)π   IF c2 = 2 THEN c2 = 9π   IF c2 = 3 THEN c2 = 1π   IF c2 = 1 THEN c2 = 1π   plot 1 + nn, 20, c2π   plot 1 + nn, 21, c2π   nn = nn + 1π   IF nn = 40 THEN GOTO newslutπ   GOTO newlineπnewslut:πEND IFπcol = 0πcoll = SCREEN(y, x, 1)πteck = SCREEN(y, x)πIF coll = 15 THENπ   col = col + 9πEND IFπIF coll = 78 THENπ   IF teck = 219 THEN col = col + 8π   IF teck = 178 THEN col = col + 7π   IF teck = 177 THEN col = col + 6π   IF teck = 176 THEN col = col + 5π   IF teck = 32 THEN col = col + 4πEND IFπIF coll = 4 THENπ   IF teck = 178 THEN col = col + 3π   IF teck = 177 THEN col = col + 2π   IF teck = 176 THEN col = col + 1π   IF teck = 32 THEN col = col + 0πEND IFπcoll = SCREEN(y + 1, x, 1)πteck = SCREEN(y + 1, x)πIF coll = 15 THENπ   col = col + 9πEND IFπIF coll = 78 THENπ   IF teck = 219 THEN col = col + 8π   IF teck = 178 THEN col = col + 7π   IF teck = 177 THEN col = col + 6π   IF teck = 176 THEN col = col + 5π   IF teck = 32 THEN col = col + 4πEND IFπIF coll = 4 THENπ   IF teck = 178 THEN col = col + 3π   IF teck = 177 THEN col = col + 2π   IF teck = 176 THEN col = col + 1π   IF teck = 32 THEN col = col + 0πEND IFπcoll = SCREEN(y, x + 1, 1)πteck = SCREEN(y, x + 1)πIF coll = 15 THENπ   col = col + 9πEND IFπIF coll = 78 THENπ   IF teck = 219 THEN col = col + 8π   IF teck = 178 THEN col = col + 7π   IF teck = 177 THEN col = col + 6π   IF teck = 176 THEN col = col + 5π   IF teck = 32 THEN col = col + 4πEND IFπIF coll = 4 THENπ   IF teck = 178 THEN col = col + 3π   IF teck = 177 THEN col = col + 2π   IF teck = 176 THEN col = col + 1π   IF teck = 32 THEN col = col + 0πEND IFπcoll = SCREEN(y + 1, x + 1, 1)πteck = SCREEN(y + 1, x + 1)πIF coll = 15 THENπ   col = col + 9πEND IFπIF coll = 78 THENπ   IF teck = 219 THEN col = col + 8π   IF teck = 178 THEN col = col + 7π   IF teck = 177 THEN col = col + 6π   IF teck = 176 THEN col = col + 5π   IF teck = 32 THEN col = col + 4πEND IFπIF coll = 4 THENπ   IF teck = 178 THEN col = col + 3π   IF teck = 177 THEN col = col + 2π   IF teck = 176 THEN col = col + 1π   IF teck = 32 THEN col = col + 0πEND IFπIF y > 1 THENπ   coll = SCREEN(y - 1, x, 1)π   teck = SCREEN(y - 1, x)πEND IFπIF coll = 15 THENπ   col = col + 9πEND IFπIF coll = 78 THENπ   IF teck = 219 THEN col = col + 8π   IF teck = 178 THEN col = col + 7π   IF teck = 177 THEN col = col + 6π   IF teck = 176 THEN col = col + 5π   IF teck = 32 THEN col = col + 4πEND IFπIF coll = 4 THENπ   IF teck = 178 THEN col = col + 3π   IF teck = 177 THEN col = col + 2π   IF teck = 176 THEN col = col + 1π   IF teck = 32 THEN col = col + 0πEND IFπIF x > 1 THEN coll = SCREEN(y, x - 1, 1)πIF x > 1 THEN teck = SCREEN(y, x - 1)πIF coll = 15 THENπ   col = col + 9πEND IFπIF coll = 78 THENπ   IF teck = 219 THEN col = col + 8π   IF teck = 178 THEN col = col + 7π   IF teck = 177 THEN col = col + 6π   IF teck = 176 THEN col = col + 5π   IF teck = 32 THEN col = col + 4πEND IFπIF coll = 4 THENπ   IF teck = 178 THEN col = col + 3π   IF teck = 177 THEN col = col + 2π   IF teck = 176 THEN col = col + 1π   IF teck = 32 THEN col = col + 0πEND IFπIF x > 1 THENπ   IF y > 1 THENπ      coll = SCREEN(y - 1, x - 1, 1)π      teck = SCREEN(y - 1, x - 1)π   END IFπEND IFπIF coll = 15 THENπ   col = col + 9πEND IFπIF coll = 78 THENπ   IF teck = 219 THEN col = col + 8π   IF teck = 178 THEN col = col + 7π   IF teck = 177 THEN col = col + 6π   IF teck = 176 THEN col = col + 5π   IF teck = 32 THEN col = col + 4πEND IFπIF coll = 4 THENπ   IF teck = 178 THEN col = col + 3π   IF teck = 177 THEN col = col + 2π   IF teck = 176 THEN col = col + 1π   IF teck = 32 THEN col = col + 0πEND IFπIF x > 1 THENπ   coll = SCREEN(y + 1, x - 1, 1)π   teck = SCREEN(y + 1, x - 1)πEND IFπIF coll = 15 THENπ   col = col + 9πEND IFπIF coll = 78 THENπ   IF teck = 219 THEN col = col + 8π   IF teck = 178 THEN col = col + 7π   IF teck = 177 THEN col = col + 6π   IF teck = 176 THEN col = col + 5π   IF teck = 32 THEN col = col + 4πEND IFπIF coll = 4 THENπ   IF teck = 178 THEN col = col + 3π   IF teck = 177 THEN col = col + 2π   IF teck = 176 THEN col = col + 1π   IF teck = 32 THEN col = col + 0πEND IFπIF y > 1 THENπ   coll = SCREEN(y - 1, x + 1, 1)π   teck = SCREEN(y - 1, x + 1)πEND IFπIF coll = 15 THENπ   col = col + 9πEND IFπIF coll = 78 THENπ   IF teck = 219 THEN col = col + 8π   IF teck = 178 THEN col = col + 7π   IF teck = 177 THEN col = col + 6π   IF teck = 176 THEN col = col + 5π   IF teck = 32 THEN col = col + 4πEND IFπIF coll = 4 THENπ   IF teck = 178 THEN col = col + 3π   IF teck = 177 THEN col = col + 2π   IF teck = 176 THEN col = col + 1π   IF teck = 32 THEN col = col + 0πEND IFπcol = INT((col / 8) - .1)πIF y > 1 THEN plot x, y - 1, colππx = x + 1πIF x > 40 THENπ   x = 20π   y = y - 1π   IF y < 1 THEN y = 20πEND IFπSELECT CASE INKEY$π   CASE CHR$(27)π      WIDTH 80, 25π      CLSπ      COLOR 7, 0π      PRINT "Fire i textmode av Phobia 1996!"π      ENDπEND SELECTπGOTO hejππSUB addcolπIF coll = 15 THENπ   col! = col! + 9πEND IFπIF coll = 78 THENπ   IF teck = 219 THEN col! = col! + 8π   IF teck = 178 THEN col! = col! + 7π   IF teck = 177 THEN col! = col! + 6π   IF teck = 176 THEN col! = col! + 5π   IF teck = 32 THEN col! = col! + 4πEND IFπIF coll = 4 THENπ   IF teck = 178 THEN col! = col! + 3π   IF teck = 177 THEN col! = col! + 2π   IF teck = 176 THEN col! = col! + 1π   IF teck = 32 THEN col! = col! + 0πEND IFπEND SUBππSUB plot (x1, y1, c1)πLOCATE y1, x1πIF c1 = 0 THEN COLOR 0, 0: PRINT " "πIF c1 = 1 THEN COLOR 4, 0: PRINT "░"πIF c1 = 2 THEN COLOR 4, 0: PRINT "▒"πIF c1 = 3 THEN COLOR 4, 0: PRINT "▓"πIF c1 = 4 THEN COLOR 14, 4: PRINT " "πIF c1 = 5 THEN COLOR 14, 4: PRINT "░"πIF c1 = 6 THEN COLOR 14, 4: PRINT "▒"πIF c1 = 7 THEN COLOR 14, 4: PRINT "▓"πIF c1 = 8 THEN COLOR 14, 4: PRINT "█"πIF c1 = 9 THEN COLOR 15, 0: PRINT "█"πEND SUBπMark Olson                     DISPLAY W/INT21H & ANSI.SYS    FidoNet QUIK_BAS Echo          08-28-92 (12:55)       QB, PDS                58   1986     ANSIWRIT.BAS'>> there any way to "redirect" them to ANSI.SYS instead of writing theπ'>> decoding routines myself?πππ'All Right I've read a couple of replies and most are correct as far asπ'displaying ANSI graphics, but just to throw in my two cents...ππ'        ANSI graphis is the use of Escape codes to change Text Displayπ'        Atributes and Display Related functions.  There are several waysπ'        of doing this.  The one I have seen here is the use of CON: orπ'        the Standard Output Device (Console). There is nothing wrongπ'        with that aprroach BUT there is another avenue which accessπ'        ANSI.SYS Directly Via Interrupt 21h sub-function 40h.ππ' ----------------------------- Ansi Routine ---------------------------π'       QuickBasic 4.5 & PDS 7.X Modificationsπ'       Use of Ansi.sys to display Ansi graphics at the current cursorπ'       location. Using Int 21H Sub-Function 40H.ππDECLARE SUB AnsiWrite (Text$)ππ'Use   QB.exe  /L    To load the quickbasic library QB.qblπ'Use   QBX.exe /L    To load the PDS 7.X Library   QBX.qblππ'$INCLUDE: 'QB.BI'π' Use $include: QBX.bi for PDS 7.XππDIM SHARED RegsX AS RegTypeXππEsc$ = CHR$(27)        ' Escape CharacterππTemp$ = ""ππWhite$ = Esc$ + "[0m" + Esc$ + "[37m"πBrYellow$ = Esc$ + "[1m" + Esc$ + "[33m"ππTemp$ = White$ + "This is a " + BrYellow$ + "Example " + White$ + "of ANSI!"ππCLSππAnsiWrite (Temp$)ππ' ---------------------------------------------------------------πSUB AnsiWrite (Text$)ππ        RegsX.ax = &H4000          'AH = 40Hπ        RegsX.bx = 1               'FILE HANDLEπ        RegsX.cx = LEN(Text$)      'Number of Bytes to Writeπ        RegsX.ds = VARSEG(Text$)   'Segment for the stringππ        'Use SSEG(Text$) Vice VARSEG(Text$) for PDS 7.1ππ        RegsX.dx = SADD(Text$)     'Segment offset(address) of stringππ        CALL InterruptX(&H21, RegsX, RegsX)ππEND SUBπ'------------------------------------------------------------------πB.S v/d Berg                   SECURE INPUT                   buzz@cyber-wizard.com          12-21-96 (13:13)       ASIC                   96   1884     INPUT.ASI   sub "SecureINPUT" (a$,secure)ππrem *********************************************************πrem *  yeah!                                                *πrem *                                                       *πrem * i now it , you all waited for this.                   *πrem * a REALLY secure INPUT for asic                        *πrem * (you can't press ctrl-c)                              *πrem *                                                       *πrem * the secure parameter is 1 when you want to have '¿'s  *πrem * (like passwords)                                      *πrem * it is 0 when you want to see the input                *πrem *                                                       *πrem *********************************************************πrem *                                                       *πrem * (c) buzz '96                                          *πrem *                                                       *πrem * http://ddsw.bos.nl/~buzz                              *πrem * buzz@cyber-wizard.com                                 *πrem *                                                       *πrem *********************************************************ππback$=chr$(8)πenter$=chr$(13)πesc$=chr$(27)πa$=""πtemp$=""ππjoe:ππi$=inkey$πif i$="" then joe:ππif i$=back$ then backspace:πif i$=enter$ then enter:πif i$=esc$ then wis:ππtemp$=temp$+i$πif secure=1 thenπ print "¿";πelseπ print i$;πendifππgoto joe:πππbackspace:ππl=len(temp$)πa=pos(0)πb=csrlinππif l=0 thenπ sound 10000,1π goto joe:πendifππl=l-1πa=a-1ππlocate b,aπprint " ";ππlocate b,aππtemp$=left$(temp$,l)ππgoto joe:πππwis:ππl=len(temp$)πa=pos(0)πb=csrlinπc=a-lπt$=space$(l)ππlocate b,cπprint t$;πlocate b,cππtemp$=""ππgoto joe:πππenter:ππa$=temp$ππprintππendsub (a$,secure)ππRick Elbers                    ASSEMBLY IN QBASIC 2: DATASEG  t030611@tip.nl                 12-01-96 (05:37)       QB, QBasic, PDS        124  4066     DATASEG.BAS 'ASSEMBLY IN QBASIC PART 2: USING DATASEGMENTSπ'----------------------------------------------π'Rick Elbers november 1996ππ'This short article is ment as a follow up on STEPHAN van Loendersloot'sπ'INTERRUPTS IN QBASIC in this directory. He described the very first stepπ'in calling CALL ABSOLUTE and this article will introduce the logicalπ'second step. It will very basically describe the way in which you canπ'use DATASEGMENTS in your assembler subs.ππ'The actual explanation will be done by working throught a very simpleπ'print string example. It is not ment to be anything fancy, but it isπ'designed to be evident.ππDECLARE SUB dosprstr (string2write$)πDECLARE FUNCTION int2str$ (sword%)πDECLARE SUB Pokestring (SEGJE%, OFFJE%, MAIN$)ππdosprstr "What are we going to do ?"πENDππSUB dosprstr (string2write$)π'-------------------------------------------------------------------------π'DATAπa% = LEN(string2write$) + 1: DIM datas%(a% \ 2 + 1)π'-----------------------------π'INTRODUCTION ON DATASEGMENTS:π'------------------------------π'DATAS will be our datasegment. Take good care that we declare it as anπ'array since arrays start at segment bounderies. That way we will not beπ'surprised by segment changes. This might be trivial but when you useπ'a simple variable which is number Xth in the row of variables it just mightπ'be that your starting adress is at seg:&hfffe. Same holds for stringvariables.π'They do not start at segmentbounderies too. Another feature of stringsπ'is that they walk around in memory due to garbage collection, making aπ'string very unsuited for adressability purposes. So: we use DATAS% and pokeπ'our variables and strings just inside it!ππ'The length of the datasegment in this example is designed to keep onlyπ'the string.ππb$ = string2write$ + "$"         'This is the way DOS processes stringprintπ'--------------------------------π'MAKE THE DATASEGMENT ADRESSABLE:π'--------------------------------π'Here is the basic upset of an adressable datasegment:ππdataseg% = VARSEG(datas%(0)): dataoff% = VARPTR(datas%(0))πdataseg$ = int2str$(dataseg%): dataoff$ = int2str$(dataoff%)ππ'Next we poke our string into the datasegment.πPokestring dataseg%, dataoff%, b$ππ'-----------------------------------π'CODEπ'push axπ'push dxπ'push dsππ'mov ax,dataseg$π'mov ds,axπ'mov dx,dataoff$π'mov ah,09         'printstring with ending $π'int 21π'pop dsπ'pop dxπ'pop axπ'retfπ'-----------------------------------π'pushaπasm$ = asm$ + CHR$(&H50)πasm$ = asm$ + CHR$(&H52)πasm$ = asm$ + CHR$(&H1E)ππasm$ = asm$ + CHR$(&HB8) + dataseg$      'MOV AX,DATASEG$πasm$ = asm$ + CHR$(&H8E) + CHR$(&HD8)    'MOV DS,AXπasm$ = asm$ + CHR$(&HBA) + dataoff$      'MOV DX,DATAOFF$πasm$ = asm$ + CHR$(&HB4) + CHR$(&H9)     'MOV AH,9πasm$ = asm$ + CHR$(&HCD) + CHR$(&H21)    'INT 21ππ'popaπasm$ = asm$ + CHR$(&H1F)πasm$ = asm$ + CHR$(&H5A)πasm$ = asm$ + CHR$(&H58)π'retfπasm$ = asm$ + CHR$(&HCB)π'________________________________________πCodeoff% = SADD(asm$)πDEF SEG = VARSEG(asm$)πCALL ABSOLUTE(Codeoff%)π'________________________________________πDEF SEGπππEND SUBππFUNCTION int2str$ (sword%)π'This function is translating SWORD Integers into a string. Its only useπ'is when you still use asm$ for assembler functions( like i do). In thatπ'case you can make your integer values usable ..π'THis function simply translates the hexa bytesπ'into stringbytes as is.π'----------------------------------------------------πDEF SEG = VARSEG(sword%)πptr% = VARPTR(sword%)πint2str$ = CHR$(PEEK(ptr%)) + CHR$(PEEK(ptr% + 1))πDEF SEGππEND FUNCTIONππSUB Pokestring (SEGJE%, OFFJE%, MAIN$)π'------------------------------------------------------π'This function pokes a string (might be ASCIIZ)intoπ'memory at a given location, making it possible toπ'access strings in byte formπ'------------------------------------------------------ππDEF SEG = SEGJE%πFOR i% = 0 TO LEN(MAIN$) - 1π  POKE OFFJE% + i%, ASC(MID$(MAIN$, i% + 1, 1))πNEXTπDEF SEGππEND SUBπRick Elbers                    ASSEMBLY IN QBASIC 3: INT86QB  t030611@tip.nl                 12-01-96 (05:37)       QB, QBasic, PDS        175  8442     INT86QB.BAS 'ASSEMBLY IN QBASIC 3: INT86QBπ'QBASIC ABOVE AND BEYOND PART...[ASSEMBLY LIBRARIE]π'---------------------------π'Rick Elbers november 1996π'--------------------------πDECLARE FUNCTION int2str$ (sword%)πDECLARE FUNCTION int86qb$ (intnr%, flag%, ax%, bx%, cx%, dx%, di%, si%, bp%, ds%, es%)ππ'INTRODUCTION                                     π'-------------π'When i felt the desire to write a routine that make another break in theπ'wall of QBASIC opponents who maintain that QBASIC did not have a callπ'interrupt, i have choosen for the ASIC approach which distinguishesπ'itself from QUICK BASIC(compiler) in that it did not force upon youπ'the necessity of defining a REGSTYPE in your main.π'In my humble opinion you should hold things as modulair as possible,meaningπ'as much as possible defined in your subs and functions. So therefore, insteadπ'of INTERRUPT(int%,INREGS as REGStype,OUtregs as REGStype), you willπ'be confronted with INT86QB(int%,FLAG%,AX%,BX%,CX%,DX%,DI%,SI%,BP%,DS%,ES%)π'Since it is a function it returns. In fact it returns an array of all theπ'registers. For help in parsing this you might take a look at the functionπ'partstring$ i wrote( available on my homepage in Lstr.zip).ππ'First notice should be that int86qb returns also flags (unlike int86 of ASIC)π'----------------------------------------------------------------------------πCLSπa$ = int86qb$(&H21, 0, &H200, 0, 0, &H41, 0, 0, 0, 0, 0)πLOCATE 2, 1: PRINT a$ππ'----------------------------------------------------------------------------π'Although the setup of this function might have his advantages, optimal speedπ'or minimum length is not one of them. In an optimized CALL INTERRUPT theπ'assembly routine could be speeded up *a lot* AND narrowed down to 80 bytes,π'by the way of using STACK instead of DATAS% and XCHG reg, variable insteadπ'of PUSH reg /MOV reg,value/ MOV variable, reg/POP reg instructions. The onlyπ'advantage of the present int86qb routine might be that it is not as difficultπ'as the routine that uses the optimized method, since for the biggest partπ'int86qb is merely repetitive.π'----------------------------------------------------------------------------ππFUNCTION int2str$ (sword%)π'This function is translating SWORD Integers into a string. Its only useπ'is when you still use asm$ for assembler functions( like i do). In thatπ'case you can make your integer values usable ..π'THis function simply translates the hexa bytesπ'into stringbytes as is.π'----------------------------------------------------πDEF SEG = VARSEG(sword%)πptr% = VARPTR(sword%)πint2str$ = CHR$(PEEK(ptr%)) + CHR$(PEEK(ptr% + 1))πDEF SEGππEND FUNCTIONππFUNCTION int86qb$ (intnr%, flag%, ax%, bx%, cx%, dx%, di%, si%, bp%, ds%, es%)π'------------------------------------------------------------------------π'Conversion of all integers in stringsπflag$ = LEFT$(int2str$(flag%), 1): ax$ = int2str$(ax%):πbx$ = int2str$(bx%): cx$ = int2str$(cx%): dx$ = int2str$(dx%):πdi$ = int2str$(di%): si$ = int2str$(si%): bp$ = int2str$(bp%):πds$ = int2str$(ds%): es$ = int2str$(es%):π'Now all integersvalues are direct usable in asm$π'------------------------------------------------------------------------πDIM datas%(11)    'that is all we needπdataseg% = VARSEG(datas%(0)): flagoff% = VARPTR(datas%(0))πdataseg$ = int2str$(dataseg%): flagoff$ = int2str$(flagoff%)πaxoff$ = int2str$(flagoff% + 2): bxoff$ = int2str$(flagoff% + 4)πcxoff$ = int2str$(flagoff% + 6): dxoff$ = int2str$(flagoff% + 8)πdioff$ = int2str$(flagoff% + 10): sioff$ = int2str$(flagoff% + 12)πbpoff$ = int2str$(flagoff% + 14): dsoff$ = int2str$(flagoff% + 16)πesoff$ = int2str$(flagoff% + 18): intnroff$ = int2str$(flagoff% + 20)π'Now all integers are directly adressable in memory through asm$π'We could have used only this as pointers and leave the immediate valuesπ'but....we don't.π'------------------------------------------------------------------------πasm$ = ""πasm$ = asm$ + CHR$(&H9C)                       'pushf             πasm$ = asm$ + CHR$(&H50)                       'push ax         πasm$ = asm$ + CHR$(&H53)                       'push bx         πasm$ = asm$ + CHR$(&H51)                       'push cx        πasm$ = asm$ + CHR$(&H52)                       'push dx         πasm$ = asm$ + CHR$(&H57)                       'push di         πasm$ = asm$ + CHR$(&H56)                       'push si         πasm$ = asm$ + CHR$(&H55)                       'push bp         πasm$ = asm$ + CHR$(&H1E)                       'push ds         πasm$ = asm$ + CHR$(&H6)                        'push es         ππ'2)LOAD REGISTERSπ'First the flags( questionable if this ever happens):πasm$ = asm$ + CHR$(&HB4) + flag$              'mov ax,flag$πasm$ = asm$ + CHR$(&H9E)                      'sahf stores ah into flagsππ'Segment registers mbv ax :  only when not (accidentally) 0πIF ds% <> 0 THEN                              'safetyπ  asm$ = asm$ + CHR$(&HB8) + ds$              'mov ax,ds$π  asm$ = asm$ + CHR$(&H8E) + CHR$(&HD8)       'mov ds,axπEND IFπIF es% <> 0 THEN                              'safetyπ  asm$ = asm$ + CHR$(&HB8) + es$              'mov ax,es$π  asm$ = asm$ + CHR$(&H8E) + CHR$(&HC0)       'mov es,axπEND IFπ'the rest of registers :πasm$ = asm$ + CHR$(&HB8) + ax$                'mov ax,ax$πasm$ = asm$ + CHR$(&HBB) + bx$                'mov bx,bx$ πasm$ = asm$ + CHR$(&HB9) + cx$                'mov cx,cx$ πasm$ = asm$ + CHR$(&HBA) + dx$                'mov dx,dx$ πasm$ = asm$ + CHR$(&HBF) + di$                'mov di,di$ πasm$ = asm$ + CHR$(&HBE) + si$                'mov si,si$ πasm$ = asm$ + CHR$(&HBD) + bp$                'mov bp,bp$π'oke now the interrupt himselfπasm$ = asm$ + CHR$(&HCD) + CHR$(intnr%)       'interrupt nrππ'First make our DATAS% adressable:πasm$ = asm$ + CHR$(&H1E)                         'push dsπasm$ = asm$ + CHR$(&HB8) + dataseg$              'mov ax,DATASseg$πasm$ = asm$ + CHR$(&H8E) + CHR$(&HD8)            'mov ds,axπ                                           π'We first pushed DS segment register since we want to adress our DATA_segmentπasm$ = asm$ + CHR$(&H8F) + CHR$(&H6) + dsoff$    'pop dsoff$πasm$ = asm$ + CHR$(&H8C) + CHR$(&H6) + esoff$    'mov esoff$,ESππasm$ = asm$ + CHR$(&H9F)                         'lahfπasm$ = asm$ + CHR$(&H88) + CHR$(&H26) + flagoff$ 'mov flagoff$,ahπ                     π'The rest is more simple i think:πasm$ = asm$ + CHR$(&H89) + CHR$(&H2E) + bpoff$   'mov bpoff$,bpπasm$ = asm$ + CHR$(&H89) + CHR$(&H36) + sioff$   'mov sioff$,siπasm$ = asm$ + CHR$(&H89) + CHR$(&H3E) + dioff$   'mov dioff$,diπasm$ = asm$ + CHR$(&H89) + CHR$(&H16) + dxoff$   'mov dxoff$,dxπasm$ = asm$ + CHR$(&H89) + CHR$(&HE) + cxoff$    'mov cxoff$,cxπasm$ = asm$ + CHR$(&H89) + CHR$(&H1E) + bxoff$   'mov bxoff$,bxπasm$ = asm$ + CHR$(&HA3) + axoff$                'mov axoff$,axπ                                π'Now let us neatly finish by just popping everything back in orderπasm$ = asm$ + CHR$(&H7)                          'pop esπasm$ = asm$ + CHR$(&H1F)                         'pop ds         πasm$ = asm$ + CHR$(&H5D)                         'pop bp         πasm$ = asm$ + CHR$(&H5E)                         'pop si         πasm$ = asm$ + CHR$(&H5F)                         'pop di         πasm$ = asm$ + CHR$(&H5A)                         'pop dx         πasm$ = asm$ + CHR$(&H59)                         'pop cx         πasm$ = asm$ + CHR$(&H5B)                         'pop bx         πasm$ = asm$ + CHR$(&H58)                         'pop ax        πasm$ = asm$ + CHR$(&H9D)                         'popf            π'We are done?πasm$ = asm$ + CHR$(&HCB)                         'retf ππDEF SEG = VARSEG(asm$)πoffcode% = SADD(asm$): CALL absolute(offcode%): DEF SEGππui$ = HEX$(intnr%)πFOR i% = 0 TO 9π  hx$ = HEX$(datas%(i%))π  hx$ = STRING$(4 - LEN(hx$), "0") + hx$π  ui$ = ui$ + "," + hx$πNEXTππint86qb$ = ui$ππEND FUNCTIONππSUB Pokestring (SEGJE%, OFFJE%, MAIN$)π'------------------------------------------------------π'This function pokes a string (might be ASCIIZ)intoπ'memory at a given location, making it possible toπ'access strings in byte formπ'------------------------------------------------------ππDEF SEG = SEGJE%πFOR i% = 0 TO LEN(MAIN$) - 1π  POKE OFFJE% + i%, ASC(MID$(MAIN$, i% + 1, 1))πNEXTπDEF SEGππEND SUBπRick Elbers                    ASSEMBLY IN QBASIC 4: INTERRUPTt030611@tip.nl                 12-01-96 (05:37)       QB, QBasic, PDS        424  18258    DHANDLER.TXT'ASSEMBLY IN QBASIC 4: INTERRUPT HANDLERSπ'QBASIC ABOVE AND BEYOND PART....[DISCUSSION INTERRUPTHANDLERS]π'--------------------------------------------------------------------------π'Rick Elbers november 1996π'-------------------------πDECLARE FUNCTION newvec& (segnewint%, offnewint%)πDECLARE FUNCTION oldvec& (nr%)πDECLARE SUB getvec (Svec%, Ovec%, nr%)πDECLARE SUB pokeW (pokeseg%, pokeoff%, word%)πDECLARE SUB pokeDW (pokeseg%, pokeoff%, dword&)π                                                π'INTRODUCTIONπ'-------------π'When we are concerned with interrupthandlers, then our first goal has to beπ'to establish the current way interrupts are handled. When some interrupt isπ'processed the processor retrieves the place to jump to (among other things).π'This place he retrieves from 0:INTNR*4. That is to say, in the lower memoryπ'all interrupts are mapped with a far pointer to the code for that interrupt.π'Of course, since we spoke about FAR pointers every interrupt pointer isπ'a double word. That is were the INTNR*4 is coming from. The interrupt pointersπ'are commonly referred to as VECTORS.ππ'GETTING THE INTERRUPT VECTORSπ'-----------------------------π'From inside our QBASIC ide we can get all vectors, but we have to keepπ'in mind that we only retrieve vectors as QBASIC looks at them. That is toπ'say that some interrupts are handled by qbasic itself, instead of by DOS.π'For instance the values for INT 0 and INT 4 are not the same that youπ'get from dumping the lower memory in debug...(you are encouraged to do so..)π'But otherwise the program to execute now is very instructive...ππCLSπFOR nr% = 0 TO &HFFπgetvec Vecseg%, Vecoff%, nr%πPRINT " Int "; STRING$(2 - LEN(HEX$(nr%)), "0"); HEX$(nr%); "->";πIF Vecseg% = 0 AND Vecoff% = 0 THENπ  PRINT "Not used ";πELSEπ  PRINT STRING$(4 - LEN(HEX$(Vecseg%)), "0"); HEX$(Vecseg%); ":";π  PRINT STRING$(4 - LEN(HEX$(Vecoff%)), "0"); HEX$(Vecoff%);πEND IFπIF nr% MOD 4 = 3 THEN PRINTπIF nr% MOD 80 = 79 THEN SLEEPπNEXTπCLS : PRINT "press a key for next demo part"πSLEEPππ'We have seen that a lot of INTERRUPT VECTORS are free, so we canπ'experiment with them. Even when after controlling the so called "FREEπ'VECTORS" with debug they appear indeed free. So it is sure and safeπ'to experiment with INT 83h for instance. So be it: we will start withπ'developing a testcode for our newinterrupt, so that there will be noπ'misunderstandings wether we execute int 83h or not. Afterwards we willπ'do what is necessary to make it possible to execute int 83h. Ourπ'handler will do nothing fancy. He will simply print the character 'a' .π'-------π'NEWINTπ'-------πDIM newint%(6)πnewint%(0) = &H5052              'PUSH AX,DXπnewint%(1) = &H41B2              'MOV  DL,41πnewint%(2) = &H2B4               'MOV  AH,02πnewint%(3) = &H21CD              'INT  21πnewint%(4) = &H5A58              'POP DX,AXπnewint%(5) = &HCB                'RETFππsegnewint% = VARSEG(newint%(0)): offnewint% = VARPTR(newint%(0))π'Agreed ? Well let us control him:πDEF SEG = segnewint%: CALL absolute(offnewint%)πSLEEPπ'Seems to be oke, not ?π'--------------------------π'SETTING INTERRUPT VECTORSπ'--------------------------π'Since we have a working handler by now, we might process with the part ofπ'resetting the interrupt 83h vector( currently 0:0 ) to the adress of ourπ'handler( currently segnewint%:offnewint%). As it turns out QBASICπ'enables our capacity to set a vector with the DOScall INT 21, 25h. At leastπ'on my PC this call bumps( when somebody show me otherwise i'll be delighted).π'But for know let us take the more direct route, which is: changing the adressπ'stored at 0:83h*4ππsetvec:πDEF SEG = 0πPOKE (&H83 * 4), offnewint% AND &HFFπPOKE (&H83 * 4 + 1), offnewint% \ &HFFπPOKE (&H83 * 4 + 2), segnewint% AND &HFFπPOKE (&H83 * 4 + 3), segnewint% \ &HFFπSLEEPππ'OKE What we did here was storing the adress of our handlerπ'in the interrupt vector table in the form:π'                       DW  SEG:OFFππ'Interesting enough in assembler you won't risk such a move since thereπ'could and in fact will be an interrupt during the writing to the vectorπ'adress and the vector will be stored inadekwately. One other thing:π'The interrupts are all far return adresses, which is just difficultπ'language for that they are words in the form segment:offset. THIS ISπ'NOT THE STANDARD WAY OF STORING A WORD! but INTEL designed it so...π'About the formulas used: ANDING AN INTEGER WITH &HFF will give you theπ'High Byte since 0000 0000 1111 1111 AND .... .... .... .... will resultπ'in zeroing the higher byte(agreed ?). The other way around works theπ'division which returns the higher byte in the lower byte.ππ'[in fact it is not ! for signed integers, luckely i know the segment ofπ'QBASIC is not a signed value so everything will role smoothly....For codeπ'that is always okay for signed integers look at the POKEW and POKEDW routines]ππ'controleπFOR i% = 0 TO 3π  PRINT HEX$(PEEK(&H20C + i%));πNEXTπDEF SEGπSLEEPππ'So far we seems to be oke: allright ? Well lets review a bit. It isπ'called SETVEC wat we have done. It should be easy for you to make thisπ'into a callable sub. In general you have to poke to INTNR*4+something.π'May be it is just ok to do this first right now before going further...ππ'Okay so far,so good. Now the miracle itself. Will it work ? It is easy toπ'be so eager to try that you overlook one major change you have to makeπ'to our handler. It ended so far with RETF, but an interrupt restores theπ'flags also so we have to return with an Interrupt-return(IRET):πnewint%(5) = &HCF       'IRET replaces RETFππ'Okay now we are ready for the miracle. Have we developed an INTERRUPT ?π'Let's just call INT 83h and look what happens. PFFF........πDIM test%(2)πtest%(0) = &H83CD      'INT 83πtest%(1) = &HCB        'RETFππCLS : DEF SEG = VARSEG(test%(0))πCALL absolute(VARPTR(test%(0)))πDEF SEGππ'I do not know what your machine is saying but mine is printing 'a' !π'Is that all ? Yes, that is all. We have passed our first exam!πππ'INTERRUPT HANDLERS:part oneπ'----------------------------π'When we want to intercept an important interrupt like DOS INT 21 thenπ'it is obvious that we first must have the ability to store the vectorπ'so that we can put the original vector back after we are done. Since ourπ'int 83 can serve further as example interrupt let us call getvec forπ'int 83 and then store the vector.πππgetvec segvec%, offvec%, &H83πSavevec:πoldint83& = segvec% * 65536 + offvec%ππ'We are going to store the vector in one WORDvalue since 1)It reduces ourπ'variables with one. Therefore adding to clarity. 2) In essence the vectorπ'is just one variable. And while we store him this way we can with just oneπ'instruction like JMP OLDint83 return to our former handler.π'For control again:πPRINT HEX$(oldint83&)ππ'Agreed ? No ? Well you are right. This long integer is not really a DWπ'since INTEL choosed to put the vectors in the form off(flipped):seg(flipped)π'and not in the expected seg(flipped):off(flipped) way. This might beπ'a little confusing at first. But look at it this way: Because we store itπ'this way oldint83& is stored in the form off:seg.When later getvec looks atπ'the vectors in the table it reads excactly the offset at INTnr*4 and theπ'segment at INTnr*4+2. So indeed excactly our OLDINT83&!πππ'A SHORT_LONGCUT :π'--------------------π'Well,okay say we want to interrupt int 21h because we do not like the wayπ'function 0ah handles function-KEYS like <F1>( it do'nt). We are capable ofπ'getting the vector already. Also we can store the vector in an adekwate wayπ'and set the vector to our code. At a certain point we want to restore theπ'vector table again(Agreed ?), because we do not want to write code for allπ'INt 21h functions. At least not for free.....<G>. So we have to practice oneπ'other thing. That is :resetting a vector from the one we stored.ππ'Now let us return to our practice. We are writing int 83h. Let us now try toπ'reset the vector first to 0000:0000 what it was before we were so arrogant toπ'take over. This should be simple. Use setvec with SEGnewint%=0 AND OFFnewint%=0πSLEEPπDEF SEG = 0: POKE (&H83 * 4), 0: POKE (&H83 * 4 + 1), 0πPOKE (&H83 * 4 + 2), 0: POKE (&H83 * 4 + 3), 0:ππ'CONTROL:πgetvec segvec%, offvec%, &H83πPRINT HEX$(segvec%), HEX$(offvec%)πDEF SEGπ'agreed again ?πSLEEPππ'What was again the question: Oh,yes after Hooking DOS we will reset theπ'vector. Since we not put an int handler which interrupted our int 83H atπ'0000:0000, which we should by the way never even try, and since the conceptπ'of interrupting ourselves never managed to come clear to me, we just haveπ'to imagine we just stored our vector 0:0 at int 83h adres. So what isπ'left is that we want to restore the vector after done..Since we haveπ'oldint83& this should be simple not ? But poke just only writes bytes!π'this means you should write your own pokeDW. Not so..?ππ'DEF SEG = 0: POKEDW &H83 * 4, oldint83&: DEF SEGπ'and thats it.ππ'Control is now important.By the way does everybody knows that doshelp.comπ'and edit.com are QBASIC programs started up with QBASIC/edcom andπ'QBASIC/qhelp respectively ( so much for not compiler QBASIC ?)ππgetvec segvec%, offvec%, &H83πPRINT HEX$(segvec%); HEX$(offvec%): DEF SEG = 0πFOR i% = 0 TO 3: PRINT HEX$(PEEK((&H83 * 4) + i%)): NEXTππ'Okay while this whole document might seem a little bit childish in natureπ'you must agree that we are advancing...At this moment we know we canπ'restore vectors after using them. A very important feature...π'Also you could have stored the two procedures SETVEC and GETVEC by now iπ'guess, making your code even more evident. vecRestore is just a specificπ'Setvec and Savevec& is a)evident and b) needs POKE_DWππ'To advance we have to know some basics of an Interrupthandlerπ'--------------------------------------------------------------π'What an interrupt does is a whole lot, so be aware: An interruptπ'does push first the flags, then pushes cs:ip(return adress),then calculatesπ'vector adress as we do INTnr*4 loads up ip: then cs of the INTvec. Afterπ'done there is an IRET executed: meaning that first cs then ip then theπ'flags are restored from the stack( minus the interrupt and trap flag, whichπ'are cleared on return).π'In CODE: 'PUSHFπ          'PUSH CSπ          'PUSH IPπ          'vectoradressing: leave the MUL etc for knowπ          'JMP VECTORADRESSπ          '...................π          'DOES WHATEVER HERE IS DONEπ          '...................π          'POP IPπ          'POP CSπ          'POPFπ'Although not entiraly true this is sufficient knowledge for know. Fromπ'above it could be concluded that when writing an interrupthandler we haveπ'to do one extra thing when we define our handler as a far procedure( meaningπ'that apart from IP also CS is pushed). We have to do manually PUSHFπ'before jumping to the OLDINT and PopF them again as the OLDINT returnsπ'since the IRET at the end has POPF 'ed . After that we simulated theπ'INT call.!ππ'Okay before actually going into writing a real interrupt-handler we justπ'have to do lots more in the sector of making procedures,using labelsπ'in our asm-subs. I can tell one thing on before hand : the string wayπ'of going does not seem to survive procedures,using Data_array,labels etc.π'At least i am returning to a better way of the old code%().It is notπ'necessary to use datastatements, and clearity could even be incrementedπ'using also ASM comments( necessary for bigger asmsubs) in a header likeπ'in normal assemblerprograms with some modifications. Furthermore, arraysπ'does not wander around in mem, so they are adressable as procedures,datasπ'etc. At last, since you can use datas directly in your assemblersubs,theπ'external use of stack is dropping down to zero. This diminished a lot ofπ'code_space. Making the code more visible. Okay, i will return on the subject of Hooking Interruptπ'later......ππ'Let's round the whole thing off with rewriting our RestoreVEC. We shouldπ'be possible to directly write the VEC back using OLDINT83& ,not?π'Okay let us try.πgetvec segvec%, offvec%, &H83: PRINT HEX$(segvec%), HEX$(offvec%)π'reset the vec to 0?πpokeDW 0, &H83 * 4, 0πgetvec segvec%, offvec%, &H83: PRINT HEX$(segvec%), HEX$(offvec%)π'we seems to have it done.π'Now restore our vector ?πpokeDW 0, &H83 * 4, oldint83&πgetvec segvec%, offvec%, &H83: PRINT HEX$(segvec%), HEX$(offvec%)ππ'Maybe you agree that we accurataly restored a vector. Since probablyπ'the only purpose for getting a vector is to restore him at some timeπ'we might even change Getvec so that it reads one long integer in theπ'format segvec:offvec in our variable OlDINT&πPRINT HEX$(oldvec&(&H83))'seems to be ok?ππ'Ok now to summarize we can do the whole thing with enlightening speedπ'and shortness:πCLSπpokeDW 0, &H83 * 4, 0           'restore situation to startπoldint83& = oldvec&(&H83)       'get the original int83πpokeDW 0, &H83 * 4, segnewint% * 65536 + offnewint%π                                'set our int83 vectorπDEF SEG = VARSEG(test%(0))πCALL absolute(VARPTR(test%(0))) 'execute our handlerπDEF SEGπpokeDW 0, &H83 * 4, oldint83&   'restore the original vectorπππ'Seems to be oke, not ?  Apart from doing the whole thing in an assemblerπ'procedure i can see only one thing to improve codeshortness being toπ'write a function newvec&(segnewint%,offnewint%) which is trivialπ'but in the long run it rules out the flip INTEL confusion. Note that weπ'prepared us already on using assembler for the whole thing by consequentlyπ'loading up registers first,before writing to a BASIC variable( which is,π'can be argued, bad code viewed solely from here and now QBASICcode)ππ'part 2 to be released on my homepage.some time later will handle theπ'actual INT 21 handler.πππSUB getvec (d%, v%, nr%)ππd% = 1: v% = 2'variabele initialisatieπdataseg% = VARSEG(d%): offset% = VARPTR(d%)πdatasg$ = CHR$(dataseg% AND &HFF) + CHR$(dataseg% \ 256)πoffset1$ = CHR$(offset% AND &HFF) + CHR$(offset% \ 256)πoffset2$ = CHR$((VARPTR(v%) AND &HFF)) + CHR$((VARPTR(v%) \ 256))ππ'CODE IN QBASICπ'**************************************πππASM$ = ""πASM$ = ASM$ + CHR$(&HB4) + CHR$(&H35)              'MOV  AH,35        πASM$ = ASM$ + CHR$(&HB0) + CHR$(nr%)               'MOV  AL,INTnr    πASM$ = ASM$ + CHR$(&HCD) + CHR$(&H21)              'INT  21           πASM$ = ASM$ + CHR$(&HB8) + dataseg$                'MOV  AX,dataseg$     πASM$ = ASM$ + CHR$(&H8E) + CHR$(&HD8)              'MOV  DS,AX        πASM$ = ASM$ + CHR$(&H8C) + CHR$(&H6) + offset1$    'MOV  ptr[seg],ESπASM$ = ASM$ + CHR$(&H89) + CHR$(&H1E) + offset2$'  'mov ptr[off],BX πASM$ = ASM$ + CHR$(&HCB)                           'RETF            πππ'____________________________π Codeoff% = SADD(ASM$)π DEF SEG = VARSEG(ASM$)π CALL absolute(Codeoff%)π'____________________________πDEF SEGππEND SUBππFUNCTION newvec& (segnewint%, offnewint%)πnewvec& = segnewint% * 65536 + offnewint%πEND FUNCTIONππFUNCTION oldvec& (nr%)π'-------------------------------------------------------------------'π'This function is a replacement of GETVEC. It stores the old vectorπ'in INTEL format in an long integer. INTEL format means in the formatπ'segment:offset here.π'The procedure first stores the vector in ES[BX], before we access itπ'IN:  INTnr%π'OUT: oldvec&π'-------------------------------------------------------------------'πs% = 1: o% = 2'variabele initialisatieπdataseg% = VARSEG(s%): offset% = VARPTR(s%)πdatasg$ = CHR$(dataseg% AND &HFF) + CHR$(dataseg% \ 256)πoffset1$ = CHR$(VARPTR(s%) AND &HFF) + CHR$(VARPTR(s%) \ 256)πoffset2$ = CHR$(VARPTR(o%) AND &HFF) + CHR$(VARPTR(o%) \ 256)πππ'CODE IN QBASICπ'**************************************πππASM$ = ""πASM$ = ASM$ + CHR$(&HB4) + CHR$(&H35)              'MOV  AH,35      πASM$ = ASM$ + CHR$(&HB0) + CHR$(nr%)               'MOV  AL,INTnr  πASM$ = ASM$ + CHR$(&HCD) + CHR$(&H21)              'INT  21         πASM$ = ASM$ + CHR$(&HB8) + dataseg$                'MOV  AX,dataseg$   πASM$ = ASM$ + CHR$(&H8E) + CHR$(&HD8)              'MOV  DS,AX      πASM$ = ASM$ + CHR$(&H8C) + CHR$(&H6) + offset1$    'MOV  ptr[seg],ESπASM$ = ASM$ + CHR$(&H89) + CHR$(&H1E) + offset2$'  'mov ptr[off],BXπASM$ = ASM$ + CHR$(&HCB)                           'RETF          πππ'____________________________π Codeoff% = SADD(ASM$)π DEF SEG = VARSEG(ASM$)π CALL absolute(Codeoff%)π'____________________________πDEF SEGπoldvec& = s% * 65536 + o%πEND FUNCTIONππSUB pokeDW (pokeseg%, pokeoff%, dword&)π'This function will just poke a Dword into memory, just likeπ'the standard function Poke does it, with one enhancement.π'While poke needs a def seg before it we will transfer that toπ'the function also! So :π'DW segment to poke word toπ'DW offset to poke word toπ'DD Dwordvalue to pokeπ'---------------------------------------------------------------πDEF SEG = VARSEG(dword&)πptr% = VARPTR(dword&)πLowWlowbyte% = PEEK(ptr%): LowWhighbyte% = PEEK(ptr% + 1)πHighWlowbyte% = PEEK(ptr% + 2): HighWhighbyte% = PEEK(ptr% + 3)ππDEF SEG = pokeseg%π  POKE pokeoff%, LowWlowbyte%π  POKE pokeoff% + 1, LowWhighbyte%π  POKE pokeoff% + 2, HighWlowbyte%π  POKE pokeoff% + 3, HighWhighbyte%πDEF SEGπEND SUBππSUB pokeW (pokeseg%, pokeoff%, word%)π'This function will just poke a word into memory, just likeπ'the standard function Poke does it, with one enhancement.π'While poke needs a def seg before it we will transfer that toπ'the function also! So :π' DW segment to poke word toπ' DW offset to poke word toπ' DW wordvalue to pokeπ'Of course you should use this only for reasons of putting all yourπ'variables in one DATAsegment, since otherwise just defining a integerπ'is enough.π'---------------------------------------------------------------πDEF SEG = VARSEG(word%)πptr% = VARPTR(word%)πhighbyte% = PEEK(ptr% + 1): lowbyte% = PEEK(ptr%)πDEF SEG = pokeseg%π  POKE pokeoff%, lowbyte%π  POKE pokeoff% + 1, highbyte%πDEF SEGππEND SUBπRick Elbers                    ASSEMBLY IN QBASIC 5: PROCS    t030611@tip.nl                 12-01-96 (05:37)       QB, QBasic, PDS        279  10103    PROCS.BAS   'ASSEMBLY IN QBASIC PART 5: USING A PROCEDURE SEGMENTπ'-------------------------------------------------------π'Rick Elbers november 1996                                                                                         ππDECLARE SUB pokestring (SEGJE%, OFFJE%, MAIN$)πDECLARE SUB PokeW (pokeseg%, pokeoff%, word%)πDECLARE FUNCTION int2str$ (sword%)π'------------π'INTRODUCTIONπ'------------π'There are more ways to handle procedures in your assembler subs. This shortπ'article will discuss one of them. This one is especially done because weπ'need him in order to make an interrupthandler, which will be my nextπ'contribution. When we are discussing procedures we can separate theπ'called program( that one is named newint% here) and the caller(that one isπ'simply named callsub%).π'-----------------π'CALLED PROCEDURE:π'-----------------πDIM newint%(6)πnewint%(0) = &H5052              'PUSH AX,DXπnewint%(1) = &H41B2              'MOV  DL,41πnewint%(2) = &H2B4               'MOV  AH,02πnewint%(3) = &H21CD              'INT  21πnewint%(4) = &H5A58              'POP DX,AXπnewint%(5) = &HCB                'RETF (returns to the caller)ππ'CONTROL IF IT WORKS:πsegm% = VARSEG(newint%(0)): offs% = VARPTR(newint%(0))πCLS : DEF SEG = segm%: CALL ABSOLUTE(offs%)πDEF SEG : SLEEPπ'For me it worked...π'----------------π'CALLER PROCEDUREπ'-----------------πDIM callsub%(3): cdeseg% = VARSEG(callsub%(0)): i% = VARPTR(callsub%(0))πDEF SEG = cdeseg%ππPOKE i%, &H9A                  'the opcode for CALLπPokeW cdeseg%, i% + 1, offs%πPokeW cdeseg%, i% + 3, segm%πDEF SEG = cdeseg%             'has to be restored since POKEW returned to def segπPOKE i% + 5, &HCB              'retf (return to QBASIC)ππ'This program does nothing but calling the newint% and thenπ'returning to QBASIC. Let us controle it:πLOCATE 2, 1: CALL ABSOLUTE(i%): DEF SEGπ'It does seems to work allright.....πSLEEPππ'-------π'NEWINT$π'-------π'Some off you might have noticed i used integers for storage of the assembler subsπ'here. That is for a few good reasons and in some follow up article on thisπ'i will resolve all mentioned problems with using integers for assembler codeπ'storage..But for this moment i will add, so to speak for backwardπ'compatibility, a way to handle procedures when you use strings for assemblerπ'subs storage.π'----------------π'CALLED PROCEDUREπ'----------------πnewint$ = ""πnewint$ = newint$ + CHR$(&H52) + CHR$(&H50)  'PUSH AX,DXπnewint$ = newint$ + CHR$(&HB2) + CHR$(&H41)  'MOV  DL,41πnewint$ = newint$ + CHR$(&HB4) + CHR$(&H2)   'MOV  AH,02πnewint$ = newint$ + CHR$(&HCD) + CHR$(&H21)  'INT  21πnewint$ = newint$ + CHR$(&H58) + CHR$(&H5A)  'POP DX,AXπnewint$ = newint$ + CHR$(&HCB)               'RETF (returns to the caller)ππ'CONTROL IF IT WORKS:πsegm% = VARSEG(newint$): offs% = SADD(newint$)πDEF SEG = segm%: LOCATE 3, 1: CALL ABSOLUTE(offs%): DEF SEG : SLEEPπ'seems okeπ'-----------------π'CALLING PROCEDUREπ'-----------------π'Okay now for the big surprise. We are going to use a PROC segment likewiseπ'we used a DATAS segment in some other article. In that PROC segment we willπ'poke every string_stored_assembler_routine that we want to call.π'After that is done we can call the routines from the calling program the sameπ'way we readed out data in other instances. Let us see how it works:ππ'First let us set up the PROCS segment:πDIM PROCS%(LEN(newint$) \ 2 + 1)πprocseg% = VARSEG(PROCS%(0)): procoff% = VARPTR(PROCS%(0))πprocseg$ = int2str$(procseg%)ππ'Now let us poke newint$ into it and make newint$ adressableπpokestring procseg%, procoff%, newint$: newintoff$ = int2str$(procoff%)ππ'-----------------------------------π'CODEπ'-----π'call procseg$[newintoff$]π'retfπ'-----------------------------------πasm$ = ""πasm$ = asm$ + CHR$(&H9A) + newintoff$ + procseg$π'retfπasm$ = asm$ + CHR$(&HCB)ππ'________________________________________πCodeoff% = SADD(asm$)πDEF SEG = VARSEG(asm$): LOCATE 4, 1:πCALL ABSOLUTE(Codeoff%): DEF SEG : SLEEPπ'________________________________________ππ'This was our first procedure....!!!ππ'--------------π'FINISHING....π'--------------π'I hope you will be realizing the tremendous opportunities of this approachπ'since you just can poke ANY routine inside the PROC segment and call himπ'in your main program. For the sake of demonstration i will just add oneπ'more program to it. Actually it is the printstring that i used in theπ'second part of ASSEMBLY IN QBASIC. Of course the actual procedures i usedπ'as calling procedures are very simple and does not seem to add anyπ'functionality whatsoever. However that is why they serve a great purpose inπ'outlining the CONCEPT of a PROCEDURE segment. Actual possibilities shouldπ'be very simple to fantasize and in fact to make when you have understoodπ'it all....π'--------------------------------------------------------------------------π'DATA:π'------πb$ = "Hello i have been printed indirectly$"  'This is the way DOS processes stringprintπDIM datas%(LEN(b$) \ 2 + 1)πdataseg% = VARSEG(datas%(0)): dataoff% = VARPTR(datas%(0))πdataseg$ = int2str$(dataseg%): dataoff$ = int2str$(dataoff%)πpokestring dataseg%, dataoff%, b$π'CODE:π'-----πprnstr$ = ""πprnstr$ = prnstr$ + CHR$(&H50)                 'pushaπprnstr$ = prnstr$ + CHR$(&H52)πprnstr$ = prnstr$ + CHR$(&H1E)πprnstr$ = prnstr$ + CHR$(&HB8) + dataseg$      'MOV AX,DATASEG$πprnstr$ = prnstr$ + CHR$(&H8E) + CHR$(&HD8)    'MOV DS,AXπprnstr$ = prnstr$ + CHR$(&HBA) + dataoff$      'MOV DX,DATAOFF$πprnstr$ = prnstr$ + CHR$(&HB4) + CHR$(&H9)     'MOV AH,9πprnstr$ = prnstr$ + CHR$(&HCD) + CHR$(&H21)    'INT 21πprnstr$ = prnstr$ + CHR$(&H1F)                 'popaπprnstr$ = prnstr$ + CHR$(&H5A)πprnstr$ = prnstr$ + CHR$(&H58)πprnstr$ = prnstr$ + CHR$(&HCB)                 'retfπππ'PROCπ'-----π'We have to adjust our PROC segment to hold both routines now:πREDIM PROCS%(LEN(newint$) \ 2 + 1 + LEN(prnstr$) + 1)πprocseg% = VARSEG(PROCS%(0)): procoff% = VARPTR(PROCS%(0))πprocseg$ = int2str$(procseg%):ππ'Let us poke both routines in the PROC segment now and make the routinesπ'adressable:ππpokestring procseg%, procoff%, newint$: newintoff$ = int2str$(procoff%)πprnoff% = procoff% + LEN(newint$)πpokestring procseg%, prnoff%, prnstr$: prnstroff$ = int2str$(prnoff%)ππ'Okay we have a PROC segment now with:π'PROC:0               newint$π'PROC:LEN(newint$)    prnstr$ππ'When we want to call both routines we have to adjust the callers CODE:π'----------------------------------------------------------------------π'CODEπ'-----π'call procseg$[newintoff$]π'call procseg$[prnstroff$]π'retfπ'-----------------------------------πasm$ = ""πasm$ = asm$ + CHR$(&H9A) + newintoff$ + procseg$πasm$ = asm$ + CHR$(&H9A) + prnstroff$ + procseg$π'retfπasm$ = asm$ + CHR$(&HCB)π'________________________________________πCodeoff% = SADD(asm$)πDEF SEG = VARSEG(asm$): LOCATE 5, 1πCALL ABSOLUTE(Codeoff%): DEF SEGπ'________________________________________ππ'There does not seem to be a limit to the possible chaining that you canπ'do. You can call procedures from procedures from procedures enz...π'But you might consider to store the heavy used procedures in one PROCπ'segment of course.....I hope that this article helps a bit in assembly-π'programming in QBASIC (still the most used BASIC). I hope i pointed outπ'in this article(s) that assembly programming in QBASIC is not necessaralyπ'very difficult, when you pay attention to the main principles.π'So do not go for quick solutions at an easy level, but instead try toπ'make clear choices at levels that still allow you to. I am sure that willπ'later on help you * a lot! Seeing the difficulties in simple things oftenπ'makes difficult things simple ......πππ'Bye.ππ'RickπENDππSUB hlpjeπ'-----------------------------------π'push axπ'push dsπ'mov ax,0000π'mov ds,axπ'call 1234:0000π'retfπ'-----------------------------------ππprnstr$ = asm$ + CHR$(&H50)πasm$ = asm$ + CHR$(&H1E)πasm$ = asm$ + CHR$(&HB8) + CHR$(&H0) + CHR$(&H0)πasm$ = asm$ + CHR$(&H8E) + CHR$(&HD8)πasm$ = asm$ + CHR$(&H9A) + CHR$(&H0) + CHR$(&H0) + CHR$(&H34) + CHR$(&H12)πasm$ = asm$ + CHR$(&HCB)π'________________________________________πCodeoff% = SADD(asm$)πDEF SEG = VARSEG(asm$)πCALL ABSOLUTE(Codeoff%)π'________________________________________πDEF SEGπππEND SUBππFUNCTION int2str$ (sword%)π'This function is translating SWORD Integers into a string. Its only useπ'is when you still use asm$ for assembler functions( like i do). In thatπ'case you can make your integer values usable ..π'THis function simply translates the hexa bytesπ'into stringbytes as is.π'----------------------------------------------------πDEF SEG = VARSEG(sword%)πptr% = VARPTR(sword%)πint2str$ = CHR$(PEEK(ptr%)) + CHR$(PEEK(ptr% + 1))πDEF SEGππEND FUNCTIONππSUB pokestring (SEGJE%, OFFJE%, MAIN$)π'------------------------------------------------------π'This function pokes a string (might be ASCIIZ)intoπ'memory at a given location, making it possible toπ'access strings in byte formπ'------------------------------------------------------ππDEF SEG = SEGJE%πFOR i% = 0 TO LEN(MAIN$) - 1π  POKE OFFJE% + i%, ASC(MID$(MAIN$, i% + 1, 1))πNEXTπDEF SEGππEND SUBππSUB PokeW (pokeseg%, pokeoff%, word%)π'This function will just poke a word into memory, just likeπ'the standard function Poke does it, with one enhancement.π'While poke needs a def seg before it we will transfer that toπ'the function also! So :π' DW segment to poke word toπ' DW offset to poke word toπ' DW wordvalue to pokeπ'Of course you should use this only for reasons of putting all yourπ'variables in one DATAsegment, since otherwise just defining a integerπ'is enough.π'---------------------------------------------------------------πDEF SEG = VARSEG(word%)πptr% = VARPTR(word%)πhighbyte% = PEEK(ptr% + 1): lowbyte% = PEEK(ptr%)πDEF SEG = pokeseg%π  POKE pokeoff%, lowbyte%π  POKE pokeoff% + 1, highbyte%πDEF SEGππEND SUBπJoe Caverly                    BINARY SEARCH ROUTINE          74214.637@CompuServe.COM       11-02-96 (15:01)       QB, QBasic, PDS        59   2091     BSEARCH.BAS '  I looked through the ABC Text for a binary search routine, but found none. Iπ'have this very large text file that is downloaded from the Mainframe each day,π'which is presently at 151,000 records, and growing. Each record is 328π'characters wide. The file is sorted by a 7-character customer number. I needed aπ'means of rapidly looking up a customer number. However, instead of reading thisπ'very large text file into a database, I figured there had to be a way to rapidlyπ'search the file as-is. The code below does just that.ππCLSπDIM RecordIn AS STRING * 9πLET RecLen = 9πLET TEST = FREEFILEπOPEN "C:\SETUP\ADANUM.TXT" FOR BINARY AS #TEST LEN = RecLenπLET wsmin = 0πLET wsmax = (LOF(TEST) / RecLen) + 1πLET wsmaxptr = (wsmax * RecLen) + 1πLET wsKey$ = "1218537"πDOπ  LET wsmid = wsmin + ((wsmax - wsmin) \ 2)π  LET wsptr = (wsmid * RecLen) + 1π  IF wsmin > wsmax THENπ    PRINT "Not Found!"π    PRINT "Near Record Number "; wsmidπ    EXIT DOπ  END IFπ  GET #TEST, wsptr, RecordInπ  LET wsRecordIn$ = LEFT$(RecordIn, 7)π  SELECT CASE wsRecordIn$π    CASE IS = wsKey$π      PRINT wsRecordIn$ + " equals " + wsKey$π      EXIT DOπ    CASE IS < wsKey$π      'What we want is in the upper halfπ      PRINT wsRecordIn$ + " Less Than " + wsKey$π      LET wsmin = wsmid + 1π    CASE IS > wsKey$π      'What we want is in the lower halfπ      PRINT wsRecordIn$ + " Greater Than " + wsKey$π      LET wsmax = wsmid - 1π  END SELECTπLOOPπCLOSE #TESTπPRINT "Done!"πENDππ'Please note that the above program works with a fixed-width file where eachπ'record is 9 characters wide (7 characters of data plus a carriage return andπ'line feed). If you want to generate a file to test this program with, here's aπ'small program that will do just that. The above program would need to beπ'modified to accept a record that is 13 characters wide (11 characters of dataπ'plus a carriage return and line feed).ππOPEN "c:\setup\test.dat" FOR OUTPUT AS #1πFOR cntr = 1 TO 151000π  PRINT #1, USING "Line ######"; cntrπNEXT cntrπCLOSE #1πPRINT "Done!"πENDπKurt Kuzba                     FULL 16-BIT SHIFTING ROUTINE   FidoNet QUIK_BAS Echo          12-08-96 (13:50)       QB, QBasic, PDS        37   1251     SHIFT.BAS   '>   I would like to know if anyone knows a simple right bit-π'>   shift routine for QBasic.π'>......π'   I wrote one of those a while ago when someone posted a PBπ'program using SHIFT(). I recently stumbled across a means toπ'accurately convert bit patterns for INTEGER values to LONG whenπ'the value is negative, so I did an update to the process.π'It now allows a full 16-bit shift where it only allowed 15 before.ππ'_|_|_|   SHIFT.BASπ'_|_|_|   A simple bit-shifting routine for Qbasicπ'_|_|_|   No warrantee or guarantee is given or implied.π'_|_|_|   Released   PUBLIC DOMAIN   by Kurt Kuzba.  (12/7/96)πDECLARE FUNCTION shift% (D%, V%, T%)πDOπ   INPUT "number => ", N%π   sh% = N%π   PRINT shift%(0, sh%, 1), shift%(1, sh%, 1)πLOOP WHILE N% > 0πENDπFUNCTION shift% (D%, V%, T%)π   '_|_|_|   A simple bit-shifting routine for Qbasicπ   '_|_|_|   shift V% right or left T% placesπ   '_|_|_|   if D% = 0 then shift right, else shift leftπ   S& = V%π   IF S& < 0 THEN S& = 65536 + S&π   FOR T% = T% TO 1 STEP -1π      IF D% = 0 THENπ         S& = S& \ 2π      ELSEπ         S& = (S& * 2) AND 65535π      END IFπ   NEXTπ   IF S& > 32767 THEN S& = S& - 65536π   shift% = S&πEND FUNCTIONπ'_|_|_|   end   SHIFT.BASπEgbert Zijlema                 PRINT COUNTRY SPECIFIC DATE    E.Zijlema@uni4nn.iaf.nl        11-02-96 (16:40)       PB                     55   1766     DATES.BAS   ' CTRYDATE.BAS    - prints a date on the screen, using country specificπ'                   separator - e.g.: dot in Germany, slash in UK & Japan,π'                   hyphen in USA etc.ππ' Author          : Egbert Zijlema (E.Zijlema@uni4nn.iaf.nl)π' (up)Date        : November 22, 1996π' Language        : Power Basic 3.2π' Copyright status: Public Domainππ' Notification    : Result depends of correct COUNTRY settingπ'                   in your CONFIG.SYS file!ππ' ------------- begin code --------------πDEFINT A - ZππSUB GetCountryInfo(format, seperator$)π  buffer$ = SPACE$(64)                ' information bufferπ  REG 8, STRSEG(buffer$)              ' DS = segment of bufferπ  REG 4, STRPTR(buffer$)              ' DX = offset of bufferπ  REG 1, &H3800                       ' AX = serviceπ  CALL INTERRUPT &H21ππ  ' after the call buffer$ = filled:π  format = ASC(buffer$)               ' date format (1 out of 3) = 1st byteπ  seperator$ = MID$(buffer$, 12, 1)   ' delimiter = 12th byteπEND SUBππFUNCTION CountrySpecificDate(InputDate$) AS STRINGππ  ' InputDate$ as MM-DD-YYYY (= default format)ππ  IF InputDate$ = "" THEN InputDate$ = DATE$π  MM$ = MID$(InputDate$, 1, 2)π  DD$ = MID$(InputDate$, 4, 2)π  YY$ = MID$(InputDate$, 7)ππ  GetCountryInfo form, delim$π  SELECT CASE formπ    CASE 0π      FUNCTION = InputDate$          ' USA (Basic's default)π    CASE 1π      FUNCTION = DD$ + delim$ + _π                 MM$ + delim$ + YY$  ' EURπ    CASE 2π      FUNCTION = YY$ + delim$ + _π                 MM$ + delim$ + DD$  ' JAPπ  END SELECTπEND FUNCTIONππ' demo callπCLSπ  PRINT "To-day's date is: "; CountrySpecificDate("")      ' use actual dateπENDππ' ----- end code ------------------------------πAaron Finley                   DOSFS FILESYSTEM BROWSER V1.0  aaronx86@geocities.com         12-01-96 (18:01)       QB, QBasic, PDS        903  28361    DOSFS.BAS   DECLARE SUB license ()πDECLARE SUB dialog (A!, b!, c!, d!, shd!)πDECLARE SUB ANXStringHandle (prompt$, max%, winsiz%, S$, sequins%)πDECLARE FUNCTION GetString$ (prompt$, max%, winsiz%, S$, sequins%)π'DOSFS Filesystem Installer V1.0π'Copyright (C) Aaron Finley 1996π'All Rights Reservedππ        CLSπ        COLOR 0, 15π        PRINT STRING$(80, " ")                                                          '------------License-------------------π        LOCATE 1, 1: PRINT "DOSFS Filesystem Installer V1.0":                           CALL licenseπ        CALL dialog(17, 8, 30, 10, 1)                                                   '--------------------------------------π        COLOR 15, 3π        LOCATE 8, 32: PRINT "DOSFS Installer": COLOR 0, 15π        LOCATE 11, 26: PRINT "DOSFS Filesystem Version 1.0"π        LOCATE 12, 24: PRINT " Copyright (c) Aaron Finley 1996"π        LOCATE 13, 19: PRINT "           All Rights Reserved"π        COLOR 15, 1π        LOCATE 15, 25: PRINT STRING$(32, " ")πππ                OPEN "dosfs.bas" FOR INPUT AS #1πππ                        DO UNTIL EOF(1)π                        LINE INPUT #1, A$ππ                        IF A$ = "'[■FS_APP.ANX]" THEN GOTO gotit1:ππ                        LOOPππ                        CALL dialog(17, 8, 30, 10, 1)π                        COLOR 15, 3π                        LOCATE 8, 32: PRINT "DOSFS Installer"π                        COLOR 0, 15π                        LOCATE 12, 23: PRINT "    Installer Object Incomplete"π                        LOCATE 13, 23: PRINT "      Unexcepted End-Of-File"π                        SYSTEMπgotit1:πFsb = 1πqat = 1πdfc = 1ππOPEN "FS_app.anx" FOR OUTPUT AS #2πcc = 0ππ        DO UNTIL EOF(1)π                LINE INPUT #1, A$π                        FOR i% = 2 TO LEN(A$)π                                b$ = MID$(A$, i%, 1)π                                IF A$ = "'[■FS_APP.ANX]" THEN GOTO find2:π                                b = ASC(b$)π                                IF b = 254 THEN GOTO 4π                                cc = cc + 1π                                IF cc = 128 THEN cc = 1ππππ                                b = b - ccππ                                PRINT #2, CHR$(b);π        '----Percent Formula V1----ππdone = done + 1πoutof = LOF(1)πlength = 40ππ numprint1 = done / outof * length + 1π COLOR 15, 3ππ LOCATE 15, 25: PRINT STRING$(numprint1, " ")πππ        '---Done That---πππ4π                NEXTππ                cc = 0πππ                PRINT #2,π        LOOPππfind2:ππ                CLOSE #1π                OPEN "dosfs.bas" FOR INPUT AS #1ππ                        DO UNTIL EOF(1)π                        LINE INPUT #1, A$ππ                        IF A$ = "'[■FS_VIEW.BAS]" THEN GOTO gotit2:ππ                        LOOPππ                        CALL dialog(17, 8, 30, 10, 1)π                        COLOR 15, 3π                        LOCATE 8, 32: PRINT "DOSFS Installer"π                        COLOR 0, 15π                        LOCATE 12, 23: PRINT "    Installer Object Incomplete"π                        LOCATE 13, 23: PRINT "      Unexcepted End-Of-File"π                        SYSTEMπgotit2:πCLOSE #2πOPEN "FS_VIEW.BAS" FOR OUTPUT AS #2πcc = 0ππ        DO UNTIL EOF(1)π                LINE INPUT #1, A$π                        FOR i% = 2 TO LEN(A$)π                                b$ = MID$(A$, i%, 1)π                                IF A$ = "'[■FS_VIEW.BAS]" THEN GOTO endthat:π                                b = ASC(b$)πππππ                                IF b = 254 THEN GOTO 6π                                cc = cc + 1π                                IF cc = 128 THEN cc = 1ππ                                b = b - ccπ                                IF b = -4 THEN GOTO 889:ππ                                PRINT #2, CHR$(b);π        '----Percent Formula V1----ππdone = done + 1πoutof = LOF(1)πlength = 54ππ numprint1 = done / outof * length + 1π COLOR 15, 3ππ LOCATE 15, 25: PRINT STRING$(numprint1, " ")πππ        '---Done That---ππ6π                NEXTππ                cc = 0πππ                PRINT #2,π        LOOPππππendthat:ππCLOSE #2πOPEN "DOC.TXT" FOR OUTPUT AS #2πcc = 0ππ        DO UNTIL EOF(1)π                LINE INPUT #1, A$π                        FOR i% = 2 TO LEN(A$)π                                b$ = MID$(A$, i%, 1)π                                IF A$ = "'[■EMANUAL.TXT]" THEN GOTO endthat2:π                                b = ASC(b$)πππππ                                IF b = 254 THEN GOTO 889π                                cc = cc + 1π                                IF cc = 128 THEN cc = 1ππ                                b = b - ccπ                                IF b = -4 THEN GOTO 889:ππ                                PRINT #2, CHR$(b);π        '----Percent Formula V1----ππdone = done + 1πoutof = LOF(1)πlength = 64ππ numprint1 = done / outof * length + 1π COLOR 15, 3ππ LOCATE 15, 25: PRINT STRING$(numprint1, " ")πππ        '---Done That---ππ889π                NEXTππ                cc = 0πππ                PRINT #2,π        LOOPππendthat2:ππ100π        VIEW PRINT 3 TO 24π        CLOSEπCOLOR 0, 0ππ                        CALL dialog(20, 10, 20, 6, 1)π                        COLOR 15, 3π                        LOCATE 10, 32: PRINT "DOSFS Installer"π                        COLOR 0, 15π                        LOCATE 12, 24: PRINT "    Enter installation path"πππPRINTπpath$ = "C:\DOSFS"πCOLOR 15, 1πLOCATE 13, 27:πTmp$ = GetString$(Out$, 256, 24, path$, 0)πON ERROR GOTO DirAExt:πMKDIR path$πDirAExt:πCOLOR 0, 0πCLSπCALL dialog(20, 8, 21, 10, 1)πCOLOR 15, 3πLOCATE 8, 32: PRINT "DOSFS Installer"πCOLOR 0, 15πLOCATE 10, 24: PRINT "  Chose components to install."πLOCATE 12, 24: PRINT "  [ ] 1. Filesystem Browser (REQ)"πLOCATE 13, 24: PRINT "  [ ] 2. APP Loader C:\I...ANX (REQ)"πLOCATE 14, 24: PRINT "  [ ] 3. FS Files and Manual (REQ)"πLOCATE 16, 21: PRINT "Press number to select, Enter to cont."π'------------Really Sloppy Code---------------------π'Excuse this crappy code.  I almost ran out of time!π       π        DOπRerr:πIF Fsb = 1 THEN LOCATE 12, 27: PRINT "X"πIF Fsb = 0 THEN LOCATE 12, 27: PRINT " "πIF qat = 1 THEN LOCATE 13, 27: PRINT "X"πIF qat = 0 THEN LOCATE 13, 27: PRINT " "πIF dfc = 0 THEN LOCATE 14, 27: PRINT " "πIF dfc = 1 THEN LOCATE 14, 27: PRINT "X"ππA$ = INKEY$: IF A$ = "" THEN GOTO Rerr:π       π        IF A$ = CHR$(13) THEN GOTO donsel:π        IF Fsb = 1 THEN IF A$ = "1" THEN Fsb = 0: GOTO Rerrπ        IF qat = 1 THEN IF A$ = "2" THEN qat = 0: GOTO Rerrπ        IF dfc = 1 THEN IF A$ = "3" THEN dfc = 0: GOTO Rerrπ        π        IF A$ = "1" THEN Fsb = 1π        IF A$ = "2" THEN qat = 1π        IF A$ = "3" THEN dfc = 1ππ        LOOPππdonsel:πCOLOR 0, 0πCLSπ                        CALL dialog(20, 10, 20, 6, 1)π                        COLOR 15, 3π                        LOCATE 10, 32: PRINT "DOSFS Installer"π                        COLOR 0, 15π                        LOCATE 13, 30: PRINT "    Please Wait..."π             π            IF Fsb = 1 THEN cmd$ = "copy fs_app.anx " + path$ + "\fs_app.anx > tmp.tmp": cmd2$ = "copy fs_view.bas " + path$ + "\fs_view.anx > tmp.tmp": SHELL cmd$: SHELL cmd2$: file = file + 2π            IF qat = 1 THEN OPEN "c:\ifloader.anx" FOR OUTPUT AS #1: PRINT #1, "chdir " + path$: PRINT #1, "qbasic /run " + path$ + "\fs_app.anx": CLOSE #1: file = file + 1π            IF Fsb = 1 OR qat = 1 OR dfc = 1 THENπ            dd$ = "copy doc.txt " + path$ + "\MANUAL.TXT"π            SHELL dd$π            END IFπ            IF dfc = 1 THENπ            OPEN path$ + "\dosfs.bat" FOR OUTPUT AS #1π            PRINT #1, "@echo off"π            PRINT #1, "chdir " + path$π            PRINT #1, "qbasic /run fs_view.anx"π            CLOSE #1π            file = file + 1π            OPEN path$ + "\odc.anx" FOR OUTPUT AS #1π            CLOSE #1π            file = file + 1π            OPEN path$ + "\odn.anx" FOR OUTPUT AS #1π            PRINT #1, "0"π            CLOSE #1π            file = file + 1π            OPEN path$ + "\odr.anx" FOR OUTPUT AS #1π            PRINT #1, "2"π            PRINT #1, "Aunix"π            CLOSE #1π            file = file + 1π            ELSEπ            END IFπ                        CALL dialog(20, 10, 20, 6, 1)π                        COLOR 15, 3π                        LOCATE 10, 32: PRINT "DOSFS Installer"π                        COLOR 0, 15π                        LOCATE 13, 24: PRINT "Installation Complete (" + RIGHT$(STR$(file + 1), LEN(STR$(file + 1)) - 1) + " files)"π            π            KILL "fs_app.anx"π            KILL "Fs_view.bas"π            KILL "Doc.txt"π            IF Fsb = 1 OR dfc = 1 OR qat = 1 THENπ            KILL "tmp.tmp"π            ELSEπ            END IFππππππππππππππππππππππON ERROR GOTO errhndl:ππππENDπππππππππππerrhndl:πSYSTEMππSUB ANXStringHandle (prompt$, max%, winsiz%, S$, sequins%)π   S$ = LTRIM$(RTRIM$(S$)): Cursor% = LEN(S$) - (Cursor% < max%)π   F$ = " ": IF sequins% <> 0 THEN F$ = " "π   Fill$ = STRING$(max%, F$)π   S$ = LEFT$(S$ + Fill$, max%): INS% = -1: PRINT prompt$; " ";π   Ybase% = POS(0)π   WHILE done$ <> "DONE"π      Sbase% = Cursor% - winsiz% + 1: IF Sbase% < 1 THEN Sbase% = 1π      LOCATE , Ybase%, 0: Hid$ = STRING$(LEN(RTRIM$(S$)), "*")π      IF sequins% = 0 THENπ         PRINT MID$(S$ + Fill$, Sbase%, winsiz%); " ";π      ELSEπ         PRINT MID$(Hid$ + Fill$, Sbase%, winsiz%); " ";π      END IFπ      LOCATE , Ybase% + Cursor% - Sbase%, 1π      k$ = "": WHILE k$ = "": k$ = INKEY$: WENDπ      k% = ASC(k$): IF k% = 0 THEN k% = -ASC(MID$(k$, 2))π      SELECT CASE k%π         CASE 32 TO 127π            IF INS% AND Cursor% < max% THENπ               MID$(S$, Cursor% + 1) = MID$(S$, Cursor%)π               S$ = LEFT$(S$, max%)π            END IFπ            MID$(S$, Cursor%, 1) = k$π            IF Cursor% = max% THEN SOUND 999, 1π            Cursor% = Cursor% - (Cursor% < max%)π         CASE 13: IF S$ = Fill$ THEN S$ = ""π            IF INSTR(S$, F$) > 0 THEN S$ = LEFT$(S$, INSTR(S$, F$) - 1)π            EXIT SUBπ         CASE 8π            IF Cursor% > 1 THENπ               Cursor% = Cursor% - 1π               MID$(S$, Cursor%) = MID$(S$, Cursor% + 1)π               MID$(S$, max%) = F$π            ELSEπ               BEEPπ            END IFπ         CASE 27: S$ = "": EXIT SUBπ         CASE -71: Cursor% = 1π         CASE -79: Cursor% = INSTR(S$, F$)π            IF Cursor% = 0 THEN Cursor% = max%π         CASE -82: INS% = -(INS% + 1): SOUND 1500 + 800 * INS%, .5π         CASE -83π            IF Cursor% < max% THENπ               MID$(S$, Cursor%) = MID$(S$, Cursor% + 1)π               MID$(S$, max%) = F$π            ELSEπ               BEEPπ            END IFπ         CASE -75: Cursor% = Cursor% - 1π            lim% = INSTR(S$, F$): lim% = lim% - max% * (lim% = 0)π            IF Cursor% < 1 THEN Cursor% = lim%π         CASE -77: Cursor% = Cursor% + 1π            lim% = INSTR(S$, F$): lim% = lim% - max% * (lim% = 0)π            IF Cursor% > lim% THEN Cursor% = 1π      END SELECTπ   WENDπEND SUBππSUB dialog (A, b, c, d, shd)ππ        COLOR 15, 3π        LOCATE b, A: PRINT STRING$(A + c, " ")π        COLOR 0, 15π        FOR i% = b + 1 TO b + d - 1π        LOCATE i%, A: PRINT STRING$(A + c, " "); : IF shd = 1 THEN COLOR 8, 0: PRINT "█": COLOR 0, 15π        NEXT i%π        COLOR 8, 0π        IF shd = 1 THEN LOCATE b + d, A + 1: PRINT STRING$(A + c, "█")πEND SUBππSUB formulaπCLSπDOπdone = 25πIF done = outof THEN ENDπoutof = 100πlength = 80πLOCATE 1, 1πCOLOR 15, 1πPRINT STRING$(length, " ")π numprint1 = done / outof * length + 1ππ LOCATE 1, 1:π COLOR 0, 15π PRINT STRING$(numprint1, " ")πLOOPπππEND SUBππFUNCTION GetString$ (prompt$, max%, winsiz%, S$, sequins%)π   ANXStringHandle prompt$, max%, winsiz%, S$, sequins%: Elvis$ = S$πEND FUNCTIONππSUB licenseπ        ππ        CALL dialog(11, 3, 50, 20, 1)π        COLOR 15, 3π        LOCATE 3, 35: PRINT "License"π        π        COLOR 0, 15π        LOCATE 5, 1:π        LOCATE 5, 20: PRINT "DOSFS Installation v1.0"π        π        LOCATE 6, 20: PRINT "Copyright (C) Aaron Finley 1996"π        LOCATE 7, 20: PRINT "All Rights Reserved"π        LOCATE 8, 20: PRINTπ        LOCATE 9, 20: PRINT "By pressing `A',  you agree to the following:"π        LOCATE 10, 20: PRINT "---------------------------------------------"π        LOCATE 11, 20: PRINT " 1. You will not use any of the package's"π        LOCATE 12, 20: PRINT "    (which includes FS_APP.ANX,  FS_VIEW.BAS)"π        LOCATE 13, 20: PRINT "    code from this version.  In order to use"π        LOCATE 14, 20: PRINT "    the code,  you must register."π        LOCATE 15, 20: PRINTπ        LOCATE 16, 20: PRINT " 2. You will not modify or copy in any way"π        LOCATE 17, 20: PRINT "    the code in this package,  and will read"π        LOCATE 18, 20: PRINT "    Manual.txt once installed. "π        LOCATE 19, 20: PRINTπ        LOCATE 20, 20: PRINT "---------------------------------------------"π        COLOR 15, 1π        LOCATE 21, 20: PRINT "Press `A' to agree,  `D' to disagree.       "π        π        DOπ999 A$ = INKEY$: IF A$ = "" THEN GOTO 999:π        IF UCASE$(A$) = "A" THEN GOTO 989π        IF UCASE$(A$) = "D" THEN SYSTEMπ        LOOPπ989ππEND SUBππSUB packageπ'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXπ'X                                                                          Xπ'X                             File Area                                    Xπ'X                                                                          Xπ'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXπ'----------------------------------------------------------------------------π'"What the HELL is that?" Version 1.0π'Copyright (C) Aaron Finley 1996π'All Rights Reservedπ'----------------------------------------------------------------------------π'[■FS_APP.ANX]π'EGFPFXL(\_M,\<\UcYX4=zå{Gê|ëéBH■π'EGFPFXL(\_M,\<\[Taa4=YffGh|ëéBH■π'EGFPFXL(\_M,\<RXU[e4=YffGh|ëéBH■π'EGFPFXL(\_M,\<[c1:<■π'EGFPFXL(\_M,\<eYVi3<yàzFç{êüAG■π'EGFPFXL(\_M,\<fbZfX4=zå{Gê|ëéBH■π'EGFPFXL(\_M,\<rx|sâä5>ZggHdèAJ?aqrQi}zKQ■π'EGFPFXL(\_M,swçsu{à4=äîà:C■π'EGFPFXL(\_M,\<a]Taa4=YffGh|ëéBH■π'(FRWKY6[bXN,Sw{uäïåêzâ7ZïëÆÅéÉ■π'(Ert~xpoq~+4P7/Qräéé5\Çåàö<NWXV■π'(Cop%Xpoq~~,_séuâêxx■π'DQPQTT'[QK]QQ.rtzä7@5YffGcë@I>ÇÉæPîÆI■π'DQOSW&>4):■π'EQ■π'32#>■π'JH#Qfioqwo/,J.121f[Yc6^gmi;ST■π'QTLRY&Tilrtzr2/;14B65A7{}âì@=I?BDD^■π'JPSYY&)*5*nyq2■π'JH#MSY[Z1;7,p{s4=2547?7la_i■π'!"#$%&'()*+,-./0Wae4â6T8J:ok=jdnIàÉêIO■π'!"#$%&'()*+,-./0àâE96T8fc_@EüîäENCÆQFXQ■π'!"#$%&'()*+,-./0T2P4â■π'!"#$%&'()*+,-./0ZX3êéåH<9W;>=@?tigqDlu{wI]■π'!"#$%&'()*+,-./0■π'!"#$%&'()*+,-./0àâF96T8ìçïNA>J@òÅôUI■π'!"#$%&'()*+,-./0■π'!"#$%&'()*+,-./0_Wkh■π'4■π'!"#$%&'()*+,-./0Wae4w6T8\:ok=jdnIàÉêIO■π'!"#$%&'()*+,-./0àâE96T8fc_@EüîäENCåQFXQ■π'!"#$%&'()*+,-./0■π'!"#$%&'()*+,-./0àâG96T8ìçïOA>J@òÅôUI■π'!"#$%&'()*+,-./0_Wkh■π'5■π'!"#$%&'(■π'!"#$%&'(}w{>1.L0fUTgZ:?îåèM@F■π'!"#$%&'()*+,-./0■π'!"#$%&'()*+,-./08dXjO67Y}~ÇÇ=entpBUTÿFìù¢JÜÿôƪ£úúVúºÜ₧á«]íá░óѼ╕╛■π'!"#$%&'()*+,-./0dW_YXj7[Zm`<æïÅRE■π'!"#$%&'()*+,-./01234567[Zm`<?acB■π'!"#$%&'()*+,-./0123456789:;<=>?@dcopEuUkqnt~UÇxwyåW\⌐úºk]f[êéîg┤«▓vhnfthzst■π'!"#$%&'()*+,-./01234567[Zm`<?agdjtE■π'!"#$%&'()*+,-./0123456789:;<=>?■π'!"#$%&'()*+,-./0123456789:;<=>?cbnoDtTjpms}TwvxàV[¿óªj\eZçüïf│¡▒ugmesgyrs■π'!"#$%&'()*+,-./01234567[Zm`<?kjdjtE■π'!"#$%&'()*+,-./0123456789:;<=>?@dcopEuUutmzzUó£ádV\■π'!"#$%&'()*+,-./01234567[Zm`<?kcB■π'!"#$%&'()*+,-./0123456789:;<=>?@dcopEuUutmzzUó£ádV\■π'!"#$%&'()*+,-./01234567[Zm`<?a`tC■π'!"#$%&'()*+,-./0123456789:;<=>?@dcopEuU~roéTwvxàV[¿óªj\eZçüïf│¡▒ugmesgyrs■π'!"#$%&'()*+,-./01234567[Zm`<?uqiugE■π'!"#$%&'()*+,-./0123456789:;<=>?@dcopEuU{sqUó£ádV\nU}åîêZml■π'!"#$%&'()*+,-./01234567[Zm`<?plB■π'!"#$%&'()*+,-./0123456789:;<=>?@dcopEuUzvmzzUÇxwyåW\⌐úºk]f[êéîg┤«▓vhnfthzst■π'!"#$%&'()*+,-./01234567[Zm`<?pldjtE■π'!"#$%&'()*+,-./0123456789:;<=>?@dcopEuUzvmzzUÇxwyåW\⌐úºk]f[êéîg┤«▓vhnfthzst■π'!"#$%&'()*+,-./01234567[Zm`<?kdrhgE■π'!"#$%&'()*+,-./0123456789:;<=>?■π'!"#$%&'()*+,-./0123456789:;<=>?@dcopEuUun|rqUÇxwyåW\⌐úºk]f[êéîg┤«▓vhnfthzst■π'!"#$%&'()*+,-./012345678■π'!"#$%&'()*+,-./0V`W4h[c]\n■π'!"#$%&'()*+,-./0TS_`5eE{üà|îìFôìæTGPExpoq~OTí¢ƒcU^SÇzä_¼ª¬n`f^l`rkl■π'!"#$%&'(}w{>1.L034M4ëâçK=:X<?@■π'!"#$%&'(NV^Q■π'!"#$%&'()*+,-./0ZX3wéz;8V:=êÉ@?tigqDtTs{■π'!"#$%&'()*+,-./0TS_`5eE{üà|îìFéìàFODôòòìMS■π'!"#$%&'(■π'!"#$%&'(NXO,VT■π'!"#$%&'■π'!"#$%&'()*+,-./0■π'!"#$%&'(0789:;<=>?@ABCDg]lI]kv?hbpgpjxTUVWXYZ[\]^_`abcd■π'89■π'!"#$%&'(XZPZ-0~tâ@téì87^hl;]mndneBdwEI\■π'!"#$%&'(Y\TZa.2E=25D7■π'!"#$%&'(LVZ_R.2E■π'!"#$%&'(XZPZ-0~tâ@téì87^hl;eknttAcvDH[■π'!"#$%&'(RX[aa.2E=2üëé■π'!"#$%&'(RP+zé{/M1D3h][e8bhkqq>BUMBpàêÄÉûÄN■π'!"#$%&'(LVZ_R.2E■π'JH#rzs'E);+`US]0tv|å96T8;<U<lndnADÆêùTêûíLKr|ÇOååâëëVxïY]pv]ÄæëÅûcgzrgjzlàlÉÜ₧úûrvëÅvñ╣╝┬─╩┬é¥üäº╔╦╟▄╘▌î■π'JH#rzs'E)<+`US]0tv|å96T8;<U<lndnADÆêùTêûíLKr|ÇOååâëëVxïY]pv]ÄæëÅûcgzrgj{làl¥áÿ₧Ñrvëüvñ╣╝┬─╩┬éÖÇñ«▓╖¬åè¥■π'JH#rzs'E):+`US]0\[_`58å|ïH|èò@Y@jhCçëÅÖLIgKNONâxvÇSùÖƒ⌐\Yw[^]`y`Äúª¼«┤¼liçknæ│╡▒╞╛╟v■π'!"#$%&'(0789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcd■π'3■π'!"FPTYL(,?■π'QTLRY■π'MQRT■π'■π'99■π'HQWS%=>■π'■π'TWE$koiyz■π'■π'■π'FPG$X[I■π'■π'TWE$kokms},5|ä}:■π'■π'!"#$%&'(Y\TZa.1VZjVX^h7üî:àÉüîååCìôFî₧èûáìíù₧₧Qòóñ«dW`|é~ïï^òqorcëùÿxqk■π'FPG$X[I■π'■π'TWE$T4JPMS],5Q^^?`tüz:@■π'!"#$%&'(Y\TZa.1SYUbb5è8}âÄ}èääAïæDè£êö₧ïƒò££Oôáó¼bU^zÇ|ëë\ôompaçòûvoi■π'FPG$X[I■π'■π'TWE$T4jptk{|-6R__@aué{;D9[klKcwtEK■π'■π'!)Fss4uivo/G-0;2L2üëéQ7:E<V<?pvÿsy¢F`FITKeKN|\ƃƒT■π'!"#$%&'■π'!"#$%&■π'!"#$%&'(RP+oqwü41NQ4787la_i<fd?cppQråôîLIgKN[\QPàzxéUy|éî[^klazaàäÉæf¡▒┴¡»╡┐vÇyïrÿ¼₧¬w½«£■π'!"#$%&'()*+,-.■π'!"#$%&'(LVZ_R.2A■π'!"#$%&'(LVZ_R.2B■π'!"#$%&'(XZPZ-0~tt@téì87^hl;eknttAcvDHW■π'!"#$%&'■π'!"#$%&'(XZPZ-0~t@téì87^hl;eknttAcvDHX■π'!"#$%&'(RX[aa.2B=2üëé■π'!"#$%&'(LVZ_R.2B■π'!"#$%&'(OY],V3/M1C3hd6àìå■π'!"#$%&'(RX[aa.2A=2VccD`å=F;èÆïQLAcfgjyzLUJzZíºƒòU■π'!"#$%&■π'!"#$%&'(RP+[;éêÇv63Q58fFzèï>=rgeoBljEivvWxîÖÆROmQuéécÑ\YÄâüï^åÅòæcº¡▒u¡┴╛■π'■π'!"#$%&'(WOc`■π'■π'!"#$%&'()*+,-./0T^bgZ6:I■π'!"#$%&'(■π'!"#$%&'(NbT`-adR■π'djn2j~{B■π'!"#$%&'(XZPZ-`XWYf7<hji<AêÉëOGK@mgqLxzyLQÿáÖ_WXP^Rd]U|åèYâëîÆÆ_üöbfz■π'!"#$%&'(MY+a[bX\1WbZ=L@■π'!"#$%&'()*+,-./0][aY5_ehnn;?SJ?àÖûòàI■π'!"#$%&'()*+,-./0ZX3]cikjAKG<ra`sfFKë¥ÜÖëMSWLOÇä~QTS_Uyè]bnpf^j`cqîèæòêîÄ£y좪qp|rû£ºzïìâä|▒ªñ«■π'!"#$%&'()*+,-./012345678lipja>WPQNCU■π'!"#$%&'()*+,-./012345678\fjob>BV[BflfouH{srtüRWâàäW\ú½ñjbf[êéîgôòögl│╗┤zrskymxp|ruéw■π'!"#$%&'()*+,-./0V^fY■π'!"#$%&'()*+,-./0V`W4^\■π'!"#$%&'(UYZ\■π'!"#$%&'(Y\TZa.1Uâäéå5à8zèïêåüÇöèææDMiosjz{Lâ_]`QwàåUg`Z■π'!"#$%&'(Y\TZa.1UibM4bèïéêé<ÇìâàAûÆDù¢ÿKá£NúÿÜÑSòѪúí£¢»Ñ¼¼mb■π'FPG$X[I■π'■π'TWE$T4S[■π'!"#$%&'(LYW[_.F<1BM4eh`fm:=JK@■π'!"#$%&'(LVZ_R.2A■π'!"#$%&'(LVZ_R.2B■π'!"#$%&'(XZPZ-0~tt@téì87^hl;eknttAcvDHW■π'!"#$%&'(XZPZ-0~t@téì87^hl;eknttAcvDHX■π'!"#$%&'(RX[aa.2B=2üëé■π'!"#$%&'(LVZ_R.2B■π'!"#$%&'(OY],V3/M1C3hd6àìå■π'!"#$%&'(RX[aa.2A=2VccD`å=F;ÉèÄK@befixyKTIyYáª₧öT■π'■π'!"#$%&'()*+,-./0dW_YXj7[Zm`<lLôÖæçG■π'!"#$%&'()*+,-./012345678\[na=@nNàæåF■π'!"#$%&'()*+,-./012345678\igko>VLAR■π'!"#$%&'()*+,-./012345678ildjq>booPlÆI■π'!"#$%&'()*+,-./012345678\[na=@nNìÉÄF■π'!"#$%&'()*+,-./012345678\igko>RLAR■π'!"#$%&'()*+,-./012345678ildjq>booPlÆIFRHKjM■π'!"#$%&'()*+,-./012345678\[na=@nNéÆôF■π'!"#$%&'()*+,-./012345678\igko>QLAR■π'!"#$%&'()*+,-./012345678ildjq>booPlÆIFRHKTM■π'!"#$%&'()*+,-./U_V3gZb\[m■π'!"#$%&'(WOc`■π'!"#$%&'(LVZ_R.2A■π'!"#$%&'(LYW[_.F<1B■π'!"#$%&'(■π'■π'FPG$X[I■π'■π'TWE$T4TM[QP,5r~s?Çtüz:@■π'!"RR%KYZX\+S\b^0II■π'!"RTJT'lxm9zn{t41Xbf5_ehnn;]p>erfgimqk■π'!"#$%&'(LVZ_R.UbVWY]a[■π'!"#$%&'(RP+p|q=~rx85S7:GH=<qfdnArumszGJlÖÖáÄù¥òúRíòó¢Wí¼Zñ¬│ƒ½⌐ÑbkæÉëûûiá|z}nöóúrä}wÉw¥▒ú»|░│í■π'!"#$%&'(LVZ_R.2A■π'!"#$%&'(LVZ_R.2B■π'!"#$%&'(XZPZ-0^TT@Tbm87^hl;]mndneBdwEIX■π'!"#$%&'(XZPZ-0^T_@Tbm87^hl;eknttAcvDHX■π'!"#$%&'()*+,-./0■π'!"#$%&'()*+,-./0Z`cii6:JE:ëæèX?ÄûÅCaEö£òIUK]gNr|ÇàxTXhqXêèÇè]`ÄäÅpäÆ¥hgÄÿ£k¢óóƒÑÑröºuyëÆy¬¡Ñ½▓âôÄâ╥┌╙■π'!"#$%&'()*+,-./0ad\bi6:IE:ïÇLìüÄçG_EHSJdJÖíÜiOR]TnTWêÄÉïæô^x^alc}cföt½╖¼l■π'!"#$%&'()*+,-./0T^bgZ6:K■π'!"#$%&'()*+,-./0àå74R69{êèö<?>J@àæåRôçöìMJVLONQP\Rà}|~ï\aìÅÄaf¡╡«kodæïòp£₧¥pu╝─╜z{süuçÇxäz}|¢~╙═╤É╫╤╒ê■π'!"#$%&'(■π'!"#$%&'()*+,-./0dZX`a6ïî=■π'!"#$%&'()*+,-./0\[_`58kàëHÅëì@■π'!"#$%&'()*+,-./0T^bgZ6:JNN■π'■π'!"#$%&'()*+,-./0123456■π'■π'FPG$X[I■π'■π'TWE$T4TSLYY,5Q^^?`tüz:@■π'■π'!"#$%&'(Y\TZa.1]\Ubb5è8}âÄ}èääAïæDè£êö₧ïƒò££Oôáó¼bU^äâ|ëë\ôompaçòûvoi■π'FPG$X[I■π'■π'TWE$T4YULYY,5Q^^?`tüz:@■π'QTLRY&)ZVMZZ-wé0u{åuwé||9âë<éöÇîûâùìööGïÿÜñZMVü}tüüTïgehYìÄnga■π'■π'FPG$X[I■π'■π'TWE$T4]QNa+4q}r>sÇy9?■π'■π'!"#$%&'(RP+p|q=~rx85S7:GH=<qfdnArumszGJmÖÄíÜô¥ñQÇöíÜVá½Yú⌐▓₧¬¿ñajÖìè¥g₧zx{lÆáíézt■π'!"#$%&'(XZPZ-0~tt@téì87^hl;eknttAcvDHW■π'!"#$%&'(XZPZ-0~t@téì87^hl;eknttAcvDHX■π'!"#$%&'(RX[aa.2B=2üëé■π'!"#$%&'(LVZ_R.2B■π'!"#$%&'(OY],V3/M1C3hd6àìå■π'!"#$%&'(RX[aa.2A=2VccD`å=F;èÆïQLAcfgjyzLUJzZíºƒòU■π'!"#$%&'(RP+[;éêÇv63Q58fF}ë~>=rgeoBljEivvWsÖPMkOöáòaóûú£\YÄâüï^åÅòæc|■π'■π'!"#$%&'(WOc`■π'!"#$%&'()*+,-./0T^bgZ6:I■π'!"#$%&'(Y\TZa.1TÇuêüzäï8ç{êü=çìûéÄîêRSvèôÅÄáMÆ₧òñRíú⌐VƒºÑ₧[¥½╖_░⌐╗╢¡¿º│h╣╝║╝▓└├╣╢┼s|½ƒ£»y░îèì~ñ▓│ôîåƒå¼└▓╛ï┐┬░■π'9■π'!"#$%&'(LVZ_R.2C■π'!"#$%&'(XZPZ-`XWYf7<hji<AêÉëOGK@mgqLxzyLQÿáÖ_WXP^Rd]U|åèYâëîÆÆ_üöbfw■π'!"#$%&'(■π'!"#$%&'(MY+a[bX\1WbZ=I@■π'!"#$%&'()*+,-./0][aY5_ehnn;?PJ?öÄÆWH■π'!"#$%&'()*+,-./0ad\bi6ïàëN?■π'!"#$%&'(UYZ\■π'FPG$X[I■π'■π'TWE$T4^ZR^P,5r~s?Çtüz:@■π'■π'!"#$%&'(RP+p|q=~rx85S7:GH=<qfdnArumszGJlÖÖáÄù¥òúRíòó¢Wí¼Zñ¬│ƒ½⌐ÑbkæÉëûûiá|z}nöóúrä}wÉw¥▒ú»|░│í■π'!"#$%&'(LVZ_R.2A■π'!"#$%&'(LVZ_R.2B■π'!"#$%&'(XZPZ-0^TT@Tbm87^hl;]mndneBdwEIX■π'!"#$%&'(XZPZ-0^T_@Tbm87^hl;eknttAcvDHX■π'!"#$%&'()*+,-./0Z`cii6:JE:ëæèX?ÄûÅCaEö£òIUK]gNr|ÇàxTXhqXêèÇè]`ÄäÅpäÆ¥hgÄÿ£k¢óóƒÑÑröºuyëÆy¬¡Ñ½▓âôÄâ╥┌╙■π'!"#$%&'()*+,-./0ad\bi6:IE:ïÇLìüÄçG_EHSJdJÖíÜiOR]TnTWêÄ░ïæ│^x^alc}cföt½╖¼l■π'!"#$%&'()*+,-./0T^bgZ6:K■π'!"#$%&'()*+,-./0`bXb5h`_an?DprqDIÉÿæNRGtnxSüÇSXƒºá]^VdXjc[éîÉ_ÅûûôÖÖfê¢im~■π'!"#$%&'()*+,-./■π'!"#$%&'()*+,-./0Ua■π'!"#$%&'()*+,-./0][aY5_ehnn;ÉèÄSD■π'!"#$%&'()*+,-./0ZX3êéåK<9W;>bmeBAvkisFwzrxLPa[PtzàX]hmasZ~êîæä`du}dè₧É£i¥áÄ■π'!"#$%&'()*+,-./0ad\bi6:KE:ÅëìRC■π'!"#$%&'()*+,-./0]abd■π'■π'FPG$X[I■π'■π'[■FS_APP.ANX]π'[■FS_VIEW.BAS]π'EGFPFXL(\_M,\<rx|sâä5>ZggHäèAJ?aqrQi}zKQ■π'■π'EGFPFXL(\_M,swçsu{à4=äîà:C■π'■π'EGFPFXL(\_M,\<a]Taa4=YffGh|ëéBH■π'(FRWKY6[bXN,Sw{uäïåêzâ7ZïëÆÅéÉ■π'(Ert~xpoq~+4P7/Qräéé5\Çåàö<NWXV■π'(Cop%Xpoq~~,_séuâêxx■π'■π'(Vki%uyqpsymy.éyïw3zäê7îüâÄ<ìÉÄçôâÉD£çÜHë`abThOPrûù¥ú¥W½¿ºá\áªá▓┤b╖│e╣╗╖╣j┐┤«┬■π'(56789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~Çü■π'EGFPFXL(\_M,\<\[Taa4=YffGh|ëéBH■π'EGFPFXL(\_M,\<RXU[e4=YffGh|ëéBH■π'EGFPFXL(\_M,\<[c1:<■π'EGFPFXL(\_M,\<eYVi3<YeZFç{êüAG■π'EGFPFXL(\_M,\<fbZfX4=Zf[Gê|ëéBH■π'DQPQTT'[QK]QQ.rtzä7@5YffGâë@I>ÇÉæPîÆI■π'■π'■π'DNV■π'DQOSW&74);@■π'QTLRY&Z\[SYS16G@=2547?■π'MQFEYK'95*<F-^aY_f36Yej^lInuka?fèÄêù₧Ö¢ìûJm₧£ÑóòúT■π'DQOSW&>4):■π'WKH[%VYQW^+>-b^0CG■π'QTLRY■π'QTLRY&)LX]Q_<ah^T2Y}ü{èæîÄÇë=`æÅÿòêûG■π'QTLRY&)Kxzä~vuwä1:V=5Wxèêê;båîïàÜBT]^\I■π'QTLRY&)Iuv+^vuwää2eyê{ëÄ~~=■π'QTLRY■π'DJDMS&)n|il|}<p~ë4■π'■π'[■FS_VIEW.BAS]π'[■MANUAL.TXT]π'EQVJX&Mquo~àÇét}1Tàâîë|è9pLJM■π'Dqs}wonp}*3O6.Pqâüü4[àä~ô;MVWU■π'Bno$Wonp}}+^rütéçww■π'■π'10#[jrjwvo■π'./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxy■π'■π'!Yhphutm)~z,üvt0êüàÇy6å~9^jocqM@AcCuççÜæîJæòÖôó⌐ñªÿíU¬ƒÖ¡Z₧¥½^íÑa½▒º▒╗½¡¡■π'!kq$~u|z)k{|ywrqà{éé5èå8îèèÄæ>àòìÄCèÄÆîH£ƒ¢££áú^QRüúUúª¬₧Z₧¿▓¼¬╣■π'!QSIS&hvm*NX\aT>12]ëêè7}å|ÇÇ=ÆçàAòÿåRÿû¥¥ôÖæáV₧ûQª¢ÖU¿£ƒó¡»í»úú`╖º╡╖«╡╡q■π'!kq$~u|z)z}{tÇp}=23uâz7üìì;ÇîîäNABrÆæƒGëIÉÉúMÜÿ₧ûÑSú¢Vܺ¥ƒ[¥»ú_«ªºº⌐⌐■π'!vr$xk{(r~+ü}</0dwx4ê{zîéëë<}PF@çæòDëï¢ëÆû₧Z■π'■π'!"0$Wkx}r|p-_QQd[V4ïGEI■π'!"0$F&oi{n+pwàu1üà4äè}ï:ÄïëçâMöûäÿèFÜ£ÿ£îôÆ■π'!"0$:6rj)P}qr■π'!"0$IUZ(>8;,|Ç/|råxå■π'■π'20#Gtstiwn~■π'./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxy■π'■π'!"#$%&'(■π'!"#$%&'(i\X,h}qzvuçsâwä}vA■π'■π'!"#$%&'()7+^r{~åvà3uâ6åzâ~É■π'■π'!"#$%&'(iWVPV`/kÇt}yxèvåzçÇyD>ÄÆAéphEüûèôÅÄáî£É¥ûÅZ■π'■π'!"#$%&'()7+Ospävà3u5yååì{äèéÉ?HéPÄRåFmùòÄÉ₧V■π'!"#$%&'()7+[oxtsà2üué{è8å{ö<â?òæBùôEX\]IìôìƒÅÆñûñª`UùÑ▒■π'!"#$%&'()*+ouoüqtåxåê6|É|ïÉ=ÅöÅòâùìööGòè£ûƒ[■π'!"#$%&'(■π'!"#$%&'(iMSPV`/kÇt}yxèvåzçÇyD>?ÅôBâgiFéùïöÉÅíì¥æ₧ùÉ[■π'■π'!"#$%&'()7+Ouo}wvà3ê}{7{ÄîìüïÆ?âÉÉùàÄöîÜIRîZÿ\ÉPwíƒÿÜ¿`■π'■π'!"#$%&'(ia]UaS/kÇt}yxèvåzçÇC■π'■π'!"#$%&'()7+Ospävà3u5zå{ÄçÇèæ■π'!"#$%&'()7+[oxtsà2üué{è8å{ö<â?òæBùôEX\]IìôìƒÅÆñûñª`UVÿª▓■π'!"#$%&'()*+ouoüqtåxåê6|É|ïÉ=ÅÄòòâùìööGòè£ûƒ[■π'■π'!"#$%&'(iML`-i~r{wvêtäxà~wB■π'■π'!"#$%&'()7+bvså0r2év{zî9■π'!"#$%&'()7+O|rt0zà3z~ëæE:;àâ>ÿÅûBåàôöû£IáöæñNúÿûRûúú¬£ª¡¡[½ú■π'!"#$%&'()*+m{.~r{wvêA67îïô;}äêÄOBC■π'■π'!"#$%&'(iWP^TS/kUd\jZPshZncxâçïàÇÉäæèâN■π'■π'!"#$%&'()7+O|~ê0r2Wch6}üà;àïÆÄ@òèêDiuzn|JæòÖôó⌐ñªÿí■π'!"#$%&'()7+`us/~rx4Äàî8ìôïü=çì@èòCÿìïGûèùÉLª¥ñPÿùºT₧ñW¼íƒ[₧»¡╢│ª┤q■π'!"#$%&'()7+Rvztâ1uééï{ëî9Äè<ÉÆÇÄàâòêEèûï₧ùÉÜíí]■π'■π'!"#$%&'(iV^3■π'■π'!"#$%&'()7+bvså0àzx4xààî~êÅÅ=ìà@òèêDê¢ÖÜÄÿƒLÉ¥¥ñÆ¢íÖº■π'!"#$%&'()7+O|z~ézîxx5|åè9}èèôâìëåÉåë■π'■π'!"#$%&'(iel|}zxsrå|ââuàyåxC■π'■π'!"#$%&'()7+Us.êå2çìà{7îü;è~ïä@ÉêCàôFêÿÖûöÅÄóÿƒƒR£óU¬ƒ¥Y£¡½┤▒ñ▓■π'!"#$%&'()*+u{~ää1éàâéåïD9:Åäé>ÇÉæÄîçåÜÉùùJóòÖÜO£áôùbUVǪY⌐¡áó░■π'!"#$%&'()*+r|Ç/äy{å4ëà7ÅêîåH=ùÄòAÅÿùÖFÉû£₧îÿÖNúÿûRªÖÿÑÑ£■π'!"#$%&'()*+|nqzqxw3â{6ïÇ~:äèÉÆÇîìBôûöìÖëûXKLvöO⌐áºS£û¼£Xº⌐»\í¡¡Ñ■π'!"#$%&'()*+Çuwé09BAGÇxC89îÇÅåéäôAâùDh`âæÅûÜìæôí^Æá½]aVºñ₧¢«í]º¡│╡ú»░■π'!"#$%&'()*+uü.}ê@■π'■π'!"#$%&'()7+Z|.pÇü~|wvèÇççì;ÅàçÅ@ÿïùîEÜÅæ£Jíæƒíÿƒƒ^ST¿ÑWíƒZ┤½▓^╢í»╢■π'!"#$%&'()*+Ç|.révsçy5àà}E:;èî>ôÅÉÄûDåÿîHèáîòÖÅæ£û`STëÑW¢¿¿▒í»▓■π'!"#$%&'()*+m{.~r{wvê5èå8zê;}ìÄïëäâùìööSHI₧ôæMó¿áûR[¿¥¢WñÜ¡»■π'!"#$%&'()*+ny}r{1üy4v6åzâ~É=éäôäöîöÖÅûûIôÖLíûöPáö¥Öÿ¬Wñó¡»e]^«ªaú▒■π'!"#$%&'()*+m}~{ytsç}ää7üî:jJ~ÄÅNABuëÆïöèÄ£Ká£NÉöòRôw¥ùáªY\~vֺѼ░úº⌐╖t¿╢┴lr■π'!"#$%&'()*+Ç|.âxv2y}ü{7yì:|èû>dneNCDxz|nwWLM¥íPäåéäU⌐½Ö¡ƒ¿í½▓m■π'■π'30#$Qotq}ku||é0rÇw4g{~üîÄì}æçÄÄ■π'./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxy■π'■π'!"#$%&'(iWVPV`6<1rV\Y_i?E:|èü>rnICêöFòù¥JÉñûíúPÜáS¿¥ƒ¬X¥ƒ¿½]┤ñ▓┤½▓▓s■π'!"#$%&'(Wy+o|rt0zÇ3ê}è8âçü=ïÇÖAäêDè₧¢ÜèìƒææN₧óQƒóÿ₧£á¥¥h■π'■π'!"#$%&'(]rp,sâ{|1êxåêååE:;ôàçéêAàÆùÖÖGLZZWLMæùòö¥SúºVñººƒ┤\¼░úÑ│b¼▓¿▓╝¼«╜à■π'■π'!"#$%&'()*+,></Vå~4Xàäàzê<pôÅÉÉöù■π'!"#$%&'()*+,?</Vååêåz6îêÇî|Çéæ?fsghDMÅòïòƒÅò¢òOæQyê}^■π'!"#$%&'()*+,@</dyw3uwâüìô;Éî>ôêèòCçöèîHáôƒöû£O⌐áºÑTûªºñó¥£░ª¡¡na■π'!"#$%&'()*+,A</Vâwx4ë{zÇçâ~}ë>ÆòæÆÆûÖFO₧ÆïKqZ¢ÉÖ¥[■π'!"#$%&'()*+,B</U>t}ü6îê}{ÅüÉ>ÇéÉùùDôï₧HÖ£ÜÉóæúú_■π'■π'!"#$%&'(]y+r|s0âwz}êèëyìâèèI>?ÉìçäùèFìæòûK¢óóOñÖ¢ªT¢Ñ⌐Ñs■π'!"#$%&'(J}+à|â/}r{4ë~ÇïE:;àïäÄÆÄBÉëE£ÉëIÅXÖÄù¢Pƪ■π'!"#$%&'(JPj^r~{ëQ|êéäDzçå■π'■π'!"#$%&'(6789:;<=>?@ABCDEFGHIJKLMpöçëùFmù¢ùXYZ[\]^_`abcdefghijklmnopqrs■π'■π'!"#$%&'(WkxqG.nopqrstuvwxyz{|}~ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜ¢£¥₧ƒáíóúñÑghijklmnopqrstuvwxyz{■π'!"#$%&'(JqpF-mno■π'!"#$%&'(X|tsv|/w2wâîäâçz~U<|}~Ç\RSäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜ¢£¥₧ƒáíóúñÑ■π'!"#$%&'(hijklmnopqrstuvwxyz{|}~ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜ¢£¥₧ƒáíóúñÑ■π'■π'!"#$%&'(]â{q-}u0üsîüzäïR9u;y=aÇôëBCEâGuÿÿÉÑM}íöûñ■π'!"#$%&'()*89-[p{v2v|zyé8êî;ëîîäÖAæòêèÿGù₧₧Ká£NÅqÆñóóU|áªÑƒ┤c]ñ«▓afttsfg■π'■π'!"#$%&'(Jno~rüéJ1qrstuvwxyz{|}~ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜ¢£¥₧ƒáíóúñѪ■π'!"#$%&'(Jno~rüé0CL3stuvwxyz{|}~ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜ¢£¥₧ƒáíóúñѪ■π'!"#$%&'(LsàG.nopqrstuvwxyz{|}~ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜ¢£¥₧ƒáíóúñѪ■π'!"#$%&'(\~lÇrH/o?qA4äê7wxyz{|}~ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜ¢£¥₧ƒáíóúñѪ■π'!"#$%&'(LyÇzüÇêJ1qrstuvwxyz{|}~ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜ¢£¥₧ƒáíóúñѪ■π'!"#$%&'(YrzzrH/8pqr=5uvwFyz{|>ÄÆAüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜ¢£¥₧ƒáíóúñѪ■π'■π'!"#$%&'(6789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrs■π'■π'!"#$%&'(Y,v|/ÇrïÇyâè7yç~;ÉàçÆ@ÉöçëùFìù¢ùKò¢NÉ₧Qùí¬Üóª¿₧Z£¬í^áñÑ┤¿╖╕f╗╖â■π'■π'!"#$%&'(Jyuà.]uàëéåÇ■π'!"#$%&'(@?C,YoåâÇÇ3Uï{E■π'!"#$%&'(Qküqé~ç>3dvD7IRJSO■π'■π'!"#$%&'■π'■π'!"#$%&'(■π'■π'■π'!"#$%&'()*+,-./0■π'[■EMANUAL.TXT]πEND SUBπCharlie Quante                 AN ANIMATED LIFE SIMULATION    charlie@charlie.seanet.com     12-08-96 (00:00)       QB, PDS                123  8138     ALIFE.BAS   DEFINT A-Z:DIM SHARED K,S,B&,Z&:V1 'Created by PostIt! 7.2πSUB V1:OPEN "O",1,"ANILIFE.ZIP",4^6:Z&=5834:?STRING$(50,177);πU"%up()%9%%%I-%k3/WFl0)ZvV4.%%:S%%%1%%%%fs%nRqn%kjSgRfx&)<xBT]Z'xπU"2llbxOBeETEPcj>sK9Vp0$\bTsds^PBRlG&LhK6D7Z0/Z$J[DJJj=rxql[%IjRYπU"AS2x)vboI(-QE-nK%ciOPUx3Gp=/1W*a$oJN<#GoM0$krF:Vt:txKUGX*BwH0NaπU"uk]4+&&by;B.<VW])+Xq+*i7kJ5BAe7e_#sZCO^iuqj8uv%_Ew\rw)G]\9O:urOπU"OOXuwowFe:rFmp(N=i2zm6Cf?75BD9tJK[9O9Lgmu)qO%KKynaaLvdNw.VkMrATπU"YVZ$Zaf$?7(IHOTolQL<pSUIf/^_n_SR+0^DFjK-rLjPPMlzm5=(<tpCRQ-oA%TπU"\aba/#8pI^+,qy7Ou8p[EiDevd>kDWTjf;5;nEUSvC^JrMVub2D,NZ)ThmCXw2LπU"&b<mA&p^J$9pu<f8mRx?hIn7#6UHml\i<0tNN48rgk<ZIdSjfcV<\(M.,F=r-)YπU"[Na.>-Wd\#efg<z^>=%]GajN2]k1-(Ds+U_Re%#gXS0\Gs+wr_PdX>cBu#iK(n/πU"W/kY+VoV[H=..J_>KS$LeJv\yZF[2TS;>)u_JEA/>Se.wfqE:ommhDkb:6>X_<dπU"IbO[67o/6JeiQ__L>^U'gJHkZ=fZ<h0#h^AA-2_lsc-Sml?TH5jPs&&'(U0jj9wπU"Vr<&_KS22ssAh1^-;ij88Q[uT1baxe[#CY40gKCU-OA58Y8nAt(Af)z::]a;Qh:πU"_A43/&Wu8(Tc7#HKEWX('1$4FD^Sj/E*jEPkHta&)DQoHSUBFK+Z=f6[mj9A6$9πU"4&id8:s*.otO+-Mz4\YboPm+tL#\/QesqTADUkt2<W0J(D9jE^?.WJ54+kP$i]kπU"^qn:k9>T&3Q:>dg(LK13tW\.5m$R*R4rhJtDjE]D,<vcdTTVhND/McvK>i8%pW-πU"Ptbbd%ZuXt,qmMA?rBF0(DpjOTjt,(d[[H?\ag=d6nbUu.>J'nU/6\[3'6[s&znπU"&C/Qq:STOQAS[Fg41(;(KzKes1>pmqUUL3/QQZZ?.MiVNgn9GMji6LqKvP\A2;tπU"H-HoA\\7O-RSy0aO\Kfshp?QH?1&bN35DsqHLgmYZJ5,W<6V&a#<6-?ci'a;frRπU"EHF]jiB;R4n(#oly0JI:8\&Zdh9^<6sXhLb.8R;v*etF(8mXC:DE'aNXn?'Xu7FπU"VfGA>JBiJCBX\9TB6^YT2de)HqaD?Qdo$du$=9lbR(vtwowM7a[Iak.n=(%SkB]πU"<J\&+pAbPgKbB=l?b#4&Ukgt0-0x.3=aDw.YN$7i?mt:,#MmcG&lDm16+s322HkπU"Tv508:JfLyuMG?I^O4,20dnA0pvFv0,ncWc2J:bG7m+&(qYS6X4/o)i\B<k#jN/πU")B*A4W,%pi*E^ndxqa,g,_1/nS>?aCQPy9a2HFEBA%Q^sOdP\&fG*>4Lr1.]*1<πU"DV8qATqvhQ)S$:jn<Qgat&Rj9cCw+hnjTmrI1qmYJ%6(W>;eo;q7etAL?EJfV:TπU"2IkMnSr-7YeaM(#8(IdS9\\:.A6abM1qQkh)n^gRplfZoxWhH5V\]<0sQ-e6[)PπU"t]>vNu>)l/lob<6AY*#'>onrEg\slge\Vy:j&4l:2LN:5HfrF*?^ZY5qVQC\$fgπU"heO>pZTL-26r?6TT$c/rvR?IRdD2EW4('K)h;r4B<B,IdD1KS4pn&3WbL]q3<)OπU"SG=gf;QXL^U_oD_f5-]$Z8NRD#j]f?Ev\:.IWT]WB_P[Vp+kwexwxxbeUvSo]>4πU"-eH/25N_h;l'NGgY*ih#a46j7*)pPwd/+XFAYya)5M92CCZ&;2=dc,GpTgBa\rMπU"IKx5SN_L,-/9>(aTv)%&3'Vdxni+0.Ae1IwXA$?)Ml3>GODMJ[D?%Gim$6=:d.9πU"0]_u]WUw5VI.?uTlhivp4aFc-+<DqP7dK1_I\c6dOMXJi<jfBXGG\l9ARXES%;VπU"If3YhUoSmw;(KM:H,)t4WHY>dPi(k^RPDRwuSqycBqHE3.VKGlWWkRC[)&aunCiπU"l(j^GY)UE=YC'i(Tiyp#'6Tc2YJiU$ESgv85p#=SQuB((;<eq8blBPG5Y+$;k6UπU"EL6=95DJUs48carH+:gnx-hHv0-;1=6'?f]87>KJ=RE/6pcMasmE+iJ'T#SxWnRπU"88uRgvWP%[3CCc>Qw5a?B9,N-i\?f\_+mH(rBhkrG,E4ePEN=FF.3^vv4ZSIlT=πU"XhRVrZXfX])oU8>cWTU)TG32>N;v=BA^kqU&&3cV];fXwe7U4B%oosBuN4.h2^%πU"pzQ'V.Z1j.f=B8up5<G2,5jt[b3mnN62l[=#,OUSnXe35;)T?jC6>PO+rJhRdcaπU"*5UW;asSKgjL)]-^DwWYs1[[/oE$IKxJ17O\%V/k%MG+aH;Z_jw>koE.5:T/JpiπU"Oayn$-*d?$Mc/q4&p$J)JV)'RMk5)d-KH2X-PdW+aM2l6I2T<>ljrW(/MZ^iSDhπU"?\6&,-4=c^LG-4-5]<(j/7wM;(Wbe>0#kI2F-pOOi4G)N8bGo;Z4(R\F3+Z\s/oπU")h#k;l2&/3/PeXL*E]*qIHqrv'BXX7,hBc^+_:Qnmy5?a_Li%<nlk+J2hW5=M[3πU"oH+#d54cAXJl%UKNKKiMq+V9hKK\Y>a^Kan;+faO^+e?B<)<J#KQbm;%.JqNeagπU"'&x=BK)g&U[T?yg&:kU\r*x1d]R:tgqZqx6%<6>2#SzqF/o&L(c,-B-pfI?/X^RπU"z,maHJe&j)ddaVv&l$9h%YBZU;_U?3#<R:vmad9T3MbA(Knw\Y1(&f\q<f[#tj=πU"C8:8]v2WhRTnY8ar%(j-O.d2&'SOA7g,b>smX^t9OeBCgT&m\QOjTiaB[3GKXcTπU"NZwB62%62<inlet-E3NcXAN?5oJ84_lXmiV'3K[KZ1k\ZbX(f$JHvponiD3;IYvπU";ed0x7Zhm#2[MnOUDHQENt.GW&Ed\UtsE/(bfpB*gb&3tcqa]9q?.1-il?Ze::pπU"6>ZHQHV-vmyjxvX4Ysuo^4^e,82H$5f5GY(0=3)73o[lkxuTt((xsJP16jC;o#6πU"R7)%1TGuEk't4+NXHs.nVtdV9'*pOEF'89#3SIC2_:/QiVU1sVq4BnZE:U]=QX%πU"&%59'7w<f&)#<d^>'Fn+L1_51B%7k2A16L16t4m##HP^-'6bK:7vndJOeCY?jHPπU".^?+(8-L1?FR%f:E4DRJcqD,X7eR(C7xv&N*P7-MHxm8kj(N2?UD/kp6Yj:f_N/πU"gQNx7yB#UxAn>RbfBlq<+luxZCB^E#tP_$gvsGo]OHYcEFb?1f?2E5(a=P3h],CπU"oG#Z[.,DU]O=uc)ojVnCqYM28DO$6j;<]Zm4,F?R-YWj;fXPVoJB&X3cTuB+u[RπU"S8liEe&v=)rjCh]8PbA(=#nS(^,k']CSJ=%(?EX6V^k93ojl)oBhxp=;t[>YeZ9πU"_7=NQR80r$gNR_W.s+HfiYP1Ur;cXcEmyH*iYd[pg:jL+1$5+#<[u<BI&^M(&0kπU"b\ja(hUl-$J9)'Y<jZ4AV$wnw1zY];9mDx\FFg$w#^]=AH6MdT,-bA0V;dtZ-2,πU")J+H5x/0UeF027*7Nt%_f;bA^'V03b-Kso,K/2EBFL-b;H+0o]#;B?^J,A$0DEEπU"uFk$A&jm1N\BWP$d%j^2yQh$(-UJ:c*+O:AhrWnEl(vaSx]b,8XU/MfF4bf:B7KπU"XO.L?COVc-H+Z_W7R\<K-B0;9R&*]h6?6eAOPY(wlEn2glrZ#ig:AXqd.wJ+;lGπU";d]-;YqiA$RlL8Tt1Kgjd.]ierHUUJQ=7GIfK'[4HH2Dqcp>)w%j/nQ].RD,;:NπU"+NZl4L7;,v%U'[6FPnhe1R6c0f\:PPF,]RgVz3>O-j()9Iry6d$>*e6p'rd#mWkπU"xZXe4v<bofsUVNP-zG^-,xe<&S*F7W_2h<JTgKKP;p)m<Sw79h&8e#</4qaB'riπU";<cZo*DRtoJ1hD?BEAQ)ZrVhN:t9Q_&nNVD+IT=oG/iZD2bDEG(m'+-R:=C4)SVπU"W5Amk.SedUli]-oK2x5PJPIdz?6]/VOpSG6=obWS7-]^=xW]xKBYO(qYVh)x$5VπU",Vp)$UX];<m:wLk:gV+6R;).W80iazla>qBGR4Q61EnMOC=/QQrsF*in<(]vuXXπU"+?MN7%8NAuG*,$Z#4?mEd\?cA%14s]>yq.Plq.Frl.8fXRn*8b_,MLXZDh-QcXbπU"S8ZLh^FY%:h;>fXRS'8RhN)L?y\6:<K'MU.>#Kxa^6ZWNB&j]?J+B[(:uX_[4PLπU"zm57%zf7p>Zr5eLQ1:Apr1NKc%aWG%%6/^+DZXg<Oqbia\jQWk4+mjjt5;),#u$πU"7k2F9Xq>N7E&nSZ*rs=OM5jP&<06CL)m[=UXh\9Nr;KAKU9X]24bj-cD?YR-\YvπU"HTb*\,Nxqp9\=$G>VFA%F=d:kWJ1)yugb:W-SK1XQ\b)h5$W5(:mb2,iP8V>/)FπU"3Y5FEC?\\%Ly[t[RjxNQtK.S1X4rcdrOZpg,>1Mn%%VqB2YqJM]wY+(=lE&a?g&πU":(otSuQ%SLnso?_,XJTnIkQj\)wRQiEq%aMhXps4j2^I%3*D;^Q;O6KKKq5fnK*πU"05Cy3:d=FGa6m4FD-NO$;z&V2B^9(l&HFIdccuk>RLxBXK9;-Ah6':/dfwVZ)\\πU"ut8eW9U%M0z1Pfv^eZJcC/&rU/U&+>6=u^HL$Uv+_/&QQpgP*'C1;iy/IM$Bd9IπU"N0sgOOgZ$RC^QH0Z7^]qGCqXkCF+\O^q?gO\n'#j3.MNlg>LW^2?$FBkrpj>b0=πU".WCz)2:71$=LED56ffu<(Bw-uKw;qkl;[Li2=lQcJdMJ1XG)2=BLTq%S&=x/E-&πU"u#bm1R6lpn:</,<izh3's,W7OgliFFaZ7oQ)GGg2g4Ij&]\MpZstE,30HGtk($=πU"65<\oG*gg.lky+VNMROi406]5wSdyKfRyb1oybRGyLoyfLRy,(oyXl-^P,a+jxdπU"u%p()9%%%%-I%/wUCFLo+-Ht%%%%T(%%%.%%%%ywj%jVSnRhsf_9*o=e:5U8r.sπU"\T=#$^u2M84JT=,?goK4YQQMtT)tp^Cf%f%QT,fm*Sd-U[Ci<)d<spf]q#.2?L'πU"U0NqF?_D)XW,hV^n/HgK'^x.dl.iZPf]sZ0H^>;nl0cD(rKLpUMbnKWPa2c.I49πU",/5Tq;B,BZ(taES_:9qu$/-eb#YlQJkmNvhHe*;VBlToU:i>#1x-6Rcc]F/nIVQπU"W1AX720oVaAGOPP^K5,3<:t_>BF;PD?KH:_o)1RkSdxeR>C:O^CuM^Pk:lrO5,*πU"1ipBYTVifZti9%-2JM*%vi>5-2T_Zhwt2f-ZtC]8kGNvRL%%up(%)9%%%%-%p)wπU"UFm4p?R9%&%%T%(%%.%%%%y%wjjW%Snhs*f_VpB<u9TH8Py.(+8),LRWDC)a=*NπU"\'\l0LQQRZ?YI:F+p9,S%/33B\T__37-S;8-=BD6)?fq?]IwtTjEN.YNYTbBZ7tπU";Ln^$1fE<)uvHG1gMHOUT-_$yx5jNNuq5GcKY:P#^qZr'et(H&[CJBOJ*i>kH)7πU">kfEFzhIj'iHy[Dig,lI,^kz2LCovO<[QyEgXcm)ht.0Yn)^7KU$;oA+pVhkGbXπU"9ZWb#cUu&0=*3Sv4.?*<1ut>I.n<IGnXq<t/ua;CE_g0>3)faC[m4NdI_JdabpFπU";L;W=XM0HtS6ZTRn)J4B[z6#TgC2MV-(zl9c:*s2(%.E1Ar=Vqw]wZh8lN?v&s'πU"%up()%9%%%I-%jw/UF4f%l.6&%%%T(%%%.%%%%yw%jjXS[nhsf&_Vp(df9S8<FlπU"0N'=pL&LVex;KL)A%Su74:%)*p0cfK),MQT'(As9G%ow&:k>YMw+afeiK:JT$_eπU"f)\w#'0,5TX1tErW2lt4&MRO^zuMls8D8u]3=Sqte1+Y8J0pjP%#L6rgXHR9%/_πU"gIADwyCLacVEYC(BSer$g7lM.s#Uh\jJrr<>:'f>Aal1(*&NJ/P4=(m<FlF4X'/πU"CUDeIdaHZXYoY3Y,:a:f2[ND>V)Ye8KU<6U45N??APVP[6FDtem/Qe?2](Lj4&oπU"TDKmd?PHaC(fj+K$fW.f[$lOHS=,4nG_W9M[:kNO>6Ks/f%sZ&t4KS#uF8BF4=HπU"La?A7md'w;c&%up()%9%%%R-%Vw\UF,S)bY<&%%%T(%%%.%%%%yw%jjYS[nhsf,πU"_6o(df9T8?B?EEi[uZ:e\6;%%)#*0_bCNfB/ym8+649+E5T4/J0>WtITEsBI*0<πU"K%+fp.sNL=nrG=ih#.Qa?QoW^lp$B1,/jF;+Lzy3A?uMKT\-x<8n#h6E3P;>ci,πU"v]MXBBdhMI.Lf?]Nl%Fq$mz8/wfDYo),]\Hq-W:FGNX\zL)HmgUNxRtuSm,1m/$πU"9J=$5Gm7vaIWkhesu86#\i6Ps?%L2ok<E1ZhQi^L)S\vo_3ZY=T#U-5bxe<;dQsπU"su_au7*t_*l:K4(+&q?4a,L*f2Dagx=SWe1[mT3nt)_Wd^ae04j=)&mPUPX*8qiπU"6.\NZ(>Ob\;rs_q:bUZkk<0kZRxd>'b(up%()9%%%%-%1>xUF^sQ=6%7&%%%T(%πU"%%.%%%%ywjj%ZSnh4sf_V+p<u9bT8I>J&ia=r.R?*)b:,0_x*l0LQQQr/R_4N'sπU"/3s.sBT_Ks,S=*7pdiV?d[%#foa8pCQx9f:(Vhtm5Up:SFnaVT=MpE<)rMJBp=GπU"P%Sd2KHohkqI%3jW$h8r3)D>tRa;X+0F-Q$_HHOS0n#P5G,h6[QVsy/=3Z:JkP,πU"SNDVJU&qnSsHX1c2a*(F1Rqay^I>a7EnB?XwzW<&^lI*Kk7N=guI5I,ar=8L/>kπU"L.k&+oT4xpGjR'ck+Q>\g2W6'+2<49kR-?k[QVBggE[G/0m^EaT]&<mLp'E(vP^πU">e_d%2#2D^u;Cy./:ryBVnxx&nP'89*F$j^hW3ns.8NpXu%p&'9%%9%%#%-%kD3πU"WFl10ZvV#4%%:%S%%1%%%%%%%%%&%%E%%%%%%%%%fsn%Rqnk%jSgf%xup&%'9%9πU"%%%%-I%/wUCFLo+-Ht%%%%T(%%%.%%%%%%%%%%%E#%%%*%4%%y%wjjV%Snhs%upπU"&'%9%9%%%%-%1pwUFRmp?R%9&%%%T(%%%.%%%%%%%%%%%E%.%%L5%%%yw%jjWS%πU"nhsu%p&'9%%9%%#%-%jDwUF4%fl.6%&%%T%(%%.%%%%%%%%%%%%E%%+%16%%%ywπU"j%jXSn%hsup%&'9%%9%%%R-%Vw\UF,S)bY<&%%%T(%%%.%%%%%%%%%%%%E%%%'iπU"7%%%ywjj%YSnh%sup&%'9%9%%%%-I%>xU.FsQ='67&%%%T(%%%.%%%%%%%%%%%EπU"%%%%S%9%%y%wjjZ%Snhs%up*+%%%%%%+%+%%r&%%&6:%%%%%πEND SUBπCLOSE:IF S=146AND B&=Z&THEN?" :) Ok!"ELSE?" :( Bad!πSUB U(A$):FOR A=1TO LEN(A$):C=ASC(MID$(A$,A))-37:IF C<0THEN C=91+C*32πIF K<4THEN K=C+243ELSE?#1,CHR$(C+(K MOD 3)*86);:K=K\3:B&=B&+1πS=(S+C)AND 255:NEXT:LOCATE,1:?STRING$(B&*50\Z&,219);:END SUBπTika Carr                      COMMAND$ PARSER                FidoNet QUIK_BAS Echo          11-01-96 (12:31)       QB, PDS                120  4847     CMDPARSE.BAS'> Does anyone have an example of how to call SWITCHES from within QB?ππ'If you mean how to parse the COMMAND$, then here's a routine I addedπ'to my own QuickLibrary that may be of help:ππDECLARE SUB GetArg ()πDECLARE FUNCTION ExePath$ ()π'$INCLUDE: 'qb.bi'ππDIM SHARED arg$(0 TO 85)ππ'GETARG.BAS: COMMAND$ Parserπ'-----------------------------------------------------------------------π'Revision History:π'π'  1.0     10/28/96          Created                                tcπ'-----------------------------------------------------------------------π'Description/Instructions:π'π'Parses the COMMAND$ (which holds any parameters passed to the programπ'from the command line). Returns the full path and filename of theπ'program currently running in the global variable arg$(0). arg$(1) toπ'arg$(85) holds each the command line parameters passed. Simply look forπ'one of the arrays to be blank (ie. arg$(x)="") for the end of the list.π'if arg$(1)="" then there were no parameters passed to the program (hereπ'you would have it print a usage or help screen).π'-----------------------------------------------------------------------π'**** TEST Program ****π'Set COMMAND$ for something like: test /sw1 /er /x -s Macroπ'Then run the program below. After that, try passing no paramteres byπ'setting COMMAND$ to "" or nothing. This is done in the IDE from the RUNπ'menu, Modify COMMAND$ option.π'πCLSπGetArgπPRINT "The program running is: "; arg$(0)π'Note that the above line may give the full path and file name to theπ'QuickBasic 4.5 IDE program if you don't compile this. But when put inπ'A library and it is compiled, it will show the correct executable andπ'path.ππIF arg$(1) = "" THENπ    PRINT "You didn't pass any parameters"πELSEπ    i = 1π    DO UNTIL arg$(i) = ""π        PRINT "Parameter #"; i; " is: "; arg$(i)π        i = i + 1π    LOOPπEND IFπPRINT i - 1; " parameters were found, excluding the name of the program."π'-----------------------------------------------------------------------πDEFINT A-ZπSUB GetArgπarg$(0) = ExePath$πIF COMMAND$ = "" THEN EXIT SUBπi = 1: j = 1πDO UNTIL i >= LEN(COMMAND$)π    WHILE MID$(COMMAND$, i, 1) <> " " AND MID$(COMMAND$, i, 1) <> ""π        arg$(j) = arg$(j) + MID$(COMMAND$, i, 1)π        i = i + 1π    WENDπ    i = i + 1: j = j + 1πLOOPπEND SUBπ'-----------------------------------------------------------------------πDECLARE FUNCTION ExePath$ ()πDEFINT A-Zπ'$INCLUDE: 'qb.bi'ππ'EXEPATH$.BAS: Gets the path and filename of the executable running.π'              by Joe Negron. Function name changed by Tika Carr.π'-----------------------------------------------------------------------π'Function Description:π'π'"Uses DOS ISR 21H, Function 51H (Get PSP Address) to return theπ'name of the currently executing program.  Note that this FUNCTIONπ'requires DOS 3.0 or >."π'-----------------------------------------------------------------------π'**** TEST Program ****π'E$ = ExePath$π'PRINT E$π'-----------------------------------------------------------------------πFUNCTION ExePath$ STATICπ   DIM Regs AS RegType                       'Allocate space for TYPEπ                                             '  RegTypeπ   Regs.ax = &H5100                          'DOS function 51hπ   Interrupt &H21, Regs, Regs                '  Get PSP Addressππ   DEF SEG = Regs.bx                         'Regs.bx returns PSP sgmnt.π   EnvSeg% = PEEK(&H2C) + PEEK(&H2D) * 256   'Get environment addressπ   DEF SEG = EnvSeg%                         'Set environment addressππ   DOπ       Byte% = PEEK(Offset%)                  'Take a byteππ       IF Byte% = 0 THEN                      'Items are ASCIIZπ           Count% = Count% + 1                 '  terminatedππ           IF Count% AND EXEFlag% THEN         'EXE also ASCIIZ terminatedπ           EXIT DO                          'Exit at the endπ           ELSEIF Count% = 2 THEN              'Last entry in env. isπ           EXEFlag% = -1                    '  terminated with twoπ           Offset% = Offset% + 2            '  NULs.  Two bytes aheadπ       END IF                              '  is the EXE file name.π       ELSE                                   'If Byte% <> 0, resetπ           Count% = 0                          '  zero counterππ           IF EXEFlag% THEN                    'If EXE name found,π                Temp$ = Temp$ + CHR$(Byte%)      '  build stringπ           END IFπ        END IFππ        Offset% = Offset% + 1                  'To grab next byte...π    LOOP                                      'Do it againππ   DEF SEG                                   'Reset default segmentπ   ExePath$ = Temp$                      'Return valueπ   Temp$ = ""                                'Clean upπEND FUNCTIONπChristy Gemmell                PROGRAM ERRORLEVELS            FidoNet QUIK_BAS Echo          06-16-96 (00:00)       QB, PDS                65   2373     ERRLEVEL.BAS' ========================================================================ππ 'How about exiting your program with an ErrorLevel to give to DOS.π 'Useful for use in batch files using "IF ERRORLEVEL n GOTO label"ππ 'WARNING: Do not use this whilst in the QuickBASIC environment, asπ 'all hell will break loose. You will loose your program and maybeπ 'even lose other data too - You have been warned !!!πππ 'Here is the Declare...put it in your main module:π    DECLARE SUB ExitWithErrLvl ALIAS "_exit" (BYVAL errorlevel%)ππ 'Now some sample code to show how to use it:π 'This example will exit setting ErrorLevel to 3.ππ   VarE% = 3π   PRINT "Exiting with errorlevel";VarE%π   ExitWithErrLvl VarE%ππ' -----------------------------------------------------------------------ππ 'How about Shelling out to, and running, another program and thenπ 'obtaining the ErrorLevel returned from that SHELL'd program?ππ 'NEWSHELL.FUN  an alternative to the shell command which returns an 'π 'ERRORLEVEL code. 'π   'Author:     Dave Navarroπ   'For:        PowerBASICπ   'Date:       16/6/1995ππ 'Adapted for QuickBASIC by Christy Gemmellππ 'You must $INCLUDE: 'QB.BI' at the top of your main program andπ 'LINK the executable with QB.LIB (or load QB.QLB into the IDE).πππ'$INCLUDE: 'QB.BI'ππDECLARE FUNCTION MyShell% (Program$, Parameters$)ππ' Enter the *full* Program Name here (eg. XCOPY.EXE)πProgram$ = "XCOPY.EXE"ππ' Enter any parameters (command line switches) hereπParameters$ = "*.* A:"πππPRINT MyShell%(Program$, Parameters$)ππFUNCTION MyShell% (Program$, Parameters$)π  DIM Regs AS RegType                 ' For use with CALL INTERRUPTπ  Path$ = ENVIRON$("PATH")            ' Save PATHπ  Comspec$ = ENVIRON$("COMSPEC")      ' Save COMSPECπ  ENVIRON "PATH="                     ' Temporarily remove the pathπ  ENVIRON "COMSPEC=" + Program$       ' Set COMSPEC to our programπ  SHELL Parameters$                   ' Execute the programπ  ENVIRON "COMSPEC=" + Comspec$       ' Restore the comspecπ  ENVIRON "PATH=" + Path$             ' Restore the pathπ  Regs.ax = &H4D00                    ' DOS service 77π  INTERRUPT &H21, Regs, Regs          '  - get ERRORLEVEL codeπ  MyShell% = Regs.ax AND &HFF         ' Return exit codeπEND FUNCTIONππ' ------------------------------------------------------------------------πBryan J. Kyle                  BATCH UTILITIES                hakyle@OctoNet.com             11-15-96 (21:48)       PB                     154 10158    BUTIL.BAS   ' Load/run this code under PowerBASIC to extract BUTIL.ZIPπDEFINT A-Z:SHARED K,S,B&,Z&:V1 'Created by PostIt! 7.2πSUB V1:OPEN "O",1,"BUTIL.ZIP",4^6:Z&=7311:?STRING$(50,177);πU"%up()%9%%%I-%;-8*Fvh<ch;%.%%J&%%%.%%%%xf&%jwS#gfxdk_:Y;[U5ehF(lπU"(JF?C;)'fF;0%GOm_*gUr8an\fH\I;a.Qtnjc?CS<C\ee3h[rChU?WM/v7<K(?8πU"E-.jLe7t2%[yGa>=Pt?/pp8pZCqEh;i5-7RGlav&?^e^_T4ec[e(:]FdREK2'>8πU"1r,=rb4<(MV5D^z0MJ#wz[(g=te]c+l'qkOLRZxOtO*n8-duJYAT\.&09/7HrqsπU"=#pf[\(w4zr>-Lf*JsGbjoVsTr[lL$<EcmIv6v%%up(%)9%%[%-%e)u*FT-rj]wπU"%&%%/%*%%,%%%%w%zsSgIfxtb:v:;U=5#X(]r3ljS0(V)M&*d<?INd1e5nWjV0^πU";S%2[Di%ddp$faw<UEMJMSqNN24lx^AB;tU-0d6J+_Ahf=C5pXvi&8K1)iI[mW3πU"&J?=^f\L#q?.u[&88TcCc&Eee.P'']XeR0lh\rqZi+er-DiMa2bvsCLi'mkbAgsπU"4]GNK+2CKMX_E_n]EY\>H2cp&>;HdKYmdyoH2S)'JZa;/2.t*?9>&TGZ#ae-5)YπU"Q79bbc(%&oi/el&&lHoKmQeWOzF5ie'kOa.svnck$x]u5353MVaip'].v^q;+,*πU"dRS<,E0&JF00I7Qn&PmP#o^um%.F296E/zW+X6R=UlGB5-18m3LY.7C?wGeNMf)πU"2=t=oO$Zx^vgg7%>OthQaMHw%NR,sn&I8-JnO0<h4G#pzO'+-<]U=V<P3'Udg59πU"MHx+%up()%9%%%R-%Njn+Fl[.PQ,&.%%<*%%%-%%%%wj%sgSgIfxtb3::RUX9?hπU"Q-x9s4*b0($Z-&Seq</T$(;58nsH%#:-U&RmixM'-phbR%*'J,btKr^DWt-+3aNπU"\52lYT%C,e*e-J+=\;4P\S/8?e&FsToh4J1-lAm?aMjnsae_2?x)asW4p:&v_S3πU"Gf6zKfodFXi4a>?EY8f[lx/dWu#N)hLpIALC/p0pZ(YS?X2CMwEE[odl/RwcGnIπU"QfYY\;692#uq/vz^w.H.smM>zTFBi-CW:<s/*6>wr6)^iyPCm&ea-oHMEi$AgH#πU"qUMZJLveB<Tqj?]dhe5Yxf]IQ2rx;Mz(6*a0=q2p5b/Vf*0PPs>D)/1xms7cI]QπU"jHTa(ldmmY)]G\'i>\Ah'+8?vHpglQ+(AeV*;]DDiEUFaqEWv_trYxH;nno3#F8πU"LxW,Ql\MIUpp(YY3KY7zWDE2vQse0aP=,Hii)]flb:T-3r'u%p()9%%%%-I%6B1πU"[FQ98-FA%%(%K'%%%,%%%%wig%Sgfxhda.D\QU9?oh*8<DRCvo5o_z;AC6_8J/xπU"UL)OW*g#Gm)Mitu$.?wi_+VRllJKG^J')ct>lt/;J.:YZO*$:n.P6N.kxG%9%/8πU"#vN<kP1;=$Z+\&pJR?9ut(u#HnY(dgDyQfjP*K$<<$n<pHH#w(z?Xp$G2PFQ_x7πU"n\)^7pakEK6HnuL-,#jpK#yWrza]ljL5Hii?Z7?T:ONDFa[WqAD;bgAeVQc)82NπU"j0*4#>UU\,HQga4IiPfq[uu?'ao:%up()%9%%%I-%/-&*FtC7m=R%.%%d'%%%+%πU"%%%rk%SgfxVdaFYB;U9TrpP590%3D;7/R-sV<zYqG7;99=wSm&#/k5NO;gKJ%xBπU"AX=sJWzYatVBS>s+_]2Q64m-MB^%Gz18+<\VJ(jh.*L,<Gzq5v:0>JfZL&k$Db?πU"lx=TODTKza/JAmE%RtIfctJkkPx=:BFQX^S>ZtI=vtIOUUGQ24[\<=ObieZpBh=πU"C5kGeX7BZ&,nNxp(<jCTq49.pAR<#lG5n_OHh61GV/\UV4-nF)JQs1uS&XJWseXπU"Qg1C:O#02(z%J'&U-qi,+%er3q]\%'up(%)9%%%%-%#DB1F(p)Gh##%%%M%'%%,πU"%%%%r%igSgIfxda0J/QU:9Uh,MJVRCLvoo5A9f<p&bk_j'e&I;[mjEV-qorH;B(πU"M[j=ekhXd$e6.f?v^/G_'=e09v:nuE)Ic:/VCbAC/I%eQHNRtA;yr_VT.D=[[ucπU"n5$[ad&<h3BK.;V'HZzaVhPOS.OkeZr(Y0Vfg#cPiFN7F,&QP7$/,.e>BF9dpSMπU"BKqwu=UI6778)4Wxcv$=65e+;TIMrV2,D_86AWEK;lSV5).+8YR&0=6;8E,I-_rπU"3<Kiux7p%Bup(%)9%%%%-%u)h+FsCA]K(#&%%]%)%%/%%%%i%jqjy%jSgfCxdw,πU"+p<U98L4]4EqCNJgu7tV0sVV/NTIz0.VN,/ogv-;\/_=7uqhF7i35<V\ED/bm^LπU"p_SkpB'DAhf3ARl.f*\pg-5;aEN%nXK9,')RL7S;>tuZ97%\aD[j;:DYl.KdhTIπU"/5>.i>oTXu8iw4O0rmJ$'oYD:Zinse7p48,ymaR0nTgx6teVJDN-=]_%_HhsOAcπU"P_?xj,$or*Sl6oL2P''C&]v=KK)+bQ#1cD]BBvH&]i[IB3/P,?fLbros6qwo)BrπU"9Np7i/9Q*L]an[JFk'%t(oK>[lvbgM1/B(s&WMI>FudsIu<Q[b#'0W_v,8]]Y+hπU"R\Ow*,d9yIn[H5]mx*qCNmFSXHEIuSDu1KBm=4>_fF?5c-/OH_;Jy&0-'*z_?jYπU"mW+D25*$Fj5-(h0$9iNp'')0hgSs9\9=^)6B1nN)DSai6so'c4up%()9%%%%-%1πU"1d*F6*iiE'%&%%&g*%%%,%%%%hiwS#gfxdPcX:zRU9#nu(IxZUET4Pg3,:fJ3#'πU"b*'0F6dr0R6rQ)/6'eg><igNNlt2,F-t:nZM$]JcBQBpg5Gkk'144;Ph)He/1n$πU",PP%(LT-O8YQIZue.IbNR'Su6vVs8I/U+kg-P'864=[+EwIL;O8XBG=s'0/?[0QπU"&bJ*(P6HVa=DpRv03[]44%DmHcCMwwOzOP^jUc3XVtudP?^Qay?v/:W5l)KNN9RπU"^p$kQX9IjF&MWYQ<uiW<F4.i.33O9,Z^9ZJUfL%1Phbi?1bU%3'U(Ju]8__tJOFπU"0c<Fbb1C1hh]j]KR1m4=J8C*buMqC;$-EEAdssDK%1a)amNgOg_Hu\'SEX0P(0_πU"):Lr=x4d8:(dF0yTbtb2mJ(ywth;jtL7URj<bvuVGAK?[?bi]>?]rf\#3tu^a2WπU"Q%$bLVC8qzpZ1tbqbC.i[P/3+at8-RV'-2*tcE)_TB5L8j/+^ePxmg)Bh0FQjz:πU"Y^qeyn[0:Z%\BsJ6Vh>e]35lV'pM_SCr]p#e*g+B(aVJ8/SozCHjL5=Qh:Dj+;xπU",u%p()9%%%%-L%1h+=Fd7#(\L&%+%9)%%%,%%%%hig%SgfxMdb.:\re9>oX*89#πU"cBg/G*Ijjs=L+4N)zbEDwl6r>T;7)XXVCU[:qM]QTpiSLi\8qj4[GuTVd$-3LK$πU"<e?2*P/s%ZGj>Z-?:7e'*-Kt:XI]+==eCR[1GWJ(/qI>,xnN:u%+ubOT9OK6iJ>πU"4[i4etD%]U_5$MF6O#TP10,X&T3gEi3eudvn3R5P0XDbEBm'F2Vbo/eZJOOo<VYπU"<+mN?Oc:cl1Zt<0K'vhIZbQY+ivDRb8BS;I_UPz8<mQG8d)q+&?sPq&+0j(8l3?πU"S8E2PtCdRzs5]G;pNlU9C'PY[]Y5JiHip6jB8_u>OvJVz]t4wA-V0H/3pc5H;RhπU"KfT[Whqu5+Q%Y_+aqVUEY'll_ijoEW/-f0=PjR[:^D[Nth?Y;d07nZR4b:^0qXzπU"7&r_V2Gh#LkmYS>m_*:7p?[+/[k'NHTq2q4vgG3RdQ-hgBJ)?leWU2Bf&tQhI+GπU"_&^lnA-scqw868-^VT%Dup(%)9%%#%-%iDB1F,e<slw%-%%'%T%%.%%%%g%zynqπU"%SgfxTf?v>oSok$FEjd[ru)nWHB^gij)KJhIn)e1>dQA[pny4t$:Tr)I/[)jOYUπU".Nj$4Z6.[+ay%_zz7l>*6$D:FcEt5fgItzP3GNI#p4<;#6[GC3Bn?9B*.NFZI<<πU"])/4l?8omKlDr-3D_jAI\h\fIY/rJ,gK^r_8RcKj+i.\5nniX#G[=9//?s+Qm2+πU"6<e^?cnCaqfFI\W\aHCjm?A)l*p?6nSW\*qbn:z(&o>r6oZBj?fR5kL^\wnnq>3πU"s.gdWgz=\M]IoUiXv?(e;7aCu%F'E;zinIC7Ly(inC5Q61z_*DPzg'H3.b8&gH3πU"USBN;^6)Joru_Q/17JMe^Qrv))wARcRuN2DOekV\,..3nA-jz1k&N1TkV==uDy,πU";j:HeFqerz2:BxW2;sE'D^2MAK,^5\WoCVB%TmSz,eV\5FI;<7RiLfM:i<9$WAUπU"wF\Z.<$%N,[;Y1Q_ZND:rP(qh_x:nn0me8tp-XZ9(dZ=(_Et(]v&D9RD54-<4I<πU"J:>F:amfzAI.Hj)]INEu;+Ji]\qzNAJFSMiicF[q3ah#Hn3S6:]s)\h;Juj:7l2πU"+Tab(kaO5b$h.sL2bY3I^$6km8c)onw;o#p.T-=oQ]p5DKIOPt*(/-2#MCGvH6=πU"-5ESTH-C0<fkgZ5fICU_u#FvD>BBOfKmSP#=?G<Y8sn^ahBJE\i^iTp0,9i<X<$πU"iDmR^9$*nk;LkhLC_2B?$KC&fKcObIxp^*%Pp\l8x]A9r;uJiUQ409wW>c8NafmπU"h&ttCQmxWKhElT..Q(a&,rw2lt-OFLvacT;bC7k<U(qZ1qT)#cm,GlUUl>z5cluπU"e1Df[Kmn&t5>WF;Y\t6q[(MpvOPdKev0ROo,aPGA$.Kzn);X]TSlY_zV[MIcETxπU"W$PThelgTxmY2=+5q-=[2n^)s-8\ld0gjp=l?:GK7n^k1lwPH5'pW\\nt0)be60πU"4&ti6p44=$Cv%i>B^oB]*W1IcCRIT->rpx7u6>Sgl1M>b_0%1]u_7fN4u:\v-'PπU"Szpqc5#E0+m*r\xlIjL+*%6g,il>;l&M,v)<b2NIGaMxQ7-;g?sHCaZV'oV/pAhπU"_u7euF,^KRn?,DX3cGQ*amgTb34kUKif2#g:KrI44$4u.*(fS<[Vc6A1,0\$<DmπU"80$t3?kurb\dfWrleH30\gMNo0(^A+A-IrWlfjK[KR-aePQ>;(L3I9Ez*>>Kh2rπU"dPju2h9[:c]*Ot&.8W#5MG8tQ/7_2YP=A6Be:E;Gxwe\76x?7]tXB=8>)?dz&MAπU"PD-_f?m+nW(kB?I197cwg+bG*:-qbl.UqgQ6WM:C:>a'4*V]lI=eUZ6a/#ex<;NπU"ke.j&Wt*1wHV76ciV7H6\'pb3[WPANbAm4.\[aAppGCG3>Z>XYJ:7qKK$=0MVfHπU"#wi/PjB3yNj/aXhzB0a]\?,PB3K?D?';[3ZJ'sGq,oXXA0MEw$lheXO?_3Z*4koπU"MYMNDw^/90K_<t<2oKqI4VQmBwgO??BhdB,>)R8a),q]5nCG*b0[Qoe$4OP.3G3πU"m4W2A\f,h[%K)fArUv=e<h>$'/lidgVej;p6r>#S'X+-:c+TfXhpPM\46g^AcF?πU"(.]_C,-\iJ#*&&>UeU<[#MsWid:G[>gY&AK$\k^DGHLltK_R&brxN=D:R1cleblπU"q3IaGE>[h\h5L&-5g5AiP1(lh))A5W7pT8Lmf-0[sK(L#eLtO+%ns_P=FEqWv#KπU"IF'0:cyPSR.>N:,1cWYbdN[>(Wu4>K7GTw5+oih;-BAT/fh-xH<?nS[T-<:#W)DπU"WIbk3haL]Fd%vNx96KC$_$^kQW0u3Gc.O0bHVh=Cs^ljG^#mpi4Ds1KaR&RJ\fuπU"J\*Gd9]yL1+<lo>W$MOFtV%Wa\)>SQs-UD>C283EHtPX;ZV%1DY68C3uX6p)2T0πU"VU/Rn$Bf\i3#./yTbG[.KBz>FPyJg]W#EZXiA%7kBNnJeUKC**sMLIQ+C-rYe=uπU"8-C(&jq-/My;*^*azRAC9aWtG*lT]UruXeJW'tE\+\A&OC8+oD\E$T7W/QD7q+*πU"<.TNA/-D?(0_T/,c-/zg[#zj^K-<WF(_.OiJvmFRDGsgT;W1v.->^]>3Bah+=(7πU"&NV9'=*aK7T1MySlO%T90dlx94>yg%$b'#Pqakb7gq8i[jU+.]g*:QK.hfkOS)zπU",?qr^H9V43'M1,lB)HpOWOcS[&3A/Bt/=H#XE_dL;Fj/KCNl;(8iznmAeJIv[t)πU"azjCp2GbRrnh2E%s'IS<7gBkC4CE:8Bp5x<UE)d'*;sKV]JRr.;LcSo%2Xsq3#zπU"=#I:kagVm6kZ(v7Zpp76_9%i\Vzf;TFGs^_[GQ5cj(:2/c*(epzS*i6YWj^QcZhπU";5*g2]]mxgqu50;6eDB<,qON6j9ikCnlqhnX:Hoh0Q5#M_h'amb\0[*h5Hxq0m6πU"BEW$s33c_jwO;mvTu<4,\o&'p69AdhP=PSLo_YLZi;($;Ds51*eqmB\:>4#h3&SπU"N09K$jYz?*$<J]7*:=)r]d50(HZlAH_*i93,hyW'KPwrIyv]AHyADM0,NEck%zYπU"udOKH_LZ0-k:aKp:u:puVJJaHtmOf23=DN[KH6M/uRVZ1slYXag3qJQT\^WWtC&πU"7>o#Q#o(?dgo-'lqlP7xc]?iU5w='ZGG6Exb^\Om9;=0A&JSAgX#3pu]T9G=3B4πU"#]-.YeXQaij9N/Tr=^fsV0Ue5.F<yN6ly;)2MV,r9IpN<ud_Td>DZwt.EqQZ;]?πU"NaZxclrP:r0kWSJ/H$tgT=\59B$oI)0u&fqIl0emk131^#P&oGnaxq(D$LKn/76πU"Cg3bJuGdcniPEfDV.OF+2J\DaIt;UFM1ZiQExKWDGVteE1lh:C9fCb9hC3KIc=_πU"7,n[yE0-xnh7=uTCQKDOn.GaUIOc8.'8:iSuj#'6q8Jd.'x&up%()9%%%%-%6U+πU"8Fh/mjR'-&%%%#+%%%.%%%%ghtu&(Sgf1xtcv)^ie5c#Xnq1'LiuRDY:U[z&ZPgπU"KWR0g^=fYqakHF<.8K$^?ITv*olzt\FtvH\*7gk\nDXl_nPy_<+SQ,9__2q^8T5πU"s7U=1sgvAp9s(tmL?sH8cIAA>V.l[mZcnL9GAlbCn*CMCDlT1yHo$[jBu#+,YCoπU"M\Uf9W1qW7&RL&+2Xk6maI<#GDG5QYO?*2c#zWn8z-TifXCx&+9:NAm4diPvG*FπU"Hoc08(aRAjn&,oYIP)o=Fv13obg43_apU+5,'kk:kBYhdIm&'e4YATyp7i#$i#uπU"h36G_a*%/o)>-b+w_kD+SHgyNiDjJ'nOOV3QDNM[ZsG+6kh$5p1mZ4$KD(;w_9QπU"a,O;Brp2L<(NP2a^:Q<>UJGUTvNxI9wn'vFV=3KP\b7([eJ9HU&4O4i6<XTq=,#πU"a2;U'=od$S$+?s5+R,pM.:#3ueM[#]](7v;Zi-X[$=-pNwd&c?3<H_EgMZW;1%JπU"Pm8d&JY]1CPzTR,^[Z>zS15&gDV#:8L:4*:EF3k^hJQ7SjfwSKMbLpVuE>FB'_?πU"Bl2a>a\]tx%&up(%)9%%%%-%,(<FF>sNFd7#'%%d%*%%/%%%%w%jfir%jSit^hTπU"xh%s#^5cxEotU3ras8Q9o>B'&O<LF_:asof0BhIaD\W.B/fuU7vF*Q(mz[)m6BYπU"G_p>ZeH?O0Tg;Nd5Q,h:#Q?NL/Om/]daQU8$aEU*a5/Z+i(nf5CYJPS2Bm%e#h(πU"u$,$CQ9mvc(:Alv94xTU?Ke>nX]3&KnW\16i(eW=$B+Vy45#2a.^tws#gUT6m2NπU",djt(Mib/h=SQXQ5TH?e-VJA<-(p^tcZ\S8[LoB)O,7thc_bWb0;A\GEq:fabd>πU"'G^*$-eQHh/WSe0%0Y9H^r0f-\ngW78fQ33K&7\4Qja]X4[n6J:w-._t[8R<Z86πU"oaUDKJU+&I=3S;W8Jq+&l#Kn)CS0'4$21._v/j79%3irN(ef.zg=FWA12uL_<Y*πU"Yf1CoQS;]eEbnxn_=6=q$oQ-s7uI30WM0MqZvc7fCO4>\VQX(d\LuLpCp<6BYUnπU"U]+33]-0Mi6-AT>jABI,e>rC;n9$v$)E#TDl*Xv.kG3a8pI]#rg<&&nhXjxJSETπU"QC*WCq>_uPU1<ZYn'\)suLjFQ?B[1U0SB'BB#hLxX&9Q+l4Vjc+>&%-h*^BUX:aπU"tm\H$XJMDc^q<#LLP%eaiYenn.GHBmkx\1OSByNUZnBXDH/?3iXc[?_qCW_,g3$πU"K<sJBm=#c*Y;7KiR7^?6*uq1XH]]H+J23IGXF?AJTx$03MKU]ebcoMc]4^vj</^πU"<pRSdB(7HidEMqX-:xUWIsb_:ZGvq2>^LHPJ?kXXbRuioXJuOBTdIBrfDApS%CUπU"J#En%yS]O^ipV8W.[aw^664_l?0aM,Gr0T:nmCgH?DqE1nXDwd,(/flB9T<l,7hπU"=aOsX&1174Ul(k)q):rv_gAgjZJwZo0\_OR>y#\lyT7e:n,\:95N2+Hu4u%p()/πU"%%%%%O%HS7OF%Tq%9'%%%%'%%%%-%%%%rjs%zSrs%z2/u%p&'9%%9%%#%-%;_-*πU"Fvjhch;#%%%J%&%%.%%%%%%%%%&%%E%%%%%%%#%xf%%jwSg%fxup%&'9%%9%%%RπU"-%eu\*FTr'j]w&%%%/*%%%,%%%%%%%%%&%%E%%%'b%%%%wzsS%gfxu%p&'9%%9%πU"%[%-%N_j+FlB[PQ,#&%%<%*%%-%%%%%%%%%&%%E%%(%/'%%%wjs%gSgf%xup&%'πU"9%9%%%%-I%6B1[FQ98-FA%%(%K'%%%,%%%%%%%%%&%E[%%%\%(%%w%igSg%fxupπU"%&'9%%9%%%I-%/-&*FtC7m=R%.%%d'%%%+%%%%%%%%%&%%E%%%'I)%%%rkSg%fxπU"up%&'9%%9%%%#-%#B/1F()>Gh#%.%%M'%%%,%%%%%%%%%&%%E%%%'F*%%%rigS%πU"gfxu%p&'9%%9%%%%-%u)h+FsCA]K(#&%%]%)%%/%%%%%%%%%&%%E%%+%2+%%%ijπU"q%jyjS%gfxu%p&'9%%9%%%%-%1_d*F*$iiE%#&%%g%*%%,%%%%%%%%%&%%E%%%%πU"_-%%%hiw%Sgfx%up&'%9%9%%%%-%21h+F-d7#\&L&%%'9)%%%,%%%%%%%%%&%E%πU"%%%0/%%%hi%gSgf%xup&%'9%9%%%%-L%iB11F,<s,lw-%%%'T%%%.%%%%%%%%%&πU"%E[%%%&%0%%g%zynq%Sgfx%up&'%9%9%%%%-%6U+8Fh/mjR'-&%%%#+%%%.%%%%πU"%%%%%&%E%7%%K9%%%gh.tu(S%gfxu%p&'9%%9%%%%-%,(<FF>sNFd7#'%%d%*%%πU"/%%%%%%%%%&%%E%%+%&;%%%wjf%irjS%ithu%p&'9%%/%%[%%%H_S7F%)Tq9'%%πU"%%'%%%%-%%%%%%%%%&%%E%%(%b>%%%rjs%zSrs%zup*%+%%%%%2%2+%7'%+%4>%πU"%%%%πEND SUBπCLOSE:IF S=184AND B&=Z&THEN?" :) Ok!"ELSE?" :( Bad!πSUB U(A$):FOR A=1TO LEN(A$):C=ASC(MID$(A$,A))-37:IF C<0THEN C=91+C*32πIF K<4THEN K=C+243ELSE?#1,CHR$(C+(K MOD 3)*86);:K=K\3:B&=B&+1πS=(S+C)AND 255:NEXT:LOCATE,1:?STRING$(B&*50\Z&,219);:END SUBπMark K. Kim                    WINDOW'S LONG FILENAMES        members.aol.com/vindaci/       11-24-95 (00:00)       QB, QBasic, PDS        835  37398    LFN.BAS     '#iab.compatibility.version.1aπ'LFN version 1.0 beta1 -- Long filename functionsπ'Copyright (c)1996 Mark K. Kimπ'markkkim@aol.comπ'http://members.aol.com/markkkim/π'http://members.aol.com/vinDaci/π'* Freely distributed.  May be used in other programs with proper notice ofπ'  credit.π'* This program is provided "as-is".π'* In QBASIC, no modification is necessaryπ'* In QuickBASIC, QuickBASIC PDS, or VisualBASIC for DOS, run with theπ'  "/L" option, like so:π'π'    QB /Lπ'    QBX /Lπ'    VBDOS /Lπ'π'  Also, do not include the QB.BI, QBX.BI, or VBDOS.BI files. If you do,π'  modify them so that the line "DECLARE ABSOLUTE..." is gone.π'* In QuickBASIC PDS and VisualBASIC, change all the lines in the formatπ'  "VARSEG(any.string.variable$)" to "SSEG(any.string.variable$)".π'* CREDIT: Ralf Brown's interrupt list was used to get interrupt for theπ'  function.  Microsoft DOS's Debug was used to convert Assembly code toπ'  machine code.  Microsoft is a Registered Trademark of Microsoft Corp.π'* NOTE: Works only under operating systems that support Windows95 LFNπ'  or LFN emulation programs.π'Read the header of each function to find out their usage. These functionsπ'are designed to work with most other routines as it does not interfereπ'with any other routines.πππ'the following line exists for compatibility reasons:πDECLARE SUB absolute (var1%, var2%, var3%, var4%, var5%, var6%, var7%, var8%, var9%, offset%)ππ'#begin declarationπ  'File attribute constants -- used to do file searchπ    CONST ATT.ALL = &HFFπ    CONST ATT.SHARE = &H80π    CONST ATT.ARC = &H20π    CONST ATT.DIR = &H10π    CONST ATT.VOL = &H8π    CONST ATT.SYS = &H4π    CONST ATT.HID = &H2π    CONST ATT.RDO = &H1π    CONST ATT.NONE = &H0π  'Value set to error code if an error occursπ    DIM SHARED errval AS INTEGERπ  'Proceduresπ    DECLARE SUB lfn.mkdir (dirname$)           'make LFN directoryπ    DECLARE SUB lfn.rmdir (dirname$)           'remove LFN directoryπ    DECLARE SUB lfn.chdir (dirname$)           'change to a LFN directoryπ    DECLARE SUB lfn.del (filename$)            'delete a LFN fileπ    DECLARE SUB lfn.ren (oldname$, newname$)   'rename fileπ    DECLARE FUNCTION lfn.cwd$ (drive%)         'get current working directoryπ    DECLARE FUNCTION lfn.l2s$ (longname$)      'long name to short nameπ    DECLARE FUNCTION lfn.s2l$ (shortname$)     'short name to long nameπ    DECLARE FUNCTION lfn.findfirst$ (filespec$, findattrib%, mustattrib%)π    DECLARE FUNCTION lfn.findnext$ ()π    DECLARE SUB lfn.findclose ()π'#end declarationπππ'#start example programπ  CLSππ  longfilename$ = "long filename entry.tmp"π  longdirname$ = "long directory name entry"ππ  'make a LFN file by first opening a SFN file, then renaming it to LFN:π    'first create SFNπ      OPEN "sfn.tmp" FOR OUTPUT AS #1π      PRINT #1, "La la la! This is a SFN entry!"π      CLOSE #1π    'rename SFN to LFNπ      lfn.ren "sfn.tmp", longfilename$π      IF errval THEN PRINT "Error while renaming!" ELSE PRINT "LFN Created"ππ  'display all files in the current directoryπ    'file search -- allow any/all attributes and limit no attributeπ      filename$ = lfn.findfirst$("*.*", ATT.ALL, ATT.NONE)ππ    'display resultπ      IF errval THENπ          PRINT "Error during file search!"π      ELSEπ          PRINT "File search result: "π        'display filename and continue searchπ          DOπ            PRINT "  "; filename$π            filename$ = lfn.findnext$π          LOOP UNTIL errvalπ        'terminate search -- must be calledπ          lfn.findcloseπ      END IFππ  'delete previously created LFN fileπ    lfn.del longfilename$π    IF errval THEN PRINT "Error while deleting LFN!" ELSE PRINT "LFN deleted"ππ  'create LFN directoryπ    lfn.mkdir longdirname$π    IF errval THEN PRINT "Error while creating LFN directory!" ELSE PRINT "LFN directory created"ππ  'display LFN directory's SFN equivalentπ    PRINT "LFN entry's SFN equivalent is: "; lfn.l2s(longdirname$)ππ  'change current directory to LFNπ    'first display current directoryπ      PRINT "Current directory: "; lfn.cwd$(-1)π    'next change directoryπ      lfn.chdir longdirname$π      IF errval THEN PRINT "Error changing directory" ELSE PRINT "Directory changed"π    'display directoryπ      PRINT "Directory after change: "; lfn.cwd$(-1)π    'change backπ      lfn.chdir ".."π      IF errval THEN PRINT "Error changing directory" ELSE PRINT "Back to original directory"ππ  'remove LFN directoryπ    lfn.rmdir longdirname$π    IF errval THEN PRINT "Error removing LFN directory" ELSE PRINT "LFN directory removed"ππ'lfn.chdir -- Change Directoryπ'INPUT:π'  dirname$ - Name of the directory to change to.π'SUCCESS:π'  * Working directory changed to specified directory.π'  * Global variable errval set to zero.π'FAIL:π'  * Global variable errval set to &h7100 if function is not supported.π'    (probably does not support LFN)π'  * Global variable errval set to non-zero if an error occurs and the taskπ'    could not be completed successfully.πSUB lfn.chdir (dirname$)π π  asm$ = ""π  asm$ = asm$ + CHR$(&H55)                                       'PUSH    BPπ  asm$ = asm$ + CHR$(&H89) + CHR$(&HE5)                          'MOV     BP,SPπ  asm$ = asm$ + CHR$(&H1E)                                       'PUSH    DSπ  asm$ = asm$ + CHR$(&H8B) + CHR$(&H5E) + CHR$(&H6)              'MOV     BX,[BP+06]π  asm$ = asm$ + CHR$(&H8B) + CHR$(&H17)                          'MOV     DX,[BX]π  asm$ = asm$ + CHR$(&H8B) + CHR$(&H5E) + CHR$(&H8)              'MOV     BX,[BP+08]π  asm$ = asm$ + CHR$(&H8E) + CHR$(&H1F)                          'MOV     DS,[BX]π  asm$ = asm$ + CHR$(&HB8) + CHR$(&H3B) + CHR$(&H71)             'MOV     AX,713Bπ  asm$ = asm$ + CHR$(&HCD) + CHR$(&H21)                          'INT     21π  asm$ = asm$ + CHR$(&H1F)                                       'POP     DSπ  asm$ = asm$ + CHR$(&H8B) + CHR$(&H5E) + CHR$(&H6)              'MOV     BX,[BP+06]π  asm$ = asm$ + CHR$(&H89) + CHR$(&H7)                           'MOV     [BX],AXπ  asm$ = asm$ + CHR$(&H8B) + CHR$(&H5E) + CHR$(&H8)              'MOV     BX,[BP+08]π  asm$ = asm$ + CHR$(&HB8) + CHR$(&H0) + CHR$(&H0)               'MOV     AX,0000π  asm$ = asm$ + CHR$(&H15) + CHR$(&H0) + CHR$(&H0)               'ADC     AX,0000π  asm$ = asm$ + CHR$(&H89) + CHR$(&H7)                           'MOV     [BX],AXπ  asm$ = asm$ + CHR$(&H5D)                                       'POP     BPπ  asm$ = asm$ + CHR$(&HCA) + CHR$(&H12) + CHR$(&H0)              'RETF    0012ππ  lfn.dirname$ = dirname$ + CHR$(0)π  lfn.dirnameseg% = VARSEG(lfn.dirname$)π  lfn.dirnameoff% = SADD(lfn.dirname$)ππ  DEF SEG = VARSEG(asm$)π  CALL absolute(dummy%, dummy%, dummy%, dummy%, dummy%, dummy%, dummy%, lfn.dirnameseg%, lfn.dirnameoff%, SADD(asm$))π  DEF SEGππ  iserror% = lfn.dirnameseg%π  errorcode% = lfn.dirnameoff%ππ  IF iserror% THENπ    errval = errorcode%π  ELSEπ    errval = 0π  END IFππEND SUBππ'lfn.cwd$ -- Return current directoryπ'INPUT:π'  drive% - Number of the drive to get the current directory of.π'    0 = A:, 1 = B:, 2 = C:, etc. -1 if current drive.π'SUCCESS:π'  * Return current directory of the specified drive.π'  * Global variable errval set to zero.π'FAIL:π'  * Return "".π'  * Global variable errval set to &h7100 if function is not supported.π'    (probably does not support LFN)π'  * Global variable errval set to non-zero if an error occurs and the taskπ'    could not be completed successfully.πFUNCTION lfn.cwd$ (drive%)π π  asm$ = ""π  asm$ = asm$ + CHR$(&H55)                                'PUSH    BPπ  asm$ = asm$ + CHR$(&H89) + CHR$(&HE5)                   'MOV     BP,SPπ  asm$ = asm$ + CHR$(&H56)                                'PUSH    SIπ  asm$ = asm$ + CHR$(&H1E)                                'PUSH    DSπ  asm$ = asm$ + CHR$(&H8B) + CHR$(&H5E) + CHR$(&H6)       'MOV     BX,[BP+06]π  asm$ = asm$ + CHR$(&H8A) + CHR$(&H17)                   'MOV     DL,[BX]π  asm$ = asm$ + CHR$(&H8B) + CHR$(&H5E) + CHR$(&H8)       'MOV     BX,[BP+08]π  asm$ = asm$ + CHR$(&H8B) + CHR$(&H37)                   'MOV     SI,[BX]π  asm$ = asm$ + CHR$(&H8B) + CHR$(&H5E) + CHR$(&HA)       'MOV     BX,[BP+0A]π  asm$ = asm$ + CHR$(&H8E) + CHR$(&H1F)                   'MOV     DS,[BX]π  asm$ = asm$ + CHR$(&HB8) + CHR$(&H47) + CHR$(&H71)      'MOV     AX,7147π  asm$ = asm$ + CHR$(&HCD) + CHR$(&H21)                   'INT     21π  asm$ = asm$ + CHR$(&H8C) + CHR$(&HDA)                   'MOV     DX,DSπ  asm$ = asm$ + CHR$(&H1F)                                'POP     DSπ  asm$ = asm$ + CHR$(&H8B) + CHR$(&H5E) + CHR$(&H8)       'MOV     BX,[BP+08]π  asm$ = asm$ + CHR$(&H89) + CHR$(&H7)                    'MOV     [BX],AXπ  asm$ = asm$ + CHR$(&H8B) + CHR$(&H5E) + CHR$(&HA)       'MOV     BX,[BP+0A]π  asm$ = asm$ + CHR$(&HB8) + CHR$(&H0) + CHR$(&H0)        'MOV     AX,0000π  asm$ = asm$ + CHR$(&H15) + CHR$(&H0) + CHR$(&H0)        'ADC     AX,0000π  asm$ = asm$ + CHR$(&H89) + CHR$(&H7)                    'MOV     [BX],AXπ  asm$ = asm$ + CHR$(&H5E)                                'POP     SIπ  asm$ = asm$ + CHR$(&H5D)                                'POP     BPπ  asm$ = asm$ + CHR$(&HCA) + CHR$(&H12) + CHR$(&H0)       'RETF    0012ππ  lfn.drive% = drive% + 1ππ  lfn.path$ = SPACE$(1024)π  lfn.pathseg% = VARSEG(lfn.path$)π  lfn.pathoff% = SADD(lfn.path$)ππ  DEF SEG = VARSEG(asm$)π  CALL absolute(dummy%, dummy%, dummy%, dummy%, dummy%, dummy%, lfn.pathseg%, lfn.pathoff%, lfn.drive%, SADD(asm$))π  DEF SEGππ  'convert returned dataπ  iserror% = lfn.pathseg%π  errorcode% = lfn.pathoff%ππ  IF iserror% THENπ      errval = errorcode%π  ELSEπ      errval = 0π    'return current directoryπ      path$ = ""π      FOR i% = 1 TO 1025π        ch$ = MID$(lfn.path$, i%, 1)π        IF ch$ <> CHR$(0) THENπ          path$ = path$ + ch$π        ELSEπ          EXIT FORπ        END IFπ      NEXTπ      lfn.cwd$ = path$π  END IFππEND FUNCTIONππ'lfn.del -- Delete a fileπ'INPUT:π'  filename$ - Name of the file to deleteπ'SUCCESS:π'  * File deletedπ'  * Global variable errval set to zero.π'FAIL:π'  * Global variable errval set to &h7100 if function is not supported.π'    (probably does not support LFN)π'  * Global variable errval set to non-zero if an error occurs and the taskπ'    could not be completed successfully.πSUB lfn.del (filename$)ππ  asm$ = ""π  asm$ = asm$ + CHR$(&H55)                                       'PUSH    BPπ  asm$ = asm$ + CHR$(&H89) + CHR$(&HE5)                          'MOV     BP,SPπ  asm$ = asm$ + CHR$(&H56)                                       'PUSH SIπ  asm$ = asm$ + CHR$(&H1E)                                       'PUSH    DSπ  asm$ = asm$ + CHR$(&H8B) + CHR$(&H5E) + CHR$(&H6)              'MOV     BX,[BP+06]π  asm$ = asm$ + CHR$(&H8B) + CHR$(&H17)                          'MOV     DX,[BX]π  asm$ = asm$ + CHR$(&H8B) + CHR$(&H5E) + CHR$(&H8)              'MOV     BX,[BP+08]π  asm$ = asm$ + CHR$(&H8E) + CHR$(&H1F)                          'MOV     DS,[BX]π  asm$ = asm$ + CHR$(&HB8) + CHR$(&H41) + CHR$(&H71)             'MOV     AX,7141π  asm$ = asm$ + CHR$(&HB9) + CHR$(&H0) + CHR$(&H0)               'MOV     CX,0000π  asm$ = asm$ + CHR$(&HBE) + CHR$(&H1) + CHR$(&H0)               'MOV     SI,0001π  asm$ = asm$ + CHR$(&HCD) + CHR$(&H21)                          'INT     21π  asm$ = asm$ + CHR$(&H1F)                                       'POP     DSπ  asm$ = asm$ + CHR$(&H8B) + CHR$(&H5E) + CHR$(&H6)              'MOV     BX,[BP+06]π  asm$ = asm$ + CHR$(&H89) + CHR$(&H7)                           'MOV     [BX],AXπ  asm$ = asm$ + CHR$(&H8B) + CHR$(&H5E) + CHR$(&H8)              'MOV     BX,[BP+08]π  asm$ = asm$ + CHR$(&HB8) + CHR$(&H0) + CHR$(&H0)               'MOV     AX,0000π  asm$ = asm$ + CHR$(&H15) + CHR$(&H0) + CHR$(&H0)               'ADC     AX,0000π  asm$ = asm$ + CHR$(&H89) + CHR$(&H7)                           'MOV     [BX],AXπ  asm$ = asm$ + CHR$(&H5E)                                       'POP     SIπ  asm$ = asm$ + CHR$(&H5D)                                       'POP     BPπ  asm$ = asm$ + CHR$(&HCA) + CHR$(&H12) + CHR$(&H0)              'RETF    0012ππ  lfn.filename$ = filename$ + CHR$(0)π  lfn.filenameseg% = VARSEG(lfn.filename$)π  lfn.filenameoff% = SADD(lfn.filename$)ππ  DEF SEG = VARSEG(asm$)π  CALL absolute(dummy%, dummy%, dummy%, dummy%, dummy%, dummy%, dummy%, lfn.filenameseg%, lfn.filenameoff%, SADD(asm$))π  DEF SEGππ  iserror% = lfn.filenameseg%π  errorcode% = lfn.filenameoff%ππ  IF iserror% THENπ    errval = errorcode%π  ELSEπ    errval = 0π  END IFππEND SUBππ'lfn.close -- Stop file searchπ'INPUT:π'  Noneπ'SUCCESS:π'  * Global variable errval set to zero.π'FAIL:π'  * Global variable errval set to &h7100 if function is not supported.π'    (probably does not support LFN)π'  * Global variable errval set to non-zero if an error occurs and the taskπ'    could not be completed successfully.πSUB lfn.findcloseππ  SHARED lfn.filefindhandle%ππ  asm$ = ""π  asm$ = asm$ + CHR$(&H55)                                  'PUSH    BPπ  asm$ = asm$ + CHR$(&H89) + CHR$(&HE5)                     'MOV     BP,SPπ  asm$ = asm$ + CHR$(&H8B) + CHR$(&H5E) + CHR$(&H6)         'MOV     BX,[BP+06]π  asm$ = asm$ + CHR$(&H8B) + CHR$(&H1F)                     'MOV     BX,[BX]π  asm$ = asm$ + CHR$(&HB8) + CHR$(&HA1) + CHR$(&H71)        'MOV     AX,71A1π  asm$ = asm$ + CHR$(&HCD) + CHR$(&H21)                     'INT     21π  asm$ = asm$ + CHR$(&H8B) + CHR$(&H5E) + CHR$(&H8)         'MOV     BX,[BP+08]π  asm$ = asm$ + CHR$(&H89) + CHR$(&H7)                      'MOV     [BX],AXπ  asm$ = asm$ + CHR$(&HB8) + CHR$(&H0) + CHR$(&H0)          'MOV     AX,0000π  asm$ = asm$ + CHR$(&H15) + CHR$(&H0) + CHR$(&H0)          'ADC     AX,0000π  asm$ = asm$ + CHR$(&H8B) + CHR$(&H5E) + CHR$(&HA)         'MOV     BX,[BP+0A]π  asm$ = asm$ + CHR$(&H89) + CHR$(&H7)                      'MOV     [BX],AXπ  asm$ = asm$ + CHR$(&H5D)                                  'POP     BPπ  asm$ = asm$ + CHR$(&HCA) + CHR$(&H12) + CHR$(&H0)         'RETF    0012ππ  DEF SEG = VARSEG(asm$)π  CALL absolute(dummy%, dummy%, dummy%, dummy%, dummy%, dummy%, iserror%, errorcode%, lfn.filefindhandle%, SADD(asm$))π  DEF SEGππ  IF iserror% THENπ    errval = errorcode%π  ELSEπ    errval = 0π  END IFππEND SUBππ'lfn.findfirst$ -- Find file, initialization callπ'INPUT:π'  filespec$ - File name type to look for. IE - "C:\*.*"π'  findattrib% - Files with these attributes are returned. Any files withπ'    lesser attributes are also returned. Files with more than theseπ'    attributes are not returned. Used in conjunction with mustattrib%.π'    Use ATT.* constants provided in declaration.π'  mustattrib% - Files without these attributes are not returned. Used inπ'    conjunction with findattrib%. Use ATT.* constants provided inπ'    declaration.π'SUCCESS:π'  * Return name of the first file matching the createria.π'  * Global variable errval set to zero.π'FAIL:π'  * Return "".π'  * Global variable errval set to &h7100 if function is not supported.π'    (probably does not support LFN)π'  * Global variable errval set to non-zero if an error occurs and the taskπ'    could not be completed successfully.πFUNCTION lfn.findfirst$ (filespec$, findattrib%, mustattrib%)ππ  SHARED lfn.filefindhandle%π  SHARED lfn.finddata AS STRING * 320π  lfn.finddata = SPACE$(320)ππ  asm$ = asm$ + CHR$(&H55)                                  'PUSH    BPπ  asm$ = asm$ + CHR$(&H89) + CHR$(&HE5)                     'MOV     BP,SPπ  asm$ = asm$ + CHR$(&H57)                                  'PUSH    DIπ  asm$ = asm$ + CHR$(&H6)                                   'PUSH    ESπ  asm$ = asm$ + CHR$(&H56)                                  'PUSH    SIπ  asm$ = asm$ + CHR$(&H1E)                                  'PUSH    DSπ  asm$ = asm$ + CHR$(&H8B) + CHR$(&H5E) + CHR$(&H6)         'MOV     BX,[BP+06]π  asm$ = asm$ + CHR$(&H8B) + CHR$(&H3F)                     'MOV     DI,[BX]π  asm$ = asm$ + CHR$(&H8B) + CHR$(&H5E) + CHR$(&H8)         'MOV     BX,[BP+08]π  asm$ = asm$ + CHR$(&H8E) + CHR$(&H7)                      'MOV     ES,[BX]π  asm$ = asm$ + CHR$(&H8B) + CHR$(&H5E) + CHR$(&HA)         'MOV     BX,[BP+0A]π  asm$ = asm$ + CHR$(&H8B) + CHR$(&H17)                     'MOV     DX,[BX]π  asm$ = asm$ + CHR$(&H8B) + CHR$(&H5E) + CHR$(&HE)         'MOV     BX,[BP+0E]π  asm$ = asm$ + CHR$(&H8A) + CHR$(&H2F)                     'MOV     CH,[BX]π  asm$ = asm$ + CHR$(&H8B) + CHR$(&H5E) + CHR$(&H10)        'MOV     BX,[BP+10]π  asm$ = asm$ + CHR$(&H8A) + CHR$(&HF)                      'MOV     CL,[BX]π  asm$ = asm$ + CHR$(&H8B) + CHR$(&H5E) + CHR$(&HC)         'MOV     BX,[BP+0C]π  asm$ = asm$ + CHR$(&H8E) + CHR$(&H1F)                     'MOV     DS,[BX]π  asm$ = asm$ + CHR$(&HB8) + CHR$(&H4E) + CHR$(&H71)        'MOV     AX,714Eπ  asm$ = asm$ + CHR$(&HBE) + CHR$(&H1) + CHR$(&H0)          'MOV     SI,0001π  asm$ = asm$ + CHR$(&HCD) + CHR$(&H21)                     'INT     21π  asm$ = asm$ + CHR$(&H1F)                                  'POP     DSπ  asm$ = asm$ + CHR$(&H8B) + CHR$(&H5E) + CHR$(&HA)         'MOV     BX,[BP+0A]π  asm$ = asm$ + CHR$(&H89) + CHR$(&H7)                      'MOV     [BX],AXπ  asm$ = asm$ + CHR$(&HB8) + CHR$(&H0) + CHR$(&H0)          'MOV     AX,0000π  asm$ = asm$ + CHR$(&H15) + CHR$(&H0) + CHR$(&H0)          'ADC     AX,0000π  asm$ = asm$ + CHR$(&H8B) + CHR$(&H5E) + CHR$(&HC)         'MOV     BX,[BP+0C]π  asm$ = asm$ + CHR$(&H89) + CHR$(&H7)                      'MOV     [BX],AXπ  asm$ = asm$ + CHR$(&H5E)                                  'POP     SIπ  asm$ = asm$ + CHR$(&H7)                                   'POP     ESπ  asm$ = asm$ + CHR$(&H5F)                                  'POP     DIπ  asm$ = asm$ + CHR$(&H5D)                                  'POP     BPπ  asm$ = asm$ + CHR$(&HCA) + CHR$(&H12) + CHR$(&H0)         'RETF    0012ππ  lfn.filespec$ = filespec$ + CHR$(0)ππ  lfn.filespecseg% = VARSEG(lfn.filespec$)π  lfn.filespecoff% = SADD(lfn.filespec$)π  lfn.finddataseg% = VARSEG(lfn.finddata)π  lfn.finddataoff% = VARPTR(lfn.finddata)ππ  DEF SEG = VARSEG(asm$)π  CALL absolute(dummy%, dummy%, dummy%, findattrib%, mustattrib%, lfn.filespecseg%, lfn.filespecoff%, lfn.finddataseg%, lfn.finddataoff%, SADD(asm$))π  DEF SEGππ  iserror% = lfn.filespecseg%π  retcode% = lfn.filespecoff%ππ  IF iserror% THENπ    errval = retcode%π  ELSEπ    errval = 0π    lfn.filefindhandle% = retcode%π    filename$ = ""π    DEF SEG = VARSEG(lfn.finddata)π    FOR i% = 0 TO 259π      ch$ = CHR$(PEEK(VARPTR(lfn.finddata) + &H2C + i%))π      IF ch$ <> CHR$(0) THENπ        filename$ = filename$ + ch$π      ELSEπ        EXIT FORπ      END IFπ    NEXTπ    lfn.findfirst$ = filename$π  END IFππEND FUNCTIONππ'lfn.findnext$ -- Find file, continuation callπ'INPUT:π'  None. Same values used to call LFN.FINDFIRST$ are automatically used.π'SUCCESS:π'  * Return name of the next file matching the createria.π'  * Global variable errval set to zero.π'FAIL:π'  * Return "".π'  * Global variable errval set to &h7100 if function is not supported.π'    (probably does not support LFN)π'  * Global variable errval set to non-zero if an error occurs and the taskπ'    could not be completed successfully. This includes a case when thereπ'    is no more a file matching the createria.πFUNCTION lfn.findnext$π π  SHARED lfn.filefindhandle%π  SHARED lfn.finddata AS STRING * 320ππ  asm$ = ""π  asm$ = asm$ + CHR$(&H55)                                  'PUSH    BPπ  asm$ = asm$ + CHR$(&H89) + CHR$(&HE5)                     'MOV     BP,SPπ  asm$ = asm$ + CHR$(&H56)                                  'PUSH    SIπ  asm$ = asm$ + CHR$(&H6)                                   'PUSH    ESπ  asm$ = asm$ + CHR$(&H57)                                  'PUSH    DIπ  asm$ = asm$ + CHR$(&HBE) + CHR$(&H1) + CHR$(&H0)          'MOV     SI,0001π  asm$ = asm$ + CHR$(&H8B) + CHR$(&H5E) + CHR$(&H6)         'MOV     BX,[BP+06]π  asm$ = asm$ + CHR$(&H8B) + CHR$(&H3F)                     'MOV     DI,[BX]π  asm$ = asm$ + CHR$(&H8B) + CHR$(&H5E) + CHR$(&H8)         'MOV     BX,[BP+08]π  asm$ = asm$ + CHR$(&H8E) + CHR$(&H7)                      'MOV     ES,[BX]π  asm$ = asm$ + CHR$(&H8B) + CHR$(&H5E) + CHR$(&HA)         'MOV     BX,[BP+0A]π  asm$ = asm$ + CHR$(&H8B) + CHR$(&H1F)                     'MOV     BX,[BX]π  asm$ = asm$ + CHR$(&HB8) + CHR$(&H4F) + CHR$(&H71)        'MOV     AX,714Fπ  asm$ = asm$ + CHR$(&HCD) + CHR$(&H21)                     'INT     21π  asm$ = asm$ + CHR$(&H8B) + CHR$(&H5E) + CHR$(&H6)         'MOV     BX,[BP+06]π  asm$ = asm$ + CHR$(&H89) + CHR$(&H7)                      'MOV     [BX],AXπ  asm$ = asm$ + CHR$(&H8B) + CHR$(&H5E) + CHR$(&H8)         'MOV     BX,[BP+08]π  asm$ = asm$ + CHR$(&HB8) + CHR$(&H0) + CHR$(&H0)          'MOV     AX,0000π  asm$ = asm$ + CHR$(&H15) + CHR$(&H0) + CHR$(&H0)          'ADC     AX,0000π  asm$ = asm$ + CHR$(&H89) + CHR$(&H7)                      'MOV     [BX],AXπ  asm$ = asm$ + CHR$(&H5F)                                  'POP     DIπ  asm$ = asm$ + CHR$(&H7)                                   'POP     ESπ  asm$ = asm$ + CHR$(&H5E)                                  'POP     SIπ  asm$ = asm$ + CHR$(&H5D)                                  'POP     BPπ  asm$ = asm$ + CHR$(&HCA) + CHR$(&H12) + CHR$(&H0)         'RETF    0012ππ  lfn.finddataseg% = VARSEG(lfn.finddata)π  lfn.finddataoff% = VARPTR(lfn.finddata)ππ  DEF SEG = VARSEG(asm$)π  CALL absolute(dummy%, dummy%, dummy%, dummy%, dummy%, dummy%, lfn.filefindhandle%, lfn.finddataseg%, lfn.finddataoff%, SADD(asm$))π  DEF SEGππ  iserror% = lfn.finddataseg%π  errorcode% = lfn.finddataoff%ππ  IF iserror% THENπ    errval = errorcode%π  ELSEπ    errval = 0π    filename$ = ""π    DEF SEG = VARSEG(lfn.finddata)π    FOR i% = 0 TO 259π      ch$ = CHR$(PEEK(VARPTR(lfn.finddata) + &H2C + i%))π      IF ch$ <> CHR$(0) THENπ        filename$ = filename$ + ch$π      ELSEπ        EXIT FORπ      END IFπ    NEXTπ    lfn.findnext$ = filename$π  END IFππEND FUNCTIONππ'lfn.l2s$ -- Convert long filename to short filenameπ'INPUT:π'  longname$ - Long filename to convert to short filename.π'SUCCESS:π'  * Return short filename version of the long filename.π'  * Global variable errval set to zero.π'FAIL:π'  * Return "".π'  * Global variable errval set to &h7100 if function is not supported.π'    (probably does not support LFN)π'  * Global variable errval set to non-zero if an error occurs and the taskπ'    could not be completed successfully.πFUNCTION lfn.l2s$ (longname$)ππ  asm$ = ""π  asm$ = asm$ + CHR$(&H55)                                  'PUSH    BPπ  asm$ = asm$ + CHR$(&H89) + CHR$(&HE5)                     'MOV     BP,SPπ  asm$ = asm$ + CHR$(&H57)                                  'PUSH    DIπ  asm$ = asm$ + CHR$(&H6)                                   'PUSH    ESπ  asm$ = asm$ + CHR$(&H56)                                  'PUSH    SIπ  asm$ = asm$ + CHR$(&H1E)                                  'PUSH    DSπ  asm$ = asm$ + CHR$(&H8B) + CHR$(&H5E) + CHR$(&H6)         'MOV     BX,[BP+06]π  asm$ = asm$ + CHR$(&H8B) + CHR$(&H3F)                     'MOV     DI,[BX]π  asm$ = asm$ + CHR$(&H8B) + CHR$(&H5E) + CHR$(&H8)         'MOV     BX,[BP+08]π  asm$ = asm$ + CHR$(&H8E) + CHR$(&H7)                      'MOV     ES,[BX]π  asm$ = asm$ + CHR$(&H8B) + CHR$(&H5E) + CHR$(&HA)         'MOV     BX,[BP+0A]π  asm$ = asm$ + CHR$(&H8B) + CHR$(&H37)                     'MOV     SI,[BX]π  asm$ = asm$ + CHR$(&H8B) + CHR$(&H5E) + CHR$(&HC)         'MOV     BX,[BP+0C]π  asm$ = asm$ + CHR$(&H8E) + CHR$(&H1F)                     'MOV     DS,[BX]π  asm$ = asm$ + CHR$(&HB8) + CHR$(&H60) + CHR$(&H71)        'MOV     AX,7160π  asm$ = asm$ + CHR$(&HB9) + CHR$(&H1) + CHR$(&H0)          'MOV     CX,0001π  asm$ = asm$ + CHR$(&HCD) + CHR$(&H21)                     'INT     21π  asm$ = asm$ + CHR$(&H1F)                                  'POP     DSπ  asm$ = asm$ + CHR$(&H8B) + CHR$(&H5E) + CHR$(&HA)         'MOV     BX,[BP+0A]π  asm$ = asm$ + CHR$(&H89) + CHR$(&H7)                      'MOV     [BX],AXπ  asm$ = asm$ + CHR$(&HB8) + CHR$(&H0) + CHR$(&H0)          'MOV     AX,0000π  asm$ = asm$ + CHR$(&H15) + CHR$(&H0) + CHR$(&H0)          'ADC     AX,0000π  asm$ = asm$ + CHR$(&H8B) + CHR$(&H5E) + CHR$(&HC)         'MOV     BX,[BP+0C]π  asm$ = asm$ + CHR$(&H89) + CHR$(&H7)                      'MOV     [BX],AXπ  asm$ = asm$ + CHR$(&H5E)                                  'POP     SIπ  asm$ = asm$ + CHR$(&H7)                                   'POP     ESπ  asm$ = asm$ + CHR$(&H5F)                                  'POP     DIπ  asm$ = asm$ + CHR$(&H5D)                                  'POP     BPπ  asm$ = asm$ + CHR$(&HCA) + CHR$(&H12) + CHR$(&H0)         'RETF    0012ππ  lfn.longname$ = longname$ + CHR$(0)π  lfn.shortname$ = SPACE$(67)π  π  lfn.longnameseg% = VARSEG(lfn.longname$)π  lfn.longnameoff% = SADD(lfn.longname$)π  lfn.shortnameseg% = VARSEG(lfn.shortname$)π  lfn.shortnameoff% = SADD(lfn.shortname$)ππ  DEF SEG = VARSEG(asm$)π  CALL absolute(dummy%, dummy%, dummy%, dummy%, dummy%, lfn.longnameseg%, lfn.longnameoff%, lfn.shortnameseg%, lfn.shortnameoff%, SADD(asm$))π  DEF SEGππ  iserror% = lfn.longnameseg%π  errorcode% = lfn.longnameoff%π π  IF iserror% THENπ    errval = errorcode%π  ELSEπ    errval = 0π    shortname$ = ""π    FOR i% = 1 TO 67π      ch$ = MID$(lfn.shortname$, i%, 1)π      IF ch$ <> CHR$(0) THENπ        shortname$ = shortname$ + ch$π      ELSEπ        EXIT FORπ      END IFπ    NEXTπ    lfn.l2s$ = shortname$π  END IFππEND FUNCTIONππ'lfn.mkdir -- Create/Make Directoryπ'INPUT:π'  dirname$ - Name of the directory to create.π'SUCCESS:π'  * New directory createdπ'  * Global variable errval set to zero.π'FAIL:π'  * Global variable errval set to &h7100 if function is not supported.π'    (probably does not support LFN)π'  * Global variable errval set to non-zero if an error occurs and the taskπ'    could not be completed successfully.πSUB lfn.mkdir (dirname$)ππ  asm$ = ""π  asm$ = asm$ + CHR$(&H55)                                       'PUSH    BPπ  asm$ = asm$ + CHR$(&H89) + CHR$(&HE5)                          'MOV     BP,SPπ  asm$ = asm$ + CHR$(&H1E)                                       'PUSH    DSπ  asm$ = asm$ + CHR$(&H8B) + CHR$(&H5E) + CHR$(&H6)              'MOV     BX,[BP+06]π  asm$ = asm$ + CHR$(&H8B) + CHR$(&H17)                          'MOV     DX,[BX]π  asm$ = asm$ + CHR$(&H8B) + CHR$(&H5E) + CHR$(&H8)              'MOV     BX,[BP+08]π  asm$ = asm$ + CHR$(&H8E) + CHR$(&H1F)                          'MOV     DS,[BX]π  asm$ = asm$ + CHR$(&HB8) + CHR$(&H39) + CHR$(&H71)             'MOV     AX,7139π  asm$ = asm$ + CHR$(&HCD) + CHR$(&H21)                          'INT     21π  asm$ = asm$ + CHR$(&H1F)                                       'POP     DSπ  asm$ = asm$ + CHR$(&H8B) + CHR$(&H5E) + CHR$(&H6)              'MOV     BX,[BP+06]π  asm$ = asm$ + CHR$(&H89) + CHR$(&H7)                           'MOV     [BX],AXπ  asm$ = asm$ + CHR$(&H8B) + CHR$(&H5E) + CHR$(&H8)              'MOV     BX,[BP+08]π  asm$ = asm$ + CHR$(&HB8) + CHR$(&H0) + CHR$(&H0)               'MOV     AX,0000π  asm$ = asm$ + CHR$(&H15) + CHR$(&H0) + CHR$(&H0)               'ADC     AX,0000π  asm$ = asm$ + CHR$(&H89) + CHR$(&H7)                           'MOV     [BX],AXπ  asm$ = asm$ + CHR$(&H5D)                                       'POP     BPπ  asm$ = asm$ + CHR$(&HCA) + CHR$(&H12) + CHR$(&H0)              'RETF    0012ππ  lfn.dirname$ = dirname$ + CHR$(0)π  lfn.dirnameseg% = VARSEG(lfn.dirname$)π  lfn.dirnameoff% = SADD(lfn.dirname$)ππ  DEF SEG = VARSEG(asm$)π  CALL absolute(dummy%, dummy%, dummy%, dummy%, dummy%, dummy%, dummy%, lfn.dirnameseg%, lfn.dirnameoff%, SADD(asm$))π  DEF SEGππ  iserror% = lfn.dirnameseg%π  errorcode% = lfn.dirnameoff%ππ  IF iserror% THENπ    errval = errorcode%π  ELSEπ    errval = 0π  END IFππEND SUBππ'lfn.ren -- Rename file/directoryπ'INPUT:π'  oldname$ - Name of the file/directory to change.π'  newname$ - Name of the new file/directory name.π'SUCCESS:π'  * Specified file/directory name changed to the specified name.π'  * Global variable errval set to zero.π'FAIL:π'  * Global variable errval set to &h7100 if function is not supported.π'    (probably does not support LFN)π'  * Global variable errval set to non-zero if an error occurs and the taskπ'    could not be completed successfully.πSUB lfn.ren (oldname$, newname$)ππ  asm$ = ""π  asm$ = asm$ + CHR$(&H55)                                  'PUSH    BPπ  asm$ = asm$ + CHR$(&H89) + CHR$(&HE5)                     'MOV     BP,SPπ  asm$ = asm$ + CHR$(&H57)                                  'PUSH    DIπ  asm$ = asm$ + CHR$(&H6)                                   'PUSH    ESπ  asm$ = asm$ + CHR$(&H1E)                                  'PUSH    DSπ  asm$ = asm$ + CHR$(&HB8) + CHR$(&H56) + CHR$(&H71)        'MOV     AX,7156π  asm$ = asm$ + CHR$(&H8B) + CHR$(&H5E) + CHR$(&H6)         'MOV     BX,[BP+06]π  asm$ = asm$ + CHR$(&H8B) + CHR$(&H3F)                     'MOV     DI,[BX]π  asm$ = asm$ + CHR$(&H8B) + CHR$(&H5E) + CHR$(&H8)         'MOV     BX,[BP+08]π  asm$ = asm$ + CHR$(&H8E) + CHR$(&H7)                      'MOV     ES,[BX]π  asm$ = asm$ + CHR$(&H8B) + CHR$(&H5E) + CHR$(&HA)         'MOV     BX,[BP+0A]π  asm$ = asm$ + CHR$(&H8B) + CHR$(&H17)                     'MOV     DX,[BX]π  asm$ = asm$ + CHR$(&H8B) + CHR$(&H5E) + CHR$(&HC)         'MOV     BX,[BP+0C]π  asm$ = asm$ + CHR$(&H8E) + CHR$(&H1F)                     'MOV     DS,[BX]π  asm$ = asm$ + CHR$(&HCD) + CHR$(&H21)                     'INT     21π  asm$ = asm$ + CHR$(&H1F)                                  'POP     DSπ  asm$ = asm$ + CHR$(&H8B) + CHR$(&H5E) + CHR$(&H6)         'MOV     BX,[BP+06]π  asm$ = asm$ + CHR$(&H89) + CHR$(&H7)                      'MOV     [BX],AXπ  asm$ = asm$ + CHR$(&HB8) + CHR$(&H0) + CHR$(&H0)          'MOV     AX,0000π  asm$ = asm$ + CHR$(&H15) + CHR$(&H0) + CHR$(&H0)          'ADC     AX,0000π  asm$ = asm$ + CHR$(&H8B) + CHR$(&H5E) + CHR$(&H8)         'MOV     BX,[BP+08]π  asm$ = asm$ + CHR$(&H89) + CHR$(&H7)                      'MOV     [BX],AXπ  asm$ = asm$ + CHR$(&H7)                                   'POP     ESπ  asm$ = asm$ + CHR$(&H5F)                                  'POP     DIπ  asm$ = asm$ + CHR$(&H5D)                                  'POP     BPπ  asm$ = asm$ + CHR$(&HCA) + CHR$(&H12) + CHR$(&H0)         'RETF    0012ππ  lfn.oldname$ = oldname$ + CHR$(0)π  lfn.newname$ = newname$ + CHR$(0)ππ  lfn.oldnameseg% = VARSEG(lfn.oldname$)π  lfn.oldnameoff% = SADD(lfn.oldname$)π  lfn.newnameseg% = VARSEG(lfn.newname$)π  lfn.newnameoff% = SADD(lfn.newname$)ππ  DEF SEG = VARSEG(asm$)π  CALL absolute(dummy%, dummy%, dummy%, dummy%, dummy%, lfn.oldnameseg%, lfn.oldnameoff%, lfn.newnameseg%, lfn.newnameoff%, SADD(asm$))π  DEF SEGππ  iserror% = lfn.newnameseg%π  errorcode% = lfn.newnameoff%ππ  IF iserror% THENπ    errval = errorcode%π  ELSEπ    errval = 0π  END IFππEND SUBππ'lfn.rmdir -- Remove Directoryπ'INPUT:π'  dirname$ - Name of the directory to remove.π'SUCCESS:π'  * Specified directory removed.π'  * Global variable errval set to zero.π'FAIL:π'  * Global variable errval set to &h7100 if function is not supported.π'    (probably does not support LFN)π'  * Global variable errval set to non-zero if an error occurs and the taskπ'    could not be completed successfully.πSUB lfn.rmdir (dirname$)π  asm$ = ""π  asm$ = asm$ + CHR$(&H55)                                       'PUSH    BPπ  asm$ = asm$ + CHR$(&H89) + CHR$(&HE5)                          'MOV     BP,SPπ  asm$ = asm$ + CHR$(&H1E)                                       'PUSH    DSπ  asm$ = asm$ + CHR$(&H8B) + CHR$(&H5E) + CHR$(&H6)              'MOV     BX,[BP+06]π  asm$ = asm$ + CHR$(&H8B) + CHR$(&H17)                          'MOV     DX,[BX]π  asm$ = asm$ + CHR$(&H8B) + CHR$(&H5E) + CHR$(&H8)              'MOV     BX,[BP+08]π  asm$ = asm$ + CHR$(&H8E) + CHR$(&H1F)                          'MOV     DS,[BX]π  asm$ = asm$ + CHR$(&HB8) + CHR$(&H3A) + CHR$(&H71)             'MOV     AX,713Aπ  asm$ = asm$ + CHR$(&HCD) + CHR$(&H21)                          'INT     21π  asm$ = asm$ + CHR$(&H1F)                                       'POP     DSπ  asm$ = asm$ + CHR$(&H8B) + CHR$(&H5E) + CHR$(&H6)              'MOV     BX,[BP+06]π  asm$ = asm$ + CHR$(&H89) + CHR$(&H7)                           'MOV     [BX],AXπ  asm$ = asm$ + CHR$(&H8B) + CHR$(&H5E) + CHR$(&H8)              'MOV     BX,[BP+08]π  asm$ = asm$ + CHR$(&HB8) + CHR$(&H0) + CHR$(&H0)               'MOV     AX,0000π  asm$ = asm$ + CHR$(&H15) + CHR$(&H0) + CHR$(&H0)               'ADC     AX,0000π  asm$ = asm$ + CHR$(&H89) + CHR$(&H7)                           'MOV     [BX],AXπ  asm$ = asm$ + CHR$(&H5D)                                       'POP     BPπ  asm$ = asm$ + CHR$(&HCA) + CHR$(&H12) + CHR$(&H0)              'RETF    0012ππ  lfn.dirname$ = dirname$ + CHR$(0)π  lfn.dirnameseg% = VARSEG(lfn.dirname$)π  lfn.dirnameoff% = SADD(lfn.dirname$)ππ  DEF SEG = VARSEG(asm$)π  CALL absolute(dummy%, dummy%, dummy%, dummy%, dummy%, dummy%, dummy%, lfn.dirnameseg%, lfn.dirnameoff%, SADD(asm$))π  DEF SEGππ  iserror% = lfn.dirnameseg%π  errorcode% = lfn.dirnameoff%ππ  IF iserror% THENπ    errval = errorcode%π  ELSEπ    errval = 0π  END IFππEND SUBππ'lfn.s2l$ -- Convert short filename to long filenameπ'INPUT:π'  shortname$ - Short filename to convert to long filename.π'SUCCESS:π'  * Return long filename version of the short filename.π'  * Global variable errval set to zero.π'FAIL:π'  * Return "".π'  * Global variable errval set to &h7100 if function is not supported.π'    (probably does not support LFN)π'  * Global variable errval set to non-zero if an error occurs and the taskπ'    could not be completed successfully.πFUNCTION lfn.s2l$ (shortname$)ππ  asm$ = ""π  asm$ = asm$ + CHR$(&H55)                                  'PUSH    BPπ  asm$ = asm$ + CHR$(&H89) + CHR$(&HE5)                     'MOV     BP,SPπ  asm$ = asm$ + CHR$(&H57)                                  'PUSH    DIπ  asm$ = asm$ + CHR$(&H6)                                   'PUSH    ESπ  asm$ = asm$ + CHR$(&H56)                                  'PUSH    SIπ  asm$ = asm$ + CHR$(&H1E)                                  'PUSH    DSπ  asm$ = asm$ + CHR$(&H8B) + CHR$(&H5E) + CHR$(&H6)         'MOV     BX,[BP+06]π  asm$ = asm$ + CHR$(&H8B) + CHR$(&H3F)                     'MOV     DI,[BX]π  asm$ = asm$ + CHR$(&H8B) + CHR$(&H5E) + CHR$(&H8)         'MOV     BX,[BP+08]π  asm$ = asm$ + CHR$(&H8E) + CHR$(&H7)                      'MOV     ES,[BX]π  asm$ = asm$ + CHR$(&H8B) + CHR$(&H5E) + CHR$(&HA)         'MOV     BX,[BP+0A]π  asm$ = asm$ + CHR$(&H8B) + CHR$(&H37)                     'MOV     SI,[BX]π  asm$ = asm$ + CHR$(&H8B) + CHR$(&H5E) + CHR$(&HC)         'MOV     BX,[BP+0C]π  asm$ = asm$ + CHR$(&H8E) + CHR$(&H1F)                     'MOV     DS,[BX]π  asm$ = asm$ + CHR$(&HB8) + CHR$(&H60) + CHR$(&H71)        'MOV     AX,7160π  asm$ = asm$ + CHR$(&HB9) + CHR$(&H2) + CHR$(&H0)          'MOV     CX,0002π  asm$ = asm$ + CHR$(&HCD) + CHR$(&H21)                     'INT     21π  asm$ = asm$ + CHR$(&H1F)                                  'POP     DSπ  asm$ = asm$ + CHR$(&H8B) + CHR$(&H5E) + CHR$(&HA)         'MOV     BX,[BP+0A]π  asm$ = asm$ + CHR$(&H89) + CHR$(&H7)                      'MOV     [BX],AXπ  asm$ = asm$ + CHR$(&HB8) + CHR$(&H0) + CHR$(&H0)          'MOV     AX,0000π  asm$ = asm$ + CHR$(&H15) + CHR$(&H0) + CHR$(&H0)          'ADC     AX,0000π  asm$ = asm$ + CHR$(&H8B) + CHR$(&H5E) + CHR$(&HC)         'MOV     BX,[BP+0C]π  asm$ = asm$ + CHR$(&H89) + CHR$(&H7)                      'MOV     [BX],AXπ  asm$ = asm$ + CHR$(&H5E)                                  'POP     SIπ  asm$ = asm$ + CHR$(&H7)                                   'POP     ESπ  asm$ = asm$ + CHR$(&H5F)                                  'POP     DIπ  asm$ = asm$ + CHR$(&H5D)                                  'POP     BPπ  asm$ = asm$ + CHR$(&HCA) + CHR$(&H12) + CHR$(&H0)         'RETF    0012ππ  lfn.shortname$ = shortname$ + CHR$(0)π  lfn.longname$ = SPACE$(261)π π  lfn.shortnameseg% = VARSEG(lfn.shortname$)π  lfn.shortnameoff% = SADD(lfn.shortname$)π  lfn.longnameseg% = VARSEG(lfn.longname$)π  lfn.longnameoff% = SADD(lfn.longname$)ππ  DEF SEG = VARSEG(asm$)π  CALL absolute(dummy%, dummy%, dummy%, dummy%, dummy%, lfn.shortnameseg%, lfn.shortnameoff%, lfn.longnameseg%, lfn.longnameoff%, SADD(asm$))π  DEF SEGππ  iserror% = lfn.shortnameseg%π  errorcode% = lfn.shortnameoff%ππ  IF iserror% THENπ    errval = errorcode%π  ELSEπ    errval = 0π    longname$ = ""π    FOR i% = 1 TO 261π      ch$ = MID$(lfn.longname$, i%, 1)π      IF ch$ <> CHR$(0) THENπ        longname$ = longname$ + ch$π      ELSEπ        EXIT FORπ      END IFπ    NEXTπ    lfn.s2l$ = longname$π  END IFππEND FUNCTIONπPhil Weber                     FILE COPY                      www.ocf.berkeley.edu/~horie/   04-10-94 (00:00)       QB, QBasic, PDS        156  5225     FILECOPY.BAS' FILECOPY.BAS by Phil Weberπ' typed in by T. Horie 4/10/94π' interface design by T. Horieπ' demonstrates integrated assembly routines in QBasic.π' To run in QBasic, QBASIC /RUN FCOPYC.BASπ' for QB45 type, QB /RUN FCOPYC.BAS /LππDECLARE SUB FILECOPY (SRC$, DEST$, BUFFER%())πDECLARE FUNCTION EXIST% (FILESPEC$)πDECLARE SUB GETLN (MAXLN%, WORDS$, X1%, Y1%)πDECLARE SUB INT86 (INTNUM%, REGS AS ANY)πDECLARE SUB READARRAY (HANDLE%, BUFFER%(), BYTES&)πDECLARE SUB WRITEARRAY (HANDLE%, BUFFER%(), BYTES&)ππDEFINT A-ZπTYPE REGTYPEπ        AX AS INTEGERπ        BX AS INTEGERπ        CX AS INTEGERπ        DX AS INTEGERπ        BP AS INTEGERπ        SI AS INTEGERπ        DI AS INTEGERπ        FLAGS AS INTEGERπ        DS AS INTEGERπ        ES AS INTEGERπEND TYPEππDIM SHARED REGS AS REGTYPEππREDIM SHARED INTRPT(1 TO 50)πDEF SEG = VARSEG(INTRPT(1))πADDRESS = VARPTR(INTRPT(1))πFOR I = 0 TO 99π        READ Aπ        POKE ADDRESS + I, AπNEXTππREDIM BUFFER(1 TO 15360)πREM MAXIMUM IS A 15K BUFFER...πCOLOR 15, 0: CLS : M = 12πCOLOR 15, 1πLOCATE 1, M:     PRINT "▐▀▀▀▀▀▀▀▀▀▀▀                            ▀▀▀▀▀▀▀▀▀▀▀▀▀█"πLOCATE 1, M + 12: COLOR 8, 7: PRINT " FILECOPY.BAS by Phil Weber "πCOLOR 15, 1πLOCATE 2, M:     PRINT "▐                                                    █▒▒"πLOCATE 3, M:     PRINT "▐                                                    █▒▒"πLOCATE 4, M:     PRINT "▐                                                    █▒▒"πLOCATE 5, M:     PRINT "▐▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄█▒▒"πLOCATE 6, M + 2: PRINT "▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒"πLOCATE 4, M + 6: COLOR 7, 1: PRINT "Interface design by Toshihiro Horie 4/94": COLOR 15, 1πDEF SEG = 0: POKE &H417, &H40: DEF SEGπLOCATE 2, M + 3: PRINT "     Enter source filename:"πLOCATE 3, M + 3: PRINT "Enter destination filename:"πWORDS$ = "": MAXLN% = 20: X1% = M + 30: Y1% = 2πCALL GETLN(MAXLN%, WORDS$, X1%, Y1%)πSRC$ = WORDS$: WORDS$ = ""πMAXLN% = 20: X1% = M + 30: Y1% = 3πCALL GETLN(MAXLN%, WORDS$, X1%, Y1%)πDEST$ = WORDS$πLOCATE 9, 10: PRINT STRING$(60, 32): LOCATE 10, 10: PRINT STRING$(60, 32)πLOCATE 13, 10: PRINT STRING$(60, 32)πLOCATE 11, 10: PRINT "     ├┴┴┴┴┴┴┴┴┴┼┴┴┴┴┴┴┴┴┴┼┴┴┴┴┴┴┴┴┴┼┴┴┴┴┴┴┴┴┴┴┼┴┴┴┴┴┴┴┴┴┤   "πLOCATE 12, 10: PRINT "     0        20        40        60         80       100%  "πCALL FILECOPY(SRC$, DEST$, BUFFER())πENDππDATA 85,139,236,86,87,30,139,118,6,139,4,139,92,2,139,76,4,139,84,6πDATA 139,108,8,139,124,12,142,68,18,255,116,10,131,124,18,255,117,2,30,7πDATA 131,124,16,255,116,3,142,92,16πDATA 94,205,33,85,139,236,30,86,142,94,2,139,118,14,137,4,137,92,2,137,76,4πDATA 137,84,6,143,68,10,143,68,16,143,68,8,137,124,12,140,68,18,156,143,68,14πDATA 95,95,94,93,202,2,0ππFUNCTION EXIST (FILESPEC$)πTEMP$ = FILESPEC$ + CHR$(0)πREGS.AX = &H4E00πREGS.CX = &HFFπREGS.DS = VARSEG(TEMP$)πREGS.DX = SADD(TEMP$)πCALL INT86(&H21, REGS)πIF (REGS.FLAGS AND 1) THEN EXIST = 0 ELSE EXIST = -1πEND FUNCTIONππSUB FILECOPY (SRC$, DEST$, BUFFER())πIF NOT EXIST(SRC$) THEN EXIT SUBπSRC = FREEFILEπOPEN SRC$ FOR BINARY AS SRCπDEST = FREEFILEπOPEN DEST$ FOR OUTPUT AS DESTπREMAINING& = LOF(SRC)πwhole& = LOF(SRC)πDO WHILE REMAINING& > 0π        BYTES& = UBOUND(BUFFER) * 2π        CALL READARRAY(SRC, BUFFER(), BYTES&)π        IF BYTES& = -1 THEN EXIT DOπ        CALL WRITEARRAY(DEST, BUFFER(), BYTES&)π        IF BYTES& <= 0 THEN EXIT DOπ        REMAINING& = REMAINING& - BYTES&π        PERCENT% = INT(100 - ((REMAINING& / whole&) * 100))π        LOCATE 9, 15: PRINT STR$(PERCENT%) + "% copied... "π        COLOR 14, 1: LOCATE 10, 15: PRINT STRING$(PERCENT% / 2 + 2, 219): COLOR 15, 1π        LOOPπCLOSE SRC, DESTπLOCATE 13, 10πPRINT "   Finished transferring "; STR$(whole&); " bytes."πEND SUBππSUB GETLN (MAXLN%, WORDS$, X1%, Y1%) STATICπhigh:πlnwd = 0: LOCATE Y1%, X1%: PRINT STRING$(MAXLN, 95): WORDS$ = "": LOCATE Y1%, X1%πTOP:πletter$ = INPUT$(1): lnwd = LEN(WORD$)πIF letter$ = CHR$(13) THEN GOTO DONEπIF letter$ = CHR$(8) AND lnwd > 1 THEN WORD$ = LEFT$(WORD$, lnwd - 1): X1% = X1% - 1: LOCATE Y1%, X1%: GOTO SKIPWDπIF letter$ = CHR$(8) AND lnwd = 0 THEN GOTO highπWORDS$ = WORDS$ + letter$πLOCATE Y1%, X1%: PRINT WORDS$πIF LEN(WORDS$) = MAXLN% THEN GOTO DONEπSKIPWD:πGOTO TOPπDONE:πEND SUBππSUB INT86 (INTNUM, REGS AS REGTYPE)πDEF SEG = VARSEG(INTRPT(1))πADDRESS = VARPTR(INTRPT(1))πPOKE ADDRESS + 51, INTNUMπCALL ABSOLUTE(REGS, ADDRESS)πEND SUBππSUB READARRAY (HANDLE, BUFFER(), BYTES&)πREGS.AX = &H3F00πREGS.BX = FILEATTR(HANDLE, 2)πIF BYTES& > 32767 THEN BYTES& = BYTES& - 65536πREGS.CX = BYTES&πREGS.DS = VARSEG(BUFFER(LBOUND(BUFFER)))πREGS.DX = VARPTR(BUFFER(LBOUND(BUFFER)))πREGS.ES = -1πCALL INT86(&H21, REGS)πBYTES& = REGS.AX AND &HFFFF&πIF (REGS.FLAGS AND 1) THEN BYTES& = -1πEND SUBππSUB WRITEARRAY (HANDLE, BUFFER(), BYTES&)πREGS.AX = &H4000πREGS.BX = FILEATTR(HANDLE, 2)πIF BYTES > 32767 THEN BYTES& = BYTES& - 65536πREGS.CX = BYTES&πREGS.DS = VARSEG(BUFFER(LBOUND(BUFFER)))πREGS.DX = VARPTR(BUFFER(LBOUND(BUFFER)))πREGS.ES = -1πCALL INT86(&H21, REGS)πBYTES& = REGS.AX AND &HFFFF&πIF (REGS.FLAGS AND 1) THEN BYTES& = -1πEND SUBπJack Hudgions                  MODIFY ENVIRONMENT SETTINGS    FidoNet QUIK_BAS Echo          12-09-96 (00:21)       QB, PDS                421  15544    ENVIRO.BAS  '***********************************************************************π'* MODULE Environπ'*π'* EXTERNAL ROUTINE(S)π'*    QBX.LIBπ'*       SUB InterruptX (IntNum%, RegsX AS RegTypeX, RegsX AS RegTypeX)π'*π'* CREDIT(S)π'*    Douglas Lusher, Fidonet QuickBASIC, 07-11-94π'*π'* MODIFICATIONS:π'*    Tue, 07-20-94 - Generally cleaned up the code.  Modified theπ'*    following routines:π'*π'*       FUNCTION MasterEnvInt$π'*          Removed ERROR statement, added ErrCode% parameter andπ'*          assigned unique error codes for each error condition.π'*π'*          Changed "Tmp$ = SPACE$(128)" to "Tmp$ = SPACE(256)" toπ'*          support 4DOS which allows environment variables > 128 bytes.π'*          Actually, 4DOS allows environment variables somewhat < 256π'*          bytes, but this is good enough. :)π'*π'*       FUNCTION MasterEnvSet%π'*          Changed from SUB to FUNCTION - ErrCode% parameter no longerπ'*          needed.π'*π'*       FUNCTION MasterEnvStr$π'*          Removed ERROR statement, added ErrCode% parameter andπ'*          assigned unique error codes for each error condition.π'*π'*          Changed "Tmp$ = SPACE$(128)" to "Tmp$ = SPACE(256)" toπ'*          support 4DOS which allows environment variables > 128 bytes.π'***********************************************************************π' additional modifications by Jack Hudgions 02/01/95:π'   changed MasterEnvSet Function as suggested by Mark Northcutt.πDEFINT A-Zππ'$INCLUDE: 'qbx.bi'ππDECLARE FUNCTION MasterEnvFree% ()πDECLARE FUNCTION MasterEnvInt$ (StringNum%, ErrCode%)πDECLARE FUNCTION MasterEnvSeg& ()πDECLARE FUNCTION MasterEnvSet% (Env$)πDECLARE FUNCTION MasterEnvSize% ()πDECLARE FUNCTION MasterEnvStr$ (DefStr$, ErrCode%)ππ'A demo:πPRINT "Master Environment info:"ππPRINT "      Size ="; MasterEnvSize%πPRINT "      Used ="; MasterEnvSize% - MasterEnvFree%πPRINT "      Free ="; MasterEnvFree%πPRINT "   Segment = "; HEX$(MasterEnvSeg&)πPRINTπPRINT "   Current environment variables are:"ππDOπ   StringNum% = StringNum% + 1π   Environment$ = MasterEnvInt$(StringNum%, ErrCode%)π   IF ErrCode% = 0 THENπ      EqualPtr% = INSTR(Environment$, "=")π      EnvName$ = LEFT$(Environment$, EqualPtr% - 1)π      EnvVal$ = MID$(Environment$, EqualPtr% + 1)ππ      PRINT "      "; UCASE$(EnvName$)π      PRINT "         "; LEFT$(EnvVal$, 67);ππ      IF LEN(EnvVal$) > 67 THENπ     PRINT "..."π     PRINT "         ..."; MID$(EnvVal$, 68)π      ELSEπ     PRINTπ      END IFπ   END IFπLOOP UNTIL ErrCode% > 0ππPRINT : INPUT "   Enter an environment variable to retrieve: ", DefStr$ππEnvironment$ = MasterEnvStr$(DefStr$, ErrCode)πSELECT CASE ErrCode%π   CASE 0: PRINT "      "; DefStr$; "="; Environment$π   CASE 2: PRINT "      ERROR - you entered a '=' character!"π   CASE 3: PRINT "      ERROR - you entered a NULL character!"πEND SELECTππPRINTπINPUT "   Enter an environment variable name to modify: ", EnvName$ππIF LEN(EnvName$) THENπ   INPUT "                                Enter new value: ", EnvVal$π   IF LEN(EnvVal$) THENπ      Env$ = EnvName$ + "=" + EnvVal$π      ErrCode% = MasterEnvSet%(Env$)π   END IFπEND IFππPRINT : PRINT "Type 'SET' at the DOS prompt to see the new values"ππENDππ'***********************************************************************π'* FUNCTION MasterEnvFree%π'*π'* PURPOSEπ'*    Returns the amount of free space in the master environment.π'*π'* INTERNAL ROUTINE(S)π'*    FUNCTION MasterEnvSeg& ()π'*    FUNCTION MasterEnvSize% ()π'***********************************************************************πFUNCTION MasterEnvFree%π   EnvPtr% = -1                              'Pointer into environmentππ   DEF SEG = MasterEnvSeg&                   'Set segment to Master Env.π   DOπ      DOπ     EnvPtr% = EnvPtr% + 1               'Examine next characterπ      LOOP WHILE PEEK(EnvPtr%)               'Loop until a double NULLπ   LOOP WHILE PEEK(EnvPtr% + 1)              '  (terminates the envir.)π   DEF SEG                                   'Restore default segmentππ   'Assign return valueπ   MasterEnvFree% = MasterEnvSize% - (EnvPtr% + 2)πEND FUNCTIONππ'***********************************************************************π'* FUNCTION MasterEnvInt$π'*π'* PURPOSEπ'*    Returns an environment string specified by StringNum%.π'*π'*    ErrCode% return values:π'*       1  StringNum% < 1π'*       2  StringNum% > the number of environment variablesπ'*π'* INTERNAL ROUTINE(S)π'*    FUNCTION MasterEnvSeg& ()π'***********************************************************************πFUNCTION MasterEnvInt$ (StringNum%, ErrCode%)π   MasterEnvInt$ = ""                        'Initialize some variablesπ   EnvPtr% = -1                              'Pointer into environmentπ   Count% = 0                                '# of environ. vars. foundπ   ErrCode% = 0                              'Return valueππ   IF StringNum% < 1 THENπ      ErrCode% = 1                           'Must be >= 1π      EXIT FUNCTION                          'Bail outπ   END IFππ   DEF SEG = MasterEnvSeg&                   'Set segment to Master Env.ππ   DOπ      IF PEEK(EnvPtr% + 1) = 0 THEN          'StringNum% > # ofπ     ErrCode% = 2                        '  environment variablesπ     EXIT DO                             'Bail outπ      END IFππ      Count% = Count + 1                     'Next env. variableπ      IF Count% < StringNum% THEN            'π     DO                                  'Find end of current var.π        EnvPtr% = EnvPtr% + 1            'Examine next characterπ        IF PEEK(EnvPtr%) = 0 THEN        'NULL (end) foundπ           EXIT DO                       '  exit loopπ        END IFπ     LOOPπ      ELSE                                   'Found specified env. var.π     Tmp$ = SPACE$(256)                  'This is where we'llπ                         '  hold the resultπ     StrPtr% = 0π     DO                                  'Find end of env. variableπ        EnvPtr% = EnvPtr% + 1            'Examine next characterπ        EnvCh% = PEEK(EnvPtr%)π        IF EnvCh% = 0 THEN               'Loop untilπ           EXIT DO                       '  NULL is foundπ        END IFππ        StrPtr% = StrPtr% + 1            'Insert characterπ        MID$(Tmp$, StrPtr%, 1) = CHR$(EnvCh%)π     LOOPππ     MasterEnvInt$ = LEFT$(Tmp$, StrPtr%)'Assign return valueπ     EXIT DOπ      END IFπ   LOOPππ   DEF SEG                                   'Restore default segmentπEND FUNCTIONππ'***********************************************************************π'* FUNCTION MasterEnvSeg&π'*π'* PURPOSEπ'*    Uses (an apparently undocumented) feature of DOS ISR 21H, Functionπ'*    35H (Get Interrupt Vector) to return the segment of the Masterπ'*    Environment.π'*π'* EXTERNAL ROUTINE(S)π'*    SUB InterruptX (IntNum%, InReg AS RegTypeX, OutReg AS RegTypeX)π'***********************************************************************πFUNCTION MasterEnvSeg& STATICπ   DIM RegsX AS RegTypeXππ   RegsX.ax = &H352Eπ   InterruptX &H21, RegsX, RegsXππ   DEF SEG = RegsX.esπ   MasterEnvSeg& = PEEK(&H2C) + PEEK(&H2D) * 256&π   DEF SEG                                   'Restore default segmentπEND FUNCTIONππ'***********************************************************************π'* FUNCTION MasterEnvSet%π'*π'* PURPOSEπ'*    Sets the specified environment string (Env$) in the masterπ'*    environment.  Returns 1 if Env$ is empty, if Env$ contains a NULL,π'*    or if Env$ does not contain a "=".  Returns 2 if the resultπ'*    (after adding/changing Env$) is too long to fit into the maximumπ'*    Master Environment size.π'*π'* INTERNAL ROUTINE(S)π'*    FUNCTION MasterEnvSeg& ()π'*    FUNCTION MasterEnvSize% ()π'***********************************************************************πFUNCTION MasterEnvSet% (Env$)π   null$ = CHR$(0)ππ   IF LEN(Env$) = 0 THEN                     'Is it set?π      MasterEnvSet% = 1                      '  no, exitπ      EXIT FUNCTION                          '  with errorπ   END IFππ   IF INSTR(Env$, null$) THEN                'Does it have a null?π      MasterEnvSet% = 2                      '  Yes, exitπ      EXIT FUNCTION                          '  with error.π   END IFππ   EqualPtr% = INSTR(Env$, "=")              'Find the "="π   IF EqualPtr% <= 1 THEN                    'Was it found?π      MasterEnvSet% = 3                      '  No, exitπ      EXIT FUNCTION                          '  with errorπ   END IFππ   EVar$ = UCASE$(LEFT$(Env$, EqualPtr%))    'Grab the environment nameπ   EnvVal$ = MID$(Env$, EqualPtr% + 1)       'Grab the environment valueππ   EnvSize% = MasterEnvSize%π   EnvSeg& = MasterEnvSeg&ππ   Tmp$ = SPACE$(EnvSize%)π   DEF SEG = EnvSeg&π   FOR EqualPtr% = 1 TO LEN(Tmp$)            'Copy the env. to a stringπ      MID$(Tmp$, EqualPtr%, 1) = CHR$(PEEK(EqualPtr% - 1))π   NEXTπ   DEF SEG                                   'Restore default segmentππ   'Chop it off at the end of the last environment stringπ   Tmp$ = LEFT$(Tmp$, INSTR(Tmp$, null$ + null$))ππ   IF LEN(Tmp$) = 1 THEN                     'If the environment happensπ      Tmp$ = ""                              '  to be emptyπ   END IFππ'   EnvVarPtr% = INSTR(Tmp$, EVar$)           'Is Env$ is in the_π' environ?π' Mark's modification begin.π   EnvVarPtr% = INSTR(Tmp$, null$ + EVar$) + 1'Is Env$ is in the_π' environ?π   IF EnvVarPtr% = 0 THENπ       EnvVarPtr% = INSTR(Tmp$, EVar$)     'if null+var is not there,_π' maybe it'iπ       IF EnvVarPtr% > 1 THEN EnvVarPtr% = 0'if not #1 then found a_π' substr laterπ   END IFπ' Mark's modification end.π   IF EnvVarPtr% THENπ      'Find the beginning of the next environment variableπ      NextPtr% = INSTR(EnvVarPtr%, Tmp$, null$) + 1ππ      IF NextPtr% > LEN(Tmp$) THEN           'EVar$ is the last var. inπ     Tmp$ = LEFT$(Tmp$, EnvVarPtr% - 1)  '  the environ, so keepπ      ELSE                                   '  everything before it.π     'EVar$ isn't the last variable so move everything after it upπ     Tmp$ = LEFT$(Tmp$, EnvVarPtr% - 1) + MID$(Tmp$, NextPtr%)π      END IFπ   END IFππ   IF LEN(EnvVal$) THEN                      'Are we setting it,π      'Add Env$ to the end of the envir. and terminate with two nullsπ      Tmp$ = Tmp$ + EVar$ + EnvVal$ + null$ + null$π      IF LEN(Tmp$) > EnvSize% THEN           'Is the result too long?π     MasterEnvSet% = 2                   'Yes, exit withπ     EXIT FUNCTION                       '  errorπ      END IFπ   ELSE                                      'Or removing it?π      'If EnvVal$ is empty then all we wanted to doπ      '  was remove the variable from the environmentπ      Tmp$ = Tmp$ + null$ππ      IF LEN(Tmp$) = 1 THEN                  'If this happened to be theπ     Tmp$ = Tmp$ + null$                 '  last environ. var., anπ      END IF                                 '  extra null is needed toπ   END IF                                    '  terminate.ππ   DEF SEG = EnvSeg&π   FOR Ptr% = 1 TO LEN(Tmp$)                 'Copy the string back intoπ      POKE Ptr% - 1, ASC(MID$(Tmp$, Ptr%, 1))'  the environmentπ   NEXTπ   DEF SEG                                   'Restore default segmentππ   MasterEnvSet% = 0                         'Everything OKπEND FUNCTIONππ'***********************************************************************π'* FUNCTION MasterEnvSize%π'*π'* PURPOSEπ'*    Returns the size of the master environment in bytes.π'***********************************************************************πFUNCTION MasterEnvSize%π   DEF SEG = MasterEnvSeg& - 1               'Set segment to Master Env.π   MasterEnvSize% = (PEEK(3) + PEEK(4) * 256) * 16π   DEF SEG                                   'Restore default segmentπEND FUNCTIONππ'***********************************************************************π'* FUNCTION MasterEnvStr$π'*π'* PURPOSEπ'*    Returns an environment string specified by DefStr$.π'*π'*    ErrCode% return values:π'*       0     Successπ'*       1     DefStr$ is emptyπ'*       2     DefStr$ contains a "="π'*       3     DefStr$ contains an embedded NULLπ'*π'* INTERNAL ROUTINE(S)π'*    FUNCTION MasterEnvSeg& ()π'***********************************************************************πFUNCTION MasterEnvStr$ (DefStr$, ErrCode%)π   IF LEN(DefStr$) = 0 THENπ      ErrCode% = 1                           'String is emptyπ      EXIT FUNCTION                          'Bail outπ   END IFππ   IF INSTR(DefStr$, "=") THENπ      ErrCode% = 2                           'Invalid environment stringπ      EXIT FUNCTION                          '  (contains a "="), bailπ   END IF                                    '  out.ππ   IF INSTR(DefStr$, CHR$(0)) THENπ      ErrCode% = 3                           'Invalid environment stringπ      EXIT FUNCTION                          '  (contains a NULL), bailπ   END IF                                    '  out.ππ   Tmp$ = UCASE$(DefStr$) + "="π   DefLen% = LEN(Tmp$)π   REDIM DefCh%(1 TO DefLen%)                'Fill DefCh%()π   FOR StrPtr% = 1 TO DefLen%                '  with given environ. var.π      DefCh%(StrPtr%) = ASC(MID$(Tmp$, StrPtr%, 1))π   NEXTππ   MasterEnvStr$ = ""                        'Initialize some variablesπ   Found% = 0π   EnvPtr% = -1ππ   DEF SEG = MasterEnvSeg&                   'Set segment to Master Env.ππ   DOπ      IF PEEK(EnvPtr% + 1) = 0 THEN          'Found terminating NULLπ     EXIT DO                             'Bail outπ      END IFππ      StrPtr% = 0π      DO                                     'Find match for DefStr$π     StrPtr% = StrPtr% + 1               '  (DefCh%()) in environ.π     IF StrPtr% > DefLen% THEN           'Longer than our env. var.π        GOSUB SkipString                 'It isn't this one,π        EXIT DO                          '  skip itπ     END IFππ     EnvPtr% = EnvPtr% + 1               'Pointer into environmentπ     EnvCh% = PEEK(EnvPtr%)              'Get next byte in environ.π     IF EnvCh% = DefCh%(StrPtr%) THEN    'Do the chars. match?π        IF StrPtr% = DefLen% THEN        'Is the length the same?π           Found% = -1                   'Found it!π           EXIT DO                       'Bail outπ        END IFπ     ELSEπ        GOSUB SkipString                 'It isn't this one,π        EXIT DO                          '  skip itπ     END IFπ      LOOPππ      IF Found% THEN                         'If we found it,π     Tmp$ = SPACE$(256)                  'New copy will go hereπ     StrPtr% = 0π     DO UNTIL EnvCh% = 0                 'Grab the valueπ        EnvPtr% = EnvPtr% + 1            '  and insertπ        EnvCh% = PEEK(EnvPtr%)           '  it inπ        StrPtr% = StrPtr% + 1            '  Tmp$π        MID$(Tmp$, StrPtr%, 1) = CHR$(EnvCh%)π     LOOPππ     MasterEnvStr$ = LEFT$(Tmp$, StrPtr%)π     EXIT DOπ      END IFπ   LOOPπ   DEF SEG                                   'Restore default segmentπ   ErrCode% = 0                              'Successπ   EXIT FUNCTION                             'All doneππSkipString:                                  'Skip current environ. var.π   DO UNTIL EnvCh% = 0                       'Look for terminating NULLπ      EnvPtr% = EnvPtr% + 1π      EnvCh% = PEEK(EnvPtr%)π   LOOPπRETURNπEND FUNCTIONπKurt Kuzba                     SCROLLING DIRECTORY LIST       FidoNet QUIK_BAS Echo          12-11-96 (00:00)       QB, PDS                169  6738     DIRLIST.BAS '_|_|_|   DIRLIST.BASπ'_|_|_|   Produces a scrolling directory list. Requires QB.LIBπ'_|_|_|   No warrantee or guarantee is given or implied.π'_|_|_|   Released   PUBLIC DOMAIN   by Kurt Kuzba.  (12/11/96)πTYPE DirectoryEntryπ   reserved AS STRING * 21: attribute AS STRING * 1π   filetime AS INTEGER: filedate AS INTEGERπ   filesize AS LONG: filename AS STRING * 13: END TYPEπTYPE DirectoryStringsπ   filetype AS STRING * 4: filetime AS STRING * 9π   filedate AS STRING * 10: filesize AS STRING * 11π   filename AS STRING * 13: END TYPEπDECLARE SUB FindFirst (filespec$, D AS DirectoryStrings, mask%)πDECLARE SUB FindNext (D AS DirectoryStrings)πDECLARE SUB SetDTA ()πDECLARE SUB BuildEntry (D AS ANY)π' $INCLUDE: 'qb.bi'π'$DYNAMICπCLEAR : DIM SBD AS INTEGER, VOL AS INTEGER, SYS AS INTEGERπDIM HID AS INTEGER, ARC AS INTEGERπSBD = 16: VOL = 8: SYS = 4: HID = 2: ARC = 0πDIM SHARED DTA AS DirectoryEntry, DIR(1000)  AS DirectoryStringsπDIM inregs AS RegTypeX, outregs AS RegTypeX, DE AS INTEGERπDO: COLOR 10, 0: CLSπ   LOCATE 3, 8: INPUT "Enter Filespec => ", Fspec$π   IF Fspec$ = "" THEN COLOR 10, 0: CLS : ENDπ   COLOR 3: LOCATE 4, 8: PRINT STRING$(63, 177): B$ = STRING$(2, 177)π   FOR T% = 5 TO 19π      LOCATE T%, 8: PRINT B$; : LOCATE , 69: PRINT B$; : NEXTπ   LOCATE 20, 8: PRINT STRING$(63, 177): B$ = STRING$(2, 177)π   LOCATE 5, 10: COLOR 11: PRINT "Searching directory...  ";π   DE = 0: FindFirst Fspec$, DIR(DE), (SBD + SYS + HID + ARC)π   WHILE (DE < 999) AND (RTRIM$(DIR(DE).filename) <> "")π      DE = DE + 1: FindNext DIR(DE): WENDπ   Top% = 0: Sel% = 0π   IF DE = 0 THENπ      PRINT "No Files Found.  Hit any key."π      WHILE INKEY$ <> "": WEND: WHILE INKEY$ = "": WENDπ   ELSEπ      DO: FOR T% = 0 TO 14π            LOCATE T% + 5, 10π            IF Top% + T% < DE THENπ               IF Top% + T% = Sel% THENπ                  COLOR 1, 7π                  PRINT "  "; DIR(T% + Top%).filename; "  ";π                  PRINT DIR(T% + Top%).filesize; "  ";π                  PRINT DIR(T% + Top%).filetime; "  ";π                  PRINT DIR(T% + Top%).filedate; "  ";π                  PRINT DIR(T% + Top%).filetype; "  ";π               ELSEπ                  COLOR 14, 0: PRINT "  ";π                  PRINT DIR(T% + Top%).filename; "  ";π                  COLOR 11: PRINT DIR(T% + Top%).filesize; "  ";π                  COLOR 9: PRINT DIR(T% + Top%).filetime; "  ";π                  COLOR 10: PRINT DIR(T% + Top%).filedate; "  ";π                  COLOR 15: PRINT DIR(T% + Top%).filetype; "  ";π               END IFπ            ELSEπ               COLOR 10, 0: PRINT SPACE$(57);π            END IFπ         NEXT: LOCATE 3, 8: COLOR 15, 0π         PRINT MID$(STR$(Sel% + 1) + "    ", 2, 5)π         DO: k$ = INKEY$: LOOP WHILE k$ = ""π         k% = ASC(k$): IF k% = 0 THEN k% = -ASC(MID$(k$, 2))π         SELECT CASE k%π            CASE -71: Top% = 0: Sel% = 0π            CASE -72π               IF Sel% = 0 THENπ                  SOUND 999, 1π               ELSEπ                  Sel% = Sel% - 1: IF Sel% < Top% THEN Top% = Sel%π               END IFπ            CASE -73π               IF Sel% = 0 THENπ                  SOUND 999, 1π               ELSEπ                  IF Sel% < 16 THENπ                     Sel% = 0: Top% = 0π                  ELSEπ                     Sel% = Sel% - 15: Top% = Top% - 15π                     IF Top% < 0 THEN Top% = 0π                  END IFπ               END IFπ            CASE -79π               IF Sel% = DE THENπ                  SOUND 999, 1π               ELSEπ                  Sel% = DE - 1: Top% = DE - 15π                  IF Top% < 0 THEN Top% = 0π               END IFπ            CASE -80π               IF Sel% >= DE - 1 THENπ                  SOUND 999, 1π               ELSEπ                  Sel% = Sel% + 1π                  IF Sel% > Top% + 14 THEN Top% = Top% + 1π               END IFπ            CASE -81π               IF Sel% = DE THENπ                  SOUND 999, 1π               ELSEπ                  IF Sel% + 16 > DE THENπ                     Sel% = DE - 1: Top% = DE - 15π                     IF Top% < 0 THEN Top% = 0π                  ELSEπ                     Sel% = Sel% + 15: Top% = Top% + 15π                     IF Top% + 16 > DE THEN Top% = DE - 15π                  END IFπ               END IFπ         END SELECTπ      LOOP WHILE (k% <> 13) AND (k% <> 27)π   END IFπLOOPπSUB BuildEntry (D AS DirectoryStrings)π   D.filetype = "ASHR": T% = ASC(DTA.attribute)π   IF (T% AND 1) = 0 THEN MID$(D.filetype, 4) = " "π   IF (T% AND 2) = 0 THEN MID$(D.filetype, 3) = " "π   IF (T% AND 4) = 0 THEN MID$(D.filetype, 2) = " "π   IF (T% AND 32) = 0 THEN MID$(D.filetype, 1) = " "π   IF (T% AND 16) = 16 THEN D.filetype = "<DIR"π   T& = DTA.filetime: IF T& < 0 THEN T& = 65536 - T&π   H& = T& \ 2048: M$ = "a": IF H& > 11 THEN M$ = "p"π   H& = H& MOD 12: IF H& = 0 THEN H& = 12π   F$ = RIGHT$(STR$(H&), 2) + ":": M& = (T& \ 32) AND 63π   F$ = F$ + RIGHT$("0" + LTRIM$(STR$(M&)), 2) + ":"π   S& = (T& AND 31) * 2π   D.filetime = F$ + RIGHT$("0" + LTRIM$(STR$(S&)), 2) + M$π   T& = DTA.filedate: IF T& < 0 THEN T& = 65536 - T&π   M& = (T& \ 32) AND 15: F$ = RIGHT$(STR$(M&), 2) + "-"π   DY& = T& AND 31π   F$ = F$ + RIGHT$("0" + LTRIM$(STR$(DY&)), 2) + "-"π   Y& = 1980 + (T& \ 512): D.filedate = F$ + RIGHT$(STR$(Y&), 4)π   F$ = LTRIM$(STR$(DTA.filesize)): comma% = LEN(F$): S$ = ""π   FOR T% = comma% TO 1 STEP -1: S$ = S$ + MID$(F$, T%, 1): NEXTπ   comma% = 0: F$ = ""π   WHILE S$ <> "": F$ = LEFT$(S$, 1) + F$: S$ = MID$(S$, 2)π      comma% = (comma% + 1) MOD 3π      IF (comma% = 0) AND S$ <> "" THEN F$ = "," + F$π   WENDπ   D.filesize = RIGHT$("           " + F$, 11)π   D.filename = DTA.filenameπEND SUBπSUB FindFirst (filespec$, D AS DirectoryStrings, mask%)π   SetDTAπ   filespec$ = filespec$ + CHR$(0)π   DIM inregs AS RegTypeX, outregs AS RegTypeXπ   inregs.ax = &H4E00: inregs.dx = SADD(filespec$)π   inregs.ds = VARSEG(filespec$): inregs.cx = mask%π   CALL INTERRUPTX(&H21, inregs, outregs)π   IF (outregs.flags AND 1) = 0 THENπ      BuildEntry Dπ   ELSE D.filename = ""π   END IFπEND SUBπSUB FindNext (D AS DirectoryStrings)π   DIM inregs AS RegTypeX, outregs AS RegTypeXπ   DTA.filename = "": inregs.ax = &H4F00π   CALL INTERRUPTX(&H21, inregs, outregs)π   IF (outregs.flags AND 1) = 0 THENπ      BuildEntry Dπ   ELSE D.filename = ""π   END IFπEND SUBπSUB SetDTAπ   DIM inregs AS RegTypeX, outregs AS RegTypeXπ   inregs.dx = VARPTR(DTA): inregs.ds = VARSEG(DTA)π   inregs.ax = &H1A00: CALL INTERRUPTX(&H21, inregs, outregs)πEND SUBπ'_|_|_|   end   DIRLIST.BASπRick Elbers                    DISPLAY CONTENTS OF HARDDISK   t030611@tip.nl                 12-19-96 (19:06)       QB, QBasic, PDS        371  14749    XS2DISK.BAS DECLARE SUB sectorread (datas%(), sector&)πDECLARE SUB demo ()πDECLARE FUNCTION int2str$ (sword%)π'---------------------------------------------------------------------------π'XS2DISK: A program that displays the contents of your harddisk( all of it)π'Necessary requirement: DOS 4+( since there is made use of longsectors!)π'Rick Elbers december 1996π'---------------------------------------------------------------------------πCLSππ'The program uses the dos 4+ format of function INT 25( read absolute disksectors)π'since i thought everybody does have a hard disk bigger then 32 MB by now.....π'There is some heavy math involved in the translation to unsigned integers andπ'unsigned longs necessary for INT 25. Also there is some heavy cosmeticaπ'necessary to present the disksectors according to there meaning. Most of theπ'math and cosmetics are however found in the demo part.π'But the most meaningful part of this contribution seems to me the functionπ'sectorread. The most important part of the sectorread function is theπ'parameter block that is passed to the INT 25. Once you understand that youπ'got it all...,well... almost...π'If you want to do something with the combination of FAT/DIRECTORY then youπ'might want to add a very simple text file to your ROOTDIRECTORY. After thatπ'you can calculate the sector offset of the file and read him directly. That'sπ'quite a lot of fun, really...ππ'Good luck.π'-----------------------------------------------------------------------------π'RickππdemoππSUB demoπ'Define the databuffer in the demoπ'because we want to pass the arrayπ'-----------------------------------πDIM datas%(&H105)π'----------------------------π'go read the 0 (boot)sectorπ'----------------------------πsector& = 0ππ'go read out the informationπ'----------------------------πoffset% = VARPTR(datas%(0)) + &HAπ'-------------------------------------------------------------------------π'The cosmetics sector: how to print things.."π'The first line will always contain: sectornr, areaπ'Updated will only be sectornr and sometimes the areanameπ''1,15 >sectornr   1,38 > area indicatorπ'The second line will always contain the start lineπ'-------------------------------------------------------------------------πCLSπLOCATE 1, 1: PRINT "READ SECTOR: ";πLOCATE 1, 30: PRINT " AREA: ";πLOCATE 2, 1: PRINT STRING$(80, "_")π'-------------------------------------------------------------------------π'line 20 will contain the closing line which will be contantπ'Line 24 will contain the prompt information which will be contantπ'The lines 21,22,23 will contain additional information andπ'will only sometimes be updated.πLOCATE 19, 1: PRINT STRING$(80, "_")πVIEW PRINT 24 TO 25: LOCATE 24, 1: COLOR 17, 0:πPRINT "<F5>SECTOR,<F6>CLUSTER,<ESC>END,<.>NEXT SECTOR"; : COLOR 7, 0: VIEW PRINTπ'------------------------------------------------------------------------π'Let us run the program until escapeπ'-------------------------------------πDOπ  i$ = ""                               'no keypress yetπ'------------------------------------------------------------------------π'AREA DEPENDENT COSMETICS:π'--------------------------ππIF (sector& AND &H7FFFFFFF) > total& OR sector& < 0 THEN sector& = 0πSELECT CASE sector& AND &H7FFFFFFFπCASE 0πsectorread datas%(), sector&πDEF SEG = VARSEG(datas%(0))π'-------------π'0) BOOTSECTORπ'--------------π'First the headerπVIEW PRINTπsec$ = HEX$(sector&): LOCATE 1, 15: COLOR O, 7: PRINT STRING$(8 - LEN(sec$), "0") + sec$: COLOR 7, 0:πLOCATE 1, 38: COLOR 0, 7: PRINT "(MASTER)BOOTSECTOR OF C:\": COLOR 7, 0:πVIEW PRINT 20 TO 23: CLS 2: VIEW PRINT 3 TO 18: CLS 2: LOCATE 3, 1:π'calculate relavant details of bootrecord.π  secpclus% = PEEK(&HD + &HA)π  nrfat% = PEEK(&H10 + &HA):π  direntrancenr% = PEEK(&H12 + &HA) * 256& OR PEEK(&H11 + &HA)π  bytepsec% = PEEK(&HC + &HA) * 256& OR PEEK(&HB + &HA)π  fatsec% = PEEK(&H16 + &HA) + PEEK(&H17 + &HA) * 256π  ressec% = PEEK(&HF + &HA) * 256& + PEEK(&HE + &HA)π  help% = PEEK(&H13 + &HA) + PEEK(&H14 + &HA) * 256π  IF help% = 0 THENπ  total& = 256& * PEEK(&H21 + &HA) + PEEK(&H20 + &HA) + 65535 * (PEEK(&H22 + &HA) + PEEK(&H23 + &HA) * 256)π  ELSEπ    total& = help%π  END IFπ  hiddensec% = PEEK(&H1C + &HA) + PEEK(&H1D + &HA) * 256π  startdir% = nrfat% * fatsec% + ressec%π  'we have to call this ones againπ  startdata% = 1 + startdir% + (direntrancenr% * 32 / bytepsec%)πππ  'Oke let us print the relevant details...πCOLOR 7, 0: PRINT "BYTES per sector                  :"; : COLOR 0, 13: PRINT bytepsec%πCOLOR 7, 0: PRINT "SECTORs per cluster               :"; : COLOR 0, 2: PRINT secpclus%πCOLOR 7, 0: PRINT "NUMBER of FATs                    :"; : COLOR 0, 3: PRINT nrfat%πCOLOR 7, 0: PRINT "SECTORS per FAT                   :"; : COLOR 0, 4: PRINT fatsec%πCOLOR 7, 0: PRINT "Number of reserved sectors        :"; : COLOR 0, 5: PRINT ressec%πCOLOR 7, 0: PRINT "Number of hidden sectors          :"; : COLOR 0, 6: PRINT hiddensec%πCOLOR 7, 0: PRINT "TOTAL NUMBER OF SECTORS(dec)      :"; : COLOR 0, 15: PRINT total&πCOLOR 7, 0: PRINT "START OF DOSDIRECTORY at sector   :"; : COLOR 0, 11: PRINT startdir%; "("; HEX$(startdir%); ")"πCOLOR 7, 0: PRINT "START OF DATA(FILE/SUB directory) :"; : COLOR 0, 2: PRINT startdata% - 1; "("; HEX$(startdata% - 1); ")"πCOLOR 7, 0: PRINT "TOTAL SPACE( BYTES) ON DISK       :"; : COLOR 0, 11: PRINT total& * bytepsec%πCOLOR 7, 0: PRINT "TOTAL CLUSTERS ON DISK(hex)       :"; : COLOR 0, 10: PRINT " "; HEX$(total& \ secpclus%)πCOLOR 7, 0: PRINT "BYTES PER CLUSTER                 :"; : COLOR 0, 12: PRINT secpclus% * bytepsec%ππDO UNTIL i$ <> "": i$ = INKEY$: LOOPπIF MID$(i$, 2, 1) = CHR$(&H40) THEN     'f6 pressedπVIEW PRINT 24 TO 25: LOCATE 24, 50πCOLOR 29, 0: INPUT "NEXT CLUSTER(hex) "; a$πCOLOR 7, 0: LOCATE 24, 50: PRINT SPACE$(29);πsector& = (VAL("&h" + a$) AND &HFFFF&) * secpclus%ππELSEIF MID$(i$, 2, 1) = CHR$(&H3F) THEN 'f5 pressedπVIEW PRINT 24 TO 25: LOCATE 24, 50πCOLOR 29, 0: INPUT "NEXT SECTOR(dec) "; sector&πCOLOR 7, 0: LOCATE 24, 50: PRINT SPACE$(29);ππELSEIF i$ = CHR$(27) THENπEXIT SUBπELSEπ  sector& = 1πEND IFππCASE IS < startdir%π'1)FAT AREA:π'-----------π'first the header:πVIEW PRINTπLOCATE 1, 38: COLOR 0, 7: PRINT "FATAREA                    ": COLOR 7, 0:π'Second the footerπVIEW PRINT 20 TO 23: CLS 2πLOCATE 20, 1: PRINT "FAT 1 until sector "; : COLOR 0, 7: PRINT fatsec%;πCOLOR 7, 0: PRINT " FAT 2 until sector "; : COLOR 0, 7: PRINT startdir%πLOCATE 21, 1: PRINT "CODED LIKE:"; : COLOR 0, 7: PRINT "'0000'=FREE "; "'FFF8-FFFF'=END OF FAIL CHAIN "; "'FFF1--FFF7'=BAD SECTORS "; "OTHER=FILE CHAIN NEXT ENTRY ";πCOLOR 7, 0:π'Third lets roll the programπ'----------------------------πDOπVIEW PRINTπsec$ = HEX$(sector&): LOCATE 1, 15: COLOR O, 7: PRINT STRING$(8 - LEN(sec$), "0") + sec$: COLOR 7, 0:πi$ = ""πsectorread datas%(), sector&πDEF SEG = VARSEG(datas%(0))π'-------------------------π'Let us display the data:π'-------------------------ππVIEW PRINT 3 TO 18: CLS 2: LOCATE 3, 1:π  FOR i% = offset% TO offset% + &H200 - 1π    a$ = HEX$(PEEK(i%))π    PRINT a$ + STRING$(2 - LEN(a$), "0");π    IF i% MOD 2 = 1 THEN PRINT " ";π    IF i% - offset% MOD 32 = 31 THEN PRINTπ  NEXTπ'user input a key or <f5> or esc ?π'---------------------------------π  DO UNTIL i$ <> "": i$ = INKEY$: LOOPπ  IF LEN(i$) = 2 THEN i$ = MID$(i$, 2, 1)π  sector& = sector& + 1ππLOOP WHILE (sector& AND &HFFFF) < startdir% AND i$ <> CHR$(&H3F) AND i$ <> CHR$(&H40) AND i$ <> CHR$(27)'non- function key pressedπSELECT CASE i$πCASE CHR$(&H40) 'f6 pressedπ  VIEW PRINT 24 TO 25: LOCATE 24, 50π  COLOR 29, 0: INPUT "NEXT CLUSTER(hex) "; a$π  COLOR 7, 0: LOCATE 24, 50: PRINT SPACE$(29);π  sector& = (VAL("&h" + a$) AND &HFFFF&) * secpclus%πCASE CHR$(&H3F) 'f5 pressedπ  VIEW PRINT 24 TO 25: LOCATE 24, 50π  COLOR 29, 0: INPUT "NEXT SECTOR(dec) "; sector&π  COLOR 7, 0: LOCATE 24, 50: PRINT SPACE$(29);π  CASE CHR$(27)   'esc pressedπ  EXIT SUBπEND SELECTππCASE startdir% TO startdata% - 2π'2)DIRECTORYπ'-----------π'First the header:π'-------------------πVIEW PRINTπsec$ = HEX$(sector&): LOCATE 1, 15: COLOR O, 7: PRINT STRING$(8 - LEN(sec$), "0") + sec$: COLOR 7, 0:πLOCATE 1, 38: COLOR 0, 7: PRINT "DOS DIRECTORY AREA       ": COLOR 7, 0:π'Second print footerπ'------------------πVIEW PRINT 20 TO 23: CLS 2: LOCATE 20, 1:πPRINT " ^   ^   ^  ^                    T^^^D^^^S^^^FS^^^^^^"πPRINT "filenam.ext;atr;                timedatestartfilesize";πPRINT "legenda: T=filetime(W),D=filedate(W),S = startsector(W),FS = filesize(DW) ";πCOLOR 0, 14: PRINT "STARTSECTOR FILE:= (STARTCLUSTER-2)*"; secpclus%; " + "; HEX$(startdata% - 1); : COLOR 7, 0:π'Third lets roll the programπ'----------------------------πDOπVIEW PRINTπsec$ = HEX$(sector&): LOCATE 1, 15: COLOR O, 7: PRINT STRING$(8 - LEN(sec$), "0") + sec$: COLOR 7, 0:πi$ = ""πsectorread datas%(), sector&πDEF SEG = VARSEG(datas%(0))π'-------------------------π'Let us display the data:π'-------------------------πVIEW PRINT 3 TO 18: CLS 2: LOCATE 3, 1:πFOR i% = offset% TO offset% + &H200 - 1π  a% = PEEK(i%): p% = (i% - offset%) MOD 32π  IF p% < 11 THEN PRINT CHR$(a%);  ELSE a$ = HEX$(a%): PRINT STRING$(2 - LEN(a$), "0") + a$;π  IF p% = 31 AND i% <> offset% + &H200 - 1 THEN PRINTπNEXTπ'user input a key or <f5> or esc ?π'---------------------------------π  DO UNTIL i$ <> "": i$ = INKEY$: LOOPπ  IF LEN(i$) = 2 THEN i$ = MID$(i$, 2, 1)π  sector& = sector& + 1πLOOP WHILE (sector& AND &HFFFF) < startdata% - 1 AND i$ <> CHR$(&H3F) AND i$ <> CHR$(&H40) AND i$ <> CHR$(17)'key pressedππIF i$ = CHR$(&H40) THEN     'f6 pressedπVIEW PRINT 24 TO 25: LOCATE 24, 50πCOLOR 29, 0: INPUT "NEXT CLUSTER(hex) "; a$πCOLOR 7, 0: LOCATE 24, 50: PRINT SPACE$(29);πsector& = (VAL("&h" + a$) AND &HFFFF&) * secpclus%ππELSEIF i$ = CHR$(&H3F) THEN 'f5 pressedπVIEW PRINT 24 TO 25: LOCATE 24, 50πCOLOR 29, 0: INPUT "NEXT SECTOR(dec) "; sector&πCOLOR 7, 0: LOCATE 24, 50: PRINT SPACE$(29);ππELSEIF i$ = CHR$(27) THENπEXIT SUBππEND IFπππCASE ELSE                 'dataπ'3)DATA AREA:π'-----------π'First the headerπ'-----------------πVIEW PRINTπLOCATE 1, 38: COLOR 0, 7: PRINT "DATAAREA                   ": COLOR 7, 0:π'Second the footerπ'------------------πVIEW PRINT 20 TO 23: CLS 2π'Third lets roll the programπ'----------------------------ππDOπi$ = ""πVIEW PRINTπclushelp& = (sector& \ secpclus%): clushelp& = clushelp& AND &HFFFF&πclus% = clushelp& AND &H7FFF: clus% = clus% OR -(clushelp& AND &H8000)πclus$ = HEX$(clus%)ππLOCATE 20, 1: PRINT "CLUSTER NUMBER DISPLAYED: "; : COLOR 0, 7: PRINT STRING$(4 - LEN(clus$), "0") + clus$: COLOR 7, 0πLOCATE 21, 1: PRINT " 33 <   ASCII  < 126      DISPLAYED IN:"; : COLOR 0, 7: PRINT " CHARACTERS+SPACE"; : COLOR 7, 0:πLOCATE 22, 1: PRINT "ASCII < 33 OR ASCII > 126 DISPLAYED AS:"; : COLOR 0, 7: PRINT " HEXADECIMAL BYTE": COLOR 7, 0:πsec$ = HEX$(sector&): LOCATE 1, 15: COLOR O, 7: PRINT STRING$(8 - LEN(sec$), "0") + sec$: COLOR 7, 0:πsectorread datas%(), sector&πDEF SEG = VARSEG(datas%(0))π'-------------------------π'Let us display the data:π'-------------------------πVIEW PRINT 3 TO 18: CLS 2: LOCATE 3, 1:πFOR i% = offset% TO offset% + &H200 - 1π    a% = PEEK(i%)π    IF a% < 33 OR a% > 126 THEN PRINT STRING$(2 - LEN(HEX$(a%)), "0") + HEX$(a%);  ELSE PRINT CHR$(a%) + " ";π    IF (i% - offset%) MOD 32 = 31 AND i% <> offset% + &H200 - 1 THEN PRINTπ  NEXTπ'user input a key or <f5> or esc ?π'---------------------------------π  DO UNTIL i$ <> "": i$ = INKEY$: LOOPπ  IF LEN(i$) = 2 THEN i$ = MID$(i$, 2, 1)π  sector& = sector& + 1πππLOOP WHILE i$ <> CHR$(&H3F) AND i$ <> CHR$(&H40) AND i$ <> CHR$(27)'non- function key pressedπππIF i$ = CHR$(&H40) THEN     'f6 pressedπVIEW PRINT 24 TO 25: LOCATE 24, 50πCOLOR 29, 0: INPUT "NEXT CLUSTER(hex) "; a$πCOLOR 7, 0: LOCATE 24, 50: PRINT SPACE$(29);πsector& = (VAL("&h" + a$) AND &HFFFF&) * secpclus%ππELSEIF i$ = CHR$(&H3F) THEN 'f5 pressedπVIEW PRINT 24 TO 25: LOCATE 24, 50πCOLOR 29, 0: INPUT "NEXT SECTOR(dec) "; sector&πCOLOR 7, 0: LOCATE 24, 50: PRINT SPACE$(29);ππELSEIF i$ = CHR$(27) THENπEXIT SUBπEND IFππEND SELECTππLOOP WHILE i$ <> CHR$(27)ππππEND SUBππFUNCTION int2str$ (sword%)π'This function is translating SWORD Integers into a string. Its only useπ'is when you still use asm$ for assembler functions( like i do). In thatπ'case you can make your integer values usable ..π'THis function simply translates the hexa bytesπ'into stringbytes as is.π'----------------------------------------------------πDEF SEG = VARSEG(sword%)πptr% = VARPTR(sword%)πint2str$ = CHR$(PEEK(ptr%)) + CHR$(PEEK(ptr% + 1))πDEF SEGππEND FUNCTIONππSUB sectorread (datas%(), sector&)π'------------------------------------------------------------------------π'datas%(&h105)π'0:DW      = sector2startπ'4:W       = nrsector2readπ'6:DW      = offset:segment van bufferπ'0A:100*W  = sectorbufferπ'------------------------------------------------------------------------πds% = VARSEG(datas%(0)): bx% = VARPTR(datas%(0))πds$ = int2str$(ds%): bx$ = int2str$(bx%)ππhelplowbyte& = sector& AND &HFFFF&πlowbyte% = helplowbyte& AND &H7FFFπdatas%(0) = lowbyte% OR -(helplowbyte& AND &H8000):ππhelphighbyte& = ((sector& AND &HFFFF0000) \ 65535) AND &HFFFF&πhighbyte% = helphighbyte& AND &H7FFFπdatas%(1) = highbyte% OR -(helphighbyte& AND &H8000)ππdatas%(2) = &H1: datas%(4) = ds%: datas%(3) = bx% + 10π'------------------------------------------------------------------------πasm$ = ""πasm$ = asm$ + CHR$(&H50)                          'PUSH AXπasm$ = asm$ + CHR$(&H53)                          'PUSH BXπasm$ = asm$ + CHR$(&H51)                          'PUSH CXπasm$ = asm$ + CHR$(&H1E)                          'PUSH DSππasm$ = asm$ + CHR$(&HB8) + ds$                    'mov ax,ds$πasm$ = asm$ + CHR$(&H8E) + CHR$(&HD8)             'mov ds,axπasm$ = asm$ + CHR$(&HB8) + CHR$(&H2) + CHR$(&H0)  'MOV  AX,2πasm$ = asm$ + CHR$(&HBB) + bx$                    'MOV  BX,BX$πasm$ = asm$ + CHR$(&HB9) + CHR$(&HFF) + CHR$(&HFF)'MOV  CX,-1πasm$ = asm$ + CHR$(&HCD) + CHR$(&H25)             'INT 25πasm$ = asm$ + CHR$(&H83) + CHR$(&HC4) + CHR$(&H2) 'ADD SP,2ππasm$ = asm$ + CHR$(&H1F)                          'POP  DSπasm$ = asm$ + CHR$(&H59)                          'POP  CXπasm$ = asm$ + CHR$(&H5B)                          'POP  BXπasm$ = asm$ + CHR$(&H58)                          'POP  AXπ'say, we are done?πasm$ = asm$ + CHR$(&HCB)                          'RETFππDEF SEG = VARSEG(asm$): offcode% = SADD(asm$)πCALL absolute(offcode%)πEND SUBπJamshid Khoshrangi             DRAW A HILBERT CURVE           FidoNet QUIK_BAS Echo          11-02-96 (18:32)       QB, QBasic, PDS        77   1331     HILBERT.BAS '    HILBERT.BAS   --  Program to draw a Hilbert Curveπ'π'    Translated from Dr. Roger T. Steven's C sampleπ'    code in _Fractal Programming in C_ pp. 199-200.π'π'    Courtesy JAMSHID KHOSHRANGIπ'    Modified slightly by Andrew DartππDEFINT A-ZπDECLARE SUB generate (r1 AS INTEGER, r2 AS INTEGER)ππDIM Temp AS INTEGERπDIM SHARED level AS INTEGERπDIM r AS INTEGERπDIM SHARED x1 AS INTEGERπDIM SHARED y1 AS INTEGERπDIM SHARED x2 AS INTEGERπDIM SHARED y2 AS INTEGERπDIM SHARED WhatColor AS INTEGERππSCREEN 12πCLSπDOπ   x1 = 140π   y1 = 60π   x2 = 140π   y2 = 60ππ   level = 7π   generate 3, 0πLOOPπENDππSUB generate (r1 AS INTEGER, r2 AS INTEGER)πSHARED Governorππlevel = level - 1ππIF level > 0 THENπ   generate r2, r1πEND IFπx2 = x2 + r1πy2 = y2 + r2πLINE (x1, y1)-(x2, y2), WhatColorπx1 = x2πy1 = y2πIF level > 0 THENπ     generate r1, r2πEND IFπx2 = x2 + r2πy2 = y2 + r1πLINE (x1, y1)-(x2, y2), WhatColorπx1 = x2πy1 = y2πIF level > 0 THENπ     generate r1, r2πEND IFπx2 = x2 - r1πy2 = y2 - r2πLINE (x1, y1)-(x2, y2), WhatColorπx1 = x2πy1 = y2πIF level > 0 THENπ     generate -r2, -r1πEND IFππlevel = level + 1ππIF level > 3 THENπ   i$ = INKEY$π   IF i$ = CHR$(27) THEN ENDπEND IFπIF level > 2 THENπ   WhatColor = 1 + INT(TIMER MOD 15)πEND IFππEND SUBπJames Eibsch                   DRAW SPHERES                   comp.lang.basic.misc           12-02-96 (21:03)       QB, QBasic, PDS        39   837      SPHERES.BAS 'Here's a little QBASIC sub to draw spheres, randomly dithered for aπ'head-on lighting effect. IIRC it was originally from Acorn Userπ'magazine, from when I wrote schools software for the Archimedes. Iπ'haven't tried to optimise it.ππDECLARE SUB Drawsphere (x!, y!, r!)πSCREEN 12πRANDOMIZE TIMERππc = 0πFOR i = 0 TO 15π  PALETTE i, c + c * 256 + c * 65536π  c = c + 4πNEXTππWHILE 1π  x = RND * 640π  y = RND * 480π  r = RND * 80 + 10π  Drawsphere x, y, rπWENDππSUB Drawsphere (x, y, r)ππt = r * rπFOR i = 0 TO rπ  FOR j = 0 TO SQR(t - i * i)π    c = 15 * SQR(1 - (i * i + j * j) / t) + .99π    cc = INT(c)π    k = c - ccπ    IF RND * y - 1 > y * k THEN cc = cc - 1π    PSET (x + i, y + j), ccπ    PSET (x - i, y + j), ccπ    PSET (x + i, y - j), ccπ    PSET (x - i, y - j), ccπ  NEXTπNEXTππEND SUBπTika Carr                      PLOT TEXT STRING TRANSPARENTLY FidoNet QUIK_BAS Echo          12-14-96 (00:00)       QB, PDS                46   1946     PLOTS.BAS   'plots.BAS by Tika Carr 12/14/96π'Donated to the Public Domainπ'No waranties or gaurantees are expressed or implied.ππ'PLOT a text String (plots) to the graphics screen transparently.π'Syntax: plots("Text string", x, y, color)π'NOTE: The x and y are text locations, not graphics pixel locations.ππDEFINT A-ZπDECLARE SUB plots (s$, x%, y%, c%)π'$INCLUDE: 'qb.bi'ππSCREEN 12                                '640 x 480/16 color VGA modeπLINE (0, 0)-(640, 480), 3, BF            'clear screenπplots "Hello World", 10, 10, 14          'plot string to gfx screenπp$ = INPUT$(1)                           'wait for keypress before endingπSCREEN 0, 0, 0, 0: CLS                   'back to text mode and endππSUB plots (s$, x, y, c)ππ'Information obtained from Ralph Brown's Interrupt List:π'INT 10hπ' ah = 09hπ' al = character to writeπ' bh = page number (for 256 color modes, the background color instead)π' bl = text mode attribute, or graphics mode color of textπ'      if the mode is not a 256 color mode, and bit 7 is set, thenπ'      the character is XOR'd to the screen.π' cx = number of times to write the character (usually 1ce)ππDIM inregs AS RegType, outregs AS RegTypeπah$ = "09"                               'Set up interrupt to write chrπinregs.cx = 1                            'Write each character only onceπbh$ = HEX$(0)                            'Graphics Page number (usually 0)πbl$ = HEX$(c - 1 + &H80)                 'Color + bit 7 set for transparencyπbx$ = bh$ + bl$                          'Set up bx registerπinregs.bx = VAL("&H" + bx$)πFOR i = 1 TO LEN(s$)π  LOCATE y, xπ  al$ = HEX$(ASC(MID$(s$, i, 1)))        'load in the next chr to writeπ  ax$ = ah$ + al$                        'set up ax registerπ  inregs.ax = VAL("&H" + ax$)π  INTERRUPT &H10, inregs, outregs        'call the interruptπ  x = x + 1                              'advance cursor one positionπNEXTπEND SUBπMike Ginger                    QB ERROR CODES EXPLAINED       FidoNet QUIK_BAS Echo          11-13-96 (01:29)       Text                   29   1887     ERRCODES.TXT Code    Message                    ║  Code    Messageπ                                    ║π 1       NEXT without FOR           ║  37      Argument-count mismatchπ 2       Syntax error               ║  38      Array not definedπ 3       RETURN without GOSUB       ║  40      Variable requiredπ 4       Out of DATA                ║  50      FIELD overflowπ 5       Illegal function call      ║  51      Internal errorπ 6       Overflow                   ║  52      Bad file name or numberπ 7       Out of memory              ║  53      File not foundπ 8       Label not defined          ║  54      Bad file modeπ 9       Subscript out of range     ║  55      File already openπ 10      Duplicate definition       ║  56      FIELD statement activeπ 11      Division by zero           ║  57      Device I/O errorπ 12      Illegal in direct mode     ║  58      File already existsπ 13      Type mismatch              ║  59      Bad record lengthπ 14      Out of string space        ║  61      Disk fullπ 16      String formula too complex ║  62      Input past end of fileπ 17      Cannot continue            ║  63      Bad record numberπ 18      Function not defined       ║  64      Bad file nameπ 19      No RESUME                  ║  67      Too many filesπ 20      RESUME without error       ║  68      Device unavailableπ 24      Device timeout             ║  69      Communication-buffer overflowπ 25      Device fault               ║  70      Permission deniedπ 26      FOR without NEXT           ║  71      Disk not readyπ 27      Out of paper               ║  72      Disk-media errorπ 29      WHILE without WEND         ║  73      Feature unavailableπ 30      WEND without WHILE         ║  74      Rename across disksπ 33      Duplicate label            ║  75      Path/File access errorπ 35      Subprogram not defined     ║  76      Path not foundπKurt Kuzba                     SPLIT/CONCATENATE FILE         FidoNet QUIK_BAS Echo          11-29-96 (09:43)       QB, QBasic, PDS        57   2133     SPLITTER.BAS'I recently had a use for a program to split files apart andπ'restore them to the original again afterwards, hence these twoπ'programs. You might include a real menu and put them into aπ'single program with all sorts of bells and whistles, but Iπ'didn't take the time to since they served my needs as is.π'If anybody has questions or suggestions, feel free. :)π'First, to take the files apart into manageable segments:π'_|_|_|   SPLITTER.BASπ'_|_|_|   Splits a file into 1MB segments.π'_|_|_|   No warrantee or guarantee given or implied.π'_|_|_|   Released   PUBLIC DOMAIN   by Kurt Kuzba.  (11/29/96)πON ERROR GOTO OOpsπCLOSEπINPUT "enter name of file to split => ", NFile$πPRINT "enter name of file sections"πINPUT "(EX. game > 'gamex.tmp')    => ", NTemp$πNoSeg% = 0: Source% = FREEFILEπOPEN NFile$ FOR BINARY AS #Source%πDestination% = FREEFILEπWHILE NOT EOF(Source%)π   F$ = NTemp$ + LTRIM$(STR$(NoSeg%)) + ".tmp"π   OPEN F$ FOR OUTPUT AS #Destination%π   accum& = 0π   WHILE (NOT EOF(Source%)) AND (accum& < 1048576)π      dat$ = INPUT$(1024, Source%): ln& = LEN(dat$)π      accum& = accum& + ln&: PRINT #Destination%, dat$;π   WENDπ   CLOSE Destination%: NoSeg% = NoSeg% + 1πWEND: CLOSE Source%: ENDπOOps:π   CLOSE : PRINT ERR: ENDπ'_|_|_|   end   SPLITTER.BASππ'And then, to restore the original file from the segments:π'_|_|_|   CONCAT.BASπ'_|_|_|   Restores files split using SPLITTER.BAS to one file.π'_|_|_|   No warrantee or guarantee given or implied.π'_|_|_|   Released   PUBLIC DOMAIN   by Kurt Kuzba.  (11/29/96)πON ERROR GOTO OOpsπINPUT "Files to concatenate => ", Pieces$πINPUT "Name of output file  => ", Whole$πW% = FREEFILE: OPEN Whole$ FOR OUTPUT AS #W%πIF BooBoo% <> 0 THEN CLOSE : ENDπP% = FREEFILE: Part% = 0πDOπ   F$ = Pieces$ + LTRIM$(STR$(Part%)) + ".tmp"π   OPEN F$ FOR INPUT AS #P%π   IF BooBoo% <> 0 THEN CLOSE : END:  ELSE CLOSE P%π   OPEN F$ FOR BINARY AS #P%π   WHILE NOT EOF(P%)π      dat$ = INPUT$(1024, P%): PRINT #W%, dat$;π   WENDπ   CLOSE P%: Part% = Part% + 1πLOOP: ENDπOOps:π   BooBoo% = ERR: RESUME NEXTπ'_|_|_|   end   CONCAT.BASπDave Shea                      ANIMATION                      FidoNet QUIK_BAS Echo          11-23-96 (12:09)       Text, QB, QBasic       173  7706     ANIMATE.BAS '>> Hello.  I've tried making simple animation in qbasic but with noπ'>> success.  The command i use to simulate the movements is CLS, but itπ'>> doesn't seem to work.  Is there another way or command i can use toπ'>> make simple animation??  Thanks. =)ππ'>Use GET and PUT XOR.ππ'...And I'll bet that helped you a WHOLE lot.πππHere is a preview of the newest addition to the code FAQ. It explains inπ(I hope) enough detail to get a beginner started with animation in QB.πTake a look, ask a question if you don't understand.ππ8) HOW CAN I ANIMATE SPRITES IN QB?ππ   First thing, what's a sprite? Good question. Basically, it's aπ   rectangle box that has a picture in it. In something likeπ   cartoon animation, they would be referred to as frames. So whenπ   you're animating in QB, you're essentially doing the same thingπ   that you would do if you were to create a cartoon, just on aπ   smaller scale.ππ   So how do you create sprites? QB has a variety of graphicsπ   functions (DRAW, LINE, CIRCLE, PSET etc.) that are at yourπ   disposal. They are quite cumbersome to draw with, so you mightπ   find it difficult to get started. You may want to keep yourπ   eyes open for a QB graphics editor, which there seem to beπ   quite few of. So, here we go... plug for one of my own programs.π   Spectra.13 was designed specifically for drawing graphics in QB.π   It is totally mouse-controlled, has a handy pop-up menu,π   features many handy utilities (draw, erase, paint, line, circle,π   filled circle, box, filled box, text, Bitmap loading, paletteπ   manipulation, save & load pictures, save & load icons, on-lineπ   help, etc. etc. etc.) It's probably the most comprehensive QBπ   drawing program available, but as of yet, is not widelyπ   available. It was just released in late November '96, so if youπ   can't find it anywhere, get in touch with me, Dave Shea, andπ   I'll see what I can do to hook you up with it.ππ   Back to animation...ππ   The first thing you have to do is set aside memory for yourπ   sprite using the DIM command. This can be done like this:ππ   DIM Array%(NumberOfBytes)ππ   Where Array% is the name of the array you're storing the spriteπ   data in. For our purposes in this section of the FAQ, I won'tπ   explain what an array is. Just think of it as a really bigπ   variable that we will store our picture in. How do you determineπ   the number of bytes you need to set aside? It depends on yourπ   screen mode. We will assume SCREEN 13 from now on, in which eachπ   pixel requires exactly one byte of memory. So, to determine theπ   amount of memory needed, the formula would be:ππ   NumberOfBytes = ((XValue * YValue) / 2) + 12ππ   The extra 12 bytes are to store the (x,y) dimensions of theπ   array. You must divide by two because each element of Array%π   is an integer value, 16 bytes, and we only need 8. If you don'tπ   understand, don't worry. Just follow the formula.ππ   So where do the XValue and YValue come from? Like I said, aπ   sprite is a rectangle, so the XValue is the number of pixelsπ   across the sprite horizontally (Left to right), and Y is theπ   number of pixels going up and down. Once you have your graphicπ   on the screen, try drawing a box around it. Once you have a boxπ   that completely surrounds the graphic, use the X and Y valuesπ   for the box as the same for your graphic. If you're havingπ   troubles with this, use the following formula for a box thatπ   completely surrounds your graphic:ππ   LINE (x1, y1) - (x2, y2), 31, Bπ   x = (x2 - x1) : y = (y2 - y1)ππ   Okay, so now I have everything set up, how do I store my pictureπ   in the array? Using the GET command. It's as easy as this:ππ   GET (x1, y1) - (x2, y2), Array%ππ   The x1, y1 etc. are the exact same as in the LINE command above,π   and the array Array% is the one we dimensioned above. So, nowπ   you have the graphic in memory, you can clear the screen so it'sπ   not still on there.ππ   Animation starts here. Once you have all the sprites stored inπ   memory, you will most likely want to stick them back on theπ   screen at a certain time in your program. This is done throughπ   the PUT command. Try this:ππ   PUT (50,50), Array%ππ   That will stick the graphic you have in Array% at positionπ   (50, 50) on the screen. Easy as that.ππ   So, now I have this going for me, how do I actually animate?ππ   It's quite simple from here. Basically, you stick your pictureπ   on the screen, delay for a bit, erase it and immediatly stickπ   another picture on the screen at a different location, and soπ   on. The one problem with this is that, for a very short time,π   there is no picture on the screen. This will cause the animationπ   to flash a certain amount, no matter how fast your computer is.π   There is one way that slightly avoids this problem, but it's notπ   a complete solution. This will work only if you are using smallπ   sprites, and only if you don't animate near the top of theπ   screen. What you do is add a line AFTER you have placed yourπ   sprite, but BEFORE you erase it. (As it slows down the program aπ   bit, it can also be used in place of a delay loop) This commandπ   is called the vertical retrace, and it goes like this:ππ   WAIT 986, 8    (or WAIT &H3DA, 8....)ππ   That will help, but only a little bit. The following example isπ   a little animation of a guy running, and it uses the techniquesπ   described above.ππ[...........................Cut Here..............................]π   ' =-=-=-=-=-=-=-=-=-=-=-=-=-=-=π   '   RUN.BAS   by   Dave Sheaπ   '   Released to Public Domainπ   '   on November 22nd, 1996. Noπ   '   Warantees expressed orπ   '   implied.π   ' =-=-=-=-=-=-=-=-=-=-=-=-=-=-=ππ   CLS : SCREEN 13               'Set Screen 13, of course!πππ   PSET (25, 71), 31: DRAW "rdld2l2ngr3fnehld3rfrdngulhlg2lh"π   PSET (45, 71), 31: DRAW "rdld2lgnder2dnr2ld2rfdnguhld2lg"π   PSET (65, 71), 31: DRAW "rdld2ldrnednrddrfndhldlg"π   PSET (85, 71), 31: DRAW "rdld2lgnderdnr2d2rfdnguhlgdl2"ππ                                 'The above will draw fourπ                                 'different frames of a Stick manπ                                 'running.ππ   DIM Guy1%(134), Guy2%(134), Guy3%(134), Guy4%(134)ππ                                 'Set aside the memory required forπ                                 'each frame.ππ   GET (16, 69)-(34, 82), Guy1%  'Stick each frame into memoryπ   GET (36, 69)-(54, 82), Guy2%  '(X and Y values calculated byπ   GET (56, 69)-(74, 82), Guy3%  ' pure trial and error. =u)π   GET (76, 69)-(94, 82), Guy4%ππ   CLS                           'Guess what THIS does!ππ   FOR a = 1 TO 300 STEP 2                'Begin Loopπ    b = b + 1: IF b = 5 THEN b = 1        'Increase b until itπ                                          'reaches a value of 5,π                                          'reset it to 1ππ    IF b = 1 THEN PUT (a, 100), Guy1%     'Determine which frame toπ    IF b = 2 THEN PUT (a, 100), Guy2%     'PUT, then PUT it.π    IF b = 3 THEN PUT (a, 100), Guy3%π    IF b = 4 THEN PUT (a, 100), Guy4%ππ    WAIT 986, 8                           'Wait for Verticalπ                                          'Retraceππ    Start = TIMER                         'Small delay loop toπ    WHILE TIMER < Start + .1: WEND        'slow it down a bit.ππ    IF b = 1 THEN PUT (a, 100), Guy1%     'Erase current frame byπ    IF b = 2 THEN PUT (a, 100), Guy2%     'PUTting it again.π    IF b = 3 THEN PUT (a, 100), Guy3%π    IF b = 4 THEN PUT (a, 100), Guy4%ππ   NEXT                                   'Loop!πDaniel Garlans                 THE HORDE V1.43 FINAL          thegarlans@geocities.com       11-10-96 (08:13)       QB, QBasic, PDS        689  20776    HORDE.BAS   DEFINT A-Z 'SPEED and memory savingπDECLARE SUB story ()πDECLARE SUB youdie ()πDECLARE SUB gprint (x%, y%, culler%, text$)πDECLARE SUB setpal (reg%, RED%, GREEN%, BLUE%)πDECLARE SUB drawyou (angle%) 'function that draws you at any angleπ'The Horde V1.43 Finalπ'Code: Me, Daniel Garlans Graphics: Me, Daniel Garlans :)π'see line 549 for a little more stuff and a bug report :)π'You want the story? look in the STORY sub :)π'This was coded on a Pentium 166 with 16megs ram, a 2 meg Trident video cardπ'under a full-screen Win95 DOS box :) (Just press ALT+ENTER) =]π'Hmm...seems to be going slower now that the aliens are thereπ'well, I can't help it; Wormhole didn't need to figure out starting locations :)π'Actually, up to about 12 aliens is good  for speed, but above that the gameπ'stars to crawl and it's hideously hard (15+ is near impossible =])π'the fading color idea was...borrowed...from Wormhole :)π'This code is freeware but don't use it without crediting me :)π'Clean code is not something I do well, but spaghetti code is rare as well :)π'(There's always -some- sense or logic to it)π'Initalizing takes all of half a second :)π'MAJOR sections are seperated by a row of *'s (between init and game)π'IMPORTANT Sections are seperated by a row of ='s (between parts of loop)π'MINOR sections are seperated by a row of -'s (parts of parts)π'check around these dividers for a little info about the next partπSCREEN 7, , 1, 1'Screen 7 for Page Flipping... Less colors than could be wanted, but hey, you can't have everythingπ'I don't wanna even see this without page flipping :)πPRINT "The Horde 1.43 Final is Initalizing...."πPRINT "----Prepare for immersion----"πRANDOMIZE TIMERπPRINT "Creating and Initalizing Starfield"πCONST numstar = 20 'a lot=slower :)πTYPE starπ x AS INTEGERπ y AS INTEGERπEND TYPEπDIM SHARED stars(1 TO numstar) AS star 'few for speedπFOR a = 1 TO numstarπstars(a).x = INT(RND * 320) + 1πstars(a).y = INT(RND * 200) + 1πNEXT aπ'----------------------πPRINT "Drawing and Initalizing You"π'you are a sprite with 8 positions...  (Look at the compass with Cardinal and Intermediate)π'your sprite array... With integers more positions are needed yet same mem size and more speed!πDIM youu(1 TO 80)πDIM youd(1 TO 80)πDIM youl(1 TO 80)πDIM your(1 TO 80)πDIM youul(1 TO 80)πDIM youdl(1 TO 80)πDIM youur(1 TO 80)πDIM youdr(1 TO 80)πdrawyou (270) 'upπGET (153, 93)-(167, 107), youuπLINE (153, 93)-(167, 107), 0, BFπdrawyou (90) 'downπGET (153, 93)-(167, 107), youdπLINE (153, 93)-(167, 107), 0, BFπdrawyou (180)'rightπGET (153, 93)-(167, 107), yourπLINE (153, 93)-(167, 107), 0, BFπdrawyou (0)' leftπGET (153, 93)-(167, 107), youlπLINE (153, 93)-(167, 107), 0, BFπdrawyou (45) ' down-leftπGET (153, 93)-(167, 107), youdlπLINE (153, 93)-(167, 107), 0, BFπdrawyou (315) ' up-leftπGET (153, 93)-(167, 107), youulπLINE (153, 93)-(167, 107), 0, BFπdrawyou (225) 'up rightπGET (153, 93)-(167, 107), youurπLINE (153, 93)-(167, 107), 0, BFπdrawyou (135) 'up leftπGET (153, 93)-(167, 107), youdrπLINE (152, 93)-(169, 107), 0, BFπyoupow = 80πmaxyoupow = 80πPRINT "Drawing and Initalizing Aliens"π'----------------------πDIM SHARED enemystrπDIM SHARED maxenemies AS INTEGERπmaxenemies = 5 'difficulty level--crawling speed at more than 10πTYPE enemyπ x AS INTEGERπ y AS INTEGERπ pow AS INTEGERπ xv AS INTEGERπ yv AS INTEGERπ alive AS INTEGER '0=no 1=yesπEND TYPEπDIM ali(1 TO maxenemies) AS enemyπDRAW "ta0"πDIM alien(1 TO 180)πPSET (160, 100), 8πDRAW "u8 r8 d8 l8"πFOR B = 1 TO 360 STEP 45πPSET (164, 96), 4πDRAW "TA=" + VARPTR$(B)πDRAW "u4"πNEXT BπPSET (163, 95), 3: PSET (164, 95), 3: PSET (165, 95), 3πPSET (163, 96), 3: PSET (164, 96), 3: PSET (165, 96), 3πPSET (163, 97), 3: PSET (164, 97), 3: PSET (165, 97), 3π'LINE (158, 90)-(170, 102), 8, BπGET (158, 90)-(170, 102), alienπLINE (158, 90)-(170, 102), 0, BFπPRINT "Initalizing Guns"π'----------------------πTYPE shotπ x AS INTEGERπ y AS INTEGERπ dirx AS INTEGERπ diry AS INTEGERπ who AS INTEGER '1=Alien 2=You (so your shots don't hit you)π alive AS INTEGERπEND TYPEπCONST maxshot = 14 'shots out at a time (Yours and aliens too)πCONST maxfiredelay = 4 'iterations before refireπfiredelay = 0 'set to maxfiredelay at each shot-a delayπDIM shots(1 TO maxshot) AS shotπDIM shotpic(18) AS INTEGERπx = 160πy = 100πPSET (x, y), 14πPSET (x - 1, y), 12πPSET (x + 1, y), 12πPSET (x, y + 1), 12πPSET (x, y - 1), 12πGET (159, 99)-(161, 101), shotpicπPRINT "Initalizing Explosions"π'----------------------πTYPE xploπ x AS INTEGERπ y AS INTEGERπ stage AS INTEGERπEND TYPEπDIM SHARED maxploπmaxplo = 3πDIM xplosions(1 TO maxplo) AS xploπPRINT "Initalizing Palettes"π'----------------------πsetpal 1, 30, 30, 30 'Your hullπsetpal 6, 63, 0, 0   'your laserπsetpal 3, 63, 63, 0  'enemy lights --these do a fadecycle-πfadecol = 63πPRINT "Initalizing Globals"π'----------------------πDIM SHARED yourhealth AS INTEGERπDIM SHARED maxhealth AS INTEGERπDIM SHARED level AS INTEGERπDIM SHARED bossstr AS INTEGERπDIM SHARED gundamage AS INTEGERπDIM SHARED viewpage AS INTEGERπDIM SHARED drawpage AS INTEGERπDIM SHARED youdirπDIM SHARED shotsfired AS LONGπDIM SHARED hits AS LONGπ'youdir=1=up 2=down 3=left 4=right 5=upleft 6=upright 7=downleft 8=downrightπyoudir = 2πviewpage = 0 'for page flipping-what you seeπdrawpage = 1 'for page flipping-what is being drawnπmaxhealth = 20πyourhealth = maxhealthπlevel = 1πbossstr = 40πgundamage = 5πDIM SHARED stardirxπDIM SHARED stardiryπstardirx = 0πstardiry = -2πDIM SHARED shotdirxπDIM SHARED shotdiryπshotdirx = 0πshotdiry = 3πPRINT "Creating Background Plane" 'NOT USED-FLICKERS TERRIBLYπ'----------------------π'Fixed background stars:more detailπSCREEN 7, , 2, 0πFOR a = 1 TO 5πx = INT(RND * 320) + 1πy = INT(RND * 200) + 1πPSET (x, y), 15πPSET (x - 1, y), 8πPSET (x + 1, y), 8πPSET (x, y + 1), 8πPSET (x, y - 1), 8πNEXT aπSCREEN 7, , 0, 0πPRINT "Initalizing Sine/Cosine Tables"π'----------------------π'these arn't used either :)πDIM sinelook(0 TO 360)πDIM cosinelook(0 TO 360)πDIM pi AS DOUBLEπpi = 3.1415927#πFOR a = 0 TO 360πsinelook(a) = SIN(a * (pi / 180)) 'Velocity Tablesπcosinelook(a) = COS(a * (pi / 180)) 'Velocity TablesπNEXT aπPRINT "Initalization Complete"π'----------------------πstory 'duhhhπ'********************πCLSπyoudir = 2πfadecoldir = -2πfadecol = 60πDO 'main game loopπSCREEN 7, , drawpage, viewpage 'draw the page drawn before!π'CLSπLINE (0, 0)-(320, 200), 0, BF 'MUCH better than CLS, Less/No Flicker!π'at least, it's better with pageflipped modesπ'Fade Cyclesπ'======================πfadecol = fadecol + fadecoldirπIF fadecol < 10 OR fadecol > 60 THENπfadecoldir = -fadecoldirπEND IFπCALL setpal(3, fadecol, fadecol, 0)π'update your powerdisplay and gun counterπ'----------------------πLINE (1, 200)-(1, 200 - youpow), 12πLINE (2, 200)-(2, 200 - firedelay * 4), 15 'Usually not seen :)π'check if you're dead or notπ'======================πIF youpow <= 0 THEN CALL youdie 'hmmm I wonder :)π'do starsπ'======================πFOR a = 1 TO numstarπ'PSET (stars(a).x, stars(a).y), 0 'clear starsπstars(a).x = stars(a).x + stardirxπstars(a).y = stars(a).y + stardiryπIF stars(a).x < 0 THEN stars(a).x = 320πIF stars(a).x > 320 THEN stars(a).x = 0πIF stars(a).y < 0 THEN stars(a).y = 200πIF stars(a).y > 200 THEN stars(a).y = 0πPSET (stars(a).x, stars(a).y), 15πNEXT aπ'do aliensπ'======================πFOR a = 1 TO maxenemiesπ IF ali(a).alive = 0 THENπ  'BEEPπ  'hey, we have a free enemy space :)π  'let's add one, shall we?π  where = INT(RND * 4) + 1π  SELECT CASE where 'what wallπ  CASE 1π   x = 1π   y = INT(RND * 200) + 1π   xv = INT(RND * 2) + 1π   yv = -2 + INT(RND * 4) + 1π  CASE 2π   x = 320π   y = INT(RND * 200) + 1π   xv = INT(RND * 2) + 1π   yv = -2 + INT(RND * 4) + 1π  CASE 3π   x = INT(RND * 320) + 1π   y = 1π   xv = -2 + INT(RND * 4) + 1π   yv = INT(RND * 2) + 1π  CASE 4π   x = INT(RND * 320) + 1π   y = 200π   xv = -2 + INT(RND * 4) + 1π   yv = -INT(RND * 2) + 1π   CASE ELSE  'you shouldn't be here :)π  END SELECTπ  'put them values into the clicker..er..array... :)π  ali(a).x = xπ  ali(a).y = yπ  ali(a).xv = xvπ  ali(a).yv = yvπ  ali(a).alive = 1π END IFπNEXT aπ'aliens added, now draw 'emπ'----------------------πFOR a = 1 TO maxenemiesπ IF ali(a).alive = 1 THEN 'aliveπ  'BEEPπ  'adding stardir is not exactly the best way but it works :)π  'this sorta moves the aliens with the stars...not perfect :)π  ali(a).x = ali(a).x + stardirx / 2π  ali(a).y = ali(a).y + stardiry / 2π  ali(a).x = ali(a).x + ali(a).xvπ  ali(a).y = ali(a).y + ali(a).yvπ  'bound check...whoda thunk it?π  IF ali(a).x > 300 OR ali(a).x < 1 THENπ   ali(a).alive = 0π  END IFπ  IF ali(a).y > 180 OR ali(a).y < 1 THENπ   ali(a).alive = 0π  END IFπ  IF ali(a).alive = 1 THEN 'still aliveπ   PUT (ali(a).x, ali(a).y), alien, PSET 'what's it look like? :)π  END IFπ END IFπNEXT aπ'do shotsπ'======================π'Shots are actually started in the iteration before :)πfiredelay = firedelay - 1 'delayπIF firedelay < 0 THEN firedelay = 0 'if there's a delay make new shots not there :)π'IF firedelay > 0 THEN newshot = 0 'no new shots if firedelay isn't 0πIF newshot = 1 THENπ 'call a new shot!π shotsfired = shotsfired + 1 'I don't think I use thisπ IF firedelay = 0 THENπ  FOR test = 1 TO maxshotπ   IF shots(test).alive = 0 THENπ    IF newshot = 1 THEN 'Don't fill all shot spots up!π     'It might be kewl like that...one huge particle shot :)π     'constantly hitting things :)π     'free shot spaceπ     newshot = 0 'Stop adding more shotzπ     shots(test).x = 166 'the values are set to start in YOUR CENTER! :)π     shots(test).y = 106 'that's why the SHOTS.WHO is needed :)π     shots(test).who = 2 '2=you 1=alien (no aliens shots as of v1.32)π     'shotdir? is set in the movement :)π     shots(test).dirx = shotdirx 'quick and dirty...gotta love it :)π     shots(test).diry = shotdiry 'shots go somewhat faster than the starsπ     shots(test).alive = 1π    END IFπ   END IFπ  NEXT testπ firedelay = maxfiredelay 'firedelay time!π ELSEIF firedelay > 0 THENπ  newshot = 0 'firedelay not 0 yetπ END IFπEND IFπ'Shot Movementπ'----------------------πFOR doshot = 1 TO maxshotπ still = 1';still alive...used in code :)π IF shots(doshot).alive = 1 THEN 'a good shot we have hereπ  'I like ta' movit movit...I like ta' MOV it MOV it, I like ta' MOV IT!π  'da dada duh duh dun dunh oohps I'm typing... :)π  shots(doshot).x = shots(doshot).x + shots(doshot).dirxπ  shots(doshot).y = shots(doshot).y + shots(doshot).diryπ  'bound check!..without this the PUTs crashπ  IF shots(doshot).x < 4 OR shots(doshot).x > 314 THENπ   shots(doshot).alive = 0 'kill the shotπ   still = 0 'should we STILL display it?π  END IFπ  IF shots(doshot).y < 4 OR shots(doshot).y > 196 THENπ   shots(doshot).alive = 0 'kill the shotπ   still = 0 'should we STILL display it?π  END IFπ  'draw the shot!                            π  IF still = 1 THEN 'if the shot didn't run offboundsπ  PUT (shots(doshot).x, shots(doshot).y), shotpic, PSETπ  END IFπ  END IFπ  'now to detect collisions :)π  '----------------------π  'surprisingly I got this part working in about 10 minutes :)π  'this part is horrendously nested... sorry :)π  FOR B = 1 TO maxenemiesπ   IF shots(doshot).x >= ali(B).x AND shots(doshot).x < ali(B).x + 12 THENπ    IF shots(doshot).y >= ali(B).y AND shots(doshot).y < ali(B).y + 12 THENπ     'Well, I do declayah: You made a hit!π      ali(B).alive = 0 'alien is bustedπ      shots(doshot).alive = 0 'shot is busted: no multi-hits :) (that would actually kick though)π      'add an explosionπ      x = ali(B).xπ      y = ali(B).yπ      hits = hits + 1π      GOSUB newxplo 'Shudder: -gosub-.. look at Wormhole and many other games :)π     END IFπ    END IFπ   NEXT BπNEXT doshotπ'======================π'check for you+alien collisionπFOR a = 1 TO maxenemiesπ 'this part was hideous to code and still isn't perfect :)π IF ali(a).x >= 160 AND ali(a).x <= 170 OR ali(a).x + 12 >= 160 AND ali(a).x + 12 <= 170 THENπ  IF ali(a).y >= 100 AND ali(a).y <= 110 OR ali(a).y + 12 >= 100 AND ali(a).y + 12 <= 110 THENπ   'BEEPπ   'POW-you're hit!π   youpow = youpow - 5 'ouchπ   '----------------------π   'reflection---not perfect but it works :)π   IF ali(a).xv < 0 THEN ali(a).xv = ali(a).xv + 4π   IF ali(a).xv > 0 THEN ali(a).xv = ali(a).xv - 4π   IF ali(a).yv < 0 THEN ali(a).xv = ali(a).yv + 4π   IF ali(a).yv > 0 THEN ali(a).xv = ali(a).yv - 4π   ali(a).xv = -(ali(a).xv + 2)'deflected -- actually,  they bounce inside youπ   ali(a).yv = -(ali(a).yv + 2)'deflected -- and hurt you more (sometimes)π  END IFπ END IFπNEXT aπ'do keypressesπ'======================πv$ = UCASE$(RIGHT$(INKEY$, 1))π'you wouldn't belive how annoying this next part was :)π'I had to do a LOT of reversing variables and letters... ickπSELECT CASE v$πCASE "D" 'die -- debug key/alternate quit button :)πyoupow = 0πCASE " " 'space for fireπ'Fuh-HIRE!πnewshot = 1 'yuppers, this is simple-check back in the "do shots" partπCASE CHR$(27)πENDπCASE "P" 'don't fiddle with any of these without a backupπstardirx = 0πstardiry = -2πshotdirx = 0πshotdiry = 3πyoudir = 2πCASE "H" 'you'd regret it :) well...maybe not but hey; sounds kewl..πstardirx = 0πstardiry = 2πshotdirx = 0πshotdiry = -3πyoudir = 1πCASE "M"πstardirx = -2πstardiry = 0πshotdirx = 3πshotdiry = 0πyoudir = 4πCASE "K"πyoudir = 3πstardirx = 2πstardiry = 0πshotdirx = -3πshotdiry = 0πCASE "2"πyoudir = 2πstardirx = 0πstardiry = -2πshotdirx = 0πshotdiry = 3πCASE "8"πyoudir = 1πstardirx = 0πstardiry = 2πshotdirx = 0πshotdiry = -3πCASE "6"πyoudir = 4πstardirx = -2πstardiry = 0πshotdirx = 3πshotdiry = 0πCASE "4"πyoudir = 3πstardirx = 2πstardiry = 0πshotdirx = -3πshotdiry = 0πCASE "3"πyoudir = 8πstardirx = -2πstardiry = -2πshotdirx = 3πshotdiry = 3πCASE "9"πyoudir = 6πstardirx = -2πstardiry = 2πshotdirx = 3πshotdiry = -3πCASE "7"πyoudir = 5πstardirx = 2πstardiry = 2πshotdirx = -3πshotdiry = -3πCASE "1"πyoudir = 7πstardirx = 2πstardiry = -2πshotdirx = -3πshotdiry = 3πEND SELECTπ'the numeric keypad allows more directions but I think the regular keypadπ'is fine... NUMLOCK must be on to use the keypad :)π'do explosionsπ'======================πFOR a = 1 TO maxplo 'only 3 explosions: for speed and you wouldn't noticeπ IF xplosions(a).x <> 0 THEN 'crazy results without this :)π xplosions(a).x = xplosions(a).x + stardiry 'this dosn't work right :)π xplosions(a).y = xplosions(a).y + stardiry 'who cares? looks good :)π 'actually; doesn't work like I wanted it toπ x = xplosions(a).xπ y = xplosions(a).yπ s = xplosions(a).stage 'copy these variables for less array accessingπ CIRCLE (x, y), s, 14 'expanding yellow circleπ CIRCLE (x, y), 10, 6, , , s 'shrinking horizontaly circleπ FOR B = 1 TO 15 'little particles-hard to notice at first but you can "sense" 'em :)π x2 = -6 + INT(RND * 12) + 1π y2 = -6 + INT(RND * 12) + 1π PSET (x + x2, y + y2), 15π NEXT Bπ xplosions(a).stage = xplosions(a).stage + 1 'increaseπ IF xplosions(a).stage = 10 THEN xplosions(a).x = 0 'if it's too high, cancel!π END IFπNEXT aπ'do you...drawing anyway :)(π'======================π'youdir=1=up 2=down 3=left 4=right 5=upleft 6=upright 7=downleft 8=downrightπSELECT CASE youdir 'Maybe not the fastest code but easiest to modify & understandπCASE 1 'I picked good names for the GET arrays, try to figure them out :)πPUT (160, 100), youu, PSETπCASE 2πPUT (160, 100), youd, PSETπCASE 3πPUT (160, 100), youl, PSETπCASE 4πPUT (160, 100), your, PSETπCASE 5πPUT (160, 100), youul, PSETπCASE 6πPUT (160, 100), youur, PSETπCASE 7πPUT (160, 100), youdl, PSETπCASE 8πPUT (160, 100), youdr, PSETπEND SELECTπWAIT &H3DA, 8      'keep same max speedπWAIT &H3DA, 8, 8   'but I never mentioned MINIMUM speed :)πSWAP drawpage, viewpage 'flip the draw/view pointersπLOOP 'and start all this over again!πENDπ'======================πnewxplo:π'add an explosionπ'i don't use GOSUBS much but this is more for flexibilityπ'and I didn't want to keep adding codeπyes = 0πFOR a = 1 TO maxploπ IF xplosions(a).x = 0 AND yes = 0 THEN 'aliveπ  yes = 1π  xplosions(a).x = x 'X and Y were set in the shot collision partπ  xplosions(a).y = yπ  xplosions(a).stage = 1π END IFπNEXT aπRETURNπ'**********************π'Wheeooo-this is line 549!!!π'Hey'yall: Copyright time :)π'the game is done...the dream is here... (modified floyd =])π'All code here Copyright (C) 1996 Daniel Garlansπ'The origional Wormhole idea was done by...er...Glen Blankenship was it? :)π'I don't remember... sorry :) Any other copyrights are respected!π'You may use parts of this, but the graphics are mine and only mine :)π'take the graphics and die =]π'remember to give me credit!π'Bug Report:π'Well, the bugs are few, thankfully =]π'First, occasionally any aliens hitting you from bottom right areaπ'blow up before hitting you... (yaay), sometimes you get pointless explosionsπ'here and there for no apparent reason; usually always on the edges of the screen.π'Some things like explosion movement are weird, and many other things areπ'weird but work :) Good lord, line 564...π'Well, time to sign off-c-ya 'round :)π'ps: sorry for any spelling errors!ππDEFSNG A-ZπSUB drawyou (angle%)πPSET (160, 100), 0πDRAW "TA=" + VARPTR$(angle%)πDRAW "bu2c1l5g2f2r5d3e3c4u4bl1c5d4bu5c1h2d3bd1bl3u0d2bl1bl3bu1c6l1 "ππEND SUBππDEFINT A-ZπSUB gprint (x, y, culler, text$)πDEF SEG = &HFFA6        ' ROM segment for character shape tableπ XX% = xπ FOR Char% = 1 TO LEN(text$)π  Addr% = 8 * ASC(MID$(text$, Char%, 1)) + 14π  FOR Ln% = 0 TO 7π    LineFormat% = CVI(CHR$(0) + CHR$(PEEK(Addr% + Ln%)))π    YY% = y + Ln%π    LINE (XX%, YY%)-(XX% + 7, YY%), culler, , LineFormat%π  NEXTπ  XX% = XX% + 8π NEXTπ DEF SEGπππEND SUBππSUB setpal (reg%, RED%, GREEN%, BLUE%)π  OUT &H3C8, reg%π  OUT &H3C9, RED%π  OUT &H3C9, GREEN%π  OUT &H3C9, BLUE%πEND SUBππSUB storyπLOCATE 24πPRINT "It has been 2 years since the"πPRINT "last of the aliens from the "πPRINT "wormhole were repelled."πPRINT "We thought it was safe. But,"πPRINT "two weeks ago a message was "πPRINT "recived from a space drone"πPRINT "that an alien fleet was found."πPRINT "The aliens are back."πPRINT "This time you're in a specially"πPRINT "fitted Scout Runner with plasma"πPRINT "particle guns."πPRINT "--press any key to continue--"πWHILE INKEY$ = "": WENDπPRINT "The guns require a breif cooldown"πPRINT "period between shots, during which"πPRINT "your only defense is your hull armor."πPRINT "You can withstand about 10-15"πPRINT "collisions, and that's about it."πPRINT "The aliens are smart and will"πPRINT "run at high speed to evade your"πPRINT "shots once you hit them."πPRINT "For now the enemy ships are unarmed,"πPRINT "but the constant stream of them is"πPRINT "more than dangerous enough."πPRINT "Prepare for immersion in...."πPRINTπPRINTπCOLOR 14: PRINT "        The Horde"πCOLOR 15: PRINT "--press any key to continue--"πWHILE INKEY$ = "": WENDπPRINT "Instructions:"πPRINT "Press SPACE to fire"πPRINT "the numeric keypad"πPRINT "allows diagonal directions as"πPRINT "well as regular directions, and"πPRINT "the regular keypad does the "πPRINT "obvious directions."πPRINT "Press ESC to quit, or D to "πPRINT "kill yourself and quit."πPRINT "The red bar on the right is"πPRINT "hull strength, and the gun"πPRINT "cooling level is shown with "πPRINT "the white bar, which vanishes"πPRINT "when you can fire again."πPRINT "Oh yeah, the guns have a"πPRINT "force beam to keep them"πPRINT "level with you, no matter what"πPRINT "direction you're facing."πCOLOR 15: PRINT "--press any key to play--"πWHILE INKEY$ = "": WENDπππEND SUBππSUB youdieπCALL setpal(1, 63, 63, 63)πCALL setpal(2, 63, 63, 0)πSCREEN 7, , 0, 0πLINE (0, 0)-(320, 200), 1, BFπc = 63πFOR a = 0 TO 200 STEP 2πCALL setpal(1, c, c, c)πc = c - 1πIF c < 0 THEN c = 0πCIRCLE (160, 100), a, 2πCIRCLE (161, 101), a, 2πCIRCLE (159, 101), a, 2πCIRCLE (159, 100), a, 2πCIRCLE (161, 100), a, 2πWAIT &H3DA, 8πWAIT &H3DA, 8, 8πNEXT aπCLSπLOCATE 12, 10πPRINT "You have failed...."πPRINT "Shots fired:"; shotsfiredπPRINT "Kills------:"; hitsπPRINT "Misses-----:"; shotsfired - hitsπIF shotsfired = 0 THEN shotsfired = 1πIF hits = 0 THEN hits = 1ππ'PRINT "Accuracy---:"; INT(shotsfired); "%" 'not sure how to show accuracyππENDπππEND SUBππJames Hooker                   BAGELS (NUMBER GUESSING GAME)  alt.lang.basic                 11-03-96 (23:05)       QB, QBasic, PDS        77   3154     BAGELS.BAS      PRINT TAB(33); "BAGELS"π    PRINT TAB(15); "CREATIVE COMPUTING MORRISTOWN, NEW JERSEY"π    PRINT "Modified for execution in QBASIC by James Hooker,  1996"π    REM *** BAGELS NUMBER GUESSING GAMEπ    REM *** ORIGINAL SOURCE UNKNOWN BUT SUSPECTED TO BEπ    REM *** LAWRENCE HALL OF SCIENCE, U.C. BERKLEYπ    DIM Answer%(3), PlayerGuess%(3)π    PRINT : PRINT : PRINTπ    INPUT "WOULD YOU LIKE THE RULES (YES OR NO)"; a$π    IF UCASE$(LEFT$(a$, 1)) <> "N" THENπ        PRINTπ        PRINT "I AM THINKING OF A 3 DIGIT NUMBER.  TRY TO GUESS"π        PRINT "MY NUMBER AND I WILL GIVE YOU CLUES AS FOLLOWS:"π        PRINT "PICO - ONE DIGIT IS IN THE WRONG PLACE"π        PRINT "FERMI - ONE DIGIT IS IN THE CORRECT PLACE"π        PRINT "BAGELS - NO DIGIT IS CORRECT"π    END IFπ    DOπ        FOR i% = 1 TO 3πNoDupDig:   Answer%(i%) = 10 * RND(1)π            IF i > 1 THENπ                FOR J% = 1 TO i - 1π                    IF Answer%(i) = Answer%(J%) THEN GOTO NoDupDigπ                NEXT J%π            END IFπ        NEXT i%π        PRINTπ        PRINT "OK, I HAVE A NUMBER IN MIND."π        FOR i% = 1 TO 20πBadGuess:   PRINT "GUESS #"; i%,π            INPUT a$π            IF LEN(a$) <> 3 THENπ                PRINT "TRY GUESSING A THREE DIGIT NUMBER."π                GOTO BadGuessπ            END IFπ            FOR J% = 1 TO 3π                PlayerGuess%(J%) = ASC(MID$(a$, J%, 1)) - 48π                IF PlayerGuess%(J%) < 0 OR PlayerGuess%(J%) > 9 THENπ                    PRINT "WHAT?"π                    GOTO BadGuessπ                END IFπ            NEXT J%π            IF PlayerGuess%(1) = PlayerGuess%(2) OR PlayerGuess%(2) = PlayerGuess%(3) OR PlayerGuess%(3) = PlayerGuess%(1) THENπ                PRINT "OH, I FORGOT TO TELLL YOU THAT THE NUMBER I HAVE IN MIND"π                PRINT "HAS NO DIGITS THE SAME."π                GOTO BadGuessπ            END IFπ            PicoCount% = 0π            FermiCount% = 0π            FOR J% = 1 TO 2π                IF Answer%(J%) = PlayerGuess%(J% + 1) OR Answer%(J% + 1) = PlayerGuess%(J%) THEN PicoCount% = PicoCount% + 1π            NEXT J%π            IF Answer%(1) = PlayerGuess%(3) OR Answer%(3) = PlayerGuess%(1) THEN PicoCount% = PicoCount% + 1π            FOR J% = 1 TO 3π                IF Answer%(J%) = PlayerGuess%(J%) THEN FermiCount% = FermiCount% + 1π            NEXT J%π            IF FermiCount% = 3 THENπ                PRINT "YOU GOT IT!!!"π                Y = Y + 1π                GOTO Winnerπ            END IFπ            FOR J% = 1 TO PicoCount%π                PRINT "PICO ";π            NEXT J%π            FOR J% = 1 TO FermiCount%π                PRINT "FERMI  ";π            NEXT J%π            IF PicoCount% + FermiCount% = 0 THEN PRINT "BAGELS";π            PRINTπ        NEXT i%π        PRINT "OH WELL"π        PRINT "THATS'S TWENTY GUESSES. MY NUMBER WAS"; 100 * Answer%(1) + 10 * Answer%(2) + Answer%(3)πWinner: INPUT "PLAY AGAIN (YES OR NO)"; a$π    LOOP WHILE UCASE$(LEFT$(a$, 1)) = "Y"π    PRINTπ    PRINT "A"; Y; " POINT BAGLES BUFF!!"π    PRINT "HOPE YOU HAD FUN. BYE."πBrent P. Newhall               WORMHOLE V3.0                  comp.lang.basic.misc           11-01-96 (16:21)       QB, QBasic, PDS        964  30478    WORMHOLE.BAS' Wormholeπ' Version 3.0.0π' by Brent P. Newhallπ' This program is PUBLIC DOMAIN.  Anyone may use it however theyπ'   wish, provided that credit is given where it's due for coding.ππ' Version 1.0.0 -- Original release.π' Version 1.0.1 -- QBASIC compatibility assured, unneeded variablesπ'                  removed.π' Version 2.0.0 -- Longer missiles, multiple missiles, blueπ'                  wormhole and discontinuities (long blue things),π'                  improved explosions, fading title, improvedπ'                  score handling, pause function, better graphicsπ'                  handling, blue good guys, history, QBASIC info.π' Version 3.0.0 -- Better stars, corrected input, energy, energyπ'                  powerup, better graphics handling, moreπ'                  descriptive variables, bombers, fighters,π'                  kamikazes instead of original baddie, speedπ'                  bonus, firepower bonus, smart bomb bonus, intro,π'                  levelsππ' My highest score: 11336 points and 183 aliens killed.  Beat that!ππTYPE MonsterTypeπ  x AS INTEGERπ  y AS INTEGERπ  degree AS INTEGERπ  radius AS SINGLEπ  speed AS SINGLEπ  exist AS INTEGERπ  dying AS INTEGERπ  AlienType AS INTEGERπEND TYPEπTYPE StarTypeπ  x AS INTEGER ' World coordinatesπ  y AS INTEGERπ  z AS INTEGERπ  sx AS INTEGER ' Screen coordinatesπ  sy AS INTEGERπ  spd AS INTEGER ' SpeedπEND TYPEπTYPE VertexTypeπ  x AS SINGLEπ  y AS SINGLEπEND TYPEπTYPE PolygonTypeπ  BorderColor AS INTEGERπ  FilledColor AS INTEGERπ  filled AS INTEGERπ  lxo AS INTEGERπ  lyo AS INTEGERπ  NumVertices AS INTEGERπEND TYPEπTYPE MissileTypeπ  radius AS INTEGERπ  x1 AS INTEGERπ  y1 AS INTEGERπ  x2 AS INTEGERπ  y2 AS INTEGERπ  angle AS INTEGERπEND TYPEππCONST PI = 3.14159, DEG2RAD = PI / 180πCONST FALSE = 0, TRUE = NOT FALSEπCONST TOT.STARS = 25 ' Increase for a prettier starfield effectπCONST TOT.ALIENS = 20 ' Decrease for QBASICπCONST NUM.ALIEN.GRAPHICS = 8πCONST TOT.ENERGY = 50ππDECLARE SUB Intro ()πDECLARE SUB DrawPolygon (poly AS PolygonType, Verts() AS VertexType)πDECLARE SUB ErasePolygon (poly AS PolygonType, Verts() AS VertexType)πDECLARE SUB RotatePolygon (poly AS PolygonType, Verts() AS VertexType, angle AS INTEGER)πDECLARE SUB ScalePolygon (poly AS PolygonType, Verts() AS VertexType, factor AS SINGLE)πDECLARE SUB Add (amt, var)ππDIM SHARED alien(0 TO TOT.ALIENS) AS MonsterTypeπDIM SHARED star(1 TO TOT.STARS) AS StarTypeπDIM ship AS PolygonTypeπDIM ShipVert(1 TO 11) AS VertexTypeπDIM Missile(1 TO 12) AS MissileTypeπDIM SHARED SinLook(0 TO 360) AS DOUBLEπDIM SHARED CosLook(0 TO 360) AS DOUBLEπDIM SHARED AlienGraph(1 TO 200, 1 TO NUM.ALIEN.GRAPHICS) AS INTEGERπDIM SHARED ExplodeGraph(1 TO 200, 1 TO 5) AS INTEGERπDIM SHARED AlienMask(1 TO 200, 1 TO NUM.ALIEN.GRAPHICS) AS INTEGERπDIM melt(3000) AS INTEGERπDIM score AS LONG ' Can go up to 2 trillionπDIM SHARED MonstSpeed AS SINGLEππIntroπGOSUB InitπDOπ  GOSUB MainProgramLoopπLOOP UNTIL quit > 0πGOSUB EndOfGameπENDππMainProgramLoop:πnothing$ = INKEY$ ' Mask out INKEY$πt! = TIMER: WHILE t! = TIMER: WEND ' Delayπnothing$ = INKEY$ ' Mask out INKEY$πGOSUB DoEveryone ' Take care of enemies, ship, missiles, etc.πnothing$ = INKEY$ ' Mask out INKEY$πGOSUB DoInput ' Take care of inputπRETURNππDoEveryone:πGOSUB DoColorsπGOSUB DoStars ' REM for QBASICπGOSUB DoWormhole ' REM for QBASICπGOSUB MoveShipπGOSUB DoAliensπGOSUB DoMissilesπGOSUB DoScoreπGOSUB DoBonusesπRETURNππDoColors: ' Flash monster and score colorsπIF Beginning THENπ  LOCATE 5, 17: PRINT "WORMHOLE";π  IF GoingUp THENπ    ScoreColor% = ScoreColor% + 1π    IF ScoreColor% = 60 THEN GoingUp = FALSE: Staying = 1π  ELSEIF Staying THENπ    Staying = Staying + 1π    IF Staying = 20 THEN Staying = 0π  ELSEπ    ScoreColor% = ScoreColor% - 1π    IF ScoreColor% = 0 THEN ' Begin gameπ      Beginning = FALSEπ      LOCATE 5, 17: PRINT "        ";π      GOSUB CreateMonster ' Create one monster to startπ    END IFπ  END IFπELSEπ  MonstColor% = MonstColor% + 2π  IF MonstColor% > 60 THEN MonstColor% = 0π  PALETTE 101, MonstColor%π  ScoreColor% = ScoreColor% + ScoreMoving%π  IF ScoreColor% > 50 THENπ    ScoreMoving% = -1π  ELSEIF ScoreColor% < 20 THENπ    ScoreMoving% = 1π  END IFπEND IFπPALETTE 102, ScoreColor% + ScoreColor% * 256 + ScoreColor% * 65536πRETURNππDoStars:πFOR cnt% = 1 TO TOT.STARSπ  PSET (star(cnt%).sx, star(cnt%).sy), 0 ' Erase starπ  star(cnt%).z = star(cnt%).z - star(cnt%).spd ' Update positionπ  IF star(cnt%).z < 1 THEN ' Out of bounds ?π    star(cnt%).x = INT(RND * 1000) - 500 ' Create new star!π    star(cnt%).y = INT(RND * 1000) - 500π    star(cnt%).z = INT(RND * 1000) + 1π    star(cnt%).sx = 160π    star(cnt%).sy = 100π    star(cnt%).spd = INT(RND * 40) + 10π  END IFπ  ' Project 3d coordinates to 2d coordinatesπ  star(cnt%).sx = 64 * (star(cnt%).x / star(cnt%).z) + 160π  star(cnt%).sy = 64 * (star(cnt%).y / star(cnt%).z) + 100π  ' Draw starπ   PSET (star(cnt%).sx, star(cnt%).sy), (32 - star(cnt%).z / 64)πNEXT cnt%πRETURNππDoWormhole:πCIRCLE (159, 99), wormholeradius1, 0 ' Erase old circlesπCIRCLE (159, 99), wormholeradius2, 0πwormholeradius1 = INT(RND * 6) ' Create new circleπwormholeradius2 = INT(RND * 6)πCIRCLE (159, 99), wormholeradius1, 9 ' Draw new circlesπCIRCLE (159, 99), wormholeradius2, 1πRETURNππMoveShip:πIF moving THENπ  ErasePolygon ship, ShipVert()π  posit% = posit% + moving * ShipSpeed ' Move shipπ  IF posit% < 0 THEN posit% = posit% + 360π  IF posit% > 360 THEN posit% = posit% - 360π  ship.lxo = INT(ShipRadius * CosLook(posit%)) + 159π  ship.lyo = INT(ShipRadius * SinLook(posit%)) + 99π  IF EndOfLevel THENπ    ScalePolygon ship, ShipVert(), .9π  ELSEπ    IF POINT(ship.lxo, ship.lyo) >= 100 THEN ' Ran into baddie?π      cnt% = 0π      WHILE cnt% < NumAliensπ        cnt% = cnt% + 1π        IF alien(cnt%).x <= ship.lxo THENπ          IF alien(cnt%).y <= ship.lyo THENπ            IF alien(cnt%).x + 10 >= ship.lxo THENπ              IF alien(cnt%).y + 10 >= ship.lyo THENπ                energy% = energy% - 10π                IF energy% < 1 THEN quit = 2π                alien(cnt%).dying = 1π              END IFπ            END IFπ          END IFπ        END IFπ      WENDπ    END IFπ    RotatePolygon ship, ShipVert(), moving * ShipSpeedπ  END IFπ  moving = 0πEND IFπDrawPolygon ship, ShipVert()πRETURNππDoAliens:πToBeKilled% = 0πFOR cnt% = 1 TO NumAliensπ  IF alien(cnt%).dying THENπ    PUT (alien(cnt%).x, alien(cnt%).y), ExplodeGraph(1, alien(cnt%).dying)π  ELSEπ    PUT (alien(cnt%).x, alien(cnt%).y), AlienGraph(1, alien(cnt%).AlienType)π  END IFπNEXT cnt%πm% = 0πWHILE m% < NumAliensπ  m% = m% + 1 ' Loop through, 1..NumAliensπ  IF alien(m%).dying < 5 THEN ' If not at end of dyingπ    alien(m%).radius = alien(m%).radius + alien(m%).speedπ    IF alien(m%).AlienType = 1 THEN ' Kamikazeπ      IF alien(m%).degree < posit% THEN ' Move towards playerπ        alien(m%).degree = alien(m%).degree + 1π      ELSEIF alien(m%).degree > posit% THENπ        alien(m%).degree = alien(m%).degree - 1π      END IFπ    ELSEIF alien(m%).AlienType = 2 THEN ' Bomberπ      IF RND > .99 THEN ' Occasionally create a new fighterπ        GOSUB CreateMonster ' Create, then erase created alienπ        PUT (alien(NumAliens).x, alien(NumAliens).y), AlienGraph(1, alien(NumAliens).AlienType), XORπ        alien(NumAliens).radius = alien(m%).radius + INT(RND * 11 - 5)π        alien(NumAliens).degree = alien(m%).degree + INT(RND * 7 - 3)π        IF alien(NumAliens).degree < 0 THENπ          alien(NumAliens).degree = alien(NumAliens).degree + 360π        ELSEIF alien(NumAliens).degree > 360 THENπ          alien(NumAliens).degree = alien(NumAliens).degree - 360π        END IFπ        alien(NumAliens).x = INT(alien(NumAliens).radius * CosLook(alien(NumAliens).degree)) + 154π        alien(NumAliens).y = INT(alien(NumAliens).radius * SinLook(alien(NumAliens).degree)) + 94π        alien(NumAliens).AlienType = 3 ' Create fighterπ        PUT (alien(NumAliens).x, alien(NumAliens).y), AlienGraph(1, alien(NumAliens).AlienType), PSETπ      END IFπ    END IFπ    alien(m%).x = INT(alien(m%).radius * CosLook(alien(m%).degree)) + 154π    alien(m%).y = INT(alien(m%).radius * SinLook(alien(m%).degree)) + 94π    IF alien(m%).dying THENπ      alien(m%).dying = alien(m%).dying + 1π      PUT (alien(m%).x, alien(m%).y), ExplodeGraph(1, alien(m%).dying), PSETπ    ELSEπ      PUT (alien(m%).x, alien(m%).y), AlienMask(1, alien(m%).AlienType), ANDπ      PUT (alien(m%).x, alien(m%).y), AlienGraph(1, alien(m%).AlienType), ORπ    END IFπ    IF alien(m%).radius > 90 THEN ' Outside orbitπ      IF alien(m%).AlienType = 4 THEN ' Good guyπ        score = score + 250π        ToBeKilled% = m%π      ELSEIF alien(m%).AlienType > 4 THEN ' Bonus!π        MonstersKilled% = MonstersKilled% - 1π        ToBeKilled% = m%π      ELSE ' Baddieπ        energy% = energy% - 5π        IF energy% < 1 THENπ          quit = 2π        ELSEπ          ToBeKilled% = m%π        END IFπ      END IFπ    END IFπ  ELSE ' At end of dyingπ    ToBeKilled% = m%π  END IFπWENDπIF ToBeKilled% > 0 THENπ  m% = ToBeKilled%π  ' Erase out last vestiges of monster graphicπ  LINE (alien(m%).x - 4, alien(m%).y - 4)-(alien(m%).x + 14, alien(m%).y + 14), 0, BFπ  GOSUB KillMonsterπEND IFπIF NOT Beginning THENπ  IF NumAliensThisLevel < TotAliensThisLevel THENπ    IF RND > MonstChance THEN ' Create new alien occasionallyπ      GOSUB CreateMonsterπ    END IFπ  ELSEIF NumAliens = 0 THEN ' Full of monsters, all destroyedπ    GOSUB EndLevelπ  END IFπEND IFπRETURNππEndLevel:πlevel = level + 1πIF level < 6 THENπ  FOR lcnt% = 1 TO 25π    GOSUB DoColorsπ    GOSUB DoStarsπ    GOSUB DoWormholeπ    t! = TIMER: WHILE t! = TIMER: WENDπ  NEXT lcnt%π  energy% = TOT.ENERGY ' Refill energyπ  NumAliensThisLevel = 0π  Add 10, TotAliensThisLevelπ  Add -.005, MonstChanceπ  Add .05, MonstSpeedπ  EndOfLevel = TRUEπ  temp = ShipRadiusπ  FOR ShipRadius = temp TO 0 STEP -5π    LOCATE 24, 1: PRINT ShipRadius;π    moving = 1π    GOSUB DoColorsπ    GOSUB DoStarsπ    GOSUB DoWormholeπ    GOSUB MoveShipπ    t! = TIMER: WHILE t! = TIMER: WENDπ  NEXT ShipRadiusπ  ShipRadius = tempπ  EndOfLevel = FALSEπ  RESTOREπ  FOR cnt% = 1 TO ship.NumVertices ' Reset verticesπ    READ ShipVert(cnt%).x, ShipVert(cnt%).yπ  NEXT cnt%π  posit% = 0π  moving = 1π  GOSUB MoveShipπELSE ' End of game; you won!π  quit = 3πEND IFπRETURNππDoMissiles:πmiss% = 0πWHILE miss% < NumMissilesπ  miss% = miss% + 1 ' Loop through, 1..NumMissilesπ  ' Erase missileπ  LINE (Missile(miss%).x1%, Missile(miss%).y1%)-(Missile(miss%).x2%, Missile(miss%).y2%), 0π  IF Missile(miss%).radius < 2 THEN ' If at centerπ    GOSUB KillMissileπ  ELSEπ    Missile(miss%).radius = Missile(miss%).radius - 3 ' Move its coordinatesπ    Missile(miss%).x1 = INT(Missile(miss%).radius * CosLook(Missile(miss%).angle)) + 159π    Missile(miss%).y1 = INT(Missile(miss%).radius * SinLook(Missile(miss%).angle)) + 99π    Missile(miss%).x2 = INT((Missile(miss%).radius + 3) * CosLook(Missile(miss%).angle)) + 159π    Missile(miss%).y2 = INT((Missile(miss%).radius + 3) * SinLook(Missile(miss%).angle)) + 99π    IF POINT(Missile(miss%).x1%, Missile(miss%).y1%) >= 100 THENπ      cnt% = 0 ' Hit a monster! (front end)π      WHILE cnt% < NumAliens AND alien(cnt%).dying = 0π        cnt% = cnt% + 1 ' Find hit monsterπ        IF Missile(miss%).x1% >= alien(cnt%).x THENπ          IF Missile(miss%).y1% >= alien(cnt%).y THENπ            IF Missile(miss%).x1% <= alien(cnt%).x + 10 THENπ              IF Missile(miss%).y1% <= alien(cnt%).y + 10 THENπ                GOSUB HitSomethingπ              END IFπ            END IFπ          END IFπ        END IFπ      WENDπ      GOSUB KillMissileπ    ELSEIF POINT(Missile(miss%).x2%, Missile(miss%).y2%) >= 100 THENπ      cnt% = 0 ' Hit a monster! (back end)π      WHILE cnt% < NumAliens AND alien(cnt%).dying = 0π        cnt% = cnt% + 1 ' Find hit monsterπ        IF Missile(miss%).x2% >= alien(cnt%).x THENπ          IF Missile(miss%).y2% >= alien(cnt%).y THENπ            IF Missile(miss%).x2% <= alien(cnt%).x + 10 THENπ              IF Missile(miss%).y2% <= alien(cnt%).y + 10 THENπ                GOSUB HitSomethingπ              END IFπ            END IFπ          END IFπ        END IFπ      WENDπ      GOSUB KillMissileπ    ELSE ' Draw Missileπ      LINE (Missile(miss%).x1%, Missile(miss%).y1%)-(Missile(miss%).x2%, Missile(miss%).y2%), 14π    END IFπ  END IFπWENDπRETURNππHitSomething:πIF alien(cnt%).AlienType > 4 THEN ' Powerupπ  m% = cnt%π  SELECT CASE alien(cnt%).AlienTypeπ    CASE 5 ' Energyπ      energy% = energy% + 10π      IF energy% > TOT.ENERGY THEN energy% = TOT.ENERGYπ    CASE 6 ' Firepowerπ      LOCATE 25, 10: PRINT CHR$(15); ' Print firepower thingyπ      RateOfFire = .4 ' Quicker rate of fireπ      FirepowerCnt% = 250 ' Lasts 250 ticksπ      bonus = TRUEπ    CASE 7 ' Speedπ      LOCATE 25, 12: PRINT CHR$(19); ' Print speed thingyπ      ShipSpeed = 5 ' Quicker speed around orbitπ      ExtraSpeedCnt% = 250 ' Lasts 250 ticksπ      bonus = TRUEπ    CASE 8π      LOCATE 25, 14: PRINT CHR$(236);π      SmartBomb = TRUEπ  END SELECTπ  ' Erase out last vestiges of alien graphicπ  LINE (alien(m%).x - 3, alien(m%).y - 3)-(alien(m%).x + 13, alien(m%).y + 13), 0, BFπ  GOSUB KillMonsterπELSEπ  alien(cnt%).dying = 1πEND IFπRETURNππFire:πIF TIMER > LastMissile! + RateOfFire OR NumMissiles = 0 THENπ  ' If time has passed or there are no active missilesπ  IF NumMissiles < 10 THEN ' If enough missiles leftπ    NumMissiles = NumMissiles + 1π    Missile(NumMissiles).radius = 78 ' Put near shipπ    Missile(NumMissiles).angle = posit% ' Missile Angle = Ship Angleπ    score = score - 5π    IF score < 0 THEN score = 0π    LastMissile! = TIMERπ  END IFπEND IFπRETURNππCreateMonster:πIF NumAliens < TOT.ALIENS - 1 THEN ' If there's spaceπ  Add 1, NumAliens ' Another monsterπ  alien(NumAliens).x = 154 ' First coordinatesπ  alien(NumAliens).y = 94π  alien(NumAliens).degree = INT(RND * 361)π  alien(NumAliens).radius = 0 ' In the middleπ  alien(NumAliens).exist = TRUEπ  IF RND > .95 THEN ' 5% of the timeπ    IF RND > .5 THEN ' Create good guy half the timeπ      alien(NumAliens).AlienType = 4π    ELSE ' Create bonusπ      IF RND > .75 THEN ' energy 25% of the timeπ        alien(NumAliens).AlienType = 5π      ELSEIF RND > .75 THEN ' firepower 25% of the timeπ        alien(NumAliens).AlienType = 6π      ELSEIF RND > .75 THEN ' speed 25% of the timeπ        alien(NumAliens).AlienType = 7π      ELSE ' smart bomb rest of the timeπ        alien(NumAliens).AlienType = 8π      END IFπ    END IFπ  ELSE ' Regular bad guy rest of the timeπ    Add 1, NumAliensThisLevel ' Another (real, bad) alienπ    IF RND > .66 THEN ' fighter 33% of the timeπ      alien(NumAliens).AlienType = 3π      alien(NumAliens).speed = MonstSpeed / 3π    ELSEIF RND > .8 THEN ' bomber 20% of the timeπ      alien(NumAliens).AlienType = 2π      alien(NumAliens).speed = MonstSpeedπ    ELSE ' kamikaze rest of the timeπ      alien(NumAliens).AlienType = 1π      alien(NumAliens).speed = MonstSpeedπ    END IFπ  END IFπ  PUT (alien(NumAliens).x, alien(NumAliens).y), AlienGraph(1, alien(NumAliens).AlienType), PSETπEND IFπRETURNππKillMonster:πIF alien(m%).AlienType <= 3 THENπ  ' Further in, higher scoreπ  score = score + (100 - alien(m%).radius)π  MonstersKilled% = MonstersKilled% + 1πELSEπ  score = score - 100π  IF score < 0 THEN score = 0πEND IFπFOR cnt1% = m% TO NumAliens ' Copy next over currentπ  alien(cnt1%).x = alien(cnt1% + 1).xπ  alien(cnt1%).y = alien(cnt1% + 1).yπ  alien(cnt1%).degree = alien(cnt1% + 1).degreeπ  alien(cnt1%).radius = alien(cnt1% + 1).radiusπ  alien(cnt1%).dying = alien(cnt1% + 1).dyingπ  alien(cnt1%).exist = alien(cnt1% + 1).existπ  alien(cnt1%).AlienType = alien(cnt1% + 1).AlienTypeπNEXT cnt1%πNumAliens = NumAliens - 1 ' One less monster!πRETURNππKillMissile:πFOR cnt1% = miss% TO NumMissiles ' Copy next over currentπ  Missile(cnt1%).x1 = Missile(cnt1% + 1).x1π  Missile(cnt1%).y1 = Missile(cnt1% + 1).y1π  Missile(cnt1%).x2 = Missile(cnt1% + 1).x2π  Missile(cnt1%).y2 = Missile(cnt1% + 1).y2π  Missile(cnt1%).angle = Missile(cnt1% + 1).angleπ  Missile(cnt1%).radius = Missile(cnt1% + 1).radiusπNEXT cnt1%πNumMissiles = NumMissiles - 1 ' One less missileπRETURNππDoScore:πIF NOT Beginning THENπ  LOCATE 25, 1: PRINT score;π  LOCATE 25, 26: PRINT "-"; level; "-";π  LOCATE 25, 36: PRINT MonstersKilled%;π  LINE (0, 24)-(0, 174), 0π  LINE (0, 174 - energy% * 3)-(0, 174), 138πEND IFπRETURNππDoInput:πkp% = INP(&H60) ' Get keypress in kp%πIF kp% < 100 THEN ' &H60 is > 100 if no keypressesπ  IF kp% = 77 THEN ' [RIGHT]π    moving = -1π  ELSEIF kp% = 75 THEN ' [LEFT]π    moving = 1π  ELSEIF kp% = 57 THEN ' [SPACE]π    GOSUB Fireπ  ELSEIF kp% = 25 THEN ' [P]π    GOSUB Pauseπ  ELSEIF kp% = 28 THEN ' [ENTER]π    IF Beginning THENπ      GoingUp = FALSEπ      Staying = 0π      ScoreColor% = 1π    ELSEIF SmartBomb THEN ' If you have a smart bombπ      LOCATE 25, 14: PRINT " ";π      SmartBomb = FALSEπ      FOR cnt% = 1 TO NumAliensπ        IF alien(cnt%).dying < 1 THEN ' If not dyingπ          alien(cnt%).dying = 1 ' Kill 'emπ        END IFπ      NEXT cnt%π    END IFπ  ELSEIF kp% = 1 THEN ' [ESC]π    quit = 1π  END IFπEND IFπRETURNππDoBonuses:πIF bonus THENπ  IF FirepowerCnt% > 0 THENπ    FirepowerCnt% = FirepowerCnt% - 1π    IF FirepowerCnt% = 0 THENπ      RateOfFire = .7π      IF ExtraSpeedCnt% = 0 THEN bonus = FALSEπ      LOCATE 25, 10: PRINT " ";π    END IFπ  ELSEIF ExtraSpeedCnt% > 0 THENπ    ExtraSpeedCnt% = ExtraSpeedCnt% - 1π    IF ExtraSpeedCnt% = 0 THENπ      ShipSpeed = 3π      IF FirepowerCnt% = 0 THEN bonus = FALSEπ      LOCATE 25, 12: PRINT " ";π    END IFπ  END IFπEND IFπRETURNππPause:πIF NOT Beginning THENπ  LOCATE 5, 18: PRINT "PAUSED";π  DO: LOOP UNTIL INKEY$ <> "" ' Wait for keypressπ  LOCATE 5, 18: PRINT "      ";πEND IFπRETURNππInit:πSCREEN 13πRANDOMIZE TIMERππCIRCLE (5, 5), 5, 100: PAINT (5, 5), 100 ' Draw kamikazeπLINE (0, 0)-(10, 10), 100πLINE (10, 0)-(0, 10), 100πLINE (4, 5)-(6, 5), 101πLINE (5, 4)-(5, 6), 101πPSET (0, 0), 101: PSET (10, 0), 101πPSET (0, 10), 101: PSET (10, 10), 101πGET (0, 0)-(10, 10), AlienGraph(1, 1)πLINE (0, 0)-(10, 10), 255, BF ' Draw maskπCIRCLE (5, 5), 5, 100: PAINT (5, 5), 100πLINE (0, 0)-(10, 10), 100πLINE (10, 0)-(0, 10), 100πLINE (4, 5)-(6, 5), 101πLINE (5, 4)-(5, 6), 101πPSET (0, 0), 101: PSET (10, 0), 101πPSET (0, 10), 101: PSET (10, 10), 101πGET (0, 0)-(10, 10), AlienMask(1, 1)πPUT (0, 0), AlienMask(1, 1)ππPUT (10, 10), AlienGraph(1, 1)πLINE (10, 15)-(20, 15), 0 ' Explosion 1πLINE (15, 10)-(16, 20), 0πLINE (14, 14)-(17, 16), 0, BπCIRCLE (15, 15), 3, 12, , , 1 / 3πPAINT (15, 15), 12πPSET (14, 13), 7πPSET (17, 17), 7πGET (8, 8)-(22, 22), ExplodeGraph(1, 1)ππCIRCLE (16, 15), 4, 0 ' Explosion 2πCIRCLE (15, 15), 4, 12, , , 1 / 2πCIRCLE (15, 15), 2, 14, , , 1 / 2πPAINT (15, 15), 14πCIRCLE (13, 12), 1, 7: PSET (13, 12), 7πCIRCLE (18, 18), 1, 7: PSET (18, 18), 7πGET (8, 8)-(22, 22), ExplodeGraph(1, 2)ππPUT (10, 10), AlienGraph(1, 1), PSET ' Explosion 3πCIRCLE (15, 15), 6, 0: PAINT (15, 15), 0πCIRCLE (15, 15), 6, 4, , , 1 / 2πPAINT (15, 15), 4πCIRCLE (15, 15), 4, 14, , , 1 / 2πPAINT (15, 15), 14πPSET (10, 10), 0πCIRCLE (12, 11), 1, 8πCIRCLE (19, 19), 1, 8πGET (8, 8)-(22, 22), ExplodeGraph(1, 3)πPUT (8, 8), ExplodeGraph(1, 3)ππCIRCLE (15, 15), 7, 116, , , 1 / 2 ' Explosion 4πPAINT (15, 15), 116πCIRCLE (15, 15), 4, 0, , , 1 / 2πPAINT (15, 15), 0πGET (8, 8)-(22, 22), ExplodeGraph(1, 4)πPUT (8, 8), ExplodeGraph(1, 4)ππCIRCLE (15, 15), 7, 43, , , 1 / 2 ' Explosion 5πGET (8, 8)-(22, 22), ExplodeGraph(1, 5)πPUT (8, 8), ExplodeGraph(1, 5)ππCIRCLE (15, 15), 5, 100, , , 1 ' Draw bomberπPAINT (15, 15), 100πCIRCLE (15, 15), 5, 101, , , 1πGET (10, 10)-(20, 20), AlienGraph(1, 2)πLINE (10, 10)-(20, 20), 255, BF ' Draw maskπCIRCLE (15, 15), 5, 100, , , 1πPAINT (15, 15), 100πCIRCLE (15, 15), 5, 101, , , 1πGET (10, 10)-(20, 20), AlienMask(1, 2)πPUT (10, 10), AlienMask(1, 2)ππLINE (15, 11)-(15, 19), 101 ' Draw fighterπLINE (11, 15)-(19, 15), 101πLINE (12, 15)-(15, 12), 100πLINE (15, 12)-(18, 15), 100πLINE (12, 15)-(15, 18), 100πLINE (15, 18)-(18, 15), 100πPAINT (15, 15), 100πGET (10, 10)-(20, 20), AlienGraph(1, 3)πLINE (10, 10)-(20, 20), 255, BFπLINE (15, 11)-(15, 19), 101πLINE (11, 15)-(19, 15), 101πLINE (12, 15)-(15, 12), 100πLINE (15, 12)-(18, 15), 100πLINE (12, 15)-(15, 18), 100πLINE (15, 18)-(18, 15), 100πPAINT (15, 15), 100πGET (10, 10)-(20, 20), AlienMask(1, 3)πPUT (10, 10), AlienMask(1, 3)ππCIRCLE (15, 15), 5, 104, , , 1 / 3 ' Draw good guyπPAINT (15, 15), 104πCIRCLE (15, 15), 5, 104, , , 3πLINE (15, 10)-(15, 20), 104πLINE (10, 10)-(20, 20), 104πLINE (20, 10)-(10, 20), 104πGET (10, 10)-(20, 20), AlienGraph(1, 4)πLINE (10, 10)-(20, 20), 255, BF ' Draw maskπCIRCLE (15, 15), 5, 104, , , 1 / 3πPAINT (15, 15), 104πCIRCLE (15, 15), 5, 104, , , 3πLINE (15, 10)-(15, 20), 104πLINE (10, 10)-(20, 20), 104πLINE (20, 10)-(10, 20), 104πGET (10, 10)-(20, 20), AlienMask(1, 4)πPUT (10, 10), AlienMask(1, 4)ππCIRCLE (15, 15), 1, 105 ' Draw energy powerupπPAINT (15, 15), 105πCIRCLE (15, 15), 3, 105πGET (10, 10)-(20, 20), AlienGraph(1, 5)πLINE (10, 10)-(20, 20), 255, BF ' Draw maskπCIRCLE (15, 15), 1, 105πPAINT (15, 15), 105πCIRCLE (15, 15), 3, 105πGET (10, 10)-(20, 20), AlienMask(1, 5)πPUT (10, 10), AlienMask(1, 5)ππLINE (12, 12)-(18, 18), 105, B ' Draw firepower powerupπLINE (12, 12)-(18, 18), 105πLINE (12, 18)-(18, 12), 105πGET (10, 10)-(20, 20), AlienGraph(1, 6)πLINE (10, 10)-(20, 20), 255, BFπLINE (12, 12)-(18, 18), 105, BπLINE (12, 12)-(18, 18), 105πLINE (12, 18)-(18, 12), 105πGET (10, 10)-(20, 20), AlienMask(1, 6)πPUT (10, 10), AlienMask(1, 6)ππLINE (15, 10)-(15, 20), 105 ' Draw speed powerupπLINE (10, 15)-(20, 15), 105πLINE (14, 11)-(16, 19), 105, BπLINE (11, 14)-(19, 16), 105, BπLINE (14, 15)-(16, 15), 0πLINE (15, 14)-(15, 16), 0πGET (10, 10)-(20, 20), AlienGraph(1, 7)πLINE (10, 10)-(20, 20), 255, BFπLINE (15, 10)-(15, 20), 105 ' Draw speed powerupπLINE (10, 15)-(20, 15), 105πLINE (14, 11)-(16, 19), 105, BπLINE (11, 14)-(19, 16), 105, BπLINE (14, 15)-(16, 15), 255πLINE (15, 14)-(15, 16), 255πGET (10, 10)-(20, 20), AlienMask(1, 7)πPUT (10, 10), AlienMask(1, 7)ππCIRCLE (15, 15), 3, 105, , , 1 ' Draw smart bombπPAINT (15, 15), 105πLINE (12, 15)-(18, 15), 106πLINE (15, 12)-(15, 18), 106πGET (10, 10)-(20, 20), AlienGraph(1, 8)πLINE (10, 10)-(20, 20), 255, BFπCIRCLE (15, 15), 3, 105, , , 1πPAINT (15, 15), 105πLINE (12, 15)-(18, 15), 106πLINE (15, 12)-(15, 18), 106πGET (10, 10)-(20, 20), AlienMask(1, 8)πPUT (10, 10), AlienMask(1, 8)ππPALETTE 100, 30 ' Change alien color to redπPALETTE 101, 60 ' Change alien other color to redπPALETTE 104, 3942440 ' Change good guy color to bright blueπPALETTE 105, 50 + 50 * 256 ' Change bonus color to yellowπPALETTE 106, 10 + 2560 + 655360 ' Extra color, grayππFOR cnt% = 0 TO 360 ' Initialise look-up tablesπ  SinLook(cnt%) = SIN(cnt% * DEG2RAD)π  CosLook(cnt%) = COS(cnt% * DEG2RAD)πNEXT cnt%ππposit% = 0 ' Player's initial position = 0πship.lxo = INT(80 * CosLook(posit%)) + 159πship.lyo = INT(80 * SinLook(posit%)) + 99πenergy% = TOT.ENERGYπscore = 0πMonstersKilled% = 0πScoreColor% = 0πScoreMoving% = 1ππFOR cnt% = 1 TO TOT.STARS ' Initialise starsπ  star(cnt%).x = INT(RND * 1000) - 500π  star(cnt%).y = INT(RND * 1000) - 500π  star(cnt%).z = INT(RND * 1000) + 1π  star(cnt%).sx = 160π  star(cnt%).sy = 100π  star(cnt%).spd = INT(RND * 40) + 10πNEXT cnt%ππship.BorderColor = 53 ' Original ship color is light blueπship.filled = FALSE ' Ship is not filledπship.NumVertices = 11 ' 11 vertices (3 for QBASIC)πFOR cnt% = 1 TO ship.NumVertices ' Define verticesπ  READ ShipVert(cnt%).x, ShipVert(cnt%).yπNEXT cnt%πShipRadius = 80πRateOfFire = .7πShipSpeed = 3ππlevel = 1πNumAliensThisLevel = 0πTotAliensThisLevel = 30ππMonstSpeed = .1πMonstChance = .97ππPALETTE 102, 0πCOLOR 102ππBeginning = TRUEπGoingUp = TRUEππDrawPolygon ship, ShipVert()πRETURNππEndOfGame:πIF quit = 1 THEN ' Manual endπ  SCREEN 0: WIDTH 80π  PRINT "Quitter!"πELSEIF quit = 2 THEN ' Deathπ  LOCATE 12, 16: PRINT "YOU LOSE";π  SLEEP 2 ' Pause for two secondsπ  done = FALSEπ  cnt% = 0π  WHILE cnt% < 2000 AND NOT doneπ    cnt% = cnt% + 1 ' Loop 3000 timesπ    XX% = INT(RND * 271)π    YX% = INT(RND * 150)π    GET (XX%, YX%)-(XX% + 48, YX% + 48), meltπ    PUT (XX%, YX% + 1), melt, PSETπ    ' End on keyhit only after melting awhileπ    IF INKEY$ <> "" THEN IF cnt% > 500 THEN done = TRUEπ    ' Do an occasional delayπ    IF cnt% MOD 100 = 0 THEN t! = TIMER: WHILE t! = TIMER: WENDπ  WENDπ  SCREEN 0: WIDTH 80 ' Normal text screenπ  PRINT "You lose."πELSEIF quit = 3 THEN ' You won!π  REM Neat animation to be added hereπ  ErasePolygon ship, ShipVert()π  PALETTE 14, 0 ' Erase missilesπ  PALETTE 102, 0π  PALETTE 138, 0π  FOR ecnt% = 1 TO 30π    GOSUB DoStarsπ    r = r + 10π    CIRCLE (159, 99), wormholeradius1, 0 ' Erase old circlesπ    CIRCLE (159, 99), wormholeradius2, 0π    wormholeradius1 = INT(RND * 6) + rπ    wormholeradius2 = INT(RND * 6) + rπ    CIRCLE (159, 99), wormholeradius1, 9 ' Draw new circlesπ    CIRCLE (159, 99), wormholeradius2, 1π    t! = TIMER: WHILE t! = TIMER: WENDπ  NEXT ecnt%π  FOR ecnt% = 1 TO 25π    t! = TIMER: WHILE t! = TIMER: WENDπ  NEXT ecnt%π  SCREEN 0: WIDTH 80π  PRINT "You won!"πEND IFπPRINT "You ended up with a score of"; score; "and"; MonstersKilled%; "aliens killed."πRETURNππ' REM out the following 11 DATA statements for QBASICππ' Regular ship polygonπDATA 0, 0πDATA 5, -5πDATA 10, -5πDATA 5, -10πDATA 10, -10πDATA 15, -5πDATA 15, 5πDATA 10, 10πDATA 5, 10πDATA 10, 5πDATA 5, 5ππ' QBASIC triangular ship polygonπDATA 0, 0πDATA 10, -5πDATA 10, 5ππSUB Add (amt, var)ππ' Adds _amt_ to varπvar = var + amtππEND SUBππSUB DrawPolygon (poly AS PolygonType, Verts() AS VertexType)ππxo = poly.lxoπyo = poly.lyoππIF poly.filled THENπ  FOR index = 1 TO poly.NumVertices - 1π    LINE (xo + Verts(index).x, yo + Verts(index).y)-(xo + Verts(index + 1).x, yo + Verts(index + 1).y), poly.FilledColorπ  NEXT indexπ  LINE (xo + Verts(poly.NumVertices).x, yo + Verts(poly.NumVertices).y)-(xo + Verts(1).x, yo + Verts(1).y), poly.FilledColorπ  PAINT (xo, yo), poly.FilledColorπELSEπ  FOR index = 1 TO poly.NumVertices - 1π    LINE (xo + Verts(index).x, yo + Verts(index).y)-(xo + Verts(index + 1).x, yo + Verts(index + 1).y), poly.BorderColorπ  NEXT indexπ  LINE (xo + Verts(poly.NumVertices).x, yo + Verts(poly.NumVertices).y)-(xo + Verts(1).x, yo + Verts(1).y), poly.BorderColorπEND IFππEND SUBππSUB ErasePolygon (poly AS PolygonType, Verts() AS VertexType)ππxo = poly.lxoπyo = poly.lyoππIF poly.filled THENπ  FOR index = 1 TO poly.NumVertices - 1π    LINE (xo + Verts(index).x, yo + Verts(index).y)-(xo + Verts(index + 1).x, yo + Verts(index + 1).y), 0π  NEXT indexπ  LINE (xo + Verts(poly.NumVertices).x, yo + Verts(poly.NumVertices).y)-(xo + Verts(1).x, yo + Verts(1).y), 0π  PAINT (xo, yo), FilledColorπELSEπ  FOR index = 1 TO poly.NumVertices - 1π    LINE (xo + Verts(index).x, yo + Verts(index).y)-(xo + Verts(index + 1).x, yo + Verts(index + 1).y), 0π  NEXT indexπ  LINE (xo + Verts(poly.NumVertices).x, yo + Verts(poly.NumVertices).y)-(xo + Verts(1).x, yo + Verts(1).y), 0πEND IFππEND SUBππSUB Intro ()ππCLSπPRINT "     One day, without warning, the heavens next to our planet opened"πPRINT "   like a flower.  Out of this wormhole came an alien delegation,"πPRINT "   their only wish to sign a treaty with us.  We sent our entire"πPRINT "   starfleet to the wormhole's mouth in this treaty's honor."πPRINT "     Then, out of that wormhole poured ships the likes of which we had"πPRINT "   never dreamed.  Our fleet was decimated; most ships were"πPRINT "   destroyed, others pulled into the wormhole to fight on the"πPRINT "   aliens' ground.  But we had made our mark: the half of their"πPRINT "   fleet remaining withdrew into the wormhole."πPRINT "     Now, you man the only spaceworthy ship left.  Your mission:"πPRINT "   destroy the aliens as they come out of the wormhole, as their"πPRINT "   weapons are useless for a small critical distance from the"πPRINT "   wormhole's mouth.  They will be defenseless unless they get"πPRINT "   past you.  Good luck!"πPRINT "     Your ship can only move in a circular orbit around the wormhole"πPRINT "   out of which the red aliens are coming.  Use the left and right"πPRINT "   arrow keys to move around, [SPACE] to fire a missile at the"πPRINT "   aliens, and [ESC] to quit.  Hit [ENTER] to bypass the"πPRINT "   beginning, and [P] to pause.  Your score is displayed in the"πPRINT "   lower left, and number of aliens destroyed in the lower right."πPRINT "   Blue ships are our ships returning; let them pass.  The brown"πPRINT "   bar on the left is your energy.  Each alien that gets by will"πPRINT "   drain your energy; let enough by and Game Over!"πLOCATE 25, 50: PRINT "Hit any key to continue....";πDO: LOOP UNTIL INKEY$ <> ""πππEND SUBππSUB RotatePolygon (poly AS PolygonType, Verts() AS VertexType, angle AS INTEGER)ππIF angle >= 0 THENπ  si = SIN(angle * DEG2RAD)π  cs = COS(angle * DEG2RAD)πELSEπ  si = SIN((angle + 360) * DEG2RAD)π  cs = COS((angle + 360) * DEG2RAD)πEND IFππFOR index = 1 TO poly.NumVerticesπ  rx = Verts(index).x * cs - Verts(index).y * siπ  ry = Verts(index).y * cs + Verts(index).x * siπ  Verts(index).x = rxπ  Verts(index).y = ryπNEXT indexππEND SUBππSUB ScalePolygon (poly AS PolygonType, Verts() AS VertexType, factor AS SINGLE)ππ' Scales the polygon in _poly_ and _verts()_ by the _factor_ππFOR index% = 1 TO poly.NumVerticesπ  Verts(index%).x = Verts(index%).x * factorπ  Verts(index%).y = Verts(index%).y * factorπNEXT index%ππEND SUBπBrian Flanagan                 BOXES W/MOUSE CONTROL          comp.lang.basic.misc           10-16-96 (09:02)       PB                     184  3801     BOXES.BAS   'I wrote this game last night in about an hour in PowerBasic.  The code isπ'Public Domain.  Enjoy!ππ'Briansterππ' The object of DemonBox is to turn all of the yellow boxes into blue boxes.π' You change a box's color by left-clicking on it.  If it is yellow, itπ' blue and vice versa.  When you change on box's color, you change the colorπ' of the box directly above, below, to the right, and to the left of it asπ' well. You win the game when all of the boxes are blue.ππ' Right-clicking exits the game.ππ' Initialize mouse.πms% = MouseInitialize%πIF NOT ms% THENπ  PRINT "No Mouse, pal."π  ENDπEND IFπππrandomize timerππboxoff?=9πboxon?=14ππ' Set up the grid.πtype gridtypeπ   litup as byteπ   xloc as integerπ   yloc as integerπend typeππdim grid(9,9) as shared gridtypeπfor x%=0 to 9π   for y%=0 to 9π      grid(x%,y%).xloc=(x%+1)*20+40π      grid(x%,y%).yloc=(y%)*20π      grid(x%,y%).litup=int(rnd*2)π   next y%πnext x%ππreg 1,&h13πcall interrupt &h10πdef seg=&ha000ππ' Display grid.πfor x%=0 to 9π   for y%=0 to 9π      if grid(x%,y%).litup=1 thenπ         for x2%=0 to 18π           for y2%=0 to 18π              poke (grid(x%,y%).yloc+y2%)*320+grid(x%,y%).xloc+x2%,boxon?π           next y2%π         next x2%π      elseπ         for x2%=0 to 18π           for y2%=0 to 18π              poke (grid(x%,y%).yloc+y2%)*320+grid(x%,y%).xloc+x2%,boxoff?π           next y2%π         next x2%π      end ifπ   next y%πnext x%ππ' Begin game loop.ππMouseShowCursorπgameover%=0ππdoππ   ' Get user input.π      MouseInformation rb%, lb%, mxloc%, myloc%π      mxloc%=mxloc%/2ππ   ' Validate input.π      if lb%=1 thenπ         row%=int((mxloc%-60)/20)π         column%=int(myloc%/20)ππ      MouseHideCursorππ      ' Change the lit status of selected box and surrounding boxes.π         ChangeBox row%,column%π         ChangeBox row%+1,column%π         ChangeBox row%-1,column%π         ChangeBox row%,column%+1π         ChangeBox row%,column%-1ππ      MouseShowCursorππ      ' Check to see if player has cleared the board.π      flag%=0π      for x%=0 to 9π         for y%=0 to 9π            if grid(x%,y%).litup=1 then flag%=1π         next y%π      next x%π      if flag%=0 then gameover%=1ππ      ' Loop until the left button is released.π      doπ         lb%=0π         MouseInformation dummy1%, lb%, dummy2%, dummy3%π      loop until lb%=0ππ   end ifππ   if rb%=1 then gameover%=1ππloop while gameover%=0ππreg 1,&h03πcall interrupt &h10πdef segπendππSUB ChangeBox(r%,c%)ππshared boxoff?,boxon?ππ   ' Change the lit status of one of the boxes.π      if c%>=0 and c%<=9 and r%>=0 and r%<=9 thenπ         if grid(r%,c%).litup=1 thenπ            grid(r%,c%).litup=0π            for x2%=0 to 18π              for y2%=0 to 18π                 poke (grid(r%,c%).yloc+y2%)*320+grid(r%,c%).xloc+x2%,boxoff?π              next y2%π            next x2%π         elseπ            grid(r%,c%).litup=1π            for x2%=0 to 18π              for y2%=0 to 18π                 poke (grid(r%,c%).yloc+y2%)*320+grid(r%,c%).xloc+x2%,boxon?π              next y2%π            next x2%π         end ifπ      end ifππEND SUBπππSUB MouseInformation (Rgt%, lft%, Rw%, Col%)ππ   reg 1, 3π   call interrupt &h33π   SELECT CASE reg(2)π      CASE 1π         lft% = 1π      CASE 2π         Rgt% = 1π      CASE 3π         lft% = 1π         Rgt% = 1π   END SELECTππ   Rw% = reg(3)π   Col% = reg(4)ππEND SUBππFUNCTION MouseInitialize%ππ   reg 1, 0π   CALL interrupt &h33π   MouseInitialize% = reg(1)ππEND FUNCTIONππSUB MouseShowCursorππ   reg 1, 1π   call interrupt &h33ππEND SUBππSUB MouseHideCursorππ   reg 1, 2π   call interrupt &h33ππEND SUBπS. W. Higgins                  CHESS                          comp.lang.basic.misc           12/1981 (00:00)        QB, QBasic, PDS        405  23806    CHESS.BAS   0 ' exit on errorπ1 'π2 CLEAR , , 2048: CLS : COLOR 0, 7: LOCATE 1, 6: PRINT SPACE$(68)π3 LOCATE 2, 6: PRINT " ********* Chess *********   By: M. C. Rakaska, Ides of March, 1980 "π4 LOCATE 3, 6: PRINT SPACE$(68): LOCATE 4, 6: PRINT "      Adapted for the IBM PC by  S. W. Huggins, December, 1981      "π5 LOCATE 5, 6: PRINT SPACE$(68)π6 'π12 'π20 DEFINT A-Z: a = 0: b = 0: X = 0: Y = 0: S = 0: A0 = 0: T = 0: A8 = 0: A1 = 0: A2 = 0: A3 = 0: A4 = 0: B1 = 0: B6! = 0: H = 0: M = 0: N = 0: P = 0: W = 0: A5 = 0: I = 1: DIM C(64), a(10, 10), b(10, 10), T(10, 10), S(8, 8)π25 COLOR 7, 0: LOCATE 18, 1: PRINT "Important:  Use Caps Lock key to shift to UPPER CASE before continuing...."π30 LOCATE 21, 1: INPUT "DO YOU WANT INSTRUCTIONS "; IN$: IN$ = LEFT$(IN$, 1):      IF IN$ = "Y" THEN GOSUB 2220π40 CL$ = "N"π50 CLS : INPUT "YOUR NAME IS "; b$: IF b$ = "" THEN b$ = " HUMAN " ELSE b$ = LEFT$(b$, 9)π60 CLS : PRINT "LEVEL OF PLAY"; : INPUT B8!: IF B8! = 0 THEN B8! = 1: B7! = 1 + RND(0) / 2:  ELSE B7! = (B8! + 1) / 2 + RND(0) / 2π70 CLS : PRINT "DO YOU WANT WHITE "; b$; " "; : INPUT C$: GOSUB 790: IF LEFT$(C$, 1) <> "N" THEN GOSUB 900: GOTO 190π80 GOSUB 890: IF CL$ = "Y" THEN LOCATE 25, 6, 0:                                   PRINT "START "; TIME$;π100 F! = -99: A0 = 0: FOR J = 1 TO 8: FOR K = 1 TO 8: IF a(J, K) = 99 THEN A6 = J: A7 = Kπ110 NEXT: NEXTπ120 FOR X = 1 TO 8: FOR Y = 1 TO 8: IF a(X, Y) < 0 THEN GOSUB 270:                  IF F! >= B7! THEN GOTO 150π130 NEXT: NEXT: IF F! >= -9 THEN GOTO 150 ELSE GOSUB 900π140 LOCATE 25, 62, 0: PRINT "I CONCEED    "; : GOTO 2190π150 a(R, U) = a(E, Q): a(E, Q) = 1: IF a(R, U) = -2 AND U = 1 THEN a(R, U) = -9π160 X = R: Y = U: A0 = 4: GOSUB 270: LOCATE 25, 62, 0: PRINT "IS MY MOVE    "; :    LOCATE 25, 51, 0: PRINT CHR$(E + 64); Q; "- "; CHR$(R + 64); U;π170 IF CL$ = "Y" THEN LOCATE 25, 31, 0: PRINT "STOP "; TIME$;π180 X = E: Y = Q: GOSUB 910: X = R: Y = U: GOSUB 910: IF C = 1 THEN LOCATE 24, 1, 1: PRINT "CHECK "; : C = 0 ELSE LOCATE 24, 1, 1: PRINT "      ";π190 IF X$ = "S" THEN GOSUB 1830: B7! = 3 * RND(0): LOCATE 25, 1, 1: PRINT "SELF-PLAYING"; : GOSUB 2480: GOTO 100π195 LOCATE 25, 1, 1: PRINT "MOVE " + CHR$(7); b$; : GOSUB 1590: D = 0: B4 = a: B9 = b: B5 = 0: IF a(X, Y) = 2 AND Y = 5 AND b = 6 AND a(a, b) = 1 AND ABS(a - X) = 1 THEN B5 = 1: GOTO 220π200 IF X$ = "K" OR X$ = "Q" THEN GOSUB 900: LOCATE 25, 1, 0: PRINT STRING$(14, " "); : GOTO 100π210 IF X$ = "S" THEN CL$ = "N": GOTO 190:  ELSE A0 = 3: GOSUB 250:                  IF D = 0 THEN LOCATE 25, 31, 0: PRINT "ILLEGAL       "; : GOTO 190π220 LOCATE 25, 31, 1: PRINT "OK            "; : a = B4: b = B9: a(a, b) = a(X, Y): a(X, Y) = 1: GOSUB 910: X = a: Y = b: GOSUB 910: IF N$ = "N" THEN GOSUB 900: N$ = " "π230 IF a(a, b) = 2 AND b = 8 THEN LOCATE 25, 31, 1: PRINT "WHAT PIECE"; : GOSUB 2100: X = a: Y = b: GOSUB 910: LOCATE 25, 31, 1: PRINT "              ";π240 IF B5 = 1 THEN a(a, b - 1) = 1: X = a: Y = b - 1: GOSUB 910: GOTO 100:  ELSE GOTO 100π250 LOCATE 1, 78, 0: PRINT "$ "; :                                                  ON a(X, Y) GOTO 0, 480, 0, 380, 330, 0, 280, 0, 330: GOTO 460π270 ON -a(X, Y) GOTO 0, 530, 0, 380, 330, 0, 280, 0, 330: GOTO 460π280 b = Yπ281 FOR a = X + 1 TO 8π282  GOSUB 640π283  IF S <> 0 THEN EXIT FORπ284 NEXTπ290 FOR a = X - 1 TO 1 STEP -1π291      GOSUB 640π292      IF S <> 0 THEN EXIT FORπ293    NEXT aπ300 a = Xπ301    FOR b = Y + 1 TO 8π302        GOSUB 640π303        IF S <> 0 THEN EXIT FORπ304    NEXTπ310 FOR b = Y - 1 TO 1 STEP -1π311        GOSUB 640π312        IF S <> 0 THEN RETURNπ313    NEXT bπ314    RETURNπ330 b = Yπ331    FOR a = X + 1 TO 8π332        b = b + 1π333        GOSUB 640π334        IF S <> 0 THEN EXIT FORπ335    NEXTπ340 b = Yπ341    FOR a = X - 1 TO 1 STEP -1π342        b = b - 1π343        GOSUB 640π344        IF S <> 0 THEN EXIT FORπ345   NEXTπ350 b = Yπ351    FOR a = X - 1 TO 1 STEP -1π352      b = b + 1π353      GOSUB 640π354      IF S <> 0 THEN EXIT FORπ355    NEXT aπ360 b = Yπ361    FOR a = X + 1 TO 8π362        b = b - 1π363        GOSUB 640π364        IF S <> 0 THEN EXIT FORπ365    NEXT aπ370 IF ABS(a(X, Y)) = 9 THEN GOTO 280:  ELSE RETURNπ380 a = X + 2: b = Y + 1: IF a < 9 AND b < 9 THEN GOSUB 650 ELSE GOTO 390π390 b = b - 2: IF b > 0 AND a < 9 THEN GOSUB 650 ELSE GOTO 400π400 a = a - 4: IF a > 0 AND b > 0 THEN GOSUB 650 ELSE GOTO 410π410 b = b + 2: IF b < 9 AND a > 0 THEN GOSUB 650 ELSE GOTO 420π420 a = a + 1: b = b + 1: IF a > 0 AND a < 9 AND b < 9 THEN GOSUB 650 ELSE GOTO 430π430 b = b - 4: IF b > 0 AND a > 0 AND a < 9 THEN GOSUB 650 ELSE GOTO 440π440 a = a + 2: IF a > 0 AND a < 9 AND b > 0 THEN GOSUB 650 ELSE GOTO 450π450 b = b + 4: IF b < 9 AND a > 0 AND a < 9 THEN GOSUB 650: RETURN ELSE RETURNπ460 FOR a = X - 1 TO X + 1: FOR b = Y - 1 TO Y + 1: IF a(a, b) <> 0 THEN GOSUB 650π470 NEXT: NEXT: RETURNπ480 a = X: IF Y > 2 THEN GOTO 500 ELSE GOTO 490π490 b = Y + 1: IF a(a, b) = 1 THEN GOSUB 660: b = b + 1: IF a(a, b) = 1 THEN GOSUB 660: GOTO 510: ELSE GOTO 510:  ELSE GOTO 510π500 b = Y + 1: IF a(a, b) = 1 THEN GOSUB 660 ELSE GOTO 510π510 a = X + 1: b = Y + 1: IF a(a, b) < 0 THEN GOSUB 660 ELSE GOTO 520π520 a = a - 2: IF a(a, b) < 0 THEN GOSUB 660: RETURN:  ELSE RETURNπ530 a = X: IF Y < 7 THEN GOTO 550 ELSE GOTO 540π540 b = Y - 1: IF a(a, b) = 1 THEN GOSUB 660: b = b - 1: IF a(a, b) = 1 THEN GOSUB 660: GOTO 560: ELSE GOTO 560:  ELSE GOTO 560π550 b = Y - 1: IF a(a, b) = 1 THEN GOSUB 660 ELSE GOTO 560π560 a = X - 1: b = Y - 1: IF a(a, b) > 1 THEN GOSUB 660 ELSE GOTO 570π570 a = a + 2: IF a(a, b) > 1 THEN GOSUB 660: RETURN:  ELSE GOTO 590π580 T = a(a, b): IF T = -99 THEN B1 = T: RETURN:  ELSE GOTO 590π590 A5 = S: IF ABS(T) <= a(X, Y) THEN a(a, b) = a(X, Y): a(X, Y) = 1: GOTO 610:  ELSE GOTO 600π600 IF T < B1 THEN B1 = T: S = A5: RETURN:  ELSE S = A5: RETURNπ610 A1 = X: A2 = Y: A3 = a: A4 = b: A8 = T: A0 = 2: FOR X = 1 TO 8: FOR Y = 1 TO 8: IF a(X, Y) < 0 THEN GOSUB 270: IF T = 0 THEN GOTO 630π620 NEXT: NEXTπ630 X = A1: Y = A2: a = A3: b = A4: A0 = 5: a(X, Y) = a(a, b): a(a, b) = A8: GOTO 600π640 S = 0: IF a(a, b) = 1 THEN GOTO 660 ELSE IF a(a, b) = 0 THEN S = 1: RETURN:     ELSE IF SGN(a(a, b)) = SGN(a(X, Y)) THEN S = 1: RETURN:  ELSE S = 1: GOTO 660π650 IF a(a, b) = 1 THEN GOTO 660 ELSE IF SGN(a(a, b)) = SGN(a(X, Y)) THEN RETURN:   ELSE GOTO 660π660 LOCATE 1, 78, 0: PRINT "  "; : ON A0 GOTO 670, 680, 690, 700, 710: GOTO 720π670 IF A6 = a AND A7 = b THEN B1 = B1 + 1: RETURN:  ELSE RETURNπ680 IF A3 = a AND A4 = b THEN T = 0: RETURN:  ELSE RETURNπ690 IF B4 = a AND B9 = b THEN D = 1: RETURN:  ELSE RETURNπ700 IF A6 = a AND A7 = b THEN C = 1: RETURN:  ELSE RETURNπ710 IF a(a, b) < 0 THEN GOTO 580 ELSE RETURNπ720 B3 = S: W = X: M = Y: N = a: H = b: P = a(a, b): a(a, b) = a(X, Y): a(X, Y) = 1: B1 = 0π730 A0 = 5: FOR X = 1 TO 8: FOR Y = 1 TO 8: IF a(X, Y) > 1 THEN GOSUB 250π740 NEXT: NEXT: X = N: Y = H: A0 = 1: GOSUB 270: A0 = 0: S = B3: X = W: Y = M: a = N: b = H: a(X, Y) = a(a, b): a(a, b) = Pπ750 B6! = 1 / (ABS(4.5 - a) + ABS(4.5 - b) + 1): IF a(X, Y) < -2 AND a(X, Y) > -9 THEN B6! = B6! + 1 / (ABS(A6 - a) + ABS(A7 - b) + 5) + RND(0) / 15π760 G! = P + B1 + B6!: IF P = 99 THEN GOSUB 900:                                    LOCATE 25, 1, 1: PRINT "MATE "; b$; : GOTO 2190π770 IF G! <= F! THEN RETURNπ780 F! = G!: E = X: Q = Y: R = a: U = b: RETURNπ790 CLSπ800 Y = 0: FOR J = 896 TO 0 STEP -128: Y = Y + 1: X = 0: FOR K = J TO 42 + J STEP 6: X = X + 1: T(X, Y) = K: NEXT: NEXTπ810 Y = 0: FOR J = 960 TO 64 STEP -128: Y = Y + 1: X = 0: FOR K = J TO 42 + J STEP 6: X = X + 1: b(X, Y) = K: NEXT: NEXTπ820 DATA -7, -4, -5, -9, -99, -5, -4, -7π830 DATA -2, -2, -2, -2, -2, -2, -2, -2π840 DATA 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1π850 DATA 2, 2, 2, 2, 2, 2, 2, 2π860 DATA 7, 4, 5, 9, 99, 5, 4, 7π870 FOR Y = 8 TO 1 STEP -1: FOR X = 1 TO 7 STEP 2: S(X, Y) = I: S(X + 1, Y) = -I: NEXT: I = -I: NEXTπ880 FOR Y = 8 TO 1 STEP -1: FOR X = 1 TO 8: READ a(X, Y): NEXT: NEXT: RETURNπ890 I = -I: a(4, 1) = 99: a(5, 1) = 9: a(4, 8) = -99: a(5, 8) = -9π900 FOR Y = 1 TO 8: FOR X = 1 TO 8: GOSUB 910: NEXT: NEXT: RETURNπ910 IF S(X, Y) > 0 THEN GOTO 940π920 ON ABS(a(X, Y)) GOSUB 980, 1040, 0, 1340, 1440, 0, 1540, 0, 1140: IF ABS(a(X, Y)) = 99 THEN GOSUB 1240: RETURN ELSE RETURNπ940 ON ABS(a(X, Y)) GOSUB 960, 990, 0, 1290, 1390, 0, 1490, 0, 1090: IF ABS(a(X, Y)) = 99 THEN GOSUB 1190: RETURN ELSE RETURNπ960 IF S(X, Y) < 0 THEN GOTO 980π970 LOCATE 25 - Y * 3, X * 8 + 1, 0π971 PRINT STRING$(8, CHR$(219));π972 LOCATE 26 - Y * 3, X * 8 + 1, 0π973 PRINT STRING$(8, CHR$(219));π974 LOCATE 27 - Y * 3, X * 8 + 1, 0π975 PRINT STRING$(8, CHR$(219)); : RETURNπ980 LOCATE 25 - Y * 3, X * 8 + 1, 0π981 PRINT STRING$(8, " ");π982 LOCATE 26 - Y * 3, X * 8 + 1, 0π983 PRINT STRING$(8, " ");π984 LOCATE 27 - Y * 3, X * 8 + 1, 0π985 PRINT STRING$(8, " "); : RETURNπ990 IF I * a(X, Y) < 0 THEN GOTO 1020π1000 LOCATE 25 - Y * 3, X * 8 + 1, 0π1001 PRINT STRING$(8, CHR$(219));π1010 LOCATE 26 - Y * 3, X * 8 + 1, 0π1011 PRINT STRING$(3, CHR$(219)); CHR$(2); STRING$(4, CHR$(219));π1012 LOCATE 27 - Y * 3, X * 8 + 1, 0π1013 PRINT STRING$(8, CHR$(219)): RETURNπ1020 LOCATE 25 - Y * 3, X * 8 + 1, 0π1021 PRINT STRING$(8, CHR$(219));π1030 LOCATE 26 - Y * 3, X * 8 + 1, 0π1031 PRINT STRING$(3, CHR$(219)); CHR$(1); STRING$(4, CHR$(219));π1032 LOCATE 27 - Y * 3, X * 8 + 1, 0π1033 PRINT STRING$(8, CHR$(219)); : RETURNπ1040 IF I * a(X, Y) < 0 THEN GOTO 1070π1050 LOCATE 25 - Y * 3, X * 8 + 1, 0π1051 PRINT STRING$(8, CHR$(32));π1060 LOCATE 26 - Y * 3, X * 8 + 1, 0π1061 PRINT STRING$(3, CHR$(32)); CHR$(2); STRING$(4, CHR$(32));π1062 LOCATE 27 - Y * 3, X * 8 + 1, 0π1063 PRINT STRING$(8, CHR$(32)): RETURNπ1070 LOCATE 25 - Y * 3, X * 8 + 1, 0π1071 PRINT STRING$(8, CHR$(32));π1080 LOCATE 26 - Y * 3, X * 8 + 1, 0π1081 PRINT STRING$(3, CHR$(32)); CHR$(1); STRING$(4, CHR$(32));π1082 LOCATE 27 - Y * 3, X * 8 + 1, 0π1083 PRINT STRING$(8, CHR$(32)); : RETURNπ1090 IF I * a(X, Y) < 0 THEN GOTO 1120π1100 LOCATE 25 - Y * 3, X * 8 + 1, 0π1101 PRINT STRING$(2, CHR$(219)); STRING$(3, CHR$(178)); STRING$(3, CHR$(219));π1110 LOCATE 26 - Y * 3, X * 8 + 1, 0π1111 PRINT CHR$(219) + "QUEEN" + CHR$(219); CHR$(219);π1112 LOCATE 27 - Y * 3, X * 8 + 1, 0π1113 PRINT STRING$(2, CHR$(219)); STRING$(3, CHR$(178)); STRING$(3, CHR$(219)); : RETURNπ1120 LOCATE 25 - Y * 3, X * 8 + 1, 0π1121 PRINT STRING$(2, CHR$(219)); STRING$(3, CHR$(176)); STRING$(3, CHR$(219));π1130 LOCATE 26 - Y * 3, X * 8 + 1, 0π1131 PRINT CHR$(219) + "QUEEN" + CHR$(219); CHR$(219);π1132 LOCATE 27 - Y * 3, X * 8 + 1, 0π1133 PRINT STRING$(2, CHR$(219)); STRING$(3, CHR$(176)); STRING$(3, CHR$(219)); : RETURNπ1140 IF I * a(X, Y) < 0 THEN GOTO 1170π1150 LOCATE 25 - Y * 3, X * 8 + 1, 0π1151 PRINT STRING$(2, CHR$(32)); STRING$(3, CHR$(178)); STRING$(3, CHR$(32));π1160 LOCATE 26 - Y * 3, X * 8 + 1, 0π1161 PRINT CHR$(32) + "QUEEN" + CHR$(32); CHR$(32);π1162 LOCATE 27 - Y * 3, X * 8 + 1, 0π1163 PRINT STRING$(2, CHR$(32)); STRING$(3, CHR$(178)); STRING$(3, CHR$(32)); : RETURNπ1170 LOCATE 25 - Y * 3, X * 8 + 1, 0π1171 PRINT STRING$(2, CHR$(32)); STRING$(3, CHR$(176)); STRING$(3, CHR$(32));π1180 LOCATE 26 - Y * 3, X * 8 + 1, 0π1181 PRINT CHR$(32) + "QUEEN" + CHR$(32); CHR$(32);π1182 LOCATE 27 - Y * 3, X * 8 + 1, 0π1183 PRINT STRING$(2, CHR$(32)); STRING$(3, CHR$(176)); STRING$(3, CHR$(32)); : RETURNπ1190 IF I * a(X, Y) < 0 THEN GOTO 1220π1200 LOCATE 25 - Y * 3, X * 8 + 1, 0π1201 PRINT STRING$(2, CHR$(219)); STRING$(4, CHR$(178)); STRING$(2, CHR$(219));π1210 LOCATE 26 - Y * 3, X * 8 + 1, 0π1211 PRINT CHR$(219); CHR$(178) + "KING" + CHR$(178); CHR$(219);π1212 LOCATE 27 - Y * 3, X * 8 + 1, 0π1213 PRINT STRING$(2, CHR$(219)); STRING$(4, CHR$(178)); STRING$(2, CHR$(219)); : RETURNπ1220 LOCATE 25 - Y * 3, X * 8 + 1, 0π1221 PRINT STRING$(2, CHR$(219)); STRING$(4, CHR$(176)); STRING$(2, CHR$(219));π1230 LOCATE 26 - Y * 3, X * 8 + 1, 0π1231 PRINT CHR$(219); CHR$(176) + "KING" + CHR$(176); CHR$(219);π1232 LOCATE 27 - Y * 3, X * 8 + 1, 0π1233 PRINT STRING$(2, CHR$(219)); STRING$(4, CHR$(176)); STRING$(2, CHR$(219)); : RETURNπ1240 IF I * a(X, Y) < 0 THEN GOTO 1270π1250 LOCATE 25 - Y * 3, X * 8 + 1, 0π1251 PRINT STRING$(2, CHR$(32)); STRING$(4, CHR$(178)); STRING$(2, CHR$(32));π1260 LOCATE 26 - Y * 3, X * 8 + 1, 0π1261 PRINT CHR$(32); CHR$(178) + "KING" + CHR$(178); CHR$(32);π1262 LOCATE 27 - Y * 3, X * 8 + 1, 0π1263 PRINT STRING$(2, CHR$(32)); STRING$(4, CHR$(178)); STRING$(2, CHR$(32)); : RETURNπ1270 LOCATE 25 - Y * 3, X * 8 + 1, 0π1271 PRINT STRING$(2, CHR$(32)); STRING$(4, CHR$(176)); STRING$(2, CHR$(32));π1280 LOCATE 26 - Y * 3, X * 8 + 1, 0π1281 PRINT CHR$(32); CHR$(176) + "KING" + CHR$(176); CHR$(32);π1282 LOCATE 27 - Y * 3, X * 8 + 1, 0π1283 PRINT STRING$(2, CHR$(32)); STRING$(4, CHR$(176)); STRING$(2, CHR$(32)); : RETURNπ1290 IF I * a(X, Y) < 0 THEN GOTO 1320π1300 LOCATE 25 - Y * 3, X * 8 + 1, 0π1301 PRINT STRING$(3, CHR$(219)); STRING$(2, CHR$(178)); STRING$(3, CHR$(219));π1310 LOCATE 26 - Y * 3, X * 8 + 1, 0π1311 PRINT CHR$(219) + "KNIGHT" + CHR$(219);π1312 LOCATE 27 - Y * 3, X * 8 + 1, 0π1313 PRINT STRING$(3, CHR$(219)); STRING$(2, CHR$(178)); STRING$(3, CHR$(219)); : RETURNπ1320 LOCATE 25 - Y * 3, X * 8 + 1, 0π1321 PRINT STRING$(3, CHR$(219)); STRING$(2, CHR$(176)); STRING$(3, CHR$(219));π1330 LOCATE 26 - Y * 3, X * 8 + 1, 0π1331 PRINT CHR$(219) + "KNIGHT" + CHR$(219);π1332 LOCATE 27 - Y * 3, X * 8 + 1, 0π1333 PRINT STRING$(3, CHR$(219)); STRING$(2, CHR$(176)); STRING$(3, CHR$(219)); : RETURNπ1340 IF I * a(X, Y) < 0 THEN GOTO 1370π1350 LOCATE 25 - Y * 3, X * 8 + 1, 0π1351 PRINT STRING$(3, CHR$(32)); STRING$(2, CHR$(178)); STRING$(3, CHR$(32));π1360 LOCATE 26 - Y * 3, X * 8 + 1, 0π1361 PRINT CHR$(32) + "KNIGHT" + CHR$(32);π1362 LOCATE 27 - Y * 3, X * 8 + 1, 0π1363 PRINT STRING$(3, CHR$(32)); STRING$(2, CHR$(178)); STRING$(3, CHR$(32)); : RETURNπ1370 LOCATE 25 - Y * 3, X * 8 + 1, 0π1371 PRINT STRING$(3, CHR$(32)); STRING$(2, CHR$(176)); STRING$(3, CHR$(32));π1380 LOCATE 26 - Y * 3, X * 8 + 1, 0π1381 PRINT CHR$(32) + "KNIGHT" + CHR$(32);π1382 LOCATE 27 - Y * 3, X * 8 + 1, 0π1383 PRINT STRING$(3, CHR$(32)); STRING$(2, CHR$(176)); STRING$(3, CHR$(32)); : RETURNπ1390 IF I * a(X, Y) < 0 THEN GOTO 1420π1400 LOCATE 25 - Y * 3, X * 8 + 1, 0π1401 PRINT STRING$(3, CHR$(219)); STRING$(2, CHR$(178)); STRING$(3, CHR$(219));π1410 LOCATE 26 - Y * 3, X * 8 + 1, 0π1411 PRINT CHR$(219) + "BISHOP" + CHR$(219);π1412 LOCATE 27 - Y * 3, X * 8 + 1, 0π1413 PRINT STRING$(3, CHR$(219)); STRING$(2, CHR$(178)); STRING$(3, CHR$(219)); : RETURNπ1420 LOCATE 25 - Y * 3, X * 8 + 1, 0π1421 PRINT STRING$(3, CHR$(219)); STRING$(2, CHR$(176)); STRING$(3, CHR$(219));π1430 LOCATE 26 - Y * 3, X * 8 + 1, 0π1431 PRINT CHR$(219) + "BISHOP" + CHR$(219);π1432 LOCATE 27 - Y * 3, X * 8 + 1, 0π1433 PRINT STRING$(3, CHR$(219)); STRING$(2, CHR$(176)); STRING$(3, CHR$(219)); : RETURNπ1440 IF I * a(X, Y) < 0 THEN GOTO 1470π1450 LOCATE 25 - Y * 3, X * 8 + 1, 0π1451 PRINT STRING$(3, CHR$(32)); STRING$(2, CHR$(178)); STRING$(3, CHR$(32));π1460 LOCATE 26 - Y * 3, X * 8 + 1, 0π1461 PRINT CHR$(32) + "BISHOP" + CHR$(32);π1462 LOCATE 27 - Y * 3, X * 8 + 1, 0π1463 PRINT STRING$(3, CHR$(32)); STRING$(2, CHR$(178)); STRING$(3, CHR$(32)); : RETURNπ1470 LOCATE 25 - Y * 3, X * 8 + 1, 0π1471 PRINT STRING$(3, CHR$(32)); STRING$(2, CHR$(176)); STRING$(3, CHR$(32));π1480 LOCATE 26 - Y * 3, X * 8 + 1, 0π1481 PRINT CHR$(32) + "BISHOP" + CHR$(32);π1482 LOCATE 27 - Y * 3, X * 8 + 1, 0π1483 PRINT STRING$(3, CHR$(32)); STRING$(2, CHR$(176)); STRING$(3, CHR$(32)); : RETURNπ1490 IF I * a(X, Y) < 0 THEN GOTO 1520π1500 LOCATE 25 - Y * 3, X * 8 + 1, 0π1501 PRINT CHR$(219); CHR$(219); CHR$(178); CHR$(219); CHR$(219); CHR$(178); CHR$(219); CHR$(219);π1510 LOCATE 26 - Y * 3, X * 8 + 1, 0π1511 PRINT CHR$(219); CHR$(219) + "ROOK" + CHR$(219); CHR$(219);π1512 LOCATE 27 - Y * 3, X * 8 + 1, 0π1513 PRINT STRING$(2, CHR$(219)); STRING$(4, CHR$(178)); STRING$(2, CHR$(219)); : RETURNπ1520 LOCATE 25 - Y * 3, X * 8 + 1, 0π1521 PRINT CHR$(219); CHR$(219); CHR$(176); CHR$(219); CHR$(219); CHR$(176); CHR$(219); CHR$(219);π1530 LOCATE 26 - Y * 3, X * 8 + 1, 0π1531 PRINT CHR$(219); CHR$(219) + "ROOK" + CHR$(219); CHR$(219);π1532 LOCATE 27 - Y * 3, X * 8 + 1, 0π1533 PRINT STRING$(2, CHR$(219)); STRING$(4, CHR$(176)); STRING$(2, CHR$(219)); : RETURNπ1540 IF I * a(X, Y) < 0 THEN GOTO 1570π1550 LOCATE 25 - Y * 3, X * 8 + 1, 0π1551 PRINT CHR$(32); CHR$(32); CHR$(178); CHR$(32); CHR$(32); CHR$(178); CHR$(32); CHR$(32);π1560 LOCATE 26 - Y * 3, X * 8 + 1, 0π1561 PRINT CHR$(32); CHR$(32) + "ROOK" + CHR$(32); CHR$(32);π1562 LOCATE 27 - Y * 3, X * 8 + 1, 0π1563 PRINT STRING$(2, CHR$(32)); STRING$(4, CHR$(178)); STRING$(2, CHR$(32)); : RETURNπ1570 LOCATE 25 - Y * 3, X * 8 + 1, 0π1571 PRINT CHR$(32); CHR$(32); CHR$(176); CHR$(32); CHR$(32); CHR$(176); CHR$(32); CHR$(32);π1580 LOCATE 26 - Y * 3, X * 8 + 1, 0π1581 PRINT CHR$(32); CHR$(32) + "ROOK" + CHR$(32); CHR$(32);π1582 LOCATE 27 - Y * 3, X * 8 + 1, 0π1583 PRINT STRING$(2, CHR$(32)); STRING$(4, CHR$(176)); STRING$(2, CHR$(32)); : RETURNπ1590 LOCATE 25, 31, 1: PRINT STRING$(10, " ");π1600 X$ = INKEY$: IF X$ = "N" THEN N$ = X$π1610 IF X$ >= "A" AND X$ <= "H" THEN X = VAL(CHR$(ASC(X$) - 16)): GOTO 1730π1620 IF X$ = "N" THEN GOSUB 2030π1630 IF X$ = "K" AND a(5, 1) = 99 AND a(8, 1) = 7 THEN a(5, 1) = 1: a(8, 1) = 1: a(7, 1) = 99: a(6, 1) = 7: GOTO 1800π1640 IF X$ = "Q" AND a(5, 1) = 99 AND a(1, 1) = 7 THEN a(5, 1) = 1: a(1, 1) = 1: a(3, 1) = 99: a(4, 1) = 7: GOTO 1800π1650 IF X$ = "K" AND a(4, 1) = 99 AND a(1, 1) = 7 THEN a(4, 1) = 1: a(1, 1) = 1: a(2, 1) = 99: a(3, 1) = 7: GOTO 1800π1660 IF X$ = "Q" AND a(4, 1) = 99 AND a(8, 1) = 7 THEN a(4, 1) = 1: a(8, 1) = 1: a(6, 1) = 99: a(5, 1) = 7: GOTO 1800π1670 IF X$ = "X" THEN GOSUB 1830: LOCATE 25, 1, 0: PRINT "EXCHANGING         "; : GOSUB 2480: IF CL$ = "Y" THEN LOCATE 25, 50, 0: PRINT "START "; TIME$; : GOTO 100:  ELSE : GOTO 100π1680 IF X$ = "S" THEN GOTO 1820π1690 IF X$ = "M" THEN GOSUB 1840π1700 IF X$ = "I" THEN GOSUB 2220: CLS : GOSUB 900: LOCATE 25, 1, 1: PRINT "MOVE " + CHR$(7); b$;π1710 IF X$ = "L" THEN GOSUB 2040π1720 GOTO 1600π1730 LOCATE 25, 21, 1: PRINT X$; : LOCATE 25, 31, 1: PRINT "            ";π1740 Y = VAL(INKEY$): IF Y = 0 THEN GOTO 1740π1750 LOCATE 25, 22, 1: PRINT Y; : LOCATE 25, 25, 1: PRINT "-";π1760 IF a(X, Y) < 2 OR a(X, Y) > 99 THEN LOCATE 25, 31, 1: PRINT "ENTRY ERROR "; : GOTO 1590π1770 a$ = INKEY$: IF a$ < "A" OR a$ > "H" THEN GOTO 1770 ELSE a = VAL(CHR$(ASC(a$) - 16))π1780 LOCATE 25, 27, 1: PRINT a$;π1790 b = VAL(INKEY$): IF b = 0 THEN GOTO 1790 ELSE LOCATE 25, 28, 1: PRINT b;π1800 IF X$ = "K" OR X$ = "Q" THEN LOCATE 25, 20, 1: PRINT "CSTL. "; X$; "-SIDE"; : GOSUB 1830 ELSE GOSUB 1830π1810 IF CL$ = "Y" THEN LOCATE 25, 50, 0: PRINT "START "; TIME$;π1820 RETURNπ1830 LOCATE 25, 1, 1: PRINT STRING$(79, " "); : RETURNπ1840 GOSUB 1830: LOCATE 25, 1, 1: PRINT "MODIFYING          ";π1850 GOSUB 2010: IF M$ < "A" OR M$ > "H" THEN GOTO 1850π1860 X = VAL(CHR$(ASC(M$) - 16)): LOCATE 25, 21, 1: PRINT M$;π1870 M$ = INKEY$: IF M$ < "1" OR M$ > "8" THEN GOTO 1870π1880 Y = VAL(M$): LOCATE 25, 23, 1: PRINT M$; " = ";π1890 M$ = INKEY$: IF M$ = "C" OR M$ = "P" OR M$ = "E" THEN S1$ = M$: LOCATE 25, 27, 1: PRINT M$; :  ELSE GOTO 1890π1900 M$ = INKEY$: IF M$ = "S" OR M$ = "P" OR M$ = "N" OR M$ = "B" OR M$ = "R" OR M$ = "Q" OR M$ = "K" THEN V$ = M$: LOCATE 25, 29, 1: PRINT M$;  ELSE GOTO 1900π1910 IF V$ = "P" THEN V1 = 2π1920 IF V$ = "N" THEN V1 = 4π1930 IF V$ = "B" THEN V1 = 5π1940 IF V$ = "R" THEN V1 = 7π1950 IF V$ = "Q" THEN V1 = 9π1960 IF V$ = "K" THEN V1 = 99π1970 IF V$ = "S" THEN V1 = 1π1980 IF S1$ = "C" AND V1 <> 1 THEN V1 = -V1π1990 a(X, Y) = V1: IF S1$ = "E" THEN a(X, Y) = 1π2000 GOSUB 910: GOTO 1840π2010 M$ = INKEY$: IF M$ = "N" THEN GOSUB 2030: GOTO 2010:  ELSE IF M$ = "Z" THEN GOSUB 1830: LOCATE 25, 20, 1: PRINT "         "; : GOSUB 900:  ELSE RETURNπ2020 IF CL$ = "Y" THEN LOCATE 25, 51, 0: PRINT "START "; TIME$; : GOTO 100 ELSE GOTO 100π2030 FOR J = 1 TO 8: FOR K = 1 TO 8: K$ = STR$(K)π2031 LOCATE 27 - K * 3, J * 8 + 1, 0π2032 PRINT CHR$(J + 64); RIGHT$(K$, 1); : NEXT: NEXT: RETURNπ2040 GOSUB 1830: LOCATE 25, 20, 1: PRINT "LEVEL="; B8!; : PRINT "CHANGE LEVELS?";π2050 C$ = INKEY$: IF C$ = "N" THEN GOTO 2090 ELSE IF C$ = "Y" THEN LOCATE 25, 27, 1: PRINT "       "; : GOSUB 1830:  ELSE GOTO 2050π2060 L1$ = INKEY$: IF L1$ = "" THEN GOTO 2060 ELSE IF L1$ >= "0" AND L1$ <= "9" THEN LOCATE 25, 27, 1: PRINT L1$; :  ELSE GOTO 2060π2070 L2$ = INKEY$: IF L2$ = "" THEN GOTO 2070 ELSE IF L2$ < "0" OR L2$ > "9" THEN L2$ = L1$: L1$ = "0"π2080 B8! = VAL(L1$) * 10 + VAL(L2$): B7! = B8! / 2: LOCATE 25, 27, 0: PRINT L1$; L2$;π2090 GOSUB 1830: LOCATE 25, 20, 0: PRINT "              "; : LOCATE 25, 1, 1: PRINT "MOVE "; b$; : RETURNπ2100 REM *** PROMOTION ROUTINE ***π2110 LOCATE 2, 1, 1: PRINT "P, N, B, R, Q ";π2120 Z$ = INKEY$: IF Z$ = "P" THEN a(a, b) = 2: GOTO 2180π2130 IF Z$ = "N" THEN a(a, b) = 4: GOTO 2180π2140 IF Z$ = "B" THEN a(a, b) = 5: GOTO 2180π2150 IF Z$ = "R" THEN a(a, b) = 7: GOTO 2180π2160 IF Z$ = "Q" THEN a(a, b) = 9: GOTO 2180π2170 GOTO 2120π2180 RETURNπ2190 IF CL$ = "Y" THEN LOCATE 25, 61, 1: PRINT "STOP "; TIME$;π2200 LOCATE 25, 1, 1: PRINT "HIT (P) TO PLAY OR HIT (B) FOR BASIC";π2210 a$ = INKEY$: IF a$ = "" THEN GOTO 2210 ELSE IF a$ = "B" THEN CLS : END ELSE IF a$ = "P" THEN RUN ELSE GOTO 2210π2220 CLSπ2221 PRINT "1. USE LIST TO INSURE LOADED RIGHT, THE LAST LINE IS 65529 "π2230 PRINT "2. ALSE NOTE MEMORY SIZE AS A DOUBLE CHECK "π2240 PRINT "3. SPECIAL COMMANDS DURING PLAYER'S MOVE ARE:"π2250 PRINT "   TYPE 'N' - TO NUMBER THE BOARD "π2260 PRINT "        'K' - TO CASTLE KING SIDE "π2270 PRINT "        'Q' - TO CASTLE QUEEN SIDE "π2280 PRINT "        'X' - TO EXCHANGE PIECES AND LET COMPUTER MOVE"π2290 PRINT "        'S' - TO LET THE COMPUTER PLAY BY ITSELF "π2300 PRINT "        'M' - TO MODIFY THE BOARD, ENTER THE SQUARE FOLLOWED BY"π2310 PRINT "                 C, P, OR E  FOR COMPUTER, PLAYER, OR EMPTY"π2320 PRINT "                 AND S,P,N,B,R,Q,K  FOR SQUARE,PAWN, ETC..."π2330 PRINT "        'Z' - TO ESCAPE MODIFY AND LET COMPUTER MOVE"π2340 PRINT "        'I' - TO GET INSTRUCTIONS AGAIN"π2350 PRINT "        'L' - TO LOOK AT OR CHANGE LEVEL OF PLAY"π2360 REM ********************************************************************π2370 INPUT "HIT ENTER TO CONTINUE"; EN$: PRINTπ2380 PRINT "4. TO PROMOTE TO P,N,B,R,Q ENTER THE LETTER WHEN PROMOTED"π2390 PRINT "5. TO CAPTURE 'EN PASSANT' SPECIFY THE 'FROM' - 'TO' SQUARES"π2400 PRINT "6. LEVELS OF PLAY ARE FROM 01 TO 24"π2410 PRINT "7. COMPUTER ASSUMES MATE IF KING IS LEFT IN CHECK SO BE SURE TO "π2411 PRINT "    WATCH FOR CHECK MESSAGE"π2420 PRINT "8. IF A MOVE IS ILLEGAL OR AN ENTRY ERROR IS MADE SIMPLY TYPE IN"π2421 PRINT "    A NEW MOVE.  A MOVE MAY BE STARTED OVER BY FORCING AN ERROR. (E.G. '9')."π2430 PRINT "9. IF <BREAK> IS HIT DURING THE GAME, TYPE 'GOSUB 900:CONT' TO"π2435 PRINT "    DRAW BOARD AND CONTINUE"π2440 PRINT "10. YOU HAVE A CHOICE OF BLACK OR WHITE, THE COMPUTER WILL ALWAYS"π2441 PRINT "     BE AT THE TOP OF THE SCREEN"π2450 PRINT : PRINT : INPUT "HIT ENTER TO CONTINUE GAME"; EN$π2460 RETURNπ2480 I = -I: GOSUB 2490: GOSUB 900: RETURNπ2490 L = 0: FOR J = 1 TO 8: FOR K = 1 TO 8: L = L + 1: IF a(J, K) <> 1 THEN C(L) = -a(J, K):  ELSE C(L) = a(J, K)π2500 NEXT: NEXTπ2510 L = 65: FOR J = 1 TO 8: FOR K = 1 TO 8: L = L - 1: a(J, K) = C(L): NEXT: NEXTπ2520 RETURNπ65529 ENDππDaniel Kalna                   WHEEL OF FUN                   comp.lang.basic.misc           11-24-96 (03:24)       QB, QBasic, PDS        320 21123    SPIN.BAS    DEFINT A-Z:DIM SHARED K,S,B&,Z&:V1 'Created by PostIt! 7.2πSUB V1:OPEN "O",1,"SPIN.ZIP",4^6:Z&=15586:?STRING$(50,177);πU"%up()%9%%%%-%UDeRF4+/66?4.%%c_%%%.%.%%&m%jjqS[gfxNg$<FSZAGXJjsxπU"RCS5T1DA'1F8;7j6Y.]N*/UQ_TfGB8=?eW\]fh:jSm?<wo$ZKEQ2G2ApjMBnVmgπU"7*rJA7Y?\[k7BlH1PCh.UcJ4*#-A3IhTUYr.r<cS&BGN$NmddngLVws)S4XemdJπU"wu%ur;r/,iHrZ3b:PD&9'd1-<H8^Te5kUDxdWEo\.)(],0ldCUb^RCQHD0lc)T'πU"lQ,)g(CqJ<-<:qE0H:qY*i:qE<h[>nDQ/fVjdv>xSlJH<?3nHviWQI*h^0?bFReπU"eNSlRE^JP1GRfzj4%L41QZKZ_>sdWgc]s\9P'qBY%]zI7't5*[4#F0i%'B;cnQ=πU"TiW(]R:2NT7^j2v4eeG['WCA5<ec0).Zi)%21+m='k;g\hR3(uEm8Cl/Z,VHDqNπU",&lKbhIU/I2<;Kro7F$5?^V[ru6b#&EIlioBu$*UDU0?EgV)Ec&RJC=[-(Q([2BπU"=<MX1AHRXMEJ+<6T'1\M8=Ijw;H'fUAJK4[9(rvkf:%=)(d8Y2<Dm&niuq(Lv4)πU",owGRB%-KPY7^Sp\anO'tc6u7D12qp47+6[I(nZu);?YDo)_I4xK_'FvoTEvc^pπU"57?35k#E/rhLv1MgW7WBQYX,XX9([j,lCf3=,CJQrm,PjR;5TzYgFHjIXf*0b7VπU"/c3XvdK*F7a>PDRk-GQJmwu<M0;%^e8g]xKgVD3\v/oF7_7(tRoxt6YEIlRgPhbπU"G*BcNYkR:H#e6&Q$SXkMx:rKpHNbF-8<$UT)TtML,;DON9/nn-T,]gQ59\'px\3πU"=S%=0m:dRg.t*69.,=**K+DEc(Z+HqGh3iL?C=N2+M>V0c9?MR7;Rhv33dZsm>GπU"%f%'Od#)LM5SLf('qtl+MQLa&S*=5zGl-8HGkL&R6]Y=^/Ure1,tgS71?TZGO0pπU"%h.o?P:fj.aKYuH4n067;D78dEggLvOD3NK<eLc4hUN]?Pb,NLuwknT<'-w#l$,πU"[e4^Z=kjj-:DPDg\FoF6FgKY10$rh-TNO]5dZ.uEKFPSA]fR&haDBtKy9#_=,VWπU"S=>wuf,#<%hr,+MJNa/s=.P%*:/M2K\uVI)b0=A((TA$K,p+I5R6W&j'#zK85vTπU">2&?0*9:R7YAxTl.^+BP/Vz+ty;ser[)kUBk..]/Y/zg^Xp?04o7Q+JGdrvW3kIπU"#?6N:#J1l[5-0S/];2hQ%\qaa#>jsN[8Q14)j^_3Atigxlf3.-#CvIf>UER96\2πU"-UFxPH544)P9UDxsjWQ#$e\rc8*CpqeB-Dwb1ME+G67\VlQ2qfj(u8s\Q2Ub&MWπU"l)E,,PWM;k+\fWT8u.7bF+P?OnC8J7bRPb9/S1M>^IM]o96nx'EQaG>1?1I.$=*πU"4a(r.EJRD9+[cFp?gI^SglYZ?#MY-:90D=bYQ5\<:(8(EF)rVhy$qs9B]uf9-m,πU"idTg0cSDBot<?3)npU6#fc*2xbKodi.PF-c(7N7G+j,5R\14rlofveb4SDWY:WbπU".T0cNn*b$W/UE7?nOdWR(.<\ln+gB.btcgX^G\MGa3%GZ^gb$wW<9XJvup3TbOwπU"nZdirH/YX2Mapwq'1IVa,/?/[.#u(yd^>8n%W[sZXfqZNHC,0JAE.<Ek7\Ppel.πU"\B)QK)Pl/(TS:H4m&bit?J\<Xn(2^cwphy'X%*1->ZOw%RehGN\()xiJpIKCEdlπU"/4]'FAS\7<<_vX\p(T/MF$z)[pEIn'Q4]eFvki5Cc*-C4<B3K#GoM4*>#4pC,Y:πU"Ii9;B%,zTvws]GkC;e%Xg1X:#rnC#A$tt.WK?hU.;.NDK(&sUk1Lr#d;J&pA._7πU"/\QBQ'X*D;,xb^z;yhV:&0hlOt(P9&+oE_>/\TlQ5h6V^tV9S;0e<bmd,QlW;-aπU"V/z/VQM#X*AxvIAF>6Ms)%IL3GS2b,4SGTxtd:do$#bv>WIT,wN,])9]uW[S6uKπU"leb6)n)9[=RMK[7RfFWOx0eCr_pcU;N[&Sn&S9%-ezrYSous3,.V,+'B+K;3vvnπU"1C.AP-h$LYeO3PM>Dt.TOs_<F=0/D0UeV^_/=BN#zIDbaT[vW>_[$x-0,x6.m*lπU"=34)A5]<?Lcr%pa'Db:q)H^FQzbJ=18FCb1(p1M2,uG/qIF2Mf+J<rfBu%k8(p/πU"_k_8OcuGi_3okPA/pvTsKua3]WBGMH/'=V7*l*ha#IKIJP*KZMVhch5QI>Je/D-πU"S]W.<V^USEfSERd4P3<$EU>Xw#'nKHaIuBwQoo7<lG^ThrH0*-5ra=4jM4roT,$πU"cPFcGN]qJY\Wn0OO%6]neBG%ai5lMcMw.q+dG80zsaqo&X$3*ZWSZ'Pw\ffkFasπU"jJoAD(t2=mW4PY0pPwmG6pJ.uomaEO6XEP8-D4a0.CxMj^Lzeu9.nrV8v;RI4U)πU"3./vU96JmKMgV0-g>;f(o(YHsC]/jFKi\VQP<hMC,W\J;*92l9QOfqK03>/T9+vπU"70<Q\0]V7v_'VlJhFnlQ16g+iAQ[eJTBXAK21%E?.AmCrEOU&uv4_m?k_]Y;MxxπU"tQGU*dDI<*urIwvBZt\)Q8tZ^cL<mu>Ojl8raL-fR%5CeirFOCuPXsS5rB)#1<vπU"JGI?p.T)rki]O2Z3b_Zlffef9fwcUjA.u.9d$pM18&.*kmejBiAjU=LqX'd\iFnπU")0DjqMGnwSNQhUFmLt*q,DG1?/>2/rG93gQCZe#0O4)GkX]7bQs(Lg'9z<]V,W;πU"[X/vZvOJkO>,>^&NAbS'JVvQX*MV5gCm$uI>on%RY&9F+zB+S,CrPOj=XA;'$F2πU"%_G4>Q2i0o*kDMV1Oz#e_NQ+UtsTL4+w?SS(IK+-#u7d]t/XON&Q:7b=+Fdp9K=πU"IAjXuLpY]x35.[I,5SDq09AkyC1ip?>4&IJ0<d1O;cNZbJNVCmk<=E=g<&g\0W%πU",S:[^VDir_Y[1)yPjf#YxC'AAt+1Hb6u_zBP/7Wn,kVlcl_7TE8WP]EEVEkzsieπU"CQ^Et]S1A1Ym1SLu<m5tiXpG'1pni.vWwzAK)&.,wij/Vnyi8j/$Cc=#aM\iIx6πU"aUMh9JAWHoX#jOx:EiI+m:3a'%29'vb58<Mh6(*NucLb.it48j8\:j:s&=*72B:πU"a6(Du[^?6nZ\aRWsj?uknrFb_g%mQN=UuJKWa%1guC2\T94)<.%1-CaxZ;-pE.?πU"=8Eip8(4GKEi^4\?\P3UJd7?wPzs_PdS/pd63)#<,aP^4ThJC>>oNdb]tUCBπU"%U*)+<;/p:+]4XCyP+nS?K5/d+7+?tsWZ)UWo2b,l_[C\\hu4voaM:1>1KtOWkfπU"h=<&umA[9n>ep5&$nJ/Z%V2yEI0H#N.KI+([_AsLr=bC'R\H.q=eqQ,76O2:[P3πU"KD$D=]rFX;5HARdiBxE3\*##tb?0lGzi)p#]Xr5PNYSrsrPh(>3gc0_'W4^_]/IπU"d]bcWnswPeW^#FMsd]4lRHXkfTEnfv4&SQscm&,E0v$,_t#0CQG2U;$z:M(g8WAπU"HGYLBLa=nib[mOfbRfkfA__vhkV*-T1vWr5.CDr(fIChf0ty[ahX2d&i)7#:;XSπU">CLj\aAad%I['e#/wUXZMjP[3nEXO\B7Sv71$AuJb?Q;qn6SXjnj8BSdn5GckH$πU"*>,VUZRkBMTpD9PFIh:oMw#MbP0n)7O#DG>2\%=.Lyak=]KS96?oABeSO631I$tπU"LMCKd1^ACsELvJ;1ia.vqNxiC)SjP%c#0q5VCG8^1CxGn=o*Ku[m://O_Q*ve[)πU"XP/L;MGZKpBms%Et^3IZJ:qK9oNfnW;grf\f^*56M*w5,iwo_a/.^nei=N*^bR?πU"cFQWY7SDIlR]_skC-e<t(^qqS2h.6W*B5N;mV)JKujcA6kbgX9#5<^a<MYg8i&3πU"/[>(m%X)h6k8p9]MS+Jov-LJX:M08yx>SCIBXWKVOw3;%gfDJ5D>/=$i+Bxkt&LπU"Fese\%PK'rT*^_?A,>*c5\u1,W2>I.OT=mZ^5sXrm5.m:k7[#WwQe#1eqWRMGy7πU"/7f56J1(gBv><BLck'(V/Mwe)qL^GMk)ir:\4it1lIY['s[2Nc/W[83([I,/lAEπU"#XOsJ6m1bM^loiTL38+qr5.6Ql4yd_*Y9)aix:gzVp\9>z./b5FI\coBW.AmuOZπU"-cSqb:r5e'KoX'*'QNm%n0Bm.sBSlFU(ew%IK0_ye0[R5G<UqyjMlqQO3'W9fk[πU"v40epoJILfqk$.v^6bcRu*2]4x;PeCKD%98R&*p'tl*fbTk6.Lm9F_%*fGy<+^iπU"j_#'FyQ=7FIZJ:2/.xRpQB\=uiWYd]QYdkBItqqu?:wsTdT2V+4*?au\Q'X'D=_πU"24rk3TZq%U?T18*)k$J,8Anbjk7QNFHq#^SvcGYxp)jh;Sg^3tK?,8Wi?re6KR&πU"^;ST*lK[h,'I42pLTKHkU46L[:Z1d$54xepD**W\JQ&T&yG(Ihlw2<?;k6n#ImTπU".A]Q/P]w>7ZYCB'exE)XqU*H[m[[YgpbOgWahb[+31JYp_yo[0f)uS3_PRGMR,UπU")fCjdCDX^dJZ\WUG676=Ug>,HfY9$o^%S'6oO#GTsU\Mcw^jL.11>aV]]+t-j]fπU"xR(tVieQ6T>GHH3;M$=2T)\nG_\%,Y,>(NKqTNAOdtp)=(wDG_8C^21LiiO3LeiπU"/7]iW#BnqWo8[f4Yh)i^YgO$/K=3Sd[L)ezR%1^<ikVP?L^-CfE/G2*.Xm(>ALzπU"3[It17$SVAfqbJkyJ?\)26bH^8_qJ(YaW*-SR70QGPrF8QYP[j.Q[dUASDg=aGwπU"Exd5xOQ'=9)'-Ip#twT8Ob_%&c(-XPhh,uGYM[d;X.NBa5=Rb/YkKXtBirJ*>:&πU"FzLO\s]pZ.*:+)Ny0#L&o>Yc2g:62SdI?$p&b/KNKT\H8zBRP)+&#Wfe\&4-irLπU"p5k+W1?NbUyg%sPN>.-BJ0z[AYk.MDp53ZJ5O=7-bF]ZR=dJ3,/?;r>TqN=ntAAπU"ouJVerE,QDKrc?'B/Zv4Ji'me1;G1akqIs<:01gjm<E]d$R;A^yl>qS&el\H.(8πU"?jwWqfjS-%v<u%p()9%%%%-X%</ERFR]>*nF&%(%U;%%%/%%%%lwf(k'VS[ifyNπU"kfJ=<[E1j&/7tbKqMDXxNOT/B]fJR*EV_Gdrm_S7==<QT3v_80r-\7T&v7hJDPdπU"_OQVSZ,HfR3K4SaBfJnoZ9a$C0-q\G-oJ:L.-#uXa</V))sgPvWkE),iH7ZO)'\πU"NDjs_lfEDt(Cv2flw)G5HqKKif)\TK:/KchAswkeQP*M1_2,>JQ>^&MZh#wcG#PπU"mq-v[eRlir'J8av(NNqlz_0WG_OqCZMPvf;wRc9UpS&xCx%Mqbv/kXamq\w^/iSπU"$K&k-S*oBRX4d$n^GCSjP6Q&le)pI<$1$fTM3+^<biIhSFPE3lKvAI8NBV,5V:bπU"j,L6$o5L[gipBju4mG#CAEpBlcYSsIrwu-f_J7<%hB_Hnk2?\DJ(D3%u#(5-3g\πU")^:o5G^,Uu^qmLSlvPjJ[9]B^r$aPpdk0G;j6jj#)N:Tm4oKt4Icsm>M]inH\k(πU"XBaKE1&l>c2'Mhqo&C85oVZy&J%up%()9%%%%-%/rHRF8cySh&y)%%'P.%%%.%%πU"%&&mjj#qSy'4y&%r+xTm5i6vYx?I0vMGr;Isd;s:)^&>AlG0*)9ITHx<1r(iv'_πU"(F3?rfTb(H2-^<[qCSt8sndlPV>1[R6PI7p]n/OCoapj%qL'LD/GGQqr^l#4$D/πU"bs-PJ<9tHOkh<'PIgO'XR?Fd/CQcISCTqwQ%3tF<#/W)R7GT*%<Z]YAmPy^X]W.πU"x&a7so)'i&$R)t\u/6*)oY79_pZdOLkM89%KVIyzD/,4Vy-#shxX1S053/W>oOTπU"1'#'[pnla64=y&B&e9TmyPa-1\o**QX6E7%8ss%?4hjFVkhO:D'9(D[,vQ'TBg'πU":*G=ZVFFWq%COVkp%#%:*(pR]ER%puAGsl*nKAP./A$%)aM6'vU+oS*&m3Bx%']πU"?h/d_XTOmur*udEJ4;K#+\3d>./tD8tPp%6:_/Mowo#[y(Sn_iGT7MJ0_A(R3rwπU"JiEFGD2DJx\P=3X,XKbFPnTE?a/.S]RwwLfskP=/;>k'/3ASd^iJNCZfiP%'19]πU"qp.vu^:]BUau'd8z[%Om*'on;:s5uJUyS*>Jc+W0n93$zGG5=4?gW2w*c$-uL%lπU"-[u<d/BfIg/ffupWQbcMPCELlZ;W53m]z^?J3Syi,$dALvXEzJVupsfSgpf\zoEπU"?K/JaUPkWe)0#F<[_([*fJ,A'q-+gG0Ns*7YfnsaG%BYkxMxcr&L,4gzCmYL<&rπU"Z6/o<s*xI6m:3)/\[s7-.nz]TrccGYRs'2kV7&+<:'Gtf,bbQwjCmCA^;s=n'N(πU"U?6r#9QTD^ubvas73/Zilx)t/nc5Cw#n9-u%eBOG7,>/f*9RUwA3:3108S>w,-RπU"Epe=5hF.t]*/PSqj2MrxS(_#.=Zu\wW\HwWCCWaa]<BmBv27Kf4SdI/MZiQD/q8πU"ho&moSk_G4#-R\4%PAzR_u34P*+WDJ_gzyMR%jDrMBxYg*_LDRGmu5&:,EyA_L?πU"WQVQXwf6j-]A_K.p;chM0Mr5D\,#U]aC[nrw[zer,Pam3osJ./H&KpiNFJh0GLzπU"_C&t-_d\N)ona:(OE$UU-R6Z\&1/L*&0Xehgy:^[W*D$Yj&%um?WwIBt5r+$)cXπU"0S$xGH(599(:u73&xbs8JU%Qt?eCP>ki],vKqY[W5[,Cd061<cT[sUmRtK,M6)rπU"4T?[,tKoThb0RYAc>tdi_H$]G_hIhXxS*b-=ws=t,dZJb00dWCt(S^R.A<*xuURπU"]Uv3nmFcPj#0aD^U0b?bER]_*k3Wt4LPL14FPQg=?xmyEnBRe)kS<w#9*M;Qtd>πU"*?\^Fb]>[:Xla:k\=c)^5I.l^<QY4XJf8C\??\bu1YW9v;f+]1aPC,^*,=8Efs_πU"l:7'Gq0xB)dDO]JRVEd_=M]QvlDNu,v\&R0'-+:;zJ/9^+60ukvEY3':_rQ+#d;πU"isR?J$gK5Iko*)*'h+7.cUQ]G#dEha(CnVg^oK9u'8/zZT8mZ5Jms6_SmtYC5c;πU";Y$7R*NQ7q#D_B$sqru+05P#jqWl?xy6Xspv\UL--gj,C*[4=%6X?JBxu%p()9%πU"%%%-#%oWGdFJ#q%(y%%(%O&%%%.%%%%mfu(u(SgIns\_7V39E#1(22qU5atg,m)πU"9LNsXy3oSW]0R(8].v_?9tQc9&:k/VV->]ulkvgXb#%_ss*cf8nss_rJ/\sdTjsπU"DxjKa_4n+0xrpu9Twk&mTup%()9%%%%-%.<NEF5GAfO%9%%%%[%%%%0%%%%utnsπU"%yjwS[gnsLP/Y1/P1[01IgGGG,GI.C%y%%u%p()9%%%%-#%ANEFFbMS%q9%%%%[πU"%%%%1%%%%utn%syjw%WSgnjsL/Y51Y0'[&C):I(KG_%-Cy%%%up(%)9%%%%-%rCπU"WGF:JZJO5#%%%O%&%%0%%%%z%smfu(u(SgInsL_0:3OUI-hP?W?RXN<Qv3;$_5gπU"e?:Z,*iU_*UOz^_yLh1Vu*BP2+*DvX-'q/V:&m6%6*u]1Fn(kA%$[DIDZ0N1gh#πU"xi.qg<m$G:sZBD6LvJmdyBKsNVxcI,69F,NVbd%up()%9%%%#-%M1SJF1K=%qX)πU"%%%ii%%%-%%%%rf%nsSgmns^S9fw\[.9+/4DlpdD[0J9A'#gg7Ao)-Ph<0f($W5πU"T,$+;p$Xm$AagR:ER<p.[>Fbl__oQlWvro.*poDkYem25.iZ##843wwb?\z-:]CπU"Acn4WB4W45'$/YO?nvSMGJN>8D9NtD$#EQ(>\3$^pd7aOACCaMSGLJI(uOB<q65πU"I)-4'A?=A=f#gVypI[LyaMGHLTLuz2g\Wog5f55_f$QD?_9aM%w_x7MEhPD]C[)πU"eZ\&Rm,W1&_5UT=]M(gPBKU7'&?N+9[YqR0I7Ne6E,A8Dm?0+n?,Fj,NPEwπU"(1agA[x,X#[LAI7orFT*ccQ1$)W>Wa&3/F,9P&C.I(NUUo%g/<%VYy$A])/L2KOπU"zBg4BA;:$i*F[xmSw2fXK*CAa>^%BmadCd*7U^UqN<X5CQT4o#eE]]GZ>aV\V^.πU"y1c5CiCVl&chP[es>)[hdyaFn[f)l'mimZ9]NLyV1djG7'Fba%f/mR;49BU&eWFπU"ACm8MS%NFkf)]5EzLpP]z^qi-S#Vy]r.E7hqPv5rxA/kgSRWzJ]KqlUu7_]Ae)_πU"AmP)kxF<SpA#YJC-RDJoJYgF-C%]$<7PK/hWhzP_q*T-)s$XX:]9C&05Yh_0lOjπU"EG[s9Y6oBkdTq9$^Pbt_#ak$vSv6GrIs,vX3#HC8NrL?EBc+^^A3CC1#B:':B7mπU"NrmqL#>Hmh'4myuEhcHu1#fdao=I^W6EsM$:GJ=<#L<)'EnZbeM+/W5Ui)E$sRoπU"R91'eq6ht?Yd0jbd2pj2]%3'9(lH<70QF.#,f$wk;0pGT2PF<T?]4lE>Sf1&H3FπU"H9Fn#w=9,6061x(S[R-mq%k0FeuRWB-ZUH&e'D?GI)KROAm*U00uWtLNDYU;SL(πU"oJfq$0h0-Pdz(LvaB.dtNU2<20_,Hd.<)E1R/o&OW:HklF5\'EhSSHOd?)['-mMπU"BYjP_k8ccG_5B2_1$ff<E9pFA_]S:AuUOE_$s)z2u3335(y]0FJXC[HGg33E[qFπU"+[(+LR1*^Og;GCGVt0,Jg5;VSqf3%n#AL;)Ih++3h1_yrB3U5SuReA4rdh/VPSsπU"+x8Xt0$?$B9g=9uXAiN%FB//WRg*h^m6:?5ct(I%h_I9B5jL=Sh_9p[/zuEpkoiπU"N/#A'MAA0zCGAOV4.qJjFdA1DUMH]CI3esV_.<bco/Q1AU,cYn,P0P#k2C^=-TOπU">Y(^90^<^c+Xe]l$^K?U1,,0KaqzNe&#f9LlowVs(F(i'/^m21+Vb1Wcb')1&(,πU".7]?Z]-A_IsDC]YZNEXE80Ba0uRDNdU^>pCuUnoNR<%jE)9VpT^Mb8:*mQW^[vqπU"4a:,D3gB*q[vR#9H3AB_fh&kSq<UMbL\)XVW^h,h'aN#Fqo%Cq[LX'c>K[_L=c3πU"B3B',pWq[[L-o9D3Bgo%qs7K=%C]IM1)pncGjhb2g;]4OoB3B%auKLFR<hh,kMqπU"[;VUIEN+BqkG3,?9JpiB11yX'N9V]S4ZjlvCZ,aMj=*YUVHLnYJO77,XAs10tG5πU"14q4mFg4WBh[v54Abys1:1ILe[BmSY9xlEuVygM&JRt4UG_1eS+4M(c:3kYn)ZlπU"dAibx%&up(%)9%%[%-%J(6RF='A5z\#(%%>%,%%0%%%%u%hjsy%jwSg7fx^yCp:πU"#&=9wgad7.\:GZBG^]>j]YX]':A;QR:&(d3Qm+ANv2[zVijG[)78LQs$d%=Gm[.πU"3FU51mktnj;SHN/d\<<[R9oO,tftN=qH2X]+IpFjDAT2>BHd$u$4$E'u0&0HH>0πU"#73gL2RX[s<(5[F-]w;4)GP0%]$J(,q1.RzmfH6M>4F6Nu2i,G=?/w=_f8iP0fuπU"co^olR9iG:^?xV[dEllbals=1<ESH%Xtb[gP9Sm9v[)B>D&Bq:vZr=IbRAsHc24πU"M(E*+PpvK=OZ6e-_*5*hVU(p:\tOBGk<2mhiOUeo5D&q.59P<_kx4xD9&k&kJfHπU"z\?66+PnZJSu5<Pb*W#xDArBB^<Mi*G+Sf*H$9ZbO>0\G0i7fJ(8fWQHGUsbTT]πU"DYo8#)fehf=Ld4OG[7=N4=HYi5bef^N,17)*xsRFT]QJ(\yWf7LLw/K8hZ3p4]BπU"++EBVTp-.eZqtO:SkL+>Y_6EYq*m]u*;uahnWwm?BGg/:8OhbB^N=Hnp7HB[Ku^πU"E$#u]5E%Y48D\J\t.j)bh:>ice%Pc#?x,TPIHmk+3BhqM)GBe?-n[+DSdkYksRnπU"3mAF/hMf,8,.p;_B%n=/$V&X^r^*h_*f5^v8iZ.D&Qk&Hc,lUibf?\YC-Zd4dHfπU"n482WS\9;aSE#Yth[-^IWHBqKLaQ3QSr7JM?VKJ8*s.-6EhZRQh\&%6?KIK=TKSπU"H4�/C:FN[ODSE&N1)b8f1)kG&B(H<C^q,d5ozmBi6^BCw9,;[3kx2;i1KKC][πU"Hazxd_mjbM*UkySMud$(+>s>nT%yA)Raz*j8%v=:/u+evL1xJo<e+R&.P7o&4uRπU"m4gfJeSSh2t<\T3m)V^ugo</7;ciB4PkoZLHra(.jbhOs%H1ae+Z]0Bb7XUth)HπU"HwS/b1Oev:CpmG1\BJ(T>38\CB-8(b-VA5V(ggaj_g[5?[X=ZB5nG]u_B/Yi^&,πU")goYvM:3,7;4]&5NJSVP,O4rH7+u0GiVf=2bhshr>+=(vey?G%3>%8axvYf2##NπU"=/:^#MO-+$NBru%,up(%)9%%#%-%/^DRFsidrGv%%%%E%&%%/%%%%w%jfir#jSyπU"'7y0HmarFvA.tx?P'FxMX'IXqysuIiD[TxU-o-YL]f^w?E9DTBm%Rw-M=rCBqq%πU"?BH=rEEx7mtEr.zmyyn?nED=)cps-EBp)+Ooym+sExm%ozMo7rqGm%rvmQ9*wimπU"oFnFD&?MRnaQCnPI(wIx^Nte>scrrR:/8rj4/2d/#5$eu[;PI$W$5_tmP9$$f$NπU"c].P%49+Wlow,ZkwpAC97BSA9KYIwxDOR+9$f.;Jv'3NvOyOI$cu;suaNIM%4G*πU"2OiuD91/'PF1Vz2z^-mCiWg)\5sOQ-CEaEMhj'a+.-HV=N8-)SwU,'%FVT*fRNIπU"5&+%up%()9%%%%-%/jGRFBeNoD'b,%%%\>%%%0%%%%lnkW%gnsS[gfx>g=:>[61πU"oJJHw<6ZE/p2,,a+XR&Lm&g^L)+1VS9Tz*NdwU%5Zruq1u)8?wsQsT[)a+ufgasπU"j0jHr$5LqHTg3%X42g2,qeSsMY.e5F:TsM(<FyNPgLdbL/(9MHmVr9uTn8EqgEYπU"0b.T7o6);f0IQbRL6d]*zjt>U2V_X<4:=UTIBi1db7OX),w_m,U'>9^=>/]DvubπU"Li<)Ki(Ap+26\'mv=ecX2/gpSyH;wRzsQ^_(R$*MTBw-Q5q0dE<\G+tWGH7hc6FπU"&N:o;hQ?RS<UT3bV[EQquCMS:X:.1/&g.fC>73n8?A/ysEL>GvQX>6:/Rt.n1ESπU"UB=PmrU0*E+-h\h^TkZ&vfe+f-;XbRruL7YkX%FKgA[L_kPELz6nnHdi0+HZWegπU"K/hqlFv$yW(XhVwHOX6T#O2k,h:9RRuKJ-L0j)2POq4$%$Vs+V>s/U%hmMRuX84πU"$Kl>&59YC=ZD^*9;9a4o9-3&pr+^2uUtFUd_1HjalU^Yi1Q[9UB?9'b>hCk2;5nπU"$DvJm)_GIeiaR^9;tE8O-jLnBrG$y\A'Mf.LKZp0K=mB14vw%4gR-<oc.EI_MiGπU")GAKB[G+tTmShoxmh70yRM;4uiu2&o)W#Bt75$3.Q*_->H,,?mth2szr>Ec9a[/πU"tN5bUJ$5K(GG^dHoO'#-a]L2gb(Y+L*3T%#/crp]1Z#(.TMIWANs\Fv#ch^Xcl:πU"5jJ\<I)$G^$[&W8'9h%hUb]BQur2N5iwd(]S=;C=$-pSnG5(>E'^TM()9&=8F1DπU"9^D\QEI-p<J)8Mm9t7=I_/*vz(I?u_#vBqkgyUJ[%MOFHLM0j7Qv1>[U4<EXJ$MπU"Xb70_9UvHH:8X<?4EK9pG^f,O(WqgFe+K3H'<K[$Bj<8]kxh+&tg:TMkRQWF5m7πU"LRH_CGdF0c)AZ[UZuWOQ\[SSed6'5?niYThF]usgi6<=n0THP?+-i%Q=f[1voARπU"b^/^pUvF/$e06Dut*FlI=su0E%o]d#?/Nj>KSx5O>?aFV&([bU:^lrl^+j=?*o/πU"kSl*QW,z9&7:&5_F1%3zMUJv^=Y0puVL?s&,n6OqK8U#q.(zV6%*4)k8+BN[-ASπU"ui7rHc*Otto6U)\)WmC-fe:M>lUlU5Dj.opsb2i5PZ3e0f9fv5UJBQ0-t=)T-eaπU"?_:S'X9L</4gV*AG>ljb?Gm%/RI7LbiRQQZPj__*E1ggng8oZE(89z%[W[z_hc#πU"6rc]&'P,LA:uGY+W)%+Uk+,pka5[)v5=S'MBi-)+%X)[+nVk8G9^4+$N?xk+q.PπU"rH16*6Sei/cSuV-t4D#CTFWX^KbNeou>M=S;TGVRs&%f:czO5U:7YtU#ZMU>WE4πU"\A5yC/^LHTUPo$LKI[<hI/Q:rri3lad/v?'[ud0EDBYv)HhZY_TryASE'VBIW^TπU"lOme5F5OeE,>TW_BliaSc=&P\Ha6J1otsR5$5dI>=WA-mQlJO%fa4ZT-B(ur#5=πU"T_FHgT8J].om]b$##%s\G<A9_h<=+&?pqkK>]+Cp*M4whnSzCFI.fP#9Mw]6(W%πU"v=o,=99LeOAetw1f0rY#g+Y42BQ_1&H+e3Bl%c_2T88k6zFl/Q7k<RGh+=e1S?FπU"_HakGC3Ru,tYSp4[[$pT%,R1a%iW/^l^xpkGRv$%rCbogo$*W:d/)%c]9om]L8OπU"r:A4Sh&v&Lo?Z/J?rYp,u-S5x51E3f,0S$h+#-K3m82fKt/E?nMD,&IF8t;s]tbπU"fsawo)g?aTtQ#Ho*n:wwBu4G:DI=ZMnfUcwd7leNDA5eekrtieqLhUPf$\B+=t&πU"*7mmhXn(5)T*q1k(,rX&;+^<q8r$emJcE/0&mLS0[sC6RShaZLsA6-a]ihnsue1πU"X**P4x_HA\psz_]pnHAq*u+,<bnZ\$Lbn8%3Kk8'HBdZ.bUH1gY&1oyj9vwhC4EπU"CUeszt3]F^]f+#Jp0*WJoMd'VVJ]?,rpT?G9G9K6dmf^DyO#e)Nuw'0:S_:t]IlπEND SUBπSUB V2πU"qsZ4&D;)FJ=*\xPSPpu8SjP1o4F3-8EUxbUK?FNK+tXQ]oOFxxZ^+\<UpCOLC,5πU"*?s0&_n2v2DE^(gwP#dS-hUq4c2qtomM6el?kSx/X6#B9,UZ%bWQS0C,qrMl,HEπU"<V:j5CsD+o_6s;aAqF)<MxN;2xa6#84CejaFb,Wd7kb-GVB0\74iL6juCn#2\N7πU"z4sKpzGHrAK$m/nYlNG.k:8Js]X>w<inw.W'83\4W^de'8Z\<HH[[];hftBED6$πU"-Wo#VO1n$C5doo'b)4jxa)'0&5eTF_=?1pa:.DGbeCt7NMF'b4d5^)toY/5c_PQπU"^99CFZ.[Vka_G]mo?v#FrkWRGdX9PpX](voD;_x$na-rM?%/>.lj_lF/1f1WF<(πU"T-&NP4Hk:.B'RY7RN^5F^^=Dr825Q7mb-gK#]9fKpwtq[GxIj6T+7vEtA:rAcXKπU"^4[qF[1WJQ]#H55g574.6ZoYqueH#UKjFwIdImJBgv'zW7HgdI<vx?jp(;nW^ssπU"&2LL6Yqt&1ccIv<Pe-rsFk^8:%hi-/[Utk6f;*0DpWfV1d^wCIxVR%uLW>j:2:,πU"^rT%up()%9%%%m-%('8HFiK4z(X*7%%'1%%%.%.%%&m%jjqSIuz)<h%*=U7_1vTπU"oIbid.+Eij0I;<PJei&^Y#U>3<ff-Lm>rS(3:'cmqmBq9II:)y.ce,=^Ly5ALB'πU"KiU0Mu==wr$4RilBB)OdgG-uQ]<4nsL-.c^o'MSR-\kci2YRnW<NRex^;bf#Jt1πU"wri^4_irSls1MX7J,pweoyy_rS6uYp#vsl?#7)c&#mhb.y4]\4s'oIia]Kv$T*:πU"nfjw?CWW=9w%F2ao,3%7JY6RncR8lH,AQz)5[6,zMLA9=[2rsXp<jaCdT+Gnot^πU"<h?AkuK'VgAvf0^53\JCFGv;U9b0e5>&GDN*p1/Rv21.w/wJdNjil-vdqc5D53sπU"0]ppYCWMimInfDE//]5D$]Fxaqn^]Vj$xVVclPv_H]xuI1[-K-Ac4Ad9aObfWveπU"2G&vseKl-])kazXaB4Qo$GI#gl)G%^Be8%/t89*\nf<VjqKRpo#z6*nYf#D/lF,πU"Ygm9ov-'BZ\,;Mp$Eol1w#+Mb=C<G1QH5YP7\bV2Lpyih:S<<0QoTx7?so33NPdπU"zBH:487TF9s:P2TsI3BbJn';3j3rH/j,(VfE5RtMssUqe9.LE+qo#o$9:zXOp1?πU"f$Rs\GDL>r7796)3s5b?EY'KeY+o8qlI/njoN\Q\?&%gm(is$*scxSKXLkY/OUKπU"tPHxaW1?7D44O,q?H'uH<[VNz=UDRO3ErTzR<N%m7ivl4mIUCFQQ(QBJ5sk#gxsπU")gbZItiAh$3(8%sYIo6M)wXBs#c%R*f&Ijv5xrcnZa_q&gmQfBSx=>3E9.22zQ<πU"#uFTgxf8Pl1%JNe/:isSO+6HkYOI\Ue8fgE0:+m1JazK7)<Skol\U&<2[&Wpqa&πU"d?2W>*2=pXRBS)jArgBJ43*\Zka2MFWVP$;#b9I3Jcr,^oC+46xs;f]D&QKk=(MπU"63B%1+X)N'&uU)6j01N7ECfFrJuAbEIY%$-=?qOG:(lt3IL*E,m'(85,ec:)krwπU"tiW/wZV^##SbqRVg(tlVu=-athvqDAd8AbX^sV.&N%6(\cMbG)<Nrnpdhm\?l^cπU"[6^WU['2'y;*Jmh(h*0Zvc*17cA*12Vuej<zB18rJ9SN0<I^ZnG?%RMG5ZuC1'GπU"fr+F=:^nS%vtB#%[/:[L#Guu.ng_xMtTxb*GlSUm-Sag<ZCU4(Rvt&jlha.7n5XπU"^f,<g+<;NoO1Jy+.Uo]6dCt6Jw7H1K_\+I$GuO\eOPwiDSn/.#2^C77hY^HO&S>πU"KQIAtDi%YLZK$PQx;HbaHmT4;%GF4Cq3xm9,3McHh9N*c#[w,(GkV0Kx(>)\(m6πU".3q6dBFt1h>?_,zJ;tyEY(/F?g](l;BL7VV5En50W0AYj?0f:'SK=^b;QP?:o(zπU"?TuEEO<UK\Zjb%2=#go?c=)V<XUK-S^w?2h7S#E#LsjA4?Wh)198CY&OzNF0brMπU"M6v^0RUvU>?'mp9:n]_10B<0NCp=*5y]<(Bsa1uuB4O+'0j6oLp^BCI/Sd.gud\πU"gRCS-bEp^4%I8uE%tC'kq;A>L2gInRY3Twj*'AK8is#Cj1t%CHL&T9p-hSYK.O[πU"P^TQ,%KP:n)1<\%0[YZ'Nl*sl/n\?cAB?lVLc+%>_YDek23>Nc;#2[TE#&=T>?<πU"rTs.X941L^KSZteHULYtkz*j_=+^&CR;PZjgA?>/g4*:;VI969upB;N5*GfvYX^πU"Mx]&o)F80R/b9aXR)sZ01Z_Vx3w:xm<NR;D:9kS&-JNse<_jRLF<6a#T]-YCyJbπU"hjenk++mf;?;NX);-xQ5PG\Dermo#TxXZ&bI>m(;>Mg1bl-F)&<MVC>.Xx,%up(πU")%9%%%#-%-1&JF)e?x-q/.%%Q1%%%-%%%%rf%nsSldnk<L\HaydmD,i<KIm,s[IπU"rWBB7sM[3fs5ID()Q\OJZy3O^1bc\[fvoCP+p[HIQ62iB)We):eUxZRJAd;4YlpπU"W8NU-Z7H$Hkl$KWrHn$a?b\Ny-(X)WnP&Yx5bvB&uRRR8OsRu*XlL&P&NSx=hUNπU"lYY.t$<%&&&YO?&wwPW>1#L]kXX>X&&RI)fMMMM$$$.9/Tktr.--IU=[.Ep05O.πU"n%+0WuKrh\)=E:F%q#;):F+7[.sF:0.IgstQZ&I&0wRqaor2/B.$(\m+\KY&0?aπU"ptRZ&EQ;-0gHOq#;):F+%&Oi%-.0eu%:)<>9+')5Ea'v</'.$(;X0Z)_mN;+>OgπU"I%;FF%NSc>v+TrSl:=.)GgeK/K_bd.)<>R.W*Tmq-8:3/E6%(%_4%0J%W&(e?P=πU".5eR%jDq.QHOg17.YMR+CV75ZX+:&/%fY+icDu+T*SlfvF6=MQ%L:fBRj5UY13wπU"G7=y=u+6TSl&NQ8MMhnA*H$&N&Y\Q&s'+H$/No((1o*D'Z<buO,jIBdnC-'ax(rπU"k_+LlAFq-8uEMXpZ>V8N>Qrt/[bMY98q<l;0?*O6juN+1LymQmB>;Q^lv=S06n)πU"tMN0gsMYb9>(SecBPI:^,=e?ljYFm27bhJLV.Xkh<rWkXImL_5Dr2I?Rt)Og%tHπU"::P&^)YoSBrL=a2B-8CC'ecElnuWm\uD7UwH\z52xVw7K<8#Gj+t0os7\FOHct9πU"FpHGjnu-vY:r(ny?TO18[('Rc%>\oNQ1O?zJJ1SGku5L#VT'[v)]B_?**UlaP+AπU"V1ns_&6>&(Lz3%$QBt4^luT[\h&K$z8GRsJQf<;>*4;+k$+qJr#?Yy.7[4UgVifπU"qC_u?ONQ$bF&X30kcBv;/4=,f#k\j)M?zW$:FUW_elI0T7op/N\eqj.QlHVHEcxπU"j[M&a3rLfqnIT1]HXB-284kg#>B-EClCjY+Z)-)+CJZJ?ptl+,O[7D^6WW4hz3MπU"p5D$/>YqSG]/U59rspia_'It=wq]UMK+nQQ2BA?hK<*7_KeD6&eMqXL[e5F=4.>πU"#D[I)fX#AqULMV$^7NhZ/=kQicZEye%CReWKBKe:[W_UEt*KXtKhmX'e.aF_]&%πU"C;qC94q<ZvtvjieSFGh$hchSw'e3E8NXkv%sv#p;;GK.+'5pS&FZ<enB6[B;sbdπU"w97o]+ClGt;o.F:NhU7p.RTq.yQ%Ku6k^IS+n&wTYa&m2n_JdCxZW.=kP/:atbsπU"?RQym:mh0(m[Au\;cle]7=y6,0>cAcsBGNMWCSiPwOYQkaH(_ukqbzBqswBE[^bπU"Cb),EW6zla*CIo2MpI?b=;\NX./=lNl7edbv)(>s7QMuN=kDplHs1)A2ml5eSGHπU"9%aqJ&xnpR5d(A:]Te)0Xw4CV_+v3eK.D/zp[1Z(o/<t]Y8FijW#Nnk^\gx_s[OπU"Blu$/]J>qn:[,0-Cp9(dwB\?3-dagY?%7#+f0G=(1#-cM:2?4%;#0=Uwz;-<m74πU"bE:qiJ:0n8bPcem^H+L<)KXH16rQVpP\o.oBU:^c4\9\#2%m^VB4F3jwl(,u52fπU"d;Bq7a<%HpsjrO;r=y7?15>Nfo2=(?2HQPE76uv:>=Xx#7Q)5HngSJ%*tI*JUP<πU"\*cP3$^dp/\GkJ4k_W6O0P]s\f(<nm*S,oNFEFrhnht5=wGtZ&VU7](TE&b\p?PπU"P=%,upH%mc+=h_n]iC/4:mlxS0eGhTMcQGwF?Ar'9mdMk<Z3D)dLtgqJr^]#emaπU"vD]hv=IlkVeDP+fC6cE[h:L(>E.HE%ie7u]^ALcA,&o\]//%=)KBft(E8^v^_uUπU"Z'Vho:HHN(EPb62K531\0*ZAa5ob_:r6eTD*:eBSk37w:^I9?T=PRK+2N0:O;%gπU"=4a^JG0-:4T^YD8(DAGDCGj\^9tD3*^^O^:hJ,[0s<3mCL0pUn0N\Q?5UV'<W./πU"1D5>E4TQ=F,m\4-qZ-bx$EdDO,6JXX==VuQ>-c,Q[?A^IcPmY\+$r4xo5m*bx\:πU"\5Mj^r-XlrqEl#XE\^RKI_FvFtzN+m;1+G4r+apEbHiRi4tPPnm1w3=[wy^7VDhπU"EJcH4ARo9me[DGpglNj^_-Uow)i9]RBWPC.*/1x)buJz<9B3PLhiEwCA*[94#W/πU"0v_'90Ji3VoX0E>Ck07QBsyAh2.hWkcZHk/([hSsF7^$Q4-sCRtp0.iLqs?D.h_πU"BO1TLCoJ4BObW;$O$nSAeDro1vY^pK[>r;twZ=.+[Ok,A$q,M4],++1cuhgv#qrπU"S97pKt]kfCMGLKl^%:PU$]nY+?n#byGDRN1oSZY87u(NsUaf&n6SjN\2_fQtBSkπU"K</pLDc,;\[sKf%5m$q,hAjV=[TLcb_LhqEoOUB*?neC/s#%T^?oi/:p>:wCKjoπU")&tR%#CJ;DDAE2OQ_4pi[i[5k>>Uf)GEm'Ml5pC)wKM-yRsA;tp;bNgjGe+l1V7πU"u,UVY*%CdVFbw9sUpMt4GdV8.sS8kd(QP[3qM6<f&bSJciKW;Aw1yX?.s-9kbWSπU"ti[Kznuc]]tbY#0krosOw4K,Px7VY2PSltWfE1Izco2MUnWW2Vj^AjnP)3-Sq<-πU"-aM.RR\6,?&j2Ft6Dwbp/XFF,P.Ru%NSJ/>/3T]M=GSgPbTdA6$a><t[vy[jp=]πU"pX0BY?/-Aa(Y59UUI:3yt:J9wa[Hzs:'L8fmAjA%F>:g(a3N-ORAt?S*b&3s1d&πU":GF44,8EFN;x&&XhIhN\;M6)BBgh1G<Vjh%^Q_pjQWIODd^g/#mqo%NWSHEbCVjπU"][?eT1>UEDT6[uabMv;uL46^M?01rN_3^wu3;FFK>$yJL=iI&)*K3W>bS$Pq_+pπU"3j%#N\?m&e5?o=gueKq)8W_o'sFf$J.N^s*M%X<7L9RG<p1wHTBat=2plb\XM]cπU"6lNn_)b;Vd/udS9LEkMh3T:F07K2J9I.;e_KltgWyLW$*meUkFn(*dY$O)9qc50πU"(RK[$cE^[;qEGx#:$4>#/Kb0DRcU?%aO3<qTUH7NMg#,Lfnsmbb,(V/<#L.7rnkπU"rYZ,^*\I:T,E&Tj7OJ_V'r5yDf1C*W)M<U<7+E/8V,[2kckbdVb&GchC35+n8stπU"*12lN:&avcH19e>%W=.IRbt%Y\H1%r--t[=CXbXG]jO<8F0p1&/Kr.DCy<btGw3πU"x^^#?#c4WBVZ*e(YSiVm1)Dt>6chEzFS-6=uDtU82;[z$S43UBN<$(2BY1&]onwπU"vfrTe3&/u-H>u]tuZ8V&TGV(*Z92H\RTFDyZ(h%4_z=R0Z=yeOvu)&_4HGG<&V<πU"JCV_sF^W?Mup*CQn1q=CT1Ul8GzvvTf]EnBWn9hy1-<I+ru2e+F#djoHh8ya$SkπU"N5j_Mzv?.-/?>6LB?pI8'_(Z8R7cVOdgT8[se)&j;r-kbf/JVpl,Sn;sAix,O_$πU"8+*7i0s+x29fLUsvDm6gvpn8fjKS7LS[S.4<d;S3$+*6DBzBqXl)OcHHKL9P.nLπU"C4H+uO$bSNP8Df0Z;BaT9cbTNK^CyDP3mR\WEppxM.LJ,VCyfdsPK=>_p*RBA.WπU"WXo&5dkkP#rZy9rD.e-**&?'x(up%&'9%%9%%%%-%UDeRF4+/66?4.%%c_%%%.%πU"%%%%%%%%&%%E%%%%%%%%&&mjj%qSgf%xup&%'9%9%%%%-X%</ERFR]>*nF&%(%UπU";%%%/%%%%%%%%%%%E#%%%f%4%%l#wfk'%VSif%yup&%'9%9%%%%-C%rHR^FcyS(πU"hy)%+%P.%%%.%%%%%%%%%&%E%%%%[#6%%&%mjjq.Sy'y%up&'%9%9%%%%-%.oWGπU"F:J#q(%y%%%&O&%%%.%%%%%%%%%%%E%%%%,;%%%mf.uu(S%gnsu%p&'9%%9%%%%πU"-%<CNEFG*AfO9%%%%[%%%%0%%%%%%%%%&%%E%%(%Q;%%%utn%syjw%Sgns%up&'πU"%9%9%%%%-%.ANEF0bMSq%9%%%%[%%%%1%%%%%%%%%&%E%7%%8;%%%ut%nsyj%wWπU"Sg%nsup%&'9%%9%%%%-%rWJGF:Z1JO5%.%%O&%%%0%%%%%%%%%%%%E%%%'v;%%%πU"zsmf.uu(S%gnsu%p&'9%%9%%%%-%M_1JF1nK%qX%)%%i%i%%-%%%%%%%%%%%%E%πU"%(%[<%%%rfn%sSgn%sup&%'9%9%%%%-F%J6R7F=A5%z\(%(%>,%%%0%%%%%%%%%πU"%%E#%%%$%A%%u%hjsy%jwSg%fxup%&'9%%9%%%.-%/DnRFsd;rGv%%%%E&%%%/%πU"%%%%%%%%&%%E%%%'jD%%%wjfi%rjSy&'yup%&'9%%9%%%.-%jG8RFeN:oDb,%%%πU"\>%%%0%%%%%%%%%&%%E%%%%;F%%%lnkW%gnsS%gfxu%p&'9%%9%%[%-%($'HFiRπU"Kz(X[*%%'%1%%.%%%%%%%%%&%%E%%%%MN%(%&mj%jqSu(z)up%&'9%%9%%%#-%-πU"1&JF)e?x-q/.%%Q1%%%-%%%%%%%%%%%%E%%%'QS%%%rfns%Slnk%up*+%%%%%%2πU"%2%'O'%%'o^%%%%%πEND SUBπV2πCLOSE:IF S=165AND B&=Z&THEN?" :) Ok!"ELSE?" :( Bad!πSUB U(A$):FOR A=1TO LEN(A$):C=ASC(MID$(A$,A))-37:IF C<0THEN C=91+C*32πIF K<4THEN K=C+243ELSE?#1,CHR$(C+(K MOD 3)*86);:K=K\3:B&=B&+1πS=(S+C)AND 255:NEXT:LOCATE,1:?STRING$(B&*50\Z&,219);:END SUBπDaniel Kalna                   YAHTZEE                        comp.lang.basic.misc           11-24-96 (04:32)       QB, PDS                217 14270    YAHTZEE.BAS DEFINT A-Z:DIM SHARED K,S,B&,Z&:V1 'Created by PostIt! 7.2πSUB V1:OPEN "O",1,"YAHTZEE.ZIP",4^6:Z&=10432:?STRING$(50,177);πU"%up()%9%%%.-%PM/RF]]&ZhvFI%%3_%%%0%.%%(f.my)j%jSgfjxfLTS=#BacY4πU"&xIhA)6am/n4Z'5B%ARO;tkQAqE.OC*,0tgXJ_j9nM[FNDBB8Z=/km_#XC?Z*EkπU"Pvk&iA*4O1r;*CBE%rg/1z5iM3333=i]N(TP>nv7S),hK1]lInM-.f<<E(&QXw)πU"NorgG7\*cefHg(2GkW8^bZUjcMI8f<GVNJ*)7iV=YQSU.>*\Vx(rxgq#4g%fThyπU"Jmh_[5(0F,N4V8>36O8u3UFj;X>wOBXkX^DSUoM=f*G[4?tQqK(vl*[MBLobabDπU"8A6JI^ho*T6roM8(LhaNtW/GvbI,g1[StAoglPZ]##5s6Hq]t'HcD<&fj,X?e4dπU";/WJ,u;n:?ZM.#h?A$PK5Pckl+sO&wU^MF$aFqB(,dY\q$I3whr^\#w4iNbsuFOπU"?I5>efGL7;&:P>2l)z&gaL+LiFg)arP)jH8/;xElJ9h3B'4_x*t7W*Gl)mj2RW^πU"\[j(3hu0TNfquPnNhoYhDZrnk*#)\)KN*-M\KOT.G#hG,Ys+Z*d*8K&%f%M\5guπU",xqCP]#<hrZ<-\GxFRf'dGraGw(Wj5Rh3df]h31UinlfPVzmN0VoRGMQ,zZT)nUπU"J<[;z,00?RLBBU#M<K;8m-LIc?:Mf4l)wM6=,7tNLigDCJFbNs=?kkjHnv4LY-7πU"Q;H$dR0=0YD7mnld6hgI+HulN[**;B[<)zDiW(Ye[^2DLwalG8;84jJjTfD/082πU"NIYg9a,io;v?Y2\0Y>OBm_WlL-fKwUu.b\>siuqn)cD\P1?66IY.+-J'>6mAN_0πU"4i?'r4/c\TTU/jHeJkLBd*HcMo<-j';$^['j^ai]v0I**I#U(zhn<GQEe>GoEh;πU"MTSWR*8-&8el8N9^sH)[Ym]MiolIJ[[>=n&OMETb,g-Wf#(m(y:-HJF=11.(m*zπU"0GOSzGXn77W$G3&=XSn9MY%%O&nSexCjh:-1oNE7EW/*^qzJq$EuE0juNvf[gd&πU"I0ez\sMgLSpC%tgO833_/S35_]O:t)*vcxIB.Z&q6IP#6UjWrE6KoQUnNNJ$CJ9πU"Y=jh*D[Dq+q:,0B6g08.6/#w4zh9tT.y3#,GTAtsc;1hYn:bwGN_sR2.pu\D*D%πU"t/#I]21b5g9V#B8(M-?Wyj)K<#fhLV)u564XnA%S5A%jJx$/=f\Z?.s*DNSNq>)πU"iT^hpv&9CjVo.+DpwM)#AB3qod;ZUuaoq-Nh,3i>7QNn$MridSSe1R+fd7I7s7<πU"0F9s%X5kaC)WSsBP'V<fqz*Q'JWB0Wj^Uo2)kBdIV(:OYbUV%66#EB5B?dlJ1Z*πU":em*Onv>Ki-z-(I+,AN[c[8NOtUHX#kF0vUMbtjE[%lwQTLb$T4U/-1_u+uNFl4πU"#[qbNX4eIID([HTKzb:G+46<G8kO4\Jh+j]g%O%;J\6&g([z;BsCxcCqeiyaoS)πU"^HQp,q\+sy5X4_0d5kkBE7tDP:JG2r?Wc\p9[f]rj^SykE4)\yPF&%]S.G8[R>/πU"GXI_TAAZ])mjuW1?6VoAcZ#R$A<xaxb63pcrdP=0%1q=rg(KrAncVj_3j(DrgU+πU"Q'Oay;y9R8i.tdcE*9EXtD-R'n170a:X&d*N?Gq5A+RrpMeB0jNbJdC$(:1RiSIπU"]R?eS6=k7*mx78C$=Y39r9$7-u1,8XDqZ?WX,=-6*$1jC5PP2%y8(VzkGX\;jCmπU"W?:b9M2UuK[&Hikr1Tq*_?%c%x-G*OS)PJ#]$gr5I8-l*0*;IX-5#>1=^6H(4)gπU"xJDUBG$#j-l(87fJ$\rnV;)'0[iD2#2el6+D[u%=q\#gzoRrB[j]7i<8-:k7;,zπU"Tm7YT)=X1J;Dj.cB95B^UW/\(RmTRWp.4^7w*8^e\-&2]<2NNN0dr$-Wsg5bo(QπU"a\=kJMEx=W_)u*:?]Qgf0NwC)aaX06<wWanjG)2Ss:#L-fgSqlltH?,A)iVjldaπU"5n4Z;n2obqlt<fyBGq2'('<(h#lLpDLF2LhCurouni&8t/u%='<o1la.JfG]r=JπU"NjoY(gK4R8y?_U6KEc75J6&8=K-)1Zr<D'EH><zg#/DT(5dnIu*U9c9kW>sj_aYπU"L0\79xSN%8Or'8a4($iG3M,WrA5%ZeFuL\2*=_$?o]=b]7Ucftk%x$lRN>A*#;xπU"#RZhy)AqA$9nh&0msR)P)QH)aASw#SNu-=5N?-UN)H#494[yp%1n[D)rB-*W=8%πU"V1zGt+Sq0ZWaM3RI>Iw+V=/2T<4Zc+u/pdTM.TUF8Ju&[f\4Zr^E?l'78+iF.ahπU"(Je9S*U1;?e\Y?65\-9)*Pi#?_fo__:QsiPJ>Mei6G&ticq^>'4-+7v7VQb9B+TπU"G6m^WsmxzSWh+7d&R9*W5W)ktDM=wWNOffoa;ODWH./?t#65q]f2L:kZOIU];YeπU"1.I^oZ+YYfT=.k,5a=kgnkB-TN8<)8j8^wiPWDaE+<5Xl8XBn>Sgh+fDnit51i?πU"kxHuex^o9_SJJ^i*SLH3f2#rw62%IL[Spe$D1&US:q+>6:'AQ?=GDa^kJ>(Tfw2πU"EU8d?9\Ga#12u4/hSAlpTBpE]VPg%7:H,gV*J.W3pS(-&B-eWgl2]$pIJAOl?O)πU"')Pf\]W1'e9EFlFu=I(Z8zid:g#G.MN(G6^NkJCTadF[^R'I,iTzQ/3(^_ZlQ0AπU"^zXY%WQu9]WR9*_&74sbGe^#_dL=g1hT?nK39i?QNHa-9Ip>-#t2&$7h_uj.3THπU"zZnWD,glWy?f=%f.BTjbt(MHHwd87M7]FTI40FN7I?w$eN^8/YnRwI13dK;s:.%πU"JQv#>OGHBBvk,/G9HCjOJK=<Tf3;],GY^4&\sCJK?yLBuo760;s-J:-jK)%DJJ2πU"QskyD>Tij4$jE9fOf>IY*'+zw/zPxwIVSTu,g-<YFv,W,)GQJpc+M?e0:7-0URLπU".2uk9%BXc5pp>Q,7l'-_L+9)9>]EHj2THfFB9FFw98\Sxh](L1+N7EEIb3Kesy=πU"^WXF(MG_S'A2[WpRBG40*IISA)A$C8<J_jZ*;Zs7dB)>nQ)3V[HJy4&lBR=4le/πU"VcUe.0nlNbPB=Efh2V%;%PrCAmo+ZDNqts?2W'h:7<Un:w#Ztp5Mgey0-C3Vy'0πU"JAe_fE(=b*?=f/kog^;E[Pm/tgTlbq$J5s+T'htRU(mRSiPj1-wyQ$pbk99atP1πU")\^x%'a-4,pL.$PBD*uVr2+VKI60h1qfUP-+cEAGjp3h*kT5A0&ZpnN)TZUmWQQπU".imT;J[$Fj\x<1.?a:Ik)v2S9XA)9W4mQUFu,^<AhC;Udj>n6?=qPnMCRA[m4oJπU"xXF_##[=%DQNw*0+v;V#=DH(VX1kd\yn8;'b>Zm(gtzlPxTief%RtA%bVQSAl3QπU"R(:yL?u%<M<NIWIWds_D#s%#WJLVkIpnB1GA\Bs]%>])3Kcb2aNBG9:JqF4M+mgπU"hLu</%:j$.?[nHb5RL/%Yl9SHYkQ.%lD5pq51)%lpYm,X?3JS]40UD<^l#TB8T#πU"\-2+(uUZiNQJJzM6xN0&F<%<aOg1vPCO[K9rfF&&]NOR#XG^Qa)w4.5/&[iAhH]πU"kct[Uwm5<YU5QM?\b\I+<.A:q>i4edtY;nK;xAb*?sd&LYX:E,ai]gtW^kzEGs>πU"Pq1PlZqQS%h(YI3Bn-L-wgSnY%YBO]]oSm^O.M-i[)+jup\q^?<EnBR<3H?Wai:πU"G1mhmPa?bt[I?)pJ./r,;R4/&d)jZrr^It6\;Bd*)9+e.+ga/<?RG2RG2_qN(e6πU"FD,MtYKk>&tKvl7R%vgp50;b7^0J1^El8[C\v#nz\,)K+0d%,a*_rab<1#7tQ_WπU"0_awVAXmrm4ER,S#71eC;z,I:/A==\&DX(aNjX6<fBW7,dm7v)0ahfb8gaAYj2wπU"/jC,jXUr,P3&n:%Nf_fD9:g/M*C:CUNuSzxnOA[T9ak$^8A'7_6hhVc5?qt,'gKπU"Pte40vm(I43)<2sSh((<8/exG'If+PzBcv'cGZX0^H8ftfHwSl2>j=6HQ<2[[\]πU"9WW;P*N2KlcG#9+=afFm62jxFpN5v(aOyp^_Ypho=)3FLhEX*tapz4Ck(u3Rc4CπU"#OkA2gk8f_.h1<DeeSN234xiCq_rMfHfeJ\)25Y%+4_&ajuk[[t)=4Z0;n#)_8PπU"\d6&#pF=/N<Ka>1<3wnMGqErXr_6?r>+#^E/$jeG^1_we11.Audth?*:Q0US=E_πU"f+b&Gw5mnI>\e:mQ(_3\NP3EA05KXHum6CfS?;btVUjX#mx?0wA#*A?qqn'wTMLπU"WMp(oGF*1ifqwADh[t6B1erKCg_&qL&Nm_'b'a>NE;/mL?/3)#CH*4lM)JT9geeπU"E=XjiyZl_.?LkShP08IcsCVB;2$'bCcCap#S/=ntrlON4(DP2d)\)\ROD1^FDsYπU"SVXE^hsh^P,VH<H6k9dNcnBEd3rmc)ZB3E86LbB#u.UgS(LZFOk)6Zb+YAGK>XGπU"\0pFt2;-'Jit;-QTKWf0?jaVGnPp06T4</WKX;b4,C6QLFu-1xgB)A>p]r5dQ-KπU",VaL-mA+r90$Q%-)c_WSx/NLcHQRrMTtMctHbjiqk+;duE87QgRO,t%i?V5Y+h,πU"uE8qFgRQt1Q\pyWldI>2N^(Y6kmlx*EG9hV;dqT\R<wGE*;.4Ob\z'#'(RuP9ogπU"pCUZ2T.yNVsAG$ZRrwgm#\qd[k2sFF5R=HUR&yv]8ag_aanK-T%+[%Bo%XDnyA_πU"$#aKV(_igPfv#$L4D2RFRRh6qZCWESxy8/F-*ANHCEj&^UR1\82hQL8;[#n<a&pπU"KQa:-Ih-3Z7E0LgWoq=NYGJj2%WbpWQ,*f4)A1=#C?ualJ&]LiA5mW&XaID4&+WπU"6I,GA%m:3e3H4_B[C#bHg\FXWG[8**cH/iu>=j2,0fiMS23*-IjjLkZ8bS1ie[aπU"E\iMD?_B^QTU?l/_SwZn/qTnCI>k(UerO]c1O+.U88kSjRS$=^6*z3VauQWUS^+πU"\lU_d9Y?;)Yi3i_Nuiq4>PSZV0/:d.q+)YE#Us(VndLl=+OUm^:/(Y2JB]]_I(#πU"[F-38&i[%+4kWGSXjiK?DauE[xsYdgy*x88W.j),X#mg+vKf4^Ha-RJ=*D/'HFBπU"5e&,paVHmS%AhXj-j=7LOHOq$G6+>xcUVm/J]]kF7^w^U-4%Ndr6muM;)AB_(W2πU",JTI6C%0_Lz<qzj4tG<-Kj(=06JZtRB5td^P(>.x;jP0mOteXI,L-q;<nmtC8w^πU"JrG1?O?UKuZiBRbPj1HKX^bx%P(w7i=*C7N<6u,hB->STJ6C?W2BpEuGkiLu,i/πU"](cFOc_hd.i:nz<TQ)U$U:UT=T[KHGg'3rC\/s'CJFC]YW8*w?mMht&D:+XjeuIπU"]NC'-:KoaeP1;FnQD4qv[=3nejm+dRiB>QDH*iUv%<ch%v7h,A/lpA2k$hZe*R3πU"s4<]TZ2J:gS)L0?:?xTQ(C:>G6S$ROoLs*R1KDbbJ6.nI$;6PZ<,dHL#_MX(RRzπU"q[-*S.&dp5_csqB_0:D*IstF\E/R.H,(=iRjSe^^)BSE9EW:^6Cxe\6iLTBQmK2πU")'-(6$A\:XROPX6<D;x^t%->CC9r;7-uo<dNj3/YHBtb/?n9biXKP(Hl.)a?S&mπU")q.KP9=QiuHkw5In>y+H>mm3uAqBYK,lUOYEYmM/f]bHoA&mzG[M(=1Z8bwLLp)πU"f4,RPP&l]r6Q^RnsSE+Lh*Q^8lM2$4BHJh-s1deN%,gMHKFWT/$3dYR74Ujv<_bπU"H1C3XR;^(2NSa&/?DZh3Z+dZE]76F#hI/+l0cnG5JBYhIYp$_Jm(6;BdOau:__mπU"bG1G(N+W-3JR)Wn=Eg^M3]'?xobI]gfk*b8P#KluXi.5quFPKmKn.4H7Kk(c_/nπU"cK$%7xf6]V)dj4H73f$33iE(u'IN)r#3<a^3,QT0#swd7EiN1P-KJt\sa=C<;J*πU"zSTD8rFLYwCmn/DB.w9x)FgBo<nVRVgtiS<S9c[](,;e6#CYXbz\10^b+G-b(=-πU";7dciuH'ql3,dG5wZQXTDH.Ka?%qVBGGd^DSlTIl*c8bnuXr2b(g_Vcn7V,/7LBπU"&AvSGt_pwlXg^,_<XF.efskPm%Vk5<1$_#3uhn]5t8FMBp1=,OaWJ5/-4n+=%2]πU"AOIuV[8SfeJ*p]CN/Sp\A;B+X$C)b,+99$,=+/&wF-u/lT>QkoBDE<^qtL_msH'πU"WUs<.x#cD/8N_<<MUPVA+8&1ig)8gk[eXY\SW+$>&B7G:zy&BKCGF2+Mvjb\TLZπU"lhK>no^fh8nSG&rS=F6j)S,-Spgq6\2V^0W$M,bc>qQqTk#gN6:HA>?U_;7>_pjπU"wNhKRgXyoI:ftQsn:u)sbFANZ$8Om]rRhFN1VaRvT$v$C\(?_reK(>8VuHY6(x=πU"ti7,+RP6CbQ$uBEh$%FWAFOK<IiUVjs-q:'Y3Lpr\Iqd$VuOuZR'ogOju'+adn<πU"9)T:&2TMt_[I%ov_K+I>,/g/m+pIP>N:(Ivqr?KQ;8P_D:7dUMg%V);vn0=V;>GπU"3U4v&mH'<67*bMq&*-6V1'm]BM\mS;y=ryeJ)=CiWzlIQLhAfF^:$DV7C?h?=qEπU"W[i<Kpfcy/a7r(+d$=#&WdD-:#T+(PhKq(enfF3^6Ebo=J^]hr<T\gepR\92Hh4πU"JnKZREY$PiQxiX1I=\Ns#<ODRB)A4qQ7:oEa),&A(T$2?LGER#gjIXL'E^_^;BmπU"=/8jl*j%Vg:(0crqKSPIHOA$H7w$,7Os0TT,yehTP4h78\3mM4LOEqFo8%Sq4hIπU"5NqC1wL2)TBf_e(Y#Q#0RI[h=qusAr_eoszudGr-azeCDD9,I;'vr_6]T_FcbK*πU"ms$&8LqiDqbRhKZwXUhAk,]GCT.P_NMjZTQFQq'/;p\B)hC8jkbHni:HKKG;FEDπU"_ER.4u8uZY2m<0W4*/'k22yu\aKVqH>FcuI=4FNoBJ;u*ru)mY*(=XrsCh>g)2UπU";AK4Euy?<_1=RRg85dd)cI:=VV)r1s(q,or:YeK&T,((xIdn*c;5^l-t*mmMs1AπU"Kp5t,=4/%]l/'jEdFaY\]aN-Z1W3WAQX>$S0Hm]j9IQmLG6+d0eQ:QDOo6Z2%2$πU"^PP$4vin+=_17fXicK2&_JeOKP#oTIL*bikWI%:duE+D%H0:s&KENqpG:o8YM#\πU"l&zT9I/1J4x0Cjrf>vJXQTdB%4LIXu?ub.DK%Ffa#G4sP64\bMRC3lei$gC\B,wπU"]-U^P:V,CYEjln\3HWa[CkrJ8)l.aUVe7ZC&rJ=akl[h2?jIJQs7(=PCt4w,Fh=πU"bA^Oz%3N2xKYPE2<MhtLB4YVpq?;ewR>qCLd<M8k9$BLt,Ph0ChnCa9Y26H82jHπU"^i80kcCce.h8EIcjs,G.0TM)eQD%68ni=Zp?Z=l,/hazIA>]#\*YGW0$Uk_YuciπU"-hIBBVhH5Jv#$W(duu4d_PoV^gtmsfWL&A>rcH_AJktk;Z=&n*^Y>^iw20SlnM)πU"^JIHKd[aZsAwhhu8xw8YB7x-+nt].ib.2/5A8NG<fOmdtNxvprxflv?0x?JWvXmπU"6^$xmxXL_xNW^KxrYa7eQ,,1F'p/#uUVV.9ULK]<)W;0sG$o)c;Op?<eq0fGIqsπU"5D=RzpeltV6vd/:-f\m6A\UD>OxtC:8OT,rjbthGbAEeEWRtg?62[N8x8%gkm-5πU"(Qw:3-C3]e2=:izS?fB=%\8gT[*LDx/TOkAfkp1vj&1PL(dD83*Sc(SLDEh2VtVπU"PiV[+blUcHwXbJ/<$)Yx:1gt8-j2K]Is]p,TpS4\u-LS>f3our_.rjP)mt+]>6^πU"*s1rJaCuVdR#v'7v8f3OSIhG,j,Syj6p:%qsbi5YTS+YY&a'v762;nXL\<L.alhπU"%-G]$BTpx<M\IjY4au4fgVSuxGOR'&z%$w2W$lxVoe7x5SJ\w2FY#DMIY;[-f;iπU"J\1?)43.liFHuVLW83*iMhKD69\^0idoxG^x=K*YMhK)89\4gYVtC4W)S1S=Co2πU"lqqJ78^9j*uXiqGpc,?9u2VlmovHPcivMcrdiS;r^b(q<PJBcZ+*L=ybh(x#nU/πU">?:YbG+<D+KB39YaMj(Mjl0mYDohv'9uT2nN$$FBd91&l:eW:aK=+C>Ojbkts]TπU"S?HMPVHShYje:wC7qBrhky=c1O(8bqr[PO(8C2b^j&?TbdIZ%5vaExP1)Eq\:?tπU"I4ZTUot&Sv9*b)RPVp7b)XgJ_1dkweRe%nD4jq>oa>q&]kLX]$,G>GvuZ;DJ3CQπU"MliSaJXF;e[1JNpc,Xnc^]#bYa#81*'pkD/:)o2mFV8B$sew6nS4'at&wG3KJy)πU"p:-611o+fm;zse/5_/rwe)oe+THyBx#;nYf2.q440;%p.nMl/bCNf^v\q->HaQ?πU"XC6i%1a9,1HSu?,CiP)>GE:>-4=r(d>DpFod>49S4J]dJrK#NjQ8Db=N1:nrmpdπU"6p)^T)9*s_(kw=DaE>sC6bCo6qWau%N8<a%tIN'Ro_V\J0=LIc<EQ42Rlgd4cbXπU"5GFD,akQx4A<k5w^Sy6DZkzG#sS_DY0Y8e?%kkDs9gpSqOp\M9r_=ty_(Y#yu?,πU"AwY42xZ85QTOx2I6B+<D_)1##,#I.+pykP[qn'tZgpMB;Y/:>$:,I3PQ:^SI(3WπU"?Fr?YLHM>v+8F+uP8BX%#(qXlam?9bK=;=[g5Xa04QJ5J_Irh2%yaLT5gIpek,6πU"4)H1kw_q_G(^)aS,g;lbgp,A1LL4ThoRYTO%o:m+Cwl7WR7n8L5Mmo7[^7HK?GqπU"xK/mCy+I%,fq/wUfMwqP%(_k/np]'7bZIO[D_Fmo7Mf_da^OiFWR#B)mC5jd+>UπU"lJVMTLMc>JhDNmT>R#-l%HsxlaZIPIs3I&:JYp(Na;q7DY2n_vg$-*iMF[ngq&MπU"CvZ'+OWR;#4hxHx.r#Sd2Teo?$3=YlJ.t(&cJ\'Dxz[J\Gq5qzgap+yR7z?w+sLπU"lUE>r5TijQ2&,hNn*?Pake=c:_FpbVfX*468,iSU\Yn#4;_%TlgK<9>5sF,m_j5πU"FbIsV8:O<Ke-4iSa:mEjSW2XC0XoSJFQdOK,-JldHuEL\.5ptG8UL>f3i&djwV8πU"K:Y(h-VHQ.4av&lvnIwX-:k*5S$IYQq1+;c85,D,O\-T(ZN4kp<kNnY96:gkdYnπU"ZB6fT.S_j$NF^OYrHX9DLCeMY</VDPb\[d2jW\7]6b6eW9Y+C<0_JgS4i,*pR]+πU"BNDKZ5eccQrcGd0Nv*l,mF\*U#AIlU_ab1ES2neXBeqIl^6c,TEBk)(/$gQ_GF?πU"3'Fk;IRka[lW*s=3hcHF24(9djEln#E2x^5kU+xZoF0H;nHFvxWkk4iqr6a4AiJπU"JMOL$[A86MpE8sQ)$i<QM-a8$3.p%l/UJ^A9*4_fQC9-8$300R+KqkAS'VD7OFhπU"AmtX:MpuLi$NAw/B]&bY$;r^AHGs.ijp[l4DmpduTtx-61^6lS+$?Y:=jKNH0$.πU"FlvNnJWgN\7tfnMZ]IYJ4Ie^6XLBTTl.^TsQlB5Ow-'j0rYbb4+T_d;H^F4.t[lπU"]D_'JDc,$$RaCYR$\KlIBrXSH+GlaaCs$KR]FkXasGB;?=^vi/m^ln%CvOhB?=]πU"Iv[m^eBX^7frAkdqHcn$<\kLd+qJt7GNEOu^Mzb-GOwDZL>V(JKG7Nc$lEV$?f$πU"Ya+r8vg6r8SL$sHcm<H7p>Dq,7uZK<4nQ9lVbP8ukk3+yYR?)Y,^ZeTtjEl72z-πU"DMGj41K6EX<pdD5C44%4nw#O\NBZBU+zqr*<9R[K-ntap$*j\$EuxP,v0<KQR]_πU"2^$Um']LoW^s8v,*pDOWMLroF=0J0*0&0.p;(b'g4i]cRS:ElVNL,<PC_ktA-F2πU"K.e,AI3^YCsOnbS]&(0c-6fj3GCk>$ucrD7bhY$]14bCOza/*UUKsJiV?w]68)cπU"$RU#kqUbh#R2LR*d/v>o_9<'EZrjt2_&1C(8]KM7F;aJe8bHHN/d07oirV6idFaπU"R9KvUBL;(^kuhDSLD/^BYH,X^mk#;.tn/dHh^Om]')1^idjmHLOC-*eAQOaD%]QπU"NC1$:x=^oPr:V(oX46iI1tpx&,\tHV<#Cb<<R$8^#_z)&odcBo25MGU?ncS[F'DπU"\KR2r0:Z)[kn,.be9fL;;HaQy/Sq5>%9EOBF;Q\d#CXRE1-bGL7CEvaBI9Mu&HiπU"jLGX/s6m]9?q6t3k9K3;^biI+kQ27cjXqJ/RuX_W3P)%+z5v4g9EG7o7)^_Bh?bπU"[it7g8s?.])adj/B5t.]tdLw(c^$IxOZHKl-sYj2#g.*4_CL>]Y5_<D-Sl,Cb=lπU"-)RzJ55]:,6UOtYMg16s_-8,^lPk8Rge2%p629jc(XD5N'I:c+U&d/D^Vh8YY+3πU"DFW]feUH'o\o)IZ-G)-np$ntXHox_^-(Z:o>Aa\*fkV<m.GK?j#I3kYG2nVksLAπU"41R(;Y9YVJKe$$Km[kHeX)BWk^5o$3'Y6c3aAdLeVsS4qe&r<CPdsBQ\'Blgx6^πU"Fl+>>L'l)cV]U]lht_)<W:2_^,TwpPl[:n/,px'+8kZ>I=a#hie>Xoi1>0l1i$dπU")b[_^J366Xrl)X7r>>BZ5svfT)?<bKuAbKNumSiwWo1.W.?U\[?pPT+nk?jP,[8πU";;CZ\c>6WE#\RK(]8N$gE9ciP0k>9kP*>H>gh))G_$g2#PFh;_;sPf91h%VMP+nπU"([qd^^HZrfd*H.?qd[F7xHU_5&4:%cWlf0t&KD3S?Xuj$>Kp(oc_muHwmq+NNDFπU"V?+%.ro5RB9MZ*:FH]ObMd]J?Vp8A:OrVlQQGGlM<)<[vXn*#rn3#GDOB[[)Yc3πU":v3;qZesFI%0/eHl2J5epKYPq-KR==6w)^fiZ5sf<g=6Hj>0]xX>UhKGwegWcssπU"'x&up%()9%%%%-%/dw'Fs]Fu7&R&%%%]G%%%-%%%%inhj%Sify<fe6v'<e=ii^#πU"?ZDdoKk8Zs13#cg,[.qNCe+.1(oIeJ+GbP#gScV9)Upe1R[FxY\>oOdp\lT2,,,πU":7b,Y#=lAI%?qb7V$KC\Wl>,DPe-bjVDmVLhE9$9FUR-gq(]A25g;ACp3;g^*5&πU"R\[N#/NA5g;R);A99\QE/],7S$_&*<xXTv#[DTh-bjNdOPbFYr?5^$eZfs.KAZ3πU"Dh;++5k>iXafcceKJ;/3HOQ*0XU>+cNG#A1GqUV.ZA][F6K<FM<G(q<k.ruNO>HπU"MZ6f(gD0SB0GeM34U;3L=Eh0U$;3*A#t#=06+5(I;z\,[o8cw5:SVJ$fT$J&tlfπU"pek*86p9J$T$ft_lVFl-60f+X_p#&Rkg0e)/4,voHqn%%eviMiSBpW?n%=[G$R/πU"5igqWlz&Z]XZbtKD^i*D;780K+Zlr&HOV6:K*aAMH6J6fXk6tabtCguRWRWuRWRπU"WZR8bRoEcAe;Rdfvq4Mp-slWRd-eeTu%p()9%%%%-F%UMR(F<L^*S/(%+%Z+%%%πU"0%%(%(fm(y)jj.Sy'yK&z,>BTk5K=\YxUD><&hH.VIw9lyrPU6i/Ei%qDI8f:27πU"m4_W+ip0ir-nV$oSEw8UR5Eb=hFEE_D=HdNQ8uCD:*KxlLB#AElo_V<bR<(E5l=πU"ebY=KCiU?fK$b#Qu#;'\1IY6Q[&E+]YGDPiA%a1Hy0WUO[*r56D']vJjkSExb&]πU">rOQ6DOS.'CV\&FsImlL_E$qI6\RX=>CS6W:C64Iif>8FQbDS+?UKxD>&9c<TzcπU"Z.wU=()4[Dd[E1KO*f*2*P=HD40cM/rdC9cgHOBuyj1?)&Q(^aR1[G*E2zkoN=lπU"X[Nh[4Z.)GCHK;(Bp&f[/4\UGJ##C+<>:KHaR5R*n75ZMK]_NSuUjm/MEWY#0myπU"B[6-$k2w8Fne0'?IQUGXjOTbK[OEdofer%24M,NyB%;b(M]io(*>QuIN9\;dZeVπU"8X:a:&$0L>z0<R\+8T=?nfapib.ojX$1_6R<aesV:<G\oJl?+VrOQ/:3.Q]#'QEπU"81:*VYiVyrN9&Cq?AoljPf;WAw//id'Hs7X<(+<Xan&xdhZXlL#L%=Xl1I)Cv4KπU"CN3atEd=J0<+V0Uu?%T5^2PXLuYl\'#9ky0N*_=Sile7j6B%os*O1HI_.PRD&;\πU"S(_E:c$wWf+CV\%I;\*tL:D[ENgOe4^;#5X>.Rl,FzPKBN$v<8:f_a^^VoGJDZ)πU"LdFqdmwYcC5WWZ/Mr[E)B+Nl>\9FD?]6Xo8G4ThBfxv_:GjKHV^.KTdu4>nbur[πU"pcMKMv3_9#4eY2AD'\z1F\uawu\db?Y-S*AMgp;tjx*BQWZ*MrK<udknDjg[P5qπU"pd^RZ]QFn-Dvj.i.6EN10k6/kYq,EkbAaX_36W;Utv#^>v##=p^%NDNeJte\h9bπU"?IwMR4pW\Y]5\/9z?'WMV8H3,<R%DFu_\?W]eX7g4(GT]$S158lt=Qbd:TO;p7;πU"j[<EpE+ALjm8=GSv9pRS*G&32cxohy%%n$C00KWjCYANs37mLbRRiU;[chtPOBfπU"++C\A>EP>-RX^o88#x=Qr<Gp'fRBo596HtY$$yT<)eNTp/go$FuCW^[W[y3kN$\πU"d#Z]#By_)+I\0k$oV,YnY5734w(%up()%9%%%%-%mL\RFL;:1=o%%%%>&%%%/%%πU"%%wj%firj.Sy'y8ZqEM&xorz=uIit[SvU-o-YL]f^w?E9DTBm%Rw-M=rCBqq%?BπU"H=rEEx7mtEr.zmyyn?nEDaqFvi=sEBp7)Ooy7msEx%mozM[orqG%mrvmaQ*wiamπU"FnF*D?MR7nQCnBP(wIexNt58+e^c?rrR/,8rj/*2d/58*e_;mPI$$55_tPs9$$$πEND SUBπSUB V2πU":Nc]P(%49WBlowZBkwpCI97BA49KYw1xDO+49$f;^Jv'N)vOyIN$cus,uaNMp%4πU"9_C,tKu)ODl__ISi263cTiJSMs43_sQRHFE(aE2XJhCe*7bBkppO.oXZ:F7lw_pπU"Br#D%*%up%&'9%%9%%%.-%PM/RF]]&ZhvFI%%3_%%%0%%%%%%%%%&%%E%%%%%%%πU"%&(fmy&)jjS%gfxu%p&'9%%9%%#%-%d(w'F]ZFu7R%&%%]%G%%-%%%%%%%%%%%%πU"E%%(%IF%%%inh%jSif%yup&%'9%9%%%%-F%UMR(F<L^*S/(%+%Z+%%%0%%%%%%%πU"%%&%E%%%%H#H%%(#fmy)%jjSy&'yup%&'9%%9%%%%-%mL\RFL;:1=o%%%%>&%%%πU"/%%%%%%%%%&%%E%%%'%K%%%wjfi%rjSy&'yup%*+%%%%%)%7)%Y%7%%CL%%%%%πEND SUBπV2πCLOSE:IF S=73AND B&=Z&THEN?" :) Ok!"ELSE?" :( Bad!πSUB U(A$):FOR A=1TO LEN(A$):C=ASC(MID$(A$,A))-37:IF C<0THEN C=91+C*32πIF K<4THEN K=C+243ELSE?#1,CHR$(C+(K MOD 3)*86);:K=K\3:B&=B&+1πS=(S+C)AND 255:NEXT:LOCATE,1:?STRING$(B&*50\Z&,219);:END SUBπAmit Jain                      MINE AVOIDER                   Commander_Omlette@prodigy.com  11-28-96 (13:35)       QB, QBasic, PDS        282  8125     MINAVOID.BASDECLARE SUB ending ()πDECLARE SUB intro ()πDECLARE SUB playgame ()πDECLARE SUB instructions ()πDECLARE SUB createmines ()πDECLARE SUB erasetank (X AS INTEGER, y AS INTEGER)    'Declare proceduresπDECLARE SUB drawtank (X AS INTEGER, y AS INTEGER)ππDIM SHARED minefield(1 TO 30, 1 TO 23) AS INTEGER     'mine locationsπDIM a$ππintroπinstructionsππDOπ  playgameπ  CLSπ  INPUT "Do you want to play again? (y/n) "; a$π  IF UCASE$(LEFT$(a$, 1)) <> "Y" THEN EXIT DOπLOOPππendingπSYSTEMππSUB createminesπ π  DIM loopa AS INTEGERπ  DIM bombx AS INTEGERπ  DIM bomby AS INTEGERπ  DIM minepoint AS INTEGERπ  DIM screenpoint AS INTEGERπ π  CONST nummines = 200               'Change to make harderππ  RANDOMIZE TIMERππ  FOR loopx = 1 TO 30π    FOR loopy = 1 TO 23π      minefield(loopx, loopy) = 0π    NEXT loopyπ  NEXT loopxπ π  FOR loopa = 1 TO numminesπ    DOπ      bombx = INT(RND * 29 + 1)π      bomby = INT(RND * 22 + 1)π      minepoint = minefield(bombx, bomby)π      screenpoint = SCREEN(bomby, bombx) 'same crap as LOCATEπ    LOOP UNTIL ((screenpoint <> 35) AND (screenpoint <> 177)) AND (minepoint = 0) AND ((bombx <> 2) AND (bomby <> 2))π    minefield(bombx, bomby) = 1π    'LOCATE bomby, bombx   'uncomment to show bomb locationsπ    'PRINT "$"π  NEXT loopaππEND SUBππSUB drawtank (X AS INTEGER, y AS INTEGER)π  LOCATE y, X                     'Things are slightly reversed whenπ  PRINT CHR$(1)                   'you draw it in text modeπEND SUBππSUB endingππCLSπPRINT "1996 OmletteSoft is:"πPRINT "* Amit Jain (Omlette) - President"πPRINT "* Andre Rivera (Silky) - Programmer"πPRINT "* Chirag Mehta (Huge@$$) - We're sure he does something"πPRINT "* Ankit Shah (Speedy) - Beta Tester"πPRINT "* Rodrigo Salcedo (Julian Taim)  - Beta tester"πPRINT "* Jose Lopez (DJ 3-D IBM Mac Daddy) - Animation"πPRINTπPRINT "Too many people to give thanks to:"πPRINT "* God"πPRINT "* Our parents"πPRINT "* Many others.  Big ups to everyone.  Your names are on the web site."πPRINTπPRINT "Contact OmletteSoft at:"πPRINT "* http://pages.prodigy.com/omlettesoft/"πPRINT "* ajain@cnct.com"πPRINT "* WLKY80A@prodigy.com"ππSLEEPπCLSππPRINT "  Mine Avoider is based on the Minehunt game featured in HP's Graphing"πPRINT "Calculators.  The QBasic code contained here is complete freeware.  We"πPRINT "hope you'll learn something from it, do something cooler, and show it"πPRINT "to us.  I hate saying this but, here goes:  I, AMIT JAIN, THE AUTHOR"πPRINT "OF THIS PROGRAM, AM IN NO WAY RESPONSIBLE FOR ANY DAMAGE IT DOES TO"πPRINT "YOU, YOUR COMPUTER, YOUR PETS, YOUR SANITY, etc.  It probably won't"πPRINT "harm you so calm down.  There is no warrenty on this source code,"πPRINT "either implied or otherwise.  This program is Copyright (C) 1996 Amit"πPRINT "Jain."πPRINTπPRINT "                                 -X-COM-mander Omlette"πPRINT "                                 http://pages.prodigy.com/omlettesoft/"ππEND SUBππSUB erasetank (X AS INTEGER, y AS INTEGER)π  LOCATE y, X                     'Things are slightly reversed whenπ  PRINT " "                   'you draw it in text modeπEND SUBππSUB instructionsππ  CLSπ  PRINT "  Welcome to Mine Avoider!  The latest game from 1996 OmletteSoft."π  PRINT "You are in a little tank, represented by a"; CHR$(1); ".  The"π  PRINT "object of the game is to make it to your base, which is indicated by"π  PRINT "a "; CHR$(177); ".  You receive a point for every square you cross"π  PRINT "that doesn't contain a mine.  Step on one that does, and it's all"π  PRINT "over for you.  The number of mines you are near is indicated at the"π  PRINT "top right of your screen.  Use the NUMERIC KEYPAD to move around,"π  PRINT "or press ESC to quit.  Here's a little tip:  The topmost row and the"π  PRINT "leftmost column almost never have any mines in them.  Good luck"π  DO: LOOP UNTIL INKEY$ <> ""ππEND SUBππSUB introππDIM now AS SINGLEπDIM introy AS INTEGERππFOR introy = 1 TO 13π  LOCATE introy, 30π  PRINT "OmletteSoft Presents"π  now = TIMERπ  waittime = .1π  WHILE (TIMER - .1) < nowπ  WENDπ  IF introy <> 13 THEN CLSπNEXT introyπBEEPπCLSπLOCATE 13, 35πPRINT "Mine Avoider"πSLEEPππEND SUBππSUB playgameππ'Declare variablesπDIM loopx AS INTEGERπDIM loopy  AS INTEGER                          'loop countersπDIM tankx AS INTEGERπDIM tanky AS INTEGER                           'your locationπDIM basex AS INTEGERπDIM basey AS INTEGER                           'The base locationπDIM score AS INTEGERπDIM nearmines AS INTEGER                              'how many mines areπ                                                      'near youππCONST fieldwall$ = "##############################"  'to draw theπCONST fieldarea$ = "#████████████████████████████#"  'playing fieldππtankx = 2                                             'variablesπtanky = 2πbasex = 27πbasey = 21πscore = 0πnearmines = 0ππCLSπPRINT fieldwall$     'Draw the playing fieldπFOR loopx = 2 TO 22  'Initialize inside of playing fieldπ  PRINT fieldarea$πNEXT loopxπPRINT fieldwall$πLOCATE basey, basex        'Draw your home baseπPRINT CHR$(177)ππerasetank tankx, tanky     'Place everythingπdrawtank tankx, tankyπcreatemines                'Put the mines in their proper placesπLOCATE 1, 50               'Your initial scoreπPRINT "Score: "; scoreππDOππ  nearmines = 0            'Reset valueππ  FOR loopx = tankx - 1 TO tankx + 1π    FOR loopy = tanky - 1 TO tanky + 1π      IF minefield(loopx, loopy) = 1 THEN nearmines = nearmines + 1π    NEXT loopyπ  NEXT loopxππ  LOCATE 2, 50π  PRINT "You are near"; nearmines; "mines."ππ  SLEEPπ  KEY(10) OFFπ  erasetank tankx, tankyπ  a$ = INKEY$ππ  SELECT CASE a$            'Handle keyboard inputπ    CASE "8"                'upπ      IF SCREEN(tanky - 1, tankx) <> 35 THEN tanky = tanky - 1π    CASE "2"                'downπ      IF SCREEN(tanky + 1, tankx) <> 35 THEN tanky = tanky + 1π    CASE "4"                'leftπ      IF SCREEN(tanky, tankx - 1) <> 35 THEN tankx = tankx - 1π    CASE "6"                'rightπ      IF SCREEN(tanky, tankx + 1) <> 35 THEN tankx = tankx + 1π    CASE "9"                'up rightπ      IF SCREEN(tanky - 1, tankx + 1) <> 35 THENπ        tankx = tankx + 1π        tanky = tanky - 1π      END IFπ    CASE "7"                'up leftπ      IF SCREEN(tanky - 1, tankx - 1) <> 35 THENπ        tankx = tankx - 1π        tanky = tanky - 1π      END IFπ    CASE "1"                'down leftπ      IF SCREEN(tanky + 1, tankx - 1) <> 35 THENπ        tankx = tankx - 1π        tanky = tanky + 1π      END IFπ    CASE "3"                'down rightπ      IF SCREEN(tanky + 1, tankx + 1) <> 35 THENπ        tankx = tankx + 1π        tanky = tanky + 1π      END IFπ  END SELECTπ  KEY(10) ONππ  IF minefield(tankx, tanky) = 1 THEN 'Did you trip a mine?π    π    FOR loopx = 1 TO 30                    'Draw all the minesπ      FOR loopy = 1 TO 23π        IF minefield(loopx, loopy) = 1 THENπ          LOCATE loopy, loopxπ          PRINT "$"π        END IFπ      NEXT loopyπ    NEXT loopxπ   π    LOCATE tanky, tankx                     'print a dead tankπ    PRINT CHR$(2)π    LOCATE 2, 50π    PRINT "Fool!  You ran into a mine!!!"π    LOCATE 3, 50π    PRINT "Press any key to continue"π    SLEEPπ    EXIT SUBπ π  ELSEπ   π    IF SCREEN(tanky, tankx) = 219 THEN score = score + 1π π  END IFπ π  IF SCREEN(tanky, tankx) = 177 THEN  'Did you win?π    LOCATE tanky, tankxπ    PRINT CHR$(2)π    LOCATE 2, 50π    PRINT "You made it!!!               "π    LOCATE 3, 50π    PRINT "Congratulations!!!!!"π    LOCATE 4, 50π    PRINT "Press any key to continue"π    SLEEPπ    EXIT SUBπ  END IFππ  LOCATE 1, 50π  PRINT "Score: "; scoreπ  drawtank tankx, tankyππLOOP UNTIL a$ = CHR$(27)πCLSπPRINT "  YOU QUITTER!!  YOU COULD HAVE AT LEAST LOST!!!!!  HOW COULD YOU JUST"πPRINT "QUIT LIKE THAT?!?!?!?!  DON'T YOU HAVE ANY BACKBONE?!?!?!?!?!?!?"πPRINT "Press any key to continue"πSLEEPππEND SUBπBrent P. Newhall               JIGSAW PUZZLE GAME             comp.lang.basic.misc           12-01-96 (12:10)       QB, QBasic, PDS        372  12678    JIGSAW.BAS  ' Puzzler!π' A jigsaw puzzle game by Brent P. Newhall (BrentN@juno.com)π' Version 1.0.0π' This program is PUBLIC DOMAIN.  Copy it, add to it, give it away, distributeπ'   it however you like, just keep my credit and any others' credit in here.ππ' The purpose of this game is to have a simple jigsaw puzzle-like game thatπ'   can be played easily.  Extra puzzles can be added in the DrawPuzzle()π'   subroutine; just make sure to add them to the main menu and changeπ'   NUM.PUZZLES (everything else should adjust...).ππDEFINT A-ZπDECLARE SUB DrawPuzzle (puzzlenum AS INTEGER)πDIM puzzle(210, 25), correct(210, 25)πCONST NUM.PUZZLES = 8ππtotal = 625 ' Total number of elements per puzzleπquit = 0πDOπ  GOSUB MainMenuπ  GOSUB DoPuzzleπLOOP UNTIL quit > 0πENDππMainMenu:πDOπ  SCREEN 13: CLS ' 320x200x256π  PRINT : PRINTπ  PRINT TAB(16); "Puzzler!"π  LINE (110, 5)-(190, 34), 15, B ' Box around titleπ  LOCATE 7, 1π  PRINT "A --- Glass of Root Beer"π  PRINT "B --- Geometric Shapes"π  PRINT "C --- Roundabouts"π  PRINT "D --- Squares!!!"π  PRINT "E --- Blocks"π  PRINT "F --- Train Track"π  PRINT "G --- Chinese Junk"π  PRINT "H --- Numeral Two"π  PRINT "F1 -- Help"π  PRINT "F2 -- Quit"π  PRINT : PRINT : PRINT "Which puzzle do you want"π  PRINT "(hit [A] to [H])?";π  DOπ    DO: i$ = UCASE$(INKEY$): LOOP UNTIL i$ <> ""π  LOOP UNTIL (ASC(i$) > 64 AND ASC(i$) < 65 + NUM.PUZZLES) OR i$ = CHR$(0) + ";" OR i$ = CHR$(0) + "<"π  IF i$ = CHR$(0) + ";" THEN ' [F1]π    SCREEN 0: WIDTH 80 ' Normal text screenπ    PRINT "     Welcome to Puzzler!  In this game, you can choose any one of many fun"π    PRINT "puzzles to unscramble!  First, you must choose the puzzle from the main menu."π    PRINT "You will then be shown the completed puzzle (like the picture on the front of"π    PRINT "the box).  At this point, you can either hit [B] to return to the main menu"π    PRINT "and select a different puzzle, [ESC] to quit the game, or any other key to"π    PRINT "start unscrambling the puzzle.  The screen will blank for a bit; it will be"π    PRINT "scrambling the puzzle.  You'll then be shown a grid with all the puzzle"π    PRINT "pieces (scrambled)."π    PRINT "     A flashing box will indicate your cursor's position.  You can use the"π    PRINT "cursor keys to move the box around the grid.  If you hit [ENTER], you will"π    PRINT "select a piece to be moved.  It will stay where it is until you hit [ENTER]"π    PRINT "again, at which point both that piece and the one under the cursor will be"π    PRINT "swapped.  Thus, if you were to hit [ENTER], move the cursor to the right, and"π    PRINT "hit [ENTER] again, the piece under your cursor and the one you selected will"π    PRINT "switch places.  Once you select a piece, the grid around it will glow red."π    PRINT "Don't worry if this sounds confusing.  It will all be perfectly clear when you"π    PRINT "start playing the game."π    PRINT "     Anyway, if you ever get stuck, you can always hit [H] for a hint.  This"π    PRINT "will display the completed puzzle to one side of your scrambled one.  Hit any"π    PRINT "key to remove this display.  You can also hit [ESC] to quit the game."π    PRINT "     Oh, and one more thing.  Near the bottom of the screen, the number of"π    PRINT "seconds that have passed since you began the game will be shown.  The object of"π    PRINT "the game is to finish the puzzle with the least possible score, and time is"π    PRINT "factored in.  So watch that number!!";π    LOCATE 25, 50: PRINT "Hit any key to continue....";π    DO: LOOP UNTIL INKEY$ <> ""π    SCREEN 13π  ELSEIF i$ = CHR$(0) + "<" THEN ' [F2]π    quit = 1π  END IFπLOOP UNTIL (ASC(i$) > 64 AND ASC(i$) < 65 + NUM.PUZZLES) OR quit > 0' A-H is inputπRETURNππDoPuzzle:πIF quit = 0 THENπ  GOSUB DrawAndScramblePuzzleπ  DOπ    GOSUB DoStuff ' Main processing loopπ  LOOP UNTIL quit > 0π  SELECT CASE quitπ    CASE 1π      SCREEN 2: SCREEN 0π      PRINT "Cheater!"π    CASE 2 ' You won!π      LINE (0, 0)-(100, 100), 0, BFπ      count = 0π      FOR j = 0 TO 80 STEP 20 ' Display correct imageπ        FOR i = 0 TO 80 STEP 20π          count = count + 1π          PUT (i, j), correct(1, count)π        NEXT iπ      NEXT jπ      LOCATE 23, 1: PRINT "You did it!";π      LOCATE 24, 1: PRINT "Congrats on beating puzzle"; STR$(puzzlenum); "!!";π      quit = 0π  END SELECTπ  score = score + TheTime * 15 ' Calculate new scoreπ  LOCATE 25, 1: PRINT "Your score is"; STR$(score); ".";π  IF quit <> 1 THEN ' Unless user wants to exit, pauseπ    DO: LOOP UNTIL INKEY$ <> ""π  END IFπEND IFπRETURNππDrawAndScramblePuzzle:πpuzzlenum = ASC(i$) - 64 ' Get actual puzzle number from ASCII codeπCLSπLOCATE 25, 1: PRINT "One moment, drawing...";πRANDOMIZE TIMERπDrawPuzzle puzzlenumπcount = 0πFOR j = 0 TO 80 STEP 20 ' Actually GET the puzzleπ  FOR i = 0 TO 80 STEP 20π    count = count + 1π    GET (i, j)-(i + 19, j + 19), puzzle(1, count)π    GET (i, j)-(i + 19, j + 19), correct(1, count)π  NEXT iπNEXT jπLINE (0, 0)-(100, 100), 23, BπLOCATE 24, 1: PRINT "Here's the completed puzzle;";πLOCATE 25, 1: PRINT "hit any key to begin...";πDO: i$ = UCASE$(INKEY$): LOOP UNTIL i$ <> ""πGoAhead = 0πIF i$ = CHR$(27) THEN ' [ESC]π  quit = 1πELSEπ  CLSπ  LOCATE 25, 1: PRINT "One moment, scrambling...";π  FOR i = 1 TO 25π    IF RND > .5 THEN ' Half the time, swap with a random pieceπ      rand = INT(RND * 25 + 1)π      FOR j = 1 TO 200 ' Swap the actual values in each graphicπ        hold = puzzle(j, i)π        puzzle(j, i) = puzzle(j, rand)π        puzzle(j, rand) = holdπ      NEXT jπ    END IFπ  NEXT iπ  CLS : TheTime = 0: GoodSoFar = 0π  posit = 1: x = 0: y = 0π  selected = 0π  count = 0π  FOR j = 0 TO 80 STEP 20 ' Display the scrambled puzzleπ    FOR i = 0 TO 80 STEP 20π      count = count + 1π      PUT (i, j), puzzle(1, count)π    NEXT iπ  NEXT jπEND IFπRETURNππDoStuff:πFOR j = 0 TO 80 STEP 20 ' Draw linesπ  FOR i = 0 TO 80 STEP 20π    LINE (i, j)-(i + 20, j + 20), 23, Bπ  NEXT iπNEXT jπIF selected > 0 THEN ' If something's selected, draw the red boxπ  LINE (selectx, selecty)-(selectx + 20, selecty + 20), 4, BπEND IFπDOπ  i$ = UCASE$(INKEY$)π  IF t$ <> TIME$ THEN ' Increment TheTime every secondπ    t$ = TIME$: TheTime = TheTime + 1π    LOCATE 24, 1: PRINT TheTime;π  END IFπ  IF t! <> TIMER THEN ' Toggle CursorColor every 1/18th of a secondπ    t! = TIMERπ    IF CursorColor = 15 THEN CursorColor = 8 ELSE CursorColor = 15π    LINE (x, y)-(x + 20, y + 20), CursorColor, Bπ  END IFπLOOP UNTIL i$ <> "" ' Pause until keyhitπIF i$ = "8" OR i$ = CHR$(0) + "H" THEN ' [8] or [UP]π  IF y > 0 THEN y = y - 20: posit = posit - 5πELSEIF i$ = "2" OR i$ = CHR$(0) + "P" THEN ' [2] or [DOWN]π  IF y < 80 THEN y = y + 20: posit = posit + 5πELSEIF i$ = "6" OR i$ = CHR$(0) + "M" THEN ' [6] or [RIGHT]π  IF x < 80 THEN x = x + 20: posit = posit + 1πELSEIF i$ = "4" OR i$ = CHR$(0) + "K" THEN ' [4] or [LEFT]π  IF x > 0 THEN x = x - 20: posit = posit - 1πELSEIF i$ = "H" THENπ  score = score + 100π  count = 0π  FOR j = 0 TO 80 STEP 20π    FOR i = 0 TO 80 STEP 20π      count = count + 1π      PUT (i + 150, j), correct(1, count)π    NEXT iπ  NEXT jπ  LINE (150, 0)-(250, 100), 23, Bπ  DOπ    i$ = INKEY$π    IF t$ <> TIME$ THENπ      t$ = TIME$: TheTime = TheTime + 1π      LOCATE 24, 1: PRINT TheTime;π    END IFπ    IF t! <> TIMER THENπ      t! = TIMERπ      IF cursor = 15 THEN cursor = 8 ELSE cursor = 15π      LINE (x, y)-(x + 20, y + 20), cursor, Bπ    END IFπ  LOOP UNTIL i$ <> ""π  LINE (150, 0)-(250, 100), 0, BFπELSEIF i$ = CHR$(27) THEN ' [ESC]π  quit = 1πELSEIF i$ = CHR$(13) THENπ  IF selected > 0 THENπ    LOCATE 25, 1: PRINT "Swapping...";π    FOR j = 1 TO 200π      hold = puzzle(j, posit)π      puzzle(j, posit) = puzzle(j, selected)π      puzzle(j, selected) = holdπ    NEXT jπ    selected = 0π    GoodSoFar = 0π    FOR count = 1 TO 25 ' Compare the puzzle to the solved oneπ      FOR l = 1 TO 200 STEP 8 ' Check every 8th elementπ        IF puzzle(l, count) = correct(l, count) THENπ          GoodSoFar = GoodSoFar + 1π        END IFπ      NEXT lπ    NEXT countπ    IF GoodSoFar = total THEN quit = 2 ' All the elements match!π    LINE (0, 0)-(100, 100), 0, BFπ    count = 0π    FOR j = 0 TO 80 STEP 20π      FOR i = 0 TO 80 STEP 20π        count = count + 1π        PUT (i, j), puzzle(1, count)π      NEXT iπ    NEXT jπ    LOCATE 25, 1: PRINT "Swapped    ";π  ELSEπ    selectx = x: selecty = y: selected = positπ    LOCATE 25, 1: PRINT "Selected";π  END IFπEND IFπRETURNππDEFSNG A-ZπSUB DrawPuzzle (puzzlenum AS INTEGER)ππ' Each puzzle must fit in the following square: (0, 0)-(100, 100)π' Simply add extra CASE statements for more puzzles.ππSELECT CASE puzzlenumπ  CASE 1π    ' Glass of Root Beerπ    colr = 15: colr2 = 6π    LINE (10, 10)-(90, 90), colr, Bπ    LINE (11, 20)-(89, 74), colr2, Bπ    LINE (10, 75)-(90, 90), colr, BFπ    LINE (30, 30)-(30, 75), colrπ    LINE (70, 30)-(70, 75), colrπ    LINE (29, 29)-(29, 74), colr2π    LINE (31, 29)-(31, 74), colr2π    PSET (30, 29), colr2π    LINE (69, 29)-(69, 74), colr2π    LINE (71, 29)-(71, 74), colr2π    PSET (70, 29), colr2π    PAINT (50, 50), colr2π  CASE 2π    ' Geometric Shapesπ    colr = 2π    CIRCLE (20, 20), 4, colrπ    LINE (38, 18)-(42, 22), colr, Bπ    CIRCLE (60, 20), 8, colrπ    LINE (76, 16)-(84, 24), colr, Bπ    LINE (17, 57)-(43, 63), colr, Bπ    LINE (70, 50)-(90, 90), colr, Bπ    LINE (10, 90)-(50, 90), colrπ  CASE 3π    ' Roundaboutsπ    colr = 80π    CIRCLE (50, 50), 10, colrπ    CIRCLE (50, 50), 35, colrπ    CIRCLE (25, 25), 20, colrπ    CIRCLE (75, 25), 20, colrπ    CIRCLE (25, 75), 20, colrπ    CIRCLE (75, 75), 20, colrπ  CASE 4π    ' Squares!!!π    colr = 48π    'LINE (0, 0)-(100, 100), 23, Bπ    LINE (45, 50)-(85, 90), colr, Bπ    LINE (10, 23)-(55, 68), colr, Bπ    LINE (33, 38)-(45, 50), colr, Bπ    LINE (50, 10)-(75, 35), colr, Bπ    LINE (55, 85)-(95, 95), colr, Bπ  CASE 5π    ' Blocksπ    colr = 80π    LINE (47, 47)-(53, 53), colr, Bπ    LINE (38, 38)-(62, 62), colr, Bπ    LINE (17, 17)-(23, 23), colr, Bπ    LINE (78, 18)-(82, 22), colr, Bπ    LINE (18, 78)-(22, 82), colr, Bπ    LINE (77, 77)-(83, 83), colr, Bπ  CASE 6π    ' Train Trackπ    colr = 7π    CIRCLE (58, 25), 15, colrπ    LINE (45, 20)-(75, 40), 0, BFπ    CIRCLE (10, 10), 5, colrπ    LINE (6, 10)-(14, 14), 0, BFπ    LINE (5, 10)-(5, 81), colrπ    LINE (15, 10)-(15, 40), colrπ    CIRCLE (20, 40), 5, colrπ    LINE (16, 35)-(24, 40), 0, BFπ    LINE (25, 40)-(25, 20), colrπ    CIRCLE (45, 20), 20, colrπ    LINE (26, 20)-(45, 40), 0, BFπ    LINE (45, 37)-(45, 20), colrπ    LINE (70, 18)-(80, 28), colrπ    LINE (81, 28)-(81, 55), colrπ    CIRCLE (75, 55), 5, colrπ    LINE (70, 50)-(77, 58), 0, BFπ    LINE (77, 50)-(79, 53), 0, BFπ    LINE (75, 59)-(45, 59), colrπ    CIRCLE (45, 65), 7, colrπ    LINE (45, 60)-(52, 75), 0, BFπ    LINE (45, 72)-(70, 72), colrπ    CIRCLE (70, 80), 10, colrπ    LINE (60, 73)-(66, 89), 0, BFπ    LINE (70, 88)-(15, 88), colrπ    CIRCLE (12, 82), 7, colrπ    LINE (6, 75)-(19, 83), 0, BFπ    LINE (15, 81)-(19, 87), 0, BFπ  CASE 7π    ' Junkπ    colr = 6π    LINE (5, 80)-(95, 80), colr                   ' Main Sailπ    LINE (5, 80)-(55, 25), colr                   ' dittoπ    LINE (50, 30)-(95, 80), colr                  ' dittoπ    PAINT (55, 40), colr                          ' dittoπ    LINE (40, 10)-(40, 40), colr                  ' Top Sailπ    LINE (40, 10)-(55, 25), colr                  ' dittoπ    PAINT (50, 22), colr                          ' dittoπ    LINE (90, 80)-(75, 95), colr                  ' Bottomπ    LINE (25, 95)-(75, 95), colr                  ' dittoπ    LINE (15, 85)-(25, 95), colr                  ' dittoπ    LINE (15, 85)-(35, 85), colr                  ' dittoπ    LINE (35, 85)-(35, 81), colr                  ' dittoπ    PAINT (80, 85), colr                          ' dittoπ  CASE 8π    ' Numeral Twoπ    colr = 9π    LINE (65, 45)-(15, 95), colrπ    LINE (15, 95)-(80, 95), colrπ    LINE (80, 95)-(95, 80), colrπ    LINE (95, 80)-(60, 80), colrπ    LINE (60, 80)-(95, 45), colrπ    LINE (95, 45)-(60, 10), colrπ    LINE (60, 10)-(30, 10), colrπ    LINE (30, 10)-(10, 30), colrπ    LINE (10, 30)-(30, 50), colrπ    LINE (30, 50)-(50, 50), colrπ    LINE (50, 50)-(30, 30), colrπ    LINE (30, 30)-(50, 30), colrπ    LINE (50, 30)-(65, 45), colrπ    PAINT (30, 90), colrπEND SELECTππEND SUBπThomas A. Hirsch               THE ADVENTURES OF FEDERICO     thomasalh@geocities.com        09-29-96 (05:29)       QB, QBasic, PDS        338  22376    FEDERICO.BASDEFINT A-Z:DIM SHARED K,S,B&,Z&:V1 'Created by PostIt! 7.2πSUB V1:OPEN "O",1,"FEDERICO.ZIP",4^6:Z&=16528:?STRING$(50,177);πU"%up()%9%%%R-%0Z%bF*:=14u6#%%SQ%%%1%%%%kj%ijwn%htSg7fxfB;8>[m]o$πU"7x2pc<rB<'>./s8>7IN,h][[.6I)iltP+'_m1FI?q/<7\-dYKdN0tff+js6K6,VπU"pd?ck.6Inug+d1V;,UkhD)wtTfARZ6wiH_ged92MCHLZW3.jl[pYwfJnOyuOyd7πU"sirfy\Yf+D/].lDorJVVqet#8.uwC^>p-p96:,+p5nycEqGT<S5+S4=vnge6RkzπU"C:G8-Zxw,DuwL_)<Y]DorFV[AQ+e*C)TJCzm[-_lv2(r-+ER-Ndgk2m2JY+^/lxπU"VN;tf47k54RX4Y0E?zb[ls5CnfuQxno5=,Kje2<v\-vv(A\1jxCHAjst3F&R;uqπU"[WgHW7+0+C72+z<:UdMk0RkDmVTA.R&JWpqL9uVZTiW<mw=aRJ.;[d-A7IyqC#qπU"EB<noGi8-Rf2VxD:*ccC?S'+44OG_O\Dt0QX.unsUEWA:?1qbmyh0P_fnOVG-$xπU"TOE930cc-O7l,0^Z6pCt<P73+9<X2S=2UzE,Y,XVN<dp,SisjYtTRk8MQ678pP%πU"tyqD%82w$qQ6ZTt\PFUR%\>&9BR,p86Z3bnCJ9O)8+oJkW$CPtkQxduvRWg)S6VπU"AZ/FeM&u7+*Y4:(RCYDtZ4O8I]-9\R5=XfpR<\f=U0G)C<t]4A^]chOSKm(DoFiπU"HoHCv(.hN8iaQBb^+j/L6IH^K?NuF&NSdi#I.jVJK/Pp6;D-G3ROYEOHY[wlo.RπU"v^I^'cmd_byO67F]87I>z[3CXj1Pc%C&e8-rJ,'4O%1(9p<vB)f2/\Y-2_fSfpPπU"&.ib8*T?K&Yb]jrM?tS3HMmQK17EnT=:5P9O*vDB\j*/1xmylpV&%T*'LrY/e(CπU"PSjEYsl/oA5EU0m-iW()r1a^]_GISGDEg29YXeNYLu>GLI[:I*j:A1*Tj93FN$ZπU"C4=]D1,]sQYSa9JXeVVKK/&d6di04=#:e,SLWy.PIGb)3%Usu$5Rx:%=6<*Y+?&πU"m$X(*]LU_r74;6sonXGUtCpkJDG(mL*.?5hL>LbL6);Ff1H9*So9t+eRV;4[xZZπU"1xVYB?mgB5_S\#%wD+n)(I\ONn1_q\tlFnUi_Tt(l#M2U,_5tK#FD65_n#9/+QMπU"C)pXdyImI7W*#W2z'&[OO2sNU+1f-pfhm54OWUA?j5V>i<V_SGm]GRek]c3rA\iπU"Er2X]d._\Eul3q1qtG$n,4f?V(_tr'4gvR(\5?8?:p:uk/d4kN/Mt7i5mnuCM47πU"D<DqC]R[6]X$aT,QhsUeAqxiOh97nIVLL>abj\8=b+ZTf8-#20oP?p$D2:s/b?lπU":KaKs>ZB7N/7#HnvhZGj=c;Mbe3I]sMlWkgBP;iaWx&3L1N=f9rsXu&J<9t7e-]πU"a)HQ\S0e5&:qDSZ;Nj./tgaZSe'b_q+>5tIgM6qG(4sNh3>EK?St0MuS2IUS/VQπU"8F,8lb;VQWcFstPFU^ge]/vl$3nQ;h/5VXprV$x\TBdsQ:1bDhVL3&Rv72_^CGRπU"wa0BX2=lSIe#WVVtj1BGks?oL>):kl$JPSg1AS]6a7.t=3&ImbdL$S\/Zf)/-3KπU"Zocr(+EHP^BjT^$D-Pt6\g_6GGAt>x7kZs)I%CR?rK2iJF=;OxF,Nk4,\bY9P%iπU"T^(=80&Y7&Bo749(%(hfp%bi+(G'/3]N.$e9)nIvla5YbTu2TDt;ff/b+7Es>1TπU"K6OTZwiNvV]wkzCZDRVfcE/II47q-*9c-9UkwJEZ=T#vbPQ^c?T/U[(XjGrgUFWπU"4o2hU?^s$Dfs52auWWki30]if];E1K:kM()F&p_'Ou)*;q6;-fpEEsqhT>f5Ik+πU"FmZJ^LL2S:a0k4,ddc2\2^-n8O40p<60gY_XJ1&=v1</.$nO./axIM&.?>=g-Q.πU"$II)Sp6opi4dYv<eIi/[2Wk6Z:;-m7#g*RPMk5Ok?j;/kS='qf+51XB7t7Y4&d%πU"aup^k+MVXDY4pt/mD,9cg/EYBBQ4_I3WmBc_wYsLcL6dUtWnjk35apV*[AlG<mkπU"FgUc&lE<Cl+gUcAlE<mlegUcAlE<nkQeWeC5EF8T_^'f_gbTknk0L9rCg)u?MVHπU"_2(euC'JQr<M-7_V<Kg+KTb3(ksVNPu)Khx4es7n?Wv\P,DG4HGGy:)au1^9*8'πU"K0kbvaeF*gkw3X/,t^R1H*l=EH$d7Wu68?]rulL+yFQpanxAFens_E$Cs(ZAWckπU"E-l^v8)/$9RXE'Yb>di$]=8ML'hoXR4zj^i+u]&g8Y&3t49BGJTwW:zAS8zeH\*πU",;CYRSfq-&HHmhi?Y^HJZ/bxY_&h*C4ROh-=w(d>?Oqywtaj/XNaOt_\J?4hwvNπU"n-?3h[8sq^=mK$C1YAP[v=hgQ1e$?s=]8AE2i'k2b#x5MVY#vU56WQ(PotZ:JvgπU"93Kj1_Ixm.1Z1[$=-Um1_Op]T)&E#>Kql)m;D-\[i;MPC0TA$%f_AX20B6\RQejπU"-TjJWes9&i_fR51ET*(x'].R'71s0>>B(J8j,-JI)#+Co^FU[p>mQ'?JRdPf-q+πU"0K/Bn+PCJRnUpU=C4L8>DQXD5UV#BOD8ZY1Y+fOm(9aiVdN9a9nEBN\ADyTybrbπU"6=A#LbU.=34EJ0#f13u,i;+7nLb/QG+o*Mr1IG;Zw+XW,.T[gAO?elgkRc[XyFDπU"F?lC+km[4mL]1YGW#nGggc=A^hnXr\2CLFMgve8*EbJXY]BBZ56nTX$t^VHcg?aπU".BQVtY7;/brCVlNs4TB2C4RvgL*$_l4.b?X-%Ikr0;]H+E<A>Ej)TbEESPp*2;mπU")JV#t;)#\+O]_9Bi;[mSnlB\CRI])b(59'ZwgchhXSU22m[h1C4ZYM1+<PmVtSCπU"*2tum4'TDY,EExp\d.Lc,7JVt%;1VA)IjVtUREEb$'TivmN__BDQp%fHKbw+dWxπU"/EPb/A=9g9[q]ZVtcRF4uhKw5TMQPQC*Qsdc\b)u<^E]<sNNb5KF%kMG]5PCA.2πU"-D<g]^OBl7)fvnW2PP8n^.(S4CvH%P$r2p<P+1HRKtf1L9<*Ap8(_AHW)>31z?/πU"/n>cU[_yu%gq(#U[c[A%gZ9EVKQ1>DbgG=0bq3=U[\AI60*)yWdrV#A>o^sr*5ZπU"DoiHe[ow?uQ>:IwGE#e$yMeQ[[xOW3Wdv$kr<PpzXa>ntz;EUC=N5f2ifV7Zy3;πU"FO)-^.59(5(OGY4A^AykO]cP9.wu#g/$,ypCfD>wj&Vip-&:)<qhPB'3:TZ5M-KπU"%K%K\6q$)'\w$2']tn->])\ju>EhUTp*V&o\Q$wK_ldf1+K8,]':fYXj)C#-hHjπU"IGz_*MVF*IT>'0J&.1b'E9.'PWrR+<(QD^SRF2YNSlF:Ja[JQiQk(8HTu85A^;*πU"p%V[et5w29HdiS\<gfaoEG^B.Cg5PUjCZrzQ?;N<FgU$//1(W3njS:r*plw\jYRπU"n3%Fx.RU6A&<0Hd_J:hIR<,O0LvQ1S^H<TrIDtjFCt)pasd6FJk5Cc-)A[9T1CfπU"<\AIi=^UJza$;/aSWb6pE4X22*4B\>YjEe=:Iun(N1jO)l84IdC$?\8WN+$9l'xπU"Wg[K5+WHFv#>ra=K3qLRD:CmE\C1?4_vM9d'DV_D#CF-%NahJvCWQ4?fa0kbS?+πU"rB+%H5juugJs7SUlYoNhhqx;TwMubfCQ/X?,i?<.duYHKoP4NJq#HKes/NNgypOπU"SspM]#a..^Mq-1?x%#FptC1(&b2K)\<>Zi7XjcKoaIUU_xWOpSU/'jR;cO5g)I(πU"Okg]S?*mb:k'+98%(g0b/;w#:h?6dlOps34?t2EN[fk^dkSsn,8FQ[(cfZpro;6πU"Aa=d0,UEArZCP)QNZu2,(mI^Ba+]I>naE(<\w9IE%-XZTf&flCLozo*lu<'G(N_πU"]clkgiR[\&(L4Jh2yk)+XbX#xqU=Q:Gd.60^(f]A<At7n*J%rP<H%1C*0L0YNw$πU"9s0D[MXFKXz\<1)TZT7hVRUL:%\Wg6\4:V%Lj[_dFF;4'HZ/1+8mO_q5^(XLd)yπU"p27x%npIa;c:F'6?MCPxKQ)8H/<%>xc2HRS8W.F$SS3qG-MmTZTuO;elWLb]l;xπU"w?n*MEBs.w->[cZm)u1u;M7/:XC0.08E%]g7U+m.UT2#(<tuJeh-ArLFP]R<HSBπU"ILAUM'PujHi4yW93N9CjqvOJDZU2bXqBa:fkT91#-:[a(nGjTgNAzvg.-9(j^AGπU".83jBf9T4y:%ZO$:lPi7SE&9GXTu$bXl:vV76jaSz4VS\WCqu:)n.:IbfSDoCTpπU".yH0rvdv3h^IlO0NzzHPH4VjJ4tuetR>,6F'[:T7syioRY-+CbR=83I^H=RoWrAπU"o$KhOe2/m_]25H;+1$oBy6(vx$=kJFG]b#o3G(]VqmuZ-(t#B8*^X[k&TaC'p#WπU"rwuoLWXmN2I;NKjO;ad;WkL$A[f22LuGPMm3nxjKc<*ItL;nG7TK;3h8s+%XwE&πU"UkkT[&c1oduelx9^c\youBcq,XjqW(cxDFt=2;o[rPOqO.5t#&cUT]KL5F*SD8XπU".M=fDb<-u)P_F,nHQMNGWG:4pwEF6u2q/G+Br>Y$kBXwXN5i.^OwG0'wBHNk*CfπU"QqcGlVO7[_h9csj+JH$WF7e]AhiSj,/g-8HE>RQ0DJNdn/X5>JL(W[*e1t5M_RdπU"o63>nq,g;>e2Uy_(='Y%%.B)y[]BXiUj&s?\(yK_gX\$(H-097m6pqR5(M7uU*3πU"c%??>^-G/uKO&A7?Qwg$oyf'q,uE\EtZ=Vj)au)wf3dNhO,b#(4%__l^%>KU^>tπU"g2DJ&PJ[ka]jPf]:qdq6UrpgA#[.8;AhIf/a&2=7A+3y.=SwB3qUN+<[&-sjZ/gπU"[y^FXZeIshkGuut;/Ff.[;lj#Z0hSdO,JWuPAd;m7uAoY)6=uL>E:TP^E*u/&XlπU"#m<ZVx.oYd^<,]e>y7QR\-BR0:5>+eZf-W4=XT^Er):)(3Vo7.dh+&Z^DFeYrh;πU"e,+&/Rm<c/=q6p1$#MiW7*xSC<+li/llFJBVtSl_Q=*5U0#BBlB:Ytq>5A]us(YπU"OB=C<1vYk2_CX(BLAXqf[Y(PBE+YJuc]cBt]w=;&lr][ws/lV#sU.9um2Z7z(7dπU"r*Xuv,>[si^7%h,=x)E5^Uk/Fbp4\&'ObIKuR#.W9q*\d$#'U+uX36OORVplen:πU"4snv4Lhb)m9[LE-A5Q*bD)Y0(br;x^jJK-M,p'Jox9Gi?1HU+BY\d+-AG]^F$2hπU"G^cg34:FTu^j>PrW#>gO?xHvct;]5,UDE0SyHo:X(8aoQJ4X9A0%MP$jug#bj[.πU">;LI7D,=kx*=;MtG,uVVH(#38x$xp[A/]^cU?uQD$YcIhr_?k_wQJ38,-mI*If#πU"inC:JAF4,pW#^YZjwC([em7I/KW[NH0ZT8O=B6'e8kXi6OBG88.8EE#xtyiaB>cπU"b)o)o$,wYP(zur80Zi8gSbOKsT^Fc$Z0uAX6Sia2[NFCaHlPdn.lH6Djz-D.Nw*πU"NU*T*3K3]6S[Io6uN0/y2mAqEXG4g4Ak#WERO+lSZb:%qDe+1*NNDa5%X%F(^-cπU"*iU99:,?S4]]Mg;bFkbAB>#<sOIl>NIirYZ7'O>9x)0[;n*nP2J9\RU4l?A:vYYπU"zul'1c,_nm)9VR\B[wP+AVO0I#\RhS9^Fz*JD$+eyWeXmA^ZG7=5'8'1YmUvIe:πU"bD4dCcR6ELr-n%[1H)(pA&Fq^1]quw6bHaM;Sbc[(0tQBh0b:Jw-\OUxk-N:r?MπU"W>IQ(ZQoedAxA_BW?E\e?vmIBK)9$%DLgVC1IYaPhWTS7lH$LT]/ADZ*rNA1$..πU"lcc0t]lHKqEhn[.B1?g:rN8oVFYCkfw2mEd][9:9x_$.e;N:=C8=dT?+_^6AFCsπU"x0>'*8lhD'w0up%()9%%%%-%3fd^E.6U14&Z1%%'\L%%%.%%%%ynyq#jSy'.yjiπU"p,a=]3ahpBJ1\xTNdv9Hw&br?4cgR5r=6B-)IhOcnr8lxwulu^wrpnIdJ.aYtJGπU":*#NWg^1RMS>.9gwgw9gwgw9gwgw9gwgw9gwgwrg%gO?dMdyklMgM0$lnAIzcyKπU"jyrwkjv^rCLl(t$Mt$t$Mt$t$u>h$[r<&hD6pnJ'.a(m'$HPL:Q,Y8/1CQX-J5GπU"gYe/SQBC-5HgD]/cQ...5I2ga/shqG&5Z454CW1C1CW1C1CW1C1C<1C1y)8yYzAπU"iOrdAuoxtGxKy8AyYzU7Oh;eU*unT%0YU':20'<kB6g:/4KhoW_aB3$Og[_QFs*πU"Yp6Q0VD5]\B<5h\r0oKJ$eJPJxBj_:^e1N->S%A>GJOE^0Mj#jPqj$BA;33Kme,πU"x,lP^PxG79pjOH/[My5:Kd#B\*kzTVvBrL'V#VV*Y45qBbeKo1w4KTaw41s90E_πU"OcR&R*(MLAiT?;<W*L8#$3%]/QZQU2f4zrxqGl57Re(<-%(qaR$v5l8G:_*#πU"9XJ8nweo)O\6$-.Q>PzQYr;wcI1%J1q=tgUfBrVmUflBVmUZfBVmS?ZZ9gSD+c[πU"*48saKmra)j_XFS6gGS&k.^88AK]q[vVj;2S#XK[IypDPtAbqjr;$-SSK\_'Ha?πU"L>]u[zEMCegASU.0C7lrSR[vSS:jXOKh1jwf^0><*OO>y.UyLAd\_P6]2S2X=pLπU"9u;h*ydVt)1O;^Zdu%[YVk&CkRlRglRV:3<4ptITAOsFrOK<;bf]J,HsR-rSHWBπU":$q[T$7T4=;JP([3X82gfj3Yp+(fr4kjLr;O,;mG_>_HSgCGHY3^PQ,\iB.V+TkπU"_:D^1N-$>%A>&F73y:a_he97(r3[a$7:%H6a79:H_BbXY6x8]iim#)4GGPo]Pa1πU"T_b9Ux4QGb/\f1X3;nRB]$JGJV<H]lAlZ&g]Y9BpKGYL&Pt,c:BEq(9&3-_HIceπU"zl<_H'l'gyNLzzz%b&&S&ISdl\?o)JCFiiEQ#,6aW'Yf)4^GG5:JR-m%=l*s<^zπU"grp-)bCYWj[?X9I,oC<qI_#ho2[AS'w=Qn[*hcTr+aogH%d=K)IUT%%;iPDW%-/πU"1FOT%j;ezq.OJHn5mG&U?,=977(0O:]%P))O59QR%*,03.;''-//FO*RVp;%M_wπU"s-FJnOxoPT/[pMyhr*?yboJ%M(XJ*J=dT1z[%-:&<gAoyM%UUu=gC72/1F9=MW.πU"v5rEIkf[Q%=*V/819=M&WvGk)p9*J#/o9cXM/B1njQ/B_1jQ/'Bg2pK]N81eXgTπU"k4:C&-NRdS,P#$q/7<*4M<Q4fSq:?26sT0p^$=B^jk+/pDkX$A[32kGSCg?6QqzπU"d5%']j3SMA?$Rm<SI9#-y7x91m>j+O'saZ8Adrh'Y&*R:lj,'Y0\SQU1;7nfrdcπU"k'mZ5LcYtG1:*#9Rz1/+NQA$o/Z),I6a;l0e.SK2Zi^;Q[00SdqN(xDrs.Oq6+?πU"fZJ=R-:Ej)lp0Ovw^m/ZdRW%6,m\\WYC]IMh,%HZ$wo,H.]&qJ<RN27ll2)6vkRπU"_?b7Msr$][k_?bM7sr$&]k_?Zbaq)WbI-TLZvuUY#&Fv$R,?wu-qLiAvFe:iJ*ZπU"WpQ#,=]F7\0;NBt\g,h5VDjRqB)_83WfFfuZ^iZ&F\I\0VoAg,l=YDWQtJ,eF?GπU"LeauFGL&G)S%)r#iO*8u^OY^)7T+Y=]O\QU3$*qVjOZ8u^UYKThBZj\0G,/(YjjπU"E,(YVkj_?LgA=i<Crr.r<v3Qn%+72I#?mY_87EJe)qPi(&X+72E#i6fF++13^>GπU"V%Wv7fVB.Di60QGUR,1QG+2-[GV1_c[3^JrhB'auWA7o+S1eyZwOAoj(fLkN4\kπU"]Dr8K+kN412N42fcYwL/osR'%2/Y5Y?Y=?\n4\q)?R4#-;)F1=#;)Fm1#;)%F1wπU"Usm:mX+/Y/yC80=SG0Q=U;\0Q=2U\05&\fY+=cFuj#(HuV.DQOF(PP(9e?*jhumπU"pvlhwi?9j:?4UB?YC2m>T1v3v&&so<8wW5%E2Tc_*>lNQ\H;T#aj.emQY#5]E2pπU"c_*LlNQ\H;T#ao2CC*U^:bg#K$E2<_9JDdTsiq&iZi*on%<7]eI&<7/MOG[.Jl4πU",?l2[AB<^iDjMhmqNZJ8a.omTsP&nl[Us%vDvWDLDLWDLDLWDLDL(TLTRN'z+.jπU"jl<l^$ifF3h7^>T?18K6wxxdY-X$8aa?W7HN[vdcP7(KsDsL^t^Ppr(Vevj[IfTπU"amOcXgjXY1lT.I$T#0YUO8uX/pQQ-Z<:,#TgcUo504r=<<b#TkUTo60\Oi4M$0mπU"sILr6bWbNWu5sMJvJvMJvJvMJvJvMJvJvhJvJ<W_OF0Q;?#ff\v?gflLrUW5+EUπU"h4+U:Pj1+^uvDH9ouAEHc;uaEZH=u+?EH?1[-;5e%XUd,-l,Ud+4lXVdd<Bb=UnπU";*#?=eB\:DXet(?K/'og&<)7/%w?Rt;c>6Qa9C_H$J($L$dqlnG#X:wE4am4qSWπU"nhFnuTuRF>nXu>rGn\uk(Gn$<uhGKrvQmD_S-KmLW#fXi2a0_TWWpeu2/E.G4'RπU"B59:x*\v;/24uATg7SP]W$Ze.0n]Tiq1,jO0i.*wVFgf;9l0%EDie+5$dOtaxs.πU")EOG4/SWZ.SbE$Af>/7c+R-,.<z2,(<T>pL^(<+cr?<%#<#tuR1au2&cN(ra?o;πU"[*?uJh<M=G/6gNt:WKVUhCjaTkcUuWa[.[MrSZJkt$;Ws/ZIhuQ/P2N6x'O]P'$πU"P.mC[E<5]rZ99*cSgX44_0TTaejqV\l)eBC']\0laeqTVFiO<Lnbn=n<c=35g<IπU"?=O)FMMkp7[/.T[hThh8Nh2?Zo2VM702/<pa(1m+wZq,WOCQXU3*J$2Z^fd6_M0πU"$X\e$U,lUms=DBbHp^LYhd++>Yui7I9p%cp6b4D\e$rUrXc)d#/YL<7>-Qq2$<8πU"0d\HevkA%OnsJ$BxIR.FUU(56qT+j+YFrUya7.ffAV&6\)FQPCsEMI_dln9wFuSπU"R;Zv>Z,mwafwd'+M]EfTHPQkDV0L*l+(X^U8m($^A;blMFAir>Bp^U_,.1e(m(MπU"Po5AQ.3O#E0VU^;bU?fT)(O#//T>45?[:3wB_u7#eR8UrT]sm4FT$)J#/t><w&9πU"i?T]4E^L4HSZ2*r5#YgbP4,K.CmJE<fP-,fKCboYg-#s7bK$V9r3]$>_h9_=A^9πU"wm3a^9my34C3;?5?gbIJq$oG?r-o0^AVEV<uY>Qn\n2cRd:2j6T7WXWcP]x$Yl&πU"tQKKC?]ZX#Q1P,^tg(a(aoeidU\Vc),#/YE<W=cQU24340J\6ehU2?W)<#k'5P#πU"'tg((ZITtSu6X)rg#EN<ro>QxR2#90.,];&nVbY)m.A>7Lw5HLKx4Vth4EeRM(5πU"*hY<Q?P\>A=#DPBA'<#0h]J;CV<6\)>QkCOES)E-_T/ll:MGVLA'<FPPAU[j<=WπU"lZTR00l>40XCnC#t4xyOcC'.cej/D2G\<AD_Ic;&c4#[bV\g:8:.+fgAEW<=;*iπU"?'T]Etd#aMU?Yjl+>ukNdr4-i4I(9?PR++IKS,8ticQP)74Ka,9M-NMF\O'SI'9πU"%9[5:fI0gbIJq$oG?r1E2.ah;[Vv?g)ZB=[2<S>FQ_35JR0XO$e5Vtl]1X7(CX8πU"+CXHC]XXCX7hCXx4CX2C$XBCXSRCXbFCOGJ3E0b^]eW0(**\(w3H)4D^_;i#=ZjπU"'.G5d^;gXVL_')tA[GY<s#BQO3J<>0,]fe;Vf6[).Ag[[r&CO<z83(&*jTSOK%UπU"6jC0a(pjWqJMTlrTmXouu/$0sb8frP<H>JPMtJci_Je_VJg_JPi_Jki_Jm_VJo_πU"JPq_Jsi_Ju?3l:2\ueI?qPIf_U=RK)lWsqc\Z(XOvr)[PQo?&BTZx^bF]Q+2t;oπU"0dXWeL?Gd8C>7R[h<=,7Q32Ntp0jOXeBUXbF)x^>ES<6O^Iu^A0>($*\(cbP+,>πU"76OXtF<Rc+f/4ffW<4t?fRc+/p4ff<k4t?RLc+^nam+R1tmfpTuhLhL<h^XDTpdπU"gNuUx1xt#x\wl#v^taDPPPaNPNPaNPNPaNPNP9ZIud%up()%9%%%I-%#NS_Eoh0πU"wg?(.%%V8%%%-%%%%kw%tlSnRrlFg)(=P^71jx(\3L/9Yh]s&EOqy2QeP,E#J4BπU"*rGT%a,?KuFdH9Ro+D8dd#ub*,oT*jrL&<HLMMK$qJ8m)JFfwtPMy3uo:\XvLN[πU"qZ$p7O92XHJiD\wP^A(j7'8qspeI0(sTcK9n.R&F4yXH<bOk]F(jr#%L05tZmPRπU"6EgCZ6S_5N(;V)H^0$u;5Ze=Xr*xA>EN23/KadUej)6'OL'712TqNVUdIf>Mt)+πU"R>&)P[MN]PlA[0N/='fM'HeK<[gGgCz_4n&iiZ6JX?I[nk6&o2*+kvH\L7l%H7JπU"Lm92SO9becoZX7G8I5kn,-IS9K#V=e40Vs,m]FE<eyO,DlJZc4'Y3;-p:E1]&i=πU"JB)+r5#e'=V2(9u:f8,*CkQNeQX1MwL6^eaR1tq4+=kEM[6JfRs)X,5%qTo=$=,πU"nrlLxi\.0H90mD[sXr8F44\\jOX9Ht9r[ihg9re=ydRQ]n,nCA1yH3F:8_=.x'[πU"H7-xJPR8lBYNim*UamKf4MUpd>5r*7emjMFBxB[95nNHQ0EdY(V*9blTSR8X;WVπU"XxoMWEYgaWl6fgp9n<7lh5GnrCq\EO7?/R]GrrKyZKogj5_kD_t?2uyLW7V4[>fπU"Vk*a.+E]E0fI:rKn<Lbq6IFT.3ol7C:Fv0g6]2;?HDe\?ZUxgFee.ku]0Zda6r-πU"#,s8%Dbv]81<vIQ0<g[q)^SNHe>i%r)HGocKZ&\&o4LJ[t'[&b\rQ*a.5Y0AC_:πU"jjnLQOR^J:A5j,62..8i2mSCzhg$-7B8_OuaSe&=FcjdhqCA)^o.Ul#F9,#fBO$πU".l#%Yu-;PB#CZbYap)RnEoe*T8PIXRqwm=2*2=;I>r;[aKMRFi;/yD+J&iP7(LxπU"7un^DX]L6=xh.*\tJEb:4*a\Y%HuSDT1G;QsM'hy./]^-C]6]bEE34mIiC&<CtoπU"J9s#36b[UGwpo%jvjK)XEgg)IbL\ZTM+.yK(KLCm^$PO-4#\gR/t':cY]K[)xvCπU"bV3?tz=cgVzRy&%D715YiGA+33+ek(7s?Vn-M=Sh)nJw#sV'rc+l0=u%$ZhEd8RπU"HFR\[lEck5AGLA4U[z-6I6vDf*M%unM89$=KawXq3E*-*3+4p_aX:'x(up%()9%πU"%%%-%2#L\EMXl4K%,'%%%B5%%%0%%%%kjiq(j%VS[ify.JgbARIU5TJcHq3g=w$πU"h%#EE.#/fHs,Q>$>1mIReHd8'J%pOKl-34a&tPi1%[S9?#RkzegaX,tgoSE5MjUπU"-[O_.[X<z#&E#qCZs2rB&woihc2o61R1yQS=y&w'EYRMRvSmB)49NXd:NBS?)L'πU"\Dc:b^l9DyeOsgpcgrt.Pi/hl=_cB4.qPm'\ub$pkDK9r1)i57)\)0>J7>pc_a5πU"ZOO9d4MI=1-*Y2mo0f+H>Rkbo.^1[vW<W:,q6%bdO'SjNSiFJ(buIq#$cfZ2Kh+πU"#)eX%/$O2S0-A-pA*qz;8q7HygD-0%n#uL7DSu*QRwUWE^J<'d%rENjMgNO]mxRπU"mkL]to-+\[grtyQongDYztZ;(M/I'L)&BcG/:n:;3JBt+hvX4Ov*_=vG>h]GNU[πU"$NZfLP?)iu/$;WMBD/9\+w_1&s>tZ7]wfb2X1<1h#xUQg/Xy?)4<TBW?h?fe=dxπU"#[i#b8r)6.MFDNhoY?urv3X_<PdbhI\-l9hR:v9S\QV-;)t$+=q+o;j_QPbZ#GqπU"_B/M,=^&0HyC*pv(hsuHVD0O_O]:%6[wTnxTK,>u4VXapZPLl5rdOl<1[+&x\AAπU">9Sp:YvVZAY.m$v$KQ<bGuoI9BZHNEs2%F6aARx4a5ZvSZU&pwt;T.k0X%0A+4xπU"up%()9%%%%-%3tt[ERtMW_'C'%%&q4%%%.%%%%kwtl%WSnrOlff*,]\]1Fjx(3IπU"L?O>kad.R;Wa\,_1v_b>CHHEM4S?+-paw9CJb6Ysf4q7'Xub*P,TD?B8f#n-tfDπU"w#Y2n:1dTNyAin^[DwSGO'jq?Na?BhVX%=2*Bh_q[LpGu=.+&=wP)epv7(l0kR)πU",r?j?ka%RET]luM#Y>ls8lB(P*]gRihaRm5'R%[-.:8DzyKg]7q9n,P.Z]E,1-UπU"GcJB>0ZlHX;3W/+#LUw9YDf^#^KZAsSVSdXm>RDe%S_(m5zd>&#yhN/+KAzrE[jπU".I^hmn::8w&f.R4[=[:K/=2,-9zOidNgfmKpDSgOi'm>;D3eR3z9=u9thTQ2I)IπU"pvsti%;)S:vEe0Mo6?e7JG[o%B'x3Yb]%#c8NYn:#2Be6S/3MP-Ym,^tNIVA%ruπU"W0Ho?eVjBO\rOo32.W]6oQW03gSgxShX4^oW)Y10jk%C%9Zt+7oUuq[sIU.[y=UπU"/>8b]RD[?v0rB]84>0^)qNm8J.)VTI/Cd$,p5i9d]KpgARCFaSgSw_SzbY5OttrπU"0_/&NQEMT:HZ41]=PWXH%tQBp;M2EgTx/['u_4%FcSw3\P'_JW0v%HSeY*1?t2MπU";*a9T&4Z-H.q>.Fr**<'yPBrMEEKCeQ<;8M;]a[^x??eHxHow8=7$CE)sO;Z'2LπU"P0xz.<)4/'>f57+Y4Gm%D-3g,oIk-n8)(3oM*:R_Akwsfh]U'.3OrnR&KU>f.C<πU"m1MQ&n93'mVGBB>22]R$I0[]&-sIrv_Z.$0#<gMbeg's%$.'5W0geFc2%+4e<VxπU"eo=3xJe4b3P;V7Rlih07[^t5IqXc;#]oo%=ytr;O',4QsphMUG]l%p/>kkD$K7aπEND SUBπSUB V2πU"bf5H$uaU:BE,_9o#d92i<96[tM>f2Bt-0dr\i^t7M.GZL:AnO8fNs.X=Bw8u%p(πU")9%%%%-p%I-31E%,$)kZ(%+%<:%%%0%%%%kji.qj%W%SifyW6gB=%#V1e9h&k4uπU"2nU6M&<=j3QvMguh/ehE8CIa%7\^>a)aEA+=HASI7n#ksoRw]6nq_gNAp,VFU'kπU"Nk=pBYM&fl&2LTeG2mE3LeL;o3$+JMbML#xH*w=9l[jTpRNa)bg3udGwer)w?.mπU".&n^6:/Q4u'jvJU^l'*IPJJ0%M1r[F41fo;tTnuZHXT3#v1)RWcOd'+a3s\A*StπU"4ksI?o6kXhN<mA)Fx2]:cR\36uhpe-ChEDdIB1wDkFPi.giK2*j4re1JnU#\LivπU"H0<UpOi2rjQ=E=F#<*Z^+dM7*=4>^%NU7?i9igEddJpwa?VfS1r;?S<r'.P=VY?πU"Xk%bm0hQK?5b5%o^&EW*</m,)qKzW:AKVX$mL+ELMR/\Meu-TgZazKMVP>]+4E?πU"Ys+j^QZr=LFuIE4Jl+uY>Re>'[#;nN8OdpsdlC?2?-gU;:%5+GW&Iw>5Lw$oRLOπU":Jwf8&ugpeRQw7nJ'3*&b/[>7]eg/CY+F6DOZvTZWI'GYcw252v]D]VxW21(n<:πU"5M8EtZBNsI=YcU1fS?regnqc-q.IKk<#=uVG**b=4zo3g,uF;uR4xo5m/M6An-'πU"p%X_EIwis]P,:dW-#(Z>N#\%^zI'OavRhGV5p#A/F,D,9wuCvjAzlMi85_IC6>8πU"j4e$DvCwD8Ry\l(^lPOivrsvj_$)2.Qm<:R_x<9GcQzTEf5lXqe(b%ClXKcn4G.πU"ZHAR'sYov=7uLQ^r8jj8f3p0>;5#IUt2sphll8kK,rY-^o-I>yhki+?niwfX3/<πU"3V>CzJ=g5po_)8yVKGOr'937Vpulpo(t&k6fq-*CZclR$2GgcRhC&/9kjRnkpdoπU"b(TK>3#VKiFWxJmWpr$>(y^ei(:%?-\.[?>TjnOa(aQPudzY7&GLY<9U5aUVdKFπU"4Ne%Yi4>UAHh4AFnh[c*^Yc,Z8b(F[GX]<L3LL90Sn>c-(EYzbBt1Ezq5Zhpk9WπU"RFnw[Hqnt06L<[s8L6L;v9b:rV+(/*3bXv='N81X]+.%_^U_WLpg7r9f(XMe>uTπU"CL'Nd7rIId_?^>J5-gazYpq:HeF#i<2Gz$N+'>$<.HHQqvjz+[cj;MKaYBK-V5zπU"'vO&sj3ppeH&x[/y1IZ>2%m7Pfo\Po,;GQk0(oGc-d)-Kw(u%p()9%%%%-L%4^[πU"=ESv$(N:'%(%I0%%%/%%%%nyj%rxVS[nrlfnepGTdU1Sp(&A8#rYj<lkn%cf3qFπU"[+Cv&*YCGZMI0F\smDSdN\neTXHnVP:QC<E:1kF*-l<%3FV2j4K>%aDk:;L-I</πU"w-ec[G%Rv8HcsQ6CF7m31eb+/ezkHmv>tI)0DBc[DFg2-%6Px-1P'yB;Ch(4JnYπU"E\[cM:$Dy28M?gd:dA--[bq+mt#A?NaLSnc\k*_yEiMUEZ:K_1-?pNSSHAvu-B#πU"q6pt-[6?R'_=VW&\eRc1qrSLQJFy3JP_7uBH#QsY+l+u5tKVIY#do6.iKin>_NLπU"D+[dyg$xALBX57S$>kz%3)77.c,K+Z2[1LfBm*:t?K#EI/xy<>0BNG[;Z\1D%Q5πU"*1\*ue=_Qbj^%0pp)Z?NO]E59;465NH1P[u#i4v?l(:OCZEhczfs%kGC>JDcXO2πU"<$J0MY)7AJSZ^55z7GYhySM#XXQ$GCyIOuY0OAEmU;7<Ie=(3QL*(TIzf_qe8CpπU"7(JbXKhqb4-)Dkvc=l[giVm#Be2Uyb3,kJq1e6:TDiq#0b_*rFHL7Qxj]##&Ac+πU"Al29F6eVM#akR\O'fq[X9<cWL*-M+uCY>]oC1*Z=Y)m-b<T3/<XI4qU6TTj-oF)πU"jJtl9>*8_.)%8*JaSa9=1>[>M>/l&>)><]Oj10MKQWR?<LM6:.e(A$'IdTdtZgJπU")0e>h7TsoZj2)A66kRJGN:X/;1/CY^'i+lb.y,T=9.6pA):%c2X?-6)wC#$SUmPπU"Q):^]vn2sYA,,V;38W8Sro-F,\6sk$RKmE;NO83l)v(UTxUvB*<.up%()9%%%%-πU"%3+d[E,w^Pu'k&%%&./%%%1%%%%rfzq&&zwk%SnrlEfep]'TU1e0p&K8a29dB<lπU"n%7U:8e8PbE1QJqe$T(D;jt]-noA7-SICD+^#yMvo:JF1#2)<v]T,LNiUsr.&qpπU"bvg6+[0kit%ehUI;D:C;R3NK_PTIl<0cZc'2oZ[ukS-ke\yKVIp7_v4us,lLYC?πU"LWr*O,n?'3[?uiVq$Ze:M-t0>XxVfxM-Y0bRQ<*l:y&P\yejF%S.Nmv'Rkl<$dBπU"oxa=RqO]L/U22BEei#u\mRRchR=k(e.S'J1l5Gm34o(=UjLvT0#raVL8s<?X;ZYπU"D-6DfuDs,5_ZB1_*,'k)E9/o+t]e&8S+qA$C[\XUc-l.2I,W'e#=kc*%7f].XDiπU"RU[Cy)Y./KG0wN41oBh_k?B,hS+K.*0^2Ehb4RRLq$nG0Cv#FypP+kI5vA#xQbbπU"]EmD94$n55m?vXva&m>FI7.oJ>mJEtPCZ('st*MGGiOjWIE+6g5^Ww[;3Wo=3wzπU"Nw%bw>j_t<=R84^N*4hv*Re.oL\haNx^jT>M#ES%Y(22C#z.WCzU^JxsH<K>F7SπU"*B5:?s\2$0f;^VDYUh/qfgIP85co7sSvcoAt\9_,4n'FPi4)NZMnB,dL]c\2K0=πU"U]GKLWOH_pQIN9:P/L:7K)&+(s1LpN-&M&up%()9%%%%-%0Tx\Egr&Q7%p(%%&)πU"/%%%.%%%%rfzq%WSnrOlNe,&=H^1bSX(qmKW9[jdHN+pJtQjb3S+oEF03JMzπU"(It3)m9odF-XT<QRo6/-((VwQdUp72HYojz3pGsNHNKe)ujfdG=+0eZfdZ[erP)πU"YlaY5](sm;?F*A%xUQ9ejC/6o1t/gTlU-Ym3,#VW\b6v-BGoX?LGIy03%.ROEs2πU"77YVK&KygOkd%cRI-*_gN7<[l,QXSObboI>Nxioq9t[+]f;f9kl1T=uqs,)2Qy4πU"MRW6[%[nFn&gpfFW.qt)-7so#m2DCmQMk9*ic-R&.qdyoU?ss6rVUe$qY)wGMV1πU"A+V6KMxx%3d9HCc*8H'#xDTTP;-5^&VbS3f\Pw\=&nC)j9ki?2vH'Kf\*OF?*A=πU"VZ+I5'>yi=7KqRN.raRaE,\i$)u_S(YQsP?sEb[XNv>NaB_XFeUz85tPW,mv<LnπU"Ea$n&tiaS4###O27xrNH.f+bjrW\-qRDDlc;RMh;u4'VZO_Ypd'N^y*_oLxv:*SπU"X*<nZo2;>V.)K>GXS0HJX0%WU7v'U^]GYGDg\L=CvtREss=3HG302,/F\YEA=]WπU"Z_1%AhdoC6YsGn4oQWg3]'S5y_oNf?MRe]=mf:S5+2s^jbtI7Hdmc'+DJIsRmr;πU"Veo?e#a)>mdkYaaYX?C;+R9fG^cMBH.uJsp8c?+,s1h21nUWf_3FTVxfkIX+g9'πU"HS$DDE?-9U?KGq7_-7_mj'_+ws/xK-cb;?2>m:IV*6kG9?UXKVi6qk'DI_/T)NqπU"<=f>4IG_[GppG9rE8ncOo)2l6r-89X#N0'i-217O9o&GntWj<Z,[$?3FnR(aMh(πU"+3sgtJG203h%Gk=Cd8VpDlx;DKO$SJAbR05%RmgL>I6C-h&YREtX_XkGfq/m1keπU"DQd]%$Y>$H?&iS,clFI:q;.fhZ1A]L8$E;c<upiBNbeqJutNiR3UHc8+BpTDPj4πU"ind-wj6]_V<?4Mg1=mu26'ictK1,=k*<a\Y<R38LZ:*U6v/tluuvZNp6MNguu$wπU">B+(uTtejmuLhi:2IFcS80X=ylQ\264W'/XjU%k,#<?StPxmo,3w:CriTJ5P7d9πU"u,%up()%9%%%I-%*1J\EfL5<:1'7%%Q.%%%/%%%%ny%jrxY%SnrlWNeV]B[U1TNπU"h$GbsErXooldRS^nP3TN;[5>>%69zC#N^]A^NWQg0[bX9d*Nx3IDk,KP0[H&,T\πU"w%Y2n#Gn;txRhXqm>)R;Fb$wN;7wXdJV?E:WE1BiY2XU/m0G[p?mo&Ib]Rzr[P&πU"3=*?sS>e[;gTI/.w\uqSC_0U)3x,.Z\7UV\,q)NX)ex4Y7UL<I)B]Dzx/KCMdQSπU">d)Pci;&tGZZAldD6G-47wF(9Ur6PK%g*&M96t.v_;8&\]//QJ-n>m<Ik5k)#HXπU"asB*;k#tG%.J0djaVC83]Z5?esOi2sAKsk&UKI>&h[IPH[=g?yj2XVFS43^+).>πU"<.N60M1[O9ZE:gg&LtGPue511&Q??(\B5+oh'XI\YpO)QcZXSanl9IR^mW28hk&πU"+g0^2*V6'j=b;xF-V(m)oIX]Rq21JC<.Cu#CBvcas/E8P?+1mE(-*</d#Q_qdD^πU"ZPk3ns3OGO5*I+)KU(b6F<YD,5]d(]o=&BfQEHEfrSw?ikEXpa:WS)c*hR2:R.bπU"#x0A:P:]Yh\9W1c\p.RDe?utuaF,vAa5\6e_VR/*8%k,iPy6\6:YZdSViqoL'aAπU"3D>o_r+U?q=73q>oAJmDcqP#Hm>Yw>R9c)v<eJ6Frw#Y^QZ]e'g-Z9GIEMGGB6]πU"Q$^5.S(X$qHBaLo0L]GYn%J=mZJ*Zoe3*-OhZe&?0:4#f#0,p'?)K4c8C+_)?M4πU"[CQ$8++w2,WIuRMMe_Iv/&L_0]nj#-HLKGLu[MxMG0*y+YnbxY\-d_d/'w%up%(πU")9%%%%-%2&n[EDs&BS%K'%%&5.%%%/%%%%nyjr%xWSnRrlNe;*]TU71jx,)glM%πU"oXIP8*+aw7KTx^:--lx=[k-h3^lKOA[-SU7?rvue0n9CB0X#nDsU_lr]jEjL>_-πU"jL&Bo,k/G0X'rjh-=<9s8xM6Am)*D/w8\)=o,gwsA.G.*1A[h?4,Liyd\(X23Z>πU"7ZA18t][Q<IT2;/f]G',\0v9g4MM*M?:+[&M6)m.N8ma)OgaFIfX8WUWToP,]gJπU"FIOR-XB?Md[)g8mW7p6pa5tBJEDQrnu05Ac*m)5(L]-Y^MgXPS:o-AmSr^(9_+EπU"<'sDrORj;.Pnc-IUZf+&w.]UBJ4)AUHLMD\7&$\t59&2#V&+iH3=50XX'+aofdBπU"2/vmR^8=*Mbk<^b?9d3Q+6egV+zYxC6B9(*+d;$[gi&wtVfG'UhG7l&iMc=jT/cπU"2Y9$Nh><HnZBj$[[pNcW>G>yV]Ug$m,Nk%'>lGm\Pb:=H#hV?E:W&=kOz8$ZI[9πU"ACvW[(Y'_sY39&fZYvWINt+)ij1O7,G.&E#njSPsf:g6Wac0eKB2-f[Z.K&)jU#πU"]i,dx)BjI0wY*69Pf#1x_)Eb,w_6.<=594LH4SW%T<VJ,,bF5h6ru$0hc8I1WiCπU"ANVc.dXDE<]Y3RfJ1X\ztS('tT&a*$Gf&ZX?$:+%MG#Omh85]*GI%n;<pfkM5/#πU"=cY3BKc)xht*299NS8'vo1oTGpQxE7?qWxZ9wH\<%up()%9%%%R-%Ny8[EKw0TMπU"+'%%%z.%%%/%%%%ny%jrxX%SnrlWNeVA#Gf-T?h&kr7_zu(QHx3J(=DA8q,bFN]πU"?on3(XK,?2i04otrn[t;K1H[Us.(\rlXOo^^nc=X^5%2]6X\PB>z^]KEnCx5G-iπU"AD+*R=:Q/.yjwwTK=iR\X0QMnvL]gQt)UEV$Ta<IO78:a+#pwB=ehq'TV8(2JtWπU"ar]U?dMP&Lor8(7g/B[5$4.Ys<<UEpANq.&N%(q1>E)*#gz^GXZFQs':#k/?V>CπU"DaJ<J99PMR&#(W9(O7a;es7(8U0(^5XORrS#mNg;p^PWI>XqVRWNe)T0LMhy\V2πU"1:/t>4EjEat=X[E;eJjdRZ<hu?C34s+(;m;&r&UkQFGa%qwTevAWiO9Zo%(s>6ZπU"osIi5\hmR=9ERw,Wc:zh(zs-;7apm/i)x*;&76j;Xh#L(9JGwl^&EVIn<B7r\.bπU"9=7<+Q[KK4$W0wAUDjqTw5xMD\qmoi#-uw3Z5HDup#'\h'j^V(\.x/vD.P.w.KwπU"B[xHVuVTotFf#TOBebf-$93P/3XXgyLy$V]IJDFRES>auHw1',GZP<sg<(EYO:mπU"t68_i\$Z+d.h6-vdguy;]+*=BMqN8=<AyUsl[I.HK,=',QiTXtDM$m%ATh-YZhpπU"RE&pqF3JCPbmVZb&JJyf^&$ats)U>aFuDiZpl)wMcMf'bEd%_nT3Z4mX<#wUgkSπU"]0_g*.G$A:3fNc6p5:(iZvH2_d(aG9M^K2%HNVSlWGotkTu1it\JWvaUq;DFcmoπU"N4ccmyHvP<Sq*0uugJ0N.3q^[d%up()%9%%%I-%OO/\EDj,4)h'7%%f-%%%/%%%πU"%ny%jrxZ%SnrlWNdD]'TU1j9p&kLs[9#^udt8%>sfB]*bGW*E37\]sACpipos=CπU"p9o^[EpMXtF)TwaAsUgVdQO'<+;g6]EeM(d]L'KidgpNPc,+1+V8h3Aa%DO?pC(πU"ZtoI7^p)jZuQD:VGS+$_nJ);MG]i<C#o3+R/J2waM#B&5.bLL(?:2k4h)Nkq99SπU"VO0RbE&&GKE+_((#q2U:N%t=)OtnwYvI<6SHEm(qMSp$#Qjt5JA;Z#RbO4G]9)HπU"JXA?]GK8>xA+665GaN(-f0x%so<#/5T2^v7K>A+hT>z%<an*gZ(PSweUqomC(1)πU";9u-dRBx\3C)nXORV7:+z8FD7Zn[0C?l#A#.Tz=KsBgeu?8rFFfnR?,/1RK]>7(πU"2d$G(.iN&vOtdogkVPRPee)DI%-11R4I8o:;$w$#ni$2a%#?Pm#MhS8=C>;JLx;πU"*0*$>Y0pd7,b6dekECD:^46?HwsAOCMw?:u$M^:rMssC>?.H&ZZY'0RZFXOV5MAπU"q/?k8gGEI9Bf:xbZe(Nb()c26+ac\p96$0uh;RN<0wO8L:v:cSJ0J;'a:N^Vo*VπU"bSH^ktGH$9k_Mh:mJkH/4c*mUv.Q2e_B,U>>B%IxAElN:Tea)du:2c)w1ANnug;πU"a]bJ3N$80qZ*-PG-%c0?>soW-FN-JMx\NL%iBeqHzn(.ff7&0x3sN9q.A>3]&o^πU"TO2:Bie+o_f[Ue0[M:0OK[0cjibtnH$4DS'Tf?w^++8%u%p()/%%%%%#%yp\#EFπU"zL%V?%%%%?%%%%-%%%%kji%jSgfIye#1M0B82LTAD=LE543M4A82J>S10&B2/u%πU"p&'9%%9%%[%-%0&ZbF*m:14u%6%%S&Q%%1%%%%%%%%%&%%E%%%%%%%%%kji%jwnπU"h%tSgf%xup&%'9%9%%%%-O%fd^#E6U1(4Z1%+%\L%%%.%%%%%%%%%&%E%%%%K%7πU"%%y%nyqj.Sy'y%up&'%9%9%%%%-%2#N_E<ohwg&?(%%&V8%%%-%%%%%%%%%&%E%πU"7%%QC%%%kw%tlSn%rlup%&'9%%9%%%I-%#LJ\EXl)4K,'%%%B5%%%0%%%%%%%%%πU"&%%E%%%&=G%%%kjiq(j%VS%ifyu%p&'9%%9%%[%-%t)t[EtjMW_C#'%%q%4%%.%πU"%%%%%%%%&%%E%%(%mI%%%kwt%lWSn%rlup%&'9%%9%%%d-%I-K3E%,1$kZ(7%%<πU":%%%0%%%%%%%%%&%%E%%%&^L%%%kjiq(j%WS%ifyu%p&'9%%9%%#%-%4_^[ESBvπU"$N:#'%%I%0%%/%%%%%%%%%&%%E%%%%hP%%%nyj%rxVS%nrlu%p&'9%%9%%[%-%+πU"Dd[Ew]^Puk#&%%.%/%%1%%%%%%%%%&%%E%%+%OR%%%rfz(q&zw%kSnr%lup&%'9πU"%9%%%%-F%Tx\IEr&Q'7p(%(%)/%%%.%%%%%%%%%&%E[%%%k%T%%r%fzqW%Snrl%πU"up&'%9%9%%%%-%2*1\EhfL<:&1'%%'Q.%%%/%%%%%%%%%&%E%.%%3X%%%ny%jrxπU"Y%Snrl%up&'%9%9%%%%-%2&n[EDs&BS%K'%%&5.%%%/%%%%%%%%%&%E%7%%gZ%%πU"%ny%jrxW%Snrl%up&'%9%9%%%%-%3Ny[E9KwTM&+'%%%z.%%%/%%%%%%%%%&%E%πU"%%%a]%%%ny%jrxX%Snrl%up&'%9%9%%%%-%2OO\EeDj4)%h'%%'f-%%%/%%%%%%πU"%%%&%E%7%%9_%%%ny%jrxZ%Snrl%up&'%9%/%%%%%%.yp\E.FzLV%?%%%%?%%%%πU"-%%%%%%%%%&%E%%%%Pb%%%kj%ijSg%fyup%*+%%%%%3%%3%4(.%%:b%%%%%πEND SUBπV2πCLOSE:IF S=255AND B&=Z&THEN?" :) Ok!"ELSE?" :( Bad!πSUB U(A$):FOR A=1TO LEN(A$):C=ASC(MID$(A$,A))-37:IF C<0THEN C=91+C*32πIF K<4THEN K=C+243ELSE?#1,CHR$(C+(K MOD 3)*86);:K=K\3:B&=B&+1πS=(S+C)AND 255:NEXT:LOCATE,1:?STRING$(B&*50\Z&,219);:END SUBπEric Carr                      SPINBALL VERSION 2.5 BETA      eric.carr@tclbbs.com           12-12-96 (18:56)       QB, QBasic, PDS        1754 115842   SB25.BAS    'NOTE: Game should be compiled before running.ππDEFINT A-Z:DIM SHARED K,S,B&,Z&:V1 'Created by PostIt! 7.2πSUB V1:OPEN "O",1,"SB25.ZIP",4^6:Z&=86689:?STRING$(50,177);πU"%up()%9%%%R-%D<\lEB?7H(8[[%%,s%%%1%%%%lf%rjgf%hpSiRfyUl*RAA^WK5πU"DMZB%s=E=[*W4JB)iMXq-IqmBE?,;uA,(GaZ<?&Dgm^vh6QWvR42tFuXXlwp>8QπU"voNue#AUbX[FL<Mkv0mb>lU?]l]qL=5(\a[4x]V:-?4rW<<IHPW$#k)U?=HT_eYπU"8GY#Na+=$Va'#Fg2\Bi-$J0GX?bg;PUY=urGELDC>7kF2m[E7Hb=#bc]Cia9R4=πU"lsh'qkkv'9.D0:bb=iam\5dF[>LWLGrWNH,Uf10I?3pD8sUafH1H0)jXk'79$a4πU"08#c&[8NlaboxK.%6]aM/Kig+/ZBH+OajMR9%MFa7ndJNXk5[NFHDf[W_jB]hsMπU"R?)j7>P6I5Pz8GtuiB2FXre])h$f%JrV,=[ZharImW#(MxV.y+Sk.[9jO=WL%/IπU"&I2W(m&od%vbv/&'I//%m%$wD8Kt3Chwmk<KR<I-1,JF\pn)_0BoQkd0VQb]&i^πU"\9x%8&J/9xcI-8=bMcTBSOQb:i%y]599Cz?N0;lP0S+5'sO[khwO$c$1Rk=RpdiπU"eqF.J(eN07pGlMm?Np&q-tS.(j:nUr$F'+G:M,RN%tS,[9]**xGNW9XM,wgMgW3πU"/i0TA*YzN0s%#oK5'oPA-\:Uv^eqsq^xeFCJ&eU/VrX0qc-C21&UMieILA$-8hnπU")901:YM9vik(84.HmSJEq7hTb;]%)K5X&b6gg%]u<.)Y4YMAl+NkVT6As/6U^EmπU"f9=:I+vYP#w)2BV$8BQbk<HlOjcRk'BYQ3OyEo(R5ZcO:Me%1)a,/nEl)IXWmR9πU"0R9xjSAf'X(DuWZ9;:q/M8G9+eF;N;WK=4tpq%ZgC')Yr;r/'D)f\aMkb2vMe0kπU"5+wG5RFXl+)uqJxjW+LcLauIm4%ge#3G9U0E+c][a(PJvt?uL*TTQ#zG]k/2ZP]πU"]5bxX)?CIW:IYO[7:3I;D[9ut=xd][4sBt-Dn[WY#PE;djMMseQ=XkKL]vYl*kLπU"oK4=%1]Fygh=&aTvHRUzO/Sb-8RB)eGtLR/k8;BY^e*SbdNF/s//(-.cr-9p.jjπU"&eck'LLE>_*<gBjI4a8N1fx#'(1>>C-xo0/gwCeEEaHb+j._xCIz9+'Y>5BN?%8πU"$/\_1s25R3Y&gGbNf6xu'AglMylLsQlgmD;c;2eryTQg'm1mmvW:9,ce0^Up>7:πU"*)0iSZNroEtBXhSX.Ypuv>DULGG/TCGI]MPl)H,=j(A%HG(9Z4*f_.1t2VX8%26πU"%:Mpvpey*ALO,XoA]ezeduYY)%8;z[)umoC(uhOR#+jJ^)xTeo*BqRzJ8>]i4HiπU"+O8\h&9G'iI<AyvTd6).[z%CS:tS:$bhE9xoCt_[(QJVxt)9cYOo9-V>Y9We7skπU"d3w.LK't_2e.nq-=ki'esX%)'xy%\aoA#s\2GdqV5yl'IN\Tl$N#ZUdP^6ld<CDπU"-MLi#ZI=[\e/q?=q7nniPXmA8P%*9x8Jdu4yO8=S.&_;sHNYg?xO[-D]E-p_mX%πU",agb#[fq8G*,7)0RUBhiM:1[s.quJaGxP'SLMFdK^z\4K*P+;G8[P+%<Bg8p%I$πU"[xwz+HW]<8)5bi<dK/m8NONtw0:Oc#8h?BT:ArAv8(:S0,GMvkG<&Q-I6nuX31/πU"=?3j,4n%v'zw.q+n&1OD.yl1bx6[GNgF5x9s\./e[/f\IlKk;6rW3cc+Q<L_^L#πU"6(JmPz.%c3QX9GEf1=#/qSyaL-:_(RyQE)K:cg]U14R)$,ic:J%XKY1Wtuib4m,πU"j5PHaL_z,Qb[vMK)=p_kf<N38r)PbfP;qnY&OaVf(4q$KB84\itWgd0:8E([\8(πU"Z5n)v5pW]t]zn=4:]>Yg7brhuvu]adCqb-+v:U4bAk1Fl*>Z^%aGuD&su%(5&6pπU"HxKYn'f/qi;B/,,DESTAMmoqA=9:Bs</lKyC#srz:P$,:^XR?.8<J9=+zWz&KB=πU"7jH9J<o0Y6UjBD-\iQH?4eY4Y8wO-;^x['&yi6J&7^NcP'K1xq(+FF(mQgEO]9JπU"rs/-D7y/QD9RMs_g['T5sOOV9e[TE2we#E/QoB'A&uuHRv]38%Z$x9Saq,,&kzkπU"jM):a6FwoR0L;4]MF,IG,VO[1fVc2,]XGMeZ+yZDn#w>[Z:*D)%h.,q%]lWtD7wπU"wRS'YVT0dz.F\(8'Q6tAZR?+LWG12t-50=DhZ]<PTSn(J+<iF$[iO1J96vaw_7bπU"Ou74X:i7[/J^Wfl1_tBv3jUJi))sO/^y<&9[k?HM7qwZe(oZZ4U(_5#LGB'[jiMπU"P,0^Nx&=;AA[0A5ZislU+QP7Eu.Fr700FiYJan)KNcQk(:M\q_'vAo\Uw*I+<^,πU"Ys0A5qcqK+;cIu=0h>;)G#M6C600G*%5<*em)54.P6MW_D1qxQsvYn5NvUU[)MpπU"C^+I0o(.]Qo*4L:jU'e,pEN.3j#6,#,H>*Vv)<dbHVsXQWl[8Mx>.Pt)\MfI%s<πU"k3A7p3x&&<v$:lmIq5O<n_g]JETlPcs*4(*._a3*:8T:.7J#qYEiXZxsf9+DihzπU"_y?v5<jvOi/7vEM3OQ=2(+,AYOyV9y)IcQtDb<('(^u.kpjUd5<KM(PbNDzjb*aπU"T(KACIyi'Z<Jb)P:1O'24,puRl3K%UxqpA.Z3heD,Z'V-#7%?vH31ueWC730Wj;πU"L)dzoj(4.++jJ>\?+M-.>o<jhDTFY&8M=PK>B[qL&-;1&O]8M:k(:b+''ebGb<aπU".5exQnE_3NS)##qGXL&aN'qVE'Czi,iJiz+8M6&cqBvP&m-f\&#lF*oSp*)Y??dπU"ChOE(OhoF*l*/3;fYP&m(W+1Gz,eVO(fvKKr(0&)8%eVgAG-hLPXrO0gr-1SZn7πU"U\68I12'%e)(80i<)sk(OaZqpbW9P%++'zN.z2ez4z2q(8Yv/z?.AHzQjTQ$$/7πU"%/pe>T/g5/cwl/Js%:#-ZCchsH5BD+CP6g+tA1,/*Nh*?(u25&u55ROK2N$DZN<πU"d4rTA703$/t'o7chj/HC)'j$),7#%(GoJy#2yP<&>&L#9hR\&)2OoR6a7PX<SC4πU"QDM_MJ=*pI(=.%YXt*LY;)\%[%3,\u2h(8?OG/Ng2<%NAM076y5A]+baqq.-RWGπU"_=EcRwpid:G5p1*myYm=:jTj=P<1#*U*p++#zF+4wwmlZ'qLF'x*=Cic0R#hn&5πU"?6)w0^I%VUS3O]=2d67sX[3IQ%6Qzi:1uS=/$*a-GyS3OhaXP)h3>$?Y4XOLlXdπU"T^8Fv,fc\7lDd%[Jim4Q.g<d-pB#4=Q'(0='JYcYW3CcKxI*d1/ibyj<7<T=VijπU"gt4t1TD.'_sO(>a+XEF=0(:q'42Mrod3+T#KyP<7(2k+5N&Y]a=()VbE*(W5\g3πU"aiZ?0uB]Dm-:iq;f_j\j)g2ldYQ<Ys<GVV;gO/W+dcIi.q0\TO/gf,/5K>60oH5πU"l+*9K:3QnM:-o^JTw&j,vAW$+r;ZC$SW-j\3W&kv1vqDUF)R;:RH[.]8k6NttYHπU".IC$T5ZXmmVs]T/0?e#<[YmtjazXNM7e:xP;kxLStb[)T)D$r<u*TOtZ+XPJAKSπU"aMU0YhPrAL4hipJw%0tbg4TF,vObRqS1d,9E'qP48DDrF)KqZGpt1soWiE]dYRFπU"*h6\M]DsKcRwXf]dbUQLFH(Q6]YgeY/4Lf0T63?H]Yqieg%HXJSZQQ,39<4l-K*πU"s)OBe#ZHZ*=]peUuLTZ.]lXYuYqyOA_kC0d1bZaBwZ4T?qs,\$71^sTxY#7<THjπU">8d_0&?1IHYp%F87OM-Rl5dBqNMU_je$mT<x)m])*lg/[caX>F#46[L%/].(J$iπU"RfOB$Ee9t#jz6=P;lNGc_l2ZTX1sEEa*b=[Ghf*.:Yxo/T^x3S%PRtrB<UjcDπU"1I,941,q%9Y+6\Xl3*hiRK6v34x[_\_6*4sX$Oh#3#WY$<]PTO0vnb-U-9R$L4&πU"PGr[Mp4'UiHj\JPTtNEj%d5$3Gx1Krs329L2-r&'5^.JpAW.6Pic?^JFiKf7x<wπU"92*9So^ec(jud/8ToWiEW7BA1Ol>NPdkelLYgg&6Fb('jrYu(6q[R&#_4)s;gNYπU"&'fNZVw.h%M$VAL<d*b-Qj/n#A+SSs'D=GrDU>=8N>V#DDE5LMQs=A[muwe[d':πU"h2]D6-mq2RQ_S2DOcCX7AuivK(QTUz_.g#&-'6VZJbXuZ59JH,%#AK7b,FQG9'WπU"2DRdWmD*PN(<:^Urb1<CB'L5e#B(&2\%V[XKq?<+-NV%&D$NsTGOa/Yq3<9A>^$πU"w9riVD(ue/+NA:k8fBo,<&a5\/>-'*DxwvNFH7gJb[Tp8As^XGVcI013g0pBOzGπU"Gr2=t4;5ZYG:-*v;8&^/)j*8+\*Y<(V_u.;2qBBFFf1mwl]QoV3>#V3?2OHrsf'πU"$MT\A:71pu'RH#069O,c>5h;52a(Me+nr2l/B;ppA5;2tOZuTL00&Xc4lwu1#\3πU"rfV&$O_4Rol3$q1;0RViFPt^'LW.yjbPU0-l1.k6#k[M=<SA$1s78_CJ$_c,#-SπU">.7=doyi2.7FRZX/2p9E=%?8)^;jqRd>]/=[j,eU?St.3'$IK+F=V.Fv<)#:Y'YπU"W5&=C]2.=ZwP8Z9x$4M-VC&y3e+/AtWI<EVzjp8GJI2fWNNgiuCf$/N4;nqo<\(πU"x=C8]bs[x2XSF+<W$8'8Nq<(dcYebD]OdI7=dSMHw=-F$GZs(YfQT%7MM%En5XjπU"EBJ9eJCRN_OH(Ewja/6:g44PB),MHk)nwNuNZ.V#:,v=oUb,oHru*hr_LM'>(DAπU"th3%u6+xJgHqQShBTMbIjYxQwVBj-vVQ50b1tZvh]Ym?cYHkeQq;GZoN<bykr]gπU"Q>$#x2/tpGL(ij.mkb##6T*hfa*iAhaS)(h8i5f>>wn5bT?U^hR2ghm(sjJwB$-πU"^]N,:)dGG[,F%Gi,eH9k53;x\^XCgb%lISB]nd5hmu.:>>k9C42#a,J/zrw7(3QπU"y].OL_T[qV43jR6KI4#Ii#[tx&oGjxtK\p?(NnSa60x^hdN3#NE]Mwb>J-^+GQRπU"oF=)v'^&)rD'3S(GFkH?m%?.$z(b6ed8e6HIuNR7ekci'v,4(NbY-2$vubi6D,uπU"EckL8^b_PJmA9$IUzmRt5H^oTl5^$Uf*D&n8ka_%4]kd,fQ^I&*SzCF-ouTkmM'πU"jD<[6pRM^[Z_Ugw>R/yZdn.1]ea5IIA9hyiVUea(6fey=;Mee&vXan<XSTNX;fGπU"dXYw5pKQ6sbp$JlqHK]+Rq.rZpr,6El$s];6re]4aG'^0fD8QPpSy_Mw%wCIBSZπU"nCK^Y9/SBbY1Tso+qE2ru,HIYtOn,&2fSYi)0*Wu:RL2L[CJ<&p0nYgWDtXF.IlπU"R1,4:80M.(+GY)AtBT-%?)M/nd^?SbPBV<:Cj8Z)qsH1)/MVdOZ::#,8r'9MV2YπU"(_SzNlfi+prujO%#Yk*6E:VG)*_/b#B]%r5C14=?1&6S/?#q<qR;V9<cM56_>u-πU"/[b:o),Uj'5YuhdG8Ss>-q^ruf4A-74^G0wJ?OQA#O:%3j:f[2BC;NBS7C8MtzbπU"vbQxM^hOqgd+Eu([:2pWdISZ9;9QM0,:S]S'T9\rXP094\W0sS[Y:[O?:q^AR25πU"<(Z9DsY+*uCW<I[<<7;x*<L[Q_jq,ZB1$'iA?$](NnNV;aBt2\c&2OgKP,-FT+&πU"D>05d,%HgVoWRXlFB0tAf3qHV-:yu>F*Tis;Uki)zxZK:Yvu7BtF-=G^09Fr%x9πU"IY0rduM<fO3;/_8;RjQXK6QM\TRYeX#.teX-X2>aqlb,-LSYH%c*>5b8kk=Yp:IπU"LY+P;tm7_[Q9etTLL];P2s5TtN(;Kqfvle,yHN)Jz$M(m>8:,&\qXm_%DV&;RuBπU"9K,9IBWc.R0VDH7\2(wLLfd.j2k9.R6$)'tcNafewV-qslL/,f%]vvY'fw872<?πU"2puj*X=6q.mt[_4V>m-:#_p=tPH^8no+UY$a,\r;T4t:2t6<Lc+2Hnmg^&]t0oZπU".l3+xYWc%J8c*J3t?,F-gxS<10H]B.%(ha-n9xjH?4t'H-O?*g8us\neFIbXXF7πU"DmuSeZLLI;:ZVTxK5j[3Q7-';:E\wkDwv.+2nmW?KN5Nf'>4]kIiRMQ%&(^>0anπU"U'>m9f.eO?Q:&b)3q>[[IhGb)(NatZD%PKlLOX<Zc?K8OM?)$9o#?P0e*5qI=tsπU"F(/7%t(EEl9ZPU.s'YP89wB4NI<03T/&m>\86Zi^iKTTGM9lR'l+&%%?3[/4ie_πU"%tjcI$4LF>dbps5E#L_XW\JE1Pd6X?=O<G[CB8uZsuj^b+0u\K.OO8KH1/1>t'jπU"1KfZifDfjTm8;>49l;D>PSqJZgZ?Y.7I*TuWA=0Zr[T7)1H&'N]5GMC/KN?2gq(πU"(3rH'<..Y9a_5-h1%&L&ELOL/p-%sk(YMn&:4eu'fI&>Y#Zc*R/p'=gfp)g0BJ;πU"KKp-IVwOp9ER?r7Ao]j5e9_I7dM[FRW+%#t)w1x].kH2ine>Zi)DqXS<f.N6]=FπU"msxYWqDT.i9pNtW]W;Z^N7s7de_g_'q]A';d/?VnT8_K#7_UQsu9q>#/=9G9==nπU"\0I?r\.T$N*1%-zfET8L45ah7k?anJb>u0#d1#7s<Li$B*b,t$/6Po-KnGt4$%[πU"dIrq:CVj&*El#,iE'#*KgsYC0/XOiD_l<LNtep(.wbN&rYNVHU)Pb-f(2ZTDN0jπU"96i?VoPB8V,=k,Q6o]_1:=R(A4$9#tKG4[E*->3d+k4]ih2w1tBDA1RC]UG]/.mπU"a>eVeg*<Fd$4]+pWKD8B)fDG48#.#B8E5Tml6M-sd$]i8'v?]QH#_K3\^rsX_S]πU"g\aBjaGTTJ^VV7O\?-RfqVV#k_N%[#.yu0Louo\-Ga2^V1UZ=iBb[f&A_FLp<+AπU",TdBB-PGw43biL.Jr5<BrZ3TFxAKSb1Y)Cb4R<W5i<;(snW2FgHfCkVRK$^v0*tπU"CE$s51Rb?3lpVthP'r2ihM'OEg-#A1J=[e(z6pFAXW>(4KqVPG\elU#>bAHYeACπU"T43DxG73b&A-dD4OVaEumBBACC?i0h;mhG<iPE&SfeaPTg)hF6]^JyW=O]NZ/\vπU"6G1*U9pK/M,GrwMm[3.jo^X&(]tkwSy),U])PL#Q?g;80kO+>;(KGw_J9[H0m'/πU"O]$HQ?P<NN#c*#3kEtNYtOT&V=qbS-6vA+97M>^$h^hA;vk3l;ah'gP7NKbtYKtπU"=u18b;<$^5EPRd^+<hm6BA^2f-YY_N<kRdjGF[$s^4W_c<>j,Yh.JYFDH^^v-gbπU"uJWr/GZlaDfs;EJ,eHTdBT>S8P5pmsI1p.qi6's3fs6V8=)zO%6$\Ub+gW8#6G0πU"QdQyD>,tp(+Q=+b6YkyX:\A9aUSy0l=Rf3Dp[F]VbYg(mokc(XnbT6jR1[EZL=6πU"fMX,0r-tFx1KH?OXw>uD$c4=93dm5$+QiB1.Gm$/Vo=ab\Z2YE'K_>*iObHA#_9πU"]smNt9Y3t.\kFuMIt.K*Q>KhtdURPT'EE*Bg70t$5w*ZD*tClm\2BB^h-D$1SC]πU"Ut?1_3fl,H,\VlrRTX1F2K/+-wp:>e<_>Fs2FpP$kfQA-Qij5[K^SMo_?EtBm0#πU"#mOqD?VvAbY<bO,Oy&J4^S:;Jm6)A\fB&%Zrz]fqDO1i.M90$eHtKK]nUEB.wZEπU"BFVF\WJDH.2A>g\L$IdlC\m&n2F>damxc4:;k<^A2(wmq*i%Y)'/2la7*f)NZ(NπU"n=/i>CLfGm+p0uc'%GQ$17P\R9.paR]2p5]>IHK_:9&kq=86HSgTY1^V<jK^#&pπU"'aW8IzaUBHVl0rn%Dk9[+q\0[0X^;n/#%'nrrngZEU&)QSVXHLxTI^[[ifFPJpOπU"C>k-%XSH8T4K#DiJ6n5i\nt)fU-R?*Y/m2+a&To-3V9IB+V<F:HIbC%D/yLL^$xπU")^D8(a?_efq&np_.rujYF6nb18aFET^<#]_-r00Mauzr:TLq,HSZ%Y&a.KR5tYVπU"6M_4xM1]jG=tP^d3E<G/UPdPa#2Vm/:31J_6#575.G4%(m3eKj^.Vnl1Jo[gD[NπU"gX%b43u)Jc_aOSDN8%7qbzIYMSo^S'2kaI8WaPhDH9h6L:S4nY'cAyrI0*Jis:HπU"/]5?N>WQaf%VODW[V6j'>xEC<V&UKffgSeLRE_P0BX<?F6LQjIq.IHQC5Yg>6(bπU"V&qfP+S0UHPtT/dSA>oP&S:\SSNZac,i&w09a*\59[%TOE#:$j)&A/tUl=wb8c,πU"sx,^r$E/qk_q9ux+oPe/G<FF&D'O:*Y4BVW5LY4EJ3)GcjDbXg,oU,5eYRWQ^:[πU"+xjQ8U;GqZCeo?$IVMB(WrTlYhUyi:%i1+:g^=pFlI;)*'4Q9?_+RbL4W[+)609πU"EOW:(AaCF6r]pVW4'TvsED9GmSO:<00.4CLQ:6ASuE;bg/P)g6G=sK(=%+GgUDBπU"<9r_aRS%.KnNq,$%R0TLtsf+Sc^T)V\#qm6IFwf%=0r-,2K[$^,rCM65Nkq+pPVπU"#,#VYM4;q<F<uf^dFQqRi8fQQ#T_pUCi:?6F1%j%9)P3rHGwSr,=YL4%9n;Z[C#πU"]o'.10=ct8Tl+<uV*mlE?9l337:8hbaDT>M:wDK_O&_r<S-_ddV'0k8v>JRGJoIπU"LV>F,WvVN+TRo30T<2uMW>MQ5[4*0*%YbUDE6:7yBM/k8&x.aTP;xhu:&0=KS;XπU"i[ied.)HX-Q8elxr#_[.[*esRY]jUl--itH0t9Rq)9<^eO;E6UM1c>q<e^L=ztZπU",A*eS[Bh1[e;P+myhN1t96+vBoRrWb&'sY&9%,CcDwPkN4AX^TP194SH*<ufT3*πU"ko4'W/Y+owc4eF:&%eFR]*(JuDQx/N^h.-=Z\\l-dE;,QHJ#o-FVPGh)l05=x8>πU"<,rj:/>CF#sQgTb<mnSFRAH$i#I^RbF:ORz[]dr0/GDfcdSEN_2V/<]EZk;hGs*πU"ZrFD6l575F]d(;gru'5V)Q%imu\f+kHDq&]^fNF#fj?A58q/xbbMY9vpaIPN91FπU"9vRD3Z;iJf\4cJo0X6x:<tPP:lZ??1(RJcDf8pFcxW?wXG:e46M\ck':uUHx5/%πU"o9\wuX1HeH3pD#HrVS9hF7eqN4f>T4Kl1a'=$%2m=gPVYR89:W$-:4=.h>$NnO^πU"FN?CF)Y$53ZGjJ;=H_3QMS[8Y$PT:;O6N*)B3ITU0Oa=[mHWg2T<i8ap=6CpenBπU"nu<rVJI5QOI*usmm3p:TS-&9X+tN6.D,Nk-)],Q\2>n#d,iF5K[L4s;Tk;pMHggπU"9hBI(t4tJU'g=3[l[J[Ir?+0xkQK6Y$_\lmi]7PbVgKw;s(3/Z=Av<-t'fXf*vQπU"RTpgAU$[bwUfCs/_$N:Y-3hpO.p'w>+2m1#a/?IfiGnw%]l>6s7#^eM38rqyj16πU"(S</-?k\EO'K7QpBW%-i^Za7hHh(GaCe<g-x:BWen\cf-I5]94.9OYm%31O&ORUπU"/Dm[dM<<*fMCo?UwcfiFE3a4K1=/b6EKd<mNV#c8;1^UoT$e+9u+:em\==u//WdπU"TTm]o8(Jo]d]S._ug:V73Rj-pa3'[DgCqt,hL_R4A2qBvORQ,f0*%YPN+K.+2'SπU"dCd>YF:I^1;r<R6&/iDL-3JYR73iaj<(-$jjxF3Grh&uIrwqv2&P'sQ+ST_B-NqπU"QKZ-],YX6>HPlASk0N?Udj0D=rVt&8]-96xs0d\tdcUA&vT<D;wPFd8nwdP<[rEπU"N*3+:vPG,.++HJk(BjW$/3P.)kfBFZdNa-Fy_g74sXJ0uU+]Xt>Pu=&+$0k[qVVπU"Zu7*eFV45-k-GeTWX=kbA#?'OQ4[%7ol(03G5cnqJ](]P>YDZFt#q;n'R;e):]4πU"BRR9OYl?UT5%(]4Xj(Ea2Vd2T3edp0\J_Ow,&r=jN]b<*3gO[;$nk[TTxT7w3UgπU"$+)A/\'uwqUJvBtnWIk+U$f>aX_vZoBFT<T<a)%^+^[zbb;0tJETaz/8eg7Q'd_πU"*5BgZ#S\;GESjPCg(?Wkwfk.^&ZcRkG14Jl%FL73B4:E>cw7z_H*EPQ,B0/',7pπU"59,3M;[3c3%h?P0'-;BcF_NYV**9qNqY^ZD&SHJ]dZLPCnEvvai:vV+E5NSlM2zπU"OSAx*8J4f[TN?q;<UN^E\(U04&/jV(g4G;qQ'3#kgR[DI[AzXOzQ%2$B\<ph'V(πU"qeA0v8VGjk>Do0R?6^+]WOSRJTuAglRzmQWtbZTmvQhi&+C_Sz=GDn<#=Q5^aUKπU"CoYhhkB*nnnM\C&pJflR;8Ac5F;p<fM0'vEn>3dQtB_81(E:);r(ZdOD;nE,$q7πU"+rZNuV,5_*c/?C[[^bPQ'<ZKre15HFy5Y$.Fy?+Cd3dpxlR>)]wO=\hDE&;gMJIπU"NwWfc>v/91.$ZJ>s?,%Yc_8o)8#8b59VLP\O)OlSaXe:'goh0h?mr].LU0\&e#.πU"wl\&=&I)]_?W^</m0MWDnYWRe;P9e5'+7qJ<E]0:yV4=td_%EP>lKi>xWZnX<jMπU"Vj:b%UGP<'x%z:ZA*$;*3(j%Chp'#RULY..0+XaLl9p=3R]y7jwOYMt(<m.$]5ZπU"Pht^c.[)[R:n;#1chx'u.5oGO^ZP$Fne^0&c2.T.SS$j4O\]=E.<:*0Qe#c;OxNπU",;S,8nKs%u+]D5fZF?7FCW]4.:MlUCdN:vAD<sg)1flf8PxDieoTuNosicB&dKtπU"ncNVum-t'G8S\+5bF5\[ww6)I2%xDP<j#u_HjzMBs+u;S7r?kN$c0E</U,L$;uNπU"0m*Txr'qFOvBOMcj/j^qUG#=MFPZ+tM_)sN/'Y;bOLtm&gZQbeuNC8hAh*MDHWrπU"QFFp[d4$_M9LXs;0kG0gBkbf#5X_qH1G>T2FQ<bQ5tgpUnxlfjP8ZPMjKPc4eLPπU"JGaWdg,/50/sRq;eG-&g3Ad((/.[gt4[FZ]]3J5YWfG97%C(v\nw.U#hY5kenmqπU"g4si:3ZJpsh4sA&wfsdultY3*lOFzgsz*gh,+L6)OP^Hdp+'[Gex/YE[,^_;S$AπU"o,oC('2##dsQG/#F>ympy0_J8tJ^<.E^*(1pb1zI;]0+9x0qT<H3Fn:gdT]Hi:mπU"3Va699fjE:nKuv#SO[2ZcN7oJpQf?%^R4O$h^I<]#/:]vJo_WWM2]Vg2Y*t$MN3πU"BAJT7l%zYyZ8PTxyNmC5ib7HYomG3>-D35mko0FA$>S>4GJ;mw.?,iv\E7DpGgPπU".H2bR+6#W&Dt'Z=N_l<lukQi]G0cV^VG%HIq]m1<?*wwDZx*ebGj\^*R?*p36(=πU"\AZ-%/Z,kGDx7i^R$NOiYmPRLkd.Cb:B\V1bbU_AY76mi&A&&ji(+=1Z&%CnUaSπU"7Zk_idgVZ][ZtBNk^q7qrVY58Aq/BR]Kk'0lUwRHXQ3Bgsm7-dEA&_<%1DUIR]?πU"%I^((;G)-WJ[AC6=6?9;^&zkgKC(G':%oX4ZX4hS76E[/r.(*XoJuI?S%an68^2πU"(^iE;A)gtH?UeEURdI$sAY4KJ[fRH%/5r.b:F8(sHAb5JAu'p5g$J#cgCB57=&:πU">Z<PvNfh9bmh$/QbbN1aDmmz]U%T\p&%IA6\xo>$A[vtiQoZ_hP&:[k*\u5]a&]πU"Y05B/8+m(/rnE=_MY.,TQxCa_dI(_K9eg2aGq#>S'LtsBW.bH;mBk,mIa_VGIS]πU"'.[NWY(crjmvc#j4l[d1QD?NWYbE'r,#Zu5fu=G)g&uV39[bl<vb6M?gQGYOz^NπU"sAAb3*gf5co,(7%rrBx,S+%UYXREx_HP?fwgbfo-Y#2^p3C?6w\#)f[_[Hmgf5GπU"GMq.v*pIA.X4m%^\tw8Og]or7jlaUX)&7k-#Y(8?Zf+3.rwKapAUk.5yo>4-=#UπU"QFm96[v$swH^PR,DUN]159ne;n&X[<2>^$.b4I;\GE1bG)4/h1)hKk=t)i#a4RZπU"*PHCfF)buKpiC=o<:]1b9ws(&<f=FlZI9(LIHbnhb8cZ*90ZTiiGF7lVA&NBsQ'πU"ThPo1(5GM';UagqDJAspir#76VGI^%wBc951a=,\/4>U.si^_qGOi]GYThA9<fhπU"hIRADLSJMhPcsfESSz#uf)eIZGo<,0oLUu8h'jFicUBEn^SGhs3e9h^t<i3iqeHπU"=IOl\baGLl[r/n2pwATZMP?_cw<cC1#5DTIYmqC\qsiqJc*^VEe/TpD^KnT[c]IπU"Li:0*TjD;D>v#;ADTKmH4=H_BTEsOX3iP,lZdAsw0G3DP6gipW8U8x4VDI;H_eDπU"=x&((4=AlNb5[$cy<CvlLmLLn[iI6yt9Rn[8jeZc)g<iv2\tn-XJZ<qQNrK4u\8πU"^dwAuxu\H=d\xD*FJaxBAylKCXA_].lFuNI7EIKf>PxuWJag0f+OLAY;wurUb$cπU"$cPQC#O;w$eLsDry<r[\HRvl:Ico\&B(nNPuL4HO#+92JabD]Wa1h96^/ob00GiπU"xq1a_SbL[q'u9H^*C]LyXzFTY\_B5rvn*.#8:g2)>KCG:bhXI$g60=#bxD/)lOXπU"-M:ERPx529B+0ct.NBJhh]KjlOY0=6X+FgIj4U+lbFgFxZ[l$nlluv8PNng67okπU"KX?5xeC-LZBDY2wrfk'ENnnSWLb#Mnc$(/n-mSk-Ta7^Mu5tz4n;i0;v2?x_PYDπU"nxaQEJLDb1_mu,:Q^M?=cbx&ET8cNU3OwaL//83YnIoos]a#P_2(3%B:F&kSJ_9πU"AC90cmo$NJtKdTnS3vp-t)IJ.sI%CkuGbE(cbV;[UPuwsVZL,fJcGJmwo_dvKQ*πU"ttt5m_k4^4^>]uh8xsZt(qZglMQ%Pa2cmb/_,>,NdddP3OeFt5umvF$Uqa30r+4πEND SUBπSUB V2πU"2X$r&RHF<hJ3wAciWQfKPN_AeVxTeH4\pAg,1)cQ[P4Y-2dwA5[\D3lJK+HoohFπU"h2jA-EhBEKfZh>mp5MCn]DOPN.X4v(VX1)N/GCQN:/M8?em*OhIZ>0Q8(Kb1d8WπU"G6IR_i]fpp_:w93_pI3RiCD&oCvR2;oadSo.bj$WMz'tm^\P_;EUf&fD6vMl88MπU"vZspPop(v8\8x,h.c0IZqIKg5yqttI+4M^zDX'=t&rL[(SuDS8v)^fFp5ZmFRc6πU"Uj8;eZ*?mN,2&Rub*R2k-aX%l7PbDlr%6e%,;V38kOBqp^[PO3B$*R+tiao,OM-πU"tao+PLHfrST^Fn%ni(8(pjOwoT6aY?^5d^?rX$pPYVc'.eDdHY8$tC,%3N,nb6fπU"Y3b)'y=a(^SvhuTvoS,b'(Ztxw,TlVPYt^ho8$/wRuuP(((iuLL>LPW-eVCGv)ZπU"ddd$nqS(b]v/]ZDtj>K3vi=i2You52-37Ih-..FRy,Xe+;gZp&:fP.Q?x/-#aR1πU"(.vsY9ZJ7/qk(]&V9AExT.>QXE81bwWMVm&*Rnd*;0W,m2ks=Krg%HR6,EC#[ZNπU"[PCNsiTN:rOi5VQ&5LMSURI'j8<5e:uM&uv^dKcY>JZAvKWt5GcKe5HK06jQ[(?πU".O9ssa;(R?<P&LJ;ve\G<OQ5yNdq05kGp>1j<BfNHHK;grV=7%C>u^42[4<VHP^πU"msu8%d0P>X-.olTU7hL*fPP>1LJ5,O>gn5_(bEo<FQ+&OJ6D\?pBGYx%3na54'nπU"$SG=-PR1XUdz#'(paF6p+(jL-JUHc'RR>L)8JZ>;-.:P$u..m;9i(i8(28AfMTlπU"]#3jhAS,Di7_pfC-i\FG(UDQ=z)S(?p2e3(/=0RU8qW&Aq-O5jrh&m-8onmIi:RπU"0.+Uq2vebD-Yu64uie;z8Di#39XNYf=fDgn/w,)>agk6[o\?#&dA.m<P<aLp1LoπU"E[Vr*lep)VavghTr3fWrM;_<<N7V*Z?R<'RlQp>XqpW(NX5XT*2GT.a_L^u1]j=πU"tXKlDkSuDphTZ?01KsL7J+e/kZHZs6*<XKC8<4XKFFCm)W#CH5'hckpQwcsV]b8πU"=7X\YaRu,\jdNC3^sM79SeS_P-r?o]Jfpha+g.N\Ii]c3ZwRk]1y#elt0]Sm\0rπU"v)j4tUSpqX%t%aQ/O;Xq>u3-cr*Wa5Pqz7fj^*&MHmwbIIspQaBcCR33YjljGfiπU"rrkmH8jf?*3VmUC1i4pt6VL_#:tv?4vgRcOO(hgR$<xuwvffbJwXut*77fjfmjUπU"m8VWSul78rs&80_K&TxSs(bb2A46.X\zv1Dm$^gsb$Of9uWCSDoV7Rw6jW+?fFbπU"9x*8F_DVQ;#:H;N'4G[vDG2=6URE><$?q<QUY7pl*n))G,+Kw,x>j2/Lx'W'5_2πU",$j1I/_QRG:;'QJh(0FOeF+IKk6:>CeMd9rmo'jjj$evl9/dsOeZs?/J1K'uJx>πU"#18S#[cgWDvojZ7gmD(UnrQ*YgkH35%ftCd8?8vq6lmuGtRFTUNr=V0to6$7>trπU"'j-2vZ=l&kDKfS_mKOXdWoe7n;ar-x0D>WoVwh_s#CCkMh3V?hf.x/gVDb4F1FwπU"WpbKJ4,Z?d5Ks6drZGEkXFJ_Naeo5%.L,M]FCM,7ZtWjbK9\pPQc0%In0%.4+U6πU"6LuZhq^EL^Q-jPC*Dt088./7InZ6PDAu5?8F+X]B4jCW$sQtFd4\YFXH_6v$MKhπU"ANMoIddFmPGo.BlGp6v>JI$;Nfm$CmaGlndC9RL0t$.'oiC8jBsCtMZ;vr=d%AnπU"XOXU^?Wt$w$poZvwEwkf#?A5mEuO4GHBHR7=-riHp3TYLtI_sIihZTL$98duC-:πU"g,5opCrW7G\H4didnWpDrVhab9&XNl(mJUT+76,#:49p8vp=OTJKMIsITqZ:lWxπU"5Mx$m0u5,B%)K6p6)Apbabp/C'5-5&9,OW#s1H#pov62t?ljlHkB,9W5N-?DO'oπU"N\cStfx?lv^J>muHxMNGHH+^Us,Twb0fMfCH8J0W$fGmAt'u[^^$lHpG[QxHfn*πU"BEd(r8CtbaH8dXM.-CWW8fge07R7IutL=[fd^r>6DDBp-u6J/EK(8SQD;5xLt)mπU"JK:46r08db\A.TLT(2^IT82I:TTH,V\Zs$gJ)OGi$B)_B^hc-]P2-%RgSnJdn&nπU".+u4ax;i]8(oK%Rad#EvQHaoh2ap/%<Un3pn%vR0OwX6b,h7iq3Q$asonQY(Y=[πU"ZCAsHAMn5nrxN1SN8R<-8mDk]cZs5^bO*&Qa>.LJLxJMw,b]0CjIX16uueq6-ueπU"uYXIYGf3GDl8[(BVjELGSR83'hGqc8xu>h=8\1qb:$Xx55CB+3/mjtWXu=_0[l$πU"nkaTUnJY$bf$8'MR>-]S?,9lC4*ZltdpJ$lY2^bE7F'i7%k*?+z+z(2td,IBW8%πU"mMiN2.i*I$&=w=N3SU^ibJHWrfMf-2,ncsVkRf06KO5_fcI;wI/MRfbFXD]voT4πU"LXj\O4RN1l\HYQIprhf1DYoNr22KEHE&,VMNhICbjo*AaDd]R+WT+rmN/G4dGeEπU"&*w#BPcsB:9FhJd6dmm_-80DdhiN:BWX*tJlxI9oaWokk&72C'IcD<B&>n4u&mdπU"[aTp(5V\_l0LSAaTm?tJ3c4d-74^rAtauwUS>5;I;1a8.DRX780UDg?d)Qxg7w8πU"n#rdHg6tak<gJd/fIMd_).LjhN>wpYU7nX%?ta[bkp8BfW;naUcCKmID%MMq/h$πU",q^$h6VZMoZn^3$vl*pLor2^Wau64Xx3j8r&<stpcY;Q,J'ex3c.mPVMC);B<5mπU"W)lGJHFT'\0,MW5'ACGLDsH$35ds?#TRv8>Jg(S\[9H^A1>_]e8D',CA#z?$)c=πU"9AAIALHWB3EK#a+ZGWwL+d\AHD]2%F2OK>)tY;T6e\0]kOhYXRYo/j*s+uZqqr\πU"]S=eE$[N%74G=$;_%hs2l\-80[uL^Yd2=otm4f)Y-q:]A6xHQvA]om6bvDPH35tπU"YHO$4.s3i>Ja,Wot^KWn]&n7[DXX#,[:V\6Z1y26uXkrRVyGs<]sBV4<[[g8jyaπU"Xd*^J[ue;Tp6o;Ci_2mAb.$l_d-XTxK$N5GW,kW^0/6&Eo^7PXU/5C<SS6daA</πU"2D1PlQHB<;7$T)vOCLn,_FTGV5?Cc#hVXW)l,')*n/^gLB)9\^8C&LY<QyX0IoOπU"-o<an4TFMy?T<elQ_N6IfGNx6QLKZEb_0B'kJG_.,YUe3tspF#<o=wcioA(VKGXπU"Q6[yePwDM?onF6.yL:SDf8PtF4:r,s$eib2_._J=bg?O_-DW_r0kNb3yCEfhAbtπU"d#=^i#;)o%4NbsnADL/EvL$5IfDl]ubVAstJGeo#m9KvPmPB%6MB=GB^a]B$](AπU"_k5PR7'nDmB\CceP+Nt]f]4cs8mCTTbe?wL%F&]y>;j%wU-V6csTsdwLOMAE%n;πU"lk%cffMBE/lmF^EJr&)Xe][LLo*lrO5;720a:DpVFxF&T'gJ.N'J9KY%?(t].//πU"FQ-AZP#dVDqpV>08BZbhu)_,'#40u:)J;PjKXc5D:+*TwEO$e.My9zNib#e[4h5πU"VZ?<#MCs/)]kkbDN&o-S.2joNe^cO/KaWcoDS7QM*7u^[J0W75M&^IfsTgvm2>SπU"yvLo=^O*s][dEQ'\T4Emau8_C7'SEmZ9w#uH+]hZx%V0,<g+0W-,x)\^GB9[K+SπU"8Tng/D+^P<4AoD<(V^v#yXb:apV^D>bmRc)Kdn8>#:OBfpZ^x(L0,ne9p)Q)ZL6πU")o?itKBw^X]*]j46lf;CSSGd9zX'uqk7p=Bmgd$4.hIQp?B;tzTA.o:b08T$CtHπU"foc^0uXrW8ORlC6HT=8AtjvpHUAOUWspm*^AL4'0pKa4lq,/9F*vN5:$0ag*8wfπU"pIFW=ywIrg<dNXgSq0U#^U3<Eb-;PJ0Mg=zQ*REp8PU7[Zx*JH3B9H^nuP<5JxHπU"d=$ad\nu\;F<fKFnilDO4JMhH;9jo73i/wXIY&Qr%94>UWC'ipn>SmG\%'H(jaoπU"m.5%jSVSX0/D>1hwmiU^n8HKP(M%7KvKd_6GW(zrL:5bUokYahA4s;+n#vb4B<aπU"R&7fTZp(8l9L^0=uHvi%p>u*NFz%_xQ&3.hl:QitF82'lw/p,-C9H[0kQgCpEqbπU"Y9>uMW\k&xrX7GphA1+r,96'rqA<a0N,)L_p2f6FXAsWMCEsN(ncHdeGVqQXπU"),apTUF%-Yi)S#y*\+2FGO/jvV&S5vit1&ZS_H#^a*aCf:e*vbhx$3erlec(M?QπU"dOmn%joKbt8j\rFF^=1))lT*C?x+p)sPf6XONd(i]yB,%6g\F%?CfNOmPqhl5:vπU"jMTrMRr&ehG&l[zZsdL9p$3)wK:=i'A(7,BIn9g5BQ+/uOojq70d2aDAU.?pJ9nπU"\B'0^g/x%r/w-G8H?)mhC=B0XhC\NWl9wjbJDYrL3;T3G(Zze.qLLI)k0bFk(sAπU"+0Y;03(e\AU<Yg7kNN0V#Vg=H=8H'YR^B2C0,B'IKWAUq*05Z830&]_m=h;'/OoπU"Oo'j;jHPs(V%j2Z\,'(S?>Nr5b%s8-*(1nTWzS'b.puIC4rq*R>Rmr.lH4vU?)/πU"j6,J3kccGILodF\U+9VN4Z8(7u/F^)kZSHMhDyqDi>*umAb'g)[qH-Ff%1%swEuπU";+NVHh'<68e)jqe,5z%e(Dr9Zh+/vsz>x%-PbA:9>n[oD?)24e?j9[83QCOpgR>πU"m+%&.OZU=NMb69%MDi7cO'S\.7.9Dh;BZ;9-Z4s^$E#Ygxa*H5]Nc*^_[i/F:i$πU"Y>,pdlDVSuD6-j)Bs/BbJe:[K#jKmIp'<gk2lw(K\Z$4D'g'Q*0VSIG7z<#TS:HπU"Cm&r41Nf%ee>5qiTC%lX^;n(LVOQ1N#hqpAHS-K8]*Upd.BlVsYILZx4(idoSDiπU"'e89T^w>)[2*S/X%_hDXB(dotRRUYeCTNEG#gK8kCQ,S>f40TFY(][]pv$%lJk0πU"<0mQv\4bTnT6HnVKlgD,TdPaLLsO9u^94>S1HKTQf_5thXt6BLjlxp>8'8up(%)πU"9%%#%-%,-/PEW>Bvv4#'%%y%K%%/%%%%q(j%jq%WSufspfQF,=<E1F%YoLSbCO=πU"*d<<I\:AGrTK,FB,]uv#%-]FYNbSt97v<A,VgnmEZ2VHvudp#^WwH2Mnhd0l%nBπU"XOc%;O%W;e;o24pD$s8W&R8pP)'9<e=/A+)is8q/E'a?;$]lY:5*u<%dYnN,s[AπU"+EG.=K/efY-f:OF]MrmJBQo&3\9/Q1,DnxV:Oa4u\O9'C[<cZ;O9QntUwle(fo7πU"kE)<+WcRD1QI.8)Oc_d<q/e&v0i&HD\[M%+,#8n<a9Fm4N-O_(nR4+TZ.[$x5fbπU"ql_%P*3rh;(eQ^T3eZ,OYX$GxITZ<oQ'G[uA=WI)(4rge/,3F?aYC6%T5LR#X8sπU"-6Q-MmcQ1x2h:)1-qYF'\E\gtRM6]#B\<2^9Qgf_Q4tp<do)HUTE2#?Au#7?B70πU"qtGqR.e>g418sQ2,$K9G,n)StG0m[1#HZQpDIIq%j89,-o$F+qUN(>--H]RLMZBπU"e=YXW0URA:Gg,>:;TRlaoK2Asn(P51+uaJ_PmeF2hNQN86JHs?w$_10Hh59o?t?πU"lCbe.28^y\j(1UQ_*QC-$+)EQ5:;EQC:PbuAiOfY;_M8e:5(B/hc[<H./]*aD.oπU"34p=sx*\FDRu=m20xw?]x_ZN?Z/Q3T'a^TF/7H]6/KT:hDazS#JE;O'F56l?m*KπU"/-v0:9/4e4%up()%9%%%d-%0/TPEV.2MqA&7%%uB%%%/%%%%qj&%jqX%SufpQfRπU",]&RE5%A/8tQ44Sn0;g_q[:TjeZa^$3QB*-(Q4Z4;W&b+nP0i^R[pr><,<hu$]NπU"Y:I[Z<\WF)BjFUAP.q/f.U<Eo0V'JM*^8eOJp8<)RzS0rF[F_fKc[;ld?P).0hJπU"8HS\dRALyo?#8%Z_5kYfp..;UIS'#P8_qcP%BVwKVn,vCaTS&\DiE3;_0[M\z/tπU"10s4*fd7G,/,Nt.Cv_+,C:AXa#G6Iq>T,kT#Y4=7;Tcm0$,#5-$T(C>gdj$h)t3πU"1[2CR.jU>#alro9Hea''Pk:F52z/[P:0j<-+AE#Z?)fS^=<:oH^s5Q/V60M4&,qπU"^o,/dH_+=DIZ8nVOj-$eonf\-e%mJ,\OpROjrsOXuoeJQ-OFTx^'KCzM&OC9qscπU"gWq;sgPt\UI[R'1]zAboPO^&(7&$*:$Y(q*En)4Y:Y$jb54R9kiFg9#)KUP..q/πU"':8g9)t%nHAq<g?7't&up%()9%%%%-%.UtmEMQ$U:&OL%%+,s%%%-%%%%mjqu%SπU"ify<fKRxV&(K<7,T$a$sEzM&]wQR%iRyA%6fiR0=>VOE-k5dGaR>d'B.RRoC&D0πU"?hh56s\[gEe+PBxWMMsmX_[eBcGW^%5+2Ap:jFT:lu8NvuH8wnZ(x4IHncDM5'vπU"RBtzn.fp,Z%wjOqR%NNI'0YE+;W11YYD1aet1<%WNk/>*z&cHDfuU(su_&d>0:TπU"]%C)]vhK7>5ONdk3F&#JGI/#6qeVN3OsBr-SeZXURDM,nrVB';pZu?gi$',X?ANπU":(uw);7WwqUlr%0nb9M].^K:i%h0[<k#+aAO;)>*K;5D3ZOchi[79gvgEu9'4G%πU"<?JY3bWo(p1U?.?QiF$E9e1Z:dO'u?QO)F[,9=rE:O)&DhiQ]e:S%s&mW:5D&#jπU"%9:-D3C6)hBb=O5\5n(3;T)Y#n+B^kt1OS0hE<In/+0BR9F+HWl8/P:7+bP?CjRπU"<)Gq:OG]+1m]^?g(9<2dFMhX7/Ig^wOF5'c)#7gcr?C?KQ6?CT3+U[,DGeRxrvVπU"^:n$KP1B3$L[iMA5A>(ePvb#TS%%DcW.&.K3DN3NZ^%;c:.S;if/#cF-%2hJ;(xπU"pnERE.l9$(+e2O3OQ'FVAJ0ch.6BSDdc'tV6id3x21sLZNpTLDd26xD%Do5B(BKπU"VV#)61'9Pe1B6.B?tRn4J(7LVuO)Gxil64rJX$&FK-(rl^WOkTV$[W=_9F'KoQ8πU"X8d%m2Sh11okH>sBaS-F^5Oe&_26u&mtPRdjZ8-P^_HJ+4CZD;/*,w+KP8[w2lwπU"m==t?q]+/loUJ\LO[31m3NP1=xcF_O05?v3j.Dfe3xS+467J[G8y#QwX=6v]c/MπU"OrYQ7MClvff_+;g_YPDND/%[VnMs8Q6e=hNmn;87kCFGK(T#5IULonZ?#&7)KKQπU"RLf^\^YtIQ'2Y[:GbT?5IQ'\2u21;Kb$n7f;5]&.d7+C:pl&I[x,S?+6=cr-cm*πU"y5UPl=<W0n=7b,v+SCe)D2s)t/SiTP8eWo?kBRKwx2I6e^r^d0WfUf?kUFKAqR[πU"M]]\]-vM][Je'2rW;aUn7?l#wqE;-*uJg<q%lZd[Y5FM:U)6C\(op<pCJDNhBB=πU"#DGoiY9,PIL::g7cz)G2H4F#3Vj.>&^\$?dM%e$\O/0+[/ZNCjq1OEIWt;-rr>PπU")*[GQ3JBr2r\rH0Bs*/M\[s_&;#kkF#LL#%^lllLkS/C*MGlkEBuzr8anIvhHtfπU"_I\I>3n3)F-BQOxRj1N76d^%u*SF(.ioW]f<P?M08C9<EnIAr8bA>hx)-)]rt&bπU"j\EJ[M1PgJ?RP&;=Cn;g$ZYuGiAiK)KafK??%z28RG.+I22+2_we3r,Te<c<;H(πU"$o;7-S<r3(0)nZ786x[q2*blH9bBR5oKfUMK=&2+XxW],I]3dGhyXK7p[=UQH-*πU"n-Ts;=ABAkAQ2Ut80^Y0hjQIi_[&vHO]-2<r#2VVabFaMYcbeq#^7=?SMiAc:+#πU"g8Id%h/q)]<7\_[yFA+qw9\)fMIO+MtQ0pAbcw4[_VoLIka9U2A[><':>^MW_9CπU"5G]B\=-S1NRC.0<2MbHHKhrhj%SO$7\pMD5?hVUgSn3eQG/7aeKF(12ilBkEQjFπU"U<).5<,\A5Z#$(iH9wkuDZCC?d#8Z\V5HWluFa9QQOKt#]-FqQjF,dYEiRBeUGgπU"EX3Y=Y=S=BH,&rj..%$PRe1%j05+_rh;b8Ed%>1,8nSWq2n3btna23RW#?7Kk-aπU"Zmr_nLtllHgdt6*>N:r,T=iX[&<&j&H.2l>oIbOH/d6u,FZN9FsOL:XkCjX>I8?πU"FGsXVc>oHkgSkboRAe=[$4T9]4WDLI\\2>q=%,RIy\2x3&^<MP7OgvDj:E?/j.<πU"Ke8rl*%\\$d'*MY+d<l8%pf#lH&;.Zylm,v[VxdbS,sD?gdAfg?6h?>jWPem=uRπU"K%tDe5ZiQNQ18T,:+tL>(^pkaQ590/5y)N)QIZ;fwbJ8*gH;,?*3cs:3O_A+T*<πU",8G/fFsRZ*F1*JUAY=NR\#pcaYe_&*r/=R+qD:jXW1ags;MzeWASqG:id%D0?S4πU"NKgiAz^3./Zl=-T3JSFuB9?h-N$bu.R6S8:^N'XOo:SnkQUgNCk&a;*t$$Lkk/QπU"cAeOKDM;3Jgil%q_XfM/8n>p6D/qq2*ZgRU7;JcL_5=:Ff9QTW98BO%;ij0DFkRπU"w0Sk?0Umg:2aN$W72<-5WTKOC_u/&/K>rT5,=LV/R;5AbRBR-RmL.wP98Ki/LqJπU"JDoDq;v:r4NTn)b+p0aeU:)ZViT0F77BWNfs2\L8$yt%*Y^/BUfBaY)u-y;eqUCπU"Ac++&(S$n<K*BLw7b<Uwd$9#TBRI]w5;#]BHBWvcF$/L2YVgs<W0c7U'Z(u%E/rπU"i,cD_%O5bFa6o.Ok)j:cF)CJRov=MJ5b+PlO/6R*2l.c):r:RDg-[*SIM6hY/F[πU"*.ygHU2XlC$b;,X$>P_1]GF?;96=bc<>]jOo.26^kYaQKNE[CQ%WP=[$X(FGE)cπU"L%j.-$_P9lO3F:q]]M+Zd)FIRlhE5yjR&v4:lP'l4eE;tea$nptpSHFNW1Pe_&\πU".Z.*/cb-,j(:$+..8MF%6=\_g?fOKDI_qCMl-aAE_8RgQ#hGpDA5,=<teS[FSE?πU"rOqV4GEhs.:vi*pRd^=_$%G?W)\L\ARX%V<>ZbSWACFd?Cs8A;3*:&A2hu,3lokπU"qE-^g/*FMT:sO=#zLA=DGcVVQV-]CbhRt_4pA94lgTg>J;TGRFGJ0o%RlpvwT<&πU"gjYuDfe$JQoephX*A6VL0],P6nURCW4F,U^>qi,Uj,qm1bpNt]m-*Mf9G[1:$5;πU"I$*wI<k4v)pl-/u6CMtt:nz])EV<<>$(s\HRVd)%#QOb-&4lTA^?*LjUjI2)V#jπU"0gBG<Ysi\*rc>W1f,$[Ok0X/QVah3pG&Ih)*RKs[EU3R\RNa$o%Vf\cMCTO9OyHπU"?D.OggG+&0t&7OOu33mOQf>feGA0_rkbe4U+#r;DT>&6&IYh<z<d?ZU<It.Z5I.πU"5E4pe4Bji]$(,=9Y$u'..FnOjR/o0RRboLlOW96;TPDU(1yH602jIJA)&iPuFQ8πU"e14\X^pctE/(&EGr+g:f4<L6n4#+'VWh/s:^cg2u_6UTTa([JM*[R#Mlblk;bb.πU"FRtZ1xr/Ls-L:tg<ltoh(YV53g;/%6[t^Q2HQ1K-&f0TLBWKJT6h*YXXSUG\5/HπU"#.rtPXAobPM/T$U;XF\<FY-\T;0hi\=)T)wJDF%I3GT<iIc3sJc/hD:>t.1vyd7πU"6o.z1a0-XIq];4s-fo?5sMUV7nE^TfuWSpbdN0tfp/U6H4#0*/+6\hEJ3eR;%j.πU".9Jc4/djSJ0rP'?;0<$<$n4v%q+B8.2F<-FAoh)ad9]cJh\&ufbpJ8=m<5%((*KπU"AZX6=<O's2,,A2kOP'Ytp76Vn*l0aZUW:uhw=ftUhcY]+1N&s=3Z;$m_=hq>9.tπU"]qhcYeiA6U8N82N)mBj28nrhW]]DNvtXYS*n[&X1Yb]RBAAF=eLp5DMNAToh)gWπU">Saq&[OXU:D1f^Y*5[R_m[A/0]L,udpLe$i<dNqUQags)Q+DZRX2.E7qyzpxmGvπU"f/_4fO\X;s0e%%6>Oex3K58-6%iXa#VqvNJo;Ifh:)DOuW9y2b19/\Y_Z+F^3e6πU"FH3EtqHXJS%ls6bee11$Y]V_%$Pd(jh/-GG('',x87&c=Abpvp'^C4C7X)c6_HBπU"o:.x\0A%O2/U6V5/Y[yKKqpo(__zHBaHE?JoXCDd+%R4jqoq%7qt7_F$43C.Bm>πU"vMEDxH[etiNNKWu7)DD*(NI,%y%5UA%7.=4A$BDEsk$7uxF&M]^4Z-;/Mz5fch:πU"u2Eh,-C9f.6JY.e2S?&+z<lY/i9&,Y33C'eotv/ur%o<CMI[lj]dF8EZ3%lacQRπU"kDI>^V/<6rP\worfI]Y3gEOL3&GCa=d:%:*oUDe'aS$$AdE?FrQBRA#lJcohBRmπU">4cP:5ESJoWp7h,^RcC-JdG_G%z'o:=t^p:.Z)V_L005hVa'(nyBHkufvcAJF>;πU"]RAAS3rSY4wvwdGWo,r0jffr1?>,$t-iP;,qVfqfB%=gWip<V=4DvBgs$3RBZpgπU"V1IG'2$</\-h)G:cf[ac,T:'Z0,AS(?\CZYbCH;bZ=7e%eCA94V\qM,]?iZ<>BbπU"FlG:beDdL91LM-^qj#Wua-smb^8YT:P*.,3:]q%=6;j-_)^Q603wu^Xg2Z>D8YUπU"WLG%T-P2%rti_<8']b4h/x\t9s<=MZ^5L]-0LI$t'c?X':2EDoh)a$k3oDzRe5\πU"qVC;%5aG?;w?p\:>w\TF'%sh=4&;m(/jl<g7b1cZNvBFFRsuw[%QZ3Vg5d_mQXtπU"JPEEb(k#ah]$Nb1cqzM-LO2l=r*4RKMr^#^r'yp&=pCFj,ZebZG)ga<&j.-l*;YπU"4$4BFVmlW04B4MZ[;'<0HasB=qUaW=$(uEIxN?AF$ic]H&c'$mH&$HbbjjRrO46πU"TCn)sv,L+Gc8K+:EA&]kmtvYYh&I=WpQ_<[DWOd0N&Ht$QNaepAZdGn2jJ]9#z]πU"TC3;]r1%]9Be/%Y)G_+R7JBf^qi-28YCoa=akHvXg9sz#pc1NMqqrw&Z%xW)2yoπU"rbRI_cMcHJChm=Qa[J-)]qXixE(U.tE$Nq7SJ2Iq41oC+YHR39mOrc7GYB=bl^dπU"B$e7erj8O4vn]CUbuM8Od_nUn^V^r/rlh&VC4vFfwzZstt#+SS2+Pdg6y0:J23AπU"5PR9arLM^4TSwHe'+rY=,$,]3rrGoG_tv,rnS'Jr]dBdM54MLEqqm2sB\ea))paπU"6Wj9\+Lt8ZZuDBgt0]YRM1[?[Q*-SI4oUL1bUo]nbSpX,dq#iPGkSS^v6bRB4r3πU"p^mf#nWK>jBeO]khn7?e$qX8#XtQvXk#;-R*KF'fi.D8nYX\-<UhtOms]7+75'+πU"3n$*sM]G*+i^<stAO;jPJ?tS??7<]CI.B<B,\d]jH;1JJU60>got]Z)9GpTR,;'πU"#[bL8]DH/2r,)LWLj-ksy\]Bs8QLp)dRxhFL&7v/TZ?gugHg']Y:SJ0t$HGrtksπU"]4n0\D]6s?T9B?pI^*ZHp,F[)iL'GQKpuWj5^VrL,N_;JQ0eVzH=tsESa%1xb1bπU"DyM)b#oB/#tile&1PbJz;Q=>GkMNQr$&MQwm6?>Xxu*+(Ds?KPnabL?j:BO&=r&πU"rKKK4_jE<Zf)x-=-B+K;RK,LgB7kJ><_3FzOmiC)Avs<tFCb^D'CQ^tEBx%*kv<πU"XQt8,6WZxrNNPUjr']89u\^Xw>a%+k<&G1M%<#L_<t-D)/EVl\N7bcd4_0L^OQ_πU"vwpL;vxsYbUnTfu666b-Lt8psU6o3ETz&BORO:0[$=YeZbxinUDw)EC]q,y$:ixπU"oVImvWdMog6=>-pYe*)*hn8_?TnJ_WLaZcBQudlo+.TTw\W-u9hfWX6K2&c8<ULπU"P>&id[uG2kPHk?:6%V.iTKPk$INq<hNY[:KzgjpX&JT+#-klO&%5X7Eyl>OOdtwπU"sXeID9fqO.bBnwf7\(+X0rgF[:e>-]kBo;Sqae,Ba5L'[>ul%c5EQxn.)GWJtMvπU"xriW)EObxG]*nDyC,h/pH_5;m24tz+oILq46\c$e>$-i;?;^q%x[]ec/V[XS5SZπU"GOUTO%GtDZoe2qpqV5b:^:4=L?Y^_JB&BnsZ$-Gr&B/EjLd(,V9_?0WBBakAF^<πU",-J+MFKmAZo4(^UjPf,w1PfQ\l=wRw$X\Yf#D8ibNugUr-YYkuHMX1Rr(0V'bkGπU"W;>aoUu$;A;f3CO2\yZlJKA#Qep%1lVBSXl;k6I3'ZNUrNg+4Sw+clZrB'QRWBhπU"gc1';6>DxvtnO(8Zcvv9cd5a+'RN6bQ=<As#<=-3^q)-n9%([a+?ZFB<r$/=l;]πU"r5JqIkqNG6c(8N]RyEAV/&DbXa.kr_KElb0$oNXCXeu-Mm$T09A-R0N9Oo8G<I*πU"(]IPjE8ahO\(%nsE(m%^x7/2q.NFC'LOoh*IF)Ata$^e#k%-MH&R-vTs?9>dCurπU"(RtMso/tt.ZusssYF#=A,E8(M<qL]a,JYcz6M-b3DRghoHrZ>J%W(^6\s.BUhJ2πU"E85;U,sgn:-dt$Fnc(0_QLc9/<is2MZ3cCS=-_^0L<K,j-IO9*TAF.LQ*<3mXOgπU"O%L'oiZ*P^(TO^X0tuV%/I#Ub1S3<T%i,?<#yXJ,*aZ[kGAZg.LcZ:u<=+G*$M.πU"-Z+CbX/4D_QtsR#>m/szc<;bd70\AWOreZ<#Y9-7nRJ1J=*%%=yk'jj(X\?FGG.πU"3+&go30a;Wf1K;A0/V)=MpW<s=6AY#*DabCnP<2,'8+gl+2K]lXLBjYF28ZK8L*πU"eng<*T(P#XQk51>wYu2wqFT;9HlJEZXVz?oZo9=0blASQFK1:%c]8l\A[lj94%)πU"if%$\1[ir>ZW[8F<Z<U5_umkO3c-5+3Cns1e8dYJB+aOgsFgX/u_N88Q.7:ENpOπEND SUBπSUB V3πU"VJanlMYo2>D?32xUGO+Zq575=:^[f7CYBaz0nwviukpavkJ)4KIT^:ws*\^D6b4πU"CnlhhaSh8bNn.qWfTMBbWi^N#.j:p.xTQVstfB.CjE^):_7h&pHt?PV-IU_+KEGπU"fZgO[_?QCiDfxs4W3'+?o^DCr3KB6%p3I<oOJ\jR%ah/1X+A;sb'A3bK2Mf1qnkπU"nJz=f<e&dL[tZ>q0$0#js*SE*]f.fB^%$:mosldC7q)8fM4hOwTqj5m2p71JLCgπU"&=#+*M:kAWH<yWAKRhf(%nF>dONP5&(-NNCz92W(z4yk#vx1b97)e'#IJYZ&0*SπU"?(U?zl^41>HQ(?xta\h/iifzk3PyiqGj-fzW3zJXa2<%rX:P%qs6+oUURwbzlM^πU"y'=uTNP1qo]Z]53iF*8izpZcSN:B[<J[YzPK#H&'s+j^'tfPyVq3k3?:+?=N8N=πU"Ru(n5Zst?F<9z/'MXlCuwV-wovOghL?GtV,/q,KKTZmyanM>80cqir0-/6PBdldπU"j*Bte#ol&4c;+_dq9S,:utp)w-ipZewP:v+Et#Psj>>HDBO/'.>*,.Q&HRvR(YaπU"vu(0u?ERqozm14dxprp:a7Ou(5CVS^d-:Kcpw..BfggsP1O(niho./:q+h+dsF+πU"SHe%QYbnpR=0\b#/+kWur8&mpY.h8MEvIvuifIAm34-&LhjyfiADBh[R9w5guP\πU"$(Q9HnpYS,XFjX-qXlxr,;Qt4=3fK&,=2a,e^FO<_jMmM<.Sc9NNMlaqna.b,]3πU"3:ozD2-,'YpqsBfn>vpk0$Pd%((j^gE6A]H<HB[I9oj5LQQiPt>xL9X7P:t1]pSπU"bY?vTYR&R2]/=(;EFI[p'3GPP&nbgwm=KF_4]]R,uaXB9gAY++wBXJ7$J8D/z_PπU"o>YdM((J699\#d(\Yk\UA\Yevt<lU,;80fJ#e4sFppn;Nj,gCj$-^NJK*0m>W+]πU"T?2vb4h$k4%B+yX&gF7yLFhd_[yX(#4AYkeA9v91bAW0;5WBHXabbRCej\>qFooπU"r(s\iW17fte#:iMl\?FD%o=N%c+O3,=MV*p9j5s5H8[1\r>#2[IZR0XFemh=;RAπU"e#EoDC=qERXK7#MbR6Y;lTP%qdWU5PDl%)p\ZkOar*yV7R0CFXC[0=)i>+%%\&FπU"+C$xY0<j*-u2Q%wJtZlVEmATn7DiadBX,3Qjo'RqIMU$*_edn2HF?J[JV[^4Q[CπU"04W5a$%v3CM:UU^8:_K<'Re-6^Lf\)XmA\oNDEqy>RdmLF0A%^mcyR13k]&o+=yπU"qGr::eq1H099lKf]/hWpN+8=HcD%24#1335;'C8:UH9k^]m13wgvc9Aco#D70dwπU"6up(Qm)ePvq>pvP9Y1EGc&D(o+(W;C?0<P(L5V?;'H<i^:%APH?H#?XeabZkSW#πU"Ih$b'H&'DZG=UenvM^IYDto<lv=aQk<=C0<l^Ti-B_Z;=[IfE['UP07GH8rYEm8πU"L>jM0b3mVzF\fiy,7\hddIE)+-\]W'x>?oa?::N]xM/';g7-:a_+Ip\YgIUIkEMπU";NX%r2j2^&vE,tVqW?Z?3T.<jqi[*Q>(9u]06LOu]qhmCn,^%nW)4Xue0B[rhh9πU"kBH5:p2gFB#AeZ5^2#]v$FSh<Ij^S.CcWx\FFvZSf<?ZYb_2+#B(O)%%bP=W;1/πU"\=8AWYah:$0k*QP_Y%X2+;-F<fgGpWBwtpZZ%HJi5U9E)P3qhZ+#)6s0EiE$$mgπU":tks]t[lE#UlR(QAaPi+6F^=Z)Q:3+*<Mh,$L&ZFAEH/U-;OJPgTW9/]-8X=GM9πU"4&pHHfO>6Lo,0/KvWAtk0bqLL8E9DI8<*.BO>j5/k+kF\PSe'eF?3;_[9;_i?2lπU">rH\r3W_3%tZVT+6h[B+M[[59oov;$TclJ:)[3*S,MlMs9>iQ.[,[i331#jk^&uπU"A]JR8;\x#Ls1r.9\9/e\J2+5A%9*/h/auuk:l:\ML#\-oOUM'WeP%FIK3Mx77QxπU"]b[mW;^%aklh*F'S:(HS1W.fG5KqZg\kA[LR5YsM1't2)nJ)FK10qo#,NU=6?QUπU"C6?+6vEEmZW9,]&#wT=I4Bqh4I'ZGQ?#(RNo22[BI=#6Uz3#KRQ+?kMmB\HHHmrπU"w2QXqyQ<5Cs(le)Kd5\F;7stS\\PGU]4KCASsI?6^_SJ;0,EIVc:6*iw]li2^JSπU"Xx<V(zGc5(?D*cEtl&b:Dm?m(G8BP.WqccXNTwFBjL;,nI%c%k&U(:-Oh%);X$kπU"+dZmyhRteFS'M$]64JDGWM)0qe[mCiME.XO(]&6BULKKil7WW+LK1W_tG$GVp$FπU"hW[Nob=.n4Q?Z9b?,Zn]1z?Y4oFA?,AeH2dfa6U:5=;MF1%m)tm60\aFh[#Z$ZZπU"V(d,\DrXC?[%JIrM#uI0gLY6o4LH6eJjh/u4BKPl/4F*J:K];]PxWpPO6z#C5HsπU"fbPeE]^SAZ.V;IHbcI[zOo7Mh3Wfih(l^6Jpf+m3l9ab1i2rN-'t<pQ?Z>4+J?pπU"hVtS>vc#*xmj5]6T&R]Y?ev>J-h$/V?H?+93eKLNrB9I9XJ^rgLpgUjrt/F5,M\πU"fecw:4B[R:#3ChU9wq'.8Zv7ol*>L88t,kaI5R9trMR-g,ZneXC;_=oBpD5xU^kπU"mW'443pCc?c?LNzt(nR]2+-7'JEIwvce&052:pkxp64lAq7,2:54ug$V6$fLoHcπU"TqbA2Igm,m4jD</V4PXHdZ(==?;wU0XD)AeG29ERw4EKEi_Y%/V)+Pe#wQB6jipπU"0H*mhfecYr\jh-AdYPDDy7D+S+UXAcLpm\A2Ow]wVpz-oa3JrVj'rmsV[xeCnQNπU"MSk9EaCR'TG';((4q4(R3]b\A3K&*]0r$heI2MF:^hvQk3V^3u2V=F%Zl]TD?r[πU"'e9xu>=Oe6(,GY^U^h7ql=Yb3iK05SOD:DzToZ13U:P$$MNW)_^i^KJ,O)nk(CpπU"LGB:c^hCFo^zkW/bJ4>/^hCNhEE\vaQaSm):3cmALP3f#ID4<^2V3=dt$8knDaQπU"wpyC?co1;q4g%Mg%b$xHp8DRIU*&XE,9zIZLspyC9'JWTBnj%(>X8s=w9\nOxjgπU"YpLb_B3#(9wF#s2oi8Uw>?n^3R]HoT\iQ-V]pI:&m>X%#tkYK[#<ctlV65#9cXsπU"HCd=PL0OI0cMQPcs[gN<&RxL7(Bm3%)d7cC.O6%PDdso:9Ll5X.N1R[?QnqGJNeπU"<FARKtQ[Yj3A4JL$GyB%q2-BrC]RtuB*Ltm%c:RtQ>Y5-C)mc,9*W&:CPnad>L>πU"LLLP%s[R>P^_*UY:P77uuLib_Y=XIgCdoCF-k-#)g?W%'rC[Js2'c-'t%+VTd2&πU"..QTF6tXFK&t,=BF-tn7_L*fQv-uk&_L>IL0jav;uU-x.xxQMNCxvG7YU>HOjelπU")mvd.[0b/Hx:yks9&.vtdtlsxa=c&(<l)Zu=&$#z+WVuc&cM(u_2S.p6crpMF3(πU".0BFZ%wod4om?I[Z4iXRpM01u=bEPY:mIN;7</KG,%vR'Kg2A9Omv%'abb:Zl-qπU"8vxOYi/8'L&5rtRq.mos6sbI^AfT<Bn9oH-jw+Mr<mADTDfFOhNLQje2*k%O:FjπU"O9s-d&#ikICL^G8]FG2C[Z'=Nlv[sFg6*O/_D\4?HISk+dcN#v(9$Vu=^'[*=O0πU"3=5KJ(Xq4)I5K>h8jm*D65kBE7eRf$t'[,2KHYT\*cX,YKRmA#b1Npqh4D=kf+8πU":)ZnqN:VI:R*,k;q#pkQ#YvJ=Oc=Hu<Q-jy>'p\b($reeRpY1%[7QXA7^>'uS;6πU"tL^=2CQ.sicFGuEGGEoE;^%YmsQelO%4FG+3QhppfFEUS*/;-bK9md6.tQ?K]TzπU"1J_S*T4yvtUX).;LNG55\fKxAi-;h]F8ZWokeF7d;(:&Z2p8E+J9R+c1'hljC+0πU"y8o.<GGoQE,'n1KUR_g#;^W,KAP]aqr2Y5_KiYlLtjbj>[$THQkB*AiZ\Llg5HhπU"/(PNR^2bRAK;Z-s.HC_9+Gmep:)HCknr+m;hrQ^(\\axreX2a%[pV1QGFIjI^/5πU"fq(E[aYBH_m.bp.v0GJBsmq^F)B\>ALJn.I=ISU%sLIBeY$;6CNq_DCaMQM=]KBπU"^zBe5X$,gU8Yk)hFi$rQ_ln#V<-&KD^p7;=]S]n;IIqO>$4v*-mLRiHnznV+\$'πU"KHI7pD6mv_L^%pT,%m1,#dtE3_H2hUrE6W%&%+0E'h>yKP&g^7=KJ#$PRbH5##,πU"=L.kkoMBmc4H&M6AP.BTmdtNju>MZqKpr$BX^l>rQd#^b^md$5xEF+;O-31pR^0πU"u^oT,q^04SU)O0aN.SJ0EaJaVV]$_9qaP%mPxFONETW7/3=jMN_1^fLT.s&-ghjπU"_b-79x8T*bP4eXfaWMNjQ#ZTA3WZf/-f)3HeRfzD2e4QNjW;45[\e).7:MxGu\uπU")-h_ZhAm&qK?,0$G\.2L$JAUDimJuncND9m:^PA4VtEhJ-8EXe_8I&4mX5K+%z.πU"-7kQ]D[UB-97GIEXQ0h4P%uY8k'(w^hd9MB&5Q).*Cw;'Y-_<oI//.4ji(-_jH5πU"[Bf,&2't&l(_TLOCCgI*-vh;8/WtL*_$kPMs_H):\i:e(ra0dZQY[XIUOcrr?umπU"a$FHB#S&7.k=TZ:Q(rPj;#_l3lW/yRc%4IZ?k['W(.8mqNl-55%#+AZlZBz#l2iπU"f,%FHXe^40p+2F?HZJ+r[K9cw1#7Qyi#.OofL8HrGJlN5rq;)d=*]K1]=dhPU1dπU"n:jYxd[[rbGls3FjsjKu\1vXroP5DZvNMAi+y22UK\4K^^^B:E=q\<(l]rhs-JhπU"'P)Fe=#VLO^o7%+o/49(Jx6s%4#mhe#DVGkULbsuk%>nbTvx.W*vvQ2>7;udC:2πU"eIe>5I\gANIS1szM8n/26rGbaQ7IBvwC>>1$=DYI(u2qCHAo\tPii?HxD$qlM-MπU"o(ogik?7uU8XeUNWu4)$WuL2#?W(P309'o5j5LpO-Z>Ph&*b%gIj4Elt,uiWHO2πU"Ui0>(j#;b&?.1Z6Jk7cKad+;f<1Wwq5J.c9saV1rYnBp]V?4m7PRoZ1(Zi&1>jRπU"iehp$R5.9]$?QPpD$>f6?++*84RD6)6Tf4UCpHccWvHY*JE]0hG0#ETpavqpI;WπU")Ir5?XzhW5O(S7>T,vxIrpf5>bN\OxdopU+Evlrr#sWQ0<W.sjpg6?i9h'q<5$.πU"uS&V=*oNx)''oqp/kr8#v.DorRs+&)n%m3'[MtUwK+4*e5R#QQ]I]ZT)u)A[&SpπU"q^xv?pX+Rcu&Ag.EGVGY_;,/LU\5:;P7,<DQ2F2;*'iB7E9,8W._EK5yk50&Mg1πU"#9d<S;1AcX3f7*&7NY&OEj3p*ChCHZpuhLp0>Ms7tdp35M4(IAQ%utF+',=7v&:πU".W%;7\wK<GIP7sgTXWd8i%H+O)uycOhb(m?)aY]-5fxohujpWt_GHbrSLrltvVpπU"fbr^5^D/oeU(]pK9W#IQ9Yd5\]xhRi+(++J0S#72bi5Lk5R0F]Y#awm7od)A3FrπU"QS_*Kei2RFIDXH7p+[sBH63H=S_+afYDLcKcyk^ku$br3C+.JLqD^2pcUK%q$WAπU"K)NPIDcMw*BK-K<OLu5TverP;c;lV=sPl6.Q-o7qbK>_$>(H+91SeA]khSbJ2cOπU"Gnncbp.nqHdhXR&Pf#teI0UlQ2ExXJnIc62H#j'qimt>B#J^M0pZovaIYkp\vA/πU"jK-C*4A(iTi=MBpNYND[$Hd%<]ZS'9*v)?/>>j$r3\$2bKnY29MAce8-UZDO6aJπU"R<<:/KwLRM='J[L)6+)I]3'joSWSO;m%)r[D1wkbIjqOYFtJ0#&94XD.W+)1ibZπU"-Fq:(u59q^&j9R<^ZO04U_V*+-W)lZQX.1wnd1#\PdY6a>wRJY;nOF;:/LVe#UpπU"Wz?b1FY/bSE3\1&L[+<4<l+1gg9GJ>akwnlH$Nwr:p75'QIg4A8yE9(jMWt,qH>πU"apL5ml7d&CXkoskN4u#6oKk+O_)OaG-RSLG?'x]D*o>I%#Frq=nov'KpH^Dd.-wπU"JhdVDCPS4K8wre&vI;+g2jW=_R8=pFRO>Rm2k^_*.mr)t%9VG(8T/fmS.%$Q9X:πU"\.U<l$%DfxSGJ.og_A-H]*FnLXj.w&Tx8+wh%DNNTvzp&WV..yrtzg(u38cwSyzπU"V.qDNNvjzp&&lcwyttzg(3$89zpP&V.D>NNvztz38cWwytzlg()NTvzp&NV.DNHπU"Nvzzu38cwkytzgr()Nvjzp&Vh.DNNtyg(3Z8cwyNtz%D>NNvzWp&V.W.ytzug(3πU"86cwyzNV.DNcNvzpk&V..kytzgu(38c$wyzVh.DNNTvzp&Z&cwyrtzg(6389zWpπU"&V.qDNNvpzz38lcwytYzg()cNvzpY&VXNcrvzd>N0wd%up()%9%%%#-%u\&tERCπU"=b3S&.%%RO%%%/%%%%qj&%jqY%SufpZfS:A'-E1%?YGmn?m)tt90bv<;6A_BEkSπU"a60:)4ZL/QD8gL'xdCGM#Rtt/xsu#tTvt#d8guvv\O5N3fhejj0>4U)++STNeFlπU";Y/ptj)bn,t^ZU*Pv9#IUT]gohwc/+XVpH4[o''IH2L>4//GT7,+o--8qwk5$DQπU"fU7U5-I6V2e])B#[^1r3dVB;dC(CUXPL45y/HHhJ/r)OBF8LTaP%xZONKDEl0gCπU"U=B/O>Qrl+cWB+L[)8q0KELnPXEB.[HU+r,0D<FV)1L2C)AGeUCU4ArW*27CmjgπU"eFY66UVT)7&;;lqYQRrmL9/l.Ku<&z=g)q)eT\'Y6Ar#9WCBlrJbUYgNV\'M<k^πU"<MbQ2B-j:cDprEgC-Or)W)/BNPx-ViUAe0c$5cCN1<BNN[0+w\*Q?w*1&tj/E5)πU"63WQjY:H9L3XW4'9E>V?3gJ?_10FM9M'&tZi*'Qgv]PvsT<Gx0fhkVLp4N9l&)DπU"b_slR9:SMS8p2TuK*Q2MNo16%a(Hmy7<)pFL\YdB*Y1QnHesUTv^f'a;8HCN/FQπU"6l0[/$JrP*5,Of;Ov)PI$&gf;9er1<-TNgq0\:l=#Bs)>)/xGg;sO&L(up%()9%πU"%%%-%21PtE_?j\e%q%%%'\'%%%1%%%%rfns%rjsz%Sufp*VaV/'9U-j=(W=F.D<πU"fQkPKJ]/S^6h'/mg*Yvo:.0u4C5_/tIC:ueE5=oV>lr5IY+BWAYbsCkCaWO;6#dπU"qXXf5Lj=<6xrR,%up()%9%%%R-%;7nhEp6/]fZ(%%%a:%%%0%%%%xu%wnyj%xSvπU"u4hF&p&=IF19VlCBJA*_9^UeGQ8vL$djnJyVfQePf2yKIKLbX*9]NXdtNROHA*8πU"mCDls8Fm3h=bj/rj2%bX+hN/Y(2(&r>(73;X$Y%Nr15,Q;V)#Z&WsEnTb?.UtrKπU"7\Xi&Cd5241v436s1qZk)3/v1&/Dd=+=1VU)k1+I0g9Kg;=29)M+?;1M/2CWqp\πU"*F(&bH[kVGBE-_YVlXtKYnAAeQ6M1/2ChWp\*0F&bHU[VGBNegR.8m(0m7-fSt1πU")OCMIEIXh[8^%,&m%Feec81)a&x$27D(]uD__ae./i1i51k&V)a(F>C%TB2$pr>πU"iYk.IlWo]\Vh_B:=-adcLb\S*Yc+UJMd/$N5qZAW<NWE(UdU>src;eutl=h29t^πU"UXH$)'>R=R=91Eq0T1A4EHw,bKWUF=c1o0d1%+j)<F4%0c]=+J$KKCK5[u1,^<sπU"2gkx^r^lm1sWuV4LeA=1M1152qI[2B(.jXKGvurE#?+o(lP.+(A0HN$fJ/4TC;/πU"*;e[(N$#uon$ijiP77XQH>7-RD'/,w)hboxNR+-F9H?Ew5OmrjC5YSAl<F1rTUaπU"Z>w/4gocAlA;dPV4b/Dt0lOA5GC)?HW.(.r(>ZBOeNcYp->2S3?l'w*3+SN?n^PπU")?ikkg?oL)/M.i_qH[DSxRs.bF/b)<:tAunnCZDm,eg/i--&#hmL(<#5,oC_aD'πU"j-^Hg:%Lm0+s%Y2rsHD40a213\PC*rc?(h4SKp>Gpa)nF+3#NxRP^VFYG1K;ET?πU"M_AQ<oxM^,$\B[\F&W?>ieD5v#T_.<KBSzj_Ec^EclR%9+?Q:=2pm<U/-guEQKHπU"W%IfN+f%uZVtVvy[KBk1]%*Fa&y.[]K+f.IJj=sRD/FZWHIn#ktsC3_+v#ITU_UπU"TrZqH?_:Of_BO?Ih%\D6hw97#1e4,&fmdGQ:H5/475;L77y48)s?$r6an,No)$<πU"WuWb/kjb]m:sKDfD+nh'G&061iTFen'%Uu>6U1?43)oIQ=JOkx&6lx;+$AMxVgQπU"qJYfhQIM2)3cMf,I7t_0-4o4MfCi8JWfJi:Sj\qa/Q,*j$LQuUU+2aDmWClNP,qπU"2AVxnoNvKeZ)d41&]qwbj$/xKj=$Iv(E%a^Z^8t<<q-nardVGP/wDU$<$&PB?]jπU"Z4%up()%9%%%R-%9uB*Enp.NC5'%%%S0%%%.%%%%gf%hpkS[vuhfJcp]rdU5UpjπU"mUp(DO_+*P;57Q\\nW0$AHVq.MI1\-niPvf0Y9.n5[vLHQnzdTD4UHq:M6NCz;#πU"7%*ooN)SYKnLmp3e+7aOUW+YRa#+MCT'%gn*#7N(I&ijM6H#jP-Gg$4(_8Mf/6;πU"r8OXf/9;)$;>7&4Ij(6A&7^_#,oMXzX.,ec7,Prp<TC>OI0VFq>Em^AlI?KjWdoπU"C]6M52yOt)H2SCr(yyh<'P01.M<nfR:.LX;hzbgHWdrND[^CoI'e=/qS0z%^U/3πU"'z]>T#5DM([;a\0QWFRI'oo6g4;qROo_)%G\,nlhT(Pjlz.Vp*JUUW_);3I<7$QπU"%blV$Gr2<XaPl'ZHxhIRdLiB='XnpG7LTp(Jh6Ct2#Jc$LW_:mX?&Fgu7S8]p<ZπU"xh'DD8QhtMNRa3Mld-=<kCAhnPmv4M$95D*ILP?AL6;t-U&dO^T50Hk:C^I8VrvπU"L9X8D'ifRpCYzg4HJ<)7[.3+b<X?7#>8h:>>Q&3\jC'KY=Uu'BLenB^.UM0f)G,πU")v0]:m$cbBV7EiDmjCbOs?5FEqCz&OiS)1aV[lF3l$9/Hb69X*3-/nTVOf9/P.'πU"O&ZwP*/h.Nr9I;gptD5cf$:ZVrw+hl:2*F&YYY.JIK=jl>$IU,T>7ctLiaTlaVGπU"=0>.gCU5[i\o?BAW\#GcX.mEMFo/)#'Jqh74BP8c8*3snz$Y62.kBP87(r*AdA=πU"4/EF]3)Y=*kGVpt#/u=.xXaPD]Sf&>IY+'xkFe5a2cSFlR/0%&4U>DnMf61Dn%,πU"up(%)9%%#%-%LD,jE,oQmi4%'%%N%.%%0%%%%i%zijl%jrSvRuh6e<H=UEX5?h$πU"9oBk/I^uxVL6J7<s+i_-4nWqtJ>Q=lhN/7SCmJNzcec(EcEp(?qHMroqKH+hchmπU"zC?7h^]29q%i,$'ZGM1tnuKLoRg+WD9V\3160Y<T&2hZg1Gd_d2E4Nkv;D=*s*#πU"K:<)r+MO<*uLLb*%&oR82aK?)AtLN=DKKIcX6iJm9wue^AkZr-\o<b.5eI'It'PπU"%\+l'bOI)bR#]7MHeZHP+rVA;Qp.cTdh\+E#Gnm^.7-1dVnPW=d+)KqeBkB.gAnπU",-'OS_G(hRkPS[-ul=O;7/36=j'yH,E^t&4ZB7D<#s:.u'0J#f8'9qcDJrHJmwCπU"Fb%kO('Sz;R<'UPEMp3Eh<RrOT3hdL9e1E)&yia.#mkbK-Hqub%]7b]-OmtGC74πU"EuLv\7,^?PG=7t'3HixdOUbrZ1i1br0$i^tsn1]]-<VkjcQ:(?v9mx(h:=^2$74πU"*'&4aUM*H1BqTe0_,sSCMP9VHncyV1?PxSD?qx,9)_p=+&2lLDPO%?C7?3W:%ONπU"*'/a6E%,8&W5wp+.)g=)m2.l9F5?G&'2/S[%0(tIE:EWb,8[%$h$r])w7v<7I=eπU"T]sj'5:'=eX\is)5HF])D-)2sco61ELdCmHEsC;ue'j#?&Bf]rge?\HfHY)kn.]πU"'()MD%HE8]NXPOC8Kf9^2&Z+b8EAA:=]%:OenwFf.1%w(8J\aSUvV,FR(glsNhQπU"oimKM$.e8u,3o/_I.*NPv#qC$'V='Lf;jEhQ?\6B4C^=KLY%4^J33\n6E$4M+qOπU"T#C9;#Q&3g9IUh6:%b\nLT4UdsH?xTq5fbl%mEx?nw:_q6,rf<f,?XL?PFHtM#IπU"W1*y&daz;%PB27_kRPF?#QHrN]fr1O4javG6cv5av%+up(%)9%%#%-%^_trEgkxπU"oYB%%%%<%+%%.%%%%g%qtti%Svuh<Fc:/B<U-U$hRbELSJe7k-'BHSwH08bi=kOπU"EJ,kN,)aLYf=4bTWvI*&ID65eNPz'ska+LPUo#'8RQ's^MuBeh=61mJ.RM\l28VπU"h\q+fS+2>PlbMlJD?-dh(DU\Orz&P9=Uj=AB#-ru+7$Y3%[s1YM*6/14-CXO'p5πU"2=/EDn>+%+,GY>noz:YPu9HP-mm>57-B<HR=%Ev%$*y-PEhP?Hg486'VF&27(,gπU"&dWpv4=,a1&E<4Wo[nd=)aQx\i%+up(%)9%%%%-%0_WsEFA'P+U%'%%]%2%%/%%πU"%%g%fhpk%YSvuOhf&,,=TU18M\Y$'m-#1'H[1fqH'[XFK4j]$/sfk3W<vW//,M#πU"CnX;tPufY1:(Uf0=Gj\lJ$Yrs?aV#tqF#=d(,'D(8K0ib39^&5<?VrCk.:n'IDlπU"4eD3[zm244hI^n0NeO.DHms<9D>n$:=j5K*sE9Vi%1/v1gOCL&wqCoxWC2hKehRπU"ew3E(UoQ8iJ,Pj8udcS,B3rfTNv+kW]da^%7]ClV8yKv3Akxw;l5S]LY#4CJJsBπU"k#37N$n)oS=)Ii7jLj;/9_t+bP(48>l1T4,hQSDu\e7Zg99&&A.[5:8Y,IZfS\wπU"if>788*_0nLow/>'1Y-]O[Bst9L.[$FLYLZsRH<kGU)8M.SpQ>Bdnq+8rr+a6JfπU"qR%]VPu5H<[g)fDkvFU_&qfh\liw.;Z0wk+RJK*^TeA6_=%L,fTLxdt%qA9l[TkπU"sHp.2Iwf,fkt,EIdVSPUaGu=nmnn?ehb&CcD%t69jqEi?c.3(7216h8J'pH1S%3πU"Pjhe8Kx0r/<A:iPT5)&J/ZjyS91(ir3=336'4]]8;rP\5<P*3_EN4mVmGJPbL8*πU"3o.Aef=3a'X:%Jp*g&Em(WI)nWI+f%>]dR0N780N8+0N80'N8pA[r8sYVIt#lAWπU"&l*(q3W??9iW'e]6<TkeWUprfM8hNj<]p62iHKh(AstlGk#%ilT2bJ8;k)qoOOjπU"62_MQ_n:0_EuK\GUALW<3P#ST;B>isjC=<2gEk^];PK7aP+i5p.V1f&&LM4kX)$πU"^1?g]YJ]-G^6;CsD8Ik\]R):aQ5^,zx]gU'L[:5Ck(YG2YOotcux>ziW.?uvxF-πU"=Jtu%p()9%%%%-I%9'tpEY/N(<F(%%%a:%%%1%%%%xuw%nyjx%YSvu4hF&p,=UUπU"19V,ABAI*.E#j0Ss5LSkXJz^kP3j/EJ_x^nS0rqjfB;&+MJsib^ScQv?(dNacrMπU"NhiHXVKr:kr?%C74<d(ZEA0-a_=GYq1ZW)ic[1:5Q;x+-CfIbWh<jB9Sa\tYUE9πU"O$ugFMwWg$RvUYJBC#(rn1EOr2lP]0#(bN1ae[o:+,][+aq:*#8u+/k94?S?'TCπU"Ubq1Ja1$#;4g5Jmo2$wz,=Bdq2;_\EZ-FZ/b/tI=oIV#^fJliLJY[;.FAEq$%_(πU".T-n,1[isDW($W15/a3b2)*x+\2D(/gu_51XeY=/$6XV,.>mK)T3%9qESV0b59xπU"P7grS$My.SkAZVsmfP^9MdO%f^%OfPY$w7:^QUC-%;(U)V>Ww;[GO#q.r#Oh6ZXπU"o)X^>86?7e1qC;>[Ee2]oEoKDe6wIW5,4&_>51lXf*i-G?M^%\ZVZT,ZV4q;J;mπU"O1pcFgW25qhz&P]uUM=MQEOC.bBL8/\6qtr,j[Y1S+uGf:<aDK^Lar#i_TDSE5kπU"SftdED+Sk;K$&HNky8ms$pfN-VNTAo^]$fAk*=<>D;IIdp#_xEC2sQN7/1Fs;.CπU"M.]0K&t\PtlElUAKV?U&PZ*3?<LL889=&XLFaygeN\hR9pUxN[W4-as\HHHuHa-πU"rsL$a-;OBJ1*toiirt_PvfLf-4Ff(W/'6?^09\oZ<I>?JhDS(afMCY_dRNUw&O>πU"=*#iXRPpJ&o%Q(=sE37w3)BmdnraWukFKYOP_jhGlHxjLfSo'ASt\/4PBV,>P+%πU"]Kex=L.G>R&M8W,1GL\MdLMTr+:cqq6gMx]^D+(o;v5BemyV1q+0MPNeZ\]6SsuπU"lLq[-eJ,mh&W<Yc],X1]Fwqvw*2.*iB4&WKh%Y\naI&:71e1R,d.eNmQXBEeIGAπU"8l7c]V.wAn]36wS%/e]Z)0XCtJkVnkm:uDcfFn(.'I09.1qi&$G'U9\[-+ARS>YπU"[%*(uMunCxp85%\\)vjv1j4mk>d-cZm7H/37#$r-_tiQ&-TKVRlON<DiBk=[Gc>πU"8NmtG'-^SX-(=Q53>COXCk:_bcU0(rb]vfMY'n=z*Fq+w62Q0'wnl]'wwnsaQ^8πU"rs=qO-b2\-ay770gl9k6Zsb3R7acu*%up()%9%%%#-%v\JsEFq7frE%%%%H+%%%πU"/%%%%gz%ggqj%Svuh*>cf3%(F-j<pbEB'_/rmj(tET,mxG]QTS'j(4YS?Ix;]]]πU"iJt]N1+^Lrt[hZNEu6/a._q)+uQiLK-7o$%8^.jcfIwa>cSRm8x_>)6Q$\%nI)QπU">48b_%lwF./O)E8NsF9<d9F6e-\g7NZ4m9=ts.mVPL67]b1nPnQtg74w%O-)i03πU"W..l/(O%+$aTFaeLc9=rw_:%Y%)7?I+-Q;z/M,dA%'':EOq(-0o'2=&0FK_P=D9πEND SUBπSUB V4πU"4?\8L_c02if()=HW#LX-%up()%9%%%#-%PFTEEsU7GW?&7%%N(%%%/%%%%wj%fiπU"rj.Sy'yT&x:9]Te56a0m4(+^.*ND#k?1W)*TwAXx8+[$uoTB<kC(S*p45/FyrpPπU"M6lDd7/ta_cd)Kue50hNF[MrVJ4,z$h'_kb3Q4\/wPN2CQP^?.0qP.<)_40l,7mπU"%T+Tk/biVriqZkPOfYaLptNMKR0&xDrI#q*34s$gN*$o2cR\_X0ty5G\mM>6Yd:πU"ln+W(:j]^])u:]95P6IR>bYE*r[]dCdn<UXEN2iuuxpRFbL+ta<3MT>8[2aTq>[πU"DiybK*gWqOutoY<*7VW#2G=YGPGTyi2_[=RsH0n7(Gu537Z0kWSnD2sR)1/wBBYπU"T-qRNSjG\Tb0Xb>bJj9OpKMm0Zo9(3SPS<-C<\j_1G.4N,A0Fv)&H./&hGn/*foπU"SDF6PaO%sRaf5X5Me[bLeZHU>s).M5dTko7o0C^mr(XXfwLG17PN5dfAVUBX>ZBπU"9etPwFr?$p\-jq]Ue8%KYu538p2xwT9-ofM&B=iueCPRgZ.(v0rH$=D^6MU16HSπU"gF[Yq]noGFw+RnMdbn^,Rsu1fiGI'1Ghsdz7J?2.+mJY6vDZTgdg8LN^b;1Zn0[πU"b(&s['a4up%()9%%%%-%:Yp#ErJV]m%F%%%%y%%%%/%%%&&fiq(j%SudfpB+6o*πU"EwD_35%,UZ_Qi(m;RIB/[7*:,X&0&0(%u%p()9%%%%-I%$Zt+E)DH3wn0%4πU"%iP%%%/%%%%wjf%irjS^j'je35J+ycP2U5NhJgP&0)A)ACejqS15:odW(q[HVY%πU"UPz[8j3LBIs$TbXeL289CaQ&U,A\vn\K.nyaGuOpQePKr/)Q=)6UVq?w+I?%n6PπU"1\\g1F58-HShSWhHxGuX88Xs,+pSld7mnZ%$7Kc/aF2/WEW=_qXuNPnak_R[60HπU"a05n[uxxrxQsH^N5m,CvH_,p2/1-QGU8XT2irX2h7$d%q%^rCz6.h:t&ZGaI'ZZπU"8$O$g;<MKn_=D'GSF6XfHv<=Pli4kFHGdrt;g?Wb2h3QpqBZ0;hLIl(qWMl)yZ8πU"WGsTCt<98]hqg^dS5)gI#0pV70i#BEU>/0]*L\SQpVT=Hpbxq=-^UsluVzPjON+πU"MCK#h:2xu+G*eE4(nL9:ep3+s'=4t78L0qWi<D)^d[7$zgI/v$MPTI>p96AJ'J.πU"IK.dHmPoMU8LHO'Z^QSU.Ib2FxeL)t+F_o7wdXaL7PrfZ=9CqDN:/KMM7K.DwE=πU"+zi4&klxn.iB>:hEdg0lS,,),XL%U4F'_zsOgn[i4piL6\NtypALW(OfI-^$VsJπU"nc4y;pi,A<*o3t3c,EiaoCdwCvhU8Rm&2SOIB(/U/10ZBg-eTn\1>XjTKW.sOsVπU"ea+C,UO<hhppCL8?pIpLJISW[2<];^$=7'dfPn[.<Hd)6_^BwX>P-(DVi.M52BUπU"0F_&P%-b?TsBCWg&<$t5eE&z+xQ=mLZ-PuR'T.;5Ag:-HB5\BL>3aMW5YOk#vcCπU"[8^4fBU[J<Jkp=xYd.E-UuQ?t1LQgN3G1ZEoBJftT^&IE4eZ_5[,m\(b6c-(W_qπU"R63S:/gmFKF\wFP3w?gqOuxqaT#9k7JX+Vx=8lIe5gI^CKco3gPh0aO86Cc.mP;πU"3sVg'aySU]=W(FLq1b;Uc;?;8+N:y)HNId[CYDH_P56S,Bsdviogm5NGA-F0pHiπU"a>9:<?1s+oCGerBtMeZc;g-bLK)5?+*2[u''Rcj&nptgi,X1])%Z/0d'r#KSs]bπU"4?C;<?Q#\-8LY]?tpLaT2OI+-^*+D%O6R3mPH$tW(tlAAWqfr5x^BT.k_+A3bEvπU"fM>n%9*3M?#ui]4ILDN03<%lgaa.HHG>P=lKi?-t3^hBim?SOlkOL2tL8dh$jb#πU"M(GxkVaQl._HBP*MAB_B^8hOkN#%q\7tPEG$9\H'rmh]Lp>x44eH\Rg(5Q>ve3wπU"2od.zLurg)$DicIP';,N15rvRaw]^vYvub<OZ9kN/)aVE^mcTK-$EI>onig:u=,πU"/$Jo;h[wi;WTadp-47+BO[x/\;0jS2HXC3CzcSSJyGdC/4V='<fg+U9USA^s9YIπU"PLK;*y^C%s&>,NnlIMT2eqr8='-<Kl#0\dA\]lJj>Q+p&$T/=#/)MEhI,F;eaqMπU"&q3;?r+4f3;h.M:d7ge]=(jVO(d5%v)F1M'0,]=0qDe8W(Dt9w+9bhlc<dF*C[*πU"TGd=XqudmYPq&R*PXkirPVn\19hk2cO'I\,ecO6<kilswZs^fbCBCnp]eJH,1V1πU"fx.:0(lE5B8bdOs:I[xkcGAhk-$\HL=[XMKHIq&/b:j7^=P*\a]\Dz>ywnskQR=πU"gR=ImVXQ(9a2e*W'YhqbN?s]>M=wPQtmsNfZ[?cL?bkj,l\on:EtnI)/OxYKmVIπU"P+h2YWb_aJ3\Tp%Oe+y'e#rYgX7=.]:0cVQ.Y2*W](;b*3%+UXh6oG\eWLXK8^LπU"GG2l,\%#q\]G'1&v\9Rh&rC7Qu7PGS;#=L>=W32U[jtO(;cK%j#[&7BEs==wY[XπU".(P=6DCu.9O4w9QN0NQc7>M&XN[)Q=VfcBp6(B,(Q+x'A>?'(E[$F?IaVNd=\Z>πU"JXCD*bi^pWX.p61j;G7m7T2V0*W[(.gCE[sa,:RTwqc;W^P0)qXk&\OKEKd]PD_πU"=q.R\*UF2#v.+Q_z?UV7Y=)zucA&5I%%z.=1TMv:Q:vt-kpDn8ptMA1$9&0qZBeπU"K4zMw;[9NKxLoh'PebWDKj_6+.q]$VHGV9DR00E.(0cGv2%C?JUG(P,YG$.cog.πU"?gIR$IhgD:79qh+hPB>l'nKJFkwih8Q%tN>?*sL=QaKuG$RZHSAfT1l#S$1H3/HπU"h;j;aI81GM_>o\1#\&qDIveJ];VJx6EgLJ+^#U8QOJIpKoY[dC1YHNA&=bHi[h8πU"oY9f>OXd*gWO%CH.OeOc)54#;4aTJNSmFU/m0=s'8L1,n\GuA;]G1O<E/VnZww2πU"%4S9$TQi'[^X)oTX;l\)B,-FiP6sNXTE.wX'2\e,C.=%:n(His<Doe_KIE2Z*<TπU"J_sca5c*)eGrVT_GQQ^g.IQDqS4-<d<I8iyJ25Tf)Fa:5\G?&.CB&Xo:%YY&?5vπU",2QA8v0)[Wr)e,/6^$-8+([OgTvtAVqG:.lXK*BoKES4eoZABDU>5-BEeJ>oh%sπU"3M&3+Sa:d[*=ZWkYY7,sI]v9ZFdXBT1f[Yz+J]5NUYadDX:dmSWkpMUaSq[;Y8VπU"^R'&aio_<OAKdLG,8aU&c<9;j0tP]?J$]U/XAU5Gata&*i^R?xpG;J=GP'dgVWAπU"4%1G6-N&yJ+EJfutenb5_J&E48rO%5Z3Qs^]XcG#gVGL2Qo?/F]#.a?AG.\RYuBπU"L^]6?Iup0A]:s6sISY9;lKb;Gh,eYto-IZto^Efm<<aHKVp3Nc=/Q/d9,BJww/HπU"F\KVS/&\/7m2.?:gV]QW4FKd?jW_AbUi:f625-&u?rEYtHJ3B+Y<9nXt\W(.#OCπU"(d%U=gy0QmNr94n3k[N%DLToX0eNau=O6Gv]aq]]JnmWFr:GU:[b9BZ5/LA-Hj7πU"\GAKfv0Q^Nk;$Sgf8Q(Oz7eWMC&cZYmInR7]^Ml=oIBXSNEo&LjOoM7n95xV64gπU"^Th*a:3q/>e%15ilPed-q2[J)#+pKml7wB6)F_j-f0uz)[U1_%eN+_uC)b=%y9VπU"G/l\k:;5<n_7.e'wFK2:wnZ_5DG^tHM>1aIz&kFVR9t7n1QhK?[0XMrrL&-*g0DπU"WZiGh7;=.;yc&;7IDiao3GBNn8gq\&L\CkHBLa)vIF?Rx<jjk&OVKud2CT9rlX:πU")H/+(0Wlp#CP>PnSe%/39x[Ggp.b4bAYXfd.\P3S$$LBsCy.yH3L<SJg)%4K[ekπU"%h1sU1nn5>$wuMRvI0R8+:L\XyQ>$nV'/ZChB%Fnbe70fw'8P.fLo)Y^vj%08_kπU"/hi2&X9&Wnf9Uv30+8HN^]EE\N3)DF^5wW$C?3(=:?PWcGZA:2'zB37T'uB\-QoπU".4V>7+MzDZxLM)xDt*H^^QTVhC<X\6B;FsmeXK:CQ_wc?3MKHDQr-oklWci23VPπU"LTlc6rws)+aCmq_'ARh'oiZ_X4J4aG$B-=uRAgbo8>='$0<.]eohd<_oseeCl<ZπU"-wC8i>XeV6p'K*kCOocW=?:VpcIn&:^-KW4QpfyoZ;>;<W>[=M;_l[;>ZsLc%?zπU"1I%ZO&nM\zS?__*hJ[T=<Y+x^zQC%H\TMGFTGeN6Q2FkwPjPD)u=\bY.F#Z%nneπU"xS.W3n'pf^/ecXA'GRr\saksdJFDtM6b2>$DbwwoC#s=D#M&a(j\xpA39CwH)nKπU"CWH&[oR2b+pn6uw/RGx[,aAa<wXk#NVYol7a:DefXEOVNF;N_jlk26(2irR[Pk[πU"n$C0rD3y+=dLOjDSBlGi29aHm$0:KtW8v)/x2g]8x&ZGK;]Gq];ZYj^-T&NNr.yπU"RoGIAOV+^Z.*+SjZIqnuL/Ty\m&N9'E'%+oBj/:y%Sv:;'K[:4Cec%d_aQ&Y?V_πU"*n.-k<),,BvYFff?aOp5*mNCBuf*jS]6>?W:(&'cDzVmkW\/4rbkd+Doo0J7hG>πU"iaUa+.G3-'8+.34#m5&2i7f_%V:QmWgzm6uKa(%3x?d9uDFUXbx9;gID90aV[\UπU"PrL+%HPI?pBC>\q\)X$tvtJhG-tO7\_cJ8xk%&HH>Rr1s&<7co+D[bfE2wPaQ7eπU"ENA?;i+b_>X5\8;HJy,qM'Qj>]YK(uswM\cM*?(nOi,LR6iOr(e9[#xwnX%&cUHπU"IrzT'<d\k=FFMZ#On5+H5jgDVRSM(_1NH?AI,:>:^nNH,&\iviBb)N41c(8s^J$πU"6sK0gqkG#:89NZ=v3%-tpc2I/T93MFU9%';.xTaXmoZkI>'l^KXK1>x.?Monx7nπU"uP7kJ(Df,b_'4Cu1E:\tp6x&OoP4J[S;DZbS9uK0=ch9r<s^MKL90<p;fLl3u\dπU"T+JX7Ft]gnPPGk,\&8w0p=6'^ENA&kpSPJx(TrY7.ko,+H-1KxnLQ/1-Qnd/JWWπU"PrsNnp/EL=_sq&ZI?tpMuq_[:=1l7ny'G%4^%euDF?,TR8X[7cJ&\:AZvHU+$DxπU"0hKBtPRJtGr\K+<h*#n;mU=fvol-B:.7QxI,L<*t$B7H\WT%3QWr\9'_$(jr(IyπU"Gze70kn7z%211w6Kj&I_n-WjH27'+tonCLtUfL^lKdV#dt+odNBe<_,d=ibyC4[πU"ic>?ekWRwll%#d3i=uY5:d?I$l\1,HFG,tMse_UFD8PlZb851S2F(4:p?cDkr69πU"7IYI,._Sp(i?Y^Uxk$EQ^BEK?hm-ER1FX#(gT[F.C[-R%ft-']Kmn<X+8kvN'$UπU"bBo^mIIB9K*b;IAZ8w/iSve5O%e_?7f/e%#7Q9AWKE,$*_5_t3$:bGZ,'KRBxZ4πU"aHDHA1qnpv%AT*TPA/ad;:KO[Ff#jJJ>*pLV'jA$Q;,b*g<RA1Ay58I*s%XtI9<πU"L^$CU1:.i\*^7#NaI'a6H71AZKi=VOmqLwW<5[><I%*bZn,/s;b:F4q;%azJNN\πU"d3$[Y*d+<E=V(>mvYe&E9%1zRG2eN*.kPrW%k]i4M&vO^f**i<(v%;hgLONA1HpπU"8fQ88<rxm,>S&Q4/#CR%y=?Qw&q[EjvDONRkR#MhX(UqF7E_$sm%wzt1%(U_w,LπU"]mZKD6,L>KDKFY/;B\M#aT1B&\)5+Z[-tdG&Dlc[-8JkuZn9dT65Kl6C29TA.OjπU"N^0#%.pK(?%IjT&59Yi]O=Sz+'x3dT,eA)A,.]Fo<#r0k;/fJVSqy(i/FXWF:e\πU"J%5E=F%-9JQQJbY?4\_g5v+WbqH1je-_ey)uba-#qBt&J;Lg(GD'1V7&Y-lF1ASπU"iq+h(J,pl),hI+T,+Lcd17ZV)xox.G;5Uy(aaWlUJ.uO^X\6muXnv.^PBYw.FYsπU"DL'pg]X0rqfgltM^/[P4VmKTi=\I>4F&p+\M0L\cmS0g5kf?6]WQqW5Ucu7438&πU"$,UfGUmBHk]kxR2p$?Wiy;+Tdl\JIf;rJ\lEf*Cz:yTGE&>]fh*/B*a6)ke)qQ7πU"DlJ[WbvXrxFcmN[6[evu;tevun9&K)V[_O[qEG,OW[28;3rFOu6'Z1F*YNe+V7_πU"xC']FP.CLSL/KwJ_fDj\L4)J4bB$8M9oum(5Ar?$9+7P[n8f;98vFE2An7<BMlpπU"^Sk%r-u8<8jLFH(XxJp-3sp9GzLkXpXsn<[uP%a/oPB=Zc;esHTjE^KJ:-,YV0<πU"Z&M^wF(X,(u5$]#8;i+',]+)pHU,?V_rG&'b$(+d1uA.OP$Zd;3,'Pw/R=gPbh\πU"gOSu*w04a_2xc[*NoA)c=H,qOo8t7&yWYd-pJuICTE$HHr1&N=gYn0pxQn<c.4;πU":/Ix1B#4i:kL+)2P8)4xn^K)OR,irzI%spp[+-,3I]1M[67p81]f5%D7=':($kHπU"^2U4WCLMYmj4BHDhy%*p&h4e\s\g'$Yo0g._%9S=B1')0plT&AIR?Ah)$Lu9pfbπU"a(h2je7]pQ>HIs4lD+U+[?$2Jv>uTA*kk]>z1H$3L.2-%5.ok4e+Y=-jl7'/,ATπU"hfcE4hT8*QBB2/^o>qT$A*KXYeL=4]ep+2?UR$wCw$_4I%2dV%M8K56[DYm#e-lπU"3H<,(H$Wc&?1+LQ'IS2;SCn)IW[1]gv7%99fC]0mDrMSM=k%43g#iWZY;G#5tgXπU"BCpE/Qa&^o7/,&+V%eAE.1bcUC'%F4baMAHV4_qW+)t4-2-hEmFuqMUM?Pkl8nHπU":WWjA&_UFSKQ,EKCp'_17*AQNMR0=ZZeP(mnxprrD&;^TRuX4vOVP^9r&WO_jOSπU"/Rj6auSM)8TeE'is>3:hOG'/rxUK7b%35xt$mQ.OkDIel]^kULa<fPL63a4bPgUπU"9aj.(h-jPJeHZlvU(4f]],zHVfa-;,b*42Yk/?1\#NvwWm7%wm(Fd32uk]iY,#9πU"OAcGUaRcq:x(k%[7,P8GoS)ookC.9:,A?sda#2gaC9M$6-Rr/]whZeqUN6Zc#/JπU"DM;(3-L?f_4'v7mA:.YI:c&?0K:?x-5lUY',W1(1^0c_2U:3kKLuAt$L8>gP'J<πU"9<G=UE2ecU7$7]CFEec]'')BW7R-g^_u7aO]eKskYDPa<g1fVedd\OOa;[L<ie6πU"nvaUfqoPhn'A?Ycki9I[tgw%ppxk9K%QXF[VRaityNOWZ+Hoc$=633+WtjC-$2WπU",$^vLZZX%ic$AvL^5T\CrWqcASsmuvfM>eens8wdiYqihBhnms?rf0M1Z6i0^pnπU"9U?]&EfVL#nbC=*.cugs3$i_sc,=\B\JnF1A,&n_EW'.I.jO7spcv.KD+.9az(OπU"48V#PgnL^Q&4x*jQJTbI-)?6HLG*_?4L$L7)N#EKe>EzEnzeM]0Qc=:pnXjIFKDπU";,K/)Na(gWBj)$4Y'_0fWtAiv1(&O0=V/w-SYBmH7L#m9P<\8fOQ^sJylU#[kd;πU"BSu+Mlko[r#2a=5VwP(Z-exW.5?kHAyeNNXoc*<I6fLO7.C.r7Sro4F]DcZ30#4πU"KPGkQMU;6L<Di/X;X.DFuC#zbtF8e(/+fXY&BV-%K9i_M#j.gWP(H9HOLG-QvCLπU"qVqCHq\QP\=W2Pf'l1I-UL/Abn&W0]r[R_w%Tu+x<J5'tKnWiqSSiL&c:e23*OhπU"[Lq&q_Seri_#>V+(LW=e+0ECUEVK+^=&m->pqKuw'0=k<1$_#5JyysRJ1L?x.N&πU";N_bi7B'CS%J3sv)kfrSHPj+Qb(TedFQKjEKPs>QC1[h8iO)HPw1Vo?kVmq'f5IπU"eC1SC._DuTnJcp[W<$Rd+KG$.*+Wc_'8U]%7L-+'bkN4BI(uRCeW[]/>(bI1#uiπU"#k'0(H8MeCs[DN1r1SH1-h>=g$)/SBw;E>)4?h(hw\.XTWTnZDwk#5GFTT:I6q]πU"uM17+;oZ[jR0in,'*L[ff\7Fp[U3.k5]LM='bNM$-6IC%z/,2='za3X;/BVns;wπU"_]]fZHK9O(ppnLkd#+T8d4Qejo7xg1K0=$#u#j%h5qe](X%2\ol60nS96GFlkcpπU"49]wtm^:G(9ZT0v#qa#Z*qTLfh^\34gN-h5m:phyA2BF_[xR49lNM/H$B8*GRIjπU"z(Yh\ugo]1wp'-QE/&&S-e(U+$o;9A1\0$(LL+W>+-Nwi>ZLK.rEh6JQ.$_^πU"jYfAU]N,#a#+/:pr*j6A.atd.#71Ppp9WVnzLSZKd<,R)%AbuxyZq5u;bJu<'/SπU"O-*]2wrAUGp9JDkQLy/rt#$o68b&rb>l=2:tXCSl8vYL+LGzN3zJYalhix(nRn%πU"B&JilDVG2<;od98nFRIGF8Yi:V8^:XG%KeP?+NL9\#gl9*m]kHtXgcl%)_v'+2?πU")EkT.xa[jmwg\5yq4rHIla(aZBkJXwFCog&JYG9ZV/W?5dh$K/uj=1N#i<?I/qQπU"R&o2WCfJUZGV)/^Ef$]c1vk[fY_'Te]k6sL_As[0#Tn=450N4^8:_qdA>F9Z=M]πU"_t7H1]Ck-+>G+C0K3L+&o1CGT/XmmhSWL':jrqa/4'$Lj6>FH9HA^$U^*XELr%tπU"^Cm/e<Gu(6:/mJ8C=3%\Y<-P09mFMOslhX59ve,f_f*0^P'.$sh/+oL,t[A5k6]πU"<pGY2tPVu*n;Z%),:)29296+*?(eTfAR:anY:+]$5#Ke.P#K)2]ul;7MTr'Q-aiπU"K\WoQ8WP00*ME>rI;h<R\:3uBh3\+%E;:ky_9HCxJ,syFl#EKy^dK[Vq7L_?A27πU"D,d7c<7B#j-\gq<q^)Y6T)fd76smCSecVv:s[;3Fi2g0ksmnl:CvhmgkUDQjVQUπU"#k>l*SV9M>2%T(vlhH/rd[=tBdGx\aD$5vS9pxvpM.>aDfJm_rv6G]x0QnMTHfcπU"KGc.GaDvYm3bmB3It,i+v=',vg>tM,Yv=hmv=7Mv=PvFSNx6QnMtHHcKbD.0bD>πU"Gm3Jm]3qtV7wtVW4tVAt]V/tV7otVO4tV9tBV?tl*cxHs.5$d^3i1FOsXZ>hpyuπU"[EiPcXq*.&>4UTA(1SS<6&uZZ>e(zW4.H).ud^\dJWndO?o(YD(+5zkv23kF=vaπU"k(/m(NeuQf#2Yw1]6T8mGu#R_Qq\:H>*cG5V5rX:nDX)V<kcuBMTebb=0?ZXUk1πU"ZoH9iG)ENH*D:(tAt,_0rcULhEc7$%;3F/>GE-\TEkuxhX(POe\;f9_39j)saXqπU"Gnw'tu-vO%/$)WN=0n;ImBzOxGA<>H9AMUUyNT1&-#C<NSw?mKb-eE1DY)TX-[3πU"(Wpa+':R,Q+zL.]%dx.q4IJnrDgO(B$,.kw&.i7*u*:EGGv;Wm$C$SPPBfbZK]xπU"I?HL]I.QbhDmCrS&mUm6N]['m1CeGg*N[['yR3\cV%U(BX(Yv9olAtjk6+aFCL&πU"&0-v&SQLZ9OL0t''WT+E02RX-L+#cE?a:gn]-e72fqr-*8DQ-FxM1/$S<1s.E-,πU"v#Z7pZa8JaN0<$$fgb#mi1EIT]oSZYZ+(TLHbZSK8k$U7Z8Ua=XNfb,e^q9$0b[πU"kUST#/q'gjH1.S^Zi$sjjTH6h1#WHI[FuB.tc8$+G=uq=[j=9;$sr//l\Z3,xiAπU")y5B*2MAb]e+Ez_]bEbE()-4A^M=KT]hB3A/xmn2?Owj,AAM5.D[UCCd;QHI3G4πU"-ls:Ba/%O?FI/oDlvtd#a+:Ogu2&%f(./yM?1iJzuKb#G6iLZQ6d6*FA=6Y\j;RπU"S,Gb2k6n:DBiEanISX22KVMM%VURh)2PUrd7M&C[AoF:KU]VAdXE6qOiws^f9HzπU"U[AoZGJuocI^Z=_dpqn#L-k)J<JH'FO[\ID5L3;A2,#mlhl2KvKTS.>O32&tTPUπU",t^a3_vGCCv57QRj(.4K\[;OeY#nGx*xVS/NF+7cjO,9.t?.H9R'YFexrW\[4wnπU"5Xfb4EQxxP2;.bxp1<Z:PW7$9fZ<t3F8kM1B/7+,S%YdP?]#2eH+Vg\cm7B6Dp5πU"+tPi\/YNIf'3CHSa_?sPQ'_St[6q_]4K'TMF8E=syTkPMChbf<Em8/7oADiu_Q8πU"b$d0fTLv>ae=lS231/h[Y5Pe>,k7Vsaoh[l)p2fDH#=?u=;h1cj?uUC^BKtKfcsπU"%=uSwhJ92t0r9jJkqBHrfLKWj_axoL+U/b+N1[jbG;h&)BY,wXspCZ68Y:#&ipQπU"uYY;^haGt_[Vb6,RI?Alz<>bJ5]N\*+;OQ<Y2hi>y'(.bUZ*(NOk7gvosZ-l$qtπU"X&8K3_6IOq&LG4A)5d.,F3*oweeTq&lb,'w+N9[4fxy=/%b,v&NwyN*?.fjOUaeπU"6m4gHx*-wUiP[1IqR.ztqj>9X2=OV5^Jn^'P-IXbl\#5's-)rF&*3aqY/q95*Q[πU"q-sU9WYwN&pA)1+PdA3g:MhUQ3\[B[](D;'pMs%/mV^zZk[Mc%r)a[^8#RUIKGPπU"Z<T=R1d6WVQU\kb%S%,?:&G*^qG=Dt'q6j,o0L\TE$XHJY3F)ve9r?dO$j;<Np,πU"o8qW[-^o2j&p#=uLe%l&PKBP\Ti^WL&h+ff'jXk4N+Ccgx.dQ7L3(7t&/95(FVeπU"Z_bi=&d.[#Oau#B,G)l1g;=d$Vb,pZ*)dd$XL2Nlho6LfJ'yAvs#QN7G^IonkCNπU"l7[?ubnf7e5M;B734aJqY2\Gux3FIDAEachU1mTLnJQ0a*9gcxdOMbrU%N:C;tGπU"p*C[kN#OCPQPt6miCj?^3qK.0M%9QDdCLxL6Lw%cWEvF?2ewYEO<q6(vx&I04z;πU"^Sf?0Y1Rra#(zBcPq2Gc=^.'3R2N_Yp]^qqUdf82ZR*+vS7DaiSRP>d'#liOfECπU"YFx/#[%1[qrm#E;mV\=:A:\cI,UK74,K#'WQ2ii4Dyrp^_>n8/\q?ie=T%FkZT[πU"mC]G[Y$J8\4K0=X7kxV1C;pZ+O&??G+yZ3A%*sUOP:kOT0(=kFC+4\c?+9rb;fuπU"oCCN;m4,\JwTAkxSITx?a<70ElpL9P^gkk(u%_vAf\*S.in%(^wl8APW^QB1mqJπU"\d4,*?nxjWX62[E8s/sllB&7NHGPA1#ZwO&re:pA<dQ?J[:WcWMA)W2Id*t\<)8πU"ctN:;wqjdfTq>sIY6^Q#(>]Mok>N3*e$D^DDZ88&8cjvz9]os[Ju.Mv>?.:pth-πU"q:B3tZb??h(;^QqfpX'*1ByXvZF:pz&N+op<hH_12rpnPh[a-4b6>i]HQiI)TskπU"O)HRx?n[mMhQJ9XXxumJoLLGA>kj,>*lu85ST;ZsBu:>Qts8&1ilN%]Pp[4yJSIπU"9R^NwmY2Yt#vZ=h8zI=c,z>wlx5F8udvt%>Nk_L+R1hs2kbE.csWtg;N+7eA#JCπU"Zm?g0_AkS$)vK#]NwyL/X>SBH>s/9o%Q?62x1+b'hL-fX:b#xD[AU:efvfhdz&eπU"[%SN&[&F>#1nl*ZhnX'P;E&4dl.3$NUa&Uqh9)Ti(3k#Jwb2crZ3#xeYAEuQE\yπU"6g/9hag]J?u'rADYM54_NGF7ohrf)0mxrR?9$krIbGZ<bQb)U(IZX8N7qhbF[YRπU"g16ToWHW2kB)/56(***9G:YtE4S808gJ(%)i#hzVNB\'(WY^IAcPik7oYRrqMC>πU"xi-Ma:y+aI)FKUhT/[w<TK.CWsS$j*/7cXCg+bmIc-7/5D'](IV=#8WSx6lTIC_πU"m&'ZpVn,+KIj//$F0;w.BasBLM\YrW$V]i?R%4.tFAsr1hy4N\*cfx,'xiY\t'%πU"DL(</&,yN.y$fS&e9\W(&,Qm7-\S/Xa0vRP3.30kRl35FT,(m_sL+fr<rF7t)DoπU"VOnZ:$F<gRgkkh1wN8X'VFLPfn62afOqctbGO%G00bEeM:K2lDR4KtN[eZJ^X&IπU"RYRtq4xxd#DECZ*g:fofBciVsd/+FXRowjk42Sk,M3Qs7kU^GLr1_I)lj_?xAF=πU"dNUfyNeYe7IhJM%3SQbt.qQu-p01$dNSe4RJ;Xim7LT1M3el;6h-]WUVi$P^+POπU"Da0fqT?N5hPDg/a2M7XuP<9I/OZo&cd*+%kJGC9d^v.(VjA$Aq^-,oE]^mRG=\wπU"EC6GTf9>BthnT/3nlg124i*9[4KPLF5'\6/BgtDL'NNc=5;4\'C\zphV)+wu1XqπU"G:E/p&TA4AJcI,6sFQ5;W,&(_+0,/QLp)+e/d.A)L3#LRpm6Z)U&mc7e<F]^arPπU"]V0sHu(MLh]tXpS#a)mmemE6FfTaIj2XA5QjuPhw1CTRtJnHl#,vR+ST28doOK?πU"LvT_E.IIqDLf'[tsK_U/ch%wHGBg$KNqKYV9WTlaI3-M0fk;LVka]Mc3:i#0Y$mπU"a&i2i6$f'q)EUi4a9AO?$JvUohFG,p%V2:JHK9<XhQf+a=DlPL,rSMopLgwtR.%πU"tAqRh3\9>JA,L$y_F,qh1Ug_M2-HBk\tXS=]ZG]ObR8-'MmA?e\m<<3hm;:Q,q$πU"=))Ce2sPAgF&*+'_),HBq\erUnC3qP0N5fDCgF0OA64Gs*ZD*%BIg+Yr6^i9NiYπU"LMpjL+S\ve^r7K+]aSRI[LnWN8[>VO+La2scF+9Dg12HKIk$QakIS6c/JU#_Co$πU"(<bM^e,tv$YsL>)&Qa62nEC,0'g6bZ)sj5.Is%VhQ?eBP?rj50Ei1byT$LshWR]πU".yzUg&?F\qGpGspM3a,^jXnF_?9K1IR4xu]-]-?MGZYB^Tt3g:,,eb]C)k%bdaYπU"ZlA:.3,5g%j=Oldqj5*?b/jcHi4qV.h#rpI;SXG^:4ovv]j8P2-GIGTQ_l--+'uπU"#Hu/NHz7J9NnknsC$'bE4Q##NJA)'?Kgh,rH-j+kxQ>C'b%rL5PtWN0(0k[3cV*πEND SUBπSUB V5πU"S[N$?/H1#w+zdDE9t\GFUzW:d6:E],>\:>>g)g_mRB.#xeb2gv,<]VId]QS=LBOπU"gn7KwE^es8x2-)A]8.x:&(N;NqB.IvOQu)I>[t3IO1T0MNVEZ1wu:[BtN+'$5IHπU"GJN/7Z&a%)k9N%IR%D_kf^mBDPsgK(ZHmh<#B_5TOXJ^K*4MW]*&??8mX8rBr6?πU"a&VMdCfpq]nfZCU^kSfeQMhAQSen^/rOk<rE-mDL*&oLqMSn%Qbf\[v*T70gctCπU")wr7SJ0O]ZoaAARkbji6AjP/<+XUu>9'k>,;;EDwrAY8Hwm&obLb8MIQqmnO:6AπU"(kdx(&ARVMMRI0f)mOj:GK$*o:qOdQ44v=yK+I[XmtasHpL'M>)AGc=K$\1H#DaπU"[ADY.9NJUhhS]4$*h[,iQ^,k5j49hA3,Ao3*ZiabrN?p94ah+LsDp$+=DB<jl^qπU"C\i+%Y-hC0&47\jR'vSUr:>-j>hc4Q^n]N1o6xXt#'XR#f6n2itIw,$G:5MSmgxπU"=j8nIC(3=.p>Dq6-V&IV?ga6-k8lns?j0V=Dq9<KQga8(<6O?O51ct&8s6xKd[dπU"=^h'lC-LHYcN0j--M8%,3Y:-Gf\()7mMQq1F;ugsmsca</t?>m)vL4N%7f#.=&oπU"HaYnyDc(yB5a;DWW-U+3Y+A'c<EZQz]++?r]9?[2PBTvAT/H;<Q=iKeXJC2<$?FπU"eB<S5u0J**hTikgpp.(7*_P0_/>K>[&P/+QrS(:b-Q3Dy58TAJP#b;RfFDY)*e$πU"N5sHtaR7O(Or&_u+vA:ER-Ov/1dfPP>nN0rHxgxbqAfLh6F2BHGH*\67AwRo_MLπU"1..62^Jd_f*6SwYV<q*w][FGWcn\\Xs9Lsk\s:Eh/gz%8^L$oKFra:8PiCN^DP2πU"%b<OxKuuK#SkeX60axl>LfErAkr4<q<,OGn'o?*FELobB/T+IQs+a8_>,Yt3R]^πU"Cx%q,F>7OEHn-Z#fHK4F8($:C;$<C.3F\-<Eok^>YEw1Q8v0#<3FA]w&teF*Z<kπU"9A3\)bTRIL+;Q[,b%_*%iTQ0]yyb^o*tY%s+Lj3XZ7k.r-kuvS0Blp+>,q>ZHbZπU"Tct\Z(;p*eQ]d<F&oAvi(oR2,ke-,7NIM;=y?RKX_m,[_Jz8UbN3W4nIeGFSJ(,πU"<7wDpA$R=+O4Rk>/up9hkd0r_sOStC;0[-gb*moBbI:izRj/ANHh$yo,TV6;;%4πU"*xb\0#:_VdVRk_11R1ur:JL)3*,kL3V21tD;*X.Z/Nnof;tchl*LGUiV*-6VcJPπU"HJ:zRU>2p*9>5L)iwm#g+]Irl7=,\AlZ8XegvQ/Sd&.nek\VQf1IA85?o-aE%R=πU"+:P,gxmTR5e)UQf+'1?P>KU6C-1R>knX\p]]B5g_C/^&8K.KOLOIL+p7?K7BIj\πU">eq8qK60+^%&/=2dGwI,A.ch/^7JGqPOn[Y0Q\uELj8zIl7]t9C'P*HZ2/V0vy>πU"2A17eoB[fq_IU^AhZ(JgC7#A;y<O42gY>4*<jUneAPssS\32'dPJCQRR.[2BtEEπU"**,.wt980_B7FrZW(5Jh/AyfqVe.W>^IpsFEZ7-Nw'lZ:hd&IS,c#Gaj?L'Y/2WπU")[.l)1GUTstKsV_C)%r(3<qoli(A:QXOq%QA;Q;Qb7x+O-cWQ)>>^T(Da#;ZSEbπU"93:(>-sO8T/RE:L*63/Jfk(ZS,nP.hQ7(c#eZNxWdPFZl5:4X$//X0OJ'i$?Cr9πU"-OD6,%xZ)BH3kf(twWC_QB./,\9O0JsQVp:ms)UO-p>A*)t#,hvr1^[%-w,j:bfπU"EGg1jrGLxihPYpvLh/j;,/R*bGL/3N[np\%#Y>qmFQ:rBFPk&U_C%%Vot>3\UfuπU"7gsI\e%Ro4<sD%Fe-0U+#[[Tva4F^*L+sN);JW,q8Q4-HG$/0we2<<ep/q$<_\kπU"WDa;r*a?\)ZhRJ5d:a+*%YiX=C7p4W=9M:09;uqdj]LFkd9ik9RPqE_fkfiQJLaπU"59u\D3\=tpX/kdt>]D4nCsSzK_lTI8Qirsw136xJ=KLVzY$,3<Rv1NW>SEEy/chπU"=6cAP9U(%VBUht=,:6V;H&u><sAueb<[[OEo[Hs%$5SxKq?<xg3=#PSbj.BO3(DπU"N^vj]SZtgAq_h.uPPkPXU.tES&Xla#HdeaheJpM4q^L[u;1b0s7K[.rc.EuL:)lπU"VK:fSh20:s-Fs$wd7G:kRGB)\2DN5#.\;SmjJy<Mz>g>Y,b#4>FK1[_l%_h-2ZZπU"DHXR%uFbMw>,uW:8*;thIKX:6kx_Z%?+:2Ugkse&Fe8LcM:yHW_%=m5]8ohfMc+πU"+v4=pO$2wlqZBruZ.a%97CT]1JqMij(K_w]#tsCF515:(lZ:7GUgL,\iW/a2TjlπU">tFk2V7$TRc)3%D##sEWT=NKYm>M/H+4n02ER62Bp'G_M=5bR.nb*?s%QCY7v+^πU"x^L(<h:Ov72RX:EMsARcTI2C(NjM89gP3jcRsYd59tlG\9hF'q2P*o.V\JJT?DYπU"bEyLHLS-N4%IQ)\jYV,Y<uk\s,:$Dw\J?9X'EWeNyHbfD2<QudKIEAQ?0#.O#4-πU"K[Bn<6?K6cQ=.H1M1I^c:9y_Po%17g6d%9dq?b&rnSRiHIpx.[[%cYd<gU/4ameπU"F=eKu2O_H'7OexNO0Xbcw7);Z3fj4sZI/-*:F'vJ?4[lDMa_vSBD>CY5gIp.G3UπU"5H#y5^f##/2MLL&]L*dfA;?AaPuv18seNkXfUj9V.zat#QV9cB4-UH1>Wa'nctqπU"S6>pdd<SBv9N;uVvRR#6CL,^dZ\E2o:4zI<[tg(VD>x6o:]q7Cv')%*8/G/[4+/πU"Jx)k_E;Q;5LXHd[V#TSlg2qSh&u-0)^w[?JP]A/hH9ZH0s7X7W(mz_n'$#c#>u)πU"]i&yTq.\ct3*KQT90>Jm,f6[5*nD:h&CwXtq9&Ski2L>:sZ?PP-'>sTci)OUk=fπU"-NugpCtgE9RXMW,&DLy),'J)Bb%Jvpzrl.96'lC+bHZ>Z)ni)Tf6k]YuF,+><]NπU"A7rEf&2[BWc+4)Vu&DC89>0ToO;^8>9#:B:*?E:i$q>md$_L$5TB(A]sje-S<;1πU"_#?jXi:nkW'_V0L(#8E/XU&3i-lajmbJP:sE+fM5F6+SkJD$aVC/fRBf>YiH/m'πU"ae4H.dETi6>r8>,xwc%ES1ItEn76:0fpAk%7_C4'l]n;Bj-5e=hzAdof?x4RwKNπU"Chnn=Qfim[nXNOsr>&s?J.Tl%JH0.%^a?BWu:Y-%-5^/+(uE,y<4etOq>p.P*.TπU"hAL1)F,-2[D8/Wzhs-SEn8]bnT=PpXN+L^cZQ^-W+N1fCuDY%Kf2r4]f:f*$t]rπU"T-[3up,g]NhjRnI7ac*=E)/?b7-Z1m1wO?*WFi3tA%:NJ>%(vNJT^zXvl#>Y]naπU"F:aQ].=iu1BLjN+HfdzM0<_Tm$<eOg#$MAoJTrdNHlAn#:3pFp]dAZ9;ZPk_qR<πU"cWbWMrVbokSfo]H/Gr12ljD7o%2WQgQ=8o'9M6>CN(]cdFRba/7i1eiC]8RuRV[πU"sd8rbSr;7Jls\F>S'A\DGppBWoW7h>uX=9M5pI^V^mRcW^bU#B5lC&UF+EaF^1#πU"5U/&B*72O%Z':uQ70g-_Q\CTO]o;,supqfe&P;EBLhW17)y*+28'+rSgM[8Icw'πU"E;B_PGF25s96ne3DcC>OB6%\dlZ+Ro-o]JC[+K*i<0(ZkUOfZd;0a'pz2[k/M1mπU"KCh/M?Ru.ulWZj;tO[p(FI<_BDFv^uV7<mT6YW#^40(jj-9EXU4n,1E4:]W/eMlπU"&\1T':ZdhNw]&Bc9ro*F&&A?DYOB5;.:^B2#<HGMm7?\ojjX2QkRnJ,6q0gwL&jπU"8lWQA5..Td\iO$1NMeA9t=EZ'?#>N?IENqmgqzv-F(glpHYg>OFh.VofO/+hi4QπU"HJk)bbq;Ky(.]1Xb1F;lmP&+)V8kJ(%t4t6E6[<=D=<4Lt>-oC====[YsCC(+y8πU"FHDz72iXGA:S_MI*GUVXQ$CCJ)mACu:QWs.PZd>H0Dw%dEcEDd]h2pF1:ANX+ETπU"(_oIh5m(AIStgW<JrCsU53eLyZg/./6IZD=(F,g6mGORX><Xn_l?vYSSIC=Fe*#πU"lPXsg#K&Nqj17JF;+=HU?A-cONT.KZ3d[?gAC0<VuC0)t.o<0s$j[g#0UCFrx$VπU"?DHJ+^PIb2iLafDERBYaL*r82ZLa$&>r#?i=d3S[;U\)L?aX(yD^Pl*<v>'9'0%πU"p?cD;=us5s*\O)7UzRBWi%;r*X]:Kfi#]Y3x#F<m<?CTs=B0GaKhT_q#lb&C]stπU"pSf6os^QNBIkgs3pB?8#R4LG[mapeYUqH9TYx4EYrP8#\+TQKop.JY=s6acbjC>πU"QK+E6I^YG2xP$CPa*q0OMqM]\9;cCVlLw\$;$rnv#cPgla<.m4N1Uzk4XmmM&LEπU"*.A\NzY_EL.GQ$JghHRd7_GOmKhMSRI=v7a)(q)(,VqedT#D9nEU_Q;chA.8oNIπU"4IM^zkqcH]PGYgq2pi,ZGjR'[J4YI0Po(XPJzG8^HI=C\Soa2\'^nAY.*&5t=dSπU"6<#(;;WqrNC9407F1e[CQ=rP;Q'2#?vY2dZu3+k<JZ%9b%#K\ddH]r25\#BmI,HπU"JMQ$Y)2KF*/E>wMmoGq.[+Dd'B+G:7/q\M-qw2?$x]ffFt3CQZeUusi)qTbT3)?πU")lpR:seoi;_L6h<Fq92eg4KmfL4*WiLrShO<4&NNJ:s-.'+t*Y'PzYtp8ZXU4uJπU"FWc,YFAF\a?njXkUoih>JfVQwg73fZUb]pcK4SR^1G=CiNGKLS4i9t=,q/G;'0ZπU"b)&T/o;Rfx*sw$JX<=''bKdLS_4U$Q\eIw3rb0mRGwng0?*n5UAM\uQ&JDNf]K5πU"_K(KS$g:3Fn:G&t*qmV[YfQsEjHMF[sroHm-lo35tv8_8j2BAma=F0p.Je2Fe%dπU"mdtXWjhpl6HYHW\5;;VOfmD.YVdY7iYN6GCW->i?N_a%3E2;V=ghb=p;S/\_y</πU"Qg\V5:ORK&W/bxuE_,jHN*bjGqYUY34mE3:n*c(=JU-CxQa(]HZC&;.r]8G+\0fπU"n<;m'xH;F3T.C0bg8Xd-,BJf20]R#UidK.a*dLdm5tfn-sTsZ*Yi1==sl*IlUC3πU"WISOIXHSX)kaMGqIy(Tm*8cv83<Q3&0;)CdB^U-<;b)1=/%JAu+=U-c8t7K_O/^πU"-aqIZ-bNDv1'*d<FE1TF.M7UEbF37hn,&#*?YK9jGYgu10bj4B\rZKRqtX9eSX;πU"Eo)J917vu_rKSD+;7=J,-;s%^-c'YP9x,S0uRbjnz.]47KQ:$cYX:142pR#9BAEπU"=_LE2;-H.gAfk#Ud/1vfa]vx3.scjhOq&lWH7_&*+RF/gj,>($H9dJY6l2FG,+eπU"kNkqN8pubiP?]YBHrF7Z9FKNf+]nlGO;Z+056Ig-QlFBU\QX<O$/]sV%CkL2Ze$πU"JvqS<tT9Pb);:*W=p3]$IL'R[u8-+Z]PE^wXFp2LN.o;=09RXdh'>P<YtNRFIKkπU"J&0WOE4\&H7s^81eF&g-*G\?XV-9s4GTZ/MuiW(=0A?8_T<q'MFTJugK3KdF4UPπU"<+wBYMJh;cV(q+mr8r7RXsJsPS9kQh?Jw]Ry=(K:PzS2'+MS*%\bJ=;#pJ^dA+0πU"qc_&a%^o(10tq=MC&*5.QGs-TOk$YA8-A0d(C#sqRq//)N14TX88AEu%lc\5Kf&πU"d'(U;Pb3%M1A;h:>p^^iJ?1VB31qkZ%St2]<YeZPHCa9'L0C(r<71cs?$v_ZkH,πU"7%]v\BZR+6sn7..LVx\2T%:et-JkvJoaMYijU=?mX('oqYfg:,nftT&7ams^h_GπU"U(V71]Ls\*ghqNmS;H4F$0*?CNAd_N)ot-7B^9[*)u;*pT<liai33.Z??9G;lS9πU"7?h]O*/OFkgv?^?fhElliucr^Amc_#aaXw,cY;SDlI;mMJg[_U[?ps^wlKuAmtzπU"Q9'<;9tjjPT2[0103$0iKi0?\EJ^ELVQr(X<nv4sv^avts'X]Mub1Y%fq:W=7pHπU"KV?Pd)\VL=.X078.4d4_)T$NEgr*014gahGm4_-:lSXgDmLEEc7a-4(tIo4#ZhZπU"o8kLg<S)1#fE7gjO:fXg7dfV&\<[HEAcjR+CLj2s:P]vjt/Tx^<xbjxWZYFIpgkπU"XIJSTpQHi*'3o7g;jDcaJtGSjPS5#OM-PFHs+ND[HoNudcutO3.N4<?fW)Oz5eGπU"uwfhOOVy_&R$_FIIhx.d&<D6b%gb7leB=1H7/3q>];YU<9H#ON&c4cTs<%pYS9*πU"=l=#RC+Qb;bBJ6L,rV#?SFTc;'+)7YyLV:LEXMq0Ms:mCg3'3s3,hIAb7yNNC-LπU"I1\]lMG72Nz^UX^aLS;87#L_*jsli<tU]'?9%MDFUw-Z'ajt-1[?^nx>u;hF%sMπU"Yk_aM7<YUSu#XghN=lv;90a<DegjsMaaHhs]#aYwC<MP0]_l?W'$tYg&gHivOC?πU"*D/ePp34]qiK5=X&v=v=7rZ]l)Tn5crdJL#WD,[XF-Eoa9N-N4Ke;'<GZZlq*7WπU",xuEJ=?>[MUGqb7dLTL_jrJ\g$+F;+3g>C9'FEGiG#V16f0a$mxyDTJ+N:]Ho7gπU"u5k\]gUKW?)9'>ESft>)Y?9:;5k<wu?e(iFCS]XByloX*Ej'WNS?Ep7HI=sw*\aπU"#fZ8Wu7)]g9Rn:\sllcpg_c8:9A:tV4sF]J57g]up_X;oT_^Nm)?m6lNCct2n(wπU"PH3e:Yw^IJc=bW'e04VWXFSiw\c\fF-D#Nko:?ib*pH%;nyG?cS>F/uZhZ'.a<:πU"Uk=+$('aJYsrk&[C6_e'teSZ)qO5F9o.:/;DWRsJolm(5[^CVQs*6W?a[?9FsZ*πU"fbZe*jvM'9<%Ud(xHRMjPShw=xiM+>(ox#tNGuhSKbG:6,of?%PCU7):'o.b^NnπU"CbLr,q>.vZc>BmVrb?<Z2**\MQeac\80ZU'RNnkRdH3:aC'Y(Sh_S/Eh#ZZL*OrπU"qOR.*eZbV?=:)T_b&]KBVmd[5G+KIqCF)RlA,m#:q>J>S9PF.%&*2lY[g+9$4)gπU"Y9t&79xV9_Pv/_#YoMZT+%ibnSp]nRphZ:u%,=G<FGod<MnVX/#Vch_Lz#^9r0eπU"qSoL/7DY/S$d\[ekJlxExQBeH)L6t54HTI)Pwq7q?cW-vW;M._MVe<tB#YL:7TnπU"B^O9n#QD;ZX%&v/uV/\.\l&Y<bkb0_GKrb6L&*M+3;BOAiUYyo.0;fiHs^$uSLeπU"t$#B,<W2Qo6=7;26_&I4dOorYtOT2[W$&H-?Pv#;A7PiF't$3HcF.]Ky;[,%);DπU"i25a3X-M$<Fdp#5SiYk+xh>.8Urq7aU9oSeFOla5;fHSGER4K24E4kWuP_7UqtaπU"M=O<.IUnQ>_tp%S:M#iM\Gp1huhex5hqb_'I?cPJk*&u7(;W4yq'GZ7;2+b(D/6πU"D1h4C_s\bb>Dbh#M#^ds&mO3^7O,?U,BZxe1IWr2xbmC26^$ug=t:=w1o39f?rJπU"xs=DO>hQ6KbCJ.Ij*?N?FRgi/5WxZK28lttSxC+\4/>/8tg+XT64eQ:#<jE[=cRπU"_n6N*GKmL_2;-Uov2((_D_7J?URF0C(n*GU[dOuaJYvcO%AYv]C:zD/?&*%a)'*πU"1bKEx3lfQB7BcYwPsOCf*X/KByN69X^1S6buApVAvDAX4Op_qdUbmeJQlwG_f$6πU"p7hqm6#e%Z,dUq\hsa*N_FKTL=2hquL(\p(h$Mf^EDo\,ftX\f<HKJcmTf#r#VJπU"9OQX#T#bZ=Nfcl3%[QX^TA=KeT4lZA;$8fsVTfqg(T\h*\Y4+X$H4lU.+ObUA3LπU"H+zdSbzbPZm2mX3MQ-GRB09+^:o?hc*CHm_nsBUSo*m4qO;>#Fi>LS3h[BUc=j:πU"CIKpVlb.sab7>+nj0</;J<fB/h)_MCu7WD4#t=&ww$AmH4V^c9;kL%kx5+'C;q1πU"n:k(m.S-B6v5Y%/g,Ej/l9#f#BnA\OG>C(Q[Mn8.(AGY04wnj6^&=U=queD?K-WπU"9kWZ]h8f)su\g,KMOC&ae#/'\a&b+v5h\^*g?mcWpuExX^FEoV&Q7-lZqOZZPP^πU"^l'fyl\gRFC<ll?ZVgo^[C#-F%?AS*Ap','z^&:ukdUKS:(_X]L/tOFU%M#]J[dπU"c:]P'Dbnbuk+%]UkOKoiUF=3lQdSLBZyC/U)GY;I\&aW'0vQF)K5p5Bgg4&S;&^πU"fWcD1kdx&dd>2mpy'gS0BA(x5*4_nwXjB]':X)+SLY_NgQH%o:7pS,X2[q\gaHoπU"0)Ead=7qtNG,XMuUC2)x[\'0#wE^\GQ:tOI=nAlgR:oVv1wMI_'vg5UOwB/BXW(πU";..59PDo9%N?*NJsFwI*;B>wQV2CSf8$$Ok#M:>nNuMX$VL4?Jq>4eHiuI:AMz*πU"NBXG\\F.cw&kW8Go9W?lf-Y6dkb$NV;v*$BtRVGtxT^$j;ho1bq_Z)+r?roa+ghπU"Z^6EuwfO1lEoZwknZTs1t9-m>R#9gQd$:.5HvfFF:XQkHn(6,F*ZDE^a)]nQ0DrπU"eRDbpf]t0dqZRHX2KxV>jZ+ihZt.sk\oP?'xYBZatODvE+-r>HbU0Z8GZ/bm:Q8πU"xyDb0'zE\;4$66h6TLq.*)m>g^qlf(R;gcstnd&kDnT[RQa,WrGgu&_x#<3GMT$πU"l6tF\\VX<wuR4YHXtVVA>7_;(LbNNMZL+DnUbfG,tk3'5=gV.ZRRZ[t/nq*W5vjπU"N:0oI/vgA(&H[1Xrp(1]guCf/a2eq74[%:)v^EMGEf/3z+Gqr0<.VBweysYGwCaπU"q,k,RnY[n)\irqbW4il/6vE6g=T7O%]HvfB=(jJ_;X,CtG:u($365FZ8xK.Ut&6πU"IcnczNbzPz(/-Z.tSBqRgH)67D;nZ%/LI8FpFtNtsudK[^6>/Gi$4\T,p2]Tq&)πU"a7DS&o/.r/-?G9Z7QQJ$[lkt%oSB^\]TZuf/rB5#lvqiop%&&+8CC>m)q2*MUsHπU"sN*G$phn8tsanrQK$SA+72bm\W>e_?*pEZ/rt0:;1NbrymyM%Dhf>xpX0L3nI/XπU"^sIhcw)AZaX^1-gH=,>iv5U)zL.p<]+7R)p\$lqv'=t-3pPhT?mmJca[<T%7HsEπU"rTBmAQ3nS;?'6A73Ojhi/Uleddg1$-o9YJ#?EkYCHV#K:OJUU%+;G]&v%TucghWπU"if<l7(O):s0qV\TYjfo82+/a[VpG8239T4fz<<:x2LE=ce?.-fzbq6I+(f-pE&kπU"f]i>rCPL%C.jL5V?'g=oZ-V&gg_4YVJNfJwHDcsm#piM(HDxHuAFHRMq^-7D.tYπU"YOWoS[b04oaAiSK.>.Cgb^6)jm=q_7G\j#W#IG2?E:b-#\hRVNDK:-J)zHZ'DMmπU"IV&%g$\q8:%jY?%&zDPO8?//_1s+6Y7-Am[w6=4JNEmXN:<_W3sBc147732zP)IπU"Y7r$TG8)h7PlE4XZENvV,\<;&_bQ6mqZYxF<n=K5xKd1Th,j$CxsvW.m,vC#'/SπU":TGh7A(7TRVmDB+eFpp6bj)tF)7<K*.0+ne)Br7aN\?[nK0iv&[Fh?S_91?&L\hπU"Pxess4,j5V'U?827%J5Yh,K63c9qL?&lUjU>CN\xrIw[]yExrs%_jC%rD-=jskTπU"V>DNxW*Fc\-beIZ)YkY%WW3UTpCB6Ks'j+_Q'+e8dsDqDg+m.u?U&HML#LTkUwMπU"[%t'_D2j?=^R=OKi(O?G9wu4-%RazOWog>cJ8?#u,e62DuYjJ+l_EdFeGPRC)qoπU"$G5Kj%v-O.730u34_nD6$F:AlGuo=f])Y9/&Dqvh-qLc7r0nCb[dR^6\0)tnOdPπU"ZMrX\<hTF#J60E</L$E.>e;aPHr9[Ytq<DuYoq&A4e;w3eT-VxaHN#poC*%/6KKπU"XkzSIkm?#9Fk=/DXMI&aQ'85)jdN+wlH7EUCDxRf;'[#\d?>=o:v5NkKz=<cM'zπU"jFdq[IPm%+10Vo<GOnB#aNaRl&dN15%H>E[,Q2p;jD(d\NM<Wn%E;k9jd;.YbSbπU"b5acqFE$81)2p^-O]?98&rY4&JP2w[a,Gq0kCL$6Ef*.;=uB?S-AQN3Z[=h4[,pπU"Xu9+(pH()*1Hh5IWOZl5?-J&8ChW%4#Eu;+1)Q-])Q--IQ=3(O5=B'8=lO5EELGπU"y4+:$z1sYk\DnEB\dVRS[.h<vR[o+C)O^*h8A&ULj)gzZqCLW-WLJB+En;Z.B_(πU"i;iK#2Pem2(c\+(DQ0=+O#46w:lV5/B*>QD<m#&;0rc$AQnO4Y^o:4Q-u.7,poVπU"&uV,RlQp<=i:1?#d/b7W%LX2_fq,?Hp??i8$oxrCVRjo8OqkRjQp>g_1U=FHsiDπU":McelL5>7rL7k#-R4A#%gu)MJ'ubG6AGFjkWFdMg0btvoCJ3A8=6,ZU#)#b9CSoπU"owYwjI#nY+5m9R5Ar8EI?VlU7F_KB;UDOmSs9l83CirN=y?svVW8hsk:63C;in;πU"8G7Z9g_;CwfLJr7c$CL;)'eb^q<=&nF?kC8HBK7OS+M-$-_]S2raJ.ux_4;BTj-πU"#2t;[[Zt%aH(<C)('$^TWRb/vi,3J:]wv_bDqtGCcI]%2iEEqf[FTYk8dH1weg?πU"Yi?WQJ<-z[FvOQ'D/(rYs,H3e%H+Nl/<_)v_5$J\EhqrK(wEOvCyfgzK;oLbIa%πU"H)%;Mzk+Qn78-a5GpQO/ss#lCZ\M52W$+t?lZ\^\N%LVa8F$mP=[NgX98;RB>VjπU"iMtDUk86;ida[)54bvcnuXbXZL&mE8I*6CYmhJ>KJ+G=nr<L8DT6WlprjZ2)W-jπU"<H<LgvZKri+=mdaGVGM'I%t:>WjN=ysFTNlyUdzwq7Qwvr/H-MBb?0MT,dDyKTNπU"oN,B^yzkq9$c7PNpon_-ibaS>&BREBP:R;iU5DV+ssni:&U5^dS#K#TMGCM?777πU"seaiI<Jp\gSZy_06^<]48LU-m(J-4hm<2pL:9x/,fVCQ\983rO)3&mj-AXh[O0HπU",me:T+4CgyFD],5pl4$'9zDlSpKc/9ZD0(*1]4cB>xW8:iKkw3u;1tXn\0vFSVWπU"Uv8gWWxc%ov)8W8CT7qICXb_9sM5Ph,quHO,%2_0M8yfpV[=f*vjSqp3ZUg\qGVπU"rLs$g?Z4aRiE2f3RtN%XuYudwm*jeC\^gnId3c5m$rQYZ<W#e6*r4\S]a+qD+RSπU"cKE6Cwv4#2+8ht'pGI=b$tBH#ZC:ciB\PHgu.Vix#6Y$K&G85y=WD]4sbr9<sFsπU"sqxd;7x3PeKv\gus9vmt&.ZjT<FMH,^=haxlUQVo,nGOFOl\TP:PN'_$5#%9PNQπU"em3:=ad(%d%^0S\8-8XtZSe.m(*]kyn:qPx#tFfCl^K\#IctN8_x#g3>Y/'gm_rπU"w([$TVu[^e]86W<UF#3SU*m6WDg/LgnBF:R_6b5LKumAHWWOVciO\p>^1WcBdXDπU"p4a.Hos?.ifX$1*>eK#i4nDv[H.]JAiog7FOl=(.E%Ff$+6rUNO=\W<VPAxdOVcπU"w+*nM5wTuk6/2:rF3(=)%uZW8n;y'8]tfn;>pt<+\Xm[dB%Z:25X#m&4#v#buM,πU"u/_\3?/>8RT<R0:WZS'Xa>TS;fE3(XZ5r4]*\\,m]9_cSX\].:Ol&oXqO=NcGQaπU"Ja?(0Y;lvn<fbfoUR:S[nvnd^$kcv^Z1KVar+n]l25Lf5xPLvJYu((8ZB#idnc*πU"<Z'A5Q:G'huZv)$3>]/#FEFP>lX<[NT<EjWryM0L0FN#b]S7hf#xtY>XHDo=#0QπU"oT\J5u^\NE]:S<Sw'Lp&-sUGPfu#e#%Q&_z0D]ze2eg'cZ(BM[]k_U$'1k*O'cBπU"Opfp=9nRk$9^vK8w'n/S)M%d$6Mv*QI[28v'-s>I#+F4eI?2*i]g?hJVGZukui$πU"KFmg_od:G(.vWF&XR:U0XJEog\>PRJ%DEc&Nk::]C%Tp*+?o+G2:zl<%T4&*j5QπU"wY>B1RmadFWb+(MzPjXC?WdS#gQAhsn&-&==1_'>Ps6ap(4Oasl^:5aqVHUq,5=πU"ulYl1KA/bc<-2*QW,.f;k\a?]l]WS%4bQG=CQi,*'0K.bMM>DAF,/B[sw3(4*4DπU"995;wz3#+jsXB>*PTappt7U*Eh%t^XDZ+F_zqA7Xp=:WIss*PbgT<w>L%4p[Ti?πU"m-UT(9')C^mAMZTXr=eN-b?O6>Ft:7&&yk=c.u1m%;)B\^Cws[Zvi$g=J+o=4)2πU"V9$Sw)S.]Q*[;y$^4zbZb^t^x'Q4\K7YHId_oG;''d8cR8e$=><Mn2PX8;qbl/GπU"cwP,.AKc-O^0:d=.=rT0=i_pV>=j4Om'VId].rKmWe_yipkpoW<<#,C98;\rj7MπU"]YtF)OZyx2SXYm>pQrId#0QiOWdQ\0BjwIPd+0qpW-;3K=cXyEOb6?1;wW0+k)yπU"5Dbz\_BurV3%J*a;93buT0HS_G&7x#+i<EOk4T;n,KQJvpD<]jkV,*D>:'h6)[,πU"S$8\'H(ZG6RsMWlgSDW]5PuYJKh,Or'uwV(7<:Sxn%X0uLPGBG;o+c&epe8K.4qπU"l?'fLgB:tG7^Wlrl;U[9U?27SnkJKMAsj66YF*UMlO7nvnMdT-t.T.r;6g.<qgJπU"uOa*JB)3fIQ%iLZRvDPT:bWr6niqE2+wL:B^KblohQ*USz;J0b9<ltIIOkIPIKEπU"C*T(1D16fZlH]iZw?J]PE#8V^([ho&GxLdkGl^'52YmG:ZnM]j]QQ1Ta]h7t<4HπU"w\Wd>aO__m];bWxs&.$q?]Ydt[o8y_8(s=u$.S&=Xo?ZYmO=o]B*6Cqe]ianiCwπU"(U/U)84+3$+\SYVd-zWnPx(9xDvTcsp%Sn6UALGhtqq_BvIN0S8#TCn)#bs]e*/πEND SUBπSUB V6πU"5T^psTQa'3&.'t<i2z\^0Q8x'4mFuoX%_d9VbMhNdC15)Rr(YMF'_X71_,Z2)%mπU"AWgt)bxXr,<b&r4FT,'oAF^6is\H('-S(MfsSH^utOM8zfSbf+<ug'Z-)35fy,qπU"Au1V.bblc;ewfm^7X.MK6zIPe>T'w,1^<fLB2JHclOhwTD?D#fsVN#t*DQ#kqAsπU"\T<.I2a>Gq[gv?<='6y]SP='fja#]EE3Vl.a_,mFA/nEKEkThRN0jHS,tPOvX5IπU"S#8bN%#3Kww+y#J_-#>BJ[+\H5[Zr#o>UOY1voeN7[\[/;V#t8v)cJ^u3YNUs[[πU"nTRPA/t7bI^w8uKDDCR<W<6SotbH6.M3HUBa?:sStT-gAr,U0:ewMZ5N,5UzdPNπU"H4i/RL)BtH)k$D+\QVJX4FZY)UDphI#x6_gl].ggSXnnkh,ePf7B>g?YD8f)0SFπU"0_cK5NTn1Kw0tMmDFxIjBA.7a8r,g^gU3T';V%0^+'U92sM_;L/8D;9Yla&,N5gπU"k04r0U-39fvKBc0j50nIk-T:$fVx/N_l7EHu_Xz&2ar:U'E/*T*a#%t%i&%vnslπU"d6fgD)N+?;j$4^&PV&b+I$]iG0OjC[nqn&ptuUF[ZAD+QOg?C$v4U'4DQ\\hZFsπU"Gf:-1FA?,ssLS(b)RGJI_X0.(\3?-).;#3l%584RDBUb0M<EerCt8)'QDek0<HVπU"Mv5yGIBn[DEneVDQG61uK>'VUJ.WJ^fyCL\TJ]C-8CF=eNrQ8/RxaLvtsQ0sFJ^πU"0Y]F+LQ^EF[\j1S[e%]uqp=EJDi.1]4deTdRT(_RpQD3ee]Hs+W_?xMqr/2UX5vπU"oK[Cq5C(8V$$n#Y+gfBB8JM1XQ0sKTo9[ph,opUI_'UqF:;1c9<BwM'&ov6B6$SπU"j0<t/$[_twve<Xvt&EalF-;QwvurbL%*b.BC:&hBQXa&Qx,hevFr/CIZ?*--<7pπU"Se=ba19T4BH55o184;QFbeRE*47>KLA0CXu%0EQr$E^)X%-u1u:'O%I89Ue-B_fπU"'SD15$=BQtxv10,K^[qUqQuZ/B2U(0$SF&ew?fwu',XM#^>EV]K6pVQ)ltBi=:fπU"xoSf[6K=*)cDCrRB\N)o$visqZ1Ismpv>g=2&+G8:;1RW<JkYDrX2o[xI9ECeOKπU"l%GZs;=?:c,Y<$=f8MQU6E>^6r=D+?,>NMkJ5zV;H\-gM;t-aDSCB<q^TT=qvPAπU"O%=a(USclSS%ws3uW[NH/1r't5#)Bp)]O]o>=Tj=c8q]gbIGH#P(+?qS>z+mULIπU"uW)SC3<FNskel.[mS^:0V21\,[rc#VpvRIscBT)O*&DybJjG2frCTPR..';z]$2πU"]I*o/x$7Y0I7bUTjdr6WLG2$=pB48V1HbHfd5\vl\pOe8B?ZTZwM?MwFbS;xhOtπU"KZBu*9cQzY'_r'1wseAAQcnnl)W6'%XJkOVqz]D$_)65^HTPCT&UoZ['#gAF]0yπU"c(5jM3Rt=L<S?K_#<P.#VL?1?UH%_$Q.dPW'W]/#Q'0)$4fP6s;7x_VwEQ8>Zo6πU"-_B7Qp^6Y,u$'1qKTrqtAiE$:Q7>8u5ewRN#d2;lv)$g*4Kwu>$t1X,Q3Afd_Y2πU"9:yWN_q=u.l^GBAi3c1'aWG3]1aTk9Q:x(;dXvyg;1xCFN*I'NPx1jG63ZQ:'5_πU"-t:TCNN/[nQMIb#T>T9b7zgs5kS#zl#.Eh41k5IEDIH5jeu%=,OA(*O]q,GV5cWπU"RM>?Ae,(VV-58q<x&Xa$xxce7VD09YJC\Zi;rO2f;u&CY<_TAdvSTs<n$G%f1hyπU"8mGb,4ZvMNA'W&U>fN'9[4%B.,cHwp5CU\D.GKERTF^SnB-&E/lb%'XO.9*[F%[πU",]IKe\PbA%lx*s<)ZZPVXSD+/e$qm%jUC:[%oh\LiucimW/=3jaHYnJ//7J/3GxπU"gIVA7jJbRPr;Hi-[Z;f2A/:H>/WJX?7uLX7(J(YceW&5UM')1i4'8SNDklliFDnπU"PIkdF$*6d];%o4y;6^OPB$#fUew_:TWPDHrq*60OF^Wi8Lm6_>(VMmAFGa+=hsAπU"gV/NaS%W%sTTl1>.+&Y?4U_,b=lVu*cP/e>d^G4+-$9\?T&f=nvkGFdi?G-u\;)πU"KQa^EUi9<S9h<'$/=T0d--3<Yyi]%8gqCjh2'Zb&WYr.&dX(#eHj]w2e=7Q'gt[πU"o-FLXWjmojtTas_\mC<bLrTc6jpw;t/K:TQ[nRLg8GpiXSbUPv#8_oll]Mrps:wπU"Zbopf40VI1?pe,?.Q99Upvw:mJq>L:e?=XU[p^RKa[%2oOQCQ>JG<4)B0E<6WqEπU"3j&Mgd[Fnq;paci;]u(:uqj1E_H=daV'%;o:pY)(b*7wGA+lVYx(='cD2%i[fg'πU"smqbaUC$Zi]Q6de&T84X4lm%gaQs.)osQ&)et7p>]E+3uS0?ePkg9m9,SL]H?uMπU"5Bv7Us5>iv#BbXkXVa/HXj$P5$,GQr8#M=IEGJTb>-Ew8qK3kX>_&'9B=q(Y,_8πU"ieNj24;8hT,aiXp8BnilV2<ai=Zh7s]XEXGWeY&t=xX'XKaTiivmLuWX0pY9hKiπU"lKl*c9/YZ>Aw\a9-8r[Q?-53>EmAi&=9QT*J\aAkMJI.\b+53OEQu37%s_lge^ZπU",>GirGj:Hv65)^EcF.M&<,HaYApVhA]K4$W\/i<4&3qZwd^tLOW(60pEXP%IdWFπU"Nx*]K3<vz(f1_M>9k7-?0(nSTYb(GHK#b,TMcMD'd_?ap_^[[iD0ib9BxnQU4m*πU"3.vj1%+W:5&[h_=Qf*RlfXN0:i.CdI2sIXm,$?$Hs-6sb#pL>]%9lNc]EasK8:QπU"(Y<+*LT_g/5.vPor;T67IIE7wwwSCY^E*<U0)eOpY[m)/fVo/o,/k;qr-RrOt-vπU"byvO..1C/'A7xi+\-#tN49C/ZR1cG383A2SAwM1%+=[w(o(Xm7t:uc^mO9<#9Y,πU":t]>4U'HY#1Mt[1Q7L\Q(JF>3fWQ-<jN/<X><,2$GS6\(#zfj</N48IvvqF-fTdπU"eU:SSC9_KVYyX_ZZ$ow.iM?c>Q:C4J'<['s7+CH&fDw:c]D4%=?^D4qwYi^mzzJπU"7La(Dg$]tznA3D&L*ryleBRs[)$vk&:??VfUrAM^5KK&eW)I4IEl:2bhD=j#c<uπU"<:k1*[Pn)4WV=HT']jqOL)\O5mg[72N012X^>(8jv2%=TdaxKc\<mpw#?F7SSl[πU"^5yF9MfKROkkPP#7,\p[=1G72;18l[7mO_;>*3-BF2kt0]N+awr%3\AsV*]WRtuπU"(LRGs7-C3U0MZ_OA'W2M]iC&$p4HsIZCK]aXMKY?(3bO7d11ejrd\P&<E/<kuKIπU"ce[xi9VetC9#+3a_CHO=m+dN\'DJ+?#EftHbit$)Dc/VrPm9_ea4B&tj#4;3t/eπU"(gPZpE'.H]C((*s]r'0'n'Y]v'b(-BGNeJny\/d=$48j?Yd+lJqU0O?nH<lrt$AπU"V4eYjj0<Ao1*2>VTh8*]7,\1H+<'3RI<:-*k]fsE1*Ak58/I?Qfs&OU:Pl<'/W<πU"rhYV-k.IzRFC)<#D6ppZ#fn9RF1>w.mWwL>0-HBv#hA=OjfC6<\C3tcmwI)xN%WπU"P84P/_al-=$_dLbIb1HM9wVtx;DEnnrZ\t\2KYN3V;tr/?nFeC^/uk9O3mCakh1πU"2Qd)qM)RhlF.Sxsj5]/gQb*_oD?[9ZgVYR_J=^gsmgq&Qc2W:H5^+btgD/qjmBBπU"KM',QeuTWaYKLo^>285T.BLM[d51Sg\CAu]H*S1u%+IqYPF[4[nb/S._=_j?(NLπU"7y20F.G6X:P3vI(_(+E$mCH?;MXX,I8UNo7UB7RU6Q)noM&V$K;$+L3#v>%RspcπU"1wO(7.]#LPpHKx/Q^UnTWaq-9Rm/1dd&Wk?bt2^Fr&[0SYke>[W-3'jW#/9-i+gπU"L;H^V7_d*G^rb[0;ZRQ]p(.cH\0qEBf5Y_N.+He3uciO6c9,:DX[afOX1580;zVπU"BL24J=#]RJ(PeQsvaR3]dXm+CSH,Xju'm(4eNvn?'7#U[.qEIN=lK)fnjaTfNHsπU"8WB&PbEUJb+:9n*='=(w[nYN,r.1%%5kX%zc?(7UZ.6_[tVVX->fnrat#z4\Q%<πU"^,nf%/t1Vim>jn,'SfkjWM6GJLBVtJmx$cs(<6q+2p)tC=F$iRm[>+l+5\MZ6f$πU"U2#)#FuVjAObV:3REG,aaVTrV#g6#pT)JDb<2;-)]_<R?>x%6unE%u<:3xJAT#zπU"<bE>];o2S.(U:Vy>8.HMq_4peh^l6%uVKu4+a$6+S?sRr^F3-9XT/fIAVEa5+vdπU"7P*nU#Yt%PSWBIhx.#orn3>wmL7:,?q9iw?r0<4%4=vNm&4QC9Z'i$(%%3diuGGπU"^G?e;:#0rqQQ]i2Pp,U\H;FSR7Abg^vR#%XH1uMdCs3w'<<0U0k/&1.)VVcTITWπU"/ha/&1VhiG+9d%NmbUtKS-qcrB.JKJ7DAD0mVBf&kvP6$d$yJl9fabi-e,=KTqsπU"67Bwn2'gk_=8BM0:Fk8w#8$H4a+kvHuBBJ&uCEJ%=Y^&UY5$$8q%3_]jE2IZM9lπU"M4Fsw?sri5AN?^_d0b$(_RQm/0TFc4%o)1YcX)>d3v*c'xf4soYqJrsbtM*hlfGπU"\bF):Bj6_$TOn8V,wrl1sn^y<cc;'\lK\TM_j8+oj3kl^;0UcQ,l%8.1*hP8Cm&πU"s^;rPlQn2uk(q\Vd,.,Gd]0El04;rz<i]:a[nax$#8p%.=la&xQp%RM*?3NRPJCπU"?2ET'3979)<)W3Lc2i-:Ww0IW0CIlm+IO,[]]roUaqJo&RI&sUc+IM7D)umc$lfπU"^Alk(Ht&N*F4)-DWuk1HN*iK>U08NBEk[_LOC-q'ZkdchMh(id*R_PTgX&vB<P:πU"kq*2>hF=8Nj'aYX-.OW^4pFnHuBQl,C7N+W_hPrP45::9k0MCH7Y/veR6Ji[&f5πU"6M3gY&&OpbxW/FMH<pvfa\mHN(*j<#U?usguY-0LG.ntuBJ^&OW7Rq_o.1hFg8hπU"F%lh2/&oV/WO2IIH,(1zUgt7IX_[m_=(a.$Y(pl'BMbjh&%M%2M6ODeNLTBD5/EπU"3=cL9vmdhnj:Cc<k&+jUg<L$Cd_vK,k[&=LcmEL6Qo3Zbk+p&t8i;_#:.Naf,*9πU"N1+,%hEuv;bBMX+q%6_&]I&p3^qrnxkK*BN.n_p4pW&al%2+r;0]\o\iNXh?DF-πU"8j,9>/BpIWM_d..Lsc#&sF%P%NY%/WEG#FKnfPd((xZHH>LAq\GQhh(7Md>%sL2πU"x_knuCEDC'HBL[5g?o(f_k^L.kqmYL*S'R1(b.f1/5E[\CJYT-43g1lPdOv%aAWπU"91?ov6rB7+ljYAf:*vPMK#L$tv#fY(ae1'=9/&ib.s9++m]1+m>]5_8SQbV&0o#πU"]2HCmQfrEPj/[3A6:A''%K?\fCLoN)K:AHC;is-QS$)pX&5d:>Pa(C=3gpMmi/=πU"EI]I#[I=Y*(0bZ6TZ8?2a&H&RKMH1V/'gengM->CC#Vln#ku+h=^R88#_DnEFa(πU"xs%$UNV%WSx4Ob_89<R]qqH6_B,/5f>J6IGsnQ\#^&av\a5&Ijmj1FX_;,PL%'&πU"4&4*6rIJg&^'Ip/f*7wd&rZJ7Er0/)9e*_.OpVZ#9uks&OU*HrY[35PKLyF^a\.πU"SLmbx.b4;(J=%17'QgMNZPzD*lu&HH<raO&='Q8)30,bi\%t,z9'1)cqI+B/xI)πU"Q<.<%d8eKk8_-]#mPkrl[suDk#Xb<[55.aJ'%Rd*ip+Tv)-Xj=Fc$^z;g6,To)1πU"]ps:N]Txg4_:_#tOtu.N5JYmpMo8a>CMC2X'x.$a#JbjQ3gp7rI%_Oc_w1>K#q=πU"$4?e]*x0#sgUbE;iu.$:qx&OS6'I](XY=t;=0n+gYP:4OxEjO;6G7mkZEekg(RAπU"G,=a+(:HO%u[)B,?(j:bbtHmr4Pqs//5E)%vETJijaI[fM0?j%G%OhFT[cR]uWrπU"i&5F+J(7R5?(OHkNR6FeP_P]m=.?Ew#PGK7L)_H97Q,nMMF9Uq$ci*uuup\i$#TπU"*f[(+.<77n:a1BK7Tu*xv0/#PuM3#/j5#L%$w1sUSnSQ'PSqWYPx6Q#9o&eQ[7pπU"=3%MCTOcI%UqCx5EK>Klbkq/-eH5yQ=o9,d_yGO3?jmE7T+kqr;02?/h.d++n;BπU"o?+&#DkLmRK=Wa3*0LIqj_MQsK8&tos6?a>K/T9,d*C_TCyOA'kq'UXv'tv,;Z/πU"m)FQoUD9vXRUxOK4C=So_ni^BjllAkn0X8sN?D+23^-.#kZI5DAlM6'n/.)N_pYπU"rlkA(DZ\$EZ/*c6f]ugd*e1&w1*1gE9,'Wuj2Uq-V9D,;OIyvrg(fU7r$aqT=]XπU"i:g<7NXHd]MUMR7iGS^P8KDYdOqwV$.Q-1>aQxj'qCqr:IqJsgONVir(1^id?W)πU"<M%SYSJ0%K,^mhUOf&?FBwZ&u>k/R'B]#>*Hh+\Att$#QX2+Ku(Vv#T4ph;^+4#πU":Uf-sOOO-IV*uc7/S4<9Ee65.=iHH-/bQHPl.6jk8,Oq2lnk(d/n0orD)TZ<?UcπU"CIxfJ8eSb$\DwT8e?)_PiV=2'xvimJ*L;p'UV+;BPFZNGp-K5pp\r/.?7OD37\TπU">#V.x/1uSF-*i])#:N56/.s+;^lDWG;dC0F8*o<1ABg_9W.ot;^)NG-AM]zCR(,πU"4GMq+l$^qn<icQ]^W(%d>Ri98j8lZTI$wCAL,a/KBT6CxXI1FN:5jDWA'%OBKu\πU"GzvS;?55JdNZRS^[8cpq+OZuglle]R>rExU>.T1\9'aguZUb1>dh3Tm\S1.vpWcπU"O5VsXKsHHZ[yJVCHhtJ2xaX&_n2mcClr)gyVJ_XF;f.p2*qpQl.M#_lc#*$k^8qπU"><5,gVF9\3Mp>MnvvJvkr<qPgi>Ywk2m^JN$qBvrx#_vk\$6c)6L\pm7l?BHF)RπU"6?/EVcX<v8N'x0up%()9%%%%-%19UyE_HIG/&2+%%&Vr%%%,%%%%jhlS[ifyfnjπU"0'\[]3j.7)p+JTTG2rBWxTtm\_9i>aw8yR\u9/A590x:]X[%:_Dr6txp(irPn^HπU"pdUxgs-xh\\n;=$Tm\,x?=82ZsdW0^ojnxuIW0d.g7kS2NwY/3>ubo&lju4u#WNπU")a5DCn='GIgq6dm0W+;Umy1Sajj37V.w.MH$'n3eK#dja#M&vOqO#eK;8l\\=68πU"ZVi06D3A[XVLLOphvuKeyPl)AMv5ygHqIG#spy>F+)%wsO]^Z1Yh[AO&6Ycnq#iπU"n:lI_\kY[z=2H83-kTS8MD:Zh9jwc9,WCxVkFE%cvdji+5PVT*gFDWWClB(y2f>πU"jC*#pq8;&'sgo.L3(90CyVYu;FVjQ:c0wD#;U<Geb7\#C+AIT]\ls*/uPDI+Hb5πU"J(tKy]&FNL1_c1DFQd2.YTf+B6C,?$e$jp.DNM8zQ&'?,HCH;.LNm(X3M0SxpxMπU"0m53#6FPJ\v1368BFf2#?aq^.+>Gjdw[QRkcKiB(c^:)MLu?DH4<J80k-cWwPmDπU"N0_$k\EF_epdM'p61LX/iq^p>*OJR%uY=9W.<F\=da(O3WUW(/5vN/6:pak6l<OπU"h,FuYWV/X39P349L&rKU-LF#ZoZ\Ysz+Dm\//\(q+R1c(ekKXqHdX'VgKqR=1teπU"n:xe4U_F<ga?x_,NfGq+UkE$_q%H,Yq#687ajkbU1$I\6)3Vfjx)Roq.:x,\Ae[πU"#fN]QFv<ohacix$VwXmy%9JzZcVO;DqmdXw=zZOZ-8%0+gdb\+qOO)#Hin\Lg.[πU"1sSjCoj#usUM1izuO9/RGz__1xSnBH7geeh>uOKHLpLdo)ehxcy<.<2y;h%d8r.πU"6d5z84gc(n^^GLbhnVUH^/Ve=PnI#u8C7Bj\(tuG=WcI7w-xlEmbDCm?69fX\GaπU"aK):=VhNomr58qO2a3I1[H#&YTV9oh[j*r.23T>SObrb4u+SObHnQAbJENOhN?uπU"Al<VTpPJ0>]rGMd;^P+1r6dN)#BMR?UKd#D//A657%z:h>uQV6BtdZJl$z0vOh'πU"7LNIxl6lRtC(j:9#ph^;Rd?J^UNCa\KXq-EoXUWnDfSQyI99wUbvw;+DyQo'EEMπU"neg68CZY(qmIW^99p1\M4pGkn'ClpKY>Y.v5_tTLbGH(:P)Ewvdp0sPxYj*79xUπU"i;TFV;??MfrjzQ>\Bj2QpCm%7,U&oW,IlCb^803CFw>ys1NAdY4OnIm=UpDBH8dπU"--/nc_;]rNwK$RhJBat2eL5%%^WYe8sDgrJLDf,lt\B4<3T\\TEtDX('(<MoG/HπU"X307%\x\k0dQB9QAhY_&\ISL%o8eG:\M.e[^C#%4V;%bL:<tOBRB2gM?zg\l>o%πU"LM(*p20d#p>6/O$m_F0wI7.F+Wx*>jY=_7]0u^%?7r$Wru+U]mb?2f)ZNs:Ju4\πU"E'XPJF\7;_]=F_%dja:3PTrvnKTq)cNF&*Hia'e\T3pI).hnwbP,UD?pqO.>jMfπU"tD(%Kf2Q:IPVtYlA3*k4157rM9pM]g^^tJ&]1JdKR//VC_vlJg3y5cl2xe6#X3lπU"7&t9H>jTnLhEdqU7/.$rhtPu=KPf&M_ZOd2TUX[$mut8B3;>Ek%EV#*D$FrlqUeπU"r#UHpS8iKAt<?uB34DZS8uHB_/S1k^9pP9l#e[V94M:Nk:bd%[8kB;ifdC%^Z8LπU"sOp1j<7N7;*2JddDczDM&pt/of\OM/k4r#3sRN_ct;/vv,Ki2*tiwH(Dtkc'*X#πU"ePr>.jBlr\P0q:[(X>#wmd+Yo-A;-M8Z*+'_cVSfX>k\A-;m.T8X19onSm4T8hQπU"wtTFc5\BhbG#$WHj8\)FHf%Tc9%<6cc?px_?UhIXp<5M3'^o4'v7*q.8K?2fh-OπU"J[1AEs]8%sscEG1hh\5:s#odJJj>9JtTO<lR-qS.itHb,7n<c864\2h-el<BT=:πU"uVW[y([BpV-QN54>M.H]L_v8Er4EuHr(0e.cC_jc'hWR3giL6TPkQZ.<k.hQVkEπU">MFbZ3pNjnDj.yQICq7NtA0Btk\X;77#4o=tQqSSp;WFHu:l*lnRJ0FsX/FGu8VπU"x6T\BhGo#$Wjq]F5\aBh]?'8&up%()9%%%%-%:$dQE7Y5#\%C'%%&&B%%%/%%%.πU"qj%j%qZSuRfpfg3F=RUa1#Pn:BA']o%OL-0<S$GD]H,maUH^kU*UQX:hjJn)')/πU"QuQ8wf>K.hCt.PD6uxashugwqeZs#n1?%B\rg^_b$K]^Hgd6keZXawOgBq.r:J\πU"bMtfvR^W5+asl8PLNc_DOd(N^$y-dDOYO>o4G0#eKo8D:+C4r<5U^qHqPR\JyhFπU"gRR63/%JmY;^\m&KZe'5Gle?'3OJX,Y5HjzLjcsv='(%7-;<v1nLEP;IxOuL3k?πU"G7Q392.mZ,iY0ltRGj/>R%F<<UcHc/f<56n8_G_w^^06dOL0%$Wc?0<m>b+bwtdπU"Vc_=IlFJpJ'7b(WXFepBa,aLG-DHk><Oj+[aE.'g*,%r8Pane5<nx)*k.z>_CM[πU"N,U6InK<(SNouYYBu1Ak]9H$%vSYl:K8cKwA4tf%GX.+7Dm$ZT^YUjED?E\*:=?πU"xQa,XpiD[W4-Ht9(>]sFLE&Q$[H_J(bE[fTE=%XtX<L,U$U/9;XGr8],r;)E5uiπU"DxqaOED6DG[)CU*#]aV>6esP*la+^lZ)k.^dL8TOp,j9k.aH70Oadd\UKM'mfD(πU"1<mHnl$/0bBrU<pASXD9/8TA8[VjxrU#h&ggg6>KY?IC.rtO_)H/N>Zw[7-a3o#πU"DjD*Rv#P=.5Cw4\$TNvGPibM).L#$eHsm$tGo'iiFNpXNi?E3P>#Ry9sQHT%up(πU")%9%%%R-%]OB?Eyb49.Z&%%%?=%%%/%%%%qj&%jq[%SufpNfg.=ASE5V4r5R,pUπU"8FO/sTLF>hia*cs]^opuk,3[:==wY<D)j<OnJj5/rg&akjWGAL\r>E\K>vQPp#mπU"]ssYP6Bujq[u^27SyU8jOw*c)QUlhg,_lf^)bw/X7H5G6e2gE)6F5\g>8Z+QjO9πU"S6//PY\,b)xmj.sI4Hps80KChJ<hleuj[=xm<k#3WkF772I=ODM0cJ2u_-Z;]8-πU"PxN8r.)=59Xssd#YwKDd1zO21C6eNp8AeM#Nf)e.(jE;t8lc,7Wp#xr0xe('70XπU"N*M2GyhaHc^&hFhfthB,WV0v+pG]MQ2Wsp+W;(y.QsXDu.)7v*$OXJdUMEum4XAπU"oQK4AE9Xuv>N9f05GSpa[2QGTFaV5Q:sSJbq);0_d0WcfD1kl^LRk3R8gw^[1G#πU"J)KuAaU(F_6.N)VsqeS?6lOZgE.2DI%:knk7$D>A?E?0:nBhV/tvtoCYN+-4baFπU"cL[$=]E6F.Kq7=ca<gP55uXhCr,Wl3O4-oV<u%p()9%%%%-s%E*O.E9I%'+$'%%πU"%S0%%%/%%%%gfh%pkZS[vuhfee$]\IU1UJX(7<+c:Fgg[yqQR;Aa6jEGz,^774KπU"2CDaQ6mxq*Q><k#;'rn9nI0s_^cZPlX;d#9v5$?#yIo<ftUkt#,G)JyR2TDXCMHπU"Re,f=_vM[MzHI/A:tzTRL0IM1xnrq9L>75us+oH*(M)UzNEP82FF#2G)B$ntT&sπU"fGC4%:^7s>1twUL#oZze(nm5[f?(jC%FB>$-RrjOVc<cBTddcfV*<MF:CK;#B5tπU"YuBYb)^7H'r6*#WD'KkxWGDvOK_#4V*Wa5Jik[V2+q/SK$D%ML)e=(]\[__KerWπU"YN$J>n9t)HwOTpPz8S]mZ#uEKG=6vHkvX5*/EcZ1WGLct8q#c+$*v1iYd1iq_gAπU"VU<Vm3,p*.($jQU)#BG_GFJS#U^h$dleP4$Xi9?7GBPmvw7$+gV#o,.9jOH079/πU";oy5VC4F06tOsTYsSuiL8I)ngL4ES%K]DmJ[uO-Gm[0rl*f%H.GVr,hV_Tk=F[wπU"&IkaXn^3vl4*ja>cvD:jCO.BV-wn\.DLtYH8IJFIloO+(:3+(>E1-X?W65YIlFIπU"FTmkLin<>^4VUFbXk0AK:M]ZZ00mVSD;u0i3UP=0d=fRk=^N#Rf*sK52EHp4zdYπU"xmo7Vg*YO54$VRNv3MceN\TDul6Y7%(%Dg2WwS'^ty8-7OAk_Ori99')q%AWOTCπU"Il%dJ75L[8hoLtQldD(gvs6dL5,YG#IqJ]a4uHd^M,FXup%()9%%%%-%:>r>EtmπU"i86%(&%%%F*%%%/%%%%jsjr&(WSvRuh6b:f]<ER1jpdMIV-PhT6VE5qN3[cL,#EπU",L?K3e11y3\WoG;.(1nDeB0.0Qd>9_pO7rR5]kL;$L%$L>Ql?T62A2q,H:Q61,fπU"NqY(2C]E?TluNED/#-9nq6iLYM#_($xe4tme(qr2WJjXxg^ReMtv-CDJxo^kSU%πU",Fk-05taTK/w\:B;I*b+Y,Uo\Z^I=K9?z'2YEOsM^ggXSg8?Rp0Xh?YMw)m=NatπU"ZC*+r^V'v%iMj-8i3;LoDT,4AIbn2*)lYjn(GGA>Wd0CA'LVCUWd%5JG%/le)82πU"fnTaf8*'M6Yg%9m$':;\(hsEme(no4*p$lh\Ir%(up(%)9%%[%-%kGO?E?<kFQHπU"[%%%'%%%%1%%%%h%ttqr(t%jS%ifyXa\OV/cY^WI+V9s=';.(BIhM0W#Of.02orπU":-CH$j#%5%up%()9%%%%-%:%dQE[x5U[%v&%%%k#%%%/%%%.qj%j%qVSumfpfQ<πU":=<E71%Iofv7ABTKsT0%<IpA=OrK4WFF'X/8(]FJ()(uHRcFp+i5?8Xu4/8lXHvπU"/*t;SDOrtE<?3#&b(uwkZ,yRn(YLX\yW)yr4b\U[/<tZjH3mza#_exyQMNvXvLoπU"BB3U2.hzXYMJ<=I'Dr[3X1gtG<?mJtZ5Y/MFgKF$$*EiF6=16D]Ax4r<zN%A%G2πU"i:huO/XGrff=y=[?7>H\n/1L=Z.7(UcNMgV+q4aE<3&$h27m&*RYUx(/bK7mh:;πU",F5rjd#\sVeOu9I:PmrNF)AC7XTQ-'w#5ujj+e#/8?U6(/G?VQaB.%=dy.v2jNtπU"_X>ZT33c5t84q*XkS.k*)6,?G8UGiT=/HmLm3\x)yX3B9:qVNPS#y7<u'pMqUJsπU"sjk*f?q^DD#;-iF8SKMFf3wNr?*NwkZPyrBi-lb#u%p()9%%%%-g%jpO4EPRc)zπU"K&%%%J,%%%.%%%%kqn%slSv7uhNz*FA(F4-76Kih_&YNKml8jHCietz4ctj9i6VπU"-_Ip_drVruYW9074SiE^tnSuGd8Mt3s9w^-E>az1=;4J\J1[C)TAF%Rcg0eTJRBπU"OD9?qwR[=m5*o$70=%8TUx#A$P<Tcvld:Ab]P-gI2v00jw+\\a>oZAV9=IdEOArπU"Sc*l=bl/#'T/^o5\:<Z\k/F%K7G/S&6/f6/7abAHIr3_8aV_J%5ml)%;(,)D_/lπU"O6Zi'?C'kGZ^&A?Z2'+#/'?G<b\Ieje^>%PgI-y:m'>.&;[4-Y*s<3w,%C-04AaπU"vHz.)a)4756I;#NxhO*94,3B9z)kc*>'Q^vw:wRNbi<+RLObaEV\nMOShI//d62πU"AMcL_=g\t$Q9nTy\049Mm.gL)oGo&]8j+.,9%*(?C\=&ya+?R1X'3vaTjlZRk_VπU".+=,u;J\bv)]Lg'>PJ_Pw$(^Bm[m;Stip3gdh]8(tcqPVlwuo8Y\GMtan'7%up%πU"()/%%%%%%;OEEE-Q/h]%5%%%%5%%%%+%%%%yuSi%fyjw%nhEh%fww2%/EVE%2/uπU"p%()9%%%%-%<-z#ECD.Qo&e%%%'a*%%%/%%%.qj%j%q\SuRfpfc.f3SE[1jn1)WπU"0X?YlREu=n<K$5?;mxIB9:gO'Cefmy;;dD>W35*M9?qWXjj<S-D&o&]K]*Imi*HπEND SUBπSUB V7πU"LQJY3X)X-o]D-aHd8I#tI70/<%?nAdu-g:6%Z;L]iW%[iHx5E?<.Q\'F'[)tgHOπU"T9ADhQ_B1kg10RsP:dF;PX6XV^.o4REe\:38-+DCte:z7.%%up()%9%%%#-%0;BπU"DE;c,ogpYI%%?*%%%.%%%%xy%fwxS[ify&ekdB\:maor*K*9/#*9eyQ8DM[BtWBπU"oal/K[,EHE%SVUX]g2$cR\sVXfG_i%TnI[?Q:E8A%fb8CXA.;NDupGWeZfW**O7πU"xXwl%EKk]BdJDpRE0TP^]F=F(pZ_lxUIg>nUr<k=PF4$hKJgupr5Wcnl,8tFn0TπU"rdIr$n=4oZu:G(03>.-*qIddpRi?5-q#?6srnNK\B*QSHk*)*&T4daL4:U<)M>bπU".N9V<p&V>^(n]ud6$+OJz?N]HGgWlN7'7QC'gf7OWp4LxliNX,:?ivFdIjn]ecTπU"7+Pv>IBdXu6T(poWYU458tNEE9zAX)*,AL-jp?ga=tKIGK:XN5#CHxTIr%NSM#UπU"%^XGzQSFKBfk'M<p/>wNZE%Nje?Xa_KcJP#+0ED;z>8^6O$a.;$YFekzs5gWn_XπU"&Rv>J0qDF.mzs-rUSPpt=chQ>r&Sj>5<q;jE7csdq?E5-8a\avxRBT'3j^MD3\AπU":'Ho$5*t6UcpXpnQ/=>fos$DgQnwDx/k4LTEJjqBN\Jm^OuoJXGaXhTrh&mFYlWπU"puujVd6uhXv8$6LTG\&B>&a(fNXft$8wXt'r*Ap**.XDvh3ltGg71oS=5tUh7vpπU"KuwTj7nM,QC(9J<lnWdtGT85+jxBWYGwNR=axX(Q0X('Bh#.Jcx9MxmTrG7,0<fπU"N:4Zlgfl;xwu#GlHuXNtOSD)aMQXt>m]t?b8sGQf#?Uv077[B:NO;rCHf4rvL.aπU"D\3hmajPF?xTqu.]0_C;t<ZZ1B8qZ*8,U1\3)k$oj-xsbSwLZTX8NpcFX^_nSxAπU"X3m9w[e8yrawxZ8/TDvHSPa0]YqD+4$tG3fsdo%qWh<hJj]vEV>#*Ty3?K+S<U%πU"DC5*pLFlxUQ7CcFzWlv_V50(MejN*_nZsj*Y:)Ah$*-^r'2O:2%\EhJo2YD484fπU"l#A$MVyyc-k<M??f+bW?d3VSg0B:_h.tY8=\^0eR5jl&rT_T;D-.Neur5QfU\jFπU"MB,QiQUajH2<4c0SK*C%k1tvZG/mTHacHfa[>f'8S>n1A<PE*+UfLQ[kqKh*ucDπU"Rq,t98H+:ve_a&$zEA^+vI/Ew\4*ZwPU5^feRk1vm6--:4SmjxfET4r.,Sj;rA:πU"cg)d4:6n+eqdfFtrFM8Xf=[J)l5ZL/Y'=lHf;W_RaS_n+8Gm[^I3Y^JkKa=8BDWπU"IlL/Lkv:GBoEh+Am2Tfn,;DYBE/qe^_lav7i-A4AjZ(].Q[r%iFA$L8[Su,Rlv?πU"7ckQ3Ttrvh$1;ASqBE<hE8EGrGKUdn\J$$rFE,H3WNLw7QhElg]ol,jvlVbP1smπU"F:]MDO,u5=L^0ji[dZ0e1K1*93j=fFhHRK]5HD>?etetL2],pv0YK+Ujl$U6ZfGπU"x1JX?sZRmQ0A[:'j<J2Er86kn^,JS1NH[sO:1YtYTPnnQ:LbHnWWn,]+Er^X[XHπU"RwV49K,>\?MPHc6tr^+Akv2goI(+SEMeHP<LE>;b2P\rG?*DefR;;#obPFlD5HoπU"MTd?gO2\gT/EU;&dkO$,\kXqO_]T1Q_#9ZC$*\nuiUad\ko4Op+QZA_lxI=k-o-πU"c5wfhKfW:IN4T+f.W4n28e6KLb;y9i,zy%NSD',;DEs(^NZGXTZ(JK:VAGQg['SπU"2.nXPtCSX5GsjeEc4&P[0VjF$,u/E+pWhFhvIQ#fW#Ha?&-;Djv;w/757AqiD'rπU")[KX6.T8herDWm:R+2f5(LF6Ri;>NFr4U[49kE[\xZ;bY>NfjzNEplwEQHo$1N]πU"#$A(R?(QIym):<GhvZ4nLU^Rl2OhowE*_:$sw^>[8peI,2$>i.Y[Gp1Jp4'afa%πU"tk5WFA+paDq*(%>D)<hYU/WM\=8Pr>q21dBc<QZ(Q,P(-[Asx]e]sSCLA=9l%M*πU"K\u\=[4YR,eXA*5t\A's0ST[aRef7j)^YUQ5i?bYt$V5Q,^T/;CHUce=[^TNp(DπU"-R]]=7XRhU;dCG:tc*n,WP5b\A18r>i&l01TA+=lqd'mJ9+W8jiqJT9rUGJ8p1=πU"O<T6)9QDAZvVn;qE/Mjg$1mGW/=tg>WQ1P6/Gf2%;^Ej;H+KE'yqsArPG[R()S;πU"BIr\,SS%VHYfgijh\IcTDE&:hjEg=l67S<*uXte>MQ<.gV,)]Z)M5H:n>\4#gjoπU"1H8JTKm/1d^HaV2iEi$:_3-3ErI:Q8wE>u.E<Lj)WQOfYHm-*l=XKDD\u^Hm?^nπU"8_Vjp(JB^b*3Q=Fnqvk4X9'lGPnA=U(EhF&7(H#Dtfy_POp>F<AA6zfR0e+C&B\πU"^uh$[tDE$k+oHSHwcMA'sR#'$Mrt?WSrF2.9I16v?O&bjSsQB(:A*gy#gr(+UE;πU"3wcshu*kMJKM$BH.7$SgA[[giWCLh4/DC\%$lXI>yT3GSDXgNN0#%8:FU88[IVbπU"#)#U/K4:l;MOP&8hGU<Sn;D0t);bQX(&<U0]%8AA4w2ya]9me/KJh[-%XFG]A?YπU"*k1G&K&[)%G;/I&c//amSL[3(G9USW/+]GBU]Fj-)>*1^r$S6h9w\W-qQ%Eu/i*πU"DV09_XXSGdB-i$QZEcprlo$K$po)1HD\ke-H82-?#VF;=uC_=QR;dW4;DC_Hx'cπU"3P.2rBs<0b_5L/$thO0kRcB>+llVfe%th1.9c8vr.;&jD;^,OZ]=aVZI&f3Pdb6πU"40o8ck$a=?>%73af:EN2l>Fe/kSkK9E;][rs(e5aah?X9aP2%(XjhOPfJ,)E??6πU"KfEWGti%c*)Q^e$/3Lp4*[kp#I60-X)]DUOG%<:XL:qD%'q-o/'6fJ60wUnsXJiπU"Q;J(iHFfVY>*NEEBjKE<T+sRVf]byVC27;aeO-E)%dJXe%g>*=G%S6jZg[97jL.πU"b3TeaBjIEbZS=,ME;JQtU+e+U:XiLb?]&xVk]/^94PO'7Ok9;%xK1.#&'4AD_guπU"OKT<Kad.UGYRZO%yeEN*+Y.9RSaiVuFFjLgqPb\C*B%<8TRC.6gp;KwtF6:&&>.πU"Q^GC$>q#V4R'3Fm]QEpx3EQB<jIjS*qL+J7Nz_/Vx2p,*[gorH[(_JTfiLE34x(πU"d]iP.nYw+,LuTTo+/5/cg<pEQC:&RqL1CYG]l9x[JY3Bf6elK_e.qZbhCC$q(EfπU"jxGpLQIX7w3+L]e;rn>6u_FXkEil#l8/LHCAXhq^f*&&kQE(GQ/=q1AIpr&SwFOπU";f9&lg25%^PtIkB6<7k70pFJDeE$C-bOg)p5gbYN0H?,h2]\+pG+#*eF)1B$;R<πU"[gO(d[YTW\rBPzagq]EL57'hLRN'X#0A-%5ps(S4V()Ga++P2%$F7>eSsBj2);eπU"Tl:Iq)/_oUF[L>F(0RE7h'K(uOr:TM2WrtL7t.CWMI[=4aYxFr)tfB=Uc5f3hi;πU"9rs38\bIcfP'[tyaauAlT$J\'/:ca,+p/S\;rx(CN0mVvI5_oFI*a26EX'T.-hXπU"8#W='K9$7l_?.pa,gmaj-299C/c;Af$h5Fk1o$1lTKg\PE+TD)P]06\05NM94jtπU"%(co#Y^RSBU+,1Oo7#X/R)3SDgXbXseL>wbL0JAiZRZJMEYBp##C/6s*.=F(%2SπU"c1w9B2t04pb[ha<-&]Is74B:3CBFDI3Z+$L197A20=EIASSvg<2fuCDl(YfDRd0πU"EH*3X\qQ^hm'9:)H4YYdA,2iL4$RERkq'r(9V-3.6[3m?[0S1.pww]*\H9/^._oπU";,A8_:M;AhOr;jA2p33NLjNcYEVa4<<Xb#i.5k0W&T,nGpi/+49V>Ti2x1uNF+OπU"z8(Oc<#<ROcap7;T2I=&wu7N&F/ATH_X&r$G)l8<M+3-n=EZCU3Cu]=9T>(C2H^πU":7qIYwNB:,:8[l>2S9N[t)Kr7h^4bbfVPI3N#nj]w5^,-8);S=3]3?9kHx&9%R-πU"'Q0aqQ?$).R]'v6CJG3mj.RGSnCPcPILtFrk%z.FnU$(P-E/JxDVl/p(-ghIU;PπU"2YI1-QR:haLbnRg8QBF7crFgE3D%)va0z6WswqDo%&wn,P^]B2K5KCL2ujK&,SGπU"#g#akY]fSZ$xs=v>u;>02bYZ5bYXTKL*o%[JE'H]NuH^Z/LJeMNTm%,8DeaXa&/πU"o^jhi4okU4,0BR8z4ZP0k\>JbnBpQ#LZ)cWhY5W=5ji7KCW)r*.TWI;w,l]6miUπU"Bts0\W#.=;H-\(?N;qSueK_JCV:eK7H0;s-LFYbnWfeQOkmm^sC,J>287bR-AalπU"]06FvVrRM$1Rx*oWImikLr?9^Lc=K)X'Am5-j&Qwv$\0vjsw^ABn-eQ6QD>GfSVπU"/e[uieJK2g=N2's)WVfOv];L_Xs)=#Xag2Vu=Nk1.3&jI?j#>:k3.ZGNtC5FGSDπU")uSF6&E)F)OP)a,6Ufv[NU;Ox3>ado#:%=fZ-G)mClw7-Cz47sN^U/a)vYM^a)OπU"^FSu7L$a,TO#R?*?z6Vn\'l_P.TWepvlNTYY>hwD^\>pQgvFg,WHu]d)k2ihsfBπU"pS<y'Tw,f4MGls?Z,+c<uf(6*ZGi%'8q.gRHNu['Q7Q_RJ,(S'Wgt[#33l3^4gkπU"),B_'G7.;fkE4zAq;]\\[i5mF4S:A[42Hz*RPh2bk5foqxMXf*vHLf2oWrl63<FπU"**AXcgj$rp76oZe.ms'jX&\n<'VsGMY,lN<6KR3%[gQ$gjC+j6b1/R9*Z*fI_Q'πU"*Be[<;al[+Pf&s).>F7CLn9cY$Hm*NP'x(1VeO%*\$0(PD>xI5Z45\v7Q9>^cZoπU"m6o4?[?&#H63Fhr?FVEl1P[aT;3b\M/psV^eW\gn9nTtfT9a2jN&R[7;W:8SwM=πU"dq7T]'(-B.7/$,cOLnKC-.;FX6<g+[U5vlC-:4$(GOI,Nq9TAi4yB*Sqp(YQ<]BπU"x9Q/GnO[\=qR8L'ZFPkbdfiG1fDz:2/9$9f/+'V2UpiLN/&>a:)376s75F-$=)+πU"2qYCXuDgFE1y*/tefoMYt$;5sB,'l[ax%gk9eOA$(qaGd$s1'avFtDY3H%eCM'fπU".^Jz6CXzM]Y/xP<=kKcGON$wAD_Icn.$&>6D[)kF%2N\O5?,&L;mgpzG+Wr#[l9πU"=q%Rj)OPZtA/cDKYOk*.z_YRNY\cxa5uQUKB:ao(Yq;WX,BCS\iiwF-5Oi6,πU"oH#FO,%X1^+aTtRulZA=p#nkp%<Zk-'TRpnRY4bMUdlR<0)Xsjc]KwG)u84BZt<πU"[s<lV2k&Kc%%,-;3H,Xm8%4qjB'7sq^U.:NcK]f2>H%F=6mw_6Y'$uWvLn=[*YWπU"MoZJwTxQMSgw>tQIagno4Yw&%nZMClnS*NNH'W8/ujPBrXs[mctCl5T]xHsv\M*πU"7r<jIIw]MbR^(u)*]k_CoI*AVj.Uqjigux9jV+8U=s[Q#6T=7PWfU\X6]G.B-6KπU"qK+JCxSe=:udGQ)T4^.C5+'bwqFV7<rp,=E%CTiM]59T*$10mRwyHi?EZ=eJ7-mπU"9^B'>I:k-1JTJg]KWN^.E-%O%njKj(c0\6TgZ3y)V;2f7lsGY/dw6Ol.dx,i=9FπU"Y]^vYLq#_(-%rgr[JJua$#>rk3\]t8&D]u:*15*h?YN,8gN<UTRlu$9d+'lSX&dπU"LN^5FB2D=DZ#OgH.aM2$dgsSM)$=e3mV*8%NE]7RFUz;(q1mNAx0^O0pQ+=U47mπU"oBwC)-+&w&7apG[Ad]F82Zg8lD9mza^v&o#)%h.],<\nA1*4;post/:BuyXX-F*πU"b+Yg5R==uW_g1+%[m^iXe]?q$,U;aSP<HV;/H2[4V<5a*mTW%-CQ9VMhl*K9E6GπU"*3)Y7i5HPIAoZV6eGoDtZ[Z>YTGVpW3+KL(53+85^Ap2%9lWH9kVjfGPLGA%.goπU"B2&OUIXPGv'GIpLrDmXb%dHukm%p#[P4X_pR_rq?TbeK%;J/mNj]8z%jf&hO\jDπU"GBBRQ(k$Alnl$(FQ9HhRTmH)r$f&>fEX*02]8FIz+fV4k'/OOeZY6r;Ir2(9Wa0πU";xC%>YR?vH.1,w1Idj00HGSNl/qSM#>zp4b%Nn?TIW#G2[HF9-.Ct;7>_TsV.ZfπU"1up8dJes=q,AHE%c3)lg93-o0G,Z>BtsFk5^C2?q=CJO-SCd]/goiKX(^VJ8/[oπU"Ep9_U+1$hS0LlM9#hp4#vH8-cD-wJ(R-W/#uwb?DD\qIL&WA#gKd\Gi1$3D/HztπU"7Zg)$W<[OQ^LQfSWR4?a2JqK55E5v];]?8N<6G[h[\-#q-=2tWn=9:,Urdz4<9^πU"E2HON9^QZc)X,X32fZ3$Qi*_AgghNEpB;^_v^?[#O26*5+3B^q#(t.UTVEI-1(,πU"Q18O%9Ar&DE'L37_ulBB&B*>juAXs4:SBF9;c*),]MuN9C0m9%&wpQ:$#TI[88<πU"qKL=&z'EVV_YO,'9hau2?0T3[:#+;%)AJw*VVs0ZcSQusx/u<p]oN'$$ZSXTtH0πU"8Dp%,&DWB-d3yT,fDKT#'MaEDR*)xF^eSf%0'E*.a4C92](<T\fbwt6tDMDEq*iπU"fna^xAdxM'CAiGOS3=DwK7OZZ&$>/S108Q9xn,iV1qZu3MuSoW/)C;Yz=CrV(]&πU",Z,:[sl5McuEDu.*(A])3:g2gn<Crev'w4JOa(lv''Jglo^GN:?3K.A0J^5sQ)KπU"bkRd5O):0Fg]+-+/fp)BNG]p+0ABy%O/FRR1TkHP,3=<J4.\xksVshd*&AjsSE&πU"FbqZ<vl]G,bu\L:=uFY1MPhO/+/cjj-)c*cw#awvz#OeZ($$Zbq8e.ojBg)1:1pπU"IpLjuPaOe+:Y&;Oe$M$1DE(e'T\-/7H#x'k(T2REKtGJT%uTpF/3e).pg#'0B4QπU"0[I?Rk+b4MNqfJ+tsC2i?i.91R]-s&AfN+OQ\=uFuutK^PFE=3jfDC,Beagc-LGπU"671U*34)u/ehWNl5p8OoLyXcOKTealtM294:M2<mj'x.aUPzbnr9-n8jpCNTy<5πU"1[mazS<aKrjB^<,\v'&DB1E1)8a5#?M---SF=geE'3X&z8?]&V9-[q:k9=3rhxlπU"Vj.a:]s\V%FimWc[Y81^oKN&:kA+hUno6[Eo[k#=9agS/:wj?h^\&J$&0m-_=N\πU"KX.tGq5g8\h3XB,_J-U#\/(/+a]X7>x-LR^zNCa40O;T.$j1STr/>$1lTB-'R,2πU"PrBV4<Ap$]PeQ<#/nf<Q_.*F._U)KZ#S7IkSTR0hIF6p1Z:g7nJ6I:Za,XiTKT9πU"[p1_mMSFtg:9F.?5#e\7T]b^]>H\os?)L*?Jo91s').u+v/*<vh3tBqB)W,h+UvπU"*fHem#WMHtGe/Tj]7q+<=Ug>:5H+CQ5pMZp'nMNuLOhLI4ceQSR2U5cCzQ#W&b?πU"6Hb?dYb\ZMoCGG;As<5=s-;Mo[$_^kIgh<w(7gB/[VUp7hUE60T0\JL?oe5Lx$lπU">]sKV>im^s_j6K4oK/2epYY)+AfDzZd&VwJc;Z[?uAO/KhlS-sIL'1cP([2LPJFπU")ZJZDW9Iw6U[yxIS+0H^pSy+E&qQGV^K9+vf5RM*iRd7._IHm4:+gk7v%G-r-&TπU">ivG77/C$6ZewqZG*-QCEfqFDdnc-QIXyNV[<2?6O.eePK.icMSCJd=YaIoR=PlπU"#7I=ch0W\36:VpaFvcK_QqsBWZ-?tkjIsrj5I<PR<oJx%sU[Q)Cb5*'Y>_qjOHFπU"anK_7:>I1?[C7252F'ImM%iQ#xkkqhwWeje&,[03fe9E1<vg]#a()\/t)B98ynmπU"F5:vdO)pDX4ME29Le14nbmqb$EC?Q]t6z*bCZ9-F96i*(vv1,TsF_ULUFFsqUEqπU"ge=U%0dVm^Q#jn1V2ysJN1fHBE%7.?uR+nLRJs^.t$3XI-e0n#:0n/p0U,qlm\.πU"GWh9>14o(pkRjRhX?\0m]%JWG<cGU7]jjRWCpLYd.A5I3IEcQ'sE5t0VmlZPWcZπU"_$OJX?sj#mrFMJ#m-E)WM6jc04U8J,k%Ud?-lwaqK-vJJU#=i+&L1VM]\bO)P>4πU"d3p7IZ4l%x)lA$$749v3cD4]OS&%/GpSClmS3[HrT)/''<C2sO'tEs88+)TO>#(πU"zI8#ip&4[b8lfdfNI;t[u]7O=]PmDN6aW;k+<g:DZ7vx]wB%#_&g)WlH6g%H'mNπU"Dc>ixhcP4I1DZ4Dy;p<qVqGF3Bf<gz<n%9,j.OllCh,Z8dTgp)F=BSdXHPg8$GBπU"8d+Q':)yuG2E(2ktHlJmeU/);_1J\K1afSIQ;'#3r7&.qNyIAu[?K9jK*d.f&uUπU"4O=a+RinjkOOg\G.uZ)d>H7\:ktpfWU%.epOXW1JhF\?h&-W86hqj9MZW(GEqMPπU"8e>cL<s6c%J_pU($aiGrot&UY=3#yn#T,FI%6[+-NQNA=wzc_=ep,8IfyL[J+t(πU"3i&QSUeQBM20'N3]qynrkSJ7JP_0_-VJi/M5v)O<4;nQ-K*[LIBA',6Y(M.hQj2πU"unI/[_E/=T/q[K%mkzHGk:'1wR,Q>)&eS3E:BQ5F20(5S:&._WUA8(v%3TYQa&&πU"g9gIHW0.3Kc#HIO\])a.ff=V<fTsa2nUb6>6Wwq*?;bArDG>%G(-v<Mxt=oM/EqπU"-73lg+40FRa=#v[HJwcT$Ru1SM27\M5lMC'1*NG\=YPtdG:x<*eNs3c?jTTWLdkπU"fJSuBQ'$L6#HFwIvdKDUss'forof5pyCszpaV=qGN=FN#x#5ESASi_syusCe2*UπU"gpndmW7m#GK1lc.&G/(eeQuG>L.oFa43n%P)pR3%g.0F^al9\PE;%wF\f]PlWj[πU"sjGl\Bel7Tuti-Wp<0ZRD'kOX,4FQaOBY:w?Q#=+dMIB<_>;>-[S*uv)rjc$B=&πU"GNzC$dP;2<k^n6Nu,7'prtkrjWrk0Vjp]h0oA.a9k;nTnGY(fdbPIXOraxT/Z*6πU"DA4$Da7#0?q'wM1n>?bvqpf%[9WDg]Uyaq)PN(g&d,'QJD(%fCRC*Pcm5b*-TVmπU"E;+LR7Smin^J4F5OF(W_6nm#7/-P$[Z&mv&Vq/jA+A3jI>e85Rs6N3jS\5[=Yu3πU"#onpCQ9S\0^.8vI$gs)):zM)C#5[JZ/]W5pq^n2sRQZd%gd,n-+k7gc*s]rkPgSπU"s>(#cTZ9XXX:Ih&-uY_.aLGX>J.'(f(umn)h2s[%^Z44fP[%F&Q21BC5?B6>ifrπU"jx[nsoFsf=uzsK&*__(,ti[C);nQRq7B[6(jgLJT^^j3[7cRny-;RH&g&>-cS25πU"74$fXGpri=q4lHu_w&f%c(\dBuIv-/T0?W5s)8W/2Q'fX1yP3vXMj?H=g.j[.wyπU"dIA8D=q9gH*ni=H3b*$\XR2&5c7ol3nePsKc&SO<=/BIk(>C5Vnh-=rI3/Ub:+#πU"W.6JHdq,g].BK[2)2G#SO;\<Hp5=Lp%T4NI,#[6BO>zzHtv4+?oDVDqIF6Z0I*hπU"d#l_9cc<PGh2v>Lq%9Iz32nm2+sVi>rJXgqv3&Fegd4fa95AQ5')/=([-M-*'GgπU"%>P]eHF.%#NBeSIyk=3A)Jc1PSB3:QJwv*4bmy\Gqg#_vsS[gkbts$;>=477<XFπU"Ld2/37,,.?=PWNuW^%&cnQahlQ#YYEsd&qoZRx,6nS7b?6tf<P%jZ9qh(ENAIw_πU"p(^\DB2q9BA'aj1GhV3W\+Cr8?[3[ljF_cQNnB?vKkJQa_=o2>=9oTUo[snK<ZbπU"r)Am1-NE=%J(-N)WFD,8cp[>(g;aFQV:/^/ZZ_H>whC9XRrSb3VJ:h<0WBti/GoπU"Ftbs>-4l^LCn9Mb($6F?_3o=G\?u<4d$UL0eQcI8x/t>89GiDSC<N2;cPS_AUhAπU".u2LP',JLLh[ELSbtj,n6UM-<Q7YDK6\f&Z.Fx^.X3%(11d#c3=%QdCiIYnzTAJπU"iE^;11AJX2PMLhwb9'h%8/G:ytPWr1M[bQg%y-Q\PbIwFiBL1hfg+#fjf+rKKt]πU"[N==UV2ch]-Vau8'p=l*7h+lb<?DXYIrc2]6n82\)%)Pp)gJDR+-bV.wPG8akhcπU"*KGRITTH.)9$>eFzrf^>kLh(NL<Hv$h[PwLu:R9R:KZA2#=5&0.'ar5YQbI;m(rπU"4Gw#8jqHnAh4c>L_7hu6cejC_#dp&<\Q>:nB]n>[MroV\Bhgnmp_nakm2[;]Sc(πU"k%a2F$vS-Mf(v_Y3W3(?(N.:<al%V>rDMPb_a=UnZ>t16f$IoaWk:'UN2%X>V*cπU"(ob]Q$t#ae=2CW%&GBmp:Ff-q47EoK>IGi#b7lERauw*==*j%B=%d9EAuyp'(zbπU"GuX%TSW&nVr7rEI647F?3pG;iVec^xApeUWGU6u9UiCRCiyJ^E3.O)DwhdmVU-gπU"y9)]MKGU[ifYRA09U4z+q+T.(aP(>[.tGI3P$mMX??&l+j'Mh[[^-\&EQdZrg=^πU"%W=QkiC9;G*4Jvgn82e<xUk'/_d$PXj,8*Hs1>8R0g,7W]Dp9+*p(X>GqM<9Z9AπU"VdTaw=#YIfb0Y0<Fc$UN*li7-6)H;x:BIL82N89J4p[feSL&kAMRwR_nvuA,<PnπU"dS*L(Tpy\a3T_a9DZbI7Q%o(5$QAvGLCAF7E>,I$;Zbo=&Fw]u&SG6f'.5uORA[πU"9XtC)[K'QI%Cs>aWW#4rjZmz,,Kmiem(61HnjcGI&9RT5>..7uK]d)nVB3)v13;πU"gH'iretw#W]);u,M#mD3'c\=aYDZ,]Lyypb3W123GtL+B$)2,I8Z\>'#0iM8FtjπU"Zi=+S[[i6gjcmvQ3=<7H*dVo1dJKZ_Q;W1fwk]c49nHdgd:Wy&^Fv6Gt\'NpDBQπU"Wu1V64]r)k^1XQvqU3L&5yrct]OKS_8.'pCfno&P)M+&w8>*W?IisMOYW[Mj#bMπU"hf[4Z.)Ya&<8csgADeAU>%ld%*]:X%I#G2ZJ^e$P5TCh5_KwID[;G<>;3xpl4B&πU"I%.i7iD4]sgEP9esQbCd;$)q6QjWVOYrj?DO0eQ'TT'$#fv,.gH$/[tEm>k7dJ-πU"IMe3pjfX#jF.^[(5Y5joo_hDiKDV\CUG9(&>L8]erpIb>y^K)7v_Vpg51hP*JHyπU"x5SJsS.2]_IOXL9xbu2hB$&leb%KuXqOU;\6dyX_]c\QNP:/6.X.o6iQ$5cwi6%πU"QG.6.?%ltVOi:_;AMbE_nMNaz0:DbX$$hH\Ysjn>HIf#[r;o&ke38WT=/&fu]u,πU"jDm<j[#gP<<Jc\<^wp$]EP$d%Mv[yJ>$1e5pXYFnQM'3CACrjb\-82E:eKqsR).πU"2UM#vPYJ.3ar*>pd$hJbKdkl5bYdj]dlZ1eSCLQT$nkQ(:8VbB-%#s*4JCb(FpPπU"Iquu#1H$w0<fIQ.54ie:7*(,by'MqLKc/^%1HiS6mkmC\8M3GO,tPVDb7Wk:n*7πU"C&+GyKK,>p_1_>\Hkd+*<B4Uo7+'2\^[u5E96Z+Da,ynsBo6Il=J)cpc]7MvOhyπU"%>k9ua-'bc1Gk%1>7)=ofY:-[M^2&g8q*Bag/D,C9OND9R1Q??8ZnI)E;jD#(,<πU"d\uWCk'Rp2IlDsl1igPxK-g&7&6+;iCX9J12/3wwF+NbF21z[r[-.Z3^lxyXQTUπU"fg5w66^p66UE)JK$&e#pYm6ig,g)xY6%rhBR/qYaWpS5)>E8QvPOCg.3(X/dO3_πU"I)Du)*PpYs>$)iHmvmYZxgU'CEIEMOYKVZD,i5:jD/x6Yd(hP_0xdT;J$FsVIsYπU"g].9oP.Sy#8cMdD>>9<7&14[-v9#S]iQEJchm]DtU0AO)buw]vkYRM(MH[[SFPKπU"PbYuBVihdIwjd'HO'3*R[(t1&0_OYEHCV6Fly=5$etK1]hvx>B%vT5pgVfo8jqNπU"VgC%[QDK<6S\6WPsdS%n$c'wo/88004'&?VfT[\>pu'c9UuHMG[gIcQf)^+d\b:πU"+T'0Ly97*-Hj=1Om838qj$g/XXp\bRLnPDAnG0iDRx$KKLHcT6)\)%aa9j9stQIπU"Nmd'.sP=9RX1]hDu(ZvN\8,nti.X%b%FxD2Nmd/G8XmDgy0+/%vZ(ER=w(d\;roπU"m[g++aImx8c+oteEgz;d+9gX8[#s+D(+(t6a>Tv7;EXpc8)*94patvNO.l_2X/QπU"R5LbihJPMBU$8Quh3H18wq*(XCt%1RS7bBd#K%P[Mh2JpOtj/gAnsZFb28Pi3h[πU"&nsLx_e\^R0\1bXO=IxkKNRBdeP$b'G9x]#N%j9c])n\47D__?,\:8v(6^g6BquπU"6csh<L_j(4>)h/V_RXovip;(NJdgeqsM=bIpYWuakwtM*vtNKK:ASMM%>(=xQ31πU"Ia.E.s;M&/3^eFXlZQV-R1k2P+43Zo#2ImrUmc_P8%DX(m4RY5O+w++fd+2+*%YπU"S*5O__ol+MEiE[T4s()gMLKHUdgdm0<W/lU:Ntpf;TOD.[hg06w:Xt5.pn.JhJwπU"224>2Kht$pXE1g\[s[jw[K<VFif;M=I#(IiK2U'],gaVhW*Y5'?=78$G;(p:&c'πU"4.,T8K9p1MdmViQ8qp7V*YI_c9\xHL=zGI:GU6_lMmQviCs?azpJ:l?MlS_ef<1πU"2\\*F3g>'xjM)5DiS'sgo2']Qt>H'i=c49J%vIL'K+ImKwMou83Mq:y?qEL.,vOπU"T/8O)nM9X#kHcuAsrF832Foi5%123-gehN<I)k_BgA;0A/&v5Lz5unAcVRGPH<oπU"s=)FZ)E?u=51Pxrd]N2v.S;b_',m#l+gNICc\]W-+tvmb3+K7\C=tIW).LG;9JGπU"=b#RPSPv.,hLZIo't&*PBJu*.IApE>3s$Xi(Mnta]<qEwRCr8Xdn=kstw#AE7vrπEND SUBπSUB V8πU"5Fs#F$k)Rr1Qp$hX3KSp2q3aw&yQf=LnnI5-c+All^%8v'kM6F&mq1gHI$M(]ViπU"i;:;7f5a7CmPMvvETt^:U[7.rZ=B+MFc*?R6WToy(hM/es]^%D<p5BQ7Hc=uI)tπU"pS,]E(]t$)UjUYYz>Ojtl5Hxat9t%9sI2u8rcvN>eKhdPyELKC$xj\aKj-VK<;PπU"CX$Y;iU.WWORj6n0J8)VM&HQpr9f.PF*Fudu&mKJ=7UF%X+RjyX^8N?#PD,-jUHπU"ho#pA0&eYMI$<2S[#t,)sw/U&:m']XJL%Kghk;;+H3^Fk.uY<)cijoRcmhuD_7rπU"uj7uKdT#>n$,3+9Y[/#-[tOLZ$j^nr1Rxj<BPxs#1->tw^a_(DDP57>'&QlNGiLπU"i0H:^1D75ehE-<]-8S5aCi9OT(uSN_-#WXjE5ILqb-e=0wDEQ7XmTN8/oM\4u6%πU"+;IbRKoOSDu=5aOI2QyV4K])fMF4^Vp/>8YaaL;fG*,u_l[L&1c]j:&LFR.=n%>πU"]a>0rgnocn0j_sx1YAEQ^sJpn&8R[L$ub3?/jAbgA9j<-=*9*(HK&jOQajOL?$nπU")HZ#hLL_$6NAlu/R3'NPq]b;yj\6pKpbD]*FU7F]%tUXZmJikI7^F/sdZy<XE+;πU";P:%bpklQ#5v*3JXnp^VI4EGr$Z%Ph=l4wg.(jYTDilWb]:][X>*VnyRqYiZ/g_πU"3A0+5nz^,_UOQ&e8<ap+Sxt'Ge)qtwOpEs$y.&)9je1MD*+*F;e[dKMI-*,X^[GπU":Ow^)&2M(ssLMnLNYQ6DJkU7#js8&UvzN93nT]=D+bwfWqE[]?i=J/q-jPM\P%jπU"G,.uW..nwWcl[qNf9vle,C_a)pl-6F6gwn%XMHbka&\/\dr\#CBC6#EuE]<I)D7πU"IW2Sg-9_lG>LDAXq(VF[,;sq5%CM6_7P-=va%(gK/bGMzT7z'))H]\BK,gavIjJπU"]3Ppj[=Kn;MGuS:O&_p)NF>ps'XU$LgKkz*cM<LoE%QHlkbtdpuPjv,b?gd:o-JπU"EKgmq>g<b#r2:VLvP#XI/k$avbRKP_$^8uKBAl1j1cNu?5,IXRx]qCETB#QOf1KπU".Gvj_0aY*'e0J#?_?n.hYo<J>'E(<&fXRXb%mncXLqBSb5F)pMXpGcB5/#SVv=nπU"3u'Uk3\c:6Tgs8S*VN3JXoBnB^ITjoiWx;m3)DTVUb3kf0n%CcwJ*dTCToo[s0pπU"nd3lpict#(+-r6SKk?l?8/a.ma8](SAy72%03Fs-:9ga?9U'm5jMkkKIxO*9n_7πU"A\Jzi/dRLQZ5i1-fNfO\+B*ZH&h^RGi;6Ki_i5R+l%'jDTrLhxeCYL<q#Pewkq'πU"NqSQjxK*v*)d('lW)Oi8X=NDfrD8DE(TsYXG]CBQoXR3h(OQ4qTC&$zw\XRw%]VπU"2yJ[OASeU.,l4L48A#9$3#.AOgDIgC\a;LA+h]6ASmulS?QZ31-N]2N$OwI'%KWπU"X;Nqh81f&b:N.GiElv/UhIohDDFR2dbrVK;e4q5[opsE=jQ<gw,+a^jf?;1pf6+πU"Y6w^G?5l'P;XUTMAX;S=%Ah:(o9:Hn#e7pJR&3^;Qok4:=?uiWLK[O#aFCsz,.IπU"CB[>]CdZ(]B#Y=8\.hRC(Eqkl0'_pX0;Jj7%Kp8wHABo\7f]Tdaj3UiL$-8>;ENπU"vCqGzSp;*br_KQss.j[XgNk6xb5)K?**(]mCHop4jLjbUQZ]_Cb:quECLX53HA0πU"'5R:8P-%mdjB2U<-LVm(MU=mf9N:'NGPze09y9.TsD56^+zNCbfSza&3K'o/%+?πU"-,828a7':Olt>;qY5[Sq&u3MLL==V%?0V[vLS+0X*W(p,'*p9gyH#3UvDxFQ<K/πU"+Y5p'J#nn&)d*-lS6zj88B20eVu'aN*8St2]hEKIv:,)Q/jE5Ifm4BpA\A?Ip1CπU"$dh_NLXL[4YbQ5%VA3>aC=+FVS2y%dHg6yC1IXlV?f^VXC1fA/2MbXz$\)q-GcwπU";pfJY]>:\zn?<p(2d^1rAcSyVl53FgHDU;F-0=MBiiJGfrMb(&dV:ANu(X(IpSPπU"B3b2sscngGa/>GJ051pk4<EJTmTUp-n;*s.Px9U#sa-S,/hKP:';\1<&,lx9k4VπU"atroL*[fnLHODDOcLrem<-#JI1(M_[Ij+SNKE^gn4k262TAW$>8-WrfeH[ToaNaπU"L)vGKiLx*=Z>GG[Pc/(=-UgfH'XS?ssT'7v6(tWCqMdAh\K#Y3am4JF:S6V20πU"_^PzX0<2CS^93k27y?Own>cNW+q3v]B&AU6cjCB1]k^q_/fn8L*#)n[0M][?)fsπU"1gsmCBe(N/q)D-9*qEv5AW7h*F)&;$.;3%wY[F5mk9*Qnc&qAn]Y6LCVTSPLdWHπU"*kV.RuI(-adLtitMwkCZNM(/F%MlWRtTw2.a+GtG'B/1JpErO(Wm=ic'g,r.gXtπU"#2dS?CAdt2PLHZDBNn(aYlBJ*t#=*9c[MZhI(;oO,-,$n8T0ljFl;4\gPhAXt-BπU"_fMN?I?3T[7O0e3UeL#2yG%gwI&'XECp)jS\NsCuUq2L&$))^GCEc)6]2aFV6YeπU"^_eQ[cDv4'9SIgjW*h)(Z')ev#T.POsmLll=c3sGVSYDVIwjZ6%)F7M6C,4E(>^πU"L/kdlL%[)BZKAQLDV75u5iRY:M5GQ5JDr(bEc,#-V/+/qf20+X:n1tgHc*K+t7DπU"Uvx,<(%W\iNidDubn.5EEIr(7udv);09O))yd<7Hm]um>q7;-7>*YdpoGMMNbJ)πU"'*cO^Qa+PU2\2Wq)<s'3=\MI>.IAqi[D0=?aXkL%5.u-Sd9BV8k4I;dV*x22>1#πU"^4ibsjsYq[s*5^h58&7NhhM(/fy5'T$ooD34]3OA%'3lf;xeK2h3>I*mOe?,TXHπU"eyKs2$+4canBrUwsawj<Zer(<Tt0.XrT\/$WY^kMZvZrGHXsI.uhW64br8WiPD'πU"4[8dE_#oQabn3JfhL>06]eASU+SfiDGli1Uj*)+(cNKp_poTO#spkU#7E&NA,PLπU"1g-8[pC5MOe,k#\yh8(G<1_h3/.ztA:W1TtV'O.ox9qdWNvni,ip(yATxjOgMXdπU"seSrCWQp^xnRco^k2Esd?*0CDi+YbtW+[pOO'ng^E(t%BA/:qV9H-?^i8il7^(VπU"7lC4s(uK/(:.w2a8oxJx'\:(DbIxLcxdr7zI_(O^Vw3/OOs]X4PD4A;18lT.k(nπU"*?P(v6xciP??G6zIieIAc$h5(Y=Y2zKNL-9t,j\\fcRT<bOwgnYhsPD$fFFk:1tπU"t:?X]2#=%Z&TVNt>_Y/9L5-&]&II$Q,0b%e?\-']k][]:,cAk8k%[UfJr&n2eL0πU"XdXmI=4%JA[sL0,dgAO.8E#8%*t'-1PuI]]0YCl6Zwv:Co/u8:ak(E+97M=VR>)πU"<^9UYc=8QZ\pw0xD?PKTt5n6n4uqGi//K_-\X(548OmCZLWrw*$3K\c5RYM$n6-πU"Ep=ac81n(i;eBINAGuD[j7%(I4e^[1qv=#5W?I%qJPinJUdRk;os\rIz*^e'oU*πU")&^LLnydsR#YLG)eO%kSpm&\w80Bbx*\\H/OQ&A=fC2vwnSqns3TAw#aFtg,gXEπU")2&Z6iOGqAFF9:0#%)W3LfY;_351YDsk4J\qI7(W]#u/.ZIP1&3o7?w;yVKW=g8πU"dTVNMS$L7BYj)j:]y*96hLB-XP:<&)XgD8jH=#FP>%m?&C^;r=(*_YG&x^H;(ZlπU"tJ;E2M1WnT=(g7*+=drXYaCWis[zk\gi#<JuIj,=OmXYp]kX,MQGFNQ]DV#^?d/πU"lqeAr'oq.kOWk<D5DDaqMyka:.3Q.48a].>9+81v)92IR-u/7RR.?<.q76semO=πU"QHjG+IO)]n1NA*Ob^F6\BKF:4Q[b'92mwEAUti?Cfu'6Ot%gAm.R*,&j/F>4J)oπU"NuXwWt^7$V,IsU8IB,$\Ee<w<[)dc.-(BsXi13&g'n'9]nfoJ<>b/2h,=[0Iu?%πU"i6iJcF\.UKC<s7,?O?RC[p_$_tl=lf#2ni5ej8Z,h1W3hu)X:_?7ucgi9DmG>a*πU"Re.b4M5\N<Ut#6oJoI:JNtvXAl.JEGO<b</bq)4q7nUhCXJAq=>Kbv>R/Ar)qdhπU"[.kIYSy^CqzFd/8ux<1mtJkDYvm%]B<]$lLKCi+KM*2%&z[y:p,KYdqN^^Yw\J[πU"At4fo.RHy.plfn98M-#cXq-o.]xu,2?=Z/;aA%6g[oKFEMDtmNerFSu&jq7*DL>πU"EN?4=P,;ywqr>Av-T*KMg6K9#M2?T3n6U&.jGDFwoX\oUr]U.5)O#>z$9gXPF=,πU"Ev_G6n<rgb1'[H\O.d#7SdjKo#zleeJD5F$,5mrZ3]k5p:-YwMyszItMdj;H9jlπU"p?Ygwo*vNup%()9%%%%-%:sxOEW\1lX&y%%%%#'%%%/%%%(x&ny%hmSvIuhl_.fπU"7RUm-jpGSG,(_LSIQEfTSRORphALBsFMlgSDkYs(;x+,ctWt5#W?9,NS-Bo([Z'πU"jsoh>&q>Pv?.g1jc-'iaff'5YK/FP%N4*Pnd47Dm=#g4Jiw(k,UdcHHhVRpPnU(πU"fZs,C?_a^%nmn^gwBXv95z.#MkWbWEGE0$+O2&&^[ELe\(=4,QJKAaJ8-j3^BWrπU"Z/ave;e,v]S+ChiPBm7%up()%9%%%m-%#3'DE?N2[w#%%%%H+%%%.%%%%nj&(jVπU"S[vuhVGb*/O[U1ipjgxp8]IjSTs.3cp)N]/3\80G*46jUeF#C0fG:ChYcZ%lB:KπU"PIljwAZwt2rj%a3ulV4W99LN[kP=+a,(Ji*lwpUT?\Hq4/=4s>)lgL_OaO8LLc'πU"ecQI?tyX5xI5TU8,,_=[%up()%9%%%#-%L?BEE6].XKd*[%%,s%%%-%%%%ht%tqπU"SimfyfU2.=r_4=?0S5JN]).KFlr/5l6ri,Z;Z[ml_QO=i.QdFxQv8JZLY7zTKlYπU"nvRUZ]8cnqyyw&.-FS5#g-FS%5g-F&S5g-(FS5g.-FS5#g-FS%5g-F/3pi^MD,$πU"308dLiFR8[u\4jwvfw=cqQZpBMd+EMqiZFmM0G)WDAMl[/uui<h]52=8X<q:V3XπU"0Mg?5>jpkJ2)H^j:k-ZNTO.XPW<>S[K4g^T)Y[Rr-XAouO5wMZ,QuY.TxNj0;FlπU"X#cgyH?($URRdn?W5p,PX$MhAB6qZvie1OFB%K2\8v,rrVOVr,$'L_0DLS&TdZ>πU"%#rGT#tmN_<GAS0sQY]X*Oj,s,'JlxEP3^ZZ:0m$?)+D_<Ou4IkHs,mvS0\%jeuπU"w3X.Bd_zKd6c:[ol%6rl(.)C.4\_uby8pPSD\V>k&MnS2J'/FH876YFOl=CPIszπU"1nOs\.3>QMbP/GQ&VZ=kZX&sT.SRQefe<.E0_j6\rST&vD_n8;loD5)0Z4V7rTDπU"<VVsb:93ERg)r)M(&Oi3glZm<O:Y37230gQ.[fHM2&>uX8PI^^;CYl[7<B'(,aXπU"ZZft*5^Q^zrT^9010M)S1cKVS)K=dz,ON/dHDE&[4B5wnOUWM4u=2dh\F\1URidπU"$(cm]t[GT0D1l%4btkxR>F$qDoGnI?pd=&v\Pod=nm8Mwi$lRHK7E96R3d+_6$hπU"jP.NXbh7MiLlN)Eav&vr<Jp]6Y=MHVnkxmj/sz7obLHcZH3i$>xXL?p1;U_Ox$WπU"n3I&NrW,+vmt\[I?n&DP#keH9Y7_2=$?qD#t^Za97PTd=1r3Sw=:TVoV?(x[Jr1πU"Ck$klwhpXD]d6uiFd8tgYKJi,LIh\lc<^d<8[sbhPQTqZNv+d]dHq#A$b,4]5>TπU"a&5Wv?]b6P61aF.C:-fM?Vf<>i,m/Q5>3<Rr7OGO9HO84/>(;0fGhI1J]c3+0wRπU"<eP;8[eqNuX$<P6i?_k5xPcH#)/XFdH.aok#(O%Dz#hpeQX?=pr:X(5>*5ARM;JπU".)?%5*iB;ZI^rLbM?%jot68n]f\\8bm&W#ZhiuTWL.OMDbevLteYDvuuTwG$c61πU"Xu(CtGHldt$52p8;3g6q^;OBNnl6Q\'54t8Wut:nL;K09Wr0>_g.HYCr$8XT]l0πU"5K:[t>RUMy-unT<<4XP&P.zsch&?h>rn5c#x<n,fa\2lXsfEm[ddwK8AfNb:v[GπU";NHsJs2X7xV]Kq<rm*c8rDKqFQD8O.sorZ0TLTmMri;vu0V#MTRTduEZs&1LR<dπU"uE$tX?84rfr;-Fe<^7%QET>tuS76v=Vo$eTLqE.q[UuhDvWnatd>m&xu-/*fMXeπU".1?6>niu'hN>=nHp%%&TjN8EY3dvS:_O'Dl;vZPIDDk=$uU&P;fnm#X-nktB'D4πU"&#U\dbk>(.VLqMb2XPXF5iu5#nH0k(/I1d(TTs/37Hg+)\uXEGH=)U$LBpCgM$=πU"RO6K4uM^p$MdvnSS:7X%hpJuxQPXUb:8vNl.QnWIEc.Zhpa:iimFvi6a>o)b.DbπU"fYbDwt*W7658=-c9Ltn4$bFDu?K_8x<s89B<(+tZZ.g8rfXHDwXP4wUDdZ7kfcTπU"<wp$rXL^(S98D5'^zcwju\s\prhX:d$OMnKj/d$I0xUvuXGfqan6QMFY^k]F?uqπU"=JnLu.XrCdv^MONo2vn_8'qv-fhEpchpM:0(7fft#$u06Xhs>HuoS.YYnLA\*&8πU"qQ+nbE<k0D5=sjDVQ\o&;feETts.&/6&N5g-(FS5g.-FS5#g-FS%5g-F&S5g-(FπU"S5g.-FS5#g-FS%5g-F&S5gm,PrDu%p()9%%%%-d%7IKdE%X%)BIH%1%3c%%%+%%πU"%%xgS[gfxf2L:B#U^aYFIjM1N1'ir>j<Ts3Xu>[:k3Ha>nai4=E[$JZ?Mf?+rTyπU"/-CHZ3X,A(L[og\Vxf2dBAIq%TI*J3tt4t#lR',CeG2$G4K8OiOM?i<:Q>/lDF_πU"ZRjEH%:vRXRwQ/jpjjt,N%DCh3/qb%YAQ*8'c_QkW(qR2W(_5F5qV+h]A/wBK4(πU"5f^grbMS(vHEQxE6$:P;1lEx7Nfl%RDSH&PC%5/O/Vc^?B,q5-3$IQyAr=FY['_πU"8tTk2x:->+?<9\s=^x=os,E+0+%o\es/e[l<<J>SFHjeY6J8N7J/R[^#t[fYQg^πU"Yr<j8)_XC*5v[h25iPV,.T)+UAjjXE+;>60+;*mCoG*IqtQrj9ik;$X_xW4QOP?πU"hOcjec?()D6Gp5(,BqWLHUU_JBGenrodC)V,B&N;)8A5DC+8\lj^cdS2_/Ge+M6πU")j%(>O<ADo=&\q%W]7-Y:lbG.WASFR#+jOALsChYBe*vlFc#lNuxEGA_nWlmfn_πU"LAPDA(P,4=1t;R%BK%Ug'_Rr_t/P^D*#d]w3&C?eEhU5>%.[p%\\F4DQuYj<ll#πU"]0lDCKQA<pP?p\NU<r%fZ4KjHay\dx[mE<\h^D1Z'<7+2<M??NceZ3,(KC4qQ3=πU")]o':^.Lv5;/yWym/fiitM672gtmmQYVN#s8elv<^8xqUA3O^2ad&DRS^?>vltNπU"f\D)n*b?JZ:a%9^Wlf01F*OP)H?mKMtLZr9/<uRgU[M,79fEP0A3ZWUm\,oXSQbπU"=TGc'f7D314qxe5.lrM<5WW*E#rf+k2IT?5bb41G,j4+ec0.wB9j_Np&f^Z&PD0πU"oPo#k^0<ecOJ5fC9%fk=HXSQ>[Ss0D^1N:#<O.*sy04/GfUM6l'X95Bp0T?'MK&πU"-7YVvoWfImU/X^&yP##vQxu%IgCc<-w%1^v9fLknG,8WL/7O*\et(D39f7R4/ZcπU"tS2>)]bE1[^]/coCssg/UAUJ/N=9PNSUZS/r'2,hb(#;>Bb/]qaNw3aOXCL;kJTπU"wf:/9tql6nOp7&fX0OiR/vaaQz:UNp9Y]^#)dDM65W5[=e20ltvUc#YA(0Nl(5^πU"Ygrx\xTM'iZG-C_7k+\nmCAI=k\B>fk/TMFK'nt8D-.eoJ%ui<8^;p24#G%t[;jπU"3tL[U(Sgp\;cA&v6$:U3Vt+3.a6_Z<k%EX'.fbRs0X\moUcW'JaW.S6eH9P7I1]πU"v*i90VV'W3\aE^K>h5Jn8QB^oNs]el8HZWb$>Pmj1(iLbgAH4La/SZX$kL=ihedπU"I34Q$p/B^6FJhu5e(ZasDpqcco.8CcI.bH>UpIiEXF,6_WR-E,qH>B4OLhc;pClπU"Ct/Sm?+KkccF_.aK<#lhI#g&loHGe=^Odds'fA9U/RtF#L:BT?ZHONXRW:vmdf_πU"D]Y0AR\#'4mf1UDm+)bRpiS6\vX6Q^*HCF4(>dvRuAx^5x8dJVnjR,\hT(cZPPPπU"9K-1onIs'5Pai'\&UP$3]Mr5GyNQ4n\=u/Pqgqrr<7(KwF(xW</5nA\gSeO]k9YπU"1_r4&LH5#XpI<X%-ABXUp&Z?jaA?:BPG.QmM(b*.I)tK\b-59W;m[+cNj'*BY?=πU"R9mu>TL4s'Rb0e;p&Ek90g;/\=4US'HUC(J;*O6aD?J0?e*&2Vq+.$3%sU.SteGπU"07<,NX&jk*BXU&=+BfX&e,bBX&7<-BX&<_dh3<ifb7\vF-4e>b1hIC&q6]$C&k,πU"8$C&:g;$Cg&a=$RC&[?)6='W6,QLW2l6MZY]vl>r66xWp(YAGT6,-do(3]Zi9NJπU"sK&NMPP))^%$)^w)S^s)^4o)^k45]0$QN)6HHQg;'1R)-M$a-Zm\HCX0;zP(/69πU"N<<2mMdj:r6\])gN#=ft4[RdC(2/H#9MyHZN(r2wT&4\[\*59N(\rp&>n901S%iπU"?nA1SoOin9f1S%>Me$#,*%[Rh&2]T%5>Z:vC&G02d#<O0,?/v&c13*HbZNvVtS$πU">Sqw=<lm'X_Nq<GWsC?&>,q]Q,Yf[#&rd*XxbCC;*e2fEnn7:ZkR1Xxqk$7<K.gπU",:P^3'lH0r%XfEV*/Z;G6W'zY:>>O+^'rXc#/#%-f;;0-usqSYZ;wP[eB+h$Q:zπU"LEiQpgOVfOG&L;h<icX_R;A?Od^ag*)2UFI[30/x:QO80BE'EV[aBH0TE&i%tTwπU"$8OEGplb'EPRYq;0FXq]v-=.+02GE7=3xTrguee5-EUh4RT[%CS:Z'Z$0'f\jMpπU"FPGIU&lIALL_I#G+EK+Gq8lOmSUU_?4a9EO(3VcYU%UPUCZ(r8C?]*rla,1-e2iπU"V>P7HW]>ZJ'6cv+I.,<=lJ0jK#f4V7<i]8OkpSIku^aJBrmcx4IW4I((w;D5uzpπU"nI,kfwu[htibx.jIWshT5)8(l6Xf=<0[qDaoi#JEx%wLOkmNf'N3,vmhQ.:]E&gπU"EZbiY1q=#UZ3[LEVP.IZ2Q<Da-n)S5q*-&>,CcDN$oGVLZ,Z\w_2K#J-*^iuSJDπU"NQA[.$g.dqMKbInMK#F.CXp<iTl[5PZjP%-0KHI[cT1ud+/0Pd.<euNR6%G,#MzπU"o<PCSe<>4^<fY+Ot+q[-sOCS.q\q/eiKqE/4:N:>Xjff++wPXod/(y-Ps52eE-yπU"z*gbrs5\*vwH%Vo/uA8nX,:]ib;3O^y+mw>[Qo6+\U\xpV:osqG^Q[:;m\=k4#5πU"b:;n(ofe[)$a*+bf-LY5ap::^m/J.(mznGl,<R,DOS&gE1W9Q/UjRR/pUo/9rlnπU"c<Dr>V./uYmauuy*:fQn2G#Dbal/mrvOh)nO8F,%O_;<zZRBC5/jJx9_f,Fs^SCπU"ff4U/S5t'pW>0YbHBLk\63lMGu38+Nwq+dW84aM$=dYVA?#7CwmV2p-mW(mcJeLπU"rc#<q:4=F%ACO&l1Qo*.Ea5&*7>e_dqMHS%ZgRN9AbachDO-+?Sea6NUSv*,g.gπU"r*Ix.grN*jt$->0.HHiho*S$[S,ERBodFH)&i2,7LO$_CD#3J3_c:3t_gI+,6R/πU"Z%e,k#a7\#)hR9,b2f$KVZvm$B-WDL/'b#*(&l0OF6bm78sNHSjz]Q'o6GLuDb_πU",ubMZSToa0l/5[XkJ29DVR,cfeZ3qAdEQe[0/V,PM8QMw0S$[3WBWvz[4GL%kA^πU"\lSco*ILLEG:#Kg_DE)qvTuW\r<R,8m;K/55X+sB3Y/;3-lEO1ugP.z6jT1)AGeπU"?wKK(fc*FUYePgCVJEsc/)hD#E%<1+.[,JNWo_u[&5iYC^&:#);EzK*U4j]$i&gπU">TpFJ87(nC_sH.hys#Ada<UCnX>-gO4trF&FT6]wbsNRqEz=mrgs6IQK:o(d*bcπU"vcpk3qyxx&qN--iTA9H/a2*d;>%e[nHq7t>]n&?dVvyHMcp]^ZI9_<N)cb,K%u8πU"N7=3W2UiUikF>F($iQqPjAak*(M-dTnq7t\&e^835?J'vNQ6553(jSbh1g#kPQ5πU"nf7C(t9+*jW=;X':TTO*)/kB]TVC(.pp/RRIhc8z.TjFLb*?%z)prgfE2r)en,*πU"ac_%*1LYl//Ae_,&7X&k^z)RN)'*e%1bI*8I^kqE;iw,Z_$:Ic2=T;>/_b(8g:oπU"Lr5U.S4FT>()&Wf:<U8l55D<*z-C[4xt0=#7gfquh05p[u2D2>R()*y<f9'TYMQπU"iH67jRkaNrw+<7dAQ_X-ZlM=6=$iV[VN%GhR?YEB8tGu-HCIh)n8;/c3Mipeu.JπU"&O][S3-E=&%1LT?1(5V=QR)(HMQ&2s3iZG:C/c^Qfcum?Ef0KDl;i1DhKS2x,24πU"yh=VNilj4NJ\1NVngki^c(=Qsf%vq]DQ&_vL4PRPeGYG*C4_#>msO(V#NG*Ko2iπU"J+F99RiL%8)19'O/s[^qRS_]R&8_h-%UB2z+O)1C+o\IvWiMS$;9>^)79=U]O1#πU"#i4i8B;YSl9W2vQeyuRDk[$TD=r28JW<aP_U9Gw<sC]PB1$e%1k18Vn%YIkOKDWπU"Rg3LaxrPT0=[i)Ec'kke3H?ZL8Y4sdpnx=[u/g1_3.Ws#yqJS8TJ'D0X=iC2/ivπU"h2;=[V>[,Dq;JV9a]uc#s>oorGEb?3q557OL75T1WtuTl.A(fkj4O_b:D+L-AR_πU"2?<j^Lu?+\L__%R&_z_O=3I1Z%Nw[owcQnA#%L:vSu/2i8i.rH3KfSew[;(z%xhπU"iKAD.:a6#M5ml^O_m29HexOmle^M-D#MCtZ\f(WAZ\^]lk3sP&=Vj7/2_xG;Z.DπU"8)ewb:l1)[K:4t-3EjVXCU'Y=9MBZ)*P<Mxtx4iL[]saIMC8V1<u;w1]&ac)%H]πU"EiuU]gX^=0Zr^X1d49c;<b6)*?oeV+<BI%[dV>jG;]E284C=a3+H?Hj8'BZaNmpπU"B.Ej]Uh6Y5iNmiTZPc+pq&9-qO[:FG.4o+SIIpHnpEG2].ny^gZO&eFSohQE0NNπU"o1EmmZ1OXquS7W=<r2Rk7gI;3/oY25yWq/3S*0(H,M*^cHIq.m_86p,K1b/e.e\πU",)=&KD,S6e2P?$qevla\Uww\y),.+w*t5;kZWY)N3J69TUK;0/m$K[:,8]1sVV$πU"d^Rs,<ipfXgsb4M5vGA6f%FDO5U.Zt67M$pDXoi\3)iMT3hi4M2Mqyj(kKkm98/πU"q99A<+9n103s6+:fQA\f1sxB59C9qJ6$y6'^:Kq5v#Pv.\/rFub*Z4bHf$fU+h-πU"-&.voQXog;#$I1*:+GDx6:0&M59lrP?em*RAs:PAj=lwaY*[?0G0TDm39u?o'B;πU"FXt$._K*WK/);\W59p;,&O:.i,B]ux>nA,KFA4VZO<hI$Bi6HI3oygv3%e%M;3wπU"7%[CX7=uX9MHqdOC2^p+'3N7)J$mIE0?)GtEE+z$6KVbqB*q=vgAu4;T1$Y8XzYπU"J\OMxj8o5Bi/;Fo(x43\hUiVAg/=.LT&J^FVz76>syC+whiW2bhK2?<iw%tHp^[πU"j37\gxXzluGY>'#+uspLTP]TtvgMJ.k4^[Dil:m**zSxmKfQK_tSaC_K2x0bUdpπU"9\s;8En3MZk&w92O&D8w<PAeArTOzB8M7054f\l^0Lu=.4^+aSx2]t*G\LpOVYAπU"h[xK]rh+Fz/ku):.<sXC)RpOK7-IAv]Vr.Co51kE3]OMada,IC8/V=,1HDZs)KbπU"3o%)8IV;(K/).a4^]v8md2h)SL>U98PVToZ^7'+0n-:Lh&E*/uAl>r-9J/]'cPsπU"n+P(?+b1KoshF9.<i?-BKUKCjxCZ&7E]mnz+LstBS*n3qN1AMMS7Z:XN/jA,mTPπU"<9YE(q)JrM^eslE;A27f);>\gyS]Y4fH]nNNt%*bo319:?e4+XUFBt8A1.H1:'GπU"qUz5P[MIxf&GxTp2:72L0;]P<3CEh5:ADF(z\%6rYK,O/va-dy:eIj'(O7/SWnHπU"J>+2G?ATdhZ)ui_p,FDp\&0(KBzc25/z1MdfAJgxWgbeqW3\gW3,t>:AI3*&Or?πU"8k:I>N-d2jMf1jf)1:<p%;yZl*(&)C4z/,n443y)SE093Csl*K6F3]SGK/wYa-IπU"u'Oa4=zX)3+J;FZv#Fr^OoeZZY/SA:Ilp77(-Ype['38g>>ue>s#\bdzYo>/=,mπU"dzY>=?=Ld=zY>OH=ld4TYUQ#*$pInQ4-5YQ-Y$eL/)YsNYheY'oN[45k7z=mDJ9πU"<aOYsBW9T\FQ^Ik2969tomJV5QHwk5-[Cw.XdJOta1+/hO#Ep54c15GHBNT%;(&πU"p0>#O5S?1^vTG/M&:Z&]hT&sRlI\_XooN1M;2TCfkSG.(r<;?1wL7Y3[cgW/:ZaπU".W)EBb2*Q4:^8+.du&s/Jp'049(x+jk=S5CNF8md([3=TN\k+kt2=22O]PW:6^[πU")khkfZl5[1ES[3leR?/-SkbwO6[KVZSGb6vEWJ($WF0P21haXQzG'#jNDd#WM4_πU"Q091_CWyb((#v#2WN$S15f7'9jTK('[7REBWr,WbFP%[lV^NuR#oxGa4RDh=Fr\πU"bW]M5VNM^Fd-rjc7adWlWc#tmt/GD(D8NrK#+wwd3a4E)TW^K5VMc^Ff?jjg7acπU"Wh7B#$nFI8;92a\RCxIhJJN#,NRt]j3wsWPfJ#2tS]P3^B+Nbl\oR^A&o_SG<2kπEND SUBπSUB V9πU"Yjk<3jC01m6]7d\7KUFyk7VmgA9fW,*F&K.=L(Nc$;TW1=Y)jy,fo>lC#d;l>?LπU"vpJR_topo=Af^ILI(%U.Z85hl<Xn+r2N[;*\/LM-v**NhJU5fd\y[z<s?/l7CZWπU"+$5iA3_B(T4=D4*lXVY?Ik>YJZ]H,.w?jstCcS;><-KoMlhB>^H+BU5cD4$i$9AπU"i+R2_zu2Kr(cK>l+=Ls.P6_='w#UM.z9cJuZ$ctOL_y9.D2z4CZ-bdRmT.9uU&UπU"xC;_VBQ0$0X,o88q#p<<FZw0g.v_G3>/7qn$d>)&Ch1]K+SVhKb6Qb/4YI3ttCuπU"=tftoh8u[)2d<xYup[/2WdfX\\T2aQ9F81FMZP^*\J=steH/:34v^I2<OtLB)+RπU"1x5_MyjuLSL-Kow)V5aO0o5:l&E*Ooi6CpVqkl+kg=/u#yCt&4r([zH;/ffpEeLπU"x*sY[;daqdjR=C#xdW3s*56;%UJLMlWfdf1NCci13K)eL4K<>Py39od[%7H=h&4πU"#ot[2-<M$b2ME+K8BY_Kn/W)]6mp>*=+jsoo$S)lQCo5;<,bI;.\87FeFjXQ)A8πU"^a2/bu:WfCs^chdFMLDIL&J$kT/]r8D^vV,Dp*Zn9Xu5qq=BAX[P#A??#UgJCfMπU"S)sag'/CYBU\\'XLqK8FC)4HxA#O^H7rxHRXn_JtJWItYm]uaSE9QSUj6pP<Bs6πU"dZ>k,AbqZ)7hVnWX:3jzxbq/wbEM%=0F_&)PJ%9nn'6rAoR9]H',SxLn/KQ\tX=πU"bv]Oc1'sSi^x7]9CKCYfWcZAPZl'&k:4do9(7?r(PmW+^<sASfkq0Mp_XchRb_iπU"V6.:J2:;wSVHew1SD]*eg1xX,_=ga/55t\M:=Jh_vO?O_/QlL9vQ#>\C_lKWHTDπU"I\3JDpC?9''A3I'&GIkcTs#TGH_xST1a8E':GUj%CXW7$/9NXEokW'Vy&5fBA=mπU"rEEs'%A*i[7M;wM?[IVv?g_>SS[<<-#)l4+;j[-/8GcB3=S4Y:uO<rE7-A/?CReπU">f1]lhQ<;a\)BrX;hCh1fKem$rZtCcbCMh#)[m7Ix.M$%rh=H'xp0u$]T;uC;ZWπU"3[.*P$7UkG,;UXqqxmEqZs;r]0VNKjw:$2EBP,V]1zV9#3p<qB(q-cJLlxx:e#GπU"0PJv+i()Ob%BH#5?3LOowRBxmu8<$mL7wbtLDb5OYgr5tO[i3C8fZ[lAr9GVnsyπU"^dLOS&E)3j]lO,hwM=_xMTwEi.rdaC'r=)DGUCY65-J;x/>=fR06:La]5Pk07Z*πU"ms[OBZ?3R'm\#TCu?/+*8-[Ox<3?DNSyA,/s%[(:d']>9Z>HbZSF]^qPyutG(<0πU"p1Db[jS9JyG'8P+kqEfgmz7HB]nRN(neBhnyf/oCt[gQxm..UZ3UCpa6>tpLBi9πU"03b>^kEo2.WY$O#bgDyni*j^pq_>RA754g<V7328#61AU/8kUisNGYBCU,0.?GRπU";\TE):&G9'EC-pw7]=W_t)=oQn)=_zIROt9&^XSdY>\vMLaqQgf1KARE/W]+o/nπU"krv?=Z[+arq8:JC\1Kpu\Y[+1Hi=Y+eZh-HM^\(annSl1ju$e79usSXDG(_N.k%πU"n+f>L=wpq>A.tlh(\\eB<xM>+KKC(M/_hSCdCEjP/lm(;g#VittiRmN/Q.Y;QmCπU"RM.i;0dqNe5e$=AUSZhA+#=?0(AX&A,D#H9phPRCgNHcVel+)/#QbD3s#8e\0.2πU"l(-b6U9F5j7qE=ufsw?Nq7S27Kp6:)K(ddo+tBc:bk%\S+=AR<_Lvj48u;jnjq'πU"v=HbPFV[6\Z(H:k\ox-7I;plW8?b]2*hp:B9JC_m:0xV3jq7kdRicSmu]>p4k-)πU")kdrfSBm#r4,eVC#(%V^nYR:;r$#pM51?*h*ADB<,G[QSPC-)\6&]&M=tX;SI8$πU"+g#8;WHqD0C=3-<Hxg-T6(c3m6ew-m-MvYjHLG3dYzTNU'&C8=:P;l-d]\:oubrπU"ww[T]y-*lXQ8'B^4ED-(a&0%,ia_/;GBAH6u+fGSRKIC(ceY+7<R#CyqvUOi>sCπU"+pY,jp6fmj?)+%0cH3.ftQMp=Zld2BEUMDD$R.Y'aH<st),U9m9+hwaQI:)h/2jπU"##$MMBK[hJp-A-bA'dvysERYbXr8SVMR1Sg5l67C,2Xg5u:eeJBdWe[rNdjsnKjπU"Lrd97OENapRD.f0BDCC)Eklb#U+'N2?E6A6d4AnGeR<$n4_X?*N$:1wFEUtas>3πU"seHC]Kd2m)uan*H-A,Q.C)AWz;1UZJEr8A-I3j#34M&Hqu_j^bSxV,$5-n+ndspπU"aL?RN6oS]_(af3'#sd$7(SbC?LS34/UFsIx.bevDVcOXn#wq[shbf(U\R-fs8V>πU"l]Zd3P.a#Z/26JMq>*,/XDLK[/c6ng^HK3e*dKpe,rNC28>tqi4D$Rm48omEug%πU"zoTIppre2;gMM1Fj#<tG7NF=&^#\dIznvT##Z#X*M$6u4KHbfRk2+z>cQbK0wY;πU"E%BauREXN5QMBZ;vxO+8g/4r1Y6upsI2ZE['HEMBz>*H2aYe^Z_[9[TC^1&/f0wπU"bm2_N^[._]?];SoI#R9+B\SMFfE<&'+Rg$og:<.BTKOO5N3g(hO*Qw7j8%>'?C8πU"2Olx_yu5nYyahrZo+lpt0K]8xs5=L#K0-Z8hs?qx^l3GCvtO<RpbqRvE70w?r+RπU"Gt,Piu/pu:[puY,puWFALZUOA^+?.)*Tn+3%M3c10xE:gp%KMF7j]'X+5m*a&_UπU"rhdUqu=kcX$OPAK9Fz0rD5VPQK4<&Eht*6sXs\(ah.b9Qbmkg)#7e-o=a,:C<4EπU"Q29g)d.sdxsVBr>zsQBfM?RTh\iQVi8P[Ixy8J&=]_B+j)78dr>LPaW\HN+Nlu+πU">N_O'6%Rt$X01g]2Z9/9<ItH4,G-p-2Mn)2<OB=49g'/,IpiOD4?\ANml#qM-g5πU"(.AJGB0M?BOU7>_&O/Yq*-Qc^#uGEb3i_\OTmI1e9mcWjUP:aUMoc6#*^l'qH[sπU"L+e^G#.2R,E<NLgz[jj),tAkez:36ZOe^(7t6SYr-fd.fif6bF)QUwV&L>+b6>kπU"8Yk=\_Kq%F<)4%t3tsx91<1II(B22<GYCYBPIL<m+nG'#$0^CvPcwv\oaoQl%Q>πU"0zVu8;CJFtdlE/ba<CiP.?Vd?[Y7$ugaOj9]2+,I86eW)Bmc\;[%n(V0dbLK?(NπU"$MOD89)DP4^\z4),gwT_i1xn_nzTe$lTN9.]rp^9bg&c+QF\BANxTLGM+<an5mhπU"$e$UR'#?2#^.\#&C[a*[V4n(d5Qc)8c%qN5DaN+Qgt+M4Q\$'jJeZ\cgPsJpBtuπU"F\Vt3NLp'.[Wb#sMwtNtvFV$hsQmauoqqc>E&p)J%4.Mq-LrTlX/ct5'uJ;<PdqπU"L[CdIB-X7p&_-KsQn^nk9p)XYJnfb&RZvsZRFMfMi$5WZ]+Q1-SYU:%qcM\<pHpπU"edn/n[q%0[.7#<'N%MQ>RILi<aVn3lV*&OV8JGUtt2,C.9CbtvpHB=rSsnmh5llπU"tl9sZ-g,Q[Yj'(aZRl-P?&12raYqtduttnHWIfgb?HBv8Y%N<IW<?>_-*jt?.9UπU"L7oRb*xj^wFoZlfVLo;cV(,o4[U+#Ayhrxg)45VHF4(tFd/O]AeJfeNH8PM1Hy&πU"w9A0(t;2Ri4I7)?]j*&gBDR4hs'_#LI<[A:Ib.EnARku1MwN(OZugKg9N^Ir)O\πU"v]cf((sDg8)]$Lfc&Uj8dm5n)+rhnXxHn41d*:3y(*6Yqfts[>WmOpEBl4jSe9UπU"ej?dk0zDp$Evi'Y1y&0U,z\dR<[mN1<R._$7FV5P-<7G)\xXIs?\b9tfkr%O2W%πU"[12r[CH$=D_Tr+dl+hh^<Q/98%+8PcGy,DgAR?+>mU]Zm2%5Tla-3>Op\mE\Jh*πU"79'xwh4[U_0k10<If^iT1ViJutbTnw.[ncPHO\VHyJ-*52yA[I9cM)iEd%x(:SoπU"bnpB:iiDF-r=ca8W)wd,l4c]3XSl6AA>_m%qR-*;4;a$&T5\<Pa3%cN4F+=,UjqπU"3QK+q_.jFVg[+/n0a&[r6JP,/mqLD+(M=962YoY)pD9O2B)'U^Y:h.32)m.3zNvπU"8BlEuMOiCdi+:HCYY:jL?<<3AZ]5/k2Uv>Z%5kpJN)T/4=xMKdS8&hu%(Mp3'fHπU"O=l6%PzBmSC63P%BQsir6G7h='kM9?[Zq0GI#S0>fL6Fj2j*7-4f_A0.l9=&&]>πU"RYp/,;t/apLw^?LRbIYGk#JCm*P+^?'h.;s5s:&Wu=[UrH)D=RhL3s32(HGi98#πU"i03:BR%%gFNqlD=z_'SBl7\6XX4kMr%zYx?MwEw.2Nbi8=E01TQcs_A+mX$e)27πU"BD/U(jC>B=t)x\z'*]-)V36[^Qcm\1h2foQB,(\H_)Z0v/oj,d;%UN7V)/jrc7BπU"y9.Zd:uWBOTK/JzGQc2&Isw2+-YAZEsiD'ZAz]7%uglkHGA.=pq:DYxk](<%28uπU"%rc^R.iG?gT$DZkFjJN16^*b'NZ4siWf_ZR7O^oIegt:;<2*H:Oj(*fZ]IF3k_dπU"<J>C;%xWe.?I>iUP#e]LRROw&uL;4>Kv;u4i)_vl1QHk=+Il)1O;*Ev(ds]+;a6πU"M[DN(^0g482E04.sUV,]3.Wln?bTO4VKeZoVS#>m'lZGj=44bcE%Nc16azm2gn'πU"cpUCY[Z93,;TXtXEb1tjmpHPX90Rfk^q(cs8RZBSqQtTeYoD_4.j0[ZY[A(,=TtπU"3Z_/$Lhm94Ek-DX:EPDG#n$B1+7fq_gn._vgQM(<'k=Ybw<Riesn*:<^Bxi+0j4πU"G^BH*ML'P/,P>(A))hJ%BL'cU5,Anm.$k<AO6)n&steLcTbN204DOjZZm([y:fmπU"?]AdjIRFm?mv-9kub(TWA]R+4Kx(EHM'(]>k%sv:JSJGv>_[aw7A2CAkCB&Tot*πU"b4ayrMQ)u:OPUP#Jt)bRxD<vY^ZK6Yh3m(U;+ssXj)L2f*$bh0xKdr_vnv[5v#ZπU"p-cx<9l9I+w8#*q:F?$<d[4LWONYwpKe9%zDh^ok3gxyc]#9<5q/RyL'FDYo6>;πU"YQe3BWa'%W4?MK5tdRgi*)oAnO4Y?/-oz1QQyBT$yKN=kT%9GY/UI..77f&Oue1πU"Fx[-e,X>0[X4EH_\Ng$129^?fppfQ+(YRhLDnUd6FWEhV])uD)Kbxb%nk)#,k%tπU"5nCp*j:CufpzMImv6JHURBBsQ80PzBnr^w?/B9E12q&t'Fm30W=5Vv0a<l._zqmπU"[&3E](RnA%[7G&1Lz^n0b'*-J:>;eu%WX[oK-J$gZgk1H/iNtU3r1]][yOQs2AQπU"I2jU)$+=>tSA]?QKnfXUCqi:c;a-Yq1$wUyq(S28o:0hK]^9KzIgtj-3*sv2YJ0πU".iMaw;2E6\VhQ9l_m%KnUkcI%)LXFkdqtVd$.(%HYu#h/Ym7&tl)oZc;)IuXo(oπU"8dOnPM9C/IT%mHfSxfjN%&up&%'9%9%%%%-O%D<l7EB?H+(8[%7%,s%%%1%%%%%πU"%%%%%%E%%%%%%%%%l%frjg%fhpS%ifyu%p&'9%%9%%#%-%,-/PEW>Bvv4#'%%y%πU"K%%/%%%%%%%%%%%%E%%+%b[%#%qj%%jqWS%ufpu%p&'9%%9%%#%-%0c/PEVM.MqπU"A[&%%u%B%%/%%%%%%%%%%%%E%%%%E^%#%qj%%jqXS%ufpu%p&'9%%9%%%%-%UCtπU"mEQM$U:O%L%%,'s%%-%%%%%%%%%&%%E%%+%3_%%%mjq%uSif%yup&%'9%9%%%%-πU"I%u\t%ERCb-3S&%(%RO%%%/%%%%%%%%%%%E#%%%/&1%%q(j%jq%YSuf%pup&%'9πU"%9%%%%-L%1Pt1E?j\'eq%%+%\'%%%1%%%%%%%%%%%E#%%%1&3%%r%fnsr%jszS%πU"ufpu%p&'9%%9%%[%-%;_7hEpE6]fZ%(%%a%:%%0%%%%%%%%%&%%E%%4%Q3%%%xuπU"w%nyjx%Svuh%up&'%9%9%%%%-%<9u*E(npNC&5'%%%S0%%%.%%%%%%%%%&%E%I%πU"%[7%%%gf%hpkS%vuhu%p&'9%%9%%#%-%LD,jE,oQmi4%'%%N%.%%0%%%%%%%%%&πU"%%E%%.%>:%%%izi%jljr%Svuh%up&'%9%9%%%%-%2^trEWgxoY'B%%%%<+%%%.%πU"%%%%%%%%&%E%R%%v<%%%gq%ttiS%vuhu%p&'9%%9%%%%-%0_WsEFA'P+U%'%%]%πU"2%%/%%%%%%%%%&%%E%%4%f=%%%gfh%pkYS%vuhu%p&'9%%9%%%%-%9D'tEYH/N<πU"F%(%%a%:%%1%%%%%%%%%&%%E%%1%j#%%%xuw%nyjx%YSvu%hup&%'9%9%%%%-I%πU"v\s1EFqf+rE%%%%H+%%%/%%%%%%%%%&%E%%%%a&D%%g%zggq%jSvu%hup&%'9%9πU"%%%%-d%PFE4EsUG+W?&%+%N(%%%/%%%%%%%%%&%E%%%%U&E%%w%jfir#jSy'%yuπU"p&%'9%9%%%%-d%Yp#jEJV]'mF%%%%y%%%%/%%%%%%%%%&%E%%%%CAG%%&%fiqj&πU"%Suf%pup&%'9%9%%%%-I%$Zt+E)DH3wn0%4%iP%%%/%%%%%%%%%%%E#%%%6&G%%πU"w%jfir#jSj'%jup&%'9%9%%%%-I%9Uy1EHIG*/2+%(%Vr%%%,%%%%%%%%%%%E%%πU"%%S'S%%j%hlSi%fyup%&'9%%9%%%#-%$d'QEY5'#\C'.%%&B%%%/%%%%%%%%%%%πU"%E%%%-/Y%%.qj%j%qZSu%fpup%&'9%%9%%%R-%]OB?Eyb49.Z&%%%?=%%%/%%%%πU"%%%%%%%%E%%%-u[%%.qj%j%q[Su%fpup%&'9%%9%%%m-%E*BOE9I+%+$'%%%S0%πU"%%/%%%%%%%%%&%%E%%%-(]%%%gfhp%kZSv%uhup%&'9%%9%%%#-%>rf>Emi-86(πU"&%%%F*%%%/%%%%%%%%%&%%E%%%+7$%%%jsjr&(WSv%uhup%&'9%%9%%%R-%kOf?πU"E?k,FQH%7%%'%%%%1%%%%%%%%%&%%E%%%+ba%%%httq.rt%j%Sify%up&'%9%9%πU"%%%-%:%dQE[x5U[%v&%%%k#%%%/%%%%%%%%%&%E%d%%Ya%%%qj&%jqV%Sufp%upπU"&'%9%9%%%%-%;jpOEEPRcz&K&%%%J,%%%.%%%%%%%%%&%E%[%%(c%%%kq%nslS%πU"vuhu%p&'9%%/%%#%%%ObEEEQ'/h]5%%%%5%%%%+%%%%%%%%%&%%E%%:%ud%%%yuπU"S%ifyu%p&'9%%9%%[%-%-,z#EDJ.Qoe[%%%a%*%%/%%%%%%%%%%%%E%%=%Sd%#%πU"qj%%jq\S%ufpu%p&'9%%9%%%%-%0,;DE;;cogp#Y%%?&*%%.%%%%%%%%%%%%E%%πU":%ge%%%xyf%wxSi%fyup%&'9%%9%%%#-%sxTOE\13lXy%%%%#'%%%/%%%%%%%%%πU"&%%E%%%%/F&%(x&ny%hmSv%uhup%&'9%%9%%%m-%#3'DE?N2[w#%%%%H+%%%.%%πU"%%%%%%%&%%E%%%'UF&%.nj(j%VSvu%hup&%'9%9%%%%-d%L?E.E6]X(Kd*%7%,sπU"%%%-%%%%%%%%%%%E#%%%C%G&%h%ttqS%ifyu%p&'9%%9%%%%-%7,IKE%PX%BI#HπU"%%3&c%%+%%%%%%%%%&%%E%%%%TM&%%xgS%gfxu%p*+%%%%%D[%D%7[+%%F%p&%%πU"%%πEND SUBπV2πV3πV4πV5πV6πV7πV8πV9πCLOSE:IF S=64AND B&=Z&THEN?" :) Ok!"ELSE?" :( Bad!πSUB U(A$):FOR A=1TO LEN(A$):C=ASC(MID$(A$,A))-37:IF C<0THEN C=91+C*32πIF K<4THEN K=C+243ELSE?#1,CHR$(C+(K MOD 3)*86);:K=K\3:B&=B&+1πS=(S+C)AND 255:NEXT:LOCATE,1:?STRING$(B&*50\Z&,219);:END SUBπThomas A. Hirsch               TOETRIS - DEMO VERSION         thomasalh@geocities.com        12-13-96 (22:00)       QB, QBasic, PDS        294  19371    TOETRIS.BAS DEFINT A-Z:DIM SHARED K,S,B&,Z&:V1 'Created by PostIt! 7.2πSUB V1:OPEN "O",1,"TOETRIS.ZIP",4^6:Z&=14266:?STRING$(50,177);πU"%up()%9%%%I-%B7I>FCX*.BT2%%%il%%%0%%%%yt%jywn%xSgfjx^+d,>Tk7fxsπU"Oxr<m(Agn\k\&]Mv7IS+;V28\BIqntYS3<Lp8<R%%m<%;#s?xsT\Bpnv=;,s1%lπU"&AlPQge>5ef$sXQ]#vVf$^i7%dgD\ul>Nu.&uzB#lC'Ej-DDjrj12wA?xhANN,<πU"Y<ki.sY^HlKA[U5UhbF7sLH0HR:Seqj;zj-$9]/Mzh&,tcqyv'sBcOx&p(DnAB'πU"1Ht%WwOH&tWwO(HtWw.OHtW#wOHt-HA'<1T)LoG-Yw-_P9(NKOz<,iNey/Pc0hyπU";JYUxpGLNOM&<h9EDG#9lkh>aOTen08B^xwT[3tPd3O%8DM'T*K1r*%>;'Br[ABπU"t?'L>O&06k,m0[M]9Ah=L\1Hln[duC9_;Q7dEn;3m+.ZI<hb1^7MW^A*1#bFdsRπU"L4lzlH>Vdj338:/_PWH,U+]_RdA8h95$rt_]5Lh<kBOBVT)fi(g?7lUL>JkLM,aπU"=1JWWG1&>I$BtVDr[DK9;tzrv>.7XE&AAD('osYs$$nf^L>oX+cY[Ib3VAUW^e6πU"Lv5-Ha%b^9j$mX76cqkLcMm1bId5Y0Ou)P]eI,>el^M;]YhmZ\BqnurHX*UC_tNπU":Ao6boO&RkR?BxG$w,0+s[hPmH$bQN/6vb[?*C'Wt7dv8P-<W+KGKW*=2Dn1Q2^πU"qxV+5A<9_2^+&XFLA9TuOAt2jZGCH7s6Vt:h0*HC53+=VP1c?^GAlqJ/UiER[0UπU"+r9%YWrK/CKR1#>)Wb2+2hUdU9.$jX]C#>uIBTc'0M\QJ1kW+6*IWHC/9?KoEC,πU":81=v(j&_9HulRtlpV9w(]CvoT^&Qi=m>V=l.rKV\#T2sk)8kQ6KnhkxHFR0#D1πU"mZ'/YI2#2'A8e_=/#a.+=J[[H)=:55=#ieGk#=O^QskN6np%)iCu\)bZy,SlrlhπU"Rso^)B>ntiAoo#e2zk2-U+A*Bmnb2If2I_d8lh;hc2enK-bB]l0&1F5sFf0+XFbπU"IOf'LStEa<A#.-W_g.*w?e_y$Q=J0(#ZSALuQ>\C=e*^qY^&DyK+(O<s2GdQi4VπU"1oKa0Lvh=Gw-=D%yK+O#RkBd8Xi^g&q7YyKo+0'PASb#P8:a:ll\aJ='9]Y[dW^πU"F%4rk0A08w[S-G3xJ0-TC:M=6]qt:7ASuG$)(UL$^Ul.q17Zfs[&;DfAOrxLG/UπU"S*<oD;JD5FCC(9?ww<H3Z/_NANC^OZGNi1zLp$F'R87fS8;m^)Sb%We0Nd=5FT<πU"W3uOGtTfSqN9yL(:(fj2b.^:S&3^2BlQsGHHc.[nC-^n8&Q(mVMM^?^BI,b\G,-πU"V7INs\d7_XfUmJw8NA&r,2UKldA^q9CN%$#ll/)0FiW:*1XBRiD]o\?7R616-d?πU")f+b6H.gx$l[#HsXO_2VQkgDiucX?]?i\<Q2#w>Gy*^N(Y&M>NHK26*7TupW,3nπU"JWTs\9cK*XbiQhC%Xr3Hk4^b/t+_V,\s3gZL>Rt^DsDU'BS>]1.gcB?Lsl7?:3VπU"7m(l:&Hve^0=P$anG1o&nxVeR$]qQJCwIbY]=Ya#?(lg94L6'7K?DrR##%/DcMhπU"=+L;.pVCtDT+rFb3XyZZ>0xQfMTpn?e-:nPJ.-Rsrc%=b,&K;cuZ<I[W]$V0Q2BπU"oFT[IbH3<Unak#xPZ=denDa)v,KSP5ko%>uf<^7HjoTq5tKAW2D1iVV/t'i>uM9πU"Hu/S+Y7n_geGwr>o18Is/%^>QAli?9^eSl#r_dlK_CwgSerY/UYl^6>7X0-s:OwπU"7Y/2YX<D\DMd;#fTTFV1)>'i,SjQkGCbm^+D\[4k7J(+J#:VA5Kifn5ijt,2Sc=πU"/XFZ3r;MAG/tCuL>?DE&e?&i=iA(JFyKzb7P,1hJGjB9:#eS.A)-k8#YFt-l\>_πU"pck_a$+DiV7=leS\$c$K)rqUA)s$iA;7CD#%qN;l.(flB/%9bl#*q+i$AONL8<GπU"LZ,4KKWSxNL:FGLX4fsr3s8uqOi.KX4+Cr3+ulE)XEhrapAf[-yIOJ96240/Qp\πU"Szb;2+uUUrl7h)cSa[%7*)0(7SE1BnD&:fBI0-=E#.e?#$-(Q*T$=5TU3#O\/bKπU"\DW>Sy0F[]H5(e6Pqhw%+M4#A]Oc&>=AyJwcqtYrvD6ql%P$]MtpOk?JYYu%G:GπU"vNpkIl.MLrkm76TOyL*):teKh.7j6?3m5R8Pm=Kk+tX>yvCwsD/GpJzB;nu(8G:πU"nAZ'C(b#I_Yli^;=F0LhPMxXm5jLJa:9J>jL,L9:8tkCjL:Kq+Xu&sa$rUdHqxvπU"Zu)vb>G:g9tl>HQ7t4VTZFN8zmE,^%s;\ILb4o%6Kps:-KKXBK#X+;(_vC,F8#'πU"SE/U)[]jvjDQCIredk=0^N8^CzzgpBUxNBg/(-gkP<\^AZ>C=\)uVRq4\9HSm_eπU"qk;Y6HgAE_(;FGQzHvBNK=zecqpjTAGh7SlY7-ri-^/_?t$hUmijF+y(,71)#VfπU")Rtm6_nKVe*6AA5rTh'2*RTE4Ptr51^4\^&9y*-uu+gP\Cen3XOwvZfkkj#=ZO/πU"RSm\WPld'*(JM'y*f3y.BJ&UIHK8OHFpqX<SGeHNXImrdh%Baa0+hWV3[0bXOH2πU"c(6HtA#r=Z/(jjje(,+S0qDAj:EeVboMd$E74Yp_LP8JWOOaJTk1)Lke+S/M;,8πU"yF\4)A)XjDOGErPH>(RT]CIKT^q82*va$c,yVbFf=(mE+eSGg0&HeItof0DAVmyπU"#hTidEPHx\[4z3X;3ft'7iG>X*[R]7$&;bCw\d$7L'Z_I'QGPFTF_4>Y]ox0X1-πU"hpM^o;tw26U.=K6(EOGoY0\.(79GX70TD[M*4'$)PP%'\o)R)Wo*PG7:1)KU]7LπU"0<sF4n*-#&nD74V=H4>RAS'<kPW-^k3n_SK.V.)qGQI>W(o;kJE'q7Ed-p?[+7cπU"'8]P)K1hPXl96]>X6jd6vd=\V)-CR[K')o16RjHwMfuPnv<5InqjF-f]i_k$ShQπU"j/&z+CeF[rcbjZZrHa?5YwyB';.m78Ld]XXgZHl4N(8n$.Tg_Qjb3iIP*.tm'm^πU"4Cc^iyT&I^E&O0ttllu[ubW0x\4m6F]&9UVz8=1(voWqGxB(C%Dl#d>=-#J2vi#πU"vu5$8tT\r+<r/b?odZGxPU>L>Hp-uN+1Ba:pZ25rHx[a*QBL5GLqBR9LeZP$36GπU"osIh2a[Gh(3FEV<^Y-UTI:TFZjEI&7i>*Vuef^-g?iBQcq$p[IM'4QF9#O0SItBπU"z>tkOq:'<0?T0ea%c$&CQ.&r;XAj=2g^oXYsI(qVa5tifXeeT(#;U7E;MT&8on9πU"<.t$L_0N&+LI]DN2jeJ/hIg7Y%E1;ZV-gHMh],weA.fK0G''3q1mIH*D7rnn:m=πU"k?kwAoA65m6fIUlR%l)zc((>gX.\Y5oVB7X9Rw(bsofnF8k>n\pd#s;Z-jOI['hπU"q,lBxLn=0Fa0Ka\8Ho90][#(t?&lQ)9>gEZovY2Rvv]oj^QV3[]L)bB5S8e=;&PπU"AF-4V;LCj:Zvd7GnKi#d>D2W9VFZn9V^M-ASK]D8I2R4VqTvr1mjZ-J9X6-lZaeπU"u37ah-jkM;E0>mXjR/D,<;30AFBLl6Vc4z7<VmIHeB+XBSCZKOv%[<-^FraZW1DπU"R]ILV_EI/^m^J4CbEGx]agN&jk+%KCv+nX#HqNY3MXuPP.6B=+OB7F'HsA>H2(pπU"5]KWFpnzXO=+UVp1$LU'fGLpyx\$tHM2hp66lG*(U&I>eWc%_4DW>9w9[*SxPV1πU"ImAMta:(H%'SeL\-upQ>]&TO8BE(\;ScHp\-'E>1kd?ImS'TXlQ,g<uys2bne]/πU"*bBBHJQf3/<(mr1hTLx(q:W)(q2d3M_qd?&t6K33k+Xqb)Ahnp5D2Pj6L^UKr&vπU"DZf=GeGu,';N\iBUq$*/VrnvkZqroftr-uPR]I;q*?tK8s1]'l0^e7+d77DNe#]πU"$%uQP&HY5LFq.R)WM2GB+?i3f7.1$a3IDiPCE_<;KsL*]En9Pfg\#wihao(pW,lπU"h3b+(dXhFPBYieGnoPz+4hNNvBQguPm=K4D<qKe%DS/RtI\xid;k5NccT&#*iQ%πU"h-,pQ>;*bI*Qg'6AOso([pl)dfjjWbf>IX^8l*%oPb&[pb$2<qgeUZfs<c3vpTeπU"bg+d6[5-xoB#='0-Cwah7EqRD/;-SN'tH2z)g):7_(85G&hTTgj8N;UWv_&MGD)πU"RAWcVdVY1ld>gXfTEA4zRO5j4mT/ffcZ]/\-R^#gLDIG>U1O+UgP6xpgNh:1u%;πU"Xh+KP5CigLN:1uHm?1M_egN61VRnPe5o>ENY6Zh]K#X1=vEu4%up()%9%%%I-%)πU"Ed;Fx)%KvF%.%%K%%%%,%%%%wt%ySgqjp\6YM67/1q/wxl'xD(56ux64St>qoIYπU"#d81KWL2%q%up%()9%%%%-%)PE;FnwpR:%C%%%&K%%%%.%%%%lwzj%sSgqjp\6YπU"M67/yux<9i]xD)T(h8+cFMFk4Ji.1.%(8%u%p()9%%%%-.%pE;.FHTz&*I%%(%KπU"%%%%-%%%%gqf%zSgqjp\6Yt6qx('w4(hX(LxNHox=O-Yxd+7cMFk)4i.o:XOe(%πU"%up(%)9%%#%-%^&E;Fd+E08Q#%%%K%%%%-%%%%l%wfzS[gqp\k6Y6q?x(wt*vn+πU"KEtNEG2OPP4O)xN/n/(:x(dwkXPPYNo[r1ei'xD%u%p()9%%%%-1%>E;OFxSD'wπU"F%%(%K%%%%0%%(%%nt%qjyy%SgqpW\6Y6Qqx^PtpwHxnNEsx^dJMFf9,tR&wqXfπU"3e:/'%%up(%)9%%%%-%n#i:F=\I/Zh%%%%Y%'%%-%%%%y%tjyS#sZW\iJp==#U1πU"+/#l*Fb^gUThUU+&LAsoH2d.#hMLlyvQT:b;AROMFxdIEY$T_S4U7qXmL>*/wLSπU"G)CTsuN&r>fF-rr]Z.iEIROU-s%89?dUB._Q4D1jE;Z/MFrF61-kuN%.[XBuFo4πU"jG%EkdH:J+D?-J,J7cD8VWoR-2E*5?RI>E$&3=5+h,F,_g([h2PZd'/KB+*XNEIπU"*V8NT6GTFmdg.==3rq?kP)bgfO7Oq\f*2?CmNSQRqhRt8C/Vdqye+crve('6mrVπU"'^y76%g<?C'i_Yl&bV#lFIJNqgMY8Hpdux]'w(up%()9%%%%-%'0i:FgDD_D%H&πU"%%%Y'%%%,%%%%wnxS#sZWD0KV='[V5*I<8A*2'C[NwCEeHoDspe;)]a#)^_Y:%\πU"dGJ2=f'[M%*Jl%Ui$OW??>Ad.h'-w*=T0dqL:?\5JUQd?DZH_UDm/g),*;T]_2NπU"1/'FOF3GP_.XkBk7fqnWrIZ-UGB5=2&);3?v^t+=ECVjI*,*7S#_h8[1^U+E-N/πU"9gzHN-LRKSxJvHStN6N>z8KfI?7Oq\3-*oO_N3M<l9Jgmp%2>of=GMhOhVH]-QlπU"oPAlM-4_55jCMeGlpN;+G\SA0Py/AMfi1#B*O>Y:YQOBlV)PI>9FXXE'M0P,-06πU"xpM>%Mxl*jrKjoX<4g\w*T4Dqq[mS6Z/T63?8s3^gA44;&bRQW$Y^3yYToCDb[uπU"nUxt+8Xup%()9%%%%-%*_P;Fl[f?.'t0%%'%1%%%-%%%%ktsy%Shtr1zb:epx&/πU"#9pc(a+m;v58AF;f.&D/](gZMV)SVEy#E'fx/qLS)$1UI;%fjx-c..RbG'ey*V:πU"dYzPr.e0DgJ*zFk\i*Iff>*%A5v_[a/:'E-W;b#6$D5rOVXsZ(.P)k.O-$/]R9BπU"6^#-ROT+-,MaSU[-4&xR+l:jXDkm]0HfsXEt6]v4ZaVew-ge#g$1%:85MvIO*J7πU"YnVxtDfUTtwdInZ7s4y5-t)4d9:H,^yei/+*/Lr*g0n3N&:&'vyqDd9p\q4d:$4πU"%(DXJ;49vNcm*v#WXT-siI#O/>$VLmsq8l7I^r7VO.g>FJ:m3WVftjWA$Qfkc63πU"ugp9-+9iJ.T2xj0>rpG$Hb8eT^7xvXi>DHAphlF5UH>G$>>F,7XW+tl]f^\qEr\πU"T'9_5i_hCm:d_+eDxcK4GyJ0pxS2qlxt1:Q??BrqL9w-XVlXKFmHO--ow]RaxTdπU"):L7[gV#KLQA46_WdehOrE,jnXmM8\?/u?Rc4vD*P>RdNqZ:sh8Rbplqire=nH%πU",&t,OdOO3d_D0U_D([*-D<':pH]&+Ci%.eVk%-x+<NE7Ve'a,9mC.vaW)1yA5k(πU"3dC4Kq>xXTZygyH%eya\Y)[bRwoAvI7XdHD(xNzMPT)gN175Fn$9.o->c5Epsv+πU"lN+B%tS6x:Me<lV.(mGgkVu1rq6]M[I9CHh00T_0mEuiZzssl6qJT6h(0.m-u[]πU"L=\tz+\64fCy::oh'i0(ZwpN.YLAP9<9B/+c$UG.j8mG9GWz9k<keRU-[4(5cvlπU"[z?PCFMSh64Y)cI,S0?Q6]jaoKCrIDaJ>;l\;1z%iNjwiikADJu[e91l9e'nf^XπU"Mc+'\[TLRUJjE-i7,hcu'&>sCM?D%jxop\9/EBb0mlDj9M6iNILi*Sq7hW?ZH5KπU"C2.wUWcqt4ZQEv]TpqMF'N'4BO&8*3+G$QOPl&$gqqaU/nw+SUXeg.$5#B*W^g(πU"0-'7WT=:_jXCDnZ7CAy*V8sNSg7u5wjMi:M_/^6y9JUG9Z</Ae)BNXtr%Rz#/shπU"mg+l$c<cAapM'T:I_3K&.Z.XHI$SdJJLxUvh3QV,yWpBj^zi8pSE9jK'RZ2zGz1πU"PB<a$90LC\py=&Ihuxi7ty1wc;?'a489bGA/*;[GX59]C5OS?=rrB&As'qX)\*SπU"Orhk3Z%q\ZhUM-*X)\maApUdymtEQ6]^3vDp\N7i,YZ#*ZG>ek</AC]AAFzUK_jπU"%2xeEdGgT(lAO%6.:ev?sVItNJV&V25RE/qk>^925-Ju)zh(%M8$NQ:'EG^kO0bπU"/P^dc7ule8If5(7]t^9;2V?c1W3<)(0SOv0:d(7/KL^Ae^k2a*p*teAv+(S53S]πU"BlIlNKckb-9.mPL[Bpfdibi,ci0FjT=*q,tiPy+91MIJ<s:eI[Mg*\NO=^uk1#BπU"ZOd5r+cf0'82h&A)MCQVnf:0')x>&[>A:IL-)>#14Z<pdUf>^(_1-/+QPWkI6k5πU"SHT9)W4aCdap5=_9ddQp-#m</wt0.apm#m?PK/TjNtF#S^Uu4*l;],Ts$,sMGd)πU"WQ/D$w^:,D4O*KS$1+Ka>;7+.Ki%,1]nLK_DvD'V'sE-Gj>*SOo=X_QOC#W/Im4πU"Z;-z+gol^mKcPl[%68.'jcu_&5\F[HfFc:'heOjBiuZH9xs0:;o7d'DYFzZPDR7πU"$JTcIlbIr+jxf9I.mEd=NdEiG>cqC1phtoOQB5Ap\I:)dKnu:j=lHTpHbJBW$jVπU"=uU$UjOu7GH:rkx4Z]C8:4Xm-l,$I-c5dZ]&fBB2cJ>D+kgu:Yu<B8IBqd(XcODπU"(WSD..&9*DN'nCef&fsTVK:HGS(X%WS;(J#s&-oSh#TmEMY\R%aO9:c*_dCs?ODπU">/:H439PzIZL99ISA;xE:ymF?0Tf=5;.1IZM4')/p^UIoB=,aF)[NefB+pQ)DihπU"K6'%)&uAr[K+&7#3+_Mb/.]lup=mIBw8)%^]MG0nr)Ut'i_M$$SrY]UU\SJUlLmπU"li[MZYr2RsfLG:D(&fBW_)ZR+,e>,W4D7j2+=Sb1h#p3onAr+nf;7UFcLqa%2p'πU"[H5z=Yt)FN7+j6_QA&<0H3ZSNL-<m5IL8rF+_nV'Mv(<R'2vH8-1+/FlZ6dnp5;πU"fm9i71)de)8_DdTSUUkif?OSdQm9:_0S:=GS]e3q[R]e'f>7h<EVAo6$ma+27A,πU"T5M#hf[l$?a>_jCl&l2BYtGP+e'vX&AYvHupixTOa.U7P[KK8%6n;pA12_,ue3(πU"g*LgW1To[K1DH3Q^YOi*=V7'_eNb/3a1$#[+?WAG**d,i<m7&J&Tt[J[c[:Z#n?πU"5ehkbu>6C%AN,6q<b6&9\JtUyY[3I)/bX5L#ek-dU>B1r'M:6<e'8&..N^Y2hf6πU"VC>^Re9rDNh>_1s+VNlqiJa:4YQF62?QPiW,hGDl)_CxlBZP-Q0uRbfnpg:IY1JπU">kgl2]=cA=+IP6M7[r\0I9BA\n=bLDPhoW<hRsXYE2iYkEwF6#OR][/qo;Qt\BIπU"xWl1?:27QYJX-,QvSv:/t1k;FB#>Uf+dK)W27rH$>Y%_uOk0a&g%=HNkl%%BhfvπU"\ZCGI0Jrx,<=s#.d=q<DS-Ex3b$2p#76Wv]'82KLG-J?,GHVYe&d7kdg+>Ey]evπU"qLoL#TEb)S'XjN3h.98yZj8Vi>%YVq'k#TJ2[Bkc3:T-_Tl_O,QggP\0kzLExhWπU"GQJcUf/[niRS8Q,4;td0*&v4.mFuoN'o0-ykI]JR;t]0M0'I)HTq.1.)22)A38oπU"moQ(:,X_7McT8fUQ0\w]2<t7[oVUsVNmf4F\4Te4FmFF?J54#s+&1MH$kK,bK#7πU"Q_x]r^n)K1u-cu,JrrV*BTN4%?U&<;bl2bX&UtkV<,\,q<Ja4.^5Es\)W[xK6#_πU"j6stR5FuX[0Sqqki5MPVdFgi+Hl&s=tpZAlO2Z-j9Vf,a=MToRsTFDqZ+]('/f2πU"+&0MabsBm,E4\K$G#O?M5KqeXJpiHvDJKB3M;oD=$I/PNE%ZdMPJMqSX9,.t4X&πU"puO=HIInu&W=mTI;W-kKYv:byi$LM^0b:lq;/;d.=eZ/2nuH0ehd&=&[)$)_E1,πU"9\D_\D*#vWGurCSJ,GE??4^oS&H(kl%J,da(D8Y<,VDM+;vPz8VaLTylZ<g^2C8πU"N5iK+g',S;,K4rL,o>cXFO8yVz6tMeGkNW[jc#6%.eHi)m^['B+69NagK$S+u^#πU"+%/F:60mR6:=FQZNuxZ2;:>_eros^?(m[_?(BQcM3$?^1U=m)F\Af)eatiObEI*πU"_26PKLSK-7MddVK=IuA1Vi;?>P#v;Uahgm_mMWr*nbB-al7^d,K,6(\$3+6AmI^πU":]]9Rq\MtX1YrJn8[a3JEpY(Su39/6eNEv=u,?'EM5l<>'Xai-#'&>BUpFlOtK7πU"kV4J8O\b^mld?4mJUZ,[/7Z/#%s&0;hynvV]WSE1BF/Z*?/.<BMiak<ng-3*bSJπU"cIun*Lb)r*9S-tM[qfcl3901$]6<mT&$RY8rx1b+UY9oY>'uPI-H7#9]*->T1.>πU"eC3+?WGbD_V+vtW_m3Z=Jk'j(c:.?\R(t-aOMepcJ0E27*Zva4-;[Q87a)\Ks<iπU"FkB5#aGELuK>RAPAO=f=4&1]*_VZG&>5\HCuR=mA']M[m/A#8pLwap>1DYW/m'eπU"sgQLJ<5I\dm/[:/jTkVrL*-RJonUET6LrNY9LCe)qYyE'_5n<$\Sis_a;=#J36wπU"so^QjA7OW(xrkM:LO3L8KyA*q+[cCx?i%0UZQ]C%PJ_>=5](idvg3HI)r7pCW$mπU"1t$;\?<WpD-s]L6p7_bIJ#Ly=e>jk6L35wQmes_[$0^n7Bm(g(R\6FEZF3_iYvvπU",6HGIb>d$BD*V)7Rbb-^1iIiEE<ND]_p;6wD1doOE5Otnu%p()9%%%%-1%o=;IFπU"i3g)K.%%+%m%%%%0%%#%sj&%qnsj%SsWWC8050nO(txs,YesKx4Os-ux+E?sxx(πU".i;WE>;d8,YOap.b)*RXbQQdXMM/Y0i)GH9?Kl94'?4q0+=%H4k'*QQ$EF=%RsCπU")I^.1(N&*UC%[G-#RQFAMP't6%u%p()9%%%%-4%==;IFf$/*eA%%+%m%%%%1%%#πU"%sj&%qnsj&'SsW.W805_0O(tox,Ye-sx4imh>]xR\%JzRzD-%IZ%4PNa97Ph7wRπU"v]X(emG9>+o?1nx(LeC$yl[//jR<ejN:2%(4G'8c?bP*euhzRLe=&tI(#T=[7tRπU">&9T[Enpp,;:[)+z?EG=w?)GOe<3%d'%u%p()9%%%%-.%B>;pFIM3&Vu%%+%m%%πU"%%0%%%%qfs%lgqp%SsWWC8050nO(txs,YesKx4Os-ux+E?sxx(:mev%j5v6xT9uπU"9/D.M%Wli*$NpXO>*N+#x0C,jx]6G/2c^%CI;1b?Ed/QRNDiZ538-9v-%%up()%πU"9%%%#-%a>.;F-q2'i7%7%%m%%%%1%%%%qf%slgq(p'Ss#WW80150O(ctx,Y?esxπU"4[ih>]]x\%J\zzD-n%ZQ(#d%i&&(0ip=BeD4F%JPu:2)8?5O3O-J,A(L(M'aA+KπU"wDn7aA0]BIAJg7^elh>0[x435)TF\MDOG$.y&[6_(p*$AMfo%H%up%()9%%%%-%πU")zE;FNwNY=%D%%%&K%%%%1%%%%mjqq%gqfz%SgqpW\6Y6uqx(w.4(_)#f++J=MFπU"9,5tRwqRXfe:&/'%u%p()9%%%%-4%<E;^FZ7V&)F%%(%K%%%%-%%%%ljq%gSgqjπU"p\6Yt6qx(Twtvnuxxex'v,h+7cMFk)4i.g[\Ufe%(%up%()9%%%%-%*TE;FZMnwπU",%B%%%&K%%%%0%%%#xhm&.fw)S[gqp\P6Y67D/1%Qcxx=9'9CoX0if8[+OLq50tπU"?g%%up()%9%%%#-%TG7;Fq255J3%7%%m%%%%0%%%%kf%wgrj%wSsW.W805_0O(tπU"ox,YeHsx4O>sux+sEsxx#(i;W+UR/1:,Oa&'<,C(++>2,s9QIR$A9=Q:=CQ3$aKπU"$i1+hl%pzru$]9(UTeU>3wuXXQRVNa:=9Y,4FpDXFxs&FFA;MPt6%%up(%)9%%%πU"%-%p&G;FjJ'[ap[%%%m%%%%1%%%%k%fwgr.jw'S%sWW8J050O=(tx,uYesx%4ihπU">-]x\%*JzzD*-%Z%V4Pa9M7P7wU(Sv9fN+o1*Oy(e2COpeu/M:mod&Li%(4=[laπU"f9IEWDe:#BmAw9WYm%m5&>.oOZa&p$ophK96oGi1R<q=&Th,\-MeFlJwFY&O(mbπU"duA7wX0)rE>z:o+CGXPPZ=fPRr>,:gSX,4VS:(Pyg+Wj8\U;Et4*R^%%up()%9%πU"%%I-%OGd;FpO.J5O%7%%m%%%%0%%%%Ws&&qns%jSsW.W805_0O(tox,YeHsx4O>πU"sux+sEsxx#(i;WpE;d8p,Oap>.KR2=1O.,]%p4usSv9ikP:9h4&D\,JMUM/Wo/)πU"[:a/r;N=570B)ya/.:.1Xf>U'5:a/b.e5T/)e]a/>L/%NV?:c]&hzf/n#11;[^,πU"O-;^kEX+5.YM)%%up(%)9%%#%-%h&G;F(A)P]V[%%%m%%%%1%%%%W(s&qn.sj'SπU"%sWW8J050O=(tx,uYesx%4ih>-]x\%*JzzD*-%Z%V4Pa9M7P7w>RvX(jem9>p+oπU"1nBx(eCn$1j(pE#T(C,-U;WIMN/lvtOn't(<=70i(_$QeC)J^*X:Wv:)I>L9sZCπU"m+AwOcoOLCM'b''U/Q3aYX[mJOR'k\:z(=*F.h0k_vQe%l%up%()/%%%%%%(p^\πU"F->c=u%K%%%%K%%%%0%%%%ytjy%wnxS%gfyeM#10BD82TA)D=Ei(_+UU#]ym+%yπU"tjy#wnx+%ytjy%wnx2%/up(%)9%%%%-%u\U;F'Vcn)(%&%%Y%'%%/#%%%(.tz&tπU"%sSsZpWDKF+s;e54%YxJ$/XI>Cmqk/Vd?i7aaneqQj[:/DKXCW>=^96*XO\F#hUπU"FmBs/0gKM(X:c1Mm3rG=ZI;RBQri_:v,6,6TW[M8-29QJnWd5BlbCXm\kIN:5E>πU"&[fK+eLX[VbWVkLr[Xd#Vf4T66E-^Xx?]RmVn?:>'0#b-+O=73+8^q)_hc$1;GYπU"f1$TScAS;K3W-84Kg&V[n20:LPsV9&.M?S<[2aE)pJOh9>;cI?Rq']EEJL(*t5XπU"\:#^JBqBZ=EQHm(Q+<%Xu,l;rnQ=h5L-#G+TN(E:Xc2q,B1,^k$xFEY1(x/JDL9πU"?beVFZ3?c4F_tIwZ'A[7e(FjgQX4)b<.QS.HA\])Q%B/>0n'h/,y8EpZhJ+OSq)πU"W=q5^AR2fad[amXB(C5T4-YWR%>C]jPxY6Vph97,Sgt8eB\\;U<rYJxhn'q(up%πU"()9%%%%-%)I%<FDRZ?i%o%%%&K%%%%0%%%%stgq%thpS[gqp\k6Y6q?x(wt*vn+πU"KEtNEG2OPP4O)xN/M/2/2>>tx(FilDR9I7HE--Z\-,<52gDjjf7#$MRbDUy4;[3πU"8-w=,S=%=)xx&%%up(%)9%%#%-%:\&<Fj5wr;w[%%%m%%%%0%%%%s%tgqt%hpSsπU"#WW80150O(ctx,Y?esx4qOsuxm+Esx'x(i;/WE;0'?(e)&0#UAOUqO/a#we)D\4πU"5;#X$IE7>7t>2Q<M1Cn>4E4XZEFT4&R<$A=ko40U^%%up()%9%%%#-%+'#<F6/3πU"m+A%7%%m%%%%1%%%%st%gqth(p'Ss#WW80150O(ctx,Y?esx4[ih>]]x\%J\zzDπU"-A%Z%4PPa97MP7wR,<a&E5I.9(juU9N1&z.u>#LI(_uN6[cOt5[H_n-#$4Nm[oXπU"6[orh_=hLGhR;iw&gq'c(e):6V12XMG.ys&[_(Sp*AM+foH%%up()%9%%%#-%W7πU"R?F9*-+Dk-%%%h7%%%0%%%%yt%jywn#xSy'k.&&F8=#B6]74Uh4u;-iLh11J3f/πU"lhIgn2X):Xw]nc*aOZ]MECHQLHCEpW3>:'CGnkfqloFFuKxAyCocT.#]/p'cbwYπU"xscz?Xwbl>MK]LNq#n-HUeajar#^eK<vEEfw^j_c\l.haD/\x5A3y(Z5w^f6pi^πU"sGLrgZ9frdyZI&v-jA9^#<p2Rp%8=ts:kv,Yur&xi*[G%lSrAkZ2#EiKe9%h/U+πU"Da;8dKl&B]\?\RS5L37flJf37?W[7r/S1NQpbr(mj?Fft7kk^GGHrn3YF'*aJVBπEND SUBπSUB V2πU"=t'#<Gq]mHWA:^?FjX#vWf)XWp_ej2FZ_;l1LirwM)j1tqL?3PQ?[(ML[T8eTHiπU"_d)E?\L;OlnG<dYEeeVC=Bb.+m;-7K.g$1wnGn_*vo%HdT>PL:8iRANIZI??4/bπU"t*E=JwRQi6tOC&e0q;TGtLCpD%P;E.X43b,G%B50mzNJ:r%SRm20,]eWL.:$3RwπU"TO'f/^,3Ev9WG$giWOJ-K96y-KYi^WMVi;')T%#-JRu5jt=G>x9VcC4dhj[KR'KπU"J<=BZ5S<j&7T2E/qmDD4iAaUV\nNniF2F^hTc-HXI3Vu;slAUobVk\CRD%LJ;seπU"UF]_-JTZGa+mCzlYQR6mN<t1GjP-e/^VM*UU7(;O4^o?6f\owd-fv%i24x[F6r0πU"<(IR.sn+,S9I=e4?NOW^bHU-:K9WLs_O+0aG>YylI_s8]KKpUHud'jaxAD_M106πU"M9WyWSYI$Xmmied1d1LGMpKJMXrcC[V7QQB&-Dd>j,1Xq4pb7a&$j#X<oA,-]Y+πU"?:J[nLSPB.\i#7kd,Yh*gCTZp4Tr_,u.?]70n)Hh&a$(?kct3PhGSXgLPR;pUFaπU"UReZ)T+;([N%_jOk7_<Eaa+bZmD+e[Ms6*Vdw:j>2w<mCB-D3w6pz3N)4+aeIO/πU"1R>\.OmcKiu%4Y)pQ(v&4U*aU8]V*lKu91;rDu?t'>X?B1FtNQWrib%&\3Q]d+#πU"'[1y1P8cZ71)6K'O#$P%36HP0G*q]%QdHON7Ddm8Cn#hBIEB2CBoY>REim[fnqOπU"?aRmFhghifehn13^lR\[vUXL;=AWgD7RW_tb#Pf4rfWd?4,,X&O/0W>PnfhU1inπU"YObJZgu\k724NR#waoQoF,SJoQc:<Rnk+x'^BDSKuGbPJdYFQ11L=b3Th]hL>_9πU".j6DBVF?aOS/PDwzUS+X6N3,vS7RlEXeXYW0k]\k#vk;55JzS;(Zq?\ab_/8UiaπU"Z2*GB4mEdNOI*dcUA;KS&bp\rDob<lA,+&1'at5P3>fCY.7%9>cmf5'o1m)_iLwπU"a5\WSra7L>)<gT#OQotjFth*fpl/zF+[f+ThVHh'$E=eDBG7nn%bmNu?07uN4K*πU"S\&t,WA<',rR)o9hH'L-_:81)p[s+W'l981R+cm[IUn#/'6#C+U%]p#].fqM7TeπU"w5bSKDmp+*0'tPo+#iZ(E<dF6$:rmwL0]6<72/ikCLYRPb\JxWPI:7&UAkbG7HJπU"R^F6OQ0'_*dKEKtx_?3f_95QtDBvSB3TE^vB<R%APClX,[ck5&1]+bXS>b4W;QMπU"ci*-)0fB6E)0LEBX8N)7mT2x[sN%pLLIo9W,d8/6^jkL/UKfATNJEX^6r^4$M?1πU"L_7C3)4q?/S>mWWD#BB6P(9hphbu<Z:act<wrua-XS+EQ;2ZdcT$jvUgLDsch*;πU"0w2xM;/YwOd?HGX^FHv],vcD+K-EManUpYmZ^Ypf)lw8L4njb]vdQQ2T:sR(<c4πU"O,Cg(12/CGW$4kA<u]kemHui8kh,MRJh4Mk^JVab5sXA,jL)EEEoKIL/Q%wWSKEπU"T/]UM$p'*QtQdJje44NUvjRUH;SM_sSoHs(p\+aZKcsm#iPgjKrm_2PME1eLt$?πU":H#-4JS\R8m[cBYn3a27?uqn]njU9&q;ei$ZcuMpgOcaAXH&'$G;JrnTWQmADAlπU"r6ExhC[,uR)3hSz<bm,t#0WM7#eE%)NN^J&O#*6ArL3;RjPUlv>8V32_31%OMX<πU"md7DVvYG$bdPB4O9WQ>^2f'2Hd2mW(fQar&1*AUQedz;4A2gaGR44bKeWR^,rbfπU";s(1#GM4bH$^fWyD2s=2YqQfa/OhQLiJq[-JoPleYb^UP?q#3=ai*lR0K(CR7&2πU"Sh$?vp]];j5LmYBedvQp/YLbx0^ouvQ93:+-ljF>f4u*R;Kf%U6xl-*#oBi*LTUπU"i-s\,Y.1]0f*iw.),FA;pz/bLN(Vn]X.SqgnS?lM%Q?7z*jS%,)+3\RJilmY)/:πU"G.(#m?]=cxP(CqmE3=GOHK/JCm(Dpp*5V\:kDdd8eC6tG%DmmOjY+($bYJ^j.+kπU"hB'^ugf+\'rAoCFB\XPEETZXiu[]%2s<=5(2^zafo8a9:V:t,XeX-8VH+TgsVp?πU"iO9BbC#SXfT0.W0XNxcF]/;_R\SNCgBhFE^(gjhx2H<l-%gaN+kpnA(ABRao-05πU"d::aPdc55MX^[Wu5,^t=RZ6tFH0kW92)2bK+bPVmd6MU<FC'VB4d(78$JaWx&g]πU"3Da;pZiUIPm,Ph5^P,Y=k.U3DB/C\?6D'_dbBmCVZ)huHhkaTdL=[*^&8Gx15kNπU"<h3_k7+8bK#sgNHG^o:2ZvrH8ksiFjnxR',a[:K-'zt<qoXh-K'Qgl1J>?</'5mπU"c_>j^e%e/;Nu-68LfmNjxx,.P517jFrMcJ-Px<u%p()9%%%%-1%]4=LF%GC*t9%πU"%+%m%%%%0%%%%xvz.jj)j%SsWWC8050nO(txs,YesKx4Os-ux+E?sxx(.i;WE>;πU"TX,YOah>k1Ru8:5;<D7-[\4j+1hAr[u(9-ePD=IG=;-=D)nc<iVr(]<'+T]a([EπU"7E[\2:+jL,AOwE#.++oEmiAFFiAMPt%6%up%()9%%%%-%)w4=F'lW\G&J%%%'m%πU"%%%1%%%%xvzjCj)j'%SsWWC8050nO(txs,Yes'x4ih=>]x\4%Jzz4D-%Zg%4PaMπU"97P7qwRfxR(em1fN+_qBh(eCdZ5n1pNa1npTS1aJ.,oh9(U=6$cNZQf6c/xcs9:πU"?='J(3H/j,;T<45/*So2;30RW(Kf2VYPB&9OQ1r:7O&+._'v-%u%p()9%%%%-4%πU"h4=pF-aL*j.%%+%m%%%%-%%%%zsi%tSsW.W805_0O(tox,YeHsx4O>sux+sEsxxπU"#(i;WpE;l57(emb+4Es$m%iXL?9e%(+emb0-EG^%4iXBe2;ZF,>Oa#$hCB_R%+DπU"4%3JV^=6_\/H&zl[,ZRFAM,Pt6%%up()%9%%%#-%,5I=Fbv3M12%7%%m%%%%.%%πU"%%zs.it'S%sWW8J050O=(tx,uYesx%4ih>-]x\%*JzzD*-%Z%V4Pa9M7P7w;RHvπU"&gEIs.m&IwgI%5,Df:L=t]x%56b'.&F7A-t:t'Ucp7&E35sm%rAZcZ_?i&9O13rπU":7&i+._v%-%up%&'9%%9%%%I-%B7I>FCX*.BT2%%%il%%%0%%%%%%%%%&%%E%%%πU"%%%%%%ytjy%wnxS%gfxu%p&'9%%9%%#%-%)AE;Fx')KvF#%%%K%%%%,%%%%%%%%πU"%&%%E%%(%'2%%%wty%Sgqp%up&'%9%9%%%%-%)PE;FnwpR:%C%%%&K%%%%.%%%%πU"%%%%%&%E%.%%m2%%%lw%zjsS%gqpu%p&'9%%9%%%%-%p&E;FH/Tz*I#%%%K%%%%πU"-%%%%%%%%%&%%E%%+%\2%%%gqf%zSgq%pup&%'9%9%%%%-1%^E;[FdE0%8Q%%(%πU"K%%%%-%%%%%%%%%&%E%%%%R%3%%l%wfzS%gqpu%p&'9%%9%%#%-%>\E;Fx;SDwFπU"#%%%K%%%%0%%%%%%%%%&%%E%%(%N3%(%%nt%qjyy%Sgqp%up&'%9%9%%%%-%%niπU":F)=I/Z'h%%%%Y'%%%-%%%%%%%%%%%E%7%%B3%%%yt%jySs%ZWup%&'9%%9%%%7πU"-%0i#:FDD,_DH&%%%Y'%%%,%%%%%%%%%%%%E%%%'W4%%%wnxS%sZWu%p&'9%%9%πU"%[%-%_\P;F[rf?.t[0%%%%1%%-%%%%%%%%%%%%E%%%%K6%%%kts%ySht%rup&%'πU"9%9%%%%-1%o=;IFi3g)K.%%+%m%%%%0%%%%%%%%%&%E%%%%l%B%%s(j&qn%sjSsπU"%WWup%&'9%%9%%%R-%==#;Ff$5/eA%7%%m%%%%1%%%%%%%%%&%%E%%%'HB%%.sjπU"&q#nsj'%SsWW%up&'%9%9%%%%-%(B>;FYIM3V%u%%%'m%%%%0%%%%%%%%%&%E%.πU"%%:C%%%qf%slgq%pSsW%Wup&%'9%9%%%%-.%a>;CF-q')i7%%+%m%%%%1%%%%%%πU"%%%&%E[%%%]%C%%q%fslg.qp'S%sWWu%p&'9%%9%%#%-%z\E;Fw2NY=D#%%%K%%πU"%%1%%%%%%%%%&%%E%%(%ED%%%mjq%qgqf%zSgq%pup&%'9%9%%%%-4%<E;^FZ7VπU"&)F%%(%K%%%%-%%%%%%%%%&%E[%%%8%D%%l%jqgS%gqpu%p&'9%%9%%[%-%T\E;πU"FM6nw,B#%%%K%%%%0%%%%%%%%%&%%E%%%%+E%%%xhmA&fw)%Sgqp%up&'%9%9%%πU"%%-%(TG;Ffq25J&3%%%'m%%%%0%%%%%%%%%&%E%%%%qE%%%kf%wgrj%wSsW%WupπU"&%'9%9%%%%-.%pG;.Fj'[)ap%%+%m%%%%1%%%%%%%%%&%E[%%%R%E%%k%fwgr.jπU"w'S%sWWu%p&'9%%9%%#%-%OAG;FpBOJ5O[%%%m%%%%0%%%%%%%%%&%%E%%(%sF%πU"#%Ws&%qnsj%SsWW%up&'%9%9%%%%-%)hG;F(()P]&V%%%'m%%%%1%%%%%%%%%&%πU"E%%%%rG%%%Ws&&qns(j'Ss%WWup%&'9%%/%%%#%%p^m\F>c%=uK%%%%K%%%%0%%πU"%%%%%%%&%%E%%%'wG%%%ytjy%wnxS%gfyu%p&'9%%9%%%%-%u\U;F'Vcn)(%&%%πU"Y%'%%/%%%%%%%%%%%%E%%%%rH%(%(tz&&tsS%sZWu%p&'9%%9%%#%-%IA%<FR/ZπU"?io#%%%K%%%%0%%%%%%%%%&%%E%%+%GI%%%stg%qthp%Sgqp%up&'%9%9%%%%-%πU"):&<FWjwr;%w%%%'m%%%%0%%%%%%%%%&%E%%%%fJ%%%st%gqth%pSsW%Wup&%'9πU"%9%%%%-.%+'<dF6/m)+A%%+%m%%%%1%%%%%%%%%&%E[%%%5%J%%s%tgqt.hp'S%πU"sWWu%p&'9%%9%%%%-%W\7?F9>*+Dk%-%%h%7%%0%%%%%%%%%&%%E%%(%'K%%%ytπU"j%ywnxISy'.%up&'%9%9%%%%-%)]4=Fh%GCt&9%%%'m%%%%0%%%%%%%%%&%E%7%πU"%#S%%%xv#zjj)%jSsW%Wup&%'9%9%%%%-1%w4=+FlW\(GJ%%+%m%%%%1%%%%%%%πU"%%&%E#%%%)%T%%x%vzjj/)j'S%sWWu%p&'9%%9%%[%-%hA4=F-ZaLj.[%%%m%%%πU"%-%%%%%%%%%&%%E%%+%xT%%%zsi%tSsW%Wup&%'9%9%%%%-.%,5=gFbvM)12%%+πU"%m%%%%.%%%%%%%%%&%E#%%%S%U%%z#sit'%SsWW%up*+%%%%%%C%C%&e+%%%3V%πU"%%%%πEND SUBπV2πCLOSE:IF S=75AND B&=Z&THEN?" :) Ok!"ELSE?" :( Bad!πSUB U(A$):FOR A=1TO LEN(A$):C=ASC(MID$(A$,A))-37:IF C<0THEN C=91+C*32πIF K<4THEN K=C+243ELSE?#1,CHR$(C+(K MOD 3)*86);:K=K\3:B&=B&+1πS=(S+C)AND 255:NEXT:LOCATE,1:?STRING$(B&*50\Z&,219);:END SUBπMatt Zuchowski                 HELTER SKELTER V1.02           liphilli@flemingc.on.ca        12-15-96 (15:30)       QB, QBasic, PDS        750 49623    HS102SC.BAS DEFINT A-Z:DIM SHARED K,S,B&,Z&:V1 'Created by PostIt! 7.2πSUB V1:OPEN "O",1,"HS102SC.ZIP",4^6:Z&=36993:?STRING$(50,177);πU"%up()%9%'%[-%h4/<F4p5u<5%%%%X&%%%-%%%%yn%qjSyRnq>^/p6OU.5)n3%56πU"9f[6NF_)LCI2*ufe.'ayf.%=a?jX(Ejh]E%?<6FGXz)F6\5*n\Hl4Z90R/g2/6AπU";'ZO\$^/5L&ScvKT,IKksXKCt9e2et3o?CV46vtlMSfp?#(2%%up()%9%'%#-%7πU"$e=FRS2zft%%%%X&%%%,%%%%un%VSynpqlG*,\;e5kTZN6nU:;Aa.:n/&?()m'=πU"e(L4o2bS<7/CE(eq,OBQ3MUU)_f4_6#q90a0mKhgH,l#,pX6-GtV,Tq?+<ApspnπU";ApE\SrbRHBQ\f7=I_j=HP<'Bc<vMtH9oqNbddU68i)UB\)z,*_&0jMNeSZ/<\&πU"OLP.uJASqri(Q^BWyFErqNN>%4OXW.UuI3s-(^$3?V4vb$4'$.up%()9%%'%-%0πU"&f>FY)seU&^%%%%X&%%%,%%%%unWS#ynql,]*2'#V1j.6Ab]'.Jmk)^*_*QDOU.πU"'ePBg982u:MoU)%9%3y9e\Wh/'kp9I>qbthh*$34PZLKkJfE&5>Tf(_.%cOy38JπU"Pt5\TEnc,i_*pA,KvF'ccOYr^W3Hjjpkn-K4XEi*],.3aI=wMO8cpR8[QcF$<NFπU"hDSz)s8?cFs*/2dhwKMq,:Wup%()9%%'%-%1<M<F>+$'z&7%%%%X&%%%.%%%&&fπU"qq%VSynOq6]p(2Oe1+jD+L'G8Qf8kf<-=-cJmaK1JiVvzQO_]Of,.'0_g6K]A'YπU"RZ^ZNpjYN#:8ed,()56%^6$2LvWH93sbZd230?Jn#H5C-_:E3Kci5snoc\XtFV/πU"pc'?[VcucD2%&up(%)9%'%%-%GDM<Fm&p3wi%%%%X%&%%.#%%%&%fqqW%Synq?FπU"E&2B9E9T'JlJ/9:'n1o:-E;+')nl7PH5)'Bt55?1/'\plM2fBoik7EKSPlE0+<HπU"7j1)4#TDti]%x=u?rxD+%up()%9%'%#-%P]&=FTa0p9p%%%%X&%%%-%%%%un%VgπU"SyRnq&]9*2;UI5jn2'9jww7u)+%#*7(3%&)#U7'mMmYkabx\/,Ki%+1h(7w7\pQπU"KJAIl>8b^?xc\&W_5EgKXV&gQmR%_o0lX_#qVPUD:alN(TQum$Er6'SP>_\fTNuπU":X[161*dMr('<4yoXC=7S1*$q9YmKneGFHN%dk(e:5626e&3?IneT)JOAN+<LKeπU"_V\_C(B/c&urr*LK&u%p()9%%'%-O%ORLsF>(7%Ix'%%%;;%%%/%%#%qj%%jqVSπU"[ify>M'8]z7U1wdZKU>EbWI$xHBWqp-'P]e;s$;wk75KWP8X.N045nB[0m9]JN;πU"++pd*spp<,XADZ-9gqJJLUkr$A:aFp8WgQP6L:Zv/'0%V]wL%0>zOQ;#k3(0lIJπU"%+_f3oUY9tJ]&1[.wm#qRh1a\A8i'6iDw$%NQ%R?JB=sAI$kR4)TPlJ)EO#TQj)πU"Sm\?9Ft'w-we8%3V*,?C%Lga)CI\%r+7m+v=L2_>q04A_#%P5x)0x$q5JC[8pUgπU"ZK?L%'jb1NPtD^d7'T?aGtmA;wo+RpkBaRaY)4R3'FGE^[%bFK=,$&1o5jbsowGπU"&:VWeO\]./$QSpIeT%P+L:PSfex&?:sP_H\0-JC%^SOSf8IuYo$?qUv-)#F\ss#πU"LGCnr'q-Vc1P(u'/x]Kp])ISMy7jfbta$x'&+m0*3gpqI;?kvD;fd:)R[\AcF:MπU"u4tr&mdk5j]uMx_O6rJng3VZ#k>q,J2P,2/ZYGcg,_#Fhmk#U5JWw%B?TC4JY0TπU"_om=oggU>h,sz>f-M:;-eu=mtlW$eTDnu1[\L^Nyn;OA7,mX&'qnKu]hFW2[hO]πU"ibnpT,?N*vdii+45j6C&Iin+N*UZ;sPEoue0C,<.L3i*<jSXaiNV)(DFLq*P*MgπU"=(m$>Wwi;#(:]g&(=sVZ6vxvabTOE:l8lOKf^Kh84gvj45d]ll6:=iTfF6PK%V=πU"qU.xe51)r&M(T2i.86]Btvdhf8Vh&Kru<p)7B_hXUghJe]C450It,]xup%()9%%πU"'%-%1iM<F6Pp/5&,%%%%X&%%%.%%%%qtty%XSynsq6E*(2OU1+iJ4.A_'FY[99YπU"mL9c[b#6583<-[;GLm/bQI&5v&qk<B$Q-<+GIaDsMTns#-Y\I;qA%=Ew[r[[:HfπU"9+i&vLNKB_t+yeWjcY#73vbYZLL.'2%up%()9%%'%-%1]M<FPeSsA&I%%%%X&%%πU"%.%%%%qtty%WSynpql;*(2Qe=O+I^_%5PPgmjIoScS95m+[x'I<?e;#B:6APR/$πU"1Ss*a(2.*q7rZ=QUfl4Sf0?g(9FCo$'jS/CEQk4iwukbo*j>jGhRaT*67U9\_tWπU"f6/zhx(=(I$dy6-#3]0kzf/Vj6B*4P.=bALdWE;-j(Du%p()9%%'%-I%SM<(F(3πU"v)ZO%%%%X&%%%.%%%%qtt%yVSydnqlF0*.ReR=*Y6#Y&j[qTPdM&%QQR[XgkA#-πU"F(Sd#JrU:M]Y'>QpW>o)oZ\aPW.w;>8XedDzwi^L&l$^$JbLHf:c[VSavhLpqMpπU"Y_I<B<xLA\sc?I/dZxyto*8f?RDg#-HMO$4Pex1apT>[^7&20u2I\=_u*co$)7%πU"up%()9%%'%-%1xM<FH-2;m&G%%%%X&%%%-%%%.pj(V%Synq-&Hf/&Re1*BIdz)#πU"*<;+>CP1QH1a&sWEqI:0m-tL'Avao[SK=j+4\&1A>V5a<rhtd(US3BBozJ6*YxyπU"(D1C*qHJ<,[4c[\zj6jmk0tZ0Y.O)FJbKv(3iqU*[eJ?tO/B=H-PnXcUqoCs^I5πU"fEv7=3'*%up()%9%'%I-%,M8<F&45b)K%%%%X&%%%-%%%%pj&(WSymnq&G.V/ReπU"p5TZ0(61/V/\jYel-0'47)'*-K]Q8B8QbSA;4])<a5mb*=nfiF98Ug_/Ddo472?πU"ur7RLnHmvqe:nwZoPJ7yNkl)nJb5$vAapBV&rMyljZ'GQXFZc+4+HMPid,eGkl)πU"L+_:=R4A9f-8kOtnYL)-xEup%()9%%'%-%2LM<F1%<rJ&J%%%%X&%%%.%%%%ittπU"w%VSynpqlH*(2RU5>TZ$q/O5L=AOG#_OWPt#'h6QKDW'E$7<mcyKRE[_^6+x*[%πU"_C+\_g.OG&u_l+QVM2(uh'*#y,'/Zf.O]uQvtLiZc?KUoEPh.l1abBnf3]HvNDlπU"XvghRg0ftF>:Nx$=#xH*fbAm94cc\G:aE7.%up()%9%'%I-%WM&<FN$6)MY%%%%πU"X&%%%.%%%%it%twWS#ynqlb^*2;#U5j^.2QcC:+oA+6-rq^;(AH-0A8'QFe]*oDπU"u1(6#)P8sUsTab-\9RrZqssIfs_lmgLGqV2yqYy[Gtr$D'BTlN_GNC.y<:83Ak0πU"S\1a+^g-BdO*\']nH/QS6G]YY4>Jqo2DvhR=tPSQ]XYx3(ik.&%WjhLrjS5$ir;πU"XwM%#up(%)9%'[%-%=_YSF3$AX5$%'%%-%,%%-%%%%m%jquSCy'y\dzr>T7U16<πU"*aNE/a14I:p[/Q2gD(j&></?#H)VyjT*yDqpP(jsohlB'E^o>%(B1yGSnCXrt'qπU"$3h)-6Dj$QKf<8BAIi;twjoq-w,MMqDYj15.5Nt?Kc?[(IG%M,'CH6CP_Aw#uu9πU"9d)JO#GDZ[;[zu$G/\:/(qP3Z(nRf$^H+d3H_,RZZkm5=^FB-I?Rm5auL3ZPX5TπU"+R/Pk?\4PRr+wk<fDaF]Rtk-?5^zu)ZR7qfB+.1x*8iArImE&];AOU*WCBxGs5OπU">UQXh41.UoA&*:IgN[LK)>'MOe'aW$S1.PJPAqldq>BJYbIC)<_'_-NC)86q_3RπU"^84%P;_#1%F]fXd=>Gmx/36_$JtZ7ATEb:'q0y93mFK<rE8m(T\EYih(,P?0%mUπU"hJE*'k(C,Tg_F9%]r/?n[n<T-vb7a\TTJy9D;=:oCSOk2Isf:>32,*IM=?pL#\(πU"&fX83E7aW%UZ[Mo*JH80jG>=PNMKz-sv)xeaSo;S-furNSSdW(j-*>0]h5bWCM1πU"wb]EPSs^%lnq<E07fWqr(G#Dg)1p,sZfh#)l;=Y2xAta53i<EYscJ51jRr_8o6GπU"5[M8G\>Q&,cAckIOuU%#5p8(?I33;R0%ERu8Tgq\zJq$PX%0<d;2LW:9aS[uY)NπU"B#v6j/OJ]w\R\^NP\K'OCHO+xfJ8IZ=R:pX7E0XS+[j6$O1WEKCh=vS7C#ZKY<qπU"Y,L$T#a=2g$0Km211Vob]D(V_2BI%HnPEi3I3hXF/KJ^+uFi3(l<W66r/JZBc%mπU"Yw^'lhPJ?%::s1mFD3Q$3E+=2&)5<k.Z*&kp=7;NBi2'nx#%B^cl%+->vPpCUPcπU"f_=yYYAANqX_2PJ>Yx&qq/o,j6:qTCug\<J/=_UG'<Mq9&Z=fnNN?JdZq7\C\XuπU"iFZ'x+P[,ub,/&i,/o-8k:B;-B168<08H*A.up%()9%%'%-%3)d<FO62=m'N2%%πU"(,L%%%*%%%%mxSV4[fjf/;B&:PUh3a1qZ*r%GQq)Y73aq%Pw)w1&X]P4y*RigR1πU"RK&%ggg,qf'okySm*'+U776'=Yj_2Z2%%mPz'+.M\J\oyQ)B4/7wEhU9;cMI\_pπU"^LlW_jF4xU^F?MJ=7aq_Fl9FV82n\6xmMclpUBH^bFas3OFcw?l,W#>y*??Y:e<πU"2QWs3DAb[dnW%=[K3>3Dsfr3cPRvauPVCb//kKU_m$.YIt#E_,Kkhk&f;VW'B'<πU"p[d;W=K;(;g^d>z#6[rCKte_%D8$WDL&u8Cb')>%)#Tn3wObb*LrS9[GAz_c&DeπU"u1#ps[jKXGA>r\8#p/i%talHx$K;q=(coVl27^IaV#X7h6Gm+q[U:x2Y[dLUG]&πU"4)ubG9w8yl[QuK\3Wg2DbW?WAsTluo4c-^OTCqln.X0vQu:]\7dDhQK&0h7D6?)πU"D4qs'u<;FA4FMWTrY;mLS%#e^QE0DbV21no'S.3qt#V9C*nlHJS6&6jkq)=;c/UπU"NKcnsJJl3mL;aGKbawJ+5G*bwz40?DKbA)e9o#S2U=ClX89M:8Aha6X^#XO)TY.πU"bKgVDt8ze*t[h&ST(9_D):X#Wkq7^H&4k?u:wkScElICJa/d:FC_AQq;+erw]GuπU"M][A_bpjX,eR_:E/q8I+0\7<9t97[t=$J(UN'.y3C*K<U?-bdi$q7ZQHNv&KY#ZπU"9Nu,;PZmVqUWNY#JfUfrun-l,pi=d+wpES'pl;BcsKms(Z<;e&bkPZYZ+TiN_:&πU">U0J[PPag9YPE<cmq67q#>>P.GB02qnPGksnC*3da%.anSt[hM.e>\AA9tjSgrtπU"k)7\7zN>.+yQ\Y*U7sb=_dS/(PA*GBiU^VwZ(SlXq&B&M6c6e6x.Hx]jt$?;pOgπU"uqYf+uB1(VAyO^tZS#fcsYKY$x9&%k_N^fHQ0UGSm&r9EyF,;TlXIR:cOH2GSN4πU"p9qLESf>n_R(c<KYH-7+<).G0:D%919+RnfXSGCTY^KCN5,[1TJH(z)bCedK_UDπU"8HjT;f>a^ct=a:qu#NZ8+A<3:L-LC+sD'BT./sPi*Gn6BcbVkD6+a>]&u,HJ*DXπU"e)6V+W8<MHpb/m.KhKO*he>cJRrTDoEL4)mgA]5b*qjKXJs+%TQ$i6/csm4hR0*πU"&6r)^+ngJijDN2:F3b^gq'F_h:NXuiv^FCNlk\a,enA+u?eFu.r[Kr]l$ditlZRπU"E,K\T]/wfDi&t%tHIo#I9i>;$Ca<*AQKMaBjv?rTN-<:L6,%nJS.R2Ng*/)h^W(πU"W7WrARj[6wM/S[hj*d/<Ro30,li^+,W9NTp,lK5vSSJIqrZTK<TUSL[NE>=EfvlπU"k?.0^BQa8o7(rmZIEW]]q%;^O(-VJhqT/S4*ODEN_R3u#]yN>F3[jT+Kq?=ld<SπU"$^gS<(Oxs7La8MK^2u)h77tpO+q)61Mqe6+BqsL';LlnXcDr3jQX:Eo#ZZ]Nr_PπU"J=KB;PCA&EX=k;pqev-$l0G=sDeHwiq\qnOx06,,KlMqS8H1Y<#Rnsq[g9%8AdHπU".n*ol[A9LlM.QgwC'aK*/&(5V2\Y:d4SU+x_eDexaBIMMxE(TijTYdtgEW1oS&MπU"3dfZL9JF$EL*UiDNXzDwl1QN?gDablW2>r)VOXA[$QN(Zc<k10tHv;w/[LL]CtCπU"m_;u3x:F$whLK9_rk$jhY]V\-u6]]yQwWlEu&9j>oDXK5%D=^;Ib=DwPx;KG\F4πU"g]f(p$KkvCz=t%SKxU3<YW=[RQ_DF4%Z&Os\j0;_+ps%rx3X#T1Jl\<];?P$.[rπU"mJfCCADma:bYYgpG3]dPHZ7)o.;'[jFo:j-;0jLKNDM]7dtcsA9KwAr<?OFO_3FπU"KLLlv8GAS*>l<NBm$1KEzmDjiRAb:>(XN60Zq7\v[qsgJedClc3q\'v2,bWfq65πU"<$fci[HB\RUdgHV-x/]b'\F;])a_/[Z1/JJkCSVxq-FLw48x0RkQhkfm)Fke_y(πU"77c7=:qH'=NAG-)vyBtkjtodLqTjpEV.5c374_0)6r&u3iJtX<k&GcwUo%FnxWaπU"4I:[G35VwG)FmcZ54-74jt7s't]*]-YLtuM:bbX.AZGO<<Y(:b1Og=5diP&\KmKπU"e[s^-*a3>jd(A]q*R<22AKLC98RsKir5\8OOrx(7PWR(IT5N/KBYSV)wtCaA&suπU"F0beS4/EH#dH$Ru$=62nY>5B[yKZj:4;;\KfL($q',7/C?K^cl2Nh/$ECQ?wtdLπU"0e5SzhPkb=/4UY1nn\rq:[R'zX1x&#:V,d/i'52ijjSB*68Z';B/8BBd\*T3f=DπU"AGP)RqNSjI0KjI0>QU]S(RnQyu#F_Zp%Z&xA\ZxG:Nqij3Yhr9+eN.L=lK8<<I%πU"I,n:B&K]m8zNZPdPBi(tx-GZ9862]cwGkK:cOx_A8UGJ-tK&D,Q)-+4v_$AB=vTπU"RUt*x<hdd]r&KcFf,&/W,MK837s:\+h#7#g+LeTSSDUkLK*ON>NuJZqT.TPl;UcπU"4rauMRsY9ulWjnJR=.FWKAYlH9[rmtLU9?>siS2=hyTgSKu_<Dki>?ijwVYWewPπU"/3gw0HI9e-tZG8;l4&lX)cDB9kwvqSQ5,O&O:llNMtC?Mb27[kD.,DWQxquYgt5πU"cr>Rq;x$4K>da_a-Roqx%9KB*.B*a[HcGX/f7KHnd./MPK^YyKl*t+XTr(:,,\jπU"Y2xqr)G:pl+(rlh*UJsssq1C>*WnDh.n10';^M=H=D^#7FJwXVMtTq'c?]jNxhDπU"Hi5cjIc>n,g1o*+Jo(z$ERBcq^MIRG<S7mq1ZeMY*i\jWC\NZDXs='vLR*D;jbFπU"qJDoPX/?^qgtgB6]tj5%:>DQ=iC9*rI:D;FKJvB)\tL=81iDNqqi>kx[Z2GJ43vπU"=3:PZ6*n.?\0&0X+w><0XDd9FfR*nq+T]p=]_01GpaEv[*7kT=TC)\%Twph=9d>πU"_h*1hO4mVD$bVkD7bod\_dt(7I?enTlLsrXk&;hskD$'v(i.F,)c9XQiJj7dBOrπU"r]O#^3.Z8fa*pl\Qp(bQ2%dKBI5c;cLJWj;E0rk[40D[#Utk:oT3s4<7lXS9.OxπU"V0X9,O02jTL)RSgc)yr*C$TeDPWpdxuH]6)=N>O>W%<zo,onXo%G_/q:*fy&DT0πU"/M#/I/FRK1H9p[^-_mo7bZ\d)A-NOZX#H](hSx5Ba?/Jm]nImmJYD>V-MBPh)c#πU"Q\WTa8l\u&,<L[?bRkY*AKf\z6r[DN8q6,fM]CS*>_BlB.)Dfq-jK;\,+]:E7)HπU"0'Hbb)6-3NVco5f=F*Uit3n;]%H\qEIb#7N,e/?Ft3U),7Nc]?eU#?i7Krs-iZPπU"uUvY[tW7lJ8KX*bx]e[)Qd#q;mZppX9FBjG#:;6F^GT'%::D\+4)M'F>0?kfr34πU"+jWc1JukZegtU(]+J'*L=2&?Mkuo\*1XQ^YYN->.51?J.u25aUz\R3&R3.Kx#o7πU"m[cY(%KS;J:QreT4.Yu8q^6JKAC9jsW&,nKRd8F]&h/KKTWp1L.^0-xrYaU66ONπU"H1vx7kzQEN:]nU]W%*7E#K,Kee:\Ku^?_Bp=9X6FLLuy4MU7%d?17#.5S#,=H$tπU"KR6&hK3GA23]sBjf7Y.C2;LMKKz437TBu72*q'\q<1)<UtR/sL\)#LTu]frJh^8πU"Ax>wSkUXvtHUjGGwNRwDlfFE$qc#7ehbK1/N#1R#W'tKMH\.E9OlvSYtS^Zb+ijπU"\GKmI>Qok/i.#zeTr3UHeYTj.sGkI*.3^kYthR>LPUNt]dYjk*0Z3fdEtb_D?lWπU"(673.9ce70DPRusvhZg#JN2UD%j\?r(wst)lrPlnXMjkt\K,.O>[^lDkHRtDq)MπU"e>(.'Z?T-dQxokwYC>$3u,6Wsl&XB0Nf7^m6VDFatLXti0/c?x+qVQr<LbwC]89πU"$u2JDK*l*8KnusiFcZQLt=ko\&-J=4./J=nvQuT:#P(iCP_qr+5Ermp$<EuI\8FπU"wqzMujkT=\Fjc6s^$xb'J#HE3q5>j^\8cuVeV5SZ_pFpBWX\E3^+lE,^GCausVvπU"lM.s<LHe&9V0TbLh3n$iTp_L)v_DL#qcC<n$u_l?ws$ra7iumm'oq)Ct>8bp\h=πU"T>GhNB.[Q(S[DpzEwiUZ>l660b&?cxTS%;^6c3K/EJ.p^D#R4BHFl9HT8ff%?:%πU"H*??:?%*??t:%*?p?:%*f??:%H*??:?%*??t:%*?p?:%*f??:%H*??:?%*??t:%πU"*?p?:%*f??:%H*??:?%*x4itG&VtDr#W?^,p,t6$Wwtic'EtNmeUlx'j-tLbrmsπU"xX8a2,<NVn7LHns;$T&bfS0PTcc\tE#utG'LLD]PGk$^*&J,t(Alc^<dmh0,ZRbπU"hQ\&g&m4TmbP8n^TD2<x+tfh'gY*WE*[4CanZuN(y]0tBvi?*vpkVhHkY%alVVbπU"H,pemp].Y7gsKdlsILe^d?i0jluDFvLL]u7sqePM=.ETH$8+kKpTH4*8hdu4)qGπU"r(^6nr;\\h?f#g4AMWdLuC4u[uJb#%'gdup%()9%%'%-%2Jz<FGYxvT%C%%%%l%πU"%%%1%%%%utns%yjwV%Synq$tzy=u9Y99(&S118[ee&B=[m'L'WlP)gh&D%%%up%πU"()9%%'%-%2g\IFC?NWB'M'%%%f-%%%,%%%%vKfS#ifythd,>Ldo5Uh5^=N=inUjπU"cJW[Qm/A8$/%/GmlSs7P2AJ74,]hk$4s.rpET'dcK7uojzWkIfLi_lF#56X919)πU"Hmu/#*pKbO,<x)kLfPBGg8L^j-EYIbJH<E)sN[f(I.uR0<P>o'4^D4QxFMLtaKDπU"XI<jdZ]p/QB(y_.-b80:(c(-Seo^VS_<pf4lDdIMmR/UMTa2Bw75QDM1yP*sYJ[πU"BXrFcqng.(X(+sAtF2mw_bZo'5VMdF#l/kCp:)3g[)[g[I2'_+?7'::.9u4w&SOπU"?oOu_W\qpZ%8LupRQ,3DK+maV6S:CqI&AEIiwRW0uTWT2J1Z2S4$,BV8lKsVSCYπU"4:Y0SVlUM;M_Mz+<N&zIU6(-#K1+EeJlA9?pWia*hjD)0,ft0^D+?Pf07x-^q3dπU"5+=cCJCoNDTCmGvc'i5J/zIk2Z1A:JE?2b0JgA\/Oi?FCxT7[?^/DCR8X'sCHj#πU"sc6bmCn5At4gOs4c)fDxM];ooYtlMmrK%7<aevNVjt>zL-j7_B?hDB8(a-ifj0hπU"QSXJ$Y;m\PMfj;st9YY6JJ]RqH'phrcfd=20bU^d0^kU3)1eSe'O-S>32,\b?/*πU"Sn2bIZ:<]PDl;<R\7ouX#ck)TTya^3'_tX<?<LAOV5pp9vC&GNBph\g03]TITyiπU"'1vtdY/:hNYiVA]0;XIiYr&:25(G'<%60axHjkh1'2rh]bUSrp3a()meWD%[E5YπU"MSKoMH[9d2bN3;#($YsMF<3Bvm1ARE.53dZ,&A&%gP4BqlDeb#akO6HR%-Snv)/πU"c6X<+AoD$'^E&q8hh=00#cESq0)J8djFsMP?Cl5hkX9E3;^uf-d=byFB\y97'LeπU"^qZ>C4auugrLIR4ziZS2Unc5E^#n(ke;u+^^:ClI=2:sw:,qW]1nTqM#BX7<mG)πU"/N'u%p()9%%'%-I%U]=#FpH^(EW%%%%X&%%%-%%%%unW%gSynjq&]*+2;U5(jn8πU"pVuOIs7e'\*fQ%XeIir#2#uU0G(8Emj76U/VgGQe(e.algZx4t0m4#NKKkPDSOjπU"ZIOiNWv>r3pgD9U*:neSoNofFHhn;WjE(]l5X2Wie,lGKniD-:\az^Q4#53/TffπU"Bmqu/^V&K28bBgG:=H*^N8>lalL<NI%8up(%)9%'#%-%E_z<Fm9AW;P%%%%l%%%πU"%1%%%%u%tnsy%jwWS#ynqL-<*.%[F5%:%68pU]/3(Zqaz#s=6ueX,6RX[4ptq9pπU"Whl8eFGwN'<*up%()9%%'%-%6t1CFE<L7G&p%%%%X&%%%/%%%%uwjx%xVSyInqlπU"]7b/;ep5T8vA$jm1AbgU_^0'-OQ?dW'8)/g&^aOj9,z]+C9;#Q.DiDK')'(]a67πU"pY>?W5kb]ErnBn^V$:MugWJROrtd:t_Z0Yt4d1kl[/J/IKXGS/PU]EIzIgOR'&\πU"L[gm#(wU,A_w]va_=$*nG)BziD'-_0tEai%>aKG_mQXb+Bqaw8)f_.Y'<42)htcπU"9/,SoH^<xFWu%p()9%%'%-R%%2CpF,%r)Fw%%%%X&%%%0%%%%uwj%xxVg%SynqHπU"&GVy];e5#lZX5OK0m1-Gb;Ga(0'-C7Eli+fOGe(kKY1&<6Taz\A(4Za2e)F]38QπU"=rS0q_\.QXts=u:QI99KcNRF2W6jA,ZYV05TL1jzA$NVzilViX^C\_$aU7(Z)9fπU"=E758.J0#qpdwTg+xcJ:DdZA6gzzMkD*Lq9C$3(fg+Z#P#QrPGDasJ-[sP>wVZ?πU"KvhchMyF2mjH#&l9<\c.%up()%9%'%m-%q1&CF't3wh[%%%%X&%%%/%%%%uw%jxπU"xW%Synq;l[62%'V1kGnBNp*Yv^.%/E0U%%7*#')'pUOe?o1%:W'8'93y91eWr9\πU"F2*Obv$LDNoJKSu.--u.M^d[h&g&jFj#li)5qY4+Bq9oax34Or;ugPYb[kSgkLiπU"CNAF=Fbp$(/^N5[DNQB0e;FSZO2goNq\S0S[KhFbRQKV?&<Q2GZ>'w&T%up()%9πU"%'%[-%Y/&BF0r2mtW%%%%X&%%%0%%%%uw%jxxW%gSynjq&]*+2;e14jx$x.q&pnπU"JPiq*eO2_Adsq//_o/;AOKe_Ym']u&dmix*c%$LduwBhl4.QV?(Z5:Sac/ij_A>πU"K751#YQ#+Sw%1DsKu>e8e=tETK\R&V8afCKotfJ'pC0AIW>*Aq6>EPSY;kO2πU"#8fAP$g9S;_A\++:]_[G>whL%&up(%)9%'%%-%#E/BFdUenRT%%%%X%&%%,%%%%πU"u%nXSyInql]'*2'V71jXN17pPYe&uk]7*M+&G[9-[%5vxA\jV%>,\Y6=7%IeAhPπU"]Q(J&aLL2(M-sQ)fIIJML+0Qxow?<%eZs--w%*dNUI6cA=,UK5qb2/1phA182w)πU"MB4xsrr5>6FjM,BJEo6[M]KMO8d7SK6N\.TgSj[-2MLE='q\Tu%p()9%%'%-R%3πU"/BOF'5T(Vc%%%%X&%%%-%%%%unX%gSyn1ql]V+/;e54jX5ZJ:F(ZeO0Q/I;;ee+πU"C>H)[Pf)6>X#i]JxId;T2rMlsr--irlY#iqhho+)VdON]rBz<W'FfpXo_YO-7;7πU"[0Q#;xN:pn?2fp8)/QY<H*mmufb%^:?,b&F6H6T82680/6(bA;/Y^sEVJPQC.)1πU"*]VhQX0seQHRq>5:e&T.y_2sF$h5%&up(%)9%'%%-%J*/BFsN%,OQ%%%%X%&%%/πU"%%%%u%wjxx%XSyngqlZ*+2;U9XiH+SRPm\Q+'B0u&3(Wo4k)wNN;5[_76a;D7EmπU"u$gxsqYudmwvuLvpl(3+hk3?^XTB&.=$\[i:^4x^(i.QQu2^,.#)Q+HfdSYkJ&HπU"vsNb9]>G=4?RvYFRjKUGU)UFHoSvH[9,xX>E7[anq=br-bj:S*qFcu%p()9%%'%πU"-R%M/B%F]qx(a^%%%%X&%%%0%%%%uwj%xxXg%Synq,lFV3';U1e$J>Ga/Q7U37>πU"56%C(2l]-;Q6V[zgE1:z^L82o](/'=S7#p(ene^iEWWOt)da\aDF6Ad(i+pw883πU"g39QB8-,V8,fD:?5lPdkgxauo?.f/m\6K$_TDB>ojshS:]wbONNM6>GOxeMm3M(πU"%-5rCTz+fnG;J?KIy(,:4b,j^L<0uB>u%p()9%%'%-R%p%>aFW+Q*LO%%%%X&%%πU"%,%%%%unY%Synq)l\b/';e5k,ne*QLw'IOmEC9<0]-9::m?$MoWI*j4AT(?l)F^πU"g:<&e))V&aC-<EuDLF.33$ugB%Mbno_?-I:+TG5Y=sQN(1F60z;OiI52n$sw).mπU"4J]>OPF>ZxnP*2+GJpm.Pjcajc:M]BLBxMG_+[ZB_g=Q;qFm%up()%9%'%[-%y%πU"e>F4>4]7$%%%%X&%%%-%%%%un%YgSyInql\7$/;e79jHx9A-:t8$*1%+<ZgQn+gπU")+cil;Y8qw143&QlNm)j[=5h$'0n-3EZqAHlS*%/K*R*d+U6^P*]*#&9.9+e_mMπU"Tk/9Tv&PaVd%g[IKS4>5Ku9a'ey2C&]u>crVXbK,._o(F8\3fayD82[j>eW;$V6πU"UOg#-V*:J]vo0zC1Bb$2_<j>Wu%p()9%%'%-X%l1CLF%kA)jP%%%%X&%%%/%%%%πU"uwj%xxYS#ynqlHE*2R[U5*I8^QJFhto?BI%>P0.WgY9S$ek\0;-[%5jItpdae1\πEND SUBπSUB V2πU"EteJy(9kstQXolNTF(1%UR)uz;mE9'+)3vt0XaMi66aon#XZqI&l]D=3_a6S?_wπU"KeHLs2?^Yf8n5mlqcO&DJ*]?+_KFmvFv(d&f9?N<5o=0GO3%up()%9%'%[-%^/&πU"BFfC6JhU%%%%X&%%%0%%%%uw%jxxY%gSyn:qlFV%/'V5+kZ\Q.=f,R]o%C9Fh^-πU"154$GXD^0Fg$KA0:pj%\_uX;G;6iqYU6B5]$$Q'h<6(,fvBoW:;imQl)h:$D2X.πU"<Ek$I16dIzylY8itcQ%$^aD8IpvhHwgGJ**T:aT]rTnHkG95J(K9KGh6[.1IQH]πU"2GwkR+ziVK*uJcu%p()9%%'%-O%_cA1FdsS%(7*%+%#7%%%-%%%%uwj%xxSVg[dπU"gF&ZAj=2VzurF_dl5\%5[1*QP-C=rA:^A[x&>;-%x&=6jgo#3SI;j\%_T;=];GTπU"sD=zIiXlRRSg9+miiAo*3V:1,;((sb^Lx(J>rLEPF.rDpnMvEjXN,NsznGGGVh6πU"ac7q&rA_Y#3J,s))#0.E6HI_iMd79*j<xE+=iwZBWE6MClT=piHR1.+ICd-w#=_πU"g^37fLn6[OAraL^fkB/k/(aS^K]mVBHvm]\y-b^65ne/Mz[sT_HQgOJEDg0T4z$πU"4c;q6:_55?/]F$B4&9j(%C92GSrJ/T4]J;w=uX4]Le+k#T(H4:T/=4oMB7Fabu<πU"%T]<K.^Yt'HpH;j5++b.VJ3&r<BMO'K.9[<5)b3\RDK#pgCjoxlrInMlq3f8KiaπU"1GF-72f]LQJ8CRHDJtqD(:\PGnIw;^'p.[#6Zpk*fPgC?]sxx:16Y.rFXMpFn#=πU"u0U8e^ntLM_+I.x:mqiqTU8y4&WQ^+D<\W9bjf/ZSZB<]H)L>86MmIQ;3sB0;h_πU"6\l:$UK8QMo6kP=+<ku[n45*iSj#''>LokVO0r,R;8?(sqBWeH?N>2B.']dbb%rπU"FPBe.'6.tc9tKp*cjo1eP#q5Eq*Vd,n>tDEj<i-fT#MEBRX]P/iw6hsdggwvg=DπU"femJ1l=d<wKB,yGz:t%=#5Gp_qoEU+;7WO?/e_Ty89p>c>+kODa3*vkfvdQ0GkHπU"%QRSRg&L1e(ev\\;$u;*%+;'9u<e$^6N,\DA(56Yn\)[DlcpRR][fJ=9i'G4vbSπU"/LfEfC'V2ScsMM?8=-L-f-iipn>kKMak95fBfreOZC]z8;E(4IEH/K=q$>j=k7UπU"8ZsS-LQ%C^eWp(FR,q*NwY<pFapl'7J=S6+G_iq5UOOCpDK$.R6gI8fR:5FiB_0πU"hE%&m=^obu4)n-bD2X-J<bf=^m#$sga43.b4)cs2'VwVII#4boeH+2^VE_o=5O'πU"KxQK40/O?u3X)Jg;D,6vHxg*;a7,l>rW:d9O,laiMJ8J0m>rQFtbDbfQxmAi4<NπU">Hn%#s&:%X'8lLeW:a':mz>_&H$UiiER#+:P8MI+W5oR,H#bIBXrj$hc&X%5dPWπU"FHm*R+1]LK^8=7RS\W?dP,ZB]*J_z*X:e*:899IJdCF/1b5L\'GA>b6d\\Gxl3,πU"2E1*LfrVV5Xw$#6N7i8xj$%,a$%k5D+7]H6JmNuT720oB:QXYPLtD+GtnmNP_h#πU"cw33,R$U2(+LS.:kp_DaFg//8+%\+VQ<YB%aE>2peb[vPRE6uER.3,=Nr$+)%9hπU"rwVSgJX//aO6WXH+p3BW&k#SF#DPV:#XdD$RAs_2d]J&ZXX-\=1BDueUUYyLP3<πU"T#q[H\#]vJYU-HYoe/EYUOrRm4hu6\qB1gQAJc:;6oDW=+8;EegdY.:HQdakY.RπU"49<j\IZvr'?Q]1/?;l,ZIqy_LGALmV'Y66/\2'6>SU,_j*M_1/r._v\X-fI8Z?aπU"%5*.l=ii1Dxe9r*E_i.0++JGA51$/J_DmirQiU:^V(VcuQE3bn'K1Dj7,1*u:-dπU"$rqsm&XA?7EFcXRKZ;Uo4f-2-C2Dd2NqKYPjCOXSfDAa7Vp-\2*q0O'3MXE1.FUπU"$LaCu1\j'<T1^scxSUde=v)tiW][NU9%=sMSTAXF$A,Bu,u%p()9%%'%-X%m2BdπU"F=_0-Gv)%+%lA%%%,%%%%qtl%tSV[WfgH:[Ij9#A.rtu^,EmHE;QB71XRvEE[EsπU"hoJn3vI&+(3cn]f)Hp+-I5w>RRR#[N3gVmEPe*3aFaDYFY\4<<%>EU]7^JNe9(?πU"AU,$:-aQSan?&KVXbhl=Au0^K-QAqCv8nZcL(y?3cN$GGhhOcX%5W/U6eWt[7MGπU"2P0n(#H_,Ud=nzr_B/=b84arJ5+wekcCI7?)sA+#t/aAIMhti$.[0ID.]/UmI]NπU"raV?K^LCJO?+WodWPE/U4Q5<N[wg)Et>q-E1J=.Sas1J/y>e5q;l^X=^;'qS5+'πU"D#i^8rvLGuXZj%H)-J&\6:l64D.USEu)Py-hrI)2R&kJEn[n,4ul&fD2nYpmG;pπU"N4XuY6U.z<rn*2&BZ_=[bk4^[1IWs$Ps8q7Jj1Sql_3hPpUh.v+_'Vens$?KvEoπU"\d*,jC>9j>U[j8y#STFVV2j[g^htR?>aV0/axBFk-:U-dc>$YDWa?\yRbKP1H>TπU"7awGES*ZgF^G^QZEPgU93crSReB$9rO9;j>.ivKR>3CpfV^;FC+GZx7bM8px,W6πU"K9ncXYG)v..vnrIQXs2)H'1V\xjS7'gM0Da=wX-wS4L,$vPK_O5?3q5%We;-qVqπU"Of6*M=Cq?Vz4]mR(C0;.7kZ&9(ksM[=P3QAmnnB<fAYs9(>CHpwKdQ\0Yg?_:;KπU"YQL5okS0%R#&gRQt0T)VE#(H].[Zhd%G/D29$UT^BY7Ywz\eV3?Py<.4s2c%;XAπU"i3+#n9,rm*U%$c2<<5fvn39+Y,,>LWy6?so1x-dgC2<j+U3j&\toUc$;Y0gTBL)πU"4k'>vIA[L9Ap-0/If1$^a(f-m>RGe2RRK^rA*<EZV?7hp%D66Di\SlVSR_pAG^]πU"lgnJP&\=sBdl>7a;J0AG7,d4)ExF?%bV-.epMFzZj[GIBpX;b=xBPzqFPeH>SU%πU"[3u&O>;$vTS4YLZ5pW4M_Z3k3Sz-KPkC2e$$55?r]w]Ba?i[WFqVgq+,)w*KVpyπU"Ah/A;Cc3dndDyffO.T85:>Wu/bFX1L,ZU:nG5,sT;/pm-4gD267JAZR_;nf<ib?πU"9ER48>EWVp$2lHenAi/'66CcO##dA9+&u$3nqhL-,dx[+2>kY4OJ1bbnQi*BTQgπU"+3$W>5gVs\H<^V$=--qBm+Qmnm1g*XI[#3snvt;J>qL.55X>R1FgRB5EmZaLZ[$πU"GpuV.i]<'q>>qSCBcV\Hn7,,,w0Y$'lGLGt?WFtS>Sq9a3aunI>ZCieSFr=)P;DπU"ezW8S65K4.6>>Ksb?sdA*RrBiqxTW#pjQ3(5G_?f0xUB*48W+sY&KaY)i'JeB>SπU"wOmxgG%ypl0qLpBwAT(nb#MQC9$c;g*N0$cU)a(NHth;bF1gN:c]4uAG2a8?Qi&πU"w#JbnClbnpq;j;s:xdZK.a5_o]gs',0uBJ59^66x-w<$k4<q,?\L=IIctxK,-?YπU"IDiC^>C6i]E4?_RE<?-m,,aRzH^\1<-Q[MO=_4iTe6,4;,NDuLU90mtF%x<4*^lπU"PdlxmgNZdeRTQjKG82[$bNBWD[-?8v1]$*qeA1:AHq+Y)8g_#2C').kUf&PuMgMπU"P_bL6n>U0BPLqbab4u9^n+Exq?kU3Q;$.gGMquP%uOfVglQOv%2up(%)9%'[%-%πU"tDuDFJ4lhKz%%%%X%&%%/%%%%h%fsiq%jSynjq&\*(.OU9d*T'1pe9JW%&QQA#JπU"X]$)r39l\?&frfhl1&f#:^H;$k</D2Wiko>9BMfjUDM5%O&>WhL,dM'LyQl$^^4πU"ou#+DXi44CjYR4_%4Sup%()9%%'%-%6O-FFYyL+O%I%%%%l%%%%.%%%%mjfw%ySπU"ynOqt*.u=9Y909&S5q_e?9Ei.7W[>>=cAg==;&'==I)/a]&%%up(%)9%'%%-%(DπU"HGF1aY;I3%/%%,&L%%-%%%%n%sywt[SV[f2iN;xTP:#n)#W(FLJ:UoXH;*g.9WYπU"%ep;wQg7qEc[DQhNeORC:MCttS*JomH<uKg-LU8C0;)vw8Aezh1#9QKD1Clc1Q<πU"/Q)GWRDg:N4*65CboMg3CB%$=M$pu#l4p36J.qh:D73k.Jr?upq5HZ47pKNX\bLπU"M#Zu8&J#a<%ZJJJ%JJJJ%JJJJ%JJJJ%JJJJ%JJJJ%JJJJ#JJJt;V.3v8g/Fx_KYπU"tjRNc>vfq9n[:xKxD2K9-9Gn[xK8YtjNl7xpxeE9'1?I5YhlGPuqT7-7#+wHxQIπU"cTH*3''Kn>IVsGujrbt8qjSD?_H7GTn<lLMri%[9wWcMZurqKi>9k3<v2i<5TH)πU"KrB1i^mA0tlTjVT;05=KN<#QNL']H8Bg7%lG?5,#J?h,i^9(E_XaIh96;*ep>*uπU"Fy8#[glI?S.:b>/WNZ_:%<AO<NS\^u9\JH;Cs_tFtfIi=K,eYLs]K;,Qr;&dRY4πU"-bL'c9XBU_>$lrKHWR4c?P^+ccFwa#>Vr5vGF73c=,x5VHpd;iDvj$Ks'7*:jY7πU"^VYRgwPl(TTg?<6x;Pi0vm,;nh\CIHQn.vEnv:EnjEtKs<CkfL95i9fsOU5ck8kπU"<7Qq3K?wOkS(_5Xbnwk_#I1q_-TAmKXiK7qpuAo3A8tMmHI5'_hfi67a(RF),GDπU"qMm_>0?'t=,]9\Q_Pr&gju8tVGG*OnZc^_*$+JrlCQJuhH.GcL(?_d3.);27ciIπU"=bhS1#uCs)HX1es4$d_iHnwYX#:6o^.rGPm?K>_uPRT7YFX0d-ItN:S^RA-B?\NπU"Vnf]luI?#_kX-fGHXRtP1T2k^aPZhn\OThO8YKVlVc^B:bFTlkhI%(Ekf&Tnj\OπU"7UFBwie1,Kt2/m=-T(v<wuNcR82pDbPW+Rlfc$HdTprl^IsJ:oD\P<wP[:4HEu7πU"QjP0\MVJ[#XW2;k-n_Ebvra7&-c4C[m;?#iK>rrn:opGIZ?68R7RKe:4$tB;)MBπU"[ToiXl*nR69CY<>nf$08^nCQK0_r>=O.W/]acmUo#3KL4T#yC1o1ur80pW.xp.KπU"aNUM'u.P[iW+:R_WaXb7bsdtMZlQA_sVK?&d\6a-PEh76K(bL)H23=QGiJV;H1mπU"t0j6--sYKAfmiEwiWJCw*sU\\ZsZ3CH%eJ5VyJIUi6obtifVIw^FUTUKSA^okopπU"kdfX^cHb:hssYV?a'UI;FnVwmZko8e<c'(+oO=D0qO2&N(UVNc(x6F3.>h.uN$jπU"dlHf'VhbSDKKbZV>-\r&l&A?)%f)oc7m;#g\X]Ft:-l&taGXB*_P-/Pgh%bLZNgπU"^S[^r%sn_H?2&D1gLcqvh<t4.K^A=C12YQuRQhXh30$TszQI*z0_EN]d5(t2o,2πU"^#&XAm=.['JXR<rRnl$#u]qWsht4].SAW(Z?2*$EFP?oEDiJ**:3cT7CDF*]\_9πU"E_8?i08?U447B'BZ<$BqsX-0Xd]$[dept+0gq8<151Dd]PS84\=d;wU9t+[X6m4πU"31r;]7L94,K57c9N#^K25C%?P$(1]3\sKYpu%#qTdn$c,-(W:Db'4><ffu6NtW4πU"mhzz/l\eZo:4tmDwOT2l9u,1mUW'\saYDbJf*KqAIVL.$F32qj;xET<eRx?uqJJπU"\NiivpXk?$JaRRV###oSJc=:<WdW5ViaF_$-7d^s2kk0SilZ*P1-nrKiNn1%NZZπU"r/>oVUl(hheD8Qua(&Z7BtR;NNK8a/GO.'jb>^?RSu,F-dVnOTH&TBqcE2g5;K/πU"nIw7Mt%8hU>7DE([\[pqEaxaNG,TemT(>f^R3PHZTol2bA>uy>$3b4(Q8Bx<'whπU"\Uh.V3v\$nQ2-)qw$VHvFN7HLP\mlu9tlPCz;DKCQ1?\,P8uiNYvtJxjQ/ap2R0πU"PGF$q?uYl=*8MaTBK1^Xy.HR_mJ^xY\-'.:#P)s^t3uxOXl/NjI9Nj3Q)UT1Fy6πU"-<_^odq'v_wbTd/_j4nJH<(&FSXbp48n-R3A]_DKXb)]DTl&d=#?wZ]#a9N8jOFπU"xgEZ_=f,o8_rwZ6WL.c<wP\R0bv'-bCHJOC&pa$$j6W9QA#&ij<3_j*j\IT*>ZtπU"2LFE4&mffyM>[]lc*jz8urO#4c_u9FG.2#.sEQ8minj<Vo.xG0ST]7yli?v[s]YπU"r4g:z^VatZaEOl#y;5KoI;uXM?C\2&Ai9uzNi#<rP>?5kt*2S^]rQ.f^&>=_tbsπU"aP*+uqiwYKuHsHL)KqI<^Qrhud(;kY^klaWnVd(lv7Y$q*AcGXxvhoPOrKHTxEtπU"fP]6BYZX8oIHKv$aip^&GapoTkiD(%8$pU]xZFl>_fxS2srX0iXR$s7SYwW)sBxπU"bXaip^lH?2qhG5zXJgDkNa#KcsBN[)g1uo\7DPPXuR[sfYv<8-t[DqBn*uqrrR>πU"uXQdSuqE$$P:9F$QD<K]Q$$SwVmS(E+8\DRhANj/YlbplE5NA<Ev-aQ='%8pJ+CπU")NJCQAcM*N]Ig7Nj4lCk^V1RANPk4t).,khbSXtG$wY6jFJ-gJ(&X9IwwYz/ur4πU"Af^nA31'Nr7+Bmrt858hhK?76EiKTbR8^rL7qIUSb4nfQrNeNrENxA,UmbLXDcHπU"tLPhM.?;n$Zu(xi4*jzMenNcAjHNo14ubQNPg^NBM5bq*PodD$(smv\iUkuXFiPπU"?Kr<l$<dU5nYKpIy#ksBb%<H:ZDgE(]K?Ct&d2itLFKl^u5ls4jrF/(t?cVyRHFπU"+&$DNMCMBkS^5X0Q/XFADK:H5SRftfTn4-N=PE<$upu$%jLj^r$%N1-Xnv\(c'XπU"L2Wl*]A6dl#-cXH?h?kvhKtkXAQ0l1.g=yHk4HdrE:gAw4vGr^$?>,$l&-cH<nfπU"8\.[0GlHcnclq%-5D'c.vbzdjtv5^**\M)UL:Z)o[D_hEaodb#V-anHv31.uX^OπU"d8#-x5-lZV-(anbtoeDZ\B=dcuZ(Bu2=6Xh(Be8qmch3M(-;B\MoC8t#bPXuxnwπU"kRN:<3wVuDeptn_>glnVi8XWFXkuF08*Cbz#O)5gqV<gR%'*eaY</Xktv%p73X<πU"osh]3>rm3b_a>vVuc*3vjWj^\#Y)JHV^h$Td<n_i*^IgCb](p;N$%^<V:j8D=BtπU"#FX?S=H_beCo<YMXV+m;tIrl&XhH:wV=TIE_Bc&#O391#t,hE8AMp8xMq^x?Sc*πU"p2^72I4Nun_0O?8[.xsH?.Cz$MY>8Few&.$O$EZX#bV[6tv;X=m7x=s>h9w*ZvFπU"PiZBz#qw;TeuPih(b=5p;8&Id%_E^k0d5.17Mjwtp97[V1S1cPI;[y:_WwRu2A3πU"42aadRh&gCTYvpYWrw>[q5QSnS]B6*>'#&tpEsoI^E=iU^J#5lrfF]NtZrUcπU"OV;,/+<L43gjTH1/Hl#,\vFM]kB_X$-H.C$_N/Bp)fK#''wd-vWrL%1]hHN[TD^πU"lUqTK'nMg4Y&i$^REX_&McMccccMccccMccccMccccMccccMccccMccccbc7Uv%πU"<up(%)9%'#%-%a_ZSFrsE>pA#'%%d%,%%1%%%%w(j%nx%ntsS^y'y6jzT=T.U1LπU"T<INYug1<ONXp+%'0tUorc*Dh0B'>[;_>Yq#Ug3Bdua1gPk^-b/L>a,O/qgOeIGπU"jmBOmJJ^i3EFoY/TsOSeU93cWvD;oPAZ6:O?d2Wq25E>,Z;if\BKknS6w+aIWHlπU"L:SVV8>^x'8ZNl?7Cvw'=+##l+PL\1OR=MA>K54(ru2kh(qW)xRI*SfU23?hMg2πU"iCH_H3p*-yvxMZ/#P)E8=1IFZ(UR&B:DDT$]C+)\Ez_suO[WK#[zMo$Rv#-Q20dπU"Os.G[sLD#Vo+0z2[mFL,r]ZUmk*(WaA6AnhbJ5$Jw$5R1mjX2haM.uOJf8i8AK:πU"vj-;VIR$xm+_#VZEJQOBrW\>OY)p$,W6=Er3VW=F2)eJ;3.B;U0EGm#BV\B^56eπU"VmVCVSgdj5&h^V3j.OCyJML/[kskAf?\*6#=tv)E8&+/c?)^JK4m_+j4;FdFl*+πU"p\VJC>)72TmL.VIuwKx%>i*<2o?8RDjn44:9Qe2G$7(jW>f:,cYTiD'DQ*)bIn;πU"Q)1jW7vdpjRi9bgjw\haQ\d1>4F<&aOm'/Jor8c+\H3?IvLY&,L+3SRA9;4[=&>πU"nBwSbf'gT/QQ<'F,C;+;d662e,XCbcO'>%YFF%AYz'Q)cQGx$PW*0[%9a9zCYifπU"+D]0wqqi2av>zSpGgaKs9.;s+bb;8r0/(].0/=>1':=p_5N.pkDK*2[mhZ;q(CmπU"8-ZQ1b0\B/r1eb7Qv2-;;T]ENaPb12M9^UCGFtJ/plB3J%<H1rqLvg?Z8K&*rA&πU"2.d155(TpFi\0xeC4.nGj'$:b-r-*R4ZZ/Zm/.HUt%(j;evK*d?j/n$8Mtmv?2eπU"a;:wc_)[S96ur%Cgdm]\xpmv>t+)8.8A3a-*11]&03B$&:zaaj>NXOYLK(yM&u%πU"p()9%%'%-L%9YSOF[mt(aZ%%+%1%%%%1%%%%mnx%htwj%xSif%yXY\9+YNv9CyAπU"N%RxMMmrnBE=x[^W%Y\Y*kY34_=J_]ypOs]$)tQj23EPqF:>h>/r>tBR*>Y5fLXπU"oovLgE5AB/gw8[n.yMI9QigMz_kn&n(;X[ZZXI=vkGQpS%i&(y?QSd+0QfBpr*zπU"=U*-%,A;X7Fpef+A2X(S2kPxJau0#I&-5<%%up()%9%'%d-%d5JIFQa;7+A%%%%πU"X&%%%/%#%%g&%fqqV%SynqYlG*9];u=>NjbAt%u5X)WSpI[JQ3HRa]qER1_EDMZπU"]dYmY,:5P]YI]]nQTYId,-CAEsdu7MxAJ=nbLi\<kjwA<g4.+/ufS-2FOBoW8ysπU"?:dBgiH$\w1Rm;LK&2&ac>r4ozTRxlU;^T3D)t5.8-m(bPgXxb'RtxDm;)XlL0dπU"wtwsgQ=W35yhbuUmtFG(Vj8p=orO3_&8]nO&EArTMwhUDZ'nreTtm0v[J>,YDRRπU";EhXtsg88nut+ax>Bfv&%up()%9%'%[-%16/IF6%7#f'%%%%X&%%%/%#%%g&%fqπU"qW%Synq,lDV/B;e5THZB&SF),jiPO6WeBbQaO:F;h.1aP\LmU7%-:m<Z6CaP)j0πU"mx<6*;_0MN7X/Ikf(Gu?E7G<)qx<w^m#qpC\R\H(7$-hki%D(Oo)P^BV-h)D:FRπU"Rbx.$#q/[xtt:%g/n4U/8L<Ublb:8SZ[91\#+mpq=<?XWm$>_j3Q0'S;rJFR900πU"dSF42up,3SjYFURAe*^zQNkK6lV$$SDBv'rcup%()9%%'%-%1\yKF<W0hP'w&%%πU"%?;%%%/%%%.qj%j%qWSiRfyFg;8=<E:5Txl3C,Urlfr>OLYE//%;C]z.Of2^^UKπU"CHlkKC8hLESYpt/Bg0=sN1XW?\z;GHuwoI^lvq%m\)%Dwt5E-^(Q,>\HM_&KAtAπU"K17ML-$N?1-loYH\>F$g=vXUFKa4jSrcUH>tL1M*$,I]p9]Q*CUY5<PaZT(%=pCπU"FC0SSB9QVks#1C<>QjAdFo<&%5.fh3HdyfWVp%P,0P#-z)WaE\23*_01+juB-B9πU"'sqem<5/m]Si<CF12cT=BaGZ]bL)mTZ7FEs+.YX,Y0%neLLjZ.cvx2By6#RlV?tπU"Kl6x$O+&_HT=DX;qnnYI+#kt?'mhzZ2ge4AS#T-wVvh>x7SA*i8HR5Oi6sQe\bwπU"sZPu7m2=Ijdxp<L(g:6^R^%,[zHNCsw>:vvYS?YPP-E3]TdGJY0Lj-_G^ru5A;qπU"op]6OY=H>M+iJa$g\E2Wc/M$3.\WH2uv:oX0Usfo$0bL9B[J;kO=O%n(YRJN*q%πU"G'r&?W(]_OaJ4e[wusT%Q/%bnJYW,HyWl3v/4P%GvgLBZf12H,_Y$ETDJhZHTZ9πU"J0%9(B>V&McM;95yjpI9SBuu2(oKmJxwb\blW=PT7?^LEXnEn#K,]Pi-DIhnMefπU"M-5izg9*oIttRlgE&pj8Qt2NG<wfr(%up()%9%'%7-%p&SPF)'/IGA)#%%,L%%%πU"+%%%%js%iSV[ZfTH:$T5=9e#>f1\VS_eawA7vL*2V,Lae)TsB/LwDU]CI3ciahUπU"xaaDC[g.*4<aE>k;L#xFf3VwN6hqe,5NgTsNjuSm]i)K))]oGsrKteqdN]#*?92πU"y8G-H<t;)l:EaLRVZP(fG*n:jvneT_g%P9jv%9jv9%jv9j%v9jv%9jv9%jv9j$ZπU"^f3*A$HlA]A^A?]Av4;&JB'mqjYqRp+icrU'PA:4=Qllp.cb*:\d6F]'CFXG2(:πU"/>2,:ePX^4jM2^T?Hi2Dt]?:f(S9\_RLu2Hl5GVP+7p6yLiX8n7nLoZIZWu_r1%πU"b3PC[q#M80Ax^ucSSYhA4>_C_]t'T=i5oFSn5.l\F2?busT4B$j5&XX\7gL[qh?πU"eGhJ(SA_b't&C,.5lQ:Zvgg\ObOF-'9D%7Yvh+PC098fZksIdlHZ#Su9V->d:uVπU"G_[CQG;xO(=D;Ec#*n$(:,\deM(1%OI<'FaQ4YGR(FM*7''[W)h'0+37b6SfXt,πU"a4aEIH]+G;w[?Xjae.rx:]%hv'kve,%,qnm:lf<$BtHt&X?Z-M)Z$WXF,Ya$,UrπU"#3eJ#i&qR::Zc5DG&Yx#&uY8RiFe5cUEAwJ5<P.y#V]3V^*RzQ4vA+4/?$&%Y9$πU"$?m$v9f]w:+PQqh<s=a2j3ctlpgYc45+>RB.rH(vi-e%Orx]b_7Pe+aNrWuV>V-πU":?<QtGmLTXh$%%OK(/?luDzdG&PD.C.Qdy+fD#^ZxRolJ:=+BM>ILIlvp=)UF,YπU"[t+pFf#$K/&d]\NokEjL0bLxPP9,l$fq:=nnmO+#^s[U)i*]zmUpA]w(_l5ldLKπU").$OHpy+9,EM%O/&TRVep/gVg?.+mS,^UMYz0?95Gm%LOP&'lLOIY9t6,OtD14eπU"di1T,17&^B=p0&5ja2.V'.BU1#t%/&b^n<)F>TTg'l])p%SD7L\'Tk\bm,LK6::πU"5M(dQB^=d=Z[ahb?*UBP0D'Uj\u.^PUuU_]G<4BakZ8f$KZ^;^^jd;KF:td'rg#πU"V,m+i\i-&*k8V2(Fn'CI>H61YA0Ye)Cn(<$Q+xLiDiCp]i_UrFbQ&^Xd=bg6FTKπU",C3GlMd**j\csIV$sDG<ZJyJ?Gt/R3FObi1/rUE[=].v]l3'C:f<VcdA(4K4q'6πU"w4H[By9'>(qjQ>*B#2*649g75OME.Ld*yhrQV:J#%I.;#iXDa2o9_[+$0<gBU1xπU"U_V:ldAlpx&FjD\QW%,Ab[k#^?s1rxmdn'Dk2#j.[pSG>iu8%3Wj5fscKf9lkvvπU"igtKBSn/N2)p:VN.)Lq]nf)[laig5=Yl?(%EMnY[w5uCQBXXy-ZROy(.%b%-Y(0πU"Dqla]7W8\0$t-%WC8?jE.*ucY^#H.Qxj98WGf%l\pMx.>Cl$O-b_Jx3PNYxlEXhπU"]0jw[\>:p,aH7Onv%u9jv%9jv9%jv9j%v9jv%9jv97jvMP*g>up%()9%%'%-%4ZπU"&IFUv/oQ&U(%%%X?%%%0%%%%lfrj(t%jw[SV[fkf8=M7U=98(*05wPR=UO=E*k%πU"71zF8H)k-,NDO/w*cz_9JX&GQ'7+#^a3Js-G>9zxC9__sB3F^l]hcc#YN[Qu'-8πU"pcrns(8utr8fl3D6htrabv=<JDmZ=VA^=5T7Gh*,\>2&2(*tf)-Kt[g;AKn_ehlπU"ha09gX[ihR=egIpBr2>I3(m1*EG%US#Pe'HHT0GqYP^&Vax$8_5Jz9Vzmq-7sOHπU"#MfaPx8Qr&n[\Qb'?m0OW-2fk.'q1Lx***+e9'=Nr>tq\SImofYNVs\=1xcE;g]πU"ZA>aULr%F-1#z22cFpSH1U*k-Fgb[7S6qiLv(XR0Q(1hlV*AQcWi0_:]l:QgWU0πU"OWD[fZ;2VqA0WHEbn/qo=/uEqCOgNVO^1hW^#yXU)CdX\F8jme5,P6DjXc5J93CπU"UhEqx55^#=;\peESeO3a<O*R6\ph?0EMcI.<G^?HL>3.-^ukUn#KGIbq^(\c.T5πU":6;3595p1B#&qeVH/CUu+#9X-C+d=pt3(PIynZt=H?^ses*<Mn9LsIDC[s8#H4CπU"z^3yyfoW(.*O$?y;CK6-GhIexghs6$<\ontnPGo^geiSA]XUEA&%ZdU^-J#F^q#πU"gA7]b:_vYS%f;6uJ0G;Jv/]q-NGJ$e'/sY-Di&uuFeb%cpr*TA?_JqY4?<aH15#πU"-S7__hUmi79DbESsksal-Ej_kOr4Qt#&tW5%_S=.hGjNjh%]&0ZeXWu<\Pc0cm(πU"d>tIWu9op9<HVT0f+g^m1q.^B8[k:Rw$gNUn[$S-BiNc:Jt-\^&Tg<-=,5H9j,TπU"5j9*Xm(P=jBi9brn'R6L(;UDGyp35$76=GH\pcrtdhJCclG(WtH9t>eK4h$b\f(πU"U4VHj)o5n9DjxgHA='njeGL;PJ8;dISmWMsWPWsm/9a:k6V^;?%E-F&EO16XKkuπU":q2kV^o8_=ifJ]Y#w5(v0V#1TFP.XTB.vR>9,#m8hDCcoS9tGYaX<d=9T1hK*%iπU"3<2Hcs7'o'/0u[^urI-eU\c^fWokX%,le=994eSBV\<9j,)W,)W/C4Y*:S%N$-&πU"#(1Wm3UUs/(<j)_viW3ep)-%dX1T?V=a1RZdMCPe\(Iz3R+rx2</]DjvAD:]QuUπU"32HXNvV4WCFU=1/WFU=D1WFUa=[d=%Dup(%)9%'[%-%oDxKFJOl,3O%%%%X%&%%πU"/%%%%x%yfnw%xSyn:qlHF+3;e5PTZVz4AJ2EgO&;KAjUApC<7n_J+&QgC8?'CkbπU"WPR4H%+('DpU]^?-cjrDh$r(';\RM)K%:/u.o<9]/R&*mO=iO0AZ'%52E4P1,7nπEND SUBπSUB V3πU"lAt;l)o#tC1,*=?p8HE/2CzIqr]2/L8ycMisaqQuWgJLL$xWdp%+up(%)9%'%%-πU"%rE)KF3Jom%>%%%%X%&%%/%%%%l%mtxy%VSyn=q&GV(3Qe5XkZ0)+uS5g'$*a'*πU"BA=p%/7#/c<gj570lRHh')wD.KXSZE:]d.TjWNK/y,+q[nnclawMAX5Y_v4q&dsπU"Oa*J[:sjNSYms/4W+xT].NUC]-<YKjjpUap8XD/tmTvd9BZJ,#5%up()%9%'%m-πU"%L*eKFA(.miI%%%%X&%%%0%%%%lm%txyV%gSyn=q&GF+3;e5XkZP_6eAi/[9LE:πU"[E526%/LM)8TERbL*]Zo0oMB)Uib&O#e[10R6]wKl[2htT^1ly)pp?2%xK\h<DMπU"I<Yec0UPTsVpCx.#98,pEw+i[qgAe'7k.H$PheIh.Us_waoezdN'nYc9ne<,j;,πU"np)u%p()9%%'%-X%[*K7F_Fk(7>%%%%X&%%%0%%%%lmt%xyWg%Synq?&G*2';U9πU"jEJ:v3.&<CQ&_&w=*5YJ;)Wc+NF-5-ZCu49^menZ=ONw^aC9CalN[e>K*8o[;GZπU"rO]_+B51HI^I?\xD:$]mQ/8D:.+P%DsJ/,K%K)O<OM?WAYt^PE4-Np[j7:b6JgQπU"6ql5u%p()9%%'%-R%J*K1Ffc&(K:%%%%X&%%%/%%%%lmt%xyWS[ynq&HG*2R[U=πU"iZ;6tA'7;o#';[/BC%*N0i_qpeQGZ)0r.U'4/7Lsj#V0sI#isY&W2viov[?r^nNπU"GG?Zs>_IHfQ/6SRSS;hr>vER96^/rZ,9HD[/'DgA.)H4qnLqXXhj8VYDl[Y'v%uπU"p%()9%%'%-%5R*KF'GPt/%y%%%%X&%%%/%%%%lmtx%yXSydnqlD0*.Oe71kZ<7QπU"Q(^9%A:6$=hQ&HU=zk+n%3^%467m_pTc7f[L_,2(obmf=L(J^7Y>U8-.4N*MVNyπU"S-w[]QEXF%Qm(*aV1QF[paE8u'e'up%()9%%'%-%5/+KF$a<vg&*%%%%X&%%%0%πU"%%%lmtx%yXgS#ynqlEFp2O[U5kZ'PyEV*NC&+A/Y)z9)-LU+%[ij[jnM](?9?7WπU"wK[xN4B*0IY3V\eY.nMZ)5fB.Djq41jqzj;4BDH1e;Ff;DSc3>B,&Ma),P+H(VTπU"M'g'up%()9%%'%-%5E+KFV1VNS%x%%%%X&%%%/%%%%lmtx%yYSydnqlD0*2OUR1πU"iJZ+'k'>JRF(SUjwQOF6A-c7S':j4s1O'N7-#]Mc2mO[FIIqGqK-xZ-36phz\lvπU"$RWN0:eqgbtNW*I6k3RwU+ECGuE7uf%'up(%)9%'#%-%L$+KF'K?B/*%%%%X%&%πU"%0%%%%l%mtxy%YgSydnqlF0*2OU71)9\/-F2U#AJB-/Sjw=2T]a1e/7[9Coi-X9πU"P:hM6+H4+&I/-E\DP]D;:fK4lZB4b.WC;w(f]:mu0G?Qle^N%ooyh-mZ$MRcGJ2πU"qV[lqj%0up(%)9%'%%-%wDXSFA\gq&/[T%%,%H&%.%%%%m%xVUW%SgfxNfL<Fo[πU"]+ifp^6wqRUbVo9gLQo5J6V&LSTK)0je+kbg3h\Hc]Y+)X=$fP[lB6vn^o3kZ;pπU"0?KsLRb$Rl=s9nS/xQdoetHSG>CLLBtsWLXk>J1&Jrx<r?xuL6Bwdg.GC#Z;R0nπU"nUgAKFZiQF]/HRaPCilS#GaZHhxoWSPo2rJ>5Y_k+Q2sbb3:?9Gbm?_3/h#$9XhπU"I^i\fLK?8jC_VKpgVqZQL[xPd1<(oaH+R]W&Dmw6Xuaf5:fH4ZhX6JqKK%XuboKπU"i=1V&TcfF$NLU\t<,LJqxMNIF0>'3tsTc[^FYU.KNZ((6\^Ne0xCM>\iG07lu-jπU")[qZLq(*axX=OQV+=*Nnte.Xlo$Z]Z?CSZ3A,&HSLTTcfnQT+D%t52Ayv^Pm7QMπU"M9*'hp?iSXlmF\gIEny$8-oYkVU41:j'ACsN?Js=FNSu.Es71%Tq8<a<WVEgCQHπU"LefuCLNq&eg?^6*1[Q9J&U<$q0cthHsL,\&^PUY%$gtgcbXeC0x3i^9]^0<16O1πU"K59U.yd>BX4xlN:\ixu6.*ES.=lFq9<gl_)i=rXsUWe_PNmtVre*K>6h-\sh'b6πU"P9o;:UKIQ3'<XCPXTgYHE9IRw4SoL6Ze0Bp*%,(j_ibk/AU:I;'P:fj]2=CloYwπU"2'#b6bP]BR-R<fL)]sL\2t*.pbs[M':]xK4-l:\e0hG%VYXEjta/Cg3)<6mLE]cπU"5i,+8ZE.6D\Duf>#IUK)27m-hs4?kWu)gIo+&2pl)J?V-np8+O\+GR3i,$5SoOBπU"_ONXI'?F=vZos2S\xFqT(;c]a4/H\b3dR,XT1>TJ\?Qdn7g.KKGto=ix4:*BR;nπU"%l4*%VrGMV)9']Mhw'1hb'YKc*UlVpfU.-IBl.I'_8'2FZd.Gp'uZ)(9XBATFGSπU"PR7?.B3%$WapPLba,c$19j3TU+IIr1r,\H.XCGCG%0%mOp5WW/jjaf-0%U3:TuIπU"dM/>&AUS$hN.3<IC/u*WrV+2D%'jQ%Nr0dv8</f'lTj04)e+\8CW*o9Cc/Bx+G8πU")svwKG0,>%lMeDS[r.VF_C<oj\e[1biK*Z;%5_i&6DoW=M0^^c8KY5Z=YPC+ET1πU"%&OlWr\lx;nV._vZ5>QPaR5eTM)+eaHeZFVWOoFrFJ\W&V;#u>qIJB*xfnLY*.9πU"NulY4y'sD9MLs\-V]c_kD-V.**Cx4L,:LHq.&7bMefIEhyJDiKk\umqIu'f6#EVπU"(]f&9Y7Hse$Pjx30/GAQE3BTxbQbGTlrOPYMNHD:jtImTOZ9cjXdS1[NWPepxmLπU"bDQM7m-&mDA<L0L164r-Bl=gyf]'40M%QPLlcIhC=NL(*^9,8U*x>pUjtWOIn?yπU"OdO0]_eIU/daL<sOX\=\FJ0B]0+euc6t?0'=7i4Aaa:Gi=DK0MfXgBFmo\#>rOzπU"L0[?OTm-X6\ZhCD04MNzp:Ns:/jZoOr*VaogLGPpi(#jb:\8v0^y>hPIQWo8EK7πU"oPjQZuY>*1D*waLX&yMd<L3'>500^Ni6*>RT'm\V-EntY<&U.sO=j5C>-tJH$\&πU"K#=OH[hXI>x8lbb_IgHG8/:SCZ-[hCUZ^3I$H&9h8)]rb6'xZclBc>;9JWmV_-CπU"fk20.#d9SfXT+c2AI6L+7?_]^%^vAwcX&FaK&,Q<KemTjrH5Uu.ajI,3hO_YVDTπU"G]_aX7---0a.e5;rpx^\m?__I$aPzZsR1?=9I\X&2ZWTcT,QN_G+Z8R-bL(&Ri4πU"/:2O:ZxFFw,W'A2C:Dyesk.yeOH(0pWYIAqtQ4i?py8%+5qjXAODc]JnSVVaLWdπU"$,AW*LRCL+luF],dkn*Uka3g2^vvF(^Gg1/3%+w\a:feJs62wc3.W%K4]=.n**aπU"#^NC+pgk*#jC<*pffCwj#4?\z#fFYxEQA<o#u]XuR3RjA(CR5m9E)UqiR5-rB9tπU",TJZVf$nZk'O]Mqh/+/SChbH37%XCcdFQ+dHOGg&lw;CWdu/m*71(d$_([/IUgYπU"ncJGi1s]w#2<HNlbvpC?df4i$9bsK32CO-c\?nCri+<lIlmBPc_Aw2f^lZhhtWaπU"/O$FddvVDD'UbcAi8]n-6Gl,2#0R;c5K;_HCAir^r:$A40+9DGKE)bkN9ihxr4ZπU"'99+[0,P-IY:P0:Vd)^ckS=A#.q1^di;u3<AQW70G+T[a3-5R:n3ZusKG<L6.fIπU"j(1K,-AQCqWkXfkH$3S-Xl3]$9-37GG<da#gNLUQZ#QIU<mI5$Z-=/bn$]<=L3;πU":\ia<;*'_6v-B&1gfiLJnHPD'bT;=PvneE,%gfMHSIed2fa9H$?^L'NqXh3xm87πU"JfCy>\;CYP3Nobb&1y\jaQ<+r\CL7n$L)7[kkhV/Tf9J/5TZ2s%IjRhX**QyV0MπU"LlHHs8N/'R'6HgnL]L#ZF)ET+.W.vxAI9iY<6>Zg#L<AjL*rIs$+=2DLB5xU;0/πU"kqw^&lXauhSo.j-BBeScoYqPUA^DS_hsgYS[WYFb*[SDc&\+8-Dti'56v/QQ6&bπU"g5q:q#ZOU^5/zF+Mh$dgv#ri(QOQ^=z[FU^IdepJl+%*$8'<KL_7C1TserFk'%xπU"&a7_LX#9)'YU&ZpKN&Dstr*DRxRALDg8&uO=E-A>Y8L'LA(+_Hqv$lS\6v)X(30πU"-1WX&Kj]ThN2y^,JvC.78Bf[0uh=UU'*)wie<leA2m\=2_:TCP>i$(zW9#$nET=πU"ECDc?62UTR29iS^g2rv7rubO;k0K5]dxCrQsU3gA7Bkpbeea_90#AVWQsKJz7I3πU"3+.aFbaah/]5H'1xJgF/J[QMVKKkk0kG]l^(*a2\w#-4C,)g?VbUsD,3UK;1fU_πU"7CKTJ#S/x[N.V=Cd*cfAT'.7HvUX$>^0I<.=k_[-P80H:s[3y7ma70>bQ1)I#gEπU"%8R5D)'9Y0pO)Gpn5(uBJ2qniiwv#]c8xQ$1=&+]'m)9Rj?Rmpz#=l/Y1nmz6R1πU"T'D58uvEiqF2>?gc/06f*+OQj6q<U87P$hRG)$$hbChHh+F)[>Zd0/b;IVOjWwYπU"/aB/&^QMFA+eQ:O#/HQK5:SQkM6JwjWN\pVG8D\[g5In+SUN/t6C2'=biDlr-6EπU"vF(E,Dakrr5*aG%7[R)psGeb(#&aQhd/qE6mR?8,X4UZCAP0*O#-xL>nw1[;e:]πU"g8q(V36D(;9<o1?M2uMzR>xTBt[ogDJi-U3u1pxpK<wtOuX0xsihg6;&^6Xvi;JπU"05#=>0)<AUCZf_=^JXg>Uzl0;v#weo;AB_eAAxKE-,88ig5x;$$.[ZgOMj[+vgGπU"'%FV?RTK6:%sq6_<DjM\rkjM]a$wr)3W]N$_o-Ywr^&#/lg[.:HmgrIaRq+mj=EπU"uc.'R;t=Xd-LnNiKj:.>_0gU[vi4$*%U%q<QA&X:,8mZLS9TMZ#tg#f3X>Z[pK2πU"b7vWp0.VW:eJ;a__]C<VQ<d/]v57k*V+cg3*/GmaGU&FIhGgY6k]0\(\F6(1\OeπU"9)ggkBKE:4Y'3Zyh/\?aW[Ma?WkA&b1e4x=u[S\?8mpB-*h&I3]\7XZ<a[=h:W7πU"Aac3Q+tGB6Iq:Ekf0$g1CV.n_1*>p(p=eQ\_o3M'U67])b0ML[i0p%2kRYrVWseπU">G=E-%dG.R*GcN<anrB+Y:[LlQ^SED^0i/_,Z=x8b\QR5XW,3w6*dW/qOzPcmg^πU"xr(L4_io\v]DJ+Bh_Qh^z:a?xll#)eza.QhI$nCs+e<9a8tTE2i&i7LrvESkH8%πU"n.VH/Y1WGLKuwPF#'Xasitr4b)ssp87Ht[0iR.iL152:1YjrPTm6.0<dpN&XOiNπU"DouP=epN-NI\D*do7\EBlDOhO&p0CvlXt]pdT(?V/TXFGK,:2U9RATU'Bkle_VaπU"_^CLBlCJe\QbKS*1%$iv;SVN=+2thr>Uw$A1,r.B>RVicoF3ml_]CG?B$m(qMG4πU"8$rd-40hSnt3-L90;+udfwK6*U.:kl-=%Ad>q?HdrFJLZWeKu>m*R?$(UFq24]iπU"Bp:#)#1-$XX51G)_5Fowu^T+]Yz'jMZ/,4cw]*9yWv7+0ui+zuE+DtYd]Uz[RdPπU"xgg78Ahp8*m(q[#UsY(OJ<mMCn'WXXc:pgXCV*]^vdO.p9j0q>*mZ8_as=0&LmYπU"8+9o7H(j2DO#LAOJ=nL[7ESZy*Ce9T1$+_=f^p;dG%%j^>q&Qj9]tn/rn$Lol-rπU"0iI&acR8M]D'h)OXiV:c;iolHxSxsbhTmkFB>[bnRtJ3X$z^e=-,Fa,M7tYi_ZKπU"srnr7DuI%.dxbW(nxCAPRy4$:;yVmZoNDLP=yxkZtN5(b?/r7krCmOAHt3?G$<?πU"?+DWz6b6Ah9WT=MY9f=yY2Ji18Y*3i1w*>,r+W*R2i4hqiy6PvW]&iAe'tp0BfYπU"=ktjpdz<b[/Bs_r]u.0$#xcX]\y4Y_#y,jF]N(H>kcZa4sn_C>vskC6$Ib#Z'8rπU":GAl/K,\X)i-2YU38K*)YQW\VXd]v6^,95eY*OS&mPE9V3]Ho6?JsLyQuZvfs;^πU"X:BkMV/5A%Owk6c6xM^;25Cn^D$CSqFj[uAm%Y9]ucf\qL.3\gT<R/ssyi+ua&IπU"ApJHxKa&iIDrPJm$E5<Zo7p71eMQWfS<BD\o^C:Z?#sHdU*$xn8N?o;dbyQ<PW:πU"p(Nwx(I,;/9EM3lm44tGU-o;(-ZL.)IO.[iWBGsnt^PU#7h,B-F'[btpGGmsL9rπU"bPSi#iRAx6N%v5IFo+TeoTw)H=chAL9kwThs;<nZ=cYn_G44.9W_o+tBIVtPvagπU"<eWetm<H3s,&MZ<bEcu>k%$J,tghSdg6b]wslOJEuLxYi=M/*F]E_<riaFu0sq9πU"Gd='JxuU9]6/z)cKuppB2O%gz3')XdVWUIX2sns%+nFko#.vp5IMOG]*&)%YR&dπU"\HgF#0F+aPc)oHTbXS?,twJl.5Sql&H#>ZSICAJ2;R-85D:T-^N/B^Ap=Z*L2tDπU":$?WOKaiVKyJO8M_SkSi&wd;d8thwJ'oio=\Qcu_udB9q>E>yL-%(]2q_IUb/z*πU"(_;G\;1\ao^8T7K#eu#l(tq:2$.1Yeu(i3MV_:>DC?X?0a<<Em:&b84da]fJSI6πU"kIh)awd>CD'9PXei76uGDmF'a%K9N5-OpEdBfmk,mC;?9_GFaZGl?EfdIcq9m78πU"gq$g4x&9H>^'dA^#ZC9U-$#\f4Ww#xz;xe&o;2_nZ;Bc'Hf&_hZ?Bc\Hf&_dZ?FπU"Ng^bZc8rwOhd1>+-m\h=<xo/dGwb4:KrgU>'=L%<>RR>Z4nMo$Qlc4n8;K?4]G(πU"IRjam.n(pi6n-+gadu<n?-LFRY3cCW_/j:gDs\()\s'&rp%uqMuhTZZaIKs(;8^πU"?-B_7I4me>/)B>B\u0Z^-7pHfnn8D,tf%/uBeUJ80/gX]j_.Fu\sax]'GN/Sg.kπU"hZah=1L*BvHA3Dv8%[jJ_IFK8*Dtz7UQwKj.jQ_>CLI4za9cH>iAf?$4>fT(ycoπU"osJuT(OefFA,_9./Xr0DCt*)N3damlqrReACv].1X]dpkNw*7Wo55:;2:t*U?oVπU"CCXeY,w*wf6SUuEhHpdEcA:c/=^ZRKb;0<)41(JABKOM+S$DU%ek%,'BY+vj1NrπU"a-(.0v]dfrqxDjl+o6B5dIm&7Fr1mN#[1+q_+deIn+EL$hj,_lc.R(nUoZP'b13πU":llb[K7TZ<pTK:JnPK&'j/t,u7(jKt>ui]af;FeJi.K&r2.RD8-M$PkIRZtl9Z-πU"omgC(ue4Tctn/Tt5;eHvT_J#dsWd4x;R8CY4HXUX9FuVX9EiL;H*NL((TXz5&-jπU"+<#u(qkwu4Cpc>&iNDe/*.vm3Pqcj43Q(c7q/7isv(:k&x):4DCS,qGx0kl&Yz(πU"JI*.LoVPqcVz-:&ul(Yxh_dInL,(x&MNOdIon$%M8zdao?6s[PQncn5Vt-v:YtwπU"UdVIDxdbI=Lq,ZBy=IOHDIR/:789Og3IC]C%48Sy^YieJz8]\dl\\z51vR(n#D-πU"2JGd'8wQ]+Yh&I$w6V<Om7_z]8fs+_qKSx?v%N>#yu4Z4H0R\udP,jCipe473y^πU"b<sY^L<9?'chx\.(Vk9<c?#pl?9;wNu+2:dohc]Y-a-0Ye%,sSZ0T%8+2AYPQ/3πU"Ev=BAn+W%yKm0Ko;#1=$&)<h.v$](YaAl2i[v/LO.pNREMdLgrM&W5ev>eXWq7KπU"WFK%_8qJvv/k)x/^3wwp:)ZOb<:/#=%Q&*77m)c=)o]Vy#\2J2CMheDL&yZp_sEπU"?%5X:i)K%(/lX)*]W]EAHJel)JM]f=qM:Et?TFmn.D>8l,$FA*[]l?TfWFAxvU2πU"IX\ooQWvB'%\iJgQ1,cqc97hIog$S+L%GneFWej:Yv-pGQZ_u,qEuLeAMRR#)d^πU"]Ali>R%d_fD&_q<)\7W#m7;oib>G+YPAh^M?:VVJ>'MZDX:se$FZv]cEpwcgW&qπU"Y4R5YMM2o+%$b>6^s2AkjNdAgX'r'Ra%HmZm?:OLc3LE%^=X$jyMe6--%k/'ad;πU"qe(KdMrg92HEn#tE:+>](<9.+aBwt''*bL#E)j<_6.sPmo_;+:j,5gHss$6l_B4πU"3)*YAIFdvS;0a%%mxQlW1P*wL^])jLzd\^&&'*v9/*46;F0E;Z)I*/ujQ3QG0J&πU"Z?vEm4;u[\;a-t)c'p3\3\\]F4Llmht4MDovE6\W,AVn-n_h]0wxqX&j1b*cIVgπU"I)qUv<KC<4Ygy4yoZ_LVy=/Z4*'Zj'BOiT1eY;5)y#jrN_YVUGwpqIP4\,L4-\jπU"DyQ:[fl*rsKrh&MT%;k:#Tf(;O:.9jqV/>'%jgSi:*g;w>GSnvh[r8]XNoi:DB;πU"a.XQCJKWma'DdTL8bA'v+)XR-gTC/tV9gP1e\<%%bwZ)k8c,:bZC6r6^YkP6MBqπU"TcX^nVP-NV0p]MyT;8;d>)gk+kn_unz+gmUoZhGI)kdz7BCZ=bgPmHWX:O>fr_$πU"I?/=pyE(.rKOV55O%,WP&/;77];h]3GWF)YZq]Qkl2qf1%p[<l];i$=jQe6SOEJπU"aWm=P]'1i_qVf[#\Q&%?+^Gw<WG+3l+4Tp]/+N\ru?=JIUJ7o1E[ciR5]]J/VcrπU"F,lIx7&r&\,J&e]AlU7_1P/aDJX5(6GL3[3\Wt?$St_DcSrOYF\Y?\a^]AN%j?=πU"Id3Mkto'Vtc0G]/VL>9X\>;A-Y2:b=4sh+fK,TM#orw/.tQQjgN1#]gQjgG#eK1πU"3muI$m=5okAuG<qO(M<g*QF]Q_[I:Eeqs'=rC+9#w^p'oMW6UMUPs(eqO5B1xU6πU".v1XM&QVslEWD[=FUo^0.Pq)hcoM+]x<FF]Ua([n?RBO.,N;qkI8:EP%%xGmWb,πU":tq?rZV)r1DdxB$*6pl)b6UD1*&:v>50Cvo?_9WU^Gtv#gf[_4J1$qfZp*TA<O_πU"];#8#ftKM^zvZ(],.CN?*A&bJ>8-8F9J,8ze1dN%p>'^CwJ%L/fH41n'/Iu)C&/πU"-Mb[gn_MMQgf[<%r^),gia]SdS8uxl0-9b2lJQ#BP$Zod2Mz<rp4LLEA<E0jn7gπU"_-?wOx.?0L*N.-*65A;zUx$IcG5V&388U*05BdsV*8H.PZ3&Glun_mHTl'$9ffAπU"l_g6k?4q^32(B/u1fC+ODXr'$N$DjQ&xj.A/-snmt<^r8C-R57wJigA2dp2>U^nπU"Ts3i$Y3.oW?].nea[r^IrL4C[ybw$$?:CuM0CaMYl)MtK#ZGI^CLVUIWQ/*sh=\πU"$SodTv4QtioM'Xv6&o(k)nOOj7u6?2wf:)+IVa^^TL$i;:uiSiG5Gel[)uXPNYAπU"ty:Xtk\&-mj+Cj+/CwX\<_G]X73S93BsgJh;HjHzC)f2Tdx0#;,<K4i=b,]x-jDπU"Ij_rdjdYsJ;*BOCZ:FjCvt6J38Ycto;2qi610(+xc:tp*dpKUKo&(PT+5M3A47[πU"d3S7GZmTsQ6Zadn(sf8HbG8)&:44tNng6[G-fdmn^qOY+P+wgl:6l]5DEH*BLPqπU"'?.*/E8#8EP/F^E^)xp;&99OBB;]()sn<'I?1%<]z-9/B'-J;5R#3.-/d6%99NaπU"<kc0m=o?+=5H5*.HgE_OreO_%ReYB8_G0b*I6]78q'H,_/J8%-QeL4hU=Mc'M5AπU"TT2^dI?'P^LhPtU=m[\u)1xF5Br]9(&9UWLLiesEfI#s_1..5n'c)BgS9ClThesπU"=ILLs5&+E.IBF,Vg95Eq1p9KnIXMs5*;;:xV3,\V:.lWgSOEgY)>JFhBFVTQ0^1πU"hJFj,Q0tgMRFbQF,hc(t=;D(]R]kcag2-X(U37_DUWRW#nSw5kBK1,+#sG1EUCOπU"mF=5Tr*2<8ka&m7xQcbWAHmu=m-Lrb(H:jM[Vv1DEbTPq:[ziS$#SGm$BkTHYBXπU"U)tg,L9'/6$C^u.jhG=k:Fl9]?2_,JXy_1bbg[nlHc8Xi'Z)Flut7'>PNod=4e=πU"9biJY^vXFcjx2aQD/RTBBr/(.ap[mB?NHEbD'8xNJPWr4kd2,+;U5*tG2_xT'/]πU"gl>vC[0mqD$C*[AczhpVoW/?]&yj:Fo$J[SvR*>G[j%<XeC;QU\Nc9r9YuTrukhπU"1POI_;];6owi:+:QIl*1;7P?cq$buSB;kt7J4*iH$ERc4l9KUm#O=;E73.[<jcNπU"(1B,yy;sp+%4Z7mNJgmW[oGUe>G+rWmh,ybd?%novY.jh[pwUZ91&=xoKL6dri:πU"+PR-#rIWO8Eu5j0MjY4l<:i1FUP;M3K1tLdaNzD7?[NXxwt(_jN23?H^[wRbHRyπU"C<hi]7tOJ,mJfjaPKoTur5-MM:BCs1Yl/;K'ay=_t&.xgA.y#l$xfr%6#YF8V)UπU"=I78qeOnjw8>gu9YMWdlNiBfq_R#Fhleg7C/_R-d+cWV/F+U2E.v)pJAhEpE=IYπU"_#I/i^iqg+NOVll%\;*QS#hU_i,u=,zub$G*0BccS<a[Ke=7RD-KqS/N\o5Nn+(πU"[X%*J7sUBXMSbma74Yblw0(Umro\^lm.xO6B-l'UZNGJLD4[2+MP4.U5CZ'0z66πU"Z_emzUpD58aZw$hXX\_=,Ld:zFx)2KA\SepveYb_eyTlagj+LDwh,%Mxw9SgeM&πU"hi&ql&hNqD8IOszhY-qZW'#-E;u?8o<.O#]e1V5X_V2OKIqzKaM+Q?k>]%HdXjmπU"A$F&xM%HU.(XYNr$&D6g=h5D64aSPt\.o:nYYsX,Jd0D?Q)nnP*fiTNt[g'XIOpπU"ujuGro_?U-7upNhPt')[OKj;=RE_b&yXdJBj.*)cjW<$U2X0,S+SWc/to;PAiaGπU",ut1;8s'<3l6OJ$z0_0h4]sF]/U<PsNLI]QP<NOtip>02A)vi4?#$v;;&TgSvd5πU"6q1Izyyf8'uW3>Kk]=%HNM*^B4ooE[(Ps23^<B->eKZ1PxZ+b')I^FefeTKb#m;πU"Y$:25,a]oOIrF<o6%MSEj-#Crt#QV<\MA1CXeW)F'>s^kgK5V&TCk-0R^9A%7'DπU"^Xt4<WF:5/S$D&1t9GwR-nVyRRkIc;HqHR^GnUP1Gk<-'LV\mM3=g/Ax;>[/mP<πU"ucw>&(Va\#WDTcu6uUpBQjL&ZdgjYfA_>^,n.?tj<lhaW-disUz+b'qRlqhRk[TπU"7$8bz-r^Wg*<ul]%tX$f=:7_o$c4mA?XwttB3Whu940<^8bV2X3Kefa$#=Q)77=πU"H7Q([&=TB7?3fMD3EBC_XFw;v6*ZMvykmaPL*%t^$6(D'\-Dg[YrGpk#MR)7sOVπU"TE-0Nf6ugNfid//I=Q>J>R>q0Y8Dr>?qtj95,9\&q(Zb,3R3wgC?M-U'N/,Km2*πU"L2?IXHkCHCiU<$3o:/de_7Hk.1?lHu<2+)w$I'0$NWD621nAshNP&Tc+hbN09M&πU"/&OHU)Z7*2WO[DN,'k\]:YISUV%$?0Z/Se\Ih:n8__ar/891c[$LEZqpUw^V7sqπU"XSGl9=W'/+g0M'EY1U3.v4<aq\;./+Z9MDHy)SxBR3I1E^j]<?8R)WIDUjx=M\YπU"Tz]nlpEZed=*SnXbA9uW65fD6/\Et1p=QSl/STIBQ/Hu544&.[;1p<C=e1iWllQπU"Vygpw;nT&Sr=gvQGI-6.q_a^jWiyO7&C?g/fCEZpAG/&iY[GO38HO&i4m^9[bV)πU"qh^Q^'crbSrt*%Qg*q/-:3M*-kOC2%1J8k5Ju6FKrD-ZHk8-_hu3VD+l,BqSv]dπU">v)5P_>Nzl\x&dUrA/y^I;zb2t)d2#MBLl]J6YcDsEQZN26]tcR^']QHI.5<\LVπU"vnqV:rt1wVJtZjh,Ml)=?7_8_TX\k.n.QAd>19mzfb*R:e$C?lKJ7<Ae4LU\QZ_πU"UFM:&/]Qcx8XWYgjc8EpFF6H6nsEUF66?AJ$2e[VuX&(bml8mDW>mn28\bI*2O&πU"-ur7q^RdNRE5hPvh2DpE[88ra)AOwh*^m_M[(Z_d=ODf[['d4.)C]+8\t\lvTj'πU"BwmqK%Zf7t?:gE;&r5Bl/g5-<stL'(5b:Fl3k1ZPKI7KMCiIc(3DCVjP7hyKtQjπU">nHQLj<$4^g+?7g/BTC169$vM(61:ezM2VS.qsVYOu>)iT.UrRF39OV*XAMJx0XπU"N_tNk1IR[8f1Q_*WH4OH<#TpLdGN?8)6vN3P-:pI//tqcT0Ciy4)JZym:<tLo9fπU",Vo9]%,#c+fBbc=0+eE\)P3J'4*^U5q2t/_$:,f0\tkSu*MwX1J/?4aKks<o^EgπU"t%)P)6;ifCE]>d+XL-aDUW7<'Xuw,)(uMf0:KeqU:)U7b)gjdr6u.ZYKLiF?9FPπU"B$aLC72Kj89Us#vG)pQA*PUR+/G*$7#oOnx,.b=<)l+E9whCRc$j2i3HHG\]w>2πU",Cr^/MgDQk,j'-[i_gg$SMiiWX54+RxBOi+ph=*+*nzb.CadtO=$?uOq9>ztnbhπU"0EaZy>]IQs'2>8AAj0isr6=R]J[C\PYM'iP2TZ*k/4>GZm2Xg[xAS_1p<](5')3πU"]>WekxLRYc;EAYafS.ZAfosfL_nE-]:u>Ylosn-uX<wT$h8FI_wURHYpjb[[=NPπU"cb\pfj+Yz,u?aLYumL)p=nbPh[M^*OLA]In=+Cbi-cm.=JxlgS59nd4l6ZVL*:VπU"nxjCJ-[c$2'a1gaLeq(xpcqnUnLEsvfLjyp(L&Su'nWnj.Kr&5FY/^e.?Ybx_*OπU"I+VcTXC-qUEZg1GU83Vf8OrJi(vv8WoI81F_w\t;w6##tXs[X?wW\_W['?Dh(h\πU"CRUhCH?_>Hhs/(Cn<v.aLtrEm]GKh-PhzuFfQ3mQ,Y\1iIfah2AUD0p>GT__+L]πU"'YvUYVeQ6M$My]i1HoBR2PmYP[t1W*C+/86MLXnn_S<rS'3B9-T?bot5>5FXPbFπEND SUBπSUB V4πU"F>8'HtXHjM(A.=mfsCdw%>HjtWZO,E(H>rXKR=nX3I]b]npJA&'0nLD9ll:&9)QπU"#88iaK8oA6<kq\=&I<C?ZI[6zh,&m=ZUgRpSAu.J&_]M*s7m#]rMtuI;i7qb7RMπU"CpH:N+6JuQ?oU18oa>xT=LolCRobhPl?Fmk'Q+=*BPD&Tn0AhhZ>;*?I2a,*$c*πU"QEY?Tk3f\#nc[]x=.[EFeF7bgAHv_wL^VmUsLI_Y?ba,^B/+sAF#sI6%lM&cW8KπU"6$6X(H>/80-4Rtu%=B?,9r1=:WCPaWN]RICN[QD[3Vvi7Wd5=,(D,dFHh#^LQT=πU"ji%]U?$,RlO>1S(rAw>\E<193gI%xN=<*Slkx2#0p;:N]3*Yp9S4JOzBR<WbtZtπU"c%9Z)w_1^qa]T>]BhH%s'-)JwJCau9n_#UO_s.MsugVAnD6U4D+UL9?9#%=:Dy1πU"&%uwl&7OP1C943pO/O]QiS2'MT7hiFZtG=B>yHzN)[#D&I[x<hX#d;aN?nGb3N<πU"i]ShRZK1Gk3g3rQ\?C#ByjmgBr$eps?K1Gk)dAkT#LzWdx^yzTYN.V)(E\YU:)AπU"G:DJ&6)uY5F7W8*VN+bi.7GmT,6bRU^<[sH][j[zXrJPkx:>[Wn1T1=G=+&A+(^πU"]FeS'Uf.9pOTKp.)+XqC7aZs*;fx/Lj.Px,Js(\PE$5E6:U_L1H];1iI>1i8=+FπU";1A)>1)88+&g%1EIOV9RZ;qe+w?E9BX_RX=A8=+>SECaRN/<k(2spM$;AT$/b(dπU"uVf]AzV3nRt<1<Fj9f,6m?BZ\p.0H9\5?,R8FCBKt#BdU.+[PSTE8yb0r=k0j8*πU"RhX;&r'9YmqG9xid:o7[zIe%mM4e+cQs[:4N:IHlqA'h//FOj0RE;Qlxezp9UnZπU"naf;TxL#3r8sSmoGtX5Xt/w,t*g.6qPtm-tD7d/)7,<Mc_TJi+rwVY)tXy[9I_5πU"2azdw8&I>cGBgOScwt.BL2I'YPC_%]NG[pEuo__7K&wLdu62scqJBn(KWqIBtZfπU"Ffk,6(C<^i^aS\'kZa_\DMhhtYYrszPMnhXeojDXhT>\Vv\e^\=^V9Wc^NKP.fsπU"\G)T)N-,;\+-\NXDd)V>h%]m7_kCE4f?Z#[e),2CnQmCU4+<n/V8Pd=)VM\2,y)πU"ZWh/u>M*2H.mL#IZbF]xv>+0/c>HNLAM^Wn7l&)\;oMs_4_'PzxZtiA4fA/Bc>:πU"Dt)J=ysZirax,u<oTQ'PVv##>2WJg-B&uVL'/+b/QWE0bhu-.#r64=3\;j(4_]fπU"BsCd6[(oT>q_U\JS7a1ksQ'J-1<zFRdJEN4mATIe#'oBwYtiqwgIb1o^ulNQ9)sπU"MUnq5&_pSWoBIS-eZ7Q_&?n58v/XZ53>*V7zLbyXm7mEPSaKee&5[P#X&bbk8JrπU",5ed8l;[ei+E_L__x/u\k36(>$Hb=T[gtk'otup<nRQZ$)$J]%1Pn'TV*63JVbTπU"%o[O/0,h1[d#65p^LPPhiL>5aB2C$;XB*+R7Muqi4Mhx'6h1.85;#HUMRcS^6P^πU"D+ukKr#r]uCLh?Z7k4uEvVPT7Bg43U&B4NpdN+T77pD)W#NZc<J=GV(KFmG*o\-πU"0%],L=&_i&ZD]Y^0jA\o5k2Lq,uQA#n9\=)c>D6ZJ,ZspF_B0:C7\8n$^XO=*qlπU"X)q]^Y]rL3H^gtSg335MeVURgRUC/oWc_hd$&b36qW&[WZ2JToSt]%^LTQ(+5jNπU"(Eehbg;X0padZI$;j?3?3)V?93Kx3>;LW_kdAKm.0kJ/,F^Tv&w*-FQGmeeO+bsπU"S.mQoM^;'ZAn;K'8+fGBn=f&&[j$'qDo)+\r(%Yoo*fb?_(&Z^Z%9zHFeJR\qYOπU"4aPBIfZh&E-Cc&8g\57a(^-d#6-k[N$-\foFxR(3zXbmaH0vPy'<u)yzTRRV?dSπU"ox9stB<>C_5ITA,-CXC\jwnGT']/^w?.1L2Xoo?zZa/B4M8s9#\v8yeRry\<'<^πU"HwqA*g-VRY60?BfhW/Y(V(Z.&T[4Xrq$aSUpIMwnkc<7vh7ft1DxOG+y.h<D?O_πU"jmO*jG+Yc_&Zju+_*ff8e>&T%0H(s'h+J1BNaZ=)OIEg+ytUl-JQ*y\:.o?M1XoπU"?;:'AZIMBJWHC*dvao?;'(<*Obr0Qe,HD#cv)C;u_pY6RId=FxDkz]#.r43egFoπU"/,zM1jvQlfgI(:^:6;IMxbvmwo+M#huNtJ'n-hNP4I6sZr2^hGFc[NF.w1rhi)HπU"f(,*54=e0o*:yf6Wfs,^)<:-[sdLnFD*3(d60JcS>IGgad.7.K=zR21']9(^0B%πU"$xcB52=IWlZ?_HGRA.tNBInzI0S^E^MU1k:s<,JbYC$g=sgM<n?a;GTwf:SN5KNπU"8RJwRSDKzPEjU_Mggn=KELe+e:Wz6ZmOqZny02<.,y'qr'WCF#<z>afS4w+Dg+6πU"d/*TyWEBrcooG>m+B0V666E#qFYNeIfm4_o^pD0iDm,Cvkn^Uu^g(^Nr_V?%kJpπU"bOKmM<IYUjql+FQ?e48+S?e_4,U?2O4+Wr?Z]g-EGE8#j]Ln(//nwnR+)u%1GO%πU"R.\64J2i0s3O>es-L8^0Pw_\#MXQ(q%u82o^[2gLGywfsKj*tu28:Jo.S7wB/-fπU"i6W;P?Qq[f5PG3v6&4rj33>R=j5G8<4$]w:FvNH\_Ui^zEnQtQ,2b0F>8T/.6=+πU"Q1w1f'BZXR_;43<%mlW*Yo7#A*RO%OEdg(UWUpKI*<$v;FB2T:RAcMur3kXK>niπU"A:si]Ye(siFcvl9r6EB0^lWtfpaWHEJatLm6H(rO#7xTv/(<UxuMlocSCmr)8f2πU"U8J$Cch5V(g17a2AFWdOq+)?QCRoff'l2Gh,XFYaRIK$)=sOAxP5F9IbGnU\Dn1πU"4KNb'8miGn^x99)hM=qKapq7bcr7iS$Xfmb[&BPSC:lE[,Z<kir#H\&W\+:%1FbπU"KVWP#GOD:i2(U>\rVU'G:$/#JBz_'KBro%MbGaj^X;_uh0dksL\TjlWpf8-+S$<πU"+iXoJJk*BMiY>z<_F0z8%moeZ/C<1p4*.7H4&W2B2,W%ISC1:J4a0;a=r^ba:t^πU"re4BlujLjCkhF?Dktn?PBuX:RB/NC>L/N4FLsDWXj?8$g/Ps7Z9D/6tk/j*%=H&πU"5P[e%sq-JEw-yMHfqs.InkM2:nwK7_x[caa%<?,<<#$;80pM7:5GLUK>7;9,E5pπU"FL\:H+*i==rOknHBs8#bbb,5af[\XKCnX2I4>O,O%dV3ZB)rx.5Isy9'U?m32HMπU"YRIJSC6Mx*m.)EtqfiWpTfM85lKYy9.HC2I?VKFLv;^fn;XD/'Fn/I7p#Pbl>t6πU"eY/apqj.0Mb2.6WpmG],oaeHOnoqg;wUU25c\-w#Uw1IE&hC\tes.0tpE,0NoZBπU">h,IU[%-b?='jkl?[)ybTr(Ng*nF8='+RjTk84G5H4lP8>>9-J\u/lm7BmtYi=PπU"^0wkTFOnH-^bAOD-t])h;Y(M9RVoSAAMPbiV'Q(wxG5n]FjjTffx&81nL;(E&x=πU"ju\,P#DZlV]D,b-WJm9i=P<>_EU;bL7j%ELAsf.>T%:u0-RW?Yc=a.Kg#J4U+?sπU"/xMRzrPZUON$I,ARU=i0/8Ya<8njUYrZQ'ds/X]3Ne%C9,t&aKYgLG'17\:8Hn[πU"q8FP'W_pMhv=2.jmVIaLL'm>&U3$k%KAuwZhBh)/aYC]j%#k0/i.VtsY#==TGZDπU"T5_525jk==M2?^)u$2LjnIf?)i)ijW-5epNEVlhUOgg9md]OOeKn08;L^1:(gd)πU"e_7oSSB^NT']Vl&l/4J'33*'_xbnq)H4J+1lbg_71a%s2Lq(2$x>1Qd'=*NntUYπU"BuImNNN>_:kGsJ-lo5Vp-hWbcXcOhCVJX8BfdpJlXs>ue-/njXsrvbVL*cGNgLDπU"jkd$(zpVJLf<7qcbhBwIm.uI7*J>&a_.Ml:mV6w6,gP8uJr>UCD/h;UDIpuBgJZπU"IJ.\nZytO*lJdA6pxoePEqvI-KOTU=?bn-&tw22r0jFLVjc\[kl5^fojm#w3g#?πU"gXRQf8?IFLk*u8UrSO>;*(wD'ml,lRm&[EJpGqY%x=eoZx$%mfwNthnJAmda[b_πU"\AxaFGyf7cxhP7&;r4[csD/WDBHplw2]Ha0Ewa-%hX4?_7C(il8loUcatnnFi7AπU"_'Js(csJ3>SZ$N0QVI^F417O#PIG'Jtt#W\:JakB=Ep\G[qJGJ6Zm+luF\ELu$EπU"\,5w*dZDX1K7'xDup%()9%%'%-%2kXSFTL&_]&*%%%&V%%%%0%%%%hmpq%nxyS[πU"huxlO-OB\V?4i46ip4%\QxR.JY*t[s1Bxw-xp-[l)-SCC'P:J;rqGY[k+P)2cpPπU"&OgCkv%vV)M,DmTi]C5F.Gr.n$&8+Hh74yC-mFzJRDqw\lA$f?7%E%up%()9%%'πU"%-%3uPQFgzet%&L%%%%X&%%%.%%%%qtty%YSynsq&G6+2;e1XeZ$S'X-i8+N^vHπU"'=1>F%*JhU-;f&*dJHsm:-[9G:mk&$8$&)chl-0Bup2VZ[MRR8&hrY8)8vP3S?OπU"G?CNmU5mWEP%nIu6,qH^5Q03K),00sv,hQ*tW18kDt=u,j4cgMQ5hf99h_)\id$πU"m)iw(b.up%&'9%%9%'%[-%h4/<F4p5u<5%%%%X&%%%-%%%%%%%%%%%%E%%%%%%%πU"%%ynqj%Synq%up&'%9%9%%'%-%17$=FPRSzf&t%%%%X&%%%,%%%%%%%%%%%E%.%πU"%[%%%%un%VSyn%qup&%'9%9%%'%-F%&f>pF)se)U^%%%%X&%%%,%%%%%%%%%%%EπU"#%%%%%&%%u%nWSy%nqup%&'9%%9%'%#-%<Me<F+$0'z7%%%%X&%%%.%%%%%%%%%πU"%%%E%%%%/'%%&&fqq%VSyn%qup&%'9%9%%'%-I%GM<1Fmp3%wi%%%%X&%%%.%%%πU"%%%%%%%%E#%%%h#'%%&%fqqW%Synq%up&'%9%9%%'%-%1P]=F7Tap9&p%%%%X&%πU"%%-%%%%%%%%%%%E%%%%)(%%%un%VgSy%nqup%&'9%%9%'%R-%ORnLF>('7Ix'%%πU"%;;%%%/%%%%%%%%%&%%E%%%'D(%%.qj%j%qVSi%fyup%&'9%%9%'%#-%iMn<FPpπU"//5,%%%%X&%%%.%%%%%%%%%%%%E%%%%k+%%%qtty%XSyn%qup&%'9%9%%'%-I%]πU"M<UFeSs)AI%%%%X&%%%.%%%%%%%%%&%E[%%%C%+%%q%ttyW%Synq%up&'%9%9%%πU"'%-%1SM<FA(3vZ&O%%%%X&%%%.%%%%%%%%%%%E%.%%:,%%%qt%tyVS%ynqu%p&'πU"9%%9%'%%-%x_M<F-K2;mG%%%%X%&%%-%%%%%%%%%%%%E%%%%7-%#%pj(%VSyn%qπU"up&%'9%9%%'%-L%,M<FF&4b*)K%%%%X&%%%-%%%%%%%%%%%E[%%%)%-%%p(j(WSπU"%ynqu%p&'9%%9%'#%-%L)M<F%D<rJJ%%%%X%&%%.%%%%%%%%%&%%E%%%%w.%%%iπU"tt%wVSy%nqup%&'9%%9%'%I-%WM&<FN$6)MY%%%%X&%%%.%%%%%%%%%&%%E%%%'πU"m.%%%ittw%WSyn%qup&%'9%9%%'%-O%=YSXF3AX+5$'%%%-,%%%-%%%%%%%%%&%πU"E#%%%t%/%%m%jquS(y'yu%p&'9%%9%'[%-%))d<F6i2=mN%2%%,&L%%*%%%%%%%πU"%%%%%E%%+%+2%%%mxS%V[up%&'9%%9%'%I-%Jze<FYx(vTC%%%%l%%%%1%%%%%%πU"%%%&%%E%%%&y#%%%utns%yjwV%Synq%up&'%9%9%%'%-%2g\IFC?NWB'M'%%%f-πU"%%%,%%%%%%%%%&%E%7%%k#%%%vK%fSif%yup&%'9%9%%'%-I%U]=#FpH^(EW%%%πU"%X&%%%-%%%%%%%%%%%E[%%%d%C%%u%nWgS%ynqu%p&'9%%9%'#%-%E_z<Fm9AW;πU"P%%%%l%%%%1%%%%%%%%%&%%E%%(%hD%%%utn%syjw%WSyn%qup&%'9%9%%'%-X%πU"t1C4F<L7)Gp%%%%X&%%%/%%%%%%%%%%%E[%%%g%D%%u%wjxx%VSyn%qup&%'9%9πU"%%'%-R%%2CpF,%r)Fw%%%%X&%%%0%%%%%%%%%%%E[%%%0%E%%u%wjxx%VgSy%nqπU"up%&'9%%9%'%m-%q1&CF't3wh[%%%%X&%%%/%%%%%%%%%%%%E%%%&WF%%%uwjx%πU"xWSy%nqup%&'9%%9%'%[-%Y/&BF0r2mtW%%%%X&%%%0%%%%%%%%%%%%E%%%%aG%πU"%%uwjx%xWgS%ynqu%p&'9%%9%'%%-%#E/BFdUenRT%%%%X%&%%,%%%%%%%%%%%%πU"E%%+%fG%%%unX%Synq%up&'%9%9%%'%-%43/BF3'5TV&c%%%%X&%%%-%%%%%%%%πU"%%%E%.%%fH%%%un%XgSy%nqup%&'9%%9%'%[-%J/\BFs%2,OQ%%%%X&%%%/%%%%πU"%%%%%%%%E%%%%vI%%%uwjx%xXSy%nqup%&'9%%9%'%[-%M/&BF]q.xa^%%%%X&%πU"%%0%%%%%%%%%%%%E%%%'tI%%%uwjx%xXgS%ynqu%p&'9%%9%'%%-%p$%>FWX+QLπU"O%%%%X%&%%,%%%%%%%%%%%%E%%+%,J%%%unY%Synq%up&'%9%9%%'%-%4y%>Fb4πU">]7&$%%%%X&%%%-%%%%%%%%%%%E%.%%'K%%%un%YgSy%nqup%&'9%%9%'%m-%l1πU"JCF%k2AjP%%%%X&%%%/%%%%%%%%%%%%E%%%%4L%%%uwjx%xYSy%nqup%&'9%%9%πU"'%[-%^/&BFfC6JhU%%%%X&%%%0%%%%%%%%%%%%E%%%'1L%%%uwjx%xYgS%ynqu%πU"p&'9%%9%'[%-%_DcAFd&sS(7[*%%#%7%%-%%%%%%%%%%%%E%%(%6M%%%uwj%xxSπU"V%[up&%'9%9%%'%-X%m2BdF=_0-Gv)%+%lA%%%,%%%%%%%%%%%E#%%%n%R%%q%tπU"ltS%V[up%&'9%%9%'%R-%tu/DFJl*hKz%%%%X&%%%/%%%%%%%%%%%%E%%%':W%%πU"%hfsi%qjSy%nqup%&'9%%9%'%m-%O-eFFyL*+OI%%%%l%%%%.%%%%%%%%%&%%E%πU"%%%cX%%%mjfw%ySyn%qup&%'9%9%%'%-I%(HG^F1Y;+I3/%.%,L%%%-%%%%%%%%πU"%%%E#%%%X%X%%n%sywt%SV[u%p&'9%%9%'#%-%a_ZSFrsE>pA#'%%d%,%%1%%%%πU"%%%%%&%%E%%(%8c%#%wj%%nxnt#sSy'%yup&%'9%9%%'%-L%9YSOF[mt(aZ%%+%πU"1%%%%1%%%%%%%%%&%E#%%%*%f%%m%nxht%wjxS%ifyu%p&'9%%9%'#%-%dE5IFQπU"ha7+A%%%%X%&%%/%%%%%%%%%%%%E%%%%5g%.%g&f%qqVS%ynqu%p&'9%%9%'%%-πU"%1E6IF6[%#f'%%%%X%&%%/%%%%%%%%%&%%E%%%%%h%.%g&f%qqWS%ynqu%p&'9%πU"%9%'%%-%\_yKFWb0hPw%&%%?%;%%/%%%%%%%%%&%%E%%+%Oh%#%qj%%jqWS%ifyπU"u%p&'9%%9%'[%-%p^&PF)D'IGA%)%%,&L%%+%%%%%%%%%%%%E%%+%uj%%%jsi%SπU"V[u%p&'9%%9%'%%-%Z*&IFvP/oQU%(%%X%?%%0%%%%%%%%%%%%E%%(%ao%%%lfrπU".jt%j%wSV[%up&'%9%9%%'%-%3oxKFSJl,3&O%%%%X&%%%/%%%%%%%%%&%E%%%%πU"fs%%%xy%fnwx%Synq%up&'%9%9%%'%-%4r)KFD3om%&>%%%%X&%%%/%%%%%%%%%πU"%%E%7%%bs%%%lm%txyV%Synq%up&'%9%9%%'%-%6L*KF,A(mi&I%%%%X&%%%0%%πU"%%%%%%%%%E%.%%Ot%%%lm%txyV%gSyn%qup&%'9%9%%'%-X%[*K7F_Fk(7>%%%%πU"X&%%%0%%%%%%%%%%%E%%%%H%u%%l%mtxy%WgSy%nqup%&'9%%9%'%[-%J*JKFfcπU".&K:%%%%X&%%%/%%%%%%%%%%%%E%%%'4u%%%lmtx%yWSy%nqup%&'9%%9%'%d-%πU"R*8KFGP%t/y%%%%X&%%%/%%%%%%%%%%%%E%%%%sv%%%lmtx%yXSy%nqup%&'9%%πU"9%'%d-%/+SKFa<4vg*%%%%X&%%%0%%%%%%%%%%%%E%%%'Cv%%%lmtx%yXgS%ynqπU"u%p&'9%%9%'#%-%EE+KF15VNSx%%%%X%&%%/%%%%%%%%%%%%E%%%%sw%%%lmt%xπU"yYS%ynqu%p&'9%%9%'#%-%L$+KF'K?B/*%%%%X%&%%0%%%%%%%%%%%%E%%+%Bw%πU"%%lmt%xyYg%Synq%up&'%9%9%%'%-%1wXSF)Agq&'/T%%',H&%%.%%%%%%%%%&%πU"E%%%%rx%%%mx%VUWS%gfxu%p&'9%%9%'#%-%k_XSFLO&_]*#%%%V%%%%0%%%%%%πU"%%%&%%E%%.%OR%%%hmp%qnxy%Shux%up&'%9%9%%'%-%3uPQFgzet%&L%%%%X&%πU"%%.%%%%%%%%%%%E%R%%'R%%%qt%tyYS%ynqu%p*+%%%%%]%%]%>%1%%w&S%%%%%πEND SUBπV2πV3πV4πCLOSE:IF S=175AND B&=Z&THEN?" :) Ok!"ELSE?" :( Bad!πSUB U(A$):FOR A=1TO LEN(A$):C=ASC(MID$(A$,A))-37:IF C<0THEN C=91+C*32πIF K<4THEN K=C+243ELSE?#1,CHR$(C+(K MOD 3)*86);:K=K\3:B&=B&+1πS=(S+C)AND 255:NEXT:LOCATE,1:?STRING$(B&*50\Z&,219);:END SUBπBrent P. Newhall               ILLINOIS JOHNSON V1.0          comp.lang.basic.misc           12-13-96 (12:35)       QB, QBasic, PDS        423  13429    JOHNSON.BAS ' ILLINOIS JOHNSON and The 823rd Crusadeπ' by Brent P. Newhall (BrentN@juno.com)π' Version 1.0.0ππ' YES, it's another exciting adventure of the intrepidπ' Illinois Johnson (TM).  This time, our hero isπ' searching the Caverns of Crok (TM) for the fabledπ' Lost Toga of the Ingledorfs (TM).  He'll have toπ' dodge falling boulders, operate wooden elevators,π' collect charges for his Neutron Blaster 9000 (TM),π' and use his trusty horse whip!  Can he make it to theπ' blue doorway on each level before his air runs out?ππ' [LEFT] . . Move leftπ' [RIGHT]  . Move rightπ' [UP] . . . Jump up in the direction you're facing, orπ'            move elevator upwards if on one, or moveπ'            up whip lineπ' [DOWN] . . Move elevator downwards if on one, or moveπ'            down whip lineπ' [CTRL] . . (Yes, the CTRL key works!) Fire Illinoisπ'            Johnson's (TM) Neutron Blaster 9000 (TM);π'            must have at least one chargeπ' [ALT]  . . Throw whip upwards to latch onto specialπ'            bouldersπ' [ESC]  . . Quitππ' You:     Wall: █    Boulder: ∞    Air sucker: π' End-of-level doorway:     Special whip boulder: °π' Neutron Blaster 9000 (TM) charge:     Elevator: ╤ππ' Notes:π'   Aquarius (aquarius@cryogen.com) wrote theπ' inspiration for this program, so thanks are due toπ' hir (gender-neutral pronoun).π'   There's only two levels, just to give you an ideaπ' of the controls et al.  Any takers on new levels?π' Just add more DATA statements at the end of theπ' program (each level is 40x24) and change the end ofπ' the main program loop (IF level = 2 THEN ReallyQuit).π'   There's a fake wall if you look closely....π'   In the level statements, upper case indicates aπ' solid (wall, elevator); lower case a non-solid (air,π' energy charge, doorway).π'   "Falling into each level" was an accident, but Iπ' think it kinda adds a neat intro to the level....π'   The whole game is pretty simple; in fact there areπ' no bugs that I know of.  The engine is fairlyπ' straightforward, so you should be able to skimπ' through the code with little difficulty.  It runsπ' perfectly well in QBASIC 1.x and VBDOS.  Have fun!π'   As always, suggestions, comments, criticisms,π' additions, improvements, etc. are welcome.ππDEFINT A-Z ' All numeric variables are integers by defaultπDECLARE SUB LoadNextLevel ()πDECLARE SUB MoveBoulders (xpos, ypos)πDECLARE SUB PrintChar (arg)π                πCONST FALSE = 0, TRUE = NOT FALSEπCONST LEFT = -1, RIGHT = 1 ' For player's directionπCONST AIR.SUCKER = -6πCONST WHIP.LINE = -5, WALL.FAKE = -4 ' Walls and stuffπCONST ENERGY.CHARGE = -3, DOORWAY = -2πCONST BOULDER = 1, WALL = 2, ELEVATOR = 3, ELEV.COLUMN = 4πCONST WALL.GRAY = 5, STALACTITE = 6ππSCREEN 7 ' Text display at 40x25 with 16 colorsπDIM SHARED x, y, airπDIM SHARED grid(1 TO 40, 1 TO 24)πDIM direction$(LEFT TO RIGHT)πdirection$(LEFT) = CHR$(27) ' Arrows for displaying directionπdirection$(RIGHT) = CHR$(26)πdirection = RIGHTπlevel = 0πDOπ  quit = 0π  LoadNextLevelπ  GOSUB PrintLevelπ  ox = x: oy = yπ  energy = 0 ' No spare chargesπ  whipactive = FALSE ' Not currently using whipπ  Display = TRUE: GetInput = TRUEπ  level = level + 1π  DOπ    GOSUB ProcessInputπ    GOSUB DoAirπ    GOSUB PrintAllπ    i$ = INKEY$ ' Mask out INKEY$π    t! = TIMER: WHILE t! = TIMER: WEND ' Delayπ    i$ = INKEY$ ' Mask out INKEY$π  LOOP UNTIL quit > 0π  IF quit <> 3 THEN ReallyQuit = quit ' Not finished levelπ  IF level = 2 THEN ReallyQuit = 3 ' Last level!πLOOP UNTIL ReallyQuit > 0πENDππPrintAll:πIF Display THENπ  Display = FALSEπ  LOCATE oy, ox: PrintChar grid(ox, oy) ' Display player's old posit.π  LOCATE y, x: COLOR 15: PRINT CHR$(1); ' Display playerπ  oy = y: ox = xπ  LOCATE 25, 5: PRINT direction$(direction);π  LOCATE 25, 10: PRINT "Air:"; air;π  LOCATE 25, 20: PRINT "Energy:"; energy;π  LOCATE 25, 32: PRINT "Level"; level;π  GOSUB CheckPhysicsπEND IFπRETURNππProcessInput:πIF GetInput THENπ  kp% = INP(&H60) ' Get keypress in kp%π  IF kp% < 100 THEN ' &H60 is > 100 if no keypressesπ    IF kp% = 77 THEN ' [RIGHT]π      direction = RIGHTπ      GOSUB MoveLeftOrRightπ    ELSEIF kp% = 75 THEN ' [LEFT]π      direction = LEFTπ      GOSUB MoveLeftOrRightπ    ELSEIF kp% = 72 THEN ' [UP]π      GOSUB InputUpπ    ELSEIF kp% = 80 THEN ' [DOWN]π      IF grid(x, y + 2) = ELEV.COLUMN THEN ' We're extendedπ        Display = TRUEπ        y = y + 1π        grid(x, y) = -1π        grid(x, y + 1) = ELEVATOR ' Move elevator downπ        LOCATE y + 1, x: PrintChar ELEVATOR ' Displayπ      ELSEIF grid(x, y - 1) = WHIP.LINE THEN ' On whipπ        IF grid(x, y + 1) < 1 THEN ' Have space below usπ          Display = TRUEπ          grid(x, y) = WHIP.LINEπ          y = y + 1π        END IFπ      END IFπ    ELSEIF kp% = 29 THEN ' [CTRL]π      IF energy > 0 THENπ        IF direction = LEFT THENπ          changex = -1π        ELSE ' direction = RIGHTπ          changex = 1π        END IFπ        IF grid(x + changex, y) > 0 THEN ' Something to zap?π          FOR cnt = 1 TO 5π            IF RND > .75 THENπ              COLOR 4 ' Red 25% of the timeπ            ELSEIF RND > .75 THENπ              COLOR 14 ' Yellow 25% of the timeπ            ELSEIF RND > .75 THENπ              COLOR 12 ' Bright red 25% of the timeπ            ELSEπ              COLOR 8 ' Gray rest of the timeπ            END IFπ            LOCATE y, x + changex: PRINT CHR$(15); ' Display starπ            t! = TIMER: WHILE t! = TIMER: WEND ' Delayπ          NEXT cntπ          grid(x + changex, y) = -1 ' Zap!π          LOCATE y, x + changex: PrintChar -1 ' Displayπ          IF grid(x + changex, y - 1) = BOULDER THEN ' Boulder?π            MoveBoulders x + changex, y - 1π          END IFπ          energy = energy - 1π          Display = TRUEπ        END IFπ      END IF ' energy > 0π    ELSEIF kp% = 56 THEN ' [ALT]π      GOSUB InputWhipπ    ELSEIF kp% = 1 THEN ' [ESC]π      quit = 1π    END IFπ  END IFπEND IFπRETURNππMoveLeftOrRight:πIF grid(x + direction, y) < 1 THEN ' Not walking into wallπ  Display = TRUEπ  IF grid(x, y) <> WALL.FAKE THENπ    IF grid(x, y) <> AIR.SUCKER THENπ      grid(x, y) = -1π    END IFπ  END IFπ  IF whipactive THENπ    whipactive = FALSEπ    xpos = x: ypos = y - 1π    done = FALSEπ    DOπ      IF grid(xpos, ypos) = WHIP.LINE THENπ        grid(xpos, ypos) = -1 ' Erase whip lineπ        LOCATE ypos, xpos: PrintChar -1π        ypos = ypos - 1 ' Move up furtherπ      ELSEπ        done = TRUEπ      END IFπ    LOOP UNTIL doneπ  END IFπ  x = x + directionπ  IF grid(x, y) = ENERGY.CHARGE THENπ    energy = energy + 1π  ELSEIF grid(x, y) = DOORWAY THENπ    quit = 3π  END IFπEND IFπRETURNππInputUp:πIF grid(x, y + 1) = ELEVATOR THEN ' On elevatorπ  IF grid(x, y - 1) < 1 THEN ' Air above youπ    Display = TRUEπ    y = y - 1π    grid(x, y + 1) = ELEVATOR ' Move elevator upπ    grid(x, y + 2) = ELEV.COLUMN ' Add columnπ    LOCATE y + 1, x: PrintChar ELEVATORπ    LOCATE y + 2, x: PrintChar ELEV.COLUMNπ  END IFπELSEIF grid(x, y - 1) = WHIP.LINE THENπ  Display = TRUEπ  grid(x, y - 1) = -1 ' Remove whipπ  y = y - 1 ' Move upπELSE ' Jumpπ  IF direction = RIGHT THENπ    IF grid(x + 1, y) > 0 THEN ' Air at target positionπ      IF grid(x + 1, y - 1) < 1 THEN ' Something to land onπ        Display = TRUEπ        x = x + 1π        y = y - 1π      END IFπ    END IFπ  ELSE ' direction = LEFTπ    IF grid(x - 1, y) > 0 THEN ' Air at target positionπ      IF grid(x - 1, y - 1) < 1 THEN ' Something to land onπ        Display = TRUEπ        x = x - 1π        y = y - 1π      END IFπ    END IFπ  END IFπEND IF ' Elevator/JumpπRETURNππInputWhip:πIF NOT whipactive THENπ  xpos = x: ypos = y - 1π  done = FALSEπ  DOπ    IF grid(xpos, ypos) = STALACTITE THENπ      whipactive = TRUE: done = TRUEπ      FOR cnt = y - 1 TO ypos + 1 STEP -1π        grid(xpos, cnt) = WHIP.LINEπ        LOCATE cnt, xpos: PrintChar WHIP.LINEπ        t! = TIMER: WHILE t! = TIMER: WEND ' Delayπ      NEXT cntπ    ELSEIF grid(xpos, ypos) > 0 THENπ      done = TRUEπ    ELSEπ      ypos = ypos - 1π    END IFπ  LOOP UNTIL doneπEND IFπRETURNππDoAir:πIF t$ <> TIME$ THEN ' A new second!π  t$ = TIME$π  IF SuckingAir THENπ    air = air - 5π  ELSEπ    air = air - 1π  END IFπ  IF air < 1 THEN quit = 2 ' Out of air!π  Display = TRUEπEND IFπRETURNππCheckPhysics: ' Handle physics after new display (i.e. falling)πGetInput = TRUE ' To handle all ELSEsπIF grid(x, y + 1) < 1 THEN ' Let him fall!π  IF grid(x, y - 1) <> WHIP.LINE THEN ' Not on whipπ    Display = TRUEπ    y = y + 1π    IF grid(x, y) = ENERGY.CHARGE THENπ      energy = energy + 1π    ELSEIF grid(x, y) = DOORWAY THENπ      quit = 3π    END IFπ  END IFπEND IFπIF grid(x - 1, y - 1) = BOULDER THEN ' Boulder near...π  IF grid(x - 1, y) < 0 THEN ' Nothing beneath itπ    Display = TRUEπ    GetInput = FALSEπ    MoveBoulders x - 1, y - 1π  END IFπEND IFπIF grid(x + 1, y - 1) = BOULDER THEN ' Boulder near...π  IF grid(x + 1, y) < 0 THEN ' Nothing beneath itπ    Display = TRUEπ    GetInput = FALSEπ    MoveBoulders x + 1, y - 1π  END IFπEND IFπIF grid(x, y) = AIR.SUCKER THENπ  SuckingAir = TRUEπELSEπ  SuckingAir = FALSEπEND IFπRETURNππPrintLevel: ' StraightforwardπCLS ' Extra line for status at topπFOR row = 1 TO 24π  FOR col = 1 TO 40π    PrintChar grid(col, row)π  NEXT colπNEXT rowπRETURNππDATA 3, 3, 60: REM x, y starting coordinates, airπDATA "BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB"πDATA "BBaaaaAaaaaaaaaaaaaaaaaaaaFFFFFaBaaaaaBB"πDATA "BBaaaaAaaaaaaaaaaaaaaaaaaaaaaaaaBaaaaaBB"πDATA "BBaaaaAaaaaaaaaaaaaaaaaaaaaaaaaaBaaaaaBB"πDATA "BBaaaaAaaaaaaaaaaaaaaaBBBBaaaaaaBaaaaaBB"πDATA "BBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBaacaaBB"πDATA "BBBBBBBBBBBBBBBBBBBBBBaaaBBBBBBBBBBBBBBB"πDATA "BBaaaaaaaaaaaaaaaAaaaaaaBBaaaaaaaaaaaaBB"πDATA "BBaaaaaaaaaaaaaaaaaaaaaBBBaaaaaaaaaaaaBB"πDATA "BBaaBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB"πDATA "BBaaaaaaaaaaaaaaaaaaaaaBBaaaaaaaaaaaaaBB"πDATA "BBaaaaaaaaaaaaaaaaaaadaeeaadaadadaadaaBB"πDATA "BBCCBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB"πDATA "BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB"πDATA "BBEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEBB"πDATA "BBEEBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBEEBB"πDATA "BBEEBBEEBBBEEBBBEEEBBEBBBEBBEEEEEBBBEEBB"πDATA "BBEEBBEBEBBEBEBBEBBBBEEBBEBBBBEBBBBBEEBB"πDATA "BBEEBBEEBBBEEBBBEEBBBEBEBEBBBBEBBBBBEEBB"πDATA "BBEEBBEBEBBEBEBBEBBBBEBBEEBBBBEBBBBBEEBB"πDATA "BBEEBBEEBBBEBEBBEEEBBEBBBEBBBBEBBBBBEEBB"πDATA "BBEEBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBEEBB"πDATA "BBEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEBB"πDATA "BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB"ππDATA 7, 3, 60: REM x, y starting coordinates, airπDATA "BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB"πDATA "BBaaaaaaFFFFFFFFaaaaaaaaaaaaBBBBBBBBBBBB"πDATA "BBaaaaaaaaaaaaaaaaaaaaaaaaaaBBBBBBBBBBBB"πDATA "BBaaaaaaaaaaaaaaaaaaaaaaaaaaBBBBBBBBBBBB"πDATA "BBaaaaaaaaaaaaaaaaaaaaaaaaaaBBBBBBBBBBBB"πDATA "BBaaaaaaaaaaaaaaaaaaaaaaaaaaBBBBBBBBBBBB"πDATA "BBBBBBaaaaaaaaaaaaAaaaaaaaaaBBBBBBBBBBBB"πDATA "BBaaaBaaaaaaaaaaaaAaaaaaaaaaBBBBBBBBBBBB"πDATA "BBacaBaaaaaaaaaaaaaaaaaaaaaaBBBBBBBBBBBB"πDATA "BBBBBBBBBggggggBBBBBBBEaaaEBBBBBBBBBBBBB"πDATA "BBBBBBBBBBBBBBBBBBBBBBEaaaEBBBBBBBBBBBBB"πDATA "BBBBBBBBBBBBBBBBBBBBBBEaaaEBBBBBBBBBBBBB"πDATA "BBBBBBBBBBBBBBBBBBBBBBEaaaEBBBBBBBBBBBBB"πDATA "BBBBBBBBBBBBBBBBBBBBBBEaddEBBBBBBBBBBBBB"πDATA "BBBBBBBBBBBBBBBBBBBBBBBCBBBBBBBBBBBBBBBB"πDATA "BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB"πDATA "BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB"πDATA "BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB"πDATA "BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB"πDATA "BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB"πDATA "BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB"πDATA "BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB"πDATA "BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB"πDATA "BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB"ππSUB LoadNextLevel ()ππREAD x, y, airπFOR lin = 1 TO 24π  READ a$π  FOR letter = 1 TO 40π    ascii% = ASC(MID$(a$, letter, 1)) ' Conversion:π    IF ascii% >= 97 THEN ' Lower caseπ      grid(letter, lin) = -(ascii - 97) ' Convert to negativeπ    ELSEIF ascii% >= 65 THEN ' Upper caseπ      grid(letter, lin) = ascii - 64 ' Convert to positiveπ    END IFπ  NEXT letterπNEXT linππEND SUBππSUB MoveBoulders (xpos, ypos)ππ' This routine moves the current boulder, and calls itself forπ' the one above, if necessary.ππgrid(xpos, ypos + 1) = BOULDERπgrid(xpos, ypos) = -1πLOCATE ypos + 1, xpos: PrintChar BOULDER ' Display new boulderπLOCATE ypos, xpos: PrintChar -1πIF grid(xpos, ypos - 1) = BOULDER THENπ  MoveBoulders xpos, ypos - 1 ' RecursionπEND IFππEND SUBππSUB PrintChar (arg)ππSELECT CASE argπ  CASE AIR.SUCKER: COLOR 1: PRINT CHR$(19);π  CASE WHIP.LINE: COLOR 6: PRINT CHR$(179);π  CASE ENERGY.CHARGE: COLOR 14: PRINT CHR$(15);π  CASE DOORWAY: COLOR 9: PRINT CHR$(21);π  CASE -1: PRINT " ";π  CASE 0: PRINT " ";π  CASE BOULDER: COLOR 15: PRINT CHR$(236);π  CASE WALL.FAKE: COLOR 7: PRINT CHR$(219);π  CASE WALL: COLOR 7: PRINT CHR$(219);π  CASE WALL.GRAY: COLOR 8: PRINT CHR$(219);π  CASE ELEVATOR: COLOR 6: PRINT CHR$(209);π  CASE ELEV.COLUMN: COLOR 6: PRINT CHR$(179);π  CASE STALACTITE: COLOR 7: PRINT CHR$(248);π  CASE ELSE: PRINT " ";πEND SELECTππEND SUBπJeff Hangartner                RPG CODE                       jhangart@oanet.com             12-18-96 (17:50)       QB, QBasic, PDS        189  12471    RPG-CODE.BASDEFINT A-Z:DIM SHARED K,S,B&,Z&:V1 'Created by PostIt! 7.2πSUB V1:OPEN "O",1,"RPG-CODE.ZIP",4^6:Z&=9091:?STRING$(50,177);πU"%up()%9%%%%-%lver%D<'aWD#R%%]=%%%1%%%%wu%lRht%ijSg7fxfb<vFT]t]8πU"$6fu47/QhRh#$5E7p:HJ6^^\#xHQ_daCOXVn]6/a'#P(MWAOBh.N#)eocId7zliπU"6hLPHeTk$%m5)&%5)&q72cC^?ENm*$96N?42tKR7j%R]rMo,bq73WmHZ(<fGFq>πU"5UWdi^YxGY-GTjb3F/mhg;;>NEBEei$h8Mq[/)+(_-#(vM3Fz=UpVn<E7aCPK7OπU"[8T'Mt%Di;'i*=I7q>&pcmn-9+YAFcY%5TIyD7L)0;og2sPpQ>763r'JV,-,H*_πU"8xh8.&?\3HYXY)DPoE:$pZjF^R>Cf=V>04=qcUp\o%&vS#<.fw5VcZ>%I%&XOflπU"hWI,XuYCI+j1M]2mYbXMu8o7_N4m+pqh0pgVhDS5vbQ_h7]MC[DU^hz6F&b5kQ/πU"UO_mC$QdvuRO\2XAlxE#2[-<%Q5J^.1(R4$KLQEKmLBGGWNQaQ:6S()g\f?G[$OπU"eN-?2d(mi[=Uy_KiBaVyb)X[X2KkVXS1fIUrS_o*39a--&%(^9x#R2ElGgoE/(QπU"V4]I&&$Yih8x;nXi+iYC]=[>*h\W=iJUE&ln\?7[UaKbx3t>=i8Qj'3#Il4Y)h1πU".gXWHrq;%E*)XynD3uZ%LYJ3zZ2EuDZ2rm-E\?XpOrPpS:MKY.Bh[5++e5=NKn%πU"5Q(i<6,>o>5&m$D^5WR;W\12sik0UB=dlf]ZN2O#WBa.24t9iE$)P0ASgP55?u:πU"TqKQdrNl?(as*pd7+I%euv_()wWfcnY.GL<EjO&&p6t1-F#eZJ#F#Q(^^88[/==πU"E\?N5O<6gA+%11c(PhFs[7f4#oIja,3Tl++Rtt[6CA/WB]b8j1u4#Nov8F5E34nπU",U&TkV&qfivClIBGCQA;%L5fYUM:6L8bv&SGYf:e5g([VUeE*8R-L)o1go9>2sbπU"5&L)O_ZEwUKD96HmTXu^Swfdx2dP:5;W3_0jZ=9_CyWGd/1+9[,j55-mcESVAvGπU">V7hr)kM0[QL*P46Z)R)>\[enzn_0yno4,LG]tu2#*^Gpd2cgW6o56vZCp'bR)LπU"n[=-7G#mX;gxmf*liE0eX,x&uQ)EIRmr[emcqEIc5%YFubv6M)(WYg7W-InC?57πU"3C55OTb$rddU>c/BEM(MrfU0M7,p?d&1P]X-'%3mwMh4B-8H):Thv8q-kC[GrGOπU"+VraJmI\N%JBZ$9qUDOGb'^Ye8R;?+o5jHu4<n8>doTCs(hZC]Rvy1KTqX7-x4iπU"2sh=5e(mCe)r%87].q3#>#qdy'343S0o\7#<-5\^16]5LdF58EC0^#i(z4-OS%>πU"UV&.IqII1xs/g(373/sTAv[Bn>*BgU8z4t=KE$DkhDH;6Z7TlE\,&a>AX%zX)CcπU"[,q&(AUHA-R/FbIiQTjaL;GK8'*$iTSOFJAt'77q<IeUb\$dfC5a8)h6RhIDw<nπU"=)HXvv.I6ATpP/UH>9ifd>Ji,A2\GDTP2_Qk6?n^'h6vuEhLwpEFY^tT['I*Pc6πU"q11t]AF37&On\aEu#;.e/Mg<nVt</:okzP>h+SI6w&3alHtc^D26X8ZYtT1J1hZπU"TFUQviR;q%ba_=]4K<'IX.B4W0nqu*f$/6BHq-<B.I$>v#h.8dPq[K>I\maseXYπU"_qp6H#EklmV8:*G/+:0)8[G#DC'*FtnbB]RtIr#6Vd[C/.Uqp+XCo#1c4nZx(:pπU"R=h1V$eosgWS2U<0=<m9WI;qer)u/PubXi]>0('):IrQ936MXg^)k?N3una,trSπU"Y7bn>1.2WhSgx5pbSh7:x'V,;#3(OIhc+wQMoDi?$81>HZR-aJCtJdqk?uuk'/=πU"ciCCL_I^s2lHUTuX:v2XHi-qK8w^$$f2A';ms8KwBw(TEtOiH>#m]Binc5euZA(πU"[mxYj&5GrWV4Oeb#/L085o7oJL:b,V$4%9*pvUun1jsp=Ri7=?4M.ulU7q2<$<eπU"5b915N(NT,;/H1G?5/7*pYd3v3Ria;pKpi8DKP_Xo;MxgESIU+PoAj%DH&.7+l,πU"l2v0BIlQ/snkaA;IS+fI?wuuS2GLXkWJov.*7thRyrU2iw;^HK^CbD\2qi+:-L+πU"3a_/R<]>*S.M\vbP:q8'FTGvJ-7hbdD7z?wxK>>9$k,TJ7t#h8B^Y2$HinL(gmPπU"KKJR=$Yp1sXOr_N3_(sR7)eGb^8SO>haA=s/-k6>\IH2zeJ423s5#9oKoS?n/oGπU",N)mdI4,4r2[TTh#D[(R5Q^b22._X<k9Shbh;U?m%Uz6>6;2\hDCFGX=%g?77R.πU"U7EJIV//aNn0;W/US_gu1>C1c(46L;XYK[Grw5C1#0X-$Vz<vur,tt^_qZ3P4O]πU"o&av1xR27n&)k09LSM4io*^t$&%(oO$(/wgGd9W?.s$s&P2G6adM$(JF#7N5:F^πU"Xm6ju=5SnnLFgT3(1Ot<D0wxs&#dH6WF+qLzOR#EPCATVyB%Y:B:r%'9u<*,u\jπU"%DeJz+iIbxMWvP1SF-3</mnWO*_^4u,jh<?7X5mA&fGb24(soPNg*\9)nqmMHVmπU"'eBaR4)Z7I+xM:_BuLD9Q&U(2L5\ROD\rq(-v#S0esAy&hF5wOo,p:t\L[P1-<kπU"M#Jq-9=se6b9E,oK0R5i2gi,L:)sfnog,H'U%n=W-$SLIM7_Seyt,oj+u;xpsXuπU"A9l)$%uV\/bWI,X$$Vzs[+cG6sjtB/L9u_qBYCnjh3eoovL#8tm?oIr\F2romC:πU"1Y\wr83]/+<qQ?VlOi<o(sTok+RR)Ma%F5\(CO8>/#x_^>5>:UdjZ4^,:LRQ7)fπU"i[>gY[#ijOI5\&?]Khbb>R)#A,m:L=T$;&%&lkQ#rvj5*1&3WKH0N/P):ym&YA&πU"t#bG[Iqjg$[D-t]4zYHK^,m)i-q?3JWm]6/;eyA0T'0jQh6.=SQXdaR3)U>:j5/πU"Z^<bBnjW[#e'=*ka^Jd(M:,W=ekCrOtIAYKit<^q,s,WO-BDI2wV3ZWK%bCAI6.πU"v*mxh,%x[np7pJG(AqPFS?/zK(F%_\wUkX(;sWm9>1*GR4P4g;_Iv4<w]t3rS?tπU"*GF*/1knNzPJI9XJdK&DSBWOf91bx#JErd+1uq9/,+k0:)1o91vWks<UmdZd_\oπU"JfXsO4aEah705]S%-[nSX5aNV$8[7euh$9L;pv]08a4FPR:\3^;H\3QNI\91E\0πU"2l;0k'?3C;gm>i8)609z&p1>pZL=,f?wHp%$4l^KX;F8,+,nSs,ox&[Na>)A<xlπU"NAW82Y_cbp,Jt9.,D6\g<4HoT2R-Zl$5&IIv;cJO0]h/INHRs[u7ho,,pLT=$z]πU"x'$)9l<x]00%\1]#I2jnQ*h(57rk-b_C]2hS\M%b,>85ma_45Z5SWI%=)M+rvZ8πU"ojc8K+BlR$,&HHi<LMb9yjn7zAAOo7db5L]E3A2Ul1DPFFIrwNS<JNuL?ee%vYLπU"7sjYJ6JBh;vBVjdvGt3+]NZ>o6CZC'vWRIY1kdtIujs>46.0^d)\mcoOrh3%FK0πU"6#VjCl\-m%WUa9glO]D:e-)BxWnYZLafIhqqzk,eb;kh+l\uH>7],ttb^<S3opGπU"VWT+LfF/sRkD4-oe-=z<d'h-4J_:T]]r[+hLA%*edSC%)(U-G_;14D*B]L-Q/dhπU"+Nz:3qVC08\3S*c)6:92mPU5a1)*xK_Ki2Jp08^uLDTD<+p,3<ExCVdExw5Q=(nπU"(B[t.C9jEd[4j4ytfo^$<my/f4V'%q_5/<n?s1_IogN6?SXu$s,nMx+6&8br['kπU"mT66g#6-rP^x.JS$068%:;vkfXe\emv-ekpH8pjm-Ju=+SrsXsQi6MhE[%OJS#fπU"NXeGlDvXlFm;p-tVIPv<q7F?gTDO-raS8&bV?.,J'b+$EA,39J8Cj\X]0b<E/\BπU"m-7?l)63vwt$L\l+arxBj7p0.KoFwWN&0+,(KVt\B)FM5d\CPl_lI04Rb7iAiN<πU"1Xjwqh3Pk&&e#0[_83IH9?x;)[#Y2QIc:]<dCEspyU'ipyQrdN'NE5hO&AsDKYHπU"x<.FO4[XW1j8KAKb;<tLPRr/j#UlA4GXR15EuHtWlPPpK7uHWDPD.G(\cpf&?P+πU"ZtXt\PA&h7Zy8\%AOInQ_r6_FPa#BtulV?0vd%ucaQ/JNBi>?]UWJ^a;]>*h:4YπU"b?chBTp9CI8fh4,UyBB\py9(.+vAUo:El[Nua_kLT>.58(bB]XOUGT\TbO[>a+LπU".>EH8Z\>R_PNha$*xgdd](>sKq)i2C.ve,PKPX/8,%]qb2/Dd)F_<xn.'p>pXNrπU";F.i[,v08r#(]46*)s;A=]S3;JZ\guW:34hYtODM\ME%Ejn0(4exDOIN)0g,.blπU"WH7HMU[>VG(0/Yrr4isoNMMT]D_uFI,XqSI/21'$I(wsAW>3WZuhuJF]M)#/&#OπU"NLS_1ZA5L=>0;Kt#82olN;6+4,9za9rGRYzQm4M$+lVssc%#sWxT2aCl<OPJaZuπU"%QnKS5Z?zj$3MHr7&l5+RHejvPt)ncCbcSO(Hf<gnc>+VS9b<aOZq7OKeJ05S_-πU"YLr(FNm-1[9h&L(3$2nz88<YKG6)&GJSKL,RNa(aC&^41g0>'pZU%9V*8KL'8tkπU"13^R[NtB.FT'Zq\*i<6AR[ZbR[iMZC/)62G3,63jAqfd(9L\F[vZ(ISAP562/LiπU",Axw3[ABb9pMz%-A7?u9DR+5K,:R-KlCfRX+.M7[=IV#b%c17_^)3Oae?QVGF%_πU"$p8rn?B#dX52C47Ar:8-%5\;BvI6gqboQFiGI#s<9%O+i_G9S<oBu#Ho=w.QxbGπU",[KqX'I[Hi.w?WJg^\VcU/f:-+dRt9>/5jIl,^t[&[0Y<h3Uy4[9].xtb<&RU]xπU"FXF??Hd.s)vQF9r[ZEWDya=[;<KX(URWLM]*uLcj\W.anXmIh:N$kx/2$5YEuMKπU"Eq&sdKlO1Jc#Q<YX4R?)s)X//uHUJi/CpWg+Dk,d>l3GBcFIaS#O-;\=[iPrEWKπU"'WsgUTBkNHX3p=%ZI5LOl=.JQk,]dIAb\_j3G%1N.iSkcR3Q-s]845?E[lH^EOUπU"1\3DRuoup#UFDQ1Zu8*4;[Erbz>tqCc72bK*xckQ3R%n'G-+&XyCrd#^F#C/Eo2πU"'hY^l4)lH?:SFDx\9qeK4SLSylON(pjXe+/<Z;8**#?'bfq%vIYTp^L=$HbpJS&πU"jTjhIYgPWj9>TZouXCRp9m^ejK_M_/kpL0Ly1LZ0cc:&SB2ewnk]8fG4\DV%ishπU"Kttm:&1-<hGfLGOsscK.d$Ld+$vfAu&8#vNZFfY'L.j%:48]tK0uFxpTt9ip+C6πU")/Z?+rT&o9^=0:sxmrFj)'Zt2fa\P2WIes-78n4g4G7SZH+,<)Ws-;9H#zRLcgvπU"7xAle'9>S-u9pUd44XWZtNLnYp:*9oejbuq)Xbb'\SGTJJ,B(j^;*W2bZ4f,83YπU"p7vF$I_6a6cK6]B0,AtpggDbUT>6$ciSQPigj%XbrGbi)\2.[\q8P$B#+iwK9*^πU"\C&eYp^??MUU7PGdN]Ndxi[Xk.4ec/^gXJE'=kI0[.ZDv$3OHCs\jbW]i13?oC<πU"VWW>D^AP6'G[RW)B<CfYm^#HAk>Lw.(L]/L=2PO#Ukz:h5nzWhUn1Hdk.la]m(BπU"S,8;\w$'[b0iS9TIb?YA73r?H2oa-Sd?9f^8^&eZq8O^2B%=i/4*?Z>$^Z,R/N5πU"W=r_B*30F]RH5;w5p3s6,<$.U$C5Pel?y5>C%l/fuC(jySevN)t5B3J;PDLF^u)πU"U1+c^BA^l+cUZkg?R7V$_wQ/^QF4]mhO)25#wQdX&UTwid>aYfa\oF%gAP\-huKπU"T_0o;)TE]hqWaai(-2&AtZs-%FlC0*bkDpmL3azT1BJhFkr9Dpqhn<c&/9g+9HpπU"C'%4I-2F\18x*1dP&ruR$adAmW6,Z1SbY1D$S=7dhwLwp<acliP$9wITLd>8Cw5πU"NZfP=:^2q,g*R39[&7TerD:<nJ8;e\8M)%?7ZsU7;?K/Ph8vi/Lbp0pI18$#*4.πU"c'C;5NvU,7Cc^3CM89M;-UL')C[?9?t;csM:?_54QVtfYr5o,bI4bNaT&eEFu$fπU"aPB#Ldsc5,lRUxRLy1A9N^t1+T2&wuIHZbx3,i;sJW>eBj][A?q-vNkkAoWdEw[πU"CZD89CUM2$Y0RKxv6\h2#Or.,K/_%T;rDK'>UAa3.8HEBURiK-U$JBsmAMj(\U;πU"6%#7XnSrH#'^vk%>X;?O3:0S\VndLU*j[k*5QhHtp*O=#2+\,$M=v=6JuGEU03$πU"Ab;D#Vkz;?J+8m\r1iql8QBGC=b8_mCFcm^IT5+ZL52#B0Ixv]ZrD*AK,x-Z]3iπU"+V(6QE1r]NEMx-ERs2%4gfwJi]eAn1Z0P<*E>ARR-/l%3R$6uE4g$O#5dWK1CTlπU"20[h_e]OhMth&?97*_EYWI>;w\pHqD+=voSSRKEM8AVT<N6.=0tD1x3OX[k]YF/πU"d2kt'^/rda.$$TS91DGE(j?uMY](gnqNi0BJdE-F0Dpq]QVbz0$_tF#bFUz$p%XπU"jSm&U'O>>Mo=IE[Q))iTs-qLWTL9bV6zmTZXeNZgS&,EE'oT>\E6:lJE2UHHohGπU"U-^404]<j-tp2GxZbW-8M9FDt]>1D6]k;9zK,ZP2]OQ67j7c,^\X3h[\=>efG3UπU"EHI5SL5eb:_oTr>yN9?2K#LtuR/luE8sD6MgGDJ7Vw.G:bxv=)+m.B8QgJZ<<5(πU"tUNj#KZs:5>\tQ7j04(\]#LKVuk$U*UD$XW=Eg<FsS3rIr/Z8hFRKfx/4,.5\vCπU"S7QhiJ3ee\>U<t&UC+Fl,DsDlj.H>$ZLZUW[09XUtQqPHfAKdhH:qV7&sOmEiFhπU";HLilnTTP*(_n>3M*.gY.2.A?+48]sm4FYrS<sc,e\ZV^^NfC?7n4A]Q4,wR,ACπU"19Ucmd-5.D-PVKf]k4D&D5+RAArT-sO6Z2EQ9G*&4Nf3lOQ[+'?e<pnoIwLa,sGπU"J7P&<J$L3Dh;*g$JFCD:czv=ishQivltx#MQrm)zDQrJMRFn0[StO'VivJp,f7AπU"G&(Fh0%HCJG%pqGQ7ITi^S0['I'QF9tIw3>cuL/lT-<fOtFaOFip>30R9Qhx2tQπU"x_;T)Se_HGDoD(O3&ibYLTt8r\d,+BASBa/PxcmS8fe&QC(UpAne9X$5o='p?.dπU"42MYFTBP6H53<mL3+oFr#bM0;mo/4hK8Kd.0HMOP%]os,;l:NJz%.r$-e:Cu7t-πU"GF3\mxCZE=Lhs9+rh$8q7.y7#63H6+Vn$4.gFcX:,Vw'[S[/Z;w$m#]reF8u\ZwπU"njh$,q#aUI8^6+Ht3lq8HOo2*:<H2W&:;C7l\:p29uQKu2]bdP3z$:G#p7MBEw,πU"Zs>B%GGxz9P)C.vjGKu2kD2b$<YZ&x)%TL;EcmZZdP7VCE3b^rHk17ddO=[l$S;πU"pAQiO'<48,fs%81kg/&p-a(oQo(T5_&_cLhgJEiAamBT#O+U%*,otimFJoHiN0nπU"D=A6;hgd+Rq8sR.O7%'1<uxok4Io;l3T*v^0CXw&xrzTNc^\T%#;de2VZJ<lG?TπU"CUidIofsJ+85fc^TNW>KRGB$#+IoMxfm\bqLZLpr%gwdD&0^9O_fXkr;o_?2)BZπU"4:H;&X=$0M^iQ$4z)XJe_p1;(&60K'MWAr#ZQ68(k5k8l;Iid:s,7&%w5ACfq#&πU"CQslfW,+<tAYB?0s),hGhC44ihyrHK?6&=ylFp6Vd+YlA^6K1retgA/sci_I*IBπU"oYpPQx%T&qZ4n'K,cJ4S,JlprAsqsNfVQ;l,FL:G'U(-_,xiFTo*bQ+PeS.zB[rπU"1WWI5e0leH,pp^fXw,Z]FF:Jgu;GEK&a_nH5[9#LkS]\F(%5<L78*GtlQ-iPFLUπU"Vm6>N_.)l-.Z5[+t$IUz04,7P#Suo$G_#cn>2rkeh<>P#0**JYeXerOdV>hfTCJπU"4CSiSJZ3T]PY8H()d#g<T2J8tr.BANkzu6)sJFm_F?f$#K5'N=+G^ayUsrp\7rTπU"2yfyjZi5/VKPmMpCO=:R#CLGxq8G-Zj-nQp*+(J.]+<^4/H=ox8\sbQn)%/s'NXπU";eD]Z#oN:f>d(QOy_BwUx,b4Fz7cKGJAg'DUfX\AayD<GFgEsVDMtO4gn%*;]\?πU"HqcOqdXY1ny&?\T#H%&\m<C$.8+m[>Epc,/<aEDm_,t30\eu7(GGij;'</v3N1dπU"0R^MZWHp*Q^7_:i3EGI<DJYPNqA1l2SOXYfB)o-?uhRvZe*r07375+H2a\g[m]4πU"*t#bTtv/5M0>Og;UEP6XVH,NLd]OsQH8(9A1=%dESCD6s30p1/1yfHnfMjOxYw&πU"HNX7KfiqofbQN$)A%T7L>'&dU:\gtDa%tDSJO6+XC%0BPoDr)nN#;PCg&J[$]g6πU"EGPuZ_N;dHHTN^ndbfG']du#T_I8uTI6j2DbP=1qw-9JN[0N1myZ*#;9F?CMQrUπU"N?N.ui&<6KqT;'W&C-Y$X07?Lx<uR7vbI[n\MWvqU=L:ZtH6/mw'?RNT):qOeKlπU"uhCeAnFp='ZRc3kIpO<hf5?b<njC*cZ(G]ABYP:DIH%Kq1_#(X\.(XsqAYmjyNAπU"6_uKeg+SK:p)f+4>73EOs5gJe;VP_6X9dFuBE4E;J&YG%*A.hm,-(PXY),CtjWqπU"CGTg1Bd;+\S6(/ZPe>M6AoqL#tmb26*>T0,Ctd/CZJEMAE?$A0G;sY<),lt<H0vπU"XaF)jyp:qd9YQG;7PNvAa&'V*/5<[tD\pMts%Jz\gVRA:&,e10u7?^+^(e:b*SoπU"MT0cQ;=*Z[v.An9-eQtr0Z4SdY3sVgXHh7FSPKn^%Uk21'kfl6Y&iRF9B*b<C_gπU"i&')4wGm>g#9#d'25OA:cB+.XV_8k,dqGEIx%'up(%)9%%%%-%=)Tl%Fev0+n[*πU"%%7%0%%0%%%%h%wjin%yxSyS'y&%q,>\/C7L<o0xUHoR'];,e/0+-^M)Ldjr5FlπU"u**TVALAp2tX.=jgJx7n'h$ho4nSqeCDy%]Cr$XBEGh4M?^wM6J/>I;BT6C&rDFπU"d4e:-\jmd&U[]1H=2I,cat+oO.+l#/U6/8.EH,C?,agu$6T4+<x,XcY1O=Zm/GOπU"Lh;Dj'ipp4FSW;r[(.sVHH0,r6R9YR-P*$/6\LH\]JSa%-R=ZQ26(>A-327$<KiπU"/,M_fA]%t$i]6$_\;x)a$MPBa6>:)migS=]7.pld.LcibB3XnZ*G9T*G>2Dae:.πU"xR-1k#qlkQ\MP(wmrs%H$jv9%tT;/97/;%+8?.BoiF;u^EN]l_E')d1lC:2cLZ3πU"]Q.T$tHo\>$lnCs&OB.w9/[HSDmnaJ9H3=BG;PD&nzT>^\A(l#H.<sqo8Fv*$<lπU"mPDo&tuLGSp07v%4*cesEX0oQ9%r_(B#(6GDRCs5YIXj2/PAk:Ym[$??KE-_hR&πU"MVfqR,V\-_n+M64(p<*Rc=Z1=lIZfeg8A'_fj,ri0,LRZ;nkEB.^ny??voY*a5JπU"X]kQk>cQq\('46CDW'p]Yj;s2hs1RCxN:DZLBV%+7>GA,H#/GF+8F,s;Vo]eqXxπU"Bh'luR)78<#-,M(UeRA'k$6Py$g8+,Dh)_(h=LhBh+V:dKNBEgd;:fqr^o8mO^0πU"&0t()(HM<80x7bO#u61q^z/;8I't(-X0Q:#4EI;B)2OG1/PZD8L7DifCOcSVd+hπU"mNKqI[vNNU^QsuPZLUJI:-(kIi5#:w>Kak5%%lJQg%o0H5<>9G2a?4J]459N7geπU"_4Y#'Ge$2;;V^&qUU%='&u5+hYt2dLx*sqE3cbH^;-[n5MKAU0^f;cGY11j1k<<πU"Dd\<>wotD1[MelKE3#-KP>;;_jf+a:F1FPfjR^O;ZF]]p6hEitS:^chZMGLxySSπU"N;jP.'&?qo##aVyX8US(Hb^MBt>NI*tpW]#?yk?-x6:#OJSt%r0gFV8E-[DdkkwπU"J[<w6:h2CKfNp7QUxA2>Q.]CZ(d^cOA6iZ;m,A6eT/&g%=TH\hiuh6lu(MB=D(.πU"n+'0kG5r$ZQi?gg0E[q*JOg)wG)(v22e]P9'_lR^A,E7Q;<<V2&:$);$oF&a#eCπU"f<Px=xKEM<I:;#'tI&/WAw1YMHm67L8Nv-SZr1=(.l3,YkE73Ki_e_2G+LP'b=YπU"mjz\#.?uqjPNqeV1ZC:pxtuxSt210zRe[nxG046m0.a;E)><5C*Cce?&jzcL+)<πU"k/L$HSpH)i^,2B_zkz%&\sR[dzq-pA^8mts2B=FiIwm?Op??TXqL3gBueM#I3,EπU"^,yw&thK*$)LG*XJpq<B170pBD)[$n%Kyao_?Ed(Pm8u8sSTk)/WxW*JDAgD#dSπU"9ODoNk?r2aI\4)ImPiONWOSf7'uoF(j*=JqUUButN)0s=e]$8XoX/1j?#6TjnhBπU"qltmfb-_9.ay]xll+LI[e[_*X_.($u:GMHR(o#]g;+yap#9-9rdm5H<,i2o6RgTπU"Agz[vcfL>WOik'7xs=Yx6s.)dd4_/p<q5f&LOC4gB))jo\QGpSwJjA.sTgSOFceπU"Kb]FqA^ue7bd:T)*,n.T5KI,V*U#E;vv_\d7I2'jarr^r_ek^6P.Ua%1xbc3Jx4πU"qn*,N%I9,D578V#9-Z3E\%wLKp;Oi_[$=nh(:<Z<rjkR*YT?gj;6xvs:#mW98>GπU"&_*smDr,NLvO1AH2g_7dl6VG0F$eD3HoSx\^0sWm/qTgIjz3Jc;(KR5*[H$>9p)πU"Q:kFF)GKQpiHD:ncy^R$W#\HNbBW)POG,GEN6wrFTJkx.4VN>g+6QcDG>.)Tmf#πU"\)O+qW$ErTnDqqM%j<07Si2ZGKh%qd'MfqGT8Ko,t1qJqaRX/]#97n_>9u0Hj8cπU"w&b^9j'Ydzq0SNk*bC<whJw.MopLsbj7b6aQ]x-kw3u%p()9%%%%-F%efWd%)IkπU"%^y%%%%$(%%%-%%%%rfu%VSrf4u>af+/9E1j)hTwK=h+L6xXSgmM7,R.pNZE4]GπU"Y)rO/pN)jcTfdI^OhtL=VB-a#X(P4\=tJ/1L2/8Ayvl'g^LF<&CpVmO+#?#DhFsπU"hj<Y%Sup(%)9%%#%-%+_>l%iEBdkV%%%%$%(%%-%%%%r%fuWS#rfudawT/9.E-LπU"4*sbC_cnvD0F2Pa9.7hWKi$eBm^[IR,+nZS^OfXzRG)I=yJ/lJOfSyYP)U'XMd;πU"i$LQeev5T=,ku\s>:$[,/>f4EMe.O+an?.uy,hKj>H]^X&qw=o'qHFH$q-aBh,>πU":U?8^Zt.9)q+5TGbJ,#7d#5CF'um'm'%Tup%&'9%%9%%%%-%lver%D<'aWD#R%%πU"]=%%%1%%%%%%%%%&%%E%%%%%%%%%wulR%htij%Sgfx%up&'%9%9%%%%-%1=Tl%CπU"Fv0+'n*%%'70%%%0%%%%%%%%%&%E%%%%n#%%%hw%jiny#xSy'%yup&%'9%9%%%%πU"-F%efWd%)Ik%^y%%%%$(%%%-%%%%%%%%%&%E#%%%6%F%%r%fuVS%rfuu%p&'9%%πU"9%%#%-%+_>l%iEBdkV%%%%$%(%%-%%%%%%%%%&%%E%%+%ZF%%%rfu%WSrf%uup*πU"%+%%%%%)%)+%X%%(%]G%%%%%πEND SUBπCLOSE:IF S=48AND B&=Z&THEN?" :) Ok!"ELSE?" :( Bad!πSUB U(A$):FOR A=1TO LEN(A$):C=ASC(MID$(A$,A))-37:IF C<0THEN C=91+C*32πIF K<4THEN K=C+243ELSE?#1,CHR$(C+(K MOD 3)*86);:K=K\3:B&=B&+1πS=(S+C)AND 255:NEXT:LOCATE,1:?STRING$(B&*50\Z&,219);:END SUBππJames Prevatt                  CHECKERS                       comp.lang.basic.misc           12-22-96 (13:00)       QB, QBasic, PDS        258  6941     CHECKERS.BASDECLARE FUNCTION CheckRWin% ()πDECLARE FUNCTION CheckBWin% ()πDECLARE SUB Board ()πDECLARE SUB InitStat ()πDECLARE FUNCTION AdjY% (Y%)πDECLARE FUNCTION AdjX% (X%)πDECLARE SUB DrawBrd ()π' Checkersπ' by James PrevattππDEFINT A-ZπWIDTH 40πCOLOR 15πDIM SHARED Status(1 TO 8, 1 TO 8) AS INTEGERπDATA 1,5,1,5,1,5,1,5πDATA 5,1,5,1,5,1,5,1πDATA 1,5,1,5,1,5,1,5πDATA 5,0,5,0,5,0,5,0πDATA 0,5,0,5,0,5,0,5πDATA 5,3,5,3,5,3,5,3πDATA 3,5,3,5,3,5,3,5πDATA 5,3,5,3,5,3,5,3πON ERROR GOTO ErrManππ0 FOR X = 1 TO 25: PRINT : NEXTπ  PRINT SPC(15); "Let's Play"π  PRINT SPC(15); "Checkers!"π  PRINTπ  PRINTπ  PRINTπ  InitStatπ  Boardπ  DrawBrdπ2 LOCATE 8: PRINT "       "π  LOCATE 4: PRINT "                                      "π  PRINT "                                      "π  LOCATE 4: COLOR 12: INPUT "Red from Row:", FRπ  IF FR = -1 THENπ    COLOR 15π    LOCATE 24π    FOR X = 1 TO 25: PRINT : NEXTπ    PRINT SPC(15); "Let's Play"π    PRINT SPC(15); "Checkers!"π    PRINTπ    PRINTπ    PRINTπ    Boardπ    DrawBrdπ    GOTO 2π  END IFπ  INPUT "         Col:", FCπ  LOCATE 8: PRINT FR; ","; FCπ  IF FR < 1 OR FR > 8 THEN GOTO 2π  IF FC < 1 OR FC > 8 THEN GOTO 2π  IF Status(FR, FC) < 1 OR Status(FR, FC) > 2 THEN GOTO 2π3 LOCATE 4: PRINT "                                      "π  PRINT "                                      "π  LOCATE 4: INPUT "Red to Row:", TRπ  IF TR = -1 THEN GOTO 2π  INPUT "       Col:", TCπ  IF TR < 1 OR TR > 8 THEN GOTO 3π  IF TC < 1 OR TC > 8 THEN GOTO 3π  IF TR = FR OR TC = FC THEN GOTO 3π  IF ABS(TC - FC) <> ABS(TR - FR) THEN GOTO 3π  IF ABS(TC - FC) > 2 THEN GOTO 3π  IF SGN(TC - FC) = -1 AND Status(FR, FC) <> 2 THEN GOTO 3π  IF ABS(TC - FC) = 2 THENπ    IF SGN(TC - FC) = 1 THENπ      IF SGN(TR - FR) = -1 THENπ        IF Status(FR - 1, FC + 1) < 3 OR Status(FR - 1, FC + 1) > 4 THEN GOTO 3π        Status(FR - 1, FC + 1) = 0π      END IFπ      IF SGN(TR - FR) = 1 THENπ        IF Status(FR + 1, FC + 1) < 3 OR Status(FR + 1, FC + 1) > 4 THEN GOTO 3π        Status(FR + 1, FC + 1) = 0π      END IFπ    END IFπ    IF SGN(TC - FC) = -1 THENπ      IF SGN(TR - FR) = -1 THENπ        IF Status(FR - 1, FC - 1) < 3 OR Status(FR - 1, FC - 1) > 4 THEN GOTO 3π        Status(FR - 1, FC - 1) = 0π      END IFπ      IF SGN(TR - FR) = 1 THENπ        IF Status(FR + 1, FC - 1) < 3 OR Status(FR + 1, FC - 1) > 4 THEN GOTO 3π        Status(FR + 1, FC - 1) = 0π      END IFπ    END IFπ  END IFπ  IF Status(TR, TC) <> 0 THEN GOTO 3π  IF TC = 8 THEN Status(FR, FC) = 2π  Status(TR, TC) = Status(FR, FC)π  Status(FR, FC) = 0π  DrawBrdπ  IF CheckRWin = -1 THEN GOTO 8ππ4 LOCATE 8: PRINT "       "π  LOCATE 4: PRINT "                                      "π  PRINT "                                      "π  LOCATE 4: COLOR 9: INPUT "Blue from Row:", FRπ  INPUT "          Col:", FCπ  IF FR = -1 THENπ    COLOR 15π    LOCATE 24π    FOR t = 1 TO 25π      PRINTπ    NEXTπ    PRINT SPC(15); "Let's Play"π    PRINT SPC(15); "Checkers!"π    PRINTπ    PRINTπ    PRINTπ    Boardπ    DrawBrdπ    GOTO 4π  END IFπ  IF FR < 1 OR FR > 8 THEN GOTO 4π  IF FC < 1 OR FC > 8 THEN GOTO 4π  LOCATE 8: PRINT FR; ","; FCπ  IF Status(FR, FC) < 3 OR Status(FR, FC) > 4 THEN GOTO 4π5 LOCATE 4: PRINT "                                      "π  PRINT "                                      "π  LOCATE 4: INPUT "Blue to Row:", TRπ  IF TR = -1 THEN GOTO 4π  INPUT "        Col:", TCπ  IF FR < 1 OR FR > 8 THEN GOTO 5π  IF FC < 1 OR FC > 8 THEN GOTO 5π  IF TR = FR OR TC = FC THEN GOTO 5π  IF ABS(TC - FC) <> ABS(TR - FR) THEN GOTO 5π  IF ABS(TC - FC) > 2 THEN GOTO 5π  IF SGN(TC - FC) = 1 AND Status(FR, FC) <> 4 THEN GOTO 5π  IF ABS(TC - FC) = 2 THENπ    IF SGN(TC - FC) = 1 THENπ      IF SGN(TR - FR) = -1 THENπ        IF Status(FR - 1, FC + 1) < 1 OR Status(FR - 1, FC + 1) > 2 THEN GOTO 5π        Status(FR - 1, FC + 1) = 0π      END IFπ      IF SGN(TR - FR) = 1 THENπ        IF Status(FR + 1, FC + 1) < 1 OR Status(FR + 1, FC + 1) > 2 THEN GOTO 5π        Status(FR + 1, FC + 1) = 0π      END IFπ    END IFπ    IF SGN(TC - FC) = -1 THENπ      IF SGN(TR - FR) = -1 THENπ        IF Status(FR - 1, FC - 1) < 1 OR Status(FR - 1, FC - 1) > 2 THEN GOTO 5π        Status(FR - 1, FC - 1) = 0π      END IFπ      IF SGN(TR - FR) = 1 THENπ        IF Status(FR + 1, FC - 1) < 1 OR Status(FR + 1, FC - 1) > 2 THEN GOTO 5π        Status(FR + 1, FC - 1) = 0π      END IFπ    END IFπ  END IFπ  IF Status(TR, TC) <> 0 THEN GOTO 5π  IF TC = 1 THEN Status(FR, FC) = 4π  Status(TR, TC) = Status(FR, FC)π  Status(FR, FC) = 0π  DrawBrdπ  IF CheckBWin THEN GOTO 9π  GOTO 2π8 LOCATE 12π  COLOR 12π  PRINT SPC(15); "Red Wins!!"π  GOTO 10π9 LOCATE 12π  COLOR 9π  PRINT SPC(15); "Blue Wins!"π10 COLOR 15π  PRINT SPC(13); "Press a key...."π  WHILE INKEY$ = "": WENDπ  LOCATE 24π  FOR t = 1 TO 25π    PRINTπ  NEXTπ  LOCATE 12π  INPUT "Play again"; o$π  IF UCASE$(LEFT$(o$, 1)) = "Y" THEN RESTORE: GOTO 0π  ENDππErrMan:π  PRINT ERRπ  RESUME NEXTπππFUNCTION AdjX (X)π  AdjX = 2 * X + 12πEND FUNCTIONππFUNCTION AdjY (Y)π  AdjY = -2 * Y + 23πEND FUNCTIONππDEFSNG A-ZπSUB Boardπ  PRINT SPC(11); " ╔═╤═╤═╤═╤═╤═╤═╤═╗"π  PRINT SPC(11); "8║ │ │ │ │ │ │ │ ║"π  PRINT SPC(11); " ╟─┼─┼─┼─┼─┼─┼─┼─╢"π  PRINT SPC(11); "7║ │ │ │ │ │ │ │ ║"π  PRINT SPC(11); " ╟─┼─┼─┼─┼─┼─┼─┼─╢"π  PRINT SPC(11); "6║ │ │ │ │ │ │ │ ║"π  PRINT SPC(11); " ╟─┼─┼─┼─┼─┼─┼─┼─╢"π  PRINT SPC(11); "5║ │ │ │ │ │ │ │ ║"π  PRINT SPC(11); " ╟─┼─┼─┼─┼─┼─┼─┼─╢"π  PRINT SPC(11); "4║ │ │ │ │ │ │ │ ║"π  PRINT SPC(11); " ╟─┼─┼─┼─┼─┼─┼─┼─╢"π  PRINT SPC(11); "3║ │ │ │ │ │ │ │ ║"π  PRINT SPC(11); " ╟─┼─┼─┼─┼─┼─┼─┼─╢"π  PRINT SPC(11); "2║ │ │ │ │ │ │ │ ║"π  PRINT SPC(11); " ╟─┼─┼─┼─┼─┼─┼─┼─╢"π  PRINT SPC(11); "1║ │ │ │ │ │ │ │ ║"π  PRINT SPC(11); " ╚═╧═╧═╧═╧═╧═╧═╧═╝"π  PRINT SPC(11); "  1 2 3 4 5 6 7 8"πEND SUBππDEFINT A-ZπFUNCTION CheckBWinπ  FOR Y = 1 TO 8π    FOR X = 1 TO 8π      IF Status(X, Y) = 1 OR Status(X, Y) = 2 THEN CheckBWin = 0: GOTO 7π    NEXTπ  NEXTπ  CheckBWin = -1π7πEND FUNCTIONππFUNCTION CheckRWinπ  FOR Y = 1 TO 8π    FOR X = 1 TO 8π      IF Status(X, Y) = 3 OR Status(X, Y) = 4 THEN CheckRWin = 0: GOTO 6π    NEXTπ  NEXTπ  CheckRWin = -1π6πEND FUNCTIONππSUB DrawBrdπ  FOR Y% = 1 TO 8π    FOR X% = 1 TO 8π      X0 = AdjX(X)π      Y0 = AdjY(Y)π      LOCATE Y0, X0π      IF Status(X, Y) = 0 THEN PRINT " "π      IF Status(X, Y) = 1 THEN COLOR 12: PRINT CHR$(240): COLOR 15π      IF Status(X, Y) = 2 THEN COLOR 12: PRINT CHR$(254): COLOR 15π      IF Status(X, Y) = 3 THEN COLOR 9: PRINT CHR$(240): COLOR 15π      IF Status(X, Y) = 4 THEN COLOR 9: PRINT CHR$(254): COLOR 15π      IF Status(X, Y) = 5 THEN COLOR 8: PRINT CHR$(178): COLOR 15π    NEXTπ  NEXTπEND SUBππSUB InitStatπFOR Y = 1 TO 8π  FOR X = 1 TO 8π    READ Cπ    Status(X, Y) = Cπ  NEXTπNEXTπEND SUBπSteven A. Morisi               GEOMETRY OF A CIRCLE           steve179@ix.netcom.com         11-05-96               QB, QBasic, PDS        154  4026     GCIRCLE.BAS DECLARE SUB define5 ()πDECLARE SUB define3 ()πDECLARE SUB define4 ()πDECLARE SUB define1 ()πDECLARE SUB define2 ()πDECLARE SUB circinit ()πDECLARE SUB header1 ()πDECLARE SUB choices ()ππ'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''π'  Geometry Definitions for Circlesπ'  Author : Steven A, Morisiπ'  Date   : 10/96π'  Notes  : E-Mail with comments to steve179@netcom.comπ'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''πCLSπSCREEN 9πCOLOR 7, 1πWIDTH 80, 43     'give myself more roomπ    header1      'print headerπ    circinit     'print initial circleπ    choices      'Display choicesπππDOπ     DOπ          key.press$ = INKEY$π     LOOP WHILE key.press$ = ""ππ'     PRINT key.press$π     SELECT CASE UCASE$(key.press$)π            CASE IS = "D"π                 CLSπ                 choicesπ                 header1π                 circinitπ                 LINE (308, 165)-(548, 165), 9π                 define1π            CASE IS = "R"π                 CLSπ                 choicesπ                 header1π                 circinitπ                 LINE (308, 165)-(428, 165), 9π                 define2π            CASE IS = "C"π                 CLSπ                 choicesπ                 header1π                 circinitπ                 CIRCLE (428, 165), 120, 9π                 define3π            CASE IS = "H"π                 CLSπ                 choicesπ                 header1π                 circinitπ                 LINE (309, 170)-(505, 100), 9π                 define4π            CASE IS = "T"π                 CLSπ                 choicesπ                 header1π                 circinitπ                 LINE (300, 102)-(480, 60), 9π                 define5ππ            CASE IS = CHR$(27)π                 EXIT DOπ     END SELECTπLOOPπSYSTEMππSUB choicesπFOR i% = 0 TO 3 STEP 3π    LINE (50 - i%, 55 - i%)-(205 + i%, 200 + i%), 5, BπNEXT i%πLOCATE 9, 8: PRINT " Press a letter   "πLOCATE 11, 8: PRINT " (D)iameter      "πLOCATE 13, 8: PRINT " (R)adius        "πLOCATE 15, 8: PRINT " (C)ircumference "πLOCATE 17, 8: PRINT " c(H)ord         "πLOCATE 19, 8: PRINT " (T)angent       "πLOCATE 23, 8: PRINT " Escape : Quit   "πEND SUBππSUB circinitπ    π     CIRCLE (428, 165), 120, 2π     PSET (428, 165), 4ππEND SUBππSUB define1π'Diameter definitionπ'SOUND 600, 4πLINE (50, 285)-(590, 305), 3, BFπLOCATE 37, 8πPRINT " The diameter is any line that starts somewhere on the circle,    "πLOCATE 38, 8πPRINT " goes through the center and touches the circle on the other side."πEND SUBππSUB define2π'Radius definitionπ'SOUND 700, 4πLINE (50, 285)-(590, 305), 3, BFπLOCATE 37, 8πPRINT " The Radius is any line that starts at the center and goes to the "πLOCATE 38, 8πPRINT " edge of the circle. It is 1/2 the diameter.                      "ππEND SUBππSUB define3π'Circumference definitionπ'SOUND 600, 4πLINE (50, 285)-(590, 305), 3, BFπLOCATE 37, 8πPRINT " The Circumference is the distance around the circle. You can     "πLOCATE 38, 8πPRINT " calculate the circumference by multiplying the diameter x pi.    "ππEND SUBππSUB define4π'chord definitionπ'SOUND 600, 4πLINE (50, 285)-(590, 305), 3, BFπLOCATE 37, 8πPRINT " A chord is a line that touches a circle in 2 places. The diameter"πLOCATE 38, 8πPRINT " is the largest chord of a circle.                                "ππEND SUBππSUB define5π'tangent definitionπ'SOUND 600, 4πLINE (50, 285)-(590, 305), 3, BFπLOCATE 37, 8πPRINT " A TANGENT is a line that touches a circle in ONLY 1 place.       "πLOCATE 38, 8πPRINT "                                                                  "πEND SUBππSUB header1π'    Draw box in which to display circleπ     LINE (275, 50)-(590, 275), 15, BFπ'    Title on Box                                                                                                     π     LOCATE 5, 47: PRINT " CIRCLE FACTS "ππEND SUBππMattias Andersson              3D FLAMES                      phobia2@hotmail.com            11-05-96 (15:55)       QB, QBasic, PDS        164  5414     3D_FLAM.BAS ' Phobia here... This is my first "contribution" to ABC so ... errr...π' well... something... I'll just comment the source and hopefullyπ' most of you will understand it... There shouldn't be any problemsπ' if you've made any kind of demoeffects before.π' This is a little source I made in school... the computerlessonsπ' really suck!π' Feel free to comment or critisize (the source, not my bad english!),π' my email is:π'π' phobia2@hotmail.comπ'π' I don't want anyone to "clean up" the source like someone (won'tπ' mention any names!) did with the flameeffect by Martin Lindhe...π' If you can't write new Putpixel and Getpixel routines,π' then you can't make it noticeable faster...π' One thing that could be made is a precalculated COS and SIN table...π' but since that's not the slow part I decided to use realtime COS and SIN...π'π' Check out my coming demo (it's made in C++... but check it out anyway!)...π' Send me an email and I'll send it to you as soon as it's finished.π'π' See ya in another source!π'πDECLARE SUB pal (c%, r%, g%, b%)πDECLARE SUB flam ()πSCREEN 13πxoff = 160              ' Center of the cube in xπyoff = 100              ' Same but in yπzoff = 200              ' Same but in zπxang = .05              ' Don't change these... they control the rotation.πyang = .05πzang = .15πpoints = 8              ' Amount of vertexes in the cube...πDIM cube(points * 3)    ' All coordinates of the cubeπDIM scr(points * 2)     ' Coordinates of where the vertexes should be on the screenπPAINT (10, 10), 0       ' Errrr...πFOR a = 1 TO points * 3π   READ cube(a)πNEXT aππFOR a% = 0 TO 63               ' Change the palette, colors 0-48π   pal a% / 4, a%, 0, 0π   pal a% / 4 + 16, 63, a%, 0π   pal a% / 4 + 32, 63, 63, a%πNEXTππinc = 1    ' This is the current cube() pos the calculateπππDOπ' The following lines are matrixes (misspelled?), do NOT try to understand them...πREM ********** Rotate around z-axis **********πa = cube(inc)πb = cube(inc + 1)πa2 = COS(zang) * a - SIN(zang) * bπb2 = SIN(zang) * a + COS(zang) * bπcube(inc) = a2πcube(inc + 1) = b2πREM ********** Rotate around y-axis **********πa = cube(inc)πb = cube(inc + 2)πa2 = COS(yang) * a - SIN(yang) * bπb2 = SIN(yang) * a + COS(yang) * bπcube(inc) = a2πcube(inc + 2) = b2πREM ********** Rotate around x-axis **********πa = cube(inc + 1)πb = cube(inc + 2)πa2 = COS(xang) * a - SIN(xang) * bπb2 = SIN(xang) * a + COS(xang) * bπcube(inc + 1) = a2πcube(inc + 2) = b2πREM ***********************************ππinc = inc + 3       ' Go to next x positionππIF inc > points * 3 THENπ   inc = 1π   inc2 = 1π  π   WAIT &H3DA, 8        ' Wait retraceπ   flam                 ' Make the flameeffectπ   DOπ      ' This do-loop calculates the screen coordinates of the cube...π      scr(inc2) = (cube(inc) * 256) / (cube(inc + 2) - zoff) + xoffπ      scr(inc2 + 1) = (cube(inc + 1) * 256) / (cube(inc + 2) - zoff) + yoffπ     π      vx = (cube(inc) * 256) / (cube(inc + 2) - zoff) + xoffπ      vy = (cube(inc + 1) * 256) / (cube(inc + 2) - zoff) + yoffπ     π      inc2 = inc2 + 2π      inc = inc + 3π   LOOP WHILE inc < (points * 3) + 1π   LINE (scr(1), scr(2))-(scr(3), scr(4)), 48π   LINE (scr(1), scr(2))-(scr(5), scr(6)), 48π   LINE (scr(13), scr(14))-(scr(3), scr(4)), 48π   LINE (scr(13), scr(14))-(scr(5), scr(6)), 48π   LINE (scr(5), scr(6))-(scr(9), scr(10)), 48π   LINE (scr(1), scr(2))-(scr(7), scr(8)), 48π   LINE (scr(11), scr(12))-(scr(7), scr(8)), 48π   LINE (scr(15), scr(16))-(scr(11), scr(12)), 48π   LINE (scr(15), scr(16))-(scr(13), scr(14)), 48π   LINE (scr(15), scr(16))-(scr(9), scr(10)), 48π   LINE (scr(3), scr(4))-(scr(11), scr(12)), 48π   LINE (scr(7), scr(8))-(scr(9), scr(10)), 48π   inc = 1πEND IFπSELECT CASE INKEY$π   CASE CHR$(27)π      SCREEN 0: WIDTH 80, 25π      PRINT "Burning vector by Phobia 1996!"π      ENDπEND SELECTπLOOPππREM *** Coordinates of the cube ***πREM  x   y  zπDATA 10,10,10πDATA 10,10,-10πDATA 10,-10,10πDATA -10,10,10πDATA -10,-10,10πDATA -10,10,-10πDATA 10,-10,-10πDATA -10,-10,-10ππSUB flamπ' This is how you make a REAL flameeffect ...π' (the one by Martin Lindhe is FAKE :-) (he's my friend, I wouldn'tπ' mention his flame if his wasn't) )π' It simply adds all colors around x,y into a variableπ' and calculates average color, dec it by one and pset (x,y-1)π' Kinda simple...πFOR p3 = 50 TO 125π   FOR px3 = 138 TO 183π      pol3 = POINT(px3, p3)π      pol3 = pol3 + POINT(px3 + 1, p3)π      pol3 = pol3 + POINT(px3, p3 + 1)π      pol3 = pol3 + POINT(px3 + 1, p3 + 1)π      pol3 = pol3 + POINT(px3 - 1, p3)π      pol3 = pol3 + POINT(px3, p3 - 1)π      pol3 = pol3 + POINT(px3 - 1, p3 - 1)π      pol3 = pol3 + POINT(px3 + 1, p3 - 1)π      pol3 = pol3 + POINT(px3 - 1, p3 + 1)π      pol3 = INT(pol3 / 9 - 1)π      IF pol3 > 48 THEN pol3 = 48π      IF pol3 < 0 THEN pol3 = 0π      PSET (px3, p3 - 3), pol3π      PSET (px3 + 50, p3 - 3), pol3π  NEXTπNEXTπEND SUBππSUB pal (c%, r%, g%, b%)π' This routine is MUCH faster than palette (like... 10000000 times faster :-)π' It uses the BIOS instead of whatever palette uses...π' I don't understand how they made all routines so f****** slow...π' Use it if you want to... give me credits if you want to!π' Lamers don't!πOUT &H3C7, c%πOUT &H3C9, r%πOUT &H3C9, g%πOUT &H3C9, b%πEND SUBπDave Shea                      TILE-BASED ENGINE              FidoNet QUIK_BAS Echo          11-02-96 (22:21)       QB, QBasic, PDS        218  14311    LEVEL.BAS   DEFINT A-Z:DIM SHARED K,S,B&,Z&:V1 'Created by PostIt! 7.2πSUB V1:OPEN "O",1,"LEVEL.ZIP",4^6:Z&=10463:?STRING$(50,177);πU"%up()%9%%%R-%1S7sFXu,/gN)7%%Q6%%%.%%%%qj&%jqS#ufq,rQ<'T[_1)I9x4πU"aCf+)bsY-xCmdN3Vm:*9-_eX:A%e'sNHq^NwvrpbtHnu=W8GN3V;Fce=EsD?2\+πU"bjJ^.=tnm?[e^XlB=GtRy7LlVw3E*#/P#-ti=1pa$O=0PL#>DlvZ0k-GU+4s8tPπU"<?<]&kd,4b^Jbkh-rxlO#(LYek7MOSyeX\2%7V>?R='?1l];=4Hp9VBmg>?g%?8πU"6S1,LiU^a\2]eWkH/#tg5.Gc?<i6=Z/PoB%3bz8#=W5;&\6WkL&/Ksjad;b*fe'πU"YIZUfY=ipcHwi9.M:wcz9$bhgnb%mZTL=m;WG0qz=.l#-1AeNg*;][U7cADrJ?aπU"SF#K(FGB(h.m*?/7&'wjgJ++\'OdVep^=RhR;V)$fB+;*:U,yEQZRiw?,a\,)ddπU"BiW02QBt<<2<H&g^chP:(QevtbBwNBRruB?CC%gE5]OiR<7KY3Ui&tQj7%5PRW&πU"(U5mH)0EK3XVj_<;XEtB>=H=G]gDH:/gP.srE0q-A[SWw?Z6hf(c]W>psob0p<6πU"ZUs+\khrtEt>S#erK$NFu7-.T--T3KL]Ge-ldBJmg%$>*lBI-IP^j<umxa.nC_aπU"$;CmC/Gmh4Px#UqPguLLVL/?E+j*rr4c+H$[4^N[%$>\z5jgYuMeRMFs**fFS/6πU")>b?x9T'VqyM+8+NM91-_MVAM*(X$alL13_;>*^9cN/oH<9bC&b>GbJ6x1u5sgJπU"(mTOkIdJW>Q&*gO2l%abKY-K0EUw:3k%)nX?6-$#ICfj2T?1aQk%sl]PM-dXhl=πU"mC^$uL4JF:>?MuLO54Dsv<AzhX7.bozd-Le.>Q5e0kS%Q?c<%m;K%m)meBee6/MπU"NuS>3RHT]>_T-a/r(^WQT5p/#/xdd5cTi2[W_vTTJFZL;SdRKSS4%qsw7I]Ep#-πU"ii8T+adKN]QN(v_<p7TJNBb')?Al+218($_B,G25LjY6*Ia6X<bhv(hbve4QbiJπU"OtAXl$YhsG:/S0gubG<8)Gkv/,C[Q\rTIR2GZZ-FKO5F+\LRcvCUB]4%c2jA=24πU":]Mma&/<IU--e0pk7$]%xD_c+X>x^IP7p;mIg9heb%Lui^l/J<OBM[:mj,mKlT;πU"$-GagkUoFBGK6*L%C/MS<ECE]77VS%of?5QNfYJ,JB5q5cV+s$TSR1xkCG;N/m6πU"u*eX9hCElAFYg5^5+6Xm#gMej:,J:mUKGU>Y6,_?O+G^N3DLE73f^#TjfTRsFxhπU"$QmgFdn/H#.r0XxEDz9S9qvTJRQ7ME58_t0GYc0<KExwK76f/x)YKn/5Hn,0;H^πU"6:0kIITr]Hn:0%mh:&8VPwXa4>^HulB^u$Hqh]x?1vWlUo66UxmU9c#w,%up()%πU"9%%%R-%lX\1F;Q=6M]*[%%,s%%%.%%%%nh%tsxS\%lffkhf=[#]9eb')I&oLNxEπU"5-qNdEGT;pckHJLGhd%)ThXbJf45aMM1HI]+QSWX2rp?fdE1NJNRInk6%'%%%%%πU"%%%m%%i9rue9]$5T52R6.u<s2b/<E-'QfiDTtrS9GH:NBZ\76WULW;LnX:.dq3SπU"sM_l0YpW08T.:Jo<(\dPpCp3($4Ba_\qQa2hHhWvfK,Z:3Wr%(Kw)ECME'=/VMCπU"d\BuB_Na#fTFb5TqsTtKq=Qv^Q1bm82n%Clql5:v(RI:0D6,BXaDgABpb=G2m<TπU"nC.YBuzfZW^A.)Zn<,2GHW-qluT[q[$#kvbT64rU0BV\$)t>ZkO87EJ-yjDfCrHπU"V5.Q9ITxOP1=J2gT0A.rTED5kph#'DwlG/^lPLr&8/Ns;_caH3ebx:3jV-NJ;mzπU"d$WTXfn=3w6.;VV$ubKQ;M+m2t0lQH(NTsr:E^8/_aT8i0/zhit8s?Sn'<LihNjπU"9_hLHc-X2WNr(\Hg<-bD0uPB^>mfZEclH/UODs%$md^U&<wCfUj,vx>Q>(NTIrfπU"jToTPrPc'gCPV95mh3d..dUVN4huTE\7SM9vlp\9AKq.xP8aaqapZtlwoHu2mHbπU"&wZwHMsWi8N#ZTCP;.=r_?8wsZsuuYD,D2P*F58Ztr6]0r8ZjI$g^iu8woO?XDDπU"pB(T>x^DlyXrt-'[sSx+<V0Kw%Gx%DZh4.PhSwDWn.PF<'V-(x1VNhp&f6ONbP7πU"v'C<>&N4r^>0,X+FDKtfAN'.N*$vo8ChFD>a/NAuzK)-VEddu%o\6rf>VOV^(\>πU"=KchR2N%n5L]'$Lti(<v[pXdUg-2NoqA:I5bE_+&o&aA8h+e_7Tpq$.hmX:'rtzπU"3nmtsYdcwOfvtlRnHDKx_Ni$ublu0*sJR#1$>s_3w&\K*C59,B,Zh7-EmbR,zvFπU"QpT(lX4X4Oj6:Dl#sv?YF$uD3Tfu)Y>(rZY&r1F3.L#6o2vkwJmIRdnx>,&l;H1πU"xFG/UpZn+l6_MbODc]w^DuCtpHgti*w:[MvXN^2*sPywm*cmwtEZ+ZvB._yN\NvπU"-,>E)m+&VUpv.jS/JS8.SkTo.'0vKu2)\i].yko(B]VZn<rBuxKj$a\^Tet,v5&πU"Z'HXEq\-.dTXbwqK$4vugAKMlo6l&'$qzyvWa%$z<n&f%:$N_csjxuon,Ug(j7rπU"F&tMa$XATde7udh6w&sRvv#ozdqr$.JcP]lR=t3wuYmj6^=h)MA6K8DY:cn\XHuπU"8d?X7gA7Y:H[hAe^^m&Ep[L9Z>rXNGHw,kddtIwUAn^m[YK7/lrK$IV.CSKVIfYπU">iU.KS)KIdCP^42RWif$4G?P]1OsK=-<l'wosr\('gtD,hrc)s4)+):c)a.S<dBπU"NZDsjpe/klx95Z8wu,;dEc[t>&8\'tVnstXmplYArIFTvUwM$cMc;WAVjFYHir*πU"6Sr*SrVjH89\NR^8^Wx'tN?OHmM7]Xf9Z^^NHk%culw&j86Whbm^BnugZ6D:5,\πU"W^kL2HFu<rD$rv*\hFbRJE1/nSdPJ+kyH4?6FWsA\iZ(Y(EM:.<5=Uw;mT]tcjQπU"pn26XICrJs^P.':)fsA4jcB9=.'r7ZwESFf+X'q?DA8FGNj>]6np=Xu)OnPDkP*πU"F^RbU[g\J2Ppa'w^]oT,V;jNw]c?HDqO#m&CbNKN_u&8:$$X(;g1i5(7HGFYm-8πU"JZ4Wh^lfstqtX-GBCZ^'kdxsg$HJ]Hic.HwZ+NZq<XfGXY4NRxkiV]8NHq6<Xc6πU"luZ>C=-wi\;4SldEGn^Nl_uhn:4NxI8Qdura>:Dw;u[Y4\Nxki,V8NHZq<XcX6uπU"Z>9C-w]>N_u>%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%πU"%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%=c>Xu%p()9%%%%-4%cWsgF)L<%DN)πU"%+%U6%%%/%%#%qj%%jqWS#ufq,hf*]f[O1ixr(C_IphW:59?d+#ax^l/WMw0&%7πU"M<)>b8$Tuwwvp4Lp6x/U2pUfe\cF#u63U?hx/osaXq6Rz_\T_msVWfaoKeT\o-,πU"pNp%hm#p=vZ?F\Ucdh]vDX5ipPWFW85;J[q\yeX+6IbAp#[+2Z2]ZolI9:mXZXEπU"1H;6[4#WE'V0W?ujXq53w_t0872GiLKPlFAz,EH7[LQiOj$qF+VJh[SzlN3;8i.πU"l.;%YxYNz2zQX35naB*ho_Lh'6eS]X&]Wp%t%QZ%f1N+m?ep.AxBeL'WyX\.%/lπU"cSB_jK)QT67k;HZj&X=_l,G>qk;'26>e7&/HCe)y1+eV.,3<l?eGp^;*+%$h[osπU"Q]6D=,Jh4NNXI,HhZwA[j+c73*$74R]ub+,B.W\Bcma[bZ>R5N.FHNMk3tJ&sorπU")ae8nTK02iAfKf-jP60g\zQ-qi,%G\)3V\s^sGh++rleHT*LGVi5i<_[0VBt4haπU"BF=HB1TiPmTU:<N(IqIBX4V_jbukNM34+TP+ZL>#>E;_elj6;dTM'sM)_LOh$bnπU"bzANbKK._\DsFQ)ynL6^1al;\leRe:.cw)iKnIk?5PP,>'&I45(*F$NRwIT/kIQπU"g'o)6*/$Ewx,%U-u>C%3>MWyCZETEff^1_MPRGQ:<:,pYg]QlF$L3boT#R3G4*CπU"<R%(X9b-3,=i)cG-6#R0LL,=.+aos%c&p$5QR*nQ_t&.muFPP9bpr\-5wbr>8_KπU".lGP*8L;=,TbG.,3-B]AV#L-K4uLve^y.vD<2CMVJ)jhA\ov5M9dq=A8D:=,ND)πU"p.9o'JPal\.(.'nG:2wd23sv$B%=Eh3ENlMM$Q(lQ%.f87<;SS?NYW$:v7EQpnVπU"bxfqVeb_W:PVSSao('23sQ5sr&r>J=/Cu'MlQoM%b*FlgPfPY$=9*jZIT<z.e?-πU"*d?d6Z/T<%8H%Xxv<UYr^-%C_d9X++DNXL#5Dc*Vn9+(gwkK14hF1vK\9\O:%qWπU",KcqtPQEd[4Lj/,G%SD4IlfCA+t1N^ANOBUf/7_#YHa%&UXlR(E$bR,d:KDmh)=πU"1C;WynB.c=CsOxy(_74Sfh)Qh]'g?sUQs\l7Ri<_%LH.c:_m-<4N-6J9Z,L3'+&πU"3x_KkmS'YimY4mD8G,p]gYLL]3/&kgGJ%,P%:fDsQ%9%mguSCdlAajIBT^%FM3,πU"s2Xf]3$8=A=<[qE:6/i_GJO[*#FjS_woxI99,bxIu,aQ2_#>*R.uH(SAitx'fGSπU"7k947_fM^AnL*#Vw5w5WiK/nWK\$9)nBS/g]0S0Q88y*:TFBZzo9mOI/o('rjoFπU"dlH7\CHt4QjdqiIM=aLC22<+h\.L8rckd%up()%9%%%#-%IY/1Fjh,Pq..7%%SCπU"%%%.%%%%qj&%jqS[gfx&k(x>[917xBkXx0=Zno;:*3Y87FESbx^YpjDm\&tSaotπU"p'QFg%q;tqm;tC3xvrF[fYqS_'-o(w:o*E6aC>^#\FeYTU$T,=_nkJI*6acVLdbπU"Vm*%P565a<_FdYMLivjHP$()2cMlKXp)ir-x)qtX/]R9_b;w_#]%SbLB'ZV-#-eπU">:JVLqbbnpcYQ..0>6<%]U2b$j?n<L\i)g)(8,1$56;u1;E#25-7-vUDJ[<?#.;πU"F#WemT/5q)>7<[l5[=HBD+*o'2lN.P4I[_+vaQUG#J/F)lPkUUQDDukkk4:JSXiπU"UC+XIEX(SD0tGLqSn[+fPRp&:VczRqfNORpnfk$cFfD_k,+]L6(^4is/kM$fh95πU"+Ji<I2/0D%fMQc#MhXv7T*4dUNp;D>suu/aDPZV.*9Qe+l\jcfOJ-^6N6%YOm?.πU":j\/]+k:;tUbXbDAkauRL[%&[dsQX/#5AXY,6Q?3DnzR?whiDh<2Rm:d='IWPYQπU"AUg>AP-H$U=XT[DG2UQY(a\lrsY[\k:QdR_WDSlqmnu+dnLCj\IF2wtNunS]lO'πU"W,H%<R#iAWH<r?Rhi63Ni)Y]e\hIFQ7RxJb>E,;v-d2+L$6Y4Cg%tsThxwMeo1fπU"]j'QZko)=lEEAvyu$JWjfb-PBJ=l$*o'GDl>qI&e&$(LH(Tf?Ao-9.VIvyDu=93πU"\OAI\uCGD-9-(])^Fi-EKUH-gg:RLa&mLaQ)Obvn87M%_^t4;Y:2FjIVf#TW.<<πU"&ra)02jWq#m\XpKLW\c^.#B&tvd_mWE31=M_<R8QB6WeuOMn.quKi.nOedbf/(RπU"7s<IB-$e5$&i;OeJ3N9Ig)zxHj]/H]WY%W[Z>LeIG^_Ysg3;CYK,pZRqLJ>0ye]πU"*U<#U(^[q5_::8?>_E,fJAAIRqn0a3o>F[G(m6rOnEYD]=1'Oq9rRd&YC(&V5sLπU"kEIVbJ3U-'8F[U\t$a9[ROC<CUsBioX2'hf<iMq8>hH#v8#52pk3I;\$q5v(HBHπU"HEO?68w6JTe?3vSxk>U&]*&k4_dg6A7f6h'qc]>hHlGogc+&r1>IOBxLc8;?n?9πU"#yS+LLcPd(S=Y44l\^W*]UW9)Nc1FaI-X1ZWPV\D5Px7ftF<rZ&_<p<9pbLRxY8πU"pa(fa'F)ndnN<>Q'Qc.7Q/*gQ8l=Zg[0qrw#pK8[QOMRaGrw1'Ze3WTH6\>/-NjπU"s>X1Kh>W;^dQRIRQSl3uqZ,S*fA&a9/uZ3a0\2fWfx#S-#^rc]/$kTJB&$Fahk5πU"Cq3q%Ef]yrsZdJJ7E_*Yg<.M;\0CXX6Ku[zE_tT+2fnHLWRp(chc(fm54-[jH_$πU"hEDjBEj#aFQ01V+;T>cl0/>he1zUGh:c=Ml9/>$k1yHBM,9^TcXC1/hKm&ziW(*πU"TBjs0*20j,-*0^Ff:;MAUWNp>\9(un5O]Y)kxEYti9nNS/=</9uN7bYpiK7&SesπU"m6GDv0$taLd\AhG;ML1^;Kj]a:M3]Zz<RX^YG#x#&O22%2$Xt8h$Y[AR$Ia,C/tπU"qBwiQu)Cn8vCbIvNnA4wA[F0)*tO)UXOyO>^S_ED7FvIjF4il1fu=Vf'%z1mrShπU"bljCL)v60DEaaFu\<S5aTrIT=<Hu[jf:e)SRl=?2:pluK?'3,<2-oC4p1s$s7x+πU"*Xk7hvM[H,#E%PV(WkEFWELVml_qmFvroqw7O-khxNnt54A:<)Fu%lHv;<7W>+nπU"^GQq:S2A5=[6wigxj*+FY'#cL)z]>2EMgB(tI+*Xf+X9gP,C.iLpH>I,x($1t35πU"C$nSE(N9X8MP9ZqdjB+&dn$,03thmAZH6=HX#qhK(<W$VpnX2,m8mwPYkL+p0/KπU"rXfb.EB]WQ.L,>5Gn>&f#vG,3e\TZ+u;A(#kT-HYQK(6LdJV+=>XB,[1(D#e7tPπU"$1D)C1n&T)1/E#D-_jJohIFDgV?MOjGnx\UK?GLKPM8GKt=QYQ+5-I6Cvc2CMk_πU"iCartY5YDR,n2>?2z*l%+xZlF_yIl#]&A60SAM_$rXY#f4KQ2cl#2<W-DgDFK,QπU"knLv8]To/Gf/S_n;6-<Bx$.1arjh:gyOVZJ/ARtD]A#x0-S*D]Le3U+[HQ:M()HπU"eFxiYZ^2Q7>EW-Oj*h[oOJ;b;ppAI[gV+b4-NtX:U)s5<2VE3cz#huv>A0OJM=&πU"dw'rOzP-1\QIX26=UhSn+<0n=)#MEr?2.T3-8+pK^bD4<onTn5^Y9ZD,KgESISNπU"r:%I.<]U)80e't,$:W1u2IpwT9Z%6Q+eGs]Ri-^keLn9UkBqbfW97xzugAb]mx1πU"OG>TxIhbX'tK%u-LTl_SOs6NIEL44v0eN697vUU:XOl/Wg.MjVMLtRVH,/NX574πU"ktn\0=)HVn:(c7U&<$pbdU*4W5N<[sGHw6ta6NCbBxzBifJHgW$nIjkRk%#p\HVπU"9-O\fBZ,0>Zr$':qX<G;D9<mcN*:$jd>,H+^nQA*m(&Spy;4_nvMWyZd,PslfH+πU"MzU*rE9HMZJ4gZ(#$$aj2WI8^/4vbh)1l0vMUphB4_t6\/u?n'>](\r5z*%O(bDπU"#*v>zX1jH#UpzC(s>cX\EdxeXEc,:tFEp2ndPlHNEt)391zJ9^HA(aHi^goK1BAπU"gdLyycd2U;rKdi.ac7u2p[229Ag?Rd,-HvW^w/X9-gm,VCA+eazSE1wIa0v8]_=πU"D9nBLz,[>%+0NeJ#x_s[DKu?ZE[X5Pa^t=9mQX-\Jn;qq)5gX3/hC/LBd4q.EA7πU"?=Z5's7evmvOw(ccrNUMmJVvgdJ$yxV:-H^a/q/q>j]x3B8c[WJGhwJSND2Sm1KπU"7DPM-6TQPtCXTrF()$m_[1u[08:3>JviM'V8WruWL4+6)WdrB]0Y).3;x>8g0tBπU"1KF38cBfb1,r:+Z((retcw7f^cxYu.LARf&=qL3?)97jJ3cO#CIvbui_QB1Q;qXπU"<'aRIu(>G#x4%up()%9%%%#-%^fIsFjj9VI'4%%%te%%%0%%%%qj&%jqU%ZSifgπU"yd*D>=\C3]U4U8g7Oa[FtITGMN0W)4+S76Z]X(i)^1vc924HiD#3byJZz;E>z6RπU"p[\:vJrvIBnrgk$$uxjs%Q0lKY;y.F[urOo_HxqBNi]02\jlt(/-dhDh27n=+LvπU"Ed,B'#bn]#Vr#qC[xrcdSqjb67BhuuFnd;QGG?g<F3jiW.E\%e7M7o,H>T*1WIiπU"SD;#:lX#6lY/jqnY7\PDN?Hmy&[o*q._$qiH,]l77fGEbR3v/OX\'/.jEpB)+]vπU"<e'hDIi0Y&fimt)l/=<j'MLXZHuhIwX>VD(O4Y,P^Hq<fnrZ>(*>t,(f+EQ^hkhπU"6xG?(t<p&B%z:YCb0CJaWIk]+5\EvAEbt6BJE3CZHN/li7DKoP+P7W&lVEgqYp>πU"i/Y9^-33/R[ncUe(5O1<wn)5V^I1;\vo*V)dbBr?xG%X+;0T3g+/#])-pmW)Ub*πU"OsaCrcwNfq>O1q$b'p5B)7FB-E?jmtkq^TubPo5#r3;Qd_c&R%VqT%9M>&2Ik&5πU"Xh14n;Am,,SI5]+=>=^PsxHj.JG(mp;TDv14RW[o^38)V$U+c7)EL0egXZqN2yHπU"U;s29k*niZ7Oe2Iwd;6)7+Z=^s3DXRgZ\vu7O/Al5ng&;Y&(w17s'Z*v\OV8S7aπU"+=tP,qXdA$6MBPUvRl8,7Jq7s5P>GBieHm+ojiC%66cKFjIar>X/eGY7Nq?&]eTπU";];J:pNu)u#WADu0&)Y0R5PJ(a$HjJl/-HKAG#Z+7)yo?<Gp'e>PtQ::q)[5aiYπU"+FdrPcVV_f(M6o7QZa2OgYp&.7$RB$-B'7sGVGEb_%3&&*iLrJbGcq]-FJB\L7$πU"l0:'-NW4%5MXTf#D3x/;^sKGaS)5N'a9h.(Oh:1s'5q_PUU]57j6's\,HJ$e2eoπU"a:MJ50R:Y>\hg/ChCgSj)-ZP#6:,-h$chw^mHdi'9Ye73/SPvUrh(7(=gh)[YJ$πU"xJV_2]][=l_/-RZqliUUofer9$&*w(V4kzEs.'7MlBfpG<RSjOG$o^DE/338\96πU"aaXJ%[mgBYRiDW*(XqNH*Iz.u$Dh)D,>eW#[utaNfEcxJ?/,%nvTxi?[ptk>lH]πU"aOvd6ePg7o'R=VyQWa;][7^k8'1E&2-;B=y:kWEF2CP)mZAi-'5/(-<m-]nKyY2πU"MFxS/g,6o4J,c=E>Ht9BmR))%lKep^=5aOWi4adg36Zh?,9FoLr+1?N<t:I>%J+πU"Y?\HvWH\t;6g^1B^1\aEBSDM),7XH%erY8ek$d(%5j3ln'a]1=P,E)0oSe)RO*>πU"dNd$^PDp^7'6(<^bDl6PgNN86JB\'?<ms.%lx+.^M39/D;11AVdKn%=TS9EUdu5πU"gb=F]TltiFo($:=,]6pJ:#IIBR[2$Ccm)]K=k*KXl_z-1B%j\<joeXBn/Pf3tM7πU"$I0BZm<r(*YOVgNbvJS>5RLe6)IBY&i25qofmJhidHn#S9U<9B)[95'2'Pq'4k*πU"nVFsQ,/P?=Ku[M-YNtYW'R-IB9vsdw01Xsi1OK,rCnwRD7xuKSTxa/N8zPSu_NuπU"MOM'hI1#NRKt+Z&GUk_7f-^69$I;([r#Mz0vi0A>Nt]*<Dre.97)=,gQY2?R%G1πU"NUwMl$5W*3:G(Du6vk3=%vov#gi[xR^JWdlYdBk(;F]oV)sK'>a>&y)l\#,,<L*πU"Vj4Glw>Jl5mr.%wU.31u=(#QRiSJ#c^)m41.T5K,88vrmLM-^nf38H,5:4VQmikπU"F*EKby&yZ^d=y\T,'%^I_k</hZEnGlSY2=)35JPsw<iku&v/&/HE;>KcnI6hHRyπU"ar7irNIq_Vk&+x[X]jMLDPL*V4fZ/vQ0\QgIRtxJL=,ZOIK2zcXzv5z+Z,Ds7Y9πU"aetb,-bTtR).)6Nc\6>*;c(0CvfBOB5LSM6f<kQ9n[601]bZ$dXG2:?Xk/7'4)SπU",q&^'oe4/t.Px*\#Gz/cb)e0^vWXZkEZ'V[/Cn;F,5&;aeD\oUD9AB:1q.dha1SπU"HUB,;PTkl>E+A#+&C/QLigQ%JbNE7_KLp?7_S[j\#L[%6++ZfXE;-\(K9?*<SZsπU"llI'vaCd?(-mHe'I%9/3ekhnr.-_L;:.#E$;Ktp[fH,Qn:1DSZNUO,',V5-(*]AπU"J,kpje>=-JSg)cY#BV[A5GwQEiH(oj#EW',uq[+'=jN#HE&;i-8Nn)m^%zXR4UMπU"&'d>,QhApi0#J?]v*uGi0)/OSWoQ5_tKqGdo_/v\e<s2[Tin,GbE8\]UsCNheQ#πU".Ve][NPqwf=>NxHaOXfHXGFYp?#(eG)?p$O<l'y6',FnN\asil&H[lfU\45=_fhπU"D.7aX3/LY&lL6Q<AdlxZK?sR49(68fN%B3X_\L-i?.mnRZJ0w\[1EKJ,\7Q/J^<πU">Rb1q*xpf.)QW7jxj'n+YBr1TJPx*AqBQg:7PQmo$x2d=#)uo6=D5+-^)fAtKpVπU".XU4h[yo/2?<sai_,Vn_c>XC&XB#m*<Rl,67ffb)J'W2:<4#*y.z.m=>c$1QRURπU"k/PO*MK'u_WM7Rg9:uokjetBo>*.YzuJq1GN=U)[$hD(OwNEQ?cu%N8T3?A\_XbπU"Vsye\GKi'*oY&gCRkG/Kw#JV&,OCZ8%hh>$&]D8._E%dhJm('J3,'1ok):6)X(/πU"F(;9/[mZJipO4uSs778BL>Ira-NiEi](I]/%]m:LKF<+Qd+XahEC*WT*Vc]AP[&πU"Qg#5?TGI#nnG7W$],DAHwRe/[SiZBOKu-hTZ*T?k[?G/hozNm>RB/K_T+v(T:m[πU",7ghW7$eFndZZQSPxb1p&O3lP:=61ub?>0sjEd#cImL5r:9rBX;dj3J'&O?NEN1πU"N,R3;b(MqCqTQ<>2tE=Q+_jkc)2p<IFKfSC?.e#XQNCk;V0#w/5YI9s[u[/x+.,πU"AJiF4w5\0D4x:t;pFGoSQ6-hAC:94>-]#H^-O'XFRvp:IZTRo(wjgLD)hPu>tgHπU"Z&op)IMd2d])Quk-#dFS#TWkjWFd(%q.Cg9Ync>$_:pp?O3j_[*c=5sD:oCL[\nπU"vOKfsM^D\LA--ggyPCVq8+>NnKu==g=\o.&l7S1l(s,C-q:7M[tjIky%+F&&&DoπU"&;me11=TmDQ=NT(/)a)n$mdnRptH8/:Oz.25q[P(8TZcj%3Rp0tMDdP(J'nq<EFπU"t#+bFB:ItZ$7L-#Me^zF1:&>gnI=o[\3nZ(EW%K[xI(buGB_he3\7yFuv.kybE>πU"T0.[hSaG3Bb1io(.)'JZF-$Q[GJm3^Re7^DTT)saIHiE%03*VdKE<WLpWB0c5.gπU")?MC>;&F_7PHhc[_].5i9KL/e?])zNU4Aj;+;DyXo[6Rjn8IlB8[c#fK\;j4#t_πU"<No[0c(1dobOQid>td^xZV:\981nnkOfK(.8t$(z*Aj#mSyWP##[?mwTX#hqF4]πU")LD8)XT.fH]*Y7YS?NK-eaLDt7[JRCIi/wdI7&zjpYp>5<&?j.atn.4p?s_^>):πU"'i_iOIngj6+8Vdg-/QVK*..Iy$#>nf340s[*HYz*W4\ZNt(DCax07F&'7-A?%NCπU"a(uIV^n0H)JS/8XRGY=Q8Mv\_2xfEcbmG+%EOe0ifuWkj98E:8#HsZZ.gaZSz1ZπU"OW.>tTk>X<fioGi/5JceCHP5rZF:(.P[7/]GV=3o3,\ik$h29NT><.*r)3:%Xs/πU"NOp6fZ7Ru[r3pd&x*1LlxS'6[sy3cOK+0CQ%fj&$,OZ6-4rBlY#h4&1['?jyOtWπU"3g(MEMIHU^gCvP.4wk<j,X(S[&R1?,pi*J-TTWl'70TJ&]olG5qu,c74J3[H_Z\πU"]MXgQd.\mG0snF\?Inr^QEQ+4v4KqA4SnQgFafUkm5Y?5arnMmkM%1bRG\q+pBDπU"(3\3m[P6NS9AV<pzbZUQpI1rdNTDXR%H)c.V-.H<r%IIM5+CZsE$OsO<V<lo2hWπU":;1J?RDDV/1a[6<opiM+<<5RU)S*wW\gMl]uFS>V(m4b+GH/$gR%ROB[ehY(B,FπU"LOmAp$HG0f.DZIim\4(#*a\mG^>eZ^\ji3u88=EAna>%m_GEAz'2??hr2mRyci,πU"=USj(9'(15OB7E4meaM.iaZU/ql']#pO7s6EYQH=LpD8&Jhk#O+O0jE>0hd[NV]πU"'$3tI,5AD\ljhFEJ'H4JEd,v]i-)4BiuclvS:'T5)23CUZ5fb7,DD'76:nlD(#\πU"$;>2e#0^tsE.d(N>s=-,*wo49bQ\E%/gp\iEDk8^#._rtY_$dEngS38eLVS?[GBπU"cEs%+b&y/#l+UbN0JP#4('0pueZu(*i3gWDd,^#HC>dagB\F-X#0J5Aw2)1>04pπU"d=:WG%v9mZ[\'%ObisV1KD5.a-jCZ(#nNXwHUjoe6hj9\8BjR+TLG;*o=x%+]*RπU"W2L(u01Rv9/7XUf1]Uz,1eR7'^Btjq%jY(2PUWJ0Ofi(*Atz6$;YoI3C_sb1]-/πU"FeH3BmU6#d45S<aYLCY%(=LZ$kPY7_abG(r0\=oZkUf1i&&lbH'=g;C=jJ5?^5CπU"lkTWdvK=4bJSOBa2<PA^m(fC>N+jptOflM'Z=X81KaWhHm.C5GWqwp)FOvjkG$KπU"ZBU2G'[F%w1j*[&A.zNkyA/Pn^DqkvO5kvZ1i?c;rYb.Gwt;6/n-=\nL::kC7-6πU":s/D'xj?WP7k%l[YT.YPPr$:%hVn65+U=08k(;#t1EHO7q\]Q/Idn:?7R*<3;N6πU"JS#f[G;\hedv6uc\_9Jl-oaHHBbM*b&3,<+.G](ot+fj_%bZ-Ig0a\4kw-Et,e'πU"/+oG;a%.I';;q2):c%aW,9Q\o0/IPIL[7z2o^S$e[:HaUDRuBVt^n,O_[>x4QhmπU"m6)5GJVqZPBoVUiIY*&IpOkt+F=IOH7;G$i+<w[WMHH1>q%rjS'I=\c)J$CPbNkπU"]$%<**CfB2R;9K6Y;9;Rlkf0>\_zueho7s4ius'0hXRUP[SPaB?1h[s4Ew=2ne;πU"H4t>dvU;[xH#6E'Rqt$c)9i5%:RdtcnGucIY51$qR]t%[krgi#&BvY*f7YU<d/NπEND SUBπSUB V2πU"6VMgr1[z[MXZjeEtj3_3tYq[x<v$?rd+-RoS+Mm<I6VmFQxO3cr-WLtK56gS,ySπU"u.fpKISdisJe:s&jcrI+fRKT97zqGV,vq?n&.=o$Xu%p&'9%%9%%[%-%1\SsFX:πU"u/gN[)%%Q%6%%.%%%%%%%%%&%%E%%%%%%%#%qj%%jqSu%fqup%&'9%%9%%%R-%lπU"X\1F;Q=6M]*[%%,s%%%.%%%%%%%%%%%%E%%%%u)%%%nhts.xS%l%fup&%'9%9%%πU"%%-4%cWsgF)L<%DN)%+%U6%%%/%%%%%%%%%&%E#%%%*%/%%q(j%jq%WSuf%qup&πU"%'9%9%%%%-I%IY1CFjhP'q..%+%SC%%%.%%%%%%%%%&%E[%%%%%3%%q(j%jq%SgπU"fx%up&'%9%9%%%%-%(^fsF;jjVI''4%%%te%%%0%%%%%%%%%&%E%7%%U<%%%qj&πU"%jqU%ZSif%yup*%+%%%%%*%*%%;&%+%,L%%%%%πEND SUBπV2πCLOSE:IF S=69AND B&=Z&THEN?" :) Ok!"ELSE?" :( Bad!πSUB U(A$):FOR A=1TO LEN(A$):C=ASC(MID$(A$,A))-37:IF C<0THEN C=91+C*32πIF K<4THEN K=C+243ELSE?#1,CHR$(C+(K MOD 3)*86);:K=K\3:B&=B&+1πS=(S+C)AND 255:NEXT:LOCATE,1:?STRING$(B&*50\Z&,219);:END SUBπDave Shea                      TERRITORIAL PISSINGS           FidoNet QUIK_BAS Echo          11-02-96 (00:00)       QB, QBasic, PDS        42   2481     DAWG.BAS    'Advanced warning... I'm a very twisted person. You may not like this.π'So, if you're easily offended, simply don't run it. =u)ππ'James Morrison's recent comment and short program on my tagline made meπ'sit down and create something decent, so here is my animation of myπ'tagline "...and a small Viking dog they call Narf."ππ'Don't ask. Please, don't ask.ππDEFINT A-Z:DIM SHARED K,S,B&,Z&:V1 'Created by PostIt! 7.3πSUB V1:OPEN "O",1,"DAWG.ZIP",4^6:Z&=1306:?STRING$(50,177);πU"%up()%9%%%I-%Ik8.FH^,qkL'[%%,s%%%-%%%%ifA&lS%mlffT7fskep=OZZI'QπU"'PVj=4/rTJF%Q5GNZ*o;KKO/MyN2*;u==Gl5Il+q?l']P(Z37UNF2Sfoz(Z)8dtπU"Muqjd8dMu*qXDd8M*sza\(ND,>wkrr_wZ#4TP>$'u=FR[BZjhrXEx-Vl(+Thru7πU"8?vZiYkR-?MF9f<2FzFE\(k8=zgzyYoitsWNFKgK$1kr_wFd&[84x3._d<tLTK8πU"PrMP_3gE>xed\:2TxdPsE^Uafp^\H0QTLs>N>t3.fvUQkdf:&99KkUr$hNnxbr.πU"rfcXRpLt'\>F^u]EtLb=pd_SD1>AQAitLJkZrHp.>MuUdkDx-u?qj\LtMuqjd8dπU"Mu-qj8dYMuqXdDdMu*=^DdYM[#^mDdj\i#^nqZj\#^tnqj\o#tuqHj\LM?uqj8pπU"dMuqAXDdM6u=^DpdMu=A^DdMQ[#^.X^j\Fk&86&AXDdMhNfPXDJD-pi_fzpF68zπU"Kq(OuqW2Mh*t[*'dtgn4unU*]#0hCt0Y.mwff0fx$_zBQq<jBv_sdqj\c#h3$uhπU"ivPWrj0KqpN]%kovBxlCX^qBj8dM-uCOAf-KMu?qj\LtMuqjd8dMu*qXDdYMu=^πU"jD8VlO$GFM6:jV;l6a#4N[V>dFD7zM<qerBu]u^#q^nqjc\#tu?qj\LtMuqjj88πU".i;JexDQ]#^nuqj\#stuqjf\LMu-qj8dYMuqXuXFuW%%up(%)9%%[%-%j_l.F3+πU"O3cJ['%%4%.%%-%%%%i(f&lS[gfxfLy,>j.U9Ll0[d+z[ojy(';+8eEVsIg()XTπU"*kyed%#wDK<OwN<NGNP=)Col[*QQTGW]1D^pkm\RP&8*Fy*dl5^Fu#YY]T?S0-GπU"SJeIh%'6K4>KS#ITRhc_l5s[;sy.WQ0A;iL't>gWQZ4u_PvnuHt_;%YqHo(WWUfπU"e6;ro,k-&#(+t/y5:oq\kJJk6Ec-Z.$7=C7lxqEP/6r2Hb9)MgXkruRB^))kJM7πU"lDt4PbCEW1u5_LHf4bAY3CgJe2]*SoA9Kc'w\/kfu35LC$>Cm1MZXI(&U390]ZaπU"#cRc_*%76Ir7/k2:I>cG0lW^o?neOk/A82Nq+jU9sb;bhJVKoX3t%vJ>?8a.0APπU"B8A%n.>?R:6eB:V&=5oQi(L'mWc7Uk*#AVwhJ#4y)GcYH(2XNOPtoq7bqSof+L2πU"5h3*W=aU/U)cO2F6S?joRp5YLwpb#giSqXNpsPK9bbGX-BWS)3>goZB*IXd[)VcπU"i*HG=MKl31O<;MjAsg*?oL:(Y=?>V04*8.K7Z)7l_)lk<g+A_OgfAW+HELLBDYaπU"?U>4HiZjb^gLSgU'w;Sl:>d45Y2m-jV8+,jJ-#d8Igp'sV=.$83V4>A1/+5xq5&πU">/5c'RKf,U'Nm[tl(vOUYuOi<mWbYjKKi[0AF:3(rJ-ljiNYm\Kp\fmRBQcVe5xπU">3bN?p1PrhkSd/Mg?Skv\%up&'%9%9%%%%-%2Ik.FfH^qk%L'%%+,s%%%-%%%%%πU"%%%%&%E%%%%%%%%%ifA&lS%%lfup%&'9%%9%%%R-%jl8.F3O'3cJ'7%%4.%%%-%πU"%%%%%%%%&%%E%%%%r'%%.if&l%Sgfx%up*+%%%%%%'%'%&;%%%&g)%%%%%πEND SUBπCLOSE:IF S=134AND B&=Z&THEN?" :) Ok!"ELSE?" :( Bad!πSUB U(A$):FOR A=1TO LEN(A$):C=ASC(MID$(A$,A))-37:IF C<0THEN C=91+C*32πIF K<4THEN K=C+243ELSE?#1,CHR$(C+(K MOD 3)*86);:K=K\3:B&=B&+1πS=(S+C)AND 255:NEXT:LOCATE,1:?STRING$(B&*50\Z&,219);:END SUBπTika Carr                      SCREEN CLEARING ROUTINE        itaiya@juno.com                11-14-96 (14:45)       QB, QBasic, PDS        178  6560     WIPE.BAS    DECLARE SUB wipe (mode%, switch$, Colr%, Speed%)ππ'Screen Clearing Routinesπ'by Tika Carrπ'Donated to the Public Domainπ'No warranties or gaurantees are expressed or impliedππ'Here are some Screen Wipes to use in Multimedia and other applications.π'The horizontal and vertical blinds are rather slow, so if anyone comesπ'up with a faster formula, do let me know! The routines may take longerπ'at higher screen modes (like 11 and 9, which are 640 across).π'π'Its use is pretty much self-explainatory. First, you pass the video modeπ'(supported are screens 9, 12 and 13). If the video mode passed isn'tπ'supported, it will default to the 320 x 200/256 mode and do a SCREEN 13π'command, which clears the screen to black without effect.π'π'The switch may seem the most difficult, but really isn't. Look atπ'the comments in the DATA statements for more info. Basically, itsπ'wipetype/diretion where wipe types are vw, hw, dw, vb, hb and dbπ'and directions can be u, d, l & r combinations.ππ'The color is the number of the color to use, which depends on the videoπ'mode you are using. And speed controls the size and speed of the wipes.ππSCREEN 13ππ'Wipe DemoππFOR i = 1 TO 18π    READ m%, s$, c%, p%π    wipe m%, s$, c%, p%π    SLEEP 2πNEXTππSCREEN 0, 0, 0, 0: WIDTH 80: COLOR 7, 0: CLS : ENDππ'For most of these, the higher the number, the slower. Except where noted.ππ'Vertical WipesπDATA 13,"vwrl",1,10πDATA 13,"vwlr",2,10ππ'Horizontal WipesπDATA 13,"hwud",3,10πDATA 13,"hwdu",4,10ππ'Diagonal WipesπDATA 13,"dwlrud",5,3:        'or "dwudlr"πDATA 13,"dwrlud",6,3:        'or "dwudrl"πDATA 13,"dwlrdu",7,3:        'or "dwdulr"πDATA 13,"dwrldu",8,3:        'or "dwdurl"ππ'Square PixelliteπDATA 13,"sp",9,2:           '10 x 10 squares (instead of "speed")ππ'Circle PixelliteπDATA 13,"cp",10,2:           'Radius of 10 circles (instead of "speed")ππ'For Horizontal and Vertical blinds, the lower the speed, the faster theπ'displayππ'Vertical BlindsπDATA 13,"vbrl",11,3πDATA 13,"vblr",12,3ππ'Horizontal BlindsπDATA 13,"hbud",13,3πDATA 13,"hbdu",14,3ππ'Diagonal BlindsπDATA 13,"dblrud",35,3:        'or "dbudlr"πDATA 13,"dbrlud",45,3:        'or "dbudrl"πDATA 13,"dblrdu",55,3:        'or "dbdulr"πDATA 13,"dbrldu",65,3:        'or "dbdurl"ππSUB wipe (mode%, switch$, Colr%, Speed%)ππSELECT CASE mode%π    CASE 13: mx = 320: my = 200π    CASE 12: mx = 640: my = 480π    CASE 9: mx = 640: my = 350π    CASE ELSE: mx = 320: my = 200: SCREEN 13    'DefaultπEND SELECTππswitch$ = LCASE$(switch$)ππSELECT CASE switch$π    CASE "vwlr": '*** Vertical Wipe - L/R (VWLR)π        FOR x = 0 TO mx STEP Speed%: FOR y = 0 TO my STEP Speed%π            LINE (xb, yb)-(x + Speed%, y + Speed%), Colr%, BFπ            xb = x: yb = yπ        NEXT y, xπ    CASE "vwrl": '*** Vertical Wipe - R/L (VWRL)π        xb = mx: yb = myπ        FOR x = mx TO 0 STEP -Speed%: FOR y = my TO 0 STEP -Speed%π            LINE (xb, yb)-(x - Speed%, y - Speed%), Colr%, BFπ            xb = x: yb = yπ        NEXT y, xπ    CASE "hwdu": '*** Horizontal Wipe - D/U (HWDU)π        xb = mx: yb = myπ        FOR y = my TO 0 STEP -Speed%: FOR x = mx TO 0 STEP -Speed%π            LINE (xb, yb)-(x - Speed%, y - Speed%), Colr%, BFπ            xb = x: yb = yπ        NEXT x, yπ    CASE "hwud": '*** Horizontal Wipe - U/D  (HWUD)π        FOR y = 0 TO my STEP Speed%: FOR x = 0 TO mx STEP Speed%π            LINE (xb, yb)-(x + Speed%, y + Speed%), Colr%, BFπ            xb = x: yb = yπ        NEXT x, yπ    CASE "dwlrud", "dwudlr": '*** Diagonal Wipe - L/R U/D  (DWLRUD)π        FOR i = 0 TO mx * 2: LINE (i, 0)-(0, i), Colr%: NEXTπ    CASE "dwrldu", "dwdurl": '*** Diagonal Wipe - R/L D/U  (DWRLDU)π        FOR i = mx * 2 TO 0 STEP -1: LINE (i, 0)-(0, i), Colr%: NEXTπ    CASE "dwlrdu", "dwdulr": '*** Diagonal Wipe - L/R D/U  (DWLRDU)π        x = mx: y = 0π        FOR i = mx * 2 TO 0 STEP -1: LINE (x, y + i)-(x - i, y), Colr%:πNEXTπ    CASE "dwrlud", "dwudrl": '*** Diagonal Wipe - R/L U/D  (DWRLUD)π        x = mx: y = 0π        FOR i = 0 TO mx * 2: LINE (x, y + i)-(x - i, y), Colr%: NEXTπ    CASE "sp": '*** Square Pixellite     (SP)π        Cover = 50000 / Speed%π        FOR i = 1 TO Coverπ            x = RND * mx: y = RND * myπ            LINE (x, y)-(x + Speed%, y + Speed%), Colr%, BFπ        NEXTπ        LINE (0, 0)-(mx, my), Colr%, BFπ    CASE "cp": '*** Circle Pixellite  (CP)π        Cover = 50000 / Speed%π        FOR i = 1 TO Coverπ            x = RND * mx: y = RND * myπ            CIRCLE (x, y), Speed%, Colr%: PAINT (x, y), Colr%, Colr%π        NEXTπ        LINE (0, 0)-(mx, my), Colr%, BFπ    CASE "vblr": '*** Vertical Blind - L/R  (VBLR)π        FOR i = 1 TO Speed%π        FOR x = 0 + (Speed% - i) TO mx STEP Speed%: FOR y = 0 TO myπ            LINE (x, y)-(x, y), Colr%π        NEXT y, x, iπ    CASE "vbrl": '*** Vertical Blind - R/L  (VBRL)π        FOR i = Speed% TO 1 STEP -1π        FOR x = mx + (Speed% - i) TO 0 STEP -Speed%: FOR y = 0 TO myπ            LINE (x, y)-(x, y), Colr%π        NEXT y, x, iπ    CASE "hbud": '*** Horizontal Blind - U/D   (HBUD)π        FOR i = 1 TO Speed%π        FOR y = 0 + (Speed% - i) TO my STEP Speed%: FOR x = 0 TO mxπ            LINE (x, y)-(x, y), Colr%π        NEXT x, y, iπ    CASE "hbdu": '*** Horizontal Blind - D/U   (HBDU)π        FOR i = Speed% TO 1 STEP -1π        FOR y = my + (Speed% - i) TO 0 STEP -Speed%: FOR x = 0 TO mxπ            LINE (x, y)-(x, y), Colr%π        NEXT x, y, iπ    CASE "dblrud", "dbudlr":  '*** Diagonal Blind - L/R U/D   (DBLRUD)π        FOR j = 1 TO Speed%: FOR i = 0 TO mx * 2 STEP Speed%π            LINE (i, j)-(j, i), Colr%π        NEXT i, jπ        LINE (0, 0)-(mx, my), Colr%, BF  'get rid of rough edgesπ    CASE "dbrldu", "dbdurl": '*** Diagonal Blind - R/L D/U  (DBRLDU)π        FOR j = 1 TO Speed%: FOR i = mx * 2 TO 0 STEP -Speed%π            LINE (i, j)-(j, i), Colr%π        NEXT i, jπ        LINE (0, 0)-(mx, my), Colr%, BF  'get rid of rough edgesπ    CASE "dblrdu", "dbdulr":  '*** Diagonal Blind - L/R D/U  (DBLRDU)π        x = mx: y = 0π        FOR j = 1 TO Speed%: FOR i = mx * 2 TO 0 STEP -Speed%π            LINE (x + j, y + i)-(x - i, y - j), Colr%π        NEXT i, jπ    CASE "dbrlud", "dbudrl": '*** Diagonal Blind - R/L U/D   (DBRLUD)π        x = 0: y = myπ        FOR j = 1 TO Speed%: FOR i = mx * 2 TO 0 STEP -Speed%π            LINE (x + i, y + j)-(x - j, y - i), Colr%π        NEXT i, jπEND SELECTππEND SUBπThe ABC Programmer             DISPLAY WINDOWS OR OS/2 ICONS  Converted from Pascal Code     12-02-96 (17:10)       QB, QBasic, PDS        49   1117     ICONVIEW.BAS'===================================================π' ICONVIEW.BAS by William Yu (12-02-96)π' 100% Public Domain.π'π' Procedure to display WINDOWS or OS/2 ICON filesπ' Modified from Pascal code to support OS/2 Icons.π'===================================================ππDEFINT A-ZπDECLARE SUB LoadIcon (XX, YY, IconName$, OS2)ππCONST False = 0πCONST True = NOT FalseππSCREEN 12ππLoadIcon 100, 100, "ABCREAD.ICO", FalseππENDππSUB LoadIcon (XX, YY, IconName$, OS2)π  x = XXπ  y = YYπ  Icon = FREEFILEπ  OPEN IconName$ FOR BINARY AS Iconπ  IF LOF(Icon) <> 0 THENπ    ch$ = " "π    FOR p = 1 TO LOF(Icon)π      GET #1, , ch$π      q = ASC(ch$)π      IF OS2 THEN Addon = 250 ELSE Addon = 0π      IF (p > 126 + Addon) AND (p < 639 + Addon) THENπ        r = q \ 16π        rr = q - (r \ 16)π        PSET (x, y), rπ        PSET (x + 1, y), rπ        'PSET (x + 1, y), rrπ        x = x + 2π        IF x = XX + 32 THEN x = XX: y = y - 1π      END IFπ    NEXT pπ    CLOSE Iconπ  ELSEπ    CLOSE Iconπ    KILL IconName$π    PRINT IconName$ + " file not found."π  END IFπEND SUBππThomas A. Hirsch               SNOW FALLING AND PILING UP     thomasalh@geocities.com        12-03-96 (16:23)       QB, QBasic, PDS        53   1221     SNWTREE.BAS SCREEN 13πRANDOMIZE TIMERπanz = 30πDIM a(anz)πDIM b(anz)πDIM c(anz)πFOR j = 0 TO anz - 1πa(j) = CINT(RND * 300)πb(j) = 0πc(j) = CINT(RND * 5) + 25πNEXTπCOLOR 2πLOCATE 5, 5: PRINT "SNOW . BAS by THOMAS A. HIRSCH"πLOCATE 10, 2: PRINT "Greetings from FROG COOPORATION too!"πCOLOR 4πLOCATE 15, 8: PRINT "MERRY CHRISTMAS"πCOLOR 2πLOCATE 20, 11: PRINT "Quaak"πLINE (250, 130)-(265, 150), 2πLINE -(255, 150), 2πLINE -(270, 170), 2πLINE -(260, 170), 2πLINE -(275, 190), 2πLINE (250, 130)-(235, 150), 2πLINE -(245, 150), 2πLINE -(230, 170), 2πLINE -(240, 170), 2πLINE -(225, 190), 2πLINE -(275, 190), 2πPAINT (250, 170), 2πLINE (245, 191)-(255, 200), 6, BFπDOπFOR j = 0 TO anz - 1πp = POINT(a(j), b(j) + 1)πp1 = POINT(a(j) - 1, b(j) + 1)πp2 = POINT(a(j) + 1, b(j) + 1)πIF p = 0 THEN LINE (a(j), b(j))-(a(j), b(j)), 0: GOTO zoppπIF p1 = 0 THEN LINE (a(j), b(j))-(a(j), b(j)), 0: a(j) = a(j) - 1: GOTO zoppπIF p2 = 0 THEN LINE (a(j), b(j))-(a(j), b(j)), 0: a(j) = a(j) + 1: GOTO zoppπGOSUB neuπzopp:πb(j) = b(j) + 1πIF c(j) < 30 THEN b(j) = b(j) - .2πIF c(j) < 28 THEN b(j) = b(j) - .1πLINE (a(j), b(j))-(a(j), b(j)), c(j)πNEXTπLOOPππneu:πa(j) = CINT(RND * 640)πb(j) = 0πRETURNππDavid A. Wicker                VGA CHRISTMAS DEMO             david@fastlane.net             05-26-96 (10:02)       QB, QBasic, PDS        375  9461     TREE.BAS    ' ┌────────────────────────────────────────────────────────────────────┐π' │                 * SCENARIO BBS VGA CHRISTMAS DEMO *                │π' │                                                                    │π' │      Written by David A. Wicker ── (C) 1996+ Scenario, Inc.        │π' └────────────────────────────────────────────────────────────────────┘πDECLARE SUB PPSET (H, V, C)πDECLARE SUB SweetLine (X1, Y1, X2, Y2)πDECLARE SUB GPR (H, V, T$)πDECLARE SUB PRGB (C, R, G, B)πDECLARE SUB RGB (P, R, G, B)πDECLARE SUB CRGB (N, R, G, B)πDECLARE SUB DEC (N)πDECLARE SUB INC (N)ππRANDOMIZE TIMERππ'ON ERROR GOTO ErrFoundπSCREEN 13πDEF SEG = &HA000πRANDOMIZE TIMERππDEF FNR (A) = INT(RND * A)πDEF FNN$ (A) = MID$(STR$(A), 2)πDEF FNO$ (A$) = LEFT$(A$, 1)πDEF FNC$ (A$, A) = MID$(A$, A, 1)πDEF FNVAL (A$, A) = VAL(FNC$(A$, A))ππ  DIM FontIMG$(96)π  FOR I = 1 TO 96π    READ FontIMG$(I)π  NEXTππFOR I = 0 TO 254π  PALETTE I, 0πNEXTπPALETTE 255, 47 + 65536 * 63π πLINE (0, 162)-(319, 162), 255πLINE (0, 189)-(319, 189), 255ππTextSize = 1πTextColor = 255πOffSetY = 1πGPR 19, 13, "Just a moment..."ππDIM I.ScrTxt(3841)ππX! = 0πLY! = 0πFOR Y = 0 TO 130π  C = FNR(12)π  FOR I = 160 - X! TO 160 + X!π    PPSET I, Y + 10, C + 32π    C = C + FNR(4)π    IF C > 11 THEN C = C - 12π  NEXTπ  X! = X! - 2 + SIN(((Y + 10) MOD 20) / 40) * 11.5πNEXTππFOR Y = 141 TO 160π  C = FNR(12)π  FOR X = 160 - 20 TO 160 + 20π    PPSET X, Y, C + 66π    C = C + FNR(4)π    IF C > 11 THEN C = C - 12π  NEXTπNEXTππREAD A$π  FOR I = 1 TO LEN(A$) STEP 4π    X1 = FNVAL(A$, I)π    Y1 = FNVAL(A$, I + 1)π    X2 = FNVAL(A$, I + 2)π    Y2 = FNVAL(A$, I + 3)π    SweetLine 160 - 12 + X1 * 3, Y1 * 3, 160 - 12 + X2 * 3, Y2 * 3π  NEXTππC = 0πFOR V = 20 TO 161 STEP 3π  FOR H = 0 TO 319 STEP 6π    LV = VπMoreLites:π    IF POINT(H + 3, V + 3) > 0 AND POINT(H + 3, V + 3) < 62 THENπ      CIRCLE (H + 2, V + 2), 1, 48 + C * 2π      PPSET H + 2, V + 2, 49 + C * 2π      INC Cπ      IF C = 7 THEN C = 0π      H = H + 6 + FNR(3)π      V = V + FNR(3) + 1π      INC LVπ    GOTO MoreLitesπ    ELSEπ      V = LVπ      C = FNR(7)π    END IFπ  NEXTπNEXTππFOR H = 0 TO 319 STEP 4π  I! = RND * 2 + 1π  C = FNR(31) + 1π  X! = Hπ  YY = FNR(162)π  FOR Y! = 0 TO 161 STEP I!π    IF POINT(X!, Y!) = 0 THEN PPSET INT(X!), INT(Y!), Cπ    X! = X! + SIN((Y! + YY) / 10) * 3π    INC Cπ    IF C = 32 THEN C = 1π  NEXTπNEXTππT$ = "Seasons Greetings From *Lost *Scenario!    "πT$ = T$ + "SysOp: *Topaz  Co-SysOp: *Primrose    "πT$ = T$ + "Here's wishing you the very best for the holidays and a "πT$ = T$ + "very Happy New Year!  "πT$ = T$ + "    Scenario used to be a BBS local to Fort Worth, but has now "πT$ = T$ + "moved to the internet!    "πT$ = T$ + "*Scenario BBS specialized in file transfers "πT$ = T$ + "including crunched GIFs and JPGs, unique and original games and "πT$ = T$ + "tool files.  For Message Bases it had: Time Wind's Tavern, "πT$ = T$ + "Primrose Erotica, Philosophy Base, Swap/Trade/Sell, and The "πT$ = T$ + "Warboard.    "πT$ = T$ + "From all of me to all of you, *Merry *Christmas!!"πT$ = T$ + STRING$(50, " ")ππFOR I = 1 TO LEN(T$)π  A& = A& + ASC(FNC$(T$, I))πNEXTππ'Bad: IF A& <> 87735 THEN GOTO BadππFOR I = 0 TO 15π  PALETTE 32 + I, 256 * I * 4π  PALETTE 62 + I, I * 3πNEXTππFOR I = 0 TO 7π  PRGB 78 + I, I, 0, 7π  PRGB 78 + 8 + I, 7, 0, 7 - Iπ  PRGB 78 + 16 + I, 7, I, 0π  PRGB 78 + 24 + I, 7 - I, 7, 0π  PRGB 78 + 32 + I, 0, 7 - I, IπNEXTππFOR I = 0 TO 319π  PPSET I, 162, 78 + I \ 8π  PPSET I, 189, 78 + I \ 8πNEXTππPALETTE 254, 63 + 63 * 256 + 63 * 65536πFOR V = 0 TO 5π  FOR H = 0 TO 319π    IF V = 0 OR (POINT(H, 161 - V) = 254 AND FNR(7 - V) > 0) THEN PPSET H, 160 - V, 254π  NEXTπNEXTππTextSize = 4πTextColor = 78πGPR 9, 0, CHR$(128)ππTP = 1πTextSize = 2πOffSetY = 8πOffSetX = 10πDOπ  FOR I = 1 TO 31π    PALETTE I, 63 + 63 * 256 + 63 * 65536π    IF NT = 0 THENπ      NT = 4π      IF FNC$(T$, TP) = "*" OR (Flicker = 1 AND FNC$(T$, TP) <> " ") THENπ        TextColor = 254π        Flicker = 1π        IF FNC$(T$, TP) = "*" THEN TP = TP + 1π      ELSEπ        Flicker = 0π        TextColor = 78 + ((TP - 1) MOD 40)π      END IFπ      GPR 25, 6, FNC$(T$, TP)π      INC TPπ      IF TP = LEN(T$) THEN TP = 1π    END IFπ    DEC NTπ    GET (3, 164)-(319, 187), I.ScrTxtπ    PUT (0, 164), I.ScrTxt, PSETπ    LINE (317, 164)-(319, 187), 0, BFπ    R = FNR(14)π    IF R = 0 THENπ      CRGB 48, 3, 0, 3π      CRGB 49, 4, 0, 4π    ELSEIF R = 1 THENπ      CRGB 48, 1, 0, 1π      CRGB 49, 2, 0, 2π    ELSEIF R = 2 THENπ      CRGB 50, 3, 0, 0π      CRGB 51, 4, 0, 0π    ELSEIF R = 3 THENπ      CRGB 50, 1, 0, 0π      CRGB 51, 2, 0, 0π    ELSEIF R = 4 THENπ      CRGB 52, 3, 1, 0π      CRGB 53, 4, 2, 0π    ELSEIF R = 5 THENπ      CRGB 52, 1, 0, 0π      CRGB 53, 2, 1, 0π    ELSEIF R = 6 THENπ      CRGB 54, 3, 3, 0π      CRGB 55, 4, 4, 0π    ELSEIF R = 7 THENπ      CRGB 54, 1, 1, 0π      CRGB 55, 2, 2, 0π    ELSEIF R = 8 THENπ      CRGB 56, 0, 3, 0π      CRGB 57, 0, 4, 0π    ELSEIF R = 9 THENπ      CRGB 56, 0, 1, 0π      CRGB 57, 0, 2, 0π    ELSEIF R = 10 THENπ      CRGB 58, 0, 0, 3π      CRGB 59, 0, 0, 4π    ELSEIF R = 11 THENπ      CRGB 58, 0, 0, 1π      CRGB 59, 0, 0, 2π    ELSEIF R = 12 THENπ      CRGB 60, 3, 3, 3π      CRGB 61, 4, 4, 4π    ELSEIF R = 13 THENπ      CRGB 60, 1, 1, 1π      CRGB 61, 2, 2, 2π    END IFπ    PALETTE I, 0π  NEXTπLOOP UNTIL INKEY$ > ""ππAround:ππSCREEN 0: WIDTH 80: CLS : COLOR 7, 0πC(0) = 0πC(1) = 1πC(2) = 9πC(3) = 11πC(4) = 15πC(5) = 15πFOR I = 1 TO 79π  COLOR C(FNR(2) + I \ 20)π  LOCATE 9, Iπ  PRINT "─";π  LOCATE 13, Iπ  PRINT "─";πNEXTπLOCATE 10, 1πCOLOR 15πPRINT "Home Page Address: ";πCOLOR 13:πPRINT "http://www.fastlane.net/homepages/david/david.html"πLOCATE 12, 1πCOLOR 15πPRINT "Mailing Address  : ";πCOLOR 14πPRINT "david@fastlane.net"πCOLOR 7πLOCATE 23πENDππErrFound:π  WIDTH 80π  SCREEN 0, 0π  SCREEN 0, 1π  CLSπ  LOCATE 12, 22π  COLOR 12π  PRINT "OOPS!  You don't support VGA Graphix!"π  COLOR 7πENDππFontData:πDATA BR2D5BD2D,BRD2BR2U2,BRD8BR2U8BFBDL4BD4R4,BFBR3L3GDFR2FDGL3BFBRU8πDATA BDRDLUBFBR3G4BR3RDLU,BF3BRHL2GDFR2L2GDFR2EGBGU8,BR2D2,BR3G2D4F2,BRF2D4G2πDATA BF2D4BEH2BGR4BHG2,BF2D4BE2L4,BF2BD5DG,BD4R4,BF2BD5D,BF2BR2G4πDATA BRR2FD6GL2HU6EBFBD2D2,BFED8RL2,BDER2FD2G4DR4,R4D2G2RFD2GL2HπDATA BR4LG3D2R4U2D5,BR4L4D3R3FD3GL2H,BR3LG2D5FR2EU2HL,R4D3G2D3πDATA BRR2FD2GL2HU2EBD4GD2FR2EU2H,BF2BD3LHU3ER2FD5G2L,BF2DBD2D,BFBRDBD2D3GπDATA BFBR2G3F3,BD2R4BD4L4,BFF3G3,R3FD2GLDBD2D,BF2G2F2E2H2D4HU2EFD2πDATA BD8U7ER2FD7BU3L2,BD8U8R3FD2GLRFD2GL,BFBR3HL2GD6FR2E,BD8U8R3FD6GLπDATA BR4L3GD6FR3BH3BUR,BR4L3GD7BEBU3R,BR3L2GD6FR3U4L,D8BEBU3R3U4D8,BRR2LD8LR2πDATA BR3RD7GL2H,D8BR4UH3E3U,D8R4,BD8U8F2DUE2D8,BD8U8R3FD7,BRR2FD6GL2HU6EπDATA BD8U8R3FD3GL,BRR2FD5G2LHU6EBDBFBD4F2,BD8U8R3FD2G2F2DπDATA BFBR3HL2GD2FR2FD2GL2H,R4L2D8,D7FR2EU7,D6F2E2U6,D7FEU2D2FEU7πDATA D2F4D2BL4U2E4U2,D3F2E2U3BG2BD3D3,R4D2G4D2R4,BR4L3D8R3L2U8,BD2F4πDATA R3D8L3R2U8,BD4E2F2,BD8R4,BR2DF,BFBD2R2FD4L3HUER,D8R3EU3HL,BF4HL2GD3FR2EπDATA BR4D8L3HU3ER,BF2BD3R2UHL2GD3FR2E,BR4LGD9GLBE2BU6LR3,BF2BD6LHU3ER3D7GL2HπDATA D8BEBU4R2FD4,BR2DBGBDRD5,BR4DBGBDRD7GL2H,D8BR4H2UE2,BRRD8RL2πDATA BD8U5R2D2U2RFD4,BD8U5R3FD4,BFBD2R2FD3GL2HU3E,BD11U8R3FD3GLπDATA BF4BD7U8L3GD3FR,BD8U5R3F,BFBRBF2L3GFR2FDGL3,BRD7FRBU5L2,BD3D4FR2EU4πDATA BD3D3F2E2U3,BD3D4FEUDFEU4,BD3F2DG2BR4H2UE2,BD3D4FRBE2BU3D7GL2HπDATA BD3R4G4DR4,BFBR3LGDGFDFR,BR2D3BD2D3,BDRFDFGDGL,BDEFEDGHGUπDATA F4G4U8FD6EU4FD2πTopazData:πDATA BRR3BLG2LE2BR3G2RE2LBRR2G2L2BR2BE2BRR3GLBUG2LE2BR4G2RE2LBRR2G2BELBEBR2RG2RE2LBGBDRππStarData:πDATA 4053538383656578784646181825250303333340ππSUB CRGB (N, R, G, B)π  RR = R * 16 - 1π  GG = G * 16 - 1π  BB = B * 16 - 1π  IF RR < 0 THEN RR = 0π  IF GG < 0 THEN GG = 0π  IF BB < 0 THEN BB = 0π  RGB N, RR, GG, BBπEND SUBππSUB DEC (N)π  N = N - 1πEND SUBππSUB GPR (H, V, T$) : SHARED FontIMG$(), TextColor, TextSize, OffSetY, OffSetXπ  TS = TextSizeπ  AX = TS - 1π  AY = TS - 1π  IF FNO$(T$) > CHR$(127) THENπ    AX = 1π    AY = 0π  END IFπ  FOR I = 1 TO LEN(T$)π    FOR X = 0 TO AXπ      FOR Y = 0 TO AYπ        DRAW "BM" + FNN$((I + H - 1) * 6 * TS + X + OffSetX) + "," + FNN$(V * 13 * TS + Y + OffSetY) + "C" + FNN$(TextColor) + "S" + FNN$(TS * 4) + FontIMG$(ASC(MID$(T$, I, 1)) - 32)π      NEXTπ    NEXTπ  NEXTπEND SUBππSUB INC (N)π  N = N + 1πEND SUBππSUB PPSET (H, V, C)π  POKE V * 320& + H, CπEND SUBππSUB PRGB (C, R, G, B)π  RGB C, R * 8, G * 8, B * 8πEND SUBππSUB RGB (N, R, G, B)π  OUT &H3C8, Nπ  OUT &H3C9, Rπ  OUT &H3C9, Gπ  OUT &H3C9, BπEND SUBππSUB SweetLine (X1, Y1, X2, Y2) : SHARED LastSweetColorπ  H1! = X1π  V1! = Y1π  H2! = X2π  V2! = Y2π  C = LastSweetColorπ  A! = -1π  B! = -1π  IF V1! <> V2! THEN A! = ABS(H1! - H2!) / ABS(V1! - V2!)π  IF H1! <> H2! THEN B! = ABS(V1! - V2!) / ABS(H1! - H2!)π  IF A! < 0 OR A! > 1 THEN A! = 1π  IF B! < 0 OR B! > 1 THEN B! = 1π  DOπ    LINE (160, 12)-(H1!, V1!), C + 78π    INC Cπ    IF C = 40 THEN C = 0π    IF INT(H1!) < INT(H2!) THEN H1! = H1! + A!π    IF INT(H1!) > INT(H2!) THEN H1! = H1! - A!π    IF INT(V1!) < INT(V2!) THEN V1! = V1! + B!π    IF INT(V1!) > INT(V2!) THEN V1! = V1! - B!π  LOOP UNTIL INT(H1!) = INT(H2!) AND INT(V1!) = INT(V2!)π  LastSweetColor = CπEND SUBπKurt Kuzba                     SCALABLE FONTS                 FidoNet QUIK_BAS Echo          11-27-96 (03:18)       QB, QBasic, PDS        69   2497     SCALFONT.BAS'   Most advanced applications used scalable graphics fonts.π'The character definitions may be stored in a file or moved to aπ'separate module which returns only the requested character.π'You will notice that when the width specified is increased, theπ'ammount of white space between characters increases, allowingπ'you to place the characters more closely together.π'This is NOT, however, a fast way of doing things, though itπ'allows for ornate lettering. The CIRCLE may be further refinedπ'to use 1/8th instead of 1/4 increments, or even both.ππ'_|_|_|   SCALFONT.BASπ'_|_|_|   An example of using scalable fonts in Quick Basic.π'_|_|_|   No warrantee or guarantee is given or implied.π'_|_|_|   Released   PUBLIC DOMAIN   by Kurt Kuzba.  (11/25/96)πDECLARE SUB PutChar (ch%, c%, x%, y%)πDECLARE FUNCTION Characters$ (c%)πDIM CHigh AS INTEGER, CWide AS INTEGERπCHigh = 14: CWide = 8πSCREEN 12πPAINT (0, 0), 7πPutChar 65, 0, 15, 25πPutChar 66, 0, 24, 25πPutChar 67, 0, 32, 25πCHigh = 15: CWide = 20πPutChar 65, 1, 5, 43πPutChar 66, 1, 15, 43πPutChar 67, 1, 25, 43πCHigh = 30: CWide = 12πPutChar 65, 4, 10, 32πPutChar 66, 4, 22, 32πPutChar 67, 4, 34, 32πCHigh = 42: CWide = 24πPutChar 65, 5, 5, 36πPutChar 66, 5, 17, 36πPutChar 67, 5, 29, 36πSOUND 999, 1: WHILE INKEY$ = "": WENDπSCREEN 0πFUNCTION Characters$ (c%)π  SELECT CASE c%π     CASE 65π        Characters$ = "LAMCA LGMCA LBHFH"π     CASE 66π        C$ = "LAMAA LAACA LAMEM LAEEE CCCBD CCCBA CEIDD "π        Characters$ = C$ + "CEIDA"π     CASE 67π        Characters$ = "CCEEA CCEEB CCHEC CCHED LADAH"π  END SELECTπEND FUNCTIONπSUB PutChar (ch%, c%, x%, y%)π   SHARED CWide AS INTEGER, CHigh AS INTEGERπ   CharDef$ = Characters$(ch%): LN% = ASC("L"): CR% = ASC("C")π   asp! = (4 * (CHigh / CWide)) / 3π   WHILE CharDef$ <> ""π      x1% = ((ASC(MID$(CharDef$, 2)) - 64 + x%) * CWide) \ 8π      y1% = ((ASC(MID$(CharDef$, 3)) - 64 + y%) * CHigh) \ 14π      SELECT CASE ASC(CharDef$)π         CASE CR%π            x2% = (ASC(MID$(CharDef$, 4)) - 64) * CHigh \ 14π            R! = (ASC(MID$(CharDef$, 5)) - 64) * 1.57π            CIRCLE (x1%, y1%), x2%, c%, (R! - 1.57), R!, asp!π         CASE LN%π            x2% = ((ASC(MID$(CharDef$, 4)) - 64 + x%) * CWide) \ 8π            y2% = ((ASC(MID$(CharDef$, 5)) - 64 + y%) * CHigh) \ 14π            LINE (x1%, y1%)-(x2%, y2%), c%π      END SELECTπ      CharDef$ = MID$(CharDef$, 7)π   WENDπEND SUBπ'_|_|_|   end   SCALFONT.BASπThe ABC Programmer             SAVE SCREEN IMAGE TO PCX       Converted from Pascal Code     12-05-96 (15:46)       QB, QBasic, PDS        189  6622     SAVEPCX.BAS '===========================================================================π'  Here's some code for SWAG to dump the current mode $13 screen to aπ'  PCX file.  Feel free to use/modify, just give credit.  Also, if youπ'  do a good mod of it (ie, A mode X version, faster compression, whatever),π'  I'd love to see it.π'π'  Reference: Bit-Mapped Graphics (2nd Edition)π'    Steve Rimmerπ'    ISBN 0-8306-4209-9π'    (C code but still pretty useful)π'π'  PCX is of course (tm) Z-Soft Corp.π'π'  Copyright 1995 Kevin M. Luck  <-- Original Turbo Pascal code.π'---------------------------------------------------------------------------π' Thanks Kevin.  This code has been converted to BASIC by William Yu (12/96)π'π' Remember what good programmers do:  Give credit where credit is due!π'π' Somewhat useless with all the screen capture utilities out there ;)π' But an excellent tool for use with your own paint programs and such...π'π' This only supports 1 plane video modes, but I'm working on a 4 plane one.π'===========================================================================ππDEFINT A-ZπDECLARE SUB WriteHeader (PCXName$)πDECLARE SUB EncodeLine (Ln)πDECLARE SUB GetPal (ColorNo, R, G, B)πDECLARE SUB WritePalette ()πDECLARE SUB SavePCX (PCXName$)ππDIM SHARED PCXFile AS INTEGERππ  SCREEN 13π  RANDOMIZE TIMERπ  I = 0π  DOπ    X = RND * 319π    Y = RND * 199π    R = RND * 50π    I = I + 1π    CIRCLE (X, Y), R, I    ' Let's draw random circles.π  LOOP UNTIL I = 150ππ  SavePCX "IMAGE.PCX"ππENDππ' Color Palette Setting.  Can't make any sense out of this.π' You'll find that with 4 plane modes or other PCX codes useπ' the palette scheme from Black --> Bright White.π' (ie.  0,0,0 = Black  255,255,255 = Bright White)ππDATA 0,0,0,216,152,56,120,116,4,112,108,4,236πDATA 172,76,248,196,128,64,36,36,36,40,20,248πDATA 188,104,212,144,156,60,36,36,116,112,8πDATA 120,116,8,124,120,8,52,48,4,240,196,136ππSUB EncodeLine (Ln)π'**********************************************π'  Encode the current image on screenπ'π'  Kevin Luck seems to be on the lazy side :)π'  This will only work for 1 plane video modes.π'  Hehe, that would limit it to SCREEN 13 Doh!π'***********************************************ππDIM P(0 TO 321) AS INTEGERππ  T = 0π  DEF SEG = &HA000                  ' Must be a faster way usingπ  FOR N = 0 TO 320                  ' buffered routines.π    P(N) = PEEK((Ln * 320!) + N)    ' MOVE Addr(Ln*320) --> P()π    POKE ((Ln * 320!) + N), 0       ' Erase screen.  Remove if desired.π  NEXT Nπ  WHILE T < 320π    I = 0π    WHILE ((P(T + I) = P(T + I + 1)) AND ((T + I) < 320) AND (I < 63))π      I = I + 1                ' Same colourπ    WENDπ    IF I > 0 THEN              ' How many times does the same colour occur?π      A$ = CHR$(I OR 192)      ' Limit of 63.π      PUT #PCXFile, , A$π      A$ = CHR$(P(T))          ' Write pixel colourπ      PUT #PCXFile, , A$π      T = T + Iπ    ELSEπ      IF (P(T) AND 192) = 192 THEN  ' It's greater than 192π         A$ = CHR$(193)             ' Weird stuff...π         PUT #PCXFile, , A$π      END IFπ      A$ = CHR$(P(T))               ' Write Pixel colour.π      PUT #PCXFile, , A$π      T = T + 1π    END IFπ  WENDπEND SUBππSUB GetPal (ColorNo, R, G, B)π'*********************************************************************π'  Get Current Palette Scheme (Does not change unless you change it)π'*********************************************************************π  OUT &H3C7, ColorNo    ' Read Color's...π  R = INP(&H3C9)        ' Red Intensityπ  G = INP(&H3C9)        ' Green Intensityπ  B = INP(&H3C9)        ' Blue IntensityπEND SUBππSUB SavePCX (PCXName$)π  WriteHeader PCXName$π  FOR Ln = 0 TO 199π    EncodeLine Lnπ  NEXT Lnπ  WritePaletteπ  CLOSE PCXFileπEND SUBππSUB WriteHeader (PCXName$)π'************************************π'  Dump the default header to fileπ'************************************ππDIM OldPal(1 TO 48) AS INTEGERππ  PCXFile = FREEFILEπ  OPEN PCXName$ FOR BINARY AS PCXFileπ  B$ = CHR$(10)               ' Manufacturer.  ZSoft of course.π  PUT #PCXFile, , B$π  B$ = CHR$(5)                ' Version, in case it matters.π                              ' 0 = Version 2.5 of PC Paintbrushπ                              ' 2 = Version 2.8 w/palette informationπ                              ' 3 = Version 2.8 w/o palette informationπ                              ' 4 = PC Paintbrush for Windows(Plus for Windows uses Ver 5)π                              ' 5 = Version 3.0 and > of PC Paintbrush and PC Paintbrush +, includesπ  PUT #PCXFile, , B$          ' Publisher's Paintbrush . Includes 24-bit .PCX filesπ  B$ = CHR$(1)                ' Encodingπ  PUT #PCXFile, , B$π  B$ = CHR$(8)                ' Bytes Per Pixel (1 for 4 plane)π  PUT #PCXFile, , B$π  B$ = CHR$(0) + CHR$(0)      ' Min X (Integer deserves 2 bytes)π  PUT #PCXFile, , B$π  B$ = CHR$(0) + CHR$(0)      ' Min Yπ  PUT #PCXFile, , B$π  B$ = CHR$(63) + CHR$(1)     ' Max X  (In this case it's 319)π  PUT #PCXFile, , B$          ' Try 319 AND &HFF and you'll seeπ  B$ = CHR$(199) + CHR$(0)    ' Max Yπ  PUT #PCXFile, , B$π  B$ = CHR$(64) + CHR$(1)     ' Horizontal Resolutionπ  PUT #PCXFile, , B$π  B$ = CHR$(200) + CHR$(0)    ' Vertical Resolutionπ  PUT #PCXFile, , B$          ' Default Paletteπ  FOR I = 1 TO 48π    READ OldPal(I)            ' Mem [Seg (OldPal):Ofs (OldPal)],48)π    B$ = CHR$(OldPal(I))      ' I'm sure there's a faster way to do thisπ    PUT #PCXFile, , B$        ' But I'm not good with converting that TP codeπ  NEXT Iπ  B$ = CHR$(0)                ' Reservedπ  PUT #PCXFile, , B$π  B$ = CHR$(1)                ' Color Planes (4 = Intense, Red, Green, Blue)π  PUT #PCXFile, , B$π  B$ = CHR$(64) + CHR$(1)     ' Bytes Per Line Per Plane (In this case 320)π  PUT #PCXFile, , B$π  B$ = CHR$(0) + CHR$(0)      ' Palette Typeπ  PUT #PCXFile, , B$π  B$ = STRING$(58, CHR$(0))   ' Fill rest of header to viola!  128 bytes.π  PUT #PCXFile, , B$          ' Actually byte 70-74 is for Paint Brush IV/IV+π                              ' so it should be 54, but who cares.πEND SUBππSUB WritePaletteπ'************************************π'  Dump the current Palette to fileπ'************************************π  L$ = CHR$(12)π  PUT #PCXFile, , L$π  FOR L = 0 TO 255π    GetPal L, R, G, Bπ    R = R * 4π    G = G * 4π    B = B * 4π    R$ = CHR$(R)π    G$ = CHR$(G)π    B$ = CHR$(B)π    PUT #PCXFile, , R$π    PUT #PCXFile, , G$π    PUT #PCXFile, , B$π  NEXT LπEND SUBπAndrew Diamond                 SLOW TYPE EFFECT               albertad@geocities.com         12-05-96 (18:19)       QB, QBasic, PDS        42   1293     SLOWTYPE.BAS'Program Type -- Modified Printπ'Modified: Andrew Diamondπ'Web Page: http://www.geocities.com/SiliconValley/Heights/3128/QBASIC.HTMπ'Date: 12/5/96π'ππDECLARE SUB slowtype (Talk$, x!, Y!, speed#, backColor!, middle!, top!)πDECLARE SUB pause (tdelay#)ππSCREEN 13     'Use good colors!πDEFINT A-Z    'Always DEFINT!ππ' This routine is actually part of Mike Helms Alienoidπ' I just edited a little bit of it because it looked cool.π' Don't think he'll mind much!  After all, I mentioned his name!π' slowtype (talk$, x!, y!, speed#, HighLighter, TrailColor, WordColor)π'ππslowtype "Slow Type This Dude!", 11, 8, .001, 15, 8, 7ππSUB pause (tdelay#)π'------------------------------------------------------------------------------πtime1# = TIMERπDOπLOOP WHILE (TIMER - time1# < tdelay#) OR (time1# > TIMER)ππEND SUBππDEFSNG A-ZπSUB slowtype (Talk$, Y!, x!, speed#, HighLighter, TrailColor, WordColor)πa = 1πDO UNTIL a = LEN(Talk$) + 3πCOLOR 8: LOCATE x!, Y!:πIF a > 1 THEN COLOR HighLighter: LOCATE x!, Y!: PRINT LEFT$(Talk$, a - 1)πIF a > 2 THEN COLOR TrailColor: LOCATE x!, Y!: PRINT LEFT$(Talk$, a - 2)πIF a > 3 THEN COLOR WordColor: LOCATE x!, Y!: PRINT LEFT$(Talk$, a - 3)πpause speed#πa = a + 1πLOOPπLOCATE x!, Y!: COLOR WordColor: PRINT Talk$πEND SUBππAndrew Diamond                 HILIGHT PRINT                  albertad@geocities.com         12-05-96 (18:19)       QB, QBasic, PDS        44   1352     HILIGHT.BAS 'Program Type -- Modified Printπ'Programmer: Andrew Diamondπ'Web Page: http://www.geocities.com/SiliconValley/Heights/3128/QBASIC.HTMπ'Date: 12/5/96π'π' Overview:  Use this subroutine to highlight certain characters withoutπ'            having to LOCATE, PRINT a bunch of times.π'π' Usage:π'     selection column, row, text$, highlight$, TextColor, HighLighterπ'π'ππDECLARE SUB selection (x%, Y%, text$, highlight$, TextColor%, HighLighter%)ππDEFINT A-Z                             '      You don't have to, but why not?πSCREEN 13                              '      Wider variety of colorsπselection 5, 10, "Press Y to quit.", "Y", 8, 15πDO UNTIL UCASE$(INKEY$) = "Y": LOOP    '      Wait for Yππselection 5, 10, "Now Press to quit.", "P", 8, 15πDO UNTIL UCASE$(INKEY$) = "P": LOOP    '      Wait for Yππ'π'  This subroutine searches through text$ for the letter designatedπ'  in highlight$.  When it finds it, it prints it the color HighLigher.π'  If the subroutine doesn't find the letter, it prints it directly atπ'  the end of text$.π'πSUB selection (x, Y, text$, highlight$, TextColor, HighLighter)ππLOCATE x, YπCOLOR TextColorπPRINT text$;ππFOR I = 1 TO LEN(text$)πIF MID$(text$, I, 1) = highlight$ THEN dummy = I: EXIT FORπNEXT IππCOLOR HighLighterπLOCATE x, (Y - 1) + I: PRINT highlight$;ππEND SUBππCharlie Quante                 A SCREEN 12 SPRITE EDITOR      charlie@charlie.seanet.com     12-08-96 (00:00)       QB, PDS                501  33079    GWORK.BAS   DEFINT A-Z:DIM SHARED K,S,B&,Z&:V1 'Created by PostIt! 7.3πSUB V1:OPEN "O",1,"GWORK.ZIP",4^6:Z&=24564:?STRING$(50,177);πU"%up()%9%%%I-%uJnMFH6*72#8.%%2m%%%1%%%%lw.ni&t%wpSg7fxfa;,B[mYaHπU"gWKw4H+NH';2I47ENYGU6PCV=82.(0G,P,UZOQ+&<_n'n-fYZvj&5hnpO=nYg>?πU"XD?^eufyCuECCC?CECQQ_nzLqGBgpuTP6Gid&l:6nno4Z\DownJ3PjLK46jCQZHπU"7V^pPn5C8Cl+2JcR+\rkx5$OH7aaQMQ9+0\pm7S?Z]xU0bP565XLrVi;Og(.lJFπU"$&kg/[>GD7osgEEf1ki,3bWPF[4kTuy0pu?pj<b?w-G9)Xf,jPouInN>WV=Tr81πU"GkGWknNR[xDmS>jT)lW^Mnd2K,0RU3#H3WDhN9Ohe%%k>$BQJY$u%jY[O3;6JHAπU"PRJnz;])R>qe&wF?U-ni.dW/0j#kJJI<(>rTDOfj0yOC''CtfVl0Y0;Kc+RWYe4πU"UQOsP_+Z4,?#DTjg/+IMBT?tIG>KXAeGTbOE22kO8Kgn)sm9.GE[](eSv_*U9kkπU"3c3JG&ne%h%M1?gSFv_BZ0.PAY(1r$wciKuMaocucO?$:\q2rai0.Ht[)08JHC<πU"KQem1(;%I?2k#g;3j-hWW1s^b[;j7h.hQ8M)$G8+S^WcZGGR<YR(CRmkMQ.4AvwπU"2T$[E>%&ZAmDAu%kiUDiDdl,(=u&7<X\vGsa\ah$UcWgg_o>r?qO/l(:gL/e8CDπU"<YEtX]4n*,s;aWUTM?H2Gzb2xr(?X23^rhm9wgd6V,Y?xnz66God;mOHw]q),'tπU"=a#u66B.&hONmp$'d*d7j.4pfJW\QlV]8FR?UQ3JT[_NHt6M2On+(61[$$2LcT,πU"NL^$xsmg+HjucAgN7=#4<c6w)SX,x>.$?lv0TT,P:mexu#s#.Zva)g$==ELv.;]πU"+piq)<W<1$A2OIIE0T+;k<hqf#%U++1SD?CnqlTfO7Zk:QJN0f3pJ\VlNl:lpirπU"NvSRma4q,xGSXTJ;&,DlVX4Qbs0*00ixT4)+GE;ZS+#HUX*:pz*:/mXoQ8TrAbnπU">j,Btt%iQSk[Xc_9]NmXnp-njb1FkCFYWpEXEMunp(g<RESJbSG-U(]6Uj9Z-h7πU"'1Crhg+EtW=A^s+dDnH\)TGZ;8S6bD<T)NBCv\sb-IycK2Za'IgsmK*\SzdM$UzπU"-K80]Cr>>:N^cgdP+4k3lb:K&hUUoe]hI$j,C0Z4&r5Dt$$Ibb_XggB(3$Z?/OlπU"F5lYsgAD[5r'7l)kAbCv.Oc_xJZg1wv=[J;4D[r4&VGR)_f#p<[_6$vRDq/bMA#πU"Ex<85[;RGg8yZF\0K6=II4d9W2B-bEES2bZ_Aru3cvldF.\^V7*X-*8BhZ8W,rrπU";)114G;=zjxL$250kSaJW*J4+]*#^(A6MpG&0Z#M>o((2317^?;zBYD3?AOB*OHπU"VlZV5j>^TLU.CHL5s?GTOC<<W13^8UD<Lj+H](.TaJLmdAc(wTMvT<?(Sddahx*πU"_bX7-_aGiTFNiGj5m6,[1Po$7k+E7l^%27TZJ\EQG3Fq9JGL0r:_W$&#+^xFJ,<πU"wVBrNr69ks(R44M5LOlHnL>9aDn3#>S\8FcPa]3J^NVi6i=va1g$L):egE:W_C8πU"EAM>r:9,L3*G-eSO\J9j/3c;#>nO^__[m6F1Tdq^L*>j3B5dPgkk*f+,9b?t<Z7πU"UUfm0&:1BR(v7uD0>sDU5.lWp(0s(0w6\*oDBeZ5iqTl16OJOUF/p-71RmOE02HπU"F+.Uq_ab+TRj5XmU%d#$C/3YSudb,PPRjz<>mCG6iOi_)pler):$ol,G#GW*w/KπU"CG+0fM%y0=:3Os'8q0yJMT2A6#l5\2.S5;PC^yCYm_*wBoj_v)V_o=tK0S5JOADπU"e8PXjEK7.d(Ui9xhHm;m>UWne+*o_Y]nr>rCrML3n.kGfi_0*3-+t75e=C&/BI>πU"l=0_V/zb5hUdW=R*Ishx>dUCHnT:8d^(u-X/\k.Zcs+v_AU-f5JU1ZeNdnD?'q8πU"w5Jh-gpEpR^mkCLYf2q54_[n_Ma.Ykt5o=VcQU$99$HdN4kS2ynr)ruc562_0mPπU"Q8Jv]:dCRuYWO,ELn5P.mjd4#H:Fq%-(m24.D[_;3)l\%h?_#=Oe[3C>$Z;TkN8πU"BWrc65SzSL^tK7c=ZL?%URm?;*[GNYa.RL,_M0i;;LDqdbiXp-4+Ii'#9*8(P5kπU"6*608/vo;RF7dQYD&POtP&*>Ac;Le](>>S-$ZG-QY>2LR;7x:+X$Htm(iu%8c;[πU"\Gk([Br/t<'XV>:^>'AjiG-N[[]3Dise)ZO0ZTO4?hdi0>K90HQwH#K4)jH\T;MπU"TPfbXqa'1U>e^s,$fog)l<UMbsPCHSw>.metw%\-hw*J,2=,]48:3V[?NRQAKbjπU"/p8'fFpS#6j0YX2\*D539P*rYY-w.(N-oN7)q'9uL:axpo8]S<6OKu;#y%Y%:LOπU"W2U1/iiKIbP*1m^+-TqT6E5UvdN;&kH#M;72=HK,_9XY,XNW^mKU0rv$_h%ib6<πU"Gc7+X_yPRsR]<Z=Y<H>M?0bQa84KFceqDhK=UCrKdl:;,A^RYC^1VJjk3sFO6JYπU"oHnq?.ac&lR(==ZPSi:,A?MIc:zg(O:3rgZ]5>tSR8Q9&-N950mP?t<4r+]x_EqπU"s5Y;B_h,[IN]GTTI-Cv_S-&6f'fRk2,g4X*aVma;vf38CmU)U$$3$ojQb5o2dNiπU"n.o^iNDdb&.OUk<Cq9Wf^hy-T3c]ob-x0;gMZ$D<F9?I8ZrYr(GUVK*CV9hhjNkπU"9SGXDaAOtZ]7=G[67et+U>';+rd7fgZ+>P7G1/-X<Z$2v9^e,:l1qXZYGkCL=9KπU"U3(&r%+mDaYg*DLzZv(T931(PE5i.0mQj*1pRMnFUes'\YK]ZLqo%%Q&Gc$$pr=πU"B2vgvgJ)r#PvjnB*Qaq=#>,gH7+im6dr)8-HH?36<$O,u=T*X.YelFa&^tyktIoπU"[BGbacqNt4CS,cNWZEW6uwM3.;Hr#k:ehmU)[7NWF1bPDVr2_Y%n*Sy=)cHu.AXπU"G:K)1oQ31emLW)u-dQu[Prf)D]jF441;*yBq,Qm<%Q(QP&L(GGF#7].6iaiG8:3πU"pjlQg127/F)H:[Dj=Y<?YV%,JMjK&R%mp/d'Lpa%z)Q#ANd+a_NTZX5B06_%lCBπU"p:q<0]N^NPzjgKmjOi\Qt95\uPNq.[*XT)Zdg(g/ZON??5OPA[O.T9o[fkaF/O>πU"_e*CTcx/.$5.HQY2kzD6k7lG.L/qTcLG=0SgK6$=\jQ9O.PpQM*64.oU;.hhYs+πU"Y+0Y5FAsfC3Lp#D'3+k9NKBKUQ^mOiDc**Ckw,BYArnuIEri;LnT$e(Ux:/c(FNπU"0DBuWE1ZaXlvnz&QVI%776r2c*.Y5i:W&+LzIGQ0[bi;TG$Xs_i)h20)Y'VTAgwπU"$'+QhnC.Z*0IIMdD>j0\bGS:-uDqccO6O#^U2mCV_*>\'i(-NLi/-nn[i9>ge>(πU">lR3>A(LS&JkyNcG40]U=k=XTvgCC'GeqVV8NidtO&R>)]V\;/?60:0]gO_ogY[πU"\o2-OA:;ROMTKkS'puRVMuv-vFTn_VB0(3C/E>=w$DKv?[Yb)DOC&bGo.;DHN$aπU"?[R'N:VgVmo/enOu)r&P%><X'keECpe<1wQZU(zBe-ESUK_\c5?3JkN]b.Jt3BiπU"qSw3(?(YO^N/5-nRgG6B)*ha;S]AvN%)3<Pa;.:jL9pgDa/j/#m%H%+Q$Uh^HFvπU"c7KfCo&SUBsNpHeCfLtU+cSo<SDFlCMZ]]i28v+,wq25CD^LXAkN&m5,(3']4N^πU"hM2A'Nd9sSF#V\#7W]$]gXl$>(kPBJ1]P\(]XeY(4ob/(ly/GAf$HQ-2z2S*W9#πU"S3?o(E9hy<NQnq#Mi>aSXjRkxE)RG/Q00;mRB'u]dSu*n(UT>h0nk&9FZMk*nuVπU"E\dZOMJdga4pU-.bXpN)N-_RS*^/LO60)9vkgB..R-7S-n<i^#><+IF/k_Y?7//πU"-+BK]57C,)s>;\lEkR/$%g;&'7qND]Z&7hsD^$IC<#n*%kj,J)L['<oWj6Nk8TXπU"MDEVRfpxHO<22mUfCttFK4.Z&gKA0.n996M3pi1G[XzWvaCUMJ[f[jKd1X[1e)KπU"jNgC:5/SNHgFacP7iDAx-]D\Zt\h-Epxo*nfGl_#wi_6M:C]c9r8RbUYi_:D-wWπU"ekC%$aQk/tND^e6Fkk'3XNAAB^ATm*<c%u[Qlk?^8J]#mBQa0q04JRECFbpH./1πU";jio1MHKjHJ&iGm[A)5]HC2Y''z3$QSn(iSJ-X>/TSL71P^r+30chawweYt;XiZπU"Psm\Ft\CmtyWJO9weN$-%EBB9N#YCPzfto;+Ssmau#-NhyQI$)8)Dd:M)FGdupbπU"s3q-$wje?L4G,u:85%+&?r1Y4k:AyQxgu5E%nomN8/;Mx7Atl('4Le*=>>K^8.jπU"pZaoS7Z'fo5e\&w-h2iH%0O+P(l4kU5xO;z$(\q2XSZ)HJgvOs(^45OxC#1k$PSπU"//47DHh'ikeFT/Ufv'nYHhf6NJ?97lsQGRN2oL-=00\^].$AK]X>RYaO=?^'Sg]πU";xtG^;=TOPWHbu,u0EQ55yFTt:f(6r<1Z-^k3]pf+p%&+.QVQH;Q/[R[(d\;5MZπU"Z3)U(iTJFmL<X;VHJKU=Y\aPO;J0117rlF)YUg9>wigjaFMmB&:Sgs7L2\-+HsEπU"neQLDM+5v=I1y_q1C2**08SXq;[Q\O#&Ubi,8(xHU(4q/wXX?#v/*=eU6i[]9,UπU")y$MzH5knH:EQHk(ZPIw-*jb%UO-Al--Dh>&xt;(_Oo8jk5c;fW]EBHJ>#6x6'&πU"P?peJPuiV1=AZn'QUJC0r#GV(9jV?8ZWi^\Hlwb>1^o?cd,vAv(:9L*t3KPS6(/πU"hMKpPx1XqQ<le8tPGn+^KHVfk[4GFskhqQ-6wLPHVG:805I97jmKU-2ir&Ib\4JπU"Pyj?AH*F'X2-$:<8)$=Buj'k:?[C8V+]N_7=Wku76lHUDe*2\3r2w_Q>xUPX660πU"jh7mTC,th\V;Y\;QU1eA[T5E8^)IWZDNVOIGI>SAW5e3V))0C#L/z%XGFnj0n-<πU"Y6nR5L(.PDS&&omx=JEa5]#kM7;.4?kveHspdk,.4YIKT46^(GZHg.6e]V)8UQwπU";oQ%v'aG.qs2U2=,L-oV'k,5^0QgQb,d:u](+3EF1h;E;5jNYJ]iRm;5//3IQk;πU"igRdcUAZN*CxKx&>oP%/_+Bb5Ut>?GT8I65ojc0kV;-k_%]#yNcskB'D\=rTf0$πU"EBj9UCRNI.newaI>_iR&4AQoT$m^C+MRJx55Q;9=?LFqDuWN&Cz1lVRl^YpVh5vπU"F=X2Hipf6\o?X4X<m)Z9\<e(?WL4YSBR#y?A^f5#d9Cug$nrG\#_ocbGJN/ivA^πU"p[[(HpKx,a4W6KKet*X*Rum(OrNxt//gA?539-Y>>wadyxW[F1[rePq6zw*_(&.πU"bmKUMLOt*C<CjKRjb*<=%54fo3bby.R-:WheQ]PC$%OiTVifQmIZU'L,X5fN*X^πU"6ZEQX'B66Dy6p*:3Vc[Y8gs-uoVDYw>veO?#4V3^Z;EB[8CS7IT3JeQZ#),fm_IπU"MiegXW<wh&w2jAi6PX1\_R?)YY8Z&2kWrzc:;sgf<y&,cq\+lGRky]2&7[gL<aUπU"(iuWHu.EOgjB]PbS:C5crO?+c%#IH/B(zSICKkoBGIG=iTeqgDKhJlF9*Rzhc&XπU"AzfXcv0p1k%EogQYQmAFe3e%0GNMem%NpcN4TW9BWD66l-k%fnYwJSt'9,]8%ZgπU".y88t*Xwc67)bl[=Za1t+'\Tz[d-:O9alFK(A'^_j.hfY0vOG^qWu$Atv&+T$LsπU"Aro-2-=07;wbO*r/Y3KiT;]/b8rq/pBRW-rrLAk=pkR\?d+7;VWtt_Uaqf3iz92πU"7max#QPOM_XYVq[;OknKW6)G)y'7ZMDpNv;9S3Z%.$^_h0zDrslKOVCX$6qcfI5πU"4_oME?O:(mh8V;9o#C2uBf[MQ<DU1ounb?il-^>jxG+XxJssZ$4XsJJ/]2w9o_jπU"6q9Z&16TsX/P=owF*3gz/WY.lKtIJ0U_:EG8nB6-^aB9o[Nl9)'Q[\l_Rbkc/F+πU"/2,L(iEs.itBOxO:h-GTcr1#mU)7l(*?a:_AO,1%MyNQq]DfNUN>qE9B3+PL4woπU"^_EV6KI]F^?2(yD&2o<50RaaJ\KkKJo:n^oY#=*a\A]qh.Qj$/P6o\abuH'EnzKπU"9mz_P1FN(+H74YfqyDs-+L\_)Lx#'=.h_m3d73.#251U.1%h^UY%xN%&up(%)9%πU"%[%-%oCPMF\2VS1]%0%%c%L%%1%%%%l#wni&%twVS[gfxFk)fBS7a7xqb6sde*IπU"C/tI.4gf?5mS>RgqCc7%,]C,KXAuhRv]F$Rungo(d&W4QRU[EUL]5X7TSnk%4zNπU"t9.o.TVDn5s[Eh'n/C1TA$<5wuYV+rQ7?iku_tcT7\_iKckOu:Tx(XLZYM:?r5OπU"Wb=dX7Vc*lrqGC.paCUO/2cbYdW;AaZ$aLBYm)QSG6XmxQ2Xdm<W#cQmkes(uVAπU"u6*(^BwQAVBa^Hj#g1K?p6N4AwuwN)AJ$>H<uPtM.Bq_B'\,yhQL2HP95LhV>A-πU"usQ(dASLW4/EDpC7Z92p>q1C3Te=n3k&0rKH4x#M=Ck:T?%87XJ>BsL>4rU3<9$πU"Q$*.4'ovp+F\wn1m^e>>Ac,O\HJUtGt_<<B?UDWV,TfliZ.pWnJhRj^rtdZZ&M>πU"7=i]Fjk26]>0j+JUZgeadq#WXMV0__4MS<8YbBES=TZITG4+i0jv>zi[>O(HQpJπU"B9?E_DKo8_[3c-=X6.w]B\Dy;.O9c$VjBTUKf8c$GLR5TR_:-+qs_HaZUbVHZs0πU"-.Ld,K[tF)aLTE)D_(xLkig:LgtKs/O=m[EW9(04eYXgWZm9in]7Mb6ib^.FGsoπU"]'i>sR[F8D&+=Ly=FF)<oMcT/71M?y4X?+=li=qFUAO9Q=1spHN'%N?BKOMpe)SπU")?y.[_e3ZN1wpI;lmH%oP=H'Pv#oohm4GWf$V.ae8\0$.HO*]$xy.B=I?][<:FNπU")nYf:CcqW;n3*)+s%]Za(ak'C>]G<NZ]:]o9xckEjH?tx^iR?#\$=li8DI?fNE?πU"O+T7e086:[zb4+?gc1nq45URRa/CtzFW8;]sI_Xef-4w[7]T/Vk2QY(m%G?&^%LπU"Z,7W,0tnh<Rmba>gE9nCLLV$f,].Q+xV(]VChs]JOSZo=J.>Q/xAx9Zb_;0myJRπU"9dz79YP[I]Gpf4a.;qqqNb<\Y,drxeWF2Q%2,J2%[Y>eG$f3\sci8x^'J]18JSCπU"_%ajUlM6s9YPCr^SK[lcdT+eMJcn.$gt+2NT2Nsj]'*<X2oMpGuIiO?NEkEdgg(πU"0#/4:p-d0]J>/tk0QC.(h^z9Lk77L<>)h'U9c;^;aQ(54$J[I4^MWFRI5-E^fpIπU"Qip$J3$58SE<>>A333)o<=ZR5YPLLs-k3+(Tf-e&niQOYYmLZ?2GOG7^&/3=>H4πU"T:L\D'VtDf/Jo.?w7l7Bq1:$L(MPE0,vTC[zf[vO2S,rZB:Y6eqAY+M)\y/kYtZπU"BomQ#-526aNhlTP:?-LCX(bN*x]EX=$62tbAM2REm2B&X$=/VnVR[]AcNS/A[+2πU"oWzp[gs4QQ]K$l\U</e.\40_-?AP&Rk=C:$._)+U'<N>&xA.=$AnT6/UMJt;0REπU"H+FX<)'aN0%k?tOD&E??Ag1t9_bEx+,g3=xP^isRuSo<fTDVLLP_b<gYhfX2WS9πU"]g9/Q>9cHGl1iI0u%5iiI4j_EC3JIc1mcol9$6xH'd=5Zx4g]<1oS,v*jN/'yTpπU"*-SK4W3Z#DP0pa51Sy<VZN-tPrlh/+pp%D^;UM_=qn[V/S[lDfa[c\M.wMKLbr9πU"u$S5l*Ic6eiGO(T;f,3XCee5qS>)Hf0b:cAa'AA?fk,N^2IH[tIUX6;uLhIrB+EπU"_'VM)]pOIa#$8GW%77U:c0>pEFipu[&h76)%PLIZ4g?HiE&%5)nT3eSl#)e)G<BπU"FAu^rf3=rM=L789o#dZ5Hr\DQ7AB]9nOiRa%Xy]tXqMEb*+wG.eSxOa.tkb>tkJπU"4JksX*QCyZ?CB%?$dgq6'\$2j4#d\u5r[;QTZlV4F9f,T?Q+xr8Us&q>rJ3IN7nπU"8qR1&^:>?nZ42UX1g<,N)Erf=?1:?P+X6g%z=Iv<aZmS<'R-OrHATFU+d5Ib)b[πU"TaZ)?&/92wc2&;^lMg%h3S'0xdY#vXd+X]Xj3?/_J_F)NrUOKG$%T9><%XH<0'IπU"k1S*U1&=-2hjP7d,YGjU93(U-[Eq4,KZ)r90C<0v7?_4++1&L=lTP\1.=6W86m%πU"p(x1iR0,$3I1'T2tBk-8fU:\E>x0QX*\^(TAGE6bEr_h=q(;T3'7t7'BgO/2;MYπU"14fbM^k8_7(G.g'CjFO=\$YdYk$,6s+C=]T$2kMS;b^Ja?TbArf054Jv[oOnG1WπU"DeKRLVaie[)[5Qko9>s\Pq3FB(aiwdHU6NB*Q^1kvLe<>llZ)PsT%_bZ'.B5gjUπU"IPE)]4_tv+5'Ixh'emdZc;xc=r7mC5E*9BASn>7%jZo2o1=iOhy;^guI5$djV=ZπU"WVlTZS:9)9,dn)YPj2F9p+o-+*O;tdF*9\rx;f^-Y59uuBV[$V2b^?9sID9$U]XπU"Z5>,FI1PKraeO=iiVWO#_]j1)*_6wx6AmV$d,d;kk?T3:=z5:M'p\FZ43=X#(J7πU"*[R?_-yNM2DK1'NLBq];\nC*FX#r_=Z&3*vdk,bBy+-AZ%y?oM3]c$.&JTk>S\pπU"+kct)QS$^'1x)<<Jd6gqqCGpFw5oa(2'Quu^N[&'h7A(Xu-ftY2*eOI4O.*'B7)πU"OK>Nfx9Q7;^Swgg-#v1e$IMJ4*3bH7L?6e39Z^Jr.96NsGP<I:z8]s?JN]'qqdWπU"Asu;dz]h.>BF=);F.y6Q>x&T4S>DLiQV31xR8i<[g%tsyAa44VZ>lm+CjP3te:4πU"^CX#h+Go3&nV6D'73bX<(r-16>zYi<C2AML_,yV=$31/jJt:T^n*1+QalhSohLWπU"ba-9C'1H;vrCLw8mDMz_Scl>S*2L..f+c9h]3l/?tgRg=aV':t7J=QBYbCMnBuIπU"sPYSjUi.c&h\GGkd\z2_b5tR(n7MQ>ljM/P;GHEOJnT^:uUkL,T$XlmjAR\AY)zπU"hCXW3nnhd)\a6;]w=H-nFCPi</*1w':ngJFiF*GSybx8?1B,0]TXoC+yg$t_(1mπU"0Yz\li3BG<mrcQvp(0N7ofj:8,U?iYcMs72X$l]62H;;7f1Jeb<5,j8/i8-RG.<πU"Ci>TfWZ5+g>OcAFD7J*z0[0]gkgGxx)DEw^r(AU6H4s6>TV:RR>:/K>Bq?Kc/]WπU"u[C5pG2E+[6'3/MhV5sNxf<D1_pP:+taB6ASG9qm$x8BMF>Pd%+Ci.5s1G)($K2πU"\#1]Mx1Mk_jgp\(xpT\]2T#Du<-WxqP<,W8qA[WeDU,sXkW8]W,orq:xwAWPSmDπU"*TByD_gJ,LS:py<BeSn[PL&if[He:GDDa)kD:ahw4fVJ:>QE'hMdEw_x/NH3POtπU"fg^oZk;GiwI9cQ?YVgH6k8P(0^avcL0Njro1\?$:V)gd../D>4%<IS'6ni['F+6πU"J5WIA06)Ef-[jhUIBMQWQq=\xmIC+w[sz:4dU:(Ns?kB[_N$lcWr7?m.?J6s-/RπU"IFr=S)mSjO9;(JDt[)=a\%5:Bg8obgf.'/FPJtitmt5aN^PJsN#<=4_\#]w^pZ]πU"$j^.1=Q)dMouNC%84Z..jFwHq^URSY^%*C'+Z;:5)39BHf>W$fEGZw7Zsw((QM]πU"pXd8S*EdA(wj4t2uD9S%lI:d+#-FqF/O101HNI39^\paQP%EB&XPhsD>Cv56EjaπU"6*9X$EH(JHlel:kb2ROds0SC/JRj&QU?ui./=X<Ixvl/>k>OC7)j9$b9Yb/,#rwπU"*ZxM9:a,Eq3)/TkYskA>(8syZPgG<[G&o1RpB>Ul+[ldu%p()9%%%%-F%oPMOFbπU"<+($x(%(%i0%%%1%%%%lwn(i&tw%WSgf4x6%v)>jm5tM0]x=Uc./]O^c\kBLw3(πU"iAUIe%.'?Xv<b-qWh=at;)Q.uUoPX=Q)W*nkanCVR(HMclfUXuE9M/?UB;+Z$:,πU"eaXX(t>*;q,LUk3Rt-->pE6=lQ_QV#1#jcpFAJ3k#R0dmpS'aCTGZb0.QL8H]q[πU"0u7:4.+rVeb>Yd=_jaDTesQ5j1'<ZuGE*u;]uhM=vM)-)G3\>JG,9e[lbuFgjx)πU"_i$*A3$(aw&3G;6Y'jPy^3.G\9ce^[]H.Ysa-?78TjK$LN/67<YaN8/,kS'HoY6πU"X,g;8a7LyOmGsKD88Gv]+Fg)ge'*N2r'Vo60>ofj8-Fd/rp259ArHlauF:6e0a,πU"=lI3JaD'B>IQfUH(l9u7_v0xN(bIh1eHD$k6lL70D=MS&a3a(8U-BXjAJO;Al2%πU"5NH_?W:X3b>3V#RAGP(6M)/mncY_PLF*SLK;&QiA3C6Rz]a6#=[7b.r'eksstdeπU")zurC7(Y0U90-NsQs[&q4v?T<uew%u+E=bs8d0dbRI#k.91[OrvJg)'eB)-))LxπU";$yXq/?.I*DuASan?*'h(=uo8b''DQ*]oQXgl1V)c5,b.+H(TXfPz#-6p^B3<NeπU"f+Zod9BWfGTjRw-V]01pljp7y/8HBk=B1UY=c#R\-+5$Wv7057'v#%t-J#kOJ86πU"*6Zitr'+fAewd_OiI'OQ^4c8YBUCtnfNLM5V(FX9Pc.LsTR]hrC-GK;)OhsF]A+πU"=h>xhi'?^LMPzi[ylDxQj5?QR.jJTw3'5YNtuPp$.Wc_7NUAj1vOVwr(XjrAH\AπU"J<8KdzHsR0tKTQ(ITa=S%L:IzfJBGN_RztW]qc&dZ:a<U7^IG6.NUrs:^-se7HDπU"JaF/7Ma-s*&akA>,3H5&(Hp[-i4Q\Z1+&1=RA77UQ_iOQ&6Pg?6uS1P5qtHzro7πU"KBaOFZvUmcHc%uBu<<1uSTkwTeoP.lSrkGRe(Y+d&#Cw/>?,P'k,'T.#NYk?R0.πU"%sax2GzDkdC5dv9U<99ZSs(sdERqksB98hq?oHv\yKkxRhrM]rxH.Jaud??&5rRπU"F$YT^'(0G2R7jl<dEXiiyO=E#2<Q[n;jwI:1C=-Yo_38h>3bu]9+H#a.o5+lkdxπU"8HrRnfTlPAr9Zeg<\_0Ic6.m$?:2p=&mth#st_BqfAiJLVsCa\vHq5'dL=con<-πU"NWJ)z'u,up%()9%%%%-%/%PMFOE>,z&*+%%'7;%%%0%%%%lwni.uh'S[gfx&h'*πU">S.m9Ml$kN]C]KRI-0;e77JTm+Un/R:AtEL)c#0pK*1IQ$VsRb(XdX\J?SE7K<dπU"9.J_VjB8\^,sdgnI)uHXbi8T1duZbpyuv4QBu$eqz%BQkvjC7)q#q6Z+Q\BOC*qπU"ZEQ.ici'paR?mauCLN^f:EC(1f=Ps'+Rf=H&N6vg=lj>.EoP1i'[wRcFtOsbhllπU"N]7<D/V22,rO1AaOxR?4fkLd$Xb8L+6,pApX.oQtZ>z49Eu)b_;-2QLA^r-V;O&πU"uwVEPW4Vr1+DhG?+fP,d<ikBZ(ARR%90YSS<<DJ;n(T;tZ^sXqc6WWWCs8Y,QgbπU"y7tNx1]#YvgAmra*qXy-1NGkh0_L*ZrWh=BZ0UjZv?[:k\le\F(dLq;ICpprhmKπU"WSaJi+Jk'*_:fX8vYl&,9FhHKDxU+ui-Bhb\uj]nrXlK4d0PgIk9T;g=Ak/0%7hπU"1>O2TO^2k#i1l,^1Ygd8#0PXG[#3qAZ([22jT1.h8n\dEpPFc0eshFpU0)Ao,SOπU"&]$enVm/&\iIhhz3du97lA)]ek2c*q^0WN0^Icc'ahu>#,QDq#t&KsI56gD-79oπU"j($kC+P2Ix+nHIbt$%KtTbSSSV*I:k[AkvqGRWX*Rf9g1,Col+Ga/hudh9Iab[JπU"*gg9t&Uk/aIIJBK,>9?1ilP1eO=S2L?RM2Fw9[g:c9<RHTOd^h_t)f/hUpgQ]GgπU".'P)+oPImuaM9'Dt]kH/S'[Q7>+^o-+nV.Tx8bTbA^xtj1f*&%&cy^uL'XP,]AWπU"uLj9v+.-CUcgFN8u+X[HNe]WT%9j-Y#Ja0J65SfUuLTZfYPWIEU)%X$2p4s[jXGπU"j:',''vbTTOFA$YvQq.N&v&&OLq0LIh.TY2f%m]lggg.=6Cjr>-Os?<\C4W3PLVπU"jj1*#XZa,n&*k&232JGe3G=.b\e>C&6C*?*HnMzkINOdmc$D'RG$8Dg=2AQL'CbπU".,#I[Kb)Y3x*9PXX$I_Tu\#]mKNc_<?BFJ(/n$k1l'o9c&PLrY(q(Ap[z\3964kπU"3+p5(ifGh4^FwGAIwp3Tct4Ljw'sM.8*AfK'A1Wq]UeA;=p*uE70&F]\19vl+Z0πU"4UOGbc-K$8n[:z<MW'_HHc<Ixrn)%IPu$F5>Dgz$uq>.k;a&'bM'4T_]N$b.AMBπU"PvZm-D[hiP,-a9nA4Y#D42Oq&2Yrq;&%N$hB*Dqg<F//wK*ccQc:eZRsnbRkF,4πU"5N]dPSDa.+HXLbZVlmtHCWwMYIzyo0JdycqBd,SfP)(qX#q#['&;j<wpG#;%1;8πU"jnOZe79V7<mf2H3&s;oNdy,S+Lgh(#-3ZF%-+^z+z/X58URk2Pl;)f$XK17JxnPπU"mlgMRz^5t8_Vb,?IhsIuL^m*=rAFfE/%MmD<ZB7\473J0SYE.</lFmA2wX%H$t$πU"+n<\ldgX+>/lkdK%rZT<UFWgG)[G'I&dSP[V_GbY&+t8j?&rUaTqjE]xNCEg7)iπU"/a?47\7gBbpgo2uL=SpW8elEEq7texR6]h7skH$kkXmCWuM[Gg$Ac_6LKl,\$pfπEND SUBπSUB V2πU"0g:Lm&Gb,>jkVz,_2u?-KrAfQgspZ5UPi:j?%Rb6DzD$E<J?=q?_cSOmjb6POmBπU":Gf[=i%4+j-(2.pd17\T[#:^KhjJKXVn,E#I-%-]ZanI1fLEL5#P<eEQ]n4t[O.πU"$FF&(]1gR*)];8JXNMb4JS>Zsjt&/\7<><D2nJsLF;5VYmsQoDjQDcYvKWm>\NUπU"l#V5<ZMRjU#c(_*K8l%jaZ-i.ZZO^P>M+dFE0vGnf*O$HpI\&c>).kfUtQ,3cuSπU"B&2[(llR\JTgWCHu31#yB]-%^zqIF'm-hh-g6me^%>qd+uGPaj/nOq%bRDP;#ieπU"\xRe(##_,^HihE9?'I?:esSiji_n4E<'u[+kKu9lTWo5y>\#rtXX;SQEidaoF\bπU"imX_di1h.8zpmM8#b,4h^.-='KRD2e9Gg^Xt<C=ng.I>gbsBrAetc>78Ftyb7SJπU"4q5X6MSOZSRpZF8%qRpNk8ZD>k*d8cgkNx%qH.*oG2jYkze'hj,'s^^qQo+K#9kπU",M?%5IFO3kQ'w,up%()9%('O-%/&JMF?)V&?&B(%%'#R%%%-%%%%qtlt%SnhsEfπU"fV:#Hl9O*X7[$tj)WVE;T/0M<d+$0mS[RQ1[yR0t.2S^m\34Uq#q%,+AZs$S_GYπU"qN?&CIV+x$3HN03&]yKQnx[)jZ]F%;cO7Ze[mGr_Xh>\H]uV$tZmWan$iF%j?V(πU"iA.[r.%$I1>%AXgt.:RRn[afN29d#Jy9a+20It2D99]]&er1q%P*(9K%3Jq/yl[πU"'8yC';)[S%4-e[pmz9)7,i+n*76'#J&<ZP<;(P).z/nzRW_fh69?d%%1_I.IqutπU"]Tj8J8A3'#&/YD^IJm.e>4(YVC\lWBe6S1?TInea]L.=,st'N>hW4W91*Qtx_u:πU"ldRB1WE(.g7Q&X)0'MW/qDV$H+L)qqzt9[jXw91Vla0%qj;O)qZcJ[.qqV\%SKZπU"Pgn%?8$1KsG?H:6TaOh+%i:,GA%QL4BpeNxjyRgsEt/;zt>ws+Bu2xn1Ut,$V'rπU"-'20.GmaNBdTO<B&?9rz6d7aTu8H3Kl+(1nvwK>ounb$ZX_u0$n9ktX2.r(2tpbπU"'2w(h-.T'i(1TsiCDL6,wPbP?.dnHH'7O#OE=>BXwen>3Y+0l5.OLL-I'LfZftAπU"IlS.>xkL%+Taf&t)Gmg8L9tcJ.;CnqO>xn(MlK'GSiu.>M%2xJ:AAEtgd7yx4lwπU"^HS]njwd&z-+Q60gz-U+l,)$8^GVrhx-gipmvtmb>M_9ITJCoe(B&W$_$hL^C%jπU"D^Nk5mc;Ol]jlT>BKET9,BtK[tBt.n?UwWXbBtnfCc#7jct=c%qGnQ'NVBE1j8eπU"'XDBef'LpDQJpNV<ZQqhoQmq;53q[4Nh2iEx+AKsW+3^jjp6ATv?d-xO^jO/+NsπU"SN]S<3G4=k,G?Zn0;Co&xK<$6ubAaR?/69+p/tZu)n#Z6b^G]QCmyg]0tZf8:mmπU"O_5%j5bLc6P?NnI\f44Ht[yxrYSy41YI(bnkQkoxu_)Lt$c<r:gtj5tq+s-t^lwπU"p<gSk.5mms[ZkV.mk_Kt<j?_T.T-Hdbk+WZgt;%;TkdHH>++QmmWUnKc_d63[:3πU"8ZFV?<F]]+Ko*2Ch\6:XPh<>.*j?hSGNuo9?PJnQt+p5an1IQu>YE_l4q%.;.'[πU"V)YV<Z?#]A3V6<Z?]dA3V<*Z?]A,Fu0u%p()/.%%O%C%&JMRFWl$&.-%%%%-%%%πU"%-%%%%qtl%tSif%yEZ]%Z[E2%/up(%)9%'\O-%U_IFFtNvWvg#%%%v%)%%.%%%%πU"v%znyz%Snhs?fJ*2#'V1Umv<%94ImW&+WEre[W)()%.NtN8'&=++e<n&kBjn?+^πU"d/I<3Bl:^TY9$'6b5BJ&#)bB$WvV_$bIaCyZI2UJ-CXF4NYE-^Z^?ZKQRZ.F82=πU"s#_g*hg311iL(Fw/7.eQudViQmxrtoG*pO>efYe*<,;fQDJg\;P5PBN#9Ifv]wRπU"3g_CcR,?Ex$0%up()#9%'OI-%1wA>Fn=/%(h%.%%v)%%%.%%%%vz%nyiS[nhsf\πU"$V3;%U1jX])XVLeX0Cb\S^o'c9?5BGfa&AU9]KP)Yd:.4U&lkf+:4c9Qd]NbMj5πU"tPJglZH4OB+%R<c#(2s^hT<\($2kCJ2>pXl8tR>6i$lu1f>m9>)'dmA:HUb[/hUπU"DPt=)d1v;Y2BbJuG3gW8.4OX>Sv_2Vd/AMWRQzZE3/r4H8[?t8091V:w6>cR+swπU"%up()#9%'OI-%ywS>FHL/7MS%.%%v)%%%.%%%%kn%qqzS[nhsfHJ*2RdU5TZCP'πU"FbKIl(Z7/4:%0RIeWdmi0UNStZShgJ=g&3FFfu$Pu>SFYqJMnWm,[t\?P2<%5j&πU"-AHx9E7(;HtRSMpyA9e(52[iKRWsc72v_lI[ihZ;;W+^9*Fs$MgzhV9rXfBOgAUπU"koldpW3A?[q)H*Acq3S..,,8du%p()9.%'O-L%iw>mFR:d*QW%%(%v)%%%.%%%%πU"knq%qiSnRhsf$9*2=EI1j,s'8Ob$&+#J>STVK4AX#Ej8_vA+#6Y9kL]l\_J[5qoπU"iE>mqTHYoF]w%A<I#kw4^R04x_7P4:%6B2og3qKZCmU;v+L$g';FEkcCI3s$.x*πU"6Ane6UVjCDWegDdu]UQd/vu4U/fF.f$z61S\;\ka][/<.6.^?mab&gDup%()9%(πU"'O-%3Ow>F=#3&#&Y%%%&v)%%%.%%%#kgt'%zSnhjsf$*+6;U1djz?G4)E_Cfp^EπU"K(%G(?a+AKo(I00_:5e%kdvSfUpffX5T[n/;$6V,9MGY?U1##Y*^Z3f+^u&e+YSπU"k]Ym4M/4;xz$,=uEsGCvM&2&v0MSDoF&JSE:W,uiG'[kf'>G0X\DWXL<p$maq*vπU"OdPEcF)BgF9T/(;]?B^k*xK&u%p()9.%'O-O%jw>=FKcF*C]%%(%v)%%%.%%%%kπU"gt&'iSnRhsf$0*2SU[1jR^JIOIE'1O2Ug/j+:j-IsDFMb=R*ePsc,0$GA%j6jo,πU"Ml9dOl*k>o8'QPC#)M4QEZR6/KlVsIG]=k(Igxh7R.g],Tay)X7wG?9Ji0DupU%πU"BgVsjnAA;(aMJIrJM[)=0_fHtj&OO\Le-<aett)HKRD2M8=J;XWA+3Cm1axgD%uπU"p()#9%'O#-%4x8>F47&MNz%7%%('%%%.%%%%uq%zxzS[nhsfHI*.O[e1eJEhXH'πU"F]&_VO01T=G1b/8CYI6QdA-qQU>G>VO92*Y+3suv^wz_Vs233Q:Hk]qjO_#H81SπU"4:qBJxfdbnvh\<-Swp,3ga5N7m2%up()#9%'O#-%#x\>FDj2>H(%7%%('%%%.%%πU"%%uq%zxiS[nhsfHI*.T[U9kZMr/<4,0$K_2Yjgbk+Y\ZXsOP:+gY7Ss-[,mGV(]πU"_(GXYP6ucm3W8x)wAU&q9bwEA.aO_vh;a,nKuRVlxZW#.N3hwVn'x6v-2KJLL%uπU"p()#9%'OR-%2x&>F-33lxd%.%%v)%%%.%%%%xf&%jzS[nhsfcJ*2;dU5UJ*8/*KπU"&pl>%9:/%f)bG-+0AKG'3(OpUaRmF:?74_s[;wIa,AFPcgPYLhTf>a&=#%JrP45πU"51:SSLmiloxZ?(^=-e0kZUP1&T].?Xrb5=bg#52S:mKt;Q8#hqr=;[8\S+Bk\>9πU"tTUg'6bh0Z:WvMtY^g=t>WlT8]AZY$+*cQJ7y*5>hxH,%up()#9%'OR-%Gxn>FhπU"q3>Cf%.%%v)%%%.%%%%xf&%jiS[nhsf]JF3<%U1*ukRjpj2od%?Gl_Btb;-zA8'πU"S*('mM$oM(8sa,$.zB3DbrM7/=eLFtn\7>ahf*BIDS?;Q+gN6U+4U$m0YU,T>k8πU";;]-74vKHl.hkFH$K_Nh7KdNslIV6/R:/3jD*:uWrG?/N9khxpp=]bg'reF_;JFπU"ns=M8,qDfJHsWF-<>1#Gv=5/Hmd&5*up%()9%('O-%0s?MFj$g=k&q%%%&v)%%%πU"0%%%%hnwh%qjzS[nhsf'JV/'[V5eJ#NQJxW%<5P*6G'tLFIXO(^PL-&z\V,t$.-πU",EU<Y2Mah5Umj5-Tn8CeH:7a5[j29H+\S>A)CqcE#_xG.0L-DUW-0+G&Tlj,WclπU"U-R9Sb[Nm&HT.](D>N8mlT=A/ypZDJG%r]T;hwY^IF0HAt6yYDM3PlOg+RJWv6nπU"c'%V9-u_cdW6$(G+.8RR&+pi#q6kxH%#up(%)9%'AO-%(^#MFEO6Jvn#%%%v%)%πU"%0%%%%h%nwhq%jiSnmhsfJ7b/;e:5OJN,Sb1-HO_1=XDfeAtUU:;OGYEuKm+ar;πU"GQF:AA6>#Ko,5'Je9eh3_$K(k(+no.*U=1$epY$1AeMX-PuupOglZlc=Tz5;q'KπU"+AqLJ3%Xi8JsiToupWoSv&Q8kyl,4z4CjC$)8V6V?Ed;inc>0cLXOLiV+'+b3g]πU"/1rmdP-KLBlGBqcS4nr5BE)KG_Nk%Tup(%)9%'&O-%/_y>FiUEEPh#%%%v%)%%.πU"%%%%t.gt'z%Snhs-fJV7AQU5UlJ8?;%.a(b$E'_W/84/OCR<aOXl)KaJk)>0kvdπU"=Q;5X\eb0#[(]q7']B.b(f^zZZo*%baaiI4q#J)gm>VsV'Gr<gWsComD/t[o.EoπU"V8CEX;a3Paw/enTv+^G4=0Us<SSRroH8Cl:?ynb;Tqnz^E8o25^lV>uLx$(g$YhπU"a-*4B;9ga'Ru,Ex$%(up(%)9%'&O-%K_y>FpIO02q#%%%v%)%%.%%%%t.gt'i%SπU"nhs*f$V3';U1j:RT68m8phIIN0?c3WSpl1mf;^Cos3+^&x(6d,gu*)R8o:U:X*NπU"2HynPt*GlQ4'1,*tJA^5/S0U11JLcN>q\?_F*,Sw)4UZs(FIJe6;T(Sq)#p#O_PπU"7A>[JV3f[?<3msU37lxuv(Sp=jbMrH[CPmNUlcrWxjSQookC]kC3;EfEbMB>Cq^πU"sfG7FR<T0eOR*w&g<up%()9%('O-%2:x>F7Pdb>%q%%%'('%%%/%%%%rnsz%xzSπU"nmhsfI0*2OU71*JHAW6Mg%[U,0f)*;;U?8YRhR3pm>p;KPZ'+er)j0.(dbvA3f&πU"_ln[+TR4Uw%&vqcL/(ZakW$cYeDIW1vxx%b<up%()9%('O-%2Lx>F>;Wfr%w%%%πU"'('%%%/%%%%rnsz%xiSnmhsfI%V3euU5SZnFi&wwB1.l#=8gZ'P]Z1:VGH*$rP7πU"5G^I.VFdK$%&*)dR2P8?V(M)I?p4hZupgRB(sn=v'tmTbv0?LZ;CbR=RgZl$dk%πU"up()#9%'O#-%hy/>Frj6AAh%.%%v)%%%/%%%%nx(f%jz%Snhs-fJb/';e5*iY&'πU"TA(-pAU-z9aJG(^c:bS^GHW=R,__G(6JWnCFDuhFWhQEHFU,H,35NsI4[A<#%*IπU"]NfIW7v[Db?<_RXj1vnX&E$lVFcb:HrOzlP5]qGq,4JjN9w'q=Ke9tw'j_f5)r4πU"Za\dNGSW0DNNCF'qF/mRHFG;/hMBnhQWA4k5SXe+o07JF>hlxa%&up(%)9%'&O-πU"%z_y>FnBC(ze#%%%v%)%%/%%%%n.xf%j%iSnh4sf$V+3;U1[jbE*2o31R'V]%$)πU"?c36*#OpU_%tlZ+)Z/B2_AYOg:E3BJ%94/ie.mkDnVImKHtO#DBQbc>AFZ62Nh)πU"ao-7BJ\/Lfe^Q]MM:]2*qG_'4'sKM4Z-WUQhu3P:499uG#$04Mp]nSWMq,wel-gπU",013nEBApQrwHX/'-r.0s]7P80SFR38%(-l#Qu%p()9.%'O-O%O0MpF^.9)6<,%πU"%%)?%%%1%%%%lwn(i&tw%pSitk'>'F&=#^797#i$3Mma%_Q/,AJ4;RTIQ$PO'=sπU"Q*8hPNrIni)sIewed$Pi,Q+^epI+t,zjnE\RVGEeQEfP,(csK8sc,f>_btP#wW/πU"(zMVToPUlG^HC+F$.wG>(;k-WL\)d5ai8T3-fvL\vLdwuNwvl?m]HT+#Zf^FuwDπU"NVmmud?5vW/FE2,a\Z0*1f;oxZTuZ1l1z-QQ/d\E),m)izqhR<hF7os)<iu>NVgπU"(UUmWZ%EKWgx%gP8tocYM\bow3(XK9bM[HYF>MDHB[9sFGHaC6L/,W;:wTMn2OHπU".iRSK0b?eM4nUpFo5fO\YZB5TD(xoQD??^(Oq9H39.jrS&we-:ac+)*2dE\=moXπU"CGbi.:TVS_*S^Xmr(d>YP9*Fd6JG=7xQp2AjwD5A.TiR=$ul1d]MdR0+V;GJG+lπU"h169[rXBEc7TFnOo'_UT*?8jO:8W]Fx:$:hSVRKet^onR;#^)gI+AQSopY7Qo1uπU"y8oY5n^9MTihfC9&+.pm3I134Tj+2'.WWGQ_0#C29M/)[UHU=V$*KY(*UrVvw)4πU"XK<apmQs-CB)N&0n%vC0Y[%'6;B&F^EP6:MODQVOl%3$ZRJ%C9\?0#\oRd9Tz[]πU"*9A1<'#I8OCzKzI#2gDRPt\][3Ao5R[mRQ]+Bj>7.0XnPE-sBXt#55pQ)UJ>>C_πU";pn4vRc>W+.98MX=4ttk\;)7>r:>0U1jnhErG>*W.ZCmUzyAn+ZY.g_f8G;dh[*πU"4gf-&CLyj7E>jnS0r9OStfe<LC=r'Z?M6vBYPq44QeSg<ut2t8wTc?FkRA,#tJeπU"<8Tb?Be0\i-rjwJ1JWDv$XAF#(<ByP;Ol3W\R;O4oMpUCR.T]?eA)PIse*K4Ic(πU"WID)rX?$+)PC1PL(zi*Tgh74\.H3.#z;G2X\?mk)cefC/nWA'-#_SEN8eBF\'XmπU"=Y96s0?<r=\;Inbp;UONG8+fD#OwN'#o5b^A)G#pBPVyM5s>E?o<N&)-X46AgH]πU"^:KM&;DnXDK/mC[*_K.E,nMvg;*:S=JH_(#p\hwbL%GA-v2*X7BS3FP58%>RuTIπU"3lKm)AaYS8H7KtMQ\A7)4wLEP2.X:q4j58\t#cfAd4#d)ZOft5H(Ky>cHYVn+ERπU"6j2N-U^n9bsIrv?gM+hGi\<5jrP[\*Qkv?xoYxhC-9JlHXOTB3qgTA6%/&kFstVπU")dN\w<VJ)#LAY,M#>bQS+K[O[p18aPOy*s;^;Ud,dUu<Q&;c2CeSel&l;>'[,1cπU"u%WH-Wr'f,]_)8]cha^Dpyis#j=f**3O9t/m6RV$-j9FBCz(oa[6tuguhk)'lxKπU"r-PLTMjsxY:l,kIyM+53TV$^k>Xf-B<8>Bf\u5n<,TNptHnF8Tx=g,G,ECN'3S:πU"FD9fdX.tiCG$?ySUMD_'UJ/u\*jF]UreN\W2u0&k&P?wu3xcoD9A>j?q2s[rYYDπU"R4,q?1=PY^^gQ=a^u(sdX?WU;1qMVGCkVh'EVoeiAI[%HLHn#'5-v$DdpT_JR3RπU"W=K](k2Am-cG(C;xFu</w]XN\T^U&P_xMd+#;sGiWJ35KaU/<mh-(ATKi*f9#TTπU"kbl%s\1HB3C=3Jk\&*QBrV5h,j[-8LT]ob_Ml%c9<hAUm:Oag[[\2-ceynt$2&_πU"jBWKUx0mb1JxM_FiUu\P-r\oY<=n=bUkEl?LbQxpQg5+q1J9u:dd/v/ul.uMUyoπU"9YX9ftUpmb#^xX\32M%7:lIweenNSMg2wZrAS:q,A+-HR)cekoQoIm^FUT+:^j0πU"MjuWZfr'a8:3tjF\.aaouf[DWV<XhE<ukJ;W*Nt^DjS9+C9Z5YW:BRrbGQE/C/_πU"ZJtTBp?oSK4mA=,L[ldBqcaP1>U9P=TpvNfBHGUq$?49WHiB]ZV/ZC;P?C3\6wtπU"3ZOIkK4'bPT9U/sm#G0C;=2ozcB:wXSMutlMdFCHpJCu(9euR04<TdZiTgX%\XQπU"Xv>vnxsCrGVL*jsq#RmXvG5u>/P9Es>fJi[3yILL;M(>onhb^xtD*=]3AoU_Q\jπU"aBDrPC^p'ZA17vPCqtRm?OUs2nBLQY9l%gTw&ic9=ALoCS*46h4mKi24AJbr4MpπU"0J?Bzz1i8s(&<a9#D(KB;L+kcC&BIj7'*S>]hSQ[Oj]g35&o29Q2J3\1Ed_D_<VπU"3Yquqi[8>C_=qWQi4.^sSDFZ=ZSG$R]#7u$P^CT%raz\8meS;42+([r0h6>7cx_πU"43ab.B'lj&aYv0PKp(&uUoL&V/rnhLK/GIMN=U=#ASck4J+1j)(;1LLG(fG%>jgπU"iRIib/728S(gUQ-Z+^nv5U)tuR:d*4n(uA]L$ZR[lwj^.r,Izb=UMl#Y)dE?kiHπU"[D)6&?8_l=\T+5/jP,m;_qQY)*+ACY&#=3#aDFJ:/vijW*FW;*,zkXN/Ap6>;_$πU".(]Zcb'r\up%()9%('O-%25y>F:3ysG&h%%%&v)%%%/%%%%nqtf%izSnmhsfJ7bπU"/;ep5UZ(-)-2iF-2i)7.C9X8G:p5\8'GW*=<<)8>5dA.fUNX=$Fe+avISLsa>4<πU"N;=&%*94zEi:#o*Pi:B4/[ki*9HAofCLI-nf0KlgBHF)J<T8Z1rZjoC]CAgQbmpπU"8fRVv4<B16vB#Z\G;W&>f+tB721aZb_TmDEu_XbXv$_0[kwTODU8Ly*5h-xH-u%πU"p()9.%'O-L%Gy>#FO>Q)/h%%(%v)%%%/%%%%nqt%fiiS[nhsfBJV/R[e5eJ.NgyπU"jPzM)t^r$c_1+-00_^/NB46Ks3%CJ,-KRP'Wemg%VD$P>eB>eovGHAD';?UD8koπU"WlZp%p2sQ1THiNMLskktZq_/o_EPAQZr4]Oc-WY-L<UWqpVq#IKiz$s>sA]ONhAπU"*OM1Fq)X&mf.'*Z)89DBXt=sN1;7p#q4=,_aQ0jWRc?Q58jdG-%up()#9%'OI-%πU"VyS>F]4.hbf%.%%v)%%%/%%%%uf%nsyz%Snhs-fJV3AQe5T3Z&G*780<CYQC=O+πU"LYi+To5oG+8p%k\)08H%fG1WaXFQ?^=rB(irYN0>Of+(M?+s'hqq#:jg;Xj^;<&πU"5V&StGVqVkHT4_CxqS1T&Gp5Tp#q?nrJ8$6j#z'J9Q'W-m3pSwb#A\F9l&U:d(TπU")&JlsoL*\=7M8rrnhWTAXWqA>P,Fs;L_F-tx+u%p()9.%'O-L%fy>(FE0f*Ff%%πU"(%v)%%%/%%%%ufn%syiS[nhsf]JV3;%U1evC4[MmiQ_i&1,/>]:ov_7C6+%X/T>πU"I8o1f(I\ZE<[2IW*jU:1%f>vo4h2iFD(\7\,QLf=]Bbkb$6A\4[4P;5'v9)Z?:<πU">Q/j,IIxmPjjnf^sgY[=kLO9Bt0/y;0FpsjufS*^Vy*w^SCd-dwu6(so\(;NkNeπU":K2$A#],r>hqeHFJo<_du&#+up%()/%%%%%%3\GMF()fvG%,%%%%,%%%%/%%%%gπU"wzx%miSi%fyEZ%V[E2%/up(%)/%%#%%%H)GMF)&fvG,%%%%,%%%%/%%%%g%wzxmπU"%zSif%yEZV%[E2/%up()%/%%%I%%$xS>F.s&R>,%%%%,%%%%+%%%%hi%Sify%EXπU"YU%E2/u%p()9%%'%-L%$x>%Fuln('2%%+%('%%%+%%%%hiS[nhsfBIV/OdU1UJtπU".:RBl:Fjajv5X6MVozV'j7CI3?e_uJQEWr/P\Kp2jey>-QC;2Ku1hX1^COnI295πU"[e9KBTR,.fl,SoggnJJj/<vHwcu8H<wHw6bnFKvlSFq9dn'H*up%()/%%%%%%/(πU"#MFAaphl%,%%%%,%%%%0%%%%hnwh%qjiS%ifyE%Z^WE%2/up%()/%%%%%%0s?MFπU"Aaphl%,%%%%,%%%%0%%%%hnwh%qjzS%ifyE%Z^WE%2/up%()/%%%%%%2Ux>F3.sπU"R>%,%%%%,%%%%+%%%%hzSi%fyEX%YUE2%/up(%)9%'#%-%UDx>FhZSNq0[%%%(%πU"'%%+%%%%h%zSnhssfI:(.OU1kTZ6>#6a][:]i'F+SY;/a3[?2,7-6Cd75pYlF9FπU"qpT<S&(=OVyOMJya8mKVNoo1U]S'zE2pT1Q6C=ERUEVWn=qNm8Huhl+82N>VeKjπU"dO[u'w$d%^%up%()/%%%%%%3jw>FAaphl%,%%%%,%%%%.%%%#kgt'%iSif%yEZ^πU"%WE2/%up()%/%%%R%%Ow/>Fap(hl,%%%%,%%%%.%%%%kg(t'zS%ifyE%Z^WE%2/πU"up%()/%%%%%%2iw>FAaphl%,%%%%,%%%%.%%%%knqq%iSif%yEZ^%WE2/%up()%πU"/%%%I%%yw/>Fap(hl,%%%%,%%%%.%%%%kn%qqzS%ifyE%Z^WE%2/up%()/%%%%%πU"%2Gy>FAaphl%,%%%%,%%%%/%%%%nqtf%iiSi%fyEZ%^WE2%/up(%)/%%#%%%5DyπU">Fa.phl,%%%%,%%%%/%%%%n%qtfi%zSif%yEZ^%WE2/%up()%/%%%#%%zy/>FapπU"(hl,%%%%,%%%%/%%%%nx(f%ji%Sify%EZ^W%E2/u%p()/%%%%%I%hy>(Faph&l,πU"%%%%,%%%%/%%%%nxf&%jzS%ifyE%Z^WE%2/up%()/%%%%%%3[y>FAaphl%,%%%%πU",%%%%.%%%%qnsj%iSif%yEZ^%WE2/%up()%9%'%R-%[yS>F9)6G0e%.%%v)%%%.πU"%%%%qn%sjiS[nhsf\$V/<%U1jZkChcVG*Pge:1pgv)ASg39Yp]%.^mUC<>TWeLpπU"Vec#okE*\g1BlVfVn3X.eH4('g4RmYuDNLg'NX&]3sH(^=AYPg<$)LW;#^[\:8-πU"dhSqb/G=)X?jn5*%fc8t\-u]$=*^6zk_2TVk12mpun?7Qb\$EQEw5:&BtHtlT,kπU"s*H?VgSUbJwg%Tup(%)/%%[%%%FDy>Fa.phl,%%%%,%%%%.%%%%q%nsjz%Sify%πU"EZ^W%E2/u%p()9%%'%-O%Fy>FFcOs(:c%%(%v)%%%.%%%%qns%jzSnRhsf$'*2'πU"Vd1j,)L'b+^mW&0;/\ej+[W)(UIK<XUCRoo9[o/])8N?$QmIIak_j&a$CLYDjsHπU"J1cJ7rVhI8Z5/d7)\[[GnQ=#0taxfY0F3AZ(OfuZ+bIYh&GK:$.R.g;l84MvQtBπU"k?GA6*5Tv$F4$2f-5U,ysSgKimc,u_7ddfM^-QkRIR+lU\ARRx'H0up%()/%%%%πU"%%2ux>F3.sR>%,%%%%,%%%%+%%%%riSi%fyEX%YUE2%/up(%)9%'#%-%u)x>FBCπU"#d<-[%%%(%'%%+%%%%r%iSnhssfI*(.OU9bSZx)Z/+)B78B>rFqb%EC_Opm*HSlπU"C#FM;)GIi:NU8a))kP6;JOEX_gCi+,g0Ie0kf(;iDiWw1Hay*BNA,TyFZ$6fVutπU"$hf9^UZd[aIAw,L78u%p()/%%%%%L%Lx>OF.sR%>,%%%%,%%%%/%%%%rns%zxiSπU"%ifyE%XYUE%2/up%()/%%%%%%2:x>F3.sR>%,%%%%,%%%%/%%%%rnsz%xzSi%fyπU"EX%YUE2%/up(%)/%%#%%%g_x>F.)sR>,%%%%,%%%%+%%%%r%zSif%yEXY%UE2/%πU"up()%9%'%I-%gxA>F)>5---%7%%('%%%+%%%%rz%Snhs?fI*.AOe1T*ZFL3;/0ZπU"-k]YC3SV01TG=[?8(YI6C[G)02lG9&uXrAV%,]99#-MaznXt,gc/I&=/o%O?f7sπU"147f<31Ut=>1tu7oDvHHp3W,cw(-bCnd2'$%up%()/%%%%%%1Ky>FAaphl%,%%%πU"%,%%%%.%%%#tgt'%iSif%yEZ^%WE2/%up()%/%%%#%%/y/>Fap(hl,%%%%,%%%%πU".%%%%tg(t'zS%ifyE%Z^WE%2/up%()/%%%%%%2fy>FAaphl%,%%%%,%%%%/%%%%πU"ufns%yiSi%fyEZ%^WE2%/up(%)/%%#%%%VDy>Fa.phl,%%%%,%%%%/%%%%u%fnsπU"y%zSif%yEZ^%WE2/%up()%/%%%[%%g3/?Fap(hl,%%%%,%%%%-%%%%uh&'iSi%fπU"yEZ%^WE2%/up(%)9%'%%-%g$3?F8XO?Kd#%%%v%)%%-%%%%u(h'iS[nhsf\$V3;πU"%U1jb%EWWVU\*p5[t]ohguD1AH?C&'eA9]K\ZuH[)weHPUgW*N2HYnHQRB:ML%sπU"RRjX-AJj5jb>3_RdM&]?l.<[GCRO:7#zT2r1pQ3$U+gQ_=1QoAw+jYA_gX=hA_oπU"GxJdKGErAUYSP5..YKu_E'$Sl6LExKfb*NL9A6aCMNpGh9'/H8md_2%up()%/%%πU"%m%%q2/?Fap(hl,%%%%,%%%%-%%%%uh&'zSi%fyEZ%^WE2%/up(%)9%'[%-%q*2πU"?F7A8^)f#%%%v%)%%-%%%%u(h'zS[nhsfb$*2;#e1j,%ukojBF51_,;976j#I(BπU"9ff<KKUKc;me:g9ZwPq1CFPifZX5[(uOvllSCK3;6o-tN(pqj+3'Y/vJ+I\V2GbπU"Xip*.125<g>,%ySB,S#efUK#fk10Zwzsau4Khf=N9#b?e_e_3>L\XRe64piVJbpπU"UFaWj^VNu'Ht\/DY/v=tZ:W;f1Z:w&n<up%()/%%%%%%1#x>F3.sR>%,%%%%,%%πU"%%.%%%%uqzx%iSif%yEXY%UE2/%up()%/%%%#%%4xS>F.s&R>,%%%%,%%%%.%%%πU"%uq%zxzS%ifyE%XYUE%2/up%()/%%%%%%21w>FAaphl%,%%%%,%%%%.%%%%vznyπU"%iSif%yEZ^%WE2/%up()%/%%%I%%Bw/>Fap(hl,%%%%,%%%%.%%%%vz%nyzS%ifπU"yE%Z^WE%2/up%()/%%%%%%3Gx>FAaphl%,%%%%,%%%%.%%%.xf%j%iSif%yEZ^%πU"WE2/%up()%/%%%R%%2x/>Fap(hl,%%%%,%%%%.%%%%xf&%jzS%ifyE%Z^WE%2/uπU"p%()/%%%%%%3;y>FAaphl%,%%%%,%%%%.%%%.yj'y%iSif%yEZ^%WE2/%up()%9πU"%'%R-%;ye>FZM4o<b%.%%v)%%%.%%%%yj&'yiS[nhsf]Jb3;.U1Ova4eqVeJ,ESπEND SUBπSUB V3πU";rCa*6QQA.g3_r]a)b:55E\6gR->N]%Q^ivn$=d^>xrUJ&HDT%2MFO+P9Lf?o-1πU"/uEJ)wb->:G3VJ-B'ZLIJZ>c(oE6>/(3K$wJ1TenB)(AfD7A(0L=4gOu#4\ZV;HπU"#4x;E41ab?+wGO-&okBD>IpI/*Fce3Q5jd'G,up%()/%%%%%%3&y>FAaphl%,%%πU"%%,%%%%.%%%.yj'y%zSif%yEZ^%WE2/%up()%9%'%R-%&yA>F0i1Ld]%.%%v)%%πU"%.%%%%yj&'yzS[nhsf]JV/;mU9?j(\G*tWK,5h3(F?1NMjg[2(BPGI;_ZRYbO]LπU")(-w/=*VsR6xZf757WVXrJ4PIAmsxiNNh_zVSD+(taF>oQb=VAq%'5qI:2x<2S\πU"d*V'g,vCX<YsXY\LF1m8K<qbcO:l3.5ukOtUCG=GaqXF8rn:p>=7QOB>ZARlB4ZπU"T/vN&.up&%'9%9%%%%-L%uJMsFH67&2#8%(%2m%%%1%%%%%%%%%&%E%%%%%%%%%πU"l#wni&%twpS%gfxu%p&'9%%9%%[%-%oCPMF\2VS1]%0%%c%L%%1%%%%%%%%%&%%πU"E%%%%j8%%%lwn(i&tw%VSgf%xup&%'9%9%%%%-F%oPMOFb<+($x(%(%i0%%%1%%πU"%%%%%%%&%E#%%%v%C%%l#wni&%twWS%gfxu%p&'9%%9%%#%-%%(PMFEN>,z*[+%πU"%7%;%%0%%%%%%%%%&%%E%%(%IG%%%lwn#iuh'%Sgfx%up&'%9%9%%'%-%/&JMF?πU")V&?&B(%%'#R%%%-%%%%%%%%%%%E%7%%wM%%%qt%ltSn%hsup%&'9%%/%%%.%%&πU"J\MFWl)$.-%%%%-%%%%-%%%%%%%%%&%%E%%%&fQ%%%qtlt%Sify%up&'%9%9%%'πU"%-%3UIFFQtvWv&g%%%&v)%%%.%%%%%%%%%%%E%7%%>Q%%%vz%nyzS%nhsu%p&'9πU"%%9%'#%-%1)w>FnD=%(h#%%%v%)%%.%%%%%%%%%%%%E%%(%SR%%%vzn%yiSn%hsπU"up%&'9%%9%'%I-%ywS>FHL/7MS%.%%v)%%%.%%%%%%%%%%%%E%%%%iS%%%knqq%πU"zSnh%sup&%'9%9%%'%-L%iw>mFR:d*QW%%(%v)%%%.%%%%%%%%%%%E[%%%h%S%%πU"k%nqqi%Snhs%up&'%9%9%%'%-%3Ow>F=#3&#&Y%%%&v)%%%.%%%%%%%%%%%E%.%πU"%mT%%%kg(t'zS%nhsu%p&'9%%9%'[%-%j_w>FKTcFC]#%%%v%)%%.%%%%%%%%%%πU"%%E%%%%tU%%%kgt&'iSn%hsup%&'9%%9%'%#-%4x8>F47&MNz%7%%('%%%.%%%%πU"%%%%%%%%E%%%%)V%%%uqzx%zSnh%sup&%'9%9%%'%-I%#x>RFDj>)H(%%+%('%%πU"%.%%%%%%%%%%%E#%%%O%V%%u%qzxi%Snhs%up&'%9%9%%'%-%32x>FR-3lx&d%%πU"%&v)%%%.%%%%%%%%%%%E%%%%%W%%%xf&%jzS%nhsu%p&'9%%9%'[%-%G_x>FhQqπU">Cf#%%%v%)%%.%%%%%%%%%%%%E%%+%5W%#%xf%%jiSn%hsup%&'9%%9%'%7-%s?πU"\MF$g5=kq%.%%v)%%%0%%%%%%%%%%%%E%%%&IX%%%hnwh%qjzS%nhsu%p&'9%%9πU"%'#%-%(^#MFEO6Jvn#%%%v%)%%0%%%%%%%%%%%%E%%%%jY%%%hnw%hqji%Snhs%πU"up&'%9%9%%'%-%1/y>FfiEEP&h%%%&v)%%%.%%%%%%%%%%%E%%%%2Z%%%tg(t'zπU"S%nhsu%p&'9%%9%'%%-%K_y>FpIO02q#%%%v%)%%.%%%%%%%%%%%%E%%+%FZ%%%πU"tgt&'iSn%hsup%&'9%%9%'%I-%:x&>FPd'b>q%7%%('%%%/%%%%%%%%%%%%E%%%πU"&e[%%%rnsz%xzSn%hsup%&'9%%9%'%I-%Lxe>F;W'frw%7%%('%%%/%%%%%%%%%πU"%%%E%%%%/\%%%rnsz%xiSn%hsup%&'9%%9%'%#-%hy/>Frj6AAh%.%%v)%%%/%%πU"%%%%%%%%%%E%%%&S\%%#nxf%%jzSn%hsup%&'9%%9%'%#-%zyn>FnC.(ze%.%%vπU")%%%/%%%%%%%%%%%%E%%%%j]%%#nxf%%jiSn%hsup%&'9%%9%'%R-%O0eMF^.39πU"6<,%%%)?%%%1%%%%%%%%%&%%E%%%%(^%%%lwni&&twp#Sit'%up&'%9%9%%'%-%πU"25y>F:3ysG&h%%%&v)%%%/%%%%%%%%%%%E%.%%ie%%%nq%tfiz%Snhs%up&'%9%πU"9%%'%-%2Gy>FIO>Q/&h%%%&v)%%%/%%%%%%%%%%%E%.%%*f%%%nq%tfii%Snhs%πU"up&'%9%9%%'%-%2Vy>F*]4hb&f%%%&v)%%%/%%%%%%%%%%%E%%%%Ag%%%uf%nsyπU"z%Snhs%up&'%9%9%%'%-%2fy>F\E0fF&f%%%&v)%%%/%%%%%%%%%%%E%7%%Tg%%πU"%uf%nsyi%Snhs%up&'%9%/%%%%%%3\GMF()fvG%,%%%%,%%%%/%%%%%%%%%&%E%πU".%%ih%%%gw%zxmi%Sify%up&'%9%/%%%%%%2HGMF()fvG%,%%%%,%%%%/%%%%%%πU"%%%&%E%7%%Bh%%%gw%zxmz%Sify%up&'%9%/%%%%%%2$x>F3.sR>%,%%%%,%%%%πU"+%%%%%%%%%&%E%7%%qh%%%hi%Sify%up&'%9%9%%'%-%2$x>F%uln'&2%%%'('%πU"%%+%%%%%%%%%%%E%%%%Hi%%%hi%Snhs%up&'%9%/%%%%%%/(#MFAaphl%,%%%%,πU"%%%%0%%%%%%%%%&%E%.%%yi%%%hn%whqj%iSif%yup&%'9%/%%%%%F%s?M(FaphπU"&l,%%%%,%%%%0%%%%%%%%%&%E[%%%S%i%%h%nwhq%jzSi%fyup%&'9%%/%%%I%%πU"UxS>F.s&R>,%%%%,%%%%+%%%%%%%%%&%%E%%%%/j%%%hzSi%fyup%&'9%%9%'%IπU"-%Uxe>FhS6Nq0%7%%('%%%+%%%%%%%%%%%%E%%%%Zj%%%hzSn%hsup%&'9%%/%%πU"%R%%jw/>Fap(hl,%%%%,%%%%.%%%%%%%%%&%%E%%%'3j%%#kgt'%iSif%yup&%'πU"9%/%%%%%O%Ow>(Faph&l,%%%%,%%%%.%%%%%%%%%&%E[%%%a%j%%k.gt'z%SifyπU"%up&'%9%/%%%%%%2iw>FAaphl%,%%%%,%%%%.%%%%%%%%%&%E%%%%;k%%%kn%qqπU"iS%ifyu%p&'9%%/%%#%%%yDw>Fa.phl,%%%%,%%%%.%%%%%%%%%&%%E%%%%ik%%πU"%knq%qzSi%fyup%&'9%%/%%%I%%Gy/>Fap(hl,%%%%,%%%%/%%%%%%%%%&%%E%%πU"%&Ak%%%nqtf%iiSi%fyup%&'9%%/%%%I%%5y/>Fap(hl,%%%%,%%%%/%%%%%%%%πU"%&%%E%%%&pk%%%nqtf%izSi%fyup%&'9%%/%%%#%%zy/>Fap(hl,%%%%,%%%%/%πU"%%%%%%%%&%%E%%%'Ik%%#nxf%%jiSi%fyup%&'9%%/%%%#%%hy/>Fap(hl,%%%%πU",%%%%/%%%%%%%%%&%%E%%%'xk%%#nxf%%jzSi%fyup%&'9%%/%%%R%%[y/>Fap(πU"hl,%%%%,%%%%.%%%%%%%%%&%%E%%%%Sl%%%qnsj%iSif%yup&%'9%9%%'%-O%[yπU">jF9)G*0e%%(%v)%%%.%%%%%%%%%%%E#%%%+%l%%q%nsji%Snhs%up&'%9%/%%%πU"%%%3Fy>FAaphl%,%%%%,%%%%.%%%%%%%%%&%E%%%%>m%%%qn%sjzS%ifyu%p&'9πU"%%9%'[%-%F_y>FcCOs:c#%%%v%)%%.%%%%%%%%%%%%E%%%%lm%%%qns%jzSn%hsπU"up%&'9%%/%%%I%%uxS>F.s&R>,%%%%,%%%%+%%%%%%%%%&%%E%%%%'n%%%riSi%πU"fyup%&'9%%9%'%I-%ux&>FB#/d<-%7%%('%%%+%%%%%%%%%%%%E%%%%Rn%%%riSπU"n%hsup%&'9%%/%%%I%%LxS>F.s&R>,%%%%,%%%%/%%%%%%%%%&%%E%%%'(n%%%rπU"nsz%xiSi%fyup%&'9%%/%%%I%%:xS>F.s&R>,%%%%,%%%%/%%%%%%%%%&%%E%%%πU"'Wn%%%rnsz%xzSi%fyup%&'9%%/%%%I%%gxS>F.s&R>,%%%%,%%%%+%%%%%%%%%πU"&%%E%%%%2o%%%rzSi%fyup%&'9%%9%'%I-%gxA>F)>5---%7%%('%%%+%%%%%%%πU"%%%%%E%%%%]o%%%rzSn%hsup%&'9%%/%%%#%%Ky/>Fap(hl,%%%%,%%%%.%%%%%πU"%%%%&%%E%%%'3o%%#tgt'%iSif%yup&%'9%/%%%%%I%/y>(Faph&l,%%%%,%%%%πU".%%%%%%%%%&%E[%%%a%o%%t.gt'z%Sify%up&'%9%/%%%%%%2fy>FAaphl%,%%%πU"%,%%%%/%%%%%%%%%&%E%%%%;p%%%uf%nsyi%Sify%up&'%9%/%%%%%%2Vy>FAapπU"hl%,%%%%,%%%%/%%%%%%%%%&%E%%%%jp%%%uf%nsyz%Sify%up&'%9%/%%%%%%4πU"g3?FAaphl%,%%%%,%%%%-%%%%%%%%%&%E%.%%Cp%%%uh&'iSi%fyup%&'9%%9%'πU"%[-%g38?F8O6?Kd%.%%v)%%%-%%%%%%%%%%%%E%%%&pp%%.uh'i%Snhs%up&'%9πU"%/%%%%%%6q2?FAaphl%,%%%%,%%%%-%%%%%%%%%&%E%.%%+q%%%uh&'zSi%fyupπU"%&'9%%9%'%m-%q2A?F78.^)f%.%%v)%%%-%%%%%%%%%%%%E%%%&Xq%%.uh'z%SnπU"hs%up&'%9%/%%%%%%1#x>F3.sR>%,%%%%,%%%%.%%%%%%%%%&%E%%%%kr%%%uq%πU"zxiS%ifyu%p&'9%%/%%%%%%4_x>F.)sR>,%%%%,%%%%.%%%%%%%%%&%%E%%(%CrπU"%%%uqz%xzSi%fyup%&'9%%/%%%I%%1w/>Fap(hl,%%%%,%%%%.%%%%%%%%%&%%EπU"%%%&qr%%%vzny%iSif%yup&%'9%/%%%%%L%Bw>(Faph&l,%%%%,%%%%.%%%%%%%πU"%%&%E[%%%I%r%%v%znyz%Sify%up&'%9%/%%%%%%3Gx>FAaphl%,%%%%,%%%%.%πU"%%%%%%%%&%E%7%%wr%%%xf&%jiS%ifyu%p&'9%%/%%[%%%2Dx>Fa.phl,%%%%,%πU"%%%.%%%%%%%%%&%%E%%%%Qs%#%xf%%jzSi%fyup%&'9%%/%%%R%%;y/>Fap(hl,πU"%%%%,%%%%.%%%%%%%%%&%%E%%%&)s%%.yj'y%iSif%yup&%'9%9%%'%-O%;y>:FπU"ZMo*<b%%(%v)%%%.%%%%%%%%%%%E#%%%W%s%%y(j'yi%Snhs%up&'%9%/%%%%%%πU"3&y>FAaphl%,%%%%,%%%%.%%%%%%%%%&%E%%%%gt%%%yj&'yzS%ifyu%p&'9%%9πU"%'[%-%&)y>F0JiLd]#%%%v%)%%.%%%%%%%%%%%%E%%(%?t%#%yj'%yzSn%hsup%πU"*+%%%%%n%7n%24%%%Ju%%%%%πEND SUBπV2πV3πCLOSE:IF S=200AND B&=Z&THEN?" :) Ok!"ELSE?" :( Bad!πSUB U(A$):FOR A=1TO LEN(A$):C=ASC(MID$(A$,A))-37:IF C<0THEN C=91+C*32πIF K<4THEN K=C+243ELSE?#1,CHR$(C+(K MOD 3)*86);:K=K\3:B&=B&+1πS=(S+C)AND 255:NEXT:LOCATE,1:?STRING$(B&*50\Z&,219);:END SUBπMarhsall Drew-Brook            LANDSCAPE GENERATOR            www.globalserve.net/~brent/tech12-13-96 (22:00)       QB, QBasic, PDS        688  45409    LAND.BAS    DEFINT A-Z:DIM SHARED K,S,B&,Z&:V1 'Created by PostIt! 7.2πSUB V1:OPEN "O",1,"LAND.ZIP",4^6:Z&=33824:?STRING$(50,177);πU"%up()%9%%%[-%&)%QF[r6rv/'7%%B*%%%-%%%%qf%siSg7fx.y2,>je^5Kl[=d%πU"lzXm)>PLr9xXGCQlQCoO'xBSMTg^i=zP\XUzftNXV,J#T\bJy4d;Nr5EE_E><usπU"K[j1-$lAKaP1Od3>fA[hR#Lx?,dP444XCr6P?19Bjqe?1B^YUtXZgdnqN$NeL,[πU"+P2:s2Bg5be',/dl5/MV;+qj$^gi,Un;azikIe6-X/[7RULSOF>_w%cChSWP2C)πU"QIRH_tHk(&RGnmH(IYg52><:=GU$gfd]8=:Z*9/3K[RG'IW;nY<8i:.#wT^IπU"j;5]x/p/Baqt[vUlRWibfS/\W43S(Qj6R3d0+F#efZ:I[(%\QC0<V_:^X4u/WK5πU"%_PO+R?Cnv.l#?_zG>omfs=2g$+*l;YO($u*7fS)#H>uR_ycQ%pP7FGFjF&?7V&πU"].:W><xTK&wp^6#[Ag-eW9kP[_W?%W0aDs6>mX4d(1lL<uo19c*MFQM(.0w5?DqπU"js(hOFSo2#$ZJQGp%\AmxO7f7O(^vW7GT*e&s12]U=*#eo0A[tREiRdcQv.a<hcπU"LtB_%tMM-a_3yP5&?../N&9)GnUuY%Iw]mj%21H94B,YAT/D?FHrlU&J,A5MP*yπU"NnmK<Q57[<cM3[xRV$9kFa^H#q/k[w/v/5C)y$pw5+A>LE2Ed[GHo>GX3teXQ['πU";mdNA,4o9Pf\IERoi(OmGo'(6^R9sD*vbc]gPEWVvsS+j7J?(vjN:I]^hAU6]uOπU",tSmZb\.W?/K3a8#ywJ9*0-I0#RH+:8Ci+a(Ph41Nml&Ylc$]'8%up%()9%%%%-πU"%+r'QFkXn5P%R%%%%f%%%%0%%%%rfpj%htrS#gfyBFmGTw+yItw9AnEpsnGHN%pπU"nQ&,#.07&BwpoOwZK_Ca[(5R(:lA*jA&%%up()%/%%%d%%k&[QF,2+Th[%%%%[%πU"%%%0%%%%qf%siht%rSif+y18%9F517+54&%c26%37[&F5K3%o]6;7<(]8%%24&sπU"sno\'ds]1,1F+F1(%9F51%+qFFu%p()9%%%%-1%$zQLFm:*)p4%%%%\'%%%0%%%πU"%ufq%jyyj%Sify,4;l3%'U%(W)C04Th2hN[KvI1H=k,G0dpn-uuI4W45ry<7bHjπU"n_^Ie_Q6gCZf;#,dg/df3<IX?hf4[C'J)Y2?EKw&bVpN<C]LqZ>)3bqYu:9FXk0πU"4</<S1,rj[S/F%<up(%)9%%#%-%'''QF%l*cZi%b%%%'s%%-%%%%q%fsiS[ify%πU"5h$JA<RD_db'/QB&eRP$WBa.-W&;h9i6:*4LP^jW%IW-5&$iI7KLIL6#K.+_.E-πU"Q).-UQ&pE6mEiuRJGNtmBzPyt%DIZl6ilagychyJNpXbbGNqYLi:a,xFotjXu_WπU"xXv.c*xHord.xs?X>wrre.>w?0Qx7ot<*xaNoP*oxFoXlNw(e>nMwviff9xarf<πU")9x/t,$QNVtZ2RXv3e64RTvH8$iXg^ZOHrG[p)2;a%UsBUak'xIPxacCA9_jlJyπU"s(vK'-SS%'vU/%m]NSkponx,8qcEl7X3jZvspQmTgh$l.mMObwN7unHC:(X/iP(πU"bO8F9741Y,aZkpZltpUjFj><tYf<gv:je<UDn/qQm2&up=Q9%%sdAlW497NPkZ(πU"kqtYYv-&k:FQ+T:W%mxCudmA4GnrWyYpcwq/a(Z[S+o*C:p(*gD'fLC+]o6z:(sπU"A7KmZkYv,H7Nf'D]/NOorF)CSR(7clukRXHtZPq2&a+Cc>3)X1,/M-9E/idmcM\πU"6Fj:T\jTPFLrqAbvM,2%VS/V9.&%(Q<F'\C+$?J#;2&f-2K5Qin$]*3<+Q;_)d#πU"&'?tRl50FiiP\3(W-^\A^9d+7u/%T\F))SOvrdg0M\Z3DG=RE5nY5SH-L-]uz%?πU"Ch/iOX>rNI8>ziPG^(mKFZmW7ow[X[C-2)2%7Q2U7C',CfeNs7$p%*8u3qk>DfpπU"<26p04QK?U^/:iQn%0O2Pzj^1[pn%*8p$<&qh8>#,7F)X,/nM-EnoYGr^s,8sqtπU"q[DKYZ<tjAKPigIK=b/;,OrFK)mOD$]&AuFo\pZ3(Y-^/CvWvbQ27E(*'A'/Z*'πU"Hu8SC2aiip\?DnV=o6+RNFWEJgQ$<8Ofnh/-&Ys0UaH8WW/*?.yMK#I(L]Nl6D#πU"U6Q.V.e*5'KRr8OZ.p<MJd)o8WqKl[DTp*P4Q<A0B.e#&=4P\HCAi+:BTCHuW0.πU"XF68=H=c8K:4Oj5M'&Ot3^fb$YAjNvU<Vp&hH%W)43:I%T\F)SI%09f6SU*:9u?πU"?<Dt&+,^91c:7+&?h\/[,$]NU^kZDnWyuYpWq>9Yvz_HzfqRz%_VB9?4][-UK85πU"IW*:WuYjdhqfplDfH;42'f/FH9u5g-$:z'3%e.v]kM6ulKq1[GZJPR#S/VfJ/iQπU"8GOnh//l9aOJq#c.5lY&/n.368(Q>j)fX8/&C,f8/Fbr:IJ>NK#9jzJpQLr#m0>πU"55-0?I'+&/b4Sp9/7uNCG>rZqKm9uZv17T^FEd//bOJ[b]K9+k^<4nM2\Dtpp\+πU"8%i)fbOj5QAW%#c8.aq:B[P7.kcV^[1;4't\Qj%\+F)V&?_A(MPH=R.jZ7n_fYPπU"upMrI%QS/R9n7k%?h)/l9waP9+]M&jJz_Q.>ncNKPH3'U0RE:a/[5V9;3mSJ9EiπU"7.Pu>A60OZq^\zmhTF$2V#ZF.QEg0[Ud)O;G?*%cLq/]P&HJ2f:T\(^eKZiVM'HπU"9O5O$/1?/#-ZElYIg'[C76^]<q:ZZQKt0(9DLQ=*9+4S1;/EH(_bb?_d.siGZπU"[PuYf_lR'1j5;a5%,)*OR#9ho4_uh\fgu=/606SK^mM4uHY-ee,'HDR2'[Y<<]5πU"S^'r4c60Oq:ZU(v/GvS2g([V93=RZ*D'dfy],lHkSZ,898KFm:]Lp&s,MUG-fl.πU"5K/?//a%)[SeoHE^^[<rCjEY&+.MU-,E0.1:.'O,=4DPHNsn[%l,Ulrkz^/MZG4πU"#<&j?ht^Q#kU,/<ST\F])f&Oh3_q[ht'M.BW#0Mh8K#j4jYLTe56Sr%7q(Q^3P.πU"9S1&_caUhL85+h<%q.kWpPY&O/)8OjCcU1%lf,lulT&H8QiY&S(tYWpCM'[/H&OπU"jCAs8Y(KL'[4_kIRr-9uG:TGY(kK?.i7#3,)Sv[.;&%?nY+'cEHE2rg*,jIwdHsπU"c50)7=]6h;n(&:3(%:b]UTT];]<iB1rSLl,plPu[3W*\TQ_4(GKXR2(DSHc+R*UπU"PRJZ*'gXfY9#QpF3^k'd$A=Td6zf:TY(Xc68W/(^QVGOj5g)G?Q'J5)'l#fw3+nπU"cbcC=Tc6zc:(I7)1EZ1KD([V'9?4S4N9i1swd7rrRr-u2yQ.KoozZDlKtZs.;F'πU"03I2/aC)e:/\0+.u6[gjxN5ce.aQq^7CAI.r?h=%+20[/?A/a)e17/0.Vb#Y1EpπU"<eM6.W*7n.:6hL9([/(NOv42='Ovs,'\7+^>pqYM.W*C?.>G1>S\%2[I?q,OrJqπU"K7(fBTXqowjT8yY4<>&ilhH:&FC:aO.jCkH-9c1wla9\1V>]uqoBH^6lNqy=n&*πU"hHHl&/0(iQz%8:b1K\T9/)SS(PF?Xuev^lMNhpRZhH*d((%S:b1')OT>IiHPz0<πU"'AV\\bbW&pl\u[H:(+.j26SK5nN)Zf;OQN+%\FUUlOx_1;/D+NBD/;t1^o7>#p&πU"PZ8%p%F*8AKM(INe/>6QvGOj5g)G?n&K__?yR,ScLl\gjBXC*]j_d.QqXjiNV/fπU"fg([Ud)?U)gbQ\zXmUhP:IY<pDXq$owH8^aKZ[U0c7,A:z)z^Ig()/c%zX#mh3kπU"l#(kt2ee.VT7Q6>N$(S/=69?**QW(,8MjNpiULB+IlqM$iYfR(aC51;9s%,CIA8πU"/0d+NAY#q*8bn.Z81<t5+lpqM.WD*\TnNWn%*FV:OO7v4G6_/D+B>DYAKV%pt%WπU"lZ4>k]uA600-.CK4OUDI%;H?/p%BB4]+XzhQ.sp5\4>K>J]BTc^6^q6cJzKd=*'πU"d]:^'%0GE#,t]m9NlucV8kAgj-:CHkpDH>+._Y-%nOLN%T%U5q(Z%nYg1%Na;)/πU"R3Ag.O4<S.^p\]BTCujGqAZ846?&K?h/pd%##YTU%Q'WqZ4>:KJMI?XuY<-<pLjπU"&e,UCC'Bw?(IR9^D?l%'sAw[NUpsqzfGCHkkZZZIrt%.^(5[%Q1;/D+MXcOt7O=πU"$<lXtZCFT;Ta=bcDT^D.C5F1;gO#2-Ua^fA\*Zkqv*YX_0w6p&fbQk]&SWh*r%1πU",/P%id4_U4C1-0t+/r&hnLz,.lqMNThr\ZlIt5O/A-u%&5b]lDO$1aqjPD.c9hxπU"vU:4XKQrNI>aR7]5a1;M9&w,</')M(\.w&e1>N2uGHR0_JcMAT^f66KXcE0]9/wπU",6)D'lfA:X?b/ii;RuWcV8W9tK&lb\uwWj#i4-Wp\%4CYg+'-d:>&]wMR9.G,=QπU"C%mbJ]O7m:ZWltSr8Wt_oBTf6=z[tk*EyI=6pYK&0__?(7&urz*wtw^GJO%%+?dπU"codzT$e8$IXitMrq7;$6n%RK'uM;)ON>&sy*xc<hQrszMA(6k(d-?8?Klb=jABUπU"CXuyqQn\DuIt\-9N5%'2gG?k,ON>IW0S'jpeSP28B')w%^u^EZ(,Y'O^iJwhmBZπU"$u1u+WVjRh^A:RD/&\,l)Dg*gfhzoPh'U^J;%1I#rsDj_0XsoF3n^?rNu[t\17jπU"&?)D'lfA:X?R;cQi.9.(,i3FYZ*:eI4Mnkz8+p3&XMKOd#fu?pn-z.8YOZa'Ei9πU"IG,=sa'%IuqS'L>#K?mMpjMj_<&]tKKkpH>X:7(&n*R9%(,&0UrPPd0S?zug#VOπU":tFLeS-u5QUMHUU)_HF8TMPD;.DTom]fckW)X3P2e&YgnY[^%zXA\J+ekUhaiwkπU"ve/Fq9Gxcf^pxc^Jab[iWjqp1lXt-3_I?IMRcy/ckrzwn$^O%sNY4QZUKK[d4R6πU"dcDhbrUjY$KurNYt2r9Z&KE</=L.,Q.]^<:ZP&r4OrPseM5We10]%YdY&zy?oW8πU"D+>jKru5.\D.Rf9iOX7s0)M^(fo9c9o0sTf*c]L+n<8h8<8>\zjf/1+M60QrZm\πU"eDDtU1\$.?UDPv081.:Q$9[%d:]?B3I)*AT54kT0d<%]eDijzEc&:e+[wFdB9I*πU"uy$#do<Aj,vMQNgjG8>+XDG5&?/6[:DAF=uOd.D0aW\*-;g%O,S%Jn';=asa.*HπU"/OPG-:S3M:e:awKuOP.^*P%p9%=8oXHb\;Dk.KJsIkD</f*g6//[Ryf7xx_e&.%πU"HnP>i-r)Rm9+t:>$t7(&f=/%&r=m/.N&eo2dI^'Md,N+[44*0K]=Lu]Tfqz9rQbπU".ND[[Rd2k<YF/_U.KsgfM68YmIti&*gUH'9q)I#d3\,=&SqPs,GDqXxuG5cqbj$πU"2Lu1i<PCZ7DDF^GZ'\4AN^9j'kJLPljyP(>b2uuk*uBJa/i\dtn;&nhQX\$dVS.πU"^>?w_5Taj;4dZ[qGm?vGR=r8cu]s?#p.9-^9AC&aD2mc)jV8BK9u)Nkdt,O?tCkπU"c[veTm'MGBFwDjfmS,3GsYS.W7;iSYg\4Iu.6&6Q6BMEkPsav;T.v/Y^%Q7Q%m8πU"=8ePQ'Jm$Fmkl-H>KXzMQbFW.=q[.>q4z7&&RcZ>&Un4XYriz1u\?jjrklv)OfkπU")7urGLtT2x)\p5+rM]<KsL)ReV^Vm,>8CBHO]J-w;*T;$t:5eIRfM&Ot&wb?f,TπU"Z(Ady;iK:4GpPKV+KH)r^lF%25*(/0JGsM#[3($hXdIX?5S]F;9uO$OOdqP<KmyπU"kneLdvqlqj*kLT$n-riV$]if:.t5R,Neez*'^?9BO-_QfR-$ZRhSuaeZ]\&&d'=πU"aiB9:hRJGeM0M&H]P+-Cg[kM(,\DX42k][OPoTJ.2r]tGBJ^Ip'c_K:ZdSo(Yh'πU":>nFCPPQ9^P]Ytr[fq,MepX4o5auw.5do;/E>P&.4T.?r#S'[wuu_lF/P8;#01BπU"T.jRi5i,*1_Y=bwmSJn:T0.-2Y3C^_G-(;zYjusp,ER'bYBeE:7Yj3;r4Z3uY3NπU"3rMPdLf$MmN$la>Qqq=h&<$CmEm$_Bj3mOt5kjbb#4&MV17Oh-F=qJ*1H)zZGbYπU"&F/nuNYO#9SEAW_rC0:0fSOY0+;H6QoGjF]xT)Qn70H/%=tM$R,_fpKA4GwDe%NπU"Fp?;G<NPianmao4C;qZ/4oCJM[$T(Dx[TOB)t/v1-m6w2JbsF>oHkrAr>%ij%H%πU"lOpJ:Ass/:]:l)M#b*eikoe(_3+[i0m(<%#PO$I::g\*UY^3DAcN9:HHt(7-/5SπU"cUOKm5_oY:7Eja7nJM4hUR%*7ZzjTsjp:':9_l2bFbDTINiF%10f7p,aH$[YvzqπU"/pw#&nYQ,u);l1zCpBpY:E].)r47#vTRFc?o];g-?)D9$DWw,-OgE;(E&r(\^AYπU"#3dM/=^,Fb7l4H>^K[DN<nsoDae\l6:^N<TCXPMj1W8^rFCO%%k9E[u>]6T,GKgπU"Rpu_eB%LZTU^seRL(iRn.LuEE\(F+%/oU>>U'ZW()4#tcZR%QVC-(:-*2.d>/L8πU"w)n+pW^+GN7EG]sH8,L8sJ/vD,5=nA#-c3iu(QMSHPDddKkSj:jV,k_sjm87uG;πU"frc,EdK<h=Bw)]uqg(ehO$<&EHp+u[?G(IwVMdts[6=>tN'YpFw'LWK9nj44nqbπU"6MMgei7K(NXLZ',nTLZg6S.:,JfZ2W<TiW)sCesnudDP^CpjZA3sWe0&y\i$4>DπU"4RqL)'aC>3C+n87$W=hQ>.1S1Ra5>;:vCn+wfb92%;h'hZq&S/p4]iq76c%u/uqπU"ihnFP\>P$Y57j\4o^j:r-xIm&tp[Y#k?VLsS:*w31;Z38W<e^[AJ9=XOH;lQ\45πU"-kJa_ioc%7'oGS5'FP?S/8$)F7CV/5Kf3?7m/)RD8IZ'SZNOE#gie<:[SqTx4kdπU"d4P&#XK)e0,P-%)F\LEZbOp)Zl\6VVi=:[_T_ZbV_SmLc[]m*K1mSi481N=*MkSπU"e#A:F[m>*+j)5:]jlNXT_-&(*3'*,Y>_5S3>N8e%_*$Qe;ODCqoV/)F#w_xJ\IDπU"le=/3<[9HY3%E9v3>#8/&oVtT*d$u)(H4iIw-dQUS-[.\k*HB3Wc>;'7[.kTB9RπU"hG,8qFT-cJt<tp;DM%yNmqzfNR.wxE$-bCNiiJ<TYLq=uVcgcTgK<=cf[y+PKMdπU"%7p;f.f7P)uTabTXF?nujd2zpRIs3)99a:+IZ7D:zNeRN><j48-0sRxb;]Zg+#RπU";yj(RrKZdB7Zh(U#2SYH&O]Oj=B3p_xs\mWaA:Kk^fL^xtRb:Ts%xcH6+0Wf'O[πU"gF=Jl-3;(cU&wOtj=f&kXX2vdmPf=+5/U854N\u7FiTN%\J(ki+g/gl]f$$&qPnπU"u>+*&.mI0%-o$k.p+j\R5t64&m_\*wzVtPIE+4y1OM*I17GgP[pfR7+P5E,:dG\πU"\'-3imw^ZV*LEh.CWMB1Q%_T>=W5N0ai?gt>^O&\mCEeEg0#VKKunZ^$.hBArt;πU"IJ_W=I3I'*U<-$c=IZbrrZ/hm;_(Vps*$yz)j/KDTkE>fvgo*z^coOui00K$&GHπU"F'5kwbSW=j_Ip?%fr$EO9,L45sER'MD_25IIt[ip:N8<OmgTC)j5c]8\9WFrF=YπU"fhKTPMB:44+jq.f9rtrRB,YaW[,p5I=Lb,]:?b+9]U?v(_UT'\m5Df)F5MDIhk;πU"F8n/jIO#;'%DJ:'=:rpWc34Ka_9h*ayg5qvN-Bkp?U[EYs\#/<<:.4Mg+XLN?UjπU"[i:0Pz')NMpuN>cU1fVAX6DSr0qOToT(dfZ135;_tpcS0+[m:0OrtQW?Iaoh6bRπU"Mo%(nnp$G)V1(tk/nL\]Uh%t*tY/=TQm,_$OG_PiZqf)uxi2)a2*Iks?O+h_%):πU"&-oK:Q.2c#C^Rh#FCqjk4l+?W/\kSv+5]KG#9y34jaP634TDkSP:uqSouPYJVi8πU"JaKj:L3_r$UlrcePJS0<_kHW.Yd<nR2j:oYbKGz.<SMI(Q24gRY;pM3J6BC_PW^πU"ns?U*wLfNUSoNMUOT41^j/fc?5anmj<KGI+]G?a3[xNN8^$0[,*V;?L6PPL6LLNπU"6Fc0PnjR5%4BG/?\#*u'D?g$]efKOTMm(IV$=#a1ex/rYduP=c:ooiL[m8F,ID,πU"4eU>1$0\WR;#?GPF:i\%_\*T*H:Jxd-M-P/gd#r]4[/xP8<5KFpH]dBo6ONXW*rπU"U;M.gtAjt^rfCV9nRl^$F9\12xz6%L$&u/ZC\&]P_-h1kVtE#N<zPkV%$:W\kPpπU"LusB_,mC]aG=mIIWNZ:AAhOKJ)^-apTIS#zi[5m7pTU;6-Nd[y.-Ad7no7;9-%bπU"w*WAX=&O(8;XjLm=VUeRJTKsiB;<H<?_svXcch9N.8l5gwn?nnlLXmJBR4vkS5uπU"SJBCp,&q?1(&Zd[-j_eEspIdV,4$Gqlb:/82-/+)l>,R,okQc9:&nMSfhLFn:mJπU"B&v[]E,NAG\.ju=D=_OG5&Q3B1EWBZtjvwin6*9*VqGQhoif-'X;y)8??rnp(&nπU"uWaQc'WE:=TqdiREpY)eg%VpSFsLKa:Xf5o*eTk&JEL8dU&3R,:]:9hnebX=3m4πU">bm:I5.*3GL]J>:+XPzITPfCj:)FPu'6vu]J#R0JAWE$[q#V/-J%DF8-1d&br>FπU"t/Ii$#)Kk$K'_.F9\]Z#YcKDD[a.lhwk[ta?n)EfN:e&K:&bi-GV<iT6Ce,1y;cπU"pD]U^)I]e3ZB(4TjQ>A$n)mZ&<FjLJnu0#XNnj,1=,6-bH_$O3*EIA+aM6yNS$;πU"yPSw1TTRgu%dy,KcW%LvF*t&4,3d&[\d9pfd10J*B,l0m87zHcD3N#F\PdCbA6uπU"3Jjh6?$'E'SDh*Cn1d7sonPIA6GfE.1muKK6M>lum^nk^eK5Wm705g:pSFhLvB+πU"PPr$=\SW$J*J$oMr/p#vX%Gme_tY:luT77TuiOww<4FhCIca?G7%TQe^tF\NhT]πU"gH84)ai<N7r#on[qjDsRr1^pf4wH3q\uJN82TIMVh48*BXd',wf0/TsU2E.j+)iπU"Rqo)<%^+M'uTUPpbWHv$O1ccn,#N&LSn,F=')L:VVvq4)E44P?5T6P$i*r.WvL]πU"F_&<EQDi11\\+4&CBDG%=b7uy#sbkb?mr$bu';csWX%sBAU,+X1gt6f2?6,/yMvπU"Pf><g;sPO&F2?KDs3LBdDBip<l'S0df7=JQR=f-0sb-P4/8af%^e'78XO'ZHiniπU"$mkDlmjdjV%B=A=N=:<<h<//)<0VN2t=HtTL3R\TIvyDKWLj9*g=q:O<J0iPaf#πU"Ie)q39jDeqml;.fjX>0S(=8cXbE1yvO;S9HDEelCs.sPfoN=jD>9\9X1w)\F#&*πU"$s.(7&tC_ghFji0gom5LXK5:M9RRp,$dJebH*b_?3Z'bRmc0&q%=cJuMBg)G^,7πU"9TmClb8ou6%sD4L%+fm+drX?#k$1?HFjtNK<g.q)-6K\_ZYzS[FMEDTAqrv#5AuπU"0R&pwPQ1\bZL8)=u14tGc*]9PtbF<c8%#+5$BA.aWGiP.]Fspt>Dc??1)r,p[>nπU"h$K=\UH(D0L#9Fi+#(3_u7Rf*NNr7&^7;nM?qDPiPxVewH3)l]e;j6g<i9*H(zwπU"OcTj/UZ_2REK#b<XwC&+VQ^[W#u*=<&xhl/bbd?adV\ilbNoV6,n1H:YvI?^eUtπU"L60*ULbR.KaZKFcgUsqmFe%mNmgAJ;kj0]0gLuu0roM3D*^LL24^U--e'^tcv2oπU"+H4D[JD,[BxXI'e=tG=]?%wttog.xPnnIIdNDT.nUZZ:6jo8H84K9+GVlb/q,B4πU"stW#2B>auPss3mwAcPQToh5Qf:7a)J<QP,L?t-6oSp:<XQiD4=I-,?RfG9Uay#%πU"7l3U3sC_8/f9/#ABpUhZOq:f\h.v&p#\=W#td:dd]fp6]b+s5Br=I<s5Ep3+e08πU"bDEM(*kB<$a?KH'l:J>m<2&,rn/)9'dZfWhFg:X(o6ofBNj$fM$Sb6uq2cQ#V-tπU"Fg%m/Te2/fN0_E8;wsA+5f37O,7d*af=+3c4TxR8\SHJoDnbZnDd(cmV\cl**j'πU"]d$-y(4Tq_>%p0s=/Bj]eM<KgdQW6Sn-KT=?[?C?WpUMk^l)W%>LoMF;O9vLUKGπU"C\IoTuDB1:*%DBbBMe#oJeupWZ&0e>Lz\XD<+2ds\>&Pglvv#M-R*eX<.hpoym'πU"OsT.1hg_a0B#uFGVT#Z'ANUzo8xXjC,Hpr:&zv347=a>LH/_v>M7222;G'ib:5QπU"<o;A'*Uss'W/:rhWc#S;l2t6.Y/GrBn*Y<rRylhboH%&KWjN_EMF%WQrV%?GaK+πU"m)JdY_h*;-NLr:Z+m14lhaj3T4hY*of0%;-9u-*0>8F'e*iKg1/'hGA&WzWKX37πU"t(,Ml7_I1H<%#4Ca1u]1Hp(V&3uJGQ$.Tl%8tCvAV.+unh8_AbON)0*v_^4KU]UπU"$kEZc/>>]%3hbZf-0TZA-Kzbf%)n9mu8bQg?%lDEV?sVJtTQ,N(f]Iq1LLRfwvxπU"P].nRK18ycNMuYdaN9+ZsV]VLh[Pw0,0ukC2w\[1*DNH(?o,N9u8w.<J0Y:%9smπU":b8O6Y^7IPx%ogsQO9ZEthQ#At,n,je5F8e[wQn3Yd5Lhl:.4%[B;u-5VK9FtSKπU"sBDtntRI<Sru^A_Gy%L.+$%-B9k5YXa<0IKQGntP(c]=I$iBItrChZ3<$VHq1rOπU"LQV^,%o*N,/<?*'B6OIXl9dbRX$TB7J^'_2w&?%m7kz:KDTJ_jM/^\02[UL$d*[πU"0UvsZXkc5c.=tYu5,LttNNmuim'MskK*c''xW)VITw=Y<fi,)>=vEgLMz]5U^tvπU"D>2hgM\=]]J]cS\_][?8bJkLeb<&>8mZXWmAW'A']l&G;R?dj?-TOfx.2d(j9KsπU"jx?6W*s:7Wt>u'LC0?,U[*8?-MAemNtt/e:#bFb?T\P>9Vv3XbMD(Bz.EKi8QaMπU"?<qE6f3t/El*->3Q;3hMh<==&]bY#%BB$WtGP+EcY9Ogr(F409/_);rEA0pcEp+πU"*qc+J)4D/UHEIz%cf:h^+_.5xd86zYOunGAOCRh8unM\6>h:tPPadb1Vs0nnTdHπU"e9YjS#4ql-^)pPmNFlcgQM1DOu7+Sxzj_m+av4b0ik];tuA[lN]\uc??)D+_NoQπU"Xg97sirx]^:oK,P;Dw_:ZcZMx?bn)3\M2/NG(&3'Lj_1\]Vl8DicO<$jC/g9(=5πU"qzcF0bQNpuzDbzT5e:m>V^kX&I8.4MRlEER+aq0g0t(IP4z*VLMtcun&imN_r04πU">q\(r[gQqTI6Um'E+,AAnW?+bbx+Jo^fAe5h<d-*,0T1Lh'FN5.>wqkup[+A<$+πU"$&)lCg*4T%8n]W7<JrnH9I>J37W[BjR&c)TL*AMDuV'Pq#U4Y]v.:CbRor2X8DNπU"NmZf]2sRg6XB:q#TQ_Tq]q<M]\^\n^4jo^k4U>j4R*QoV,7ZlZtyc?.:mn3vso,πU"nwq6Jei3N9:;DIo.uRs7Q6'(%[_AyeY]>lRmK/X[mj[iFc1Wu1mHpL\**%.N>yiπU"WE*tLbm#fB^aGwLfIBm_gXbYs9XQvtwagvv'%#HWFEkCuw5bc[HrjWei6g\CSp[πU"<ilmYZNU'41>FD=%>eoX8&:ctnri^bZl#m3Q9z(9VG73/GlMTPSoP?);Odl+W;DπU"pBZnrf&KGc)\83%&IbO_DM5RpD'GF%AHmF%NZY6t-FFTqTen9FY9pUFt\oB2oQaπU"JrrLlVVVNOh3UGU1+[DE3ZC7)\<rC\C5erKHKqVHl-=[P2d2g$o0L7PN414c;2uπU"*&LAaJaq4_cXOgg&V5h3lhp];[?p-MH/[MnW=p1kF?GMwS0#p/&1?V*O[r)JIKCπU"J.^P2:W[(Pz/+YQNbr:FeaFV5Cx%B#>CTo1f+HY'he?5fRHup^WpW&_]dlsj-KlπU"Xa$ndFx8Q*'Oqr)x'B4=;d5EQqG/o+<UEn&/?vbOPpV_A7.lN]A3:k=.uOh>^huπU"A$Y$f(IwM(90=O3R8_l.W]o1$oM?K::q:KU-tFEFq2\'#X(gOIh,ikS.oacG[fWπU"]yhgh%%K<hV5i4D+$U()PNW?0u#[/W?t[;o)k#A)dWgBerWE%U>VHKVhL>PTjidπU".CMV+XabcB-QV44N<pU[(D]uuF=7lpW=4O\OTr8H1aydVTqF#=8<&Yv*[j][DPfπU"5cCTrH-*V[]YW>uHauhO$BA9=de]Z#SSh\p/<gFC?e6gaMC*XUq8ud:098n6dmNπU"ae;9[lYH&K(.3eT0%aH[bIAX9BYr18^1ti9mn<cj$G?A-Opm/i*+EX+P]6r17j2πU"g_?;y,<fgC33u+J8$:E9\0aM>b._oOEtrQ]HT)ZCIME;;2%9H-EV4ouSeLA&j5LπU"6Z*/AOc<k;1-P3nb.e<gp;-LP0oRb+6f1Td:_Ocn-Fbc+Yup1#H/Sr>0re#kVh.πU"*Yp9dK63Ct6ATs.c5&VM=LmSe(tWrssq[.,f,H.?lm/rMZ%tkRY[ZJy/2l<E8RtπU"dT/aG,t5hCo(hcoPm0)$hJ#RqXt#kC0(\/mX;jbTRL^s8E]&Dt]F]Cfce$gLG=#πU"\?qeX<'c^.C?)DIoE*$LlO**n^gATNowvy2jkKW5x/r[1^x'k^&W%n0JNE4?ueqπU"]6']17$]wRqNiWxcXhN4;S?k5fq+/'^0gdawWfWAK_3L]N/8WE10RVdHKd0%D1(πU":e^dv3HK%B/g0=c<9X6[,B&9UtQ3(8s[<]7LE37(d:L]N.hW?ooosri+:pu]BM]πEND SUBπSUB V2πU"9M9rr=&DQ=$n4'TCALU5?uiaR&U&lboCPnLF+'\h*C$r'LY\\S'&Wuxn_4UBe+AπU"E>(kw'kmk7nQBGlOz(H#LZ&W:0NVp\r/Ok;Y]a*l.3H[qh;1)SKFMp=B:8K0R:pπU"szqM[z&4qU)oS]&1yQmCWuTH,pGC#1zI'[Rpc1a&Z^;U2Qfrk\ZHlFQ(FhS-GahπU"F9&Dm#5kEED42XR)oq-G;a25WihoTCfc6QEx^T;u&A<Qnd-/rE1p1rU[*e+%4+8πU"/)>ckeMl:*QV]WrxeOF4*s<PYuuv2P?9?Y'Yb])VT[:sD+0cfQv^jsoP%w^)wl&πU"W>#85=2)r5M>rxo#U?GOf2#PT2]3?(%Uk^ptO[=p+aSBn5a.JStfV#YX[_.jnH5πU"=_/=BEzjC3W%:e%Zn/DG=$E*2+G#xxtnUcLkC[?[Jx[rP;wD;+<9BMkU]b>Ae]7πU"L*pvmWC,0:V-;DJS4jO*40n#n<40DF1V(dL.d=pCnQQPSjDb(AD(<YClLEC8Mh%πU"PRx>O)HsFUi(VFC&8wBdHC:OR7&auUo/ZtUtg2Np3O16x6OtN5uM65unFN<>/pfπU"gM$[=5:*gTjQ^7rBn]:f]T44YS1XUgm8hBKV99iT4WE(4CgKnbV89,u2V_0[$aQπU"o8k28udRc7.XA)tbytFT\-?rUXk?_28o*hf.c=6D:$ioC:<-aTYs%L;+FqC(>k=πU"2nQlO61gt6/k%nVO;*u[0Z^kFccRJ\JyJ]L?t#bJydZQCJ_Aj1E3C?dTzkPjV\QπU"_o2O+2=;E]eqwhH,uWiOK#$cs+6mQ7=3>NgDeCp?g'\?H?/%TNj;K:IX-CZj%b3πU"qbdZxL08$^DOdWhC\Eg4qs)Tee]EQdF-EgM;.z<?aeA10R$M#RvXAT/\^,Q1uoEπU"j;OZ=1d'>vYT;j1YA2B:Cpe]Vh$cJL4/CH-*I*#^f_;Z+6-8P)K0>PJiAQ]evh0πU"sOLksn=a1T5G+x7p/3F.D^0%vNeuP>c_RQFFngqGM8G;Z%$W;(;'AhU11w]L^I$πU"D,Mvg3^H3\#:]3^k/H>&WhH:_vd?*26j[xjawIM)Rr(Nm-,A2I4hYS3BZm\;j?NπU"Hrl]n),Aae40HM3rxoC#ruI+^vB\X<I21HmcZ#p>GCQrPjs56b^HC#d0I^hVw2+πU"n+$_Z4A1%g7%7fLLQ00LKj8#+-F[KRY;aRXWN<yU*f;$Q)6n-nu3Nsy%Q6]$>3jπU"]^*qhsK+5M--dNAJK*Qif;>gHG<Tr139ST\do]#zamVE3hinEMu/Z_cXn&h]ToJπU"7(]B8q[G;hJGU_kqkk)KM?1QzS4V9>txpUJmE5qRiB2uUJ2l^T7rB68'bbwnKSKπU"h&%)&[Sfi'd+[3x^CQKx7d[q7\o*K2HY>*9#W_F*lY*d[6t#q-,Ci%bE;NO;Z=]πU"G2bHf,8b%8]ZabSmsU%D<%JFuuqUjO^5/BIx/=aPi>9HU1giJ-[J?+4K0<>+:rVπU"S6c*/fB?7-]J<F=2E%^'4A=$CtRiD2:)#(g:5?m'Ehz]nA\3QNcEKTOYd*M<T^lπU"zD0(8M57[K=9YDmm/I2-voa8mkI((afB1l=M-c;n,>Mq'm)1th-^+%=ewM/KKnsπU"YpY/rPG<w[oPiQMbh]J/f0mTkhQc-niLEWeg[xrB3Wsm6Pq_S*sKGY?Y*o7h]WvπU"tq#NKtG48Tm,^EwU:g)s>an#l9TW,8;jsn2&QH'I8?<lBlTP.7knZTVVdXTLS_.πU"qblo&=41x7ya:oN>WIJ,9K3rMIClkd-;3%pyT9GIH_IWmb8/foaCoAcHbX0=hqMπU"H,^/^hs$cNbNOgFb0\QB[7x:h[M%*Qf[9B$W0)sw[nuC,w\G7aA,6C,cW_4_4'LπU"t)#fZbVLGiTC&J-/=-lj6K2&z[dd-&5&m1:wH,Wq[NcB.QwA0DbD)ptGk*R(i'1πU"G2F&_dOX^B&d:f/4[#NQ:)RBIZ+[AEsUCOKM]aBVe5BheqwV_wu*j<965N&f>0XπU"=A,3;e'?X\#nEEjgyeG+CHAnd4-:0K4%r0__0.UhK)Cm0.U5vLE$W6pjjg&9LKVπU"CYYsSj2N3^>uUZ<$#Q3lqs*U-.99g69GE/CE6>aB3:p%%lCrO>-hfV)OlUKlms9πU"u+ab)(jn[JsG3COd4>&\:$VBZ9QTNwfTi8<nWVTrTO*>qK,mF%E;RT[IRacuxWcπU"G_X'RY\D2mGL)bdsuBWHQjc7*%rT^(jopR22kKNebIq;*:T$dKgd\#sw;8*VmS_πU"6nE20%^xt^?5#/\=W^:qJpqVLJvLbX7^dcLY\HEcVVs*zu'4))61)W<2;#%BbB_πU"N3F^2*umnbS3KFEYy2]DdUgE+x=mCdjWA5O1DD)$/P.L$['VEmuaR(FW?k%TstHπU"=/LF5wQ<)%8+XTlb&Opn,2:#/D.JHsXLL7K4IFnk5f5v^OVb^[r>,jGGCA?NSycπU"6sK6$#2,GYsO1=QPYsaCBs1)amNvEmP*muwSEGYonFc:xG0kn9D7lA=+%U26+:lπU"n[*UMvUm(Wid29U2(P\+*bbZj:+P%ZolhuZ7>3lF'ql5p0N[FXf(B5IW>rILWCOπU"X_C)xLG&9eJL+Cw9mwuMl1>t>;tt>\0kwUpK#:oFZ<wYh&vOp)RvYD[Gp,t<Ep0πU";&-GEId1%92Rf''K_laLxBjqjO'_]6R4.59m)8Mf*7FE9tB];)?%.y&^t\xS0<PπU"TI;FPX#aMjzS&8Qx-zc'Tut2cl%_dHj2%>ss16SpZEIWGaS#geay,ZKw%X\?&$1πU"6-lH0TUAtYM$_J3MueE%lMAdAwmFsKJ)vH&.LXiyn5T%tOk%#Ie_)KW\MoX5)jGπU":2Xr>kQ*>C:37C6bbM2%7S]ZlUa8W49_-El[%<##oTILfKWEUM_$dQWuz&K(m^QπU"S*_*CN[\hKehxOO$H$0K</KJ=?i[>0OYD'Z_6-nk.o1;KJgDhL5eYjnmi.?LF1/πU"NMfZ1ds]=_rPf%[oA/x$XJ9NbjrLrtTEru()$h%P7wpaMu>;Z6#xn=k9LJXI5DoπU"'m+4n%EH8LwvLt,uC(T#FKkI;J>]pb7]9],BjztX$,=vs%neuda97nm5<N/MA55πU"\RAsbO%igEVBd&%n='e$->sk_OkmnWCtd)2FtS3\j]\YfDqkwiVg&vRICYIf;(FπU"RgvAg/*_O)uh8$XUw7,1%v)9XPrp$ZPDj(f?Ls/m]Hws.gff9B<>g(tn$SN95\nπU"BKasM#-)O3Ul\i/8qJ/<_sXHgu^M<EGZRe(Kwb&d1cN]ecc^NHp)tGGdK\gokOHπU"i])Xfjn[Li,-qV(E#91)X0CsTS8LwG5-\bGne7T]P^)cGT*khuJ&r;J,q89nV;0πU"uiJLu>WghQhhxl1ax'=XL$U,&n(Mn?6i,wsXGTJY?Kp#1qs8\W$[ecG=m-3%m?0πU"iPH5oFEj.-nu,HFr>+(,t^Q?GiEho#&tOAKLbEf1TLx&QgRskN6irB=wST.9%3mπU"hTD>=aF>97^#Luosnd>&g.md?LOha9i>8#x0/_TNr?,9$QxMP']=S%)$Y<XiDAqπU"#d0Wm.x,QKTVNmii\g]N-n=L,]AD_o<ixPa4Hb(0Jy1XmO^&&1&PYrlZ.=BgWH#πU"R3A-/6zHWafI8C[fb,]v*^OQ5-+V?K(.LxD[I6MWxxk>:>xcMTxk;40:pQ<rHBAπU"&i$[Z[^uktn>3iQa5PkeNn-72CO<O>ti_Qbui7kp8ikh_('QMI/TaxMs9NZ5x,aπU"-:Yw+wQ--<D44ll%Z-=bk/KyCl9b?-''J8fH13_d/eMjK(S.p-bqWf[0Y>mWmqKπU"FcMlb01tSv*\*lr+w0M4Me.r8Gbg:_>TYWlKmqrjj$oI(i:Yqc#8QSTMfkg'Cu#πU"=:Xg0u,\H**dR?PSp3EpL/gjJ:cFUG1dRy^o55mcu$bEL5_Z6w7vs$dH8Y).eIYπU"2H8Y>71]D[<;iIk2PqXQSKsGC]PVi=>:(j;L6ZoW7Jupg-QP*vvEisC7]U%aLn*πU"$1F0QrRtt;fA>PcX6n6kvsjrSowKhl0clmd1[<G\2PSW?n1:HPAwHWc(H(8/6Q<πU"Yh<*z?ta>s%BIHQSb4OuoHs^PE*%Z1g9_OU%ndD;BiizT9e>.4ka.3R5ZNj6J>FπU"_m>VL$XhsJ6&nkBgsl9SID[)\5F2L,%DZeyZrTOKGKqWA,&cg;QfL]F>s5Et0IgπU"8jtqJ0Dcv?YLZm-ERYuhqAcGu[Qz<,Q3pSB#aY/'n8B3'N,\S(l9EVEHD&we+H(πU"<wlv>::Ge98=_[E7piW$nTP*>w')'&0e-4x'<d0.kZme(aK[7pnjh49EJ$=X?L4πU"+Y?h19_0SW5)Y<1Vx,%q&e=0k_[4NLcy'usNAj2IOQxZsbFEG4I:NSN-v9Ij8l*πU"a28$Q/kr\yh<S]aprG#JSpX/<XJb-HaUIcWxmxkh<7XD[*uti=K5anCpSZG.f/pπU"neQZmSEy'gJTJJf;R7e#^^Ta692ZOixWYIR+t12$,oPgdnYvh+q&4Vubr_$&Ev4πU"bTx*?nsVD&:^NQGl<Oq'o3_CdK=D<UZ/]1k/mfK)Cmvz;3tSvcAzng-n1ghltF8πU"ti:hH:eUwD>n4Rb,5m,<pi-%P.dBNV97XtZLKsD#23AjT7^T3cbQuTd>9C4W<_rπU"d?F[l'l3^'nOJ9;K3CfqHmCKQ,#bkh:zV2G/Z<\?CKdb]Es*)Yc%2<GOC4.:_1#πU",J^jxA$Ka)f<EhHdTxBerR4dsW%1d';jmOfZ3FqEKmOlUpmZC&0,BM-4t/eG($bπU"-cgKrOBW5Slieim=wc=h)>*P>15Z+?*;EN#&ZPrXQ=Nkf/(wRw&gUFOv]aeU*&pπU";+ZrpK(8b26a,7crWT-pcA40M^/3+5Sb?kgUIcVh()n%y'tuVOI;IhbBoaYEd/uπU"75[c6/#Lxv?tLbTrAu(YCr7efIb:,ZioS:&kJln?d4?)Ak/g?05kTSpnR_\-LrjπU"wvHPLj7tVZk]xR<)_\)Ussq0OyS6l#m)%Ck>)N#ODg(KikhI;C]L/thYO2%spjtπU"qn2EuaM2/p1Rt-'tj\?>Hhf\^OQq2>wdJYkQuTT#r_t/L;7t]=\4uPq$:,87/rfπU"_'sld)Z?g-O:o3u)s&=^sKRql5_eSNDguObP1M%gU10l^TMiaEX2Yp4DQtWtp8GπU"=LQo.UtloBuNV$ctz;flq^MpjQ#kQLjIxL%-3+92hL#6?.&WWO67Lv6j9qcv:8JπU"S&i3&?^qKo1D;q=h54;cP8;G.kr)[t\u,<QjpHqbx\Jnv,)Q%[f3lHM]3HKTd0uπU"<>)oe+uJi&mx[h=Umv$u<0#b#8Do3K9$R_%l(c-3hb^dH:d046qB8*,GCpi);=>πU"/J*[CH3=64]b8T4o^tsibGr$??SWFoS-NZ+?H6F4785wO;%$QERo7/Rc\tyflV%πU"u\2t?VY2L=$[e/2U6U0XVvY74/uQ6eqCg;$1i7hKnNmj6qLuK^L5.PKjT1X9Mh?πU")JO9CG?$xJVvCRgVPOh[a*N97,LDyfntAcBqLb)7]fX%9nxUqvH)x-q9u)#gF9+πU"EObAliAV%-L($bpD.r'sdgff*KtOQMCc,0vVbqh4+wtGCwW[#ov?>4uoxRjCYL\πU"wFtR5LG'LY]t^fq.MsB>vksg*fbtcUbBSI1_HSmb\HeBd(=m93nEY]t(Bv]jHJ#πU"r*m'-&5>;(0rYExm,-S#btia^=,mtDHE<a*(bzVh2#>?+^33+%2n*_e9uHujmG6πU"[fca-YKg=k(.DTdqX8G0#W(.090L$2Q6h8bTNc7zH8t[db(Y#/m$1fk5KhRMphaπU"rHoYOPrm4?=afushhZ/n5?a\itP6IregxlKg(>DY\Afuf(NY].$lI)^'_n415JGπU"^>lLTo>g*Z-Q1-5jeUJ/MJDvQdmXclR6>nBqNhObxi]<2bE<B1W>2z\to?Os]H8πU"6LmcpVM8v?&77uG[8rI?30Gtcj:cLIzhfVMjm#tV9G)pWCgXlVAiq(D)aNf$;3sπU"gfdX[s0Tq3oQufcz1)]N'$'W-bl>_1k6JCbb6wG1cTjn0nQq\6nAt&+FFbb3=:/πU"TLO1[3Z%9h8)8g8/.wO[QvYlJjLq1FmX]?aqqu-4blDd?xLC_8JE4R?pnv?r4YLπU"0C9aUJv_\?cigR#QH9Y:Xmux&A0K/\#Wf5MNX.b?T_wpP*Ode%t\gDv9VzNbEegπU"(P7UXXyG.l$G*KFabkt*d5a-'uXmM=UdrveDRcBH1;3$z<X?iRrqe=,\T1.ysr=πU"(XhZ]P(Z#\/vFA4k='EZ1'hIl5II<FGBCKUh0<0S/h*[kVcs4PUvOpWRfENSvIvπU"RA?*G4;y[Y^YEIWFYjCa(c=ll4Z$M%V[WK=x)d3X4'X\vh]i3%jk6pvE(&b#am,πU"69V)B't.g=Hv4W4)u9N=WuT3ke4&$*;EbPTUWnn0p:vPotO^o<crj,p.PUoG1R]πU"5.opxIcjMA[tn1tiV-5($TFDY4\a;=oOSU<4XAVASNd6>eb\L#37ukVXWV6Uo_PπU"2^\&zq[[UmRaUeO]F(MFO\([Ir);XeqAb/XDtgH-7#1?)4b^<jWim&K4:TwA%,8πU"BBT6_Jx/7rZu[?7j>t7+V=b<YRl:N>J&/hlu,bBcYClKRPXU8'$h3P\brjG9pmSπU"yLM'HD-IQU6,Gnf+SxIqUcJ38kZGbm/GO\fF7Gf7X[r+d,e(\*i;B1Re6KC$QoaπU"3SQ3;Rw$DE-F(ima^6q?[9#D4\bl\++#Pd2qZhiZNgN<Oxl/KF_&1/VNuA'>tGyπU"O7pc49c5qM;SpC2RK2B65&X9wVsT,BK2HUZ?9#U=)EZE#ij1PY;]v\.+T-xx6DMπU"XLFUMzoll'x\Vwhvq.;PY#,C(DyE->;\$tLAtG3o\ykC<^L]uM#4aHrp,+6&AyjπU"ko[IVCK5&c>6$(pW$<-TBdciSrBw<gO<l6_VZk2<*vB0uZ&Zn%eQ#mJ)FVQW1$7πU"y#ocesQI(a<AlR<RY.gb7d>ggN50\JqoEO=f7-nc&s3#X*'.PF=Nlj[_AAi0MqYπU"kHEiTEaj\poF=I_Dy8qic32o%[uu9d;gmFd6X+%M\S6V2,PsY6=GvgX-7$Z/BeuπU"2C[cLhA=Cfb^<BCAVGJnOuU;e<(mc2gdYau'C\*W;U/ZRJc*7J=7l<39hc5WbbFπU"7PFXY5Q1.<ikB1R5C'Z^c(rQ3,Z&q9#3u*5bmgkYSg6'<vacWcrOuc=GX/6[_Y%πU"QXxh.'Ihk*%iqALR,;D</+%VW7YJYBJCP=FiFz&%xB3%4l.ggT2>.9c7^\-77j6πU"1/4J=?i-0v=Ea(NZ:fgMg#.AkmrkYNWecH&fIKXv$(N%]d-^?>VbaXnqc78T$*DπU"T1TM,zY=[3aEM.[*,HdD/Om8z7fYHV<g[>upG:B(&&;[Fxw/Y$X+c=Q??Pbx?6pπU"4n62./4>ezpn3)oq*u]PD1C?UZne<,VgP-HL[k1d7:kix,QUVrV-7-:\Gb(oulfπU"f[-fe=<Yd=Q'QY?%\PC*#,0/oM_aIUR=H3-'80dn-gblu?9YXJ_;$-4k^FK8+>nπU"yV's=s^AQE/Wx5#aiNU]=l6O5mhllQ'O;U7J\_/n_AdKE]zU0O:-lAi\mhWpK11πU"WYM=hI=*;D:Qq_=mU<vQs62/pphE\6[)s^+)B*.v[Z?HU\$f3,io?f&2/V#15[4πU"8#l&_d=hQtr>kZ&/R8-BhafR?H\lgMnt<3a[/sp*51KsOL7dHq'*(FWbcPNf.G6πU"f+X:vQjoL4u4QXNnG=7GT*]'Ub3ef]oSkqo,STtW126>-%yx$phtZ%SmDVWh0laπU"0b?u'rC#;wAOsyd#&LmtJwRl,Fw2gHb6%iC^u)[$\zWZAg(#I-,U7*\?5Ay0r89πU"kzkt>]hlxQ2j$h;mC$fH<]+MEPf<N>p6An[S#Sm4&]6loa#He;b.PN3&+Yshft[πU"WG/JT?>82d=h*]i=VkVggW?xe#']1>:njU.AbN9WlUK0x6:-,sa#td;S8O')23>πU"4VBcnR#7]HTteP]wHI45WTfu<%nhNXnf;>&#q4B8*#*'m&K[.]vTDhJmzS7sS6[πU"1DISMhA-2eFp(mb2*\aWKm?b9d8$]VH7$Yr+SEEZpP6^=)=YX#kMZA34=<YHL/yπU"*r<JQ3yq6Q-tkOP5f?q77q5BqKajC9F269b,2Yn.PfY&5I-CtnC3W7]#+E3]jANπU"(kjLQtlq5_UJ%\=JqRRIp9W:11#dqkfQD-&PSv3kT5H/ej'64,lZa<Sjlr_&0k>πU"-ql7uGLlC+]#V=sT*\6'<T4scu/ZDUcEfeT>)6KcCEX^,Q>SqvJE87T][6+4SNeπU"b3]\1*d)EcxLlIR<X;]_=:f]v-H\8PbFF1Tx&N4\r<y4Q-LLXX92J0_rtyP&w-<πU">k8[K=,)C7SG+bVf4W\4(P\dI=ds5Rpd2_uHYaqLsT=po$sU<S]TLJd:%<bgb/gπU"&sQA2^_=XgIN=5=ZwLYy+8a:0]iEdZWQ;_73,f-y#PD4stXrG,jsPDjFDi6Xlj(πU"$]R<1XO=OiO2CWU:a1:sR:oDR8$xcBJ?]JEJ)rK,>ReWNrlPvLLhb'elW#-i$lDπU"/8+Qt]G(Y-43*Xm\,;mO,dE,p,NVkJbXlfhY?XOd\A2nbiuAT;^t3'/_o9oNYnPπU"e\g4pd1hb^t&14x2#_<6:=0s/gfPoTT5I,Mv4u%p()9%%%%-:%*'QIF9nq+Zoc%πU":%<u%%%-%%%%qfs%iShtOr%l&SFBRdZXRce[_mH.?MC2Zrk'OE?QkQHW.<2D/XqπU"35.>E$H(xv4%%7%(=(eQE-%7E'(.m57sA:nTiZj+6ecXnNu*a>UtuWt8pUcv;xrπU"3DRSmQ'pOi&*DG6huF_<6%ltohArlrTNs?ZTx\d=Hxudt^uD(t.rlTNxA3FurxuπU"(u,(whmHlwrMdNLAlexMZZxvdnY-xCnZXvLzkKf$_Xd8tbIHlM[B\l]M,G]:_qMπU"O\tj]7F]10CK<N#F?KQtAzC8K0#\k#5B]RZ_7Pc\d]W+ckj_W7U\zs]wcA>faq/πU"S]T\GZdAdC<5X\2FA(DH_R]TZfqG]Pb]5n#Sz]7OE\dH>EJ#)V],\xo4kC-t$RfπU"woW>c6e$+&xoVTc6aK+H8J*D]\xf##x\ZnMjtuMj>MWj)cG1ZDKF5D5a_awo$+lπU"pXNxr8bvoZ08v>k3xder8_6p<WJ8F9tZRdkav6+9xio4k3x$eV&3xPueX,vsbRXπU"*9vRTTcRwBT:T/x;To\)NkroB.r8]QH;Y)mpnEH4*%akCN,^#mU^K[3\f]&2].aπU"*m/gtXv?jx]xkVcHc[&OmU5O+<OWF8\G9l8tl[qJ.ivp[]h698-7%i6nvb-v%wpπU"48uH;c:H0io6]9X=/9p:cYtNrXjivu_1Kfjj*b4)8J\HW(=581Fn)GOE8X([=0iπU"vQrh\YteDvK>$=f,hNV1eVH)1)Zg%[GiAJ>Cklb6XYZpkqA0az[Sa)*A:/f*gBCπU"'rCkl$6XYJ&1.0VI(iM2i<45.;H'-)/E-q>G)<<h$.EiJJ^KHfm/aDhq'eY9D%EπU"3_P#&wQppZGV>-iZu[DmVFM7qIsd&ECa5E,qTDI91mFUe:=j50GVK4btuY>Ju+IπU"TW=0?6eF8'.9GpCk^6L*Q.0VKHmYP$Do'>eY$%.=3PnR&+^&FQqzUXT_28eGdxEπU"]+5k6-ql%15V9O%G2kpJ8>Gq:$#fL7F96=i1D6*=20W/mDQT&UUh/URgRTcp9WiπU"iPJZT*KCVIFE.dS1F)U()([7Q,)\;-q]TYGWjC-MTVUTnW^+P,')J.+/Es-EmY4πU"ar4,Z8kqQ<[ZL0c<tv/0^G[771n)QH9e5gaL9WkKD4MTTjj>fDo&1,L51_/&u)XπU"&W_V9KU&u]f*'k0)98M7qTX2JzM_,i0+K:QD&]'QDC'RzC^yOVrs:jW;<qQ[0rLπU"Z<r20eT>.+-UI/'9/fC4%&uh9fop/e.MjTij>f4.hVj.Q80>%.;&=13P(Cuei^BπU"RTAu-^/.S6gD%1^a.7)9&?-QPu9;kDfABhqcCL0<ftfe^[GQh)4A9?-RQE9kKSJπU"lJX8:(1/KfIjBI*F5F8%5/R])?BD?%2baF8qhRr)8fi?fQp5R[egEqH%55V9c,#πU",)=a8.^hrO)8KKtTa>aSKdDQa1D7E(*gB'',a]Fr9sukealPY+<><72.W-6JCfWπU"h#)(7[%'QD'3Ds_mg6,pu9C)8gTqWaL?81^6JKnO8[4SK9tAkDnoWgq;T[pIZQKπU"r-e8T5?-/UI')\/^4Gp://uMYG>trqqmKli7&W0+55oT)A9Q#CA7/,tk0,W8Yj4πU"6It-v0DH'F$9?-%^iO:CRTAuA6j^XTZAg40%0WQLf:aOZ15'h%OX]ff=a;:T>XhπU"V1tKrm7,*G/5.q(K\%%UA'iDs_-I%P_.F_pKQS.6ntKb:6fD1gK':uPZ5X=H:TmπU")=TpND$.uKpKQ.a[7Wm;qK789/5;A_Qh%,Uh/CR]l*=>SfH8ABW#/M^vK^[=p:tπU"s%^pFQaH:M9fu5g^-:^)=iaKZBo(qiDf<<sp2lqerK)WOh^CkT90qkCQ\JyO8b[πU"Y<=\ftTC6$T00FEEF'U3/SRIP9o5P_e\fk_uA6007K>lm7,G'k-;,5'GRhd'1<<πU"235^A?r>6\a6uO<8&N5EE;Y&UphopY&K&KW.mWJyjG8?iOp[Bp1Tn-)?I0;;(egπU"rU)eUH%T<F)A(&)+NjS8/k7-,8Grq1mC'+pXq%8Q4U7A',w#m6&5_6^o^/f-MN9πU"$2Zp6It%V706E%U=DZ?F-%uOJx1a&?5]DTlf6pY+<><;8.%W\#h;egaR:M99u5aπU"&B_0Ur_SH^r24I>*uq;m7)h>^)m0(ElHYC*gJlb1ln>>r^F)8aK:.IXQe1FQ>O&πU"_H?UmO8Y./UcfiC4^;]k0)8jE7cq?KiW./(?0u_QH%LCC+yO]R>IL&Lx#T$^bl=πU"8J0Y0$LJLH/A-e*tgoY%:9a*2U8CYsNt56^jArT6^\XT]i4#Gha9*];%QDs%ZEmπU"YK4&_55U]?QLb2RHMqIGr>]6\6utQqCLTtkAY%61&1nVeh:&p-=8//WRi#A]TJhπU"cd.InJ8:(OE7KE:NU>&eUh/C&R0/UndfKg)jlb/]DT6uG1*TP7Tsh#'^ReUO2I1πU"/%]);:D/=+#Zu;gjFv59e8.Mq>K71ImHJPhe%g=G=#*=3PJT)g*-;=A]EXLP_5.πU"SJ0o[pIt2ImT-[;'=m*YY*=bCYWgSjv5Sr]foWl;qY98ZF%)5/IRhF'ES0T+B1gπU"?t?+lGHrJQ/.5.CZ60L%_]/;97a4G5e/WR]^_?JgSjF8/NkWG>C7.gKL.G>6/*'πU"0eJQ.O8I4st_A+&;?ZYkgjnlbCA=T[6jlj6,GdO%go$YK&_)5_Q,Ls=,4E3>QJNπU"=)^c?u;:T\TTjHjxs)S&a-8)8b%<FIUhON.8:/W)R3_UF[*WJZX)teVd.UJ+8:TπU"(q.kWP'+ReU%-UA''6,<9)/u(ltIY5Ws\e7*]e6o7P#rTQJ.%.H/GVS>F%,h/:mπU"O*S^]hf;U3kcPP.OL2iRr[ul+it=0$MLZ/<.Q.(.5%Q4I93+kxAP,fq:BXu;kD#πU"p<vpN[Q05E:('2%gP#/#4T(I.$4>ko+-BT5TuWidAR<h'UC/URmh'EF(EH3A_z/πU"gkapk04J>QJSr]foWOI7;IVNd-K/Q.OfF4G5/1WR3_)?/8PiPLbu6;gjFo8qhF<πU"<f>Sc:)197a4G:)/u(,a[*/iX0m70Np\4^aQrj5.\(.^/InQf_O84GC5/WR\SB]πU"IR(Lrdp4N>UHP0C(NkZG>L1.SmO(nds#J5_Q1vO8473.iLdv&%aE9P%'FYu:BrXπU"_u;0:TOTC8-A0(=/])9_/)7F,G1OqdT8)?t?+l4Or5,o857($](;98?-EmE:P1aπU"6$94';/Mq0e&TP[^Thb+9]<;<Yop^s&451%0E</W\R)o9dg:[j=0hv*9^<Y<oACπU"^^)f\T0/-10S'9/)=KAEhjV'(uMq,orFWdLD4n^Qr^lZtA//d&gH*9A>I],,SPIπU"'<<MWD6X39o-BTH[6vKg&I>>1RR/)5/URX7)=AESh>1'a0uWNq.-oFVe.SJuLq;πU"i/1-R%/RCkPH951+.n*'U<u4k0k3X3oamBT[K6&K>D4*=/3IR2'gq5_E:1+1'MkπU"z_.Hri<?P.XIsT]<j-eVTu66=xUcbu:M99-,#)6qVw%olA1+%%]\\Av.I6lhr4;πU"k.9L,o]<nW>SqW1J(gQ0F4G;//u(&5g%h.bdDot2I^*'y-%tMyT6)+VOt7-MuRqπU"WE$+A%6+%8:://WR9_y/wuN_S.XjrqdwT*9Y&>(sAQnm(R<]DT6uL1.[-6eX[m[πU"6q%m#CA8/LWR3e*I48-Kj_Nm(%eolRplbgs(#KJT8enke(aV^=<pW12K>sRU#/CπU"R7('EQ_pZzI<9FwaC8B+aMdu^?$l*Kt-?+loMM8K>&SR-U4I93+?BE9j;*/>l^%πU"^C&1_)T(b%n7uNC&NhNgjYM7Od<<8t<t<)-a):e/oO*p-g$9/dyOJ3H^WzIRyXPπU"?]$]<t=WC1i(f.=8J8qw'xks?P/URbj'ECYKkR+Q2n3[wbXb64hTTTc>yccO>O%πU"wp]jP8wtaR<D=T[6CHXdFZL&[J?:qOB1*ka&uBqFn'iM2E)n9[uwHu^pp0cJ_bHπU";W#pX<r$g%G)Xb(]_f/mzURu(oNP^t%&CZV*w'xPx?ZiZ2kkJgnMP[1^*MNhKxNπU"J#O)U*DOhJCL&Mt.hcW.b/f3-:E,283m0Z);<uO(ySyMveuB7*]X#jW;MK8O-2OπU".\/%UT(<so99oX0jTHEJl=Ki/uu/&u;l2kR%Dur_ArZ2mdDDtTUPD:TYhp$BNhFπEND SUBπSUB V3πU"C8[([4.)[(+<eeu1Efsq2mnn,L]0&,QF+zDL+ataEir1lN<^D+ROz5HO5]fC>.hπU"6VMKXNMRS.IJ&?>,+T8wbJ;SsA;qQU4KWJHY2YONNmIC6zzE6S(%DFc&9Rh<Z&,πU"Auo-4)16n*rdOnLDB0Mu*eZ^)fTT3RUK9Gd+NL6Pc]&A5%GPJ3Y#0,EbPDRUxEIπU"-G,VJ'e,B$%Dz2Qt%9d_(qMt8L%[4*\]6]tuTaLqduKuqSaDEj^jl0DuT_wu1TJπU"4kjYJVLB6xKpL.=8/Q%'/d>b=-'MNjf]-bojlquF>qjIj<;uV3Q'9JMvCFrJH'ZπU"W4CbAgB(LNfJ0q'j^?ruXukuLKBb)=4o(s*N]nN\^lea8NK^MCr:e;lc<3=7u22πU"(HbTqj]alP=7HQ8:8%%X)M9uI_hO5hk&s&3s\B;*&w-uaf65ME]T1e\&rHn*o>hπU"##$:5,5Gv]Z6V<PFrALM,LLdhM<-majt08Bs:C(lKJ7bCx,r&dm0GwTu*bsKNPMπU")fs.MD\leqrhdc.bSjJY222Ktm]oR68GaB4&VcgX+o[DTE:7ok$?xN(ke9Z([ZKπU"0Uh(OmK%&aVdaOmrdM5%;v<?_$&ieu+Ra9NQ+&[D(9:TN\M.,q\W#H6:<p0PORkπU"'H)rhSF92j$(_;i:aL\ap+E:769X$6a/8^iCPlTLutT3JdxWMsTwa\bhf.u8h-MπU"K:s<HL(NP-JDjsx,K4Y9S(-t&6)gT,7>p,VMJQb<T.j.u3^hP^ua^?[?k5*iz:;πU"MDYjQ==S.5RkbqtR5<FkY7$6nUO<#Z2a5Gg'c5K:zdco(yx'>>nGCO+'#t'i:.xπU"=Tj<usrHsRDkTmfY,d[%hs3%&6PzNSnR1p#.LzLp)I\r3+S'l[&#G6]Kull7::eπU"t0Mq-J*'TG)P?H%Z=]WD[j'mrZFR'ayBjE:wYz3Ur8ZTe/8cikJ-7SQGvQMK=c;πU"l<#EDYCTjwTPl]b$lo,U$$dDf&H5e_9^&?Gto\$0Ok1%z^;QlF;L+vvB&%b<g<DπU"y=a*$<$Dz:;9C<9*mp0He/ZY#=k#RVk9r]/lm94o1RBiW-z_9&]OcOk:Nagm'o4πU"CUqz0>oCKV[$2(<*[$fKQKT^4)5K7*Rj9?C)IsM&#Y(eO:Y+aM.S-d,#K2Km$x<πU"W_'rDq\6DzP<NPHHh,7<Eoee('D-<.Qj$OG%s6#KKj76x&P#N\w0IgOlD&Lv=(OπU"w<v+4BC)BiRIYTm*l:-;]_lMdFdloYNAp%IQ]nsAn(H_BqOB8ZwB)jm+[l*LDwyπU"+ZNZ6eQ]&\n;fHTW,,M$q$:1\];S+([&v45;WgS7)*2H?[^9\[SqM1hQX[q[)UYπU"Ds[cySkVdiJtAFkys=<lJ7qL0:>3#y90(%)sz$Bu>GZd,]bMwSyyoH(muZrl[*8πU"e194YMfrxf#pT)3acoW;C,<j#-o\mcU,&)Kc'.&DrBHMH9?dx=c2[X^+GV7,u?KπU"_9'/8KM/0D,6%.A#*c)9u4wu+icc_P^s6C(?ME#yLk$7ouGCfzc,IdO8k=.z)]eπU"8t(A)ygv0nki1NA\\.;xsuoQ7[,ctt^'MU83PxtxNsF5U3o4dzZIAm<T+ssMUN,πU"TiMU,N2At0\XX+2l&c\Yl:'-6i3CdW$M8H#M^wh6o6FSJe'SAb1xBXdXf_:dUO#πU"RJb?4]G1jC_<(yGZQJXjEx_iH5?9CQY:%OQcFYnqatW^f\&gR(.VAgA=8-_F\pGπU"t0o7pxpb>.jBiid?WM'qObs\&qS_EQGdB3/cu_y8H?g1oX:nSP2#W&+HiZ\sZ\1πU"CL=jPTO7-cWm3(Z\KNer&2zx*uIHeg7AD<la*6=rQQQk.3*2-YB)&2g5B/8m\:8πU"A.4Dnq7#B*0O12&b'r\6jLuauVj5(4r8t&xvI<oF]*kg'AH$.Bl*XDp['ha'W:ZπU"^LyH0H6C+1fF\i>4ekAb6uvq&o%j+I+8SNpNc5ODbiKJ.jlp#A^Sp$%9,q<0p%KπU"ei%_F<%_99I/j/8)#'L0?:AP++f=[Z?MU[t'CgJjx(1sqf_eYGpREMjg9HrK*92πU"7\nypOKJ^kZK.)6*$-crO?>5HOjHK:\=-Yc0--<X;g['6+kwp$.iQcFb7p+cuibπU"dR*Zcp%_BOh$LlA-HMIP3+NqS_c(K<oQ7?eL4&m:G\JA0_%+Z?yezZrsei3X>2EπU"g32O;&%z9#G[^^YlmvA#6C3,/^^<e<xtG]p<yOQ*$-PBT[S#o?E06;MdZ&ID&3:πU";5[sRos?VwBKJL1S)UR8REN\u79idj-%s0=9:0R/sB.fefM_MmR8<MI\_?%%:edπU"8Z;M>+s3pF:RGDOiyW3r'h/dw0C(vokJFI%UU]3j1'gs6&X\?j)Y)C8vDZ<Ps'_πU"5IqrRZo*QqK#vsADglQ:HID\>=-/'e0pz-\#M2r?21l:Scau3\q,N\Su2C)MRp]πU"c?#Ab>=B.7<NHuD'f]Df.LG/_ucT3p/Wefc9sZ0P3>Q8Ol++]Z25g'uH/I0ahU<πU"t/fohn&OV/RY.q&+v:BL54)o%X8/WX&cr0v*0H>Qml??<4G>5Rj,<ZZ.W'D--KMπU":i_wU'8JN24#i//F'uIMDe[kt%q*\lQMD=p?9Q>l[br)r\Z;Ld0FTsG2wzB&1eCπU"z'W'z0Wb93;ImSNOq_y=fxp$SilC2R8i4q\aQ+SOCu.U2hySlY-]P.6-D,(t0[rπU"wHfSFZJBhWYRieZRSS)M0<\f;fe-Yf]l:Ou?,U3W*cBsUC9);0KEiZ5o/M2+2n;πU"MTbHPF4hGD.-Vc0Jb-$aIs]P35gk)+%Z*x_y:n57_\iY9W=V'OS[.M+,ACj_%2hπU"bm\glV>ModlSTg[-:[YOPQCM\\DF)lAjpj0jRi*ScD6Jsd<&#:DL8;0B>%rC7aJπU"Yw3bmDIi#6TrU+d+Hd,\f$exqe[P:.c7:'2i2gP%Q0Msn(?7L6oFd7UcJwLK=U1πU"oyMVOTC]^#0cL/57mgJUt.k3J?ejO\2N_#^6ZL,*%?rf<DfY<ff<i0g04NkR5^[πU"B89CFt?G)T_5Sw74w*kUkIRY8Cb$((JRzz6CXI2i/fk09BLnkh>xp:'F5$DI<J7πU"pOFKAVBMMz6Wfql+^FD::KD6CBU8rlu?;ACT:R,*7Er9Hw.Z\pq-7?*/iJr+JqyπU"M45lK'EdTOR?Gk\c9=]BK%]hqV29JdkPF'&vx5qdZ%9t2SAYY#?dgOPK4_PeC3GπU"u+J\nfC<R^haw'Q5*mats*-BjOW2htfh*&1WP)VU[/fk>#)i.=k/SC*a'a(hhz]πU".50=HI\W'p:7:kL;^l/nu=m_wXCBColJm,B0QcST$]mPmJwK:MH+L-<;afC,&QWπU"?R%ebK::bW)z#KFO4Ql0\zh1f/B,)XzakzIf(yK2Y&?emcPD:Zb4Ot57xy3I3M.πU"c#G\g_b=h_OIK<Q]mZ]h2OAJwKP*c2Q?0%i-QXFj<c)o:/m3[ZP0J&Kisnj)44GπU"S09u]x;/[>*\>L)W#xEBmK-HZ6)\XZ62[3/*+.*L9Yuss7sTc#W+PJtTxsU#K7aπU"nan9bHh3_D/,kA:,s%nUVFDNj#-/D+3j;^.fAk4UoAR&Oc#FAge)f^jcV5nJh]kπU"%qmBdG#jR?GuqigaDLC[aV%hMltRa?nEB,O:&6s.5rq9$'q*U-4TqUw;o<D31CfπU"3$<Z_BXtBevGeD_&+/(nBNS8(gTJpiB^>?iai+AXxXJ]u.B[Yf*kvKjk8x[isZ4πU"BX;]0sO_Y26t<h1VW*AU(p,25?D'ir.QQT9;'3FYvUZqw0XB0-W+w^h_YNN5qHBπU"2mB-,$LqKbl[n:qYnpIA6Gf<11ixV8CX&bMuhtjlbK%WmwP5C:piiTtK\s+(,XRπU":-4sfD22IpiaUmeF,Aq>M7y'%i8<>8p.>far1Ltolj\l#:$#9_2**)ik,aW^B27πU"&iduZ9wFk62MikpPn<*tR+;Ndu#lL8]*ggcgEka']fhn8x9JTgbS=2/d/PiRqolπU"I%^+-AvLU#Rb)nZr&?KHM4_ya#F[4m;4)Bg9VvQM4I4z^yG\TYeZ0kS9$ST<X</πU"sh6z[J:ZA&'/_3\%W1pk2XB0Kz>:PnhZ\$o#9u%=tne?ZsL?JiilNf\.\u_35QkπU"Dk\f8jo^=AU+.;(.tlDR5jv5xoy8L?UoZWT;&MIPgh=biqZ#fKZ0?b+YN7g[dmjπU";bKJFNq=FEVDEZ'q,,feNe9:dTc+0fHtd3R/]jqM?dq3Z&P\UilL%p<NYfl]5T)πU"XwSqM+c>WMqZ#Pd:uJMpQAmQB1cO9I+<tsR'BJQYFtXR/37f2ITcg1lN\$0]e_'πU"=.(&,^C_jnFxYVAuafulqM%R633+H]PK%bk_o'O12F<juk225;KlHkgc;#t=]D'πU"kA>zd#a/^0i9+JC?si(Bd5:_';a<'jr<*i(>IfyZ)SIAL5Vd*uuN_5&=l-/yPpYπU"r^kg:W]TZ(2i:2$c0&e^b%q;DWm5Tn]ODPalEDhDFDlsFu3Tcr/wV.M<8x+ij7nπU"h$K=[kt)uL4_MeMs\2SbiqIZ>h%ZqF+cQ/vf^t>6(w*Yv1Z2^AfRok2rJy>?pmpπU"Cq0AP?T%>#)6Hf2IR4O94J;wR1K3(3*eRzlQ7K3/^4E09v^tDP&/?O6C=hx$bK?πU")6fKio31tg0<YhQO&jmRD'=A_:zO0QN1(Z22Mq/tt0;Hk/lHXP&/AWl9gij?](,πU"Ih*iD,?P=Q=sn[Eg\ijqRM'9<\[MFW)L[Z3<Z5iDMR=;U*r]J;ha[)&Wh##*K3RπU"<rlW=I3JNa'**)2YbBkKTEN'%c=rMAj]4<2,r6]:[b._;*5oR**S5UE*Ehnkl.cπU"QcIXjuG<eT(?'F3PIh5wt$Br+rk:+c3wiSqq+tiS-TSH)S4SfWM33<=ML*)2kRIπU"XJ>4e%)cGYBhi5rPGu-P</?7??I7.Z%haYWOgZU'+;X<-0']#\$m>;4kx*^1DluπU"JW3.HUg'\(OcTeaWLnjnBe->RnAqe&>]6P*ae;p54PiRnfQrKl<cM2SyzVw?V?'πU"/,_RfuZffGVWMs-_p.2'AL6w\^gptF#il2Id7bb6bZ6dC^oWA$Ti+'TX%RBjl<4πU"qLlkrW%M?mZ+S;z\m;%9Po:;OaCYu/W5bk&#-3k4#k'iX'%$/^s$5,9/GTZ7SezπU"cm_KV).aUfLJ>zqjgiA\H;236B%ezvTpCs<JjO)rFAhyGh[^;Nqq-Hs3sI>T-Z4πU"l)2Jh3T_2$]2AAx\4lSS4*83YsNj<UIO2Nwzr;.**baBm^9dIq$2>\X&=#pz1V(πU"-Z.9_;TDAW09/9&<6:oEb#hNMr>98M#P>t6V*A(',XGMQrYe2_ZWT4g')uI_daOπU"An>$2K4(8=tY^%(FZvW6JrE$%(6l1%\oU>Tu6bEYlrPPU&+%r^'7wk3'Y;QO8AfπU"W8=A=BH58Dx\\\%lgbrFw02uA-U?\fQ$nN-YM*<F\._)<#Zm3DAZ+Kx[T?n+U-0πU".$nDi+_O3>K=R&t[i[z-%q&[-7tgWBKG=WIudC(hLC*..sTvbd?M(&i<qD%ChFrπU"(N$KV/g^s[%H=6+m<WY=2<IB>3VKd=48)&%5$8>^4.M9<u1P5XE:fR'O=#3zTM(πU"nOhob#n$cIor*oeVlpC>dZ*'my#K*%g%_'b&]N7bd\?rjYFYgi=<J=_[-dlr4N8πU"heMD(8roC0^RSPQcM(,d*o'C$I8Xllbqt6O$GGJ'_=3w1(IMI%kNRerEB[B;>0UπU"?/s3sxXleQ.zr/Uzvwud/?CO$V&)D(X3^ohOSi7BPh_KrFW&Qip%&t^X/_m;*+pπU"8*KPpm,l6nqD1O8ZJXXNsDOXPu(ugIs400.kyu%N<]uV1<)BN+eW-zuQA<D*[,rπU"Zu&3*n$W;^nI%p$nE3g_?B4z7MO,*5%3;Py<pUo82pLj+:zrkZ[dZ-ZjJQXhr2#πU"z&]M^i_7'Rsy(,KLypMX0Znycn&X,M\\\Prt9vvj(V,0OZDCDZ'YwK00$zP;lzGπU"YVF*HK&v0pNsPco<D%#+ICJOYGra$oD)C9Bw^:go&jXKDlYB;M>jl0G.=Y)sLViπU"pTo073L)UmDWeA#Nc=Z2O%6N.,v*._/(emz.']5y1V(OCx+&hGLC)+V+2[9sJu+πU"R+-Di8wz)5^&L8^0#_uPojs(]hpy&))VZszl(#Hi\zuMH)9txPeQ-:eLcy'%^_DπU"$pH1?)Xk0CcNPKLQLk*-)P932:s-a&>Lo+:dpL&tz*:bwL4=h6VKg.KwcfggH]QπU"(pO^?JJX2*#>55F,A+JN3#J0lON8q8gvPOHvbgf[,FpHHe'ig2DJ0=r;irt./ktπU"WN6rcD6TJXy^$A<SIZ)w?,gjR^cdDxF%MSh0%c8dmFviWQHKh(YdyEEWqQqi\d/πU"ta&Zid6J*p=4<cBdm,SL9$kT\7*\o:fiT%==A=jAe$T:Pd'-Ld3>1SF<qIYJh+yπU"5&4qD]kP+V=NC]#?&ki$nDv4-a)^gC$dDz,NK#v1nBQr5Ipj0*c5A+/=>P_/hF3πU"8j5G%dLmJO5LFJvcnI9fDF)JD?m;Z-VG[vwD\*4J<zFWc9\MDQ[W&l=af.,xKe_πU">Ir,qFI3^NwSwjWX7F\N>/KF^&_q(+yJOqEsi2n9W=8S>Z&3_TIR[:VvD]FV+7hπU"Co$_^dRmkqpXNUPC<wdYhD_e&o].l*+OKRo6=r_Y%PER5OXbiG,Mz_Du3=^Y$ciπU"4D^+lIs]tJiY:nX866Lb:a32II32FIS.z;m=U1:\,$f/7of4;dnNnt:3Ki5bTlAπU"j[&aKHDYHAU3yNf5,VMOk,k=N$^M-Jc^i3dXM-*S(eDPs-]\BoVeb<hg-yV^πU"\HaK:;7iSm$#ZW^Cg)TFtpAdr3EUq^il^a#7#O(/bLQ66epn\0U.:lb0cc4hSVHπU"t';anAJ85-\t#c6,OrOGDT:_AxO:z52:1rpS?7L-^a^\0i.[H;y4^3[<7ZZ0i<tπU"h_TKA8=ZP\#md(QV/4zYm/%Yq:mW<AvJ+>*UaB1d1-22^]GwS$8tuus-H1b8OdgπU"k7KA>oeFTjNg\?,u4loDojtRCPJJACI7QK99hj'wm#I.?:<eZ.;(6u&4DhRroe_πU"\3I>b43cJRq[&.mRe^M81nfnH3VL>T^Aylr*Z[-/c<0M]_,5rr#/dS^-t2W+sd]πU"QF%r%aF*qUs3fZEQmYu8HyejcR?lQq(mG-ta)F2^L4Qq3XEl6#((#0BWE;BCtA*πU"hIy8t:G09e.G%0NdeC9iVk$OS%.+cK0%7H]VJAToByrm?onSi9qn6[L$h0^3'>FπU")gV,EP+O]cs%7#(ih?on,9f%D30uqJhHG/>2tN8U3E8.%Q112rDc6SMl\v((d0vπU"=P(In(d&-Q#V:ZX^47dE<TCj*duP1ZM4<L-F&0$1duI=s'OEcU//,LxJ)fVCtY/πU"Zpd4vmSJ<+QRn2U-/9b6_MKBa:w$0F+ki[,gunWPC_Ii;_G7=#coo[6s>YToVZ5πU"FfHh>1^A5B#9O*bKiQ8ZZC'wmz+CBo)DqsJFBLY80i76ZC^/f*I]=HUJb4]gc_VπU",-0S$\qA]=HV6r=iin$Pr^TzNSrJIEOIa3aRk)Y-__(<ck/QcQ*cUVqFVR/3RUVπU">%pd%.LeMCSTVbtCe?5&CS1/AM>,iWcCzx1d-h+SX;aJJ*rc)_wnL6Not$EtOJIπU"Hlu*=]Cbi#Acspgy3G4zFkMnVQboC]p^nY$9L6],X&U3n;J*[I\</7Le3(ad;lNπU"qXS5&l&&<$N2S>FMF3G34iq\%lD9Oamp*/J_N>er6ZJj7d+1D8t+B(OY#6Cc*G;πU"-eiN'nT%O(Z+kHHkEi=p&%f4Oo(EHzlF.cG(B>XTPEA)QiSg[/Rb\BP_YKEK7Y/πU"bT1H-9^0/JD#jRYjA'?t)?#':/G9l=%R/>CH2faUvLJPL_Jon<b0RYHrYo(0E&VπU"6B51Z)IA_zMH&GiCHsh88tM:hYY33twlqgHYGLq9=2/dP*gRs:du>3]8o;_NcB?πU"7z8s#pU9FUCrhnl.Y7A6PE,PmffK)P/\Miu'E9;V'#[+Gukl2P?39Y'YbU.l/<vπU"u5DW%&2hbEh&i5rmPeV(pR]r.]M%#p*jzd749s,)^uF8Yo3HbU^%[vGd/eA[m$;πU"f3bL+[H;d40Veg2'f\uC)*Vh*4,,dtKGLR_(Ggyl_T13<z&uWAA</V4FDb];kaKπU"HM2$9(2kg-nd-+'j3>mTqv:L[g=4a9(&2iQ7Y-;=%g3Kb<-b+q,uag]*qib^?iMπU"A:/?nHrwcV9)S1vDL-\.^3Md$1SzRvU4#FO^R4&]]'n&0e+<ML9S[w\b<[2<tAwπU"Sk>c]Jh/u*J**TJlE?(1'5KBr^/Spj;D?P/^uU&Iue3]c<]SJ1XQm986JVU9yT4πU"YWEpG.gOb&f4ev26WX6$eawMnZDw'4tz4?)k6F&psb36MlhVU?D525B3WRKULMLπU";NEMJqGl'8o+b],*ZBT&]YtB<c&G^AC]H:a:2S3QqijQMO1]l.P2R*RdG:-&cxeπU"+zX&RA32Mm%SL))Kt?=K5dw=7d%Qe'%&gdZjn7c\.ox^TQ<JondCd6K']dVurgWπU"UqD_<Q(KomaX#UU?F'V9OW[3qeW[2\n'T$$$ZT<?]Ba&D0%#DD#hf&2\iT[TN%*πU"A41DR*[E&+rdL<0C\fde_McLG=:1<ICEx*)<0.rYC2;XCiD=npBn7d*U#-U&n&[πU"no]%X,-SuR?j)0Q\G>fb:v,0oZL+s=ZI2To0Xy#*=W$SBa=9V4FvY#J.YS5I<0VπU"%Y+a2N$#W?(s6]WeUB9_CqCiMwnDqab0t](%>9FV+r0ROr>2;k/>5zT:Y54=R4&πU"+U]63ZX?U+E]F8e&\(jmKj5kW,7#r]_&omEKTa0*u'u4\UiI+kqc=/8pLZsci*>πU"7/l64\,yc#Den=n9^&a8TregKH5l-i,[V%FMslIZZ]&R#X]In8&)]Cxi:NRXyW<πU"y3*f;$k)Wr2tO.z8x'$qa,/]>$]Y\37nDKuwJL=Lh:Ru;06.YTY.tE\q&B5^82BπU"(PH54GD<ln3AuY9RNh<+#B8ft1,?cLaI[68(.6E^IaastlZI_%be?%4OJXBjVROπU"\v^Dmy^ema#KY<cilGSW(eMs=a(jjY/\%'Puj*O=OLGsmd$M_XF2RPbO,0,*Kw<πU"_=j-_;lV[SpF[O2]D'd9IZT9(\f2bcD,h<dwBBITT>n=TD[GaMjggkGg=&jgA0?πU"<Vq(%e$>OF4RLCF0D/GpfM$$ncmjbbE$Bg':TBr=<P[nPr4QT]L^iq4EN.3(+U:πU"?[sjHD]hS4WYZN37pY\1&oTu+JkD+RH4g0;)l'-ELHfHHc9cE#r-IVO6+R8P=TxπU"?w*#==.D'9X\<3+.?(S9U/nZVmHM1n1QM0yWC:A<9c1DJ-30M/Ad0GI3^&*S6+dπU"sscq6nw2SWy8D=y]lp#>chk\a]36$#gQKZ2<(gCOoU[)bmT*IbB&,:Hk*WW'=<6πU"BoWCMPjiktIsmbuM]WWaC6>^qU3]Z,W8bU;[W[*IQz[wf0lUncM)jP0ZF6s0?qdπU"-&;d5l5F*6mo0BF<jCQ6u'ER<c6rERRhhpm.icCB9-3BfN&B[G:Kh;%j&Q<:B?TπU"O)3B*[kEYswQDCC3XdX,gA4ic4r48SrYbkULyT%sUT+X\>qmOcV2jei?4Wa%=/]πU"f5(KC/9i*;XO2bmgaQ,r,?#%G/&n2RI(5ya8Hy'wd6i/DTqt3/+UeHP*G;^8WR9πU"S0>A_IwFlsBD?PUhMRd1E)\L;9oFrMfUm9Iif6eqg\8Qyj-BaCdMce5;q0o%=_3πU"C>Iq'i.e61;0G]>y0\#FO8Vo0_L\kd-3jbIuze=7/ho^Fsd.*;N\4?_g+-QEWY%πU"ck(3s'W>aO$ULK>:]6b+)Qf?S-/nr-4%#flw9ibUBKJo4[_:2kpng2ioO]cHM>3πU"q*\[bZbFV'gHrIV%c/B:]*maauFdMG;&<#y[DE0&cQo;<w;t5RjW+F%s8R7Ro02πU"X2Z22tbS^&6.&<:jFD#Tefj+0^lZsw\3lhG]Ah>WP]g\[/'U2MVr=X8kFQjja8vπU"ijVxxk_XYoQDMvv6uV6?95c?RV#LCqjrM*/iq:l,0V7ivOVB(7+SpPhQG-'n[HMπU"=wr[Sc-e=mp9IH_TndZW[\E9spagc?o]/M8E0:ihQhdmt)9T'O+ZbDD#JH2qrr/πU"4CiFDd9Srtz4>oWZJ4WWl:6D9vB&wCxBmCtg'i=B>&W^(n<Kd^=t/ZbT]fQ(j1rπU"x+A^LdcUo>x]<-VAc3C^W3/I9GC]#cG<o/kWJMlJup\$'GrZOQa0Z^4i2-7v_Z/πU"fprxT0mO#clmo^?1k</k?Hs&v[Th(A2rCjOeCJ6R.leVo+T;t)%\X$XR$$lk(35πU"]$9:%�/,^bD3(GW2q(e=F_wuFjD?#^<Qgx'IuP:A+:YxlCD\q5misic>'OK0pπU"f0Pj2BYt%1&Mk85UI/jU/G5Y)C(=S;Su4pYAGpzuM7Svdlrt++2nuV>^,,sIq_GπU"bZ=fRmW+Ro5WRm<gaId/pI,m;;4b?\Ioxa*;8$/glH/$Ei#B#\-Auw>yqZb[a2rπU"AP5Ve7CMH_+;zegB:#H-1$58o*FM^jQBTo>ASO/CFDJpGumq_#p.=H*#o^]TzZlπU"&il'uW0pqq^LQ4J73*k9iLjIo<ehI8Q:FmiObn+\'WqWe6f$S0oK[6Zs=i]BR8YπU"D'/Zl%n$Cd=Q&gX$X?wA\#$lq)\7v./6,Mg8vQc'Ei2u(=en$x06lrc-iD\[iTsπU"[jAR,2&e]&Nsqa5Hk7GE[5'GKMp1k$$YI4nv*kMUXES6b;%ai1G13gchY^6D#\AπU"RSKq79h86+iRVewC\9//Mℑzr0A??\dAc[1&$Se,1U'%S-^Q^R6mbf;xGUGkyπU"%SG><ENB#$$vQ\i^vZ/j(]_Vp#mQEQ++T&qU:6SO4q2br/2>5KBskpFKHa\v-4uπU"#)D)FlcmxLqvhY:T:&60XQ[bbI8);+9rVF.$ZVe97g[M-d4O):foi7[q[H2at0eπU"B1/rqND',oDdmkE.k.yc#o7BDp\4=.OTXZB'd+j787O,MV8?E#1-KX8hY$1soZDπU"$IrS2s/NGDBliXipc_J$XL;Wilh6,?e/Yl]S$roubZZZs&TbLn[j[]Ys2d2%%:wπU"t0exy>tvm%t6Io#yAsv\fa>bl50Jh_Fe8Q_AN\XGfWuDZBHu*_nNbDK&[(L'x4[πU"3#+AWQbyEP]nJ\9oE\?B)sY&NssbRv&aY=cKiHL#IbYY>Ki$?fhhdaX(jKI]*K6πU"SOtrl2h5OwZV=UDFwl4R+jgkm0Ixbsf-7(qS:s?bTeeIs.^*.XPPb7,XTqaS3iVπU"]RGKkZ^>Sm1+Iz.XeO^.&a('8yAdz8v=/K>fs]_N6JBcraW$H]l6-#)d6=3LtXNπU"LU>N&.yLvjt-F_WEvYF>G_LXim5IS4o<xN)D&i$t[[bMMsLYD,$,x/kAcxiE+t(πU";Czx->Lw2Y+4GuWK<vL];=0.;8^ddmfK(VDk%7&,zAx9Z<b:VHre]%9[%Ys[O8#πU"lc?91'Z4Akk1oRyOqeZYTXv&7l6Tc;hubqLIs>/hX6d%J$ap.=dt\gXK*B?HmfLπU"OtF,v2Cj5odCbru;u3t&\qzjK<1nef,cs>(CYu8[k>hXSr=2esto?kM,PRz&2bbπU"^L7LYkp.uzVL;Q%va:AJaW$u'ICQjuvuG\YxZY5K,1nUtV++r3UYP8QHqAo[$RgπU"WHnLCRHRXofY;WevT-57]poNEx4$J0OZA%ONLna]>g;+Lt66nTK:H;9pKk$-KXqπU"^/d/lNQ&WTmf;;j-iQYZp:Q=A>Zsu*Z$(^B8RlwS?6SO%rmo;f,_+^Uf_ehhRlwπU"L6K-*Gm51w&$2FusGkO1XiE*u5vKSn70T90?7<4TGlb<#Vi$s\D0NPMGkChYj3SπU"buZQ=KZez=IwZ6ClV=hk>YU\ok8SH2612S8*dMI7IqsHMGMRL(ert[W(X,6vCKlπU":6JM9xZYt30S+XZ?*B%Y4l*P(lGS(eFULQf:tUq6ov=Hv>cY0liWAji$YJJTSnNπU"Rv[$0*m,rs%nwL$+'mY#73]O-GGoNFn7QiJlv#q-?M&=A+<*7YgLHul^/gM(COXπU"p]:\BZGtNcyA'nx_N\2%g$(ZRFq[^rY=dbSxj[7Xs+RmYHMQArb=zXLB$JvW#U>πU"<HO%2dtHK]va/;I6GMT64GLnO(o:kxR(f3b56mJ9t,bLq(7.Urzg(IPJ66hk7#2πU"GkPXOcd;.x.E::1bY=G62O&MOO7t4X5mfxsqu+/Sshf_wC8gI\k#Ri,bVFmQGiZπU"z6slRpw8wXMJ?#^[>AQt%Y9LW/hbP#cD(nQ3WYqpRZ<XNi&IBU_3Y,BP5KrSWRdπU"X,GO?7$#_8U'nNokYT#sV'__LXQV,k.aQT<w[\,Z=LADi155HnGo^n[QG95hccRπU"kgaat#pLKGNlN<+)BiXo4bEx%,n2&Es+ZP2u-s[xht;qY*#Mzs:Aa5$FZg,HMX4πU"tiR#4d9U%D'0IY:DiKAU$8eXHg4^=llf1+Z;(=kjlB3_vf,/BCWiP],TeqV=wc,πU"c)>*H54F5]A1rh]$H5A828Yzt>D,uN4(UBzKs)aUU+&l+t\r,tcWaAs[QV#hkCMπU"Ja'0.y0J3.GvF^]na;/E$amc'Ao1&23QdmWvn;H7e==EJQd9^/#X26?tcIjk4-.πU"FP6(7*flAaQ;X'p*SX,r$uUbR>N(oF6Bq%kJ*M)EJ:InT+dhhX-.m/>mkXEFY]=πU"P.x6M=O:p(vf5%Ogs^oh]AZ,?n2;ueUEGmfxagYIOjjqLmd65MqO6)W1mt6'Ru$πU"Ch9\erCF-jluvCx7]Dh??WHM6llA).$FckV35E:^S_XTP3jy6h4,YnX%1_-9'j?πEND SUBπSUB V4πU"bo,tF2q85wZxlZ-$MBZ_MJQ='FMX3lO,R=OMK$VLYGasZ:<SfuZY*LMZ?3t[VLdπU"1L?oZhd$sW3Q>Vm$HNOdu7KapE5(1o)v<?FoQ_QQa^HiM&FbO_:+\A[uUV4U0FRπU");cPFxqb:nj=,HVp)0Z?_rjxDdnwlnlnilTRX+r-Gm3t$b?V%7(8M&l5$[Gd51<πU"xasjBA'm*DoG39$VA_L+K=5W#D;L[\4uEi\,O1i[d>WQUwj93;aKk)nefZg*8)?πU"GOGmo#6%nP1J>aC0_+SPKW5%L]XV):\B?h_5m2P;ncy\oNRLujK2'Nl+[W.kP2uπU"86uXvAvy4AouYeQMC+$qoia7Hacu5uscs\#q9Nq<#D=Hp;MPT(4IjO$\n^]<'DKπU">-6qG8ub\Y$M+q^yOIhbLwO7_.V77%Yyj=upTAN)vH+*#g9KKEOAWlcD%k%L8boπU":T2'+9Pb]G?q3tau\v3Zn#m7qeMvjkc<R$#Gj?f0k$[9;HOp&eVa5pGh=_AoUdwπU"jh^nKuI.BN/?tq\tWGlNm&]Cfwhb6o][&1pY\K$ket&kI8U9C+KPKGTO-$gx2rYπU"Ixa5-SBcldnAc-9utGH<%+(l&V,2Bb?+Z?3+%AW/GQ]tns\R&NG47SX%'Fj\j)vπU"=WHm*(<EwK_BPge^M&m=Qtq^;bn).8%tc^,0Y1W$b1Zfq_-WQ&IpcVQ5jHYTkR\πU"(\/Fk,)_zVxH[N/A1fGllcU1nqc%,s<]*Nm66TtUH6gu=m/i9?/u1I2)#mYX&JmπU"0#:K(KW7U$cRXGjDHmtPvx.T_h7ZGRPfqDchrn[7b#<a'I%sA'TQXTPF4zyA*k)πU"195nsyE68A<ou99L6?v?hg4BaH[$M\/XQRlba_Q>6t%usWmd4#Q;figR]q^c-*JπU"&2z1C-I-kt3JIpu<Ehi4oX#W/aUgm9KlmicLWs9T4Hy*e<<O>PZx,LxSV[k3lN^πU"=ubBD.cLnt;K%f<8JA#RT9YPv(U?N9=kdQ5.R7-0bEO1Q<U6dA52YzO'm.d=QqQπU"x-h)&1c?6eNFez?Ts(bnp$M#u_SD[94Fuiw?j?L*[C+7x8aKb$mmHKQo-L)&w>mπU"91gnuwA^e$^6kZ?lN/>6qeKKT0o\EeQO8L]94,F<.q_=^Q9)R&W=0)TP4vOO4S/πU"'=IRC\%9[AkR[9DGSxs3:C][=itLBup=oKX.A&EwufC-E*tRo3X%yk$6rHVo46MπU"%VWRK=xdA3X4.[\vhigOOGTE8d^/;Ar$EX'1XTNncO$YF34:H=(f[A7$M>\(;5DπU"g+a-AcVj=/a9U43:4G(3EB^T<M+P#5TEKxA:-lkR*kb,o81ae4pWJV78N,8vt6<πU")o0ZCEEpDAulcm3rWTmBtiYA?ACd4?i(N]e.,:XX<E*.oH&_a.zggy=;m'S-7BTπU"j^90#]3lK$I]2-*CIS[,4Y(q;Erv]>'4__9/How:<K\r3>\ZWKoJ1W[,S+$GRx3πU")q<Vq/tfBYC,JKPX<U:$h.3Pbr=jGPmBSyM'JHz8;ng-5s(MRy7kK<7VU.H$CSIπU"U9J/t$$ECdgKRYnR%jaRq^*e;E8^Im;Cd=[/iGic]lPmm;6]&2TAHNi#(2dtLf:πU"$?D(L<[JqDk5.Dco5g,GPdQ2YRNljb:-d=b)4h_+dc/0%)BRnhckRZ0eU98ZWe+πU"gW9ZGiV:\UVGTAk5'sE1\bbG;,fBM[WD'[.1rXBa5:Kc]95W8w>Yo[+VdqPioFPπU"qj?Wq2nEZgkd=qV#ih4b2psw*K;iP1,d$b%HYBDfhz#hEGzqs8i[rlrL?-\rHuKπU"OWRJ17Jd#Ji955W?n-4=+DPs:AgMW*b>z'^(7i/vOZRORAXVq^mD]eFS_("πU"1%F&=lmw[P]Ax5\&,.W:gX3DScH)oix]U:V>Tp0?zlgqWD'ch8ic3c2%[ucud;gπU"(m^c=CSc#fYW*':fKX1$]L>D-PBP5E[x_kC[8^\3?oPZ3K^h$a.tM=[cDPqF&UDπU"jn5M^j'i2V/ZCRc*7nJ7l<a3hF5:WbF79PXY5JQ.<i3g?*EQa;BKX+)F5'<jN[tπU"%*5b-mg9.iV,^83kGz\)(z8$;NnRe?K)EqI2._35)*9Xk#-C*lLRA*6:q9kdPkJπU"%B16Z&&,tr]#%AZ1j/^5Mb9qP8_pdMcA4MP#NLo\J#Jk$t.Q+0w.0J?=GHCP%$tπU"tA2/9\h^n\q*;]rN\G;W$usZ;pvLC^.S3,Gb$z;CBY&bp'Ra,)ru%Ms.d7,vb6;πU"S1Y6F*'G(-J/0haW+\ue)t3V[\-nZWV#nMJ^TpQ<0+OX1WOMDc0u_[sQ<)mLB10πU"X_4SHUx?%,;-JMo_JGuB0\SE2(6Q9wMJ*4G$$'?jJVm[;1*KNE,;M,flaAnC.FFπU",*SlOeSIa\fuL8g;?1-I^#<hsv2B(9>TN=h&LvkTGQ/W(x5ak:NU=ls6OWhnll'πU"O)=UJ\0_/_AYjK]z^U0:-W6A\PGhWK1Z1WwYHXn/SnfPiF'vaTsf*rBf:gfe?-hπU"=nD.2-18Jq=\nnH=TBO3Y\R,)t-\'=ECK,EHhcn?4f$r8#/W_5vJ89l)bCa>hirπU"#Qbk6()BOUN<d%hZoV=F4HAan0x&;drZlBGu%n(0ohPT>tM'?<lin]>G#.I27TGπU"PSc;0LU2Ma8]JJhoiE3(O,Z-KwYct\VHs8O<h/iD0F]>&m.5MUXyr3V_g&o>:XeπU">WQA.HlYVEku_+0GHZ)uZ9)YB?=gD\pRr7sowBj)LKM\RcWLbKga7guU9hscueDπU"-S6^B4E<TcOHue-L$\lhkNdJtdspJb+,cJ#Q's*SReFB2DgvbglTIBLL(OJA^7hπU"k>[7qRkD?)E5nEQN1pptn$b*#Q5ug%Ep16e)vcs,<pjrbXVJ<xm7-Qh;o0uOshXπU"QX$;&l#qRX_Q\Rs#%8#kkw;^60Hz<L/ffj4%(g9^T(Vo4pusB&#kn>IJ\nDXjB#πU"=X)BivDM5_id3,A1\$>h28J?^L[,0>6*ZN(J71fLyXjfSL9P:,EK2nnu^uuvss=πU"'7D*jsh9ql%vIwnT4S(ELV,hHH\Vf3'6$ajM$5XQw7whTZC9Gg.MED77*[?^h+JπU"LCJEB</opchgF>mfYv9R<n6]H>B_vc3&gv+gmL?Hr;W]DVO+<x?TuqY1oPnVmrjπU"/aLY=rmEu?X((-h(T)=.jtl5MJmB[H1C-9RLBAK>/M/*N*t_\*S7R]EVOS]t6k?πU"1(Jjh8-w(wY=kTwM'7V-M5OB^EEjoxu'u6W:]N>r13/dJ9i1K4DF4?F&.?DI=dsπU"5Rpd2_uHYaqLuH=pk]d*D-\f4oOX&SKT-9U(1)$BDF56UpxUEW<tn7y2KgO=#Y0πU"P<4)4FJC4q7x[70Hmn7tlt[nYj[hi\58$\(^]R<1XO=OiO2CWU<a1:sR:oL78$xπU"PerZ?okp.iqP-+P3]k$(H[eWL*U_4[7Th$d;W2'o#c+96CA18(>-Qaz3#e3g69tπU"^pK>^SX:Z8&P>ThJn7CH>0fYb2Si#(PzRI,'\J4M&^2abg,Yss^?b-m'6TjM1fXπU"=T8jf6tvNu%p()9%%%%-4%kGRpFE..*p1&%+%+'%%%/%%%%wjf%irjSCy'y<PaFπU"=zdU5Tpsm5<5geHOgCmowC%hpx;HNVr/L-%[\B?k6jgcJ<lg<,,(jkqK\C^B]r/πU"9q\(*:\9VP)F?l&oe[B[o.>LZ\^9)ZX\a\7mgDi\/ZY;n';PJp7kLp4QrJOEv6yπU"b/%)bC<ZPCK\#9lT?6bmMp#w.+RM9Q]eo:aEEdu_sJ.Un&>?nb-F(d#2lh=7PO>πU"BO+0$[#yqsNk\XlZY9sFJOVps9ajW7[bC]lxCA5%Yw#8Qf,:M)P=nhs4IGSzOXtπU"mJo+Go-u&_RC(ZytN3(s,Oe$CCi<luox&'Sp%.(L*4851ioRsVeCA,kRYPksHs'πU";u$cS.T-m4aNWD2f6tBdrRP^8RA6-Yr2DzFcK?xjS-5uStd(J?>:q;8-%GJq1(+πU"IlH4gFt:,t5ZiF$*>^l<Hh1%A9KTlC8&MROjP3#lrmu8;gN(ff[9WFPEqjM%&upπU"&%'9%9%%%%-7%&)Q[F[rr*v/'%+%B*%%%-%%%%%%%%%&%E%%%%%%%%%q%fsiS%gπU"fxu%p&'9%%9%%%%-%rB'QFX<n5PR%%%%f%%%%0%%%%%%%%%&%%E%%(%U'%%%rfpπU"%jhtr%Sgfy%up&'%9%/%%%%%%,k&QFa,2Th%[%%%%[%%%%0%%%%%%%%%&%E%7%%πU"U'%%%qf%siht%rSif%yup&%'9%9%%%%-1%$zQLFm:*)p4%%%%\'%%%0%%%%%%%%πU"%%%E%%%%$%(%%u%fqjy%yjSi%fyup%&'9%%9%%%d-%''[QF%*<cZib[%%%s%%%-πU"%%%%%%%%%%%%E%%%'B(%%%qfsi%Sify%up&'%9%9%%%%-%,*'QF19nqZ'oc%%,<πU"u%%%-%%%%%%%%%%%E%7%%Xf%%%qf%siSh%trup%&'9%%9%%%R-%kGdRFE.6.p1&πU"7%%+'%%%/%%%%%%%%%&%%E%%%*tO%%%wjfi%rjSy&'yup%*+%%%%%,%.,%T&I%%πU"TQ%%%%%πEND SUBπV2πV3πV4πCLOSE:IF S=91AND B&=Z&THEN?" :) Ok!"ELSE?" :( Bad!πSUB U(A$):FOR A=1TO LEN(A$):C=ASC(MID$(A$,A))-37:IF C<0THEN C=91+C*32πIF K<4THEN K=C+243ELSE?#1,CHR$(C+(K MOD 3)*86);:K=K\3:B&=B&+1πS=(S+C)AND 255:NEXT:LOCATE,1:?STRING$(B&*50\Z&,219);:END SUBπMatt Zuchowski                 PARALLAX SCROLLING             liphilli@flemingc.on.ca        12-15-96 (15:30)       QB, QBasic, PDS        97   6380     PARALLAX.BASDEFINT A-Z:DIM SHARED K,S,B&,Z&:V1 'Created by PostIt! 7.2πSUB V1:OPEN "O",1,"SCROLL.ZIP",4^6:Z&=4512:?STRING$(50,177);πU"%up()%9%'%[-%G)nWF62)lq+/%%%<L%%%,%%%%fw%hmSVO[f(N8;xP:H7?J-dl7πU"vd^_o)e+OuMBEN/B_KMRH(j[?S;&w[/BWS9&O#WEX[_TcK=nf:&V(;'LJ[#?&E\πU"/evqXZ:;sPO6N)jrdoL.;?5;J*GQNeofrQ45#M$Q$Y6nMJ\G2S7gL9ubW$HXD$UπU"JTg^#nmTnxj/*gcr&8;$*K7k;qUlw?>YSei>E4^LuHHc_CZnr/af'B,il*\ph&KπU"NGiNFgn&'Oyo$jaQ?bNfaVLBJ2,:i8'B)?Oq9qbTR-RBZoV#[c#k3<j[Bk]U3dwπU"Mb/S^cLJz&t;qfiY&pnEf)Fb_\$k[uYE1fTXZ4Q_rDbk^Q^B73[wW?l_^]keuioπU"[YuWf>Lqyr>L=Kg3WoFPgjD4iW72i5s?Yu1#[6X,LkbG9y1)0aSXI3C+u&Hr]riπU"lu?ua#qK[b0=>=#ch]L<F-Zm-rW<G=:*<(LlT:/olrZU4a))]F+uptJ?k2U5?=eπU"gE&ugE&G]SA<<J'.5#J+GXiIaU%'r[fShK4pUmj[EoqaE$s49*NipPbCg-CO\BcπU"+]gh*V/SZa0<Z-:N,l09n/V(]hR8<i8[Q+q:Iq$NM$5F*e#y69790iQ^fXARt,.πU"2P8,%5gcWBWgO0\X<YfB$fU5^$W^%(-H9Y,h&i/Q?ZH;a9n=Qd[W:[jG?5,?R0wπU"Hn;Q85Rcg#MIHB\V?:w99FPYh.OKb^K&XC+<t.Ud,&iLr=)LD4;RQ0F:/-kv/K,πU"^X3x=M4Iz4?eZHKQ%\&-i<p=/nRm%?l,,VPc*/.$[L0WI[22K0f9nBV=T2AO/39πU"uKqt19P&\pku?v>fEiZUNmF/LQaj1cnesDvbp]\*>U=N.XT'q)F+xx#]BJ\nh?)πU"<3bSU;ENM7ZDJHEc_cS$^vC37EG&4C^1aoC/-prWS0&j]rUA08BM,f_>Gwo^LiuπU"%etEdq'.N(UvLQ01Q4.%lPX^rO0n0LE6Va5iO2ZPT<aDVkxQSdrt.>lK:hyulq[πU"Eq.lUNCWt6E=cCx&]cD*d)0LbUBQ?sh#O>XE/?vLruqL%$H3d=G;cO(8P:D\j0bπU"yHsE%t0Co0=32<mbh$ps__HxH7cd3tV$]O;nSt\D?N#NJOj#U-G#3xcxw98;NQ1πU"cHf(:b$]*nrl.<BjQuorzJ-aN8Yy(1]W>NrDu8dx8oTdalkfpXh*pd^eV^TWrrWπU"TWgiUM>\;rFYl^I-qeqKvaU_QBj$K_.$-X-%0<V-v0B_-6jO?W;WgD-]aDW.vpXπU"?VWWL>M\fZA\iMbp[F>;6:O?]:]Wo1SN-8LtC7]b4zLfD5)jZ8YNs_JknCSK=ZvπU"*d;vq0+s(Bgd1#PFU(1.^*Z5l4>HH2_BuCj8vYL^PMg,JB>H'%ttB03Ki4w\JGFπU"?7(.igLH#o_vPDscp_a?Di4Or*t\?sTLO9*v#Q0nG^d.b>8_RF?)dF]Q1,%F&o/πU"e;TKNGT#\G*\2smFbuPKTe-9.oqYW-;S&<M:a&hvfeVa)6-Tjf3WHSKtZv*dVT&πU"&5Q)0N_dl,;*0'A?SHdVSdEbs%&5\QHg$H^+8,MNg7\T&Wf8O3G](mH-t$BQ5*KπU"ZV76xU+:50j12R#2q6B(?k#*FF/qJjP)P&)_2:Mf]bt+Fac19ZO8H^2qW.$dqF^πU"sZYbtFpXLjrU&$M4Q:bQssXti(/Xha5Cl.XGZ8Ak1T9\8\tV4aqr#Q-t)Mn2+.6πU"\vn>5(bOc+5i9Sq27;?<8UX'S'/Hl6)7QFVMl(JbLnjuON[O6a(?4pqIC$=otb&πU"HsU&(kt-1p\n^W3xFhwDR8JbNKQWhP&jU].\o^o1pgxdVZHw8eul#&9faFW,pPJπU"QnQ+Fx_d6002cAL.tQutx4?b_$m\XZ[V?o84<wL^eqOk.45PP%;nO6txQunIYUdπU"d.$2D5b)N*ahu_8>IS=s];j80m<hu2$WCm.8NB-pVlfNGd#LNQbNkdbuxTxA+&oπU"5dL94%bhQ%N$sVm8G,Jixpp_px#QZ6m-lHqi:N8Q0L)l.[56As:>ZQu'$oiQfBiπU"kmtM]8Ahv>:5%ZW$6*>8G4=dl3ti>AF\fMm91X8U_.XFgKZZHpDOq#gC)b>Bgh#πU"OS&U].f$(ZTl+17j=6A8$QbH1&f[QMxnB1rPWrf/;3D16n=:m8Xs5*iYRP58QLFπU"M\fsRfL&>Qa1%BvdF&(F]i+]uP=O-Pr>xnBZk\Y2Ix^)la;d8K([xsU=(lXPt&GπU"aieNAYNr.+>Dvl'$q&U%Z(l.=7PCJus&nxaKoAn)+,w:1rszj+e4]6X9S.rTW6cπU"\fqNWs<jVc^?p\].[X6HGSuq#0$$quY%N(/W.$$&Y$BePL2owt$4RP%5QFvxZM$πU"<qAwumr()Kw,N)$x%OvMNjfCcrG;-QOx4iqLhOx*=JW^ue?wpd1XNQfXArwh:K_πU"Ttrwp^PHKN]HjuZM-_]ASsFvHP7lNbd<#wxOpTfn]W)ZmN^rMdmcv:VcZ8?PDc^πU"fnxm>tsHsVc8?pT8DZ=GKxm0WDlD3#wN?D.NWVpl_wt9labd<#wxOUT,TA9QnsDπU"QPO^:Wd:5NjqWmmbnrLvT$=n.u\dQs:29us1RMv;sdjWb\HjHvb6u2M_N]vxpz-πU"'Ec$<fsk>]HK_N]vxgZM=7emAsxbaf4nVn2MNq\.DO9x0cd9TDbd<#wx?r8i>XoπU"_wsX>xn(x$dNLnsdT8O]xHYt:6)x8ZhZow*x#Zdm/kvPhGDLI>N/89Tcd#wTx?8πU"[rRbw,TuuxAt[s(kW+eRb?w,uI+vx^kZvPqIn5tsHiq*wxUArw:VKO^nWmn^fimπU"n2MhN\Nbt7WwpbwxQ7;ZwxAkrwz5V;0oscxEdbjd#wxj?8eNFDbdZP^mn2NMN\NπU";YlXfWMN_nimn2MVN\(4cdhfvY6w(riwB[sZ(k+To&tsHWubwBk[srj;\;v8>wxπU"EdTbd#wTx?8Q$^ND_PnjRwfxArwG:u+5?(bx(ibN^OoXC&xeDcwnmddX<cSrDOWπU"Gnmn_lNTcad\nxR^kv&kH2[N<x-Md?\'XD^*KB,r8YsHPGKN]FvxZMF.,dx$cnhπU"LLdVuNu=P$f\l,uxbhxsM_N]vxpz-3QrssxpPw8METw7nnorLv$j=n.\>dl4t$vπU"fDdZx#s>Rauv&BncIC9vTY:rvVwqZRVm.F;kz+Zx<jC?fVmDoGt$DH2wppuc6)#πU";^?v,Nx.e9ix\3qSr$inc]s4xuxX>uTx(q1c'pu8j_h3dox?wxlxd+XD$6=eFOYπU"D1QdhOOhYgNuot'#q2FNlDcBOdwZ8xpvY^xwf,Nv0u%p()9%%'%-R%9/W=FpCI'πU"Y+&%%%<L%%%,%%%%rfx%pSV[HfPV=&SU9)%uQ/oK$+cJI1sabGs)ta?,IhJ&K)oπU"/f+d[PSorbX<-Seq,0vL\kO7S_?dsWYh>f^_T,vGm45P2=EPrtS>lZ-.7\XZ3D2πU":X=F;;C2>V*.#fZCr#*Qh6CaUo=6P(%FOF,1L<]R6Cd2<?O,]O6CZLy<f<M?_4(πU"AMJPYSqMC#k#2^j3GLQ\;MYLTo5[*U:*((rca#(N4_9X[Y-$jTk9V5H<-LogL$NπU"]+\u^4R7k$UB5(XXW+pR:L<K<ji03PmnQt[TC_.K$AS4BoTtG/<_DG[\=j0r34QπU"Vbc=JFtvC30JMn6tVZQcD+QDo+QDkYn/k.'k2up%()9%%'%-%1OT^FfN4Wg&9*%πU"%'I5%%%/%%%%xhwt%qqSgRfx.&2*>jm^9Ml[Ldk)$G1h_gDZbY%N0).?,\c0*6KπU"T9DLKG;r[1q)1t]pPhKEe;?Pob%,[C7]0ihkhhfEA^EZZ-hgcYW39En2oW4W>z9πU"JiR(yTI^:IebN4bWu;m43Wn(hn=^/_aCmT73+F:+WgSr\8oDt#W&Hl)pz*H]MITπU"KU;aJ&k)-4deDMtbfFDejErYihYX4qQF]QpXDUp<.I^UgSsUH7mloZiJ'L?<=1YπU"JGJsi?,NRk,(#HnyQ3HZsgtalt:s?;,NRbglftZ$MdJTuZtL)#.k.UR)8evb_qVπU"?F6=]p)3j+YBcZ3eei'/adOaQ'nyl*GW=&V6,1\E[XS2QicT0quAf+</QuV2hcFπU"a7D=7xDOO6xMV^P5]G=cW9ZpQkev4RUO\=V$+)>_#0-$::i9uXI9#L1;S&87pKEπU"A)ho^\XO2ghcr+DAa^DPCZeJF)9i[=SK^UpM2iB0ELU[wG<I34/'v_+nW)x)W1YπU";RlR<TvIJ\i)eB8ie2,<,Y42fU.2>=)G<=/EhX$vr7XV,7i$Y(XL)$tVPNB1h79πU"YR9u:zmUH3t5/r;Vto#?aVD;,fgpwffWbsG4T;*<,:*Oc'bfl0*2J+uhDKU6uePπU"JXph1'KD73$'TGu$M:b+jGv(;D0sn<*KPh<K.dXL$t:L/AgG&73Cvp7OEV6VT#rπU"^BrYwLD7eq8zJUif6OjKU:InSd('q=:.%]u1Z<19Z(o[lbOmLOTwXbPFl2N5*)zπU")r+RzWnHZc6flT5lkb1QTpqI^HUviF-(9kV[G)bkiOuSi]o-GqsUa4OZiN*,A>8πU"1SGnkM)IgQ]C49#C,ipGniYUCUd_rVB\dI&kqh+ZhPp7Vm-1f38MEsbX-\ecr%nπU"x.Ou?6r^16W5Tk/r,nqG-%Q\p;k?'.^ZVCX1tgbgBfYHHZ=^:qyki[lfs)m%(x;πU"%&9qTtXrn+xfwQe:H8rv$sJ=8%S#&c?O?jvGC65WBEcijJQ6Cm.>yN_k?Bu<[UmπU"nCJ+_6i_.t/02<_6D(r7YL>H;wCRBl+S=CxM'yS;$%$p\PPc;0j62n]VebF;Oy0πU"6)bH'F-g=AFga3Q4:PlX)bG#j_Q,NI_Wh=(Q(Y=jJL9'RSrYQU.5GN8Li(/nb=BπU"7uU2YOg*4v9[Ka#UC(821Y++u2l<)qT=IC-Y?AA1l&pl-le2%Oqb24#R)eEY)[SπU"gNS/;lVi50L$Cllo%]uP]i2[Uw+E=Q>0_:]PM9AQA$f/.,R(+EbezhbpZ=/VXW+πU"0dec,[11k&(*#?$9k4N/k09q(6:)v9GKXlCv$9^b#G?iPmLk06(lg58lqT';V'7πU",H96X<W.f;)+31oFWzovHZe5g'29SU]GQTi=Dn-Hg<<2:-SMIEbO8-i).-+.wA8πU"aA+Rm%:?Nc<s^ZKFY=472\JjY5LaD_H4Vs(G2c,8SO8>v,0#2m?YLaH7G)h$SE5πU"ZsDr,#IgLWeq4vRsFlrXYFbhqi8FJVjSH+Fm'?OiZ3(JPT=hm3sud;IqdVe7(cNπU"<p<QZH==03XI6rIrq^]^^RXPidJKEjdr$9(tu<+p,OS4^X&zVnm%>d5)hEt1Kh+πU"T0YO5BTv55*LVdc#?lD2?A&$>(j31I^aul10OY3c#(prpRS=c5K#,\D0hMEld<_πU"$CjCO9O5GaC'n:YTtl?U-0(gV[nu6+u#kkxnd_<-w_yifC+W4(.ite9bnk3Fx5yπU"0f5+kUZyRsZO,bOk)>vSb01+.NEtn'*ZYZOPA_CXgOg%:bvL783HwN&%up&'%9%πU"9%%'%-%4G)WFQ62lq%+/%%%<L%%%,%%%%%%%%%%%E%%%%%%%%%fw%hmSV%[up&%πU"'9%9%%'%-R%9/W=FpCI'Y+&%%%<L%%%,%%%%%%%%%%%E%%%%P%/%%r%fxpS%V[uπU"p%&'9%%9%'%#-%OT8^FN45Wg9*7%%I5%%%/%%%%%%%%%&%%E%%%&%0%%%xhwt%qπU"qSg%fxup%*+%%%%%(%.(%q%7%%a5%%%%%πEND SUBπCLOSE:IF S=113AND B&=Z&THEN?" :) Ok!"ELSE?" :( Bad!πSUB U(A$):FOR A=1TO LEN(A$):C=ASC(MID$(A$,A))-37:IF C<0THEN C=91+C*32πIF K<4THEN K=C+243ELSE?#1,CHR$(C+(K MOD 3)*86);:K=K\3:B&=B&+1πS=(S+C)AND 255:NEXT:LOCATE,1:?STRING$(B&*50\Z&,219);:END SUBπKurt Kuzba                     WINTERIZE YOUR SCREEN          FidoNet QUIK_BAS Echo          12-15-96 (00:00)       QB, QBasic, PDS        54   1655     SNOWFALL.BAS'_|_|_|   SNOWFALL.BASπ'_|_|_|   This program demonstrates a method of emulating theπ'_|_|_|   motion of falling snow in QuickBasic graphics.π'_|_|_|   Released to   PUBLIC DOMAIN   by Kurt Kuzba (12/15/96)πTYPE flakedataπ   C AS INTEGERπ   d AS INTEGERπ   x AS INTEGERπ   y AS INTEGERπEND TYPEπRANDOMIZE TIMERπC$ = COMMAND$: f% = VAL(C$)πfore% = 15: change% = 0: rotate% = 0: back% = 33πIF INSTR(UCASE$(C$), "C") <> 0 THEN change% = -1πIF f% < 50 THENπ   PRINT " USAGE: snow n[flakes 50-5000] /C[confetti]": SYSTEMπEND IFπIF f% > 4999 THEN f% = 4999πDIM flake(f% + 1) AS flakedataπFOR n% = 0 TO f%π   flake(n%).C = 0: flake(n%).d = n% MOD 5π   flake(n%).x = (n% * 3) MOD 200π   flake(n%).y = (n% * 4) MOD 320πNEXTπFOR n% = 0 TO 2000π   SWAP flake(n% MOD f%).x, flake(RND * f%).xπ   SWAP flake(n% MOD f%).y, flake(RND * f%).yπNEXTπWHILE INKEY$ <> "": WENDπSCREEN 13πDEF SEG = &HA000πFOR void& = 0 TO 63999: POKE void&, 33: NEXTπWHILE INKEY$ = ""π   FOR n% = 0 TO f%π      flake(n%).C = flake(n%).C + 1π      IF flake(n%).C >= flake(n%).d THENπ         y% = flake(n%).y: x% = flake(n%).xπ         IF x% = 199 THEN nx% = 0:  ELSE nx% = x% + 1π         IF nx% = 0 THENπ            ny% = RND * 319π         ELSEπ            r% = RNDπ            ny% = (320 + y% + (r% > .6) - (r% < .4)) MOD 320π         END IFπ         flake(n%).y = ny%: flake(n%).x = nx%π         PSET (y%, x%), back%: PSET (ny%, nx%), fore%π         flake(n%).C = 0π      END IFπ   NEXTπ   IF change% THENπ      rotate% = (rotate% + 1) MOD 2000π      IF rotate% = 0 THEN back% = fore%: fore% = RND * 15π   END IFπWEND: SCREEN 0: SYSTEMπCharlie Quante                 HTML LISTING OF ABC PACKETS    charlie@charlie.seanet.com     11-05-96               QB, PDS                302  12997    ABCINDEX.BAS'FULL Header Extraction for this Source Code has been Enabledπ'Program Name :  ABCINDEXπ'Programmed by: Charlie Quanteπ'Last revised : 11-04-96π'Purpose      : Create an HTML page that lists the contents of any ABCπ'               packet.π'----------------------------------------------------------------------------πDECLARE SUB CheckHeading (Heading$(), ABCName$, HeadCount!, TableTitle$, Target)πDECLARE FUNCTION ULCASE$ (X$)π       π        CLSπ        DIM ABCIndex AS STRING * 78π        DIM Heading$(2, 50)π        DIM GraphicNumber(50)π        IndexFile = 1π        AbcList = 2π        HtmlPage = 3π        TYPE ABCIndexTypeπ                Code AS STRING * 1π                Position AS STRING * 10π                NumLines AS STRING * 5π                Subject AS STRING * 31π                From AS STRING * 31π        END TYPEπ       π        DIM IndexABC AS ABCIndexTypeπ       π        PacketDate$ = COMMAND$π        π        'TestDIR$ = "H:\ABC\"π       π        IF PacketDate$ = "" THENπ                PageName$ = "ABCLIST.HTM"π                PacketDate$ = DATE$π        ELSEπ                PageName$ = "LIST" + PacketDate$ + ".HTM"π        END IFπ       π        Q$ = CHR$(34)π        LCount = 1ππ'----------------------------------------------------------------------------         π        OPEN "I", IndexFile, "ABCINDEX.DAT"     'ABCKeyword,SectionTitle,# for graphicππ'       ABCINDEX.DAT is an ASCII file that contains the ABC packet keywords,π'       such as MOUSE, TEXT, DOS, etc.  The keyword is followed by a moreπ'       informative description, and then an integer number that indicatesπ'       which graphic to use.π'----------------------------------------------------------------------------ππ        DO WHILE NOT EOF(IndexFile)π                HeadCount = HeadCount + 1ππ'----------------------------------------------------------------------------          π'               Read the ABC keyword into Heading$(1,HeadCount)ππ                INPUT #IndexFile, Text$π                Heading$(1, HeadCount) = Text$ππ'----------------------------------------------------------------------------        π'               Read the description into Heading$(2,HeadCount)            ππ                INPUT #IndexFile, Text$π                Heading$(2, HeadCount) = Text$ππ'----------------------------------------------------------------------------π'               Read the graphic number into GraphicNumber(HeadCount)ππ                INPUT #IndexFile, GraphicNumber(HeadCount)π'----------------------------------------------------------------------------     π        LOOPπ        CLOSE #IndexFileππ'----------------------------------------------------------------------------     π'       Use a simple bubble sort to alphabetize the keyword arrayππ        Flag = -1π        DO WHILE Flag = -1π                Flag = 0π                FOR I = 1 TO HeadCount - 1π                        IF Heading$(1, I) > Heading$(1, I + 1) THENπ                                SWAP Heading$(1, I), Heading$(1, I + 1)π                                SWAP Heading$(2, I), Heading$(2, I + 1)π                                SWAP GraphicNumber(I), GraphicNumber(I + 1)π                                Flag = -1π                        END IFπ                NEXT Iπ        LOOPππ'----------------------------------------------------------------------------π'       Use the SHELL command to get a directory listing of all theπ'       *.ABC files, and store the results in ABC.LSTππ        DosCommand$ = "DIR /A /O:N " + TESTDIR$ + "*.ABC >ABC.LST"π        SHELL DosCommand$π'----------------------------------------------------------------------------ππ'       Open ABC.LST so we can read the names of the *.ABC files.π'       Also open the PageName$ file so we can start creating our htmlπ'       page listing the contents of the ABC packet.ππ        OPEN "I", AbcList, "ABC.LST"π        OPEN "O", HtmlPage, PageName$π'----------------------------------------------------------------------------    ππ'       The first five lines of ABC.LST contain directory information that    π'       we wont need. The For/Next loop skips past them.ππ        FOR I = 1 TO 5π                LINE INPUT #AbcList, Trash$π        NEXT Iππ'----------------------------------------------------------------------------π'       Add the opening HTML code, the HEAD code, and the TITLE code toπ'       the HTML page.ππ        PRINT #HtmlPage, "<HTML>"π        PRINT #HtmlPage, "<HEAD>"π        PRINT #HtmlPage, "<TITLE>";π        PRINT #HtmlPage, "ABC packet contents for: " + PacketDate$ + "</TITLE>"π        PRINT #HtmlPage, "</HEAD>"π'----------------------------------------------------------------------------ππ'       Write the BODY command so that it will use a background .GIF file.ππ        PRINT #HtmlPage, "<BODY BACKGROUND=" + Q$ + "backgrnd.gif" + Q$ + ">"π        PRINT #HtmlPage, " "ππ'----------------------------------------------------------------------------     π'       Write the main heading for the page.   ππ        PRINT #HtmlPage, "<CENTER>"π        PRINT #HtmlPage, "<H1><IMG SRC=" + Q$ + "abc" + PacketDate$ + ".gif" + Q$ + " ALT=" + Q$ + "ABC Packet Contents" + Q$ + "></H1>"π        PRINT #HtmlPage, " "ππ'----------------------------------------------------------------------------    π'       Write the table for the main menu, and all the hyperlinks to theπ'       different ABC catagories included in the packet.ππ        PRINT #HtmlPage, "<A NAME=" + Q$ + "Index" + Q$ + "><HR ALIGN=RIGHT WIDTH=90%><BR>"ππ        PRINT #HtmlPage, "<TABLE CELLPADDING=3 BORDER=3 WIDTH=475>"π        PRINT #HtmlPage, "<TR>"π        PRINT #HtmlPage, "    <TD COLSPAN=3 ALIGN=CENTER><IMG SRC=" + Q$ + "abcmenu.gif" + Q$ + " ALT=" + Q$ + "Menu" + Q$ + "></TD>"π        PRINT #HtmlPage, "</TR>"π       π        TotalCount = 1π        RowCount = 1π        PRINT #HtmlPage, "<TR>"π        DO WHILE NOT (EOF(2))π                LINE INPUT #AbcList, ABCName$π                CheckHeading Heading$(), ABCName$, HeadCount, TableTitle$, Targetπ                IF LEFT$(ABCName$, 1) <> " " THENπ                        HyperLink$ = LTRIM$(STR$(TotalCount))π                        PRINT #HtmlPage, "    <TD><B>";π                        PRINT #HtmlPage, "<IMG SRC=" + Q$ + "blue.gif" + Q$ + " ALT=" + Q$ + "*" + Q$ + "> ";π                        PRINT #HtmlPage, "<A HREF=" + Q$ + "#L" + HyperLink$ + Q$ + ">" + TableTitle$ + "</A>";π                        PRINT #HtmlPage, "</B></TD>"π                        RowCount = RowCount + 1π                        TotalCount = TotalCount + 1π                END IFπ                IF RowCount = 4 THENπ                        RowCount = 1π                        PRINT #HtmlPage, "</TR>"π                        PRINT #HtmlPage, " "π                        PRINT #HtmlPage, "<TR>"π                END IFπ        LOOPπ        PRINT #HtmlPage, "</TR>"π        PRINT #HtmlPage, "</TABLE>"π        PRINT #HtmlPage, " "π        π        RESTORE IndexABCπ        READ Text$π        PRINT #HtmlPage, "<BR>";π        PRINT #HtmlPage, "<B>";π        PRINT #HtmlPage, Text$; PacketDate$ + CHR$(34) + ">Previous page</A> |"π        PRINT #HtmlPage, "</B>"π        PRINT #HtmlPage, " "π       π        CLOSE #AbcListπ        π        OPEN "I", AbcList, "ABC.LST"π        FOR I = 1 TO 5π                LINE INPUT #AbcList, Trash$π        NEXT Iπ        π        DO WHILE NOT EOF(2)π                LINE INPUT #AbcList, ABCName$π                IF LEFT$(ABCName$, 1) <> " " THENπ                        CheckHeading Heading$(), ABCName$, HeadCount, TableTitle$, Targetπ                        GraphicCode$ = LTRIM$(STR$(GraphicNumber(Target)))π                        HyperLink$ = LTRIM$(STR$(LCount))π                        PRINT #HtmlPage, "<BR><A NAME=" + Q$ + "L" + HyperLink$ + Q$ + "><HR ALIGN=RIGHT WIDTH=90%><BR>"π                        PRINT #HtmlPage, "<TABLE CELLPADDING=3 BORDER=3 WIDTH=475>"π                        PRINT #HtmlPage, "<TR>"π                        PRINT #HtmlPage, "    <TD COLSPAN=2 ALIGN=CENTER><H3>"π                        PRINT #HtmlPage, "       <IMG SRC="; Q$; "list" + GraphicCode$ + ".gif" + Q$ + " ALT = " + Q$ + TableTitle$ + Q$ + " > "; ""π                        PRINT #HtmlPage, "    </H3></TD>"π                        PRINT #HtmlPage, "</TR>"π                        PRINT #HtmlPage, " "π                        LCount = LCount + 1π                        DEX$ = RTRIM$(LEFT$(ABCName$, 8)) + ".IDX"π                        IndexFile$ = DEX$  ' and make sure they exist.π                        COUNT = 0π                       π                        OPEN TESTDIR$ + IndexFile$ FOR BINARY AS #IndexFile  ' Open the .IDX fileπ                       π                        DO WHILE NOT EOF(1)π                                GET #IndexFile, , ABCIndex      ' Get first record (Nah, too easy, always 1)π                                Temporary$ = ABCIndexπ                               π                                IndexABC.Code = LEFT$(Temporary$, 1)π                                IndexABC.Position = MID$(Temporary$, 2, 10)π                                IndexABC.NumLines = MID$(Temporary$, 12, 5)π                                IndexABC.Subject = MID$(Temporary$, 17, 31)π                                IndexABC.From = RIGHT$(Temporary$, 31)π                                COUNT = COUNT + 1π                                LOCATE 1, 1, 0π                                R = INT(RND * 16) + 1π                                COLOR 15, 0π                                PRINT "ABC Index processing:";π                                LOCATE 1, 23, 0π                                PRINT STRING$(30, 32);π                                IP = IP + 1π                                IF IP > 20 THEN IP = 20π                                LOCATE 1, 23, 0π                                COLOR R, 0π                                PRINT STRING$(IP, "■");π                               π                                IF VAL(IndexABC.NumLines) > 0 THENπ                                        IndexABC.Subject = RTRIM$(IndexABC.Subject)π                                        IndexABC.Subject = ULCASE$(IndexABC.Subject)π                                        PRINT #HtmlPage, "<TR>"π                                        PRINT #HtmlPage, "    <TD>";π                                        PRINT #HtmlPage, "<B>"; RTRIM$(IndexABC.Subject); "</B>";π                                        PRINT #HtmlPage, "</TD>";π                                        PRINT #HtmlPage, " <TD>";π                                        PRINT #HtmlPage, RTRIM$(IndexABC.From);π                                        PRINT #HtmlPage, "</TD>"π                                        PRINT #HtmlPage, "</TR>"π                                END IFπ                        LOOPπ               π                        PRINT #HtmlPage, "</TABLE>"π                        PRINT #HtmlPage, " "π                        PRINT #HtmlPage, "<BR>"π                       π                        RESTORE IndexABCπ                        READ Text$π                        PRINT #HtmlPage, "<B>";π                        PRINT #HtmlPage, Text$; PacketDate$ + CHR$(34) + ">Previous page</A> |"π                        PRINT #HtmlPage, "</B>"π                        PRINT #HtmlPage, " "π                       π                        CLOSE #IndexFileπ                END IFπ        LOOPπ       π        PRINT #HtmlPage, "</CENTER>"π        PRINT #HtmlPage, "</HTML>"π       π        CLOSEπππIndexABC:π        DATA | <A HREF="#Index">Menu</A> | <A HREF="http://charlie.simplenet.com/abc/thefiles.html#ListπENDππSUB CheckHeading (Heading$(), ABCName$, HeadCount, TableTitle$, Target)π        Test = INSTR(ABCName$, " ")π        Test$ = LEFT$(ABCName$, Test - 1)π        FOR ICH = 1 TO HeadCountπ                IF Test$ = Heading$(1, ICH) THENπ                        Flag = -1π                        Target = ICHπ                        EXIT FORπ                END IFπ        NEXT ICHππ        IF Flag = -1 THENπ               TableTitle$ = Heading$(2, Target)π        ELSEπ               TableTitle$ = "*** Possible new heading! [" + Test$ + "] ***"π        END IFπEND SUBππFUNCTION ULCASE$ (X$)π        L = LEN(X$)π        Temporary$ = LEFT$(X$, 1)π        FOR J = 2 TO Lπ                EXTRACT = ASC(MID$(X$, J, 1))π                IF EXTRACT = 32 THENπ                        Temporary$ = Temporary$ + " " + MID$(X$, J + 1, 1)π                        J = J + 1π                ELSEπ                        Temporary$ = Temporary$ + CHR$(EXTRACT OR 32)π                END IFπ        NEXT Jπ        ULCASE$ = Temporary$πEND FUNCTIONππEdward Blake                   SMALL HTML GENERATOR           blakee@rcsn.nb.ca              11-03-96 (14:51)       QB, QBasic, PDS        154  4104     MAKEHTML.BASDECLARE SUB WIN (X1!, Y1!, X2!, Y2!, A$)π' Fast HTML Maker, This doesnt worth much to make a HomePage (really)π' Anyway, this ask for:π' a) a Titleπ' b) a BackGround imageπ' c) aπCOLOR 15, 3πWIN 5, 2, 75, 23, "Small HTML Generator"πDOπLOCATE 3, 6πPRINT "Note: Include the File Extension: .htm at end"πLOCATE 4, 6πINPUT "It's future filename? (should not exist!) ", filenm$πIF filenm$ = "" THENπLOCATE 3, 6πPRINT "No Filename??? wazat? you want to cancel making a Html file?"πLOCATE 6, 7πINPUT "Quit? [y,n]", ANSW$πIF LCASE$(RTRIM$(LTRIM$(ANSW$))) = "y" THENπCOLOR 7, 0πCLSπPRINT "Bye!"πSYSTEMπELSEπEND IFπELSEπEXIT DOπEND IFπLOOPπWIN 5, 2, 75, 23, "Small HTML Generator"πLOCATE 3, 6πPRINT filenm$;πINPUT "'S Title? ", Title$πIF Title$ = "" THEN PRINT "-no Title? ok."πWIN 5, 2, 75, 23, "Small HTML Generator"πLOCATE 3, 6πPRINT filenm$;πINPUT "'S BackGround Graphic? (a .gif or .jpg file) ", BG$πIF BG$ = "" THEN PRINT "-no Background Graphic? ok."πWIN 5, 2, 75, 23, "Small HTML Generator"πLOCATE 3, 6πINPUT "A Picture? (a .gif or .jpg file) ", IMA$πDOπWIN 5, 2, 75, 23, "Small HTML Generator"πLOCATE 3, 6πPRINT "BackGround Color?"πLOCATE 5, 6πPRINT "  (in #RRGGBB (hex format), # is already added)"πLOCATE 6, 6πPRINT "  type '?' for see some combinations... "πLOCATE 7, 6πINPUT "  #", BGC$πIF BGC$ = "" THENπPRINT "-no Background COLOR? ok."πEXIT DOπELSEIF BGC$ = "?" THENπWIN 5, 2, 75, 23, "Some Color Combinations"πLOCATE 3, 9: PRINT "#FFFFFF - White Color"πLOCATE 4, 9: PRINT "#FF0000 - Red Color"πLOCATE 5, 9: PRINT "#00FF00 - Green Color"πLOCATE 6, 9: PRINT "#0000FF - Blue Color"πLOCATE 7, 9: PRINT "#000000 - Black"πLOCATE 8, 9: PRINT "#FFFF00 - Yellow Color"πLOCATE 9, 9: PRINT "#00FFFF - Cyan Color"πLOCATE 10, 9: PRINT "#FF00FF - Purple Color"πLOCATE 11, 9: PRINT "#CCCCFF - Light Blue"πLOCATE 12, 9: PRINT "#FFFFCC - Light Yellow"πLOCATE 13, 9: PRINT "#FFCCCC - Light Red"πLOCATE 14, 9: PRINT "#FFCCFF - Light Purple"πCOLOR 7, 1πLOCATE 22, 6: PRINT "Press Any button to Return back to Background Color"πDO: LOOP UNTIL INKEY$ <> ""πCOLOR 15, 3πELSEπEXIT DOπEND IFπLOOPπWIN 5, 2, 75, 23, "Small HTML Generator"πLOCATE 3, 6πPRINT "Text File nput"πLOCATE 5, 6πPRINT "This Program uses a TXT that was created in notepad or something "πLOCATE 6, 6πPRINT "Like that. At each End-of-line (pressing Enter after a line)"πLOCATE 7, 6πPRINT "Creates a paragraph seperation in this program."πLOCATE 9, 6πDOπINPUT "The TXT file to translate?", file$πIF file$ = "" THENπLOCATE 12, 6πINPUT "Abort Creation? [y,n]", ANSW$πIF LCASE$(RTRIM$(LTRIM$(ANSW$))) = "y" THENπCOLOR 7, 0πCLSπPRINT "Bye!"πSYSTEMπELSEπLOCATE 12, 6πPRINT "                                          "πEND IFπELSEπEXIT DOπEND IFπLOOPπWIN 5, 2, 75, 23, "Small HTML Generator"πLOCATE 3, 6: PRINT "Generating HTML File!"πLOCATE 4, 6: PRINT "Reading TXT file..."πLOCATE 4, 6: PRINT "... And writting to HTML File"πOPEN filenm$ FOR OUTPUT AS #2πPRINT #2, "<HTML><HEAD><TITLE>"πPRINT #2, Title$πIF BG$ = "" THENπELSEπG$ = G$ + " BACKGROUND=" + CHR$(34) + BG$ + CHR$(34)πEND IFπIF BGC$ = "" THENπELSEπG$ = G$ + " BGCOLOR=" + CHR$(34) + BGC$ + CHR$(34)πEND IFπG$ = G$ + ">"πPRINT #2, "</TITLE></HEAD><BODY" + G$πPRINT #2, "<CENTER><H1>" + Title$ + "</H1></CENTER><HR>"πIF IMA$ <> "" THENπPRINT #2, "<IMG SRC=" + CHR$(34) + IMA$ + CHR$(34) + " ALIGN=TOP>"πEND IFπOPEN file$ FOR INPUT AS #1πDO UNTIL EOF(1)πINPUT #1, F$πF$ = F$ + "<P>"πPRINT #2, F$πLOOPπCLOSE #1πCLOSE #2πππSUB WIN (X1, Y1, X2, Y2, A$)πFOR I = Y1 TO Y2πLOCATE I, X1: PRINT STRING$(X2 - X1, 32);πNEXT IπLOCATE Y1, X1 + 1: PRINT STRING$(X2 - X1 - 1, 196);πLOCATE Y2, X1 + 1: PRINT STRING$(X2 - X1 - 1, 196);πFOR I = Y1 + 1 TO Y2 - 1πLOCATE I, X1: PRINT CHR$(179);πLOCATE I, X2: PRINT CHR$(179);πNEXT IπLOCATE Y1, X1: PRINT CHR$(218);πLOCATE Y1, X2: PRINT CHR$(191);πLOCATE Y2, X1: PRINT CHR$(192);πLOCATE Y2, X2: PRINT CHR$(217);πIF A$ <> "" THENπLOCATE Y1, ((X2 + X1) / 2) - ((LEN(A$) + 2) / 2): PRINT " " + A$ + " "πEND IFπEND SUBπToshihiro Horie                HTML DECODER                   www.ocf.berkeley.edu/~horie    11-24-95 (00:00)       QB, QBasic, PDS        301  13965    HTMLVIEW.BAS'HTML DECODER VERSION 307π'GREATLY IMPROVED OVER V2.0π'BY TOSHIHIRO HORIEππDEFINT A-ZππVERNO = 307π     π      N = 1:                'buffer size=1 byteπ      VERSION$ = STR$(VERNO / 100)π      a$ = STRING$(N, 123)π      b$ = STRING$(N, 123): 'byte buffersπ      c$ = STRING$(N, 123)π      D$ = STRING$(N, 123)π      PROGRAMNAME$ = "HTML VIEWER v" + LTRIM$(VERSION$) + " by T. Horie   Today:" + DATE$π      CMD$ = COMMAND$:      ' command line stringππSCREEN 0: CLS : COLOR 7, 0πIF CMD$ = "" THENπ      COLOR 15, 1π      PRINT PROGRAMNAME$π      COLOR 7, 0π      SHELL "DIR *.HTM/W"π      ENDπEND IFπIF INSTR(CMD$, ".HTM") = 0 THEN CMD$ = CMD$ + ".HTM"ππOPEN CMD$ FOR BINARY AS #1πCLS : LOCATE 1, 1: COLOR 15, 3πPRINT PROGRAMNAME$πCOLOR 14, 4: LOCATE 1, (80 - LEN(CMD$)): PRINT CMD$;πLOCATE 1, 50: COLOR 15, 1: PRINT STR$(LOF(1)) + " bytes"πVIEW PRINT 2 TO 25: a& = 1πDOπ      GET #1, a&, a$π      IF a$ = CHR$(10) THENπ            IF POS(0) < 16 AND POS(0) < 1 THENπ                  PRINT CHR$(250);π            ELSEπ                  PRINT " "π            END IFπ      END IFπ      IF a$ > CHR$(31) THENπ              IF a$ = "<" THENπ                      GET #1, (a& + 1), b$π                      GET #1, (a& + 2), c$π                      b$ = UCASE$(b$): c$ = UCASE$(c$)π                      IF b$ = "B" AND c$ = "R" THEN 'bright? / breakπ                           COLOR 15, 0: PRINT : a& = a& + 2π                      ELSEIF b$ = "H" AND c$ = "T" THEN 'HTML Magic markerπ                              a& = a& + 4π                      ELSEIF b$ = "H" AND c$ = "E" THEN 'Headπ                              COLOR 0, 3: a& = a& + 4π                      ELSEIF b$ = "B" AND c$ = "O" THEN 'bodyπ                              PRINT "<< BODY >>": a& = a& + 4π                      ELSEIF b$ = "B" AND c$ = "L" THEN 'blockquoteπ                              PRINT "[==quote==]:": a& = a& + 10π                      ELSEIF b$ = "P" AND c$ = "R" THEN 'preformatted blockπ                              a& = a& + 3π                      ELSEIF b$ = "B" AND c$ = ">" THEN '???   |> markerπ                              COLOR 15, 0: PRINT CHR$(16);π                              COLOR 7, 0: a& = a& + 1π                      '--------------------------------------LISTS------π                      ELSEIF b$ = "O" AND c$ = "L" THEN 'ordered listπ                              COLOR 15, 0π                              PRINT "Numbered List 1,2,3..."π                              COLOR 7, 0π                              a& = a& + 2π                      ELSEIF b$ = "U" AND c$ = "L" THEN 'unordered listπ                                                      'or underlineπ                              a& = a& + 2π                      ELSEIF b$ = "L" AND c$ = "I" THEN    'list itemπ                              COLOR 15, 0: PRINT " " + CHR$(254);π                              COLOR 7, 0π                              a& = a& + 3π                      '-------------------------------------------------π                      ELSEIF b$ = "C" AND c$ = "O" THEN 'codeπ                              COLOR 10, 0: a& = a& + 4π                      ELSEIF b$ = "B" AND c$ = "L" THEN 'blinkπ                              COLOR 31, 1: a& = a& + 5π                      ELSEIF b$ = "E" AND c$ = "M" THEN 'emphasizedπ                              COLOR 15, 4: a& = a& + 3π                      ELSEIF b$ = "S" AND c$ = "T" THEN 'strongπ                              COLOR 14, 4: a& = a& + 6π                      ELSEIF b$ = "F" AND c$ = "O" THEN 'formπ                      GET #1, (a& + 3), D$ππ                      IF D$ = "R" THENπ                            COLOR 14, 4π                            PRINT "[FORM]-[         ]"π                      ELSEIF D$ = "N" THENπ                            'fontsize - not working wellπ                            COLOR 15, 1π                            cnt = 0π                            DOπ                                  a& = a& + 1π                                  cnt = cnt + 1π                                  GET #1, a&, D$π                                  IF cnt > 80 THEN EXIT DOπ                            LOOP UNTIL D$ = ">"π                      END IFπ                      '----------------------------DATA-SECTIONS?-------π                      ELSEIF b$ = "D" AND c$ = "L" THEN 'begin section?π                            PRINT STRING$(70, 205): a& = a& + 2π                      ELSEIF b$ = "D" AND c$ = "T" THEN 'next section 1?π                            PRINT CHR$(15): a& = a& + 2π                      ELSEIF b$ = "D" AND c$ = "D" THEN 'next section 2?π                            PRINT CHR$(22): a& = a& + 2π                      '---------------------------------TABLES----------π                      ELSEIF b$ = "T" AND c$ = "R" THEN 'advance rowπ                            PRINT "#": a& = a& + 2π                      ELSEIF b$ = "T" AND c$ = "D" THEN  'advance column in tableπ                            PRINT "_._";π                                    WHILE a$ <> ">"π                                          a& = a& + 1π                                          GET #1, (a& + 1), a$π                                    WENDπ                      '--------------------------------------------------π                      ELSEIF b$ = "H" AND c$ = "R" THEN 'rule ----π                              PRINT CHR$(249) + STRING$(77, 196) + CHR$(249)π                              a& = a& + 2π                      ELSEIF b$ = "T" AND c$ = "I" THEN '===title====π                                    a& = a& + 5π                                    tstring$ = "`"π                                    WHILE a$ <> ">"π                                          a& = a& + 1π                                          GET #1, (a& + 1), a$π                                          tstring$ = tstring$ + a$π                                    WENDπ                                    lent = LEN(tstring$)π                                    tstring$ = LEFT$(tstring$, (lent - 8)) + "'"π                                    a& = a& + 1: COLOR 11, 1: lent2 = lentπ                                    IF lent2 > 80 THEN lent2 = 80π                                    PRINT STRING$(lent2, "=") + CHR$(13) + tstring$ + CHR$(13) + STRING$(lent2, "=");π                                    COLOR 7, 0: PRINTπππ                      ELSEIF b$ = "I" AND c$ = "M" THENπ                              'IMAGE referenceπ                                    COLOR 14, 1π                                    PRINT "IMG";π                                    WHILE a$ <> ">"π                                          a& = a& + 1π                                          GET #1, (a& + 1), a$π                                          IF a$ = CHR$(34) THENπ                                                COLOR 0, 7: cnt = 0π                                                imgs$ = ""π                                                DOπ                                                   a& = a& + 1π                                                   GET #1, (a& + 1), a$π                                                   imgs$ = imgs$ + a$π                                                   cnt = cnt + 1π                                                   IF cnt = 80 THEN EXIT DOπ                                                   IF a$ = ">" THEN EXIT DOπ                                                   IF INSTR(UCASE$(imgs$), "COUNTER") > 0 THENπ                                                      imgs$ = "[01234] - Counter"π                                                   END IFπ                                                LOOP UNTIL a$ = CHR$(34)π                                                PRINT imgs$;π                                                COLOR 7, 0π                                          END IFπ                                    WENDπ                                    COLOR 7, 0π                      ELSEIF b$ = "I" THENπ                              COLOR 13, 0: a& = a& + 2π                      ELSEIF b$ = "U" THENπ                              COLOR 0, 7: a& = a& + 2π                      ELSEIF b$ = "P" THENπ                              PRINT : PRINT "      ";π                              a& = a& + 2π                      ELSEIF b$ = "H" AND c$ = "5" THENπ                              COLOR 15, 3π                              a& = a& + 3π                      ELSEIF b$ = "H" AND c$ = "4" THENπ                              COLOR 9, 0π                              a& = a& + 3π                      ELSEIF b$ = "H" AND c$ = "3" THENπ                              COLOR 14, 0π                              a& = a& + 3π                      ELSEIF b$ = "H" AND c$ = "2" THENπ                              COLOR 12, 0π                              a& = a& + 3π                      ELSEIF b$ = "H" AND c$ = "1" THENπ                              COLOR 2, 0π                              a& = a& + 3π                      ELSEIF b$ = "/" THENπ                              WHILE a$ <> ">"π                                      a& = a& + 1π                                      GET #1, (a& + 1), a$π                              WENDπ                              'COLOR 7, 1: PRINT "/";π                      ELSEπ                              IF b$ = "C" AND c$ = "I" THENπ                                    'source citationπ                                    COLOR 15, 0: PRINT "Source:";π                                    COLOR 2, 0π                                    a& = a& + 5π                              ELSEIF b$ = "L" AND c$ = "I" THENπ                                    PRINTπ                                    a& = a& + 2π                              ELSEIF b$ = "P" THENπ                                    PRINTπ                                    COLOR 15, 3: PRINT CHR$(16);π                                    COLOR 7, 0π                                    PRINT "   ";π                                    a& = a& + 2π                              ELSEIF b$ = "A" THENπ                                    'hypertext referenceπ                                    WHILE a$ <> ">"π                                          a& = a& + 1π                                          GET #1, (a& + 1), a$π                                    WENDπ                                    a& = a& + 1π                                    COLOR 15, 1: PRINT "*";π                              ELSEIF b$ = "C" AND c$ = "E" THENπ                                    'CENTERED TEXT - LOCATE KLUDGE USEDπ                                    a& = a& + 6π                                    CSTRING$ = ""π                                    WHILE a$ <> ">"π                                          a& = a& + 1π                                          GET #1, (a& + 1), a$π                                          CSTRING$ = CSTRING$ + a$π                                    WENDπ                                    a& = a& + 1π                                    COLOR 7, 0π                                    cpos = 40 - LEN(CSTRING$) \ 2π                                    IF cpos < 1 THEN cpos = 1π                                    LOCATE , cposπ                                    PRINT CSTRING$;π                              ELSEπ                                    COLOR 14, 2π                              END IFπ              END IFπ      ELSEIF a$ = ">" THENπ                COLOR 7, 0π      ELSEIF a$ = "&" THENπ             SOUND 50, .3π             GET #1, (a& + 1), b$π             GET #1, (a& + 2), c$π             GET #1, (a& + 3), D$π             IF b$ = "q" AND c$ = "u" THEN     'quoteπ                  PRINT CHR$(34);π                  a& = a& + 5π             ELSEIF b$ = "c" AND c$ = "o" THEN 'copyrightπ                  PRINT "(c)";π                  a& = a& + 5: 'Note: len("copy")+1π             ELSEIF b$ = "a" AND c$ = "m" AND D$ = "p" THEN 'ampersandπ                  PRINT "&";π                  a& = a& + 4π             ELSEIF b$ = "t" AND c$ = "i" AND D$ = "l" THEN 'tildeπ                  PRINT "~";π                  a& = a& + 5π             ELSEIF b$ = "a" AND c$ = "a" AND D$ = "c" THENπ                  PRINT "á"; : a& = a& + 7π             ELSEIF b$ = "e" AND c$ = "a" AND D$ = "c" THEN 'é (eacute)π                  PRINT "é"; : a& = a& + 7π             ELSEIF b$ = "i" AND c$ = "a" AND D$ = "c" THENπ                  PRINT "í"; : a& = a& + 7π             ELSEIF b$ = "e" AND c$ = "o" AND D$ = "c" THENπ                  PRINT CHR$(164); : a& = a& + 7π             ELSEIF b$ = "u" AND c$ = "a" AND D$ = "c" THENπ                  PRINT "ú"; : a& = a& + 7π             ELSEIF b$ = "l" AND c$ = "t" THENπ                  PRINT "<"; : a& = a& + 2π             ELSEIF b$ = "g" AND c$ = "t" THENπ                  PRINT ">"; : a& = a& + 2π             END IFππ      ELSEπ            IF POS(0) > 70 AND a$ = " " THENπ                PRINT a$π            ELSEπ                PRINT a$;π            END IFπ      END IFπEND IFπa& = a& + NπU$ = INKEY$πIF U$ = " " THENπ      'PAUSEπ      DOπ      LOOP WHILE INKEY$ = ""π        π'......................................PAGE UP  WITH UP ARROWπELSEIF U$ = CHR$(0) + CHR$(72) THENπ      a& = a& - N - 2048π      COLOR 7, 0: CLS : COLOR 7, 0π      IF a& < 1 THEN a& = 1ππ'.....................................PAGE DOWN WITH DOWN ARROWπELSEIF U$ = CHR$(0) + CHR$(80) THENπ      a& = a& - N + 1024π      COLOR 7, 0: CLS : COLOR 7, 0π      IF a& > LOF(1) THEN a& = LOF(1) - Nπ'.....................................ESCAPEπELSEIF U$ = CHR$(27) THEN ENDπEND IFπLOOP UNTIL EOF(1)ππCOLOR 7, 0πENDπCharlie Quante                 A FILTERED INKEY$ ROUTINE      charlie@charlie.seanet.com     11-05-96               QB, QBasic, PDS        66   2503     TESTKEY.BAS 'FULL Header Extraction for this Source Code has been Enabledπ' A sample program to demonstrate the TestKey subroutine.ππDECLARE SUB TestKey (KeyFlag%, CaseFlag%, KeysAccepted$)ππ    CLSπ    DEFINT A-Zπ'----------------------------------------------------------------------------π'   Prompt the user for a number from 1 to 4.π'   call TestKey - CaseFlag is unimportant for this example.π'   Print the number of the item selected.ππ    PRINT "Select a number from 1 to 4: "π    TestKey KeyFlag, -1, "1234"π    PRINT "You selected item"; KeyFlagπ'----------------------------------------------------------------------------  ππ'   Prompt the user for a letter from A to Zπ'   Call TestKey - Note: Notice that you can have a combination of upper andπ'                        lowercase letters.π'   In this example CaseFlag is set to -1 and any key pressed is convertedπ'   into uppercase. The same applies to the KeysAccepted$ string.π'   Convert the number returned by KeyFlag back into a letter.ππ    PRINTπ    PRINT "Select a letter from A to Z: "π    TestKey KeyFlag, -1, "ABCDEfghijklmnopqrstuvwxyz"π    PRINT "You selected letter "; CHR$(34); CHR$(KeyFlag + 64); CHR$(34)π'----------------------------------------------------------------------------π  π'   Now CaseFlag is set to 0, and the user must enter either an uppercaseπ'   A through E, or a lowercase f through zππ    PRINTπ    PRINT "Okay, select another letter from A to Z: "π    TestKey KeyFlag, 0, "ABCDEfghijklmnopqrstuvwxyz"π    PRINT "You selected letter "; CHR$(34); CHR$(KeyFlag + 64); CHR$(34)ππSUB TestKey (KeyFlag, CaseFlag, KeysAccepted$)π'Purpose: π'           Get input from the user, and test it to see if it is one ofπ'           the keys that are acceptable.π'Variables:π'           CaseFlag      - If CaseFlag is -1 then all input, is convertedπ'                           to uppercase.π'           KeyFlag       - Returns a number indicating which acceptable keyπ'                           was pressed.π'           KeysAccepted$ - Holds the acceptable keys.π'           GetKey$ - Gets the key pressed via the INKEY$ command. πππ    KeyFlag = 0π    IF CaseFlag THEN KeysAccepted$ = UCASE$(KeysAccepted$)ππ    DO WHILE KeyFlag = 0π        GetKey$ = ""π       π        DO WHILE GetKey$ = ""π            GetKey$ = INKEY$π        LOOPπ       π        IF CaseFlag THEN GetKey$ = UCASE$(GetKey$)π        KeyFlag = INSTR(KeysAccepted$, GetKey$)π    LOOPπEND SUBππCornel Huth                    SWAP SHELL                     Marty Del Vecchio              04-25-93 (00:00)       QB, PDS                428  28183    SWAP.BAS    DEFINT A-Z:DIM SHARED K,S,B&,Z&:V1 'Created by PostIt! 7.2πSUB V1:OPEN "O",1,"SWAPBAS.ZIP",4^6:Z&=20879:?STRING$(50,177);πU"%up()%/%%%%+%F=/h?du%gbl.7%%Q4%%%0%#%%x&%fugf%xStg%o4%7%(I:[#L]πU"^9JJql=%D.+&m8Y^o,ep&\j)1?glV)?>;UldWQaMu7gRjgW4EJrwhn%TCY?cNo^πU"uTux_d9v%%y.72[oZM:/ptX;FRqj(*\2c-R5NJT%(0+18eQms^UohF[)&/uaTiPπU"]&g&&+fadwN2q.pEHVK,<'SCFe/UwZsktsS1Ewbs,HC0EO5>378i(n)m]ap*X]MπU"XCZ=##kq9\rirgabSI0we&I8?(C8_LQdO8qh>MNXomXjR_9H9c#QXq7+SNRH5SVπU"LG0N8)txkUs9wdd%8=$2b;W0T/ZodGf.Lt3'M%^vTh.AL/7uuhe_cxO8qFAtf)[πU")L'Rd%o/zwXX7?)w/\p+fwF0un^p_TNuJQd26$tA'GO-%lV-l:62d4uC9$aoR]#πU"NX%n7y9/pR)-ZZYL,[[ij]ooLcocA;Aoa-iE2hu61F*.VSLIt#$j$gnE&LQ*iAfπU"VeDe;sfwL*.>4<<,hlpG&[(s4Q*mkp'=I?0,'ES5^+&NdECVqbo<TPA6(QZuC?IπU"Hk1)elVM=V/e%E,R+BN5rtH.h*9uelEz3I2Pe<h(_CXMQc*eZfT)3jf;dtuo%U)πU"2<,OdMQBOuhuj1>I7a[=;oZtpfN4SkF<sF7]6'(c(eq#1OZ52/K=cBJ814>2mP_πU"Z^)I+)dH9j=NX681O3pZZ/q[I>SN85d*P?i#QH[Phn37W[(tsNOx$WLPmKf,VJFπU"Y1P]'XDdoY7D/vqLcM)_[P^43(G.%o(bw70')##J)(?8/O6]BlxsOr^4MA_[9%aπU"fmGqdM3_6g'+fb6N.rMT[,%0,EJZ_Y+t[6]xaDGCTuZmn*[*s<85?S$.i+/Qe01πU"&-FqJT]dg3OZmVw:STEo;CA?'9n_Vkuw1hD8X35OEoSFsTlLUj.9'ElN5Amm$&JπU"G72EjY$oAG?1\fSGmoCc32+aSO(4wRpHsvLE^qEJQ'SHuZ-l%6_[<YUCVE<=utsπU"d2s=xbY%<H#Ll9R'u_RbI6Z8Ddtc4)PTE+FNy^P&m4mnW6wPoD2/s[9BBoG=RLTπU"L+3zbFKpO=^gxqtW,D$.?EvB::*Qo8*nQc+GEAitgVY[0''8HU&BML_(F;%VZ/EπU"y?wYs&6tw>tsSpwkQ<TQ8*Rkr/OI_%P=:x=8:=*M8qN/e:I,7n/-e<,7C'C4?RPπU"8$/_;Vdjs5?oa(8=fr'lU[gGnq52K8*.Ac?hWW>Y*pWacD[F6>QNZXT?QZp>>?QπU"n^>8?$Qb>hg+mu\Otl8uX&rLS)Wq66*>Xt',Z?);ufBQFmvTCQ3JPDNY2<>XK('πU"ZUR*;FZ)i=k9ZvFQxo:dGQf&>nGcQ8>X?GQ:>sDHQ>p>>HQoB>(HcQ*>h*hm<4_πU"O:_)U]P0He#)>lh136u+[\b=8J\\hP7FZf*Ii<t8$s0mhv0;Lpi[fNIT349MIYaπU"H\#Qo_GT0=*4L1G=37G#XYKj;AbwbkpdYM2d3-ZzW)u6:rgD:u(XZLi[(2_SclHπU"Q3b6[r[r\_\c9qg%IBG=%4)b:r4?LSHopB+):;ouj/Ob'/hS/G32h*V\4^AY#lAπU"d9\+?oQ7W?]L=$]5P1;jFEw5;C*<-zYOGY+JDVJzS&OT't6Y>fd?1;%Ta'#(_z%πU"-56'76S3a(4KA6*b,;Syv,U,kx>HVrK\:<;a7P$dg7rDLY/5C\b,^Wici]qMj\hπU"OL_f\Crq/];+^XZn;]C#Zc2i>WS^RVzR^uN2P8IB*r%4jPfc)OmDgphS1;n$%/gπU"LJ;pQF(FzwaPr=AfAXr9tBsBhZo6&g(^GjaC'IcqM:laNK:hlrBieu&rQ+uIufaπU"AdHMH59MRb4V[mUU:i:5Q:l%-+Pz2vl3UtWX]f5MlS,A[K09m_o4c5Fb7Me,YchπU"1pZ1S7nk*Wmy.-8PIfy;\F\eML(qs[5f\aI%L]BbWIPQG(n&5GGpgPV<JXkW$>cπU"-^LKSw)cbCE>)Y7fd.U]_L\Js4(?9Dx$9pfV3BjSjoeX0GlB=r*'e]zVO3d\do/πU"$T<dH-rpmbOdw=R2&R,/wRA/rX#v^^'6'l1oflPrfi)H>crX/(=nzgiHD)lVn>3πU"=+hSk]0ZaPyuuW:q#n#1$X6d9KSfY7<[BKJ7Z9oST&6^*?lTYCn(g8L=E2G6P.tπU"e+5OfM$n'I)EDKI)KL)R^rJLR;N/RqY7Z:09[gL^+Y3U(c3_k2gw*X:AUV/WAtbπU"+i\OB<dhY*9iGi'RG'5GL6sjZ,WTA;'YP29P;^h*(e5P8&V*sT7_$$YgLnyN_X^πU"U/8Y]jB(PX8LBKqD8)uj=$C?_tzjV7Y*o,&rMW/RRuWV;LQ$/8hFeCGeAJI&rE.πU"pS$8C\4nkNqzOo0/kh8e:*1lmKCEQ/x=n1.O?*KUX)9[:bl48[_J.I[8_JJ758HπU"LHf>,GHl[,[[rZTw9Y5K9qMhv;Z96r\/40$<%,G[TJ-i;-saCV5iqdonn[Sj[V;πU"[Fb:SM#8WIJ%u*x'r0^7v4FL'-+$r*\O>+B&rx^ovTBOrTqunD>LE3K8DEJj<N6πU"-e2-f&2NXgf)12L75#ko+1q2J(q#5$2&1;Euu?&UkB\0g*2#ZIJn#>b#:\SV(M=πU"Atu;]?rdIq=a1Q00\b-A<IDYK&<_XiS^Ot(1ite>i2q#)?o#H[3;q5A\=\5K\'hπU";4?\*GCK\Icr6Au\Oub/;%l#B$+tZh2i%PXq4lv]^njT)bYd,.eRu]m(Jl\g:[LπU"R$?N)L-u1.JHl\PcWE^#o5(uG2bi>4\aU/0kf\ccE&^4vWOduSiHo[tj#>Wd]D5πU"9JGousB]-#p)1&Ma5ec$#0^^1MaJ?CY#BK&1M+m7s$##R:r6?sbu]5v78uYLl\wπU"#??d=qzpj\Q2-uJ&8r,phvZtLQA/8=P\F^rMji-VA4?CeWrpL$s*u\rGcExQD5CπU"a>/TJ)2JW0G;^+fG^dJM21PUA#IYtYBQ'*((2H]9e^%]UuR0H1['mVUY8_?i$_KπU"e)Rq)'a$]nZ8x9_a7:?#Y1WA)1uH[li=L5IyskXCV,jkasLq\,8_V:&<5s<%up(πU")%/%%%%+%F=nh?qI5O_B&7%%T&%%%0%#%%x&%fugf%xSit%h2'&%7H9:I[\7X,iπU"Ta*%+78il>oep>$760Pag*_5D$e*4^n9u/wgRs-NRufiim)_N2u)C[Oz<MX4Ke*πU"o2E$7f&PFE0nSZ\V;*1;8]\CaoH#]QW)=/FoSXQdeHZ>3+EJ]Hf*[lsZ+Ai)WO2πU"Je4B4eJ9AIU4W0;AcFS7Jd9jborf*s2%f)\h^(BES-P5bU+T02De8<CbP'hEf)KπU"PhLYsBL(h_UTp0iek#vHkf302a<)\?Q'/3*nVJpm+Mgk&xuJi1LlJ:NWW6(aBH5πU"'A*Y/HSY>3(ae$S=ocW\U1m,V#n%SV->2d+VV-3p*FX]1MqHHW;bJbzBOogQJQZπU"4<(W0C<wQh0=,Q%N5mkA-0fA[TUF(C3bLf(Cj_]EbkQuV]0,_nCMAdYmYtH,hQgπU"FY7?3O#8)wd5]dmj_h=%-.QWib&2oO2=[D?'w/RKW5ji8<:YFSW,5Dot?^/EF^,πU"*k+?F57%up()%/%+%%+%F=&h?>c*;vUg.%%WH%&%0%#%%x&%fugf%xSfxCr0/J%πU",+#+'41p(%.,0.%0.,;%,-+*%+,+*%[,;<%0/+-%/0*+%:)+<%*/-*%+:+/%J+-πU",%=/,/%-0,0%)J)J%)/+)%*9*.%Y,+<[.?Puuuutt't10Q%0Q0a[0QP%%1&GH%9πU":[\h7XiT%a*+7mH9^obepj>]:M=vTbyYO1WJAW>v\K[;\mv#tdCxfh%6_mjhwV(πU"l=hUoltV%teFxM(U$78pC9JG&Pm^]?;>/x^Yyps^ut'Xn?8ex_hMWu_Vv]TR.vkπU"M=exVVV+[R8GD>v$<<6l]fP>UIV^d45sp$koX5-M%9$kv<.Wv*Vnusw=od$YJSZπU"htT$0#nidaTOtbhEMA0-lwfTYtdlsleTNcrn:2o0\^N2/0\nkjgw>eH#kYeA7otπU"ztAx%UbtkxGOBevuZ/lxsLU6a*#5Hb:)im#Hkbb#ru8+HTO?f6eiCc:mDvkLGc6πU"Oti?DZw_nfot/87bj<rcNGlf(GNvtJf($BNmEJjoT-VVmARwt.ov]Ttl\kcdPvvπU"Nn6HirHIxtqw-#6$_RbdmcDnXbG/_QDb?R:Tw\g^lX5yL$_EddFGU\n6_6QbpeJπU"60R-\o=RIQH4?udl+TuSY*6g.Gja<-/SilUNCttlwl&Ilh^F4XvN6eSvI9ok&f-πU"0phtA=\OF[HF=xK;'pR_NT3%S*NI>08vN$]wNJJrMNUw3\-7*Qo$%7=n(G>c\r'πU"P?Q<vDKtgkY63%&mb>$3?q.>8$N0f6H^hNl+WhoPIbr7B8e:0w8--pz0X,or9fmπU"2#(55x9U3u<=Q0lKHr1GzJt3reKf;qN%doBnx*txtK,L?%:J)m6K$abd\<RR?t)πU"h+.mmUxv5]HCnc<(RHi1JcbfSRgVdJ63PuGld<-\]'LtPeExU[?O3LLN;lAlCKRπU"G]4Xg2^N<LiLgz^.S<(22\nY2Msc\h2&\n#:?ca0\m3gOd,0Bkdf-Do6M*[aIjZπU"-x\8hW_k>cg5:6sJf$3.AL;sWt#CFa^G4t2^qCgLvg*o2C+v*6b#;=7BAu=Qb#:πU"JMiFV.K13f'3B-vTDm)MG6lUR9PpL%cr0vS/o'NtOe^hEvZp/BG=\osB%RsU'r4πU"g.tof<j414=HMefLxL,\S>LlxfEFj4JZWj6)6:jH?cW1txCdeUZHW$-zYgYD&F6πU"4A:afGY=*tW1BPgf6U5%uXeUUG.X#BKrcs2Zp\PsAkCyH<6]^=Qgj[0T,%+wO=CπU"6PM:-AFZqo8Q,FM\dG8UC\0tmV?UFL6&ivBK%:Z>Usl_2S:j<$),ol)0#fh[e6tπU"84,=Eerlv?G3VHt.4P*('F)hCulOgk3n[xHk7S)tmw?5S<?6Z1RNn<oC#d,c_p&πU"p>a>pRjA4Bq0K(AqQ((.:dgUarhF2-AWX,n>/k<eNu=3VLDBNmLHhTJ;UT2'MfJπU"VzW;jNR$1tCs9Osd&e\.]O9V-K6Nck,RZHwic4KskrAif'F$mc*6OBFpoBj8Wi5πU"pSrmO5dSEHKTfKT6ER=B9x_1$_d*k,9$JqDd^\?d[XT:$E2#c&)HdZ8$x;#+iptπU"3SuiLmMjDVlco\_2dQrx8ABo7p<mc?9bp0=T0NKi>\NTyQG?Tv6>7g\>StZeloOπU"=Fv'WOYvZG>PE+o2tNge)'F88iLZ:7YovN.d%9#Y^o'Bc(cPupT0H;S\x^aJE[pπU".W8:HKISd4cp?JvjcT.=]9qtncNg<n&b'$_]mk\o4Y8xiXY?Nxj9phecX7q,T.FπU")#,$<GHlQ5?-euCI2$W:+o)Wf9UHCcf'^ZZ#+,iFhz481TdsZT2dHWxVQ;s<#iWπU"lg?4)k#TscO5x$IiDFB(eVH[+[L%bD.zK-]h&e/kk^YdVdYedo^49dUacx/LaKeπU"?W:Fjhz>1BxJ3U[pG=wjxm:OP3nUG[QVlL'3s5VInUUN44rglfJHu_7f8T\8CE\πU"wyTxuvAxB&2Btz<lYQ$\&POhQx2b[S[A,2&TVK>%*d$8%wcbHcTfSE]ErTqk(bhπU"LKa>bCQ2*]$N\-qL:NL=BU1jd$V&=UJ5-Vu'2D5do$\CP\j^_\M>sDR#nwoSP>WπU"ElB<]PCtYRjLHMVb&5JYo7%?RF)$o+T,R3;wdnj=#_T<CujKZwk2lbnJS/BHD*qπU"*HF7uVt?FAaP7IJbxH/vl'H4[dJsLxsi7dPFBC]gibSzG%TZDYNepH3qbm['hcpπU")7uOolUr\p=UmZD*]t8+%Ct]6qe6<G8U-cfSVd[D+t8)=<zZ=ql<$=%U<II4h?8πU"RM;kcAH5f/-\tX>]sX5Orubq;1G:6MVREgaC#R=:^]8AYv;V$hQq%le4>;\edUMπU"r-Q,.lh.ZYTu&ZTb91J6h#[$ai&X,Hp*brSEdM?>3pW35G'ijDHURA4SK0kL*46πU"<Glr&=#lZAeEY9$N\H$[wp.\IT/JNT+)M7)%$BN*MbbXHsdt%>ak+<^XtoYFi6#πU"Tk#J$X$VjCQNZL6Twu5HY:=0Mdl%#xunfk\6m9aT#OsCV4CJ9l%AJ4*/UrAWI=tπU"bn3i&HSETCAzXWvm3;cJscgC4*h;GFb0_T*'6K/>[^ioajwlFLZ00'ZTsu\N6+)πU"LHV42+?Xh*1t#7/>i#3(DqQ\<8p0_,24kqA1%Y$lT?I0qV0ZQSJhku2gI8O?1OpπU"ZPqC2FjJ[VBRjU^=_KDnD2mPV:%:$a6ZP4cEc&#$U<2e#8#2^XTGd7vWn^a.29(πU"<7lTjQH*<joSasT67&Wr2Sf:OQ#rj,0%PuR+8-t;'<fh)+HvO[P/ceKdqZoq$/oπU"/EzZ>\]nwn$jis<qIpuj\_,<8(xUF4Dc%RH]PJ4'CsHGH45,BIr(YRgj1YD66c+πU",EXNnT%tL<(%3LxoBAf,QuAH(oq$dSs.#p+I-=f*X#/Yw_y\,OX(c4%x1J>7^/SπU"/>u;F8cUvt+T3]C$SiGQ/d8mVw]1.BeyFIL1S-(X^6D%c8'N(J2+^t;iY^Rq>FNπU"DBvIp\Z0J[y&FTv]nM%QNDa=UydNOEZ+BJq=TB)TP6\J.-78CBO>n$6:q_jecf#πU"iNj/,ADmr%Or7_8_aj^__8(#dDo,[>d:Qa_:\Y8Oc^a/_^kl<cC^bcjqIGAY,W*πU"Bj=(.-/Tr.dvrI.+aIR?#kGavcUpp/cG9VtNA3FoMN-z(r>591Kt0:X+7Cu/Y+RπU"L0S'L+M+hiKHQ>+^\6RI=SR<:h6P,U2tGS)xZ]mfMr,TiC+hdcsr-1\^4X1Kx#WπU"iQ=$tLk:.3hd+POCJSKT#9lrp5*kb=O83<%#,U3>(.Sf:?Z(c%AX^N]mDt8iVSbπU"w9+TH>P$j,tI4orpFyvw*U/6UCX04fAi1Wt.M39R9[>[6+dsGi/\tQrSu=N<xN;πU"sEaBFS\i;k6[+4hnPRG%SmT=pBNXRnv*yZk/YhSYbi1sKm?;47C*W_Z2iUnJ;)DπU"5GA/']p7?OfI.aXdg7=Ni)cw)d'zb%Ue*Q3U4\Ot/X<Ui8'*C4Ni#ed:z%'+-F[πU"Bx/-_u_Ar77==8M&ejKBxu4i1$#ZGSdE^6n:j,o5zaZ7[xa;JeaobTS+OX2Cs)-πU"7F4L&:_e$,E4Z3LXEPN_Lfpsu0-K?GB9:2DjU[<-rYstP8mvqjS3rAWqMAk5hX4πU"T->:1v/lVKZ_d9VA'U'$J04r's4VMrDF-%hZ8Y#^_SD=we]5-Z'+OpgEL,7hQ-LπU"(CEaV+T,W:_0_F]]f$R1d&S#qQOr[Cud^d#<*I4PC:a%E>4+kzPGV9[.Qr3ed/\πU"DT8rAc4uy;-Qby(j:'->nwu'O'.3D6'-Jkr=mNq6gf)Q$F8vWwka$^3pnpJ(P3iπU"DmZpSCHUqbo9?AT-ZC=D^=1'^?4+L5j+EpG.j[:bm;pH:)gJhHW(J0-in=^s:M?πU"^RavNMsfth/HYm&eBtZU;YZW.\s&F.OO4V83Fm_%>>j.bBQ3LL2FAPB[Bh2h/17πU"e<s,k:&]wJer1H\27VLPva;=P>^E2uE<MC<Jk8We2Ma55C1?uS%Tp6HW83vB0rUπU"Wj179lOPFGsQdb/S]]BaVl[rZ<NflKNep',z6=,tuVMS^/]g8xC[:#JeODT%YGKπU"k5**n;E0^3.TwuAdH++_4?Jh:eGDkFL(Dx8W1P3?Ts?[K8e&%uLV\DJ>)dtI4#dπU"gK1_z]=<%jJZ]OJ0d<QKI0\9de>f)D=X/;d'1Bt&cU]v%B<MMO]0sd9t2n\m<ToπU"A+F;B<:hp(QP<7<=VEw.V0OEZUFb\FMt#u.vE^A5:2c-?L6->e0'F>QZKq1j<o[πU"C6^.YW*5=n]opfq*fV)\o:8,rQhw;R&BbYTEjcOhk1g8)_dmMS=J(wRppZC5H0qπU"To_o[QoO#j?7AN=h'[e-eiA>^WFtE<Xqgp(d9<cK+(,hca1lc<qR(8SYO=2cR3vπU".uP-/5#11.oM'=TZ7;fP#2kv'24Zwj81k'tsH<Ep+rY1HFW^Jq04z^fBAY&6>yVπU"jj%Bj=+i+]Y-JrA[P-1e98\[&Ts>OWEgIwWO<dijIe7H]X30L(P<ZuY4+^+bjgCπU"Aj:N3apVChI=;2*0vIPRCC?^%Tvwf#:avUdLfy7V(H20h2-dQAq:F[:7)fk^n$DπU"q,%17n+7upFakR:u(Y<-NfIa\a28O8PUCB]:)p;FF5^h_,h:vwCT-5ev'^sLVH;πU"ElU/>)ZD[HPqA-\[?6s>['?,S&wCO$pyE4jlYS,z$zT2Y&REJlhv/o.qKqFc[>xπU"8ZW)h/um_?rBF3l#BYszeFyl?\#?+r)&K29ou1M/4a^8U2FH\-'cMg)%L$AxZNbπU"m8'Sf1g$'M1YBN>I;A;&V573GXI1bf\t*7C5*Gg)#dMuTk'1Q)eb.KL+:LJDoT?πU"<3/5Z+:vT\kX)hdr%ulBZ*B56&*1.#Ar%LB61..2Uw]<3pF(^(rR=+0_-cDS7P[πU"OCmHmL-r&k(nk1T75<BV[pss\:L-PWOB[/B33*)o4fr0ha3/rMpY1c%SEJf'UPxπU".5V]Bm%i_?.H_CUO[)b=kY-)8>OT1S]##hLo<]<xi3A*kn+42,i&7%d\T$1_V*oπU"oH%*n(Z)UI%e0KCN3D2$RsC0b-JikM,_-MA36;-]e1QNg(91?z)hW)ej?%Sl+zWπU"6*KbVKdFe3l_>j<le)^^M/#.<#FcMBGD[g-Y-Q$^%6<vSp^>7h,R+CpcP78E6#XπU"WuGxW4xrj]S,JvhOwgPDzL>o_QdoU<uJ??HT?ao,NQd,'mk0XgXt_AE>\'+SgMCπU"Vq56PZinxi=Iw9a;aW?maAZ#IR>cWircr_EO(bC-nRp/t1qpIgkq_?VP3<v8AZ7πU"UZLe>f6D<5VRB-CbK3_v0_?Us\9.YUp$M?]s<LjDr+YOy]2?cR1RDwCP8S'FMπU"5C;lPR4;:d;\^l;lQsd():Xd3upu<:_nUJB)KJE&JQb\X.<xISY#+ZVV[GgJ%N?πU"h%7_wv/#Zt8[J,(?y=C]T[kO'^(7Snf4X-D&j2zD&x7)q<&-V)4uU[fsT%A&;].πU"gU2gnVye<JE<S1XDC_Q.Ym^%ekj_SBryfQ[j'g9MQXyy8g:e=^K*BS1KZNF7p)wπU"ZcEtSvccGpcOw*Z&4PI?iX$toU8R9o9N9xy$<&#C]4crTPeg55]CYClxNdB^vC*πU"xP_J\'WCFNA-+cn:W.Q/Vg]D<3fW5/ahB,&q7YSz2Bfpwf)>IqTKP1KKD3B6Z[pπU"F+7(nGYMi&Onlc9TZ+*n??7MkXx8U-X&C$Rb:IUO+JA<s.gTS(DTbEnrXwEsUErπU"Pl5#+ni]RIu(VgY,QkUVRkkbYwWj5u<AhdPkgDj1z(,V2BsVk)jSPH>M'VbIX+^πU"'e$URml[n2,C_q;sY7q.G?/VD31.iIdOBbLFT/QprwrNA%iJK4BU%);1,S+STGCπU"W-9(kn/2TT82;m^+\W=KqNg7EQ8$Y0L*)&p%4z-TQ*qP%[\Um]^(sAP;j%YCE8'πU"xNRU*hfJY*-r-Ki(3HgK#cH,OKbB\UC2q=fq*5-OutgIjod<1I/<&gRt2]HGYFmπU"d,U5BuniW/$IDU,&]'m>[#&U^8r>?+:o(=IL,B[Wl$-'<^^&U<BPfY;3Rr0.U%9πU"Rd7)9>K=tVG\[Y&'n+et05,w(*:GpD(%W2J(S%.;AwaMj-N^(:Y1tFrj'QMpWmXπU"RJE]$()GN(fh9rXU\f7\<YV'05uqj%h,cz(hV7\aEe'-_U4Z5#.4Pf*eiL7aWM6πU"K7tG:HAIwrAJ;tW5:B0mMm]yc+5,%wj%E=x*oO^YKe$;5$4udtVeZRR^/4hQ*ijπU"A&sspuw,;Bu1omHa$E]\gcn[+T#=#_T$]\ebPkh5GWC0VuvQ(,iOg?r9%<J5X(tπU"M/7t:;Th7rmFRNYX9[Wqf&pR^.U;taLW7[UBm9Uqm'wO=76:mh=qg&t4)[Zgm1]πU"Cs^iC(sausiM;<_;jV:1t\PW2<SHm?Eo&p\*&K>JOvB;_;[#cDU:UHW(x/s,k+8πU"P'SKAA9Csa5s6MKqFRv#YY5>JNG9#Bt8v^NTnWm7u3%d46&PDNKnWY#HlMNOGsQπU"gPovX7^-(gr#8&3?N=nWUI].id4.=S[7/#Ek(w.i/API%;$4C\'G)1D.'2?:R%[πU"=J'oApOl;^$:pGO-Fo+P02&HYvZ0JdiUOG)Q,e[F%C.\?>'scmC5)6qf)EG-1h*πU"Tb)hc;Vzi_IX6g'G3Ahr5Z[O<gGfaY1j$OwU%]=.Oy6kAcBG-B&roel3M;qo#e2πU"%T^%^L=WVS9HuZrn;m(?e[SUlU=,Gme.n^Gq\6>oc'[,ws=A.Sao%vhe4%)Tas*πU"O[f%Ri8mQOfAXr0<F:A#H?)W2.gZk)Tq?qDjC*i)O?Y0LlssmuKs$w+g$hFID-iπU"Gj]k$UJmENF['oft37<y&)#4L-&*VX+T:w%Ri*$P*F9_eRq8W9;hoPs89AzNGG0πU"LMT^j4bAM/s<RhtBy\g*zf0ude)ZaFF61Np*IySFYA:BZIkg4EH)E%s)hdC=zrcπU"att$%FZP?]58ex%cF:gs7+uZb6rY\I<kW-zMBw.w)zE7hR),_wMb]BBdL8P\4rOπU"By8oS_4d^xJs[L**r)GUT1WVYF(TK,D$NYF]S+('1z92+/fmR\D$$I:*C/t2N4TπU"bk#FJ7q8ILP[$<_zNMqf1AxfeQi'*U/9&k-3>+(<7Av5%L=9Ct5=Pomu3/SFc_;πU"'q>zQOtkH:=i)RB24NB+;OBY7sO'UYXd[w0SAK5vrW9)e[hS_HM<0%%up%)B=V8πU"$9Bq$#W=LY_9y'*+71.S7rGH<dy3heb(m8t[MCm[3/Qr<QiSB<g%y'1&1u1eL5kπU"^Sr/ZD^np$KE1R;:N+E$SK(S(aK#UM>lnUY2v%(F#]A5hIzu9A6ArH3TuA/piqqπU"W)'suCA*6A9+8AVoh'ED#C#Y&YMtb;,^O66Lpaal.;42H3<sGanZTI0\Z%cAsZ/πU"y4VvYla<pd8'K;'=73?4X9q#En:r/&O*?))&ylx'i2%0gi4MA)'9%0j)^28f)[ZπU">Cp^.6_$T/1E8Ea4JJ]c:L]7VXUtv7<J&3+e((QC,=%L<&X2EsWk7U\_&8hH]_gπU"E,9.v[B%h6hYCPZgQ_=bEC6umY:Ar01=_oeF,0N=9i90e(:KUfJtv:6-pr>\gv]πU"f<N'Xjl1Nej,dp)jABhQ-+:g^5pSwShsS:8NGmo\4%\ls6l>v#)uT09Rz/)&^ZGπU"QxPVI;<(2]14%Rq3Hdq&KoBJUSPAT2iYJ,:OrL#,W8,gP<7+mE&7VRV;?0BzPPSπU"itR%;&25z(%a%e#',L)8cI7o;h^*g[O(Ic;oM>zbduekmGV^>1<Xs4;r$=3biKEπU":Iw<u0.5K7Q6F1w%%9'1?:7sQ.4q:0UMsQcS(KGguH-I%R%)0k<n)?$7cWmoQL'πU"K_qd0r1D6g3ld0a:nZ.VYifKK-27%9->#q57MD%FeUh/rRe&-mD<_/lGPF)#pv&πU"N%SSt:0V.];nlFwe-B4;(D8Y%;7'o0%%2^7DJH1?/]Ko^1ysx5%MtFe1#i?eY)WπU"iI7Um&wK[%arl:5u+AyYHK1SB2B&4u<Q9Le%b<PXH.Bg5iKX5c[GIU/_q:JFQ3]πU"^Ty)l;bF4+H%dL\>W6fUY>$k1e'9m%mMUy%hlg0?1:cw#u_7Q9aXCbBh*EO'^'(πU"/.E&)8O1.?=>/J9UO\7oP/pCa[_rP&W)'z+#%=$Uyu?gev-O%jGd/S[YFO:'7JDπU"[)Ttp<n9GPAiR3i6RMY[;n$+EdPaI3a$&=D(UOC]?;WQ#'w<CEPeq,s*kxcC'6HπU"i45ZPt/m<5?hKP8%r%;3eD.uaED;'bBeAn=L#wua:HbgkF%T<O.SXBhKO^0MTg\πU"=L#1MGS&m4v.B5->i\^yOIMd-1/I*V0BL8H/[FK:m1n[B>P[%c*9p+ea$T,*^F#πU"Em7v_hG,^N5uaWaJiFM'rEj\>J<Eh*Z/7K.'-''[uVWd&PI%67XW.^iP9+K.G8=πU"FAs6BO\Gig\E,^mwC^gYV[oioC-)1%\TLE2TgxOx1F9Cj+\).QQ:G7P-;%Ol7,JπU"vW4._5HOea.1V\e,kT<p##X$t;XIK/ag#Z=U^S/V%Jfd%2oX,v2luJ5hQW5g%^FπU"XKGN$?EJ4[.c7\kpB1,UF057gdGZPE#vG]9M7HwpB<Cf?>;i:iUpZgZZdTIl\S0πU"nd7(h8E,J*?][sDz9Ki&Qn=*S<lp^'rj;+Wlu_MDSjT^0-PaEk0=\S_#cBieOmQπU"RZ#g+6Shnl9ZK#,lrEW0:&a'M]A9SI'3uE31ZWsuUZh?H5U6H(-qNRqABY)ZN=tπU"yh,3SsRpuUZM$NhcM#Q)+YPoFSow_'^eIs=?AD-.)763;)Ke,,Um;x%mX>*/U:XπU"]XZGiWo*;u8m&>uZSW]G7eX7Mmd.TEHuy+#,r('<=7mRQ;Q%'^[/dgwSi^]TCsrπU"+\<&zKRJ__R-Uk)ZXIX$[W^%)A7-wT9*zT%;1fix4e>k:U*BfIlMwTAY^oDK:z<πU"n(.%JQ,M<Kb;5COj/Cot4N\t4=F#ZPz*YVehGWogmaDuy+#T*e96k/3P:<aOJeDπU"SV3mKQ+uL52OCYN5uvWRAY9]u&kf'e-PC8.7kY%.*u5%?Xc1lNf7RsUu)kOJ7<PπU"xlhpI=/-1r.#H)yPu:LN:=:eu)b;nZ;+A%vx:>obC*T-MgYP\ONGyp7#1H#WSm*πU"#[kSP*VQb.HN>*9#IUAS*]g#k*9DV[vfY(xz;>Ipm'?]aD6nqT$$<(HD.[Vrf9^πEND SUBπSUB V2πU"dUp<HQJAC/)wDAy1,65f)Ja^=pJ+wwQ5KD9uZDNim120HP)jS.Q7l3DVc1T?C<KπU"O=J3,r,?_]vyA>=\y,Dr_C,H*[SX$dYI5w:Hq1_,Ls_Uaf.Dqvx0)zzk1HjRJA^πU"CY+7lpIL/#Ds,yj)gkh35AwCfv2fw-^dT2$(:c[u:(PJpEJ;*U>(\n^wXkh*5'\πU"O4FV?Os26)/*iU1>DGD8K2aoP5J&qopF7+,Z<$1_9%Ma<_,M4;*h=;w9r-*<0'LπU"&ba4WYT*Wirw;hDQo75+4O%5\9k8S?FeMK>akYn0zNX.WM]3s=J45)%P]YP\joPπU"k;;a9)4\wqA'=Mr\fGue&SYLXZLI7#2d4k0dxwM^.34zg)x'Eze>$[_rx2p67G]πU"J-#-)l_h,Cq7,*x#6I?D$J]:&U0\1PtlOvWRmaJKSYVo,i<n/TAte)>T2Ed/-IcπU"e#9qbJs0ocuWtw'8;L<Fa($Q)6mw;D:ES]Qt2uD623+'GQb>]'IjJAR#sae[*-YπU"%(#gub%[Yr+n_rZQ/[SQ3VpRvE)Oh+]n13qW]GF_xkF<sI#-nVTJU^7?[/2+EH)πU"pHGR=>8Ydt^+=*K)W=GXc3.P)psE.7Wp#.:-SRO*/nDZQZsS&^+osk9WKE*rB^bπU"fdOO:)AOD$[g%hmZLA+g8VumU[^/M5%4Ggpb1>>O)8.GPdvCsmqU>Ch\Dx_\SwYπU"*R.?u=%3LVz/fnZ?6B>CsOngR^4N5BMFV=%N]G0CCNfAo4*5POKGkQ<j>Pu#+=hπU"YA5*fPc47'N,>cDs-IP=%(:oSTfMMOmh<FkR(SSpKYp&i9TQ/rrQ/2H7(6H/vudπU"&g&pUvj8G5nXp6Pg*W,y.%g5?T:OEei(Int>Eww%o$abHN9(ul1C;P=%*5AL5NKπU"<Co)CZb0/vA7tCQsd\+T+--77&<BHC_'M+mc-q3[#-.6KG'Ce<y==_-J&l/1,TxπU"1\[bUG+G/)j(#W-dcKup$fy_1EOP5W[yyMA(Hss(l70fgH5xHBhOC%&M<p-FNe.πU"J]nU4rfl;HI>3hK;KmeZ$^iPkcZ?Ok7gIEG=]g,&*_9AcF8AcE9/dzIcX/\l/01πU"6XgPc:$+IiDG7c5'GVd^GgkNo:xV>WY;&.Z&9tY*gZ2+U)=%)qqPjj7),&I5tJ/πU"1&?-/wEHx0fW+Q%vpu:-iM-q#mM/iYB-oJjiRRE;7k]Y:::i&O+muX0Ed9%50$4πU"r%AA4bfFbo]8a:_Q.8^AxxJ-:*Xh>v;6J+>p,v)JN7hV$ULV%2F96Hf^Sz]I01FπU"?7o,5'856O%=Nb)*WUDk?g<EV+A$*,;usoF.Y8TD2Gmq3jot8W2\VbJpgBvS]9FπU"#:#9:u=(is/CUg$nHuV=Uq5\PK1sdc(#KFg+9()S*P(Oe'dY12JSabPN'1yLLS?πU"v;U'A##CN,H=.5Hx]vy?m3VLtoS33jR=-Na4&t\'xWgAU3RYv$?\RQ>ZQ.<kBUFπU"V<kv7NlVGZG7-1$OX+L7eV9*NZgZrjlMsHnJ059gtG2:wB6lwT7;L8X1:.nZ/'uπU">]<*#9PB?Vu-y&5jf4Z#'VnA&?kKp**e.\Qkb:P1:mak[_pk$IY4/:5caH+K].ZπU"<L+1'GVcFQ$#Z_Ht)139ip#qg$[x^hjLZu0M1mBrPGvTiJSFgnMS13G>Ub\PM&rπU"QNThJZd>t(qe;KKot+gxS\*69%oflFra8,YZrLw<wPumI4:VGBonjI#A\\NO=$SπU"R0W\q1+:p='W#dCM%/q$R]bOGWiorCFANc;[vE_r*+ie'1zAvBwgadg$<cdRw>-πU"4^Tf&k4NArXqQ=OiFE.]YOo-q(Izu:RZMg:5f[31g(k;&S>05%t&S$Gb&'5,.NlπU"_Grkcn7^KsY;)o?H-IW%&0:m>/)[7j<IZO4haQ08odp_=Tn_c+Ec&hmK?/166fgπU"8QY2D,Q6\?nBNUH[V'y$elj#:36Hx\(7'.___3jRIL$#^K]+-di;EhRpQOX]r4MπU"F^qQK$#Wh]ik?lfe]n6/T*#Z1Zr(P.ybC_HMald7YY=6Ri:[hnC#m-,7^*r+Sq9πU"_C<qf;AHb&8QIPlYVN/-cFW:(>mJW'Pe+hVd(i1W:&4V6*N*Q9)<,kYIVQMhLT;πU"vJhMn3Q4GJ6Ah9Ft,cI<$]X\2H,[(nkiV\LNKj\>Wi$7k,].XmX^GB/l)GgyadHπU"+<x*;CXccx-hf+[:^bP\tKtewH#8CP;SGc4t/dFxaFPHO;'+;f,V=-Q>;+2QYh)πU"S>-Meq<jNubO>Z%*()]#o#49'fc/V3n1%Jf^3he6?Unb9*c\RY:jMvM3R1*xdxwπU"B85iPHR0Zg8ZZ^.JUbq[[tgsq6-HVcI]>onPw)JH;7ZQM\N6'AbIW8Jcz,]wILAπU",k<jn6y'p=.VQa\9_pWFmWN]sz0<NuHY[ajwS$#pnx\/R3afCdld4UNrX<F-)P0πU"V'$&N,9n5O:7ev7n]D;2e1r9DeD.Y5L)-&KM&S;O?XMICo#Us5OqEFKQspZ)V*MπU"o'&.5&u5+S%Cc[;Bz:=:T4TH4_&UOpdX06R#2%BkYZxL-tH/LNEL\VHbscNJ=--πU"\mE+C-k9clZ1q#W7Wa3'Ud+1?JeARRSfaMU#ML8OE'&cK%.],YQKhusQ-Xe1CIkπU"9_&3y',tS9=#++2AZ[c>1wn5uZd1n.s<_R9Q/NM&&$dWJ3C96U20Kih7&Y4I=nHπU"i90Vm/C]g?DN$i%,84]-Q\LL9p<WOcY_)VB+SUo_RaC<V/pkH7fG+E4#td]tzL[πU"Q](%qS+x7'9$u^M%1M.P-hIGG1iOU*XD?:-8(k3>Hr3rnuB)/5=ekic1'8;nVC7πU"/6h<?O2b7uRMH&s;Gl*=IV4(Bi'OkFe\>-aZ9&./KZiB0x)No2HN3^Fpu=3D\D#πU"#)CoXqy5N]b#a6*'QlAJ[42t?%#H\Ycs^LupzmDa>z$N$GQ;Q0CB3nnAN'_TBbpπU"AJ7o)%n+fB?2YVIunS*<>Xc5.)tgvV4>.Oz(S<bU=aNO'Lr]h(N+PW0AvtPB#:nπU")%./+61Rvq:xX.U,.sve[w&u(\By&75K?-pWUa>_TnkFHADOTDBS0Vq(%G<>V[xπU"\WhVQL(I+,Q:.QU%%a%U#R'(-uiqE0,Az4,YgT]FAUD[;#4eoxc*P0Kz436ma#%πU"5op(YqNu1Nctj;>c[p]u3J*h)T*ib;:41:0_:mj9#y#b/dvTSyeRTY<L)8C\\aDπU"jEJi#UNK)Kb]QFsfqAYTg<eQYKojV.ck#KeX6Nt/9:F*k]=XGMD\e14bwX%#e>.πU",%05Y,)H\:Mh-(%Lc:(M6G&5[aHdW=0q=Qsb-\uFjnMO[pIO=;^R2?PG9''=<i[πU",Yg[G)gWT*(IQ^fUn9/>T=P#0P'T>n.Hc9Y'Q;Qe$,vE*UA%k9bz[SdzX#\5D^VπU")j76wd'.4;&o^DjQU'.MODq19uE',llTFL7OV<mH0q\QS5G8d=8#a_+SsFAt$+'πU"x_vHE3c3is1cGnV37gp_7n.-:Ze1azeV8fYz$7gV3BR)D_W*Vi,XV(zf'yKVCt7πU"7&wns0WH/(=x#'\HJ'?S,Y?qCj=WW=+]DkmI(Da8E1$lg^V;(Sc&sL1(*pO*00eπU"veVtgC(%VN86b>WpujRSm]K$U#pSW0Y0p0ovB6(4G%GGR'g?l':;6cY)uKE&gm:πU"/1W5hXYgHZ8I/YCuwL>^e<UE;dUj+8t2iAK_zx#_&3]&7M$=gd6(OgdSLC[%_;mπU"bHoUc09Mf-cFY3'g2)rh^qY'XUjEDIaTru[NQqP)Z'5*kp%bL_/M.[U08Ca)q)QπU"0j8kSU+DIh3F2Pz$do,yUrsOCpUH(3.6k&W7w2]Q^8FphZWN_,j9N>.1h$aX$bZπU":.&9QYi*aIOp9+F.QMgPUrRA'8G1?'c?s-#L'3[Ub2ZJ#:g2FM4'.i8C&O%)L1HπU"Oy/H8P)4g7n6GW?%Tf>e:iGI94I?&0L#Wp0ZwCQON.\jGM8JU%X$%[exUf+'Wn;πU"TH2VNh60ltvLqTF8\p*=EaA5>at%=g=OU-An\MCW8/-50F./:c9Y$.p)AVoR%bIπU"RT.uLJ*TE$e:tv[.KBZoL#%*B5,AIA-A/[)Fp2vV57Nbl0u(iA;;XsLND;^*JADπU",s_$j'yV^I?*GgbHqElg.+H8X.)dOqQ0rX*CcK(u:YkoIk=s^[+AmUm7IO%CvyQπU"]5]h?.*38YlRHI=pzjocIn(4D<%3np-+(v='o]d:Qa'9Whd%MA+CCF]tCA?B<&PπU"\u'A/35PMi;BG8J#wENa7nJRO#GPW\]6QWX]3)[>[P0YEh+k+$mW4,M/M)tj:YDπU"zO+P)8&7eU:%g?U7[qOlm]A(eVp:%MpSeo8Kn95[66o9.FGpFUGldw$fg.#GDG)πU"FDp?Bj7_qmFKY2W^8k()HL1OYM0u+pNKO5]Ltit:t+*%AS_1X_D*WSmy+&47^kvπU"2m65:-iMRG'IaFII9Jm_FRB/ry0H[0[uD,Fr\zgd2S[%*l/Yp-ka_-__sO>p+KVπU"Zq/Y3^_,Pt)K)_*SESXpLyvOMg]xqL8uh[EYD;7I<T*KfP$vWJ#'ghUE?i+I?Z%πU")Ku;uZ*'b)3Ck(;\<KQES_KX9I>YYA<.fmEJSp([5Z\4z8F/7?J(]?9Op3,L&LlπU"HRW1X'S.W--jfCAwUZq0rq5U*X40<uJ[^58/C?=.g--UnBj+0):$ik-]Z(R-/2aπU"aP3<By(+BgiH&%uOq<ys.3lxMNkv_0PI3)'E;c0A2.[,v.6VDch,M_k(9wk;AhjπU"'cZ)arC%m-Mh%CVw,%f_tv^r6MN;D$TgyFJgVKCUC&6k[YpqBe8G^&wVQMA[E%5πU"(ia:d0A^m>HkSzlR\k2V/,wB<hOD%&$ovaqR5GYytBNb?jnikNLYPqR>cWir6r6πU"=o/6AdyNbO'8tRQf?q4-TgX#0D)_zQ2*bW0_2q(\%9sjR\Be0e/:FU_(mcHuXFXπU"+:ngKDr>#X'sQv?C0oE6<dI&t&[xK>WI.DiKJBk]?&$/+Ca$45yUKE-dt?veFOmπU"*Z_#'Nu;jI;Q$q-27_y6,g&tXGj0Q\ajbDR=-B?R_oi5F\SMG'FF:W+]7MFX[A-πU"TxSEj:Wr<>zwlM0P_Ti;Q/LFV#PKb0a(VK9Vp;4SnZE/O-FM/-uT$bsF*u\_=&?πU"RFE;Bu[:=eI>s[v+]k:/.>w^J1a(*d4]BEC\[6DpSM0#Ge7L/J:mS#m;g)9qSprπU"^+'&M)::-/rL?AR0\pAs9Q]9u*N0))uB+rl-UL:km7?DYl+4v[:j_,guCLwCKSkπU"2/(VZ%8t]pH)I3OKVRKPxWd4/#ZcyRLL/*L39\#?E9W;.GgN:$o=5,aZnrb2E-<πU"sA+ivF^w=YrZw2#VEKE=v[+]>#>87_EQC;zo,rM6AB1.qj;%#v;55==VM0e6#UMπU"]?r=Fd4qJMhaoA\)$Cfr)#qZqWUOsD=erPoSGw.qM3KQIQL\QXRRG5Bp2OEeT:+πU"(6yI82SFE&FwX7+*k3TK?FwEMJ'[miQ-K#4'p(<)p37C#[knBoP&(da[vyCiOkYπU"*R^,d,?Gb0cx&uzZ'Q,k/tif]O=3=4(hK*e/04EJ'E0)U_cRQ-eE]MP'^X_(pupπU"iVCt,N)%j0\znd8XV>26FGh[sTUb6/#Zs7I&ef6K:L&j^*q*gGui9naKEI;1rR_πU"zE9?=(f(u8\^L&iC$)E\MP4X\z/EF_#s3R,sCEk2gLYTG?LzR'gVPWl8WXE]#swπU"c1FGA/*'SOC-9*%''lI8e.7dcwhX0rY#K:3-oj5uPH/;Lk>n.J4fO2:P[?7Nn>QπU"..kMuciqh&+Rh=rcOK^\9WtRhX3]PGITWah1SiV;7<wi#^Cy?g>1=ahUZ^ez66(πU"WvnDctK[f/DwJ)BV,Ab&y^YEK8npddv:&2;fIQcP]:5Tv1DYqO$BGhV;75tr+'3πU"G6<luMeSsrTWq^FkY_EJp6u;YSYS?&1X+Dq[xJ<sr6/fM4o<5I<'8DBRCG?:k3mπU"(/U+C[#12_gA/kgj(gQ'm:]\2i[5uYEULx)_]NNOli6R(;H;BY;h_u'itx753U-πU"Skz&DVA5?13W]5g,IUlsv6NA?Mc,QF2oO6e,o?%'s60Z(o6I\Nz4lGU=ue'>v=#πU"\6ExWYD(&u$$ga_l+9ovCm_%u1=ELnaE>F%Kax<Qp]oDTH52P:*:-\mmJBMU*=3πU"EnoaU*+LTTK?[,(?io/CN9gV7yE_&?T4Mh$3O/rX0a[vA,S1B6c&9h<DA.6S':AπU"]-u*u>b>-=zo9(:_gfR\J:Xf'O]^B>y0#08#RH8Xn,-JB6h[Zq%\)(Le>Q^:w>4πU"_j1N?<e=2:g_0+8-q16Odqj:#js[4>r2Twc05Mr(?I:k2;9lgvubcPy2\B>hp=%πU"QS;aSrM6naDb0gq>9aEF./5Qv.(d>aneole=r:P*sN&lFp>DoS_5PN?Ed;Im+IvπU"1xPr*ek\w,^P'w<XRWHw9[lS%Dn7dEPAe.gaZ%9A:f50:k[$lx_2V-DoHA,U4I(πU"GN1;xITNehTclAt5\1,V'hs<$f_$l.B8U6lqll,v]0Jdx0;\+ZElFvk;b<PB'p:πU"U\\S<Xjkx<4]3B'LEU;2Wgis#AFE3[Cy'I%3CQ6C,/hNqZ?>;/yf&E,eP$AmFmaπU"FuPvii4e:af0PToU8ke*hCMP5-n#9k%Emi_\3?P/L\0M2FW&SC(g+n&+#[gM:%vπU"?)M:'dV)ggRo,9*=vp#3D]cd:BaV+<1w0%auK?Rwe1WSZpc=aY:QIUO5a,1M;ZoπU"28/t;sm<M(.DJ5(D$O%qp6M:L;q1AA$8R%HqGt_<(LGzE4pFX$K*kt%]C2iUI_pπU"&_2V,(LS$=<J;JXQCk<D03ODWc+J:i$0%_RA=.m+/Z_5+K];gP=iEIo6Kla]#aXπU"6XI*SlVZoaCv)'c.h3vhp[eb:YS_z;i9EF2+1w0,gA4l=q7-B>NIkN<C-4.,(Q)πU"vg.R3Aj5,S=F6LPHC)7&03>2[Z(eb1l-NL-t=W?KEi=Q_bWI\i/n]Y/TF3&an7(πU"0Ib\RuNt+$uTIeW&EN7;0>mCiIksgN]h1%iN#2CCV92qOb^;o>=[>ReH;f8&69fπU"$=4]jU\K\w+&.,V&UV3bU>Pmu^rn>VFpXa>m2L?qmWztMb8R[s%%BYKtS9TTep]πU"EMI'7u5N/x[4jy?=]6C,o*9W.;5Ei&Lr1Oi0?&\MO;AlMqa=_VJtL>FM1k*DH6-πU"qF7Okr*PBcCoz&ubL]r>+'KnqkJ*[2pfFY:DFZq+#;V$Caw9Nd]mDAVchHQ4VT+πU"w3ko[%iRhJ30LU1PaL*ZDP*7n2djMKI]OT;/f:_qO$F8+P*.<N<C9yugPS4&xAfπU";)u3Pmw1O&gXP=hMYG3^*y&_8V6k*%yh:lVXE-HMI&,BYj-R9m9A[EmGe:Ylu)NπU"=s7847FdU<i:%RsMbK[Y,kH_SP?EM#(b4N(d,?M$&0w&8rgLGnl7Ry_mLj>'t&FπU",jm:T9BZja?,G-,1,CIp0JNfE%-RS]3/Wium_PU'$ML;qZA#UqE,2CTD1'b'zyAπU"+jkN,fD6H]U20vP7Qo'-M0:Vq[FMceEUKqqjk%eNJ>FzIHfW$+&$g_07tR4koM_πU"^b3ceIYndTRSQmdRg#pq>:GfVW#(;k:'gHXmW2jGn;lf\NQDLO>)gAfga-91T6JπU"S-%tPaOh:-&<OFWrf'Sh]Mjb7<ORlDIe_u]wjPCwpb=nI59^k1vW6b#k#*?xomQπU"SwxWR?SgKr,:b/PIEOTBUqj][\h?/IU7'xWf#3GAH/T3#=vaNg)_%/,ilR'gMz)πU"Z)rIWj%F=5*XR=j3.jrYJEH^_2dFu]NK76wLgMu]Ua&%>imnC(H[LZ0W>;.Z589πU"Ki]P$Ac6)d$f]NY_=&'[2_1KfBsH6s4OIbI94)Br>),AC?fUPCf>Q.['oKUH99oπU"g2c;eUMP7M9V/1g63=XU.=NY9Z(qC(%B16F?Z;v-;oMNEke00aTa=#9RXVdPi&OπU"12CI??'1nZ_c]*06]LXG8j;N_n_'CFN2g2<oo*<Wc$_?$fo_,A6:qdy'tZOyI/XπU"Ao&%vC^d,2('\,%fDB;Vm15C_EeEu=8U=tU)HzGP-vcEIH:AHrrkPiRh(do*1\XπU"JH1eT_5J,Vnl:z0(3n,z2k?LUB#,sl.u>xh#rLX/>iMPM8eBKhXO\P>?Y#8/X?MπU"oIHmWSDshCu)2OFzS#;iYD8Yq9/pr9%D*<Y)XUc0\jHJA#>hhV)R]?P_S^b_z-xπU"r5B\cd>'MQ_EXs[nS6]nB7\qCXnThIbPcDS-*FxF/=Ej'1s&;_;d<E<'NdT,_0aπU"0[,5v*#\1xvDt_<Q]5sV%SbYc>)_qCh<R[/BKbK^_=4JVr-Gs%;khf#)Fb\K?AuπU"4MZ]<sJ7r9NMKBJCZJe_nz6'x$lqmlD'w*Vl#\42XZr(A)2Y;=44%e*^J4&:]dgπU"5eCIDLY5ih>PXp)CFRrz,oW6dFb?_x2yn&+S*Upg*4Dh'/5*PVfFs4fls0'#M/;πU"/(Wg+RqBG,>ZO6iKfbTI_[iraUo&32D2HLt^TBk72G'0$SU.pTm-DR.rw)+#MKjπU"l#9u+qH9+*Y:3q/u=Ji;(7-6CYj'3_LR&LX1Bb12W^nmVbR5E(PX-(<r%*Bha-hπU"36-[2K%9':lXn:ZM4;&-Cm*M%0<?nV(x^(L#CpQ1G,[U,=&;=w\?n/Imx*?Z#uVπU"6+)0eoP*Y:Bqb'2u7qF[Q.)CQ[%dF=h6L9pa7'%+=j.X#Kcu?MuW2J6*r_CzG;5πU"5L.6HJhWPn9Tjh;QJM\)FyLgbgQI&hDrgjo;OnjPlL^zRW[%W%41V5e_R621<)/πU":6p6cHGXt7_D1SE'vP5.8?,zg.'TDTsIPV%PgSVVP.0mEae<Cd=_y^)c:x)NcR>πU"*TFiCT^R%_i_?'96Dd1JHpHI6JA_]m]7*X5Rf;UTi:My6JH.CUO7h'0R72)d,e1πU"kQ\b/](adg'7%a%>4[b?f.iGpn^1%.yrQZ);R4;^w27)OX<E^KT/'EnDaM4mii,πU"M:R#bC'9ebg0,xc+:X^''q'%c[uQjf&b&7w35_o6e5?cO.rir=S#7E&5f-.8-_QπU"k7htD_Ka#7N8TPrb[Vr1=QmhZXxmy0M9i;Yt'*e8#u$4vf9Ap&e_2w.^?7?imftπU"x+C%&R1Dw>z?M)u=/-ojlWMf6%\>nNIo8cJb%Q-\xY)('IiP8b2NdZ%9fnqWHgKπU"B8<P6T$ir6HALTjbI.e2R%Gb%%UG\E6B.+(N#5F\$&rWEe58+s&LDoSg(E$HeW,πU"rO\9YUre%.2wJ1%-gK1-9D]3YSOf8*BSH(Pv-xXGQ(0WWFb&/F[%URv/OD)WuFjπU"4.Qa/L5ES,+y%a7/\nP5K0yo$[N#*ePy3wgM1iowW-]F$FuI_?iS&t8Vi^f:(/&πU".^U&1*W<g7CqV479#gV#e/(h2+B#8CSR4iI+yKq'60BU%o\PQ=/OI<]?_HOu#iFπU",\#0D1w,b,Aj-:[3*flERQ*JL5Om^I)Cvl&#W.pLI'o-I4S]84zIT^c)Zcg5\v'πU"CGD:M[R^E8^.ODJiO2ZE7iZwdvQ%(g;=k2;0=)[<Bq))#^-H7_m_(0Br,YBi#47πU"ngo:W+tbR-[rh2RX)]?R;:iHs\%c)&o9J,\69s3)hdTi3LLpf08[Y[-brE+gIN*πU"aJIGGueS9'K1k<sOs9/pXeq=PJ\5EpZ_LkYE_RAU:C\lfZq*A.fP?T&*?;I-7#AπU"()VB+.D2Sg?8(T10PE#7Q/Le^0X<'V0wYT%FU&;YsFZ9+6e[g6?$+OO4vAg'6PiπU"G0(n55gP+*dI-MX&_sEWBR^dK;v>7J$N]E-'-/'mF3GRbSTxNOh5<zp&)/vfA[1πU"Ra&Q]4c;W+=CuntD8+':(.wjQ*[H]<rtkTvM0<FUmW2.)Q6MpWu;2tZUo9U5EH+πU"F2>n/1:#JDC5F7C21y.-D;/f2TxrI9C]xa&quLN+vvoBp3GS^Yr($Ok#/r6baO:πU"5B_rho0*ZZ;psNVE,&l,1Q0Oc\r65T,D<#PU=%^P&1aqP:sd-U+$#/]F*3G7RhKπU"-Ggwo-bsTjtHEGh_MXzU$;]egcn%+F8ygBTpE)uLXQ*3T:%pwu0C?hN&e8jnYJDπU"y=7+K-A\-+/D6KJA2Go%Z?7.R;I&['J#gP8rE-5'E147L>q(Hc2I5IlMi7[Ip2^πU"qD?Q79SG9AL;6(<haw<8w17=G%17D12=4aT?mC=A'#ZaE>h:G7A0pU]&0>M^B*vπU"ZXa-5b14&uj147&fS&1v0G5sK2;i;Ol=-QLp&T]Zf?&&\x5C*-y-[F=vy^6'gr,πU"$(=(Vlm>ScS\]\pDVbd8av17(pLVxo&Dcd6qsaO%h;>GA#\^>U(tXc]CatBs#x_πU"kU/X&T8>hinuhpwt<\s&9]0I5vqLMb7c1=7S5.C>i9;p:;zsGwkCI?6oJ\JcsA)πU"LWuHL7fW1704A3#Pa?#Q,;rYc)i%A,qDJYg<^RJ1t5qtOjhNiWdMGWic+k+R/:mπU"O)rT<HK2-Yi9Lr<<n-Qi0#FaeGS0f,mAD-zS.lb=jVGc^%eSl^Y/VySl*8hH5+9πU"Zv1/d%kGUa):c:uYie^YS,en<-H?Q<A<1.-4%9[v*TL\8277GKie4;4IbuSg_:rπU"2RtR,*kEl%^M$eU46a[wL&PYT9Xo)-Ae8_Gd=dnqK+jf\>59:(3gTRlE(-]G7EUπU"c)Kh9Wy[O?h;0,KbF+4Fm7BfxofNZ>4GPc;>SJ\>n?cBO-BK\3^a?AS=B#CZU4JπU"q=q?0]:T(*q*930s;Th(<.v]9M&mG1/VbZC:T(3+8mG/)vU_'*+eYO7/,o<Q_;0πU"pK)+bQ+t>0;uLXci,uZ-JlU8_qau7,UrgJiESmu:qm\e\NU-%%Y+?:GR8YzZo/QπU"e'9&D,2d+C:I'%0/0IBv2zTtYiKVr19Zu><;bf.+H1#(Qgx7XTPC<jlP0<#hg,eπU"dUyeS;7_Pg&B/<e=H:I4_U88^uLwwM'2;?;auGWl3)_w&%9c&A(0haGb<KAcg<mπU"J5(L8-]IUllCDkj$hd-A>+Dmr'DUVNAh-SLdN+MA,XSK.a%5;Gac2']S9)US(s1πU">yA2B%NF(Re)Yop?;kgI0xims-?+/-N8(b[Sl74dE6%%DQ)PvY=*:O$(+d=..+4πU"r=Cj.b#9Yv;_.3aadFW-wtP#)8,J2NT[3/BY_7s';ROt;_=o1jEnqkJ-&g<7gT_πU"vX)B*g&7#?8<TI)C^[#(LfOe3m\.*r/qF[V_W5'gf7TYh7%_7g%%3#[8%R'q7%hπU"T5)9O+%cXX,Afy-L'/ahD0_RTMZHV>.e$&BRf)KNDlj7cd/&RaB>+3UsFqCABuaπU",M+3Tus>7Y5:&\'.<^?/eXOY9/J*SgNT1qCD54Gv'Z#,hT[gT_;1[^=9N&X^=_]πU":SE_\/Mmvn)8E:;OT::Bcf8KLpRpZ&y0Z=n)gVE'B&a>O,n7;-p,iYf&kr-G0wSπU"%m$CjPiW\g2o6$St(z-w7+-RHqjMA$tGJ#IBIc)pyMi9vRgF&j\kGI]Chdz-844πU"#R8J#I6qf?+zZB=]s[s(W(C9_GY6Z=>gKrO^QD>>1EA(XB0cjvJo9ikjg'R7:'=πU"8OuK186YLfU&_Z1R,jao'I]3I6i;Z,(7x3(gILPn_Kw]/%Tq<*'C#+E>HLYU.yIπU"OE(%\k%CQcE?L&7CU\q6)I6a0H)#'&YYAP9%U#%?:?#om'7.E6o&0F7cfF[mUImπU"%ATeDZ3gk3t90>WZzRbKJf_q/OM87Ip;c_G'G&-A(y=d<qgc^>/+h/5<5p_KoA9πU"pm)*i3AYMfpP%g\B)9GYK:MSLJ%?JD)ISc4d%-<DJ5$oQ-+*-?D%=lMY+,=4I%9πU")=4X2I\rX;?/1^er)S.;mDc+Us_mb+RAnX?j5:9/9co#>wOFgtuiabphQplZaP9πU"J[&(.qTXY2YG>OYhiSm;f5(De+w?lzfTk3$Bq]\'8Lz9I)la'BG[Ml7f[PDoU^_πU"JV+>[kCAc#k:WP#&dPWOvgl$IkMnaPN/Gp_KD-L??r34#gZs=vA0L'BAB3Kj/(sπU"hd*#GjYfS-0HWG%f*Hs(da5]&(5*09ioT$aMaZN1mxR4(+.)N-5f#OQ+m_S/V+PπU"9h.%x)C='7.h%lcGi.is3.+)7z%[UAXF3f,xXft+p)8Wmp3?9AzuS.#iWPvLJe<πU"atTmLGqmi1WGV77/C7Vtk0\/pe1VEj/r3tHETK/RN6g)7-B%<4bwn5ggoEGOr)WπU"d2I;=8Kf-vB2#.Y0WtB<9^fA#L=o^CJV6%2-;1,_e)^3PW9VbBgfqbH]K,+B7(qπU"U;9=)f4(T^daW1/mb_wP&Vs-hS96Ts/y'WYvD>DZi&;nuZPRR*no14?)/X6P\Q0πU"QwOM1ub$k4M^DE36tdIf9_oY%_HS6d/tQRhoO0_)OCh&#lF'6/sOTMV'V4B<$<hπU"FRSJ3w%]up(%)/%%%%+%F(=h?7+H+5*[(%%k%)%%1%%%%x&&fuy%jxyS%gfx2%'πU"&7H%9:[\h7XiT%a*+7m8i>o5epX;FBCYwEMqE\D%D_c59Kvs1f1<_nDQS+52Pe)πU"/XW4h4*Wp<Tj3ux)&Rg:^?CopItRIs,HX20^<9=o.2GI.h>v(Y^TGxFF/.-E5Y2πU"R-#St7LX0Kf*T3E7Dk'06DhQs2'FfGrzQ0e+_b>FUH$24zm-(ur\OQVq'<ed-q$πU"cc/2dSOt8tss?vQT;4j$O;Cppt28dKGRR+rHhx-M2[.=lV*CdfCR2e=u^7bfdY;πU"T4W?AORzNBY*f%.W\uqA?Vi]*U^#E3vssdOeD*fEx45vh]D8Q9j8f3Kt1pV)A5nπU"i=#>eE*AESeQb$m41O>UL(0FlQfeOvO4*HuVRe2]yi1azGKCXVNeF4>aNhUzU.*πEND SUBπSUB V3πU"3O7)[[rhCtTOrXF:pfFyXjnLmkXO?XM'zt*j3Jz+L)HvH2tH)Zn)<C3/wxqE;wSπU"MJp7tC3G==z%uHt/GJgUAcLSSFbq1t6^J]RRTaqS)4^LtW.B26\S])h#R6L+FpXπU"RDtSfr]1RfVSWFWr4O;m>9'UJe^6[U$i$z0wI<Q(Q5>\E.jIUjyN&QEHhU0N3GeπU"2HRGV=1q9aEtJUh0t<T%rLIof'5zX=vb+H9QX4\fCll_Rq5rDc'Fz6t$1iDAJ$sπU"COP:KjLSCYN6:66FjoJ\R5z1[*fRR#LEMr4(<i^xC9tZv^QfJ?j_h^m.fgW,7G<πU"nMV27WQ<$O,#AWQ%-JdmK)SbEIBHO5\.,\iDc][H\g$c%AkZS?JjJWp1O\PykbjπU"ycI/X8fJBUjljZccboIbYZ5&M=H&do7JTE9_xH;ZbQ%ke4*nDN'$Z($'l;RT4ILπU"nasWings\qL_X_mJ/xcU\kfj5ucF#JS>i4IqB6w<>hmsS99=K\iO7:/xJ:N\qt6πU":U)1.k3%*];;%*&xr]]oetDG]M6CxU1dx1U34RhvlSt+2kb9fGmr4(?m]<nxt6vπU"]lG051+RZ#+%+#>\n=%up&'%0%/%%%%+%.F=h?&dugb%l.%%'Q4%%%0%%%%%%%%πU"%%%E%%%%%%#%%x&%fugf%xStg%oup&%'0%/%%%%+#%F=hX?qIO*_B&%+%T&%%%0πU"%%%%%%%%%&%E#%%%?%.%%x&&fug%fxSi%thup%&'0%%/%+%%+%F=&h?>c*;vUg.πU"%%WH%&%0%%%%%%%%%&%%E%%%%10%%(x&fu%gfxS%fxru%p&'0%%/%%%%+%F(=h?πU"7+H+5*[(%%k%)%%1%%%%%%%%%&%%E%%(%4r%.%x&f%uyjx%ySgf%xup*%+%%%%%πU")%)+%^%%(%cu%%%%%πEND SUBπV2πV3πCLOSE:IF S=250AND B&=Z&THEN?" :) Ok!"ELSE?" :( Bad!πSUB U(A$):FOR A=1TO LEN(A$):C=ASC(MID$(A$,A))-37:IF C<0THEN C=91+C*32πIF K<4THEN K=C+243ELSE?#1,CHR$(C+(K MOD 3)*86);:K=K\3:B&=B&+1πS=(S+C)AND 255:NEXT:LOCATE,1:?STRING$(B&*50\Z&,219);:END SUBπJoseph L. Clark                SWAP COM PORTS                 FidoNet QUIK_BAS Echo          11-15-96 (15:30)       QB, QBasic, PDS        81   1539     SWAPCOM.BAS  '> program, and also, how to re-assign the com ports so I can use com1 asπ '> com3 and com2 as com4. ππ'I've got the COM swapping bit (well the one i've got!):ππ'π' SWAPCOM.BAS - Swaps com ports and resets to normalπ'π' Author: Joseph L. Clarkπ'π'----------------------------------------------------------------------ππDECLARE SUB SwapComPorts (port1, port2)πDECLARE SUB ResetComPorts ()πDECLARE SUB ShowPorts ()ππCLSπResetComPortsπShowPortsπSwapComPorts 1, 3      ' Only swap 1 and 3 OR 2 and 4π                       ' Make sure the lower number is first!πShowPortsπResetComPortsπShowPortsπENDππSUB ResetComPortsππ' This routine resets all the base addresses of COM1-COM4ππDEF SEG = 0ππFOR port = 1 to 4π   byte = &H400 + (port - 1) * 2π   IF port MOD 2 = 0 THEN p2 = &H2 ELSE p2 = &H3π   IF port < 3 THEN p1 = &HF8 ELSE p1 = &HE8π   POKE byte, p1π   POKE byte + 1, p2πNEXT portππDEF SEGππEND SUBππSUB ShowPortsππ' This routine shows the base addresses of COM1-COM4ππDEF SEG = 0ππFOR port = 1 to 4π   byte = &H400 + (port - 1) * 2π   PRINT HEX$(PEEK(byte + 1));π   PRINT HEX$(PEEK(byte))πNEXT portπPRINTππDEF SEGππEND SUBππSUB SwapComPorts (port1, port2)ππ' Please note: this doesn't actually swap the com ports, it justπ' places the base address of port2 into port1.ππDEF SEG = 0ππport = port2πbyte = &H400 + (port - 1) * 2πp1 = PEEK(byte)πp2 = PEEK(byte + 1)ππport = port1πbyte = &H400 + (port - 1) * 2πPOKE byte, p1πPOKE byte + 1, p2ππDEF SEGππEND SUBπMike Ginger                    FREEWARE MOUSE ROUTINES        FidoNet QUIK_BAS Echo          11-22-96 (21:52)       QB, PDS                349  9433     MOUSE.BAS   ' Note that you will need to invoke QuickBASIC with the '/L' option, ie:π'  QB /Lπ'$INCLUDE: 'c:\qb\qb.bi'π' Freeware from Mike Gingerππ'---------------------------------------------------------------------ππ' *****************************************************************π' MOUSE Routinesπ' *****************************************************************ππ' First, determine if a Mouse is installed.πDECLARE FUNCTION MouseInstalled% ()ππ' ********************************************************π' Only if a Mouse IS Installed, may you use the following:π' ********************************************************ππ' Get the Number of Buttons.πDECLARE FUNCTION MouseButtons% ()ππ' Get the Driver Version Number.πDECLARE FUNCTION MouseVersion! ()ππ' Determine the Adaptor Type.πDECLARE FUNCTION MouseType$ ()ππ' Get the IRQ Number.πDECLARE FUNCTION MouseIRQ% ()ππ' Returns what Mouse Button(s) is being pressed.πDECLARE FUNCTION MouseGetButtonStatus! ()ππ' This SUB allows you to position the Mouse Cursor anywhere on the Screen.πDECLARE SUB MouseSetPosition (MX!, MY!)ππ' Allows you to turn the Mouse Cursor Off, when done.πDECLARE SUB MouseCursorOff ()ππ' To make the Mouse Cursor Visible, before displaying.πDECLARE SUB MouseCursorOn ()ππ' Allows you to set the Screen Limits, if you wish.πDECLARE SUB MouseSetLimits (MinX!, MinY!, MaxX!, MaxY!)ππ' Get the Cursor's Horizontal position.πDECLARE FUNCTION MouseGetXPos! ()ππ' Get the Cursor's Vertical position.πDECLARE FUNCTION MouseGetYPos! ()ππ' To ReSet the Mouse Cursor, before starting.πDECLARE SUB MouseReset ()ππ'---------------------------------------------------------------------ππmouse:ππCLSππLOCATE 3, 1ππ ' Is a Mouse Installed?ππ ' Don't even think about using the other MouseXXXXX SUBS andπ ' FUNCTIONS unless 'MouseInstalled%' returns True.ππ  PRINT "Is a Mouse Installed?    ";π π  IF MouseInstalled% THEN       ' Yes, it is Installed.π    PRINT "Yes"π    PRINTπ    PRINT "No. of Buttons:         "; MouseButtons%π    PRINT "Mouse Driver Version No."; MouseVersion!π    PRINT "Mouse Type               "; MouseType$π    PRINT "Mouse IRQ               "; MouseIRQ%ππ    MouseReset              ' Reset the Mouse Screen Position.ππ    WHILE pause$ <> CHR$(27)π    pause$ = INKEY$π    LOCATE 10, 1ππ    MouseCursorOn           ' Make the Mouse Cursor visible.ππ    PRINT "X Position (Column)  =  "; MouseGetXPosπ    PRINT "Y Position (Row)     =  "; MouseGetYPosππ    PRINT "Button(s) being Pressed: ";π    IF MouseGetButtonStatus = 1 THENπ        PRINT "Left             "π    ELSEIF MouseGetButtonStatus = 2 THENπ        PRINT "Right            "π    ELSEIF MouseGetButtonStatus = 3 THENπ        PRINT "Both Left & Right"π    ELSEIF MouseGetButtonStatus = 4 THENπ        PRINT "Middle           "π    ELSEπ        PRINT "None             "π    END IFππ    WENDππ  MouseCursorOff                  ' When done, turn off the Mouse Cursor.ππ  ELSEπ    PRINT "No "ππ    WHILE pause$ <> CHR$(27)π    pause$ = INKEY$π    WENDππ  END IFππ'GOTO MainMenuππ'---------------------------------------------------------------------ππFUNCTION MouseButtons%ππ   DIM InRegs AS RegTypeπ   DIM OutRegs AS RegTypeπππ   IF (mouseg OR (mouse% - 2)) AND PEEK(mouse% - 2) <> 207 THENππ    InRegs.ax = &H0π    CALL INTERRUPT(&H33, InRegs, OutRegs)ππ    IF OutRegs.ax = &HFFFF THENπ        MouseButton% = VAL(HEX$(OutRegs.bx))π        π        SELECT CASE MouseButton%π        CASE 0: MouseButtons% = 3π        CASE 2: MouseButtons% = 2π        CASE 3: MouseButtons% = 3π        CASE 256: MouseButtons% = 2π        CASE ELSE: MouseButtons% = 0π        END SELECTππ    END IFππ   END IFππEND FUNCTIONππ'*****************************************************************************π'**  This SUB turns the cursor off.                                         **π'*****************************************************************************πSUB MouseCursorOffπ  DIM InRegs AS RegTypeXπ  DIM OutRegs AS RegTypeXππ  InRegs.ax = 2π  INTERRUPTX &H33, InRegs, OutRegsπ πEND SUBππ'*****************************************************************************π'**  This SUB turns the cursor onπ'*****************************************************************************πSUB MouseCursorOnπ  DIM InRegs AS RegTypeXπ  DIM OutRegs AS RegTypeXπ π  InRegs.ax = 1π  INTERRUPTX &H33, InRegs, OutRegsππEND SUBππ'*****************************************************************************π'**  This SUB returns which button is being pressed.                        **π'**  Returns : 1    Left Button                                             **π'**            2    Right Button                                            **π'**            3    Both Buttons                                            **π'**            4    Middle Button                                           **π'*****************************************************************************πFUNCTION MouseGetButtonStatusπ  DIM InRegs AS RegTypeXπ  DIM OutRegs AS RegTypeXπ π  InRegs.ax = 3π  INTERRUPTX &H33, InRegs, OutRegsππ  MouseGetButtonStatus = OutRegs.bxππEND FUNCTIONππ'*****************************************************************************π'**  This SUB returns the current mouse XPosition                           **π'**  For graphics screens this returns a pixel position                     **π'**  It also returns a quasi-pixel position in text mode, to get the text   **π'**  position just divide this number by 8                                  **π'*****************************************************************************πFUNCTION MouseGetXPosπ  DIM InRegs AS RegTypeXπ  DIM OutRegs AS RegTypeXπ π  InRegs.ax = 3π  INTERRUPTX &H33, InRegs, OutRegsπ  MouseGetXPos = OutRegs.cxππEND FUNCTIONππ'*****************************************************************************π'**  This SUB returns the current mouse XPosition                           **π'**  For graphics screens this returns a pixel position                     **π'**  It also returns a quasi-pixel position in text mode, to get the text   **π'**  position just divide this number by 8                                  **π'*****************************************************************************πFUNCTION MouseGetYPosπ  DIM InRegs AS RegTypeXπ  DIM OutRegs AS RegTypeXπ π  InRegs.ax = 3π  INTERRUPTX &H33, InRegs, OutRegsπ  MouseGetYPos = OutRegs.dxππEND FUNCTIONππFUNCTION MouseInstalled%ππ ' Is a Mouse Installed?ππ DEF SEG = 0ππ    p207 = PEEK(207): p206 = PEEK(206): p205 = PEEK(205): p204 = PEEK(204)π    mouseg = 256 * p207 + p206π    mouse% = 256 * p205 + p204 + 2π    DEF SEG = mousegπ    IF (mouseg OR (mouse% - 2)) AND PEEK(mouse% - 2) <> 207 THENπ    MouseInstalled% = 1π    END IFππDEF SEGππEND FUNCTIONππFUNCTION MouseIRQ%πππ   DIM InRegs AS RegTypeπ   DIM OutRegs AS RegTypeππ    InRegs.ax = &H24π    CALL INTERRUPT(&H33, InRegs, OutRegs)ππ   IF OutRegs.ax <> &HFFFF THENπ      π    MouseIRQ% = VAL(HEX$(OutRegs.cx AND &HFF))ππ   END IFππEND FUNCTIONππ  '*******************************************************************π  '**  This SUB resets the mouse driver and must be called before   **π  '**  you do any other mouse functions.  If not called the results **π  '**  are unpredictable                                            **π  '*******************************************************************πSUB MouseResetπ π  DIM InRegs AS RegTypeXπ  DIM OutRegs AS RegTypeXπ π  SHARED NumberofButtonsπ  InRegs.ax = 0π  INTERRUPTX &H33, InRegs, OutRegsπ  NumberofButtons = OutRegs.bxππEND SUBππ  '****************************************************************π  '**  This lets you define the area that the mouse can move in. **π  '**  The default is the entire screen                          **π  '****************************************************************πSUB MouseSetLimits (MinX, MinY, MaxX, MaxY)π π  DIM InRegs AS RegTypeXπ  DIM OutRegs AS RegTypeXπ π  InRegs.ax = 7π  InRegs.cx = MinXπ  InRegs.dx = MaxXπ  INTERRUPTX &H33, InRegs, OutRegsπ  InRegs.ax = 8π  InRegs.cx = MinYπ  InRegs.dx = MaxYπ  INTERRUPTX &H33, InRegs, OutRegsππEND SUBππ  '************************************************************π  '**  This SUB allows you to put the mouse cursor anywhere  **π  '**  on the screen that you want.                          **π  '************************************************************πSUB MouseSetPosition (MX, MY)π π  DIM InRegs AS RegTypeXπ  DIM OutRegs AS RegTypeXπ π  InRegs.ax = 4π  InRegs.cx = MXπ  InRegs.dx = MYπ  INTERRUPTX &H33, InRegs, OutRegsππEND SUBππFUNCTION MouseType$ππ   DIM InRegs AS RegTypeπ   DIM OutRegs AS RegTypeππ    InRegs.ax = &H24π    CALL INTERRUPT(&H33, InRegs, OutRegs)ππ   IF OutRegs.ax <> &HFFFF THENπ      π    MousType% = VAL(HEX$(OutRegs.cx \ 256))π     SELECT CASE MousType%π      CASE 1: MouseType$ = "Bus"π      CASE 2: MouseType$ = "Serial"π      CASE 3: MouseType$ = "InPort"π      CASE 4: MouseType$ = "PS/2"π      CASE 5: MouseType$ = "HP"π      CASE ELSE: MouseType$ = "Unknown"π     END SELECTππ   END IFππEND FUNCTIONππFUNCTION MouseVersion!ππ   DIM InRegs AS RegTypeπ   DIM OutRegs AS RegTypeππ    InRegs.ax = &H24π    CALL INTERRUPT(&H33, InRegs, OutRegs)ππ    IF OutRegs.ax <> &HFFFF THENπ    π    MouseMajVer = OutRegs.bx \ &H100π    MouseMinVer = OutRegs.bx AND &HFFπ    MouseVersion! = (MouseMinVer + (100 * MouseMajVer)) / 100ππ    END IFππEND FUNCTIONπDavid Rice                     IPX ROUTINES                   www.globalserve.net/~brent/tech12-13-96 (22:00)       QB, PDS                381  25229    IPX.BAS     DEFINT A-Z:DIM SHARED K,S,B&,Z&:V1 'Created by PostIt! 7.2πSUB V1:OPEN "O",1,"IPX.ZIP",4^6:Z&=18677:?STRING$(50,177);πU"%up()%9%%%7-%3MJ]FxX)==I+%%%i>%%%,%%%%nu&'SgfOxN'<)Bjk5cwg>xDV\πU"LXJtkD4L\E.uErO)')i$J48_if\)Q%;HF)c&ErV.XT:$_Y]83Lnq_v[,ZMLH=>iπU"pE>hOs8NPu$mqaU9-YHLnkfiQPj$86R\x,l?pNI3p?1]+;1D,iY/SjhnHg'eUnkπU"*^IQs0aSZK:F?,ngA5=\g'<Mnv[oelw97vnV>-Uswh1g;/(65]q4;qu,Q\q2YYEπU"]Xxa_,R?^/94UZEHkcIc)4iG>7EBOUD([I0:0Ks$8jRd?>C?q#UeWJ^y$:EE=C\πU"N>Q0iXg$_#bYRh;lO(J9l82Pk[h7lq$P]sXQFJUM1A/sq9*N_+:P+]6sg#=AYNmπU";/ql9=E.U2a]$?O$9o][i:HF;Kb_u.Z9Bw]BIc\R9UJ<95n48/gIq>o\&k_7zYaπU"rBvqSSI041AvhDsjU#.-ihia%C%TFT(e$b9HgxpqS)t1_Wf1;NQ6^Y)waXK+S<=πU"F/*FgX#<i%(l7FOZFB&he\m.Bh*p*0Ac5lC0[]dc[ki?kma2'Xn<%:D63=P]]]MπU"6r&ls&Ua;]Dc_\qbV'NVUsz,$-?i):9'rikxaK3YJzU+*wlSc-gVG8oqhfJc):?πU"CXe,(?G)[mS:]Q$/TbbU8-<rVA*Sz:^P+<h2iB#O5yf+w4z2qQ798ZQrPB?Lb:qπU"3Gk4YaF_eapHkt]g_X#I1FSK$xk?).42JsG&j\'W?e?7?Rfn-m>FqU*T-T$o?f<πU"rF<IK$S=Utm,1_q;h/*GCLLe4#w\,X;<:G*lHgvh?D0_9e6s053KjPO1OxCJg?/πU"[ch+:a)+(SKnL1]Y_cc_'_X8[>W%ptMcHNipb9#RoST?pqqWLGS8$*0:kh1S%nAπU"J+bb6wZlm\Opk*vd7<EZ1$^^G=m*]=*'xMfe'ZM<t,<H/B>:h;:]fgIHU%C[C$GπU"arVAX&O$WABD9#dVWH2%tImbM#mZ*ysB=&On_Cv$>wMs]'*Hpl5(=JUKDXT%BLMπU"\<R7uV+L6jG)&hCy[HO<-KnoGhBbc3x23,]^3K-dqU>#lH+,BquQAJnUW-I(5q#πU"Gmrhk(?3+ZXi_lN0rn[DmcRLiLd#\i\f5uKDsu=?gTJTU:a^ATKL<#-&ds^7qz>πU"Bspw&$sMu$FnS0gf]^uJ?D($Utj)Fq?r_S3/&7ecy33$YH]3:=&sA:PvWs['TVkπU"/<]';fts09#(x-:[trkd1Al5j1%Nq0?k=hi%/Z)55;zjl[bA8H2/:J(&vLm&\T3πU"(%<UXJvilxPr4mD04DM4KkoSH0K^H$L_PF?dX[.h<NI9H>JJf[iNSv>Bh$=]GkPπU"BPIz:k)PB(L1(gF\\:Cl*RhL'KK/>>xW[#3Y\indMNQ+Gx+?.&jbuhRd4A9)JJ8πU"tphmf2X2WOqc6mg'7FShXd(<8V6k2B/YfQPwEq]SLM)jqD0I[B(bkjfPyX(r'AsπU"l2W)'.5uX>>?Z;OkW#gM2#w0n$JP8P<BTG0:CKWQqekxxv6O.x$beObvulP&(g7πU"W:gY;P&ui/r6VJV:m9QP^Na(TU$9gM64\-XVD76agoO:GWFyZs/dSQs]zjoo0f[πU"-MS.HF3(elPLt'j6kYJOWXdk*B1Vq1+m>M2tXVLh(hi,&GubW^6S>;#a7gnipHUπU"w[3jOo*2xCFk't(BqU]?MW=p\kn;esCzXz4DZMi3KJZPmUZ5xs_dNw>ao]2OQ?#πU"7+&&:tNNjQ(XvFhY#u\0ShI,V1:>Tk%;sp3?^e.cTY'/'wSHyUnZW#U'$1&hsIgπU"#U0[;JD3'Y__yYrh,dH;4dch's/0I]8\9yPPqd9eW?0#G^75$$Ph2vG6_aWt2hmπU"0OU:*I$cuLvKb)_?tSkr]pV/djYcBqN)CV](aFQUC,03fy_OUxTn0fH)R<rIMRhπU"bFZ,1Q159=bU3pDq%GGK$:F49*/,o[VJ1cU^,^>cs#[+p-u]l^97OKq$fMn6=,$πU"t+A'A0SN;>?MSx[h9V2KKvheI3Fp.c-3UtClthq%4XjIh)d/YXERZ.c2N%%up(%πU")9%%%%-%0^N]FdU6O0N#-%%]%C%%-%%%%n(u'xS[gfxFg>:BT?1j,X>bx)v2l'9πU":[zsB0*Fl_hUpc>XFq2IlOxs\pCEZHY=ur)t?vn>'IE._ciGFfbqc2d*,>e00ZaπU"[vFeGS-8o3%n*WgfYa\G*+t\Fme;.L'01ZxE</qJ21O+='+h&wd2^NSBBO,Xx9WπU"_P0eYiMRA7lP3-8qig\2<ZgYc?U).i4IwFCDujV\$,SkI-fb9SF2/Ij_V8k[^+AπU"AJ\c-/aYYp0DYM_/Je.u[bJ=D$[k[bY5*fR:d_s3?rh^Dm>Gm=Zx)L?XdoDxu9pπU"FE7tIk7V3/H7bz\,'0Q2ln;n^',PG=mk]lMDa*afVB[N.OF8/6V4RrN+6i;?Ht9πU"c7X(>,L&k$nIp]M%[irDeE*6R;G?pvgfvibNkk7T'T0Fq(OzSskbT8eBVe0>8B_πU"l6*Yq_var=2dp[M?*V^TM7s]XGGe;j)/,l?tNj2ozH]'Wu;['A[)w6Z^g$#8W/HπU"Ro+idr_?pYGI)4R4RIgMZuR?6Bm9M2gt/nI?#=Xf8gWGUDMK(2n5QQm,X)\K#TJπU")m:\0)v.imt,;u4$Df1o=\DG0XlFWiHG=\tACU+m4\7JqA_,[>7KI0<G[2bKnf%πU"gCVzebyWml7WjYn_lh)sLDP(EG[JAp#[<oWE*L0DojK7BU)r)+=h#E*P9W[XfL2πU"#ldOwU:+dR%Gho)?RfL4Y]wYm6[20:t4hHht4IGoM3ujW^aCUQBARQtWK[dBKLxπU"Qh0olUWCr3(%Pc3J/G:J^n*7^/TV=A+b]fWKsrO1ZI]>4X;D'Z7Hj;FJeK&<]qIπU"a$Xf<u,OvkgLi;V/LEg=?DU=E[It?5F9o&hJE$503LY:1G7[d]P8Gk(&^YhUH'>πU"_<#lY<Z7-\u4R^6tb4V>lo?/T/ujWm[qgPaohR[IQu0;fI5Onug<>ob1G=zS5R2πU"c1lZJ#8a5F[B?K8&*'J,QP7LiTPUt39rjLi#3AU16hWh_hDACPkqhNYZf%UNtGDπU",eZ%F_CY^G5eQq+?6H7/'c.SyQWL1LxKQO\]74E7WqOKDP?d+LrK%$?6)U2sU<AπU"q69?:g\l.l(815'YWzj06^X\k_yPd8$q?SZ+TVUjmN/m?l*$RGfVJ8;2Oy6Tj/)πU"Ohi5ut\b^Yk=O0aN:G#V9RCL1i;QCI0:K1tSSX&x0gof(*hfg.llGoEDLugQP3OπU"^/P=S,SKm/)h]nH=Htklg)AOP>.%l:.d_a#cht-nZV>;Qt)\TvP+HolMR&'q=O^πU"H5o>hH\kL>8BsRbpwOifL1ukpvGDFZlg,DgS6v;8wWlJuoVe(;&d>j3c^oX%HviπU"VT^7ku3<LUNUUwnL-g2_'g#)TIC$M#+\vT_o%m3&7gQ*>LdJ7..&.A?Sp:we64HπU"q1]EpmxS+z>00F=WZ>U#GWX<.[9Vr>gH.?bjP4M^Tc9<Id*O??UoN;f#C_I5ynoπU"ilR3qR&_)WbZZn)L.CZk=wEV&&Y.]9iK])V3OkGlu;O-$\tUMcSz=6he8nuGrXKπU"JN&Xe$5OM$P-Rr/Vz:gsf*[TEX0_L5SH^Z$bm\Y:(GR4M0q#wz.H%4]+U-#kJv$πU"3TdYI(&nYT+UQu6UPYN9iCm*-/3Mtd7Ka&$<6w[F(q$m_xC2\]t,+SlBfH+]92;πU"v0L]b:7X5S0RHUU#,&M*'TR'_Z]>baQAmZ,dP=Q5^prnZRd4X'L[)'?(W<3$6(FπU"\,j8p$#/J,hwTBdANCs:'L0X;3L)?AG*g_EI_7G-A?-CT3lcIE4Kh1tA9o^nk21πU"5j%ZB=iuU#E?^rN8DoG>;Bv:g$thA9&ranoQed&v1h1sdOh*x4syc\C5K&yif^MπU"6j\UIR+$nq9RDtckd4lGo=VqJfXN_cXEnU#-v6RuI3+dw(_FB7^R-2-aem*LlIfπU".nEG97z$zLCXPkE\ImPG\l=X6)H4Sd]kQWmv't+[3v780)rCu#xeeEOnJ1#/82QπU"g2v'%B%RgN-&?rJC^\13_TdO/4Sh%CLqZAV;<UAuSE_[t8_RjJlrS4rNq'Y9A3(πU"btwDYq0d+lcJ3./k.qkJ>SP^8R;LV*wxlKPNyh3h5NT1&u*:2DpqG5F&yJkwQf&πU"ZY%+a8XNq,DAY<GDha:a#&ysMWjq^2OJ-&Y_7tgJmrd+),^v]Esvf3%W_rd%s4ZπU"/I$gl'lXgHM)qTI0N#:y(2Sx#XM28t6AA9#3*HFqU<jV<gdoCZVQ\\]&G_Qq:NIπU"s4f/WG,,#/u55<KoO]>B4Wyl6w0f$o)5:1UojT1]f+#+]CH'VU.XuRMVRUq_eJrπU":laoKu&nKf^YFu;M[v2K.Z^w/:q,D:<uhR9G,Scx>*O5x:9J.WMY-Y8I02Ok;'KπU"=wSE8UTn9Z5Kad-mi'cla=JJC/cH+2uMFQwc?c'EQSzsX5x>'\V8?7ZGI[_)y<>πU"6fGdrZRq&*0<pN'suNv^oxa.n$1jn;-#<:nddZ2=pG\0WjIGi10b=.(ZWjj/cO9πU"tiGD$l:>ieAoC3DRCsK7?>1)X,Q)^&I/8nm;4/]2UNW7=u3-neL)$OM=jitlIeEπU"-$x\?IN*-[^lH]cug-vDi0zZJ_wevi<cWDc./u5%MyGepehXP^6Lc_qG('H_MYlπU"Es9^.f,tCtjBSTj6CO1ypE9/g?#dA3Jri6qiuj32RQ.v1D[i]h-4.hl5YIepwpXπU"^eod])DiVy=3?6Y__607nJ0SMULw?H7qvssWA9iW(bls/X$%YL1e#Co:/aoql1uπU"D'+=mnd/>t_noXe$)&cPU0IG\#8gPH/Ru-QtmR_K-<ny0\dqr('u<up%()9%%%%πU"-%.AN]F=)RPK%.-%%'?A%%%-%%%.nu'w%SgfxKF>:B9SmkXl'kNa#us1FgQZL/iπU"h=FR.OFSv%*0Dw:7AX9(VO/Fr*IQDQvsjm#>nXaq?kVM*Nx7Q>uXVboVb<^s4XZπU"27ad4)BrVDf2/b?*=?v8E4Cjn-9qFuP?l6VmB,rB=0s(wc7ZcCXX_;QL]kNhXXHπU"iKRPK7f,3$62h)n80(]e4H)^H>lK2hnsI/Ss&*0cfc5\]&Bw*p<**YlkaA71bSDπU"('a7b;)$0b+U<4.Sh)gu#oXd_?);.,PEcu(eQT;>6Co.m05E8;_V3z^S?tKVkr/πU")>dInolb?-msXA>4Z4CIFOtl8i>XNr6'i#FXN3]Rt$c_U'tX5qbvUM-Fql0I#/OπU")X4pkDExxR:ql#_8UncR+&N.h#<P[4u\k-;dQGl=\oVT=&ZsraqD&fVVN,GKBNsπU">%H?8m]0)7g3;_H/TK-+SQmZBcc:<,TqPRhf.E/XiMn=,Y[DfiBn2]=JpKEpY:LπU"cK4C\>ev*CQ:bj6sVkdp-P$6&h<JR;ga$=oR4lUKabw'HROx^iD-hYu0mpTDX45πU"r;g%vD_jUm3T/UNYX\e_#gq[gVV#;((_nD2M'_\Bpa_^r/(p*G'.kNQ-#1\;DC8πU"y.cKdp\s+;#S;a<O.KdpbhhE>&)0e?ev8*W%V&ofT;bSCx<GD/Y%omD3G/GG0/JπU"I9u#F99MoAm,$\RXTF1mG^IIal>WN5;_V$r*#_d<.y.)Q,Bu9'JgG$%*hW:3?YOπU"uJn';6q0)pi=<1;uajt(OAYK=5VadfpW_)l#KrNYF?o:\iMc35/F9[L4N6/E\aiπU"tbN?)'>B.kYE\DIcv6&%hr&;c97sJi&D2p6/tx[FT)xN>g1f=6>-N&c9aJrgY=aπU"T4RjE1.F_?di7=KFRMBfevob0T2uU75DQgI8xjK?BVr3:PWYlOhXIo9i'(C,'q9πU"t+F$:80-A,/h_mf[rIRHp&d5;hZ,ugb;o3/Jf=2+5a=27'iJ]*0a#*&z,.Ia4E0πU"SqrR]2B2/*5c8wDT3hV#P2B.?+n3M;$2l&<ex/U$?gA5aS^nKl<PT+Js5/01ew+πU"E5Iq<vS,z^S^0-#kQCURH;e%O95Y5(HjgNJMg+Bq-7o=;%Mkx008)S)2o/N1(KHπU"D?fASv/MP]S>2uj*?Ukh_S*Rh(sddOl(O4&1LpVO)XioOzu5[c2jH48D4V0:CGJπU"*&YoWqS^S[3J(CU^],:GRJu1<uUPY%K'105/'^W4GB3[jsNlI0J^hcZ?im<6pg$πU"G'tg'u]UL7xKki7e5a]VZEdLx2RN:ho*V9,GPS11Evc9_F)cT-z-J3,HMAs6)K)πU"_,lV31?/zE&./cGVVK5Dn+d4E-wcv1ku=A0ttq5.0l#CtM1b<kcK7Z46WbH7]6.πU"E1_/1Wu=l,jS+Y3K^UuVMt;6<[Si\9=KWM#)8e6QGnRs9-0W#nTNYf.p*V5#);[πU"tb%p/gF$Y^i:ATE>A;I+q2jO+gQMCPVreCeLvR34WP^eA/TdS6xXl7gf0O;8cT0πU"&7ApDa?v0^GKIR_0F5?i^elpM*;[74(JH)i#?Wy5A)2FfQBFyQ/H3?)N-xO2pD/πU"DEc'5PMQK=Ym(F0j>f5M+tcjWrv.Mya2q:#8aBIQ5;Xnm_1=<TVA>&m_F?aL>j;πU"6_(pbL2/CcTk5]G7Cem&;oEJ/?Vyd]5\T=6wDH<_<%eX4rxMxs/Gt^+5Sx7R)6gπU"ekg9Wc1/)Y,n_\f549Tvo0*'_p2zLq9HDdOMn2N/tG1_#Yr'JJ2ud:4bb3K:iJuπU"w<n=ON/q0Nuy:N1)y<Px[dv)44Xm>6^g\M<qnp:2.Vd<2?bYt.?tuNeTRMnZZtwπU"n7n&24O79pWgKjD$5caX21aYH'V7xl6djpFmD935n.x22KqdHkYfNu6ujN)D+-^πU"'ob3TQ\IPh.vVNzM$u+Bbt;1\<jIrRP;-x.9h3MQ)W'f;Q?i*_DV>Z_\w/Fh^)MπU"djgY,Vg?btSBTe8lAkoKHyIltK,KZM'L<xOOXK4DAMKt%#/#1X?.1mgY7pFOyRYπU"7*eu1&KD&>t8d.m/h[h<MT_w'Du'']pR,\W$[=_q*dL\wsouD(p5.GQw#:_\TZSπU"o/3&d*)_8271lQ#pEX1IeHrqQwsU0wtBen[XoPT_B4gnFO_w]*0hRuY:p%\-RSsπU"et1:K;x[a=c(,Sjr8K,#;lU,il;q&Y'>X=e)aHCnDaD;k(giqE9;fU2Y1[']OLJπU"[KmqtjkL6^'ce8uZ9\Q)IujRlb&R=zi++RVw[p$F=0c'oltE;:Tfh4#Nt.dt<Z'πU"gkAl1VGcU*rxCHU?85ALJ0)VprCumG':Lz++q=dWp=)]K[b(Xcr-&H-9HUd^_0:πU"D];:.u7L7,XM&\/QDn*\-Fb4VPc.d,e)]o?$-^%JlHa_yS[;LH-cqL6s5e<e7gFπU"8*7LAug.fIYT[^zp7$WFWsLRBiHvmAT/dN,jOVjxTy28do8x[Mdx->39))JPkh/πU"[dA13fiH+XQWNj,-LHJL&gxe8-lg0qatv=KYAAwO[Xu#(8JKl*D[]N0jrSh,UF*πU":=MLCR[K56PL+U#<JH5#mJP?N4g]_))kLT?Dj8._./YPuh.epb7LIt[&B/Kk\8.πU"gHI2^v+s.UQ2boLbtpQkwgdx%'up(%)9%%%%-%h^N]Fa&IWfw%C%%t%s%%,%%%%πU"n(u'SiIthl+<fBT[?Kx'>'v4#rPnSmpsz$>2IY\l]t;D*'k]f)CFJb\W/SIkN7gπU"J9MWc.x/AF&5cVl+$K-PO;ft/*QP0XSCJ]Dw4t36M>'0)7.IWEt%/,zd,z.Rf&EπU"TYkS^2qe/[UGf#*av<w%#JASCa2F+%p+r7;Au9$(\jH%pPH86&C7/H[qTTU;M)&πU"E4[W5zZ3_co<\O([.k-O16i?t9rh6r92_edZ)R:+$lo4^=5)c=_22/sJ#26w4SJπU"dHDAHpBR$Idm:U%UzzSZ<%x$02*4eOziJrrkV,J_CA3i29Ga&Xqs6dUM?w<l&%SπU"nX3m/qWR9V'#zn(Va8_ku69FCL#qSoq)/?c]C/+8:/?9dwO=UUjK%X$y'U_iz%XπU"Tz3)T-0\Gf:4TMTl=oGa+%wo-j3UeiR4g;8\-2V0QD'CfVGoNMe'wfO7%+Me=%KπU"h/&YQ</eK_H3sbkZR64?E(>?Z1,2&Ej<q.0BW[(4J0RE/b?RgxdJPRlUSCr/>GoπU"r3_X.lc&7>20r.;U+<gD0tg?03rmj?[Bj1B?L'^2CK1DRdz:FX$Pi.+dg[D0k(eπU"rIwCF6.;%ibYG+Cz4n[MprN?i=Qg\;)b4t\=lYd?Ff%XABR\tfAvQ&)dD_JqbTkπU"-ayN5uNxg%3LDgd='CGv%XH81N7TyBl8^IwVZ2tb=cmTtPqN+vm?#fftkrtN25NπU"GPkm&wVhL:I*dS)9AE[\Zd[G(u7BTr;PT*qR#_[#rFvX>2FvDaVOR?,e6\3VN#OπU"iOjanV1YCAr'Z#hJ[d\n;G6uzE_\j4tZ(h6kHxlN-g6kcu*YvXY*IH_37KMZ>ifπU"(^)QBy#/>]oVsQpK-ty3HU5ZTBm&NmaT35Ca3=TamuA3n2(I1i(I9ZYw-iRK<bmπU"=pnY8Ue'\.$d92oqoOhc^qK%\4+<[SZOY-6^gFlfmdm8g_MDsu_qnB-BB5c]4:vπU"pCi8YcMaeC>I>He7TnQ9tUOC8F\r0.Hpt-um-lB0]1ipic*A\z^TEin?U9sQo?VπU"Q32ai2&-HR%HHNRo];2d,$MAv[V'PF1;ygAdtXW4%l)fM$g9-/O;2PyuqC,2CBoπU"o.H&mp(_w2hST=A-'<<v'\]]$&j?YBW1'8&kp0OX*H=cC]8]>w=V2D%f/Pd(UE_πU"_W$6zz^6ouJHa#]Y]$3yIJC(xK6b7MQ3%L5jvLp2oeW/%kZ.MX_[LLBVv$RyGT[πU"jwjpA*j[c;;[%B/Dp8RtM[bDQU#tjGYW6y4_)oQFVr+(N:%jg%=>rKL)(WA8[GkπU"p,tfTU[Jp*rdo#X_bx:H;aFeEJ6;MqifXF['[qU=.Of\Uu-r96R^1iW0Y7>l\-UπU"MPY_==i[<wQ$5L%U[:$2RwM7p\+5;%_']I/*Z?4SIqZc?vw\^N9awH'2i)/_,D6πU"efgM9/obfw7?Xi)Jog)lod7/Ag20_SHYKBDMqJoB-29ZjYGTD$1fF$]*q1-Dpv3πU"VcF>lAh5',.HCrDTd5I2cMYLWHI$jG0?Nvp:o_^7%kLiZQ[Z;rfJloX]E.gpEKTπU"DkMq'+wgFjp0M66D9>*K#]9%*+A)K8kl')59,Mt/((=jOvAi,>gT.:EWP)P]nSTπU"P9dr\tZPkWdOB+H)%pv>1nquQAO:Rd=Ge=/u:<Fx9f6n'>(k\H.B)?j=gTOq:%QπU"fI9F*,U.rBk-=J<leZ:F+c?r]&+Tbxp_p#$UUq,8Hm0icuy5PYNPcKZ8>pgVvgGπU"N-Q/Dltq[_Q-AAuiAGJ[6$Z&3NUvbja4LV98q9DF0iFHbr>^Uh(r,>/GzYT(E4NπU"DmgA4^bF>:wVbW&y?r38O3D_3v_+R51r>8%Q>SC;N#hkVv?\o=;AP+pZtmmGP1'πU"#hWo1W&TaDq2gt=h:$Mr0YlA63OD+N-J51[auA72AnbJsHJ9*SOgCV6VZ^4Z'VGπU"[Dc7%<AI1xA>ETma6GUgo_hd#5PDLrPB;54R&#/U(4vAu]a4*PiRPUEQd6$b:TYπU"ogm2P^tj#]XEb.^AO#O=$xtjMqSvkwE$FhuH^rn=b[nPpTejj/poSnHurFB(lhkπU"Ia+E-V[eSb+pJ66a#oi3J$CRr>pKTwI;pY1FxBA4K1bs;fisrO253pDgu_0WsyrπU"cR4EGRy/_NoEPev-zEsi<%B1e+B/h0C8(cHgSr-K/JcI9/LPr=qGj(<U#.l);SKπU"9Y5RZBIGVs#-U3aN&/*&*U%=1B/SBN.nWbAo;cjb2XIc;i7i[FA$06E=qCS>ju>πU"w6d;J]uK8&9ArGJpF^V0=5)hE_*]oNfUH6]nP\%A(:i*%hSCX=/OsoJ$AlF2aFUπU"1KPDCN37$T7AB3,F;DI8Asa)FSkA0;M5XG<u>KScAu0Fq):d'^NUNF+,wca-Hp6πU"<>kQXtVMJc&IH0q>KU'u&%m3msQ0kPV6?4OS+\.p9fcln2t8epY8qQQ7iUx<876πU"_$^PrH2R-Cw_h3qe;2*VdSj0<V$$2IeZ096AwXiG3XD4(10dqqq-at-GSl.I(8CπU"LY'mL(H*4>_mC23lM:Pf501wWZ8=X\)JEcX9?R]-3.Wka;&0Qhqua)\rbmpMF/)πU"aW8W+$ks2d/1OfURIcBmy,A?6u:oFi'(3DrfNG$J3*%j<^<pK1D0tHn*dq$+Z9VπU"=n<M4y3\4H48hIp2Z)B(&s.u6gpqP+%ENH6YhY[vk9eR5YP10Biuc6XlUhP'+iGπU",/waV$&%z85&ctg7I'kzdxbg%jzg\EBN'xE8[^rN-b.\5-\lXUi/=ATP_oKEZtbπU"p72Ft)PhY5[>Y<2VGZsZ\9GVUFj5PR)EcUu/LY5,:dC]2\zF[C-(8zdM5fe;9*8πU"_ZSx[q:Ur5BMjKD.pi]tMAYE<vBw(hVx?ju<)X<#aNL<+N]gv+GuJF][RL#<a;VπU"+).mAHcNW7kCYsUM^%iCp2&+K-S67.3ITLnL]7#H,huP&bjhpB&_yV6T?WT>'-LπU"KNq.OPf=Pk;rnuZxuZPtTu*NaE0mKtz=5r\F\t_vVr^haUhhg1jy8l]XhDsRr[hπU"ORr.V<ZaXBum8i\cmh6pD.VF#]XCY702E0m[d$mx<1g5Lsf:p4p'BimI0]7gaCdπU"TiuhJvVcew5:2hr>2Mtrtpuh?h7gXc^pg<GHkelj.-hZ]MqiWaMYoMRr&qPK18ZπU"9nq5>NEXd9Rbssb*sS74pX8pcX0+k0rWLY5uXjy6Y6Nz_OXEOVc<vTCY%z[OiWGπU"wd&H/<9b.R471dF5T<mb2)rkhnO'Q?Ug#YRp]f_*+,<gm3/3Spul?O9W)'S$Z,jπU"cgS7ixS[bl>4JQM>Xqh2D:%gi\8v]5IImuqqQ4M_M^oel5s>fQOFmU#gPy)'1AvπU"C(p/*f>mTi1ER.$>RH0DlYvVbu%Xtfc_oHE]'kX1a>HcW6WxEUtTJ>>rvGcwDJBπU"&FCD5U#Qx8#RRKx1kG[(TUiX/Io+2'(fY-W7u-5#W(M+-i0E9g(:'^cl,3l)ZGFπU"<?37ghcXt&3ZGiHe+7nhdup;d$xd#O\6n<A[*+iobM;Lm(8;jAMtz[&KkneL3[zπU"d]9];gJK[F(Wc<dGAaYYS)+#8._,0o1^qMWiL.Xn:1UyEyh50?7Ge83)U,f_JnlπU"UpJ,Aabb4RN-cR9Kds#jh=K)ej1Kp,:Gi0YHAmRTeRv.N=DN?QD2ggCWC5FDv[mπU"LG1?B[$#(U;-UBK',N)6^Aqr#;/[LbJ,vTR90eqt[ayv[Y.w93,S3hZ2xtDyEc9πU".w*Y:1W=8SZa*]gYdN^M$RD<y0Vd_KdbnhB:M<$_X$RQ]LE3.Vhu;;c9Iq-G45bπU"Z3sk12J[dCt$%)%G6df_dR]vS)5M,4Fux<oBA&=Rd.hkWLj_xS&lq9h6dv$?3:+πU"t5y4kdpm$(Qh1hRiP)_bPlC<LjOM[37,(K(ER$EAofTzq]h$wZE,n3e>'A_MhiQπU")J[>=s'odGb,[IxsQ-c=B=/0Uc0oN+OPDJmd1;s/t)bD]ZCC]q_f541,910=z]3πU"4+D:w>=9OGYN9B_S5qfUBiTYDNp2[#oI%M.'Qv*tYf-,M$H\K[;Qnm[kjcvJd8oπU"J=65i-JWE_7GghDro6nmLrnO>GIJt8Pn3.wE.YRBRHZu*Xr\;RamBG=X%#l_JkXπU"<:fq9Lf5EBF-49>QL$ZAdOp0KAreq?ASsIN^6kNm;yF=1i:Xj#8Y>gkF*6:14*LπU"iIb<ud.A(VB04eA.DSg,td4;uXil%TcTkk,H9mjU;*[gpD(Rc$3(>Cib_cL+abYπU"bMs?6&'0\yZEu6dd*/BDD]T%M(19;?/%/^=,7#%Wa(+dSWo3YB8PSdO9b_AbX4AπU"b4Z4?L/V?tE0g;5Kel(u5F]EahDj)H4p2M+H$3WyM_DaunLsI^57Z0old;BW./TπU"cceGVsYN^/iy1q+5yufoM$RnU4\0T-=o\vWycXO=3qXwLkn;mUQp<:[ZBbb*G\dπU"rZ$?('::tB^6zS^*RDW&n*ZZr5^(LeS&X.U_UQ'9,H6lhKU]<WO'8;.[yA9OmWqπU"pG1><(kj/3g:b;9mG;6H)9)y,;u.pE?0F^gAp])uKVP+WeE/zQqMpw''FBv4)7;πU"A[m4m];l'[ySeLQTyQojH[011g>HhzB3.?h'9-q'ribF*%:16[_(pnNO.8kUY^;πU"31wR>_rmU3$7=vObo*y'S:R.#ji_wpF=jHTb9:/-\e1*bdo_Q*2tsDOM9(892gGπU"eCs/NOK*k]\aat)Il%jr)DChfm&%yWMnmKmDUd)UFmBLV+g_u2yc\uWB**ojF5DπU"w2cKf7&:FV$.IX</+N_FK]O1o5)1e92G+h4r..=:gO#HLa068PElw7B^8I%jZOSπU"0468^;&aGeTA_mpW$fL6(0,i[foT)9\,<vC_+p9(]b]:G97FjYusZd2%D^Q&rJ3πU"i_vCs;\1En'TyXN4t5,#eWeH[-TbfD/:b?Qmkjq5sV7rPp.'>?AN)a'ShL[pF*OπU"l/1=M=wZr#EMaQ^n]f7$48cz\f7hOJ>QW-B8SbSyH]bpChXvp;YdjbDsQ^m\23EπU"M*aU6bxJ<aj5t3_s6QJ^;Kj4VpCAgkwuOVrCF)]hw^(J.B3P+P9xROv;CqKB:B*πU"0vS[)Ys1j;zTTqg%7P&V4%<n5\+lg=N.+Fp[[D3eLMAo,g<%(-uvCFcu)i/oHp%πU"C/BXbQ*D2vB+TVol2h&mgKCZi^;)>U)*Kyd#.aA.#V3g34Y7TReq5n*rh3.X+0QπU"_Ut\Fygerp92O,.o7wI[k=_2y*S&ChlWS+_J&lj%RR1DKanr;-z<B(&]1Ie2IADπEND SUBπSUB V2πU"&tm&U4U+ExR4,&lA:p=8BrP?SJESy\<YmE+ezX=IM-?kSOsl,vO'NXarJg<fXJ9πU"e9uUhV3tNX<r?ft44u,jvmjE][\rb_s&Eo\:&Y75V=h&3ZP9hFuett#nGKD-;T2πU"J\)HT&QD/:/)jHP4^4aeDU7f6p)JW#)8eb[ihJ%ch&)r%:pm]%',UlKZdI]'B)/πU"6qAk&Ogk_p[_q*-5)*bo5_N'WE%lGf24k95,_o_K(*NUv>e9$o]E:Nc6\^WBV[&πU"AsVKcOFnA[/lT^zUgiF$X;A4Y=0A,o0Z%:vx.MiRLcK+oeT?EJK-je0zOS-%IKEπU"Jm7;J$_RJ^7pGM_RFNuL5LK)H-hFiv,/R2ngL^PspkRt6[Xz:qbeTB8#sbgm>^WπU"cip1[U-'?L&[1Hvs>dxG/jMB&]L$fh?5*3xpx8h;XU#c62O8PW7>kc?SkF25aPBπU"Qp%V6DI0E=CIi)9v:?YHd-pXg_JKcW90g*R4T/Gh*a%gb'lvIh3$iAZItKeYtB(πU"#g4]JY##uIvdln3gPHI'\Uj-?,?5.;MN:jwM3h$Tg45L>,Zb9?nglUJa023<LIBπU"<5D]a]=I;J'La*O\B3#gTloi(_%_3/T6NkVj-4#EUfBsw0if(A:zZJ%+6V)9TbkπU"S81]\s^?=d5MhFl#WZV?ts]*8XfemJ-CQH.oX\mwc:XXn.=%&F9/GdhWG\eS\6(πU"W/F(L++maUCTWh'ts_i0'F,16U9.1Fk-N2SUpF[[/$nH7?t9Z8G+/?G4$KHg.RFπU"L?r61w;k-l?cs0iNcQ#&ko5o?H^9e;E**yD0nv*p<tW3m:]Wcg%=^ZTQb%V.B-tπU"FFnAj-U':\a/q*)7Lh:(eu:egtkk5xJ(Ue$DEeDb2Ta,lE$hxuk\<QVq.KY9&9QπU"(Wac-][T7&7VsavcPF1%)7rLfST9-IwU'gTV?&.CIe1.WDUbGXW?WWFIXlp3\3hπU"eMFHp&d0ogF'D7[Da4bS0]KR=4/t]$o0K(YnUJ7<?l>=5[VNC=H733p:>Zqoi?yπU"#0-1=C*3d<<]M=bmP9/V$M24h)a.?j;.VtCcJc$WE0i4=KsWkSnRandw\3WIL'DπU"V0m*]qsp[9tt\NpA$*Y*_loLJ\$-tDQ9kEFw0+6,u=_T=_=W$=DGg[LYn)>PCfEπU"/f<?G9,aYZ?^wZ/6pO&rpaPkLj'04:o\(*XpRs_[H6ufm?)BfUnTg9UDqjxUH>ZπU"qT],.bL+*5;,u>fV\6Q([>Mtz\(r^/F6wXc5tCYV?o=5KPxs>m?XgB0n6-#.6xkπU"V1IpxulglPf#TH(H\(#(+PMZv8EkuHfu;I40HVU2LXV;b*39H9#grkG[1Lmi5zIπU"%3FVR1lLmg<q2rtONm^xcL%5:/&I3Hj]s_]XHcs6y8#BbR-Kb$1Qhz0Z_.(T]>:πU"hn8eAO($RJE&;sWW(G3]6UP+SU^RT+yMg4^/Zt3^Roct*T(1CZUMmu'Z\4z:*&\πU"t^lJWr5'[aCic>ZSqF3%luKBjDlDhnlujBRRX#ufb?%nP(c\a;D8]w1&%dDDx>rπU";'7/:DN.t2M+[nZzBQ;&vHh-R^0C]DJk<gxYUpZ?6a[10pN70rdpQQg.floPaLoπU"i?kE?0UmJ[W2lg\GHV>Btp=+KE?ya<TaG]O(l3AeU69D*Jv6-9X==:K2PAmDu(WπU"In^1gn=51r1,^LIMFdQT7^kK\7cJL62tEE\Hoh?lS>/Yw3z(.17$JHU%=CUg-P&πU"ZQ2g_V-[T%$GFRGF]dGa=:2hZpOU3CMGhC]2Fe%RqGXp;ZWR'(B]TlsLa4%8#z:πU"N/f,aapwk(-Gu/]un8-PKfsKCigMn*iG(KmV1SXg7qo=gO]^$)bm>--qMT-VP0wπU"IgvY^i*=ncTc26+.wz,c_;:cpLu%>hm72)Y%(U&a1OUt/#L//prou.9a/.GYG=:πU"rr?q\<Nxt^&90n=u]L4vmCRo\3Nzb8hY=N5Ks,UT;+#l.==0;Gsc#wM+GobB3xJπU"KdB3kD=?+QBkfnr><m_'Oh.6(0H&:YYhA^GxW$9/<BE?c6$<G6*Ds[r-Xp$Z1?uπU"Wc*r]ZNWq7=0VbC=g\yFq4M1RB%,?;ZnP76l&IrBZ>Zi'KRFDKewgQjqH&+n7UrπU"9T</SSn_+=/pxNr?F,jfA75+Bpnld1Hjzw/sT6h*#CiNz:bPi'9ilnm8)p#GYQxπU"KE#Bm6s-TAweUBj3&0.EJ=3nxjQ'.f1$SO<.al<=_QedNP9ka*0K\jc;ER*0AinπU"l3Xp2*tn0nUC6#d+''SO_K]Rx#$_#NNiK.EXH&+WL(Sck:7d6h'B.nJ%1*61qZ$πU"+]IPiCLIke/FV$$Y3ekC-tSi'EFMKt\]V7ApX5pRGNeQKt=f:$5I^^tV7(uY)A$πU"Qe3%npDc2o8t?PfPcI0jp>L-l.MBZ?hRi'P%dV.fZA\3Zti6wdD5Wj<PW;ZL6PWπU"D*8fUnYG=4]#Z7?7/i^1VF[:I:,8)?Cj7bO.*qzuIVzpev[O;H657:u[N,LLiblπU"7afnmgaYUKvm=:aJx^9mq2<te+THMT-sJ<><A<UJ7v)3[<es9jApt:*XQY'YMaxπU"tdi^3FPrZgOGG^wbeSGMFF5l=8.M\T\96wWMuuGe7=0r#(GGT\^;xglj\KV2TS8πU"2<$+x'hO4Iy1e]3o[;yvZMN;?MZKIgA]tf0pQbSot38]7gzMxypKi#^rcP8%;VBπU"bamOBcqsn9ew5]m6w3%DJrtM&t$81jl)aQ_i<Loe.X>*BR-Zt6FDKs1<>4=U=l1πU"nlD$>+dM'?r6Z_K[c26&XYWIh,cB(XF5Bw?]F-(1]9q%)I?d^K26=Hg;7-yEY([πU"p,iYrXLWk?Yl(jgNKZBGv[cr<C3)LFc0m/VNkZ8DZLfq/5f+z?h$'W'8bKxlπU"GF[M)bX?CaU7X8F0$p1)p#U4K8GjVdgzkRlSbQ='LyJ=:gJ<pHn.1eW.WewxZEbπU"7.Tw%F5s-\ph5.7HrV&$2<M.#xYGkq$;0ibKL+PC4U+tk<:[NMdk</]SQEB?L8RπU"xR$)?,w'j37AJJWGLi8UsJS=&J899Xakx:l(OsTG%Z^,Do1j6<ae'$V#hR\Zt^_πU"E'opW_+gHBE_&>5&[qWUmXT3Ct=tNS0Wh,9epSM0F[O:I>H;%xWC2RuR)LXFi\XπU"V?Ejn0>h0?\+'0eqOwgM;25E&oeeKKt;n$kO's?In?kOHN<QanKd=MZ$v3%>^X-πU"8.f95L%EP+Y\((Vr$fhi74/c^aMH6aV_l7*dDqa<.L3B^Ac#%QJcH^RMrZfzBKCπU"g..h*]WJOofF^H1)l^KR%k'.mI1#=ZD/IF+r,:-K5DM.^>MKxUh-tlXWErg>(6$πU"^D4nQO#78h#\s5-Ri\RPkXL/1dU)9n1Rip:.bwMpqSvF>,0.:ev.?QrITX67ZGFπU"-MEYkaV/N0wbu]gPqK#]Qp/RW[1MKH('Z(97QtL[DfKbZVKj_KTi6<LSMcC?HpnπU"g'^u#$P0KLVZ*'1F;R.$$^W*F8g7N<'%):A/dJ(-8pO+svC<NIgI[7HUtjod?AaπU"hChyG2s[[VuRM7#1<My%TUsj)\2zA>sCb#:t4aEAQ2xSaEMY1(kxnU,L[;5p(>zπU"4k>-[&n-p+IYT3=;T]okImOVt'j]nF6KpIN;2)(uvIkXmec8J]mo0VJkKCjfjveπU"#bhG9?\&.^H6OSqh>jS'N\IQo-,iN:r,#%[Z=uXJ$lf2b(5h<RlA;2HiSL.VaaQπU"f[6$MboK%9Z\g'seX^,.EZ<HIXOAnJTiUS-7e_uJdB.m3Xn:&4i0.SgK=#us#/4πU"hR,USbnJWTd[J#,i?0NH'tk-\&ds%i]qoHg<kftjWUgV-2Tc\QQBWHs_%gNN^y)πU"n+ZW(3nf)dVS:5'8sJSIPRhX2BVT<R]9=v-Wn73mE#)tTC*eLYmmCN59<B*;Jo2πU"Xloh#Y'r&'LWQ/0Gb%wFBY=^GGaWVuTL?3Xsg(2,zi>>+K=lXYr\dU[=3lv_OhbπU"Lr5qgPOSB$=F4rf3(=YGWc84E1CoJ<[yKHbA6s>GQu1JhU(=)7UsbQfs7>-EuFVπU"$GZ?-<tPFEAQ8]9-&)fgI7v<WW<r*n1d\uZ:7fw#I%F1&AmJoQoV1a+2D;*=E]TπU"V^/ci1q0=L>DpF]^>(o'RT(kMHNV4jSxEG9Gi?VtE<(uCBITB-z[.O22.$c]Gd#πU"W[u(.P%kz\NtWzG;IB4lJ-La:6LGObSC=-FH*T<PB;wOCgUSC2dOUp_PAVjbh&>πU"-<ubBtNJ.FWSaZNj_Y,?tV]:>Rq>y+ciP/*.PJ):S>5%A/Nf%I$PN.>)Wk\<S:?πU"4.qOnbNnO5be<uVABa(Etlnp(jRVm=B8u)D>78M7C&?.k:IekBqzr\n]IIU&TV<πU"kr^-i*GJC,<0U:V2&.JNOPQ(xqWh^pv(]fn$j.01x5b<wQ/KN(MpXS(0-BT[2TpπU"[6Qgz8;&]YG=o#F>Z&,t+$4Ht3,]*kai6UHB+y=0^tz6p7$-.;g$#r]bROdwa/aπU"E&B3'=m'TT9/F1'-*awRRIBQamVzE>Ps(qb:O/ht;wyI,>B5OjuX6IhX21lyjuSπU"uXU*$PQ[GN_dkl*AF?V/H+K7d*B3OOpG=,*hUlG2=km,_vopp\s68NZ^3t-5CYcπU"rHd8<9Vx4%up()%9%%%%-%TNS]F1/'D#>77%%,m%%%-%%%%hm%fySg7fxfa;:FTπU"[6+XBsuw<MF+h7zzWT8L=i,=^%sl%4+B]PO\64X/6)aGi&I/.)zuv)8v/1%_)dfπU"u#Kbkfb$u'S\A-=E%=$EJe8Huo0Ke-cLka7Uth03$VJjtYN+t7*2cC+rC358=%UπU"/Z;CtF7sWDju5Ce?Hao36?JLg8ah$-==KrwWtIss.d=]KkBaMt>FuW#)F6(-WW,πU":[i?cLAqqCV\#qIaU*O8:G*YZ2:B\M:c0N+JVLtxUOtewp2JZt(G#pYi^)>FV:cπU"-#hs]52HoUSt<gi%+kbJ]WV9%#'fibe[<nh3a<h/8WrG#p=2,p/rT4L#a;7+'&6πU"8^YHE*O0keY&jh\1g8iuIB3^qwlQl3lo%2k4V+owqUD-LNX9HjJkL//*)u0;x57πU"n8qj3l7*dnbZc4lbQXIk<A6/Ln+wrfjBs]1T4^(C00?9HAgZT:*F?i<FbW/KYleπU"$)ZHjSmLZgUdVOKXrjt#?AdaH)_A&H\e/7#LYK-$Jb'3mUJ;G$YLIs\RI62^>x6πU"X'puQErFz=mA\?eB^lcL4=CMWZTBwY%D9Kn/8,_I:/2;aE9uGupTX&Ea9tMQJ4AπU"vtI5op3j4(76WDo5BEMo<PX<kmh0XVZMdHg=[KaW7V<#Ep<uRI1a_RZS<:s=41BπU"?kV]67e]w_x(Hf+48c.AzTvO_Z[2)GB#;Gpw$>zfhVyG%uIAl;2VC43+930+k4(πU"3yT2F5p[/^Gy$eyqSR\WA/_?,J]Rfu<kd?,ZTB4o2N9Nn8a<u:<:JQfVJm;;QVgπU"mHo-j#eXaH)w[9IRTY[ELP&*.NH:LSU.(nGW?S$CW^_=k4SLuF6Xo#M,Wwndup5πU"JP==\d$$_0;#[8O1xWN[k&NUN<RcXdv<Y;xo\QB'\-I]0%B3Dt,xF7Kin*]iS[AπU"xcQ&K1M*X4Zq]Vp<3xrid\rG9tktYm:8,STskNw4l+-<Prr5lA\O[3.nX4Z'Sm>πU"lP$+VTR_K9nNO0rF5Th/kI<YIof9>T>/iI3F&7'i%d&6<j9A0ecL63d_N&V6dOhπU"c^=sE1gGp+L^W=9dlHY:\P('^v*&fF,]Sh5s\8lFUvNGHQq*b^Uy0_0i.$S(*<AπU"8v7=:n60IoVX%Y$R,8H*X<S4[&U:t+_f?+l-d:i0KM12wm8.Ib^r>u#[=<5^E9lπU"8<fIKLFHCJu$Ee\(nPiwFe#/-4[2;rTi[d%nLY7>]k)x)w/aHQjk\*-iM9)8;gZπU"7f9*5YTPZ9Xv2=,DwYsaN'r#_x1r0t.NI(>7Ep-+iY(k-/)L,.57Nl=>AN9M:/cπU"U2A69(niz&l4x1S<lP(.v>Cj,R/Z6Zi#iIO4/0&Kv=%8k'T#O'cTYM#fmuqjmDXπU"X]ZP6_OUNL(=61Q?gt&<]Y2ZVjQY[Hr=rAWM7\QuIOxB.4,t()cgU<Z)pYDrOa_πU"FM?MtF(6Z0mP/:nn/agm2U>PmCU$AOT%m=[q_ocw+CE,\H2AM8UNc-+i:.N*jJ)πU"gx+B3Q]GH#[[9h>II*ZX_bUaB<nQ(Nv2OMv;M)Vb\+*Y\>^W7oCK'Au?_#89)n^πU"ch1gf_c0HXR5Ct]g8s;%*nj/nk:-Gs$/$k4vA4Kl9N879x1JwJQpk,E;dzbk.h8πU"=&%c'n$??k;E1kFP=*XgW,POQ7W)^['81ObjUCA_rIu-+*mS%_PMrooq^N[l:SKπU"U:(97cp6^e(ud^lW0UUWTc9rkdq)u./a^FNm#A'1\3BM\Cv?Mrf?%uJ0klQ7QwOπU"Bt(=2k5i\(W6Sj/HK;Lv#ZO=]--^GJI=?Y4gg%*Cpii(9c1]pak,Hm.-Gc)E6iFπU";^odKM8$LS(vD_$]T\bqpwnXfH6Nrt#7rH)X0?Z>.rCHspa0>'gsEb;iCT#J_:'πU"=A30KMg-0_7LQuo;CVu><m%z]AmsY>y9$qLj488d]1d;'f#?Tr'NuWZRxE'Bu.<πU"tazOpAjb30Uc>d?L+vEg.AU[C66h9H>:L7rfQ(UxUEc-FiD?oOZ:m8k5[RMIm%hπU"kxvqrOjeo$uA<tED541Y]ByIvVPINlx1w+p]_*1qAPuDW41N4.$MBeiW)Ai6T4;πU"otpq&j$4lH5+vhSMfwBKhxqA.$[Jq9\y9YPgIT/i$OtE#5?CrIsy/I%98k:bF95πU"k*f2]3i1sxvVTJ=(7^XdM#4.JEp*<W-?FDSr%1T^i9,-AF7D7xxP7G>K]2IoXZVπU"b^CM+B>9G>L[p7;;di1Y4rviCW'kXFI/u$;'*r)T(0YhE9afY':rhkfuWTJE],UπU"OS4q5Msi'q[JVDoto]nTiuwmTjDCI0J,QtgT,vKTIN\rOck$EY\WHNKSu0FoK%QπU"nM0h8qQ0A7pJOeF2a5g6+,pD'a*T[Cng2BuczIKNt_z,)6zaXyO[)-q.?9*\bGUπU"pcLs=d)_t'Nbb$*.qv?).kWgLOqDGz8%rM^&\r=SSp#m)8)ljFqUIA2lpPrj/o+πU"ZQq=_FJZ+]*5KaC^A>hi&gOx/]>Dx'\SX(ShY:Z0_)iiFyo[lqmnO+\YJ\ADD5JπU"12:a_S'*OEIlaT5wgq?9;>/O0Fw'd/2iEbW1JOA%t%0%4=gqJ0;-&LnP^,&WS:gπU"BJQx\tB<UPsl,K$sI[KK^\Q=V:CrS&*jCK]Z;?q+.m8YriPZAT6%gHyGeyW7b_1πU"5y#'HhSwbIS35)v7IUK8grhTfy?(;GyRDBoy[TcHly,W3v3wMHy8ef]Vp^hm5n^πU"D45r-Y5Oa43E#esY1O]6J;?]n\8EwnmY[7#0Ly89?oAcRRY-$JU7X;m%?0I]J_)πU"<jR7vEH[hsx(*$#R)6C]Y<gk1O-M-+nlVDKAR(,iAIhXSq<D'?;uG<fX<%vz0\SπU")bG4T6(PAEVSB/dhz5vgFZc>ekl.<+JEl\b';W/1x2HqH]%U$7_L%(G9<'R-4JAπU"1.ZQ0qow[qvI>?mb\b_e6MYSto,tCbm%Iu:Zo<PtW1x'b,;yb,_2MmNR[y<gj*VπU"k^_MN3S1t+gVd4)=i-fQkz.Cervg(7LyOZ>Df[P,FajOz5S.gSpT5Kv+-lY%k^fπU"'><$>-n'wj'?ZaJDx4Du<O-jf[*2uWr>ovVRxmp35fP,_dUtq>1Kq<E(6JNEX78πU";W5h)us&1t37.7;kb'IIJGo[qD3%E#z=/Y^*>Y6$<Nl&oNwcVrtr8PPhNmmGS)9πU"$_+oJ8,=G^OK)eehx7vfdT6Hatn/q21$xw$]z/vg_n\Xi%eD%tRE<J.ojwYm\s2πU"aB5=A[ARfH\$l2YC4.%Im'LN+6P*a%csF\d./oH\8Oo;R^PSjCQ*<]lq0R^ZC>iπU"J.N$8a]oAY&zxep/x2;ysI](k.QD23x-BDrJH4fnH?52)=gRj.()e+l*hV*uZVhπU"avt\)SqN2fiLn)eMyszyEi87=uTETu$tc-5:w?eBI;V%Y3&AS#>_<B#)>dUMV9)πU"33MvcL+8xJZ,$dG7kq\BgwZ\FLc%alv1:2DW6by5(7PRBw&?$%jgR;xu8:hx'leπU"b,r3%DpFQRJkQUM72=x&j8ZIACpGuMRU[XRM+[r,/GIopJQcB&SOfqiaaz1MGXaπU"XL>RYb*64s&b*e2UF#Xl'-g6$kSz]<Eg&Y#kWKj^='aF:.fXu'iIQ30fR..&v1YπU"]e73O'7j-;)Lqt7v:I3>EdV'$$Jg0mD$M&AC\[$j5bh,_+36^I<rH=y=xBGhGm#πU"5N>T3^MeiPAMZXWo&t>ZZrA5t\iDNHAa**1Wg_i4\tyW=i<2KX.uoe0gvAt;CGtπU"dy2nSE%eH$hG]V=X90tG7z)YJ9OQiggM]\NgY(zaK5(^UU&/.YPE>Bd0Q-c5PG>πU"#Gk+?AP$OjiM%TejQ2*O]<mnC^FB15cQH)&e[UQ=,6A89Laau*rxmW_y%5ksK*_πU"4%BtHFf:=$d39u*,&IVJ4WC^]#GeN,kTN/,4P#0c<S>y[Z^lYm=U#Rqq;^rKa^lπU"^Kcd2)tY/G;3TQpLUJk>jqE03<gq\$:ZNgazlYV%eH.hLA4rSgD.8XraW=leM::πU"47:jL22U,fouH>'9g'4/.V2&yt49F7BotSMeh[Y3'rix6mVBl$-PRyRQ$:+k+o&πU"9:l$dD$p(7DxlGT?O8UD^[,A4vVO;q+*XATE/D*,sRM^DUy4/fE7A;SHS%M,GTqπU"hCMV76zd_)1k1**El,fQ([K_tgZ3RCn2_Zro(r)VWp$ZMegNE.e^n-nd)/]ko6wπU"C^s9)oS'uw'ieyJxL]$l_IcK-x[z-P0F15Ff5=exZY<aZmebIStt;2E,J0#xz/]πU"qd%Ji.]e89(pV_0jo^#x:QE7MjW93&:f:'%]r40^BwD2:xjrQ?x:#_x^x6'JG1fπU"4^9'hJJC,7Tq:?kJ>wWrC2<ES9/T^5d#b#%7IO3[8dp+5nlomg+5;-QoazES;$\πU"M?W*mZIbnNl<M<tI/)K<x4,'RCzFOV)p<toS?+Y9An\VQmPq<%KeqQkT0QuJPA^πU"=JIVf+%Y?&n[xCnWof.t0UTDV:U&Fff?/VEokP#6NX,diogCj,bKKtskoA5KeXuπU"H:q]ovcdIApo5qlu=8.3>Hv9Xz:GeT<Xf[F#H6GPKr^l,?O#Udro0O(7D1aX$?\πU"ctvt'S;.pVPQtpqFQhuTI<((2SO+rrv#Q>20hpJ/qfq\fJN#Tq=Mc8<xHZ*VoK'πU"OJ_#u-WIYJLP)I]<8k;\n?Gxt_uGu>T9a*jW$X(9O7b)eSjvx(1Pnt2oV[1/oa4πU"bRPvcO.TTC(?8nVXL2x,$t#<DBaK^AK2rD#.)MI+qu7MTtMhtuR+4lH*m+[>3[XπU"2x\'l8-2fs_LvxqBxxj\w:jgn%z1[YY%X9[\wB8&SbPx43=-F8xYoc;pxbJ_m.vπU"=A*>OJ?D,hZB:$hACsza&+l0qr.>J7,IowBtqOx_%o3?[-g8jI%+tDAmk4&ma?NπU"n*KnjzdJQR$OTaY=#;H[=cTq9WYQLz>C?Dj/tsCUqs=er[zCd92CmTCOtGil$-PπU"cJWuvdsh<=;J>:,4z8hu;RA(C(A>vbkqg.MU\ZCKn(<??$0xla&:-2)Tm>e7DaAπU"+0g9ECVh)l^QWlq.*V-2(%f4d%c6'-C9b+\je^;)ff*Cnc^NkmuIE:9k&qlz4[lπU"EmRgk,Z/n5Rw,vJhQ&*N5?FVU\%4<p2j8.P0cfA;M+?HuWgLS.za$81_DU/pO]cπU"lQ.mt:*=qI0j\LMROt9w'Q,6yyPMCD4tkLf'O/YUsZGe:KD?*s.a7roBlq1DkK[πU"?2,C:u;77Os6]5D%Lcu0wP=3#Ye2fai?G9?9g6qJ^x_^Ld0HE*FuzX7mSI%U-oRπU"Xk>.P/Rv8,ZC*#X;cHfTA.)ot0n_:pW<D3F4luZ^r.m=>Va&W^qyWd#h-yLm*?RπU"H#X4wh='uVTO,zuY,6d]>3<Sp)bh+ZP&o:GqNr-,o7Q179/J?nrXoFS=$=#'CP?πU"G'&i1W662^X+16H#RB&+4Jbh1Y%28QDb:+lG48$oCaNWk'lzjH$6y.7b-THAKF<πU"PpV>w+fN6-q'OLV1=yx'fWa\?/A>IR.kEky>fR>sRS1fLCbh>l-;6g8Jh&-,jR(πU"3keJter]%R(n]0'NjdXL)x/RhXD\)ECdto+d^HIXyvKrnvQ4mG<CX]tcRX.6daSπU"%^wVu-hCRItIs,h?mGGq5JMJrb#QxPoV/DbtPa\H1RXfaQRK2&^CV(ulBk*P-q#πU"OWP5WTo4KvFvtUq,1,E7IvQ%WqDOtN\Pu&,tw:t#KjukpJ,C$eD)?cu*(9Ex=d;πU"AWrR/V,iQ527>cp5raCqxyA5Qr1ZJD&ML2lv>\C+DUe8J72,eVRG&-r2W,,+xq3πU"ShMG,0cx7dv0Jm-36rAnCXFTmv+bc6X6?C&,XfvZA:ChwkN[[M4P3;\\m6BD1DvπU"%u>a5w/$jd1p6I#[nkY09&-61I'r.\j,i%To>gp<P0>S[GYE=^p8u%p&'9%%9%%πU"[%-%3CM]Fx2X==I%+%%i%>%%,%%%%%%%%%&%%E%%%%%%%#%nu'%Sgfx%up&'%9%πU"9%%%%-%.0N]Ffd6O0&N-%%&]C%%%-%%%%%%%%%&%E%%%%n+%%%nu&'xSg%fxup%πU"&'9%%9%%%%-%AN\]F)R'PK.-7%%?A%%%-%%%%%%%%%&%%E%%%'g3%%.nu'w%SgfπU"x%up&'%9%9%%%%-%.hN]F*aIWf%wC%%%ts%%%,%%%%%%%%%&%E%%%%B<%%%nu&'πU"Sit%hup&%'9%9%%%%-#%TN]jF1/D%#>7%+%,m%%%-%%%%%%%%%&%E#%%%c%Z%%hπU"%mfyS%gfxu%p*+%%%%%*%%*%1[&%%L%l%%%%%πEND SUBπV2πCLOSE:IF S=69AND B&=Z&THEN?" :) Ok!"ELSE?" :( Bad!πSUB U(A$):FOR A=1TO LEN(A$):C=ASC(MID$(A$,A))-37:IF C<0THEN C=91+C*32πIF K<4THEN K=C+243ELSE?#1,CHR$(C+(K MOD 3)*86);:K=K\3:B&=B&+1πS=(S+C)AND 255:NEXT:LOCATE,1:?STRING$(B&*50\Z&,219);:END SUBπEgbert Zijlema                 REPLACES PB (LINE)INPUT        E.Zijlema@uni4nn.iaf.nl        12-19-96 (12:38)       PB                     304  9321     PBINPUT.BAS ' PBINPUT.BAS - replaces Basic's (LINE)INPUTπ' Author      : Egbert Zijlema (E.Zijlema@uni4nn.iaf.nl)π' (up)Date    : 19 December 1996π' Status      : Public Domainπ' Language    : Power Basic 3.2ππDEFINT A - Z                        ' all vars integer, unless taggedππ' ----- data for character translationπquotation:πDATA  16πDATA  65, 142πDATA  79, 153πDATA  85, 154πDATA  97, 132πDATA 101, 137πDATA 105, 139πDATA 111, 148πDATA 117, 129ππapostrofe:πDATA  12πDATA  69, 144πDATA  97, 160πDATA 101, 130πDATA 105, 161πDATA 111, 162πDATA 117, 163ππsemicolon:πDATA  4πDATA 67, 128πDATA 99, 135ππcircmflex:πDATA  10πDATA  97, 131πDATA 101, 136πDATA 105, 140πDATA 111, 147πDATA 117, 150ππbackaccnt:πDATA  10πDATA  97, 133πDATA 101, 138πDATA 105, 141πDATA 111, 149πDATA 117, 151ππmanana:πDATA   4πDATA  78, 165πDATA 110, 164π' ----- end of character dataππ%NO = 0 : %YES = NOT %NO            ' true/false Booleanπ%F10  = 68 * 256                    ' save text / see: SUB editor()π%HOME = 71 * 256 : %UP    = 72 * 256 : %PGUP = 73 * 256π%LEFT = 75 * 256 : %RIGHT = 77 * 256 : %END  = 79 * 256π%DOWN = 80 * 256 : %PGDN  = 81 * 256 : %DEL  = 83 * 256π%BACKSPACE =  8  : %ESC   = 27π%ENTER     = 13  : %CTRLY = 25ππ' equates for special characters:π%ALTA      = 30 * 256               ' Alt-a = åπ%ALTB      = 48 * 256               ' Alt-b = Åπ%ALTC      = 46 * 256               ' Alt-c = dollar ¢entπ%ALTF      = 33 * 256               ' Alt-f = Dutch ƒlorinπ%ALTL      = 38 * 256               ' pound sterlingπ%ALTP      = 25 * 256               ' Spanish pesetaπ%ALTY      = 21 * 256               ' Japanes ¥enππSUB editor (row, col, text$, length, rows, last)π  OldInsert = IsIns                                    ' save insert modusπ  InsertOn                                             ' insertπ  text$ = LTRIM$(RTRIM$(text$))π  COLOR 15, 0π  LOCATE row, col : PRINT text$π  cursor = LEN(text$) + 1ππ  DOπ    COLOR 15, 0                                        ' bold edit lineππ    ' display insert statusπ    LOCATE 25, 73π    IF IsIns THENπ      PRINT " INS ";π    ELSEπ      PRINT SPACE$(5);π    END IFππ    LOCATE row, col + cursor - 1, 1                    ' visible cursorπ    KeyIn = GetKeyπ    SELECT CASE KeyInπ      CASE %HOME: cursor = 1π      CASE %END : cursor = LEN(text$) + 1π      CASE %LEFTπ        IF cursor > 1 THEN DECR cursorπ      CASE %RIGHTπ        IF cursor < LEN(text$) + 1 THEN INCR cursorπ      CASE %DELπ        text$ = LEFT$(text$, cursor - 1) + MID$(text$, cursor + 1)π      CASE %BACKSPACEπ        IF cursor > 1 THENπ          text$ = LEFT$(text$, cursor - 2) + MID$(text$, cursor)π          DECR cursorπ        END IFπ      CASE %CTRLYπ        cursor = 1: text$ = ""                         ' erase lineπ      CASE %UPπ        IF rows > 1 THENπ          DECR rowsπ          EXIT DOπ        END IFπ      CASE %ENTERπ        INCR rowsπ        EXIT DOπ      CASE %DOWNπ        ' same as ENTER but not when in the last lineπ        IF rows < last THENπ          INCR rowsπ          EXIT DOπ        END IFπ      CASE %PGUPπ        IF rows <> 1 THENπ          rows = 1π          EXIT DOπ        END IFπ      CASE %PGDNπ        IF rows <> last THENπ          rows = lastπ          EXIT DOπ        END IFπ      CASE %F10π        ' after editing the last line, pressing ENTER will save allπ        ' however, after you made a last minute modificationπ        ' elsewhere, there is no need to re-scroll to the bottom lineπ        ' F10 saves your edited work insteadπ        rows = last + 1π        EXIT DOπ      CASE %ESCπ        text$ = ""π        rows = last + 2                                ' don 't saveπ        EXIT DOπ      CASE 32, 33, 35 TO 38, 40 TO 58, 60 TO 93, 95, 97 TO 123, 125π        IF previous THENπ          SELECT CASE previousπ            CASE 34 : RESTORE quotationπ            CASE 39 : RESTORE apostrofeπ            CASE 59 : RESTORE semicolonπ            CASE 94 : RESTORE circmflexπ            CASE 96 : RESTORE backaccntπ            CASE 126: RESTORE mananaπ          END SELECTπ          READ HowManyπ          FOR reading = 1 TO HowManyπ            READ AskiCodeπ            IF AskiCode = KeyIn THENπ              READ KeyInπ              DeadKey = %NO                ' skip dead keyπ              EXIT FORπ            ELSEπ              DeadKey = %YES               ' save dead keyπ            END IFπ          NEXTπ        END IFπ        IF DeadKey THENπ          DeadKey = %NOπ          text$ = modify(cursor, text$, previous, length)π        END IFπ        previous = 0π        text$ = modify(cursor, text$, KeyIn, length)π      CASE 34, 39, 59, 94, 96, 126                     ' dead keysπ        IF previous = KeyIn THENπ          previous = 0π          text$ = modify(cursor, text$, KeyIn, length)π        ELSEπ          previous = KeyInπ        END IFπ      CASE %ALTA, %ALTB, %ALTC, %ALTF, %ALTL, %ALTP, %ALTYπ        SELECT CASE KeyInπ         CASE %ALTA : KeyIn = 134                      ' åπ         CASE %ALTB : KeyIn = 143                      ' Åπ         CASE %ALTC : KeyIn = 155                      ' dollar centπ         CASE %ALTF : KeyIn = 159                      ' dutch florinπ         CASE %ALTL : KeyIn = 156                      ' sterlingπ         CASE %ALTP : KeyIn = 158                      ' Sp. pesetaπ         CASE %ALTY : KeyIn = 157                      ' Jap. yenπ        END SELECTπ        text$ = modify(cursor, text$, KeyIn, length)π    END SELECTπ    LOCATE row, col : PRINT SPACE$(length)             ' clear fieldπ    LOCATE row, col : PRINT text$π  LOOPππ  IF OldInsert THEN InsertOn ELSE InsertOff            ' restore insert modusπ  COLOR 7, 0π  LOCATE 25, 73 : PRINT SPACE$(5);                     ' clear INS-fieldπ  LOCATE row, col : PRINT text$                        ' unbold ready textπEND SUBππFUNCTION GetKey AS INTEGERπ  DOπ  LOOP UNTIL INSTATπ  FUNCTION = CVI(INKEY$ + CHR$(0))πEND FUNCTIONππSUB InsertOffπ  DEF SEG = 64π  POKE 23, PEEK(23) AND 127π  DEF SEGπEND SUBππSUB InsertOnπ  DEF SEG = 64π  POKE 23, PEEK(23) OR 128π  DEF SEGπEND SUBππFUNCTION IsIns AS INTEGERπ  DEF SEG = 64π  FUNCTION = (PEEK(23) AND 128) = 128π  DEF SEGπEND FUNCTIONππFUNCTION modify(cursor, text$, KeyIn, length) AS STRINGπ  txt$ = LEFT$(text$, cursor - 1) + CHR$(KeyIn) + _π         MID$(text$, cursor + IsIns + 1)π  IF LEN(txt$) > length THEN txt$ = LEFT$(txt$, length)π  IF cursor < LEN(txt$) + 1 THEN INCR cursorπ  FUNCTION = txt$πEND FUNCTIONππ'  main moduleπCLSπ  COLOR 7, 0ππ  ' The following text  only serves this demo. It may be left outππ  LOCATE 1, 2 : PRINT "PBINPUT.BAS (Author: Egbert Zijlema)"π  LOCATE 2, 2 : PRINT "===================================="π  LOCATE 4, 2 : PRINT "These line editor includes accented characters ";π                PRINT "to match the needs of"π  LOCATE 5, 2 : PRINT "our European friends. It uses ";CHR$(39);"dead";π                PRINT CHR$(39);" keys. After pressing such a key"π  LOCATE 6, 2 : PRINT "nothing happens until you press another key."π  LOCATE 8, 2 : PRINT "Dead keys are: ";π  COLOR 15    : PRINT CHR$(34, 32, 39, 32, 59, 32, 94, 32, 96, 32, 126)π  COLOR 7π  LOCATE 10, 2 : PRINT "Examples:"π  LOCATE 11, 2: PRINT "Pressing the quotation mark (";CHR$(34);π                PRINT ") followed by the character a returns: ";π                PRINT CHR$(132);"."π  LOCATE 12, 2: PRINT "Apostrophe (";CHR$(39);") followed by e = ";π                PRINT CHR$(130);", circumflex (";CHR$(94);") + o = ";π                PRINT CHR$(147);". And so forth."π  LOCATE 13, 2: PRINT "Pressing a dead key twice means the character ";π                PRINT "itself will be displayed."π  LOCATE 15, 2: PRINT "In addition, some characters can be generated by ";π                PRINT "pressing the Alt key,"π  LOCATE 16, 2: PRINT "followed by a character key (see: equates above). ";π                PRINT "Alt-f, for instance,"π  LOCATE 17, 2: PRINT "returns Dutch florin (";CHR$(159);")."π  LOCATE 25, 2: PRINT "Press any key to try it yourself";ππ  DO : LOOP UNTIL LEN(INKEY$)ππ  ' ------- end of redundant screen textππ  ' program starts here:π  CLSπ  rows = 1   ' start at first rowπ  last = 4   ' edit 4 rowsπ  LOCATE 2, 2: PRINT "First line : "π  LOCATE 3, 2: PRINT "Second line: "; second$π  LOCATE 4, 2: PRINT "Third line : "π  LOCATE 5, 2: PRINT "Fourth line: "ππ  DOπ    SELECT CASE rowsπ      CASE 1π        length = 30             ' maximum 30 charsπ        editor 2, 15, first$, length, rows, lastπ      CASE 2π        length = 30π        editor 3, 15, second$, length, rows, lastπ      CASE 3π        length = 8π        editor rows + 1, 15, third$, length, rows, lastπ      CASE 4π        length = 15π        editor rows + 1, 15, fourth$, length, rows, lastπ    END SELECTπ  LOOP UNTIL rows > lastππ  LOCATE 10, 2π  IF rows = last + 1 THEN                     ' normal exitπ    ' normally you save your work hereπ    PRINT "No, there is no 5th line; we don't compose limericks after all!"π  ELSEπ    PRINT "You pressed Esc; your work will not be saved"π  END IFπENDπEgbert Zijlema                 FILE SORT                      E.Zijlema@uni4nn.iaf.nl        12-23-96 (14:37)       PB                     142  4497     FILESORT.BAS' FILESORT.BAS - PB routine to sort files in current directoryπ'                either alphabetically or by date/time (LiFo)π' Author       : Egbert Zijlema (E.Zijlema@uni4nn.iaf.nl)π' (up)Date     : 24 December 1996π' Language     : Power Basic (3.2)π' (C) status   : Public Domainππ' ARRAY SORT is a piece of cake in Power Basic, since it's a built-inπ' routine. Why this sample code for such a simple matter?  To demonstrateπ' how to sort the contents of a directory by date/time (last in, first out).ππDEFINT A - Z                               ' all vars integer unless taggedπ%NO = 0 : %YES = NOT %NO                   ' Boolean true/falseπ%F1 = 59 * 256                             ' funkey to change dirπ%F2 = 60 * 256                             ' funkey to toggle sort methodπ%ALTX = 45 * 256                           ' exit programπ%UP = 72 * 256 : %DOWN = 80 * 256          ' scroll keysππTYPE FLAGSπ  stamp AS INTEGER                         ' sort by date/timeπ  recs AS INTEGER                          ' number of records in arrayπ  first AS INTEGER                         ' first file on screenπEND TYPEπDIM flg AS SHARED FLAGSππDIM FileName(1 : 512) AS SHARED STRING     ' array for filenamesπDIM DateTime(1 : 512) AS SHARED STRING     ' array for date/time stampsπDIM FileDir AS SHARED STRINGππflg.stamp = %YES                           ' sort by date = defaultπFileDir = CURDIR$                          ' current dir = defaultππFUNCTION GetKey AS INTEGERπ  DOπ  LOOP UNTIL INSTATπ  FUNCTION = CVI(INKEY$ + CHR$(0))πEND FUNCTIONππSUB MakeArraysπ  flg.recs = 0π  flg.first = 1π  number = FREEFILEπ  FileFound$ = DIR$(FileDir + "\*.*")π  DO WHILE LEN(FileFound$)π    OPEN FileDir + "\" + FileFound$ FOR BINARY AS #numberπ    dos = FILEATTR(number, 2)                ' DOS-handleπ    REG 1, &H5700                            ' load function &H5700 in AXπ    REG 2, dos                               ' load DOS-handle in BXπ    CALL INTERRUPT &H21                      ' interrupt callπ    carry = REG (0) AND 1                    ' carry flagπ    CLOSE #numberπ    INCR flg.recsπ    FileName(flg.recs) = LEFT$(FileFound$ + SPACE$(12), 12)π    IF carry THEN                            ' errorπ      DateTime(flg.recs) = "33"              ' 1 January 1980π    ELSEπ      DateTime(flg.recs) = LTRIM$(RTRIM$(STR$(REG(4)))) + _    ' date stampπ                           LTRIM$(RTRIM$(STR$(REG(3))))        ' time stampπ    END IFπ    IF flg.recs = UBOUND(FileName) THEN EXIT DO                ' full arrayπ    FileFound$ = DIR$π  LOOPπ  SortArraysπEND SUBππSUB SortArraysπ  IF flg.stamp THENπ    ARRAY SORT DateTime() FOR flg.recs, TAGARRAY FileName(), DESCENDπ  ELSEπ    ARRAY SORT FileName() FOR flg.recs, TAGARRAY DateTime(), ASCENDπ  END IFπEND SUBππSUB DisplayArrayπ  row = 1π  FOR count = flg.first TO flg.first + 19     ' display 20 filesπ    LOCATE row, 2π    IF count > flg.recs THEN                  ' no more filesπ      PRINT SPACE$(12)                        ' clear unused rowsπ    ELSEπ      PRINT FileName(count)π    END IFπ    INCR rowπ  NEXTπEND SUBππSUB Menuπ  DOπ    KeyIn = GetKeyπ    SELECT CASE KeyInπ      CASE %F1π        DOπ          LOCATE 23, 13 : PRINT SPACE$(66);π          LOCATE 23, 13π          LINE INPUT ""; text$π        LOOP UNTIL LEN(DIR$(text$, 16))   ' until valid dir nameπ        LOCATE 23, 13 : PRINT UCASE$(text$)π        FileDir = text$π        MakeArraysπ        DisplayArrayπ      CASE %F2π        LOCATE 24, 9π        IF flg.stamp THENπ          flg.stamp = %NOπ          PRINT "alphabetically";π        ELSEπ          flg.stamp = %YESπ          PRINT "by date (LiFo)" ;π        END IFπ        SortArraysπ        DisplayArrayπ      CASE %DOWNπ        IF flg.recs < 21 OR flg.first + 19 = flg.recs THEN EXIT SELECTπ        INCR flg.firstπ        DisplayArrayπ      CASE %UPπ        IF flg.first > 1 THENπ          DECR flg.firstπ          DisplayArrayπ        END IFπ      CASE %ALTXπ        CLSπ        SYSTEMπ    END SELECTπ  LOOPπEND SUBππ' mainπCLSπ  LOCATE 23, 2 : PRINT "Directory: "; UCASE$(FileDir)π  LOCATE 24, 2 : PRINT "Sorted ";π  IF flg.stamp THENπ    PRINT "by date (LiFo)"π  ELSEπ    PRINT "alphabetically"π  END IFπ  LOCATE 25, 2 : PRINT "F1 = directory; F2 = sort order; Alt-x = quit; ";π                 PRINT "Arrow Up/Down = scroll";π  MakeArraysπ  DisplayArrayπ  MenuπENDπMattias Andersson              FABTRACKER (MUSIC COMPOSER)    phobia2@hotmail.com            11-05-96 (15:55)       QB, QBasic, PDS        130  4062     TRACKER.BAS ' Hehe... Phobia is back!π' This time with a little tracker...π' Ummm... don't take this one to serious... made it just for fun!π' (at school actually :-)π' Enter whatever note you want with the same letter...π' 1-6 works as octave... press 't' to change the tempo...π' If you change the tempo it will stay that way until youπ' change it on a later track...π' Press enter to play the tune ... space to stop...π' Feel free to email me: phobia2@hotmail.comπ' (phobia was already taken... so I'm using phobia2 :-( )π' Don't laugh... but it's possible that I'll add digital samplesπ' and more than one channel and pattern...π' Could be cool with a working tracker made in QB!! hehe...π' If you have any source on how to use SB16 with more than oneπ' channel... I know how to program 8-bit mono sound... but not moreπ' than that... well... see ya! (as always)πDIM track$(64)πDIM tempo$(64)πDIM oktav$(64)ππFOR a = 1 TO 64π   track$(a) = "-"π   tempo$(a) = "---"π   oktav$(a) = "4"πNEXTππnewdo = 2πcurr = 1πSCREEN 0πWIDTH 80, 50πCOLOR 14, 0: CLSπLOCATE 1, 40: PRINT "FåbTrecker 0.01b"πFOR a = 1 TO 32π   LOCATE a, 1: PRINT aπ   LOCATE a, 12: PRINT "|"π   LOCATE a, 13: PRINT a + 32πNEXTππredo:πDO '--------------------------------------ππIF newdo = 2 THENπ   COLOR 14, 0π   FOR a = 1 TO 32π      LOCATE a, 5: PRINT track$(a)π      LOCATE a, 17: PRINT track$(a + 32)π      LOCATE a, 6: PRINT oktav$(a)π      LOCATE a, 18: PRINT oktav$(a + 32)π      LOCATE a, 8: PRINT tempo$(a) + SPACE$(3 - LEN(tempo$(a)))π      LOCATE a, 20: PRINT tempo$(a + 32) + SPACE$(3 - LEN(tempo$(a + 32)))π   NEXTπ   COLOR 14, 4π   IF curr < 33 THENπ      LOCATE curr, 5: PRINT track$(curr)π      LOCATE curr, 6: PRINT oktav$(curr)π      LOCATE curr, 8: PRINT tempo$(curr)π   END IFπ   IF curr > 32 THENπ      LOCATE curr - 32, 17: PRINT track$(curr)π      LOCATE curr - 32, 18: PRINT oktav$(curr)π      LOCATE curr - 32, 20: PRINT tempo$(curr)π   END IFπ   newdo = 1πEND IFπππke$ = INKEY$πIF NOT ke$ = "" THEN newdo = 2πIF ke$ = CHR$(13) THEN GOTO spelaπIF ke$ = CHR$(0) + "P" THEN curr = curr + 1: newdo = 2πIF ke$ = CHR$(0) + "H" THEN curr = curr - 1: newdo = 2πIF ke$ = CHR$(0) + "M" THEN curr = curr + 32: newdo = 2πIF ke$ = CHR$(0) + "K" THEN curr = curr - 32: newdo = 2πIF ke$ = "1" THEN oktav$(curr) = "1": curr = curr + 1πIF ke$ = "2" THEN oktav$(curr) = "2": curr = curr + 1πIF ke$ = "3" THEN oktav$(curr) = "3": curr = curr + 1πIF ke$ = "4" THEN oktav$(curr) = "4": curr = curr + 1πIF ke$ = "5" THEN oktav$(curr) = "5": curr = curr + 1πIF ke$ = "6" THEN oktav$(curr) = "6": curr = curr + 1πIF UCASE$(ke$) = "A" THEN track$(curr) = "A": curr = curr + 1πIF UCASE$(ke$) = "B" THEN track$(curr) = "B": curr = curr + 1πIF UCASE$(ke$) = "C" THEN track$(curr) = "C": curr = curr + 1πIF UCASE$(ke$) = "D" THEN track$(curr) = "D": curr = curr + 1πIF UCASE$(ke$) = "E" THEN track$(curr) = "E": curr = curr + 1πIF UCASE$(ke$) = "F" THEN track$(curr) = "F": curr = curr + 1πIF UCASE$(ke$) = "G" THEN track$(curr) = "G": curr = curr + 1πIF UCASE$(ke$) = CHR$(0) + CHR$(83) THEN track$(curr) = "-": curr = curr + 1ππIF UCASE$(ke$) = "T" THENπ   LOCATE 10, 50π   COLOR 14, 0π   INPUT "Enter new speed: [32-255]", tempo$(curr)π   LOCATE 10, 50: PRINT SPACE$(20)πEND IFππIF curr < 1 THEN curr = 1πIF curr > 64 THEN curr = 64ππLOOP '------------------------------------πππspela:πplay$ = ""πFOR a = 1 TO 64π   IF NOT tempo$(a) = "---" THEN PLAY "T" + tempo$(a)π   PLAY "O" + oktav$(a)π   IF NOT track$(a) = "-" THENπ      PLAY track$(a)π   ELSEπ      PLAY "P4"π   END IFπ   COLOR 14, 0π   IF a < 33 THENπ      IF a > 1 THEN LOCATE a - 1, 4: PRINT " "π      LOCATE a, 4: PRINT ">"π   END IFπ   IF a > 32 THENπ      IF a = 33 THEN LOCATE a - 1, 4: PRINT " "π      IF a > 33 THEN LOCATE a - 33, 16: PRINT " "π      LOCATE a - 32, 16: PRINT ">"π   END IFπIF INKEY$ = " " THEN EXIT FORπNEXTπFOR a = 1 TO 32π   LOCATE a, 4: PRINT " "π   LOCATE a, 16: PRINT " "πNEXTπGOTO redoππToshihiro Horie                SOUND BLASTER MIC OSCILLOSCOPE www.ocf.berkeley.edu/~horie/   11-13-95 (00:00)       QB, QBasic, PDS        199  5719     SBREAL.BAS  DEFINT A-ZπDECLARE FUNCTION DetectSB16Addr% ()πDECLARE SUB GetDSPVersion ()πDECLARE FUNCTION SB16RESET ()πDECLARE FUNCTION SB16DSPREAD% ()πDECLARE SUB SB16DSPWRITE (V%)πDECLARE SUB SBSCOPE ()πDECLARE SUB SBPLAY ()π'============================================================π'REAL SOUND BLASTER PROGRAMMING IN QBASIC v1.0π'Routines humbly converted from pascal by TOSHIHIRO HORIEπ'Motto: Taking Basic to the MAX!π'ORIGINAL DSP ROUTINES (C)1995 ABACUS _PC_Underground_π'============================================================ππDIM SHARED DSPADDRπDSPADDR = &H220 'can be anywhere from 210h to 280hπtitle$ = "TOSHI'S REAL QBASIC SOUND BLASTER PROGRAM v1.0"πCONST false = 0, TRUE = NOT falseπCONST ready = &HAAπCONST SpeakerOn = &HD1πCONST SpeakerOff = &HD3πCONST record8bit = &H20 'directπCONST output8bit = &H10 'directπCONST VersionQuery = &HE1π'---------BEGIN MAIN PROGRAM--------------------------------πCLSπCOLOR 15, 1πPRINT title$πPRINTπ'...................NOTE............................π'This program worked on my SBPRO compatible, but isπ'NOT guaranteed to work on all SB's and clones.π'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~πOK = DetectSB16AddrπIF OK THENπ        PRINT "Soundblaster detected at " + HEX$(DSPADDR) + "H"π        PRINT "Connect microphone for cool oscilloscope."π        PRINT : COLOR 14, 3:π        PRINT "Press any key to when ready..."πELSEπ        PRINT "Too bad. SoundBlaster not found.": ENDπEND IFπDO: LOOP UNTIL INKEY$ > ""πSBSCOPEπSBPLAYπ'If I have time, I may add a DMA output procedure thatπ'gives you real sound-effects, like music, or voices.πCLSπPRINT "End of Real SoundBlaster Demonstration."πENDππ'--------------------------------------------------------------------π'P.S. To the hundreds of QBASIC programmers who look at this code:π'One of the purposes of the internet is to share information.  Beπ'generous with your source code. For "No man is an island."   TH 96π'--------------------------------------------------------------------ππFUNCTION DetectSB16Addrπ'function returns TRUE if a sounblaster was initializedπ'otherwise FALSE  The DSPADDR variable is set to theπ'base address of the SB.ππPORT = &H210πA = 0ππDetectSB16Addr = falseπFOR PORT = &H210 TO &H280 STEP &H10π        DSPADDR = PORTπ        A = SB16RESETπ        IF A = TRUE THENπ                DetectSB16Addr = TRUEπ                EXIT FUNCTIONπ        END IFπNEXT PORTπEND FUNCTIONππSUB GetDSPVersionπI = 0: 'WORD = 2 BYTES = INTEGERπT = 0: 'WORDπS$ = "": 'STRINGπ      ππ        aa = SB16RESETπ        SB16DSPWRITE (VersionQuery)π        SBVERSMAJ = SB16DSPREADπ        SBVERSMIN = SB16DSPREADπ        S$ = STR$(SBVERSMAJ)π        IF SBVERSMIN > 9 THENπ                SBVERSTR$ = S$ + "." + LTRIM$(STR$(SBVERSMIN))π        ELSEπ                SBVERSTR$ = S$ + ".0" + LTRIM$(STR$(SBVERSMIN))π        END IFπ        PRINT "SoundBlaster DSP VERSION :"; SBVERSTR$;πEND SUBππFUNCTION SB16DSPREADπ'function waits until the DSP can be readπ'and returns the read valueππOffsetA = DSPADDR + &HAππ'--- You should wait until DSP is ready------------------------πt1# = TIMERπ'DOπ'        D = INP(OffsetA)π         t2# = TIMERπ'        IF t2# - t1# > .5 THEN PRINT "SBRead Locked up": EXIT DOπ'LOOP WHILE D = &HAAπ'----------------------------------------------------------------πSB16DSPREAD = INP(OffsetA)ππEND FUNCTIONππSUB SB16DSPWRITE (V)π'waits until the DSP is ready to write and then writes the byteπ'passed in "v" to the DSP.ππc = DSPADDR + &HCπ'I think the Do..Loop can be replacedπ'with a WAIT C,128, but not sure.πDO: CREG = INP(c)πLOOP WHILE CREG >= 128πOUT c, VπEND SUBππFUNCTION SB16RESETπ'This function resets the Soundblaster DSP (Digital Signal Processor)π'if function is successful TRUE is returned, otherwise FALSE.ππct = 0: stat = 0: 'byteπππOUT DSPADDR + &H6, 1πDOπ        OUT DSPADDR + &H6, 0π        stat = INP(DSPADDR + &HE)π        stat = INP(DSPADDR + &HA)π        IF stat = ready THEN EXIT DOπ        ct = ct + 1πLOOP WHILE ct < 100 'wait about 100 msπIF stat = ready THEN SB16RESET = TRUE ELSE SB16RESET = falseπEND FUNCTIONππSUB SBPLAYπaa = SB16RESETπSB16DSPWRITE (SpeakerOn)πCLSπPRINT "----------------------------------------------------"πPRINT "    Outputting 8 bit tone on directly to SB"πPRINT "    pitch depends on computer speed"πPRINT "    You should hear some clicking noise."πPRINT "----------------------------------------------------"πLOCATE 25, 20: PRINT "==== Press any key to exit. =====";ππrate = 24πDOπ        CCC = CCC + 1π        aa = SB16RESETπ        SB16DSPWRITE (output8bit)π        aa = SB16RESETπ        DDD = INT((SIN(CCC / rate) * 128) + 128)π        SB16DSPWRITE (DDD)π        IF CCC > 32000 THEN CCC = 0πLOOP UNTIL INKEY$ > ""πaa = SB16RESETπSB16DSPWRITE (SpeakerOff)πEND SUBππSUB SBSCOPEπSCREEN 9: CLSπLOCATE 2, 50: PRINT "SB MIC OSCILLOSCOPE"πLOCATE 3, 50: PRINT "in QBASIC!! :) "πLOCATE 4, 50: PRINT "by Toshihiro Horie"πLOCATE 23, 1: PRINT "Sound Blaster settings: "; ENVIRON$("BLASTER")πGetDSPVersionπLINE (0, 0)-(321, 257), 2, BπLINE (321, 128)-(323, 128), 15ππ'real-time 8-bit sampling from microphoneπ'I DON'T KNOW HOW TO GET RID OF THE ANNOYING SOUND FROM THEπ'OUPUT JACK WHILE SAMPLING.ππaa = SB16RESETπSB16DSPWRITE (SpeakerOff)πDOπ        aa = SB16RESETπ        SB16DSPWRITE (record8bit)π        bb = SB16DSPREADπ        'PRINT bb - 128π        PSET (xx, 256 - bb)π        xx = xx + 1π        IF xx MOD 320 = 0 THENπ                LINE (0, 0)-(320, 256), 0, BFπ                xx = 0π        END IFπLOOP UNTIL INKEY$ > ""ππEND SUBπThe ABC Programmer             SB VOC/FM/MASTER VOLUME CONTROLConverted from Pascal Code     12-07-96 (13:50)       QB, QBasic, PDS        22   929      MAXVOL.BAS  ' > HOW CAN I CHANGE THE OVERALL VOLUME OF SOUND BLASTER ? It must be aπ' > single OUT , or something . . .ππ'Actually I did a small program yesterday that maximizes the master, VOC and FMπ'volumes... Here it is:ππ    OUT &H224, 4         ' Register 04h - VOC volumeπ    OUT &H225, &HFFπ    OUT &H224, &H22      ' Register 22h - *** Master volume ***π    OUT &H225, &HFFπ    OUT &H224, &H26      ' Register 26h - FM volumeπ    OUT &H225, &HFFππ'This works fine on the SB16 I'm using, and it should work as well with all theπ'other SB models.π'The left volume is in one of the nibbles, and the right in the other (I can'tπ'remember which one is in which nibble though...;).π'The max volume for L/R is 15/15, and since 15 shl 4 or 15 = 255 (0FFh) that'sπ'the value I use. I haven't tried but I guess that you can use the 225h port toπ'read the register contents as well as write it.ππ' // Christian KullanderπBeau Schwabe                   SB INPUT L/R MASTER VOLUME     comp.lang.basic.misc           09-07-96 (19:51)       QB, QBasic, PDS        28   833      SBVOL.BAS   '>Has anybody knows how to read or rather calculate the volume from the π'>input-port in the SB ? I've been trying to figure it out for some timeπ'>now but have sofar been unsuccesful.ππDECLARE SUB MasterVolume (Right%, Left%, Getvol%)πCLSπBasePort% = &H220 'You might have to change thisππ'this puts the mixer volumes in Right% and Left%πMasterVolume Right%, Left%, -1 ππPRINT "Master volume is set at: Right-"; Right%; " Left-"; Left%ππ'this cranks the master volume all the way up.πMasterVolume 15, 15, 0 πππSUB MasterVolume (Right%, Left%, Getvol%)π    SHARED BasePort%π    OUT BasePort% + 4, &H22π    IF Getvol% THENπ       Left% = INP(BasePort% + 5) \ 16π       Right% = INP(BasePort% + 5) AND &HFπ       EXIT SUBπ    ELSEπ       OUT BasePort% + 5, (Right% + Left% * 16) AND &HFFπ    END IFπEND SUBπThe ABC Programmer             ADLIB/SB MUSICAL NOTES         Convert from Pascal code       12-22-96 (12:56)       QB, QBasic, PDS        271  7963     SBMUSIC.BAS '===========================================================================π' ADLIB/SB Music Pascal code converted to BASIC by William Yu (12-07-96)π'π' Origin, and original author:π'===========================================================================π' BBS: Canada Remote Systemsπ'Date: 09-02-93 (00:16)             Number: 36877π'From: CATHY NICOLOFF               Refer#: NONEπ'  To: ALL                           Recvd: NOπ'Subj: Musical Notes!!!      1/2      Conf: (1221) F-PASCALπ'---------------------------------------------------------------------------π'Here's some help for all you programmers out there! It's straight fromπ'my personal programming library!ππ'Explanation : This is used to emulate single note music (IE-ANSI music).ππ'The array NOTES is the frequencies used to do a SOUND/NOSOUND on the PCπ'speaker.ππ'The SBNOTES and SBOCTAVES arrays are the hex values of the notes, andπ'their octaves for any ADLIB compatible card.ππ'Just take which note you want, and input the note AND the octaveπ'into the Adlib port. Here's some sample code to show you how :ππDEFINT A-ZπDECLARE SUB InitSB ()πDECLARE SUB ResetSB ()πDECLARE FUNCTION DetectSB% ()πDECLARE SUB PlaySB (N%, M%)πDECLARE SUB Delay (Sec!)πDECLARE SUB ConvertNote (Note$, PlayNote%)πDECLARE SUB PlaySong (NumNotes%, MusicNote() AS STRING, MusicDelay() AS INTEGER)ππCONST False = 0πCONST True = NOT FalseππDIM SHARED SBNotes(1 TO 12) AS INTEGERπDIM SHARED SBOctaves(1 TO 84) AS INTEGERπDIM SHARED Notes(1 TO 84) AS INTEGERππFOR N = 1 TO 12π  READ SBNotes(N)πNEXT NπFOR N = 1 TO 84π  READ SBOctaves(N)πNEXT NπFOR N = 1 TO 84π  READ Notes(N)πNEXT NππREAD JingleNotesπDIM JingleNote(1 TO JingleNotes) AS STRINGπDIM JingleDelay(1 TO JingleNotes) AS INTEGERπFOR N = 1 TO JingleNotesπ  READ JingleNote(N)π  READ JingleDelay(N)πNEXT NππREAD WeWishNotesπDIM WeWishNote(1 TO WeWishNotes) AS STRINGπDIM WeWishDelay(1 TO WeWishNotes) AS INTEGERπFOR N = 1 TO WeWishNotesπ  READ WeWishNote(N)π  READ WeWishDelay(N)πNEXT NππREAD ItCameUponNotesπDIM ItCameUponNote(1 TO ItCameUponNotes) AS STRINGπDIM ItCameUponDelay(1 TO ItCameUponNotes) AS INTEGERπFOR N = 1 TO ItCameUponNotesπ  READ ItCameUponNote(N)π  READ ItCameUponDelay(N)πNEXT Nπππ'SBNotesπDATA &HAE, &H6B, &H81, &H98, &HB0, &HCA, &HE5, &H02, &H20, &H41, &H63, &H87ππ'SBOctavesπDATA &H22, &H25, &H25, &H25, &H25, &H25, &H25, &H26, &H26, &H26, &H26, &H26πDATA &H26, &H29, &H29, &H29, &H29, &H29, &H29, &H2A, &H2A, &H2A, &H2A, &H2AπDATA &H2A, &H2D, &H2D, &H2D, &H2D, &H2D, &H2D, &H2E, &H2E, &H2E, &H2E, &H2EπDATA &H2E, &H31, &H31, &H31, &H31, &H31, &H31, &H32, &H32, &H32, &H32, &H32πDATA &H32, &H35, &H35, &H35, &H35, &H35, &H35, &H36, &H36, &H36, &H36, &H36πDATA &H36, &H39, &H39, &H39, &H39, &H39, &H39, &H3A, &H3A, &H3A, &H3A, &H3AπDATA &H3A, &H3D, &H3D, &H3D, &H3D, &H3D, &H3D, &H3E, &H3E, &H3E, &H3E, &H3Eππ'     C    C#,D-  D    D#,E-  E     F    F#,G-  G    G#,A-  A    A#,B-  BπDATA 0065, 0070, 0073, 0078, 0082, 0087, 0093, 0098, 0104, 0110, 0117, 0123πDATA 0131, 0139, 0147, 0156, 0165, 0175, 0185, 0196, 0208, 0220, 0233, 0247πDATA 0262, 0277, 0294, 0311, 0330, 0349, 0370, 0392, 0415, 0440, 0466, 0494πDATA 0523, 0554, 0587, 0622, 0659, 0698, 0740, 0784, 0831, 0880, 0932, 0987πDATA 1047, 1109, 1175, 1245, 1329, 1397, 1480, 1568, 1661, 1760, 1865, 1976πDATA 2093, 2217, 2349, 2489, 2637, 2794, 2960, 3136, 3322, 3520, 3729, 3951πDATA 4186, 4435, 4699, 4978, 5274, 5588, 5920, 6272, 6645, 7040, 7459, 7902ππ'Jingle Bellsπ'First entry is the number of notes in the song.πDATA 56πDATA E3,8,E3,8,E3,8,P,2,E3,8,E3,8,E3,8,P,2,E3,8,G3,8,C3,8,D3,8πDATA E3,14,F3,8,F3,8,F3,8,F3,8,F3,8,E3,8,E3,8,E3,8,E3,8πDATA E3,8,D3,8,D3,8,E3,8,D3,14,G3,10,P,1πDATA E3,8,E3,8,E3,8,P,2,E3,8,E3,8,E3,8,P,2,E3,8,G3,8,C3,8,D3,8πDATA E3,14,F3,8,F3,8,F3,8,F3,8,F3,8,E3,8,E3,8,E3,8,E3,8πDATA G3,8,G3,8,F3,8,D3,8,C3,10ππ'We wish you a merry christmasπDATA 82πDATA C3,12,F3,12,F3,8,G3,8,F3,8,E3,8,D3,12,D3,12,D3,12,G3,12,G3,8,A3,8,G3,8,F3,8πDATA E3,12,C3,12,C3,12,A3,12,A3,8,B-3,8,A3,8,G3,8,F3,12,D3,12,C3,8,C3,8,D3,12,G3,12πDATA E3,12,F3,16,C3,12,F3,12,F3,12,F3,12,E3,16,E3,12,F3,12,E3,12,D3,12,C3,16,C3,12,A3,12πDATA G3,12,F3,12,C4,12,C3,12,C3,8,C3,8,D3,12,G3,12,E3,12,F3,14,C3,12,F3,12,F3,8,G3,8πDATA F3,8,E3,8,D3,12,D3,12,D3,12,G3,12,G3,8,A3,8,G3,8,F3,8,E3,12,C3,12,C3,12,A3,12πDATA A3,8,B-3,8,A3,8,G3,8,F3,12,D3,12,C3,8,C3,8,D3,12,G3,12,E3,12,F3,16ππ' "It came upon a midnight clear", Composed by Thomas Allyπ' Note/Octave, Delayπ' Full delay (1 second) = 32πDATA 70πDATA g4, 8, e5, 16, b4, 8, d5, 8, c5, 8, a4, 8, g4, 16, a4, 8, g4, 16,g4,8πDATA a4,8,b4,8,c5,8,c5,8,d5,8,e5,8,d5,24,d5,16,g4,8,e5,16,b4,8πDATA d5,8,c5,8,a4,8,g4,16,a4,8,g4,16,g4,8,a4,16,a4,8,b4,8,a4,8,g4,8πDATA c5,24,c5,16,e5,8,e5,16,e4,8,e4,8,f#4,8,g#4,8,a4,16,b4,8,c5,16,e5,8πDATA d5,8,c5,8,b4,8,a4,8,b4,8,a4,8,g4,24,g4,16,g4,8,e5,16,b4,8,d5,8,c5,8,a4,8πDATA g4,16,a4,8,g4,16,g4,8,a4,16,a4,8,b4,8,a4,8,g4,8,c5,24,c5,16ππ'To play note 'C' at octave 3, do the following :ππ'PlaySB &HA0, SBNotes(1)π'PlaySB &HB0, SBOctaves(1 + 3 * 12)ππ'To shut off Adlib output, do this :ππ'PlaySB &H83, &HFFπ'PlaySB &HB0, &H11ππIF DetectSB = False THEN PRINT "No soundcard detected.": ENDππInitSBπResetSBππCLSπPRINT "We wish you a Merry Christmas"πPlaySong WeWishNotes, WeWishNote(), WeWishDelay()πCLSπPRINT "Jingle Bells"πPlaySong JingleNotes, JingleNote(), JingleDelay()πCLSπPRINT "It came upon a midnight clear."πPlaySong ItCameUponNotes, ItCameUponNote(), ItCameUponDelay()πππ' Turn off soundππPlaySB &H83, &HFFπPlaySB &HB0, &H11ππENDππSUB ConvertNote (Note$, PlayNote)ππ' Purpose: Convert string note into recognizable computer note.π' Returns PlayNote.ππ  SELECT CASE Note$π    CASE "C"π      PlayNote = 1π    CASE "C#", "D-"π      PlayNote = 2π    CASE "D"π      PlayNote = 3π    CASE "D#", "E-"π      PlayNote = 4π    CASE "E"π      PlayNote = 5π    CASE "F"π      PlayNote = 6π    CASE "F#", "G-"π      PlayNote = 7π    CASE "G"π      PlayNote = 8π    CASE "G#", "A-"π      PlayNote = 9π    CASE "A"π      PlayNote = 10π    CASE "A#", "B-"π      PlayNote = 11π    CASE "B"π      PlayNote = 12π  END SELECTππEND SUBππSUB Delay (Sec!)π  T! = TIMERπ  DOπ  LOOP UNTIL ABS(TIMER - T!) > Sec!πEND SUBππFUNCTION DetectSBπ   PlaySB &H4, &H60π   PlaySB &H4, &H80π   Dummy1 = INP(&H388)π   PlaySB &H2, &HFFπ   PlaySB &H4, &H21π   'Delay (8)π   Dummy2 = INP(&H388)π   PlaySB &H4, &H60π   PlaySB &H4, &H80π   IF ((Dummy1 AND &HE0) = 0) AND ((Dummy2 AND &HE0) = &HC0) THENπ      DetectSB = Trueπ   ELSEπ      DetectSB = Falseπ   END IFπEND FUNCTIONππSUB InitSBπ   FOR A = 1 TO 244π      PlaySB A, 0π   NEXT Aπ   PlaySB &H1, 32π   PlaySB &HB0, &H11π   PlaySB &H4, &H60π   PlaySB &H4, &H80πEND SUBππSUB PlaySB (N, M)π  OUT &H388, Nπ  FOR A = 1 TO 6π     Temp = INP(&H388)π  NEXT Aπ  OUT &H389, Mπ  FOR A = 1 TO 35π     Temp = INP(&H388)π  NEXT AπEND SUBππSUB PlaySong (NumNotes, MusicNote() AS STRING, MusicDelay() AS INTEGER)ππFOR I = 1 TO NumNotesπ  IF INKEY$ = CHR$(27) THEN EXIT SUBπ  LOCATE 2: PRINT CHR$(14);π  IF LEN(MusicNote(I)) = 3 THEN GetNote = 2 ELSE GetNote = 1π  Note$ = UCASE$(LEFT$(MusicNote(I), GetNote))π  Oct = VAL(RIGHT$(MusicNote(I), 1))π  ConvertNote Note$, PlayNoteπ  PlaySB &H83, &HFFπ  PlaySB &HB0, &H11π  IF Note$ <> "P" THENπ    PlaySB &HA0, SBNotes(PlayNote)π    PlaySB &HB0, SBOctaves(PlayNote + Oct * 12)π    Delay MusicDelay(I) / 32  ' How long do you wish to hear each note played?π  ELSEπ    Delay MusicDelay(I) / 32  ' How long do you wish to hear each note played?π  END IFπNEXT IππEND SUBππSUB ResetSBπ   PlaySB &H20, &H41π   PlaySB &H40, &H10π   PlaySB &H60, &HF0π   PlaySB &H80, &H77π   PlaySB &H23, &H41π   PlaySB &H43, &H0π   PlaySB &H63, &HF0π   PlaySB &H83, &H77π   PlaySB &HBD, &H10πEND SUBπAlexander Podkolzin            PB TEXT MODE SCREEN SAVER      APP@nw.sbank.e-burg.su         11-05-96 (11:12)       PB                     169  4027     TXTSAVER.BAS'-------------------------------------------------------------------------π'π' Simple text mode screen saver (PowerBasic 3.2).π' Author - Alexander Podkolzin <APP@nw.sbank.e-burg.su>π' Public domain.π' Test it before using!π'π'-------------------------------------------------------------------------π' Not PowerBasic users! Exclude subs SaveScreen and RestoreScreen...π'-------------------------------------------------------------------------π'π  DEFINT a-zπ'ππ  ScreenSaverππ'π  SUB ScreenSaverπ'π'   It works fine on my 100DX4 ...π'π     %MaxStars = 50               ' Number of "stars" on the screenπ     DIM Star(2000)               ' Array of "stars"π'π     SaveScreen w$,1,1,80,25,0π'π     CLS                          ' Initial settings...π     RANDOMIZE TIMERπ'π     FOR i=1 TO %MaxStarsπ        Star(INT(RND*1999)+1) = 1π     NEXTπ'π     s$=CHR$(250)π     FOR k=1 TO 2000π        IF Star(k)<>0 THENπ           GOSUB CalcYXπ           GOSUB ShowStarπ        END IFπ     NEXTπ'π     DO                           ' Main loopπ        s$=INKEY$π        IF s$<>"" THEN EXIT LOOPπ'π        k = INT(RND*1999)+1π'π        IF Star(k)=1 THENπ           s$=CHR$(250)π        ELSEIF Star(k)=2 THENπ           s$=CHR$(249)π        ELSEIF Star(k)=3 THENπ           s$=CHR$(7)π        ELSEIF Star(k)>4 THENπ           s$=" "π        END IFπ'π        IF k<2001 THENπ           IF Star(k)<>0 THENπ              GOSUB CalcYXπ              GOSUB ShowStarπ              INCR Star(k)π              IF Star(k)>4 THENπ                 GOSUB KillStarπ                 n=0π                 FOR i=1 TO 2000π                    IF Star(i)<>0 THEN INCR nπ                 NEXTπ                 d = %MaxStars - nπ                 IF d>0 THENπ                    FOR i=1 TO dπ                       GOSUB AddStarπ                    NEXTπ                 END IFπ              END IFπ           END IFπ        END IFπ        COLOR 8,0π        LOCATE 1,72               ' Printing time at upper right cornerπ        PRINT TIME$;              ' of the screen.π     LOOPπ'π     RestoreScreen w$,1,1π'π     EXIT SUBπ'ππCalcYX:π     y = k \ 80 +1π     x = (k MOD 80)+1π     RETURNπ'ππKillStar:π     Star(k)=0π     LOCATE y,xπ     PRINT " ";π     RETURNπ'π'ππShowStar:π     LOCATE y,xπ     c = INT(RND*15)+1            ' Random color (1 - 15)π     COLOR c,0π     PRINT s$;π     RETURNπ'π'ππAddStar:π     DOπ        k = INT(RND*2000)+1π        IF k<2001 AND Star(k)=0 THENπ           Star(k)=1π           EXIT LOOPπ        END IFπ     LOOPπ     RETURNπ'π  END SUBπ'π'-------------------------------------------------------------------------π  SUB SaveScreen(w$,xb%,yb%,xe%,ye%,sh%) PUBLICπ     DIM temp AS BYTE PTRπ     DIM WinPtr AS BYTE PTRπ     DIM TextPtr AS BYTE PTRπ     lx% = (xe% - xb% + 1) * 2π     ly% = ye% - yb% + 1π     IF sh% THENπ        INCR lx%,2π        INCR ly%π     END IFπ     l$ = RIGHT$(" " + STR$(lx%), 3 )π     w$ = l$ + SPACE$( lx% * ly% )π     WinPtr = PBVSCRNBUFF + (yb%-1)*160 + (xb%-1)*2π     TextPtr = STRPTR32(w$) + 3π     FOR i%=1 TO ly%π        temp = WinPtrπ        FOR k%=1 TO lx%π           @TextPtr = @tempπ           INCR TextPtrπ           INCR tempπ        NEXTπ        INCR WinPtr,160π     NEXTπ  END SUBπ'-------------------------------------------------------------------------π  SUB RestoreScreen(w$,xb%,yb%) PUBLICπ     DIM temp AS BYTE PTRπ     DIM WinPtr AS BYTE PTRπ     DIM TextPtr AS BYTE PTRπ     l$ = LEFT$(w$,3)π     w$ = LTRIM$(w$,l$)π     lx% = VAL(l$)π     ly% = LEN(w$) \ lx%π     TextPtr = STRPTR32(w$)π     WinPtr = PBVSCRNBUFF + (yb%-1)*160 + (xb%-1)*2π     FOR i%=1 TO ly%π        temp = WinPtrπ        FOR k%=1 TO lx%π           @temp = @TextPtrπ           INCR TextPtrπ           INCR tempπ        NEXTπ        INCR WinPtr,160π     NEXTπ  END SUBπ'-------------------------------------------------------------------------πDaniel Garlans                 TEXT 2 SELF EXTRACTING .BAS    thegarlans@geocities.com       11-08-96 (15:35)       QB, QBasic, PDS        105  3694     TXT2BAS.BAS 'TxtoBas 1.2π'Changes: neater and more commented :)π'Takes a text file and creates a "self extracting" .BAS file that createsπ'the origional text like it was.π'This program was tested with WORMHOLE.BAS by..err..someone, and was inspiredπ'by complaints that line-lengths were a problem for most browsersπ'---ConstantsπCONST maxwid = 70 '70 character maximum length in output fileπ'---CodeπPRINT "TxtoBas 1.2 by Daniel Garlans" 'headerπINPUT "File to convert:", a$πIF a$ = "" THEN ENDπinputted$ = a$πINPUT "File to write to:", out$πIF out$ = "" THEN ENDπOPEN a$ FOR INPUT AS #1πPRINT "File exists." 'if we're here, the file opened :)πPRINT "Starting...";πv$ = ENVIRON$("TEMP") 'get tempfile directoryπIF LEN(v$) = 0 THEN v$ = "c:" 'if there's no "TEMP" set, make the temp dir=c:πtfile$ = v$ + "\@t2btemp.034" 'one temp fileπtfile2$ = v$ + "\@t2btemp.043" 'two temp filesπOPEN tfile$ FOR OUTPUT AS #2 'temp file: First stepπtot = 0 'line count...πDO WHILE NOT EOF(1) 'keep it comin'πLINE INPUT #1, a$ 'get a lineπfin$ = "" 'to write=nothing yetπFOR b = 1 TO LEN(a$) 'letter by letterπc$ = MID$(a$, b, 1) 'get a letterπ'requirements..πIF ASC(c$) < 127 THEN 'below 127π IF c$ <> CHR$(94) THEN 'not an exponent symbol (this is used for CR/LF'sπ  IF c$ = CHR$(34) THENπ   fin$ = fin$ + CHR$(125) 'fix the quotation mark bug (change to curleybrace)π  ELSEπ   fin$ = fin$ + c$ 'we are only here if the character is acceptedπ  END IFπ END IFπEND IFπNEXT bπfin$ = fin$ + CHR$(94) 'add a line-end character, because it has to be :)πtot = tot + 1 'line count..prolly not neededπPRINT #2, fin$; 'NO CR/LF's! (a CR/LF is converted to the exp symbolπLOOPπCLOSE 'close filesπPRINT "..."; 'let you know you're still aliveπOPEN tfile$ FOR BINARY AS #1 'temp file with chr(94) for cr/lf's :)πOPEN tfile2$ FOR OUTPUT AS #2 'temp file with DATA'sπtot2 = 0 'linecount 2πDO WHILE NOT EOF(1)  'keep it comin'πv$ = STRING$(maxwid, " ") 'an area to getπGET #1, , v$ 'get a run of lettersπPRINT #2, "DATA " + CHR$(34) + v$ + CHR$(34) 'assemble a DATA commandπtot2 = tot2 + 1 'increase linecountπLOOPπ'PRINT #2, CHR$(34)πCLOSEπPRINT "..."; 'still alive :)πOPEN tfile2$ FOR INPUT AS #1 'DATA command tempfileπOPEN out$ FOR OUTPUT AS #2 'final file with extractor infoπt = 0πDO WHILE NOT EOF(1) 'another line count...πLINE INPUT #1, a$πt = t + 1πLOOPπSEEK #1, 1 'go to first spotπ'write extractor codeπPRINT #2, "' Text 2 Bas Extractor Code..."πPRINT #2, "lines="; tπPRINT #2, "outlines="; totπPRINT #2, "ON ERROR GOTO 20"πPRINT #2, "FOR a = 1 TO lines: READ b$: NEXT a"πPRINT #2, "RESTORE"πPRINT #2, "INPUT "; CHR$(34); "Output File"; CHR$(34); "; a$"πPRINT #2, "OPEN a$ FOR OUTPUT AS #1"πPRINT #2, "FOR b = 1 TO lines"πPRINT #2, "READ c$"πPRINT #2, "FOR d = 1 TO LEN(c$)"πPRINT #2, "e$ = MID$(c$, d, 1)"πPRINT #2, "IF e$ = CHR$(94) THEN"πPRINT #2, "PRINT #1, "; CHR$(34); CHR$(34)πPRINT #2, "ELSEIF e$ = CHR$(125) THEN"πPRINT #2, "PRINT #1, CHR$(34);"πPRINT #2, "ELSE"πPRINT #2, "PRINT #1, e$;"πPRINT #2, "END IF"πPRINT #2, "NEXT d"πPRINT #2, "NEXT b"πPRINT #2, "PRINT "; CHR$(34); " Extraction Complete."; CHR$(34)πPRINT #2, "CLOSE : END"πPRINT #2, "20 PRINT "; CHR$(34); "Text 2 Bas Data Corrupted!"; CHR$(34); ": END"π'the plus CHR$(34) is 'cause you can't do: PRINT " print "Hello World!"" :)πPRINT #2, "' Text 2 Bas Extractor Data..." 'remark for clarityπFOR a = 1 TO t 'copy in the data commands in the temp file 2πLINE INPUT #1, d$πPRINT #2, d$πNEXT aπPRINT #2, "' End of Text 2 Bas Extractor Data" 'clarityπCLOSE 'finish upππPRINT "Tx2bas Complete!" 'infoπKILL tfile$ 'temp file eraseπKILL tfile2$ 'againπENDππRay Carson                     SCROLL SCREEN LEFT/RIGHT       QBTIPS_T.DOC                   12-08-93 (09:13)       QB, QBasic, PDS        75   2859     SCROLL.BAS  '> I know how to scroll the screen UP and DOWN by usingπ'> interrupts, but I can't find a way do make it scroll leftπ'> and right like in Lotus 1-2-3, etc...π'> If you know if it's possible, or how to do it, leave me a messageπ π'The following code is slow in the IDE but is reasonably fast whenπ'compiled to an .EXE. You will lose characters that are scrolled offπ'of the screen unless you put them into an array or if you are workingπ'with known data (arrays/fields) then just reprint. I Hope long linesπ'don't get wrapped!π πDEFINT A-Z      'SCROLL.BAS ~ Ray Carson ~ 1993πDECLARE SUB Scroll (UpperRow, LowerRow, Columns, Direction)πCOLOR 15, 1: CLSπLOCATE 4, 2: PRINT CHR$(218); STRING$(76, CHR$(196)); CHR$(191);πLOCATE 8, 2: PRINT CHR$(192); STRING$(76, CHR$(196)); CHR$(217);πFOR X = 5 TO 7π    LOCATE X, 2: PRINT CHR$(179);π    LOCATE X, 79: PRINT CHR$(179);πNEXTπCOLOR 14, 1πLOCATE 5, 32: PRINT "RC Software";πLOCATE 6, 32: PRINT "1113 Hillcrest";πLOCATE 7, 32: PRINT "Conroe, Texas 77301";πCOLOR 2, 1πLOCATE 6, 10: PRINT "(409)756-6860";πLOCATE 6, 60: PRINT "(409)441-5096";πCOLOR 20, 1: LOCATE 10, 35: PRINT "Press Key";πDO: LOOP UNTIL LEN(INKEY$)πCALL Scroll(5, 6, 10, 0)  ' Direction 0 = rightπDO: LOOP UNTIL LEN(INKEY$)πCALL Scroll(5, 6, 10, -1) ' Direction -1 = leftπCOLOR 15, 1: LOCATE 10, 35: PRINT "  Done   ";π πSUB Scroll (UpperRow, LowerRow, Columns, Direction)π π    DEF SEG = 0π    Address = PEEK(1040) AND 48π    IF Address = 48 THENπ        DEF SEG = &HB000    'monoπ    ELSEπ        DEF SEG = &HB800    'colorπ    END IFπ    FOR X = 1 TO Columnsπ        IF Direction = 0 THEN               'Rightπ            FOR Column = 79 TO 1 STEP -1    'move everythingπ                FOR Row = UpperRow TO LowerRowπ                    Offset = ((Row - 1) * 80 + (Column - 1)) * 2π                    NewColumn = Column + 1π                    NewOffset = ((Row - 1) * 80 + (NewColumn - 1)) * 2π                    Char = PEEK(Offset)π                    Attr = PEEK(Offset + 1)π                    POKE NewOffset, Charπ                    POKE NewOffset + 1, Attrπ                    POKE Offset, 32π                NEXTπ            NEXTπ        END IFπ        IF Direction = -1 THEN              'Leftπ            FOR Column = 2 TO 80            'move everythingπ                FOR Row = UpperRow TO LowerRowπ                    Offset = ((Row - 1) * 80 + (Column - 1)) * 2π                    NewColumn = Column - 1π                    NewOffset = ((Row - 1) * 80 + (NewColumn - 1)) * 2π                    Char = PEEK(Offset)π                    Attr = PEEK(Offset + 1)π                    POKE NewOffset, Charπ                    POKE NewOffset + 1, Attrπ                    POKE Offset, 32π                NEXTπ            NEXTπ        END IFπ    NEXTπ πEND SUBπMartijn van de Streek          DOCUMENT CODER/DECODER         FidoNet QUIK_BAS Echo          11-25-96 (13:37)       QB, QBasic, PDS        152  5103     DOCCOD.BAS  'I've finished translating and editing the coding program. There was a little π'bug in the program after I had altered the coding mechanism, so it took a bit π'longer than it had to. π'Here's the code: π π'=============== Begin of program πDECLARE SUB LOOKFILE (ARG$) πDECLARE FUNCTION DECode$ (Variabele$) πDECLARE FUNCTION Code$ (Variabele$) πON ERROR GOTO Errhand π π' === Program Header === πPRINT πCOLOR 15, 0: PRINT DECode$("epD"); : COLOR 7, 0: PRINT DECode$("xqgnu") πCOLOR 15, 0: PRINT DECode$("hrE! "); : COLOR 7, 0: πPRINT DECode$("=:=*wwpywiy" + CHR$(34) + "se"); πPRINT π π'== Reading parameters... == πCoMMa$ = LTRIM$(RTRIM$(COMMAND$)) + " " πFOR Temp = 1 TO LEN(CoMMa$) π  IF MID$(CoMMa$, Temp, 1) = " " THEN Cmds% = Cmds% + 1 πNEXT Temp π'More or less than 3 parameters? πIF Cmds% < 3 THEN GOTO UserHelp πIF Cmds% > 3 THEN GOTO UserHelp πIF MID$(CoMMa$, 1, 1) = "C" THEN Add% = 1 'If first parameter is C, then π                                          'Code the file. π πIF MID$(CoMMa$, 1, 1) = "D" THEN Re% = 1  'If first parameter is D, then π                                          'Decode the file. πIF Add% + Re% = 0 THEN GOTO UserHelp      'If first parameter <> C OR D then π                                          'display some help π'find begin of first filename πFOR Temp = 3 TO LEN(CoMMa$) π  IF MID$(CoMMa$, Temp, 1) = " " THEN EXIT FOR πNEXT Temp πFOR B1% = Temp + 1 TO LEN(CoMMa$) π  IF MID$(CoMMa$, B1%, 1) = " " THEN EXIT FOR πNEXT B1% πFile1$ = MID$(CoMMa$, 3, Temp - 3) πFile2$ = MID$(CoMMa$, Temp + 1, B1% - Temp - 1) πIF Add% = 1 THEN GOTO Add πIF Re% = 1 THEN GOTO ReWrite πGOTO UserHelp π πAdd: π'=== Code-a-file === πIF NOT File1$ <> File2$ THEN PRINT "Can't read from "; File1$; " and write to"; PRINT "Secure with pasword? (Y/N)" πpassWord$ = "" πPasYN$ = INPUT$(1) πIF UCASE$(PasYN$) = "Y" THEN π  PRINT "Typ het paswoord in:"; : COLOR 0, 0 π  INPUT "", passWord$: COLOR 7, 0 π  IF passWord$ = "" THEN PRINT "ERROR: Invalid pasword": END π  PRINT "Retype password:"; : COLOR 0, 0 π  INPUT "", PasswordControl$: COLOR 7, 0 π  IF PasswordControl$ <> passWord$ THEN π     PRINT "ERROR: Pasword check failed": END π  END IF πEND IF πPassWrd$ = passWord$ + SPACE$(80 - LEN(passWord$)) πOPEN File1$ FOR INPUT AS #1        'This file comes the information from πOPEN File2$ FOR OUTPUT AS #2       'and this file is where the information π                                   'goes to... π  PRINT #2, Code$("Coded file by DOCOD.")' give file initialisation code for π                                         ' decoding... π  PRINT #2, Code$(PassWrd$) πregnr% = 0 πPRINT πRownr% = CSRLIN - 1 πDO WHILE NOT EOF(1) π  LINE INPUT #1, Rec$              'Read, π  PRINT #2, Code$(Rec$)            'Code and write π  regnr% = regnr% + 1 π  LOCATE Rownr%, 1: π  PRINT "Coding line:"; regnr% πLOOP πCLOSE #1 πCLOSE #2 πPRINT "Done." πEND π πReWrite: π'=== DECode-a-file === πIF NOT File1$ <> File2$ THEN PRINT "Can't read file "; File1$; " and write to file."πOPEN File1$ FOR INPUT AS #1        'This is where the info comes from . . .πLINE INPUT #1, Rec$                'Read and check for right file format... πIF Rec$ <> Code$("Coded file by DOCOD.") THEN PRINT "ERROR: Not a DOCOD File.":  πLINE INPUT #1, Rec$                'Read a line . . . πIF Rec$ <> "" THEN π  PRINT "Password:"; : COLOR 0, 0 π  INPUT "", passWord$: COLOR 7, 0 π  IF passWord$ <> LTRIM$(RTRIM$(DECode$(Rec$))) THEN PRINT "ERROR: Wrong passwordπEND IFπOPEN File2$ FOR OUTPUT AS #2       'And this is where it goes πregnr% = 0 πRownr% = CSRLIN πPRINT πRownr% = Rownr% - 1 πDO WHILE NOT EOF(1) π  LINE INPUT #1, Rec$              'Reading... π  PRINT #2, DECode$(Rec$)          'DECoding, and rewriting... π  regnr% = regnr% + 1 π  LOCATE Rownr%, 1: π  PRINT "Uncoding line:"; regnr%    'show the line number... πLOOP πCLOSE #1 πCLOSE #2 πPRINT "Done." πEND π πUserHelp: πPRINT "Usage:   CODOC.EXE c source.ext target.ext       -> Codes text files." πPRINT "         CODOC.EXE d source.ext target.ext       -> Decodes text files."πPRINT : PRINT "Only use CoDoc on TEXT-files, not binary ones !! (it corrupts the file)"πENDπ πErrhand: πIF ERR = 53 THEN PRINT "ERROR: File not found": END πIF ERR = 64 THEN PRINT "ERROR: Invalid filename": END πCLS πPRINT "Error:"; ERR πEND π π πFUNCTION Code$ (Variabele$) πFOR Temp = 1 TO LEN(Variabele$)ππ  NewCh$ = CHR$((ASC(MID$(Variabele$, Temp, 1)) + Temp) - 1) π  Newvar$ = Newvar$ + NewCh$ πNEXT Temp πFOR Temp = LEN(Newvar$) TO 1 STEP -1 π  NewCh$ = MID$(Newvar$, Temp, 1) π  NewVar2$ = NewVar2$ + NewCh$ πNEXT Temp π πCode$ = NewVar2$ πEND FUNCTION π πFUNCTION DECode$ (Variabele$) πFOR Temp = LEN(Variabele$) TO 1 STEP -1 π  NewCh$ = MID$(Variabele$, Temp, 1) π  NewVar2$ = NewVar2$ + NewCh$ πNEXT Temp πFOR Temp = 1 TO LEN(NewVar2$) π  NewCh$ = CHR$(1 + (ASC(MID$(NewVar2$, Temp, 1)) - Temp)) π  Newvar$ = Newvar$ + NewCh$ πNEXT Temp πDECode$ = Newvar$ πEND FUNCTION π'================ End of program πAaron Clausen                  INPUT FIELD ROUTINE            aaronc@freenet.alberni.net     12-13-96 (21:00)       QB, QBasic, PDS        124  3588     INPUT.BAS   ' Here is a quick and dirty input routine that I originally developed forπ' entering phone numbers.ππDECLARE FUNCTION PInput$ (Picture$)ππDEFINT A-Zπ' # numberπ' ! alphaπ' % alpha-numericπ' & uppercase alphaπ' * lowercase alphaπ'π' All other characters will be seen as literals and will be displayed.π'π' Eg. Phone$ = PInput$("(###) ###-####")π'πFUNCTION PInput$ (Picture$)ππ  tString$ = ""π  Length = LEN(Picture$)π  StartRow = CSRLINπ  StartCol = POS(0)ππ  FOR CharCount = 1 TO Lengthπ    IF INSTR("#!%&*", MID$(Picture$, CharCount, 1)) THENπ      tString$ = tString$ + " "π      PRINT " ";π    ELSEπ      tString$ = tString$ + MID$(Picture$, CharCount, 1)π      PRINT MID$(Picture$, CharCount, 1);π    END IFπ  NEXT CharCountππ  LOCATE StartRow, StartCol, 1ππ  ExitFlag = 0π  GetKeyFlag = -1π  CharCount = 0ππ  DOπ    IF GetKeyFlag THENπ      DOπ        HitKey$ = INKEY$π      LOOP UNTIL HitKey$ <> ""π    ELSEπ      GetKeyFlag = -1π    END IFππ    KeyVal = ASC(HitKey$)π    SELECT CASE KeyValπ      CASE 8π        IF CharCount >= 0 AND CharCount <= (Length + 1) THENπ          IF CharCount > 0 THENπ            SELECT CASE MID$(Picture$, CharCount, 1)π              CASE "#", "!", "%", "&", "*"π                LOCATE CSRLIN, POS(0) - 1π                PRINT " ";π                LOCATE CSRLIN, POS(0) - 1π                MID$(tString$, CharCount, 1) = " "π                CharCount = CharCount - 1π              CASE ELSEπ                LOCATE CSRLIN, POS(0) - 1π                GetKeyFlag = 0π                CharCount = CharCount - 1π            END SELECTπ          END IFπ        ELSEππ        END IFπ      CASE 13π        ExitFlag = -1π      CASE 32 TO 127π        CharCount = CharCount + 1π        IF CharCount <= Length THENπ          SELECT CASE MID$(Picture$, CharCount, 1)π            CASE "#"π              IF (KeyVal = 45 OR KeyVal = 46) OR (KeyVal >= 48 AND KeyVal <= 57) THENπ                MID$(tString$, CharCount, 1) = HitKey$π                PRINT HitKey$;π              ELSEπ                CharCount = CharCount - 1π              END IFπ            CASE "!"π              IF (KeyVal >= 65 AND KeyVal <= 90) OR (KeyVal >= 97 AND KeyVal <= 122) THENπ                MID$(tString$, CharCount, 1) = HitKey$π                PRINT HitKey$;π              ELSEπ                CharCount = CharCount - 1π              END IFπ            CASE "%"π              MID$(tString$, CharCount, 1) = HitKey$π              PRINT HitKey$;π            CASE "&"π              IF (KeyVal >= 65 AND KeyVal <= 90) OR (KeyVal >= 97 AND KeyVal <= 122) THENπ                HitKey$ = UCASE$(HitKey$)π                MID$(tString$, CharCount, 1) = HitKey$π                PRINT HitKey$;π              ELSEπ                CharCount = CharCount - 1π              END IFπ            CASE "*"π              IF (KeyVal >= 65 AND KeyVal <= 90) OR (KeyVal >= 97 AND KeyVal <= 122) THENπ                HitKey$ = LCASE$(HitKey$)π                MID$(tString$, CharCount, 1) = HitKey$π                PRINT HitKey$;π              ELSEπ                CharCount = CharCount - 1π              END IFπ            CASE ELSEπ              GetKeyFlag = 0π              MID$(tString$, CharCount, 1) = MID$(Picture$, CharCount, 1)π              PRINT MID$(Picture$, CharCount, 1);π          END SELECTπ        ELSEπ          IF CharCount > Length THEN CharCount = Lengthπ        END IFπ    END SELECTπ  LOOP UNTIL ExitFlagππ  LOCATE , , 0π  PRINTπ  PInput$ = tString$ππEND FUNCTIONπMichael Zito                   PICKLIST: DIALOG BOX FOR VBDOS Mzito@aol.com                  12-08-96 (10:02)       VBDOS                  80   5231     PICKLIST.BASDEFINT A-Z:DIM SHARED K,S,B&,Z&:V1 'Created by PostIt! 7.2πSUB V1:OPEN "O",1,"PICKLIST.ZIP",4^6:Z&=3646:?STRING$(50,177);πU"%up()%9%%%.-%'v\WF6u<[AW+%%%iD%%%1%%%%un%hpqn%xySkRwrF(8*t\]C9MπU"+XNx?S%a(NwM+;_K&Owb4uPi/08YPN7[6U?<HHK1o+s=oP(A^Tni=]6E1+PsuvlπU"tq+76hqZBEg8=HUQOc8VtA)NuVsKbLhjTBY?vb\^\MaQ*XzT^34t=m8m&Y7>SRWπU"Z#>d[g0Hg_h;N,DD'#Dp]K#gfU=(w[xMkzYp1+(?1X'Cu?^eL__A?tg^)[K?BAqπU"20GlAu:o:H]K/b?OZDcCao].kR$Pa=rPn\uX3?]7VHZb#nXGYCb=[#LXD?JulM+πU"dT^&B,x)bTTA2*41i>g<S??cp:Fh?CT*K%09A;bV1>uUv?g6A#dFCXDs,H^,Y[fπU"rvDak.+ToaYSfL=>BLpf[wQ(7:1Y?(gJ*L/s(MmGd3O25N8jOK)/<+CB*>(7WN3πU";wZj'gZhW0fVFJhS\y.Y+RBamX[+GQG^cTR,f=wX81mVI[d&2qHA%eDwW>IFyo[πU"QRId&MUXp=Z=]/%D>#JF#$:Mja;9TQz^/p#);_jA*q?%nQ8O#mqMY*2+oT2\cBtπU"ZE:1nIRMbnv7EchX%EI2[nb?9NS\0[fR)P2c>Sq*h>WOzAkS%MPJE/CgecL\BdlπU"X],JAb%Aofu</3jHjP>w,mhmf\4H*Gr0,Z0s01lFbU5ofqdox5aRkDWX'kf_rExπU"s'8=&rOZ5(u'KuyW#tDdowf-8m4W;x3oqoVd'>Z,dF6./#3Has$&)QHJXK0/Xd#πU",$6:U?IFR3MYE;$gi>E4\.l*#P2_o&d,$60car?$4_4XixLKquK]Flk#o*q+]tJπU"c_%]YBpv-'wrx]kn=L[r-fwPZOti,u/qit#/HM%B^<kn\LkOu9/<Slw56c^N3BoπU"#sNgUS015sSR?\78d;5$7rKO4o#(Vr*8<Z:Yg)XpVpUOTGw?Y+;bUHLd^L(=K:[πU"=r9<P)D^pLui9;#pdcBJ?^hq-4d<h<af-A:DQU8#hR^/G.G3;'SKkZ(%i)TUHPsπU"xO%3<+t.Y'^x\0a.R)+Gv<X>YEk]/fuwi]\8r)XU6&efS7Y,I:9imxbH5oj1?c'πU"_3XG?5)jW._:MCS5YIm.nm4IJ&KQSRt*^m1IiSF2HXP&jv:AZ#7aRBOK5SCaGX9πU"Y6;j[)IxOl>Lg2z^WiB).E9jevQ&hCviQOqh,_jh=qM<nJReqds9.:Wv=yhw.KNπU"8we-Y[/OKKC]kE9N&>7'&\e$u_7p.*;A^AU_Of<DoO/KWY7Q7Oh9'%\.Gc17j.XπU"IHTj_KCfaY7nYQwDwWqqJ%7X>%mxzPjx1bAD:1Ub5_GX<V/3cjh[APf?>DF0NIEπU"=ppHMQek/as#jzW45,?[SB4aM>q8c33aDXNJxO(m*N%4xJYr67Zd_UaB&:HsYihπU"*R&6HRe1*$6C?22a3gSLVX*9L^IsCR&ieRB>pOf)*YrTK/>lvsxJjJi><z$?U0+πU">Cmvwd#i8oT,_vV&F75m>A$KK0B]i)Z^MV[g37CVI_,ke%M)'EGRw;k#2#(;1HrπU"+Tbr^7Jc13)jR;$/-^HK(%>+gsI$A-;H%pm&3m6QNoZe;$\4&Peji\PRc;Ld&1cπU"ba+YncbeOb8Xy%]%2xDAAhb^.1/8l6-:(/7[VI*r+sMY.5jJZqU'5()()reQW7WπU"[W]K*O.A)G]qf1ztKuC&Zck=FVt0Br^0/?r^a%w->cCTaRMtFfUn5j#yoSx&^Q:πU"b]6[j=/=]nr:BSk8(6KD_d8B&ufQk+y<*iAoIIFJU=HBY9P&cD-%xI+NIhwg[8ZπU"uK*'aE2lae=TxapqZKG'3/gs%UU=hj1qhXm4,)fkQ0KJdw=%akq3l:.2^Ke)[/_πU"8bv^Pt^?Jew[5[C\j+G,Dv(6DAEkq(&ZR;ouRbN6yv()&*0OFS-Ny(/vIZ+xx+rπU"XR)/z4v*y;ej?(Vgf&t,Z%)_3PB.x<qqhJ$(=383CenN&I3w7PZl[uTMNi2gch(πU"A<oOC;EB:naF*<_k0lJ4x%-LEL2h+(Na#MO8oOvhE&(3Yn<^#Y/,0B[1cVlqV3NπU"\KZS813k-2z*L/V3O4MEPx\b?xp^<4^X%;EA$1j^5.QEa*ewVVfAwC4rXjH+d\YπU"z4o:iTD[z2xfO9=>0]=/C/s6jx[chF>'#&z=hygv_eYQy2DOFo7O3^9DW^_0^h$πU"IL[*\\botetwc8A%roN]?tn%Yy74Cbbn,M$J0mrxT5$p3(BG4p/FC:a02P?W1=/πU"kFwKqrL7d0DH&P/S>*-MihC4>U^=B;iCHc&o4b(27#uw4%up()%9%%%%-%(tnWFπU"tK'?;'+7%%e4%%%1%%%%un%hpij%rtSgRfx&&;,>So^5Ll[%dqvIdeJwI=y3C:.πU"49k+F*eMuX2fTQqf/>okAPELuutGe*%\Vi1zt:j;YF6XtB_dErKUL$acUaHT<Y4πU"UIV)pWoM8%N+TQO2'Xctbl8R7\_.#/;X9=RB,_fi+AJRxh83N'Ir]xMi(75$9\XπU"u=nJwRShS[xQ9=:<DSuUeaa=P=[:7w>Br.+GH*KMOqWHHo&K'lJy.BSlRJ5xJ=QπU"%(Y6K=t?Q](-IUk^>$)i:E2nx9;_HWhd_Q^C3#::<M_h(/$nZ075:Tk&\1TqP[KπU"Yr&s[;nH1HHc%i:G&npZ;W#Ew9sj5BoLM4:5fZ)f.IBKGKDC.7NQ'-an_O4W//DπU"\ZNw+I;-51'To>guX>vt)?/H*2#zKanA+\5_I]T^JsOP1#Sr'h8aT)]^T6hjHR4πU"jsfPY^+IWE5S?jE6Dz(4qgL)aFmFp)petXZ(9w7O=OX2XSCks8>l*i+ib>#4G&cπU"Go>/\z_l1)&rGmQdo5p-%>Ac#gf.XN3Z4+5?Wn[ViG+E?.qSE/pk[c^P7B5C/7,πU"h;uRWmE/Sa(guq-^xAXB0\Z%N&%%+]^[tP1nIt8)(O*?[9pOBieg5EGWL)KJ,h&πU"sMkJiwmTl*2$'9908LKgZ=,n.vELxX9QSY(]>0mG-x==7\I<rhG\b('JZ4V^-2$πU"wy\-3Bke_M%wK33Mn#6G$)MC]ogxv%k9:0Kmy&>5O35n:EN:t+6^+jBRMvi\L8?πU"o#OqWA\MR[Hs[?e\*J2V9)M?=Pq;/.6&/;GJI'>kQX>O9c)e\?yFe7z0m9kH9BrπU"p=D)#b+Luc%35[S8WaFC(rQ?cKm1cw)C7mF\%&XdOOnNW_zn<4y&dK5FFA6'7MhπU"Tgxv+PLFPl_h9gWd%6/->Z=&:LWE;9J&u%WG[1d.iF0qrH9]2DNQkp7mv(QnRlZπU":nWi_fy[?d7#'daf/'<SJ')[dKgK<;^WJ/xhhs_Dp6ka+g<kXQz]2:VOv[iLpweπU"3aQfRV>K'N;=QCPvkWcE6/#Q'uTl^As]nB)?*q>RPs-8H>f9'Eg_Zy6GYAD/X2\πU"Yk5%L7,];2)mOk?+aw0'#'][tQoFQ)mU*A:^7Ux5XKsDn55rRg_.\XF.c\DDFQ?πU"=B$Dwf?*JG)fR,1\ki=Nf1CnNI*\A(w1U;a)bmZt[?JM'c#ME\8T^c?3658s,uqπU"A7hpkdY10,<Z/[kTit,0V5V.Unjb)v\,xc?MzZpS+g;GZ+G<XGQftQMq\'(Rd]bπU"Bg$:%#i$ER]#hf'3QmC:lF#+k(VB9-.4Bb&^Ab-JARHFKD,kR+K4mZEQP5djC)=πU"RcH;f5,NrPO4,B&sI\cE,9[+Y6.u*cT?IOjMnu2.IgH2WY-f^tvLRK&(yFB=qNGπU"w6lj;=gzxuF%\m8YL?+5=g>:T5GNdbmD_>jMVv-qEK-uPWZAkeu=)3G7?h'89#tπU"9OyBR;Q>+BPmsp:.a)GV6$ap(?lQb]XvN5&lnAMgwkU%:BjHkVLTGO_1YXay>WTπU"MhZv$iZQiEkL1U2%\>TB(=/%,<5NxelFQ1n25[hA$X^LGIj,>/NhZ>5Yq6v<<Q<πU"*g):1mK6'&IQqhht^VqBnpF,&vZS:,w+IGAB;BDQtxX[DdosxW#q8oZ3gUm3qyWπU"Q6l'aTNg&*'U;0]PwjNHY\n[UC_ZhYLrcTpxWd*hy]QmQh*uz981>F-TNu=cdRsπU"$0#\Y8uxBU)Y->fY(1i.rYJInw4uY.uiVM&rcZ[o2Oc\n87b;+C,,9#t't5Vt\VπU"tFV]SR^J3$bg4pdpo\H+=DbkClN?t0XhpbZAcWcG_3EoU$$4Z:V3UOl#lAf8]BXπU"fZ\OHV]BH>X0xD6A>*R&(&aiMcOm8=Z077:rnOkZk7&CDhy#vMbIISLjftsuZ5,πU"Nv7b6B+L>lN<;in=N'DDE:DOuaXA'G_/BZ2(u>S[VV]:9Xjnz$p?ELQe?OkGLJ;πU"m;v+%up()%/%%%%%%(tJWFa,,?OA%%%%A%%%%1%%%%ij%rtun%hpSr%fpun%hpiπU"j%rtSg%fx2/%unhp%qnxy%Skwr%2/up%&'9%%9%%%.-%'v\WF6u<[AW+%%%iD%%πU"%1%%%%%%%%%&%%E%%%%%%%%%unhp%qnxy%Skwr%up&'%9%9%%%%-%.(tWF?tK?;πU"%'+%%'e4%%%1%%%%%%%%%&%E%%%%-,%%%un%hpij%rtSg%fxup%&'9%%/%%%%%%πU"(tJWFa,,?OA%%%%A%%%%1%%%%%%%%%&%%E%%%%Y2%%%ijrt%unhp%Srfp%up*+%πU"%%%%%(%(%''%%%&I2%%%%%πEND SUBπCLOSE:IF S=76AND B&=Z&THEN?" :) Ok!"ELSE?" :( Bad!πSUB U(A$):FOR A=1TO LEN(A$):C=ASC(MID$(A$,A))-37:IF C<0THEN C=91+C*32πIF K<4THEN K=C+243ELSE?#1,CHR$(C+(K MOD 3)*86);:K=K\3:B&=B&+1πS=(S+C)AND 255:NEXT:LOCATE,1:?STRING$(B&*50\Z&,219);:END SUBπ 1         138  ABC GROUP EXTRACTOR            Alexander Podkolzin             1         32   UPDATE OF BASE CONVERSION      Tyler Barnes                    1515      133  GRAPH INTEGRALS                Toshihiro Horie                 6023      355  FUNCTION GRAPHER               Toshihiro Horie                 1         270  ANSI FIRE                      Mattias Andersson               6661      58   DISPLAY W/INT21H & ANSI.SYS    Mark Olson                      1         96   SECURE INPUT                   B.S v/d Berg                    1         124  ASSEMBLY IN QBASIC 2: DATASEG  Rick Elbers                     4108      175  ASSEMBLY IN QBASIC 3: INT86QB  Rick Elbers                     12540     424  ASSEMBLY IN QBASIC 4: INTERRUPTRick Elbers                     30539     279  ASSEMBLY IN QBASIC 5: PROCS    Rick Elbers                     1         59   BINARY SEARCH ROUTINE          Joe Caverly                     2198      37   FULL 16-BIT SHIFTING ROUTINE   Kurt Kuzba                      1         55   PRINT COUNTRY SPECIFIC DATE    Egbert Zijlema                  1         903  DOSFS FILESYSTEM BROWSER V1.0  Aaron Finley                    27624     123  AN ANIMATED LIFE SIMULATION    Charlie Quante                  1         120  COMMAND$ PARSER                Tika Carr                       4893      65   PROGRAM ERRORLEVELS            Christy Gemmell                 7366      154  BATCH UTILITIES                Bryan J. Kyle                   17535     835  WINDOW'S LONG FILENAMES        Mark K. Kim                     54263     156  FILE COPY                      Phil Weber                      59497     421  MODIFY ENVIRONMENT SETTINGS    Jack Hudgions                   74785     169  SCROLLING DIRECTORY LIST       Kurt Kuzba                      81519     371  DISPLAY CONTENTS OF HARDDISK   Rick Elbers                     1         77   DRAW A HILBERT CURVE           Jamshid Khoshrangi              1420      39   DRAW SPHERES                   James Eibsch                    2383      46   PLOT TEXT STRING TRANSPARENTLY Tika Carr                       1         29   QB ERROR CODES EXPLAINED       Mike Ginger                     2024      57   SPLIT/CONCATENATE FILE         Kurt Kuzba                      4265      173  ANIMATION                      Dave Shea                       1         689  THE HORDE V1.43 FINAL          Daniel Garlans                  20253     77   BAGELS (NUMBER GUESSING GAME)  James Hooker                    23495     964  WORMHOLE V3.0                  Brent P. Newhall                53174     184  BOXES W/MOUSE CONTROL          Brian Flanagan                  56956     405  CHESS                          S. W. Higgins                   80522     320  WHEEL OF FUN                   Daniel Kalna                    101490    217  YAHTZEE                        Daniel Kalna                    115708    282  MINE AVOIDER                   Amit Jain                       123716    372  JIGSAW PUZZLE GAME             Brent P. Newhall                136187    338  THE ADVENTURES OF FEDERICO     Thomas A. Hirsch                158390    1754 SPINBALL VERSION 2.5 BETA      Eric Carr                       272643    294  TOETRIS - DEMO VERSION         Thomas A. Hirsch                291885    750  HELTER SKELTER V1.02           Matt Zuchowski                  340923    423  ILLINOIS JOHNSON V1.0          Brent P. Newhall                354094    189  RPG CODE                       Jeff Hangartner                 366541    258  CHECKERS                       James Prevatt                   1         154  GEOMETRY OF A CIRCLE           Steven A. Morisi                4038      164  3D FLAMES                      Mattias Andersson               9453      218  TILE-BASED ENGINE              Dave Shea                       23711     42   TERRITORIAL PISSINGS           Dave Shea                       26315     178  SCREEN CLEARING ROUTINE        Tika Carr                       32862     49   DISPLAY WINDOWS OR OS/2 ICONS  The ABC Programmer              34095     53   SNOW FALLING AND PILING UP     Thomas A. Hirsch                35428     375  VGA CHRISTMAS DEMO             David A. Wicker                 44679     69   SCALABLE FONTS                 Kurt Kuzba                      47272     189  SAVE SCREEN IMAGE TO PCX       The ABC Programmer              53870     42   SLOW TYPE EFFECT               Andrew Diamond                  55286     44   HILIGHT PRINT                  Andrew Diamond                  56759     501  A SCREEN 12 SPRITE EDITOR      Charlie Quante                  89502     688  LANDSCAPE GENERATOR            Marhsall Drew-Brook             134388    97   PARALLAX SCROLLING             Matt Zuchowski                  140836    54   WINTERIZE YOUR SCREEN          Kurt Kuzba                      1         302  HTML LISTING OF ABC PACKETS    Charlie Quante                  12861     154  SMALL HTML GENERATOR           Edward Blake                    16976     301  HTML DECODER                   Toshihiro Horie                 1         66   A FILTERED INKEY$ ROUTINE      Charlie Quante                  1         428  SWAP SHELL                     Cornel Huth                     1         81   SWAP COM PORTS                 Joseph L. Clark                 1         349  FREEWARE MOUSE ROUTINES        Mike Ginger                     1         381  IPX ROUTINES                   David Rice                      1         304  REPLACES PB (LINE)INPUT        Egbert Zijlema                  9183      142  FILE SORT                      Egbert Zijlema                  1         130  FABTRACKER (MUSIC COMPOSER)    Mattias Andersson               4098      199  SOUND BLASTER MIC OSCILLOSCOPE Toshihiro Horie                 9783      22   SB VOC/FM/MASTER VOLUME CONTROLThe ABC Programmer              10855     28   SB INPUT L/R MASTER VOLUME     Beau Schwabe                    11825     271  ADLIB/SB MUSICAL NOTES         The ABC Programmer              1         169  PB TEXT MODE SCREEN SAVER      Alexander Podkolzin             4024      105  TEXT 2 SELF EXTRACTING .BAS    Daniel Garlans                  7778      75   SCROLL SCREEN LEFT/RIGHT       Ray Carson                      10727     152  DOCUMENT CODER/DECODER         Martijn van de Streek           15843     124  INPUT FIELD ROUTINE            Aaron Clausen                   1         80   PICKLIST: DIALOG BOX FOR VBDOS Michael Zito