Changeset 25


Ignore:
Timestamp:
Sep 10, 2022, 6:54:43 PM (20 months ago)
Author:
chronos
Message:
  • Modified: CoolTranslator replaced by Common package.
  • Modified: Update common package.
Location:
trunk
Files:
33 added
13 deleted
32 edited

Legend:

Unmodified
Added
Removed
  • trunk/Forms/UFormPreferences.pas

    r19 r25  
    5353begin
    5454  CheckBoxRememberDatabase.Checked := Preferences.RememberDatabase;
    55   Core.CoolTranslator1.LanguageListToStrings(ComboBoxLanguage.Items);
    56   ComboBoxLanguage.ItemIndex := ComboBoxLanguage.Items.IndexOfObject(Core.CoolTranslator1.Language);
     55  Core.Translator1.LanguageListToStrings(ComboBoxLanguage.Items);
     56  ComboBoxLanguage.ItemIndex := ComboBoxLanguage.Items.IndexOfObject(Core.Translator1.Language);
    5757  if ComboBoxLanguage.ItemIndex = -1 then ComboBoxLanguage.ItemIndex := 0;
    5858end;
     
    6262  Preferences.RememberDatabase := CheckBoxRememberDatabase.Checked;
    6363  if ComboBoxLanguage.ItemIndex <> -1 then
    64     Core.CoolTranslator1.Language := TLanguage(ComboBoxLanguage.Items.Objects[ComboBoxLanguage.ItemIndex]);
     64    Core.Translator1.Language := TLanguage(ComboBoxLanguage.Items.Objects[ComboBoxLanguage.ItemIndex]);
    6565end;
    6666
  • trunk/Languages/MyData.cs.po

    r24 r25  
    2929msgstr "Ukončit"
    3030
     31#: tcore.applicationinfo1.description
     32msgid "Customizable database storage"
     33msgstr ""
     34
    3135#: tcore.apreferences.caption
    3236msgctxt "tcore.apreferences.caption"
     
    3438msgstr "Předvolby"
    3539
    36 #: tformabout.buttonclose.caption
    37 msgid "Close"
    38 msgstr "Zavřít"
    39 
    40 #: tformabout.buttonhomepage.caption
    41 msgid "Home page"
    42 msgstr "Domovská stránka"
    43 
    44 #: tformabout.caption
    45 msgctxt "tformabout.caption"
    46 msgid "About"
    47 msgstr "O aplikaci"
    48 
    49 #: tformabout.labelcontent.caption
    50 msgid "   "
    51 msgstr "   "
    52 
    53 #: tformconnect.buttoncancel.caption
    54 #, fuzzy
    55 msgctxt "tformconnect.buttoncancel.caption"
    56 msgid "Cancel"
    57 msgstr "Zrušit"
    58 
    59 #: tformconnect.buttonok.caption
    60 #, fuzzy
    61 msgctxt "tformconnect.buttonok.caption"
    62 msgid "Ok"
    63 msgstr "Ok"
    64 
    65 #: tformconnect.buttonxmlbrowse.caption
    66 msgid "Browse"
    67 msgstr "Procházet"
    68 
    69 #: tformconnect.caption
    70 msgid "Connection parameters:"
    71 msgstr "Parametry spojení:"
    72 
    73 #: tformconnect.label1.caption
    74 #, fuzzy
    75 msgctxt "tformconnect.label1.caption"
    76 msgid "Name:"
    77 msgstr "Jméno:"
    78 
    79 #: tformconnect.label2.caption
    80 msgid "Database engine:"
    81 msgstr "Databázový systém:"
    82 
    83 #: tformconnect.label3.caption
    84 msgid "Xml file:"
    85 msgstr "Xml soubor:"
    86 
    87 #: tformconnect.label4.caption
    88 msgid "Host:"
    89 msgstr "Hostitel:"
    90 
    91 #: tformconnect.label5.caption
    92 msgid "Port:"
    93 msgstr "Port:"
    94 
    95 #: tformconnect.tabsheetregistry.caption
    96 msgid "TabSheetRegistry"
    97 msgstr ""
    98 
    99 #: tformconnect.tabsheetsqlite.caption
    100 msgid "TabSheetSqlite"
    101 msgstr ""
    102 
    103 #: tformdatabases.aadd.caption
    104 msgid "New"
    105 msgstr "Nová"
    106 
    107 #: tformdatabases.amodify.caption
    108 msgctxt "tformdatabases.amodify.caption"
    109 msgid "Modify"
    110 msgstr "Upravit"
    111 
    112 #: tformdatabases.aopen.caption
    113 msgid "Open"
    114 msgstr "Otevřít"
    115 
    116 #: tformdatabases.aremove.caption
    117 msgctxt "tformdatabases.aremove.caption"
    118 msgid "Remove"
    119 msgstr "Odstranit"
    120 
    121 #: tformdatabases.caption
    122 #, fuzzy
    123 #| msgid "Databases"
    124 msgid "Connection profiles"
    125 msgstr "Databáze"
    126 
    127 #: tformdatabases.listview1.columns[0].caption
    128 msgctxt "tformdatabases.listview1.columns[0].caption"
    129 msgid "Name"
    130 msgstr "Jméno"
    131 
    132 #: tformdatabases.listview1.columns[1].caption
    133 msgctxt "tformdatabases.listview1.columns[1].caption"
    134 msgid "Type"
    135 msgstr "Typ"
    136 
    137 #: tformdatabases.listview1.columns[2].caption
    138 msgid "Connection string"
    139 msgstr "Připojovací řetězec"
    140 
    14140#: tformfield.buttoncancel.caption
    14241msgctxt "tformfield.buttoncancel.caption"
     
    275174msgstr ""
    276175
    277 #: tformpreferences.buttoncancel.caption
    278 msgctxt "tformpreferences.buttoncancel.caption"
    279 msgid "Cancel"
    280 msgstr "Zrušít"
    281 
    282 #: tformpreferences.buttonsave.caption
    283 msgctxt "tformpreferences.buttonsave.caption"
    284 msgid "Save"
    285 msgstr "Uložit"
    286 
    287 #: tformpreferences.caption
    288 msgctxt "tformpreferences.caption"
    289 msgid "Preferences"
    290 msgstr "Předvolby"
    291 
    292 #: tformpreferences.checkboxrememberdatabase.caption
    293 msgid "Remember database"
    294 msgstr "Pamatovat si databázi"
    295 
    296 #: tformpreferences.label1.caption
    297 msgid "Language:"
    298 msgstr "Jazyk:"
    299 
    300176#: tformrecord.acancel.caption
    301177msgctxt "tformrecord.acancel.caption"
     
    319195
    320196#: tformrecord.caption
    321 msgid "Record"
     197#, fuzzy
     198#| msgid "Record"
     199msgid "FormRecord"
    322200msgstr "Záznam"
    323201
     
    352230msgstr "Záznamy"
    353231
    354 #: tformtables.aadd.caption
    355 msgctxt "tformtables.aadd.caption"
    356 msgid "Add"
    357 msgstr "Přidat"
    358 
    359 #: tformtables.amodify.caption
    360 msgctxt "tformtables.amodify.caption"
    361 msgid "Modify"
    362 msgstr "Upravit"
    363 
    364 #: tformtables.aremove.caption
    365 msgctxt "tformtables.aremove.caption"
    366 msgid "Remove"
    367 msgstr "Odstranit"
    368 
    369 #: tformtables.ashowfields.caption
    370 msgid "Design"
    371 msgstr "Návrh"
    372 
    373 #: tformtables.ashowrecords.caption
    374 msgctxt "tformtables.ashowrecords.caption"
    375 msgid "Records"
    376 msgstr "Záznamy"
    377 
    378 #: tformtables.caption
    379 msgid "Tables"
    380 msgstr "Tabulky"
    381 
    382 #: tformtables.listview1.columns[0].caption
    383 msgctxt "tformtables.listview1.columns[0].caption"
    384 msgid "Name"
    385 msgstr "Jméno"
    386 
    387 #: tformtables.listview1.columns[1].caption
    388 msgctxt "tformtables.listview1.columns[1].caption"
    389 msgid "Records"
    390 msgstr "Záznamy"
    391 
    392 #: ucore.stypeboolean
    393 msgctxt "ucore.stypeboolean"
    394 msgid "Boolean"
    395 msgstr "Logická hodnota"
    396 
    397 #: ucore.stypedate
    398 msgctxt "ucore.stypedate"
    399 msgid "Date"
    400 msgstr "Datum"
    401 
    402 #: ucore.stypedatetime
    403 msgctxt "ucore.stypedatetime"
    404 msgid "Date and time"
    405 msgstr "Datum a čas"
    406 
    407 #: ucore.stypefloat
    408 msgctxt "ucore.stypefloat"
    409 msgid "Float"
    410 msgstr "Desetinné číslo"
    411 
    412 #: ucore.stypeimage
    413 msgctxt "ucore.stypeimage"
    414 msgid "Image"
    415 msgstr "Obrázek"
    416 
    417 #: ucore.stypeinteger
    418 msgctxt "ucore.stypeinteger"
    419 msgid "Integer"
    420 msgstr "Celé číslo"
    421 
    422 #: ucore.stypemapposition
    423 msgctxt "ucore.stypemapposition"
    424 msgid "Map position"
    425 msgstr "Pozice na mapě"
    426 
    427 #: ucore.stypereference
    428 msgctxt "ucore.stypereference"
    429 msgid "Reference"
    430 msgstr "Odkaz"
    431 
    432 #: ucore.stypestring
    433 msgctxt "ucore.stypestring"
    434 msgid "String"
    435 msgstr "Řetězec"
    436 
    437 #: ucore.stypetime
    438 msgctxt "ucore.stypetime"
    439 msgid "Time"
    440 msgstr "Čas"
    441 
    442232#: udatabase.sfieldnotfound
     233#, object-pascal-format
    443234msgid "Field %s not found"
    444235msgstr ""
     
    505296
    506297#: uenginexml.scolumnnotfoundintable
     298#, object-pascal-format, fuzzy, badformat
    507299msgid "Column %s not found in table %s"
    508300msgstr "Sloupec %d nenalezen v tabulce %s"
    509301
    510302#: uenginexml.sfieldnotfound
     303#, object-pascal-format
    511304msgid "Table field %s not found"
    512305msgstr ""
    513306
    514307#: uenginexml.stablenotfound
     308#, object-pascal-format
    515309msgid "Table %s not found"
    516310msgstr "Tabulka %s nenalezena"
    517311
    518312#: uenginexml.sunsupportedsqlcommand
     313#, object-pascal-format
    519314msgid "Unsupported SQL command: %s"
    520315msgstr "Nepodporovaný SQL příkaz: %s"
     
    524319msgstr "Špatný formát souboru"
    525320
    526 #: uformabout.slicense
    527 msgid "License"
    528 msgstr "Licence"
    529 
    530 #: uformabout.sreleasedate
    531 msgid "Release date"
    532 msgstr "Datum uvolnění"
    533 
    534 #: uformabout.sversion
    535 msgid "Version"
    536 msgstr "Verze"
    537 
    538321#: uformfields.sfieldsnotset
    539322msgid "Fields not set"
     
    545328
    546329#: uformfields.stablefields
     330#, object-pascal-format
    547331msgid "Table fields - %s"
    548332msgstr "Políčka tabulky - %s"
     
    569353
    570354#: uformtables.sremovetableconfirm
     355#, object-pascal-format
    571356msgid "Do you want to really remove table '%s' ?"
    572357msgstr "Opravdu chcete odstranit tabulku '%s'?"
     
    576361msgstr "Chyba převodu řetězce na IP adresu"
    577362
    578 #: usqldatabase.sdatabasequeryerror
    579 msgid "Database query error: \"%s\""
    580 msgstr "Chyba požadavku databáze: \"%s\""
    581 
  • trunk/MyData.lpi

    r22 r25  
    22<CONFIG>
    33  <ProjectOptions>
    4     <Version Value="10"/>
     4    <Version Value="12"/>
    55    <General>
     6      <Flags>
     7        <CompatibilityMode Value="True"/>
     8      </Flags>
    69      <SessionStorage Value="InProjectDir"/>
    7       <MainUnit Value="0"/>
    810      <Title Value="MyData"/>
     11      <Scaled Value="True"/>
    912      <ResourceType Value="res"/>
    1013      <UseXPManifest Value="True"/>
     
    6871    </PublishOptions>
    6972    <RunParams>
    70       <local>
    71         <FormatVersion Value="1"/>
    72       </local>
     73      <FormatVersion Value="2"/>
     74      <Modes Count="1">
     75        <Mode0 Name="default"/>
     76      </Modes>
    7377    </RunParams>
    74     <RequiredPackages Count="6">
     78    <RequiredPackages Count="5">
    7579      <Item1>
    7680        <PackageName Value="Database"/>
     
    8286      </Item2>
    8387      <Item3>
    84         <PackageName Value="CoolTranslator"/>
    85         <DefaultFilename Value="Packages/CoolTranslator/CoolTranslator.lpk" Prefer="True"/>
     88        <PackageName Value="FCL"/>
    8689      </Item3>
    8790      <Item4>
    88         <PackageName Value="FCL"/>
     91        <PackageName Value="Common"/>
     92        <DefaultFilename Value="Packages/Common/Common.lpk" Prefer="True"/>
    8993      </Item4>
    9094      <Item5>
    91         <PackageName Value="Common"/>
    92         <DefaultFilename Value="Packages/Common/Common.lpk" Prefer="True"/>
     95        <PackageName Value="LCL"/>
    9396      </Item5>
    94       <Item6>
    95         <PackageName Value="LCL"/>
    96       </Item6>
    9797    </RequiredPackages>
    9898    <Units Count="21">
  • trunk/MyData.lpr

    r23 r25  
    88  {$ENDIF}
    99  Interfaces, // this includes the LCL widgetset
    10   Forms, UFormTables, UCore, Common, CoolTranslator,
     10  Forms, UFormTables, UCore, Common,
    1111  UFormTable, UFormRecords, UFormRecord, UFormFields, UFormField,
    1212  TemplateGenerics, UFormMain, SysUtils,
     
    2828
    2929  RequireDerivedFormResource := True;
     30  Application.Scaled:=True;
    3031  Application.Initialize;
    3132  Application.CreateForm(TCore, Core);
  • trunk/Packages/Common/Common.lpk

    r15 r25  
    11<?xml version="1.0" encoding="UTF-8"?>
    22<CONFIG>
    3   <Package Version="4">
     3  <Package Version="5">
    44    <PathDelim Value="\"/>
    55    <Name Value="Common"/>
     
    3333      <Other>
    3434        <CompilerMessages>
    35           <IgnoredMessages idx5024="True"/>
     35          <IgnoredMessages idx6058="True" idx5071="True" idx5024="True" idx3124="True" idx3123="True"/>
    3636        </CompilerMessages>
    3737      </Other>
    3838    </CompilerOptions>
    39     <Description Value="Various libraries"/>
    40     <License Value="GNU/GPL"/>
    41     <Version Minor="7"/>
    42     <Files Count="21">
     39    <Description Value="Common package with various useful units.
     40
     41Source: https://svn.zdechov.net/PascalClassLibrary/Common/"/>
     42    <License Value="Copy left."/>
     43    <Version Minor="10"/>
     44    <Files Count="32">
    4345      <Item1>
    4446        <Filename Value="StopWatch.pas"/>
     
    6062      <Item5>
    6163        <Filename Value="UPrefixMultiplier.pas"/>
     64        <HasRegisterProc Value="True"/>
    6265        <UnitName Value="UPrefixMultiplier"/>
    6366      </Item5>
     
    134137        <UnitName Value="UTheme"/>
    135138      </Item21>
     139      <Item22>
     140        <Filename Value="UStringTable.pas"/>
     141        <UnitName Value="UStringTable"/>
     142      </Item22>
     143      <Item23>
     144        <Filename Value="UMetaCanvas.pas"/>
     145        <UnitName Value="UMetaCanvas"/>
     146      </Item23>
     147      <Item24>
     148        <Filename Value="UGeometric.pas"/>
     149        <UnitName Value="UGeometric"/>
     150      </Item24>
     151      <Item25>
     152        <Filename Value="UTranslator.pas"/>
     153        <HasRegisterProc Value="True"/>
     154        <UnitName Value="UTranslator"/>
     155      </Item25>
     156      <Item26>
     157        <Filename Value="ULanguages.pas"/>
     158        <UnitName Value="ULanguages"/>
     159      </Item26>
     160      <Item27>
     161        <Filename Value="UFormAbout.pas"/>
     162        <UnitName Value="UFormAbout"/>
     163      </Item27>
     164      <Item28>
     165        <Filename Value="UAboutDialog.pas"/>
     166        <HasRegisterProc Value="True"/>
     167        <UnitName Value="UAboutDialog"/>
     168      </Item28>
     169      <Item29>
     170        <Filename Value="UPixelPointer.pas"/>
     171        <UnitName Value="UPixelPointer"/>
     172      </Item29>
     173      <Item30>
     174        <Filename Value="UDataFile.pas"/>
     175        <UnitName Value="UDataFile"/>
     176      </Item30>
     177      <Item31>
     178        <Filename Value="UTestCase.pas"/>
     179        <UnitName Value="UTestCase"/>
     180      </Item31>
     181      <Item32>
     182        <Filename Value="UGenerics.pas"/>
     183        <UnitName Value="UGenerics"/>
     184      </Item32>
    136185    </Files>
     186    <CompatibilityMode Value="True"/>
    137187    <i18n>
    138188      <EnableI18N Value="True"/>
     
    140190      <EnableI18NForLFM Value="True"/>
    141191    </i18n>
    142     <RequiredPkgs Count="3">
     192    <RequiredPkgs Count="2">
    143193      <Item1>
    144194        <PackageName Value="LCL"/>
    145195      </Item1>
    146196      <Item2>
    147         <PackageName Value="TemplateGenerics"/>
    148       </Item2>
    149       <Item3>
    150197        <PackageName Value="FCL"/>
    151198        <MinVersion Major="1" Valid="True"/>
    152       </Item3>
     199      </Item2>
    153200    </RequiredPkgs>
    154201    <UsageOptions>
  • trunk/Packages/Common/Common.pas

    r15 r25  
    55unit Common;
    66
     7{$warn 5023 off : no warning about unused units}
    78interface
    89
    910uses
    10   StopWatch, UCommon, UDebugLog, UDelay, UPrefixMultiplier, UURI, UThreading,
    11   UMemory, UResetableThread, UPool, ULastOpenedList, URegistry,
    12   UJobProgressView, UXMLUtils, UApplicationInfo, USyncCounter, UListViewSort,
    13   UPersistentForm, UFindFile, UScaleDPI, UTheme, LazarusPackageIntf;
     11  StopWatch, UCommon, UDebugLog, UDelay, UPrefixMultiplier, UURI, UThreading,
     12  UMemory, UResetableThread, UPool, ULastOpenedList, URegistry,
     13  UJobProgressView, UXMLUtils, UApplicationInfo, USyncCounter, UListViewSort,
     14  UPersistentForm, UFindFile, UScaleDPI, UTheme, UStringTable, UMetaCanvas,
     15  UGeometric, UTranslator, ULanguages, UFormAbout, UAboutDialog,
     16  UPixelPointer, UDataFile, UTestCase, UGenerics, LazarusPackageIntf;
    1417
    1518implementation
     
    1821begin
    1922  RegisterUnit('UDebugLog', @UDebugLog.Register);
     23  RegisterUnit('UPrefixMultiplier', @UPrefixMultiplier.Register);
    2024  RegisterUnit('ULastOpenedList', @ULastOpenedList.Register);
    2125  RegisterUnit('UJobProgressView', @UJobProgressView.Register);
     
    2630  RegisterUnit('UScaleDPI', @UScaleDPI.Register);
    2731  RegisterUnit('UTheme', @UTheme.Register);
     32  RegisterUnit('UTranslator', @UTranslator.Register);
     33  RegisterUnit('UAboutDialog', @UAboutDialog.Register);
    2834end;
    2935
  • trunk/Packages/Common/Languages/UThreading.cs.po

    r11 r25  
    1111
    1212#: uthreading.scurrentthreadnotfound
     13#, object-pascal-format
    1314msgid "Current thread ID %d not found in virtual thread list."
    1415msgstr "Aktuální vlákno ID %d nenalezeno v seznamu virtuálních vláken."
  • trunk/Packages/Common/StopWatch.pas

    r10 r25  
    55
    66uses
    7   {$IFDEF Windows}Windows,{$ENDIF}
     7  {$IFDEF WINDOWS}Windows,{$ENDIF}
    88  SysUtils, DateUtils;
    99
     
    3232  end;
    3333
     34
    3435implementation
    3536
     
    4041  fIsRunning := False;
    4142
    42   {$IFDEF Windows}
     43  {$IFDEF WINDOWS}
    4344  fIsHighResolution := QueryPerformanceFrequency(fFrequency) ;
    4445  {$ELSE}
  • trunk/Packages/Common/UApplicationInfo.pas

    r20 r25  
    11unit UApplicationInfo;
    2 
    3 {$mode delphi}
    42
    53interface
    64
    75uses
    8   SysUtils, Classes, Forms, URegistry, LCLType;
     6  SysUtils, Classes, Forms, URegistry, Controls, Graphics, LCLType;
    97
    108type
     
    1513  private
    1614    FDescription: TTranslateString;
     15    FIcon: TBitmap;
    1716    FIdentification: Byte;
    1817    FLicense: string;
     
    3332  public
    3433    constructor Create(AOwner: TComponent); override;
     34    destructor Destroy; override;
    3535    property Version: string read GetVersion;
    3636    function GetRegistryContext: TRegistryContext;
     
    4747    property EmailContact: string read FEmailContact write FEmailContact;
    4848    property AppName: string read FAppName write FAppName;
    49     property Description: string read FDescription write FDescription;
     49    property Description: TTranslateString read FDescription write FDescription;
    5050    property ReleaseDate: TDateTime read FReleaseDate write FReleaseDate;
    5151    property RegistryKey: string read FRegistryKey write FRegistryKey;
    5252    property RegistryRoot: TRegistryRoot read FRegistryRoot write FRegistryRoot;
    5353    property License: string read FLicense write FLicense;
     54    property Icon: TBitmap read FIcon write FIcon;
    5455  end;
    5556
    5657procedure Register;
    5758
     59
    5860implementation
    59                        
     61
    6062procedure Register;
    6163begin
     
    7476constructor TApplicationInfo.Create(AOwner: TComponent);
    7577begin
    76   inherited Create(AOwner);
     78  inherited;
    7779  FVersionMajor := 1;
    7880  FIdentification := 1;
     
    8082  FRegistryKey := '\Software\' + FAppName;
    8183  FRegistryRoot := rrKeyCurrentUser;
     84  FIcon := TBitmap.Create;
     85end;
     86
     87destructor TApplicationInfo.Destroy;
     88begin
     89  FreeAndNil(FIcon);
     90  inherited;
    8291end;
    8392
  • trunk/Packages/Common/UCommon.pas

    r15 r25  
    11unit UCommon;
    22
    3 {$mode delphi}
    4 
    53interface
    64
    75uses
    8   {$ifdef Windows}Windows,{$endif}
    9   {$ifdef Linux}baseunix,{$endif}
    10   Classes, SysUtils, StrUtils, Dialogs, Process, LCLIntf,
    11   FileUtil; //, ShFolder, ShellAPI;
     6  {$IFDEF WINDOWS}Windows,{$ENDIF}
     7  {$IFDEF UNIX}baseunix,{$ENDIF}
     8  Classes, SysUtils, StrUtils, Dialogs, Process, LCLIntf, Graphics,
     9  FileUtil, Generics.Collections; //, ShFolder, ShellAPI;
    1210
    1311type
    1412  TArrayOfByte = array of Byte;
    15   TArrayOfString = array of string;
    1613  TExceptionEvent = procedure(Sender: TObject; E: Exception) of object;
    1714
     
    2825    unfDNSDomainName = 11);
    2926
     27  TFilterMethod = function (FileName: string): Boolean of object;
     28  TFileNameMethod = procedure (FileName: string) of object;
     29
    3030var
    3131  ExceptionHandler: TExceptionEvent;
    3232  DLLHandle1: HModule;
    3333
    34 {$IFDEF Windows}
    35   GetUserNameEx: procedure (NameFormat: DWORD;
    36     lpNameBuffer: LPSTR; nSize: PULONG); stdcall;
    37 {$ENDIF}
    38 
    39 function IntToBin(Data: Int64; Count: Byte): string;
     34  {$IFDEF WINDOWS}
     35    GetUserNameEx: procedure (NameFormat: DWORD;
     36      lpNameBuffer: LPSTR; nSize: PULONG); stdcall;
     37  {$ENDIF}
     38
     39const
     40  clLightBlue = TColor($FF8080);
     41  clLightGreen = TColor($80FF80);
     42  clLightRed = TColor($8080FF);
     43
     44function AddLeadingZeroes(const aNumber, Length : integer) : string;
    4045function BinToInt(BinStr: string): Int64;
    41 function TryHexToInt(Data: string; var Value: Integer): Boolean;
    42 function TryBinToInt(Data: string; var Value: Integer): Boolean;
    4346function BinToHexString(Source: AnsiString): string;
    4447//function DelTree(DirName : string): Boolean;
     
    4649function BCDToInt(Value: Byte): Byte;
    4750function CompareByteArray(Data1, Data2: TArrayOfByte): Boolean;
     51procedure CopyStringArray(Dest: TStringArray; Source: array of string);
     52function CombinePaths(Path1, Path2: string): string;
     53function ComputerName: string;
     54procedure DeleteFiles(APath, AFileSpec: string);
     55function Explode(Separator: Char; Data: string): TStringArray;
     56procedure ExecuteProgram(Executable: string; Parameters: array of string);
     57procedure FileDialogUpdateFilterFileType(FileDialog: TOpenDialog);
     58procedure FreeThenNil(var Obj);
     59function GetDirCount(Dir: string): Integer;
    4860function GetUserName: string;
    49 function LoggedOnUserNameEx(Format: TUserNameFormat): string;
    50 function SplitString(var Text: string; Count: Word): string;
    5161function GetBitCount(Variable: QWord; MaxIndex: Integer): Integer;
    5262function GetBit(Variable: QWord; Index: Byte): Boolean;
     63function GetStringPart(var Text: string; Separator: string): string;
     64function GenerateNewName(OldName: string): string;
     65function GetFileFilterItemExt(Filter: string; Index: Integer): string;
     66function IntToBin(Data: Int64; Count: Byte): string;
     67function Implode(Separator: Char; List: TList<string>): string;
     68function LastPos(const SubStr: String; const S: String): Integer;
     69function LoadFileToStr(const FileName: TFileName): AnsiString;
     70function LoggedOnUserNameEx(Format: TUserNameFormat): string;
     71function MergeArray(A, B: array of string): TStringArray;
     72function OccurenceOfChar(What: Char; Where: string): Integer;
     73procedure OpenWebPage(URL: string);
     74procedure OpenEmail(Email: string);
     75procedure OpenFileInShell(FileName: string);
     76function PosFromIndex(SubStr: string; Text: string;
     77  StartIndex: Integer): Integer;
     78function PosFromIndexReverse(SubStr: string; Text: string;
     79  StartIndex: Integer): Integer;
     80function RemoveQuotes(Text: string): string;
     81procedure SaveStringToFile(S, FileName: string);
    5382procedure SetBit(var Variable: Int64; Index: Byte; State: Boolean); overload;
    5483procedure SetBit(var Variable: QWord; Index: Byte; State: Boolean); overload;
    5584procedure SetBit(var Variable: Cardinal; Index: Byte; State: Boolean); overload;
    5685procedure SetBit(var Variable: Word; Index: Byte; State: Boolean); overload;
    57 function AddLeadingZeroes(const aNumber, Length : integer) : string;
    58 function LastPos(const SubStr: String; const S: String): Integer;
    59 function GenerateNewName(OldName: string): string;
    60 function GetFileFilterItemExt(Filter: string; Index: Integer): string;
    61 procedure FileDialogUpdateFilterFileType(FileDialog: TOpenDialog);
    62 procedure DeleteFiles(APath, AFileSpec: string);
    63 procedure OpenWebPage(URL: string);
    64 procedure OpenFileInShell(FileName: string);
    65 procedure ExecuteProgram(Executable: string; Parameters: array of string);
    66 procedure FreeThenNil(var Obj);
    67 function RemoveQuotes(Text: string): string;
    68 function ComputerName: string;
    69 function OccurenceOfChar(What: Char; Where: string): Integer;
    70 function GetDirCount(Dir: string): Integer;
    71 function MergeArray(A, B: array of string): TArrayOfString;
    72 function LoadFileToStr(const FileName: TFileName): AnsiString;
     86procedure SearchFiles(AList: TStrings; Dir: string;
     87  FilterMethod: TFilterMethod = nil; FileNameMethod: TFileNameMethod = nil);
     88function SplitString(var Text: string; Count: Word): string;
     89function StripTags(const S: string): string;
     90function TryHexToInt(Data: string; out Value: Integer): Boolean;
     91function TryBinToInt(Data: string; out Value: Integer): Boolean;
     92procedure SortStrings(Strings: TStrings);
    7393
    7494
     
    98118  I: Integer;
    99119begin
     120  Result := '';
    100121  for I := 1 to Length(Source) do begin
    101122    Result := Result + LowerCase(IntToHex(Ord(Source[I]), 2));
     
    230251end;
    231252
    232 function TryHexToInt(Data: string; var Value: Integer): Boolean;
     253function TryHexToInt(Data: string; out Value: Integer): Boolean;
    233254var
    234255  I: Integer;
     
    246267end;
    247268
    248 function TryBinToInt(Data: string; var Value: Integer): Boolean;
     269function TryBinToInt(Data: string; out Value: Integer): Boolean;
    249270var
    250271  I: Integer;
     
    274295end;
    275296
    276 function Explode(Separator: char; Data: string): TArrayOfString;
    277 begin
    278   SetLength(Result, 0);
    279   while Pos(Separator, Data) > 0 do begin
     297function Explode(Separator: Char; Data: string): TStringArray;
     298var
     299  Index: Integer;
     300begin
     301  Result := Default(TStringArray);
     302  repeat
     303    Index := Pos(Separator, Data);
     304    if Index > 0 then begin
     305      SetLength(Result, Length(Result) + 1);
     306      Result[High(Result)] := Copy(Data, 1, Index - 1);
     307      Delete(Data, 1, Index);
     308    end else Break;
     309  until False;
     310  if Data <> '' then begin
    280311    SetLength(Result, Length(Result) + 1);
    281     Result[High(Result)] := Copy(Data, 1, Pos(Separator, Data) - 1);
    282     Delete(Data, 1, Pos(Separator, Data));
    283   end;
    284   SetLength(Result, Length(Result) + 1);
    285   Result[High(Result)] := Data;
    286 end;
    287 
    288 {$IFDEF Windows}
     312    Result[High(Result)] := Data;
     313  end;
     314end;
     315
     316function Implode(Separator: Char; List: TList<string>): string;
     317var
     318  I: Integer;
     319begin
     320  Result := '';
     321  for I := 0 to List.Count - 1 do begin
     322    Result := Result + List[I];
     323    if I < List.Count - 1 then Result := Result + Separator;
     324  end;
     325end;
     326
     327{$IFDEF WINDOWS}
    289328function GetUserName: string;
    290329const
     
    294333begin
    295334  L := MAX_USERNAME_LENGTH + 2;
     335  Result := Default(string);
    296336  SetLength(Result, L);
    297337  if Windows.GetUserName(PChar(Result), L) and (L > 0) then begin
     
    307347  end;
    308348end;
    309 {$endif}
     349{$ENDIF}
    310350
    311351function ComputerName: string;
    312 {$ifdef mswindows}
     352{$IFDEF WINDOWS}
    313353const
    314354 INFO_BUFFER_SIZE = 32767;
     
    325365  end;
    326366end;
    327 {$endif}
    328 {$ifdef unix}
     367{$ENDIF}
     368{$IFDEF UNIX}
    329369var
    330370  Name: UtsName;
    331371begin
     372  Name := Default(UtsName);
    332373  fpuname(Name);
    333374  Result := Name.Nodename;
    334375end;
    335 {$endif}
    336 
    337 {$ifdef windows}
     376{$ENDIF}
     377
     378{$IFDEF WINDOWS}
    338379function LoggedOnUserNameEx(Format: TUserNameFormat): string;
    339380const
     
    413454procedure LoadLibraries;
    414455begin
    415   {$IFDEF Windows}
     456  {$IFDEF WINDOWS}
    416457  DLLHandle1 := LoadLibrary('secur32.dll');
    417458  if DLLHandle1 <> 0 then
     
    424465procedure FreeLibraries;
    425466begin
    426   {$IFDEF Windows}
     467  {$IFDEF WINDOWS}
    427468  if DLLHandle1 <> 0 then FreeLibrary(DLLHandle1);
    428469  {$ENDIF}
     
    457498end;
    458499
     500procedure OpenEmail(Email: string);
     501begin
     502  OpenURL('mailto:' + Email);
     503end;
     504
    459505procedure OpenFileInShell(FileName: string);
    460506begin
     
    485531end;
    486532
    487 function MergeArray(A, B: array of string): TArrayOfString;
    488 var
    489   I: Integer;
    490 begin
     533function MergeArray(A, B: array of string): TStringArray;
     534var
     535  I: Integer;
     536begin
     537  Result := Default(TStringArray);
    491538  SetLength(Result, Length(A) + Length(B));
    492539  for I := 0 to Length(A) - 1 do
     
    514561end;
    515562
     563function DefaultSearchFilter(const FileName: string): Boolean;
     564begin
     565  Result := True;
     566end;
     567
     568procedure SaveStringToFile(S, FileName: string);
     569var
     570  F: TextFile;
     571begin
     572  AssignFile(F, FileName);
     573  try
     574    ReWrite(F);
     575    Write(F, S);
     576  finally
     577    CloseFile(F);
     578  end;
     579end;
     580
     581procedure SearchFiles(AList: TStrings; Dir: string;
     582  FilterMethod: TFilterMethod = nil; FileNameMethod: TFileNameMethod = nil);
     583var
     584  SR: TSearchRec;
     585begin
     586  Dir := IncludeTrailingPathDelimiter(Dir);
     587  if FindFirst(Dir + '*', faAnyFile, SR) = 0 then
     588    try
     589      repeat
     590        if (SR.Name = '.') or (SR.Name = '..') or (Assigned(FilterMethod) and (not FilterMethod(SR.Name) or
     591          not FilterMethod(Copy(Dir, 3, Length(Dir)) + SR.Name))) then Continue;
     592        if Assigned(FileNameMethod) then
     593          FileNameMethod(Dir + SR.Name);
     594        AList.Add(Dir + SR.Name);
     595        if (SR.Attr and faDirectory) <> 0 then
     596          SearchFiles(AList, Dir + SR.Name, FilterMethod);
     597      until FindNext(SR) <> 0;
     598    finally
     599      FindClose(SR);
     600    end;
     601end;
     602
     603function GetStringPart(var Text: string; Separator: string): string;
     604var
     605  P: Integer;
     606begin
     607  P := Pos(Separator, Text);
     608  if P > 0 then begin
     609    Result := Copy(Text, 1, P - 1);
     610    Delete(Text, 1, P - 1 + Length(Separator));
     611  end else begin
     612    Result := Text;
     613    Text := '';
     614  end;
     615  Result := Trim(Result);
     616  Text := Trim(Text);
     617end;
     618
     619function StripTags(const S: string): string;
     620var
     621  Len: Integer;
     622
     623  function ReadUntil(const ReadFrom: Integer; const C: Char): Integer;
     624  var
     625    J: Integer;
     626  begin
     627    for J := ReadFrom to Len do
     628      if (S[j] = C) then
     629      begin
     630        Result := J;
     631        Exit;
     632      end;
     633    Result := Len + 1;
     634  end;
     635
     636var
     637  I, APos: Integer;
     638begin
     639  Len := Length(S);
     640  I := 0;
     641  Result := '';
     642  while (I <= Len) do begin
     643    Inc(I);
     644    APos := ReadUntil(I, '<');
     645    Result := Result + Copy(S, I, APos - i);
     646    I := ReadUntil(APos + 1, '>');
     647  end;
     648end;
     649
     650function PosFromIndex(SubStr: string; Text: string;
     651  StartIndex: Integer): Integer;
     652var
     653  I, MaxLen: SizeInt;
     654  Ptr: PAnsiChar;
     655begin
     656  Result := 0;
     657  if (StartIndex < 1) or (StartIndex > Length(Text) - Length(SubStr)) then Exit;
     658  if Length(SubStr) > 0 then begin
     659    MaxLen := Length(Text) - Length(SubStr) + 1;
     660    I := StartIndex;
     661    Ptr := @Text[StartIndex];
     662    while (I <= MaxLen) do begin
     663      if (SubStr[1] = Ptr^) and (CompareByte(Substr[1], Ptr^, Length(SubStr)) = 0) then begin
     664        Result := I;
     665        Exit;
     666      end;
     667      Inc(I);
     668      Inc(Ptr);
     669    end;
     670  end;
     671end;
     672
     673function PosFromIndexReverse(SubStr: string; Text: string;
     674  StartIndex: Integer): Integer;
     675var
     676  I: SizeInt;
     677  Ptr: PAnsiChar;
     678begin
     679  Result := 0;
     680  if (StartIndex < 1) or (StartIndex > Length(Text)) then Exit;
     681  if Length(SubStr) > 0 then begin
     682    I := StartIndex;
     683    Ptr := @Text[StartIndex];
     684    while (I > 0) do begin
     685      if (SubStr[1] = Ptr^) and (CompareByte(Substr[1], Ptr^, Length(SubStr)) = 0) then begin
     686        Result := I;
     687        Exit;
     688      end;
     689      Dec(I);
     690      Dec(Ptr);
     691    end;
     692  end;
     693end;
     694
     695procedure CopyStringArray(Dest: TStringArray; Source: array of string);
     696var
     697  I: Integer;
     698begin
     699  SetLength(Dest, Length(Source));
     700  for I := 0 to Length(Dest) - 1 do
     701    Dest[I] := Source[I];
     702end;
     703
     704function CombinePaths(Path1, Path2: string): string;
     705begin
     706  Result := Path1;
     707  if Result <> '' then Result := Result + DirectorySeparator + Path2
     708    else Result := Path2;
     709end;
     710
     711procedure SortStrings(Strings: TStrings);
     712var
     713  Tmp: TStringList;
     714begin
     715  Strings.BeginUpdate;
     716  try
     717    if Strings is TStringList then begin
     718      TStringList(Strings).Sort;
     719    end else begin
     720      Tmp := TStringList.Create;
     721      try
     722        Tmp.Assign(Strings);
     723        Tmp.Sort;
     724        Strings.Assign(Tmp);
     725      finally
     726        Tmp.Free;
     727      end;
     728    end;
     729  finally
     730    Strings.EndUpdate;
     731  end;
     732end;
    516733
    517734
  • trunk/Packages/Common/UDebugLog.pas

    r15 r25  
    11unit UDebugLog;
    2 
    3 {$mode delphi}
    42
    53interface
    64
    75uses
    8   Classes, SysUtils, FileUtil, SpecializedList, SyncObjs;
     6  Classes, SysUtils, FileUtil, Generics.Collections, SyncObjs;
    97
    108type
     
    1513    Group: string;
    1614    Text: string;
     15  end;
     16
     17  TDebugLogItems = class(TObjectList<TDebugLogItem>)
    1718  end;
    1819
     
    2930    procedure SetMaxCount(const AValue: Integer);
    3031  public
    31     Items: TListObject;
     32    Items: TDebugLogItems;
    3233    Lock: TCriticalSection;
    3334    procedure Add(Text: string; Group: string = '');
     
    4445
    4546procedure Register;
     47
    4648
    4749implementation
     
    104106    if ExtractFileDir(FileName) <> '' then
    105107      ForceDirectories(ExtractFileDir(FileName));
    106     if FileExists(FileName) then LogFile := TFileStream.Create(UTF8Decode(FileName), fmOpenWrite)
    107       else LogFile := TFileStream.Create(UTF8Decode(FileName), fmCreate);
     108    if FileExists(FileName) then LogFile := TFileStream.Create(FileName, fmOpenWrite)
     109      else LogFile := TFileStream.Create(FileName, fmCreate);
    108110    LogFile.Seek(0, soFromEnd);
    109111    Text := FormatDateTime('hh:nn:ss.zzz', Now) + ': ' + Text + LineEnding;
     
    117119begin
    118120  inherited;
    119   Items := TListObject.Create;
     121  Items := TDebugLogItems.Create;
    120122  Lock := TCriticalSection.Create;
    121123  MaxCount := 100;
     
    126128destructor TDebugLog.Destroy;
    127129begin
    128   Items.Free;
    129   Lock.Free;
     130  FreeAndNil(Items);
     131  FreeAndNil(Lock);
    130132  inherited;
    131133end;
  • trunk/Packages/Common/UDelay.pas

    r10 r25  
    11unit UDelay;
    2 
    3 {$mode delphi}
    42
    53interface
  • trunk/Packages/Common/UFindFile.pas

    r15 r25  
    2424
    2525uses
    26   SysUtils, Classes, Graphics, Controls, Forms, Dialogs, FileCtrl;
     26  SysUtils, Classes, Graphics, Controls, Forms, Dialogs;
    2727
    2828type
     
    3535  private
    3636    s : TStringList;
    37 
    3837    fSubFolder : boolean;
    3938    fAttr: TFileAttrib;
    4039    fPath : string;
    4140    fFileMask : string;
    42 
    4341    procedure SetPath(Value: string);
    4442    procedure FileSearch(const inPath : string);
     
    4644    constructor Create(AOwner: TComponent); override;
    4745    destructor Destroy; override;
    48 
    4946    function SearchForFiles: TStringList;
    5047  published
     
    5956  FilterAll = '*.*';
    6057{$ENDIF}
    61 {$IFDEF LINUX}
     58{$IFDEF UNIX}
    6259  FilterAll = '*';
    6360{$ENDIF}
    6461
    6562procedure Register;
     63
    6664
    6765implementation
     
    8785begin
    8886  s.Free;
    89   inherited Destroy;
     87  inherited;
    9088end;
    9189
     
    117115  Attr := 0;
    118116  if ffaReadOnly in FileAttr then Attr := Attr + faReadOnly;
    119   if ffaHidden in FileAttr then Attr := Attr + faHidden;
    120   if ffaSysFile in FileAttr then Attr := Attr + faSysFile;
    121   if ffaVolumeID in FileAttr then Attr := Attr + faVolumeID;
     117  if ffaHidden in FileAttr then Attr := Attr + 2; //faHidden; use constant to avoid platform warning
     118  if ffaSysFile in FileAttr then Attr := Attr + 4; //faSysFile; use constant to avoid platform warning
     119  // Deprecated: if ffaVolumeID in FileAttr then Attr := Attr + faVolumeID;
    122120  if ffaDirectory in FileAttr then Attr := Attr + faDirectory;
    123121  if ffaArchive in FileAttr then Attr := Attr + faArchive;
    124122  if ffaAnyFile in FileAttr then Attr := Attr + faAnyFile;
    125123
    126   if SysUtils.FindFirst(UTF8Decode(inPath + FileMask), Attr, Rec) = 0 then
     124  if SysUtils.FindFirst(inPath + FileMask, Attr, Rec) = 0 then
    127125  try
    128126    repeat
    129       s.Add(inPath + UTF8Encode(Rec.Name));
     127      s.Add(inPath + Rec.Name);
    130128    until SysUtils.FindNext(Rec) <> 0;
    131129  finally
     
    135133  If not InSubFolders then Exit;
    136134
    137   if SysUtils.FindFirst(UTF8Decode(inPath + FilterAll), faDirectory, Rec) = 0 then
     135  if SysUtils.FindFirst(inPath + FilterAll, faDirectory, Rec) = 0 then
    138136  try
    139137    repeat
    140138      if ((Rec.Attr and faDirectory) > 0) and (Rec.Name <> '.')
    141139      and (Rec.Name <> '..') then
    142         FileSearch(IncludeTrailingBackslash(inPath + UTF8Encode(Rec.Name)));
     140        FileSearch(IncludeTrailingBackslash(inPath + Rec.Name));
    143141    until SysUtils.FindNext(Rec) <> 0;
    144142  finally
  • trunk/Packages/Common/UJobProgressView.lfm

    r15 r25  
    11object FormJobProgressView: TFormJobProgressView
    22  Left = 467
    3   Height = 246
     3  Height = 414
    44  Top = 252
    5   Width = 328
     5  Width = 647
    66  BorderIcons = [biSystemMenu]
    7   ClientHeight = 246
    8   ClientWidth = 328
    9   Font.Height = -11
    10   Font.Name = 'MS Sans Serif'
     7  ClientHeight = 414
     8  ClientWidth = 647
     9  DesignTimePPI = 144
    1110  OnClose = FormClose
    1211  OnCloseQuery = FormCloseQuery
    1312  OnCreate = FormCreate
    14   OnDestroy = FormDestroy
     13  OnHide = FormHide
     14  OnShow = FormShow
    1515  Position = poScreenCenter
    16   LCLVersion = '1.6.0.4'
     16  LCLVersion = '2.2.0.4'
    1717  object PanelOperationsTitle: TPanel
    1818    Left = 0
    19     Height = 24
     19    Height = 38
    2020    Top = 0
    21     Width = 328
     21    Width = 647
    2222    Align = alTop
    2323    BevelOuter = bvNone
    24     ClientHeight = 24
    25     ClientWidth = 328
     24    ClientHeight = 38
     25    ClientWidth = 647
    2626    FullRepaint = False
    2727    TabOrder = 0
    2828    object LabelOperation: TLabel
    29       Left = 8
    30       Height = 13
    31       Top = 8
    32       Width = 66
     29      Left = 10
     30      Height = 26
     31      Top = 10
     32      Width = 99
    3333      Caption = 'Operations:'
    34       Font.Height = -11
    35       Font.Name = 'MS Sans Serif'
    36       Font.Style = [fsBold]
    37       ParentColor = False
    3834      ParentFont = False
    3935    end
     
    4137  object PanelLog: TPanel
    4238    Left = 0
    43     Height = 122
    44     Top = 124
    45     Width = 328
     39    Height = 161
     40    Top = 253
     41    Width = 647
    4642    Align = alClient
    4743    BevelOuter = bvSpace
    48     ClientHeight = 122
    49     ClientWidth = 328
     44    ClientHeight = 161
     45    ClientWidth = 647
    5046    TabOrder = 1
    5147    object MemoLog: TMemo
    52       Left = 8
    53       Height = 106
    54       Top = 8
    55       Width = 312
     48      Left = 10
     49      Height = 141
     50      Top = 10
     51      Width = 627
    5652      Anchors = [akTop, akLeft, akRight, akBottom]
    5753      ReadOnly = True
     
    6258  object PanelProgress: TPanel
    6359    Left = 0
    64     Height = 38
    65     Top = 50
    66     Width = 328
     60    Height = 65
     61    Top = 126
     62    Width = 647
    6763    Align = alTop
    6864    BevelOuter = bvNone
    69     ClientHeight = 38
    70     ClientWidth = 328
     65    ClientHeight = 65
     66    ClientWidth = 647
    7167    TabOrder = 2
    7268    object ProgressBarPart: TProgressBar
    73       Left = 8
    74       Height = 17
    75       Top = 16
    76       Width = 312
     69      Left = 12
     70      Height = 29
     71      Top = 29
     72      Width = 628
    7773      Anchors = [akTop, akLeft, akRight]
    7874      TabOrder = 0
    7975    end
    8076    object LabelEstimatedTimePart: TLabel
    81       Left = 8
    82       Height = 13
     77      Left = 10
     78      Height = 26
    8379      Top = -2
    84       Width = 71
     80      Width = 132
    8581      Caption = 'Estimated time:'
    86       ParentColor = False
    8782    end
    8883  end
    8984  object PanelOperations: TPanel
    9085    Left = 0
    91     Height = 26
    92     Top = 24
    93     Width = 328
     86    Height = 50
     87    Top = 76
     88    Width = 647
    9489    Align = alTop
    9590    BevelOuter = bvNone
    96     ClientHeight = 26
    97     ClientWidth = 328
     91    ClientHeight = 50
     92    ClientWidth = 647
    9893    FullRepaint = False
    9994    TabOrder = 3
    10095    object ListViewJobs: TListView
    101       Left = 8
    102       Height = 16
    103       Top = 5
    104       Width = 312
     96      Left = 10
     97      Height = 38
     98      Top = 6
     99      Width = 627
    105100      Anchors = [akTop, akLeft, akRight, akBottom]
    106101      AutoWidthLastColumn = True
     
    109104      Columns = <     
    110105        item
    111           Width = 312
     106          Width = 614
    112107        end>
    113108      OwnerData = True
     
    122117  object PanelProgressTotal: TPanel
    123118    Left = 0
    124     Height = 36
    125     Top = 88
    126     Width = 328
     119    Height = 62
     120    Top = 191
     121    Width = 647
    127122    Align = alTop
    128123    BevelOuter = bvNone
    129     ClientHeight = 36
    130     ClientWidth = 328
     124    ClientHeight = 62
     125    ClientWidth = 647
    131126    TabOrder = 4
    132127    object LabelEstimatedTimeTotal: TLabel
    133       Left = 8
    134       Height = 13
     128      Left = 10
     129      Height = 26
    135130      Top = 0
    136       Width = 97
     131      Width = 178
    137132      Caption = 'Total estimated time:'
    138       ParentColor = False
    139133    end
    140134    object ProgressBarTotal: TProgressBar
    141       Left = 8
    142       Height = 16
    143       Top = 16
    144       Width = 312
     135      Left = 10
     136      Height = 29
     137      Top = 29
     138      Width = 627
    145139      Anchors = [akTop, akLeft, akRight]
    146140      TabOrder = 0
    147141    end
    148142  end
     143  object PanelText: TPanel
     144    Left = 0
     145    Height = 38
     146    Top = 38
     147    Width = 647
     148    Align = alTop
     149    BevelOuter = bvNone
     150    ClientHeight = 38
     151    ClientWidth = 647
     152    TabOrder = 5
     153    object LabelText: TLabel
     154      Left = 10
     155      Height = 29
     156      Top = 10
     157      Width = 630
     158      Anchors = [akTop, akLeft, akRight]
     159      AutoSize = False
     160    end
     161  end
    149162  object ImageList1: TImageList
    150     BkColor = clForeground
    151     left = 200
    152     top = 8
     163    Left = 240
     164    Top = 10
    153165    Bitmap = {
    154       4C69020000001000000010000000FF00FF00FF00FF00FF00FF00FF00FF00FF00
    155       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
    156       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
    157       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
    158       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
    159       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
    160       FF00000000FF000000FFFF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
    161       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF000000
    162       00FF000000FF000000FFFF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
    163       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00000000FF0000
    164       00FF000000FF000000FFFF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
    165       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00000000FF000000FF0000
    166       00FF000000FFFF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
    167       FF00FF00FF00FF00FF00FF00FF00FF00FF00000000FF000000FF000000FF0000
    168       00FFFF00FF00FF00FF00FF00FF00FF00FF00FF00FF00000000FFFF00FF00FF00
    169       FF00FF00FF00FF00FF00FF00FF00000000FF000000FF000000FF000000FFFF00
    170       FF00FF00FF00FF00FF00FF00FF00FF00FF00000000FF000000FF000000FFFF00
    171       FF00FF00FF00FF00FF00000000FF000000FF000000FF000000FFFF00FF00FF00
    172       FF00FF00FF00FF00FF00FF00FF00FF00FF00000000FF000000FF000000FF0000
    173       00FFFF00FF00000000FF000000FF000000FF000000FFFF00FF00FF00FF00FF00
    174       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00000000FF000000FF0000
    175       00FF000000FF000000FF000000FF000000FFFF00FF00FF00FF00FF00FF00FF00
    176       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00000000FF0000
    177       00FF000000FF000000FF000000FFFF00FF00FF00FF00FF00FF00FF00FF00FF00
    178       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF000000
    179       00FF000000FF000000FFFF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
    180       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
    181       FF00000000FFFF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
    182       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
    183       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
    184       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
    185       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
    186       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
    187       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
    188       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
    189       FF00FF00FF00FF00FF00FF00FF00000000FFFF00FF00FF00FF00FF00FF00FF00
    190       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
    191       FF00FF00FF00FF00FF00FF00FF00000000FF000000FFFF00FF00FF00FF00FF00
    192       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
    193       FF00FF00FF00FF00FF00FF00FF00000000FF000084FF000000FFFF00FF00FF00
    194       FF00FF00FF00FF00FF00FF00FF00FF00FF00000000FF000000FF000000FF0000
    195       00FF000000FF000000FF000000FF000000FF0000FFFF000084FF000000FFFF00
    196       FF00FF00FF00FF00FF00FF00FF00FF00FF00000000FF0000FFFF0000FFFF0000
    197       FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF000084FF0000
    198       00FFFF00FF00FF00FF00FF00FF00FF00FF00000000FF0000FFFF0000FFFF0000
    199       FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000
    200       84FF000000FFFF00FF00FF00FF00FF00FF00000000FF0000FFFF0000FFFF0000
    201       FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000
    202       FFFF000084FF000000FFFF00FF00FF00FF00000000FF0000FFFF0000FFFF0000
    203       FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000
    204       84FF000000FFFF00FF00FF00FF00FF00FF00000000FF0000FFFF0000FFFF0000
    205       FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF000084FF0000
    206       00FFFF00FF00FF00FF00FF00FF00FF00FF00000000FF000000FF000000FF0000
    207       00FF000000FF000000FF000000FF000000FF0000FFFF000084FF000000FFFF00
    208       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
    209       FF00FF00FF00FF00FF00FF00FF00000000FF000084FF000000FFFF00FF00FF00
    210       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
    211       FF00FF00FF00FF00FF00FF00FF00000000FF000000FFFF00FF00FF00FF00FF00
    212       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
    213       FF00FF00FF00FF00FF00FF00FF00000000FFFF00FF00FF00FF00FF00FF00FF00
    214       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
    215       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
    216       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
    217       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
    218       FF00FF00FF00FF00FF00FF00FF00
     166      4C7A0200000010000000100000006A0000000000000078DAE593490E00100C45
     167      7B78F72E5684A63A1142C382BE4F0708F89C955117F4B016BE67B5FC6E96DB97
     168      B0D4B9F4CD949F36DED1DF922B0F1BD11FAB5AFC68DE5C44D40220A9FA779EC8
     169      6A349FD5A435E43CADA1E3678D73F773F1DBF3EFADFFEEFEBBF97F6696BE9D36
    219170    }
    220171  end
     
    223174    Interval = 100
    224175    OnTimer = TimerUpdateTimer
    225     left = 264
    226     top = 8
     176    Left = 384
     177    Top = 10
    227178  end
    228179end
  • trunk/Packages/Common/UJobProgressView.pas

    r15 r25  
    11unit UJobProgressView;
    2 
    3 {$MODE Delphi}
    42
    53interface
     
    75uses
    86  SysUtils, Variants, Classes, Graphics, Controls, Forms, Syncobjs,
    9   Dialogs, ComCtrls, StdCtrls, ExtCtrls, Contnrs, UThreading,
     7  Dialogs, ComCtrls, StdCtrls, ExtCtrls, Generics.Collections, UThreading, Math,
    108  DateUtils;
    119
     
    1311  EstimatedTimeShowTreshold = 4;
    1412  EstimatedTimeShowTresholdTotal = 1;
    15   MemoLogHeight = 200;
    1613  UpdateInterval = 100; // ms
    1714
     
    2421    FLock: TCriticalSection;
    2522    FOnChange: TNotifyEvent;
     23    FText: string;
    2624    FValue: Integer;
    2725    FMax: Integer;
    2826    procedure SetMax(const AValue: Integer);
     27    procedure SetText(AValue: string);
    2928    procedure SetValue(const AValue: Integer);
    3029  public
     
    3534    property Value: Integer read FValue write SetValue;
    3635    property Max: Integer read FMax write SetMax;
     36    property Text: string read FText write SetText;
    3737    property OnChange: TNotifyEvent read FOnChange write FOnChange;
    3838  end;
     
    6969  end;
    7070
     71  TJobs = class(TObjectList<TJob>)
     72  end;
     73
    7174  TJobThread = class(TListedThread)
    7275    procedure Execute; override;
     
    8083  TFormJobProgressView = class(TForm)
    8184    ImageList1: TImageList;
     85    LabelText: TLabel;
    8286    Label2: TLabel;
    8387    LabelOperation: TLabel;
     
    8690    ListViewJobs: TListView;
    8791    MemoLog: TMemo;
     92    PanelText: TPanel;
    8893    PanelProgressTotal: TPanel;
    8994    PanelOperationsTitle: TPanel;
     
    9499    ProgressBarTotal: TProgressBar;
    95100    TimerUpdate: TTimer;
     101    procedure FormHide(Sender: TObject);
     102    procedure FormShow(Sender: TObject);
     103    procedure ReloadJobList;
    96104    procedure FormClose(Sender: TObject; var CloseAction: TCloseAction);
    97     procedure FormDestroy(Sender: TObject);
    98105    procedure ListViewJobsData(Sender: TObject; Item: TListItem);
    99106    procedure TimerUpdateTimer(Sender: TObject);
    100107    procedure FormCreate(Sender: TObject);
    101108    procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
     109    procedure UpdateHeight;
    102110  public
    103111    JobProgressView: TJobProgressView;
     
    118126    TotalStartTime: TDateTime;
    119127    Log: TStringList;
     128    FForm: TFormJobProgressView;
    120129    procedure SetTerminate(const AValue: Boolean);
    121130    procedure UpdateProgress;
    122     procedure ReloadJobList;
    123     procedure StartJobs;
    124     procedure UpdateHeight;
    125131    procedure JobProgressChange(Sender: TObject);
    126132  public
    127     Form: TFormJobProgressView;
    128     Jobs: TObjectList; // TListObject<TJob>
     133    Jobs: TJobs;
    129134    CurrentJob: TJob;
    130135    CurrentJobIndex: Integer;
     
    132137    destructor Destroy; override;
    133138    procedure Clear;
    134     procedure AddJob(Title: string; Method: TJobProgressViewMethod;
    135       NoThreaded: Boolean = False; WaitFor: Boolean = False);
    136     procedure Start(AAutoClose: Boolean = True);
     139    function AddJob(Title: string; Method: TJobProgressViewMethod;
     140      NoThreaded: Boolean = False; WaitFor: Boolean = False): TJob;
     141    procedure Start;
    137142    procedure Stop;
    138143    procedure TermSleep(Delay: Integer);
     144    property Form: TFormJobProgressView read FForm;
    139145    property Terminate: Boolean read FTerminate write SetTerminate;
    140146  published
     
    156162  SExecuted = 'Executed';
    157163
     164
    158165implementation
    159166
     
    166173  STotalEstimatedTime = 'Total estimated time: %s';
    167174  SFinished = 'Finished';
    168   SOperations = 'Operations';
    169175
    170176procedure Register;
     
    172178  RegisterComponents('Common', [TJobProgressView]);
    173179end;
     180
     181{ TJobThread }
    174182
    175183procedure TJobThread.Execute;
     
    190198end;
    191199
    192 procedure TJobProgressView.AddJob(Title: string; Method: TJobProgressViewMethod;
    193   NoThreaded: Boolean = False; WaitFor: Boolean = False);
     200{ TFormJobProgressView }
     201
     202procedure TFormJobProgressView.UpdateHeight;
    194203var
    195   NewJob: TJob;
    196 begin
    197   NewJob := TJob.Create;
    198   NewJob.ProgressView := Self;
    199   NewJob.Title := Title;
    200   NewJob.Method := Method;
    201   NewJob.NoThreaded := NoThreaded;
    202   NewJob.WaitFor := WaitFor;
    203   NewJob.Progress.Max := 100;
    204   NewJob.Progress.Reset;
    205   NewJob.Progress.OnChange := JobProgressChange;
    206   Jobs.Add(NewJob);
     204  H: Integer;
     205  PanelOperationsVisible: Boolean;
     206  PanelOperationsHeight: Integer;
     207  PanelProgressVisible: Boolean;
     208  PanelProgressTotalVisible: Boolean;
     209  PanelLogVisible: Boolean;
     210  MemoLogHeight: Integer = 200;
     211  I: Integer;
     212  ItemRect: TRect;
     213  MaxH: Integer;
     214begin
     215    H := PanelOperationsTitle.Height;
     216    PanelOperationsVisible := JobProgressView.Jobs.Count > 0;
     217    if PanelOperationsVisible <> PanelOperations.Visible then
     218      PanelOperations.Visible := PanelOperationsVisible;
     219    if ListViewJobs.Items.Count > 0 then begin
     220      Maxh := 0;
     221      for I := 0 to ListViewJobs.Items.Count - 1 do
     222      begin
     223        ItemRect := ListViewJobs.Items[i].DisplayRect(drBounds);
     224        Maxh := Max(Maxh, ItemRect.Top + (ItemRect.Bottom - ItemRect.Top));
     225      end;
     226      PanelOperationsHeight := Scale96ToScreen(12) + Maxh;
     227    end else PanelOperationsHeight := Scale96ToScreen(8);
     228    if PanelOperationsHeight <> PanelOperations.Height then
     229      PanelOperations.Height := PanelOperationsHeight;
     230    if PanelOperationsVisible then
     231      H := H + PanelOperations.Height;
     232
     233    PanelProgressVisible := (JobProgressView.Jobs.Count > 0) and not JobProgressView.Finished;
     234    if PanelProgressVisible <> PanelProgress.Visible then
     235      PanelProgress.Visible := PanelProgressVisible;
     236    if PanelProgressVisible then
     237      H := H + PanelProgress.Height;
     238    PanelProgressTotalVisible := (JobProgressView.Jobs.Count > 1) and not JobProgressView.Finished;
     239    if PanelProgressTotalVisible <> PanelProgressTotal.Visible then
     240      PanelProgressTotal.Visible := PanelProgressTotalVisible;
     241    if PanelProgressTotalVisible then
     242      H := H + PanelProgressTotal.Height;
     243    Constraints.MinHeight := H;
     244    PanelLogVisible := MemoLog.Lines.Count > 0;
     245    if PanelLogVisible <> PanelLog.Visible then
     246      PanelLog.Visible := PanelLogVisible;
     247    if PanelLogVisible then
     248      H := H + Scale96ToScreen(MemoLogHeight);
     249    if PanelText.Visible then
     250      H := H + PanelText.Height;
     251    if Height <> H then begin
     252      Height := H;
     253      Top := (Screen.Height - H) div 2;
     254    end;
     255end;
     256
     257procedure TFormJobProgressView.TimerUpdateTimer(Sender: TObject);
     258var
     259  ProgressBarPartVisible: Boolean;
     260  ProgressBarTotalVisible: Boolean;
     261begin
     262  JobProgressView.UpdateProgress;
     263  if Visible and (not ProgressBarPart.Visible) and
     264  Assigned(JobProgressView.CurrentJob) and
     265  (JobProgressView.CurrentJob.Progress.Value > 0) then begin
     266    ProgressBarPartVisible := True;
     267    if ProgressBarPartVisible <> ProgressBarPart.Visible then
     268      ProgressBarPart.Visible := ProgressBarPartVisible;
     269    ProgressBarTotalVisible := True;
     270    if ProgressBarTotalVisible <> ProgressBarTotal.Visible then
     271      ProgressBarTotal.Visible := ProgressBarTotalVisible;
     272  end;
     273  if not Visible then begin
     274    TimerUpdate.Interval := UpdateInterval;
     275    if not JobProgressView.OwnerDraw then Show;
     276  end;
     277  if Assigned(JobProgressView.CurrentJob) then begin
     278    LabelText.Caption := JobProgressView.CurrentJob.Progress.Text;
     279    if LabelText.Caption <> '' then begin
     280      PanelText.Visible := True;
     281      UpdateHeight;
     282    end;
     283  end;
     284end;
     285
     286procedure TFormJobProgressView.ListViewJobsData(Sender: TObject; Item: TListItem);
     287begin
     288  if (Item.Index >= 0) and (Item.Index < JobProgressView.Jobs.Count) then
     289  with JobProgressView.Jobs[Item.Index] do begin
     290    Item.Caption := Title;
     291    if Item.Index = JobProgressView.CurrentJobIndex then Item.ImageIndex := 1
     292      else if Finished then Item.ImageIndex := 0
     293      else Item.ImageIndex := 2;
     294    Item.Data := JobProgressView.Jobs[Item.Index];
     295  end;
     296end;
     297
     298procedure TFormJobProgressView.FormClose(Sender: TObject;
     299  var CloseAction: TCloseAction);
     300begin
     301end;
     302
     303procedure TFormJobProgressView.FormCreate(Sender: TObject);
     304begin
     305  Caption := SPleaseWait;
     306  try
     307    //Animate1.FileName := ExtractFileDir(UTF8Encode(Application.ExeName)) +
     308    //  DirectorySeparator + 'horse.avi';
     309    //Animate1.Active := True;
     310  except
     311
     312  end;
     313end;
     314
     315procedure TFormJobProgressView.ReloadJobList;
     316begin
     317  // Workaround for not showing first line
     318  //Form.ListViewJobs.Items.Count := Jobs.Count + 1;
     319  //Form.ListViewJobs.Refresh;
     320
     321  if ListViewJobs.Items.Count <> JobProgressView.Jobs.Count then
     322    ListViewJobs.Items.Count := JobProgressView.Jobs.Count;
     323  ListViewJobs.Refresh;
     324  Application.ProcessMessages;
     325  UpdateHeight;
     326end;
     327
     328procedure TFormJobProgressView.FormShow(Sender: TObject);
     329begin
     330  ReloadJobList;
     331end;
     332
     333procedure TFormJobProgressView.FormHide(Sender: TObject);
     334begin
     335  JobProgressView.Jobs.Clear;
     336  ReloadJobList;
     337end;
     338
     339procedure TFormJobProgressView.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
     340begin
     341  CanClose := JobProgressView.Finished;
     342  JobProgressView.Terminate := True;
     343  Caption := SPleaseWait + STerminate;
     344end;
     345
     346
     347{ TJobProgressView }
     348
     349function TJobProgressView.AddJob(Title: string; Method: TJobProgressViewMethod;
     350  NoThreaded: Boolean = False; WaitFor: Boolean = False): TJob;
     351begin
     352  Result := TJob.Create;
     353  Result.ProgressView := Self;
     354  Result.Title := Title;
     355  Result.Method := Method;
     356  Result.NoThreaded := NoThreaded;
     357  Result.WaitFor := WaitFor;
     358  Result.Progress.Max := 100;
     359  Result.Progress.Reset;
     360  Result.Progress.OnChange := JobProgressChange;
     361  Jobs.Add(Result);
    207362  //ReloadJobList;
    208363end;
    209364
    210 procedure TJobProgressView.Start(AAutoClose: Boolean = True);
    211 begin
    212   AutoClose := AAutoClose;
    213   StartJobs;
    214 end;
    215 
    216 procedure TJobProgressView.StartJobs;
     365procedure TJobProgressView.Start;
    217366var
    218367  I: Integer;
     
    229378    Form.MemoLog.Clear;
    230379
     380    Form.PanelText.Visible := False;
    231381    Form.LabelEstimatedTimePart.Visible := False;
    232382    Form.LabelEstimatedTimeTotal.Visible := False;
     
    249399    I := 0;
    250400    while I < Jobs.Count do
    251     with TJob(Jobs[I]) do begin
     401    with Jobs[I] do begin
    252402      CurrentJobIndex := I;
    253       CurrentJob := TJob(Jobs[I]);
     403      CurrentJob := Jobs[I];
    254404      JobProgressChange(Self);
    255405      StartTime := Now;
     
    258408      Form.ProgressBarPart.Visible := False;
    259409      //Show;
    260       ReloadJobList;
     410      Form.ReloadJobList;
    261411      Application.ProcessMessages;
    262412      if NoThreaded then begin
     
    264414        Method(CurrentJob);
    265415      end else begin
     416        Thread := TJobThread.Create(True);
    266417        try
    267           Thread := TJobThread.Create(True);
    268418          with Thread do begin
    269419            FreeOnTerminate := False;
     
    296446    //if Visible then Hide;
    297447    Form.MemoLog.Lines.Assign(Log);
    298     if (Form.MemoLog.Lines.Count = 0) and AutoClose then begin
     448    if (Form.MemoLog.Lines.Count = 0) and FAutoClose then begin
    299449      Form.Hide;
    300450    end;
    301     Clear;
     451    if not Form.Visible then Clear;
    302452    Form.Caption := SFinished;
    303453    //LabelEstimatedTimePart.Visible := False;
    304454    Finished := True;
    305455    CurrentJobIndex := -1;
    306     ReloadJobList;
    307   end;
    308 end;
    309 
    310 procedure TJobProgressView.UpdateHeight;
    311 var
    312   H: Integer;
    313   PanelOperationsVisible: Boolean;
    314   PanelOperationsHeight: Integer;
    315   PanelProgressVisible: Boolean;
    316   PanelProgressTotalVisible: Boolean;
    317   PanelLogVisible: Boolean;
    318 begin
    319   with Form do begin
    320   H := PanelOperationsTitle.Height;
    321   PanelOperationsVisible := Jobs.Count > 0;
    322   if PanelOperationsVisible <> PanelOperations.Visible then
    323     PanelOperations.Visible := PanelOperationsVisible;
    324   PanelOperationsHeight := 8 + 18 * Jobs.Count;
    325   if PanelOperationsHeight <> PanelOperations.Height then
    326     PanelOperations.Height := PanelOperationsHeight;
    327   if PanelOperationsVisible then
    328     H := H + PanelOperations.Height;
    329 
    330   PanelProgressVisible := (Jobs.Count > 0) and not Finished;
    331   if PanelProgressVisible <> PanelProgress.Visible then
    332     PanelProgress.Visible := PanelProgressVisible;
    333   if PanelProgressVisible then
    334     H := H + PanelProgress.Height;
    335   PanelProgressTotalVisible := (Jobs.Count > 1) and not Finished;
    336   if PanelProgressTotalVisible <> PanelProgressTotal.Visible then
    337     PanelProgressTotal.Visible := PanelProgressTotalVisible;
    338   if PanelProgressTotalVisible then
    339     H := H + PanelProgressTotal.Height;
    340   Constraints.MinHeight := H;
    341   PanelLogVisible := MemoLog.Lines.Count > 0;
    342   if PanelLogVisible <> PanelLog.Visible then
    343     PanelLog.Visible := PanelLogVisible;
    344   if PanelLogVisible then
    345     H := H + MemoLogHeight;
    346   if Height <> H then Height := H;
     456    Form.ReloadJobList;
    347457  end;
    348458end;
     
    352462  if Assigned(FOnOwnerDraw) then
    353463    FOnOwnerDraw(Self);
    354 end;
    355 
    356 procedure TFormJobProgressView.TimerUpdateTimer(Sender: TObject);
    357 var
    358   ProgressBarPartVisible: Boolean;
    359   ProgressBarTotalVisible: Boolean;
    360 begin
    361   JobProgressView.UpdateProgress;
    362   if Visible and (not ProgressBarPart.Visible) and
    363   Assigned(JobProgressView.CurrentJob) and
    364   (JobProgressView.CurrentJob.Progress.Value > 0) then begin
    365     ProgressBarPartVisible := True;
    366     if ProgressBarPartVisible <> ProgressBarPart.Visible then
    367       ProgressBarPart.Visible := ProgressBarPartVisible;
    368     ProgressBarTotalVisible := True;
    369     if ProgressBarTotalVisible <> ProgressBarTotal.Visible then
    370       ProgressBarTotal.Visible := ProgressBarTotalVisible;
    371   end;
    372   if not Visible then begin
    373     TimerUpdate.Interval := UpdateInterval;
    374     if not JobProgressView.OwnerDraw then Show;
    375   end;
    376 end;
    377 
    378 procedure TFormJobProgressView.FormDestroy(Sender:TObject);
    379 begin
    380 end;
    381 
    382 procedure TFormJobProgressView.ListViewJobsData(Sender: TObject; Item: TListItem);
    383 begin
    384   if (Item.Index >= 0) and (Item.Index < JobProgressView.Jobs.Count) then
    385   with TJob(JobProgressView.Jobs[Item.Index]) do begin
    386     Item.Caption := Title;
    387     if Item.Index = JobProgressView.CurrentJobIndex then Item.ImageIndex := 1
    388       else if Finished then Item.ImageIndex := 0
    389       else Item.ImageIndex := 2;
    390     Item.Data := JobProgressView.Jobs[Item.Index];
    391   end;
    392 end;
    393 
    394 procedure TFormJobProgressView.FormClose(Sender: TObject;
    395   var CloseAction: TCloseAction);
    396 begin
    397   ListViewJobs.Clear;
    398 end;
    399 
    400 procedure TFormJobProgressView.FormCreate(Sender: TObject);
    401 begin
    402   Caption := SPleaseWait;
    403   try
    404     //Animate1.FileName := ExtractFileDir(UTF8Encode(Application.ExeName)) +
    405     //  DirectorySeparator + 'horse.avi';
    406     //Animate1.Active := True;
    407   except
    408 
    409   end;
    410464end;
    411465
     
    428482end;
    429483
    430 procedure TFormJobProgressView.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
    431 begin
    432   CanClose := JobProgressView.Finished;
    433   JobProgressView.Terminate := True;
    434   Caption := SPleaseWait + STerminate;
    435 end;
    436 
    437484procedure TJobProgressView.SetTerminate(const AValue: Boolean);
    438485var
     
    441488  if AValue = FTerminate then Exit;
    442489  for I := 0 to Jobs.Count - 1 do
    443     TJob(Jobs[I]).Terminate := AValue;
     490    Jobs[I].Terminate := AValue;
    444491  FTerminate := AValue;
    445492end;
     
    490537end;
    491538
    492 procedure TJobProgressView.ReloadJobList;
    493 begin
    494   UpdateHeight;
    495   // Workaround for not showing first line
    496   Form.ListViewJobs.Items.Count := Jobs.Count + 1;
    497   Form.ListViewJobs.Refresh;
    498 
    499   if Form.ListViewJobs.Items.Count <> Jobs.Count then
    500     Form.ListViewJobs.Items.Count := Jobs.Count;
    501   Form.ListViewJobs.Refresh;
    502   //Application.ProcessMessages;
    503 end;
    504 
    505539constructor TJobProgressView.Create(TheOwner: TComponent);
    506540begin
    507541  inherited;
    508542  if not (csDesigning in ComponentState) then begin
    509     Form := TFormJobProgressView.Create(Self);
    510     Form.JobProgressView := Self;
    511   end;
    512   Jobs := TObjectList.Create;
     543    FForm := TFormJobProgressView.Create(Self);
     544    FForm.JobProgressView := Self;
     545  end;
     546  Jobs := TJobs.Create;
    513547  Log := TStringList.Create;
    514548  //PanelOperationsTitle.Height := 80;
    515   ShowDelay := 0; //1000; // ms
     549  AutoClose := True;
     550  ShowDelay := 0;
    516551end;
    517552
     
    519554begin
    520555  Jobs.Clear;
     556  Log.Clear;
    521557  //ReloadJobList;
    522558end;
     
    528564  inherited;
    529565end;
     566
     567{ TProgress }
    530568
    531569procedure TProgress.SetMax(const AValue: Integer);
     
    536574    if FMax < 1 then FMax := 1;
    537575    if FValue >= FMax then FValue := FMax;
     576  finally
     577    FLock.Release;
     578  end;
     579end;
     580
     581procedure TProgress.SetText(AValue: string);
     582begin
     583  try
     584    FLock.Acquire;
     585    if FText = AValue then Exit;
     586    FText := AValue;
    538587  finally
    539588    FLock.Release;
     
    563612end;
    564613
    565 { TProgress }
    566 
    567614procedure TProgress.Increment;
    568615begin
    569   try
    570     FLock.Acquire;
     616  FLock.Acquire;
     617  try
    571618    Value := Value + 1;
    572619  finally
     
    577624procedure TProgress.Reset;
    578625begin
    579   try
    580     FLock.Acquire;
     626  FLock.Acquire;
     627  try
    581628    FValue := 0;
    582629  finally
     
    594641begin
    595642  FLock.Free;
    596   inherited Destroy;
     643  inherited;
    597644end;
    598645
     
    625672destructor TJob.Destroy;
    626673begin
    627   Progress.Free;
     674  FreeAndNil(Progress);
    628675  inherited;
    629676end;
  • trunk/Packages/Common/ULastOpenedList.pas

    r10 r25  
    11unit ULastOpenedList;
    2 
    3 {$mode delphi}
    42
    53interface
    64
    75uses
    8   Classes, SysUtils, Registry, URegistry, Menus, XMLConf;
     6  Classes, SysUtils, Registry, URegistry, Menus, XMLConf, DOM;
    97
    108type
     
    3028    procedure SaveToXMLConfig(XMLConfig: TXMLConfig; Path: string);
    3129    procedure AddItem(FileName: string);
     30    function GetFirstFileName: string;
    3231  published
    3332    property MaxCount: Integer read FMaxCount write SetMaxCount;
     
    8382destructor TLastOpenedList.Destroy;
    8483begin
    85   Items.Free;
     84  FreeAndNil(Items);
    8685  inherited;
    8786end;
     
    9392begin
    9493  if Assigned(MenuItem) then begin
    95     MenuItem.Clear;
     94    while MenuItem.Count > Items.Count do
     95      MenuItem.Delete(MenuItem.Count - 1);
     96    while MenuItem.Count < Items.Count do begin
     97      NewMenuItem := TMenuItem.Create(MenuItem);
     98      MenuItem.Add(NewMenuItem);
     99    end;
    96100    for I := 0 to Items.Count - 1 do begin
    97       NewMenuItem := TMenuItem.Create(MenuItem);
    98       NewMenuItem.Caption := Items[I];
    99       NewMenuItem.OnClick := ClickAction;
    100       MenuItem.Add(NewMenuItem);
     101      MenuItem.Items[I].Caption := Items[I];
     102      MenuItem.Items[I].OnClick := ClickAction;
    101103    end;
    102104  end;
     
    139141    OpenKey(Context.Key, True);
    140142    for I := 0 to Items.Count - 1 do
    141       WriteString('File' + IntToStr(I), UTF8Decode(Items[I]));
     143      WriteString('File' + IntToStr(I), Items[I]);
    142144  finally
    143145    Free;
     
    153155begin
    154156  with XMLConfig do begin
    155     Count := GetValue(Path + '/Count', 0);
     157    Count := GetValue(DOMString(Path + '/Count'), 0);
    156158    if Count > MaxCount then Count := MaxCount;
    157159    Items.Clear;
    158160    for I := 0 to Count - 1 do begin
    159       Value := GetValue(Path + '/File' + IntToStr(I), '');
     161      Value := string(GetValue(DOMString(Path + '/File' + IntToStr(I)), ''));
    160162      if Trim(Value) <> '' then Items.Add(Value);
    161163    end;
     
    170172begin
    171173  with XMLConfig do begin
    172     SetValue(Path + '/Count', Items.Count);
     174    SetValue(DOMString(Path + '/Count'), Items.Count);
    173175    for I := 0 to Items.Count - 1 do
    174       SetValue(Path + '/File' + IntToStr(I), Items[I]);
     176      SetValue(DOMString(Path + '/File' + IntToStr(I)), DOMString(Items[I]));
    175177    Flush;
    176178  end;
     
    185187end;
    186188
     189function TLastOpenedList.GetFirstFileName: string;
     190begin
     191  if Items.Count > 0 then Result := Items[0]
     192    else Result := '';
     193end;
     194
    187195end.
    188196
  • trunk/Packages/Common/UListViewSort.pas

    r15 r25  
    11unit UListViewSort;
    22
    3 // Date: 2010-11-03
    4 
    5 {$mode delphi}
     3// Date: 2019-05-17
    64
    75interface
    86
    97uses
    10   {$IFDEF Windows}Windows, CommCtrl, {$ENDIF}Classes, Graphics, ComCtrls, SysUtils,
    11   Controls, DateUtils, Dialogs, SpecializedList, Forms, Grids, StdCtrls, ExtCtrls,
    12   LclIntf, LMessages, LclType, LResources;
     8  {$IFDEF Windows}Windows, CommCtrl, LMessages, {$ENDIF}Classes, Graphics, ComCtrls, SysUtils,
     9  Controls, DateUtils, Dialogs, Forms, Grids, StdCtrls, ExtCtrls,
     10  LclIntf, LclType, LResources, Generics.Collections, Generics.Defaults;
    1311
    1412type
     
    1917  TCompareEvent = function (Item1, Item2: TObject): Integer of object;
    2018  TListFilterEvent = procedure (ListViewSort: TListViewSort) of object;
     19
     20  TObjects = TObjectList<TObject>;
    2121
    2222  { TListViewSort }
     
    5252    {$ENDIF}
    5353  public
    54     List: TListObject;
    55     Source: TListObject;
     54    Source: TObjects;
     55    List: TObjects;
    5656    constructor Create(AOwner: TComponent); override;
    5757    destructor Destroy; override;
     
    8181    FOnChange: TNotifyEvent;
    8282    FStringGrid1: TStringGrid;
     83    procedure DoOnChange;
    8384    procedure GridDoOnKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
    8485    procedure GridDoOnResize(Sender: TObject);
     
    9091    function TextEnteredColumn(Index: Integer): Boolean;
    9192    function GetColValue(Index: Integer): string;
     93    procedure Reset;
    9294    property StringGrid: TStringGrid read FStringGrid1 write FStringGrid1;
    9395  published
     
    98100  end;
    99101
     102  { TListViewEx }
     103
     104  TListViewEx = class(TWinControl)
     105  private
     106    FFilter: TListViewFilter;
     107    FListView: TListView;
     108    FListViewSort: TListViewSort;
     109    procedure ResizeHanlder;
     110  public
     111    constructor Create(TheOwner: TComponent); override;
     112    destructor Destroy; override;
     113  published
     114    property ListView: TListView read FListView write FListView;
     115    property ListViewSort: TListViewSort read FListViewSort write FListViewSort;
     116    property Filter: TListViewFilter read FFilter write FFilter;
     117    property Visible;
     118  end;
     119
    100120procedure Register;
    101121
     
    105125procedure Register;
    106126begin
    107   RegisterComponents('Common', [TListViewSort, TListViewFilter]);
     127  RegisterComponents('Common', [TListViewSort, TListViewFilter, TListViewEx]);
     128end;
     129
     130{ TListViewEx }
     131
     132procedure TListViewEx.ResizeHanlder;
     133begin
     134end;
     135
     136constructor TListViewEx.Create(TheOwner: TComponent);
     137begin
     138  inherited Create(TheOwner);
     139  Filter := TListViewFilter.Create(Self);
     140  Filter.Parent := Self;
     141  Filter.Align := alBottom;
     142  ListView := TListView.Create(Self);
     143  ListView.Parent := Self;
     144  ListView.Align := alClient;
     145  ListViewSort := TListViewSort.Create(Self);
     146  ListViewSort.ListView := ListView;
     147end;
     148
     149destructor TListViewEx.Destroy;
     150begin
     151  inherited;
    108152end;
    109153
    110154{ TListViewFilter }
     155
     156procedure TListViewFilter.DoOnChange;
     157begin
     158  if Assigned(FOnChange) then FOnChange(Self);
     159end;
    111160
    112161procedure TListViewFilter.GridDoOnKeyUp(Sender: TObject; var Key: Word;
    113162  Shift: TShiftState);
    114163begin
    115   if Assigned(FOnChange) then
    116     FOnChange(Self);
     164  DoOnChange;
    117165end;
    118166
     
    142190var
    143191  I: Integer;
     192  R: TRect;
    144193begin
    145194  with FStringGrid1 do begin
    146     Options := Options - [goEditing, goAlwaysShowEditor];
    147     //Columns.Clear;
    148195    while Columns.Count > ListView.Columns.Count do Columns.Delete(Columns.Count - 1);
    149196    while Columns.Count < ListView.Columns.Count do Columns.Add;
    150197    for I := 0 to ListView.Columns.Count - 1 do begin
    151198      Columns[I].Width := ListView.Columns[I].Width;
     199      if Selection.Left = I then begin
     200        R := CellRect(I, 0);
     201        Editor.Left := R.Left + 2;
     202        Editor.Width := R.Width - 4;
     203      end;
    152204    end;
    153     Options := Options + [goEditing, goAlwaysShowEditor];
    154205  end;
    155206end;
     
    182233    Result := StringGrid.Cells[Index, 0]
    183234    else Result := '';
     235end;
     236
     237procedure TListViewFilter.Reset;
     238var
     239  I: Integer;
     240begin
     241  with StringGrid do
     242  for I := 0 to ColCount - 1 do
     243    Cells[I, 0] := '';
     244  DoOnChange;
    184245end;
    185246
     
    274335end;
    275336
     337var
     338  ListViewSortCompare: TCompareEvent;
     339
     340function ListViewCompare(constref Item1, Item2: TObject): Integer;
     341begin
     342  Result := ListViewSortCompare(Item1, Item2);
     343end;
     344
    276345procedure TListViewSort.Sort(Compare: TCompareEvent);
    277346begin
     347  // TODO: Because TFLGObjectList compare handler is not class method,
     348  // it is necessary to use simple function compare handler with local variable
     349  ListViewSortCompare := Compare;
    278350  if (List.Count > 0) then
    279     List.Sort(Compare);
     351    List.Sort(TComparer<TObject>.Construct(ListViewCompare));
    280352end;
    281353
     
    283355begin
    284356  if Assigned(FOnFilter) then FOnFilter(Self)
    285   else if Assigned(Source) then
    286     List.Assign(Source) else
     357  else if Assigned(Source) then begin
    287358    List.Clear;
     359    List.AddRange(Source);
     360  end else List.Clear;
    288361  if ListView.Items.Count <> List.Count then
    289362    ListView.Items.Count := List.Count;
     
    340413begin
    341414  inherited;
    342   List := TListObject.Create;
     415  List := TObjects.Create;
    343416  List.OwnsObjects := False;
    344417end;
     
    346419destructor TListViewSort.Destroy;
    347420begin
    348   List.Free;
     421  FreeAndNil(List);
    349422  inherited;
    350423end;
     
    381454  ItemLeft := Item.Left;
    382455  ItemLeft := 23; // Windows 7 workaround
    383  
     456
    384457  Rect1.Left := ItemLeft - CheckWidth - BiasLeft + 1 + XBias;
    385458  //ShowMessage(IntToStr(Tp1.Y) + ', ' + IntToStr(BiasTop) + ', ' + IntToStr(XBias));
     
    480553    FHeaderHandle := ListView_GetHeader(FListView.Handle);
    481554    for I := 0 to FListView.Columns.Count - 1 do begin
     555      {$push}{$warn 5057 off}
    482556      FillChar(Item, SizeOf(THDItem), 0);
     557      {$pop}
    483558      Item.Mask := HDI_FORMAT;
    484559      Header_GetItem(FHeaderHandle, I, Item);
  • trunk/Packages/Common/UMemory.pas

    r15 r25  
    11unit UMemory;
    2 
    3 {$mode Delphi}{$H+}
    42
    53interface
     
    4442  end;
    4543
     44
    4645implementation
    4746
     
    5049procedure TPositionMemory.SetSize(AValue: Integer);
    5150begin
    52   inherited SetSize(AValue);
     51  inherited;
    5352  if FPosition > FSize then FPosition := FSize;
    5453end;
     
    107106begin
    108107  Size := 0;
    109   inherited Destroy;
     108  inherited;
    110109end;
    111110
    112111procedure TMemory.WriteMemory(Position: Integer; Memory: TMemory);
    113112begin
    114   Move(Memory.FData, PByte(@FData + Position)^, Memory.Size);
     113  Move(Memory.FData, PByte(PByte(@FData) + Position)^, Memory.Size);
    115114end;
    116115
    117116procedure TMemory.ReadMemory(Position: Integer; Memory: TMemory);
    118117begin
    119   Move(PByte(@FData + Position)^, Memory.FData, Memory.Size);
     118  Move(PByte(PByte(@FData) + Position)^, Memory.FData, Memory.Size);
    120119end;
    121120
  • trunk/Packages/Common/UPersistentForm.pas

    r20 r25  
    11unit UPersistentForm;
    22
    3 {$mode delphi}
    4 
    5 // Date: 2015-04-18
     3// Date: 2020-11-26
    64
    75interface
    86
    97uses
    10   Classes, SysUtils, Forms, URegistry, LCLIntf, Registry, Controls, ComCtrls;
     8  Classes, SysUtils, Forms, URegistry, LCLIntf, Registry, Controls, ComCtrls,
     9  ExtCtrls, LCLType;
    1110
    1211type
     
    2524    FormRestoredSize: TRect;
    2625    FormWindowState: TWindowState;
     26    FormFullScreen: Boolean;
    2727    Form: TForm;
    2828    procedure LoadFromRegistry(RegistryContext: TRegistryContext);
     
    3030    function CheckEntireVisible(Rect: TRect): TRect;
    3131    function CheckPartVisible(Rect: TRect; Part: Integer): TRect;
    32     procedure Load(Form: TForm; DefaultMaximized: Boolean = False);
     32    procedure Load(Form: TForm; DefaultMaximized: Boolean = False;
     33      DefaultFullScreen: Boolean = False);
    3334    procedure Save(Form: TForm);
    3435    constructor Create(AOwner: TComponent); override;
     36    procedure SetFullScreen(State: Boolean);
    3537    property RegistryContext: TRegistryContext read FRegistryContext
    3638      write FRegistryContext;
     
    4244procedure Register;
    4345
     46
    4447implementation
    45 
    4648
    4749procedure Register;
     
    7173  end;
    7274
     75  if (Control is TPanel) then begin
     76    with Form, TRegistryEx.Create do
     77    try
     78      RootKey := RegistryContext.RootKey;
     79      OpenKey(RegistryContext.Key + '\Forms\' + Form.Name + '\' + Control.Name, True);
     80      if (TPanel(Control).Align = alRight) or (TPanel(Control).Align = alLeft) then begin
     81        if ValueExists('Width') then
     82          TPanel(Control).Width := ReadInteger('Width');
     83      end;
     84      if (TPanel(Control).Align = alTop) or (TPanel(Control).Align = alBottom) then begin
     85        if ValueExists('Height') then
     86          TPanel(Control).Height := ReadInteger('Height');
     87      end;
     88    finally
     89      Free;
     90    end;
     91  end;
     92
    7393  if Control is TWinControl then begin
    7494    WinControl := TWinControl(Control);
     
    95115      for I := 0 to TListView(Control).Columns.Count - 1 do begin
    96116        WriteInteger('ColWidth' + IntToStr(I), TListView(Control).Columns[I].Width);
     117      end;
     118    finally
     119      Free;
     120    end;
     121  end;
     122
     123  if (Control is TPanel) then begin
     124    with Form, TRegistryEx.Create do
     125    try
     126      RootKey := RegistryContext.RootKey;
     127      OpenKey(RegistryContext.Key + '\Forms\' + Form.Name + '\' + Control.Name, True);
     128      if (TPanel(Control).Align = alRight) or (TPanel(Control).Align = alLeft) then begin
     129        WriteInteger('Width', TPanel(Control).Width);
     130      end;
     131      if (TPanel(Control).Align = alTop) or (TPanel(Control).Align = alBottom) then begin
     132        WriteInteger('Height', TPanel(Control).Height);
    97133      end;
    98134    finally
     
    134170      + FormRestoredSize.Top;
    135171    // Other state
    136     FormWindowState := TWindowState(ReadIntegerWithDefault('WindowState', Integer(wsNormal)));
     172    FormWindowState := TWindowState(ReadIntegerWithDefault('WindowState', Integer(FormWindowState)));
     173    FormFullScreen := ReadBoolWithDefault('FullScreen', FormFullScreen);
    137174  finally
    138175    Free;
     
    158195    // Other state
    159196    WriteInteger('WindowState', Integer(FormWindowState));
     197    WriteBool('FullScreen', FormFullScreen);
    160198  finally
    161199    Free;
     
    215253end;
    216254
    217 procedure TPersistentForm.Load(Form: TForm; DefaultMaximized: Boolean = False);
     255procedure TPersistentForm.Load(Form: TForm; DefaultMaximized: Boolean = False;
     256  DefaultFullScreen: Boolean = False);
    218257begin
    219258  Self.Form := Form;
     
    223262  FormRestoredSize := Bounds((Screen.Width - Form.Width) div 2,
    224263    (Screen.Height - Form.Height) div 2, Form.Width, Form.Height);
     264  FormWindowState := Form.WindowState;
     265  FormFullScreen := DefaultFullScreen;
    225266
    226267  LoadFromRegistry(RegistryContext);
     
    242283      Form.BoundsRect := FormNormalSize;
    243284  end;
     285  if FormFullScreen then SetFullScreen(True);
    244286  LoadControl(Form);
    245287end;
     
    249291  Self.Form := Form;
    250292  FormNormalSize := Bounds(Form.Left, Form.Top, Form.Width, Form.Height);
    251   FormRestoredSize := Bounds(Form.RestoredLeft, Form.RestoredTop, Form.RestoredWidth,
    252     Form.RestoredHeight);
     293  if not FormFullScreen then
     294    FormRestoredSize := Bounds(Form.RestoredLeft, Form.RestoredTop, Form.RestoredWidth,
     295      Form.RestoredHeight);
    253296  FormWindowState := Form.WindowState;
    254297  SaveToRegistry(RegistryContext);
     
    265308end;
    266309
     310procedure TPersistentForm.SetFullScreen(State: Boolean);
     311begin
     312  if State then begin
     313    FormFullScreen := True;
     314    FormNormalSize := Form.BoundsRect;
     315    FormRestoredSize := Bounds(Form.RestoredLeft, Form.RestoredTop, Form.RestoredWidth,
     316      Form.RestoredHeight);
     317    FormWindowState := Form.WindowState;
     318    ShowWindow(Form.Handle, SW_SHOWFULLSCREEN);
     319    {$IFDEF WINDOWS}
     320    Form.BorderStyle := bsNone;
     321    {$ENDIF}
     322  end else begin
     323    FormFullScreen := False;
     324    {$IFDEF WINDOWS}
     325    Form.BorderStyle := bsSizeable;
     326    {$ENDIF}
     327    ShowWindow(Form.Handle, SW_SHOWNORMAL);
     328    if FormWindowState = wsNormal then begin
     329      Form.BoundsRect := FormNormalSize;
     330    end else
     331    if FormWindowState = wsMaximized then begin
     332      Form.BoundsRect := FormRestoredSize;
     333      Form.WindowState := wsMaximized;
     334    end;
     335  end;
     336end;
     337
    267338end.
    268339
  • trunk/Packages/Common/UPool.pas

    r10 r25  
    11unit UPool;
    22
    3 {$mode Delphi}{$H+}
    4 
    53interface
    64
    75uses
    8   Classes, SysUtils, syncobjs, SpecializedList, UThreading;
     6  Classes, SysUtils, syncobjs, Generics.Collections, UThreading;
    97
    108type
     
    2220    function NewItemObject: TObject; virtual;
    2321  public
    24     Items: TListObject;
    25     FreeItems: TListObject;
     22    Items: TObjectList<TObject>;
     23    FreeItems: TObjectList<TObject>;
    2624    function Acquire: TObject; virtual;
    2725    procedure Release(Item: TObject); virtual;
     
    108106constructor TThreadedPool.Create;
    109107begin
    110   inherited Create;
     108  inherited;
    111109  Lock := TCriticalSection.Create;
    112110end;
     
    116114  TotalCount := 0;
    117115  Lock.Free;
    118   inherited Destroy;
     116  inherited;
    119117end;
    120118
     
    185183begin
    186184  inherited;
    187   Items := TListObject.Create;
    188   FreeItems := TListObject.Create;
     185  Items := TObjectList<TObject>.Create;
     186  FreeItems := TObjectList<TObject>.Create;
    189187  FreeItems.OwnsObjects := False;
    190188  FReleaseEvent := TEvent.Create(nil, False, False, '');
  • trunk/Packages/Common/UPrefixMultiplier.pas

    r10 r25  
    22
    33// Date: 2010-06-01
    4 
    5 {$mode delphi}
    64
    75interface
     
    2119  { TPrefixMultiplier }
    2220
    23   TPrefixMultiplier = class
     21  TPrefixMultiplier = class(TComponent)
    2422  private
    25     function TruncateDigits(Value:Double;Digits:Integer=3):Double;
     23    function TruncateDigits(Value: Double; Digits: Integer = 3): Double;
    2624  public
    2725    function Add(Value: Double; PrefixMultipliers: TPrefixMultiplierDef;
     
    7270  );
    7371
     72procedure Register;
     73
     74
    7475implementation
     76
     77procedure Register;
     78begin
     79  RegisterComponents('Common', [TPrefixMultiplier]);
     80end;
    7581
    7682{ TPrefixMultiplier }
     
    9298end;
    9399
    94 function TPrefixMultiplier.Add(Value:Double;PrefixMultipliers:TPrefixMultiplierDef
    95   ;UnitText:string;Digits:Integer):string;
     100function TPrefixMultiplier.Add(Value: Double; PrefixMultipliers: TPrefixMultiplierDef
     101  ; UnitText:string; Digits: Integer): string;
    96102var
    97103  I: Integer;
  • trunk/Packages/Common/URegistry.pas

    r20 r25  
    11unit URegistry;
    2 
    3 {$MODE Delphi}
    42
    53interface
     
    1715    RootKey: HKEY;
    1816    Key: string;
     17    class function Create(RootKey: TRegistryRoot; Key: string): TRegistryContext; static; overload;
     18    class function Create(RootKey: HKEY; Key: string): TRegistryContext; static; overload;
    1919    class operator Equal(A, B: TRegistryContext): Boolean;
    20     function Create(RootKey: TRegistryRoot; Key: string): TRegistryContext; overload;
    21     function Create(RootKey: HKEY; Key: string): TRegistryContext; overload;
    2220  end;
    2321
     
    2927    procedure SetCurrentContext(AValue: TRegistryContext);
    3028  public
     29    function ReadChar(const Name: string): Char;
     30    procedure WriteChar(const Name: string; Value: Char);
    3131    function ReadBoolWithDefault(const Name: string;
    3232      DefaultValue: Boolean): Boolean;
    3333    function ReadIntegerWithDefault(const Name: string; DefaultValue: Integer): Integer;
    3434    function ReadStringWithDefault(const Name: string; DefaultValue: string): string;
     35    function ReadCharWithDefault(const Name: string; DefaultValue: Char): Char;
    3536    function ReadFloatWithDefault(const Name: string;
    3637      DefaultValue: Double): Double;
     
    4142    function GetValue(const Name: string; const DefaultValue: Boolean): Boolean; overload;
    4243    function GetValue(const Name: string; const DefaultValue: Double): Double; overload;
     44    function GetValue(const Name: string; const DefaultValue: Char): Char; overload;
    4345    procedure SetValue(const Name: string; const Value: Integer); overload;
    4446    procedure SetValue(const Name: string; const Value: string); overload;
    4547    procedure SetValue(const Name: string; const Value: Boolean); overload;
    4648    procedure SetValue(const Name: string; const Value: Double); overload;
     49    procedure SetValue(const Name: string; const Value: Char); overload;
    4750    property CurrentContext: TRegistryContext read GetCurrentContext write SetCurrentContext;
    4851  end;
     
    5356    HKEY_CURRENT_CONFIG, HKEY_DYN_DATA);
    5457
     58
    5559implementation
    5660
    57 
    5861{ TRegistryContext }
    5962
     
    6366end;
    6467
    65 function TRegistryContext.Create(RootKey: TRegistryRoot; Key: string): TRegistryContext;
     68class function TRegistryContext.Create(RootKey: TRegistryRoot; Key: string): TRegistryContext;
    6669begin
    6770  Result.RootKey := RegistryRootHKEY[RootKey];
     
    6972end;
    7073
    71 function TRegistryContext.Create(RootKey: HKEY; Key: string): TRegistryContext;
     74class function TRegistryContext.Create(RootKey: HKEY; Key: string): TRegistryContext;
    7275begin
    7376  Result.RootKey := RootKey;
     
    97100end;
    98101
     102function TRegistryEx.ReadCharWithDefault(const Name: string; DefaultValue: Char
     103  ): Char;
     104begin
     105  if ValueExists(Name) then Result := ReadChar(Name)
     106    else begin
     107      WriteChar(Name, DefaultValue);
     108      Result := DefaultValue;
     109    end;
     110end;
     111
    99112function TRegistryEx.ReadFloatWithDefault(const Name: string;
    100113  DefaultValue: Double): Double;
     
    131144end;
    132145
     146function TRegistryEx.GetValue(const Name: string; const DefaultValue: Char
     147  ): Char;
     148begin
     149  Result := ReadCharWithDefault(Name, DefaultValue);
     150end;
     151
    133152procedure TRegistryEx.SetValue(const Name: string; const Value: Integer);
    134153begin
     
    149168begin
    150169  WriteFloat(Name, Value);
     170end;
     171
     172procedure TRegistryEx.SetValue(const Name: string; const Value: Char);
     173begin
     174  WriteChar(Name, Value);
    151175end;
    152176
     
    171195function TRegistryEx.OpenKey(const Key: string; CanCreate: Boolean): Boolean;
    172196begin
    173   {$IFDEF Linux}
    174   CloseKey;
     197  {$IFDEF UNIX}
     198  //CloseKey;
    175199  {$ENDIF}
    176200  Result := inherited OpenKey(Key, CanCreate);
     
    179203function TRegistryEx.GetCurrentContext: TRegistryContext;
    180204begin
    181   Result.Key := CurrentPath;
     205  Result.Key := String(CurrentPath);
    182206  Result.RootKey := RootKey;
    183207end;
     
    189213end;
    190214
     215function TRegistryEx.ReadChar(const Name: string): Char;
     216var
     217  S: string;
     218begin
     219  S := ReadString(Name);
     220  if Length(S) > 0 then Result := S[1]
     221    else Result := #0;
     222end;
     223
     224procedure TRegistryEx.WriteChar(const Name: string; Value: Char);
     225begin
     226  WriteString(Name, Value);
     227end;
     228
    191229function TRegistryEx.ReadBoolWithDefault(const Name: string;
    192230  DefaultValue: Boolean): Boolean;
  • trunk/Packages/Common/UResetableThread.pas

    r10 r25  
    11unit UResetableThread;
    2 
    3 {$mode Delphi}{$H+}
    42
    53interface
     
    156154  FThread.Name := 'ResetableThread';
    157155  FThread.Parent := Self;
    158   FThread.Resume;
     156  FThread.Start;
    159157end;
    160158
     
    167165  FreeAndNil(FStopEvent);
    168166  FreeAndNil(FLock);
    169   inherited Destroy;
     167  inherited;
    170168end;
    171169
     
    286284constructor TThreadPool.Create;
    287285begin
    288   inherited Create;
     286  inherited;
    289287end;
    290288
     
    293291  TotalCount := 0;
    294292  WaitForEmpty;
    295   inherited Destroy;
     293  inherited;
    296294end;
    297295
  • trunk/Packages/Common/UScaleDPI.pas

    r15 r25  
    33{ See: http://wiki.lazarus.freepascal.org/High_DPI }
    44
    5 {$mode delphi}{$H+}
    6 
    75interface
    86
    97uses
    10   Classes, Forms, Graphics, Controls, ComCtrls, LCLType, SysUtils, StdCtrls,
    11   Contnrs;
     8  Classes, Forms, Graphics, Controls, ComCtrls, LCLType, SysUtils,
     9  Generics.Collections;
    1210
    1311type
     12  TControlDimensions = class;
    1413
    1514  { TControlDimension }
     
    1817    BoundsRect: TRect;
    1918    FontHeight: Integer;
    20     Controls: TObjectList; // TList<TControlDimension>
     19    Controls: TControlDimensions;
    2120    // Class specifics
    2221    ButtonSize: TPoint; // TToolBar
     
    2625    constructor Create;
    2726    destructor Destroy; override;
     27  end;
     28
     29  TControlDimensions = class(TObjectList<TControlDimension>)
    2830  end;
    2931
     
    7375constructor TControlDimension.Create;
    7476begin
    75   Controls := TObjectList.Create;
     77  Controls := TControlDimensions.Create;
    7678end;
    7779
     
    7981begin
    8082  FreeAndNil(Controls);
    81   inherited Destroy;
     83  inherited;
    8284end;
    8385
     
    212214  TempBmp: TBitmap;
    213215  Temp: array of TBitmap;
    214   NewWidth, NewHeight: integer;
    215   I: Integer;
    216 begin
    217   NewWidth := ScaleX(ImgList.Width, FromDPI.X);
    218   NewHeight := ScaleY(ImgList.Height, FromDPI.Y);
    219 
    220   SetLength(Temp, ImgList.Count);
    221   for I := 0 to ImgList.Count - 1 do
    222   begin
    223     TempBmp := TBitmap.Create;
    224     TempBmp.PixelFormat := pf32bit;
    225     ImgList.GetBitmap(I, TempBmp);
    226     Temp[I] := TBitmap.Create;
    227     Temp[I].SetSize(NewWidth, NewHeight);
    228     Temp[I].PixelFormat := pf32bit;
    229     Temp[I].TransparentColor := TempBmp.TransparentColor;
    230     //Temp[I].TransparentMode := TempBmp.TransparentMode;
    231     Temp[I].Transparent := True;
    232     Temp[I].Canvas.Brush.Style := bsSolid;
    233     Temp[I].Canvas.Brush.Color := Temp[I].TransparentColor;
    234     Temp[I].Canvas.FillRect(0, 0, Temp[I].Width, Temp[I].Height);
    235 
    236     if (Temp[I].Width = 0) or (Temp[I].Height = 0) then Continue;
    237     Temp[I].Canvas.StretchDraw(Rect(0, 0, Temp[I].Width, Temp[I].Height), TempBmp);
    238     TempBmp.Free;
    239   end;
    240 
    241   ImgList.Clear;
    242   ImgList.Width := NewWidth;
    243   ImgList.Height := NewHeight;
    244 
    245   for I := 0 to High(Temp) do
    246   begin
    247     ImgList.Add(Temp[I], nil);
    248     Temp[i].Free;
     216  NewWidth: Integer;
     217  NewHeight: Integer;
     218  I: Integer;
     219begin
     220  ImgList.BeginUpdate;
     221  try
     222    NewWidth := ScaleX(ImgList.Width, FromDPI.X);
     223    NewHeight := ScaleY(ImgList.Height, FromDPI.Y);
     224
     225    Temp := nil;
     226    SetLength(Temp, ImgList.Count);
     227    for I := 0 to ImgList.Count - 1 do
     228    begin
     229      TempBmp := TBitmap.Create;
     230      try
     231        TempBmp.PixelFormat := pf32bit;
     232        ImgList.GetBitmap(I, TempBmp);
     233        Temp[I] := TBitmap.Create;
     234        Temp[I].SetSize(NewWidth, NewHeight);
     235        {$IFDEF UNIX}
     236        Temp[I].PixelFormat := pf24bit;
     237        {$ELSE}
     238        Temp[I].PixelFormat := pf32bit;
     239        {$ENDIF}
     240        Temp[I].TransparentColor := TempBmp.TransparentColor;
     241        //Temp[I].TransparentMode := TempBmp.TransparentMode;
     242        Temp[I].Transparent := True;
     243        Temp[I].Canvas.Brush.Style := bsSolid;
     244        Temp[I].Canvas.Brush.Color := Temp[I].TransparentColor;
     245        Temp[I].Canvas.FillRect(0, 0, Temp[I].Width, Temp[I].Height);
     246
     247        if (Temp[I].Width = 0) or (Temp[I].Height = 0) then Continue;
     248        Temp[I].Canvas.StretchDraw(Rect(0, 0, Temp[I].Width, Temp[I].Height), TempBmp);
     249      finally
     250        TempBmp.Free;
     251      end;
     252    end;
     253
     254    ImgList.Clear;
     255    ImgList.Width := NewWidth;
     256    ImgList.Height := NewHeight;
     257
     258    for I := 0 to High(Temp) do
     259    begin
     260      ImgList.Add(Temp[I], nil);
     261      Temp[i].Free;
     262    end;
     263  finally
     264    ImgList.EndUpdate;
    249265  end;
    250266end;
     
    284300  WinControl: TWinControl;
    285301  ToolBarControl: TToolBar;
    286   OldAnchors: TAnchors;
    287   OldAutoSize: Boolean;
    288 begin
     302  //OldAnchors: TAnchors;
     303  //OldAutoSize: Boolean;
     304begin
     305  //if not (Control is TCustomPage) then
     306  // Resize childs first
     307  if Control is TWinControl then begin
     308    WinControl := TWinControl(Control);
     309    if WinControl.ControlCount > 0 then begin
     310      for I := 0 to WinControl.ControlCount - 1 do begin
     311        if WinControl.Controls[I] is TControl then begin
     312          ScaleControl(WinControl.Controls[I], FromDPI);
     313        end;
     314      end;
     315    end;
     316  end;
     317
    289318  //if Control is TMemo then Exit;
    290319  //if Control is TForm then
     
    312341  with TCoolBar(Control) do begin
    313342    BeginUpdate;
    314     for I := 0 to Bands.Count - 1 do
    315       with Bands[I] do begin
    316         MinWidth := ScaleX(MinWidth, FromDPI.X);
    317         MinHeight := ScaleY(MinHeight, FromDPI.Y);
    318         Width := ScaleX(Width, FromDPI.X);
    319         //Control.Invalidate;
     343    try
     344      for I := 0 to Bands.Count - 1 do
     345        with Bands[I] do begin
     346          MinWidth := ScaleX(MinWidth, FromDPI.X);
     347          MinHeight := ScaleY(MinHeight, FromDPI.Y);
     348          // Workaround to bad band width auto sizing
     349          //Width := ScaleX(Width, FromDPI.X);
     350          Width := ScaleX(Control.Width + 28, FromDPI.X);
     351          //Control.Invalidate;
     352        end;
     353      // Workaround for bad autosizing of coolbar
     354      if AutoSize then begin
     355        AutoSize := False;
     356        Height := ScaleY(Height, FromDPI.Y);
     357        AutoSize := True;
    320358      end;
    321     EndUpdate;
     359    finally
     360      EndUpdate;
     361    end;
    322362  end;
    323363
     
    330370  end;
    331371
    332   //if not (Control is TCustomPage) then
    333   if Control is TWinControl then begin
    334     WinControl := TWinControl(Control);
    335     if WinControl.ControlCount > 0 then begin
    336       for I := 0 to WinControl.ControlCount - 1 do begin
    337         if WinControl.Controls[I] is TControl then begin
    338           ScaleControl(WinControl.Controls[I], FromDPI);
    339         end;
    340       end;
    341     end;
    342   end;
    343372  //if Control is TForm then
    344373  //  Control.EnableAutoSizing;
  • trunk/Packages/Common/USyncCounter.pas

    r10 r25  
    11unit USyncCounter;
    2 
    3 {$mode delphi}
    42
    53interface
     
    2523    procedure Assign(Source: TSyncCounter);
    2624  end;
     25
    2726
    2827implementation
     
    6968begin
    7069  Lock.Free;
    71   inherited Destroy;
     70  inherited;
    7271end;
    7372
  • trunk/Packages/Common/UTheme.pas

    r16 r25  
    55uses
    66  Classes, SysUtils, Graphics, ComCtrls, Controls, ExtCtrls, Menus, StdCtrls,
    7   Spin, Forms, Contnrs, Grids;
     7  Spin, Forms, Generics.Collections, Grids;
    88
    99type
     
    1919  { TThemes }
    2020
    21   TThemes = class(TObjectList)
     21  TThemes = class(TObjectList<TTheme>)
    2222    function AddNew(Name: string): TTheme;
    2323    function FindByName(Name: string): TTheme;
     
    4242  end;
    4343
     44const
     45  ThemeNameSystem = 'System';
     46  ThemeNameLight = 'Light';
     47  ThemeNameDark = 'Dark';
     48
    4449procedure Register;
     50
    4551
    4652implementation
     
    7480procedure TThemes.LoadToStrings(Strings: TStrings);
    7581var
    76   Theme: TTheme;
     82  I: Integer;
    7783begin
    78   Strings.Clear;
    79   for Theme in Self do
    80     Strings.AddObject(Theme.Name, Theme);
     84  Strings.BeginUpdate;
     85  try
     86    while Strings.Count < Count do Strings.Add('');
     87    while Strings.Count > Count do Strings.Delete(Strings.Count - 1);
     88    for I := 0 to Count - 1 do begin
     89      Strings[I] := Items[I].Name;
     90      Strings.Objects[I] := Items[I];
     91    end;
     92  finally
     93    Strings.EndUpdate;
     94  end;
    8195end;
    8296
     
    97111  inherited;
    98112  Themes := TThemes.Create;
    99   with Themes.AddNew('System') do begin
     113  with Themes.AddNew(ThemeNameSystem) do begin
    100114    ColorWindow := clWindow;
    101115    ColorWindowText := clWindowText;
     
    105119  end;
    106120  Theme := TTheme(Themes.First);
    107   with Themes.AddNew('Dark') do begin
     121  with Themes.AddNew(ThemeNameDark) do begin
    108122    ColorWindow := RGBToColor($20, $20, $20);
    109123    ColorWindowText := clWhite;
     
    112126    ColorControlSelected := RGBToColor(96, 125, 155);
    113127  end;
    114   with Themes.AddNew('Light') do begin
     128  with Themes.AddNew(ThemeNameLight) do begin
    115129    ColorWindow := clWhite;
    116130    ColorWindowText := clBlack;
     
    123137destructor TThemeManager.Destroy;
    124138begin
    125   Themes.Free;
    126   inherited Destroy;
     139  FreeAndNil(Themes);
     140  inherited;
    127141end;
    128142
     
    132146  I: Integer;
    133147begin
    134   for I := 0 to Component.ComponentCount - 1 do
    135     ApplyTheme(Component.Components[I]);
     148  if Component is TWinControl then begin
     149    for I := 0 to TWinControl(Component).ControlCount - 1 do
     150      ApplyTheme(TWinControl(Component).Controls[I]);
     151  end;
    136152
    137153  if Component is TControl then begin
     
    139155    if (Control is TEdit) or (Control is TSpinEdit) or (Control is TComboBox) and
    140156    (Control is TMemo) or (Control is TListView) or (Control is TCustomDrawGrid) or
    141     (Control is TCheckBox) then begin
     157    (Control is TCheckBox) or (Control is TPageControl) or (Control is TRadioButton) then begin
    142158      Control.Color := FTheme.ColorWindow;
    143159      Control.Font.Color := FTheme.ColorWindowText;
     
    151167      (Control as TCustomDrawGrid).Editor.Font.Color := FTheme.ColorWindowText;
    152168    end;
     169
     170    if Control is TPageControl then begin
     171      for I := 0 to TPageControl(Component).PageCount - 1 do
     172        ApplyTheme(TPageControl(Component).Pages[I]);
     173    end;
     174
     175    if Control is TCoolBar then begin
     176      (Control as TCoolBar).Themed := False;
     177    end;
    153178  end;
    154179end;
     
    156181procedure TThemeManager.UseTheme(Form: TForm);
    157182begin
    158   if not Used and (FTheme.Name = 'System') then Exit;
     183  if not Used and (FTheme.Name = ThemeNameSystem) then Exit;
    159184  ApplyTheme(Form);
    160185  Used := True;
  • trunk/Packages/Common/UThreading.pas

    r10 r25  
    11unit UThreading;
    22
    3 {$mode delphi}
    4 
    53interface
    64
    75uses
    8   Classes, SysUtils, Forms, Contnrs, SyncObjs;
     6  Classes, SysUtils, Forms, Generics.Collections, SyncObjs;
    97
    108type
    119  TExceptionEvent = procedure (Sender: TObject; E: Exception) of object;
    1210  TMethodCall = procedure of object;
    13 
    1411
    1512  { TVirtualThread }
     
    2219    function GetSuspended: Boolean; virtual; abstract;
    2320    function GetTerminated: Boolean; virtual; abstract;
    24     function GetThreadId: Integer; virtual; abstract;
     21    function GetThreadId: TThreadID; virtual; abstract;
    2522    procedure SetFreeOnTerminate(const AValue: Boolean); virtual; abstract;
    2623    procedure SetPriority(const AValue: TThreadPriority); virtual; abstract;
     
    3027    Name: string;
    3128    procedure Execute; virtual; abstract;
    32     procedure Resume; virtual; abstract;
    33     procedure Suspend; virtual; abstract;
    3429    procedure Start; virtual; abstract;
    3530    procedure Terminate; virtual; abstract;
     
    4439    property Terminated: Boolean read GetTerminated write SetTerminated;
    4540    property Finished: Boolean read GetFinished;
    46     property ThreadId: Integer read GetThreadId;
     41    property ThreadId: TThreadID read GetThreadId;
    4742  end;
    4843
     
    7065    function GetSuspended: Boolean; override;
    7166    function GetTerminated: Boolean; override;
    72     function GetThreadId: Integer; override;
     67    function GetThreadId: TThreadID; override;
    7368    procedure SetFreeOnTerminate(const AValue: Boolean); override;
    7469    procedure SetPriority(const AValue: TThreadPriority); override;
     
    8176    procedure Sleep(Delay: Integer); override;
    8277    procedure Execute; override;
    83     procedure Resume; override;
    84     procedure Suspend; override;
    8578    procedure Start; override;
    8679    procedure Terminate; override;
     
    10699  { TThreadList }
    107100
    108   TThreadList = class(TObjectList)
    109     function FindById(Id: Integer): TVirtualThread;
     101  TThreadList = class(TObjectList<TVirtualThread>)
     102    function FindById(Id: TThreadID): TVirtualThread;
    110103    constructor Create; virtual;
    111104  end;
     
    134127    Thread.FreeOnTerminate := False;
    135128    Thread.Method := Method;
    136     Thread.Resume;
     129    Thread.Start;
    137130    while (Thread.State = ttsRunning) or (Thread.State = ttsReady) do begin
    138131      if MainThreadID = ThreadID then Application.ProcessMessages;
     
    155148    Thread.Method := Method;
    156149    Thread.OnFinished := CallBack;
    157     Thread.Resume;
     150    Thread.Start;
    158151    //if Thread.State = ttsExceptionOccured then
    159152    //  raise Exception.Create(Thread.ExceptionMessage);
     
    168161  if MainThreadID = ThreadID then Method
    169162  else begin
    170     Thread := ThreadList.FindById(ThreadID);
     163    try
     164      ThreadListLock.Acquire;
     165      Thread := ThreadList.FindById(ThreadID);
     166    finally
     167      ThreadListLock.Release;
     168    end;
    171169    if Assigned(Thread) then begin
    172170      Thread.Synchronize(Method);
     
    177175{ TThreadList }
    178176
    179 function TThreadList.FindById(Id: Integer): TVirtualThread;
     177function TThreadList.FindById(Id: TThreadID): TVirtualThread;
    180178var
    181179  I: Integer;
    182180begin
    183181  I := 0;
    184   while (I < ThreadList.Count) and (TVirtualThread(ThreadList[I]).ThreadID <> Id) do
     182  while (I < ThreadList.Count) and (ThreadList[I].ThreadID <> Id) do
    185183    Inc(I);
    186   if I < ThreadList.Count then Result := TVirtualThread(ThreadList[I])
     184  if I < ThreadList.Count then Result := ThreadList[I]
    187185    else Result := nil;
    188186end;
     
    237235end;
    238236
    239 function TListedThread.GetThreadId: Integer;
     237function TListedThread.GetThreadId: TThreadID;
    240238begin
    241239  Result := FThread.ThreadID;
     
    294292  end;
    295293  FThread.Free;
    296   inherited Destroy;
     294  inherited;
    297295end;
    298296
     
    313311procedure TListedThread.Execute;
    314312begin
    315 end;
    316 
    317 procedure TListedThread.Resume;
    318 begin
    319   FThread.Resume;
    320 end;
    321 
    322 procedure TListedThread.Suspend;
    323 begin
    324   FThread.Suspend;
    325313end;
    326314
  • trunk/Packages/Common/UURI.pas

    r10 r25  
    22
    33// Date: 2011-04-04
    4 
    5 {$mode delphi}
    64
    75interface
     
    8583  end;
    8684
     85
    8786implementation
    8887
    8988function LeftCutString(var Source: string; out Output: string; Delimiter: string; Allowed: string = ''): Boolean;
    9089var
    91   I, J: Integer;
     90  I: Integer;
    9291  Matched: Boolean;
    9392begin
     
    113112function RightCutString(var Source: string; out Output: string; Delimiter: string; Allowed: string = ''): Boolean;
    114113var
    115   I, J: Integer;
     114  I: Integer;
    116115  Matched: Boolean;
    117116begin
     
    183182begin
    184183  Items.Free;
    185   inherited Destroy;
     184  inherited;
    186185end;
    187186
     
    202201
    203202procedure TURI.SetAsString(Value: string);
    204 var
    205   HostAddr: string;
    206   HostPort: string;
    207203begin
    208204  LeftCutString(Value, Scheme, ':');
     
    235231begin
    236232  Path.Free;
    237   inherited Destroy;
     233  inherited;
    238234end;
    239235
     
    246242    Fragment := TURI(Source).Fragment;
    247243    Query := TURI(Source).Query;
    248   end else inherited Assign(Source);
     244  end else inherited;
    249245end;
    250246
     
    294290destructor TURL.Destroy;
    295291begin
    296   inherited Destroy;
     292  inherited;
    297293end;
    298294
     
    347343begin
    348344  Directory.Free;
    349   inherited Destroy;
    350 end;
    351 
     345  inherited;
     346end;
    352347
    353348end.
  • trunk/Packages/Common/UXMLUtils.pas

    r15 r25  
    11unit UXMLUtils;
    2 
    3 {$mode delphi}
    42
    53interface
     
    75uses
    86  {$IFDEF WINDOWS}Windows,{$ENDIF}
    9   Classes, SysUtils, DateUtils, XMLRead, XMLWrite, DOM;
     7  Classes, SysUtils, DateUtils, DOM, xmlread;
    108
    119function XMLTimeToDateTime(XMLDateTime: string): TDateTime;
    12 function DateTimeToXMLTime(Value: TDateTime; ApplyLocalBias: Boolean = True): WideString;
     10function DateTimeToXMLTime(Value: TDateTime; ApplyLocalBias: Boolean = True): string;
    1311procedure WriteInteger(Node: TDOMNode; Name: string; Value: Integer);
    1412procedure WriteInt64(Node: TDOMNode; Name: string; Value: Int64);
     
    2119function ReadString(Node: TDOMNode; Name: string; DefaultValue: string): string;
    2220function ReadDateTime(Node: TDOMNode; Name: string; DefaultValue: TDateTime): TDateTime;
     21procedure ReadXMLFileParser(out Doc: TXMLDocument; FileName: string);
    2322
    2423
    2524implementation
     25
     26procedure ReadXMLFileParser(out Doc: TXMLDocument; FileName: string);
     27var
     28  Parser: TDOMParser;
     29  Src: TXMLInputSource;
     30  InFile: TFileStream;
     31begin
     32  try
     33    InFile := TFileStream.Create(FileName, fmOpenRead);
     34    Src := TXMLInputSource.Create(InFile);
     35    Parser := TDOMParser.Create;
     36    Parser.Options.PreserveWhitespace := True;
     37    Parser.Parse(Src, Doc);
     38  finally
     39    Src.Free;
     40    Parser.Free;
     41    InFile.Free;
     42  end;
     43end;
    2644
    2745function GetTimeZoneBias: Integer;
     
    3048  TimeZoneInfo: TTimeZoneInformation;
    3149begin
     50  {$push}{$warn 5057 off}
    3251  case GetTimeZoneInformation(TimeZoneInfo) of
    33   TIME_ZONE_ID_STANDARD: Result := TimeZoneInfo.Bias + TimeZoneInfo.StandardBias;
    34   TIME_ZONE_ID_DAYLIGHT: Result := TimeZoneInfo.Bias + TimeZoneInfo.DaylightBias;
     52    TIME_ZONE_ID_STANDARD: Result := TimeZoneInfo.Bias + TimeZoneInfo.StandardBias;
     53    TIME_ZONE_ID_DAYLIGHT: Result := TimeZoneInfo.Bias + TimeZoneInfo.DaylightBias;
    3554  else
    3655    Result := 0;
    3756  end;
     57  {$pop}
    3858end;
    3959{$ELSE}
     
    4565function LeftCutString(var Source: string; out Output: string; Delimiter: string; Allowed: string = ''): Boolean;
    4666var
    47   I, J: Integer;
     67  I: Integer;
    4868  Matched: Boolean;
    4969begin
     
    99119      if Pos('Z', XMLDateTime) > 0 then
    100120        LeftCutString(XMLDateTime, Part, 'Z');
    101       SecondFraction := StrToFloat('0' + DecimalSeparator + Part);
     121      SecondFraction := StrToFloat('0' + DefaultFormatSettings.DecimalSeparator + Part);
    102122      Millisecond := Trunc(SecondFraction * 1000);
    103123    end else begin
     
    118138end;
    119139
    120 function DateTimeToXMLTime(Value: TDateTime; ApplyLocalBias: Boolean = True): WideString;
     140function DateTimeToXMLTime(Value: TDateTime; ApplyLocalBias: Boolean = True): string;
    121141const
    122142  Neg: array[Boolean] of string =  ('+', '-');
     
    139159  NewNode: TDOMNode;
    140160begin
    141   NewNode := Node.OwnerDocument.CreateElement(Name);
    142   NewNode.TextContent := IntToStr(Value);
     161  NewNode := Node.OwnerDocument.CreateElement(DOMString(Name));
     162  NewNode.TextContent := DOMString(IntToStr(Value));
    143163  Node.AppendChild(NewNode);
    144164end;
     
    148168  NewNode: TDOMNode;
    149169begin
    150   NewNode := Node.OwnerDocument.CreateElement(Name);
    151   NewNode.TextContent := IntToStr(Value);
     170  NewNode := Node.OwnerDocument.CreateElement(DOMString(Name));
     171  NewNode.TextContent := DOMString(IntToStr(Value));
    152172  Node.AppendChild(NewNode);
    153173end;
     
    157177  NewNode: TDOMNode;
    158178begin
    159   NewNode := Node.OwnerDocument.CreateElement(Name);
    160   NewNode.TextContent := BoolToStr(Value);
     179  NewNode := Node.OwnerDocument.CreateElement(DOMString(Name));
     180  NewNode.TextContent := DOMString(BoolToStr(Value));
    161181  Node.AppendChild(NewNode);
    162182end;
     
    166186  NewNode: TDOMNode;
    167187begin
    168   NewNode := Node.OwnerDocument.CreateElement(Name);
    169   NewNode.TextContent := Value;
     188  NewNode := Node.OwnerDocument.CreateElement(DOMString(Name));
     189  NewNode.TextContent := DOMString(Value);
    170190  Node.AppendChild(NewNode);
    171191end;
     
    175195  NewNode: TDOMNode;
    176196begin
    177   NewNode := Node.OwnerDocument.CreateElement(Name);
    178   NewNode.TextContent := DateTimeToXMLTime(Value);
     197  NewNode := Node.OwnerDocument.CreateElement(DOMString(Name));
     198  NewNode.TextContent := DOMString(DateTimeToXMLTime(Value));
    179199  Node.AppendChild(NewNode);
    180200end;
     
    185205begin
    186206  Result := DefaultValue;
    187   NewNode := Node.FindNode(Name);
    188   if Assigned(NewNode) then
    189     Result := StrToInt(NewNode.TextContent);
     207  NewNode := Node.FindNode(DOMString(Name));
     208  if Assigned(NewNode) then
     209    Result := StrToInt(string(NewNode.TextContent));
    190210end;
    191211
     
    195215begin
    196216  Result := DefaultValue;
    197   NewNode := Node.FindNode(Name);
    198   if Assigned(NewNode) then
    199     Result := StrToInt64(NewNode.TextContent);
     217  NewNode := Node.FindNode(DOMString(Name));
     218  if Assigned(NewNode) then
     219    Result := StrToInt64(string(NewNode.TextContent));
    200220end;
    201221
     
    205225begin
    206226  Result := DefaultValue;
    207   NewNode := Node.FindNode(Name);
    208   if Assigned(NewNode) then
    209     Result := StrToBool(NewNode.TextContent);
     227  NewNode := Node.FindNode(DOMString(Name));
     228  if Assigned(NewNode) then
     229    Result := StrToBool(string(NewNode.TextContent));
    210230end;
    211231
     
    215235begin
    216236  Result := DefaultValue;
    217   NewNode := Node.FindNode(Name);
    218   if Assigned(NewNode) then
    219     Result := NewNode.TextContent;
     237  NewNode := Node.FindNode(DOMString(Name));
     238  if Assigned(NewNode) then
     239    Result := string(NewNode.TextContent);
    220240end;
    221241
     
    226246begin
    227247  Result := DefaultValue;
    228   NewNode := Node.FindNode(Name);
    229   if Assigned(NewNode) then
    230     Result := XMLTimeToDateTime(NewNode.TextContent);
     248  NewNode := Node.FindNode(DOMString(Name));
     249  if Assigned(NewNode) then
     250    Result := XMLTimeToDateTime(string(NewNode.TextContent));
    231251end;
    232252
  • trunk/UCore.lfm

    r22 r25  
    33  OnDestroy = DataModuleDestroy
    44  OldCreateOrder = False
    5   Height = 578
    6   HorizontalOffset = 533
    7   VerticalOffset = 229
    8   Width = 817
     5  Height = 867
     6  HorizontalOffset = 800
     7  VerticalOffset = 344
     8  Width = 1226
     9  PPI = 144
    910  object ImageList1: TImageList
    1011    Height = 32
    1112    Width = 32
    12     left = 368
    13     top = 170
     13    Left = 552
     14    Top = 255
    1415    Bitmap = {
    15       4C690C000000200000002000000061C66E0061C66E0061C66E0061C66E0061C6
    16       6E0061C66E0061C66E0061C66E0061C66E0061C66E0061C56E0048B05E0947AF
    17       5D4E47AE5C7946AD5B9A47AD5BB046AC5AB045AA589A44A9577944A7564E43A6
    18       55095CC06B005CC06B005BBF6B005BBF6A005ABE6A005ABD6A0059BD6A0059BC
    19       690058BB690058BB690057BA680061C66E0061C66E0061C66E0061C66E0061C6
    20       6E0061C66E0061C66E0061C66E0061C66E0048B15E4E48B05EB147AF5DF647AE
    21       5CFF46AD5BFF46AC5AFF46AC5AFF46AB5AFF45A958FF44A857FF43A756FF43A5
    22       55F642A454B142A3534E5BBF6A005ABE6A005ABD6A0059BD6A0059BC690058BB
    23       690058BB690057BA680057B9680061C66E0061C66E0061C66E0061C66E0061C6
    24       6E0061C66E0061C66E0048B25F3648B15FC348B15EFF47B05DFF47AF5CFF5CB8
    25       6FFF6CBE7EFF75C286FF79C58BFF79C58AFF74C184FF6ABB7CFF59B26BFF42A4
    26       54FF42A353FF41A252FF41A151C3409F503659BD6A0059BC690058BB690058BB
    27       690057BA680057B9680056B9680061C66E0061C66E0061C66E0061C66E0061C6
    28       6E0061C66E0049B3607848B25FFF48B15EFF55B66AFF72C284FF8ECF9FFF93D1
    29       A2FF90D0A0FF8CCF9BFF88CE98FF88CE98FF8BCF9BFF90D0A0FF92D1A2FF8ECE
    30       9EFF6FBC7FFF50AA60FF40A050FF409E4FFF3F9D4E7858BB690058BB690057BA
    31       680057B9680056B9680055B8670061C66E0061C66E0061C66E0061C66E0049B4
    32       600949B360A848B25FFF48B15EFF6ABF7EFF94D2A4FF91D1A1FF8ED09DFF89CE
    33       98FF83CD93FF7ECB8DFF79C989FF79C989FF7DCA8DFF83CC92FF88CD98FF8DCF
    34       9DFF91D0A1FF94D1A4FF66B676FF3F9D4EFF3F9C4DFF3E9B4CA83D9A4B0957B9
    35       680056B9680055B8670055B8670061C66E0061C66E0061C66E0049B4610349B3
    36       60B148B25FFF4EB363FF7EC890FF92D1A2FF8ED09DFF87CE96FF7FCC8EFF77C9
    37       86FF71C77FFF6CC57BFF69C578FF68C477FF6BC57AFF6FC57FFF75C785FF7DCA
    38       8DFF86CC96FF8DCF9DFF92D1A2FF7BC28BFF449F52FF3E9A4BFF3D994AB13C97
    39       490355B8670055B8670054B7670061C66E0061C66E0061C66E0049B3608748B2
    40       5FFF50B467FF8ACD9BFF91D1A1FF8ACF99FF80CC8FFF76C985FF6DC67CFF67C5
    41       76FF63C372FF61C270FF5FC16EFF5FC16EFF5FC06FFF61C170FF64C174FF6AC3
    42       7AFF73C683FF7EC98EFF88CD99FF90D0A0FF89CA99FF469F54FF3D9849FF3C96
    43       488755B8670054B7670054B6660061C66E0061C66E0049B3603C49B25FFF48B2
    44       5FFF83CA94FF91D1A1FF88CE97FF7CCB8BFF70C87FFF67C576FF63C371FF5FC2
    45       6EFF5EC16DFF5CC06BFF5CC06BFF5BBF6BFF5BBF6AFF5BBE6BFF5CBE6CFF5EBF
    46       6FFF63C073FF7DC98BFF94D2A1FF86CC96FF90D0A0FF80C48FFF3C9749FF3C95
    47       48FF3B94473C54B6660053B6660061C66E0049B3600349B360CF48B25FFF6DC1
    48       80FF92D1A2FF89CF99FF7CCB8BFF6EC77DFF65C473FF60C36FFF5EC16DFF5DC1
    49       6CFF5CC06BFF5CC06BFF5BBF6BFF5BBF6AFF5ABE6AFF5ABD6AFF59BD6AFF5ABC
    50       6AFF6CC37CFFEAF7ECFFF6FBF7FF96D3A3FF87CC98FF91D0A2FF66B274FF3B94
    51       47FF3B9346CF3A92450353B5660061C66E0049B3605448B25FFF59B86EFF94D1
    52       A4FF8DD09DFF80CC8FFF6FC87FFF64C473FF60C36EFF5DC16CFF5DC16CFF5CC0
    53       6BFF5CC06BFF5BBF6BFF5BBF6AFF5ABE6AFF5ABD6AFF59BD6AFF59BC69FF6AC2
    54       79FFE7F5EAFFFFFFFFFFFFFFFFFFF8FCF9FF9AD4A7FF8CCE9CFF93D1A4FF4FA1
    55       5BFF3A9245FF3A91445452B4660061C56E0048B25FBD48B15EFF74C387FF91D1
    56       A1FF86CE96FF75C984FF67C575FF60C36EFF5DC16CFF5DC16CFF5CC06BFF5CC0
    57       6BFF5BBF6BFF5BBF6AFF5ABE6AFF5ABD6AFF59BD6AFF59BC69FF68C177FFE5F5
    58       E8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFDFBFFA3D8B0FF90D0A0FF6EB7
    59       7CFF3A9144FF399043BD52B4650048B25F1248B15FFC48B05EFF92D1A2FF8DD0
    60       9DFF7ECC8DFF6DC67BFF62C371FF5EC16DFF5DC16CFF5CC06BFF5CC06BFF5BBF
    61       6BFF5BBF6AFF5ABE6AFF5ABD6AFF59BD6AFF59BC69FF68C177FFE5F5E8FFFFFF
    62       FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFDFAFF99D3A6FF8BCD9CFF92CF
    63       A2FF399043FF398F42FC388E421548B25F5748B15EFF5FBA73FF92D1A2FF88CE
    64       98FF76C985FF67C575FF5FC26EFF5DC16CFF5CC06BFF5CC06BFF5BBF6BFF5BBF
    65       6AFF5ABE6AFF5ABD6AFF59BD6AFF59BC69FF66C175FFE3F4E6FFFFFFFFFFFFFF
    66       FFFFFFFFFFFFFFFFFFFFFFFFFFFFF9FCFAFF87CC93FF70C282FF85CB96FF91D0
    67       A1FF57A462FF388E42FF388D415748B15E8B47B05DFF71C283FF8FD09FFF82CC
    68       92FF70C77FFF62C371FF5EC16DFF5CC06BFF5CC06BFF5BBF6BFF5BBF6AFF5ABE
    69       6AFF5ABD6AFF59BD6AFF59BC69FF66C175FFE2F3E5FFFFFFFFFFFFFFFFFFFFFF
    70       FFFFFFFFFFFFFFFFFFFFF9FCFAFF83CA90FF59B96CFF68BE7AFF7EC78FFF8DCE
    71       9EFF6AB377FF388D41FF378D418B48B15EAD48B05EFF7AC68CFF8BCF9AFF7DCB
    72       8CFF6BC57AFF61C270FF5CC06BFF9FDAA8FF85D091FF5BBF6AFF5ABE6AFF5ABD
    73       6AFF59BD6AFF59BC69FF66C175FFE0F2E3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
    74       FFFFFFFFFFFFFBFDFBFF84CB91FF54B667FF57B76AFF62BB75FF77C488FF88CC
    75       98FF74BB82FF398E41FF388D40AD49B05EBA48AF5DFF7BC78DFF86CD96FF78C9
    76       87FF68C477FF5FC16EFFB2E1B9FFFFFFFFFFF9FDFAFF81CD8DFF5ABD6AFF59BD
    77       6AFF59BC69FF64C074FFE0F2E3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
    78       FFFFFBFDFBFF8ACD97FF53B666FF53B566FF55B569FF5FBA71FF71C183FF82C9
    79       93FF77BD85FF398F42FF398E41BE49AF5DBB48AE5CFF7BC68CFF86CD96FF78C9
    80       87FF6BC479FFC3E8C8FFFFFFFFFFFFFFFFFFFFFFFFFFF5FBF6FF7CCB8AFF59BC
    81       69FF62BF72FFDEF1E1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFE
    82       FDFF8CCE98FF53B666FF53B566FF52B466FF55B568FF5EB971FF71C183FF82C9
    83       93FF76BD85FF398E41FF388D41BE47AF5CAD47AE5CFF79C58AFF8ACE9AFF7DCB
    84       8CFFD5EED9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3FAF4FF81CC
    85       8EFFDCF1DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFEFDFF8ECF
    86       9AFF53B666FF53B566FF52B466FF53B466FF55B569FF62BA75FF76C388FF87CB
    87       98FF74BA81FF378B3FFF378B3EAD46AD5B8B46AC5AFF70C082FF8FD09FFF82CC
    88       91FFB1E0B9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
    89       FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFEFDFF92D19EFF53B6
    90       66FF53B566FF52B466FF52B465FF52B366FF57B66BFF66BC79FF7DC78FFF8DCE
    91       9EFF69B175FF36893EFF36893E8B46AC5A5745AB59FF5FB771FF92D1A2FF87CD
    92       97FF74C784FFB1E0B9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
    93       FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF94D1A0FF53B666FF53B5
    94       66FF52B466FF52B465FF51B365FF53B467FF5BB76FFF6EC080FF84CA95FF91D0
    95       A2FF54A05FFF36883DFF35873C5A45AB591545AA58FC44A958FF92D0A2FF8DCF
    96       9DFF7DCA8DFF6AC37AFFAFDFB8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
    97       FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF96D2A1FF53B666FF53B566FF52B4
    98       66FF52B465FF51B365FF52B366FF56B569FF63BB76FF78C48AFF8BCD9CFF92CF
    99       A2FF36893DFF35883CFC35873B155CC06B0044A958BD44A857FF70BE81FF91D0
    100       A1FF85CC95FF73C683FF63C073FFB2DFBAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
    101       FFFFFFFFFFFFFFFFFFFFFFFFFFFF9AD4A5FF53B666FF53B566FF52B466FF52B4
    102       65FF51B365FF52B366FF53B367FF5CB76FFF6DBF80FF82C994FF90CFA0FF6AB1
    103       76FF35883CFF35873CBD4DAE63005CC06B0044A8574E43A756FF52AE63FF94D1
    104       A4FF8DCF9DFF7EC98EFF6BC27CFF5FBE70FFB5E1BCFFFFFFFFFFFFFFFFFFFFFF
    105       FFFFFFFFFFFFFFFFFFFF9ED6A9FF53B666FF53B566FF52B466FF52B465FF51B3
    106       65FF52B366FF52B366FF58B66CFF65BB79FF7AC58CFF8BCD9CFF93D1A4FF4795
    107       50FF35873CFF35863B4E4DAE62005BBF6B005BBF6A0043A655C342A554FF69B9
    108       79FF92D0A2FF88CD98FF79C789FF69C17AFF5FBC70FFB9E2C0FFFFFFFFFFFFFF
    109       FFFFFFFFFFFFA2D7ACFF53B666FF53B566FF52B466FF52B465FF51B365FF52B3
    110       66FF53B367FF59B66CFF63BA77FF74C287FF86CA97FF91D0A1FF62AA6DFF3587
    111       3CFF35863BC34DAE62004CAE62005BBF6A005ABE6A0043A5543942A453FF41A3
    112       52FF7DC48DFF90D0A0FF86CC96FF78C689FF6AC17CFF60BC72FFBFE4C6FFFFFF
    113       FFFFA9DAB2FF54B667FF53B566FF52B466FF53B466FF52B366FF54B468FF56B5
    114       69FF5CB76FFF66BB79FF75C287FF84C995FF8FCFA0FF7ABD87FF35873CFF3586
    115       3BFF34863B394CAE62004CAD62005ABE6A005ABD6A0059BD6A0042A3537B41A2
    116       52FF45A356FF89CB99FF90D0A0FF88CC98FF7CC88DFF70C381FF66BE78FF92D1
    117       9EFF5AB96CFF57B76AFF55B569FF55B568FF55B569FF58B66BFF5CB76FFF63BB
    118       76FF6DBF80FF7AC58CFF86CA97FF90CFA0FF87C797FF3C8D43FF35873BFF3586
    119       3B7B4CAE62004CAD62004CAD62005ABD6A0059BD6A0059BC690058BB690041A1
    120       51A5409F50FF45A255FF7BC28BFF91D0A2FF8CCE9CFF84CA94FF7AC68BFF70C2
    121       82FF69BF7BFF63BC76FF60BA72FF5FB972FF62BB75FF67BD7AFF6FC081FF78C4
    122       8AFF82C994FF8BCD9CFF91D0A1FF79BD86FF3C8D43FF35873CFF35863BA84CAE
    123       62004CAD62004CAD62004CAD620059BD6A0059BC690058BB690058BB690040A0
    124       5009409E4FA83F9D4EFF3E9C4DFF65B474FF94D1A4FF90D0A0FF8BCE9CFF86CB
    125       96FF7FC890FF78C589FF73C285FF73C285FF77C489FF7EC78FFF85CA96FF8BCD
    126       9CFF90CFA0FF93D1A4FF61AA6CFF36883DFF35873CFF35863BA834853A094CAD
    127       62004CAD62004CAD62004CAD620059BC690058BB690058BB690057BA680057B9
    128       680056B968003F9C4D783E9B4CFF3D9A4BFF4EA35BFF6EB87CFF8FCD9EFF92D0
    129       A2FF8ECF9FFF89CC9AFF84CA95FF84CA95FF89CC99FF8ECE9EFF92D0A2FF8ECD
    130       9EFF6CB278FF489752FF36883DFF35873CFF35863B784CAE62004CAD62004CAD
    131       62004CAD62004CAD62004CAD620058BB690058BB690057BA680057B9680056B9
    132       680055B8670055B867003E9A4B363D994AC63C9749FF3C9648FF3B9547FF55A6
    133       61FF68B276FF6FB87DFF76BE85FF76BD85FF6EB77CFF67B074FF52A05CFF378A
    134       3FFF36893EFF36883DFF35873CC635873B364CAE62004CAD62004CAD62004CAD
    135       62004CAD62004CAD62004CAD620058BB690057BA680057B9680056B9680055B8
    136       670055B8670054B7670054B6660053B666003C9648513B9547B43B9446F93A93
    137       45FF3A9144FF3A9144FF3A9143FF399043FF398E42FF378C40FF378B3FFF368A
    138       3EF936893DB435883C514DAE62004CAE62004CAD62004CAD62004CAD62004CAD
    139       62004CAD62004CAD62004CAD620057BA680057B9680056B9680055B8670055B8
    140       670054B7670054B6660053B6660053B5660052B4660052B465003A93460C3A92
    141       4551399144813A90449B398F43B6398E42B6388D419B378B3F81368A3E513689
    142       3D0C4DAE63004DAE62004CAE62004CAD62004CAD62004CAD62004CAD62004CAD
    143       62004CAD62004CAD62004CAD6200FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    144       FF00FFFFFF00FFFFFF00FFFFFF00FAFAFAFF3B4AC6FF2838C1FF2838C1FF2838
    145       C1FF2838C1FF2838C1FF2838C1FF2838C1FF2838C1FF2838C1FF2838C1FF2E3E
    146       C3FF2838C1FF3B4AC6FFFAFAFAFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    147       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    148       FF00FFFFFF00FFFFFF00FAFAFAFF3B4AC6FF969DDEFFBDC3EEFFA3ACE9FFA3AC
    149       E9FF99A0E0FF8D98E5FF8D98E5FF8D98E5FF8D98E5FF808BDDFF808BDDFF7985
    150       DFFF808BDDFF6A78D9FF3B49BFFFFAFAFAFFFFFFFF00FFFFFF00FFFFFF00FFFF
    151       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    152       FF00FFFFFF00FAFAFAFF3B4AC6FF99A0E0FFB1B9EDFF2341E5FF2341E5FF2341
    153       E5FF2341E5FF2341E5FF2341E5FF2341E5FF2341E5FF2341E5FF2341E5FF2341
    154       E5FF2A47E5FF7985DFFF626FD8FF3D4CC0FFFAFAFAFFFFFFFF00FFFFFF00FFFF
    155       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    156       FF00FAFAFAFF3B4AC6FF99A0E0FFBDC3EEFF2A47E5FF2341E5FF2A47E5FF2A47
    157       E5FF2A47E5FF2A47E5FF2A47E5FF2A47E5FF2A47E5FF2A47E5FF2A47E5FF2A47
    158       E5FF2A47E5FF2A47E5FF6A78D9FF626FD8FF3D4CC0FFFAFAFAFFFFFFFF00FFFF
    159       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FAFA
    160       FAFF3B4AC6FF969DDEFFBDC3EEFF2F4AE6FF2A47E5FF2F4AE6FF2F4AE6FF2F4A
    161       E6FF2F4AE6FF2F4AE6FF2F4AE6FF2F4AE6FF2F4AE6FF2F4AE6FF2F4AE6FF2F4A
    162       E6FF2F4AE6FF2A47E5FF2F4AE6FF6A78D9FF5A68D5FF3D4CC0FFFAFAFAFFFFFF
    163       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FAFAFAFF3B4A
    164       C6FF8C95DCFFB1B9EDFF2F4AE6FF2A47E5FF2F4AE6FF2F4AE6FF2F4AE6FF2F4A
    165       E6FF2F4AE6FF2F4AE6FF2F4AE6FF2F4AE6FF2F4AE6FF2F4AE6FF2F4AE6FF2F4A
    166       E6FF2F4AE6FF2F4AE6FF2F4AE6FF2F4AE6FF6A78D9FF5663D3FF3D4CC0FFFAFA
    167       FAFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FAFAFAFF3B4AC6FF8C95
    168       DCFFA3ACE9FF2F4AE6FF2A47E5FF2F4AE6FF2A47E5FF3651E8FF3651E8FF2A47
    169       E5FF2F4AE6FF2F4AE6FF2F4AE6FF2F4AE6FF2F4AE6FF2F4AE6FF2A47E5FF3651
    170       E8FF3651E8FF2A47E5FF2F4AE6FF2F4AE6FF2F4AE6FF626FD8FF5663D3FF3D4C
    171       C0FFFAFAFAFFFFFFFF00FFFFFF00FFFFFF00FAFAFAFF3B4AC6FF828AD9FFA3AC
    172       E9FF2F4AE6FF2F4AE6FF2F4AE6FF314AEBFF2F4AE6FFF0F2FEFFF0F2FEFF314A
    173       EBFF314AEBFF3651E8FF3651E8FF3651E8FF3651E8FF314AEBFF314AEBFFF0F2
    174       FEFFF0F2FEFF2F4AE6FF314AEBFF3651E8FF2F4AE6FF3651E8FF5A68D5FF4958
    175       C9FF3D4CC0FFFAFAFAFFFFFFFF00FAFAFAFF3B4AC6FF808BDDFF99A0E0FF3651
    176       E8FF2F4AE6FF3651E8FF2F4AE6FF2F4AE6FFE8ECFDFFFFFFFF00FFFFFF00E8EC
    177       FDFF2F4AE6FF2F4AE6FF3651E8FF3651E8FF2F4AE6FF2F4AE6FFE8ECFDFFFFFF
    178       FF00FFFFFF00E8ECFDFF2F4AE6FF2F4AE6FF3651E8FF3651E8FF3651E8FF5663
    179       D3FF4754C8FF3D4CC0FFFAFAFAFFEFEFEFFF2838C1FFACB3E5FF3651E8FF3651
    180       E8FF3B54ECFF3651E8FF314AEBFFF2F4FDFFFFFFFF00FFFFFF00FFFFFF00FFFF
    181       FF00E8ECFDFF2F4AE6FF314AEBFF314AEBFF2F4AE6FFE8ECFDFFFFFFFF00FFFF
    182       FF00FFFFFF00FFFFFF00F2F4FDFF314AEBFF3651E8FF3B54ECFF3B54ECFF3B54
    183       ECFF5663D3FF2E3EC3FFEFEFEFFFE9E9E9FF2838C1FFACB3E5FF314AEBFF3B54
    184       ECFF3B54ECFF3B54ECFF314AEBFFC3CBFCFFFFFFFF00FFFFFF00FFFFFF00FFFF
    185       FF00FFFFFF00E8ECFDFF314AEBFF314AEBFFE8ECFDFFFFFFFF00FFFFFF00FFFF
    186       FF00FFFFFF00FFFFFF00C3CBFCFF314AEBFF3B54ECFF3B54ECFF3B54ECFF3B54
    187       ECFF5663D3FF2E3EC3FFE9E9E9FFE9E9E9FF2838C1FFA3ACE9FF3D54F5FF3B54
    188       ECFF3B54ECFF3B54ECFF3B54ECFF314AEBFFC3CBFCFFFFFFFF00FFFFFF00FFFF
    189       FF00FFFFFF00FFFFFF00E0E5FDFFE0E5FDFFFFFFFF00FFFFFF00FFFFFF00FFFF
    190       FF00FFFFFF00C3CBFCFF314AEBFF3B54ECFF3B54ECFF3B54ECFF3B54ECFF3B54
    191       ECFF4958C9FF2E3EC3FFE9E9E9FFE9E9E9FF2838C1FF99A0E0FF3B54ECFF445C
    192       EFFF445CEFFF445CEFFF445CEFFF3B54ECFF314AEBFFC3CBFCFFFFFFFF00FFFF
    193       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    194       FF00C3CBFCFF314AEBFF3B54ECFF445CEFFF445CEFFF445CEFFF445CEFFF3B54
    195       ECFF4958C9FF2E3EC3FFE9E9E9FFE9E9E9FF2838C1FF969DDEFF3B54ECFF445C
    196       EFFF445CEFFF445CEFFF445CEFFF445CEFFF3B54ECFF314AEBFFC3CBFCFFFFFF
    197       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00C3CB
    198       FCFF314AEBFF3B54ECFF445CEFFF445CEFFF445CEFFF445CEFFF445CEFFF455D
    199       F0FF4754C8FF2E3EC3FFE9E9E9FFE9E9E9FF2838C1FF8C95DCFF3B54ECFF455D
    200       F0FF465EF0FF465EF0FF465EF0FF465EF0FF455DF0FF3B54ECFF314AEBFFB6BF
    201       FAFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00B6BFFAFF314A
    202       EBFF3B54ECFF455DF0FF465EF0FF465EF0FF465EF0FF465EF0FF455DF0FF455D
    203       F0FF4754C8FF2E3EC3FFE9E9E9FFE9E9E9FF2838C1FF8C95DCFF495FF8FF465E
    204       F0FF465EF0FF465EF0FF465EF0FF465EF0FF455DF0FF3B54ECFF3B54ECFFE0E5
    205       FDFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00E0E5FDFF3B54
    206       ECFF3B54ECFF455DF0FF465EF0FF465EF0FF465EF0FF465EF0FF465EF0FF465E
    207       F0FF3D4CC0FF2E3EC3FFE9E9E9FFE9E9E9FF2838C1FF828AD9FF495FF8FF4D63
    208       F4FF4D63F4FF4D63F4FF4D63F4FF465EF0FF495FF8FF455DF0FFE8ECFDFFFFFF
    209       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00E8EC
    210       FDFF455DF0FF495FF8FF465EF0FF4D63F4FF4D63F4FF4D63F4FF4D63F4FF4D63
    211       F4FF3B49BFFF2E3EC3FFE9E9E9FFE9E9E9FF2838C1FF828AD9FF495FF8FF4D63
    212       F4FF4D63F4FF4D63F4FF4D63F4FF495FF8FF455DF0FFE8ECFDFFFFFFFF00FFFF
    213       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    214       FF00E8ECFDFF455DF0FF495FF8FF4D63F4FF4D63F4FF4D63F4FF4D63F4FF4D63
    215       F4FF3B4AC6FF2E3EC3FFE9E9E9FFE9E9E9FF2838C1FF7881D3FF4D63F4FF4D63
    216       F4FF4D63F4FF4D63F4FF455DF0FF4D63F4FFE8ECFDFFFFFFFF00FFFFFF00FFFF
    217       FF00FFFFFF00FFFFFF00B6BFFAFFB6BFFAFFFFFFFF00FFFFFF00FFFFFF00FFFF
    218       FF00FFFFFF00E8ECFDFF4D63F4FF465EF0FF4D63F4FF4D63F4FF4D63F4FF5468
    219       F9FF3341C0FF2E3EC3FFE9E9E9FFE9E9E9FF2838C1FF707BD2FF4D63F4FF5468
    220       F9FF5468F9FF4D63F4FF495FF8FFE8ECFDFFFFFFFF00FFFFFF00FFFFFF00FFFF
    221       FF00FFFFFF00C3CBFCFF3D54F5FF3D54F5FFC3CBFCFFFFFFFF00FFFFFF00FFFF
    222       FF00FFFFFF00FFFFFF00D8DCFDFF495FF8FF5468F9FF5468F9FF5468F9FF5468
    223       F9FF3341C0FF2E3EC3FFE9E9E9FFE9E9E9FF2838C1FF707BD2FF5468F9FF5468
    224       F9FF5468F9FF5468F9FF495FF8FFCCD1FDFFFFFFFF00FFFFFF00FFFFFF00FFFF
    225       FF00C3CBFCFF495FF8FF4D63F4FF4D63F4FF495FF8FFC3CBFCFFFFFFFF00FFFF
    226       FF00FFFFFF00FFFFFF00CCD1FDFF495FF8FF5468F9FF5468F9FF586CF9FF586C
    227       F9FF2E3EC3FF2E3EC3FFE9E9E9FFE9E9E9FF3B4AC6FF5663D3FF626FD8FF586C
    228       F9FF5468F9FF586CF9FF5468F9FF495FF8FFC3CBFCFFFFFFFF00FFFFFF00F0F2
    229       FEFF495FF8FF4D63F4FF586CF9FF586CF9FF4D63F4FF5468F9FFF0F2FEFFFFFF
    230       FF00FFFFFF00C3CBFCFF495FF8FF5468F9FF586CF9FF586CF9FF586CF9FF3647
    231       CBFF2E3EC3FF3B49BFFFE9E9E9FFEFEFEFFFC6C6C6FF3B49BFFF4958C9FF626F
    232       D8FF5D71FBFF586CF9FF586CF9FF5468F9FF495FF8FFCCD1FDFFF2F4FDFF5468
    233       F9FF5468F9FF586CF9FF586CF9FF586CF9FF586CF9FF5468F9FF5468F9FFF2F4
    234       FDFFCCD1FDFF495FF8FF5468F9FF586CF9FF5D71FBFF586CF9FF3647CBFF2E3E
    235       C3FF3D4CC0FFC6C6C6FFEFEFEFFFFAFAFAFFE6E6E6FFC6C6C6FF3B49BFFF4958
    236       C9FF5A68D5FF5D71FBFF5D71FBFF586CF9FF586CF9FF5468F9FF4D63F4FF5468
    237       F9FF586CF9FF5D71FBFF5D71FBFF5D71FBFF5D71FBFF586CF9FF5468F9FF4D63
    238       F4FF5468F9FF586CF9FF5D71FBFF5D71FBFF5D71FBFF3647CBFF2E3EC3FF3D4C
    239       C0FFC6C6C6FFE6E6E6FFFAFAFAFFFFFFFF00FAFAFAFFE6E6E6FFC6C6C6FF3B49
    240       BFFF4754C8FF5663D3FF5D71FBFF5D71FBFF5D71FBFF5D71FBFF5D71FBFF5D71
    241       FBFF5D71FBFF5D71FBFF5D71FBFF5D71FBFF5D71FBFF5D71FBFF5D71FBFF5D71
    242       FBFF5D71FBFF5D71FBFF5D71FBFF5D71FBFF3647CBFF2E3EC3FF3D4CC0FFC6C6
    243       C6FFE6E6E6FFFAFAFAFFFFFFFF00FFFFFF00FFFFFF00FAFAFAFFE6E6E6FFC6C6
    244       C6FF3B49BFFF4754C8FF5663D3FF6073FCFF6376FEFF6073FCFF6073FCFF6073
    245       FCFF6073FCFF6073FCFF6073FCFF6073FCFF6073FCFF6073FCFF6073FCFF6073
    246       FCFF6073FCFF6376FEFF6073FCFF3647CBFF2E3EC3FF3D4CC0FFC6C6C6FFE6E6
    247       E6FFFAFAFAFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FAFAFAFFE6E6
    248       E6FFC6C6C6FF3B49BFFF3B49BFFF4756D0FF6376FEFF6376FEFF6376FEFF6376
    249       FEFF6376FEFF6376FEFF6376FEFF6376FEFF6376FEFF6376FEFF6376FEFF6376
    250       FEFF6376FEFF6376FEFF3647CBFF2E3EC3FF3D4CC0FFC6C6C6FFE6E6E6FFFAFA
    251       FAFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FAFA
    252       FAFFE6E6E6FFC6C6C6FF3B49BFFF3B4AC6FF4756D0FF697CFFFF697CFFFF697C
    253       FFFF697CFFFF697CFFFF697CFFFF697CFFFF697CFFFF697CFFFF697CFFFF697C
    254       FFFF697CFFFF3647CBFF2E3EC3FF3D4CC0FFC6C6C6FFE6E6E6FFFAFAFAFFFFFF
    255       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    256       FF00FAFAFAFFE6E6E6FFC6C6C6FF3D4CC0FF3B4AC6FF3B4AC6FF3B4AC6FF3B4A
    257       C6FF3341C0FF3341C0FF3341C0FF3341C0FF3341C0FF2E3EC3FF2E3EC3FF2E3E
    258       C3FF2E3EC3FF2E3EC3FF3D4CC0FFC6C6C6FFE6E6E6FFFAFAFAFFFFFFFF00FFFF
    259       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    260       FF00FFFFFF00FAFAFAFFE6E6E6FFC6C6C6FF3B4AC6FF2E3EC3FF2E3EC3FF2E3E
    261       C3FF2E3EC3FF2E3EC3FF2E3EC3FF2E3EC3FF2E3EC3FF2E3EC3FF2E3EC3FF2E3E
    262       C3FF2E3EC3FF3B49BFFFC6C6C6FFE6E6E6FFFAFAFAFFFFFFFF00FFFFFF00FFFF
    263       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    264       FF00FFFFFF00FFFFFF00FAFAFAFFE6E6E6FFC6C6C6FFBCBCBCFFBCBCBCFFBCBC
    265       BCFFBCBCBCFFBCBCBCFFBCBCBCFFBCBCBCFFBCBCBCFFBCBCBCFFBCBCBCFFBCBC
    266       BCFFBCBCBCFFC6C6C6FFE6E6E6FFFAFAFAFFFFFFFF00FFFFFF00FFFFFF00FFFF
    267       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    268       FF00FFFFFF00FFFFFF00FFFFFF00FAFAFAFFEFEFEFFFE9E9E9FFE9E9E9FFE9E9
    269       E9FFE9E9E9FFE9E9E9FFE9E9E9FFE9E9E9FFE9E9E9FFE9E9E9FFE9E9E9FFE9E9
    270       E9FFE9E9E9FFEFEFEFFFFAFAFAFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    271       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    272       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    273       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    274       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    275       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    276       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    277       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    278       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    279       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    280       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    281       FF00FFFFFF00FEFEFEFFFEFEFEFFFAFAFAFFF7F7F7FFF7F7F7FFF7F7F7FFF7F7
    282       F7FFF7F7F7FFF7F7F7FFF7F7F7FFF7F7F7FFF7F7F7FFF7F7F7FFF7F7F7FFF7F7
    283       F7FFF7F7F7FFF7F7F7FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    284       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    285       FF00FFFFFF00FEFEFEFF8C8C8CFF797979FF797979FF797979FF797979FF7979
    286       79FF808080FF808080FF808080FF808080FF868686FF868686FF868686FF8686
    287       86FF868686FF808080FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    288       FF00FFFFFF00FFFFFF00FFFFFF00FEFEFEFFFEFEFEFFFEFEFEFFFEFEFEFFFFFF
    289       FF00FFFFFF00FAFAFAFF737373FF737373FF797979FF797979FF797979FF7373
    290       73FF737373FF737373FF737373FF737373FF737373FF737373FF737373FF7373
    291       73FF737373FF737373FFC3C3C3FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    292       FF00FFFFFF00FFFFFF00FEFEFEFFCFCFE7FFB5B5DBFFFAFAFAFFFAFAFAFFFEFE
    293       FEFFFFFFFF00F7F7F7FF6D6D6DFF797979FF868686FF808080FF808080FF7979
    294       79FF797979FF797979FF797979FF737373FF737373FF6D6D6DFF737373FF7979
    295       79FF9C9C9CFF797979FFA8A8A8FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    296       FF00FFFFFF00FFFFFF00FEFEFEFFC4C4DBFF04068CFFB5B5DBFFF1F1F1FFF7F7
    297       F7FFFEFEFEFFF7F7F7FF6D6D6DFF797979FF868686FF808080FF808080FF8080
    298       80FF797979FF797979FF797979FF737373FF6D6D6DFF737373FF949494FFA8A8
    299       A8FFB3B3B3FF797979FF9C9C9CFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    300       FF00FFFFFF00FFFFFF00FEFEFEFFC4C4DBFF04068CFF04068CFFA0A0BDFFEAEA
    301       EAFFF7F7F7FFF5F5F5FF6D6D6DFF797979FF868686FF868686FF808080FF8080
    302       80FF808080FF737373FF656565FF6D6D6DFF8C8C8CFFA8A8A8FFB3B3B3FFC3C3
    303       C3FFBCBCBCFF737373FF9C9C9CFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    304       FF00FFFFFF00FFFFFF00FEFEFEFFC4C4DBFF04068CFF393ECDFF000081FFA0A0
    305       BDFFEAEAEAFFF1F1F1FF676767FF797979FF868686FF868686FF868686FF7979
    306       79FF606060FF656565FF868686FFA8A8A8FFB3B3B3FFBCBCBCFFC7C7C7FFCDCD
    307       CDFFBCBCBCFF737373FF9C9C9CFFFFFFFF00FEFEFEFFFEFEFEFFFEFEFEFFFAFA
    308       FAFFFAFAFAFFFAFAFAFFFAFAFAFFC4C4DBFF04068CFF616DFFFF393ECDFF0000
    309       81FFA0A0BDFFE2E2E2FF676767FF797979FF8C8C8CFF868686FF868686FF6767
    310       67FF6D6D6DFF9C9C9CFFB3B3B3FFBCBCBCFFC3C3C3FFCDCDCDFFCDCDCDFFCDCD
    311       CDFFBCBCBCFF737373FF9C9C9CFFFEFEFEFFC4C4DBFF8686C0FF8686C0FF8686
    312       C0FF8686C0FF8686C0FF8686C0FF7272B6FF04068CFF5765FFFF4F5DFDFF2A31
    313       C6FF000081FFA0A0BDFF656565FF808080FF8C8C8CFF868686FF868686FF6767
    314       67FF737373FFB3B3B3FFC7C7C7FFC7C7C7FFCDCDCDFFCDCDCDFFCDCDCDFFCDCD
    315       CDFFC3C3C3FF6D6D6DFF9C9C9CFFFEFEFEFF7373B7FF04068CFF1D20ABFF1014
    316       9FFF10149FFF10149FFF10149FFF10149FFF10149FFF4F5DFDFF4F5DFDFF4654
    317       FAFF2A31C6FF000081FF41415CFF808080FF8C8C8CFF8C8C8CFF8C8C8CFF6565
    318       65FF737373FFB3B3B3FFCDCDCDFFCDCDCDFFCDCDCDFFCDCDCDFFD8D8D8FFD8D8
    319       D8FFC3C3C3FF6D6D6DFF9C9C9CFFFAFAFAFF7373B7FF1D20ABFF6E78FFFF616D
    320       FFFF616DFFFF616DFFFF5765FFFF5765FFFF4F5DFDFF4654FAFF4654FAFF404F
    321       FBFF404FFBFF2A31C6FF00007BFF686881FF949494FF8C8C8CFF8C8C8CFF6565
    322       65FF737373FFB3B3B3FFCDCDCDFFCDCDCDFFD8D8D8FFD8D8D8FFD8D8D8FFDEDE
    323       DEFFC7C7C7FF6D6D6DFF9C9C9CFFFAFAFAFF7373B7FF1D20ABFF616DFFFF616D
    324       FFFF5765FFFF5765FFFF4F5DFDFF4F5DFDFF4654FAFF4654FAFF404FFBFF404F
    325       FBFF3748F9FF3748F9FF0D16B4FF00007BFF686881FF8C8C8CFF8C8C8CFF6060
    326       60FF6D6D6DFFB3B3B3FFCDCDCDFFD8D8D8FFD8D8D8FFD8D8D8FFD8D8D8FFDEDE
    327       DEFFC7C7C7FF676767FF9C9C9CFFF7F7F7FF7373B7FF1D20ABFF616DFFFF5765
    328       FFFF5765FFFF4F5DFDFF4F5DFDFF4654FAFF4654FAFF404FFBFF3748F9FF3748
    329       F9FF2F40F7FF2F40F7FF283BF9FF0D16B4FF00007BFF868699FF8C8C8CFF6060
    330       60FF6D6D6DFFB3B3B3FFD8D8D8FFD8D8D8FFD8D8D8FFDEDEDEFFDEDEDEFFE2E2
    331       E2FFC7C7C7FF676767FF9C9C9CFFF7F7F7FF7373B7FF1D20ABFF5765FFFF4F5D
    332       FDFF4F5DFDFF4654FAFF4654FAFF404FFBFF404FFBFF3748F9FF3748F9FF2F40
    333       F7FF2F40F7FF283BF9FF1E30EBFF000081FF3E3E82FF949494FF8C8C8CFF6060
    334       60FF676767FFB3B3B3FFD8D8D8FFDEDEDEFFDEDEDEFFE2E2E2FFE2E2E2FFEAEA
    335       EAFFC7C7C7FF656565FF9C9C9CFFF7F7F7FF7373B7FF10149FFF4F5DFDFF4F5D
    336       FDFF4654FAFF4654FAFF404FFBFF404FFBFF3748F9FF2F40F7FF2F40F7FF283B
    337       F9FF283BF9FF1E30EBFF000081FF3E3E82FF999993FF949494FF949494FF6060
    338       60FF676767FFB3B3B3FFDEDEDEFFE2E2E2FFE2E2E2FFE2E2E2FFEAEAEAFFEAEA
    339       EAFFCDCDCDFF656565FF9C9C9CFFF7F7F7FF7272B6FF10149FFF3D48E4FF3D48
    340       E4FF313DE0FF313DE0FF313DE0FF2734DEFF2734DEFF2F40F7FF283BF9FF283B
    341       F9FF1E30EBFF000081FF16165EFF808080FF949494FF949494FF949494FF6060
    342       60FF676767FFB3B3B3FFDEDEDEFFE2E2E2FFEAEAEAFFEAEAEAFFEAEAEAFFF1F1
    343       F1FFCDCDCDFF606060FF9C9C9CFFFAFAFAFF7373B7FF000081FF00007BFF0000
    344       7BFF00007BFF00007BFF00007BFF00007BFF000081FF283BF9FF283BF9FF1E30
    345       EBFF000081FF3E3E82FF4C4C4CFF808080FF9C9C9CFF949494FF949494FF5D5D
    346       5DFF656565FFB3B3B3FFE2E2E2FFEAEAEAFFEAEAEAFFEAEAEAFFEAEAEAFFF1F1
    347       F1FFC7C7C7FF606060FF9C9C9CFFFAFAFAFFF1F1F1FFCDCDCDFFB3B3B3FFA8A8
    348       A8FFA8A8A8FFA8A8A8FFA8A8A8FF868699FF000081FF2338FDFF1E30EBFF0000
    349       81FF2E2E7EFF949494FF4C4C4CFF808080FF9C9C9CFF949494FF949494FF5D5D
    350       5DFF656565FFB3B3B3FFEAEAEAFFEAEAEAFFEAEAEAFFF1F1F1FFF1F1F1FFF7F7
    351       F7FFC7C7C7FF5D5D5DFF9C9C9CFFFEFEFEFFF7F7F7FFF1F1F1FFEAEAEAFFE2E2
    352       E2FFDEDEDEFFDEDEDEFFDEDEDEFFAFAFC5FF000081FF2338FDFF04068CFF2E2E
    353       7EFF9C9C9CFFB3B3B3FF4C4C4CFF808080FF9C9C9CFF949494FF9C9C9CFF5D5D
    354       5DFF606060FFB3B3B3FFEAEAEAFFF1F1F1FFF1F1F1FFF5F5F5FFF5F5F5FFFAFA
    355       FAFFC7C7C7FF5D5D5DFF9C9C9CFFFEFEFEFFFEFEFEFFFAFAFAFFF7F7F7FFF7F7
    356       F7FFF5F5F5FFF5F5F5FFF5F5F5FFC4C4DBFF000081FF04068CFF2E2E7EFF9494
    357       94FFB3B3B3FFD8D8D8FF555555FF868686FF9C9C9CFF9C9C9CFF9C9C9CFF5D5D
    358       5DFF606060FFB3B3B3FFEAEAEAFFF1F1F1FFF5F5F5FFF7F7F7FFFAFAFAFFFFFF
    359       FF00CDCDCDFF5D5D5DFF9C9C9CFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    360       FF00FFFFFF00FFFFFF00FEFEFEFFC4C4DBFF00007BFF2F2F87FF9C9C9CFFB3B3
    361       B3FFE2E2E2FFEAEAEAFF4C4C4CFF4C4C4CFF555555FF555555FF555555FF4444
    362       44FF606060FFB3B3B3FFF1F1F1FFF7F7F7FFFAFAFAFFFEFEFEFFFFFFFF00E2E2
    363       E2FFA8A8A8FF555555FF9C9C9CFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    364       FF00FFFFFF00FFFFFF00FEFEFEFFC4C4DBFF2F2F90FFB3B3B3FFBCBCBCFFE2E2
    365       E2FFF1F1F1FFF5F5F5FFB3B3B3FF868686FF797979FF737373FF737373FF4C4C
    366       4CFF5D5D5DFFB3B3B3FFF1F1F1FFFEFEFEFFFFFFFF00EAEAEAFFB3B3B3FF8686
    367       86FF555555FF555555FFA8A8A8FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    368       FF00FFFFFF00FFFFFF00FEFEFEFFEAEAEAFFE2E2E2FFCDCDCDFFEAEAEAFFF1F1
    369       F1FFFAFAFAFFFAFAFAFFF1F1F1FFD8D8D8FFCDCDCDFFC7C7C7FFC3C3C3FF6060
    370       60FF5D5D5DFFA8A8A8FFF7F7F7FFF1F1F1FFBCBCBCFF8C8C8CFF555555FF4C4C
    371       4CFF797979FF949494FFBCBCBCFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    372       FF00FFFFFF00FFFFFF00FEFEFEFFFAFAFAFFF5F5F5FFF5F5F5FFF5F5F5FFFAFA
    373       FAFFFEFEFEFFFEFEFEFFFAFAFAFFF5F5F5FFF1F1F1FFEAEAEAFFEAEAEAFF6767
    374       67FF5D5D5DFFB3B3B3FFBCBCBCFF949494FF5D5D5DFF444444FF737373FF9C9C
    375       9CFFA8A8A8FFC7C7C7FFFAFAFAFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    376       FF00FFFFFF00FFFFFF00FFFFFF00FEFEFEFFFEFEFEFFFEFEFEFFFEFEFEFFFEFE
    377       FEFFFFFFFF00FFFFFF00FEFEFEFFFEFEFEFFFEFEFEFFFAFAFAFFF5F5F5FF6D6D
    378       6DFF5D5D5DFF949494FF5D5D5DFF444444FF656565FF949494FFA8A8A8FFC7C7
    379       C7FFE2E2E2FFEAEAEAFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    380       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    381       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00F7F7F7FF6D6D
    382       6DFF444444FF444444FF5D5D5DFF949494FF9C9C9CFFC3C3C3FFDEDEDEFFEAEA
    383       EAFFF5F5F5FFFAFAFAFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    384       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    385       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FAFAFAFF6D6D
    386       6DFF656565FF9C9C9CFFA8A8A8FFBCBCBCFFDEDEDEFFEAEAEAFFF1F1F1FFFAFA
    387       FAFFFEFEFEFFFEFEFEFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    388       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    389       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FAFAFAFFE2E2
    390       E2FFCDCDCDFFC3C3C3FFD8D8D8FFEAEAEAFFF1F1F1FFF7F7F7FFFEFEFEFFFEFE
    391       FEFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    392       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    393       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FEFEFEFFF5F5
    394       F5FFEAEAEAFFEAEAEAFFF1F1F1FFF7F7F7FFFEFEFEFFFEFEFEFFFFFFFF00FFFF
    395       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    396       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    397       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FEFEFEFFFAFA
    398       FAFFFAFAFAFFFAFAFAFFFAFAFAFFFEFEFEFFFFFFFF00FFFFFF00FFFFFF00FFFF
    399       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    400       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    401       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    402       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    403       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    404       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    405       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    406       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    407       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    408       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    409       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    410       FF00FFFFFF007950EBFF8A75F5FF948CFBFFFFFFFF00FFFFFF00FFFFFF00FFFF
    411       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    412       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    413       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    414       FF007950EBFF8A75F5FF948CFBFF9998FFFF9998FFFFFFFFFF00FFFFFF00FFFF
    415       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    416       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    417       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF007950
    418       EBFF8A75F5FF948CFBFF9998FFFF9998FFFF9691FDFF9185F9FFFFFFFF00FFFF
    419       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    420       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    421       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF007950EBFF8A75
    422       F5FF948CFBFF9998FFFF9998FFFF9691FDFF9185F9FF8A75F5FF8163F0FFFFFF
    423       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    424       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    425       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00209BEDFF55B9F4FF948C
    426       FBFF9998FFFF9998FFFF9691FDFF9185F9FF8A75F5FF8163F0FF7547E9FFD7C6
    427       F6FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    428       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    429       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00209BEDFF55B9F4FF87D7FBFF9CE4
    430       FFFF9998FFFF9691FDFF9185F9FF8A75F5FF8163F0FF7547E9FF611CDDFFD4BF
    431       F4FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    432       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    433       FF00FFFFFF00FFFFFF00FFFFFF00209BEDFF55B9F4FF87D7FBFF9CE4FFFF94E4
    434       FFFF79E1FFFF9185F9FF8A75F5FF8163F0FF7547E9FF611CDDFF5400D5FFFFFF
    435       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    436       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    437       FF00FFFFFF00FFFFFF00209BEDFF55B9F4FF87D7FBFF9CE4FFFF94E4FFFF79E1
    438       FFFF5BD5FFFF45C5FCFF8163F0FF7547E9FF611CDDFF5400D5FFFFFFFF00FFFF
    439       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    440       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    441       FF00FFFFFF00209BEDFF55B9F4FF87D7FBFF9CE4FFFF94E4FFFF79E1FFFF5BD5
    442       FFFF45C5FCFF2CB1F7FF149CF1FF611CDDFF5400D5FFFFFFFF00FFFFFF00FFFF
    443       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    444       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    445       FF00209BEDFF55B9F4FF87D7FBFF9CE4FFFF94E4FFFF79E1FFFF5BD5FFFF45C5
    446       FCFF2CB1F7FF149CF1FF0489EBFF007DE7FFFFFFFF00FFFFFF00FFFFFF00FFFF
    447       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    448       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00209B
    449       EDFF55B9F4FF87D7FBFF9CE4FFFF94E4FFFF79E1FFFF5BD5FFFF45C5FCFF2CB1
    450       F7FF149CF1FF0489EBFF007DE7FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    451       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    452       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00209BEDFF55B9
    453       F4FF87D7FBFF9CE4FFFF94E4FFFF79E1FFFF5BD5FFFF45C5FCFF2CB1F7FF149C
    454       F1FF0489EBFF007DE7FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    455       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    456       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00209BEDFF55B9F4FF87D7
    457       FBFF9CE4FFFF94E4FFFF79E1FFFF5BD5FFFF45C5FCFF2CB1F7FF149CF1FF0489
    458       EBFF007DE7FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    459       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    460       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00209BEDFF55B9F4FF87D7FBFF9CE4
    461       FFFF94E4FFFF79E1FFFF5BD5FFFF45C5FCFF2CB1F7FF149CF1FF0489EBFF007D
    462       E7FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    463       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    464       FF00FFFFFF00FFFFFF00FFFFFF00209BEDFF55B9F4FF87D7FBFF9CE4FFFF94E4
    465       FFFF79E1FFFF5BD5FFFF45C5FCFF2CB1F7FF149CF1FF0489EBFF007DE7FFFFFF
    466       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    467       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    468       FF00FFFFFF00FFFFFF00209BEDFF55B9F4FF87D7FBFF9CE4FFFF94E4FFFF79E1
    469       FFFF5BD5FFFF45C5FCFF2CB1F7FF149CF1FF0489EBFF007DE7FFFFFFFF00FFFF
    470       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    471       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    472       FF00FFFFFF00209BEDFF55B9F4FF87D7FBFF9CE4FFFF94E4FFFF79E1FFFF5BD5
    473       FFFF45C5FCFF2CB1F7FF149CF1FF0489EBFF007DE7FFFFFFFF00FFFFFF00FFFF
    474       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    475       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    476       FF00209BEDFF6DBCF4FF98DBFCFF9CE4FFFF94E4FFFF79E1FFFF5BD5FFFF45C5
    477       FCFF2CB1F7FF149CF1FF0489EBFF007DE7FFFFFFFF00FFFFFF00FFFFFF00FFFF
    478       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    479       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00E0EF
    480       FCFF5492E5FFBDD8FAFFC8E0F8FFA9E6FFFF79E1FFFF5BD5FFFF45C5FCFF2CB1
    481       F7FF149CF1FF0489EBFF007DE7FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    482       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    483       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00A3CE
    484       F5FF77A9ECFFC8E0F8FFD6E8FEFFBFE4FEFF5BD5FFFF45C5FCFF2CB1F7FF149C
    485       F1FF0489EBFF007DE7FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    486       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    487       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF007CB3
    488       EEFF9BC1F3FFD6E8FEFFD6E8FEFFC8E0F8FF71C9FAFF2CB1F7FF149CF1FF0489
    489       EBFF007DE7FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    490       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    491       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00649C
    492       E8FFBDD8FAFFD6E8FEFFC8E0F8FF9BC1F3FF5094E6FF209BEDFF0489EBFF007D
    493       E7FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    494       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    495       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00ECF5FDFF81B0
    496       EEFFC8E0F8FFBDD8FAFF81B0EEFF5492E5FF5492E5FF5094E6FF007DE7FFFFFF
    497       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    498       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    499       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00F6F6F6FF8EAAC2FF9BC1
    500       F3FFA8CAF6FF649CE8FF5492E5FF5094E6FF69AAEDFFC8E0F8FFFFFFFF00FFFF
    501       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    502       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    503       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00D8D8D8FF415D77FF597E
    504       AEFF5492E5FF69AAEDFFA3CEF5FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    505       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    506       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    507       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00BABABAFF415D77FF4D69
    508       7FFFC0C7CCFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    509       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    510       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    511       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00BABABAFFCFCFCFFFF6F6
    512       F6FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    513       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    514       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    515       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    516       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    517       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    518       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    519       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    520       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    521       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    522       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    523       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    524       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    525       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    526       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    527       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    528       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    529       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    530       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    531       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    532       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    533       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    534       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    535       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    536       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    537       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    538       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    539       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    540       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    541       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    542       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    543       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    544       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    545       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    546       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    547       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    548       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    549       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    550       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    551       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    552       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    553       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    554       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    555       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    556       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    557       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    558       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    559       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    560       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    561       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    562       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    563       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    564       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    565       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    566       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    567       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF007468CEFF6E62C3FF6E62C3FF6E62
    568       C3FF6E62C3FF6E62C3FF6E62C3FF6E62C3FF6E62C3FF6E62C3FF6E62C3FF6E62
    569       C3FF6E62C3FF6E62C3FF6E62C3FF6E62C3FF6E62C3FF6E62C3FF6E62C3FF6E62
    570       C3FF6E62C3FF6E62C3FF6E62C3FF6E62C3FF6E62C3FF6E62C3FF6E62C3FF6E62
    571       C3FF6E62C3FF7468CEFFFFFFFF00FFFFFF006E62C3FF7A6CE3FF897EE6FF9186
    572       E7FF9186E7FF9186E7FF9186E7FF9186E7FF9186E7FF9186E7FF9186E7FF9186
    573       E7FF9186E7FF9186E7FF9186E7FF9186E7FF9186E7FF9186E7FF9186E7FF9186
    574       E7FF9186E7FF9186E7FF9186E7FF9186E7FF9186E7FF9186E7FF897EE6FF867A
    575       E6FF7A6CE3FF6E62C3FFFFFFFF00FFFFFF006357B8FF7D6FEBFF8174ECFF8D81
    576       EEFF9387EFFF9387EFFF9387EFFF9387EFFF9387EFFF9387EFFF9387EFFF9387
    577       EFFF9387EFFF9387EFFF9387EFFF9387EFFF9387EFFF9387EFFF9387EFFF9387
    578       EFFF9387EFFF9387EFFF9387EFFF9387EFFF9387EFFF9387EFFF8D81EEFF7869
    579       EAFF7869EAFF6357B8FFFFFFFF00FFFFFF006357B8FF7869EAFF7364EAFF7D6F
    580       EBFF7D6FEBFF7D6FEBFF7D6FEBFF7D6FEBFF7D6FEBFF7D6FEBFF7D6FEBFF7D6F
    581       EBFF7D6FEBFF7D6FEBFF7D6FEBFF7D6FEBFF7D6FEBFF7D6FEBFF7D6FEBFF7D6F
    582       EBFF7D6FEBFF7D6FEBFF7D6FEBFF7D6FEBFF7D6FEBFF7D6FEBFF7869EAFF6757
    583       E8FF7869EAFF6357B8FFFFFFFF00FFFFFF006357B8FF7364EAFF6251E7FF6757
    584       E8FF6757E8FF6757E8FF6757E8FF6757E8FF6757E8FF6757E8FF6757E8FF6757
    585       E8FF6757E8FF6757E8FF6757E8FF6757E8FF6757E8FF6757E8FF6757E8FF6757
    586       E8FF6757E8FF6757E8FF6757E8FF6757E8FF6757E8FF6757E8FF6757E8FF5C4A
    587       E6FF7364EAFF6357B8FFFFFFFF00FFFFFF005D51AFFF6C5DE3FF503EDEFF503E
    588       DEFF503EDEFF503EDEFF503EDEFF503EDEFF503EDEFF503EDEFF503EDEFF503E
    589       DEFF503EDEFF503EDEFF503EDEFF503EDEFF503EDEFF503EDEFF503EDEFF503E
    590       DEFF503EDEFF503EDEFF503EDEFF503EDEFF503EDEFF503EDEFF503EDEFF4937
    591       DCFF6C5DE3FF5D51AFFFFFFFFF00FFFFFF00544AA0FF6455D6FF3623CBFF3623
    592       CBFF3623CBFF3623CBFF3623CBFF3623CBFF3623CBFF3623CBFF3623CBFF3623
    593       CBFF3623CBFF3623CBFF3623CBFF3623CBFF3623CBFF3623CBFF3623CBFF3623
    594       CBFF3623CBFF3623CBFF3623CBFF3623CBFF3623CBFF3623CBFF3623CBFF3623
    595       CBFF6455D6FF544AA0FFFFFFFF00FFFFFF004B4292FF6052CCFF2A18BAFF2A18
    596       BAFF2A18BAFF2A18BAFF2A18BAFF2A18BAFF2A18BAFF2A18BAFF2A18BAFF2A18
    597       BAFF2A18BAFF2A18BAFF2A18BAFF2A18BAFF2A18BAFF2A18BAFF2A18BAFF2A18
    598       BAFF2A18BAFF2A18BAFF2A18BAFF2A18BAFF2A18BAFF2A18BAFF2A18BAFF2A18
    599       BAFF6052CCFF4B4292FFFFFFFF00FFFFFF00433B84FF5D51C1FF2716ABFF2716
    600       ABFF2716ABFF2716ABFF2716ABFF2716ABFF2716ABFF2716ABFF2716ABFF2716
    601       ABFF2716ABFF2716ABFF2716ABFF2716ABFF2716ABFF2716ABFF2716ABFF2716
    602       ABFF2716ABFF2716ABFF2716ABFF2716ABFF2716ABFF2716ABFF2716ABFF2716
    603       ABFF5D51C1FF433B84FFFFFFFF00FFFFFF003C3477FF5B4FB7FF5B4FB7FF5B4F
    604       B7FF5B4FB7FF5B4FB7FF5B4FB7FF5B4FB7FF5B4FB7FF5B4FB7FF5B4FB7FF5B4F
    605       B7FF5B4FB7FF5B4FB7FF5B4FB7FF5B4FB7FF5B4FB7FF5B4FB7FF5B4FB7FF5B4F
    606       B7FF5B4FB7FF5B4FB7FF5B4FB7FF5B4FB7FF5B4FB7FF5B4FB7FF5B4FB7FF5B4F
    607       B7FF5B4FB7FF3C3477FFFFFFFF00FFFFFF00463C8BFF342C6AFF342C6AFF342C
    608       6AFF342C6AFF342C6AFF342C6AFF342C6AFF342C6AFF342C6AFF342C6AFF342C
    609       6AFF342C6AFF342C6AFF342C6AFF342C6AFF342C6AFF342C6AFF342C6AFF342C
    610       6AFF342C6AFF342C6AFF342C6AFF342C6AFF342C6AFF342C6AFF342C6AFF342C
    611       6AFF342C6AFF463C8BFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    612       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    613       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    614       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    615       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    616       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    617       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    618       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    619       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    620       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    621       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    622       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    623       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    624       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    625       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    626       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    627       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    628       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    629       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    630       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    631       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    632       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    633       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    634       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    635       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    636       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    637       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    638       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    639       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    640       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    641       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    642       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    643       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    644       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    645       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    646       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    647       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    648       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    649       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    650       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    651       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    652       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    653       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    654       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    655       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    656       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00005104FF005104FF0051
    657       04FF005104FF005104FF005104FF005104FF005104FF005104FF005104FF0051
    658       04FFDBDBDBFFF3F3F3FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    659       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    660       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00005104FF76D07FFF76D0
    661       7FFF76D07FFF76D07FFF76D07FFF76D07FFF76D07FFF76D07FFF76D07FFF0051
    662       04FF949494FFDBDBDBFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    663       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    664       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00005104FF76D07FFF9BDB
    665       A0FF9BDBA0FF90D795FF90D795FF8CD692FF8CD692FF84D38AFF76D07FFF0051
    666       04FF707070FFCFCFCFFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    667       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    668       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00005104FF76D07FFF9BDB
    669       A0FF90D795FF90D795FF8CD692FF84D38AFF84D38AFF7ED184FF76D07FFF0051
    670       04FF707070FFCFCFCFFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    671       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    672       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00005104FF76D07FFF90D7
    673       95FF8CD692FF8CD692FF84D38AFF84D38AFF7ED184FF7ED184FF76D07FFF0051
    674       04FF707070FFCFCFCFFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    675       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    676       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00005104FF76D07FFF8CD6
    677       92FF8CD692FF84D38AFF84D38AFF7ED184FF79CF7FFF79CF7FFF76D07FFF0051
    678       04FF707070FFCFCFCFFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    679       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    680       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00005104FF76D07FFF84D3
    681       8AFF84D38AFF84D38AFF7ED184FF79CF7FFF74CD7BFF74CD7BFF76D07FFF0051
    682       04FF707070FFCFCFCFFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    683       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    684       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00005104FF76D07FFF84D3
    685       8AFF7ED184FF7ED184FF79CF7FFF74CD7BFF6FCC76FF6FCC76FF76D07FFF0051
    686       04FF707070FFCFCFCFFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    687       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    688       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00005104FF76D07FFF7ED1
    689       84FF79CF7FFF79CF7FFF74CD7BFF6FCC76FF6ACA72FF6ACA72FF76D07FFF0051
    690       04FF707070FFCFCFCFFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    691       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    692       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00005104FF76D07FFF79CF
    693       7FFF74CD7BFF74CD7BFF6FCC76FF6ACA72FF66C86DFF66C86DFF76D07FFF0051
    694       04FF707070FFCFCFCFFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    695       FF00FFFFFF00FFFFFF00FFFFFF00005104FF005104FF005104FF005104FF0051
    696       04FF005104FF005104FF005104FF005104FF005104FF005104FF76D07FFF74CD
    697       7BFF6FCC76FF6FCC76FF6ACA72FF66C86DFF66C86DFF5AC462FF76D07FFF0051
    698       04FF005104FF005104FF005104FF005104FF005104FF005104FF005104FF0051
    699       04FF005104FF005104FFDBDBDBFF005104FF76D07FFF76D07FFF76D07FFF76D0
    700       7FFF76D07FFF76D07FFF76D07FFF76D07FFF76D07FFF76D07FFF76D07FFF6FCC
    701       76FF6ACA72FF6ACA72FF66C86DFF66C86DFF41BB4AFF25B130FF76D07FFF76D0
    702       7FFF76D07FFF76D07FFF76D07FFF76D07FFF76D07FFF76D07FFF76D07FFF76D0
    703       7FFF76D07FFF005104FF949494FF005104FF76D07FFF90D795FF8CD692FF84D3
    704       8AFF84D38AFF84D38AFF7ED184FF79CF7FFF74CD7BFF74CD7BFF6FCC76FF6ACA
    705       72FF66C86DFF66C86DFF41BB4AFF25B130FF09A715FF09A715FF09A715FF09A7
    706       15FF09A715FF09A715FF09A715FF09A715FF09A715FF09A514FF09A514FF089F
    707       12FF76D07FFF005104FF707070FF005104FF76D07FFF8CD692FF84D38AFF84D3
    708       8AFF7ED184FF7ED184FF79CF7FFF74CD7BFF6FCC76FF6FCC76FF6ACA72FF66C8
    709       6DFF4ABE52FF25B130FF09A715FF09A715FF09A715FF09A715FF09A715FF09A7
    710       15FF09A715FF09A715FF09A715FF09A514FF09A514FF09A514FF089F12FF089F
    711       12FF76D07FFF005104FF707070FF005104FF76D07FFF84D38AFF84D38AFF7ED1
    712       84FF79CF7FFF79CF7FFF74CD7BFF6FCC76FF6ACA72FF6ACA72FF50C159FF32B5
    713       3CFF09A715FF09A715FF09A715FF09A715FF09A715FF09A715FF09A715FF09A7
    714       15FF09A715FF09A715FF09A715FF09A514FF09A514FF089F12FF089F12FF0697
    715       10FF76D07FFF005104FF707070FF005104FF76D07FFF84D38AFF7ED184FF79CF
    716       7FFF74CD7BFF74CD7BFF6FCC76FF6ACA72FF66C86DFF41BB4AFF25B130FF09A7
    717       15FF09A715FF09A715FF09A715FF09A715FF09A715FF09A715FF09A715FF09A7
    718       15FF09A715FF09A715FF09A514FF09A514FF089F12FF089F12FF069710FF0694
    719       0FFF76D07FFF005104FF707070FF005104FF76D07FFF7ED184FF79CF7FFF74CD
    720       7BFF6FCC76FF6FCC76FF6ACA72FF5AC462FF32B53CFF09A715FF09A715FF09A7
    721       15FF09A715FF09A715FF09A715FF09A715FF09A715FF09A715FF09A715FF09A7
    722       15FF09A715FF09A514FF09A514FF089F12FF079910FF069710FF06940FFF0692
    723       0EFF76D07FFF005104FF707070FF005104FF76D07FFF79CF7FFF74CD7BFF6FCC
    724       76FF6ACA72FF6ACA72FF50C159FF25B130FF09A715FF09A715FF09A715FF09A7
    725       15FF09A715FF09A715FF09A715FF09A715FF09A715FF09A715FF09A715FF09A7
    726       15FF09A514FF09A514FF089F12FF079910FF06940FFF06940FFF06920EFF0694
    727       0FFF76D07FFF005104FF707070FF005104FF76D07FFF74CD7BFF6FCC76FF6ACA
    728       72FF66C86DFF4ABE52FF25B130FF09A715FF09A715FF09A715FF09A715FF09A7
    729       15FF09A715FF09A715FF09A715FF09A715FF09A715FF09A715FF09A514FF09A5
    730       14FF09A514FF089F12FF079910FF06940FFF06920EFF06920EFF06940FFF0697
    731       10FF76D07FFF005104FF707070FF005104FF76D07FFF76D07FFF76D07FFF76D0
    732       7FFF76D07FFF76D07FFF76D07FFF76D07FFF76D07FFF76D07FFF76D07FFF09A7
    733       15FF09A715FF09A715FF09A715FF09A715FF09A715FF09A715FF76D07FFF76D0
    734       7FFF76D07FFF76D07FFF76D07FFF76D07FFF76D07FFF76D07FFF76D07FFF76D0
    735       7FFF76D07FFF005104FF707070FF005104FF005104FF005104FF005104FF0051
    736       04FF005104FF005104FF005104FF005104FF005104FF005104FF76D07FFF09A7
    737       15FF09A715FF09A715FF09A715FF09A715FF09A715FF09A514FF76D07FFF0051
    738       04FF005104FF005104FF005104FF005104FF005104FF005104FF005104FF0051
    739       04FF005104FF005104FF707070FFDBDBDBFF949494FF707070FF707070FF7070
    740       70FF707070FF707070FF707070FF707070FF707070FF005104FF76D07FFF09A7
    741       15FF09A715FF09A715FF09A715FF09A715FF09A514FF09A514FF76D07FFF0051
    742       04FF4C4C4CFF646464FF707070FF707070FF707070FF707070FF707070FF7070
    743       70FF707070FF707070FF949494FFF3F3F3FFDBDBDBFFCFCFCFFFCFCFCFFFCFCF
    744       CFFFCFCFCFFFCFCFCFFFCFCFCFFFCFCFCFFFCFCFCFFF005104FF76D07FFF09A7
    745       15FF09A715FF09A715FF09A514FF09A514FF09A514FF089F12FF76D07FFF0051
    746       04FF646464FFABABABFFCFCFCFFFCFCFCFFFCFCFCFFFCFCFCFFFCFCFCFFFCFCF
    747       CFFFCFCFCFFFCFCFCFFFDBDBDBFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    748       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00005104FF76D07FFF09A7
    749       15FF09A715FF09A514FF09A514FF09A514FF089F12FF079910FF76D07FFF0051
    750       04FF707070FFCFCFCFFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    751       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    752       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00005104FF76D07FFF09A7
    753       15FF09A514FF09A514FF09A514FF089F12FF079910FF06940FFF76D07FFF0051
    754       04FF707070FFCFCFCFFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    755       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    756       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00005104FF76D07FFF09A7
    757       15FF09A514FF09A514FF089F12FF079910FF06940FFF06920EFF76D07FFF0051
    758       04FF707070FFCFCFCFFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    759       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    760       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00005104FF76D07FFF09A5
    761       14FF09A514FF089F12FF079910FF06940FFF06920EFF06920EFF76D07FFF0051
    762       04FF707070FFCFCFCFFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    763       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    764       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00005104FF76D07FFF09A5
    765       14FF089F12FF079910FF06940FFF06920EFF06920EFF06940FFF76D07FFF0051
    766       04FF707070FFCFCFCFFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    767       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    768       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00005104FF76D07FFF09A5
    769       14FF089F12FF069710FF06920EFF06920EFF06940FFF079910FF76D07FFF0051
    770       04FF707070FFCFCFCFFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    771       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    772       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00005104FF76D07FFF76D0
    773       7FFF76D07FFF76D07FFF76D07FFF76D07FFF76D07FFF76D07FFF76D07FFF0051
    774       04FF707070FFCFCFCFFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    775       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    776       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00005104FF005104FF0051
    777       04FF005104FF005104FF005104FF005104FF005104FF005104FF005104FF0051
    778       04FF707070FFCFCFCFFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    779       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    780       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00DBDBDBFF949494FF7070
    781       70FF707070FF707070FF707070FF707070FF707070FF707070FF707070FF7070
    782       70FF949494FFDBDBDBFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    783       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00BCE4F3FF10A5DAFF78CEEEFFFEFE
    784       FEFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    785       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    786       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    787       FF00FFFFFF00FFFFFF00FFFFFF00FEFEFEFF74BEE4FF139ADEFF04A1DEFF78CE
    788       EEFFFEFEFEFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    789       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    790       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    791       FF00FFFFFF00FFFFFF00FFFFFF00FEFEFEFF6CCDEFFF00B8FBFF029FE8FF04A1
    792       DEFF8CD5F0FFFEFEFEFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    793       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    794       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    795       FF00FFFFFF00FFFFFF00FFFFFF00FEFEFEFF6CCDEFFF02BCFBFF01B4F8FF0B91
    796       DBFF04A1DEFFA1DCF2FFFEFEFEFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    797       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    798       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    799       FF00FFFFFF00FFFFFF00FFFFFF00FEFEFEFF6CCDEFFF02BCFBFF00ACF3FF01B4
    800       F8FF139ADEFF04A1DEFFB4E3F4FFFEFEFEFFFFFFFF00FFFFFF00FFFFFF00FFFF
    801       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    802       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    803       FF00FFFFFF00FFFFFF00FFFFFF00FEFEFEFF6CCDEFFF02BCFBFF02BCFBFF02BC
    804       FBFF01B4F8FF139ADEFF04A1DEFFBCE4F3FFFEFEFEFFFFFFFF00FFFFFF00FFFF
    805       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    806       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    807       FF00FFFFFF00FFFFFF00FFFFFF00FEFEFEFF6CCDEFFF02BCFBFF00B8FBFF00B8
    808       FBFF01B4F8FF029FE8FF0B91DBFF10A5DAFFD2EDF7FFFFFFFF00FFFFFF00FFFF
    809       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    810       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    811       FF00FFFFFF00FFFFFF00FFFFFF00FEFEFEFF6CCDEFFF00B8FBFF00B8FBFF00B8
    812       FBFF02BCFBFF00B8FBFF00ACF3FF0B91DBFF10A5DAFFE2F0F7FFFFFFFF00FFFF
    813       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    814       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    815       FF00FFFFFF00FFFFFF00FFFFFF00FEFEFEFF6CCDEFFF00B8FBFF00B8FBFF00B8
    816       FBFF00B8FBFF00B8FBFF00B8FBFF029FE8FF0B91DBFF28ACE1FFECF5F9FFFFFF
    817       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    818       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    819       FF00FFFFFF00FFFFFF00FFFFFF00FEFEFEFF6CCDEFFF01B4F8FF00B8FBFF00B8
    820       FBFF00B8FBFF00B8FBFF01B4F8FF00ACF3FF029FE8FF0B91DBFF37AAE1FFF3F8
    821       FBFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    822       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    823       FF00FFFFFF00FFFFFF00FFFFFF00FEFEFEFF6CC5EAFF01B4F8FF01B4F8FF01B4
    824       F8FF01B4F8FF01B4F8FF01B4F8FF01B4F8FF01B4F8FF029FE8FF0B91DBFF46B0
    825       E3FFF3F8FBFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    826       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    827       FF00FFFFFF00FFFFFF00FFFFFF00FEFEFEFF6CC5EAFF01B4F8FF01B4F8FF01B4
    828       F8FF01B4F8FF6CCDEFFF35BAEEFF01B4F8FF01B4F8FF009BE8FF009BE8FF0B91
    829       DBFF57B8E5FFFEFEFEFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    830       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    831       FF00FFFFFF00FFFFFF00FFFFFF00FEFEFEFF6CC5EAFF01B4F8FF01B4F8FF01B4
    832       F8FF00ACF3FFCAE2ECFFECF5F9FF35BAEEFF00ACF3FF01B4F8FF00ACF3FF0293
    833       E0FF088CD1FF6CC5EAFFFEFEFEFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    834       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    835       FF00FFFFFF00FFFFFF00FFFFFF00FEFEFEFF6CC5EAFF01B4F8FF00ACF3FF00AC
    836       F3FF00ACF3FFCAE2ECFFFEFEFEFFE2F0F7FF21B0E8FF00ACF3FF00ACF3FF00A4
    837       EEFF018CD8FF088CD1FF80CAEBFFFEFEFEFFFFFFFF00FFFFFF00FFFFFF00FFFF
    838       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    839       FF00FFFFFF00FFFFFF00FFFFFF00FEFEFEFF6CC5EAFF00ACF3FF00ACF3FF00AC
    840       F3FF00ACF3FFCAE2ECFFFFFFFF00FFFFFF00D2EDF7FF21B0E8FF00ACF3FF00A4
    841       EEFF00A7F0FF0B91DBFF088CD1FF95D3EEFFFEFEFEFFFFFFFF00FFFFFF00FFFF
    842       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    843       FF00FFFFFF00FFFFFF00FFFFFF00FEFEFEFF6CC5EAFF00ACF3FF00ACF3FF00AC
    844       F3FF09A6E8FFCAE2ECFFFFFFFF00FFFFFF00FEFEFEFFD2EDF7FF09A6E8FF00AC
    845       F3FF00ACF3FF00A7F0FF018CD8FF088CD1FFA7DAF0FFFEFEFEFFFFFFFF00FFFF
    846       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    847       FF00FFFFFF00FFFFFF00FFFFFF00FEFEFEFF6CC5EAFF00ACF3FF00ACF3FF00AC
    848       F3FF09A6E8FFCAE2ECFFFFFFFF00FFFFFF00FFFFFF00FEFEFEFFBCE4F3FF09A6
    849       E8FF00ACF3FF00A4EEFF0293E0FF0186D6FF088CD1FFBCE4F3FFFEFEFEFFFFFF
    850       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    851       FF00FFFFFF00FFFFFF00FFFFFF00FEFEFEFF6CC5EAFF00ACF3FF00ACF3FF00AC
    852       F3FF09A6E8FFCAE0EBFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FEFEFEFFA7DA
    853       F0FF09A6E8FF00A7F0FF00A7F0FF029FE8FF0186D6FF088CD1FFD2EDF7FFFEFE
    854       FEFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    855       FF00FFFFFF00FFFFFF00FFFFFF00FEFEFEFF6CC0E7FF00A7F0FF00A7F0FF00A7
    856       F0FF09A6E8FFCAE2ECFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FEFE
    857       FEFF95D3EEFF029FE8FF00A7F0FF00A7F0FF018CD8FF0186D6FF2095D3FFD2ED
    858       F7FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    859       FF00FFFFFF00FFFFFF00FFFFFF00FEFEFEFF6CC0E7FF00A7F0FF00A7F0FF00A7
    860       F0FF09A6E8FFCAE2ECFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    861       FF00FEFEFEFF80CAEBFF029FE8FF00A4EEFF029FE8FF009BE8FF027FCBFF2095
    862       D3FFE2F0F7FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    863       FF00FFFFFF00FFFFFF00FFFFFF00FEFEFEFF6CC0E7FF00A4EEFF00A4EEFF00A4
    864       EEFF029FE8FFCAE2ECFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    865       FF00FFFFFF00FEFEFEFF6CC0E7FF029FE8FF00A4EEFF00A4EEFF0293E0FF027F
    866       CBFF2E99D7FFECF5F9FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    867       FF00FFFFFF00FFFFFF00FFFFFF00FEFEFEFF6CC0E7FF00A4EEFF00A4EEFF00A4
    868       EEFF029FE8FFCAE0EBFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    869       FF00FFFFFF00FFFFFF00FEFEFEFF57B8E5FF029FE8FF00A4EEFF018CD8FF018C
    870       D8FF027FCBFF3AA1D8FFF3F8FBFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    871       FF00FFFFFF00FFFFFF00FFFFFF00FEFEFEFF6CC0E7FF00A4EEFF00A4EEFF00A4
    872       EEFF029FE8FFCAE0EBFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    873       FF00FFFFFF00FFFFFF00FFFFFF00F3F8FBFF46B0E3FF029FE8FF029FE8FF029F
    874       E8FF018CD8FF027FCBFF49A9DBFFFEFEFEFFFFFFFF00FFFFFF00FFFFFF00FFFF
    875       FF00FFFFFF00FFFFFF00FFFFFF00FEFEFEFF6CC0E7FF029FE8FF00A4EEFF029F
    876       E8FF029FE8FFCAE0EBFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    877       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00F3F8FBFF37AAE1FF029FE8FF009C
    878       E9FF0293E0FF027FCBFF027FCBFF5BB1DEFFFEFEFEFFFFFFFF00FFFFFF00FFFF
    879       FF00FFFFFF00FFFFFF00FFFFFF00FEFEFEFF6CC0E7FF029FE8FF009CE9FF009C
    880       E9FF009BE8FFCAE0EBFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    881       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00ECF5F9FF2CA1DDFF009C
    882       E9FF0097E6FF009CE9FF0186D6FF027FCBFF74BEE4FFFEFEFEFFFFFFFF00FFFF
    883       FF00FFFFFF00FFFFFF00FFFFFF00FEFEFEFF6CBCE4FF009CE9FF009CE9FF009C
    884       E9FF009BE8FFBDDDEFFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    885       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00E2F0F7FF139A
    886       DEFF009BE8FF009BE8FF009BE8FF027FCBFF0277C3FF89CAECFFFEFEFEFFFFFF
    887       FF00FFFFFF00FFFFFF00FFFFFF00FEFEFEFF6CBCE4FF009BE8FF009CE9FF009C
    888       E9FF009BE8FF4EB2E3FFF3F8FBFFFEFEFEFFFEFEFEFFFEFEFEFFFEFEFEFFFEFE
    889       FEFFFEFEFEFFFEFEFEFFFEFEFEFFFEFEFEFFFEFEFEFFFEFEFEFFFEFEFEFF89CA
    890       ECFF0097E6FF009BE8FF0293E0FF018CD8FF027FCBFF0277C3FF9ACEEAFFFEFE
    891       FEFFFFFFFF00FFFFFF00FFFFFF00FEFEFEFF6CBCE4FF009BE8FF009BE8FF009B
    892       E8FF009BE8FF009BE8FF139ADEFF2CA1DDFF2CA1DDFF2CA1DDFF2CA1DDFF2CA1
    893       DDFF2CA1DDFF2CA1DDFF2CA1DDFF2CA1DDFF2CA1DDFF2CA1DDFF2CA1DDFF0293
    894       E0FF0097E6FF0097E6FF0097E6FF0097E6FF0096E6FF027FCBFF0277C3FFB0D6
    895       EBFFFEFEFEFFFFFFFF00FFFFFF00FEFEFEFF74BEE4FF0097E6FF009BE8FF0097
    896       E6FF009BE8FF0097E6FF0097E6FF0097E6FF0097E6FF0097E6FF0097E6FF0097
    897       E6FF0097E6FF0097E6FF0097E6FF0097E6FF0097E6FF0097E6FF0097E6FF0097
    898       E6FF0097E6FF0097E6FF0097E6FF0096E6FF0096E6FF027FCBFF027FCBFF0277
    899       C3FFBDDDEFFFFEFEFEFFFFFFFF00FFFFFF00B0D6EBFF0293E0FF0097E6FF0097
    900       E6FF0097E6FF0097E6FF0097E6FF0097E6FF0097E6FF0097E6FF0096E6FF0096
    901       E6FF0096E6FF0096E6FF0096E6FF0096E6FF0096E6FF0096E6FF0096E6FF0096
    902       E6FF0095E6FF0095E6FF0095E6FF0095E6FF0193E4FF0193E4FF018CD8FF0277
    903       C3FF0E81CAFFE2F0F7FFFFFFFF00FFFFFF00FEFEFEFF49A9DBFF0293E0FF0096
    904       E6FF0095E6FF0095E6FF0095E6FF0095E6FF0095E6FF0095E6FF0193E4FF0193
    905       E4FF0193E4FF0193E4FF0193E4FF0193E4FF0193E4FF0193E4FF0193E4FF0193
    906       E4FF0193E4FF0193E4FF0193E4FF0193E4FF0193E4FF0193E4FF0193E4FF0186
    907       D6FF0277C3FF79BBE1FFFFFFFF00FFFFFF00FFFFFF00F3F8FBFF79BBE1FF2095
    908       D3FF0B91DBFF0B91DBFF0B91DBFF0B91DBFF0B91DBFF0B91DBFF0B91DBFF0B91
    909       DBFF0B91DBFF0B91DBFF0B91DBFF0B91DBFF0B91DBFF0B91DBFF0B91DBFF0B91
    910       DBFF0B91DBFF0B91DBFF0B91DBFF0B91DBFF0B91DBFF0B91DBFF018CD8FF0E81
    911       CAFF2E99D7FFCAE0EBFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    912       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    913       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    914       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    915       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    916       FF00FFFFFF00FFFFFF00FDFDFDFFFDFDFDFFFDFDFDFFFFFFFF00FFFFFF00FFFF
    917       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FDFDFDFFFDFDFDFFFDFDFDFFFFFF
    918       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FDFDFDFFFDFD
    919       FDFFFDFDFDFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    920       FF00FEFEFEFFFAFAFAFFFAFAFAFFFAFAFAFFFEFEFEFFFFFFFF00FFFFFF00FFFF
    921       FF00FFFFFF00FFFFFF00FEFEFEFFFAFAFAFFFAFAFAFFFAFAFAFFFEFEFEFFFFFF
    922       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FEFEFEFFFAFAFAFFFAFAFAFFFAFA
    923       FAFFFEFEFEFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FEFE
    924       FEFFFAFAFAFFF5F5F5FFFAFAFAFFFEFEFEFFFFFFFF00FFFFFF00FFFFFF00FFFF
    925       FF00FFFFFF00FEFEFEFFFAFAFAFFF5F5F5FFFAFAFAFFFEFEFEFFFFFFFF00FFFF
    926       FF00FFFFFF00FFFFFF00FFFFFF00FEFEFEFFFAFAFAFFF5F5F5FFFAFAFAFFFEFE
    927       FEFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00F0E5DAFFE2D4
    928       C6FFE2D4C6FFE2D4C6FFEBDCCDFFEBDCCDFFEBDCCDFFEBDCCDFFEBDCCDFFEBDC
    929       CDFFEBDCCDFFE2D4C6FFE2D4C6FFE2D4C6FFEBDCCDFFEBDCCDFFEBDCCDFFEBDC
    930       CDFFEBDCCDFFEBDCCDFFEBDCCDFFE2D4C6FFE2D4C6FFE2D4C6FFEBDCCDFFF0E5
    931       DAFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FEFEFEFFC0966CFFAB72
    932       3AFFAB723AFFB07439FFB17439FFB17439FFB17439FFB17439FFB17439FFB074
    933       39FFAB723AFFAB723AFFAB723AFFB07439FFB17439FFB17439FFB17439FFB174
    934       39FFB17439FFB07439FFAB723AFFAB723AFFAB723AFFB07439FFB17439FFC496
    935       6AFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FAFAFAFFC0966CFFAB72
    936       3AFFB07439FFB17439FFB17439FFB17439FFB17439FFB17439FFB07439FFAB72
    937       3AFFAB723AFFAB723AFFB07439FFB17439FFB17439FFB17439FFB17439FFB174
    938       39FFB07439FFAB723AFFAB723AFFAB723AFFB07439FFB17439FFB17439FFC496
    939       6AFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FDFDFDFFFAFAFAFFC0966CFFB074
    940       39FFB17439FFB17439FFB17439FFB17439FFB17439FFB07439FFAB723AFFAB72
    941       3AFFAB723AFFB07439FFB17439FFB17439FFB17439FFB17439FFB17439FFB074
    942       39FFAB723AFFAB723AFFAB723AFFB07439FFB17439FFB17439FFB17439FFC496
    943       6AFFFFFFFF00FEFEFEFFFDFDFDFFFFFFFF00FDFDFDFFFAFAFAFFC4966AFFB174
    944       39FFB17439FFB17439FFB17439FFB17439FFB07439FFAB723AFFAB723AFFAB72
    945       3AFFB07439FFB17439FFB17439FFB17439FFB17439FFB17439FFB07439FFAB72
    946       3AFFAB723AFFAB723AFFB07439FFB17439FFB17439FFB17439FFB17439FFC496
    947       6AFFFEFEFEFFFAFAFAFFFDFDFDFFFFFFFF00FDFDFDFFFEFEFEFFC89E76FFFAF6
    948       F3FFFAF6F3FFFAF6F3FFFAF6F3FFFAF6F3FFF1EDEAFFF1EDEAFFD0B297FFEBDC
    949       CDFFFAF6F3FFFAF6F3FFFAF6F3FFFAF6F3FFFAF6F3FFFAF6F3FFDECBBBFFD0B2
    950       97FFF1EDEAFFFAF6F3FFFAF6F3FFFAF6F3FFFAF6F3FFFAF6F3FFFAF6F3FFC89E
    951       76FFFAFAFAFFFAFAFAFFFDFDFDFFFFFFFF00FFFFFF00FFFFFF00C89E76FFFFFF
    952       FF00FFFFFF00FFFFFF00FEFEFEFFF5F5F5FFF4F4F4FFF5F5F5FFD8B99CFFF0E5
    953       DAFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FEFEFEFFF5F5F5FFE2D4C6FFD0B2
    954       97FFFEFEFEFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FEFEFEFFC199
    955       73FFF5F5F5FFFAFAFAFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00C89E76FFFFFF
    956       FF00FFFFFF00FEFEFEFFF5F5F5FFF4F4F4FFF5F5F5FFFEFEFEFFD8B99CFFF0E5
    957       DAFFFFFFFF00FFFFFF00FFFFFF00FEFEFEFFF5F5F5FFF4F4F4FFE2D4C6FFD8B9
    958       9CFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FEFEFEFFF5F5F5FFC199
    959       73FFFAFAFAFFFEFEFEFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00C6986EFFC89E
    960       76FFC89E76FFC19973FFC19973FFC19973FFC89E76FFC89E76FFBD8856FFC496
    961       6AFFC89E76FFC89E76FFC89E76FFC19973FFC19973FFC19973FFC29367FFBD88
    962       56FFC89E76FFC89E76FFC89E76FFC89E76FFC89E76FFC19973FFC19973FFC496
    963       6AFFFEFEFEFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00C89E76FFFEFE
    964       FEFFF5F5F5FFF4F4F4FFF5F5F5FFFEFEFEFFFFFFFF00FFFFFF00D8B99CFFF0E5
    965       DAFFFFFFFF00FEFEFEFFF5F5F5FFF4F4F4FFF5F5F5FFFEFEFEFFEBDCCDFFD8B9
    966       9CFFFFFFFF00FFFFFF00FFFFFF00FEFEFEFFF5F5F5FFF4F4F4FFF5F5F5FFC89E
    967       76FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00C89E76FFF5F5
    968       F5FFF4F4F4FFF5F5F5FFFEFEFEFFFFFFFF00FFFFFF00FFFFFF00D8B99CFFF0E5
    969       DAFFFEFEFEFFF5F5F5FFF4F4F4FFF5F5F5FFFEFEFEFFFFFFFF00EBDCCDFFD8B9
    970       9CFFFFFFFF00FFFFFF00FEFEFEFFF5F5F5FFF4F4F4FFF5F5F5FFFEFEFEFFC89E
    971       76FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FEFEFEFFC0966CFFDECB
    972       BBFFDECBBBFFE7D3C1FFE7D3C1FFE7D3C1FFE7D3C1FFE7D3C1FFCCA37DFFD4BB
    973       A2FFDECBBBFFDECBBBFFDECBBBFFE7D3C1FFE7D3C1FFE7D3C1FFD8B99CFFCCA3
    974       7DFFE7D3C1FFE7D3C1FFDECBBBFFDECBBBFFDECBBBFFE7D3C1FFE7D3C1FFC89E
    975       76FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FAFAFAFFC19973FFD9C4
    976       AEFFE2CBB4FFE2CBB4FFE2CBB4FFE2CBB4FFE2CBB4FFE2CBB4FFC89E76FFD0B2
    977       97FFD9C4AEFFD9C4AEFFE2CBB4FFE2CBB4FFE2CBB4FFE2CBB4FFD4B494FFC89E
    978       76FFE2CBB4FFD9C4AEFFD9C4AEFFD9C4AEFFE2CBB4FFE2CBB4FFE2CBB4FFC89E
    979       76FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FDFDFDFFFAFAFAFFC19973FFFEFE
    980       FEFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FEFEFEFFD0B297FFE6DB
    981       D1FFF5F5F5FFFEFEFEFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00EBDCCDFFD8B9
    982       9CFFF5F5F5FFF4F4F4FFF5F5F5FFFEFEFEFFFFFFFF00FFFFFF00FFFFFF00C89E
    983       76FFFFFFFF00FEFEFEFFFDFDFDFFFFFFFF00FDFDFDFFFAFAFAFFC89E76FFFFFF
    984       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FEFEFEFFF5F5F5FFD0B297FFE6DB
    985       D1FFFEFEFEFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00EBDCCDFFD0B2
    986       97FFF4F4F4FFF5F5F5FFFEFEFEFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00C89E
    987       76FFFEFEFEFFFAFAFAFFFDFDFDFFFFFFFF00FDFDFDFFFEFEFEFFC0966CFFCDA8
    988       83FFCDA883FFCDA883FFCDA883FFCDA883FFC5A280FFC5A280FFB88A5CFFC89E
    989       76FFCDA883FFCDA883FFCDA883FFCDA883FFCDA883FFCDA883FFC0966CFFB88A
    990       5CFFC5A280FFCDA883FFCDA883FFCDA883FFCDA883FFCDA883FFCDA883FFC096
    991       6CFFFAFAFAFFFAFAFAFFFDFDFDFFFFFFFF00FFFFFF00FFFFFF00C89E76FFFAF6
    992       F3FFFAF6F3FFFAF6F3FFFAF6F3FFF1EDEAFFF1EDEAFFF1EDEAFFD4B494FFEBDC
    993       CDFFFAF6F3FFFAF6F3FFFAF6F3FFFAF6F3FFFAF6F3FFF1EDEAFFDECBBBFFD0B2
    994       97FFFAF6F3FFFAF6F3FFFAF6F3FFFAF6F3FFFAF6F3FFFAF6F3FFFAF6F3FFC199
    995       73FFF5F5F5FFFAFAFAFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00C89E76FFFFFF
    996       FF00FFFFFF00FEFEFEFFF5F5F5FFF4F4F4FFF5F5F5FFFEFEFEFFD8B99CFFF0E5
    997       DAFFFFFFFF00FFFFFF00FFFFFF00FEFEFEFFF5F5F5FFF4F4F4FFE2D4C6FFD8B9
    998       9CFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FEFEFEFFF5F5F5FFC199
    999       73FFFAFAFAFFFEFEFEFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00C89E76FFFFFF
    1000       FF00FEFEFEFFF5F5F5FFF4F4F4FFF5F5F5FFFEFEFEFFFFFFFF00D8B99CFFF0E5
    1001       DAFFFFFFFF00FFFFFF00FEFEFEFFF5F5F5FFF4F4F4FFF5F5F5FFEBDCCDFFD8B9
    1002       9CFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FEFEFEFFF5F5F5FFF4F4F4FFC199
    1003       73FFFEFEFEFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00C6986EFFC89E
    1004       76FFC19973FFC19973FFC19973FFC89E76FFC89E76FFC89E76FFBD8856FFC496
    1005       6AFFC89E76FFC89E76FFC19973FFC19973FFC19973FFC89E76FFC29367FFBD88
    1006       56FFC89E76FFC89E76FFC89E76FFC89E76FFC19973FFC19973FFC19973FFC698
    1007       6EFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00C89E76FFF5F5
    1008       F5FFF4F4F4FFF5F5F5FFFEFEFEFFFFFFFF00FFFFFF00FFFFFF00D8B99CFFF0E5
    1009       DAFFFEFEFEFFF5F5F5FFF4F4F4FFF5F5F5FFFEFEFEFFFFFFFF00EBDCCDFFD8B9
    1010       9CFFFFFFFF00FFFFFF00FEFEFEFFF5F5F5FFF4F4F4FFF5F5F5FFFEFEFEFFC89E
    1011       76FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FEFEFEFFC19973FFF4F4
    1012       F4FFF5F5F5FFFEFEFEFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00D8B99CFFF0E5
    1013       DAFFF5F5F5FFF4F4F4FFF5F5F5FFFEFEFEFFFFFFFF00FFFFFF00EBDCCDFFD8B9
    1014       9CFFFFFFFF00FEFEFEFFF5F5F5FFF4F4F4FFF5F5F5FFFEFEFEFFFFFFFF00C89E
    1015       76FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FAFAFAFFC0966CFFDECB
    1016       BBFFE7D3C1FFE7D3C1FFE7D3C1FFE7D3C1FFE7D3C1FFE7D3C1FFCCA37DFFD4BB
    1017       A2FFDECBBBFFDECBBBFFE7D3C1FFE7D3C1FFE7D3C1FFE7D3C1FFD8B99CFFCCA3
    1018       7DFFE7D3C1FFDECBBBFFDECBBBFFDECBBBFFE7D3C1FFE7D3C1FFE7D3C1FFC89E
    1019       76FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FDFDFDFFFAFAFAFFE2D4C6FFE2CB
    1020       B4FFE2CBB4FFE2CBB4FFE2CBB4FFE2CBB4FFE2CBB4FFE2CBB4FFD9C4AEFFD9C4
    1021       AEFFD9C4AEFFE2CBB4FFE2CBB4FFE2CBB4FFE2CBB4FFE2CBB4FFE2CBB4FFE2CB
    1022       B4FFD9C4AEFFD9C4AEFFD9C4AEFFE2CBB4FFE2CBB4FFE2CBB4FFE2CBB4FFEBDC
    1023       CDFFFFFFFF00FEFEFEFFFDFDFDFFFFFFFF00FDFDFDFFFAFAFAFFFEFEFEFFFFFF
    1024       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FEFEFEFFF5F5F5FFF4F4F4FFF5F5
    1025       F5FFFEFEFEFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FEFEFEFFF5F5
    1026       F5FFF4F4F4FFF5F5F5FFFEFEFEFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    1027       FF00FEFEFEFFFAFAFAFFFDFDFDFFFFFFFF00FDFDFDFFFEFEFEFFFFFFFF00FFFF
    1028       FF00FFFFFF00FFFFFF00FFFFFF00FEFEFEFFFAFAFAFFF5F5F5FFFAFAFAFFFEFE
    1029       FEFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FEFEFEFFFAFAFAFFF5F5
    1030       F5FFFAFAFAFFFEFEFEFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FEFE
    1031       FEFFFAFAFAFFFAFAFAFFFDFDFDFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    1032       FF00FFFFFF00FFFFFF00FEFEFEFFFAFAFAFFFAFAFAFFFAFAFAFFFEFEFEFFFFFF
    1033       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FEFEFEFFFAFAFAFFFAFAFAFFFAFA
    1034       FAFFFEFEFEFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FEFEFEFFFAFA
    1035       FAFFFAFAFAFFFAFAFAFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    1036       FF00FFFFFF00FFFFFF00FDFDFDFFFDFDFDFFFDFDFDFFFFFFFF00FFFFFF00FFFF
    1037       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FDFDFDFFFDFDFDFFFDFDFDFFFFFF
    1038       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FDFDFDFFFDFD
    1039       FDFFFDFDFDFFFFFFFF00FFFFFF0000000000000000000000000000000001A099
    1040       8F37A69F9385A9A196D2A9A195E2AAA296FFAAA296FFAAA296FFAAA296FFAAA2
    1041       96FFAAA296FFAAA296FFAAA296FFAAA296FFAAA296FFA9A195E2A9A196D2A69F
    1042       9385A0998F370000000100000000000000000000000000000000000000000000
    1043       00000000000000000000000000000000000000000003A79F9489AAA396FFB7AE
    1044       A3FFC8BFB4FFD9D1C6FFDDD5CAFFF1E9DFFFF0E8DEFFF0E8DEFFF0E8DEFFF0E8
    1045       DEFFF0E8DEFFF0E8DEFFF0E8DEFFF0E8DEFFF1E9DFFFDDD5CAFFD9D1C6FFC8BF
    1046       B4FFB7AEA3FFAAA296FFA79F9489000000030000000000000000000000000000
    1047       000000000000000000000000000000000004A69E93B2B5ADA1FFDED5CBFFE9E1
    1048       D7FFE7DFD5FFE6DED4FFE5DDD3FFE5DDD3FFE4DCD2FFE4DCD2FFE4DCD2FFE4DC
    1049       D2FFE4DCD2FFE4DCD2FFE4DCD2FFE4DCD2FFE5DDD3FFE5DDD3FFE6DED4FFE7DF
    1050       D5FFE9E1D7FFE2DAD0FFB5ADA1FFA69E93B20000000400000000000000000000
    1051       00000000000000000000000000000000000DA9A296FFE0D6CDFFE0D6CCFFDED5
    1052       CBFFDDD4CAFFDDD4CAFFDDD4CAFFDDD4CAFFDDD4CAFFDDD4CAFFDDD4CAFFDDD4
    1053       CAFFDDD4CAFFDDD4CAFFDDD4CAFFDDD4CAFFDDD4CAFFDDD4CAFFDDD4CAFFDDD4
    1054       CAFFDED5CBFFDFD6CCFFE0D6CDFFA9A296FF0000000D00000000000000000000
    1055       000000000000000000000000000000000015A69F93FFECE5DDFFD5CCC2FFD5CC
    1056       C2FFD6CDC3FFD7CEC3FFD7CEC4FFD7CEC4FFD7CEC4FFD7CEC4FFD7CEC4FFD7CE
    1057       C4FFD7CEC4FFD7CEC4FFD7CEC4FFD7CEC4FFD7CEC4FFD7CEC4FFD7CEC3FFD6CD
    1058       C3FFD5CCC2FFD5CCC2FFECE5DDFFA69F93FF0000001500000000000000000000
    1059       000000000000000000000000000000000016A69E93FFFFFCF5FFEAE3DBFFD3C9
    1060       C0FFCDC3B9FFCEC5BAFFCEC5BBFFCFC6BBFFCFC6BCFFCFC6BCFFCFC6BCFFCFC6
    1061       BCFFCFC6BCFFCFC6BCFFCFC6BCFFCFC6BCFFCFC6BBFFCEC5BBFFCEC5BAFFCDC3
    1062       B9FFD3C9C0FFEAE3DBFFFFFCF5FFABA499FF0000001600000000000000000000
    1063       000000000000000000000000000000000016A69F93FFCFC8BFFFF8F4ECFFFFFA
    1064       F4FFF8F2EBFFE9E2DAFFE3DAD3FFD7CFC6FFD4CBC2FFD4CBC2FFD4CBC2FFD4CB
    1065       C2FFD4CBC2FFD4CBC2FFD4CBC2FFD4CBC2FFD7CFC6FFE3DAD3FFE9E2DAFFF8F2
    1066       EBFFFFFAF4FFF4F0E8FFCFC8BFFFA69F93FF0000001600000000000000000000
    1067       000000000000000000000000000000000016A7A093FFC7BEB6FFC6BFB4FFD2CB
    1068       C2FFE2DBD3FFF0EAE2FFF3EEE7FFFDFAF3FFFDF9F2FFFDF8F2FFFCF8F1FFFCF8
    1069       F1FFFCF8F1FFFCF8F1FFFDF8F2FFFDF9F2FFFDF9F3FFF3EEE7FFEFEAE2FFE2DC
    1070       D3FFD3CCC3FFC7BFB6FFC8BFB7FFA7A093FF0000001600000000000000000000
    1071       000000000000000000000000000000000016A69F94FFC8C0B8FFC9C2B8FFCCC3
    1072       BAFFCEC6BDFFD2C8BFFFD5CBC3FFD9CEC6FFDCD2CAFFE0D6CEFFE3D9D2FFE8DD
    1073       D6FFEADED7FFE5DAD3FFE1D7CFFFDDD4CCFFDACFC7FFD6CCC4FFD3C9C0FFCFC7
    1074       BEFFCDC4BBFFCAC2B9FFCAC1B9FFA69F94FF0000001600000000000000000000
    1075       000000000000000000000000000000000016A59E93FFC9C1B9FFCAC3B9FFCDC5
    1076       BCFFD0C8BFFFD4CBC2FFD7CEC6FFDBD1C9FFDED5CDFFE2D8D0FFE5DBD4FFE9DE
    1077       D7FFEADFD8FFE6DCD5FFE3D9D1FFDFD6CEFFDCD2CAFFD8CFC7FFD5CCC3FFD1C9
    1078       C0FFCEC6BDFFCBC3BAFFCBC3BAFFA69F93FF0000001600000000000000000000
    1079       000000000000000000000000000000000014918B80B8B6AEA4FFCBC4BAFFCEC6
    1080       BDFFD1C9C0FFD4CBC2FFD7CEC6FFDBD1C9FFDED5CDFFE2D8D0FFE5DBD4FFE9DE
    1081       D7FFEBDFD8FFE6DCD5FFE3D9D1FFDFD6CEFFDCD2CAFFD8CFC7FFD5CCC3FFD1C9
    1082       C0FFCFC7BEFFCDC5BCFFBFB7ADFF928C80B40000001400000000000000000000
    1083       000000000000000000000000000000000010928C82B5B4ACA3FFB5ADA2FFC9C1
    1084       B8FFD3CBC2FFD6CDC4FFD9D0C8FFDDD3CBFFDFD6CFFFE3D9D1FFE6DCD5FFEADF
    1085       D8FFECE0D9FFE7DDD6FFE4DAD2FFE0D7D0FFDDD4CCFFDAD1CAFFD7CEC5FFD3CC
    1086       C2FFD3CBC1FFC6BDB3FF7A7B7DFF7F8081FF0000001200000000000000000000
    1087       000000000000000000000000000000000010A29A8FFFF1EBE4FFB7AFA6FFA59C
    1088       91FFABA298FFBBB2A9FFC5BAB1FFD1C8BFFFD5CBC2FFE1D7CFFFE8DED7FFECE1
    1089       DAFFEEE2DBFFE9DFD8FFE6DDD5FFD9D1CBFFD2CDC7FFCFC8C4FFBFB7B0FFB8AE
    1090       A5FFB3A99FFF787A7BFFC4C2C0FFB4B2AFFF777777FF00000006000000000000
    1091       000000000000000000000000000000000014A09A8EFFD3CBC3FFF6F1EAFFEFE9
    1092       E3FFDAD5CDFFCAC2BAFFBCB3ABFFB4ABA1FFB4AAA1FFB6ACA3FFB8AEA6FFBAB0
    1093       A6FFBBB0A8FFB9AEA6FFB8AEA8FFB8B2AFFFB3772CFFB3772CFFCECCC9FFE4DF
    1094       D9FF78797BFFC2C1BFFFAFADABFFA19E9CFF777778FF00000011000000000000
    1095       000000000000000000000000000000000016A09A8FFFC8C0B7FFC7C0B6FFD4CD
    1096       C4FFE4DDD6FFF2EDE5FFF6F1EAFFFFFCF5FFFFFBF4FFFFFBF4FFFEFAF3FFFDFA
    1097       F3FFFDFAF3FFFFFBF5FFFFFFFFFFB1752BFFFFEECCFFFFEAC7FFB4782EFF737B
    1098       83FFC1C1C2FFAFADABFF9F9B9AFF737375FF0000003700000011000000000000
    1099       000000000000000000000000000000000016A09A8EFFC9C1B8FFC9C2B8FFCCC4
    1100       BBFFCEC6BDFFD2C9C0FFD5CCC4FFD9CFC7FFDCD3CBFFE1D6CEFFE4D9D2FFE9DD
    1101       D6FFEADFD8FFE6DEDAFFE5E1E0FFAF762EFFFFD699FFFFD093FFFBDAB3FFB77A
    1102       31FFAAAEB3FF9C9B9CFF6E7073FFA8A094FF0000002200000006000000000000
    1103       000000000000000000000000000000000016A0998FFFCAC2B9FFCAC3B9FFCDC5
    1104       BCFFD0C8BFFFD4CBC2FFD7CEC6FFDBD1C9FFDED5CDFFE2D8D0FFE5DBD4FFE9DE
    1105       D8FFECE2DDFFE9E3E3FFAD7229FFFFECC8FFAB7431FFFFD296FFFFCC8CFFF6D4
    1106       A8FFB87C33FF686F78FFD3CCC4FFA39C92FF0000001600000000000000068888
    1107       88FF8A8A8AFF0000000600000000000000148B867CB8B7AFA4FFCBC5BAFFCEC6
    1108       BDFFD1C9C0FFD4CBC2FFD7CEC6FFDBD1C9FFDED5CDFFE2D8D0FFE5DBD4FFEADF
    1109       D9FFEDE5E3FFAF7329FFFFE3BAFFFFCD8FFFFFE9CBFFAA7431FFFFCF90FFFDC8
    1110       86FFF2CC9DFFB87C34FFBEBBB9FF8B877FB60000001400000006858686FFC6C3
    1111       C1FFB4B2B0FF777778FF00000006000000108D877DB5B5ACA4FFB5ADA2FFC9C1
    1112       B8FFD3CBC2FFD6CDC4FFD9D0C8FFDDD3CBFFDFD6CEFFE3D9D1FFE6DCD5FFEBE0
    1113       DAFFEFE7E6FFB0762EFFFFDCAEFFFCC887FFFCC988FFFFE5C0FFAB7533FFFECB
    1114       8BFFFBC580FFEBC390FFB77C35FF888883AD00000015858586FFC4C2C0FFB0AE
    1115       ABFFA29E9CFF787878FF00000011000000109B958BFFF2ECE4FFB8AFA6FFA59C
    1116       91FFABA298FFBBB2A9FFC5BAB1FFD1C8BFFFD5CBC2FFE5DBD3FFE8DED7FFEDE3
    1117       DDFFF0EAE8FFB07730FFFED6A2FFF8C481FFF7C482FFF9C582FFFFDFB5FFAC76
    1118       35FFFBC885FFF7C079FFEFC48DFFBA7F37FF7F868FFFC3C3C4FFAFAEACFFA09D
    1119       9BFF767676FF0000003700000011000000149A958AFFD3CCC3FFF6F1EAFFEFE9
    1120       E3FFDAD5CDFFCAC2BAFFBCB3ABFFB4ABA1FFB4AAA1FFB6ACA2FFB8AEA6FFBBB1
    1121       A8FFBEB6B4FFB17832FFFCCF96FFF6C17DFFF5C17EFFF5C17DFFF7C27DFFFDD8
    1122       A9FFAC7737FFF9C37EFFF4BD72FFDCAF74FFB97F37FFABB0B6FF9E9D9EFF7576
    1123       78FF0000003D0000001C00000006000000169A9589FFC8C0B7FFC7C0B6FFD4CD
    1124       C4FFE4DDD6FFF2EDE5FFF6F1EAFFFFFCF5FFFFFBF4FFFFFBF4FFFEFAF3FFFEFB
    1125       F5FFFFFFFFFFB07731FFFAC888FFF4BE79FFF3BE79FFF3BE79FFF3BE79FFF5BF
    1126       79FFFBD19CFFAD7939FFF7C078FFF3BA6DFFD29E57DFBB813AFF6D7580FF0000
    1127       003D0000001C0000000600000000000000169A948AFFC9C1B8FFC9C2B8FFCCC4
    1128       BBFFCEC6BDFFD2C9C0FFD5CCC4FFD9CFC7FFDCD3CBFFE1D6CEFFE4D9D2FFE9DE
    1129       D9FFEEE7E6FFB17832FFF6C27BFFF1BC73FFF0BB73FFF0BB73FFF0BB73FFF0BB
    1130       73FFF2BC73FFF7CB8EFFAD7A3BFFF4BD72FFEFB667FFCF994DE1BB8441FF0000
    1131       002200000006000000000000000000000016999389FFCAC2B9FFCAC3B9FFCDC5
    1132       BCFFD0C8BFFFD4CBC2FFD7CEC6FFDBD1C9FFDED5CDFFE2D8D0FFE5DBD4FFEAE0
    1133       D9FFEFE7E5FFB37830FFF6BC6EFFF0B96FFFEEB76EFFEEB76EFFEEB76EFFEEB7
    1134       6EFFEEB76EFFF0B86EFFF5C380FFAE7B3EFFF2B96EFFECB360FFD09645E4B985
    1135       45FF00000006000000000000000000000016999489FFC8C1B7FFCBC4BAFFCEC6
    1136       BDFFD0C8BFFFD4CBC2FFD7CEC6FFDBD1C9FFDED5CDFFE2D8D0FFE5DBD4FFECE1
    1137       DAFFF3E8E3FF8C9196FFB47A33FFF2B766FFEEB668FFECB468FFECB468FFECB4
    1138       68FFECB468FFECB468FFEEB668FFF1BB72FFB07D40FFECB15DFFEEB15BFFB885
    1139       46FF0000001100000000000000000000001588847BC1A09B91FFC8C1B7FFD2CA
    1140       C1FFD3CBC2FFD7CEC5FFD9D0C8FFDDD3CBFFDFD6CEFFE3D9D1FFE7DDD6FFF0E4
    1141       DDFF8C8C8AFFE3E4E6FFD0D4DDFFB57A34FFEFB562FFEBB363FFEAB263FFEAB2
    1142       63FFEAB263FFEAB263FFEAB263FFECB465FFF1B868FFB58244FFB88445FF0000
    1143       00370000001100000000000000000000000D0000002E78736BA8979187FFA19B
    1144       91FFB1AAA1FFC5BCB4FFCBC3BAFFE3D8D0FFE5DCD4FFEADFD7FFEEE3DCFFF7EA
    1145       E3FF8E8D8BFFD6D4D4FFC1C2C4FFB0B5BBFFB97F39FFEFB35DFFECB25FFFECB2
    1146       5FFFECB25FFFECB25FFFECB25FFFEEB460FFB68244FF00000048000000370000
    1147       001C00000006000000000000000000000004000000130000002B0000003E4745
    1148       406D737068A78B877DDF8E8980EA948F85FF938E84FF928E83FF928D83FF938E
    1149       83FF8F8C8AFF8A8785FFB7B6B4FFA6A5A6FF777C84FFBB8440FFB78344FFB683
    1150       45FFB68345FFB68345FFB68345FFB88445FF0000003D00000022000000110000
    1151       000600000000000000000000000000000000000000030000000B000000160000
    1152       00200000002D000000370000003E000000410000004300000043000000488F8C
    1153       8BFFD7D5D4FF878682FF84837FFF7F7D7DFF0000004800000043000000430000
    1154       0043000000430000004300000043000000370000001C00000006000000000000
    1155       0000000000000000000000000000000000000000000000000000000000010000
    1156       00050000000B000000110000001400000016000000160000001600000025ABA8
    1157       A7C6868481FF0000004800000043000000370000002200000016000000160000
    1158       0016000000160000001600000016000000110000000600000000000000000000
    1159       0000000000000000000000000000000000000000000000000000000000000000
    1160       00000000000000000000000000000000000000000000000000000000000D0000
    1161       002B000000340000002200000016000000110000000600000000000000000000
    1162       0000000000000000000000000000000000000000000000000000000000000000
    1163       0000000000000000000000000000000000000000000000000000000000000000
    1164       0000000000000000000000000000000000000000000000000000000000040000
    1165       000D0000000F0000000600000000000000000000000000000000000000000000
    1166       0000000000000000000000000000000000000000000000000000000000000000
    1167       0000000000000000000000000000000000000000000000000000000000000000
    1168       0000000000000000000000000000000000000000000000000000000000000000
    1169       0000000000000000000000000000000000000000000000000000000000000000
    1170       0000000000000000000000000000000000000000000000000000000000000000
    1171       0000000000000000000000000000000000000000000000000000000000000000
    1172       0000000000000000000000000000000000000000000000000000000000000000
    1173       0000000000000000000000000000000000000000000000000000000000000000
    1174       0000000000000000000000000000000000000000000000000000000000000000
    1175       0000000000000000000000000000000000000000000000000000000000000000
    1176       000000000000000000008080803485858598878789C68686869A808080440000
    1177       0000000000000000000000000000000000000000000000000000000000000000
    1178       0000000000000000000000000000000000000000000000000000000000000000
    1179       0000000000000000000000000000000000000000000000000000000000000000
    1180       0000000000008181816D878787FFE4E5E5FFE9EAEAFFDCDDDDFF9A9A9AF68383
    1181       8590000000010000000000000000000000000000000000000000000000000000
    1182       00000000000000000000000000000000000000000000878A87488092800E0000
    1183       0000000000000000000000000000000000000000000000000000000000000000
    1184       0000000000007C7C7C29848484F3E2E3E3FEF3F4F5FFECEEEFFFF3F4F4FFA4A4
    1185       A4F6848485970000000100000000000000000000000000000000000000000000
    1186       000000000000000000000000000000000000888D8A6B858A88FF898E8CD08989
    1187       890D000000000000000000000000000000000000000000000000000000006D6D
    1188       6D07000000000000000080808028858585EDDFDFE0FEF1F2F3FFEAECEDFFF3F4
    1189       F5FFA4A4A4F68486868B00000000000000000000000000000000000000000000
    1190       0000000000000000000000000000858C8849898F8DF5CACECEFFA2A7A6F7898E
    1191       8CCE8080800C0000000000000000000000000000000000000000818181577F7F
    1192       7FFF7D7D7D3F00000000000000007C7C7C27878787ECDFDFE0FEF1F2F3FFEAEC
    1193       EDFFF3F4F4FF9A9A9AF67D7D7D3F000000000000000000000000000000000000
    1194       00000000000000000000838B8B21858A88FFCBCFCEFFE3E6E6FFDADEDEFFA1A6
    1195       A5F7868B89EAAAAAAA0300000000000000000000000000000000888888EFDADA
    1196       DBFF898989F58080803E000000000000000080808026828282FFEDEDEEFFEAEC
    1197       EDFFEBECEEFFE2E2E3FF878787AC000000000000000000000000000000000000
    1198       00000000000000000000868A8876A3A7A7F6F5F6F6FFF1F2F2FFE1E4E4FF9FA3
    1199       A2F5878C8AE8808080020000000000000000000000007B7B7B1FA8A8A9F6F7F8
    1200       F8FFE8E8E9FF8A8A8AF47D7D7D3D0000000000000000868888BAE0E0E1FFEAEC
    1201       EEFFE6E8EAFFEEEFEFFF878788D6000000000000000000000000000000000000
    1202       000000000000878D8731878C8AF6BBC1C0FFE1E4E4FFE6E8E8FF949A98F4898D
    1203       8CAA80808006000000000000000000000000000000007B7B7B1BA1A1A1F7F2F3
    1204       F4FFEFF1F2FFE7E8E9FF898A8AF48080806E8080806C898989FCF1F1F2FFEAEB
    1205       EDFFEAECEDFFDEDFDFFF868686B1000000000000000000000000000000000000
    1206       0000858A8A30888D8CF0B9BEBEFEC8CDCDFF949A99F4868B89FE888D8B8BFFFF
    1207       FF01000000000000000000000000000000000000000000000000878787E7EBEC
    1208       ECFFEEEFF0FFEFF1F2FFE9E9EAFFABACACF3B0B1B1F4EAEBEBFFEEEFF1FFE5E7
    1209       E9FFF6F7F7FFB6B7B7FB8181819E00000000000000000000000000000000858A
    1210       8A30888D8BF0B8BEBDFEC8CDCDFF8B9290F5868A88878989891C000000000000
    1211       0000000000000000000000000000000000000000000000000000808080549090
    1212       90F6EFF0F1FFEEEFF0FFEFF0F1FFF2F3F4FFF2F3F4FFEDEFF0FFE5E7E9FFE5E7
    1213       E9FFEBEDEEFFF0F1F2FF979797F68183836B00000000000000008888882F888C
    1214       8BF0B8BEBDFEC8CDCDFF8B9290F5878E8C710000000000000000000000000000
    1215       0000000000000000000000000000000000000000000000000000000000008282
    1216       8270909091F6EFF0F1FFEEEFF0FFE5E7E9FFE5E7E9FFE6E8EAFFECEEEFFFE5E7
    1217       E9FFE5E7E9FFEBEDEEFFF0F1F2FF979797F68282826C8888882F888D8BEFB6BA
    1218       BAFEC8CDCDFF8D918FF4878E8C71000000000000000000000000000000000000
    1219       0000000000000000000000000000000000000000000000000000000000000000
    1220       0000828282708F8F8FF6EAEBEBFFF3F4F4FFF1F2F3FFF0F0F1FFF3F3F4FFEFF0
    1221       F1FFE2E3E5FFC9C8C7FFDDDDDDFFF0F1F2FF969797F7858787F6A0A6A6FEB5BB
    1222       BBFF8B918FF5888D8B7200000000000000000000000000000000000000000000
    1223       0000000000000000000000000000000000000000000000000000000000000000
    1224       0000000000008080804A868686EAA1A1A1F3A3A4A4F1878787FB858585FFEAEA
    1225       EBFFE9EAEAFFC5C4C3FFC4C1C0FFDDDDDDFFF0F1F2FF969696FF8D9393FF888E
    1226       8BF5868D8B720000000000000000000000000000000000000000000000000000
    1227       0000000000000000000000000000000000000000000000000000000000000000
    1228       00000000000000000000000000007B7B7B1F7C7C7C2180808004808080488A8A
    1229       8AF5EAEBEBFFE8E8E8FFC5C4C3FFC4C1C0FFDEDDDEFFF0F1F2FF959595FF8485
    1230       84AE000000000000000000000000000000000000000000000000000000000000
    1231       0000000000000000000000000000000000000000000000000000000000000000
    1232       0000000000000000000000000000000000000000000000000000000000008080
    1233       80488B8B8BF6EAEBECFFE8E8E8FFC5C4C3FFC4C1C0FFDEDDDEFFF0F1F2FF9596
    1234       96F68282826E0000000000000000000000000000000000000000000000000000
    1235       0000000000000000000000000000000000000000000000000000000000000000
    1236       000000000000000000000000000000000000AA55000386491E2A85481E438651
    1237       1B13818383678B8B8BFEEAEBECFFE8E8E8FFC5C4C3FFC5C2C1FFDFDEDFFFF0F1
    1238       F2FF959595F68282826E00000000000000000000000000000000000000000000
    1239       0000000000000000000000000000000000000000000000000000000000000000
    1240       0000000000000000000000000000894E1F52955F37EFAF8362F1B28768F3966B
    1241       4BFA868885FA8C9392FE8B8B8BFFEAEBECFFE8E8E9FFC8C7C7FFC9C6C6FFE0E0
    1242       E1FFF0F1F2FF959596F68282826E000000000000000000000000000000000000
    1243       0000000000000000000000000000000000000000000000000000000000000000
    1244       00000000000000000000864A215DA06E4CF7D9BDA1FFDAB38FFFD5AA83FFA399
    1245       8CFF8F9695FF969F9FFF858987F88B8B8BF9EAEBECFFE8E9EAFFCBCBCBFFCCCB
    1246       CBFFE1E2E3FFF0F1F2FF959696F68282826E0000000000000000000000000000
    1247       0000000000000000000000000000000000000000000000000000000000000000
    1248       000000000000864B235FA2714EF7DCBEA4FFD7AF89FFCD9B6EFFC68F60FFB185
    1249       61FF898C89FF878B88FF877565B3808080488C8C8CF6EBEBECFFE9EAEBFFCFCF
    1250       CFFFCFCFD0FFE3E3E5FFF0F1F2FF959696F68383836F00000000000000000000
    1251       0000000000000000000000000000000000000000000000000000000000000000
    1252       0000864C2261A1714EF7DDC1A6FFD7B08BFFCD9B6EFFC68E60FFB47A4DFFBA77
    1253       45FFAD7347FFB9957BFF8E522AD000000000808080488C8C8CF6EBEBECFFE9EA
    1254       ECFFD2D3D4FFD2D3D4FFE4E5E7FFF0F1F2FF949595F68383836F000000000000
    1255       000000000000000000000000000000000000000000000000000000000000864B
    1256       2163A3734FF7DDC2A9FFD8B18CFFCD9C6EFFC38D5EFF9F6B41FFBB8054FFB46C
    1257       39FFAD5F2AFFC38E6BFF955B35E20000000000000000808080488C8C8CF6EBEB
    1258       ECFFEAEBEDFFD5D7D9FFD4D5D7FFE4E5E7FFF0F1F2FF959595F5828282700000
    1259       0000000000000000000000000000000000000000000000000000894920389F6C
    1260       49F7DEC2A9FFD8B08CFFCD9C6FFFC48D5EFF9E6B42FFBB8156FFB7703FFFAD5F
    1261       2AFFB16532FFC39474FF8F5429B6000000000000000000000000808080488C8C
    1262       8CF6EBEBECFFEAEBEDFFD5D7D9FFD4D5D7FFEAECEDFFF0F1F2FF949495F68282
    1263       827000000000000000000000000000000000000000000000000092582DB1D0AF
    1264       93FFD4AA82FFCD9C6FFFC38C5FFF9F6B43FFBB8156FFB77240FFAE602BFFB064
    1265       31FFC59371FF9F6B48F7884A213E000000000000000000000000000000008080
    1266       80488C8C8CF6EBECECFFEBECEDFFE0E2E4FFE5E7E9FFEBECEEFFF1F1F2FF9292
    1267       93F57E7E7E47000000000000000000000000000000000000000097613BE0D7B4
    1268       95FFCE9D70FFC38E5FFF9F6B43FFBC8256FFB77140FFAE602BFFB06431FFC593
    1269       71FFA26F4DF6894B227000000000000000000000000000000000000000000000
    1270       0000808080488C8C8CF6EBECECFFEEEFF0FFC6C7C9FF898A8AFFEFF1F2FFD4D6
    1271       D6FF868686A7000000000000000000000000000000000000000091572FD2D4B3
    1272       97FFC89264FFA87247FFBC8256FFB77140FFAE602BFFB06431FFC59271FFA16D
    1273       4CF7884A226F0000000000000000000000000000000000000000000000000000
    1274       0000000000017979794C8C8C8CF6EBECECFFEAEBECFFD3D5D6FFF5F5F6FFA8A8
    1275       A9F681818169000000000000000000000000000000000000000C7A452086B489
    1276       69F8D0A27DFFBB7C4CFFB5703EFFAE612CFFB16532FFC69471FF9F6E4BF87943
    1277       1D7A000000050000000000000000000000000000000000000000000000070000
    1278       000D00000013000000186363635D8C8C8CF7EAEBEBFFF4F5F5FFADAEAEF88181
    1279       81B80E0E0E1200000009000000020000000200000014000000260C08043E864D
    1280       27E4BB9071FCCA9773FFB97749FFB97547FFC69473FF9F6D49F9643618920000
    1281       00310000001F0000000D000000000000000000000000000000060000000D0000
    1282       00150000001C000000230000002A5454546A828282F0828282F97A7A7AAD0808
    1283       0821000000170000001000000008000000010000001400000026000000381E0F
    1284       065679421ECD996642FBAE7E5EF8A97A5AF8945D38F757311593000000430000
    1285       00310000001F0000000B000000000000000000000000000000030000000A0000
    1286       0010000000160000001C000000210000002400000024000000220000001E0000
    1287       0018000000120000000C0000000500000000000000000000000A0000001A0000
    1288       002600000030341D0D4F593115784A291264150D043C0000002C000000210000
    1289       0013000000040000000000000000000000000000000000000000000000000000
    1290       0002000000060000000B0000000D0000000F0000000F0000000E0000000C0000
    1291       0008000000030000000000000000000000000000000000000000000000000000
    1292       0000000000000000000100000002000000020000000000000000000000000000
    1293       0000000000000000000000000000000000000000000000000000000000000000
    1294       0000000000000000000000000000000000000000000000000000000000000000
    1295       0000000000000000000000000000FFFFFF000000000000000000000000000000
    1296       0000000000000000000000000000000000000000000000000000000000000000
    1297       0000000000000000000000000000000000000000000000000000000000000000
    1298       0000000000000000000000000000000000000000000000000000000000000000
    1299       00069A9895FFAAA8A6A400000003FFFFFF000000000000000000000000000000
    1300       0000000000000000000000000000000000000000000000000000000000000000
    1301       0000000000000000000000000000000000000000000000000000000000000000
    1302       00000000000000000000000000000000000000000006969391FF969391FF9693
    1303       91FFBDBAB9FF969391FF0000000DFFFFFF000000000000000000000000000000
    1304       0000000000000000000000000000000000000000000000000000000000000000
    1305       00000000000000000000000000000000000000000006C3945CFFC3945CFFC394
    1306       5CFFC3945CFFC3945CFFC3945CFFC3945CFF94918FFFDAD8D7FFCDCBCAFF918E
    1307       8CFF918E8CFF000000330000000FFFFFFF000000000000000000000000000000
    1308       0000000000000000000000000000000000000000000000000000000000000000
    1309       000000000000000000000000000000000006BB8747FFFFE5C4FFFFE5C4FFFFE5
    1310       C4FFFFE5C4FFFFE5C4FFFFE5C4FFFFE5C4FFC3945CFFCDCBCAFFBFBDBCFFB2B0
    1311       AEFF8C8987FF0000002200000006FFFFFF000000000000000000000000000000
    1312       0000000000000000000000000000000000000000000000000000000000000000
    1313       00000000000000000006BB8747FFBB8747FFFEE2C1FFFDCC90FFFDCC90FFFDCC
    1314       90FFFDCC90FFFDCC90FFFDCC90FFFDCC90FFFDCC90FFBB8747FFB2B0AEFFA5A2
    1315       A0FF878482FF0000001600000000FFFFFF000000000000000000000000000000
    1316       0000000000000000000000000000000000000000000000000000000000000000
    1317       000000000006BB8747FFF6D3ABE1F2CFA5E3BB8747FFFCDFBBFFF9C789FFF9C7
    1318       89FFF9C789FFF9C789FFF9C789FFF9C789FFF9C789FFF9C789FFBB8747FF827F
    1319       7DFF000000370000001100000000FFFFFF000000000000000000000000000000
    1320       0000000000000000000000000000000000000000000000000000000000000000
    1321       000000000011BB8747FFFFCF96FFFECE94FFF9C688FFBB8747FFFAD9AFFFF6C3
    1322       81FFF6C381FFF6C381FFF6C381FFF6C381FFF6C381FFF6C381FFFAD9AFFFBB87
    1323       47FF000000220000000600000000FFFFFF000000000000000000000000000000
    1324       0000000000000000000000000000000000000000000000000000000000000000
    1325       00000000001100000037BB8747FFFDCC91FFFBCA8DFFF6C280FFBB8747FFF7D3
    1326       A3FFF3BF7AFFF3BF7AFFF3BF7AFFF3BF7AFFF3BF7AFFF3BF7AFFF7D3A3FFBB87
    1327       47FF000000160000000000000000FFFFFF000000000000000000000000000000
    1328       0000000000000000000000000000000000000000000000000000000000000000
    1329       0000000000060000001C0000003DBB8747FFFAC88AFFF9C687FFF3BE79FFBB87
    1330       47FFF4CC96FFF0BA72FFF0BA72FFF0BA72FFF0BA72FFF0BA72FFF4CC96FFBB87
    1331       47FF000000160000000000000000FFFFFF000000000000000000000000000000
    1332       0000000000000000000000000000000000000000000000000000000000000000
    1333       000000000000000000060000001C0000003DBB8747FFF7C484FFF6C381FFF0BA
    1334       73FFBB8747FFF1C589FFEDB66BFFEDB66BFFEDB66BFFEDB66BFFF1C589FFBB87
    1335       47FF000000160000000000000000FFFFFF000000000000000000000000000000
    1336       0000000000000000000000000000000000000000000000000000000000000000
    1337       0006A2A2A2FFA2A2A2FF0000000B0000001C0000003DBB8747FFF5C17EFFF3BF
    1338       7BFFEDB66BFFBB8747FFEDBD7AFFEAB163FFEAB163FFEAB163FFEDBD7AFFBB87
    1339       47FF000000160000000000000000FFFFFF000000000000000000000000000000
    1340       000000000000000000000000000000000000000000000000000000000006A2A2
    1341       A2FFBBB9B7FFACAAA8FF7B7B7BFF0000000B0000001C0000003DBB8747FFF2BD
    1342       78FFF1BB74FFEAB265FFBB8747FFE9B46BFFE6AD5CFFE6AD5CFFE9B46BFFBB87
    1343       47FF000000160000000000000000FFFFFF000000000000000000000000000000
    1344       00000000000000000006BB8747FFBB8747FF0000000600000006A2A2A2FFBBB9
    1345       B7FFACAAA8FF9E9B99FF7B7B7BFF00000011000000060000001C0000003DBB87
    1346       47FFEFB971FFEEB76EFFE7AE5EFFBB8747FFE5AC5BFFE4A955FFE5AC5BFFBB87
    1347       47FF000000160000000000000000FFFFFF000000000000000000000000000000
    1348       000000000006BB8747FFF6D4ABE1F4D1A8E1BB8747FFA2A2A2FFBBB9B7FFACAA
    1349       A8FF9E9B99FF7B7B7BFF000000370000001100000000000000060000001C0000
    1350       003DBB8747FFEDB66BFFEBB468FFE6AC5AFFBB8747FFE3A854FFBB8747FF0000
    1351       0037000000110000000000000000FFFFFF000000000000000000000000000000
    1352       000000000011BB8747FFFECE94FFFDCC91FFEEC99CE3BB8747FFACAAA8FF9E9B
    1353       99FF7B7B7BFF0000003D0000001C000000060000000000000000000000060000
    1354       001C0000003DBB8747FFEAB265FFE9B062FFCB9349E6BB8747FF0000003D0000
    1355       001C000000060000000000000000FFFFFF000000000000000000000000000000
    1356       0006BB8747FFFFDEB7FFBB8747FFFDCC91FFFAC88AFFE8C08FE6BB8747FF7B7B
    1357       7BFF0000003D0000001C000000060000000000000006A2A2A2FFA2A2A2FF0000
    1358       000B0000001C0000003DBB8747FFE7AE5EFFE6AC5BFFBB8747FF000000220000
    1359       0006000000000000000000000000FFFFFF00000000000000000000000006BB87
    1360       47FFFDD9AEFFFCCB8FFFFDDEB9FFBB8747FFFAC98BFFF7C484FFE3B984E6BB87
    1361       47FF00000022000000060000000000000006A2A2A2FFBBB9B7FFACAAA8FF7B7B
    1362       7BFF0000000B0000001C0000003DBB8747FFBB8747FF00000037000000110000
    1363       0000000000000000000000000000FFFFFF00000000000000000000000011BB87
    1364       47FFFBD4A4FFFAC889FFFAC889FFFCDAB0FFBB8747FFF8C586FFF5C17EFFE2B5
    1365       7BE3BB8747FF0000000600000006A2A2A2FFBBB9B7FFACAAA8FF9E9B99FF7B7B
    1366       7BFF00000011000000060000001C00000037000000370000001C000000060000
    1367       0000000000000000000000000000FFFFFF00000000000000000000000016BB87
    1368       47FFF8CF99FFF7C483FFF7C483FFF7C483FFF9D5A6FFBB8747FFF5C280FFF2BD
    1369       78FFDEB071E2BB8747FFA2A2A2FFBBB9B7FFACAAA8FF9E9B99FF7B7B7BFF0000
    1370       0037000000110000000000000006000000110000001100000006000000000000
    1371       0000000000000000000000000000FFFFFF00000000000000000000000016BB87
    1372       47FFF6C98FFFF5C17EFFF5C17EFFF5C17EFFF5C17EFFF7CF9CFFBB8747FFF3BE
    1373       7AFFEFB971FFD9A766E3BB8747FFACAAA8FF9E9B99FF7B7B7BFF0000003D0000
    1374       001C000000060000000000000000000000000000000000000000000000000000
    1375       0000000000000000000000000000FFFFFF00000000000000000000000016BB87
    1376       47FFF4C383FFF3BE79FFF3BE79FFF3BE79FFF3BE79FFF3BE79FFF5C991FFBB87
    1377       47FFF1BB74FFEDB66BFFD2A05BE6BB8747FF7B7B7BFF0000003D0000001C0000
    1378       0006000000000000000000000000000000000000000000000000000000000000
    1379       0000000000000000000000000000FFFFFF00000000000000000000000016BB87
    1380       47FFF1BD78FFF0BB73FFF0BB73FFF0BB73FFF0BB73FFF0BB73FFF0BB73FFF2C4
    1381       85FFBB8747FFEEB86EFFEAB265FFCE9950E6BB8747FF00000022000000060000
    1382       0000000000000000000000000000000000000000000000000000000000000000
    1383       0000000000000000000000000000FFFFFF00000000000000000000000016BB87
    1384       47FFEEB76EFFEEB76EFFEEB76EFFEEB76EFFEEB76EFFEEB76EFFEEB76EFFEEB7
    1385       6EFFF0BD79FFBB8747FFECB469FFE7AE5EFFCD9447E3BB8747FF000000060000
    1386       0000000000000000000000000000000000000000000000000000000000000000
    1387       0000000000000000000000000000FFFFFF000000000000000000000000169C9A
    1388       97FFBB8747FFECB468FFECB468FFECB468FFECB468FFECB468FFECB468FFECB4
    1389       68FFECB468FFECB66DFFBB8747FFE6AC5BFFE5AA58FFBB8747FF000000110000
    1390       0000000000000000000000000000000000000000000000000000000000000000
    1391       0000000000000000000000000000FFFFFF0000000000000000069C9A97FFDAD8
    1392       D7FFCDCBCAFFBB8747FFE9B163FFE9B163FFE9B163FFE9B163FFE9B163FFE9B1
    1393       63FFE9B163FFE9B163FFE9B163FFBB8747FFBB8747FF00000037000000110000
    1394       0000000000000000000000000000000000000000000000000000000000000000
    1395       0000000000000000000000000000FFFFFF000000000000000011999794FFCDCB
    1396       CAFFBFBDBCFFB2B0AEFFBB8747FFE7AE5DFFE7AE5DFFE7AE5DFFE7AE5DFFE7AE
    1397       5DFFE7AE5DFFE7AE5DFFBB8747FF00000048000000370000001C000000060000
    1398       0000000000000000000000000000000000000000000000000000000000000000
    1399       0000000000000000000000000000FFFFFF000000000000000016959290FF918E
    1400       8CFFB2B0AEFFA5A2A0FF84817FFFBB8747FFBB8747FFBB8747FFBB8747FFBB87
    1401       47FFBB8747FFBB8747FF0000003D000000220000001100000006000000000000
    1402       0000000000000000000000000000000000000000000000000000000000000000
    1403       0000000000000000000000000000FFFFFF0000000006959290FFC8C6C4FF8C8A
    1404       87FF888683FF84817FFF00000048000000430000004300000043000000430000
    1405       004300000043000000370000001C000000060000000000000000000000000000
    1406       0000000000000000000000000000000000000000000000000000000000000000
    1407       0000000000000000000000000000FFFFFF000000000FA5A3A1B28C8A87FF0000
    1408       0048000000430000003700000022000000160000001600000016000000160000
    1409       0016000000160000001100000006000000000000000000000000000000000000
    1410       0000000000000000000000000000000000000000000000000000000000000000
    1411       0000000000000000000000000000FFFFFF000000000D0000002A000000330000
    1412       0022000000160000001100000006000000000000000000000000000000000000
    1413       0000000000000000000000000000000000000000000000000000000000000000
    1414       0000000000000000000000000000000000000000000000000000000000000000
    1415       0000000000000000000000000000FFFFFF00000000030000000D0000000F0000
    1416       0006000000000000000000000000000000000000000000000000000000000000
    1417       0000000000000000000000000000000000000000000000000000000000000000
    1418       0000000000000000000000000000000000000000000000000000000000000000
    1419       0000000000000000000000000000FFFFFF000000000000000000000000000000
    1420       0000000000000000000000000000000000000000000000000000000000000000
    1421       0000000000000000000000000000000000000000000000000000000000000000
    1422       0000000000000000000000000000000000000000000000000000000000000000
    1423       0000000000000000000000000000000000000000000000000000000000000000
    1424       00000000000000000000000000000000000000000000CFCFCF1DC1C1C162BDBD
    1425       BD97B9B9B9B8B6B6B6C6B3B3B3C6B0B0B0B7A6A6A6969A9A9A62727272220000
    1426       0006000000010000000000000000000000000000000000000000000000000000
    1427       0000000000000000000000000000000000000000000000000000000000000000
    1428       00000000000000000000FFFFFF01D2D2D250D4D4D4C1CECECEFCDBDBDBFFE5E5
    1429       E5FFEDEDEDFFEFEFEFFFEDEDEDFFE6E6E6FFD9D9D9FFC8C8C8FFB2B2B2FAA5A5
    1430       A5B88C8C8C500000000C00000003000000000000000000000000000000000000
    1431       0000000000000000000000000000000000000000000000000000000000000000
    1432       000000000000E1E1E12EC5C5C5C6D5D5D5FEEFEFEFFFFEFEFEFFFCFCFDFFFAFB
    1433       FBFFF7F9F9FFF5F6F8FFF4F6F7FFF2F3F4FFF0F1F1FFEFEFEFFFEDEDEDFFD6D6
    1434       D6FFB1B1B1FE999999BB5B5B5B38000000090000000100000000000000000000
    1435       0000000000000000000000000000000000000000000000000000000000000000
    1436       0000DFDFDF63CECECEF6EDEDEDFFFFFFFFFFFBFCFCFFFAFCFEFFE3E6EAFFCED1
    1437       D2FFCCC5BCFFCEBFB0FFCFC0B1FFCDC7C1FFD1D4D9FFE0E4E8FFEAECEDFFE8E8
    1438       E8FFE9E9E9FFC7C7C7FF989898EF6C6C6C690000001200000003000000000000
    1439       000000000000000000000000000000000000000000000000000000000000E1E1
    1440       E17CD4D4D4FEFAFAFAFFFCFCFCFFFBFCFDFFD3D6D7FFC7B4A0FFDFB081FFF4B4
    1441       73FFF5B26FFFF4B16BFFF1AC66FFF0A85FFFE9A55EFFD8A874FFCDBBAAFFD6DB
    1442       E0FFE3E4E6FFE2E2E2FFD8D8D8FF9B9B9BFB6969697E00000019000000040000
    1443       0000000000000000000000000000000000000000000000000000E2E2E26BD5D5
    1444       D5FEFCFCFCFFFBFCFCFFEAEEF0FFC3B6AAFFECB882FFFABD81FFF8BC81FFF6BB
    1445       7EFFF5B87BFFF3B576FFF1B171FFEFAE6AFFEEA964FFECA55DFFEAA051FFDDA1
    1446       64FFCDC6C0FFDCDFE2FFDDDDDEFFD9D9D9FF959595FB52525276000000190000
    1447       00030000000000000000000000000000000000000000DFDFDF39CFCFCFF9F9F9
    1448       F9FFFAFBFBFFE1E5E7FFCCB196FFFDC085FFFAC38AFFFAC189FFF7BE84FFF1B8
    1449       7BFFEAAF72FFE4A869FFE2A464FFE4A361FFE8A55FFFEBA65EFFEAA25BFFE89E
    1450       52FFE59848FFD0BAA5FFD6DADDFFDADADAFFCFCFCFFF858585F12A2A2A5C0000
    1451       001300000001000000000000000000000000BEBEBE06CACACAD4EDEDEDFFF9F9
    1452       FAFFE7EAEDFFCEB295FFFEC289FFFCC690FFF9C48EFFEBBF96FFECCBB3FFF2DA
    1453       CEFFF8E6E4FFFDEEF0FFFEEEF2FFF9E4E3FFEFCFC2FFE0AF86FFDE9951FFE8A0
    1454       56FFE69B4FFFE59440FFD2BCA7FFD4D7DAFFD6D6D6FFB6B6B6FF707070C50000
    1455       003A0000000A000000000000000000000000D4D4D468D7D7D7FFF9F9F9FFF4F5
    1456       F8FFC4B5A4FFFEC286FFFCC68FFFFFCA95FFE7B784FFF7E9EAFFFFF5F7FFFFF4
    1457       F5FFFFF5F6FFFFF3F3FFFFF1F1FFFFEEEFFFFFEDEEFFFFEDF1FFEFCFC6FFD692
    1458       4DFFE69B50FFE5974AFFE1913DFFD1CBC5FFD0D1D3FFD5D5D5FF8E8E8EFE3838
    1459       38820000002100000003000000007E7E7E02C7C7C7DBEEEEEEFFF5F6F7FFCACC
    1460       CDFFF3BB82FFFAC38AFFFCC692FFFFCD99FFE0B081FFF4E7E7FFFFFAFBFFFFFF
    1461       FFFFFFF9FBFFFCF3F5FFFFFBFEFFFFF2F4FFFFEDEDFFFFEAEAFFFFEAEDFFE3BB
    1462       A5FFDE9549FFE5974AFFE29241FFDD9D5DFFCFD4DAFFCECFCFFFB7B7B7FF6767
    1463       67C9000000470000000D00000000C1C1C13ECECECEFEF5F5F5FFEFF1F3FFCDB2
    1464       96FFFABD81FFF9C38AFFFBC690FFFFCC98FFE3B483FFF5EAECFFCCBDB1FFAD8E
    1465       71FFA97E55FFAB7E50FFA17B54FFDFCEC8FFFFF0F1FFFFEAEAFFFFE7E8FFFBE1
    1466       E3FFCA843DFFE4984BFFE19344FFE08A32FFD5C5B4FFC9CACCFFCCCCCCFF7D7D
    1467       7DFD131313780000001F00000001BCBCBC86DBDBDBFFF1F1F1FFD3D7DAFFEBB6
    1468       7DFFF7BC82FFF8C089FFFAC48DFFFDC893FFF4C18EFFCAA076FFDDAB7AFFF5BE
    1469       86FFF9C185FFF9BC80FFEDB072FFBB946EFFFFF5F7FFFFEAEAFFFFE6E7FFFFE9
    1470       EDFFBE7D39FFE5994AFFE19343FFDF8D38FFDCA66EFFC8CBCFFFC4C4C4FF9393
    1471       93FF3131319A0000003600000007B8B8B8BEE5E5E5FFEEEFF0FFC8C4BEFFF6B6
    1472       74FFF5BA7EFFF7BF84FFF9C18AFFFAC38CFFFBC58EFFFCC68DFFFCC28BFFF9C0
    1473       87FFF7BD82FFF5B97CFFF1B172FFCEA47FFFFFF2F5FFFFEAEAFFFFE9E9FFEED2
    1474       D0FFC9843DFFE59749FFE19242FFDF8E3CFFDE8C38FFCBD2D7FFBEBFBFFFA2A2
    1475       A2FF464646B50000005000000010B7B7B7E2E9E9E9FFECEEEFFFCBB9A5FFF5B4
    1476       72FFF4B77AFFF6BB7FFFF7BD83FFF8BF87FFF8C088FFF8BF88FFF7BE84FFF7BD
    1477       82FFF6BA7CFFF3B474FFD89D62FFF2DFD8FFFFEEEFFFFFE8E9FFFFEDF1FFC49E
    1478       82FFDA9246FFE49648FFE19141FFDE8D3AFFDD8429FFD1CDC7FFB8B8B9FFABAB
    1479       ABFF545454CC0000006700000018B6B6B6F3EAEAEAFFE7EAECFFCEB399FFF4B1
    1480       6EFFF2B477FFF4B77AFFF5B97DFFF6BB7FFFF6BB80FFF6BB80FFF6BB7EFFF2B5
    1481       79FFE1A669FFE0B690FFF8E8E6FFFFF0F2FFFFECEDFFFFF0F4FFD7B8ADFFBB7C
    1482       3BFFE5984AFFE29546FFE0903FFFDE8C38FFDD8328FFD4C5B7FFB4B4B5FFAEAE
    1483       AEFF555555DC000000760000001EB2B2B2F6E8E8E8FFE4E6E9FFCEB397FFF1AE
    1484       69FFF1B170FFF2B374FFF3B577FFF4B679FFF4B77BFFF5B879FFF3B577FFDDAE
    1485       80FFFFF4F8FFFFF3F6FFFFEEEFFFFFEFF1FFF8E3E3FFB79279FFB97A3BFFE59A
    1486       4EFFE49749FFE19242FFDF8E3CFFDD8A36FFDC8326FFD5C5B5FFAEAFB0FFAAAA
    1487       AAFF555555DF0000007F00000021AEAEAEE8E3E3E3FFE3E5E6FFCEB8A2FFEFAB
    1488       63FFEFAD6BFFF0AF6EFFF1B171FFF1B272FFF1B273FFF1B274FFF1B16FFFCCA1
    1489       78FFFFF1F4FFFFEAEAFFFFECEEFFCDB1A4FFA46E36FFD5924CFFE69D51FFE599
    1490       4CFFE29445FFE0903FFFDE8C3AFFDC8834FFDB7F23FFD0CAC3FFABABACFFA0A0
    1491       A0FF4D4D4DD20000008000000021A4A4A4CAD9D9D9FFE0E1E2FFCBC2B9FFEFA6
    1492       5BFFEDA965FFEEAB68FFEFAD6AFFEFAE6CFFEFAE6CFFEFAE6CFFEFAD69FFCB9D
    1493       75FFFFF0F4FFFFEAEBFFFFEDF0FFD4AD93FFE19950FFE99D52FFE59A4CFFE395
    1494       47FFE19242FFDF8E3CFFDD8A37FFDB8731FFDB832AFFC6CCD1FFA6A6A6FF9292
    1495       92FF3E3E3EBE0000007A0000001F9C9C9C9AC9C9C9FFDFDFDFFFCCD1D5FFE7A3
    1496       5DFFEBA55FFFECA762FFECA864FFEDA965FFEDAA65FFEDA965FFEDA964FFCC99
    1497       6AFFE1C7C3FFDCC1BBFFDEC4BFFFCEA17FFFE2994FFFE6994EFFE39648FFE193
    1498       43FFE08F3EFFDE8C39FFDC8833FFDA822BFFE3A261FFB1B5BAFFA2A2A2FF7C7C
    1499       7CFF282828A80000006C0000001A8787875BB4B4B4FFDCDCDDFFD5D8DCFFD5AF
    1500       87FFEBA056FFEAA35BFFEAA45DFFEBA55EFFEBA55FFFECA560FFECA55EFFD896
    1501       4FFFB77938FFB27432FFB37431FFCA853CFFE4984CFFE39648FFE29344FFE090
    1502       3FFFDE8D3AFFDD8935FFDB8630FFD97D1FFFE0C6ACFF9D9FA0FFA2A2A2FF6565
    1503       65FE0E0E0E9B00000058000000124E4E4E159D9D9DEED6D6D6FFD6D7D8FFCBC9
    1504       C8FFE89C4EFFE79F55FFE8A057FFE8A058FFE8A158FFE8A258FFE49C53FFE0AF
    1505       90FFF9D5D1FFF8D2CDFFF8D2CDFFF0C9BFFFD38A3CFFE29443FFE0903FFFDF8D
    1506       3BFFDD8A36FFDB8731FFDA8229FFDF9141FFBDC1C7FF9B9B9BFF919191FF4C4C
    1507       4CDC000000950000003D00000009000000048E8E8E90B6B6B6FFD5D5D5FFD0D3
    1508       D6FFD5B595FFE79748FFE69B50FFE69C51FFE69C51FFE79C51FFDE9649FFD5A9
    1509       90FFFFE0E3FFFFDBDBFFFFDCDDFFF4CECDFFC47C31FFE2903EFFDE8D3AFFDD8A
    1510       36FFDC8731FFDA842DFFD97B1DFFDECFBFFF96989BFF9B9B9BFF6A6A6AFF2222
    1511       22A60000007C00000024000000020000000158585826949494EDCCCCCCFFCFD0
    1512       D0FFCCCFD5FFDCA974FFE59544FFE4984AFFE4984BFFE4994CFFDD9345FFD1A0
    1513       86FFF1CCCDFFEFC8C7FFF0C8C9FFE7BEBAFFC77D2FFFDF8D39FFDD8935FFDB87
    1514       31FFDA842DFFD97A1CFFE7BF98FFA0A4A8FF959696FF888888FF464646DF0202
    1515       029D0000005300000012000000000000000000000007797979749E9E9EFFD0D0
    1516       D0FFC9CACAFFC9CDD2FFDCA973FFE3903BFFE29343FFE29344FFE29343FFC67F
    1517       36FFA86A28FFA76826FFA76724FFB47027FFD98735FFDD8835FFDB8630FFDA83
    1518       2BFFD97A1BFFE6BF97FFA7ACB2FF939494FF929292FF575757FD141414A20000
    1519       007C0000002A00000005000000000000000000000001000000137C7C7CACA3A3
    1520       A3FFC9C9C9FFC2C2C3FFC4C8CFFFD9B999FFE18E3AFFE18D39FFE08F3CFFE18F
    1521       3CFFE18E3BFFE08D3AFFDF8C37FFDF8935FFDC8731FFDA842CFFD97E21FFDE88
    1522       31FFE2CDB9FFA1A4A9FF919192FF929292FF616161FE2B2B2BAE000000930000
    1523       00470000000F0000000000000000000000000000000000000004141414247272
    1524       72BE9C9C9CFFC1C1C1FFBCBCBCFFB9BBBEFFCACAC8FFDFB388FFE09142FFDE86
    1525       2BFFDE862BFFDD852CFFDB8329FFDB8225FFDB7E1FFFE09345FFE5C09BFFC2C5
    1526       C9FF919396FF909090FF909090FF616161FF363636B90000009C0000005D0000
    1527       001B000000030000000000000000000000000000000000000000000000071010
    1528       102E6A6A6AB18C8C8CFFB3B3B3FFB6B6B6FFAFB0B0FFAFB1B4FFBFC4CBFFCDC6
    1529       BEFFD8BFA4FFDDBC99FFDDBC9BFFD8C1AAFFCBC7C3FFB3BAC0FF939799FF9090
    1530       91FF919191FF868686FF585858FE2F2F2FB10000009D00000065000000240000
    1531       0005000000000000000000000000000000000000000000000000000000000000
    1532       0008000000294F4F4F8B757575F0929292FFADADADFFACACACFFA6A6A6FFA2A3
    1533       A3FF9E9FA1FF9A9C9EFF989A9CFF959798FF949495FF929292FF929292FF8C8C
    1534       8CFF6B6B6BFF484848EA171717A3000000950000005F00000024000000070000
    1535       0000000000000000000000000000000000000000000000000000000000000000
    1536       000000000007000000211919195B4E4E4EAA6B6B6BF2818181FF8F8F8FFF9A9A
    1537       9AFFA0A0A0FF9E9E9EFF9B9B9BFF979797FF8C8C8CFF7A7A7AFF666666FF4D4D
    1538       4DED292929AD0303039E000000820000004D0000001C00000005000000000000
    1539       0000000000000000000000000000000000000000000000000000000000000000
    1540       0000000000000000000400000014000000340A0A0A652B2B2B93444444B65555
    1541       55DA5E5E5EF4606060FE5D5D5DFE535353F2474747D6333333B51717179F0101
    1542       019A000000850000005C0000002F000000120000000300000000000000000000
    1543       0000000000000000000000000000000000000000000000000000000000000000
    1544       000000000000000000000000000100000007000000170000002F0000004C0000
    1545       00680000007D0000008B00000090000000900000008A0000007C000000650000
    1546       00480000002B0000001500000007000000010000000000000000000000000000
    1547       0000000000000000000000000000000000000000000000000000000000000000
    1548       00000000000000000000000000000000000000000001000000050000000F0000
    1549       0019000000200000002500000027000000270000002400000020000000170000
    1550       000D000000040000000100000000000000000000000000000000000000000000
    1551       0000000000000000000000000000
     16      4C7A0C0000002000000020000000043200000000000078DAED9D075854D7D6F7
     17      4D794D724B6E729378DFFBBDB7E5D6B437B9DE241A63B931F6C418351A4D8CBD
     18      37EC0A5891DE3B08A282A2222A8220BD48EF60010B4A2FD2A41711E4FFADB599
     19      33198699012CE47ECFE73CCFFF19E7CC3EFBB7F6DA6BADBDCF9C615C9CA03568
     20      715F14AF3568B2EF8297269D9B3F6D92CF0F3A13CFCE739D74769EEFC433DFFB
     21      4EF09EEB3AFED41C9DF127BF9D36EEC4EC977EB8B876106B5E146BCDA0EF2349
     22      116B067DC70A5F3D686E5897E684AEEA137BB2DF8269C4F623760BB1416C10B7
     23      4BA7BFC784537331DE6B0EC69DFC16E38ECF6EF9DC7396DFE7C7BE99D61B7B4E
     24      8866FEE4F30B874DF65B184B7C4CF29D8F49E77EC00FC11BB02E720FB6C51841
     25      27DE9C6486ADD1065813B60BDF9D5F0B6283D8187B7426C67ACC88FDECC8F461
     26      EAD8DF6AE04FF15FA44D7C307B76E01A6C8E318055E611D85F3E0A9B4BEEB0C8
     27      3C08938C0342E6F46F3E6647EF59651CC686F0BD98EEBD089FB94FC76787BFC6
     28      BF0F4DD356C59E1DBCB2273760D14BC4F692D86BA2F6C0E18A276C2F7BC0EAD2
     29      2198124F3FDD1E7B522DA1936C2AB43BC512FA697630493F00CBCC43B0BDE401
     30      87CB9E5811B89DD9F8B7DB57187370AAD768D72F5F52642BF3A7042C7E8ED87E
     31      CC9EE6BF147B926CBAC6445CE30C27EC4DB3C28E64236C4ADC8B75F13BB13A5E
     32      1BABE276606DBC2E36C4EFC5B64443618B519A93B083CFDD19638EF14766628C
     33      EB9718EDF285DF28E729CF49EC59412B957D6ECCECE9012B61967E508CD92CD3
     34      05FBD2ACB13DD910EB13766165FC762C8DDD8CC5311BB1305AAB4B17376071F4
     35      462C8BDE8A35B1BAD892A08F3DC956E40F17312FA6292E98786416461F988251
     36      4E938D25F6ACC0158AEC5153D8E724FD1407C136C970C6AE54736C4CDA2BE36E
     37      C2C2182D2C885E0FCA2F21CA31D21ACC8BA4D791EBB0206A03965EDC82DDC9E6
     38      346F1EC2176CC3BE386BD0D831CA7132463A4C1AC5EC6F647C62B3DF3399BD3E
     39      7A9FF09B298D9BD95A89BBB13C6E0B16C56E10DCF9D1EB7AB029C74039068A73
     40      7C1FBE06EB6277A1B2B51A2DEDAD70BA7A0CC6690728268E62C5F9ADCCC648FB
     41      89999FDA4D78EE9B0B72FE2C667F17AC25E2C692E69B7DBE81C6BD4CB0B504B7
     42      3736E518D6C4E8E04E7325A4C7BD8E36B8669D8445861BE58E27BEF6980762E3
     43      53DBF1B36606ACE8AA6BE7174670AC6F8D35167E37A258DB966C403EDFD62FF6
     44      AAE81D286D2E87F2E3FE83761CBBE12BE6412B6817B331C2665CC4CC80E5CCFE
     45      35D5980EAA6FC2EF3CF63D6996146B3BB184E6BB2F3ED7C4EEE2DF87CBD51330
     46      4F77835DE651666384F5E71D9F587DFE06F1E7F0D817866E117CAE271CEB3C76
     47      8EB5BEB057446F437153994A765BC77D9A7F7B6C8CD90FC35427511BE6782E01
     48      B1F189E558669B736DDD14A30FEB4B47B09FEAC846CA6F69EC7D61173596AA65
     49      EBA7D8E0BB90755815A98B3D89D6B0A4FAB8C67F07B331DC72AC39F1CFB2EF75
     50      132CA88EBA6277AA85A8279CDFCC3D92E305C34BB66AD9050DC52AD9ED34E706
     51      A9B69815B8127382D66049D836EC88338109E5C2D6B0FD186135966CF8ECEC14
     52      DF05A193CFCDC7CE44AA5BE94ED04E3616358DEBCAF9C290AE71D0FCE9A55B76
     53      632FBBB85523DB2CDD1994DFA01CC3EC0BAB697E376153B43EF627DB63478421
     54      CF3FDB1039E5DCFCB0C9B4A6EEA4F14BFCB5713A882D4FEAD667737B0BD50333
     55      C15E12B51979F5852AD90F3A1F50AE1D90B329C788BF0A0B427EE46F67BE18FF
     56      D8485A53CFF29ACEEBA8594697FFB36B6EAAECBBF17E13F4680DB85D9FAF966D
     57      4573A8C8FE26A06BFC4B42B7617BAC098C53C9FFA17A186EFE6FD298B3B49730
     58      E77DC4C68BFB65F1670BBF8210F4F7C16CBBCB87BBB129BF31D37F05E604AEC5
     59      8A701DEC96C5DF6ABF6D18663A86C5EC39134E7F8785419B44FE19D3BC6D4D34
     60      E8B70D0E97DD7BB067F82FA7F1AFC4BCA00DD0BAB80F06298EA20ECF725F8861
     61      26A3F1B1F1A8EF89FD06EDDF3AC6D31ECA8EDEE37593D7505EC7CEE507F789ED
     62      44EB8C2A368FFD5BF2FDD2B0EDD08E3393D79F61A6C43619D5F1B1F1C837789F
     63      48EC08DEBF6D8CD413F5C130CD51ACA1BC8E9DCF0FD5C876CD3AAE96FD8DFF4A
     64      FC40635F1FB58FE2CE013699EE58E3B79DD93CF688AF7C968A7D2AB1A7F1DE71
     65      A6CFD2AEF5877CC0EBF7DA985D5818B911170AC355B20F5F3BA596CD9A1BB80E
     66      CBC374A01B6F21C6CEEBCF24C7E9CCC6C74623A77DE5B344BE47A67D73ECE7C7
     67      676175888E9807DE4BE9249A6275B42E16866F4448D1C56EECA3D7CF681CF777
     68      C45E1ABA035B638C6194E22CFCBAC47BBDC48E65F654C1EFDA238F3B3E6BC4E7
     69      9EB46F3D3613BBE32CC55AC57B07ED0453AC89DE8545E19B11559220D8A772CE
     70      8BBAA69863CC9D15B04ACC37FB7C058D7B1BB10D921D614D7ED78D3096D8F8C8
     71      68E408664F3DBBA4DBFE9CF6CD3B79DF3CE1D8B7304DEDDA3B71BDDC9564898D
     72      B17A5811A92D72EC7BAAE75C5339AFB9B6F0F35CCA31E672ACF17CB3CF79DC3C
     73      E7C689CE1865398EF82399BF53620BBED2B501EDD98FD39E1D138ECE167B47CE
     74      17DE3B18D09E4C37C15CAC63ABA3766269F8762C0ADD8C85219B456D5F19417B
     75      D08B7A22CE39D678BED9E73A114632B618BB97229BA57C6D407BF69768CFEEC5
     76      FBE631B46F5E1EB055C424FBC29CEC30A235742FED8BB5E34DB125C65068479C
     77      A958DB0C539C0497C7CCB1B6D87B9D94E782FD91E1A72F29B2055FCD7509EDD9
     78      B569CF0EDAB363DAB179D00ADE05EBF4C32236F93AC434CD55D41396699A8BB8
     79      EE10EF519B75E7B531D979A6225B5B79DC92D45D97B068CF3E8CF6EC0962DFEA
     80      44FB56C749987D6231569DDF8E0DC1BBB13DD250AC25BCA75AE9BB1533DD7FC0
     81      70B37F77D5D62E7602CDF930756C89AF8A2DEDCF798F4CEC19C40E18E930B1ED
     82      537BB17794695CD75E8AF632C32D3E136BCA30B3316D54DF02A8C6CC90724C1D
     83      9BD51B9BF7C8BC4FE5BDE2A7F6137F417BD719236CC7EB7D6A33FEE008EB7181
     84      C40EA475F420B1F5883D83D8BFE0BAD617368BD259A3EEDFBF8F915F24E0AD4F
     85      A2FBA4F7C7C48A673E87CFEDADFFBEB09D0EE52122B606C7CE5408B9B817C0F2
     86      406937ED33CF15D231CC17CF6BB46F62E494A887B6416233CB2FE42EFE32B6B4
     87      CF7A6752A9B063C9861B183DF562BF6D5064F3B8B93FA9DFFE887DD05F1B947D
     88      FEC11765A22F7EEE8FA473D886EF5765F7C906896DE1785BF8FC61D9CA621BBE
     89      5D7A55A30D8A6C8E3145363F0F9B512EA4C91E4DED781ED4D920B1F79BDD94B3
     90      250DFDA24A3CD735740AF16B96C491241D97DA49E7F27BFC6F7EE679983237B9
     91      9B0D129B7386E34DB1BD644379F503B9BDFC6FE9B8C4EE6B3B16FB60D2AC24B9
     92      0DB5B5B5A25E9CF1FFD177236755CBC7D4D0F4A0C77C497D4B6356664BE27325
     93      1F709F92D806AE53CCAEA8A890F3B9AD623B7E1D9BDAA1325E9827F155B1597C
     94      AE729F8A7C664B7C9EF7D1B39A7BB4D5644341E903B0FAC366710C28F379EEF9
     95      BDF13FD476536F36F4C656D59F2A3ED71B55EDFB6B8326366BC2FC3A117FCA7C
     96      CE7B3E87DF9FB8A0BBF89864436094FA1AC6EF496C75FD68E24F5978AFC7398A
     97      7C96BAF996E2416AA78A2F89734F99CFB587F95F2D6DEA266ECFC7B93F7571AE
     98      9C17DC561A8B727F2C5E97FBCAEF0F5B950D2AF954EF94F9DA7A577BB4E33EF8
     99      591D9BE75B5D3CF03992FF14FB9CB5AA0D1F8EEDE9FF8D3BAFC8DF674963D754
     100      5BB85EB0D4E5C58DDB0F441F529F92D4F195DBF1B969977BF299A7E85BFEB72A
     101      1BF85C45FEDC755D62B6229FE7836B22AF91FCBED456B241B16F5EDB24B6D49F
     102      E4377E4FD946452E6BD8A454C1E6186436AF01090909E235D725B661FEA67679
     103      7B453FF07AA23C16C5762C6EA3386E7E4FEA4F6273FE3193D9BC0696959575B3
     104      81D7693E47D90E699C529F8AEAAD8D329B998A7B00451BB83EF17C28331E569A
     105      D88A7B2055362CDAD281A5DB3BC5737F249DD317B63A1B841DDF5E127D3D8CFA
     106      C3566B03E506DBB07A17FAA58761ABB281CF671B14C5F54359524E2BEA61D82A
     107      FD20ABD7FD11FBEE61D9AA6C080F0FEF971E95AD6883B44FED8FA4DAF228ECA7
     108      52AFCECE4EB0D8C7ADADAD0FA547E55B5858404747A787F6EDDBD74D4646463D
     109      C4C7FB334E498A71B965CB162145B674AC2F8A8D8D456FECCCCC3BB870E196F0
     110      334BB281FDB77EFD7AC194C6C352F685C4E2B692AD6E6E6EE2D9CBCBAB577E5C
     111      DC2D3C3FD842D8505F5F2FE68D8FABE32BDBA0C8767070104C7F7F7FB91D7DE5
     112      B3DCDD2350595929D8CDCDCDDDF8CA36306FF9F2E5A20DC789C4659F737DE2F7
     113      FBC31F31261D8306E9C96D605FAC5CB9B21B9FC5AF172D5A24D8FC5AE2323331
     114      3111E9E9E93DF88AF125CDB32489BF783DBAD950545424E7F3F8243E1FE33173
     115      DF1297C7CC5C498A7C698C464617556AF3E640C19FB31CF87AFE03BC3334416E
     116      038F917DADCCE7BE99CDE395C6AC28B647B291F95BB60409C6EFFF741AAFBC7E
     117      44A598CD9A38EBBEDC86B1637F90F325B14D125F997BE3C60D21457E571E0709
     118      B69636849F25F198A5713397F5D9D7ED425D36ECC4AA557A22AE35F1252E2B2F
     119      2F4FF844155F1557157BF8E436A15F0E0990DB20F139F6B86F89AFC856E4F33C
     120      319F734991AF892D713FF8AC55E8AD913FDA6064E4D283AFCC6571DCAAE3F765
     121      CC8AEC3FFCB34AC4C19831FBE573C07CEE5BE22B72599CBBCCE77952E42BC798
     122      325B91ABCC7671B1177C96225F912BB1593C2F8A7CCE31E68F9E5C2234747481
     123      5CFFF8284F48157BC8900522FE25B63ABEC495EA16F3B99D62FC717F3C8FAAA5
     124      A772DC53A74E157CEE47E2CF9F3F5F8C8DF9CA6C89CFFE57E44B36F1395C2F15
     125      C571C5BCBF7CF240CE7EFFFD3D82D51B5F992BAD5FCCE77652FDE163FC1EB763
     126      9BA598619D3B172FE7738D62B6545B95F9FCCCFDF2D824BEC4E5F58AC5E355E6
     127      2BEFA3A4B62CAECDCC97D8CC91627BF6ECD9A2E6723F9254F1B91FEE57DA0FB3
     128      AF257E5FD63F8E810F3E30968F5B9A571E3F8BED90347EFC78395FF2B7E2BE85
     129      CFE579E5B67DE57FF0818D7C2DE3F3A531F13169CD95F6396C0F8F4DE24B5CB6
     130      576A2FD9DA97FD8F1413EC33C99FD2DACCFFE679E0F7784E795DE1B1339FFB96
     131      E28AEDE6DAC44CB68FEDE579E4E3BDF199A3180F922F15DF936297C5B92F8D9F
     132      FB977282E7455AF3D936B6B72FD747CAFB5FC53DB0F2BE45DA93314F91CBF928
     133      EDFD982BC5CFE3BE2691F6A4CC644976F098796E389F992BF9F171F3B94FE64B
     134      B59DC7CB732071A5D851F6E3E3E44BB1CAE3E5D894B8D2BEFD497015E3817DAB
     135      58730782AB9C2F8A1A08EE53F594CEF42A986D6B8683453B7E4AB6CB0108FD94
     136      6C27DB07B0356CC34FC9E6E37A4BEB9E980D7F3A7817B3439A34B2B74DAAC0F5
     137      84163C29B6F1F576B895A8672FFE5D2EB2A29AF024D90E249D42A864CF1A943D
     138      20EC79849910DFF193B2DFF36BC5EB6EF53F29FB7953BA5ED87DE729FB29FB29
     139      FBFF31F6FAF0261CB8D531E0EC82DA0ECCB22B45C48DFB482AB887536503C766
     140      1DCB68C68E53D5827DADBC1351259D03C666EDF2AFC1C1E846C166B11D9B92EF
     141      0F089BB5CCAD5CF85E62B32DD31DCAC031F1A4D9D5CD0FA0E75B23B86C03FF9B
     142      6381C5363C49764B4B0BACBC63C478BD525AC07E90B8ABBDEF0A9B9EE4DE91AF
     143      15C7CEDF81EFF6F8082E333916076ADF1C1A1A2AF85FADDE8B8B8969037ECDC0
     144      FCCCCC4CF03C3CBD7E7BAAA77AAAA77AAAFF1FB4755506B496C40EA89829F1F9
     145      B5EEBA6298EE2983ADD19D2726EEDF48B74CB09829F197CE09C6EE0D55D0DB5A
     146      0D4BBD1AD81BD73E1171DFDAAB2B8598A9C8E7635B96550A3B9E9498B1724EB9
     147      4A3EB397CCB823DE7F92FAE18B32C152E4CF9F710EEBE61763FA98BC27AE29C3
     148      6F0B163325FEAC2FDCB16CF6350CFB4BEA808859CC94F85F7E6E874533D3F0CE
     149      7F870E8898C54C893F6EA401F9231AFF18727A40C42C664AFC511FEDC0BCAF83
     150      0654CC94F8134799E3A3F7D60CA898F974ED79AAA77AAAA7FACFD7A019CFA3AF
     151      BA75EB161A1B1BF1B8F9DB2FEDED55DC8EBFF3C2363C09FEC15BEE4236D71D85
     152      2CAED909195C3593F3376EDC283E4B7B527C453673597B2E1B0C085F79CC127B
     153      A0F8AAD83A997B8506822F7115D95BD3770A0D145FF2B7C4DE90B65D6820F88A
     154      FE96D86B52360B0D045FD1DF127B45D27AA187E1F7A7AE71FF8AFE56647F1FB7
     155      44CEEF4F9DEC6B5D93A4E86F893D36EC0BFCCDEF9FFDEA47AA93CA79AD29BE95
     156      C72C715F3AF946EF3AFEBAD08B477EDD6D9E14F35AB99E28C7B7C4FE227266BF
     157      B9125B1D5F553D518EEFE9D1DFE15F1746F58DAB62DCACC1CEAFA8E56BF277BF
     158      7CAD813DD8E1572AF9EAFCCD71DDEF312BB15F707945CE1E6CF7B24ABE3A7FF7
     159      7BCCAAD8CC95B1D58D5FD9DFFD8A3135B126673357C65637FF7D95267E7FF35F
     160      E2F7A7FE691A7B7FEB1FF3B906721DE27F6B9246BECCE7129FBF63BE6CD9B25E
     161      FB642EEF53D9065E2F3449255F69BE253EB34F9F3EDD6B9FFDD9A3F6E0AB88B5
     162      81587F35C5F940F395736C40F81AF27BA0F8EA6ACB40F2453D57600F54FCF5B5
     163      AE3D097E7FEADAE3E6F7B54E4A75AD3FB525BCA411AF1CCF817646CD80FFBD00
     164      F3B64696E035D73C3CEF9137E036306B5D7A2D0605B7E3D923E5C2068BECBA01
     165      B341E23F1BDE8E6702EEE1E7B6B7840D1EB71B06EC6F4624FEA0338DC206692E
     166      028A9B9EB80D8A7C498A36706C3EE9BFD9918F3FB84BCCE758E0B9E0BCB872B7
     167      1503117F92E4B6D07C483614D53D191B54F1BBD922F3C35B670A51DDFCF8FF86
     168      43E2B3CF95D9E218F940B261B877211AEF3DDEBFA711FCF84AC1D224C98689BE
     169      C58FD506757CF6C9C7A135F2D7830E960BB10D73824B1F5B4EA8E2B3CF538AAA
     170      C57CB30D525D1073615F80172D2E8B731E870D8A7CEE5F12F3F93D8EFB377DCB
     171      7F7CCF937C627143D8B02FA5EA916D90F88A6C892FB5E1FC97DB40FC4127EBC4
     172      3CB00D8E571F6DBD52C57FE94479373EB7611BF8B8BC1DD920F9E164CEC3AF57
     173      7DE14BEDB816CB6D203F702C3C63744DD8F0B0755A2DBFA00AAADAF258850D34
     174      7E16E7A56403FBA8BF3608FEC53BF2FE58AAC6AFD89EE79CB9527B9E07B6E14F
     175      8E57FBBD56F4972F9DC3B12F6CF094D942B5E1D9BDA9C286FEAC15723EC7B54C
     176      DC9F26BEE279920D523CB00DEFBB5CEFF35AA196AF62FE559DCBB550B241CC03
     177      896DF8D4E3469FEAF4A3F059CCE03581CF9124D930E5D4AD5EE351D98F521F7D
     178      E54B36F0DA28FA70AB90CF036B9E5F9E461BBAF1E95CA183FDE377FDED401BDE
     179      F3C8ED3ADFB94C3C734EB00DBCBF576783E08797FCC896F123726BFB5D4B38EE
     180      79DF28AD95524E3CBB2316A629D52A6D90F30F761FFFB4F35DEBBCAABFFFD724
     181      E688F1339BEBA32C16D806D78C9E6B6637BE92782CECD3FE889982AF28A732B9
     182      0DBED7AA7AFC8601CF8F6473B7E7C7212705BECC069E5B451BD8269576ABE9AB
     183      573976D733F6255DE2B920FECB7A29DD6A24DBC2B92A6C50717E8F7E1E459C13
     184      64834E58219473988F71FDE6BDC593108F9FC7CEF5B9BFF9FD53E8C183079034
     185      90ED947F474153ED7A9CED947FF3A42F7D3EAE76E2B7754BE93A332B41AEAADB
     186      E96AF5B0ED98A1CECE8B4EEB707AF3A742BE5B47C04F85F8B8D4E661DAC539AD
     187      51FBDBAF12FF49B1D5F1391E25FE93642BF2D9DF521E487C7EEF49B225BE1493
     188      8A7C3E9674783BEEB734F650FDDD4AA14BE79D450CA96AC3CA4B0D136DB8ADBA
     189      368221CB43E53AC0EFA9FA3D97A6A626F17C23C44D65FC4AED38C699AF2917A3
     190      5DB6A8FDFD1D45BE329B5FABE22BB6633EB7D1F4DB34CC575707120E6809FFB0
     191      B89D24E95884C9B762FEA4D7CAED62EC578A368AEF2BB793E65F958DDC4ED5B8
     192      E57FA3A9307E55ED383694C7AFDC4E798E95F9EAD88A7C75362AF355B553C797
     193      EA1FC730EBCED5E81E4A3BB61B596147E56D94DB319BDB48AF55B553C7E798E0
     194      F9B919E783A2D40095E27339BEB98DAA7659010EA20DFF5B6AA3DC4E155FAA3F
     195      CCD7943BCC2EBB7559E5DC28FA5FD31C4A7C55F54FD3DC705F125F9D8DCCE736
     196      EAD88A31AEAAFEF1FCA77BE9F750FCD17D42C1663F081B55B561F1F9DC86DB6A
     197      6AA3A9FEA9ABBD2C9E5F75F597DF97EAAFBADACBFA4FAE7F8AB1A12A8694F9CA
     198      ED54D51FE5769A625CAABFAA6AAFAAFAABDC4E5DFD556CC78CFFD4FAC7F669CA
     199      1D89AFCE4645BE3A1B35D53FA9FEAAAABDAAEAAFF2FB8AF5575D8DD654FFC43E
     200      594DEDD55453FBD38E7DA4AEFE69AABD9AE2E261DAA9AA7F03793DA4AAFE0DF4
     201      75E07FC2F5AFD2E3197717EBE1278ED81B9EF270BA72CAC3B1C8FBA813FA226E
     202      CBE7F0B9DC07F735A8EF8FE74E1E7130F53EE684209F63488AA218BE9C80DCEC
     203      14D457E4A3AE3C4FA3B80DB7E573F85CEE836DE23EB9EF5ED8CF9F386C7FFEC2
     204      590FE465A7A2A2F03AEEE467A32C2F0BA5B957854A6E5FD128A91D9FC3E7721F
     205      453997C07D72DFCCD0C0FFE529B2B5E05A3A294DD8909B95F248E23EF2A92FEE
     206      93FB668606FE1B3467A82ECD45765A8CD0B5F4585CCF60C5F553B1E25CA91FEE
     207      93FB668606FE10F211D0D18CCAE25BB89A7C11E9B121C8880F258521338115DE
     208      8BC2445B3E87CFE53EB82FEEF3B427FF7EF2A0211AF96463665214EE355503F7
     209      9B70AFA10A15453928CEB98AEB9909C84A8DD1286EC36DF91C3E97FB68AA2B17
     210      7DCAC6AF917FD2DD1E89918148A0D8BD42FD15DDBA8ABACA2234D6DCC183FB8D
     211      78D0D68007F71AD071AFBE9BF89878AFAD51B4ADA5738A6E5FC5D5B458244605
     212      522E0481FBEE7DFCB46FBF188CE49860A4C592DF132270856CCF4E8DC5CD8C04
     213      DCBE9242B19481E29B57509E7B0D9579D7514AE32DBC9E49F196869CCC445C4B
     214      8B137ECF4C8C447A5C1852624290121D02EEBB37FE719AFF646A9B4273971E1F
     215      8E4BC4167E25F6ADCBC914CFE928BA7109A5B7B25041ECCAFC1B28BB9D4DF65C
     216      A638CF10F6DD201BB269DC97C906B63F95C6C1EA83FF5FB735DF171CE8E389D4
     217      B8AEB1731F9AF855BDF0850F681C5141676167B12F80191AF8AFD859ECBF1070
     218      E618D58BA3E487605C4DE51C8CC3CD4B49C8BDCAB99C2958CCE4B15717DCC41D
     219      9A87929C2B28B87EA96B0E2EA790BDF134F731747E341222FCA1BB7337F6EEE3
     220      DF351FF46B4DFCA3AED6A8AF2A41D0B91338EE668BD3470F20ECFC29C487FAE1
     221      B288831831D7E534F6EAC21CD414DD4205FB20379B6A6E2AAEA42752ACC7D178
     222      7D11EC731CFEA78E405B7727E2622E22E0FC39ECD8B1836D18ACCEFFEEAE5664
     223      732C5AEA2B515B518C1CF2774A4C28C2FD4F23E0B40702BC3D1048FE09F63981
     224      50DF1308F3F54208FD3BD8C70BC1D4BFFF8EF78432D29251927F13DA3A3B1113
     225      1D8573674FC3E3B01BF1B599FFAABAF873A7F1275D0C42E2C5406491DF4BC8B7
     226      0D774B853D5C43D0DE24D4C9B92813DAC56F43C16FDBBB404D1A50998800EDF7
     227      B165A73EA2A36304FBC841576CD9B28DD9C335F3ADC4BC8BFCA3DC11F9477194
     228      4D397593E2EA36C54021C55909E55F05E71FFB3E2F07A5850538B7FD7DE09A0B
     229      70C91EED39FE08D21D0A6F1F7FB81D7483D6C62DF07217F9F7670DFE1F42EB75
     230      57BEF629FF28FE8A7251515C8CB39BDF06AA93707AEB50E08A13906681962C9A
     231      935D1F62D5066D8AC5381C73B353CCBFC1262626303333538C87D7CD8D760507
     232      9DA3FC8BEF3DFF2A697EEF9616E3DC1662178702E9D640452ABCD9864C1B3C48
     233      324243DA21B2E123448685C0DC786FA02CFF061B1A192121369A62D2578A09B6
     234      E1154BE3DD172E9CF1D4907F19F2FCAB2AC841ED9D32F8B2DF6FFBA023C9181D
     235      C92640E9459CDEF6213A53CDD11EBF0F55B13608DAF5314C4CF4CFF2FA676868
     236      24F2C1D7E7348E524C6A6BCB63F295838EE668A82E41B086FC2BA53581F3EF6E
     237      712EAD0DE5F0DDF14F745E3B8A7B717A688DDB8FB6F8FD40FE059CD9FE31DA93
     238      0CD17A5107B5719608DD3B1C7B8DAC111B1B87733E67E07EE820B66FDFAE1893
     239      AFBB3A9A89354373FE1D15F917E6E785C8C000F869FF0B1D994E6889DE8DE6E8
     240      3DA4DD688DD98D07374EE1CC8EE1688BDD83A688CDB87D6E2B42C886D3BE8138
     241      7CE830B66D17E31E4DFA9DCCFF435C1D4DFB9C7F9DB2BCF3DD3114F7934CD014
     242      A98346053547E9A0FDB21BCEEA8C201F68A331743DAE1C9E931FA6F729D66FDB
     243      A7CC16F1EFEA60D6F7FCCBBB891A9A7F1E7F4BCC4ED4876F415D587735D0B1D6
     244      542B9CD51D297C501BB812992E5F1586198C55958B435CEC4DFB9C7F9554FB6B
     245      EF94C25FFB9F6809D7425DC806D40469F5505DB0169A63F7C167E718348468A1
     246      DA7F112E394D2809319C801E7C07F27F74907CFDD3C4E7FADF585E0C0B5B2704
     247      E87E8886A015A8095C85EA809EE2E3F5619BE1BBFB3354FBCD478DDF3C041B4E
     248      54AEC56F9818EC8C763F682B6CB892122DF28FD732E5FCE335AFAE2417161666
     249      282E29C3A5AC5C5CD0FD08B51796A0CA7F292ACFF75475C072D407AFC285FDE3
     250      116C3041552DE6BDF1FBDA5BD67A39DB1AC383ECF0A3788F0F0F10FB87621EF7
     251      6DAE3BD751537C1BAD95C5B0B234C7B5AC2C44C7C4C1F74218C5F708D4FACF47
     252      F5F9853D5413B00881C426C66419FB774AFEE76B83D748EF92C64C9AF0D9FA2D
     253      1B579D3437DE9D6F65BAAFD2C1DA10F65606B0B3D2879DA53EFD5B1FD6347E33
     254      634304511E9E387E023B761920CCE03304E98F47A0FE846E928D79B42CEE5E55
     255      B30EF035D2CF6575FA4FA4FF95D93A863496344EA6C9D616E6B89E9D0563A3FD
     256      30D0DF8BBDBB774B631BA746AAC6ACEEC1D78CFF25B3E55559DD1EA2A0BF9DF6
     257      3A996064A0A7C81C2E1BDB10357AB58FECBE3C7E299BA78F14988FB3FFDE1ECF
     258      CB6CF8D50032FFBF7DECDBB7EF234343C303C6C6A609464646AEF47AFC40B1F5
     259      F4F4D61B1B1BA3A4B414159595B89D9B0B5757D7167D7D439B7E7EB6221EC666
     260      C693F7D9ED7BB9AFED77EDDAF5B68181416351717167635333AA6B6AD1D8D404
     261      4F4FCF16030343E7FED8606269B6D6D0CC04A65616974C4D4D357D163168FDFA
     262      F52F28F8FF2DF2FFDDFCFC82CEFA86465456DF05DB226C303232EF0BDBD0C264
     263      8AA9B565734A46068E9E3CD14A366450BFBF50E3F3397BF7EEC5EEDDBBFFADE0
     264      877FD03C5477B7A149CC85623B550F7D73F33779DCA999B47E959521272F0F1E
     265      278EB71A999B567A7B7BF7F85C8AF6C6B53939B7403E6A261BC728F8E1EFFBF7
     266      EFC7DDBB35825F555D83A2A262905D6734F18DCC4CB61F3B79B2A5B9A505F50D
     267      0D282C29C19163479B8D2DCCCAA9CF6715DBEEDCB9F38F5E5EA75A5AEFDD4379
     268      7905EFD19B687CA3E57D99988416141412BF0665E595A8A9AD25BEC935B5F166
     269      693C94382D61D11705B7ACBC1C0EAE079A4C2D2DBC89DDA37611FF7F3C3C3C5A
     270      1B1A9B505BDF803B648329D9406DB548EBC8271DF574BCB2EAAEF0415E7E3EFF
     271      5F467E2AE7DCCCEC9F269616752191919D49E9E9C47569229F779A589AF38F4E
     272      A98D5BF2E79DAAEA6A1A5B9DB0A1A2A212A7CF9C69F4F5F36BAAACAAA2E3F528
     273      BD538196D656040605B553BC1C56CD36AF0B8E8C106C733B9B669A0763B2FF77
     274      7DA837B36C6C6C5A6AEBEABB6CA067F607EB2EBD6636AB8AE2A08EEC7376766E
     275      D1D3D75FAB103F1F985874671B5B596CEA4F9DA038DB6863632BB74162F29C73
     276      0D5065039DB34EB02DCD6B03434305DBD2D6BAA9BF6C451BACADAD5BD8E79C6B
     277      9C7775644F23C7063D17159722392911B95413D9062767E7564363E316F71327
     278      3A2F8485C1DCD6BA996CD9FC88B5FF0B8AAF4A8AC9C6639E9EF5141BED548B50
     279      595925EA717C5C2CE228B6E5363839C1D2DE1E2656E6CD468FC856CE4BAA416F
     280      923DCF9326535E36B35FCA299F241BF272F3840D8E8E8E303034F079C26BE264
     281      7373739A9B6AD5363839713C683D4EA6F7EC41CF194DF9C33B8693FF30CE68C6
     282      FFBC4631BF926CE854B4213E261AF979F9921F1E9B0DA6D3FE38D371E1F0DA73
     283      FA4BEACF1BAF6A745AFBE57D2313C3FB16F6769D6403BA6CA840526222921312
     284      C035B2CB8647F783D1176FCE77D79ADA7A33C20339FED6C8F6D6C731170B583B
     285      39C2E9C811189A1ADF231BDA840D54AB52535391462AA4B5E151E7C2E8CBBF2C
     286      3CBA695AEBED484F5C3F678AF4835A48B05E043FC3C530B53085B1B9098CB72D
     287      F7E778B0B0B068A9221B2A2837BAFEB6FD128A2947251BF4F5F537F48B3DF5CF
     288      8B3D889D1B7D02D77DCDBBD8568BE87AF32B84EE9880B35B2621C47127AC66BE
     289      73498AC91F6DA8C695AB594225A577840D0E140F7DB5C1E8CB37971EDBF2756B
     290      6ECC29DCF0B340BA9B16622D17E0C8DAB108DB370B01EB46E0ECC277106BB516
     291      8EF33E2E52CC0BC9065EA3B2AFDF4456F675B90D1493CD5CD734C6DA943F7D72
     292      64DD94D63C66FB327B03E2887D78EDE708D3FB16411BFF2DD87ECBFF855887AD
     293      B09EF576A0726EAAB281D74BE1070791176A6DB09BFBBF7E97CED923CB7BBF60
     294      C75A2CA4718FEB626FFE0C3E8BDE85EFB2A188B7DF44C727B79A7CF1E61855F5
     295      41D840EB6815710B8A4ABAD60BDA37F0FA6D6767DFBC67CF9E49AAF8CE8B4716
     296      5C0F7044C6A18DE4DF2E76F87E626FEACE3EBAE1AB16D32FFFBC51538D926CE0
     297      352C213199F712624DCFBA768DF70D27559D673BE7832B59FECE48B25B06AFCD
     298      937AB2ED36C163FD541AF79F7B8BA567747474A64A36707E5ECDBE86E6E616F0
     299      1E8BF60DAB559CF30BDD097F320A305D7DEFD2D1DD08DB351517368E81CFE2F7
     300      C47C273890CFB5BEBCA733EEF7BAB26B64558F1764D787FC79C27F2F5DBA743E
     301      D9D0CAEB45537333CEFAF8DC2376F0CB2FBFCCF7035E223D2B135F67FFFD172F
     302      3E3FC6E8AB7F9484D96CEA4871DE82901D5310B26D12B1B7E0C8FA296DCB86FD
     303      B71DB51B4AFAA38A7B8A8365C7DE905DEFFF85F4CEAC59B3D650CCD591DA7475
     304      75CFBEF8E28B6FD2F1DFF0E79EA41765D711824FFAE40FBF1AFCADCEE77F4877
     305      59F179BBCF9E05F74EE97E7FCF61FE27AD7386BE612FBBDE97F83F57F119C6CF
     306      64FD0E91D9C0ACBFCAC4D7EB7F60BFC8EE87FC42C98F7CEEFF91D9F1CF8F7EFF
     307      CBAFBF1BFA86F6176FFF7AD91BBF7C7E141D7B4FD6DF6BBDDCCF7D56E68B9F2B
     308      5CABB35E96315FECC33D69E9B310697E9ED843C577009EF463B0EB0147787B9D
     309      F0643F0C107FB093BD2D2445848688679E9FC7C41F1CEBF003D4C9C1D61A3937
     310      AE233D3505B656164274CE871C178F813F38CC7812501AA7566C03B3A322C271
     311      DED70716A6C6F2CFA11F812FB8ACCEA2683C48B3D1286EC7ECE347DD616CB05F
     312      7E4FE821F982DD72F5746143E6F162FE77477E18DA124D358ADBEDDFBBBBDB67
     313      C00FC97F55F83CD3099D190E684B30117DDFBF790E2DB17A6AC5EF733BC57B00
     314      0FCBE731705F0FD26CD19E628996987DA2EFD6ABC7D018A5AB52FC9E8C3FE411
     315      F37FB0ACBE8E16E34E32231F188BFB2FFCBA29CD0975A19B7B888F3F267E0F1B
     316      5AE30C848FEB42B708467DBC29EE06AEED263EF618F8838F1E3D0A96ACC6CB6D
     317      E0FB608D513B058B5FDF8DD045A5DF52B9F8F523F2053B2C240867BCBD40D786
     318      3D6C6888D0467DD856549E5F2E5815016B5176F60721FE773FF8F2FC96F9BA1B
     319      FBF0411789FFAAF25CD4866C12F7A0EEF82C10E7979E99879253B3C5731FF95D
     320      F99D75BAB0E9B25721FF5B0D5BF15E4E371B780EAA0256A1ECCCF78259EC354B
     321      6277BBFFA3862FF29B739BF3AB26D94DD41825F66815F735BAD9C07350E1BB04
     322      A9F653CA64EC1EE7A8E077D5F3BC2048F9CDF9557ED15AF4A186AD3626790ECA
     323      7EF47B8FEF0128F105FBC14D1F74A45AE3415E48575D4B3617F9551C6250A6A2
     324      9F5E635295DFD5F085DFDBB33C69CCA6421D39BEE2FC7BF14622BF8A2EEC2CEE
     325      674C0ED7740F4A893F44B0325D68BCFA72B5659F103634538DE5FCCAF3DD54D4
     326      8F987C55D33D2255FC96646BD93DF51FD59AE9266C688CD415F975F3E48ABEC6
     327      647FF67F82DF14ABDFED9EBAFCDE7AB26D576DA5FAC2F975C57D9EA6987C687E
     328      3DF958F99EBAFCDE7A9CA1B0A126584BE45786CBF43275B1FDB07C55F7D3BBDD
     329      5B8FE85AE7AA03568BFC4A7798A418938FC477737596F5BD4AB302D78B769CDB
     330      A5DE73A51C7BF511F883992DED53C5DA416B566FEA2DBFFBC17FD5C5D9A1DB3E
     331      B5AB7ECD572B1977723FEF31ABE30F71B4B3117B73699F6AA0B7573E3E55EAC3
     332      7DF5BEF207333B29210E1666C63031D217ECC7785FBD37FEAF8E1FF338CFEC81
     333      BEAF2EE3F375F23BB26BA201BDAF2EE33FF753DD57FF09AEBF1FEA919999F9FB
     334      E8E8E825111111CE212121C181818109FEFEFE09BEBEBE41274E9C707275755D
     335      B279F366A9063FF3987CF3CC952B57A66765654567646474F06F1A969696E2EE
     336      DDBBA8ADAD15CF656565B879F32692929270FEFCF9FBC78F1F0FB6B0B0982EFB
     337      ACE5B98765171616BE1F1F1F9F909D9DDDC92CFEDB8D8E8E07B8DFDE8ED6B636
     338      34B7DC43534BABB83757575F2FB7E7DAB56BF0F3F3EB747171099B376FDE27B2
     339      CFD9FAE58FFCFCFCA534DE16EE8F1FED1D1DB8DFD189E2B24A645CBE82B4F870
     340      6444F922F3A21FD213A37139EB260A4ACAC5E7BC7C3FA4A2A2028989893870E0
     341      40EDBA75EB56CB3EEF7AAE8FE3DE45FEEEE4BF4FE9206E3B8DF9EAB5EB480C70
     342      47BEAF1E9A02B6A0F9FC0634F9D1F5D49915A8F35A888AE30B70C36B2BD2C3BC
     343      71ED5681F86E56515111F8FF543D78F060FBEAD5ABF750D7BFEDE573B34174CE
     344      5AF67717B703953575880DF44675F07EDC8FD0C3BD70BA8E0EA3FD50F04E345E
     345      D88E7ABF4DA8F559839A53CB507D7C3E2ADD6720D76319D2132EE2767E117273
     346      F3446C383A3AB6CF9C3973BBCC86E7D4F87C04C5781B3DC41C1796DE419A9F13
     347      1E5C34C4FD5833DC8F36456BA401EA895D796E334ABC56A3C873194A8E2D46F9
     348      F185A83AB1009547E7A1FCF04C941E988C4BA1C7712D2717393939E29E88A1A1
     349      61FD3BEFBCF383ECF3C36EF110191939382525258BE7BBADED3EEE54DE45C679
     350      4774C6D0FE37C1066D7156A88A724275AA3F1A723270AFAC040FC8379D350D68
     351      2B29466D660C0ACE1921CF6506CADDBF45D9C1AF51EAF019AE849F44D6F51C11
     352      9394AFFCDBA0F184FB54F659A7FC41F3BDEAFAF5EBE0B13735DF43DC054F621B
     353      11DB1A4871C49D2003B4565402CDADA006F4DC02F0FFEF41718F9A5AE06E0D89
     354      72203301D7ECBE22FE74943A7F8142DBD1B89C1A8F4B97AF82E6155656569D9F
     355      7CF2C97ED9E7A8621EF6ECD9F32CC5EAAD9A9A1AEAB6152969E9680CDB2F7CDE
     356      916007A4BBA080E3EECE1DD0C4887C405B3B3A1AF97BA19D404313B1294F2AC9
     357      3EF25B71D871E4394E11FC22BBB1C83D341F995939C8A039080A0AC2CA952B93
     358      093B49FAFC9A6ADA18CAB54EFEBBB1DAFA46A49F7712B1D646FC76F23DD20EA0
     359      38401FCD95D5488BF0C359AB4D38B567364EEF990E8F9DB3909F91042A005DFC
     360      3BE5682F2C468AC168941CF81285F6E35160F62F64C7072039250D696969FCDD
     361      9207AFBDF69AB6EC33EC67C2C3C38DB8AED5932FAFD25C5505EE466BF87EDCBB
     362      48D73F71967890648FA6682BA4B86F47EE695D34471AA12DDA106DE1FB70D777
     363      33C21CB4BAE685F965E4A38ABB88DC3D02A52EE47FFB71C8B7FC04B74F682129
     364      3513717171B0B7B7C7D0A1435D893D8CEF1704070747724DE5FB244971916809
     365      DC8AE650BADE8832200EC57DAC05DAE3AD682E2CD111638EB68BC6688DD88FE6
     366      905D947F9B91E1B997E6A0B98B4F75A7E6CA2524D3F84B9DA7A0D0EE73E45B8D
     367      429EC52748BD721D915151E29A69E2C4891788CD35FA159A9322AE57FCDD82D4
     368      90E3680ED88CA6205DCAF3BDC4D1C7BD2863F285093D9B88FC63764BE82E3406
     369      6CC58D434BD0907FA32B06CB2B440CC61DDE8F1CBB8928719A4CF1371679969F
     370      22D7E06D5C4E4F44707088F85DEE59B366A5117B25DF0BA0BC68AC24DBEFD0FC
     371      66F8BB505DD34243C00E614373C86E61474BD83E99F6A0E1820E0A4FAC4641A0
     372      0DEE9597D1DC3700547751D784EBC16711B66B24E53FC59EE34414D8FC5B8C3D
     373      57FF2D64C5072120E0027C7C7C307BF6ECDBC4E67AF4075AB35AB86697945510
     374      DF19F53EABC9AF1BD1E0BF956A1CD911A843B6ECA49AA7235EE7FAECA31CBC47
     375      F9D7D235EEDA7ADC2B2E46909D0E427489ED3A0D250ABECF351B86DBFA7FA718
     376      24F6395F787B7B333F9FD87B390FC99EF2623ABFB8B40C19C147517B7A296ACF
     377      AE45DD392D515FEBCF6F266D216DA5D71B90E6A14D79DFD435DFD53548F7F384
     378      A7D63064DB4D45D9A11914775351E4304136F64F71DBE423DCDAFB175C4A8925
     379      DF9F81BBBB3BBEFAEAAB2B7C9B8EF99E9E9E295CA30B0A8B901A1382DA13F370
     380      F7D472D49C5E4576ACA1FABEEE479D5D8DD443DB84AF515945F35D87ACB3F628
     381      74998E8A4354775DA7A2D87192C2D887E396F150DCD27F0709699741FB14D8D9
     382      D961CC983191C4E6FB687F747373734D4E4E06D57FA45DCEC69D63F35145F5BC
     383      FAE412547B2D13B6DCF55EDEF54CEB4C9ACB1A1426C6E2767418F2E2A290E1B1
     384      17452E5FA3CC651A8A39E628E70AACC7D0D847D0D83F44CEFE77517C7431FC2E
     385      848AD8DFB56B17DE7AEB2D2F62AFE3FB4DC6C6C6F302020270FB762EB26FDC46
     386      F6396354510DAF3C360F959E6CCB822E7B8E2F22D13AEBF43582743EC1F9ADFF
     387      82FFD6A148311C45B566AA601771BD61BF73CC9B7E8C5B46FFC4CDDD7F4441C2
     388      191C3AE22EF8CB972FEF7CF9E5970F127B2EEF0BA64D9BF6C6A143876A788DB8
     389      76FD0652939350EE360D778ECCA6B5640E692ECA3D4847E7A2C4ED1B5A67683D
     390      CABE8C7B57D285EA92A370D56C14CDF938C1CEB71C29628EFD9EB3FF6DE4530E
     391      464427F23E00B6B6B6FCDBFC1CFB8EB26B27DE1B3D4FEB820DAF4FBC465CBA7A
     392      0DD91768CD719E2CD69132B719427748794E53907D8A6A724131C0BF6F4D3E6B
     393      CA4847DCAEA128B219D3356E8E77661BFC2F6EEEFC3DF232A3E074E0A0E0AF59
     394      B3067FFEF39F4FF0D7FA64F704F9DEDA3373E7CEFDBB8383C35DAECF99972E21
     395      2D331BB74F6D45A9E378F2ED17A29697505CE7DA4FC0657723D4D31A559B9488
     396      BAA464DC890C45E2EE0F68DC23BA7C2EB1757F873B5107E0EEE9C5DF8100FFDD
     397      0BD5BDFC679F7DF61031BF19D4FD6FB25ED0D1D1D97AF8F0615C227E724A0A92
     398      D3AF900D5B506C3392E6759C985B7E4ED83B0C5E6BDEC2C9557FC7C9957F45C0
     399      C67FE0A6F1C7C835E99AEF1CFD7789FD3F288B72C6C933E761EFE020627ECE9C
     400      390F5E7FFDF5A3B2B1BFA374EF93F723AF516C9E3976EC18381F626262119794
     401      899B212E28B4FA148534BE02EB512864598D4401F93ADF6238F269CC5DFE7E0F
     402      37F7BC893C139A8BF41078789EA2F9B613ECC58B1777BEFBEEBBFCBD247BD9DA
     403      FB2B155BB0E7C9BEBFD2354424E524685D06AD8D08098B444A4A12F2FD4D5060
     404      FB39F28CDE15CA357C8FF2FA6DDCDAFF37DCDA43314E73537AF12062E293616B
     405      EF041B1B1B216263D8B06121D4BF1B693EE97F34EC855F78E59557DEA738F1A3
     406      6B08D0F58DD8379DF3F5C539BF0044C5A5D2DE321237A23C911BEE423A881BD1
     407      DE48A57AE01F7A11F6CE2EC4B415716E6464048AABCE0F3EF880BFA3C873BE5C
     408      1673FFD5CB169CEF0FBFFDF5D75F9B6FDBB6AD8EFD77F6EC599C397346D4AFA3
     409      343F878F78C0D5ED300EB8BAC1D1F9007FAF43F899C576AF5DBB1693274FAEFC
     410      CD6F7E734C966B0B65EC17FA7809C2EDDEFCED6F7F3B8FEA8337F5D7A0A7A707
     411      6B6B6BFEDEABA8E11CAB9C53CECECE82A9ABAB8B152B56706DBFFBF6DB6F9F7D
     412      EEB9E7F8BB91BCD7FB4AF639C57FF5F312EC79D9F7023EFAD9CF7EB69CE2C77E
     413      FCF8F181B476E52C58B0A069D1A2459DF3E7CFEFFCE69B6F1A264D9A74EDC30F
     414      3FBC40E33DF2CC33CFF0DEC690C47BED0FFA73EDA3E61EFC0BB2EF2B705F5349
     415      AB48BB49FCFD631B99CC6479B55CF6F9C9BBB2EF41BCF098AE85A5BF8BF895EC
     416      1AE64FA4BF91FE21D35F65C77E23DBD73EDF57EEFF05DE7F3B51
    1552417    }
    1553418  end
    1554419  object ActionList1: TActionList
    1555420    Images = ImageList1
    1556     left = 372
    1557     top = 97
     421    Left = 558
     422    Top = 146
    1558423    object AExit: TAction
    1559424      Caption = 'Exit'
     
    1582447    end
    1583448  end
    1584   object CoolTranslator1: TCoolTranslator
     449  object Translator1: TTranslator
    1585450    POFilesFolder = 'Languages'
    1586     OnTranslate = CoolTranslator1Translate
    1587     left = 360
    1588     top = 380
     451    OnTranslate = Translator1Translate
     452    Left = 540
     453    Top = 570
    1589454  end
    1590455  object ApplicationInfo1: TApplicationInfo
     
    1603468    RegistryRoot = rrKeyCurrentUser
    1604469    License = 'CC0'
    1605     left = 100
    1606     top = 104
     470    Left = 150
     471    Top = 156
    1607472  end
    1608473  object PersistentForm1: TPersistentForm
    1609474    MinVisiblePart = 50
    1610475    EntireVisible = False
    1611     left = 101
    1612     top = 178
     476    Left = 152
     477    Top = 267
    1613478  end
    1614479  object ScaleDPI1: TScaleDPI
    1615480    AutoDetect = False
    1616     left = 366
    1617     top = 273
     481    Left = 549
     482    Top = 410
    1618483  end
    1619484end
  • trunk/UCore.pas

    r22 r25  
    66
    77uses
    8   Classes, SysUtils, FileUtil, Controls, ActnList, UDatabase, UCoolTranslator,
     8  Classes, SysUtils, FileUtil, Controls, ActnList, UDatabase, UTranslator,
    99  UApplicationInfo, UPersistentForm, Forms, URegistry, UScaleDPI;
    1010
     
    2020    AExit: TAction;
    2121    ActionList1: TActionList;
    22     CoolTranslator1: TCoolTranslator;
     22    Translator1: TTranslator;
    2323    ImageList1: TImageList;
    2424    PersistentForm1: TPersistentForm;
     
    2929    procedure AExitExecute(Sender: TObject);
    3030    procedure APreferencesExecute(Sender: TObject);
    31     procedure CoolTranslator1Translate(Sender: TObject);
     31    procedure Translator1Translate(Sender: TObject);
    3232    procedure DataModuleCreate(Sender: TObject);
    3333    procedure DataModuleDestroy(Sender: TObject);
     
    5757
    5858uses
    59   UFormTables, UFormConnect,
    60   UFormDatabases, UFormPreferences, UFormMain, UFormAbout;
     59  UFormTables, UFormConnect, UAboutDialog, UFormDatabases, UFormPreferences,
     60  UFormMain;
    6161
    6262{$R *.lfm}
     
    9797procedure TCore.AAboutExecute(Sender: TObject);
    9898begin
    99   FormAbout := TFormAbout.Create(nil);
    100   FormAbout.ApplicationInfo := ApplicationInfo1;
    101   FormAbout.ShowModal;
    102   FormAbout.Free;
     99  with TAboutDialog.Create(nil) do
     100  try
     101    ApplicationInfo := ApplicationInfo1;
     102    Show;
     103  finally
     104    Free;
     105  end;
    103106end;
    104107
     
    111114end;
    112115
    113 procedure TCore.CoolTranslator1Translate(Sender: TObject);
     116procedure TCore.Translator1Translate(Sender: TObject);
    114117var
    115118  I: Integer;
    116119begin
    117120  for I := 0 to DbManager.DataTypes.Count - 1 do begin
    118     TDataType(DbManager.DataTypes[I]).Title := CoolTranslator1.TranslateText(TDataType(DbManager.DataTypes[I]).Title, TDataType(DbManager.DataTypes[I]).Title);
     121    TDataType(DbManager.DataTypes[I]).Title := Translator1.TranslateText(TDataType(DbManager.DataTypes[I]).Title, TDataType(DbManager.DataTypes[I]).Title);
    119122  end;
    120123end;
     
    143146    Preferences.RememberDatabase := GetValue('RememberDatabase', True);
    144147    Preferences.LastDatabaseName := GetValue('LastDatabaseName', '');
    145     CoolTranslator1.Language := CoolTranslator1.Languages.SearchByCode(
     148    Translator1.Language := Translator1.Languages.SearchByCode(
    146149      GetValue('Language', ''));
    147150  finally
     
    158161    SetValue('RememberDatabase', Preferences.RememberDatabase);
    159162    SetValue('LastDatabaseName', Preferences.LastDatabaseName);
    160     SetValue('Language', CoolTranslator1.Language.Code);
     163    SetValue('Language', Translator1.Language.Code);
    161164  finally
    162165    Free;
     
    170173begin
    171174  if not Initialized then begin
    172     {$IFDEF Linux}
     175    {$IFDEF UNIX}
    173176    // If installed in Linux system then use installation directory for po files
    174177    if Application.ExeName = '/usr/bin/MyData' then
    175       CoolTranslator1.POFilesFolder := '/usr/share/MyData/languages';
     178      Translator1.POFilesFolder := '/usr/share/MyData/languages';
    176179    {$ENDIF}
    177180    FormConnect.Init;
Note: See TracChangeset for help on using the changeset viewer.