View difference between Paste ID: t51wFbAw and uxVKf3Bn
SHOW: | | - or go back to the newest paste.
1-
{$DEFINE SMART}
1+
//{$DEFINE SMART}
2
{$i srl/srl.simba}
3
{$i ObjectDTM/ObjDTMInclude.simba}
4
5
var
6
7
  //Stores the previous bank slot logs were found in, to speed up banking
8
  LogsBankSlot : TPoint;
9
10
  //Proggy stuff, and fail counter, and bank method...
11
  Prog_PlanksMade,FailCount : Integer;
12
  BankWithChest : Boolean;
13
14
  //stats stuff
15
  commitTime : LongInt;
16
  logsPlanked : Integer;
17
18
  WarnTime : LongInt;
19
20
const
21
  DEBUG_LEVEL = 5;
22
  ENABLE_WALKING = True; //If true, your character will walk to the
23
                          // edgeville bank, if it cannot identify a bank nearby
24
25
  MAX_FAILS = 3; //player will log out if the script fails this many times in a row
26
                 //^ I recomend you do not change
27
28
  SRLStats_Username = '';//If you do not have a stats account, please leave
29
  SRLStats_Password = '';//these blank, and register an account when prompted
30
31
procedure DeclarePlayers;
32
begin
33
  HowManyPlayers := 1;
34
  NumberOfPlayers(HowManyPlayers);
35
  CurrentPlayer := 0;
36
  with Players[0] do
37
  begin
38
    Name := '';
39
    Pass := '';
40
    Pin := '';
41
    Active := true;
42
    Member := true
43
                      //Log Type
44
    Integers[0] := 3; //0-3 for normal, oak, teak, or mahogany logs respectively
45
    Booleans[0] := True; //Use soulwars bankchest?
46
  end;
47
end;
48
49
function replicate(str : String; count : Integer):String;
50
var
51
  I : Integer;
52
begin
53
  Result := '';//make sure result is empty if function was previously called;
54
55
  for I := 0 to count-1 do
56
    Result := Result + str;
57
end;
58
59
procedure DebugStr(Level : Integer; Text : String);
60
begin
61
  if (DEBUG_LEVEL >= Level) then
62
    writeln(replicate(':: ',Level) + Text);
63
end;
64
65
function GetLogDTM(Log : Integer):Integer;
66
begin
67
  case Log of
68
    0: Result := DTMFromString('mlwAAAHicY2dgYDjEzMCwE4iPA/EFID4NxCeA+AAQczEy' +
69
                               'MPBBMScQswDxT6CeP0Ac5azO0JRhCWQxYWBWIIkLM+LBU' +
70
                               'AAAb7UJyg==');
71
    1: Result := DTMFromString('mlwAAAHicY2dgYDjMzMCwE4gPAfFpJAzi6zEyMBgAsQIU' +
72
                               'awCxIRCbAHFdvDnD7JowoAlMGJgVSOLCjHgwFAAAS4YJZQ==');
73
74
    2: Result := DTMFromString('mggAAAHicY2NgYDjKzMCwE4gPA/EFID4BxKeAOIiRgSEM' +
75
                               'iJ2BOBDK9gHi5T2xDE1JlkCdTCiYFUhiw4w4MAQAAKTJCXk=');
76
77
    3: Result := DTMFromString('mlwAAAHicY2dgYDjDyMBwCIgPM0LYF4D4KhBfBmIVINYB' +
78
                               'YkMg1gNiXShfGYhb870YAvS4gSYwYWBWIAnD6LKMeDAUA' +
79
                               'AAftgjF');
80
  end;
81
end;
82
83
function GetBankLogDTM(Log : Integer):Integer;
84
begin
85
  case Log of
86
    0: Result := DTMFromString('mlwAAAHicY2dgYDjAyMCwnRFCnwLiE0B8DogPA/F8oPwy' +
87
                               'IJ4CxFOBeA4QLwbi5UAcZKfK0JptDWQxYWAOIAnC2AAjH' +
88
                               'gwFAFSxC74=');
89
    1: Result := DTMFromString('mlwAAAHicY2dgYHjNyMDwGIg/APE3IP4CxL+B+DMQzwPK' +
90
                               'LwXiSUA8FYjnAPEiIF4GxFkB+gyLm2OALCYMzAEkQRgbY' +
91
                               'MSDoQAAKDMNfw==');
92
    2: Result := DTMFromString('mlwAAAHicY2dgYJjEyMDQDcTTgXgeEM8B4kVAPAPEB8ov' +
93
                               'BakB4mlAPAeIFwDxMiBuzvdiaE+zAbKYMDAHkARhbIARD' +
94
                               '4YCAN8eCwo=');
95
    3: Result := DTMFromString('mlwAAAHicY2dgYHjNyMDwBIjfAvEXIP4KxN+A+D0QKwGx' +
96
                               'BhCLA7ECEIsBsSYQawNxc74XQ5ABD9AEJgzMASRBGBtgx' +
97
                               'IOhAACFyQl2');
98
  end;
99
end;
100
101
function GetMageSortSettingBMP(Setting : Integer; Planking : boolean) : Integer;
102
begin
103
  case Setting of
104
    0: Result := BitmapFromString(6, 5, 'meJwTUVARUVCRl5c/evOVeUQBkPSN' +
105
              'TfeKSmZkYABy05dtA8oCuUBBOBfIAHIDErOADCAXqBJI+sZnAhGQD' +
106
              'UQQBgAtghmf');
107
    1: If Planking then
108
         Result := BitmapFromString(6, 6, 'meJzTNzCwsbHJyspiZGDo6uoSFhYG' +
109
                'MhwdHYFsICMhIREoIi8vP2ny5ITERKCIvoEBUGTJkiVAEaA4FxcXk' +
110
                'BuRWQzUAmQDFQC5AYlZsQVVQDaEC5SNyi1PKW8CAFv6GSo=')
111
       else
112
         Result := BitmapFromString(7, 7, 'meJzTNzCwsbHJzs5mZGDo6uoWFhbO' +
113
                'buwBsh0dHYFcICMxMREomFHZKi8vP2nyFCAXKKhvYAAUTClvWrJkC' +
114
                'VAQKMXFxQUUSSppSCisBuoFcoHKIGqAIkAE5KKJABHQWCAXgoDciM' +
115
                'xiIAIAby4rEw==');
116
    2: Result := BitmapFromString(7, 7, 'meJxrnL2gYsKc0u6ZRR1T8psnZDf2' +
117
              'AFF9MgNQhMG2GY4yKluDTRhB7Pi9DF0PQQjIsG0CagEJArmLroIQkAE' +
118
              'WZGRggOltAiIgF2hsZk0HkAFHCYXVQGNTypsgCMiNyCwGIgAMgjOd');
119
  end;
120
end;
121
122
function MenuOpen:Boolean;
123
var
124
  MenuBMP,a,b : Integer;
125
begin
126
  DebugStr(3,'Checking whether menu is open...');
127
  MenuBMP := BitmapFromString(4, 3, 'meJxbtmzZnz9//oHBHzBgZmEBIiDD' +
128
        'zMyMS1AIiADthRTJ');
129
  result := FindBitmap(MenuBMP,a,b);
130
  DebugStr(4,'Menu was open: ' + BoolToStr(Result));
131
132
  FreeBitmap(MenuBMP);
133
end;
134
135
procedure mouseAway;
136
var
137
  TP:TPoint;
138
begin
139
  DebugStr(5,'Exiting Menu');
140
141
  GetMousePos(TP.x,TP.y);
142
143
  MMouse(TP.x-100-random(50),TP.y-150-random(100),5,5);
144
145
  wait(540+random(500));
146
end;
147
148
function PinAndBankTest:Boolean;
149
var
150
  T,Limit : LongInt;
151
152
begin
153
  if not LoggedIn then
154
    Exit;
155
  Result := false;
156
  DebugStr(3,'Waiting for bank and pin screens...');
157
  Limit := RandomRange(13000,17000);
158
  MarkTime(T);
159
  repeat
160
    wait(50+Random(150));
161
  until BankScreen or PinScreen or (TimeFromMark(T) > Limit);
162
  if PinScreen then
163
  begin
164
    DebugStr(2,'Entering pin...');
165
    if Length(Players[CurrentPlayer].Pin) = 0 then
166
    begin
167
      DebugStr(2,'You did not set a pin, but we are in the pin screen... ' +
168
               'Next player...');
169
      Logout;
170
      NextPlayer(False);
171
      Exit;
172
    end;
173
    inpin(Players[CurrentPlayer].Pin);
174
  end;
175
  DebugStr(3,'Waiting for bank screen...');
176
  MarkTime(T);
177
  while not BankScreen and (TimeFromMark(T) < 5000) do
178
    wait(50+random(50));
179
180
  wait(RandomRange(600,1200));
181
  Result := BankScreen;
182
  if Result then
183
  begin
184
    DebugStr(2,'Bank opened succesfully');
185
    FixBank;
186
  end else
187
    DebugStr(2,'Did not find Bank Screen');
188
end;
189
190
function Open_Bank:Boolean;
191
var
192
  I,TempCTS : Integer;
193
  TempHM,TempSM : Extended;
194
  TP : TPoint;
195
  bankerTPA : TPointArray;
196
  bankerATPA : T2DPointArray;
197
begin
198
  if not LoggedIn then
199
    Exit;
200
  Result := False;
201
  TempCTS := GetColorToleranceSpeed;
202
  if TempCTS = 2 then
203
    GetColorspeed2Modifiers(TempHM,TempSM);
204
  SetColorToleranceSpeed(2);
205
  SetColorspeed2Modifiers(0.04,0.50);
206
  if not (BankScreen or PinScreen) then
207
  begin
208
    DebugStr(3,'Not in Bank or Pin Screens');
209
    DebugStr(3,'Trying OpenBankNPC;...');
210
    Result := OpenBankNPC;
211
    if Result then
212
      DebugStr(3,'SRL OpenBankNPC succesfull')
213
    else
214
    begin
215
      DebugStr(3,'SRL OpenBankNPC failed, finding bankers manually...');
216
      FindColorsTolerance(bankerTPA,3612967,MSX1,MSY1,MSX2,MSY2,10);
217
      bankerATPA := TPAtoATPA(bankerTPA,20);
218
      SortATPASize(bankerATPA,True);
219
      for I := 0 to length(bankerATPA)-1 do
220
      begin
221
        if BankScreen or PinScreen then
222
          break; //in case we opened succesfully from a previous bank call...
223
        if Length(bankerATPA[I]) < 100 then
224
          break;
225
        writeln(Length(bankerATPA[I]));
226
        TP := MiddleTPA(bankerATPA[I]);
227
        MMouse(TP.x,TP.y,4,4);
228
        DebugStr(4,'Waiting for bankers uptext...');
229
        if WaitUpTextMulti(['to B','Bank','anke'],1525+random(225)) then
230
        begin
231
          DebugStr(3,'Found Banker');
232
          clickMouse2(mouse_Right);
233
          if WaitOption('ank B',1500+random(225)) then
234
          begin
235
            DebugStr(4,'Found option to bank');
236
            wait(100+random(125));
237
            if ChooseOption('ank B') then
238
            begin
239
              DebugStr(4,'Clicked open bank succesfully');
240
              FailCount := Max(0,FailCount-1);
241
              Result := True;
242
              wait(750+random(200));
243
              while IsMoving do
244
                wait(50+random(150));
245
            end else if not FindNormalRandoms then
246
            begin
247
              DebugStr(3,'Failed find open bank option, incrememnting FailCount...');
248
              Inc(FailCount);
249
              DebugStr(3,'Failed ' + inttostr(FailCount) + ' times so far...');
250
            end;
251
            break;
252
          end;
253
        end;
254
      end;
255
    end;
256
  end;
257
  DebugStr(2,'Banking Success: ' + BoolToStr(Result));
258
  BankWithChest := Result;
259
  {$IFDEF SMART}
260
    SMART_ClearCanvasArea(IntToBox(MSX1,MSY1,MSX2,MSY2));
261
  {$ENDIF}
262
end;
263
264
procedure depositPlanks;
265
begin
266
  if not BankScreen then
267
    exit;
268
  DebugStr(3,'Depositing Planks...');
269
  Deposit(3,28,True);
270
end;
271
272
function TestBankSlot(text : TStringArray ; BankPoint : TPoint; ExitMenu : Boolean):Boolean;
273
var
274
  T : LongInt;
275
  Tries : LongInt;
276
begin
277
  Result := False;
278
279
  if not BankScreen then
280
    exit;
281
282
  DebugStr(4,'RightClick testing bank slot ' + tostr(BankPoint));
283
284
  MouseBankSlot(BankPointToBankIndex(BankPoint),mouse_move);
285
286
  for Tries := 0 to 5 do
287
  begin
288
    DebugStr(4,'Attempting to test object in bank. Attempt #' + inttostr(Tries));
289
290
    If MenuOpen then
291
      mouseAway;
292
293
    MouseBankSlot(BankPointToBankIndex(BankPoint),mouse_move);
294
295
    wait(50+random(150));clickmouse2(mouse_Right);
296
297
    MarkTime(T);
298
299
    while not MenuOpen and (TimeFromMark(T) < 3000) do
300
      wait(350+random(250));
301
302
    DebugStr(5,'Checking Options list for: '+tostr(text));
303
304
    if OptionsExist(text,false) then
305
    begin
306
      Result := true;
307
308
      break;
309
    end else if MenuOpen then
310
      break;
311
312
  end;
313
314
  //If not result then we are not in the correct menu anyways...
315
  if Result and ExitMenu and MenuOpen then
316
    mouseAway;
317
318
  DebugStr(4,'Done Testing Bank Slot ' + tostr(BankPoint) + '. Result: ' + booltostr(Result));
319
end;
320
321
function GetLogsUptext(Log : Integer) : TStringArray;
322
begin
323
  case Log of
324
    0: Result := ['ll L'];
325
    1: Result := ['ak l','Oak'];
326
    2: Result := ['eak l','Teak'];
327
    3: Result := ['aho','oga', 'any', 'ny lo'];
328
  end;
329
end;
330
331
function FindLogs(var LogsSlot:TPoint; withdrawLogs:boolean):Boolean;
332
var
333
  found : Boolean;
334
  LogDTM : Integer;
335
  T : LongInt;
336
  TP : TPoint;
337
begin
338
  if not LoggedIn then
339
    Exit;
340
  if not BankScreen then
341
  begin
342
    DebugStr(3,'Attempted to find logs, but we were not in the bank window');
343
    CloseWindow; //In case we got stuck in deposit window...
344
  end;
345
  if MenuOpen then
346
    mouseAway;
347
  LogDTM := GetBankLogDTM(Players[CurrentPlayer].Integers[0]);
348
  DebugStr(2,'Beginning search for logs...');
349
  FindDTM(LogDTM,TP.x,TP.y,MSX1,MSY1,MSX2,MSY2);
350
  {$IFDEF SMART}
351
    SMART_DrawCircle(false,TP,5,False,clAqua);
352
  {$ENDIF}
353
  found := TestBankSlot(GetLogsUptext(Players[CurrentPlayer].Integers[0]),MSTPointToBankPoint(TP),false);
354
  if found or (TP.x > 1) then
355
  begin
356
    wait(350+random(150));
357
    LogsSlot := MSTPointToBankPoint(TP);
358
    DebugStr(4,'Found your logs in bank at slot ' + ToStr(LogsSlot));
359
    if withdrawLogs then
360
    begin
361
      Result := Withdraw(LogsSlot.x,LogsSlot.y,0);
362
      debugStr(2,'Withdrawing Logs Success: ' + BoolToStr(Result));
363
      if Result then
364
        exit;
365
    end;
366
  end else if not FindNormalRandoms and LoggedIn then
367
  begin
368
    DebugStr(2,'Failed to withdraw logs!! You either ran out of your specified ' +
369
             'log type, Or did not have your logs visible in the atop of your' +
370
             ' bank.');
371
    Logout;
372
    NextPlayer(False);
373
  end;
374
  FreeDTM(LogDTM);
375
  {$IFDEF SMART}
376
    SMART_ClearCanvasArea(IntToBox(MSX1,MSY1,MSX2,MSY2));
377
  {$ENDIF}
378
end;
379
380
function withdrawLogs:Boolean;
381
var
382
  found : boolean;
383
begin
384
  Result := false;
385
  FixBank;
386
  if not BankScreen then
387
  begin
388
    DebugStr(3,'Attempted to withdraw, but was not in bank screen...');
389
    CloseWindow;
390
    exit;
391
  end;
392
  found := TestBankSlot(GetLogsUptext(Players[CurrentPlayer].Integers[0]),LogsBankSlot,false);
393
  if not found and MenuOpen then
394
    mouseAway;
395
396
  if found then
397
  begin
398
    DebugStr(3,'Remembered logs Bank Slot, withdrawing');
399
    Result := Withdraw(LogsBankSlot.x,LogsBankSlot.y,0)
400
  end else
401
  begin
402
    DebugStr(3,'Did not remember logs Bank Slot, finding and withdrawing');
403
    Result := FindLogs(LogsBankSlot,true);
404
  end;
405
end;
406
407
function SortSpells(planking:Boolean):Boolean;
408
var
409
  I,TempBMP : Integer;
410
  T : LongInt;
411
  TP : TPoint;
412
begin
413
  Result := False;
414
415
  if not LoggedIn then
416
    Exit;
417
418
  if BankScreen then
419
    CloseWindow;
420
  wait(350+random(300));
421
422
  DebugStr(2,'Sorting the spells in your spellbook');
423
  gametab(tab_Magic);
424
425
  MarkTime(T);
426
  while not (GetCurrentTab = tab_Magic)
427
    and (TimeFromMark(T) < (RandomRange(16000,20000))) do
428
    wait(150+random(50));
429
430
  if not (GetCurrentTab = tab_Magic) and not FindNormalRandoms and LoggedIn then
431
  begin
432
    DebugStr(2,'Failed to open magic tab for casting PlankMake');
433
    Logout;
434
    NextPlayer(False);
435
  end;
436
437
  for I := 0 to 2 do
438
  begin
439
    TempBMP := GetMageSortSettingBMP(I,planking);
440
    if FindBitmapIn(TempBMP,TP.x,TP.y,MIX1,MIY1,MIX2,MIY2) then
441
    begin
442
      mouse(TP.x,TP.y,3,3,mouse_Left);
443
      DebugStr(4,'Mage Sort Setting ' + IntToStr(I+1) + ' Switched');
444
      Result := True;
445
    end;
446
    wait(150+random(75));
447
    FreeBitmap(TempBMP);
448
  end;
449
end;
450
451
function LogInSlot(LogDTM,InvSlot:Integer):Boolean;
452
var
453
  x,y : Integer;
454
  box : TBox;
455
begin
456
  if not LoggedIn then
457
    exit;
458
  box := InvBox(InvSlot);
459
  Result := FindDTM(LogDTM,x,y,box.X1,box.Y1,box.X2,box.Y2);
460
end;
461
462
function GetLogArray(LogDTM : Integer) : TBoolArray;
463
var
464
  I : Integer;
465
  InvArr : TBoolArray;
466
  DebugLine : String;
467
begin
468
  if not LoggedIn then
469
    Exit;
470
471
  SetArrayLength(InvArr,28);
472
  DebugStr(3,'Finding which inventory slots contain logs..');
473
  GameTab(tab_Inv);
474
  wait(1000+random(100));
475
  DebugStr(3,'');
476
  DebugStr(3,'Logs Identified in inventory:');
477
  for I := 0 to 27 do
478
  begin
479
    InvArr[I] := LogInSlot(LogDTM,I+1);
480
    if I Mod 4 = 0 then
481
    begin
482
      if length(DebugLine) > 1 then
483
        DebugStr(3,DebugLine + '|');
484
485
      DebugLine := '|';
486
    end;
487
488
    if InvArr[I] then
489
      DebugLine := DebugLine + 'L'
490
    else
491
      DebugLine := DebugLine + ' ';
492
  end;
493
494
  DebugStr(3,DebugLine + '|');
495
496
  Result := InvArr;
497
end;
498
499
function ClickLog(LogSlot : Integer) : Boolean;
500
var
501
  T : LongInt;
502
begin
503
  if not LoggedIn then
504
    exit;
505
506
  DebugStr(5,'Clicking log at inventory slot ' + ToStr(LogSlot));
507
508
  MarkTime(T);
509
510
  while not (GetCurrentTab = tab_Inv) and (TimeFromMark(T) < 4000) do
511
    wait(150+random(50));
512
513
  MouseItem(LogSlot,mouse_Left);
514
515
  MarkTime(T);
516
  if (length(Players[CurrentPlayer].Pin) > 0) then
517
  begin
518
    while not (PinScreen or (GetCurrentTab = tab_Magic)) or (TimeFromMark(T) > 5000+random(1000)) do
519
      wait(150+random(150));
520
521
    if PinScreen then
522
      InPin(Players[CurrentPlayer].Pin);
523
  end;
524
525
  MarkTime(T);
526
  while  (GetCurrentTab = tab_Inv) and (TimeFromMark(T) < 4000) do
527
    wait(150+random(50));
528
529
  Result := GetCurrentTab = tab_Magic;
530
end;
531
532
function ReadyPlankSpell:Boolean;
533
var
534
  PlankMakeDTM : Integer;
535
  T : LongInt;
536
  TP : TPoint;
537
begin
538
  Result := False;
539
540
  if not LoggedIn then
541
    Exit;
542
543
  PlankMakeDTM := DTMFromString('mggAAAHicY2NgYPjEBMGvgPglEP8C4i9AXMDIwFANxKVAnAfEuUCcAcRHpicCdTFiYFYgiQ1jqoRgCAAAGecKRg==');
544
  DebugStr(5,'Selecting the PlankMake spell...');
545
546
  MarkTime(T);
547
  while not (GetCurrentTab = tab_Magic) and (TimeFromMark(T) < 4000) do
548
    wait(150+random(300));
549
550
  if not (GetCurrentTab = tab_Magic) then
551
    begin
552
      DebugStr(2,'Not in magic tab, possible random?');
553
554
      If FindNormalRandoms then
555
        DebugStr(2,'Found randoms')
556
      else
557
        DebugStr(3,'Did not find randoms');
558
559
      GameTab(tab_Magic);
560
    end;
561
562
  if not FindDTM(PlankMakeDTM,TP.x,TP.y,MIX1,MIY1,MIX2,MIY2) then
563
  begin
564
    DebugStr(2,'Failed to find PlankMake spell, attempting to resort spell tab...');
565
566
    SortSpells(true);
567
568
    if not FindDTM(PlankMakeDTM,TP.x,TP.y,MIx1,MIY1,MIX2,MIY2)
569
      and not FindNormalRandoms
570
      and LoggedIn then
571
    begin
572
      DebugStr(3,'Failed find plankmake spell. Either you did not start ' +
573
                 'with runes in your inventory, or you ran out of runes.');
574
575
      Logout;
576
      NextPlayer(False);
577
      exit;
578
    end else
579
      FailCount := Max(0,FailCount-1);
580
581
  end;
582
583
  mouse(TP.x,TP.y,3,3,mouse_Left);
584
  FreeDTM(PlankMakeDTM);
585
586
  Result := True;
587
end;
588
589
procedure antiban;
590
begin
591
  DebugStr(3,'Searching for randoms...');
592
593
  FindNormalRandoms;
594
595
  if FindMod then
596
  begin
597
    DebugStr(1,'Found a mod! Logging out to grab a drink and calm down...');
598
599
    logout;
600
601
    wait(20000+random(5000)); //Make it seem like we had to walk away...
602
603
    SelectWorld(RandomWorld(true,false));
604
    LogInPlayer;
605
  end;
606
607
  DebugStr(4,'Might do antiban...');
608
609
  case random(750) of //TODO maybe raise it?
610
    1..5:     begin
611
                DebugStr(3,'Performing PickUpMouse...');
612
                PickUpMouse;
613
              end;
614
615
    6..30:    begin
616
                DebugStr(3,'Performing RandomRClick...');
617
                RandomRClick;
618
              end;
619
620
    31..175:  begin
621
                DebugStr(3,'Performing HoverSkill...');
622
                HoverSkill(SKILL_MAGIC,false);
623
              end;
624
625
    175..350: begin
626
                DebugStr(3,'Performing SetScreenMouse...');
627
                SetScreenMouse('rand',SRL_ANGLE_HIGH);
628
              end;
629
630
  end;
631
end;
632
633
function hasLogs(var logArr : TBoolArray):Boolean;
634
var
635
  TempDTM,I : Integer;
636
begin
637
  Result := False;
638
639
  if not LoggedIn then
640
    exit;
641
642
  TempDTM := GetLogDTM(Players[CurrentPlayer].Integers[0]);
643
644
  LogArr := GetLogArray(TempDTM);
645
646
  for I := 0 to 27 do
647
    if LogArr[I] then
648
      Result := true;
649
650
  DebugStr(3,'Inventory contains logs: ' + BoolToStr(Result));
651
652
  FreeDTM(TempDTM);
653
end;
654
655
function CheckOutOfMoney : boolean;
656
begin
657
  SetChat('All',CHAT_GAME);   
658
  Result := FindBlackChatMessage('og into pl');
659
660
  if Result then
661
  begin
662
    DebugStr(1,'You Have run out of money!');
663
664
    Logout;
665
    NextPlayer(False);
666
  end;
667
end;
668
669
function PlankLog(Log : Integer) : Boolean;
670
begin
671
  Result := False;
672
  if ReadyPlankSpell then
673
    if ClickLog(Log) then
674
    begin
675
      Result := True;
676
      logsPlanked := logsPlanked + 1;
677
      Prog_PlanksMade := Prog_PlanksMade + 1;
678
    end;
679
680
  if CheckOutOfMoney then
681
    Result := False;
682
end;
683
684
function removeFromIntArray(arr : TIntegerArray; toDelete : Integer) : TIntegerArray;
685
var
686
  newArr: TIntegerArray;
687
  i:Integer;
688
  found : Boolean;
689
begin
690
  SetArrayLength(newArr,length(arr)-1);
691
  for i := 0 to length(newarr)-1 do
692
  begin
693
    if not found then
694
      found := i = toDelete;
695
    if (found) then
696
      newArr[i] := arr[i+1]
697
    else
698
      newArr[i] := arr[i];
699
  end;
700
  result := newArr;
701
end;
702
703
function InvToInvPoint(I : Integer) : TPoint;
704
begin
705
  Result.x := ((I-1) mod 4)+1;
706
  Result.y := ((I-1) div 4)+1;
707
end;
708
709
function InvPointToIndex(Point : TPoint) : Integer;
710
begin
711
  result := (Point.x)+Max(0,(Point.y-1)*4);
712
end;
713
714
function randNearInvSlot(Slot : Integer; slotArr : TIntegerArray) : Integer;
715
var
716
  x,y,SlotCount,i : Integer;
717
  actualSlots : TIntegerArray;
718
  tempPoint,SlotPoint : TPoint;
719
begin
720
  SetArrayLength(actualSlots,8);
721
  SlotPoint := InvToInvPoint(Slot);
722
  writeln(SlotPoint);
723
  for x := -1 to 1 do
724
    for y := -1 to 1 do
725
    begin
726
      if (x = 0) and (y = 0) then
727
        Continue;
728
      TempPoint.x := SlotPoint.x+x;
729
      TempPoint.y := SlotPoint.y+y;
730
      if (TempPoint.x < 1) or (TempPoint.x > 4) then
731
        continue;
732
      if (TempPoint.y < 1) or (TempPoint.y > 7) then
733
        continue;
734
735
      writeln(tempPoint);
736
      writeln(slotArr);
737
      writeln(InvPointToIndex(TempPoint));
738
      if InIntArray(slotArr,InvPointToIndex(TempPoint)) then
739
      begin
740
        actualSlots[slotCount] := InvPointToIndex(TempPoint);
741
        Inc(SlotCount);
742
      end;
743
    end;
744
  SetArrayLength(actualSlots,SlotCount);
745
746
  {$IFDEF SMART}
747
    for I := 0 to SlotCount-1 do
748
    begin
749
      SMART_DrawBoxex(false,InvBox(actualSlots[I]),clYellow);
750
    end;
751
  {$ENDIF}
752
  writeln('-----');
753
  writeln(actualSlots);
754
  writeln(SlotCount);
755
  if SlotCount > 0 then
756
    result := actualSlots[random(SlotCount)]
757
  else
758
    result := slotArr[random(Length(slotArr))];
759
end;
760
761
function logArrToIntArray(LogArr : TBoolArray) : TIntegerArray;
762
var
763
  I,currLength : Integer;
764
  intArr : TIntegerArray;
765
begin
766
  setlength(intArr,Length(LogArr));
767
  for I := 0 to length(LogArr)-1 do
768
  begin
769
    if LogArr[I] then
770
    begin
771
      intArr[currLength] := I+1;
772
      Inc(currLength);
773
    end;
774
  end;
775
  SetLength(intArr,currLength);
776
  Result := intArr;
777
end;
778
779
function makePlanks : Boolean;
780
var
781
  currIndex : Integer;
782
  logArr : TBoolArray;
783
  InvSlots : TIntegerArray;
784
begin
785
  Result := False;
786
  if not LoggedIn then
787
    exit;
788
  if BankScreen or PinScreen then
789
    exit;
790
  DebugStr(3,'Getting logs in inventory...');
791
  if hasLogs(LogArr) then
792
  begin
793
    InvSlots := logArrToIntArray(LogArr);
794
    gametab(tab_Magic);
795
796
    while Length(InvSlots) > 0 do
797
    begin
798
      currIndex := random(Length(InvSlots));
799
      DebugStr(5,'Planking log at slot ' + IntToStr(InvSlots[currIndex]));
800
      if not PlankLog(InvSlots[currIndex]) then
801
        exit;
802
      InvSlots := removeFromIntArray(InvSlots,currIndex);
803
    end;
804
  end;
805
806
807
  {if hasLogs(LogArr) then
808
  begin
809
    Inc(Reps);
810
    GameTab(tab_Magic);
811
    writeln(':99999:' + tostr(InvSlots));
812
    while length(InvSlots) > 0 do
813
    begin
814
      writeln('::' + tostr(InvSlots));
815
      SMART_DrawBoxEx(true,InvBox(currSlot),clBlue);
816
      currSlot := randNearInvSlot(currSlot,InvSlots);
817
      if not PlankLog(currSlot) then
818
        exit;
819
      if CheckOutOfMoney then
820
        exit;
821
        writeln('deleting: ' + inttostr(currslot));
822
        writeln(InvSlots);
823
      InvSlots := removeFromIntArray(InvSlots,CurrSlot-1);
824
        writeln(InvSlots);
825
    end; {}
826
827
end;
828
829
function Bank : Boolean;
830
begin
831
writeln('00000000000000000000000');
832
  Result := False;
833
 // ClickNorth(SRL_ANGLE_HIGH); testing disabled
834
  if not LoggedIn then
835
    Exit;
836
  SetAngle(SRL_ANGLE_HIGH);
837
  DebugStr(2,'Searching for bank, Chest First: ' + BoolToStr(BankWithChest));
838
  if BankWithChest then
839
  begin
840
    if not OpenBankChestEdge(SRL_bank_sw) then
841
    begin
842
      BankWithChest := False;
843
      DebugStr(3,'Failed to find chest');
844
      if not Open_Bank then
845
      begin
846
        BankWithChest := True;
847
        DebugStr(3,'Failed to find chest');
848
        exit;
849
      end;
850
    end;
851
  end else
852
  begin
853
    if not OpenBankChestEdge(SRL_BANK_SW) then
854
    begin
855
    BankWithChest := True;
856
      DebugStr(3,'Failed to find bank chest');
857
      if not Open_Bank then
858
      begin
859
        BankWithChest := False;
860
        DebugStr(3,'Failed to find npcs');
861
        exit;
862
      end;
863
    end;
864
  end;
865
writeln('XXXXXXXXXXXXXXXXXXXXXXX');
866
  DebugStr(3,'Done searching for banks');
867
  wait(350+random(200));
868
  while IsMoving do
869
    wait(50+random(350));
870
  PinAndBankTest;
871
  depositPlanks;
872
  if withdrawLogs then
873
    Result := true;
874
  CloseBank;
875
  //CloseWindow;
876
writeln('00000000000000000000000');
877
end;
878
879
function findLodeSymbol : boolean;
880
var
881
  LodeBMP : Integer;
882
  TP : TPoint;
883
  acc : Extended;
884
begin
885
  LodeBMP := BitmapFromString(9, 8, 'meJxbVJs7KSivxDIYgoDsRbW5QHRl' +
886
        'XtP0Cb2///wGijja2QFJCHtPZxNc5cPHD4GCQBJiApCEGwUUhyCgX' +
887
        'jSp3VvXvzx/AEjCzYFIAQWBJMQuCBtiF0QWKA5BcC1AF0LcA7cdwg' +
888
        'aKAxEAIBhsCQ==');
889
890
891
  FindDeformedBitmapToleranceIn(LodeBMP,TP.x,TP.y,MMX1,MMY1,MMX2,MMY2,6,0,true,acc);
892
893
  DebugStr(4,'Found lodestone symbol with an accuracy of ' + tostr(acc));
894
895
  Result := acc > 0.27; //0.277777... was lowest i got by dropping stuff around the
896
                        // portal on symbol, in case someone tries to make
897
                        // the bot fail...
898
899
  FreeBitmap(LodeBMP);
900
end;
901
902
function InSoulWars : Boolean;
903
begin
904
  SetColorToleranceSpeed(0);
905
  if FindNormalRandoms then //this will detect in soulwars if in heavily
906
    Result := False          //wooded random areas, like the pheasant one
907
  else
908
    Result := CountColorTolerance(1596969,MMX1,MMY1,MMX2,MMY2,10)
909
              +CountColorTolerance(2607331,MMX1,MMY1,MMX2,MMY2,22) > 2000;
910
end;
911
912
function NearBank(Walk : Boolean) : Boolean;
913
var
914
  EdgeBankDTM : String;
915
  EdgeBackupBankDTM,I : Integer;
916
  TP : TPoint;
917
  a : Extended;
918
begin
919
  SymbolAccuracy := 0.22;
920
  Result := False;
921
922
  if not LoggedIn then
923
    Exit;
924
925
  EdgeBankDTM := '80:79:3:1:7:117:75:1:7:89:44:3:7:123:91';
926
  EdgeBackupBankDTM := DTMFromString('mbQAAAHicY2WAAHYgVoFiEFsfKq4IxKpAzArE/36' +
927
                                 'wMKhEiIFxjCEPGOswMjCIMKBioBADExoGAwBZgAWs');
928
  //SWBankDTM :=
929
  DebugStr(3,'Searching for bank...');
930
  If not ObjDTM_Find(EdgeBankDTM,TP.x, TP.y, true) then
931
  begin
932
    DebugStr(3,'Failed to find bank on minimap... trying symbols...');
933
    if not FindSymbol(TP.x,TP.y,'bank') then
934
      if not FindDTMRotatedAlternating(EdgeBackupBankDTM,TP.x,TP.y,
935
               MSX1,MSY1,MSX2,MSY2,Radians(-5),Radians(5),Radians(1),a) then
936
        if not FindNormalRandoms then
937
          exit;
938
  end;
939
  Result := (Walk and (Distance(TP.x,TP.y,MMCX,MMCY) <= 72))
940
              or (Distance(TP.x,TP.y,MMCX,MMCY) <= 16);
941
  if Walk then
942
    Mouse(TP.x,TP.y,3,3,mouse_Left);
943
944
  FreeDTM(EdgeBackupBankDTM);
945
end;
946
947
function WalkLodeToBank : Boolean;
948
var
949
  clicks : Integer;
950
begin
951
  Result := false;
952
953
  if not LoggedIn then
954
    Exit;
955
956
  DebugStr(3,'Walking to bank...');
957
  while (clicks < 8) and not Result do
958
  begin
959
    inc(clicks);
960
    DebugStr(4,'Radial walking once...');
961
    RadialWalkTolerance(5197908,112,85,53,-1,0,50);
962
    FFlag(25);
963
964
    Result := NearBank(True);
965
  end;
966
end;
967
968
function TravelBank : Boolean;
969
var
970
  T : Longint;
971
  HomePort : TPoint;
972
begin
973
  Result := False;
974
  if not LoggedIn then
975
    Exit;
976
977
  ClickNorth(SRL_ANGLE_HIGH);
978
979
  HomePort := Point(571,229);
980
981
  GameTab(tab_Magic);
982
983
  MarkTime(T);
984
985
  while not (GetCurrentTab = tab_Magic)
986
    and (TimeFromMark(T) < RandomRange(5000,6000)) do
987
    wait(RandomRange(150,450));
988
989
  if not (GetCurrentTab = tab_Magic) then
990
    DebugStr(2,'Failed to open magic tab... Attempting to switch again and resort your spell book');
991
992
  SortSpells(false);
993
994
  Mouse(HomePort.x,HomePort.y,4,4,mouse_right);
995
996
  while not MenuOpen and (TimeFromMark(T) < RandomRange(5000,6000)) do
997
    wait(RandomRange(300,500));
998
999
  wait(RandomRange(350,550));
1000
1001
  if not ChooseOption('ele') then
1002
  begin
1003
    DebugStr(2,'Failed to cast home port');
1004
    exit;
1005
  end;
1006
1007
1008
  MarkTime(T);
1009
1010
  while not LodestoneScreen and (timefrommark(T) < RandomRange(5000,6000)) do
1011
    wait(RandomRange(160,1000));
1012
1013
  if not LodestoneTeleport('edgeville') then
1014
  begin
1015
    clickmouse2(mouse_Right);
1016
1017
    MarkTime(T);
1018
    while not MenuOpen and (TimeFromMark(T) < RandomRange(6000,7000)) do
1019
      wait(RandomRange(150,300));
1020
1021
    wait(350+random(150));
1022
1023
    if not ChooseOption('ele') then
1024
    begin
1025
      DebugStr(3,'Failed to right click teleport from lodeStone screen');
1026
      exit;
1027
    end;
1028
  end;
1029
1030
  while not FindLodeSymbol and (TimeFromMark(T) < 20000) do
1031
    wait(RandomRange(300,600));
1032
1033
  wait(RandomRange(5500,6500));
1034
1035
  WalkLodeToBank;
1036
end;
1037
1038
1039
1040
{$IFDEF SMART}
1041
  procedure PaintProggy;
1042
  var
1043
    TPA : TPointArray;
1044
    BMP,w,h,tw,th,I,II : Integer;
1045
    DebugLines : TStringArray;
1046
  begin
1047
    DebugStr(2,'Painting Proggy');
1048
1049
    BMP := BitmapFromString(510, 133, 'meJzsvYdXW0m2PvpPdLuN3c6h' +
1050
        '7baNSSbnnBSQkJCQEEIJlFFEiSQQIueckwETDMbYbme77e6enp65d' +
1051
        '3ryzH2/996f8r6jA0IcsLvvXe/3aL+ltb6lJR3Vqdq1q+rbe9epUz' +
1052
        'Xxu/97IogggvhvYvyH/4vE2Pf/59h3/wsYff9/ACPv/8sP8gr5L5H' +
1053
        'swymPwLt/H42AzP05+4WhILBQf7kHiv5QKR/A8Lf/CoRfnn1hjgQp' +
1054
        'xkE5/3saPlgRSrZH4uNKoGZy8N/A5qOmP1z0Qd1Sb/mwMNQ+ENC4R' +
1055
        '/eEg9cPl3i0AIdk+DXKDyKIIA4jkPPJ8Usw4dt/Dr355+Cbf5DAd1' +
1056
        'wJpEf/QD6Q+PXfP4KBV38LxO71wMz9rBswuv30ss8tftL2lUspmlI' +
1057
        'KpcTuZz/Xr3/nvPeWRP36u65v/qP/5V8GXv6VSECp6QdM1T4XBcj5' +
1058
        'KzVMJcmD5u8XSC/w9oOW6yPt4gdRL1/VDtTuKGYm7yVvJ7+QKQNrT' +
1059
        'QoTWNZub/loH9hHQNfal40U7+0/qThkminG6NgHURBBfFogSWngzb' +
1060
        '+atn6sW/+ubu197eq3BCsuv3Ysv7IvvXKtvOnY+an32c99L/4MeiT' +
1061
        'I8/mfGza+Q7LdlCtv9hK/ROKWrR/wabv7EsAV8guBxReHcSBzH/Ee' +
1062
        '4H8K0e3Zl66nfwJjk+UCEHK3oKOK2C9r+XXbwx9R4gVezeliUwjLC' +
1063
        'ESpWux3X3bu/L7r8R+6v/mP3qd/giSEIfAbpqMoi2CqPSIKjFM+om' +
1064
        'GSKsmK9L78KxQIAwRNBuZ5gAAPkV7fq781bv5ANNDaO2get3d985+' +
1065
        'EwSJt1sF2cd3bbcTa1bcdj/4ADRNKfv7zbu18t+zW0Ue/Pc//Qt67' +
1066
        'e+PevZ2P/7CvELTOngnof/0P9+bv6tYJYfxl+RviI90AF9t3fg/gi' +
1067
        '7/1ARRUt/otAEMM4AsyxGfnkz8GygyBqabZ11uOfRwFEcSnBZKUQP' +
1068
        'vMppli70Kxd54NtJCYw0/DzDc1809bH3zf4aPHnqf/CUIo711jkyk' +
1069
        'DEnNbF7STj7RjWyWt8yzP7K8Bxztvnfumdes7ZN6NMf78Z4xuDG1y' +
1070
        'RPe9/jtBL35jtPKGtC/V048qRx74qNtwCmAbgdMETMCXxaYzHPNZr' +
1071
        'uVcifU8D6i5wLdd5NtiNa3W2cemmUfx+s5r4vrPGdVArLbdOPmwef' +
1072
        'W1Z/1t09ob28Iz6/xT2+Jzwlgcslm7TAXr8PxncBFYiGRCvyd8mPz' +
1073
        '9VrV+43vwdseT/wRjG2efWhZeqCd2XCuvYW6gUmTrurdryEgcID0f' +
1074
        '4+FGskXINlKObRtmHrdt/0jYrCd/RCbIoWp0m9Iu+ukn0HDN/DN8E' +
1075
        'ph/WrPwnKwgTCEYGDeiRrgXKcV964Gonn5iX3jWvv27rkc/QU6idW' +
1076
        'D6ffzfcP/76pmnpDD8ziV+xzKB9iUf7op6VjS+biDsWhZ07qLU91n' +
1077
        'WfQ9/AZXDm5qJHe34NnpX8/139sXn6vEdw+xT/eQOYJh7Kuy6pxx9' +
1078
        'gOsQwLv1vQN+xfJrv5/gVwtpCI59HAURxCeEXXf0u/8Fbz+/biJc2' +
1079
        'Xqebycp0Y+qsW3d6P36xW/cKy9Aj80b3+omd6JUrZRkJIqaphV998' +
1080
        'IVzUf+S+Ik23yaYznLs50vdcRoWnXD63ULT5ruvfTef9fhIyKCVN/' +
1081
        '8o/fFX6yLL5VjD7/kWkPYRgI+qgdOFhk+kv+HEFHp0QytaYfXz3LN' +
1082
        '+PmZD0mGbvXgas3kln5ko2pgTT/1mOtdiFJ5L5XaSTtynme7JW1MN' +
1083
        'vWUtC7oph7rxrehAZIM/aLC/yTJn+L5k1a15eEf9DPfKEa3TfMvtB' +
1084
        'OPQICutffJ5v5sx7B55jFq3br5HhYnRt1KhiEkCurG7HdftD/8kWD' +
1085
        'dJ38EOcPqXRI4/dU5x7MVe2YtM4+b1960IJOt70Dsop5VSq1Nc8+r' +
1086
        'BtfOQHtFhn341CjsXEJ1YO/Ie2G1KfeCh6vHHzQuP/cgzeZ7wjqD/' +
1087
        '1/8GbEGjBetYepDqk7Qdyr6VqA98ieaO/BfCIAWhPzR2vYc54h+ak' +
1088
        'c5tA4YZr9huKeLmmdg5aO1HfHVPbCPquGN2sVvTFMPYSnU4w91E9s' +
1089
        'wEx17aiHMli+WOfahFEQQnxBIagJrwa9WDD+4Lmn8bI8S/aDVTyi6' +
1090
        '5k2DSzXjG67Zh8aJB/rpxydZxsMpTxQZ85zD4va5MLn780P/Honr5' +
1091
        'S555xwyt03er194At+7bfsHkl7q19+ZF15EHDIxKOVLbs2vyZyCiM' +
1092
        'omafu0rGP2isDuFy/N3CfrmJF3zMALhZUJr2r5iO04xTYzGiaqxzY' +
1093
        'bl57BCLY9+B7+NmiHcP5J8j/45JGc4UHkYpp/zmu7m2oZqL//fajc' +
1094
        'c0vWjKJV4LHR+665nbqFx/qxzZA9cxalbq8YuG+9+7J6Ytt97yVYF' +
1095
        '9YBaoG7TjK/v0b0hgkYMufMdu38o4alZ4bJbVHPPYrmTXNPJd2LZz' +
1096
        'mmzxh6SnVuyZsQNehHN3A7BEAM4rcpN2RNqdbB6pknyr5l6xhRBEw' +
1097
        '/0Tq+KiP2gRE8XWz+kKrjdR3i9tnTbMOR3YAsJfD7zYp61eiWvP+e' +
1098
        'dvIxyr2t8ISwTTG6Trj9HM+srPuurGcJ5iDLMWKASLARE9vGyW3L7' +
1099
        'GOYLYgEQ3zsQymIID4V+B3+kff/Vbv6bZp1IFbfBZ//EGE2C5vHpM' +
1100
        '2DqvZxQ9+Cqn+5om+NHLlg4CuiultyT1iVF/HC7coWbstsqXv0tqz' +
1101
        'xVzL/lVKbsHFQ3jSg7Zq2jNyrndsBvWAgtz380TD9RD7ygMzniyIj' +
1102
        'nEBwQqKpF8SIQv8nzK9wl9b1CRr6b0sb/OJlWPuE7iFB02hh7Rhc0' +
1103
        '1/M5FRRdWX3gnV0DUbQvfwcnAznkyD/N/8YefdvytokUrcIXuAhV4' +
1104
        '5ug8rClV6Yj8+IwMfkWHkj6VqAVa3qWazsWQwpqg5UGq1hQj2wYpu' +
1105
        '4j4JgExFwmaZ2LgkcB9LUj+P26t5509BSzdi6dmitrGuFonlQZVnL' +
1106
        'VAhTd2SLlHUtSzrmdL2EDMrRB5Q0uslHFd4JVdu4vnfOMrrqmt1Ba' +
1107
        'Na0/hZBX2bN0EeaOE7bznePnD5Yo48Aye6o2+RD908VW05zrFAOLp' +
1108
        'J+SLy+2zL/3LrwQty3UeSZy3WNintXIxRNvLYFxeC6YXwTykFUcuy' +
1109
        'jKYggPhX4HX74q3CoQljGI8fpFyyDov9eia1dWNMia+yVtk1l2z44' +
1110
        '6tPN3WxHd6K+nZLgFNt0jmc/7KvfqWxmW7w8Y2NFXZe6fQLkDwcY7' +
1111
        'rR98Tm8yjMl1PTwRU992NX8BeaXu4uMTSxzS6JuX7xUQxe3to/XMv' +
1112
        '05Xf9L7KQ/ydCdKdKVN48o28YM/Yv2yU142q2b77uf/LH/5V+G3/4' +
1113
        'z0O3Hl/7X/2jc/AG0D59f2LOKaCWwIvBg2Z4Zfuu8avh+WctkCFN/' +
1114
        'gNXrxqBqTecUrC3U4pja0o1sXAqIVsg05c2jssa+qpYRpKzsnhd2L' +
1115
        'lGZf/oRr37wJENLcbM/ZxqAK2W1qpFNUeNgedNI5fAm5V7txEO+q6' +
1116
        'fM5kW7o3XMwysgf9PUQ8XwZmBddrNlGvaZX+Nl27tPf8DcfAgXBE7' +
1117
        'Yd/9PwqmQNfM7V6TDDy6UOmD9YQvQi+CcAJKBDXHHvKprFg1hHlo+' +
1118
        '9tEURBCfCvaZ/+0/ncuvP8T8AN87R9PW0RWmEmOjwD1yU1L/oZRpx' +
1119
        's4CvZvXPJ5h6s4wE8i09ObXjrO9i4qRbX7XvQNcQdcza4fyK2sKpX' +
1120
        'puda2kvlvXPWObvO9a+EYztpXtOGBf7mjaYwJogYKzPNvXUvfHiSV' +
1121
        'R25pXWVOgdrHcE5/t8Xy4rJFbOxCj8n72S8z/VZmzpGGo2NFdYm4W' +
1122
        'OdoqPUPgZBAy3GAEKb3PDrj9wMCbf1rvvrQsvFCO75T1rPE6lkH1/' +
1123
        'txOsgi3Fgwm7F4VdSyU1A2c55oDybOwblRQ31/ubJe7+8G64DdEW4' +
1124
        'nVnQh8wqu8ZGhWUDvCc3bxTO4yWwu0V9EyIey4e8hv32HVdJyka1D' +
1125
        'BI40mxzNbbO/i2jrl/WuUezVjD5gGN1Np4RnqYZo1HZPGoZWqgdV4' +
1126
        'fVdgyqvl9czmObp7JsTnqwOxqhaa0QPmD9QqmvskTQN8yMhmwhS2z' +
1127
        'PvNPai+rHcdrr514blj5W2KZYC8Dv8BZZV2rZR4poX1/RBM5u479t' +
1128
        'EURBCfCkjmH3n/X6Asx/KrENbRs7JASnVHltSYXlLB0NXJ+1ZOMD5' +
1129
        'IkmmG9tQybRJPkVamSS/XZ8nMDEsbXEcwQ7ZzNFTu8acEjTOcA5ky' +
1130
        'SzyNl84pp8sNAmszfFf4b9Vj95UjDxjNc/ukwah2LL8+wTxQln76K' +
1131
        'Rxa3fgWYJp+FKPrDPw3ydRrmNrRjm0BujEiTXnbTJpQnSmulnXfPb' +
1132
        'dHL6HyZv3Uo3MHgwtQU75jSDm0YZh6pBndKutYyLEPXhI4wJ9fMlR' +
1133
        '0XR1LbRfZW5VeQloEKd7777q/+Y+BV3/zP+oF3Ju/U449ZHrmQthU' +
1134
        'vj3BNIRVeWnuGfvKO93EQ4axhVHtDqFrA/Vf4BxGeMLWOPhmd0VtJ' +
1135
        '8qSd87B+hxI40IaDywyW21DMmHDgKB9kcr849s0g+ckXQ0SBpfGV/' +
1136
        'dQ+P+auE7Rt8wwe6W995Dmiqg2rWZI1LvuXH1nnH6UV2XLKpWjdXj' +
1137
        'GBnj+lZ2ziqGNQHWFV3r4bQv81lnoCqpm1o8lar351u4cles0UxvI' +
1138
        '/Cdp6hylM0thk3YuqEc2I5StFLWEypt0Ezt++5hs6ks2dIm6lkrqB' +
1139
        '2UDa36xEW6cKrZATqiuyNhcpLQWax3HPpqCCOJTgX8ievD13+1LLz' +
1140
        '/C/FdLrZmKmrjCktzKmpKWmY+E8Kn69pgi0bXI+NDknESuNFthozn' +
1141
        '6Txfv+rf+ZBFVLcKWySSB6kZ8elhSVnwhJ7esiqt3wXnT9S6AiBKr' +
1142
        'D3iV8bp2+Nuk4+q/KO27ly61xBaVo8S0CtNVviXw3ziVJ6W8Oooui' +
1143
        'KYLkSCuWBJfXHEnhxlHK8lX12ZbukCGwGWepXrqEcULvaP00E3edL' +
1144
        'E+RaBMKVUm86vAV7Keu8mm3hC6Jl9pL5DoEKRI63v0vXPOmW3P2pu' +
1145
        'uRz/tT/j43kFo3PyB3TIHwNv/4tDcyGe+FS8FDVNcz3SuypWjqAk5' +
1146
        'WLt852ChxpVXrmZWmvgmYjaswjtxiV9z0DoM0TS1OWVVBRUalqoG/' +
1147
        'n9p+wJ1xmZsK09dd5KmIjM/xTbLR7YDgwuA1zLLtLTL+lYpgQ9sH8' +
1148
        'x3Ar0kiy8rUlqEjtZy71SMps1fBEy5ZuR+kaUtR2HNlBizq+yZCls' +
1149
        'ivyqWWRbPkWRUt8bqOi4JXXDjT7FNIXR1fLHk67i0aFppusQs6rxL' +
1150
        'Ke6a0Janc4vbZlPNvVmWHnH7bL6ukekakPetOu99i8iCTBat7Shsm' +
1151
        'OJ3rkB1KDeNU55ZIjn20RREEJ8Kdpn/3b/B/La7+8x/mKY+p+tKm8' +
1152
        'YTMJbF+mR9+0cmRmjOwcgC3oUbYXdofKFnMkHjxb2BCb5gmUo6lq3' +
1153
        'zT9Nl1ssRCUj5dXRSdBY9kydla+ziup6K9llR13IgfZ0oMpR3LoCK' +
1154
        'ScfVfx0Xowr4Z766eebqDXy5wjMF/htb5Q7P456+ch3/opSr4TE34' +
1155
        '1Ij0nLj8lhp3Io8BTHtA+QrHTSj52yxIfDea+W14o65NIkpjl0Ryx' +
1156
        'JH0wWhaflp4mo4qykaT5bEkC2sBNOWO9s0nVO2yftN91527Py+78W' +
1157
        'fiTcR9t4w7X3517q1d7rJndLO5S+5NTH6LsrcOPjQNP9CPbJRZO+B' +
1158
        'iaTULs8+kC0zpxaLYBNZSquwxlPeNEJhflgHmCFQH9xymlTPqWkrb' +
1159
        'ZsPTACGB/NnVzn8yjnJMsmGH3Da7vqJFLglc9sWnhnnX1Bas2pwLY' +
1160
        'lfeSeLlswshXEpsbVT8r9YYmHVdGQJlalCVaa8hl03VN46DYOL1g/' +
1161
        'PoOeo61KqOy+X1ZIVP1mojGaUXQ6PjcjlII2oY4HSkW6LXbDRiXwl' +
1162
        'x9WPBITaU/PQCoy60abtnxCtQGNw9WEuLYuv1BOPJJ1ziC4j0/OjM' +
1163
        'guPfTQFEcSnAj/zD7z6m23xhZ/5QVN5dRPZzjF8+smK5hyI58owuq' +
1164
        '+W1nyE+Qvs/WE5bJBtNEMYJW84nBIEyOtcrp55KumYjWFLLoZGfRU' +
1165
        'RF5VRkM4Vg0vL6vu149s3ZQdm7NPNvQxTS7bcGrLnuO4yf8dCWG7x' +
1166
        'qQtXTl28GpFf4ie3a+J6uIV5NX3heRz8debK1xdvhF+LikdwEZPLT' +
1167
        'CkSwIOFLw2/PV+izRWpClTOKEUjRVTi9V6FO8/WJ2qfF7dNp4j0sA' +
1168
        'KJXHkyT5HA4MNOwRUvs3lV7eM14xvulRcdD3/se/6zn/mJHTDe/rP' +
1169
        '3+c/WhWfivjVB53K6bTAw/0tCZ1x1D6d5KlVsAE8m8ioptcuz96eX' +
1170
        '6+ILudAMWJ1nqBc2Dl7iWQ8wv2MwR25JYvLTYCBESra5hd+6y8znf' +
1171
        'A8+otTturGtDHlNoqbFn7l16U3bN3+K1XcHyqOefGxf+ZbSWJUDa4' +
1172
        'iVbidlxuWzc0SqYkd3hqXvwAx/qQ3WM6NciwguUdt6Weg0zD7Tjj4' +
1173
        'QNI+BuvOt3fqpb5yr78lFU4g7UkTViQI1rEPVwBriPkpxGcZONNn5' +
1174
        'mxGh6bSrEfFXbt9B34gtEsEZYLhnmrZ+J+1Z0Y0/MEzulHXfk/Usp' +
1175
        'oh0NxIy0LLXoxOPfTQFEcSngg8xP3wqtnex4+nPot71W3IPucQuut' +
1176
        'KdrXIJW6YoPvypvYd6JFJ03tCsotOXvoqmC78W2j5iI8IUHm79cHy' +
1177
        'J4npsKtw28FuR2l7qHq4afZDlGIFrt5t/sVnSfTdbakwr04QUKinM' +
1178
        'fzubHXL+8unL16IKqT5/nM/nB+2fvx4Khz80IT0mh5HKLoMLzZAb2' +
1179
        'WobR+fkaB1wp5n6huLGMUq9CCA3H85wrUn6tpLGkQypGU5mAp2XWS' +
1180
        'JhKMD8Laq2sZqxdfcy8Z7pLvP7XunFJ77jCqKbktZ5ae9KkqHrjqb' +
1181
        '9sz3bGqPt0I49KHL0hucUwzDFssoptcu19aUK1ZAZpiq/XA1pBXX9' +
1182
        'VOa3D2ZJjXGFHPjk2aXyImOzn/n90IxuIrwKzDzJ1KMa3lSO7QQmu' +
1183
        '6PpcK69pzJ//z146TdikmPy2IW6Rmb9aEH95AGjbOopqG7KVbnEXX' +
1184
        'fTa4ZKu1dvyJpQUIS0DuaGUiNoGG4/QKj6UMc4xTLwGkdupdPQec5' +
1185
        'du3npVsS1yDiEaZEZhZkyC7dxjOedLTR6kgVEcFFo70VvvJGQefFm' +
1186
        'BIDExz6aggjiU8GHmJ8Y8mM7jVs/JlsGvt57t+tLjsUy9418aDNwt' +
1187
        'N5WeM6XOgKvJGu9tzKYBPMzhDfK7B9fMHOKZSyuH04p00XnFKVzyl' +
1188
        'nGpqqh9QsHXyjIdw7RjZ54Gi8JXvEh5ofPD9o/+xURYlzhmQ8wv7I' +
1189
        'pilYKUr0SFn0zPi06m5HGLssXa9gae6nZXe5sq6jtFLs6wN4lJnex' +
1190
        'vSuzpu9j0tL1Jxj6dGOXuG0GLm6Gj/mFNR5l66h1dK3Rx/z+5T2Bz' +
1191
        'G9ffF41fF/Ws5TrGJINb4MeCe419wva5uEVh2UVXbgVef7r20cyf0' +
1192
        'qpMiqzMJFeAmtFiF3Xd5j5MysMsfnsJAYPgQzT4D6C+Ufup0nMJwM' +
1193
        'yP83QZFU5YMop9VVNPqHUWtG/ApMKxzuJJ5d134VLH3LQ0J9gGtSj' +
1194
        'W6bpxyVti/AQTuw9PgiT1IKfz7OrqSoljekh9cIW5Fs6Y9jSs9dvf' +
1195
        '3n5OsgcnjxijTtZtPiC4mS2qEDbkGXtlXQtpAqIxy5FdSPlbdOQDe' +
1196
        '0L7cG4H/toCiKITwUfYv6wKm9Jx7J+9lmuazxweBrmXlTPPQ+8wm5' +
1197
        'ZCGT+CFWrpGvRz/yhYidBmMzqSyXmr0qtF7lmil99osh4S+ZGLJ/M' +
1198
        'r0wtFsFlzbUPBhLXeZ5N3rucVWGITMtL4EgPM39Efgn8QxBFHFt8i' +
1199
        'PmbY4pEVyNib8SmRGUUEJ6zWMPVu8TO9krPkLp9Qts1remcAnXLGn' +
1200
        'tLXd2VA6vs5ulzXCuVlJiGkyzT7nYTfDvIP09dlymoROAgsDYrvSO' +
1201
        'W0dWGpWdt2z8cYP73/0Uw/4s/e7e+t8w8Ug2sVA1uqMceSAYI06ka' +
1202
        'fyRqnY7M5567dgusdSk0Mr5YQpntAfOD4iB5Io2bI1CwVDX82l4K8' +
1203
        '+fZBzIqqmNyi5AGYQiz2s3zzh3N/AUBzE9TJZSqimsHTxxsjiRzH5' +
1204
        'X5+1YQN127k5Qps3Kap09zqMoJr/IymmdD5Z5LQlfg9dsVrowjmf8' +
1205
        'oQOc0ey9o/8trt9BzwOSg/fCUnLh8Now1Ypk8kYqurS3vmKe5hmEC' +
1206
        'MiUmSc+yoHU2rrjiyu07aP0LN8KOfTQFEcSngg8x/y25BzF71dhOq' +
1207
        'MITOEJFfRs1y28Dr1iX3lB8/sq+FYL5iekXXq65Q9S5CF8xX11HrP' +
1208
        'BU2Mpap8k1+V+wTJeEzstlxJQOxz2RIlQlFwkY+sYvWQfe+ixunim' +
1209
        'ydWVKjIk8RbrUcrLwADdKe1dSRPoIUFN0ciJXdoVHXdsTz5GC9sEh' +
1210
        '8YUckCfxBNnZrmobMw7crRlbt03et01sWEbuabvnJC1jgoZ+rqsXh' +
1211
        'oZZPxYmrf/8AytXTxeb+M0TOTJzoVTPNzUqmgfNQ8v1i8Smc71P/z' +
1212
        'T4+u9+5h9++8/+l3/pevRT8+rrmslNeceMoGlUNbIFIXVjDzJklq/' +
1213
        'j0i7fjkJIcj06MZmY51cf4fNnFCQUcrNK5UVKC9/VQ3nCizQZYn1M' +
1214
        'LhNpMkoqoECuZ/bAE166DkFKitgQyPynaMrw/JJYjjxe7Qks8dSh1' +
1215
        'afy3pWwHDY0LO2cP8Pdf8EZzXeKbbpe0eCfv6LEAlHy+gyZ9TDzR6' +
1216
        'raD6uU1zKbLrNeuH0n5PxlhG9Xw2Pg7cPVz+RJabJqtFpJdR3iMrR' +
1217
        'OTk0/GohW3STrXiywDyTxK2/EJCMkAf8f+2gKIohPBR9i/hM+L1fU' +
1218
        'u05vmg0coZLBLcPCS//Pi3y7df4p3PLANHTnYFgeNyyrKIYpwsBML' +
1219
        '9dlinXJrLK4guKY/OIMiamiY/6a+MDeC3TXECgugcalaVwhvldNL5' +
1220
        'Q6EHcQ+8bMPhV2LIra53me6dLWOUrIkGodyDR3Mx29MQwhTMOVQ6s' +
1221
        '6cREcEp1FT2WXgUNIF900tOSc2YaX7l554V5+DtLWDa8pBtbErVMi' +
1222
        'V1exxQsx8rX15W2zrIaxOE3LqUM7FKUbO7Nl5hyRkqNzSht6Df2Lt' +
1223
        'XM7lCX95JvR+Nnz9D9bN9/XLzwxDt6taB5VDW98UWSU9KykibSQ7W' +
1224
        'Z8WmhCekRaLgg8hLq2pz9FQDA/zBYxk1Nl5jm7rpTaAok9w9wDkxq' +
1225
        'dzQBPEu9E6OpZjROBCb5k6tIqDDEsceBsD6zA7Wz2zbRCbv3QicNP' +
1226
        'NwIg611GVJUkUGdbegNlI7b1C1gXeuGg9QcipHUINM6z9ZR5ftXIJ' +
1227
        'roZJfFlgVPombiZXgiH4eKNcBjrmBwGYcgUJvJdBrm7HxC5h8RdS4' +
1228
        'yGcbati2H2ple3pYt04am50GHwCW8QQfx6fGSeHyjrXTcG8DyQaOy' +
1229
        '9VtHg/5mk9WZW2il+XbLWm8BXMu09xXVD6RJTbAEHlJ7M5CfSS+Ly' +
1230
        'WLE0Xr6uMVJxYOlOsrYVFA3HNa+SWNNOfVlg7zHr0fMGdH2BYyCuW' +
1231
        'JLMr7zKt1KYHxfJZZzwHlmqGnCIrnvGMbVF7rfTtv0DgC+GyW3t5K' +
1232
        'Oq4U2Rd5Lv6mYorZmCyrQyTTK/Kq3CWOaduix0BhYaJqkDUWeUSMD' +
1233
        'G5c42Xde0Y/oBsaT/8R8GXv7Vf76Af6q/Y+f3TauvUK66c1rgHr1e' +
1234
        '7ippmc1RWGPz2SBtVDyRxs2tpK7nB/OnCtVRmYWE91siYciNJfbOr' +
1235
        '8tdgfrJtPTmKB0xUGxuURq3AnxImS47U6SLK664QxcEMv/XwprwPO' +
1236
        '7Zr8PieVUJAWt+jmT+eL5S0Dz+kc3ZjkS0ogGBBpg/0EBAhiylM98' +
1237
        '+cLjETHNXfEnlhVAiAgpLzkaHKZBoyXfHNB2Thr4FmFdN92x563SG' +
1238
        'pRfWk+3ozjS250KHeazItDzY0GMfTUEE8ang48zP71iqWXh+eN7bD' +
1239
        '07jGGjhPPvAOo0sU2eSUHtL5LgqcsFtzlU6M8X61OLyZGYpPP+cKn' +
1240
        't5+1xR84FQIs3QnsCVRabnZ8tMFPb7NaA5B4n1lkf5/P7ZkhyBAv6' +
1241
        '5zN1nHFyqW3jccv9d5yNiw2Gg69FPlllig2JO62JR0zScUq6zF24/' +
1242
        'ZL6TRYvKZeVq6lONBxZA3hA5UoWa5CIB2KnU7Fa2jtaMb/iX9BM79' +
1243
        'u8t6SfdfpTSuvVdw92nltFVSetkvK6twDUC/zyDJ00rFqVzxdmlco' +
1244
        'a+gfIOL7NhPEflggHKrKiGTWToGzmu3sjK5gPWuWcN+sxW2NJFWsQ' +
1245
        'plf33Lh+cbz/L0kE5FOa/zDVFFfDPfnUjLIfNaxz9yBvZysF1GPc0' +
1246
        'Q8d/t1GiZPXJIj36xkXBfjhwsqAqoVQlapm4JaPus/FFkYHnHo3nV' +
1247
        'd6IS9td4qu0ip3toH3z8AqMJsI02+T9qp7FYs+stH+NVz+Ya+ku1L' +
1248
        'iSWUJYdtxy7KMpiCA+FXyc+Zn1Y/l6N2Uq2I+QIoOgaTSmWEph/hR' +
1249
        'da1KZLlxSi4vnSmpY7glZ990CXSN8WnxW9q0oRh58ybUGuoIc90R8' +
1250
        'sQSeXkZF9f+E+V1DxOs/XBnJ/ORU1alic5K2lZgtIdfGiJQ8Q32lZ' +
1251
        'wjc27j8HK4+ubU+0PvsZxg4zcTjHNd4lLr9uri+tGOxanCNZmjOqj' +
1252
        'BkVxKm6pLgwHKjOwo3oom4gmIYFK7epWgaMA8tNyw921/YSR7U5Xs' +
1253
        '/mnzOC/vSsvFt7fwjcFdh7WiyoZNT006XGwslOppUz6w0FVu95EzX' +
1254
        'FVFdmm9LUtvKW8XAmrRnWdq7LOu7p+hfrRq+H7hDBXQIgTneeZ53t' +
1255
        'qLzLr91NlTeTFHOV6VW35towsCH46foKly5eDPiSmR8Snl1ovaDex' +
1256
        'Y57n1bNbRO2TTjM9+GD4na1gS1J0HlSdR4I1Xe/Y7hm/C/JbLDATj' +
1257
        'POtA3wPxhedxoVgW3fviLQ3lGqlrFbdOxRaKYHEZWqZyw1I29xM5I' +
1258
        '0w9gNN0rL6Bh/cgGTHO+awRhSKGjn2lwZ5bKESAgbjr20RREEJ8KP' +
1259
        's78NNdwpryG1TB2JC1EyuqjGKIb6QwK8ydrvUki3f5Kfrr+PN+WpG' +
1260
        '/Ptw/m2AauB0wWkTjDtYpbp2MYwtCEdDiuN0XOI4vzkTmxf68PllP' +
1261
        's/aNVGK6haEYZbMfhJ7xgfvjtSQxefrmab2pUekdqxtZ3nXPfpvqD' +
1262
        'b/4x8PKvtrsvq8YeBm5lCZsVo/Ik69rwSW49EQhm3UgiVx6dTcxFs' +
1263
        '1Q10voeQ/9i/cKT3Ye8b/7hZ35yzoc4ZebZzx0Pf2xefa0dXhf1rF' +
1264
        'wvdwncIzxLM7e6FraDZ2zgu3rIjZT9u9MQk+eBM110PWXLhX18eDY' +
1265
        'M7npsUTn0E8j8ITQVzMHViNhrkcR7UqWeicPPMkg0bP6YYOhBueBz' +
1266
        '2OvzPPsloTNG085vGk8UqMPzOKHZ7AS+khOwAx6Jm2W2xKOYPzSrK' +
1267
        'OTy17Fcebal57DAHPdkhtQcV1iCIIg0qYjRaud2mlZfIUzzrL+tXf' +
1268
        'wGcU2ufbC8fTbPPsC2ePPK1Yib4gs5xz6aggjiU8HHmb/QNZwhswg' +
1269
        '9k0fOBhTY+64l515Pzqcyv86bXF59gbKo48PURKsdhtt5Iz79Znxa' +
1270
        'SmkVp2GkxDvLaZ4GipuIPW3KOhZYDeMwQJymycAnvFmOEcvCS0X/P' +
1271
        'b57NCKPG8euoK7q9DF/dBad3HmAnJaxTWyARjof/Z48SwsOOepuX3' +
1272
        'oVyPwfl/mmtFHcPhPHKo/KKEhjlzGrzGJXR3XfPPz51s33B5jft2N' +
1273
        'n4KNexBqmqYfqsQcnGNUV3csi95DI0Sqyt4qd7cLGwQ9tof8/xpcc' +
1274
        'i7Bl8g6NH8OkMn88R3ozLvVWfFpkJi27yp5h7j6ydRQj2+SeooGIh' +
1275
        'Z9fqj53Izzk/OWT5y7dzmYXN44fZv4EgeYw8yMxbrmVThN5JxFeUX' +
1276
        'KGk0Duqrfr8/tm56BYj+/UsLYH3yNu0o9uMhomalffZVr7S+ydhbL' +
1277
        'qTJ4UYd2xj6YggvhU8HHmL3AOJfGrkoSa2xW1lHENBi6pH7oan3Uz' +
1278
        'jUad7dG3pooNCR+YI6Ig1dxf0T4bTSu9ficBPn9sfnG21JCvchRqi' +
1279
        'B11citrMisMqUJ1YokirrgiTWIKXNUZo+usHFxPEmjCsoouh8fEss' +
1280
        'qP8PmFKuIdWJawUKITWJtV7eO2yfv+R7Hk+a3w/F333iiGt058yKM' +
1281
        'OwCWBHVyaLNSEJmXvMn+lKZD5Qe8U5ifnfMgVnt1P/ti0/lY1tHG1' +
1282
        'zAniKm+dljYPgt+A8ubRX8P8X3JrBN2rV0RUzjwMhCqsOuItuWsxy' +
1283
        'TFM0ZmAbTNP0lTJ/MrwlJzI9HxiFU25tqJj/mzJEQ90/G9SB0LQOh' +
1284
        'Oexz118eqpC1dOX/oqIr/kSJ//qNkeJbGT0uVrF0OjEnhV3IaRw0t' +
1285
        'n0wyduSpXlqCSrbZJ6ruhWNfsQ/IsMARN4H/j5Lagc8m1/n2cppVf' +
1286
        '28uoMucIFClFgmMfTUEE8angF3x+5xD4IbaoPO/Qy61fC2piiqUhl' +
1287
        '64jeKes3EvRt6WIDWUtkwWOwQ/NIZC8hPwlnXPk1ivEqvvU3PiC4j' +
1288
        'SumNhIx7ejTrawMo1THl/IvZNFC0vOBv9f4hzYV03asxxRwDt3PdT' +
1289
        '3JpckUtZAYf60Mk1sPjutWESXG8psLZqOScfU1v4inLc+5n/zj45H' +
1290
        'f9BP7Uj618IrPUdy75dc6xfM6qhKt8AzAdr/Oi6NfCmYnO0BQRn6F' +
1291
        '+sWHh+Y7Qk4n2V3W7w3/+h7/jPCDdP0Tryu8zTHAudf1jZV5R1Rek' +
1292
        'cqvBPhv+IIy0hVm235tX7iQYzKc8R2Ez5cFdWmm7pgoaDb63GpVyN' +
1293
        'ioZzU6o4A5ldDM5A/Lp+dzORn8KQ0QzOj4YDffvhoNhK3pI0wWKFZ' +
1294
        'zDNXvibfoUMPKfFMUXrIjTIbQj+KV3CyUBlVyL9wI+xSaCSivHSJK' +
1295
        'd1EjTVgC/ieyUJ9I1NpLXe2abum7ZObTfdeEsy/8/v27d+ZZh5pJh' +
1296
        '4VeeYS9R2Chn6W2p4nUqGJj300BRHEp4LAvTpdK2/OFPsO6Wbq4Xy' +
1297
        'epGszje0ppVXxLDGnbijEt93KLgqUiVX1GPtfXr4ensO+yFQH/huv' +
1298
        'qI9jV8QwhHDRRa3T4P9wad2lElOYpC5J25pr6wchM2qHy9tmM2XWe' +
1299
        'HZFaHLOzbhU+J8xucxUdhlGMbxotsYOMKvMBRItAn9cTyjkpgnVpw' +
1300
        'uJbc3gspJllTQMRxaUXLl951pUfAJHcoVTHeLbeJlEtKw2Q6RNYvL' +
1301
        'JHYbJ5ZfOme2WjW/hexML78H83/6LJGTP/ffGyYfy3iVhx0Kqoeuq' +
1302
        'wEbu2wx2vcK3FjoHJR1zaRXGGGYZKOtGTDIEhkjEztLVtbtPeO8+J' +
1303
        'V/j3X3CG3gm48E5H9vCs3zXCFRNrxut7JrXdBIHb8nap2+IHNA8oX' +
1304
        'yG9iRdQ9SCpvZX9qSv4jTXsKhtNkNmAW1yGkbSjZ23yh1nWbqTNOW' +
1305
        'XDM01QU2yvo1VOwRRY5mim4mZCKYgLZRzlq4Moe1q5lKxPlOsS2Tw' +
1306
        'oFgoJ79czdDVy3uWUw2diZrWOE3LbbEzUlaPQq/wTImallM01S7oq' +
1307
        'nxrVzxM8O0YcD75fnQSV0Z39BKZ09RoHTQBPm/wjUll2ssszWn8pB' +
1308
        'NViKl0s1wDZHyHFocpT+FXittmr/Ktu9Xcw02Ro7R5nKGrI7ZFah+' +
1309
        'vGVtvXH5Onv8O2Oaf6qceXSq1FUIV7iGuvo4m1WfypMc+moII4lNB' +
1310
        '4P78HTs/Wee+0Q2vy7vmy9xDHGtrgcqRVCQkdgbgShN5ikSuLJ4jj' +
1311
        'Ssmdi2+Q+Nfi04i9j1OyIgvrkgpVaYK1alCDT6JXXMzCsOSsiIzac' +
1312
        'm757PoiNXve8DPNJEW0URUFh3DH4hMzyd2TvbRPrFHgdldZvOKHG3' +
1313
        'CGg/P2AATwJAbwU45Zco8hTVHbsmsMCCHFIESRd9OyQlNSEe8EFvA' +
1314
        'yRRX51bW5CvtQF5lDbHJG7cCbnlBBbFpA/HKVd8C5ZUrgFx7A0pxr' +
1315
        '7ywjG3IO6bhSXKcPYq+Fc3olqRrIbvKjgr6ysol58ZRHARO54rJTd' +
1316
        'vU7RPE44OAVZ1HHMXuX+fz/OfWrR+ss4/1o5vaoVXD0DKk0vfOqbt' +
1317
        'mUDQ8fyi/xNHFNLhRi4yKalTTp3w5AXzhKSBJWGoeLGYss4zcRBpe' +
1318
        'Nz7xnTiDAG3EKiftKQKT20mZkWl5cYVcQjmKPeUorJmlCnB+rkhJk' +
1319
        '1VD5xx9HaemlWVuYegboDo0UxK/EhlG04Xw0iMLeEBUAR/fI/K4X9' +
1320
        '1JJDmftNfJbFGuwkJkW2XLkZlxL7oBIWRaQQyjzHcsAiFVAvoPWxy' +
1321
        'eXgDtEa+eFXJSOeIcuRlNRrSpxJherkezontkSY15ihp6lXl/c4y7' +
1322
        'T9FqUC+xROr+d+bpHe3welX3gqx5CGlg1lGRYx9NQQTxqSDwTC44q' +
1323
        '61b39UvfmMaWlZ4hkrNTXS5Ef52SpEggcaNzWfDBGDA3smigagj0n' +
1324
        'IxfvElOoseV1AM7zGZJSRQJMB3DOr4gmIAN+InvO4kZik+8R1X4go' +
1325
        '5ZG4xOQwgzrfbGMHPEi1H6yCPfMV4V7WN4RPutKS+W2RvhTkAexcp' +
1326
        'rYWy6hyRMr2kAmXFF3LBwCgIOaRzyrOFlfkVmkKpvkCiyxNrkAyEg' +
1327
        'GyJzZ9tLVUtI5aRe4Rn/uB7ck6GeOXq3b/9eyx41t+6Zh9W985LG3' +
1328
        'tLTG5mdWOB2pUtNcTTeP5ag0VRZVQQtF8o0cEwyd395Du8LTAoZCj' +
1329
        'x7b/857AH6nnX7X/5V3J5PwyNa27HNnkfUpmGlowDdwn+75iUNw1A' +
1330
        'CcQkRrkaPjl0RZSelofSSQEAKB+sC6MJYg9NzCCB7zC4uEj862+dP' +
1331
        'BahHK44p6wqX6KF9kjAT4Y9ZSmtiFlAngiIRI5WgdXD0bnwbwZPCt' +
1332
        '1GZRQgW4QM8NIRVZGbIYPwyZeOCc73xVMwrHSFiam04BNFEMssWUL' +
1333
        '0CpQelVmITPCJKpDvrJHNjcbKEVYW7MmDVssWKNK4YrIXkTN+kA16' +
1334
        'ULaOgvnRLb2+VzC6Hv8B/I+oDVcsI6uajsmK2s6S6jqY4GMfTUEE8' +
1335
        'akg8Bxe0u9tWn1ln9zUdc/AQ+abGuFNFRA72CtzBIrsUjmGOSg6rV' +
1336
        'gE/xzA+CX8Rt+BUGASGkG5WjjnuIL0BISV+E78FFbiJ+wIonLkgBu' +
1337
        'JTHwvMZGzDcTWBMYG8sxBEKB5aBnjnaTE6r55bdc0GIC0AmADnqEe' +
1338
        'ZA5nlSyLoPcKDcY+ogPwGP4FFXB0TnLKCPYCsYPM3afvmSVmjFdf7' +
1339
        'R+h8u7fxLNX/x4LvpetrKNr8OHFrg6SAwlGKhYR7yDDivleRsZP1A' +
1340
        'W0CYGl9T3kwcGg8f29On2Pd/20T+p5f2Jtb7YfVOZefg6T4ZjaQsi' +
1341
        'AclFf8L+mcwrWBDKz1bZ8sSazRJLCEoItSQEI0EsI+L4nFHIJOxsA' +
1342
        'XMF1pIfJJqxhqRyZEO8LaB3QDNoUNhSSE+tIidiqBTqHYqF2aLjSM' +
1343
        '1RR14XrpBeNmiIr2A6QNmgcICx1HgsXiWmiUjlsH3kKJEwzbAeaBv' +
1344
        'lD5+gJaHFITjQ0ugoamlOOtkbrQ3WQB41FyGNsEFiaAAiGn7hI9B+' +
1345
        'xBp9kf0BzQxs14xvkMfewzsSbd4//0Lb9A9rRObMNdcGgo2jkcOyj' +
1346
        'KYggPhVQfdEnfwQdEd7U6Cox8+zuI51tECn4k9zNHiMdzhiYASBmC' +
1347
        'bQO/Is08BuBUh+rkGvUifQ65/6NGjuxE36VGQOcLjcAIE/8xHUMW5' +
1348
        'GjDXQHhidf2KxbeAwSBuoXnhDcOP0A3Ii/DH0LEKyyZRiUS8qGe1F' +
1349
        'iqW+CCCQGgwWx8QnSAHuLne34omge1HVNg1pJ15HwzH2Pdw/ssfDi' +
1350
        'z2BjYsX43A7sDiIO5AYe2zUxYg2YME+kIk0MqkNaE9D+Li9tfUfMI' +
1351
        'Pm2bvBP9Ryt6rf/RDIYmo6HP8J3JTYO8tUR4cZuNYeWIS3YGDqBbq' +
1352
        'E0CIByYeb2IdYcgb2/kBjkCQ2jjSAqwcyONugBGoYqkDO+QHh8QpN' +
1353
        'wm2FqjYNLKBdEiiZAGpJLiaKletQaNA4LAuALoQQwc6WJOC/A2gxL' +
1354
        'gUxgK9EuqvZx0nZAOegD6CoQAE0MEL1FaUVb4y5olWisui5IAt4G/' +
1355
        'Dbd36BkzjBGEAkMTzzh3f4BDQfbingNJgDtCLXD5qJLwGyhPxz7aA' +
1356
        'oiiE8Fh31R+MOetTe184/Ak3C2MaKJgemni8ZeklTBigC+4Ar+RRo' +
1357
        'MUgLeEYx9JCZXKvrhv4uYVbC3YowTM/m+dewYs7gFvAHywUAGDZKv' +
1358
        '7ZDrt/Hp9b3Cg4uN8JDnH8EuwDARu7j4NlgG7QAoFwwGHobMoAJ84' +
1359
        'ju5CTO+EDtzjm/AmqBqu+9w7e2lTL5sRTznff13UAr8dhTkmt2Bld' +
1360
        'H66BfmAzwGstplJEsTWBS1hmmADAgiwD+QEI6o/yhG0uE/kvn3Vf3' +
1361
        'iz7AUKI6o3dobMBtMALJC9UF0NWPrqAWIFDr3nSDgRbmwbnwfSn0g' +
1362
        'vGWftd2Hz38mr0NmyAmFQ/mEcjqnoBPoAUoGIDm5Ew5CKjQ0aoEqk' +
1363
        '9YHpgcXUXeSw8mid6u/b2RbIBVyhhKIAG14BerFjRAb5gOxFa5DdW' +
1364
        'hZ8gQEgOgwdV24gruQM6qGZJAH9wIQCfmgBUkrQFoEoksM3CU1TO6' +
1365
        '2Adrvf/kXqA4tRc75wDdAAgiMVj720RREEJ8QKCtPiDH18EcwLcYU' +
1366
        'yQOgWWJ4Di0D5HT0Lm/sUYdl5B7YA6MeIKcsyJR+EGyDu3zPMf2ED' +
1367
        'OALhj8ywS0Yv2BmECDxIO/hjyBSeMUQBp9kgI+BD55EyA+e9JsAEA' +
1368
        '5R4ugqueUyOBMM5gPhPyNPXEQyXAF7oFLIGRn6t9PcXXK/t96edMV' +
1369
        'RCooAA+NeklJAUyAi2Bd8gtPgkJOmhHi39N5L2CaS9klrQpnhD9Rz' +
1370
        'oKphaEjy363X1neoGvmaKvIklY8iIACUBkXBBEMMlL6L9nHCze6YJ' +
1371
        'OBTJvkdF3ev+0we2B45QDmkEqBhAKrzkTwBfCc3RkCVUTQ+YYCQhj' +
1372
        'CvI/fQNKgsciOeufgsO76Q5xrs5jy+ATkRSeGu3Y1PScs1TgRo0BK' +
1373
        'SQX4ShFHuX0RnQM7oV0iG0nEvgBKJzjZ5n+hsvs5DWhNcJGh/41uy' +
1374
        '4YiX717/HcAXImgC+e/NmKGtj30oBRHEJ4TAlSck+4FvQUckx2I4g' +
1375
        '2bJiRdi7gXjdOEJyR4kjeAKsd0xOfB9Yx8/d1MGYuEJbvFzMgmSqJ' +
1376
        'EJimhefU0s23v4I8gQPjnEIMc4CfwknL3nP2O8I9KnuMpk6fDVcQU' +
1377
        'sAYDEkCGuIAERQWx8C2olnManf/LP8/gpmkL+pD+J/HEvyWO7k/Cj' +
1378
        'q/jEd0gOmVFii89IQWDydeDdIGJvSc+Rqt4vy7ealNw1iLBuT/4I8' +
1379
        '4GqkUvWd5XvI1KoyG/F/MBPAPzsVyYB/PRj+gFU7Sd2aANKQKVIkC' +
1380
        'oidOWLrVAiyoV+yNKRAOnRjiQhE48hyHInNkhLSpD23M6uyVh/S+Y' +
1381
        'AtG3/QEi+/pbYY+fuU6KfzJGhxA75hegwC0/I/bGJxkLpm+8pYR3Z' +
1382
        'YYjM/b1i5/e7tP/mH/5XMMiWgsbIF3tx77EPpSCC+LRAZb9XfwPHk' +
1383
        'ptYgtnIEY3xRYLwTn0OKjlmiYvbPyCZH5T0+3dtvic4x0c7fnj3mI' +
1384
        'd8eEdw/qu/Ea/W+lbdQB4C+PLu3+TyS3LI75oA3zIPf7nEwo9HPxH' +
1385
        '8SeLRTySVkQtCkJ7MnEL7B1628lWf8MZ91ce9kI1kFdKo7doXcB1p' +
1386
        'pHzTzqTAv0j7R6iarNGeXSPnMVA0CI1UPhkL7BI1fPK1N2BCgPxOu' +
1387
        'Ogke++BvOK/TuqWaB3fYkhIS+5NumtlfCAvokSUu1v6s5/3I5G9MO' +
1388
        'RA0XuZk69W+aMzcgbe322IRve1eCB2+4yvw/hF8od1pN0hews+8Z3' +
1389
        'YT5VUMvnCtW/7a7JL7LbUiz/7e8Kxj6Mggvi0QGU/nzsKQiPdbGJE' +
1390
        'BwJjPBDPfiZIg+SNPerYTxlwC0YoOcaJ8U7CN+pJ2iEDef/o3p2KC' +
1391
        'QB5ytW+CfARJlkiWTpJnrhIYpdIfSCuv/rb7jJOMnPKYvvAbRZ8+R' +
1392
        'Pmz8cqkJO0IIR9odgRX2BCmJK9RwaUbD+u6t1zu779F+nHolDStAX' +
1393
        'GOCSX+iOCA/BTdwAOXCTV+2xXOYRaXv2NwJ5+/Bojd67bBUr31X03' +
1394
        'GDloKfz5BzYcoVsyNPNlTt7rn6mjwH8jkgWKtDuBH9jBnu2mIV19U' +
1395
        'sn+RzOHO+qxj6Mggvjk8CFG2qejD4NME4gPJvbP3vjG++5PXw5+J/' +
1396
        '9ICg0k50AT4JeQ3IGHfCd3F3t06r8emDnV4T+cue/efRI+aGJI4cn' +
1397
        'M/WLvW6u9DClVOFyX/RL92AtwdgXwMZufGw/Db+mOAKlhUr2Bynl7' +
1398
        'oLGoegso2k/mvyrzPYVTbqTK6W/6vZ5DsXr72Mv8QMc4yhMgczj2Q' +
1399
        'RREEJ8iKFMf5OA6jAM05cOvTEYht/3JnEDaDCDMX5Bwj6gDQWGGI/' +
1400
        '7yk/xB7j1C7IMMfNicHabNwEp9rNDDOBjdUJiNYggCTWeg9aRY4SM' +
1401
        'E2wOF/z+UkmJDAwMTaikH/z1s4g+IGiDw4UwoIgXq83DjUrrTsY+g' +
1402
        'IIL4dHGEa/r/Io6iuCM95P+94h3lNFJc3yMJ8EjupZLbHqdRuOuwi' +
1403
        'fxI9Y8McD7ohx/yog/QaUCNjqxIoIPtF/toK0Ch94A47sh5pI/gaP' +
1404
        'k/rD2qaQ6Qym9wj33sBBHE/w/woZmK/334/0DCgTf/atr6Eeh79bf' +
1405
        'eF3+pX//Oee9t/fq7Lt/6HP9kOIVFe57/pWHju9rVb133vkV65/Jr' +
1406
        'x/Ir+9JL292XtsUXfriWX7f7VqEEzmNT/FsKp31oasvP/wNv/une/' +
1407
        'F3d2nuUfrjowyXuk+pBT7v7+Z9R2V35ffkArpU3HTs/kc9fDuRwSA' +
1408
        'N+S9H19E9Ql3PlDZmDT5jDqnjuh2PpZfP99/j0/XwRCOfyq7btH9s' +
1409
        'e/ggxSEn8c/v+5zLkNKCf3vEFrYa2QF26n/1MmS089iETRBBB/NZA' +
1410
        'Eik4Xzv1xLTwwjT3zDj71DT/TNh9TzW6bb/7op3Y+/0HcBTolGChZ' +
1411
        '/uz+uA6ce+quG+9pG2RQCuwQIKLz7bF0s4lcd9a1cgDzdiWde5J0/' +
1412
        'pb4mD3re8dPkoEMYIeQZKue286fSv/SWbzP84OJH+/tOO+pbYQuHr' +
1413
        '2abF3HuB3LvE7lvntS3u4K+pZIYuzLTyzzj+tWQhg17svQad+u4Dv' +
1414
        '+uknqEIgDDPfaMe3LbNPAOvcNwD00Prgd+RqH4haB3MDkt/jedSie' +
1415
        'vqxce4Z9HaGY7kkcN6QNERUeuJ0namWvhzHCL1xkuOdF3avyAbvq8' +
1416
        'Z3oGEUUTV8n9e2IOxaFnTuotT3Wda9AnUBlcObmokdSFIz/6zl/ne' +
1417
        '7K5Egw7OfO5/8kTA0hHX+rv0x8d04+4154YV6Yse18pqUk3y9C/o8' +
1418
        '9j4WRBBB/Kbgd6FBpKB9unuG5Zlzrb6L1nbEV/dYF1+oRzbr7j4zT' +
1419
        'z8CC6nHH+ontpt9a/XJlaIgUrDc575TGj+O8EpPec891eCac/6Jae' +
1420
        'phjNobwjL4UVA7al941u5b0PjxVaaktP2v/2FaeE5rmPpQcQn6Tu3' +
1421
        'wevXY5hm2b3tt1gGAbHUT202+9fZgde3kI8rttevf1yy9CpW5iXt9' +
1422
        'QD7m6R2P7/UH++Jz3dTjr0S1ISzjHgwniwwZ1gGQOb78GoWcYBrCF' +
1423
        'J4vWEby52mOJfDfkKJq5HOOZ4vWtuc4R/RTO6qhDeitYYV4oQ/Ws3' +
1424
        'bltXZiRzGyBVujGX8IC+tcfZds7s92DJtnHpMrS8klwdDnsXezIII' +
1425
        'I4jcF/2Prrqc/g830009TrYO3FZ4QtilG1ynsXuW2zCp6l+W9y3Av' +
1426
        'sxwjhpknyqH16vEHhslty/Qjw+TDUwfPrPkQiFN02WZR15Kse6Gqb' +
1427
        'ylkjx6j1O0VA/etd19Wj201Lj8nzhbcfP+hN8vG9171bdz8QTf15P' +
1428
        'TesbyHEa/vkHfOKbrmz3JMh1n3lrzJMPNYP3q/dv6RfmwTfjJ5HUx' +
1429
        '7Q9YEDTRs/hij7aBQsXpgxTmz7Zx9pBreSDH3UvK8LHSpx7YVffcO' +
1430
        'KwTKvFpej5qm1wwxmmaFPWuqicc1y2+bH/7hi0PnOfrV9fnB7zcr6' +
1431
        'quGN6v6VuzT28ReFkvPERQgyEq1DNRtfB8q99ySEUfMK8e2db56ka' +
1432
        '8Pk/o89m4WRBBB/Kbg59KG+99X9K2d9p3kfpJN0NF1SSNBodXdloU' +
1433
        'XcP7FfRtFnrlc16i4dzVC0cRrW5APrFX23wMl/voTcr8oMog674pa' +
1434
        'pkKY+gMn2tePV/UuWcfWQa0Nd58esZtEwDPovtd/N809y7QNfaTcO' +
1435
        'G27sGGgzD38oWMcy7pWJJ3zur6Fqp5F5egDSpqG+7+jpIfAktZJdd' +
1436
        'eMrGuB652jpD9VbJb2r0k65mQds6d/nSkktPEB2v+QLbijbtONbyu' +
1437
        '65kxDy9bxjaqBVfnwFgx0uNILq0oc7MU2OVbeSLoWYPKUvYumkVXH' +
1438
        '1Fb9wpNj72ZBBBHEbwrje7vS1a5+m2jojtZ2+KnmiqgObiS/c0U6/' +
1439
        'OBCqeOLIiNswTme/TyfgGRgQ9wxJ2mfvcSz/rfORo+q8pQ2jZ1kHC' +
1440
        'BkWt2Y2DOmbBur7pu3jq6RB4sH7iDn30eINFJVY9sniqjHWX4ecFh' +
1441
        'wnMbLMrdwatpCAgra9c+ZBuBKWa1qZFPkHipvGqkc3qQy/+aPlMxP' +
1442
        'MrS82l5B47BicO3MwWN5cW9R40RZ81hFfY+wcfA069eawvO8o091/' +
1443
        'AjKe5aFjUMVzaPithnd5A6CskA9IGBBXMb2zPBb51XD9yXeCW3nlG' +
1444
        'lo6di7WRBBBPHbgf9pKfzq+vX3pvnn8OrPlNTseqRFxrLedXH/hnX' +
1445
        'huWPlbYplgLz+JbeG7p4p7Vop8UyXukc4nplYffdthWeXIYsM54qN' +
1446
        'Z1jVp+Bs0/WHjynHRfPc07NcayBRF7iGSxxdwpoWWWOvpnOKOHBk4' +
1447
        'cn+rtF7m8jhs+/V30xzTxOquwPZ9Wp5PbN5DlKFsHe96FhVS77STt' +
1448
        'O4Quiaz30++WEW5Xpmix3dXFunvH/tl5mfrimytlcNrkWpWil/pZp' +
1449
        '6Sur6OYYGYs/tmjYK858rqdk9PvIwaJrPKSft0vW+4xfVlOt+pBi7' +
1450
        'SuqHVMMbsoENYc8qr2MZVL8vpC+IgF2GRRB1LPAcXeWONkXTwLH3t' +
1451
        'CCCCOK3g/GAHTK7vvlPw8xj1dh2tmtsl2TM/ammbnH3Mt89Kh9Y95' +
1452
        'MnnMxTxRZQum7iYbGjh1Y3GqFqDa/yXhK6TnOsGZaePG1DWpkmS2G' +
1453
        'raJ81TD5kuKcp9KWefEK5ku8cpOvqGZUmnqFeUt+t2ztbfP+kGPK8' +
1454
        'gPf/1bDxnXpi59yeefrM9+yY37bAb501TD3SjW8x68cStd6Cmh5CB' +
1455
        'pkJzP8ZXQ8rFl/dQ+H/a+I6Rd8K09wq7b33mc9IpdUMiXrXnavvOp' +
1456
        '7+TJEwXNbIrOkobVugnIp+S9ZU2X+Prq3L850CwNA3nGHpA9Pgljx' +
1457
        'tPYRJEShJpAqJQ97TRNpcdd1p5sFz2Glq6C1DZpF0Ek57hJJqZULl' +
1458
        'TZqxhz4bR7VlxCPjKi/NPWNfeYemYRhbCmTEMQTBk1mCCCKIQOwzv' +
1459
        '+/URe/W977FhNtp1oEcx1DlwGqxs5dVPyIfWAMZwq8mGSZa21HYMM' +
1460
        'XvXOF6pukm72mGNpC70gwdyfzKGzEpNxIyYhjCdKmlrIPKltKhBxT' +
1461
        'WyrP3Z8vMGTwpTVbNN7srPUO757YfPB2y9+VfjbNPY3Wdfqc6VOHR' +
1462
        'jG7CG89V1GRKjNlVDjBnsu9o4MiMQhBsCF1Nln6KbZaPbAcGGgCvZ' +
1463
        'ZZp7ZD1rVIkDPT54UKn24cFXSvl3cvG+ReByc5wreLOhQIQO7cihS' +
1464
        'VMKxYVqBwU5kdklFKqvBmXdj06kTyx8VZ8WlhSVnhKThJPkWloj9V' +
1465
        '1wGgi1DrFNp2kqWKKRF/dSYosKEmrMIk671IEu17RwGqcoNeNlrQv' +
1466
        'fXFovusz3xqhgoYpNE2uypVSXJ5RUgF7dOw9LYgggvjtINDnJ8/bb' +
1467
        'Vh6UdV/TzGwKnCPFlu8+TJjgb6R2TDWtP0TfGawExxjEItl8ZV64h' +
1468
        'H80lx17ck9at2d+qhuj2NXXL4ddelWxKXQSPCYtGeJQl9gYApf5dr' +
1469
        '6UoSquEJOFl/GVtsq6rqq++YPnAjve8mrfv27iv71wLmUizwr296Z' +
1470
        'VaZKE6oz5TXsuqHytpk0sSGWWRaanJ3Mr7rCs5Cln2SZZMMPOG13/' +
1471
        'SbM57G7bQvPKHxOYX5m8xzMXNs3f2p++MeynjX/9c/puuKGkexKe0' +
1472
        'x+sf/Q5NzKmrPs6gPM3zyVyJVdi4y7EhZ9NTzmWlQ8cVxvYgZxRHs' +
1473
        'Bp0DflGrovFxWS07XnyxURhXyL4RGhWWzUkTVokNGM0xSnyG3ZlfZ' +
1474
        'Oc1TiLBi9F2U5x1oI9P8C/XwBtPenVAs9p0IXHrsPS2IIIL47SBwn' +
1475
        'n/g5V+7Hv+hZeNb2/SDqu55aWM/V19XINHmKazS7kVm00zT1u+kvf' +
1476
        'd0xHrOnbLue/KeuyDYZIEqhKY6wPz6tmhG2YUbYee/vn0lMj6lvJr' +
1477
        'rmaLQl3HhJZX5rT3xHGlkWl5KkQBuf5nNq+2adkw/gDzkVP/Qm392' +
1478
        'P/8zHP5sx/CBGX6BjaZxZYp1wpbJRG3rZaHTMPtMN/ZA6JmIY5Uj+' +
1479
        'sBFf+nWpTcg8Fh9d2DR6snH9pVvP8L8X7BMdPcM7r0hdZ/ce46Ai4' +
1480
        'zakXSpOSwlLzQhPTw1NzqbkUgvyauynWUb/CVeLnNJ++6Bq2NZ4hh' +
1481
        'mWSyrPL5YkshTpAiUxGyP0kl3DOinnzpX38NX9zG/KlmkS+Ary71T' +
1482
        'VQNrEVUtFMEyjJ1QL2xrSfMkt2UW0Vngv5eEzrjqHk7TZIrYAAtyM' +
1483
        '4E4ej46i37sPS2IIIL4TcG/tmfw9d/9J62bR+6p2sZEjja2xl4grS' +
1484
        '7UN5Y0TfBaZ2kmb2qZNlNhK7T35qjrQtPy49iSkELlgdkeYydBO7R' +
1485
        'SIKVMV942e11cF8hOJ4sMppnHcJgDL+ZYe0CMt+LT4guK88vVAkuT' +
1486
        'qn3cPrnpWXuDSIQ4ouvZz+b557y2xYKGycAb0009tOomhB7irrvpN' +
1487
        'UOl3as3ZE2QJ0JaD08bPv+pgJAkydSrHn2gHNsJzOGOpsO59v4jzP' +
1488
        '+ZbxEOyP8AxwocIu9kZEEJ3Pivo5PCkrLg9sNsFahd54oNgQpBTU/' +
1489
        'SVNDSPvCTpg6hq78s0lP0QCQuVALE9UMPeU+xDPzGUYQD0XRhvqWz' +
1490
        '0OCJ13ij1O3kv19ya2K07dqxLaajF2nOXw+9cvsO4ouItNxj72ZBB' +
1491
        'BHEbwrkhM/I+/8iT1rv2Pl98+pr1+xDQ/9iZcuwyN7K0TnpVRaG2Z' +
1492
        'tl7ZN0L6YK1fBXWfXEqsJYZhk8WArzIzqguYZya3ozTJ1xKs/pYuq' +
1493
        'S9ShFY5bSebKgKvAuMD8sBSgU/JkjrOSbGpWto7aJDQjT+YhY21m3' +
1494
        '9s409+yy0OVfvUPiBNOgHt0yTT8uaVuEQ35ibxo/TFKbyJWD+QNDk' +
1495
        'tNMXb6+KaaqiUKqqkNPnA+v7aGA2zwVz6u6EBp18Ub4taj4sORs2K' +
1496
        'yMkgqGvvE810Rd1UnXHwnU5dzhhZ10/WHOJ41CvqUrliM7fzMiPIf' +
1497
        'NrOlEKJFp7pYOP4DJI+yauV/QOpdUpg3NZJy/EXbu2q0rYdE341Ij' +
1498
        '0/OPvZsFEUQQvykETvUPvPob3P62B9+7V144ph8YB+6CfiX13fDAi' +
1499
        'y1ececizTVcoG/MkpklPcuCttlEniKxREFhfj93EbTGt18tr78la4' +
1500
        '5UtcdV96RaBiKULUxHX4JATWV+S3dUIf/6nYToLHp2qZxnqK9qGak' +
1501
        'Z3yCW9xDHvvxkmHlS2rUCt5bCh+FVXkbzbKjcc0noCrx+u6LW5/NX' +
1502
        'HmB+ujpdYuY2jJw46Gknmfs+xPxnebabsuYEQ29e3QSvc1kx+tBy9' +
1503
        '3Xzw59E7fOxXPnZr8PgWoP5I9PykpmleSIV2+I9zzX/yvX87Jb5I5' +
1504
        'j/KJzjWmn23hi29My10NOXvrocHhOZx0ngSIXeycrBtYr++4T9Gn+' +
1505
        'EMCQ8p/jMla/PfnXj0q2I69GJ4am5cfnsY+9mQQQRxG8K/ql+0u3v' +
1506
        'f/mX7id/bN36DuQPz98yuqrvmVV6Ryrqe3j1gzm2fnnfCt3okfXcL' +
1507
        'XAMpJVpEAJQ5vl35yXY5tMcC4lTxWZYgS9Yps+ZhiRda2KpKqKAf7' +
1508
        'LwCOYHhd7JomWVyrnVtYg4rKNrjcvPYYkcSy/N88/PBKzkRG6n2Kb' +
1509
        'rFQ13NLtzHZRYIEpeT8yowzAFiHeKro7nSJOEmnhNS2Dppw6tkPxF' +
1510
        'n/8Es5pu64lhS0DCIFgYrHSumC43cO0dF0ssgczvm+1Rk3M4BGgq/' +
1511
        'LxZ7sp3DCkGNwKXp5KAlTxcHK9lNl1mvXD7zsnzl0HsYHXER5EZha' +
1512
        'kCZZ66rnJgDdXRjD1IExu+upN48WbEldt3kCAiLTe+kINI5Ni7WRB' +
1513
        'BBPFbg3/rnpF3//aTf9v2D561Nw13nzpnti0j98D/Eu+4uGuJ0TDO' +
1514
        'dnQzLW3p1e3ZMlNmhSGEpj5yduLwZEWcpqXMMxGWww7P41KZ3zfbA' +
1515
        '58fzJ/Jk3J0TkXTgHl4hdh8ZvW1buJhQd1EIJ2e59sD12deKHVQio' +
1516
        'uQ1ceyxOD5wJAEViC2qDwij1vSSHX7fw3zBy4K+sw3686uHUzkK0O' +
1517
        'TsmJymTBYLKWV7+y+xLOGsM0x2g5u+5J16Y1l7kmWwhZXXEHI43u8' +
1518
        'C4sJveXIzIXVTec5RspDAdXIZgjLQCn6ssAp9EzcTC88dfEqooyvI' +
1519
        'uJuJ2XG5DASGbxsqUHWs/RFkQGtk8yvuhmfRq4disooSKSXQCqG3H' +
1520
        'jsfSyIIIL4rSFwJzSS/Ade/pXYi/gRccw6yf+O6QeGwWVx20yGtU8' +
1521
        '1vMFx9maZOgpUzrzKmrOso+el99mMoQ+X1tNtvSnl1ZEFJXCSowp4' +
1522
        'Jw/OEYH5o+lCuKkE85dI2Bq7tKHX0L+IuMM09VA7sXOaY/1IEYcRX' +
1523
        'dmIDEG2gcx/o8yOK1cj4+H2Jxx0+3+R+T+n6co6FvAZePEc11LqmY' +
1524
        'CnHU/jZYP5VTX82l7KdhaijkWEHl9FxJNLOm/Fp0Wm58fmsRLoJSD' +
1525
        '/8xxDoAk7WajKVtXm2wcOy5Zp7orjVl64FQmHH9wORSUzS7P4slyx' +
1526
        'lmn2Xhc5SjzTmRIjzAECkLg8VgpLmFtWBWMksDYfex8LIoggfoM4Q' +
1527
        'P7v/2v4LXHMLnnMOsn/TauvaucfKfuWOZ5Zaf86v3Ekt6aHaXDTNL' +
1528
        'XkS7J+grot9+Ta+nNregudg+yGsbL2eZF3GpwfTRdcj00B+125fSe' +
1529
        'GKaI+F64bTaswJXBlaSJtXpWNbfYIGwZk7dOq/uXK/tVsx8c2ZzsS' +
1530
        'UfL6yAIeyD+woCs8M3xvCAADxGscPcH4ZeZHcJFiGRD1rst6lpPFx' +
1531
        'niVh8LJ10S1FR3zOVX2bGEV8cKss+sS/wDzc5unfMxPrOe/FhkHnz' +
1532
        'wyLS82tyiRxkXQBOa/KNgPWGAQkwQaUcvELZmbIhK8ep57NJ5XeS0' +
1533
        '6OSwpK6GQC3+eJqsGt7Mt3jiNt8A5XKhxpXHFacUixE35Yg0MaJnN' +
1534
        'W+kZOvYOFkQQQfw2EXjQMOn8+/m/+5v/6Hj4o2f9rWHsvmp0K981I' +
1535
        'vRM0JwDHGsryJ/C/OnGzlSxAawbkV8SUcCLopWCZsH5cHfJN1hBfY' +
1536
        'm83en3K6K6NOtgoqnXtvxG3ndP0rMk7VmW9d1TDKxVDm1UDW8aZ5/' +
1537
        'qJh+dKKLOflwT1yXp2hI1LQlqT6LGG6ny+v8iJ/xvlTvC87hRhfxA' +
1538
        '5ifn+UG/12NTU8urA5f6/6LPfzJfEcksL6kfOldCjT4ilC2K3qVCX' +
1539
        'SNNYeLa2i/zawKZn9cym6mwxbErYovK49j+2Z5q0P7h2R4wf0QhP4' +
1540
        'Zdwa0f/oJJlSpS1Spum45hlCFqIFaQVmiKtY5Ss5vv6sl3DidXd7L' +
1541
        'MLYWy6kKJjqEwcXROkb21smUYodOx964gggjiNwvKQfPkoa7+yR+Q' +
1542
        'f8PKy6qBtVzHkLhjPt8xCP8W3iaF+VOr26MZZeeu3zpz9ca5azcv3' +
1543
        'owgV7yTrztFZRbG5DDAe+SmCv6NdIiJ+oMrHk8UGXFRPfkk0dj7Od' +
1544
        'MAPv+Saz3Ps18SOmO07ULvdFqFEWYF9J5Qqua4JygcfrPMFpbDhum' +
1545
        'hMH8iV3YjJhmIZ4lLPROnWEdsgHCY+W8rPMr+lWtJeRE0Iath7LC9' +
1546
        'SLUOgPwLVA6WyXPlIPNT1/PvLeaH3r4s0lOe8IL5UaMvv7oZy1VkW' +
1547
        '3oOF1TsnkiTmGLy2XDs6XIDz9ggdraLmobLOu9eFzl59YNck5tbXc' +
1548
        's3NYocbfD2q/vm7ZObx961gggiiN84KAedk5M/IH94/m0Pvq+e2GY' +
1549
        '0TNStvcus6RfU93Ns7SF0LYX5Y4pExDu810NB+19FEPMbEWm5MbnM' +
1550
        'RHpJGrsskyct9G2h+WueC+e4xk8e2sQ+TuNNl1qu3Uk++9WN05e+C' +
1551
        'sstLm4c/zXMD76Fyx2aSLzZGpXNyK6yZ5i7jxTjSJ//anzW5ZjUMs' +
1552
        '94jOaI5Te5tr5cRQ1NU3ultOZ/vJ6f8PnzS05duHIrnS7yTl4X11N' +
1553
        'KOc+3lbdOpwqUaVwxQ24UWJqkDb2SlrGqoY0TDL24a6msoV/kaK2o' +
1554
        '7VQ0Dei6pq2ja8H9+YMIIohfCYrzT77n1fXoJ9PMI0Hnsmv9+zhtW' +
1555
        '5l7CG5/CIPK/HFsYi79Slj09TsJ5O4BSQxeZomE2MpSbmSpajjWVt' +
1556
        'z1i1P3cPKPvF7WPo8iLt4IR0yByCKqgMdpOsLnJ2d7zjD3xYPvnVK' +
1557
        'qhBmKyiiAJcoo11Z0zJ89NHtzNPMXKK4l5X525sIdZrnQM3FpbzXR' +
1558
        'dUljtnNMOvRAM7qVr67LVzrA/L/GqH3mW016mPkJma/euBgalcCr4' +
1559
        'jaMfH7oYUSaoTNH6cjgy+Hzg/ll7j5l23hF++xVoSPD2g97IW0ehL' +
1560
        'evbp8wDi45ph+4V14ce3cKIoggPhUEPvYd/vZf5PYOvlNrHxd55hL' +
1561
        '1HWLPaGltbwh1r872RK78RkzyzbhU8jWidE55vljDUlp5xgaRnXBH' +
1562
        'Re7hMLn7v/vQlsQtmVvSOXeHxr90KwIxxeXbUbGs8pJDWwPdKLOBQ' +
1563
        'qMZZan69gDmJ7ZHjs4mdldLZvIzeDKaoZnRcCBeOM+3XxQ4G7eozH' +
1564
        '+arr6RSvvs1Jkz10ITS1VZll5KiZ/TdbmWboa1/arA9iuZ/4LAeZj' +
1565
        '5ITPqdSk08uu4tDSJKd1EjUpgC/ieyQJtPU1h4psaiRMNOiblnXNx' +
1566
        '2vbTHItqdEvaOgna1/fOWUZXa+d2PGtvjr0vBRFEEJ8WKNs7OO6+0' +
1567
        'E8/viywF9aOSLwTZQ39N8vsIXSt//CRhKrGJJ4CfvWdLFoijZvJkx' +
1568
        'LT0YZ6sasDjig4St8zW9k5e6PcGcLUAScZe/cSJ5Ko9t51IqG+wDE' +
1569
        'l69tPM7Q+aE4xNIW23hSR7npc6tWIWMQUN+PTkkrkdEdviO9AE2IW' +
1570
        'nU583uCboumCGEbZWTqxgQN53Mklti5DpE2gcVNYwiy+jIhBdPXyn' +
1571
        'uVUQ2eipjVO03Jb7IyU1QO6kftf8cyXONXnWLowsUPavVTqHvl/2r' +
1572
        'sTn6rOPIzjf8csmWSSaWfpEpembhUVkE0ElB2UVZaL7DvIJlQEFQT' +
1573
        'rUncqdcEKVlRaq3QsdnRqnWZsOul0Jpm/Zb7v+V0ul1t0bDsThuRJ' +
1574
        'Prk53HvOuxxunt97LnB4NTz+l7/5/a9fWfbm1iyW1kw8aKjOr7ZV7' +
1575
        'Ow//ween/fvV8r88/KmxixezW1j3Z7ac9Z3bPyljIZfJFX+3Nttla' +
1576
        '8nuf3oqsRs5vXK6g3L1m8OyyzJ6x95ObPRf3JmvZrTmtVzMrGijWJ' +
1577
        'a2OWSv3RwNKbl6M+2VW9tP1F8aKTy8AgL/ubT452jH/WOzyz6u0hE' +
1578
        'lpZ5t3eY/qb/5hcs+6vevV7+zpXdh84V7j2S1TaY2tTv/YZnW2xJU' +
1579
        '2Re9brEzLXxqaRrdHZxUmm9fSJRMXCu/thlsqj13I3G0xO7j1wuGr' +
1580
        'iQt+9kxp5Bjo3ztUTkVW3I9tkdIXgMyyzdsKPM/QcTj90vaH1mydr' +
1581
        'kvNfDormgeP2tCPv1yA0puTHFDXG+1tjS5uiihsj8GvanHKyI2LIy' +
1582
        'Ip7wDM+t5MnNu+qiCms2peWHp+VF7yjZWljFZUhqVUdqU9/2+t7Eq' +
1583
        'i4GzxjoevX2vDcSslfEpS+PTV0Wk8Lj8ti0ZdHJL61Y/fLyVWTyys' +
1584
        'itG7N94blVTk6FNzyH7Yj86s2FtQwD9MiX7n+yZHnzyihm/HaXTjp' +
1585
        'iSJEFtTyyzTM8z1DXpuQv3xS3LCyKurl2S8rGlNzoXfUxJU1uXgW1' +
1586
        'dMeeTIcuYosbWfP7k//Q2eojF8uGL5UOXfINXWSb2G84MdZ69sOui' +
1587
        '3d6Jx4s+rtIRJaWuds7ePfzHLrz1/4bj7qv3Gs5+6Hd2Ce/YyCrvi' +
1588
        'e5vDWhqDY2d/fmrKLI9AIe3Sc8ZU07mvYVv320evgCmd8xOsWBPVc' +
1589
        '/7Rmb7rgw1XTqGuWgoGMwtbItLr98Y/LO1XHJJN7K8Dgi/Y2ILWy/' +
1590
        'uTnhzahEZ3PCG5Hx9hJ4aU1c8oZt2XS0Jb88obguydeQWFK3paAyK' +
1591
        'rt4Y0rOW4kZVB+sT8qk5fD0/MisoqgdJTE5vi0FFdSjtKq27Ma3c/' +
1592
        'f057T2ZTfuYwzxu6oj0gvWxKfSy2trN7Hw/u2KNUQ9Fxe/W7nmlVV' +
1593
        'hr68Ld3+EFbMtLClzU2ouO9MsfYVty16XkL42Po2rCbrbkLyTVzel' +
1594
        '5fHS+qQsGlwVk8SAGT+Pq6ITV8dudzsnpDNIO5CJ219ggY118WmMO' +
1595
        'co7h+63NHdVc36YF22Gbd8BNqJzfFZVi7qPVA6erz9+pfHkNU4pj4' +
1596
        '3vfgBOeNvIre7Ld/uuf77o7yIRWXJCPvAZuP0ly8jO9z9uOjVOpPv' +
1597
        '2nyjsPLyzeX9GTWdyeQtxlFRSx3I6rbrd/WJh7/Ga4VEWn3sv3+Wo' +
1598
        '/slHB29+0X/j4b5rn3WOftTw7tWyA6fy9hxIrWglkCMzCkk8cvUtU' +
1599
        'jEhfX1iBtuGbdiTBH54ai4XFKzb6TGzvjunpc9leEsf2ykVrYlFtW' +
1600
        'RmzM5SxOaU0XJCUY2Niv1d5jf00CmZyeApXiX7jlG/OHabr4HSsIn' +
1601
        'CsTUtENdwPxqI3U7XvES/NJhYXMfOTJa++JKjCGrKEI/WaVzubh7Z' +
1602
        'mUlxFFdAYUlZjNz96y4qUVpeBMUovYDHcO9vr5g4eIln7JIkeXczp' +
1603
        'zSrvht2bumUvpiaFa/06o68toOMv+bI+3wv9pyfJOrbRm5yVQW2+R' +
1604
        '69ffWPnO1FfwuJyJLz/ft5Hpj8M5HSfuF208lrxE75wTOEJ/lPnFI' +
1605
        'Cdjb3ksOFXUNl/Se5LnC/XuKtPCkZHMtVw+BHf6GFfR/cb3/vVv2x' +
1606
        'y2QXCZZR28U1AhFt4UZyOmzMx6tbd1WTugQ4FxQFnYMUl90HTpcfO' +
1607
        'ssjw+AZxpBZt5fSwz7EI9tEPaOiNDBCdijueYeKUzX0Xu3RSwyAQX' +
1608
        'L1wbUJwyZjaTy+oJIwJ7ejvDAnihmM/cGsFQ5riv3pi2SmLyoOWe2' +
1609
        'Ut1DIDF/SGtWBJKdNBs8j2zTFTA3bjvek+90nX2Nq5R5Xm9oO7uoe' +
1610
        'ZnZgwP55eVWAc8UFS377IV5iFqzwLee7Ln0CNmybayuq7cFbjxf9L' +
1611
        'SQiS86C9/NkJdlz9VPW7aznWboTnlWHRygBpD3cT3KH3ms4McYStP' +
1612
        'vKvb4P/8Qhw3efUjhAC1Y+aIHIqj9+hdwmeIkywo1Mc3+XuhCe51X' +
1613
        '7BSFW7HRELxzOirf59DhliBjnGVcCeo+zA8hMykFpr1vbk/YMrHLw' +
1614
        'PNWKsbWcuc7wqD48cnjdsUvkv63/Lc8JWBezNZ1WO1y/HQM0SFMMu' +
1615
        'HLgHGiQCweepNLxqiGlDeO0ixHqDiMPoGbxjGHb+GuTF/i0SeOMkx' +
1616
        'kxQSoU83I/ye11fblJ9R7nS1vtMwUuqajFXEk5H9x3rn22f+IBJ5k' +
1617
        'zv+hvIRFZikJ+vZMMH5h60j/5qHd8hmBnhUmAUwIsftF8ZmLP+Un/' +
1618
        'pw2Tj1zs3/va/SP1z/7ubgpx/1tXPj7+ipfYoWN0iv2JuOrhC2Qvu' +
1619
        'U1EWwUhY4196Y/ugXPsyf6EHqHt7ud5+S7D4NEbiYtxihE7EOaWnH' +
1620
        'zpBkaBODPBOG2FzCGWkDxyLMNwVezEWM3wqEV6YABzJWN41BWak9e' +
1621
        'oGu5DFaZ8ZoIlt104MCry2fi3D49wVIXXGvPyT+3AKdsOYVOzKxHa' +
1622
        'pHEindrKUBmbm9eZibl5ecOwk0wB3T/7SRpIe3Po9mMruIv+/hGRp' +
1623
        'Sh42e8Pf+9+PmQLgUPskJ/kj8UvesamidO+658fvPWY5T05z8XCiQ' +
1624
        'f/cHeECLopBC+RVBzO/iQYQUecEqpEHOkdiie93Cbu2LPr4h33acb' +
1625
        '4DBcUFnSMhB7dSMamWQOzg/9zj4t39nqjcj9fHpu2tTF7uqi89Zgp' +
1626
        'gMMZBi91XfrEYtZS3bicd/XiZvuF27RmP6e2pbWbtdcXR3mXDyFuM' +
1627
        'lqrEf55LYSXrAv7rJ60tzV878QDxskEA2c4MC+bFPvYwn7g9pd8Oz' +
1628
        'ifwYY+ecq3iYusRX//iMgSFfwnvS78739LdLOetM/tSR7yM7DgJFE' +
1629
        'ti+wTHot9Lhk4PHBHOBf+n/6NHTic/ftvPCTESHJLVDLt+2yJ7tKe' +
1630
        '3L7x0PUy9cQizmEkH3/FMzzvCsGNh36Tj/yjcv/ey+U8+7An+9M72' +
1631
        'QgOt0LGbjTe6yVtYBj+fr0ctqW1a+T2l4FZu6Lj5XNviPEZN6PAJz' +
1632
        'DP502NRqyW2Yrd8jxkXuzAo/88Tz1xEyHhp7+xD9PchrdNgbbrrEV' +
1633
        '/84jIErXwzTzvf0u8kDOs6l2EEqTm3tc848KH5Jn5jmLhMt/uBTT/' +
1634
        'jkD+CkL2erntisjUE8fL1VAk9mwY+he0099YvhnLPUtyqwWOt73A2' +
1635
        'LwDKUCwY90s7j4NHYlnXr93n7KnsVlbXxbR83CUJ7ipZ/HvPFuS3C' +
1636
        'BnAzwwr0BfNq/gM2CfpM3Dmfeusxb9zSMiS1fIzdzsZv6uBMx8Z1F' +
1637
        'jKWr8yfP5P/1L/Yf/CtwLNLSCzHxn2euPuMCqdUGW2IGsmw03G0mg' +
1638
        'NX+Ds0IHFnJg0CwWHom3HSgxgdkFz9qOmjvwxwrUo7lBzs5rbnhB8' +
1639
        'wqeC+czhF1kLfo7R0SWupD8D3yA86zYCc784BYC+T9XRIIC/Hlm95' +
1640
        'zrYj7rfa7BZ0di8DVI6IHP6HfBmQb39Z/H/2JTC5ndgn0tPJf5Aqd' +
1641
        'dROQnCl7AzxWC72VOSOYv2ELIp0Av5Bm9PGskzx/bDxjG85t9wcH/' +
1642
        'qNn90Ok8/+SLiPxEPzFznp9aL+LHNfW/GMl/3YuPbdHfBiIiIiIiI' +
1643
        'iIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIi' +
1644
        'IiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiI' +
1645
        'iIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIi' +
1646
        'IiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiI' +
1647
        'iIiIiIiIvL/5t9IV97O');
1648
1649
    GetBitmapSize(BMP,w,h);
1650
1651
    SetArrayLength(DebugLines,5);
1652
1653
    TPA := TPAFromBox(MCBox);
1654
1655
    DebugLines[0] := 'M34t''s Lunar Planker';
1656
    DebugLines[1] := 'Planks made: ' + IntToStr(Prog_PlanksMade);
1657
    DebugLines[2] := 'Xp Gained: ' + IntToStr(Prog_PlanksMade*90);
1658
    DebugLines[3] := 'Time Running: '
1659
                       + MsToTime(Integer(GetTimeRunning),Time_Formal);
1660
    DebugLines[2] := 'Planks per hour: ' + IntToStr(Prog_PlanksMade/((GetTimeRunning/1000/60/60)+1));
1661
1662
    {for x := 0 to w-1 do
1663
      for y := 0 to h-1 do
1664
        FastSetPixel(BMP,x,y,10337999); }
1665
1666
    for I := 0 to length(DebugLines)-1 do
1667
    begin
1668
      TPA := TPAFromText(DebugLines[I],'LoginChars',tw,th);
1669
      for II := 0 to length(TPA)-1 do
1670
        FastSetPixel(BMP,Min(w-1,TPA[II].x+10),Min(h-1,TPA[II].y+(22*I)+10),1);
1671
    end;
1672
1673
    SMART_DrawBitmap(True,BMP,Point(MCX1,MCY1));
1674
    FreeBitmap(BMP);
1675
  end;
1676
{$ENDIF}
1677
1678
procedure commitStats;
1679
begin
1680
  DebugStr(2,'Commiting stats...');
1681
  if stats_Commit then
1682
  begin
1683
    markTime(CommitTime);
1684
    DebugStr(2,'Committed stats succesfully');
1685
    DebugStr(3,'Mahogany Planks made since last commit: '+IntToStr(logsPlanked));
1686
    DebugStr(3,'Magic XP Gained since last commit: About ' + IntToStr(logsPlanked));
1687
1688
    stats_IncVariable('Mahogany Planks Made',logsPlanked);
1689
    stats_IncVariable('Plank Makes Casted',logsPlanked);
1690
    stats_IncVariable('Magic EXP (Gained)',logsPlanked*90);
1691
  end;
1692
end;
1693
1694
procedure ScriptTerminated;
1695
begin
1696
  DebugStr(2,'Attempting to commit stats one last time...');
1697
  commitStats;
1698
1699
  SRLRandomsReport;
1700
1701
  DebugStr(1,'Script Ended At ' + TheTime);
1702
  DebugStr(1,'Ran for ' + MsToTime(Integer(GetTimeRunning),Time_Formal));
1703
1704
end;
1705
1706
begin
1707
  //AddOnTerminate('ScriptTerminated');
1708
  {$ifdef SMART}
1709
    Smart_Members := True;
1710
    Smart_Server := 100;
1711
    Smart_Signed := False;
1712
    Smart_SuperDetail := False;
1713
  {$endif}
1714
  DeclarePlayers;
1715
  SetupSRL;
1716
  LoadObjects;
1717
1718
  SetupSRLStats(945, SRLStats_Username, SRLStats_Password);
1719
1720
  repeat
1721
    if not LoggedIn then
1722
    begin
1723
      LogInPlayer;
1724
      wait(2000+random(4000));
1725
      ExitSquealOfFortune;
1726
    end;
1727
    {$IFDEF SMART}
1728
      PaintProggy;
1729
    {$ENDIF}
1730
    makePlanks;
1731
    If not Bank then
1732
    begin
1733
      DebugStr(2,'Failed to bank, making sure we are at the bank');
1734
      if not NearBank(true) and ENABLE_WALKING and not FindNormalRandoms then
1735
        TravelBank;
1736
    end;
1737
    antiban;
1738
    if TimeFromMark(commitTime) > 6 * 60 * 1000 then
1739
      commitStats;
1740
    if (FailCount >= MAX_FAILS) then
1741
    begin
1742
      DebugStr(1,'Failed too many times... Swiching players');
1743
      Logout;
1744
      NextPlayer(False);
1745
    end;
1746
  until AllPlayersInactive;
1747
  if LoggedIn then
1748
    Logout;
1749
  ScriptTerminated;
1750
end.