diff --git a/HISTORY.md b/HISTORY.md index f5c3aca81c..027cf863a5 100644 --- a/HISTORY.md +++ b/HISTORY.md @@ -1,5 +1,76 @@ # Keyman Version History +## 19.0.285 alpha 2026-09-11 + +* fix(web): handle 'unload' message while attempting model 'load' (#16548) +* fix(android): load KMP files from app-external sources (#16392) + +## 19.0.284 alpha 2026-09-10 + +* maint(developer): remove unused ajv dependency from kmc-convert (#16539) +* fix(web): remove scroll-to-top on page load (#16531) + +## 19.0.283 alpha 2026-09-09 + +* change(web): allow autocorrection on input of basic whitespaces (#16541) + +## 19.0.282 alpha 2026-09-08 + +* refactor(web): clarify function scope and update some function comments (#16532) + +## 19.0.281 alpha 2026-09-07 + +* chore(deps): bump fast-uri from 3.1.5 to 3.1.7 (#16511) +* chore(deps): bump nanoid from 3.3.11 to 3.3.18 (#16512) +* chore(deps): bump qs and express (#16513) +* chore(web): adjust types in guide-examples tests (#16523) + +## 19.0.280 alpha 2026-09-05 + +* fix(windows): open chm external links in user's browser (#16515) + +## 19.0.279 alpha 2026-09-03 + +* chore(web): tweak error message (#16495) +* change(web): stage construction of CorrectionPredictionTuple instances (#16429) +* change(web): narrow the range of suggestions examined to determine autocompletion (#16436) +* fix(web): remove deprecated `onunload` handler (#16504) +* docs(developer): add comment to test fixtures to clarify expectations (#16505) +* fix(developer): hide keyboard uninstall confirmation (#16506) +* fix(developer): remember presentation and layer when switching platforms in touch layout editor (#16509) +* fix(developer): ensure JSON regenerated after undo in touch layout editor (#16516) +* fix(developer): improve validation of minDeviceWidth to match spec (#16501) +* chore(developer): improve kmc-ldml test messages (#16502) +* chore(web): add const for cookie name (#16519) +* refactor(web): clarify scope of PageContextAttachment functions (#16521) + +## 19.0.278 alpha 2026-09-02 + +* feat(developer): support output folder and `--continue-on-error` (#16453) +* fix(developer): validate the number of hardware layers only in Layr compiler (#16455) +* fix(developer): validate id and modifiers attributes in Layr compiler (#16456) +* fix(developer): disable Copy Link in Model Editor if no link to copy (#16475) +* fix(developer): open context help when F1 pressed in Project window (#16481) +* chore(web): update file headers (#16497) + +## 19.0.277 alpha 2026-09-01 + +* fix(developer): handle comment without trailing whitespace (#16479) +* fix(developer): improve scroll wheel behavior in Character Map (#16474) +* fix(developer): call 'Show Console' twice to make the console actually show on first use (#16483) +* fix(developer): use path not dependent on pwd for starting Server (#16476) +* chore(developer): remove duplicated versioning information from Server (#16478) +* fix(developer): handle leading delimiters correctly in `u16tok()` (#16446) +* chore(android): upload webview source map during android and ios build (#16449) +* refactor(windows): rename `GetCapsAndNumlockState()` to `RefreshModifierState()` (#16444) +* chore(developer): strip out defunct printing support (#16480) +* fix(developer): make tool windows non-topmost when TIKE is deactivated (#16482) +* fix(windows): simplify keyboard refresh and make it more on-demand (#16435) +* refactor(windows): cleanup unused wm_keyman_control values (#16439) +* maint(windows): remove `koSwitchLanguageForAllApplications`, `koAutoSwitchOSKPages`, osVista, osWin7, osWin8, cleanup (#16443) +* change(developer): deprecate `fix`, `clearcontext`, bump max .kmx version to 19.0 (#16445) +* fix(developer): add missing message parameters and cleanup kmc-kmn messages further (#16493) + ## 19.0.276 alpha 2026-08-28 * fix(windows): add manifest to insthelper and set trustinfo to asInvoker (#16430) diff --git a/VERSION.md b/VERSION.md index 414f9e906a..81bfc4e5ab 100644 --- a/VERSION.md +++ b/VERSION.md @@ -1 +1 @@ -19.0.277 \ No newline at end of file +19.0.286 \ No newline at end of file diff --git a/android/KMAPro/kMAPro/src/main/AndroidManifest.xml b/android/KMAPro/kMAPro/src/main/AndroidManifest.xml index 563690c031..2de584e7a0 100644 --- a/android/KMAPro/kMAPro/src/main/AndroidManifest.xml +++ b/android/KMAPro/kMAPro/src/main/AndroidManifest.xml @@ -85,42 +85,33 @@ + Capture content by MIME type, which is how Gmail broadcasts + attachment open requests. pathPattern and file extensions + are ignored, so the MIME type *MUST* be explicit, otherwise + we will match absolutely every file opened. + + See https://developer.android.com/guide/components/intents-filters#DataTest, item 3. + --> - - + + + - - - - + + + Capture open requests (pathPattern is honoured) where MIME + type is provided in the Intent and a URI is provided. + + See https://developer.android.com/guide/components/intents-filters#DataTest, item 4. + --> @@ -128,19 +119,28 @@ + + - + + + + + + Capture file open requests (pathPattern is honoured) where no + MIME type is provided in the Intent. An Intent with a null + MIME type will never be matched by a filter with a set MIME + type, so we need a second intent-filter if we wish to also + match files with this extension and a non-null MIME type + (even if it is non-null but zero length). + + See https://developer.android.com/guide/components/intents-filters#DataTest, item 2. + --> @@ -148,25 +148,10 @@ + + - - - - - - - - - - - - + @@ -192,35 +177,14 @@ - + + - - - - - - - - - - - - - - + + + + diff --git a/android/KMAPro/kMAPro/src/main/java/com/tavultesoft/kmapro/CheckPermissions.java b/android/KMAPro/kMAPro/src/main/java/com/tavultesoft/kmapro/CheckPermissions.java index 431d97e353..78ba9eeffc 100644 --- a/android/KMAPro/kMAPro/src/main/java/com/tavultesoft/kmapro/CheckPermissions.java +++ b/android/KMAPro/kMAPro/src/main/java/com/tavultesoft/kmapro/CheckPermissions.java @@ -33,13 +33,8 @@ public class CheckPermissions { // API 30-32 permissionsOK = Environment.isExternalStorageManager() || checkPermission(activity, Manifest.permission.READ_EXTERNAL_STORAGE); - } else { - // API 33+ - // We had to remove these MEDIA permissions from AndroidManifest.xml so these will end up failing - // https://support.google.com/googleplay/android-developer/answer/14115180?hl=en - permissionsOK = permissionsOK && checkPermission(activity, Manifest.permission.READ_MEDIA_IMAGES); - permissionsOK = permissionsOK && checkPermission(activity, Manifest.permission.READ_MEDIA_VIDEO); } + // API 33+ does not need any special permissions. return permissionsOK; } diff --git a/android/KMEA/build.sh b/android/KMEA/build.sh index 85a1894672..66471c0bbb 100755 --- a/android/KMEA/build.sh +++ b/android/KMEA/build.sh @@ -9,6 +9,7 @@ THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")" . "${THIS_SCRIPT%/*}/../../resources/build/builder-full.inc.sh" ## END STANDARD BUILD SCRIPT INCLUDE +. "${KEYMAN_ROOT}/resources/build/ci/sentry-control.inc.sh" # ################################ Main script ################################ @@ -19,6 +20,7 @@ builder_describe "Builds Keyman Engine for Android." \ "configure" \ "build" \ "test Runs lint and unit tests." \ + "publish-symbols Publishes symbols to Sentry." \ ":engine Builds Engine" builder_parse "$@" @@ -79,6 +81,13 @@ do_test() { ./gradlew $GRADLE_DAEMON $TEST_FLAGS } -builder_run_action clean:engine rm -rf build app/build -builder_run_action build:engine do_build -builder_run_action test:engine do_test +do_publish_symbols() { + if builder_is_ci_build && builder_is_ci_build_level_release; then + sentry_upload_web "${KEYMAN_ROOT}/web/build/app/webview/release/" + fi +} + +builder_run_action clean:engine rm -rf build app/build +builder_run_action build:engine do_build +builder_run_action test:engine do_test +builder_run_action publish-symbols do_publish_symbols diff --git a/common/cpp/km_u16.cpp b/common/cpp/km_u16.cpp index 78077202fc..c378946156 100644 --- a/common/cpp/km_u16.cpp +++ b/common/cpp/km_u16.cpp @@ -326,10 +326,20 @@ int u16ncmp(const KMX_WCHAR* p, const KMX_WCHAR* q, size_t count) { * @return Pointer to the first token in p */ KMX_WCHAR* u16tok(KMX_WCHAR* p, const KMX_WCHAR ch, KMX_WCHAR** ctx) { + if(ch == 0 || !ctx) { + return NULL; + } + if (!p) { p = *ctx; - if (!p) + if (!p) { return NULL; + } + } + + // skip initial delimiter + while (*p == ch) { + p++; } KMX_WCHAR* q = p; @@ -356,10 +366,20 @@ KMX_WCHAR* u16tok(KMX_WCHAR* p, const KMX_WCHAR ch, KMX_WCHAR** ctx) { * @return Pointer to the first token in p */ KMX_WCHAR* u16tok(KMX_WCHAR* p, const KMX_WCHAR* delimiters, KMX_WCHAR** ctx) { + if(!ctx || !delimiters || !(*delimiters)) { + return NULL; + } + if (!p) { p = *ctx; - if (!p) + if (!p) { return NULL; + } + } + + // skip initial delimiters + while (*p && u16chr(delimiters, *p)) { + p++; } KMX_WCHAR* q = p; diff --git a/common/include/kmx_file.h b/common/include/kmx_file.h index 748ba32d92..7b763c6700 100644 --- a/common/include/kmx_file.h +++ b/common/include/kmx_file.h @@ -51,9 +51,10 @@ namespace kmx { #define VERSION_160 0x00001000 #define VERSION_170 0x00001100 +#define VERSION_190 0x00001300 #define VERSION_MIN VERSION_50 -#define VERSION_MAX VERSION_170 +#define VERSION_MAX VERSION_190 // // Backspace types @@ -201,7 +202,7 @@ namespace kmx { //#define CODE_EXTENDEDEND 0x0B deprecated #define CODE_SWITCH 0x0C #define CODE_KEY 0x0D -#define CODE_CLEARCONTEXT 0x0E +#define CODE_CLEARCONTEXT 0x0E // deprecated in 19.0 #define CODE_CALL 0x0F // UC_SENTINEL_EXTENDEDEND 0x10 #define CODE_CONTEXTEX 0x11 @@ -234,7 +235,7 @@ namespace kmx { #define U_CODE_DEADKEY u"\u0008" #define U_CODE_EXTENDED u"\u000A" #define U_CODE_SWITCH u"\u000C" -#define U_CODE_CLEARCONTEXT u"\u000E" +#define U_CODE_CLEARCONTEXT u"\u000E" // deprecated in 19.0 #define U_CODE_CALL u"\u000F" #define U_CODE_EXTENDEDEND u"\u0010" #define U_CODE_CONTEXTEX u"\u0011" @@ -256,7 +257,7 @@ namespace kmx { #define C_CODE_DEADKEY(deadkey) U_UC_SENTINEL U_CODE_DEADKEY deadkey #define C_CODE_EXTENDED(varargs) U_UC_SENTINEL U_CODE_EXTENDED varargs #define C_CODE_SWITCH(val) U_UC_SENTINEL U_CODE_SWITCH val -#define C_CODE_CLEARCONTEXT() U_UC_SENTINEL U_CODE_CLEARCONTEXT +#define C_CODE_CLEARCONTEXT() U_UC_SENTINEL U_CODE_CLEARCONTEXT // deprecated in 19.0 #define C_CODE_CALL(val) U_UC_SENTINEL U_CODE_CALL val #define C_CODE_CONTEXTEX(val) U_UC_SENTINEL U_CODE_CONTEXTEX val #define C_CODE_NOTANY(val) U_UC_SENTINEL U_CODE_NOTANY val diff --git a/common/web/types/src/kmx/kmx.ts b/common/web/types/src/kmx/kmx.ts index 651a6db0d1..66a11398a6 100644 --- a/common/web/types/src/kmx/kmx.ts +++ b/common/web/types/src/kmx/kmx.ts @@ -24,7 +24,8 @@ export enum KMX_Version { VERSION_140 = 0x00000E00, VERSION_150 = 0x00000F00, VERSION_160 = 0x00001000, - VERSION_170 = 0x00001100 + VERSION_170 = 0x00001100, + VERSION_190 = 0x00001300, }; @@ -165,9 +166,10 @@ export class KMXFile { public static readonly VERSION_150 = KMX_Version.VERSION_150; public static readonly VERSION_160 = KMX_Version.VERSION_160; public static readonly VERSION_170 = KMX_Version.VERSION_170; + public static readonly VERSION_190 = KMX_Version.VERSION_190; public static readonly VERSION_MIN = this.VERSION_50; - public static readonly VERSION_MAX = this.VERSION_170; + public static readonly VERSION_MAX = this.VERSION_190; // // Backspace types @@ -308,7 +310,7 @@ export class KMXFile { //public static readonly CODE_EXTENDEDEND = 0x0B; deprecated public static readonly CODE_SWITCH = 0x0C; public static readonly CODE_KEY = 0x0D; - public static readonly CODE_CLEARCONTEXT = 0x0E; + public static readonly CODE_CLEARCONTEXT = 0x0E; // deprecated in 19.0 public static readonly CODE_CALL = 0x0F; // UC_SENTINEL_EXTENDEDEND 0x10 public static readonly CODE_CONTEXTEX = 0x11; diff --git a/common/windows/cpp/include/legacy_kmx_file.h b/common/windows/cpp/include/legacy_kmx_file.h index d3bc3aed0f..fcfde269e1 100644 --- a/common/windows/cpp/include/legacy_kmx_file.h +++ b/common/windows/cpp/include/legacy_kmx_file.h @@ -75,8 +75,9 @@ #define VERSION_150 0x00000F00 #define VERSION_160 0x00001000 #define VERSION_170 0x00001100 +#define VERSION_190 0x00001300 #define VERSION_MIN VERSION_50 -#define VERSION_MAX VERSION_170 +#define VERSION_MAX VERSION_190 /* Special flag for WM_CHAR/WM_KEY???/WM_SYSKEY???: says that key has been @@ -257,7 +258,7 @@ //#define CODE_EXTENDEDEND 0x0B deprecated #define CODE_SWITCH 0x0C #define CODE_KEY 0x0D -#define CODE_CLEARCONTEXT 0x0E +#define CODE_CLEARCONTEXT 0x0E // deprecated in 19.0 #define CODE_CALL 0x0F // UC_SENTINEL_EXTENDEDEND 0x10 #define CODE_CONTEXTEX 0x11 diff --git a/common/windows/delphi/charmap/UfrmCharacterMapNew.pas b/common/windows/delphi/charmap/UfrmCharacterMapNew.pas index 2e807ede94..a99212761f 100644 --- a/common/windows/delphi/charmap/UfrmCharacterMapNew.pas +++ b/common/windows/delphi/charmap/UfrmCharacterMapNew.pas @@ -896,22 +896,36 @@ end; procedure TfrmCharacterMapNew.gridMouseWheelDown(Sender: TObject; Shift: TShiftState; MousePos: TPoint; var Handled: Boolean); begin + Handled := True; if ssCtrl in Shift then begin - Handled := True; + // Zoom if tbSize.Position < tbSize.Max then tbSize.Position := tbSize.Position + tbSize.PageSize; + end + else + begin + // Scroll + if grid.TopRow < grid.RowCount - grid.VisibleRowCount then + grid.TopRow := grid.TopRow + 1; end; end; procedure TfrmCharacterMapNew.gridMouseWheelUp(Sender: TObject; Shift: TShiftState; MousePos: TPoint; var Handled: Boolean); begin + Handled := True; if ssCtrl in Shift then begin - Handled := True; + // Zoom if tbSize.Position > tbSize.Min then tbSize.Position := tbSize.Position - tbSize.PageSize; + end + else + begin + // Scroll + if grid.TopRow > 0 then + grid.TopRow := grid.TopRow - 1; end; end; diff --git a/common/windows/delphi/general/GetOsVersion.pas b/common/windows/delphi/general/GetOsVersion.pas index e3c7293f2b..b4b85edda7 100644 --- a/common/windows/delphi/general/GetOsVersion.pas +++ b/common/windows/delphi/general/GetOsVersion.pas @@ -1,18 +1,18 @@ (* Name: GetOsVersion Copyright: Copyright (C) SIL International. - Documentation: - Description: + Documentation: + Description: Create Date: 4 Dec 2006 Modified Date: 28 May 2014 Authors: mcdurdin - Related Files: - Dependencies: + Related Files: + Dependencies: - Bugs: - Todo: - Notes: + Bugs: + Todo: + Notes: History: 04 Dec 2006 - mcdurdin - Add osVista 04 May 2012 - mcdurdin - I3306 - V9.0 - Remove TntControls + Win9x support 24 Oct 2012 - mcdurdin - I3487 - V9.0 - Add detection of Win8 @@ -27,7 +27,7 @@ uses Winapi.Windows; type - TOS = (osLegacy, osVista, osWin7, osWin8, osWin10, osOther); // I3669 // I4222 + TOS = (osLegacy, osWin10, osOther); // I3669 // I4222 function GetOs: TOS; @@ -46,12 +46,7 @@ begin begin case osv.dwMajorVersion of 5: Result := osLegacy; - 6: case osv.dwMinorVersion of - 0: Result := osVista; - 1: Result := osWin7; - 2: Result := osWin8; // I3487 - else Result := osWin8; // I3669 - end; + 6: Result := osLegacy; 10: Result := osWin10; else Result := osWin10; diff --git a/common/windows/delphi/general/Keyman.System.CanonicalLanguageCodeUtils.pas b/common/windows/delphi/general/Keyman.System.CanonicalLanguageCodeUtils.pas index 4da9557054..a792d34fe1 100644 --- a/common/windows/delphi/general/Keyman.System.CanonicalLanguageCodeUtils.pas +++ b/common/windows/delphi/general/Keyman.System.CanonicalLanguageCodeUtils.pas @@ -35,12 +35,6 @@ var t: TBCP47Tag; LangTag: TLangTag; begin - // We do not try and canonicalize language tags on Windows 7, because it does - // not follow the same patterns as for later versions of Windows. For example, - // zh-CN is not canonicalized to zh-Hans-CN - if GetOs = osWin7 then - Exit(Tag); - if Tag = '' then Exit(''); diff --git a/common/windows/delphi/general/RegistryKeys.pas b/common/windows/delphi/general/RegistryKeys.pas index b40c309ddd..0f627c7329 100644 --- a/common/windows/delphi/general/RegistryKeys.pas +++ b/common/windows/delphi/general/RegistryKeys.pas @@ -127,9 +127,6 @@ const SRegValue_ProxyLogin = 'proxy login'; SRegValue_AutoOpenOSK = 'auto open osk'; // CU, default true - SRegValue_AutoSwitchOSKPages = 'auto switch osk pages'; // CU, default true - SRegValue_SwitchLanguageWithKeyboard = 'switch language with keyboard'; // CU, default true - SRegValue_SwitchLanguageForAllApplications = 'switch language for all applications'; // CU, default true SRegValue_DeepTSFIntegration = 'deep tsf integration'; // LM, 0=disable, 1=enable, 2=default SRegKey_AppIntegration = SRegKey_KeymanEngine_LM + '\App Integration'; //KM diff --git a/common/windows/delphi/keyboards/kmxfileconsts.pas b/common/windows/delphi/keyboards/kmxfileconsts.pas index 8e1955aaa6..4af524d8b7 100644 --- a/common/windows/delphi/keyboards/kmxfileconsts.pas +++ b/common/windows/delphi/keyboards/kmxfileconsts.pas @@ -56,7 +56,7 @@ const //#define CODE_EXTENDEDEND = $0B deprecated CODE_SWITCH = $0C; CODE_KEY = $0D; - CODE_CLEARCONTEXT = $0E; + CODE_CLEARCONTEXT = $0E; // deprecated in 19.0 CODE_CALL = $0F; // UC_SENTINEL_EXTENDEDEND 0x10 CODE_CONTEXTEX = $11; @@ -99,9 +99,10 @@ const VERSION_150 = $00000F00; VERSION_160 = $00001000; VERSION_170 = $00001100; + VERSION_190 = $00001300; VERSION_MIN = VERSION_50; - VERSION_MAX = VERSION_170; + VERSION_MAX = VERSION_190; VERSION_MASK_MINOR = $00FF; VERSION_MASK_MAJOR = $FF00; diff --git a/common/windows/delphi/keyboards/kmxfileutils.pas b/common/windows/delphi/keyboards/kmxfileutils.pas index 1b3168b1f2..16f5e7424f 100644 --- a/common/windows/delphi/keyboards/kmxfileutils.pas +++ b/common/windows/delphi/keyboards/kmxfileutils.pas @@ -163,7 +163,7 @@ begin CODE_CONTEXTEX: Inc(Result, 2); CODE_NOTANY: Inc(Result, 2); - CODE_CLEARCONTEXT: Inc(Result, 2); // I3442 + CODE_CLEARCONTEXT: Inc(Result, 2); // I3442 // deprecated in 19.0 CODE_IFOPT: Inc(Result, 4); // I3442 CODE_IFSYSTEMSTORE: Inc(Result, 4); // I3442 CODE_SETOPT: Inc(Result, 3); // I3442 diff --git a/core/src/kmx/kmx_file.cpp b/core/src/kmx/kmx_file.cpp index ab90df7d52..6133adfe11 100644 --- a/core/src/kmx/kmx_file.cpp +++ b/core/src/kmx/kmx_file.cpp @@ -35,7 +35,7 @@ const int km::core::kmx::CODE__SIZE[] = { -1, // CODE_EXTENDEDEND 0x0B (unused) 1, // CODE_SWITCH 0x0C -1, // CODE_KEY 0x0D (never used) - 0, // CODE_CLEARCONTEXT 0x0E + 0, // CODE_CLEARCONTEXT 0x0E (deprecated in 19.0) 1, // CODE_CALL 0x0F -1, // UC_SENTINEL_EXTENDEDEND 0x10 (not valid with UC_SENTINEL) 1, // CODE_CONTEXTEX 0x11 diff --git a/core/src/kmx/kmx_processevent.cpp b/core/src/kmx/kmx_processevent.cpp index 09ebcdd4cd..94e74b4af0 100644 --- a/core/src/kmx/kmx_processevent.cpp +++ b/core/src/kmx/kmx_processevent.cpp @@ -495,6 +495,7 @@ int KMX_ProcessEvent::PostString(PKMX_WCHAR str, LPKEYBOARD lpkb, PKMX_WCHAR end FoundUse = TRUE; break; case CODE_CLEARCONTEXT: + // statement deprecated in 19.0 // no longer supported, no-op break; case CODE_INDEX: diff --git a/core/src/ldml/C7532_ldml_updating.md b/core/src/ldml/C7532_ldml_updating.md index 10d7708ada..2e812e4f8d 100644 --- a/core/src/ldml/C7532_ldml_updating.md +++ b/core/src/ldml/C7532_ldml_updating.md @@ -71,7 +71,7 @@ working on ‘layr’, using ‘disp’ as a model from https://github.com/keyma - update basic.xml and basic.txt - Tweak `eveloper/src/kmc-ldml/test/fixtures/basic.xml` as needed - - You can use `developer/src/kmc-ldml/build.sh build-fixtures` which will generate these. The two .kmx files are supposed to match: if not, fix `basic.txt` or fix other bugs. + - You can use `developer/src/kmc-ldml/build.sh fixtures-build` which will generate these. The two .kmx files are supposed to match: if not, fix `basic.txt` or fix other bugs. - `developer/src/kmc-ldml/build/test/fixtures/basic-txt.kmx` - KMX generated from basic.txt. - `developer/src/kmc-ldml/build/test/fixtures/basic-xml.kmx` - KMX generated from basic.xml. - `developer/src/kmc-ldml/build/test/fixtures/basic-xml.kvk` - KVK generated from basic.xml. diff --git a/core/tests/unit/ldml/invalid-keyboards/ik_001_bad_key.xml b/core/tests/unit/ldml/invalid-keyboards/ik_001_bad_key.xml index ce64bc97d5..35859d8bad 100644 --- a/core/tests/unit/ldml/invalid-keyboards/ik_001_bad_key.xml +++ b/core/tests/unit/ldml/invalid-keyboards/ik_001_bad_key.xml @@ -14,7 +14,7 @@ - + diff --git a/core/tests/unit/ldml/keyboards/k_000_minimal_keyboard.xml b/core/tests/unit/ldml/keyboards/k_000_minimal_keyboard.xml index 44c043f891..3e53bde1a5 100644 --- a/core/tests/unit/ldml/keyboards/k_000_minimal_keyboard.xml +++ b/core/tests/unit/ldml/keyboards/k_000_minimal_keyboard.xml @@ -15,7 +15,7 @@ Keys that don't show up in a row don't generate an output - + diff --git a/core/tests/unit/ldml/keyboards/k_001_tiny.xml b/core/tests/unit/ldml/keyboards/k_001_tiny.xml index b8a543cd2d..f4bd7c99c9 100644 --- a/core/tests/unit/ldml/keyboards/k_001_tiny.xml +++ b/core/tests/unit/ldml/keyboards/k_001_tiny.xml @@ -17,7 +17,7 @@ - + diff --git a/core/tests/unit/ldml/keyboards/k_002_tinyu32.xml b/core/tests/unit/ldml/keyboards/k_002_tinyu32.xml index 078e8aec3c..e675175a35 100644 --- a/core/tests/unit/ldml/keyboards/k_002_tinyu32.xml +++ b/core/tests/unit/ldml/keyboards/k_002_tinyu32.xml @@ -16,7 +16,7 @@ - + diff --git a/core/tests/unit/ldml/keyboards/k_003_transform.xml b/core/tests/unit/ldml/keyboards/k_003_transform.xml index 2fc8d61e3d..6ebed8b425 100644 --- a/core/tests/unit/ldml/keyboards/k_003_transform.xml +++ b/core/tests/unit/ldml/keyboards/k_003_transform.xml @@ -18,14 +18,14 @@ from https://github.com/unicode-org/cldr/blob/keyboard-preview/docs/ldml/tr35-ke - + - + diff --git a/core/tests/unit/ldml/keyboards/k_004_tinyshift.xml b/core/tests/unit/ldml/keyboards/k_004_tinyshift.xml index 2d152867a7..1b0e35052f 100644 --- a/core/tests/unit/ldml/keyboards/k_004_tinyshift.xml +++ b/core/tests/unit/ldml/keyboards/k_004_tinyshift.xml @@ -18,16 +18,16 @@ - + - + - + - + diff --git a/core/tests/unit/ldml/keyboards/k_005_modbittest.xml b/core/tests/unit/ldml/keyboards/k_005_modbittest.xml index 054c81d8c0..9ec4062bf8 100644 --- a/core/tests/unit/ldml/keyboards/k_005_modbittest.xml +++ b/core/tests/unit/ldml/keyboards/k_005_modbittest.xml @@ -12,7 +12,7 @@ - + diff --git a/core/tests/unit/ldml/keyboards/k_006_backspace.xml b/core/tests/unit/ldml/keyboards/k_006_backspace.xml index 763d90bc7f..b98356664c 100644 --- a/core/tests/unit/ldml/keyboards/k_006_backspace.xml +++ b/core/tests/unit/ldml/keyboards/k_006_backspace.xml @@ -11,14 +11,14 @@ - + - + diff --git a/core/tests/unit/ldml/keyboards/k_007_transform_rgx.xml b/core/tests/unit/ldml/keyboards/k_007_transform_rgx.xml index cc79b826de..05f70cf14b 100644 --- a/core/tests/unit/ldml/keyboards/k_007_transform_rgx.xml +++ b/core/tests/unit/ldml/keyboards/k_007_transform_rgx.xml @@ -18,14 +18,14 @@ from https://github.com/unicode-org/cldr/blob/keyboard-preview/docs/ldml/tr35-ke - + - + diff --git a/core/tests/unit/ldml/keyboards/k_008_transform_norm.xml b/core/tests/unit/ldml/keyboards/k_008_transform_norm.xml index cc1a7ab43d..8b3e544555 100644 --- a/core/tests/unit/ldml/keyboards/k_008_transform_norm.xml +++ b/core/tests/unit/ldml/keyboards/k_008_transform_norm.xml @@ -21,14 +21,14 @@ https://github.com/unicode-org/cldr/blob/keyboard-preview/docs/ldml/tr35-keyboar - + - + diff --git a/core/tests/unit/ldml/keyboards/k_009_transform_nfc.xml b/core/tests/unit/ldml/keyboards/k_009_transform_nfc.xml index e975260dcb..084fdd99fd 100644 --- a/core/tests/unit/ldml/keyboards/k_009_transform_nfc.xml +++ b/core/tests/unit/ldml/keyboards/k_009_transform_nfc.xml @@ -21,14 +21,14 @@ like k_008 but in NFC (and other normalizations) - + - + diff --git a/core/tests/unit/ldml/keyboards/k_012_other.xml b/core/tests/unit/ldml/keyboards/k_012_other.xml index 186cfd8869..f62377d4c0 100644 --- a/core/tests/unit/ldml/keyboards/k_012_other.xml +++ b/core/tests/unit/ldml/keyboards/k_012_other.xml @@ -14,13 +14,13 @@ will match the default layer - + - + - + diff --git a/core/tests/unit/ldml/keyboards/k_100_keytest.xml b/core/tests/unit/ldml/keyboards/k_100_keytest.xml index 6c2d693447..050e476436 100644 --- a/core/tests/unit/ldml/keyboards/k_100_keytest.xml +++ b/core/tests/unit/ldml/keyboards/k_100_keytest.xml @@ -14,7 +14,7 @@ - + diff --git a/core/tests/unit/ldml/keyboards/k_101_keytest.xml b/core/tests/unit/ldml/keyboards/k_101_keytest.xml index 2af4ee26c9..27b2bc7733 100644 --- a/core/tests/unit/ldml/keyboards/k_101_keytest.xml +++ b/core/tests/unit/ldml/keyboards/k_101_keytest.xml @@ -17,7 +17,7 @@ - + diff --git a/core/tests/unit/ldml/keyboards/k_102_keytest.xml b/core/tests/unit/ldml/keyboards/k_102_keytest.xml index ad0f1131fa..b094736422 100644 --- a/core/tests/unit/ldml/keyboards/k_102_keytest.xml +++ b/core/tests/unit/ldml/keyboards/k_102_keytest.xml @@ -33,7 +33,7 @@ Comment: enter=not mappable, causes ctx reset. - + diff --git a/core/tests/unit/ldml/keyboards/k_200_reorder_nod_Lana.xml b/core/tests/unit/ldml/keyboards/k_200_reorder_nod_Lana.xml index b6e6cc2e92..43203b6ed1 100644 --- a/core/tests/unit/ldml/keyboards/k_200_reorder_nod_Lana.xml +++ b/core/tests/unit/ldml/keyboards/k_200_reorder_nod_Lana.xml @@ -21,7 +21,7 @@ - + diff --git a/core/tests/unit/ldml/keyboards/k_201_reorder_esk.xml b/core/tests/unit/ldml/keyboards/k_201_reorder_esk.xml index 419d4d1794..eaccebfe2c 100644 --- a/core/tests/unit/ldml/keyboards/k_201_reorder_esk.xml +++ b/core/tests/unit/ldml/keyboards/k_201_reorder_esk.xml @@ -20,7 +20,7 @@ - + diff --git a/core/tests/unit/ldml/keyboards/k_210_marker.xml b/core/tests/unit/ldml/keyboards/k_210_marker.xml index 6f2eb9021a..e65e76ad1c 100644 --- a/core/tests/unit/ldml/keyboards/k_210_marker.xml +++ b/core/tests/unit/ldml/keyboards/k_210_marker.xml @@ -21,7 +21,7 @@ - + diff --git a/core/tests/unit/ldml/keyboards/k_211_marker_escape.xml b/core/tests/unit/ldml/keyboards/k_211_marker_escape.xml index 4130e22850..a33e99fb4f 100644 --- a/core/tests/unit/ldml/keyboards/k_211_marker_escape.xml +++ b/core/tests/unit/ldml/keyboards/k_211_marker_escape.xml @@ -18,7 +18,7 @@ - + diff --git a/core/tests/unit/ldml/keyboards/k_212_marker_11057.xml b/core/tests/unit/ldml/keyboards/k_212_marker_11057.xml index 7bbd2bb94a..80748e8584 100644 --- a/core/tests/unit/ldml/keyboards/k_212_marker_11057.xml +++ b/core/tests/unit/ldml/keyboards/k_212_marker_11057.xml @@ -8,7 +8,7 @@ - + diff --git a/developer/docs/help/reference/kmc/cli/reference.md b/developer/docs/help/reference/kmc/cli/reference.md index 662d85a0a3..943e181ba5 100644 --- a/developer/docs/help/reference/kmc/cli/reference.md +++ b/developer/docs/help/reference/kmc/cli/reference.md @@ -185,9 +185,24 @@ The following parameters are available: `-o `, `--out-file ` -: Overrides the default path and filename for the output file(s). Note that - some compilers emit multiple files, in which case, the output filenames - will vary by file extension. +: Overrides the default path and filename for the output file(s). Note that some + compilers emit multiple files, in which case, the output filenames will vary + by file extension. + + If the output filename ends in a forward slash (`/`) or backslash (`\\`), or + if multiple input files are specified, or if the output filename exists and is + already a folder, then the filename will be treated as a folder, and all + output files will be written within that. + + An error will be raised if an output file is specified and already exists, and + is a regular file, but is expected to be a folder. + +`--continue-on-error` + +: When building multiple input files, continue building subsequent files even if + a file fails to build. Note that `kmc` will still abort if an internal error + is encountered. + ## `kmc build file` additional options diff --git a/developer/src/common/delphi/components/KMDActionInterfaces.pas b/developer/src/common/delphi/components/KMDActionInterfaces.pas index 6c58fca2dc..9de6a4b90c 100644 --- a/developer/src/common/delphi/components/KMDActionInterfaces.pas +++ b/developer/src/common/delphi/components/KMDActionInterfaces.pas @@ -45,17 +45,6 @@ type function CanClearSelection: Boolean; end; - IKMDPrintActions = interface - ['{C6F05AD6-42A3-404F-944C-904393A51837}'] - //function PageSetup: Boolean; - function PrintFile: Boolean; - end; - - IKMDPrintPreviewActions = interface(IKMDPrintActions) - ['{B5879BC4-7A0C-4E00-AAE3-E2D48489152A}'] - function PrintPreview: Boolean; - end; - IKMDViewExpandEditorActions = interface ['{680A172E-A221-4CDA-B68C-1E2AF8487510}'] procedure ExpandContractEditor; diff --git a/developer/src/common/include/kmn_compiler_errors.h b/developer/src/common/include/kmn_compiler_errors.h index f5d623ae28..1e423b9358 100644 --- a/developer/src/common/include/kmn_compiler_errors.h +++ b/developer/src/common/include/kmn_compiler_errors.h @@ -285,6 +285,8 @@ namespace KmnCompilerMessages { ERROR_NameMustNotContainParentheses = SevError | 0x0B9, ERROR_NameMustNotContainSquareBrackets = SevError | 0x0BA, + WARN_DeprecatedStatement = SevWarn | 0x0BB, + FATAL_BufferOverflow = SevFatal | 0x0C0 // FATAL_Break = SevFatal | 0x0C1, unused }; diff --git a/developer/src/common/web/utils/src/compiler-interfaces.ts b/developer/src/common/web/utils/src/compiler-interfaces.ts index d7081b815a..c79862842a 100644 --- a/developer/src/common/web/utils/src/compiler-interfaces.ts +++ b/developer/src/common/web/utils/src/compiler-interfaces.ts @@ -59,7 +59,7 @@ export enum CompilerErrorMask { Severity = 0x00F00000, // includes reserved bits, 16 possible severity levels Error = 0x000FFFFF, // error | namespace Namespace = 0x000FF000, // 256 possible namespaces - BaseError = 0x00000FFF, // error code, 2,048 possible error codes per namespace + BaseError = 0x00000FFF, // error code, 4,096 possible error codes per namespace Reserved = 0xFF000000, // do not use these error values at this time }; diff --git a/developer/src/common/web/utils/src/types/keylayout/keylayout-xml.ts b/developer/src/common/web/utils/src/types/keylayout/keylayout-xml.ts index 386da39fe6..75b8cf4e29 100644 --- a/developer/src/common/web/utils/src/types/keylayout/keylayout-xml.ts +++ b/developer/src/common/web/utils/src/types/keylayout/keylayout-xml.ts @@ -192,7 +192,7 @@ export interface KL_Key { * Ether the action attribute or the output attribute must be specified for a key, but not both. * kmc-convert does not use the concept of 'anonymous actions' at present. */ - action?: string; //TODO-KMC-CONVERT: Support sub-element 'anonymous actions' in the future + action?: string; /** * The output attribute specifies the character that is produced when a key is pressed. * Ether the action attribute or the output attribute must be specified for a key, but not both. diff --git a/developer/src/common/web/utils/test/fixtures/xml/strs_invalid-illegal.xml b/developer/src/common/web/utils/test/fixtures/xml/strs_invalid-illegal.xml index 3eddaffdee..270843453d 100644 --- a/developer/src/common/web/utils/test/fixtures/xml/strs_invalid-illegal.xml +++ b/developer/src/common/web/utils/test/fixtures/xml/strs_invalid-illegal.xml @@ -21,7 +21,7 @@ - + diff --git a/developer/src/common/web/utils/test/fixtures/xml/strs_invalid-illegal.xml.json b/developer/src/common/web/utils/test/fixtures/xml/strs_invalid-illegal.xml.json index e26bf18696..91c14cb129 100644 --- a/developer/src/common/web/utils/test/fixtures/xml/strs_invalid-illegal.xml.json +++ b/developer/src/common/web/utils/test/fixtures/xml/strs_invalid-illegal.xml.json @@ -41,7 +41,7 @@ ] }, "layers": { - "formId": "us", + "formId": "touch", "minDeviceWidth": "123", "layer": { "id": "￾", diff --git a/developer/src/kmc-convert/package.json b/developer/src/kmc-convert/package.json index 1adf9f42c1..bde307ed50 100644 --- a/developer/src/kmc-convert/package.json +++ b/developer/src/kmc-convert/package.json @@ -38,9 +38,6 @@ "@keymanapp/resources-gosh": "*", "@types/node": "^20.4.1", "@types/semver": "^7.3.12", - "ajv": "^8.12.0", - "ajv-cli": "^5.0.0", - "ajv-formats": "^2.1.1", "c8": "^7.12.0", "chalk": "^2.4.2", "typescript": "^5.4.5" diff --git a/developer/src/kmc-kmn/src/compiler/kmn-compiler-messages.ts b/developer/src/kmc-kmn/src/compiler/kmn-compiler-messages.ts index 06f74ae59f..c90c80c4a6 100644 --- a/developer/src/kmc-kmn/src/compiler/kmn-compiler-messages.ts +++ b/developer/src/kmc-kmn/src/compiler/kmn-compiler-messages.ts @@ -1,6 +1,6 @@ import { KeyAddress } from "../kmw-compiler/compile-layout-file.js"; import { kmnfile } from "../kmw-compiler/compiler-globals.js"; -import { CompilerErrorNamespace, CompilerErrorSeverity, CompilerEvent, CompilerMessageSpec as m, CompilerMessageObjectSpec as mx, CompilerMessageDef as def, CompilerMessageSpecWithException, KeymanUrls } from "@keymanapp/developer-utils"; +import { CompilerErrorNamespace, CompilerErrorSeverity, CompilerEvent, CompilerMessageSpec, CompilerMessageObjectSpec, CompilerMessageDef as def, CompilerMessageSpecWithException, KeymanUrls } from "@keymanapp/developer-utils"; import { ObjectWithCompileContext } from "@keymanapp/common-types"; const Namespace = CompilerErrorNamespace.KmnCompiler; const SevInfo = CompilerErrorSeverity.Info | Namespace; @@ -9,18 +9,58 @@ const SevWarn = CompilerErrorSeverity.Warn | Namespace; const SevError = CompilerErrorSeverity.Error | Namespace; const SevFatal = CompilerErrorSeverity.Fatal | Namespace; +// Because we have several overlapping components generating messages here, we +// wrap the message generation functions with a source property, in order to +// verify that we use the correct pattern as far as possible + // For messages from the KeymanWeb compiler, we need to construct our messages // slightly differently. This could be refactored in the future, as it is not // obvious which messages should use which function. // Specifically, this could perhaps use CompilerFileCallbacks which provides a // default filename. // Then, there could be a CompilerMessageSpecWithLine -const mw = (code: number, message: string, o?: {filename?: string, line?: number}) : CompilerEvent => ({ - ...m(code, message), + +// messages from kmw compiler component (mw) + +export type KmcKmnMessageSource = 'kmw-compiler' | 'kmcmplib' | 'kmc-kmn'; + +export interface KmcKmnCompilerEvent extends CompilerEvent { + kmcKmnSource: KmcKmnMessageSource; +} + +const mw = (code: number, message: string, o?: {filename?: string, line?: number}) : KmcKmnCompilerEvent => ({ + ...CompilerMessageSpec(code, message), filename: o?.filename ?? kmnfile, line: o?.line, + kmcKmnSource: "kmw-compiler", }); +// messages from kmcmplib component (mc) + +const mc = (code: number, message: string, detail?: string) : KmcKmnCompilerEvent => ({ + ...CompilerMessageSpec(code, message, detail), + kmcKmnSource: "kmcmplib", +}); + +// messages from kmc-kmn component (m, mx) + +const m = (code: number, message: string, detail?: string) : KmcKmnCompilerEvent => ({ + ...CompilerMessageSpec(code, message, detail), + kmcKmnSource: "kmc-kmn", +}); + +const mx = (code: number, context: ObjectWithCompileContext, message: string, detail?: string) : KmcKmnCompilerEvent => ({ + ...CompilerMessageObjectSpec(code, context, message, detail), + kmcKmnSource: "kmc-kmn", +}); + +const kmcKmnCompilerMessageSpecWithException = (code: number, message: string, exceptionVar: any, detail?: string): KmcKmnCompilerEvent => ({ + ...CompilerMessageSpecWithException(code, message, exceptionVar, detail), + kmcKmnSource: "kmc-kmn", +}); + +// + export const enum KmnCompilerMessageRanges { RANGE_KMN_COMPILER_MIN = 0x001, // from kmn_compiler_errors.h RANGE_KMN_COMPILER_MAX = 0x7FF, // from kmn_compiler_errors.h @@ -41,7 +81,7 @@ export function keyAddress(address: KeyAddress): string { ''))); } -type KmcmpLibMessageParameters = {p:string[]}; +export type KmcmpLibMessageParameters = {p:string[]}; /** * @internal @@ -49,31 +89,33 @@ type KmcmpLibMessageParameters = {p:string[]}; * Error messages reported by the .kmn compiler. The error codes in this class * share an address space with messages from kmn_compiler_errors.h, which are * generated by kmcmplib, so codes below 0x900 are reserved for kmcmplib - * messages. + * messages. These messages should use `m()`, `mx()`, or + * `kmcKmnCompilerMessageSpecWithException()` calls. * - * The second half of this class defines the messages from kmcmplib. These - * messages should correspond to codes in kmn_compiler_errors.h, exclusive - * severity bits. Message text is defined by kmcmplib and passed through a - * callback at this time. The message text presented here is currently unused - * during the compilation process, but is used in the `kmc messages` tool and - * for documentation. + * The second half of this class defines messages from kmcmplib or the kmw + * compiler. For historical reasons, these messages are not in separate numeric + * ranges. These messages should correspond to codes in kmn_compiler_errors.h, + * exclusive severity bits. For messages generated by kmcmplib, any parameters + * must use the KmcmpLibMessageParameters type, not named parameters. kmcmplib + * messages must use `mc()` and kmw compiler messages must use `mw()` calls. * * `CERR_` messages that are actually fatals have been renamed to `FATAL_`. * * @example * - * ``` - * kmcmplib.CERR_BadCallParams = CERR_FATAL | 0x002 = 0x8002 - * ERROR_BadCallParams = SevError | 0x0002 = 0x300000 | 0x2000 | 0x002 = 0x302002 - * ``` + *``` + * kmcmplib.CERR_BadCallParams = CERR_FATAL | 0x002 = 0x8002 + * ERROR_BadCallParams = SevError | 0x0002 = 0x300000 | 0x2000 | 0x002 = 0x302002 + *``` */ export class KmnCompilerMessages { - // TODO: v18.0 we should consider moving error message generation in kmcmplib to - // kmc-kmn, which would avoid a number of legacy issues. Questions about - // parameterisation. + + // ------------------------------------------------------------------------------------------------ + // kmc-kmn compiler messages - 0x900-0xFFF (RANGE_CompilerMessage_Min..RANGE_CompilerMessage_Max) + // ------------------------------------------------------------------------------------------------ static FATAL_UnexpectedException = SevFatal | 0x900; - static Fatal_UnexpectedException = (o:{e: any}) => CompilerMessageSpecWithException( + static Fatal_UnexpectedException = (o:{e: any}) => kmcKmnCompilerMessageSpecWithException( this.FATAL_UnexpectedException, null, o.e ?? 'unknown error', @@ -83,7 +125,7 @@ export class KmnCompilerMessages { ); static FATAL_MissingWasmModule = SevFatal | 0x901; - static Fatal_MissingWasmModule = (o:{e?: any}) => CompilerMessageSpecWithException( + static Fatal_MissingWasmModule = (o:{e?: any}) => kmcKmnCompilerMessageSpecWithException( this.FATAL_MissingWasmModule, `Could not instantiate WASM compiler module or initialization failed`, o.e ?? 'unknown error', @@ -97,7 +139,7 @@ export class KmnCompilerMessages { // static Fatal_UnableToSetCompilerOptions = () => m(this.FATAL_UnableToSetCompilerOptions, null, `Unable to set compiler options`); static FATAL_CallbacksNotSet = SevFatal | 0x903; - static Fatal_CallbacksNotSet = () => CompilerMessageSpecWithException( + static Fatal_CallbacksNotSet = () => kmcKmnCompilerMessageSpecWithException( this.FATAL_CallbacksNotSet, null, `Callbacks were not set with init`, @@ -202,560 +244,607 @@ export class KmnCompilerMessages { to the file.` ); + // + // ------------------------------------------------------------------------------------------------ + // kmcmplib messages - 0x000-0x8FF + // + // All parameters must be KmcmpLibMessageParameters type + // ------------------------------------------------------------------------------------------------ + // + // static STATUS_None = 0x000; // This is not a real error // static STATUS_EndOfFile = 0x001; // This is not a real error static FATAL_BadCallParams = SevFatal | 0x002; - static Fatal_BadCallParams = () => m(this.FATAL_BadCallParams, `CompileKeyboardFile was called with bad parameters`); + static Fatal_BadCallParams = () => mc(this.FATAL_BadCallParams, `CompileKeyboardFile was called with bad parameters`); static FATAL_CannotAllocateMemory = SevFatal | 0x004; - static Fatal_CannotAllocateMemory = () => m(this.FATAL_CannotAllocateMemory, `Out of memory`); + static Fatal_CannotAllocateMemory = () => mc(this.FATAL_CannotAllocateMemory, `Out of memory`); static ERROR_InfileNotExist = SevError | 0x005; // #10678: reduced from fatal to error in 17.0 - static Error_InfileNotExist = () => m(this.ERROR_InfileNotExist, `Cannot find the input file`); + static Error_InfileNotExist = () => mc(this.ERROR_InfileNotExist, `Cannot find the input file`); // static ERROR_CannotCreateOutfile = SevError | 0x006; // #10678: reduced from fatal to error in 17.0, but unused - // static Error_CannotCreateOutfile = () => m(this.ERROR_CannotCreateOutfile, `Cannot open output file for writing`); unused + // static Error_CannotCreateOutfile = () => mc(this.ERROR_CannotCreateOutfile, `Cannot open output file for writing`); unused // static FATAL_UnableToWriteFully = SevFatal | 0x007; - // static Fatal_UnableToWriteFully = () => m(this.FATAL_UnableToWriteFully, `Unable to write the file completely`); + // static Fatal_UnableToWriteFully = () => mc(this.FATAL_UnableToWriteFully, `Unable to write the file completely`); static ERROR_CannotReadInfile = SevError | 0x008; // #10678: reduced from fatal to error in 17.0 - static Error_CannotReadInfile = () => m(this.ERROR_CannotReadInfile, `Cannot read the input file`); + static Error_CannotReadInfile = () => mc(this.ERROR_CannotReadInfile, `Cannot read the input file`); static FATAL_SomewhereIGotItWrong = SevFatal | 0x009; - static Fatal_SomewhereIGotItWrong = () => m(this.FATAL_SomewhereIGotItWrong, `Internal error: contact Keyman`); + static Fatal_SomewhereIGotItWrong = () => mc(this.FATAL_SomewhereIGotItWrong, `Internal error: contact Keyman`); static ERROR_InvalidToken = SevError | 0x00A; - static Error_InvalidToken = () => m(this.ERROR_InvalidToken, `Invalid token found`); + static Error_InvalidToken = () => mc(this.ERROR_InvalidToken, `Invalid token found`); - // kmcmplib: static Error_InvalidBegin = () => m(this.ERROR_InvalidBegin, `Invalid 'begin' statement`); static ERROR_InvalidBegin = SevError | 0x00B; - static Error_InvalidBegin = () => mw(this.ERROR_InvalidBegin, - `A "begin unicode" statement is required to compile a KeymanWeb keyboard`); + static Error_InvalidBegin = () => mc( + this.ERROR_InvalidBegin, + `A "begin unicode" statement is required to compile a KeymanWeb keyboard`, + ); static ERROR_InvalidName = SevError | 0x00C; - static Error_InvalidName = () => m(this.ERROR_InvalidName, `Invalid 'name' statement`); + static Error_InvalidName = () => mc(this.ERROR_InvalidName, `Invalid 'name' statement`); static ERROR_InvalidVersion = SevError | 0x00D; - static Error_InvalidVersion = () => m(this.ERROR_InvalidVersion, `Invalid 'version' statement`); + static Error_InvalidVersion = () => mc(this.ERROR_InvalidVersion, `Invalid 'version' statement`); static ERROR_InvalidLanguageLine = SevError | 0x00E; - static Error_InvalidLanguageLine = () => m(this.ERROR_InvalidLanguageLine, `Invalid 'language' statement`); + static Error_InvalidLanguageLine = () => mc(this.ERROR_InvalidLanguageLine, `Invalid 'language' statement`); static ERROR_LayoutButNoLanguage = SevError | 0x00F; - static Error_LayoutButNoLanguage = () => m(this.ERROR_LayoutButNoLanguage, `Layout statement found but no language statement`); + static Error_LayoutButNoLanguage = () => mc(this.ERROR_LayoutButNoLanguage, `Layout statement found but no language statement`); static ERROR_InvalidLayoutLine = SevError | 0x010; - static Error_InvalidLayoutLine = () => m(this.ERROR_InvalidLayoutLine, `Invalid 'layout' statement`); + static Error_InvalidLayoutLine = () => mc(this.ERROR_InvalidLayoutLine, `Invalid 'layout' statement`); static ERROR_NoVersionLine = SevError | 0x011; - static Error_NoVersionLine = () => m(this.ERROR_NoVersionLine, `No version line found for file`); + static Error_NoVersionLine = () => mc(this.ERROR_NoVersionLine, `No version line found for file`); static ERROR_InvalidGroupLine = SevError | 0x012; - static Error_InvalidGroupLine = () => m(this.ERROR_InvalidGroupLine, `Invalid 'group' statement`); + static Error_InvalidGroupLine = () => mc(this.ERROR_InvalidGroupLine, `Invalid 'group' statement`); static ERROR_InvalidStoreLine = SevError | 0x013; - static Error_InvalidStoreLine = () => m(this.ERROR_InvalidStoreLine, `Invalid 'store' statement`); + static Error_InvalidStoreLine = () => mc(this.ERROR_InvalidStoreLine, `Invalid 'store' statement`); static ERROR_InvalidCodeInKeyPartOfRule = SevError | 0x014; - static Error_InvalidCodeInKeyPartOfRule = () => m(this.ERROR_InvalidCodeInKeyPartOfRule, `Invalid statement or code found in key part of rule`); + static Error_InvalidCodeInKeyPartOfRule = () => mc(this.ERROR_InvalidCodeInKeyPartOfRule, `Invalid statement or code found in key part of rule`); static ERROR_InvalidDeadkey = SevError | 0x015; - static Error_InvalidDeadkey = () => m(this.ERROR_InvalidDeadkey, `Invalid 'deadkey' or 'dk' statement`); + static Error_InvalidDeadkey = () => mc(this.ERROR_InvalidDeadkey, `Invalid 'deadkey' or 'dk' statement`); static ERROR_InvalidValue = SevError | 0x016; - static Error_InvalidValue = () => m(this.ERROR_InvalidValue, `Invalid value in extended string`); + static Error_InvalidValue = () => mc(this.ERROR_InvalidValue, `Invalid value in extended string`); static ERROR_ZeroLengthString = SevError | 0x017; - static Error_ZeroLengthString = () => m(this.ERROR_ZeroLengthString, `A string of zero characters was found`); + static Error_ZeroLengthString = () => mc(this.ERROR_ZeroLengthString, `A string of zero characters was found`); static ERROR_TooManyIndexToKeyRefs = SevError | 0x018; - static Error_TooManyIndexToKeyRefs = () => m(this.ERROR_TooManyIndexToKeyRefs, `Too many index statements refering to key string`); + static Error_TooManyIndexToKeyRefs = () => mc(this.ERROR_TooManyIndexToKeyRefs, `Too many index statements refering to key string`); static ERROR_UnterminatedString = SevError | 0x019; - static Error_UnterminatedString = () => m(this.ERROR_UnterminatedString, `Unterminated string in line`); + static Error_UnterminatedString = () => mc(this.ERROR_UnterminatedString, `Unterminated string in line`); // static ERROR_StringInVirtualKeySection = SevError | 0x01A; // no longer used, see #12612 - // static Error_StringInVirtualKeySection = () => m(this.ERROR_StringInVirtualKeySection, `extend string illegal in virtual key section`); + // static Error_StringInVirtualKeySection = () => mc(this.ERROR_StringInVirtualKeySection, `extend string illegal in virtual key section`); // static ERROR_AnyInVirtualKeySection = SevError | 0x01B; // no longer used, see #12612 - // static Error_AnyInVirtualKeySection = () => m(this.ERROR_AnyInVirtualKeySection, `'any' statement is illegal in virtual key section`); + // static Error_AnyInVirtualKeySection = () => mc(this.ERROR_AnyInVirtualKeySection, `'any' statement is illegal in virtual key section`); static ERROR_InvalidAny = SevError | 0x01C; - static Error_InvalidAny = () => m(this.ERROR_InvalidAny, `Invalid 'any' statement`); + static Error_InvalidAny = () => mc(this.ERROR_InvalidAny, `Invalid 'any' statement`); static ERROR_StoreDoesNotExist = SevError | 0x01D; - static Error_StoreDoesNotExist = () => m(this.ERROR_StoreDoesNotExist, `Store referenced does not exist`); + static Error_StoreDoesNotExist = () => mc(this.ERROR_StoreDoesNotExist, `Store referenced does not exist`); // static ERROR_BeepInVirtualKeySection = SevError | 0x01E; // no longer used, see #12612 - // static Error_BeepInVirtualKeySection = () => m(this.ERROR_BeepInVirtualKeySection, `'beep' statement is illegal in virtual key section`); + // static Error_BeepInVirtualKeySection = () => mc(this.ERROR_BeepInVirtualKeySection, `'beep' statement is illegal in virtual key section`); // static ERROR_IndexInVirtualKeySection = SevError | 0x01F; // no longer used, see #12612 - // static Error_IndexInVirtualKeySection = () => m(this.ERROR_IndexInVirtualKeySection, `'index' statement is illegal in virtual key section`); + // static Error_IndexInVirtualKeySection = () => mc(this.ERROR_IndexInVirtualKeySection, `'index' statement is illegal in virtual key section`); static ERROR_InvalidIndex = SevError | 0x020; - static Error_InvalidIndex = () => m(this.ERROR_InvalidIndex, `Invalid 'index' statement`); + static Error_InvalidIndex = () => mc(this.ERROR_InvalidIndex, `Invalid 'index' statement`); // static ERROR_OutsInVirtualKeySection = SevError | 0x021; // no longer used, see #12612 - // static Error_OutsInVirtualKeySection = () => m(this.ERROR_OutsInVirtualKeySection, `'outs' statement is illegal in virtual key section`); + // static Error_OutsInVirtualKeySection = () => mc(this.ERROR_OutsInVirtualKeySection, `'outs' statement is illegal in virtual key section`); static ERROR_InvalidOuts = SevError | 0x022; - static Error_InvalidOuts = () => m(this.ERROR_InvalidOuts, `Invalid 'outs' statement`); + static Error_InvalidOuts = () => mc(this.ERROR_InvalidOuts, `Invalid 'outs' statement`); // static ERROR_ContextInVirtualKeySection = SevError | 0x024; // no longer used, see #12612 - // static Error_ContextInVirtualKeySection = () => m(this.ERROR_ContextInVirtualKeySection, `'context' statement is illegal in virtual key section`); + // static Error_ContextInVirtualKeySection = () => mc(this.ERROR_ContextInVirtualKeySection, `'context' statement is illegal in virtual key section`); static ERROR_InvalidUse = SevError | 0x025; - static Error_InvalidUse = () => m(this.ERROR_InvalidUse, `Invalid 'use' statement`); + static Error_InvalidUse = () => mc(this.ERROR_InvalidUse, `Invalid 'use' statement`); static ERROR_GroupDoesNotExist = SevError | 0x026; - static Error_GroupDoesNotExist = () => m(this.ERROR_GroupDoesNotExist, `Group does not exist`); + static Error_GroupDoesNotExist = () => mc(this.ERROR_GroupDoesNotExist, `Group does not exist`); static ERROR_VirtualKeyNotAllowedHere = SevError | 0x027; - static Error_VirtualKeyNotAllowedHere = () => m(this.ERROR_VirtualKeyNotAllowedHere, `Virtual key is not allowed here`); + static Error_VirtualKeyNotAllowedHere = () => mc(this.ERROR_VirtualKeyNotAllowedHere, `Virtual key is not allowed here`); static ERROR_InvalidSwitch = SevError | 0x028; - static Error_InvalidSwitch = () => m(this.ERROR_InvalidSwitch, `Invalid 'switch' statement`); + static Error_InvalidSwitch = () => mc(this.ERROR_InvalidSwitch, `Invalid 'switch' statement`); static ERROR_NoTokensFound = SevError | 0x029; - static Error_NoTokensFound = () => m(this.ERROR_NoTokensFound, `No tokens found in line`); + static Error_NoTokensFound = () => mc(this.ERROR_NoTokensFound, `No tokens found in line`); static ERROR_InvalidLineContinuation = SevError | 0x02A; - static Error_InvalidLineContinuation = () => m(this.ERROR_InvalidLineContinuation, `Invalid line continuation`); + static Error_InvalidLineContinuation = () => mc(this.ERROR_InvalidLineContinuation, `Invalid line continuation`); static ERROR_LineTooLong = SevError | 0x02B; - static Error_LineTooLong = () => m(this.ERROR_LineTooLong, `Line too long`); + static Error_LineTooLong = () => mc(this.ERROR_LineTooLong, `Line too long`); static ERROR_InvalidCopyright = SevError | 0x02C; - static Error_InvalidCopyright = () => m(this.ERROR_InvalidCopyright, `Invalid 'copyright' statement`); + static Error_InvalidCopyright = () => mc(this.ERROR_InvalidCopyright, `Invalid 'copyright' statement`); static ERROR_CodeInvalidInThisSection = SevError | 0x02D; - static Error_CodeInvalidInThisSection = () => m(this.ERROR_CodeInvalidInThisSection, `This line is invalid in this section of the file`); + static Error_CodeInvalidInThisSection = () => mc(this.ERROR_CodeInvalidInThisSection, `This line is invalid in this section of the file`); static ERROR_InvalidMessage = SevError | 0x02E; - static Error_InvalidMessage = () => m(this.ERROR_InvalidMessage, `Invalid 'message' statement`); + static Error_InvalidMessage = () => mc(this.ERROR_InvalidMessage, `Invalid 'message' statement`); static ERROR_InvalidLanguageName = SevError | 0x02F; - static Error_InvalidLanguageName = () => m(this.ERROR_InvalidLanguageName, `Invalid 'languagename' statement`); + static Error_InvalidLanguageName = () => mc(this.ERROR_InvalidLanguageName, `Invalid 'languagename' statement`); static ERROR_InvalidBitmapLine = SevError | 0x030; - static Error_InvalidBitmapLine = () => m(this.ERROR_InvalidBitmapLine, `Invalid 'bitmaps' statement`); + static Error_InvalidBitmapLine = () => mc(this.ERROR_InvalidBitmapLine, `Invalid 'bitmaps' statement`); static ERROR_CannotReadBitmapFile = SevError | 0x031; - static Error_CannotReadBitmapFile = () => m(this.ERROR_CannotReadBitmapFile, `Cannot open the bitmap or icon file for reading`); + static Error_CannotReadBitmapFile = () => mc(this.ERROR_CannotReadBitmapFile, `Cannot open the bitmap or icon file for reading`); static ERROR_IndexDoesNotPointToAny = SevError | 0x032; - static Error_IndexDoesNotPointToAny = () => m(this.ERROR_IndexDoesNotPointToAny, `An index() in the output does not have a corresponding any() statement`); + static Error_IndexDoesNotPointToAny = () => mc(this.ERROR_IndexDoesNotPointToAny, `An index() in the output does not have a corresponding any() statement`); static ERROR_ReservedCharacter = SevError | 0x033; - static Error_ReservedCharacter = () => m(this.ERROR_ReservedCharacter, `A reserved character was found`); + static Error_ReservedCharacter = () => mc(this.ERROR_ReservedCharacter, `A reserved character was found`); static ERROR_InvalidCharacter = SevError | 0x034; - static Error_InvalidCharacter = () => m(this.ERROR_InvalidCharacter, `A character was found that is outside the valid Unicode range (U+0000 - U+10FFFF)`); + static Error_InvalidCharacter = () => mc(this.ERROR_InvalidCharacter, `A character was found that is outside the valid Unicode range (U+0000 - U+10FFFF)`); static ERROR_InvalidCall = SevError | 0x035; - static Error_InvalidCall = () => m(this.ERROR_InvalidCall, `The 'call' statement is invalid`); + static Error_InvalidCall = () => mc(this.ERROR_InvalidCall, `The 'call' statement is invalid`); // static ERROR_CallInVirtualKeySection = SevError | 0x036; // no longer used, see #12612 - // static Error_CallInVirtualKeySection = () => m(this.ERROR_CallInVirtualKeySection, `'call' statement is illegal in virtual key section`); + // static Error_CallInVirtualKeySection = () => mc(this.ERROR_CallInVirtualKeySection, `'call' statement is illegal in virtual key section`); static ERROR_CodeInvalidInKeyStore = SevError | 0x037; - static Error_CodeInvalidInKeyStore = () => m(this.ERROR_CodeInvalidInKeyStore, `The statement is invalid inside a store that is used in a key part of the rule`); + static Error_CodeInvalidInKeyStore = () => mc(this.ERROR_CodeInvalidInKeyStore, `The statement is invalid inside a store that is used in a key part of the rule`); static ERROR_CannotLoadIncludeFile = SevError | 0x038; - static Error_CannotLoadIncludeFile = () => m(this.ERROR_CannotLoadIncludeFile, `Cannot load the included file: it is either invalid or does not exist`); + static Error_CannotLoadIncludeFile = () => mc(this.ERROR_CannotLoadIncludeFile, `Cannot load the included file: it is either invalid or does not exist`); static ERROR_60FeatureOnly_EthnologueCode = SevError | 0x039; - static Error_60FeatureOnly_EthnologueCode = () => m(this.ERROR_60FeatureOnly_EthnologueCode, `EthnologueCode system store requires VERSION 6.0 or higher`); + static Error_60FeatureOnly_EthnologueCode = () => mc(this.ERROR_60FeatureOnly_EthnologueCode, `EthnologueCode system store requires VERSION 6.0 or higher`); static ERROR_60FeatureOnly_MnemonicLayout = SevError | 0x03A; - static Error_60FeatureOnly_MnemonicLayout = () => m(this.ERROR_60FeatureOnly_MnemonicLayout, `MnemonicLayout functionality requires VERSION 6.0 or higher`); + static Error_60FeatureOnly_MnemonicLayout = () => mc(this.ERROR_60FeatureOnly_MnemonicLayout, `MnemonicLayout functionality requires VERSION 6.0 or higher`); static ERROR_60FeatureOnly_OldCharPosMatching = SevError | 0x03B; - static Error_60FeatureOnly_OldCharPosMatching = () => m(this.ERROR_60FeatureOnly_OldCharPosMatching, `OldCharPosMatching system store requires VERSION 6.0 or higher`); + static Error_60FeatureOnly_OldCharPosMatching = () => mc(this.ERROR_60FeatureOnly_OldCharPosMatching, `OldCharPosMatching system store requires VERSION 6.0 or higher`); static ERROR_60FeatureOnly_NamedCodes = SevError | 0x03C; - static Error_60FeatureOnly_NamedCodes = () => m(this.ERROR_60FeatureOnly_NamedCodes, `Named character constants requires VERSION 6.0 or higher`); + static Error_60FeatureOnly_NamedCodes = () => mc(this.ERROR_60FeatureOnly_NamedCodes, `Named character constants requires VERSION 6.0 or higher`); static ERROR_60FeatureOnly_Contextn = SevError | 0x03D; - static Error_60FeatureOnly_Contextn = () => m(this.ERROR_60FeatureOnly_Contextn, `Context(n) requires VERSION 6.0 or higher`); + static Error_60FeatureOnly_Contextn = () => mc(this.ERROR_60FeatureOnly_Contextn, `Context(n) requires VERSION 6.0 or higher`); static ERROR_501FeatureOnly_Call = SevError | 0x03E; - static Error_501FeatureOnly_Call = () => m(this.ERROR_501FeatureOnly_Call, `Call() requires VERSION 5.01 or higher`); + static Error_501FeatureOnly_Call = () => mc(this.ERROR_501FeatureOnly_Call, `Call() requires VERSION 5.01 or higher`); static ERROR_InvalidNamedCode = SevError | 0x03F; - static Error_InvalidNamedCode = () => m(this.ERROR_InvalidNamedCode, `Invalid named code constant`); + static Error_InvalidNamedCode = () => mc(this.ERROR_InvalidNamedCode, `Invalid named code constant`); static ERROR_InvalidSystemStore = SevError | 0x040; - static Error_InvalidSystemStore = () => m(this.ERROR_InvalidSystemStore, `Invalid system store name found`); + static Error_InvalidSystemStore = () => mc(this.ERROR_InvalidSystemStore, `Invalid system store name found`); static ERROR_60FeatureOnly_VirtualCharKey = SevError | 0x044; - static Error_60FeatureOnly_VirtualCharKey = () => m(this.ERROR_60FeatureOnly_VirtualCharKey, `Virtual character keys require VERSION 6.0 or higher`); + static Error_60FeatureOnly_VirtualCharKey = () => mc(this.ERROR_60FeatureOnly_VirtualCharKey, `Virtual character keys require VERSION 6.0 or higher`); static ERROR_VersionAlreadyIncluded = SevError | 0x045; - static Error_VersionAlreadyIncluded = () => m(this.ERROR_VersionAlreadyIncluded, `Only one VERSION or store(version) line allowed in a source file.`); + static Error_VersionAlreadyIncluded = () => mc(this.ERROR_VersionAlreadyIncluded, `Only one VERSION or store(version) line allowed in a source file.`); static ERROR_70FeatureOnly = SevError | 0x046; - static Error_70FeatureOnly = () => m(this.ERROR_70FeatureOnly, `This feature requires store(version) '7.0' or higher`); + static Error_70FeatureOnly = () => mc(this.ERROR_70FeatureOnly, `This feature requires store(version) '7.0' or higher`); static ERROR_80FeatureOnly = SevError | 0x047; - static Error_80FeatureOnly = () => m(this.ERROR_80FeatureOnly, `This feature requires store(version) '8.0' or higher`); + static Error_80FeatureOnly = () => mc(this.ERROR_80FeatureOnly, `This feature requires store(version) '8.0' or higher`); // static ERROR_InvalidInVirtualKeySection = SevError | 0x048; // no longer used, see #12612 - // static Error_InvalidInVirtualKeySection = () => m(this.ERROR_InvalidInVirtualKeySection, `This statement is not valid in a virtual key section`); + // static Error_InvalidInVirtualKeySection = () => mc(this.ERROR_InvalidInVirtualKeySection, `This statement is not valid in a virtual key section`); static ERROR_InvalidIf = SevError | 0x049; - static Error_InvalidIf = () => m(this.ERROR_InvalidIf, `The if() statement is not valid`); + static Error_InvalidIf = () => mc(this.ERROR_InvalidIf, `The if() statement is not valid`); static ERROR_InvalidReset = SevError | 0x04A; - static Error_InvalidReset = () => m(this.ERROR_InvalidReset, `The reset() statement is not valid`); + static Error_InvalidReset = () => mc(this.ERROR_InvalidReset, `The reset() statement is not valid`); static ERROR_InvalidSet = SevError | 0x04B; - static Error_InvalidSet = () => m(this.ERROR_InvalidSet, `The set() statement is not valid`); + static Error_InvalidSet = () => mc(this.ERROR_InvalidSet, `The set() statement is not valid`); static ERROR_InvalidSave = SevError | 0x04C; - static Error_InvalidSave = () => m(this.ERROR_InvalidSave, `The save() statement is not valid`); + static Error_InvalidSave = () => mc(this.ERROR_InvalidSave, `The save() statement is not valid`); static ERROR_InvalidEthnologueCode = SevError | 0x04D; - static Error_InvalidEthnologueCode = () => m(this.ERROR_InvalidEthnologueCode, `Invalid ethnologuecode format`); + static Error_InvalidEthnologueCode = () => mc(this.ERROR_InvalidEthnologueCode, `Invalid ethnologuecode format`); static FATAL_CannotCreateTempfile = SevFatal | 0x04E; - static Fatal_CannotCreateTempfile = () => m(this.FATAL_CannotCreateTempfile, `Cannot create temp file`); + static Fatal_CannotCreateTempfile = () => mc(this.FATAL_CannotCreateTempfile, `Cannot create temp file`); static ERROR_90FeatureOnly_IfSystemStores = SevError | 0x04F; - static Error_90FeatureOnly_IfSystemStores = () => m(this.ERROR_90FeatureOnly_IfSystemStores, `if(store) requires store(version) '9.0' or higher`); + static Error_90FeatureOnly_IfSystemStores = () => mc(this.ERROR_90FeatureOnly_IfSystemStores, `if(store) requires store(version) '9.0' or higher`); static ERROR_IfSystemStore_NotFound = SevError | 0x050; - static Error_IfSystemStore_NotFound = () => m(this.ERROR_IfSystemStore_NotFound, `System store in if() not found`); + static Error_IfSystemStore_NotFound = () => mc(this.ERROR_IfSystemStore_NotFound, `System store in if() not found`); static ERROR_90FeatureOnly_SetSystemStores = SevError | 0x051; - static Error_90FeatureOnly_SetSystemStores = () => m(this.ERROR_90FeatureOnly_SetSystemStores, `set(store) requires store(version) '9.0' or higher`); + static Error_90FeatureOnly_SetSystemStores = () => mc(this.ERROR_90FeatureOnly_SetSystemStores, `set(store) requires store(version) '9.0' or higher`); static ERROR_SetSystemStore_NotFound = SevError | 0x052; - static Error_SetSystemStore_NotFound = () => m(this.ERROR_SetSystemStore_NotFound, `System store in set() not found`); + static Error_SetSystemStore_NotFound = () => mc(this.ERROR_SetSystemStore_NotFound, `System store in set() not found`); static ERROR_90FeatureOnlyVirtualKeyDictionary = SevError | 0x053; - static Error_90FeatureOnlyVirtualKeyDictionary = () => m(this.ERROR_90FeatureOnlyVirtualKeyDictionary, `Custom virtual key names require store(version) '9.0'`); + static Error_90FeatureOnlyVirtualKeyDictionary = () => mc(this.ERROR_90FeatureOnlyVirtualKeyDictionary, `Custom virtual key names require store(version) '9.0'`); static ERROR_NotSupportedInKeymanWebContext = SevError | 0x054; - static Error_NotSupportedInKeymanWebContext = (o:{line:number, code:String}) => mw(this.ERROR_NotSupportedInKeymanWebContext, - `Statement '${def(o.code)}' is not currently supported in context for web and touch targets`, o); + static Error_NotSupportedInKeymanWebContext = (o:{line:number, code:String}) => mw( + this.ERROR_NotSupportedInKeymanWebContext, + `Statement '${def(o.code)}' is not currently supported in context for web and touch targets`, o, + ); static ERROR_NotSupportedInKeymanWebOutput = SevError | 0x055; - static Error_NotSupportedInKeymanWebOutput = (o:{line:number, code:string}) => mw(this.ERROR_NotSupportedInKeymanWebOutput, - `Statement '${def(o.code)}' is not currently supported in output for web and touch targets`, o); + static Error_NotSupportedInKeymanWebOutput = (o:{line:number, code:string}) => mw( + this.ERROR_NotSupportedInKeymanWebOutput, + `Statement '${def(o.code)}' is not currently supported in output for web and touch targets`, o, + ); static ERROR_NotSupportedInKeymanWebStore = SevError | 0x056; - static Error_NotSupportedInKeymanWebStore = (o:{code:string,store:string}) => mw(this.ERROR_NotSupportedInKeymanWebStore, - `'${def(o.code)}' is not currently supported in store '${def(o.store)}' when used by any or index for web and touch targets`); + static Error_NotSupportedInKeymanWebStore = (o:{code:string,store:string}) => mw( + this.ERROR_NotSupportedInKeymanWebStore, + `'${def(o.code)}' is not currently supported in store '${def(o.store)}' when used by any or index for web and touch targets`, + ); static ERROR_VirtualCharacterKeysNotSupportedInKeymanWeb = SevError | 0x057; - static Error_VirtualCharacterKeysNotSupportedInKeymanWeb = (o:{line:number}) => mw(this.ERROR_VirtualCharacterKeysNotSupportedInKeymanWeb, - `Virtual character keys not currently supported in KeymanWeb`, o); + static Error_VirtualCharacterKeysNotSupportedInKeymanWeb = (o:{line:number}) => mw( + this.ERROR_VirtualCharacterKeysNotSupportedInKeymanWeb, + `Virtual character keys not currently supported in KeymanWeb`, o, + ); static ERROR_VirtualKeysNotValidForMnemonicLayouts = SevError | 0x058; - static Error_VirtualKeysNotValidForMnemonicLayouts = (o:{line:number}) => mw(this.ERROR_VirtualKeysNotValidForMnemonicLayouts, - `Virtual keys are not valid for mnemonic layouts`, o); + static Error_VirtualKeysNotValidForMnemonicLayouts = (o:{line:number}) => mw( + this.ERROR_VirtualKeysNotValidForMnemonicLayouts, + `Virtual keys are not valid for mnemonic layouts`, o, + ); static ERROR_InvalidTouchLayoutFile = SevError | 0x059; - static Error_InvalidTouchLayoutFile = (o:{filename:string}) => mw(this.ERROR_InvalidTouchLayoutFile, - `Touch layout file ${def(o.filename)} is not valid`); + static Error_InvalidTouchLayoutFile = (o:{filename:string}) => mw( + this.ERROR_InvalidTouchLayoutFile, + `Touch layout file ${def(o.filename)} is not valid`, + ); static ERROR_TouchLayoutInvalidIdentifier = SevError | 0x05A; - static Error_TouchLayoutInvalidIdentifier = (o:{keyId:string, platformName: string, layerId:string, address:KeyAddress}) => mw(this.ERROR_TouchLayoutInvalidIdentifier, - `Key "${def(o.keyId)}" on "${def(o.platformName)}", layer "${def(o.layerId)}" (${keyAddress(o.address)}) has an invalid identifier.`); + static Error_TouchLayoutInvalidIdentifier = (o:{keyId:string, platformName: string, layerId:string, address:KeyAddress}) => mw( + this.ERROR_TouchLayoutInvalidIdentifier, + `Key "${def(o.keyId)}" on "${def(o.platformName)}", layer "${def(o.layerId)}" (${keyAddress(o.address)}) has an invalid identifier.`, + ); static ERROR_InvalidKeyCode = SevError | 0x05B; - static Error_InvalidKeyCode = (o:{keyId: string}) => mw(this.ERROR_InvalidKeyCode, - `Invalid key identifier "${def(o.keyId)}"`); + static Error_InvalidKeyCode = (o:{keyId: string}) => mw(this.ERROR_InvalidKeyCode, + `Invalid key identifier "${def(o.keyId)}"`, + ); static ERROR_90FeatureOnlyLayoutFile = SevError | 0x05C; - static Error_90FeatureOnlyLayoutFile = () => m(this.ERROR_90FeatureOnlyLayoutFile, `Touch layout file reference requires store(version) '9.0' or higher`); + static Error_90FeatureOnlyLayoutFile = () => mc(this.ERROR_90FeatureOnlyLayoutFile, `Touch layout file reference requires store(version) '9.0' or higher`); static ERROR_90FeatureOnlyKeyboardVersion = SevError | 0x05D; - static Error_90FeatureOnlyKeyboardVersion = () => m(this.ERROR_90FeatureOnlyKeyboardVersion, `KeyboardVersion system store requires store(version) '9.0' or higher`); + static Error_90FeatureOnlyKeyboardVersion = () => mc(this.ERROR_90FeatureOnlyKeyboardVersion, `KeyboardVersion system store requires store(version) '9.0' or higher`); static ERROR_KeyboardVersionFormatInvalid = SevError | 0x05E; - static Error_KeyboardVersionFormatInvalid = () => m(this.ERROR_KeyboardVersionFormatInvalid, `KeyboardVersion format is invalid, expecting dot-separated integers`); + static Error_KeyboardVersionFormatInvalid = () => mc(this.ERROR_KeyboardVersionFormatInvalid, `KeyboardVersion format is invalid, expecting dot-separated integers`); static ERROR_ContextExHasInvalidOffset = SevError | 0x05F; - static Error_ContextExHasInvalidOffset = () => m(this.ERROR_ContextExHasInvalidOffset, `context() statement has offset out of range`); + static Error_ContextExHasInvalidOffset = () => mc(this.ERROR_ContextExHasInvalidOffset, `context() statement has offset out of range`); static ERROR_90FeatureOnlyEmbedCSS = SevError | 0x060; - static Error_90FeatureOnlyEmbedCSS = () => m(this.ERROR_90FeatureOnlyEmbedCSS, `Embedding CSS requires store(version) '9.0' or higher`); + static Error_90FeatureOnlyEmbedCSS = () => mc(this.ERROR_90FeatureOnlyEmbedCSS, `Embedding CSS requires store(version) '9.0' or higher`); static ERROR_90FeatureOnlyTargets = SevError | 0x061; - static Error_90FeatureOnlyTargets = () => m(this.ERROR_90FeatureOnlyTargets, `TARGETS system store requires store(version) '9.0' or higher`); + static Error_90FeatureOnlyTargets = () => mc(this.ERROR_90FeatureOnlyTargets, `TARGETS system store requires store(version) '9.0' or higher`); static ERROR_ContextAndIndexInvalidInMatchNomatch = SevError | 0x062; - static Error_ContextAndIndexInvalidInMatchNomatch = () => m(this.ERROR_ContextAndIndexInvalidInMatchNomatch, `context and index statements cannot be used in a match or nomatch statement`); + static Error_ContextAndIndexInvalidInMatchNomatch = () => mc(this.ERROR_ContextAndIndexInvalidInMatchNomatch, `context and index statements cannot be used in a match or nomatch statement`); static ERROR_140FeatureOnlyContextAndNotAnyWeb = SevError | 0x063; - static Error_140FeatureOnlyContextAndNotAnyWeb = () => m(this.ERROR_140FeatureOnlyContextAndNotAnyWeb, `For web and touch platforms, context() statement referring to notany() requires store(version) '14.0' or higher`); + static Error_140FeatureOnlyContextAndNotAnyWeb = () => mc(this.ERROR_140FeatureOnlyContextAndNotAnyWeb, `For web and touch platforms, context() statement referring to notany() requires store(version) '14.0' or higher`); static ERROR_ExpansionMustFollowCharacterOrVKey = SevError | 0x064; - static Error_ExpansionMustFollowCharacterOrVKey = () => m(this.ERROR_ExpansionMustFollowCharacterOrVKey, `An expansion must follow a character or a virtual key`); + static Error_ExpansionMustFollowCharacterOrVKey = () => mc(this.ERROR_ExpansionMustFollowCharacterOrVKey, `An expansion must follow a character or a virtual key`); static ERROR_VKeyExpansionMustBeFollowedByVKey = SevError | 0x065; - static Error_VKeyExpansionMustBeFollowedByVKey = () => m(this.ERROR_VKeyExpansionMustBeFollowedByVKey, `A virtual key expansion must be terminated by a virtual key`); + static Error_VKeyExpansionMustBeFollowedByVKey = () => mc(this.ERROR_VKeyExpansionMustBeFollowedByVKey, `A virtual key expansion must be terminated by a virtual key`); static ERROR_CharacterExpansionMustBeFollowedByCharacter = SevError | 0x066; - static Error_CharacterExpansionMustBeFollowedByCharacter = () => m(this.ERROR_CharacterExpansionMustBeFollowedByCharacter, `A character expansion must be terminated by a character key`); + static Error_CharacterExpansionMustBeFollowedByCharacter = () => mc(this.ERROR_CharacterExpansionMustBeFollowedByCharacter, `A character expansion must be terminated by a character key`); static ERROR_VKeyExpansionMustUseConsistentShift = SevError | 0x067; - static Error_VKeyExpansionMustUseConsistentShift = () => m(this.ERROR_VKeyExpansionMustUseConsistentShift, `A virtual key expansion must use the same shift state for both terminators`); + static Error_VKeyExpansionMustUseConsistentShift = () => mc(this.ERROR_VKeyExpansionMustUseConsistentShift, `A virtual key expansion must use the same shift state for both terminators`); static ERROR_ExpansionMustBePositive = SevError | 0x068; - static Error_ExpansionMustBePositive = () => m(this.ERROR_ExpansionMustBePositive, `An expansion must have positive difference (i.e. A-Z, not Z-A)`); + static Error_ExpansionMustBePositive = () => mc(this.ERROR_ExpansionMustBePositive, `An expansion must have positive difference (i.e. A-Z, not Z-A)`); static ERROR_CasedKeysMustContainOnlyVirtualKeys = SevError | 0x069; - static Error_CasedKeysMustContainOnlyVirtualKeys = () => m(this.ERROR_CasedKeysMustContainOnlyVirtualKeys, `The &CasedKeys system store must contain only virtual keys or characters found on a US English keyboard`); + static Error_CasedKeysMustContainOnlyVirtualKeys = () => mc(this.ERROR_CasedKeysMustContainOnlyVirtualKeys, `The &CasedKeys system store must contain only virtual keys or characters found on a US English keyboard`); static ERROR_CasedKeysMustNotIncludeShiftStates = SevError | 0x06A; - static Error_CasedKeysMustNotIncludeShiftStates = () => m(this.ERROR_CasedKeysMustNotIncludeShiftStates, `The &CasedKeys system store must not include shift states`); + static Error_CasedKeysMustNotIncludeShiftStates = () => mc(this.ERROR_CasedKeysMustNotIncludeShiftStates, `The &CasedKeys system store must not include shift states`); static ERROR_CasedKeysNotSupportedWithMnemonicLayout = SevError | 0x06B; - static Error_CasedKeysNotSupportedWithMnemonicLayout = () => m(this.ERROR_CasedKeysNotSupportedWithMnemonicLayout, `The &CasedKeys system store is not supported with mnemonic layouts`); + static Error_CasedKeysNotSupportedWithMnemonicLayout = () => mc(this.ERROR_CasedKeysNotSupportedWithMnemonicLayout, `The &CasedKeys system store is not supported with mnemonic layouts`); static ERROR_CannotUseReadWriteGroupFromReadonlyGroup = SevError | 0x06C; - static Error_CannotUseReadWriteGroupFromReadonlyGroup = () => m(this.ERROR_CannotUseReadWriteGroupFromReadonlyGroup, `Group used from a readonly group must also be readonly`); + static Error_CannotUseReadWriteGroupFromReadonlyGroup = () => mc(this.ERROR_CannotUseReadWriteGroupFromReadonlyGroup, `Group used from a readonly group must also be readonly`); static ERROR_StatementNotPermittedInReadonlyGroup = SevError | 0x06D; - static Error_StatementNotPermittedInReadonlyGroup = () => m(this.ERROR_StatementNotPermittedInReadonlyGroup, `Statement is not permitted in output of readonly group`); + static Error_StatementNotPermittedInReadonlyGroup = () => mc(this.ERROR_StatementNotPermittedInReadonlyGroup, `Statement is not permitted in output of readonly group`); static ERROR_OutputInReadonlyGroup = SevError | 0x06E; - static Error_OutputInReadonlyGroup = () => m(this.ERROR_OutputInReadonlyGroup, `Output is not permitted in a readonly group`); + static Error_OutputInReadonlyGroup = () => mc(this.ERROR_OutputInReadonlyGroup, `Output is not permitted in a readonly group`); static ERROR_NewContextGroupMustBeReadonly = SevError | 0x06F; - static Error_NewContextGroupMustBeReadonly = () => m(this.ERROR_NewContextGroupMustBeReadonly, `Group used in begin newContext must be readonly`); + static Error_NewContextGroupMustBeReadonly = () => mc(this.ERROR_NewContextGroupMustBeReadonly, `Group used in begin newContext must be readonly`); static ERROR_PostKeystrokeGroupMustBeReadonly = SevError | 0x070; - static Error_PostKeystrokeGroupMustBeReadonly = () => m(this.ERROR_PostKeystrokeGroupMustBeReadonly, `Group used in begin postKeystroke must be readonly`); + static Error_PostKeystrokeGroupMustBeReadonly = () => mc(this.ERROR_PostKeystrokeGroupMustBeReadonly, `Group used in begin postKeystroke must be readonly`); static ERROR_DuplicateGroup = SevError | 0x071; - static Error_DuplicateGroup = (o:KmcmpLibMessageParameters) => m( + static Error_DuplicateGroup = (o:KmcmpLibMessageParameters) => mc( this.ERROR_DuplicateGroup, `A group with the name '${o.p?.[0]}' has already been defined on line ${o.p?.[1]}.` ); static ERROR_DuplicateStore = SevError | 0x072; - static Error_DuplicateStore = (o:KmcmpLibMessageParameters) => m( + static Error_DuplicateStore = (o:KmcmpLibMessageParameters) => mc( this.ERROR_DuplicateStore, `A store with the name '${o.p?.[0]}' has already been defined on line ${o.p?.[1]}.` ); static ERROR_RepeatedBegin = SevError | 0x073; - static Error_RepeatedBegin = () => m(this.ERROR_RepeatedBegin, `Begin has already been set`); + static Error_RepeatedBegin = () => mc(this.ERROR_RepeatedBegin, `Begin has already been set`); static ERROR_VirtualKeyInContext = SevError | 0x074; - static Error_VirtualKeyInContext = () => m(this.ERROR_VirtualKeyInContext, `Virtual keys are not permitted in context`); + static Error_VirtualKeyInContext = () => mc(this.ERROR_VirtualKeyInContext, `Virtual keys are not permitted in context`); static ERROR_OutsTooLong = SevError | 0x075; - static Error_OutsTooLong = () => m(this.ERROR_OutsTooLong, `Store cannot be inserted with outs() as it makes the extended string too long`); + static Error_OutsTooLong = () => mc(this.ERROR_OutsTooLong, `Store cannot be inserted with outs() as it makes the extended string too long`); static ERROR_ExtendedStringTooLong = SevError | 0x076; - static Error_ExtendedStringTooLong = () => m(this.ERROR_ExtendedStringTooLong, `Extended string is too long`); + static Error_ExtendedStringTooLong = () => mc(this.ERROR_ExtendedStringTooLong, `Extended string is too long`); static ERROR_VirtualKeyExpansionTooLong = SevError | 0x077; - static Error_VirtualKeyExpansionTooLong = () => m(this.ERROR_VirtualKeyExpansionTooLong, `Virtual key expansion is too large`); + static Error_VirtualKeyExpansionTooLong = () => mc(this.ERROR_VirtualKeyExpansionTooLong, `Virtual key expansion is too large`); static ERROR_CharacterRangeTooLong = SevError | 0x078; - static Error_CharacterRangeTooLong = () => m(this.ERROR_CharacterRangeTooLong, `Character range is too large and cannot be expanded`); + static Error_CharacterRangeTooLong = () => mc(this.ERROR_CharacterRangeTooLong, `Character range is too large and cannot be expanded`); static ERROR_NonBMPCharactersNotSupportedInKeySection = SevError | 0x079; - static Error_NonBMPCharactersNotSupportedInKeySection = () => m(this.ERROR_NonBMPCharactersNotSupportedInKeySection, `Characters with codepoints over U+FFFF are not supported in the key part of the rule`); + static Error_NonBMPCharactersNotSupportedInKeySection = () => mc(this.ERROR_NonBMPCharactersNotSupportedInKeySection, `Characters with codepoints over U+FFFF are not supported in the key part of the rule`); static ERROR_InvalidTarget = SevError | 0x07A; - static Error_InvalidTarget = (o:KmcmpLibMessageParameters) => m( + static Error_InvalidTarget = (o:KmcmpLibMessageParameters) => mc( this.ERROR_InvalidTarget, `Unrecognized compile target '${o.p?.[0]}'` ); static ERROR_NoTargetsSpecified = SevError | 0x07B; - static Error_NoTargetsSpecified = () => m(this.ERROR_NoTargetsSpecified, `At least one compile target must be specified`); + static Error_NoTargetsSpecified = () => mc(this.ERROR_NoTargetsSpecified, `At least one compile target must be specified`); static WARN_TooManyWarnings = SevWarn | 0x080; - static Warn_TooManyWarnings = () => m(this.WARN_TooManyWarnings, `Too many warnings or errors`); + static Warn_TooManyWarnings = () => mc(this.WARN_TooManyWarnings, `Too many warnings or errors`); static WARN_OldVersion = SevWarn | 0x081; - static Warn_OldVersion = () => m(this.WARN_OldVersion, `The keyboard file is an old version`); + static Warn_OldVersion = () => mc(this.WARN_OldVersion, `The keyboard file is an old version`); static WARN_BitmapNotUsed = SevWarn | 0x082; - static Warn_BitmapNotUsed = () => m(this.WARN_BitmapNotUsed, `The 'bitmaps' statement is obsolete and only the first bitmap referred to will be used, you should use 'bitmap'.`); + static Warn_BitmapNotUsed = () => mc(this.WARN_BitmapNotUsed, `The 'bitmaps' statement is obsolete and only the first bitmap referred to will be used, you should use 'bitmap'.`); static WARN_CustomLanguagesNotSupported = SevWarn | 0x083; - static Warn_CustomLanguagesNotSupported = () => m(this.WARN_CustomLanguagesNotSupported, `Languages over 0x1FF, 0x1F are not supported correctly by Windows. You should use no LANGUAGE line instead.`); + static Warn_CustomLanguagesNotSupported = () => mc(this.WARN_CustomLanguagesNotSupported, `Languages over 0x1FF, 0x1F are not supported correctly by Windows. You should use no LANGUAGE line instead.`); static WARN_KeyBadLength = SevWarn | 0x084; - static Warn_KeyBadLength = () => m(this.WARN_KeyBadLength, `There are too many characters in the keystroke part of the rule.`); + static Warn_KeyBadLength = () => mc(this.WARN_KeyBadLength, `There are too many characters in the keystroke part of the rule.`); static WARN_IndexStoreShort = SevWarn | 0x085; - static Warn_IndexStoreShort = () => m(this.WARN_IndexStoreShort, `The store referenced in index() is shorter than the store referenced in any()`); + static Warn_IndexStoreShort = () => mc(this.WARN_IndexStoreShort, `The store referenced in index() is shorter than the store referenced in any()`); static WARN_UnicodeInANSIGroup = SevWarn | 0x086; - static Warn_UnicodeInANSIGroup = () => m(this.WARN_UnicodeInANSIGroup, `A Unicode character was found in an ANSI group`); + static Warn_UnicodeInANSIGroup = () => mc(this.WARN_UnicodeInANSIGroup, `A Unicode character was found in an ANSI group`); static WARN_ANSIInUnicodeGroup = SevWarn | 0x087; - static Warn_ANSIInUnicodeGroup = () => m(this.WARN_ANSIInUnicodeGroup, `An ANSI character was found in a Unicode group`); + static Warn_ANSIInUnicodeGroup = () => mc(this.WARN_ANSIInUnicodeGroup, `An ANSI character was found in a Unicode group`); static WARN_UnicodeSurrogateUsed = SevWarn | 0x088; - static Warn_UnicodeSurrogateUsed = () => m(this.WARN_UnicodeSurrogateUsed, `A Unicode surrogate character was found. You should use Unicode scalar values to represent values > U+FFFF`); + static Warn_UnicodeSurrogateUsed = () => mc(this.WARN_UnicodeSurrogateUsed, `A Unicode surrogate character was found. You should use Unicode scalar values to represent values > U+FFFF`); static WARN_ReservedCharacter = SevWarn | 0x089; - static Warn_ReservedCharacter = () => m(this.WARN_ReservedCharacter, `A Unicode character was found that should not be used`); + static Warn_ReservedCharacter = () => mc(this.WARN_ReservedCharacter, `A Unicode character was found that should not be used`); - static INFO_MinimumCoreEngineVersion = SevInfo | 0x08A; - static Info_MinimumCoreEngineVersion = (o:KmcmpLibMessageParameters) => m( + static INFO_MinimumCoreEngineVersion = SevInfo | 0x08A; + static Info_MinimumCoreEngineVersion = (o:KmcmpLibMessageParameters) => mc( this.INFO_MinimumCoreEngineVersion, - `The compiler has assigned a minimum engine version of ${o.p?.[0]}.${o.p?.[1]} based on features used in this keyboard` + `The compiler has assigned a minimum engine version of ${o.p?.[0]}.${o.p?.[1]} based on features used in this keyboard`, ); static WARN_VirtualKeyWithMnemonicLayout = SevWarn | 0x08B; - static Warn_VirtualKeyWithMnemonicLayout = () => m(this.WARN_VirtualKeyWithMnemonicLayout, `Virtual key used instead of virtual character key with a mnemonic layout`); + static Warn_VirtualKeyWithMnemonicLayout = () => mc(this.WARN_VirtualKeyWithMnemonicLayout, `Virtual key used instead of virtual character key with a mnemonic layout`); static WARN_VirtualCharKeyWithPositionalLayout = SevWarn | 0x08C; - static Warn_VirtualCharKeyWithPositionalLayout = () => m(this.WARN_VirtualCharKeyWithPositionalLayout, `Virtual character key used with a positional layout instead of mnemonic layout`); + static Warn_VirtualCharKeyWithPositionalLayout = () => mc(this.WARN_VirtualCharKeyWithPositionalLayout, `Virtual character key used with a positional layout instead of mnemonic layout`); static WARN_StoreAlreadyUsedAsOptionOrCall = SevWarn | 0x08D; - static Warn_StoreAlreadyUsedAsOptionOrCall = () => m(this.WARN_StoreAlreadyUsedAsOptionOrCall, `Store already used as an option or in a call statement and should not be used as a normal store`); + static Warn_StoreAlreadyUsedAsOptionOrCall = () => mc(this.WARN_StoreAlreadyUsedAsOptionOrCall, `Store already used as an option or in a call statement and should not be used as a normal store`); static WARN_StoreAlreadyUsedAsStoreOrCall = SevWarn | 0x08E; - static Warn_StoreAlreadyUsedAsStoreOrCall = () => m(this.WARN_StoreAlreadyUsedAsStoreOrCall, `Store already used as a normal store or in a call statement and should not be used as an option`); + static Warn_StoreAlreadyUsedAsStoreOrCall = () => mc(this.WARN_StoreAlreadyUsedAsStoreOrCall, `Store already used as a normal store or in a call statement and should not be used as an option`); static WARN_StoreAlreadyUsedAsStoreOrOption = SevWarn | 0x08F; - static Warn_StoreAlreadyUsedAsStoreOrOption = () => m(this.WARN_StoreAlreadyUsedAsStoreOrOption, `Store already used as a normal store or as an option and should not be used in a call statement`); + static Warn_StoreAlreadyUsedAsStoreOrOption = () => mc(this.WARN_StoreAlreadyUsedAsStoreOrOption, `Store already used as a normal store or as an option and should not be used in a call statement`); static WARN_PunctuationInEthnologueCode = SevWarn | 0x090; - static Warn_PunctuationInEthnologueCode = () => m(this.WARN_PunctuationInEthnologueCode, `Punctuation should not be used to separate Ethnologue codes; instead use spaces`); + static Warn_PunctuationInEthnologueCode = () => mc(this.WARN_PunctuationInEthnologueCode, `Punctuation should not be used to separate Ethnologue codes; instead use spaces`); static WARN_TouchLayoutMissingLayer = SevWarn | 0x091; - static Warn_TouchLayoutMissingLayer = (o:{keyId:string, platformName:string, layerId:string, nextLayer:string, address:KeyAddress}) => mw(this.WARN_TouchLayoutMissingLayer, - `Key "${def(o.keyId)}" on platform "${def(o.platformName)}", layer "${def(o.layerId)}" (${keyAddress(o.address)}), references a missing layer "${def(o.nextLayer)}"`); + static Warn_TouchLayoutMissingLayer = (o:{keyId:string, platformName:string, layerId:string, nextLayer:string, address:KeyAddress}) => mw( + this.WARN_TouchLayoutMissingLayer, + `Key "${def(o.keyId)}" on platform "${def(o.platformName)}", layer "${def(o.layerId)}" (${keyAddress(o.address)}), references a missing layer "${def(o.nextLayer)}"`, + ); static WARN_TouchLayoutCustomKeyNotDefined = SevWarn | 0x092; - static Warn_TouchLayoutCustomKeyNotDefined = (o:{keyId:string, platformName:string, layerId:string, address:KeyAddress}) => mw(this.WARN_TouchLayoutCustomKeyNotDefined, - `Key "${def(o.keyId)}" on platform "${def(o.platformName)}", layer "${def(o.layerId)}" (${keyAddress(o.address)}), is a custom key but has no corresponding rule in the source.`); + static Warn_TouchLayoutCustomKeyNotDefined = (o:{keyId:string, platformName:string, layerId:string, address:KeyAddress}) => mw( + this.WARN_TouchLayoutCustomKeyNotDefined, + `Key "${def(o.keyId)}" on platform "${def(o.platformName)}", layer "${def(o.layerId)}" (${keyAddress(o.address)}), is a custom key but has no corresponding rule in the source.`, + ); static WARN_TouchLayoutMissingRequiredKeys = SevWarn | 0x093; - static Warn_TouchLayoutMissingRequiredKeys = (o:{layerId:string, platformName:string, missingKeys:string}) => mw(this.WARN_TouchLayoutMissingRequiredKeys, - `Layer "${def(o.layerId)}" on platform "${def(o.platformName)}" is missing the required key(s) '${def(o.missingKeys)}'.`); + static Warn_TouchLayoutMissingRequiredKeys = (o:{layerId:string, platformName:string, missingKeys:string}) => mw( + this.WARN_TouchLayoutMissingRequiredKeys, + `Layer "${def(o.layerId)}" on platform "${def(o.platformName)}" is missing the required key(s) '${def(o.missingKeys)}'.`, + ); static WARN_HelpFileMissing = SevWarn | 0x094; - static Warn_HelpFileMissing = (o:{line:number, helpFilename:string, e:any}) => mw(this.WARN_HelpFileMissing, - `File ${def(o.helpFilename)} could not be loaded: ${(o.e??'').toString()}`,o); + static Warn_HelpFileMissing = (o:{line:number, helpFilename:string, e:any}) => mw( + this.WARN_HelpFileMissing, + `File ${def(o.helpFilename)} could not be loaded: ${(o.e??'').toString()}`, o, + ); static WARN_EmbedJsFileMissing = SevWarn | 0x095; - static Warn_EmbedJsFileMissing = (o:{line:number, jsFilename: string, e:any}) => mw(this.WARN_EmbedJsFileMissing, - `File ${def(o.jsFilename)} could not be loaded: ${(o.e??'').toString()}`, o); + static Warn_EmbedJsFileMissing = (o:{line:number, jsFilename: string, e:any}) => mw( + this.WARN_EmbedJsFileMissing, + `File ${def(o.jsFilename)} could not be loaded: ${(o.e??'').toString()}`, o, + ); // static WARN_TouchLayoutFileMissing = SevWarn | 0x096; // static WARN_VisualKeyboardFileMissing = SevWarn | 0x097; static WARN_ExtendedShiftFlagsNotSupportedInKeymanWeb = SevWarn | 0x098; - static Warn_ExtendedShiftFlagsNotSupportedInKeymanWeb = (o:{line:number,flags:string}) => mw(this.WARN_ExtendedShiftFlagsNotSupportedInKeymanWeb, - `Extended shift flags ${def(o.flags)} are not supported in KeymanWeb`, o); + static Warn_ExtendedShiftFlagsNotSupportedInKeymanWeb = (o:{line:number,flags:string}) => mw( + this.WARN_ExtendedShiftFlagsNotSupportedInKeymanWeb, + `Extended shift flags ${def(o.flags)} are not supported in KeymanWeb`, o, + ); static WARN_TouchLayoutUnidentifiedKey = SevWarn | 0x099; - static Warn_TouchLayoutUnidentifiedKey = (o:{layerId:string, address:KeyAddress}) => mw(this.WARN_TouchLayoutUnidentifiedKey, - `A key (${keyAddress(o.address)}) on layer "${def(o.layerId)}" has no identifier.`); + static Warn_TouchLayoutUnidentifiedKey = (o:{layerId:string, address:KeyAddress}) => mw( + this.WARN_TouchLayoutUnidentifiedKey, + `A key (${keyAddress(o.address)}) on layer "${def(o.layerId)}" has no identifier.`, + ); static HINT_UnreachableKeyCode = SevHint | 0x09A; - static Hint_UnreachableKeyCode = (o:{line:number,key:string}) => mw(this.HINT_UnreachableKeyCode, - `The rule will never be matched for key ${def(o.key)} because its key code is never fired.`, o); + static Hint_UnreachableKeyCode = (o:{line:number,key:string}) => mw( + this.HINT_UnreachableKeyCode, + `The rule will never be matched for key ${def(o.key)} because its key code is never fired.`, o, + ); // static WARN_CouldNotCopyJsonFile = SevWarn | 0x09B; static WARN_PlatformNotInTargets = SevWarn | 0x09C; - static Warn_PlatformNotInTargets = () => m(this.WARN_PlatformNotInTargets, `The specified platform is not a target platform`); + static Warn_PlatformNotInTargets = () => mc(this.WARN_PlatformNotInTargets, `The specified platform is not a target platform`); static WARN_HeaderStatementIsDeprecated = SevWarn | 0x09D; - static Warn_HeaderStatementIsDeprecated = () => m(this.WARN_HeaderStatementIsDeprecated, `Header statements are deprecated; use instead the equivalent system store`); + static Warn_HeaderStatementIsDeprecated = () => mc(this.WARN_HeaderStatementIsDeprecated, `Header statements are deprecated; use instead the equivalent system store`); static WARN_UseNotLastStatementInRule = SevWarn | 0x09E; - static Warn_UseNotLastStatementInRule = () => m(this.WARN_UseNotLastStatementInRule, `A rule with use() statements in the output should not have other content following the use() statements`); + static Warn_UseNotLastStatementInRule = () => mc(this.WARN_UseNotLastStatementInRule, `A rule with use() statements in the output should not have other content following the use() statements`); static WARN_TouchLayoutFontShouldBeSameForAllPlatforms = SevWarn | 0x09F; - static Warn_TouchLayoutFontShouldBeSameForAllPlatforms = () => mw(this.WARN_TouchLayoutFontShouldBeSameForAllPlatforms, - `The touch layout font should be the same for all platforms.`); + static Warn_TouchLayoutFontShouldBeSameForAllPlatforms = () => mw( + this.WARN_TouchLayoutFontShouldBeSameForAllPlatforms, + `The touch layout font should be the same for all platforms.`, + ); // static WARN_InvalidJSONMetadataFile = SevWarn | 0x0A0; // static WARN_JSONMetadataOSKFontShouldMatchTouchFont = SevWarn | 0x0A1; static WARN_KVKFileIsInSourceFormat = SevWarn | 0x0A2; - static Warn_KVKFileIsInSourceFormat = () => m(this.WARN_KVKFileIsInSourceFormat, `.kvk file should be binary but is an XML file`); + static Warn_KVKFileIsInSourceFormat = () => mc(this.WARN_KVKFileIsInSourceFormat, `.kvk file should be binary but is an XML file`); // kmcmplib: static Warn_DontMixChiralAndNonChiralModifiers = () => m(this.WARN_DontMixChiralAndNonChiralModifiers, `Don't mix the use of left/right modifiers with non-left/right modifiers in the same platform`); static WARN_DontMixChiralAndNonChiralModifiers = SevWarn | 0x0A3; - static Warn_DontMixChiralAndNonChiralModifiers = () => mw(this.WARN_DontMixChiralAndNonChiralModifiers, - `This keyboard contains Ctrl,Alt and LCtrl,LAlt,RCtrl,RAlt sets of modifiers. Use only one or the other set for web target.`); + static Warn_DontMixChiralAndNonChiralModifiers = () => mw( + this.WARN_DontMixChiralAndNonChiralModifiers, + `This keyboard contains Ctrl,Alt and LCtrl,LAlt,RCtrl,RAlt sets of modifiers. Use only one or the other set for web target.`, + ); static WARN_MixingLeftAndRightModifiers = SevWarn | 0x0A4; - static Warn_MixingLeftAndRightModifiers = () => m(this.WARN_MixingLeftAndRightModifiers, `Left and right modifiers should not both be used in the same rule`); + static Warn_MixingLeftAndRightModifiers = () => mc(this.WARN_MixingLeftAndRightModifiers, `Left and right modifiers should not both be used in the same rule`); static WARN_LanguageHeadersDeprecatedInKeyman10 = SevWarn | 0x0A5; - static Warn_LanguageHeadersDeprecatedInKeyman10 = () => m(this.WARN_LanguageHeadersDeprecatedInKeyman10, `This language header has been deprecated in Keyman 10. Instead, add language metadata in the package file`); + static Warn_LanguageHeadersDeprecatedInKeyman10 = () => mc(this.WARN_LanguageHeadersDeprecatedInKeyman10, `This language header has been deprecated in Keyman 10. Instead, add language metadata in the package file`); static HINT_NonUnicodeFile = SevHint | 0x0A6; - static Hint_NonUnicodeFile = () => m(this.HINT_NonUnicodeFile, `Keyman Developer has detected that the file has ANSI encoding. Consider converting this file to UTF-8`); + static Hint_NonUnicodeFile = () => mc(this.HINT_NonUnicodeFile, `Keyman Developer has detected that the file has ANSI encoding. Consider converting this file to UTF-8`); // static WARN_TooManyErrorsOrWarnings = SevWarn | 0x0A7; static WARN_HotkeyHasInvalidModifier = SevWarn | 0x0A8; - static Warn_HotkeyHasInvalidModifier = () => m(this.WARN_HotkeyHasInvalidModifier, `Hotkey has modifiers that are not supported. Use only SHIFT, CTRL and ALT`); + static Warn_HotkeyHasInvalidModifier = () => mc(this.WARN_HotkeyHasInvalidModifier, `Hotkey has modifiers that are not supported. Use only SHIFT, CTRL and ALT`); static WARN_TouchLayoutSpecialLabelOnNormalKey = SevWarn | 0x0A9; - static Warn_TouchLayoutSpecialLabelOnNormalKey = (o:{keyId:string, platformName:string, layerId:string, label:string, address:KeyAddress}) => - mw(this.WARN_TouchLayoutSpecialLabelOnNormalKey, + static Warn_TouchLayoutSpecialLabelOnNormalKey = (o:{keyId:string, platformName:string, layerId:string, label:string, address:KeyAddress}) => mw( + this.WARN_TouchLayoutSpecialLabelOnNormalKey, `Key "${def(o.keyId)}" on platform "${def(o.platformName)}", layer "${def(o.layerId)}" (${keyAddress(o.address)}) does not have `+ - `the key type "Special" or "Special (active)" but has the label "${def(o.label)}". This feature is only supported in Keyman 14 or later`); + `the key type "Special" or "Special (active)" but has the label "${def(o.label)}". This feature is only supported in Keyman 14 or later`, + ); static WARN_OptionStoreNameInvalid = SevWarn | 0x0AA; - static Warn_OptionStoreNameInvalid = (o:{name:string}) => mw(this.WARN_OptionStoreNameInvalid, - `The option store ${def(o.name)} should be named with characters in the range A-Z, a-z, 0-9 and _ only.`); + static Warn_OptionStoreNameInvalid = (o:{name:string}) => mw( + this.WARN_OptionStoreNameInvalid, + `The option store ${def(o.name)} should be named with characters in the range A-Z, a-z, 0-9 and _ only.`, + ); static WARN_NulNotFirstStatementInContext = SevWarn | 0x0AB; - static Warn_NulNotFirstStatementInContext = () => m(this.WARN_NulNotFirstStatementInContext, `nul must be the first statement in the context`); + static Warn_NulNotFirstStatementInContext = () => mc(this.WARN_NulNotFirstStatementInContext, `nul must be the first statement in the context`); static WARN_IfShouldBeAtStartOfContext = SevWarn | 0x0AC; - static Warn_IfShouldBeAtStartOfContext = () => m(this.WARN_IfShouldBeAtStartOfContext, `if, platform and baselayout should be at start of context (after nul, if present)`); + static Warn_IfShouldBeAtStartOfContext = () => mc(this.WARN_IfShouldBeAtStartOfContext, `if, platform and baselayout should be at start of context (after nul, if present)`); static WARN_KeyShouldIncludeNCaps = SevWarn | 0x0AD; - static Warn_KeyShouldIncludeNCaps = () => m(this.WARN_KeyShouldIncludeNCaps, `Other rules which reference this key include CAPS or NCAPS modifiers, so this rule must include NCAPS modifier to avoid inconsistent matches`); + static Warn_KeyShouldIncludeNCaps = () => mc(this.WARN_KeyShouldIncludeNCaps, `Other rules which reference this key include CAPS or NCAPS modifiers, so this rule must include NCAPS modifier to avoid inconsistent matches`); static HINT_UnreachableRule = SevHint | 0x0AE; - static Hint_UnreachableRule = (o:KmcmpLibMessageParameters) => m( + static Hint_UnreachableRule = (o:KmcmpLibMessageParameters) => mc( this.HINT_UnreachableRule, `This rule will never be matched as the rule on line ${o.p?.[0]} takes precedence` ); static WARN_VirtualKeyInOutput = SevWarn | 0x0AF; - static Warn_VirtualKeyInOutput = () => m(this.WARN_VirtualKeyInOutput, `Virtual keys are not supported in output`); + static Warn_VirtualKeyInOutput = () => mc(this.WARN_VirtualKeyInOutput, `Virtual keys are not supported in output`); static HINT_IndexStoreLong = SevHint | 0x0B0; - static Hint_IndexStoreLong = () => m( + static Hint_IndexStoreLong = () => mc( this.HINT_IndexStoreLong, `The store referenced in index() is longer than the store referenced in any()`, ); static ERROR_ContextExCannotReferenceIf = SevError | 0x0B1; - static Error_ContextExCannotReferenceIf = () => m( + static Error_ContextExCannotReferenceIf = () => mc( this.ERROR_ContextExCannotReferenceIf, `The offset in context() points to a non-character if() statement in the context`, ); static ERROR_ContextExCannotReferenceNul = SevError | 0x0B2; - static Error_ContextExCannotReferenceNul = () => m( + static Error_ContextExCannotReferenceNul = () => mc( this.ERROR_ContextExCannotReferenceNul, `The offset in context() points to a non-character nul statement in the context`, ); static ERROR_TextBeforeOrAfterNulInOutput = SevError | 0x0B3; - static Error_TextBeforeOrAfterNulInOutput = () => m( + static Error_TextBeforeOrAfterNulInOutput = () => mc( this.ERROR_TextBeforeOrAfterNulInOutput, `A rule with a nul statement in the output cannot also output text or text-emitting statements`, `If a rule has [\`nul\`](https://help.keyman.com/developer/language/reference/nul) @@ -774,60 +863,70 @@ export class KmnCompilerMessages { ); static ERROR_NameMustBeAtLeastOneCharLong = SevError | 0x0B4; - static Error_NameMustBeAtLeastOneCharLong = () => m( + static Error_NameMustBeAtLeastOneCharLong = () => mc( this.ERROR_NameMustBeAtLeastOneCharLong, `The name parameter is required`, ); static ERROR_NameMustBeAtMostNCharsLong = SevError | 0x0B5; - static Error_NameMustBeAtMostNCharsLong = (o:{name:string,length:string}) => m( + static Error_NameMustBeAtMostNCharsLong = (o: KmcmpLibMessageParameters) => mc( this.ERROR_NameMustBeAtMostNCharsLong, - `The referenced name '${def(o.name)}' must be at most ${def(o.length)} characters long`, + `The referenced name '${def(o.p?.[0])}' must be at most ${def(o.p?.[1])} characters long`, ); static ERROR_NameContainsInvalidCharacter = SevError | 0x0B6; - static Error_NameContainsInvalidCharacter = (o:{name:string}) => m( + static Error_NameContainsInvalidCharacter = (o: KmcmpLibMessageParameters) => mc( this.ERROR_NameContainsInvalidCharacter, - `The referenced name '${def(o.name)}' contains an invalid character`, + `The referenced name '${def(o.p?.[0])}' contains an invalid character`, `Names (or identifiers) must not contain spaces, commas, parentheses, square brackets, control characters, or Unicode non-characters.` ); static ERROR_NameMustNotContainSpaces = SevError | 0x0B7; - static Error_NameMustNotContainSpaces = (o:{name:string}) => m( + static Error_NameMustNotContainSpaces = (o: KmcmpLibMessageParameters) => mc( this.ERROR_NameMustNotContainSpaces, - `The referenced name '${def(o.name)}' must not contain spaces`, + `The referenced name '${def(o.p?.[0])}' must not contain spaces`, `Names (or identifiers) must not contain spaces, commas, parentheses, square brackets, control characters, or Unicode non-characters.` ); static ERROR_NameMustNotContainComma = SevError | 0x0B8; - static Error_NameMustNotContainComma = (o:{name:string}) => m( + static Error_NameMustNotContainComma = (o: KmcmpLibMessageParameters) => mc( this.ERROR_NameMustNotContainComma, - `The referenced name '${def(o.name)}' must not contain commas`, + `The referenced name '${def(o.p?.[0])}' must not contain commas`, `Names (or identifiers) must not contain spaces, commas, parentheses, square brackets, control characters, or Unicode non-characters.` ); static ERROR_NameMustNotContainParentheses = SevError | 0x0B9; - static Error_NameMustNotContainParentheses = (o:{name:string}) => m( + static Error_NameMustNotContainParentheses = (o: KmcmpLibMessageParameters) => mc( this.ERROR_NameMustNotContainParentheses, - `The referenced name '${def(o.name)}' must not contain opening or closing parentheses`, + `The referenced name '${def(o.p?.[0])}' must not contain opening or closing parentheses`, `Names (or identifiers) must not contain spaces, commas, parentheses, square brackets, control characters, or Unicode non-characters.` ); static ERROR_NameMustNotContainSquareBrackets = SevError | 0x0BA; - static Error_NameMustNotContainSquareBrackets = (o:{name:string}) => m( + static Error_NameMustNotContainSquareBrackets = (o: KmcmpLibMessageParameters) => mc( this.ERROR_NameMustNotContainSquareBrackets, - `The referenced name '${def(o.name)}' must not contain opening or closing square brackets`, + `The referenced name '${def(o.p?.[0])}' must not contain opening or closing square brackets`, `Names (or identifiers) must not contain spaces, commas, parentheses, square brackets, control characters, or Unicode non-characters.` ); + static WARN_DeprecatedStatement = SevWarn | 0x0BB; + static Warn_DeprecatedStatement = (o: KmcmpLibMessageParameters) => mc( + this.WARN_DeprecatedStatement, + `The statement '${def(o.p?.[0])}' has been deprecated in Keyman ${def(o.p?.[1])}`, + ); + static FATAL_BufferOverflow = SevFatal | 0x0C0; - static Fatal_BufferOverflow = () => m(this.FATAL_BufferOverflow, `The compiler memory buffer overflowed`); + static Fatal_BufferOverflow = () => mc(this.FATAL_BufferOverflow, `The compiler memory buffer overflowed`); // static FATAL_Break = SevFatal | 0x0C1; - // static Fatal_Break = () => m(this.FATAL_Break, `Compiler interrupted by user`); + // static Fatal_Break = () => mc(this.FATAL_Break, `Compiler interrupted by user`); + + // ------------------------------------------------------------------------------------------------ + // end of kmcmplib messages + // ------------------------------------------------------------------------------------------------ }; diff --git a/developer/src/kmc-kmn/src/kmw-compiler/util.ts b/developer/src/kmc-kmn/src/kmw-compiler/util.ts index 4c775e6c83..487d2f5a94 100644 --- a/developer/src/kmc-kmn/src/kmw-compiler/util.ts +++ b/developer/src/kmc-kmn/src/kmw-compiler/util.ts @@ -248,7 +248,7 @@ export function incxstr(p: string, x: number): number { case KMX.KMXFile.CODE_CONTEXTEX: x += 2; break; case KMX.KMXFile.CODE_NOTANY: x += 2; break; - case KMX.KMXFile.CODE_CLEARCONTEXT: x += 2; break; + case KMX.KMXFile.CODE_CLEARCONTEXT: x += 2; break; // deprecated in 19.0 case KMX.KMXFile.CODE_IFOPT: x += 4; break; case KMX.KMXFile.CODE_IFSYSTEMSTORE: x += 4; break; case KMX.KMXFile.CODE_SETOPT: x += 3; break; diff --git a/developer/src/kmc-kmn/test/compiler.tests.ts b/developer/src/kmc-kmn/test/compiler.tests.ts index db5ea60b06..ce27552585 100644 --- a/developer/src/kmc-kmn/test/compiler.tests.ts +++ b/developer/src/kmc-kmn/test/compiler.tests.ts @@ -1,10 +1,15 @@ +/* + * Keyman is copyright (C) SIL Global. MIT License. + */ +import { dirname } from 'node:path'; +import { fileURLToPath } from 'node:url'; +import fs from 'node:fs'; import 'mocha'; import { assert } from 'chai'; -import { KmnCompiler } from '../src/main.js'; -import { dirname } from 'path'; -import { fileURLToPath } from 'url'; -import fs from 'fs'; import { TestCompilerCallbacks } from '@keymanapp/developer-test-helpers'; +import { KmxFileReader } from '@keymanapp/common-types'; +import { compileTestKeyboard } from './helpers/index.js'; +import { KmnCompiler } from '../src/main.js'; const __dirname = dirname(fileURLToPath(import.meta.url)).replace(/\\/g, '/'); const keyboardsDir = __dirname + '/../../../../../common/test/keyboards/'; @@ -13,6 +18,16 @@ const baselineDir = keyboardsDir + 'baseline/'; describe('Compiler class', function() { const callbacks = new TestCompilerCallbacks(this); + this.beforeEach(function() { + callbacks.clear(); + }); + + this.afterEach(function() { + if(this.currentTest?.isFailed()) { + callbacks.printMessages(); + } + }); + it('should throw on failure', async function() { const compiler = new KmnCompiler(); const callbacks : any = null; // ERROR @@ -129,4 +144,20 @@ describe('Compiler class', function() { assert.deepEqual(kvkData, kvkFixtureData); }); + it('should trim all whitespace for `&targets` store', async function() { + const result = await compileTestKeyboard(callbacks, ['keyboards', 'targets-with-whitespace.kmn']); + assert.isNotNull(result); + + // Verify implictly that `&targets` store was interpreted correctly as 'any' + // because the compiler generated both JS and KMX targets (#13721) + assert.isNotNull(result.artifacts.js); + assert.isNotNull(result.artifacts.kmx); + + // Then verify directly that the `&targets` store was trimmed by looking at + // the final value in the kmx data + const reader = new KmxFileReader(); + const keyboard = reader.read(result.artifacts.kmx.data); + assert.equal(keyboard.targets, 'any'); + }); + }); diff --git a/developer/src/kmc-kmn/test/fixtures/keyboards/targets-with-whitespace.kmn b/developer/src/kmc-kmn/test/fixtures/keyboards/targets-with-whitespace.kmn new file mode 100644 index 0000000000..4afe77ecd5 --- /dev/null +++ b/developer/src/kmc-kmn/test/fixtures/keyboards/targets-with-whitespace.kmn @@ -0,0 +1,11 @@ +store(&NAME) 'targets_with_whitespace' +store(&VERSION) '10.0' + +c this used to generate KM0207B: At least one compile target must be specified +store(&TARGETS) ' any' + +begin unicode > use(main) + +group(main) using keys + ++ 'x' > 'y' diff --git a/developer/src/kmc-kmn/test/fixtures/keyboards/warn_deprecated_statement-clearcontext-17.kmn b/developer/src/kmc-kmn/test/fixtures/keyboards/warn_deprecated_statement-clearcontext-17.kmn new file mode 100644 index 0000000000..6e108a7852 --- /dev/null +++ b/developer/src/kmc-kmn/test/fixtures/keyboards/warn_deprecated_statement-clearcontext-17.kmn @@ -0,0 +1,9 @@ +store(&NAME) 'warn_deprecated_statement-clearcontext-17' +store(&VERSION) '17.0' + +begin unicode > use(main) + +group(main) using keys + +c NOTE: using `clearcontext` should not generate a warning in v17 target version compile (unlike v19 target version) ++ 'x' > clearcontext diff --git a/developer/src/kmc-kmn/test/fixtures/keyboards/warn_deprecated_statement-clearcontext-19.kmn b/developer/src/kmc-kmn/test/fixtures/keyboards/warn_deprecated_statement-clearcontext-19.kmn new file mode 100644 index 0000000000..0c2a68f8e2 --- /dev/null +++ b/developer/src/kmc-kmn/test/fixtures/keyboards/warn_deprecated_statement-clearcontext-19.kmn @@ -0,0 +1,9 @@ +store(&NAME) 'warn_deprecated_statement-clearcontext-19' +store(&VERSION) '19.0' + +begin unicode > use(main) + +group(main) using keys + +c NOTE: using `clearcontext` SHOULD generate a warning in v19 target version compile (unlike v17 target version) ++ 'x' > clearcontext diff --git a/developer/src/kmc-kmn/test/fixtures/keyboards/warn_deprecated_statement-fix-17.kmn b/developer/src/kmc-kmn/test/fixtures/keyboards/warn_deprecated_statement-fix-17.kmn new file mode 100644 index 0000000000..7d2d9f5df8 --- /dev/null +++ b/developer/src/kmc-kmn/test/fixtures/keyboards/warn_deprecated_statement-fix-17.kmn @@ -0,0 +1,9 @@ +store(&NAME) 'warn_deprecated_statement-fix-17' +store(&VERSION) '17.0' + +begin unicode > use(main) + +group(main) using keys + +c NOTE: using `fix` should not generate a warning in v17 target version compile (unlike v19 target version) ++ 'x' > fix diff --git a/developer/src/kmc-kmn/test/fixtures/keyboards/warn_deprecated_statement-fix-19.kmn b/developer/src/kmc-kmn/test/fixtures/keyboards/warn_deprecated_statement-fix-19.kmn new file mode 100644 index 0000000000..c575136604 --- /dev/null +++ b/developer/src/kmc-kmn/test/fixtures/keyboards/warn_deprecated_statement-fix-19.kmn @@ -0,0 +1,9 @@ +store(&NAME) 'warn_deprecated_statement-fix-19' +store(&VERSION) '19.0' + +begin unicode > use(main) + +group(main) using keys + +c NOTE: using `fix` SHOULD generate a warning in v19 target version compile (unlike v17 target version) ++ 'x' > fix diff --git a/developer/src/kmc-kmn/test/helpers/index.ts b/developer/src/kmc-kmn/test/helpers/index.ts index 8250dfd101..ae0ad21268 100644 --- a/developer/src/kmc-kmn/test/helpers/index.ts +++ b/developer/src/kmc-kmn/test/helpers/index.ts @@ -1,8 +1,13 @@ -/** +/* + * Keyman is copyright (C) SIL Global. MIT License. + * * Helpers and utilities for the Mocha tests. */ -import * as path from 'path'; -import { fileURLToPath } from 'url'; +import * as path from 'node:path'; +import { fileURLToPath } from 'node:url'; +import { assert } from 'chai'; +import { CompilerCallbacks } from '@keymanapp/developer-utils'; +import { KmnCompiler } from '../../src/compiler/compiler.js'; /** * Builds a path to the fixture with the given path components. @@ -15,3 +20,13 @@ import { fileURLToPath } from 'url'; export function makePathToFixture(...components: string[]): string { return fileURLToPath(new URL(path.join('..', '..', '..', 'test', 'fixtures', ...components), import.meta.url)); } + +export async function compileTestKeyboard(callbacks: CompilerCallbacks, fixture: string[]) { + const compiler = new KmnCompiler(); + assert(await compiler.init(callbacks, {saveDebug: true, shouldAddCompilerVersion: false})); + assert(compiler.verifyInitialized()); + + const kmnPath = makePathToFixture(...fixture); + + return await compiler.run(kmnPath, null); +} \ No newline at end of file diff --git a/developer/src/kmc-kmn/test/kmn-compiler-messages.tests.ts b/developer/src/kmc-kmn/test/kmn-compiler-messages.tests.ts index f241c02606..d34c791f48 100644 --- a/developer/src/kmc-kmn/test/kmn-compiler-messages.tests.ts +++ b/developer/src/kmc-kmn/test/kmn-compiler-messages.tests.ts @@ -3,9 +3,24 @@ import { assert } from 'chai'; import { CompilerErrorMask, CompilerErrorNamespace } from '@keymanapp/developer-utils'; import { TestCompilerCallbacks, verifyCompilerMessagesObject } from '@keymanapp/developer-test-helpers'; import { KmnCompiler } from '../src/main.js'; -import { KmnCompilerMessageRanges, KmnCompilerMessages } from '../src/compiler/kmn-compiler-messages.js'; +import { KmcKmnCompilerEvent, KmnCompilerMessageRanges, KmnCompilerMessages } from '../src/compiler/kmn-compiler-messages.js'; import { makePathToFixture } from './helpers/index.js'; + +// Source - https://stackoverflow.com/a/9924463 +// Posted by Jack Allan, modified by community. See post 'Timeline' for change history +// Retrieved 2026-09-01, License - CC BY-SA 3.0 +function getParamNames(func: any) { + const STRIP_COMMENTS = /(\/\/.*$)|(\/\*[\s\S]*?\*\/)|(\s*=[^,\)]*(('(?:\\'|[^'\r\n])*')|("(?:\\"|[^"\r\n])*"))|(\s*=[^,\)]*))/mg; + const ARGUMENT_NAMES = /([^\s,]+)/g; + const fnStr = func.toString().replace(STRIP_COMMENTS, ''); + let result = fnStr.slice(fnStr.indexOf('(')+1, fnStr.indexOf(')')).match(ARGUMENT_NAMES); + if(result === null) + result = []; + return result; +} + + describe('KmnCompilerMessages', function () { const callbacks = new TestCompilerCallbacks(this); @@ -13,6 +28,53 @@ describe('KmnCompilerMessages', function () { return verifyCompilerMessagesObject(KmnCompilerMessages, CompilerErrorNamespace.KmnCompiler); }); + it('should have correct parameter types and numeric ranges for kmcmplib vs kmw vs kmc-kmn messages', function() { + // See comment in kmn-compiler-messages.ts for logic. + // This function follows the same pattern as `verifyCompilerMessagesObject` but with specific tests for + // this more constrained object + const toTitleCase = (s: string) => s.substring(0, 1).toUpperCase() + s.substring(1).toLowerCase(); + const keys = Object.keys(KmnCompilerMessages); + const m = KmnCompilerMessages as Record; + + for(const key of keys) { + if(typeof m[key] == 'number') { + const o = /^(DEBUG|VERBOSE|INFO|HINT|WARN|ERROR|FATAL)_([A-Za-z0-9_]+)$/.exec(key); + const f = toTitleCase(o[1]) + '_' + o[2]; + // note: validation done in verifyCompilerMessagesObject, don't repeat it here + + const v: KmcKmnCompilerEvent = m[f]('','','','','','','','','','','','' /* ignore arguments*/); + + const code = m[key] & CompilerErrorMask.BaseError; + const hex = code.toString(16).padStart(3, '0'); + + if(code >= KmnCompilerMessageRanges.RANGE_CompilerMessage_Min &&code <= KmnCompilerMessageRanges.RANGE_CompilerMessage_Max) { + // kmc-kmn messages, should not be using mw() function or mc() function + // + assert.equal(v.kmcKmnSource, 'kmc-kmn', `expected ${v.kmcKmnSource} to equal 'kmc-kmn' for ${hex}, '${key}'.`); + } else if(code >= KmnCompilerMessageRanges.RANGE_KMN_COMPILER_MIN && code <= KmnCompilerMessageRanges.RANGE_KMN_COMPILER_MAX) { + // kmcmplib or kmw compiler messages, should not be using m() function or mx() function + assert.oneOf(v.kmcKmnSource, ['kmcmplib', 'kmw-compiler'], `expected ${v.kmcKmnSource} to equal 'kmcmplib' or 'kmw-compiler for ${hex}, '${key}'.`); + if(v.kmcKmnSource == 'kmcmplib') { + // The only allowed param is an object o with property p. We + // cannot test parameter shape directly, so we will compare + // outputs of calling if o.p is set, which should not match what + // we get when o.p is not set. + const params = getParamNames(m[f]); + if(params.length) { + const v2: KmcKmnCompilerEvent = m[f]({p:['1','2','3','4','5','6','7','8','9']}); + assert.notEqual(v.message, v2.message, `Message '${key}' (${hex}) must use KmcmpLibMessageParameters pattern`); + } + } + } else if(code >= KmnCompilerMessageRanges.RANGE_LEXICAL_MODEL_MIN && code <= KmnCompilerMessageRanges.RANGE_LEXICAL_MODEL_MAX) { + assert.fail(`Message identifier ${hex} for '${key}' is reserved and should not be used (LEXICAL_MODEL range)`); + } else { + assert.fail(`Message identifier ${hex} for '${key}' is out of range`); + } + } + } + + }); + it('should have a 1:1 correspondence with kmn_compiler_errors.h', function() { const headerFilename = 'kmn_compiler_errors.h'; @@ -285,4 +347,13 @@ describe('KmnCompilerMessages', function () { await testForMessage(this, ['invalid-keyboards', 'error_name_must_not_contain_square_brackets-deadkey.kmn'], [KmnCompilerMessages.ERROR_NameMustNotContainSquareBrackets, KmnCompilerMessages.ERROR_InvalidDeadkey]); }); + // WARN_DeprecatedStatement + + it('should generate WARN_DeprecatedStatement if the file has `clearcontext` or `fix` statements and is 19.0', async function() { + await testForMessage(this, ['keyboards', 'warn_deprecated_statement-clearcontext-19.kmn'], KmnCompilerMessages.WARN_DeprecatedStatement); + await testForMessage(this, ['keyboards', 'warn_deprecated_statement-fix-19.kmn'], KmnCompilerMessages.WARN_DeprecatedStatement); + await testForMessage(this, ['keyboards', 'warn_deprecated_statement-clearcontext-17.kmn']); + await testForMessage(this, ['keyboards', 'warn_deprecated_statement-fix-17.kmn']); + }); + }); diff --git a/developer/src/kmc-ldml/build.sh b/developer/src/kmc-ldml/build.sh index b9e259e8df..bfbbfd70b0 100755 --- a/developer/src/kmc-ldml/build.sh +++ b/developer/src/kmc-ldml/build.sh @@ -23,7 +23,7 @@ builder_describe "Keyman kmc Keyboard Compiler module" \ "api analyze API and prepare API documentation" \ "clean" \ "test" \ - "build-fixtures builds test fixtures for manual examination" + "fixtures-build builds test fixtures for manual examination" builder_describe_outputs \ configure /developer/src/kmc-ldml/src/util/abnf/46/transform-from-required.js \ @@ -84,6 +84,6 @@ function do_build_fixtures() { builder_run_action clean do_clean builder_run_action configure do_configure builder_run_action build do_build -builder_run_action build-fixtures do_build_fixtures +builder_run_action fixtures-build do_build_fixtures builder_run_action api typescript_run_api_extractor developer/src/kmc-ldml main.d.ts -builder_run_action test typescript_run_eslint_mocha_tests 90 +builder_run_action test typescript_run_eslint_mocha_tests diff --git a/developer/src/kmc-ldml/src/compiler/keys.ts b/developer/src/kmc-ldml/src/compiler/keys.ts index 8656e7fbf2..9740616bc0 100644 --- a/developer/src/kmc-ldml/src/compiler/keys.ts +++ b/developer/src/kmc-ldml/src/compiler/keys.ts @@ -9,7 +9,7 @@ import Keys = KMXPlus.Keys; import KeysKeys = KMXPlus.KeysKeys; import ListItem = KMXPlus.ListItem; import KeysFlicks = KMXPlus.KeysFlicks; -import { allUsedKeyIdsInFlick, allUsedKeyIdsInKey, allUsedKeyIdsInLayers, calculateUniqueKeys, hashFlicks, hashKeys, translateLayerAttrToModifier, validModifier } from '../util/util.js'; +import { allUsedKeyIdsInFlick, allUsedKeyIdsInKey, allUsedKeyIdsInLayers, calculateUniqueKeys, hashFlicks, hashKeys, translateLayerAttrToModifier } from '../util/util.js'; import { SubstitutionUse, Substitutions } from './substitution-tracker.js'; /** reserved name for the special gap key. space is not allowed in key ids. */ @@ -225,13 +225,9 @@ export class KeysCompiler extends SectionCompiler { // Finally, kmap // Use LayerMap + keys to generate compiled keys for hardware const hardwareLayers = this.hardwareLayers(); - /* c8 ignore next 3 */ - if (hardwareLayers.length > 1) { - // validation should have already caught this - throw Error( - `Internal error: Expected 0 or 1 hardware layer, not ${hardwareLayers.length}` - ); - } else if (hardwareLayers.length === 1) { + if (hardwareLayers.length >= 1) { + // Only 1 hardware layer is supported; however, `LayrCompiler` will report + // on this error, so we can just process the first one here const theLayers = hardwareLayers[0]; const { formId } = theLayers; for (const layer of theLayers.layer) { @@ -461,12 +457,6 @@ export class KeysCompiler extends SectionCompiler { let valid = true; const { modifiers } = layer; - if (!validModifier(modifiers)) { - this.callbacks.reportMessage( - LdmlCompilerMessages.Error_InvalidModifier({ modifiers }, layer) - ); - valid = false; - } if (layer.row.length > keymap.length) { this.callbacks.reportMessage( @@ -484,7 +474,7 @@ export class KeysCompiler extends SectionCompiler { LdmlCompilerMessages.Error_RowOnHardwareLayerHasTooManyKeys({ row: y + 1, hardware: layers.formId, - modifiers: modifiers || 'none', + modifiers, }, row) ); valid = false; @@ -501,7 +491,7 @@ export class KeysCompiler extends SectionCompiler { keyId: key, col: x + 1, row: y + 1, - layer: layer.id, + layer: layer.id ?? layer.modifiers, // just to give a useful reference point in the error message form: "hardware", }, row) ); diff --git a/developer/src/kmc-ldml/src/compiler/layr.ts b/developer/src/kmc-ldml/src/compiler/layr.ts index baaf9282b5..822ea961b2 100644 --- a/developer/src/kmc-ldml/src/compiler/layr.ts +++ b/developer/src/kmc-ldml/src/compiler/layr.ts @@ -20,18 +20,26 @@ export class LayrCompiler extends SectionCompiler { let valid = true; let totalLayerCount = 0; let hardwareLayers = 0; - let touchLayers = 0; + let touchLayerCount = 0; + let hasNullDeviceWidth = false; const deviceWidths = new Set(); this.keyboard3.layers?.forEach((layers) => { const { formId } = layers; if (formId === 'touch') { - touchLayers++; + touchLayerCount++; totalLayerCount += layers.layer?.length; const { minDeviceWidth } = layers; - if (!minDeviceWidth || + if (minDeviceWidth === undefined || minDeviceWidth === null) { + if(hasNullDeviceWidth) { + this.callbacks.reportMessage(LdmlCompilerMessages.Hint_MultipleTouchFormsWithoutMinDeviceWidth(layers)); + } + hasNullDeviceWidth = true; + } else if ( + (typeof minDeviceWidth === 'string' && (minDeviceWidth).trim() === '') || + Number.isNaN(Number(minDeviceWidth)) || minDeviceWidth < constants.layr_min_minDeviceWidth || - minDeviceWidth > constants.layr_max_minDeviceWidth || - Number.isNaN(Number(minDeviceWidth))) { + minDeviceWidth > constants.layr_max_minDeviceWidth + ) { valid = false; this.callbacks.reportMessage(LdmlCompilerMessages.Error_InvalidLayerWidth({minDeviceWidth}, layers)); } else if (deviceWidths.has(minDeviceWidth)) { @@ -40,6 +48,17 @@ export class LayrCompiler extends SectionCompiler { } else { deviceWidths.add(minDeviceWidth); } + // For touch layers, id attr must exist, and modifiers attribute should not + layers.layer.forEach(layer => { + if(typeof layer.id === 'undefined') { + this.callbacks.reportMessage(LdmlCompilerMessages.Error_TouchLayerRequiresId({minDeviceWidth}, layer)); + valid = false; + } + if(typeof layer.modifiers !== 'undefined') { + this.callbacks.reportMessage(LdmlCompilerMessages.Hint_TouchLayerHasModifiers({minDeviceWidth, id: layer.id}, layer)); + } + totalLayerCount++; + }); } else { // hardware hardwareLayers++; @@ -47,15 +66,22 @@ export class LayrCompiler extends SectionCompiler { valid = false; this.callbacks.reportMessage(LdmlCompilerMessages.Error_ExcessHardware({formId}, layers)); } + layers.layer.forEach(layer => { + const { modifiers } = layer; + if(typeof modifiers === 'undefined' || modifiers == '') { + this.callbacks.reportMessage(LdmlCompilerMessages.Error_HardwareLayerRequiresModifiers({ formId }, layer)); + valid = false; + } + else if (!validModifier(modifiers)) { + this.callbacks.reportMessage(LdmlCompilerMessages.Error_InvalidModifier({ modifiers }, layer)); + valid = false; + } + if(typeof layer.id !== 'undefined') { + this.callbacks.reportMessage(LdmlCompilerMessages.Hint_HardwareLayerHasId({formId, id: layer.id}, layer)); + } + totalLayerCount++; + }); } - layers.layer.forEach((layer) => { - const { modifiers } = layer; - totalLayerCount++; - if (!validModifier(modifiers)) { - this.callbacks.reportMessage(LdmlCompilerMessages.Error_InvalidModifier({ modifiers }, layer)); - valid = false; - } - }); }); if (totalLayerCount === 0) { // TODO-LDML: does not validate touch layers yet // no layers seen anywhere diff --git a/developer/src/kmc-ldml/src/compiler/ldml-compiler-messages.ts b/developer/src/kmc-ldml/src/compiler/ldml-compiler-messages.ts index 1f879f475b..88c92f7e21 100644 --- a/developer/src/kmc-ldml/src/compiler/ldml-compiler-messages.ts +++ b/developer/src/kmc-ldml/src/compiler/ldml-compiler-messages.ts @@ -40,7 +40,7 @@ export class LdmlCompilerMessages { static ERROR_KeyNotFoundInKeyBag = SevError | 0x0005; static Error_KeyNotFoundInKeyBag = (o: { keyId: string, col: number, row: number, layer: string, form: string }, compileContext?: ObjectWithCompileContext) => mx( this.ERROR_KeyNotFoundInKeyBag, compileContext, - `Key '${def(o.keyId)}' in position #${def(o.col)} on row #${def(o.row)} of layer ${def(o.layer)}, form '${def(o.form)}' not found in key bag`, + `Key '${def(o.keyId)}' in position #${def(o.col)} on row #${def(o.row)} of layer '${def(o.layer)}', form '${def(o.form)}' not found in key bag`, ); static HINT_OneOrMoreRepeatedLocales = SevHint | 0x0006; @@ -277,7 +277,7 @@ export class LdmlCompilerMessages { ); static ERROR_InvalidLayerWidth = SevError | 0x002D; - static Error_InvalidLayerWidth = (o: { minDeviceWidth: number }, compileContext?: ObjectWithCompileContext) => mx( + static Error_InvalidLayerWidth = (o: { minDeviceWidth: number | string }, compileContext?: ObjectWithCompileContext) => mx( this.ERROR_InvalidLayerWidth, compileContext, `Invalid Layers minDeviceWidth=${def(o.minDeviceWidth)}`, `Width must be between 1-999 (millimeters), inclusive.` // sync with layr_max_minDeviceWidth / layr_max_maxDeviceWidth (from spec) @@ -292,6 +292,50 @@ export class LdmlCompilerMessages { `**Hint**: Use "${def(o.recommended)}"`, ); + static ERROR_TouchLayerRequiresId = SevError | 0x0031; + static Error_TouchLayerRequiresId = (o: { minDeviceWidth: number }, compileContext?: ObjectWithCompileContext) => mx( + this.ERROR_TouchLayerRequiresId, compileContext, + `Layer for touch form with minDeviceWidth=${def(o.minDeviceWidth)} requires an "id" attribute`, ` + Touch layers must have an \`id\` attribute, but should not have a \`modifiers\` + attribute, and conversely, hardware layers must have a \`modifiers\` attribute + and should not have an \`id\` attribute. + `); + + static HINT_TouchLayerHasModifiers = SevHint | 0x0032; + static Hint_TouchLayerHasModifiers = (o: { minDeviceWidth: number, id: string }, compileContext?: ObjectWithCompileContext) => mx( + this.HINT_TouchLayerHasModifiers, compileContext, + `Touch layer with id "${def(o.id)}" for touch form with minDeviceWidth=${def(o.minDeviceWidth)} should not have a "modifiers" attribute`, ` + Touch layers must have an \`id\` attribute, but should not have a \`modifiers\` + attribute, and conversely, hardware layers must have a \`modifiers\` attribute + and should not have an \`id\` attribute. + `); + + static HINT_HardwareLayerHasId = SevHint | 0x0033; + static Hint_HardwareLayerHasId = (o: { formId: string, id: string }, compileContext?: ObjectWithCompileContext) => mx( + this.HINT_HardwareLayerHasId, compileContext, + `Layer for hardware form "${def(o.formId)}" should not have an "id" attribute (currently "${def(o.id)}")`, ` + Touch layers must have an \`id\` attribute, but should not have a \`modifiers\` + attribute, and conversely, hardware layers must have a \`modifiers\` attribute + and should not have an \`id\` attribute. + `); + + static ERROR_HardwareLayerRequiresModifiers = SevError | 0x0034; + static Error_HardwareLayerRequiresModifiers = (o: { formId: string }, compileContext?: ObjectWithCompileContext) => mx( + this.ERROR_HardwareLayerRequiresModifiers, compileContext, + `Layers for hardware form "${def(o.formId)}" require a "modifiers" attribute`, ` + Touch layers must have an \`id\` attribute, but should not have a \`modifiers\` + attribute, and conversely, hardware layers must have a \`modifiers\` attribute + and should not have an \`id\` attribute. + `); + + static HINT_MultipleTouchFormsWithoutMinDeviceWidth = SevHint | 0x0035; + static Hint_MultipleTouchFormsWithoutMinDeviceWidth = (compileContext?: ObjectWithCompileContext) => mx( + this.HINT_MultipleTouchFormsWithoutMinDeviceWidth, compileContext, + `When multiple touch forms are present, 'minDeviceWidth' is required to differentiate them`, ` + Touch forms are differentiated by their minimum device width, so when there is + more than one, at most one form may omit the \`minDeviceWidth\` attribute. + `); + // // Transform syntax errors begin at ...F00 (SevErrorTransform) diff --git a/developer/src/kmc-ldml/src/compiler/visual-keyboard-compiler.ts b/developer/src/kmc-ldml/src/compiler/visual-keyboard-compiler.ts index 480ac5add5..c299939886 100644 --- a/developer/src/kmc-ldml/src/compiler/visual-keyboard-compiler.ts +++ b/developer/src/kmc-ldml/src/compiler/visual-keyboard-compiler.ts @@ -8,6 +8,7 @@ import { ModifierKeyConstants, KMXPlus, VisualKeyboard } from "@keymanapp/common-types"; import { CompilerCallbacks } from "@keymanapp/developer-utils"; import { LdmlCompilerMessages } from "./ldml-compiler-messages.js"; +import { modifiersToString } from "../util/util.js"; // This is a partial polyfill for findLast, so not polluting Array.prototype // https://medium.com/@stheodorejohn/findlast-method-polyfill-in-javascript-bridging-browser-gaps-c3baf6aabae1 @@ -93,7 +94,7 @@ export class LdmlKeyboardVisualKeyboardCompiler { layer: KMXPlus.LayrEntry, hardware: string, ) { - const layerId = layer.id.value; + const layerId = layer.id.value ?? modifiersToString(layer.mod); // used only for reference in error messages hardware = 'us'; // TODO-LDML: US Only. We need to clean this up for other hardware forms diff --git a/developer/src/kmc-ldml/src/util/serialize.ts b/developer/src/kmc-ldml/src/util/serialize.ts index 2a7391d0c6..663304a0ae 100644 --- a/developer/src/kmc-ldml/src/util/serialize.ts +++ b/developer/src/kmc-ldml/src/util/serialize.ts @@ -183,7 +183,7 @@ export function kmxToXml(kmx: KMXPlus.KMXPlusFile): string { return { layers: layr.lists.map(({ hardware, minDeviceWidth, layers }) => ({ ...stringToAttr('formId', hardware), - ...numberToAttr('minDeviceWidth', minDeviceWidth), + ...numberToAttr('minDeviceWidth', minDeviceWidth === 0 ? undefined : minDeviceWidth), layer: layers.map(({ id, mod, rows }) => ({ ...stringToAttr('id', id), ...asAttr('modifiers', modToString(mod)), diff --git a/developer/src/kmc-ldml/src/util/util.ts b/developer/src/kmc-ldml/src/util/util.ts index 316e8bd5d7..6bb977bde0 100644 --- a/developer/src/kmc-ldml/src/util/util.ts +++ b/developer/src/kmc-ldml/src/util/util.ts @@ -164,6 +164,15 @@ export function translateLayerAttrToModifier(layer: LDMLKeyboard.LKLayer) : numb return modifiers.split(',').map(m => translateModifierSubsetToLayer(m)).sort(); } +export function modifiersToString(modifiers: number) : string { + if (!modifiers) return 'none'; + const result: string[] = []; + for(const mod of constants.keys_mod_map) { + if(mod[1] != constants.keys_mod_none && modifiers & mod[1]) result.push(mod[0]); + } + return result.join(' '); +} + function translateModifierSubsetToLayer(modifiers: string) : number { // TODO-LDML: Default #11072 if (modifiers) { @@ -186,7 +195,7 @@ function translateModifierSubsetToLayer(modifiers: string) : number { * @returns true if valid */ export function validModifier(modifier?: string) : boolean { - if (!modifier) return true; // valid to have no modifier, == none + if (!modifier) return false; // hardware layer must have a modifier // TODO-LDML: enforce illegal combinations per spec. for (const sub of modifier.trim().split(',')) { for (const str of sub.trim().split(' ')) { diff --git a/developer/src/kmc-ldml/test/fixtures/basic-serialized.xml b/developer/src/kmc-ldml/test/fixtures/basic-serialized.xml index aa570fd6f0..67ab074ba1 100644 --- a/developer/src/kmc-ldml/test/fixtures/basic-serialized.xml +++ b/developer/src/kmc-ldml/test/fixtures/basic-serialized.xml @@ -11,7 +11,7 @@ - + diff --git a/developer/src/kmc-ldml/test/fixtures/basic.txt b/developer/src/kmc-ldml/test/fixtures/basic.txt index 81748b400e..f8b75a2082 100644 --- a/developer/src/kmc-ldml/test/fixtures/basic.txt +++ b/developer/src/kmc-ldml/test/fixtures/basic.txt @@ -12,7 +12,7 @@ # # cd developer/src/kmc # ./build.sh configure build # if needed -# ./build.sh build-fixtures +# ./build.sh fixtures-build # # This will compile both the .xml and the .txt to build/test/fixtures and also emit the # checksum for basic-xml.kmx so you can patch that into this file. @@ -408,7 +408,7 @@ block(layr) # struct COMP_KMXPLUS_LAYR { index(strNull,strUs,2) # KMXPLUS_STR hardware = 'us' 00 00 00 00 # KMX_DWORD layer; 01 00 00 00 # count - 7B 00 00 00 # KMX_DWORD minDeviceWidth; // 123 + 00 00 00 00 # KMX_DWORD minDeviceWidth; // 0 # layers 0 00 00 00 00 # KMXPLUS_STR id; 00 00 00 00 # KMX_DWORD mod diff --git a/developer/src/kmc-ldml/test/fixtures/basic.xml b/developer/src/kmc-ldml/test/fixtures/basic.xml index 168ee0ef9a..0fa7dc77a8 100644 --- a/developer/src/kmc-ldml/test/fixtures/basic.xml +++ b/developer/src/kmc-ldml/test/fixtures/basic.xml @@ -23,8 +23,7 @@ - - + diff --git a/developer/src/kmc-ldml/test/fixtures/sections/keys/escaped.xml b/developer/src/kmc-ldml/test/fixtures/sections/keys/escaped.xml index 99f9609d21..a3f5dd423c 100644 --- a/developer/src/kmc-ldml/test/fixtures/sections/keys/escaped.xml +++ b/developer/src/kmc-ldml/test/fixtures/sections/keys/escaped.xml @@ -30,11 +30,11 @@ - + - + diff --git a/developer/src/kmc-ldml/test/fixtures/sections/keys/escaped2.xml b/developer/src/kmc-ldml/test/fixtures/sections/keys/escaped2.xml index 20991504b7..e4451484fe 100644 --- a/developer/src/kmc-ldml/test/fixtures/sections/keys/escaped2.xml +++ b/developer/src/kmc-ldml/test/fixtures/sections/keys/escaped2.xml @@ -8,7 +8,7 @@ - + diff --git a/developer/src/kmc-ldml/test/fixtures/sections/keys/gap-switch.xml b/developer/src/kmc-ldml/test/fixtures/sections/keys/gap-switch.xml index a22eb6dc8e..d76717f50b 100644 --- a/developer/src/kmc-ldml/test/fixtures/sections/keys/gap-switch.xml +++ b/developer/src/kmc-ldml/test/fixtures/sections/keys/gap-switch.xml @@ -11,11 +11,11 @@ - + - + diff --git a/developer/src/kmc-ldml/test/fixtures/sections/keys/hardware.xml b/developer/src/kmc-ldml/test/fixtures/sections/keys/hardware.xml index c793eefa4e..8e5ebdbd7e 100644 --- a/developer/src/kmc-ldml/test/fixtures/sections/keys/hardware.xml +++ b/developer/src/kmc-ldml/test/fixtures/sections/keys/hardware.xml @@ -11,11 +11,11 @@ - + - + diff --git a/developer/src/kmc-ldml/test/fixtures/sections/keys/hardware_iso.xml b/developer/src/kmc-ldml/test/fixtures/sections/keys/hardware_iso.xml index 1d2d53aa13..227bfbca35 100644 --- a/developer/src/kmc-ldml/test/fixtures/sections/keys/hardware_iso.xml +++ b/developer/src/kmc-ldml/test/fixtures/sections/keys/hardware_iso.xml @@ -8,7 +8,7 @@ - + diff --git a/developer/src/kmc-ldml/test/fixtures/sections/keys/hardware_us.xml b/developer/src/kmc-ldml/test/fixtures/sections/keys/hardware_us.xml index 0c4a0ee78a..77fa794f4f 100644 --- a/developer/src/kmc-ldml/test/fixtures/sections/keys/hardware_us.xml +++ b/developer/src/kmc-ldml/test/fixtures/sections/keys/hardware_us.xml @@ -8,7 +8,7 @@ - + diff --git a/developer/src/kmc-ldml/test/fixtures/sections/keys/import-local.xml b/developer/src/kmc-ldml/test/fixtures/sections/keys/import-local.xml index c3ef2b3ef6..10050d36c0 100644 --- a/developer/src/kmc-ldml/test/fixtures/sections/keys/import-local.xml +++ b/developer/src/kmc-ldml/test/fixtures/sections/keys/import-local.xml @@ -8,7 +8,7 @@ - + diff --git a/developer/src/kmc-ldml/test/fixtures/sections/keys/invalid-hardware-too-many-keys.xml b/developer/src/kmc-ldml/test/fixtures/sections/keys/invalid-hardware-too-many-keys.xml index 6255e04d55..202da83207 100644 --- a/developer/src/kmc-ldml/test/fixtures/sections/keys/invalid-hardware-too-many-keys.xml +++ b/developer/src/kmc-ldml/test/fixtures/sections/keys/invalid-hardware-too-many-keys.xml @@ -22,7 +22,7 @@ - + diff --git a/developer/src/kmc-ldml/test/fixtures/sections/keys/invalid-hardware-too-many-rows.xml b/developer/src/kmc-ldml/test/fixtures/sections/keys/invalid-hardware-too-many-rows.xml index a80f26e39c..767de7acad 100644 --- a/developer/src/kmc-ldml/test/fixtures/sections/keys/invalid-hardware-too-many-rows.xml +++ b/developer/src/kmc-ldml/test/fixtures/sections/keys/invalid-hardware-too-many-rows.xml @@ -9,7 +9,7 @@ - + diff --git a/developer/src/kmc-ldml/test/fixtures/sections/keys/invalid-key-missing-attrs.xml b/developer/src/kmc-ldml/test/fixtures/sections/keys/invalid-key-missing-attrs.xml index 0dec7a50fc..71e2446bf3 100644 --- a/developer/src/kmc-ldml/test/fixtures/sections/keys/invalid-key-missing-attrs.xml +++ b/developer/src/kmc-ldml/test/fixtures/sections/keys/invalid-key-missing-attrs.xml @@ -8,7 +8,7 @@ - + diff --git a/developer/src/kmc-ldml/test/fixtures/sections/keys/invalid-missing-flick.xml b/developer/src/kmc-ldml/test/fixtures/sections/keys/invalid-missing-flick.xml index d5ea11be31..8d474f5f69 100644 --- a/developer/src/kmc-ldml/test/fixtures/sections/keys/invalid-missing-flick.xml +++ b/developer/src/kmc-ldml/test/fixtures/sections/keys/invalid-missing-flick.xml @@ -12,7 +12,7 @@ - + diff --git a/developer/src/kmc-ldml/test/fixtures/sections/keys/invalid-undefined-key.xml b/developer/src/kmc-ldml/test/fixtures/sections/keys/invalid-undefined-key.xml index 6417058b5c..71c9fdb7df 100644 --- a/developer/src/kmc-ldml/test/fixtures/sections/keys/invalid-undefined-key.xml +++ b/developer/src/kmc-ldml/test/fixtures/sections/keys/invalid-undefined-key.xml @@ -8,7 +8,7 @@ - + diff --git a/developer/src/kmc-ldml/test/fixtures/sections/keys/invalid-undefined-var-1.xml b/developer/src/kmc-ldml/test/fixtures/sections/keys/invalid-undefined-var-1.xml index d679a35421..a0466969bc 100644 --- a/developer/src/kmc-ldml/test/fixtures/sections/keys/invalid-undefined-var-1.xml +++ b/developer/src/kmc-ldml/test/fixtures/sections/keys/invalid-undefined-var-1.xml @@ -8,7 +8,7 @@ - + diff --git a/developer/src/kmc-ldml/test/fixtures/sections/keys/invalid-undefined-var-1b.xml b/developer/src/kmc-ldml/test/fixtures/sections/keys/invalid-undefined-var-1b.xml index 384babd70c..fb329cc738 100644 --- a/developer/src/kmc-ldml/test/fixtures/sections/keys/invalid-undefined-var-1b.xml +++ b/developer/src/kmc-ldml/test/fixtures/sections/keys/invalid-undefined-var-1b.xml @@ -9,7 +9,7 @@ - + diff --git a/developer/src/kmc-ldml/test/fixtures/sections/keys/many-modifiers.xml b/developer/src/kmc-ldml/test/fixtures/sections/keys/many-modifiers.xml index 5c380cd737..85e84d3a1f 100644 --- a/developer/src/kmc-ldml/test/fixtures/sections/keys/many-modifiers.xml +++ b/developer/src/kmc-ldml/test/fixtures/sections/keys/many-modifiers.xml @@ -7,7 +7,7 @@ - + diff --git a/developer/src/kmc-ldml/test/fixtures/sections/keys/markers.xml b/developer/src/kmc-ldml/test/fixtures/sections/keys/markers.xml index 2f5183600e..09c06cd9f6 100644 --- a/developer/src/kmc-ldml/test/fixtures/sections/keys/markers.xml +++ b/developer/src/kmc-ldml/test/fixtures/sections/keys/markers.xml @@ -17,7 +17,7 @@ - + diff --git a/developer/src/kmc-ldml/test/fixtures/sections/keys/maximal-nfc.xml b/developer/src/kmc-ldml/test/fixtures/sections/keys/maximal-nfc.xml index c7c6dccd71..ea7507cddc 100644 --- a/developer/src/kmc-ldml/test/fixtures/sections/keys/maximal-nfc.xml +++ b/developer/src/kmc-ldml/test/fixtures/sections/keys/maximal-nfc.xml @@ -38,11 +38,11 @@ - + - + diff --git a/developer/src/kmc-ldml/test/fixtures/sections/keys/maximal.xml b/developer/src/kmc-ldml/test/fixtures/sections/keys/maximal.xml index b7c5ade4bc..deceff6a21 100644 --- a/developer/src/kmc-ldml/test/fixtures/sections/keys/maximal.xml +++ b/developer/src/kmc-ldml/test/fixtures/sections/keys/maximal.xml @@ -36,11 +36,11 @@ - + - + diff --git a/developer/src/kmc-ldml/test/fixtures/sections/keys/minimal.xml b/developer/src/kmc-ldml/test/fixtures/sections/keys/minimal.xml index f670d95d4f..7227fcf8a9 100644 --- a/developer/src/kmc-ldml/test/fixtures/sections/keys/minimal.xml +++ b/developer/src/kmc-ldml/test/fixtures/sections/keys/minimal.xml @@ -9,7 +9,7 @@ - + diff --git a/developer/src/kmc-ldml/test/fixtures/sections/keys/warn-no-keycap.xml b/developer/src/kmc-ldml/test/fixtures/sections/keys/warn-no-keycap.xml index 6d0cf23f5b..f28da4fd57 100644 --- a/developer/src/kmc-ldml/test/fixtures/sections/keys/warn-no-keycap.xml +++ b/developer/src/kmc-ldml/test/fixtures/sections/keys/warn-no-keycap.xml @@ -20,7 +20,7 @@ - + diff --git a/developer/src/kmc-ldml/test/fixtures/sections/layr/error-bad-width-.xml b/developer/src/kmc-ldml/test/fixtures/sections/layr/error-bad-width-.xml new file mode 100644 index 0000000000..ede584dc28 --- /dev/null +++ b/developer/src/kmc-ldml/test/fixtures/sections/layr/error-bad-width-.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/developer/src/kmc-ldml/test/fixtures/sections/layr/error-bad-width-0.xml b/developer/src/kmc-ldml/test/fixtures/sections/layr/error-bad-width-0.xml index 3054afceb7..bd3a58112a 100644 --- a/developer/src/kmc-ldml/test/fixtures/sections/layr/error-bad-width-0.xml +++ b/developer/src/kmc-ldml/test/fixtures/sections/layr/error-bad-width-0.xml @@ -8,7 +8,7 @@ - + @@ -19,7 +19,7 @@ - + diff --git a/developer/src/kmc-ldml/test/fixtures/sections/layr/error-bad-width-1024.xml b/developer/src/kmc-ldml/test/fixtures/sections/layr/error-bad-width-1024.xml index d1d34b598f..08796be62d 100644 --- a/developer/src/kmc-ldml/test/fixtures/sections/layr/error-bad-width-1024.xml +++ b/developer/src/kmc-ldml/test/fixtures/sections/layr/error-bad-width-1024.xml @@ -8,7 +8,7 @@ - + @@ -19,7 +19,7 @@ - + diff --git a/developer/src/kmc-ldml/test/fixtures/sections/layr/error-bad-width-1500.xml b/developer/src/kmc-ldml/test/fixtures/sections/layr/error-bad-width-1500.xml index 5000e27304..2e101fdd03 100644 --- a/developer/src/kmc-ldml/test/fixtures/sections/layr/error-bad-width-1500.xml +++ b/developer/src/kmc-ldml/test/fixtures/sections/layr/error-bad-width-1500.xml @@ -8,11 +8,11 @@ - + - + diff --git a/developer/src/kmc-ldml/test/fixtures/sections/layr/error-bad-width-x.xml b/developer/src/kmc-ldml/test/fixtures/sections/layr/error-bad-width-x.xml index fec6f8d26f..6106e9ab42 100644 --- a/developer/src/kmc-ldml/test/fixtures/sections/layr/error-bad-width-x.xml +++ b/developer/src/kmc-ldml/test/fixtures/sections/layr/error-bad-width-x.xml @@ -8,11 +8,11 @@ - + - + diff --git a/developer/src/kmc-ldml/test/fixtures/sections/layr/error-custom-us-form.xml b/developer/src/kmc-ldml/test/fixtures/sections/layr/error-custom-us-form.xml index 3a242dddfd..9195dd6d98 100644 --- a/developer/src/kmc-ldml/test/fixtures/sections/layr/error-custom-us-form.xml +++ b/developer/src/kmc-ldml/test/fixtures/sections/layr/error-custom-us-form.xml @@ -16,7 +16,7 @@ - + diff --git a/developer/src/kmc-ldml/test/fixtures/sections/layr/error-custom-zzz-form.xml b/developer/src/kmc-ldml/test/fixtures/sections/layr/error-custom-zzz-form.xml index b1ca16c5a1..cd5a044a10 100644 --- a/developer/src/kmc-ldml/test/fixtures/sections/layr/error-custom-zzz-form.xml +++ b/developer/src/kmc-ldml/test/fixtures/sections/layr/error-custom-zzz-form.xml @@ -16,7 +16,7 @@ - + diff --git a/developer/src/kmc-ldml/test/fixtures/sections/layr/error-dup-width.xml b/developer/src/kmc-ldml/test/fixtures/sections/layr/error-dup-width.xml index 695e2dbde0..af69e2b205 100644 --- a/developer/src/kmc-ldml/test/fixtures/sections/layr/error-dup-width.xml +++ b/developer/src/kmc-ldml/test/fixtures/sections/layr/error-dup-width.xml @@ -8,7 +8,7 @@ - + diff --git a/developer/src/kmc-ldml/test/fixtures/sections/layr/error-hardware-layer-requires-modifiers.xml b/developer/src/kmc-ldml/test/fixtures/sections/layr/error-hardware-layer-requires-modifiers.xml new file mode 100644 index 0000000000..9b77333ca8 --- /dev/null +++ b/developer/src/kmc-ldml/test/fixtures/sections/layr/error-hardware-layer-requires-modifiers.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/developer/src/kmc-ldml/test/fixtures/sections/layr/error-touch-layer-requires-id.xml b/developer/src/kmc-ldml/test/fixtures/sections/layr/error-touch-layer-requires-id.xml new file mode 100644 index 0000000000..3030c58eaa --- /dev/null +++ b/developer/src/kmc-ldml/test/fixtures/sections/layr/error-touch-layer-requires-id.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/developer/src/kmc-ldml/test/fixtures/sections/layr/hint-hardware-layer-has-id.xml b/developer/src/kmc-ldml/test/fixtures/sections/layr/hint-hardware-layer-has-id.xml new file mode 100644 index 0000000000..1065e04c94 --- /dev/null +++ b/developer/src/kmc-ldml/test/fixtures/sections/layr/hint-hardware-layer-has-id.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/developer/src/kmc-ldml/test/fixtures/sections/layr/hint-multiple-touch-forms-without-min-device-width.xml b/developer/src/kmc-ldml/test/fixtures/sections/layr/hint-multiple-touch-forms-without-min-device-width.xml new file mode 100644 index 0000000000..dbf66bece9 --- /dev/null +++ b/developer/src/kmc-ldml/test/fixtures/sections/layr/hint-multiple-touch-forms-without-min-device-width.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/developer/src/kmc-ldml/test/fixtures/sections/layr/hint-touch-layer-has-modifiers.xml b/developer/src/kmc-ldml/test/fixtures/sections/layr/hint-touch-layer-has-modifiers.xml new file mode 100644 index 0000000000..1f38e43df6 --- /dev/null +++ b/developer/src/kmc-ldml/test/fixtures/sections/layr/hint-touch-layer-has-modifiers.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/developer/src/kmc-ldml/test/fixtures/sections/keys/invalid-bad-modifier.xml b/developer/src/kmc-ldml/test/fixtures/sections/layr/invalid-bad-modifier.xml similarity index 75% rename from developer/src/kmc-ldml/test/fixtures/sections/keys/invalid-bad-modifier.xml rename to developer/src/kmc-ldml/test/fixtures/sections/layr/invalid-bad-modifier.xml index 29a2ba7b73..fcb72da392 100644 --- a/developer/src/kmc-ldml/test/fixtures/sections/keys/invalid-bad-modifier.xml +++ b/developer/src/kmc-ldml/test/fixtures/sections/layr/invalid-bad-modifier.xml @@ -6,7 +6,7 @@ - + diff --git a/developer/src/kmc-ldml/test/fixtures/sections/layr/invalid-invalid-form.xml b/developer/src/kmc-ldml/test/fixtures/sections/layr/invalid-invalid-form.xml index c15dac8c26..8d8e91f83f 100644 --- a/developer/src/kmc-ldml/test/fixtures/sections/layr/invalid-invalid-form.xml +++ b/developer/src/kmc-ldml/test/fixtures/sections/layr/invalid-invalid-form.xml @@ -9,7 +9,7 @@ - + diff --git a/developer/src/kmc-ldml/test/fixtures/sections/layr/invalid-multi-hardware.xml b/developer/src/kmc-ldml/test/fixtures/sections/layr/invalid-multi-hardware.xml index 7d3df0cb34..2a358ffdd8 100644 --- a/developer/src/kmc-ldml/test/fixtures/sections/layr/invalid-multi-hardware.xml +++ b/developer/src/kmc-ldml/test/fixtures/sections/layr/invalid-multi-hardware.xml @@ -1,6 +1,6 @@ - + @@ -9,14 +9,14 @@ - + - + diff --git a/developer/src/kmc-ldml/test/fixtures/sections/layr/multiple-forms-one-without-min-device-width.xml b/developer/src/kmc-ldml/test/fixtures/sections/layr/multiple-forms-one-without-min-device-width.xml new file mode 100644 index 0000000000..e89c59610b --- /dev/null +++ b/developer/src/kmc-ldml/test/fixtures/sections/layr/multiple-forms-one-without-min-device-width.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/developer/src/kmc-ldml/test/fixtures/sections/layr/row-keys-whitespace.xml b/developer/src/kmc-ldml/test/fixtures/sections/layr/row-keys-whitespace.xml index f8d1a629d5..c69c74085c 100644 --- a/developer/src/kmc-ldml/test/fixtures/sections/layr/row-keys-whitespace.xml +++ b/developer/src/kmc-ldml/test/fixtures/sections/layr/row-keys-whitespace.xml @@ -9,7 +9,7 @@ - + diff --git a/developer/src/kmc-ldml/test/fixtures/sections/layr/warn-custom-us-form.xml b/developer/src/kmc-ldml/test/fixtures/sections/layr/warn-custom-us-form.xml index ace1485521..e80e0624b6 100644 --- a/developer/src/kmc-ldml/test/fixtures/sections/layr/warn-custom-us-form.xml +++ b/developer/src/kmc-ldml/test/fixtures/sections/layr/warn-custom-us-form.xml @@ -16,7 +16,7 @@ - + diff --git a/developer/src/kmc-ldml/test/fixtures/sections/layr/warn-custom-zzz-form.xml b/developer/src/kmc-ldml/test/fixtures/sections/layr/warn-custom-zzz-form.xml index 52c6e3a2e9..869db7789c 100644 --- a/developer/src/kmc-ldml/test/fixtures/sections/layr/warn-custom-zzz-form.xml +++ b/developer/src/kmc-ldml/test/fixtures/sections/layr/warn-custom-zzz-form.xml @@ -14,7 +14,7 @@ - + diff --git a/developer/src/kmc-ldml/test/fixtures/sections/strs/hint-pua.xml b/developer/src/kmc-ldml/test/fixtures/sections/strs/hint-pua.xml index 9ce063580b..c4cb6c80e3 100644 --- a/developer/src/kmc-ldml/test/fixtures/sections/strs/hint-pua.xml +++ b/developer/src/kmc-ldml/test/fixtures/sections/strs/hint-pua.xml @@ -20,8 +20,8 @@ - - + + diff --git a/developer/src/kmc-ldml/test/fixtures/sections/strs/invalid-illegal.xml b/developer/src/kmc-ldml/test/fixtures/sections/strs/invalid-illegal.xml index 3eddaffdee..270843453d 100644 --- a/developer/src/kmc-ldml/test/fixtures/sections/strs/invalid-illegal.xml +++ b/developer/src/kmc-ldml/test/fixtures/sections/strs/invalid-illegal.xml @@ -21,7 +21,7 @@ - + diff --git a/developer/src/kmc-ldml/test/fixtures/sections/strs/warn-denorm-1.xml b/developer/src/kmc-ldml/test/fixtures/sections/strs/warn-denorm-1.xml index 49cd61d358..6fa23ddd0d 100644 --- a/developer/src/kmc-ldml/test/fixtures/sections/strs/warn-denorm-1.xml +++ b/developer/src/kmc-ldml/test/fixtures/sections/strs/warn-denorm-1.xml @@ -9,8 +9,8 @@ - - + + diff --git a/developer/src/kmc-ldml/test/fixtures/sections/strs/warn-denorm-2.xml b/developer/src/kmc-ldml/test/fixtures/sections/strs/warn-denorm-2.xml index ec001db768..4a49747916 100644 --- a/developer/src/kmc-ldml/test/fixtures/sections/strs/warn-denorm-2.xml +++ b/developer/src/kmc-ldml/test/fixtures/sections/strs/warn-denorm-2.xml @@ -13,8 +13,8 @@ - - + + diff --git a/developer/src/kmc-ldml/test/fixtures/sections/strs/warn-denorm-3.xml b/developer/src/kmc-ldml/test/fixtures/sections/strs/warn-denorm-3.xml index a40c119099..1cd994d26d 100644 --- a/developer/src/kmc-ldml/test/fixtures/sections/strs/warn-denorm-3.xml +++ b/developer/src/kmc-ldml/test/fixtures/sections/strs/warn-denorm-3.xml @@ -17,8 +17,8 @@ - - + + diff --git a/developer/src/kmc-ldml/test/fixtures/sections/strs/warn-denorm-4.xml b/developer/src/kmc-ldml/test/fixtures/sections/strs/warn-denorm-4.xml index cf443c61fe..f4aec7ea42 100644 --- a/developer/src/kmc-ldml/test/fixtures/sections/strs/warn-denorm-4.xml +++ b/developer/src/kmc-ldml/test/fixtures/sections/strs/warn-denorm-4.xml @@ -11,8 +11,8 @@ - - + + diff --git a/developer/src/kmc-ldml/test/fixtures/sections/strs/warn-unassigned.xml b/developer/src/kmc-ldml/test/fixtures/sections/strs/warn-unassigned.xml index fa21ebe28c..f009aeb1aa 100644 --- a/developer/src/kmc-ldml/test/fixtures/sections/strs/warn-unassigned.xml +++ b/developer/src/kmc-ldml/test/fixtures/sections/strs/warn-unassigned.xml @@ -20,8 +20,8 @@ - - + + diff --git a/developer/src/kmc-ldml/test/fixtures/sections/tran/fail-bad-tran-2.xml b/developer/src/kmc-ldml/test/fixtures/sections/tran/fail-bad-tran-2.xml index 24d904f7f2..51d579f2f0 100644 --- a/developer/src/kmc-ldml/test/fixtures/sections/tran/fail-bad-tran-2.xml +++ b/developer/src/kmc-ldml/test/fixtures/sections/tran/fail-bad-tran-2.xml @@ -7,7 +7,7 @@ - + diff --git a/developer/src/kmc-ldml/test/fixtures/sections/tran/tran-escape.xml b/developer/src/kmc-ldml/test/fixtures/sections/tran/tran-escape.xml index c4f7872587..6fc85562c1 100644 --- a/developer/src/kmc-ldml/test/fixtures/sections/tran/tran-escape.xml +++ b/developer/src/kmc-ldml/test/fixtures/sections/tran/tran-escape.xml @@ -5,7 +5,7 @@ - + diff --git a/developer/src/kmc-ldml/test/helpers/index.ts b/developer/src/kmc-ldml/test/helpers/index.ts index be6216f9c1..2b424fb1c1 100644 --- a/developer/src/kmc-ldml/test/helpers/index.ts +++ b/developer/src/kmc-ldml/test/helpers/index.ts @@ -9,7 +9,7 @@ import { fileURLToPath } from 'url'; import { SectionCompiler, SectionCompilerNew } from '../../src/compiler/section-compiler.js'; import { util, KMXPlus, LdmlKeyboardTypes } from '@keymanapp/common-types'; import { CompilerEvent, compilerEventFormat, CompilerCallbacks, LDMLKeyboardXMLSourceFileReader, LDMLKeyboardTestDataXMLSourceFile, LDMLKeyboard, CompilerError } from "@keymanapp/developer-utils"; -import { LdmlKeyboardCompiler } from '../../src/main.js'; // make sure main.js compiles +import { LdmlCompilerMessages, LdmlKeyboardCompiler } from '../../src/main.js'; // make sure main.js compiles import { assert } from 'chai'; import { KMXPlusMetadataCompiler } from '../../src/compiler/metadata-compiler.js'; import { LdmlCompilerOptions } from '../../src/compiler/ldml-compiler-options.js'; @@ -20,7 +20,7 @@ import LDMLKeyboardXMLSourceFile = LDMLKeyboard.LDMLKeyboardXMLSourceFile; import DependencySections = KMXPlus.DependencySections; import Section = KMXPlus.Section; import { ElemCompiler, ListCompiler, StrsCompiler } from '../../src/compiler/empty-compiler.js'; -import { KmnCompiler } from '@keymanapp/kmc-kmn'; +import { KmnCompiler, KmnCompilerMessages } from '@keymanapp/kmc-kmn'; import { VarsCompiler } from '../../src/compiler/vars.js'; /** @@ -279,6 +279,18 @@ export function scrubContextFromMessages(messages: CompilerEvent[]): CompilerEve }); } +function messagesToString(messages?: CompilerEventOrMatch[]) { + return messages?.length + ? messages + .map(message => + Object.keys(LdmlCompilerMessages).find(key => (LdmlCompilerMessages)[key] === message.code) ?? + Object.keys(KmnCompilerMessages).find(key => (KmnCompilerMessages)[key] === message.code) ?? + 'unknown message' + ) + .join(', ') + : 'unknown'; +} + /** * Run a bunch of cases * @param cases cases to run @@ -290,8 +302,14 @@ export function testCompilationCases(compiler: SectionCompilerNew, cases : Compi const callbacks = new TestCompilerCallbacks(); for (const testcase of cases) { const expectFailure = testcase.throws || !!(testcase.errors); // if true, we expect this to fail - const testHeading = expectFailure ? `should fail to compile: ${testcase.subpath}`: - `should compile: ${testcase.subpath}`; + const testHeading = `${testcase.subpath}: ` + ( + testcase.throws ? `should fail to compile with an exception` : + typeof testcase.errors === 'boolean' ? `should fail to compile with errors` : + testcase.errors?.length ? `should fail to compile with errors: ${messagesToString(testcase.errors)}` : + testcase.warnings?.length ? `should compile with hints or warnings: ${messagesToString(testcase.warnings)}` : + 'should compile without hints, warnings, or errors' + ); + it(testHeading, async function () { callbacks.clear(); // special case for an expected exception diff --git a/developer/src/kmc-ldml/test/keys.tests.ts b/developer/src/kmc-ldml/test/keys.tests.ts index 97171cf6fc..ef8138bd26 100644 --- a/developer/src/kmc-ldml/test/keys.tests.ts +++ b/developer/src/kmc-ldml/test/keys.tests.ts @@ -309,12 +309,6 @@ describe('keys.kmap', function () { ]); }, }, - { - subpath: 'sections/keys/invalid-bad-modifier.xml', - errors: [ - LdmlCompilerMessages.Error_InvalidModifier({ modifiers: 'altR-shift' }), - ] - }, { subpath: 'sections/keys/invalid-missing-flick.xml', errors: [ @@ -458,7 +452,7 @@ describe('keys.kmap', function () { assert.isNull(keys); assert.equal(compilerTestCallbacks.messages.length, 1); - assert.deepEqual(compilerTestCallbacks.messages[0], LdmlCompilerMessages.Error_RowOnHardwareLayerHasTooManyKeys({ row: 1, hardware: 'us', modifiers: 'none' }, withOffset(785) as LDMLKeyboard.LKRow)); + assert.deepEqual(compilerTestCallbacks.messages[0], LdmlCompilerMessages.Error_RowOnHardwareLayerHasTooManyKeys({ row: 1, hardware: 'us', modifiers: 'none' }, withOffset(792) as LDMLKeyboard.LKRow)); }); it('should reject layouts with undefined keys', async function() { @@ -466,7 +460,7 @@ describe('keys.kmap', function () { assert.isNull(keys); assert.equal(compilerTestCallbacks.messages.length, 1); - assert.deepEqual(compilerTestCallbacks.messages[0], LdmlCompilerMessages.Error_KeyNotFoundInKeyBag({col: 1, form: 'hardware', keyId: 'foo', layer: 'base', row: 1}, withOffset(271) as LDMLKeyboard.LKRow)); + assert.deepEqual(compilerTestCallbacks.messages[0], LdmlCompilerMessages.Error_KeyNotFoundInKeyBag({col: 1, form: 'hardware', keyId: 'foo', layer: 'none', row: 1}, withOffset(278) as LDMLKeyboard.LKRow)); }); it('should reject layouts with invalid keys', async function() { const keys = await loadSectionFixture(KeysCompiler, 'sections/keys/invalid-key-missing-attrs.xml', compilerTestCallbacks, keysDependencies) as Keys; diff --git a/developer/src/kmc-ldml/test/layr.tests.ts b/developer/src/kmc-ldml/test/layr.tests.ts index 64e4a3d373..6d8918089c 100644 --- a/developer/src/kmc-ldml/test/layr.tests.ts +++ b/developer/src/kmc-ldml/test/layr.tests.ts @@ -41,7 +41,7 @@ describe('layr', function () { assert.ok(row0); assert.equal(row0.keys.length, 2); - assert.equal(layer0.id.value, 'base'); + assert.equal(layer0.id.value, ''); assert.equal(layer0.mod, constants.keys_mod_none); assert.equal(row0.keys[0]?.value, 'grave'); }, @@ -58,7 +58,7 @@ describe('layr', function () { assert.equal(listHardware.layers.length, 2); const hardware0 = listHardware.layers[0]; assert.ok(hardware0); - assert.equal(hardware0.id.value, 'base'); + assert.equal(hardware0.id.value, ''); assert.equal(hardware0.mod, constants.keys_mod_none); const hardware0row0 = hardware0.rows[0]; assert.ok(hardware0row0); @@ -67,7 +67,7 @@ describe('layr', function () { const hardware1 = listHardware.layers[1]; assert.ok(hardware1); assert.equal(hardware1.rows.length, 1); - assert.equal(hardware1.id.value, 'shift'); + assert.equal(hardware1.id.value, ''); assert.equal(hardware1.mod, constants.keys_mod_shift); const hardware1row0 = hardware1.rows[0]; assert.ok(hardware1row0); @@ -94,7 +94,7 @@ describe('layr', function () { errors: [], }, { - subpath: 'sections/keys/invalid-bad-modifier.xml', + subpath: 'sections/layr/invalid-bad-modifier.xml', errors: [ LdmlCompilerMessages.Error_InvalidModifier({ modifiers: 'altR-shift', @@ -130,7 +130,7 @@ describe('layr', function () { ])); assert.sameDeepMembers(bymod, [ // flatten the layers for comparison, assume a single key - ['base', constants.keys_mod_none, 'a'], + ['', constants.keys_mod_none, 'a'], ['', constants.keys_mod_altR, 'c'], ['', constants.keys_mod_ctrl | constants.keys_mod_shift, 'c'], ]); @@ -157,7 +157,7 @@ describe('layr', function () { const layer0 = list0.layers[0]; assert.ok(layer0); assert.equal(layer0.rows.length, 2); - assert.equal(layer0.id.value, 'base'); + assert.equal(layer0.id.value, ''); assert.equal(layer0.mod, constants.keys_mod_none); for(const row of layer0.rows) { assert.ok(row); @@ -173,12 +173,45 @@ describe('layr', function () { LdmlCompilerMessages.Error_DuplicateLayerWidth({ minDeviceWidth: 120}), ] }, - ...[0, 1024, 1500, `x` as unknown as number].map(minDeviceWidth => ({ + { + subpath: 'sections/layr/hint-multiple-touch-forms-without-min-device-width.xml', + warnings: [ + LdmlCompilerMessages.Hint_MultipleTouchFormsWithoutMinDeviceWidth(), + ] + }, + { + subpath: 'sections/layr/multiple-forms-one-without-min-device-width.xml', + }, + ...[0, 1024, 1500, `x`, ``].map(minDeviceWidth => ({ subpath: `sections/layr/error-bad-width-${minDeviceWidth}.xml`, errors: [ // LdmlCompilerMessages.Error_InvalidLayerWidth({ minDeviceWidth }), ] })), + { + subpath: 'sections/layr/error-touch-layer-requires-id.xml', + errors: [ + LdmlCompilerMessages.Error_TouchLayerRequiresId({ minDeviceWidth: 120}), + ] + }, + { + subpath: 'sections/layr/error-hardware-layer-requires-modifiers.xml', + errors: [ + LdmlCompilerMessages.Error_HardwareLayerRequiresModifiers({ formId: 'us' }), + ] + }, + { + subpath: 'sections/layr/hint-touch-layer-has-modifiers.xml', + warnings: [ // hints grouped under warnings + LdmlCompilerMessages.Hint_TouchLayerHasModifiers({id: 'base', minDeviceWidth: 120}), + ] + }, + { + subpath: 'sections/layr/hint-hardware-layer-has-id.xml', + warnings: [ // hints grouped under warnings + LdmlCompilerMessages.Hint_HardwareLayerHasId({formId: 'iso', id: 'base'}), + ] + }, ]); }); diff --git a/developer/src/kmc-ldml/test/linter.tests.ts b/developer/src/kmc-ldml/test/linter.tests.ts index cd122840e8..21d5c723ad 100644 --- a/developer/src/kmc-ldml/test/linter.tests.ts +++ b/developer/src/kmc-ldml/test/linter.tests.ts @@ -7,10 +7,16 @@ import { LdmlCompilerMessages } from '../src/compiler/ldml-compiler-messages.js' describe('linter-tests', function() { this.slow(500); // 0.5 sec -- json schema validation takes a while - before(function() { + this.beforeEach(function() { compilerTestCallbacks.clear(); }); + this.afterEach(function() { + if(this.currentTest.isFailed()) { + compilerTestCallbacks.printMessages(); + } + }); + it('should warn on mark keys with no display', async function () { // unassigned not implemented yet const inputFilename = makePathToFixture('sections/keys/warn-no-keycap.xml'); diff --git a/developer/src/kmc-ldml/test/utils.tests.ts b/developer/src/kmc-ldml/test/utils.tests.ts index 5b5a102f43..d59ceffd87 100644 --- a/developer/src/kmc-ldml/test/utils.tests.ts +++ b/developer/src/kmc-ldml/test/utils.tests.ts @@ -224,11 +224,11 @@ describe('test of util/util.ts', () => { }); }); describe('isValidModifier()', () => { - it('should treat falsy values as valid', () => { + it('should treat falsy values as invalid', () => { for(const str of [ - null, undefined, '', 'none' + null, undefined, '' ]) { - assert.ok(validModifier(str), `validModifier(${JSON.stringify(str)})`); + assert.notOk(validModifier(str), `validModifier(${JSON.stringify(str)})`); } }); it('should treat bad values as invalid', () => { diff --git a/developer/src/kmc-ldml/test/visual-keyboard-compiler.tests.ts b/developer/src/kmc-ldml/test/visual-keyboard-compiler.tests.ts index a6f0de9250..9155685618 100644 --- a/developer/src/kmc-ldml/test/visual-keyboard-compiler.tests.ts +++ b/developer/src/kmc-ldml/test/visual-keyboard-compiler.tests.ts @@ -18,6 +18,16 @@ import { LdmlKeyboardCompiler } from '../src/main.js'; describe('visual-keyboard-compiler', function() { this.slow(500); // 0.5 sec -- json schema validation takes a while + this.beforeEach(function() { + compilerTestCallbacks.clear(); + }); + + this.afterEach(function() { + if(this.currentTest.isFailed()) { + compilerTestCallbacks.printMessages(); + } + }); + it('should build fixtures', async function() { // Let's build basic.xml diff --git a/developer/src/kmc/src/commands/build.ts b/developer/src/kmc/src/commands/build.ts index 7e21f99f9c..4dc92ecc16 100644 --- a/developer/src/kmc/src/commands/build.ts +++ b/developer/src/kmc/src/commands/build.ts @@ -1,3 +1,8 @@ +/* + * Keyman is copyright (C) SIL Global. MIT License. + * + * Implementation of the `kmc build` command + */ import * as fs from 'fs'; import * as path from 'path'; import { Command } from 'commander'; @@ -13,7 +18,12 @@ import { isProject } from '../util/projectLoader.js'; import { buildTestData } from './buildTestData/index.js'; import { buildWindowsPackageInstaller } from './buildWindowsPackageInstaller/index.js'; import { commanderOptionsToCompilerOptions } from '../util/extendedCompilerOptions.js'; -import { exitProcess } from '../util/sysexits.js'; +import { exitProcess, SysExits } from '../util/sysexits.js'; + +interface OutFileSpecification { + isFolder?: boolean; + path?: string; +}; export function declareBuild(program: Command) { // TODO: localization? @@ -28,7 +38,8 @@ export function declareBuild(program: Command) { .option('-m, --message ', 'Adjust severity of info, hint or warning message to Disable (default), Info, Hint, Warn or Error (option can be repeated)', (value, previous) => previous.concat([value]), []) .option('--no-compiler-version', 'Exclude compiler version metadata from output') - .option('--no-warn-deprecated-code', 'Turn off warnings for deprecated code styles'); + .option('--no-warn-deprecated-code', 'Turn off warnings for deprecated code styles') + .option('--continue-on-error', 'Continue build of subsequent files even if earlier files have errors'); BuildBaseOptions.addAll(buildCommand); @@ -92,27 +103,43 @@ async function buildFile(filenames: string[], _options: any, commander: any): Pr filenames.push('.'); } - /* c8 ignore next 6 */ - // full test on console log of error message not justified; check with user test recommended - if(filenames.length > 1 && commanderOptions.outFile) { - // -o can only be specified with a single input file - callbacks.reportMessage(InfrastructureMessages.Error_OutFileCanOnlyBeSpecifiedWithSingleInfile()); - return await exitProcess(1); - } - if(!expandFileLists(filenames, callbacks)) { return await exitProcess(1); } + const spec = interpretOutFile(commanderOptions.outFile, filenames.length, fs.statSync); + if(!spec) { + callbacks.reportMessage(InfrastructureMessages.Error_OutFileMustBeAFolder()); + return await exitProcess(1); + } + + let result = true; for(const filename of filenames) { - if(!await build(filename, commanderOptions.outFile, callbacks, options)) { - // Once a file fails to build, we bail on subsequent builds - return await exitProcess(1); + const buildResult = await build(filename, spec, callbacks, options); + if(!buildResult) { + result = false; + if(buildResult === null) { + // We always die on fatal exceptions + return await exitProcess(SysExits.EX_SOFTWARE); + } + if(!commanderOptions.continueOnError) { + // Once a file fails to build, we bail on subsequent builds + return await exitProcess(1); + } } } + + if(!result) { + // If any file failed to build, then we return failure, + return await exitProcess(1); + } } -async function build(filename: string, outfile: string, parentCallbacks: NodeCompilerCallbacks, options: CompilerOptions): Promise { +/** + * Build a single file + * @returns true on success, false on build failure, null on internal errors + */ +async function build(filename: string, outfileSpec: OutFileSpecification, parentCallbacks: NodeCompilerCallbacks, options: CompilerOptions): Promise { try { // TEST: allow command-line simulation of infrastructure fatal errors, and // also for unit tests @@ -158,6 +185,21 @@ async function build(filename: string, outfile: string, parentCallbacks: NodeCom const callbacks = new CompilerFileCallbacks(buildFilename, options, parentCallbacks); callbacks.reportMessage(InfrastructureMessages.Info_BuildingFile({filename:buildFilename, relativeFilename})); + let outfile = outfileSpec?.path; + + // Special case for directory outfile - create folder if required + if(outfileSpec?.isFolder) { + if(!fs.existsSync(outfileSpec.path)) { + fs.mkdirSync(outfileSpec.path, { recursive: true }); + } + + let base = path.basename(filename); + if(base.endsWith(builder.sourceExtension)) { + base = base.substring(0, base.length - builder.sourceExtension.length) + builder.compiledExtension; + } + outfile = path.join(outfile, base); + } + let result = await builder.build(filename, outfile, callbacks, options); result = result && !callbacks.hasFailureMessage(); if(result) { @@ -178,13 +220,61 @@ async function build(filename: string, outfile: string, parentCallbacks: NodeCom return result; } catch(e) { parentCallbacks.reportMessage(InfrastructureMessages.Fatal_UnexpectedException({e})); - return false; + return null; } } +/** + * Interpret the output filename based on shape of input and filesystem status. + * + * The output path is treated as a folder if: + * (a) more than one input file is specified, or + * (b) it ends with a trailing slash or backslash, or + * (c) it already exists and is a folder + * + * @param path + * @param inputFilenameCount + * @returns null if a regular file is in the way of a folder, otherwise a specification + */ +function interpretOutFile(path: string|undefined, inputFilenameCount: number, statSync: (path: fs.PathLike, options?: fs.StatSyncOptions) => {isDirectory?: ()=>boolean}): OutFileSpecification { + if(path === null || !inputFilenameCount || inputFilenameCount < 1) { + throw new Error('Invalid parameters'); + } + + const spec: OutFileSpecification = { + isFolder: false, + path + }; + + if(!path) { + return spec; + } + + if(inputFilenameCount > 1 || + (path.endsWith('/') || path.endsWith('\\')) || + statSync(path, {throwIfNoEntry: false})?.isDirectory()) { + + spec.isFolder = true; + + if(path.endsWith('/') || path.endsWith('\\')) { + // remove trailing delimiter + spec.path = path.substring(0, path.length-1); + } + + const stats = statSync(spec.path, {throwIfNoEntry: false}); + if(stats && !stats.isDirectory()) { + // existing file is in the way + return null; + } + } + + return spec; +} + /** * these are exported only for unit tests, do not use */ export const unitTestEndpoints = { build, + interpretOutFile, }; diff --git a/developer/src/kmc/src/messages/infrastructureMessages.ts b/developer/src/kmc/src/messages/infrastructureMessages.ts index 338af89073..7a7e8f00bd 100644 --- a/developer/src/kmc/src/messages/infrastructureMessages.ts +++ b/developer/src/kmc/src/messages/infrastructureMessages.ts @@ -1,3 +1,6 @@ +/* + * Keyman is copyright (C) SIL Global. MIT License. + */ import { CompilerError, CompilerErrorNamespace, CompilerErrorSeverity, CompilerMessageSpec as m, CompilerMessageDef as def, CompilerMessageSpecWithException } from "@keymanapp/developer-utils"; const Namespace = CompilerErrorNamespace.Infrastructure; @@ -88,10 +91,6 @@ export class InfrastructureMessages { static Hint_ProjectIsVersion10 = () => m(this.HINT_ProjectIsVersion10, `The project file is an older version and can be upgraded to version 17.0`); - static ERROR_OutFileCanOnlyBeSpecifiedWithSingleInfile = SevError | 0x0015; - static Error_OutFileCanOnlyBeSpecifiedWithSingleInfile = () => m(this.ERROR_OutFileCanOnlyBeSpecifiedWithSingleInfile, - `Parameter --out-file can only be used with a single input file.`); - static ERROR_InvalidMessageFormat = SevError | 0x0016; static Error_InvalidMessageFormat = (o:{message:string}) => m(this.ERROR_InvalidMessageFormat, `Invalid parameter: --message ${def(o.message)} must match format '[KM]#####[:Disable|Info|Hint|Warn|Error]'`); @@ -218,5 +217,15 @@ export class InfrastructureMessages { `${def(o.relativeFilename)} failed to validate.` )}); + static ERROR_OutFileMustBeAFolder = SevError | 0x002C; + static Error_OutFileMustBeAFolder = () => m( + this.ERROR_OutFileMustBeAFolder, + `Parameter --out-file must refer to a folder.`, ` + If multiple input files are specified, or if the parameter --out-file ends + with a slash (/) or backslash (\\), or if the folder referenced by the + parameter already exists, then kmc will treat the parameter as a folder. + However, as a file already exists with the same name, kmc cannot continue. + `); + } diff --git a/developer/src/kmc/src/util/baseOptions.ts b/developer/src/kmc/src/util/baseOptions.ts index f3223238ec..2f5d461744 100644 --- a/developer/src/kmc/src/util/baseOptions.ts +++ b/developer/src/kmc/src/util/baseOptions.ts @@ -1,3 +1,9 @@ +/* + * Keyman is copyright (C) SIL Global. MIT License. + * + * Basic options for kmc - shared across commands + */ +import * as path from 'node:path'; import { ALL_COMPILER_LOG_FORMATS, ALL_COMPILER_LOG_LEVELS, CompilerLogFormat, CompilerLogLevel } from "@keymanapp/developer-utils"; import { Command, Option } from "commander"; @@ -45,7 +51,7 @@ export class BaseOptions { export class BuildBaseOptions extends BaseOptions { public static addOutFile(program: Command) { - return program.option('-o, --out-file ', 'Override the default path and filename for the output file') + return program.option('-o, --out-file ', 'Override default folder and/or filename for the output file; terminate with '+path.sep+' for folder') } public static addAll(program: Command) { diff --git a/developer/src/kmc/src/util/sysexits.ts b/developer/src/kmc/src/util/sysexits.ts index 7256dd4e77..27a90f4b7c 100644 --- a/developer/src/kmc/src/util/sysexits.ts +++ b/developer/src/kmc/src/util/sysexits.ts @@ -7,6 +7,7 @@ import { KeymanSentry } from './KeymanSentry.js'; export const enum SysExits { EX_USAGE = 64, EX_DATAERR = 65, + EX_SOFTWARE = 70, }; export async function exitProcess(exitCode?: number): Promise { diff --git a/developer/src/kmc/test/build.tests.ts b/developer/src/kmc/test/build.tests.ts index b615c97f49..0abe1446f6 100644 --- a/developer/src/kmc/test/build.tests.ts +++ b/developer/src/kmc/test/build.tests.ts @@ -1,12 +1,14 @@ /* * Keyman is copyright (C) SIL Global. MIT License. */ -import { TestCompilerCallbacks } from '@keymanapp/developer-test-helpers'; -import { clearOptions } from '../src/util/options.js'; +import * as fs from 'node:fs'; import { assert } from 'chai'; import 'mocha'; -import { BuildProject } from '../src/commands/buildClasses/BuildProject.js'; +import { TestCompilerCallbacks } from '@keymanapp/developer-test-helpers'; import { makePathToFixture } from './helpers/index.js'; +import { clearOptions } from '../src/util/options.js'; +import { BuildProject } from '../src/commands/buildClasses/BuildProject.js'; +import { unitTestEndpoints } from '../src/commands/build.js'; interface CompilerWarningsAsErrorsTruthTable { cli: boolean; @@ -54,3 +56,99 @@ describe('compilerWarningsAsErrors', function () { }); } }); + +describe('interpretOutFile()', function() { + + function statSyncStub(path: fs.PathLike, options?: fs.StatSyncOptions): fs.Stats { + if(path === 'does_not_exist') return null; + return { + isFile: () => !path.toString().startsWith('existing_folder'), + isDirectory: () => path.toString().startsWith('existing_folder'), + isBlockDevice: () => false, + isCharacterDevice: () => false, + isSymbolicLink: () => false, + isFIFO: () => false, + isSocket: () => false, + dev: null, + ino: null, + mode: null, + nlink: null, + uid: null, + gid: null, + rdev: null, + size: null, + blksize: null, + blocks: null, + atimeMs: null, + mtimeMs: null, + ctimeMs: null, + birthtimeMs: null, + atime: null, + mtime: null, + ctime: null, + birthtime: null + } + } + + it(`should throw with invalid parameters`, function() { + assert.throws(() => unitTestEndpoints.interpretOutFile(null, 1, statSyncStub)); + assert.throws(() => unitTestEndpoints.interpretOutFile(undefined, null, statSyncStub)); + assert.throws(() => unitTestEndpoints.interpretOutFile(undefined, -1, statSyncStub)); + assert.throws(() => unitTestEndpoints.interpretOutFile(undefined, 0, statSyncStub)); + assert.doesNotThrow(() => unitTestEndpoints.interpretOutFile(undefined, 1, statSyncStub)); + assert.doesNotThrow(() => unitTestEndpoints.interpretOutFile(undefined, 2, statSyncStub)); + }); + + it(`should return undefined path if no path is specified`, function() { + const spec1 = unitTestEndpoints.interpretOutFile(undefined, 1, statSyncStub); + assert.isFalse(spec1.isFolder); + assert.isUndefined(spec1.path); + + const spec2 = unitTestEndpoints.interpretOutFile(undefined, 2, statSyncStub); + assert.isFalse(spec2.isFolder); + assert.isUndefined(spec2.path); + }); + + it(`should return isFolder=true if path is specified and more than 1 input filename is given`, function() { + const spec1 = unitTestEndpoints.interpretOutFile('does_not_exist', 2, statSyncStub); + assert.isNotNull(spec1); + assert.isTrue(spec1.isFolder); + assert.equal(spec1.path, 'does_not_exist'); + }); + + it(`should return path without trailing delimiter if trailing delimiter is specified`, function() { + const spec1 = unitTestEndpoints.interpretOutFile('does_not_exist/', 1, statSyncStub); + assert.isNotNull(spec1); + assert.isTrue(spec1.isFolder); + assert.equal(spec1.path, 'does_not_exist'); + + // existing folder test for trimming delimiter is covered in next test + }); + + it(`should return path as a folder if target path is a folder`, function() { + const spec1 = unitTestEndpoints.interpretOutFile('existing_folder', 1, statSyncStub); + assert.isNotNull(spec1); + assert.isTrue(spec1.isFolder); + assert.equal(spec1.path, 'existing_folder'); + + const spec2 = unitTestEndpoints.interpretOutFile('existing_folder/', 1, statSyncStub); + assert.isNotNull(spec2); + assert.isTrue(spec2.isFolder); + assert.equal(spec2.path, 'existing_folder'); + }); + + it(`should return null if a file exists in the target folder location`, function() { + const spec1 = unitTestEndpoints.interpretOutFile('existing_file', 2, statSyncStub); + assert.isNull(spec1); + + const spec2 = unitTestEndpoints.interpretOutFile('existing_file/', 1, statSyncStub); + assert.isNull(spec2); + }); + + it(`should return isFolder = false if a single input file and no trailing delimiter and no folder exists`, function() { + const spec1 = unitTestEndpoints.interpretOutFile('anything', 1, statSyncStub); + assert.isNotNull(spec1); + assert.isFalse(spec1.isFolder); + assert.equal(spec1.path, 'anything'); + }); +}); \ No newline at end of file diff --git a/developer/src/kmc/test/infrastructureMessages.tests.ts b/developer/src/kmc/test/infrastructureMessages.tests.ts index 68edaa7a10..d44cc8e972 100644 --- a/developer/src/kmc/test/infrastructureMessages.tests.ts +++ b/developer/src/kmc/test/infrastructureMessages.tests.ts @@ -1,3 +1,6 @@ +/* + * Keyman is copyright (C) SIL Global. MIT License. + */ import 'mocha'; import * as fs from 'fs'; import { assert } from 'chai'; @@ -66,7 +69,7 @@ describe('InfrastructureMessages', function () { const projectPath = makePathToFixture('kpj-2.0/khmer_angkor', 'khmer_angkor.kpj'); const outFilePath = makePathToFixture('kpj-2.0/khmer_angkor', 'khmer_angkor.kmx'); const options: CompilerOptions = {...defaultCompilerOptions}; - await unitTestEndpoints.build(projectPath, outFilePath, ncb, options); + await unitTestEndpoints.build(projectPath, {path: outFilePath, isFolder: false}, ncb, options); assert.isTrue(ncb.hasMessage(InfrastructureMessages.ERROR_OutFileNotValidForProjects), 'ERROR_OutFileNotValidForProjects not generated, instead got: '+JSON.stringify(ncb.messages,null,2)); }); diff --git a/developer/src/kmcmplib/src/Compiler.cpp b/developer/src/kmcmplib/src/Compiler.cpp index d9f3c5c9cb..512aef4f61 100644 --- a/developer/src/kmcmplib/src/Compiler.cpp +++ b/developer/src/kmcmplib/src/Compiler.cpp @@ -138,7 +138,7 @@ KMX_BOOL IsSameToken(PKMX_WCHAR *p, KMX_WCHAR const * token); KMX_DWORD GetRHS(PFILE_KEYBOARD fk, PKMX_WCHAR p, PKMX_WCHAR buf, int bufsize, int offset, int IsUnicode); PKMX_WCHAR GetDelimitedString(PKMX_WCHAR *p, KMX_WCHAR const * Delimiters, KMX_WORD Flags); KMX_DWORD GetXString(PFILE_KEYBOARD fk, PKMX_WCHAR str, KMX_WCHAR const * token, PKMX_WCHAR output, int max, int offset, PKMX_WCHAR *newp, int isVKey, int isUnicode); -KMX_BOOL GetCompileTargetsFromTargetsStore(const KMX_WCHAR* store, int &targets); +KMX_BOOL GetCompileTargetsFromTargetsStore(KMX_WCHAR *store, int &targets); int GetGroupNum(PFILE_KEYBOARD fk, PKMX_WCHAR p); @@ -1155,6 +1155,7 @@ KMX_BOOL ProcessSystemStore(PFILE_KEYBOARD fk, KMX_DWORD SystemID, PFILE_STORE s else if (u16ncmp(p, u"15.0", 4) == 0) fk->version = VERSION_150; // Adds support for U_xxxx_yyyy #2858 else if (u16ncmp(p, u"16.0", 4) == 0) fk->version = VERSION_160; // KMXPlus else if (u16ncmp(p, u"17.0", 4) == 0) fk->version = VERSION_170; // Flicks and gestures + else if (u16ncmp(p, u"19.0", 4) == 0) fk->version = VERSION_190; // Deprecations - fix, clearcontext else { ReportCompilerMessage(KmnCompilerMessages::ERROR_InvalidVersion); @@ -1331,7 +1332,16 @@ KMX_BOOL ProcessSystemStore(PFILE_KEYBOARD fk, KMX_DWORD SystemID, PFILE_STORE s return TRUE; } -KMX_BOOL GetCompileTargetsFromTargetsStore(const KMX_WCHAR* store, int &targets) { +/** + * Extract the compile targets from the &targets store, and rewrite the + * &targets dpString value to remove unnecessary whitespace. Does not + * reallocate sp->dpString, but overwrites its value with a string the + * same length or shorter. + * @param store store value to rewrite + * @param targets (output) + * @return FALSE if no targets found or invalid targets found + */ +KMX_BOOL GetCompileTargetsFromTargetsStore(KMX_WCHAR *store, int &targets) { // Compile to .kmx const std::vector KMXKeymanTargets{ u"windows", u"macosx", u"linux", u"desktop" @@ -1347,10 +1357,17 @@ KMX_BOOL GetCompileTargetsFromTargetsStore(const KMX_WCHAR* store, int &targets) targets = 0; auto p = new KMX_WCHAR[u16len(store)+1]; - u16cpy(p, store); + auto q = p; + *p = 0; KMX_WCHAR* ctx; - auto token = u16tok(p, u" ", &ctx); + auto token = u16tok(store, u" ", &ctx); while(token) { + if(q > p) { + // Insert a delimiter between tokens, if + // more than one token + *q++ = ' '; + *q = 0; + } bool found = false; if(*token) { if(AnyTarget == token) { @@ -1378,9 +1395,16 @@ KMX_BOOL GetCompileTargetsFromTargetsStore(const KMX_WCHAR* store, int &targets) targets = 0; return FALSE; } + + // Append the token to the output, we know it is long enough + // because the buffer is the same length as the input + u16cpy(q, token); + q = const_cast(u16chr(q, 0)); + *q = 0; } token = u16tok(nullptr, u" ", &ctx); } + u16cpy(store, p); delete[] p; if(targets == 0) { @@ -1582,7 +1606,7 @@ const KMX_BOOL CODE__IS_TEXTUAL[] = { -1, // CODE_EXTENDEDEND 0x0B (unused) FALSE, // CODE_SWITCH 0x0C -1, // CODE_KEY 0x0D (never used) - FALSE, // CODE_CLEARCONTEXT 0x0E + FALSE, // CODE_CLEARCONTEXT 0x0E (deprecated in 19.0) FALSE, // CODE_CALL 0x0F // may trigger text effects but indirectly -1, // UC_SENTINEL_EXTENDEDEND 0x10 (not valid with UC_SENTINEL) TRUE, // CODE_CONTEXTEX 0x11 @@ -2079,7 +2103,7 @@ int LineTokenType(PKMX_WCHAR *str) switch (towupper(*p)) { case 'C': - if (iswspace(*(p + 1))) return T_COMMENT; + if (iswspace(*(p + 1)) || *(p + 1) == 0) return T_COMMENT; break; case 0: return T_BLANK; @@ -2376,6 +2400,10 @@ KMX_DWORD GetXStringImpl(PKMX_WCHAR tstr, PFILE_KEYBOARD fk, PKMX_WCHAR str, KMX } else if (u16nicmp(p, u"clearcontext", 12) == 0) { + // deprecated in 19.0 + if(fk->version >= VERSION_190) { + ReportCompilerMessage(KmnCompilerMessages::WARN_DeprecatedStatement, {"clearcontext", "19.0"}); // I3438 + } p += 12; tstr[mx++] = UC_SENTINEL; tstr[mx++] = CODE_CLEARCONTEXT; @@ -2699,6 +2727,10 @@ KMX_DWORD GetXStringImpl(PKMX_WCHAR tstr, PFILE_KEYBOARD fk, PKMX_WCHAR str, KMX case 15: if (u16nicmp(p, u"fix", 3) == 0) { + if(fk->version >= VERSION_190) { + // deprecated in 19.0 + ReportCompilerMessage(KmnCompilerMessages::WARN_DeprecatedStatement, {"fix", "19.0"}); // I3438 + } p += 3; tstr[mx++] = UC_SENTINEL; tstr[mx++] = CODE_CLEARCONTEXT; diff --git a/developer/src/kmcmplib/src/xstring.cpp b/developer/src/kmcmplib/src/xstring.cpp index 60bbddc8eb..073daae0f0 100644 --- a/developer/src/kmcmplib/src/xstring.cpp +++ b/developer/src/kmcmplib/src/xstring.cpp @@ -127,7 +127,7 @@ const int CODE__SIZE[] = { -1, // CODE_EXTENDEDEND 0x0B (unused) 1, // CODE_SWITCH 0x0C -1, // CODE_KEY 0x0D (never used) - 0, // CODE_CLEARCONTEXT 0x0E + 0, // CODE_CLEARCONTEXT 0x0E (deprecated in 19.0) 1, // CODE_CALL 0x0F -1, // UC_SENTINEL_EXTENDEDEND 0x10 (not valid with UC_SENTINEL) 1, // CODE_CONTEXTEX 0x11 diff --git a/developer/src/kmcmplib/tests/api.tests.cpp b/developer/src/kmcmplib/tests/api.tests.cpp index ea44e3fade..445c69928b 100644 --- a/developer/src/kmcmplib/tests/api.tests.cpp +++ b/developer/src/kmcmplib/tests/api.tests.cpp @@ -71,66 +71,90 @@ void test_kmcmp_CompileKeyboard(char *kmn_file) { unlink(kmn_file); } -extern KMX_BOOL GetCompileTargetsFromTargetsStore(const KMX_WCHAR* store, int &targets); +extern KMX_BOOL GetCompileTargetsFromTargetsStore(KMX_WCHAR* buf, int &targets); + +KMX_BOOL do_GetCompileTargetsFromTargetsStore(const KMX_WCHAR* store, int &targets, const KMX_WCHAR* expected = nullptr) { + KMX_WCHAR* buf; + buf = new KMX_WCHAR[u16len(store)+1]; + u16cpy(buf, store); + KMX_BOOL result = GetCompileTargetsFromTargetsStore(buf, targets); + + if(expected) { + test_assert(u16cmp(expected, buf) == 0); + } + + delete[] buf; + return result; +} void test_GetCompileTargetsFromTargetsStore() { int targets = 0; setup(); - test_assert(GetCompileTargetsFromTargetsStore(u"any", targets)); + test_assert(do_GetCompileTargetsFromTargetsStore(u"any", targets, u"any")); test_assert(error_vec.size() == 0); test_assert(targets == (COMPILETARGETS_KMX | COMPILETARGETS_JS)); setup(); - test_assert(GetCompileTargetsFromTargetsStore(u"windows", targets)); + test_assert(do_GetCompileTargetsFromTargetsStore(u"windows", targets, u"windows")); test_assert(error_vec.size() == 0); test_assert(targets == COMPILETARGETS_KMX); setup(); - test_assert(GetCompileTargetsFromTargetsStore(u"desktop", targets)); + test_assert(do_GetCompileTargetsFromTargetsStore(u"desktop", targets, u"desktop")); test_assert(error_vec.size() == 0); test_assert(targets == COMPILETARGETS_KMX); setup(); - test_assert(GetCompileTargetsFromTargetsStore(u"mobile", targets)); + test_assert(do_GetCompileTargetsFromTargetsStore(u"mobile", targets, u"mobile")); test_assert(error_vec.size() == 0); test_assert(targets == COMPILETARGETS_JS); setup(); - test_assert(GetCompileTargetsFromTargetsStore(u"web", targets)); + test_assert(do_GetCompileTargetsFromTargetsStore(u"web", targets, u"web")); test_assert(error_vec.size() == 0); test_assert(targets == COMPILETARGETS_JS); setup(); - test_assert(GetCompileTargetsFromTargetsStore(u"desktop mobile", targets)); + test_assert(do_GetCompileTargetsFromTargetsStore(u"desktop mobile", targets, u"desktop mobile")); test_assert(error_vec.size() == 0); test_assert(targets == (COMPILETARGETS_KMX | COMPILETARGETS_JS)); setup(); - test_assert(GetCompileTargetsFromTargetsStore(u"desktop tablet", targets)); + test_assert(do_GetCompileTargetsFromTargetsStore(u"desktop tablet", targets, u"desktop tablet")); test_assert(error_vec.size() == 0); test_assert(targets == (COMPILETARGETS_KMX | COMPILETARGETS_JS)); setup(); - test_assert(!GetCompileTargetsFromTargetsStore(u"foo bar baz", targets)); + test_assert(do_GetCompileTargetsFromTargetsStore(u" desktop tablet", targets, u"desktop tablet")); + test_assert(error_vec.size() == 0); + test_assert(targets == (COMPILETARGETS_KMX | COMPILETARGETS_JS)); + + setup(); + test_assert(do_GetCompileTargetsFromTargetsStore(u" windows androidphone ", targets, u"windows androidphone")); + test_assert(error_vec.size() == 0); + test_assert(targets == (COMPILETARGETS_KMX | COMPILETARGETS_JS)); + + setup(); + test_assert(!do_GetCompileTargetsFromTargetsStore(u"foo bar baz", targets)); test_assert(error_vec.size() == 1); test_assert(error_vec[0] == KmnCompilerMessages::ERROR_InvalidTarget); test_assert(targets == 0); setup(); - test_assert(!GetCompileTargetsFromTargetsStore(u"windows chromeos", targets)); + test_assert(!do_GetCompileTargetsFromTargetsStore(u"windows chromeos", targets)); test_assert(error_vec.size() == 1); test_assert(error_vec[0] == KmnCompilerMessages::ERROR_InvalidTarget); test_assert(targets == 0); setup(); - test_assert(!GetCompileTargetsFromTargetsStore(u" ", targets)); + test_assert(!do_GetCompileTargetsFromTargetsStore(u" ", targets)); test_assert(error_vec.size() == 1); test_assert(error_vec[0] == KmnCompilerMessages::ERROR_NoTargetsSpecified); test_assert(targets == 0); setup(); - test_assert(!GetCompileTargetsFromTargetsStore(u"", targets)); + test_assert(!do_GetCompileTargetsFromTargetsStore(u"", targets)); test_assert(error_vec.size() == 1); test_assert(error_vec[0] == KmnCompilerMessages::ERROR_NoTargetsSpecified); test_assert(targets == 0); diff --git a/developer/src/kmcmplib/tests/gtest-compiler.tests.cpp b/developer/src/kmcmplib/tests/gtest-compiler.tests.cpp index 7e65bfdd55..3862eca44b 100644 --- a/developer/src/kmcmplib/tests/gtest-compiler.tests.cpp +++ b/developer/src/kmcmplib/tests/gtest-compiler.tests.cpp @@ -663,7 +663,7 @@ TEST_F(CompilerTest, LineTokenType_test) { // comment without following space ... potential bug, but ReadLine() currently ensures following space u16cpy(str, u"c"); p = str; - EXPECT_EQ(T_UNKNOWN, LineTokenType(&p)); + EXPECT_EQ(T_COMMENT, LineTokenType(&p)); EXPECT_EQ(0, p - str); // T_KEYTOKEY diff --git a/developer/src/kmcmplib/tests/gtest-km_u16.tests.cpp b/developer/src/kmcmplib/tests/gtest-km_u16.tests.cpp index 75d74607cd..db40baf12d 100644 --- a/developer/src/kmcmplib/tests/gtest-km_u16.tests.cpp +++ b/developer/src/kmcmplib/tests/gtest-km_u16.tests.cpp @@ -32,6 +32,11 @@ TEST(km_u16_Test, u16tok_char_delim) { KMX_WCHAR str[LINESIZE]; KMX_WCHAR *ctx = nullptr; + // invalid parameters + EXPECT_EQ(nullptr, u16tok(str, ' ', nullptr)); + EXPECT_EQ(nullptr, u16tok(str, (KMX_WCHAR)0, &ctx)); + EXPECT_EQ(nullptr, u16tok(nullptr, ' ', nullptr)); + // sequence of tokens u16cpy(str, u"test a space and two"); ctx = nullptr; @@ -55,6 +60,13 @@ TEST(km_u16_Test, u16tok_char_delim) { EXPECT_TRUE(!u16cmp(u"b", u16tok(nullptr, ' ', &ctx))); EXPECT_EQ(nullptr, u16tok(nullptr, ' ', &ctx)); + // delimiters at start + u16cpy(str, u" a b"); + ctx = nullptr; + EXPECT_TRUE(!u16cmp(u"a", u16tok(str, ' ', &ctx))); + EXPECT_TRUE(!u16cmp(u"b", u16tok(nullptr, ' ', &ctx))); + EXPECT_EQ(nullptr, u16tok(nullptr, ' ', &ctx)); + // no string, no context ctx = nullptr; EXPECT_EQ(nullptr, u16tok(nullptr, ' ', &ctx)); @@ -73,6 +85,12 @@ TEST(km_u16_Test, u16tok_str_delim) { KMX_WCHAR str[LINESIZE]; KMX_WCHAR *ctx = nullptr; + // invalid parameters + EXPECT_EQ(nullptr, u16tok(str, u" ", nullptr)); + EXPECT_EQ(nullptr, u16tok(str, nullptr, &ctx)); + EXPECT_EQ(nullptr, u16tok(str, u"", &ctx)); + EXPECT_EQ(nullptr, u16tok(nullptr, u" ", nullptr)); + // sequence of tokens u16cpy(str, u"test a space and two"); ctx = nullptr; @@ -96,6 +114,13 @@ TEST(km_u16_Test, u16tok_str_delim) { EXPECT_TRUE(!u16cmp(u"b", u16tok(nullptr, u" ", &ctx))); EXPECT_EQ(nullptr, u16tok(nullptr, u" ", &ctx)); + // delimiters at start + u16cpy(str, u" a b"); + ctx = nullptr; + EXPECT_TRUE(!u16cmp(u"a", u16tok(str, u" ", &ctx))); + EXPECT_TRUE(!u16cmp(u"b", u16tok(nullptr, u" ", &ctx))); + EXPECT_EQ(nullptr, u16tok(nullptr, ' ', &ctx)); + // no string, no context ctx = nullptr; EXPECT_EQ(nullptr, u16tok(nullptr, u"", &ctx)); @@ -130,6 +155,9 @@ TEST(km_u16_Test, u16tok_str_compare_to_strtok) { // Compare behaviour of strtok: char str[LINESIZE]; + // Note: strtok behavior is undefined with invalid parameters so we don't do a reference test + // of invalid parameters + // sequence of tokens strcpy(str, "test a space and two"); EXPECT_TRUE(!strcmp("test", strtok(str, " "))); @@ -150,6 +178,12 @@ TEST(km_u16_Test, u16tok_str_compare_to_strtok) { EXPECT_TRUE(!strcmp("b", strtok(nullptr, " "))); EXPECT_EQ(nullptr, strtok(nullptr, " ")); + // delimiters at start + strcpy(str, " a b"); + EXPECT_TRUE(!strcmp("a", strtok(str, " "))); + EXPECT_TRUE(!strcmp("b", strtok(nullptr, " "))); + EXPECT_EQ(nullptr, strtok(nullptr, " ")); + // multiple delimiters strcpy(str, "abcghi"); const char *delim = "<>"; diff --git a/developer/src/kmdecomp/savekeyboard.cpp b/developer/src/kmdecomp/savekeyboard.cpp index bfe66e5bc6..8201c0a916 100644 --- a/developer/src/kmdecomp/savekeyboard.cpp +++ b/developer/src/kmdecomp/savekeyboard.cpp @@ -273,6 +273,7 @@ PWCHAR ExtString(PWCHAR str) p = wcscat2(q, BUFSIZE, L"key "); break; case CODE_CLEARCONTEXT: + // deprecated in 19.0 p = wcscat2(q, BUFSIZE, L"clearcontext "); break; case CODE_CALL: diff --git a/developer/src/server/package.json b/developer/src/server/package.json index 826cdba0c1..dcc2b75eeb 100644 --- a/developer/src/server/package.json +++ b/developer/src/server/package.json @@ -13,7 +13,7 @@ "@ngrok/ngrok": "^1.7.0", "@sentry/node": "^7.57.0", "chalk": "^4.1.2", - "express": "^4.22.2", + "express": "^5.2.1", "multer": "^2.2.0", "open": "^8.4.0", "restructure": "^3.0.1", diff --git a/developer/src/server/src/environment.ts b/developer/src/server/src/environment.ts index f3e0566024..8c5a26881d 100644 --- a/developer/src/server/src/environment.ts +++ b/developer/src/server/src/environment.ts @@ -1,5 +1,20 @@ -import { extractVersionData } from './version-data.js'; -// TODO: environment should be just KEYMAN_VERSION +/* + * Keyman is copyright (C) SIL Global. MIT License. + * + * Environmental variables and paths + */ +import path from 'node:path'; -import KEYMAN_VERSION from "@keymanapp/keyman-version"; -export const environment = extractVersionData(KEYMAN_VERSION.VERSION_WITH_TAG); +/** + * @returns base path for the running server -- where index.js is stored + */ +export function serverBasePath() { + return path.join(import.meta.dirname, '../../build/src'); +} + +/** + * @returns path where the site public files can be found -- index.html + */ +export function serverSitePath() { + return path.join(serverBasePath(), 'site'); +} diff --git a/developer/src/server/src/handlers/inc/packages-json.ts b/developer/src/server/src/handlers/inc/packages-json.ts index 377e4b9856..12dfd1ba57 100644 --- a/developer/src/server/src/handlers/inc/packages-json.ts +++ b/developer/src/server/src/handlers/inc/packages-json.ts @@ -1,15 +1,21 @@ -import { KeymanUrls } from '@keymanapp/developer-utils'; +/* + * Keyman is copyright (C) SIL Global. MIT License. + * + * API: return list of packages under testing and urls for installing in mobile + * apps + */ import * as express from 'express'; +import { KeymanUrls } from '@keymanapp/developer-utils'; +import KEYMAN_VERSION from '@keymanapp/keyman-version'; import { data } from "../../data.js"; -import { environment } from '../../environment.js'; export default function handleIncPackagesJson (req: express.Request, res: express.Response) { const packages = Object.keys(data.packages).map(id => { return { id: id, filename: id+'.kmp', name: data.packages[id].name} }); res.send({ packages: packages, urls: { - installLinkAndroid: KeymanUrls.KeymanDeveloper_KeymanForAndroidDownload(environment.versionRelease), - installLinkIos: KeymanUrls.KeymanDeveloper_KeymanForIosDownload(environment.versionRelease), + installLinkAndroid: KeymanUrls.KeymanDeveloper_KeymanForAndroidDownload(KEYMAN_VERSION.VERSION_RELEASE), + installLinkIos: KeymanUrls.KeymanDeveloper_KeymanForIosDownload(KEYMAN_VERSION.VERSION_RELEASE), } }); } diff --git a/developer/src/server/src/index.ts b/developer/src/server/src/index.ts index e248b19625..68b2cf7a9e 100644 --- a/developer/src/server/src/index.ts +++ b/developer/src/server/src/index.ts @@ -1,12 +1,17 @@ +/* + * Keyman is copyright (C) SIL Global. MIT License. + * + * Keyman Developer Server main program + */ import * as fs from 'node:fs'; import * as path from 'node:path'; import chalk from 'chalk'; import express from 'express'; import multer from 'multer'; import * as ws from 'ws'; +import KEYMAN_VERSION from '@keymanapp/keyman-version'; import { KeymanSentry } from './KeymanSentry.js'; import { standardPaths } from './standardPaths.js'; -import { environment } from './environment.js'; import setupRoutes from './routes.js'; import { shutdown } from './shutdown.js'; import { initTray } from './tray.js'; @@ -23,7 +28,7 @@ const options = { // set of options if an error occurs. await loadOptions(); -console.log(`Starting Keyman Developer Server ${environment.versionWithTag}, listening on port ${getOption('web host port')}.`); +console.log(`Starting Keyman Developer Server ${KEYMAN_VERSION.VERSION_WITH_TAG}, listening on port ${getOption('web host port')}.`); KeymanSentry.init(); try { @@ -74,7 +79,7 @@ export async function run() { /* Setup routes */ - setupRoutes(app, upload, wsServer, environment); + setupRoutes(app, upload, wsServer); /* Start the web server */ diff --git a/developer/src/server/src/routes.ts b/developer/src/server/src/routes.ts index acccf23402..fc07968b5a 100644 --- a/developer/src/server/src/routes.ts +++ b/developer/src/server/src/routes.ts @@ -1,6 +1,12 @@ +/* + * Keyman is copyright (C) SIL Global. MIT License. + * + * Setup URL routes for Keyman Developer Server + */ import * as express from 'express'; import * as ws from 'ws'; import * as multer from 'multer'; +import KEYMAN_VERSION from '@keymanapp/keyman-version'; import handleIncKeyboardsJs from './handlers/inc/keyboards-js.js'; import { data, DebugFont, DebugKeyboard, DebugModel, DebugObject, DebugPackage, isValidId } from './data.js'; import apiGet from './handlers/api/debugobject/get.js'; @@ -11,22 +17,20 @@ import apiUnregister from './handlers/api/debugobject/unregister.js'; import handleIncPackagesJson from './handlers/inc/packages-json.js'; import apiPackageRegister from './handlers/api/package/register.js'; import handleIncKeyboardsCss from './handlers/inc/keyboards-css.js'; -import { Environment } from './version-data.js'; import { standardPaths } from './standardPaths.js'; import chalk from 'chalk'; import { shutdown } from './shutdown.js'; import { getOption } from './options.js'; +import { serverSitePath } from './environment.js'; -export default function setupRoutes(app: express.Express, upload: multer.Multer, wsServer: ws.WebSocketServer, environment: Environment ) { +export default function setupRoutes(app: express.Express, upload: multer.Multer, wsServer: ws.WebSocketServer ) { /* Middleware - JSON and logging */ app.use(express.json()); // for parsing application/json app.use(function (req, _res, next) { - // if(environment.environment == 'local') { - console.log(req.method + ' ' + req.path); - // } + console.log(req.method + ' ' + req.path); next(); }); @@ -51,7 +55,7 @@ export default function setupRoutes(app: express.Express, upload: multer.Multer, /* All routes */ - app.use('/', express.static('build/src/site')); + app.use('/', express.static(serverSitePath())); app.post('/upload', localhostOnly, upload.single('file'), (req, res, next) => { const name = req.file.originalname; @@ -93,7 +97,7 @@ export default function setupRoutes(app: express.Express, upload: multer.Multer, app.get('/inc/packages.json', handleIncPackagesJson); app.get('/api-public/version', (req,res,next)=>{ - res.json({version: environment.versionWithTag, isApiAvailable: isLocalhost(req)}); + res.json({version: KEYMAN_VERSION.VERSION_WITH_TAG, isApiAvailable: isLocalhost(req)}); next(); }); diff --git a/developer/src/server/src/version-data.ts b/developer/src/server/src/version-data.ts deleted file mode 100644 index a082a65170..0000000000 --- a/developer/src/server/src/version-data.ts +++ /dev/null @@ -1,52 +0,0 @@ -/* - Version information from builder-basic.inc.sh: - - # KEYMAN_VERSION: Full current build version, e.g. "14.0.1" - # [KEYMAN_VERSION_WIN: Full current build version for Windows, e.g. "14.0.1.0"] - # KEYMAN_VERSION_RELEASE: Current release version, e.g. "14.0" - # KEYMAN_VERSION_MAJOR: Major version, e.g. "14" - # KEYMAN_VERSION_MINOR: Minor version, e.g. "0" - # KEYMAN_VERSION_PATCH: Patch version, e.g. "1" - # KEYMAN_TIER: Current tier, one of "alpha", "beta" or "stable" - # KEYMAN_VERSION_TAG: Tier + Pull Request + Location of build [-alpha|-beta][-test[-1234]][-local] - # KEYMAN_VERSION_WITH_TAG: e.g. "14.0.1-alpha-test-1234" or "14.0.5-beta-local" or "14.0.1-alpha-test" - # [KEYMAN_ROOT: fully resolved root path of Keyman repository] - # KEYMAN_VERSION_ENVIRONMENT: One of: local, test, alpha, beta, stable - # KEYMAN_VERSION_GIT_TAG: Git tag for the release, "release@$KEYMAN_VERSION_WITH_TAG", e.g. "release@14.0.1-alpha-test-1234" -*/ - -export interface Environment { - version: string; - versionRelease: string; - versionMajor: string; - versionMinor: string; - versionPatch: string; - tier: string; - versionTag: string; - versionWithTag: string; - versionEnvironment: string; - versionGitTag: string; - // Pull Request Data - pr: string; -} - -export function extractVersionData(version: string): Environment { - const versionData = /^(\d+)\.(\d+)\.(\d+)((?:-(alpha|beta))?(?:-(test|local))?(?:-(\d+))?)$/.exec(version); - if(!versionData) return null; - - return { - version: `${versionData[1]}.${versionData[2]}.${versionData[3]}`, - versionRelease: `${versionData[1]}.${versionData[2]}`, - versionMajor: versionData[1], - versionMinor: versionData[2], - versionPatch: versionData[3], - tier: versionData[5] || 'stable', - versionTag: versionData[4], - versionWithTag: version, - versionEnvironment: versionData[6] || versionData[5] || 'stable', - versionGitTag: 'release@'+version, - - pr: versionData[7] || '' - }; -}; - diff --git a/developer/src/server/src/win32-tray.ts b/developer/src/server/src/win32-tray.ts index a71771f3de..a248f9b669 100644 --- a/developer/src/server/src/win32-tray.ts +++ b/developer/src/server/src/win32-tray.ts @@ -71,6 +71,11 @@ export class Win32Tray { open(ngrokAddress); break; case 'item-id-show-console': + // #9694 - the first time, this has to be called twice for the console + // window to appear. This could probably be fixed in the source + // node-hide-console-window component, but this works well enough and + // has little in the way of side-effects. + WindowsConsole.showConsole(); WindowsConsole.showConsole(); break; case 'item-id-hide-console': diff --git a/developer/src/server/test/environment.tests.ts b/developer/src/server/test/environment.tests.ts new file mode 100644 index 0000000000..352cdc3d32 --- /dev/null +++ b/developer/src/server/test/environment.tests.ts @@ -0,0 +1,20 @@ +/* + * Keyman is copyright (C) SIL Global. MIT License. + */ +import * as fs from 'node:fs'; +import * as path from 'node:path'; +import {assert} from 'chai'; +import 'mocha'; +import { serverBasePath, serverSitePath } from '../src/environment.js'; + +describe('serverBasePath', function() { + it('should find index.js in the base path', function() { + assert.isTrue(fs.existsSync(path.join(serverBasePath(), 'index.js'))); + }); +}); + +describe('serverSitePath', function() { + it('should find index.html in the base path', function() { + assert.isTrue(fs.existsSync(path.join(serverSitePath(), 'index.html'))); + }); +}); diff --git a/developer/src/server/test/version-data.tests.ts b/developer/src/server/test/version-data.tests.ts deleted file mode 100644 index 74762b7d7f..0000000000 --- a/developer/src/server/test/version-data.tests.ts +++ /dev/null @@ -1,55 +0,0 @@ -import {assert} from 'chai'; -import 'mocha'; -import { extractVersionData } from '../src/version-data.js'; - -describe('extractVersionData', function() { - it('should parse version strings', function() { - let v = extractVersionData('14.0.283'); - assert.equal(v.version, '14.0.283'); - assert.equal(v.versionRelease, '14.0'); - assert.equal(v.versionMajor, '14'); - assert.equal(v.versionMinor, '0'); - assert.equal(v.versionPatch, '283'); - assert.equal(v.tier, 'stable'); - assert.equal(v.versionTag, ''); - assert.equal(v.versionWithTag, '14.0.283'); - assert.equal(v.versionEnvironment, 'stable'); - assert.equal(v.pr, ''); - - v = extractVersionData('14.0.283-beta'); - assert.equal(v.version, '14.0.283'); - assert.equal(v.versionRelease, '14.0'); - assert.equal(v.versionMajor, '14'); - assert.equal(v.versionMinor, '0'); - assert.equal(v.versionPatch, '283'); - assert.equal(v.tier, 'beta'); - assert.equal(v.versionTag, '-beta'); - assert.equal(v.versionWithTag, '14.0.283-beta'); - assert.equal(v.versionEnvironment, 'beta'); - assert.equal(v.pr, ''); - - v = extractVersionData('14.0.283-alpha-local'); - assert.equal(v.version, '14.0.283'); - assert.equal(v.versionRelease, '14.0'); - assert.equal(v.versionMajor, '14'); - assert.equal(v.versionMinor, '0'); - assert.equal(v.versionPatch, '283'); - assert.equal(v.tier, 'alpha'); - assert.equal(v.versionTag, '-alpha-local'); - assert.equal(v.versionWithTag, '14.0.283-alpha-local'); - assert.equal(v.versionEnvironment, 'local'); - assert.equal(v.pr, ''); - - v = extractVersionData('14.0.283-alpha-test-1234'); - assert.equal(v.version, '14.0.283'); - assert.equal(v.versionRelease, '14.0'); - assert.equal(v.versionMajor, '14'); - assert.equal(v.versionMinor, '0'); - assert.equal(v.versionPatch, '283'); - assert.equal(v.tier, 'alpha'); - assert.equal(v.versionTag, '-alpha-test-1234'); - assert.equal(v.versionWithTag, '14.0.283-alpha-test-1234'); - assert.equal(v.versionEnvironment, 'test'); - assert.equal(v.pr, '1234'); - }); -}); \ No newline at end of file diff --git a/developer/src/tike/actions/dmActionsMain.dfm b/developer/src/tike/actions/dmActionsMain.dfm index 5321f76e79..6b6aa7a1c8 100644 --- a/developer/src/tike/actions/dmActionsMain.dfm +++ b/developer/src/tike/actions/dmActionsMain.dfm @@ -1,3568 +1,3538 @@ -object modActionsMain: TmodActionsMain - OldCreateOrder = False - OnCreate = DataModuleCreate - Height = 414 - Width = 557 - object actionsMain: TActionList - Images = frmKeymanDeveloper.lstImages - Left = 32 - Top = 28 - object actViewCharacterMap: TAction - Category = 'View' - Caption = '&Character Map' - Hint = 'Character Map|Display the character map window' - ShortCut = 24643 - OnExecute = actViewCharacterMapExecute - OnUpdate = actViewCharacterMapUpdate - end - object actFileNew: TAction - Category = 'File' - Caption = '&New...' - Hint = 'New|Creates a new file' - ImageIndex = 0 - ShortCut = 16462 - OnExecute = actFileNewExecute - OnUpdate = actFileNewUpdate - end - object actViewCharacterIdentifier: TAction - Category = 'View' - Caption = 'Character &Identifier' - Hint = 'Character Identifier|Display the character identifier window' - ShortCut = 24649 - OnExecute = actViewCharacterIdentifierExecute - OnUpdate = actViewCharacterIdentifierUpdate - end - object actFileOpen: TFileOpen - Category = 'File' - Caption = '&Open...' - Dialog.Options = [ofHideReadOnly, ofAllowMultiSelect, ofFileMustExist, ofEnableSizing] - Hint = 'Open|Opens an existing file' - ImageIndex = 1 - ShortCut = 16463 - OnAccept = actFileOpenAccept - OnUpdate = actFileOpenUpdate - end - object actFileSave: TAction - Category = 'File' - Caption = '&Save' - Hint = 'Save|Saves the active file' - ImageIndex = 2 - ShortCut = 16467 - OnExecute = actFileSaveExecute - OnUpdate = actFileSaveUpdate - end - object actFileSaveAs: TFileSaveAs - Category = 'File' - Caption = 'Save &As...' - Dialog.Title = 'Save As' - Dialog.OnCanClose = actFileSaveAsSaveDialogCanClose - Hint = 'Save As|Saves the active file with a new name' - BeforeExecute = actFileSaveAsBeforeExecute - OnAccept = actFileSaveAsAccept - OnUpdate = actFileSaveAsUpdate - end - object actFileSaveCopyAs: TAction - Category = 'File' - Caption = 'Save cop&y as...' - ImageIndex = 17 - OnExecute = actFileSaveCopyAsExecute - OnUpdate = actFileSaveCopyAsUpdate - end - object actFileRevert: TAction - Category = 'File' - Caption = '&Revert' - Hint = 'Revert|Reload last saved version of active file' - ImageIndex = 18 - OnExecute = actFileRevertExecute - OnUpdate = actFileRevertUpdate - end - object actFilePageSetup: TFilePageSetup - Category = 'File' - Caption = 'Page Set&up...' - Dialog.MinMarginLeft = 0 - Dialog.MinMarginTop = 0 - Dialog.MinMarginRight = 0 - Dialog.MinMarginBottom = 0 - Dialog.MarginLeft = 2500 - Dialog.MarginTop = 2500 - Dialog.MarginRight = 2500 - Dialog.MarginBottom = 2500 - Dialog.PageWidth = 21000 - Dialog.PageHeight = 29700 - OnUpdate = actFilePageSetupUpdate - end - object actFilePrint: TAction - Category = 'File' - Caption = '&Print...' - ImageIndex = 20 - ShortCut = 16464 - OnExecute = actFilePrintExecute - OnUpdate = actFilePrintUpdate - end - object actFilePrintPreview: TAction - Category = 'File' - Caption = 'Print Pre&view' - ImageIndex = 19 - OnExecute = actFilePrintPreviewExecute - OnUpdate = actFilePrintPreviewUpdate - end - object actFileExit: TFileExit - Category = 'File' - Caption = 'E&xit' - Hint = 'Exit|Quits the application' - end - object actEditUndo: TKMDEditUndo - Category = 'Edit' - Caption = '&Undo' - Hint = 'Undo|Reverts the last action' - ImageIndex = 7 - ShortCut = 16474 - end - object actEditRedo: TKMDEditRedo - Category = 'Edit' - Caption = '&Redo' - Enabled = False - Hint = 'Redo|Revert the last undo' - ImageIndex = 8 - ShortCut = 24666 - end - object actEditCut: TKMDEditCut - Category = 'Edit' - Caption = 'Cu&t' - Enabled = False - Hint = 'Cut|Cuts the selection and puts it on the Clipboard' - ImageIndex = 4 - ShortCut = 16472 - end - object actEditCopy: TKMDEditCopy - Category = 'Edit' - Caption = '&Copy' - Enabled = False - Hint = 'Copy|Copies the selection and puts it on the Clipboard' - ImageIndex = 5 - ShortCut = 16451 - end - object actEditPaste: TKMDEditPaste - Category = 'Edit' - Caption = '&Paste' - Enabled = False - Hint = 'Paste|Inserts Clipboard contents' - ImageIndex = 6 - ShortCut = 16470 - end - object actEditSelectAll: TKMDEditSelectAll - Category = 'Edit' - Caption = 'Select &All' - Hint = 'Select All|Selects the entire document' - ShortCut = 16449 - end - object actEditDelete: TKMDEditDelete - Category = 'Edit' - Caption = 'Clear selection' - Hint = 'Clear selection|Erases the selection' - ImageIndex = 21 - end - object actSearchFind: TKMDSearchFind - Category = 'Search' - Caption = '&Find...' - Hint = 'Find|Finds the specified text' - ImageIndex = 22 - ShortCut = 16454 - BeforeExecute = actSearchFindBeforeExecute - OnUpdate = actSearchFindUpdate - end - object actSearchFindNext: TKMDSearchFindNext - Category = 'Search' - Caption = 'Find &Next' - Hint = 'Find Next|Repeats the last find' - SearchFind = actSearchFind - ShortCut = 114 - end - object actSearchReplace: TKMDSearchReplace - Category = 'Search' - Caption = '&Replace' - Hint = 'Replace|Replaces specific text with different text' - ImageIndex = 23 - ShortCut = 16456 - end - object actHelpContents: THelpContents - Category = 'Help' - Caption = '&Contents' - Enabled = False - Hint = 'Help Contents' - ImageIndex = 12 - OnExecute = actHelpContentsExecute - end - object actHelpTopicSearch: THelpTopicSearch - Category = 'Help' - Caption = '&Topic Search' - Enabled = False - Hint = 'Topic Search' - end - object actHelpContextAction: THelpContextAction - Category = 'Help' - Caption = 'Context &Help...' - Enabled = False - end - object actViewMessages: TAction - Category = 'View' - Caption = '&Messages' - Hint = 'Messages|View the messages window' - ShortCut = 24653 - OnExecute = actViewMessagesExecute - OnUpdate = actViewMessagesUpdate - end - object actViewProject: TAction - Category = 'View' - Caption = '&Project' - Hint = 'Project|View the current project' - ShortCut = 24656 - OnExecute = actViewProjectExecute - OnUpdate = actViewProjectUpdate - end - object actViewToolbar: TAction - Category = 'View' - Caption = '&Toolbar' - Hint = 'Toolbar|Show or hide the toolbar' - OnExecute = actViewToolbarExecute - OnUpdate = actViewToolbarUpdate - end - object actViewStatusBar: TAction - Category = 'View' - Caption = '&Status Bar' - Hint = 'Status Bar|Show or hide the status bar' - OnExecute = actViewStatusBarExecute - OnUpdate = actViewStatusBarUpdate - end - object actProjectNew: TAction - Category = 'Project' - Caption = '&New Project...' - ImageIndex = 27 - OnExecute = actProjectNewExecute - end - object actProjectOpen: TFileOpen - Category = 'Project' - Caption = '&Open Project...' - Dialog.DefaultExt = 'kpj' - Dialog.Filter = 'Keyman Developer Project Files (*.kpj)|*.kpj|All Files (*.*)|*.*' - Dialog.Options = [ofHideReadOnly, ofPathMustExist, ofFileMustExist, ofEnableSizing] - Hint = 'Open Project|Opens an existing project' - ImageIndex = 28 - ShortCut = 24655 - OnAccept = actProjectOpenAccept - end - object actProjectAddCurrentEditorFile: TAction - Category = 'Project' - Caption = '&Current Editor File' - Hint = - 'Add Current Editor File|Adds the current editor file to the proj' + - 'ect' - OnExecute = actProjectAddCurrentEditorFileExecute - OnUpdate = actProjectAddCurrentEditorFileUpdate - end - object actProjectAddFiles: TFileOpen - Category = 'Project' - Caption = '&Other Files...' - Dialog.Options = [ofHideReadOnly, ofAllowMultiSelect, ofPathMustExist, ofFileMustExist, ofEnableSizing] - Hint = 'Add Other Files|Adds files from disk to the project' - ImageIndex = 30 - ShortCut = 16463 - OnAccept = actProjectAddFilesAccept - OnUpdate = actProjectAddFilesUpdate - end - object actProjectSettings: TAction - Category = 'Project' - Caption = 'Pro&ject Settings...' - Hint = 'Project Settings|Edit settings for this project' - ImageIndex = 31 - OnExecute = actProjectSettingsExecute - OnUpdate = actProjectSettingsUpdate - end - object actToolsOptions: TAction - Category = 'Tools' - Caption = '&Options...' - ImageIndex = 33 - OnExecute = actToolsOptionsExecute - end - object actToolsVirtualKeyIdentifier: TAction - Category = 'Tools' - Caption = '&Virtual Key Identifier...' - ShortCut = 16459 - OnExecute = actToolsVirtualKeyIdentifierExecute - end - object actHelpAbout: TAction - Category = 'Help' - Caption = '&About...' - ImageIndex = 56 - OnExecute = actHelpAboutExecute - end - object actViewCodeFont: TFontEdit - Category = 'View' - Caption = 'Code F&ont...' - Dialog.OnShow = actViewCodeFontFontDialogShow - Dialog.Font.Charset = DEFAULT_CHARSET - Dialog.Font.Color = clWindowText - Dialog.Font.Height = -11 - Dialog.Font.Name = 'Tahoma' - Dialog.Font.Style = [] - Dialog.Options = [fdApplyButton] - Dialog.OnApply = actViewCodeFontFontDialogApply - Hint = 'Code Font|Set the font for the code editor' - ImageIndex = 26 - BeforeExecute = actViewCodeFontBeforeExecute - OnAccept = actViewCodeFontAccept - OnUpdate = actViewCodeFontUpdate - end - object actViewCharFont: TFontEdit - Category = 'View' - Caption = 'Character &Font...' - Dialog.OnShow = actViewCharFontFontDialogShow - Dialog.Font.Charset = DEFAULT_CHARSET - Dialog.Font.Color = clWindowText - Dialog.Font.Height = -11 - Dialog.Font.Name = 'Tahoma' - Dialog.Font.Style = [] - Dialog.Options = [fdApplyButton] - Dialog.OnApply = actViewCharFontFontDialogApply - Hint = - 'Character Font|Set the font for text in quotes and comments and ' + - 'keyboard views' - ImageIndex = 25 - ShortCut = 24646 - BeforeExecute = actViewCharFontBeforeExecute - OnAccept = actViewCharFontAccept - OnUpdate = actViewCharFontUpdate - end - object actViewExpandEditor: TAction - Category = 'View' - Caption = '&Expand Editor' - ImageIndex = 55 - ShortCut = 122 - OnExecute = actViewExpandEditorExecute - OnUpdate = actViewExpandEditorUpdate - end - object actViewHelp: TAction - Category = 'View' - Caption = 'Context &Help' - ShortCut = 24648 - OnExecute = actViewHelpExecute - OnUpdate = actViewHelpUpdate - end - object actWindowNext: TAction - Category = 'Window' - Caption = '&Next Window' - ShortCut = 16393 - OnExecute = actWindowNextExecute - OnUpdate = actWindowNextUpdate - end - object actWindowPrev: TAction - Category = 'Window' - Caption = '&Previous Window' - ShortCut = 24585 - OnExecute = actWindowPrevExecute - OnUpdate = actWindowPrevUpdate - end - object actWindowClose: TAction - Category = 'Window' - Caption = '&Close' - Hint = 'Close Tab|Closes the active tab' - ImageIndex = 14 - ShortCut = 16499 - OnExecute = actWindowCloseExecute - OnUpdate = actWindowCloseUpdate - end - object actToolsFileFormat: TAction - Category = 'Tools' - Caption = 'File &Format...' - Hint = 'File Format|Set the file format of the current editor file' - OnExecute = actToolsFileFormatExecute - OnUpdate = actToolsFileFormatUpdate - end - object actViewMessageNext: TAction - Category = 'View' - Caption = '&Next Message' - ShortCut = 115 - OnExecute = actViewMessageNextExecute - OnUpdate = actViewMessageNextUpdate - end - object actViewMessagePrevious: TAction - Category = 'View' - Caption = '&Previous Message' - ShortCut = 8307 - OnExecute = actViewMessagePreviousExecute - OnUpdate = actViewMessagePreviousUpdate - end - object actViewTabNext: TAction - Category = 'View' - Caption = '&Next Tab' - SecondaryShortCuts.Strings = ( - 'Alt+PgDn') - ShortCut = 16418 - OnExecute = actViewTabNextExecute - OnUpdate = actViewTabNextUpdate - end - object actViewTabPrevious: TAction - Category = 'View' - Caption = '&Previous Tab' - SecondaryShortCuts.Strings = ( - 'Alt+PgUp') - ShortCut = 16417 - OnExecute = actViewTabPreviousExecute - OnUpdate = actViewTabPreviousUpdate - end - object actHelpCheckForUpdates: TAction - Category = 'Help' - Caption = 'Check for &Updates...' - OnExecute = actHelpCheckForUpdatesExecute - end - object actToolsReloadANSI: TAction - Category = 'Tools' - Caption = 'Reload as ANSI' - OnExecute = actToolsReloadANSIExecute - OnUpdate = actToolsReloadANSIUpdate - end - object actToolsReloadUTF8: TAction - Category = 'Tools' - Caption = 'Reload as UTF-8' - OnExecute = actToolsReloadUTF8Execute - OnUpdate = actToolsReloadUTF8Update - end - object actToolsReloadUTF16: TAction - Category = 'Tools' - Caption = 'Reload as UTF-16' - OnExecute = actToolsReloadUTF16Execute - OnUpdate = actToolsReloadUTF16Update - end - object actToolsReload: TAction - Category = 'Tools' - Caption = 'Reload as format' - end - object actViewDesign: TAction - Category = 'View' - Caption = '&Design view' - ShortCut = 32805 - OnExecute = actViewDesignExecute - OnUpdate = actViewDesignUpdate - end - object actViewCode: TAction - Category = 'View' - Caption = '&Code view' - ShortCut = 32807 - OnExecute = actViewCodeExecute - OnUpdate = actViewCodeUpdate - end - object actProjectClose: TAction - Category = 'Project' - Caption = '&Close Project' - OnExecute = actProjectCloseExecute - OnUpdate = actProjectCloseUpdate - end - object actToolsWebCopyPublicUrl: TAction - Category = 'Tools' - Caption = '&Copy URL to clipboard' - OnExecute = actToolsWebCopyPublicUrlExecute - OnUpdate = actToolsWebCopyPublicUrlUpdate - end - object actToolsWebOpenPublicUrl: TAction - Category = 'Tools' - Caption = '&Open in browser' - OnExecute = actToolsWebOpenPublicUrlExecute - OnUpdate = actToolsWebOpenPublicUrlUpdate - end - object actToolsWebConfigure: TAction - Category = 'Tools' - Caption = 'Co&nfigure...' - OnExecute = actToolsWebConfigureExecute - end - object actToolsWebStartServer: TAction - Category = 'Tools' - Caption = '&Start server' - OnExecute = actToolsWebStartServerExecute - OnUpdate = actToolsWebStartServerUpdate - end - object actToolsWebStopServer: TAction - Category = 'Tools' - Caption = '&Stop server' - OnExecute = actToolsWebStopServerExecute - OnUpdate = actToolsWebStopServerUpdate - end - object actWindowNew: TAction - Category = 'Window' - Caption = '&New window' - OnExecute = actWindowNewExecute - end - end - object ActionManager1: TActionManager - ActionBars = < - item - end> - LinkedActionLists = < - item - ActionList = actionsMain - Caption = 'actionsMain' - end> - Left = 180 - Top = 164 - StyleName = 'XP Style' - end - object ilMain: TImageList - Left = 304 - Top = 236 - Bitmap = { - 494C01010A000E00040010001000FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600 - 0000000000003600000028000000400000003000000001002000000000000030 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 00000000000000000000000000000000000000000000FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00000000000000000000000000000000000000 - 0000B5CEC600C6DED600C6DED600C6DED600C6DED600C6DED600C6E7DE000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000B5CEC600BDD6C600C6DECE00CEDED600CEDED600C6DECE00BDD6C600BDD6 - C600000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000000000000000000000000000FFFFFF0084B58400107310001873 - 18001873180018731800187B1800187B1800107B1000107B1000087B0800087B - 0800007B0000007300007BB57B00FFFFFF00000000000000000000000000BDD6 - CE00CEDECE00DEE7E700E7EFEF00EFF7F700EFF7EF00E7EFE700CEDED600B5CE - C60000000000000000000000000000000000000000000000000000000000BDCE - C600D6E7DE00EFF7EF00F7F7F700F7F7F700EFF7F700EFF7F700E7EFEF00D6DE - D600BDCEC6000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000000000000000000000000000FFFFFF0010841000218C21002994 - 2900319431003194310029942900299C2900219C210018A5180018A5180010A5 - 100008A5080000940000006B0000FFFFFF000000000000000000BDD6C600DEE7 - E700F7FFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00E7EF - EF00C6D6CE000000000000000000000000000000000000000000BDCEC600E7EF - E700F7FFFF00F7FFFF00F7FFFF00F7FFFF00F7FFFF00F7FFF700F7F7F700EFF7 - F700DEE7DE00BDD6C60000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000000000000000000000000000FFFFFF00188C180029942900399C - 3900399C3900399C3900FFFFFF00A5D6A5004AA54A004AA54A004AA54A0029A5 - 290018A51800009C0000007B0000FFFFFF0000000000BDD6C600DEE7E700FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00F7F7F700C6D6CE00000000000000000000000000BDCEC600E7EFE700FFFF - FF00FFFFFF00FFFFFF00FFFFFF0018634A00FFFFFF00FFFFFF00FFFFFF00F7FF - F700EFF7F700DEE7DE00BDCEC600000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000000000000000000000000000FFFFFF0021942100399C390042A5 - 420042A5420042A54200FFFFFF00FFFFFF00A5D6A5004AA54A004AA54A0039A5 - 390021A5210008A50800087B0800FFFFFF00C6DED600D6DEDE00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00EFF7EF00BDCEC60000000000BDD6CE00D6E7DE00FFFFFF00FFFF - FF00FFFFFF00FFFFFF0018634A0018634A0018634A00FFFFFF00FFFFFF00FFFF - FF00F7FFF700EFF7F700CEDED600BDD6CE000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000000000000000000000000000FFFFFF0029942900429C42004AA5 - 4A0052A552004AA54A00FFFFFF00FFFFFF00FFFFFF00A5D6A5004AA54A0039A5 - 390021A5210010A5100008840800FFFFFF00BDD6CE00EFF7EF00FFFFFF00FFFF - FF0018634A0018634A00FFFFFF00FFFFFF00FFFFFF0018634A0018634A00FFFF - FF00FFFFFF00FFFFFF00D6DED600BDDECE00BDD6C600EFF7F700FFFFFF00FFFF - FF00FFFFFF0018634A0018634A00FFFFFF0018634A0018634A00FFFFFF00FFFF - FF00FFFFFF00F7FFF700DEEFE700BDD6CE000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000000000000000000000000000FFFFFF00319C31004AA54A0052A5 - 52004AA54A004AA54A00FFFFFF00FFFFFF00FFFFFF00FFFFFF00A5D6A50039A5 - 390021A5210018A5180010841000FFFFFF00C6DECE00FFFFFF00FFFFFF00FFFF - FF00FFFFFF0018634A0018634A00FFFFFF0018634A0018634A00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00E7EFEF00BDD6CE00C6D6CE00FFFFFF00FFFFFF00FFFF - FF0018634A0018634A00FFFFFF00FFFFFF00FFFFFF0018634A0018634A00FFFF - FF00FFFFFF00F7FFFF00E7EFEF00BDD6CE000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000000000000000000000000000FFFFFF00429C420052A552004AA5 - 4A004AA54A004AA54A00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00A5D6 - A500219C2100219C210018841800FFFFFF00CEDED600FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF0018634A0018634A0018634A00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00EFF7EF00BDD6CE00CEDED600FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF0018634A00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00EFF7EF00BDD6CE000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000000000000000000000000000FFFFFF0042A5420052A5520052A5 - 52004AA54A004AA54A00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00A5D6 - A500219C2100219C2100217B2100FFFFFF00CEDED600FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF0018634A00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00EFF7EF00BDD6CE00CEDED600FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF0018634A0018634A0018634A00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00EFF7EF00BDD6CE000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000000000000000000000000000FFFFFF0052A552005AAD5A005AAD - 5A0052A552004AA54A00FFFFFF00FFFFFF00FFFFFF00FFFFFF00A5D6A5003194 - 31002994290029942900217B2100FFFFFF00C6D6CE00FFFFFF00FFFFFF00FFFF - FF0018634A0018634A00FFFFFF00FFFFFF00FFFFFF0018634A0018634A00FFFF - FF00FFFFFF00F7FFFF00E7EFEF00BDD6CE00C6DECE00FFFFFF00FFFFFF00FFFF - FF00FFFFFF0018634A0018634A00FFFFFF0018634A0018634A00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00E7EFEF00BDD6CE000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000000000000000000000000000FFFFFF0052A552006BB56B006BB5 - 6B005AAD5A0052AD5200FFFFFF00FFFFFF00FFFFFF00A5D6A500399C39003194 - 31002994290029942900217B2100FFFFFF00BDD6C600EFF7F700FFFFFF00FFFF - FF00FFFFFF0018634A0018634A00FFFFFF0018634A0018634A00FFFFFF00FFFF - FF00FFFFFF00F7FFF700DEEFE700BDD6CE00BDD6CE00EFF7EF00FFFFFF00FFFF - FF0018634A0018634A00FFFFFF00FFFFFF00FFFFFF0018634A0018634A00FFFF - FF00FFFFFF00FFFFFF00D6DED600BDDECE000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000000000000000000000000000FFFFFF005AAD5A007BBD7B0073BD - 730063AD63005AAD5A00FFFFFF00FFFFFF00A5D6A500429C4200429C4200399C - 39003194310031943100217B2100FFFFFF00BDD6CE00D6E7DE00FFFFFF00FFFF - FF00FFFFFF00FFFFFF0018634A0018634A0018634A00FFFFFF00FFFFFF00FFFF - FF00F7FFF700EFF7F700CEDED600BDD6CE00C6DED600D6DEDE00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00EFF7EF00BDCEC600000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000000000000000000000000000FFFFFF006BB56B008CC68C007BBD - 7B006BB56B0063B56300FFFFFF00A5D6A5005AAD5A0052A552004AA54A0042A5 - 4200399C390031943100217B2100FFFFFF0000000000BDCEC600E7EFE700FFFF - FF00FFFFFF00FFFFFF00FFFFFF0018634A00FFFFFF00FFFFFF00FFFFFF00F7FF - F700EFF7F700DEE7DE00BDCEC6000000000000000000BDD6C600DEE7E700FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00F7F7F700C6D6CE0000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000000000000000000000000000FFFFFF0073BD73009CCE9C008CC6 - 8C007BBD7B0073BD73006BB56B0063B5630063AD63005AAD5A0052AD52004AA5 - 4A0042A542003194310018731800FFFFFF000000000000000000BDCEC600E7EF - E700F7FFFF00F7FFFF00F7FFFF00F7FFFF00F7FFFF00F7FFF700F7F7F700EFF7 - F700DEE7DE00BDD6C60000000000000000000000000000000000BDD6C600DEE7 - E700F7FFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00E7EF - EF00C6D6CE000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000000000000000000000000000FFFFFF00B5DEB50073BD730063B5 - 63005AAD5A0052A5520052A552004AA54A004AA54A0042A54200429C4200399C - 390031943100218C21008CBD8C00FFFFFF00000000000000000000000000BDCE - C600D6E7DE00EFF7EF00F7F7F700F7F7F700EFF7F700EFF7F700E7EFEF00D6DE - D600BDCEC600000000000000000000000000000000000000000000000000BDD6 - CE00CEDECE00DEE7E700E7EFEF00EFF7F700EFF7EF00E7EFE700CEDED600B5CE - C600000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 00000000000000000000000000000000000000000000FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00000000000000000000000000000000000000 - 0000B5CEC600BDD6C600C6DECE00CEDED600CEDED600C6DECE00BDD6C600BDD6 - C600000000000000000000000000000000000000000000000000000000000000 - 0000B5CEC600C6DED600C6DED600C6DED600C6DED600C6DED600C6E7DE000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 00000000000000000000000000000000000000000000FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF000000000000000000FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF000000000000000000FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00000000000000000000000000000000000000 - 0000BDBDBD000000840000007300100000006363630000000000000000000000 - 000000000000000000000000000000000000FFFFFF0084B58400107310001873 - 18001873180018731800187B1800187B1800107B1000107B1000087B0800087B - 0800007B0000007300007BB57B00FFFFFF00FFFFFF0052ADFF0018529400185A - 9C00185A9C00185A9C00185AA500185AA500185A9C00185A9C00185294001852 - 940018528C00184A84004AADFF00FFFFFF00FFFFFF0084B58400107310001873 - 18001873180018731800187B1800187B1800107B1000107B1000087B0800087B - 0800007B0000007300007BB57B00FFFFFF000000000000000000BDBDBD003131 - 31000000AD000000FF000000DE00000042005252520000000000000000000000 - 000000000000000000000000000000000000FFFFFF0010841000218C21002994 - 2900319431003194310029942900299C2900219C210018A5180018A5180010A5 - 100008A5080000940000006B0000FFFFFF00FFFFFF00185AA500186BBD001873 - CE001873CE001873CE001873CE001873CE001873CE001873CE001873CE00186B - C600186BBD00185AA500104A7B00FFFFFF00FFFFFF0010841000218C21002994 - 2900319431003194310029942900299C2900219C210018A5180018A5180010A5 - 100008A5080000940000006B0000FFFFFF000000000000000000737373000000 - 42000000FF000000FF000000840000319C002121210000000000000000000000 - 000000000000000000000000000000000000FFFFFF00188C180029942900399C - 3900399C3900399C390039A53900A5D6A500FFFFFF0021AD210018AD180010B5 - 100008AD0800009C0000007B0000FFFFFF00FFFFFF001863AD001873CE00187B - DE00187BDE00187BE7001884E700188CF700188CF700188CF700188CF700187B - DE00186BC6001863AD0018528C00FFFFFF00FFFFFF00188C180029942900399C - 3900399C3900399C390039A539004AA54A00A5D6A500FFFFFF004AA54A0031A5 - 310018A51800009C0000007B0000FFFFFF00000000008C8C8C00BDBDBD000000 - 4200000084000000EF000000FF000000CE000000310073737300000000000000 - 000000000000000000000000000000000000FFFFFF0021942100399C390042A5 - 42004AA54A0042A5420042A54200FFFFFF00FFFFFF00FFFFFF0021B5210018B5 - 180010AD100008A50800087B0800FFFFFF00FFFFFF00186BC600187BDE001884 - EF00FFFFFF0084C6FF00188CF700188CF700188CF700188CF70084C6FF00FFFF - FF001873CE00186BBD0018529400FFFFFF00FFFFFF0021942100399C390042A5 - 420042A5420042A542004AA54A00A5D6A500FFFFFF00FFFFFF004AA54A0039A5 - 390021A5210008A50800087B0800FFFFFF000000000000000000001000000000 - AD000000FF000000FF000000FF000000DE001010100000002100525252007373 - 730031009C0000313100A5A5A50000000000FFFFFF0029942900429C42004AA5 - 4A0052A552004AA54A0042A5420042AD4200FFFFFF00FFFFFF00FFFFFF0018B5 - 180010AD100010A5100008840800FFFFFF00FFFFFF001873CE001884E700188C - F700188CFF00FFFFFF0084C6FF00188CF700188CF70084C6FF00FFFFFF001884 - E7001873D600186BC600185A9C00FFFFFF00FFFFFF0029942900429C42004AA5 - 4A0052A552004AA54A00A5D6A500FFFFFF00FFFFFF00FFFFFF004AA54A0039A5 - 390021A5210010A5100008840800FFFFFF0000000000BDBDBD00100000000000 - 84000000FF000000CE000000EF0000008400000084000000FF000000BD000000 - 840000006300737373000021000063636300FFFFFF00319C31004AA54A0052A5 - 520052A552004AA54A004AA54A0042A5420039AD3900FFFFFF00FFFFFF00FFFF - FF0018AD180018A5180010841000FFFFFF00FFFFFF00187BDE00188CF700188C - FF00188CF700188CF700FFFFFF0084C6FF0084C6FF00FFFFFF00188CF7001884 - E7001873D6001873CE00185AA500FFFFFF00FFFFFF00319C31004AA54A0052A5 - 52004AA54A00A5D6A500FFFFFF00FFFFFF00FFFFFF00FFFFFF004AA54A0039A5 - 390021A5210018A5180010841000FFFFFF000000000021212100000021000000 - AD000000FF0000004200000084000000FF000000FF0000007300000042000000 - 420073737300313163000000AD0000006300FFFFFF00429C420052A55200FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00219C210018841800FFFFFF00FFFFFF001884E700188CFF00188C - F700188CF700188CF700188CF700FFFFFF0084C6FF00188CF7001884EF00187B - DE001873CE001873CE001863AD00FFFFFF00FFFFFF00429C420052A552004AA5 - 4A00A5D6A500FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0042A5420031A5 - 3100219C2100219C210018841800FFFFFF00000000008C8C8C0000009C000000 - FF000000EF00000073000000EF000000FF000000EF0000003100100000005252 - 52000000EF000000FF000000DE0031316300FFFFFF0042A542005AAD5A00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00219C2100217B2100FFFFFF00FFFFFF001884EF00188CFF00188C - FF00188CF700188CF70084C6FF00FFFFFF00FFFFFF0084C6FF001884E7001873 - D6001873CE001873CE001863AD00FFFFFF00FFFFFF0042A5420052A5520052A5 - 5200A5D6A500FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00399C3900299C - 2900219C2100219C2100217B2100FFFFFF000000000010000000000042000031 - CE000000FF0000009C000000FF000000FF000000EF00000073000000AD000000 - CE000000FF000000FF000000AD0021212100FFFFFF0052A5520063AD630063AD - 63005AAD5A0052A552004AA54A00429C4200399C3900FFFFFF00FFFFFF00FFFF - FF00299C290029942900217B2100FFFFFF00FFFFFF00188CFF002194FF002194 - FF00188CFF0084C6FF00FFFFFF001884F7001884EF00FFFFFF0084C6FF001873 - CE001873CE001873CE001863AD00FFFFFF00FFFFFF0052A552005AAD5A005AAD - 5A0052A55200A5D6A500FFFFFF00FFFFFF00FFFFFF00FFFFFF00399C39003194 - 31002994290029942900217B2100FFFFFF00000000008C8C8C00000000000000 - AD000000FF000000EF0000007300000052000031CE000000AD000000EF000000 - EF000000BD0000006300BDBDBD0000000000FFFFFF0052A552006BB56B006BB5 - 6B005AAD5A0052A552004AA54A00429C4200FFFFFF00FFFFFF00FFFFFF002994 - 29002994290029942900217B2100FFFFFF00FFFFFF00188CFF0039A5FF0039A5 - FF0084C6FF00FFFFFF00188CFF00188CFF001884EF001884E700FFFFFF0084C6 - FF001873CE001873CE001863AD00FFFFFF00FFFFFF0052A552006BB56B006BB5 - 6B005AAD5A0052AD5200A5D6A500FFFFFF00FFFFFF00FFFFFF00399C39003194 - 31002994290029942900217B2100FFFFFF000000000000000000000000000000 - 52000000FF000000BD000031CE000000AD00000073003100CE00525252002121 - 21000000AD00000000000000000000000000FFFFFF005AAD5A007BBD7B0073BD - 730063AD63005AAD5A0052A55200FFFFFF00FFFFFF00FFFFFF00319C3100319C - 31003194310031943100217B2100FFFFFF00FFFFFF002194FF0052ADFF004AAD - FF00FFFFFF002194FF002194FF001894FF00188CF7001884EF001884E700FFFF - FF001873CE001873CE001863AD00FFFFFF00FFFFFF005AAD5A007BBD7B0073BD - 730063AD63005AAD5A005AAD5A00A5D6A500FFFFFF00FFFFFF00429C4200399C - 39003194310031943100217B2100FFFFFF0000000000A5A5A500000000000000 - 52000000AD0000005200000073000031FF000000730000005200212121000000 - 100000000000000000000000000000000000FFFFFF006BB56B008CC68C007BBD - 7B006BB56B0063B5630063AD6300B5DEB500FFFFFF004AA54A004AA54A0042A5 - 4200399C390031943100217B2100FFFFFF00FFFFFF0039A5FF006BBDFF0052AD - FF0039A5FF00319CFF00299CFF00299CFF002194FF00188CFF001884F7001884 - EF00187BDE001873CE001863AD00FFFFFF00FFFFFF006BB56B008CC68C007BBD - 7B006BB56B0063B5630063AD630063AD6300A5D6A500FFFFFF004AA54A0042A5 - 4200399C390031943100217B2100FFFFFF000000000000000000000000003131 - 3100000042000000CE000000AD000000DE00000063000000420000004200BDBD - BD0000000000000000000000000000000000FFFFFF0073BD73009CCE9C008CC6 - 8C007BBD7B0073BD73006BB56B0063B5630063AD63005AAD5A0052AD52004AA5 - 4A0042A542003194310018731800FFFFFF00FFFFFF004AADFF0084C6FF006BBD - FF0052ADFF004AADFF0039A5FF00319CFF00299CFF002194FF001894FF00188C - F7001884EF001873CE00185A9C00FFFFFF00FFFFFF0073BD73009CCE9C008CC6 - 8C007BBD7B0073BD73006BB56B0063B5630063AD63005AAD5A0052AD52004AA5 - 4A0042A542003194310018731800FFFFFF000000000000000000000000000000 - 00008C8C8C002121210000004200313131008C8C8C00BDC6C600000000000000 - 000000000000000000000000000000000000FFFFFF00B5DEB50073BD730063B5 - 63005AAD5A0052A5520052A552004AA54A004AA54A0042A54200429C4200399C - 390031943100218C21008CBD8C00FFFFFF00FFFFFF00ADDEFF004AADFF00319C - FF002194FF00188CFF00188CFF00188CF700188CF7001884EF001884E700187B - DE001873CE00186BBD0063B5FF00FFFFFF00FFFFFF00B5DEB50073BD730063B5 - 63005AAD5A0052A5520052A552004AA54A004AA54A0042A54200429C4200399C - 390031943100218C21008CBD8C00FFFFFF000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 00000000000000000000000000000000000000000000FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF000000000000000000FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF000000000000000000FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF0000000000424D3E000000000000003E000000 - 2800000040000000300000000100010000000000800100000000000000000000 - 000000000000000000000000FFFFFF00FFFFFFFF00000000FFFFFFFF00000000 - FFFFFFFF00000000F00FF03F00000000F7EFF7BF00000000F7EFF7BF00000000 - F7EFF78F00000000F7EFF02F00000000F7EFF02F00000000F00FFDEF00000000 - F00FFC0F00000000FFFFFC0F00000000FFFFFFFF00000000FFFFFFFF00000000 - FFFFFFFF00000000FFFFFFFF000000008001F01FF00FFFFF0000E00FE007FFFF - 0000C007C003FFFF000080038001FFFF000000010000F81F000000000000F81F - 000000000000FFFF000000000000FFFF000000000000FFFF000000000000FFFF - 000000000000FFFF000000000001FFFF000080018003FFFF0000C003C007FFFF - 0000E007E00FFFFF8001F00FF01FFFFFFFFF800180018001F07F000000000000 - C07F000000000000C07F000000000000003F0000000000008001000000000000 - 0000000000000000800000000000000000000000000000008000000000000000 - 00010000000000008007000000000000800F000000000000E00F000000000000 - F03F000000000000FFFF80018001800100000000000000000000000000000000 - 000000000000} - end - object ilEditorPages: TImageList - Height = 32 - Width = 32 - Left = 124 - Top = 116 - Bitmap = { - 494C010112004801040020002000FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600 - 000000000000360000002800000080000000A000000001002000000000000040 - 0100000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000A8CAFF00A8CA - FF00A8CAFF00A8CAFF00A8CAFF00A8CAFF00A8CAFF00A8CAFF00A8CAFF00A8CA - FF00A8CAFF00A8CAFF00A8CAFF00000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000A8CAFF00A8CA - FF00A8CAFF00A8CAFF00A8CAFF00A8CAFF00A8CAFF00A8CAFF00A8CAFF00A8CA - FF00A8CAFF00A8CAFF00A8CAFF00000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000A8CAFF00A8CA - FF00A8CAFF000000000000000000000000000000000000000000000000000000 - 000000000000A8CAFF00A8CAFF00000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000A8CAFF00A8CA - FF00A8CAFF00A8CAFF00A8CAFF00A8CAFF00A8CAFF00A8CAFF00A8CAFF00A8CA - FF00A8CAFF00A8CAFF00A8CAFF00000000000000000000000000000000000000 - 000000000000000000000000000000000000186BBE003783CC003783CC003783 - CC003783CC003783CC003783CC001267BC003783CC003783CC003783CC003783 - CC003783CC003783CC003783CC003783CC003783CC003783CC003783CC003783 - CC003783CC003783CC003783CC003783CC002071C2003581CB003783CC003783 - CC003783CC003783CC003783CC001267BC000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000A8CAFF00A8CA - FF00000000000000000000000000000000000000000000000000000000000000 - 0000A8CAFF00A8CAFF00A8CAFF00000000000000000000000000000000000000 - 000000000000000000000000000000000000156ABD00317EC900317EC900317E - C900317EC900317EC900317EC9001066BB00317EC900317EC900317EC900317E - C900317EC900317EC900317EC900317EC900317EC900317EC900317EC900317E - C900317EC900317EC900317EC900317EC9001C6FC000307DC800317EC900317E - C900317EC900317EC900317EC9001066BB000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000A8CAFF00A8CA - FF00A8CAFF00A8CAFF00A8CAFF00A8CAFF00A8CAFF00A8CAFF00A8CAFF00A8CA - FF00A8CAFF00A8CAFF00A8CAFF00000000000000000000000000000000000000 - 0000000000000000000000000000000000004B91D400AFDBFF00AFDBFF00AFDB - FF00AFDBFF00AFDBFF00AFDBFF003883CC00AFDBFF00AFDBFF00AFDBFF00AFDB - FF00AFDBFF00AFDBFF00AFDBFF00AFDBFF00AFDBFF00AFDBFF00AFDBFF00AFDB - FF00AFDBFF00AFDBFF00AFDBFF00AFDBFF0064A4DF00A9D6FC00AFDBFF00AFDB - FF00AFDBFF00AFDBFF00AFDBFF003883CC000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000A8CAFF00A8CA - FF00A8CAFF00A8CAFF00A8CAFF00A8CAFF00A8CAFF00A8CAFF00A8CAFF00A8CA - FF00A8CAFF00A8CAFF00A8CAFF00000000000000000000000000000000000000 - 0000000000000000000000000000000000004B91D400AFDBFF00AFDBFF00AFDB - FF00AFDBFF00AFDBFF00AFDBFF003883CC00AFDBFF00AFDBFF00AFDBFF00AFDB - FF00AFDBFF00AFDBFF00AFDBFF00AFDBFF00AFDBFF00AFDBFF00AFDBFF00AFDB - FF00AFDBFF00AFDBFF00AFDBFF00AFDBFF0064A4DF00A9D6FC00AFDBFF00AFDB - FF00AFDBFF00AFDBFF00AFDBFF003883CC000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000A8CAFF00A8CA - FF00A8CAFF00A8CAFF00A8CAFF00A8CAFF00A8CAFF00A8CAFF00A8CAFF00A8CA - FF00A8CAFF00A8CAFF00A8CAFF00000000000000000000000000000000000000 - 0000000000000000000000000000000000003682CB007DB6EA007DB6EA007DB6 - EA007DB6EA007DB6EA007DB6EA002878C5007DB6EA007DB6EA007DB6EA007DB6 - EA007DB6EA007DB6EA007DB6EA007DB6EA007DB6EA007DB6EA007DB6EA007DB6 - EA007DB6EA007DB6EA007DB6EA007DB6EA00488FD30079B3E8007DB6EA007DB6 - EA007DB6EA007DB6EA007DB6EA002878C5000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000A8CAFF00A8CA - FF00A8CAFF00A8CAFF00A8CAFF00A8CAFF00A8CAFF00A8CAFF00A8CAFF00A8CA - FF00A8CAFF00A8CAFF00A8CAFF00000000000000000000000000000000000000 - 0000000000000000000000000000000000003E88CF0091C5F20091C5F20091C5 - F20091C5F20091C5F20091C5F2002F7CC80091C5F20091C5F20091C5F20091C5 - F20091C5F20091C5F20091C5F20091C5F20091C5F20091C5F20091C5F20091C5 - F20091C5F20091C5F20091C5F20091C5F2005397D8008CC1F00091C5F20091C5 - F20091C5F20091C5F20091C5F2002F7CC8000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000A8CAFF00A8CA - FF00A8CAFF00A8CAFF00A8CAFF00A8CAFF00A8CAFF00A8CAFF00A8CAFF00A8CA - FF00A8CAFF00A8CAFF00A8CAFF00000000000000000000000000000000000000 - 0000000000000000000000000000000000004B91D400AFDBFF00AFDBFF00AFDB - FF00AFDBFF00AFDBFF00AFDBFF003883CC00AFDBFF00AFDBFF00AFDBFF00AFDB - FF00AFDBFF00AFDBFF00AFDBFF00AFDBFF00AFDBFF00AFDBFF00AFDBFF00AFDB - FF00AFDBFF00AFDBFF00AFDBFF00AFDBFF0064A4DF00A9D6FC00AFDBFF00AFDB - FF00AFDBFF00AFDBFF00AFDBFF003883CC000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000A8CAFF00A8CA - FF00A8CAFF00A8CAFF00A8CAFF00A8CAFF00A8CAFF00A8CAFF00A8CAFF00A8CA - FF00A8CAFF00A8CAFF00A8CAFF00000000000000000000000000000000000000 - 0000000000000000000000000000000000004B91D400AFDBFF00AFDBFF00AFDB - FF00AFDBFF00AFDBFF00AFDBFF003883CC00AFDBFF00AFDBFF00AFDBFF00AFDB - FF00AFDBFF00AFDBFF00AFDBFF00AFDBFF00AFDBFF00AFDBFF00AFDBFF00AFDB - FF00AFDBFF00AFDBFF00AFDBFF00AFDBFF0064A4DF00A9D6FC00AFDBFF00AFDB - FF00AFDBFF00AFDBFF00AFDBFF003883CC000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000000000000000000000000000D6D6D600CECECE00CECECE00CECE - CE00CECECE00CECECE00CECECE00CECECE00CECECE0000000000A8CAFF00A8CA - FF00A8CAFF00A8CAFF00A8CAFF00A8CAFF00A8CAFF00A8CAFF00A8CAFF00A8CA - FF00A8CAFF00A8CAFF00A8CAFF0000000000CECECE00CECECE00CECECE00CECE - CE00CECECE00CECECE00CECECE00D6D6D6003883CC0082BAEC0082BAEC0082BA - EC0082BAEC0082BAEC0082BAEC002A79C60082BAEC0082BAEC0082BAEC0082BA - EC0082BAEC0082BAEC0082BAEC0082BAEC0082BAEC0082BAEC0082BAEC0082BA - EC0082BAEC0082BAEC0082BAEC0082BAEC004A91D4007EB7EA0082BAEC0082BA - EC0082BAEC0082BAEC0082BAEC002A79C6000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000007394DE000042C6000042C6000042 - C6000042C6000042C6000042C6000042C6000042C60000000000A8CAFF00A8CA - FF00A8CAFF000000000000000000000000000000000000000000000000000000 - 0000A8CAFF00A8CAFF00A8CAFF00000000000042C6000042C6000042C6000042 - C6000042C6000042C6000042C6007394DE003D87CE008DC2F1008DC2F1008DC2 - F1008DC2F1008DC2F1008DC2F1002D7CC7008DC2F1008DC2F1008DC2F1008DC2 - F1008DC2F1008DC2F1008DC2F1008DC2F1008DC2F1008DC2F1008DC2F1008DC2 - F1008DC2F1008DC2F1008DC2F1008DC2F1005196D70088BFEE008DC2F1008DC2 - F1008DC2F1008DC2F1008DC2F1002D7CC7000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000042C600FFFFFF00FFFFFF00A5A5 - A500FFFFFF00FFFFFF00A5A5A500FFFFFF00FFFFFF0000000000A8CAFF00A8CA - FF00000000007F9AC1007F9AC1007F9AC1007F9AC1007F9AC1007F9AC1007F9A - C10000000000A8CAFF00A8CAFF0000000000FFFFFF00A5A5A500FFFFFF00FFFF - FF00A5A5A500FFFFFF00FFFFFF000042C6004B91D400AFDBFF00AFDBFF00AFDB - FF00AFDBFF00AFDBFF00AFDBFF003883CC00AFDBFF00AFDBFF00AFDBFF00AFDB - FF00AFDBFF00AFDBFF00AFDBFF00AFDBFF00AFDBFF00AFDBFF00AFDBFF00AFDB - FF00AFDBFF00AFDBFF00AFDBFF00AFDBFF0064A4DF00A9D6FC00AFDBFF00AFDB - FF00AFDBFF00AFDBFF00AFDBFF003883CC000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000042C600FFFFFF00FFFFFF00A5A5 - A500FFFFFF00FFFFFF00A5A5A500FFFFFF00FFFFFF0000000000A8CAFF000000 - 00007F9AC1007F9AC1007F9AC1007F9AC1007F9AC1007F9AC1007F9AC1007F9A - C1007F9AC10000000000A8CAFF0000000000FFFFFF00A5A5A500FFFFFF00FFFF - FF00A5A5A500FFFFFF00FFFFFF000042C6004B91D400AFDBFF00AFDBFF00AFDB - FF00AFDBFF00AFDBFF00AFDBFF003883CC00AFDBFF00AFDBFF00AFDBFF00AFDB - FF00AFDBFF00AFDBFF00AFDBFF00AFDBFF00AFDBFF00AFDBFF00AFDBFF00AFDB - FF00AFDBFF00AFDBFF00AFDBFF00AFDBFF0064A4DF00A9D6FC00AFDBFF00AFDB - FF00AFDBFF00AFDBFF00AFDBFF003883CC000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000042C600A5A5A500A5A5A500A5A5 - A500A5A5A500A5A5A500A5A5A500A5A5A500A5A5A50000000000A8CAFF000000 - 00007F9AC1007F9AC1007F9AC1007F9AC1007F9AC1007F9AC1007F9AC1007F9A - C1007F9AC10000000000A8CAFF0000000000A5A5A500A5A5A500A5A5A500A5A5 - A500A5A5A500A5A5A500A5A5A5000042C6004B91D400AFDBFF00AFDBFF00AFDB - FF00AFDBFF00AFDBFF00AFDBFF003883CC00AFDBFF00AFDBFF00AFDBFF00AFDB - FF00AFDBFF00AFDBFF00AFDBFF00AFDBFF00AFDBFF00AFDBFF00AFDBFF00AFDB - FF00AFDBFF00AFDBFF00AFDBFF00AFDBFF0064A4DF00A9D6FC00AFDBFF00AFDB - FF00AFDBFF00AFDBFF00AFDBFF003883CC000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000042C600FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00A5A5A500FFFFFF00FFFFFF0000000000A8CAFF000000 - 00007F9AC1007F9AC1007F9AC1007F9AC1007F9AC1007F9AC1007F9AC1007F9A - C1007F9AC10000000000A8CAFF0000000000A5A5A500FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF000042C600166ABD003380CA003380CA003380 - CA003380CA003380CA003380CA001066BB003380CA003380CA003380CA003380 - CA003380CA003380CA003380CA003380CA003380CA003380CA003380CA003380 - CA003380CA003380CA003380CA003380CA001D6FC000317EC9003380CA003380 - CA003380CA003380CA003380CA001066BB000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000042C600FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00A5A5A500FFFFFF00FFFFFF00A6A2A600000000007F9A - C1007F9AC1007F9AC1007F9AC1007F9AC1007F9AC1007F9AC1007F9AC1007F9A - C1007F9AC1007F9AC10000000000FFF0FF00A5A5A500FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF000042C6004B91D400AFDBFF00AFDBFF00AFDB - FF00AFDBFF00AFDBFF00AFDBFF003883CC00AFDBFF00AFDBFF00AFDBFF00AFDB - FF00AFDBFF00AFDBFF00AFDBFF00AFDBFF00AFDBFF00AFDBFF00AFDBFF00AFDB - FF00AFDBFF00AFDBFF00AFDBFF00AFDBFF0064A4DF00A9D6FC00AFDBFF00AFDB - FF00AFDBFF00AFDBFF00AFDBFF003883CC000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000042C600A5A5A500A5A5A500A5A5 - A500A5A5A500A5A5A500A5A5A500A5A5A500A5A5A500A79FA7000E0E0E007F9A - C1007F9AC1007F9AC1007F9AC1007F9AC1007F9AC1007F9AC1007F9AC1007F9A - C1007F9AC1007F9AC10000000000AD94AD00A5A5A500A5A5A500A5A5A500A5A5 - A500A5A5A500A5A5A500A5A5A5000042C6004B91D400AFDBFF00AFDBFF00AFDB - FF00AFDBFF00AFDBFF00AFDBFF003883CC00AFDBFF00AFDBFF00AFDBFF00AFDB - FF00AFDBFF00AFDBFF00AFDBFF00AFDBFF00AFDBFF00AFDBFF00AFDBFF00AFDB - FF00AFDBFF00AFDBFF00AFDBFF00AFDBFF0064A4DF00A9D6FC00AFDBFF00AFDB - FF00AFDBFF00AFDBFF00AFDBFF003883CC000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000042C600FFFFFF00FFFFFF00FFFF - FF00FFFFFF00A5A5A500FFFFFF00FFFFFF00A5A5A500FFF2FF00101010007F9A - C1007F9AC1007F9AC1007F9AC1007F9AC1007F9AC1007F9AC1007F9AC1007F9A - C1007F9AC1007F9AC1003A3A3A00A5A3A500FFFFFF00FFFFFF00A5A5A500FFFF - FF00FFFFFF00FFFFFF00FFFFFF000042C6004B91D400AFDBFF00AFDBFF00AFDB - FF00AFDBFF00AFDBFF00AFDBFF003883CC00AFDBFF00AFDBFF00AFDBFF00AFDB - FF00AFDBFF00AFDBFF00AFDBFF00AFDBFF00AFDBFF00AFDBFF00AFDBFF00AFDB - FF00AFDBFF00AFDBFF00AFDBFF00AFDBFF0064A4DF00A9D6FC00AFDBFF00AFDB - FF00AFDBFF00AFDBFF00AFDBFF003883CC000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000042C600FFFFFF00FFFFFF00FFFF - FF00FFFFFF00A5A5A500FFFFFF00FFFFFF00A5A5A500FFFFFF00FFEEFF000A0A - 0A007F9AC1007F9AC1007F9AC1007F9AC1007F9AC1007F9AC1007F9AC1007F9A - C1007F9AC10000000000FFF8FF00A8A8A800FFFFFF00FFFFFF00A5A5A500FFFF - FF00FFFFFF00FFFFFF00FFFFFF000042C600166ABE003480CA003480CA003480 - CA003480CA003480CA003480CA001166BB003480CA003480CA003480CA003480 - CA003480CA003480CA003480CA003480CA003480CA003480CA003480CA003480 - CA003480CA003480CA003480CA003480CA001E70C100327FCA003480CA003480 - CA003480CA003480CA003480CA001166BB000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000042C600A5A5A500A5A5A500A5A5 - A500A5A5A500A5A5A500A5A5A500A5A5A500A5A5A500A5A5A500A5A5A500ACAC - AC001D1D1D00000000007F9AC1007F9AC1007F9AC1007F9AC1007F9AC1000000 - 000000000000AD94AD00ADADAD00A5A5A500A5A5A500A5A5A500A5A5A500A5A5 - A500A5A5A500FFFFFF00FFFFFF000042C6004B91D400AFDBFF00AFDBFF00AFDB - FF00AFDBFF00AFDBFF00AFDBFF003883CC00AFDBFF00AFDBFF00AFDBFF00AFDB - FF00AFDBFF00AFDBFF00AFDBFF00AFDBFF00AFDBFF00AFDBFF00AFDBFF00AFDB - FF00AFDBFF00AFDBFF00AFDBFF00AFDBFF0064A4DF00A9D6FC00AFDBFF00AFDB - FF00AFDBFF00AFDBFF00AFDBFF003883CC000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000042C600FFFFFF00FFFFFF00FFFF - FF00A5A5A500FFFFFF00FFFFFF00A5A5A500FFFFFF00FFFFFF00A5A5A500FFFF - FF00FFFFFF00AEAEAE001F1F1F0000000000000000000000000000000000AC96 - AC00FFF8FF00FFFFFF00A5A5A500FFFFFF00FFFFFF00A5A5A500FFFFFF00FFFF - FF00A5A5A500FFFFFF00FFFFFF000042C6004B91D400AFDBFF00AFDBFF00AFDB - FF00AFDBFF00AFDBFF00AFDBFF003883CC00AFDBFF00AFDBFF00AFDBFF00AFDB - FF00AFDBFF00AFDBFF00AFDBFF00AFDBFF00AFDBFF00AFDBFF00AFDBFF00AFDB - FF00AFDBFF00AFDBFF00AFDBFF00AFDBFF0064A4DF00A9D6FC00AFDBFF00AFDB - FF00AFDBFF00AFDBFF00AFDBFF003883CC000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000042C600FFFFFF00FFFFFF00FFFF - FF00A5A5A500FFFFFF00FFFFFF00A5A5A500FFFFFF00FFFFFF00A5A5A500FFFF - FF00FFFFFF00A5A5A500FFFFFF00FFFFFF00A5A5A500FFFFFF00FFFFFF00A5A5 - A500FFFFFF00FFFFFF00A5A5A500FFFFFF00FFFFFF00A5A5A500FFFFFF00FFFF - FF00A5A5A500FFFFFF00FFFFFF000042C6004B91D400AFDBFF00AFDBFF00AFDB - FF00AFDBFF00AFDBFF00AFDBFF003883CC00AFDBFF00AFDBFF00AFDBFF00AFDB - FF00AFDBFF00AFDBFF00AFDBFF00AFDBFF00AFDBFF00AFDBFF00AFDBFF00AFDB - FF00AFDBFF00AFDBFF00AFDBFF00AFDBFF0064A4DF00A9D6FC00AFDBFF00AFDB - FF00AFDBFF00AFDBFF00AFDBFF003883CC000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000042C600A5A5A500A5A5A500A5A5 - A500A5A5A500A5A5A500A5A5A500A5A5A500A5A5A500A5A5A500A5A5A500A5A5 - A500A5A5A500A5A5A500A5A5A500A5A5A500A5A5A500A5A5A500A5A5A500A5A5 - A500A5A5A500A5A5A500A5A5A500A5A5A500A5A5A500A5A5A500A5A5A500A5A5 - A500A5A5A500A5A5A500A5A5A5000042C600478ED300A6D4FB00A6D4FB00A6D4 - FB00A6D4FB00A6D4FB00A6D4FB003581CB00A6D4FB00A6D4FB00A6D4FB00A6D4 - FB00A6D4FB00A6D4FB00A6D4FB00A6D4FB00A6D4FB00A6D4FB00A6D4FB00A6D4 - FB00A6D4FB00A6D4FB00A6D4FB00A6D4FB005FA0DD00A0D0F900A6D4FB00A6D4 - FB00A6D4FB00A6D4FB00A6D4FB003581CB000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000042C600FFFFFF00FFFFFF00A5A5 - A500FFFFFF00FFFFFF00A5A5A500FFFFFF00FFFFFF00A5A5A500FFFFFF00FFFF - FF00A5A5A500FFFFFF00FFFFFF00A5A5A500FFFFFF00FFFFFF00A5A5A500FFFF - FF00FFFFFF00A5A5A500FFFFFF00FFFFFF00A5A5A500FFFFFF00FFFFFF00A5A5 - A500FFFFFF00FFFFFF00FFFFFF000042C6002D7BC70068A7E10068A7E10068A7 - E10068A7E10068A7E10068A7E1002273C20068A7E10068A7E10068A7E10068A7 - E10068A7E10068A7E10068A7E10068A7E10068A7E10068A7E10068A7E10068A7 - E10068A7E10068A7E10068A7E10068A7E1003C86CE0065A4DF0068A7E10068A7 - E10068A7E10068A7E10068A7E1002273C2000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000042C600FFFFFF00FFFFFF00A5A5 - A500FFFFFF00FFFFFF00A5A5A500FFFFFF00FFFFFF00A5A5A500FFFFFF00FFFF - FF00A5A5A500FFFFFF00FFFFFF00A5A5A500FFFFFF00FFFFFF00A5A5A500FFFF - FF00FFFFFF00A5A5A500FFFFFF00FFFFFF00A5A5A500FFFFFF00FFFFFF00A5A5 - A500FFFFFF00FFFFFF00FFFFFF000042C6004B91D400AFDBFF00AFDBFF00AFDB - FF00AFDBFF00AFDBFF00AFDBFF003883CC00AFDBFF00AFDBFF00AFDBFF00AFDB - FF00AFDBFF00AFDBFF00AFDBFF00AFDBFF00AFDBFF00AFDBFF00AFDBFF00AFDB - FF00AFDBFF00AFDBFF00AFDBFF00AFDBFF0064A4DF00A9D6FC00AFDBFF00AFDB - FF00AFDBFF00AFDBFF00AFDBFF003883CC000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000007394DE000042C6000042C6000042 - C6000042C6000042C6000042C6000042C6000042C6000042C6000042C6000042 - C6000042C6000042C6000042C6000042C6000042C6000042C6000042C6000042 - C6000042C6000042C6000042C6000042C6000042C6000042C6000042C6000042 - C6000042C6000042C6000042C6007394DE004B91D400AFDBFF00AFDBFF00AFDB - FF00AFDBFF00AFDBFF00AFDBFF003883CC00AFDBFF00AFDBFF00AFDBFF00AFDB - FF00AFDBFF00AFDBFF00AFDBFF00AFDBFF00AFDBFF00AFDBFF00AFDBFF00AFDB - FF00AFDBFF00AFDBFF00AFDBFF00AFDBFF0064A4DF00A9D6FC00AFDBFF00AFDB - FF00AFDBFF00AFDBFF00AFDBFF003883CC000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000004B91D400AFDBFF00AFDBFF00AFDB - FF00AFDBFF00AFDBFF00AFDBFF003883CC00AFDBFF00AFDBFF00AFDBFF00AFDB - FF00AFDBFF00AFDBFF00AFDBFF00AFDBFF00AFDBFF00AFDBFF00AFDBFF00AFDB - FF00AFDBFF00AFDBFF00AFDBFF00AFDBFF0064A4DF00A9D6FC00AFDBFF00AFDB - FF00AFDBFF00AFDBFF00AFDBFF003883CC000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000002072C2004A91D4004A91D4004A91 - D4004A91D4004A91D4004A91D400186CBE004A91D4004A91D4004A91D4004A91 - D4004A91D4004A91D4004A91D4004A91D4004A91D4004A91D4004A91D4004A91 - D4004A91D4004A91D4004A91D4004A91D4002B79C600488FD3004A91D4004A91 - D4004A91D4004A91D4004A91D400186CBE000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000000000000000000000000000D6D6D600CECECE00CECECE00CECE - CE00CECECE00CECECE00CECECE00CECECE00CECECE00CECECE00CECECE00CECE - CE00CECECE00CECECE00CECECE00CECECE00CECECE00CECECE00CECECE00CECE - CE00CECECE00CECECE00CECECE00CECECE00CECECE00CECECE00CECECE00CECE - CE00CECECE00CECECE00CECECE00D6D6D6000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000004242420042424200424242004242 - 4200424242004242420063636300848484004242420042424200424242004242 - 4200424242004242420042424200424242004242420042424200424242004242 - 4200424242004242420042424200424242004242420042424200424242004242 - 4200424242004242420042424200424242000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000000000000000000000000000C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600ADADAD00D6D6D600CECECE00C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C6000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000000000000000000000000000C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600ADADAD00D6D6D600CECECE00C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C6000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000000000000000000000000000000000000000000000000000D6D6 - D600CECECE00CECECE00CECECE00CECECE00CECECE00CECECE00CECECE00CECE - CE00D6D6D6000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000000000000000000000000000C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600A5A5A500D6D6D600C6C6C600C6C6C600C6C6C6008484 - 8400848484008484840084848400848484008484840084848400C6C6C600C6C6 - C600C6C6C600C6C6C6008484840084848400C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C6000000000000000000000000000000 - 000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000D6D6D600D6D6 - D600848484006363630063636300424242004242420063636300636363008484 - 8400D6D6D600D6D6D60000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000000000000000000000000000C6C6C600BDBDBD00B5B5B500B5B5 - B500B5B5B500B5B5B5009C9C9C00C6C6C600BDBDBD00B5B5B500B5B5B5008484 - 8400B5B5B500B5B5B500B5B5B500B5B5B500B5B5B50084848400B5B5B500B5B5 - B500B5B5B50084848400C6C6BD00BDBDBD008484840084848400C6C6C600CECE - CE00CECECE00CECECE0084848400848484000000000000000000000000000000 - 0000FFFFFF00FFFFFF00EFEFEF00EFEFEF00EFEFEF00EFEFEF00EFEFEF00EFEF - EF00F7F7F700FFFFFF0000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 00000000000000000000000000000000000000000000D6D6D600636363006363 - 6300A5A5A500C6C6C600D6D6D600D6D6D600D6D6D600D6D6D600C6C6C600A5A5 - A5006363630063636300D6D6D600000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000000000000000000000000000315AC6000042C6000042C6000042 - C6000042C6000042C6000042C6000042C6000042C6000042C6000042C6000042 - C6000042C6000042C6000042C6000042C6000042C6000042C6000042C6000042 - C6000042C6000042C600315AC600E7E7E700C6C6C600C6C6C60084848400CECE - CE00CECECE00CECECE00CECECE0084848400FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00EFEFEF00DEDEDE00D6D6D600D6D6D600D6D6D600D6D6D600D6D6 - D600E7E7E700F7F7F700FFFFFF00000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000D6D6D600CECECE0063636300C6C6C600D6D6 - D600D6D6D600D6D6D600D6D6D600D6D6D600D6D6D600D6D6D600D6D6D600D6D6 - D600D6D6D600C6C6C60063636300CECECE00D6D6D60000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000042C600FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF000042C600B5B5B500F7F7F700C6C6C60084848400CECE - CE00CECECE00CECECE00CECECE00CECECE00EFEFEF00EFEFEF00EFEFEF00EFEF - EF00E7E7E700DEDEDE0000000000000000000000000000000000000000000000 - 0000D6D6D600E7E7E700F7F7F700FFFFFF00FFFFFF00FFFFFF00FFFFFF000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000C6C6C60042424200C6C6C600DEDEDE00DEDE - DE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00637BD600DEDEDE00DEDEDE00DEDE - DE00DEDEDE00DEDEDE00C6C6C60042424200C6C6C60000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000042C600FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF000042C600E7E7E700F7F7F70084848400C6C6C600D6D6 - D600D6D6D600D6D6D60084848400D6D6D600DEDEDE00D6D6D600D6D6D600D6D6 - D600CECECE00CECECE00000000000031A5000031A5000031A5000031A5000031 - A50000000000D6D6D600E7E7E700E7E7E700EFEFEF00EFEFEF00F7F7F700FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 00000000000000000000D6D6D60063636300C6C6C600DEDEDE00DEDEDE00E7E7 - E700E7E7E700E7E7E700E7E7E700E7E7E700315AC600637BD600E7E7E700E7E7 - E700E7E7E700DEDEDE00DEDEDE00C6C6C60063636300D6D6D600000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000042C600FFFFFF00FFFFFF004242 - 42004242420042424200424242004242420042424200FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF000042C600E7E7E700C6C6C60084848400D6D6D600D6D6 - D600D6D6D600D6D6D600D6D6D600848484000000000000000000000000000000 - 00000000000000000000000000000031A5000031A5000031A5000031A5000031 - A5000031A50000000000CECECE00CECECE00D6D6D600D6D6D600E7E7E700E7E7 - E700EFEFEF00EFEFEF00EFEFEF00EFEFEF00EFEFEF00F7F7F700FFFFFF00FFFF - FF00000000000000000000000000000000000000000000000000000000000000 - 000000000000D6D6D60063636300C6C6C600DEDEDE00DEDEDE00DEDEDE00E7E7 - E700E7E7E700E7E7E700E7E7E700E7E7E700315AC600315AC600637BD600E7E7 - E700E7E7E700DEDEDE00DEDEDE00DEDEDE00C6C6C60063636300D6D6D6000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000042C600FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF000042C6009C9C9C00A5A5A500C6C6C600D6D6D600D6D6 - D600D6D6D600D6D6D600D6D6D600D6D6D60000000000E7E7E700D6D6D600C6C6 - C600B5B5B500A5A5A500000000000042C6000042C6000042C6000042C6000042 - C6000042C6000031A50000000000000000000000000000000000CECECE00CECE - CE00CECECE00CECECE00D6D6D600D6D6D600D6D6D600E7E7E700EFEFEF00F7F7 - F700FFFFFF000000000000000000000000000000000000000000000000000000 - 000000000000D6D6D60063636300DEDEDE00DEDEDE00DEDEDE00637BD600315A - C600315AC600315AC600315AC600315AC600315AC6000042C600315AC600637B - D600E7E7E700DEDEDE00DEDEDE00DEDEDE00DEDEDE0063636300D6D6D6000000 - 000000000000000000000000000000000000000000000000000000000000CECE - CE0000000000000000000000000000000000000000000000000000000000CECE - CE000000000000000000000000000000000000000000CECECE00000000000000 - 00000000000000000000000000000000000000000000CECECE00000000000000 - 00000000000000000000CECECE00000000000042C600FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF000042C600C6C6C600D6D6D600DEDEDE00DEDEDE00DEDE - DE00DEDEDE00DEDEDE00DEDEDE00DEDEDE000000000000000000000000000000 - 00000000000000000000000000000031A5000031A5000031A5000031A5000031 - A5000031A5000031A5000031A5000031A5000031A50000000000000000000000 - 00000000000000000000000000000000000000000000CECECE00D6D6D600E7E7 - E700F7F7F700FFFFFF0000000000000000000000000000000000000000000000 - 00000000000084848400A5A5A500E7E7E700E7E7E700E7E7E700315AC6000042 - C6000042C6000042C6000042C6000042C6000042C6000042C6000042C600315A - C600637BD600E7E7E700E7E7E700E7E7E700E7E7E700A5A5A500848484000000 - 00000000000000000000000000000000000000000000000000000042C600CECE - CE000000000000000000000000000000000000000000000000000042C600CECE - CE00000000000000000000000000000000000042C600CECECE00000000000000 - 0000000000000000000000000000B1C3ED000042C600B1C3ED00CECECE000000 - 0000000000000042C600CECECE00000000000042C6000042C6000042C6000042 - C6000042C6000042C6000042C6000042C6000042C6000042C6000042C6000042 - C6000042C6000042C6000042C6000042C6000042C6000042C6000042C6000042 - C6000042C6000042C6000042C600C6C6C600D6D6D600DEDEDE00DEDEDE00DEDE - DE00DEDEDE00DEDEDE00DEDEDE00DEDEDE000000000000000000000000000000 - 00000000000000000000000000000042C6000042C6000042C6000042C6000042 - C6000042C6000042C6000042C6000042C6000042C60000000000E7E7E700DEDE - DE00DEDEDE00CECECE00CECECE00CECECE00C6C6C6000000000000000000D6D6 - D600E7E7E700F7F7F700FFFFFF00000000000000000000000000000000000000 - 00000000000063636300C6C6C600E7E7E700E7E7E700E7E7E700315AC6000042 - C6000042C6000042C6000042C6000042C6000042C6000042C6000042C6000042 - C600315AC600637BD600E7E7E700E7E7E700E7E7E700C6C6C600636363000000 - 00000000000000000000000000000000000000000000000000004576DB00B1C3 - ED00CECECE0000000000000000000000000000000000B1C3ED004576DB000000 - 00000000000000000000CECECE00CECECE000042C600CECECE00000000000000 - 0000CECECE0000000000000000000042C600CECECE000042C600000000000000 - 0000000000000042C600CECECE00000000000042C600FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF000042C6004A4A4A004242420042424200424242004242 - 42004242420042424200424242004242420000000000D6D6D600D6D6D600CECE - CE00CECECE00CECECE00000000000031A5000031A5000031A5000031A5000042 - C6000042C600315AC600315AC600315AC600315AC60000000000FFFFFF00FFFF - FF00FFFFFF00F7F7F700F7F7F700EFEFEF00E7E7E700DEDEDE00CECECE000000 - 0000D6D6D600E7E7E700F7F7F700FFFFFF000000000000000000000000000000 - 00000000000063636300E7E7E700E7E7E700E7E7E700E7E7E700315AC6000042 - C6000042C6000042C6000042C6000042C6000042C6000042C6000042C6000042 - C6000042C600315AC600637BD600E7E7E700E7E7E700E7E7E700636363000000 - 0000000000000000000000000000000000000000000000000000B1C3ED000042 - C600CECECE00CECECE00CECECE00CECECE00CECECE000042C600B1C3ED000000 - 0000B1C3ED004576DB004576DB00B1C3ED000042C600CECECE00000000004576 - DB00CECECE0000000000000000000042C6000042C600B1C3ED00000000000000 - 0000000000000042C600CECECE00000000000042C600FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF000042C600E7E7E7000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000315AC600315AC600315AC600315AC600315A - C6007394DE00EFEFEF00FFFFFF00FFFFFF00FFFFFF0000000000000000000000 - 00000000000000000000000000005A5A5A00FFFFFF00FFFFFF00EFEFEF00DEDE - DE0000000000D6D6D600E7E7E700F7F7F7000000000000000000000000000000 - 00000000000042424200EFEFEF00EFEFEF00EFEFEF00EFEFEF00315AC6000042 - C6000042C6000042C6000042C6000042C6000042C6000042C6000042C6000042 - C6000042C6000042C600315AC600637BD600EFEFEF00EFEFEF00424242000000 - 0000000000000000000000000000000000000000000000000000000000004576 - DB000042C6000042C6000042C6000042C6000042C6004576DB00000000000000 - 00004576DB00CECECE007394DE004576DB000042C600CECECE00B1C3ED004576 - DB000000000000000000000000000042C600CECECE0000000000000000000000 - 0000000000000042C600CECECE00000000000042C600FFFFFF00FFFFFF004242 - 4200424242004242420042424200424242004242420042424200424242004242 - 4200424242004242420042424200FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF000042C600E7E7E7000000000000000000000000000000 - 00000000000000000000000000000000000000000000E7E7E700D6D6D600C6C6 - C600B5B5B500A5A5A50000000000EFEFEF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00EFEFEF007394DE0000000000000000000000000000000000000000000000 - 0000000000000000000000000000DEDEDE00000000005A5A5A00FFFFFF00F7F7 - F700E7E7E70000000000D6D6D600EFEFEF000000000000000000000000000000 - 00000000000042424200EFEFEF00EFEFEF00EFEFEF00EFEFEF00315AC6000042 - C6000042C6000042C6000042C6000042C6000042C6000042C6000042C6000042 - C6000042C6000042C600315AC600637BD600EFEFEF00EFEFEF00424242000000 - 000000000000000000000000000000000000000000000000000000000000B1C3 - ED000042C600CECECE0000000000000000000042C600B1C3ED00000000000000 - 00000042C600CECECE0000000000000000000042C6000042C6004576DB00B1C3 - ED000000000000000000000000004576DB007394DE00CECECE00000000000000 - 0000000000000042C600CECECE00000000000042C600FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF000042C600E7E7E7000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 00000000000000000000000000007394DE007394DE007394DE007394DE007394 - DE00315AC6000000000000000000000000000000000000000000000000000000 - 00000000000000000000000000000000000000000000DEDEDE005A5A5A00FFFF - FF00FFFFFF00EFEFEF0000000000E7E7E7000000000000000000000000000000 - 00000000000063636300EFEFEF00EFEFEF00EFEFEF00EFEFEF00315AC6000042 - C6000042C6000042C6000042C6000042C6000042C6000042C6000042C6000042 - C6000042C600315AC600637BD600EFEFEF00EFEFEF00EFEFEF00636363000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 00004576DB00B1C3ED0000000000B1C3ED004576DB0000000000000000000000 - 00004576DB00000000007394DE004576DB000042C600CECECE00000000000000 - 0000000000000000000000000000000000000042C6007394DE00000000000000 - 0000000000000042C600CECECE00000000000042C600FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF000042C600E7E7E7000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000315AC600315AC600315AC600315AC600315A - C600000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000DEDEDE000000 - 0000FFFFFF00FFFFFF0000000000D6D6D6000000000000000000000000000000 - 00000000000063636300C6C6C600EFEFEF00EFEFEF00EFEFEF00315AC6000042 - C6000042C6000042C6000042C6000042C6000042C6000042C6000042C6000042 - C600315AC600637BD600EFEFEF00EFEFEF00EFEFEF00C6C6C600636363000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000B1C3ED000042C600CECECE000042C600B1C3ED0000000000000000000000 - 0000B1C3ED004576DB004576DB00B1C3ED000042C600CECECE00000000000000 - 00000000000000000000000000000042C600B1C3ED00CECECE00000000000000 - 0000000000004576DB0000000000000000000042C600FFFFFF00FFFFFF004242 - 420042424200424242004242420042424200FFFFFF0042424200424242004242 - 4200424242004242420042424200FFFFFF004242420042424200424242004242 - 4200FFFFFF00FFFFFF000042C600E7E7E7000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000005A5A - 5A00FFFFFF00FFFFFF00FFFFFF00000000000000000000000000000000000000 - 00000000000084848400A5A5A500F7F7F700F7F7F700F7F7F700315AC6000042 - C6000042C6000042C6000042C6000042C6000042C6000042C6000042C600315A - C600637BD600F7F7F700F7F7F700F7F7F700F7F7F700A5A5A500848484000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000004576DB00000000004576DB000000000000000000000000000000 - 0000CECECE00CECECE00CECECE00CECECE000042C600CECECE00CECECE00CECE - CE00CECECE00CECECE00CECECE00B1C3ED000042C60000000000CECECE00CECE - CE004576DB00B1C3ED0000000000000000000042C600FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF000042C600E7E7E7000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000000000000000000000000000000000000000000000000000DEDE - DE0000000000FFFFFF00FFFFFF00000000000000000000000000000000000000 - 000000000000D6D6D60063636300F7F7F700F7F7F700F7F7F700637BD600315A - C600315AC600315AC600315AC600315AC600315AC6000042C600315AC600637B - D600E7E7E700F7F7F700F7F7F700F7F7F700F7F7F70063636300D6D6D6000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000B1C3ED000042C600B1C3ED000000000000000000000000000042 - C6000042C6000042C6000042C6000042C6000042C6000042C6000042C6000042 - C6000042C6000042C6000000000000000000B1C3ED004576DB000042C6004576 - DB00B1C3ED000000000000000000000000000042C600FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF000042C600E7E7E7000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 00005A5A5A00FFFFFF00FFFFFF00525252000000000000000000000000000000 - 0000000000000000000063636300D6D6D600F7F7F700F7F7F700F7F7F700E7E7 - E700E7E7E700E7E7E700E7E7E700E7E7E700315AC600315AC600637BD600E7E7 - E700E7E7E700F7F7F700F7F7F700F7F7F700D6D6D60063636300000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000042C600FFFFFF00FFFFFF004242 - 420042424200424242004242420042424200424242004242420042424200FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF000042C600E7E7E7000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000084848400FFFFFF00FFFFFF00848484000000000000000000000000000000 - 000000000000000000000000000063636300D6D6D600FFFFFF00FFFFFF00E7E7 - E700E7E7E700E7E7E700E7E7E700E7E7E700315AC600637BD600E7E7E700E7E7 - E700E7E7E700FFFFFF00FFFFFF00D6D6D6006363630000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000042C600FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF000042C600E7E7E7000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000A5A5A500F7F7F700F7F7F700A5A5A5000000000000000000000000000000 - 00000000000000000000000000000000000042424200D6D6D600FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00637BD600FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00D6D6D600424242000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000042C600FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF000042C600E7E7E7000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000C6C6C600F7F7F700F7F7F700BDBDBD000000000000000000000000000000 - 000000000000000000000000000000000000C6C6C60063636300D6D6D600FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00D6D6D60063636300C6C6C6000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000042C600FFFFFF00FFFFFF004242 - 42004242420042424200424242004242420042424200FFFFFF00424242004242 - 4200424242004242420042424200FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF000042C600E7E7E7000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000DEDEDE00FFFFFF00FFFFFF00DEDEDE000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000636363006363 - 6300A5A5A500C6C6C600FFFFFF00FFFFFF00FFFFFF00FFFFFF00C6C6C600A5A5 - A500636363006363630000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000042C600FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF000042C600E7E7E7000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000000000000000000000000000000000000000000000000000D6D6 - D600848484006363630063636300424242004242420063636300636363008484 - 8400D6D6D6000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000042C600FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF000042C600E7E7E7000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000042C600FFFFFF00FFFFFF004242 - 4200424242004242420042424200424242004242420042424200FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF000042C600E7E7E7000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000042C600FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF000042C600E7E7E7000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000042C600FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF000042C600000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000000000000000000000000000315AC6000042C6000042C6000042 - C6000042C6000042C6000042C6000042C6000042C6000042C6000042C6000042 - C6000042C6000042C6000042C6000042C6000042C6000042C6000042C6000042 - C6000042C6000042C600315AC600000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000000000000000000000000000000000000000000000000000D6D6 - D600CECECE00CECECE00CECECE00CECECE00CECECE00CECECE00CECECE00CECE - CE00CECECE00D6D6D60000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 00000000000000000000000000000000000000000000BDBDBD00B5B5B500C6C6 - C600D6D6D600DEDEDE0000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000042 - C6000042C6000042C6000042C6000042C6000042C6000042C6000042C6000042 - C6000042C6000042C60000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000000000000000000000000000637BD600315AC6000042C6000042 - C600315AC600637BD6008494C6008494C600ADADAD00BDBDBD00CECECE00D6D6 - D600DEDEDE000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000002963 - CE00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF000042C60000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000315AC600EFDED600F7F7E700F7F7E700F7F7 - E700D6D6CE00CECEC600A5A59C00637BD600315AC6000042C6000042C600315A - C600637BD6008494C6009C9C9C00ADADAD00BDBDBD00D6D6D600000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000002963 - CE00FFFFFF00FFFFFF00FFFFFF000042C600FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF000042C60084848400ADADAD00D6D6D600EFEFEF00000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 00000000000000000000000000000042C600EFDED600F7F7E700F7F7E700F7F7 - E700F7F7EF00F7F7EF00F7F7EF00F7F7EF00F7F7EF00F7F7EF00F7F7EF00CECE - C600C6C6BD00637BD600315AC6000042C6000042C6008494C600DEDEDE000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000002963 - CE00FFFFFF00FFFFFF000042C600FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF000042C60063636300636363007373730094949400B5B5B500D6D6 - D600000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 00000000000000000000000000000042C600EFDED600F7F7E7007B7B73006B6B - 63007B7B73007B7B73006B6B6B00F7F7EF00F7F7EF00F7F7EF00F7F7F700F7F7 - F700F7FFF700FFFFF700FFFFF700FFFFF700FFFFF700315AC600D6D6D6000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000002963 - CE00FFFFFF00FFFFFF000042C6000042C600FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF000042C6006B6B6B006363630063636300636363006B6B6B007B7B - 7B0094949400C6C6C600EFEFEF00000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 00000000000000000000000000000042C600EFE7D600F7F7E700F7F7E700F7F7 - EF00F7F7EF00F7F7EF00F7F7EF00F7F7EF00F7F7EF00F7F7EF00F7F7F700F7FF - F700FFFFF700FFFFF700FFFFF700FFFFF700FFFFFF000042C600D6D6D6000000 - 000000000000000000000000000000000000D6D6D600CECECE00CECECE00CECE - CE00CECECE00CECECE00CECECE00CECECE00CECECE00CECECE00CECECE00CECE - CE00CECECE00CECECE00CECECE00CECECE00CECECE00CECECE00CECECE00CECE - CE00CECECE00CECECE00CECECE00CECECE00CECECE00CECECE00CECECE00CECE - CE00CECECE00CECECE00CECECE00D6D6D6000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000002963 - CE00FFFFFF00FFFFFF000042C6000042C6000042C600FFFFFF000042C600FFFF - FF00FFFFFF000042C600CECECE00ADADAD00848484006B6B6B00636363006363 - 63006363630063636300737373009C9C9C00C6C6C600EFEFEF00000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 00000000000000000000000000000042C600EFE7D600F7F7E7007B7B73007B7B - 73007B7B73006B6B6B009C9C9400F7F7EF00F7F7EF00F7F7F700F7FFF700F7FF - F700FFFFF700FFFFF700FFFFF700FFFFFF00FFFFFF000042C600D6D6D6000000 - 0000000000000000000000000000000000004242420042424200424242004242 - 4200424242004242420042424200424242004242420042424200424242004242 - 4200424242004242420042424200424242004242420042424200424242004242 - 4200424242004242420042424200424242004242420042424200424242004242 - 420042424200424242004242420042424200D6D6D600CECECE00CECECE00CECE - CE00CECECE00CECECE00CECECE00CECECE00CECECE00CECECE00CECECE00CECE - CE00CECECE00CECECE00CECECE00CECECE00CECECE00CECECE00CECECE00CECE - CE00CECECE00CECECE00CECECE00CECECE00CECECE00CECECE00CECECE00CECE - CE00CECECE00CECECE00CECECE00D6D6D6000000000000000000000000002963 - CE00FFFFFF00FFFFFF00FFFFFF000042C6000042C6000042C6000042C600FFFF - FF00FFFFFF000042C600E7E7E700E7E7E700D6D6D600BDBDBD009C9C9C008484 - 84006B6B6B006363630063636300636363006B6B6B0084848400ADADAD00DEDE - DE00000000000000000000000000000000000000000000000000000000000000 - 00000000000000000000000000000042C600EFE7D600F7F7EF00F7F7EF00F7F7 - EF00F7F7EF00F7F7EF00F7F7EF00F7F7EF00F7F7F700F7FFF700F7FFF700FFFF - F700FFFFF700FFFFF700FFFFFF00FFFFFF00FFFFFF000042C600D6D6D6000000 - 00000000000000000000000000000000000042424200C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600CECECE00CECECE00CECECE00CECECE00CECE - CE00CECECE00CECECE00CECECE00CECECE00CECECE00CECECE00CECECE00CECE - CE00CECECE00D6D6D600D6D6D600424242004242420042424200424242004242 - 4200424242004242420042424200424242004242420042424200424242004242 - 4200424242004242420042424200424242004242420042424200424242004242 - 4200424242004242420042424200424242004242420042424200424242004242 - 4200424242004242420042424200424242000000000000000000000000002963 - CE00FFFFFF00FFFFFF00FFFFFF00FFFFFF000042C6000042C6000042C600FFFF - FF00FFFFFF000042C600E7E7E700E7E7E700E7E7E700E7E7E700DEDEDE00CECE - CE00B5B5B500949494007B7B7B00636363006363630063636300636363008484 - 8400DEDEDE000000000000000000000000000000000000000000000000000000 - 00000000000000000000000000000042C600EFE7DE00F7F7EF00F7F7EF00F7F7 - EF00F7F7EF00F7F7EF00F7F7EF00F7F7F700F7F7F700F7FFF700FFFFF700FFFF - F700FFFFF700FFFFF700FFFFFF00FFFFFF00FFFFFF000042C600D6D6D6000000 - 00000000000000000000000000000000000042424200C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6008484 - 8400424242004242420042424200424242004242420042424200424242008484 - 8400CECECE00CECECE00CECECE00CECECE00CECECE00CECECE00CECECE00D6D6 - D600D6D6D600D6D6D600D6D6D60042424200C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C6000000000000000000000000002963 - CE00FFFFFF00FFFFFF00FFFFFF000042C6000042C6000042C6000042C600FFFF - FF00FFFFFF000042C600F7F7F700EFEFEF00E7E7E700E7E7E700E7E7E700E7E7 - E700E7E7E700DEDEDE00C6C6C6009C9C9C006B6B6B0063636300636363006363 - 6300ADADAD000000000000000000000000000000000000000000000000000000 - 00000000000000000000000000000042C600EFE7DE00F7F7EF00F7F7EF00F7F7 - EF00F7F7EF00F7F7EF00F7F7EF00F7F7F700F7FFF700FFFFF700FFFFF700FFFF - F700FFFFF700FFFFFF00FFFFFF00FFFFFF00FFFFFF000042C600D6D6D6000000 - 00000000000000000000000000000000000042424200C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6004242 - 4200DEDEDE00D6D6D600D6D6D600D6D6D600D6D6D600D6D6D600C6C6C6004242 - 4200CECECE00CECECE00CECECE00CECECE00CECECE00CECECE00D6D6D600D6D6 - D600D6D6D600D6D6D600D6D6D60042424200C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C6000000000000000000000000002963 - CE00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF000042C600FFFFFF00FFFFFF00EFEFEF00E7E7E700E7E7E700E7E7 - E700E7E7E700E7E7E700E7E7E700DEDEDE009494940063636300636363006363 - 6300949494000000000000000000000000000000000000000000000000000000 - 00000000000000000000000000000042C600EFE7DE00E7E7DE00B5BDB500D6D6 - CE00F7F7EF00F7F7EF00F7F7F700F7FFF700F7FFF700FFFFF700FFFFF700FFFF - F700FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000042C600D6D6D6000000 - 00000000000000000000000000000000000042424200C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600CECECE004242 - 4200DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE004242 - 4200CECECE00CECECE00CECECE00CECECE00D6D6D600D6D6D600D6D6D600D6D6 - D600D6D6D600D6D6D600D6D6D600424242008484840084848400848484008484 - 84008484840084848400C6C6C600C6C6C600C6C6C600C6C6C600849CCE001852 - D6004A73D6009CADD600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C6000000000000000000000000002963 - CE002963CE002963CE002963CE002963CE002963CE002963CE002963CE002963 - CE002963CE000042C600FFFFFF00FFFFFF00FFFFFF00F7F7F700E7E7E700E7E7 - E700E7E7E700E7E7E700E7E7E700E7E7E700B5B5B50063636300636363006363 - 6300BDBDBD000000000000000000000000000000000000000000000000000000 - 00000000000000000000000000000042C600EFE7DE00E7E7DE00B5BDB5008C8C - 84007B7B7B006B6B6B007B7B7B007B7B7B006B6B6B007B7B7B009C9C9C00BDBD - BD00BDBDBD00FFFFFF00FFFFFF00FFFFFF00FFFFFF000042C600D6D6D6000000 - 00000000000000000000000000000000000042424200C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600CECECE00CECECE00CECECE008484 - 8400424242004242420042424200424242004242420042424200424242008484 - 8400CECECE00CECECE00D6D6D600D6D6D600D6D6D600D6D6D600D6D6D600D6D6 - D600D6D6D600D6D6D600D6D6D60042424200C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C60084848400C6C6C600C6C6C600C6C6C600C6C6C6001852E700294A - C6004263CE001039D6002152E7006B8CDE00ADBDD600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C6000000000000000000000000000000 - 000000000000BDBDBD008C8C8C0094949400D6D6D600F7F7F700CECECE00F7F7 - F700FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00F7F7F700E7E7 - E700E7E7E700E7E7E700E7E7E700E7E7E700ADADAD0063636300636363007373 - 7300DEDEDE000000000000000000000000000000000000000000000000000000 - 00000000000000000000000000000042C600EFE7DE00F7F7EF00F7F7EF00F7F7 - EF00F7F7F700F7F7F700F7FFF700FFFFF700FFFFF700FFFFF700CECECE00BDBD - BD00ADADAD0084847B00FFFFFF00FFFFFF00FFFFFF000042C600D6D6D6000000 - 00000000000000000000000000000000000042424200C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600CECECE00CECECE00CECECE00CECECE00CECE - CE00CECECE00CECECE00CECECE00CECECE00CECECE00CECECE00CECECE00CECE - CE00CECECE00D6D6D600D6D6D600D6D6D600D6D6D600D6D6D600D6D6D600D6D6 - D600D6D6D600D6D6D600D6D6D600424242008484840084848400CECECE00CECE - CE00CECECE0084848400CECECE00CECECE00CECECE009CB5D6001842D600E7EF - CE00FFF7CE00E7E7CE0094A5CE003152CE001042DE004273E7009CADCE00CECE - CE00CECECE00CECECE0042424200424242004242420042424200CECECE00CECE - CE00CECECE00CECECE00CECECE00424242000000000000000000000000000000 - 0000E7E7E700A5A5A5008C8C8C009C9C9C00EFEFEF00D6D6D6009C9C9C00EFEF - EF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00EFEF - EF00E7E7E700E7E7E700E7E7E700DEDEDE008C8C8C0063636300636363009494 - 9400000000000000000000000000000000000000000000000000000000000000 - 00000000000000000000000000000042C600EFE7DE00F7F7EF007B7B7B006B6B - 6B007B7B7B007B7B7B006B6B6B007B7B7B008C8C8C00BDBDBD00BDBDBD00EFEF - EF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000042C600D6D6D6000000 - 00000000000000000000000000000000000042424200C6C6C600C6C6C600C6C6 - C600C6C6C600CECECE00CECECE00CECECE00CECECE00CECECE00CECECE00CECE - CE00CECECE00CECECE00CECECE00CECECE00CECECE00CECECE00CECECE00D6D6 - D600D6D6D600D6D6D600D6D6D600D6D6D600D6D6D600D6D6D600D6D6D600D6D6 - D600D6D6D600D6D6D600D6D6D60042424200CECECE00CECECE0084848400CECE - CE00CECECE0084848400CECECE00CECECE00CECECE00849CE7007394E700FFFF - FF00FFFFF700FFF7DE00FFEFCE00FFF7CE00BDC6CE000839C600316BDE00CECE - CE00CECECE00CECECE0042424200CECECE00CECECE00CECECE00CECECE004242 - 4200CECECE00CECECE0042424200CECECE000000000000000000000000000000 - 0000CECECE00949494008C8C8C00BDBDBD00F7F7F700B5B5B500ADADAD00F7F7 - F700FFFFFF00E7E7E700ADADAD00ADADAD00FFFFFF00FFFFFF00FFFFFF00F7F7 - F700E7E7E700E7E7E700E7E7E700CECECE0073737300636363006B6B6B00BDBD - BD00000000000000000000000000000000000000000000000000000000000000 - 00000000000000000000000000000042C600EFE7DE00F7F7EF00F7F7EF00F7F7 - F700F7FFF700F7FFF700FFFFF700FFFFF700DEDEDE00BDBDBD00BDBDBD008484 - 7B008484840073737300DEDEDE00FFFFFF00FFFFFF000042C600D6D6D6000000 - 00000000000000000000000000000000000042424200C6C6C600C6C6C600C6C6 - C6000042C6000042C6000042C6000042C6000042C6000042C6000042C6000042 - C6000042C6000042C6000042C6000042C6000042C6000042C6000042C6000042 - C6000042C6000042C6000042C6000042C6000042C6000042C6000042C6000042 - C600D6D6D600D6D6D600D6D6D60042424200CECECE00CECECE00CECECE008484 - 8400CECECE0084848400CECECE00CECECE00CECECE00527BEF00BDCEF700DEDE - F700FFFFFF00FFFFFF00FFF7E700FFEFCE00FFF7CE00294AC6004A7BD600CECE - CE00CECECE00CECECE00CECECE0042424200CECECE00CECECE00CECECE00CECE - CE00CECECE00CECECE00CECECE00CECECE000000000000000000000000000000 - 0000B5B5B5008C8C8C008C8C8C00DEDEDE00EFEFEF0094949400ADADAD00EFEF - EF00CECECE009C9C9C00A5A5A500DEDEDE00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00EFEFEF00E7E7E700E7E7E700A5A5A500636363006363630084848400DEDE - DE00000000000000000000000000000000000000000000000000000000000000 - 00000000000000000000000000000042C600EFE7DE00F7F7EF009C9C94007B7B - 7B006B6B6B007B7B7B007B7B7B00ADADAD00BDBDBD00BDBDBD00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000042C600D6D6D6000000 - 00000000000000000000000000000000000042424200C6C6C600CECECE00CECE - CE00CECECE00CECECE00CECECE00CECECE00CECECE00CECECE00CECECE00CECE - CE00CECECE00CECECE00CECECE00CECECE00D6D6D600D6D6D600D6D6D600D6D6 - D600D6D6D600D6D6D600D6D6D600D6D6D600D6D6D600D6D6D600D6D6D600D6D6 - D600D6D6D600D6D6D600DEDEDE00424242008484840084848400CECECE008484 - 8400CECECE0084848400CECECE00CECECE00B5C6DE004A73E700B5BDEF00BDC6 - EF00ADB5E700C6CEEF00FFFFFF00FFEFCE00D6DECE000031CE009CB5DE00CECE - CE00CECECE00CECECE00CECECE00CECECE0042424200CECECE00CECECE00CECE - CE00CECECE00CECECE00CECECE0042424200000000000000000000000000E7E7 - E7009C9C9C008C8C8C00A5A5A500F7F7F700D6D6D6008C8C8C008C8C8C00ADAD - AD009C9C9C00BDBDBD00EFEFEF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00EFEFEF00E7E7E700D6D6D6008C8C8C006363630063636300A5A5A5000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 00000000000000000000000000000042C600EFE7DE00F7F7F700F7F7F700F7FF - F700FFFFF700FFFFF700FFFFF700BDBDBD00BDBDBD00ADADAD0084847B008484 - 8400737373009C9C9C00FFFFFF00FFFFFF00FFFFFF000042C600D6D6D6000000 - 00000000000000000000000000000000000042424200CECECE00CECECE00CECE - CE00CECECE00CECECE00CECECE00CECECE00CECECE00CECECE00CECECE00CECE - CE00CECECE00CECECE00CECECE00D6D6D600D6D6D600D6D6D600D6D6D600D6D6 - D600D6D6D600D6D6D600D6D6D600D6D6D600D6D6D600D6D6D600D6D6D600D6D6 - D600D6D6D600DEDEDE00DEDEDE004242420084848400D6D6D600D6D6D6008484 - 8400D6D6D60084848400D6D6D600D6D6D6007B94E700849CE700848CDE005273 - D600B5BDEF00FFFFFF00FFFFFF00FFF7DE007B8CC6001852E700CECED600D6D6 - D600D6D6D600D6D6D600D6D6D600D6D6D600D6D6D60042424200D6D6D6004242 - 4200D6D6D600D6D6D600D6D6D600D6D6D600000000000000000000000000CECE - CE008C8C8C008C8C8C00C6C6C600F7F7F700B5B5B500ADADAD00ADADAD008C8C - 8C00DEDEDE00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00F7F7F700E7E7E700BDBDBD00737373006363630073737300C6C6C6000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 00000000000000000000000000000042C600EFE7DE00F7F7F700F7FFF700FFFF - F700FFFFF700FFFFF700FFFFF700FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000042C600D6D6D6000000 - 00000000000000000000000000000000000042424200CECECE00CECECE00CECE - CE000042C6000042C6000042C6000042C6000042C6000042C6000042C6000042 - C6000042C6000042C6000042C6000042C6000042C6000042C6000042C6000042 - C6000042C6000042C6000042C6000042C6000042C6000042C6000042C6000042 - C600DEDEDE00DEDEDE00DEDEDE0042424200D6D6D600D6D6D60084848400D6D6 - D600D6D6D60084848400D6D6D600D6D6D6006B8CEF00B5C6F70094A5E7008CA5 - E700EFF7FF00FFFFFF00FFFFFF00F7FFE700294AC600638CDE00D6D6D600D6D6 - D600D6D6D600D6D6D60042424200D6D6D600D6D6D60042424200D6D6D600D6D6 - D600D6D6D600D6D6D60042424200D6D6D600000000000000000000000000ADAD - AD008C8C8C0094949400D6D6D600EFEFEF009C9C9C00CECECE00DEDEDE008C8C - 8C00EFEFEF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00F7F7F700E7E7E7009C9C9C00636363006363630084848400E7E7E7000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 00000000000000000000000000000042C600EFE7DE00F7FFF700F7FFF700FFFF - F700FFFFF700FFFFF700FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000042C600D6D6D6000000 - 00000000000000000000000000000000000042424200CECECE00CECECE00CECE - CE00CECECE00CECECE00CECECE00CECECE00CECECE00CECECE00CECECE00CECE - CE00D6D6D600D6D6D600D6D6D600D6D6D600D6D6D600D6D6D600D6D6D600D6D6 - D600D6D6D600D6D6D600D6D6D600D6D6D600D6D6D600D6D6D600DEDEDE00DEDE - DE00DEDEDE00DEDEDE00DEDEDE00424242008484840084848400D6D6D600D6D6 - D600D6D6D60084848400D6D6D600D6D6D600B5BDDE0094ADF700D6E7FF00D6DE - F700D6DEF700FFFFFF00FFFFFF00CECEE7000031D600A5BDDE00D6D6D600D6D6 - D600D6D6D600D6D6D600D6D6D6004242420042424200D6D6D600D6D6D600D6D6 - D600D6D6D600D6D6D600D6D6D60042424200000000000000000000000000BDBD - BD008C8C8C0094949400CECECE00E7E7E700BDBDBD00EFEFEF00FFFFFF00ADAD - AD00B5B5B500FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00F7F7F700CECECE00848484006363630063636300ADADAD00000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 00000000000000000000000000000042C600EFE7DE00F7FFF700BDBDB500BDBD - B500CECECE00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000042C600D6D6D6000000 - 00000000000000000000000000000000000042424200CECECE00CECECE00CECE - CE00CECECE00CECECE00CECECE00CECECE00CECECE00CECECE00D6D6D600D6D6 - D600D6D6D600D6D6D600D6D6D600D6D6D600D6D6D600D6D6D600D6D6D600D6D6 - D600D6D6D600D6D6D600D6D6D600D6D6D600DEDEDE00DEDEDE00DEDEDE00DEDE - DE00DEDEDE00DEDEDE00DEDEDE0042424200D6D6D600D6D6D600D6D6D600D6D6 - D600D6D6D60084848400D6D6D600D6D6D600D6D6D600D6D6D600BDC6D600A5B5 - E700B5CEFF00E7EFFF00F7FFFF00637BD600215AE700D6D6D600D6D6D600D6D6 - D600D6D6D600D6D6D600D6D6D600D6D6D600D6D6D600D6D6D600D6D6D600D6D6 - D600D6D6D600D6D6D600D6D6D600D6D6D600000000000000000000000000E7E7 - E700A5A5A5008C8C8C00ADADAD00EFEFEF00F7F7F700FFFFFF00FFFFFF00DEDE - DE009C9C9C00E7E7E700FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00F7F7F700B5B5B5006B6B6B00636363006B6B6B00DEDEDE00000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 00000000000000000000000000000042C600EFE7DE00FFFFF700BDBDB500BDBD - BD009C9C9C007B7B7B007B847B00DEDEDE00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000042C600D6D6D6000000 - 00000000000000000000000000000000000042424200CECECE00CECECE00CECE - CE00CECECE00CECECE00CECECE00CECECE00CECECE00D6D6D600D6D6D600D6D6 - D600D6D6D600D6D6D600D6D6D600D6D6D600D6D6D600D6D6D600D6D6D600D6D6 - D600D6D6D600D6D6D600D6D6D600DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDE - DE00DEDEDE00DEDEDE00DEDEDE00424242008484840084848400848484008484 - 84008484840084848400DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDE - DE00D6D6D600ADBDDE008C9CE7002952DE008CA5DE00DEDEDE00DEDEDE00DEDE - DE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDE - DE00DEDEDE00DEDEDE00DEDEDE00DEDEDE000000000000000000000000000000 - 0000E7E7E700C6C6C600A5A5A500B5B5B500D6D6D600EFEFEF00FFFFFF00FFFF - FF00D6D6D600EFEFEF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00EFEFEF009494940063636300636363008484840000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 00000000000000000000000000000042C600EFE7E700FFFFF700DEDED600FFFF - F700FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000042C600D6D6D6000000 - 00000000000000000000000000000000000042424200E7520000E7520000E752 - 0000E7520000E7520000E7520000E7520000E7520000E7520000E7520000E752 - 0000E7520000E7520000E7520000E7520000E7520000E7520000E7520000E752 - 0000E7520000E7520000E7520000E7520000E7520000E7520000E7520000E752 - 0000E7520000E7520000E752000042424200DEDEDE00DEDEDE00DEDEDE00DEDE - DE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDE - DE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDE - DE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDE - DE00DEDEDE00DEDEDE00DEDEDE00DEDEDE000000000000000000000000000000 - 0000000000000000000000000000D6D6D600BDBDBD00ADADAD00BDBDBD00DEDE - DE00F7F7F700FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00E7E7E700737373006363630063636300B5B5B50000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 00000000000000000000000000000042C600F7E7E700FFFFF7008C8C8C007B7B - 7B007B7B7B0084847B008C8C8C00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000042C600D6D6D6000000 - 00000000000000000000000000000000000042424200E7520000E7520000E752 - 0000E7520000E7520000E7520000E7520000E7520000E7520000E7520000E752 - 0000E7520000E7520000E7520000E7520000E7520000E7520000E7520000E752 - 0000E7520000E7520000E7520000E7520000E7520000E7520000E7520000E752 - 0000E7520000E7520000E752000042424200DEDEDE00DEDEDE00DEDEDE00DEDE - DE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDE - DE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDE - DE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDE - DE00DEDEDE00DEDEDE00DEDEDE00DEDEDE000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000D6D6D600B5B5 - B500ADADAD00C6C6C600DEDEDE00EFEFEF00FFFFFF00FFFFFF00FFFFFF00F7F7 - F700ADADAD00636363006363630073737300E7E7E70000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 00000000000000000000000000000042C600F7E7E700FFFFF700FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000042C600D6D6D6000000 - 000000000000000000000000000000000000C6C6C60042424200424242004242 - 4200424242004242420042424200424242004242420042424200424242004242 - 4200424242004242420042424200424242004242420042424200424242004242 - 4200424242004242420042424200424242004242420042424200424242004242 - 4200424242004242420042424200C6C6C6004242420042424200424242004242 - 4200424242004242420042424200424242004242420042424200424242004242 - 4200424242004242420042424200424242004242420042424200424242004242 - 4200424242004242420042424200424242004242420042424200424242004242 - 4200424242004242420042424200424242000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000E7E7E700CECECE00BDBDBD00BDBDBD00CECECE00DEDEDE00DEDEDE00C6C6 - C6007B7B7B006363630063636300949494000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 00000000000000000000000000000042C600F7E7E7008C8C8C00BDBDBD00FFFF - FF00D6D6D600C6C6C600FFF7F700FFF7F700EFD6D600FFFFFF00FFFFFF00F7EF - EF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000042C600D6D6D6000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000E7E7E700C6C6C600B5B5B500A5A5A5009494 - 94006B6B6B006363630073737300CECECE000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 00000000000000000000000000000042C600E7CECE00636363006B6B6B00EFCE - CE00636363007B7B7B00B5ADB500EFDEDE006363630084848400FFFFFF007373 - 730073737300F7DEDE006363630084848400EFE7EF000042C600D6D6D6000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 00000000000000000000000000000000000000000000EFEFEF00DEDEDE00B5B5 - B5007B7B7B0084848400C6C6C600000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000637BD600637BD600315AC60063636300315A - C600315AC6007B7B7B008494C600315AC600315AC6006B6B6B008494C6008494 - C600737373008494C6008494C600848484009C9C9C00637BD600EFEFEF000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000006B6B6B008C8C8C00848484008C8C - 8C008C8C8C007B7B7B0094949400848484008C8C8C007B7B7B00315AC600637B - D6006B6B6B00315AC600315AC6007B7B7B007B7B7B008494C600000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 00000000000000000000000000000000000000000000CECECE00EFEFEF00F7F7 - F700B5B5B500C6C6C600F7F7F700A5A5A50094949400CECECE00BDBDBD007B7B - 7B009C9C9C00BDBDBD006B6B6B006B6B6B00D6D6D60000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000042 - C600D6D6D600D6D6D60000000000000000000000000000000000000000000042 - C600D6D6D6000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000E7E7E700DEDEDE00DEDEDE00DEDEDE00DEDEDE00E7E7E7000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000042 - C6000042C600CECECE00000000000000000000000000000000000042C6000042 - C600CECECE000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000E7E7E700D6D6 - D600C6C6CE009CADCE006384CE004A73C600527BC6006B8CC60094A5CE00C6CE - CE00D6D6D600DEDEDE0000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 00000000000000000000000000000000000000000000DEDEDE00D6D6D6000042 - C6000042C600C6C6C600D6D6D6000000000000000000000000000042C6000042 - C600C6C6C600CECECE00D6D6D600DEDEDE000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000000000000000000000000000E7E7E700CECECE008C9CCE00295A - C6000042C600104AC600295AC6002963CE00215AC600215AC600104AC6000042 - C6001852C6008494C600CECECE00DEDEDE000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000042C6000042C6000042C6000042 - C6000042C6000042C600CECECE0000000000000000000042C6007394DE000042 - C6000042C6000042C6000042C600000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000D6D6D600CECE - CE00D6D6D6000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000DEDEDE009CADC6001052C600084AC600527B - CE00CED6DE00E7E7E700E7E7E700E7E7E700E7E7E700E7E7E700E7E7E700D6DE - E7006B8CD600084AC600084AC6007B94C600D6D6D60000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000000000000000000000000000000000000042C6007394DE000042 - C6000042C6000042C600C6C6C600D6D6D600000000000042C6007394DE007394 - DE000042C6000042C60000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000000000000000000000000000000000000042C6002963CE00ADB5 - EF00CECECE000000000000000000000000000000000000000000000000000000 - 00000000000000000000DEDEDE005A7BC6000042C6004273CE00DEDEE700E7E7 - E700E7E7E700E7E7E700DEDEDE00D6D6D600E7E7E700E7E7E700E7E7E700E7E7 - E700E7E7E700E7E7E7006B8CD6000042C600396BC600CECED600000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 00000000000000000000000000000000000000000000000000000042C6007394 - DE000042C6000042C6000042C600C6C6C6000042C6007394DE007394DE000042 - C6000042C600E7E7E70000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000042C6000042C6000042C6002963 - CE00D6D6D6000000000000000000000000000000000000000000000000000000 - 000000000000DEDEDE005A7BC600084AC600ADBDDE00E7E7E700E7E7E700E7E7 - E700E7E7E700BDBDBD006B6B6B0063636300A5A5A500E7E7E700E7E7E700E7E7 - E700E7E7E700E7E7E700E7E7E700B5C6DE00104AC600295AC600CED6D6000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000000000000000000000000000D6D6D600CECECE00CECECE00CECE - CE00CECECE00CECECE00CECECE00CECECE00CECECE00CECECE00CECECE00CECE - CE00CECECE00CECECE00CECECE00CECECE00CECECE00CECECE00CECECE000042 - C6007394DE000042C6000042C600ADADAD000042C6007394DE000042C6000042 - C600C6C6C600CECECE00CECECE00D6D6D6000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 00000000000000000000000000000042C6000042C6000042C600ADB5EF002963 - CE00000000000000000000000000000000000000000000000000000000000000 - 0000E7E7E7006B8CC6000842C600BDC6DE00E7E7E700E7E7E700E7E7E700E7E7 - E700DEDEDE006B6B6B00636363006363630063636300C6C6C600BDBDBD00DEDE - DE00E7E7E700E7E7E700E7E7E700E7E7E700CED6DE00104AC600396BC600DEDE - DE0000000000000000000000000000000000D6D6D600CECECE00CECECE00CECE - CE00CECECE00CECECE00CECECE00CECECE00CECECE00CECECE00CECECE00CECE - CE00CECECE00CECECE00CECECE00CECECE00CECECE00CECECE00CECECE00CECE - CE00CECECE00CECECE00CECECE00CECECE00CECECE00CECECE00CECECE00CECE - CE00CECECE00CECECE00CECECE00D6D6D6008484840042424200424242004242 - 4200424242004242420042424200424242004242420042424200424242004242 - 4200424242004242420042424200424242004242420042424200424242004242 - 42000042C6007394DE000042C6000042C6007394DE000042C6000042C6004A4A - 4A00424242004242420042424200848484000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000000000000042C6000042C6000042C600ADB5EF002963CE000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000ADB5CE000042C60094A5D600E7E7E700E7E7E700E7E7E700E7E7E700E7E7 - E700C6C6C6006363630063636300636363006363630094949400ADADAD00B5B5 - B500E7E7E700E7E7E700E7E7E700E7E7E700E7E7E700BDCEDE00084AC600849C - C600000000000000000000000000000000007394DE000042C6000042C6000042 - C6000042C6000042C6000042C6000042C6000042C6000042C6000042C6000042 - C6000042C6000042C6000042C6000042C6000042C6000042C6000042C6000042 - C6000042C6000042C6000042C6000042C6000042C6000042C6000042C6000042 - C6000042C6000042C6000042C6007394DE0042424200FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF000042C6000042C6000042C6000042C6000042C600C6C6C600D6D6 - D600EFEFEF00FFFFFF00FFFFFF00424242000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000042C6000042C6000042C600ADB5EF002963CE00000000000000 - 000000000000000000000000000000000000000000000000000000000000E7E7 - E7002152C6004273CE00E7E7E700E7E7E700E7E7E700E7E7E700E7E7E700E7E7 - E700B5B5B5006363630063636300636363006363630084848400D6D6D600B5B5 - B500E7E7E700E7E7E700E7E7E700E7E7E700E7E7E700E7E7E7007B94CE00084A - C600D6D6DE000000000000000000000000000042C600FFFFFF00FFFFFF00A5A5 - A500FFFFFF00FFFFFF00A5A5A500FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00A5A5A500FFFFFF00FFFFFF00A5A5A500FFFFFF00FFFF - FF00A5A5A500FFFFFF00FFFFFF000042C60042424200FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00F7F7F7000042C6000042C6000042C6000042C6000042C6000042C600C6C6 - C600D6D6D600F7F7F700FFFFFF00424242000000000000000000000000000000 - 00000000000000000000000000000000000000000000D6D6D600CECECE00CECE - CE00CECECE00CECECE00CECECE00CECECE00CECECE00D6D6D600000000000000 - 00000042C6000042C6000042C600ADB5EF002963CE0000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000009CAD - CE000042C600E7E7EF00E7E7E700E7E7E700E7E7E700E7E7E700E7E7E700E7E7 - E700A5A5A500636363006363630063636300636363007B7B7B00E7E7E700E7E7 - E700E7E7E700E7E7E700E7E7E700E7E7E700E7E7E700E7E7E700DEDEDE001852 - C6006384C6000000000000000000000000000042C600FFFFFF00FFFFFF00A5A5 - A500FFFFFF00FFFFFF00A5A5A500FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00A5A5A500FFFFFF00FFFFFF00A5A5A500FFFFFF00FFFF - FF00A5A5A500FFFFFF00FFFFFF000042C60042424200FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF000042C6000042C6000042C6000042C6000042C6000042C6000042C6000042 - C600CECECE00F7F7F700FFFFFF00424242000000000000000000000000000000 - 00000000000000000000E7E7E700CECECE00ADB5EF007394DE00315AC6000042 - C6000042C6000042C600315AC6007394DE00ADB5EF00BDBDBD00C6C6C6000042 - C6000042C6000042C600ADB5EF002963CE00E7E7E70000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000003163 - C6004273CE00FFFFFF00E7E7E700E7E7E700E7E7E700C6C6C6008C8C8C009494 - 94006B6B6B006363630063636300636363006363630063636300DEDEDE00E7E7 - E700E7E7E700E7E7E700E7E7E700E7E7E700E7E7E700E7E7E700E7E7E700638C - CE001852C600E7E7E70000000000000000000042C600A5A5A500A5A5A500A5A5 - A500A5A5A500A5A5A500A5A5A500A5A5A500A5A5A500A5A5A500A5A5A500A5A5 - A500A5A5A500A5A5A500A5A5A500A5A5A500A5A5A500A5A5A500A5A5A500A5A5 - A500A5A5A500A5A5A500A5A5A500A5A5A500A5A5A500A5A5A500A5A5A500A5A5 - A500A5A5A500A5A5A500A5A5A5000042C60042424200FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF000042C6007394DE000042C6000042C6000042C6000042C6000042C6000042 - C600CECECE00F7F7F700FFFFFF0042424200D6D6D600CECECE00CECECE00CECE - CE00CECECE00C6C6C600ADB5EF000042C600315AC600BDC6CE00F7EFCE00F7EF - CE0084848400F7EFCE00F7EFCE00BDC6CE00315AC6000042C600315AC600ADB5 - EF002963CE00ADB5EF002963CE00C6C6C600CECECE00CECECE00CECECE00CECE - CE00CECECE00CECECE00CECECE00D6D6D6000000000000000000E7E7E7000842 - C600A5BDDE00FFFFFF00F7F7F700E7E7E700ADADAD0063636300636363006363 - 630063636300636363006363630063636300636363006363630094949400E7E7 - E700E7E7E700E7E7E700E7E7E700E7E7E700E7E7E700E7E7E700E7E7E700CED6 - D6000042C600ADBDD60000000000000000000042C600FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00A5A5A500FFFFFF00FFFFFF00A5A5A500FFFFFF00FFFF - FF00A5A5A500FFFFFF00FFFFFF00A5A5A500FFFFFF00FFFFFF00A5A5A500FFFF - FF00FFFFFF00A5A5A500FFFFFF00FFFFFF00A5A5A500FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF000042C60042424200FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF000042C6007394DE000042C6000042C6000042C6000042C6000042C6000042 - C600D6D6D600F7F7F700FFFFFF0042424200A5A5A50042424200424242004242 - 420042424200848484000042C600BDC6CE00F7EFCE00F7EFCE00F7EFCE00F7EF - CE0084848400F7EFCE00F7EFCE00F7EFCE00F7EFCE00BDC6CE000042C6002963 - CE00ADB5EF002963CE004A4A4A00424242004242420042424200424242004242 - 4200424242004242420042424200A5A5A5000000000000000000ADBDD6000042 - C600F7F7F700FFFFFF00FFFFFF00C6C6C6006363630063636300636363006363 - 630063636300636363006363630063636300636363006363630063636300CECE - CE00E7E7E700E7E7E700E7E7E700E7E7E700E7E7E700E7E7E700E7E7E700DEDE - DE001852C6007394CE0000000000000000000042C600FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00A5A5A500FFFFFF00FFFFFF00A5A5A500FFFFFF00FFFF - FF00A5A5A500FFFFFF00FFFFFF00A5A5A500FFFFFF00FFFFFF00A5A5A500FFFF - FF00FFFFFF00A5A5A500FFFFFF00FFFFFF00A5A5A500FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF000042C60042424200FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF000042C6007394DE007394DE000042C6000042C6000042C6000042C6000042 - C600EFEFEF00FFFFFF00FFFFFF004242420042424200FFFFFF00FFFFFF009C9C - 9C00ADB5EF000042C60084848400848484008484840084848400848484008484 - 8400848484008484840084848400848484008484840084848400848484000042 - C600315AC600CECECE009C9C9C00FFFFFF00FFFFFF00A5A5A500FFFFFF00FFFF - FF00A5A5A500FFFFFF00FFFFFF00424242000000000000000000849CCE001852 - C600F7F7F700FFFFFF00FFFFFF009C9C9C006363630063636300636363006363 - 630063636300636363006363630063636300636363006363630063636300A5A5 - A500E7E7E700E7E7E700E7E7E700E7E7E700E7E7E700E7E7E700E7E7E700DEDE - DE003163C6004A73C60000000000000000000042C600A5A5A500A5A5A500A5A5 - A500A5A5A500A5A5A500A5A5A500A5A5A500A5A5A500A5A5A500A5A5A500A5A5 - A500A5A5A500A5A5A500A5A5A500A5A5A500A5A5A500A5A5A500A5A5A500A5A5 - A500A5A5A500A5A5A500A5A5A500A5A5A500A5A5A500A5A5A500A5A5A500A5A5 - A500A5A5A500A5A5A500A5A5A5000042C60042424200FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF000042C6007394DE007394DE007394DE000042C6000042C600EFEF - EF00FFFFFF00FFFFFF00FFFFFF004242420042424200FFFFFF00FFFFFF009C9C - 9C000042C600ADB5EF00FFFFFF00F7EFCE00F7EFCE0084848400F7EFCE00F7EF - CE00F7EFCE00F7EFCE00F7EFCE0084848400F7EFCE00F7EFCE00F7EFCE00BDC6 - CE000042C600C6C6C60094949400F7F7F700FFFFFF00A5A5A500FFFFFF00FFFF - FF00A5A5A500FFFFFF00FFFFFF004242420000000000000000006B8CCE001852 - C600F7F7F700FFFFFF00FFFFFF00A5A5A5006363630063636300636363006363 - 63006363630063636300636363006363630073737300CECECE00D6D6D600CECE - CE00E7E7E700E7E7E700E7E7E7008C8C8C00C6C6C600E7E7E700E7E7E700DEDE - DE00426BC6003163C60000000000000000000042C600FFFFFF00FFFFFF00FFFF - FF00FFFFFF00A5A5A500FFFFFF00FFFFFF00A5A5A500FFFFFF00FFFFFF00A5A5 - A500FFFFFF00FFFFFF00A5A5A500FFFFFF00FFFFFF00A5A5A500FFFFFF00FFFF - FF00A5A5A500FFFFFF00FFFFFF00A5A5A500FFFFFF00FFFFFF00A5A5A500FFFF - FF00FFFFFF00FFFFFF00FFFFFF000042C60042424200FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF000042C6000042C6000042C6000042C600F7F7F700FFFF - FF00FFFFFF00FFFFFF00FFFFFF004242420042424200A5A5A500A5A5A5008484 - 8400315AC600FFFFFF00FFFFFF00F7EFCE00F7EFCE0084848400F7EFCE00F7EF - CE00F7EFCE00F7EFCE00F7EFCE0084848400F7EFCE00F7EFCE00F7EFCE00F7EF - CE00315AC600A5A5A500949494009C9C9C00A5A5A500A5A5A500A5A5A500A5A5 - A500A5A5A500A5A5A500A5A5A5004242420000000000000000006B8CCE002963 - C600F7F7F700FFFFFF00FFFFFF00B5B5B5007B7B7B0063636300636363006363 - 630063636300636363006363630063636300ADADAD00848484006B6B6B00ADAD - AD00E7E7E700E7E7E700C6C6C60063636300A5A5A500E7E7E700E7E7E700DEDE - DE004273C6004273C60000000000000000000042C600FFFFFF00FFFFFF00FFFF - FF00FFFFFF00A5A5A500FFFFFF00FFFFFF00A5A5A500FFFFFF00FFFFFF00A5A5 - A500FFFFFF00FFFFFF00A5A5A500FFFFFF00FFFFFF00A5A5A500FFFFFF00FFFF - FF00A5A5A500FFFFFF00FFFFFF00A5A5A500FFFFFF00FFFFFF00A5A5A500FFFF - FF00FFFFFF00FFFFFF00FFFFFF000042C60042424200FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF004242420042424200FFFFFF00FFFFFF007394 - DE00ADB5EF0084848400C6C6C600FFFFFF00F7EFCE0084848400F7EFCE008484 - 8400C6C6C600F7EFCE00F7EFCE0084848400F7EFCE0084848400F7EFCE00F7EF - CE00BDC6CE007394DE00CECECE00F7F7F700A5A5A500FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00424242000000000000000000849CD6001852 - C600EFEFEF00FFFFFF00FFFFFF00DEDEDE008C8C8C0073737300636363006363 - 6300636363006363630063636300636363007373730063636300636363006B6B - 6B00D6D6D600E7E7E7008C8C8C006363630094949400E7E7E700E7E7E700DEDE - DE003163BD004A73CE0000000000000000000042C600A5A5A500A5A5A500A5A5 - A500A5A5A500A5A5A500A5A5A500A5A5A500A5A5A500A5A5A500A5A5A500A5A5 - A500A5A5A500A5A5A500A5A5A500A5A5A500A5A5A500A5A5A500A5A5A500A5A5 - A500A5A5A500A5A5A500A5A5A500A5A5A500A5A5A500A5A5A500A5A5A500A5A5 - A500A5A5A500FFFFFF00FFFFFF000042C60042424200FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF004242420042424200FFFFFF00FFFFFF00315A - C600FFFFFF0084848400C6C6C600FFFFFF00F7EFCE0084848400F7EFCE00C6C6 - C60084848400F7EFCE00F7EFCE0084848400F7EFCE0084848400C6C6C600F7EF - CE00F7EFCE00315AC600CECECE00F7F7F700A5A5A500FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00424242000000000000000000B5C6E7000842 - C600E7E7E700FFFFFF00FFFFFF00FFFFFF00ADADAD008C8C8C006B6B6B00BDBD - BD00D6D6D600BDBDBD00C6C6C600848484006363630063636300A5A5A500ADAD - AD00A5A5A500A5A5A50063636300636363006B6B6B00C6C6C600CECECE009494 - 9400104ABD007394D60000000000000000000042C600FFFFFF00FFFFFF00FFFF - FF00A5A5A500FFFFFF00FFFFFF00A5A5A500FFFFFF00FFFFFF00A5A5A500FFFF - FF00FFFFFF00A5A5A500FFFFFF00FFFFFF00A5A5A500FFFFFF00FFFFFF00A5A5 - A500FFFFFF00FFFFFF00A5A5A500FFFFFF00FFFFFF00A5A5A500FFFFFF00FFFF - FF00A5A5A500FFFFFF00FFFFFF000042C60042424200FFFFFF00FFFFFF00FFFF - FF00848484008484840084848400848484008484840084848400848484008484 - 8400848484008484840084848400848484008484840084848400848484008484 - 8400848484008484840084848400848484008484840084848400848484008484 - 8400FFFFFF00FFFFFF00FFFFFF004242420042424200A5A5A500A5A5A5000042 - C600FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0084848400F7EFCE00F7EF - CE00F7EFCE00F7EFCE00F7EFCE0084848400F7EFCE00F7EFCE00F7EFCE00F7EF - CE00F7EFCE000042C600949494009C9C9C00A5A5A500A5A5A500A5A5A500A5A5 - A500A5A5A500A5A5A500A5A5A500424242000000000000000000EFEFF7000042 - C6009CADCE00F7F7F700FFFFFF00E7E7E700ADADAD00F7F7F700F7F7F700BDBD - BD00DEDEDE00C6C6C600949494006B6B6B006363630063636300636363006363 - 6300636363006363630063636300636363006363630063636300636363006B6B - 6B000042C600CED6EF0000000000000000000042C600FFFFFF00FFFFFF00FFFF - FF00A5A5A500FFFFFF00FFFFFF00A5A5A500FFFFFF00FFFFFF00A5A5A500FFFF - FF00FFFFFF00A5A5A500FFFFFF00FFFFFF00A5A5A500FFFFFF00FFFFFF00A5A5 - A500FFFFFF00FFFFFF00A5A5A500FFFFFF00FFFFFF00A5A5A500FFFFFF00FFFF - FF00A5A5A500FFFFFF00FFFFFF000042C60042424200FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF004242420042424200FFFFFF00FFFFFF000042 - C600848484008484840084848400848484008484840084848400848484008484 - 8400848484008484840084848400848484008484840084848400848484008484 - 8400848484000042C600CECECE009C9C9C00FFFFFF00FFFFFF00A5A5A500FFFF - FF00FFFFFF00FFFFFF00FFFFFF00424242000000000000000000000000003163 - C600426BC600E7E7E700FFFFFF00DEDEDE00A5A5A500ADADAD00CECECE00ADAD - AD008C8C8C0073737300ADADAD00737373006363630063636300636363006363 - 630063636300636363006363630063636300636363006363630063636300425A - 9400104AC6000000000000000000000000000042C600A5A5A500A5A5A500A5A5 - A500A5A5A500A5A5A500A5A5A500A5A5A500A5A5A500A5A5A500A5A5A500A5A5 - A500A5A5A500A5A5A500A5A5A500A5A5A500A5A5A500A5A5A500A5A5A500A5A5 - A500A5A5A500A5A5A500A5A5A500A5A5A500A5A5A500A5A5A500A5A5A500A5A5 - A500A5A5A500A5A5A500A5A5A5000042C60042424200FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF004242420042424200FFFFFF00FFFFFF000042 - C600FFFFFF00FFFFFF0084848400FFFFFF00FFFFFF00FFFFFF00F7EFCE00F7EF - CE0084848400F7EFCE00F7EFCE00F7EFCE00F7EFCE00F7EFCE0084848400F7EF - CE00F7EFCE000042C600CECECE009C9C9C00FFFFFF00FFFFFF00A5A5A500FFFF - FF00FFFFFF00FFFFFF00FFFFFF00424242000000000000000000000000009CB5 - DE000842C600C6C6D600F7F7F700FFFFFF00FFFFFF009C9C9C008C8C8C008C8C - 8C008C8C8C0073737300B5B5B500CECECE007B7B7B0063636300636363006363 - 63006363630063636300636363006363630063636300636363006B6B6B00084A - BD006B8CD6000000000000000000000000000042C600FFFFFF00FFFFFF00A5A5 - A500FFFFFF00FFFFFF00A5A5A500FFFFFF00FFFFFF00A5A5A500FFFFFF00FFFF - FF00A5A5A500FFFFFF00FFFFFF00A5A5A500FFFFFF00FFFFFF00A5A5A500FFFF - FF00FFFFFF00A5A5A500FFFFFF00FFFFFF00A5A5A500FFFFFF00FFFFFF00A5A5 - A500FFFFFF00FFFFFF00FFFFFF000042C60042424200FFFFFF00FFFFFF00FFFF - FF00848484008484840084848400848484008484840084848400848484008484 - 8400848484008484840084848400848484008484840084848400848484008484 - 8400848484008484840084848400848484008484840084848400848484008484 - 8400FFFFFF00FFFFFF00FFFFFF004242420042424200A5A5A500A5A5A500315A - C600FFFFFF00FFFFFF0084848400FFFFFF00FFFFFF00FFFFFF00FFFFFF00F7EF - CE0084848400F7EFCE00F7EFCE00F7EFCE00F7EFCE00F7EFCE0084848400F7EF - CE00BDC6CE00315AC600949494009C9C9C00A5A5A500A5A5A500A5A5A500A5A5 - A500A5A5A500FFFFFF00FFFFFF00424242000000000000000000000000000000 - 0000215AC600426BC600DEDEDE00F7F7F700CECECE00D6D6D600C6C6C600C6C6 - C600B5B5B5008C8C8C00848484006B6B6B006363630063636300636363006363 - 630063636300636363006363630063636300636363006B6B6B00426394000842 - C600000000000000000000000000000000000042C600FFFFFF00FFFFFF00A5A5 - A500FFFFFF00FFFFFF00A5A5A500FFFFFF00FFFFFF00A5A5A500FFFFFF00FFFF - FF00A5A5A500FFFFFF00FFFFFF00A5A5A500FFFFFF00FFFFFF00A5A5A500FFFF - FF00FFFFFF00A5A5A500FFFFFF00FFFFFF00A5A5A500FFFFFF00FFFFFF00A5A5 - A500FFFFFF00FFFFFF00FFFFFF000042C60042424200FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF004242420042424200FFFFFF00FFFFFF007394 - DE00ADB5EF00FFFFFF0084848400FFFFFF0084848400FFFFFF00FFFFFF00FFFF - FF0084848400F7EFCE0084848400C6C6C600F7EFCE00F7EFCE0084848400F7EF - CE00BDC6CE007394DE009C9C9C00FFFFFF00FFFFFF00A5A5A500FFFFFF00FFFF - FF00A5A5A500FFFFFF00FFFFFF00424242000000000000000000000000000000 - 0000C6CEEF000042C6009CADCE00D6D6D600ADADAD00E7E7E700FFFFFF00A5A5 - A500E7E7E7009C9C9C008C8C8C008C8C8C007B7B7B006B6B6B00636363006363 - 6300636363006363630063636300636363006B6B6B00636B7B000042C60084A5 - DE00000000000000000000000000000000007394DE000042C6000042C6000042 - C6000042C6000042C6000042C6000042C6000042C6000042C6000042C6000042 - C6000042C6000042C6000042C6000042C6000042C6000042C6000042C6000042 - C6000042C6000042C6000042C6000042C6000042C6000042C6000042C6000042 - C6000042C6000042C6000042C6007394DE0042424200FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF004242420042424200FFFFFF00FFFFFF00ADB5 - EF00315AC600FFFFFF0084848400FFFFFF0084848400C6C6C600FFFFFF00FFFF - FF0084848400FFFFFF0084848400C6C6C600F7EFCE00F7EFCE0084848400F7EF - CE00315AC600CECECE009C9C9C00FFFFFF00FFFFFF00A5A5A500FFFFFF00FFFF - FF00A5A5A500FFFFFF00FFFFFF00424242000000000000000000000000000000 - 0000000000005A84D6000042C600ADB5CE00C6C6C600EFEFEF00FFFFFF00C6C6 - C600949494008C8C8C00949494008C8C8C008C8C8C008C8C8C00848484007373 - 73006363630063636300636363006B6B6B00636B7B00104ABD003163CE000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 00000000000000000000000000000000000042424200FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF004242420042424200A5A5A500A5A5A500A5A5 - A5000042C600ADB5EF0084848400FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF0084848400FFFFFF00FFFFFF00FFFFFF00FFFFFF00F7EFCE0084848400BDC6 - CE000042C600949494009C9C9C00A5A5A500A5A5A500A5A5A500A5A5A500A5A5 - A500A5A5A500A5A5A500A5A5A500424242000000000000000000000000000000 - 00000000000000000000527BD600084AC6009CADCE00D6D6D600EFEFEF00F7F7 - F700C6C6C600BDBDBD00F7F7F7009C9C9C008C8C8C008C8C8C008C8C8C008C8C - 8C008C8C8C00848484007B7B7B006B738400084AC6002963CE00000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 00000000000000000000000000000000000042424200FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF004242420042424200FFFFFF00FFFFFF00A5A5 - A500ADB5EF000042C60084848400848484008484840084848400848484008484 - 8400848484008484840084848400848484008484840084848400848484000042 - C600ADB5EF009C9C9C00FFFFFF00FFFFFF00A5A5A500FFFFFF00FFFFFF00A5A5 - A500FFFFFF00FFFFFF00FFFFFF00424242000000000000000000000000000000 - 00000000000000000000000000007394DE000042C600527BC600C6C6CE00DEDE - DE00E7E7E700EFEFEF00F7F7F700DEDEDE00949494008C8C8C008C8C8C008C8C - 8C008C8C8C00848484004A6BA5000042C600396BCE0000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000008484840042424200424242004242 - 4200424242004242420042424200424242004242420042424200424242004242 - 4200424242004242420042424200424242004242420042424200424242004242 - 4200424242004242420042424200424242004242420042424200424242004242 - 42004242420042424200424242008484840042424200FFFFFF00FFFFFF00A5A5 - A500FFFFFF00ADB5EF000042C600ADB5EF00FFFFFF0084848400FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF0084848400FFFFFF00ADB5EF000042C600ADB5 - EF00F7F7F7009C9C9C00FFFFFF00FFFFFF00A5A5A500FFFFFF00FFFFFF00A5A5 - A500FFFFFF00FFFFFF00FFFFFF00424242000000000000000000000000000000 - 000000000000000000000000000000000000CED6F700215ACE000042C6005A7B - C600A5ADC600CECECE00CECECE00D6D6D600C6C6C6008C8C8C0084848400737B - 8C004263AD00084AC600084AC6009CB5E7000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000000000000000000000000000A5A5A50042424200424242004242 - 42004242420042424200636363000042C600315AC60084848400FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF0084848400315AC6000042C600636363004242 - 4200424242004242420042424200424242004242420042424200424242004242 - 4200424242004242420042424200A5A5A5000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000ADC6EF002963 - CE000042C6000042C600215AC6002963C6002963C6001852C6000842C6000042 - C6001852C6006B94DE0000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000000000000000000000000000ADB5EF007394DE00315AC6000042 - C6000042C6000042C600315AC6007394DE00ADB5EF0000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000B5CEEF006B94DE00638CDE00638CDE00739CDE00ADBDEF000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000000000000000000000000000000000000000000000000000DEDE - DE00DEDEDE000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000DEDEDE00CECE - CE00CECECE00DEDEDE0000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000000000000000000000000000D6D6D600CECECE00CECECE00CECE - CE00CECECE00CECECE00CECECE00CECECE00CECECE00CECECE00CECECE00CECE - CE00CECECE00CECECE00CECECE00CECECE00CECECE00CECECE00CECECE00D6D6 - D600000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000000000000000000000000000FFFFFF00FFFFFF0000000000C6C6 - C600CECECE00DEDEDE0000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000004242420042424200424242004242 - 4200424242004242420042424200424242004242420042424200424242004242 - 4200424242004242420042424200424242004242420042424200424242004242 - 4200000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000000000000000000000000000FFFFFF00FFFFFF0000000000C6C6 - C600D6D6D6000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 00000000000000000000D6D6D600CECECE0042424200DEDEDE00DEDEDE00DEDE - DE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDE - DE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE004242 - 4200000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000FFFFFF00FFFFFF0000000000C6C6C600CECE - CE00DEDEDE000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 00000000000000000000D6D6D600CECECE00CECECE00D6D6D600000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000000000000000000000000000000000000000000000000000D6D6 - D600CECECE00CECECE00CECECE00CECECE00CECECE00CECECE00CECECE00CECE - CE00D6D6D6000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000042424200424242004242420042424200424242004242 - 4200424242004242420042424200424242004242420042424200424242004242 - 4200424242004242420042424200424242004242420042424200DEDEDE004242 - 4200000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000000000000000000000000000000000000000000000000000D6D6 - D600D6D6D600DEDEDE0000000000FFFFFF00FFFFFF0000000000BDBDBD00CECE - CE00DEDEDE000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000000000002963CE004273D6004273D6002963CE00000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000D6D6D600D6D6 - D600848484006363630063636300424242004242420063636300636363008484 - 8400D6D6D600D6D6D60000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000D6D6D600CECECE0042424200DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDE - DE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDE - DE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE0042424200DEDEDE004242 - 420000000000000000000000000000000000D6D6D600CECECE00CECECE00CECE - CE00CECECE00CECECE00CECECE00CECECE00CECECE00CECECE00CECECE00CECE - CE00CECECE00CECECE00CECECE00CECECE000000000000000000C6C6C600B5B5 - B500ADADAD0000000000FFFFFF00FFFFFF0000000000ADADAD00ADADAD00B5B5 - B500C6C6C600CECECE00CECECE00D6D6D6000000000000000000000000000000 - 000000000000000000000000000000000000D6D6D600CECECE00D6D6D6000000 - 000000000000D6D6D6002963CE00CECECE00CECECE002963CE00D6D6D6000000 - 000000000000D6D6D600CECECE00D6D6D6000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 00000000000000000000000000000000000000000000D6D6D600636363006363 - 6300A5A5A500C6C6C600D6D6D600D6D6D600D6D6D600D6D6D600C6C6C600A5A5 - A5006363630063636300D6D6D600000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000315AC6000042C6000042C6000042C6000042C6000042C6000042C6000042 - C6000042C6000042C6000042C6000042C6000042C6000042C6000042C6000042 - C6000042C6000042C6000042C600315AC600DEDEDE0042424200E7E7E7004242 - 4200000000000000000000000000000000004242420042424200424242004242 - 4200424242004242420042424200424242004242420042424200424242004242 - 42004242420042424200424242004242420000000000FFFFFF00000000005252 - 52005A5A5A0000000000FFFFFF00FFFFFF00000000005A5A5A005A5A5A004A4A - 4A00424242004242420042424200424242000000000000000000000000000000 - 0000000000000000000000000000D6D6D600A5BDF7002963CE00A5BDF700CECE - CE00CECECE00A5BDF7004273D600CECECE00CECECE004273D600A5BDF700CECE - CE00CECECE00A5BDF7002963CE00A5BDF700D6D6D60000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000D6D6D600CECECE0063636300C6C6C600D6D6 - D600D6D6D600D6D6D600D6D6D600D6D6D600D6D6D600D6D6D600D6D6D600D6D6 - D600D6D6D600C6C6C60063636300CECECE00D6D6D60000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 00000042C600DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDE - DE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDE - DE00DEDEDE00DEDEDE00DEDEDE000042C600DEDEDE0042424200E7E7E7004242 - 42000000000000000000000000000000000042424200C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C60000000000FFFFFF00FFFFFF000000 - 000000000000FFFFFF00FFFFFF0000000000A5A5A500A5A5A500A5A5A500ADAD - AD00B5B5B500B5B5B500BDBDBD00424242000000000000000000000000000000 - 0000000000000000000000000000A5BDF7000042C600CECECE000042C600A5BD - F7002963CE000042C600CECECE00CECECE00CECECE00CECECE000042C6002963 - CE00A5BDF7000042C600CECECE000042C600A5BDF70000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000C6C6C60042424200C6C6C600DEDEDE00DEDE - DE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDE - DE00DEDEDE00DEDEDE00C6C6C60042424200C6C6C60000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 00000042C600DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDE - DE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDE - DE00DEDEDE00DEDEDE00DEDEDE000042C600E7E7E70042424200E7E7E7004242 - 42000000000000000000000000000000000042424200C6C6C600FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000000000FFFFFF00FFFFFF00FFFF - FF0000000000FFFFFF00FFFFFF0000000000BDBDBD00C6C6C600C6C6C600CECE - CE00D6D6D600DEDEDE00B5B5B500424242000000000000000000000000000000 - 00000000000000000000000000002963CE00CECECE00CECECE00CECECE000042 - C600CECECE00CECECE00CECECE00CECECE00CECECE00CECECE00CECECE00CECE - CE000042C600CECECE00CECECE00CECECE002963CE0000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 00000000000000000000D6D6D60063636300C6C6C600DEDEDE00DEDEDE00DEDE - DE00DEDEDE00315AC6000042C6000042C6000042C6000042C600315AC600DEDE - DE00DEDEDE00DEDEDE00DEDEDE00C6C6C60063636300D6D6D600000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 00000042C600DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDE - DE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDE - DE00DEDEDE00DEDEDE00DEDEDE000042C600E7E7E70042424200E7E7E7004242 - 42000000000000000000000000000000000042424200C6C6C600FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000000000FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00000000000000000000000000000000000000 - 0000CECECE00DEDEDE00B5B5B500424242000000000000000000000000000000 - 0000000000000000000000000000A5BDF7000042C600CECECE00CECECE00CECE - CE00CECECE00CECECE00CECECE00CECECE00CECECE00CECECE00CECECE00CECE - CE00CECECE00CECECE00CECECE000042C600A5BDF70000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000D6D6D60063636300C6C6C600DEDEDE00DEDEDE00DEDEDE00DEDE - DE00DEDEDE00DEDEDE00315AC6000042C6000042C600315AC600DEDEDE00DEDE - DE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00C6C6C60063636300D6D6D6000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 00000042C600E7E7E700E7E7E700E7E7E700E7E7E700E7E7E700E7E7E700E7E7 - E700E7E7E700E7E7E700E7E7E700E7E7E700E7E7E700E7E7E700E7E7E700E7E7 - E700E7E7E700E7E7E700E7E7E7000042C600E7E7E70042424200E7E7E7004242 - 42000000000000000000000000000000000042424200C6C6C600FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000000000FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000000000CECE - CE00D6D6D600EFEFEF00BDBDBD00424242000000000000000000000000000000 - 000000000000000000000000000000000000A5BDF7000042C600CECECE00CECE - CE00CECECE00CECECE00CECECE00CECECE00CECECE00CECECE00CECECE00CECE - CE00CECECE00CECECE000042C600A5BDF7000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000D6D6D60063636300DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDE - DE00DEDEDE00DEDEDE00315AC6000042C6000042C600315AC600DEDEDE00DEDE - DE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE0063636300D6D6D6000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 00000042C600E7E7E700E7E7E700E7E7E700E7E7E700E7E7E700E7E7E700E7E7 - E700E7E7E700E7E7E700E7E7E700E7E7E700E7E7E700E7E7E700E7E7E700E7E7 - E700E7E7E700E7E7E700E7E7E7000042C600E7E7E70042424200EFEFEF004242 - 42000000000000000000000000000000000042424200C6C6C600FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000000000FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000000000CECECE00D6D6 - D600EFEFEF00F7F7F700BDBDBD00424242000000000000000000000000000000 - 0000000000000000000000000000D6D6D6002963CE00CECECE00CECECE00CECE - CE00CECECE00CECECE000042C6000042C6000042C6000042C600CECECE00CECE - CE00CECECE00CECECE00CECECE002963CE00D6D6D60000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 00000000000084848400A5A5A500E7E7E700E7E7E700E7E7E700E7E7E700E7E7 - E700E7E7E700E7E7E700315AC6000042C6000042C600315AC600E7E7E700E7E7 - E700E7E7E700E7E7E700E7E7E700E7E7E700E7E7E700A5A5A500848484000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 00000042C600E7E7E700E7E7E700E7E7E700E7E7E700E7E7E700E7E7E700E7E7 - E700E7E7E700E7E7E700E7E7E700E7E7E700E7E7E700E7E7E700E7E7E700E7E7 - E700E7E7E700E7E7E700E7E7E7000042C600E7E7E70042424200EFEFEF004242 - 42000000000000000000000000000000000042424200C6C6C600FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000000000FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000000000CECECE00D6D6D600EFEF - EF00F7F7F700FFFFFF00C6C6C600424242000000000000000000000000000000 - 000000000000D6D6D600CECECE00A5BDF7000042C600CECECE00CECECE00CECE - CE00CECECE000042C600000000000000000000000000000000000042C600CECE - CE00CECECE00CECECE00CECECE000042C600A5BDF700CECECE00D6D6D6000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 00000000000063636300C6C6C600E7E7E700E7E7E700E7E7E700E7E7E700E7E7 - E700E7E7E700E7E7E700315AC6000042C6000042C600315AC600E7E7E700E7E7 - E700E7E7E700E7E7E700E7E7E700E7E7E700E7E7E700C6C6C600636363000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 00000042C600E7E7E700E7E7E700E7E7E700E7E7E700E7E7E700E7E7E700E7E7 - E700E7E7E700E7E7E700E7E7E700E7E7E700E7E7E700E7E7E700E7E7E700E7E7 - E700E7E7E700E7E7E700E7E7E7000042C600EFEFEF0042424200EFEFEF004242 - 42000000000000000000000000000000000042424200C6C6C600FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000000000FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF0000000000CECECE00D6D6D600EFEFEF00F7F7 - F700FFFFFF00FFFFFF00C6C6C600424242000000000000000000000000000000 - 0000000000002963CE004273D6004273D600CECECE00CECECE00CECECE00CECE - CE000042C6000000000000000000000000000000000000000000000000000042 - C600CECECE00CECECE00CECECE00CECECE004273D6004273D6002963CE000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 00000000000063636300E7E7E700E7E7E700E7E7E700E7E7E700E7E7E700E7E7 - E700E7E7E700E7E7E700315AC6000042C6000042C600315AC600E7E7E700E7E7 - E700E7E7E700E7E7E700E7E7E700E7E7E700E7E7E700E7E7E700636363000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 00000042C600E7E7E700E7E7E700E7E7E700E7E7E700E7E7E700E7E7E700E7E7 - E700E7E7E700E7E7E700E7E7E700E7E7E700E7E7E700E7E7E700E7E7E700E7E7 - E700E7E7E700E7E7E700E7E7E7000042C600EFEFEF0042424200EFEFEF004242 - 42000000000000000000000000000000000042424200C6C6C600FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000000000FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF0000000000CECECE00D6D6D600EFEFEF00F7F7F700FFFF - FF00FFFFFF00FFFFFF00C6C6C600424242000000000000000000000000000000 - 0000000000004273D600CECECE00CECECE00CECECE00CECECE00CECECE00CECE - CE000042C6000000000000000000000000000000000000000000000000000042 - C600CECECE00CECECE00CECECE00CECECE00CECECE00CECECE004273D6000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 00000000000042424200EFEFEF00EFEFEF00EFEFEF00EFEFEF00EFEFEF00EFEF - EF00EFEFEF00EFEFEF00315AC6000042C6000042C600315AC600EFEFEF00EFEF - EF00EFEFEF00EFEFEF00EFEFEF00EFEFEF00EFEFEF00EFEFEF00424242000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 00000042C600EFEFEF00EFEFEF00EFEFEF00EFEFEF00EFEFEF00EFEFEF00EFEF - EF00EFEFEF00EFEFEF00EFEFEF00EFEFEF00EFEFEF00EFEFEF00EFEFEF00EFEF - EF00EFEFEF00EFEFEF00EFEFEF000042C600EFEFEF0042424200EFEFEF004242 - 42000000000000000000000000000000000042424200C6C6C600FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000000000FFFFFF00FFFFFF00FFFF - FF00FFFFFF0000000000CECECE00D6D6D600EFEFEF00F7F7F700FFFFFF00FFFF - FF00FFFFFF00FFFFFF00C6C6C600424242000000000000000000000000000000 - 0000000000004273D600CECECE00CECECE00CECECE00CECECE00CECECE00CECE - CE000042C6000000000000000000000000000000000000000000000000000042 - C600CECECE00CECECE00CECECE00CECECE00CECECE00CECECE004273D6000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 00000000000042424200EFEFEF00EFEFEF00EFEFEF00EFEFEF00EFEFEF00EFEF - EF00EFEFEF00637BD6000042C6000042C6000042C600315AC600EFEFEF00EFEF - EF00EFEFEF00EFEFEF00EFEFEF00EFEFEF00EFEFEF00EFEFEF00424242000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 00000042C600EFEFEF00EFEFEF00EFEFEF00EFEFEF00EFEFEF00EFEFEF00EFEF - EF00EFEFEF00EFEFEF00EFEFEF00EFEFEF00EFEFEF00EFEFEF00EFEFEF00EFEF - EF00EFEFEF00EFEFEF00EFEFEF000042C600EFEFEF0042424200EFEFEF004242 - 42000000000000000000000000000000000042424200C6C6C600FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000000000FFFFFF00FFFFFF00FFFF - FF0000000000CECECE00D6D6D600EFEFEF00F7F7F700FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00C6C6C600424242000000000000000000000000000000 - 0000000000004273D6004273D6004273D600CECECE00CECECE00CECECE00CECE - CE000042C600D6D6D60000000000000000000000000000000000D6D6D6000042 - C600CECECE00CECECE00CECECE00CECECE004273D6004273D6004273D6000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 00000000000063636300EFEFEF00EFEFEF00EFEFEF00EFEFEF00EFEFEF00EFEF - EF00EFEFEF00EFEFEF00EFEFEF00EFEFEF00EFEFEF00EFEFEF00EFEFEF00EFEF - EF00EFEFEF00EFEFEF00EFEFEF00EFEFEF00EFEFEF00EFEFEF00636363000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 00000042C600EFEFEF00EFEFEF00EFEFEF00EFEFEF00EFEFEF00EFEFEF00EFEF - EF00EFEFEF00EFEFEF00EFEFEF00EFEFEF00EFEFEF00EFEFEF00EFEFEF00EFEF - EF00EFEFEF00EFEFEF00EFEFEF000042C600EFEFEF0042424200F7F7F7004242 - 42000000000000000000000000000000000042424200C6C6C600FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000000000FFFFFF00FFFFFF000000 - 0000CECECE00D6D6D600EFEFEF00F7F7F700FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00C6C6C600424242000000000000000000000000000000 - 0000000000000000000000000000A5BDF7000042C600CECECE00CECECE00CECE - CE00CECECE000042C600CECECE00CECECE00CECECE00CECECE000042C600CECE - CE00CECECE00CECECE00CECECE000042C600A5BDF70000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 00000000000063636300C6C6C600EFEFEF00EFEFEF00EFEFEF00EFEFEF00EFEF - EF00EFEFEF00EFEFEF00EFEFEF00EFEFEF00EFEFEF00EFEFEF00EFEFEF00EFEF - EF00EFEFEF00EFEFEF00EFEFEF00EFEFEF00EFEFEF00C6C6C600636363000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 00000042C600EFEFEF00EFEFEF00EFEFEF00EFEFEF00EFEFEF00EFEFEF00EFEF - EF00EFEFEF00EFEFEF00EFEFEF00EFEFEF00EFEFEF00EFEFEF00EFEFEF00EFEF - EF00EFEFEF00EFEFEF00EFEFEF000042C600EFEFEF0042424200F7F7F7004242 - 42000000000000000000000000000000000042424200C6C6C600FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000000000FFFFFF0000000000DEDE - DE00DEDEDE00EFEFEF00F7F7F700FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00C6C6C600424242000000000000000000000000000000 - 0000000000000000000000000000000000002963CE00CECECE00CECECE00CECE - CE00CECECE00CECECE000042C6000042C6000042C6000042C600CECECE00CECE - CE00CECECE00CECECE00CECECE002963CE000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 00000000000084848400A5A5A500F7F7F700F7F7F700F7F7F700F7F7F700F7F7 - F700F7F7F700F7F7F700ADB5EF00315AC600315AC600ADB5EF00F7F7F700F7F7 - F700F7F7F700F7F7F700F7F7F700F7F7F700F7F7F700A5A5A500848484000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 00000042C600EFEFEF00EFEFEF00EFEFEF00EFEFEF00EFEFEF00EFEFEF00EFEF - EF00EFEFEF00EFEFEF00EFEFEF00EFEFEF00EFEFEF00EFEFEF00EFEFEF00EFEF - EF00EFEFEF00EFEFEF00EFEFEF000042C600F7F7F70042424200F7F7F7004242 - 42000000000000000000000000000000000042424200C6C6C600FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000000000000000F7F7F700EFEF - EF00EFEFEF00F7F7F700FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00C6C6C600424242000000000000000000000000000000 - 0000000000000000000000000000D6D6D600A5BDF7000042C600CECECE00CECE - CE00CECECE00CECECE00CECECE00CECECE00CECECE00CECECE00CECECE00CECE - CE00CECECE00CECECE000042C600A5BDF700D6D6D60000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000D6D6D60063636300F7F7F700F7F7F700F7F7F700F7F7F700F7F7 - F700F7F7F700F7F7F7000042C6000042C6000042C6000042C600F7F7F700F7F7 - F700F7F7F700F7F7F700F7F7F700F7F7F700F7F7F70063636300D6D6D6000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 00000042C600EFEFEF00EFEFEF00EFEFEF00EFEFEF00EFEFEF00EFEFEF00EFEF - EF00EFEFEF00EFEFEF00EFEFEF00EFEFEF00EFEFEF00EFEFEF00EFEFEF00EFEF - EF00EFEFEF00EFEFEF00EFEFEF000042C600F7F7F70042424200F7F7F7004242 - 42000000000000000000000000000000000042424200C6C6C600FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000000000FFFFFF00FFFFFF00F7F7 - F700FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00C6C6C600424242000000000000000000000000000000 - 0000000000000000000000000000A5BDF7000042C600CECECE00CECECE00CECE - CE00CECECE00CECECE00CECECE00CECECE00CECECE00CECECE00CECECE00CECE - CE00CECECE00CECECE00CECECE000042C600A5BDF70000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000063636300D6D6D600F7F7F700F7F7F700F7F7F700F7F7 - F700F7F7F700F7F7F7000042C6000042C6000042C6000042C600F7F7F700F7F7 - F700F7F7F700F7F7F700F7F7F700F7F7F700D6D6D60063636300000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 00000042C600F7F7F700F7F7F700F7F7F700F7F7F700F7F7F700F7F7F700F7F7 - F700F7F7F700F7F7F700F7F7F700F7F7F700F7F7F700F7F7F700F7F7F700F7F7 - F700F7F7F700F7F7F700F7F7F7000042C600F7F7F70042424200F7F7F7004242 - 42000000000000000000000000000000000042424200C6C6C600FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00C6C6C600424242000000000000000000000000000000 - 00000000000000000000000000002963CE00CECECE00CECECE00CECECE000042 - C600CECECE00CECECE00CECECE00CECECE00CECECE00CECECE00CECECE00CECE - CE000042C600CECECE00CECECE00CECECE002963CE0000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000000000000000000063636300D6D6D600FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00ADB5EF00315AC600315AC600ADB5EF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00D6D6D6006363630000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 00000042C600F7F7F700F7F7F700F7F7F700F7F7F700F7F7F700F7F7F700F7F7 - F700F7F7F700F7F7F700F7F7F700F7F7F700F7F7F700F7F7F700F7F7F700F7F7 - F700F7F7F700F7F7F700F7F7F7000042C600F7F7F70042424200FFFFFF004242 - 42000000000000000000000000000000000042424200C6C6C600FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00C6C6C600424242000000000000000000000000000000 - 0000000000000000000000000000A5BDF7000042C600CECECE000042C600A5BD - F7002963CE000042C600CECECE00CECECE00CECECE00CECECE000042C6002963 - CE00A5BDF7000042C600CECECE000042C600A5BDF70000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 00000000000000000000000000000000000042424200D6D6D600FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00D6D6D600424242000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 00000042C600F7F7F700F7F7F700F7F7F700F7F7F700F7F7F700F7F7F700F7F7 - F700F7F7F700F7F7F700F7F7F700F7F7F700F7F7F700F7F7F700F7F7F700F7F7 - F700F7F7F700F7F7F700F7F7F7000042C600F7F7F70042424200424242000000 - 00000000000000000000000000000000000042424200C6C6C600FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00C6C6C600424242000000000000000000000000000000 - 000000000000000000000000000000000000A5BDF7002963CE00A5BDF7000000 - 000000000000A5BDF7004273D600CECECE00CECECE004273D600A5BDF7000000 - 000000000000A5BDF7002963CE00A5BDF7000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000000000000000000000000000C6C6C60063636300D6D6D600FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00D6D6D60063636300C6C6C6000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 00000042C600F7F7F700F7F7F700F7F7F700F7F7F700F7F7F700F7F7F700F7F7 - F700F7F7F700F7F7F700F7F7F700F7F7F700F7F7F700F7F7F700F7F7F700F7F7 - F700F7F7F700F7F7F700F7F7F7000042C600FFFFFF0042424200000000000000 - 00000000000000000000000000000000000042424200C6C6C600FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00C6C6C600424242000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000000000004273D600CECECE00CECECE004273D600000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000636363006363 - 6300A5A5A500C6C6C600FFFFFF00FFFFFF00FFFFFF00FFFFFF00C6C6C600A5A5 - A500636363006363630000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 00000042C600F7F7F700F7F7F700F7F7F700F7F7F700F7F7F700F7F7F700F7F7 - F700F7F7F700F7F7F700F7F7F700F7F7F700F7F7F700F7F7F700F7F7F700F7F7 - F700F7F7F700F7F7F700F7F7F7000042C6004242420000000000000000000000 - 00000000000000000000000000000000000042424200C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600424242000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000000000004273D6004273D6004273D6004273D600000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000000000000000000000000000000000000000000000000000D6D6 - D600848484006363630063636300424242004242420063636300636363008484 - 8400D6D6D6000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 00000042C600FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00315AC6000042 - C6000042C6000042C6000042C6000042C6000000000000000000000000000000 - 00000000000000000000000000000000000042424200E7520000E7520000E752 - 0000E7520000E7520000E7520000E7520000E7520000E7520000E7520000E752 - 0000E7520000E7520000E7520000E7520000E7520000E7520000E7520000E752 - 0000E7520000E7520000E7520000E7520000E7520000E7520000E7520000E752 - 0000E7520000E7520000E7520000424242000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 00000042C600FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000042C600FFFF - FF00FFFFFF00FFFFFF000042C600000000000000000000000000000000000000 - 00000000000000000000000000000000000042424200E7520000E7520000E752 - 0000E7520000E7520000E7520000E7520000E7520000E7520000E7520000E752 - 0000E7520000E7520000E7520000E7520000E7520000E7520000E7520000E752 - 0000E7520000E7520000E7520000E7520000E7520000E7520000E7520000E752 - 0000E7520000E7520000E7520000424242000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 00000042C600FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000042C600FFFF - FF00FFFFFF000042C60000000000000000000000000000000000000000000000 - 000000000000000000000000000000000000C6C6C60042424200424242004242 - 4200424242004242420042424200424242004242420042424200424242004242 - 4200424242004242420042424200424242004242420042424200424242004242 - 4200424242004242420042424200424242004242420042424200424242004242 - 4200424242004242420042424200C6C6C6000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 00000042C600FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000042C600FFFF - FF000042C6000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 00000042C600FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000042C6000042 - C600000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000315AC6000042C6000042C6000042C6000042C6000042C6000042C6000042 - C6000042C6000042C6000042C6000042C6000042C6000042C6000042C6000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000000000000000000000000000424D3E000000000000003E000000 - 2800000080000000A00000000100010000000000000A00000000000000000000 - 000000000000000000000000FFFFFF00FF8000FFFFFFFFFF0000000000000000 - FF8000FFFFFFFFFF0000000000000000FF8000FFFFFFFFFF0000000000000000 - FF8000FF000000000000000000000000FF8000FF000000000000000000000000 - FF8000FF000000000000000000000000FF8000FF000000000000000000000000 - FF8000FF000000000000000000000000FF8000FF000000000000000000000000 - FF8000FF000000000000000000000000FF8000FF000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 00000000000000000000000000000000FFFFFFFF000000000000000000000000 - FFFFFFFF000000000000000000000000FFFFFFFFFFFFFFFF0000000000000000 - FFFFFFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - 00000000FFFFFFFFFFFFFFFFFFFFFFFF00000000FFFFFFFFFFFFFFFFFFFFFFFF - 00000000FFFFFFFFFFFFFFFFFFFFFFFF00000000FFFFFFFFFFE007FFFFFFFFFF - 00000000F807FFFFFFC003FFFFFFFFFF00000000F003FFFFFF8001FFFFFFFFFF - 000000000001FFFFFE00007FFFFFFFFF0000000000001FFFFE00007FFFFFFFFF - 000000000000003FFC00003FFFFFFFFF000000000000000FF800001FFFFFFFFF - 0000000000000007F800001FEFEFBFBD0000000000000003F800001FCFCF3E19 - 00000000FC000001F800001FC79C36390000000080000000F800001FC0102639 - 000000FF00000000F800001FE0300E79000000FF00003E00F800001FE3330E39 - 000000FF0003FF80F800001FF2743F39000000FFFC07FFC0F800001FF0703E3B - 000000FFFC0FFFE0F800001FFAF00043000000FFFFFFFFE0F800001FF8E00307 - 000000FFFFFFFFF0FC00003FFFFFFFFF000000FFFFFFFFF0FE00007FFFFFFFFF - 000000FFFFFFFFF0FF0000FFFFFFFFFF000000FFFFFFFFF0FF0000FFFFFFFFFF - 000000FFFFFFFFF0FFC003FFFFFFFFFF000000FFFFFFFFFFFFE007FFFFFFFFFF - 000000FFFFFFFFFFFFFFFFFFFFFFFFFF000000FFFFFFFFFFFFFFFFFFFFFFFFFF - 000000FFFFFFFFFFFFFFFFFFFFFFFFFF000001FFFFFFFFFFFFFFFFFFFFFFFFFF - 000001FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - E003FFFFFF83FFFFFFFFFFFFFFFFFFFFE003FFFFFF0007FFFFFFFFFFFFFFFFFF - E003FFFFFE00003FFFFFFFFFFFFFFFFFE0003FFFFE00001FFFFFFFFFFFFFFFFF - E0000FFFFE00001FFFFFFFFFFFFFFFFFE00001FFFE00001F00000000FFFFFFFF - E000003FFE00001F0000000000000000E000000FFE00001F0000000000000000 - E0000007FE00001F0000000000000000E0000007FE00001F0000000000000000 - E0000007FE00001F0000000000000000E0000007FE00001F0000000000000000 - F8000007FE00001F0000000000000000F000000FFE00001F0000000000000000 - F000000FFE00001F0000000000000000F000000FFE00001F0000000000000000 - E000001FFE00001F0000000000000000E000001FFE00001F0000000000000000 - E000001FFE00001F0000000000000000E000003FFE00001F0000000000000000 - E000003FFE00001F0000000000000000F000007FFE00001F0000000000000000 - FE00007FFE00001F0000000000000000FFC0007FFE00001F0000000000000000 - FFF000FFFE00001FFFFFFFFFFFFFFFFFFFFE00FFFE00001FFFFFFFFFFFFFFFFF - FFFF81FFFE00001FFFFFFFFFFFFFFFFFFFFFFFFFFF00003FFFFFFFFFFFFFFFFF - FFFFFFFFFF80007FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE3E7FFFFFFFF - FFF81FFFFFFFFFFFFFFFE3C7FFFFFFFFFFC003FFFFFFFFFFFFFF81C0FFFFFFFF - FF0000FFFFFFFFFFFFFF0181FFFFFFC7FE00007FFFFFFFFFFFFF8083FFFFFF87 - FC00003FFFFFFFFFFFFFC003FFFFFF07F800001FFFFFFFFF00000000FFFFFE0F - F000000F0000000000000000FFFFFC1FF000000F0000000000000000FFFFF83F - E00000070000000000000000FF80307FE00000070000000000000000FC00007F - E0000003000000000000000000000000C0000003000000000000000000000000 - C0000003000000000000000000000000C0000003000000000000000000000000 - C0000003000000000000000000000000C0000003000000000000000000000000 - C0000003000000000000000000000000C0000003000000000000000000000000 - C0000003000000000000000000000000E0000007000000000000000000000000 - E0000007000000000000000000000000F000000F000000000000000000000000 - F000000F000000000000000000000000F800001FFFFFFFFF0000000000000000 - FC00003FFFFFFFFF0000000000000000FE00007FFFFFFFFF0000000000000000 - FF0000FFFFFFFFFFFFFFFFFF00000000FFC003FFFFFFFFFFFFFFFFFFFF007FFF - FFF81FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7FFFFFFFFFFFFFFFFFFFFFFFF - FFFFFF03FFFFFFFFFFFFFFFFFF00000FFFFFFE03FFFFFFFFFFFFFFFFFF00000F - FFFFFE07FFFFFFFFFFFFFFFFFC00000FFFFFFC07FFFC3FFFFFE007FFFC00000F - FFFF6007FFFC3FFFFFC003FFF000000F00000000FF1818FFFF8001FFF000000F - 00000000FE00007FFE00007FF000000F00000000FE00007FFE00007FF000000F - 00000000FE00007FFC00003FF000000F00000000FE00007FF800001FF000000F - 00000000FF0000FFF800001FF000000F00000000FE00007FF800001FF000000F - 00000000F803C01FF800001FF000000F00000000F807E01FF800001FF000000F - 00000000F807E01FF800001FF000000F00000000F807E01FF800001FF000000F - 00000000F803C01FF800001FF000000F00000000FE00007FF800001FF000000F - 00000000FF0000FFF800001FF000000F00000000FE00007FF800001FF000000F - 00000000FE00007FFC00003FF000000F00000000FE00007FFE00007FF000000F - 00000000FE00007FFF0000FFF000001F00000000FF1818FFFF0000FFF000003F - 00000000FFFC3FFFFFC003FFF000007F00000000FFFC3FFFFFE007FFF00000FF - 00000000FFFFFFFFFFFFFFFFF00001FF00000000FFFFFFFFFFFFFFFFF00003FF - 00000000FFFFFFFFFFFFFFFFF00007FFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFF - FFFFFFFFFFFFFFFFFFFFFFFFF0001FFF00000000000000000000000000000000 - 000000000000} - end -end +object modActionsMain: TmodActionsMain + OldCreateOrder = False + OnCreate = DataModuleCreate + Height = 414 + Width = 557 + object actionsMain: TActionList + Images = frmKeymanDeveloper.lstImages + Left = 32 + Top = 28 + object actViewCharacterMap: TAction + Category = 'View' + Caption = '&Character Map' + Hint = 'Character Map|Display the character map window' + ShortCut = 24643 + OnExecute = actViewCharacterMapExecute + OnUpdate = actViewCharacterMapUpdate + end + object actFileNew: TAction + Category = 'File' + Caption = '&New...' + Hint = 'New|Creates a new file' + ImageIndex = 0 + ShortCut = 16462 + OnExecute = actFileNewExecute + OnUpdate = actFileNewUpdate + end + object actViewCharacterIdentifier: TAction + Category = 'View' + Caption = 'Character &Identifier' + Hint = 'Character Identifier|Display the character identifier window' + ShortCut = 24649 + OnExecute = actViewCharacterIdentifierExecute + OnUpdate = actViewCharacterIdentifierUpdate + end + object actFileOpen: TFileOpen + Category = 'File' + Caption = '&Open...' + Dialog.Options = [ofHideReadOnly, ofAllowMultiSelect, ofFileMustExist, ofEnableSizing] + Hint = 'Open|Opens an existing file' + ImageIndex = 1 + ShortCut = 16463 + OnAccept = actFileOpenAccept + OnUpdate = actFileOpenUpdate + end + object actFileSave: TAction + Category = 'File' + Caption = '&Save' + Hint = 'Save|Saves the active file' + ImageIndex = 2 + ShortCut = 16467 + OnExecute = actFileSaveExecute + OnUpdate = actFileSaveUpdate + end + object actFileSaveAs: TFileSaveAs + Category = 'File' + Caption = 'Save &As...' + Dialog.Title = 'Save As' + Dialog.OnCanClose = actFileSaveAsSaveDialogCanClose + Hint = 'Save As|Saves the active file with a new name' + BeforeExecute = actFileSaveAsBeforeExecute + OnAccept = actFileSaveAsAccept + OnUpdate = actFileSaveAsUpdate + end + object actFileSaveCopyAs: TAction + Category = 'File' + Caption = 'Save cop&y as...' + ImageIndex = 17 + OnExecute = actFileSaveCopyAsExecute + OnUpdate = actFileSaveCopyAsUpdate + end + object actFileRevert: TAction + Category = 'File' + Caption = '&Revert' + Hint = 'Revert|Reload last saved version of active file' + ImageIndex = 18 + OnExecute = actFileRevertExecute + OnUpdate = actFileRevertUpdate + end + object actFileExit: TFileExit + Category = 'File' + Caption = 'E&xit' + Hint = 'Exit|Quits the application' + end + object actEditUndo: TKMDEditUndo + Category = 'Edit' + Caption = '&Undo' + Hint = 'Undo|Reverts the last action' + ImageIndex = 7 + ShortCut = 16474 + end + object actEditRedo: TKMDEditRedo + Category = 'Edit' + Caption = '&Redo' + Enabled = False + Hint = 'Redo|Revert the last undo' + ImageIndex = 8 + ShortCut = 24666 + end + object actEditCut: TKMDEditCut + Category = 'Edit' + Caption = 'Cu&t' + Enabled = False + Hint = 'Cut|Cuts the selection and puts it on the Clipboard' + ImageIndex = 4 + ShortCut = 16472 + end + object actEditCopy: TKMDEditCopy + Category = 'Edit' + Caption = '&Copy' + Enabled = False + Hint = 'Copy|Copies the selection and puts it on the Clipboard' + ImageIndex = 5 + ShortCut = 16451 + end + object actEditPaste: TKMDEditPaste + Category = 'Edit' + Caption = '&Paste' + Enabled = False + Hint = 'Paste|Inserts Clipboard contents' + ImageIndex = 6 + ShortCut = 16470 + end + object actEditSelectAll: TKMDEditSelectAll + Category = 'Edit' + Caption = 'Select &All' + Hint = 'Select All|Selects the entire document' + ShortCut = 16449 + end + object actEditDelete: TKMDEditDelete + Category = 'Edit' + Caption = 'Clear selection' + Hint = 'Clear selection|Erases the selection' + ImageIndex = 21 + end + object actSearchFind: TKMDSearchFind + Category = 'Search' + Caption = '&Find...' + Hint = 'Find|Finds the specified text' + ImageIndex = 22 + ShortCut = 16454 + BeforeExecute = actSearchFindBeforeExecute + OnUpdate = actSearchFindUpdate + end + object actSearchFindNext: TKMDSearchFindNext + Category = 'Search' + Caption = 'Find &Next' + Hint = 'Find Next|Repeats the last find' + SearchFind = actSearchFind + ShortCut = 114 + end + object actSearchReplace: TKMDSearchReplace + Category = 'Search' + Caption = '&Replace' + Hint = 'Replace|Replaces specific text with different text' + ImageIndex = 23 + ShortCut = 16456 + end + object actHelpContents: THelpContents + Category = 'Help' + Caption = '&Contents' + Enabled = False + Hint = 'Help Contents' + ImageIndex = 12 + OnExecute = actHelpContentsExecute + end + object actHelpTopicSearch: THelpTopicSearch + Category = 'Help' + Caption = '&Topic Search' + Enabled = False + Hint = 'Topic Search' + end + object actHelpContextAction: THelpContextAction + Category = 'Help' + Caption = 'Context &Help...' + Enabled = False + end + object actViewMessages: TAction + Category = 'View' + Caption = '&Messages' + Hint = 'Messages|View the messages window' + ShortCut = 24653 + OnExecute = actViewMessagesExecute + OnUpdate = actViewMessagesUpdate + end + object actViewProject: TAction + Category = 'View' + Caption = '&Project' + Hint = 'Project|View the current project' + ShortCut = 24656 + OnExecute = actViewProjectExecute + OnUpdate = actViewProjectUpdate + end + object actViewToolbar: TAction + Category = 'View' + Caption = '&Toolbar' + Hint = 'Toolbar|Show or hide the toolbar' + OnExecute = actViewToolbarExecute + OnUpdate = actViewToolbarUpdate + end + object actViewStatusBar: TAction + Category = 'View' + Caption = '&Status Bar' + Hint = 'Status Bar|Show or hide the status bar' + OnExecute = actViewStatusBarExecute + OnUpdate = actViewStatusBarUpdate + end + object actProjectNew: TAction + Category = 'Project' + Caption = '&New Project...' + ImageIndex = 27 + OnExecute = actProjectNewExecute + end + object actProjectOpen: TFileOpen + Category = 'Project' + Caption = '&Open Project...' + Dialog.DefaultExt = 'kpj' + Dialog.Filter = 'Keyman Developer Project Files (*.kpj)|*.kpj|All Files (*.*)|*.*' + Dialog.Options = [ofHideReadOnly, ofPathMustExist, ofFileMustExist, ofEnableSizing] + Hint = 'Open Project|Opens an existing project' + ImageIndex = 28 + ShortCut = 24655 + OnAccept = actProjectOpenAccept + end + object actProjectAddCurrentEditorFile: TAction + Category = 'Project' + Caption = '&Current Editor File' + Hint = + 'Add Current Editor File|Adds the current editor file to the proj' + + 'ect' + OnExecute = actProjectAddCurrentEditorFileExecute + OnUpdate = actProjectAddCurrentEditorFileUpdate + end + object actProjectAddFiles: TFileOpen + Category = 'Project' + Caption = '&Other Files...' + Dialog.Options = [ofHideReadOnly, ofAllowMultiSelect, ofPathMustExist, ofFileMustExist, ofEnableSizing] + Hint = 'Add Other Files|Adds files from disk to the project' + ImageIndex = 30 + ShortCut = 16463 + OnAccept = actProjectAddFilesAccept + OnUpdate = actProjectAddFilesUpdate + end + object actProjectSettings: TAction + Category = 'Project' + Caption = 'Pro&ject Settings...' + Hint = 'Project Settings|Edit settings for this project' + ImageIndex = 31 + OnExecute = actProjectSettingsExecute + OnUpdate = actProjectSettingsUpdate + end + object actToolsOptions: TAction + Category = 'Tools' + Caption = '&Options...' + ImageIndex = 33 + OnExecute = actToolsOptionsExecute + end + object actToolsVirtualKeyIdentifier: TAction + Category = 'Tools' + Caption = '&Virtual Key Identifier...' + ShortCut = 16459 + OnExecute = actToolsVirtualKeyIdentifierExecute + end + object actHelpAbout: TAction + Category = 'Help' + Caption = '&About...' + ImageIndex = 56 + OnExecute = actHelpAboutExecute + end + object actViewCodeFont: TFontEdit + Category = 'View' + Caption = 'Code F&ont...' + Dialog.OnShow = actViewCodeFontFontDialogShow + Dialog.Font.Charset = DEFAULT_CHARSET + Dialog.Font.Color = clWindowText + Dialog.Font.Height = -11 + Dialog.Font.Name = 'Tahoma' + Dialog.Font.Style = [] + Dialog.Options = [fdApplyButton] + Dialog.OnApply = actViewCodeFontFontDialogApply + Hint = 'Code Font|Set the font for the code editor' + ImageIndex = 26 + BeforeExecute = actViewCodeFontBeforeExecute + OnAccept = actViewCodeFontAccept + OnUpdate = actViewCodeFontUpdate + end + object actViewCharFont: TFontEdit + Category = 'View' + Caption = 'Character &Font...' + Dialog.OnShow = actViewCharFontFontDialogShow + Dialog.Font.Charset = DEFAULT_CHARSET + Dialog.Font.Color = clWindowText + Dialog.Font.Height = -11 + Dialog.Font.Name = 'Tahoma' + Dialog.Font.Style = [] + Dialog.Options = [fdApplyButton] + Dialog.OnApply = actViewCharFontFontDialogApply + Hint = + 'Character Font|Set the font for text in quotes and comments and ' + + 'keyboard views' + ImageIndex = 25 + ShortCut = 24646 + BeforeExecute = actViewCharFontBeforeExecute + OnAccept = actViewCharFontAccept + OnUpdate = actViewCharFontUpdate + end + object actViewExpandEditor: TAction + Category = 'View' + Caption = '&Expand Editor' + ImageIndex = 55 + ShortCut = 122 + OnExecute = actViewExpandEditorExecute + OnUpdate = actViewExpandEditorUpdate + end + object actViewHelp: TAction + Category = 'View' + Caption = 'Context &Help' + ShortCut = 24648 + OnExecute = actViewHelpExecute + OnUpdate = actViewHelpUpdate + end + object actWindowNext: TAction + Category = 'Window' + Caption = '&Next Window' + ShortCut = 16393 + OnExecute = actWindowNextExecute + OnUpdate = actWindowNextUpdate + end + object actWindowPrev: TAction + Category = 'Window' + Caption = '&Previous Window' + ShortCut = 24585 + OnExecute = actWindowPrevExecute + OnUpdate = actWindowPrevUpdate + end + object actWindowClose: TAction + Category = 'Window' + Caption = '&Close' + Hint = 'Close Tab|Closes the active tab' + ImageIndex = 14 + ShortCut = 16499 + OnExecute = actWindowCloseExecute + OnUpdate = actWindowCloseUpdate + end + object actToolsFileFormat: TAction + Category = 'Tools' + Caption = 'File &Format...' + Hint = 'File Format|Set the file format of the current editor file' + OnExecute = actToolsFileFormatExecute + OnUpdate = actToolsFileFormatUpdate + end + object actViewMessageNext: TAction + Category = 'View' + Caption = '&Next Message' + ShortCut = 115 + OnExecute = actViewMessageNextExecute + OnUpdate = actViewMessageNextUpdate + end + object actViewMessagePrevious: TAction + Category = 'View' + Caption = '&Previous Message' + ShortCut = 8307 + OnExecute = actViewMessagePreviousExecute + OnUpdate = actViewMessagePreviousUpdate + end + object actViewTabNext: TAction + Category = 'View' + Caption = '&Next Tab' + SecondaryShortCuts.Strings = ( + 'Alt+PgDn') + ShortCut = 16418 + OnExecute = actViewTabNextExecute + OnUpdate = actViewTabNextUpdate + end + object actViewTabPrevious: TAction + Category = 'View' + Caption = '&Previous Tab' + SecondaryShortCuts.Strings = ( + 'Alt+PgUp') + ShortCut = 16417 + OnExecute = actViewTabPreviousExecute + OnUpdate = actViewTabPreviousUpdate + end + object actHelpCheckForUpdates: TAction + Category = 'Help' + Caption = 'Check for &Updates...' + OnExecute = actHelpCheckForUpdatesExecute + end + object actToolsReloadANSI: TAction + Category = 'Tools' + Caption = 'Reload as ANSI' + OnExecute = actToolsReloadANSIExecute + OnUpdate = actToolsReloadANSIUpdate + end + object actToolsReloadUTF8: TAction + Category = 'Tools' + Caption = 'Reload as UTF-8' + OnExecute = actToolsReloadUTF8Execute + OnUpdate = actToolsReloadUTF8Update + end + object actToolsReloadUTF16: TAction + Category = 'Tools' + Caption = 'Reload as UTF-16' + OnExecute = actToolsReloadUTF16Execute + OnUpdate = actToolsReloadUTF16Update + end + object actToolsReload: TAction + Category = 'Tools' + Caption = 'Reload as format' + end + object actViewDesign: TAction + Category = 'View' + Caption = '&Design view' + ShortCut = 32805 + OnExecute = actViewDesignExecute + OnUpdate = actViewDesignUpdate + end + object actViewCode: TAction + Category = 'View' + Caption = '&Code view' + ShortCut = 32807 + OnExecute = actViewCodeExecute + OnUpdate = actViewCodeUpdate + end + object actProjectClose: TAction + Category = 'Project' + Caption = '&Close Project' + OnExecute = actProjectCloseExecute + OnUpdate = actProjectCloseUpdate + end + object actToolsWebCopyPublicUrl: TAction + Category = 'Tools' + Caption = '&Copy URL to clipboard' + OnExecute = actToolsWebCopyPublicUrlExecute + OnUpdate = actToolsWebCopyPublicUrlUpdate + end + object actToolsWebOpenPublicUrl: TAction + Category = 'Tools' + Caption = '&Open in browser' + OnExecute = actToolsWebOpenPublicUrlExecute + OnUpdate = actToolsWebOpenPublicUrlUpdate + end + object actToolsWebConfigure: TAction + Category = 'Tools' + Caption = 'Co&nfigure...' + OnExecute = actToolsWebConfigureExecute + end + object actToolsWebStartServer: TAction + Category = 'Tools' + Caption = '&Start server' + OnExecute = actToolsWebStartServerExecute + OnUpdate = actToolsWebStartServerUpdate + end + object actToolsWebStopServer: TAction + Category = 'Tools' + Caption = '&Stop server' + OnExecute = actToolsWebStopServerExecute + OnUpdate = actToolsWebStopServerUpdate + end + object actWindowNew: TAction + Category = 'Window' + Caption = '&New window' + OnExecute = actWindowNewExecute + end + end + object ActionManager1: TActionManager + ActionBars = < + item + end> + LinkedActionLists = < + item + ActionList = actionsMain + Caption = 'actionsMain' + end> + Left = 180 + Top = 164 + StyleName = 'XP Style' + end + object ilMain: TImageList + Left = 304 + Top = 236 + Bitmap = { + 494C01010A000E00040010001000FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600 + 0000000000003600000028000000400000003000000001002000000000000030 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00000000000000000000000000000000000000 + 0000B5CEC600C6DED600C6DED600C6DED600C6DED600C6DED600C6E7DE000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000B5CEC600BDD6C600C6DECE00CEDED600CEDED600C6DECE00BDD6C600BDD6 + C600000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000FFFFFF0084B58400107310001873 + 18001873180018731800187B1800187B1800107B1000107B1000087B0800087B + 0800007B0000007300007BB57B00FFFFFF00000000000000000000000000BDD6 + CE00CEDECE00DEE7E700E7EFEF00EFF7F700EFF7EF00E7EFE700CEDED600B5CE + C60000000000000000000000000000000000000000000000000000000000BDCE + C600D6E7DE00EFF7EF00F7F7F700F7F7F700EFF7F700EFF7F700E7EFEF00D6DE + D600BDCEC6000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000FFFFFF0010841000218C21002994 + 2900319431003194310029942900299C2900219C210018A5180018A5180010A5 + 100008A5080000940000006B0000FFFFFF000000000000000000BDD6C600DEE7 + E700F7FFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00E7EF + EF00C6D6CE000000000000000000000000000000000000000000BDCEC600E7EF + E700F7FFFF00F7FFFF00F7FFFF00F7FFFF00F7FFFF00F7FFF700F7F7F700EFF7 + F700DEE7DE00BDD6C60000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000FFFFFF00188C180029942900399C + 3900399C3900399C3900FFFFFF00A5D6A5004AA54A004AA54A004AA54A0029A5 + 290018A51800009C0000007B0000FFFFFF0000000000BDD6C600DEE7E700FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00F7F7F700C6D6CE00000000000000000000000000BDCEC600E7EFE700FFFF + FF00FFFFFF00FFFFFF00FFFFFF0018634A00FFFFFF00FFFFFF00FFFFFF00F7FF + F700EFF7F700DEE7DE00BDCEC600000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000FFFFFF0021942100399C390042A5 + 420042A5420042A54200FFFFFF00FFFFFF00A5D6A5004AA54A004AA54A0039A5 + 390021A5210008A50800087B0800FFFFFF00C6DED600D6DEDE00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00EFF7EF00BDCEC60000000000BDD6CE00D6E7DE00FFFFFF00FFFF + FF00FFFFFF00FFFFFF0018634A0018634A0018634A00FFFFFF00FFFFFF00FFFF + FF00F7FFF700EFF7F700CEDED600BDD6CE000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000FFFFFF0029942900429C42004AA5 + 4A0052A552004AA54A00FFFFFF00FFFFFF00FFFFFF00A5D6A5004AA54A0039A5 + 390021A5210010A5100008840800FFFFFF00BDD6CE00EFF7EF00FFFFFF00FFFF + FF0018634A0018634A00FFFFFF00FFFFFF00FFFFFF0018634A0018634A00FFFF + FF00FFFFFF00FFFFFF00D6DED600BDDECE00BDD6C600EFF7F700FFFFFF00FFFF + FF00FFFFFF0018634A0018634A00FFFFFF0018634A0018634A00FFFFFF00FFFF + FF00FFFFFF00F7FFF700DEEFE700BDD6CE000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000FFFFFF00319C31004AA54A0052A5 + 52004AA54A004AA54A00FFFFFF00FFFFFF00FFFFFF00FFFFFF00A5D6A50039A5 + 390021A5210018A5180010841000FFFFFF00C6DECE00FFFFFF00FFFFFF00FFFF + FF00FFFFFF0018634A0018634A00FFFFFF0018634A0018634A00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00E7EFEF00BDD6CE00C6D6CE00FFFFFF00FFFFFF00FFFF + FF0018634A0018634A00FFFFFF00FFFFFF00FFFFFF0018634A0018634A00FFFF + FF00FFFFFF00F7FFFF00E7EFEF00BDD6CE000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000FFFFFF00429C420052A552004AA5 + 4A004AA54A004AA54A00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00A5D6 + A500219C2100219C210018841800FFFFFF00CEDED600FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF0018634A0018634A0018634A00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00EFF7EF00BDD6CE00CEDED600FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF0018634A00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00EFF7EF00BDD6CE000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000FFFFFF0042A5420052A5520052A5 + 52004AA54A004AA54A00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00A5D6 + A500219C2100219C2100217B2100FFFFFF00CEDED600FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF0018634A00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00EFF7EF00BDD6CE00CEDED600FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF0018634A0018634A0018634A00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00EFF7EF00BDD6CE000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000FFFFFF0052A552005AAD5A005AAD + 5A0052A552004AA54A00FFFFFF00FFFFFF00FFFFFF00FFFFFF00A5D6A5003194 + 31002994290029942900217B2100FFFFFF00C6D6CE00FFFFFF00FFFFFF00FFFF + FF0018634A0018634A00FFFFFF00FFFFFF00FFFFFF0018634A0018634A00FFFF + FF00FFFFFF00F7FFFF00E7EFEF00BDD6CE00C6DECE00FFFFFF00FFFFFF00FFFF + FF00FFFFFF0018634A0018634A00FFFFFF0018634A0018634A00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00E7EFEF00BDD6CE000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000FFFFFF0052A552006BB56B006BB5 + 6B005AAD5A0052AD5200FFFFFF00FFFFFF00FFFFFF00A5D6A500399C39003194 + 31002994290029942900217B2100FFFFFF00BDD6C600EFF7F700FFFFFF00FFFF + FF00FFFFFF0018634A0018634A00FFFFFF0018634A0018634A00FFFFFF00FFFF + FF00FFFFFF00F7FFF700DEEFE700BDD6CE00BDD6CE00EFF7EF00FFFFFF00FFFF + FF0018634A0018634A00FFFFFF00FFFFFF00FFFFFF0018634A0018634A00FFFF + FF00FFFFFF00FFFFFF00D6DED600BDDECE000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000FFFFFF005AAD5A007BBD7B0073BD + 730063AD63005AAD5A00FFFFFF00FFFFFF00A5D6A500429C4200429C4200399C + 39003194310031943100217B2100FFFFFF00BDD6CE00D6E7DE00FFFFFF00FFFF + FF00FFFFFF00FFFFFF0018634A0018634A0018634A00FFFFFF00FFFFFF00FFFF + FF00F7FFF700EFF7F700CEDED600BDD6CE00C6DED600D6DEDE00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00EFF7EF00BDCEC600000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000FFFFFF006BB56B008CC68C007BBD + 7B006BB56B0063B56300FFFFFF00A5D6A5005AAD5A0052A552004AA54A0042A5 + 4200399C390031943100217B2100FFFFFF0000000000BDCEC600E7EFE700FFFF + FF00FFFFFF00FFFFFF00FFFFFF0018634A00FFFFFF00FFFFFF00FFFFFF00F7FF + F700EFF7F700DEE7DE00BDCEC6000000000000000000BDD6C600DEE7E700FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00F7F7F700C6D6CE0000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000FFFFFF0073BD73009CCE9C008CC6 + 8C007BBD7B0073BD73006BB56B0063B5630063AD63005AAD5A0052AD52004AA5 + 4A0042A542003194310018731800FFFFFF000000000000000000BDCEC600E7EF + E700F7FFFF00F7FFFF00F7FFFF00F7FFFF00F7FFFF00F7FFF700F7F7F700EFF7 + F700DEE7DE00BDD6C60000000000000000000000000000000000BDD6C600DEE7 + E700F7FFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00E7EF + EF00C6D6CE000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000FFFFFF00B5DEB50073BD730063B5 + 63005AAD5A0052A5520052A552004AA54A004AA54A0042A54200429C4200399C + 390031943100218C21008CBD8C00FFFFFF00000000000000000000000000BDCE + C600D6E7DE00EFF7EF00F7F7F700F7F7F700EFF7F700EFF7F700E7EFEF00D6DE + D600BDCEC600000000000000000000000000000000000000000000000000BDD6 + CE00CEDECE00DEE7E700E7EFEF00EFF7F700EFF7EF00E7EFE700CEDED600B5CE + C600000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00000000000000000000000000000000000000 + 0000B5CEC600BDD6C600C6DECE00CEDED600CEDED600C6DECE00BDD6C600BDD6 + C600000000000000000000000000000000000000000000000000000000000000 + 0000B5CEC600C6DED600C6DED600C6DED600C6DED600C6DED600C6E7DE000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF000000000000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF000000000000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00000000000000000000000000000000000000 + 0000BDBDBD000000840000007300100000006363630000000000000000000000 + 000000000000000000000000000000000000FFFFFF0084B58400107310001873 + 18001873180018731800187B1800187B1800107B1000107B1000087B0800087B + 0800007B0000007300007BB57B00FFFFFF00FFFFFF0052ADFF0018529400185A + 9C00185A9C00185A9C00185AA500185AA500185A9C00185A9C00185294001852 + 940018528C00184A84004AADFF00FFFFFF00FFFFFF0084B58400107310001873 + 18001873180018731800187B1800187B1800107B1000107B1000087B0800087B + 0800007B0000007300007BB57B00FFFFFF000000000000000000BDBDBD003131 + 31000000AD000000FF000000DE00000042005252520000000000000000000000 + 000000000000000000000000000000000000FFFFFF0010841000218C21002994 + 2900319431003194310029942900299C2900219C210018A5180018A5180010A5 + 100008A5080000940000006B0000FFFFFF00FFFFFF00185AA500186BBD001873 + CE001873CE001873CE001873CE001873CE001873CE001873CE001873CE00186B + C600186BBD00185AA500104A7B00FFFFFF00FFFFFF0010841000218C21002994 + 2900319431003194310029942900299C2900219C210018A5180018A5180010A5 + 100008A5080000940000006B0000FFFFFF000000000000000000737373000000 + 42000000FF000000FF000000840000319C002121210000000000000000000000 + 000000000000000000000000000000000000FFFFFF00188C180029942900399C + 3900399C3900399C390039A53900A5D6A500FFFFFF0021AD210018AD180010B5 + 100008AD0800009C0000007B0000FFFFFF00FFFFFF001863AD001873CE00187B + DE00187BDE00187BE7001884E700188CF700188CF700188CF700188CF700187B + DE00186BC6001863AD0018528C00FFFFFF00FFFFFF00188C180029942900399C + 3900399C3900399C390039A539004AA54A00A5D6A500FFFFFF004AA54A0031A5 + 310018A51800009C0000007B0000FFFFFF00000000008C8C8C00BDBDBD000000 + 4200000084000000EF000000FF000000CE000000310073737300000000000000 + 000000000000000000000000000000000000FFFFFF0021942100399C390042A5 + 42004AA54A0042A5420042A54200FFFFFF00FFFFFF00FFFFFF0021B5210018B5 + 180010AD100008A50800087B0800FFFFFF00FFFFFF00186BC600187BDE001884 + EF00FFFFFF0084C6FF00188CF700188CF700188CF700188CF70084C6FF00FFFF + FF001873CE00186BBD0018529400FFFFFF00FFFFFF0021942100399C390042A5 + 420042A5420042A542004AA54A00A5D6A500FFFFFF00FFFFFF004AA54A0039A5 + 390021A5210008A50800087B0800FFFFFF000000000000000000001000000000 + AD000000FF000000FF000000FF000000DE001010100000002100525252007373 + 730031009C0000313100A5A5A50000000000FFFFFF0029942900429C42004AA5 + 4A0052A552004AA54A0042A5420042AD4200FFFFFF00FFFFFF00FFFFFF0018B5 + 180010AD100010A5100008840800FFFFFF00FFFFFF001873CE001884E700188C + F700188CFF00FFFFFF0084C6FF00188CF700188CF70084C6FF00FFFFFF001884 + E7001873D600186BC600185A9C00FFFFFF00FFFFFF0029942900429C42004AA5 + 4A0052A552004AA54A00A5D6A500FFFFFF00FFFFFF00FFFFFF004AA54A0039A5 + 390021A5210010A5100008840800FFFFFF0000000000BDBDBD00100000000000 + 84000000FF000000CE000000EF0000008400000084000000FF000000BD000000 + 840000006300737373000021000063636300FFFFFF00319C31004AA54A0052A5 + 520052A552004AA54A004AA54A0042A5420039AD3900FFFFFF00FFFFFF00FFFF + FF0018AD180018A5180010841000FFFFFF00FFFFFF00187BDE00188CF700188C + FF00188CF700188CF700FFFFFF0084C6FF0084C6FF00FFFFFF00188CF7001884 + E7001873D6001873CE00185AA500FFFFFF00FFFFFF00319C31004AA54A0052A5 + 52004AA54A00A5D6A500FFFFFF00FFFFFF00FFFFFF00FFFFFF004AA54A0039A5 + 390021A5210018A5180010841000FFFFFF000000000021212100000021000000 + AD000000FF0000004200000084000000FF000000FF0000007300000042000000 + 420073737300313163000000AD0000006300FFFFFF00429C420052A55200FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00219C210018841800FFFFFF00FFFFFF001884E700188CFF00188C + F700188CF700188CF700188CF700FFFFFF0084C6FF00188CF7001884EF00187B + DE001873CE001873CE001863AD00FFFFFF00FFFFFF00429C420052A552004AA5 + 4A00A5D6A500FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0042A5420031A5 + 3100219C2100219C210018841800FFFFFF00000000008C8C8C0000009C000000 + FF000000EF00000073000000EF000000FF000000EF0000003100100000005252 + 52000000EF000000FF000000DE0031316300FFFFFF0042A542005AAD5A00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00219C2100217B2100FFFFFF00FFFFFF001884EF00188CFF00188C + FF00188CF700188CF70084C6FF00FFFFFF00FFFFFF0084C6FF001884E7001873 + D6001873CE001873CE001863AD00FFFFFF00FFFFFF0042A5420052A5520052A5 + 5200A5D6A500FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00399C3900299C + 2900219C2100219C2100217B2100FFFFFF000000000010000000000042000031 + CE000000FF0000009C000000FF000000FF000000EF00000073000000AD000000 + CE000000FF000000FF000000AD0021212100FFFFFF0052A5520063AD630063AD + 63005AAD5A0052A552004AA54A00429C4200399C3900FFFFFF00FFFFFF00FFFF + FF00299C290029942900217B2100FFFFFF00FFFFFF00188CFF002194FF002194 + FF00188CFF0084C6FF00FFFFFF001884F7001884EF00FFFFFF0084C6FF001873 + CE001873CE001873CE001863AD00FFFFFF00FFFFFF0052A552005AAD5A005AAD + 5A0052A55200A5D6A500FFFFFF00FFFFFF00FFFFFF00FFFFFF00399C39003194 + 31002994290029942900217B2100FFFFFF00000000008C8C8C00000000000000 + AD000000FF000000EF0000007300000052000031CE000000AD000000EF000000 + EF000000BD0000006300BDBDBD0000000000FFFFFF0052A552006BB56B006BB5 + 6B005AAD5A0052A552004AA54A00429C4200FFFFFF00FFFFFF00FFFFFF002994 + 29002994290029942900217B2100FFFFFF00FFFFFF00188CFF0039A5FF0039A5 + FF0084C6FF00FFFFFF00188CFF00188CFF001884EF001884E700FFFFFF0084C6 + FF001873CE001873CE001863AD00FFFFFF00FFFFFF0052A552006BB56B006BB5 + 6B005AAD5A0052AD5200A5D6A500FFFFFF00FFFFFF00FFFFFF00399C39003194 + 31002994290029942900217B2100FFFFFF000000000000000000000000000000 + 52000000FF000000BD000031CE000000AD00000073003100CE00525252002121 + 21000000AD00000000000000000000000000FFFFFF005AAD5A007BBD7B0073BD + 730063AD63005AAD5A0052A55200FFFFFF00FFFFFF00FFFFFF00319C3100319C + 31003194310031943100217B2100FFFFFF00FFFFFF002194FF0052ADFF004AAD + FF00FFFFFF002194FF002194FF001894FF00188CF7001884EF001884E700FFFF + FF001873CE001873CE001863AD00FFFFFF00FFFFFF005AAD5A007BBD7B0073BD + 730063AD63005AAD5A005AAD5A00A5D6A500FFFFFF00FFFFFF00429C4200399C + 39003194310031943100217B2100FFFFFF0000000000A5A5A500000000000000 + 52000000AD0000005200000073000031FF000000730000005200212121000000 + 100000000000000000000000000000000000FFFFFF006BB56B008CC68C007BBD + 7B006BB56B0063B5630063AD6300B5DEB500FFFFFF004AA54A004AA54A0042A5 + 4200399C390031943100217B2100FFFFFF00FFFFFF0039A5FF006BBDFF0052AD + FF0039A5FF00319CFF00299CFF00299CFF002194FF00188CFF001884F7001884 + EF00187BDE001873CE001863AD00FFFFFF00FFFFFF006BB56B008CC68C007BBD + 7B006BB56B0063B5630063AD630063AD6300A5D6A500FFFFFF004AA54A0042A5 + 4200399C390031943100217B2100FFFFFF000000000000000000000000003131 + 3100000042000000CE000000AD000000DE00000063000000420000004200BDBD + BD0000000000000000000000000000000000FFFFFF0073BD73009CCE9C008CC6 + 8C007BBD7B0073BD73006BB56B0063B5630063AD63005AAD5A0052AD52004AA5 + 4A0042A542003194310018731800FFFFFF00FFFFFF004AADFF0084C6FF006BBD + FF0052ADFF004AADFF0039A5FF00319CFF00299CFF002194FF001894FF00188C + F7001884EF001873CE00185A9C00FFFFFF00FFFFFF0073BD73009CCE9C008CC6 + 8C007BBD7B0073BD73006BB56B0063B5630063AD63005AAD5A0052AD52004AA5 + 4A0042A542003194310018731800FFFFFF000000000000000000000000000000 + 00008C8C8C002121210000004200313131008C8C8C00BDC6C600000000000000 + 000000000000000000000000000000000000FFFFFF00B5DEB50073BD730063B5 + 63005AAD5A0052A5520052A552004AA54A004AA54A0042A54200429C4200399C + 390031943100218C21008CBD8C00FFFFFF00FFFFFF00ADDEFF004AADFF00319C + FF002194FF00188CFF00188CFF00188CF700188CF7001884EF001884E700187B + DE001873CE00186BBD0063B5FF00FFFFFF00FFFFFF00B5DEB50073BD730063B5 + 63005AAD5A0052A5520052A552004AA54A004AA54A0042A54200429C4200399C + 390031943100218C21008CBD8C00FFFFFF000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF000000000000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF000000000000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF0000000000424D3E000000000000003E000000 + 2800000040000000300000000100010000000000800100000000000000000000 + 000000000000000000000000FFFFFF00FFFFFFFF00000000FFFFFFFF00000000 + FFFFFFFF00000000F00FF03F00000000F7EFF7BF00000000F7EFF7BF00000000 + F7EFF78F00000000F7EFF02F00000000F7EFF02F00000000F00FFDEF00000000 + F00FFC0F00000000FFFFFC0F00000000FFFFFFFF00000000FFFFFFFF00000000 + FFFFFFFF00000000FFFFFFFF000000008001F01FF00FFFFF0000E00FE007FFFF + 0000C007C003FFFF000080038001FFFF000000010000F81F000000000000F81F + 000000000000FFFF000000000000FFFF000000000000FFFF000000000000FFFF + 000000000000FFFF000000000001FFFF000080018003FFFF0000C003C007FFFF + 0000E007E00FFFFF8001F00FF01FFFFFFFFF800180018001F07F000000000000 + C07F000000000000C07F000000000000003F0000000000008001000000000000 + 0000000000000000800000000000000000000000000000008000000000000000 + 00010000000000008007000000000000800F000000000000E00F000000000000 + F03F000000000000FFFF80018001800100000000000000000000000000000000 + 000000000000} + end + object ilEditorPages: TImageList + Height = 32 + Width = 32 + Left = 124 + Top = 116 + Bitmap = { + 494C010112004801040020002000FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600 + 000000000000360000002800000080000000A000000001002000000000000040 + 0100000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000A8CAFF00A8CA + FF00A8CAFF00A8CAFF00A8CAFF00A8CAFF00A8CAFF00A8CAFF00A8CAFF00A8CA + FF00A8CAFF00A8CAFF00A8CAFF00000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000A8CAFF00A8CA + FF00A8CAFF00A8CAFF00A8CAFF00A8CAFF00A8CAFF00A8CAFF00A8CAFF00A8CA + FF00A8CAFF00A8CAFF00A8CAFF00000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000A8CAFF00A8CA + FF00A8CAFF000000000000000000000000000000000000000000000000000000 + 000000000000A8CAFF00A8CAFF00000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000A8CAFF00A8CA + FF00A8CAFF00A8CAFF00A8CAFF00A8CAFF00A8CAFF00A8CAFF00A8CAFF00A8CA + FF00A8CAFF00A8CAFF00A8CAFF00000000000000000000000000000000000000 + 000000000000000000000000000000000000186BBE003783CC003783CC003783 + CC003783CC003783CC003783CC001267BC003783CC003783CC003783CC003783 + CC003783CC003783CC003783CC003783CC003783CC003783CC003783CC003783 + CC003783CC003783CC003783CC003783CC002071C2003581CB003783CC003783 + CC003783CC003783CC003783CC001267BC000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000A8CAFF00A8CA + FF00000000000000000000000000000000000000000000000000000000000000 + 0000A8CAFF00A8CAFF00A8CAFF00000000000000000000000000000000000000 + 000000000000000000000000000000000000156ABD00317EC900317EC900317E + C900317EC900317EC900317EC9001066BB00317EC900317EC900317EC900317E + C900317EC900317EC900317EC900317EC900317EC900317EC900317EC900317E + C900317EC900317EC900317EC900317EC9001C6FC000307DC800317EC900317E + C900317EC900317EC900317EC9001066BB000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000A8CAFF00A8CA + FF00A8CAFF00A8CAFF00A8CAFF00A8CAFF00A8CAFF00A8CAFF00A8CAFF00A8CA + FF00A8CAFF00A8CAFF00A8CAFF00000000000000000000000000000000000000 + 0000000000000000000000000000000000004B91D400AFDBFF00AFDBFF00AFDB + FF00AFDBFF00AFDBFF00AFDBFF003883CC00AFDBFF00AFDBFF00AFDBFF00AFDB + FF00AFDBFF00AFDBFF00AFDBFF00AFDBFF00AFDBFF00AFDBFF00AFDBFF00AFDB + FF00AFDBFF00AFDBFF00AFDBFF00AFDBFF0064A4DF00A9D6FC00AFDBFF00AFDB + FF00AFDBFF00AFDBFF00AFDBFF003883CC000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000A8CAFF00A8CA + FF00A8CAFF00A8CAFF00A8CAFF00A8CAFF00A8CAFF00A8CAFF00A8CAFF00A8CA + FF00A8CAFF00A8CAFF00A8CAFF00000000000000000000000000000000000000 + 0000000000000000000000000000000000004B91D400AFDBFF00AFDBFF00AFDB + FF00AFDBFF00AFDBFF00AFDBFF003883CC00AFDBFF00AFDBFF00AFDBFF00AFDB + FF00AFDBFF00AFDBFF00AFDBFF00AFDBFF00AFDBFF00AFDBFF00AFDBFF00AFDB + FF00AFDBFF00AFDBFF00AFDBFF00AFDBFF0064A4DF00A9D6FC00AFDBFF00AFDB + FF00AFDBFF00AFDBFF00AFDBFF003883CC000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000A8CAFF00A8CA + FF00A8CAFF00A8CAFF00A8CAFF00A8CAFF00A8CAFF00A8CAFF00A8CAFF00A8CA + FF00A8CAFF00A8CAFF00A8CAFF00000000000000000000000000000000000000 + 0000000000000000000000000000000000003682CB007DB6EA007DB6EA007DB6 + EA007DB6EA007DB6EA007DB6EA002878C5007DB6EA007DB6EA007DB6EA007DB6 + EA007DB6EA007DB6EA007DB6EA007DB6EA007DB6EA007DB6EA007DB6EA007DB6 + EA007DB6EA007DB6EA007DB6EA007DB6EA00488FD30079B3E8007DB6EA007DB6 + EA007DB6EA007DB6EA007DB6EA002878C5000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000A8CAFF00A8CA + FF00A8CAFF00A8CAFF00A8CAFF00A8CAFF00A8CAFF00A8CAFF00A8CAFF00A8CA + FF00A8CAFF00A8CAFF00A8CAFF00000000000000000000000000000000000000 + 0000000000000000000000000000000000003E88CF0091C5F20091C5F20091C5 + F20091C5F20091C5F20091C5F2002F7CC80091C5F20091C5F20091C5F20091C5 + F20091C5F20091C5F20091C5F20091C5F20091C5F20091C5F20091C5F20091C5 + F20091C5F20091C5F20091C5F20091C5F2005397D8008CC1F00091C5F20091C5 + F20091C5F20091C5F20091C5F2002F7CC8000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000A8CAFF00A8CA + FF00A8CAFF00A8CAFF00A8CAFF00A8CAFF00A8CAFF00A8CAFF00A8CAFF00A8CA + FF00A8CAFF00A8CAFF00A8CAFF00000000000000000000000000000000000000 + 0000000000000000000000000000000000004B91D400AFDBFF00AFDBFF00AFDB + FF00AFDBFF00AFDBFF00AFDBFF003883CC00AFDBFF00AFDBFF00AFDBFF00AFDB + FF00AFDBFF00AFDBFF00AFDBFF00AFDBFF00AFDBFF00AFDBFF00AFDBFF00AFDB + FF00AFDBFF00AFDBFF00AFDBFF00AFDBFF0064A4DF00A9D6FC00AFDBFF00AFDB + FF00AFDBFF00AFDBFF00AFDBFF003883CC000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000A8CAFF00A8CA + FF00A8CAFF00A8CAFF00A8CAFF00A8CAFF00A8CAFF00A8CAFF00A8CAFF00A8CA + FF00A8CAFF00A8CAFF00A8CAFF00000000000000000000000000000000000000 + 0000000000000000000000000000000000004B91D400AFDBFF00AFDBFF00AFDB + FF00AFDBFF00AFDBFF00AFDBFF003883CC00AFDBFF00AFDBFF00AFDBFF00AFDB + FF00AFDBFF00AFDBFF00AFDBFF00AFDBFF00AFDBFF00AFDBFF00AFDBFF00AFDB + FF00AFDBFF00AFDBFF00AFDBFF00AFDBFF0064A4DF00A9D6FC00AFDBFF00AFDB + FF00AFDBFF00AFDBFF00AFDBFF003883CC000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000D6D6D600CECECE00CECECE00CECE + CE00CECECE00CECECE00CECECE00CECECE00CECECE0000000000A8CAFF00A8CA + FF00A8CAFF00A8CAFF00A8CAFF00A8CAFF00A8CAFF00A8CAFF00A8CAFF00A8CA + FF00A8CAFF00A8CAFF00A8CAFF0000000000CECECE00CECECE00CECECE00CECE + CE00CECECE00CECECE00CECECE00D6D6D6003883CC0082BAEC0082BAEC0082BA + EC0082BAEC0082BAEC0082BAEC002A79C60082BAEC0082BAEC0082BAEC0082BA + EC0082BAEC0082BAEC0082BAEC0082BAEC0082BAEC0082BAEC0082BAEC0082BA + EC0082BAEC0082BAEC0082BAEC0082BAEC004A91D4007EB7EA0082BAEC0082BA + EC0082BAEC0082BAEC0082BAEC002A79C6000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000007394DE000042C6000042C6000042 + C6000042C6000042C6000042C6000042C6000042C60000000000A8CAFF00A8CA + FF00A8CAFF000000000000000000000000000000000000000000000000000000 + 0000A8CAFF00A8CAFF00A8CAFF00000000000042C6000042C6000042C6000042 + C6000042C6000042C6000042C6007394DE003D87CE008DC2F1008DC2F1008DC2 + F1008DC2F1008DC2F1008DC2F1002D7CC7008DC2F1008DC2F1008DC2F1008DC2 + F1008DC2F1008DC2F1008DC2F1008DC2F1008DC2F1008DC2F1008DC2F1008DC2 + F1008DC2F1008DC2F1008DC2F1008DC2F1005196D70088BFEE008DC2F1008DC2 + F1008DC2F1008DC2F1008DC2F1002D7CC7000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000042C600FFFFFF00FFFFFF00A5A5 + A500FFFFFF00FFFFFF00A5A5A500FFFFFF00FFFFFF0000000000A8CAFF00A8CA + FF00000000007F9AC1007F9AC1007F9AC1007F9AC1007F9AC1007F9AC1007F9A + C10000000000A8CAFF00A8CAFF0000000000FFFFFF00A5A5A500FFFFFF00FFFF + FF00A5A5A500FFFFFF00FFFFFF000042C6004B91D400AFDBFF00AFDBFF00AFDB + FF00AFDBFF00AFDBFF00AFDBFF003883CC00AFDBFF00AFDBFF00AFDBFF00AFDB + FF00AFDBFF00AFDBFF00AFDBFF00AFDBFF00AFDBFF00AFDBFF00AFDBFF00AFDB + FF00AFDBFF00AFDBFF00AFDBFF00AFDBFF0064A4DF00A9D6FC00AFDBFF00AFDB + FF00AFDBFF00AFDBFF00AFDBFF003883CC000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000042C600FFFFFF00FFFFFF00A5A5 + A500FFFFFF00FFFFFF00A5A5A500FFFFFF00FFFFFF0000000000A8CAFF000000 + 00007F9AC1007F9AC1007F9AC1007F9AC1007F9AC1007F9AC1007F9AC1007F9A + C1007F9AC10000000000A8CAFF0000000000FFFFFF00A5A5A500FFFFFF00FFFF + FF00A5A5A500FFFFFF00FFFFFF000042C6004B91D400AFDBFF00AFDBFF00AFDB + FF00AFDBFF00AFDBFF00AFDBFF003883CC00AFDBFF00AFDBFF00AFDBFF00AFDB + FF00AFDBFF00AFDBFF00AFDBFF00AFDBFF00AFDBFF00AFDBFF00AFDBFF00AFDB + FF00AFDBFF00AFDBFF00AFDBFF00AFDBFF0064A4DF00A9D6FC00AFDBFF00AFDB + FF00AFDBFF00AFDBFF00AFDBFF003883CC000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000042C600A5A5A500A5A5A500A5A5 + A500A5A5A500A5A5A500A5A5A500A5A5A500A5A5A50000000000A8CAFF000000 + 00007F9AC1007F9AC1007F9AC1007F9AC1007F9AC1007F9AC1007F9AC1007F9A + C1007F9AC10000000000A8CAFF0000000000A5A5A500A5A5A500A5A5A500A5A5 + A500A5A5A500A5A5A500A5A5A5000042C6004B91D400AFDBFF00AFDBFF00AFDB + FF00AFDBFF00AFDBFF00AFDBFF003883CC00AFDBFF00AFDBFF00AFDBFF00AFDB + FF00AFDBFF00AFDBFF00AFDBFF00AFDBFF00AFDBFF00AFDBFF00AFDBFF00AFDB + FF00AFDBFF00AFDBFF00AFDBFF00AFDBFF0064A4DF00A9D6FC00AFDBFF00AFDB + FF00AFDBFF00AFDBFF00AFDBFF003883CC000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000042C600FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00A5A5A500FFFFFF00FFFFFF0000000000A8CAFF000000 + 00007F9AC1007F9AC1007F9AC1007F9AC1007F9AC1007F9AC1007F9AC1007F9A + C1007F9AC10000000000A8CAFF0000000000A5A5A500FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF000042C600166ABD003380CA003380CA003380 + CA003380CA003380CA003380CA001066BB003380CA003380CA003380CA003380 + CA003380CA003380CA003380CA003380CA003380CA003380CA003380CA003380 + CA003380CA003380CA003380CA003380CA001D6FC000317EC9003380CA003380 + CA003380CA003380CA003380CA001066BB000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000042C600FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00A5A5A500FFFFFF00FFFFFF00A6A2A600000000007F9A + C1007F9AC1007F9AC1007F9AC1007F9AC1007F9AC1007F9AC1007F9AC1007F9A + C1007F9AC1007F9AC10000000000FFF0FF00A5A5A500FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF000042C6004B91D400AFDBFF00AFDBFF00AFDB + FF00AFDBFF00AFDBFF00AFDBFF003883CC00AFDBFF00AFDBFF00AFDBFF00AFDB + FF00AFDBFF00AFDBFF00AFDBFF00AFDBFF00AFDBFF00AFDBFF00AFDBFF00AFDB + FF00AFDBFF00AFDBFF00AFDBFF00AFDBFF0064A4DF00A9D6FC00AFDBFF00AFDB + FF00AFDBFF00AFDBFF00AFDBFF003883CC000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000042C600A5A5A500A5A5A500A5A5 + A500A5A5A500A5A5A500A5A5A500A5A5A500A5A5A500A79FA7000E0E0E007F9A + C1007F9AC1007F9AC1007F9AC1007F9AC1007F9AC1007F9AC1007F9AC1007F9A + C1007F9AC1007F9AC10000000000AD94AD00A5A5A500A5A5A500A5A5A500A5A5 + A500A5A5A500A5A5A500A5A5A5000042C6004B91D400AFDBFF00AFDBFF00AFDB + FF00AFDBFF00AFDBFF00AFDBFF003883CC00AFDBFF00AFDBFF00AFDBFF00AFDB + FF00AFDBFF00AFDBFF00AFDBFF00AFDBFF00AFDBFF00AFDBFF00AFDBFF00AFDB + FF00AFDBFF00AFDBFF00AFDBFF00AFDBFF0064A4DF00A9D6FC00AFDBFF00AFDB + FF00AFDBFF00AFDBFF00AFDBFF003883CC000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000042C600FFFFFF00FFFFFF00FFFF + FF00FFFFFF00A5A5A500FFFFFF00FFFFFF00A5A5A500FFF2FF00101010007F9A + C1007F9AC1007F9AC1007F9AC1007F9AC1007F9AC1007F9AC1007F9AC1007F9A + C1007F9AC1007F9AC1003A3A3A00A5A3A500FFFFFF00FFFFFF00A5A5A500FFFF + FF00FFFFFF00FFFFFF00FFFFFF000042C6004B91D400AFDBFF00AFDBFF00AFDB + FF00AFDBFF00AFDBFF00AFDBFF003883CC00AFDBFF00AFDBFF00AFDBFF00AFDB + FF00AFDBFF00AFDBFF00AFDBFF00AFDBFF00AFDBFF00AFDBFF00AFDBFF00AFDB + FF00AFDBFF00AFDBFF00AFDBFF00AFDBFF0064A4DF00A9D6FC00AFDBFF00AFDB + FF00AFDBFF00AFDBFF00AFDBFF003883CC000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000042C600FFFFFF00FFFFFF00FFFF + FF00FFFFFF00A5A5A500FFFFFF00FFFFFF00A5A5A500FFFFFF00FFEEFF000A0A + 0A007F9AC1007F9AC1007F9AC1007F9AC1007F9AC1007F9AC1007F9AC1007F9A + C1007F9AC10000000000FFF8FF00A8A8A800FFFFFF00FFFFFF00A5A5A500FFFF + FF00FFFFFF00FFFFFF00FFFFFF000042C600166ABE003480CA003480CA003480 + CA003480CA003480CA003480CA001166BB003480CA003480CA003480CA003480 + CA003480CA003480CA003480CA003480CA003480CA003480CA003480CA003480 + CA003480CA003480CA003480CA003480CA001E70C100327FCA003480CA003480 + CA003480CA003480CA003480CA001166BB000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000042C600A5A5A500A5A5A500A5A5 + A500A5A5A500A5A5A500A5A5A500A5A5A500A5A5A500A5A5A500A5A5A500ACAC + AC001D1D1D00000000007F9AC1007F9AC1007F9AC1007F9AC1007F9AC1000000 + 000000000000AD94AD00ADADAD00A5A5A500A5A5A500A5A5A500A5A5A500A5A5 + A500A5A5A500FFFFFF00FFFFFF000042C6004B91D400AFDBFF00AFDBFF00AFDB + FF00AFDBFF00AFDBFF00AFDBFF003883CC00AFDBFF00AFDBFF00AFDBFF00AFDB + FF00AFDBFF00AFDBFF00AFDBFF00AFDBFF00AFDBFF00AFDBFF00AFDBFF00AFDB + FF00AFDBFF00AFDBFF00AFDBFF00AFDBFF0064A4DF00A9D6FC00AFDBFF00AFDB + FF00AFDBFF00AFDBFF00AFDBFF003883CC000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000042C600FFFFFF00FFFFFF00FFFF + FF00A5A5A500FFFFFF00FFFFFF00A5A5A500FFFFFF00FFFFFF00A5A5A500FFFF + FF00FFFFFF00AEAEAE001F1F1F0000000000000000000000000000000000AC96 + AC00FFF8FF00FFFFFF00A5A5A500FFFFFF00FFFFFF00A5A5A500FFFFFF00FFFF + FF00A5A5A500FFFFFF00FFFFFF000042C6004B91D400AFDBFF00AFDBFF00AFDB + FF00AFDBFF00AFDBFF00AFDBFF003883CC00AFDBFF00AFDBFF00AFDBFF00AFDB + FF00AFDBFF00AFDBFF00AFDBFF00AFDBFF00AFDBFF00AFDBFF00AFDBFF00AFDB + FF00AFDBFF00AFDBFF00AFDBFF00AFDBFF0064A4DF00A9D6FC00AFDBFF00AFDB + FF00AFDBFF00AFDBFF00AFDBFF003883CC000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000042C600FFFFFF00FFFFFF00FFFF + FF00A5A5A500FFFFFF00FFFFFF00A5A5A500FFFFFF00FFFFFF00A5A5A500FFFF + FF00FFFFFF00A5A5A500FFFFFF00FFFFFF00A5A5A500FFFFFF00FFFFFF00A5A5 + A500FFFFFF00FFFFFF00A5A5A500FFFFFF00FFFFFF00A5A5A500FFFFFF00FFFF + FF00A5A5A500FFFFFF00FFFFFF000042C6004B91D400AFDBFF00AFDBFF00AFDB + FF00AFDBFF00AFDBFF00AFDBFF003883CC00AFDBFF00AFDBFF00AFDBFF00AFDB + FF00AFDBFF00AFDBFF00AFDBFF00AFDBFF00AFDBFF00AFDBFF00AFDBFF00AFDB + FF00AFDBFF00AFDBFF00AFDBFF00AFDBFF0064A4DF00A9D6FC00AFDBFF00AFDB + FF00AFDBFF00AFDBFF00AFDBFF003883CC000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000042C600A5A5A500A5A5A500A5A5 + A500A5A5A500A5A5A500A5A5A500A5A5A500A5A5A500A5A5A500A5A5A500A5A5 + A500A5A5A500A5A5A500A5A5A500A5A5A500A5A5A500A5A5A500A5A5A500A5A5 + A500A5A5A500A5A5A500A5A5A500A5A5A500A5A5A500A5A5A500A5A5A500A5A5 + A500A5A5A500A5A5A500A5A5A5000042C600478ED300A6D4FB00A6D4FB00A6D4 + FB00A6D4FB00A6D4FB00A6D4FB003581CB00A6D4FB00A6D4FB00A6D4FB00A6D4 + FB00A6D4FB00A6D4FB00A6D4FB00A6D4FB00A6D4FB00A6D4FB00A6D4FB00A6D4 + FB00A6D4FB00A6D4FB00A6D4FB00A6D4FB005FA0DD00A0D0F900A6D4FB00A6D4 + FB00A6D4FB00A6D4FB00A6D4FB003581CB000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000042C600FFFFFF00FFFFFF00A5A5 + A500FFFFFF00FFFFFF00A5A5A500FFFFFF00FFFFFF00A5A5A500FFFFFF00FFFF + FF00A5A5A500FFFFFF00FFFFFF00A5A5A500FFFFFF00FFFFFF00A5A5A500FFFF + FF00FFFFFF00A5A5A500FFFFFF00FFFFFF00A5A5A500FFFFFF00FFFFFF00A5A5 + A500FFFFFF00FFFFFF00FFFFFF000042C6002D7BC70068A7E10068A7E10068A7 + E10068A7E10068A7E10068A7E1002273C20068A7E10068A7E10068A7E10068A7 + E10068A7E10068A7E10068A7E10068A7E10068A7E10068A7E10068A7E10068A7 + E10068A7E10068A7E10068A7E10068A7E1003C86CE0065A4DF0068A7E10068A7 + E10068A7E10068A7E10068A7E1002273C2000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000042C600FFFFFF00FFFFFF00A5A5 + A500FFFFFF00FFFFFF00A5A5A500FFFFFF00FFFFFF00A5A5A500FFFFFF00FFFF + FF00A5A5A500FFFFFF00FFFFFF00A5A5A500FFFFFF00FFFFFF00A5A5A500FFFF + FF00FFFFFF00A5A5A500FFFFFF00FFFFFF00A5A5A500FFFFFF00FFFFFF00A5A5 + A500FFFFFF00FFFFFF00FFFFFF000042C6004B91D400AFDBFF00AFDBFF00AFDB + FF00AFDBFF00AFDBFF00AFDBFF003883CC00AFDBFF00AFDBFF00AFDBFF00AFDB + FF00AFDBFF00AFDBFF00AFDBFF00AFDBFF00AFDBFF00AFDBFF00AFDBFF00AFDB + FF00AFDBFF00AFDBFF00AFDBFF00AFDBFF0064A4DF00A9D6FC00AFDBFF00AFDB + FF00AFDBFF00AFDBFF00AFDBFF003883CC000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000007394DE000042C6000042C6000042 + C6000042C6000042C6000042C6000042C6000042C6000042C6000042C6000042 + C6000042C6000042C6000042C6000042C6000042C6000042C6000042C6000042 + C6000042C6000042C6000042C6000042C6000042C6000042C6000042C6000042 + C6000042C6000042C6000042C6007394DE004B91D400AFDBFF00AFDBFF00AFDB + FF00AFDBFF00AFDBFF00AFDBFF003883CC00AFDBFF00AFDBFF00AFDBFF00AFDB + FF00AFDBFF00AFDBFF00AFDBFF00AFDBFF00AFDBFF00AFDBFF00AFDBFF00AFDB + FF00AFDBFF00AFDBFF00AFDBFF00AFDBFF0064A4DF00A9D6FC00AFDBFF00AFDB + FF00AFDBFF00AFDBFF00AFDBFF003883CC000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000004B91D400AFDBFF00AFDBFF00AFDB + FF00AFDBFF00AFDBFF00AFDBFF003883CC00AFDBFF00AFDBFF00AFDBFF00AFDB + FF00AFDBFF00AFDBFF00AFDBFF00AFDBFF00AFDBFF00AFDBFF00AFDBFF00AFDB + FF00AFDBFF00AFDBFF00AFDBFF00AFDBFF0064A4DF00A9D6FC00AFDBFF00AFDB + FF00AFDBFF00AFDBFF00AFDBFF003883CC000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000002072C2004A91D4004A91D4004A91 + D4004A91D4004A91D4004A91D400186CBE004A91D4004A91D4004A91D4004A91 + D4004A91D4004A91D4004A91D4004A91D4004A91D4004A91D4004A91D4004A91 + D4004A91D4004A91D4004A91D4004A91D4002B79C600488FD3004A91D4004A91 + D4004A91D4004A91D4004A91D400186CBE000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000D6D6D600CECECE00CECECE00CECE + CE00CECECE00CECECE00CECECE00CECECE00CECECE00CECECE00CECECE00CECE + CE00CECECE00CECECE00CECECE00CECECE00CECECE00CECECE00CECECE00CECE + CE00CECECE00CECECE00CECECE00CECECE00CECECE00CECECE00CECECE00CECE + CE00CECECE00CECECE00CECECE00D6D6D6000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000004242420042424200424242004242 + 4200424242004242420063636300848484004242420042424200424242004242 + 4200424242004242420042424200424242004242420042424200424242004242 + 4200424242004242420042424200424242004242420042424200424242004242 + 4200424242004242420042424200424242000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600ADADAD00D6D6D600CECECE00C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C6000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600ADADAD00D6D6D600CECECE00C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C6000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000000000000000000000D6D6 + D600CECECE00CECECE00CECECE00CECECE00CECECE00CECECE00CECECE00CECE + CE00D6D6D6000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600A5A5A500D6D6D600C6C6C600C6C6C600C6C6C6008484 + 8400848484008484840084848400848484008484840084848400C6C6C600C6C6 + C600C6C6C600C6C6C6008484840084848400C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C6000000000000000000000000000000 + 000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000D6D6D600D6D6 + D600848484006363630063636300424242004242420063636300636363008484 + 8400D6D6D600D6D6D60000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000C6C6C600BDBDBD00B5B5B500B5B5 + B500B5B5B500B5B5B5009C9C9C00C6C6C600BDBDBD00B5B5B500B5B5B5008484 + 8400B5B5B500B5B5B500B5B5B500B5B5B500B5B5B50084848400B5B5B500B5B5 + B500B5B5B50084848400C6C6BD00BDBDBD008484840084848400C6C6C600CECE + CE00CECECE00CECECE0084848400848484000000000000000000000000000000 + 0000FFFFFF00FFFFFF00EFEFEF00EFEFEF00EFEFEF00EFEFEF00EFEFEF00EFEF + EF00F7F7F700FFFFFF0000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000D6D6D600636363006363 + 6300A5A5A500C6C6C600D6D6D600D6D6D600D6D6D600D6D6D600C6C6C600A5A5 + A5006363630063636300D6D6D600000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000315AC6000042C6000042C6000042 + C6000042C6000042C6000042C6000042C6000042C6000042C6000042C6000042 + C6000042C6000042C6000042C6000042C6000042C6000042C6000042C6000042 + C6000042C6000042C600315AC600E7E7E700C6C6C600C6C6C60084848400CECE + CE00CECECE00CECECE00CECECE0084848400FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00EFEFEF00DEDEDE00D6D6D600D6D6D600D6D6D600D6D6D600D6D6 + D600E7E7E700F7F7F700FFFFFF00000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000D6D6D600CECECE0063636300C6C6C600D6D6 + D600D6D6D600D6D6D600D6D6D600D6D6D600D6D6D600D6D6D600D6D6D600D6D6 + D600D6D6D600C6C6C60063636300CECECE00D6D6D60000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000042C600FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF000042C600B5B5B500F7F7F700C6C6C60084848400CECE + CE00CECECE00CECECE00CECECE00CECECE00EFEFEF00EFEFEF00EFEFEF00EFEF + EF00E7E7E700DEDEDE0000000000000000000000000000000000000000000000 + 0000D6D6D600E7E7E700F7F7F700FFFFFF00FFFFFF00FFFFFF00FFFFFF000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000C6C6C60042424200C6C6C600DEDEDE00DEDE + DE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00637BD600DEDEDE00DEDEDE00DEDE + DE00DEDEDE00DEDEDE00C6C6C60042424200C6C6C60000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000042C600FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF000042C600E7E7E700F7F7F70084848400C6C6C600D6D6 + D600D6D6D600D6D6D60084848400D6D6D600DEDEDE00D6D6D600D6D6D600D6D6 + D600CECECE00CECECE00000000000031A5000031A5000031A5000031A5000031 + A50000000000D6D6D600E7E7E700E7E7E700EFEFEF00EFEFEF00F7F7F700FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000D6D6D60063636300C6C6C600DEDEDE00DEDEDE00E7E7 + E700E7E7E700E7E7E700E7E7E700E7E7E700315AC600637BD600E7E7E700E7E7 + E700E7E7E700DEDEDE00DEDEDE00C6C6C60063636300D6D6D600000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000042C600FFFFFF00FFFFFF004242 + 42004242420042424200424242004242420042424200FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF000042C600E7E7E700C6C6C60084848400D6D6D600D6D6 + D600D6D6D600D6D6D600D6D6D600848484000000000000000000000000000000 + 00000000000000000000000000000031A5000031A5000031A5000031A5000031 + A5000031A50000000000CECECE00CECECE00D6D6D600D6D6D600E7E7E700E7E7 + E700EFEFEF00EFEFEF00EFEFEF00EFEFEF00EFEFEF00F7F7F700FFFFFF00FFFF + FF00000000000000000000000000000000000000000000000000000000000000 + 000000000000D6D6D60063636300C6C6C600DEDEDE00DEDEDE00DEDEDE00E7E7 + E700E7E7E700E7E7E700E7E7E700E7E7E700315AC600315AC600637BD600E7E7 + E700E7E7E700DEDEDE00DEDEDE00DEDEDE00C6C6C60063636300D6D6D6000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000042C600FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF000042C6009C9C9C00A5A5A500C6C6C600D6D6D600D6D6 + D600D6D6D600D6D6D600D6D6D600D6D6D60000000000E7E7E700D6D6D600C6C6 + C600B5B5B500A5A5A500000000000042C6000042C6000042C6000042C6000042 + C6000042C6000031A50000000000000000000000000000000000CECECE00CECE + CE00CECECE00CECECE00D6D6D600D6D6D600D6D6D600E7E7E700EFEFEF00F7F7 + F700FFFFFF000000000000000000000000000000000000000000000000000000 + 000000000000D6D6D60063636300DEDEDE00DEDEDE00DEDEDE00637BD600315A + C600315AC600315AC600315AC600315AC600315AC6000042C600315AC600637B + D600E7E7E700DEDEDE00DEDEDE00DEDEDE00DEDEDE0063636300D6D6D6000000 + 000000000000000000000000000000000000000000000000000000000000CECE + CE0000000000000000000000000000000000000000000000000000000000CECE + CE000000000000000000000000000000000000000000CECECE00000000000000 + 00000000000000000000000000000000000000000000CECECE00000000000000 + 00000000000000000000CECECE00000000000042C600FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF000042C600C6C6C600D6D6D600DEDEDE00DEDEDE00DEDE + DE00DEDEDE00DEDEDE00DEDEDE00DEDEDE000000000000000000000000000000 + 00000000000000000000000000000031A5000031A5000031A5000031A5000031 + A5000031A5000031A5000031A5000031A5000031A50000000000000000000000 + 00000000000000000000000000000000000000000000CECECE00D6D6D600E7E7 + E700F7F7F700FFFFFF0000000000000000000000000000000000000000000000 + 00000000000084848400A5A5A500E7E7E700E7E7E700E7E7E700315AC6000042 + C6000042C6000042C6000042C6000042C6000042C6000042C6000042C600315A + C600637BD600E7E7E700E7E7E700E7E7E700E7E7E700A5A5A500848484000000 + 00000000000000000000000000000000000000000000000000000042C600CECE + CE000000000000000000000000000000000000000000000000000042C600CECE + CE00000000000000000000000000000000000042C600CECECE00000000000000 + 0000000000000000000000000000B1C3ED000042C600B1C3ED00CECECE000000 + 0000000000000042C600CECECE00000000000042C6000042C6000042C6000042 + C6000042C6000042C6000042C6000042C6000042C6000042C6000042C6000042 + C6000042C6000042C6000042C6000042C6000042C6000042C6000042C6000042 + C6000042C6000042C6000042C600C6C6C600D6D6D600DEDEDE00DEDEDE00DEDE + DE00DEDEDE00DEDEDE00DEDEDE00DEDEDE000000000000000000000000000000 + 00000000000000000000000000000042C6000042C6000042C6000042C6000042 + C6000042C6000042C6000042C6000042C6000042C60000000000E7E7E700DEDE + DE00DEDEDE00CECECE00CECECE00CECECE00C6C6C6000000000000000000D6D6 + D600E7E7E700F7F7F700FFFFFF00000000000000000000000000000000000000 + 00000000000063636300C6C6C600E7E7E700E7E7E700E7E7E700315AC6000042 + C6000042C6000042C6000042C6000042C6000042C6000042C6000042C6000042 + C600315AC600637BD600E7E7E700E7E7E700E7E7E700C6C6C600636363000000 + 00000000000000000000000000000000000000000000000000004576DB00B1C3 + ED00CECECE0000000000000000000000000000000000B1C3ED004576DB000000 + 00000000000000000000CECECE00CECECE000042C600CECECE00000000000000 + 0000CECECE0000000000000000000042C600CECECE000042C600000000000000 + 0000000000000042C600CECECE00000000000042C600FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF000042C6004A4A4A004242420042424200424242004242 + 42004242420042424200424242004242420000000000D6D6D600D6D6D600CECE + CE00CECECE00CECECE00000000000031A5000031A5000031A5000031A5000042 + C6000042C600315AC600315AC600315AC600315AC60000000000FFFFFF00FFFF + FF00FFFFFF00F7F7F700F7F7F700EFEFEF00E7E7E700DEDEDE00CECECE000000 + 0000D6D6D600E7E7E700F7F7F700FFFFFF000000000000000000000000000000 + 00000000000063636300E7E7E700E7E7E700E7E7E700E7E7E700315AC6000042 + C6000042C6000042C6000042C6000042C6000042C6000042C6000042C6000042 + C6000042C600315AC600637BD600E7E7E700E7E7E700E7E7E700636363000000 + 0000000000000000000000000000000000000000000000000000B1C3ED000042 + C600CECECE00CECECE00CECECE00CECECE00CECECE000042C600B1C3ED000000 + 0000B1C3ED004576DB004576DB00B1C3ED000042C600CECECE00000000004576 + DB00CECECE0000000000000000000042C6000042C600B1C3ED00000000000000 + 0000000000000042C600CECECE00000000000042C600FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF000042C600E7E7E7000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000315AC600315AC600315AC600315AC600315A + C6007394DE00EFEFEF00FFFFFF00FFFFFF00FFFFFF0000000000000000000000 + 00000000000000000000000000005A5A5A00FFFFFF00FFFFFF00EFEFEF00DEDE + DE0000000000D6D6D600E7E7E700F7F7F7000000000000000000000000000000 + 00000000000042424200EFEFEF00EFEFEF00EFEFEF00EFEFEF00315AC6000042 + C6000042C6000042C6000042C6000042C6000042C6000042C6000042C6000042 + C6000042C6000042C600315AC600637BD600EFEFEF00EFEFEF00424242000000 + 0000000000000000000000000000000000000000000000000000000000004576 + DB000042C6000042C6000042C6000042C6000042C6004576DB00000000000000 + 00004576DB00CECECE007394DE004576DB000042C600CECECE00B1C3ED004576 + DB000000000000000000000000000042C600CECECE0000000000000000000000 + 0000000000000042C600CECECE00000000000042C600FFFFFF00FFFFFF004242 + 4200424242004242420042424200424242004242420042424200424242004242 + 4200424242004242420042424200FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF000042C600E7E7E7000000000000000000000000000000 + 00000000000000000000000000000000000000000000E7E7E700D6D6D600C6C6 + C600B5B5B500A5A5A50000000000EFEFEF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00EFEFEF007394DE0000000000000000000000000000000000000000000000 + 0000000000000000000000000000DEDEDE00000000005A5A5A00FFFFFF00F7F7 + F700E7E7E70000000000D6D6D600EFEFEF000000000000000000000000000000 + 00000000000042424200EFEFEF00EFEFEF00EFEFEF00EFEFEF00315AC6000042 + C6000042C6000042C6000042C6000042C6000042C6000042C6000042C6000042 + C6000042C6000042C600315AC600637BD600EFEFEF00EFEFEF00424242000000 + 000000000000000000000000000000000000000000000000000000000000B1C3 + ED000042C600CECECE0000000000000000000042C600B1C3ED00000000000000 + 00000042C600CECECE0000000000000000000042C6000042C6004576DB00B1C3 + ED000000000000000000000000004576DB007394DE00CECECE00000000000000 + 0000000000000042C600CECECE00000000000042C600FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF000042C600E7E7E7000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000007394DE007394DE007394DE007394DE007394 + DE00315AC6000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000DEDEDE005A5A5A00FFFF + FF00FFFFFF00EFEFEF0000000000E7E7E7000000000000000000000000000000 + 00000000000063636300EFEFEF00EFEFEF00EFEFEF00EFEFEF00315AC6000042 + C6000042C6000042C6000042C6000042C6000042C6000042C6000042C6000042 + C6000042C600315AC600637BD600EFEFEF00EFEFEF00EFEFEF00636363000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00004576DB00B1C3ED0000000000B1C3ED004576DB0000000000000000000000 + 00004576DB00000000007394DE004576DB000042C600CECECE00000000000000 + 0000000000000000000000000000000000000042C6007394DE00000000000000 + 0000000000000042C600CECECE00000000000042C600FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF000042C600E7E7E7000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000315AC600315AC600315AC600315AC600315A + C600000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000DEDEDE000000 + 0000FFFFFF00FFFFFF0000000000D6D6D6000000000000000000000000000000 + 00000000000063636300C6C6C600EFEFEF00EFEFEF00EFEFEF00315AC6000042 + C6000042C6000042C6000042C6000042C6000042C6000042C6000042C6000042 + C600315AC600637BD600EFEFEF00EFEFEF00EFEFEF00C6C6C600636363000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000B1C3ED000042C600CECECE000042C600B1C3ED0000000000000000000000 + 0000B1C3ED004576DB004576DB00B1C3ED000042C600CECECE00000000000000 + 00000000000000000000000000000042C600B1C3ED00CECECE00000000000000 + 0000000000004576DB0000000000000000000042C600FFFFFF00FFFFFF004242 + 420042424200424242004242420042424200FFFFFF0042424200424242004242 + 4200424242004242420042424200FFFFFF004242420042424200424242004242 + 4200FFFFFF00FFFFFF000042C600E7E7E7000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000005A5A + 5A00FFFFFF00FFFFFF00FFFFFF00000000000000000000000000000000000000 + 00000000000084848400A5A5A500F7F7F700F7F7F700F7F7F700315AC6000042 + C6000042C6000042C6000042C6000042C6000042C6000042C6000042C600315A + C600637BD600F7F7F700F7F7F700F7F7F700F7F7F700A5A5A500848484000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000004576DB00000000004576DB000000000000000000000000000000 + 0000CECECE00CECECE00CECECE00CECECE000042C600CECECE00CECECE00CECE + CE00CECECE00CECECE00CECECE00B1C3ED000042C60000000000CECECE00CECE + CE004576DB00B1C3ED0000000000000000000042C600FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF000042C600E7E7E7000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000000000000000000000DEDE + DE0000000000FFFFFF00FFFFFF00000000000000000000000000000000000000 + 000000000000D6D6D60063636300F7F7F700F7F7F700F7F7F700637BD600315A + C600315AC600315AC600315AC600315AC600315AC6000042C600315AC600637B + D600E7E7E700F7F7F700F7F7F700F7F7F700F7F7F70063636300D6D6D6000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000B1C3ED000042C600B1C3ED000000000000000000000000000042 + C6000042C6000042C6000042C6000042C6000042C6000042C6000042C6000042 + C6000042C6000042C6000000000000000000B1C3ED004576DB000042C6004576 + DB00B1C3ED000000000000000000000000000042C600FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF000042C600E7E7E7000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00005A5A5A00FFFFFF00FFFFFF00525252000000000000000000000000000000 + 0000000000000000000063636300D6D6D600F7F7F700F7F7F700F7F7F700E7E7 + E700E7E7E700E7E7E700E7E7E700E7E7E700315AC600315AC600637BD600E7E7 + E700E7E7E700F7F7F700F7F7F700F7F7F700D6D6D60063636300000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000042C600FFFFFF00FFFFFF004242 + 420042424200424242004242420042424200424242004242420042424200FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF000042C600E7E7E7000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000084848400FFFFFF00FFFFFF00848484000000000000000000000000000000 + 000000000000000000000000000063636300D6D6D600FFFFFF00FFFFFF00E7E7 + E700E7E7E700E7E7E700E7E7E700E7E7E700315AC600637BD600E7E7E700E7E7 + E700E7E7E700FFFFFF00FFFFFF00D6D6D6006363630000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000042C600FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF000042C600E7E7E7000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000A5A5A500F7F7F700F7F7F700A5A5A5000000000000000000000000000000 + 00000000000000000000000000000000000042424200D6D6D600FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00637BD600FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00D6D6D600424242000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000042C600FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF000042C600E7E7E7000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000C6C6C600F7F7F700F7F7F700BDBDBD000000000000000000000000000000 + 000000000000000000000000000000000000C6C6C60063636300D6D6D600FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00D6D6D60063636300C6C6C6000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000042C600FFFFFF00FFFFFF004242 + 42004242420042424200424242004242420042424200FFFFFF00424242004242 + 4200424242004242420042424200FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF000042C600E7E7E7000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000DEDEDE00FFFFFF00FFFFFF00DEDEDE000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000636363006363 + 6300A5A5A500C6C6C600FFFFFF00FFFFFF00FFFFFF00FFFFFF00C6C6C600A5A5 + A500636363006363630000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000042C600FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF000042C600E7E7E7000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000000000000000000000D6D6 + D600848484006363630063636300424242004242420063636300636363008484 + 8400D6D6D6000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000042C600FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF000042C600E7E7E7000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000042C600FFFFFF00FFFFFF004242 + 4200424242004242420042424200424242004242420042424200FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF000042C600E7E7E7000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000042C600FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF000042C600E7E7E7000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000042C600FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF000042C600000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000315AC6000042C6000042C6000042 + C6000042C6000042C6000042C6000042C6000042C6000042C6000042C6000042 + C6000042C6000042C6000042C6000042C6000042C6000042C6000042C6000042 + C6000042C6000042C600315AC600000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000000000000000000000D6D6 + D600CECECE00CECECE00CECECE00CECECE00CECECE00CECECE00CECECE00CECE + CE00CECECE00D6D6D60000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000BDBDBD00B5B5B500C6C6 + C600D6D6D600DEDEDE0000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000042 + C6000042C6000042C6000042C6000042C6000042C6000042C6000042C6000042 + C6000042C6000042C60000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000637BD600315AC6000042C6000042 + C600315AC600637BD6008494C6008494C600ADADAD00BDBDBD00CECECE00D6D6 + D600DEDEDE000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000002963 + CE00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF000042C60000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000315AC600EFDED600F7F7E700F7F7E700F7F7 + E700D6D6CE00CECEC600A5A59C00637BD600315AC6000042C6000042C600315A + C600637BD6008494C6009C9C9C00ADADAD00BDBDBD00D6D6D600000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000002963 + CE00FFFFFF00FFFFFF00FFFFFF000042C600FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF000042C60084848400ADADAD00D6D6D600EFEFEF00000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000042C600EFDED600F7F7E700F7F7E700F7F7 + E700F7F7EF00F7F7EF00F7F7EF00F7F7EF00F7F7EF00F7F7EF00F7F7EF00CECE + C600C6C6BD00637BD600315AC6000042C6000042C6008494C600DEDEDE000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000002963 + CE00FFFFFF00FFFFFF000042C600FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF000042C60063636300636363007373730094949400B5B5B500D6D6 + D600000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000042C600EFDED600F7F7E7007B7B73006B6B + 63007B7B73007B7B73006B6B6B00F7F7EF00F7F7EF00F7F7EF00F7F7F700F7F7 + F700F7FFF700FFFFF700FFFFF700FFFFF700FFFFF700315AC600D6D6D6000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000002963 + CE00FFFFFF00FFFFFF000042C6000042C600FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF000042C6006B6B6B006363630063636300636363006B6B6B007B7B + 7B0094949400C6C6C600EFEFEF00000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000042C600EFE7D600F7F7E700F7F7E700F7F7 + EF00F7F7EF00F7F7EF00F7F7EF00F7F7EF00F7F7EF00F7F7EF00F7F7F700F7FF + F700FFFFF700FFFFF700FFFFF700FFFFF700FFFFFF000042C600D6D6D6000000 + 000000000000000000000000000000000000D6D6D600CECECE00CECECE00CECE + CE00CECECE00CECECE00CECECE00CECECE00CECECE00CECECE00CECECE00CECE + CE00CECECE00CECECE00CECECE00CECECE00CECECE00CECECE00CECECE00CECE + CE00CECECE00CECECE00CECECE00CECECE00CECECE00CECECE00CECECE00CECE + CE00CECECE00CECECE00CECECE00D6D6D6000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000002963 + CE00FFFFFF00FFFFFF000042C6000042C6000042C600FFFFFF000042C600FFFF + FF00FFFFFF000042C600CECECE00ADADAD00848484006B6B6B00636363006363 + 63006363630063636300737373009C9C9C00C6C6C600EFEFEF00000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000042C600EFE7D600F7F7E7007B7B73007B7B + 73007B7B73006B6B6B009C9C9400F7F7EF00F7F7EF00F7F7F700F7FFF700F7FF + F700FFFFF700FFFFF700FFFFF700FFFFFF00FFFFFF000042C600D6D6D6000000 + 0000000000000000000000000000000000004242420042424200424242004242 + 4200424242004242420042424200424242004242420042424200424242004242 + 4200424242004242420042424200424242004242420042424200424242004242 + 4200424242004242420042424200424242004242420042424200424242004242 + 420042424200424242004242420042424200D6D6D600CECECE00CECECE00CECE + CE00CECECE00CECECE00CECECE00CECECE00CECECE00CECECE00CECECE00CECE + CE00CECECE00CECECE00CECECE00CECECE00CECECE00CECECE00CECECE00CECE + CE00CECECE00CECECE00CECECE00CECECE00CECECE00CECECE00CECECE00CECE + CE00CECECE00CECECE00CECECE00D6D6D6000000000000000000000000002963 + CE00FFFFFF00FFFFFF00FFFFFF000042C6000042C6000042C6000042C600FFFF + FF00FFFFFF000042C600E7E7E700E7E7E700D6D6D600BDBDBD009C9C9C008484 + 84006B6B6B006363630063636300636363006B6B6B0084848400ADADAD00DEDE + DE00000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000042C600EFE7D600F7F7EF00F7F7EF00F7F7 + EF00F7F7EF00F7F7EF00F7F7EF00F7F7EF00F7F7F700F7FFF700F7FFF700FFFF + F700FFFFF700FFFFF700FFFFFF00FFFFFF00FFFFFF000042C600D6D6D6000000 + 00000000000000000000000000000000000042424200C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600CECECE00CECECE00CECECE00CECECE00CECE + CE00CECECE00CECECE00CECECE00CECECE00CECECE00CECECE00CECECE00CECE + CE00CECECE00D6D6D600D6D6D600424242004242420042424200424242004242 + 4200424242004242420042424200424242004242420042424200424242004242 + 4200424242004242420042424200424242004242420042424200424242004242 + 4200424242004242420042424200424242004242420042424200424242004242 + 4200424242004242420042424200424242000000000000000000000000002963 + CE00FFFFFF00FFFFFF00FFFFFF00FFFFFF000042C6000042C6000042C600FFFF + FF00FFFFFF000042C600E7E7E700E7E7E700E7E7E700E7E7E700DEDEDE00CECE + CE00B5B5B500949494007B7B7B00636363006363630063636300636363008484 + 8400DEDEDE000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000042C600EFE7DE00F7F7EF00F7F7EF00F7F7 + EF00F7F7EF00F7F7EF00F7F7EF00F7F7F700F7F7F700F7FFF700FFFFF700FFFF + F700FFFFF700FFFFF700FFFFFF00FFFFFF00FFFFFF000042C600D6D6D6000000 + 00000000000000000000000000000000000042424200C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6008484 + 8400424242004242420042424200424242004242420042424200424242008484 + 8400CECECE00CECECE00CECECE00CECECE00CECECE00CECECE00CECECE00D6D6 + D600D6D6D600D6D6D600D6D6D60042424200C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C6000000000000000000000000002963 + CE00FFFFFF00FFFFFF00FFFFFF000042C6000042C6000042C6000042C600FFFF + FF00FFFFFF000042C600F7F7F700EFEFEF00E7E7E700E7E7E700E7E7E700E7E7 + E700E7E7E700DEDEDE00C6C6C6009C9C9C006B6B6B0063636300636363006363 + 6300ADADAD000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000042C600EFE7DE00F7F7EF00F7F7EF00F7F7 + EF00F7F7EF00F7F7EF00F7F7EF00F7F7F700F7FFF700FFFFF700FFFFF700FFFF + F700FFFFF700FFFFFF00FFFFFF00FFFFFF00FFFFFF000042C600D6D6D6000000 + 00000000000000000000000000000000000042424200C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6004242 + 4200DEDEDE00D6D6D600D6D6D600D6D6D600D6D6D600D6D6D600C6C6C6004242 + 4200CECECE00CECECE00CECECE00CECECE00CECECE00CECECE00D6D6D600D6D6 + D600D6D6D600D6D6D600D6D6D60042424200C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C6000000000000000000000000002963 + CE00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF000042C600FFFFFF00FFFFFF00EFEFEF00E7E7E700E7E7E700E7E7 + E700E7E7E700E7E7E700E7E7E700DEDEDE009494940063636300636363006363 + 6300949494000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000042C600EFE7DE00E7E7DE00B5BDB500D6D6 + CE00F7F7EF00F7F7EF00F7F7F700F7FFF700F7FFF700FFFFF700FFFFF700FFFF + F700FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000042C600D6D6D6000000 + 00000000000000000000000000000000000042424200C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600CECECE004242 + 4200DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE004242 + 4200CECECE00CECECE00CECECE00CECECE00D6D6D600D6D6D600D6D6D600D6D6 + D600D6D6D600D6D6D600D6D6D600424242008484840084848400848484008484 + 84008484840084848400C6C6C600C6C6C600C6C6C600C6C6C600849CCE001852 + D6004A73D6009CADD600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C6000000000000000000000000002963 + CE002963CE002963CE002963CE002963CE002963CE002963CE002963CE002963 + CE002963CE000042C600FFFFFF00FFFFFF00FFFFFF00F7F7F700E7E7E700E7E7 + E700E7E7E700E7E7E700E7E7E700E7E7E700B5B5B50063636300636363006363 + 6300BDBDBD000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000042C600EFE7DE00E7E7DE00B5BDB5008C8C + 84007B7B7B006B6B6B007B7B7B007B7B7B006B6B6B007B7B7B009C9C9C00BDBD + BD00BDBDBD00FFFFFF00FFFFFF00FFFFFF00FFFFFF000042C600D6D6D6000000 + 00000000000000000000000000000000000042424200C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600CECECE00CECECE00CECECE008484 + 8400424242004242420042424200424242004242420042424200424242008484 + 8400CECECE00CECECE00D6D6D600D6D6D600D6D6D600D6D6D600D6D6D600D6D6 + D600D6D6D600D6D6D600D6D6D60042424200C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C60084848400C6C6C600C6C6C600C6C6C600C6C6C6001852E700294A + C6004263CE001039D6002152E7006B8CDE00ADBDD600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C6000000000000000000000000000000 + 000000000000BDBDBD008C8C8C0094949400D6D6D600F7F7F700CECECE00F7F7 + F700FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00F7F7F700E7E7 + E700E7E7E700E7E7E700E7E7E700E7E7E700ADADAD0063636300636363007373 + 7300DEDEDE000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000042C600EFE7DE00F7F7EF00F7F7EF00F7F7 + EF00F7F7F700F7F7F700F7FFF700FFFFF700FFFFF700FFFFF700CECECE00BDBD + BD00ADADAD0084847B00FFFFFF00FFFFFF00FFFFFF000042C600D6D6D6000000 + 00000000000000000000000000000000000042424200C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600CECECE00CECECE00CECECE00CECECE00CECE + CE00CECECE00CECECE00CECECE00CECECE00CECECE00CECECE00CECECE00CECE + CE00CECECE00D6D6D600D6D6D600D6D6D600D6D6D600D6D6D600D6D6D600D6D6 + D600D6D6D600D6D6D600D6D6D600424242008484840084848400CECECE00CECE + CE00CECECE0084848400CECECE00CECECE00CECECE009CB5D6001842D600E7EF + CE00FFF7CE00E7E7CE0094A5CE003152CE001042DE004273E7009CADCE00CECE + CE00CECECE00CECECE0042424200424242004242420042424200CECECE00CECE + CE00CECECE00CECECE00CECECE00424242000000000000000000000000000000 + 0000E7E7E700A5A5A5008C8C8C009C9C9C00EFEFEF00D6D6D6009C9C9C00EFEF + EF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00EFEF + EF00E7E7E700E7E7E700E7E7E700DEDEDE008C8C8C0063636300636363009494 + 9400000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000042C600EFE7DE00F7F7EF007B7B7B006B6B + 6B007B7B7B007B7B7B006B6B6B007B7B7B008C8C8C00BDBDBD00BDBDBD00EFEF + EF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000042C600D6D6D6000000 + 00000000000000000000000000000000000042424200C6C6C600C6C6C600C6C6 + C600C6C6C600CECECE00CECECE00CECECE00CECECE00CECECE00CECECE00CECE + CE00CECECE00CECECE00CECECE00CECECE00CECECE00CECECE00CECECE00D6D6 + D600D6D6D600D6D6D600D6D6D600D6D6D600D6D6D600D6D6D600D6D6D600D6D6 + D600D6D6D600D6D6D600D6D6D60042424200CECECE00CECECE0084848400CECE + CE00CECECE0084848400CECECE00CECECE00CECECE00849CE7007394E700FFFF + FF00FFFFF700FFF7DE00FFEFCE00FFF7CE00BDC6CE000839C600316BDE00CECE + CE00CECECE00CECECE0042424200CECECE00CECECE00CECECE00CECECE004242 + 4200CECECE00CECECE0042424200CECECE000000000000000000000000000000 + 0000CECECE00949494008C8C8C00BDBDBD00F7F7F700B5B5B500ADADAD00F7F7 + F700FFFFFF00E7E7E700ADADAD00ADADAD00FFFFFF00FFFFFF00FFFFFF00F7F7 + F700E7E7E700E7E7E700E7E7E700CECECE0073737300636363006B6B6B00BDBD + BD00000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000042C600EFE7DE00F7F7EF00F7F7EF00F7F7 + F700F7FFF700F7FFF700FFFFF700FFFFF700DEDEDE00BDBDBD00BDBDBD008484 + 7B008484840073737300DEDEDE00FFFFFF00FFFFFF000042C600D6D6D6000000 + 00000000000000000000000000000000000042424200C6C6C600C6C6C600C6C6 + C6000042C6000042C6000042C6000042C6000042C6000042C6000042C6000042 + C6000042C6000042C6000042C6000042C6000042C6000042C6000042C6000042 + C6000042C6000042C6000042C6000042C6000042C6000042C6000042C6000042 + C600D6D6D600D6D6D600D6D6D60042424200CECECE00CECECE00CECECE008484 + 8400CECECE0084848400CECECE00CECECE00CECECE00527BEF00BDCEF700DEDE + F700FFFFFF00FFFFFF00FFF7E700FFEFCE00FFF7CE00294AC6004A7BD600CECE + CE00CECECE00CECECE00CECECE0042424200CECECE00CECECE00CECECE00CECE + CE00CECECE00CECECE00CECECE00CECECE000000000000000000000000000000 + 0000B5B5B5008C8C8C008C8C8C00DEDEDE00EFEFEF0094949400ADADAD00EFEF + EF00CECECE009C9C9C00A5A5A500DEDEDE00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00EFEFEF00E7E7E700E7E7E700A5A5A500636363006363630084848400DEDE + DE00000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000042C600EFE7DE00F7F7EF009C9C94007B7B + 7B006B6B6B007B7B7B007B7B7B00ADADAD00BDBDBD00BDBDBD00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000042C600D6D6D6000000 + 00000000000000000000000000000000000042424200C6C6C600CECECE00CECE + CE00CECECE00CECECE00CECECE00CECECE00CECECE00CECECE00CECECE00CECE + CE00CECECE00CECECE00CECECE00CECECE00D6D6D600D6D6D600D6D6D600D6D6 + D600D6D6D600D6D6D600D6D6D600D6D6D600D6D6D600D6D6D600D6D6D600D6D6 + D600D6D6D600D6D6D600DEDEDE00424242008484840084848400CECECE008484 + 8400CECECE0084848400CECECE00CECECE00B5C6DE004A73E700B5BDEF00BDC6 + EF00ADB5E700C6CEEF00FFFFFF00FFEFCE00D6DECE000031CE009CB5DE00CECE + CE00CECECE00CECECE00CECECE00CECECE0042424200CECECE00CECECE00CECE + CE00CECECE00CECECE00CECECE0042424200000000000000000000000000E7E7 + E7009C9C9C008C8C8C00A5A5A500F7F7F700D6D6D6008C8C8C008C8C8C00ADAD + AD009C9C9C00BDBDBD00EFEFEF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00EFEFEF00E7E7E700D6D6D6008C8C8C006363630063636300A5A5A5000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000042C600EFE7DE00F7F7F700F7F7F700F7FF + F700FFFFF700FFFFF700FFFFF700BDBDBD00BDBDBD00ADADAD0084847B008484 + 8400737373009C9C9C00FFFFFF00FFFFFF00FFFFFF000042C600D6D6D6000000 + 00000000000000000000000000000000000042424200CECECE00CECECE00CECE + CE00CECECE00CECECE00CECECE00CECECE00CECECE00CECECE00CECECE00CECE + CE00CECECE00CECECE00CECECE00D6D6D600D6D6D600D6D6D600D6D6D600D6D6 + D600D6D6D600D6D6D600D6D6D600D6D6D600D6D6D600D6D6D600D6D6D600D6D6 + D600D6D6D600DEDEDE00DEDEDE004242420084848400D6D6D600D6D6D6008484 + 8400D6D6D60084848400D6D6D600D6D6D6007B94E700849CE700848CDE005273 + D600B5BDEF00FFFFFF00FFFFFF00FFF7DE007B8CC6001852E700CECED600D6D6 + D600D6D6D600D6D6D600D6D6D600D6D6D600D6D6D60042424200D6D6D6004242 + 4200D6D6D600D6D6D600D6D6D600D6D6D600000000000000000000000000CECE + CE008C8C8C008C8C8C00C6C6C600F7F7F700B5B5B500ADADAD00ADADAD008C8C + 8C00DEDEDE00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00F7F7F700E7E7E700BDBDBD00737373006363630073737300C6C6C6000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000042C600EFE7DE00F7F7F700F7FFF700FFFF + F700FFFFF700FFFFF700FFFFF700FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000042C600D6D6D6000000 + 00000000000000000000000000000000000042424200CECECE00CECECE00CECE + CE000042C6000042C6000042C6000042C6000042C6000042C6000042C6000042 + C6000042C6000042C6000042C6000042C6000042C6000042C6000042C6000042 + C6000042C6000042C6000042C6000042C6000042C6000042C6000042C6000042 + C600DEDEDE00DEDEDE00DEDEDE0042424200D6D6D600D6D6D60084848400D6D6 + D600D6D6D60084848400D6D6D600D6D6D6006B8CEF00B5C6F70094A5E7008CA5 + E700EFF7FF00FFFFFF00FFFFFF00F7FFE700294AC600638CDE00D6D6D600D6D6 + D600D6D6D600D6D6D60042424200D6D6D600D6D6D60042424200D6D6D600D6D6 + D600D6D6D600D6D6D60042424200D6D6D600000000000000000000000000ADAD + AD008C8C8C0094949400D6D6D600EFEFEF009C9C9C00CECECE00DEDEDE008C8C + 8C00EFEFEF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00F7F7F700E7E7E7009C9C9C00636363006363630084848400E7E7E7000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000042C600EFE7DE00F7FFF700F7FFF700FFFF + F700FFFFF700FFFFF700FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000042C600D6D6D6000000 + 00000000000000000000000000000000000042424200CECECE00CECECE00CECE + CE00CECECE00CECECE00CECECE00CECECE00CECECE00CECECE00CECECE00CECE + CE00D6D6D600D6D6D600D6D6D600D6D6D600D6D6D600D6D6D600D6D6D600D6D6 + D600D6D6D600D6D6D600D6D6D600D6D6D600D6D6D600D6D6D600DEDEDE00DEDE + DE00DEDEDE00DEDEDE00DEDEDE00424242008484840084848400D6D6D600D6D6 + D600D6D6D60084848400D6D6D600D6D6D600B5BDDE0094ADF700D6E7FF00D6DE + F700D6DEF700FFFFFF00FFFFFF00CECEE7000031D600A5BDDE00D6D6D600D6D6 + D600D6D6D600D6D6D600D6D6D6004242420042424200D6D6D600D6D6D600D6D6 + D600D6D6D600D6D6D600D6D6D60042424200000000000000000000000000BDBD + BD008C8C8C0094949400CECECE00E7E7E700BDBDBD00EFEFEF00FFFFFF00ADAD + AD00B5B5B500FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00F7F7F700CECECE00848484006363630063636300ADADAD00000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000042C600EFE7DE00F7FFF700BDBDB500BDBD + B500CECECE00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000042C600D6D6D6000000 + 00000000000000000000000000000000000042424200CECECE00CECECE00CECE + CE00CECECE00CECECE00CECECE00CECECE00CECECE00CECECE00D6D6D600D6D6 + D600D6D6D600D6D6D600D6D6D600D6D6D600D6D6D600D6D6D600D6D6D600D6D6 + D600D6D6D600D6D6D600D6D6D600D6D6D600DEDEDE00DEDEDE00DEDEDE00DEDE + DE00DEDEDE00DEDEDE00DEDEDE0042424200D6D6D600D6D6D600D6D6D600D6D6 + D600D6D6D60084848400D6D6D600D6D6D600D6D6D600D6D6D600BDC6D600A5B5 + E700B5CEFF00E7EFFF00F7FFFF00637BD600215AE700D6D6D600D6D6D600D6D6 + D600D6D6D600D6D6D600D6D6D600D6D6D600D6D6D600D6D6D600D6D6D600D6D6 + D600D6D6D600D6D6D600D6D6D600D6D6D600000000000000000000000000E7E7 + E700A5A5A5008C8C8C00ADADAD00EFEFEF00F7F7F700FFFFFF00FFFFFF00DEDE + DE009C9C9C00E7E7E700FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00F7F7F700B5B5B5006B6B6B00636363006B6B6B00DEDEDE00000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000042C600EFE7DE00FFFFF700BDBDB500BDBD + BD009C9C9C007B7B7B007B847B00DEDEDE00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000042C600D6D6D6000000 + 00000000000000000000000000000000000042424200CECECE00CECECE00CECE + CE00CECECE00CECECE00CECECE00CECECE00CECECE00D6D6D600D6D6D600D6D6 + D600D6D6D600D6D6D600D6D6D600D6D6D600D6D6D600D6D6D600D6D6D600D6D6 + D600D6D6D600D6D6D600D6D6D600DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDE + DE00DEDEDE00DEDEDE00DEDEDE00424242008484840084848400848484008484 + 84008484840084848400DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDE + DE00D6D6D600ADBDDE008C9CE7002952DE008CA5DE00DEDEDE00DEDEDE00DEDE + DE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDE + DE00DEDEDE00DEDEDE00DEDEDE00DEDEDE000000000000000000000000000000 + 0000E7E7E700C6C6C600A5A5A500B5B5B500D6D6D600EFEFEF00FFFFFF00FFFF + FF00D6D6D600EFEFEF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00EFEFEF009494940063636300636363008484840000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000042C600EFE7E700FFFFF700DEDED600FFFF + F700FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000042C600D6D6D6000000 + 00000000000000000000000000000000000042424200E7520000E7520000E752 + 0000E7520000E7520000E7520000E7520000E7520000E7520000E7520000E752 + 0000E7520000E7520000E7520000E7520000E7520000E7520000E7520000E752 + 0000E7520000E7520000E7520000E7520000E7520000E7520000E7520000E752 + 0000E7520000E7520000E752000042424200DEDEDE00DEDEDE00DEDEDE00DEDE + DE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDE + DE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDE + DE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDE + DE00DEDEDE00DEDEDE00DEDEDE00DEDEDE000000000000000000000000000000 + 0000000000000000000000000000D6D6D600BDBDBD00ADADAD00BDBDBD00DEDE + DE00F7F7F700FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00E7E7E700737373006363630063636300B5B5B50000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000042C600F7E7E700FFFFF7008C8C8C007B7B + 7B007B7B7B0084847B008C8C8C00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000042C600D6D6D6000000 + 00000000000000000000000000000000000042424200E7520000E7520000E752 + 0000E7520000E7520000E7520000E7520000E7520000E7520000E7520000E752 + 0000E7520000E7520000E7520000E7520000E7520000E7520000E7520000E752 + 0000E7520000E7520000E7520000E7520000E7520000E7520000E7520000E752 + 0000E7520000E7520000E752000042424200DEDEDE00DEDEDE00DEDEDE00DEDE + DE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDE + DE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDE + DE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDE + DE00DEDEDE00DEDEDE00DEDEDE00DEDEDE000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000D6D6D600B5B5 + B500ADADAD00C6C6C600DEDEDE00EFEFEF00FFFFFF00FFFFFF00FFFFFF00F7F7 + F700ADADAD00636363006363630073737300E7E7E70000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000042C600F7E7E700FFFFF700FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000042C600D6D6D6000000 + 000000000000000000000000000000000000C6C6C60042424200424242004242 + 4200424242004242420042424200424242004242420042424200424242004242 + 4200424242004242420042424200424242004242420042424200424242004242 + 4200424242004242420042424200424242004242420042424200424242004242 + 4200424242004242420042424200C6C6C6004242420042424200424242004242 + 4200424242004242420042424200424242004242420042424200424242004242 + 4200424242004242420042424200424242004242420042424200424242004242 + 4200424242004242420042424200424242004242420042424200424242004242 + 4200424242004242420042424200424242000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000E7E7E700CECECE00BDBDBD00BDBDBD00CECECE00DEDEDE00DEDEDE00C6C6 + C6007B7B7B006363630063636300949494000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000042C600F7E7E7008C8C8C00BDBDBD00FFFF + FF00D6D6D600C6C6C600FFF7F700FFF7F700EFD6D600FFFFFF00FFFFFF00F7EF + EF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000042C600D6D6D6000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000E7E7E700C6C6C600B5B5B500A5A5A5009494 + 94006B6B6B006363630073737300CECECE000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000042C600E7CECE00636363006B6B6B00EFCE + CE00636363007B7B7B00B5ADB500EFDEDE006363630084848400FFFFFF007373 + 730073737300F7DEDE006363630084848400EFE7EF000042C600D6D6D6000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000EFEFEF00DEDEDE00B5B5 + B5007B7B7B0084848400C6C6C600000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000637BD600637BD600315AC60063636300315A + C600315AC6007B7B7B008494C600315AC600315AC6006B6B6B008494C6008494 + C600737373008494C6008494C600848484009C9C9C00637BD600EFEFEF000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000006B6B6B008C8C8C00848484008C8C + 8C008C8C8C007B7B7B0094949400848484008C8C8C007B7B7B00315AC600637B + D6006B6B6B00315AC600315AC6007B7B7B007B7B7B008494C600000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000CECECE00EFEFEF00F7F7 + F700B5B5B500C6C6C600F7F7F700A5A5A50094949400CECECE00BDBDBD007B7B + 7B009C9C9C00BDBDBD006B6B6B006B6B6B00D6D6D60000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000042 + C600D6D6D600D6D6D60000000000000000000000000000000000000000000042 + C600D6D6D6000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000E7E7E700DEDEDE00DEDEDE00DEDEDE00DEDEDE00E7E7E7000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000042 + C6000042C600CECECE00000000000000000000000000000000000042C6000042 + C600CECECE000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000E7E7E700D6D6 + D600C6C6CE009CADCE006384CE004A73C600527BC6006B8CC60094A5CE00C6CE + CE00D6D6D600DEDEDE0000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000DEDEDE00D6D6D6000042 + C6000042C600C6C6C600D6D6D6000000000000000000000000000042C6000042 + C600C6C6C600CECECE00D6D6D600DEDEDE000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000E7E7E700CECECE008C9CCE00295A + C6000042C600104AC600295AC6002963CE00215AC600215AC600104AC6000042 + C6001852C6008494C600CECECE00DEDEDE000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000042C6000042C6000042C6000042 + C6000042C6000042C600CECECE0000000000000000000042C6007394DE000042 + C6000042C6000042C6000042C600000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000D6D6D600CECE + CE00D6D6D6000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000DEDEDE009CADC6001052C600084AC600527B + CE00CED6DE00E7E7E700E7E7E700E7E7E700E7E7E700E7E7E700E7E7E700D6DE + E7006B8CD600084AC600084AC6007B94C600D6D6D60000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000000042C6007394DE000042 + C6000042C6000042C600C6C6C600D6D6D600000000000042C6007394DE007394 + DE000042C6000042C60000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000000042C6002963CE00ADB5 + EF00CECECE000000000000000000000000000000000000000000000000000000 + 00000000000000000000DEDEDE005A7BC6000042C6004273CE00DEDEE700E7E7 + E700E7E7E700E7E7E700DEDEDE00D6D6D600E7E7E700E7E7E700E7E7E700E7E7 + E700E7E7E700E7E7E7006B8CD6000042C600396BC600CECED600000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000000000000042C6007394 + DE000042C6000042C6000042C600C6C6C6000042C6007394DE007394DE000042 + C6000042C600E7E7E70000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000042C6000042C6000042C6002963 + CE00D6D6D6000000000000000000000000000000000000000000000000000000 + 000000000000DEDEDE005A7BC600084AC600ADBDDE00E7E7E700E7E7E700E7E7 + E700E7E7E700BDBDBD006B6B6B0063636300A5A5A500E7E7E700E7E7E700E7E7 + E700E7E7E700E7E7E700E7E7E700B5C6DE00104AC600295AC600CED6D6000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000D6D6D600CECECE00CECECE00CECE + CE00CECECE00CECECE00CECECE00CECECE00CECECE00CECECE00CECECE00CECE + CE00CECECE00CECECE00CECECE00CECECE00CECECE00CECECE00CECECE000042 + C6007394DE000042C6000042C600ADADAD000042C6007394DE000042C6000042 + C600C6C6C600CECECE00CECECE00D6D6D6000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000042C6000042C6000042C600ADB5EF002963 + CE00000000000000000000000000000000000000000000000000000000000000 + 0000E7E7E7006B8CC6000842C600BDC6DE00E7E7E700E7E7E700E7E7E700E7E7 + E700DEDEDE006B6B6B00636363006363630063636300C6C6C600BDBDBD00DEDE + DE00E7E7E700E7E7E700E7E7E700E7E7E700CED6DE00104AC600396BC600DEDE + DE0000000000000000000000000000000000D6D6D600CECECE00CECECE00CECE + CE00CECECE00CECECE00CECECE00CECECE00CECECE00CECECE00CECECE00CECE + CE00CECECE00CECECE00CECECE00CECECE00CECECE00CECECE00CECECE00CECE + CE00CECECE00CECECE00CECECE00CECECE00CECECE00CECECE00CECECE00CECE + CE00CECECE00CECECE00CECECE00D6D6D6008484840042424200424242004242 + 4200424242004242420042424200424242004242420042424200424242004242 + 4200424242004242420042424200424242004242420042424200424242004242 + 42000042C6007394DE000042C6000042C6007394DE000042C6000042C6004A4A + 4A00424242004242420042424200848484000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000042C6000042C6000042C600ADB5EF002963CE000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000ADB5CE000042C60094A5D600E7E7E700E7E7E700E7E7E700E7E7E700E7E7 + E700C6C6C6006363630063636300636363006363630094949400ADADAD00B5B5 + B500E7E7E700E7E7E700E7E7E700E7E7E700E7E7E700BDCEDE00084AC600849C + C600000000000000000000000000000000007394DE000042C6000042C6000042 + C6000042C6000042C6000042C6000042C6000042C6000042C6000042C6000042 + C6000042C6000042C6000042C6000042C6000042C6000042C6000042C6000042 + C6000042C6000042C6000042C6000042C6000042C6000042C6000042C6000042 + C6000042C6000042C6000042C6007394DE0042424200FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF000042C6000042C6000042C6000042C6000042C600C6C6C600D6D6 + D600EFEFEF00FFFFFF00FFFFFF00424242000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000042C6000042C6000042C600ADB5EF002963CE00000000000000 + 000000000000000000000000000000000000000000000000000000000000E7E7 + E7002152C6004273CE00E7E7E700E7E7E700E7E7E700E7E7E700E7E7E700E7E7 + E700B5B5B5006363630063636300636363006363630084848400D6D6D600B5B5 + B500E7E7E700E7E7E700E7E7E700E7E7E700E7E7E700E7E7E7007B94CE00084A + C600D6D6DE000000000000000000000000000042C600FFFFFF00FFFFFF00A5A5 + A500FFFFFF00FFFFFF00A5A5A500FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00A5A5A500FFFFFF00FFFFFF00A5A5A500FFFFFF00FFFF + FF00A5A5A500FFFFFF00FFFFFF000042C60042424200FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00F7F7F7000042C6000042C6000042C6000042C6000042C6000042C600C6C6 + C600D6D6D600F7F7F700FFFFFF00424242000000000000000000000000000000 + 00000000000000000000000000000000000000000000D6D6D600CECECE00CECE + CE00CECECE00CECECE00CECECE00CECECE00CECECE00D6D6D600000000000000 + 00000042C6000042C6000042C600ADB5EF002963CE0000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000009CAD + CE000042C600E7E7EF00E7E7E700E7E7E700E7E7E700E7E7E700E7E7E700E7E7 + E700A5A5A500636363006363630063636300636363007B7B7B00E7E7E700E7E7 + E700E7E7E700E7E7E700E7E7E700E7E7E700E7E7E700E7E7E700DEDEDE001852 + C6006384C6000000000000000000000000000042C600FFFFFF00FFFFFF00A5A5 + A500FFFFFF00FFFFFF00A5A5A500FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00A5A5A500FFFFFF00FFFFFF00A5A5A500FFFFFF00FFFF + FF00A5A5A500FFFFFF00FFFFFF000042C60042424200FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF000042C6000042C6000042C6000042C6000042C6000042C6000042C6000042 + C600CECECE00F7F7F700FFFFFF00424242000000000000000000000000000000 + 00000000000000000000E7E7E700CECECE00ADB5EF007394DE00315AC6000042 + C6000042C6000042C600315AC6007394DE00ADB5EF00BDBDBD00C6C6C6000042 + C6000042C6000042C600ADB5EF002963CE00E7E7E70000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000003163 + C6004273CE00FFFFFF00E7E7E700E7E7E700E7E7E700C6C6C6008C8C8C009494 + 94006B6B6B006363630063636300636363006363630063636300DEDEDE00E7E7 + E700E7E7E700E7E7E700E7E7E700E7E7E700E7E7E700E7E7E700E7E7E700638C + CE001852C600E7E7E70000000000000000000042C600A5A5A500A5A5A500A5A5 + A500A5A5A500A5A5A500A5A5A500A5A5A500A5A5A500A5A5A500A5A5A500A5A5 + A500A5A5A500A5A5A500A5A5A500A5A5A500A5A5A500A5A5A500A5A5A500A5A5 + A500A5A5A500A5A5A500A5A5A500A5A5A500A5A5A500A5A5A500A5A5A500A5A5 + A500A5A5A500A5A5A500A5A5A5000042C60042424200FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF000042C6007394DE000042C6000042C6000042C6000042C6000042C6000042 + C600CECECE00F7F7F700FFFFFF0042424200D6D6D600CECECE00CECECE00CECE + CE00CECECE00C6C6C600ADB5EF000042C600315AC600BDC6CE00F7EFCE00F7EF + CE0084848400F7EFCE00F7EFCE00BDC6CE00315AC6000042C600315AC600ADB5 + EF002963CE00ADB5EF002963CE00C6C6C600CECECE00CECECE00CECECE00CECE + CE00CECECE00CECECE00CECECE00D6D6D6000000000000000000E7E7E7000842 + C600A5BDDE00FFFFFF00F7F7F700E7E7E700ADADAD0063636300636363006363 + 630063636300636363006363630063636300636363006363630094949400E7E7 + E700E7E7E700E7E7E700E7E7E700E7E7E700E7E7E700E7E7E700E7E7E700CED6 + D6000042C600ADBDD60000000000000000000042C600FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00A5A5A500FFFFFF00FFFFFF00A5A5A500FFFFFF00FFFF + FF00A5A5A500FFFFFF00FFFFFF00A5A5A500FFFFFF00FFFFFF00A5A5A500FFFF + FF00FFFFFF00A5A5A500FFFFFF00FFFFFF00A5A5A500FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF000042C60042424200FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF000042C6007394DE000042C6000042C6000042C6000042C6000042C6000042 + C600D6D6D600F7F7F700FFFFFF0042424200A5A5A50042424200424242004242 + 420042424200848484000042C600BDC6CE00F7EFCE00F7EFCE00F7EFCE00F7EF + CE0084848400F7EFCE00F7EFCE00F7EFCE00F7EFCE00BDC6CE000042C6002963 + CE00ADB5EF002963CE004A4A4A00424242004242420042424200424242004242 + 4200424242004242420042424200A5A5A5000000000000000000ADBDD6000042 + C600F7F7F700FFFFFF00FFFFFF00C6C6C6006363630063636300636363006363 + 630063636300636363006363630063636300636363006363630063636300CECE + CE00E7E7E700E7E7E700E7E7E700E7E7E700E7E7E700E7E7E700E7E7E700DEDE + DE001852C6007394CE0000000000000000000042C600FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00A5A5A500FFFFFF00FFFFFF00A5A5A500FFFFFF00FFFF + FF00A5A5A500FFFFFF00FFFFFF00A5A5A500FFFFFF00FFFFFF00A5A5A500FFFF + FF00FFFFFF00A5A5A500FFFFFF00FFFFFF00A5A5A500FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF000042C60042424200FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF000042C6007394DE007394DE000042C6000042C6000042C6000042C6000042 + C600EFEFEF00FFFFFF00FFFFFF004242420042424200FFFFFF00FFFFFF009C9C + 9C00ADB5EF000042C60084848400848484008484840084848400848484008484 + 8400848484008484840084848400848484008484840084848400848484000042 + C600315AC600CECECE009C9C9C00FFFFFF00FFFFFF00A5A5A500FFFFFF00FFFF + FF00A5A5A500FFFFFF00FFFFFF00424242000000000000000000849CCE001852 + C600F7F7F700FFFFFF00FFFFFF009C9C9C006363630063636300636363006363 + 630063636300636363006363630063636300636363006363630063636300A5A5 + A500E7E7E700E7E7E700E7E7E700E7E7E700E7E7E700E7E7E700E7E7E700DEDE + DE003163C6004A73C60000000000000000000042C600A5A5A500A5A5A500A5A5 + A500A5A5A500A5A5A500A5A5A500A5A5A500A5A5A500A5A5A500A5A5A500A5A5 + A500A5A5A500A5A5A500A5A5A500A5A5A500A5A5A500A5A5A500A5A5A500A5A5 + A500A5A5A500A5A5A500A5A5A500A5A5A500A5A5A500A5A5A500A5A5A500A5A5 + A500A5A5A500A5A5A500A5A5A5000042C60042424200FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF000042C6007394DE007394DE007394DE000042C6000042C600EFEF + EF00FFFFFF00FFFFFF00FFFFFF004242420042424200FFFFFF00FFFFFF009C9C + 9C000042C600ADB5EF00FFFFFF00F7EFCE00F7EFCE0084848400F7EFCE00F7EF + CE00F7EFCE00F7EFCE00F7EFCE0084848400F7EFCE00F7EFCE00F7EFCE00BDC6 + CE000042C600C6C6C60094949400F7F7F700FFFFFF00A5A5A500FFFFFF00FFFF + FF00A5A5A500FFFFFF00FFFFFF004242420000000000000000006B8CCE001852 + C600F7F7F700FFFFFF00FFFFFF00A5A5A5006363630063636300636363006363 + 63006363630063636300636363006363630073737300CECECE00D6D6D600CECE + CE00E7E7E700E7E7E700E7E7E7008C8C8C00C6C6C600E7E7E700E7E7E700DEDE + DE00426BC6003163C60000000000000000000042C600FFFFFF00FFFFFF00FFFF + FF00FFFFFF00A5A5A500FFFFFF00FFFFFF00A5A5A500FFFFFF00FFFFFF00A5A5 + A500FFFFFF00FFFFFF00A5A5A500FFFFFF00FFFFFF00A5A5A500FFFFFF00FFFF + FF00A5A5A500FFFFFF00FFFFFF00A5A5A500FFFFFF00FFFFFF00A5A5A500FFFF + FF00FFFFFF00FFFFFF00FFFFFF000042C60042424200FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF000042C6000042C6000042C6000042C600F7F7F700FFFF + FF00FFFFFF00FFFFFF00FFFFFF004242420042424200A5A5A500A5A5A5008484 + 8400315AC600FFFFFF00FFFFFF00F7EFCE00F7EFCE0084848400F7EFCE00F7EF + CE00F7EFCE00F7EFCE00F7EFCE0084848400F7EFCE00F7EFCE00F7EFCE00F7EF + CE00315AC600A5A5A500949494009C9C9C00A5A5A500A5A5A500A5A5A500A5A5 + A500A5A5A500A5A5A500A5A5A5004242420000000000000000006B8CCE002963 + C600F7F7F700FFFFFF00FFFFFF00B5B5B5007B7B7B0063636300636363006363 + 630063636300636363006363630063636300ADADAD00848484006B6B6B00ADAD + AD00E7E7E700E7E7E700C6C6C60063636300A5A5A500E7E7E700E7E7E700DEDE + DE004273C6004273C60000000000000000000042C600FFFFFF00FFFFFF00FFFF + FF00FFFFFF00A5A5A500FFFFFF00FFFFFF00A5A5A500FFFFFF00FFFFFF00A5A5 + A500FFFFFF00FFFFFF00A5A5A500FFFFFF00FFFFFF00A5A5A500FFFFFF00FFFF + FF00A5A5A500FFFFFF00FFFFFF00A5A5A500FFFFFF00FFFFFF00A5A5A500FFFF + FF00FFFFFF00FFFFFF00FFFFFF000042C60042424200FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF004242420042424200FFFFFF00FFFFFF007394 + DE00ADB5EF0084848400C6C6C600FFFFFF00F7EFCE0084848400F7EFCE008484 + 8400C6C6C600F7EFCE00F7EFCE0084848400F7EFCE0084848400F7EFCE00F7EF + CE00BDC6CE007394DE00CECECE00F7F7F700A5A5A500FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00424242000000000000000000849CD6001852 + C600EFEFEF00FFFFFF00FFFFFF00DEDEDE008C8C8C0073737300636363006363 + 6300636363006363630063636300636363007373730063636300636363006B6B + 6B00D6D6D600E7E7E7008C8C8C006363630094949400E7E7E700E7E7E700DEDE + DE003163BD004A73CE0000000000000000000042C600A5A5A500A5A5A500A5A5 + A500A5A5A500A5A5A500A5A5A500A5A5A500A5A5A500A5A5A500A5A5A500A5A5 + A500A5A5A500A5A5A500A5A5A500A5A5A500A5A5A500A5A5A500A5A5A500A5A5 + A500A5A5A500A5A5A500A5A5A500A5A5A500A5A5A500A5A5A500A5A5A500A5A5 + A500A5A5A500FFFFFF00FFFFFF000042C60042424200FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF004242420042424200FFFFFF00FFFFFF00315A + C600FFFFFF0084848400C6C6C600FFFFFF00F7EFCE0084848400F7EFCE00C6C6 + C60084848400F7EFCE00F7EFCE0084848400F7EFCE0084848400C6C6C600F7EF + CE00F7EFCE00315AC600CECECE00F7F7F700A5A5A500FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00424242000000000000000000B5C6E7000842 + C600E7E7E700FFFFFF00FFFFFF00FFFFFF00ADADAD008C8C8C006B6B6B00BDBD + BD00D6D6D600BDBDBD00C6C6C600848484006363630063636300A5A5A500ADAD + AD00A5A5A500A5A5A50063636300636363006B6B6B00C6C6C600CECECE009494 + 9400104ABD007394D60000000000000000000042C600FFFFFF00FFFFFF00FFFF + FF00A5A5A500FFFFFF00FFFFFF00A5A5A500FFFFFF00FFFFFF00A5A5A500FFFF + FF00FFFFFF00A5A5A500FFFFFF00FFFFFF00A5A5A500FFFFFF00FFFFFF00A5A5 + A500FFFFFF00FFFFFF00A5A5A500FFFFFF00FFFFFF00A5A5A500FFFFFF00FFFF + FF00A5A5A500FFFFFF00FFFFFF000042C60042424200FFFFFF00FFFFFF00FFFF + FF00848484008484840084848400848484008484840084848400848484008484 + 8400848484008484840084848400848484008484840084848400848484008484 + 8400848484008484840084848400848484008484840084848400848484008484 + 8400FFFFFF00FFFFFF00FFFFFF004242420042424200A5A5A500A5A5A5000042 + C600FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0084848400F7EFCE00F7EF + CE00F7EFCE00F7EFCE00F7EFCE0084848400F7EFCE00F7EFCE00F7EFCE00F7EF + CE00F7EFCE000042C600949494009C9C9C00A5A5A500A5A5A500A5A5A500A5A5 + A500A5A5A500A5A5A500A5A5A500424242000000000000000000EFEFF7000042 + C6009CADCE00F7F7F700FFFFFF00E7E7E700ADADAD00F7F7F700F7F7F700BDBD + BD00DEDEDE00C6C6C600949494006B6B6B006363630063636300636363006363 + 6300636363006363630063636300636363006363630063636300636363006B6B + 6B000042C600CED6EF0000000000000000000042C600FFFFFF00FFFFFF00FFFF + FF00A5A5A500FFFFFF00FFFFFF00A5A5A500FFFFFF00FFFFFF00A5A5A500FFFF + FF00FFFFFF00A5A5A500FFFFFF00FFFFFF00A5A5A500FFFFFF00FFFFFF00A5A5 + A500FFFFFF00FFFFFF00A5A5A500FFFFFF00FFFFFF00A5A5A500FFFFFF00FFFF + FF00A5A5A500FFFFFF00FFFFFF000042C60042424200FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF004242420042424200FFFFFF00FFFFFF000042 + C600848484008484840084848400848484008484840084848400848484008484 + 8400848484008484840084848400848484008484840084848400848484008484 + 8400848484000042C600CECECE009C9C9C00FFFFFF00FFFFFF00A5A5A500FFFF + FF00FFFFFF00FFFFFF00FFFFFF00424242000000000000000000000000003163 + C600426BC600E7E7E700FFFFFF00DEDEDE00A5A5A500ADADAD00CECECE00ADAD + AD008C8C8C0073737300ADADAD00737373006363630063636300636363006363 + 630063636300636363006363630063636300636363006363630063636300425A + 9400104AC6000000000000000000000000000042C600A5A5A500A5A5A500A5A5 + A500A5A5A500A5A5A500A5A5A500A5A5A500A5A5A500A5A5A500A5A5A500A5A5 + A500A5A5A500A5A5A500A5A5A500A5A5A500A5A5A500A5A5A500A5A5A500A5A5 + A500A5A5A500A5A5A500A5A5A500A5A5A500A5A5A500A5A5A500A5A5A500A5A5 + A500A5A5A500A5A5A500A5A5A5000042C60042424200FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF004242420042424200FFFFFF00FFFFFF000042 + C600FFFFFF00FFFFFF0084848400FFFFFF00FFFFFF00FFFFFF00F7EFCE00F7EF + CE0084848400F7EFCE00F7EFCE00F7EFCE00F7EFCE00F7EFCE0084848400F7EF + CE00F7EFCE000042C600CECECE009C9C9C00FFFFFF00FFFFFF00A5A5A500FFFF + FF00FFFFFF00FFFFFF00FFFFFF00424242000000000000000000000000009CB5 + DE000842C600C6C6D600F7F7F700FFFFFF00FFFFFF009C9C9C008C8C8C008C8C + 8C008C8C8C0073737300B5B5B500CECECE007B7B7B0063636300636363006363 + 63006363630063636300636363006363630063636300636363006B6B6B00084A + BD006B8CD6000000000000000000000000000042C600FFFFFF00FFFFFF00A5A5 + A500FFFFFF00FFFFFF00A5A5A500FFFFFF00FFFFFF00A5A5A500FFFFFF00FFFF + FF00A5A5A500FFFFFF00FFFFFF00A5A5A500FFFFFF00FFFFFF00A5A5A500FFFF + FF00FFFFFF00A5A5A500FFFFFF00FFFFFF00A5A5A500FFFFFF00FFFFFF00A5A5 + A500FFFFFF00FFFFFF00FFFFFF000042C60042424200FFFFFF00FFFFFF00FFFF + FF00848484008484840084848400848484008484840084848400848484008484 + 8400848484008484840084848400848484008484840084848400848484008484 + 8400848484008484840084848400848484008484840084848400848484008484 + 8400FFFFFF00FFFFFF00FFFFFF004242420042424200A5A5A500A5A5A500315A + C600FFFFFF00FFFFFF0084848400FFFFFF00FFFFFF00FFFFFF00FFFFFF00F7EF + CE0084848400F7EFCE00F7EFCE00F7EFCE00F7EFCE00F7EFCE0084848400F7EF + CE00BDC6CE00315AC600949494009C9C9C00A5A5A500A5A5A500A5A5A500A5A5 + A500A5A5A500FFFFFF00FFFFFF00424242000000000000000000000000000000 + 0000215AC600426BC600DEDEDE00F7F7F700CECECE00D6D6D600C6C6C600C6C6 + C600B5B5B5008C8C8C00848484006B6B6B006363630063636300636363006363 + 630063636300636363006363630063636300636363006B6B6B00426394000842 + C600000000000000000000000000000000000042C600FFFFFF00FFFFFF00A5A5 + A500FFFFFF00FFFFFF00A5A5A500FFFFFF00FFFFFF00A5A5A500FFFFFF00FFFF + FF00A5A5A500FFFFFF00FFFFFF00A5A5A500FFFFFF00FFFFFF00A5A5A500FFFF + FF00FFFFFF00A5A5A500FFFFFF00FFFFFF00A5A5A500FFFFFF00FFFFFF00A5A5 + A500FFFFFF00FFFFFF00FFFFFF000042C60042424200FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF004242420042424200FFFFFF00FFFFFF007394 + DE00ADB5EF00FFFFFF0084848400FFFFFF0084848400FFFFFF00FFFFFF00FFFF + FF0084848400F7EFCE0084848400C6C6C600F7EFCE00F7EFCE0084848400F7EF + CE00BDC6CE007394DE009C9C9C00FFFFFF00FFFFFF00A5A5A500FFFFFF00FFFF + FF00A5A5A500FFFFFF00FFFFFF00424242000000000000000000000000000000 + 0000C6CEEF000042C6009CADCE00D6D6D600ADADAD00E7E7E700FFFFFF00A5A5 + A500E7E7E7009C9C9C008C8C8C008C8C8C007B7B7B006B6B6B00636363006363 + 6300636363006363630063636300636363006B6B6B00636B7B000042C60084A5 + DE00000000000000000000000000000000007394DE000042C6000042C6000042 + C6000042C6000042C6000042C6000042C6000042C6000042C6000042C6000042 + C6000042C6000042C6000042C6000042C6000042C6000042C6000042C6000042 + C6000042C6000042C6000042C6000042C6000042C6000042C6000042C6000042 + C6000042C6000042C6000042C6007394DE0042424200FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF004242420042424200FFFFFF00FFFFFF00ADB5 + EF00315AC600FFFFFF0084848400FFFFFF0084848400C6C6C600FFFFFF00FFFF + FF0084848400FFFFFF0084848400C6C6C600F7EFCE00F7EFCE0084848400F7EF + CE00315AC600CECECE009C9C9C00FFFFFF00FFFFFF00A5A5A500FFFFFF00FFFF + FF00A5A5A500FFFFFF00FFFFFF00424242000000000000000000000000000000 + 0000000000005A84D6000042C600ADB5CE00C6C6C600EFEFEF00FFFFFF00C6C6 + C600949494008C8C8C00949494008C8C8C008C8C8C008C8C8C00848484007373 + 73006363630063636300636363006B6B6B00636B7B00104ABD003163CE000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000042424200FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF004242420042424200A5A5A500A5A5A500A5A5 + A5000042C600ADB5EF0084848400FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF0084848400FFFFFF00FFFFFF00FFFFFF00FFFFFF00F7EFCE0084848400BDC6 + CE000042C600949494009C9C9C00A5A5A500A5A5A500A5A5A500A5A5A500A5A5 + A500A5A5A500A5A5A500A5A5A500424242000000000000000000000000000000 + 00000000000000000000527BD600084AC6009CADCE00D6D6D600EFEFEF00F7F7 + F700C6C6C600BDBDBD00F7F7F7009C9C9C008C8C8C008C8C8C008C8C8C008C8C + 8C008C8C8C00848484007B7B7B006B738400084AC6002963CE00000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000042424200FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF004242420042424200FFFFFF00FFFFFF00A5A5 + A500ADB5EF000042C60084848400848484008484840084848400848484008484 + 8400848484008484840084848400848484008484840084848400848484000042 + C600ADB5EF009C9C9C00FFFFFF00FFFFFF00A5A5A500FFFFFF00FFFFFF00A5A5 + A500FFFFFF00FFFFFF00FFFFFF00424242000000000000000000000000000000 + 00000000000000000000000000007394DE000042C600527BC600C6C6CE00DEDE + DE00E7E7E700EFEFEF00F7F7F700DEDEDE00949494008C8C8C008C8C8C008C8C + 8C008C8C8C00848484004A6BA5000042C600396BCE0000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000008484840042424200424242004242 + 4200424242004242420042424200424242004242420042424200424242004242 + 4200424242004242420042424200424242004242420042424200424242004242 + 4200424242004242420042424200424242004242420042424200424242004242 + 42004242420042424200424242008484840042424200FFFFFF00FFFFFF00A5A5 + A500FFFFFF00ADB5EF000042C600ADB5EF00FFFFFF0084848400FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF0084848400FFFFFF00ADB5EF000042C600ADB5 + EF00F7F7F7009C9C9C00FFFFFF00FFFFFF00A5A5A500FFFFFF00FFFFFF00A5A5 + A500FFFFFF00FFFFFF00FFFFFF00424242000000000000000000000000000000 + 000000000000000000000000000000000000CED6F700215ACE000042C6005A7B + C600A5ADC600CECECE00CECECE00D6D6D600C6C6C6008C8C8C0084848400737B + 8C004263AD00084AC600084AC6009CB5E7000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000A5A5A50042424200424242004242 + 42004242420042424200636363000042C600315AC60084848400FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF0084848400315AC6000042C600636363004242 + 4200424242004242420042424200424242004242420042424200424242004242 + 4200424242004242420042424200A5A5A5000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000ADC6EF002963 + CE000042C6000042C600215AC6002963C6002963C6001852C6000842C6000042 + C6001852C6006B94DE0000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000ADB5EF007394DE00315AC6000042 + C6000042C6000042C600315AC6007394DE00ADB5EF0000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000B5CEEF006B94DE00638CDE00638CDE00739CDE00ADBDEF000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000000000000000000000DEDE + DE00DEDEDE000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000DEDEDE00CECE + CE00CECECE00DEDEDE0000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000D6D6D600CECECE00CECECE00CECE + CE00CECECE00CECECE00CECECE00CECECE00CECECE00CECECE00CECECE00CECE + CE00CECECE00CECECE00CECECE00CECECE00CECECE00CECECE00CECECE00D6D6 + D600000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000FFFFFF00FFFFFF0000000000C6C6 + C600CECECE00DEDEDE0000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000004242420042424200424242004242 + 4200424242004242420042424200424242004242420042424200424242004242 + 4200424242004242420042424200424242004242420042424200424242004242 + 4200000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000FFFFFF00FFFFFF0000000000C6C6 + C600D6D6D6000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000D6D6D600CECECE0042424200DEDEDE00DEDEDE00DEDE + DE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDE + DE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE004242 + 4200000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000FFFFFF00FFFFFF0000000000C6C6C600CECE + CE00DEDEDE000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000D6D6D600CECECE00CECECE00D6D6D600000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000000000000000000000D6D6 + D600CECECE00CECECE00CECECE00CECECE00CECECE00CECECE00CECECE00CECE + CE00D6D6D6000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000042424200424242004242420042424200424242004242 + 4200424242004242420042424200424242004242420042424200424242004242 + 4200424242004242420042424200424242004242420042424200DEDEDE004242 + 4200000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000000000000000000000D6D6 + D600D6D6D600DEDEDE0000000000FFFFFF00FFFFFF0000000000BDBDBD00CECE + CE00DEDEDE000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000002963CE004273D6004273D6002963CE00000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000D6D6D600D6D6 + D600848484006363630063636300424242004242420063636300636363008484 + 8400D6D6D600D6D6D60000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000D6D6D600CECECE0042424200DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDE + DE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDE + DE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE0042424200DEDEDE004242 + 420000000000000000000000000000000000D6D6D600CECECE00CECECE00CECE + CE00CECECE00CECECE00CECECE00CECECE00CECECE00CECECE00CECECE00CECE + CE00CECECE00CECECE00CECECE00CECECE000000000000000000C6C6C600B5B5 + B500ADADAD0000000000FFFFFF00FFFFFF0000000000ADADAD00ADADAD00B5B5 + B500C6C6C600CECECE00CECECE00D6D6D6000000000000000000000000000000 + 000000000000000000000000000000000000D6D6D600CECECE00D6D6D6000000 + 000000000000D6D6D6002963CE00CECECE00CECECE002963CE00D6D6D6000000 + 000000000000D6D6D600CECECE00D6D6D6000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000D6D6D600636363006363 + 6300A5A5A500C6C6C600D6D6D600D6D6D600D6D6D600D6D6D600C6C6C600A5A5 + A5006363630063636300D6D6D600000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000315AC6000042C6000042C6000042C6000042C6000042C6000042C6000042 + C6000042C6000042C6000042C6000042C6000042C6000042C6000042C6000042 + C6000042C6000042C6000042C600315AC600DEDEDE0042424200E7E7E7004242 + 4200000000000000000000000000000000004242420042424200424242004242 + 4200424242004242420042424200424242004242420042424200424242004242 + 42004242420042424200424242004242420000000000FFFFFF00000000005252 + 52005A5A5A0000000000FFFFFF00FFFFFF00000000005A5A5A005A5A5A004A4A + 4A00424242004242420042424200424242000000000000000000000000000000 + 0000000000000000000000000000D6D6D600A5BDF7002963CE00A5BDF700CECE + CE00CECECE00A5BDF7004273D600CECECE00CECECE004273D600A5BDF700CECE + CE00CECECE00A5BDF7002963CE00A5BDF700D6D6D60000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000D6D6D600CECECE0063636300C6C6C600D6D6 + D600D6D6D600D6D6D600D6D6D600D6D6D600D6D6D600D6D6D600D6D6D600D6D6 + D600D6D6D600C6C6C60063636300CECECE00D6D6D60000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000042C600DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDE + DE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDE + DE00DEDEDE00DEDEDE00DEDEDE000042C600DEDEDE0042424200E7E7E7004242 + 42000000000000000000000000000000000042424200C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C60000000000FFFFFF00FFFFFF000000 + 000000000000FFFFFF00FFFFFF0000000000A5A5A500A5A5A500A5A5A500ADAD + AD00B5B5B500B5B5B500BDBDBD00424242000000000000000000000000000000 + 0000000000000000000000000000A5BDF7000042C600CECECE000042C600A5BD + F7002963CE000042C600CECECE00CECECE00CECECE00CECECE000042C6002963 + CE00A5BDF7000042C600CECECE000042C600A5BDF70000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000C6C6C60042424200C6C6C600DEDEDE00DEDE + DE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDE + DE00DEDEDE00DEDEDE00C6C6C60042424200C6C6C60000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000042C600DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDE + DE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDE + DE00DEDEDE00DEDEDE00DEDEDE000042C600E7E7E70042424200E7E7E7004242 + 42000000000000000000000000000000000042424200C6C6C600FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000000000FFFFFF00FFFFFF00FFFF + FF0000000000FFFFFF00FFFFFF0000000000BDBDBD00C6C6C600C6C6C600CECE + CE00D6D6D600DEDEDE00B5B5B500424242000000000000000000000000000000 + 00000000000000000000000000002963CE00CECECE00CECECE00CECECE000042 + C600CECECE00CECECE00CECECE00CECECE00CECECE00CECECE00CECECE00CECE + CE000042C600CECECE00CECECE00CECECE002963CE0000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000D6D6D60063636300C6C6C600DEDEDE00DEDEDE00DEDE + DE00DEDEDE00315AC6000042C6000042C6000042C6000042C600315AC600DEDE + DE00DEDEDE00DEDEDE00DEDEDE00C6C6C60063636300D6D6D600000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000042C600DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDE + DE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDE + DE00DEDEDE00DEDEDE00DEDEDE000042C600E7E7E70042424200E7E7E7004242 + 42000000000000000000000000000000000042424200C6C6C600FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00000000000000000000000000000000000000 + 0000CECECE00DEDEDE00B5B5B500424242000000000000000000000000000000 + 0000000000000000000000000000A5BDF7000042C600CECECE00CECECE00CECE + CE00CECECE00CECECE00CECECE00CECECE00CECECE00CECECE00CECECE00CECE + CE00CECECE00CECECE00CECECE000042C600A5BDF70000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000D6D6D60063636300C6C6C600DEDEDE00DEDEDE00DEDEDE00DEDE + DE00DEDEDE00DEDEDE00315AC6000042C6000042C600315AC600DEDEDE00DEDE + DE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00C6C6C60063636300D6D6D6000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000042C600E7E7E700E7E7E700E7E7E700E7E7E700E7E7E700E7E7E700E7E7 + E700E7E7E700E7E7E700E7E7E700E7E7E700E7E7E700E7E7E700E7E7E700E7E7 + E700E7E7E700E7E7E700E7E7E7000042C600E7E7E70042424200E7E7E7004242 + 42000000000000000000000000000000000042424200C6C6C600FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000000000CECE + CE00D6D6D600EFEFEF00BDBDBD00424242000000000000000000000000000000 + 000000000000000000000000000000000000A5BDF7000042C600CECECE00CECE + CE00CECECE00CECECE00CECECE00CECECE00CECECE00CECECE00CECECE00CECE + CE00CECECE00CECECE000042C600A5BDF7000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000D6D6D60063636300DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDE + DE00DEDEDE00DEDEDE00315AC6000042C6000042C600315AC600DEDEDE00DEDE + DE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE0063636300D6D6D6000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000042C600E7E7E700E7E7E700E7E7E700E7E7E700E7E7E700E7E7E700E7E7 + E700E7E7E700E7E7E700E7E7E700E7E7E700E7E7E700E7E7E700E7E7E700E7E7 + E700E7E7E700E7E7E700E7E7E7000042C600E7E7E70042424200EFEFEF004242 + 42000000000000000000000000000000000042424200C6C6C600FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000000000CECECE00D6D6 + D600EFEFEF00F7F7F700BDBDBD00424242000000000000000000000000000000 + 0000000000000000000000000000D6D6D6002963CE00CECECE00CECECE00CECE + CE00CECECE00CECECE000042C6000042C6000042C6000042C600CECECE00CECE + CE00CECECE00CECECE00CECECE002963CE00D6D6D60000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000084848400A5A5A500E7E7E700E7E7E700E7E7E700E7E7E700E7E7 + E700E7E7E700E7E7E700315AC6000042C6000042C600315AC600E7E7E700E7E7 + E700E7E7E700E7E7E700E7E7E700E7E7E700E7E7E700A5A5A500848484000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000042C600E7E7E700E7E7E700E7E7E700E7E7E700E7E7E700E7E7E700E7E7 + E700E7E7E700E7E7E700E7E7E700E7E7E700E7E7E700E7E7E700E7E7E700E7E7 + E700E7E7E700E7E7E700E7E7E7000042C600E7E7E70042424200EFEFEF004242 + 42000000000000000000000000000000000042424200C6C6C600FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000000000CECECE00D6D6D600EFEF + EF00F7F7F700FFFFFF00C6C6C600424242000000000000000000000000000000 + 000000000000D6D6D600CECECE00A5BDF7000042C600CECECE00CECECE00CECE + CE00CECECE000042C600000000000000000000000000000000000042C600CECE + CE00CECECE00CECECE00CECECE000042C600A5BDF700CECECE00D6D6D6000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000063636300C6C6C600E7E7E700E7E7E700E7E7E700E7E7E700E7E7 + E700E7E7E700E7E7E700315AC6000042C6000042C600315AC600E7E7E700E7E7 + E700E7E7E700E7E7E700E7E7E700E7E7E700E7E7E700C6C6C600636363000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000042C600E7E7E700E7E7E700E7E7E700E7E7E700E7E7E700E7E7E700E7E7 + E700E7E7E700E7E7E700E7E7E700E7E7E700E7E7E700E7E7E700E7E7E700E7E7 + E700E7E7E700E7E7E700E7E7E7000042C600EFEFEF0042424200EFEFEF004242 + 42000000000000000000000000000000000042424200C6C6C600FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF0000000000CECECE00D6D6D600EFEFEF00F7F7 + F700FFFFFF00FFFFFF00C6C6C600424242000000000000000000000000000000 + 0000000000002963CE004273D6004273D600CECECE00CECECE00CECECE00CECE + CE000042C6000000000000000000000000000000000000000000000000000042 + C600CECECE00CECECE00CECECE00CECECE004273D6004273D6002963CE000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000063636300E7E7E700E7E7E700E7E7E700E7E7E700E7E7E700E7E7 + E700E7E7E700E7E7E700315AC6000042C6000042C600315AC600E7E7E700E7E7 + E700E7E7E700E7E7E700E7E7E700E7E7E700E7E7E700E7E7E700636363000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000042C600E7E7E700E7E7E700E7E7E700E7E7E700E7E7E700E7E7E700E7E7 + E700E7E7E700E7E7E700E7E7E700E7E7E700E7E7E700E7E7E700E7E7E700E7E7 + E700E7E7E700E7E7E700E7E7E7000042C600EFEFEF0042424200EFEFEF004242 + 42000000000000000000000000000000000042424200C6C6C600FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF0000000000CECECE00D6D6D600EFEFEF00F7F7F700FFFF + FF00FFFFFF00FFFFFF00C6C6C600424242000000000000000000000000000000 + 0000000000004273D600CECECE00CECECE00CECECE00CECECE00CECECE00CECE + CE000042C6000000000000000000000000000000000000000000000000000042 + C600CECECE00CECECE00CECECE00CECECE00CECECE00CECECE004273D6000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000042424200EFEFEF00EFEFEF00EFEFEF00EFEFEF00EFEFEF00EFEF + EF00EFEFEF00EFEFEF00315AC6000042C6000042C600315AC600EFEFEF00EFEF + EF00EFEFEF00EFEFEF00EFEFEF00EFEFEF00EFEFEF00EFEFEF00424242000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000042C600EFEFEF00EFEFEF00EFEFEF00EFEFEF00EFEFEF00EFEFEF00EFEF + EF00EFEFEF00EFEFEF00EFEFEF00EFEFEF00EFEFEF00EFEFEF00EFEFEF00EFEF + EF00EFEFEF00EFEFEF00EFEFEF000042C600EFEFEF0042424200EFEFEF004242 + 42000000000000000000000000000000000042424200C6C6C600FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF0000000000CECECE00D6D6D600EFEFEF00F7F7F700FFFFFF00FFFF + FF00FFFFFF00FFFFFF00C6C6C600424242000000000000000000000000000000 + 0000000000004273D600CECECE00CECECE00CECECE00CECECE00CECECE00CECE + CE000042C6000000000000000000000000000000000000000000000000000042 + C600CECECE00CECECE00CECECE00CECECE00CECECE00CECECE004273D6000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000042424200EFEFEF00EFEFEF00EFEFEF00EFEFEF00EFEFEF00EFEF + EF00EFEFEF00637BD6000042C6000042C6000042C600315AC600EFEFEF00EFEF + EF00EFEFEF00EFEFEF00EFEFEF00EFEFEF00EFEFEF00EFEFEF00424242000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000042C600EFEFEF00EFEFEF00EFEFEF00EFEFEF00EFEFEF00EFEFEF00EFEF + EF00EFEFEF00EFEFEF00EFEFEF00EFEFEF00EFEFEF00EFEFEF00EFEFEF00EFEF + EF00EFEFEF00EFEFEF00EFEFEF000042C600EFEFEF0042424200EFEFEF004242 + 42000000000000000000000000000000000042424200C6C6C600FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000000000FFFFFF00FFFFFF00FFFF + FF0000000000CECECE00D6D6D600EFEFEF00F7F7F700FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00C6C6C600424242000000000000000000000000000000 + 0000000000004273D6004273D6004273D600CECECE00CECECE00CECECE00CECE + CE000042C600D6D6D60000000000000000000000000000000000D6D6D6000042 + C600CECECE00CECECE00CECECE00CECECE004273D6004273D6004273D6000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000063636300EFEFEF00EFEFEF00EFEFEF00EFEFEF00EFEFEF00EFEF + EF00EFEFEF00EFEFEF00EFEFEF00EFEFEF00EFEFEF00EFEFEF00EFEFEF00EFEF + EF00EFEFEF00EFEFEF00EFEFEF00EFEFEF00EFEFEF00EFEFEF00636363000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000042C600EFEFEF00EFEFEF00EFEFEF00EFEFEF00EFEFEF00EFEFEF00EFEF + EF00EFEFEF00EFEFEF00EFEFEF00EFEFEF00EFEFEF00EFEFEF00EFEFEF00EFEF + EF00EFEFEF00EFEFEF00EFEFEF000042C600EFEFEF0042424200F7F7F7004242 + 42000000000000000000000000000000000042424200C6C6C600FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000000000FFFFFF00FFFFFF000000 + 0000CECECE00D6D6D600EFEFEF00F7F7F700FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00C6C6C600424242000000000000000000000000000000 + 0000000000000000000000000000A5BDF7000042C600CECECE00CECECE00CECE + CE00CECECE000042C600CECECE00CECECE00CECECE00CECECE000042C600CECE + CE00CECECE00CECECE00CECECE000042C600A5BDF70000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000063636300C6C6C600EFEFEF00EFEFEF00EFEFEF00EFEFEF00EFEF + EF00EFEFEF00EFEFEF00EFEFEF00EFEFEF00EFEFEF00EFEFEF00EFEFEF00EFEF + EF00EFEFEF00EFEFEF00EFEFEF00EFEFEF00EFEFEF00C6C6C600636363000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000042C600EFEFEF00EFEFEF00EFEFEF00EFEFEF00EFEFEF00EFEFEF00EFEF + EF00EFEFEF00EFEFEF00EFEFEF00EFEFEF00EFEFEF00EFEFEF00EFEFEF00EFEF + EF00EFEFEF00EFEFEF00EFEFEF000042C600EFEFEF0042424200F7F7F7004242 + 42000000000000000000000000000000000042424200C6C6C600FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000000000FFFFFF0000000000DEDE + DE00DEDEDE00EFEFEF00F7F7F700FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00C6C6C600424242000000000000000000000000000000 + 0000000000000000000000000000000000002963CE00CECECE00CECECE00CECE + CE00CECECE00CECECE000042C6000042C6000042C6000042C600CECECE00CECE + CE00CECECE00CECECE00CECECE002963CE000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000084848400A5A5A500F7F7F700F7F7F700F7F7F700F7F7F700F7F7 + F700F7F7F700F7F7F700ADB5EF00315AC600315AC600ADB5EF00F7F7F700F7F7 + F700F7F7F700F7F7F700F7F7F700F7F7F700F7F7F700A5A5A500848484000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000042C600EFEFEF00EFEFEF00EFEFEF00EFEFEF00EFEFEF00EFEFEF00EFEF + EF00EFEFEF00EFEFEF00EFEFEF00EFEFEF00EFEFEF00EFEFEF00EFEFEF00EFEF + EF00EFEFEF00EFEFEF00EFEFEF000042C600F7F7F70042424200F7F7F7004242 + 42000000000000000000000000000000000042424200C6C6C600FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000000000000000F7F7F700EFEF + EF00EFEFEF00F7F7F700FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00C6C6C600424242000000000000000000000000000000 + 0000000000000000000000000000D6D6D600A5BDF7000042C600CECECE00CECE + CE00CECECE00CECECE00CECECE00CECECE00CECECE00CECECE00CECECE00CECE + CE00CECECE00CECECE000042C600A5BDF700D6D6D60000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000D6D6D60063636300F7F7F700F7F7F700F7F7F700F7F7F700F7F7 + F700F7F7F700F7F7F7000042C6000042C6000042C6000042C600F7F7F700F7F7 + F700F7F7F700F7F7F700F7F7F700F7F7F700F7F7F70063636300D6D6D6000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000042C600EFEFEF00EFEFEF00EFEFEF00EFEFEF00EFEFEF00EFEFEF00EFEF + EF00EFEFEF00EFEFEF00EFEFEF00EFEFEF00EFEFEF00EFEFEF00EFEFEF00EFEF + EF00EFEFEF00EFEFEF00EFEFEF000042C600F7F7F70042424200F7F7F7004242 + 42000000000000000000000000000000000042424200C6C6C600FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000000000FFFFFF00FFFFFF00F7F7 + F700FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00C6C6C600424242000000000000000000000000000000 + 0000000000000000000000000000A5BDF7000042C600CECECE00CECECE00CECE + CE00CECECE00CECECE00CECECE00CECECE00CECECE00CECECE00CECECE00CECE + CE00CECECE00CECECE00CECECE000042C600A5BDF70000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000063636300D6D6D600F7F7F700F7F7F700F7F7F700F7F7 + F700F7F7F700F7F7F7000042C6000042C6000042C6000042C600F7F7F700F7F7 + F700F7F7F700F7F7F700F7F7F700F7F7F700D6D6D60063636300000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000042C600F7F7F700F7F7F700F7F7F700F7F7F700F7F7F700F7F7F700F7F7 + F700F7F7F700F7F7F700F7F7F700F7F7F700F7F7F700F7F7F700F7F7F700F7F7 + F700F7F7F700F7F7F700F7F7F7000042C600F7F7F70042424200F7F7F7004242 + 42000000000000000000000000000000000042424200C6C6C600FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00C6C6C600424242000000000000000000000000000000 + 00000000000000000000000000002963CE00CECECE00CECECE00CECECE000042 + C600CECECE00CECECE00CECECE00CECECE00CECECE00CECECE00CECECE00CECE + CE000042C600CECECE00CECECE00CECECE002963CE0000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000063636300D6D6D600FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00ADB5EF00315AC600315AC600ADB5EF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00D6D6D6006363630000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000042C600F7F7F700F7F7F700F7F7F700F7F7F700F7F7F700F7F7F700F7F7 + F700F7F7F700F7F7F700F7F7F700F7F7F700F7F7F700F7F7F700F7F7F700F7F7 + F700F7F7F700F7F7F700F7F7F7000042C600F7F7F70042424200FFFFFF004242 + 42000000000000000000000000000000000042424200C6C6C600FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00C6C6C600424242000000000000000000000000000000 + 0000000000000000000000000000A5BDF7000042C600CECECE000042C600A5BD + F7002963CE000042C600CECECE00CECECE00CECECE00CECECE000042C6002963 + CE00A5BDF7000042C600CECECE000042C600A5BDF70000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000042424200D6D6D600FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00D6D6D600424242000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000042C600F7F7F700F7F7F700F7F7F700F7F7F700F7F7F700F7F7F700F7F7 + F700F7F7F700F7F7F700F7F7F700F7F7F700F7F7F700F7F7F700F7F7F700F7F7 + F700F7F7F700F7F7F700F7F7F7000042C600F7F7F70042424200424242000000 + 00000000000000000000000000000000000042424200C6C6C600FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00C6C6C600424242000000000000000000000000000000 + 000000000000000000000000000000000000A5BDF7002963CE00A5BDF7000000 + 000000000000A5BDF7004273D600CECECE00CECECE004273D600A5BDF7000000 + 000000000000A5BDF7002963CE00A5BDF7000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000C6C6C60063636300D6D6D600FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00D6D6D60063636300C6C6C6000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000042C600F7F7F700F7F7F700F7F7F700F7F7F700F7F7F700F7F7F700F7F7 + F700F7F7F700F7F7F700F7F7F700F7F7F700F7F7F700F7F7F700F7F7F700F7F7 + F700F7F7F700F7F7F700F7F7F7000042C600FFFFFF0042424200000000000000 + 00000000000000000000000000000000000042424200C6C6C600FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00C6C6C600424242000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000004273D600CECECE00CECECE004273D600000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000636363006363 + 6300A5A5A500C6C6C600FFFFFF00FFFFFF00FFFFFF00FFFFFF00C6C6C600A5A5 + A500636363006363630000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000042C600F7F7F700F7F7F700F7F7F700F7F7F700F7F7F700F7F7F700F7F7 + F700F7F7F700F7F7F700F7F7F700F7F7F700F7F7F700F7F7F700F7F7F700F7F7 + F700F7F7F700F7F7F700F7F7F7000042C6004242420000000000000000000000 + 00000000000000000000000000000000000042424200C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600424242000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000004273D6004273D6004273D6004273D600000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000000000000000000000D6D6 + D600848484006363630063636300424242004242420063636300636363008484 + 8400D6D6D6000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000042C600FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00315AC6000042 + C6000042C6000042C6000042C6000042C6000000000000000000000000000000 + 00000000000000000000000000000000000042424200E7520000E7520000E752 + 0000E7520000E7520000E7520000E7520000E7520000E7520000E7520000E752 + 0000E7520000E7520000E7520000E7520000E7520000E7520000E7520000E752 + 0000E7520000E7520000E7520000E7520000E7520000E7520000E7520000E752 + 0000E7520000E7520000E7520000424242000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000042C600FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000042C600FFFF + FF00FFFFFF00FFFFFF000042C600000000000000000000000000000000000000 + 00000000000000000000000000000000000042424200E7520000E7520000E752 + 0000E7520000E7520000E7520000E7520000E7520000E7520000E7520000E752 + 0000E7520000E7520000E7520000E7520000E7520000E7520000E7520000E752 + 0000E7520000E7520000E7520000E7520000E7520000E7520000E7520000E752 + 0000E7520000E7520000E7520000424242000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000042C600FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000042C600FFFF + FF00FFFFFF000042C60000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000C6C6C60042424200424242004242 + 4200424242004242420042424200424242004242420042424200424242004242 + 4200424242004242420042424200424242004242420042424200424242004242 + 4200424242004242420042424200424242004242420042424200424242004242 + 4200424242004242420042424200C6C6C6000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000042C600FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000042C600FFFF + FF000042C6000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000042C600FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000042C6000042 + C600000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000315AC6000042C6000042C6000042C6000042C6000042C6000042C6000042 + C6000042C6000042C6000042C6000042C6000042C6000042C6000042C6000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000424D3E000000000000003E000000 + 2800000080000000A00000000100010000000000000A00000000000000000000 + 000000000000000000000000FFFFFF00FF8000FFFFFFFFFF0000000000000000 + FF8000FFFFFFFFFF0000000000000000FF8000FFFFFFFFFF0000000000000000 + FF8000FF000000000000000000000000FF8000FF000000000000000000000000 + FF8000FF000000000000000000000000FF8000FF000000000000000000000000 + FF8000FF000000000000000000000000FF8000FF000000000000000000000000 + FF8000FF000000000000000000000000FF8000FF000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000FFFFFFFF000000000000000000000000 + FFFFFFFF000000000000000000000000FFFFFFFFFFFFFFFF0000000000000000 + FFFFFFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + 00000000FFFFFFFFFFFFFFFFFFFFFFFF00000000FFFFFFFFFFFFFFFFFFFFFFFF + 00000000FFFFFFFFFFFFFFFFFFFFFFFF00000000FFFFFFFFFFE007FFFFFFFFFF + 00000000F807FFFFFFC003FFFFFFFFFF00000000F003FFFFFF8001FFFFFFFFFF + 000000000001FFFFFE00007FFFFFFFFF0000000000001FFFFE00007FFFFFFFFF + 000000000000003FFC00003FFFFFFFFF000000000000000FF800001FFFFFFFFF + 0000000000000007F800001FEFEFBFBD0000000000000003F800001FCFCF3E19 + 00000000FC000001F800001FC79C36390000000080000000F800001FC0102639 + 000000FF00000000F800001FE0300E79000000FF00003E00F800001FE3330E39 + 000000FF0003FF80F800001FF2743F39000000FFFC07FFC0F800001FF0703E3B + 000000FFFC0FFFE0F800001FFAF00043000000FFFFFFFFE0F800001FF8E00307 + 000000FFFFFFFFF0FC00003FFFFFFFFF000000FFFFFFFFF0FE00007FFFFFFFFF + 000000FFFFFFFFF0FF0000FFFFFFFFFF000000FFFFFFFFF0FF0000FFFFFFFFFF + 000000FFFFFFFFF0FFC003FFFFFFFFFF000000FFFFFFFFFFFFE007FFFFFFFFFF + 000000FFFFFFFFFFFFFFFFFFFFFFFFFF000000FFFFFFFFFFFFFFFFFFFFFFFFFF + 000000FFFFFFFFFFFFFFFFFFFFFFFFFF000001FFFFFFFFFFFFFFFFFFFFFFFFFF + 000001FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + E003FFFFFF83FFFFFFFFFFFFFFFFFFFFE003FFFFFF0007FFFFFFFFFFFFFFFFFF + E003FFFFFE00003FFFFFFFFFFFFFFFFFE0003FFFFE00001FFFFFFFFFFFFFFFFF + E0000FFFFE00001FFFFFFFFFFFFFFFFFE00001FFFE00001F00000000FFFFFFFF + E000003FFE00001F0000000000000000E000000FFE00001F0000000000000000 + E0000007FE00001F0000000000000000E0000007FE00001F0000000000000000 + E0000007FE00001F0000000000000000E0000007FE00001F0000000000000000 + F8000007FE00001F0000000000000000F000000FFE00001F0000000000000000 + F000000FFE00001F0000000000000000F000000FFE00001F0000000000000000 + E000001FFE00001F0000000000000000E000001FFE00001F0000000000000000 + E000001FFE00001F0000000000000000E000003FFE00001F0000000000000000 + E000003FFE00001F0000000000000000F000007FFE00001F0000000000000000 + FE00007FFE00001F0000000000000000FFC0007FFE00001F0000000000000000 + FFF000FFFE00001FFFFFFFFFFFFFFFFFFFFE00FFFE00001FFFFFFFFFFFFFFFFF + FFFF81FFFE00001FFFFFFFFFFFFFFFFFFFFFFFFFFF00003FFFFFFFFFFFFFFFFF + FFFFFFFFFF80007FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE3E7FFFFFFFF + FFF81FFFFFFFFFFFFFFFE3C7FFFFFFFFFFC003FFFFFFFFFFFFFF81C0FFFFFFFF + FF0000FFFFFFFFFFFFFF0181FFFFFFC7FE00007FFFFFFFFFFFFF8083FFFFFF87 + FC00003FFFFFFFFFFFFFC003FFFFFF07F800001FFFFFFFFF00000000FFFFFE0F + F000000F0000000000000000FFFFFC1FF000000F0000000000000000FFFFF83F + E00000070000000000000000FF80307FE00000070000000000000000FC00007F + E0000003000000000000000000000000C0000003000000000000000000000000 + C0000003000000000000000000000000C0000003000000000000000000000000 + C0000003000000000000000000000000C0000003000000000000000000000000 + C0000003000000000000000000000000C0000003000000000000000000000000 + C0000003000000000000000000000000E0000007000000000000000000000000 + E0000007000000000000000000000000F000000F000000000000000000000000 + F000000F000000000000000000000000F800001FFFFFFFFF0000000000000000 + FC00003FFFFFFFFF0000000000000000FE00007FFFFFFFFF0000000000000000 + FF0000FFFFFFFFFFFFFFFFFF00000000FFC003FFFFFFFFFFFFFFFFFFFF007FFF + FFF81FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7FFFFFFFFFFFFFFFFFFFFFFFF + FFFFFF03FFFFFFFFFFFFFFFFFF00000FFFFFFE03FFFFFFFFFFFFFFFFFF00000F + FFFFFE07FFFFFFFFFFFFFFFFFC00000FFFFFFC07FFFC3FFFFFE007FFFC00000F + FFFF6007FFFC3FFFFFC003FFF000000F00000000FF1818FFFF8001FFF000000F + 00000000FE00007FFE00007FF000000F00000000FE00007FFE00007FF000000F + 00000000FE00007FFC00003FF000000F00000000FE00007FF800001FF000000F + 00000000FF0000FFF800001FF000000F00000000FE00007FF800001FF000000F + 00000000F803C01FF800001FF000000F00000000F807E01FF800001FF000000F + 00000000F807E01FF800001FF000000F00000000F807E01FF800001FF000000F + 00000000F803C01FF800001FF000000F00000000FE00007FF800001FF000000F + 00000000FF0000FFF800001FF000000F00000000FE00007FF800001FF000000F + 00000000FE00007FFC00003FF000000F00000000FE00007FFE00007FF000000F + 00000000FE00007FFF0000FFF000001F00000000FF1818FFFF0000FFF000003F + 00000000FFFC3FFFFFC003FFF000007F00000000FFFC3FFFFFE007FFF00000FF + 00000000FFFFFFFFFFFFFFFFF00001FF00000000FFFFFFFFFFFFFFFFF00003FF + 00000000FFFFFFFFFFFFFFFFF00007FFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFF + FFFFFFFFFFFFFFFFFFFFFFFFF0001FFF00000000000000000000000000000000 + 000000000000} + end +end diff --git a/developer/src/tike/actions/dmActionsMain.pas b/developer/src/tike/actions/dmActionsMain.pas index 8bf5a3a299..c5338dfea4 100644 --- a/developer/src/tike/actions/dmActionsMain.pas +++ b/developer/src/tike/actions/dmActionsMain.pas @@ -78,9 +78,6 @@ type actFileSaveAs: TFileSaveAs; actFileSaveCopyAs: TAction; actFileRevert: TAction; - actFilePageSetup: TFilePageSetup; - actFilePrint: TAction; - actFilePrintPreview: TAction; actFileExit: TFileExit; actEditCut: TKMDEditCut; actEditCopy: TKMDEditCopy; @@ -144,15 +141,10 @@ type procedure actFileSaveExecute(Sender: TObject); procedure actFileSaveCopyAsExecute(Sender: TObject); procedure actFileRevertExecute(Sender: TObject); - procedure actFilePrintPreviewExecute(Sender: TObject); - procedure actFilePrintExecute(Sender: TObject); - procedure actFilePrintPreviewUpdate(Sender: TObject); - procedure actFilePrintUpdate(Sender: TObject); procedure actFileSaveAsAccept(Sender: TObject); procedure actFileSaveCopyAsUpdate(Sender: TObject); procedure actFileSaveAsUpdate(Sender: TObject); procedure actFileRevertUpdate(Sender: TObject); - procedure actFilePageSetupUpdate(Sender: TObject); procedure actFileSaveUpdate(Sender: TObject); procedure actFileSaveAsBeforeExecute(Sender: TObject); procedure actViewCharacterMapExecute(Sender: TObject); @@ -256,7 +248,6 @@ uses Graphics, Messages, Keyman.Developer.UI.TikeOnlineUpdateCheck, - Printers, Vcl.Clipbrd, Keyman.System.KeyboardUtils, Keyman.Developer.System.Project.Project, @@ -348,34 +339,6 @@ begin actFileOpen.Enabled := IsGlobalProjectUIReady; end; -procedure TmodActionsMain.actFilePageSetupUpdate(Sender: TObject); -begin - with frmKeymanDeveloper do - actFilePageSetup.Enabled := IsGlobalProjectUIReady and Assigned(ActiveChild) and Supports(ActiveChild, IKMDPrintActions) and (Printer.Printers.Count > 0); -end; - -procedure TmodActionsMain.actFilePrintExecute(Sender: TObject); -begin - (frmKeymanDeveloper.ActiveChild as IKMDPrintActions).PrintFile; -end; - -procedure TmodActionsMain.actFilePrintUpdate(Sender: TObject); -begin - with frmKeymanDeveloper do - actFilePrint.Enabled := IsGlobalProjectUIReady and Assigned(ActiveChild) and Supports(ActiveChild, IKMDPrintActions) and (Printer.Printers.Count > 0); -end; - -procedure TmodActionsMain.actFilePrintPreviewExecute(Sender: TObject); -begin - (frmKeymanDeveloper.ActiveChild as IKMDPrintPreviewActions).PrintPreview; -end; - -procedure TmodActionsMain.actFilePrintPreviewUpdate(Sender: TObject); -begin - with frmKeymanDeveloper do - actFilePrintPreview.Enabled := IsGlobalProjectUIReady and Assigned(ActiveChild) and Supports(ActiveChild, IKMDPrintPreviewActions) and (Printer.Printers.Count > 0); -end; - procedure TmodActionsMain.actFileRevertExecute(Sender: TObject); begin if MessageDlg('Are you sure you want to revert to the last saved version?', diff --git a/developer/src/tike/child/Keyman.Developer.UI.UfrmModelEditor.dfm b/developer/src/tike/child/Keyman.Developer.UI.UfrmModelEditor.dfm index 12a46b043c..ad25a6a710 100644 --- a/developer/src/tike/child/Keyman.Developer.UI.UfrmModelEditor.dfm +++ b/developer/src/tike/child/Keyman.Developer.UI.UfrmModelEditor.dfm @@ -1,587 +1,587 @@ -inherited frmModelEditor: TfrmModelEditor - Left = 0 - Top = 0 - Caption = 'frmModelEditor' - ClientHeight = 708 - ClientWidth = 712 - Font.Name = 'Tahoma' - Position = poDesigned - ExplicitWidth = 712 - ExplicitHeight = 708 - PixelsPerInch = 96 - TextHeight = 13 - object pages: TLeftTabbedPageControl - Left = 0 - Top = 0 - Width = 712 - Height = 708 - ActivePage = pageDetails - Align = alClient - Font.Charset = ANSI_CHARSET - Font.Color = clWindowText - Font.Height = -11 - Font.Name = 'Segoe UI' - Font.Style = [] - Images = modActionsMain.ilEditorPages - MultiLine = True - OwnerDraw = True - ParentFont = False - TabHeight = 90 - TabOrder = 0 - TabPosition = tpLeft - TabWidth = 60 - OnChanging = pagesChanging - object pageDetails: TTabSheet - Caption = 'Details' - ImageIndex = 2 - object sbDetails: TScrollBox - Left = 0 - Top = 0 - Width = 619 - Height = 708 - Align = alClient - BevelInner = bvNone - BevelOuter = bvNone - BorderStyle = bsNone - Color = 14211288 - ParentColor = False - TabOrder = 0 - OnMouseWheel = sbDetailsMouseWheel - object panWordlists: TPanel - AlignWithMargins = True - Left = 4 - Top = 279 - Width = 611 - Height = 232 - Margins.Left = 4 - Margins.Top = 4 - Margins.Right = 4 - Margins.Bottom = 4 - Align = alTop - BevelOuter = bvNone - TabOrder = 1 - ExplicitTop = 261 - DesignSize = ( - 611 - 232) - object lblWordlists: TLabel - AlignWithMargins = True - Left = 12 - Top = 4 - Width = 64 - Height = 17 - Caption = 'Wordlists' - Font.Charset = ANSI_CHARSET - Font.Color = clWindowText - Font.Height = -14 - Font.Name = 'Tahoma' - Font.Style = [fsBold] - ParentFont = False - end - object lblReadOnly: TLabel - Left = 15 - Top = 200 - Width = 415 - Height = 13 - Caption = - 'The editor was unable to parse the source file. Details shown he' + - 're are read-only.' - end - object gridWordlists: TStringGrid - Left = 12 - Top = 27 - Width = 485 - Height = 160 - Anchors = [akLeft, akTop, akRight] - ColCount = 1 - FixedCols = 0 - FixedRows = 0 - Options = [goFixedVertLine, goFixedHorzLine, goVertLine, goHorzLine, goRowSelect] - TabOrder = 0 - OnDblClick = gridWordlistsDblClick - ColWidths = ( - 271) - RowHeights = ( - 24 - 24 - 24 - 24 - 24) - end - object cmdAddWordlist: TButton - Left = 503 - Top = 27 - Width = 101 - Height = 25 - Anchors = [akTop, akRight] - Caption = '&Add...' - TabOrder = 1 - OnClick = cmdAddWordlistClick - end - object cmdRemoveWordlist: TButton - Left = 503 - Top = 58 - Width = 100 - Height = 25 - Anchors = [akTop, akRight] - Caption = 'Remove' - TabOrder = 2 - OnClick = cmdRemoveWordlistClick - end - end - object panBasicInformation: TPanel - AlignWithMargins = True - Left = 4 - Top = 6 - Width = 611 - Height = 265 - Margins.Left = 4 - Margins.Top = 6 - Margins.Right = 4 - Margins.Bottom = 4 - Align = alTop - AutoSize = True - BevelOuter = bvNone - ParentColor = True - TabOrder = 0 - DesignSize = ( - 611 - 265) - object lblFormat: TLabel - Left = 12 - Top = 30 - Width = 36 - Height = 13 - Caption = '&Format' - FocusControl = cbFormat - end - object lblBasicInformation: TLabel - AlignWithMargins = True - Left = 12 - Top = 3 - Width = 123 - Height = 17 - Caption = 'Basic Information' - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -14 - Font.Name = 'Tahoma' - Font.Style = [fsBold] - ParentFont = False - end - object lblWordBreaker: TLabel - Left = 12 - Top = 56 - Width = 71 - Height = 13 - Caption = '&Word breaker' - end - object lblComments: TLabel - Left = 12 - Top = 181 - Width = 50 - Height = 13 - Caption = 'Comme&nts' - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -11 - Font.Name = 'Tahoma' - Font.Style = [] - ParentFont = False - end - object lblInsertAfterWord: TLabel - Left = 12 - Top = 83 - Width = 86 - Height = 13 - Caption = '&Insert after word' - FocusControl = cbInsertAfterWord - end - object lblQuotationMarks: TLabel - Left = 12 - Top = 110 - Width = 86 - Height = 13 - Caption = '&Quotation marks' - FocusControl = cbOpenQuote - end - object lblOpenQuote: TLabel - Left = 106 - Top = 110 - Width = 27 - Height = 13 - Caption = 'open' - FocusControl = cbOpenQuote - end - object lblCloseQuote: TLabel - Left = 220 - Top = 110 - Width = 26 - Height = 13 - Caption = 'close' - FocusControl = cbCloseQuote - end - object cbFormat: TComboBox - Left = 106 - Top = 26 - Width = 145 - Height = 21 - Style = csDropDownList - TabOrder = 0 - OnClick = cbFormatClick - Items.Strings = ( - 'Wordlist (trie-1.0)' - 'Custom (custom-1.0)') - end - object cbWordBreaker: TComboBox - Left = 106 - Top = 53 - Width = 145 - Height = 21 - Style = csDropDownList - TabOrder = 1 - OnClick = cbWordBreakerClick - Items.Strings = ( - 'default' - 'ascii' - 'custom') - end - object memoComments: TMemo - Left = 106 - Top = 178 - Width = 498 - Height = 87 - Anchors = [akLeft, akTop, akRight] - BevelOuter = bvNone - TabOrder = 7 - OnChange = memoCommentsChange - end - object cbInsertAfterWord: TComboBox - Left = 106 - Top = 80 - Width = 145 - Height = 21 - TabOrder = 2 - OnChange = cbInsertAfterWordClick - OnClick = cbInsertAfterWordClick - OnKeyUp = cbInsertAfterWordKeyUp - end - object cbOpenQuote: TComboBox - Left = 139 - Top = 107 - Width = 63 - Height = 21 - TabOrder = 3 - OnChange = cbOpenQuoteClick - OnClick = cbOpenQuoteClick - OnKeyUp = cbOpenQuoteKeyUp - end - object chkIsRTL: TCheckBox - Left = 106 - Top = 134 - Width = 111 - Height = 17 - Caption = 'Right-to-left script' - TabOrder = 5 - OnClick = chkIsRTLClick - end - object cbCloseQuote: TComboBox - Left = 252 - Top = 107 - Width = 63 - Height = 21 - TabOrder = 4 - OnChange = cbCloseQuoteClick - OnClick = cbCloseQuoteClick - OnKeyUp = cbCloseQuoteKeyUp - end - object chkLanguageUsesCasing: TCheckBox - Left = 106 - Top = 155 - Width = 145 - Height = 17 - Caption = 'Language uses casing' - TabOrder = 6 - OnClick = chkLanguageUsesCasingClick - end - end - end - end - object pageSource: TTabSheet - Caption = 'Source' - ImageIndex = 9 - end - object pageCompile: TTabSheet - Caption = 'Build' - ImageIndex = 1 - object sbCompile: TScrollBox - Left = 0 - Top = 0 - Width = 619 - Height = 708 - Align = alClient - BevelInner = bvNone - BevelOuter = bvNone - BorderStyle = bsNone - Color = 14211288 - ParentColor = False - TabOrder = 0 - OnMouseWheel = sbDetailsMouseWheel - object lblCongrats: TLabel - Left = 10 - Top = 13 - Width = 333 - Height = 13 - Caption = - 'The model must be compiled in order to distribute or install ' + - 'it' - end - object panBuildLexicalModel: TPanel - Left = 10 - Top = 235 - Width = 471 - Height = 353 - BevelOuter = bvNone - Color = 15921906 - ParentBackground = False - TabOrder = 2 - object lblDebugHostCaption: TLabel - Left = 12 - Top = 158 - Width = 222 - Height = 13 - Caption = 'Server is active at following web addresses:' - end - object lblCrossPlatform: TLabel - Left = 12 - Top = 14 - Width = 237 - Height = 17 - Caption = 'Test Lexical Model in Web Browser' - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -14 - Font.Name = 'Tahoma' - Font.Style = [fsBold] - ParentFont = False - end - object Label1: TLabel - Left = 12 - Top = 48 - Width = 105 - Height = 13 - Caption = 'Keyboard for testing' - end - object Label2: TLabel - Left = 12 - Top = 72 - Width = 389 - Height = 26 - Caption = - 'Optionally, select a compiled keyboard with which to test this l' + - 'exical model. Any keyboards already loaded in the web debugger w' + - 'ill also be available.' - WordWrap = True - end - object imgQRCode: TImage - Left = 309 - Top = 152 - Width = 128 - Height = 128 - Proportional = True - Stretch = True - end - object cmdTestLexicalModel: TButton - Left = 12 - Top = 122 - Width = 150 - Height = 25 - Action = modActionsModelEditor.actModelTest - TabOrder = 2 - end - object cmdOpenDebugHost: TButton - Left = 12 - Top = 286 - Width = 109 - Height = 25 - Caption = 'Open in browser' - TabOrder = 5 - OnClick = cmdOpenDebugHostClick - end - object lbDebugHosts: TListBox - Left = 12 - Top = 183 - Width = 289 - Height = 97 - ItemHeight = 13 - TabOrder = 4 - OnClick = lbDebugHostsClick - end - object cmdSendURLsToEmail: TButton - Left = 127 - Top = 286 - Width = 109 - Height = 25 - Caption = 'Send to &email...' - TabOrder = 6 - OnClick = cmdSendURLsToEmailClick - end - object editTestKeyboard: TEdit - Left = 123 - Top = 45 - Width = 158 - Height = 21 - TabOrder = 0 - OnChange = editTestKeyboardChange - end - object cmdBrowseTestKeyboard: TButton - Left = 287 - Top = 43 - Width = 75 - Height = 25 - Caption = '&Browse...' - TabOrder = 1 - OnClick = cmdBrowseTestKeyboardClick - end - object cmdCopyDebuggerLink: TButton - Left = 242 - Top = 286 - Width = 109 - Height = 25 - Caption = 'Copy &link' - TabOrder = 7 - OnClick = cmdCopyDebuggerLinkClick - end - object cmdConfigureWebDebugger: TButton - Left = 168 - Top = 122 - Width = 153 - Height = 25 - Action = modActionsMain.actToolsWebConfigure - TabOrder = 3 - end - end - object panOpenInExplorer: TPanel - Left = 10 - Top = 148 - Width = 471 - Height = 67 - BevelOuter = bvNone - Color = 15921906 - ParentBackground = False - TabOrder = 1 - object lblOpenInExplorer: TLabel - Left = 9 - Top = 6 - Width = 115 - Height = 17 - Caption = 'Open in Explorer' - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -14 - Font.Name = 'Tahoma' - Font.Style = [fsBold] - ParentFont = False - end - object cmdOpenSourceFolder: TButton - Left = 9 - Top = 33 - Width = 138 - Height = 25 - Caption = '&Open source folder' - TabOrder = 0 - OnClick = cmdOpenSourceFolderClick - end - object cmdOpenBuildFolder: TButton - Left = 153 - Top = 33 - Width = 138 - Height = 25 - Caption = 'Open &build folder' - TabOrder = 1 - OnClick = cmdOpenBuildFolderClick - end - object cmdOpenProjectFolder: TButton - Left = 297 - Top = 33 - Width = 138 - Height = 25 - Caption = 'Open pro&ject folder' - TabOrder = 2 - OnClick = cmdOpenProjectFolderClick - end - end - object panFileActions: TPanel - Left = 10 - Top = 32 - Width = 471 - Height = 97 - BevelOuter = bvNone - Color = 15921906 - ParentBackground = False - TabOrder = 0 - object lblFileActions: TLabel - Left = 9 - Top = 6 - Width = 75 - Height = 17 - Caption = 'File actions' - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -14 - Font.Name = 'Tahoma' - Font.Style = [fsBold] - ParentFont = False - end - object Label5: TLabel - Left = 10 - Top = 71 - Width = 82 - Height = 13 - Caption = 'Target filename:' - end - object cmdAddToProject: TButton - Left = 153 - Top = 32 - Width = 137 - Height = 25 - Action = modActionsMain.actProjectAddCurrentEditorFile - TabOrder = 1 - end - object cmdCompile: TButton - Left = 10 - Top = 32 - Width = 137 - Height = 25 - Action = modActionsModelEditor.actModelCompile - TabOrder = 0 - end - object editOutPath: TEdit - Left = 98 - Top = 68 - Width = 359 - Height = 21 - TabStop = False - ParentColor = True - ReadOnly = True - TabOrder = 2 - end - end - end - end - end - object dlgAddWordlist: TOpenDialog - Options = [ofHideReadOnly, ofPathMustExist, ofEnableSizing] - Title = 'Create or Add Wordlist' - Left = 32 - Top = 216 - end - object dlgBrowseTestKeyboard: TOpenDialog - DefaultExt = 'js' - Filter = 'Compiled keyboard files (*.js)|*.js|All files (*.*)|*.*' - Options = [ofHideReadOnly, ofPathMustExist, ofFileMustExist, ofEnableSizing] - Title = 'Select compiled keyboard to test with' - Left = 32 - Top = 280 - end -end +inherited frmModelEditor: TfrmModelEditor + Left = 0 + Top = 0 + Caption = 'frmModelEditor' + ClientHeight = 708 + ClientWidth = 712 + Font.Name = 'Tahoma' + Position = poDesigned + ExplicitWidth = 712 + ExplicitHeight = 708 + PixelsPerInch = 96 + TextHeight = 13 + object pages: TLeftTabbedPageControl + Left = 0 + Top = 0 + Width = 712 + Height = 708 + ActivePage = pageDetails + Align = alClient + Font.Charset = ANSI_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'Segoe UI' + Font.Style = [] + Images = modActionsMain.ilEditorPages + MultiLine = True + OwnerDraw = True + ParentFont = False + TabHeight = 90 + TabOrder = 0 + TabPosition = tpLeft + TabWidth = 60 + OnChanging = pagesChanging + object pageDetails: TTabSheet + Caption = 'Details' + ImageIndex = 2 + object sbDetails: TScrollBox + Left = 0 + Top = 0 + Width = 619 + Height = 708 + Align = alClient + BevelInner = bvNone + BevelOuter = bvNone + BorderStyle = bsNone + Color = 14211288 + ParentColor = False + TabOrder = 0 + OnMouseWheel = sbDetailsMouseWheel + object panWordlists: TPanel + AlignWithMargins = True + Left = 4 + Top = 279 + Width = 611 + Height = 232 + Margins.Left = 4 + Margins.Top = 4 + Margins.Right = 4 + Margins.Bottom = 4 + Align = alTop + BevelOuter = bvNone + TabOrder = 1 + ExplicitTop = 261 + DesignSize = ( + 611 + 232) + object lblWordlists: TLabel + AlignWithMargins = True + Left = 12 + Top = 4 + Width = 64 + Height = 17 + Caption = 'Wordlists' + Font.Charset = ANSI_CHARSET + Font.Color = clWindowText + Font.Height = -14 + Font.Name = 'Tahoma' + Font.Style = [fsBold] + ParentFont = False + end + object lblReadOnly: TLabel + Left = 15 + Top = 200 + Width = 415 + Height = 13 + Caption = + 'The editor was unable to parse the source file. Details shown he' + + 're are read-only.' + end + object gridWordlists: TStringGrid + Left = 12 + Top = 27 + Width = 485 + Height = 160 + Anchors = [akLeft, akTop, akRight] + ColCount = 1 + FixedCols = 0 + FixedRows = 0 + Options = [goFixedVertLine, goFixedHorzLine, goVertLine, goHorzLine, goRowSelect] + TabOrder = 0 + OnDblClick = gridWordlistsDblClick + ColWidths = ( + 271) + RowHeights = ( + 24 + 24 + 24 + 24 + 24) + end + object cmdAddWordlist: TButton + Left = 503 + Top = 27 + Width = 101 + Height = 25 + Anchors = [akTop, akRight] + Caption = '&Add...' + TabOrder = 1 + OnClick = cmdAddWordlistClick + end + object cmdRemoveWordlist: TButton + Left = 503 + Top = 58 + Width = 100 + Height = 25 + Anchors = [akTop, akRight] + Caption = 'Remove' + TabOrder = 2 + OnClick = cmdRemoveWordlistClick + end + end + object panBasicInformation: TPanel + AlignWithMargins = True + Left = 4 + Top = 6 + Width = 611 + Height = 265 + Margins.Left = 4 + Margins.Top = 6 + Margins.Right = 4 + Margins.Bottom = 4 + Align = alTop + AutoSize = True + BevelOuter = bvNone + ParentColor = True + TabOrder = 0 + DesignSize = ( + 611 + 265) + object lblFormat: TLabel + Left = 12 + Top = 30 + Width = 36 + Height = 13 + Caption = '&Format' + FocusControl = cbFormat + end + object lblBasicInformation: TLabel + AlignWithMargins = True + Left = 12 + Top = 3 + Width = 123 + Height = 17 + Caption = 'Basic Information' + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -14 + Font.Name = 'Tahoma' + Font.Style = [fsBold] + ParentFont = False + end + object lblWordBreaker: TLabel + Left = 12 + Top = 56 + Width = 71 + Height = 13 + Caption = '&Word breaker' + end + object lblComments: TLabel + Left = 12 + Top = 181 + Width = 50 + Height = 13 + Caption = 'Comme&nts' + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'Tahoma' + Font.Style = [] + ParentFont = False + end + object lblInsertAfterWord: TLabel + Left = 12 + Top = 83 + Width = 86 + Height = 13 + Caption = '&Insert after word' + FocusControl = cbInsertAfterWord + end + object lblQuotationMarks: TLabel + Left = 12 + Top = 110 + Width = 86 + Height = 13 + Caption = '&Quotation marks' + FocusControl = cbOpenQuote + end + object lblOpenQuote: TLabel + Left = 106 + Top = 110 + Width = 27 + Height = 13 + Caption = 'open' + FocusControl = cbOpenQuote + end + object lblCloseQuote: TLabel + Left = 220 + Top = 110 + Width = 26 + Height = 13 + Caption = 'close' + FocusControl = cbCloseQuote + end + object cbFormat: TComboBox + Left = 106 + Top = 26 + Width = 145 + Height = 21 + Style = csDropDownList + TabOrder = 0 + OnClick = cbFormatClick + Items.Strings = ( + 'Wordlist (trie-1.0)' + 'Custom (custom-1.0)') + end + object cbWordBreaker: TComboBox + Left = 106 + Top = 53 + Width = 145 + Height = 21 + Style = csDropDownList + TabOrder = 1 + OnClick = cbWordBreakerClick + Items.Strings = ( + 'default' + 'ascii' + 'custom') + end + object memoComments: TMemo + Left = 106 + Top = 178 + Width = 498 + Height = 87 + Anchors = [akLeft, akTop, akRight] + BevelOuter = bvNone + TabOrder = 7 + OnChange = memoCommentsChange + end + object cbInsertAfterWord: TComboBox + Left = 106 + Top = 80 + Width = 145 + Height = 21 + TabOrder = 2 + OnChange = cbInsertAfterWordClick + OnClick = cbInsertAfterWordClick + OnKeyUp = cbInsertAfterWordKeyUp + end + object cbOpenQuote: TComboBox + Left = 139 + Top = 107 + Width = 63 + Height = 21 + TabOrder = 3 + OnChange = cbOpenQuoteClick + OnClick = cbOpenQuoteClick + OnKeyUp = cbOpenQuoteKeyUp + end + object chkIsRTL: TCheckBox + Left = 106 + Top = 134 + Width = 111 + Height = 17 + Caption = 'Right-to-left script' + TabOrder = 5 + OnClick = chkIsRTLClick + end + object cbCloseQuote: TComboBox + Left = 252 + Top = 107 + Width = 63 + Height = 21 + TabOrder = 4 + OnChange = cbCloseQuoteClick + OnClick = cbCloseQuoteClick + OnKeyUp = cbCloseQuoteKeyUp + end + object chkLanguageUsesCasing: TCheckBox + Left = 106 + Top = 155 + Width = 145 + Height = 17 + Caption = 'Language uses casing' + TabOrder = 6 + OnClick = chkLanguageUsesCasingClick + end + end + end + end + object pageSource: TTabSheet + Caption = 'Source' + ImageIndex = 9 + end + object pageCompile: TTabSheet + Caption = 'Build' + ImageIndex = 1 + object sbCompile: TScrollBox + Left = 0 + Top = 0 + Width = 619 + Height = 708 + Align = alClient + BevelInner = bvNone + BevelOuter = bvNone + BorderStyle = bsNone + Color = 14211288 + ParentColor = False + TabOrder = 0 + OnMouseWheel = sbDetailsMouseWheel + object lblCongrats: TLabel + Left = 10 + Top = 13 + Width = 333 + Height = 13 + Caption = + 'The model must be compiled in order to distribute or install ' + + 'it' + end + object panBuildLexicalModel: TPanel + Left = 10 + Top = 235 + Width = 471 + Height = 353 + BevelOuter = bvNone + Color = 15921906 + ParentBackground = False + TabOrder = 2 + object lblDebugHostCaption: TLabel + Left = 12 + Top = 158 + Width = 222 + Height = 13 + Caption = 'Server is active at following web addresses:' + end + object lblCrossPlatform: TLabel + Left = 12 + Top = 14 + Width = 237 + Height = 17 + Caption = 'Test Lexical Model in Web Browser' + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -14 + Font.Name = 'Tahoma' + Font.Style = [fsBold] + ParentFont = False + end + object Label1: TLabel + Left = 12 + Top = 48 + Width = 105 + Height = 13 + Caption = 'Keyboard for testing' + end + object Label2: TLabel + Left = 12 + Top = 72 + Width = 389 + Height = 26 + Caption = + 'Optionally, select a compiled keyboard with which to test this l' + + 'exical model. Any keyboards already loaded in the web debugger w' + + 'ill also be available.' + WordWrap = True + end + object imgQRCode: TImage + Left = 309 + Top = 152 + Width = 128 + Height = 128 + Proportional = True + Stretch = True + end + object cmdTestLexicalModel: TButton + Left = 12 + Top = 122 + Width = 150 + Height = 25 + Action = modActionsModelEditor.actModelTest + TabOrder = 2 + end + object cmdOpenDebugHost: TButton + Left = 12 + Top = 286 + Width = 109 + Height = 25 + Caption = 'Open in browser' + TabOrder = 5 + OnClick = cmdOpenDebugHostClick + end + object lbDebugHosts: TListBox + Left = 12 + Top = 183 + Width = 289 + Height = 97 + ItemHeight = 13 + TabOrder = 4 + OnClick = lbDebugHostsClick + end + object cmdSendURLsToEmail: TButton + Left = 253 + Top = 286 + Width = 109 + Height = 25 + Caption = 'Send to &email...' + TabOrder = 7 + OnClick = cmdSendURLsToEmailClick + end + object editTestKeyboard: TEdit + Left = 123 + Top = 45 + Width = 158 + Height = 21 + TabOrder = 0 + OnChange = editTestKeyboardChange + end + object cmdBrowseTestKeyboard: TButton + Left = 287 + Top = 43 + Width = 75 + Height = 25 + Caption = '&Browse...' + TabOrder = 1 + OnClick = cmdBrowseTestKeyboardClick + end + object cmdCopyDebuggerLink: TButton + Left = 127 + Top = 286 + Width = 109 + Height = 25 + Caption = 'Copy &link' + TabOrder = 6 + OnClick = cmdCopyDebuggerLinkClick + end + object cmdConfigureWebDebugger: TButton + Left = 168 + Top = 122 + Width = 153 + Height = 25 + Action = modActionsMain.actToolsWebConfigure + TabOrder = 3 + end + end + object panOpenInExplorer: TPanel + Left = 10 + Top = 148 + Width = 471 + Height = 67 + BevelOuter = bvNone + Color = 15921906 + ParentBackground = False + TabOrder = 1 + object lblOpenInExplorer: TLabel + Left = 9 + Top = 6 + Width = 115 + Height = 17 + Caption = 'Open in Explorer' + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -14 + Font.Name = 'Tahoma' + Font.Style = [fsBold] + ParentFont = False + end + object cmdOpenSourceFolder: TButton + Left = 9 + Top = 33 + Width = 138 + Height = 25 + Caption = '&Open source folder' + TabOrder = 0 + OnClick = cmdOpenSourceFolderClick + end + object cmdOpenBuildFolder: TButton + Left = 153 + Top = 33 + Width = 138 + Height = 25 + Caption = 'Open &build folder' + TabOrder = 1 + OnClick = cmdOpenBuildFolderClick + end + object cmdOpenProjectFolder: TButton + Left = 297 + Top = 33 + Width = 138 + Height = 25 + Caption = 'Open pro&ject folder' + TabOrder = 2 + OnClick = cmdOpenProjectFolderClick + end + end + object panFileActions: TPanel + Left = 10 + Top = 32 + Width = 471 + Height = 97 + BevelOuter = bvNone + Color = 15921906 + ParentBackground = False + TabOrder = 0 + object lblFileActions: TLabel + Left = 9 + Top = 6 + Width = 75 + Height = 17 + Caption = 'File actions' + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -14 + Font.Name = 'Tahoma' + Font.Style = [fsBold] + ParentFont = False + end + object Label5: TLabel + Left = 10 + Top = 71 + Width = 82 + Height = 13 + Caption = 'Target filename:' + end + object cmdAddToProject: TButton + Left = 153 + Top = 32 + Width = 137 + Height = 25 + Action = modActionsMain.actProjectAddCurrentEditorFile + TabOrder = 1 + end + object cmdCompile: TButton + Left = 10 + Top = 32 + Width = 137 + Height = 25 + Action = modActionsModelEditor.actModelCompile + TabOrder = 0 + end + object editOutPath: TEdit + Left = 98 + Top = 68 + Width = 359 + Height = 21 + TabStop = False + ParentColor = True + ReadOnly = True + TabOrder = 2 + end + end + end + end + end + object dlgAddWordlist: TOpenDialog + Options = [ofHideReadOnly, ofPathMustExist, ofEnableSizing] + Title = 'Create or Add Wordlist' + Left = 32 + Top = 216 + end + object dlgBrowseTestKeyboard: TOpenDialog + DefaultExt = 'js' + Filter = 'Compiled keyboard files (*.js)|*.js|All files (*.*)|*.*' + Options = [ofHideReadOnly, ofPathMustExist, ofFileMustExist, ofEnableSizing] + Title = 'Select compiled keyboard to test with' + Left = 32 + Top = 280 + end +end diff --git a/developer/src/tike/child/Keyman.Developer.UI.UfrmModelEditor.pas b/developer/src/tike/child/Keyman.Developer.UI.UfrmModelEditor.pas index bc02e65bd7..baaa0a44aa 100644 --- a/developer/src/tike/child/Keyman.Developer.UI.UfrmModelEditor.pas +++ b/developer/src/tike/child/Keyman.Developer.UI.UfrmModelEditor.pas @@ -418,6 +418,7 @@ begin { Build tab } cmdOpenDebugHost.Enabled := lbDebugHosts.ItemIndex >= 0; + cmdCopyDebuggerLink.Enabled := lbDebugHosts.ItemIndex >= 0; cmdSendURLsToEmail.Enabled := lbDebugHosts.Items.Count > 0; // I4506 // We use FProjectFile because we don't want to accidentally create a standalone diff --git a/developer/src/tike/child/UfrmEditor.dfm b/developer/src/tike/child/UfrmEditor.dfm index 0af3d38484..3ab284045d 100644 --- a/developer/src/tike/child/UfrmEditor.dfm +++ b/developer/src/tike/child/UfrmEditor.dfm @@ -1,743 +1,735 @@ -inherited frmEditor: TfrmEditor - Left = 96 - Top = 288 - Caption = 'frmEditor' - ClientHeight = 228 - Icon.Data = { - 0000010004001010100000000000280100004600000010100000000000006803 - 00006E0100002020100000000000E8020000D60400002020000000000000A80C - 0000BE0700002800000010000000200000000100040000000000C00000000000 - 0000000000001000000000000000000000000000800000800000008080008000 - 00008000800080800000C0C0C000808080000000FF0000FF000000FFFF00FF00 - 0000FF00FF00FFFF0000FFFFFF00000000000000000000007000000000000000 - 7880000000000007788880000000000778777880000000778877777880000077 - 80777777F88007780780777FF78007780087777F78007780707777FF78007F87 - 807777F7800077FF77777FF780000077FF777F770000000077FFFF7800000000 - 0077F7800000000000007F800000FFFFFFFFF1FFFFFFF07FFFFFE01FFFFFE007 - FFFFC001FFFFC001FFFF8001FFFF8003FFFF0003FFFF0007FFFF0007FFFFC00F - FFFFF00FFFFFFC1FFFFFFF1FFFFF280000001000000020000000010018000000 - 0000400300000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000008494A5636B7B515D690000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 00008494A5636B7B637384637384515D69000000000000000000000000000000 - 0000000000000000000000000000008C9CAD8C9CAD6B7B8C7384946373846B73 - 846B7B8C515D6900000000000000000000000000000000000000000000000094 - A5B58C9CAD7384947B8C9C8494A594A5AD6B7B8C737B94738494515D69000000 - 0000000000000000000000009CADB594A5B56B7B9473849C8C94A58C9CAD9CAD - B5ADB5BDB5C6CE7384947384947B8C9C515D690000000000000000009CADB59C - ADB57384940000008C9CAD9CA5B5A5ADBDB5BDC6BDC6CEC6D6D6D6DEE77B8C9C - 6B7B8C000000000000ADB5BDA5B5BD6B84940000008C94A594A5AD000000ADBD - C6B5C6CEC6CED6D6DEDEDEE7E77B8C9C6B7B8C000000000000ADB5C6ADBDC673 - 849C000000000000737B94ADB5BDB5C6CEBDCED6CED6DEDEE7E78494A57B8C9C - 000000000000B5C6CEB5BDC67384940000008C9CAD000000A5B5BDB5BDC6BDC6 - CECED6DED6DEE7E7E7EF8C94A56B7B8C000000000000BDC6CEE7EFEF7B8C9C8C - 9CA594A5AD000000ADBDC6BDC6CEC6CED6D6DEDEDEE7E7949CAD8C9CAD000000 - 000000000000BDC6CEE7EFEFE7E7EFDEE7E79CADB5A5B5BDB5C6CEBDCED6D6DE - DEDEDEE7E7EFEF94A5AD6B7B8C000000000000000000000000000000BDC6CEDE - E7E7DEDEE7D6DEE7BDC6CECED6DED6DEE7E7E7EF9CADB59CA5B5000000000000 - 000000000000000000000000000000000000BDC6CED6DEE7D6DEE7D6DEDEE7E7 - EFEFEFEFA5B5BD6B7B8C00000000000000000000000000000000000000000000 - 0000000000000000BDC6CED6DEDED6DEDEADBDC6ADB5C6000000000000000000 - 000000000000000000000000000000000000000000000000000000000000BDC6 - CECED6DE6B7B8C000000000000000000000000000000FFFFFFFFF1FFFFFFF07F - FFFFE01FFFFFE007FFFFC001FFFFC001FFFF8001FFFF8003FFFF0003FFFF0007 - FFFF0007FFFFC00FFFFFF00FFFFFFC1FFFFFFF1FFFFF28000000200000004000 - 0000010004000000000080020000000000000000000000000000000000000000 - 0000000080000080000000808000800000008000800080800000C0C0C0008080 - 80000000FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000078800000000000000000000000000000778880000000000000000000000 - 0000777888880000000000000000000000007777888888000000000000000000 - 0007777887888888000000000000000000077788787788888800000000000000 - 0077778887787788888800000000000000777888777777778888880000000000 - 07777887878777777788888800000000077788787777777777F7888888800000 - 77778800787777777777F7888780000077788800777777777F7F7FF778000007 - 77788007870077777777FF77780000077788800700087777F77FFF7780000077 - 778800000877777777FFF77780000077788800008777777F7F7FF77800000777 - 788007807777777777FF77780000077788700770877777F77FFF77800000777F - F887787007777777FFF7778000007FFFFFF7777007777F7F7FF778000000077F - FFFFF77777777777FF777800000000077FFFFFF77777F77FFF77800000000000 - 077FFFFFF77777FFF77780000000000000077FFFFFF77F7FF778000000000000 - 0000077FFFFFF7FF7778000000000000000000077FFFFFFF7780000000000000 - 00000000077FFFF777800000000000000000000000077FFF7800000000000000 - 000000000000077FF8000000000000000000000000000007700000000000FFFF - FFFFFFCFFFFFFF83FFFFFF80FFFFFF003FFFFF000FFFFE0003FFFE0000FFFC00 - 003FFC00000FF8000003F8000001F0000001F0000003E0000003E0000007C000 - 0007C000000F8000000F8000001F0000001F0000003F8000003FE000007FF800 - 007FFE0000FFFF8000FFFFE001FFFFF801FFFFFE03FFFFFF83FFFFFFE7FF2800 - 000020000000400000000100180000000000800C000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 00000000515D69515D6900000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 008494A55A6B7B636B7B515D69515D6900000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 008494A57B8C9C637384636B7B637384515D69515D6900000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000008494 - A58494A58494A5636B7B637384637384637384637384515D69515D6900000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000008C9C - A58494A58494A58494A56373846373846373846B73846373846B7B8C515D6951 - 5D69000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000008C9CAD8C9C - A58C9CAD8494A56B7B8C6B7B947384946B73846373846B7B8C6B73846B7B8C6B - 7B8C515D69515D69000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000008C9CAD94A5 - AD8C9CA56B7B8C6B7B9473849473849C7B8C9C8C94A56B7B8C6B7B8C6B7B8C6B - 7B8C6B7B8C6B7B8C515D69515D69000000000000000000000000000000000000 - 00000000000000000000000000000000000000000000000094A5AD94A5B58C9C - AD8C9CAD6B7B8C7384947384947B8C9C8494A58494A58C9CAD94A5AD6B7B8C6B - 7B8C6B7B8C737B946B7B8C738494515D69515D69000000000000000000000000 - 00000000000000000000000000000000000000000000000094A5B594A5AD94A5 - AD6B7B8C6B7B947384947B8C9C8494A58494A58C9CAD949CAD9CA5B59CADB5A5 - B5BD6B7B8C7384946B7B8C738494737B94738494515D69515D69000000000000 - 0000000000000000000000000000000000000000009CADB59CA5B594A5B594A5 - AD6B7B9473849473849C7B8C9C8C94A58C9CA58C9CAD94A5B59CADB5A5ADBDAD - B5BDADBDC6B5C6CE737B947384947384947384947384947B8C9C515D69515D69 - 0000000000000000000000000000000000000000009CADB59CA5B59CADB56B7B - 8C6B7B947B8C9C7B8C9C8494A58494A58C9CAD94A5AD9CA5B59CADBDA5B5BDAD - BDC6B5BDC6B5C6CEC6CED6C6CED67384947384947B8C9C7384947B8C9C73849C - 6B7B8C000000000000000000000000000000A5ADBD9CADB59CADB59CADB56B7B - 947384940000000000008494A58C9CAD94A5AD9CA5B59CADB5A5ADBDADB5C6B5 - BDC6B5C6CEBDC6CEC6CED6C6D6D6CED6DED6DEE77384947B8C9C7B8C9C6B7B8C - 6B7B8C000000000000000000000000000000A5B5BDA5ADBD9CADB5737B947384 - 947B8C9C0000000000008C9CA5949CAD94A5B59CADB5A5ADBDA5B5BDADBDC6B5 - C6CEBDC6CEBDCED6C6CED6D6DEDED6DEE7DEDEE7E7E7EF7384947384946B7B8C - 000000000000000000000000000000ADB5BDA5B5BDA5B5BDA5ADBD6B84947384 - 940000000000008C94A58C9CAD94A5AD000000000000A5B5BDADBDC6B5BDC6B5 - C6CEC6CED6C6CED6CED6DED6DEDED6DEE7DEE7E77B8C9C7B8C9C7384946B7B8C - 000000000000000000000000000000ADB5BDADB5C6A5B5BD6B84947384947B8C - 9C0000000000008C9CAD000000000000000000737B94ADB5C6B5BDC6B5C6CEBD - C6CEC6CED6CED6DECED6DED6DEE7DEE7E7E7E7EF7B8C9C7B8C9C6B7B8C000000 - 000000000000000000000000ADBDC6ADB5C6ADB5BDADBDC673849473849C0000 - 00000000000000000000000000737B94A5ADBDADB5BDADBDC6B5C6CEBDC6CEBD - CED6C6CED6CED6DED6DEE7DEE7E7E7E7EF8494A57B8C9C7B8C9C6B7B8C000000 - 000000000000000000000000B5BDC6ADBDC6ADBDC66B7B947384947B8C9C0000 - 00000000000000000000737B949CADBDA5B5BDADBDC6B5BDC6BDC6CEBDCED6C6 - CED6CED6DED6DEDEDEDEE7DEE7E7E7EFEF8494A58494A56B7B8C000000000000 - 000000000000000000B5C6CEB5BDC6B5BDC6ADBDC67384947B8C9C0000000000 - 008C9CAD737B940000009CADBDA5B5BDADB5C6B5BDC6B5C6CEBDC6CEC6CED6CE - D6DED6DEDED6DEE7DEE7E7E7E7EF8C9CA58C94A58494A56B7B8C000000000000 - 000000000000000000B5C6CEB5BDC6B5BDC67384947B8C9C7B8C9C0000000000 - 00949CAD94A5B5000000737B94ADB5BDADBDC6B5C6CEBDC6CEBDCED6C6CED6CE - D6DED6DEE7DEE7E7E7E7EFE7EFEF8C9CAD8C9CA56B7B8C000000000000000000 - 000000000000BDC6CEBDC6CEB5C6CEE7EFEFE7E7EF7B8C9C8494A58C9CA58C9C - AD94A5AD9CA5B5000000000000ADBDC6B5BDC6BDC6CEBDCED6C6CED6CED6DED6 - DEDEDEDEE7DEE7E7E7EFEF949CAD8C9CAD8C9CAD6B7B8C000000000000000000 - 000000000000BDC6CEE7EFEFE7EFEFE7E7EFE7E7EFDEE7E7E7E7EF8C9CA594A5 - B59CA5B59CADB5000000000000B5BDC6B5C6CEBDC6CEC6CED6CED6DED6DEDED6 - DEE7DEE7E7E7E7EFEFF7F7949CAD94A5AD6B7B8C000000000000000000000000 - 000000000000000000BDC6CEBDC6CEE7EFEFE7E7EFE7E7EFDEE7E7DEE7E7DEE7 - E79CADB5A5ADBDA5B5BDADBDC6B5C6CEBDC6CEBDCED6C6CED6D6DEDED6DEE7DE - DEE7E7E7EFE7EFEF9CA5B594A5AD94A5AD6B7B8C000000000000000000000000 - 000000000000000000000000000000BDC6CEBDC6CEDEE7E7E7E7EFDEE7E7DEE7 - E7DEDEE7DEDEE7ADBDC6B5BDC6BDC6CEBDCED6C6CED6CED6DED6DEDED6DEE7DE - E7E7E7EFEFEFEFF79CADB59CA5B56B7B8C000000000000000000000000000000 - 000000000000000000000000000000000000000000BDC6CEBDC6CEDEE7E7DEE7 - E7DEDEE7DEE7E7D6DEE7DEDEE7BDC6CEC6CED6CED6DED6DEDED6DEE7DEE7E7E7 - E7EFEFF7F79CADB5A5ADBD9CA5B56B7B8C000000000000000000000000000000 - 000000000000000000000000000000000000000000000000000000BDC6CEBDC6 - CEDEE7E7D6DEE7DEDEE7D6DEDED6DEE7D6DEDECED6DED6DEE7DEE7E7E7E7EFE7 - EFEFEFEFF7A5ADBD9CADB56B7B94000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 00BDC6CEBDC6CED6DEE7D6DEDED6DEE7D6DEDED6DEDED6DEDEE7E7EFE7EFEFEF - EFEFA5B5BDA5B5BDA5ADBD6B7B8C000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 00000000000000BDC6CEBDC6CED6DEDED6DEDED6DEDECED6DECED6DECED6DECE - D6DEADB5BDA5B5BD6B7B8C000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 00000000000000000000000000BDC6CEBDC6CED6DEDECED6DED6DEDECED6DEAD - BDC6ADB5BDADB5C66B7B8C000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 00000000000000000000000000000000000000BDC6CEBDC6CECED6DECED6DECE - D6DEADBDC66B7B8C000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 00000000000000000000000000000000000000000000000000BDC6CEBDC6CECE - D6DEC6D6D66B7B8C000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 00000000000000000000000000000000000000000000000000000000000000BD - C6CEBDC6CE000000000000000000000000000000000000000000000000000000 - 000000000000FFFFFFFFFFCFFFFFFF83FFFFFF80FFFFFF003FFFFF000FFFFE00 - 03FFFE0000FFFC00003FFC00000FF8000003F8000001F0000001F0000003E000 - 0003E0000007C0000007C000000F8000000F8000001F0000001F0000003F8000 - 003FE000007FF800007FFE0000FFFF8000FFFFE001FFFFF801FFFFFE03FFFFFF - 83FFFFFFE7FF} - KeyPreview = True - ExplicitHeight = 228 - PixelsPerInch = 96 - TextHeight = 13 - object lstImages: TMenuImgList - BkColor = clSilver - DrawingStyle = dsTransparent - DisabledImages = lstImagesDisabled - Left = 394 - Top = 58 - Bitmap = { - 494C010106000900180010001000C0C0C000FE00FFFFFFFFFFFFFFFF424D3600 - 0000000000003600000028000000400000002000000001002000000000000020 - 000000000000000000000000000000000000C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C6000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000000000000000000000000000C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C6000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000000000000000000000000000C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C60000000000FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000000000000000000000000000C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C60000000000FFFFFF00FFFFFF000000 - 0000FFFFFF00FFFFFF00FFFFFF00FFFFFF000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000000000000000000000000000C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C60000000000FFFFFF00FFFFFF0000000000FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000000000000000000000000000C6C6C600C6C6C600C6C6C6008400 - 000084848400C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600000000000000000000000000FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000000000000000000000000000C6C6C600C6C6C600848484008400 - 0000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C60084000000840000008400 - 00008400000084000000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C6000000000000000000FFFFFF00FFFFFF00FFFFFF000000 - 0000FFFFFF00FFFFFF00FFFFFF00FFFFFF000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000000000000000000000000000C6C6C600C6C6C60084000000C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600840000008400 - 00008400000084000000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C60000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF0000000000FFFF - FF0000000000FFFFFF00FFFFFF00FFFFFF000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000000000000000000000000000C6C6C600C6C6C60084000000C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6008400 - 00008400000084000000C6C6C600C6C6C600C6C6C60000000000000000000000 - 000000000000FFFFFF00FFFFFF00FFFFFF000000000000000000FFFFFF000000 - 0000FFFFFF0000000000FFFFFF00000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000000000000000000000000000C6C6C600C6C6C60084000000C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C60084000000C6C6 - C6008400000084000000C6C6C600C6C6C6000000000000848400008484000000 - 0000FFFFFF00FFFFFF000000000000000000FFFFFF00FFFFFF0000000000FFFF - FF0000000000FFFFFF0000000000C6C6C6000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000000000000000000000000000C6C6C600C6C6C600848484008400 - 0000C6C6C600C6C6C600C6C6C600C6C6C6008400000084000000C6C6C600C6C6 - C600C6C6C60084000000C6C6C600C6C6C60000000000FFFFFF00FFFFFF000000 - 0000FFFFFF000000000000848400008484000000000000000000FFFFFF000000 - 0000FFFFFF000000000000000000C6C6C6000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000000000000000000000000000C6C6C600C6C6C600C6C6C6008484 - 840084000000840000008400000084000000C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C60000000000FFFFFF00000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000084840000000000C6C6C6000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000000000000000000000000000C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C60000000000FFFFFF00FFFFFF000084 - 8400FFFFFF0000848400FFFFFF0000848400FFFFFF0000848400FFFFFF000084 - 8400FFFFFF000084840000000000C6C6C6000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000000000000000000000000000C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C60000000000FFFFFF00000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000084840000000000C6C6C6000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000000000000000000000000000C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C60000000000FFFFFF00FFFFFF000084 - 8400FFFFFF0000848400FFFFFF0000848400FFFFFF0000848400FFFFFF000084 - 8400FFFFFF00FFFFFF0000000000C6C6C6000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000000000000000000000000000C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C60000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 00000000000000000000C6C6C600C6C6C6000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000000000000000000000000000C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C6008400000084000000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C60084000000840000008400000084000000840000008400 - 000084000000840000008400000084000000C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6008400 - 0000C6C6C600C6C6C60084000000C6C6C600C6C6C6008400000084000000C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C60084000000840000008400000084000000840000008400 - 0000840000008400000084000000C6C6C600C6C6C60000000000000000000000 - 0000000000000000000084000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF0084000000C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6008400 - 0000C6C6C600C6C6C60084000000C6C6C60084000000C6C6C600C6C6C6008400 - 0000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C60084000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF0084000000C6C6C6000000000084848400008484008484 - 8400008484008484840084000000FFFFFF008400000084000000840000008400 - 00008400000084000000FFFFFF0084000000C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6008400 - 0000C6C6C600C6C6C60084000000C6C6C60084000000C6C6C600C6C6C6008400 - 0000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C60084000000FFFFFF000000000000000000000000000000 - 000000000000FFFFFF0084000000C6C6C6000000000000848400848484000084 - 8400848484000084840084000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF0084000000C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600840000008400000084000000C6C6C60084000000C6C6C600C6C6C6008400 - 0000C6C6C600C6C6C600C6C6C600C6C6C6000000000000000000000000000000 - 0000000000000000000084000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF0084000000C6C6C6000000000084848400008484008484 - 8400008484008484840084000000FFFFFF00840000008400000084000000FFFF - FF0084000000840000008400000084000000C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6008484 - 840084000000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C60084000000C6C6C600840000008400000084000000C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C60000000000FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF0084000000FFFFFF000000000000000000000000000000 - 000000000000FFFFFF0084000000C6C6C6000000000000848400848484000084 - 8400848484000084840084000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF0084000000FFFFFF0084000000C6C6C600C6C6C600C6C6C600840000008400 - 0000840000008400000084000000C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C6008400000084848400C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600840000000000000084000000C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C60000000000FFFFFF00000000000000 - 0000000000000000000084000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF0084000000C6C6C6000000000084848400008484008484 - 8400008484008484840084000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF008400000084000000C6C6C600C6C6C600C6C6C600C6C6C600840000008400 - 00008400000084000000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C60084000000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C60000000000C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C60000000000FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF0084000000FFFFFF000000000000000000FFFFFF008400 - 0000840000008400000084000000C6C6C6000000000000848400848484000084 - 8400848484000084840084000000840000008400000084000000840000008400 - 00008400000000000000C6C6C600C6C6C600C6C6C600C6C6C600840000008400 - 000084000000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C60084000000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600000000000000000000000000C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C60000000000FFFFFF00000000000000 - 0000000000000000000084000000FFFFFF00FFFFFF00FFFFFF00FFFFFF008400 - 0000FFFFFF0084000000C6C6C600C6C6C6000000000084848400008484008484 - 8400008484008484840000848400848484000084840084848400008484008484 - 84000084840000000000C6C6C600C6C6C600C6C6C600C6C6C600840000008400 - 0000C6C6C60084000000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C60084000000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C60000000000C6C6C60000000000C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C60000000000FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF0084000000FFFFFF00FFFFFF00FFFFFF00FFFFFF008400 - 000084000000C6C6C600C6C6C600C6C6C6000000000000848400848484000000 - 0000000000000000000000000000000000000000000000000000000000008484 - 84008484840000000000C6C6C600C6C6C600C6C6C600C6C6C60084000000C6C6 - C600C6C6C600C6C6C6008400000084000000C6C6C600C6C6C600C6C6C600C6C6 - C6008400000084848400C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C6000000000000000000C6C6C6000000000000000000C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C60000000000FFFFFF00000000000000 - 0000FFFFFF000000000084000000840000008400000084000000840000008400 - 0000C6C6C600C6C6C600C6C6C600C6C6C6000000000084848400848484000000 - 0000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00000000008484 - 84000084840000000000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C6008400000084000000840000008400 - 000084848400C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C60000000000C6C6C600C6C6C600C6C6C60000000000C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C60000000000FFFFFF00FFFFFF00FFFF - FF00FFFFFF0000000000FFFFFF0000000000C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C6000000000000848400848484000084 - 84000000000000FFFF00000000000000000000FFFF0000000000848484000084 - 84008484840000000000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C60000000000C6C6C600C6C6C600C6C6C60000000000C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C60000000000FFFFFF00FFFFFF00FFFF - FF00FFFFFF000000000000000000C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C60000000000000000000000 - 0000000000000000000000FFFF0000FFFF000000000000000000000000000000 - 000000000000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C60000000000C6C6C600C6C6C600C6C6C60000000000C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C6000000000000000000000000000000 - 00000000000000000000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C60000000000000000000000000000000000C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600} - end - object dlgFonts: TFontDialog - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -11 - Font.Name = 'MS Sans Serif' - Font.Style = [] - Options = [] - Left = 450 - Top = 30 - end - object dlgPrint: TPrintDialog - Left = 450 - Top = 58 - end - object dlgPrintSetup: TPrinterSetupDialog - Left = 478 - Top = 30 - end - object dlgFind: TFindDialog - Left = 478 - Top = 58 - end - object dlgReplace: TReplaceDialog - Left = 506 - Top = 30 - end - object lstImagesDisabled: TImageList - Left = 506 - Top = 58 - Bitmap = { - 494C010106000900180010001000FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600 - 0000000000003600000028000000400000002000000001002000000000000020 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000FFFFFF000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000084848400000000000000 - 0000FFFFFF000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000008484840000000000000000008484 - 8400000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000FFFFFF00FFFFFF0000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000000000000000000084848400FFFFFF00FFFFFF00848484000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000008484 - 8400848484000000000000000000000000000000000000000000FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00000000000000000000000000000000000000 - 0000000000000000000000000000848484008484840084848400000000000000 - 0000FFFFFF000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000848484008484 - 8400000000000000000000000000000000000000000084848400848484008484 - 84008484840084848400FFFFFF00000000000000000000000000000000000000 - 0000000000000000000084848400848484000000000000000000000000008484 - 840000000000FFFFFF0000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000000000000000000000000000000000000000000084848400FFFF - FF00000000000000000000000000000000000000000000000000848484008484 - 84008484840084848400FFFFFF00000000000000000000000000FFFFFF00FFFF - FF00FFFFFF0084848400000000000000000000000000FFFFFF00848484000000 - 00008484840000000000FFFFFF00000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000000000000000000000000000000000000000000084848400FFFF - FF00000000000000000000000000000000000000000000000000000000008484 - 84008484840084848400FFFFFF00000000000000000084848400848484008484 - 8400848484000000000000000000FFFFFF008484840084848400000000008484 - 8400000000008484840000000000848484000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000000000000000000000000000000000000000000084848400FFFF - FF00FFFFFF0000000000000000000000000000000000FFFFFF00848484000000 - 00008484840084848400FFFFFF00000000008484840084848400848484008484 - 8400FFFFFF00000000008484840084848400FFFFFF00FFFFFF00848484000000 - 0000848484000000000084848400FFFFFF000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000848484008484 - 8400FFFFFF00FFFFFF00FFFFFF00FFFFFF008484840084848400000000000000 - 00000000000084848400000000000000000084848400FFFFFF00000000008484 - 8400FFFFFF008484840084848400848484008484840084848400FFFFFF008484 - 8400FFFFFF008484840084848400FFFFFF000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000008484 - 8400848484008484840084848400848484000000000000000000000000000000 - 00000000000000000000000000000000000084848400FFFFFF00848484008484 - 8400848484008484840084848400848484008484840084848400848484008484 - 8400848484008484840084848400FFFFFF000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 00000000000000000000000000000000000084848400FFFFFF00000000008484 - 8400FFFFFF0084848400FFFFFF0084848400FFFFFF0084848400FFFFFF008484 - 8400FFFFFF008484840084848400FFFFFF000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 00000000000000000000000000000000000084848400FFFFFF00848484008484 - 8400848484008484840084848400848484008484840084848400848484008484 - 8400848484008484840084848400FFFFFF000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000008484840000000000FFFFFF008484 - 8400FFFFFF0084848400FFFFFF0084848400FFFFFF0084848400FFFFFF008484 - 8400FFFFFF00FFFFFF0084848400000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000084848400848484008484 - 8400848484008484840084848400848484008484840084848400848484008484 - 8400848484008484840000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000FFFFFF00FFFFFF00000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000848484008484840000000000FFFFFF000000000000000000FFFFFF00FFFF - FF00000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000000000000000FFFFFF00FFFF - FF00FFFFFF00FFFFFF0084848400848484008484840084848400848484008484 - 8400848484008484840084848400848484000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000008484 - 8400FFFFFF000000000084848400FFFFFF000000000084848400848484000000 - 0000FFFFFF000000000000000000000000000000000000000000000000000000 - 0000000000000000000084848400848484008484840084848400848484008484 - 8400848484008484840084848400FFFFFF000000000084848400848484008484 - 8400848484008484840084848400FFFFFF0000000000FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00848484000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000008484 - 8400FFFFFF000000000084848400FFFFFF0084848400FFFFFF00000000008484 - 8400FFFFFF000000000000000000000000000000000000000000000000000000 - 0000000000000000000084848400FFFFFF0000000000FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF0084848400FFFFFF008484840084848400848484008484 - 8400848484008484840084848400FFFFFF008484840084848400848484008484 - 8400848484008484840000000000848484000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000008484 - 840000000000FFFFFF0084848400FFFFFF0084848400FFFFFF00000000008484 - 8400FFFFFF0000000000000000000000000000000000FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF0084848400FFFFFF008484840084848400848484008484 - 8400848484000000000084848400FFFFFF008484840084848400848484008484 - 8400848484008484840084848400FFFFFF0000000000FFFFFF00FFFFFF00FFFF - FF0000000000FFFFFF00FFFFFF00848484000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000FFFFFF00FFFFFF0000000000000000000000000000000000000000000000 - 0000848484008484840084848400FFFFFF0084848400FFFFFF00FFFFFF008484 - 8400000000000000000000000000000000008484840084848400848484008484 - 8400848484008484840084848400FFFFFF0000000000FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF0084848400FFFFFF008484840084848400848484008484 - 8400848484008484840084848400FFFFFF008484840084848400848484000000 - 000084848400848484008484840084848400000000000000000000000000FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000000000000000000000008484 - 840084848400FFFFFF00FFFFFF00000000000000000000000000000000000000 - 0000000000000000000084848400FFFFFF008484840084848400848484000000 - 00000000000000000000000000000000000084848400FFFFFF0000000000FFFF - FF00FFFFFF00FFFFFF0084848400FFFFFF008484840084848400848484008484 - 8400848484000000000084848400FFFFFF008484840084848400848484008484 - 8400848484008484840084848400FFFFFF000000000000000000000000000000 - 000084848400FFFFFF0084848400000000000000000000000000848484008484 - 8400848484008484840084848400000000000000000000000000000000000000 - 00008484840084848400FFFFFF00000000000000000000000000000000000000 - 0000000000000000000084848400848484008484840000000000000000000000 - 00000000000000000000000000000000000084848400FFFFFF00848484008484 - 8400848484008484840084848400FFFFFF0000000000FFFFFF00FFFFFF000000 - 0000FFFFFF00FFFFFF0084848400FFFFFF008484840084848400848484008484 - 8400848484008484840084848400FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF008484840084848400FFFFFF00000000000000000000000000848484008484 - 8400848484008484840000000000000000000000000000000000000000000000 - 00000000000084848400FFFFFF00000000000000000000000000000000000000 - 000000000000000000000000000084848400FFFFFF00FFFFFF00000000000000 - 00000000000000000000000000000000000084848400FFFFFF0000000000FFFF - FF00FFFFFF00FFFFFF0084848400FFFFFF008484840084848400000000008484 - 8400848484008484840084848400000000008484840084848400848484008484 - 8400848484008484840084848400848484008484840084848400848484008484 - 84008484840084848400FFFFFF00000000000000000000000000848484008484 - 84008484840000000000FFFFFF00000000000000000000000000000000000000 - 00000000000084848400FFFFFF00000000000000000000000000000000000000 - 00000000000000000000848484008484840084848400FFFFFF00000000000000 - 00000000000000000000000000000000000084848400FFFFFF00848484008484 - 8400848484008484840084848400FFFFFF000000000000000000000000008484 - 8400FFFFFF008484840000000000000000008484840084848400848484008484 - 8400848484008484840084848400848484008484840084848400848484008484 - 84008484840084848400FFFFFF00000000000000000000000000848484008484 - 8400000000008484840000000000FFFFFF00FFFFFF0000000000000000000000 - 00000000000084848400FFFFFF00000000000000000000000000000000000000 - 0000000000000000000084848400FFFFFF0084848400FFFFFF00FFFFFF000000 - 00000000000000000000000000000000000084848400FFFFFF0000000000FFFF - FF00FFFFFF000000000084848400FFFFFF00FFFFFF00FFFFFF00FFFFFF008484 - 8400848484000000000000000000000000008484840084848400848484008484 - 8400848484008484840084848400848484008484840084848400848484008484 - 84008484840084848400FFFFFF00000000000000000000000000848484000000 - 00000000000000000000848484008484840000000000FFFFFF00FFFFFF00FFFF - FF00848484008484840000000000000000000000000000000000000000000000 - 0000000000008484840084848400000000008484840084848400FFFFFF000000 - 00000000000000000000000000000000000084848400FFFFFF00848484008484 - 8400000000008484840084848400848484008484840084848400848484008484 - 8400000000000000000000000000000000008484840084848400848484008484 - 8400FFFFFF00FFFFFF0000000000FFFFFF00FFFFFF0000000000848484008484 - 84008484840084848400FFFFFF00000000000000000000000000000000000000 - 0000000000000000000000000000000000008484840084848400848484008484 - 8400848484000000000000000000000000000000000000000000000000000000 - 00000000000084848400FFFFFF00000000000000000084848400FFFFFF000000 - 00000000000000000000000000000000000084848400FFFFFF00000000000000 - 00000000000084848400FFFFFF00848484000000000000000000000000000000 - 0000000000000000000000000000000000008484840084848400848484008484 - 840084848400FFFFFF0084848400848484000000000084848400848484008484 - 8400848484008484840000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 00000000000084848400FFFFFF00000000000000000084848400FFFFFF000000 - 00000000000000000000000000000000000084848400FFFFFF00FFFFFF00FFFF - FF00FFFFFF008484840084848400000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000084848400848484008484 - 84008484840084848400FFFFFF00FFFFFF008484840084848400848484008484 - 8400848484000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000008484840000000000000000000000000084848400000000000000 - 0000000000000000000000000000000000008484840084848400848484008484 - 8400848484008484840000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000008484840084848400848484008484840000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000000000000000000000000000424D3E000000000000003E000000 - 2800000040000000200000000100010000000000000100000000000000000000 - 000000000000000000000000FFFFFF00FFFFFFFF00000000FFFFFFDF00000000 - FFFFFFB700000000FFFFFF6F00000000F3FFFE1F00000000E7C1FE3700000000 - CF81FCEB00000000CFC1C39500000000CFE1862A00000000C791041400000000 - C03B200000000000E0FF000000000000FFFF200000000000FFFF000000000000 - FFFF400100000000FFFF800300000000F9FFFFFFFE00FFFFF2CFFE00C000FFFF - E497FC008080FFFFE427FC800002FFFFE82780040088FFF3F00F00800010E0E1 - FC1F200400F1C1F1FC7F00900001C3F9FE3F20210001C5F9FC3F00E30001CA79 - FC1F24070001DC83F91F080F0241FF07F99F38FF0083FFFFF99F01FF8007FFFF - FBBF03FFF87FFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 - 000000000000} - end -end +inherited frmEditor: TfrmEditor + Left = 96 + Top = 288 + Caption = 'frmEditor' + ClientHeight = 228 + Icon.Data = { + 0000010004001010100000000000280100004600000010100000000000006803 + 00006E0100002020100000000000E8020000D60400002020000000000000A80C + 0000BE0700002800000010000000200000000100040000000000C00000000000 + 0000000000001000000000000000000000000000800000800000008080008000 + 00008000800080800000C0C0C000808080000000FF0000FF000000FFFF00FF00 + 0000FF00FF00FFFF0000FFFFFF00000000000000000000007000000000000000 + 7880000000000007788880000000000778777880000000778877777880000077 + 80777777F88007780780777FF78007780087777F78007780707777FF78007F87 + 807777F7800077FF77777FF780000077FF777F770000000077FFFF7800000000 + 0077F7800000000000007F800000FFFFFFFFF1FFFFFFF07FFFFFE01FFFFFE007 + FFFFC001FFFFC001FFFF8001FFFF8003FFFF0003FFFF0007FFFF0007FFFFC00F + FFFFF00FFFFFFC1FFFFFFF1FFFFF280000001000000020000000010018000000 + 0000400300000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000008494A5636B7B515D690000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00008494A5636B7B637384637384515D69000000000000000000000000000000 + 0000000000000000000000000000008C9CAD8C9CAD6B7B8C7384946373846B73 + 846B7B8C515D6900000000000000000000000000000000000000000000000094 + A5B58C9CAD7384947B8C9C8494A594A5AD6B7B8C737B94738494515D69000000 + 0000000000000000000000009CADB594A5B56B7B9473849C8C94A58C9CAD9CAD + B5ADB5BDB5C6CE7384947384947B8C9C515D690000000000000000009CADB59C + ADB57384940000008C9CAD9CA5B5A5ADBDB5BDC6BDC6CEC6D6D6D6DEE77B8C9C + 6B7B8C000000000000ADB5BDA5B5BD6B84940000008C94A594A5AD000000ADBD + C6B5C6CEC6CED6D6DEDEDEE7E77B8C9C6B7B8C000000000000ADB5C6ADBDC673 + 849C000000000000737B94ADB5BDB5C6CEBDCED6CED6DEDEE7E78494A57B8C9C + 000000000000B5C6CEB5BDC67384940000008C9CAD000000A5B5BDB5BDC6BDC6 + CECED6DED6DEE7E7E7EF8C94A56B7B8C000000000000BDC6CEE7EFEF7B8C9C8C + 9CA594A5AD000000ADBDC6BDC6CEC6CED6D6DEDEDEE7E7949CAD8C9CAD000000 + 000000000000BDC6CEE7EFEFE7E7EFDEE7E79CADB5A5B5BDB5C6CEBDCED6D6DE + DEDEDEE7E7EFEF94A5AD6B7B8C000000000000000000000000000000BDC6CEDE + E7E7DEDEE7D6DEE7BDC6CECED6DED6DEE7E7E7EF9CADB59CA5B5000000000000 + 000000000000000000000000000000000000BDC6CED6DEE7D6DEE7D6DEDEE7E7 + EFEFEFEFA5B5BD6B7B8C00000000000000000000000000000000000000000000 + 0000000000000000BDC6CED6DEDED6DEDEADBDC6ADB5C6000000000000000000 + 000000000000000000000000000000000000000000000000000000000000BDC6 + CECED6DE6B7B8C000000000000000000000000000000FFFFFFFFF1FFFFFFF07F + FFFFE01FFFFFE007FFFFC001FFFFC001FFFF8001FFFF8003FFFF0003FFFF0007 + FFFF0007FFFFC00FFFFFF00FFFFFFC1FFFFFFF1FFFFF28000000200000004000 + 0000010004000000000080020000000000000000000000000000000000000000 + 0000000080000080000000808000800000008000800080800000C0C0C0008080 + 80000000FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000078800000000000000000000000000000778880000000000000000000000 + 0000777888880000000000000000000000007777888888000000000000000000 + 0007777887888888000000000000000000077788787788888800000000000000 + 0077778887787788888800000000000000777888777777778888880000000000 + 07777887878777777788888800000000077788787777777777F7888888800000 + 77778800787777777777F7888780000077788800777777777F7F7FF778000007 + 77788007870077777777FF77780000077788800700087777F77FFF7780000077 + 778800000877777777FFF77780000077788800008777777F7F7FF77800000777 + 788007807777777777FF77780000077788700770877777F77FFF77800000777F + F887787007777777FFF7778000007FFFFFF7777007777F7F7FF778000000077F + FFFFF77777777777FF777800000000077FFFFFF77777F77FFF77800000000000 + 077FFFFFF77777FFF77780000000000000077FFFFFF77F7FF778000000000000 + 0000077FFFFFF7FF7778000000000000000000077FFFFFFF7780000000000000 + 00000000077FFFF777800000000000000000000000077FFF7800000000000000 + 000000000000077FF8000000000000000000000000000007700000000000FFFF + FFFFFFCFFFFFFF83FFFFFF80FFFFFF003FFFFF000FFFFE0003FFFE0000FFFC00 + 003FFC00000FF8000003F8000001F0000001F0000003E0000003E0000007C000 + 0007C000000F8000000F8000001F0000001F0000003F8000003FE000007FF800 + 007FFE0000FFFF8000FFFFE001FFFFF801FFFFFE03FFFFFF83FFFFFFE7FF2800 + 000020000000400000000100180000000000800C000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000515D69515D6900000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 008494A55A6B7B636B7B515D69515D6900000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 008494A57B8C9C637384636B7B637384515D69515D6900000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000008494 + A58494A58494A5636B7B637384637384637384637384515D69515D6900000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000008C9C + A58494A58494A58494A56373846373846373846B73846373846B7B8C515D6951 + 5D69000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000008C9CAD8C9C + A58C9CAD8494A56B7B8C6B7B947384946B73846373846B7B8C6B73846B7B8C6B + 7B8C515D69515D69000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000008C9CAD94A5 + AD8C9CA56B7B8C6B7B9473849473849C7B8C9C8C94A56B7B8C6B7B8C6B7B8C6B + 7B8C6B7B8C6B7B8C515D69515D69000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000000094A5AD94A5B58C9C + AD8C9CAD6B7B8C7384947384947B8C9C8494A58494A58C9CAD94A5AD6B7B8C6B + 7B8C6B7B8C737B946B7B8C738494515D69515D69000000000000000000000000 + 00000000000000000000000000000000000000000000000094A5B594A5AD94A5 + AD6B7B8C6B7B947384947B8C9C8494A58494A58C9CAD949CAD9CA5B59CADB5A5 + B5BD6B7B8C7384946B7B8C738494737B94738494515D69515D69000000000000 + 0000000000000000000000000000000000000000009CADB59CA5B594A5B594A5 + AD6B7B9473849473849C7B8C9C8C94A58C9CA58C9CAD94A5B59CADB5A5ADBDAD + B5BDADBDC6B5C6CE737B947384947384947384947384947B8C9C515D69515D69 + 0000000000000000000000000000000000000000009CADB59CA5B59CADB56B7B + 8C6B7B947B8C9C7B8C9C8494A58494A58C9CAD94A5AD9CA5B59CADBDA5B5BDAD + BDC6B5BDC6B5C6CEC6CED6C6CED67384947384947B8C9C7384947B8C9C73849C + 6B7B8C000000000000000000000000000000A5ADBD9CADB59CADB59CADB56B7B + 947384940000000000008494A58C9CAD94A5AD9CA5B59CADB5A5ADBDADB5C6B5 + BDC6B5C6CEBDC6CEC6CED6C6D6D6CED6DED6DEE77384947B8C9C7B8C9C6B7B8C + 6B7B8C000000000000000000000000000000A5B5BDA5ADBD9CADB5737B947384 + 947B8C9C0000000000008C9CA5949CAD94A5B59CADB5A5ADBDA5B5BDADBDC6B5 + C6CEBDC6CEBDCED6C6CED6D6DEDED6DEE7DEDEE7E7E7EF7384947384946B7B8C + 000000000000000000000000000000ADB5BDA5B5BDA5B5BDA5ADBD6B84947384 + 940000000000008C94A58C9CAD94A5AD000000000000A5B5BDADBDC6B5BDC6B5 + C6CEC6CED6C6CED6CED6DED6DEDED6DEE7DEE7E77B8C9C7B8C9C7384946B7B8C + 000000000000000000000000000000ADB5BDADB5C6A5B5BD6B84947384947B8C + 9C0000000000008C9CAD000000000000000000737B94ADB5C6B5BDC6B5C6CEBD + C6CEC6CED6CED6DECED6DED6DEE7DEE7E7E7E7EF7B8C9C7B8C9C6B7B8C000000 + 000000000000000000000000ADBDC6ADB5C6ADB5BDADBDC673849473849C0000 + 00000000000000000000000000737B94A5ADBDADB5BDADBDC6B5C6CEBDC6CEBD + CED6C6CED6CED6DED6DEE7DEE7E7E7E7EF8494A57B8C9C7B8C9C6B7B8C000000 + 000000000000000000000000B5BDC6ADBDC6ADBDC66B7B947384947B8C9C0000 + 00000000000000000000737B949CADBDA5B5BDADBDC6B5BDC6BDC6CEBDCED6C6 + CED6CED6DED6DEDEDEDEE7DEE7E7E7EFEF8494A58494A56B7B8C000000000000 + 000000000000000000B5C6CEB5BDC6B5BDC6ADBDC67384947B8C9C0000000000 + 008C9CAD737B940000009CADBDA5B5BDADB5C6B5BDC6B5C6CEBDC6CEC6CED6CE + D6DED6DEDED6DEE7DEE7E7E7E7EF8C9CA58C94A58494A56B7B8C000000000000 + 000000000000000000B5C6CEB5BDC6B5BDC67384947B8C9C7B8C9C0000000000 + 00949CAD94A5B5000000737B94ADB5BDADBDC6B5C6CEBDC6CEBDCED6C6CED6CE + D6DED6DEE7DEE7E7E7E7EFE7EFEF8C9CAD8C9CA56B7B8C000000000000000000 + 000000000000BDC6CEBDC6CEB5C6CEE7EFEFE7E7EF7B8C9C8494A58C9CA58C9C + AD94A5AD9CA5B5000000000000ADBDC6B5BDC6BDC6CEBDCED6C6CED6CED6DED6 + DEDEDEDEE7DEE7E7E7EFEF949CAD8C9CAD8C9CAD6B7B8C000000000000000000 + 000000000000BDC6CEE7EFEFE7EFEFE7E7EFE7E7EFDEE7E7E7E7EF8C9CA594A5 + B59CA5B59CADB5000000000000B5BDC6B5C6CEBDC6CEC6CED6CED6DED6DEDED6 + DEE7DEE7E7E7E7EFEFF7F7949CAD94A5AD6B7B8C000000000000000000000000 + 000000000000000000BDC6CEBDC6CEE7EFEFE7E7EFE7E7EFDEE7E7DEE7E7DEE7 + E79CADB5A5ADBDA5B5BDADBDC6B5C6CEBDC6CEBDCED6C6CED6D6DEDED6DEE7DE + DEE7E7E7EFE7EFEF9CA5B594A5AD94A5AD6B7B8C000000000000000000000000 + 000000000000000000000000000000BDC6CEBDC6CEDEE7E7E7E7EFDEE7E7DEE7 + E7DEDEE7DEDEE7ADBDC6B5BDC6BDC6CEBDCED6C6CED6CED6DED6DEDED6DEE7DE + E7E7E7EFEFEFEFF79CADB59CA5B56B7B8C000000000000000000000000000000 + 000000000000000000000000000000000000000000BDC6CEBDC6CEDEE7E7DEE7 + E7DEDEE7DEE7E7D6DEE7DEDEE7BDC6CEC6CED6CED6DED6DEDED6DEE7DEE7E7E7 + E7EFEFF7F79CADB5A5ADBD9CA5B56B7B8C000000000000000000000000000000 + 000000000000000000000000000000000000000000000000000000BDC6CEBDC6 + CEDEE7E7D6DEE7DEDEE7D6DEDED6DEE7D6DEDECED6DED6DEE7DEE7E7E7E7EFE7 + EFEFEFEFF7A5ADBD9CADB56B7B94000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00BDC6CEBDC6CED6DEE7D6DEDED6DEE7D6DEDED6DEDED6DEDEE7E7EFE7EFEFEF + EFEFA5B5BDA5B5BDA5ADBD6B7B8C000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000BDC6CEBDC6CED6DEDED6DEDED6DEDECED6DECED6DECED6DECE + D6DEADB5BDA5B5BD6B7B8C000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000BDC6CEBDC6CED6DEDECED6DED6DEDECED6DEAD + BDC6ADB5BDADB5C66B7B8C000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000BDC6CEBDC6CECED6DECED6DECE + D6DEADBDC66B7B8C000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000000000BDC6CEBDC6CECE + D6DEC6D6D66B7B8C000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000000000000000000000BD + C6CEBDC6CE000000000000000000000000000000000000000000000000000000 + 000000000000FFFFFFFFFFCFFFFFFF83FFFFFF80FFFFFF003FFFFF000FFFFE00 + 03FFFE0000FFFC00003FFC00000FF8000003F8000001F0000001F0000003E000 + 0003E0000007C0000007C000000F8000000F8000001F0000001F0000003F8000 + 003FE000007FF800007FFE0000FFFF8000FFFFE001FFFFF801FFFFFE03FFFFFF + 83FFFFFFE7FF} + KeyPreview = True + ExplicitHeight = 228 + PixelsPerInch = 96 + TextHeight = 13 + object lstImages: TMenuImgList + BkColor = clSilver + DrawingStyle = dsTransparent + DisabledImages = lstImagesDisabled + Left = 394 + Top = 58 + Bitmap = { + 494C010106000900180010001000C0C0C000FE00FFFFFFFFFFFFFFFF424D3600 + 0000000000003600000028000000400000002000000001002000000000000020 + 000000000000000000000000000000000000C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C6000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C6000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C60000000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C60000000000FFFFFF00FFFFFF000000 + 0000FFFFFF00FFFFFF00FFFFFF00FFFFFF000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C60000000000FFFFFF00FFFFFF0000000000FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000C6C6C600C6C6C600C6C6C6008400 + 000084848400C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600000000000000000000000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000C6C6C600C6C6C600848484008400 + 0000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C60084000000840000008400 + 00008400000084000000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C6000000000000000000FFFFFF00FFFFFF00FFFFFF000000 + 0000FFFFFF00FFFFFF00FFFFFF00FFFFFF000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000C6C6C600C6C6C60084000000C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600840000008400 + 00008400000084000000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C60000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF0000000000FFFF + FF0000000000FFFFFF00FFFFFF00FFFFFF000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000C6C6C600C6C6C60084000000C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6008400 + 00008400000084000000C6C6C600C6C6C600C6C6C60000000000000000000000 + 000000000000FFFFFF00FFFFFF00FFFFFF000000000000000000FFFFFF000000 + 0000FFFFFF0000000000FFFFFF00000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000C6C6C600C6C6C60084000000C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C60084000000C6C6 + C6008400000084000000C6C6C600C6C6C6000000000000848400008484000000 + 0000FFFFFF00FFFFFF000000000000000000FFFFFF00FFFFFF0000000000FFFF + FF0000000000FFFFFF0000000000C6C6C6000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000C6C6C600C6C6C600848484008400 + 0000C6C6C600C6C6C600C6C6C600C6C6C6008400000084000000C6C6C600C6C6 + C600C6C6C60084000000C6C6C600C6C6C60000000000FFFFFF00FFFFFF000000 + 0000FFFFFF000000000000848400008484000000000000000000FFFFFF000000 + 0000FFFFFF000000000000000000C6C6C6000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000C6C6C600C6C6C600C6C6C6008484 + 840084000000840000008400000084000000C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C60000000000FFFFFF00000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000084840000000000C6C6C6000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C60000000000FFFFFF00FFFFFF000084 + 8400FFFFFF0000848400FFFFFF0000848400FFFFFF0000848400FFFFFF000084 + 8400FFFFFF000084840000000000C6C6C6000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C60000000000FFFFFF00000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000084840000000000C6C6C6000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C60000000000FFFFFF00FFFFFF000084 + 8400FFFFFF0000848400FFFFFF0000848400FFFFFF0000848400FFFFFF000084 + 8400FFFFFF00FFFFFF0000000000C6C6C6000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C60000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000C6C6C600C6C6C6000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C6008400000084000000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C60084000000840000008400000084000000840000008400 + 000084000000840000008400000084000000C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6008400 + 0000C6C6C600C6C6C60084000000C6C6C600C6C6C6008400000084000000C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C60084000000840000008400000084000000840000008400 + 0000840000008400000084000000C6C6C600C6C6C60000000000000000000000 + 0000000000000000000084000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF0084000000C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6008400 + 0000C6C6C600C6C6C60084000000C6C6C60084000000C6C6C600C6C6C6008400 + 0000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C60084000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF0084000000C6C6C6000000000084848400008484008484 + 8400008484008484840084000000FFFFFF008400000084000000840000008400 + 00008400000084000000FFFFFF0084000000C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6008400 + 0000C6C6C600C6C6C60084000000C6C6C60084000000C6C6C600C6C6C6008400 + 0000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C60084000000FFFFFF000000000000000000000000000000 + 000000000000FFFFFF0084000000C6C6C6000000000000848400848484000084 + 8400848484000084840084000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF0084000000C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600840000008400000084000000C6C6C60084000000C6C6C600C6C6C6008400 + 0000C6C6C600C6C6C600C6C6C600C6C6C6000000000000000000000000000000 + 0000000000000000000084000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF0084000000C6C6C6000000000084848400008484008484 + 8400008484008484840084000000FFFFFF00840000008400000084000000FFFF + FF0084000000840000008400000084000000C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6008484 + 840084000000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C60084000000C6C6C600840000008400000084000000C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C60000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF0084000000FFFFFF000000000000000000000000000000 + 000000000000FFFFFF0084000000C6C6C6000000000000848400848484000084 + 8400848484000084840084000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF0084000000FFFFFF0084000000C6C6C600C6C6C600C6C6C600840000008400 + 0000840000008400000084000000C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C6008400000084848400C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600840000000000000084000000C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C60000000000FFFFFF00000000000000 + 0000000000000000000084000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF0084000000C6C6C6000000000084848400008484008484 + 8400008484008484840084000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF008400000084000000C6C6C600C6C6C600C6C6C600C6C6C600840000008400 + 00008400000084000000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C60084000000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C60000000000C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C60000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF0084000000FFFFFF000000000000000000FFFFFF008400 + 0000840000008400000084000000C6C6C6000000000000848400848484000084 + 8400848484000084840084000000840000008400000084000000840000008400 + 00008400000000000000C6C6C600C6C6C600C6C6C600C6C6C600840000008400 + 000084000000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C60084000000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600000000000000000000000000C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C60000000000FFFFFF00000000000000 + 0000000000000000000084000000FFFFFF00FFFFFF00FFFFFF00FFFFFF008400 + 0000FFFFFF0084000000C6C6C600C6C6C6000000000084848400008484008484 + 8400008484008484840000848400848484000084840084848400008484008484 + 84000084840000000000C6C6C600C6C6C600C6C6C600C6C6C600840000008400 + 0000C6C6C60084000000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C60084000000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C60000000000C6C6C60000000000C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C60000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF0084000000FFFFFF00FFFFFF00FFFFFF00FFFFFF008400 + 000084000000C6C6C600C6C6C600C6C6C6000000000000848400848484000000 + 0000000000000000000000000000000000000000000000000000000000008484 + 84008484840000000000C6C6C600C6C6C600C6C6C600C6C6C60084000000C6C6 + C600C6C6C600C6C6C6008400000084000000C6C6C600C6C6C600C6C6C600C6C6 + C6008400000084848400C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C6000000000000000000C6C6C6000000000000000000C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C60000000000FFFFFF00000000000000 + 0000FFFFFF000000000084000000840000008400000084000000840000008400 + 0000C6C6C600C6C6C600C6C6C600C6C6C6000000000084848400848484000000 + 0000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00000000008484 + 84000084840000000000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C6008400000084000000840000008400 + 000084848400C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C60000000000C6C6C600C6C6C600C6C6C60000000000C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C60000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF0000000000FFFFFF0000000000C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C6000000000000848400848484000084 + 84000000000000FFFF00000000000000000000FFFF0000000000848484000084 + 84008484840000000000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C60000000000C6C6C600C6C6C600C6C6C60000000000C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C60000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF000000000000000000C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C60000000000000000000000 + 0000000000000000000000FFFF0000FFFF000000000000000000000000000000 + 000000000000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C60000000000C6C6C600C6C6C600C6C6C60000000000C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C6000000000000000000000000000000 + 00000000000000000000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C60000000000000000000000000000000000C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600} + end + object dlgFonts: TFontDialog + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'MS Sans Serif' + Font.Style = [] + Options = [] + Left = 450 + Top = 30 + end + object dlgFind: TFindDialog + Left = 478 + Top = 58 + end + object dlgReplace: TReplaceDialog + Left = 506 + Top = 30 + end + object lstImagesDisabled: TImageList + Left = 506 + Top = 58 + Bitmap = { + 494C010106000900180010001000FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600 + 0000000000003600000028000000400000002000000001002000000000000020 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000FFFFFF000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000084848400000000000000 + 0000FFFFFF000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000008484840000000000000000008484 + 8400000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000FFFFFF00FFFFFF0000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000084848400FFFFFF00FFFFFF00848484000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000008484 + 8400848484000000000000000000000000000000000000000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00000000000000000000000000000000000000 + 0000000000000000000000000000848484008484840084848400000000000000 + 0000FFFFFF000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000848484008484 + 8400000000000000000000000000000000000000000084848400848484008484 + 84008484840084848400FFFFFF00000000000000000000000000000000000000 + 0000000000000000000084848400848484000000000000000000000000008484 + 840000000000FFFFFF0000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000000000000084848400FFFF + FF00000000000000000000000000000000000000000000000000848484008484 + 84008484840084848400FFFFFF00000000000000000000000000FFFFFF00FFFF + FF00FFFFFF0084848400000000000000000000000000FFFFFF00848484000000 + 00008484840000000000FFFFFF00000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000000000000084848400FFFF + FF00000000000000000000000000000000000000000000000000000000008484 + 84008484840084848400FFFFFF00000000000000000084848400848484008484 + 8400848484000000000000000000FFFFFF008484840084848400000000008484 + 8400000000008484840000000000848484000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000000000000084848400FFFF + FF00FFFFFF0000000000000000000000000000000000FFFFFF00848484000000 + 00008484840084848400FFFFFF00000000008484840084848400848484008484 + 8400FFFFFF00000000008484840084848400FFFFFF00FFFFFF00848484000000 + 0000848484000000000084848400FFFFFF000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000848484008484 + 8400FFFFFF00FFFFFF00FFFFFF00FFFFFF008484840084848400000000000000 + 00000000000084848400000000000000000084848400FFFFFF00000000008484 + 8400FFFFFF008484840084848400848484008484840084848400FFFFFF008484 + 8400FFFFFF008484840084848400FFFFFF000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000008484 + 8400848484008484840084848400848484000000000000000000000000000000 + 00000000000000000000000000000000000084848400FFFFFF00848484008484 + 8400848484008484840084848400848484008484840084848400848484008484 + 8400848484008484840084848400FFFFFF000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000084848400FFFFFF00000000008484 + 8400FFFFFF0084848400FFFFFF0084848400FFFFFF0084848400FFFFFF008484 + 8400FFFFFF008484840084848400FFFFFF000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000084848400FFFFFF00848484008484 + 8400848484008484840084848400848484008484840084848400848484008484 + 8400848484008484840084848400FFFFFF000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000008484840000000000FFFFFF008484 + 8400FFFFFF0084848400FFFFFF0084848400FFFFFF0084848400FFFFFF008484 + 8400FFFFFF00FFFFFF0084848400000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000084848400848484008484 + 8400848484008484840084848400848484008484840084848400848484008484 + 8400848484008484840000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000FFFFFF00FFFFFF00000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000848484008484840000000000FFFFFF000000000000000000FFFFFF00FFFF + FF00000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000000000000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF0084848400848484008484840084848400848484008484 + 8400848484008484840084848400848484000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000008484 + 8400FFFFFF000000000084848400FFFFFF000000000084848400848484000000 + 0000FFFFFF000000000000000000000000000000000000000000000000000000 + 0000000000000000000084848400848484008484840084848400848484008484 + 8400848484008484840084848400FFFFFF000000000084848400848484008484 + 8400848484008484840084848400FFFFFF0000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00848484000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000008484 + 8400FFFFFF000000000084848400FFFFFF0084848400FFFFFF00000000008484 + 8400FFFFFF000000000000000000000000000000000000000000000000000000 + 0000000000000000000084848400FFFFFF0000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF0084848400FFFFFF008484840084848400848484008484 + 8400848484008484840084848400FFFFFF008484840084848400848484008484 + 8400848484008484840000000000848484000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000008484 + 840000000000FFFFFF0084848400FFFFFF0084848400FFFFFF00000000008484 + 8400FFFFFF0000000000000000000000000000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF0084848400FFFFFF008484840084848400848484008484 + 8400848484000000000084848400FFFFFF008484840084848400848484008484 + 8400848484008484840084848400FFFFFF0000000000FFFFFF00FFFFFF00FFFF + FF0000000000FFFFFF00FFFFFF00848484000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000FFFFFF00FFFFFF0000000000000000000000000000000000000000000000 + 0000848484008484840084848400FFFFFF0084848400FFFFFF00FFFFFF008484 + 8400000000000000000000000000000000008484840084848400848484008484 + 8400848484008484840084848400FFFFFF0000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF0084848400FFFFFF008484840084848400848484008484 + 8400848484008484840084848400FFFFFF008484840084848400848484000000 + 000084848400848484008484840084848400000000000000000000000000FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000000000000000000000008484 + 840084848400FFFFFF00FFFFFF00000000000000000000000000000000000000 + 0000000000000000000084848400FFFFFF008484840084848400848484000000 + 00000000000000000000000000000000000084848400FFFFFF0000000000FFFF + FF00FFFFFF00FFFFFF0084848400FFFFFF008484840084848400848484008484 + 8400848484000000000084848400FFFFFF008484840084848400848484008484 + 8400848484008484840084848400FFFFFF000000000000000000000000000000 + 000084848400FFFFFF0084848400000000000000000000000000848484008484 + 8400848484008484840084848400000000000000000000000000000000000000 + 00008484840084848400FFFFFF00000000000000000000000000000000000000 + 0000000000000000000084848400848484008484840000000000000000000000 + 00000000000000000000000000000000000084848400FFFFFF00848484008484 + 8400848484008484840084848400FFFFFF0000000000FFFFFF00FFFFFF000000 + 0000FFFFFF00FFFFFF0084848400FFFFFF008484840084848400848484008484 + 8400848484008484840084848400FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF008484840084848400FFFFFF00000000000000000000000000848484008484 + 8400848484008484840000000000000000000000000000000000000000000000 + 00000000000084848400FFFFFF00000000000000000000000000000000000000 + 000000000000000000000000000084848400FFFFFF00FFFFFF00000000000000 + 00000000000000000000000000000000000084848400FFFFFF0000000000FFFF + FF00FFFFFF00FFFFFF0084848400FFFFFF008484840084848400000000008484 + 8400848484008484840084848400000000008484840084848400848484008484 + 8400848484008484840084848400848484008484840084848400848484008484 + 84008484840084848400FFFFFF00000000000000000000000000848484008484 + 84008484840000000000FFFFFF00000000000000000000000000000000000000 + 00000000000084848400FFFFFF00000000000000000000000000000000000000 + 00000000000000000000848484008484840084848400FFFFFF00000000000000 + 00000000000000000000000000000000000084848400FFFFFF00848484008484 + 8400848484008484840084848400FFFFFF000000000000000000000000008484 + 8400FFFFFF008484840000000000000000008484840084848400848484008484 + 8400848484008484840084848400848484008484840084848400848484008484 + 84008484840084848400FFFFFF00000000000000000000000000848484008484 + 8400000000008484840000000000FFFFFF00FFFFFF0000000000000000000000 + 00000000000084848400FFFFFF00000000000000000000000000000000000000 + 0000000000000000000084848400FFFFFF0084848400FFFFFF00FFFFFF000000 + 00000000000000000000000000000000000084848400FFFFFF0000000000FFFF + FF00FFFFFF000000000084848400FFFFFF00FFFFFF00FFFFFF00FFFFFF008484 + 8400848484000000000000000000000000008484840084848400848484008484 + 8400848484008484840084848400848484008484840084848400848484008484 + 84008484840084848400FFFFFF00000000000000000000000000848484000000 + 00000000000000000000848484008484840000000000FFFFFF00FFFFFF00FFFF + FF00848484008484840000000000000000000000000000000000000000000000 + 0000000000008484840084848400000000008484840084848400FFFFFF000000 + 00000000000000000000000000000000000084848400FFFFFF00848484008484 + 8400000000008484840084848400848484008484840084848400848484008484 + 8400000000000000000000000000000000008484840084848400848484008484 + 8400FFFFFF00FFFFFF0000000000FFFFFF00FFFFFF0000000000848484008484 + 84008484840084848400FFFFFF00000000000000000000000000000000000000 + 0000000000000000000000000000000000008484840084848400848484008484 + 8400848484000000000000000000000000000000000000000000000000000000 + 00000000000084848400FFFFFF00000000000000000084848400FFFFFF000000 + 00000000000000000000000000000000000084848400FFFFFF00000000000000 + 00000000000084848400FFFFFF00848484000000000000000000000000000000 + 0000000000000000000000000000000000008484840084848400848484008484 + 840084848400FFFFFF0084848400848484000000000084848400848484008484 + 8400848484008484840000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000084848400FFFFFF00000000000000000084848400FFFFFF000000 + 00000000000000000000000000000000000084848400FFFFFF00FFFFFF00FFFF + FF00FFFFFF008484840084848400000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000084848400848484008484 + 84008484840084848400FFFFFF00FFFFFF008484840084848400848484008484 + 8400848484000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000008484840000000000000000000000000084848400000000000000 + 0000000000000000000000000000000000008484840084848400848484008484 + 8400848484008484840000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000008484840084848400848484008484840000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000424D3E000000000000003E000000 + 2800000040000000200000000100010000000000000100000000000000000000 + 000000000000000000000000FFFFFF00FFFFFFFF00000000FFFFFFDF00000000 + FFFFFFB700000000FFFFFF6F00000000F3FFFE1F00000000E7C1FE3700000000 + CF81FCEB00000000CFC1C39500000000CFE1862A00000000C791041400000000 + C03B200000000000E0FF000000000000FFFF200000000000FFFF000000000000 + FFFF400100000000FFFF800300000000F9FFFFFFFE00FFFFF2CFFE00C000FFFF + E497FC008080FFFFE427FC800002FFFFE82780040088FFF3F00F00800010E0E1 + FC1F200400F1C1F1FC7F00900001C3F9FE3F20210001C5F9FC3F00E30001CA79 + FC1F24070001DC83F91F080F0241FF07F99F38FF0083FFFFF99F01FF8007FFFF + FBBF03FFF87FFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 + 000000000000} + end +end diff --git a/developer/src/tike/child/UfrmEditor.pas b/developer/src/tike/child/UfrmEditor.pas index 0bf0f96c61..255a61c210 100644 --- a/developer/src/tike/child/UfrmEditor.pas +++ b/developer/src/tike/child/UfrmEditor.pas @@ -41,7 +41,7 @@ uses System.UITypes, Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, Menus, ToolWin, ComCtrls, ImgList, ErrorControlledRegistry, - RegistryKeys, UfrmMDIChild, MenuImgList, Printers, + RegistryKeys, UfrmMDIChild, MenuImgList, UfrmKeyTest, Keyman.Developer.System.Project.ProjectFile, UfrmMDIEditor, @@ -54,11 +54,9 @@ type TUPCOptions = set of (upcSetError, upcClearError, upcSetBreakPoint, upcClearBreakPoint, upcSetExecutionPoint, upcClearExecutionPoint); - TfrmEditor = class(TfrmTikeEditor, IKMDPrintActions {TODO:, IKMDPrintPreviewActions}) + TfrmEditor = class(TfrmTikeEditor) lstImages: TMenuImgList; dlgFonts: TFontDialog; - dlgPrint: TPrintDialog; - dlgPrintSetup: TPrinterSetupDialog; dlgFind: TFindDialog; dlgReplace: TReplaceDialog; lstImagesDisabled: TImageList; @@ -73,10 +71,6 @@ type procedure SetTextFileFormat(const Value: TTextFileFormat); procedure UpdateEditorFormat; - { IKMDPrintActions } - function PrintFile: Boolean; - { IKMDPrintPreviewActions } - //TODO: function PrintPreview: Boolean; procedure EditorChanged(Sender: TObject); function GetEditorFormat: TEditorFormat; function GetTextFileFormat: TTextFileFormat; @@ -300,11 +294,6 @@ begin Modified := False; end; -function TfrmEditor.PrintFile: Boolean; -begin - Result := FEditorFrame.PrintFile(FileName); -end; - {------------------------------------------------------------------------------- - Interface functions - -------------------------------------------------------------------------------} diff --git a/developer/src/tike/child/UfrmKeymanWizard.pas b/developer/src/tike/child/UfrmKeymanWizard.pas index b88f014810..81b1bb7c6a 100644 --- a/developer/src/tike/child/UfrmKeymanWizard.pas +++ b/developer/src/tike/child/UfrmKeymanWizard.pas @@ -159,7 +159,7 @@ type Filename: string; end; - TfrmKeymanWizard = class(TfrmTikeEditor, IKMDPrintActions {TODO:, IKMDPrintPreviewActions}) + TfrmKeymanWizard = class(TfrmTikeEditor) dlgBrowseBitmap: TOpenPictureDialog; dlgSaveExport: TSaveDialog; dlgSaveBitmap: TSavePictureDialog; @@ -524,11 +524,6 @@ type function CanChangeView(FView: TCodeDesignView): Boolean; override; // I4678 procedure ChangeView(FView: TCodeDesignView); override; // I4678 - { IKMDPrintActions } - function PrintFile: Boolean; - { IKMDPrintPreviewActions } - //TODO: function PrintPreview: Boolean; - function CanReloadAsTextFileFormatClick: Boolean; override; // I3637 procedure ReloadAsTextFileFormatClick(TextFileFormat: TTextFileFormat); // I3637 override; @@ -1508,16 +1503,6 @@ begin Result := True; end; -function TfrmKeymanWizard.PrintFile: Boolean; -begin - Result := frameSource.PrintFile(FileName); -end; - -{TODO: function TfrmKeymanWizard.PrintPreview: Boolean; -begin - Result := frameSource.PrintPreview(FileName); -end;} - function TfrmKeymanWizard.GetCurrentRule: TKeyboardParser_LayoutRule; var i: Integer; diff --git a/developer/src/tike/debug/XString.pas b/developer/src/tike/debug/XString.pas index 1f76654dba..7682061258 100644 --- a/developer/src/tike/debug/XString.pas +++ b/developer/src/tike/debug/XString.pas @@ -1,18 +1,18 @@ (* Name: XString Copyright: Copyright (C) SIL International. - Documentation: - Description: + Documentation: + Description: Create Date: 14 Jun 2008 Modified Date: 13 Dec 2012 Authors: mcdurdin - Related Files: - Dependencies: + Related Files: + Dependencies: - Bugs: - Todo: - Notes: + Bugs: + Todo: + Notes: History: 14 Jun 2008 - mcdurdin - I1365 - Add CODE_NOTANY support 13 Dec 2012 - mcdurdin - I3661 - V9.0 - XString unit needs updating to support 8 and 9 stores *) @@ -150,7 +150,7 @@ begin CODE_USE: Result := 1; CODE_DEADKEY: Result := 1; CODE_EXTENDED: Result := 3; - CODE_CLEARCONTEXT: Result := 1; + CODE_CLEARCONTEXT: Result := 1; // deprecated in 19.0 CODE_CALL: Result := 1; CODE_CONTEXTEX: Result := 1; CODE_NOTANY: Result := 1; @@ -198,7 +198,7 @@ begin CODE_EXTENDED: Result := FormatVirtualKey(Ord(FString[Index+2]), Ord(FString[Index+3])); CODE_SWITCH: Result := '??switch'; CODE_KEY: Result := '??key'; - CODE_CLEARCONTEXT: Result := 'clearcontext'; + CODE_CLEARCONTEXT: Result := 'clearcontext'; // deprecated in 19.0 CODE_CALL: Result := 'call(func)'; CODE_CONTEXTEX: Result := Format('context(%d)', [Ord(FString[Index+2])]); CODE_NOTANY: begin storeindex := Ord(FString[Index+2])-1; Result := Format('notany(%s)', [Fkbd.Stores[storeindex].Name]); end; @@ -300,7 +300,7 @@ var storeindex: Integer; begin Element.Name := IntFormatChar(pos, Options + [xfoQuoteChar], storeindex); - + Element.StoreIndex := storeindex; if storeindex > -1 then Element.Store := Fkbd.Stores[storeindex].AString @@ -340,7 +340,7 @@ function TXString.SubString(StartIndex, Len: Integer): WideString; var i, p, n1, n2: Integer; begin - n2 := -1; n1 := 0; + n2 := -1; n1 := 0; i := 1; p := 1; while (i <= Length(FString)) and (n2 < 0) do begin diff --git a/developer/src/tike/main/KeymanDeveloperUtils.pas b/developer/src/tike/main/KeymanDeveloperUtils.pas index fe2e60f939..9eed5efd45 100644 --- a/developer/src/tike/main/KeymanDeveloperUtils.pas +++ b/developer/src/tike/main/KeymanDeveloperUtils.pas @@ -285,7 +285,7 @@ begin if not GetKmshellPath(kmshell) then Exit(False); - Result := TUtilExecute.WaitForProcess('"'+kmshell+'" -uk "'+nm+'"', ExtractFilePath(kmshell)); // I3475 + Result := TUtilExecute.WaitForProcess('"'+kmshell+'" -uk "'+nm+'" -s', ExtractFilePath(kmshell)); // I3475 end; function UninstallPackage(const nm: string): Boolean; diff --git a/developer/src/tike/main/UframeTextEditor.dfm b/developer/src/tike/main/UframeTextEditor.dfm index d1e8e0f657..eb31914912 100644 --- a/developer/src/tike/main/UframeTextEditor.dfm +++ b/developer/src/tike/main/UframeTextEditor.dfm @@ -1,569 +1,565 @@ -inherited frameTextEditor: TframeTextEditor - BorderIcons = [] - BorderStyle = bsNone - ClientHeight = 610 - ClientWidth = 751 - KeyPreview = True - OnDestroy = TntFormDestroy - OnKeyDown = FormKeyDown - ExplicitWidth = 751 - ExplicitHeight = 610 - PixelsPerInch = 96 - TextHeight = 13 - object lstImages: TMenuImgList - BkColor = clSilver - DrawingStyle = dsTransparent - DisabledImages = lstImagesDisabled - Left = 394 - Top = 58 - Bitmap = { - 494C010106000900900010001000C0C0C000FE00FFFFFFFFFFFFFFFF424D3600 - 0000000000003600000028000000400000002000000001002000000000000020 - 000000000000000000000000000000000000C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C6000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000000000000000000000000000C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C6000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000000000000000000000000000C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C60000000000FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000000000000000000000000000C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C60000000000FFFFFF00FFFFFF000000 - 0000FFFFFF00FFFFFF00FFFFFF00FFFFFF000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000000000000000000000000000C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C60000000000FFFFFF00FFFFFF0000000000FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000000000000000000000000000C6C6C600C6C6C600C6C6C6008400 - 000084848400C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600000000000000000000000000FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000000000000000000000000000C6C6C600C6C6C600848484008400 - 0000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C60084000000840000008400 - 00008400000084000000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C6000000000000000000FFFFFF00FFFFFF00FFFFFF000000 - 0000FFFFFF00FFFFFF00FFFFFF00FFFFFF000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000000000000000000000000000C6C6C600C6C6C60084000000C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600840000008400 - 00008400000084000000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C60000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF0000000000FFFF - FF0000000000FFFFFF00FFFFFF00FFFFFF000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000000000000000000000000000C6C6C600C6C6C60084000000C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6008400 - 00008400000084000000C6C6C600C6C6C600C6C6C60000000000000000000000 - 000000000000FFFFFF00FFFFFF00FFFFFF000000000000000000FFFFFF000000 - 0000FFFFFF0000000000FFFFFF00000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000000000000000000000000000C6C6C600C6C6C60084000000C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C60084000000C6C6 - C6008400000084000000C6C6C600C6C6C6000000000000848400008484000000 - 0000FFFFFF00FFFFFF000000000000000000FFFFFF00FFFFFF0000000000FFFF - FF0000000000FFFFFF0000000000C6C6C6000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000000000000000000000000000C6C6C600C6C6C600848484008400 - 0000C6C6C600C6C6C600C6C6C600C6C6C6008400000084000000C6C6C600C6C6 - C600C6C6C60084000000C6C6C600C6C6C60000000000FFFFFF00FFFFFF000000 - 0000FFFFFF000000000000848400008484000000000000000000FFFFFF000000 - 0000FFFFFF000000000000000000C6C6C6000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000000000000000000000000000C6C6C600C6C6C600C6C6C6008484 - 840084000000840000008400000084000000C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C60000000000FFFFFF00000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000084840000000000C6C6C6000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000000000000000000000000000C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C60000000000FFFFFF00FFFFFF000084 - 8400FFFFFF0000848400FFFFFF0000848400FFFFFF0000848400FFFFFF000084 - 8400FFFFFF000084840000000000C6C6C6000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000000000000000000000000000C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C60000000000FFFFFF00000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000084840000000000C6C6C6000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000000000000000000000000000C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C60000000000FFFFFF00FFFFFF000084 - 8400FFFFFF0000848400FFFFFF0000848400FFFFFF0000848400FFFFFF000084 - 8400FFFFFF00FFFFFF0000000000C6C6C6000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000000000000000000000000000C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C60000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 00000000000000000000C6C6C600C6C6C6000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000000000000000000000000000C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C6008400000084000000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C60084000000840000008400000084000000840000008400 - 000084000000840000008400000084000000C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6008400 - 0000C6C6C600C6C6C60084000000C6C6C600C6C6C6008400000084000000C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C60084000000840000008400000084000000840000008400 - 0000840000008400000084000000C6C6C600C6C6C60000000000000000000000 - 0000000000000000000084000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF0084000000C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6008400 - 0000C6C6C600C6C6C60084000000C6C6C60084000000C6C6C600C6C6C6008400 - 0000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C60084000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF0084000000C6C6C6000000000084848400008484008484 - 8400008484008484840084000000FFFFFF008400000084000000840000008400 - 00008400000084000000FFFFFF0084000000C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6008400 - 0000C6C6C600C6C6C60084000000C6C6C60084000000C6C6C600C6C6C6008400 - 0000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C60084000000FFFFFF000000000000000000000000000000 - 000000000000FFFFFF0084000000C6C6C6000000000000848400848484000084 - 8400848484000084840084000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF0084000000C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600840000008400000084000000C6C6C60084000000C6C6C600C6C6C6008400 - 0000C6C6C600C6C6C600C6C6C600C6C6C6000000000000000000000000000000 - 0000000000000000000084000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF0084000000C6C6C6000000000084848400008484008484 - 8400008484008484840084000000FFFFFF00840000008400000084000000FFFF - FF0084000000840000008400000084000000C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6008484 - 840084000000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C60084000000C6C6C600840000008400000084000000C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C60000000000FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF0084000000FFFFFF000000000000000000000000000000 - 000000000000FFFFFF0084000000C6C6C6000000000000848400848484000084 - 8400848484000084840084000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF0084000000FFFFFF0084000000C6C6C600C6C6C600C6C6C600840000008400 - 0000840000008400000084000000C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C6008400000084848400C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600840000000000000084000000C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C60000000000FFFFFF00000000000000 - 0000000000000000000084000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF0084000000C6C6C6000000000084848400008484008484 - 8400008484008484840084000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF008400000084000000C6C6C600C6C6C600C6C6C600C6C6C600840000008400 - 00008400000084000000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C60084000000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C60000000000C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C60000000000FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF0084000000FFFFFF000000000000000000FFFFFF008400 - 0000840000008400000084000000C6C6C6000000000000848400848484000084 - 8400848484000084840084000000840000008400000084000000840000008400 - 00008400000000000000C6C6C600C6C6C600C6C6C600C6C6C600840000008400 - 000084000000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C60084000000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600000000000000000000000000C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C60000000000FFFFFF00000000000000 - 0000000000000000000084000000FFFFFF00FFFFFF00FFFFFF00FFFFFF008400 - 0000FFFFFF0084000000C6C6C600C6C6C6000000000084848400008484008484 - 8400008484008484840000848400848484000084840084848400008484008484 - 84000084840000000000C6C6C600C6C6C600C6C6C600C6C6C600840000008400 - 0000C6C6C60084000000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C60084000000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C60000000000C6C6C60000000000C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C60000000000FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF0084000000FFFFFF00FFFFFF00FFFFFF00FFFFFF008400 - 000084000000C6C6C600C6C6C600C6C6C6000000000000848400848484000000 - 0000000000000000000000000000000000000000000000000000000000008484 - 84008484840000000000C6C6C600C6C6C600C6C6C600C6C6C60084000000C6C6 - C600C6C6C600C6C6C6008400000084000000C6C6C600C6C6C600C6C6C600C6C6 - C6008400000084848400C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C6000000000000000000C6C6C6000000000000000000C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C60000000000FFFFFF00000000000000 - 0000FFFFFF000000000084000000840000008400000084000000840000008400 - 0000C6C6C600C6C6C600C6C6C600C6C6C6000000000084848400848484000000 - 0000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00000000008484 - 84000084840000000000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C6008400000084000000840000008400 - 000084848400C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C60000000000C6C6C600C6C6C600C6C6C60000000000C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C60000000000FFFFFF00FFFFFF00FFFF - FF00FFFFFF0000000000FFFFFF0000000000C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C6000000000000848400848484000084 - 84000000000000FFFF00000000000000000000FFFF0000000000848484000084 - 84008484840000000000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C60000000000C6C6C600C6C6C600C6C6C60000000000C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C60000000000FFFFFF00FFFFFF00FFFF - FF00FFFFFF000000000000000000C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C60000000000000000000000 - 0000000000000000000000FFFF0000FFFF000000000000000000000000000000 - 000000000000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C60000000000C6C6C600C6C6C600C6C6C60000000000C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C6000000000000000000000000000000 - 00000000000000000000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C60000000000000000000000000000000000C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600} - end - object dlgFonts: TFontDialog - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -11 - Font.Name = 'MS Sans Serif' - Font.Style = [] - Options = [] - Left = 450 - Top = 30 - end - object dlgPrintSetup: TPrinterSetupDialog - Left = 526 - Top = 30 - end - object lstImagesDisabled: TImageList - Left = 618 - Top = 26 - Bitmap = { - 494C010106000900900010001000FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600 - 0000000000003600000028000000400000002000000001002000000000000020 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000FFFFFF000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000084848400000000000000 - 0000FFFFFF000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000008484840000000000000000008484 - 8400000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000FFFFFF00FFFFFF0000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000000000000000000084848400FFFFFF00FFFFFF00848484000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000008484 - 8400848484000000000000000000000000000000000000000000FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00000000000000000000000000000000000000 - 0000000000000000000000000000848484008484840084848400000000000000 - 0000FFFFFF000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000848484008484 - 8400000000000000000000000000000000000000000084848400848484008484 - 84008484840084848400FFFFFF00000000000000000000000000000000000000 - 0000000000000000000084848400848484000000000000000000000000008484 - 840000000000FFFFFF0000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000000000000000000000000000000000000000000084848400FFFF - FF00000000000000000000000000000000000000000000000000848484008484 - 84008484840084848400FFFFFF00000000000000000000000000FFFFFF00FFFF - FF00FFFFFF0084848400000000000000000000000000FFFFFF00848484000000 - 00008484840000000000FFFFFF00000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000000000000000000000000000000000000000000084848400FFFF - FF00000000000000000000000000000000000000000000000000000000008484 - 84008484840084848400FFFFFF00000000000000000084848400848484008484 - 8400848484000000000000000000FFFFFF008484840084848400000000008484 - 8400000000008484840000000000848484000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000000000000000000000000000000000000000000084848400FFFF - FF00FFFFFF0000000000000000000000000000000000FFFFFF00848484000000 - 00008484840084848400FFFFFF00000000008484840084848400848484008484 - 8400FFFFFF00000000008484840084848400FFFFFF00FFFFFF00848484000000 - 0000848484000000000084848400FFFFFF000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000848484008484 - 8400FFFFFF00FFFFFF00FFFFFF00FFFFFF008484840084848400000000000000 - 00000000000084848400000000000000000084848400FFFFFF00000000008484 - 8400FFFFFF008484840084848400848484008484840084848400FFFFFF008484 - 8400FFFFFF008484840084848400FFFFFF000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000008484 - 8400848484008484840084848400848484000000000000000000000000000000 - 00000000000000000000000000000000000084848400FFFFFF00848484008484 - 8400848484008484840084848400848484008484840084848400848484008484 - 8400848484008484840084848400FFFFFF000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 00000000000000000000000000000000000084848400FFFFFF00000000008484 - 8400FFFFFF0084848400FFFFFF0084848400FFFFFF0084848400FFFFFF008484 - 8400FFFFFF008484840084848400FFFFFF000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 00000000000000000000000000000000000084848400FFFFFF00848484008484 - 8400848484008484840084848400848484008484840084848400848484008484 - 8400848484008484840084848400FFFFFF000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000008484840000000000FFFFFF008484 - 8400FFFFFF0084848400FFFFFF0084848400FFFFFF0084848400FFFFFF008484 - 8400FFFFFF00FFFFFF0084848400000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000084848400848484008484 - 8400848484008484840084848400848484008484840084848400848484008484 - 8400848484008484840000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000FFFFFF00FFFFFF00000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000848484008484840000000000FFFFFF000000000000000000FFFFFF00FFFF - FF00000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000000000000000FFFFFF00FFFF - FF00FFFFFF00FFFFFF0084848400848484008484840084848400848484008484 - 8400848484008484840084848400848484000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000008484 - 8400FFFFFF000000000084848400FFFFFF000000000084848400848484000000 - 0000FFFFFF000000000000000000000000000000000000000000000000000000 - 0000000000000000000084848400848484008484840084848400848484008484 - 8400848484008484840084848400FFFFFF000000000084848400848484008484 - 8400848484008484840084848400FFFFFF0000000000FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00848484000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000008484 - 8400FFFFFF000000000084848400FFFFFF0084848400FFFFFF00000000008484 - 8400FFFFFF000000000000000000000000000000000000000000000000000000 - 0000000000000000000084848400FFFFFF0000000000FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF0084848400FFFFFF008484840084848400848484008484 - 8400848484008484840084848400FFFFFF008484840084848400848484008484 - 8400848484008484840000000000848484000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000008484 - 840000000000FFFFFF0084848400FFFFFF0084848400FFFFFF00000000008484 - 8400FFFFFF0000000000000000000000000000000000FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF0084848400FFFFFF008484840084848400848484008484 - 8400848484000000000084848400FFFFFF008484840084848400848484008484 - 8400848484008484840084848400FFFFFF0000000000FFFFFF00FFFFFF00FFFF - FF0000000000FFFFFF00FFFFFF00848484000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000FFFFFF00FFFFFF0000000000000000000000000000000000000000000000 - 0000848484008484840084848400FFFFFF0084848400FFFFFF00FFFFFF008484 - 8400000000000000000000000000000000008484840084848400848484008484 - 8400848484008484840084848400FFFFFF0000000000FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF0084848400FFFFFF008484840084848400848484008484 - 8400848484008484840084848400FFFFFF008484840084848400848484000000 - 000084848400848484008484840084848400000000000000000000000000FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000000000000000000000008484 - 840084848400FFFFFF00FFFFFF00000000000000000000000000000000000000 - 0000000000000000000084848400FFFFFF008484840084848400848484000000 - 00000000000000000000000000000000000084848400FFFFFF0000000000FFFF - FF00FFFFFF00FFFFFF0084848400FFFFFF008484840084848400848484008484 - 8400848484000000000084848400FFFFFF008484840084848400848484008484 - 8400848484008484840084848400FFFFFF000000000000000000000000000000 - 000084848400FFFFFF0084848400000000000000000000000000848484008484 - 8400848484008484840084848400000000000000000000000000000000000000 - 00008484840084848400FFFFFF00000000000000000000000000000000000000 - 0000000000000000000084848400848484008484840000000000000000000000 - 00000000000000000000000000000000000084848400FFFFFF00848484008484 - 8400848484008484840084848400FFFFFF0000000000FFFFFF00FFFFFF000000 - 0000FFFFFF00FFFFFF0084848400FFFFFF008484840084848400848484008484 - 8400848484008484840084848400FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF008484840084848400FFFFFF00000000000000000000000000848484008484 - 8400848484008484840000000000000000000000000000000000000000000000 - 00000000000084848400FFFFFF00000000000000000000000000000000000000 - 000000000000000000000000000084848400FFFFFF00FFFFFF00000000000000 - 00000000000000000000000000000000000084848400FFFFFF0000000000FFFF - FF00FFFFFF00FFFFFF0084848400FFFFFF008484840084848400000000008484 - 8400848484008484840084848400000000008484840084848400848484008484 - 8400848484008484840084848400848484008484840084848400848484008484 - 84008484840084848400FFFFFF00000000000000000000000000848484008484 - 84008484840000000000FFFFFF00000000000000000000000000000000000000 - 00000000000084848400FFFFFF00000000000000000000000000000000000000 - 00000000000000000000848484008484840084848400FFFFFF00000000000000 - 00000000000000000000000000000000000084848400FFFFFF00848484008484 - 8400848484008484840084848400FFFFFF000000000000000000000000008484 - 8400FFFFFF008484840000000000000000008484840084848400848484008484 - 8400848484008484840084848400848484008484840084848400848484008484 - 84008484840084848400FFFFFF00000000000000000000000000848484008484 - 8400000000008484840000000000FFFFFF00FFFFFF0000000000000000000000 - 00000000000084848400FFFFFF00000000000000000000000000000000000000 - 0000000000000000000084848400FFFFFF0084848400FFFFFF00FFFFFF000000 - 00000000000000000000000000000000000084848400FFFFFF0000000000FFFF - FF00FFFFFF000000000084848400FFFFFF00FFFFFF00FFFFFF00FFFFFF008484 - 8400848484000000000000000000000000008484840084848400848484008484 - 8400848484008484840084848400848484008484840084848400848484008484 - 84008484840084848400FFFFFF00000000000000000000000000848484000000 - 00000000000000000000848484008484840000000000FFFFFF00FFFFFF00FFFF - FF00848484008484840000000000000000000000000000000000000000000000 - 0000000000008484840084848400000000008484840084848400FFFFFF000000 - 00000000000000000000000000000000000084848400FFFFFF00848484008484 - 8400000000008484840084848400848484008484840084848400848484008484 - 8400000000000000000000000000000000008484840084848400848484008484 - 8400FFFFFF00FFFFFF0000000000FFFFFF00FFFFFF0000000000848484008484 - 84008484840084848400FFFFFF00000000000000000000000000000000000000 - 0000000000000000000000000000000000008484840084848400848484008484 - 8400848484000000000000000000000000000000000000000000000000000000 - 00000000000084848400FFFFFF00000000000000000084848400FFFFFF000000 - 00000000000000000000000000000000000084848400FFFFFF00000000000000 - 00000000000084848400FFFFFF00848484000000000000000000000000000000 - 0000000000000000000000000000000000008484840084848400848484008484 - 840084848400FFFFFF0084848400848484000000000084848400848484008484 - 8400848484008484840000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 00000000000084848400FFFFFF00000000000000000084848400FFFFFF000000 - 00000000000000000000000000000000000084848400FFFFFF00FFFFFF00FFFF - FF00FFFFFF008484840084848400000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000084848400848484008484 - 84008484840084848400FFFFFF00FFFFFF008484840084848400848484008484 - 8400848484000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000008484840000000000000000000000000084848400000000000000 - 0000000000000000000000000000000000008484840084848400848484008484 - 8400848484008484840000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000008484840084848400848484008484840000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000000000000000000000000000424D3E000000000000003E000000 - 2800000040000000200000000100010000000000000100000000000000000000 - 000000000000000000000000FFFFFF00FFFFFFFF00000000FFFFFFDF00000000 - FFFFFFB700000000FFFFFF6F00000000F3FFFE1F00000000E7C1FE3700000000 - CF81FCEB00000000CFC1C39500000000CFE1862A00000000C791041400000000 - C03B200000000000E0FF000000000000FFFF200000000000FFFF000000000000 - FFFF400100000000FFFF800300000000F9FFFFFFFE00FFFFF2CFFE00C000FFFF - E497FC008080FFFFE427FC800002FFFFE82780040088FFF3F00F00800010E0E1 - FC1F200400F1C1F1FC7F00900001C3F9FE3F20210001C5F9FC3F00E30001CA79 - FC1F24070001DC83F91F080F0241FF07F99F38FF0083FFFFF99F01FF8007FFFF - FBBF03FFF87FFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 - 000000000000} - end -end +inherited frameTextEditor: TframeTextEditor + BorderIcons = [] + BorderStyle = bsNone + ClientHeight = 610 + ClientWidth = 751 + KeyPreview = True + OnDestroy = TntFormDestroy + OnKeyDown = FormKeyDown + ExplicitWidth = 751 + ExplicitHeight = 610 + PixelsPerInch = 96 + TextHeight = 13 + object lstImages: TMenuImgList + BkColor = clSilver + DrawingStyle = dsTransparent + DisabledImages = lstImagesDisabled + Left = 394 + Top = 58 + Bitmap = { + 494C010106000900900010001000C0C0C000FE00FFFFFFFFFFFFFFFF424D3600 + 0000000000003600000028000000400000002000000001002000000000000020 + 000000000000000000000000000000000000C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C6000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C6000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C60000000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C60000000000FFFFFF00FFFFFF000000 + 0000FFFFFF00FFFFFF00FFFFFF00FFFFFF000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C60000000000FFFFFF00FFFFFF0000000000FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000C6C6C600C6C6C600C6C6C6008400 + 000084848400C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600000000000000000000000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000C6C6C600C6C6C600848484008400 + 0000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C60084000000840000008400 + 00008400000084000000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C6000000000000000000FFFFFF00FFFFFF00FFFFFF000000 + 0000FFFFFF00FFFFFF00FFFFFF00FFFFFF000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000C6C6C600C6C6C60084000000C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600840000008400 + 00008400000084000000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C60000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF0000000000FFFF + FF0000000000FFFFFF00FFFFFF00FFFFFF000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000C6C6C600C6C6C60084000000C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6008400 + 00008400000084000000C6C6C600C6C6C600C6C6C60000000000000000000000 + 000000000000FFFFFF00FFFFFF00FFFFFF000000000000000000FFFFFF000000 + 0000FFFFFF0000000000FFFFFF00000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000C6C6C600C6C6C60084000000C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C60084000000C6C6 + C6008400000084000000C6C6C600C6C6C6000000000000848400008484000000 + 0000FFFFFF00FFFFFF000000000000000000FFFFFF00FFFFFF0000000000FFFF + FF0000000000FFFFFF0000000000C6C6C6000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000C6C6C600C6C6C600848484008400 + 0000C6C6C600C6C6C600C6C6C600C6C6C6008400000084000000C6C6C600C6C6 + C600C6C6C60084000000C6C6C600C6C6C60000000000FFFFFF00FFFFFF000000 + 0000FFFFFF000000000000848400008484000000000000000000FFFFFF000000 + 0000FFFFFF000000000000000000C6C6C6000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000C6C6C600C6C6C600C6C6C6008484 + 840084000000840000008400000084000000C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C60000000000FFFFFF00000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000084840000000000C6C6C6000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C60000000000FFFFFF00FFFFFF000084 + 8400FFFFFF0000848400FFFFFF0000848400FFFFFF0000848400FFFFFF000084 + 8400FFFFFF000084840000000000C6C6C6000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C60000000000FFFFFF00000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000084840000000000C6C6C6000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C60000000000FFFFFF00FFFFFF000084 + 8400FFFFFF0000848400FFFFFF0000848400FFFFFF0000848400FFFFFF000084 + 8400FFFFFF00FFFFFF0000000000C6C6C6000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C60000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000C6C6C600C6C6C6000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C6008400000084000000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C60084000000840000008400000084000000840000008400 + 000084000000840000008400000084000000C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6008400 + 0000C6C6C600C6C6C60084000000C6C6C600C6C6C6008400000084000000C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C60084000000840000008400000084000000840000008400 + 0000840000008400000084000000C6C6C600C6C6C60000000000000000000000 + 0000000000000000000084000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF0084000000C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6008400 + 0000C6C6C600C6C6C60084000000C6C6C60084000000C6C6C600C6C6C6008400 + 0000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C60084000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF0084000000C6C6C6000000000084848400008484008484 + 8400008484008484840084000000FFFFFF008400000084000000840000008400 + 00008400000084000000FFFFFF0084000000C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6008400 + 0000C6C6C600C6C6C60084000000C6C6C60084000000C6C6C600C6C6C6008400 + 0000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C60084000000FFFFFF000000000000000000000000000000 + 000000000000FFFFFF0084000000C6C6C6000000000000848400848484000084 + 8400848484000084840084000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF0084000000C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600840000008400000084000000C6C6C60084000000C6C6C600C6C6C6008400 + 0000C6C6C600C6C6C600C6C6C600C6C6C6000000000000000000000000000000 + 0000000000000000000084000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF0084000000C6C6C6000000000084848400008484008484 + 8400008484008484840084000000FFFFFF00840000008400000084000000FFFF + FF0084000000840000008400000084000000C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6008484 + 840084000000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C60084000000C6C6C600840000008400000084000000C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C60000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF0084000000FFFFFF000000000000000000000000000000 + 000000000000FFFFFF0084000000C6C6C6000000000000848400848484000084 + 8400848484000084840084000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF0084000000FFFFFF0084000000C6C6C600C6C6C600C6C6C600840000008400 + 0000840000008400000084000000C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C6008400000084848400C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600840000000000000084000000C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C60000000000FFFFFF00000000000000 + 0000000000000000000084000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF0084000000C6C6C6000000000084848400008484008484 + 8400008484008484840084000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF008400000084000000C6C6C600C6C6C600C6C6C600C6C6C600840000008400 + 00008400000084000000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C60084000000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C60000000000C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C60000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF0084000000FFFFFF000000000000000000FFFFFF008400 + 0000840000008400000084000000C6C6C6000000000000848400848484000084 + 8400848484000084840084000000840000008400000084000000840000008400 + 00008400000000000000C6C6C600C6C6C600C6C6C600C6C6C600840000008400 + 000084000000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C60084000000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600000000000000000000000000C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C60000000000FFFFFF00000000000000 + 0000000000000000000084000000FFFFFF00FFFFFF00FFFFFF00FFFFFF008400 + 0000FFFFFF0084000000C6C6C600C6C6C6000000000084848400008484008484 + 8400008484008484840000848400848484000084840084848400008484008484 + 84000084840000000000C6C6C600C6C6C600C6C6C600C6C6C600840000008400 + 0000C6C6C60084000000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C60084000000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C60000000000C6C6C60000000000C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C60000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF0084000000FFFFFF00FFFFFF00FFFFFF00FFFFFF008400 + 000084000000C6C6C600C6C6C600C6C6C6000000000000848400848484000000 + 0000000000000000000000000000000000000000000000000000000000008484 + 84008484840000000000C6C6C600C6C6C600C6C6C600C6C6C60084000000C6C6 + C600C6C6C600C6C6C6008400000084000000C6C6C600C6C6C600C6C6C600C6C6 + C6008400000084848400C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C6000000000000000000C6C6C6000000000000000000C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C60000000000FFFFFF00000000000000 + 0000FFFFFF000000000084000000840000008400000084000000840000008400 + 0000C6C6C600C6C6C600C6C6C600C6C6C6000000000084848400848484000000 + 0000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00000000008484 + 84000084840000000000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C6008400000084000000840000008400 + 000084848400C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C60000000000C6C6C600C6C6C600C6C6C60000000000C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C60000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF0000000000FFFFFF0000000000C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C6000000000000848400848484000084 + 84000000000000FFFF00000000000000000000FFFF0000000000848484000084 + 84008484840000000000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C60000000000C6C6C600C6C6C600C6C6C60000000000C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C60000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF000000000000000000C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C60000000000000000000000 + 0000000000000000000000FFFF0000FFFF000000000000000000000000000000 + 000000000000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C60000000000C6C6C600C6C6C600C6C6C60000000000C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C6000000000000000000000000000000 + 00000000000000000000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C60000000000000000000000000000000000C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600} + end + object dlgFonts: TFontDialog + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'MS Sans Serif' + Font.Style = [] + Options = [] + Left = 450 + Top = 30 + end + object lstImagesDisabled: TImageList + Left = 618 + Top = 26 + Bitmap = { + 494C010106000900900010001000FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600 + 0000000000003600000028000000400000002000000001002000000000000020 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000FFFFFF000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000084848400000000000000 + 0000FFFFFF000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000008484840000000000000000008484 + 8400000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000FFFFFF00FFFFFF0000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000084848400FFFFFF00FFFFFF00848484000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000008484 + 8400848484000000000000000000000000000000000000000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00000000000000000000000000000000000000 + 0000000000000000000000000000848484008484840084848400000000000000 + 0000FFFFFF000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000848484008484 + 8400000000000000000000000000000000000000000084848400848484008484 + 84008484840084848400FFFFFF00000000000000000000000000000000000000 + 0000000000000000000084848400848484000000000000000000000000008484 + 840000000000FFFFFF0000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000000000000084848400FFFF + FF00000000000000000000000000000000000000000000000000848484008484 + 84008484840084848400FFFFFF00000000000000000000000000FFFFFF00FFFF + FF00FFFFFF0084848400000000000000000000000000FFFFFF00848484000000 + 00008484840000000000FFFFFF00000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000000000000084848400FFFF + FF00000000000000000000000000000000000000000000000000000000008484 + 84008484840084848400FFFFFF00000000000000000084848400848484008484 + 8400848484000000000000000000FFFFFF008484840084848400000000008484 + 8400000000008484840000000000848484000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000000000000084848400FFFF + FF00FFFFFF0000000000000000000000000000000000FFFFFF00848484000000 + 00008484840084848400FFFFFF00000000008484840084848400848484008484 + 8400FFFFFF00000000008484840084848400FFFFFF00FFFFFF00848484000000 + 0000848484000000000084848400FFFFFF000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000848484008484 + 8400FFFFFF00FFFFFF00FFFFFF00FFFFFF008484840084848400000000000000 + 00000000000084848400000000000000000084848400FFFFFF00000000008484 + 8400FFFFFF008484840084848400848484008484840084848400FFFFFF008484 + 8400FFFFFF008484840084848400FFFFFF000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000008484 + 8400848484008484840084848400848484000000000000000000000000000000 + 00000000000000000000000000000000000084848400FFFFFF00848484008484 + 8400848484008484840084848400848484008484840084848400848484008484 + 8400848484008484840084848400FFFFFF000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000084848400FFFFFF00000000008484 + 8400FFFFFF0084848400FFFFFF0084848400FFFFFF0084848400FFFFFF008484 + 8400FFFFFF008484840084848400FFFFFF000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000084848400FFFFFF00848484008484 + 8400848484008484840084848400848484008484840084848400848484008484 + 8400848484008484840084848400FFFFFF000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000008484840000000000FFFFFF008484 + 8400FFFFFF0084848400FFFFFF0084848400FFFFFF0084848400FFFFFF008484 + 8400FFFFFF00FFFFFF0084848400000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000084848400848484008484 + 8400848484008484840084848400848484008484840084848400848484008484 + 8400848484008484840000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000FFFFFF00FFFFFF00000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000848484008484840000000000FFFFFF000000000000000000FFFFFF00FFFF + FF00000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000000000000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF0084848400848484008484840084848400848484008484 + 8400848484008484840084848400848484000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000008484 + 8400FFFFFF000000000084848400FFFFFF000000000084848400848484000000 + 0000FFFFFF000000000000000000000000000000000000000000000000000000 + 0000000000000000000084848400848484008484840084848400848484008484 + 8400848484008484840084848400FFFFFF000000000084848400848484008484 + 8400848484008484840084848400FFFFFF0000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00848484000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000008484 + 8400FFFFFF000000000084848400FFFFFF0084848400FFFFFF00000000008484 + 8400FFFFFF000000000000000000000000000000000000000000000000000000 + 0000000000000000000084848400FFFFFF0000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF0084848400FFFFFF008484840084848400848484008484 + 8400848484008484840084848400FFFFFF008484840084848400848484008484 + 8400848484008484840000000000848484000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000008484 + 840000000000FFFFFF0084848400FFFFFF0084848400FFFFFF00000000008484 + 8400FFFFFF0000000000000000000000000000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF0084848400FFFFFF008484840084848400848484008484 + 8400848484000000000084848400FFFFFF008484840084848400848484008484 + 8400848484008484840084848400FFFFFF0000000000FFFFFF00FFFFFF00FFFF + FF0000000000FFFFFF00FFFFFF00848484000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000FFFFFF00FFFFFF0000000000000000000000000000000000000000000000 + 0000848484008484840084848400FFFFFF0084848400FFFFFF00FFFFFF008484 + 8400000000000000000000000000000000008484840084848400848484008484 + 8400848484008484840084848400FFFFFF0000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF0084848400FFFFFF008484840084848400848484008484 + 8400848484008484840084848400FFFFFF008484840084848400848484000000 + 000084848400848484008484840084848400000000000000000000000000FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000000000000000000000008484 + 840084848400FFFFFF00FFFFFF00000000000000000000000000000000000000 + 0000000000000000000084848400FFFFFF008484840084848400848484000000 + 00000000000000000000000000000000000084848400FFFFFF0000000000FFFF + FF00FFFFFF00FFFFFF0084848400FFFFFF008484840084848400848484008484 + 8400848484000000000084848400FFFFFF008484840084848400848484008484 + 8400848484008484840084848400FFFFFF000000000000000000000000000000 + 000084848400FFFFFF0084848400000000000000000000000000848484008484 + 8400848484008484840084848400000000000000000000000000000000000000 + 00008484840084848400FFFFFF00000000000000000000000000000000000000 + 0000000000000000000084848400848484008484840000000000000000000000 + 00000000000000000000000000000000000084848400FFFFFF00848484008484 + 8400848484008484840084848400FFFFFF0000000000FFFFFF00FFFFFF000000 + 0000FFFFFF00FFFFFF0084848400FFFFFF008484840084848400848484008484 + 8400848484008484840084848400FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF008484840084848400FFFFFF00000000000000000000000000848484008484 + 8400848484008484840000000000000000000000000000000000000000000000 + 00000000000084848400FFFFFF00000000000000000000000000000000000000 + 000000000000000000000000000084848400FFFFFF00FFFFFF00000000000000 + 00000000000000000000000000000000000084848400FFFFFF0000000000FFFF + FF00FFFFFF00FFFFFF0084848400FFFFFF008484840084848400000000008484 + 8400848484008484840084848400000000008484840084848400848484008484 + 8400848484008484840084848400848484008484840084848400848484008484 + 84008484840084848400FFFFFF00000000000000000000000000848484008484 + 84008484840000000000FFFFFF00000000000000000000000000000000000000 + 00000000000084848400FFFFFF00000000000000000000000000000000000000 + 00000000000000000000848484008484840084848400FFFFFF00000000000000 + 00000000000000000000000000000000000084848400FFFFFF00848484008484 + 8400848484008484840084848400FFFFFF000000000000000000000000008484 + 8400FFFFFF008484840000000000000000008484840084848400848484008484 + 8400848484008484840084848400848484008484840084848400848484008484 + 84008484840084848400FFFFFF00000000000000000000000000848484008484 + 8400000000008484840000000000FFFFFF00FFFFFF0000000000000000000000 + 00000000000084848400FFFFFF00000000000000000000000000000000000000 + 0000000000000000000084848400FFFFFF0084848400FFFFFF00FFFFFF000000 + 00000000000000000000000000000000000084848400FFFFFF0000000000FFFF + FF00FFFFFF000000000084848400FFFFFF00FFFFFF00FFFFFF00FFFFFF008484 + 8400848484000000000000000000000000008484840084848400848484008484 + 8400848484008484840084848400848484008484840084848400848484008484 + 84008484840084848400FFFFFF00000000000000000000000000848484000000 + 00000000000000000000848484008484840000000000FFFFFF00FFFFFF00FFFF + FF00848484008484840000000000000000000000000000000000000000000000 + 0000000000008484840084848400000000008484840084848400FFFFFF000000 + 00000000000000000000000000000000000084848400FFFFFF00848484008484 + 8400000000008484840084848400848484008484840084848400848484008484 + 8400000000000000000000000000000000008484840084848400848484008484 + 8400FFFFFF00FFFFFF0000000000FFFFFF00FFFFFF0000000000848484008484 + 84008484840084848400FFFFFF00000000000000000000000000000000000000 + 0000000000000000000000000000000000008484840084848400848484008484 + 8400848484000000000000000000000000000000000000000000000000000000 + 00000000000084848400FFFFFF00000000000000000084848400FFFFFF000000 + 00000000000000000000000000000000000084848400FFFFFF00000000000000 + 00000000000084848400FFFFFF00848484000000000000000000000000000000 + 0000000000000000000000000000000000008484840084848400848484008484 + 840084848400FFFFFF0084848400848484000000000084848400848484008484 + 8400848484008484840000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000084848400FFFFFF00000000000000000084848400FFFFFF000000 + 00000000000000000000000000000000000084848400FFFFFF00FFFFFF00FFFF + FF00FFFFFF008484840084848400000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000084848400848484008484 + 84008484840084848400FFFFFF00FFFFFF008484840084848400848484008484 + 8400848484000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000008484840000000000000000000000000084848400000000000000 + 0000000000000000000000000000000000008484840084848400848484008484 + 8400848484008484840000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000008484840084848400848484008484840000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000424D3E000000000000003E000000 + 2800000040000000200000000100010000000000000100000000000000000000 + 000000000000000000000000FFFFFF00FFFFFFFF00000000FFFFFFDF00000000 + FFFFFFB700000000FFFFFF6F00000000F3FFFE1F00000000E7C1FE3700000000 + CF81FCEB00000000CFC1C39500000000CFE1862A00000000C791041400000000 + C03B200000000000E0FF000000000000FFFF200000000000FFFF000000000000 + FFFF400100000000FFFF800300000000F9FFFFFFFE00FFFFF2CFFE00C000FFFF + E497FC008080FFFFE427FC800002FFFFE82780040088FFF3F00F00800010E0E1 + FC1F200400F1C1F1FC7F00900001C3F9FE3F20210001C5F9FC3F00E30001CA79 + FC1F24070001DC83F91F080F0241FF07F99F38FF0083FFFFF99F01FF8007FFFF + FBBF03FFF87FFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 + 000000000000} + end +end diff --git a/developer/src/tike/main/UframeTextEditor.pas b/developer/src/tike/main/UframeTextEditor.pas index b9f5f8ce22..50d0dbbedf 100644 --- a/developer/src/tike/main/UframeTextEditor.pas +++ b/developer/src/tike/main/UframeTextEditor.pas @@ -37,7 +37,6 @@ type TframeTextEditor = class(TTIKEForm, IKMDEditActions, IKMDSearchActions, IKMDTextEditorActions) lstImages: TMenuImgList; dlgFonts: TFontDialog; - dlgPrintSetup: TPrinterSetupDialog; lstImagesDisabled: TImageList; procedure FormCreate(Sender: TObject); procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); @@ -162,9 +161,6 @@ type procedure SyntaxColourChange; - function PrintFile(Header: WideString = ''): Boolean; - function PrintPreview(Header: WideString = ''): Boolean; - procedure LoadFromFile(AFileName: WideString); overload; // I4034 procedure LoadFromStream(AStream: TStream); overload; // I2964 procedure SaveToFile(AFileName: WideString); @@ -658,18 +654,6 @@ begin frmKeymanDeveloper.barStatus.Panels[1].Text := AMode; end; -function TframeTextEditor.PrintFile(Header: WideString): Boolean; -begin - ExecuteCommand('print'); - Result := True; -end; - -function TframeTextEditor.PrintPreview(Header: WideString): Boolean; -begin - // TODO: print preview - Result := True; -end; - procedure TframeTextEditor.SetCharFont(const Value: TFont); begin FCharFont.Assign(Value); diff --git a/developer/src/tike/main/UfrmMain.dfm b/developer/src/tike/main/UfrmMain.dfm index 5f3c017127..862c455d02 100644 --- a/developer/src/tike/main/UfrmMain.dfm +++ b/developer/src/tike/main/UfrmMain.dfm @@ -1,3169 +1,3144 @@ -inherited frmKeymanDeveloper: TfrmKeymanDeveloper - Left = 484 - Top = 327 - Caption = 'Keyman Developer' - ClientHeight = 760 - ClientWidth = 1087 - DoubleBuffered = True - Font.Name = 'MS Sans Serif' - KeyPreview = True - Menu = MainMenu1 - Position = poDefault - WindowState = wsMaximized - OnClose = FormClose - OnCloseQuery = FormCloseQuery - OnDestroy = FormDestroy - ExplicitWidth = 1103 - ExplicitHeight = 819 - PixelsPerInch = 96 - TextHeight = 13 - object barStatus: TStatusBar - Left = 0 - Top = 741 - Width = 1087 - Height = 19 - Constraints.MaxHeight = 19 - Constraints.MinHeight = 19 - Panels = < - item - Alignment = taCenter - Text = 'Line 1, Col 1' - Width = 100 - end - item - Alignment = taCenter - Text = 'Insert' - Width = 120 - end - item - Width = 50 - end> - end - object pages: TCloseButtonPageControl - Left = 0 - Top = 24 - Width = 1087 - Height = 717 - Align = alClient - OwnerDraw = True - TabOrder = 1 - OnChange = pagesChange - OnCloseTab = pagesCloseTab - end - object barTools: TControlBar - Left = 0 - Top = 0 - Width = 1087 - Height = 24 - Align = alTop - AutoDock = False - AutoDrag = False - BevelInner = bvNone - BevelOuter = bvNone - DockSite = False - TabOrder = 2 - object panDebugToolbar: TPanel - Left = 481 - Top = 2 - Width = 512 - Height = 23 - AutoSize = True - BevelOuter = bvNone - TabOrder = 0 - object SpeedButton1: TSpeedButton - Left = 0 - Top = 0 - Width = 82 - Height = 22 - Action = modActionsDebugger.actDebugTestMode - AllowAllUp = True - GroupIndex = 1 - end - object SpeedButton2: TSpeedButton - Left = 83 - Top = 0 - Width = 98 - Height = 22 - Action = modActionsDebugger.actDebugDebuggerMode - AllowAllUp = True - GroupIndex = 2 - end - object cbDebugSystemKeyboard: TComboBox - Left = 367 - Top = 1 - Width = 145 - Height = 21 - Style = csDropDownList - TabOrder = 0 - Visible = False - OnClick = cbDebugSystemKeyboardItemClick - OnDropDown = cbDebugSystemKeyboard_DropDown - end - object ToolBar2: TToolBar - Left = 187 - Top = 1 - Width = 174 - Height = 22 - Align = alNone - ButtonHeight = 23 - Caption = 'ToolBar2' - Images = lstImages - TabOrder = 1 - object ToolButton20: TToolButton - Left = 0 - Top = 0 - Width = 8 - Caption = 'ToolButton20' - ImageIndex = 0 - Style = tbsSeparator - end - object ToolButton21: TToolButton - Left = 8 - Top = 0 - Action = modActionsDebugger.actDebugStopDebugger - end - object ToolButton23: TToolButton - Left = 31 - Top = 0 - Width = 8 - Caption = 'ToolButton23' - ImageIndex = 47 - Style = tbsSeparator - end - object ToolButton22: TToolButton - Left = 39 - Top = 0 - Action = modActionsDebugger.actDebugSingleStepMode - end - object ToolButton24: TToolButton - Left = 62 - Top = 0 - Width = 8 - Caption = 'ToolButton24' - ImageIndex = 47 - Style = tbsSeparator - end - object ToolButton25: TToolButton - Left = 70 - Top = 0 - Action = modActionsDebugger.actDebugStepForward - end - object ToolButton26: TToolButton - Left = 93 - Top = 0 - Action = modActionsDebugger.actDebugRun - end - object ToolButton27: TToolButton - Left = 116 - Top = 0 - Action = modActionsDebugger.actDebugPause - end - object ToolButton28: TToolButton - Left = 139 - Top = 0 - Width = 8 - Caption = 'ToolButton28' - ImageIndex = 58 - Style = tbsSeparator - end - object ToolButton29: TToolButton - Left = 147 - Top = 0 - Action = modActionsDebugger.actDebugSetClearBreakpoint - end - end - end - object panToolbar: TPanel - Left = 11 - Top = 2 - Width = 448 - Height = 23 - AutoSize = True - BevelOuter = bvNone - TabOrder = 1 - object ToolBar1: TToolBar - Left = 0 - Top = 0 - Width = 301 - Height = 23 - Align = alNone - AutoSize = True - ButtonHeight = 23 - Caption = 'ToolBar1' - Images = lstImages - TabOrder = 0 - Wrapable = False - object ToolButton1: TToolButton - Left = 0 - Top = 0 - Action = modActionsMain.actFileNew - end - object ToolButton2: TToolButton - Left = 23 - Top = 0 - Action = modActionsMain.actFileOpen - end - object ToolButton3: TToolButton - Left = 46 - Top = 0 - Action = modActionsMain.actFileSave - end - object ToolButton4: TToolButton - Left = 69 - Top = 0 - Width = 8 - Caption = 'ToolButton4' - ImageIndex = 3 - Style = tbsSeparator - end - object ToolButton5: TToolButton - Left = 77 - Top = 0 - Action = modActionsMain.actFilePrint - end - object ToolButton6: TToolButton - Left = 100 - Top = 0 - Width = 8 - Caption = 'ToolButton6' - ImageIndex = 4 - Style = tbsSeparator - end - object ToolButton7: TToolButton - Left = 108 - Top = 0 - Action = modActionsMain.actEditCut - end - object ToolButton8: TToolButton - Left = 131 - Top = 0 - Action = modActionsMain.actEditCopy - end - object ToolButton9: TToolButton - Left = 154 - Top = 0 - Action = modActionsMain.actEditPaste - end - object ToolButton10: TToolButton - Left = 177 - Top = 0 - Width = 8 - Caption = 'ToolButton10' - ImageIndex = 7 - Style = tbsSeparator - end - object ToolButton11: TToolButton - Left = 185 - Top = 0 - Action = modActionsMain.actEditUndo - end - object ToolButton12: TToolButton - Left = 208 - Top = 0 - Action = modActionsMain.actEditRedo - end - object ToolButton19: TToolButton - Left = 231 - Top = 0 - Width = 8 - Caption = 'ToolButton19' - ImageIndex = 57 - Style = tbsSeparator - end - object ToolButton14: TToolButton - Left = 239 - Top = 0 - Action = modActionsMain.actViewExpandEditor - end - object ToolButton15: TToolButton - Left = 262 - Top = 0 - Width = 8 - Caption = 'ToolButton15' - ImageIndex = 56 - Style = tbsSeparator - end - object ToolButton16: TToolButton - Left = 270 - Top = 0 - Action = modActionsKeyboardEditor.actKeyboardCompile - end - object ToolButton13: TToolButton - Left = 293 - Top = 0 - Width = 8 - Caption = 'ToolButton13' - ImageIndex = 57 - Style = tbsSeparator - end - end - object cbTextFileFormat: TComboBox - Left = 303 - Top = 1 - Width = 145 - Height = 21 - Style = csDropDownList - TabOrder = 1 - OnClick = cbTextFileFormatItemClick - Items.Strings = ( - 'ANSI' - 'UTF-8' - 'UTF-16') - end - end - end - object ilPages: TImageList - Left = 304 - Top = 236 - Bitmap = { - 494C01010A000E00040010001000FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600 - 0000000000003600000028000000400000003000000001002000000000000030 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 00000000000000000000000000000000000000000000FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00000000000000000000000000000000000000 - 0000B5CEC600C6DED600C6DED600C6DED600C6DED600C6DED600C6E7DE000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000B5CEC600BDD6C600C6DECE00CEDED600CEDED600C6DECE00BDD6C600BDD6 - C600000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000000000000000000000000000FFFFFF0084B58400107310001873 - 18001873180018731800187B1800187B1800107B1000107B1000087B0800087B - 0800007B0000007300007BB57B00FFFFFF00000000000000000000000000BDD6 - CE00CEDECE00DEE7E700E7EFEF00EFF7F700EFF7EF00E7EFE700CEDED600B5CE - C60000000000000000000000000000000000000000000000000000000000BDCE - C600D6E7DE00EFF7EF00F7F7F700F7F7F700EFF7F700EFF7F700E7EFEF00D6DE - D600BDCEC6000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000000000000000000000000000FFFFFF0010841000218C21002994 - 2900319431003194310029942900299C2900219C210018A5180018A5180010A5 - 100008A5080000940000006B0000FFFFFF000000000000000000BDD6C600DEE7 - E700F7FFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00E7EF - EF00C6D6CE000000000000000000000000000000000000000000BDCEC600E7EF - E700F7FFFF00F7FFFF00F7FFFF00F7FFFF00F7FFFF00F7FFF700F7F7F700EFF7 - F700DEE7DE00BDD6C60000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000000000000000000000000000FFFFFF00188C180029942900399C - 3900399C3900399C3900FFFFFF00A5D6A5004AA54A004AA54A004AA54A0029A5 - 290018A51800009C0000007B0000FFFFFF0000000000BDD6C600DEE7E700FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00F7F7F700C6D6CE00000000000000000000000000BDCEC600E7EFE700FFFF - FF00FFFFFF00FFFFFF00FFFFFF0018634A00FFFFFF00FFFFFF00FFFFFF00F7FF - F700EFF7F700DEE7DE00BDCEC600000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000000000000000000000000000FFFFFF0021942100399C390042A5 - 420042A5420042A54200FFFFFF00FFFFFF00A5D6A5004AA54A004AA54A0039A5 - 390021A5210008A50800087B0800FFFFFF00C6DED600D6DEDE00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00EFF7EF00BDCEC60000000000BDD6CE00D6E7DE00FFFFFF00FFFF - FF00FFFFFF00FFFFFF0018634A0018634A0018634A00FFFFFF00FFFFFF00FFFF - FF00F7FFF700EFF7F700CEDED600BDD6CE000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000000000000000000000000000FFFFFF0029942900429C42004AA5 - 4A0052A552004AA54A00FFFFFF00FFFFFF00FFFFFF00A5D6A5004AA54A0039A5 - 390021A5210010A5100008840800FFFFFF00BDD6CE00EFF7EF00FFFFFF00FFFF - FF0018634A0018634A00FFFFFF00FFFFFF00FFFFFF0018634A0018634A00FFFF - FF00FFFFFF00FFFFFF00D6DED600BDDECE00BDD6C600EFF7F700FFFFFF00FFFF - FF00FFFFFF0018634A0018634A00FFFFFF0018634A0018634A00FFFFFF00FFFF - FF00FFFFFF00F7FFF700DEEFE700BDD6CE000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000000000000000000000000000FFFFFF00319C31004AA54A0052A5 - 52004AA54A004AA54A00FFFFFF00FFFFFF00FFFFFF00FFFFFF00A5D6A50039A5 - 390021A5210018A5180010841000FFFFFF00C6DECE00FFFFFF00FFFFFF00FFFF - FF00FFFFFF0018634A0018634A00FFFFFF0018634A0018634A00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00E7EFEF00BDD6CE00C6D6CE00FFFFFF00FFFFFF00FFFF - FF0018634A0018634A00FFFFFF00FFFFFF00FFFFFF0018634A0018634A00FFFF - FF00FFFFFF00F7FFFF00E7EFEF00BDD6CE000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000000000000000000000000000FFFFFF00429C420052A552004AA5 - 4A004AA54A004AA54A00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00A5D6 - A500219C2100219C210018841800FFFFFF00CEDED600FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF0018634A0018634A0018634A00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00EFF7EF00BDD6CE00CEDED600FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF0018634A00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00EFF7EF00BDD6CE000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000000000000000000000000000FFFFFF0042A5420052A5520052A5 - 52004AA54A004AA54A00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00A5D6 - A500219C2100219C2100217B2100FFFFFF00CEDED600FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF0018634A00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00EFF7EF00BDD6CE00CEDED600FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF0018634A0018634A0018634A00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00EFF7EF00BDD6CE000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000000000000000000000000000FFFFFF0052A552005AAD5A005AAD - 5A0052A552004AA54A00FFFFFF00FFFFFF00FFFFFF00FFFFFF00A5D6A5003194 - 31002994290029942900217B2100FFFFFF00C6D6CE00FFFFFF00FFFFFF00FFFF - FF0018634A0018634A00FFFFFF00FFFFFF00FFFFFF0018634A0018634A00FFFF - FF00FFFFFF00F7FFFF00E7EFEF00BDD6CE00C6DECE00FFFFFF00FFFFFF00FFFF - FF00FFFFFF0018634A0018634A00FFFFFF0018634A0018634A00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00E7EFEF00BDD6CE000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000000000000000000000000000FFFFFF0052A552006BB56B006BB5 - 6B005AAD5A0052AD5200FFFFFF00FFFFFF00FFFFFF00A5D6A500399C39003194 - 31002994290029942900217B2100FFFFFF00BDD6C600EFF7F700FFFFFF00FFFF - FF00FFFFFF0018634A0018634A00FFFFFF0018634A0018634A00FFFFFF00FFFF - FF00FFFFFF00F7FFF700DEEFE700BDD6CE00BDD6CE00EFF7EF00FFFFFF00FFFF - FF0018634A0018634A00FFFFFF00FFFFFF00FFFFFF0018634A0018634A00FFFF - FF00FFFFFF00FFFFFF00D6DED600BDDECE000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000000000000000000000000000FFFFFF005AAD5A007BBD7B0073BD - 730063AD63005AAD5A00FFFFFF00FFFFFF00A5D6A500429C4200429C4200399C - 39003194310031943100217B2100FFFFFF00BDD6CE00D6E7DE00FFFFFF00FFFF - FF00FFFFFF00FFFFFF0018634A0018634A0018634A00FFFFFF00FFFFFF00FFFF - FF00F7FFF700EFF7F700CEDED600BDD6CE00C6DED600D6DEDE00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00EFF7EF00BDCEC600000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000000000000000000000000000FFFFFF006BB56B008CC68C007BBD - 7B006BB56B0063B56300FFFFFF00A5D6A5005AAD5A0052A552004AA54A0042A5 - 4200399C390031943100217B2100FFFFFF0000000000BDCEC600E7EFE700FFFF - FF00FFFFFF00FFFFFF00FFFFFF0018634A00FFFFFF00FFFFFF00FFFFFF00F7FF - F700EFF7F700DEE7DE00BDCEC6000000000000000000BDD6C600DEE7E700FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00F7F7F700C6D6CE0000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000000000000000000000000000FFFFFF0073BD73009CCE9C008CC6 - 8C007BBD7B0073BD73006BB56B0063B5630063AD63005AAD5A0052AD52004AA5 - 4A0042A542003194310018731800FFFFFF000000000000000000BDCEC600E7EF - E700F7FFFF00F7FFFF00F7FFFF00F7FFFF00F7FFFF00F7FFF700F7F7F700EFF7 - F700DEE7DE00BDD6C60000000000000000000000000000000000BDD6C600DEE7 - E700F7FFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00E7EF - EF00C6D6CE000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000000000000000000000000000FFFFFF00B5DEB50073BD730063B5 - 63005AAD5A0052A5520052A552004AA54A004AA54A0042A54200429C4200399C - 390031943100218C21008CBD8C00FFFFFF00000000000000000000000000BDCE - C600D6E7DE00EFF7EF00F7F7F700F7F7F700EFF7F700EFF7F700E7EFEF00D6DE - D600BDCEC600000000000000000000000000000000000000000000000000BDD6 - CE00CEDECE00DEE7E700E7EFEF00EFF7F700EFF7EF00E7EFE700CEDED600B5CE - C600000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 00000000000000000000000000000000000000000000FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00000000000000000000000000000000000000 - 0000B5CEC600BDD6C600C6DECE00CEDED600CEDED600C6DECE00BDD6C600BDD6 - C600000000000000000000000000000000000000000000000000000000000000 - 0000B5CEC600C6DED600C6DED600C6DED600C6DED600C6DED600C6E7DE000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 00000000000000000000000000000000000000000000FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF000000000000000000FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF000000000000000000FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00000000000000000000000000000000000000 - 0000BDBDBD000000840000007300100000006363630000000000000000000000 - 000000000000000000000000000000000000FFFFFF0084B58400107310001873 - 18001873180018731800187B1800187B1800107B1000107B1000087B0800087B - 0800007B0000007300007BB57B00FFFFFF00FFFFFF0052ADFF0018529400185A - 9C00185A9C00185A9C00185AA500185AA500185A9C00185A9C00185294001852 - 940018528C00184A84004AADFF00FFFFFF00FFFFFF0084B58400107310001873 - 18001873180018731800187B1800187B1800107B1000107B1000087B0800087B - 0800007B0000007300007BB57B00FFFFFF000000000000000000BDBDBD003131 - 31000000AD000000FF000000DE00000042005252520000000000000000000000 - 000000000000000000000000000000000000FFFFFF0010841000218C21002994 - 2900319431003194310029942900299C2900219C210018A5180018A5180010A5 - 100008A5080000940000006B0000FFFFFF00FFFFFF00185AA500186BBD001873 - CE001873CE001873CE001873CE001873CE001873CE001873CE001873CE00186B - C600186BBD00185AA500104A7B00FFFFFF00FFFFFF0010841000218C21002994 - 2900319431003194310029942900299C2900219C210018A5180018A5180010A5 - 100008A5080000940000006B0000FFFFFF000000000000000000737373000000 - 42000000FF000000FF000000840000319C002121210000000000000000000000 - 000000000000000000000000000000000000FFFFFF00188C180029942900399C - 3900399C3900399C390039A53900A5D6A500FFFFFF0021AD210018AD180010B5 - 100008AD0800009C0000007B0000FFFFFF00FFFFFF001863AD001873CE00187B - DE00187BDE00187BE7001884E700188CF700188CF700188CF700188CF700187B - DE00186BC6001863AD0018528C00FFFFFF00FFFFFF00188C180029942900399C - 3900399C3900399C390039A539004AA54A00A5D6A500FFFFFF004AA54A0031A5 - 310018A51800009C0000007B0000FFFFFF00000000008C8C8C00BDBDBD000000 - 4200000084000000EF000000FF000000CE000000310073737300000000000000 - 000000000000000000000000000000000000FFFFFF0021942100399C390042A5 - 42004AA54A0042A5420042A54200FFFFFF00FFFFFF00FFFFFF0021B5210018B5 - 180010AD100008A50800087B0800FFFFFF00FFFFFF00186BC600187BDE001884 - EF00FFFFFF0084C6FF00188CF700188CF700188CF700188CF70084C6FF00FFFF - FF001873CE00186BBD0018529400FFFFFF00FFFFFF0021942100399C390042A5 - 420042A5420042A542004AA54A00A5D6A500FFFFFF00FFFFFF004AA54A0039A5 - 390021A5210008A50800087B0800FFFFFF000000000000000000001000000000 - AD000000FF000000FF000000FF000000DE001010100000002100525252007373 - 730031009C0000313100A5A5A50000000000FFFFFF0029942900429C42004AA5 - 4A0052A552004AA54A0042A5420042AD4200FFFFFF00FFFFFF00FFFFFF0018B5 - 180010AD100010A5100008840800FFFFFF00FFFFFF001873CE001884E700188C - F700188CFF00FFFFFF0084C6FF00188CF700188CF70084C6FF00FFFFFF001884 - E7001873D600186BC600185A9C00FFFFFF00FFFFFF0029942900429C42004AA5 - 4A0052A552004AA54A00A5D6A500FFFFFF00FFFFFF00FFFFFF004AA54A0039A5 - 390021A5210010A5100008840800FFFFFF0000000000BDBDBD00100000000000 - 84000000FF000000CE000000EF0000008400000084000000FF000000BD000000 - 840000006300737373000021000063636300FFFFFF00319C31004AA54A0052A5 - 520052A552004AA54A004AA54A0042A5420039AD3900FFFFFF00FFFFFF00FFFF - FF0018AD180018A5180010841000FFFFFF00FFFFFF00187BDE00188CF700188C - FF00188CF700188CF700FFFFFF0084C6FF0084C6FF00FFFFFF00188CF7001884 - E7001873D6001873CE00185AA500FFFFFF00FFFFFF00319C31004AA54A0052A5 - 52004AA54A00A5D6A500FFFFFF00FFFFFF00FFFFFF00FFFFFF004AA54A0039A5 - 390021A5210018A5180010841000FFFFFF000000000021212100000021000000 - AD000000FF0000004200000084000000FF000000FF0000007300000042000000 - 420073737300313163000000AD0000006300FFFFFF00429C420052A55200FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00219C210018841800FFFFFF00FFFFFF001884E700188CFF00188C - F700188CF700188CF700188CF700FFFFFF0084C6FF00188CF7001884EF00187B - DE001873CE001873CE001863AD00FFFFFF00FFFFFF00429C420052A552004AA5 - 4A00A5D6A500FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0042A5420031A5 - 3100219C2100219C210018841800FFFFFF00000000008C8C8C0000009C000000 - FF000000EF00000073000000EF000000FF000000EF0000003100100000005252 - 52000000EF000000FF000000DE0031316300FFFFFF0042A542005AAD5A00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00219C2100217B2100FFFFFF00FFFFFF001884EF00188CFF00188C - FF00188CF700188CF70084C6FF00FFFFFF00FFFFFF0084C6FF001884E7001873 - D6001873CE001873CE001863AD00FFFFFF00FFFFFF0042A5420052A5520052A5 - 5200A5D6A500FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00399C3900299C - 2900219C2100219C2100217B2100FFFFFF000000000010000000000042000031 - CE000000FF0000009C000000FF000000FF000000EF00000073000000AD000000 - CE000000FF000000FF000000AD0021212100FFFFFF0052A5520063AD630063AD - 63005AAD5A0052A552004AA54A00429C4200399C3900FFFFFF00FFFFFF00FFFF - FF00299C290029942900217B2100FFFFFF00FFFFFF00188CFF002194FF002194 - FF00188CFF0084C6FF00FFFFFF001884F7001884EF00FFFFFF0084C6FF001873 - CE001873CE001873CE001863AD00FFFFFF00FFFFFF0052A552005AAD5A005AAD - 5A0052A55200A5D6A500FFFFFF00FFFFFF00FFFFFF00FFFFFF00399C39003194 - 31002994290029942900217B2100FFFFFF00000000008C8C8C00000000000000 - AD000000FF000000EF0000007300000052000031CE000000AD000000EF000000 - EF000000BD0000006300BDBDBD0000000000FFFFFF0052A552006BB56B006BB5 - 6B005AAD5A0052A552004AA54A00429C4200FFFFFF00FFFFFF00FFFFFF002994 - 29002994290029942900217B2100FFFFFF00FFFFFF00188CFF0039A5FF0039A5 - FF0084C6FF00FFFFFF00188CFF00188CFF001884EF001884E700FFFFFF0084C6 - FF001873CE001873CE001863AD00FFFFFF00FFFFFF0052A552006BB56B006BB5 - 6B005AAD5A0052AD5200A5D6A500FFFFFF00FFFFFF00FFFFFF00399C39003194 - 31002994290029942900217B2100FFFFFF000000000000000000000000000000 - 52000000FF000000BD000031CE000000AD00000073003100CE00525252002121 - 21000000AD00000000000000000000000000FFFFFF005AAD5A007BBD7B0073BD - 730063AD63005AAD5A0052A55200FFFFFF00FFFFFF00FFFFFF00319C3100319C - 31003194310031943100217B2100FFFFFF00FFFFFF002194FF0052ADFF004AAD - FF00FFFFFF002194FF002194FF001894FF00188CF7001884EF001884E700FFFF - FF001873CE001873CE001863AD00FFFFFF00FFFFFF005AAD5A007BBD7B0073BD - 730063AD63005AAD5A005AAD5A00A5D6A500FFFFFF00FFFFFF00429C4200399C - 39003194310031943100217B2100FFFFFF0000000000A5A5A500000000000000 - 52000000AD0000005200000073000031FF000000730000005200212121000000 - 100000000000000000000000000000000000FFFFFF006BB56B008CC68C007BBD - 7B006BB56B0063B5630063AD6300B5DEB500FFFFFF004AA54A004AA54A0042A5 - 4200399C390031943100217B2100FFFFFF00FFFFFF0039A5FF006BBDFF0052AD - FF0039A5FF00319CFF00299CFF00299CFF002194FF00188CFF001884F7001884 - EF00187BDE001873CE001863AD00FFFFFF00FFFFFF006BB56B008CC68C007BBD - 7B006BB56B0063B5630063AD630063AD6300A5D6A500FFFFFF004AA54A0042A5 - 4200399C390031943100217B2100FFFFFF000000000000000000000000003131 - 3100000042000000CE000000AD000000DE00000063000000420000004200BDBD - BD0000000000000000000000000000000000FFFFFF0073BD73009CCE9C008CC6 - 8C007BBD7B0073BD73006BB56B0063B5630063AD63005AAD5A0052AD52004AA5 - 4A0042A542003194310018731800FFFFFF00FFFFFF004AADFF0084C6FF006BBD - FF0052ADFF004AADFF0039A5FF00319CFF00299CFF002194FF001894FF00188C - F7001884EF001873CE00185A9C00FFFFFF00FFFFFF0073BD73009CCE9C008CC6 - 8C007BBD7B0073BD73006BB56B0063B5630063AD63005AAD5A0052AD52004AA5 - 4A0042A542003194310018731800FFFFFF000000000000000000000000000000 - 00008C8C8C002121210000004200313131008C8C8C00BDC6C600000000000000 - 000000000000000000000000000000000000FFFFFF00B5DEB50073BD730063B5 - 63005AAD5A0052A5520052A552004AA54A004AA54A0042A54200429C4200399C - 390031943100218C21008CBD8C00FFFFFF00FFFFFF00ADDEFF004AADFF00319C - FF002194FF00188CFF00188CFF00188CF700188CF7001884EF001884E700187B - DE001873CE00186BBD0063B5FF00FFFFFF00FFFFFF00B5DEB50073BD730063B5 - 63005AAD5A0052A5520052A552004AA54A004AA54A0042A54200429C4200399C - 390031943100218C21008CBD8C00FFFFFF000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 00000000000000000000000000000000000000000000FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF000000000000000000FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF000000000000000000FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF0000000000424D3E000000000000003E000000 - 2800000040000000300000000100010000000000800100000000000000000000 - 000000000000000000000000FFFFFF00FFFFFFFF00000000FFFFFFFF00000000 - FFFFFFFF00000000F00FF03F00000000F7EFF7BF00000000F7EFF7BF00000000 - F7EFF78F00000000F7EFF02F00000000F7EFF02F00000000F00FFDEF00000000 - F00FFC0F00000000FFFFFC0F00000000FFFFFFFF00000000FFFFFFFF00000000 - FFFFFFFF00000000FFFFFFFF000000008001F01FF00FFFFF0000E00FE007FFFF - 0000C007C003FFFF000080038001FFFF000000010000F81F000000000000F81F - 000000000000FFFF000000000000FFFF000000000000FFFF000000000000FFFF - 000000000000FFFF000000000001FFFF000080018003FFFF0000C003C007FFFF - 0000E007E00FFFFF8001F00FF01FFFFFFFFF800180018001F07F000000000000 - C07F000000000000C07F000000000000003F0000000000008001000000000000 - 0000000000000000800000000000000000000000000000008000000000000000 - 00010000000000008007000000000000800F000000000000E00F000000000000 - F03F000000000000FFFF80018001800100000000000000000000000000000000 - 000000000000} - end - object lstImages: TMenuImgList - BkColor = clSilver - DrawingStyle = dsTransparent - Left = 236 - Top = 236 - Bitmap = { - 494C01013B004000040010001000C0C0C000FF10FFFFFFFFFFFFFFFF424D3600 - 000000000000360000002800000040000000F0000000010020000000000000F0 - 000000000000000000000000000000000000C0C0C000C0C0C000C0C0C000C0C0 - C000C0C0C000C6C6C600F7730000CE5A0000CE5A0000F7730000C6C6C600C0C0 - C000C0C0C000C0C0C000C0C0C000C0C0C000C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C60084848400C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C6000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000000000000000000000000000C0C0C000C0C0C000C0C0C000C6C6 - C600CE5A0000F7730000F7C69400F7C69400F7C69400F7A55A00F7730000CE5A - 0000C6C6C600C0C0C000C0C0C000C0C0C000C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C60063636300C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600BDC6F700637B - D6000042C6000042C6000042C600637BD600BDC6F700C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C6000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000000000000000000000000000C0C0C000C0C0C000C6C6C600CE5A - 0000F7A55A00FFE7CE00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFE7CE00F7A5 - 5A00CE5A0000C6C6C600C0C0C000C0C0C000C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C60042424200C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600BDC6F700637BD6000042C600ADBD - E700A5B5DE009CADD6009CA5CE00949CC6000042C600637BD600BDC6F700C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C6000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000000000000000000000000000C0C0C000C6C6C600CE5A0000F7A5 - 5A00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00F7A55A00CE5A0000C6C6C600C0C0C000C6C6C600C6C6C60084848400C6C6 - C600C6C6C600C6C6C60063636300636363006363630042424200C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600637BD600BDCEFF00B5C6F700B5BD - EF00A5B5DE00A5ADD6009CA5CE00949CC600949CC600949CC600637BD600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C6000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000000000000000000000000000C0C0C000CE5A0000F7A55A00FFFF - FF00FFFFFF00F7A55A00F7A55A00F7730000F7730000F7A55A00F7A55A00FFFF - FF00FFFFFF00F7A55A00CE5A0000C0C0C000C6C6C600C6C6C600C6C6C6006363 - 6300C6C6C60042424200EFAD6B00E7A56B00E79C6B00846B520042424200C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C6000042C600C6D6FF00BDCEFF00B5C6 - F700ADBDEF00A5B5DE009CADD6009CA5CE00949CC600949CC6000042C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C6000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000000000000000000000000000C6C6C600F7730000FFE7CE00FFFF - FF00FFFFFF00FFFFFF00F7A55A00F7730000F7730000F7A55A00FFFFFF00FFFF - FF00FFFFFF00FFE7CE00F7730000C6C6C600C6C6C600C6C6C600C6C6C6004242 - 420042424200F7B57300EFAD6B00EFAD6B00A57B5200E79C6B0063636300C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C6000042C600CEDEFF00C6D6FF00BDCE - FF00B5C6F700ADBDE700A5B5DE009CADD60094A5CE0094A5CE000042C6004242 - 42004242420084848400C6C6C600C6C6C6000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000000000000000000000000000F7730000F7A55A00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00F7A55A00F7730000F7730000F7A55A00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00F7A55A00F7730000C6C6C600C6C6C600C6C6C6006363 - 6300FFBD730000630000006300000063000000630000E7A56B00006300000063 - 00000063000000630000C6C6C600C6C6C600BDC6F7000042C600CEDEFF00C6D6 - FF00BDCEFF00B5C6F700ADBDE700A5ADDE009CADD6000042C60084848400B5B5 - B500B5B5B500ADADAD0084848400848484000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000000000000000000000000000CE5A0000F7C69400FFFFFF00FFFF - FF00FFFFFF00FFFFFF00F7A55A00F7730000F7730000F7A55A00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00F7C69400CE5A0000C6C6C60063636300424242006363 - 6300FFC67B0000630000008400000084000000630000EFAD6B00006300000084 - 00000084000000630000C6C6C600C6C6C600C6C6C600BDC6F7000042C600CEDE - FF00637BD6000042C600637BD600ADB5E7000042C60042424200BDBDBD00BDBD - BD00B5B5B500ADADAD00ADADAD00424242000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000000000000000000000000000CE5A0000F7C69400FFFFFF00FFFF - FF00FFFFFF00F7A55A00F7A55A00F7730000F7730000F7A55A00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00F7C69400CE5A000084848400C6C6C600C6C6C6006363 - 6300FFC67B000063000000840000008400000063000042424200006300000084 - 00000084000000630000C6C6C600C6C6C600C6C6C600C6C6C600BDC6F700315A - C600CEDEFF00C6D6FF00BDC6F700315AC600BDC6F70042424200C6C6C600BDBD - BD00BDBDBD00B5B5B500ADADAD00424242000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000000000000000000000000000F7730000F7A55A00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00F7A55A00F7730000C6C6C600C6C6C60042424200D694 - 4A008484840000630000008400000084000000630000C6C6C600006300000084 - 00000084000000630000C6C6C600C6C6C600C6C6C600C6C6C600637BD600D6E7 - FF00D6DEFF00CED6FF00BDCEFF00B5C6F700637BD600C6C6C60084848400C6C6 - C600BDBDBD00BDBDBD0084848400C6C6C6000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000000000000000000000000000C6C6C600F7730000FFE7CE00FFFF - FF00FFFFFF00FFFFFF00F7A55A00F7730000F7730000F7A55A00FFFFFF00FFFF - FF00FFFFFF00FFE7CE00F7730000C6C6C600848484006363630063636300D6AD - 6B00D6944A000063000000840000008400000063000063636300006300000084 - 00000084000000630000C6C6C600C6C6C600C6C6C600C6C6C6000042C600DEEF - FF00D6E7FF00CEDEFF00C6D6FF00BDCEFF000042C600C6C6C600C6C6C6006363 - 63004242420063636300C6C6C600C6C6C6000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000000000000000000000000000C0C0C000CE5A0000F7A55A00FFFF - FF00FFFFFF00FFFFFF00F7A55A00F7730000F7730000F7A55A00FFFFFF00FFFF - FF00FFFFFF00F7A55A00CE5A0000C0C0C000C6C6C600C6C6C600C6C6C6006363 - 63004242420000630000008400000084000000630000C6C6C600006300000084 - 00000084000000630000C6C6C600C6C6C600C6C6C600C6C6C600637BD600DEEF - FF00D6E7FF00CEDEFF00CED6FF00C6CEFF00637BD600C6C6C60063636300CECE - CE00CECECE00C6C6C60063636300C6C6C6000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000000000000000000000000000C0C0C000C6C6C600CE5A0000F7A5 - 5A00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00F7A55A00CE5A0000C6C6C600C0C0C000C6C6C600C6C6C600C6C6C6006363 - 6300C6C6C60000630000008400000084000000630000C6C6C600006300000084 - 00000084000000630000C6C6C600C6C6C600C6C6C600C6C6C600BDC6F700315A - C600D6E7FF00D6DEFF00CEDEFF00315AC600BDC6F700C6C6C60042424200D6D6 - D600CECECE00C6C6C60042424200C6C6C6000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000000000000000000000000000C0C0C000C0C0C000C6C6C600CE5A - 0000F7A55A00FFE7CE00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFE7CE00F7A5 - 5A00CE5A0000C6C6C600C0C0C000C0C0C000C6C6C600C6C6C600C6C6C6008484 - 8400C6C6C60000630000008400000084000000630000C6C6C600006300000084 - 00000084000000630000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600BDC6 - F700637BD6000042C600637BD600BDC6F700C6C6C600C6C6C60084848400D6D6 - D600CECECE00CECECE0084848400C6C6C6000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000000000000000000000000000C0C0C000C0C0C000C0C0C000C6C6 - C600CE5A0000F7730000F7A55A00F7C69400F7C69400F7A55A00F7730000CE5A - 0000C6C6C600C0C0C000C0C0C000C0C0C000C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C60000630000008400000084000000630000C6C6C600006300000084 - 00000084000000630000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6008484 - 84004242420084848400C6C6C600C6C6C6000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000000000000000000000000000C0C0C000C0C0C000C0C0C000C0C0 - C000C0C0C000C6C6C600F7730000CE5A0000CE5A0000F7730000C6C6C600C0C0 - C000C0C0C000C0C0C000C0C0C000C0C0C000C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C60000630000006300000063000000630000C6C6C600006300000063 - 00000063000000630000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C6000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000000000000000000000000000C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C60084848400C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C60084848400C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C60084848400C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C60063636300C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C60063636300C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C60063636300C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C6000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C60042424200C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C60042424200C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C60042424200C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C60000000000FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00DEEFEF0000000000C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C60084848400C6C6 - C600C6C6C600C6C6C60063636300636363006363630042424200C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C60084848400C6C6 - C600C6C6C600C6C6C60063636300636363006363630042424200C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C60084848400C6C6 - C600C6C6C600C6C6C60063636300636363006363630042424200C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C60000000000FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00E7EFEF0000000000C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6006363 - 6300C6C6C60042424200EFAD6B00E7A56B00E79C6B00846B520042424200C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6006363 - 6300C6C6C60042424200EFAD6B00E7A56B00E79C6B00846B520042424200C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6006363 - 6300C6C6C60042424200EFAD6B00E7A56B00E79C6B00846B520042424200C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C60000000000FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00E7EFEF00000000009CA59C009CA5 - 9C009CA59C009CA59C009CA59C009CA59C00C6C6C600C6C6C600C6C6C6004242 - 420042424200F7B57300EFAD6B00EFAD6B00A57B5200E79C6B0063636300C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6004242 - 420042424200F7B57300EFAD6B00EFAD6B00A57B5200E79C6B0063636300C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6004242 - 420042424200F7B57300EFAD6B00EFAD6B00A57B5200E79C6B0063636300C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C60000000000FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00E7EFEF0000000000E7EFEF00FFFF - FF00FFFFFF00E7EFEF00FFFFFF009CA59C00C6C6C600C6C6C600C6C6C6006363 - 6300FFBD7300F7B57300F7B57300A57B5200EFAD6B000000FF0063636300C6C6 - C600C6C6C60084848400C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6006363 - 6300FFBD7300F7B57300F7B57300A57B5200EFAD6B00E7A56B0063636300C6C6 - C600C6C6C60084848400C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6006363 - 6300FFBD7300F7B57300F7B57300A57B5200EFAD6B00E7A56B0063636300C6C6 - C600C6C6C60084848400C6C6C600C6C6C60000000000FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00E7EFEF0000000000E7EFEF00FFFF - FF00FFFFFF00E7EFEF00FFFFFF009CA59C00C6C6C60063636300424242006363 - 6300FFC67B00FFBD7300BD946300F7B57300EFAD6B008484FF008484FF000000 - FF0063636300C6C6C600C6C6C600C6C6C600C6C6C60063636300424242006363 - 6300FFC67B00FFBD7300BD946300F7B57300EFAD6B00EFAD6B00636363004242 - 420063636300C6C6C600C6C6C600C6C6C600C6C6C60063636300424242006363 - 6300FFC67B00BD8C94000000FF00CE948C00EFAD6B00EFAD6B0052527B000000 - FF004A4A8400C6C6C600C6C6C600C6C6C6000000000084848400848484008484 - 8400848484008484840084848400848484008484840000000000E7EFEF00FFFF - FF00FFFFFF00E7EFEF00FFFFFF009CA59C0084848400C6C6C600C6C6C6006363 - 6300FFC67B00FFC67B00FFBD7300F7B573000000FF0042424200C6C6C600C6C6 - C600C6C6FF000000FF00C6C6C600C6C6C60084848400C6C6C600C6C6C6006363 - 6300FFC67B00FFC67B00FFBD73005A42CE00F7B57300424242000000FF00C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C60084848400C6C6C600C6C6C6006363 - 6300FFC67B00FFC67B001810EF00946BAD00F7B57300424242007373DE001818 - FF00C6C6C600C6C6C600C6C6C600C6C6C6008484840000000000000000000000 - 0000000000000000000000000000000000000000000084848400E7EFEF00FFFF - FF00FFFFFF00E7EFEF00FFFFFF009CA59C00C6C6C600C6C6C60042424200D694 - 4A0084848400FFC67B00FFC67B00FFBD73008484FF00C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6FF000000FF00C6C6C600C6C6C60042424200D694 - 4A0084848400FFC67B00FFC67B00FFBD730042424200C6C6C6000000FF00C6C6 - C600C6C6C600525AFF00B5BDF700C6C6C600C6C6C600C6C6C60042424200D694 - 4A0084848400FFC67B00634AC6000000FF000000FF000000FF000000FF005A63 - FF00C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6009CA59C00E7EF - EF00E7EFEF00E7EFEF00E7EFEF00E7EFEF00E7EFEF00E7EFEF00E7EFEF00E7EF - EF00E7EFEF00E7EFEF00FFFFFF009CA59C00848484006363630063636300D6AD - 6B00D6944A0063636300636363000000FF004242420063636300C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6FF00C6C6C600848484006363630063636300D6AD - 6B00D6944A006363630039399C000000F7000000FF002121C6000000FF00C6C6 - C600C6C6C600737BF7003131FF00C6C6C600848484006363630063636300D6AD - 6B00D6944A006363630042428C000000F70042424200636363000808FF00A5AD - F700C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6009CA59C00E7EF - EF00E7EFEF00E7EFEF00E7EFEF00E7EFEF00E7EFEF00E7EFEF00E7EFEF00E7EF - EF00E7EFEF00E7EFEF00FFFFFF009CA59C00C6C6C600C6C6C600C6C6C6006363 - 630042424200C6C6C60042424200C6C6FF00C6C6C600C6C6C60084848400C6C6 - C600C6C6C600C6C6C6000000FF00C6C6C600C6C6C600C6C6C600C6C6C6006363 - 630042424200C6C6C6000000F7009C9CCE00D6E7EF00737BF7000000FF00C6C6 - C600C6C6C600DEEFEF000000FF00C6C6C600C6C6C600C6C6C600C6C6C6006363 - 630042424200C6C6C600393942000808FF00B5C6F700B5BDF7000808F700DEEF - EF00C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6009CA59C00E7EF - EF00E7EFEF00E7EFEF00E7EFEF00E7EFEF00E7EFEF00E7EFEF00E7EFEF00E7EF - EF00E7EFEF00E7EFEF00FFFFFF009CA59C00C6C6C600C6C6C600C6C6C6006363 - 6300C6C6C600C6C6C6000000FF00C6C6FF00C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6FF00C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6006363 - 6300C6C6C600C6C6C6000000F700B5BDF700D6E7EF00C6C6C6000000FF00ADBD - F700C6C6C6008494F7002121FF00C6C6C600C6C6C600C6C6C600C6C6C6006363 - 6300DEEFEF00DEEFEF00636363005252FF007B84F700737BF7005252FF00C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6009CA59C00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00E7EFEF00FFFFFF009CA59C00C6C6C600C6C6C600C6C6C6008484 - 8400C6C6C60084848400C6C6C600C6C6C6000000FF00C6C6FF00C6C6C600C6C6 - C600C6C6C6000000FF00C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6008484 - 8400C6C6C600848484009CA5F7001818FF000000FF00C6C6C6000000FF002121 - FF000000FF002129FF00ADB5F700C6C6C600C6C6C600C6C6C600424AFF008484 - 8400424AFF0084848400C6C6C6009CA5F7003942FF003942FF009CA5F700C6C6 - C600C6C6C600424AFF00C6C6C600424AFF00C6C6C600C6C6C6009CA59C008484 - 8400848484008484840084848400848484008484840084848400848484008484 - 84008484840084848400848484009CA59C00C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6000000FF00C6C6 - FF00C6C6FF00C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6000000FF00C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6003139FF00C6C6 - C6003139FF00C6C6C600C6C6C600D6E7EF001010FF001010FF00D6E7EF00C6C6 - C600C6C6C6003139FF00C6C6C6003139FF00C6C6C600C6C6C600C6C6C6009CA5 - 9C009CA59C009CA59C009CA59C009CA59C009CA59C009CA59C009CA59C009CA5 - 9C009CA59C009CA59C009CA59C00C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C6000000FF00C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C6000000FF000000FF000000FF000000FF000000FF000000 - FF000000FF000000FF000000FF000000FF00C6C6C600C6C6C6000000FF00C6C6 - C6000000FF00C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C6000000FF00C6C6C6000000FF00C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C60084848400C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C60063636300636363005A5A5A005A5A - 5A005A5A5A0052525200525252004A4A4A004A4A4A004A4A4A00424242004242 - 420039393900393939003939390031313100C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C60084848400C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C60084848400C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C60063636300C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C6006B6B6B00FFFFFF00FFFFFF005A5A - 5A00FFFFFF0052525200FFFFFF00FFFFFF00FFFFFF00FFFFFF004A4A4A00FFFF - FF0042424200FFFFFF00FFFFFF0039393900C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C60063636300C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C60063636300C6C6C600C6C6C600C6C6C600C6C6C6000000 - FF000000FF000000FF000000FF000000FF00C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C60042424200C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C6006B6B6B0063636300636363005A5A - 5A005A5A5A005A5A5A005252520052525200525252004A4A4A004A4A4A004A4A - 4A0042424200424242004242420039393900C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C60042424200C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C60042424200C6C6C600C6C6C600C6C6C600C6C6C6000000 - FF00FFFFFF00FFFFFF00FFFFFF000000FF00C6C6C600C6C6C60084848400C6C6 - C600C6C6C600C6C6C60063636300636363006363630042424200C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C60073737300FFFFFF00FFFFFF00FFFF - FF005A5A5A00FFFFFF005A5A5A00FFFFFF0052525200FFFFFF004A4A4A00FFFF - FF00FFFFFF00FFFFFF00FFFFFF0039393900C6C6C600C6C6C60084848400C6C6 - C600C6C6C600C6C6C60063636300636363006363630042424200C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C60084848400C6C6 - C600C6C6C600C6C6C60063636300636363006363630042424200C6C6C6000000 - FF000000FF000000FF000000FF000000FF00C6C6C600C6C6C600C6C6C6006363 - 6300C6C6C60042424200EFAD6B00E7A56B00E79C6B00846B520042424200C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600737373006B6B6B00636363006363 - 6300636363005A5A5A005A5A5A005A5A5A005252520052525200525252004A4A - 4A004A4A4A004A4A4A004242420042424200C6C6C600C6C6C600C6C6C6006363 - 6300C6C6C60042424200EFAD6B00E7A56B00E79C6B00846B520042424200C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6006363 - 6300C6C6C60042424200EFAD6B00E7A56B00E79C6B00846B520042424200C6C6 - C600C6C6C600C6C6C6000000C600C6C6C600C6C6C600C6C6C600C6C6C6004242 - 420042424200F7B57300EFAD6B00EFAD6B00A57B5200E79C6B0063636300C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C60073737300FFFFFF00FFFFFF006363 - 6300FFFFFF0063636300FFFFFF005A5A5A00FFFFFF0052525200FFFFFF005252 - 5200FFFFFF00FFFFFF00FFFFFF0042424200C6C6C600C6C6C600C6C6C6004242 - 420042424200F7B57300EFAD6B00EFAD6B00A57B5200E79C6B0063636300C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6004242 - 420042424200F7B57300EFAD6B000000FF000000FF000000FF000000FF000000 - FF00C6C6C600C6C6C6000000C600C6C6C600C6C6C600C6C6C600C6C6C6006363 - 6300FFBD7300F7B57300F7B57300A57B5200EFAD6B000063000000630000C6C6 - C600C6C6C60084848400C6C6C600C6C6C6007B7B7B006B6B6B006B6B6B006B6B - 6B006363630063636300636363005A5A5A005A5A5A005A5A5A00525252005252 - 5200525252004A4A4A004A4A4A004A4A4A00C6C6C600C6C6C600C6C6C6006363 - 6300FFBD7300F7B57300F7B57300A57B5200EFAD6B00E7A56B0063636300C6C6 - C600C6C6C60084848400C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6006363 - 6300FFBD7300F7B57300F7B573000000FF00FFFFFF00FFFFFF00FFFFFF000000 - FF000000C6000000C6000000C600C6C6C600C6C6C60063636300424242006363 - 6300FFC67B00FFBD7300BD946300F7B57300EFAD6B0000630000008400000063 - 000063636300C6C6C600C6C6C600C6C6C6007B7B7B00FFFFFF006B6B6B00FFFF - FF006B6B6B00FFFFFF0063636300FFFFFF005A5A5A00FFFFFF005A5A5A00FFFF - FF0052525200FFFFFF00FFFFFF004A4A4A00C6C6C60063636300424242006363 - 6300FFC67B00FFBD7300BD9463000000E7000000DE000000DE000000D6000000 - D6000000CE000000CE000000C6000000C600C6C6C60063636300424242006363 - 6300FFC67B00FFBD7300BD9463000000FF000000FF000000FF000000FF000000 - FF0063636300C6C6C600C6C6C600C6C6C60084848400C6C6C600C6C6C6006363 - 6300FFC67B00FFC67B00FFBD7300F7B57300F7B5730000630000008400000084 - 000000630000C6C6C600C6C6C600C6C6C600848484007B7B7B007B7B7B007373 - 730073737300737373006B6B6B006B6B6B0063636300636363005A5A5A005A5A - 5A005A5A5A0052525200525252004A4A4A0084848400C6C6C600C6C6C6006363 - 6300FFC67B00FFC67B00FFBD73000000E700FFFFFF000000DE00FFFFFF000000 - D600FFFFFF000000CE00FFFFFF000000C60084848400C6C6C600C6C6C6006363 - 6300FFC67B00FFC67B00FFBD7300F7B573000000C60042424200C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C60042424200D694 - 4A0084848400FFC67B00FFC67B00FFBD73004242420000630000008400000084 - 00000084000000630000C6C6C600C6C6C600C6C6C60063636300424242006363 - 6300FFC67B00FFBD7300BD946300F7B57300EFAD6B00EFAD6B00636363004242 - 420063636300C6C6C600C6C6C600C6C6C600C6C6C600C6C6C60042424200D694 - 4A0084848400FFC67B00FFC67B000000E7000000E7000000E7000000DE000000 - DE000000D6000000D6000000CE000000CE00C6C6C600C6C6C60042424200D694 - 4A0084848400FFC67B00FFC67B00FFBD73000000C600C6C6C600C6C6C6000000 - FF000000FF000000FF000000FF000000FF00848484006363630063636300D6AD - 6B00D6944A006363630063636300636363004242420000630000008400000084 - 0000008400000084000000630000C6C6C60084848400C6C6C600C6C6C6006363 - 6300FFC67B00FFC67B00FFBD7300F7B57300F7B5730042424200C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600848484006363630063636300D6AD - 6B00D6944A0063636300636363000000EF00FFFFFF000000E700FFFFFF000000 - DE00FFFFFF000000D600FFFFFF000000CE00848484006363630063636300D6AD - 6B00D6944A006363630063636300636363000000C6000000C6000000C6000000 - FF00FFFFFF00FFFFFF00FFFFFF000000FF00C6C6C600C6C6C600C6C6C6006363 - 630042424200C6C6C60042424200C6C6C600C6C6C60000630000008400000084 - 0000008400000084000000630000C6C6C600C6C6C600C6C6C60042424200D694 - 4A0084848400FFC67B00FFC67B00FFBD730042424200C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6006363 - 630042424200C6C6C600424242000000EF000000EF000000E7000000E7000000 - E7000000DE000000DE000000D6000000D600C6C6C600C6C6C600C6C6C6006363 - 630042424200C6C6C60042424200C6C6C600C6C6C600C6C6C600848484000000 - FF000000FF000000FF000000FF000000FF00C6C6C600C6C6C600C6C6C6006363 - 6300C6C6C600C6C6C60063636300C6C6C600C6C6C60000630000008400000084 - 00000084000000630000C6C6C600C6C6C600848484006363630063636300D6AD - 6B00D6944A006363630063636300636363004242420063636300C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6006363 - 6300C6C6C600C6C6C600636363000000F700FFFFFF000000EF00FFFFFF000000 - E700FFFFFF000000DE00FFFFFF000000D600C6C6C600C6C6C600C6C6C6006363 - 6300C6C6C600C6C6C60063636300C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C6000000C600C6C6C600C6C6C600C6C6C600C6C6C6008484 - 8400C6C6C60084848400C6C6C600C6C6C600C6C6C60000630000008400000084 - 000000630000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6006363 - 630042424200C6C6C60042424200C6C6C600C6C6C600C6C6C60084848400C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6008484 - 8400C6C6C60084848400C6C6C6000000F7000000F7000000EF000000EF000000 - E7000000E7000000E7000000DE000000DE00C6C6C600C6C6C600C6C6C6008484 - 8400C6C6C60084848400C6C6C6000000FF000000FF000000FF000000FF000000 - FF00C6C6C600C6C6C6000000C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C60000630000008400000063 - 0000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6006363 - 6300C6C6C600C6C6C60063636300C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C6000000FF00FFFFFF000000F700FFFFFF000000 - EF00FFFFFF000000E700FFFFFF000000DE00C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C6000000FF00FFFFFF00FFFFFF00FFFFFF000000 - FF000000C6000000C6000000C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6000063000000630000C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6008484 - 8400C6C6C60084848400C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C6000000FF000000FF000000F7000000F7000000 - EF000000EF000000E7000000E7000000E700C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C6000000FF000000FF000000FF000000FF000000 - FF00C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C60084848400C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C60084848400C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C60084848400C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C60084848400C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C60063636300C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C60063636300C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C60063636300C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C60063636300C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C60042424200C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C60042424200C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C60042424200C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C60042424200C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C60084848400C6C6 - C600C6C6C600C6C6C60063636300636363006363630042424200C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C60084848400C6C6 - C600C6C6C600C6C6C60063636300636363006363630042424200C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C60084848400C6C6 - C600C6C6C600C6C6C60063636300636363006363630042424200C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C60084848400C6C6 - C600C6C6C600C6C6C60063636300636363006363630042424200C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6006363 - 6300C6C6C60042424200EFAD6B00E7A56B00E79C6B00846B520042424200C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6006363 - 6300C6C6C60042424200EFAD6B00E7A56B00E79C6B00846B520042424200C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6006363 - 6300C6C6C60042424200EFAD6B00E7A56B00E79C6B00846B520042424200C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6006363 - 6300C6C6C60042424200EFAD6B00E7A56B00E79C6B00846B520042424200C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6004242 - 420042424200F7B57300EFAD6B00EFAD6B00A57B5200E79C6B0063636300C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6004242 - 420042424200F7B57300EFAD6B00EFAD6B00A57B5200E79C6B0063636300C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6004242 - 420042424200F7B57300EFAD6B00EFAD6B00A57B5200E79C6B0063636300C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6004242 - 420042424200F7B57300EFAD6B00EFAD6B00A57B5200E79C6B0063636300C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6006363 - 6300FFBD7300F7B57300F7B57300A57B5200EFAD6B000000000000000000C6C6 - C600C6C6C60084848400C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6006363 - 6300FFBD7300F7B57300F7B57300A57B5200EFAD6B00E7A56B0063636300C6C6 - C600C6C6C60084848400C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6006363 - 6300FFBD73000084000000630000A57B5200EFAD6B000084000000630000C6C6 - C600C6C6C60084848400C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6006363 - 6300FFBD7300F7B57300F7B57300A57B5200EFAD6B000084000000630000C6C6 - C600C6C6C60084848400C6C6C600C6C6C600C6C6C60063636300424242006363 - 6300FFC67B00FFBD7300BD946300F7B57300EFAD6B0000000000424242000000 - 000063636300C6C6C600C6C6C600C6C6C600C6C6C60063636300424242006363 - 6300FFC67B00FFBD7300BD946300000000000000000000000000000000000000 - 000000000000000000000000000000000000C6C6C60063636300424242006363 - 6300FFC67B00636363000084000000630000EFAD6B0063636300008400000063 - 000063636300C6C6C600C6C6C600C6C6C600C6C6C60063636300424242006363 - 6300FFC67B00FFBD7300BD946300F7B57300EFAD6B0063636300008400000063 - 000063636300C6C6C600C6C6C600C6C6C60084848400C6C6C600C6C6C6006363 - 6300FFC67B00FFC67B00FFBD7300F7B57300F7B5730000000000424242004242 - 420000000000C6C6C600C6C6C600C6C6C60084848400C6C6C600C6C6C6006363 - 6300FFC67B00FFC67B00FFBD7300000000004242420042424200424242004242 - 42004242420042424200424242000000000084848400C6C6C600C6C6C6006363 - 6300FFC67B00FFC67B0000630000008400000063000042424200006300000084 - 000000630000C6C6C600C6C6C600C6C6C60084848400C6C6C600C6C6C6006363 - 6300FFC67B00FFC67B00FFBD7300F7B57300F7B5730042424200006300000084 - 000000630000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C60042424200D694 - 4A0084848400FFC67B00FFC67B00FFBD73004242420000000000424242004242 - 42004242420000000000C6C6C600C6C6C600C6C6C600C6C6C60042424200D694 - 4A0084848400FFC67B00FFC67B00000000004242420042424200424242004242 - 420042424200424242004242420000000000C6C6C600C6C6C60042424200D694 - 4A0084848400FFC67B00FFC67B00006300000084000000630000C6C6C6000063 - 00000084000000630000C6C6C600C6C6C600C6C6C600C6C6C60042424200D694 - 4A0084848400FFC67B00FFC67B00FFBD730042424200C6C6C600C6C6C6000063 - 00000084000000630000C6C6C600C6C6C600848484006363630063636300D6AD - 6B00D6944A006363630063636300636363004242420000000000424242004242 - 4200424242004242420000000000C6C6C600848484006363630063636300D6AD - 6B00D6944A006363630063636300000000004242420042424200424242004242 - 420042424200424242004242420000000000848484006363630063636300D6AD - 6B00D6944A00636363006363630063636300006300000084000000630000C6C6 - C600006300000084000000630000C6C6C600848484006363630063636300D6AD - 6B00D6944A006363630063636300636363004242420063636300C6C6C600C6C6 - C600006300000084000000630000C6C6C600C6C6C600C6C6C600C6C6C6006363 - 630042424200C6C6C60042424200C6C6C600C6C6C60000000000424242004242 - 4200424242004242420000000000C6C6C600C6C6C600C6C6C600C6C6C6006363 - 630042424200C6C6C60042424200000000004242420042424200424242004242 - 420042424200424242004242420000000000C6C6C600C6C6C600C6C6C6006363 - 630042424200C6C6C60042424200C6C6C600006300000084000000630000C6C6 - C600006300000084000000630000C6C6C600C6C6C600C6C6C600C6C6C6006363 - 630042424200C6C6C60042424200C6C6C600C6C6C600C6C6C60084848400C6C6 - C600006300000084000000630000C6C6C600C6C6C600C6C6C600C6C6C6006363 - 6300C6C6C600C6C6C60063636300C6C6C600C6C6C60000000000424242004242 - 42004242420000000000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6006363 - 6300C6C6C600C6C6C60063636300000000004242420042424200424242004242 - 420042424200424242004242420000000000C6C6C600C6C6C600C6C6C6006363 - 6300C6C6C600C6C6C60063636300006300000084000000630000C6C6C6000063 - 00000084000000630000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6006363 - 6300C6C6C600C6C6C60063636300C6C6C600C6C6C600C6C6C600C6C6C6000063 - 00000084000000630000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6008484 - 8400C6C6C60084848400C6C6C600C6C6C600C6C6C60000000000424242004242 - 420000000000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6008484 - 8400C6C6C60084848400C6C6C600000000004242420042424200424242004242 - 420042424200424242004242420000000000C6C6C600C6C6C600C6C6C6008484 - 8400C6C6C60084848400006300000084000000630000C6C6C600006300000084 - 000000630000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6008484 - 8400C6C6C60084848400C6C6C600C6C6C600C6C6C600C6C6C600006300000084 - 000000630000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C60000000000424242000000 - 0000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600000000004242420042424200424242004242 - 420042424200424242004242420000000000C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600848484000084000000630000C6C6C60084848400008400000063 - 0000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C60084848400008400000063 - 0000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6000000000000000000C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600000000000000000000000000000000000000 - 000000000000000000000000000000000000C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C6000084000000630000C6C6C600C6C6C6000084000000630000C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6000084000000630000C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600ADC6FF00C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600B5BDF7004A73DE000042C6000042C6004A73 - DE00B5BDF700C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600B5BDF7000042C6000042C6000042C6000042 - C6000042C600B5BDF700C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C60084848400C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600ADC6 - FF000042DE004A73E7005273E7004A73E7007394FF00C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C6004A73DE004A73DE00B5BDF700FFFFFF00FFFFFF00B5BD - F7004A73DE004A73DE00C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C6000042C600B5BDF700B5BDF700B5BDF7008C9C - EF008C9CEF000042C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C60063636300C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6000852 - E7000039C6005273DE005273DE005273DE004A6BDE005273E7005273EF0084A5 - FF00C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C6004A73DE00B5BDF700F7CEAD00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00CED6FF00B5BDF7004A73DE00C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C6000042C600B5BDF700FFFFFF008C9CEF00FFFF - FF004A73DE000042C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C60042424200C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6007B9CFF005273 - DE00295ACE005273DE005273DE005273DE005273DE005273DE004A73DE004A6B - DE005273E700638CFF00C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600B5BDF7004A73DE00F7CEAD00FFFFFF00F7CEAD00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00CED6FF004A73DE00B5BDF700C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C6000042C600B5BDF700FFFFFF008C9CEF00FFFF - FF004A73DE000042C600C6C6C600C6C6C600C6C6C600C6C6C60084848400C6C6 - C600C6C6C600C6C6C60063636300636363006363630042424200C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600527BEF005273 - DE002152D600215AC6000039C600184AD600426BDE005273DE005273DE005273 - DE004A6BDE006B8CFF00C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C6004A73DE00B5BDF700F7CEAD00F7CEAD00FFFFFF000042C6000042C600FFFF - FF00FFFFFF00FFFFFF00B5BDF7004A73DE00C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C6000042C600B5BDF700FFFFFF008C9CEF00FFFF - FF004A73DE000042C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6006363 - 6300C6C6C60042424200EFAD6B00E7A56B00E79C6B00846B520042424200C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600ADC6FF004A73E7005273 - DE000039C600FFFFCE00FFF7CE00ADB5CE004273C6000039C6000842CE003163 - D6005273DE007B9CFF00C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C6000042C600FFFFFF00FFFFFF00FFFFFF000042C600FFFFFF00FFFFFF000042 - C600FFFFFF00FFFFFF00FFFFFF000042C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C6000042C6008C9CEF008C9CEF004A73DE004A73 - DE004A73DE000042C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6004242 - 420042424200F7B57300EFAD6B00EFAD6B00A57B5200E79C6B0063636300C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600638CFF005273DE003963 - D600ADB5CE00FFF7CE00FFEFCE00FFF7CE00FFFFCE00FFFFCE00C6D6E700638C - DE00084AC6004A7BEF00C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C6000042C600FFFFFF00FFFFFF00FFFFFF000042C600FFFFFF00FFFFFF000042 - C600FFFFFF00FFFFFF00FFFFFF000042C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C6000031A5000031A5000031A5000031A5000031A5000031 - A5000031A5000031A5000031A500C6C6C600C6C6C600C6C6C600C6C6C6006363 - 6300FFBD7300F7B57300F7B57300A57B5200EFAD6B00E7A56B0063636300C6C6 - C600C6C6C60084848400C6C6C600C6C6C600C6C6C6005273E7005273DE000042 - CE00FFEFCE00FFEFCE00FFEFCE00FFEFCE00FFEFCE00FFEFC600FFFFFF00FFFF - FF0094B5E7002152D600ADC6FF00C6C6C60063636300636363005A5A5A005A5A - 5A004A73DE00B5BDF700FFFFFF00FFFFFF00FFFFFF000042C6000042C600FFFF - FF00F7CEAD00F7CEAD00B5BDF7004A73DE0063636300636363005A5A5A005A5A - 5A005A5A5A00525252000042C600B5BDF700FFFFFF00FFFFFF00B5BDF7008C9C - EF00B5BDF7004A73DE000042C60031313100C6C6C60063636300424242006363 - 6300FFC67B00FFBD7300BD946300F7B57300EFAD6B0084848400000084000000 - 8400000084008484FF00C6C6C600C6C6C6004A73E7004A73E7005273DE001852 - C600FFEFCE00FFEFCE00FFEFCE00FFEFCE00FFEFCE00FFF7D600FFFFFF00FFFF - FF000042C6005273DE005273EF00C6C6C6006B6B6B00FFFFFF00FFFFFF005A5A - 5A00B5BDF7004A73DE00CED6FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00F7CE - AD00FFFFFF00F7CEAD004A73DE00393939006B6B6B00FFFFFF00FFFFFF005A5A - 5A00FFFFFF0052525200B5BDF7000042C6000042C6000042C600B5BDF7000042 - C6000042C6000042C600B5BDF7003939390084848400C6C6C600C6C6C6006363 - 6300FFC67B00FFC67B00FFBD7300F7B5730063636300000084000000FF000000 - FF000000FF00000084000000C600C6C6C600ADC6FF00527BEF00315AD6009CAD - C600FFEFCE00FFEFCE00FFEFCE00FFEFCE00FFEFCE00FFF7E700FFFFFF00D6DE - F7000042C6005273DE005273EF00C6C6C6006B6B6B0063636300636363005A5A - 5A005A5A5A004A73DE00B5BDF700CED6FF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00F7CEAD00B5BDF7004A73DE00393939006B6B6B0063636300636363005A5A - 5A005A5A5A005A5A5A005252520052525200525252000042C6000042C6000042 - C60042424200424242004242420039393900C6C6C600C6C6C60042424200D694 - 4A0084848400FFC67B00FFC67B0084848400000084000000FF000000FF000000 - FF000000FF000000FF00000084008484FF00C6C6C600ADC6FF00215ADE00396B - C600ADB5CE00FFEFCE00FFEFCE00FFF7CE00FFEFCE00FFEFD600FFFFFF00527B - D6003963D6004A6BDE00ADC6FF00C6C6C60073737300FFFFFF00FFFFFF00FFFF - FF005A5A5A00FFFFFF004A73DE004A73DE00B5BDF700FFFFFF00FFFFFF00B5BD - F7004A73DE004A73DE00FFFFFF003939390073737300FFFFFF00FFFFFF00FFFF - FF005A5A5A00FFFFFF005A5A5A00FFFFFF0052525200FFFFFF004A4A4A00FFFF - FF00FFFFFF00FFFFFF00FFFFFF0039393900848484006363630063636300D6AD - 6B00D6944A006363630063636300000084000000FF000000FF000000FF000000 - FF000000FF000000FF000000FF0000008400C6C6C600C6C6C600ADC6FF003963 - D600104ACE000031C600396BC600A5ADCE00FFF7CE00FFFFCE00FFFFFF000039 - C6005273DE005273E700C6C6C600C6C6C600737373006B6B6B00636363006363 - 6300636363005A5A5A005A5A5A005A5A5A004A73DE000042C6000042C6004A73 - DE004A4A4A004A4A4A004242420042424200737373006B6B6B00636363006363 - 6300636363005A5A5A005A5A5A005A5A5A005252520052525200525252004A4A - 4A004A4A4A004A4A4A004242420042424200C6C6C600C6C6C600C6C6C6006363 - 630042424200C6C6C60042424200000084000000FF000000FF000000FF000000 - FF000000FF000000FF000000FF0000008400C6C6C600C6C6C6007B9CFF004A73 - E7005273DE005A73DE004263D600104ACE000031C6002963C6005A84CE00215A - D6005273DE006B8CFF00C6C6C600C6C6C60073737300FFFFFF00FFFFFF006363 - 6300FFFFFF0063636300FFFFFF005A5A5A00FFFFFF0052525200FFFFFF005252 - 5200FFFFFF00FFFFFF00FFFFFF004242420073737300FFFFFF00FFFFFF006363 - 6300FFFFFF0063636300FFFFFF005A5A5A00FFFFFF0052525200FFFFFF005252 - 5200FFFFFF00FFFFFF00FFFFFF0042424200C6C6C600C6C6C600C6C6C6006363 - 6300C6C6C600C6C6C60063636300000084000000FF000000FF000000FF000000 - FF000000FF000000FF000000FF0000008400C6C6C600C6C6C600C6C6C600ADC6 - FF006B8CFF004A73E7005273E7005273DE005A73DE004263D6002963DE006384 - F7004A6BDE00ADC6FF00C6C6C600C6C6C6007B7B7B006B6B6B006B6B6B006B6B - 6B006363630063636300636363005A5A5A005A5A5A005A5A5A00525252005252 - 5200525252004A4A4A004A4A4A004A4A4A007B7B7B006B6B6B006B6B6B006B6B - 6B006363630063636300636363005A5A5A005A5A5A005A5A5A00525252005252 - 5200525252004A4A4A004A4A4A004A4A4A00C6C6C600C6C6C600C6C6C6008484 - 8400C6C6C60084848400C6C6C6008484FF00000084000000FF000000FF000000 - FF000000FF000000FF00000084008484FF00C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C6007B9CFF00638CFF004A73E7005273E700C6C6C600C6C6 - C600ADC6FF00C6C6C600C6C6C600C6C6C6007B7B7B00FFFFFF006B6B6B00FFFF - FF006B6B6B00FFFFFF0063636300FFFFFF005A5A5A00FFFFFF005A5A5A00FFFF - FF0052525200FFFFFF00FFFFFF004A4A4A007B7B7B00FFFFFF006B6B6B00FFFF - FF006B6B6B00FFFFFF0063636300FFFFFF005A5A5A00FFFFFF005A5A5A00FFFF - FF0052525200FFFFFF00FFFFFF004A4A4A00C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C6000000C600000084000000FF000000 - FF000000FF00000084000000C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600ADC6FF00ADC6FF00C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600848484007B7B7B007B7B7B007373 - 730073737300737373006B6B6B006B6B6B0063636300636363005A5A5A005A5A - 5A005A5A5A0052525200525252004A4A4A00848484007B7B7B007B7B7B007373 - 730073737300737373006B6B6B006B6B6B0063636300636363005A5A5A005A5A - 5A005A5A5A0052525200525252004A4A4A00C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6008484FF00000084000000 - 8400000084008484FF00C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C60042424200000000000000000042424200C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C6005A5A5A005A5A5A00525252005252 - 5200525252004A4A4A004A4A4A004A4A4A004242420042424200424242003939 - 390039393900393939003131310031313100C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C6008CDE8C0029B52900089400000894000029B5 - 29008CDE8C00C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C60000000000424242005252A5007373C6007373BD005252A500424242000000 - 0000C6C6C600C6C6C600C6C6C600C6C6C6005A5A5A00FFFFFF00FFFFFF005252 - 5200FFFFFF0052525200FFFFFF00FFFFFF00FFFFFF00FFFFFF0042424200FFFF - FF0039393900FFFFFF00FFFFFF0031313100C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C60029B5290008940000FFFFFF0008940000089400000894 - 00000894000029B52900C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C60084848400C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6000000 - 00005252A5007B7BD6007B7BCE0042424200000000006B6BB5006B6BB5005252 - A50000000000C6C6C600C6C6C600C6C6C6005A5A5A005A5A5A005A5A5A005A5A - 5A005252520052525200525252004A4A4A004A4A4A004A4A4A00424242004242 - 420042424200393939003939390039393900C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C60029B529008CDE8C00FFFFFF008CDE8C0008940000089400000894 - 00008CDE8C008CDE8C0029B52900C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C60063636300C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600000000006B6B - B5008484DE007B7BD60000000000FFFFFF00FFFFFF00424242006B6BB5006B6B - B5005252A50000000000C6C6C600C6C6C60063636300FFFFFF00FFFFFF00FFFF - FF005A5A5A00FFFFFF0052525200FFFFFF004A4A4A00FFFFFF004A4A4A00FFFF - FF00FFFFFF00FFFFFF00FFFFFF0039393900C6C6C600C6C6C600C6C6C600C6C6 - C6008CDE8C0008940000FFFFFF00089400000894000008940000089400000894 - 000008940000FFFFFF00089400008CDE8C00C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C60042424200C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600000000008484D6008C8C - EF008484E7008484DE0042424200FFFFFF00FFFFFF00000000006B6BB5006B6B - B5006B6BB5005252A50000000000C6C6C60063636300636363005A5A5A005A5A - 5A005A5A5A005A5A5A005252520052525200525252004A4A4A004A4A4A004A4A - 4A0042424200424242004242420039393900C6C6C600C6C6C600C6C6C600C6C6 - C60029B52900FFFFFF00FFFFFF00089400000894000008940000089400000894 - 000008940000FFFFFF00FFFFFF0029B52900C6C6C600C6C6C600C6C6C6008484 - 8400C6C6C600C6C6C600C6C6C60063636300636363006363630042424200C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600424242009494F7008C8C - EF008C8CEF008484E7008484DE0000000000424242007373C6006B6BBD006B6B - B5006B6BB5006B6BB50042424200C6C6C60063636300FFFFFF00FFFFFF005A5A - 5A00C6C6C600C6C6C600C6C6C600C6C6C600C6C6C60052525200FFFFFF004A4A - 4A00FFFFFF00FFFFFF00FFFFFF0042424200C6C6C600C6C6C600C6C6C600C6C6 - C60008940000FFFFFF00FFFFFF00FFFFFF000894000008940000089400000894 - 00008CDE8C00089400008CDE8C0008940000C6C6C600C6C6C600C6C6C600C6C6 - C60063636300C6C6C60042424200EFAD6B00E7A56B00E79C6B00846B52004242 - 4200C6C6C600C6C6C600C6C6C600C6C6C600424242008484D6009494FF009494 - F7009494F7008C8CEF0000000000FFFFFF00FFFFFF00000000007373C6007373 - BD006B6BB5006B6BB5005252A500424242006B6B6B0063636300636363006363 - 6300C6C6C600C6C6C600C6C6C600C6C6C600C6C6C60052525200525252004A4A - 4A004A4A4A004A4A4A004242420042424200C6C6C600C6C6C600C6C6C600C6C6 - C60008940000FFFFFF008CDE8C008CDE8C008CDE8C00FFFFFF00FFFFFF00FFFF - FF0008940000089400000894000008940000C6C6C600C6C6C600C6C6C600C6C6 - C6004242420042424200F7B57300EFAD6B00EFAD6B00A57B5200E79C6B006363 - 6300C6C6C600C6C6C600C6C6C600C6C6C600000000009C9CFF009C9CFF009C9C - FF009494FF009494F70042424200FFFFFF00FFFFFF00000000007373C6007373 - C6007373BD007373BD007373BD0000000000C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C6005A5A5A005A5A5A0052525200C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C60063636300636363005A5A5A005A5A - 5A0029B52900FFFFFF00FFFFFF000894000008940000FFFFFF00089400008CDE - 8C0008940000089400000894000029B52900C6C6C600C6C6C600C6C6C600C6C6 - C60063636300FFBD7300F7B57300F7B57300A57B5200EFAD6B00E7A56B006363 - 6300C6C6C600C6C6C60084848400C6C6C600000000009C9CFF009C9CFF009C9C - FF009C9CFF009C9CFF009494F70000000000FFFFFF00FFFFFF00000000007B7B - CE007373C6007373C6007373C60000000000C6C6C600C6C6C600C6C6C6006363 - 63006363630063636300C6C6C6005A5A5A00FFFFFF005A5A5A00C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C6006B6B6B00FFFFFF00FFFFFF005A5A - 5A008CDE8C0008940000FFFFFF00FFFFFF000894000008940000089400000894 - 00000894000008940000089400008CDE8C00C6C6C600C6C6C600636363004242 - 420063636300FFC67B00FFBD7300BD946300F7B57300EFAD6B00EFAD6B006363 - 63004242420063636300C6C6C600C6C6C600424242008484D600A5A5FF00A5A5 - FF00A5A5FF0000000000424242009494F70042424200FFFFFF00FFFFFF004242 - 42007B7BCE007B7BCE005252A50042424200C6C6C600C6C6C600C6C6C6006B6B - 6B00FFFFFF0063636300C6C6C6005A5A5A005A5A5A005A5A5A00C6C6C600C6C6 - C60052525200525252004A4A4A004A4A4A006B6B6B0063636300636363005A5A - 5A005A5A5A0029B529008CDE8C0008940000FFFFFF0008940000089400000894 - 0000089400000894000029B5290039393900C6C6C60084848400C6C6C600C6C6 - C60063636300FFC67B00FFC67B00FFBD7300F7B57300F7B5730042424200C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C60042424200A5A5FF00A5A5 - FF0000000000FFFFFF00FFFFFF008484840042424200FFFFFF00FFFFFF000000 - 00007B7BD6007B7BD60042424200C6C6C60073737300737373006B6B6B006B6B - 6B006B6B6B0063636300C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C60052525200FFFFFF00FFFFFF004A4A4A0073737300FFFFFF00FFFFFF00FFFF - FF005A5A5A00FFFFFF0029B5290008940000FFFFFF00FFFFFF008CDE8C000894 - 00000894000029B52900FFFFFF0039393900C6C6C600C6C6C600C6C6C6004242 - 4200D6944A0084848400FFC67B00FFC67B00FFBD730042424200C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600000000008484D600A5A5 - FF0042424200FFFFFF00FFFFFF008484840084848400FFFFFF00FFFFFF004242 - 42008484DE005252A50000000000C6C6C60073737300FFFFFF0073737300C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600636363005A5A5A005A5A5A00C6C6 - C6005A5A5A00525252005252520052525200737373006B6B6B00636363006363 - 6300636363005A5A5A005A5A5A008CDE8C0029B52900089400000894000029B5 - 29008CDE8C004A4A4A004242420042424200C6C6C60084848400636363006363 - 6300D6AD6B00D6944A006363630063636300636363004242420063636300C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600000000008484 - D600A5A5FF0000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00000000008C8C - EF006B6BB50000000000C6C6C600C6C6C6007B7B7B007373730073737300C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C60063636300FFFFFF005A5A5A00C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C60073737300FFFFFF00FFFFFF006363 - 6300FFFFFF0063636300FFFFFF005A5A5A00FFFFFF0052525200FFFFFF005252 - 5200FFFFFF00FFFFFF00FFFFFF0042424200C6C6C600C6C6C600C6C6C600C6C6 - C6006363630042424200C6C6C60042424200C6C6C600C6C6C600C6C6C6008484 - 8400C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6000000 - 00008484D600A5A5FF00424242000000000000000000424242009494F7008484 - D60000000000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600737373006B6B6B006B6B6B00C6C6C600636363006363630063636300C6C6 - C6005A5A5A005A5A5A005A5A5A00C6C6C6007B7B7B006B6B6B006B6B6B006B6B - 6B006363630063636300636363005A5A5A005A5A5A005A5A5A00525252005252 - 5200525252004A4A4A004A4A4A004A4A4A00C6C6C600C6C6C600C6C6C600C6C6 - C60063636300C6C6C600C6C6C60063636300C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C60000000000424242008484D6009C9CFF009C9CFF008484D600424242000000 - 0000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C60073737300FFFFFF006B6B6B00C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C6005A5A5A00FFFFFF005A5A5A00C6C6C6007B7B7B00FFFFFF006B6B6B00FFFF - FF006B6B6B00FFFFFF0063636300FFFFFF005A5A5A00FFFFFF005A5A5A00FFFF - FF0052525200FFFFFF00FFFFFF004A4A4A00C6C6C600C6C6C600C6C6C600C6C6 - C60084848400C6C6C60084848400C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C60042424200000000000000000042424200C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600737373007373730073737300C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600636363005A5A5A005A5A5A00C6C6C600848484007B7B7B007B7B7B007373 - 730073737300737373006B6B6B006B6B6B0063636300636363005A5A5A005A5A - 5A005A5A5A0052525200525252004A4A4A00C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600848484004242420021212100212121002121 - 210021212100212121002121210042424200C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C60042424200636363006363630042424200C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C0C0C000C0C0C000C0C0C000C0C0 - C000C0C0C000C0C0C0000000000000000000C0C0C000C0C0C000C0C0C000C0C0 - C000C0C0C000C0C0C000C0C0C000C0C0C000C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600086B7B0008E7FF0008DEFF0008D6FF0008CE - EF0008BDE70008B5D60008ADCE0021212100C6C6C600C6C6C600C6C6C6006363 - 6300C6C6C600C6C6C60063636300A59484009C94840063636300C6C6C600C6C6 - C60063636300A5A5A500C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600000000000000000000000000C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C0C0C000C0C0C000C0C0C000C0C0 - C000C0C0C00000000000C6C6C60000000000C0C0C000C0C0C000000000000000 - 0000C0C0C000C0C0C000C0C0C000C0C0C000C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600086B7B0008E7FF0008DEFF0008D6FF0008CE - EF0008BDE70008B5D60008ADCE0021212100C6C6C600C6C6C600424242009C8C - 7B002121210000000000A59C8C00A59C8C00A59484009C948400000000002121 - 21009C8C7B0042424200A5A5A500C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600000000008400840000000000848484000000000000000000C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C0C0C000C0C0C000C0C0C000C0C0 - C0000000000031B5D600C6C6C60000000000C0C0C00000000000FFFFFF000000 - 0000C0C0C000C0C0C000C0C0C000C0C0C000C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600086B7B0008E7FF0008DEFF0008D6FF0008CE - EF0008BDE70008B5D60008ADCE0021212100C6C6C600636363009C8C7B00ADA5 - 9400ADA59400AD9C8C00A59C8C00A59C8C00A59C8C00A59484009C9484009C94 - 84009C9484009C8C7B0063636300C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C60000000000840084008400840000000000FFFFFF00C6C6C600FFFFFF000000 - 000000000000C6C6C600C6C6C600C6C6C600C0C0C000C0C0C000C0C0C000C0C0 - C000C0C0C00000000000C6C6C600000000000000000084848400FFFFFF000000 - 0000C0C0C000C0C0C000C0C0C000C0C0C000C6C6C600C6C6C600C6C6C600F7D6 - 9400D6941000A56B0800A56B0800086B7B0008E7FF0008DEFF0008D6FF0008CE - EF0008BDE70008B5D60008ADCE0021212100C6C6C600C6C6C60021212100B5A5 - 9400ADA59400ADA5940042424200424242004242420042424200A59484009C94 - 84009C94840021212100C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6000000 - 00008400840084008400840084000000000084848400FFFFFF00C6C6C600FFFF - FF00C6C6C6000000000000000000C6C6C600C0C0C000C0C0C000C0C0C000C0C0 - C0000000000031B5D600C6C6C60000000000C0C0C00000000000FFFFFF000000 - 0000C0C0C000C0C0C000C0C0C000C0C0C000C6C6C600C6C6C600D6941000A56B - 0800FFFFFF00D6941000A56B0800086B7B0008E7FF0008DEFF0008D6FF0008CE - EF0008BDE70008B5D60008ADCE0042424200C6C6C600C6C6C60000000000B5AD - 9C00B5A5940021212100C6C6C600C6C6C600C6C6C600C6C6C60021212100A594 - 84009C94840000000000C6C6C600C6C6C600C6C6C600C6C6C600000000008400 - 8400840084008400840084008400C6C6C600000000000000000084848400C6C6 - C600FFFFFF00C6C6C6000000000000000000C0C0C000C0C0C000C0C0C000C0C0 - C0000000000021EFFF00C6C6C600000000000000000084848400FFFFFF000000 - 0000C0C0C000C0C0C000C0C0C000C0C0C000C6C6C600D6941000F7D69400FFFF - FF00F7D69400D6941000A56B0800086B7B00086B7B00086B7B00086B7B00086B - 7B00086B7B00086B7B00086B7B00086B7B004242420063636300B5AD9C00B5AD - 9C0042424200C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6004242 - 4200A59484009C9484006363630042424200C6C6C60000000000840084008400 - 84008400840084008400C6C6C600840084008400840084008400000000000000 - 000084848400FFFFFF0084848400FFFFFF00C0C0C000C0C0C000C0C0C0000000 - 000031B5D60021EFFF00C6C6C6000000000000000000C6C6C600FFFFFF000000 - 0000C0C0C000C0C0C000C0C0C000C0C0C000F7D69400A56B0800FFFFFF00D694 - 1000D6941000A56B0800A56B0800A56B080042424200CECECE0042424200F7D6 - 940042424200B5B5B50042424200C6C6C60063636300BDB5A500BDAD9C00B5AD - 9C0042424200C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6004242 - 4200A59C8C00A59484009C948400636363000000000084008400840084008400 - 840084008400C6C6C60084008400840084008400840084008400840084008400 - 8400000000000000000084848400FFFFFF00C0C0C000C0C0C000C0C0C000C0C0 - C00000000000C6C6C60021EFFF000000000084848400C6C6C600FFFFFF000000 - 0000C0C0C000C0C0C000C0C0C000C0C0C000D6941000FFFFFF00FFFFFF00A56B - 0800A56B0800A56B0800A56B0800A56B080042424200CECECE0042424200D694 - 100042424200B5B5B50042424200C6C6C60063636300BDB5A500BDB5A500BDAD - 9C0042424200C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6004242 - 4200A59C8C00A59C8C00A5948400636363000000000084008400840084008400 - 8400C6C6C60084008400840084008400840084008400FF42FF00FFFFFF008400 - 840084008400840084000000000000000000C0C0C000C0C0C000C0C0C0000000 - 0000C6C6C60021EFFF0021EFFF00C6C6C60000000000FFFFFF00C6C6C6000000 - 0000C0C0C000C0C0C000C0C0C000C0C0C000A56B0800FFFFFF00FFFFFF00FFFF - FF00A56B0800A56B0800A56B0800A56B080042424200CECECE0042424200A56B - 080042424200B5B5B50042424200C6C6C6004242420063636300BDB5A500BDB5 - A50042424200C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6004242 - 4200A59C8C00A59C8C006363630042424200000000008400840084008400C6C6 - C60084008400840084008400840084008400FFFFFF0084008400840084008400 - 8400840084008400840000000000C6C6C600C0C0C000C0C0C0000000000021EF - FF0021EFFF0021EFFF0021EFFF0021EFFF00C6C6C60000000000C6C6C600FFFF - FF0000000000C0C0C000C0C0C000C0C0C000A56B0800FFFFFF00F7D69400F7D6 - 9400F7D69400FFFFFF00F7D69400FFFFFF0084848400C6C6C600848484004242 - 420084848400B5B5B50084848400C6C6C600C6C6C600C6C6C60000000000BDB5 - A500BDB5A50021212100C6C6C600C6C6C600C6C6C600C6C6C60021212100ADA5 - 9400AD9C8C0000000000C6C6C600C6C6C6000000000084008400C6C6C6008400 - 840084008400840084008400840084008400FFFFFF0084008400840084008400 - 84008400840000000000C6C6C600C6C6C600C0C0C000C0C0C0000000000021EF - FF0021EFFF0021EFFF0021EFFF0021EFFF00C6C6C60000000000C6C6C600C6C6 - C600FFFFFF0000000000C0C0C000C0C0C000D6941000FFFFFF00FFFFFF00A56B - 0800A56B0800F7D69400A56B0800F7D69400A56B080084848400BDBDBD00BDBD - BD00B5B5B50042424200C6C6C600C6C6C600C6C6C600C6C6C60021212100BDB5 - A500BDB5A500BDB5A50042424200424242004242420042424200B5A59400ADA5 - 9400ADA5940021212100C6C6C600C6C6C60000000000C6C6C600840084008400 - 840084008400FFFFFF008400840084008400FFFFFF0084008400840084008400 - 840000000000C6C6C600C6C6C600C6C6C600C0C0C000C0C0C0000000000021EF - FF00C6C6C600000000000000000021EFFF00C6C6C60000000000C6C6C600C6C6 - C600FFFFFF0000000000C0C0C000C0C0C000F7D69400A56B0800FFFFFF00FFFF - FF00A56B0800A56B0800A56B0800A56B0800A56B0800A56B0800424242004242 - 420042424200C6C6C600C6C6C600C6C6C600C6C6C600636363009C8C7B00C6B5 - A500BDB5A500BDB5A500BDB5A500BDAD9C00B5AD9C00B5AD9C00B5AD9C00B5A5 - 9400ADA594009C8C7B0063636300C6C6C600C6C6C60000000000000000008400 - 84008400840084008400FFFFFF00FFFFFF008400840084008400840084000000 - 0000C6C6C600C6C6C600C6C6C600C6C6C600C0C0C000C0C0C0000000000021EF - FF00C6C6C60031B5D60031B5D60021EFFF00C6C6C6000000000000000000C6C6 - C600FFFFFF0000000000C0C0C000C0C0C000C6C6C600D6941000F7D69400A56B - 0800FFFFFF00A56B0800A56B0800A56B0800A56B0800A56B0800D6941000C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600424242009C8C - 7B002121210000000000BDB5A500BDB5A500BDAD9C00B5AD9C00000000002121 - 21009C8C7B0042424200C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6000000 - 000000000000840084008400840084008400840084008400840000000000C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C0C0C000C0C0C000C0C0C0000000 - 000021EFFF0021EFFF0021EFFF0021EFFF00000000008484840084848400C6C6 - C600FFFFFF0000000000C0C0C000C0C0C000C6C6C600C6C6C600D6941000A56B - 0800FFFFFF00FFFFFF00F7D69400A56B0800A56B0800D6941000C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6006363 - 6300C6C6C600C6C6C60063636300BDB5A500BDB5A50063636300C6C6C600C6C6 - C60063636300C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C6000000000000000000840084008400840000000000C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C0C0C000C0C0C000C0C0C000C0C0 - C00000000000000000000000000000000000C6C6C600C6C6C600C6C6C600C6C6 - C60000000000C0C0C000C0C0C000C0C0C000C6C6C600C6C6C600C6C6C600F7D6 - 9400D6941000A56B0800A56B0800D6941000F7D69400C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C60042424200636363006363630042424200C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C6000000000000000000C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C0C0C000C0C0C000C0C0C000C0C0 - C000C0C0C000C0C0C000C0C0C000C0C0C0000000000000000000000000000000 - 0000C0C0C000C0C0C000C0C0C000C0C0C000C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C6004A4A4A004A4A4A004A4A4A004A4A4A004A4A - 4A004A4A4A004A4A4A004A4A4A004A4A4A00C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C6004A4A4A004A4A4A004A4A4A004A4A4A004A4A - 4A004A4A4A004A4A4A004A4A4A004A4A4A00C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C6004A4A4A00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF004A4A4A00C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C6004A4A4A00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF004A4A4A00C6C6C600C6C6C6004A4A4A004A4A - 4A004A4A4A004A4A4A004A4A4A004A4A4A004A4A4A004A4A4A004A4A4A004A4A - 4A004A4A4A00C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6004A4A4A004A4A - 4A004A4A4A004A4A4A004A4A4A004A4A4A004A4A4A004A4A4A004A4A4A004A4A - 4A004A4A4A00C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C6004A4A4A004A4A4A004A4A4A004A4A4A004A4A4A004A4A4A004A4A - 4A004A4A4A004A4A4A00FFFFFF004A4A4A00C6C6C6004A4A4A004A4A4A004A4A - 4A004A4A4A004A4A4A004A4A4A004A4A4A004A4A4A004A4A4A004A4A4A004A4A - 4A004A4A4A004A4A4A00FFFFFF004A4A4A00C6C6C600C6C6C6004A4A4A00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF004A4A4A00C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6004A4A4A00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF004A4A4A00C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C6004A4A4A00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF004A4A4A00FFFFFF004A4A4A004A4A4A0000848400008484004A4A - 4A004A4A4A004A4A4A00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF004A4A4A00FFFFFF004A4A4A004A4A4A004A4A4A004A4A4A004A4A - 4A004A4A4A004A4A4A004A4A4A004A4A4A004A4A4A004A4A4A004A4A4A00FFFF - FF004A4A4A00C6C6C600C6C6C600C6C6C6004A4A4A004A4A4A004A4A4A004A4A - 4A004A4A4A004A4A4A004A4A4A004A4A4A004A4A4A004A4A4A004A4A4A00FFFF - FF004A4A4A00C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C6004A4A4A00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF004A4A4A00FFFFFF004A4A4A004A4A4A0000848400008484004A4A - 4A004A4A4A004A4A4A00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF004A4A4A00FFFFFF004A4A4A004A4A4A00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF004A4A4A00FFFF - FF004A4A4A00C6C6C600C6C6C600C6C6C6004A4A4A00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF004A4A4A00FFFF - FF004A4A4A00C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C6004A4A4A00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF004A4A4A00FFFFFF004A4A4A004A4A4A0000848400008484004A4A - 4A004A4A4A004A4A4A00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF004A4A4A00FFFFFF004A4A4A004A4A4A00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF004A4A4A00FFFF - FF004A4A4A00C6C6C600C6C6C600C6C6C6004A4A4A00FFFFFF00FFFFFF00FFFF - FF004A4A4A00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF004A4A4A00FFFF - FF004A4A4A00C6C6C600C6C6C600C6C6C6004A4A4A004A4A4A004A4A4A004A4A - 4A004A4A4A004A4A4A00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF004A4A4A00FFFFFF004A4A4A004A4A4A0000848400008484004A4A - 4A004A4A4A004A4A4A00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF004A4A4A00FFFFFF004A4A4A004A4A4A00FFFFFF00FFFFFF00FFFF - FF00FFFFFF004A4A4A00FFFFFF00FFFFFF00FFFFFF00FFFFFF004A4A4A00FFFF - FF004A4A4A00C6C6C600C6C6C600C6C6C6004A4A4A00FFFFFF00FFFFFF004A4A - 4A004A4A4A004A4A4A00FFFFFF00FFFFFF00FFFFFF00FFFFFF004A4A4A00FFFF - FF004A4A4A00C6C6C600C6C6C600C6C6C6004A4A4A004A4A4A004AADAD004AAD - AD004AADAD004A4A4A00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF004A4A4A004A4A4A004A4A4A004A4A4A0000848400008484000084 - 8400008484004A4A4A00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF004A4A4A004A4A4A004A4A4A004A4A4A00FFFFFF00FFFFFF00FFFF - FF00FFFFFF004A4A4A00FFFFFF00FFFFFF00FFFFFF00FFFFFF004A4A4A00FFFF - FF004A4A4A00C6C6C600C6C6C600C6C6C6004A4A4A00FFFFFF004A4A4A004A4A - 4A00FFFFFF004A4A4A004A4A4A00FFFFFF00FFFFFF00FFFFFF004A4A4A00FFFF - FF004A4A4A00C6C6C600C6C6C600C6C6C6004A4A4A004AFFFF004A4A4A004AAD - AD004AADAD004A4A4A00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF004A4A4A004A4A4A00C6C6C6004A4A4A0000848400008484004A4A - 4A004A4A4A004A4A4A00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF004A4A4A004A4A4A00C6C6C6004A4A4A00FFFFFF00FFFFFF004A4A - 4A004A4A4A004A4A4A004A4A4A004A4A4A00FFFFFF00FFFFFF004A4A4A00FFFF - FF004A4A4A00C6C6C600C6C6C600C6C6C6004A4A4A00FFFFFF004A4A4A00FFFF - FF00FFFFFF00FFFFFF004A4A4A004A4A4A00FFFFFF00FFFFFF004A4A4A00FFFF - FF004A4A4A00C6C6C600C6C6C600C6C6C6004A4A4A00FFFFFF004AFFFF004A4A - 4A004AADAD004A4A4A00FFFFFF00FFFFFF00FFFFFF00FFFFFF004A4A4A004A4A - 4A004A4A4A004A4A4A00C6C6C600C6C6C6004A4A4A00008484004A4A4A00DEEF - EF00DEEFEF004A4A4A00FFFFFF00FFFFFF00FFFFFF00FFFFFF004A4A4A004A4A - 4A004A4A4A004A4A4A00C6C6C600C6C6C6004A4A4A00FFFFFF00FFFFFF00FFFF - FF00FFFFFF004A4A4A00FFFFFF00FFFFFF00FFFFFF00FFFFFF004A4A4A00FFFF - FF004A4A4A00C6C6C600C6C6C600C6C6C6004A4A4A00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF004A4A4A004A4A4A00FFFFFF004A4A4A00FFFF - FF004A4A4A00C6C6C600C6C6C600C6C6C6004A4A4A004AFFFF00FFFFFF004AFF - FF004A4A4A004A4A4A00FFFFFF00FFFFFF00FFFFFF00FFFFFF004A4A4A00FFFF - FF004A4A4A004AADAD004A4A4A00C6C6C6004A4A4A00008484004A4A4A00DEEF - EF00DEEFEF004A4A4A00FFFFFF00FFFFFF00FFFFFF00FFFFFF004A4A4A00FFFF - FF004A4A4A004A4A4A00C6C6C600C6C6C6004A4A4A00FFFFFF00FFFFFF00FFFF - FF00FFFFFF004A4A4A00FFFFFF00FFFFFF00FFFFFF00FFFFFF004A4A4A004A4A - 4A004A4A4A00C6C6C600C6C6C600C6C6C6004A4A4A00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF004A4A4A00FFFFFF004A4A4A004A4A - 4A004A4A4A00C6C6C600C6C6C600C6C6C6004A4A4A00FFFFFF004AFFFF00FFFF - FF004AFFFF004A4A4A00FFFFFF00FFFFFF00FFFFFF00FFFFFF004A4A4A004A4A - 4A004A4A4A004A4A4A004A4A4A004A4A4A004A4A4A00008484004A4A4A00DEEF - EF00DEEFEF004A4A4A00FFFFFF00FFFFFF00FFFFFF00FFFFFF004A4A4A004A4A - 4A00008484004A4A4A00C6C6C600C6C6C6004A4A4A00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF004A4A4A004A4A - 4A00C6C6C600C6C6C600C6C6C600C6C6C6004A4A4A00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF004A4A4A004A4A - 4A00C6C6C600C6C6C600C6C6C600C6C6C6004A4A4A004AFFFF00FFFFFF004AFF - FF00FFFFFF004A4A4A004A4A4A004A4A4A004A4A4A004A4A4A004A4A4A00C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C6004A4A4A00008484004A4A4A00DEEF - EF00DEEFEF004A4A4A004A4A4A004A4A4A004A4A4A004A4A4A004A4A4A004A4A - 4A00008484004A4A4A00C6C6C600C6C6C6004A4A4A00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF004A4A4A004A4A4A004A4A4A004A4A4A00C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C6004A4A4A00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF004A4A4A004A4A4A004A4A4A004A4A4A00C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C6004A4A4A00FFFFFF004AFFFF00FFFF - FF004AFFFF00FFFFFF004AFFFF00FFFFFF004AFFFF00FFFFFF004A4A4A00C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C6004A4A4A00008484004A4A4A00DEEF - EF00DEEFEF00DEEFEF00DEEFEF00DEEFEF00DEEFEF00DEEFEF00DEEFEF004A4A - 4A00008484004A4A4A00C6C6C600C6C6C6004A4A4A00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF004A4A4A00FFFFFF004A4A4A00C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C6004A4A4A00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF004A4A4A00FFFFFF004A4A4A00C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C6004A4A4A004AFFFF00FFFFFF004AFF - FF004A4A4A004A4A4A004A4A4A004A4A4A004A4A4A004A4A4A004A4A4A00C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C6004A4A4A00008484004A4A4A00DEEF - EF00DEEFEF00DEEFEF00DEEFEF00DEEFEF00DEEFEF00DEEFEF00DEEFEF004A4A - 4A00DEEFEF004A4A4A00C6C6C600C6C6C6004A4A4A00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF004A4A4A004A4A4A00C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C6004A4A4A00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF004A4A4A004A4A4A00C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6004A4A4A004A4A4A004A4A - 4A00C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C6004A4A4A004A4A4A004A4A4A004A4A - 4A004A4A4A004A4A4A004A4A4A004A4A4A004A4A4A004A4A4A004A4A4A004A4A - 4A004A4A4A004A4A4A00C6C6C600C6C6C6004A4A4A004A4A4A004A4A4A004A4A - 4A004A4A4A004A4A4A004A4A4A004A4A4A00C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C6004A4A4A004A4A4A004A4A4A004A4A - 4A004A4A4A004A4A4A004A4A4A004A4A4A00C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6004A4A4A004A4A - 4A004A4A4A004A4A4A004A4A4A004A4A4A004A4A4A004A4A4A004A4A4A004A4A - 4A004A4A4A00C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6004A4A4A004A4A - 4A004A4A4A004A4A4A004A4A4A004A4A4A004A4A4A004A4A4A004A4A4A004A4A - 4A004A4A4A00C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6004A4A4A00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF004A4A4A00C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6004A4A4A00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF004A4A4A00C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600FF000000C6C6C600C6C6C600C6C6C600FFA5A500FF636300C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C6004A4A4A004A4A4A004A4A4A004A4A - 4A004A4A4A004A4A4A004A4A4A004A4A4A004A4A4A004A4A4A004A4A4A00FFFF - FF004A4A4A00C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6004A4A4A00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF004A4A4A00C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600FF000000C6C6C600C6C6C600FFD6D600FF424200FFFFFF00C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C6004A4A4A00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF004A4A4A00FFFF - FF004A4A4A00C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6004A4A4A00FFFF - FF00FFFFFF00FFFFFF0000840000FFFFFF0000840000FFFFFF00FFFFFF00FFFF - FF004A4A4A00C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600FF000000C6C6C600FFF7F700FF393900FFE7E700C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C6004242420042424200C6C6C6004242420042424200CECECE00C6C6 - C60073737300424242004A4A4A008C8C8C004A4A4A00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF004A4A4A00FFFF - FF004A4A4A00C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6004A4A4A00FFFF - FF00FFFFFF0000840000FFFFFF00FFFFFF00FFFFFF0000840000FFFFFF00FFFF - FF004A4A4A00C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600FF000000FFEFEF00FF5A5A00FFC6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C60042424200C6C6 - C600C6C6C600C6C6C60042424200C6C6C600ADADAD009C9C9C00C6C6C6007373 - 7300ADADAD00C6C6C600FFFFFF00FFFFFF004A4A4A00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF004A4A4A00FFFF - FF004A4A4A00C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6004A4A4A00FFFF - FF0000840000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000840000FFFF - FF004A4A4A00C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600FF000000FF636300FF9C9C00C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C60042424200C6C6 - C600C6C6C600C6C6C60042424200A5A5A5007B7B7B00C6C6C600C6C6C6004242 - 4200424242004242420042424200424242004A4A4A00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF004A4A4A00FFFF - FF004A4A4A00C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6004A4A4A00FFFF - FF00FFFFFF0000840000FFFFFF00FFFFFF00FFFFFF0000840000FFFFFF00FFFF - FF004A4A4A00C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600FF000000FFF7F700FFADAD00C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C6004242420042424200424242004242 - 420042424200C6C6C60042424200C6C6C600CECECE00A5A5A500E7E7E7006363 - 6300BDBDBD00C6C6C600BDBDBD007B7B7B004A4A4A00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF004A4A4A00FFFF - FF004A4A4A00C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6004A4A4A00FFFF - FF00FFFFFF00FFFFFF0000840000FFFFFF0000840000FFFFFF00FFFFFF00FFFF - FF004A4A4A00C6C6C600C6C6C600C6C6C600FF525200C6C6C600FF525200C6C6 - C600FF000000C6C6C600FFEFEF00FF949400C6C6C600C6C6C600C6C6C600C6C6 - C600FF525200C6C6C600FF525200C6C6C600C6C6C600C6C6C60042424200C6C6 - C600C6C6C600C6C6C60042424200C6C6C600424242004242420042424200E7E7 - E70063636300424242006B6B6B00EFEFEF004A4A4A00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF004A4A4A00FFFF - FF004A4A4A00C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6004A4A4A00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF004A4A4A00C6C6C600C6C6C600C6C6C600FF424200C6C6C600FF424200C6C6 - C600FF000000C6C6C600C6C6C600FFE7E700FF8C8C00C6C6C600C6C6C600C6C6 - C600FF424200C6C6C600FF424200C6C6C600C6C6C600C6C6C60042424200C6C6 - C600C6C6C600C6C6C60042424200C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C6004A4A4A00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF004A4A4A004A4A - 4A004A4A4A00C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6004A4A4A00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF004A4A4A004A4A4A004A4A - 4A004A4A4A00C6C6C600C6C6C600C6C6C600FF313100C6C6C600FF313100C6C6 - C600FF000000C6C6C600C6C6C600C6C6C600FFD6D600FF848400C6C6C600C6C6 - C600FF313100C6C6C600FF313100C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C6004242420042424200C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C6004A4A4A00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF004A4A4A004A4A - 4A00C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6004A4A4A00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF004A4A4A00FFFFFF004A4A - 4A00C6C6C600C6C6C600C6C6C600C6C6C600FF000000C6C6C600FF000000C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600FF000000C6C6C600FF000000C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C6004A4A4A00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF004A4A4A004A4A4A004A4A4A004A4A4A00C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6004A4A4A00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF004A4A4A004A4A4A00C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C6004A4A4A00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF004A4A4A00FFFFFF004A4A4A00C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6004A4A4A004A4A - 4A004A4A4A004A4A4A004A4A4A004A4A4A004A4A4A004A4A4A00C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C6004A4A4A00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF004A4A4A004A4A4A00C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C6004A4A4A004A4A4A004A4A4A004A4A - 4A004A4A4A004A4A4A004A4A4A004A4A4A00C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C60042424200424242004242420042424200424242004242 - 420042424200424242004242420042424200C6C6C600C6C6C600424242004242 - 4200424242004242420042424200424242004242420042424200424242004242 - 420042424200C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C60000000000FFFFFF00C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C60042424200FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF0042424200C6C6C60042424200DEEFEF00DEEF - EF00DEEFEF00DEEFEF00DEEFEF00DEEFEF00DEEFEF00DEEFEF00DEEFEF004242 - 4200DEEFEF0042424200C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6000000 - 0000FFFFFF00C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C6000000000000000000000000000000 - 000000000000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600000000000000 - 0000000000000000000000000000C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C60042424200FFFFFF004242420042424200424242004242 - 42004242420042424200FFFFFF00424242004242420042424200424242004242 - 4200424242004242420042424200424242004242420042424200424242004242 - 420042424200DEEFEF0042424200C6C6C600C6C6C600C6C6C600000000000000 - 000000000000FFFFFF00C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C60000000000FFFFFF00C6C6C600C6C6C60000000000DEEFEF00000000000000 - 000000000000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C60000000000DEEF - EF00000000000000000000000000C6C6C6000000000000000000000000000000 - 000000000000C6C6C60042424200FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF004242420042424200DEEFEF00DEEFEF00DEEF - EF00DEEFEF00DEEFEF00DEEFEF0000FFFF0000FFFF0000FFFF00DEEFEF00DEEF - EF00424242004242420042424200C6C6C600C6C6C600C6C6C600000000000000 - 000000000000FFFFFF00C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6000000 - 0000FFFFFF00C6C6C600C6C6C600C6C6C60000000000DEEFEF00000000000000 - 000000000000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C60000000000DEEF - EF00000000000000000000000000C6C6C60000000000DEEFEF00000000000000 - 000000000000C6C6C60042424200FFFFFF004242420042424200424242004242 - 42004242420042424200FFFFFF004242420042424200DEEFEF00DEEFEF00DEEF - EF00DEEFEF00DEEFEF00DEEFEF009CADAD009CADAD009CADAD00DEEFEF00DEEF - EF0042424200DEEFEF0042424200C6C6C600C6C6C600C6C6C600C6C6C6000000 - 00000000000000000000FFFFFF00C6C6C600C6C6C600C6C6C600000000000000 - 0000FFFFFF00C6C6C600C6C6C600C6C6C6000000000000000000000000000000 - 0000000000000000000000000000C6C6C6000000000000000000000000000000 - 0000000000000000000000000000C6C6C60000000000DEEFEF00000000000000 - 000000000000C6C6C60042424200FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00424242004242420042424200424242004242 - 4200424242004242420042424200424242004242420042424200424242004242 - 420042424200DEEFEF00DEEFEF0042424200C6C6C600C6C6C600C6C6C600C6C6 - C600000000000000000000000000FFFFFF00C6C6C6000000000000000000FFFF - FF00C6C6C600C6C6C600C6C6C600C6C6C6000000000000000000DEEFEF000000 - 00000000000000000000000000000000000000000000DEEFEF00000000000000 - 0000000000000000000000000000C6C6C6000000000000000000000000000000 - 0000000000000000000042424200FFFFFF004242420042424200424242004242 - 42004242420042424200FFFFFF004242420042424200DEEFEF00DEEFEF00DEEF - EF00DEEFEF00DEEFEF00DEEFEF00DEEFEF00DEEFEF00DEEFEF00DEEFEF004242 - 4200DEEFEF0042424200DEEFEF0042424200C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C6000000000000000000000000000000000000000000FFFFFF00C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C6000000000000000000DEEFEF000000 - 00000000000000000000DEEFEF000000000000000000DEEFEF00000000000000 - 0000000000000000000000000000C6C6C6000000000000000000DEEFEF000000 - 0000000000000000000042424200FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF0042424200C6C6C60042424200424242004242 - 420042424200424242004242420042424200424242004242420042424200DEEF - EF0042424200DEEFEF004242420042424200C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600000000000000000000000000FFFFFF00C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C6000000000000000000DEEFEF000000 - 00000000000000000000DEEFEF000000000000000000DEEFEF00000000000000 - 0000000000000000000000000000C6C6C6000000000000000000DEEFEF000000 - 0000000000000000000042424200FFFFFF00424242004242420042424200FFFF - FF0042424200424242004242420042424200C6C6C600C6C6C60042424200FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF004242 - 4200DEEFEF0042424200DEEFEF0042424200C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C6000000000000000000000000000000000000000000FFFFFF00C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C60000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 00000000000000000000C6C6C600C6C6C6000000000000000000DEEFEF000000 - 0000000000000000000042424200FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF0042424200FFFFFF0042424200C6C6C600C6C6C600C6C6C600C6C6C6004242 - 4200FFFFFF004242420042424200424242004242420042424200FFFFFF004242 - 4200424242004242420042424200C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600000000000000000000000000FFFFFF00C6C6C60000000000FFFFFF00C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C60000000000DEEF - EF00000000000000000000000000C6C6C60000000000DEEFEF00000000000000 - 000000000000C6C6C600C6C6C600C6C6C600C6C6C60000000000000000000000 - 0000000000000000000042424200FFFFFF00FFFFFF00FFFFFF00FFFFFF004242 - 42004242420042424200C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6004242 - 4200FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF0042424200C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600000000000000 - 00000000000000000000FFFFFF00C6C6C600C6C6C600C6C6C600000000000000 - 0000FFFFFF00C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600000000000000 - 0000000000000000000000000000C6C6C6000000000000000000000000000000 - 000000000000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C60000000000DEEF - EF00000000000000000042424200424242004242420042424200424242004242 - 420042424200C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C60042424200FFFFFF004242420042424200424242004242420042424200FFFF - FF0042424200C6C6C600C6C6C600C6C6C600C6C6C60000000000000000000000 - 000000000000FFFFFF00C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6000000 - 000000000000FFFFFF00C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6000000 - 00000000000000000000C6C6C600C6C6C600C6C6C60000000000000000000000 - 0000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600000000000000 - 0000000000000000000000000000C6C6C6000000000000000000000000000000 - 000000000000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C60042424200FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF0042424200C6C6C600C6C6C600C6C6C6000000000000000000FFFF - FF00C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C6000000000000000000FFFFFF00C6C6C600C6C6C600C6C6C600C6C6C6000000 - 0000DEEFEF0000000000C6C6C600C6C6C600C6C6C60000000000DEEFEF000000 - 0000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6000000 - 00000000000000000000C6C6C600C6C6C600C6C6C60000000000000000000000 - 0000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C6004242420042424200424242004242420042424200424242004242 - 42004242420042424200C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6000000 - 00000000000000000000C6C6C600C6C6C600C6C6C60000000000000000000000 - 0000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6000000 - 0000DEEFEF0000000000C6C6C600C6C6C600C6C6C60000000000DEEFEF000000 - 0000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6000000 - 00000000000000000000C6C6C600C6C6C600C6C6C60000000000000000000000 - 0000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C60000000000000000000000000000000000000000000000 - 000000000000000000000000000000000000C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600FFFFFF0084B58400107310001873 - 18001873180018731800187B1800187B1800107B1000107B1000087B0800087B - 0800007B0000007300007BB57B00FFFFFF00C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C60000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF0000000000C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C6004242420042424200424242004242 - 4200424242004242420042424200424242004242420042424200424242004242 - 4200C6C6C600C6C6C6004242420042424200FFFFFF0010841000218C21002994 - 2900319431003194310029942900299C2900219C210018A5180018A5180010A5 - 100008A5080000940000006B0000FFFFFF00C6C6C60000000000000000000000 - 0000000000000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00000000004A4A4A004A4A4A004A4A4A004A4A - 4A004A4A4A004A4A4A004A4A4A004A4A4A004A4A4A004A4A4A004A4A4A00C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C60042424200FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF004242 - 4200C6C6C600424242004242420042424200FFFFFF00188C180029942900399C - 3900399C3900399C3900FFFFFF00A5D6A5004AA54A004AA54A004AA54A0029A5 - 290018A51800009C0000007B0000FFFFFF000000000000848400008484000000 - 0000000000000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00000000004A4A4A00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF004A4A4A00C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C60042424200FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF004242420042424200424242004242 - 4200424242004242420042424200C6C6C600FFFFFF0021942100399C390042A5 - 420042A5420042A54200FFFFFF00FFFFFF00A5D6A5004AA54A004AA54A0039A5 - 390021A5210008A50800087B0800FFFFFF000000000000848400008484000000 - 0000000000000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00000000004A4A4A00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF004A4A4A00C6C6 - C600C6C6C600C6C6C60000000000C6C6C60042424200FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00424242009CADAD00DEEFEF00DEEFEF009CAD - AD004242420042424200C6C6C600C6C6C600FFFFFF0029942900429C42004AA5 - 4A0052A552004AA54A00FFFFFF00FFFFFF00FFFFFF00A5D6A5004AA54A0039A5 - 390021A5210010A5100008840800FFFFFF000000000000848400008484000000 - 0000000000000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00000000004A4A4A00FFFFFF00FFFFFF00FFFF - FF000000000000000000000000000000000000000000FFFFFF004A4A4A00C6C6 - C600C6C6C600C6C6C60000000000C6C6C60042424200FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00424242009CADAD00DEEFEF00DEEFEF00FFFF00009CAD - AD00FFFFFF0042424200C6C6C600C6C6C600FFFFFF00319C31004AA54A0052A5 - 52004AA54A004AA54A00FFFFFF00FFFFFF00FFFFFF00FFFFFF00A5D6A50039A5 - 390021A5210018A5180010841000FFFFFF000000000000848400008484000000 - 0000000000000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00000000004A4A4A00FFFFFF00FFFFFF00FFFF - FF0000000000000000000000000000000000FFFFFF00FFFFFF004A4A4A00C6C6 - C600C6C6C600C6C6C600C6C6C6000000000042424200FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF0042424200DEEFEF00DEEFEF00DEEFEF00DEEFEF009CAD - AD00DEEFEF0042424200C6C6C600C6C6C600FFFFFF00429C420052A552004AA5 - 4A004AA54A004AA54A00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00A5D6 - A500219C2100219C210018841800FFFFFF000000000000848400008484000084 - 8400008484000084840000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00000000004A4A4A00FFFFFF00FFFFFF00FFFF - FF00000000000000000000000000FFFFFF00FFFFFF00FFFFFF004A4A4A00C6C6 - C600C6C6C600C6C6C600C6C6C6000000000042424200FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF0042424200DEEFEF00FFFF0000DEEFEF00DEEFEF009CAD - AD00DEEFEF0042424200C6C6C600C6C6C600FFFFFF0042A5420052A5520052A5 - 52004AA54A004AA54A00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00A5D6 - A500219C2100219C2100217B2100FFFFFF000000000000848400008484000000 - 0000000000000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00000000000000000000000000000000004A4A4A00FFFFFF00FFFFFF00FFFF - FF000000000000000000FFFFFF0000000000FFFFFF00FFFFFF004A4A4A00C6C6 - C600C6C6C600C6C6C600C6C6C6000000000042424200FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00424242009CADAD00FFFF0000FFFF0000DEEFEF009CAD - AD00FFFFFF0042424200C6C6C600C6C6C600FFFFFF0052A552005AAD5A005AAD - 5A0052A552004AA54A00FFFFFF00FFFFFF00FFFFFF00FFFFFF00A5D6A5003194 - 31002994290029942900217B2100FFFFFF00000000000084840000000000DEEF - EF00DEEFEF00DEEFEF0000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF0000000000FFFFFF0000000000C6C6C6004A4A4A00FFFFFF00FFFFFF00FFFF - FF0000000000FFFFFF00FFFFFF00FFFFFF0000000000000000004A4A4A00C6C6 - C600C6C6C600C6C6C60000000000C6C6C60042424200FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00424242009CADAD00DEEFEF00DEEFEF009CAD - AD0042424200C6C6C600C6C6C600C6C6C600FFFFFF0052A552006BB56B006BB5 - 6B005AAD5A0052AD5200FFFFFF00FFFFFF00FFFFFF00A5D6A500399C39003194 - 31002994290029942900217B2100FFFFFF00000000000084840000000000DEEF - EF00DEEFEF00DEEFEF0000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF000000000000000000C6C6C600C6C6C6004A4A4A00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00000000000000 - 00000000000000000000C6C6C600C6C6C60042424200FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF004242420042424200424242004242 - 4200C6C6C600C6C6C600C6C6C600C6C6C600FFFFFF005AAD5A007BBD7B0073BD - 730063AD63005AAD5A00FFFFFF00FFFFFF00A5D6A500429C4200429C4200399C - 39003194310031943100217B2100FFFFFF00000000000084840000000000DEEF - EF00DEEFEF00DEEFEF0000000000000000000000000000000000000000000000 - 00000000000000000000C6C6C600C6C6C6004A4A4A00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF004A4A4A004A4A4A004A4A4A004A4A4A00C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C60042424200FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF004242 - 4200C6C6C600C6C6C600C6C6C600C6C6C600FFFFFF006BB56B008CC68C007BBD - 7B006BB56B0063B56300FFFFFF00A5D6A5005AAD5A0052A552004AA54A0042A5 - 4200399C390031943100217B2100FFFFFF00000000000084840000000000DEEF - EF00DEEFEF00DEEFEF00DEEFEF00DEEFEF00DEEFEF00DEEFEF00DEEFEF000000 - 00000084840000000000C6C6C600C6C6C6004A4A4A00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF004A4A4A00FFFFFF004A4A4A00C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C60042424200FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF004242420042424200424242004242 - 4200C6C6C600C6C6C600C6C6C600C6C6C600FFFFFF0073BD73009CCE9C008CC6 - 8C007BBD7B0073BD73006BB56B0063B5630063AD63005AAD5A0052AD52004AA5 - 4A0042A542003194310018731800FFFFFF00000000000084840000000000DEEF - EF00DEEFEF00DEEFEF00DEEFEF00DEEFEF00DEEFEF00DEEFEF00DEEFEF000000 - 00000084840000000000C6C6C600C6C6C6004A4A4A00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF004A4A4A004A4A4A00C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C60042424200FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0042424200DEEFEF0042424200C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600FFFFFF00B5DEB50073BD730063B5 - 63005AAD5A0052A5520052A552004AA54A004AA54A0042A54200429C4200399C - 390031943100218C21008CBD8C00FFFFFF00000000000084840000000000DEEF - EF00DEEFEF00DEEFEF00DEEFEF00DEEFEF00DEEFEF00DEEFEF00DEEFEF000000 - 0000DEEFEF0000000000C6C6C600C6C6C6004A4A4A004A4A4A004A4A4A004A4A - 4A004A4A4A004A4A4A004A4A4A004A4A4A00C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C60042424200FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF004242420042424200C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00C6C6C6000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 00000000000000000000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C6004242420042424200424242004242 - 42004242420042424200424242004242420042424200C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C0C0C000C0C0C000C0C0C000C0C0 - C000C0C0C000C0C0C000C0C0C000C0C0C000C0C0C000C0C0C000C0C0C000C0C0 - C000C0C0C000C0C0C000C0C0C000C0C0C000C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00C6C6C600C6C6C600FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00C6C6C600C0C0C000C0C0C000C0C0C000C0C0 - C000C0C0C000C0C0C000C0C0C000000000000000000000000000C0C0C000C0C0 - C000C0C0C000C0C0C000C0C0C000C0C0C000C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C6000000000000000000C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600FFFFFF0052ADFF0018529400185A - 9C00185A9C00185A9C00185AA500185AA500185A9C00185A9C00185294001852 - 940018528C00184A84004AADFF00FFFFFF00FFFFFF0084B58400107310001873 - 18001873180018731800187B1800187B1800107B1000107B1000087B0800087B - 0800007B0000007300007BB57B00FFFFFF00C0C0C000C0C0C000C0C0C000C0C0 - C000C0C0C000000000000000000084008400840084008484840000000000C0C0 - C000C0C0C000C0C0C000C0C0C000C0C0C000C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C6000000000000000000C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600FFFFFF00185AA500186BBD001873 - CE001873CE001873CE001873CE001873CE001873CE001873CE001873CE00186B - C600186BBD00185AA500104A7B00FFFFFF00FFFFFF0010841000218C21002994 - 2900319431003194310029942900299C2900219C210018A5180018A5180010A5 - 100008A5080000940000006B0000FFFFFF00C0C0C000C0C0C000C0C0C0000000 - 0000000000008400840084008400FFFFFF00FFFFFF00C6C6C600848484000000 - 0000C0C0C000C0C0C000C0C0C000C0C0C000C6C6C600C6C6C600C6C6C600C6C6 - C6000000000000000000C6C6C600C6C6C600C6C6C600C6C6C600840000008400 - 000084000000C6C6C600C6C6C600C6C6C600FFFFFF001863AD001873CE00187B - DE00187BDE00187BE7001884E700188CF700188CF700188CF700188CF700187B - DE00186BC6001863AD0018528C00FFFFFF00FFFFFF00188C180029942900399C - 3900399C3900399C390039A539004AA54A00A5D6A500FFFFFF004AA54A0031A5 - 310018A51800009C0000007B0000FFFFFF00C0C0C00000000000000000008400 - 840084008400FFFFFF00FFFFFF000000000000000000C6C6C600C6C6C6008484 - 840000000000C0C0C000C0C0C000C0C0C00000000000C6C6C600C6C6C600C6C6 - C6000000000000000000C6C6C600C6C6C600C6C6C600C6C6C600840000008400 - 000084000000C6C6C600C6C6C600C6C6C600FFFFFF00186BC600187BDE001884 - EF00FFFFFF0084C6FF00188CF700188CF700188CF700188CF70084C6FF00FFFF - FF001873CE00186BBD0018529400FFFFFF00FFFFFF0021942100399C390042A5 - 420042A5420042A542004AA54A00A5D6A500FFFFFF00FFFFFF004AA54A0039A5 - 390021A5210008A50800087B0800FFFFFF00000000008400840084008400FFFF - FF00FFFFFF000000000000000000840084008400840000000000C6C6C600C6C6 - C6008484840000000000C0C0C000C0C0C0000000000000000000C6C6C6000000 - 000000000000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600FFFFFF001873CE001884E700188C - F700188CFF00FFFFFF0084C6FF00188CF700188CF70084C6FF00FFFFFF001884 - E7001873D600186BC600185A9C00FFFFFF00FFFFFF0029942900429C42004AA5 - 4A0052A552004AA54A00A5D6A500FFFFFF00FFFFFF00FFFFFF004AA54A0039A5 - 390021A5210010A5100008840800FFFFFF000000000084008400FFFFFF000000 - 000000000000840084008400840084008400840084008400840000000000C6C6 - C600C6C6C6008484840000000000C0C0C0000000000000000000000000000000 - 000000000000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600840000008400 - 000084848400C6C6C600C6C6C600C6C6C600FFFFFF00187BDE00188CF700188C - FF00188CF700188CF700FFFFFF0084C6FF0084C6FF00FFFFFF00188CF7001884 - E7001873D6001873CE00185AA500FFFFFF00FFFFFF00319C31004AA54A0052A5 - 52004AA54A00A5D6A500FFFFFF00FFFFFF00FFFFFF00FFFFFF004AA54A0039A5 - 390021A5210018A5180010841000FFFFFF000000000000000000000000008400 - 840084008400840084000084840000FFFF008400840084008400840084000000 - 0000C6C6C600C6C6C60084848400000000000000000000000000000000000000 - 000000000000000000000000000000000000C6C6C600C6C6C600840000008400 - 000084848400C6C6C600C6C6C600C6C6C600FFFFFF001884E700188CFF00188C - F700188CF700188CF700188CF700FFFFFF0084C6FF00188CF7001884EF00187B - DE001873CE001873CE001863AD00FFFFFF00FFFFFF00429C420052A552004AA5 - 4A00A5D6A500FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0042A5420031A5 - 3100219C2100219C210018841800FFFFFF000000000084008400840084008400 - 8400840084008400840084008400008484008400840084008400840084008400 - 840000000000C6C6C60000000000C0C0C0000000000000000000000000000000 - 0000000000000000000000000000C6C6C600C6C6C600C6C6C600C6C6C6008400 - 000084000000C6C6C600C6C6C600C6C6C600FFFFFF001884EF00188CFF00188C - FF00188CF700188CF70084C6FF00FFFFFF00FFFFFF0084C6FF001884E7001873 - D6001873CE001873CE001863AD00FFFFFF00FFFFFF0042A5420052A5520052A5 - 5200A5D6A500FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00399C3900299C - 2900219C2100219C2100217B2100FFFFFF00C0C0C00084008400FFFFFF008400 - 84008400840084008400840084008400840000FFFF0000FFFF00840084008400 - 8400840084000000000000000000C0C0C0000000000000000000000000000000 - 00000000000000000000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600840000008400000084848400C6C6C600FFFFFF00188CFF002194FF002194 - FF00188CFF0084C6FF00FFFFFF001884F7001884EF00FFFFFF0084C6FF001873 - CE001873CE001873CE001863AD00FFFFFF00FFFFFF0052A552005AAD5A005AAD - 5A0052A55200A5D6A500FFFFFF00FFFFFF00FFFFFF00FFFFFF00399C39003194 - 31002994290029942900217B2100FFFFFF00C0C0C000C0C0C00084008400FFFF - FF0084008400840084008400840084008400840084000084840000FFFF0000FF - FF00840084008400840000000000C0C0C0000000000000000000000000000000 - 000000000000C6C6C600C6C6C600848484008400000084000000C6C6C600C6C6 - C60084848400840000008400000084848400FFFFFF00188CFF0039A5FF0039A5 - FF0084C6FF00FFFFFF00188CFF00188CFF001884EF001884E700FFFFFF0084C6 - FF001873CE001873CE001863AD00FFFFFF00FFFFFF0052A552006BB56B006BB5 - 6B005AAD5A0052AD5200A5D6A500FFFFFF00FFFFFF00FFFFFF00399C39003194 - 31002994290029942900217B2100FFFFFF00C0C0C000C0C0C000C0C0C0008400 - 8400FFFFFF00840084008400840084008400008484008400840000FFFF0000FF - FF00840084008400840084008400000000000000000000000000000000000000 - 0000C6C6C600C6C6C600C6C6C600840000008400000084848400C6C6C600C6C6 - C600C6C6C600840000008400000084000000FFFFFF002194FF0052ADFF004AAD - FF00FFFFFF002194FF002194FF001894FF00188CF7001884EF001884E700FFFF - FF001873CE001873CE001863AD00FFFFFF00FFFFFF005AAD5A007BBD7B0073BD - 730063AD63005AAD5A005AAD5A00A5D6A500FFFFFF00FFFFFF00429C4200399C - 39003194310031943100217B2100FFFFFF00C0C0C000C0C0C000C0C0C000C0C0 - C00084008400FFFFFF00840084008400840000FFFF0000FFFF0000FFFF008400 - 840084008400840084000000000000000000000000000000000000000000C6C6 - C600C6C6C600C6C6C600C6C6C600840000008400000084848400C6C6C600C6C6 - C600C6C6C600840000008400000084000000FFFFFF0039A5FF006BBDFF0052AD - FF0039A5FF00319CFF00299CFF00299CFF002194FF00188CFF001884F7001884 - EF00187BDE001873CE001863AD00FFFFFF00FFFFFF006BB56B008CC68C007BBD - 7B006BB56B0063B5630063AD630063AD6300A5D6A500FFFFFF004AA54A0042A5 - 4200399C390031943100217B2100FFFFFF00C0C0C000C0C0C000C0C0C000C0C0 - C000C0C0C00084008400FFFFFF00840084008400840084008400840084008400 - 84000000000000000000C0C0C000C0C0C0000000000000000000C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C6008400000084000000C6C6C600C6C6 - C60084848400840000008400000084848400FFFFFF004AADFF0084C6FF006BBD - FF0052ADFF004AADFF0039A5FF00319CFF00299CFF002194FF001894FF00188C - F7001884EF001873CE00185A9C00FFFFFF00FFFFFF0073BD73009CCE9C008CC6 - 8C007BBD7B0073BD73006BB56B0063B5630063AD63005AAD5A0052AD52004AA5 - 4A0042A542003194310018731800FFFFFF00C0C0C000C0C0C000C0C0C000C0C0 - C000C0C0C000C0C0C00084008400FFFFFF008400840084008400000000000000 - 0000C0C0C000C0C0C000C0C0C000C0C0C00000000000C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C60084000000840000008400 - 0000840000008400000084848400C6C6C600FFFFFF00ADDEFF004AADFF00319C - FF002194FF00188CFF00188CFF00188CF700188CF7001884EF001884E700187B - DE001873CE00186BBD0063B5FF00FFFFFF00FFFFFF00B5DEB50073BD730063B5 - 63005AAD5A0052A5520052A552004AA54A004AA54A0042A54200429C4200399C - 390031943100218C21008CBD8C00FFFFFF00C0C0C000C0C0C000C0C0C000C0C0 - C000C0C0C000C0C0C000C0C0C000840084008400840000000000C0C0C000C0C0 - C000C0C0C000C0C0C000C0C0C000C0C0C000C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00C6C6C600C6C6C600FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C60000000000C6C6C600C6C6C600C6C6 - C600848484008484840084848400C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C6000000000000000000000000000000 - 000000000000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600000000000000 - 0000000000000000000000000000C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C6000000000000000000C6C6C600C6C6 - C60084848400C6C6C600C6C6C60084848400C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C60000000000FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C60000000000FFFFFF00000000000000 - 000000000000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C60000000000FFFF - FF00000000000000000000000000C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C60000000000C6C6C60000000000C6C6C600000000000000000000000000C6C6 - C60084848400C6C6C600C6C6C60084848400C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C60000000000FFFFFF00FFFFFF000000 - 0000FFFFFF00FFFFFF00FFFFFF00FFFFFF00C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C60000000000FFFFFF00000000000000 - 000000000000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C60000000000FFFF - FF00000000000000000000000000C6C6C600C6C6C600C6C6C60000000000C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C6000000000000000000C6C6C600C6C6 - C600848484008484840084848400C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C60000000000FFFFFF00FFFFFF0000000000FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00C6C6C600C6C6C600C6C6C6008400 - 000084848400C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C6000000000000000000000000000000 - 0000000000000000000000000000C6C6C6000000000000000000000000000000 - 0000000000000000000000000000C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C60000000000C6C6C600C6C6C600C6C6 - C60084848400C6C6C600C6C6C60084848400C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600000000000000000000000000FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00C6C6C600C6C6C600848484008400 - 0000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C60084000000840000008400 - 00008400000084000000C6C6C600C6C6C6000000000000000000FFFFFF000000 - 00000000000000000000000000000000000000000000FFFFFF00000000000000 - 0000000000000000000000000000C6C6C600C6C6C60000000000C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C60084848400C6C6C600C6C6C60084848400C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C6000000000000000000C6C6C600FFFFFF00FFFFFF000000 - 0000FFFFFF00FFFFFF00FFFFFF00FFFFFF00C6C6C600C6C6C60084000000C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600840000008400 - 00008400000084000000C6C6C600C6C6C6000000000000000000FFFFFF000000 - 00000000000000000000C6C6C6000000000000000000FFFFFF00000000000000 - 0000000000000000000000000000C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C60000000000C6C6 - C600848484008484840084848400C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C60000000000C6C6C600FFFFFF00FFFFFF00FFFFFF0000000000FFFF - FF0000000000FFFFFF00FFFFFF00FFFFFF00C6C6C600C6C6C60084000000C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6008400 - 00008400000084000000C6C6C600C6C6C6000000000000000000FFFFFF000000 - 00000000000000000000C6C6C6000000000000000000FFFFFF00000000000000 - 0000000000000000000000000000C6C6C600C6C6C600C6C6C60000000000C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C60000000000000000000000 - 000000000000FFFFFF00FFFFFF00FFFFFF000000000000000000FFFFFF000000 - 0000FFFFFF0000000000FFFFFF0000000000C6C6C600C6C6C60084000000C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C60084000000C6C6 - C6008400000084000000C6C6C600C6C6C600C6C6C60000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 00000000000000000000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C60000000000C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C6000000000000848400008484000000 - 0000FFFFFF00FFFFFF000000000000000000FFFFFF00FFFFFF0000000000FFFF - FF0000000000FFFFFF0000000000C6C6C600C6C6C600C6C6C600848484008400 - 0000C6C6C600C6C6C600C6C6C600C6C6C6008400000084000000C6C6C600C6C6 - C600C6C6C60084000000C6C6C600C6C6C600C6C6C600C6C6C60000000000FFFF - FF00000000000000000000000000C6C6C60000000000FFFFFF00000000000000 - 000000000000C6C6C600C6C6C600C6C6C60000000000C6C6C600C6C6C600C6C6 - C60000000000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C60000000000FFFFFF00FFFFFF000000 - 0000FFFFFF000000000000848400008484000000000000000000FFFFFF000000 - 0000FFFFFF000000000000000000C6C6C600C6C6C600C6C6C600C6C6C6008484 - 840084000000840000008400000084000000C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600000000000000 - 0000000000000000000000000000C6C6C6000000000000000000000000000000 - 000000000000C6C6C600C6C6C600C6C6C60000000000C6C6C600C6C6C600C6C6 - C60000000000C6C6C600C6C6C600C6C6C600C6C6C60000000000C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C60000000000FFFFFF00000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000084840000000000C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6000000 - 00000000000000000000C6C6C600C6C6C600C6C6C60000000000000000000000 - 0000C6C6C600C6C6C600C6C6C600C6C6C6008484840000000000000000000000 - 000084848400C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C60000000000FFFFFF00FFFFFF000084 - 8400FFFFFF0000848400FFFFFF0000848400FFFFFF0000848400FFFFFF000084 - 8400FFFFFF000084840000000000C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6000000 - 0000FFFFFF0000000000C6C6C600C6C6C600C6C6C60000000000FFFFFF000000 - 0000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C60000000000C6C6C6000000 - 0000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C60000000000C6C6 - C60000000000C6C6C600C6C6C600C6C6C60000000000FFFFFF00000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000084840000000000C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6000000 - 00000000000000000000C6C6C600C6C6C600C6C6C60000000000000000000000 - 0000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C60084848400000000008484 - 8400C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6000000 - 000000000000C6C6C600C6C6C600C6C6C60000000000FFFFFF00FFFFFF000084 - 8400FFFFFF0000848400FFFFFF0000848400FFFFFF0000848400FFFFFF000084 - 8400FFFFFF00C6C6C60000000000C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C60000000000C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600000000000000 - 000000000000C6C6C600C6C6C600C6C6C600C6C6C60000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 00000000000000000000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C6008400000084000000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C60084000000840000008400000084000000840000008400 - 000084000000840000008400000084000000C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6008400 - 0000C6C6C600C6C6C60084000000C6C6C600C6C6C6008400000084000000C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C60084000000840000008400000084000000840000008400 - 0000840000008400000084000000C6C6C600C6C6C60000000000000000000000 - 0000000000000000000084000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF0084000000C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6008400 - 0000C6C6C600C6C6C60084000000C6C6C60084000000C6C6C600C6C6C6008400 - 0000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C60084000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF0084000000C6C6C6000000000084848400008484008484 - 8400008484008484840084000000FFFFFF008400000084000000840000008400 - 00008400000084000000FFFFFF0084000000C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6008400 - 0000C6C6C600C6C6C60084000000C6C6C60084000000C6C6C600C6C6C6008400 - 0000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C60084000000FFFFFF000000000000000000000000000000 - 000000000000FFFFFF0084000000C6C6C6000000000000848400848484000084 - 8400848484000084840084000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF0084000000C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600840000008400000084000000C6C6C60084000000C6C6C600C6C6C6008400 - 0000C6C6C600C6C6C600C6C6C600C6C6C6000000000000000000000000000000 - 0000000000000000000084000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF0084000000C6C6C6000000000084848400008484008484 - 8400008484008484840084000000FFFFFF00840000008400000084000000FFFF - FF0084000000840000008400000084000000C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6008484 - 840084000000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C60084000000C6C6C600840000008400000084000000C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C60000000000FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF0084000000FFFFFF000000000000000000000000000000 - 000000000000FFFFFF0084000000C6C6C6000000000000848400848484000084 - 8400848484000084840084000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF0084000000FFFFFF0084000000C6C6C600C6C6C600C6C6C600840000008400 - 0000840000008400000084000000C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C6008400000084848400C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600840000000000000084000000C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C60000000000FFFFFF00000000000000 - 0000000000000000000084000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF0084000000C6C6C6000000000084848400008484008484 - 8400008484008484840084000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF008400000084000000C6C6C600C6C6C600C6C6C600C6C6C600840000008400 - 00008400000084000000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C60084000000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C60000000000C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C60000000000FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF0084000000FFFFFF000000000000000000FFFFFF008400 - 0000840000008400000084000000C6C6C6000000000000848400848484000084 - 8400848484000084840084000000840000008400000084000000840000008400 - 00008400000000000000C6C6C600C6C6C600C6C6C600C6C6C600840000008400 - 000084000000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C60084000000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600000000000000000000000000C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C60000000000FFFFFF00000000000000 - 0000000000000000000084000000FFFFFF00FFFFFF00FFFFFF00FFFFFF008400 - 0000FFFFFF0084000000C6C6C600C6C6C6000000000084848400008484008484 - 8400008484008484840000848400848484000084840084848400008484008484 - 84000084840000000000C6C6C600C6C6C600C6C6C600C6C6C600840000008400 - 0000C6C6C60084000000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C60084000000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C60000000000C6C6C60000000000C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C60000000000FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF0084000000FFFFFF00FFFFFF00FFFFFF00FFFFFF008400 - 000084000000C6C6C600C6C6C600C6C6C6000000000000848400848484000000 - 0000000000000000000000000000000000000000000000000000000000008484 - 84008484840000000000C6C6C600C6C6C600C6C6C600C6C6C60084000000C6C6 - C600C6C6C600C6C6C6008400000084000000C6C6C600C6C6C600C6C6C600C6C6 - C6008400000084848400C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C6000000000000000000C6C6C6000000000000000000C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C60000000000FFFFFF00000000000000 - 0000FFFFFF000000000084000000840000008400000084000000840000008400 - 0000C6C6C600C6C6C600C6C6C600C6C6C6000000000084848400848484000000 - 0000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600000000008484 - 84000084840000000000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C6008400000084000000840000008400 - 000084848400C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C60000000000C6C6C600C6C6C600C6C6C60000000000C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C60000000000FFFFFF00FFFFFF00FFFF - FF00FFFFFF0000000000FFFFFF0000000000C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C6000000000000848400848484000084 - 84000000000000FFFF00000000000000000000FFFF0000000000848484000084 - 84008484840000000000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C60000000000C6C6C600C6C6C600C6C6C60000000000C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C60000000000FFFFFF00FFFFFF00FFFF - FF00FFFFFF000000000000000000C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C60000000000000000000000 - 0000000000000000000000FFFF0000FFFF000000000000000000000000000000 - 000000000000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C60000000000C6C6C600C6C6C600C6C6C60000000000C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C6000000000000000000000000000000 - 00000000000000000000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C60000000000000000000000000000000000C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000C6C6C600C6C6C600C6C6C600000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000C6C6C600C6C6C600C6C6C6000000000000000000000000000000 - 000000000000000000000000000000000000000000000000000000000000C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C60000000000008484000084 - 8400000000000000000000000000000000000000000000000000C6C6C600C6C6 - C600000000000084840000000000C6C6C600C6C6C60000000000C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6000000 - 0000C6C6C60000000000C6C6C600C6C6C600C6C6C600C6C6C60000000000FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF0000000000C6C6C600C6C6C600C6C6C6000000000000000000008484000084 - 8400008484000084840000848400008484000084840000848400008484000000 - 0000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C60000000000008484000084 - 8400000000000000000000000000000000000000000000000000C6C6C600C6C6 - C600000000000084840000000000C6C6C6000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000C6C6C60000000000C6C6C600C6C6C600C6C6C60000000000FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF0000000000C6C6C600C6C6C600C6C6C6000000000000FFFF00000000000084 - 8400008484000084840000848400008484000084840000848400008484000084 - 840000000000C6C6C600C6C6C600C6C6C600C6C6C60000000000008484000084 - 8400000000000000000000000000000000000000000000000000C6C6C600C6C6 - C600000000000084840000000000C6C6C60000000000C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C60000FFFF0000FFFF0000FFFF00C6C6C600C6C6 - C600000000000000000000000000C6C6C600C6C6C600C6C6C60000000000FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF0000000000C6C6C600C6C6C600C6C6C60000000000FFFFFF0000FFFF000000 - 0000008484000084840000848400008484000084840000848400008484000084 - 84000084840000000000C6C6C600C6C6C600C6C6C60000000000008484000084 - 8400000000000000000000000000000000000000000000000000000000000000 - 0000000000000084840000000000C6C6C60000000000C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600848484008484840084848400C6C6C600C6C6 - C60000000000C6C6C60000000000C6C6C600C6C6C600C6C6C60000000000FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF0000000000C6C6C600C6C6C600C6C6C6000000000000FFFF00FFFFFF0000FF - FF00000000000084840000848400008484000084840000848400008484000084 - 8400008484000084840000000000C6C6C600C6C6C60000000000008484000084 - 8400008484000084840000848400008484000084840000848400008484000084 - 8400008484000084840000000000C6C6C6000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000C6C6C600C6C6C60000000000C6C6C600C6C6C60000000000FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF0000000000C6C6C600C6C6C600C6C6C60000000000FFFFFF0000FFFF00FFFF - FF0000FFFF000000000000000000000000000000000000000000000000000000 - 000000000000000000000000000000000000C6C6C60000000000008484000084 - 8400000000000000000000000000000000000000000000000000000000000000 - 0000008484000084840000000000C6C6C60000000000C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6000000 - 0000C6C6C60000000000C6C6C60000000000C6C6C600C6C6C60000000000FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF0000000000C6C6C600C6C6C600C6C6C6000000000000FFFF00FFFFFF0000FF - FF00FFFFFF0000FFFF00FFFFFF0000FFFF00FFFFFF0000FFFF0000000000C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C60000000000008484000000 - 0000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600000000000084840000000000C6C6C600C6C6C60000000000000000000000 - 000000000000000000000000000000000000000000000000000000000000C6C6 - C60000000000C6C6C6000000000000000000C6C6C600C6C6C60000000000FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF0000000000C6C6C600C6C6C600C6C6C60000000000FFFFFF0000FFFF00FFFF - FF0000FFFF00FFFFFF0000FFFF00FFFFFF0000FFFF00FFFFFF0000000000C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C60000000000008484000000 - 0000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600000000000084840000000000C6C6C600C6C6C600C6C6C60000000000FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000 - 0000C6C6C60000000000C6C6C60000000000C6C6C600C6C6C60000000000FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF0000000000C6C6C600C6C6C600C6C6C6000000000000FFFF00FFFFFF0000FF - FF0000000000000000000000000000000000000000000000000000000000C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C60000000000008484000000 - 0000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600000000000084840000000000C6C6C600C6C6C600C6C6C600C6C6C6000000 - 0000FFFFFF000000000000000000000000000000000000000000FFFFFF000000 - 0000000000000000000000000000C6C6C600C6C6C600C6C6C60000000000FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000000000000000000000 - 000000000000C6C6C600C6C6C600C6C6C600C6C6C60000000000000000000000 - 0000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600000000000000000000000000C6C6C600C6C6C60000000000008484000000 - 0000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600000000000084840000000000C6C6C600C6C6C600C6C6C600C6C6C6000000 - 0000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF0000000000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C60000000000FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000000000FFFFFF000000 - 0000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C6000000000000000000C6C6C600C6C6C60000000000008484000000 - 0000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600000000000000000000000000C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C60000000000FFFFFF000000000000000000000000000000000000000000FFFF - FF0000000000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C60000000000FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000000000000000C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C60000000000C6C6C600C6C6C600C6C6 - C60000000000C6C6C60000000000C6C6C600C6C6C60000000000008484000000 - 0000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C60000000000C6C6C60000000000C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C60000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF0000000000C6C6C600C6C6C600C6C6C600C6C6C600000000000000 - 0000000000000000000000000000000000000000000000000000C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C60000000000000000000000 - 0000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C60000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C6000000000000000000000000000000000000000000000000000000 - 00000000000000000000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 - C600C6C6C600C6C6C600C6C6C600C6C6C600424D3E000000000000003E000000 - 2800000040000000F00000000100010000000000800700000000000000000000 - 000000000000000000000000FFFFFF00F81FFEFFFFFF0000E007FDFFC07F0000 - C003FCFF001F00008001D81F001F00008001E01F001F00000000E01F00000000 - 0000C00300000000000080038000000000004003C00000000000C003C0000000 - 00000003C04100008001C043C04100008001E843C0410000C003E843E0C10000 - E007F843FFC10000F81FF843FFFF0000FEFFFEFFFEFFFFFFFDFFFDFFFDFF003F - FCFFFCFFFCFF003FD81FD81FD81F003FE01FE01FE01F0000E01FE01FE01F0000 - C00BC00BC00B000080078007800700004013401F400F0000C03CC019C00FC000 - 003D0019000FC000C0DDC019C00FC000ECFBEC49E01FC000EB3BE841C21AC000 - FFC7FFDFD61AC000FFF7FC00D7FAFFFFFEFF0000FEFFFEFFFDFF0000FDFFFDE0 - FCFF0000FCFFFCE0D81F0000D81FD800E01F0000E01FE01DE01F0000E01FE00D - C00B0000C00BC0018007000080008007400700004000401FC0038007C000C020 - 0001401F00000000C081C03FC000C0C0ED83003FEC00EDFDEB87C0DFEA00EA0D - FF8FEDFFFE00FE01FF9FEBFFFE00FE0FFEFFFEFFFEFFFEFFFDFFFDFFFDFFFDFF - FCFFFCFFFCFFFCFFD81FD81FD81FD81FE01FE01FE01FE01FE01FE01FE01FE01F - C00BC00BC00BC00B80078000800780074007400040074007C003C000C023C023 - 0001000000110031C081C000C011C0D1ED83EC00EC23EDE3EB87EA00E847EBC7 - FF8FFE00F88FFF8FFF9FFE00F99FFF9FFDFFFE07FE03FEFFE07FFC03FE03FDFF - E00FF801FE03FCFFC003F000FE03D81FC003F000FE03E01F8003F000FE03E01F - 8003F000FC01C00B80010000000080030001000000004001000100000000C000 - 8001000000000000C00300000000C000C00300000000EC00E00300000000EA00 - FC3700000000FF01FF3F00000000FF83F81F0000FE07FFFFE0070000FC03FF7F - C0030000F801FEFF80010000F000FE7F80010000F000EC0F00000F80F000F00F - 00000F80F000F00F0000FE3F0000E0050000E23F0000C0030000E2300000A00F - 000003F00000E01F80011F100000801F80011F1F0000E06FC003F1110000F6FF - E007F1F10000F5FFF81FF1F10000FFFFFE00FC3FFFFFFCFFFE00C003FC7FF8CF - FE008001F81FF08FFE008001F007F80FE0008001E001F08FC00083C1C000F00F - 800007E08000E00F000107E00000F00F000107E00000E00F000107E00001C007 - 000183C10003C003000180010007C00300038001800FC003801F8001E01FE003 - C03FC003F83FF007E07FFC3FFE7FFF0FFE00FE00FFFFFFFFFE00FE00C007C007 - F8008000C007C007F800000000070007F800000000070007F800000000070007 - 0000000000070007000000000007000700010001000700070003000300070007 - 000100030007000700000003000F000F001F0003001F001F001F0003003F003F - 001F0003007F007F8FFF000300FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC007 - C007FFFFFFFFC007C007F73FFFFF0007C007F63FFFFF0007C007F47FF9100007 - C007F0FFDD240007C007F1FFDC600007C007F1FF05040007C00754F5DD000007 - C0075675DDFF0007C0075735F9FF000FC00F5FF5FFFF001FC01FFFFFFFFF003F - C03FFFFFFFFF007FFFFFFFFFFFFF00FFFFFFFFFFFFFFFC00C007FFF9FFFFFC00 - 8003E7FF07C1FC000001C3F307C104000001C3E707C104000001E1C701010400 - 0000F08F000100000000F81F000100008000FC3F00010000C000F81F80030001 - E001F09FC1078003E007C1C7C107C007F00783E3E38FC107F0038FF1E38FE38F - F803FFFFE38FE38FFFFFFFFFFFFFE38F8001FC00FFFFFFFF0000FC00FFFF000C - 00008000001F000800000000001F000100000000001D000300000000001D0003 - 00000000001E000300000000001E000300000000001E000300000001001D0007 - 000000030003000F00000003001F000F00000003003F000F00000003007F001F - 0000000300FF003F80010003FFFF007FFFFFFFFF80018001FE3FF9FF00000000 - F81FF9FF00000000E00FF3C700000000800773C700000000000327FF00000000 - 000107C700000000000000C700000000000101E700000000800103F100000000 - C001063000000000E0000E3800000000F0001E3800000000F8033F3000000000 - FC0F7F8100000000FE3FFFFF80018001FFFFFFFFFFFFFFFFFFFFFFFFFF71FFFF - FFFF07C1FF36FF81FFFF07C1F516FF00FFFF07C1DF31FE00E7FF0101FF76FE00 - CF830001BFF6FC00DFC30001FFD1F800DFE30001DFFF8000DFD38003FFBF0001 - CF3BC10777FF0001E0FFC10777BF0001FFFFE38F07FF0001FFFFE38FAFD70001 - FFFFE38F8FE70001FFFFFFFFDFC78003FFFFFFFFFFFFFFFFF3FFFFFFFC00FFFF - ED9FFC018000FFFFED6FFC010000FFFFED6FFC010000FFFFF16F00010000FFE7 - FD1F00010001C1F3FC7F00010003C3FBFEFF00010003C7FBFC7F00030003CBFB - FD7F00070003DCF3F93F000F0003FF07FBBF00FF0003FFFFFBBF01FF8007FFFF - FBBF03FFF87FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC001C007 - C007001F80018003C007000F80010001C007000780010001C007000380010001 - C007000180010000C007000080010000C007001F80018000C007001F8001C000 - C007001F8001E001C0078FF18001E007C00FFFF98001F007C01FFF758001F003 - C03FFF8F8001F803FFFFFFFFFFFFFFFF00000000000000000000000000000000 - 000000000000} - end - object ApplicationEvents1: TApplicationEvents - OnHelp = ApplicationEvents1Help - OnMessage = ApplicationEvents1Message - Left = 484 - Top = 176 - end - object dockServer: TJvDockServer - LeftSplitterStyle.Cursor = crHSplit - LeftSplitterStyle.ParentColor = False - RightSplitterStyle.Cursor = crHSplit - RightSplitterStyle.ParentColor = False - TopSplitterStyle.Cursor = crVSplit - TopSplitterStyle.ParentColor = False - BottomSplitterStyle.Cursor = crVSplit - BottomSplitterStyle.ParentColor = False - DockStyle = JvDockVSNetStyle1 - Left = 616 - Top = 304 - end - object JvDockVSNetStyle1: TJvDockVSNetStyle - AlwaysShowGrabber = False - TabServerOption.ActiveFont.Charset = DEFAULT_CHARSET - TabServerOption.ActiveFont.Color = clWindowText - TabServerOption.ActiveFont.Height = -11 - TabServerOption.ActiveFont.Name = 'Tahoma' - TabServerOption.ActiveFont.Style = [] - TabServerOption.InactiveFont.Charset = DEFAULT_CHARSET - TabServerOption.InactiveFont.Color = 5395794 - TabServerOption.InactiveFont.Height = -11 - TabServerOption.InactiveFont.Name = 'Tahoma' - TabServerOption.InactiveFont.Style = [] - TabServerOption.ShowCloseButtonOnTabs = False - Left = 528 - Top = 312 - end - object mnuReloadAsFormat: TPopupMenu - Left = 296 - Top = 80 - object ANSI1: TMenuItem - Caption = 'ANSI' - end - object UTF81: TMenuItem - Caption = 'UTF-8' - end - object UTF161: TMenuItem - Caption = 'UTF-16' - end - end - object MainMenu1: TMainMenu - Images = lstImages - Left = 448 - Top = 376 - object File1: TMenuItem - Caption = '&File' - OnClick = mnuFileClick - object New1: TMenuItem - Action = modActionsMain.actFileNew - end - object Open1: TMenuItem - Action = modActionsMain.actFileOpen - end - object Save1: TMenuItem - Action = modActionsMain.actFileSave - end - object SaveAs1: TMenuItem - Action = modActionsMain.actFileSaveAs - end - object Savecopyas1: TMenuItem - Action = modActionsMain.actFileSaveCopyAs - end - object Revert1: TMenuItem - Action = modActionsMain.actFileRevert - end - object N5: TMenuItem - Caption = '-' - end - object Close1: TMenuItem - Action = modActionsMain.actWindowClose - end - object N6: TMenuItem - Caption = '-' - end - object PageSetup1: TMenuItem - Action = modActionsMain.actFilePageSetup - end - object PrintPreview1: TMenuItem - Action = modActionsMain.actFilePrintPreview - end - object Print1: TMenuItem - Action = modActionsMain.actFilePrint - end - object N9: TMenuItem - Caption = '-' - end - object mnuFileRecent: TMenuItem - Caption = 'Recent &Files' - object TMenuItem - end - end - object N8: TMenuItem - Caption = '-' - end - object Exit1: TMenuItem - Action = modActionsMain.actFileExit - end - end - object Edit1: TMenuItem - Caption = '&Edit' - object Undo1: TMenuItem - Action = modActionsMain.actEditUndo - end - object Redo1: TMenuItem - Action = modActionsMain.actEditRedo - end - object N10: TMenuItem - Caption = '-' - end - object Cut1: TMenuItem - Action = modActionsMain.actEditCut - end - object Copy1: TMenuItem - Action = modActionsMain.actEditCopy - end - object Paste1: TMenuItem - Action = modActionsMain.actEditPaste - end - object N18: TMenuItem - Caption = '-' - end - object Delete1: TMenuItem - Action = modActionsMain.actEditDelete - end - object N19: TMenuItem - Caption = '-' - end - object SelectAll1: TMenuItem - Action = modActionsMain.actEditSelectAll - end - object N20: TMenuItem - Caption = '-' - end - object Find1: TMenuItem - Action = modActionsMain.actSearchFind - end - object FindNext1: TMenuItem - Action = modActionsMain.actSearchFindNext - end - object Replace1: TMenuItem - Action = modActionsMain.actSearchReplace - end - object N21: TMenuItem - Caption = '-' - end - object ReformatXMLDocument1: TMenuItem - Action = modActionsTextEditor.actTextEditor_ReformatXML - end - object N1: TMenuItem - Caption = '-' - end - object Reloadwithencoding1: TMenuItem - Caption = 'Reload with &encoding' - object ReloadasANSI1: TMenuItem - Action = modActionsMain.actToolsReloadANSI - end - object ReloadasUTF81: TMenuItem - Action = modActionsMain.actToolsReloadUTF8 - end - object ReloadasUTF161: TMenuItem - Action = modActionsMain.actToolsReloadUTF16 - end - end - end - object View1: TMenuItem - Caption = '&View' - object Project2: TMenuItem - Action = modActionsMain.actViewProject - end - object N22: TMenuItem - Caption = '-' - end - object CharacterIdentifier1: TMenuItem - Action = modActionsMain.actViewCharacterIdentifier - end - object CharacterMap1: TMenuItem - Action = modActionsMain.actViewCharacterMap - end - object Messages1: TMenuItem - Action = modActionsMain.actViewMessages - end - object ContextHelp1: TMenuItem - Action = modActionsMain.actViewHelp - end - object oolbar1: TMenuItem - Action = modActionsMain.actViewToolbar - end - object StatusBar1: TMenuItem - Action = modActionsMain.actViewStatusBar - end - object N23: TMenuItem - Caption = '-' - end - object ExpandEditor1: TMenuItem - Action = modActionsMain.actViewExpandEditor - end - object N24: TMenuItem - Caption = '-' - end - object CharacterFont1: TMenuItem - Action = modActionsMain.actViewCharFont - end - object CodeFont1: TMenuItem - Action = modActionsMain.actViewCodeFont - end - end - object Project1: TMenuItem - Caption = '&Project' - OnClick = mnuProjectClick - object NewProject1: TMenuItem - Action = modActionsMain.actProjectNew - end - object OpenProject1: TMenuItem - Action = modActionsMain.actProjectOpen - end - object CloseProject1: TMenuItem - Action = modActionsMain.actProjectClose - end - object N25: TMenuItem - Caption = '-' - end - object mnuProjectsRecent: TMenuItem - Caption = '&Recent Projects' - end - object N26: TMenuItem - Caption = '-' - end - object mnuProjectAddToProject: TMenuItem - Caption = 'A&dd to project' - object CurrentEditorFile1: TMenuItem - Action = modActionsMain.actProjectAddCurrentEditorFile - end - object OtherFiles1: TMenuItem - Action = modActionsMain.actProjectAddFiles - end - end - object N27: TMenuItem - Caption = '-' - end - object ProjectSettings1: TMenuItem - Action = modActionsMain.actProjectSettings - end - end - object mnuModel: TMenuItem - Caption = '&Model' - object CompileModel1: TMenuItem - Action = modActionsModelEditor.actModelCompile - end - object N2: TMenuItem - Caption = '-' - end - object estLexicalModel1: TMenuItem - Action = modActionsModelEditor.actModelTest - end - end - object mnuKeyboard: TMenuItem - Caption = '&Keyboard' - object CompileKeyboard1: TMenuItem - Action = modActionsKeyboardEditor.actKeyboardCompile - end - object N28: TMenuItem - Caption = '-' - end - object IncludeDebugInformation1: TMenuItem - Action = modActionsKeyboardEditor.actKeyboardIncludeDebugInformation - end - object estKeyboard1: TMenuItem - Action = modActionsKeyboardEditor.actKeyboardTest - end - object N29: TMenuItem - Caption = '-' - end - object Install1: TMenuItem - Action = modActionsKeyboardEditor.actKeyboardInstall - end - object Uninstall1: TMenuItem - Action = modActionsKeyboardEditor.actKeyboardUninstall - end - object N31: TMenuItem - Caption = '-' - end - object Fonts1: TMenuItem - Action = modActionsKeyboardEditor.actKeyboardFonts - end - object FontHelper1: TMenuItem - Action = modActionsKeyboardEditor.actKeyboardFontHelper - end - end - object mnuDebug: TMenuItem - Caption = '&Debug' - object SetBreakpoint1: TMenuItem - Action = modActionsDebugger.actDebugSetClearBreakpoint - end - object N32: TMenuItem - Caption = '-' - end - object StartDebugging1: TMenuItem - Action = modActionsDebugger.actDebugStartDebugger - end - object StopDebugger1: TMenuItem - Action = modActionsDebugger.actDebugStopDebugger - end - object N33: TMenuItem - Caption = '-' - end - object ANSITestMode1: TMenuItem - Action = modActionsDebugger.actDebugANSITestMode - end - object N34: TMenuItem - Caption = '-' - end - object SingleStepMode1: TMenuItem - Action = modActionsDebugger.actDebugSingleStepMode - end - object N35: TMenuItem - Caption = '-' - end - object StepForward1: TMenuItem - Action = modActionsDebugger.actDebugStepForward - end - object Run1: TMenuItem - Action = modActionsDebugger.actDebugRun - end - object Pause1: TMenuItem - Action = modActionsDebugger.actDebugPause - end - object N36: TMenuItem - Caption = '-' - end - object View2: TMenuItem - Caption = '&View' - object State1: TMenuItem - Action = modActionsDebugger.actDebugViewState - end - object Elements1: TMenuItem - Action = modActionsDebugger.actDebugViewElements - end - object CallStack1: TMenuItem - Action = modActionsDebugger.actDebugViewCallStack - end - object Deadkeys1: TMenuItem - Action = modActionsDebugger.actDebugViewDeadkeys - end - object RegressionTesting1: TMenuItem - Action = modActionsDebugger.actDebugViewRegressionTesting - end - object N38: TMenuItem - Caption = '-' - end - object Font1: TMenuItem - Action = modActionsDebugger.actDebugViewFont - end - object UseEditorCharacterFont1: TMenuItem - Action = modActionsDebugger.actDebugViewDefaultFont - end - end - object N37: TMenuItem - Caption = '-' - end - object SelectSystemKeyboard1: TMenuItem - Action = modActionsDebugger.actDebugSelectSystemKeyboard - end - end - object mnuTools: TMenuItem - Caption = '&Tools' - OnClick = mnuToolsClick - object VirtualKeyIdentifier1: TMenuItem - Action = modActionsMain.actToolsVirtualKeyIdentifier - end - object N39: TMenuItem - Caption = '-' - end - object mnuToolsWebDebugger: TMenuItem - Caption = '&Server' - object mnuToolsWebDebuggerOpenInBrowser: TMenuItem - Action = modActionsMain.actToolsWebOpenPublicUrl - end - object mnuToolsWebDebuggerCopyToClipboard: TMenuItem - Action = modActionsMain.actToolsWebCopyPublicUrl - end - object N11: TMenuItem - Caption = '-' - end - object Startserver1: TMenuItem - Action = modActionsMain.actToolsWebStartServer - end - object Stopserver1: TMenuItem - Action = modActionsMain.actToolsWebStopServer - end - object N7: TMenuItem - Caption = '-' - end - object mnuToolsWebDebuggerConfigure: TMenuItem - Action = modActionsMain.actToolsWebConfigure - end - end - object N4: TMenuItem - Caption = '-' - end - object Options1: TMenuItem - Action = modActionsMain.actToolsOptions - end - object mnuToolsDebugTests: TMenuItem - Caption = 'Debug Tests' - object mnuToolsDebugTestsShowDebuggerEventsPanel: TMenuItem - Caption = 'Show Debugger Events panel' - OnClick = mnuToolsDebugTestsShowDebuggerEventsPanelClick - end - object N3: TMenuItem - Caption = '-' - end - object mnuToolsDebugTestsExceptionTest: TMenuItem - Caption = '&Exception Test' - OnClick = mnuToolsDebugTestsExceptionTestClick - end - end - end - object mnuWindow: TMenuItem - Caption = '&Window' - OnClick = mnuWindowClick - object Newwindow1: TMenuItem - Action = modActionsMain.actWindowNew - end - object N12: TMenuItem - Caption = '-' - end - end - object Help1: TMenuItem - Caption = '&Help' - object Contents1: TMenuItem - Action = modActionsMain.actHelpContents - end - object N40: TMenuItem - Caption = '-' - end - object CheckforUpdates1: TMenuItem - Action = modActionsMain.actHelpCheckForUpdates - end - object N41: TMenuItem - Caption = '-' - end - object About1: TMenuItem - Action = modActionsMain.actHelpAbout - end - end - end -end +inherited frmKeymanDeveloper: TfrmKeymanDeveloper + Left = 484 + Top = 327 + Caption = 'Keyman Developer' + ClientHeight = 760 + ClientWidth = 1087 + DoubleBuffered = True + Font.Name = 'MS Sans Serif' + KeyPreview = True + Menu = MainMenu1 + Position = poDefault + WindowState = wsMaximized + OnClose = FormClose + OnCloseQuery = FormCloseQuery + OnDestroy = FormDestroy + ExplicitWidth = 1103 + ExplicitHeight = 819 + PixelsPerInch = 96 + TextHeight = 13 + object barStatus: TStatusBar + Left = 0 + Top = 741 + Width = 1087 + Height = 19 + Constraints.MaxHeight = 19 + Constraints.MinHeight = 19 + Panels = < + item + Alignment = taCenter + Text = 'Line 1, Col 1' + Width = 100 + end + item + Alignment = taCenter + Text = 'Insert' + Width = 120 + end + item + Width = 50 + end> + end + object pages: TCloseButtonPageControl + Left = 0 + Top = 24 + Width = 1087 + Height = 717 + Align = alClient + OwnerDraw = True + TabOrder = 1 + OnChange = pagesChange + OnCloseTab = pagesCloseTab + end + object barTools: TControlBar + Left = 0 + Top = 0 + Width = 1087 + Height = 24 + Align = alTop + AutoDock = False + AutoDrag = False + BevelInner = bvNone + BevelOuter = bvNone + DockSite = False + TabOrder = 2 + object panDebugToolbar: TPanel + Left = 481 + Top = 2 + Width = 512 + Height = 23 + AutoSize = True + BevelOuter = bvNone + TabOrder = 0 + object SpeedButton1: TSpeedButton + Left = 0 + Top = 0 + Width = 82 + Height = 22 + Action = modActionsDebugger.actDebugTestMode + AllowAllUp = True + GroupIndex = 1 + end + object SpeedButton2: TSpeedButton + Left = 83 + Top = 0 + Width = 98 + Height = 22 + Action = modActionsDebugger.actDebugDebuggerMode + AllowAllUp = True + GroupIndex = 2 + end + object cbDebugSystemKeyboard: TComboBox + Left = 367 + Top = 1 + Width = 145 + Height = 21 + Style = csDropDownList + TabOrder = 0 + Visible = False + OnClick = cbDebugSystemKeyboardItemClick + OnDropDown = cbDebugSystemKeyboard_DropDown + end + object ToolBar2: TToolBar + Left = 187 + Top = 1 + Width = 174 + Height = 22 + Align = alNone + ButtonHeight = 23 + Caption = 'ToolBar2' + Images = lstImages + TabOrder = 1 + object ToolButton20: TToolButton + Left = 0 + Top = 0 + Width = 8 + Caption = 'ToolButton20' + ImageIndex = 0 + Style = tbsSeparator + end + object ToolButton21: TToolButton + Left = 8 + Top = 0 + Action = modActionsDebugger.actDebugStopDebugger + end + object ToolButton23: TToolButton + Left = 31 + Top = 0 + Width = 8 + Caption = 'ToolButton23' + ImageIndex = 47 + Style = tbsSeparator + end + object ToolButton22: TToolButton + Left = 39 + Top = 0 + Action = modActionsDebugger.actDebugSingleStepMode + end + object ToolButton24: TToolButton + Left = 62 + Top = 0 + Width = 8 + Caption = 'ToolButton24' + ImageIndex = 47 + Style = tbsSeparator + end + object ToolButton25: TToolButton + Left = 70 + Top = 0 + Action = modActionsDebugger.actDebugStepForward + end + object ToolButton26: TToolButton + Left = 93 + Top = 0 + Action = modActionsDebugger.actDebugRun + end + object ToolButton27: TToolButton + Left = 116 + Top = 0 + Action = modActionsDebugger.actDebugPause + end + object ToolButton28: TToolButton + Left = 139 + Top = 0 + Width = 8 + Caption = 'ToolButton28' + ImageIndex = 58 + Style = tbsSeparator + end + object ToolButton29: TToolButton + Left = 147 + Top = 0 + Action = modActionsDebugger.actDebugSetClearBreakpoint + end + end + end + object panToolbar: TPanel + Left = 11 + Top = 2 + Width = 448 + Height = 23 + AutoSize = True + BevelOuter = bvNone + TabOrder = 1 + object ToolBar1: TToolBar + Left = 0 + Top = 0 + Width = 270 + Height = 23 + Align = alNone + AutoSize = True + ButtonHeight = 23 + Caption = 'ToolBar1' + Images = lstImages + TabOrder = 0 + Wrapable = False + object ToolButton1: TToolButton + Left = 0 + Top = 0 + Action = modActionsMain.actFileNew + end + object ToolButton2: TToolButton + Left = 23 + Top = 0 + Action = modActionsMain.actFileOpen + end + object ToolButton3: TToolButton + Left = 46 + Top = 0 + Action = modActionsMain.actFileSave + end + object ToolButton4: TToolButton + Left = 69 + Top = 0 + Width = 8 + Caption = 'ToolButton4' + ImageIndex = 3 + Style = tbsSeparator + end + object ToolButton7: TToolButton + Left = 77 + Top = 0 + Action = modActionsMain.actEditCut + end + object ToolButton8: TToolButton + Left = 100 + Top = 0 + Action = modActionsMain.actEditCopy + end + object ToolButton9: TToolButton + Left = 123 + Top = 0 + Action = modActionsMain.actEditPaste + end + object ToolButton10: TToolButton + Left = 146 + Top = 0 + Width = 8 + Caption = 'ToolButton10' + ImageIndex = 7 + Style = tbsSeparator + end + object ToolButton11: TToolButton + Left = 154 + Top = 0 + Action = modActionsMain.actEditUndo + end + object ToolButton12: TToolButton + Left = 177 + Top = 0 + Action = modActionsMain.actEditRedo + end + object ToolButton19: TToolButton + Left = 200 + Top = 0 + Width = 8 + Caption = 'ToolButton19' + ImageIndex = 57 + Style = tbsSeparator + end + object ToolButton14: TToolButton + Left = 208 + Top = 0 + Action = modActionsMain.actViewExpandEditor + end + object ToolButton15: TToolButton + Left = 231 + Top = 0 + Width = 8 + Caption = 'ToolButton15' + ImageIndex = 56 + Style = tbsSeparator + end + object ToolButton16: TToolButton + Left = 239 + Top = 0 + Action = modActionsKeyboardEditor.actKeyboardCompile + end + object ToolButton13: TToolButton + Left = 262 + Top = 0 + Width = 8 + Caption = 'ToolButton13' + ImageIndex = 57 + Style = tbsSeparator + end + end + object cbTextFileFormat: TComboBox + Left = 303 + Top = 1 + Width = 145 + Height = 21 + Style = csDropDownList + TabOrder = 1 + OnClick = cbTextFileFormatItemClick + Items.Strings = ( + 'ANSI' + 'UTF-8' + 'UTF-16') + end + end + end + object ilPages: TImageList + Left = 304 + Top = 236 + Bitmap = { + 494C01010A000E00040010001000FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600 + 0000000000003600000028000000400000003000000001002000000000000030 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00000000000000000000000000000000000000 + 0000B5CEC600C6DED600C6DED600C6DED600C6DED600C6DED600C6E7DE000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000B5CEC600BDD6C600C6DECE00CEDED600CEDED600C6DECE00BDD6C600BDD6 + C600000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000FFFFFF0084B58400107310001873 + 18001873180018731800187B1800187B1800107B1000107B1000087B0800087B + 0800007B0000007300007BB57B00FFFFFF00000000000000000000000000BDD6 + CE00CEDECE00DEE7E700E7EFEF00EFF7F700EFF7EF00E7EFE700CEDED600B5CE + C60000000000000000000000000000000000000000000000000000000000BDCE + C600D6E7DE00EFF7EF00F7F7F700F7F7F700EFF7F700EFF7F700E7EFEF00D6DE + D600BDCEC6000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000FFFFFF0010841000218C21002994 + 2900319431003194310029942900299C2900219C210018A5180018A5180010A5 + 100008A5080000940000006B0000FFFFFF000000000000000000BDD6C600DEE7 + E700F7FFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00E7EF + EF00C6D6CE000000000000000000000000000000000000000000BDCEC600E7EF + E700F7FFFF00F7FFFF00F7FFFF00F7FFFF00F7FFFF00F7FFF700F7F7F700EFF7 + F700DEE7DE00BDD6C60000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000FFFFFF00188C180029942900399C + 3900399C3900399C3900FFFFFF00A5D6A5004AA54A004AA54A004AA54A0029A5 + 290018A51800009C0000007B0000FFFFFF0000000000BDD6C600DEE7E700FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00F7F7F700C6D6CE00000000000000000000000000BDCEC600E7EFE700FFFF + FF00FFFFFF00FFFFFF00FFFFFF0018634A00FFFFFF00FFFFFF00FFFFFF00F7FF + F700EFF7F700DEE7DE00BDCEC600000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000FFFFFF0021942100399C390042A5 + 420042A5420042A54200FFFFFF00FFFFFF00A5D6A5004AA54A004AA54A0039A5 + 390021A5210008A50800087B0800FFFFFF00C6DED600D6DEDE00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00EFF7EF00BDCEC60000000000BDD6CE00D6E7DE00FFFFFF00FFFF + FF00FFFFFF00FFFFFF0018634A0018634A0018634A00FFFFFF00FFFFFF00FFFF + FF00F7FFF700EFF7F700CEDED600BDD6CE000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000FFFFFF0029942900429C42004AA5 + 4A0052A552004AA54A00FFFFFF00FFFFFF00FFFFFF00A5D6A5004AA54A0039A5 + 390021A5210010A5100008840800FFFFFF00BDD6CE00EFF7EF00FFFFFF00FFFF + FF0018634A0018634A00FFFFFF00FFFFFF00FFFFFF0018634A0018634A00FFFF + FF00FFFFFF00FFFFFF00D6DED600BDDECE00BDD6C600EFF7F700FFFFFF00FFFF + FF00FFFFFF0018634A0018634A00FFFFFF0018634A0018634A00FFFFFF00FFFF + FF00FFFFFF00F7FFF700DEEFE700BDD6CE000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000FFFFFF00319C31004AA54A0052A5 + 52004AA54A004AA54A00FFFFFF00FFFFFF00FFFFFF00FFFFFF00A5D6A50039A5 + 390021A5210018A5180010841000FFFFFF00C6DECE00FFFFFF00FFFFFF00FFFF + FF00FFFFFF0018634A0018634A00FFFFFF0018634A0018634A00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00E7EFEF00BDD6CE00C6D6CE00FFFFFF00FFFFFF00FFFF + FF0018634A0018634A00FFFFFF00FFFFFF00FFFFFF0018634A0018634A00FFFF + FF00FFFFFF00F7FFFF00E7EFEF00BDD6CE000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000FFFFFF00429C420052A552004AA5 + 4A004AA54A004AA54A00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00A5D6 + A500219C2100219C210018841800FFFFFF00CEDED600FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF0018634A0018634A0018634A00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00EFF7EF00BDD6CE00CEDED600FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF0018634A00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00EFF7EF00BDD6CE000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000FFFFFF0042A5420052A5520052A5 + 52004AA54A004AA54A00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00A5D6 + A500219C2100219C2100217B2100FFFFFF00CEDED600FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF0018634A00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00EFF7EF00BDD6CE00CEDED600FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF0018634A0018634A0018634A00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00EFF7EF00BDD6CE000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000FFFFFF0052A552005AAD5A005AAD + 5A0052A552004AA54A00FFFFFF00FFFFFF00FFFFFF00FFFFFF00A5D6A5003194 + 31002994290029942900217B2100FFFFFF00C6D6CE00FFFFFF00FFFFFF00FFFF + FF0018634A0018634A00FFFFFF00FFFFFF00FFFFFF0018634A0018634A00FFFF + FF00FFFFFF00F7FFFF00E7EFEF00BDD6CE00C6DECE00FFFFFF00FFFFFF00FFFF + FF00FFFFFF0018634A0018634A00FFFFFF0018634A0018634A00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00E7EFEF00BDD6CE000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000FFFFFF0052A552006BB56B006BB5 + 6B005AAD5A0052AD5200FFFFFF00FFFFFF00FFFFFF00A5D6A500399C39003194 + 31002994290029942900217B2100FFFFFF00BDD6C600EFF7F700FFFFFF00FFFF + FF00FFFFFF0018634A0018634A00FFFFFF0018634A0018634A00FFFFFF00FFFF + FF00FFFFFF00F7FFF700DEEFE700BDD6CE00BDD6CE00EFF7EF00FFFFFF00FFFF + FF0018634A0018634A00FFFFFF00FFFFFF00FFFFFF0018634A0018634A00FFFF + FF00FFFFFF00FFFFFF00D6DED600BDDECE000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000FFFFFF005AAD5A007BBD7B0073BD + 730063AD63005AAD5A00FFFFFF00FFFFFF00A5D6A500429C4200429C4200399C + 39003194310031943100217B2100FFFFFF00BDD6CE00D6E7DE00FFFFFF00FFFF + FF00FFFFFF00FFFFFF0018634A0018634A0018634A00FFFFFF00FFFFFF00FFFF + FF00F7FFF700EFF7F700CEDED600BDD6CE00C6DED600D6DEDE00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00EFF7EF00BDCEC600000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000FFFFFF006BB56B008CC68C007BBD + 7B006BB56B0063B56300FFFFFF00A5D6A5005AAD5A0052A552004AA54A0042A5 + 4200399C390031943100217B2100FFFFFF0000000000BDCEC600E7EFE700FFFF + FF00FFFFFF00FFFFFF00FFFFFF0018634A00FFFFFF00FFFFFF00FFFFFF00F7FF + F700EFF7F700DEE7DE00BDCEC6000000000000000000BDD6C600DEE7E700FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00F7F7F700C6D6CE0000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000FFFFFF0073BD73009CCE9C008CC6 + 8C007BBD7B0073BD73006BB56B0063B5630063AD63005AAD5A0052AD52004AA5 + 4A0042A542003194310018731800FFFFFF000000000000000000BDCEC600E7EF + E700F7FFFF00F7FFFF00F7FFFF00F7FFFF00F7FFFF00F7FFF700F7F7F700EFF7 + F700DEE7DE00BDD6C60000000000000000000000000000000000BDD6C600DEE7 + E700F7FFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00E7EF + EF00C6D6CE000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000FFFFFF00B5DEB50073BD730063B5 + 63005AAD5A0052A5520052A552004AA54A004AA54A0042A54200429C4200399C + 390031943100218C21008CBD8C00FFFFFF00000000000000000000000000BDCE + C600D6E7DE00EFF7EF00F7F7F700F7F7F700EFF7F700EFF7F700E7EFEF00D6DE + D600BDCEC600000000000000000000000000000000000000000000000000BDD6 + CE00CEDECE00DEE7E700E7EFEF00EFF7F700EFF7EF00E7EFE700CEDED600B5CE + C600000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00000000000000000000000000000000000000 + 0000B5CEC600BDD6C600C6DECE00CEDED600CEDED600C6DECE00BDD6C600BDD6 + C600000000000000000000000000000000000000000000000000000000000000 + 0000B5CEC600C6DED600C6DED600C6DED600C6DED600C6DED600C6E7DE000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF000000000000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF000000000000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00000000000000000000000000000000000000 + 0000BDBDBD000000840000007300100000006363630000000000000000000000 + 000000000000000000000000000000000000FFFFFF0084B58400107310001873 + 18001873180018731800187B1800187B1800107B1000107B1000087B0800087B + 0800007B0000007300007BB57B00FFFFFF00FFFFFF0052ADFF0018529400185A + 9C00185A9C00185A9C00185AA500185AA500185A9C00185A9C00185294001852 + 940018528C00184A84004AADFF00FFFFFF00FFFFFF0084B58400107310001873 + 18001873180018731800187B1800187B1800107B1000107B1000087B0800087B + 0800007B0000007300007BB57B00FFFFFF000000000000000000BDBDBD003131 + 31000000AD000000FF000000DE00000042005252520000000000000000000000 + 000000000000000000000000000000000000FFFFFF0010841000218C21002994 + 2900319431003194310029942900299C2900219C210018A5180018A5180010A5 + 100008A5080000940000006B0000FFFFFF00FFFFFF00185AA500186BBD001873 + CE001873CE001873CE001873CE001873CE001873CE001873CE001873CE00186B + C600186BBD00185AA500104A7B00FFFFFF00FFFFFF0010841000218C21002994 + 2900319431003194310029942900299C2900219C210018A5180018A5180010A5 + 100008A5080000940000006B0000FFFFFF000000000000000000737373000000 + 42000000FF000000FF000000840000319C002121210000000000000000000000 + 000000000000000000000000000000000000FFFFFF00188C180029942900399C + 3900399C3900399C390039A53900A5D6A500FFFFFF0021AD210018AD180010B5 + 100008AD0800009C0000007B0000FFFFFF00FFFFFF001863AD001873CE00187B + DE00187BDE00187BE7001884E700188CF700188CF700188CF700188CF700187B + DE00186BC6001863AD0018528C00FFFFFF00FFFFFF00188C180029942900399C + 3900399C3900399C390039A539004AA54A00A5D6A500FFFFFF004AA54A0031A5 + 310018A51800009C0000007B0000FFFFFF00000000008C8C8C00BDBDBD000000 + 4200000084000000EF000000FF000000CE000000310073737300000000000000 + 000000000000000000000000000000000000FFFFFF0021942100399C390042A5 + 42004AA54A0042A5420042A54200FFFFFF00FFFFFF00FFFFFF0021B5210018B5 + 180010AD100008A50800087B0800FFFFFF00FFFFFF00186BC600187BDE001884 + EF00FFFFFF0084C6FF00188CF700188CF700188CF700188CF70084C6FF00FFFF + FF001873CE00186BBD0018529400FFFFFF00FFFFFF0021942100399C390042A5 + 420042A5420042A542004AA54A00A5D6A500FFFFFF00FFFFFF004AA54A0039A5 + 390021A5210008A50800087B0800FFFFFF000000000000000000001000000000 + AD000000FF000000FF000000FF000000DE001010100000002100525252007373 + 730031009C0000313100A5A5A50000000000FFFFFF0029942900429C42004AA5 + 4A0052A552004AA54A0042A5420042AD4200FFFFFF00FFFFFF00FFFFFF0018B5 + 180010AD100010A5100008840800FFFFFF00FFFFFF001873CE001884E700188C + F700188CFF00FFFFFF0084C6FF00188CF700188CF70084C6FF00FFFFFF001884 + E7001873D600186BC600185A9C00FFFFFF00FFFFFF0029942900429C42004AA5 + 4A0052A552004AA54A00A5D6A500FFFFFF00FFFFFF00FFFFFF004AA54A0039A5 + 390021A5210010A5100008840800FFFFFF0000000000BDBDBD00100000000000 + 84000000FF000000CE000000EF0000008400000084000000FF000000BD000000 + 840000006300737373000021000063636300FFFFFF00319C31004AA54A0052A5 + 520052A552004AA54A004AA54A0042A5420039AD3900FFFFFF00FFFFFF00FFFF + FF0018AD180018A5180010841000FFFFFF00FFFFFF00187BDE00188CF700188C + FF00188CF700188CF700FFFFFF0084C6FF0084C6FF00FFFFFF00188CF7001884 + E7001873D6001873CE00185AA500FFFFFF00FFFFFF00319C31004AA54A0052A5 + 52004AA54A00A5D6A500FFFFFF00FFFFFF00FFFFFF00FFFFFF004AA54A0039A5 + 390021A5210018A5180010841000FFFFFF000000000021212100000021000000 + AD000000FF0000004200000084000000FF000000FF0000007300000042000000 + 420073737300313163000000AD0000006300FFFFFF00429C420052A55200FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00219C210018841800FFFFFF00FFFFFF001884E700188CFF00188C + F700188CF700188CF700188CF700FFFFFF0084C6FF00188CF7001884EF00187B + DE001873CE001873CE001863AD00FFFFFF00FFFFFF00429C420052A552004AA5 + 4A00A5D6A500FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0042A5420031A5 + 3100219C2100219C210018841800FFFFFF00000000008C8C8C0000009C000000 + FF000000EF00000073000000EF000000FF000000EF0000003100100000005252 + 52000000EF000000FF000000DE0031316300FFFFFF0042A542005AAD5A00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00219C2100217B2100FFFFFF00FFFFFF001884EF00188CFF00188C + FF00188CF700188CF70084C6FF00FFFFFF00FFFFFF0084C6FF001884E7001873 + D6001873CE001873CE001863AD00FFFFFF00FFFFFF0042A5420052A5520052A5 + 5200A5D6A500FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00399C3900299C + 2900219C2100219C2100217B2100FFFFFF000000000010000000000042000031 + CE000000FF0000009C000000FF000000FF000000EF00000073000000AD000000 + CE000000FF000000FF000000AD0021212100FFFFFF0052A5520063AD630063AD + 63005AAD5A0052A552004AA54A00429C4200399C3900FFFFFF00FFFFFF00FFFF + FF00299C290029942900217B2100FFFFFF00FFFFFF00188CFF002194FF002194 + FF00188CFF0084C6FF00FFFFFF001884F7001884EF00FFFFFF0084C6FF001873 + CE001873CE001873CE001863AD00FFFFFF00FFFFFF0052A552005AAD5A005AAD + 5A0052A55200A5D6A500FFFFFF00FFFFFF00FFFFFF00FFFFFF00399C39003194 + 31002994290029942900217B2100FFFFFF00000000008C8C8C00000000000000 + AD000000FF000000EF0000007300000052000031CE000000AD000000EF000000 + EF000000BD0000006300BDBDBD0000000000FFFFFF0052A552006BB56B006BB5 + 6B005AAD5A0052A552004AA54A00429C4200FFFFFF00FFFFFF00FFFFFF002994 + 29002994290029942900217B2100FFFFFF00FFFFFF00188CFF0039A5FF0039A5 + FF0084C6FF00FFFFFF00188CFF00188CFF001884EF001884E700FFFFFF0084C6 + FF001873CE001873CE001863AD00FFFFFF00FFFFFF0052A552006BB56B006BB5 + 6B005AAD5A0052AD5200A5D6A500FFFFFF00FFFFFF00FFFFFF00399C39003194 + 31002994290029942900217B2100FFFFFF000000000000000000000000000000 + 52000000FF000000BD000031CE000000AD00000073003100CE00525252002121 + 21000000AD00000000000000000000000000FFFFFF005AAD5A007BBD7B0073BD + 730063AD63005AAD5A0052A55200FFFFFF00FFFFFF00FFFFFF00319C3100319C + 31003194310031943100217B2100FFFFFF00FFFFFF002194FF0052ADFF004AAD + FF00FFFFFF002194FF002194FF001894FF00188CF7001884EF001884E700FFFF + FF001873CE001873CE001863AD00FFFFFF00FFFFFF005AAD5A007BBD7B0073BD + 730063AD63005AAD5A005AAD5A00A5D6A500FFFFFF00FFFFFF00429C4200399C + 39003194310031943100217B2100FFFFFF0000000000A5A5A500000000000000 + 52000000AD0000005200000073000031FF000000730000005200212121000000 + 100000000000000000000000000000000000FFFFFF006BB56B008CC68C007BBD + 7B006BB56B0063B5630063AD6300B5DEB500FFFFFF004AA54A004AA54A0042A5 + 4200399C390031943100217B2100FFFFFF00FFFFFF0039A5FF006BBDFF0052AD + FF0039A5FF00319CFF00299CFF00299CFF002194FF00188CFF001884F7001884 + EF00187BDE001873CE001863AD00FFFFFF00FFFFFF006BB56B008CC68C007BBD + 7B006BB56B0063B5630063AD630063AD6300A5D6A500FFFFFF004AA54A0042A5 + 4200399C390031943100217B2100FFFFFF000000000000000000000000003131 + 3100000042000000CE000000AD000000DE00000063000000420000004200BDBD + BD0000000000000000000000000000000000FFFFFF0073BD73009CCE9C008CC6 + 8C007BBD7B0073BD73006BB56B0063B5630063AD63005AAD5A0052AD52004AA5 + 4A0042A542003194310018731800FFFFFF00FFFFFF004AADFF0084C6FF006BBD + FF0052ADFF004AADFF0039A5FF00319CFF00299CFF002194FF001894FF00188C + F7001884EF001873CE00185A9C00FFFFFF00FFFFFF0073BD73009CCE9C008CC6 + 8C007BBD7B0073BD73006BB56B0063B5630063AD63005AAD5A0052AD52004AA5 + 4A0042A542003194310018731800FFFFFF000000000000000000000000000000 + 00008C8C8C002121210000004200313131008C8C8C00BDC6C600000000000000 + 000000000000000000000000000000000000FFFFFF00B5DEB50073BD730063B5 + 63005AAD5A0052A5520052A552004AA54A004AA54A0042A54200429C4200399C + 390031943100218C21008CBD8C00FFFFFF00FFFFFF00ADDEFF004AADFF00319C + FF002194FF00188CFF00188CFF00188CF700188CF7001884EF001884E700187B + DE001873CE00186BBD0063B5FF00FFFFFF00FFFFFF00B5DEB50073BD730063B5 + 63005AAD5A0052A5520052A552004AA54A004AA54A0042A54200429C4200399C + 390031943100218C21008CBD8C00FFFFFF000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF000000000000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF000000000000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF0000000000424D3E000000000000003E000000 + 2800000040000000300000000100010000000000800100000000000000000000 + 000000000000000000000000FFFFFF00FFFFFFFF00000000FFFFFFFF00000000 + FFFFFFFF00000000F00FF03F00000000F7EFF7BF00000000F7EFF7BF00000000 + F7EFF78F00000000F7EFF02F00000000F7EFF02F00000000F00FFDEF00000000 + F00FFC0F00000000FFFFFC0F00000000FFFFFFFF00000000FFFFFFFF00000000 + FFFFFFFF00000000FFFFFFFF000000008001F01FF00FFFFF0000E00FE007FFFF + 0000C007C003FFFF000080038001FFFF000000010000F81F000000000000F81F + 000000000000FFFF000000000000FFFF000000000000FFFF000000000000FFFF + 000000000000FFFF000000000001FFFF000080018003FFFF0000C003C007FFFF + 0000E007E00FFFFF8001F00FF01FFFFFFFFF800180018001F07F000000000000 + C07F000000000000C07F000000000000003F0000000000008001000000000000 + 0000000000000000800000000000000000000000000000008000000000000000 + 00010000000000008007000000000000800F000000000000E00F000000000000 + F03F000000000000FFFF80018001800100000000000000000000000000000000 + 000000000000} + end + object lstImages: TMenuImgList + BkColor = clSilver + DrawingStyle = dsTransparent + Left = 236 + Top = 236 + Bitmap = { + 494C01013B004000040010001000C0C0C000FF10FFFFFFFFFFFFFFFF424D3600 + 000000000000360000002800000040000000F0000000010020000000000000F0 + 000000000000000000000000000000000000C0C0C000C0C0C000C0C0C000C0C0 + C000C0C0C000C6C6C600F7730000CE5A0000CE5A0000F7730000C6C6C600C0C0 + C000C0C0C000C0C0C000C0C0C000C0C0C000C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C60084848400C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C6000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000C0C0C000C0C0C000C0C0C000C6C6 + C600CE5A0000F7730000F7C69400F7C69400F7C69400F7A55A00F7730000CE5A + 0000C6C6C600C0C0C000C0C0C000C0C0C000C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C60063636300C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600BDC6F700637B + D6000042C6000042C6000042C600637BD600BDC6F700C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C6000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000C0C0C000C0C0C000C6C6C600CE5A + 0000F7A55A00FFE7CE00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFE7CE00F7A5 + 5A00CE5A0000C6C6C600C0C0C000C0C0C000C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C60042424200C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600BDC6F700637BD6000042C600ADBD + E700A5B5DE009CADD6009CA5CE00949CC6000042C600637BD600BDC6F700C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C6000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000C0C0C000C6C6C600CE5A0000F7A5 + 5A00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00F7A55A00CE5A0000C6C6C600C0C0C000C6C6C600C6C6C60084848400C6C6 + C600C6C6C600C6C6C60063636300636363006363630042424200C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600637BD600BDCEFF00B5C6F700B5BD + EF00A5B5DE00A5ADD6009CA5CE00949CC600949CC600949CC600637BD600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C6000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000C0C0C000CE5A0000F7A55A00FFFF + FF00FFFFFF00F7A55A00F7A55A00F7730000F7730000F7A55A00F7A55A00FFFF + FF00FFFFFF00F7A55A00CE5A0000C0C0C000C6C6C600C6C6C600C6C6C6006363 + 6300C6C6C60042424200EFAD6B00E7A56B00E79C6B00846B520042424200C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C6000042C600C6D6FF00BDCEFF00B5C6 + F700ADBDEF00A5B5DE009CADD6009CA5CE00949CC600949CC6000042C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C6000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000C6C6C600F7730000FFE7CE00FFFF + FF00FFFFFF00FFFFFF00F7A55A00F7730000F7730000F7A55A00FFFFFF00FFFF + FF00FFFFFF00FFE7CE00F7730000C6C6C600C6C6C600C6C6C600C6C6C6004242 + 420042424200F7B57300EFAD6B00EFAD6B00A57B5200E79C6B0063636300C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C6000042C600CEDEFF00C6D6FF00BDCE + FF00B5C6F700ADBDE700A5B5DE009CADD60094A5CE0094A5CE000042C6004242 + 42004242420084848400C6C6C600C6C6C6000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000F7730000F7A55A00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00F7A55A00F7730000F7730000F7A55A00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00F7A55A00F7730000C6C6C600C6C6C600C6C6C6006363 + 6300FFBD730000630000006300000063000000630000E7A56B00006300000063 + 00000063000000630000C6C6C600C6C6C600BDC6F7000042C600CEDEFF00C6D6 + FF00BDCEFF00B5C6F700ADBDE700A5ADDE009CADD6000042C60084848400B5B5 + B500B5B5B500ADADAD0084848400848484000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000CE5A0000F7C69400FFFFFF00FFFF + FF00FFFFFF00FFFFFF00F7A55A00F7730000F7730000F7A55A00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00F7C69400CE5A0000C6C6C60063636300424242006363 + 6300FFC67B0000630000008400000084000000630000EFAD6B00006300000084 + 00000084000000630000C6C6C600C6C6C600C6C6C600BDC6F7000042C600CEDE + FF00637BD6000042C600637BD600ADB5E7000042C60042424200BDBDBD00BDBD + BD00B5B5B500ADADAD00ADADAD00424242000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000CE5A0000F7C69400FFFFFF00FFFF + FF00FFFFFF00F7A55A00F7A55A00F7730000F7730000F7A55A00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00F7C69400CE5A000084848400C6C6C600C6C6C6006363 + 6300FFC67B000063000000840000008400000063000042424200006300000084 + 00000084000000630000C6C6C600C6C6C600C6C6C600C6C6C600BDC6F700315A + C600CEDEFF00C6D6FF00BDC6F700315AC600BDC6F70042424200C6C6C600BDBD + BD00BDBDBD00B5B5B500ADADAD00424242000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000F7730000F7A55A00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00F7A55A00F7730000C6C6C600C6C6C60042424200D694 + 4A008484840000630000008400000084000000630000C6C6C600006300000084 + 00000084000000630000C6C6C600C6C6C600C6C6C600C6C6C600637BD600D6E7 + FF00D6DEFF00CED6FF00BDCEFF00B5C6F700637BD600C6C6C60084848400C6C6 + C600BDBDBD00BDBDBD0084848400C6C6C6000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000C6C6C600F7730000FFE7CE00FFFF + FF00FFFFFF00FFFFFF00F7A55A00F7730000F7730000F7A55A00FFFFFF00FFFF + FF00FFFFFF00FFE7CE00F7730000C6C6C600848484006363630063636300D6AD + 6B00D6944A000063000000840000008400000063000063636300006300000084 + 00000084000000630000C6C6C600C6C6C600C6C6C600C6C6C6000042C600DEEF + FF00D6E7FF00CEDEFF00C6D6FF00BDCEFF000042C600C6C6C600C6C6C6006363 + 63004242420063636300C6C6C600C6C6C6000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000C0C0C000CE5A0000F7A55A00FFFF + FF00FFFFFF00FFFFFF00F7A55A00F7730000F7730000F7A55A00FFFFFF00FFFF + FF00FFFFFF00F7A55A00CE5A0000C0C0C000C6C6C600C6C6C600C6C6C6006363 + 63004242420000630000008400000084000000630000C6C6C600006300000084 + 00000084000000630000C6C6C600C6C6C600C6C6C600C6C6C600637BD600DEEF + FF00D6E7FF00CEDEFF00CED6FF00C6CEFF00637BD600C6C6C60063636300CECE + CE00CECECE00C6C6C60063636300C6C6C6000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000C0C0C000C6C6C600CE5A0000F7A5 + 5A00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00F7A55A00CE5A0000C6C6C600C0C0C000C6C6C600C6C6C600C6C6C6006363 + 6300C6C6C60000630000008400000084000000630000C6C6C600006300000084 + 00000084000000630000C6C6C600C6C6C600C6C6C600C6C6C600BDC6F700315A + C600D6E7FF00D6DEFF00CEDEFF00315AC600BDC6F700C6C6C60042424200D6D6 + D600CECECE00C6C6C60042424200C6C6C6000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000C0C0C000C0C0C000C6C6C600CE5A + 0000F7A55A00FFE7CE00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFE7CE00F7A5 + 5A00CE5A0000C6C6C600C0C0C000C0C0C000C6C6C600C6C6C600C6C6C6008484 + 8400C6C6C60000630000008400000084000000630000C6C6C600006300000084 + 00000084000000630000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600BDC6 + F700637BD6000042C600637BD600BDC6F700C6C6C600C6C6C60084848400D6D6 + D600CECECE00CECECE0084848400C6C6C6000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000C0C0C000C0C0C000C0C0C000C6C6 + C600CE5A0000F7730000F7A55A00F7C69400F7C69400F7A55A00F7730000CE5A + 0000C6C6C600C0C0C000C0C0C000C0C0C000C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C60000630000008400000084000000630000C6C6C600006300000084 + 00000084000000630000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6008484 + 84004242420084848400C6C6C600C6C6C6000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000C0C0C000C0C0C000C0C0C000C0C0 + C000C0C0C000C6C6C600F7730000CE5A0000CE5A0000F7730000C6C6C600C0C0 + C000C0C0C000C0C0C000C0C0C000C0C0C000C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C60000630000006300000063000000630000C6C6C600006300000063 + 00000063000000630000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C6000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C60084848400C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C60084848400C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C60084848400C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C60063636300C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C60063636300C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C60063636300C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C6000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C60042424200C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C60042424200C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C60042424200C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C60000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00DEEFEF0000000000C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C60084848400C6C6 + C600C6C6C600C6C6C60063636300636363006363630042424200C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C60084848400C6C6 + C600C6C6C600C6C6C60063636300636363006363630042424200C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C60084848400C6C6 + C600C6C6C600C6C6C60063636300636363006363630042424200C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C60000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00E7EFEF0000000000C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6006363 + 6300C6C6C60042424200EFAD6B00E7A56B00E79C6B00846B520042424200C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6006363 + 6300C6C6C60042424200EFAD6B00E7A56B00E79C6B00846B520042424200C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6006363 + 6300C6C6C60042424200EFAD6B00E7A56B00E79C6B00846B520042424200C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C60000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00E7EFEF00000000009CA59C009CA5 + 9C009CA59C009CA59C009CA59C009CA59C00C6C6C600C6C6C600C6C6C6004242 + 420042424200F7B57300EFAD6B00EFAD6B00A57B5200E79C6B0063636300C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6004242 + 420042424200F7B57300EFAD6B00EFAD6B00A57B5200E79C6B0063636300C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6004242 + 420042424200F7B57300EFAD6B00EFAD6B00A57B5200E79C6B0063636300C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C60000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00E7EFEF0000000000E7EFEF00FFFF + FF00FFFFFF00E7EFEF00FFFFFF009CA59C00C6C6C600C6C6C600C6C6C6006363 + 6300FFBD7300F7B57300F7B57300A57B5200EFAD6B000000FF0063636300C6C6 + C600C6C6C60084848400C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6006363 + 6300FFBD7300F7B57300F7B57300A57B5200EFAD6B00E7A56B0063636300C6C6 + C600C6C6C60084848400C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6006363 + 6300FFBD7300F7B57300F7B57300A57B5200EFAD6B00E7A56B0063636300C6C6 + C600C6C6C60084848400C6C6C600C6C6C60000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00E7EFEF0000000000E7EFEF00FFFF + FF00FFFFFF00E7EFEF00FFFFFF009CA59C00C6C6C60063636300424242006363 + 6300FFC67B00FFBD7300BD946300F7B57300EFAD6B008484FF008484FF000000 + FF0063636300C6C6C600C6C6C600C6C6C600C6C6C60063636300424242006363 + 6300FFC67B00FFBD7300BD946300F7B57300EFAD6B00EFAD6B00636363004242 + 420063636300C6C6C600C6C6C600C6C6C600C6C6C60063636300424242006363 + 6300FFC67B00BD8C94000000FF00CE948C00EFAD6B00EFAD6B0052527B000000 + FF004A4A8400C6C6C600C6C6C600C6C6C6000000000084848400848484008484 + 8400848484008484840084848400848484008484840000000000E7EFEF00FFFF + FF00FFFFFF00E7EFEF00FFFFFF009CA59C0084848400C6C6C600C6C6C6006363 + 6300FFC67B00FFC67B00FFBD7300F7B573000000FF0042424200C6C6C600C6C6 + C600C6C6FF000000FF00C6C6C600C6C6C60084848400C6C6C600C6C6C6006363 + 6300FFC67B00FFC67B00FFBD73005A42CE00F7B57300424242000000FF00C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C60084848400C6C6C600C6C6C6006363 + 6300FFC67B00FFC67B001810EF00946BAD00F7B57300424242007373DE001818 + FF00C6C6C600C6C6C600C6C6C600C6C6C6008484840000000000000000000000 + 0000000000000000000000000000000000000000000084848400E7EFEF00FFFF + FF00FFFFFF00E7EFEF00FFFFFF009CA59C00C6C6C600C6C6C60042424200D694 + 4A0084848400FFC67B00FFC67B00FFBD73008484FF00C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6FF000000FF00C6C6C600C6C6C60042424200D694 + 4A0084848400FFC67B00FFC67B00FFBD730042424200C6C6C6000000FF00C6C6 + C600C6C6C600525AFF00B5BDF700C6C6C600C6C6C600C6C6C60042424200D694 + 4A0084848400FFC67B00634AC6000000FF000000FF000000FF000000FF005A63 + FF00C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6009CA59C00E7EF + EF00E7EFEF00E7EFEF00E7EFEF00E7EFEF00E7EFEF00E7EFEF00E7EFEF00E7EF + EF00E7EFEF00E7EFEF00FFFFFF009CA59C00848484006363630063636300D6AD + 6B00D6944A0063636300636363000000FF004242420063636300C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6FF00C6C6C600848484006363630063636300D6AD + 6B00D6944A006363630039399C000000F7000000FF002121C6000000FF00C6C6 + C600C6C6C600737BF7003131FF00C6C6C600848484006363630063636300D6AD + 6B00D6944A006363630042428C000000F70042424200636363000808FF00A5AD + F700C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6009CA59C00E7EF + EF00E7EFEF00E7EFEF00E7EFEF00E7EFEF00E7EFEF00E7EFEF00E7EFEF00E7EF + EF00E7EFEF00E7EFEF00FFFFFF009CA59C00C6C6C600C6C6C600C6C6C6006363 + 630042424200C6C6C60042424200C6C6FF00C6C6C600C6C6C60084848400C6C6 + C600C6C6C600C6C6C6000000FF00C6C6C600C6C6C600C6C6C600C6C6C6006363 + 630042424200C6C6C6000000F7009C9CCE00D6E7EF00737BF7000000FF00C6C6 + C600C6C6C600DEEFEF000000FF00C6C6C600C6C6C600C6C6C600C6C6C6006363 + 630042424200C6C6C600393942000808FF00B5C6F700B5BDF7000808F700DEEF + EF00C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6009CA59C00E7EF + EF00E7EFEF00E7EFEF00E7EFEF00E7EFEF00E7EFEF00E7EFEF00E7EFEF00E7EF + EF00E7EFEF00E7EFEF00FFFFFF009CA59C00C6C6C600C6C6C600C6C6C6006363 + 6300C6C6C600C6C6C6000000FF00C6C6FF00C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6FF00C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6006363 + 6300C6C6C600C6C6C6000000F700B5BDF700D6E7EF00C6C6C6000000FF00ADBD + F700C6C6C6008494F7002121FF00C6C6C600C6C6C600C6C6C600C6C6C6006363 + 6300DEEFEF00DEEFEF00636363005252FF007B84F700737BF7005252FF00C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6009CA59C00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00E7EFEF00FFFFFF009CA59C00C6C6C600C6C6C600C6C6C6008484 + 8400C6C6C60084848400C6C6C600C6C6C6000000FF00C6C6FF00C6C6C600C6C6 + C600C6C6C6000000FF00C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6008484 + 8400C6C6C600848484009CA5F7001818FF000000FF00C6C6C6000000FF002121 + FF000000FF002129FF00ADB5F700C6C6C600C6C6C600C6C6C600424AFF008484 + 8400424AFF0084848400C6C6C6009CA5F7003942FF003942FF009CA5F700C6C6 + C600C6C6C600424AFF00C6C6C600424AFF00C6C6C600C6C6C6009CA59C008484 + 8400848484008484840084848400848484008484840084848400848484008484 + 84008484840084848400848484009CA59C00C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6000000FF00C6C6 + FF00C6C6FF00C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6000000FF00C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6003139FF00C6C6 + C6003139FF00C6C6C600C6C6C600D6E7EF001010FF001010FF00D6E7EF00C6C6 + C600C6C6C6003139FF00C6C6C6003139FF00C6C6C600C6C6C600C6C6C6009CA5 + 9C009CA59C009CA59C009CA59C009CA59C009CA59C009CA59C009CA59C009CA5 + 9C009CA59C009CA59C009CA59C00C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C6000000FF00C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C6000000FF000000FF000000FF000000FF000000FF000000 + FF000000FF000000FF000000FF000000FF00C6C6C600C6C6C6000000FF00C6C6 + C6000000FF00C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C6000000FF00C6C6C6000000FF00C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C60084848400C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C60063636300636363005A5A5A005A5A + 5A005A5A5A0052525200525252004A4A4A004A4A4A004A4A4A00424242004242 + 420039393900393939003939390031313100C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C60084848400C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C60084848400C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C60063636300C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C6006B6B6B00FFFFFF00FFFFFF005A5A + 5A00FFFFFF0052525200FFFFFF00FFFFFF00FFFFFF00FFFFFF004A4A4A00FFFF + FF0042424200FFFFFF00FFFFFF0039393900C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C60063636300C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C60063636300C6C6C600C6C6C600C6C6C600C6C6C6000000 + FF000000FF000000FF000000FF000000FF00C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C60042424200C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C6006B6B6B0063636300636363005A5A + 5A005A5A5A005A5A5A005252520052525200525252004A4A4A004A4A4A004A4A + 4A0042424200424242004242420039393900C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C60042424200C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C60042424200C6C6C600C6C6C600C6C6C600C6C6C6000000 + FF00FFFFFF00FFFFFF00FFFFFF000000FF00C6C6C600C6C6C60084848400C6C6 + C600C6C6C600C6C6C60063636300636363006363630042424200C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C60073737300FFFFFF00FFFFFF00FFFF + FF005A5A5A00FFFFFF005A5A5A00FFFFFF0052525200FFFFFF004A4A4A00FFFF + FF00FFFFFF00FFFFFF00FFFFFF0039393900C6C6C600C6C6C60084848400C6C6 + C600C6C6C600C6C6C60063636300636363006363630042424200C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C60084848400C6C6 + C600C6C6C600C6C6C60063636300636363006363630042424200C6C6C6000000 + FF000000FF000000FF000000FF000000FF00C6C6C600C6C6C600C6C6C6006363 + 6300C6C6C60042424200EFAD6B00E7A56B00E79C6B00846B520042424200C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600737373006B6B6B00636363006363 + 6300636363005A5A5A005A5A5A005A5A5A005252520052525200525252004A4A + 4A004A4A4A004A4A4A004242420042424200C6C6C600C6C6C600C6C6C6006363 + 6300C6C6C60042424200EFAD6B00E7A56B00E79C6B00846B520042424200C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6006363 + 6300C6C6C60042424200EFAD6B00E7A56B00E79C6B00846B520042424200C6C6 + C600C6C6C600C6C6C6000000C600C6C6C600C6C6C600C6C6C600C6C6C6004242 + 420042424200F7B57300EFAD6B00EFAD6B00A57B5200E79C6B0063636300C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C60073737300FFFFFF00FFFFFF006363 + 6300FFFFFF0063636300FFFFFF005A5A5A00FFFFFF0052525200FFFFFF005252 + 5200FFFFFF00FFFFFF00FFFFFF0042424200C6C6C600C6C6C600C6C6C6004242 + 420042424200F7B57300EFAD6B00EFAD6B00A57B5200E79C6B0063636300C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6004242 + 420042424200F7B57300EFAD6B000000FF000000FF000000FF000000FF000000 + FF00C6C6C600C6C6C6000000C600C6C6C600C6C6C600C6C6C600C6C6C6006363 + 6300FFBD7300F7B57300F7B57300A57B5200EFAD6B000063000000630000C6C6 + C600C6C6C60084848400C6C6C600C6C6C6007B7B7B006B6B6B006B6B6B006B6B + 6B006363630063636300636363005A5A5A005A5A5A005A5A5A00525252005252 + 5200525252004A4A4A004A4A4A004A4A4A00C6C6C600C6C6C600C6C6C6006363 + 6300FFBD7300F7B57300F7B57300A57B5200EFAD6B00E7A56B0063636300C6C6 + C600C6C6C60084848400C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6006363 + 6300FFBD7300F7B57300F7B573000000FF00FFFFFF00FFFFFF00FFFFFF000000 + FF000000C6000000C6000000C600C6C6C600C6C6C60063636300424242006363 + 6300FFC67B00FFBD7300BD946300F7B57300EFAD6B0000630000008400000063 + 000063636300C6C6C600C6C6C600C6C6C6007B7B7B00FFFFFF006B6B6B00FFFF + FF006B6B6B00FFFFFF0063636300FFFFFF005A5A5A00FFFFFF005A5A5A00FFFF + FF0052525200FFFFFF00FFFFFF004A4A4A00C6C6C60063636300424242006363 + 6300FFC67B00FFBD7300BD9463000000E7000000DE000000DE000000D6000000 + D6000000CE000000CE000000C6000000C600C6C6C60063636300424242006363 + 6300FFC67B00FFBD7300BD9463000000FF000000FF000000FF000000FF000000 + FF0063636300C6C6C600C6C6C600C6C6C60084848400C6C6C600C6C6C6006363 + 6300FFC67B00FFC67B00FFBD7300F7B57300F7B5730000630000008400000084 + 000000630000C6C6C600C6C6C600C6C6C600848484007B7B7B007B7B7B007373 + 730073737300737373006B6B6B006B6B6B0063636300636363005A5A5A005A5A + 5A005A5A5A0052525200525252004A4A4A0084848400C6C6C600C6C6C6006363 + 6300FFC67B00FFC67B00FFBD73000000E700FFFFFF000000DE00FFFFFF000000 + D600FFFFFF000000CE00FFFFFF000000C60084848400C6C6C600C6C6C6006363 + 6300FFC67B00FFC67B00FFBD7300F7B573000000C60042424200C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C60042424200D694 + 4A0084848400FFC67B00FFC67B00FFBD73004242420000630000008400000084 + 00000084000000630000C6C6C600C6C6C600C6C6C60063636300424242006363 + 6300FFC67B00FFBD7300BD946300F7B57300EFAD6B00EFAD6B00636363004242 + 420063636300C6C6C600C6C6C600C6C6C600C6C6C600C6C6C60042424200D694 + 4A0084848400FFC67B00FFC67B000000E7000000E7000000E7000000DE000000 + DE000000D6000000D6000000CE000000CE00C6C6C600C6C6C60042424200D694 + 4A0084848400FFC67B00FFC67B00FFBD73000000C600C6C6C600C6C6C6000000 + FF000000FF000000FF000000FF000000FF00848484006363630063636300D6AD + 6B00D6944A006363630063636300636363004242420000630000008400000084 + 0000008400000084000000630000C6C6C60084848400C6C6C600C6C6C6006363 + 6300FFC67B00FFC67B00FFBD7300F7B57300F7B5730042424200C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600848484006363630063636300D6AD + 6B00D6944A0063636300636363000000EF00FFFFFF000000E700FFFFFF000000 + DE00FFFFFF000000D600FFFFFF000000CE00848484006363630063636300D6AD + 6B00D6944A006363630063636300636363000000C6000000C6000000C6000000 + FF00FFFFFF00FFFFFF00FFFFFF000000FF00C6C6C600C6C6C600C6C6C6006363 + 630042424200C6C6C60042424200C6C6C600C6C6C60000630000008400000084 + 0000008400000084000000630000C6C6C600C6C6C600C6C6C60042424200D694 + 4A0084848400FFC67B00FFC67B00FFBD730042424200C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6006363 + 630042424200C6C6C600424242000000EF000000EF000000E7000000E7000000 + E7000000DE000000DE000000D6000000D600C6C6C600C6C6C600C6C6C6006363 + 630042424200C6C6C60042424200C6C6C600C6C6C600C6C6C600848484000000 + FF000000FF000000FF000000FF000000FF00C6C6C600C6C6C600C6C6C6006363 + 6300C6C6C600C6C6C60063636300C6C6C600C6C6C60000630000008400000084 + 00000084000000630000C6C6C600C6C6C600848484006363630063636300D6AD + 6B00D6944A006363630063636300636363004242420063636300C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6006363 + 6300C6C6C600C6C6C600636363000000F700FFFFFF000000EF00FFFFFF000000 + E700FFFFFF000000DE00FFFFFF000000D600C6C6C600C6C6C600C6C6C6006363 + 6300C6C6C600C6C6C60063636300C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C6000000C600C6C6C600C6C6C600C6C6C600C6C6C6008484 + 8400C6C6C60084848400C6C6C600C6C6C600C6C6C60000630000008400000084 + 000000630000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6006363 + 630042424200C6C6C60042424200C6C6C600C6C6C600C6C6C60084848400C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6008484 + 8400C6C6C60084848400C6C6C6000000F7000000F7000000EF000000EF000000 + E7000000E7000000E7000000DE000000DE00C6C6C600C6C6C600C6C6C6008484 + 8400C6C6C60084848400C6C6C6000000FF000000FF000000FF000000FF000000 + FF00C6C6C600C6C6C6000000C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C60000630000008400000063 + 0000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6006363 + 6300C6C6C600C6C6C60063636300C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C6000000FF00FFFFFF000000F700FFFFFF000000 + EF00FFFFFF000000E700FFFFFF000000DE00C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C6000000FF00FFFFFF00FFFFFF00FFFFFF000000 + FF000000C6000000C6000000C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6000063000000630000C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6008484 + 8400C6C6C60084848400C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C6000000FF000000FF000000F7000000F7000000 + EF000000EF000000E7000000E7000000E700C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C6000000FF000000FF000000FF000000FF000000 + FF00C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C60084848400C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C60084848400C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C60084848400C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C60084848400C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C60063636300C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C60063636300C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C60063636300C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C60063636300C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C60042424200C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C60042424200C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C60042424200C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C60042424200C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C60084848400C6C6 + C600C6C6C600C6C6C60063636300636363006363630042424200C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C60084848400C6C6 + C600C6C6C600C6C6C60063636300636363006363630042424200C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C60084848400C6C6 + C600C6C6C600C6C6C60063636300636363006363630042424200C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C60084848400C6C6 + C600C6C6C600C6C6C60063636300636363006363630042424200C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6006363 + 6300C6C6C60042424200EFAD6B00E7A56B00E79C6B00846B520042424200C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6006363 + 6300C6C6C60042424200EFAD6B00E7A56B00E79C6B00846B520042424200C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6006363 + 6300C6C6C60042424200EFAD6B00E7A56B00E79C6B00846B520042424200C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6006363 + 6300C6C6C60042424200EFAD6B00E7A56B00E79C6B00846B520042424200C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6004242 + 420042424200F7B57300EFAD6B00EFAD6B00A57B5200E79C6B0063636300C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6004242 + 420042424200F7B57300EFAD6B00EFAD6B00A57B5200E79C6B0063636300C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6004242 + 420042424200F7B57300EFAD6B00EFAD6B00A57B5200E79C6B0063636300C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6004242 + 420042424200F7B57300EFAD6B00EFAD6B00A57B5200E79C6B0063636300C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6006363 + 6300FFBD7300F7B57300F7B57300A57B5200EFAD6B000000000000000000C6C6 + C600C6C6C60084848400C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6006363 + 6300FFBD7300F7B57300F7B57300A57B5200EFAD6B00E7A56B0063636300C6C6 + C600C6C6C60084848400C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6006363 + 6300FFBD73000084000000630000A57B5200EFAD6B000084000000630000C6C6 + C600C6C6C60084848400C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6006363 + 6300FFBD7300F7B57300F7B57300A57B5200EFAD6B000084000000630000C6C6 + C600C6C6C60084848400C6C6C600C6C6C600C6C6C60063636300424242006363 + 6300FFC67B00FFBD7300BD946300F7B57300EFAD6B0000000000424242000000 + 000063636300C6C6C600C6C6C600C6C6C600C6C6C60063636300424242006363 + 6300FFC67B00FFBD7300BD946300000000000000000000000000000000000000 + 000000000000000000000000000000000000C6C6C60063636300424242006363 + 6300FFC67B00636363000084000000630000EFAD6B0063636300008400000063 + 000063636300C6C6C600C6C6C600C6C6C600C6C6C60063636300424242006363 + 6300FFC67B00FFBD7300BD946300F7B57300EFAD6B0063636300008400000063 + 000063636300C6C6C600C6C6C600C6C6C60084848400C6C6C600C6C6C6006363 + 6300FFC67B00FFC67B00FFBD7300F7B57300F7B5730000000000424242004242 + 420000000000C6C6C600C6C6C600C6C6C60084848400C6C6C600C6C6C6006363 + 6300FFC67B00FFC67B00FFBD7300000000004242420042424200424242004242 + 42004242420042424200424242000000000084848400C6C6C600C6C6C6006363 + 6300FFC67B00FFC67B0000630000008400000063000042424200006300000084 + 000000630000C6C6C600C6C6C600C6C6C60084848400C6C6C600C6C6C6006363 + 6300FFC67B00FFC67B00FFBD7300F7B57300F7B5730042424200006300000084 + 000000630000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C60042424200D694 + 4A0084848400FFC67B00FFC67B00FFBD73004242420000000000424242004242 + 42004242420000000000C6C6C600C6C6C600C6C6C600C6C6C60042424200D694 + 4A0084848400FFC67B00FFC67B00000000004242420042424200424242004242 + 420042424200424242004242420000000000C6C6C600C6C6C60042424200D694 + 4A0084848400FFC67B00FFC67B00006300000084000000630000C6C6C6000063 + 00000084000000630000C6C6C600C6C6C600C6C6C600C6C6C60042424200D694 + 4A0084848400FFC67B00FFC67B00FFBD730042424200C6C6C600C6C6C6000063 + 00000084000000630000C6C6C600C6C6C600848484006363630063636300D6AD + 6B00D6944A006363630063636300636363004242420000000000424242004242 + 4200424242004242420000000000C6C6C600848484006363630063636300D6AD + 6B00D6944A006363630063636300000000004242420042424200424242004242 + 420042424200424242004242420000000000848484006363630063636300D6AD + 6B00D6944A00636363006363630063636300006300000084000000630000C6C6 + C600006300000084000000630000C6C6C600848484006363630063636300D6AD + 6B00D6944A006363630063636300636363004242420063636300C6C6C600C6C6 + C600006300000084000000630000C6C6C600C6C6C600C6C6C600C6C6C6006363 + 630042424200C6C6C60042424200C6C6C600C6C6C60000000000424242004242 + 4200424242004242420000000000C6C6C600C6C6C600C6C6C600C6C6C6006363 + 630042424200C6C6C60042424200000000004242420042424200424242004242 + 420042424200424242004242420000000000C6C6C600C6C6C600C6C6C6006363 + 630042424200C6C6C60042424200C6C6C600006300000084000000630000C6C6 + C600006300000084000000630000C6C6C600C6C6C600C6C6C600C6C6C6006363 + 630042424200C6C6C60042424200C6C6C600C6C6C600C6C6C60084848400C6C6 + C600006300000084000000630000C6C6C600C6C6C600C6C6C600C6C6C6006363 + 6300C6C6C600C6C6C60063636300C6C6C600C6C6C60000000000424242004242 + 42004242420000000000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6006363 + 6300C6C6C600C6C6C60063636300000000004242420042424200424242004242 + 420042424200424242004242420000000000C6C6C600C6C6C600C6C6C6006363 + 6300C6C6C600C6C6C60063636300006300000084000000630000C6C6C6000063 + 00000084000000630000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6006363 + 6300C6C6C600C6C6C60063636300C6C6C600C6C6C600C6C6C600C6C6C6000063 + 00000084000000630000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6008484 + 8400C6C6C60084848400C6C6C600C6C6C600C6C6C60000000000424242004242 + 420000000000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6008484 + 8400C6C6C60084848400C6C6C600000000004242420042424200424242004242 + 420042424200424242004242420000000000C6C6C600C6C6C600C6C6C6008484 + 8400C6C6C60084848400006300000084000000630000C6C6C600006300000084 + 000000630000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6008484 + 8400C6C6C60084848400C6C6C600C6C6C600C6C6C600C6C6C600006300000084 + 000000630000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C60000000000424242000000 + 0000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600000000004242420042424200424242004242 + 420042424200424242004242420000000000C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600848484000084000000630000C6C6C60084848400008400000063 + 0000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C60084848400008400000063 + 0000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6000000000000000000C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600000000000000000000000000000000000000 + 000000000000000000000000000000000000C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C6000084000000630000C6C6C600C6C6C6000084000000630000C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6000084000000630000C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600ADC6FF00C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600B5BDF7004A73DE000042C6000042C6004A73 + DE00B5BDF700C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600B5BDF7000042C6000042C6000042C6000042 + C6000042C600B5BDF700C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C60084848400C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600ADC6 + FF000042DE004A73E7005273E7004A73E7007394FF00C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C6004A73DE004A73DE00B5BDF700FFFFFF00FFFFFF00B5BD + F7004A73DE004A73DE00C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C6000042C600B5BDF700B5BDF700B5BDF7008C9C + EF008C9CEF000042C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C60063636300C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6000852 + E7000039C6005273DE005273DE005273DE004A6BDE005273E7005273EF0084A5 + FF00C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C6004A73DE00B5BDF700F7CEAD00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00CED6FF00B5BDF7004A73DE00C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C6000042C600B5BDF700FFFFFF008C9CEF00FFFF + FF004A73DE000042C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C60042424200C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6007B9CFF005273 + DE00295ACE005273DE005273DE005273DE005273DE005273DE004A73DE004A6B + DE005273E700638CFF00C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600B5BDF7004A73DE00F7CEAD00FFFFFF00F7CEAD00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00CED6FF004A73DE00B5BDF700C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C6000042C600B5BDF700FFFFFF008C9CEF00FFFF + FF004A73DE000042C600C6C6C600C6C6C600C6C6C600C6C6C60084848400C6C6 + C600C6C6C600C6C6C60063636300636363006363630042424200C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600527BEF005273 + DE002152D600215AC6000039C600184AD600426BDE005273DE005273DE005273 + DE004A6BDE006B8CFF00C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C6004A73DE00B5BDF700F7CEAD00F7CEAD00FFFFFF000042C6000042C600FFFF + FF00FFFFFF00FFFFFF00B5BDF7004A73DE00C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C6000042C600B5BDF700FFFFFF008C9CEF00FFFF + FF004A73DE000042C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6006363 + 6300C6C6C60042424200EFAD6B00E7A56B00E79C6B00846B520042424200C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600ADC6FF004A73E7005273 + DE000039C600FFFFCE00FFF7CE00ADB5CE004273C6000039C6000842CE003163 + D6005273DE007B9CFF00C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C6000042C600FFFFFF00FFFFFF00FFFFFF000042C600FFFFFF00FFFFFF000042 + C600FFFFFF00FFFFFF00FFFFFF000042C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C6000042C6008C9CEF008C9CEF004A73DE004A73 + DE004A73DE000042C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6004242 + 420042424200F7B57300EFAD6B00EFAD6B00A57B5200E79C6B0063636300C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600638CFF005273DE003963 + D600ADB5CE00FFF7CE00FFEFCE00FFF7CE00FFFFCE00FFFFCE00C6D6E700638C + DE00084AC6004A7BEF00C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C6000042C600FFFFFF00FFFFFF00FFFFFF000042C600FFFFFF00FFFFFF000042 + C600FFFFFF00FFFFFF00FFFFFF000042C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C6000031A5000031A5000031A5000031A5000031A5000031 + A5000031A5000031A5000031A500C6C6C600C6C6C600C6C6C600C6C6C6006363 + 6300FFBD7300F7B57300F7B57300A57B5200EFAD6B00E7A56B0063636300C6C6 + C600C6C6C60084848400C6C6C600C6C6C600C6C6C6005273E7005273DE000042 + CE00FFEFCE00FFEFCE00FFEFCE00FFEFCE00FFEFCE00FFEFC600FFFFFF00FFFF + FF0094B5E7002152D600ADC6FF00C6C6C60063636300636363005A5A5A005A5A + 5A004A73DE00B5BDF700FFFFFF00FFFFFF00FFFFFF000042C6000042C600FFFF + FF00F7CEAD00F7CEAD00B5BDF7004A73DE0063636300636363005A5A5A005A5A + 5A005A5A5A00525252000042C600B5BDF700FFFFFF00FFFFFF00B5BDF7008C9C + EF00B5BDF7004A73DE000042C60031313100C6C6C60063636300424242006363 + 6300FFC67B00FFBD7300BD946300F7B57300EFAD6B0084848400000084000000 + 8400000084008484FF00C6C6C600C6C6C6004A73E7004A73E7005273DE001852 + C600FFEFCE00FFEFCE00FFEFCE00FFEFCE00FFEFCE00FFF7D600FFFFFF00FFFF + FF000042C6005273DE005273EF00C6C6C6006B6B6B00FFFFFF00FFFFFF005A5A + 5A00B5BDF7004A73DE00CED6FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00F7CE + AD00FFFFFF00F7CEAD004A73DE00393939006B6B6B00FFFFFF00FFFFFF005A5A + 5A00FFFFFF0052525200B5BDF7000042C6000042C6000042C600B5BDF7000042 + C6000042C6000042C600B5BDF7003939390084848400C6C6C600C6C6C6006363 + 6300FFC67B00FFC67B00FFBD7300F7B5730063636300000084000000FF000000 + FF000000FF00000084000000C600C6C6C600ADC6FF00527BEF00315AD6009CAD + C600FFEFCE00FFEFCE00FFEFCE00FFEFCE00FFEFCE00FFF7E700FFFFFF00D6DE + F7000042C6005273DE005273EF00C6C6C6006B6B6B0063636300636363005A5A + 5A005A5A5A004A73DE00B5BDF700CED6FF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00F7CEAD00B5BDF7004A73DE00393939006B6B6B0063636300636363005A5A + 5A005A5A5A005A5A5A005252520052525200525252000042C6000042C6000042 + C60042424200424242004242420039393900C6C6C600C6C6C60042424200D694 + 4A0084848400FFC67B00FFC67B0084848400000084000000FF000000FF000000 + FF000000FF000000FF00000084008484FF00C6C6C600ADC6FF00215ADE00396B + C600ADB5CE00FFEFCE00FFEFCE00FFF7CE00FFEFCE00FFEFD600FFFFFF00527B + D6003963D6004A6BDE00ADC6FF00C6C6C60073737300FFFFFF00FFFFFF00FFFF + FF005A5A5A00FFFFFF004A73DE004A73DE00B5BDF700FFFFFF00FFFFFF00B5BD + F7004A73DE004A73DE00FFFFFF003939390073737300FFFFFF00FFFFFF00FFFF + FF005A5A5A00FFFFFF005A5A5A00FFFFFF0052525200FFFFFF004A4A4A00FFFF + FF00FFFFFF00FFFFFF00FFFFFF0039393900848484006363630063636300D6AD + 6B00D6944A006363630063636300000084000000FF000000FF000000FF000000 + FF000000FF000000FF000000FF0000008400C6C6C600C6C6C600ADC6FF003963 + D600104ACE000031C600396BC600A5ADCE00FFF7CE00FFFFCE00FFFFFF000039 + C6005273DE005273E700C6C6C600C6C6C600737373006B6B6B00636363006363 + 6300636363005A5A5A005A5A5A005A5A5A004A73DE000042C6000042C6004A73 + DE004A4A4A004A4A4A004242420042424200737373006B6B6B00636363006363 + 6300636363005A5A5A005A5A5A005A5A5A005252520052525200525252004A4A + 4A004A4A4A004A4A4A004242420042424200C6C6C600C6C6C600C6C6C6006363 + 630042424200C6C6C60042424200000084000000FF000000FF000000FF000000 + FF000000FF000000FF000000FF0000008400C6C6C600C6C6C6007B9CFF004A73 + E7005273DE005A73DE004263D600104ACE000031C6002963C6005A84CE00215A + D6005273DE006B8CFF00C6C6C600C6C6C60073737300FFFFFF00FFFFFF006363 + 6300FFFFFF0063636300FFFFFF005A5A5A00FFFFFF0052525200FFFFFF005252 + 5200FFFFFF00FFFFFF00FFFFFF004242420073737300FFFFFF00FFFFFF006363 + 6300FFFFFF0063636300FFFFFF005A5A5A00FFFFFF0052525200FFFFFF005252 + 5200FFFFFF00FFFFFF00FFFFFF0042424200C6C6C600C6C6C600C6C6C6006363 + 6300C6C6C600C6C6C60063636300000084000000FF000000FF000000FF000000 + FF000000FF000000FF000000FF0000008400C6C6C600C6C6C600C6C6C600ADC6 + FF006B8CFF004A73E7005273E7005273DE005A73DE004263D6002963DE006384 + F7004A6BDE00ADC6FF00C6C6C600C6C6C6007B7B7B006B6B6B006B6B6B006B6B + 6B006363630063636300636363005A5A5A005A5A5A005A5A5A00525252005252 + 5200525252004A4A4A004A4A4A004A4A4A007B7B7B006B6B6B006B6B6B006B6B + 6B006363630063636300636363005A5A5A005A5A5A005A5A5A00525252005252 + 5200525252004A4A4A004A4A4A004A4A4A00C6C6C600C6C6C600C6C6C6008484 + 8400C6C6C60084848400C6C6C6008484FF00000084000000FF000000FF000000 + FF000000FF000000FF00000084008484FF00C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C6007B9CFF00638CFF004A73E7005273E700C6C6C600C6C6 + C600ADC6FF00C6C6C600C6C6C600C6C6C6007B7B7B00FFFFFF006B6B6B00FFFF + FF006B6B6B00FFFFFF0063636300FFFFFF005A5A5A00FFFFFF005A5A5A00FFFF + FF0052525200FFFFFF00FFFFFF004A4A4A007B7B7B00FFFFFF006B6B6B00FFFF + FF006B6B6B00FFFFFF0063636300FFFFFF005A5A5A00FFFFFF005A5A5A00FFFF + FF0052525200FFFFFF00FFFFFF004A4A4A00C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C6000000C600000084000000FF000000 + FF000000FF00000084000000C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600ADC6FF00ADC6FF00C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600848484007B7B7B007B7B7B007373 + 730073737300737373006B6B6B006B6B6B0063636300636363005A5A5A005A5A + 5A005A5A5A0052525200525252004A4A4A00848484007B7B7B007B7B7B007373 + 730073737300737373006B6B6B006B6B6B0063636300636363005A5A5A005A5A + 5A005A5A5A0052525200525252004A4A4A00C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6008484FF00000084000000 + 8400000084008484FF00C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C60042424200000000000000000042424200C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C6005A5A5A005A5A5A00525252005252 + 5200525252004A4A4A004A4A4A004A4A4A004242420042424200424242003939 + 390039393900393939003131310031313100C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C6008CDE8C0029B52900089400000894000029B5 + 29008CDE8C00C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C60000000000424242005252A5007373C6007373BD005252A500424242000000 + 0000C6C6C600C6C6C600C6C6C600C6C6C6005A5A5A00FFFFFF00FFFFFF005252 + 5200FFFFFF0052525200FFFFFF00FFFFFF00FFFFFF00FFFFFF0042424200FFFF + FF0039393900FFFFFF00FFFFFF0031313100C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C60029B5290008940000FFFFFF0008940000089400000894 + 00000894000029B52900C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C60084848400C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6000000 + 00005252A5007B7BD6007B7BCE0042424200000000006B6BB5006B6BB5005252 + A50000000000C6C6C600C6C6C600C6C6C6005A5A5A005A5A5A005A5A5A005A5A + 5A005252520052525200525252004A4A4A004A4A4A004A4A4A00424242004242 + 420042424200393939003939390039393900C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C60029B529008CDE8C00FFFFFF008CDE8C0008940000089400000894 + 00008CDE8C008CDE8C0029B52900C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C60063636300C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600000000006B6B + B5008484DE007B7BD60000000000FFFFFF00FFFFFF00424242006B6BB5006B6B + B5005252A50000000000C6C6C600C6C6C60063636300FFFFFF00FFFFFF00FFFF + FF005A5A5A00FFFFFF0052525200FFFFFF004A4A4A00FFFFFF004A4A4A00FFFF + FF00FFFFFF00FFFFFF00FFFFFF0039393900C6C6C600C6C6C600C6C6C600C6C6 + C6008CDE8C0008940000FFFFFF00089400000894000008940000089400000894 + 000008940000FFFFFF00089400008CDE8C00C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C60042424200C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600000000008484D6008C8C + EF008484E7008484DE0042424200FFFFFF00FFFFFF00000000006B6BB5006B6B + B5006B6BB5005252A50000000000C6C6C60063636300636363005A5A5A005A5A + 5A005A5A5A005A5A5A005252520052525200525252004A4A4A004A4A4A004A4A + 4A0042424200424242004242420039393900C6C6C600C6C6C600C6C6C600C6C6 + C60029B52900FFFFFF00FFFFFF00089400000894000008940000089400000894 + 000008940000FFFFFF00FFFFFF0029B52900C6C6C600C6C6C600C6C6C6008484 + 8400C6C6C600C6C6C600C6C6C60063636300636363006363630042424200C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600424242009494F7008C8C + EF008C8CEF008484E7008484DE0000000000424242007373C6006B6BBD006B6B + B5006B6BB5006B6BB50042424200C6C6C60063636300FFFFFF00FFFFFF005A5A + 5A00C6C6C600C6C6C600C6C6C600C6C6C600C6C6C60052525200FFFFFF004A4A + 4A00FFFFFF00FFFFFF00FFFFFF0042424200C6C6C600C6C6C600C6C6C600C6C6 + C60008940000FFFFFF00FFFFFF00FFFFFF000894000008940000089400000894 + 00008CDE8C00089400008CDE8C0008940000C6C6C600C6C6C600C6C6C600C6C6 + C60063636300C6C6C60042424200EFAD6B00E7A56B00E79C6B00846B52004242 + 4200C6C6C600C6C6C600C6C6C600C6C6C600424242008484D6009494FF009494 + F7009494F7008C8CEF0000000000FFFFFF00FFFFFF00000000007373C6007373 + BD006B6BB5006B6BB5005252A500424242006B6B6B0063636300636363006363 + 6300C6C6C600C6C6C600C6C6C600C6C6C600C6C6C60052525200525252004A4A + 4A004A4A4A004A4A4A004242420042424200C6C6C600C6C6C600C6C6C600C6C6 + C60008940000FFFFFF008CDE8C008CDE8C008CDE8C00FFFFFF00FFFFFF00FFFF + FF0008940000089400000894000008940000C6C6C600C6C6C600C6C6C600C6C6 + C6004242420042424200F7B57300EFAD6B00EFAD6B00A57B5200E79C6B006363 + 6300C6C6C600C6C6C600C6C6C600C6C6C600000000009C9CFF009C9CFF009C9C + FF009494FF009494F70042424200FFFFFF00FFFFFF00000000007373C6007373 + C6007373BD007373BD007373BD0000000000C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C6005A5A5A005A5A5A0052525200C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C60063636300636363005A5A5A005A5A + 5A0029B52900FFFFFF00FFFFFF000894000008940000FFFFFF00089400008CDE + 8C0008940000089400000894000029B52900C6C6C600C6C6C600C6C6C600C6C6 + C60063636300FFBD7300F7B57300F7B57300A57B5200EFAD6B00E7A56B006363 + 6300C6C6C600C6C6C60084848400C6C6C600000000009C9CFF009C9CFF009C9C + FF009C9CFF009C9CFF009494F70000000000FFFFFF00FFFFFF00000000007B7B + CE007373C6007373C6007373C60000000000C6C6C600C6C6C600C6C6C6006363 + 63006363630063636300C6C6C6005A5A5A00FFFFFF005A5A5A00C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C6006B6B6B00FFFFFF00FFFFFF005A5A + 5A008CDE8C0008940000FFFFFF00FFFFFF000894000008940000089400000894 + 00000894000008940000089400008CDE8C00C6C6C600C6C6C600636363004242 + 420063636300FFC67B00FFBD7300BD946300F7B57300EFAD6B00EFAD6B006363 + 63004242420063636300C6C6C600C6C6C600424242008484D600A5A5FF00A5A5 + FF00A5A5FF0000000000424242009494F70042424200FFFFFF00FFFFFF004242 + 42007B7BCE007B7BCE005252A50042424200C6C6C600C6C6C600C6C6C6006B6B + 6B00FFFFFF0063636300C6C6C6005A5A5A005A5A5A005A5A5A00C6C6C600C6C6 + C60052525200525252004A4A4A004A4A4A006B6B6B0063636300636363005A5A + 5A005A5A5A0029B529008CDE8C0008940000FFFFFF0008940000089400000894 + 0000089400000894000029B5290039393900C6C6C60084848400C6C6C600C6C6 + C60063636300FFC67B00FFC67B00FFBD7300F7B57300F7B5730042424200C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C60042424200A5A5FF00A5A5 + FF0000000000FFFFFF00FFFFFF008484840042424200FFFFFF00FFFFFF000000 + 00007B7BD6007B7BD60042424200C6C6C60073737300737373006B6B6B006B6B + 6B006B6B6B0063636300C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C60052525200FFFFFF00FFFFFF004A4A4A0073737300FFFFFF00FFFFFF00FFFF + FF005A5A5A00FFFFFF0029B5290008940000FFFFFF00FFFFFF008CDE8C000894 + 00000894000029B52900FFFFFF0039393900C6C6C600C6C6C600C6C6C6004242 + 4200D6944A0084848400FFC67B00FFC67B00FFBD730042424200C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600000000008484D600A5A5 + FF0042424200FFFFFF00FFFFFF008484840084848400FFFFFF00FFFFFF004242 + 42008484DE005252A50000000000C6C6C60073737300FFFFFF0073737300C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600636363005A5A5A005A5A5A00C6C6 + C6005A5A5A00525252005252520052525200737373006B6B6B00636363006363 + 6300636363005A5A5A005A5A5A008CDE8C0029B52900089400000894000029B5 + 29008CDE8C004A4A4A004242420042424200C6C6C60084848400636363006363 + 6300D6AD6B00D6944A006363630063636300636363004242420063636300C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600000000008484 + D600A5A5FF0000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00000000008C8C + EF006B6BB50000000000C6C6C600C6C6C6007B7B7B007373730073737300C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C60063636300FFFFFF005A5A5A00C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C60073737300FFFFFF00FFFFFF006363 + 6300FFFFFF0063636300FFFFFF005A5A5A00FFFFFF0052525200FFFFFF005252 + 5200FFFFFF00FFFFFF00FFFFFF0042424200C6C6C600C6C6C600C6C6C600C6C6 + C6006363630042424200C6C6C60042424200C6C6C600C6C6C600C6C6C6008484 + 8400C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6000000 + 00008484D600A5A5FF00424242000000000000000000424242009494F7008484 + D60000000000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600737373006B6B6B006B6B6B00C6C6C600636363006363630063636300C6C6 + C6005A5A5A005A5A5A005A5A5A00C6C6C6007B7B7B006B6B6B006B6B6B006B6B + 6B006363630063636300636363005A5A5A005A5A5A005A5A5A00525252005252 + 5200525252004A4A4A004A4A4A004A4A4A00C6C6C600C6C6C600C6C6C600C6C6 + C60063636300C6C6C600C6C6C60063636300C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C60000000000424242008484D6009C9CFF009C9CFF008484D600424242000000 + 0000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C60073737300FFFFFF006B6B6B00C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C6005A5A5A00FFFFFF005A5A5A00C6C6C6007B7B7B00FFFFFF006B6B6B00FFFF + FF006B6B6B00FFFFFF0063636300FFFFFF005A5A5A00FFFFFF005A5A5A00FFFF + FF0052525200FFFFFF00FFFFFF004A4A4A00C6C6C600C6C6C600C6C6C600C6C6 + C60084848400C6C6C60084848400C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C60042424200000000000000000042424200C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600737373007373730073737300C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600636363005A5A5A005A5A5A00C6C6C600848484007B7B7B007B7B7B007373 + 730073737300737373006B6B6B006B6B6B0063636300636363005A5A5A005A5A + 5A005A5A5A0052525200525252004A4A4A00C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600848484004242420021212100212121002121 + 210021212100212121002121210042424200C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C60042424200636363006363630042424200C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C0C0C000C0C0C000C0C0C000C0C0 + C000C0C0C000C0C0C0000000000000000000C0C0C000C0C0C000C0C0C000C0C0 + C000C0C0C000C0C0C000C0C0C000C0C0C000C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600086B7B0008E7FF0008DEFF0008D6FF0008CE + EF0008BDE70008B5D60008ADCE0021212100C6C6C600C6C6C600C6C6C6006363 + 6300C6C6C600C6C6C60063636300A59484009C94840063636300C6C6C600C6C6 + C60063636300A5A5A500C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600000000000000000000000000C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C0C0C000C0C0C000C0C0C000C0C0 + C000C0C0C00000000000C6C6C60000000000C0C0C000C0C0C000000000000000 + 0000C0C0C000C0C0C000C0C0C000C0C0C000C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600086B7B0008E7FF0008DEFF0008D6FF0008CE + EF0008BDE70008B5D60008ADCE0021212100C6C6C600C6C6C600424242009C8C + 7B002121210000000000A59C8C00A59C8C00A59484009C948400000000002121 + 21009C8C7B0042424200A5A5A500C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600000000008400840000000000848484000000000000000000C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C0C0C000C0C0C000C0C0C000C0C0 + C0000000000031B5D600C6C6C60000000000C0C0C00000000000FFFFFF000000 + 0000C0C0C000C0C0C000C0C0C000C0C0C000C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600086B7B0008E7FF0008DEFF0008D6FF0008CE + EF0008BDE70008B5D60008ADCE0021212100C6C6C600636363009C8C7B00ADA5 + 9400ADA59400AD9C8C00A59C8C00A59C8C00A59C8C00A59484009C9484009C94 + 84009C9484009C8C7B0063636300C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C60000000000840084008400840000000000FFFFFF00C6C6C600FFFFFF000000 + 000000000000C6C6C600C6C6C600C6C6C600C0C0C000C0C0C000C0C0C000C0C0 + C000C0C0C00000000000C6C6C600000000000000000084848400FFFFFF000000 + 0000C0C0C000C0C0C000C0C0C000C0C0C000C6C6C600C6C6C600C6C6C600F7D6 + 9400D6941000A56B0800A56B0800086B7B0008E7FF0008DEFF0008D6FF0008CE + EF0008BDE70008B5D60008ADCE0021212100C6C6C600C6C6C60021212100B5A5 + 9400ADA59400ADA5940042424200424242004242420042424200A59484009C94 + 84009C94840021212100C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6000000 + 00008400840084008400840084000000000084848400FFFFFF00C6C6C600FFFF + FF00C6C6C6000000000000000000C6C6C600C0C0C000C0C0C000C0C0C000C0C0 + C0000000000031B5D600C6C6C60000000000C0C0C00000000000FFFFFF000000 + 0000C0C0C000C0C0C000C0C0C000C0C0C000C6C6C600C6C6C600D6941000A56B + 0800FFFFFF00D6941000A56B0800086B7B0008E7FF0008DEFF0008D6FF0008CE + EF0008BDE70008B5D60008ADCE0042424200C6C6C600C6C6C60000000000B5AD + 9C00B5A5940021212100C6C6C600C6C6C600C6C6C600C6C6C60021212100A594 + 84009C94840000000000C6C6C600C6C6C600C6C6C600C6C6C600000000008400 + 8400840084008400840084008400C6C6C600000000000000000084848400C6C6 + C600FFFFFF00C6C6C6000000000000000000C0C0C000C0C0C000C0C0C000C0C0 + C0000000000021EFFF00C6C6C600000000000000000084848400FFFFFF000000 + 0000C0C0C000C0C0C000C0C0C000C0C0C000C6C6C600D6941000F7D69400FFFF + FF00F7D69400D6941000A56B0800086B7B00086B7B00086B7B00086B7B00086B + 7B00086B7B00086B7B00086B7B00086B7B004242420063636300B5AD9C00B5AD + 9C0042424200C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6004242 + 4200A59484009C9484006363630042424200C6C6C60000000000840084008400 + 84008400840084008400C6C6C600840084008400840084008400000000000000 + 000084848400FFFFFF0084848400FFFFFF00C0C0C000C0C0C000C0C0C0000000 + 000031B5D60021EFFF00C6C6C6000000000000000000C6C6C600FFFFFF000000 + 0000C0C0C000C0C0C000C0C0C000C0C0C000F7D69400A56B0800FFFFFF00D694 + 1000D6941000A56B0800A56B0800A56B080042424200CECECE0042424200F7D6 + 940042424200B5B5B50042424200C6C6C60063636300BDB5A500BDAD9C00B5AD + 9C0042424200C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6004242 + 4200A59C8C00A59484009C948400636363000000000084008400840084008400 + 840084008400C6C6C60084008400840084008400840084008400840084008400 + 8400000000000000000084848400FFFFFF00C0C0C000C0C0C000C0C0C000C0C0 + C00000000000C6C6C60021EFFF000000000084848400C6C6C600FFFFFF000000 + 0000C0C0C000C0C0C000C0C0C000C0C0C000D6941000FFFFFF00FFFFFF00A56B + 0800A56B0800A56B0800A56B0800A56B080042424200CECECE0042424200D694 + 100042424200B5B5B50042424200C6C6C60063636300BDB5A500BDB5A500BDAD + 9C0042424200C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6004242 + 4200A59C8C00A59C8C00A5948400636363000000000084008400840084008400 + 8400C6C6C60084008400840084008400840084008400FF42FF00FFFFFF008400 + 840084008400840084000000000000000000C0C0C000C0C0C000C0C0C0000000 + 0000C6C6C60021EFFF0021EFFF00C6C6C60000000000FFFFFF00C6C6C6000000 + 0000C0C0C000C0C0C000C0C0C000C0C0C000A56B0800FFFFFF00FFFFFF00FFFF + FF00A56B0800A56B0800A56B0800A56B080042424200CECECE0042424200A56B + 080042424200B5B5B50042424200C6C6C6004242420063636300BDB5A500BDB5 + A50042424200C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6004242 + 4200A59C8C00A59C8C006363630042424200000000008400840084008400C6C6 + C60084008400840084008400840084008400FFFFFF0084008400840084008400 + 8400840084008400840000000000C6C6C600C0C0C000C0C0C0000000000021EF + FF0021EFFF0021EFFF0021EFFF0021EFFF00C6C6C60000000000C6C6C600FFFF + FF0000000000C0C0C000C0C0C000C0C0C000A56B0800FFFFFF00F7D69400F7D6 + 9400F7D69400FFFFFF00F7D69400FFFFFF0084848400C6C6C600848484004242 + 420084848400B5B5B50084848400C6C6C600C6C6C600C6C6C60000000000BDB5 + A500BDB5A50021212100C6C6C600C6C6C600C6C6C600C6C6C60021212100ADA5 + 9400AD9C8C0000000000C6C6C600C6C6C6000000000084008400C6C6C6008400 + 840084008400840084008400840084008400FFFFFF0084008400840084008400 + 84008400840000000000C6C6C600C6C6C600C0C0C000C0C0C0000000000021EF + FF0021EFFF0021EFFF0021EFFF0021EFFF00C6C6C60000000000C6C6C600C6C6 + C600FFFFFF0000000000C0C0C000C0C0C000D6941000FFFFFF00FFFFFF00A56B + 0800A56B0800F7D69400A56B0800F7D69400A56B080084848400BDBDBD00BDBD + BD00B5B5B50042424200C6C6C600C6C6C600C6C6C600C6C6C60021212100BDB5 + A500BDB5A500BDB5A50042424200424242004242420042424200B5A59400ADA5 + 9400ADA5940021212100C6C6C600C6C6C60000000000C6C6C600840084008400 + 840084008400FFFFFF008400840084008400FFFFFF0084008400840084008400 + 840000000000C6C6C600C6C6C600C6C6C600C0C0C000C0C0C0000000000021EF + FF00C6C6C600000000000000000021EFFF00C6C6C60000000000C6C6C600C6C6 + C600FFFFFF0000000000C0C0C000C0C0C000F7D69400A56B0800FFFFFF00FFFF + FF00A56B0800A56B0800A56B0800A56B0800A56B0800A56B0800424242004242 + 420042424200C6C6C600C6C6C600C6C6C600C6C6C600636363009C8C7B00C6B5 + A500BDB5A500BDB5A500BDB5A500BDAD9C00B5AD9C00B5AD9C00B5AD9C00B5A5 + 9400ADA594009C8C7B0063636300C6C6C600C6C6C60000000000000000008400 + 84008400840084008400FFFFFF00FFFFFF008400840084008400840084000000 + 0000C6C6C600C6C6C600C6C6C600C6C6C600C0C0C000C0C0C0000000000021EF + FF00C6C6C60031B5D60031B5D60021EFFF00C6C6C6000000000000000000C6C6 + C600FFFFFF0000000000C0C0C000C0C0C000C6C6C600D6941000F7D69400A56B + 0800FFFFFF00A56B0800A56B0800A56B0800A56B0800A56B0800D6941000C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600424242009C8C + 7B002121210000000000BDB5A500BDB5A500BDAD9C00B5AD9C00000000002121 + 21009C8C7B0042424200C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6000000 + 000000000000840084008400840084008400840084008400840000000000C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C0C0C000C0C0C000C0C0C0000000 + 000021EFFF0021EFFF0021EFFF0021EFFF00000000008484840084848400C6C6 + C600FFFFFF0000000000C0C0C000C0C0C000C6C6C600C6C6C600D6941000A56B + 0800FFFFFF00FFFFFF00F7D69400A56B0800A56B0800D6941000C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6006363 + 6300C6C6C600C6C6C60063636300BDB5A500BDB5A50063636300C6C6C600C6C6 + C60063636300C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C6000000000000000000840084008400840000000000C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C0C0C000C0C0C000C0C0C000C0C0 + C00000000000000000000000000000000000C6C6C600C6C6C600C6C6C600C6C6 + C60000000000C0C0C000C0C0C000C0C0C000C6C6C600C6C6C600C6C6C600F7D6 + 9400D6941000A56B0800A56B0800D6941000F7D69400C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C60042424200636363006363630042424200C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C6000000000000000000C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C0C0C000C0C0C000C0C0C000C0C0 + C000C0C0C000C0C0C000C0C0C000C0C0C0000000000000000000000000000000 + 0000C0C0C000C0C0C000C0C0C000C0C0C000C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C6004A4A4A004A4A4A004A4A4A004A4A4A004A4A + 4A004A4A4A004A4A4A004A4A4A004A4A4A00C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C6004A4A4A004A4A4A004A4A4A004A4A4A004A4A + 4A004A4A4A004A4A4A004A4A4A004A4A4A00C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C6004A4A4A00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF004A4A4A00C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C6004A4A4A00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF004A4A4A00C6C6C600C6C6C6004A4A4A004A4A + 4A004A4A4A004A4A4A004A4A4A004A4A4A004A4A4A004A4A4A004A4A4A004A4A + 4A004A4A4A00C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6004A4A4A004A4A + 4A004A4A4A004A4A4A004A4A4A004A4A4A004A4A4A004A4A4A004A4A4A004A4A + 4A004A4A4A00C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C6004A4A4A004A4A4A004A4A4A004A4A4A004A4A4A004A4A4A004A4A + 4A004A4A4A004A4A4A00FFFFFF004A4A4A00C6C6C6004A4A4A004A4A4A004A4A + 4A004A4A4A004A4A4A004A4A4A004A4A4A004A4A4A004A4A4A004A4A4A004A4A + 4A004A4A4A004A4A4A00FFFFFF004A4A4A00C6C6C600C6C6C6004A4A4A00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF004A4A4A00C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6004A4A4A00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF004A4A4A00C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C6004A4A4A00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF004A4A4A00FFFFFF004A4A4A004A4A4A0000848400008484004A4A + 4A004A4A4A004A4A4A00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF004A4A4A00FFFFFF004A4A4A004A4A4A004A4A4A004A4A4A004A4A + 4A004A4A4A004A4A4A004A4A4A004A4A4A004A4A4A004A4A4A004A4A4A00FFFF + FF004A4A4A00C6C6C600C6C6C600C6C6C6004A4A4A004A4A4A004A4A4A004A4A + 4A004A4A4A004A4A4A004A4A4A004A4A4A004A4A4A004A4A4A004A4A4A00FFFF + FF004A4A4A00C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C6004A4A4A00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF004A4A4A00FFFFFF004A4A4A004A4A4A0000848400008484004A4A + 4A004A4A4A004A4A4A00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF004A4A4A00FFFFFF004A4A4A004A4A4A00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF004A4A4A00FFFF + FF004A4A4A00C6C6C600C6C6C600C6C6C6004A4A4A00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF004A4A4A00FFFF + FF004A4A4A00C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C6004A4A4A00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF004A4A4A00FFFFFF004A4A4A004A4A4A0000848400008484004A4A + 4A004A4A4A004A4A4A00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF004A4A4A00FFFFFF004A4A4A004A4A4A00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF004A4A4A00FFFF + FF004A4A4A00C6C6C600C6C6C600C6C6C6004A4A4A00FFFFFF00FFFFFF00FFFF + FF004A4A4A00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF004A4A4A00FFFF + FF004A4A4A00C6C6C600C6C6C600C6C6C6004A4A4A004A4A4A004A4A4A004A4A + 4A004A4A4A004A4A4A00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF004A4A4A00FFFFFF004A4A4A004A4A4A0000848400008484004A4A + 4A004A4A4A004A4A4A00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF004A4A4A00FFFFFF004A4A4A004A4A4A00FFFFFF00FFFFFF00FFFF + FF00FFFFFF004A4A4A00FFFFFF00FFFFFF00FFFFFF00FFFFFF004A4A4A00FFFF + FF004A4A4A00C6C6C600C6C6C600C6C6C6004A4A4A00FFFFFF00FFFFFF004A4A + 4A004A4A4A004A4A4A00FFFFFF00FFFFFF00FFFFFF00FFFFFF004A4A4A00FFFF + FF004A4A4A00C6C6C600C6C6C600C6C6C6004A4A4A004A4A4A004AADAD004AAD + AD004AADAD004A4A4A00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF004A4A4A004A4A4A004A4A4A004A4A4A0000848400008484000084 + 8400008484004A4A4A00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF004A4A4A004A4A4A004A4A4A004A4A4A00FFFFFF00FFFFFF00FFFF + FF00FFFFFF004A4A4A00FFFFFF00FFFFFF00FFFFFF00FFFFFF004A4A4A00FFFF + FF004A4A4A00C6C6C600C6C6C600C6C6C6004A4A4A00FFFFFF004A4A4A004A4A + 4A00FFFFFF004A4A4A004A4A4A00FFFFFF00FFFFFF00FFFFFF004A4A4A00FFFF + FF004A4A4A00C6C6C600C6C6C600C6C6C6004A4A4A004AFFFF004A4A4A004AAD + AD004AADAD004A4A4A00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF004A4A4A004A4A4A00C6C6C6004A4A4A0000848400008484004A4A + 4A004A4A4A004A4A4A00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF004A4A4A004A4A4A00C6C6C6004A4A4A00FFFFFF00FFFFFF004A4A + 4A004A4A4A004A4A4A004A4A4A004A4A4A00FFFFFF00FFFFFF004A4A4A00FFFF + FF004A4A4A00C6C6C600C6C6C600C6C6C6004A4A4A00FFFFFF004A4A4A00FFFF + FF00FFFFFF00FFFFFF004A4A4A004A4A4A00FFFFFF00FFFFFF004A4A4A00FFFF + FF004A4A4A00C6C6C600C6C6C600C6C6C6004A4A4A00FFFFFF004AFFFF004A4A + 4A004AADAD004A4A4A00FFFFFF00FFFFFF00FFFFFF00FFFFFF004A4A4A004A4A + 4A004A4A4A004A4A4A00C6C6C600C6C6C6004A4A4A00008484004A4A4A00DEEF + EF00DEEFEF004A4A4A00FFFFFF00FFFFFF00FFFFFF00FFFFFF004A4A4A004A4A + 4A004A4A4A004A4A4A00C6C6C600C6C6C6004A4A4A00FFFFFF00FFFFFF00FFFF + FF00FFFFFF004A4A4A00FFFFFF00FFFFFF00FFFFFF00FFFFFF004A4A4A00FFFF + FF004A4A4A00C6C6C600C6C6C600C6C6C6004A4A4A00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF004A4A4A004A4A4A00FFFFFF004A4A4A00FFFF + FF004A4A4A00C6C6C600C6C6C600C6C6C6004A4A4A004AFFFF00FFFFFF004AFF + FF004A4A4A004A4A4A00FFFFFF00FFFFFF00FFFFFF00FFFFFF004A4A4A00FFFF + FF004A4A4A004AADAD004A4A4A00C6C6C6004A4A4A00008484004A4A4A00DEEF + EF00DEEFEF004A4A4A00FFFFFF00FFFFFF00FFFFFF00FFFFFF004A4A4A00FFFF + FF004A4A4A004A4A4A00C6C6C600C6C6C6004A4A4A00FFFFFF00FFFFFF00FFFF + FF00FFFFFF004A4A4A00FFFFFF00FFFFFF00FFFFFF00FFFFFF004A4A4A004A4A + 4A004A4A4A00C6C6C600C6C6C600C6C6C6004A4A4A00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF004A4A4A00FFFFFF004A4A4A004A4A + 4A004A4A4A00C6C6C600C6C6C600C6C6C6004A4A4A00FFFFFF004AFFFF00FFFF + FF004AFFFF004A4A4A00FFFFFF00FFFFFF00FFFFFF00FFFFFF004A4A4A004A4A + 4A004A4A4A004A4A4A004A4A4A004A4A4A004A4A4A00008484004A4A4A00DEEF + EF00DEEFEF004A4A4A00FFFFFF00FFFFFF00FFFFFF00FFFFFF004A4A4A004A4A + 4A00008484004A4A4A00C6C6C600C6C6C6004A4A4A00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF004A4A4A004A4A + 4A00C6C6C600C6C6C600C6C6C600C6C6C6004A4A4A00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF004A4A4A004A4A + 4A00C6C6C600C6C6C600C6C6C600C6C6C6004A4A4A004AFFFF00FFFFFF004AFF + FF00FFFFFF004A4A4A004A4A4A004A4A4A004A4A4A004A4A4A004A4A4A00C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C6004A4A4A00008484004A4A4A00DEEF + EF00DEEFEF004A4A4A004A4A4A004A4A4A004A4A4A004A4A4A004A4A4A004A4A + 4A00008484004A4A4A00C6C6C600C6C6C6004A4A4A00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF004A4A4A004A4A4A004A4A4A004A4A4A00C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C6004A4A4A00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF004A4A4A004A4A4A004A4A4A004A4A4A00C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C6004A4A4A00FFFFFF004AFFFF00FFFF + FF004AFFFF00FFFFFF004AFFFF00FFFFFF004AFFFF00FFFFFF004A4A4A00C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C6004A4A4A00008484004A4A4A00DEEF + EF00DEEFEF00DEEFEF00DEEFEF00DEEFEF00DEEFEF00DEEFEF00DEEFEF004A4A + 4A00008484004A4A4A00C6C6C600C6C6C6004A4A4A00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF004A4A4A00FFFFFF004A4A4A00C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C6004A4A4A00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF004A4A4A00FFFFFF004A4A4A00C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C6004A4A4A004AFFFF00FFFFFF004AFF + FF004A4A4A004A4A4A004A4A4A004A4A4A004A4A4A004A4A4A004A4A4A00C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C6004A4A4A00008484004A4A4A00DEEF + EF00DEEFEF00DEEFEF00DEEFEF00DEEFEF00DEEFEF00DEEFEF00DEEFEF004A4A + 4A00DEEFEF004A4A4A00C6C6C600C6C6C6004A4A4A00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF004A4A4A004A4A4A00C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C6004A4A4A00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF004A4A4A004A4A4A00C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6004A4A4A004A4A4A004A4A + 4A00C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C6004A4A4A004A4A4A004A4A4A004A4A + 4A004A4A4A004A4A4A004A4A4A004A4A4A004A4A4A004A4A4A004A4A4A004A4A + 4A004A4A4A004A4A4A00C6C6C600C6C6C6004A4A4A004A4A4A004A4A4A004A4A + 4A004A4A4A004A4A4A004A4A4A004A4A4A00C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C6004A4A4A004A4A4A004A4A4A004A4A + 4A004A4A4A004A4A4A004A4A4A004A4A4A00C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6004A4A4A004A4A + 4A004A4A4A004A4A4A004A4A4A004A4A4A004A4A4A004A4A4A004A4A4A004A4A + 4A004A4A4A00C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6004A4A4A004A4A + 4A004A4A4A004A4A4A004A4A4A004A4A4A004A4A4A004A4A4A004A4A4A004A4A + 4A004A4A4A00C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6004A4A4A00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF004A4A4A00C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6004A4A4A00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF004A4A4A00C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600FF000000C6C6C600C6C6C600C6C6C600FFA5A500FF636300C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C6004A4A4A004A4A4A004A4A4A004A4A + 4A004A4A4A004A4A4A004A4A4A004A4A4A004A4A4A004A4A4A004A4A4A00FFFF + FF004A4A4A00C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6004A4A4A00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF004A4A4A00C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600FF000000C6C6C600C6C6C600FFD6D600FF424200FFFFFF00C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C6004A4A4A00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF004A4A4A00FFFF + FF004A4A4A00C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6004A4A4A00FFFF + FF00FFFFFF00FFFFFF0000840000FFFFFF0000840000FFFFFF00FFFFFF00FFFF + FF004A4A4A00C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600FF000000C6C6C600FFF7F700FF393900FFE7E700C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C6004242420042424200C6C6C6004242420042424200CECECE00C6C6 + C60073737300424242004A4A4A008C8C8C004A4A4A00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF004A4A4A00FFFF + FF004A4A4A00C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6004A4A4A00FFFF + FF00FFFFFF0000840000FFFFFF00FFFFFF00FFFFFF0000840000FFFFFF00FFFF + FF004A4A4A00C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600FF000000FFEFEF00FF5A5A00FFC6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C60042424200C6C6 + C600C6C6C600C6C6C60042424200C6C6C600ADADAD009C9C9C00C6C6C6007373 + 7300ADADAD00C6C6C600FFFFFF00FFFFFF004A4A4A00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF004A4A4A00FFFF + FF004A4A4A00C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6004A4A4A00FFFF + FF0000840000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000840000FFFF + FF004A4A4A00C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600FF000000FF636300FF9C9C00C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C60042424200C6C6 + C600C6C6C600C6C6C60042424200A5A5A5007B7B7B00C6C6C600C6C6C6004242 + 4200424242004242420042424200424242004A4A4A00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF004A4A4A00FFFF + FF004A4A4A00C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6004A4A4A00FFFF + FF00FFFFFF0000840000FFFFFF00FFFFFF00FFFFFF0000840000FFFFFF00FFFF + FF004A4A4A00C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600FF000000FFF7F700FFADAD00C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C6004242420042424200424242004242 + 420042424200C6C6C60042424200C6C6C600CECECE00A5A5A500E7E7E7006363 + 6300BDBDBD00C6C6C600BDBDBD007B7B7B004A4A4A00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF004A4A4A00FFFF + FF004A4A4A00C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6004A4A4A00FFFF + FF00FFFFFF00FFFFFF0000840000FFFFFF0000840000FFFFFF00FFFFFF00FFFF + FF004A4A4A00C6C6C600C6C6C600C6C6C600FF525200C6C6C600FF525200C6C6 + C600FF000000C6C6C600FFEFEF00FF949400C6C6C600C6C6C600C6C6C600C6C6 + C600FF525200C6C6C600FF525200C6C6C600C6C6C600C6C6C60042424200C6C6 + C600C6C6C600C6C6C60042424200C6C6C600424242004242420042424200E7E7 + E70063636300424242006B6B6B00EFEFEF004A4A4A00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF004A4A4A00FFFF + FF004A4A4A00C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6004A4A4A00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF004A4A4A00C6C6C600C6C6C600C6C6C600FF424200C6C6C600FF424200C6C6 + C600FF000000C6C6C600C6C6C600FFE7E700FF8C8C00C6C6C600C6C6C600C6C6 + C600FF424200C6C6C600FF424200C6C6C600C6C6C600C6C6C60042424200C6C6 + C600C6C6C600C6C6C60042424200C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C6004A4A4A00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF004A4A4A004A4A + 4A004A4A4A00C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6004A4A4A00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF004A4A4A004A4A4A004A4A + 4A004A4A4A00C6C6C600C6C6C600C6C6C600FF313100C6C6C600FF313100C6C6 + C600FF000000C6C6C600C6C6C600C6C6C600FFD6D600FF848400C6C6C600C6C6 + C600FF313100C6C6C600FF313100C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C6004242420042424200C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C6004A4A4A00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF004A4A4A004A4A + 4A00C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6004A4A4A00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF004A4A4A00FFFFFF004A4A + 4A00C6C6C600C6C6C600C6C6C600C6C6C600FF000000C6C6C600FF000000C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600FF000000C6C6C600FF000000C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C6004A4A4A00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF004A4A4A004A4A4A004A4A4A004A4A4A00C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6004A4A4A00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF004A4A4A004A4A4A00C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C6004A4A4A00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF004A4A4A00FFFFFF004A4A4A00C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6004A4A4A004A4A + 4A004A4A4A004A4A4A004A4A4A004A4A4A004A4A4A004A4A4A00C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C6004A4A4A00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF004A4A4A004A4A4A00C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C6004A4A4A004A4A4A004A4A4A004A4A + 4A004A4A4A004A4A4A004A4A4A004A4A4A00C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C60042424200424242004242420042424200424242004242 + 420042424200424242004242420042424200C6C6C600C6C6C600424242004242 + 4200424242004242420042424200424242004242420042424200424242004242 + 420042424200C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C60000000000FFFFFF00C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C60042424200FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF0042424200C6C6C60042424200DEEFEF00DEEF + EF00DEEFEF00DEEFEF00DEEFEF00DEEFEF00DEEFEF00DEEFEF00DEEFEF004242 + 4200DEEFEF0042424200C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6000000 + 0000FFFFFF00C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C6000000000000000000000000000000 + 000000000000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600000000000000 + 0000000000000000000000000000C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C60042424200FFFFFF004242420042424200424242004242 + 42004242420042424200FFFFFF00424242004242420042424200424242004242 + 4200424242004242420042424200424242004242420042424200424242004242 + 420042424200DEEFEF0042424200C6C6C600C6C6C600C6C6C600000000000000 + 000000000000FFFFFF00C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C60000000000FFFFFF00C6C6C600C6C6C60000000000DEEFEF00000000000000 + 000000000000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C60000000000DEEF + EF00000000000000000000000000C6C6C6000000000000000000000000000000 + 000000000000C6C6C60042424200FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF004242420042424200DEEFEF00DEEFEF00DEEF + EF00DEEFEF00DEEFEF00DEEFEF0000FFFF0000FFFF0000FFFF00DEEFEF00DEEF + EF00424242004242420042424200C6C6C600C6C6C600C6C6C600000000000000 + 000000000000FFFFFF00C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6000000 + 0000FFFFFF00C6C6C600C6C6C600C6C6C60000000000DEEFEF00000000000000 + 000000000000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C60000000000DEEF + EF00000000000000000000000000C6C6C60000000000DEEFEF00000000000000 + 000000000000C6C6C60042424200FFFFFF004242420042424200424242004242 + 42004242420042424200FFFFFF004242420042424200DEEFEF00DEEFEF00DEEF + EF00DEEFEF00DEEFEF00DEEFEF009CADAD009CADAD009CADAD00DEEFEF00DEEF + EF0042424200DEEFEF0042424200C6C6C600C6C6C600C6C6C600C6C6C6000000 + 00000000000000000000FFFFFF00C6C6C600C6C6C600C6C6C600000000000000 + 0000FFFFFF00C6C6C600C6C6C600C6C6C6000000000000000000000000000000 + 0000000000000000000000000000C6C6C6000000000000000000000000000000 + 0000000000000000000000000000C6C6C60000000000DEEFEF00000000000000 + 000000000000C6C6C60042424200FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00424242004242420042424200424242004242 + 4200424242004242420042424200424242004242420042424200424242004242 + 420042424200DEEFEF00DEEFEF0042424200C6C6C600C6C6C600C6C6C600C6C6 + C600000000000000000000000000FFFFFF00C6C6C6000000000000000000FFFF + FF00C6C6C600C6C6C600C6C6C600C6C6C6000000000000000000DEEFEF000000 + 00000000000000000000000000000000000000000000DEEFEF00000000000000 + 0000000000000000000000000000C6C6C6000000000000000000000000000000 + 0000000000000000000042424200FFFFFF004242420042424200424242004242 + 42004242420042424200FFFFFF004242420042424200DEEFEF00DEEFEF00DEEF + EF00DEEFEF00DEEFEF00DEEFEF00DEEFEF00DEEFEF00DEEFEF00DEEFEF004242 + 4200DEEFEF0042424200DEEFEF0042424200C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C6000000000000000000000000000000000000000000FFFFFF00C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C6000000000000000000DEEFEF000000 + 00000000000000000000DEEFEF000000000000000000DEEFEF00000000000000 + 0000000000000000000000000000C6C6C6000000000000000000DEEFEF000000 + 0000000000000000000042424200FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF0042424200C6C6C60042424200424242004242 + 420042424200424242004242420042424200424242004242420042424200DEEF + EF0042424200DEEFEF004242420042424200C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600000000000000000000000000FFFFFF00C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C6000000000000000000DEEFEF000000 + 00000000000000000000DEEFEF000000000000000000DEEFEF00000000000000 + 0000000000000000000000000000C6C6C6000000000000000000DEEFEF000000 + 0000000000000000000042424200FFFFFF00424242004242420042424200FFFF + FF0042424200424242004242420042424200C6C6C600C6C6C60042424200FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF004242 + 4200DEEFEF0042424200DEEFEF0042424200C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C6000000000000000000000000000000000000000000FFFFFF00C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C60000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000C6C6C600C6C6C6000000000000000000DEEFEF000000 + 0000000000000000000042424200FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF0042424200FFFFFF0042424200C6C6C600C6C6C600C6C6C600C6C6C6004242 + 4200FFFFFF004242420042424200424242004242420042424200FFFFFF004242 + 4200424242004242420042424200C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600000000000000000000000000FFFFFF00C6C6C60000000000FFFFFF00C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C60000000000DEEF + EF00000000000000000000000000C6C6C60000000000DEEFEF00000000000000 + 000000000000C6C6C600C6C6C600C6C6C600C6C6C60000000000000000000000 + 0000000000000000000042424200FFFFFF00FFFFFF00FFFFFF00FFFFFF004242 + 42004242420042424200C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6004242 + 4200FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF0042424200C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600000000000000 + 00000000000000000000FFFFFF00C6C6C600C6C6C600C6C6C600000000000000 + 0000FFFFFF00C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600000000000000 + 0000000000000000000000000000C6C6C6000000000000000000000000000000 + 000000000000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C60000000000DEEF + EF00000000000000000042424200424242004242420042424200424242004242 + 420042424200C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C60042424200FFFFFF004242420042424200424242004242420042424200FFFF + FF0042424200C6C6C600C6C6C600C6C6C600C6C6C60000000000000000000000 + 000000000000FFFFFF00C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6000000 + 000000000000FFFFFF00C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6000000 + 00000000000000000000C6C6C600C6C6C600C6C6C60000000000000000000000 + 0000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600000000000000 + 0000000000000000000000000000C6C6C6000000000000000000000000000000 + 000000000000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C60042424200FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF0042424200C6C6C600C6C6C600C6C6C6000000000000000000FFFF + FF00C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C6000000000000000000FFFFFF00C6C6C600C6C6C600C6C6C600C6C6C6000000 + 0000DEEFEF0000000000C6C6C600C6C6C600C6C6C60000000000DEEFEF000000 + 0000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6000000 + 00000000000000000000C6C6C600C6C6C600C6C6C60000000000000000000000 + 0000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C6004242420042424200424242004242420042424200424242004242 + 42004242420042424200C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6000000 + 00000000000000000000C6C6C600C6C6C600C6C6C60000000000000000000000 + 0000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6000000 + 0000DEEFEF0000000000C6C6C600C6C6C600C6C6C60000000000DEEFEF000000 + 0000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6000000 + 00000000000000000000C6C6C600C6C6C600C6C6C60000000000000000000000 + 0000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C60000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600FFFFFF0084B58400107310001873 + 18001873180018731800187B1800187B1800107B1000107B1000087B0800087B + 0800007B0000007300007BB57B00FFFFFF00C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C60000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF0000000000C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C6004242420042424200424242004242 + 4200424242004242420042424200424242004242420042424200424242004242 + 4200C6C6C600C6C6C6004242420042424200FFFFFF0010841000218C21002994 + 2900319431003194310029942900299C2900219C210018A5180018A5180010A5 + 100008A5080000940000006B0000FFFFFF00C6C6C60000000000000000000000 + 0000000000000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00000000004A4A4A004A4A4A004A4A4A004A4A + 4A004A4A4A004A4A4A004A4A4A004A4A4A004A4A4A004A4A4A004A4A4A00C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C60042424200FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF004242 + 4200C6C6C600424242004242420042424200FFFFFF00188C180029942900399C + 3900399C3900399C3900FFFFFF00A5D6A5004AA54A004AA54A004AA54A0029A5 + 290018A51800009C0000007B0000FFFFFF000000000000848400008484000000 + 0000000000000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00000000004A4A4A00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF004A4A4A00C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C60042424200FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF004242420042424200424242004242 + 4200424242004242420042424200C6C6C600FFFFFF0021942100399C390042A5 + 420042A5420042A54200FFFFFF00FFFFFF00A5D6A5004AA54A004AA54A0039A5 + 390021A5210008A50800087B0800FFFFFF000000000000848400008484000000 + 0000000000000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00000000004A4A4A00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF004A4A4A00C6C6 + C600C6C6C600C6C6C60000000000C6C6C60042424200FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00424242009CADAD00DEEFEF00DEEFEF009CAD + AD004242420042424200C6C6C600C6C6C600FFFFFF0029942900429C42004AA5 + 4A0052A552004AA54A00FFFFFF00FFFFFF00FFFFFF00A5D6A5004AA54A0039A5 + 390021A5210010A5100008840800FFFFFF000000000000848400008484000000 + 0000000000000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00000000004A4A4A00FFFFFF00FFFFFF00FFFF + FF000000000000000000000000000000000000000000FFFFFF004A4A4A00C6C6 + C600C6C6C600C6C6C60000000000C6C6C60042424200FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00424242009CADAD00DEEFEF00DEEFEF00FFFF00009CAD + AD00FFFFFF0042424200C6C6C600C6C6C600FFFFFF00319C31004AA54A0052A5 + 52004AA54A004AA54A00FFFFFF00FFFFFF00FFFFFF00FFFFFF00A5D6A50039A5 + 390021A5210018A5180010841000FFFFFF000000000000848400008484000000 + 0000000000000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00000000004A4A4A00FFFFFF00FFFFFF00FFFF + FF0000000000000000000000000000000000FFFFFF00FFFFFF004A4A4A00C6C6 + C600C6C6C600C6C6C600C6C6C6000000000042424200FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF0042424200DEEFEF00DEEFEF00DEEFEF00DEEFEF009CAD + AD00DEEFEF0042424200C6C6C600C6C6C600FFFFFF00429C420052A552004AA5 + 4A004AA54A004AA54A00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00A5D6 + A500219C2100219C210018841800FFFFFF000000000000848400008484000084 + 8400008484000084840000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00000000004A4A4A00FFFFFF00FFFFFF00FFFF + FF00000000000000000000000000FFFFFF00FFFFFF00FFFFFF004A4A4A00C6C6 + C600C6C6C600C6C6C600C6C6C6000000000042424200FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF0042424200DEEFEF00FFFF0000DEEFEF00DEEFEF009CAD + AD00DEEFEF0042424200C6C6C600C6C6C600FFFFFF0042A5420052A5520052A5 + 52004AA54A004AA54A00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00A5D6 + A500219C2100219C2100217B2100FFFFFF000000000000848400008484000000 + 0000000000000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00000000000000000000000000000000004A4A4A00FFFFFF00FFFFFF00FFFF + FF000000000000000000FFFFFF0000000000FFFFFF00FFFFFF004A4A4A00C6C6 + C600C6C6C600C6C6C600C6C6C6000000000042424200FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00424242009CADAD00FFFF0000FFFF0000DEEFEF009CAD + AD00FFFFFF0042424200C6C6C600C6C6C600FFFFFF0052A552005AAD5A005AAD + 5A0052A552004AA54A00FFFFFF00FFFFFF00FFFFFF00FFFFFF00A5D6A5003194 + 31002994290029942900217B2100FFFFFF00000000000084840000000000DEEF + EF00DEEFEF00DEEFEF0000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF0000000000FFFFFF0000000000C6C6C6004A4A4A00FFFFFF00FFFFFF00FFFF + FF0000000000FFFFFF00FFFFFF00FFFFFF0000000000000000004A4A4A00C6C6 + C600C6C6C600C6C6C60000000000C6C6C60042424200FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00424242009CADAD00DEEFEF00DEEFEF009CAD + AD0042424200C6C6C600C6C6C600C6C6C600FFFFFF0052A552006BB56B006BB5 + 6B005AAD5A0052AD5200FFFFFF00FFFFFF00FFFFFF00A5D6A500399C39003194 + 31002994290029942900217B2100FFFFFF00000000000084840000000000DEEF + EF00DEEFEF00DEEFEF0000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF000000000000000000C6C6C600C6C6C6004A4A4A00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00000000000000 + 00000000000000000000C6C6C600C6C6C60042424200FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF004242420042424200424242004242 + 4200C6C6C600C6C6C600C6C6C600C6C6C600FFFFFF005AAD5A007BBD7B0073BD + 730063AD63005AAD5A00FFFFFF00FFFFFF00A5D6A500429C4200429C4200399C + 39003194310031943100217B2100FFFFFF00000000000084840000000000DEEF + EF00DEEFEF00DEEFEF0000000000000000000000000000000000000000000000 + 00000000000000000000C6C6C600C6C6C6004A4A4A00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF004A4A4A004A4A4A004A4A4A004A4A4A00C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C60042424200FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF004242 + 4200C6C6C600C6C6C600C6C6C600C6C6C600FFFFFF006BB56B008CC68C007BBD + 7B006BB56B0063B56300FFFFFF00A5D6A5005AAD5A0052A552004AA54A0042A5 + 4200399C390031943100217B2100FFFFFF00000000000084840000000000DEEF + EF00DEEFEF00DEEFEF00DEEFEF00DEEFEF00DEEFEF00DEEFEF00DEEFEF000000 + 00000084840000000000C6C6C600C6C6C6004A4A4A00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF004A4A4A00FFFFFF004A4A4A00C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C60042424200FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF004242420042424200424242004242 + 4200C6C6C600C6C6C600C6C6C600C6C6C600FFFFFF0073BD73009CCE9C008CC6 + 8C007BBD7B0073BD73006BB56B0063B5630063AD63005AAD5A0052AD52004AA5 + 4A0042A542003194310018731800FFFFFF00000000000084840000000000DEEF + EF00DEEFEF00DEEFEF00DEEFEF00DEEFEF00DEEFEF00DEEFEF00DEEFEF000000 + 00000084840000000000C6C6C600C6C6C6004A4A4A00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF004A4A4A004A4A4A00C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C60042424200FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0042424200DEEFEF0042424200C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600FFFFFF00B5DEB50073BD730063B5 + 63005AAD5A0052A5520052A552004AA54A004AA54A0042A54200429C4200399C + 390031943100218C21008CBD8C00FFFFFF00000000000084840000000000DEEF + EF00DEEFEF00DEEFEF00DEEFEF00DEEFEF00DEEFEF00DEEFEF00DEEFEF000000 + 0000DEEFEF0000000000C6C6C600C6C6C6004A4A4A004A4A4A004A4A4A004A4A + 4A004A4A4A004A4A4A004A4A4A004A4A4A00C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C60042424200FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF004242420042424200C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00C6C6C6000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C6004242420042424200424242004242 + 42004242420042424200424242004242420042424200C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C0C0C000C0C0C000C0C0C000C0C0 + C000C0C0C000C0C0C000C0C0C000C0C0C000C0C0C000C0C0C000C0C0C000C0C0 + C000C0C0C000C0C0C000C0C0C000C0C0C000C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00C6C6C600C6C6C600FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00C6C6C600C0C0C000C0C0C000C0C0C000C0C0 + C000C0C0C000C0C0C000C0C0C000000000000000000000000000C0C0C000C0C0 + C000C0C0C000C0C0C000C0C0C000C0C0C000C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C6000000000000000000C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600FFFFFF0052ADFF0018529400185A + 9C00185A9C00185A9C00185AA500185AA500185A9C00185A9C00185294001852 + 940018528C00184A84004AADFF00FFFFFF00FFFFFF0084B58400107310001873 + 18001873180018731800187B1800187B1800107B1000107B1000087B0800087B + 0800007B0000007300007BB57B00FFFFFF00C0C0C000C0C0C000C0C0C000C0C0 + C000C0C0C000000000000000000084008400840084008484840000000000C0C0 + C000C0C0C000C0C0C000C0C0C000C0C0C000C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C6000000000000000000C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600FFFFFF00185AA500186BBD001873 + CE001873CE001873CE001873CE001873CE001873CE001873CE001873CE00186B + C600186BBD00185AA500104A7B00FFFFFF00FFFFFF0010841000218C21002994 + 2900319431003194310029942900299C2900219C210018A5180018A5180010A5 + 100008A5080000940000006B0000FFFFFF00C0C0C000C0C0C000C0C0C0000000 + 0000000000008400840084008400FFFFFF00FFFFFF00C6C6C600848484000000 + 0000C0C0C000C0C0C000C0C0C000C0C0C000C6C6C600C6C6C600C6C6C600C6C6 + C6000000000000000000C6C6C600C6C6C600C6C6C600C6C6C600840000008400 + 000084000000C6C6C600C6C6C600C6C6C600FFFFFF001863AD001873CE00187B + DE00187BDE00187BE7001884E700188CF700188CF700188CF700188CF700187B + DE00186BC6001863AD0018528C00FFFFFF00FFFFFF00188C180029942900399C + 3900399C3900399C390039A539004AA54A00A5D6A500FFFFFF004AA54A0031A5 + 310018A51800009C0000007B0000FFFFFF00C0C0C00000000000000000008400 + 840084008400FFFFFF00FFFFFF000000000000000000C6C6C600C6C6C6008484 + 840000000000C0C0C000C0C0C000C0C0C00000000000C6C6C600C6C6C600C6C6 + C6000000000000000000C6C6C600C6C6C600C6C6C600C6C6C600840000008400 + 000084000000C6C6C600C6C6C600C6C6C600FFFFFF00186BC600187BDE001884 + EF00FFFFFF0084C6FF00188CF700188CF700188CF700188CF70084C6FF00FFFF + FF001873CE00186BBD0018529400FFFFFF00FFFFFF0021942100399C390042A5 + 420042A5420042A542004AA54A00A5D6A500FFFFFF00FFFFFF004AA54A0039A5 + 390021A5210008A50800087B0800FFFFFF00000000008400840084008400FFFF + FF00FFFFFF000000000000000000840084008400840000000000C6C6C600C6C6 + C6008484840000000000C0C0C000C0C0C0000000000000000000C6C6C6000000 + 000000000000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600FFFFFF001873CE001884E700188C + F700188CFF00FFFFFF0084C6FF00188CF700188CF70084C6FF00FFFFFF001884 + E7001873D600186BC600185A9C00FFFFFF00FFFFFF0029942900429C42004AA5 + 4A0052A552004AA54A00A5D6A500FFFFFF00FFFFFF00FFFFFF004AA54A0039A5 + 390021A5210010A5100008840800FFFFFF000000000084008400FFFFFF000000 + 000000000000840084008400840084008400840084008400840000000000C6C6 + C600C6C6C6008484840000000000C0C0C0000000000000000000000000000000 + 000000000000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600840000008400 + 000084848400C6C6C600C6C6C600C6C6C600FFFFFF00187BDE00188CF700188C + FF00188CF700188CF700FFFFFF0084C6FF0084C6FF00FFFFFF00188CF7001884 + E7001873D6001873CE00185AA500FFFFFF00FFFFFF00319C31004AA54A0052A5 + 52004AA54A00A5D6A500FFFFFF00FFFFFF00FFFFFF00FFFFFF004AA54A0039A5 + 390021A5210018A5180010841000FFFFFF000000000000000000000000008400 + 840084008400840084000084840000FFFF008400840084008400840084000000 + 0000C6C6C600C6C6C60084848400000000000000000000000000000000000000 + 000000000000000000000000000000000000C6C6C600C6C6C600840000008400 + 000084848400C6C6C600C6C6C600C6C6C600FFFFFF001884E700188CFF00188C + F700188CF700188CF700188CF700FFFFFF0084C6FF00188CF7001884EF00187B + DE001873CE001873CE001863AD00FFFFFF00FFFFFF00429C420052A552004AA5 + 4A00A5D6A500FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0042A5420031A5 + 3100219C2100219C210018841800FFFFFF000000000084008400840084008400 + 8400840084008400840084008400008484008400840084008400840084008400 + 840000000000C6C6C60000000000C0C0C0000000000000000000000000000000 + 0000000000000000000000000000C6C6C600C6C6C600C6C6C600C6C6C6008400 + 000084000000C6C6C600C6C6C600C6C6C600FFFFFF001884EF00188CFF00188C + FF00188CF700188CF70084C6FF00FFFFFF00FFFFFF0084C6FF001884E7001873 + D6001873CE001873CE001863AD00FFFFFF00FFFFFF0042A5420052A5520052A5 + 5200A5D6A500FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00399C3900299C + 2900219C2100219C2100217B2100FFFFFF00C0C0C00084008400FFFFFF008400 + 84008400840084008400840084008400840000FFFF0000FFFF00840084008400 + 8400840084000000000000000000C0C0C0000000000000000000000000000000 + 00000000000000000000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600840000008400000084848400C6C6C600FFFFFF00188CFF002194FF002194 + FF00188CFF0084C6FF00FFFFFF001884F7001884EF00FFFFFF0084C6FF001873 + CE001873CE001873CE001863AD00FFFFFF00FFFFFF0052A552005AAD5A005AAD + 5A0052A55200A5D6A500FFFFFF00FFFFFF00FFFFFF00FFFFFF00399C39003194 + 31002994290029942900217B2100FFFFFF00C0C0C000C0C0C00084008400FFFF + FF0084008400840084008400840084008400840084000084840000FFFF0000FF + FF00840084008400840000000000C0C0C0000000000000000000000000000000 + 000000000000C6C6C600C6C6C600848484008400000084000000C6C6C600C6C6 + C60084848400840000008400000084848400FFFFFF00188CFF0039A5FF0039A5 + FF0084C6FF00FFFFFF00188CFF00188CFF001884EF001884E700FFFFFF0084C6 + FF001873CE001873CE001863AD00FFFFFF00FFFFFF0052A552006BB56B006BB5 + 6B005AAD5A0052AD5200A5D6A500FFFFFF00FFFFFF00FFFFFF00399C39003194 + 31002994290029942900217B2100FFFFFF00C0C0C000C0C0C000C0C0C0008400 + 8400FFFFFF00840084008400840084008400008484008400840000FFFF0000FF + FF00840084008400840084008400000000000000000000000000000000000000 + 0000C6C6C600C6C6C600C6C6C600840000008400000084848400C6C6C600C6C6 + C600C6C6C600840000008400000084000000FFFFFF002194FF0052ADFF004AAD + FF00FFFFFF002194FF002194FF001894FF00188CF7001884EF001884E700FFFF + FF001873CE001873CE001863AD00FFFFFF00FFFFFF005AAD5A007BBD7B0073BD + 730063AD63005AAD5A005AAD5A00A5D6A500FFFFFF00FFFFFF00429C4200399C + 39003194310031943100217B2100FFFFFF00C0C0C000C0C0C000C0C0C000C0C0 + C00084008400FFFFFF00840084008400840000FFFF0000FFFF0000FFFF008400 + 840084008400840084000000000000000000000000000000000000000000C6C6 + C600C6C6C600C6C6C600C6C6C600840000008400000084848400C6C6C600C6C6 + C600C6C6C600840000008400000084000000FFFFFF0039A5FF006BBDFF0052AD + FF0039A5FF00319CFF00299CFF00299CFF002194FF00188CFF001884F7001884 + EF00187BDE001873CE001863AD00FFFFFF00FFFFFF006BB56B008CC68C007BBD + 7B006BB56B0063B5630063AD630063AD6300A5D6A500FFFFFF004AA54A0042A5 + 4200399C390031943100217B2100FFFFFF00C0C0C000C0C0C000C0C0C000C0C0 + C000C0C0C00084008400FFFFFF00840084008400840084008400840084008400 + 84000000000000000000C0C0C000C0C0C0000000000000000000C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C6008400000084000000C6C6C600C6C6 + C60084848400840000008400000084848400FFFFFF004AADFF0084C6FF006BBD + FF0052ADFF004AADFF0039A5FF00319CFF00299CFF002194FF001894FF00188C + F7001884EF001873CE00185A9C00FFFFFF00FFFFFF0073BD73009CCE9C008CC6 + 8C007BBD7B0073BD73006BB56B0063B5630063AD63005AAD5A0052AD52004AA5 + 4A0042A542003194310018731800FFFFFF00C0C0C000C0C0C000C0C0C000C0C0 + C000C0C0C000C0C0C00084008400FFFFFF008400840084008400000000000000 + 0000C0C0C000C0C0C000C0C0C000C0C0C00000000000C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C60084000000840000008400 + 0000840000008400000084848400C6C6C600FFFFFF00ADDEFF004AADFF00319C + FF002194FF00188CFF00188CFF00188CF700188CF7001884EF001884E700187B + DE001873CE00186BBD0063B5FF00FFFFFF00FFFFFF00B5DEB50073BD730063B5 + 63005AAD5A0052A5520052A552004AA54A004AA54A0042A54200429C4200399C + 390031943100218C21008CBD8C00FFFFFF00C0C0C000C0C0C000C0C0C000C0C0 + C000C0C0C000C0C0C000C0C0C000840084008400840000000000C0C0C000C0C0 + C000C0C0C000C0C0C000C0C0C000C0C0C000C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00C6C6C600C6C6C600FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C60000000000C6C6C600C6C6C600C6C6 + C600848484008484840084848400C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C6000000000000000000000000000000 + 000000000000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600000000000000 + 0000000000000000000000000000C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C6000000000000000000C6C6C600C6C6 + C60084848400C6C6C600C6C6C60084848400C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C60000000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C60000000000FFFFFF00000000000000 + 000000000000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C60000000000FFFF + FF00000000000000000000000000C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C60000000000C6C6C60000000000C6C6C600000000000000000000000000C6C6 + C60084848400C6C6C600C6C6C60084848400C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C60000000000FFFFFF00FFFFFF000000 + 0000FFFFFF00FFFFFF00FFFFFF00FFFFFF00C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C60000000000FFFFFF00000000000000 + 000000000000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C60000000000FFFF + FF00000000000000000000000000C6C6C600C6C6C600C6C6C60000000000C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C6000000000000000000C6C6C600C6C6 + C600848484008484840084848400C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C60000000000FFFFFF00FFFFFF0000000000FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00C6C6C600C6C6C600C6C6C6008400 + 000084848400C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C6000000000000000000000000000000 + 0000000000000000000000000000C6C6C6000000000000000000000000000000 + 0000000000000000000000000000C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C60000000000C6C6C600C6C6C600C6C6 + C60084848400C6C6C600C6C6C60084848400C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600000000000000000000000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00C6C6C600C6C6C600848484008400 + 0000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C60084000000840000008400 + 00008400000084000000C6C6C600C6C6C6000000000000000000FFFFFF000000 + 00000000000000000000000000000000000000000000FFFFFF00000000000000 + 0000000000000000000000000000C6C6C600C6C6C60000000000C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C60084848400C6C6C600C6C6C60084848400C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C6000000000000000000C6C6C600FFFFFF00FFFFFF000000 + 0000FFFFFF00FFFFFF00FFFFFF00FFFFFF00C6C6C600C6C6C60084000000C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600840000008400 + 00008400000084000000C6C6C600C6C6C6000000000000000000FFFFFF000000 + 00000000000000000000C6C6C6000000000000000000FFFFFF00000000000000 + 0000000000000000000000000000C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C60000000000C6C6 + C600848484008484840084848400C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C60000000000C6C6C600FFFFFF00FFFFFF00FFFFFF0000000000FFFF + FF0000000000FFFFFF00FFFFFF00FFFFFF00C6C6C600C6C6C60084000000C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6008400 + 00008400000084000000C6C6C600C6C6C6000000000000000000FFFFFF000000 + 00000000000000000000C6C6C6000000000000000000FFFFFF00000000000000 + 0000000000000000000000000000C6C6C600C6C6C600C6C6C60000000000C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C60000000000000000000000 + 000000000000FFFFFF00FFFFFF00FFFFFF000000000000000000FFFFFF000000 + 0000FFFFFF0000000000FFFFFF0000000000C6C6C600C6C6C60084000000C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C60084000000C6C6 + C6008400000084000000C6C6C600C6C6C600C6C6C60000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C60000000000C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C6000000000000848400008484000000 + 0000FFFFFF00FFFFFF000000000000000000FFFFFF00FFFFFF0000000000FFFF + FF0000000000FFFFFF0000000000C6C6C600C6C6C600C6C6C600848484008400 + 0000C6C6C600C6C6C600C6C6C600C6C6C6008400000084000000C6C6C600C6C6 + C600C6C6C60084000000C6C6C600C6C6C600C6C6C600C6C6C60000000000FFFF + FF00000000000000000000000000C6C6C60000000000FFFFFF00000000000000 + 000000000000C6C6C600C6C6C600C6C6C60000000000C6C6C600C6C6C600C6C6 + C60000000000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C60000000000FFFFFF00FFFFFF000000 + 0000FFFFFF000000000000848400008484000000000000000000FFFFFF000000 + 0000FFFFFF000000000000000000C6C6C600C6C6C600C6C6C600C6C6C6008484 + 840084000000840000008400000084000000C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600000000000000 + 0000000000000000000000000000C6C6C6000000000000000000000000000000 + 000000000000C6C6C600C6C6C600C6C6C60000000000C6C6C600C6C6C600C6C6 + C60000000000C6C6C600C6C6C600C6C6C600C6C6C60000000000C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C60000000000FFFFFF00000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000084840000000000C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6000000 + 00000000000000000000C6C6C600C6C6C600C6C6C60000000000000000000000 + 0000C6C6C600C6C6C600C6C6C600C6C6C6008484840000000000000000000000 + 000084848400C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C60000000000FFFFFF00FFFFFF000084 + 8400FFFFFF0000848400FFFFFF0000848400FFFFFF0000848400FFFFFF000084 + 8400FFFFFF000084840000000000C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6000000 + 0000FFFFFF0000000000C6C6C600C6C6C600C6C6C60000000000FFFFFF000000 + 0000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C60000000000C6C6C6000000 + 0000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C60000000000C6C6 + C60000000000C6C6C600C6C6C600C6C6C60000000000FFFFFF00000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000084840000000000C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6000000 + 00000000000000000000C6C6C600C6C6C600C6C6C60000000000000000000000 + 0000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C60084848400000000008484 + 8400C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6000000 + 000000000000C6C6C600C6C6C600C6C6C60000000000FFFFFF00FFFFFF000084 + 8400FFFFFF0000848400FFFFFF0000848400FFFFFF0000848400FFFFFF000084 + 8400FFFFFF00C6C6C60000000000C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C60000000000C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600000000000000 + 000000000000C6C6C600C6C6C600C6C6C600C6C6C60000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C6008400000084000000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C60084000000840000008400000084000000840000008400 + 000084000000840000008400000084000000C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6008400 + 0000C6C6C600C6C6C60084000000C6C6C600C6C6C6008400000084000000C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C60084000000840000008400000084000000840000008400 + 0000840000008400000084000000C6C6C600C6C6C60000000000000000000000 + 0000000000000000000084000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF0084000000C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6008400 + 0000C6C6C600C6C6C60084000000C6C6C60084000000C6C6C600C6C6C6008400 + 0000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C60084000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF0084000000C6C6C6000000000084848400008484008484 + 8400008484008484840084000000FFFFFF008400000084000000840000008400 + 00008400000084000000FFFFFF0084000000C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6008400 + 0000C6C6C600C6C6C60084000000C6C6C60084000000C6C6C600C6C6C6008400 + 0000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C60084000000FFFFFF000000000000000000000000000000 + 000000000000FFFFFF0084000000C6C6C6000000000000848400848484000084 + 8400848484000084840084000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF0084000000C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600840000008400000084000000C6C6C60084000000C6C6C600C6C6C6008400 + 0000C6C6C600C6C6C600C6C6C600C6C6C6000000000000000000000000000000 + 0000000000000000000084000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF0084000000C6C6C6000000000084848400008484008484 + 8400008484008484840084000000FFFFFF00840000008400000084000000FFFF + FF0084000000840000008400000084000000C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6008484 + 840084000000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C60084000000C6C6C600840000008400000084000000C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C60000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF0084000000FFFFFF000000000000000000000000000000 + 000000000000FFFFFF0084000000C6C6C6000000000000848400848484000084 + 8400848484000084840084000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF0084000000FFFFFF0084000000C6C6C600C6C6C600C6C6C600840000008400 + 0000840000008400000084000000C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C6008400000084848400C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600840000000000000084000000C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C60000000000FFFFFF00000000000000 + 0000000000000000000084000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF0084000000C6C6C6000000000084848400008484008484 + 8400008484008484840084000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF008400000084000000C6C6C600C6C6C600C6C6C600C6C6C600840000008400 + 00008400000084000000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C60084000000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C60000000000C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C60000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF0084000000FFFFFF000000000000000000FFFFFF008400 + 0000840000008400000084000000C6C6C6000000000000848400848484000084 + 8400848484000084840084000000840000008400000084000000840000008400 + 00008400000000000000C6C6C600C6C6C600C6C6C600C6C6C600840000008400 + 000084000000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C60084000000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600000000000000000000000000C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C60000000000FFFFFF00000000000000 + 0000000000000000000084000000FFFFFF00FFFFFF00FFFFFF00FFFFFF008400 + 0000FFFFFF0084000000C6C6C600C6C6C6000000000084848400008484008484 + 8400008484008484840000848400848484000084840084848400008484008484 + 84000084840000000000C6C6C600C6C6C600C6C6C600C6C6C600840000008400 + 0000C6C6C60084000000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C60084000000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C60000000000C6C6C60000000000C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C60000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF0084000000FFFFFF00FFFFFF00FFFFFF00FFFFFF008400 + 000084000000C6C6C600C6C6C600C6C6C6000000000000848400848484000000 + 0000000000000000000000000000000000000000000000000000000000008484 + 84008484840000000000C6C6C600C6C6C600C6C6C600C6C6C60084000000C6C6 + C600C6C6C600C6C6C6008400000084000000C6C6C600C6C6C600C6C6C600C6C6 + C6008400000084848400C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C6000000000000000000C6C6C6000000000000000000C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C60000000000FFFFFF00000000000000 + 0000FFFFFF000000000084000000840000008400000084000000840000008400 + 0000C6C6C600C6C6C600C6C6C600C6C6C6000000000084848400848484000000 + 0000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600000000008484 + 84000084840000000000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C6008400000084000000840000008400 + 000084848400C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C60000000000C6C6C600C6C6C600C6C6C60000000000C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C60000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF0000000000FFFFFF0000000000C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C6000000000000848400848484000084 + 84000000000000FFFF00000000000000000000FFFF0000000000848484000084 + 84008484840000000000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C60000000000C6C6C600C6C6C600C6C6C60000000000C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C60000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF000000000000000000C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C60000000000000000000000 + 0000000000000000000000FFFF0000FFFF000000000000000000000000000000 + 000000000000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C60000000000C6C6C600C6C6C600C6C6C60000000000C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C6000000000000000000000000000000 + 00000000000000000000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C60000000000000000000000000000000000C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000C6C6C600C6C6C600C6C6C600000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000C6C6C600C6C6C600C6C6C6000000000000000000000000000000 + 000000000000000000000000000000000000000000000000000000000000C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C60000000000008484000084 + 8400000000000000000000000000000000000000000000000000C6C6C600C6C6 + C600000000000084840000000000C6C6C600C6C6C60000000000C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6000000 + 0000C6C6C60000000000C6C6C600C6C6C600C6C6C600C6C6C60000000000FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF0000000000C6C6C600C6C6C600C6C6C6000000000000000000008484000084 + 8400008484000084840000848400008484000084840000848400008484000000 + 0000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C60000000000008484000084 + 8400000000000000000000000000000000000000000000000000C6C6C600C6C6 + C600000000000084840000000000C6C6C6000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000C6C6C60000000000C6C6C600C6C6C600C6C6C60000000000FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF0000000000C6C6C600C6C6C600C6C6C6000000000000FFFF00000000000084 + 8400008484000084840000848400008484000084840000848400008484000084 + 840000000000C6C6C600C6C6C600C6C6C600C6C6C60000000000008484000084 + 8400000000000000000000000000000000000000000000000000C6C6C600C6C6 + C600000000000084840000000000C6C6C60000000000C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C60000FFFF0000FFFF0000FFFF00C6C6C600C6C6 + C600000000000000000000000000C6C6C600C6C6C600C6C6C60000000000FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF0000000000C6C6C600C6C6C600C6C6C60000000000FFFFFF0000FFFF000000 + 0000008484000084840000848400008484000084840000848400008484000084 + 84000084840000000000C6C6C600C6C6C600C6C6C60000000000008484000084 + 8400000000000000000000000000000000000000000000000000000000000000 + 0000000000000084840000000000C6C6C60000000000C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600848484008484840084848400C6C6C600C6C6 + C60000000000C6C6C60000000000C6C6C600C6C6C600C6C6C60000000000FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF0000000000C6C6C600C6C6C600C6C6C6000000000000FFFF00FFFFFF0000FF + FF00000000000084840000848400008484000084840000848400008484000084 + 8400008484000084840000000000C6C6C600C6C6C60000000000008484000084 + 8400008484000084840000848400008484000084840000848400008484000084 + 8400008484000084840000000000C6C6C6000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000C6C6C600C6C6C60000000000C6C6C600C6C6C60000000000FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF0000000000C6C6C600C6C6C600C6C6C60000000000FFFFFF0000FFFF00FFFF + FF0000FFFF000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000C6C6C60000000000008484000084 + 8400000000000000000000000000000000000000000000000000000000000000 + 0000008484000084840000000000C6C6C60000000000C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6000000 + 0000C6C6C60000000000C6C6C60000000000C6C6C600C6C6C60000000000FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF0000000000C6C6C600C6C6C600C6C6C6000000000000FFFF00FFFFFF0000FF + FF00FFFFFF0000FFFF00FFFFFF0000FFFF00FFFFFF0000FFFF0000000000C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C60000000000008484000000 + 0000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600000000000084840000000000C6C6C600C6C6C60000000000000000000000 + 000000000000000000000000000000000000000000000000000000000000C6C6 + C60000000000C6C6C6000000000000000000C6C6C600C6C6C60000000000FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF0000000000C6C6C600C6C6C600C6C6C60000000000FFFFFF0000FFFF00FFFF + FF0000FFFF00FFFFFF0000FFFF00FFFFFF0000FFFF00FFFFFF0000000000C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C60000000000008484000000 + 0000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600000000000084840000000000C6C6C600C6C6C600C6C6C60000000000FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000 + 0000C6C6C60000000000C6C6C60000000000C6C6C600C6C6C60000000000FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF0000000000C6C6C600C6C6C600C6C6C6000000000000FFFF00FFFFFF0000FF + FF0000000000000000000000000000000000000000000000000000000000C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C60000000000008484000000 + 0000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600000000000084840000000000C6C6C600C6C6C600C6C6C600C6C6C6000000 + 0000FFFFFF000000000000000000000000000000000000000000FFFFFF000000 + 0000000000000000000000000000C6C6C600C6C6C600C6C6C60000000000FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000000000000000000000 + 000000000000C6C6C600C6C6C600C6C6C600C6C6C60000000000000000000000 + 0000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600000000000000000000000000C6C6C600C6C6C60000000000008484000000 + 0000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600000000000084840000000000C6C6C600C6C6C600C6C6C600C6C6C6000000 + 0000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF0000000000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C60000000000FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000000000FFFFFF000000 + 0000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C6000000000000000000C6C6C600C6C6C60000000000008484000000 + 0000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600000000000000000000000000C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C60000000000FFFFFF000000000000000000000000000000000000000000FFFF + FF0000000000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C60000000000FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000000000000000C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C60000000000C6C6C600C6C6C600C6C6 + C60000000000C6C6C60000000000C6C6C600C6C6C60000000000008484000000 + 0000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C60000000000C6C6C60000000000C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C60000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF0000000000C6C6C600C6C6C600C6C6C600C6C6C600000000000000 + 0000000000000000000000000000000000000000000000000000C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C60000000000000000000000 + 0000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C60000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C6000000000000000000000000000000000000000000000000000000 + 00000000000000000000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600424D3E000000000000003E000000 + 2800000040000000F00000000100010000000000800700000000000000000000 + 000000000000000000000000FFFFFF00F81FFEFFFFFF0000E007FDFFC07F0000 + C003FCFF001F00008001D81F001F00008001E01F001F00000000E01F00000000 + 0000C00300000000000080038000000000004003C00000000000C003C0000000 + 00000003C04100008001C043C04100008001E843C0410000C003E843E0C10000 + E007F843FFC10000F81FF843FFFF0000FEFFFEFFFEFFFFFFFDFFFDFFFDFF003F + FCFFFCFFFCFF003FD81FD81FD81F003FE01FE01FE01F0000E01FE01FE01F0000 + C00BC00BC00B000080078007800700004013401F400F0000C03CC019C00FC000 + 003D0019000FC000C0DDC019C00FC000ECFBEC49E01FC000EB3BE841C21AC000 + FFC7FFDFD61AC000FFF7FC00D7FAFFFFFEFF0000FEFFFEFFFDFF0000FDFFFDE0 + FCFF0000FCFFFCE0D81F0000D81FD800E01F0000E01FE01DE01F0000E01FE00D + C00B0000C00BC0018007000080008007400700004000401FC0038007C000C020 + 0001401F00000000C081C03FC000C0C0ED83003FEC00EDFDEB87C0DFEA00EA0D + FF8FEDFFFE00FE01FF9FEBFFFE00FE0FFEFFFEFFFEFFFEFFFDFFFDFFFDFFFDFF + FCFFFCFFFCFFFCFFD81FD81FD81FD81FE01FE01FE01FE01FE01FE01FE01FE01F + C00BC00BC00BC00B80078000800780074007400040074007C003C000C023C023 + 0001000000110031C081C000C011C0D1ED83EC00EC23EDE3EB87EA00E847EBC7 + FF8FFE00F88FFF8FFF9FFE00F99FFF9FFDFFFE07FE03FEFFE07FFC03FE03FDFF + E00FF801FE03FCFFC003F000FE03D81FC003F000FE03E01F8003F000FE03E01F + 8003F000FC01C00B80010000000080030001000000004001000100000000C000 + 8001000000000000C00300000000C000C00300000000EC00E00300000000EA00 + FC3700000000FF01FF3F00000000FF83F81F0000FE07FFFFE0070000FC03FF7F + C0030000F801FEFF80010000F000FE7F80010000F000EC0F00000F80F000F00F + 00000F80F000F00F0000FE3F0000E0050000E23F0000C0030000E2300000A00F + 000003F00000E01F80011F100000801F80011F1F0000E06FC003F1110000F6FF + E007F1F10000F5FFF81FF1F10000FFFFFE00FC3FFFFFFCFFFE00C003FC7FF8CF + FE008001F81FF08FFE008001F007F80FE0008001E001F08FC00083C1C000F00F + 800007E08000E00F000107E00000F00F000107E00000E00F000107E00001C007 + 000183C10003C003000180010007C00300038001800FC003801F8001E01FE003 + C03FC003F83FF007E07FFC3FFE7FFF0FFE00FE00FFFFFFFFFE00FE00C007C007 + F8008000C007C007F800000000070007F800000000070007F800000000070007 + 0000000000070007000000000007000700010001000700070003000300070007 + 000100030007000700000003000F000F001F0003001F001F001F0003003F003F + 001F0003007F007F8FFF000300FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC007 + C007FFFFFFFFC007C007F73FFFFF0007C007F63FFFFF0007C007F47FF9100007 + C007F0FFDD240007C007F1FFDC600007C007F1FF05040007C00754F5DD000007 + C0075675DDFF0007C0075735F9FF000FC00F5FF5FFFF001FC01FFFFFFFFF003F + C03FFFFFFFFF007FFFFFFFFFFFFF00FFFFFFFFFFFFFFFC00C007FFF9FFFFFC00 + 8003E7FF07C1FC000001C3F307C104000001C3E707C104000001E1C701010400 + 0000F08F000100000000F81F000100008000FC3F00010000C000F81F80030001 + E001F09FC1078003E007C1C7C107C007F00783E3E38FC107F0038FF1E38FE38F + F803FFFFE38FE38FFFFFFFFFFFFFE38F8001FC00FFFFFFFF0000FC00FFFF000C + 00008000001F000800000000001F000100000000001D000300000000001D0003 + 00000000001E000300000000001E000300000000001E000300000001001D0007 + 000000030003000F00000003001F000F00000003003F000F00000003007F001F + 0000000300FF003F80010003FFFF007FFFFFFFFF80018001FE3FF9FF00000000 + F81FF9FF00000000E00FF3C700000000800773C700000000000327FF00000000 + 000107C700000000000000C700000000000101E700000000800103F100000000 + C001063000000000E0000E3800000000F0001E3800000000F8033F3000000000 + FC0F7F8100000000FE3FFFFF80018001FFFFFFFFFFFFFFFFFFFFFFFFFF71FFFF + FFFF07C1FF36FF81FFFF07C1F516FF00FFFF07C1DF31FE00E7FF0101FF76FE00 + CF830001BFF6FC00DFC30001FFD1F800DFE30001DFFF8000DFD38003FFBF0001 + CF3BC10777FF0001E0FFC10777BF0001FFFFE38F07FF0001FFFFE38FAFD70001 + FFFFE38F8FE70001FFFFFFFFDFC78003FFFFFFFFFFFFFFFFF3FFFFFFFC00FFFF + ED9FFC018000FFFFED6FFC010000FFFFED6FFC010000FFFFF16F00010000FFE7 + FD1F00010001C1F3FC7F00010003C3FBFEFF00010003C7FBFC7F00030003CBFB + FD7F00070003DCF3F93F000F0003FF07FBBF00FF0003FFFFFBBF01FF8007FFFF + FBBF03FFF87FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC001C007 + C007001F80018003C007000F80010001C007000780010001C007000380010001 + C007000180010000C007000080010000C007001F80018000C007001F8001C000 + C007001F8001E001C0078FF18001E007C00FFFF98001F007C01FFF758001F003 + C03FFF8F8001F803FFFFFFFFFFFFFFFF00000000000000000000000000000000 + 000000000000} + end + object ApplicationEvents1: TApplicationEvents + OnHelp = ApplicationEvents1Help + OnMessage = ApplicationEvents1Message + Left = 484 + Top = 176 + end + object dockServer: TJvDockServer + LeftSplitterStyle.Cursor = crHSplit + LeftSplitterStyle.ParentColor = False + RightSplitterStyle.Cursor = crHSplit + RightSplitterStyle.ParentColor = False + TopSplitterStyle.Cursor = crVSplit + TopSplitterStyle.ParentColor = False + BottomSplitterStyle.Cursor = crVSplit + BottomSplitterStyle.ParentColor = False + DockStyle = JvDockVSNetStyle1 + Left = 616 + Top = 304 + end + object JvDockVSNetStyle1: TJvDockVSNetStyle + AlwaysShowGrabber = False + TabServerOption.ActiveFont.Charset = DEFAULT_CHARSET + TabServerOption.ActiveFont.Color = clWindowText + TabServerOption.ActiveFont.Height = -11 + TabServerOption.ActiveFont.Name = 'Tahoma' + TabServerOption.ActiveFont.Style = [] + TabServerOption.InactiveFont.Charset = DEFAULT_CHARSET + TabServerOption.InactiveFont.Color = 5395794 + TabServerOption.InactiveFont.Height = -11 + TabServerOption.InactiveFont.Name = 'Tahoma' + TabServerOption.InactiveFont.Style = [] + TabServerOption.ShowCloseButtonOnTabs = False + Left = 528 + Top = 312 + end + object mnuReloadAsFormat: TPopupMenu + Left = 296 + Top = 80 + object ANSI1: TMenuItem + Caption = 'ANSI' + end + object UTF81: TMenuItem + Caption = 'UTF-8' + end + object UTF161: TMenuItem + Caption = 'UTF-16' + end + end + object MainMenu1: TMainMenu + Images = lstImages + Left = 448 + Top = 376 + object File1: TMenuItem + Caption = '&File' + OnClick = mnuFileClick + object New1: TMenuItem + Action = modActionsMain.actFileNew + end + object Open1: TMenuItem + Action = modActionsMain.actFileOpen + end + object Save1: TMenuItem + Action = modActionsMain.actFileSave + end + object SaveAs1: TMenuItem + Action = modActionsMain.actFileSaveAs + end + object Savecopyas1: TMenuItem + Action = modActionsMain.actFileSaveCopyAs + end + object Revert1: TMenuItem + Action = modActionsMain.actFileRevert + end + object N5: TMenuItem + Caption = '-' + end + object Close1: TMenuItem + Action = modActionsMain.actWindowClose + end + object N6: TMenuItem + Caption = '-' + end + object mnuFileRecent: TMenuItem + Caption = 'Recent &Files' + object TMenuItem + end + end + object N8: TMenuItem + Caption = '-' + end + object Exit1: TMenuItem + Action = modActionsMain.actFileExit + end + end + object Edit1: TMenuItem + Caption = '&Edit' + object Undo1: TMenuItem + Action = modActionsMain.actEditUndo + end + object Redo1: TMenuItem + Action = modActionsMain.actEditRedo + end + object N10: TMenuItem + Caption = '-' + end + object Cut1: TMenuItem + Action = modActionsMain.actEditCut + end + object Copy1: TMenuItem + Action = modActionsMain.actEditCopy + end + object Paste1: TMenuItem + Action = modActionsMain.actEditPaste + end + object N18: TMenuItem + Caption = '-' + end + object Delete1: TMenuItem + Action = modActionsMain.actEditDelete + end + object N19: TMenuItem + Caption = '-' + end + object SelectAll1: TMenuItem + Action = modActionsMain.actEditSelectAll + end + object N20: TMenuItem + Caption = '-' + end + object Find1: TMenuItem + Action = modActionsMain.actSearchFind + end + object FindNext1: TMenuItem + Action = modActionsMain.actSearchFindNext + end + object Replace1: TMenuItem + Action = modActionsMain.actSearchReplace + end + object N21: TMenuItem + Caption = '-' + end + object ReformatXMLDocument1: TMenuItem + Action = modActionsTextEditor.actTextEditor_ReformatXML + end + object N1: TMenuItem + Caption = '-' + end + object Reloadwithencoding1: TMenuItem + Caption = 'Reload with &encoding' + object ReloadasANSI1: TMenuItem + Action = modActionsMain.actToolsReloadANSI + end + object ReloadasUTF81: TMenuItem + Action = modActionsMain.actToolsReloadUTF8 + end + object ReloadasUTF161: TMenuItem + Action = modActionsMain.actToolsReloadUTF16 + end + end + end + object View1: TMenuItem + Caption = '&View' + object Project2: TMenuItem + Action = modActionsMain.actViewProject + end + object N22: TMenuItem + Caption = '-' + end + object CharacterIdentifier1: TMenuItem + Action = modActionsMain.actViewCharacterIdentifier + end + object CharacterMap1: TMenuItem + Action = modActionsMain.actViewCharacterMap + end + object Messages1: TMenuItem + Action = modActionsMain.actViewMessages + end + object ContextHelp1: TMenuItem + Action = modActionsMain.actViewHelp + end + object oolbar1: TMenuItem + Action = modActionsMain.actViewToolbar + end + object StatusBar1: TMenuItem + Action = modActionsMain.actViewStatusBar + end + object N23: TMenuItem + Caption = '-' + end + object ExpandEditor1: TMenuItem + Action = modActionsMain.actViewExpandEditor + end + object N24: TMenuItem + Caption = '-' + end + object CharacterFont1: TMenuItem + Action = modActionsMain.actViewCharFont + end + object CodeFont1: TMenuItem + Action = modActionsMain.actViewCodeFont + end + end + object Project1: TMenuItem + Caption = '&Project' + OnClick = mnuProjectClick + object NewProject1: TMenuItem + Action = modActionsMain.actProjectNew + end + object OpenProject1: TMenuItem + Action = modActionsMain.actProjectOpen + end + object CloseProject1: TMenuItem + Action = modActionsMain.actProjectClose + end + object N25: TMenuItem + Caption = '-' + end + object mnuProjectsRecent: TMenuItem + Caption = '&Recent Projects' + end + object N26: TMenuItem + Caption = '-' + end + object mnuProjectAddToProject: TMenuItem + Caption = 'A&dd to project' + object CurrentEditorFile1: TMenuItem + Action = modActionsMain.actProjectAddCurrentEditorFile + end + object OtherFiles1: TMenuItem + Action = modActionsMain.actProjectAddFiles + end + end + object N27: TMenuItem + Caption = '-' + end + object ProjectSettings1: TMenuItem + Action = modActionsMain.actProjectSettings + end + end + object mnuModel: TMenuItem + Caption = '&Model' + object CompileModel1: TMenuItem + Action = modActionsModelEditor.actModelCompile + end + object N2: TMenuItem + Caption = '-' + end + object estLexicalModel1: TMenuItem + Action = modActionsModelEditor.actModelTest + end + end + object mnuKeyboard: TMenuItem + Caption = '&Keyboard' + object CompileKeyboard1: TMenuItem + Action = modActionsKeyboardEditor.actKeyboardCompile + end + object N28: TMenuItem + Caption = '-' + end + object IncludeDebugInformation1: TMenuItem + Action = modActionsKeyboardEditor.actKeyboardIncludeDebugInformation + end + object estKeyboard1: TMenuItem + Action = modActionsKeyboardEditor.actKeyboardTest + end + object N29: TMenuItem + Caption = '-' + end + object Install1: TMenuItem + Action = modActionsKeyboardEditor.actKeyboardInstall + end + object Uninstall1: TMenuItem + Action = modActionsKeyboardEditor.actKeyboardUninstall + end + object N31: TMenuItem + Caption = '-' + end + object Fonts1: TMenuItem + Action = modActionsKeyboardEditor.actKeyboardFonts + end + object FontHelper1: TMenuItem + Action = modActionsKeyboardEditor.actKeyboardFontHelper + end + end + object mnuDebug: TMenuItem + Caption = '&Debug' + object SetBreakpoint1: TMenuItem + Action = modActionsDebugger.actDebugSetClearBreakpoint + end + object N32: TMenuItem + Caption = '-' + end + object StartDebugging1: TMenuItem + Action = modActionsDebugger.actDebugStartDebugger + end + object StopDebugger1: TMenuItem + Action = modActionsDebugger.actDebugStopDebugger + end + object N33: TMenuItem + Caption = '-' + end + object ANSITestMode1: TMenuItem + Action = modActionsDebugger.actDebugANSITestMode + end + object N34: TMenuItem + Caption = '-' + end + object SingleStepMode1: TMenuItem + Action = modActionsDebugger.actDebugSingleStepMode + end + object N35: TMenuItem + Caption = '-' + end + object StepForward1: TMenuItem + Action = modActionsDebugger.actDebugStepForward + end + object Run1: TMenuItem + Action = modActionsDebugger.actDebugRun + end + object Pause1: TMenuItem + Action = modActionsDebugger.actDebugPause + end + object N36: TMenuItem + Caption = '-' + end + object View2: TMenuItem + Caption = '&View' + object State1: TMenuItem + Action = modActionsDebugger.actDebugViewState + end + object Elements1: TMenuItem + Action = modActionsDebugger.actDebugViewElements + end + object CallStack1: TMenuItem + Action = modActionsDebugger.actDebugViewCallStack + end + object Deadkeys1: TMenuItem + Action = modActionsDebugger.actDebugViewDeadkeys + end + object RegressionTesting1: TMenuItem + Action = modActionsDebugger.actDebugViewRegressionTesting + end + object N38: TMenuItem + Caption = '-' + end + object Font1: TMenuItem + Action = modActionsDebugger.actDebugViewFont + end + object UseEditorCharacterFont1: TMenuItem + Action = modActionsDebugger.actDebugViewDefaultFont + end + end + object N37: TMenuItem + Caption = '-' + end + object SelectSystemKeyboard1: TMenuItem + Action = modActionsDebugger.actDebugSelectSystemKeyboard + end + end + object mnuTools: TMenuItem + Caption = '&Tools' + OnClick = mnuToolsClick + object VirtualKeyIdentifier1: TMenuItem + Action = modActionsMain.actToolsVirtualKeyIdentifier + end + object N39: TMenuItem + Caption = '-' + end + object mnuToolsWebDebugger: TMenuItem + Caption = '&Server' + object mnuToolsWebDebuggerOpenInBrowser: TMenuItem + Action = modActionsMain.actToolsWebOpenPublicUrl + end + object mnuToolsWebDebuggerCopyToClipboard: TMenuItem + Action = modActionsMain.actToolsWebCopyPublicUrl + end + object N11: TMenuItem + Caption = '-' + end + object Startserver1: TMenuItem + Action = modActionsMain.actToolsWebStartServer + end + object Stopserver1: TMenuItem + Action = modActionsMain.actToolsWebStopServer + end + object N7: TMenuItem + Caption = '-' + end + object mnuToolsWebDebuggerConfigure: TMenuItem + Action = modActionsMain.actToolsWebConfigure + end + end + object N4: TMenuItem + Caption = '-' + end + object Options1: TMenuItem + Action = modActionsMain.actToolsOptions + end + object mnuToolsDebugTests: TMenuItem + Caption = 'Debug Tests' + object mnuToolsDebugTestsShowDebuggerEventsPanel: TMenuItem + Caption = 'Show Debugger Events panel' + OnClick = mnuToolsDebugTestsShowDebuggerEventsPanelClick + end + object N3: TMenuItem + Caption = '-' + end + object mnuToolsDebugTestsExceptionTest: TMenuItem + Caption = '&Exception Test' + OnClick = mnuToolsDebugTestsExceptionTestClick + end + end + end + object mnuWindow: TMenuItem + Caption = '&Window' + OnClick = mnuWindowClick + object Newwindow1: TMenuItem + Action = modActionsMain.actWindowNew + end + object N12: TMenuItem + Caption = '-' + end + end + object Help1: TMenuItem + Caption = '&Help' + object Contents1: TMenuItem + Action = modActionsMain.actHelpContents + end + object N40: TMenuItem + Caption = '-' + end + object CheckforUpdates1: TMenuItem + Action = modActionsMain.actHelpCheckForUpdates + end + object N41: TMenuItem + Caption = '-' + end + object About1: TMenuItem + Action = modActionsMain.actHelpAbout + end + end + end +end diff --git a/developer/src/tike/main/UfrmMain.pas b/developer/src/tike/main/UfrmMain.pas index 20990fb02f..4cab1e36bd 100644 --- a/developer/src/tike/main/UfrmMain.pas +++ b/developer/src/tike/main/UfrmMain.pas @@ -171,8 +171,6 @@ type ToolButton2: TToolButton; ToolButton3: TToolButton; ToolButton4: TToolButton; - ToolButton5: TToolButton; - ToolButton6: TToolButton; ToolButton7: TToolButton; ToolButton8: TToolButton; ToolButton9: TToolButton; @@ -202,12 +200,8 @@ type N5: TMenuItem; Close1: TMenuItem; N6: TMenuItem; - PageSetup1: TMenuItem; - PrintPreview1: TMenuItem; - Print1: TMenuItem; N8: TMenuItem; Exit1: TMenuItem; - N9: TMenuItem; mnuFileRecent: TMenuItem; Undo1: TMenuItem; Redo1: TMenuItem; @@ -406,6 +400,8 @@ type procedure RefreshProjectMRU; procedure mnuWindowSelectClick(Sender: TObject); + procedure MakeToolWindowsTopMost(TopMost: Boolean); + function ActivateHook(var Message: TMessage): Boolean; protected procedure WndProc(var Message: TMessage); override; @@ -546,12 +542,26 @@ begin end; +function TfrmKeymanDeveloper.ActivateHook(var Message: TMessage): Boolean; +begin + // We process WM_ACTIVATEAPP here because App.OnActivate is posted after the + // activation has happened, whereas here we can capture it in the activation/ + // deactivation process. + if Message.Msg = WM_ACTIVATEAPP then + begin + MakeToolWindowsTopMost(Message.wParam <> 0); + end; + Result := False; +end; + procedure TfrmKeymanDeveloper.FormCreate(Sender: TObject); var newProject: TProjectUI; begin inherited; + Application.HookMainWindow(ActivateHook); + FFilesToOpen := TStringList.Create; try @@ -755,6 +765,7 @@ begin FreeAndNil(FCharMapSettings); Application.OnActivate := nil; + Application.UnhookMainWindow(ActivateHook); FreeGlobalProjectUI; FreeAndNil(FChildWindows); @@ -937,6 +948,27 @@ begin end; end; +procedure TfrmKeymanDeveloper.MakeToolWindowsTopMost(TopMost: Boolean); +var + hwTarget: THandle; + + procedure MakeTopmost(Form: TForm); + begin + // If exists and is not docked + if Assigned(Form) and ((GetWindowLong(Form.Handle, GWL_STYLE) and WS_CHILD) = 0) then + SetWindowPos(Form.Handle, hwTarget, 0, 0, 0, 0, SWP_NOSIZE or SWP_NOMOVE or SWP_NOREDRAW or SWP_NOACTIVATE or SWP_NOSENDCHANGING) + end; +begin + if TopMost + then hwTarget := HWND_TOPMOST + else hwTarget := Application.Handle; + + MakeTopmost(frmMessages); + MakeTopmost(frmCharacterMapDock); + MakeTopmost(frmCharacterIdentifier); + MakeTopmost(frmHelp); +end; + procedure TfrmKeymanDeveloper.AppOnActivate(Sender: TObject); var i: Integer; diff --git a/developer/src/tike/project/Keyman.Developer.UI.Project.UfrmProject.pas b/developer/src/tike/project/Keyman.Developer.UI.Project.UfrmProject.pas index aad4e9e57b..f609001c21 100644 --- a/developer/src/tike/project/Keyman.Developer.UI.Project.UfrmProject.pas +++ b/developer/src/tike/project/Keyman.Developer.UI.Project.UfrmProject.pas @@ -76,6 +76,7 @@ type procedure cefBeforeBrowse(Sender: TObject; const Url: string; isPopup, wasHandled: Boolean); procedure cefBeforeBrowseSync(Sender: TObject; const Url: string; isPopup: Boolean; out Handled: Boolean); procedure cefCommand(Sender: TObject; const command: string; params: TStringList); + procedure cefHelpTopic(Sender: TObject); procedure ProjectRefresh(Sender: TObject); procedure ProjectRefreshCaption(Sender: TObject); @@ -189,6 +190,7 @@ begin cef.OnBeforeBrowseSync := cefBeforeBrowseSync; cef.OnCommand := cefCommand; cef.OnLoadEnd := cefLoadEnd; + cef.OnHelpTopic := cefHelpTopic; RefreshHTML; end; @@ -288,6 +290,11 @@ begin WebCommand(LowerCase(command), params); end; +procedure TfrmProject.cefHelpTopic(Sender: TObject); +begin + frmKeymanDeveloper.HelpTopic(Self); +end; + procedure TfrmProject.CompileAll; var i: Integer; diff --git a/developer/src/tike/xml/layoutbuilder/builder.js b/developer/src/tike/xml/layoutbuilder/builder.js index 8915308d6f..b81707fa3c 100644 --- a/developer/src/tike/xml/layoutbuilder/builder.js +++ b/developer/src/tike/xml/layoutbuilder/builder.js @@ -10,6 +10,8 @@ $(function() { this.yscale = 1; this.uniqId = 1; + this.lastPresentations = {...this.defaultPresentations}; + this.lastLayers = {}; this.getPresentation = function () { return $('#selPlatformPresentation').val(); @@ -41,6 +43,7 @@ $(function() { } builder.selPlatformPresentationChange = function () { + builder.lastPresentations[builder.lastPlatform] = builder.getPresentation(); let lastSelection = builder.saveSelection(); builder.selectKey(null, false); builder.selectSubKey(null); @@ -493,11 +496,14 @@ $(function() { } var option = $(document.createElement('option')); option.attr('value', i).text(this.presentations[i].name); + if(builder.lastPresentations[builder.lastPlatform] == i) { + option.attr('selected', true); + } listContainer.append(option); } builder.prepareLayers(); - builder.selectLayer(0); + builder.selectLayer(builder.lastLayers[builder.lastPlatform] ?? 0); } this.selectLayer = function (val) { @@ -1079,7 +1085,9 @@ $(function() { var state = { platform: builder.lastPlatform, layer: builder.lastLayerIndex, - presentation: $('#selPlatformPresentation').val() + presentation: $('#selPlatformPresentation').val(), + lastPresentations: builder.lastPresentations, + lastLayers: builder.lastLayers, }; var key = builder.selectedKey(); @@ -1119,6 +1127,9 @@ $(function() { $('#selPlatformPresentation').val($('#selPlatformPresentation option:first').val()); } + builder.lastPresentations = {...(data.lastPresentations ?? this.defaultPresentations)}; + builder.lastLayers = {...(data.lastLayers ?? {})}; + let selection = builder.saveSelection(); builder.prepareLayer(); builder.restoreSelection(selection); diff --git a/developer/src/tike/xml/layoutbuilder/constants.js b/developer/src/tike/xml/layoutbuilder/constants.js index 117020e5d5..d3fd02667e 100644 --- a/developer/src/tike/xml/layoutbuilder/constants.js +++ b/developer/src/tike/xml/layoutbuilder/constants.js @@ -631,6 +631,8 @@ $(function() { "desktop": { "x": 640, "y": 300, "name": "Desktop" }, }; + this.defaultPresentations = { "tablet": "tablet-ipad-landscape", "phone": "phone-iphone5-landscape", "desktop": "desktop" }; + this.keyMargin = 15; // from kmwosk.js: diff --git a/developer/src/tike/xml/layoutbuilder/layer-controls.js b/developer/src/tike/xml/layoutbuilder/layer-controls.js index 0f1797d413..765aa5c2bd 100644 --- a/developer/src/tike/xml/layoutbuilder/layer-controls.js +++ b/developer/src/tike/xml/layoutbuilder/layer-controls.js @@ -174,6 +174,7 @@ $(function() { }); $('#selLayer').change(function () { + builder.lastLayers[builder.lastPlatform] = $('#selLayer').val(); if (builder.lastPlatform) builder.generate(false,false); let selection = builder.saveSelection(); builder.selectLayer(); diff --git a/developer/src/tike/xml/layoutbuilder/undo.js b/developer/src/tike/xml/layoutbuilder/undo.js index 81d8a2f130..025874c4f3 100644 --- a/developer/src/tike/xml/layoutbuilder/undo.js +++ b/developer/src/tike/xml/layoutbuilder/undo.js @@ -45,6 +45,9 @@ $(function() { $('#selPlatformPresentation').val(lastPresentation); builder.selPlatformPresentationChange(); } + + var json = JSON.stringify(KVKL, null, ' '); + builder.saveJSON(json, true); } this.saveUndo = function (saveToRedo) { diff --git a/docs/file-formats/kmx-file-format.md b/docs/file-formats/kmx-file-format.md index e13575ae4a..4a9c73b6ce 100644 --- a/docs/file-formats/kmx-file-format.md +++ b/docs/file-formats/kmx-file-format.md @@ -79,6 +79,7 @@ the `KMX_Version` enum: | `0x00000F00` | `VERSION_150` | Keyman 15.0 | | `0x00001000` | `VERSION_160` | Keyman 16.0 | | `0x00001100` | `VERSION_170` | Keyman 17.0 | +| `0x00001300` | `VERSION_190` | Keyman 19.0 | ### `StartGroup` diff --git a/ios/build.sh b/ios/build.sh index 81b477932c..e59f10a0dd 100755 --- a/ios/build.sh +++ b/ios/build.sh @@ -32,6 +32,7 @@ builder_describe "Builds Keyman Engine and the Keyman app for use on iOS devices "configure" \ "build" \ "test" \ + "publish-symbols Publishes symbols to Sentry" \ ":engine Builds KeymanEngine.xcframework, usable by our main app and by third-party apps" \ ":app=keyman Builds the Keyman app for iOS platforms" \ ":help Online documentation" \ @@ -50,3 +51,4 @@ function do_test_help() { } builder_run_action test:help do_test_help +builder_run_child_actions publish-symbols diff --git a/ios/engine/build.sh b/ios/engine/build.sh index f341e13983..2fa7add082 100755 --- a/ios/engine/build.sh +++ b/ios/engine/build.sh @@ -9,6 +9,7 @@ THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")" . "$KEYMAN_ROOT/resources/build/utils.inc.sh" . "$KEYMAN_ROOT/resources/build/mac/mac.inc.sh" . "$KEYMAN_ROOT/resources/build/build-download-resources.sh" +. "${KEYMAN_ROOT}/resources/build/ci/sentry-control.inc.sh" builder_describe "Builds Keyman Engine for use on iOS devices - iPhone and iPad." \ "@/web/src/app/webview build" \ @@ -16,7 +17,8 @@ builder_describe "Builds Keyman Engine for use on iOS devices - iPhone and iPad. "clean" \ "configure" \ "build" \ - "--sim-artifact Also outputs a simulator-friendly test artifact corresponding to the build" + "publish-symbols Publishes symbols to Sentry." \ + "--sim-artifact Also outputs a simulator-friendly test artifact corresponding to the build" builder_parse "$@" @@ -138,6 +140,13 @@ function build_engine() { fi } -builder_run_action clean do_clean -builder_run_action configure do_configure -builder_run_action build build_engine +do_publish_symbols() { + if builder_is_ci_build && builder_is_ci_build_level_release; then + sentry_upload_web "${KEYMAN_ROOT}/web/build/app/webview/release/" + fi +} + +builder_run_action clean do_clean +builder_run_action configure do_configure +builder_run_action build build_engine +builder_run_action publish-symbols do_publish_symbols diff --git a/linux/mcompile/keymap/mc_kmxfile.cpp b/linux/mcompile/keymap/mc_kmxfile.cpp index 039ae075f1..917bd1f7a3 100644 --- a/linux/mcompile/keymap/mc_kmxfile.cpp +++ b/linux/mcompile/keymap/mc_kmxfile.cpp @@ -28,7 +28,7 @@ const int CODE__SIZE[] = { -1, // CODE_EXTENDEDEND 0x0B (unused) 1, // CODE_SWITCH 0x0C -1, // CODE_KEY 0x0D (never used) - 0, // CODE_CLEARCONTEXT 0x0E + 0, // CODE_CLEARCONTEXT 0x0E (deprecated in 19.0) 1, // CODE_CALL 0x0F -1, // UC_SENTINEL_EXTENDEDEND 0x10 (not valid with UC_SENTINEL) 1, // CODE_CONTEXTEX 0x11 diff --git a/mac/Keyman4Mac/Keyman4Mac/WindowsVKCodes.h b/mac/Keyman4Mac/Keyman4Mac/WindowsVKCodes.h deleted file mode 100644 index b7a15b2ca9..0000000000 --- a/mac/Keyman4Mac/Keyman4Mac/WindowsVKCodes.h +++ /dev/null @@ -1,79 +0,0 @@ -// -// WindowsVKCodes.h -// Keyman4Mac -// -// Created by Serkan Kurt on 2/12/2014. -// Copyright (c) 2017 SIL International. All rights reserved. -// - -#define VK_BACKSPACE 0x08 -#define VK_TAB 0x09 -#define VK_ENTER 0x0D -#define VK_SPACE 0x20 - -#define VK_KEY_0 0x30 -#define VK_KEY_1 0x31 -#define VK_KEY_2 0x32 -#define VK_KEY_3 0x33 -#define VK_KEY_4 0x34 -#define VK_KEY_5 0x35 -#define VK_KEY_6 0x36 -#define VK_KEY_7 0x37 -#define VK_KEY_8 0x38 -#define VK_KEY_9 0x39 -#define VK_KEY_A 0x41 -#define VK_KEY_B 0x42 -#define VK_KEY_C 0x43 -#define VK_KEY_D 0x44 -#define VK_KEY_E 0x45 -#define VK_KEY_F 0x46 -#define VK_KEY_G 0x47 -#define VK_KEY_H 0x48 -#define VK_KEY_I 0x49 -#define VK_KEY_J 0x4A -#define VK_KEY_K 0x4B -#define VK_KEY_L 0x4C -#define VK_KEY_M 0x4D -#define VK_KEY_N 0x4E -#define VK_KEY_O 0x4F -#define VK_KEY_P 0x50 -#define VK_KEY_Q 0x51 -#define VK_KEY_R 0x52 -#define VK_KEY_S 0x53 -#define VK_KEY_T 0x54 -#define VK_KEY_U 0x55 -#define VK_KEY_V 0x56 -#define VK_KEY_W 0x57 -#define VK_KEY_X 0x58 -#define VK_KEY_Y 0x59 -#define VK_KEY_Z 0x5A - -#define VK_NUMPAD0 0x60 -#define VK_NUMPAD1 0x61 -#define VK_NUMPAD2 0x62 -#define VK_NUMPAD3 0x63 -#define VK_NUMPAD4 0x64 -#define VK_NUMPAD5 0x65 -#define VK_NUMPAD6 0x66 -#define VK_NUMPAD7 0x67 -#define VK_NUMPAD8 0x68 -#define VK_NUMPAD9 0x69 - -#define VK_NUMPAD_MULTIPLY 0x6A -#define VK_NUMPAD_ADD 0x6B -#define VK_NUMPAD_SUBTRACT 0x6D -#define VK_NUMPAD_DECIMAL 0x6E -#define VK_NUMPAD_DIVIDE 0x6F -#define VK_NUMLOCK 0x90 - -#define VK_COMMA 0xBC -#define VK_MINUS 0xBD -#define VK_PERIOD 0xBE -#define VK_EQUAL 0xBB -#define VK_SEMICOLON 0xBA -#define VK_SLASH 0xBF -#define VK_GRAVE 0xC0 -#define VK_LEFT_BRACKET 0xDB -#define VK_BACKSLASH 0xDC -#define VK_RIGHT_BRACKET 0xDD -#define VK_QUOTE 0xDE diff --git a/mac/KeymanEngine4Mac/KeymanEngine4Mac/CoreWrapper/CoreHelper.m b/mac/KeymanEngine4Mac/KeymanEngine4Mac/CoreWrapper/CoreHelper.m index c7858e7b0d..ad2b88121a 100644 --- a/mac/KeymanEngine4Mac/KeymanEngine4Mac/CoreWrapper/CoreHelper.m +++ b/mac/KeymanEngine4Mac/KeymanEngine4Mac/CoreWrapper/CoreHelper.m @@ -18,7 +18,7 @@ #import "CoreAction.h" #import "keyman_core_api.h" #import "MacVKCodes.h" -#import "WindowsVKCodes.h" +#import "km_vkey.h" #import "KMELogs.h" const int VIRTUAL_KEY_ARRAY_SIZE = 0x80; diff --git a/mac/KeymanEngine4Mac/KeymanEngine4Mac/KME/KMBinaryFileFormat.h b/mac/KeymanEngine4Mac/KeymanEngine4Mac/KME/KMBinaryFileFormat.h index 3951d5831d..633a7a17b5 100644 --- a/mac/KeymanEngine4Mac/KeymanEngine4Mac/KME/KMBinaryFileFormat.h +++ b/mac/KeymanEngine4Mac/KeymanEngine4Mac/KME/KMBinaryFileFormat.h @@ -52,8 +52,9 @@ struct COMP_KEYBOARD { #define VERSION_150 0x00000F00 #define VERSION_160 0x00001000 #define VERSION_170 0x00001100 +#define VERSION_190 0x00001300 #define VERSION_MIN VERSION_50 -#define VERSION_MAX VERSION_170 +#define VERSION_MAX VERSION_190 struct COMP_STORE { DWORD dwSystemID; diff --git a/mac/KeymanEngine4Mac/KeymanEngine4Mac/KME/KMEngine.m b/mac/KeymanEngine4Mac/KeymanEngine4Mac/KME/KMEngine.m index fd59c48b62..01f59f0a97 100644 --- a/mac/KeymanEngine4Mac/KeymanEngine4Mac/KME/KMEngine.m +++ b/mac/KeymanEngine4Mac/KeymanEngine4Mac/KME/KMEngine.m @@ -8,7 +8,7 @@ #import "KMEngine.h" #import "KMBinaryFileFormat.h" -#import "WindowsVKCodes.h" +#import "km_vkey.h" #import "MacVKCodes.h" #import "CoreWrapper.h" #import "KMELogs.h" diff --git a/mac/KeymanEngine4Mac/KeymanEngine4Mac/KME/OnScreenKeyboard/OSKView.m b/mac/KeymanEngine4Mac/KeymanEngine4Mac/KME/OnScreenKeyboard/OSKView.m index e576d000b8..f133609a86 100644 --- a/mac/KeymanEngine4Mac/KeymanEngine4Mac/KME/OnScreenKeyboard/OSKView.m +++ b/mac/KeymanEngine4Mac/KeymanEngine4Mac/KME/OnScreenKeyboard/OSKView.m @@ -10,7 +10,7 @@ #import "OSKKey.h" #import "KeyView.h" #import "MacVKCodes.h" -#import "WindowsVKCodes.h" +#import "km_vkey.h" #import "NKey.h" #import "CoreHelper.h" diff --git a/mac/KeymanEngine4Mac/KeymanEngine4Mac/KME/WindowsVKCodes.h b/mac/KeymanEngine4Mac/KeymanEngine4Mac/KME/WindowsVKCodes.h deleted file mode 100644 index 2fc5ba7f79..0000000000 --- a/mac/KeymanEngine4Mac/KeymanEngine4Mac/KME/WindowsVKCodes.h +++ /dev/null @@ -1,86 +0,0 @@ -// -// WindowsVKCodes.h -// KeymanEngine4Mac -// -// Created by Serkan Kurt on 2/12/2014. -// Copyright (c) 2017 SIL International. All rights reserved. -// - -#ifndef WindowsVKCodes_h -#define WindowsVKCodes_h - -#define VK_BACKSPACE 0x08 -#define VK_TAB 0x09 -#define VK_ENTER 0x0D -#define VK_SPACE 0x20 - -#define VK_KEY_0 0x30 -#define VK_KEY_1 0x31 -#define VK_KEY_2 0x32 -#define VK_KEY_3 0x33 -#define VK_KEY_4 0x34 -#define VK_KEY_5 0x35 -#define VK_KEY_6 0x36 -#define VK_KEY_7 0x37 -#define VK_KEY_8 0x38 -#define VK_KEY_9 0x39 -#define VK_KEY_A 0x41 -#define VK_KEY_B 0x42 -#define VK_KEY_C 0x43 -#define VK_KEY_D 0x44 -#define VK_KEY_E 0x45 -#define VK_KEY_F 0x46 -#define VK_KEY_G 0x47 -#define VK_KEY_H 0x48 -#define VK_KEY_I 0x49 -#define VK_KEY_J 0x4A -#define VK_KEY_K 0x4B -#define VK_KEY_L 0x4C -#define VK_KEY_M 0x4D -#define VK_KEY_N 0x4E -#define VK_KEY_O 0x4F -#define VK_KEY_P 0x50 -#define VK_KEY_Q 0x51 -#define VK_KEY_R 0x52 -#define VK_KEY_S 0x53 -#define VK_KEY_T 0x54 -#define VK_KEY_U 0x55 -#define VK_KEY_V 0x56 -#define VK_KEY_W 0x57 -#define VK_KEY_X 0x58 -#define VK_KEY_Y 0x59 -#define VK_KEY_Z 0x5A - -#define VK_NUMPAD0 0x60 -#define VK_NUMPAD1 0x61 -#define VK_NUMPAD2 0x62 -#define VK_NUMPAD3 0x63 -#define VK_NUMPAD4 0x64 -#define VK_NUMPAD5 0x65 -#define VK_NUMPAD6 0x66 -#define VK_NUMPAD7 0x67 -#define VK_NUMPAD8 0x68 -#define VK_NUMPAD9 0x69 - -#define VK_NUMPAD_MULTIPLY 0x6A -#define VK_NUMPAD_ADD 0x6B -#define VK_NUMPAD_SUBTRACT 0x6D -#define VK_NUMPAD_DECIMAL 0x6E -#define VK_NUMPAD_DIVIDE 0x6F -#define VK_NUMLOCK 0x90 - -#define VK_COMMA 0xBC -#define VK_MINUS 0xBD -#define VK_PERIOD 0xBE -#define VK_EQUAL 0xBB -#define VK_SEMICOLON 0xBA -#define VK_SLASH 0xBF -#define VK_GRAVE 0xC0 -#define VK_LEFT_BRACKET 0xDB -#define VK_BACKSLASH 0xDC -#define VK_RIGHT_BRACKET 0xDD -#define VK_QUOTE 0xDE - -#define VK_OEM_102 0xE2 - -#endif /* WindowsVKCodes_h */ diff --git a/mac/mcompile/mc_kmxfile.cpp b/mac/mcompile/mc_kmxfile.cpp index 78aa40615c..994ecf3be9 100644 --- a/mac/mcompile/mc_kmxfile.cpp +++ b/mac/mcompile/mc_kmxfile.cpp @@ -27,7 +27,7 @@ const int CODE__SIZE[] = { -1, // CODE_EXTENDEDEND 0x0B (unused) 1, // CODE_SWITCH 0x0C -1, // CODE_KEY 0x0D (never used) - 0, // CODE_CLEARCONTEXT 0x0E + 0, // CODE_CLEARCONTEXT 0x0E (deprecated in 19.0) 1, // CODE_CALL 0x0F -1, // UC_SENTINEL_EXTENDEDEND 0x10 (not valid with UC_SENTINEL) 1, // CODE_CONTEXTEX 0x11 @@ -332,7 +332,7 @@ LPKMX_KEYBOARD KMX_CopyKeyboard(PKMX_BYTE bufp, PKMX_BYTE base) { } // else KMX_FixupKeyboard -#else +#else /** * @brief Fixup the keyboard by expanding pointers. On disk the pointers are stored relative to the diff --git a/oem/firstvoices/windows/src/xml/keyman_options.xsl b/oem/firstvoices/windows/src/xml/keyman_options.xsl index 0d8fee607b..561ddc70f6 100644 --- a/oem/firstvoices/windows/src/xml/keyman_options.xsl +++ b/oem/firstvoices/windows/src/xml/keyman_options.xsl @@ -14,7 +14,7 @@
- + diff --git a/oem/firstvoices/windows/src/xml/strings.xml b/oem/firstvoices/windows/src/xml/strings.xml index e476f1daf8..0348833eb1 100644 --- a/oem/firstvoices/windows/src/xml/strings.xml +++ b/oem/firstvoices/windows/src/xml/strings.xml @@ -408,11 +408,6 @@ Always show On Screen Keyboard Window when a FirstVoices keyboard is selected - - - - Switch to appropriate On Screen Keyboard/Help automatically when a keyboard is selected - diff --git a/package-lock.json b/package-lock.json index 4056482cd0..88b8c7f08b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -428,9 +428,6 @@ "@keymanapp/resources-gosh": "*", "@types/node": "^20.4.1", "@types/semver": "^7.3.12", - "ajv": "^8.12.0", - "ajv-cli": "^5.0.0", - "ajv-formats": "^2.1.1", "c8": "^7.12.0", "chalk": "^2.4.2", "typescript": "^5.4.5" @@ -1199,7 +1196,7 @@ "@ngrok/ngrok": "^1.7.0", "@sentry/node": "^7.57.0", "chalk": "^4.1.2", - "express": "^4.22.2", + "express": "^5.2.1", "multer": "^2.2.0", "open": "^8.4.0", "restructure": "^3.0.1", @@ -1939,23 +1936,6 @@ "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/@eslint/eslintrc/node_modules/debug": { - "version": "4.3.5", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", - "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, "node_modules/@eslint/eslintrc/node_modules/json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", @@ -3152,24 +3132,6 @@ "node": ">=12" } }, - "node_modules/@puppeteer/browsers/node_modules/debug": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", - "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, "node_modules/@puppeteer/browsers/node_modules/is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", @@ -3180,13 +3142,6 @@ "node": ">=8" } }, - "node_modules/@puppeteer/browsers/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true, - "license": "MIT" - }, "node_modules/@puppeteer/browsers/node_modules/semver": { "version": "7.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", @@ -4372,23 +4327,6 @@ } } }, - "node_modules/@typescript-eslint/parser/node_modules/debug": { - "version": "4.3.5", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", - "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, "node_modules/@typescript-eslint/scope-manager": { "version": "7.13.1", "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.13.1.tgz", @@ -4433,23 +4371,6 @@ } } }, - "node_modules/@typescript-eslint/type-utils/node_modules/debug": { - "version": "4.3.5", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", - "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, "node_modules/@typescript-eslint/types": { "version": "7.13.1", "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.13.1.tgz", @@ -4500,23 +4421,6 @@ "balanced-match": "^1.0.0" } }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/debug": { - "version": "4.3.5", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", - "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { "version": "9.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", @@ -5508,25 +5412,6 @@ "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", "dev": true }, - "node_modules/@web/test-runner-core/node_modules/nanoid": { - "version": "3.3.11", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", - "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, "node_modules/@web/test-runner-core/node_modules/readdirp": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", @@ -5667,6 +5552,7 @@ }, "node_modules/accepts": { "version": "1.3.8", + "dev": true, "license": "MIT", "dependencies": { "mime-types": "~2.1.34", @@ -5904,10 +5790,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/array-flatten": { - "version": "1.1.1", - "license": "MIT" - }, "node_modules/array-includes": { "version": "3.1.6", "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz", @@ -6157,36 +6039,40 @@ "license": "Apache-2.0" }, "node_modules/body-parser": { - "version": "1.20.6", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.6.tgz", - "integrity": "sha512-p5tAzS57i5MV9fZFDj9LeIiTZEufbSe2eDozP+ElheSUq1m74CRq1jI4mYNDdVs9vQztXFLuk/Gd6BWTdwRJ5g==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.3.0.tgz", + "integrity": "sha512-2cGmJupaNgg+QUwVLAucDuWuoMZ6EX9iHDRswZ5lsNYEmwPaRknMPCLZz07yTzVq/83p4o/wzbDZbBrTvGGTIw==", "license": "MIT", "dependencies": { - "bytes": "~3.1.2", - "content-type": "~1.0.5", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "~1.2.0", - "http-errors": "~2.0.1", - "iconv-lite": "~0.4.24", - "on-finished": "~2.4.1", - "qs": "~6.15.1", - "raw-body": "~2.5.3", - "type-is": "~1.6.18", - "unpipe": "~1.0.0" + "bytes": "^3.1.2", + "content-type": "^2.0.0", + "debug": "^4.4.3", + "http-errors": "^2.0.1", + "iconv-lite": "^0.7.2", + "on-finished": "^2.4.1", + "qs": "^6.15.2", + "raw-body": "^3.0.2", + "type-is": "^2.1.0" }, "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, - "node_modules/body-parser/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "node_modules/body-parser/node_modules/content-type": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-2.1.0.tgz", + "integrity": "sha512-mj7UPXE0jaqaOsukNZRUEfEi2AcL7C/vwmwcHV0O97eO1E1pxBZuyjlZrx5seTaNBg1U6+o35wpa35Qfcc+7ag==", "license": "MIT", - "dependencies": { - "ms": "2.0.0" + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/body-parser/node_modules/depd": { @@ -6218,25 +6104,73 @@ "url": "https://opencollective.com/express" } }, - "node_modules/body-parser/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT" + "node_modules/body-parser/node_modules/iconv-lite": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.3.tgz", + "integrity": "sha512-IKXpvIzjnC9XTAUbVBcMfGS0EPaIXtW6v+zr+RRp+hqULEpo0owZax6wyRwPOJbWbzjYspQwusTsfVr0ifh4uQ==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/body-parser/node_modules/media-typer": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.1.tgz", + "integrity": "sha512-yz3xRaG20c6/BOzvYoDaGtPmGscs7YivItZEEqe6GbwNfHuxu9YNmvnEkMzKldAGY4/80pRcQRZSEnhquk9XuQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/body-parser/node_modules/mime-db": { + "version": "1.54.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", + "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/body-parser/node_modules/mime-types": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.2.tgz", + "integrity": "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==", + "license": "MIT", + "dependencies": { + "mime-db": "^1.54.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } }, "node_modules/body-parser/node_modules/raw-body": { - "version": "2.5.3", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.3.tgz", - "integrity": "sha512-s4VSOf6yN0rvbRZGxs8Om5CWj6seneMwK3oDb4lWDH0UPhWcxwOWw5+qk24bxq87szX1ydrwylIOp2uG1ojUpA==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.2.tgz", + "integrity": "sha512-K5zQjDllxWkf7Z5xJdV0/B0WTNqx6vxG70zJE4N0kBs4LovmEYWJzQGxC9bS9RAKu3bgM40lrd5zoLJ12MQ5BA==", "license": "MIT", "dependencies": { "bytes": "~3.1.2", "http-errors": "~2.0.1", - "iconv-lite": "~0.4.24", + "iconv-lite": "~0.7.0", "unpipe": "~1.0.0" }, "engines": { - "node": ">= 0.8" + "node": ">= 0.10" } }, "node_modules/body-parser/node_modules/statuses": { @@ -6248,6 +6182,24 @@ "node": ">= 0.8" } }, + "node_modules/body-parser/node_modules/type-is": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.1.0.tgz", + "integrity": "sha512-faYHw0anBbc/kWF3zFTEnxSFOAGUX9GFbOBthvDdLsIlEoWOFOtS0zgCiQYwIskL9iGXZL3kAXD8OoZ4GmMATA==", + "license": "MIT", + "dependencies": { + "content-type": "^2.0.0", + "media-typer": "^1.1.0", + "mime-types": "^3.0.0" + }, + "engines": { + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, "node_modules/brace-expansion": { "version": "1.1.12", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", @@ -6966,6 +6918,7 @@ }, "node_modules/content-disposition": { "version": "0.5.4", + "dev": true, "license": "MIT", "dependencies": { "safe-buffer": "5.2.1" @@ -6997,8 +6950,13 @@ } }, "node_modules/cookie-signature": { - "version": "1.0.6", - "license": "MIT" + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.2.2.tgz", + "integrity": "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==", + "license": "MIT", + "engines": { + "node": ">=6.6.0" + } }, "node_modules/cookies": { "version": "0.9.1", @@ -7155,11 +7113,12 @@ "dev": true }, "node_modules/debug": { - "version": "4.3.1", - "dev": true, + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", "license": "MIT", "dependencies": { - "ms": "2.1.2" + "ms": "^2.1.3" }, "engines": { "node": ">=6.0" @@ -7170,6 +7129,12 @@ } } }, + "node_modules/debug/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, "node_modules/decimal.js": { "version": "10.4.3", "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz", @@ -7369,6 +7334,7 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "dev": true, "engines": { "node": ">= 0.8", "npm": "1.2.8000 || >= 1.4.16" @@ -7447,6 +7413,7 @@ }, "node_modules/encodeurl": { "version": "1.0.2", + "dev": true, "license": "MIT", "engines": { "node": ">= 0.8" @@ -8144,23 +8111,6 @@ "node": ">=8" } }, - "node_modules/eslint/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, "node_modules/eslint/node_modules/escape-string-regexp": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", @@ -8331,58 +8281,72 @@ "dev": true }, "node_modules/express": { - "version": "4.22.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.22.2.tgz", - "integrity": "sha512-IuL+Elrou2ZvCFHs18/CIzy2Nzvo25nZ1/D2eIZlz7c+QUayAcYoiM2BthCjs+EBHVpjYjcuLDAiCWgeIX3X1Q==", + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/express/-/express-5.2.1.tgz", + "integrity": "sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw==", "license": "MIT", "dependencies": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "~1.20.5", - "content-disposition": "~0.5.4", - "content-type": "~1.0.4", - "cookie": "~0.7.1", - "cookie-signature": "~1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "~1.3.1", - "fresh": "~0.5.2", - "http-errors": "~2.0.0", - "merge-descriptors": "1.0.3", - "methods": "~1.1.2", - "on-finished": "~2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "~0.1.12", - "proxy-addr": "~2.0.7", - "qs": "~6.15.1", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "~0.19.0", - "serve-static": "~1.16.2", - "setprototypeof": "1.2.0", - "statuses": "~2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" + "accepts": "^2.0.0", + "body-parser": "^2.2.1", + "content-disposition": "^1.0.0", + "content-type": "^1.0.5", + "cookie": "^0.7.1", + "cookie-signature": "^1.2.1", + "debug": "^4.4.0", + "depd": "^2.0.0", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "etag": "^1.8.1", + "finalhandler": "^2.1.0", + "fresh": "^2.0.0", + "http-errors": "^2.0.0", + "merge-descriptors": "^2.0.0", + "mime-types": "^3.0.0", + "on-finished": "^2.4.1", + "once": "^1.4.0", + "parseurl": "^1.3.3", + "proxy-addr": "^2.0.7", + "qs": "^6.14.0", + "range-parser": "^1.2.1", + "router": "^2.2.0", + "send": "^1.1.0", + "serve-static": "^2.2.0", + "statuses": "^2.0.1", + "type-is": "^2.0.1", + "vary": "^1.1.2" }, "engines": { - "node": ">= 0.10.0" + "node": ">= 18" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/express" } }, - "node_modules/express/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "node_modules/express/node_modules/accepts": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-2.0.0.tgz", + "integrity": "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==", "license": "MIT", "dependencies": { - "ms": "2.0.0" + "mime-types": "^3.0.0", + "negotiator": "^1.0.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/express/node_modules/content-disposition": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.1.0.tgz", + "integrity": "sha512-5jRCH9Z/+DRP7rkvY83B+yGIGX96OYdJmzngqnw2SBSxqCFPd0w2km3s5iawpGX8krnwSGmF0FW5Nhr0Hfai3g==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/express/node_modules/depd": { @@ -8401,11 +8365,81 @@ "node": ">= 0.8" } }, - "node_modules/express/node_modules/ms": { + "node_modules/express/node_modules/fresh": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT" + "resolved": "https://registry.npmjs.org/fresh/-/fresh-2.0.0.tgz", + "integrity": "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/express/node_modules/media-typer": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.1.tgz", + "integrity": "sha512-yz3xRaG20c6/BOzvYoDaGtPmGscs7YivItZEEqe6GbwNfHuxu9YNmvnEkMzKldAGY4/80pRcQRZSEnhquk9XuQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/express/node_modules/mime-db": { + "version": "1.54.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", + "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/express/node_modules/mime-types": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.2.tgz", + "integrity": "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==", + "license": "MIT", + "dependencies": { + "mime-db": "^1.54.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/express/node_modules/negotiator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.1.0.tgz", + "integrity": "sha512-NMPBRMJgiQHjbd8phG3Vebdx4kZ1H121rbl5IkMqeOsahptB9BKo/d7oJ3zTXqTgagn2bWlNSXkh0QUGM31RYg==", + "license": "MIT", + "dependencies": { + "content-type": "^2.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/express/node_modules/negotiator/node_modules/content-type": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-2.1.0.tgz", + "integrity": "sha512-mj7UPXE0jaqaOsukNZRUEfEi2AcL7C/vwmwcHV0O97eO1E1pxBZuyjlZrx5seTaNBg1U6+o35wpa35Qfcc+7ag==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } }, "node_modules/express/node_modules/statuses": { "version": "2.0.1", @@ -8416,6 +8450,37 @@ "node": ">= 0.8" } }, + "node_modules/express/node_modules/type-is": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.1.0.tgz", + "integrity": "sha512-faYHw0anBbc/kWF3zFTEnxSFOAGUX9GFbOBthvDdLsIlEoWOFOtS0zgCiQYwIskL9iGXZL3kAXD8OoZ4GmMATA==", + "license": "MIT", + "dependencies": { + "content-type": "^2.0.0", + "media-typer": "^1.1.0", + "mime-types": "^3.0.0" + }, + "engines": { + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/express/node_modules/type-is/node_modules/content-type": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-2.1.0.tgz", + "integrity": "sha512-mj7UPXE0jaqaOsukNZRUEfEi2AcL7C/vwmwcHV0O97eO1E1pxBZuyjlZrx5seTaNBg1U6+o35wpa35Qfcc+7ag==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, "node_modules/extract-zip": { "version": "2.0.1", "dev": true, @@ -8483,9 +8548,9 @@ "dev": true }, "node_modules/fast-uri": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.5.tgz", - "integrity": "sha512-gHwA1O9LDIcKunMKhObS/HimwtehO1nPUECKAu5TpKgaO19fcWEl4bliWe1jWxVFvIXztJjjQ4L8XQ1EU9f7Jw==", + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.7.tgz", + "integrity": "sha512-dOvZVzjdZdz7phd9v6jCbwxrBW3fK6n8Rc0CtdmM4bumzMnxywBYhuph6J819RRw/ku+rLbelwfMunktuzVVHg==", "dev": true, "funding": [ { @@ -8541,30 +8606,24 @@ } }, "node_modules/finalhandler": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", - "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-2.1.1.tgz", + "integrity": "sha512-S8KoZgRZN+a5rNwqTxlZZePjT/4cnm0ROV70LedRHZ0p8u9fRID0hJUZQpkKLzro8LfmC8sx23bY6tVNxv8pQA==", "license": "MIT", "dependencies": { - "debug": "2.6.9", - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" + "debug": "^4.4.0", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "on-finished": "^2.4.1", + "parseurl": "^1.3.3", + "statuses": "^2.0.1" }, "engines": { - "node": ">= 0.8" - } - }, - "node_modules/finalhandler/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "license": "MIT", - "dependencies": { - "ms": "2.0.0" + "node": ">= 18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/finalhandler/node_modules/encodeurl": { @@ -8576,16 +8635,10 @@ "node": ">= 0.8" } }, - "node_modules/finalhandler/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT" - }, "node_modules/finalhandler/node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", + "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", "license": "MIT", "engines": { "node": ">= 0.8" @@ -8708,6 +8761,7 @@ "version": "0.5.2", "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "dev": true, "engines": { "node": ">= 0.6" } @@ -8907,31 +8961,6 @@ "node": ">= 14" } }, - "node_modules/get-uri/node_modules/debug": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", - "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/get-uri/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true, - "license": "MIT" - }, "node_modules/git-diff": { "version": "2.0.6", "dev": true, @@ -9331,23 +9360,6 @@ "node": ">= 14" } }, - "node_modules/http-proxy-agent/node_modules/debug": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz", - "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, "node_modules/https-proxy-agent": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", @@ -9375,6 +9387,7 @@ "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, "dependencies": { "safer-buffer": ">= 2.1.2 < 3" }, @@ -9790,6 +9803,12 @@ "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", "dev": true }, + "node_modules/is-promise": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz", + "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==", + "license": "MIT" + }, "node_modules/is-regex": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", @@ -10047,23 +10066,6 @@ "node": ">= 14" } }, - "node_modules/jsdom/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, "node_modules/jsdom/node_modules/https-proxy-agent": { "version": "7.0.2", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.2.tgz", @@ -10298,23 +10300,6 @@ "ms": "^2.1.1" } }, - "node_modules/koa/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, "node_modules/koa/node_modules/depd": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", @@ -10621,9 +10606,13 @@ } }, "node_modules/merge-descriptors": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", - "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-2.0.0.tgz", + "integrity": "sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==", + "license": "MIT", + "engines": { + "node": ">=18" + }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } @@ -10644,13 +10633,6 @@ "node": ">= 8" } }, - "node_modules/methods": { - "version": "1.1.2", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, "node_modules/micromatch": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", @@ -10665,17 +10647,6 @@ "node": ">=8.6" } }, - "node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/mime-db": { "version": "1.52.0", "license": "MIT", @@ -10958,24 +10929,6 @@ "node": ">=12" } }, - "node_modules/mocha/node_modules/debug": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", - "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, "node_modules/mocha/node_modules/diff": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz", @@ -11239,6 +11192,25 @@ "integrity": "sha512-0n3mSAQLPpGLV9ORXT5+C/D4mwew7Ebws69Hx4E2sgz2ZA5+32Q80B9tL8PbL7XHnRDiAxH/pnrUJ9a4fkTNTA==", "dev": true }, + "node_modules/nanoid": { + "version": "3.3.18", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.18.tgz", + "integrity": "sha512-DTg4MJbGMWkfi6VZFdNt2/caMbQy4Ou+Op/hJQvGEWcnVfoA1QA+xzRKAzw9jD6+GVOOeYr/mIcuDSdug6F6+w==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, "node_modules/natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", @@ -11247,6 +11219,7 @@ }, "node_modules/negotiator": { "version": "0.6.3", + "dev": true, "license": "MIT", "engines": { "node": ">= 0.6" @@ -11748,24 +11721,6 @@ "node": ">= 14" } }, - "node_modules/pac-proxy-agent/node_modules/debug": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", - "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, "node_modules/pac-proxy-agent/node_modules/https-proxy-agent": { "version": "7.0.6", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", @@ -11780,13 +11735,6 @@ "node": ">= 14" } }, - "node_modules/pac-proxy-agent/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true, - "license": "MIT" - }, "node_modules/pac-resolver": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-7.0.1.tgz", @@ -11927,10 +11875,14 @@ "dev": true }, "node_modules/path-to-regexp": { - "version": "0.1.12", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz", - "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==", - "license": "MIT" + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.4.2.tgz", + "integrity": "sha512-qRcuIdP69NPm4qbACK+aDogI5CBDMi1jKe0ry5rSQJz8JVLsC7jV8XpiJjGRLLol3N+R5ihGYcrPLTno6pAdBA==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } }, "node_modules/path-type": { "version": "4.0.0", @@ -12149,24 +12101,6 @@ "node": ">= 14" } }, - "node_modules/proxy-agent/node_modules/debug": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", - "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, "node_modules/proxy-agent/node_modules/https-proxy-agent": { "version": "7.0.6", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", @@ -12191,13 +12125,6 @@ "node": ">=12" } }, - "node_modules/proxy-agent/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true, - "license": "MIT" - }, "node_modules/proxy-from-env": { "version": "1.1.0", "dev": true, @@ -12258,38 +12185,14 @@ "node": ">=18" } }, - "node_modules/puppeteer-core/node_modules/debug": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", - "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/puppeteer-core/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true, - "license": "MIT" - }, "node_modules/qs": { - "version": "6.15.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.15.2.tgz", - "integrity": "sha512-Rzq0KEyX/w/tEybncDgdkZrJgVUsUMk3xjh3t5bv3S1HTAtg+uOYt72+ZfwiQwKdysThkTBdL/rTi6HDmX9Ddw==", + "version": "6.16.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.16.0.tgz", + "integrity": "sha512-h6fhOIaRrID2CbEY2fqs+7t+UXZo+MLAnU5gRIq85uFtdiUPCdsApMlHhXogKVM4HM2DVbIjGNTTYH2OcmP1vA==", "license": "BSD-3-Clause", "dependencies": { - "side-channel": "^1.1.0" + "es-define-property": "^1.0.1", + "side-channel": "^1.1.1" }, "engines": { "node": ">=0.6" @@ -12594,6 +12497,31 @@ "fsevents": "~2.3.2" } }, + "node_modules/router": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/router/-/router-2.2.0.tgz", + "integrity": "sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==", + "license": "MIT", + "dependencies": { + "debug": "^4.4.0", + "depd": "^2.0.0", + "is-promise": "^4.0.0", + "parseurl": "^1.3.3", + "path-to-regexp": "^8.0.0" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/router/node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/rrweb-cssom": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.6.0.tgz", @@ -12625,6 +12553,7 @@ }, "node_modules/safe-buffer": { "version": "5.2.1", + "dev": true, "funding": [ { "type": "github", @@ -12690,75 +12619,135 @@ } }, "node_modules/send": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", - "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/send/-/send-1.2.1.tgz", + "integrity": "sha512-1gnZf7DFcoIcajTjTwjwuDjzuz4PPcY2StKPlsGAQ1+YH20IRVrBaXSWmdjowTJ6u8Rc01PoYOGHXfP1mYcZNQ==", + "license": "MIT", "dependencies": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" + "debug": "^4.4.3", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "etag": "^1.8.1", + "fresh": "^2.0.0", + "http-errors": "^2.0.1", + "mime-types": "^3.0.2", + "ms": "^2.1.3", + "on-finished": "^2.4.1", + "range-parser": "^1.2.1", + "statuses": "^2.0.2" }, "engines": { - "node": ">= 0.8.0" + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, - "node_modules/send/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/send/node_modules/debug/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, "node_modules/send/node_modules/depd": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "license": "MIT", "engines": { "node": ">= 0.8" } }, + "node_modules/send/node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/send/node_modules/fresh": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-2.0.0.tgz", + "integrity": "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/send/node_modules/http-errors": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", + "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", + "license": "MIT", + "dependencies": { + "depd": "~2.0.0", + "inherits": "~2.0.4", + "setprototypeof": "~1.2.0", + "statuses": "~2.0.2", + "toidentifier": "~1.0.1" + }, + "engines": { + "node": ">= 0.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/send/node_modules/mime-db": { + "version": "1.54.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", + "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/send/node_modules/mime-types": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.2.tgz", + "integrity": "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==", + "license": "MIT", + "dependencies": { + "mime-db": "^1.54.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, "node_modules/send/node_modules/ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" }, "node_modules/send/node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", + "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", + "license": "MIT", "engines": { "node": ">= 0.8" } }, "node_modules/serve-static": { - "version": "1.16.2", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", - "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-2.2.1.tgz", + "integrity": "sha512-xRXBn0pPqQTVQiC8wyQrKs2MOlX24zQ0POGaj0kultvoOCstBQM5yvOhAVSUwOMjQtTvsPWoNCHfPGwaaQJhTw==", "license": "MIT", "dependencies": { - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.19.0" + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "parseurl": "^1.3.3", + "send": "^1.2.0" }, "engines": { - "node": ">= 0.8.0" + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/serve-static/node_modules/encodeurl": { @@ -12842,14 +12831,14 @@ } }, "node_modules/side-channel": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", - "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.1.tgz", + "integrity": "sha512-6x6dK6zJdpTzF4sQeNYxwtvBzf6Eg4GtlesS94HOvTudUeyK2WXAaIfmDgsyslYrRBeFIlsi54AYsFGUuhmvrQ==", "license": "MIT", "dependencies": { "es-errors": "^1.3.0", - "object-inspect": "^1.13.3", - "side-channel-list": "^1.0.0", + "object-inspect": "^1.13.4", + "side-channel-list": "^1.0.1", "side-channel-map": "^1.0.1", "side-channel-weakmap": "^1.0.2" }, @@ -13078,31 +13067,6 @@ "node": ">= 14" } }, - "node_modules/socks-proxy-agent/node_modules/debug": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", - "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/socks-proxy-agent/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true, - "license": "MIT" - }, "node_modules/source-map": { "version": "0.6.1", "dev": true, @@ -14501,13 +14465,6 @@ "version": "1.0.2", "license": "MIT" }, - "node_modules/utils-merge": { - "version": "1.0.1", - "license": "MIT", - "engines": { - "node": ">= 0.4.0" - } - }, "node_modules/v8-to-istanbul": { "version": "9.0.1", "dev": true, @@ -15245,7 +15202,7 @@ "@sentry/cli": "^2.31.0", "@zip.js/zip.js": "^2.7.32", "c8": "^7.12.0", - "express": "^4.22.2", + "express": "^5.2.1", "jsdom": "^23.0.1", "promise-status-async": "^1.2.10", "tsx": "^4.19.0" diff --git a/resources/build/ci/sentry-control.inc.sh b/resources/build/ci/sentry-control.inc.sh index 9331152eed..aae674f8c9 100644 --- a/resources/build/ci/sentry-control.inc.sh +++ b/resources/build/ci/sentry-control.inc.sh @@ -12,7 +12,7 @@ function isSentryConfigured() { if [ -z "${SENTRY_AUTH_TOKEN-}" ] || [ -z "${SENTRY_ORG-}" ] || [ -z "${SENTRY_URL-}" ]; then - echo "WARNING: Sentry environment variables SENTRY_AUTH_TOKEN, SENTRY_ORG and SENTRY_URL must be configured." + builder_warn "WARNING: Sentry environment variables SENTRY_AUTH_TOKEN, SENTRY_ORG and SENTRY_URL must be configured." return 1 fi return 0 @@ -20,7 +20,7 @@ function isSentryConfigured() { function isSentryCliAvailable() { which sentry-cli > /dev/null && return 0 - echo "WARNING: sentry-cli could not be found. Skipping all sentry integration." + builder_warn "WARNING: sentry-cli could not be found. Skipping all sentry integration." return 1 } @@ -28,15 +28,35 @@ function makeSentryRelease() { if isSentryConfigured; then if isSentryCliAvailable; then # This version tag matches the repository version tag release@x.y.z - echo "Making a Sentry release for tag $KEYMAN_VERSION_GIT_TAG" + builder_echo "Making a Sentry release for tag $KEYMAN_VERSION_GIT_TAG" sentry-cli releases new -p keyman-android -p keyman-developer -p keyman-ios -p keyman-linux -p keyman-mac -p keyman-web -p keyman-windows $KEYMAN_VERSION_GIT_TAG - echo "Setting commits for release tag $KEYMAN_VERSION_GIT_TAG" + builder_echo "Setting commits for release tag $KEYMAN_VERSION_GIT_TAG" sentry-cli releases set-commits --auto $KEYMAN_VERSION_GIT_TAG - echo "Finalizing release tag $KEYMAN_VERSION_GIT_TAG" + builder_echo "Finalizing release tag $KEYMAN_VERSION_GIT_TAG" sentry-cli releases finalize "$KEYMAN_VERSION_GIT_TAG" fi fi } +# +# Upload sourcemaps to Sentry +# +# Parameters: +# 1: Directory containing sourcemaps to upload +# +function sentry_upload_web () { + local SOURCEMAP_DIR="$1" + if ! isSentryConfigured; then + builder_warn "Skipping Sentry upload: SENTRY_ORG and/or SENTRY_PROJECT are unset." + return + fi + + builder_echo "Uploading ${SOURCEMAP_DIR} to Sentry..." + + sentry-cli releases files "${KEYMAN_VERSION_GIT_TAG}" upload-sourcemaps --strip-common-prefix \ + "${SOURCEMAP_DIR}" --rewrite --ext js --ext map --ext ts + + builder_echo "Upload successful." +} diff --git a/resources/build/htm-link.lua b/resources/build/htm-link.lua index b2ed4fc45b..9a516da94e 100644 --- a/resources/build/htm-link.lua +++ b/resources/build/htm-link.lua @@ -8,7 +8,9 @@ function Link(elem) return pandoc.Link(elem.content, elem.target .. '.htm', elem.title, elem.attr) end end - return elem + -- target=_blank opens external links in browser + table.insert(elem.content, ' ↗️') + return pandoc.Link(elem.content, elem.target, 'This link opens in your web browser', { target = '_blank' }) end function isLocalLink(elem) diff --git a/resources/teamcity/ios/ios-actions.inc.sh b/resources/teamcity/ios/ios-actions.inc.sh index acf904fe0f..fb803aae89 100755 --- a/resources/teamcity/ios/ios-actions.inc.sh +++ b/resources/teamcity/ios/ios-actions.inc.sh @@ -3,13 +3,18 @@ ios_build() { builder_echo start "build" "Building KeymanEngine + Keyman for iOS" - # shellcheck disable=SC2154 - "${KEYMAN_ROOT}/ios/ci.sh" build + builder_launch /ios/ci.sh build builder_echo end "build" success "Finished building KeymanEngine + Keyman for iOS" } ios_capture_build_artifacts() { builder_echo start "prep-release" "Using prep-release script to capture build artifacts" - "${KEYMAN_ROOT}/ios/tools/prepRelease.sh" + builder_launch /ios/tools/prepRelease.sh builder_echo end "prep-release" success "Finished capturing build artifacts" } + +ios_publish_symbols() { + builder_echo start "publish to Sentry" "Publishing source map to Sentry" + builder_launch /ios/build.sh "publish-symbols" + builder_echo end "publish to Sentry" success "Finished publishing source map to Sentry" +} diff --git a/resources/teamcity/ios/keyman-ios-release.sh b/resources/teamcity/ios/keyman-ios-release.sh index 8942a9f135..15d09e5ef7 100755 --- a/resources/teamcity/ios/keyman-ios-release.sh +++ b/resources/teamcity/ios/keyman-ios-release.sh @@ -243,6 +243,7 @@ function do_build() { function do_publish() { _publish_to_downloads_keyman_com + ios_publish_symbols tc_upload_help "Keyman for iOS" ios if [[ "${KEYMAN_TIER}" == "stable" ]]; then diff --git a/web/ci.sh b/web/ci.sh index f9c4e4263d..30a9200cd7 100755 --- a/web/ci.sh +++ b/web/ci.sh @@ -15,6 +15,7 @@ THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")" . "${KEYMAN_ROOT}/resources/build/utils.inc.sh" . "${KEYMAN_ROOT}/resources/build/zip.inc.sh" . "${KEYMAN_ROOT}/resources/build/ci/pull-requests.inc.sh" +. "${KEYMAN_ROOT}/resources/build/ci/sentry-control.inc.sh" # This script runs from its own folder cd "${THIS_SCRIPT_PATH}" @@ -42,21 +43,6 @@ builder_parse "$@" KEYMAN_TIER=$(cat ../TIER.md) BUILD_NUMBER=$(cat ../VERSION.md) -function web_sentry_upload () { - if [[ -z "${SENTRY_ORG:-}" ]] || [[ -z "${SENTRY_PROJECT:-}" ]]; then - echo "Skipping Sentry upload: SENTRY_ORG and/or SENTRY_PROJECT are unset." - return - fi - - echo "Uploading $1 to Sentry..." - - # --strip-common-prefix does not take an argument, unlike --strip-prefix. It auto-detects - # the most common prefix instead. - sentry-cli releases files "${KEYMAN_VERSION_GIT_TAG}" upload-sourcemaps --strip-common-prefix "$1" \ - --rewrite --ext js --ext map --ext ts - echo "Upload successful." -} - function build_action() { # Build step: since CI builds start (and should start) from scratch, run the following # three actions: @@ -73,11 +59,10 @@ function build_action() { for sourcemap in "${KEYMAN_ROOT}/common/web/sentry-manager/build/lib/"*.map; do node "${KEYMAN_ROOT}/web/build/tools/building/sourcemap-root/index.js" null "${sourcemap}" --clean done - web_sentry_upload "${KEYMAN_ROOT}/common/web/sentry-manager/build/lib/" + sentry_upload_web "${KEYMAN_ROOT}/common/web/sentry-manager/build/lib/" # And, of course, the main build-products too - web_sentry_upload "${KEYMAN_ROOT}/web/build/app/webview/release/" - web_sentry_upload "${KEYMAN_ROOT}/web/build/publish/release/" + sentry_upload_web "${KEYMAN_ROOT}/web/build/publish/release/" fi } diff --git a/web/package.json b/web/package.json index 5ec0135add..ed8c3505b4 100644 --- a/web/package.json +++ b/web/package.json @@ -107,7 +107,7 @@ "@sentry/cli": "^2.31.0", "@zip.js/zip.js": "^2.7.32", "c8": "^7.12.0", - "express": "^4.22.2", + "express": "^5.2.1", "jsdom": "^23.0.1", "promise-status-async": "^1.2.10", "tsx": "^4.19.0" diff --git a/web/src/app/browser/src/context/pageIntegrationHandlers.ts b/web/src/app/browser/src/context/pageIntegrationHandlers.ts index eebf0ebde5..a17755d9ea 100644 --- a/web/src/app/browser/src/context/pageIntegrationHandlers.ts +++ b/web/src/app/browser/src/context/pageIntegrationHandlers.ts @@ -159,26 +159,6 @@ export class PageIntegrationHandlers { return false; }; - - private _WindowLoad: (e: Event) => void = () => { - // Always return to top of page after a page reload - document.body.scrollTop=0; - if(typeof document.documentElement != 'undefined') { - document.documentElement.scrollTop=0; - } - } - - /** - * Function _WindowUnload - * Scope Private - * Description Remove handlers before detaching KMW window - */ - private _WindowUnload: () => void = () => { - // Future note: should restrict this to anything for the corresponding document if on a - // child iframe, not the whole engine. - this.engine.shutdown(); - } - private attachHandlers() { const eventTracker = this.domEventTracker; const device = this.engine.config.hostDevice; @@ -202,9 +182,6 @@ export class PageIntegrationHandlers { eventTracker.attachDOMEvent(docBody, 'touchend', this.touchEndActivationHandler, false); } - eventTracker.attachDOMEvent(window, 'load', this._WindowLoad, false); - eventTracker.attachDOMEvent(window, 'unload', this._WindowUnload,false); - eventTracker.attachDOMEvent(document, 'keyup', this.engine.hotkeyManager._Process, false); } @@ -229,9 +206,6 @@ export class PageIntegrationHandlers { this.mobilePageTrailer?.parentElement.removeChild(this.mobilePageTrailer); } - eventTracker.detachDOMEvent(window, 'load', this._WindowLoad, false); - eventTracker.detachDOMEvent(window, 'unload', this._WindowUnload,false); - eventTracker.detachDOMEvent(document, 'keyup', this.engine.hotkeyManager._Process, false); } } \ No newline at end of file diff --git a/web/src/app/browser/src/contextManager.ts b/web/src/app/browser/src/contextManager.ts index 9598227110..d1d428c1ae 100644 --- a/web/src/app/browser/src/contextManager.ts +++ b/web/src/app/browser/src/contextManager.ts @@ -13,6 +13,7 @@ import { import { BrowserConfiguration } from './configuration.js'; import { FocusAssistant } from './context/focusAssistant.js'; +export const KeyboardCookieName = 'KeymanWeb_Keyboard'; export interface KeyboardCookie { current: string; } @@ -46,7 +47,7 @@ function setTargetTextDirection(elem: HTMLElement, activeKeyboard: Keyboard): vo export class ContextManager extends ContextManagerBase { private _activeKeyboard: KeyboardInfoPair; - private cookieManager = new CookieSerializer('KeymanWeb_Keyboard'); + private cookieManager = new CookieSerializer(KeyboardCookieName); readonly focusAssistant = new FocusAssistant(() => this.activeTextStore?.isForcingScroll()); readonly page: PageContextAttachment; private mostRecentTextStore: AbstractElementTextStore; @@ -231,7 +232,7 @@ export class ContextManager extends ContextManagerBase { } } - public setActiveTextStore(textStore: AbstractElementTextStore, sendEvents?: boolean) { + public setActiveTextStore(textStore: AbstractElementTextStore, sendEvents?: boolean): void { const previousTextStore = this.mostRecentTextStore; const originalTextStore = this.activeTextStore; // may differ, depending on focus state. @@ -409,6 +410,11 @@ export class ContextManager extends ContextManagerBase { * activates the keyboard if the specified control represents the * currently-active context. * + * If kbdId and langId are both null, the control will use the global + * keyboard. If both are the empty string, the control will use the + * system keyboard (on desktop), or the first installed keyboard (on + * touch devices). + * * This is the core method that backs * https://help.keyman.com/developer/engine/web/current-version/reference/core/setKeyboardForControl. * @param textStore @@ -531,8 +537,8 @@ export class ContextManager extends ContextManagerBase { this.engineConfig.alertHost?.wait(); // clear the wait message box, either way. - const message = (err as Error)?.message || - 'Sorry, the ' + keyboardId + ' keyboard for ' + languageCode + ' is not currently available.'; + + const message = `Activation of '${keyboardId}' failed: ${(err as Error)?.message ?? err?.toString() ?? 'unknown error'}`; if(err instanceof KeyboardScriptError) { // We get signaled about error log messages if the site is connected to our Sentry error reporting @@ -748,8 +754,8 @@ export class ContextManager extends ContextManagerBase { * Gets the 'saved keyboard' cookie value for the last keyboard used in the * iser's previous session. **/ - public getSavedKeyboardRaw(): string { - const cookie = new CookieSerializer('KeymanWeb_Keyboard'); + public getSavedKeyboardRaw(): string | null { + const cookie = new CookieSerializer(KeyboardCookieName); const v = cookie.load(decodeURIComponent); if(typeof(v.current) != 'string') { diff --git a/web/src/app/browser/src/index.ts b/web/src/app/browser/src/index.ts index 786f004de5..d41c76358c 100644 --- a/web/src/app/browser/src/index.ts +++ b/web/src/app/browser/src/index.ts @@ -2,7 +2,7 @@ * Keyman is copyright (C) SIL Global. MIT License. */ -export { ContextManager, KeyboardCookie } from "./contextManager.js"; +export { ContextManager, KeyboardCookie, KeyboardCookieName } from "./contextManager.js"; export { KeyboardDetails } from './keyboardDetails.js'; export { KeymanEngine } from './keymanEngine.js'; export { UIModule } from './uiModuleInterface.js'; diff --git a/web/src/app/browser/src/keymanEngine.ts b/web/src/app/browser/src/keymanEngine.ts index 8f1f7ac54c..9b56247cdd 100644 --- a/web/src/app/browser/src/keymanEngine.ts +++ b/web/src/app/browser/src/keymanEngine.ts @@ -315,14 +315,14 @@ export class KeymanEngine extends KeymanEngineBase('KeymanWeb_Keyboard'); + const v1=util.loadCookie(KeyboardCookieName); let kbdEnabledOnLoad=false; if(typeof(v1.current) != 'undefined') { kbdEnabledOnLoad = (v1.current.indexOf('---') < 0); @@ -483,12 +480,10 @@ if(!keyman) { } /** - * Function updateKeyboardList - * Scope Private - * Description Rebuild the UI and keyboard list + * Rebuild the UI and keyboard list **/ - readonly updateKeyboardList = () => { - if(!(keyman.initialized || this.initialized)) { + public readonly updateKeyboardList = () => { + if (!(keyman.initialized || this.initialized)) { return; //TODO: may want to restart the timer?? } @@ -563,10 +558,9 @@ if(!keyman) { // var _SelectedMenuItem; /** - * Function selecKbd - * Scope Private + * Select a keyboard from the drop down menu + * * @param {number} kbdIndex - * Description Select a keyboard from the drop down menu **/ private async selectKbd(kbdIndex: number): Promise { let name: string, languageCode: string; @@ -589,13 +583,12 @@ if(!keyman) { }; /** - * Function updateMenu - * Scope Private + * Updates the menu selection when a change is required + * * @param {string} kbdName * @param {?string=} lgCode - * Description Updates the menu selection when a change is required **/ - updateMenu(kbdName: string, lgCode: string) { + public updateMenu(kbdName: string, lgCode: string) { let _k=document.getElementById('KMWSel_$'); for(let i=0; i < this.keyboards.length; i++) { @@ -630,7 +623,7 @@ if(!keyman) { } } - get stylingCSS() { + private get stylingCSS() { return ` #KeymanWeb_KbdList { display: block; @@ -714,11 +707,9 @@ if(!keyman) { } /** - * Function createMenu - * Scope Private - * Description Create the drop down menu and populate with loaded KeymanWeb keyboards + * Create the drop down menu and populate with loaded KeymanWeb keyboards **/ - createMenu() { + private createMenu() { if(typeof(this.keyboardMenu) == 'undefined') { // I2403 - Allow toggle design to be loaded twice this.keyboardMenu = util.createElement('ul'); this.keyboardMenu.id='KeymanWeb_KbdList'; diff --git a/web/src/app/ui/kmwuitoolbar.ts b/web/src/app/ui/kmwuitoolbar.ts index f121bb66cd..709f02a155 100644 --- a/web/src/app/ui/kmwuitoolbar.ts +++ b/web/src/app/ui/kmwuitoolbar.ts @@ -1,7 +1,6 @@ -/*** - KeymanWeb 17.0 - Copyright 2019-2023 SIL International -***/ +/* + * Keyman is copyright (C) SIL Global. MIT License. + */ import type { KeymanEngine, KeyboardCookie, KeyboardDetails, UIModule } from 'keyman/app/browser'; @@ -1441,4 +1440,4 @@ if(!keyman) { // (may happen in unit testing) ui.initialize(); // equivalent to ui.Initialize() from the other UI modules } catch(ex){} -} \ No newline at end of file +} diff --git a/web/src/app/webview/src/contextManager.ts b/web/src/app/webview/src/contextManager.ts index 034f34a456..982c693e62 100644 --- a/web/src/app/webview/src/contextManager.ts +++ b/web/src/app/webview/src/contextManager.ts @@ -136,7 +136,7 @@ export class ContextManager extends ContextManagerBase { return this._activeKeyboard; } - activateKeyboardForTextStore(kbd: { keyboard: Keyboard, metadata: KeyboardStub }, textStore: TextStore) { + protected activateKeyboardForTextStore(kbd: { keyboard: Keyboard, metadata: KeyboardStub }, textStore: TextStore) { // `textStore` is irrelevant for `app/webview`, as it'll only ever use 'global' keyboard settings. // Clone the object to prevent accidental by-reference changes. diff --git a/web/src/engine/predictive-text/worker-thread/src/main/index.ts b/web/src/engine/predictive-text/worker-thread/src/main/index.ts index f23c7645a3..318256ba54 100644 --- a/web/src/engine/predictive-text/worker-thread/src/main/index.ts +++ b/web/src/engine/predictive-text/worker-thread/src/main/index.ts @@ -245,7 +245,7 @@ export class LMLayerWorker { // it serves as a wordbreaking token. if(autoInsert != '') { configuration.appendsWordbreaks = { - breakingMarks: [autoInsert, '.', ',', ';', ':', '?', '!'] + breakingMarks: [autoInsert, '.', ',', ';', ':', '?', '!', ' ', '\t', '\n'] }; } // else leave undefined (falsy) - it has unusual wordbreaking patterns, // so avoid further assumptions. @@ -267,7 +267,11 @@ export class LMLayerWorker { try { this._importScripts(url); } catch (err) { + // Does not catch errors thrown within the imported script. + // Does catch errors with the model script's file-path. this.error("Error occurred when attempting to load dictionary", err); + + // Remain in the model-unloaded state; the load attempt was unsuccessful. } } @@ -312,7 +316,14 @@ export class LMLayerWorker { this.state = { name: 'modelless', handleMessage: (payload) => { - // ...that message must have been 'load'! + // It is possible to remain in this state after a model loading error. + // In such cases, the hosting engine may signal a model-unload. + if (payload.message === 'unload') { + // We are already in a "model unloaded" state; no work needed! + return; + } + + // ...otherwise, that message must have been 'load'! if (payload.message !== 'load') { throw new Error(`invalid message; expected 'load' but got ${payload.message}`); } diff --git a/web/src/engine/predictive-text/worker-thread/src/main/predict-helpers.ts b/web/src/engine/predictive-text/worker-thread/src/main/predict-helpers.ts index 92691c8d20..5d58c5336a 100644 --- a/web/src/engine/predictive-text/worker-thread/src/main/predict-helpers.ts +++ b/web/src/engine/predictive-text/worker-thread/src/main/predict-helpers.ts @@ -1,3 +1,12 @@ +/* + * Keyman is copyright (C) SIL Global. MIT License. + * + * Created by jahorton on 2024-07-08. + * + * This file defines the many predictive-text engine's helper methods used for the + * overall process of text prediction. + */ + import * as models from '@keymanapp/models-templates'; import { KMWString } from 'keyman/common/web-utils'; import { LexicalModelTypes } from '@keymanapp/common-types'; @@ -72,11 +81,41 @@ export const CORRECTION_SEARCH_THRESHOLDS = { REPLACEMENT_SEARCH_THRESHOLD: 4 as const // e^-4 = 0.0183156388. Allows "80%" of an extra edit. } +/** + * Tracks common intermediate prediction data, such as its underlying probabilities and its similarity to the actual context. + */ +export interface PredictionMetadata { + /** + * How directly the prediction matches the current token in the context. + * + * This is determined later in the suggestion-analysis project and is not + * available upon initial construction of this type. + */ + matchLevel: SuggestionSimilarity; + + /** + * Text from the triggering input that should _not_ be affected by the + * prediction. + */ + preservationTransform: Transform; + /** + * Indicates the number of raw Damerau-Levenshtein edits represented by + * the correction, not including the substitution of sufficiently-likely + * neighbor fat-finger keys at each step. + */ + rawEditCount: number; + /** + * Indicates the codepoint length by which the current token will be + * extended when the Suggestion is applied. + */ + predictionLength: number; +} + /** * Collates information related to suggestions during the suggestion generation * process. */ -export type CorrectionPredictionTuple = { +export interface CorrectionPredictionTupleCore { /** * The potential Suggestion (or Keep) */ @@ -90,20 +129,19 @@ export type CorrectionPredictionTuple = { * by the keystroke-sequence + correction likelihood. */ totalProb: number; - /** - * How directly the prediction matches the current token in the context. - * - * This is determined later in the suggestion-analysis project and is not - * available upon initial construction of this type. - */ - matchLevel?: SuggestionSimilarity; - /** - * Text from the triggering input that should _not_ be affected by the - * prediction. - */ - preservationTransform?: Transform; }; +export interface CorrectionPredictionTuple extends CorrectionPredictionTupleCore { + /** + * Contains additional metadata about the prediction and its properties. + * + * This object will generally remain unset by the `predictFromCorrections` + * method, with its values set afterward a layer or two removed from that + * specific call. + */ + metadata: PredictionMetadata; +} + /** * An enum to be used when categorizing the level of similarity between * generated Suggestions and the actual text upon which a Suggestion is @@ -140,14 +178,20 @@ export enum SuggestionSimilarity { exact = 3 } -export function tupleDisplayOrderSort(a: CorrectionPredictionTuple, b: CorrectionPredictionTuple) { +export function tupleDisplayOrderSort( + a: CorrectionPredictionTuple, + b: CorrectionPredictionTuple +) { + const matchLevelA = a.metadata.matchLevel ?? 0; + const matchLevelB = b.metadata.matchLevel ?? 0; + // Similarity distance - const simDist = (b.matchLevel ?? 0) - (a.matchLevel ?? 0); - if(simDist != 0) { - return simDist; + const similarityDelta = matchLevelB - matchLevelA; + if(similarityDelta != 0) { + return similarityDelta; } - // Probability distance + // Probability delta - larger is better return b.totalProb - a.totalProb; } @@ -177,7 +221,7 @@ export async function correctAndEnumerateWithoutTraversals( revertableTransitionId?: number }> { const inputTransform = transformDistribution[0].sample; - let rawPredictions: CorrectionPredictionTuple[] = []; + let rawPredictions: CorrectionPredictionTupleCore[] = []; let predictionRoots: ProbabilityMass[]; @@ -212,13 +256,24 @@ export async function correctAndEnumerateWithoutTraversals( // Running in bulk over all suggestions, duplicate entries may be possible. rawPredictions = predictFromCorrections(lexicalModel, predictionRoots, context); - if(allowSpace) { - rawPredictions.forEach((entry) => entry.preservationTransform = inputTransform); - } + + const keyer = (text: string) => lexicalModel.toKey ? lexicalModel.toKey(text) : text; + const predictions: CorrectionPredictionTuple[] = rawPredictions.map((entry) => { + const preservationTransform = allowSpace ? inputTransform : null; + return { + ...entry, + metadata: { + preservationTransform, + matchLevel: SuggestionSimilarity.none, // will be overwritten later, + rawEditCount: 0, + predictionLength: KMWString.length(keyer(entry.prediction.sample.transform.insert)) - KMWString.length(keyer(entry.correction.sample)) + } + }; + }); return { postContextState: null, - rawPredictions: rawPredictions + rawPredictions: predictions }; } @@ -471,17 +526,19 @@ export function determineSuggestionRange( export function buildAndMapPredictions( transition: ContextTransition, tokenization: ContextTokenization, - // Originally, Readonly - but we only need these two components here. - match: Readonly<{matchString: string, totalCost: number}>, + // Originally, Readonly - but we only need these three components here. + match: Readonly<{matchString: string, totalCost: number, editCount: number}>, costFactor: number ): CorrectionPredictionTuple[] { const model = transition.final.model; + const keyer = (text: string) => model.toKey ? model.toKey(text) : text; // No matter the prediction, once we know the root of the prediction, we'll // always 'replace' the same amount of text. We can handle this before the // big 'prediction root' loop. const { predictionContext, correctionDeleteLeft, committedDeleteLeft } = determineSuggestionAlignment(transition, tokenization, model); + // --- to move into predictFromCorrections --- let correction = match.matchString; let rootCost = match.totalCost; @@ -496,13 +553,23 @@ export function buildAndMapPredictions( sample: correctionTransform, p: Math.exp(-rootCost * costFactor) }; + // -- end: "to move" -- // Worth considering: extend Traversal to allow direct prediction lookups? // let traversal = match.finalTraversal; // ... - let predictions = predictFromCorrections(model, [predictionRoot], predictionContext); - predictions.forEach((entry) => { - entry.preservationTransform = tokenization.taillessTrueKeystroke; + const rawPredictions = predictFromCorrections(model, [predictionRoot], predictionContext); + const predictions: CorrectionPredictionTuple[] = rawPredictions.map((entry) => { entry.prediction.sample.transform.deleteLeft += committedDeleteLeft; + + return { + ...entry, + metadata: { + preservationTransform: tokenization.taillessTrueKeystroke, + matchLevel: SuggestionSimilarity.none, // will be overwritten later + rawEditCount: match.editCount, + predictionLength: KMWString.length(keyer(entry.prediction.sample.transform.insert)) - KMWString.length(match.matchString) + } + }; }); return predictions; @@ -614,6 +681,7 @@ export async function correctAndEnumerate( */ const costFactor = (tokenization.tail.inputCount <= 1) ? ModelCompositor.SINGLE_CHAR_KEY_PROB_EXPONENT : 1; + // if costFactor > 1, penalize with bonus edit cost if we're not using the most likely transform! const predictions = buildAndMapPredictions(transition, tokenization, match, costFactor); // Only set 'best correction' cost when a correction ACTUALLY YIELDS predictions. @@ -649,7 +717,7 @@ export async function correctAndEnumerate( export function shouldStopSearchingEarly( bestCorrectionCost: number, currentCorrectionCost: number, - rawPredictions: CorrectionPredictionTuple[] + rawPredictions: CorrectionPredictionTupleCore[] ) { if(currentCorrectionCost >= bestCorrectionCost + CORRECTION_SEARCH_THRESHOLDS.MAX_SEARCH_THRESHOLD) { return true; @@ -659,10 +727,11 @@ export function shouldStopSearchingEarly( // Very useful for stopping 'sooner' when words reach a sufficient length. return true; } else { - // Sort the prediction list; we need them in descending order for the next check. - rawPredictions.sort(tupleDisplayOrderSort); + // Sort the prediction list; we need them in descending probability order + // for the next check. + rawPredictions.sort((a, b) => b.totalProb - a.totalProb); - // If the best suggestion from the search's current tier fails to beat the worst + // If the best result at the current state of the search fails to beat the worst // pending suggestion from previous tiers, assume all further corrections will // similarly fail to win; terminate the search-loop. if(rawPredictions[ModelCompositor.MAX_SUGGESTIONS-1].totalProb > Math.exp(-currentCorrectionCost)) { @@ -690,8 +759,8 @@ export function predictFromCorrections( lexicalModel: LexicalModel, corrections: ProbabilityMass[], context: Context -): CorrectionPredictionTuple[] { - let returnedPredictions: CorrectionPredictionTuple[] = []; +): CorrectionPredictionTupleCore[] { + let returnedPredictions: CorrectionPredictionTupleCore[] = []; const wordbreak = determineModelWordbreaker(lexicalModel); for(let correction of corrections) { @@ -707,14 +776,13 @@ export function predictFromCorrections( pair.sample.transform.id = correctionTransform.id; } - let tuple: CorrectionPredictionTuple = { + let tuple: CorrectionPredictionTupleCore = { prediction: pair, correction: { sample: correctionRoot, p: correctionProb }, - totalProb: pair.p * correctionProb, - matchLevel: SuggestionSimilarity.none + totalProb: pair.p * correctionProb }; return tuple; }); @@ -847,7 +915,7 @@ export function processSimilarity( if(keyed(tuple.correction.sample) == keyedPrefix) { if(predictedWord == truePrefix) { // Exact match: it's a perfect 'keep' suggestion. - tuple.matchLevel = SuggestionSimilarity.exact; + tuple.metadata.matchLevel = SuggestionSimilarity.exact; keepOption = toAnnotatedSuggestion(lexicalModel, tuple.prediction.sample, 'keep', models.QuoteBehavior.noQuotes); // Indicates that this suggestion exists directly within the lexical @@ -859,15 +927,15 @@ export function processSimilarity( keepOption = tuple.prediction.sample as Outcome; } else if(keyCased(predictedWord) == lowercasedPrefix) { // Case-insensitive match. No diacritic differences; the ONLY difference is casing. - tuple.matchLevel = SuggestionSimilarity.sameText; + tuple.metadata.matchLevel = SuggestionSimilarity.sameText; } else if(keyed(predictedWord) == keyedPrefix) { // Diacritic-insensitive / exact-key match. - tuple.matchLevel = SuggestionSimilarity.sameKey; + tuple.metadata.matchLevel = SuggestionSimilarity.sameKey; } else { - tuple.matchLevel = SuggestionSimilarity.none; + tuple.metadata.matchLevel = SuggestionSimilarity.none; } } else { - tuple.matchLevel = SuggestionSimilarity.none; + tuple.metadata.matchLevel = SuggestionSimilarity.none; } } @@ -932,7 +1000,12 @@ export function createDefaultKeep( sample: truePrefix, p: inputTransformProb * MAX_PROB }, - matchLevel: SuggestionSimilarity.exact + metadata: { + preservationTransform: null, + matchLevel: SuggestionSimilarity.exact, + rawEditCount: KMWString.length(truePrefix), + predictionLength: 0 + } }; } @@ -1007,7 +1080,10 @@ export function predictionAutoSelect(suggestionDistribution: CorrectionPredictio // Find the highest probability for any correction that led to a valid prediction. // No need to full-on re-sort everything, though. - const bestCorrection = suggestionDistribution.reduce((prev, current) => prev?.correction.p > current.correction.p ? prev : current, null).correction; + const bestCorrection = suggestionDistribution.reduce( + (prev, current) => prev?.correction.p > current.correction.p ? prev : current, + null + ).correction; if(bestCorrection.p > bestSuggestion.correction.p) { // Here, the best suggestion didn't come from the best correction. // Is it actually reasonable to auto-correct? We're probably just very @@ -1019,14 +1095,17 @@ export function predictionAutoSelect(suggestionDistribution: CorrectionPredictio // - such as replacing `cant` with `can't` if the latter is much more frequent - // we may wish to group matchLevel values below by 'mapping' them with an appropriate // function. (Both on the next line and within the reduce functor.) - const bestSuggestionTier = bestSuggestion.matchLevel; + const bestSuggestionTier = bestSuggestion.metadata.matchLevel; // compare best vs other probabilities of compatible tier. - const probSum = suggestionDistribution.reduce((accum, current) => { + const probSum = suggestionDistribution + .filter((s) => (s.metadata.predictionLength ?? 0) <= (bestSuggestion.metadata.predictionLength ?? 0)) + .filter((s) => (s.metadata.rawEditCount ?? 0) <= (bestSuggestion.metadata.rawEditCount ?? 0)) + .reduce((accum, current) => { // If the suggestion is from a different similarity tier, do not count it against // the required auto-select probability ratio threshold. That threshold should // only apply within the suggestion's tier. - return accum + (current.matchLevel == bestSuggestionTier ? current.totalProb : 0) + return accum + (current.metadata.matchLevel == bestSuggestionTier ? current.totalProb : 0) }, 0); const proportionOfBest = bestSuggestion.totalProb / probSum; if(proportionOfBest < AUTOSELECT_PROPORTION_THRESHOLD) { @@ -1076,9 +1155,9 @@ export function finalizeSuggestions( // from prior tokens! // // Note: may need adjustment if/when supporting phrase-level correction. - if(tuple.preservationTransform) { - const presDL = tuple.preservationTransform.deleteLeft; - const mergedTransform = models.buildMergedTransform(tuple.preservationTransform, prediction.sample.transform); + if(tuple.metadata.preservationTransform) { + const presDL = tuple.metadata.preservationTransform.deleteLeft; + const mergedTransform = models.buildMergedTransform(tuple.metadata.preservationTransform, prediction.sample.transform); // Any preserved delete-left is applied early because it directly affects the suggestion // root; we need to remove that preserved delete-left here. if(presDL > 0) { diff --git a/web/src/engine/src/attachment/pageContextAttachment.ts b/web/src/engine/src/attachment/pageContextAttachment.ts index 45c403c861..05f0759ae1 100644 --- a/web/src/engine/src/attachment/pageContextAttachment.ts +++ b/web/src/engine/src/attachment/pageContextAttachment.ts @@ -163,7 +163,7 @@ export class PageContextAttachment extends EventEmitter { * Call this method **once**, when the page is fully loaded, to attach to all page elements * eligible to serve as context for Keyman keyboard input. */ - install(manualAttach: boolean) { + public install(manualAttach: boolean) { // This field gets referenced by any non-design iframes detected during _SetupDocument. // Thus, we must initialize it now. this.manualAttach = manualAttach; @@ -186,15 +186,15 @@ export class PageContextAttachment extends EventEmitter { } /** - * Function setupElementAttachment - * Scope Private - * @param {Element} x An element from the page valid for KMW attachment - * Description Establishes the base KeymanWeb data for newly-attached elements. - * Does not establish input hooks, which are instead handled during enablement. + * Establishes the base KeymanWeb data for newly-attached elements. + * Does not establish input hooks, which are instead handled during enablement. + * + * @param {Element} x An element from the page valid for KMW attachment */ - setupElementAttachment(x: HTMLElement) { - // The `_kmwAttachment` property tag maintains all relevant KMW-maintained data regarding the element. - // It is disgarded upon de-attachment. + private setupElementAttachment(x: HTMLElement) { + // The `_kmwAttachment` property tag maintains all relevant + // KMW-maintained data regarding the element. It is disgarded upon + // de-attachment. if(x._kmwAttachment) { return; } else { @@ -214,26 +214,24 @@ export class PageContextAttachment extends EventEmitter { } /** - * Function clearElementAttachment - * Scope Private + * Clear element attachment + * * @param {Element} x An element from the page valid for KMW attachment - * Description Establishes the base KeymanWeb data for newly-attached elements. - * Does not establish input hooks, which are instead handled during enablement. */ - clearElementAttachment(x: HTMLElement) { + private clearElementAttachment(x: HTMLElement) { // We need to clear the object when de-attaching; helps prevent memory leaks. x._kmwAttachment = null; } /** - * Function isKMWInput - * Scope Private - * @param {Element} x An element from the page. - * @return {boolean} true if the element is viable for KMW attachment. - * Description Examines potential input elements to determine whether or not they are viable for KMW attachment. - * Also filters elements not supported for touch devices when device.touchable == true. + * Examines potential input elements to determine whether or not they + * are viable for KMW attachment. Also filters elements not supported + * for touch devices when device.touchable == true. + * + * @param {Element} x An element from the page. + * @return {boolean} true if the element is viable for KMW attachment. */ - isKMWInput(x: HTMLElement): boolean { + private isKMWInput(x: HTMLElement): boolean { if(x instanceof x.ownerDocument.defaultView.HTMLTextAreaElement) { return true; } else if(x instanceof x.ownerDocument.defaultView.HTMLInputElement) { @@ -270,12 +268,13 @@ export class PageContextAttachment extends EventEmitter { } /** - * Function isAttached - * Scope Private - * @param {Element} x An element from the page. - * @return {boolean} true if KMW is attached to the element, otherwise false. + * Determines if KMW is attached to the specified element. + * + * @param {Element} x An element from the page. + * @return {boolean} true if KMW is attached to the element, + * otherwise false. */ - isAttached(x: HTMLElement) { + public isAttached(x: HTMLElement) { if(x._kmwAttachment) { return true; } @@ -300,13 +299,14 @@ export class PageContextAttachment extends EventEmitter { } /** - * Function isKMWDisabled - * Scope Private - * @param {Element} x An element from the page. - * @return {boolean} true if the element's properties indicate a 'disabled' state. - * Description Examines attachable elements to determine their default enablement state. + * Examines attachable elements to determine their default enablement + * state. + * + * @param {Element} x An element from the page. + * @return {boolean} true if the element's properties indicate a + * 'disabled' state. */ - isKMWDisabled(x: HTMLElement): boolean { + private isKMWDisabled(x: HTMLElement): boolean { const c = x.className; // Exists for some HTMLElements, such as HTMLInputElement. @@ -321,75 +321,82 @@ export class PageContextAttachment extends EventEmitter { } /** - * Function enableInputElement - * Scope Private - * @param {Element} Pelem An element from the document to be enabled with full KMW handling. - * @param {boolean=} isAlias A flag that indicates if the element is a simulated input element for touch. - * Description Performs the basic enabling setup for one element and adds it to the inputList if it is an input element. - * Note that this method is called for both desktop and touch control routes; the touch route calls it from within - * enableTouchElement as it must first establish the simulated touch element to serve as the alias "input element" here. - * Note that the 'kmw-disabled' property is managed by the MutationObserver and by the surface API calls. + * Performs the basic enabling setup for the specified element and + * adds it to the inputList if it is an input element. + * + * @param {Element} elem An element from the document to be + * enabled with full KMW handling. + * + * Note that this method is called for both desktop and touch control + * routes; the touch route calls it from within enableTouchElement as + * it must first establish the simulated touch element to serve as the + * alias "input element" here. + * + * Note that the 'kmw-disabled' property is managed by the + * MutationObserver and by the surface API calls. */ - enableInputElement(Pelem: HTMLElement) { - if(!this.isKMWDisabled(Pelem)) { - if(Pelem instanceof Pelem.ownerDocument.defaultView.HTMLIFrameElement) { - this._AttachToIframe(Pelem); + private enableInputElement(elem: HTMLElement) { + if(!this.isKMWDisabled(elem)) { + if(elem instanceof elem.ownerDocument.defaultView.HTMLIFrameElement) { + this._AttachToIframe(elem); } else { - this.setupElementAttachment(Pelem); + this.setupElementAttachment(elem); - Pelem._kmwAttachment.inputMode = Pelem.inputMode ?? 'text'; + elem._kmwAttachment.inputMode = elem.inputMode ?? 'text'; this.disableInputModeObserver(); // ensures that the system keyboard doesn't show on mobile devices. - Pelem.inputMode = 'none'; + elem.inputMode = 'none'; this.enableInputModeObserver(); - Pelem.classList.add('keymanweb-font'); - this._inputList.push(Pelem); + elem.classList.add('keymanweb-font'); + this._inputList.push(elem); - this.emit('enabled', Pelem); + this.emit('enabled', elem); } } }; /** - * Function disableInputElement - * Scope Private - * @param {Element} Pelem An element from the document to be enabled with full KMW handling. - * @param {boolean=} isAlias A flag that indicates if the element is a simulated input element for touch. - * Description Inverts the process of enableInputElement, removing all event-handling from the element. - * Note that the 'kmw-disabled' property is managed by the MutationObserver and by the surface API calls. + * Inverts the process of enableInputElement, removing all event-handling + * from the element. + * + * @param {Element} elem An element from the document to be enabled + * with full KMW handling. + * + * Note that the 'kmw-disabled' property is managed by the + * MutationObserver and by the surface API calls. */ - disableInputElement(Pelem: HTMLElement) { - if(!Pelem) { + private disableInputElement(elem: HTMLElement) { + if(!elem) { return; } // Do NOT test for pre-disabledness - we also use this to fully detach without officially 'disabling' via kmw-disabled. - if((Pelem.ownerDocument.defaultView && Pelem instanceof Pelem.ownerDocument.defaultView.HTMLIFrameElement) || - Pelem instanceof HTMLIFrameElement) { - this._DetachFromIframe(Pelem); + if((elem.ownerDocument.defaultView && elem instanceof elem.ownerDocument.defaultView.HTMLIFrameElement) || + elem instanceof HTMLIFrameElement) { + this._DetachFromIframe(elem); } else { - if(this.isAttached(Pelem)) { - const intendedInputMode = Pelem._kmwAttachment?.inputMode; + if(this.isAttached(elem)) { + const intendedInputMode = elem._kmwAttachment?.inputMode; this.disableInputModeObserver(); // restores the last-known setting before KMW forced it to 'none'. // Refer to enableInputElement. - Pelem.inputMode = intendedInputMode; + elem.inputMode = intendedInputMode; this.enableInputModeObserver(); } - const cnIndex = Pelem.className.indexOf('keymanweb-font'); + const cnIndex = elem.className.indexOf('keymanweb-font'); if(cnIndex >= 0) { // See note about the alias below. - Pelem.className = Pelem.className.replace('keymanweb-font', '').trim(); + elem.className = elem.className.replace('keymanweb-font', '').trim(); } // Remove the element from our internal input tracking. - const index = this.inputList.indexOf(Pelem); + const index = this.inputList.indexOf(elem); if(index > -1) { this._inputList.splice(index, 1); } - this.emit('disabled', Pelem); + this.emit('disabled', elem); } return; @@ -404,49 +411,52 @@ export class PageContextAttachment extends EventEmitter { // said flag unnecessary. /** - * Function enableTouchElement - * Scope Private - * @param {Element} Pelem An input or textarea element from the page. - * @return {boolean} Returns true if it creates a simulated input element for Pelem; false if not. - * Description Creates a simulated input element for the specified INPUT or TEXTAREA, comprising: - * an outer DIV, matching the position, size and style of the base element - * a scrollable DIV within that outer element - * two SPAN elements within the scrollable DIV, to hold the text before and after the caret + * Creates a simulated input element for the specified INPUT or TEXTAREA, + * comprising: + * - an outer DIV, matching the position, size and style of the base element + * - a scrollable DIV within that outer element + * - two SPAN elements within the scrollable DIV, to hold the text + * before and after the caret * - * The left border of the second SPAN is flashed on and off as a visible caret + * The left border of the second SPAN is flashed on and off as a + * visible caret * - * Also ensures the element is registered on keymanweb's internal input list. + * Also ensures the element is registered on keymanweb's internal + * input list. + * + * @param {Element} elem An input or textarea element from the page. + * @return {boolean} Returns true if it creates a simulated input + * element for elem; false if not. */ - enableTouchElement(Pelem: HTMLElement) { - if(this.isKMWDisabled(Pelem)) { - this.emit('disabled', Pelem); + private enableTouchElement(elem: HTMLElement) { + if(this.isKMWDisabled(elem)) { + this.emit('disabled', elem); return false; } - if(!this.isAttached(Pelem)) { - this.setupElementAttachment(Pelem); + if(!this.isAttached(elem)) { + this.setupElementAttachment(elem); } // Set font for base element - this.enableInputElement(Pelem); + this.enableInputElement(elem); return true; } /** - * Function disableTouchElement - * Scope Private - * @param {Element} Pelem An input or textarea element from the page. - * Description Destroys the simulated input element for the specified INPUT or TEXTAREA and reverts - * back to desktop-style 'enablement' for the base control. + * Destroys the simulated input element for the specified INPUT or + * TEXTAREA and reverts back to desktop-style 'enablement' for the + * base control. + * @param {Element} elem An input or textarea element from the page. */ - disableTouchElement(Pelem: HTMLElement) { + private disableTouchElement(elem: HTMLElement) { // Do not check for the element being officially disabled - it's also used for detachment. - if(this.isAttached(Pelem)) { - const intendedInputMode = Pelem._kmwAttachment.inputMode; + if(this.isAttached(elem)) { + const intendedInputMode = elem._kmwAttachment.inputMode; this.disableInputModeObserver(); - Pelem.inputMode = intendedInputMode; + elem.inputMode = intendedInputMode; this.enableInputModeObserver(); } } @@ -484,30 +494,29 @@ export class PageContextAttachment extends EventEmitter { }; /** - * Function _AttachToIframe - * Scope Private - * @param {Element} Pelem IFrame to which KMW will be attached - * Description Attaches KeymanWeb to IFrame + * Attaches KeymanWeb to IFrame + * + * @param {Element} elem IFrame to which KMW will be attached */ - _AttachToIframe(Pelem: HTMLIFrameElement) { + private _AttachToIframe(elem: HTMLIFrameElement) { try { - const Lelem=Pelem.contentWindow.document; + const Lelem=elem.contentWindow.document; /* editable Iframe */ if(Lelem) { if(Lelem.designMode.toLowerCase() == 'on') { // Set up a reference alias; the internal document will need the same attachment info! - this.setupElementAttachment(Pelem); - Lelem.body._kmwAttachment = Pelem._kmwAttachment; + this.setupElementAttachment(elem); + Lelem.body._kmwAttachment = elem._kmwAttachment; - this._inputList.push(Pelem); - this.emit('enabled', Pelem); + this._inputList.push(elem); + this.emit('enabled', elem); } else { // If already attached, do not attempt to attach again. if(this.embeddedPageContexts.filter((context) => context.document == Lelem).length == 0) { // Lelem is the IFrame's internal document; set 'er up! const embeddedPageAttachment = new PageContextAttachment(Lelem, { ...this.options, - owner: Pelem + owner: elem }); this.embeddedPageContexts.push(embeddedPageAttachment); @@ -525,24 +534,23 @@ export class PageContextAttachment extends EventEmitter { } /** - * Function _DetachFromIframe - * Scope Private - * @param {Element} Pelem IFrame to which KMW will be attached - * Description Detaches KeymanWeb from an IFrame + * Detaches KeymanWeb from an IFrame + * + * @param {Element} elem IFrame to which KMW will be attached */ - _DetachFromIframe(Pelem: HTMLIFrameElement) { + private _DetachFromIframe(elem: HTMLIFrameElement) { const detachFromDesignIframe = () => { - this.clearElementAttachment(Pelem); + this.clearElementAttachment(elem); - const index = this._inputList.indexOf(Pelem); + const index = this._inputList.indexOf(elem); if(index != -1) { this._inputList.splice(index, 1); } - this.emit('disabled', Pelem); + this.emit('disabled', elem); } try { - const Lelem=Pelem.contentWindow.document; + const Lelem=elem.contentWindow.document; /* editable Iframe */ if(Lelem) { if(Lelem.designMode.toLowerCase() == 'on') { @@ -571,7 +579,7 @@ export class PageContextAttachment extends EventEmitter { } catch(err) { // If we were previously attached but the content doc/window have been unloaded, // we can at least address attachment via the attachment object. - if(Pelem._kmwAttachment) { + if(elem._kmwAttachment) { detachFromDesignIframe(); } @@ -581,122 +589,117 @@ export class PageContextAttachment extends EventEmitter { } /** - * Function attachToControl - * Scope Public - * @param {Element} Pelem Element to which KMW will be attached - * Description Attaches KMW to control (or IFrame) + * Attaches KMW to control (or IFrame) + * + * @param {Element} elem Element to which KMW will be attached */ - attachToControl(Pelem: HTMLElement) { + public attachToControl(elem: HTMLElement) { const touchable = this.device.touchable; // Exception for IFrame elements, in case of async loading issues. (Fixes fun iframe loading bug with Chrome.) - if(this.isAttached(Pelem) && !(Pelem instanceof Pelem.ownerDocument.defaultView.HTMLIFrameElement)) { + if(this.isAttached(elem) && !(elem instanceof elem.ownerDocument.defaultView.HTMLIFrameElement)) { return; // We're already attached. } - if(this.isKMWInput(Pelem)) { - if(this.isKMWDisabled(Pelem)) { + if(this.isKMWInput(elem)) { + if(this.isKMWDisabled(elem)) { // Future improvement - go ahead and attach, but in disabled state? // Can't use `enableControl` later without that... or without the page // directly manipulating `kmw-disabled`, anyway. // Note: this idea may require some shuffling of iframe-related handling // to handle everything cleanly. - this.emit('disabled', Pelem); + this.emit('disabled', elem); } else { if(touchable) { - this.enableTouchElement(Pelem); + this.enableTouchElement(elem); } else { - this.enableInputElement(Pelem); + this.enableInputElement(elem); } } } else if(touchable) { // Maybe an 'invalid' instead? - this.emit('disabled', Pelem); + this.emit('disabled', elem); } } /** - * Function detachFromControl - * Scope Public - * @param {Element} Pelem Element from which KMW will detach - * Description Detaches KMW from a control (or IFrame) + * Detaches KMW from a control (or IFrame) + * + * @param {Element} elem Element from which KMW will detach */ - detachFromControl(Pelem: HTMLElement) { - if(!(this.isAttached(Pelem) || Pelem instanceof Pelem.ownerDocument.defaultView.HTMLIFrameElement)) { + public detachFromControl(elem: HTMLElement) { + if(!(this.isAttached(elem) || elem instanceof elem.ownerDocument.defaultView.HTMLIFrameElement)) { return; // We never were attached. } // #1 - if element is enabled, disable it. But don't manipulate the 'kmw-disabled' tag. - if(this.isKMWInput(Pelem)) { + if(this.isKMWInput(elem)) { // Is it already disabled? - if(!this.isKMWDisabled(Pelem)) { - this._DisableControl(Pelem); + if(!this.isKMWDisabled(elem)) { + this._DisableControl(elem); } } // #2 - clear attachment data. - this.clearElementAttachment(Pelem); + this.clearElementAttachment(elem); } /** - * Function _DisableControl - * Scope Private - * @param {Element} Pelem Element to be disabled - * Description Disable KMW control element + * Disable KMW control element + * + * @param {Element} elem Element to be disabled */ - _DisableControl(Pelem: HTMLElement) { + private _DisableControl(elem: HTMLElement) { // Only operate on attached elements! Non-design-mode IFrames don't get attachment markers, so we check them specifically instead. - if(this.isAttached(Pelem) || Pelem instanceof Pelem.ownerDocument.defaultView.HTMLIFrameElement) { + if(this.isAttached(elem) || elem instanceof elem.ownerDocument.defaultView.HTMLIFrameElement) { if(this.device.touchable) { - this.disableTouchElement(Pelem); + this.disableTouchElement(elem); } this.listInputs(); // Fix up our internal input ordering scheme. - this.disableInputElement(Pelem); + this.disableInputElement(elem); } } /** - * Function _EnableControl - * Scope Private - * @param {Element} Pelem Element to be enabled - * Description Enable KMW control element + * Enable KMW control element + * + * @param {Element} elem Element to be enabled */ - _EnableControl(Pelem: HTMLElement) { - if(this.isAttached(Pelem)) { // Only operate on attached elements! + private _EnableControl(elem: HTMLElement) { + if(this.isAttached(elem)) { // Only operate on attached elements! if(this.device.touchable) { - this.enableTouchElement(Pelem); + this.enableTouchElement(elem); } else { - this.enableInputElement(Pelem); + this.enableInputElement(elem); } this.listInputs(); - } else if(nestedInstanceOf(Pelem, "HTMLIFrameElement")) { + } else if(nestedInstanceOf(elem, "HTMLIFrameElement")) { // Future fix idea for this case: when disabling a normal-iframe, keep the child instance. // Just call 'shutdown' on it. Then, re-'install' here. // Current architecture unfortunately conflates 'enable' and 'detach' for iframes, though. :( // Should be 'easy enough' to address if and when the time comes. // But for now, this'll keep things smoothed over. - this._AttachToIframe(Pelem as HTMLIFrameElement); + this._AttachToIframe(elem as HTMLIFrameElement); } } /** - * Function disableControl - * Scope Public - * @param {Element} Pelem Element to be disabled - * Description Disables a KMW control element + * Disables a KMW control element + * + * @param {Element} elem Element to be disabled */ - disableControl(Pelem: HTMLElement) { - if(!this.isAttached(Pelem)) { - console.warn("KeymanWeb is not attached to element " + Pelem); + public disableControl(elem: HTMLElement) { + if(!this.isAttached(elem)) { + console.warn("KeymanWeb is not attached to element " + elem); } - const cn = Pelem.className; + const cn = elem.className; if(cn.indexOf('kmw-disabled') < 0) { // if not already explicitly disabled... - Pelem.className = cn ? cn + ' kmw-disabled' : 'kmw-disabled'; + elem.className = cn ? cn + ' kmw-disabled' : 'kmw-disabled'; } // The rest is triggered within MutationObserver code. @@ -704,22 +707,20 @@ export class PageContextAttachment extends EventEmitter { } /** - * Function enableControl - * Scope Public - * @param {Element} Pelem Element to be disabled - * Description Disables a KMW control element + * Enables a KMW control element + * @param {Element} elem Element to be enabled */ - enableControl(Pelem: HTMLElement) { + public enableControl(elem: HTMLElement) { // Current architecture unfortunately conflates 'enable' and 'detach' for iframes, so a // disabled iframe appears detached. - if(!this.isAttached(Pelem) && !nestedInstanceOf(Pelem, "HTMLIFrameElement")) { - console.warn("KeymanWeb is not attached to element " + Pelem); + if(!this.isAttached(elem) && !nestedInstanceOf(elem, "HTMLIFrameElement")) { + console.warn("KeymanWeb is not attached to element " + elem); } - const cn = Pelem.className; + const cn = elem.className; const tagIndex = cn.indexOf('kmw-disabled'); if(tagIndex >= 0) { // if already explicitly disabled... - Pelem.className = cn.replace('kmw-disabled', '').trim(); + elem.className = cn.replace('kmw-disabled', '').trim(); } // The rest is triggered within MutationObserver code. @@ -729,7 +730,7 @@ export class PageContextAttachment extends EventEmitter { // Create an ordered list of all text and search input elements and textarea elements // except any tagged with class 'kmw-disabled' // TODO: email and url types should perhaps use default keyboard only - listInputs() { + private listInputs() { const eList: SortableInput[]=[]; const t1=document.getElementsByTagName('input'); const t2=document.getElementsByTagName('textarea'); @@ -773,7 +774,7 @@ export class PageContextAttachment extends EventEmitter { * * @param {number|boolean} bBack Direction to move (0 or 1) */ - findNeighboringInput(activeBase: HTMLElement, bBack: number|boolean) { + public findNeighboringInput(activeBase: HTMLElement, bBack: number|boolean) { let i: number; const t=this.sortedInputs; @@ -805,28 +806,30 @@ export class PageContextAttachment extends EventEmitter { /** - * Function _GetDocumentEditables - * Scope Private - * @param {Element} Pelem HTML element - * @return {Array} A list of potentially-editable controls. Further filtering [as with isKMWInput() and - * isKMWDisabled()] is required. + * Get a list of all potentially-editable controls within the + * specified element. + * + * @param {Element} elem HTML element + * @return {Array} A list of potentially-editable controls. + * Further filtering [as with isKMWInput() + * and isKMWDisabled()] is required. */ - private _GetDocumentEditables(Pelem: HTMLElement): (HTMLElement)[] { + private _GetDocumentEditables(elem: HTMLElement): (HTMLElement)[] { let possibleInputs: (HTMLElement)[] = []; // Document.ownerDocument === null, so we better check that it's not null before proceeding. - if(Pelem.ownerDocument && Pelem instanceof Pelem.ownerDocument.defaultView.HTMLElement) { - const dv = Pelem.ownerDocument.defaultView; + if(elem.ownerDocument && elem instanceof elem.ownerDocument.defaultView.HTMLElement) { + const dv = elem.ownerDocument.defaultView; - if(Pelem instanceof dv.HTMLInputElement || Pelem instanceof dv.HTMLTextAreaElement) { - possibleInputs.push(Pelem); - } else if(Pelem instanceof dv.HTMLIFrameElement) { - possibleInputs.push(Pelem); + if(elem instanceof dv.HTMLInputElement || elem instanceof dv.HTMLTextAreaElement) { + possibleInputs.push(elem); + } else if(elem instanceof dv.HTMLIFrameElement) { + possibleInputs.push(elem); } } // Constructing it like this also allows for individual element filtering for the auto-attach MutationObserver without errors. - if(Pelem.getElementsByTagName) { + if(elem.getElementsByTagName) { /** * Function LiTmp * Scope Private @@ -835,7 +838,7 @@ export class PageContextAttachment extends EventEmitter { * Description Local function to get list of editable controls */ const LiTmp = function(_colon: string): HTMLElement[] { - return arrayFromNodeList(Pelem.getElementsByTagName(_colon)); + return arrayFromNodeList(elem.getElementsByTagName(_colon)); }; // Note that isKMWInput() will block IFRAME elements as necessary for touch-based devices. @@ -843,25 +846,26 @@ export class PageContextAttachment extends EventEmitter { } // Not all active browsers may support the method, but only those that do would work with contenteditables anyway. - if(Pelem.querySelectorAll) { - possibleInputs = possibleInputs.concat(arrayFromNodeList(Pelem.querySelectorAll('[contenteditable]'))); + if(elem.querySelectorAll) { + possibleInputs = possibleInputs.concat(arrayFromNodeList(elem.querySelectorAll('[contenteditable]'))); } - if(Pelem.ownerDocument && Pelem instanceof Pelem.ownerDocument.defaultView.HTMLElement && Pelem.isContentEditable) { - possibleInputs.push(Pelem); + if(elem.ownerDocument && elem instanceof elem.ownerDocument.defaultView.HTMLElement && elem.isContentEditable) { + possibleInputs.push(elem); } return possibleInputs; } /** - * Function _SetupDocument - * Scope Private - * @param {Element} Pelem - the root element of a document, including IFrame documents. - * Description Used to automatically attach KMW to editable controls, regardless of control path. + * Automatically attach KMW to editable controls, regardless of + * control path. + * + * @param {Element} elem the root element of a document, including + * IFrame documents. */ - private _SetupDocument(Pelem: HTMLElement) { // I1961 - const possibleInputs = this._GetDocumentEditables(Pelem); + private _SetupDocument(elem: HTMLElement) { // I1961 + const possibleInputs = this._GetDocumentEditables(elem); for(let Li = 0; Li < possibleInputs.length; Li++) { // It knows how to handle pre-loaded iframes appropriately. @@ -870,14 +874,15 @@ export class PageContextAttachment extends EventEmitter { } /** - * Function _ClearDocument - * Scope Private - * @param {Element} Pelem - the root element of a document, including IFrame documents. - * Description Used to automatically detach KMW from editable controls, regardless of control path. - * Mostly used to clear out all controls of a detached IFrame. + * Automatically detach KMW from editable controls, regardless of + * control path. Mostly used to clear out all controls of a detached + * IFrame. + * + * @param {Element} elem the root element of a document, including + * IFrame documents. */ - private _ClearDocument(Pelem: HTMLElement) { // I1961 - const possibleInputs = this._GetDocumentEditables(Pelem); + private _ClearDocument(elem: HTMLElement) { // I1961 + const possibleInputs = this._GetDocumentEditables(elem); for(let Li = 0; Li < possibleInputs.length; Li++) { // It knows how to handle pre-loaded iframes appropriately. @@ -886,7 +891,13 @@ export class PageContextAttachment extends EventEmitter { } - _EnablementMutationObserverCore = (mutations: MutationRecord[]) => { + /** + * Callback function for the MutationObserver that enables or disables + * the control if a change is detected controls. + * + * @param mutations + */ + private _EnablementMutationObserverCore = (mutations: MutationRecord[]) => { for(let i=0; i < mutations.length; i++) { const mutation = mutations[i]; @@ -919,7 +930,14 @@ export class PageContextAttachment extends EventEmitter { } }; - _AutoAttachObserverCore = (mutations: MutationRecord[]) => { + /** + * Callback handler for the MutationObserver which handles the + * auto-attach lifecycle - when elements appear in the DOM, KMW attaches + * to them; when they are removed, KMW detaches from them. + * + * @param mutations + */ + private _AutoAttachObserverCore = (mutations: MutationRecord[]) => { let inputElementAdditions: HTMLElement[] = []; let inputElementRemovals: HTMLElement[] = []; @@ -999,24 +1017,23 @@ export class PageContextAttachment extends EventEmitter { }; /** - * Function _MutationAdditionObserved - * Scope Private - * @param {Element} Pelem A page input, textarea, or iframe element. - * Description Used by the MutationObserver event handler to properly setup any elements dynamically added to the document post-initialization. + * Properly setup any elements dynamically added to the document + * post-initialization. Used by the MutationObserver event handler. * + * @param {Element} elem A page input, textarea, or iframe element. */ - _MutationAdditionObserved = (Pelem: HTMLElement) => { - if(Pelem instanceof Pelem.ownerDocument.defaultView.HTMLIFrameElement) { + private _MutationAdditionObserved = (elem: HTMLElement) => { + if(elem instanceof elem.ownerDocument.defaultView.HTMLIFrameElement) { //Problem: the iframe is loaded asynchronously, and we must wait for it to load fully before hooking in. const attachFunctor = () => { // Triggers at the same time as iframe's onload property, after its internal document loads. // Provide a minor delay to allow 'load' event handlers to set the design-mode property. window.setTimeout(() => { - this.attachToControl(Pelem); + this.attachToControl(elem); }, 1); }; - Pelem.addEventListener('load', attachFunctor); + elem.addEventListener('load', attachFunctor); // The following block breaks for design-mode iframes, at least in Chrome; a blank document may exist // before the load of the desired actual document. @@ -1031,7 +1048,7 @@ export class PageContextAttachment extends EventEmitter { // window.setTimeout(attachFunctor, 1); // } } else { - this.attachToControl(Pelem); + this.attachToControl(elem); } } @@ -1041,7 +1058,7 @@ export class PageContextAttachment extends EventEmitter { } // To be called by the object responsible for webpage-integration. - initMutationObservers(document: Document, manualAttach: boolean) { + private initMutationObservers(document: Document, manualAttach: boolean) { if(typeof MutationObserver == 'function') { const observationTarget = document.querySelector('body'); let observationConfig: MutationObserverInit; @@ -1066,13 +1083,13 @@ export class PageContextAttachment extends EventEmitter { } } - enableInputModeObserver() { + private enableInputModeObserver() { const observationTarget = document.querySelector('body'); const observationConfig = { subtree: true, attributes: true, attributeFilter: ['inputmode'] }; this.inputModeObserver?.observe(observationTarget, observationConfig); } - disableInputModeObserver() { + private disableInputModeObserver() { this.inputModeObserver?.disconnect(); } @@ -1082,7 +1099,7 @@ export class PageContextAttachment extends EventEmitter { * * @return {string} */ - getBaseFont() { + private getBaseFont() { const ipInput = document.getElementsByTagName('input'); const ipTextArea = document.getElementsByTagName('textarea'); let n=0, fs: string; @@ -1135,8 +1152,8 @@ export class PageContextAttachment extends EventEmitter { * @param {Object} kfd KFont font descriptor * @return {string} * - **/ - buildAttachmentFontStyle(keyboardFontDescriptor: InternalKeyboardFont): string { + */ + private buildAttachmentFontStyle(keyboardFontDescriptor: InternalKeyboardFont): string { const kfd = keyboardFontDescriptor; // Get name of font to be applied @@ -1177,7 +1194,7 @@ export class PageContextAttachment extends EventEmitter { return s; } - setAttachmentFont( + public setAttachmentFont( keyboardFontDescriptor: InternalKeyboardFont, fontRoot: string, os: DeviceSpec.OperatingSystem @@ -1190,7 +1207,7 @@ export class PageContextAttachment extends EventEmitter { // our child instances of this class. (via `this.embeddedPageContexts`) } - shutdown() { + public shutdown() { try { this.enablementObserver?.disconnect(); this.attachmentObserver?.disconnect(); diff --git a/web/src/engine/src/main/contextManagerBase.ts b/web/src/engine/src/main/contextManagerBase.ts index e9ddd9a18a..931c18c039 100644 --- a/web/src/engine/src/main/contextManagerBase.ts +++ b/web/src/engine/src/main/contextManagerBase.ts @@ -248,7 +248,7 @@ export abstract class ContextManagerBase const wasNull = !this.activeKeyboard; // If there was a previous activation attempt set and still active for the specified keyboard textStore, - // cancel it. For exmaple, if the user selects a preloaded keyboard after having tried to select one + // cancel it. For example, if the user selects a preloaded keyboard after having tried to select one // still async-loading, we should go with the later setting - the preloaded one. this.findAndPopActivation(this.currentKeyboardSrcTextStore()); @@ -314,31 +314,25 @@ export abstract class ContextManagerBase keyboardId: string, languageCode?: string ): {keyboard: Promise, metadata: KeyboardStub} { + if (!keyboardId) { + return { + keyboard: Promise.resolve(null), + metadata: null + } + } + // Set default language code languageCode ||= ''; // Check that the saved keyboard is currently registered - let requestedStub: KeyboardStub = null; - if(keyboardId) { - requestedStub = this.keyboardCache.getStub(keyboardId, languageCode); - } else { - languageCode == ''; - } - + const requestedStub: KeyboardStub = this.keyboardCache.getStub(keyboardId, languageCode); if(!requestedStub) { - if(keyboardId) { - const availableStubList = this.keyboardCache.getStubList().map(stub => `${stub.KI}@${stub.KLC}`); - throw new Error(`No matching stub has been registered for keyboard ${keyboardId}. Available stubs: ${JSON.stringify(availableStubList)}`); - } else { - return { - keyboard: Promise.resolve(null), - metadata: null - } - } + const availableStubList = this.keyboardCache.getStubList().map(stub => `${stub.KI}@${stub.KLC}`); + throw new Error(`No matching stub has been registered for keyboard ${keyboardId}. Available stubs: ${JSON.stringify(availableStubList)}`); } // Check if current keyboard matches requested keyboard, but not (necessarily) stub - if (this.activeKeyboard?.metadata && keyboardId == this.activeKeyboard.metadata.id) { + if (keyboardId == this.activeKeyboard?.metadata?.id) { const {keyboard} = this.activeKeyboard; // In this case, the keyboard is loaded; just update the stub. @@ -349,61 +343,61 @@ export abstract class ContextManagerBase } // Determine if the keyboard was previously loaded but is not active; use the cached, pre-loaded version if so. - let keyboard: Keyboard; - if(keyboard = this.keyboardCache.getKeyboardForStub(requestedStub)) { + const keyboard: Keyboard = this.keyboardCache.getKeyboardForStub(requestedStub); + if (keyboard) { return { keyboard: Promise.resolve(keyboard), metadata: requestedStub }; - } else { - // It's async time - the keyboard is not preloaded within the cache. Use the stub's data to load it. + } - // `beforeKeyboardChange` - first call - this.emit('beforekeyboardchange', requestedStub); + // It's async time - the keyboard is not preloaded within the cache. Use the stub's data to load it. - const defermentPromise = this.engineConfig.deferForInitialization.then(() => { - // Provide a Promise for completion of the async load process. - const completionPromise = new ManagedPromise(); - this.emit('keyboardasyncload', requestedStub, completionPromise.corePromise); + // `beforeKeyboardChange` - first call + this.emit('beforekeyboardchange', requestedStub); - const keyboardPromise = this.keyboardCache.fetchKeyboard(requestedStub.KI); - const timeoutPromise = new Promise((resolve, reject) => { - const timeoutMsg = `Sorry, the ${requestedStub.name} keyboard for ${requestedStub.langName} is not currently available.`; - window.setTimeout(() => reject(new Error(timeoutMsg)), ContextManagerBase.TIMEOUT_THRESHOLD); - }); + const defermentPromise = this.engineConfig.deferForInitialization.then(() => { + // Provide a Promise for completion of the async load process. + const completionPromise = new ManagedPromise(); + this.emit('keyboardasyncload', requestedStub, completionPromise.corePromise); - const combinedPromise = Promise.race([keyboardPromise, timeoutPromise]); - - // Ensure the async-load Promise completes properly. - combinedPromise.then(() => { - completionPromise.resolve(null); - // Prevent any 'unhandled Promise rejection' events that may otherwise occur from the timeout promise. - timeoutPromise.catch(() => {}); - }); - combinedPromise.catch((err) => { - completionPromise.resolve(err); - throw err; - }); - - return combinedPromise; + const keyboardPromise = this.keyboardCache.fetchKeyboard(requestedStub.KI); + const timeoutPromise = new Promise((resolve, reject) => { + const timeoutMsg = `Download of ${requestedStub.KI} for language ${requestedStub.langId} timed out.`; + window.setTimeout(() => reject(new Error(timeoutMsg)), ContextManagerBase.TIMEOUT_THRESHOLD); }); - // Now the fun part: note the original call's parameters as a pending activation. - const promise = this.deferredKeyboardActivation(defermentPromise, requestedStub, this.currentKeyboardSrcTextStore()); - return { - keyboard: promise.then(async (activation) => { - // Is the activation we requested still pending, or was it cancelled in favor of a - // different activation in some manner? - if(!activation) { - // If the user chose to load a different keyboard afterward that would affect the same - // textStore, the activation is no longer valid. - return Promise.resolve(null); - } else { - return defermentPromise; - } - }), - metadata: requestedStub - } + const combinedPromise = Promise.race([keyboardPromise, timeoutPromise]); + + // Ensure the async-load Promise completes properly. + combinedPromise.then(() => { + completionPromise.resolve(null); + // Prevent any 'unhandled Promise rejection' events that may otherwise occur from the timeout promise. + timeoutPromise.catch(() => {}); + }); + combinedPromise.catch((err) => { + completionPromise.resolve(err); + throw err; + }); + + return combinedPromise; + }); + + // Now the fun part: note the original call's parameters as a pending activation. + const promise = this.deferredKeyboardActivation(defermentPromise, requestedStub, this.currentKeyboardSrcTextStore()); + return { + keyboard: promise.then(async (activation) => { + // Is the activation we requested still pending, or was it cancelled in favor of a + // different activation in some manner? + if(!activation) { + // If the user chose to load a different keyboard afterward that would affect the same + // textStore, the activation is no longer valid. + return Promise.resolve(null); + } else { + return defermentPromise; + } + }), + metadata: requestedStub } } } diff --git a/web/src/engine/src/main/keymanEngineBase.ts b/web/src/engine/src/main/keymanEngineBase.ts index 793f1bcc77..2ee22a2b37 100644 --- a/web/src/engine/src/main/keymanEngineBase.ts +++ b/web/src/engine/src/main/keymanEngineBase.ts @@ -543,8 +543,8 @@ export class KeymanEngineBase< /** * Allow to change active keyboard by (internal) keyboard name * - * @param {string} PInternalName Internal name - * @param {string} PLgCode Language code + * @param {string} keyboardId Keyboard name + * @param {string} languageCode Language code * * See https://help.keyman.com/developer/engine/web/current-version/reference/core/setActiveKeyboard */ @@ -632,4 +632,4 @@ export class KeymanEngineBase< }; } -// Intent: define common behaviors for both primary app types; each then subclasses & extends where needed. \ No newline at end of file +// Intent: define common behaviors for both primary app types; each then subclasses & extends where needed. diff --git a/web/src/test/auto/e2e/guide-examples.tests.ts b/web/src/test/auto/e2e/guide-examples.tests.ts index 13deb44472..574ddf6276 100644 --- a/web/src/test/auto/e2e/guide-examples.tests.ts +++ b/web/src/test/auto/e2e/guide-examples.tests.ts @@ -14,7 +14,7 @@ test.describe.skip('First example from the guide', function () { await setTimeoutAndLoadPage(page, 'http://localhost:3000/build/docs/engine/guide/examples/__first-example.html'); } - test('Input field shows US keyboard', async ({ page }) => { + test('Input field shows US keyboard', async ({ page } : { page: Page }) => { // Setup await beforeEach(page); const oskTitleBar = await clickFieldAndWaitForOSK(page, page.getByPlaceholder('Hello World')); @@ -29,7 +29,7 @@ test.describe.skip('First example from the guide', function () { await expect(await getSelectedKeyboardMenuText(page)).toBe('English - US'); }); - test('Keyman menu has expected keyboards', async ({ page }) => { + test('Keyman menu has expected keyboards', async ({ page } : { page: Page }) => { // Setup await beforeEach(page); await clickFieldAndWaitForOSK(page, page.getByPlaceholder('Hello World')); @@ -46,7 +46,7 @@ test.describe.skip('Auto-control example from the guide', function () { await setTimeoutAndLoadPage(page, 'http://localhost:3000/build/docs/engine/guide/examples/__auto-control.html'); } - test('Input field shows Lao keyboard', async ({ page }) => { + test('Input field shows Lao keyboard', async ({ page } : { page: Page }) => { // Setup await beforeEach(page); await page.getByTestId('multilingual' ).click(); @@ -57,7 +57,7 @@ test.describe.skip('Auto-control example from the guide', function () { await expect(page.locator('#keymanweb_title_bar')).toContainText('Lao (Phonetic)'); }); - test('Textarea shows Lao keyboard', async ({ page }) => { + test('Textarea shows Lao keyboard', async ({ page } : { page: Page }) => { // Setup await beforeEach(page); await page.getByTestId('textarea').click(); @@ -74,7 +74,7 @@ test.describe.skip('Control-by-control example from the guide', function () { await setTimeoutAndLoadPage(page, 'http://localhost:3000/build/docs/engine/guide/examples/__control-by-control.html'); } - test('address field does not have KeymanWeb enabled', async ({ page }) => { + test('address field does not have KeymanWeb enabled', async ({ page } : { page: Page }) => { // Setup await beforeEach(page); await page.getByPlaceholder('id = address').click(); @@ -87,7 +87,7 @@ test.describe.skip('Control-by-control example from the guide', function () { }); // TODO: #16080 - test.skip('subject field does not show keyboard and defaults to system keyboard', async ({ page }) => { + test.skip('subject field does not show keyboard and defaults to system keyboard', async ({ page } : { page: Page }) => { // Setup await beforeEach(page); await page.getByPlaceholder('id = subject').click(); @@ -101,7 +101,7 @@ test.describe.skip('Control-by-control example from the guide', function () { await expect(await getSelectedKeyboardMenuText(page)).toBe('(System keyboard)'); }); - test('message body field shows Lao keyboard', async ({ page }) => { + test('message body field shows Lao keyboard', async ({ page } : { page: Page }) => { // Setup await beforeEach(page); await page.getByPlaceholder('id = text').click(); @@ -124,7 +124,7 @@ test.describe.skip('Full manual control example from the guide', function () { await setTimeoutAndLoadPage(page, 'http://localhost:3000/build/docs/engine/guide/examples/__full-manual-control.html'); } - test('Shows English and no OSK after loading page', async ({ page }) => { + test('Shows English and no OSK after loading page', async ({ page } : { page: Page }) => { // Setup await beforeEach(page); @@ -134,7 +134,7 @@ test.describe.skip('Full manual control example from the guide', function () { await expect(await page.evaluate(() => keyman.osk.isVisible())).not.toBeTruthy(); }); - test('Selecting English keyboard shows no OSK', async ({ page }) => { + test('Selecting English keyboard shows no OSK', async ({ page } : { page: Page }) => { // Setup await beforeEach(page); // first switch to Hebrew @@ -164,7 +164,7 @@ test.describe.skip('Full manual control example from the guide', function () { await expect(await page.evaluate(() => keyman.osk.isVisible())).not.toBeTruthy(); }); - test('Selecting Devanagari keyboard shows Devanagari OSK', async ({ page }) => { + test('Selecting Devanagari keyboard shows Devanagari OSK', async ({ page } : { page: Page }) => { // Setup await beforeEach(page); const keyboardchangePromise = page.evaluate(async () => { @@ -183,7 +183,7 @@ test.describe.skip('Full manual control example from the guide', function () { await expect(page.locator('#keymanweb_title_bar')).toContainText('Devanagari (INSCRIPT)'); }); - test('Selecting Hebrew shows Hebrew OSK', async ({ page }) => { + test('Selecting Hebrew shows Hebrew OSK', async ({ page } : { page: Page }) => { // Setup await beforeEach(page); const keyboardchangePromise = page.evaluate(async () => { @@ -208,7 +208,7 @@ test.describe.skip('Manual control example from the guide', function () { await setTimeoutAndLoadPage(page, 'http://localhost:3000/build/docs/engine/guide/examples/__manual-control.html'); } - test('Does not show OSK after loading', async ({ page }) => { + test('Does not show OSK after loading', async ({ page } : { page: Page }) => { // Setup await beforeEach(page); await page.getByTestId('multilingual').click(); @@ -218,7 +218,7 @@ test.describe.skip('Manual control example from the guide', function () { await expect(await page.evaluate(() => keyman.osk.isVisible())).not.toBeTruthy(); }); - test('Shows Lao OSK after clicking button', async ({ page }) => { + test('Shows Lao OSK after clicking button', async ({ page } : { page: Page }) => { // Setup await beforeEach(page); await page.getByAltText('KeymanWeb').click(); @@ -230,7 +230,7 @@ test.describe.skip('Manual control example from the guide', function () { await expect(page.locator('#keymanweb_title_bar')).toContainText('Lao'); }); - test('Hides Lao OSK after clicking button', async ({ page }) => { + test('Hides Lao OSK after clicking button', async ({ page } : { page: Page }) => { // Setup await beforeEach(page); diff --git a/web/src/test/auto/headless/engine/attachment/pageContextAttachment.tests.ts b/web/src/test/auto/headless/engine/attachment/pageContextAttachment.tests.ts index 79833e2a99..9b873d38a1 100644 --- a/web/src/test/auto/headless/engine/attachment/pageContextAttachment.tests.ts +++ b/web/src/test/auto/headless/engine/attachment/pageContextAttachment.tests.ts @@ -33,7 +33,7 @@ describe('PageContextAttachment', () => { it('empty doc has no elements', () => { const doc = createDocument(''); const sut = new PageContextAttachment(doc, null); - sut.listInputs(); + sut['listInputs'](); assert.isEmpty(sut.sortedInputs); }); @@ -66,7 +66,7 @@ describe('PageContextAttachment', () => { `); const sut = new PageContextAttachment(doc, null); - sut.listInputs(); + sut['listInputs'](); const expected = ['email', 'search', 'text', 'url', 'textarea']; const types = sut.sortedInputs.map((e) => ((e as HTMLInputElement).type)); @@ -83,7 +83,7 @@ describe('PageContextAttachment', () => { `); const sut = new PageContextAttachment(doc, null); - sut.listInputs(); + sut['listInputs'](); const expected = ['1', '3']; const types = sut.sortedInputs.map((e) => (e as HTMLInputElement).id); @@ -102,7 +102,7 @@ describe('PageContextAttachment', () => { const sut = new PageContextAttachment(doc, null); const elem = doc.getElementById('1'); - const result = sut.isKMWInput(elem); + const result = sut['isKMWInput'](elem); assert.isTrue(result, `${elementType} should be treated as input element`); }); }); @@ -118,7 +118,7 @@ describe('PageContextAttachment', () => { const sut = new PageContextAttachment(doc, null); const elem = doc.getElementById('1'); - const result = sut.isKMWInput(elem); + const result = sut['isKMWInput'](elem); assert.isFalse(result, `${elementType} should not be treated as input element`); }); }); @@ -131,7 +131,7 @@ describe('PageContextAttachment', () => { const sut = new PageContextAttachment(doc, null); const elem = doc.getElementById('1'); - const result = sut.isKMWInput(elem); + const result = sut['isKMWInput'](elem); assert.isTrue(result); }); diff --git a/web/src/test/auto/headless/engine/predictive-text/worker-thread/correction-search/early-correction-search-stopping.tests.ts b/web/src/test/auto/headless/engine/predictive-text/worker-thread/correction-search/early-correction-search-stopping.tests.ts index bf45e3b94e..2afd5f5290 100644 --- a/web/src/test/auto/headless/engine/predictive-text/worker-thread/correction-search/early-correction-search-stopping.tests.ts +++ b/web/src/test/auto/headless/engine/predictive-text/worker-thread/correction-search/early-correction-search-stopping.tests.ts @@ -1,6 +1,6 @@ import { assert } from 'chai'; -import { CORRECTION_SEARCH_THRESHOLDS, CorrectionPredictionTuple, ModelCompositor, shouldStopSearchingEarly } from "@keymanapp/lm-worker/test-index"; +import { CORRECTION_SEARCH_THRESHOLDS, CorrectionPredictionTupleCore, ModelCompositor, shouldStopSearchingEarly } from "@keymanapp/lm-worker/test-index"; describe('correction-search: shouldStopSearchingEarly', () => { it('stops early once new corrections are less likely than currently discovered predictions', () => { @@ -16,7 +16,7 @@ describe('correction-search: shouldStopSearchingEarly', () => { const predictions = predictionProbs.map((entry) => { return { totalProb: entry - } as CorrectionPredictionTuple + } as CorrectionPredictionTupleCore }); // Thresholding is performed in log-space. @@ -33,8 +33,8 @@ describe('correction-search: shouldStopSearchingEarly', () => { // // Can technically run the method with an empty array, but the actual scenario would have // at least one prediction present in the "found predictions" array. - assert.isFalse(shouldStopSearchingEarly(baseCost, baseCost + expectedThreshold - 0.01, [{ totalProb: Math.exp(-1) } as CorrectionPredictionTuple])); - assert.isTrue(shouldStopSearchingEarly( baseCost, baseCost + expectedThreshold + 0.01, [{ totalProb: Math.exp(-1) } as CorrectionPredictionTuple])); + assert.isFalse(shouldStopSearchingEarly(baseCost, baseCost + expectedThreshold - 0.01, [{ totalProb: Math.exp(-1) } as CorrectionPredictionTupleCore])); + assert.isTrue(shouldStopSearchingEarly( baseCost, baseCost + expectedThreshold + 0.01, [{ totalProb: Math.exp(-1) } as CorrectionPredictionTupleCore])); }); it('stops checking corrections earlier when enough predictions have been found', () => { @@ -46,7 +46,7 @@ describe('correction-search: shouldStopSearchingEarly', () => { const predictions = predictionProbs.map((entry) => { return { totalProb: entry - } as CorrectionPredictionTuple + } as CorrectionPredictionTupleCore }); const baseCost = 1; diff --git a/web/src/test/auto/headless/engine/predictive-text/worker-thread/prediction-helpers/auto-correct.tests.ts b/web/src/test/auto/headless/engine/predictive-text/worker-thread/prediction-helpers/auto-correct.tests.ts index 882390591a..a6e97907dc 100644 --- a/web/src/test/auto/headless/engine/predictive-text/worker-thread/prediction-helpers/auto-correct.tests.ts +++ b/web/src/test/auto/headless/engine/predictive-text/worker-thread/prediction-helpers/auto-correct.tests.ts @@ -1,6 +1,21 @@ import { assert } from 'chai'; -import { AUTOSELECT_PROPORTION_THRESHOLD, CorrectionPredictionTuple, predictionAutoSelect, SuggestionSimilarity, tupleDisplayOrderSort } from "@keymanapp/lm-worker/test-index"; +import { + AUTOSELECT_PROPORTION_THRESHOLD, + CorrectionPredictionTuple, + predictionAutoSelect, + PredictionMetadata, + SuggestionSimilarity, + tupleDisplayOrderSort +} from "@keymanapp/lm-worker/test-index"; + +const defaultMetadata: PredictionMetadata = { + matchLevel: SuggestionSimilarity.none, + preservationTransform: undefined, + rawEditCount: 0, + predictionLength: 0 +} + /* * Preconditions: * - there should always be a 'keep' option. Now, whether or not that option @@ -35,7 +50,8 @@ describe('predictionAutoSelect', () => { }, p: 1 }, - totalProb: 1 + totalProb: 1, + metadata: {...defaultMetadata} } ]; @@ -66,7 +82,8 @@ describe('predictionAutoSelect', () => { }, p: 0.01 }, - totalProb: 0.01 + totalProb: 0.01, + metadata: {...defaultMetadata} }, { correction: { @@ -84,7 +101,8 @@ describe('predictionAutoSelect', () => { }, p: 0.8 }, - totalProb: 0.8 + totalProb: 0.8, + metadata: {...defaultMetadata} } ]; @@ -115,7 +133,8 @@ describe('predictionAutoSelect', () => { }, p: 1 }, - totalProb: 1 + totalProb: 1, + metadata: {...defaultMetadata} } ]; @@ -145,10 +164,11 @@ describe('predictionAutoSelect', () => { }, p: .05 }, - totalProb: .04 + totalProb: .04, + metadata: {...defaultMetadata} } - const highestNonKeepSuggestion: CorrectionPredictionTuple = { + const highestNonKeepSuggestion: CorrectionPredictionTuple= { correction: { sample: 'thin', p: .8 @@ -163,7 +183,8 @@ describe('predictionAutoSelect', () => { }, p: .55 }, - totalProb: .44 + totalProb: .44, + metadata: {...defaultMetadata} }; const predictions: CorrectionPredictionTuple[] = [ @@ -184,7 +205,8 @@ describe('predictionAutoSelect', () => { }, p: .4 }, - totalProb: .32 + totalProb: .32, + metadata: {...defaultMetadata} }, { correction: { @@ -201,7 +223,8 @@ describe('predictionAutoSelect', () => { }, p: 1 }, - totalProb: .2 + totalProb: .2, + metadata: {...defaultMetadata} } ]; @@ -214,7 +237,7 @@ describe('predictionAutoSelect', () => { }); it(`selects solitary non-'keep' suggestion when 'keep' does not match model`, () => { - const keepSuggestion: CorrectionPredictionTuple = { + const keepSuggestion: CorrectionPredictionTuple= { correction: { sample: 'thin', p: .8 @@ -231,14 +254,15 @@ describe('predictionAutoSelect', () => { }, p: .05 }, - totalProb: .04 + totalProb: .04, + metadata: {...defaultMetadata} } // To 'win', a suggestion (currently) needs at least twice the probability of the sum of all alternatives. // This threshold may be subject to change. // // Refer to AUTOSELECT_PROPORTION_THRESHOLD in predict-helpers.ts. - const onlyNonKeepSuggestion: CorrectionPredictionTuple = { + const onlyNonKeepSuggestion: CorrectionPredictionTuple= { correction: { sample: 'thin', p: .8 @@ -253,7 +277,8 @@ describe('predictionAutoSelect', () => { }, p: .01 }, - totalProb: .008 + totalProb: .008, + metadata: {...defaultMetadata} }; const predictions: CorrectionPredictionTuple[] = [ @@ -275,7 +300,7 @@ describe('predictionAutoSelect', () => { }); it(`does not select non-'keep' without sufficient winning probability`, () => { - const keepSuggestion: CorrectionPredictionTuple = { + const keepSuggestion: CorrectionPredictionTuple= { correction: { sample: 'thin', p: .8 @@ -292,14 +317,15 @@ describe('predictionAutoSelect', () => { }, p: .05 }, - totalProb: .04 + totalProb: .04, + metadata: {...defaultMetadata} } // To 'win', a suggestion (currently) needs at least twice the probability of the sum of all alternatives. // This threshold may be subject to change. // // Refer to AUTOSELECT_PROPORTION_THRESHOLD in predict-helpers.ts. - const highestNonKeepSuggestion: CorrectionPredictionTuple = { + const highestNonKeepSuggestion: CorrectionPredictionTuple= { correction: { sample: 'thin', p: .8 @@ -314,7 +340,8 @@ describe('predictionAutoSelect', () => { }, p: .55 }, - totalProb: .44 + totalProb: .44, + metadata: {...defaultMetadata} }; const predictions: CorrectionPredictionTuple[] = [ @@ -335,7 +362,8 @@ describe('predictionAutoSelect', () => { }, p: .4 }, - totalProb: .32 + totalProb: .32, + metadata: {...defaultMetadata} }, { correction: { @@ -352,7 +380,8 @@ describe('predictionAutoSelect', () => { }, p: 1 }, - totalProb: .2 + totalProb: .2, + metadata: {...defaultMetadata} } ]; @@ -370,7 +399,7 @@ describe('predictionAutoSelect', () => { }); it(`does select non-'keep' with sufficient winning probability`, () => { - const keepSuggestion: CorrectionPredictionTuple = { + const keepSuggestion: CorrectionPredictionTuple= { correction: { sample: 'thin', p: .8 @@ -387,10 +416,11 @@ describe('predictionAutoSelect', () => { }, p: .05 }, - totalProb: .04 + totalProb: .04, + metadata: {...defaultMetadata} } - const highestNonKeepSuggestion: CorrectionPredictionTuple = { + const highestNonKeepSuggestion: CorrectionPredictionTuple= { correction: { sample: 'thin', p: .9 @@ -405,7 +435,8 @@ describe('predictionAutoSelect', () => { }, p: .75 }, - totalProb: .675 + totalProb: .675, + metadata: {...defaultMetadata} }; const predictions: CorrectionPredictionTuple[] = [ @@ -426,7 +457,8 @@ describe('predictionAutoSelect', () => { }, p: .2 }, - totalProb: .18 + totalProb: .18, + metadata: {...defaultMetadata} }, { correction: { @@ -443,7 +475,8 @@ describe('predictionAutoSelect', () => { }, p: 1 }, - totalProb: .1 + totalProb: .1, + metadata: {...defaultMetadata} } ]; @@ -459,7 +492,7 @@ describe('predictionAutoSelect', () => { }); it('ignores non key-matched suggestions when key-matched suggestions exist', () => { - const keepSuggestion: CorrectionPredictionTuple = { + const keepSuggestion: CorrectionPredictionTuple= { correction: { sample: 'cant', p: 1 @@ -477,10 +510,10 @@ describe('predictionAutoSelect', () => { p: 1 }, totalProb: 1, - matchLevel: SuggestionSimilarity.exact + metadata: { ...defaultMetadata, matchLevel: SuggestionSimilarity.exact } } - const expectedSuggestion: CorrectionPredictionTuple = { + const expectedSuggestion: CorrectionPredictionTuple= { correction: { sample: 'cant', p: 1 @@ -496,7 +529,7 @@ describe('predictionAutoSelect', () => { p: .2 }, totalProb: .2, - matchLevel: SuggestionSimilarity.sameKey + metadata: { ...defaultMetadata, matchLevel: SuggestionSimilarity.sameKey } }; const predictions: CorrectionPredictionTuple[] = [ @@ -518,7 +551,7 @@ describe('predictionAutoSelect', () => { p: .8 }, totalProb: .8, - matchLevel: SuggestionSimilarity.none + metadata: { ...defaultMetadata, matchLevel: SuggestionSimilarity.none, predictionLength: 3 } } ]; @@ -534,7 +567,7 @@ describe('predictionAutoSelect', () => { // The idea: avoid "over-correcting" when a potential correction has a // super-high-frequency word. it('does not auto-select suggestion if its root correction is not most likely', () => { - const keepSuggestion: CorrectionPredictionTuple = { + const keepSuggestion: CorrectionPredictionTuple= { correction: { sample: 'thi', p: .7 @@ -551,10 +584,11 @@ describe('predictionAutoSelect', () => { }, p: .05 }, - totalProb: .035 + totalProb: .035, + metadata: {...defaultMetadata} } - const highestCorrectionSuggestion: CorrectionPredictionTuple = { + const highestCorrectionSuggestion: CorrectionPredictionTuple= { correction: { sample: 'thi', p: .7 @@ -569,10 +603,11 @@ describe('predictionAutoSelect', () => { }, p: .1 }, - totalProb: .07 + totalProb: .07, + metadata: {...defaultMetadata} }; - const highestNonKeepSuggestion: CorrectionPredictionTuple = { + const highestNonKeepSuggestion: CorrectionPredictionTuple= { correction: { sample: 'the', p: .3 @@ -587,7 +622,8 @@ describe('predictionAutoSelect', () => { }, p: 1 }, - totalProb: .3 + totalProb: .3, + metadata: {...defaultMetadata} }; const predictions: CorrectionPredictionTuple[] = [ diff --git a/web/src/test/auto/headless/engine/predictive-text/worker-thread/prediction-helpers/build-and-map-predictions.tests.ts b/web/src/test/auto/headless/engine/predictive-text/worker-thread/prediction-helpers/build-and-map-predictions.tests.ts index 73d8276e13..5051c2acbf 100644 --- a/web/src/test/auto/headless/engine/predictive-text/worker-thread/prediction-helpers/build-and-map-predictions.tests.ts +++ b/web/src/test/auto/headless/engine/predictive-text/worker-thread/prediction-helpers/build-and-map-predictions.tests.ts @@ -46,7 +46,6 @@ describe('buildAndMapPredictions', () => { ]; const basePredictions = predictFromCorrections(plainModel, correctionDistribution, context); - basePredictions.forEach((entry) => assert.isNotOk(entry.preservationTransform)); // must construct the taillessTrueKeystroke appropriately. const tailless = { insert: 'TEST', deleteLeft: 0 }; @@ -59,13 +58,13 @@ describe('buildAndMapPredictions', () => { const mappedPredictions = buildAndMapPredictions( transition, transition.base.displayTokenization, - {matchString: 'the', totalCost: 0}, + {matchString: 'the', totalCost: 0, editCount: 0}, 1 ); assert.deepEqual(mappedPredictions.map((tuple) => tuple.prediction), basePredictions.map((tuple) => tuple.prediction)); - mappedPredictions.forEach((tuple) => assert.isOk(tuple.preservationTransform)); - mappedPredictions.forEach((tuple) => tuple.preservationTransform == tailless); + mappedPredictions.forEach((tuple) => assert.isOk(tuple.metadata?.preservationTransform)); + mappedPredictions.forEach((tuple) => tuple.metadata?.preservationTransform == tailless); }); it('properly handles empty prediction roots from deleted same-token codepoints', () => { @@ -105,7 +104,7 @@ describe('buildAndMapPredictions', () => { const mappedPredictions = buildAndMapPredictions( transition, transition.base.displayTokenization, - {matchString: '', totalCost: 0}, + {matchString: '', totalCost: 0, editCount: 0}, 1 ); @@ -149,7 +148,7 @@ describe('buildAndMapPredictions', () => { const mappedPredictions = buildAndMapPredictions( transition, transition.base.displayTokenization, - {matchString: '', totalCost: 0}, + {matchString: '', totalCost: 0, editCount: 0}, 1 ); @@ -211,7 +210,7 @@ describe('buildAndMapPredictions', () => { const mappedPredictions = buildAndMapPredictions( transition, transition.final.displayTokenization, - {matchString: '', totalCost: 0}, + {matchString: '', totalCost: 0, editCount: 0}, 1 ); diff --git a/web/src/test/auto/headless/engine/predictive-text/worker-thread/prediction-helpers/create-default-keep.tests.ts b/web/src/test/auto/headless/engine/predictive-text/worker-thread/prediction-helpers/create-default-keep.tests.ts index 6b5981c834..4b886328d1 100644 --- a/web/src/test/auto/headless/engine/predictive-text/worker-thread/prediction-helpers/create-default-keep.tests.ts +++ b/web/src/test/auto/headless/engine/predictive-text/worker-thread/prediction-helpers/create-default-keep.tests.ts @@ -12,7 +12,12 @@ import { assert } from 'chai'; import { LexicalModelTypes } from "@keymanapp/common-types"; import * as wordBreakers from '@keymanapp/models-wordbreakers'; -import { CorrectionPredictionTuple, createDefaultKeep, models, SuggestionSimilarity } from "@keymanapp/lm-worker/test-index"; +import { + CorrectionPredictionTuple, + createDefaultKeep, + models, + SuggestionSimilarity +} from "@keymanapp/lm-worker/test-index"; import CasingFunction = LexicalModelTypes.CasingFunction; import Context = LexicalModelTypes.Context; @@ -126,7 +131,7 @@ describe('produceKeep', () => { p: 1 }, totalProb: 1, - matchLevel: SuggestionSimilarity.exact + metadata: { matchLevel: SuggestionSimilarity.exact, preservationTransform: null, predictionLength: 0, rawEditCount: 'iphone'.length } }; const tuple = createDefaultKeep(testModelWithCasing, context, trueInput); diff --git a/web/src/test/auto/headless/engine/predictive-text/worker-thread/prediction-helpers/predict-from-corrections.tests.ts b/web/src/test/auto/headless/engine/predictive-text/worker-thread/prediction-helpers/predict-from-corrections.tests.ts index 31f5063c15..d18f287841 100644 --- a/web/src/test/auto/headless/engine/predictive-text/worker-thread/prediction-helpers/predict-from-corrections.tests.ts +++ b/web/src/test/auto/headless/engine/predictive-text/worker-thread/prediction-helpers/predict-from-corrections.tests.ts @@ -4,7 +4,7 @@ import { assert } from 'chai'; import { deepCopy } from "keyman/common/web-utils"; import { LexicalModelTypes } from '@keymanapp/common-types'; -import { models, predictFromCorrections, tupleDisplayOrderSort } from "@keymanapp/lm-worker/test-index"; +import { models, predictFromCorrections } from "@keymanapp/lm-worker/test-index"; import CasingFunction = LexicalModelTypes.CasingFunction; import Context = LexicalModelTypes.Context; @@ -115,7 +115,7 @@ describe('predictFromCorrections', () => { const predictions = predictFromCorrections(model, correctionDistribution, context); predictions.forEach((entry) => assert.equal(entry.correction.sample, 'Its')); predictions.forEach((entry) => assert.equal(entry.correction.p, 0.6)); - predictions.sort(tupleDisplayOrderSort); + predictions.sort((a, b) => b.totalProb - a.totalProb); assert.sameDeepOrderedMembers(predictions.map((entry) => entry.prediction.sample), dummied_suggestions); @@ -167,7 +167,7 @@ describe('predictFromCorrections', () => { const predictions = predictFromCorrections(model, correctionDistribution, context); predictions.forEach((entry) => assert.equal(entry.correction.sample, 'Its')); predictions.forEach((entry) => assert.equal(entry.correction.p, 0.6)); - predictions.sort(tupleDisplayOrderSort); + predictions.sort((a, b) => b.totalProb - a.totalProb); assert.sameOrderedMembers(predictions.map((entry) => entry.prediction.sample.displayAs), ["it's", "its"]); assert.sameDeepOrderedMembers(predictions.map((entry) => entry.prediction.sample), dummied_suggestions.map((entry) => { @@ -247,7 +247,7 @@ describe('predictFromCorrections', () => { }); const predictions = predictFromCorrections(model, correctionDistribution, context); - predictions.sort(tupleDisplayOrderSort); + predictions.sort((a, b) => b.totalProb - a.totalProb); assert.sameOrderedMembers(predictions.map((entry) => entry.prediction.sample.displayAs), ["is", "it's", "isn't", "its"]); assert.sameDeepMembers(predictions.map((entry) => entry.prediction.sample), dummied_suggestions.flatMap((entry) => entry)); diff --git a/web/src/test/auto/headless/engine/predictive-text/worker-thread/prediction-helpers/suggestion-deduplication.tests.ts b/web/src/test/auto/headless/engine/predictive-text/worker-thread/prediction-helpers/suggestion-deduplication.tests.ts index bfd2eeefaf..1a3aad48a2 100644 --- a/web/src/test/auto/headless/engine/predictive-text/worker-thread/prediction-helpers/suggestion-deduplication.tests.ts +++ b/web/src/test/auto/headless/engine/predictive-text/worker-thread/prediction-helpers/suggestion-deduplication.tests.ts @@ -4,7 +4,13 @@ import * as wordBreakers from '@keymanapp/models-wordbreakers'; import { deepCopy } from 'keyman/common/web-utils'; import { LexicalModelTypes } from '@keymanapp/common-types'; -import { CorrectionPredictionTuple, dedupeSuggestions, models } from "@keymanapp/lm-worker/test-index"; +import { + CorrectionPredictionTuple, + CorrectionPredictionTupleCore, + SuggestionSimilarity, + dedupeSuggestions, + models +} from "@keymanapp/lm-worker/test-index"; import Context = LexicalModelTypes.Context; import DummyModel = models.DummyModel; @@ -18,13 +24,25 @@ const testModel = new DummyModel({ // No suggestions needed here, so we don't define any. }); +const mockMetadata: (tc: CorrectionPredictionTupleCore) => CorrectionPredictionTuple = (t: CorrectionPredictionTupleCore) => { + return { + ...t, + metadata: { + preservationTransform: null, + matchLevel: SuggestionSimilarity.none, + rawEditCount: 0, // does not matter for these tests. + predictionLength: 0 // does not matter for these tests. + } + } +}; + /** * Builds a fresh copy of test values useful for suggestion-similarity * testing. * @returns */ const build_its_is_set = () => { - const its: CorrectionPredictionTuple = { + const its: CorrectionPredictionTupleCore = { correction: { sample: 'its', p: 0.8 @@ -43,7 +61,7 @@ const build_its_is_set = () => { // matchLevel does not yet exist. }; - const it_is: CorrectionPredictionTuple = { + const it_is: CorrectionPredictionTupleCore = { correction: { sample: 'its', p: 0.8 @@ -61,7 +79,7 @@ const build_its_is_set = () => { totalProb: 0.64 }; - const is: CorrectionPredictionTuple = { + const is: CorrectionPredictionTupleCore = { correction: { sample: 'is', p: 0.2 @@ -79,7 +97,7 @@ const build_its_is_set = () => { totalProb: 0.1 }; - const is_not: CorrectionPredictionTuple = { + const is_not: CorrectionPredictionTupleCore = { correction: { sample: 'is', p: 0.2 @@ -115,7 +133,7 @@ describe('dedupeSuggestions', () => { }; const testSet = build_its_is_set(); - const predictions = [...Object.values(testSet)]; + const predictions: CorrectionPredictionTuple[] = [...Object.values(testSet)].map(mockMetadata) ; const deduplicated = dedupeSuggestions(testModel, predictions, context); @@ -136,10 +154,10 @@ describe('dedupeSuggestions', () => { ...Object.values(testSet).map((entry) => deepCopy(entry)), ...Object.values(testSet).map((entry) => deepCopy(entry)), deepCopy(testSet.it_is) // as in, `it's`, the contraction. - ]; + ].map(mockMetadata); const deduplicated = dedupeSuggestions(testModel, predictions, context); - const expected = [...Object.values(testSet)]; + const expected = [...Object.values(testSet)].map(mockMetadata); // Note: only changes the _total_ probability. // // There's no mathematically safe way to combine the components if the diff --git a/web/src/test/auto/headless/engine/predictive-text/worker-thread/prediction-helpers/suggestion-finalization.tests.ts b/web/src/test/auto/headless/engine/predictive-text/worker-thread/prediction-helpers/suggestion-finalization.tests.ts index 387bf6dab9..74bcf0c91a 100644 --- a/web/src/test/auto/headless/engine/predictive-text/worker-thread/prediction-helpers/suggestion-finalization.tests.ts +++ b/web/src/test/auto/headless/engine/predictive-text/worker-thread/prediction-helpers/suggestion-finalization.tests.ts @@ -5,7 +5,7 @@ import { deepCopy } from 'keyman/common/web-utils'; import * as wordBreakers from '@keymanapp/models-wordbreakers'; import { LexicalModelTypes } from '@keymanapp/common-types'; -import { CorrectionPredictionTuple, finalizeSuggestions, models } from "@keymanapp/lm-worker/test-index"; +import { CorrectionPredictionTuple, PredictionMetadata, SuggestionSimilarity, finalizeSuggestions, models } from "@keymanapp/lm-worker/test-index"; import DummyModel = models.DummyModel; import Outcome = LexicalModelTypes.Outcome; @@ -48,6 +48,13 @@ const testModelWithoutSpacing = new DummyModel({ const build_its_is_set = (verbose?: string) => { const verboseFlag = (verbose == 'verbose' ? true : false); + const metadata: PredictionMetadata = { + matchLevel: SuggestionSimilarity.none, + preservationTransform: undefined, + rawEditCount: 0, + predictionLength: 0 + }; + const its: CorrectionPredictionTuple = { correction: { sample: 'its', @@ -63,8 +70,8 @@ const build_its_is_set = (verbose?: string) => { }, p: 0.2 }, - totalProb: 0.16 - // matchLevel does not yet exist. + totalProb: 0.16, + metadata: {...metadata, predictionLength: 0} }; const it_is: CorrectionPredictionTuple = { @@ -82,7 +89,8 @@ const build_its_is_set = (verbose?: string) => { }, p: 0.8 }, - totalProb: 0.64 + totalProb: 0.64, + metadata: {...metadata, predictionLength: 0} }; const is: CorrectionPredictionTuple = { @@ -100,7 +108,8 @@ const build_its_is_set = (verbose?: string) => { }, p: 0.5 }, - totalProb: 0.1 + totalProb: 0.1, + metadata: {...metadata, predictionLength: 0} }; const is_not: CorrectionPredictionTuple = { @@ -118,7 +127,8 @@ const build_its_is_set = (verbose?: string) => { }, p: 0.5 }, - totalProb: 0.1 + totalProb: 0.1, + metadata: {...metadata, predictionLength: 2} // not counting the `'` here. }; const baseDefinitions = { diff --git a/web/src/test/auto/headless/engine/predictive-text/worker-thread/prediction-helpers/suggestion-similarity.tests.ts b/web/src/test/auto/headless/engine/predictive-text/worker-thread/prediction-helpers/suggestion-similarity.tests.ts index 6cfa731429..9e88e8af22 100644 --- a/web/src/test/auto/headless/engine/predictive-text/worker-thread/prediction-helpers/suggestion-similarity.tests.ts +++ b/web/src/test/auto/headless/engine/predictive-text/worker-thread/prediction-helpers/suggestion-similarity.tests.ts @@ -5,7 +5,14 @@ import * as wordBreakers from '@keymanapp/models-wordbreakers'; import { deepCopy } from 'keyman/common/web-utils'; import { LexicalModelTypes } from '@keymanapp/common-types'; -import { CorrectionPredictionTuple, models, processSimilarity, SuggestionSimilarity, toAnnotatedSuggestion } from "@keymanapp/lm-worker/test-index"; +import { + CorrectionPredictionTuple, + models, + PredictionMetadata, + processSimilarity, + SuggestionSimilarity, + toAnnotatedSuggestion +} from "@keymanapp/lm-worker/test-index"; import CasingFunction = LexicalModelTypes.CasingFunction; import Context = LexicalModelTypes.Context; @@ -109,6 +116,13 @@ const testModelWithCasing = new DummyModel({ * @returns */ const build_its_is_set = () => { + const metadata: PredictionMetadata = { + matchLevel: SuggestionSimilarity.none, + preservationTransform: undefined, + rawEditCount: 0, // does not matter for these tests + predictionLength: 0 // does not matter for these tests + }; + const its: CorrectionPredictionTuple = { correction: { sample: 'its', @@ -124,8 +138,8 @@ const build_its_is_set = () => { }, p: 0.2 }, - totalProb: 0.16 - // matchLevel does not yet exist. + totalProb: 0.16, + metadata: {...metadata} }; const it_is: CorrectionPredictionTuple = { @@ -143,7 +157,8 @@ const build_its_is_set = () => { }, p: 0.8 }, - totalProb: 0.64 + totalProb: 0.64, + metadata: {...metadata} }; const is: CorrectionPredictionTuple = { @@ -161,7 +176,8 @@ const build_its_is_set = () => { }, p: 0.5 }, - totalProb: 0.1 + totalProb: 0.1, + metadata: {...metadata} }; const is_not: CorrectionPredictionTuple = { @@ -179,7 +195,8 @@ const build_its_is_set = () => { }, p: 0.5 }, - totalProb: 0.1 + totalProb: 0.1, + metadata: {...metadata} }; return { @@ -213,16 +230,16 @@ describe('processSimilarity', () => { const expectation: CorrectionPredictionTuple[] = [ { ...testSet.its, - matchLevel: SuggestionSimilarity.exact + metadata: { ...testSet.its.metadata, matchLevel: SuggestionSimilarity.exact } }, { ...testSet.it_is, - matchLevel: SuggestionSimilarity.sameKey + metadata: { ...testSet.its.metadata, matchLevel: SuggestionSimilarity.sameKey } }, { ...testSet.is, - matchLevel: SuggestionSimilarity.none + metadata: { ...testSet.its.metadata, matchLevel: SuggestionSimilarity.none } }, { ...testSet.is_not, - matchLevel: SuggestionSimilarity.none + metadata: { ...testSet.its.metadata, matchLevel: SuggestionSimilarity.none } } ]; @@ -260,16 +277,16 @@ describe('processSimilarity', () => { const expectation: CorrectionPredictionTuple[] = [ { ...testSet.its, - matchLevel: SuggestionSimilarity.sameKey + metadata: { ...testSet.its.metadata, matchLevel: SuggestionSimilarity.sameKey } }, { ...testSet.it_is, - matchLevel: SuggestionSimilarity.exact + metadata: { ...testSet.its.metadata, matchLevel: SuggestionSimilarity.exact } }, { ...testSet.is, - matchLevel: SuggestionSimilarity.none + metadata: { ...testSet.its.metadata, matchLevel: SuggestionSimilarity.none } }, { ...testSet.is_not, - matchLevel: SuggestionSimilarity.none + metadata: { ...testSet.its.metadata, matchLevel: SuggestionSimilarity.none } } ]; @@ -324,17 +341,17 @@ describe('processSimilarity', () => { const expectation: CorrectionPredictionTuple[] = [ { ...testSet.its, - matchLevel: SuggestionSimilarity.sameKey + metadata: { ...testSet.its.metadata, matchLevel: SuggestionSimilarity.sameKey } }, { ...testSet.it_is, // case mismatch, detectable because we have access to a lowercasing/uppercasing function. - matchLevel: SuggestionSimilarity.sameText + metadata: { ...testSet.its.metadata, matchLevel: SuggestionSimilarity.sameText } }, { ...testSet.is, - matchLevel: SuggestionSimilarity.none + metadata: { ...testSet.its.metadata, matchLevel: SuggestionSimilarity.none } }, { ...testSet.is_not, - matchLevel: SuggestionSimilarity.none + metadata: { ...testSet.its.metadata, matchLevel: SuggestionSimilarity.none } } ]; @@ -378,17 +395,17 @@ describe('processSimilarity', () => { const expectation: CorrectionPredictionTuple[] = [ { ...testSet.its, - matchLevel: SuggestionSimilarity.none + metadata: { ...testSet.its.metadata, matchLevel: SuggestionSimilarity.none } }, { ...testSet.it_is, // case mismatch, detectable because we have access to a lowercasing/uppercasing function. - matchLevel: SuggestionSimilarity.none + metadata: { ...testSet.its.metadata, matchLevel: SuggestionSimilarity.none } }, { ...testSet.is, - matchLevel: SuggestionSimilarity.none + metadata: { ...testSet.its.metadata, matchLevel: SuggestionSimilarity.none } }, { ...testSet.is_not, - matchLevel: SuggestionSimilarity.none + metadata: { ...testSet.its.metadata, matchLevel: SuggestionSimilarity.none } } ]; diff --git a/web/src/test/auto/headless/engine/predictive-text/worker-thread/worker-initialization.tests.ts b/web/src/test/auto/headless/engine/predictive-text/worker-thread/worker-initialization.tests.ts index 08c5262484..6fd84c5602 100644 --- a/web/src/test/auto/headless/engine/predictive-text/worker-thread/worker-initialization.tests.ts +++ b/web/src/test/auto/headless/engine/predictive-text/worker-thread/worker-initialization.tests.ts @@ -6,7 +6,6 @@ import sinon from 'sinon'; import { configWorker, createMessageEventWithData, importScriptsWith } from '@keymanapp/common-test-resources/model-helpers.mjs'; -// @ts-ignore import { LMLayerWorker } from '@keymanapp/lm-worker/test-index'; const require = createRequire(import.meta.url); @@ -171,6 +170,54 @@ describe('LMLayerWorker', function() { }))); }); + it('should send back an "error" message and recover when given an invalid filepath', function () { + var fakePostMessage = sinon.fake(); + var context: MockedContext = { + postMessage: fakePostMessage + }; + context.importScripts = importScriptsWith(context); + + var worker = LMLayerWorker.install(context); + configWorker(worker); + + worker.onMessage(createMessageEventWithData({ + message: 'load', + source: { + type: 'file', + file: require.resolve("@keymanapp/common-test-resources/models/simple-dummy.js") + "x" + } + })); + + assert(fakePostMessage.calledOnce); + assert(fakePostMessage.calledWith(sinon.match({ + message: 'error' + }))); + + // Validate internal state name - that we're still in an unloaded mode. + // worker.state is private, though. + assert.equal(worker['state'].name, 'modelless'); + // Permit host engine 'unload' messages to pass through without error while in this state. + worker.onMessage(createMessageEventWithData({ + message: 'unload' + })); + + // No new message should be received in this case; it should pass through silently. + assert(fakePostMessage.calledOnce); + + worker.onMessage(createMessageEventWithData({ + message: 'load', + source: { + type: 'file', + file: require.resolve("@keymanapp/common-test-resources/models/simple-dummy.js") + } + })); + + assert(fakePostMessage.calledTwice); + assert(fakePostMessage.calledWith(sinon.match({ + message: 'ready' + }))); + }); + it('should send back a "ready" message when given raw code', function () { var fakePostMessage = sinon.fake(); var context: MockedContext = { diff --git a/web/src/test/auto/headless/engine/predictive-text/worker-thread/worker-predict.tests.ts b/web/src/test/auto/headless/engine/predictive-text/worker-thread/worker-predict.tests.ts index ffe25f1120..2214d6e61c 100644 --- a/web/src/test/auto/headless/engine/predictive-text/worker-thread/worker-predict.tests.ts +++ b/web/src/test/auto/headless/engine/predictive-text/worker-thread/worker-predict.tests.ts @@ -1,5 +1,6 @@ import { createRequire } from 'node:module'; +import { assert } from 'chai'; import sinon from 'sinon'; import { LexicalModelTypes } from '@keymanapp/common-types'; @@ -8,7 +9,7 @@ import { configWorker, createMessageEventWithData, emptyContext, iGotDistractedB import { timedPromise } from 'keyman/common/web-utils'; import { LMLayerWorker } from '@keymanapp/lm-worker/test-index'; -import { OutgoingMessage } from '@keymanapp/lm-message-types'; +import { OutgoingMessage, SuggestionMessage } from '@keymanapp/lm-message-types'; import Suggestion = LexicalModelTypes.Suggestion; @@ -73,11 +74,13 @@ describe('LMLayerWorker', function () { // Retrieve the internal 'dummy' suggestions for comparison. var hazel = iGotDistractedByHazel(); - sinon.assert.calledWithMatch(fakePostMessage.lastCall, { - message: 'suggestions', - token: token, - suggestions: hazel[0] - }); + assert.isOk(fakePostMessage); + + const lastCallParameters: SuggestionMessage = fakePostMessage.lastCall.args[0] as unknown as SuggestionMessage; + + assert.equal(lastCallParameters.message, 'suggestions'); + assert.equal(lastCallParameters.token, token); + assert.sameDeepMembers(lastCallParameters.suggestions, hazel[0]); }); afterEach(function () { diff --git a/web/src/test/manual/web/keyboard-errors/errorhdr.js b/web/src/test/manual/web/keyboard-errors/errorhdr.js index b8e1dd25f9..fbf8f8d474 100644 --- a/web/src/test/manual/web/keyboard-errors/errorhdr.js +++ b/web/src/test/manual/web/keyboard-errors/errorhdr.js @@ -35,6 +35,8 @@ id:'lo',name:'debugging',region:'Asia', font:{family:'LaoWeb',source:['../font/saysettha_web.ttf','../font/saysettha_web.woff','../font/saysettha_web.eot']} }, - filename:'./timeout.js' // Intentional (simulated) error - the file never loads, simulating a server timeout. + filename: './timeout.js' // Intentional (simulated) error - the file never loads, + // simulating a server timeout. web/src/tools/testing/test-server/index.cjs#L12 + // has special code when this file gets requested! }); } diff --git a/web/src/test/manual/web/keyboard-errors/index.html b/web/src/test/manual/web/keyboard-errors/index.html index e00e2f714c..790e27458d 100644 --- a/web/src/test/manual/web/keyboard-errors/index.html +++ b/web/src/test/manual/web/keyboard-errors/index.html @@ -64,9 +64,12 @@
  • wrong-filename keyboard: "Unable to download wrong-filename keyboard for debugging"
  • non-parsable keyboard: "Error registering the non-parsable keyboard for debugging; keyboard script at ./unparsable.js may contain an error."
  • -
  • timeout keyboard: "Sorry, the timeout keyboard for debugging is not currently available."
  • +
  • timeout keyboard: "Activation of 'Keyboard_timeout' failed: Download of Keyboard_timeout for language lo timed out."
+

Note: This test page will only work on the local test server due to its + specific requirements for handling the 'timeout.js' file.

+

Return to testing home page

@@ -75,7 +78,11 @@ const body = document.getElementsByTagName('body')[0]; body.innerHTML = `

KeymanWeb Sample Page - Error Testing page

Unable to load this test page!

-

This page has to be loaded through the local test server.

+

This test page will only work on the local test server because it + requires special treatment when loading timeout.js + (see + web/src/tools/testing/test-server/index.cjs#L12). The + page has to be loaded through the local test server.

Do the following:

  1. Open a terminal and navigate to the Keyman source root directory
  2. diff --git a/windows/include/keymancontrol.h b/windows/include/keymancontrol.h new file mode 100644 index 0000000000..1bfd5605e0 --- /dev/null +++ b/windows/include/keymancontrol.h @@ -0,0 +1,64 @@ +/* + Name: keymancontrol + Copyright: Copyright (C) SIL International. + Documentation: + Description: + Create Date: 1 Aug 2006 + + Modified Date: 13 Oct 2014 + Authors: mcdurdin + Related Files: + Dependencies: + + Bugs: + Todo: + Notes: + History: 01 Aug 2006 - mcdurdin - Add KMC_REFRESH and KMC_INTERFACEHOTKEY wm_keyman_control messages + 11 Dec 2009 - mcdurdin - I934 - x64 platfrom comms add KMC_SETFOCUSINFO + 06 Apr 2010 - mcdurdin - I2271 - Select Keyboard tidy up + 24 Oct 2013 - mcdurdin - I3933 - V9.0 - Keyman tray icon menu is not showing installed keyboards + 07 Nov 2013 - mcdurdin - I3949 - V9.0 - Keyboard selection and notification needs consolidation + 03 Aug 2014 - mcdurdin - I4326 - V9.0 - Switch-off hotkey not working, then keyboard hotkey stopped working (win 8.1 jeremy) [High] + 13 Oct 2014 - mcdurdin - I4451 - V9.0 - Language hotkeys are not working +*/ + +#define KMC_REFRESH 4 +#define KMC_INTERFACEHOTKEY 5 + +#define KMC_NOTIFYWELCOME 6 // 7.0.245.0 +#define KMC_ONSCREENKEYBOARD 8 // 7.0.248.0 + +#define KMC_SETFOCUSINFO 9 // 7.1.270.0 +#define KMC_GETLASTFOCUS 10 // 7.1.270.0 +#define KMC_GETLASTACTIVE 11 + +#define KMC_KEYDOWN 16 // 8.0.291.0 +#define KMC_KEYUP 17 // 8.0.291.0 + +#define KMC_PROFILECHANGED 18 // 9.0.426.0 // I3933 + +#define KMC_HINTRESPONSE 19 // 14.0 HIWORD(wParam) = ModalResult, lParam = hint enum + +#define KMC_WATCHDOG_FAKEFREEZE 20 // 19.0 - pause Keyman for 5 seconds for debug purposes to test stability +#define KMC_WATCHDOG_KEYEVENT 21 // 19.0 - let the LowLevelHookWatchDog know that input has happened on another thread +#define KMC_WATCHDOG_HOOK_REINSTALL 22 // 19.0 - tell master controller about hook reinstall events + + // KMC_WATCHDOG_HOOK_REINSTALL event types + #define WHR_TIMING 0 // 19.0 - report on timing + #define WHR_INIT_FAILURE 1 // 19.0 - hook failed to (re)install + #define WHR_UNINIT_FAILURE 2 // 19.0 - hook failed to uninstall + +// Cross-architecture comms +#define KMC_REGISTER_HOST_WINDOW_X64 23 +#define KMC_REGISTER_HOST_WINDOW_ARM64 24 + + +#define PC_UPDATE 0 // Tell Keyman to update its display of active keyboard +#define PC_UPDATE_LANGUAGESWITCH 1 // Tell Keyman to update its display of active keyboard and then open language switch form +#define PC_HOTKEYCHANGE 2 // Tell Keyman that a hotkey was pressed to switch keyboard + + +#define RWM_KEYMAN_CONTROL "WM_KEYMAN_CONTROL" +#define RWM_KEYMAN_CONTROL_W L"WM_KEYMAN_CONTROL" + +#define khLanguageSwitch 8 diff --git a/windows/src/desktop/kmshell/install/UfrmInstallKeyboardLanguage.pas b/windows/src/desktop/kmshell/install/UfrmInstallKeyboardLanguage.pas index fab24635f7..e181f0203f 100644 --- a/windows/src/desktop/kmshell/install/UfrmInstallKeyboardLanguage.pas +++ b/windows/src/desktop/kmshell/install/UfrmInstallKeyboardLanguage.pas @@ -474,7 +474,7 @@ begin end; end; - if not (GetOs = osWin7) and not FFoundCustomTag then + if not FFoundCustomTag then begin if IsValidLocaleName(PChar(FText)) then begin diff --git a/windows/src/desktop/kmshell/locale/am-ET/strings.xml b/windows/src/desktop/kmshell/locale/am-ET/strings.xml index 2f23892343..deb9c06475 100644 --- a/windows/src/desktop/kmshell/locale/am-ET/strings.xml +++ b/windows/src/desktop/kmshell/locale/am-ET/strings.xml @@ -336,10 +336,6 @@ የኪይማን የፊደል ሰሌዳ ሲመረጥ ሁልጊዜ የስክሪን ላይ ኪቦርዱን መስኮት አሳይ - - የፊደል ሰሌዳው በሚመረጥበት ጊዜ ወዲያውኑ ወደ ተገቢው የስክሪን ላይ ኪቦርድ እርዳታ ይቀይሩ - - የኪማኑን ስህተቶች ፈልግ diff --git a/windows/src/desktop/kmshell/locale/az-AZ/strings.xml b/windows/src/desktop/kmshell/locale/az-AZ/strings.xml index 7e3b7d5691..e75a4ce7c1 100644 --- a/windows/src/desktop/kmshell/locale/az-AZ/strings.xml +++ b/windows/src/desktop/kmshell/locale/az-AZ/strings.xml @@ -315,10 +315,6 @@ Keyman klaviaturası seçildikdə həmişə Ekran Klaviatura Pəncərəsini göstərin - - Bir klaviatura seçildikdə avtomatik müvafiq olaraq On Screen Keyboard / Help-ə keçmək - - Hata düzəltməsi diff --git a/windows/src/desktop/kmshell/locale/bwr-NG/strings.xml b/windows/src/desktop/kmshell/locale/bwr-NG/strings.xml index 503b941fde..dc3d28ae73 100644 --- a/windows/src/desktop/kmshell/locale/bwr-NG/strings.xml +++ b/windows/src/desktop/kmshell/locale/bwr-NG/strings.xml @@ -315,10 +315,6 @@ Kǝlara saka ncangtǝ On Screen Keyboard Window saka tǝ mdǝ car keyboard ar Keyman - - Pali On Screen Keyboard/Help na kalkal ka kǝrni sakatǝ mdǝ car keyboard laga - - Debugging diff --git a/windows/src/desktop/kmshell/locale/ckl-NG/strings.xml b/windows/src/desktop/kmshell/locale/ckl-NG/strings.xml index 779b0e0531..70dfc201ae 100644 --- a/windows/src/desktop/kmshell/locale/ckl-NG/strings.xml +++ b/windows/src/desktop/kmshell/locale/ckl-NG/strings.xml @@ -335,10 +335,6 @@ Tsanti On Screen Keyboard Window kǝlara saka namtǝ ndǝ tsarba Keyman keyboard - - Mwari ata On Screen Keyboard/Help automatically saka namtǝ gǝ tsarba kibod - - Debugging diff --git a/windows/src/desktop/kmshell/locale/cs-CZ/strings.xml b/windows/src/desktop/kmshell/locale/cs-CZ/strings.xml index 6e217e3b1f..c1572d44ab 100644 --- a/windows/src/desktop/kmshell/locale/cs-CZ/strings.xml +++ b/windows/src/desktop/kmshell/locale/cs-CZ/strings.xml @@ -343,10 +343,6 @@ Vždy zobrazovat zapnuté okno klávesnice při výběru klávesnice - - Automaticky přepnout na vhodnou klávesnici na obrazovku/Pomoc při výběru klávesnice - - Ladění diff --git a/windows/src/desktop/kmshell/locale/de/strings.xml b/windows/src/desktop/kmshell/locale/de/strings.xml index 2e2d3bffd8..529e9dc090 100644 --- a/windows/src/desktop/kmshell/locale/de/strings.xml +++ b/windows/src/desktop/kmshell/locale/de/strings.xml @@ -343,10 +343,6 @@ Bildschirmtastatur immer anzeigen wenn eine Keyman-Tastatur ausgewählt ist - - Bildschirmtastatur bzw. Hilfe automatisch anzeigen, wenn eine Tastatur ausgewählt wird - - Fehlersuchen einschalten diff --git a/windows/src/desktop/kmshell/locale/el-polyton/strings.xml b/windows/src/desktop/kmshell/locale/el-polyton/strings.xml index 72d425903f..3eaab6827b 100644 --- a/windows/src/desktop/kmshell/locale/el-polyton/strings.xml +++ b/windows/src/desktop/kmshell/locale/el-polyton/strings.xml @@ -343,10 +343,6 @@ Ὅταν ἐπιλέγετε πληκτρολόγιο Keyman, νὰ προβάλλετε πάντα τὸ πληκτρολόγιο ὀθόνης - - Μόλις ἐπιλεγεῖ πληκτρολόγιο νὰ ἐμφανίζεται αὐτομάτως τὸ κατάλληλο πληκτρολόγιο ὀθόνης ἢ ὀθόνη βοηθείας - - Διερεύνηση σφαλμάτων diff --git a/windows/src/desktop/kmshell/locale/es-419/strings.xml b/windows/src/desktop/kmshell/locale/es-419/strings.xml index 6d9eabb204..f2ca57c5fe 100644 --- a/windows/src/desktop/kmshell/locale/es-419/strings.xml +++ b/windows/src/desktop/kmshell/locale/es-419/strings.xml @@ -343,10 +343,6 @@ Mostrar siempre la ventana de teclado en pantalla cuando se seleccione el teclado de Keyman - - Cambiar automáticamente a Teclado en pantalla/Ayuda según corresponda cuando se selecciona un teclado - - Depurar diff --git a/windows/src/desktop/kmshell/locale/es-ES/strings.xml b/windows/src/desktop/kmshell/locale/es-ES/strings.xml index 144777c605..608787b42b 100644 --- a/windows/src/desktop/kmshell/locale/es-ES/strings.xml +++ b/windows/src/desktop/kmshell/locale/es-ES/strings.xml @@ -343,10 +343,6 @@ Mostrar siempre la ventana Teclado En Pantalla cuando se selecciona el teclado Keyman - - Cambiar al Teclado En Pantalla apropiado/Ayuda automáticamente cuando se selecciona un teclado - - Depuración diff --git a/windows/src/desktop/kmshell/locale/ff-NG/strings.xml b/windows/src/desktop/kmshell/locale/ff-NG/strings.xml index 9c15b5bf15..01b1e1dcb0 100644 --- a/windows/src/desktop/kmshell/locale/ff-NG/strings.xml +++ b/windows/src/desktop/kmshell/locale/ff-NG/strings.xml @@ -335,10 +335,6 @@ Koonday holla kibod man dow yeeso na`ura to kibod keyman suptaama - - Yaha haa dow kibod yeeso na`ura/mballa to kibod suptaama - - Debugin diff --git a/windows/src/desktop/kmshell/locale/ff-ZA/strings.xml b/windows/src/desktop/kmshell/locale/ff-ZA/strings.xml index 47b53ff10e..475008766c 100644 --- a/windows/src/desktop/kmshell/locale/ff-ZA/strings.xml +++ b/windows/src/desktop/kmshell/locale/ff-ZA/strings.xml @@ -339,10 +339,6 @@ Hollir Tappirde Yaynirde tuma kala nde tappirde Keyman suɓaa - - Lomtin Tappirde Yaynirde/Ballal jaaɓdunde e jaajol so tappirde Keyman suɓaama - - Buggitagol diff --git a/windows/src/desktop/kmshell/locale/fr/strings.xml b/windows/src/desktop/kmshell/locale/fr/strings.xml index df1248f033..e6dbabace4 100644 --- a/windows/src/desktop/kmshell/locale/fr/strings.xml +++ b/windows/src/desktop/kmshell/locale/fr/strings.xml @@ -335,10 +335,6 @@ Toujours afficher le clavier visuel lorsque le clavier Keyman est sélectionné - - Basculer au clavier visuel approprié/aide quand un clavier est sélectionné - - Debogage diff --git a/windows/src/desktop/kmshell/locale/ha-HG/strings.xml b/windows/src/desktop/kmshell/locale/ha-HG/strings.xml index 91a118a878..6bbafe6eb0 100644 --- a/windows/src/desktop/kmshell/locale/ha-HG/strings.xml +++ b/windows/src/desktop/kmshell/locale/ha-HG/strings.xml @@ -315,10 +315,6 @@ Nuna Madannan Kan Screen koyaushe yayinda aka zaɓi madanni - - Koma ga Madannin Kan Screen da ya dace/Taikamaka kai tsaye yayinda aka zaɓi madanni - - Cire kuskure diff --git a/windows/src/desktop/kmshell/locale/hia-NG/strings.xml b/windows/src/desktop/kmshell/locale/hia-NG/strings.xml index bb558c5b18..e555b2d49b 100644 --- a/windows/src/desktop/kmshell/locale/hia-NG/strings.xml +++ b/windows/src/desktop/kmshell/locale/hia-NG/strings.xml @@ -315,10 +315,6 @@ Always show On Screen Keyboard Window when Keyman keyboard is selected - - A gunat daideya t Screen Keyboard/Fanast jiv kudeɗa t keyboard vita kabbklalo - - Klun tina magal kol ɗughwana diff --git a/windows/src/desktop/kmshell/locale/id-ID/strings.xml b/windows/src/desktop/kmshell/locale/id-ID/strings.xml index bfc69558a3..2b7aa7ef82 100644 --- a/windows/src/desktop/kmshell/locale/id-ID/strings.xml +++ b/windows/src/desktop/kmshell/locale/id-ID/strings.xml @@ -315,10 +315,6 @@ Selalu tunjukkan jendela papan tombol di layar ketika papan tombol Keyman dipilih - - Ganti ke bantuan/papan tombol di layar yang sesuai ketika memilih sebuah papan tombol - - Debugging diff --git a/windows/src/desktop/kmshell/locale/it-IT/strings.xml b/windows/src/desktop/kmshell/locale/it-IT/strings.xml index a89759327e..1090d7c064 100644 --- a/windows/src/desktop/kmshell/locale/it-IT/strings.xml +++ b/windows/src/desktop/kmshell/locale/it-IT/strings.xml @@ -343,10 +343,6 @@ Mostra sempre sulla finestra della tastiera a schermo quando è selezionata la tastiera Keyman - - Passa automaticamente a appropriate Tastiera/Aiuto sullo schermo quando viene selezionata una tastiera - - Debug diff --git a/windows/src/desktop/kmshell/locale/km-KH/strings.xml b/windows/src/desktop/kmshell/locale/km-KH/strings.xml index 4c32ffeb1b..722091289d 100644 --- a/windows/src/desktop/kmshell/locale/km-KH/strings.xml +++ b/windows/src/desktop/kmshell/locale/km-KH/strings.xml @@ -343,10 +343,6 @@ បង្ហាញ \"ក្ដារចុចលើអេក្រង់\" ជា​និច្ច នៅពេល​បាន​ជ្រើសរើស​ក្ដារចុច Keyman - - ប្ដូរ​ទៅ \"ក្ដារចុច​លើអេក្រង់/ជំនួយ\" ដែល​ពាក់ព័ន្ធ​ដោយ​ស្វ័យប្រវត្តិ នៅពេល​ក្ដារចុច​ណាមួយត្រូវ​បាន​ជ្រើសរើស​ - - ការប្រមូល​ព័ត៌មានសម្រាប់​ដោះស្រាយ​បញ្ហា diff --git a/windows/src/desktop/kmshell/locale/kn/strings.xml b/windows/src/desktop/kmshell/locale/kn/strings.xml index 4c985d98e0..aa72e7f0ea 100644 --- a/windows/src/desktop/kmshell/locale/kn/strings.xml +++ b/windows/src/desktop/kmshell/locale/kn/strings.xml @@ -335,10 +335,6 @@ ಹೊಸ ಕೀಮ್ಯಾನ್ ಕೀಲಿಮಣೆಯನ್ನು ಆಯ್ಕೆ ಮಾಡಿದಾಗ ತೆರೆಯ ಮೇಲಿನ ಕೀಲಿಮಣೆಯನ್ನು ತೋರಿಸು - - ಬೇರೆ ಕೀಲಿಮಣೆಯನ್ನು ಆಯ್ಕೆ ಮಾಡಿದಾಗ ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಸಹಾಯ ಅಥವಾ ತೆರೆಯ ಮೇಲಿನ ಕೀಲಿಮಣೆಯನ್ನು ಬದಲಿಸು - - ಡೀಬಗ್ ಮಾಡುವುದು diff --git a/windows/src/desktop/kmshell/locale/kr-NG/strings.xml b/windows/src/desktop/kmshell/locale/kr-NG/strings.xml index 509f3e8544..7bdb01ffcd 100644 --- a/windows/src/desktop/kmshell/locale/kr-NG/strings.xml +++ b/windows/src/desktop/kmshell/locale/kr-NG/strings.xml @@ -315,10 +315,6 @@ Sambi yayiScreen Keyboard Window dǝ fulene sa Keyman keyboard dǝ karnǝmiya - - Kalakkǝne rattǝram kalkalma dǝro - - Kadau dǝga kulasne tuluye diff --git a/windows/src/desktop/kmshell/locale/mfi-NG/strings.xml b/windows/src/desktop/kmshell/locale/mfi-NG/strings.xml index 7f3788a37c..f297e652b7 100644 --- a/windows/src/desktop/kmshell/locale/mfi-NG/strings.xml +++ b/windows/src/desktop/kmshell/locale/mfi-NG/strings.xml @@ -315,10 +315,6 @@ A nja a ban kwa Keyboard Window at sikirine ma seke an ksa Keyman keyboard ŋanna gé slera - - Magamaga Switch a dem kalkale sikirin Keyboard/anuga mla ma seke ksanta-ksande keyboard ŋanna - - Debugging diff --git a/windows/src/desktop/kmshell/locale/mnw-MM/strings.xml b/windows/src/desktop/kmshell/locale/mnw-MM/strings.xml index 63d921d4a9..2ea0f1b4dc 100644 --- a/windows/src/desktop/kmshell/locale/mnw-MM/strings.xml +++ b/windows/src/desktop/kmshell/locale/mnw-MM/strings.xml @@ -343,10 +343,6 @@ ယဝ်ရ ကဳဗုဒ်ကဳမာန် ရုဲလဝ်မ္ဂး ပံက် ကဳဗုဒ်ဗၠးမုက် လၟိန် - - ယဝ်ရ ရုဲစှ်လဝ်ကဳဗုဒ်မွဲမွဲမ္ဂး ပံက်ကဵု အရီုဗၚ် မဆက်စပ် ကု ကဳဗုဒ်ဗၠးမုက် - - ဂၠိုက်ဂၠာဲပသောၚ်စၟ diff --git a/windows/src/desktop/kmshell/locale/mrt-NG/strings.xml b/windows/src/desktop/kmshell/locale/mrt-NG/strings.xml index 896f67ddcb..0d8f9580a2 100644 --- a/windows/src/desktop/kmshell/locale/mrt-NG/strings.xml +++ b/windows/src/desktop/kmshell/locale/mrt-NG/strings.xml @@ -315,10 +315,6 @@ Kuga ncha On Screen Keyboard Window ma nagu ga caɗu Keyman keyboard - - Kuga pubila alu On screen Keyboard/ thlia ɓar udzu ma mji a caba keyboard ari - - Debugging diff --git a/windows/src/desktop/kmshell/locale/my/strings.xml b/windows/src/desktop/kmshell/locale/my/strings.xml index 0e8576c65b..c813fe581b 100644 --- a/windows/src/desktop/kmshell/locale/my/strings.xml +++ b/windows/src/desktop/kmshell/locale/my/strings.xml @@ -10,7 +10,6 @@ ထွက်ပါ Keyman? Simulate AltGr with Ctrl+Alt ကီးမန်းကီးဘုတ်ကို ရွေးသည့်အခါတိုင်း Screenမှာပေါ်မှာမြင်ရမည့်ကီးဘုတ် ကိုပြပါ - ကီးဘုတ်ကိုရွေးချယ်ပြီးပါက သင့်လျော်သော Screenမှာပေါ်မှာမြင်ရမည့်ကီးဘုတ်/အကူအညီကို အလိုအလျောက်ပြပါ Debugging အဆင့်မြင့် General diff --git a/windows/src/desktop/kmshell/locale/nl-NL/strings.xml b/windows/src/desktop/kmshell/locale/nl-NL/strings.xml index 4edb9a4e6c..66e9d72b0b 100644 --- a/windows/src/desktop/kmshell/locale/nl-NL/strings.xml +++ b/windows/src/desktop/kmshell/locale/nl-NL/strings.xml @@ -315,10 +315,6 @@ Toon altijd op het scherm toetsenbord wanneer toetsenbord is geselecteerd - - Schakel automatisch over naar toepasselijk bij schermtoetsenbord/Help wanneer een toetsenbord is geselecteerd - - Foutopsporing diff --git a/windows/src/desktop/kmshell/locale/pl-PL/strings.xml b/windows/src/desktop/kmshell/locale/pl-PL/strings.xml index 1702d5b4d1..43aea94ad6 100644 --- a/windows/src/desktop/kmshell/locale/pl-PL/strings.xml +++ b/windows/src/desktop/kmshell/locale/pl-PL/strings.xml @@ -315,10 +315,6 @@ Zawsze pokazuj okno klawiatury ekranowej, gdy wybrana jest klawiatura Keyman - - Automatycznie przełącz na odpowiednią klawiaturę ekranową/stronę pomocy po wybraniu klawiatury - - Debugowanie diff --git a/windows/src/desktop/kmshell/locale/pt-BR/strings.xml b/windows/src/desktop/kmshell/locale/pt-BR/strings.xml index d798b1b43d..5e58460a45 100644 --- a/windows/src/desktop/kmshell/locale/pt-BR/strings.xml +++ b/windows/src/desktop/kmshell/locale/pt-BR/strings.xml @@ -335,10 +335,6 @@ Always show On Screen Keyboard Window when Keyman keyboard is selected - - Switch to appropriate On Screen Keyboard/Help automatically when a keyboard is selected - - Debugging diff --git a/windows/src/desktop/kmshell/locale/pt-PT/strings.xml b/windows/src/desktop/kmshell/locale/pt-PT/strings.xml index 6a1d0df5a4..669dd4f8e2 100644 --- a/windows/src/desktop/kmshell/locale/pt-PT/strings.xml +++ b/windows/src/desktop/kmshell/locale/pt-PT/strings.xml @@ -343,10 +343,6 @@ Mostrar sempre Teclado Virtual enquanto o teclado Keyman estiver selecionado. - - Mudar automaticamente para a Ajuda apropriada do Teclado Virtual quando um teclado for selecionado - - Depuração diff --git a/windows/src/desktop/kmshell/locale/qqq/strings.xml b/windows/src/desktop/kmshell/locale/qqq/strings.xml index 23e31b333b..fe75075025 100644 --- a/windows/src/desktop/kmshell/locale/qqq/strings.xml +++ b/windows/src/desktop/kmshell/locale/qqq/strings.xml @@ -105,7 +105,6 @@ Create a user interface translation for Keyman Desktop at http://www.tavultesoft [!!Ţēśŧ ƒőŗ ćōńƒłĭćţıņġ ȃƥƿŀīčäťīōňş ŵĥēƞ !!]Keyman[!! şťǻřţš!!] [!!Ŕěŀęàšĕ Şĥıƒţ/Ĉţřŀ/Ȁľŧ ōň Őņ Ŝčŗėěń Ķēŷƃơâŕđ ȃƒţēŕ ćŀĭċĸīňģ å ĸȅȳ!!] [!!Äľŵȁƴŝ ŝĥŏŵ Őƞ Šċŕėěń ĶĕƴƄōãřđ Ŵīƞďơŵ ŵĥėń Ķěɏmàƞ ķȇƴƃőáŗď ĩš śēļĕĉţěď!!] - [!!Šŵĭŧčĥ ŧơ āƥƿřőƥŕįáŧė Őŋ Šćŗěėń ƘȅƴƄőãŗđ/Ħȅĺƿ áųťơmăŧĭĉåłŀŷ ŵĥȅņ ȃ ķęȳƀōāŕđ ĭŝ śĕļȇćţȇđ!!] [!!ĎēƄŭģġįƞĝ!!] [!!Ůšēř ĩŋţĕŗƒāĉē łáņģůȃġė...!!] [!!Ɓâśȇ Ƙȇƴɓŏäŕđ...!!] diff --git a/windows/src/desktop/kmshell/locale/ru-RU/strings.xml b/windows/src/desktop/kmshell/locale/ru-RU/strings.xml index b0729d8b54..e659a3f14f 100644 --- a/windows/src/desktop/kmshell/locale/ru-RU/strings.xml +++ b/windows/src/desktop/kmshell/locale/ru-RU/strings.xml @@ -335,10 +335,6 @@ Всегда показывать в экранном окне клавиатуры при выборе клавиатуры - - Переключиться на соответствующую клавиатуру/справку при выборе клавиатуры - - Отладка diff --git a/windows/src/desktop/kmshell/locale/shu-latn/strings.xml b/windows/src/desktop/kmshell/locale/shu-latn/strings.xml index ebf8995a12..b5397a2a83 100644 --- a/windows/src/desktop/kmshell/locale/shu-latn/strings.xml +++ b/windows/src/desktop/kmshell/locale/shu-latn/strings.xml @@ -335,10 +335,6 @@ Matakula eiwari Keyboard albinshaf matakula kan assar Keyman Keyboard - - Eilbarram ley Keyboard albinshaf alsayid/Mi\'awana bey dumta kan azzaltal keyboard - - Debugging diff --git a/windows/src/desktop/kmshell/locale/sv-SE/strings.xml b/windows/src/desktop/kmshell/locale/sv-SE/strings.xml index 7bba7833fe..253c4d849c 100644 --- a/windows/src/desktop/kmshell/locale/sv-SE/strings.xml +++ b/windows/src/desktop/kmshell/locale/sv-SE/strings.xml @@ -335,10 +335,6 @@ Visa alltid på tangentbordsfönstret när tangentbordet är markerat - - Växla till lämplig På skärmen Tangentbord/Hjälp automatiskt när ett tangentbord väljs - - Felsökning diff --git a/windows/src/desktop/kmshell/locale/ta/strings.xml b/windows/src/desktop/kmshell/locale/ta/strings.xml index 38a91f6665..9040263498 100644 --- a/windows/src/desktop/kmshell/locale/ta/strings.xml +++ b/windows/src/desktop/kmshell/locale/ta/strings.xml @@ -315,7 +315,6 @@ Entries not in this file will be sourced from the default locale.xml file in the Test for conflicting applications when Keyman starts Release Shift/Ctrl/Alt on On Screen Keyboard after clicking a key Always show On Screen Keyboard Window when Keyman keyboard is selected - Switch to appropriate On Screen Keyboard/Help automatically when a keyboard is selected Base Keyboard... diff --git a/windows/src/desktop/kmshell/locale/tr/strings.xml b/windows/src/desktop/kmshell/locale/tr/strings.xml index e32f2a09b5..f92561350c 100644 --- a/windows/src/desktop/kmshell/locale/tr/strings.xml +++ b/windows/src/desktop/kmshell/locale/tr/strings.xml @@ -10,7 +10,6 @@ Keyman'tan Çıkış? AltGr'yi Ctrl+Alt ile simüle edin Keyman klavye seçildiğinde daima Ekran Klavyesi Penceresini gösterin - Bir klavye seçildiğinde uygun Ekran Klavyesi/ Yardım'a otomatik olarak geçin Harf imleme tuşlarına düz tuşlar gibi davran Hata Ayıklama Gelişmiş diff --git a/windows/src/desktop/kmshell/locale/uk-UA/strings.xml b/windows/src/desktop/kmshell/locale/uk-UA/strings.xml index 6d2e9e092b..4da38b3878 100644 --- a/windows/src/desktop/kmshell/locale/uk-UA/strings.xml +++ b/windows/src/desktop/kmshell/locale/uk-UA/strings.xml @@ -335,10 +335,6 @@ Завжди показувати на екранному вікні, коли вибрано клавіатуру Keyman - - Автоматично переключатися на відповідну клавіатуру на екрані/допомога при виборі клавіатури - - Відлагодження diff --git a/windows/src/desktop/kmshell/locale/vec/strings.xml b/windows/src/desktop/kmshell/locale/vec/strings.xml index 47c1a96cc7..90d65792e6 100644 --- a/windows/src/desktop/kmshell/locale/vec/strings.xml +++ b/windows/src/desktop/kmshell/locale/vec/strings.xml @@ -10,7 +10,6 @@ Vusto andar fora da Keyman Desktop? Ìmita AltGr co' Ctrl+Alt Mostra senpre ƚa finèstra de ƚa Mapa Tastièra co xé desernìo ƚa tastièra Keyman - Pasa a ƚa pàxena pì pròpia de Mapa Tastièra so Schèrmo co xé desernìo na tastièra Debugging Avansà Xeneral diff --git a/windows/src/desktop/kmshell/locale/vi-VN/strings.xml b/windows/src/desktop/kmshell/locale/vi-VN/strings.xml index 2cf66d5d5a..48241f24c9 100644 --- a/windows/src/desktop/kmshell/locale/vi-VN/strings.xml +++ b/windows/src/desktop/kmshell/locale/vi-VN/strings.xml @@ -343,10 +343,6 @@ Luôn hiện Cửa sổ Bàn phím ảo khi bàn phím Keyman được chọn - - Tự động chuyển sang Bàn phím ảo/Trợ giúp phù hợp khi chọn bàn phím - - Gỡ lỗi diff --git a/windows/src/desktop/kmshell/locale/zh-CN/strings.xml b/windows/src/desktop/kmshell/locale/zh-CN/strings.xml index c9049cd2a9..2bf4c212fa 100644 --- a/windows/src/desktop/kmshell/locale/zh-CN/strings.xml +++ b/windows/src/desktop/kmshell/locale/zh-CN/strings.xml @@ -335,10 +335,6 @@ 选择键盘时,总是在屏幕键盘窗口中显示 - - 当选择键盘时,自动切换到屏幕键盘/帮助 - - 调试中 diff --git a/windows/src/desktop/kmshell/main/UImportOlderVersionSettings.pas b/windows/src/desktop/kmshell/main/UImportOlderVersionSettings.pas index 278f36a2df..7c873d4118 100644 --- a/windows/src/desktop/kmshell/main/UImportOlderVersionSettings.pas +++ b/windows/src/desktop/kmshell/main/UImportOlderVersionSettings.pas @@ -73,7 +73,6 @@ begin kmcom.Options['koKeyboardHotkeysAreToggle'].Value := True; kmcom.Options['koAltGrCtrlAlt'].Value := False; kmcom.Options['koShowHints'].Value := True; - kmcom.Options['koSwitchLanguageForAllApplications'].Value := True; { Startup } kmcom.Options['koShowStartup'].Value := True; @@ -82,7 +81,6 @@ begin { OSK } kmcom.Options['koReleaseShiftKeysAfterKeyPress'].Value := False; kmcom.Options['koAutoOpenOSK'].Value := False; - kmcom.Options['koAutoSwitchOSKPages'].Value := True; //// TODO: kmcom.Options['koShowOSKOnStartup'] := True; { Advanced } // I3629 @@ -109,7 +107,6 @@ begin kmcom.Options['koTestKeymanFunctioning'].Value := not ValueExists(SRegValue_TestKeymanFunctioning) or ReadBool(SRegValue_TestKeymanFunctioning); kmcom.Options['koReleaseShiftKeysAfterKeyPress'].Value := ValueExists(SRegValue_ReleaseShiftKeysAfterKeyPress) and ReadBool(SRegValue_ReleaseShiftKeysAfterKeyPress); - kmcom.Options['koAutoSwitchOSKPages'].Value := not ValueExists(SRegValue_AutoSwitchOSKPages) or ReadBool(SRegValue_AutoSwitchOSKPages); if OpenKeyReadOnly(SRegKey_UpgradeBackupPath_CU + SRegKey_KeymanEngine70_CU+'\hotkeys\1') or OpenKeyReadOnly(SRegKey_UpgradeBackupPath_CU + SRegKey_KeymanEngine70_CU+'\hotkeys\8') then begin diff --git a/windows/src/desktop/kmshell/main/UfrmMain.pas b/windows/src/desktop/kmshell/main/UfrmMain.pas index e367a795ae..a8fdfe9845 100644 --- a/windows/src/desktop/kmshell/main/UfrmMain.pas +++ b/windows/src/desktop/kmshell/main/UfrmMain.pas @@ -623,20 +623,23 @@ procedure TfrmMain.AppEventsMessage(var Msg: tagMSG; var Handled: Boolean); begin inherited; - if (Msg.message = wm_keyman_refresh) and (Msg.WParam = KR_SETTINGS_CHANGED) then + if Msg.message = wm_keyman_refresh then begin - // If we generated this refresh ourselves, ignore it - if (kmcom <> nil) and (Msg.lParam <> KeymanEngineControl.LastRefreshToken) then + if Msg.WParam = KR_SETTINGS_CHANGED then begin - // The refresh event was generated by another process or thread - // - // We may receive the notification multiple times because it is broadcast - // to all top-level windows and we probably have a bunch of them. - // So, if we've already processed it, don't do so again. - if Msg.lParam <> LastRefreshToken then + // If we generated this refresh ourselves, ignore it + if (kmcom <> nil) and (Msg.lParam <> KeymanEngineControl.LastRefreshToken) then begin - LastRefreshToken := Msg.lParam; - DoRefresh; + // The refresh event was generated by another process or thread + // + // We may receive the notification multiple times because it is broadcast + // to all top-level windows and we probably have a bunch of them. + // So, if we've already processed it, don't do so again. + if Msg.lParam <> LastRefreshToken then + begin + LastRefreshToken := Msg.lParam; + DoRefresh; + end; end; end; end; diff --git a/windows/src/desktop/kmshell/startup/help/UfrmTextEditor.pas b/windows/src/desktop/kmshell/startup/help/UfrmTextEditor.pas index d67143e8ee..c923e01a02 100644 --- a/windows/src/desktop/kmshell/startup/help/UfrmTextEditor.pas +++ b/windows/src/desktop/kmshell/startup/help/UfrmTextEditor.pas @@ -144,7 +144,7 @@ type procedure editorKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); private cefFonts: TframeCEFHost; - wm_keyman_control, wm_keyman_refresh: UINT; + wm_keyman_control: UINT; FUpdating: Boolean; FCheckFontsThread: TCheckFontsThread; FCheckFontKeyboards: TCheckFontKeyboards; @@ -154,8 +154,6 @@ type procedure WMUserFormShown(var Message: TMessage); message WM_USER_FormShown; procedure WMUserCheckFonts(var Message: TMessage); message WM_USER_CheckFonts; procedure PostKeymanControlMessage(msg, wParam: UINT; lParam: Cardinal); - {function SendKeymanControlMessage(msg, wParam: UINT; - lParam: Cardinal): Cardinal;} function CurrText: TTextAttributes; procedure GetFontNames; procedure SetEditRect; @@ -248,7 +246,6 @@ procedure TfrmTextEditor.TntFormCreate(Sender: TObject); begin inherited; wm_keyman_control := RegisterWindowMessage('WM_KEYMAN_CONTROL'); - wm_keyman_refresh := RegisterWindowMessage('WM_KEYMANREFRESH'); HelpTopic := 'context/text-editor'; Caption := MsgFromId(SKTextEditorCaption); @@ -349,18 +346,6 @@ begin PostMessage(hKeymanControl, wm_keyman_control, MAKELONG(msg, wParam), lParam); end; -{function TfrmTextEditor.SendKeymanControlMessage(msg: UINT; wParam: UINT; lParam: Cardinal): Cardinal; -var - hKeymanControl: THandle; -begin - hKeymanControl := FindWindow('TApplication', 'keyman'); - if hKeymanControl <> 0 then - Result := SendMessage(hKeymanControl, wm_keyman_control, MAKELONG(msg, wParam), lParam) - else - Result := 0; -end;} - - procedure TfrmTextEditor.LoadWebBox(web: TframeCEFHost; const AdditionalData: WideString = ''); // I4181 var Data: ITextEditorFontsSharedData; @@ -724,7 +709,7 @@ end; procedure TfrmTextEditor.ApplicationEvents1Message(var Msg: tagMSG; var Handled: Boolean); begin - if (Msg.message = wm_keyman_refresh) and (Msg.wParam = KR_REFRESH) then + if (Msg.message = wm_keyman_control) and (Msg.wParam = KMC_REFRESH) then begin StartCheckFontsThread; end; diff --git a/windows/src/desktop/kmshell/util/kmint.pas b/windows/src/desktop/kmshell/util/kmint.pas index 334e0b0409..c63abdbc6c 100644 --- a/windows/src/desktop/kmshell/util/kmint.pas +++ b/windows/src/desktop/kmshell/util/kmint.pas @@ -1,18 +1,18 @@ (* Name: kmint Copyright: Copyright (C) SIL International. - Documentation: - Description: + Documentation: + Description: Create Date: 1 Aug 2006 Modified Date: 26 Jun 2012 Authors: mcdurdin - Related Files: - Dependencies: + Related Files: + Dependencies: - Bugs: - Todo: - Notes: + Bugs: + Todo: + Notes: History: 01 Aug 2006 - mcdurdin - Remove old Keyman 6 integration 01 Aug 2006 - mcdurdin - Look for pxx file in startup folder to determine product to start 05 Nov 2007 - mcdurdin - I937, I1128 - Repair COM object if it fails at startup @@ -43,7 +43,6 @@ function LoadKMCOM: Boolean; const KEYMAN_LAYOUT_CUSTOM = $000005FE; - KR_REFRESH = 2; KR_SETTINGS_CHANGED = 3; const @@ -136,7 +135,7 @@ begin end; procedure CoFreeUnusedLibrariesEx(dwUnloadDelay, dwReserved: DWORD); stdcall; external 'ole32.dll'; - + function LoadKMCOM: Boolean; var msg: string; diff --git a/windows/src/desktop/kmshell/xml/keyman_options.xsl b/windows/src/desktop/kmshell/xml/keyman_options.xsl index 7a085f5808..0d68ca46ca 100644 --- a/windows/src/desktop/kmshell/xml/keyman_options.xsl +++ b/windows/src/desktop/kmshell/xml/keyman_options.xsl @@ -14,7 +14,7 @@
    - + diff --git a/windows/src/desktop/kmshell/xml/strings.xml b/windows/src/desktop/kmshell/xml/strings.xml index 16206a832c..7d6f53c85d 100644 --- a/windows/src/desktop/kmshell/xml/strings.xml +++ b/windows/src/desktop/kmshell/xml/strings.xml @@ -434,11 +434,6 @@ Always show On Screen Keyboard Window when Keyman keyboard is selected - - - - Switch to appropriate On Screen Keyboard/Help automatically when a keyboard is selected - diff --git a/windows/src/desktop/setup/bootstrapmain.pas b/windows/src/desktop/setup/bootstrapmain.pas index 28ac6a6257..0c9c258cd8 100644 --- a/windows/src/desktop/setup/bootstrapmain.pas +++ b/windows/src/desktop/setup/bootstrapmain.pas @@ -416,7 +416,7 @@ function TSetupBootstrap.CheckForOldVersionScenario: Boolean; // I4460 var OldKMShellPath: string; begin - if not (GetOS in [osLegacy, osVista]) then // I4365 + if GetOS <> osLegacy then // I4365 Exit(False); if FInstallInfo.Packages.Count = 0 then diff --git a/windows/src/engine/.gitignore b/windows/src/engine/.gitignore index e17dcb3de7..b5eaf968f8 100644 --- a/windows/src/engine/.gitignore +++ b/windows/src/engine/.gitignore @@ -3,6 +3,9 @@ keyman32/keyman-debug-etw.h keyman32/keyman-debug-etw.rc keyman32/keyman-debug-etw.res keyman32/keyman-debug-etwTEMP.BIN +keymanhp/versionarm64.res +keymanhp/versionx64.res +kmcomapi/kbd_noicon.res mcompile/Debug # Visual Studio packages for test diff --git a/windows/src/engine/keyman/GlobalKeyboardChangeManager.pas b/windows/src/engine/keyman/GlobalKeyboardChangeManager.pas deleted file mode 100644 index 22d5509a96..0000000000 --- a/windows/src/engine/keyman/GlobalKeyboardChangeManager.pas +++ /dev/null @@ -1,142 +0,0 @@ -unit GlobalKeyboardChangeManager; - -interface - -uses - Winapi.Windows, - Winapi.Messages, - System.Classes, - System.SysUtils, - - Keyman.System.SharedBuffers, - LangSwitchManager; - -type - TGlobalKeyboardChangeManager = class(TThread) - private type - TLastKeyboard = record - TIP: TSelectKeyboardBuffer; - Keyboard: HKL; - end; - private var - FWindow: HWND; - FLastKeyboard: TLastKeyboard; - procedure WndProc(var Message: TMessage); - procedure ProcessChange(Mode: Integer; Param: NativeUInt); - protected - procedure Execute; override; - public - constructor Create; - destructor Destroy; override; - - procedure PostChange(Keyboard: TLangSwitchKeyboard); - end; - -implementation - -uses - Keyman.System.DebugLogClient, - UfrmKeyman7Main; - -const - WM_USER_DESTROY = WM_USER + 1; - WM_USER_CHANGE = WM_USER + 2; - -{ TGlobalKeyboardChangeManager } - -constructor TGlobalKeyboardChangeManager.Create; -begin - inherited Create(False); -end; - -destructor TGlobalKeyboardChangeManager.Destroy; -begin - if FWindow <> 0 then - PostMessage(FWindow, WM_USER_DESTROY, 0, 0); - inherited Destroy; -end; - -procedure TGlobalKeyboardChangeManager.Execute; -var - msg: TMsg; -begin - FWindow := AllocateHwnd(WndProc); // TODO: Not thread safe! - while GetMessage(msg, 0, 0, 0) do - begin - DispatchMessage(msg); - end; - DeallocateHwnd(FWindow); -end; - -procedure TGlobalKeyboardChangeManager.PostChange( - Keyboard: TLangSwitchKeyboard); -var - TIP: TLangSwitchKeyboard_TIP; - WinKB: TLangSwitchKeyboard_WinKeyboard; - lk: TLastKeyboard; - FIdentity: DWORD; -begin - lk := FLastKeyboard; - - if Keyboard is TLangSwitchKeyboard_TIP then - begin - TIP := Keyboard as TLangSwitchKeyboard_TIP; - - lk.TIP.LangID := TIP.Profile.langid; - lk.TIP.CLSID := TIP.Profile.clsid; - lk.TIP.GUIDProfile := TIP.Profile.guidProfile; - TDebugLogClient.Instance.WriteMessage('TGlobalKeyboardChangeManager.PostChange TIP', []); - - if not CompareMem(@lk, @FLastKeyboard, SizeOf(TLastKeyboard)) then - begin - FLastKeyboard := lk; - FIdentity := TSharedBufferManager.Identity.WriteSelectKeyboardBuffer(lk.TIP); - PostMessage(FWindow, WM_USER_CHANGE, KMCI_SELECTKEYBOARD_BACKGROUND_TSF, FIdentity); - end; - end - else if Keyboard is TLangSwitchKeyboard_WinKeyboard then - begin - WinKB := Keyboard as TLangSwitchKeyboard_WinKeyboard; - lk.Keyboard := WinKB.HKL; - - TDebugLogClient.Instance.WriteMessage('TGlobalKeyboardChangeManager.PostChange HKL', []); - - if not CompareMem(@lk, @FLastKeyboard, SizeOf(TLastKeyboard)) then - begin - FLastKeyboard := lk; - PostMessage(FWindow, WM_USER_CHANGE, KMCI_SELECTKEYBOARD_BACKGROUND, lk.Keyboard); - end; - end - else - begin - Exit; - end; - -end; - -procedure TGlobalKeyboardChangeManager.ProcessChange(Mode: Integer; Param: NativeUInt); -begin - SendMessageTimeout(HWND_BROADCAST, wm_keyman_control_internal, Mode, Param, SMTO_ABORTIFHUNG, 250, nil); -end; - -procedure TGlobalKeyboardChangeManager.WndProc(var Message: TMessage); -begin - with Message do - begin - case Message.Msg of - WM_USER_DESTROY: - DestroyWindow(FWindow); - WM_DESTROY: - begin - PostQuitMessage(0); - Result := 0; - end; - WM_USER_CHANGE: - ProcessChange(WParam, LParam); - else - Message.Result := DefWindowProc(FWindow, Msg, WParam, LParam); - end; - end; -end; - -end. diff --git a/windows/src/engine/keyman/UfrmKeyman7Main.pas b/windows/src/engine/keyman/UfrmKeyman7Main.pas index 4b51f337c1..852161ccc5 100644 --- a/windows/src/engine/keyman/UfrmKeyman7Main.pas +++ b/windows/src/engine/keyman/UfrmKeyman7Main.pas @@ -153,8 +153,6 @@ uses Keyman.System.FrameworkInputPane, keymanapi_TLB, -//TOUCH UfrmTouchKeyboard, - GlobalKeyboardChangeManager, UfrmVisualKeyboard, IntegerList, KeymanTrayIcon, @@ -221,10 +219,7 @@ type FLangSwitchRefreshWatcher: TThread; FLastFocus: THandle; FLastActive: THandle; - //FLastKeymanID: Integer; - FLastHKL: Integer; FLangSwitchManager: TLangSwitchManager; // I3933 - FGlobalKeyboardChangeManager: TGlobalKeyboardChangeManager; // I4271 FActiveHKL: Integer; FTrayIcon: TIcon; // I4359 @@ -255,7 +250,6 @@ type procedure TrayIconMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure TrayIconDblClick(Sender: TObject); - //function CreateKeymanMenuItem(Owner: TPopupMenu; rp: TRunningProduct; cmi: IKeymanCustomisationMenuItem): TKeymanMenuItem; function AppMessage(var Message: TMessage): Boolean; procedure TestKeymanFunctioning(FunctionType: TTestKeymanFunctionType; RunOnSuccess, ResetCounter: Boolean); function ShouldTestKeymanFunctioning: Boolean; @@ -264,13 +258,10 @@ type procedure UpdateOSKVisibility; function GetOption_AutoOpenOSK: Boolean; - function GetOption_AutoSwitchOSKPages: Boolean; - //procedure SnapToolHelp; procedure RecreateTaskbarIcons; function StartKeymanEngine: Boolean; procedure StartKeymanHostProcess(ProcessName: string); procedure OpenTextEditor; - //function GetCachedKeymanID(hkl: DWORD): DWORD; procedure ShowLanguageSwitchForm; procedure LanguageSwitchFormHidden(Sender: TObject); procedure RegisterControllerWindows; // I3092 @@ -280,13 +271,7 @@ type function GetActiveKeymanID: Integer; // I3949 procedure RequestCurrentActiveKeyboard(Command: WORD); // I3961 function ProcessWMKeymanControl(Command, WParam: Word; LParam: DWord): LResult; // I3961 -//TOUCH procedure HideTouchKeyboard; -//TOUCH procedure ShowTouchKeyboard; -//TOUCH function UseTouchKeyboard: Boolean; -//TOUCH function TouchKeyboardVisible: Boolean; -//TOUCH procedure ProcessContextChange(Atom: DWORD); - procedure PostGlobalKeyboardChange(FActiveKeyboard: TLangSwitchKeyboard); // I4271 function IsControllerWindow(AHandle: THandle): Boolean; // I4731 procedure UpdateFocusInfo; // I4731 procedure UnregisterControllerWindows; // I4731 @@ -341,16 +326,16 @@ type property LangSwitchManager: TLangSwitchManager read FLangSwitchManager; // I3933 property Option_AutoOpenOSK: Boolean read GetOption_AutoOpenOSK; - property Option_AutoSwitchOSKPages: Boolean read GetOption_AutoSwitchOSKPages; end; var frmKeyman7Main: TfrmKeyman7Main; hProgramMutex: THandle; - wm_keyman_globalswitch, wm_keyman_globalswitch_process, wm_keyman_control, wm_keyman_control_internal, wm_test_keyman_functioning: Cardinal; + wm_keyman_control, wm_keyman_control_internal, wm_test_keyman_functioning: Cardinal; FEnableCrashTest: Boolean = False; + wm_keyman_refresh: Cardinal; const KMC_StartProduct = 0; @@ -406,7 +391,7 @@ uses klog, GetOsVersion, System.StrUtils, - System.Win.ComObj, {tlhelp32,} + System.Win.ComObj, VistaMessages, Vcl.AxCtrls, Vcl.Buttons, @@ -470,8 +455,6 @@ begin rp.FTrayIcon.OnMouseUp := TrayIconMouseUp; rp.FTrayIcon.OnDblClick := TrayIconDblClick; rp.FTrayIcon.OnUnresponsive := TrayIconUnresponsive; - //rp.FTrayIcon.OnClick := TrayIconClick; -// rp.FTrayIcon.Icon.ReleaseHandle; rp.FTrayIcon.Icon.Assign(FTrayIcon); rp.FTrayIcon.Hint := MsgFromId(SKApplicationTitle); rp.FTrayIcon.Visible := True; @@ -503,16 +486,10 @@ procedure TfrmKeyman7Main.FormCreate(Sender: TObject); begin TKeymanSentryClient.Breadcrumb('trace', 'TfrmKeyman7Main.FormCreate'); - if GetOs in [osVista, osWin7] then // I4576 - FGlobalKeyboardChangeManager := TGlobalKeyboardChangeManager.Create; // I4271 - frmKeymanMenu := TfrmKeymanMenu.Create(Self); FLangSwitchManager := TLangSwitchManager.Create; // I3933 - //FLastKeymanID := -1; - FLastHKL := GetKeyboardLayout(0); - try GetDebugManager(Handle); except @@ -521,7 +498,6 @@ begin end; Application.HookMainWindow(AppMessage); -// FRunningProduct := TRunningProduct.Create; sMsg_TaskbarRestart := RegisterWindowMessage('TaskbarCreated'); ChangeWindowMessageFilter(sMsg_TaskbarRestart, MSGFLT_ADD); @@ -531,11 +507,6 @@ begin PostMessage(Handle, WM_USER_Start, 0, 0); end; -{procedure TfrmKeyman7Main.AppDebug(var Msg: TMsg; var Handled: Boolean); -begin - KL.Log('MESSAGE %8.8x %x [%x, %x]', [Msg.hwnd, Msg.message, Msg.wParam, Msg.lParam]); -end;} - procedure TfrmKeyman7Main.FormDestroy(Sender: TObject); begin TKeymanSentryClient.Breadcrumb('trace', 'TfrmKeyman7Main.FormDestroy'); @@ -556,8 +527,6 @@ begin end; if Assigned(frmVisualKeyboard) then // I1096 - silent exception when Keyman closes begin - //frmVisualKeyboard.Hide; - //frmVisualKeyboard.Release; FreeAndNil(frmVisualKeyboard); // I2692 end; @@ -575,10 +544,7 @@ begin kmint.KeymanEngineControl.ShutdownKeyman32Engine; FreeAndNil(FLangSwitchManager); // I3933 - //Windows.MessageBox(Handle, PChar(IntToStr(kmcom._AddRef)), 'RefCount+1', MB_OK); kmint.kmcom := nil; // I5132 - - FreeAndNil(FGlobalKeyboardChangeManager); // I4271 end; function TfrmKeyman7Main.GetOption_AutoOpenOSK: Boolean; @@ -586,11 +552,6 @@ begin Result := kmcom.Options.Items['koAutoOpenOSK'].Value; end; -function TfrmKeyman7Main.GetOption_AutoSwitchOSKPages: Boolean; -begin - Result := kmcom.Options.Items['koAutoSwitchOSKPages'].Value; -end; - function TfrmKeyman7Main.IsControllerWindow(AHandle: THandle): Boolean; // I4731 begin Result := GetWindowThreadProcessId(AHandle, nil) = GetCurrentThreadId; @@ -697,6 +658,10 @@ begin end; function TfrmKeyman7Main.AppMessage(var Message: TMessage): Boolean; +var + hwndTextEditor: THandle; +const + KR_PRE_REFRESH = 1; begin if Message.Msg = WM_ACTIVATEAPP then begin @@ -717,16 +682,18 @@ begin frmVisualKeyboard.Dispatch(Message); Result := False; end - else if Message.Msg = wm_keyman_globalswitch then + else if Message.Msg = wm_keyman_refresh then begin - TDebugLogClient.Instance.WriteMessage('wm_keyman_globalswitch for Application Handle: %x %x', [Message.wParam, Message.lParam]); - - case Message.wParam of - skHKL, // A windows language has been selected so select the most appropriate Keyman keyboard - skSelectHKL: // Select the requested Windows language (and therefore the most appropriate Keyman keyboard) - FLastHKL := Message.lParam; + if Message.WParam = KR_PRE_REFRESH then + begin + // The text editor needs a special prod for keyboard changes + hwndTextEditor := FindWindow('TfrmTextEditor', nil); + if hwndTextEditor <> 0 then + begin + PostMessage(hwndTextEditor, wm_keyman_control, KMC_REFRESH, 0); + end; end; - Result := True; + Result := False; end else if Message.Msg = wm_keyman_control then begin @@ -779,10 +746,6 @@ begin Result := 0; case Command of - KMC_GETLASTHKL: - begin - Result := FLastHKL; - end; KMC_SETFOCUSINFO: begin @@ -800,10 +763,6 @@ begin then ShowVisualKeyboard else HideVisualKeyboard; end; - KMC_GETLOADED: - begin - if IsProductLoaded then Result := 1 else Result := 0; - end; KMC_REFRESH: begin if wParam = 1 then @@ -871,11 +830,6 @@ begin Sleep(5000); TDebugLogClient.Instance.WriteMessage('kmc_fakefreeze end', []); end; -//TOUCH KMC_CONTEXT: -//TOUCH begin -//TOUCH if LParam <> 0 then -//TOUCH ProcessContextChange(LParam); -//TOUCH end; end; end; @@ -1126,16 +1080,6 @@ begin // I3933 frmKeymanMenu.PopupEx(mnu, pt.x, pt.y, systraylocation); // I3990 end; -procedure TfrmKeyman7Main.PostGlobalKeyboardChange(FActiveKeyboard: TLangSwitchKeyboard); // I4271 -begin - if Assigned(FActiveKeyboard) and - Assigned(kmcom) and - (GetOs in [osVista, osWin7]) and // I4576 // I4576 // I4576 - kmcom.Options.Items['koSwitchLanguageForAllApplications'].Value and - Assigned(FGlobalKeyboardChangeManager) then - FGlobalKeyboardChangeManager.PostChange(FActiveKeyboard); -end; - procedure TfrmKeyman7Main.TrayIconDblClick(Sender: TObject); begin SetLastFocus; @@ -1241,13 +1185,13 @@ begin // #12905: icon is otherwise invalid TKeymanSentryClient.ReportHandledException(E, 'SetTrayIcon: Invalid icon for keyboard "'+kbd.ID+'"; icon filename "'+kbd.IconFilename+'"'); // Use the default app icon - rp.FTrayIcon.Icon.Assign(FTrayIcon); + rp.FTrayIcon.Icon.Assign(FTrayIcon); end; end else begin // Use the default app icon - rp.FTrayIcon.Icon.Assign(FTrayIcon); + rp.FTrayIcon.Icon.Assign(FTrayIcon); end; if VisualKeyboardVisible then @@ -1323,8 +1267,6 @@ begin end; end; - //Windows.MessageBox(Handle, PChar(IntToStr(kmcom._AddRef)), 'RefCount+1', MB_OK); - try kmcom.AutoApply := False; kmcom.Keyboards.Apply; @@ -1429,8 +1371,6 @@ begin GlobalDeleteAtom(HiWord(CommandAndAtom)); // I3949 buf := buftext; - //OutputDebugString(PChar('ProcessProfileChange("'+buf+'")'#13#10)); - {debug := } StrToken(buf, '|'); // I4285 if not TryStrToInt(StrToken(buf, '|'), FLangID) then Exit; @@ -1508,18 +1448,11 @@ begin UpdateOSKVisibility; end; - PostGlobalKeyboardChange(FActiveKeyboard); // I4271 - if Assigned(frmVisualKeyboard) then // I3949 begin frmVisualKeyboard.RefreshSelectedKeyboard; // I2398 end; -//TOUCH if Assigned(frmTouchKeyboard) then -//TOUCH begin -//TOUCH frmTouchKeyboard.RefreshSelectedKeyboard; -//TOUCH end; - if wCommand = PC_UPDATE_LANGUAGESWITCH then // I4124 begin // TODO fixup product id //OutputDebugString(PChar('Showing language switch form'#13#10)); @@ -1583,7 +1516,6 @@ begin Exit; end; - //Windows.SetForegroundWindow(FLastFocus); //FLastActive); if Winapi.Windows.SetFocus(FLastFocus) = 0 then TDebugLogClient.Instance.WriteLastError('SetLastFocus', 'SetFocus'); @@ -1701,19 +1633,9 @@ end; procedure TfrmKeyman7Main.MnuVisualKeyboard(Sender: TObject); begin SetLastFocus; // I1289 - Focus not returned to active app when OSK opened - -//TOUCH if UseTouchKeyboard then -//TOUCH begin -//TOUCH if TouchKeyboardVisible -//TOUCH then HideTouchKeyboard -//TOUCH else ShowTouchKeyboard; -//TOUCH end -//TOUCH else -//TOUCH begin - if VisualKeyboardVisible(apKeyboard) - then HideVisualKeyboard - else ShowVisualKeyboard(apKeyboard); -//TOUCH end; + if VisualKeyboardVisible(apKeyboard) + then HideVisualKeyboard + else ShowVisualKeyboard(apKeyboard); end; procedure TfrmKeyman7Main.MnuFontHelper(Sender: TObject); @@ -1753,12 +1675,6 @@ procedure TfrmKeyman7Main.HideVisualKeyboard; begin if not Assigned(kmcom) and not StartKeymanEngine then Exit; -//TOUCH if UseTouchKeyboard then -//TOUCH begin -//TOUCH HideTouchKeyboard; -//TOUCH Exit; -//TOUCH end; - if Assigned(frmVisualKeyboard) then // I1274 - Avoid crash when closing OSK when already closed! frmVisualKeyboard.Release; end; @@ -1767,14 +1683,6 @@ procedure TfrmKeyman7Main.ShowVisualKeyboard(Page: TOSKActivePage); begin if not Assigned(kmcom) and not StartKeymanEngine then Exit; -//TOUCH if UseTouchKeyboard then -//TOUCH begin -//TOUCH ShowTouchKeyboard; -//TOUCH Exit; -//TOUCH end; - -//TOUCH HideTouchKeyboard; - if not Assigned(frmVisualKeyboard) then // I1274 - Related, don't recreate OSK if already exists begin frmVisualKeyboard := TfrmVisualKeyboard.Create(nil); @@ -1791,11 +1699,6 @@ begin Result := Assigned(frmVisualKeyboard) and ((Page = apUndefined) or (frmVisualKeyboard.ActivePage = Page)); end; -//TOUCH function TfrmKeyman7Main.TouchKeyboardVisible: Boolean; -//TOUCH begin -//TOUCH Result := Assigned(frmTouchKeyboard); -//TOUCH end; - procedure TfrmKeyman7Main.TestKeymanFunctioning(FunctionType: TTestKeymanFunctionType; RunOnSuccess, ResetCounter: Boolean); begin tmrTestKeymanFunctioning.Enabled := False; @@ -1826,41 +1729,6 @@ begin end; end; -//TOUCH procedure TfrmKeyman7Main.ShowTouchKeyboard; -//TOUCH var -//TOUCH FProduct: IKeymanProduct; -//TOUCH begin -//TOUCH if not Assigned(kmcom) and not StartKeymanEngine then Exit; -//TOUCH -//TOUCH if Assigned(frmVisualKeyboard) then // I1274 - Avoid crash when closing OSK when already closed! -//TOUCH frmVisualKeyboard.Release; -//TOUCH -//TOUCH if not Assigned(frmTouchKeyboard) then -//TOUCH begin -//TOUCH FProduct := ProductFromMenuItem(nil); -//TOUCH if not Assigned(FProduct) then Exit; -//TOUCH -//TOUCH frmTouchKeyboard := TfrmTouchKeyboard.Create(nil, FProduct); -//TOUCH frmTouchKeyboard.FreeNotification(Self); -//TOUCH frmTouchKeyboard.SetContext(FCurrentContext); -//TOUCH //frmTouchKeyboard.Show; -//TOUCH end; -//TOUCH end; - -//TOUCH procedure TfrmKeyman7Main.HideTouchKeyboard; -//TOUCH begin -//TOUCH if not Assigned(kmcom) and not StartKeymanEngine then Exit; -//TOUCH -//TOUCH FreeAndNil(frmTouchKeyboard); -//TOUCH end; - -//TOUCH function TfrmKeyman7Main.UseTouchKeyboard: Boolean; -//TOUCH begin -//TOUCH if not Assigned(kmcom) -//TOUCH then Result := False -//TOUCH else Result := kmcom.Options['koUseTouchLayout'].Value; -//TOUCH end; - procedure TfrmKeyman7Main.tmrCheckInputPaneTimer(Sender: TObject); var r: TRect; @@ -2115,13 +1983,10 @@ end; initialization wm_test_keyman_functioning := RegisterWindowMessage('wm_test_keyman_functioning'); - wm_keyman_globalswitch := RegisterWindowMessage('WM_KEYMAN_GLOBALSWITCH'); - wm_keyman_globalswitch_process := RegisterWindowMessage('WM_KEYMAN_GLOBALSWITCH_PROCESS'); wm_keyman_control := RegisterWindowMessage('WM_KEYMAN_CONTROL'); wm_keyman_control_internal := RegisterWindowMessage('WM_KEYMAN_CONTROL_INTERNAL'); // I3933 + wm_keyman_refresh := RegisterWindowMessage('WM_KEYMANREFRESH'); ChangeWindowMessageFilter(wm_keyman_control, MSGFLT_ADD); - ChangeWindowMessageFilter(wm_keyman_globalswitch, MSGFLT_ADD); - ChangeWindowMessageFilter(wm_keyman_globalswitch_process, MSGFLT_ADD); ChangeWindowMessageFilter(wm_keyman_control_internal, MSGFLT_ADD); // I3933 end. diff --git a/windows/src/engine/keyman/keyman.dpr b/windows/src/engine/keyman/keyman.dpr index dadcca01fc..08cb417a59 100644 --- a/windows/src/engine/keyman/keyman.dpr +++ b/windows/src/engine/keyman/keyman.dpr @@ -86,7 +86,6 @@ uses Keyman.System.Util.RenderLanguageIcon in '..\..\..\..\common\windows\delphi\ui\Keyman.System.Util.RenderLanguageIcon.pas', TempFileManager in '..\..\..\..\common\windows\delphi\general\TempFileManager.pas', utiltsf in '..\..\global\delphi\general\utiltsf.pas', - GlobalKeyboardChangeManager in 'GlobalKeyboardChangeManager.pas', utilwow64 in '..\..\global\delphi\general\utilwow64.pas', USendInputString in '..\..\global\delphi\general\USendInputString.pas', Upload_Settings in '..\..\..\..\common\windows\delphi\general\Upload_Settings.pas', diff --git a/windows/src/engine/keyman/keyman.dproj b/windows/src/engine/keyman/keyman.dproj index aa70b2ab7b..2784f6c3b4 100644 --- a/windows/src/engine/keyman/keyman.dproj +++ b/windows/src/engine/keyman/keyman.dproj @@ -211,7 +211,6 @@ - diff --git a/windows/src/engine/keyman/kmint.pas b/windows/src/engine/keyman/kmint.pas index 76170998d0..6d1f937d18 100644 --- a/windows/src/engine/keyman/kmint.pas +++ b/windows/src/engine/keyman/kmint.pas @@ -48,8 +48,7 @@ uses MessageIdentifiers; const - KR_REQUEST_REFRESH = 0; // Send this to any window, which will make Keyman post a KR_REFRESH to all top-level windows - KR_REFRESH = 2; // Finally this message get sent to all the other top-level windows in the system. + KR_REQUEST_REFRESH = 0; // Send this to any window, which will make Keyman post a KR_PRE_REFRESH to controllers, which will cause all threads to eventually refresh keyboards list KR_SETTINGS_CHANGED = 3; function KeymanCustomisation: IKeymanCustomisation; diff --git a/windows/src/engine/keyman/viskbd/UfrmVisualKeyboard.pas b/windows/src/engine/keyman/viskbd/UfrmVisualKeyboard.pas index 5fc1d0ed9d..811b9cb075 100644 --- a/windows/src/engine/keyman/viskbd/UfrmVisualKeyboard.pas +++ b/windows/src/engine/keyman/viskbd/UfrmVisualKeyboard.pas @@ -1000,11 +1000,11 @@ begin end; procedure TfrmVisualKeyboard.WMKeymanOskModifierEvent(var Message: TMessage); -begin - if Assigned(FOnScreenKeyboard) then - FOnScreenKeyboard.OskModifierEvent(Message.WParam, Message.LParam); -end; - +begin + if Assigned(FOnScreenKeyboard) then + FOnScreenKeyboard.OskModifierEvent(Message.WParam, Message.LParam); +end; + procedure TfrmVisualKeyboard.AdjustToClosestMonitor(var x, y, cx, cy: Integer); var m: TMonitor; @@ -1589,7 +1589,6 @@ procedure TfrmVisualKeyboard.UpdateActivePage; begin if ActivePage in [apUndefined, apKeyboard] then // I2287 begin - {$MESSAGE HINT 'eliminate Option_AutoSwitchOSKPages'} LoadKeyboard; if (frmKeyman7Main.ActiveKeymanID = KEYMANID_NONKEYMAN) or FOnScreenKeyboard.HasVisualKeyboard(frmKeyman7Main.ActiveKeymanID) then // I3949 ActivePage := apKeyboard diff --git a/windows/src/engine/keyman32/appint/aiTIP.cpp b/windows/src/engine/keyman32/appint/aiTIP.cpp index be657e4a12..b1b0345556 100644 --- a/windows/src/engine/keyman32/appint/aiTIP.cpp +++ b/windows/src/engine/keyman32/appint/aiTIP.cpp @@ -68,6 +68,7 @@ extern "C" __declspec(dllexport) BOOL WINAPI TIPActivateKeyboard(GUID *profile) PKEYMAN64THREADDATA _td = ThreadGlobals(); if(!_td) return FALSE; + RefreshThreadKeyboardsIfRequired(); RefreshToggleState(); if(profile != NULL) { diff --git a/windows/src/engine/keyman32/globals.h b/windows/src/engine/keyman32/globals.h index 9db8044394..02b799f1ed 100644 --- a/windows/src/engine/keyman32/globals.h +++ b/windows/src/engine/keyman32/globals.h @@ -88,8 +88,15 @@ public: static DWORD *ShiftState(); -#ifndef _WIN64 static LONG *RefreshTag(); + static LONG get_RefreshTag(); + +#ifndef _WIN64 + static HWND get_hwndHostX64(); + static HWND get_hwndHostARM64(); + + static HWND *hwndHostX64(); + static HWND *hwndHostARM64(); #endif static HHOOK get_hhookGetMessage(); @@ -216,8 +223,7 @@ typedef struct tagKEYMAN64THREADDATA BOOL CoreProcessEventRun; // True if core process event has been run BOOL FInRefreshKeyboards; - BOOL RefreshRequired; - LONG RefreshTag_Thread; // TODO: we may be able to eliminate this with our delayed refresh pattern? + LONG RefreshTag_Thread; /* Addin Globals */ diff --git a/windows/src/engine/keyman32/k32_globals.cpp b/windows/src/engine/keyman32/k32_globals.cpp index 807b246466..19d2b0a12e 100644 --- a/windows/src/engine/keyman32/k32_globals.cpp +++ b/windows/src/engine/keyman32/k32_globals.cpp @@ -95,6 +95,12 @@ BOOL isKeymanKeyboardActive = FALSE; static DWORD dwTlsIndex = TLS_OUT_OF_INDEXES; static CRITICAL_SECTION csGlobals; +// In order that every thread starts off needing a refresh, we set the starting +// refresh tag to 1, but the thread-level refresh tag will be 0 (initialized by +// `LocalAlloc(LPTR)`) +#define INITIAL_GLOBAL_REFRESH_TAG 1 +#define INITIAL_THREAD_REFRESH_TAG 0 + PKEYMAN64THREADDATA Globals_InitThread() { EnterCriticalSection(&csGlobals); @@ -269,9 +275,13 @@ static wchar_t __declspec(align(8)) static UINT f_vk_prefix = 0; -#ifndef _WIN64 __declspec(align(8)) static LONG - f_RefreshTag = 0; + f_RefreshTag = INITIAL_GLOBAL_REFRESH_TAG; + +#ifndef _WIN64 +__declspec(align(8)) static HWND + f_hwndHostX64 = 0, + f_hwndHostARM64 = 0; #endif static BOOL @@ -310,8 +320,15 @@ DWORD *Globals::InitialisingThread() { return &f_InitialisingThread; } // I43 DWORD *Globals::ShiftState() { return &f_ShiftState; } -#ifndef _WIN64 LONG *Globals::RefreshTag() { return &f_RefreshTag; } +LONG Globals::get_RefreshTag() { return f_RefreshTag; } + +#ifndef _WIN64 +HWND Globals::get_hwndHostX64() { return f_hwndHostX64; } +HWND *Globals::hwndHostX64() { return &f_hwndHostX64; } + +HWND Globals::get_hwndHostARM64() { return f_hwndHostARM64; } +HWND *Globals::hwndHostARM64() { return &f_hwndHostARM64; } #endif HHOOK Globals::get_hhookCallWndProc() { return f_hhookCallWndProc; } @@ -436,8 +453,10 @@ BOOL Globals::ResetControllers() // I3092 f_FSingleThread = FALSE; f_hwndIM = 0; f_hwndIMAlways = 0; + f_RefreshTag = INITIAL_GLOBAL_REFRESH_TAG; #ifndef _WIN64 - f_RefreshTag = 0; + f_hwndHostX64 = NULL; + f_hwndHostARM64 = NULL; #endif Globals::Unlock(); diff --git a/windows/src/engine/keyman32/keyman32.cpp b/windows/src/engine/keyman32/keyman32.cpp index 312865c61f..c60f674bf5 100644 --- a/windows/src/engine/keyman32/keyman32.cpp +++ b/windows/src/engine/keyman32/keyman32.cpp @@ -106,6 +106,9 @@ HINSTANCE g_hInstance; +void RefreshKeyboards(); +void LoadKeyboardSettings(); + /*******************************************************************************************/ /* */ /* Keyman Initialisation */ @@ -216,7 +219,7 @@ BOOL InitThread() _td->FInitialising = TRUE; // Control re-entrancy, this is thread safe because the variable is per-thread - RefreshKeyboards(TRUE); + LoadKeyboardSettings(); _td->FInitialising = FALSE; // Control re-entrancy, this is thread safe because the variable is per-thread @@ -412,7 +415,9 @@ extern "C" BOOL _declspec(dllexport) WINAPI Keyman_Initialise(HWND Handle, BOOL UpdateActiveWindows(); *Globals::Keyman_Initialised() = TRUE; - RefreshKeyboards(TRUE); // I4786 + + // We initialize keyboards on the controller thread immediately + RefreshThreadKeyboardsIfRequired(); SendDebugMessageFormat("Keyman is now initialised"); @@ -576,27 +581,15 @@ extern "C" DWORD _declspec(dllexport) WINAPI GetActiveKeymanID() // //--------------------------------------------------------------------------------------------------------- -// This function prevents a refresh event from being processed more than once -// by a thread, for instance if a thread has multiple top-level windows -BOOL UpdateRefreshTag(LONG tag) // I1835 - Reduce chatter -{ +void HandleRefresh(int code, LONG tag) { PKEYMAN64THREADDATA _td = ThreadGlobals(); - if(!_td) return FALSE; - if(_td->RefreshTag_Thread != tag) - { - _td->RefreshTag_Thread = tag; - return TRUE; - } - return FALSE; -} + if(!_td) return; -void HandleRefresh(int code, LONG tag) -{ switch (code) { case KR_REQUEST_REFRESH: // This is sent by Keyman COM API, ApplyToRunningKeymanEngine - SendDebugMessageFormat("#### Refresh Requested ####"); + SendDebugMessageFormat("HandleRefresh(KR_REQUEST_REFRESH, %d); global refresh tag = %d; input thread refresh tag = %d", tag, Globals::get_RefreshTag(), _td->RefreshTag_Thread); // We ask the master controller window to tell all instances // of keyman32/keyman64 that a refresh is coming through @@ -608,41 +601,34 @@ void HandleRefresh(int code, LONG tag) break; case KR_PRE_REFRESH: + + SendDebugMessageFormat("HandleRefresh(KR_PRE_REFRESH, %d); global refresh tag = %d; input thread refresh tag = %d", tag, Globals::get_RefreshTag(), _td->RefreshTag_Thread); + + // The tag parameter will be zero for x86 controller, but will be the + // current tag for other architectures, coming from the x86 controller + + if(Globals::get_InitialisingThread() != GetCurrentThreadId()) { + SendDebugMessageFormat("HandleRefresh: unexpected KR_PRE_REFRESH on a non-controller thread"); + break; + } + #ifndef _WIN64 - // We only need to broadcast the message from Win32; this avoids - // a double-broadcast which could happen if both keyman32 and keyman64 - // receive the message, as they have independently managed RefreshTags + // This RefreshTag is only ever incremented here by the controller thread + // for x86 so this is a thread safe operation + *Globals::RefreshTag() = Globals::get_RefreshTag() + 1; - // This RefreshTag is only ever incremented here by the master controller - // so this is a thread safe operation - tag = ++(*Globals::RefreshTag()); - - if (UpdateRefreshTag(tag)) { - // The Keyman process gets the update first - RefreshKeyboards(FALSE); - PostMessage(HWND_BROADCAST, wm_keyman_refresh, KR_REFRESH, tag); + if(Globals::get_hwndHostX64() != NULL) { + PostMessage(Globals::get_hwndHostX64(), wm_keyman_refresh, KR_PRE_REFRESH, Globals::get_RefreshTag()); } + if(Globals::get_hwndHostARM64() != NULL) { + PostMessage(Globals::get_hwndHostARM64(), wm_keyman_refresh, KR_PRE_REFRESH, Globals::get_RefreshTag()); + } +#else + *Globals::RefreshTag() = tag; #endif - break; - - case KR_REFRESH: - // All threads need to have their keyboard list - // refreshed after an update, but only once per - // refresh request - if (UpdateRefreshTag(tag)) { -#ifdef _WIN64 - if (Globals::get_InitialisingThread() == GetCurrentThreadId()) { - // If this is the keyman.x64 or keymanarm64 thread, then we should - // go ahead and process the refresh immediately so - // that global settings are updated - RefreshKeyboards(FALSE); - } - else -#endif - // We'll update when we are called into action - ScheduleRefresh(); - } + SendDebugMessageFormat("HandleRefresh: new tag = %d", Globals::get_RefreshTag()); + RefreshThreadKeyboardsIfRequired(); break; } } @@ -695,6 +681,40 @@ void LoadBaseLayoutSettings() { // I4552 // I4583 delete reg; } +/** + * If (per-architecture) global refresh tag differs from the current thread + * refresh tag, that indicates that a change has happened to the list of loaded + * keyboards, and we need to refresh the list now. + */ +void RefreshThreadKeyboardsIfRequired() { + PKEYMAN64THREADDATA _td = ThreadGlobals(); + if (!_td) { + return; + } + + SendDebugMessageFormat("RefreshThreadKeyboardsIfRequired(): global refresh tag = %d; input thread refresh tag = %d", Globals::get_RefreshTag(), _td->RefreshTag_Thread); + + if (_td->RefreshTag_Thread != Globals::get_RefreshTag()) { + _td->RefreshTag_Thread = Globals::get_RefreshTag(); + RefreshKeyboards(); + } +} + +/** + * Read the keyboard switch hotkeys, and base layout settings + */ +void LoadKeyboardSettings() { +#ifndef _WIN64 + Hotkeys::Reload(); // I4326 // I4390 +#endif + + // Read global underlying keyboard flags + + if(Globals::get_InitialisingThread() == GetCurrentThreadId()) { + LoadBaseLayoutSettings(); // I4583 + } +} + // ----------------------------------------------------------------------------------------------- // - - // - RefreshKeyboards: .... - @@ -743,32 +763,8 @@ void RefreshKeyboardProfiles(INTKEYBOARDINFO *kp, BOOL isTransient) { } } -void ScheduleRefresh() { - if (GetCurrentThreadId() == GetWindowThreadProcessId(GetForegroundWindow(), NULL)) { - RefreshKeyboards(FALSE); - } - else { - PKEYMAN64THREADDATA _td = ThreadGlobals(); - if (!_td) { - return; - } - _td->RefreshRequired = TRUE; - } -} -void CheckScheduledRefresh() { - PKEYMAN64THREADDATA _td = ThreadGlobals(); - if (!_td) { - return; - } - if (_td->RefreshRequired) { - RefreshKeyboards(FALSE); - _td->RefreshRequired = FALSE; - } -} - -void RefreshKeyboards(BOOL Initialising) -{ +void RefreshKeyboards() { OutputThreadDebugString("RefreshKeyboards"); char sz[_MAX_FNAME]; char oldname[_MAX_FNAME]; @@ -784,29 +780,17 @@ void RefreshKeyboards(BOOL Initialising) oldname[0] = 0; - if(!Initialising) - { - if(_td->lpActiveKeyboard) - strcpy(oldname, _td->lpActiveKeyboard->Name); - - if(_td->lpActiveKeyboard) DeactivateDLLs(_td->lpActiveKeyboard); - _td->lpActiveKeyboard = NULL; - _td->ActiveKeymanID = KEYMANID_NONKEYMAN; + if(_td->lpActiveKeyboard) { + strcpy(oldname, _td->lpActiveKeyboard->Name); } + if(_td->lpActiveKeyboard) DeactivateDLLs(_td->lpActiveKeyboard); + _td->lpActiveKeyboard = NULL; + _td->ActiveKeymanID = KEYMANID_NONKEYMAN; + ReleaseKeyboards(TRUE); - /* Read the "keyboard off hotkey", simulate Alt+Gr, Hotkeys-Toggle flags */ - -#ifndef _WIN64 - Hotkeys::Reload(); // I4326 // I4390 -#endif - - // Read global underlying keyboard flags - - if(Globals::get_InitialisingThread() == GetCurrentThreadId()) { - LoadBaseLayoutSettings(); // I4583 - } + LoadKeyboardSettings(); /* Read the keyboards */ @@ -854,13 +838,13 @@ void RefreshKeyboards(BOOL Initialising) } delete reg; // I2714 - if(!Initialising) - for(int i = 0; i < _td->nKeyboards; i++) - if(!_strcmpi(_td->lpKeyboards[i].Name, oldname)) - { - SelectKeyboard(_td->lpKeyboards[i].KeymanID); // I3594 - break; - } + for(int i = 0; i < _td->nKeyboards; i++) { + if(!_strcmpi(_td->lpKeyboards[i].Name, oldname)) + { + SelectKeyboard(_td->lpKeyboards[i].KeymanID); // I3594 + break; + } + } _td->FInRefreshKeyboards = FALSE; diff --git a/windows/src/engine/keyman32/keyman32.vcxproj b/windows/src/engine/keyman32/keyman32.vcxproj index 5d246b7bbe..dd5643290e 100644 --- a/windows/src/engine/keyman32/keyman32.vcxproj +++ b/windows/src/engine/keyman32/keyman32.vcxproj @@ -1156,7 +1156,7 @@ - + diff --git a/windows/src/engine/keyman32/keyman32.vcxproj.filters b/windows/src/engine/keyman32/keyman32.vcxproj.filters index c5b38a60d1..a812f04249 100644 --- a/windows/src/engine/keyman32/keyman32.vcxproj.filters +++ b/windows/src/engine/keyman32/keyman32.vcxproj.filters @@ -210,7 +210,7 @@ Header Files - + Header Files diff --git a/windows/src/engine/keyman32/keyman64.h b/windows/src/engine/keyman32/keyman64.h index eb199722c7..c062c73cb6 100644 --- a/windows/src/engine/keyman32/keyman64.h +++ b/windows/src/engine/keyman32/keyman64.h @@ -108,7 +108,6 @@ #define KR_REQUEST_REFRESH 0 #define KR_PRE_REFRESH 1 -#define KR_REFRESH 2 #define KR_SETTINGS_CHANGED 3 // Broadcast when Keyman Configuration settings change /* WM_KEY* message analysis */ diff --git a/windows/src/engine/keyman32/keymancontrol.h b/windows/src/engine/keyman32/keymancontrol.h deleted file mode 100644 index b25d0ceebf..0000000000 --- a/windows/src/engine/keyman32/keymancontrol.h +++ /dev/null @@ -1,72 +0,0 @@ -/* - Name: keymancontrol - Copyright: Copyright (C) SIL International. - Documentation: - Description: - Create Date: 1 Aug 2006 - - Modified Date: 13 Oct 2014 - Authors: mcdurdin - Related Files: - Dependencies: - - Bugs: - Todo: - Notes: - History: 01 Aug 2006 - mcdurdin - Add KMC_REFRESH and KMC_INTERFACEHOTKEY wm_keyman_control messages - 11 Dec 2009 - mcdurdin - I934 - x64 platfrom comms add KMC_SETFOCUSINFO - 06 Apr 2010 - mcdurdin - I2271 - Select Keyboard tidy up - 24 Oct 2013 - mcdurdin - I3933 - V9.0 - Keyman tray icon menu is not showing installed keyboards - 07 Nov 2013 - mcdurdin - I3949 - V9.0 - Keyboard selection and notification needs consolidation - 03 Aug 2014 - mcdurdin - I4326 - V9.0 - Switch-off hotkey not working, then keyboard hotkey stopped working (win 8.1 jeremy) [High] - 13 Oct 2014 - mcdurdin - I4451 - V9.0 - Language hotkeys are not working -*/ - -//#define KMC_KEYBOARDCHANGED 1 // I3949 -//#define KMC_CHANGEUISTATE 2 -//#define KMC_GETLOADED 3 -#define KMC_REFRESH 4 -#define KMC_INTERFACEHOTKEY 5 - -//#define KMC_NOTIFYWELCOME 6 // 7.0.245.0 -//#define KMC_NOTIFYWELCOMEEVENT 7 // 7.0.245.0 -#define KMC_ONSCREENKEYBOARD 8 // 7.0.248.0 - -#define KMC_SETFOCUSINFO 9 // 7.1.270.0 -#define KMC_GETLASTFOCUS 10 // 7.1.270.0 -#define KMC_GETLASTACTIVE 11 - -#define KMC_GETLASTKEYMANID 12 // 7.1.274.0 -#define KMC_GETLASTHKL 13 // 7.1.274.0 - -//#define KMC_LANGUAGESWITCH 14 // 8.0.290.0 -//#define KMC_HKLCHANGED 15 // 8.0.290.0 // I3949 - -#define KMC_KEYDOWN 16 // 8.0.291.0 -#define KMC_KEYUP 17 // 8.0.291.0 - -#define KMC_PROFILECHANGED 18 // 9.0.426.0 // I3933 - -#define KMC_HINTRESPONSE 19 // 14.0 HIWORD(wParam) = ModalResult, lParam = hint enum - -#define KMC_WATCHDOG_FAKEFREEZE 20 // 19.0 - pause Keyman for 5 seconds for debug purposes to test stability -#define KMC_WATCHDOG_KEYEVENT 21 // 19.0 - let the LowLevelHookWatchDog know that input has happened on another thread -#define KMC_WATCHDOG_HOOK_REINSTALL 22 // 19.0 - tell master controller about hook reinstall events - -// KMC_WATCHDOG_HOOK_REINSTALL event types -#define WHR_TIMING 0 // 19.0 - report on timing -#define WHR_INIT_FAILURE 1 // 19.0 - hook failed to (re)install -#define WHR_UNINIT_FAILURE 2 // 19.0 - hook failed to uninstall - - -#define PC_UPDATE 0 // Tell Keyman to update its display of active keyboard -#define PC_UPDATE_LANGUAGESWITCH 1 // Tell Keyman to update its display of active keyboard and then open language switch form -#define PC_HOTKEYCHANGE 2 // Tell Keyman that a hotkey was pressed to switch keyboard - -//#define KMC_KEYBOARDHOTKEY 19 // 9.0.459.0 // I4326 Deprecated in favour of language hotkeys -#define KMC_LANGUAGEHOTKEY 20 -//TOUCH #define KMC_CONTEXT 19 // 9.0.450.0 - -#define RWM_KEYMAN_CONTROL "WM_KEYMAN_CONTROL" - -#define khLanguageSwitch 8 diff --git a/windows/src/engine/keyman32/keymanengine.h b/windows/src/engine/keyman32/keymanengine.h index 15bf2f1b59..6c769951e5 100644 --- a/windows/src/engine/keyman32/keymanengine.h +++ b/windows/src/engine/keyman32/keymanengine.h @@ -207,12 +207,8 @@ void _OutputThreadDebugString(char* s); /* Keyboard selection functions */ void HandleRefresh(int code, LONG tag); -void RefreshKeyboards(BOOL Initialising); -void CheckScheduledRefresh(); -void ScheduleRefresh(); +void RefreshThreadKeyboardsIfRequired(); void ReleaseKeyboards(BOOL Lock); -void CheckScheduledRefresh(); -void ScheduleRefresh(); /* Glossary conversion functions */ @@ -245,7 +241,7 @@ void keybd_shift(LPINPUT pInputs, int* n, BOOL isReset, LPBYTE const kbd); #include "keystate.h" #include "calldll.h" -#include "keymancontrol.h" +#include "..\..\..\include\keymancontrol.h" #include "keyboardoptions.h" #include "kmprocessactions.h" #include "appcontext.h" diff --git a/windows/src/engine/keyman32/kmhook_callwndproc.cpp b/windows/src/engine/keyman32/kmhook_callwndproc.cpp index eedb06bc0b..38d1fd3909 100644 --- a/windows/src/engine/keyman32/kmhook_callwndproc.cpp +++ b/windows/src/engine/keyman32/kmhook_callwndproc.cpp @@ -163,7 +163,7 @@ LRESULT _kmnCallWndProc(int nCode, WPARAM wParam, LPARAM lParam) { case WM_KILLFOCUS: { - CheckScheduledRefresh(); + RefreshThreadKeyboardsIfRequired(); HWND hwnd = IsLanguageSwitchWindowVisible(); // I4326 if(hwnd != NULL && !Globals::IsControllerThread(GetCurrentThreadId())) SendToLanguageSwitchWindow(hwnd, VK_ESCAPE, 0); // I3025 @@ -178,7 +178,7 @@ LRESULT _kmnCallWndProc(int nCode, WPARAM wParam, LPARAM lParam) } break; case WM_SETFOCUS: - CheckScheduledRefresh(); + RefreshThreadKeyboardsIfRequired(); if (IsSysTrayWindow(cp->hwnd)) // I2443 - always do the focus change now? really unsure about this one SendDebugMessageFormat("WM_SETFOCUS -- not hooking because IsSysTrayWindow"); else if (Globals::IsControllerThread(GetCurrentThreadId())) @@ -193,11 +193,11 @@ LRESULT _kmnCallWndProc(int nCode, WPARAM wParam, LPARAM lParam) case WM_ACTIVATE: if(cp->wParam == WA_ACTIVE || cp->wParam == WA_CLICKACTIVE) { - CheckScheduledRefresh(); + RefreshThreadKeyboardsIfRequired(); } break; case WM_INPUTLANGCHANGE: - CheckScheduledRefresh(); + RefreshThreadKeyboardsIfRequired(); SendDebugMessageFormat("WM_INPUTLANGCHANGE %x %x Hwnd=%x Parent=%x Focus=%x Active=%x", cp->wParam, cp->lParam, cp->hwnd, GetParent(cp->hwnd), GetFocus(), GetActiveWindow()); ReportActiveKeyboard(PC_UPDATE); // I4288 diff --git a/windows/src/engine/keyman32/kmhook_getmessage.cpp b/windows/src/engine/keyman32/kmhook_getmessage.cpp index 4efd487946..cef36c382a 100644 --- a/windows/src/engine/keyman32/kmhook_getmessage.cpp +++ b/windows/src/engine/keyman32/kmhook_getmessage.cpp @@ -68,7 +68,7 @@ void ProcessWMKeymanControlInternal(HWND hwnd, WPARAM wParam, LPARAM lParam); void ProcessWMKeymanControl(WPARAM wParam, LPARAM lParam); void ProcessWMKeyman(HWND hwnd, WPARAM wParam, LPARAM lParam); -void GetCapsAndNumlockState(); +void RefreshModifierState(); /* BOOL SysTabCtrl(HWND hwnd) @@ -157,7 +157,7 @@ LRESULT _kmnGetMessageProc(int nCode, WPARAM wParam, LPARAM lParam) BYTE scan = KEYMSG_LPARAM_SCAN(mp->lParam); BYTE keyTransitionEvent = KEYMSG_FLAG_TRANSITION(mp->lParam); - CheckScheduledRefresh(); + RefreshThreadKeyboardsIfRequired(); UpdateLastKeyCache(_td, mp->wParam, scan, keyTransitionEvent); switch (mp->wParam) { @@ -354,7 +354,7 @@ void ProcessWMKeyman(HWND hwnd, WPARAM wParam, LPARAM lParam) if(IsFocusedThread()) { if(_td->app) _td->app->ResetQueue(); - GetCapsAndNumlockState(); + RefreshModifierState(); UpdateActiveWindows(); } } @@ -393,30 +393,37 @@ void ProcessWMKeymanControlInternal(HWND hwnd, WPARAM wParam, LPARAM lParam) void ProcessWMKeymanControl(WPARAM wParam, LPARAM lParam) { - switch (wParam) { - case KMC_PROFILECHANGED: - { - if (!Globals::IsControllerThread(GetCurrentThreadId())) { - break; - } - WORD wAtom = HIWORD(lParam); - char atomStr[128]; - if (GlobalGetAtomName(wAtom, atomStr, 128)) { - isKeymanKeyboardActive = strstr(atomStr, cs_clsidKMTipTextService) != nullptr; - } - break; + if (!Globals::IsControllerThread(GetCurrentThreadId())) { + return; + } + + if (wParam == KMC_PROFILECHANGED) { + WORD wAtom = HIWORD(lParam); + char atomStr[128]; + if (GlobalGetAtomName(wAtom, atomStr, 128)) { + isKeymanKeyboardActive = strstr(atomStr, cs_clsidKMTipTextService) != nullptr; } } +#ifndef _WIN64 + else if(wParam == KMC_REGISTER_HOST_WINDOW_X64) { + *Globals::hwndHostX64() = (HWND) lParam; + } else if(wParam == KMC_REGISTER_HOST_WINDOW_ARM64) { + *Globals::hwndHostARM64() = (HWND) lParam; + } +#endif } -/* - GetCapsAndNumlockState: - - Updates the global caps and numlock state when a window is focused, because it - may have been reset while Keyman was not aware of it -*/ -void GetCapsAndNumlockState() { // I4793 - DWORD n = Globals::get_ShiftState(); +/** + * Refresh Keyman's internal keyboard modifier and toggle state according + * to the Windows current keyboard state (not async state). The state may + * have been reset while Keyman was not aware of it. This is used only when + * focus changes. Note that the global values are per-architecture, so + * these may track separately. + * + * @see ProcessModifierChange() + */ +void RefreshModifierState() { // I4793 + DWORD previousShiftState = Globals::get_ShiftState(); RefreshToggleState(); @@ -435,18 +442,19 @@ void GetCapsAndNumlockState() { // I4793 if(GetKeyState(VK_RMENU) < 0) *Globals::ShiftState() |= RALTFLAG; else *Globals::ShiftState() &= ~RALTFLAG; - SendDebugMessageFormat("Enter: %x Exit: %x", n, Globals::get_ShiftState()); + SendDebugMessageFormat("Enter: %x Exit: %x", previousShiftState, Globals::get_ShiftState()); } -/* - Update the Keyman shift state based on the key event. This has to be - done from both the GetMessage hook and the TSF methods, because we don't - consistently receive modifier events in some applications (e.g. ALT in Firefox) - via TSF, and we don't receive the notifications via the GetMessage hook when - in UWP apps (#4369). - - TODO: test whether we still need the GetMessage hook for reading modifier state. -*/ +/** + * Update the Keyman shift state based on the key event. This has to be done + * from both the GetMessage hook and the TSF methods, because we don't + * consistently receive modifier events in some applications (e.g. ALT in + * Firefox) via TSF, and we don't receive the notifications via the GetMessage + * hook when in UWP apps (#4369). + * + * TODO: test whether we still need the GetMessage hook for reading modifier + * state. + */ void ProcessModifierChange(UINT key, BOOL isUp, BOOL isExtended) { // I4793 UINT flag = 0; diff --git a/windows/src/engine/keymanhp/keymanhp.cpp b/windows/src/engine/keymanhp/keymanhp.cpp index 81d386c000..483bbfa701 100644 --- a/windows/src/engine/keymanhp/keymanhp.cpp +++ b/windows/src/engine/keymanhp/keymanhp.cpp @@ -98,9 +98,7 @@ const PWSTR szFail_UnknownError = L"Unknown error %d", szFail_ErrorFormat = L"%s: %s (%d)", - szFail_ErrorFormat_OtherUnknown = L"%s: An unknown error occurred", - - szWindowClass_x86_Wnd = L"TfrmKeyman7Main"; // Do not localize + szFail_ErrorFormat_OtherUnknown = L"%s: An unknown error occurred"; //const char *szGPA_ChangeWindowMessageFilter = "ChangeWindowMessageFilter"; // Do not localize #define KEYMAN_SENTRY_LOGGER_DESKTOP_ENGINE_KEYMANHP KEYMAN_SENTRY_LOGGER_DESKTOP_ENGINE ARCH_LOG_FILE @@ -353,6 +351,15 @@ BOOL StartKeyman(HWND hWnd) if(!Keyman_Initialise(hWnd, FALSE)) return Fail(hWnd, szError_FailedToInitialise); + // Tell the x86 controller our architecture's controller window handle which + // will process wm_keyman_refresh messages (in keyman##.dll) + UINT wm_keyman_control = RegisterWindowMessage(RWM_KEYMAN_CONTROL_W); +#if defined(_M_X64) + PostMessage(hwndController, wm_keyman_control, KMC_REGISTER_HOST_WINDOW_X64, (LPARAM) hWnd); +#elif defined(_M_ARM64) + PostMessage(hwndController, wm_keyman_control, KMC_REGISTER_HOST_WINDOW_ARM64, (LPARAM) hWnd); +#endif + KeymanStarted = TRUE; return TRUE; diff --git a/windows/src/engine/keymanhp/keymanhp.h b/windows/src/engine/keymanhp/keymanhp.h index 28a1f391d5..823a16ad45 100644 --- a/windows/src/engine/keymanhp/keymanhp.h +++ b/windows/src/engine/keymanhp/keymanhp.h @@ -1,18 +1,18 @@ /* Name: keymanhp Copyright: Copyright (C) SIL International. - Documentation: - Description: + Documentation: + Description: Create Date: 11 Dec 2009 Modified Date: 11 Dec 2009 Authors: mcdurdin - Related Files: - Dependencies: + Related Files: + Dependencies: - Bugs: - Todo: - Notes: + Bugs: + Todo: + Notes: History: 11 Dec 2009 - mcdurdin - I934 - x64 - Initial version */ #pragma once @@ -23,9 +23,9 @@ #define WINVER 0x0600 // Change this to the appropriate value to target other versions of Windows. #endif -#ifndef _WIN32_WINNT // Allow use of features specific to Windows XP or later. +#ifndef _WIN32_WINNT // Allow use of features specific to Windows XP or later. #define _WIN32_WINNT 0x0600 // Change this to the appropriate value to target other versions of Windows. -#endif +#endif #ifndef _WIN32_IE // Allow use of features specific to IE 6.0 or later. #define _WIN32_IE 0x0600 // Change this to the appropriate value to target other versions of IE. @@ -35,3 +35,5 @@ #include #include #include + +#include "..\..\..\include\keymancontrol.h" \ No newline at end of file diff --git a/windows/src/engine/keymanhp/keymanhp.vcxproj b/windows/src/engine/keymanhp/keymanhp.vcxproj index 3aedb14b70..37e63c2707 100644 --- a/windows/src/engine/keymanhp/keymanhp.vcxproj +++ b/windows/src/engine/keymanhp/keymanhp.vcxproj @@ -280,6 +280,7 @@ true + diff --git a/windows/src/engine/keymanhp/keymanhp.vcxproj.filters b/windows/src/engine/keymanhp/keymanhp.vcxproj.filters index 7c736dcc17..65eddfbff0 100644 --- a/windows/src/engine/keymanhp/keymanhp.vcxproj.filters +++ b/windows/src/engine/keymanhp/keymanhp.vcxproj.filters @@ -32,6 +32,9 @@ Header Files + + Header Files + diff --git a/windows/src/engine/kmcomapi/util/utilkeymanoption.pas b/windows/src/engine/kmcomapi/util/utilkeymanoption.pas index 653fea1d96..bcb9e4cd34 100644 --- a/windows/src/engine/kmcomapi/util/utilkeymanoption.pas +++ b/windows/src/engine/kmcomapi/util/utilkeymanoption.pas @@ -122,11 +122,10 @@ type end; // The Default options here need to be consistent with the defaults set in TfrmRunDesktop.GetDefaultSettings -const KeymanOptionInfo: array[0..16] of TKeymanOptionInfo = ( // I3331 // I3620 // I4552 +const KeymanOptionInfo: array[0..14] of TKeymanOptionInfo = ( // I3331 // I3620 // I4552 // Global options (opt: koKeyboardHotkeysAreToggle; RegistryName: SRegValue_KeyboardHotkeysAreToggle; OptionType: kotBool; BoolValue: False; GroupName: 'kogGeneral'), - (opt: koSwitchLanguageForAllApplications; RegistryName: SRegValue_SwitchLanguageForAllApplications; OptionType: kotBool; BoolValue: True; GroupName: 'kogGeneral'), // I2277 // I4393 (opt: koAltGrCtrlAlt; RegistryName: SRegValue_AltGrCtrlAlt; OptionType: kotBool; BoolValue: False; GroupName: 'kogGeneral'), (opt: koRightModifierHK; RegistryName: SRegValue_AllowRightModifierHotKey; OptionType: kotBool; BoolValue: False; GroupName: 'kogGeneral'), (opt: koShowHints; RegistryName: SRegValue_EnableHints; OptionType: kotBool; BoolValue: True; GroupName: 'kogGeneral'), @@ -140,7 +139,6 @@ const KeymanOptionInfo: array[0..16] of TKeymanOptionInfo = ( // I3331 // I36 (opt: koReleaseShiftKeysAfterKeyPress; RegistryName: SRegValue_ReleaseShiftKeysAfterKeyPress; OptionType: kotBool; BoolValue: False; GroupName: 'kogOSK'), (opt: koAutoOpenOSK; RegistryName: SRegValue_AutoOpenOSK; OptionType: kotBool; BoolValue: True; GroupName: 'kogOSK'), - (opt: koAutoSwitchOSKPages; RegistryName: SRegValue_AutoSwitchOSKPages; OptionType: kotBool; BoolValue: True; GroupName: 'kogOSK'), // Startup options @@ -192,14 +190,6 @@ begin o.FEnabled := True; - if (KeymanOptionInfo[i].opt = koSwitchLanguageForAllApplications) and - not (GetOs in [osVista, osWin7]) then - begin - o.FEnabled := False; // I4271 - o.FBoolValue := False; // I4515 - o.FDefaultBoolValue := False; // I4515 - end; - o.FGroup := KeymanOptionInfo[i].GroupName; FOptions.Add(o); diff --git a/windows/src/global/delphi/general/KeymanControlMessages.pas b/windows/src/global/delphi/general/KeymanControlMessages.pas index 601abee40a..4d1454e7b2 100644 --- a/windows/src/global/delphi/general/KeymanControlMessages.pas +++ b/windows/src/global/delphi/general/KeymanControlMessages.pas @@ -27,14 +27,19 @@ unit KeymanControlMessages; interface const - //KMC_KEYBOARDCHANGED = 1; // I3949 - //KMC_CHANGEUISTATE = 2; - KMC_GETLOADED = 3; KMC_REFRESH = 4; KMC_INTERFACEHOTKEY = 5; KMC_NOTIFYWELCOME = 6; - KMC_NOTIFYWELCOME_EVENT = 7; // From Keyman to welcome window + + // KMC_NOTIFYWELCOME commands + NW_NOTIFYHANDLE = 0; + NW_SENDBALLOON = 1; + + // NW_SENDBALLOON options + NWB_IDENTIFYICON = 0; + NWB_TUTORIALFINISHED = 1; + NWB_KEYMANRUNNING = 2; KMC_ONSCREENKEYBOARD = 8; // 7.0.248.0 @@ -42,11 +47,6 @@ const KMC_GETLASTFOCUS = 10; // 7.1.270.0 KMC_GETLASTACTIVE = 11; // 7.1.270.0 - KMC_GETLASTKEYMANID = 12; // 7.1.274.0 - KMC_GETLASTHKL = 13; // 7.1.274.0 - - //KMC_HKLCHANGED = 15; // 8.0.290.0 // I3949 - KMC_KEYDOWN = 16; KMC_KEYUP = 17; @@ -58,35 +58,18 @@ const KMC_WATCHDOG_KEYEVENT = 21; // 19.0 - let the LowLevelHookWatchDog know that input has happened on another thread KMC_WATCHDOG_HOOK_REINSTALL = 22; // 19.0 - tell master controller about hook reinstall events - // KMC_WATCHDOG_HOOK_REINSTALL event types - WHR_TIMING = 0; // 19.0 - report on timing - WHR_INIT_FAILURE = 1; // 19.0 - hook failed to (re)install - WHR_UNINIT_FAILURE = 2; // 19.0 - hook failed to uninstall + // KMC_WATCHDOG_HOOK_REINSTALL event types + WHR_TIMING = 0; // 19.0 - report on timing + WHR_INIT_FAILURE = 1; // 19.0 - hook failed to (re)install + WHR_UNINIT_FAILURE = 2; // 19.0 - hook failed to uninstall + KMC_REGISTER_HOST_WINDOW_X64 = 23; + KMC_REGISTER_HOST_WINDOW_ARM64 = 24; PC_UPDATE = 0; PC_UPDATE_LANGUAGESWITCH = 1; PC_HOTKEYCHANGE = 2; - // KMC_KEYBOARDHOTKEY = 19; // 9.0.459.0 // I4326 Deprecated in favour of language hotkeys - //KMC_LANGUAGEHOTKEY = 20; - -//TOUCH KMC_CONTEXT = 19; - - // KMC_NOTIFYWELCOME commands - NW_NOTIFYHANDLE = 0; - NW_SENDBALLOON = 1; - - // NW_SENDBALLOON options - NWB_IDENTIFYICON = 0; - NWB_TUTORIALFINISHED = 1; - NWB_KEYMANRUNNING = 2; - - // KMC_NOTIFYWELCOME_EVENT events - NWE_ICONCLICKED = 0; - NWE_MENUOPENED = 1; - NWE_MENUCLOSED = 2; - implementation end. diff --git a/windows/src/global/delphi/general/KeymanOptionNames.pas b/windows/src/global/delphi/general/KeymanOptionNames.pas index c3cbe423c6..7c68d900c0 100644 --- a/windows/src/global/delphi/general/KeymanOptionNames.pas +++ b/windows/src/global/delphi/general/KeymanOptionNames.pas @@ -17,11 +17,9 @@ type koShowStartup, // Windows options koDebugging, - koSwitchLanguageForAllApplications, // I1089 koDeadkeyConversion, // I4552 // On Screen Keyboard Options koAutoOpenOSK, // I1288 - koAutoSwitchOSKPages, // I1375 koUseTouchLayout, koBaseLayout, koAutomaticallyReportErrors,