diff options
Diffstat (limited to '')
-rw-r--r-- | libfreerdp/codec/ncrush.c | 3045 |
1 files changed, 3045 insertions, 0 deletions
diff --git a/libfreerdp/codec/ncrush.c b/libfreerdp/codec/ncrush.c new file mode 100644 index 0000000..4a7162c --- /dev/null +++ b/libfreerdp/codec/ncrush.c @@ -0,0 +1,3045 @@ +/** + * FreeRDP: A Remote Desktop Protocol Implementation + * NCrush (RDP6) Bulk Data Compression + * + * Copyright 2014 Marc-Andre Moreau <marcandre.moreau@gmail.com> + * Copyright 2017 Armin Novak <armin.novak@thincast.com> + * Copyright 2017 Thincast Technologies GmbH + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include <winpr/assert.h> + +#include <freerdp/config.h> + +#include <winpr/crt.h> +#include <winpr/print.h> +#include <winpr/bitstream.h> + +#include <freerdp/log.h> +#include <freerdp/types.h> + +#include "ncrush.h" + +#define TAG FREERDP_TAG("codec") + +struct s_NCRUSH_CONTEXT +{ + ALIGN64 BOOL Compressor; + ALIGN64 BYTE* HistoryPtr; + ALIGN64 UINT32 HistoryOffset; + ALIGN64 UINT32 HistoryEndOffset; + ALIGN64 UINT32 HistoryBufferSize; + ALIGN64 BYTE HistoryBuffer[65536]; + ALIGN64 UINT32 HistoryBufferFence; + ALIGN64 UINT32 OffsetCache[4]; + ALIGN64 UINT16 HashTable[65536]; + ALIGN64 UINT16 MatchTable[65536]; + ALIGN64 BYTE HuffTableCopyOffset[1024]; + ALIGN64 BYTE HuffTableLOM[4096]; +}; + +static const UINT16 HuffTableLEC[8192] = { + 0x510B, 0x611F, 0x610D, 0x9027, 0x6000, 0x7105, 0x6117, 0xA068, 0x5111, 0x7007, 0x6113, 0x90C0, + 0x6108, 0x8018, 0x611B, 0xA0B3, 0x510F, 0x7003, 0x6110, 0x9042, 0x6002, 0x800B, 0x6119, 0xA091, + 0x5121, 0x7080, 0x6115, 0xA03A, 0x610A, 0x9012, 0x611D, 0xA0D7, 0x510B, 0x6122, 0x610E, 0x9035, + 0x6001, 0x7123, 0x6118, 0xA07A, 0x5111, 0x7009, 0x6114, 0x90F4, 0x6109, 0x8060, 0x611C, 0xA0C4, + 0x510F, 0x7005, 0x6112, 0x9070, 0x6107, 0x800F, 0x611A, 0xA0A1, 0x5121, 0x7102, 0x6116, 0xA056, + 0x610C, 0x901D, 0x611E, 0xA0E8, 0x510B, 0x611F, 0x610D, 0x902C, 0x6000, 0x7106, 0x6117, 0xA071, + 0x5111, 0x7008, 0x6113, 0x90E0, 0x6108, 0x8020, 0x611B, 0xA0BB, 0x510F, 0x7004, 0x6110, 0x9049, + 0x6002, 0x800D, 0x6119, 0xA099, 0x5121, 0x70FF, 0x6115, 0xA04C, 0x610A, 0x9017, 0x611D, 0xA0DF, + 0x510B, 0x6122, 0x610E, 0x903C, 0x6001, 0x7124, 0x6118, 0xA087, 0x5111, 0x700A, 0x6114, 0xA023, + 0x6109, 0x80FE, 0x611C, 0xA0CE, 0x510F, 0x7006, 0x6112, 0x9082, 0x6107, 0x8011, 0x611A, 0xA0A9, + 0x5121, 0x7103, 0x6116, 0xA05F, 0x610C, 0x9022, 0x611E, 0xA0F5, 0x510B, 0x611F, 0x610D, 0x9029, + 0x6000, 0x7105, 0x6117, 0xA06C, 0x5111, 0x7007, 0x6113, 0x90CC, 0x6108, 0x8019, 0x611B, 0xA0B7, + 0x510F, 0x7003, 0x6110, 0x9044, 0x6002, 0x800C, 0x6119, 0xA095, 0x5121, 0x7080, 0x6115, 0xA046, + 0x610A, 0x9015, 0x611D, 0xA0DB, 0x510B, 0x6122, 0x610E, 0x9038, 0x6001, 0x7123, 0x6118, 0xA07E, + 0x5111, 0x7009, 0x6114, 0x90FC, 0x6109, 0x80F0, 0x611C, 0xA0C9, 0x510F, 0x7005, 0x6112, 0x907F, + 0x6107, 0x8010, 0x611A, 0xA0A5, 0x5121, 0x7102, 0x6116, 0xA05B, 0x610C, 0x901F, 0x611E, 0xA0EC, + 0x510B, 0x611F, 0x610D, 0x9031, 0x6000, 0x7106, 0x6117, 0xA075, 0x5111, 0x7008, 0x6113, 0x90F1, + 0x6108, 0x8040, 0x611B, 0xA0BF, 0x510F, 0x7004, 0x6110, 0x9051, 0x6002, 0x800E, 0x6119, 0xA09D, + 0x5121, 0x70FF, 0x6115, 0xA052, 0x610A, 0x901B, 0x611D, 0xA0E4, 0x510B, 0x6122, 0x610E, 0x903F, + 0x6001, 0x7124, 0x6118, 0xA08C, 0x5111, 0x700A, 0x6114, 0xA02F, 0x6109, 0x8120, 0x611C, 0xA0D3, + 0x510F, 0x7006, 0x6112, 0x9088, 0x6107, 0x8013, 0x611A, 0xA0AE, 0x5121, 0x7103, 0x6116, 0xA064, + 0x610C, 0x9025, 0x611E, 0xA0FA, 0x510B, 0x611F, 0x610D, 0x9028, 0x6000, 0x7105, 0x6117, 0xA06A, + 0x5111, 0x7007, 0x6113, 0x90C6, 0x6108, 0x8018, 0x611B, 0xA0B5, 0x510F, 0x7003, 0x6110, 0x9043, + 0x6002, 0x800B, 0x6119, 0xA093, 0x5121, 0x7080, 0x6115, 0xA03D, 0x610A, 0x9014, 0x611D, 0xA0D9, + 0x510B, 0x6122, 0x610E, 0x9037, 0x6001, 0x7123, 0x6118, 0xA07C, 0x5111, 0x7009, 0x6114, 0x90F8, + 0x6109, 0x8060, 0x611C, 0xA0C7, 0x510F, 0x7005, 0x6112, 0x9078, 0x6107, 0x800F, 0x611A, 0xA0A3, + 0x5121, 0x7102, 0x6116, 0xA058, 0x610C, 0x901E, 0x611E, 0xA0EA, 0x510B, 0x611F, 0x610D, 0x9030, + 0x6000, 0x7106, 0x6117, 0xA073, 0x5111, 0x7008, 0x6113, 0x90EE, 0x6108, 0x8020, 0x611B, 0xA0BD, + 0x510F, 0x7004, 0x6110, 0x9050, 0x6002, 0x800D, 0x6119, 0xA09B, 0x5121, 0x70FF, 0x6115, 0xA04E, + 0x610A, 0x901A, 0x611D, 0xA0E2, 0x510B, 0x6122, 0x610E, 0x903E, 0x6001, 0x7124, 0x6118, 0xA08A, + 0x5111, 0x700A, 0x6114, 0xA02D, 0x6109, 0x80FE, 0x611C, 0xA0D1, 0x510F, 0x7006, 0x6112, 0x9084, + 0x6107, 0x8011, 0x611A, 0xA0AC, 0x5121, 0x7103, 0x6116, 0xA062, 0x610C, 0x9024, 0x611E, 0xA0F7, + 0x510B, 0x611F, 0x610D, 0x902A, 0x6000, 0x7105, 0x6117, 0xA06E, 0x5111, 0x7007, 0x6113, 0x90D0, + 0x6108, 0x8019, 0x611B, 0xA0B9, 0x510F, 0x7003, 0x6110, 0x9048, 0x6002, 0x800C, 0x6119, 0xA097, + 0x5121, 0x7080, 0x6115, 0xA04A, 0x610A, 0x9016, 0x611D, 0xA0DD, 0x510B, 0x6122, 0x610E, 0x9039, + 0x6001, 0x7123, 0x6118, 0xA085, 0x5111, 0x7009, 0x6114, 0x90FD, 0x6109, 0x80F0, 0x611C, 0xA0CB, + 0x510F, 0x7005, 0x6112, 0x9081, 0x6107, 0x8010, 0x611A, 0xA0A7, 0x5121, 0x7102, 0x6116, 0xA05D, + 0x610C, 0x9021, 0x611E, 0xA0EF, 0x510B, 0x611F, 0x610D, 0x9033, 0x6000, 0x7106, 0x6117, 0xA077, + 0x5111, 0x7008, 0x6113, 0x90F2, 0x6108, 0x8040, 0x611B, 0xA0C2, 0x510F, 0x7004, 0x6110, 0x9059, + 0x6002, 0x800E, 0x6119, 0xA09F, 0x5121, 0x70FF, 0x6115, 0xA054, 0x610A, 0x901C, 0x611D, 0xA0E6, + 0x510B, 0x6122, 0x610E, 0x9041, 0x6001, 0x7124, 0x6118, 0xA08E, 0x5111, 0x700A, 0x6114, 0xA034, + 0x6109, 0x8120, 0x611C, 0xA0D5, 0x510F, 0x7006, 0x6112, 0x9090, 0x6107, 0x8013, 0x611A, 0xA0B0, + 0x5121, 0x7103, 0x6116, 0xA066, 0x610C, 0x9026, 0x611E, 0xA104, 0x510B, 0x611F, 0x610D, 0x9027, + 0x6000, 0x7105, 0x6117, 0xA069, 0x5111, 0x7007, 0x6113, 0x90C0, 0x6108, 0x8018, 0x611B, 0xA0B4, + 0x510F, 0x7003, 0x6110, 0x9042, 0x6002, 0x800B, 0x6119, 0xA092, 0x5121, 0x7080, 0x6115, 0xA03B, + 0x610A, 0x9012, 0x611D, 0xA0D8, 0x510B, 0x6122, 0x610E, 0x9035, 0x6001, 0x7123, 0x6118, 0xA07B, + 0x5111, 0x7009, 0x6114, 0x90F4, 0x6109, 0x8060, 0x611C, 0xA0C5, 0x510F, 0x7005, 0x6112, 0x9070, + 0x6107, 0x800F, 0x611A, 0xA0A2, 0x5121, 0x7102, 0x6116, 0xA057, 0x610C, 0x901D, 0x611E, 0xA0E9, + 0x510B, 0x611F, 0x610D, 0x902C, 0x6000, 0x7106, 0x6117, 0xA072, 0x5111, 0x7008, 0x6113, 0x90E0, + 0x6108, 0x8020, 0x611B, 0xA0BC, 0x510F, 0x7004, 0x6110, 0x9049, 0x6002, 0x800D, 0x6119, 0xA09A, + 0x5121, 0x70FF, 0x6115, 0xA04D, 0x610A, 0x9017, 0x611D, 0xA0E1, 0x510B, 0x6122, 0x610E, 0x903C, + 0x6001, 0x7124, 0x6118, 0xA089, 0x5111, 0x700A, 0x6114, 0xA02B, 0x6109, 0x80FE, 0x611C, 0xA0CF, + 0x510F, 0x7006, 0x6112, 0x9082, 0x6107, 0x8011, 0x611A, 0xA0AA, 0x5121, 0x7103, 0x6116, 0xA061, + 0x610C, 0x9022, 0x611E, 0xA0F6, 0x510B, 0x611F, 0x610D, 0x9029, 0x6000, 0x7105, 0x6117, 0xA06D, + 0x5111, 0x7007, 0x6113, 0x90CC, 0x6108, 0x8019, 0x611B, 0xA0B8, 0x510F, 0x7003, 0x6110, 0x9044, + 0x6002, 0x800C, 0x6119, 0xA096, 0x5121, 0x7080, 0x6115, 0xA047, 0x610A, 0x9015, 0x611D, 0xA0DC, + 0x510B, 0x6122, 0x610E, 0x9038, 0x6001, 0x7123, 0x6118, 0xA083, 0x5111, 0x7009, 0x6114, 0x90FC, + 0x6109, 0x80F0, 0x611C, 0xA0CA, 0x510F, 0x7005, 0x6112, 0x907F, 0x6107, 0x8010, 0x611A, 0xA0A6, + 0x5121, 0x7102, 0x6116, 0xA05C, 0x610C, 0x901F, 0x611E, 0xA0ED, 0x510B, 0x611F, 0x610D, 0x9031, + 0x6000, 0x7106, 0x6117, 0xA076, 0x5111, 0x7008, 0x6113, 0x90F1, 0x6108, 0x8040, 0x611B, 0xA0C1, + 0x510F, 0x7004, 0x6110, 0x9051, 0x6002, 0x800E, 0x6119, 0xA09E, 0x5121, 0x70FF, 0x6115, 0xA053, + 0x610A, 0x901B, 0x611D, 0xA0E5, 0x510B, 0x6122, 0x610E, 0x903F, 0x6001, 0x7124, 0x6118, 0xA08D, + 0x5111, 0x700A, 0x6114, 0xA032, 0x6109, 0x8120, 0x611C, 0xA0D4, 0x510F, 0x7006, 0x6112, 0x9088, + 0x6107, 0x8013, 0x611A, 0xA0AF, 0x5121, 0x7103, 0x6116, 0xA065, 0x610C, 0x9025, 0x611E, 0xA0FB, + 0x510B, 0x611F, 0x610D, 0x9028, 0x6000, 0x7105, 0x6117, 0xA06B, 0x5111, 0x7007, 0x6113, 0x90C6, + 0x6108, 0x8018, 0x611B, 0xA0B6, 0x510F, 0x7003, 0x6110, 0x9043, 0x6002, 0x800B, 0x6119, 0xA094, + 0x5121, 0x7080, 0x6115, 0xA045, 0x610A, 0x9014, 0x611D, 0xA0DA, 0x510B, 0x6122, 0x610E, 0x9037, + 0x6001, 0x7123, 0x6118, 0xA07D, 0x5111, 0x7009, 0x6114, 0x90F8, 0x6109, 0x8060, 0x611C, 0xA0C8, + 0x510F, 0x7005, 0x6112, 0x9078, 0x6107, 0x800F, 0x611A, 0xA0A4, 0x5121, 0x7102, 0x6116, 0xA05A, + 0x610C, 0x901E, 0x611E, 0xA0EB, 0x510B, 0x611F, 0x610D, 0x9030, 0x6000, 0x7106, 0x6117, 0xA074, + 0x5111, 0x7008, 0x6113, 0x90EE, 0x6108, 0x8020, 0x611B, 0xA0BE, 0x510F, 0x7004, 0x6110, 0x9050, + 0x6002, 0x800D, 0x6119, 0xA09C, 0x5121, 0x70FF, 0x6115, 0xA04F, 0x610A, 0x901A, 0x611D, 0xA0E3, + 0x510B, 0x6122, 0x610E, 0x903E, 0x6001, 0x7124, 0x6118, 0xA08B, 0x5111, 0x700A, 0x6114, 0xA02E, + 0x6109, 0x80FE, 0x611C, 0xA0D2, 0x510F, 0x7006, 0x6112, 0x9084, 0x6107, 0x8011, 0x611A, 0xA0AD, + 0x5121, 0x7103, 0x6116, 0xA063, 0x610C, 0x9024, 0x611E, 0xA0F9, 0x510B, 0x611F, 0x610D, 0x902A, + 0x6000, 0x7105, 0x6117, 0xA06F, 0x5111, 0x7007, 0x6113, 0x90D0, 0x6108, 0x8019, 0x611B, 0xA0BA, + 0x510F, 0x7003, 0x6110, 0x9048, 0x6002, 0x800C, 0x6119, 0xA098, 0x5121, 0x7080, 0x6115, 0xA04B, + 0x610A, 0x9016, 0x611D, 0xA0DE, 0x510B, 0x6122, 0x610E, 0x9039, 0x6001, 0x7123, 0x6118, 0xA086, + 0x5111, 0x7009, 0x6114, 0x90FD, 0x6109, 0x80F0, 0x611C, 0xA0CD, 0x510F, 0x7005, 0x6112, 0x9081, + 0x6107, 0x8010, 0x611A, 0xA0A8, 0x5121, 0x7102, 0x6116, 0xA05E, 0x610C, 0x9021, 0x611E, 0xA0F3, + 0x510B, 0x611F, 0x610D, 0x9033, 0x6000, 0x7106, 0x6117, 0xA079, 0x5111, 0x7008, 0x6113, 0x90F2, + 0x6108, 0x8040, 0x611B, 0xA0C3, 0x510F, 0x7004, 0x6110, 0x9059, 0x6002, 0x800E, 0x6119, 0xA0A0, + 0x5121, 0x70FF, 0x6115, 0xA055, 0x610A, 0x901C, 0x611D, 0xA0E7, 0x510B, 0x6122, 0x610E, 0x9041, + 0x6001, 0x7124, 0x6118, 0xA08F, 0x5111, 0x700A, 0x6114, 0xA036, 0x6109, 0x8120, 0x611C, 0xA0D6, + 0x510F, 0x7006, 0x6112, 0x9090, 0x6107, 0x8013, 0x611A, 0xA0B1, 0x5121, 0x7103, 0x6116, 0xA067, + 0x610C, 0x9026, 0x611E, 0xB0B2, 0x510B, 0x611F, 0x610D, 0x9027, 0x6000, 0x7105, 0x6117, 0xA068, + 0x5111, 0x7007, 0x6113, 0x90C0, 0x6108, 0x8018, 0x611B, 0xA0B3, 0x510F, 0x7003, 0x6110, 0x9042, + 0x6002, 0x800B, 0x6119, 0xA091, 0x5121, 0x7080, 0x6115, 0xA03A, 0x610A, 0x9012, 0x611D, 0xA0D7, + 0x510B, 0x6122, 0x610E, 0x9035, 0x6001, 0x7123, 0x6118, 0xA07A, 0x5111, 0x7009, 0x6114, 0x90F4, + 0x6109, 0x8060, 0x611C, 0xA0C4, 0x510F, 0x7005, 0x6112, 0x9070, 0x6107, 0x800F, 0x611A, 0xA0A1, + 0x5121, 0x7102, 0x6116, 0xA056, 0x610C, 0x901D, 0x611E, 0xA0E8, 0x510B, 0x611F, 0x610D, 0x902C, + 0x6000, 0x7106, 0x6117, 0xA071, 0x5111, 0x7008, 0x6113, 0x90E0, 0x6108, 0x8020, 0x611B, 0xA0BB, + 0x510F, 0x7004, 0x6110, 0x9049, 0x6002, 0x800D, 0x6119, 0xA099, 0x5121, 0x70FF, 0x6115, 0xA04C, + 0x610A, 0x9017, 0x611D, 0xA0DF, 0x510B, 0x6122, 0x610E, 0x903C, 0x6001, 0x7124, 0x6118, 0xA087, + 0x5111, 0x700A, 0x6114, 0xA023, 0x6109, 0x80FE, 0x611C, 0xA0CE, 0x510F, 0x7006, 0x6112, 0x9082, + 0x6107, 0x8011, 0x611A, 0xA0A9, 0x5121, 0x7103, 0x6116, 0xA05F, 0x610C, 0x9022, 0x611E, 0xA0F5, + 0x510B, 0x611F, 0x610D, 0x9029, 0x6000, 0x7105, 0x6117, 0xA06C, 0x5111, 0x7007, 0x6113, 0x90CC, + 0x6108, 0x8019, 0x611B, 0xA0B7, 0x510F, 0x7003, 0x6110, 0x9044, 0x6002, 0x800C, 0x6119, 0xA095, + 0x5121, 0x7080, 0x6115, 0xA046, 0x610A, 0x9015, 0x611D, 0xA0DB, 0x510B, 0x6122, 0x610E, 0x9038, + 0x6001, 0x7123, 0x6118, 0xA07E, 0x5111, 0x7009, 0x6114, 0x90FC, 0x6109, 0x80F0, 0x611C, 0xA0C9, + 0x510F, 0x7005, 0x6112, 0x907F, 0x6107, 0x8010, 0x611A, 0xA0A5, 0x5121, 0x7102, 0x6116, 0xA05B, + 0x610C, 0x901F, 0x611E, 0xA0EC, 0x510B, 0x611F, 0x610D, 0x9031, 0x6000, 0x7106, 0x6117, 0xA075, + 0x5111, 0x7008, 0x6113, 0x90F1, 0x6108, 0x8040, 0x611B, 0xA0BF, 0x510F, 0x7004, 0x6110, 0x9051, + 0x6002, 0x800E, 0x6119, 0xA09D, 0x5121, 0x70FF, 0x6115, 0xA052, 0x610A, 0x901B, 0x611D, 0xA0E4, + 0x510B, 0x6122, 0x610E, 0x903F, 0x6001, 0x7124, 0x6118, 0xA08C, 0x5111, 0x700A, 0x6114, 0xA02F, + 0x6109, 0x8120, 0x611C, 0xA0D3, 0x510F, 0x7006, 0x6112, 0x9088, 0x6107, 0x8013, 0x611A, 0xA0AE, + 0x5121, 0x7103, 0x6116, 0xA064, 0x610C, 0x9025, 0x611E, 0xA0FA, 0x510B, 0x611F, 0x610D, 0x9028, + 0x6000, 0x7105, 0x6117, 0xA06A, 0x5111, 0x7007, 0x6113, 0x90C6, 0x6108, 0x8018, 0x611B, 0xA0B5, + 0x510F, 0x7003, 0x6110, 0x9043, 0x6002, 0x800B, 0x6119, 0xA093, 0x5121, 0x7080, 0x6115, 0xA03D, + 0x610A, 0x9014, 0x611D, 0xA0D9, 0x510B, 0x6122, 0x610E, 0x9037, 0x6001, 0x7123, 0x6118, 0xA07C, + 0x5111, 0x7009, 0x6114, 0x90F8, 0x6109, 0x8060, 0x611C, 0xA0C7, 0x510F, 0x7005, 0x6112, 0x9078, + 0x6107, 0x800F, 0x611A, 0xA0A3, 0x5121, 0x7102, 0x6116, 0xA058, 0x610C, 0x901E, 0x611E, 0xA0EA, + 0x510B, 0x611F, 0x610D, 0x9030, 0x6000, 0x7106, 0x6117, 0xA073, 0x5111, 0x7008, 0x6113, 0x90EE, + 0x6108, 0x8020, 0x611B, 0xA0BD, 0x510F, 0x7004, 0x6110, 0x9050, 0x6002, 0x800D, 0x6119, 0xA09B, + 0x5121, 0x70FF, 0x6115, 0xA04E, 0x610A, 0x901A, 0x611D, 0xA0E2, 0x510B, 0x6122, 0x610E, 0x903E, + 0x6001, 0x7124, 0x6118, 0xA08A, 0x5111, 0x700A, 0x6114, 0xA02D, 0x6109, 0x80FE, 0x611C, 0xA0D1, + 0x510F, 0x7006, 0x6112, 0x9084, 0x6107, 0x8011, 0x611A, 0xA0AC, 0x5121, 0x7103, 0x6116, 0xA062, + 0x610C, 0x9024, 0x611E, 0xA0F7, 0x510B, 0x611F, 0x610D, 0x902A, 0x6000, 0x7105, 0x6117, 0xA06E, + 0x5111, 0x7007, 0x6113, 0x90D0, 0x6108, 0x8019, 0x611B, 0xA0B9, 0x510F, 0x7003, 0x6110, 0x9048, + 0x6002, 0x800C, 0x6119, 0xA097, 0x5121, 0x7080, 0x6115, 0xA04A, 0x610A, 0x9016, 0x611D, 0xA0DD, + 0x510B, 0x6122, 0x610E, 0x9039, 0x6001, 0x7123, 0x6118, 0xA085, 0x5111, 0x7009, 0x6114, 0x90FD, + 0x6109, 0x80F0, 0x611C, 0xA0CB, 0x510F, 0x7005, 0x6112, 0x9081, 0x6107, 0x8010, 0x611A, 0xA0A7, + 0x5121, 0x7102, 0x6116, 0xA05D, 0x610C, 0x9021, 0x611E, 0xA0EF, 0x510B, 0x611F, 0x610D, 0x9033, + 0x6000, 0x7106, 0x6117, 0xA077, 0x5111, 0x7008, 0x6113, 0x90F2, 0x6108, 0x8040, 0x611B, 0xA0C2, + 0x510F, 0x7004, 0x6110, 0x9059, 0x6002, 0x800E, 0x6119, 0xA09F, 0x5121, 0x70FF, 0x6115, 0xA054, + 0x610A, 0x901C, 0x611D, 0xA0E6, 0x510B, 0x6122, 0x610E, 0x9041, 0x6001, 0x7124, 0x6118, 0xA08E, + 0x5111, 0x700A, 0x6114, 0xA034, 0x6109, 0x8120, 0x611C, 0xA0D5, 0x510F, 0x7006, 0x6112, 0x9090, + 0x6107, 0x8013, 0x611A, 0xA0B0, 0x5121, 0x7103, 0x6116, 0xA066, 0x610C, 0x9026, 0x611E, 0xA104, + 0x510B, 0x611F, 0x610D, 0x9027, 0x6000, 0x7105, 0x6117, 0xA069, 0x5111, 0x7007, 0x6113, 0x90C0, + 0x6108, 0x8018, 0x611B, 0xA0B4, 0x510F, 0x7003, 0x6110, 0x9042, 0x6002, 0x800B, 0x6119, 0xA092, + 0x5121, 0x7080, 0x6115, 0xA03B, 0x610A, 0x9012, 0x611D, 0xA0D8, 0x510B, 0x6122, 0x610E, 0x9035, + 0x6001, 0x7123, 0x6118, 0xA07B, 0x5111, 0x7009, 0x6114, 0x90F4, 0x6109, 0x8060, 0x611C, 0xA0C5, + 0x510F, 0x7005, 0x6112, 0x9070, 0x6107, 0x800F, 0x611A, 0xA0A2, 0x5121, 0x7102, 0x6116, 0xA057, + 0x610C, 0x901D, 0x611E, 0xA0E9, 0x510B, 0x611F, 0x610D, 0x902C, 0x6000, 0x7106, 0x6117, 0xA072, + 0x5111, 0x7008, 0x6113, 0x90E0, 0x6108, 0x8020, 0x611B, 0xA0BC, 0x510F, 0x7004, 0x6110, 0x9049, + 0x6002, 0x800D, 0x6119, 0xA09A, 0x5121, 0x70FF, 0x6115, 0xA04D, 0x610A, 0x9017, 0x611D, 0xA0E1, + 0x510B, 0x6122, 0x610E, 0x903C, 0x6001, 0x7124, 0x6118, 0xA089, 0x5111, 0x700A, 0x6114, 0xA02B, + 0x6109, 0x80FE, 0x611C, 0xA0CF, 0x510F, 0x7006, 0x6112, 0x9082, 0x6107, 0x8011, 0x611A, 0xA0AA, + 0x5121, 0x7103, 0x6116, 0xA061, 0x610C, 0x9022, 0x611E, 0xA0F6, 0x510B, 0x611F, 0x610D, 0x9029, + 0x6000, 0x7105, 0x6117, 0xA06D, 0x5111, 0x7007, 0x6113, 0x90CC, 0x6108, 0x8019, 0x611B, 0xA0B8, + 0x510F, 0x7003, 0x6110, 0x9044, 0x6002, 0x800C, 0x6119, 0xA096, 0x5121, 0x7080, 0x6115, 0xA047, + 0x610A, 0x9015, 0x611D, 0xA0DC, 0x510B, 0x6122, 0x610E, 0x9038, 0x6001, 0x7123, 0x6118, 0xA083, + 0x5111, 0x7009, 0x6114, 0x90FC, 0x6109, 0x80F0, 0x611C, 0xA0CA, 0x510F, 0x7005, 0x6112, 0x907F, + 0x6107, 0x8010, 0x611A, 0xA0A6, 0x5121, 0x7102, 0x6116, 0xA05C, 0x610C, 0x901F, 0x611E, 0xA0ED, + 0x510B, 0x611F, 0x610D, 0x9031, 0x6000, 0x7106, 0x6117, 0xA076, 0x5111, 0x7008, 0x6113, 0x90F1, + 0x6108, 0x8040, 0x611B, 0xA0C1, 0x510F, 0x7004, 0x6110, 0x9051, 0x6002, 0x800E, 0x6119, 0xA09E, + 0x5121, 0x70FF, 0x6115, 0xA053, 0x610A, 0x901B, 0x611D, 0xA0E5, 0x510B, 0x6122, 0x610E, 0x903F, + 0x6001, 0x7124, 0x6118, 0xA08D, 0x5111, 0x700A, 0x6114, 0xA032, 0x6109, 0x8120, 0x611C, 0xA0D4, + 0x510F, 0x7006, 0x6112, 0x9088, 0x6107, 0x8013, 0x611A, 0xA0AF, 0x5121, 0x7103, 0x6116, 0xA065, + 0x610C, 0x9025, 0x611E, 0xA0FB, 0x510B, 0x611F, 0x610D, 0x9028, 0x6000, 0x7105, 0x6117, 0xA06B, + 0x5111, 0x7007, 0x6113, 0x90C6, 0x6108, 0x8018, 0x611B, 0xA0B6, 0x510F, 0x7003, 0x6110, 0x9043, + 0x6002, 0x800B, 0x6119, 0xA094, 0x5121, 0x7080, 0x6115, 0xA045, 0x610A, 0x9014, 0x611D, 0xA0DA, + 0x510B, 0x6122, 0x610E, 0x9037, 0x6001, 0x7123, 0x6118, 0xA07D, 0x5111, 0x7009, 0x6114, 0x90F8, + 0x6109, 0x8060, 0x611C, 0xA0C8, 0x510F, 0x7005, 0x6112, 0x9078, 0x6107, 0x800F, 0x611A, 0xA0A4, + 0x5121, 0x7102, 0x6116, 0xA05A, 0x610C, 0x901E, 0x611E, 0xA0EB, 0x510B, 0x611F, 0x610D, 0x9030, + 0x6000, 0x7106, 0x6117, 0xA074, 0x5111, 0x7008, 0x6113, 0x90EE, 0x6108, 0x8020, 0x611B, 0xA0BE, + 0x510F, 0x7004, 0x6110, 0x9050, 0x6002, 0x800D, 0x6119, 0xA09C, 0x5121, 0x70FF, 0x6115, 0xA04F, + 0x610A, 0x901A, 0x611D, 0xA0E3, 0x510B, 0x6122, 0x610E, 0x903E, 0x6001, 0x7124, 0x6118, 0xA08B, + 0x5111, 0x700A, 0x6114, 0xA02E, 0x6109, 0x80FE, 0x611C, 0xA0D2, 0x510F, 0x7006, 0x6112, 0x9084, + 0x6107, 0x8011, 0x611A, 0xA0AD, 0x5121, 0x7103, 0x6116, 0xA063, 0x610C, 0x9024, 0x611E, 0xA0F9, + 0x510B, 0x611F, 0x610D, 0x902A, 0x6000, 0x7105, 0x6117, 0xA06F, 0x5111, 0x7007, 0x6113, 0x90D0, + 0x6108, 0x8019, 0x611B, 0xA0BA, 0x510F, 0x7003, 0x6110, 0x9048, 0x6002, 0x800C, 0x6119, 0xA098, + 0x5121, 0x7080, 0x6115, 0xA04B, 0x610A, 0x9016, 0x611D, 0xA0DE, 0x510B, 0x6122, 0x610E, 0x9039, + 0x6001, 0x7123, 0x6118, 0xA086, 0x5111, 0x7009, 0x6114, 0x90FD, 0x6109, 0x80F0, 0x611C, 0xA0CD, + 0x510F, 0x7005, 0x6112, 0x9081, 0x6107, 0x8010, 0x611A, 0xA0A8, 0x5121, 0x7102, 0x6116, 0xA05E, + 0x610C, 0x9021, 0x611E, 0xA0F3, 0x510B, 0x611F, 0x610D, 0x9033, 0x6000, 0x7106, 0x6117, 0xA079, + 0x5111, 0x7008, 0x6113, 0x90F2, 0x6108, 0x8040, 0x611B, 0xA0C3, 0x510F, 0x7004, 0x6110, 0x9059, + 0x6002, 0x800E, 0x6119, 0xA0A0, 0x5121, 0x70FF, 0x6115, 0xA055, 0x610A, 0x901C, 0x611D, 0xA0E7, + 0x510B, 0x6122, 0x610E, 0x9041, 0x6001, 0x7124, 0x6118, 0xA08F, 0x5111, 0x700A, 0x6114, 0xA036, + 0x6109, 0x8120, 0x611C, 0xA0D6, 0x510F, 0x7006, 0x6112, 0x9090, 0x6107, 0x8013, 0x611A, 0xA0B1, + 0x5121, 0x7103, 0x6116, 0xA067, 0x610C, 0x9026, 0x611E, 0xD0AB, 0x510B, 0x611F, 0x610D, 0x9027, + 0x6000, 0x7105, 0x6117, 0xA068, 0x5111, 0x7007, 0x6113, 0x90C0, 0x6108, 0x8018, 0x611B, 0xA0B3, + 0x510F, 0x7003, 0x6110, 0x9042, 0x6002, 0x800B, 0x6119, 0xA091, 0x5121, 0x7080, 0x6115, 0xA03A, + 0x610A, 0x9012, 0x611D, 0xA0D7, 0x510B, 0x6122, 0x610E, 0x9035, 0x6001, 0x7123, 0x6118, 0xA07A, + 0x5111, 0x7009, 0x6114, 0x90F4, 0x6109, 0x8060, 0x611C, 0xA0C4, 0x510F, 0x7005, 0x6112, 0x9070, + 0x6107, 0x800F, 0x611A, 0xA0A1, 0x5121, 0x7102, 0x6116, 0xA056, 0x610C, 0x901D, 0x611E, 0xA0E8, + 0x510B, 0x611F, 0x610D, 0x902C, 0x6000, 0x7106, 0x6117, 0xA071, 0x5111, 0x7008, 0x6113, 0x90E0, + 0x6108, 0x8020, 0x611B, 0xA0BB, 0x510F, 0x7004, 0x6110, 0x9049, 0x6002, 0x800D, 0x6119, 0xA099, + 0x5121, 0x70FF, 0x6115, 0xA04C, 0x610A, 0x9017, 0x611D, 0xA0DF, 0x510B, 0x6122, 0x610E, 0x903C, + 0x6001, 0x7124, 0x6118, 0xA087, 0x5111, 0x700A, 0x6114, 0xA023, 0x6109, 0x80FE, 0x611C, 0xA0CE, + 0x510F, 0x7006, 0x6112, 0x9082, 0x6107, 0x8011, 0x611A, 0xA0A9, 0x5121, 0x7103, 0x6116, 0xA05F, + 0x610C, 0x9022, 0x611E, 0xA0F5, 0x510B, 0x611F, 0x610D, 0x9029, 0x6000, 0x7105, 0x6117, 0xA06C, + 0x5111, 0x7007, 0x6113, 0x90CC, 0x6108, 0x8019, 0x611B, 0xA0B7, 0x510F, 0x7003, 0x6110, 0x9044, + 0x6002, 0x800C, 0x6119, 0xA095, 0x5121, 0x7080, 0x6115, 0xA046, 0x610A, 0x9015, 0x611D, 0xA0DB, + 0x510B, 0x6122, 0x610E, 0x9038, 0x6001, 0x7123, 0x6118, 0xA07E, 0x5111, 0x7009, 0x6114, 0x90FC, + 0x6109, 0x80F0, 0x611C, 0xA0C9, 0x510F, 0x7005, 0x6112, 0x907F, 0x6107, 0x8010, 0x611A, 0xA0A5, + 0x5121, 0x7102, 0x6116, 0xA05B, 0x610C, 0x901F, 0x611E, 0xA0EC, 0x510B, 0x611F, 0x610D, 0x9031, + 0x6000, 0x7106, 0x6117, 0xA075, 0x5111, 0x7008, 0x6113, 0x90F1, 0x6108, 0x8040, 0x611B, 0xA0BF, + 0x510F, 0x7004, 0x6110, 0x9051, 0x6002, 0x800E, 0x6119, 0xA09D, 0x5121, 0x70FF, 0x6115, 0xA052, + 0x610A, 0x901B, 0x611D, 0xA0E4, 0x510B, 0x6122, 0x610E, 0x903F, 0x6001, 0x7124, 0x6118, 0xA08C, + 0x5111, 0x700A, 0x6114, 0xA02F, 0x6109, 0x8120, 0x611C, 0xA0D3, 0x510F, 0x7006, 0x6112, 0x9088, + 0x6107, 0x8013, 0x611A, 0xA0AE, 0x5121, 0x7103, 0x6116, 0xA064, 0x610C, 0x9025, 0x611E, 0xA0FA, + 0x510B, 0x611F, 0x610D, 0x9028, 0x6000, 0x7105, 0x6117, 0xA06A, 0x5111, 0x7007, 0x6113, 0x90C6, + 0x6108, 0x8018, 0x611B, 0xA0B5, 0x510F, 0x7003, 0x6110, 0x9043, 0x6002, 0x800B, 0x6119, 0xA093, + 0x5121, 0x7080, 0x6115, 0xA03D, 0x610A, 0x9014, 0x611D, 0xA0D9, 0x510B, 0x6122, 0x610E, 0x9037, + 0x6001, 0x7123, 0x6118, 0xA07C, 0x5111, 0x7009, 0x6114, 0x90F8, 0x6109, 0x8060, 0x611C, 0xA0C7, + 0x510F, 0x7005, 0x6112, 0x9078, 0x6107, 0x800F, 0x611A, 0xA0A3, 0x5121, 0x7102, 0x6116, 0xA058, + 0x610C, 0x901E, 0x611E, 0xA0EA, 0x510B, 0x611F, 0x610D, 0x9030, 0x6000, 0x7106, 0x6117, 0xA073, + 0x5111, 0x7008, 0x6113, 0x90EE, 0x6108, 0x8020, 0x611B, 0xA0BD, 0x510F, 0x7004, 0x6110, 0x9050, + 0x6002, 0x800D, 0x6119, 0xA09B, 0x5121, 0x70FF, 0x6115, 0xA04E, 0x610A, 0x901A, 0x611D, 0xA0E2, + 0x510B, 0x6122, 0x610E, 0x903E, 0x6001, 0x7124, 0x6118, 0xA08A, 0x5111, 0x700A, 0x6114, 0xA02D, + 0x6109, 0x80FE, 0x611C, 0xA0D1, 0x510F, 0x7006, 0x6112, 0x9084, 0x6107, 0x8011, 0x611A, 0xA0AC, + 0x5121, 0x7103, 0x6116, 0xA062, 0x610C, 0x9024, 0x611E, 0xA0F7, 0x510B, 0x611F, 0x610D, 0x902A, + 0x6000, 0x7105, 0x6117, 0xA06E, 0x5111, 0x7007, 0x6113, 0x90D0, 0x6108, 0x8019, 0x611B, 0xA0B9, + 0x510F, 0x7003, 0x6110, 0x9048, 0x6002, 0x800C, 0x6119, 0xA097, 0x5121, 0x7080, 0x6115, 0xA04A, + 0x610A, 0x9016, 0x611D, 0xA0DD, 0x510B, 0x6122, 0x610E, 0x9039, 0x6001, 0x7123, 0x6118, 0xA085, + 0x5111, 0x7009, 0x6114, 0x90FD, 0x6109, 0x80F0, 0x611C, 0xA0CB, 0x510F, 0x7005, 0x6112, 0x9081, + 0x6107, 0x8010, 0x611A, 0xA0A7, 0x5121, 0x7102, 0x6116, 0xA05D, 0x610C, 0x9021, 0x611E, 0xA0EF, + 0x510B, 0x611F, 0x610D, 0x9033, 0x6000, 0x7106, 0x6117, 0xA077, 0x5111, 0x7008, 0x6113, 0x90F2, + 0x6108, 0x8040, 0x611B, 0xA0C2, 0x510F, 0x7004, 0x6110, 0x9059, 0x6002, 0x800E, 0x6119, 0xA09F, + 0x5121, 0x70FF, 0x6115, 0xA054, 0x610A, 0x901C, 0x611D, 0xA0E6, 0x510B, 0x6122, 0x610E, 0x9041, + 0x6001, 0x7124, 0x6118, 0xA08E, 0x5111, 0x700A, 0x6114, 0xA034, 0x6109, 0x8120, 0x611C, 0xA0D5, + 0x510F, 0x7006, 0x6112, 0x9090, 0x6107, 0x8013, 0x611A, 0xA0B0, 0x5121, 0x7103, 0x6116, 0xA066, + 0x610C, 0x9026, 0x611E, 0xA104, 0x510B, 0x611F, 0x610D, 0x9027, 0x6000, 0x7105, 0x6117, 0xA069, + 0x5111, 0x7007, 0x6113, 0x90C0, 0x6108, 0x8018, 0x611B, 0xA0B4, 0x510F, 0x7003, 0x6110, 0x9042, + 0x6002, 0x800B, 0x6119, 0xA092, 0x5121, 0x7080, 0x6115, 0xA03B, 0x610A, 0x9012, 0x611D, 0xA0D8, + 0x510B, 0x6122, 0x610E, 0x9035, 0x6001, 0x7123, 0x6118, 0xA07B, 0x5111, 0x7009, 0x6114, 0x90F4, + 0x6109, 0x8060, 0x611C, 0xA0C5, 0x510F, 0x7005, 0x6112, 0x9070, 0x6107, 0x800F, 0x611A, 0xA0A2, + 0x5121, 0x7102, 0x6116, 0xA057, 0x610C, 0x901D, 0x611E, 0xA0E9, 0x510B, 0x611F, 0x610D, 0x902C, + 0x6000, 0x7106, 0x6117, 0xA072, 0x5111, 0x7008, 0x6113, 0x90E0, 0x6108, 0x8020, 0x611B, 0xA0BC, + 0x510F, 0x7004, 0x6110, 0x9049, 0x6002, 0x800D, 0x6119, 0xA09A, 0x5121, 0x70FF, 0x6115, 0xA04D, + 0x610A, 0x9017, 0x611D, 0xA0E1, 0x510B, 0x6122, 0x610E, 0x903C, 0x6001, 0x7124, 0x6118, 0xA089, + 0x5111, 0x700A, 0x6114, 0xA02B, 0x6109, 0x80FE, 0x611C, 0xA0CF, 0x510F, 0x7006, 0x6112, 0x9082, + 0x6107, 0x8011, 0x611A, 0xA0AA, 0x5121, 0x7103, 0x6116, 0xA061, 0x610C, 0x9022, 0x611E, 0xA0F6, + 0x510B, 0x611F, 0x610D, 0x9029, 0x6000, 0x7105, 0x6117, 0xA06D, 0x5111, 0x7007, 0x6113, 0x90CC, + 0x6108, 0x8019, 0x611B, 0xA0B8, 0x510F, 0x7003, 0x6110, 0x9044, 0x6002, 0x800C, 0x6119, 0xA096, + 0x5121, 0x7080, 0x6115, 0xA047, 0x610A, 0x9015, 0x611D, 0xA0DC, 0x510B, 0x6122, 0x610E, 0x9038, + 0x6001, 0x7123, 0x6118, 0xA083, 0x5111, 0x7009, 0x6114, 0x90FC, 0x6109, 0x80F0, 0x611C, 0xA0CA, + 0x510F, 0x7005, 0x6112, 0x907F, 0x6107, 0x8010, 0x611A, 0xA0A6, 0x5121, 0x7102, 0x6116, 0xA05C, + 0x610C, 0x901F, 0x611E, 0xA0ED, 0x510B, 0x611F, 0x610D, 0x9031, 0x6000, 0x7106, 0x6117, 0xA076, + 0x5111, 0x7008, 0x6113, 0x90F1, 0x6108, 0x8040, 0x611B, 0xA0C1, 0x510F, 0x7004, 0x6110, 0x9051, + 0x6002, 0x800E, 0x6119, 0xA09E, 0x5121, 0x70FF, 0x6115, 0xA053, 0x610A, 0x901B, 0x611D, 0xA0E5, + 0x510B, 0x6122, 0x610E, 0x903F, 0x6001, 0x7124, 0x6118, 0xA08D, 0x5111, 0x700A, 0x6114, 0xA032, + 0x6109, 0x8120, 0x611C, 0xA0D4, 0x510F, 0x7006, 0x6112, 0x9088, 0x6107, 0x8013, 0x611A, 0xA0AF, + 0x5121, 0x7103, 0x6116, 0xA065, 0x610C, 0x9025, 0x611E, 0xA0FB, 0x510B, 0x611F, 0x610D, 0x9028, + 0x6000, 0x7105, 0x6117, 0xA06B, 0x5111, 0x7007, 0x6113, 0x90C6, 0x6108, 0x8018, 0x611B, 0xA0B6, + 0x510F, 0x7003, 0x6110, 0x9043, 0x6002, 0x800B, 0x6119, 0xA094, 0x5121, 0x7080, 0x6115, 0xA045, + 0x610A, 0x9014, 0x611D, 0xA0DA, 0x510B, 0x6122, 0x610E, 0x9037, 0x6001, 0x7123, 0x6118, 0xA07D, + 0x5111, 0x7009, 0x6114, 0x90F8, 0x6109, 0x8060, 0x611C, 0xA0C8, 0x510F, 0x7005, 0x6112, 0x9078, + 0x6107, 0x800F, 0x611A, 0xA0A4, 0x5121, 0x7102, 0x6116, 0xA05A, 0x610C, 0x901E, 0x611E, 0xA0EB, + 0x510B, 0x611F, 0x610D, 0x9030, 0x6000, 0x7106, 0x6117, 0xA074, 0x5111, 0x7008, 0x6113, 0x90EE, + 0x6108, 0x8020, 0x611B, 0xA0BE, 0x510F, 0x7004, 0x6110, 0x9050, 0x6002, 0x800D, 0x6119, 0xA09C, + 0x5121, 0x70FF, 0x6115, 0xA04F, 0x610A, 0x901A, 0x611D, 0xA0E3, 0x510B, 0x6122, 0x610E, 0x903E, + 0x6001, 0x7124, 0x6118, 0xA08B, 0x5111, 0x700A, 0x6114, 0xA02E, 0x6109, 0x80FE, 0x611C, 0xA0D2, + 0x510F, 0x7006, 0x6112, 0x9084, 0x6107, 0x8011, 0x611A, 0xA0AD, 0x5121, 0x7103, 0x6116, 0xA063, + 0x610C, 0x9024, 0x611E, 0xA0F9, 0x510B, 0x611F, 0x610D, 0x902A, 0x6000, 0x7105, 0x6117, 0xA06F, + 0x5111, 0x7007, 0x6113, 0x90D0, 0x6108, 0x8019, 0x611B, 0xA0BA, 0x510F, 0x7003, 0x6110, 0x9048, + 0x6002, 0x800C, 0x6119, 0xA098, 0x5121, 0x7080, 0x6115, 0xA04B, 0x610A, 0x9016, 0x611D, 0xA0DE, + 0x510B, 0x6122, 0x610E, 0x9039, 0x6001, 0x7123, 0x6118, 0xA086, 0x5111, 0x7009, 0x6114, 0x90FD, + 0x6109, 0x80F0, 0x611C, 0xA0CD, 0x510F, 0x7005, 0x6112, 0x9081, 0x6107, 0x8010, 0x611A, 0xA0A8, + 0x5121, 0x7102, 0x6116, 0xA05E, 0x610C, 0x9021, 0x611E, 0xA0F3, 0x510B, 0x611F, 0x610D, 0x9033, + 0x6000, 0x7106, 0x6117, 0xA079, 0x5111, 0x7008, 0x6113, 0x90F2, 0x6108, 0x8040, 0x611B, 0xA0C3, + 0x510F, 0x7004, 0x6110, 0x9059, 0x6002, 0x800E, 0x6119, 0xA0A0, 0x5121, 0x70FF, 0x6115, 0xA055, + 0x610A, 0x901C, 0x611D, 0xA0E7, 0x510B, 0x6122, 0x610E, 0x9041, 0x6001, 0x7124, 0x6118, 0xA08F, + 0x5111, 0x700A, 0x6114, 0xA036, 0x6109, 0x8120, 0x611C, 0xA0D6, 0x510F, 0x7006, 0x6112, 0x9090, + 0x6107, 0x8013, 0x611A, 0xA0B1, 0x5121, 0x7103, 0x6116, 0xA067, 0x610C, 0x9026, 0x611E, 0xB0B2, + 0x510B, 0x611F, 0x610D, 0x9027, 0x6000, 0x7105, 0x6117, 0xA068, 0x5111, 0x7007, 0x6113, 0x90C0, + 0x6108, 0x8018, 0x611B, 0xA0B3, 0x510F, 0x7003, 0x6110, 0x9042, 0x6002, 0x800B, 0x6119, 0xA091, + 0x5121, 0x7080, 0x6115, 0xA03A, 0x610A, 0x9012, 0x611D, 0xA0D7, 0x510B, 0x6122, 0x610E, 0x9035, + 0x6001, 0x7123, 0x6118, 0xA07A, 0x5111, 0x7009, 0x6114, 0x90F4, 0x6109, 0x8060, 0x611C, 0xA0C4, + 0x510F, 0x7005, 0x6112, 0x9070, 0x6107, 0x800F, 0x611A, 0xA0A1, 0x5121, 0x7102, 0x6116, 0xA056, + 0x610C, 0x901D, 0x611E, 0xA0E8, 0x510B, 0x611F, 0x610D, 0x902C, 0x6000, 0x7106, 0x6117, 0xA071, + 0x5111, 0x7008, 0x6113, 0x90E0, 0x6108, 0x8020, 0x611B, 0xA0BB, 0x510F, 0x7004, 0x6110, 0x9049, + 0x6002, 0x800D, 0x6119, 0xA099, 0x5121, 0x70FF, 0x6115, 0xA04C, 0x610A, 0x9017, 0x611D, 0xA0DF, + 0x510B, 0x6122, 0x610E, 0x903C, 0x6001, 0x7124, 0x6118, 0xA087, 0x5111, 0x700A, 0x6114, 0xA023, + 0x6109, 0x80FE, 0x611C, 0xA0CE, 0x510F, 0x7006, 0x6112, 0x9082, 0x6107, 0x8011, 0x611A, 0xA0A9, + 0x5121, 0x7103, 0x6116, 0xA05F, 0x610C, 0x9022, 0x611E, 0xA0F5, 0x510B, 0x611F, 0x610D, 0x9029, + 0x6000, 0x7105, 0x6117, 0xA06C, 0x5111, 0x7007, 0x6113, 0x90CC, 0x6108, 0x8019, 0x611B, 0xA0B7, + 0x510F, 0x7003, 0x6110, 0x9044, 0x6002, 0x800C, 0x6119, 0xA095, 0x5121, 0x7080, 0x6115, 0xA046, + 0x610A, 0x9015, 0x611D, 0xA0DB, 0x510B, 0x6122, 0x610E, 0x9038, 0x6001, 0x7123, 0x6118, 0xA07E, + 0x5111, 0x7009, 0x6114, 0x90FC, 0x6109, 0x80F0, 0x611C, 0xA0C9, 0x510F, 0x7005, 0x6112, 0x907F, + 0x6107, 0x8010, 0x611A, 0xA0A5, 0x5121, 0x7102, 0x6116, 0xA05B, 0x610C, 0x901F, 0x611E, 0xA0EC, + 0x510B, 0x611F, 0x610D, 0x9031, 0x6000, 0x7106, 0x6117, 0xA075, 0x5111, 0x7008, 0x6113, 0x90F1, + 0x6108, 0x8040, 0x611B, 0xA0BF, 0x510F, 0x7004, 0x6110, 0x9051, 0x6002, 0x800E, 0x6119, 0xA09D, + 0x5121, 0x70FF, 0x6115, 0xA052, 0x610A, 0x901B, 0x611D, 0xA0E4, 0x510B, 0x6122, 0x610E, 0x903F, + 0x6001, 0x7124, 0x6118, 0xA08C, 0x5111, 0x700A, 0x6114, 0xA02F, 0x6109, 0x8120, 0x611C, 0xA0D3, + 0x510F, 0x7006, 0x6112, 0x9088, 0x6107, 0x8013, 0x611A, 0xA0AE, 0x5121, 0x7103, 0x6116, 0xA064, + 0x610C, 0x9025, 0x611E, 0xA0FA, 0x510B, 0x611F, 0x610D, 0x9028, 0x6000, 0x7105, 0x6117, 0xA06A, + 0x5111, 0x7007, 0x6113, 0x90C6, 0x6108, 0x8018, 0x611B, 0xA0B5, 0x510F, 0x7003, 0x6110, 0x9043, + 0x6002, 0x800B, 0x6119, 0xA093, 0x5121, 0x7080, 0x6115, 0xA03D, 0x610A, 0x9014, 0x611D, 0xA0D9, + 0x510B, 0x6122, 0x610E, 0x9037, 0x6001, 0x7123, 0x6118, 0xA07C, 0x5111, 0x7009, 0x6114, 0x90F8, + 0x6109, 0x8060, 0x611C, 0xA0C7, 0x510F, 0x7005, 0x6112, 0x9078, 0x6107, 0x800F, 0x611A, 0xA0A3, + 0x5121, 0x7102, 0x6116, 0xA058, 0x610C, 0x901E, 0x611E, 0xA0EA, 0x510B, 0x611F, 0x610D, 0x9030, + 0x6000, 0x7106, 0x6117, 0xA073, 0x5111, 0x7008, 0x6113, 0x90EE, 0x6108, 0x8020, 0x611B, 0xA0BD, + 0x510F, 0x7004, 0x6110, 0x9050, 0x6002, 0x800D, 0x6119, 0xA09B, 0x5121, 0x70FF, 0x6115, 0xA04E, + 0x610A, 0x901A, 0x611D, 0xA0E2, 0x510B, 0x6122, 0x610E, 0x903E, 0x6001, 0x7124, 0x6118, 0xA08A, + 0x5111, 0x700A, 0x6114, 0xA02D, 0x6109, 0x80FE, 0x611C, 0xA0D1, 0x510F, 0x7006, 0x6112, 0x9084, + 0x6107, 0x8011, 0x611A, 0xA0AC, 0x5121, 0x7103, 0x6116, 0xA062, 0x610C, 0x9024, 0x611E, 0xA0F7, + 0x510B, 0x611F, 0x610D, 0x902A, 0x6000, 0x7105, 0x6117, 0xA06E, 0x5111, 0x7007, 0x6113, 0x90D0, + 0x6108, 0x8019, 0x611B, 0xA0B9, 0x510F, 0x7003, 0x6110, 0x9048, 0x6002, 0x800C, 0x6119, 0xA097, + 0x5121, 0x7080, 0x6115, 0xA04A, 0x610A, 0x9016, 0x611D, 0xA0DD, 0x510B, 0x6122, 0x610E, 0x9039, + 0x6001, 0x7123, 0x6118, 0xA085, 0x5111, 0x7009, 0x6114, 0x90FD, 0x6109, 0x80F0, 0x611C, 0xA0CB, + 0x510F, 0x7005, 0x6112, 0x9081, 0x6107, 0x8010, 0x611A, 0xA0A7, 0x5121, 0x7102, 0x6116, 0xA05D, + 0x610C, 0x9021, 0x611E, 0xA0EF, 0x510B, 0x611F, 0x610D, 0x9033, 0x6000, 0x7106, 0x6117, 0xA077, + 0x5111, 0x7008, 0x6113, 0x90F2, 0x6108, 0x8040, 0x611B, 0xA0C2, 0x510F, 0x7004, 0x6110, 0x9059, + 0x6002, 0x800E, 0x6119, 0xA09F, 0x5121, 0x70FF, 0x6115, 0xA054, 0x610A, 0x901C, 0x611D, 0xA0E6, + 0x510B, 0x6122, 0x610E, 0x9041, 0x6001, 0x7124, 0x6118, 0xA08E, 0x5111, 0x700A, 0x6114, 0xA034, + 0x6109, 0x8120, 0x611C, 0xA0D5, 0x510F, 0x7006, 0x6112, 0x9090, 0x6107, 0x8013, 0x611A, 0xA0B0, + 0x5121, 0x7103, 0x6116, 0xA066, 0x610C, 0x9026, 0x611E, 0xA104, 0x510B, 0x611F, 0x610D, 0x9027, + 0x6000, 0x7105, 0x6117, 0xA069, 0x5111, 0x7007, 0x6113, 0x90C0, 0x6108, 0x8018, 0x611B, 0xA0B4, + 0x510F, 0x7003, 0x6110, 0x9042, 0x6002, 0x800B, 0x6119, 0xA092, 0x5121, 0x7080, 0x6115, 0xA03B, + 0x610A, 0x9012, 0x611D, 0xA0D8, 0x510B, 0x6122, 0x610E, 0x9035, 0x6001, 0x7123, 0x6118, 0xA07B, + 0x5111, 0x7009, 0x6114, 0x90F4, 0x6109, 0x8060, 0x611C, 0xA0C5, 0x510F, 0x7005, 0x6112, 0x9070, + 0x6107, 0x800F, 0x611A, 0xA0A2, 0x5121, 0x7102, 0x6116, 0xA057, 0x610C, 0x901D, 0x611E, 0xA0E9, + 0x510B, 0x611F, 0x610D, 0x902C, 0x6000, 0x7106, 0x6117, 0xA072, 0x5111, 0x7008, 0x6113, 0x90E0, + 0x6108, 0x8020, 0x611B, 0xA0BC, 0x510F, 0x7004, 0x6110, 0x9049, 0x6002, 0x800D, 0x6119, 0xA09A, + 0x5121, 0x70FF, 0x6115, 0xA04D, 0x610A, 0x9017, 0x611D, 0xA0E1, 0x510B, 0x6122, 0x610E, 0x903C, + 0x6001, 0x7124, 0x6118, 0xA089, 0x5111, 0x700A, 0x6114, 0xA02B, 0x6109, 0x80FE, 0x611C, 0xA0CF, + 0x510F, 0x7006, 0x6112, 0x9082, 0x6107, 0x8011, 0x611A, 0xA0AA, 0x5121, 0x7103, 0x6116, 0xA061, + 0x610C, 0x9022, 0x611E, 0xA0F6, 0x510B, 0x611F, 0x610D, 0x9029, 0x6000, 0x7105, 0x6117, 0xA06D, + 0x5111, 0x7007, 0x6113, 0x90CC, 0x6108, 0x8019, 0x611B, 0xA0B8, 0x510F, 0x7003, 0x6110, 0x9044, + 0x6002, 0x800C, 0x6119, 0xA096, 0x5121, 0x7080, 0x6115, 0xA047, 0x610A, 0x9015, 0x611D, 0xA0DC, + 0x510B, 0x6122, 0x610E, 0x9038, 0x6001, 0x7123, 0x6118, 0xA083, 0x5111, 0x7009, 0x6114, 0x90FC, + 0x6109, 0x80F0, 0x611C, 0xA0CA, 0x510F, 0x7005, 0x6112, 0x907F, 0x6107, 0x8010, 0x611A, 0xA0A6, + 0x5121, 0x7102, 0x6116, 0xA05C, 0x610C, 0x901F, 0x611E, 0xA0ED, 0x510B, 0x611F, 0x610D, 0x9031, + 0x6000, 0x7106, 0x6117, 0xA076, 0x5111, 0x7008, 0x6113, 0x90F1, 0x6108, 0x8040, 0x611B, 0xA0C1, + 0x510F, 0x7004, 0x6110, 0x9051, 0x6002, 0x800E, 0x6119, 0xA09E, 0x5121, 0x70FF, 0x6115, 0xA053, + 0x610A, 0x901B, 0x611D, 0xA0E5, 0x510B, 0x6122, 0x610E, 0x903F, 0x6001, 0x7124, 0x6118, 0xA08D, + 0x5111, 0x700A, 0x6114, 0xA032, 0x6109, 0x8120, 0x611C, 0xA0D4, 0x510F, 0x7006, 0x6112, 0x9088, + 0x6107, 0x8013, 0x611A, 0xA0AF, 0x5121, 0x7103, 0x6116, 0xA065, 0x610C, 0x9025, 0x611E, 0xA0FB, + 0x510B, 0x611F, 0x610D, 0x9028, 0x6000, 0x7105, 0x6117, 0xA06B, 0x5111, 0x7007, 0x6113, 0x90C6, + 0x6108, 0x8018, 0x611B, 0xA0B6, 0x510F, 0x7003, 0x6110, 0x9043, 0x6002, 0x800B, 0x6119, 0xA094, + 0x5121, 0x7080, 0x6115, 0xA045, 0x610A, 0x9014, 0x611D, 0xA0DA, 0x510B, 0x6122, 0x610E, 0x9037, + 0x6001, 0x7123, 0x6118, 0xA07D, 0x5111, 0x7009, 0x6114, 0x90F8, 0x6109, 0x8060, 0x611C, 0xA0C8, + 0x510F, 0x7005, 0x6112, 0x9078, 0x6107, 0x800F, 0x611A, 0xA0A4, 0x5121, 0x7102, 0x6116, 0xA05A, + 0x610C, 0x901E, 0x611E, 0xA0EB, 0x510B, 0x611F, 0x610D, 0x9030, 0x6000, 0x7106, 0x6117, 0xA074, + 0x5111, 0x7008, 0x6113, 0x90EE, 0x6108, 0x8020, 0x611B, 0xA0BE, 0x510F, 0x7004, 0x6110, 0x9050, + 0x6002, 0x800D, 0x6119, 0xA09C, 0x5121, 0x70FF, 0x6115, 0xA04F, 0x610A, 0x901A, 0x611D, 0xA0E3, + 0x510B, 0x6122, 0x610E, 0x903E, 0x6001, 0x7124, 0x6118, 0xA08B, 0x5111, 0x700A, 0x6114, 0xA02E, + 0x6109, 0x80FE, 0x611C, 0xA0D2, 0x510F, 0x7006, 0x6112, 0x9084, 0x6107, 0x8011, 0x611A, 0xA0AD, + 0x5121, 0x7103, 0x6116, 0xA063, 0x610C, 0x9024, 0x611E, 0xA0F9, 0x510B, 0x611F, 0x610D, 0x902A, + 0x6000, 0x7105, 0x6117, 0xA06F, 0x5111, 0x7007, 0x6113, 0x90D0, 0x6108, 0x8019, 0x611B, 0xA0BA, + 0x510F, 0x7003, 0x6110, 0x9048, 0x6002, 0x800C, 0x6119, 0xA098, 0x5121, 0x7080, 0x6115, 0xA04B, + 0x610A, 0x9016, 0x611D, 0xA0DE, 0x510B, 0x6122, 0x610E, 0x9039, 0x6001, 0x7123, 0x6118, 0xA086, + 0x5111, 0x7009, 0x6114, 0x90FD, 0x6109, 0x80F0, 0x611C, 0xA0CD, 0x510F, 0x7005, 0x6112, 0x9081, + 0x6107, 0x8010, 0x611A, 0xA0A8, 0x5121, 0x7102, 0x6116, 0xA05E, 0x610C, 0x9021, 0x611E, 0xA0F3, + 0x510B, 0x611F, 0x610D, 0x9033, 0x6000, 0x7106, 0x6117, 0xA079, 0x5111, 0x7008, 0x6113, 0x90F2, + 0x6108, 0x8040, 0x611B, 0xA0C3, 0x510F, 0x7004, 0x6110, 0x9059, 0x6002, 0x800E, 0x6119, 0xA0A0, + 0x5121, 0x70FF, 0x6115, 0xA055, 0x610A, 0x901C, 0x611D, 0xA0E7, 0x510B, 0x6122, 0x610E, 0x9041, + 0x6001, 0x7124, 0x6118, 0xA08F, 0x5111, 0x700A, 0x6114, 0xA036, 0x6109, 0x8120, 0x611C, 0xA0D6, + 0x510F, 0x7006, 0x6112, 0x9090, 0x6107, 0x8013, 0x611A, 0xA0B1, 0x5121, 0x7103, 0x6116, 0xA067, + 0x610C, 0x9026, 0x611E, 0xD101, 0x510B, 0x611F, 0x610D, 0x9027, 0x6000, 0x7105, 0x6117, 0xA068, + 0x5111, 0x7007, 0x6113, 0x90C0, 0x6108, 0x8018, 0x611B, 0xA0B3, 0x510F, 0x7003, 0x6110, 0x9042, + 0x6002, 0x800B, 0x6119, 0xA091, 0x5121, 0x7080, 0x6115, 0xA03A, 0x610A, 0x9012, 0x611D, 0xA0D7, + 0x510B, 0x6122, 0x610E, 0x9035, 0x6001, 0x7123, 0x6118, 0xA07A, 0x5111, 0x7009, 0x6114, 0x90F4, + 0x6109, 0x8060, 0x611C, 0xA0C4, 0x510F, 0x7005, 0x6112, 0x9070, 0x6107, 0x800F, 0x611A, 0xA0A1, + 0x5121, 0x7102, 0x6116, 0xA056, 0x610C, 0x901D, 0x611E, 0xA0E8, 0x510B, 0x611F, 0x610D, 0x902C, + 0x6000, 0x7106, 0x6117, 0xA071, 0x5111, 0x7008, 0x6113, 0x90E0, 0x6108, 0x8020, 0x611B, 0xA0BB, + 0x510F, 0x7004, 0x6110, 0x9049, 0x6002, 0x800D, 0x6119, 0xA099, 0x5121, 0x70FF, 0x6115, 0xA04C, + 0x610A, 0x9017, 0x611D, 0xA0DF, 0x510B, 0x6122, 0x610E, 0x903C, 0x6001, 0x7124, 0x6118, 0xA087, + 0x5111, 0x700A, 0x6114, 0xA023, 0x6109, 0x80FE, 0x611C, 0xA0CE, 0x510F, 0x7006, 0x6112, 0x9082, + 0x6107, 0x8011, 0x611A, 0xA0A9, 0x5121, 0x7103, 0x6116, 0xA05F, 0x610C, 0x9022, 0x611E, 0xA0F5, + 0x510B, 0x611F, 0x610D, 0x9029, 0x6000, 0x7105, 0x6117, 0xA06C, 0x5111, 0x7007, 0x6113, 0x90CC, + 0x6108, 0x8019, 0x611B, 0xA0B7, 0x510F, 0x7003, 0x6110, 0x9044, 0x6002, 0x800C, 0x6119, 0xA095, + 0x5121, 0x7080, 0x6115, 0xA046, 0x610A, 0x9015, 0x611D, 0xA0DB, 0x510B, 0x6122, 0x610E, 0x9038, + 0x6001, 0x7123, 0x6118, 0xA07E, 0x5111, 0x7009, 0x6114, 0x90FC, 0x6109, 0x80F0, 0x611C, 0xA0C9, + 0x510F, 0x7005, 0x6112, 0x907F, 0x6107, 0x8010, 0x611A, 0xA0A5, 0x5121, 0x7102, 0x6116, 0xA05B, + 0x610C, 0x901F, 0x611E, 0xA0EC, 0x510B, 0x611F, 0x610D, 0x9031, 0x6000, 0x7106, 0x6117, 0xA075, + 0x5111, 0x7008, 0x6113, 0x90F1, 0x6108, 0x8040, 0x611B, 0xA0BF, 0x510F, 0x7004, 0x6110, 0x9051, + 0x6002, 0x800E, 0x6119, 0xA09D, 0x5121, 0x70FF, 0x6115, 0xA052, 0x610A, 0x901B, 0x611D, 0xA0E4, + 0x510B, 0x6122, 0x610E, 0x903F, 0x6001, 0x7124, 0x6118, 0xA08C, 0x5111, 0x700A, 0x6114, 0xA02F, + 0x6109, 0x8120, 0x611C, 0xA0D3, 0x510F, 0x7006, 0x6112, 0x9088, 0x6107, 0x8013, 0x611A, 0xA0AE, + 0x5121, 0x7103, 0x6116, 0xA064, 0x610C, 0x9025, 0x611E, 0xA0FA, 0x510B, 0x611F, 0x610D, 0x9028, + 0x6000, 0x7105, 0x6117, 0xA06A, 0x5111, 0x7007, 0x6113, 0x90C6, 0x6108, 0x8018, 0x611B, 0xA0B5, + 0x510F, 0x7003, 0x6110, 0x9043, 0x6002, 0x800B, 0x6119, 0xA093, 0x5121, 0x7080, 0x6115, 0xA03D, + 0x610A, 0x9014, 0x611D, 0xA0D9, 0x510B, 0x6122, 0x610E, 0x9037, 0x6001, 0x7123, 0x6118, 0xA07C, + 0x5111, 0x7009, 0x6114, 0x90F8, 0x6109, 0x8060, 0x611C, 0xA0C7, 0x510F, 0x7005, 0x6112, 0x9078, + 0x6107, 0x800F, 0x611A, 0xA0A3, 0x5121, 0x7102, 0x6116, 0xA058, 0x610C, 0x901E, 0x611E, 0xA0EA, + 0x510B, 0x611F, 0x610D, 0x9030, 0x6000, 0x7106, 0x6117, 0xA073, 0x5111, 0x7008, 0x6113, 0x90EE, + 0x6108, 0x8020, 0x611B, 0xA0BD, 0x510F, 0x7004, 0x6110, 0x9050, 0x6002, 0x800D, 0x6119, 0xA09B, + 0x5121, 0x70FF, 0x6115, 0xA04E, 0x610A, 0x901A, 0x611D, 0xA0E2, 0x510B, 0x6122, 0x610E, 0x903E, + 0x6001, 0x7124, 0x6118, 0xA08A, 0x5111, 0x700A, 0x6114, 0xA02D, 0x6109, 0x80FE, 0x611C, 0xA0D1, + 0x510F, 0x7006, 0x6112, 0x9084, 0x6107, 0x8011, 0x611A, 0xA0AC, 0x5121, 0x7103, 0x6116, 0xA062, + 0x610C, 0x9024, 0x611E, 0xA0F7, 0x510B, 0x611F, 0x610D, 0x902A, 0x6000, 0x7105, 0x6117, 0xA06E, + 0x5111, 0x7007, 0x6113, 0x90D0, 0x6108, 0x8019, 0x611B, 0xA0B9, 0x510F, 0x7003, 0x6110, 0x9048, + 0x6002, 0x800C, 0x6119, 0xA097, 0x5121, 0x7080, 0x6115, 0xA04A, 0x610A, 0x9016, 0x611D, 0xA0DD, + 0x510B, 0x6122, 0x610E, 0x9039, 0x6001, 0x7123, 0x6118, 0xA085, 0x5111, 0x7009, 0x6114, 0x90FD, + 0x6109, 0x80F0, 0x611C, 0xA0CB, 0x510F, 0x7005, 0x6112, 0x9081, 0x6107, 0x8010, 0x611A, 0xA0A7, + 0x5121, 0x7102, 0x6116, 0xA05D, 0x610C, 0x9021, 0x611E, 0xA0EF, 0x510B, 0x611F, 0x610D, 0x9033, + 0x6000, 0x7106, 0x6117, 0xA077, 0x5111, 0x7008, 0x6113, 0x90F2, 0x6108, 0x8040, 0x611B, 0xA0C2, + 0x510F, 0x7004, 0x6110, 0x9059, 0x6002, 0x800E, 0x6119, 0xA09F, 0x5121, 0x70FF, 0x6115, 0xA054, + 0x610A, 0x901C, 0x611D, 0xA0E6, 0x510B, 0x6122, 0x610E, 0x9041, 0x6001, 0x7124, 0x6118, 0xA08E, + 0x5111, 0x700A, 0x6114, 0xA034, 0x6109, 0x8120, 0x611C, 0xA0D5, 0x510F, 0x7006, 0x6112, 0x9090, + 0x6107, 0x8013, 0x611A, 0xA0B0, 0x5121, 0x7103, 0x6116, 0xA066, 0x610C, 0x9026, 0x611E, 0xA104, + 0x510B, 0x611F, 0x610D, 0x9027, 0x6000, 0x7105, 0x6117, 0xA069, 0x5111, 0x7007, 0x6113, 0x90C0, + 0x6108, 0x8018, 0x611B, 0xA0B4, 0x510F, 0x7003, 0x6110, 0x9042, 0x6002, 0x800B, 0x6119, 0xA092, + 0x5121, 0x7080, 0x6115, 0xA03B, 0x610A, 0x9012, 0x611D, 0xA0D8, 0x510B, 0x6122, 0x610E, 0x9035, + 0x6001, 0x7123, 0x6118, 0xA07B, 0x5111, 0x7009, 0x6114, 0x90F4, 0x6109, 0x8060, 0x611C, 0xA0C5, + 0x510F, 0x7005, 0x6112, 0x9070, 0x6107, 0x800F, 0x611A, 0xA0A2, 0x5121, 0x7102, 0x6116, 0xA057, + 0x610C, 0x901D, 0x611E, 0xA0E9, 0x510B, 0x611F, 0x610D, 0x902C, 0x6000, 0x7106, 0x6117, 0xA072, + 0x5111, 0x7008, 0x6113, 0x90E0, 0x6108, 0x8020, 0x611B, 0xA0BC, 0x510F, 0x7004, 0x6110, 0x9049, + 0x6002, 0x800D, 0x6119, 0xA09A, 0x5121, 0x70FF, 0x6115, 0xA04D, 0x610A, 0x9017, 0x611D, 0xA0E1, + 0x510B, 0x6122, 0x610E, 0x903C, 0x6001, 0x7124, 0x6118, 0xA089, 0x5111, 0x700A, 0x6114, 0xA02B, + 0x6109, 0x80FE, 0x611C, 0xA0CF, 0x510F, 0x7006, 0x6112, 0x9082, 0x6107, 0x8011, 0x611A, 0xA0AA, + 0x5121, 0x7103, 0x6116, 0xA061, 0x610C, 0x9022, 0x611E, 0xA0F6, 0x510B, 0x611F, 0x610D, 0x9029, + 0x6000, 0x7105, 0x6117, 0xA06D, 0x5111, 0x7007, 0x6113, 0x90CC, 0x6108, 0x8019, 0x611B, 0xA0B8, + 0x510F, 0x7003, 0x6110, 0x9044, 0x6002, 0x800C, 0x6119, 0xA096, 0x5121, 0x7080, 0x6115, 0xA047, + 0x610A, 0x9015, 0x611D, 0xA0DC, 0x510B, 0x6122, 0x610E, 0x9038, 0x6001, 0x7123, 0x6118, 0xA083, + 0x5111, 0x7009, 0x6114, 0x90FC, 0x6109, 0x80F0, 0x611C, 0xA0CA, 0x510F, 0x7005, 0x6112, 0x907F, + 0x6107, 0x8010, 0x611A, 0xA0A6, 0x5121, 0x7102, 0x6116, 0xA05C, 0x610C, 0x901F, 0x611E, 0xA0ED, + 0x510B, 0x611F, 0x610D, 0x9031, 0x6000, 0x7106, 0x6117, 0xA076, 0x5111, 0x7008, 0x6113, 0x90F1, + 0x6108, 0x8040, 0x611B, 0xA0C1, 0x510F, 0x7004, 0x6110, 0x9051, 0x6002, 0x800E, 0x6119, 0xA09E, + 0x5121, 0x70FF, 0x6115, 0xA053, 0x610A, 0x901B, 0x611D, 0xA0E5, 0x510B, 0x6122, 0x610E, 0x903F, + 0x6001, 0x7124, 0x6118, 0xA08D, 0x5111, 0x700A, 0x6114, 0xA032, 0x6109, 0x8120, 0x611C, 0xA0D4, + 0x510F, 0x7006, 0x6112, 0x9088, 0x6107, 0x8013, 0x611A, 0xA0AF, 0x5121, 0x7103, 0x6116, 0xA065, + 0x610C, 0x9025, 0x611E, 0xA0FB, 0x510B, 0x611F, 0x610D, 0x9028, 0x6000, 0x7105, 0x6117, 0xA06B, + 0x5111, 0x7007, 0x6113, 0x90C6, 0x6108, 0x8018, 0x611B, 0xA0B6, 0x510F, 0x7003, 0x6110, 0x9043, + 0x6002, 0x800B, 0x6119, 0xA094, 0x5121, 0x7080, 0x6115, 0xA045, 0x610A, 0x9014, 0x611D, 0xA0DA, + 0x510B, 0x6122, 0x610E, 0x9037, 0x6001, 0x7123, 0x6118, 0xA07D, 0x5111, 0x7009, 0x6114, 0x90F8, + 0x6109, 0x8060, 0x611C, 0xA0C8, 0x510F, 0x7005, 0x6112, 0x9078, 0x6107, 0x800F, 0x611A, 0xA0A4, + 0x5121, 0x7102, 0x6116, 0xA05A, 0x610C, 0x901E, 0x611E, 0xA0EB, 0x510B, 0x611F, 0x610D, 0x9030, + 0x6000, 0x7106, 0x6117, 0xA074, 0x5111, 0x7008, 0x6113, 0x90EE, 0x6108, 0x8020, 0x611B, 0xA0BE, + 0x510F, 0x7004, 0x6110, 0x9050, 0x6002, 0x800D, 0x6119, 0xA09C, 0x5121, 0x70FF, 0x6115, 0xA04F, + 0x610A, 0x901A, 0x611D, 0xA0E3, 0x510B, 0x6122, 0x610E, 0x903E, 0x6001, 0x7124, 0x6118, 0xA08B, + 0x5111, 0x700A, 0x6114, 0xA02E, 0x6109, 0x80FE, 0x611C, 0xA0D2, 0x510F, 0x7006, 0x6112, 0x9084, + 0x6107, 0x8011, 0x611A, 0xA0AD, 0x5121, 0x7103, 0x6116, 0xA063, 0x610C, 0x9024, 0x611E, 0xA0F9, + 0x510B, 0x611F, 0x610D, 0x902A, 0x6000, 0x7105, 0x6117, 0xA06F, 0x5111, 0x7007, 0x6113, 0x90D0, + 0x6108, 0x8019, 0x611B, 0xA0BA, 0x510F, 0x7003, 0x6110, 0x9048, 0x6002, 0x800C, 0x6119, 0xA098, + 0x5121, 0x7080, 0x6115, 0xA04B, 0x610A, 0x9016, 0x611D, 0xA0DE, 0x510B, 0x6122, 0x610E, 0x9039, + 0x6001, 0x7123, 0x6118, 0xA086, 0x5111, 0x7009, 0x6114, 0x90FD, 0x6109, 0x80F0, 0x611C, 0xA0CD, + 0x510F, 0x7005, 0x6112, 0x9081, 0x6107, 0x8010, 0x611A, 0xA0A8, 0x5121, 0x7102, 0x6116, 0xA05E, + 0x610C, 0x9021, 0x611E, 0xA0F3, 0x510B, 0x611F, 0x610D, 0x9033, 0x6000, 0x7106, 0x6117, 0xA079, + 0x5111, 0x7008, 0x6113, 0x90F2, 0x6108, 0x8040, 0x611B, 0xA0C3, 0x510F, 0x7004, 0x6110, 0x9059, + 0x6002, 0x800E, 0x6119, 0xA0A0, 0x5121, 0x70FF, 0x6115, 0xA055, 0x610A, 0x901C, 0x611D, 0xA0E7, + 0x510B, 0x6122, 0x610E, 0x9041, 0x6001, 0x7124, 0x6118, 0xA08F, 0x5111, 0x700A, 0x6114, 0xA036, + 0x6109, 0x8120, 0x611C, 0xA0D6, 0x510F, 0x7006, 0x6112, 0x9090, 0x6107, 0x8013, 0x611A, 0xA0B1, + 0x5121, 0x7103, 0x6116, 0xA067, 0x610C, 0x9026, 0x611E, 0xB0B2, 0x510B, 0x611F, 0x610D, 0x9027, + 0x6000, 0x7105, 0x6117, 0xA068, 0x5111, 0x7007, 0x6113, 0x90C0, 0x6108, 0x8018, 0x611B, 0xA0B3, + 0x510F, 0x7003, 0x6110, 0x9042, 0x6002, 0x800B, 0x6119, 0xA091, 0x5121, 0x7080, 0x6115, 0xA03A, + 0x610A, 0x9012, 0x611D, 0xA0D7, 0x510B, 0x6122, 0x610E, 0x9035, 0x6001, 0x7123, 0x6118, 0xA07A, + 0x5111, 0x7009, 0x6114, 0x90F4, 0x6109, 0x8060, 0x611C, 0xA0C4, 0x510F, 0x7005, 0x6112, 0x9070, + 0x6107, 0x800F, 0x611A, 0xA0A1, 0x5121, 0x7102, 0x6116, 0xA056, 0x610C, 0x901D, 0x611E, 0xA0E8, + 0x510B, 0x611F, 0x610D, 0x902C, 0x6000, 0x7106, 0x6117, 0xA071, 0x5111, 0x7008, 0x6113, 0x90E0, + 0x6108, 0x8020, 0x611B, 0xA0BB, 0x510F, 0x7004, 0x6110, 0x9049, 0x6002, 0x800D, 0x6119, 0xA099, + 0x5121, 0x70FF, 0x6115, 0xA04C, 0x610A, 0x9017, 0x611D, 0xA0DF, 0x510B, 0x6122, 0x610E, 0x903C, + 0x6001, 0x7124, 0x6118, 0xA087, 0x5111, 0x700A, 0x6114, 0xA023, 0x6109, 0x80FE, 0x611C, 0xA0CE, + 0x510F, 0x7006, 0x6112, 0x9082, 0x6107, 0x8011, 0x611A, 0xA0A9, 0x5121, 0x7103, 0x6116, 0xA05F, + 0x610C, 0x9022, 0x611E, 0xA0F5, 0x510B, 0x611F, 0x610D, 0x9029, 0x6000, 0x7105, 0x6117, 0xA06C, + 0x5111, 0x7007, 0x6113, 0x90CC, 0x6108, 0x8019, 0x611B, 0xA0B7, 0x510F, 0x7003, 0x6110, 0x9044, + 0x6002, 0x800C, 0x6119, 0xA095, 0x5121, 0x7080, 0x6115, 0xA046, 0x610A, 0x9015, 0x611D, 0xA0DB, + 0x510B, 0x6122, 0x610E, 0x9038, 0x6001, 0x7123, 0x6118, 0xA07E, 0x5111, 0x7009, 0x6114, 0x90FC, + 0x6109, 0x80F0, 0x611C, 0xA0C9, 0x510F, 0x7005, 0x6112, 0x907F, 0x6107, 0x8010, 0x611A, 0xA0A5, + 0x5121, 0x7102, 0x6116, 0xA05B, 0x610C, 0x901F, 0x611E, 0xA0EC, 0x510B, 0x611F, 0x610D, 0x9031, + 0x6000, 0x7106, 0x6117, 0xA075, 0x5111, 0x7008, 0x6113, 0x90F1, 0x6108, 0x8040, 0x611B, 0xA0BF, + 0x510F, 0x7004, 0x6110, 0x9051, 0x6002, 0x800E, 0x6119, 0xA09D, 0x5121, 0x70FF, 0x6115, 0xA052, + 0x610A, 0x901B, 0x611D, 0xA0E4, 0x510B, 0x6122, 0x610E, 0x903F, 0x6001, 0x7124, 0x6118, 0xA08C, + 0x5111, 0x700A, 0x6114, 0xA02F, 0x6109, 0x8120, 0x611C, 0xA0D3, 0x510F, 0x7006, 0x6112, 0x9088, + 0x6107, 0x8013, 0x611A, 0xA0AE, 0x5121, 0x7103, 0x6116, 0xA064, 0x610C, 0x9025, 0x611E, 0xA0FA, + 0x510B, 0x611F, 0x610D, 0x9028, 0x6000, 0x7105, 0x6117, 0xA06A, 0x5111, 0x7007, 0x6113, 0x90C6, + 0x6108, 0x8018, 0x611B, 0xA0B5, 0x510F, 0x7003, 0x6110, 0x9043, 0x6002, 0x800B, 0x6119, 0xA093, + 0x5121, 0x7080, 0x6115, 0xA03D, 0x610A, 0x9014, 0x611D, 0xA0D9, 0x510B, 0x6122, 0x610E, 0x9037, + 0x6001, 0x7123, 0x6118, 0xA07C, 0x5111, 0x7009, 0x6114, 0x90F8, 0x6109, 0x8060, 0x611C, 0xA0C7, + 0x510F, 0x7005, 0x6112, 0x9078, 0x6107, 0x800F, 0x611A, 0xA0A3, 0x5121, 0x7102, 0x6116, 0xA058, + 0x610C, 0x901E, 0x611E, 0xA0EA, 0x510B, 0x611F, 0x610D, 0x9030, 0x6000, 0x7106, 0x6117, 0xA073, + 0x5111, 0x7008, 0x6113, 0x90EE, 0x6108, 0x8020, 0x611B, 0xA0BD, 0x510F, 0x7004, 0x6110, 0x9050, + 0x6002, 0x800D, 0x6119, 0xA09B, 0x5121, 0x70FF, 0x6115, 0xA04E, 0x610A, 0x901A, 0x611D, 0xA0E2, + 0x510B, 0x6122, 0x610E, 0x903E, 0x6001, 0x7124, 0x6118, 0xA08A, 0x5111, 0x700A, 0x6114, 0xA02D, + 0x6109, 0x80FE, 0x611C, 0xA0D1, 0x510F, 0x7006, 0x6112, 0x9084, 0x6107, 0x8011, 0x611A, 0xA0AC, + 0x5121, 0x7103, 0x6116, 0xA062, 0x610C, 0x9024, 0x611E, 0xA0F7, 0x510B, 0x611F, 0x610D, 0x902A, + 0x6000, 0x7105, 0x6117, 0xA06E, 0x5111, 0x7007, 0x6113, 0x90D0, 0x6108, 0x8019, 0x611B, 0xA0B9, + 0x510F, 0x7003, 0x6110, 0x9048, 0x6002, 0x800C, 0x6119, 0xA097, 0x5121, 0x7080, 0x6115, 0xA04A, + 0x610A, 0x9016, 0x611D, 0xA0DD, 0x510B, 0x6122, 0x610E, 0x9039, 0x6001, 0x7123, 0x6118, 0xA085, + 0x5111, 0x7009, 0x6114, 0x90FD, 0x6109, 0x80F0, 0x611C, 0xA0CB, 0x510F, 0x7005, 0x6112, 0x9081, + 0x6107, 0x8010, 0x611A, 0xA0A7, 0x5121, 0x7102, 0x6116, 0xA05D, 0x610C, 0x9021, 0x611E, 0xA0EF, + 0x510B, 0x611F, 0x610D, 0x9033, 0x6000, 0x7106, 0x6117, 0xA077, 0x5111, 0x7008, 0x6113, 0x90F2, + 0x6108, 0x8040, 0x611B, 0xA0C2, 0x510F, 0x7004, 0x6110, 0x9059, 0x6002, 0x800E, 0x6119, 0xA09F, + 0x5121, 0x70FF, 0x6115, 0xA054, 0x610A, 0x901C, 0x611D, 0xA0E6, 0x510B, 0x6122, 0x610E, 0x9041, + 0x6001, 0x7124, 0x6118, 0xA08E, 0x5111, 0x700A, 0x6114, 0xA034, 0x6109, 0x8120, 0x611C, 0xA0D5, + 0x510F, 0x7006, 0x6112, 0x9090, 0x6107, 0x8013, 0x611A, 0xA0B0, 0x5121, 0x7103, 0x6116, 0xA066, + 0x610C, 0x9026, 0x611E, 0xA104, 0x510B, 0x611F, 0x610D, 0x9027, 0x6000, 0x7105, 0x6117, 0xA069, + 0x5111, 0x7007, 0x6113, 0x90C0, 0x6108, 0x8018, 0x611B, 0xA0B4, 0x510F, 0x7003, 0x6110, 0x9042, + 0x6002, 0x800B, 0x6119, 0xA092, 0x5121, 0x7080, 0x6115, 0xA03B, 0x610A, 0x9012, 0x611D, 0xA0D8, + 0x510B, 0x6122, 0x610E, 0x9035, 0x6001, 0x7123, 0x6118, 0xA07B, 0x5111, 0x7009, 0x6114, 0x90F4, + 0x6109, 0x8060, 0x611C, 0xA0C5, 0x510F, 0x7005, 0x6112, 0x9070, 0x6107, 0x800F, 0x611A, 0xA0A2, + 0x5121, 0x7102, 0x6116, 0xA057, 0x610C, 0x901D, 0x611E, 0xA0E9, 0x510B, 0x611F, 0x610D, 0x902C, + 0x6000, 0x7106, 0x6117, 0xA072, 0x5111, 0x7008, 0x6113, 0x90E0, 0x6108, 0x8020, 0x611B, 0xA0BC, + 0x510F, 0x7004, 0x6110, 0x9049, 0x6002, 0x800D, 0x6119, 0xA09A, 0x5121, 0x70FF, 0x6115, 0xA04D, + 0x610A, 0x9017, 0x611D, 0xA0E1, 0x510B, 0x6122, 0x610E, 0x903C, 0x6001, 0x7124, 0x6118, 0xA089, + 0x5111, 0x700A, 0x6114, 0xA02B, 0x6109, 0x80FE, 0x611C, 0xA0CF, 0x510F, 0x7006, 0x6112, 0x9082, + 0x6107, 0x8011, 0x611A, 0xA0AA, 0x5121, 0x7103, 0x6116, 0xA061, 0x610C, 0x9022, 0x611E, 0xA0F6, + 0x510B, 0x611F, 0x610D, 0x9029, 0x6000, 0x7105, 0x6117, 0xA06D, 0x5111, 0x7007, 0x6113, 0x90CC, + 0x6108, 0x8019, 0x611B, 0xA0B8, 0x510F, 0x7003, 0x6110, 0x9044, 0x6002, 0x800C, 0x6119, 0xA096, + 0x5121, 0x7080, 0x6115, 0xA047, 0x610A, 0x9015, 0x611D, 0xA0DC, 0x510B, 0x6122, 0x610E, 0x9038, + 0x6001, 0x7123, 0x6118, 0xA083, 0x5111, 0x7009, 0x6114, 0x90FC, 0x6109, 0x80F0, 0x611C, 0xA0CA, + 0x510F, 0x7005, 0x6112, 0x907F, 0x6107, 0x8010, 0x611A, 0xA0A6, 0x5121, 0x7102, 0x6116, 0xA05C, + 0x610C, 0x901F, 0x611E, 0xA0ED, 0x510B, 0x611F, 0x610D, 0x9031, 0x6000, 0x7106, 0x6117, 0xA076, + 0x5111, 0x7008, 0x6113, 0x90F1, 0x6108, 0x8040, 0x611B, 0xA0C1, 0x510F, 0x7004, 0x6110, 0x9051, + 0x6002, 0x800E, 0x6119, 0xA09E, 0x5121, 0x70FF, 0x6115, 0xA053, 0x610A, 0x901B, 0x611D, 0xA0E5, + 0x510B, 0x6122, 0x610E, 0x903F, 0x6001, 0x7124, 0x6118, 0xA08D, 0x5111, 0x700A, 0x6114, 0xA032, + 0x6109, 0x8120, 0x611C, 0xA0D4, 0x510F, 0x7006, 0x6112, 0x9088, 0x6107, 0x8013, 0x611A, 0xA0AF, + 0x5121, 0x7103, 0x6116, 0xA065, 0x610C, 0x9025, 0x611E, 0xA0FB, 0x510B, 0x611F, 0x610D, 0x9028, + 0x6000, 0x7105, 0x6117, 0xA06B, 0x5111, 0x7007, 0x6113, 0x90C6, 0x6108, 0x8018, 0x611B, 0xA0B6, + 0x510F, 0x7003, 0x6110, 0x9043, 0x6002, 0x800B, 0x6119, 0xA094, 0x5121, 0x7080, 0x6115, 0xA045, + 0x610A, 0x9014, 0x611D, 0xA0DA, 0x510B, 0x6122, 0x610E, 0x9037, 0x6001, 0x7123, 0x6118, 0xA07D, + 0x5111, 0x7009, 0x6114, 0x90F8, 0x6109, 0x8060, 0x611C, 0xA0C8, 0x510F, 0x7005, 0x6112, 0x9078, + 0x6107, 0x800F, 0x611A, 0xA0A4, 0x5121, 0x7102, 0x6116, 0xA05A, 0x610C, 0x901E, 0x611E, 0xA0EB, + 0x510B, 0x611F, 0x610D, 0x9030, 0x6000, 0x7106, 0x6117, 0xA074, 0x5111, 0x7008, 0x6113, 0x90EE, + 0x6108, 0x8020, 0x611B, 0xA0BE, 0x510F, 0x7004, 0x6110, 0x9050, 0x6002, 0x800D, 0x6119, 0xA09C, + 0x5121, 0x70FF, 0x6115, 0xA04F, 0x610A, 0x901A, 0x611D, 0xA0E3, 0x510B, 0x6122, 0x610E, 0x903E, + 0x6001, 0x7124, 0x6118, 0xA08B, 0x5111, 0x700A, 0x6114, 0xA02E, 0x6109, 0x80FE, 0x611C, 0xA0D2, + 0x510F, 0x7006, 0x6112, 0x9084, 0x6107, 0x8011, 0x611A, 0xA0AD, 0x5121, 0x7103, 0x6116, 0xA063, + 0x610C, 0x9024, 0x611E, 0xA0F9, 0x510B, 0x611F, 0x610D, 0x902A, 0x6000, 0x7105, 0x6117, 0xA06F, + 0x5111, 0x7007, 0x6113, 0x90D0, 0x6108, 0x8019, 0x611B, 0xA0BA, 0x510F, 0x7003, 0x6110, 0x9048, + 0x6002, 0x800C, 0x6119, 0xA098, 0x5121, 0x7080, 0x6115, 0xA04B, 0x610A, 0x9016, 0x611D, 0xA0DE, + 0x510B, 0x6122, 0x610E, 0x9039, 0x6001, 0x7123, 0x6118, 0xA086, 0x5111, 0x7009, 0x6114, 0x90FD, + 0x6109, 0x80F0, 0x611C, 0xA0CD, 0x510F, 0x7005, 0x6112, 0x9081, 0x6107, 0x8010, 0x611A, 0xA0A8, + 0x5121, 0x7102, 0x6116, 0xA05E, 0x610C, 0x9021, 0x611E, 0xA0F3, 0x510B, 0x611F, 0x610D, 0x9033, + 0x6000, 0x7106, 0x6117, 0xA079, 0x5111, 0x7008, 0x6113, 0x90F2, 0x6108, 0x8040, 0x611B, 0xA0C3, + 0x510F, 0x7004, 0x6110, 0x9059, 0x6002, 0x800E, 0x6119, 0xA0A0, 0x5121, 0x70FF, 0x6115, 0xA055, + 0x610A, 0x901C, 0x611D, 0xA0E7, 0x510B, 0x6122, 0x610E, 0x9041, 0x6001, 0x7124, 0x6118, 0xA08F, + 0x5111, 0x700A, 0x6114, 0xA036, 0x6109, 0x8120, 0x611C, 0xA0D6, 0x510F, 0x7006, 0x6112, 0x9090, + 0x6107, 0x8013, 0x611A, 0xA0B1, 0x5121, 0x7103, 0x6116, 0xA067, 0x610C, 0x9026, 0x611E, 0xD100, + 0x510B, 0x611F, 0x610D, 0x9027, 0x6000, 0x7105, 0x6117, 0xA068, 0x5111, 0x7007, 0x6113, 0x90C0, + 0x6108, 0x8018, 0x611B, 0xA0B3, 0x510F, 0x7003, 0x6110, 0x9042, 0x6002, 0x800B, 0x6119, 0xA091, + 0x5121, 0x7080, 0x6115, 0xA03A, 0x610A, 0x9012, 0x611D, 0xA0D7, 0x510B, 0x6122, 0x610E, 0x9035, + 0x6001, 0x7123, 0x6118, 0xA07A, 0x5111, 0x7009, 0x6114, 0x90F4, 0x6109, 0x8060, 0x611C, 0xA0C4, + 0x510F, 0x7005, 0x6112, 0x9070, 0x6107, 0x800F, 0x611A, 0xA0A1, 0x5121, 0x7102, 0x6116, 0xA056, + 0x610C, 0x901D, 0x611E, 0xA0E8, 0x510B, 0x611F, 0x610D, 0x902C, 0x6000, 0x7106, 0x6117, 0xA071, + 0x5111, 0x7008, 0x6113, 0x90E0, 0x6108, 0x8020, 0x611B, 0xA0BB, 0x510F, 0x7004, 0x6110, 0x9049, + 0x6002, 0x800D, 0x6119, 0xA099, 0x5121, 0x70FF, 0x6115, 0xA04C, 0x610A, 0x9017, 0x611D, 0xA0DF, + 0x510B, 0x6122, 0x610E, 0x903C, 0x6001, 0x7124, 0x6118, 0xA087, 0x5111, 0x700A, 0x6114, 0xA023, + 0x6109, 0x80FE, 0x611C, 0xA0CE, 0x510F, 0x7006, 0x6112, 0x9082, 0x6107, 0x8011, 0x611A, 0xA0A9, + 0x5121, 0x7103, 0x6116, 0xA05F, 0x610C, 0x9022, 0x611E, 0xA0F5, 0x510B, 0x611F, 0x610D, 0x9029, + 0x6000, 0x7105, 0x6117, 0xA06C, 0x5111, 0x7007, 0x6113, 0x90CC, 0x6108, 0x8019, 0x611B, 0xA0B7, + 0x510F, 0x7003, 0x6110, 0x9044, 0x6002, 0x800C, 0x6119, 0xA095, 0x5121, 0x7080, 0x6115, 0xA046, + 0x610A, 0x9015, 0x611D, 0xA0DB, 0x510B, 0x6122, 0x610E, 0x9038, 0x6001, 0x7123, 0x6118, 0xA07E, + 0x5111, 0x7009, 0x6114, 0x90FC, 0x6109, 0x80F0, 0x611C, 0xA0C9, 0x510F, 0x7005, 0x6112, 0x907F, + 0x6107, 0x8010, 0x611A, 0xA0A5, 0x5121, 0x7102, 0x6116, 0xA05B, 0x610C, 0x901F, 0x611E, 0xA0EC, + 0x510B, 0x611F, 0x610D, 0x9031, 0x6000, 0x7106, 0x6117, 0xA075, 0x5111, 0x7008, 0x6113, 0x90F1, + 0x6108, 0x8040, 0x611B, 0xA0BF, 0x510F, 0x7004, 0x6110, 0x9051, 0x6002, 0x800E, 0x6119, 0xA09D, + 0x5121, 0x70FF, 0x6115, 0xA052, 0x610A, 0x901B, 0x611D, 0xA0E4, 0x510B, 0x6122, 0x610E, 0x903F, + 0x6001, 0x7124, 0x6118, 0xA08C, 0x5111, 0x700A, 0x6114, 0xA02F, 0x6109, 0x8120, 0x611C, 0xA0D3, + 0x510F, 0x7006, 0x6112, 0x9088, 0x6107, 0x8013, 0x611A, 0xA0AE, 0x5121, 0x7103, 0x6116, 0xA064, + 0x610C, 0x9025, 0x611E, 0xA0FA, 0x510B, 0x611F, 0x610D, 0x9028, 0x6000, 0x7105, 0x6117, 0xA06A, + 0x5111, 0x7007, 0x6113, 0x90C6, 0x6108, 0x8018, 0x611B, 0xA0B5, 0x510F, 0x7003, 0x6110, 0x9043, + 0x6002, 0x800B, 0x6119, 0xA093, 0x5121, 0x7080, 0x6115, 0xA03D, 0x610A, 0x9014, 0x611D, 0xA0D9, + 0x510B, 0x6122, 0x610E, 0x9037, 0x6001, 0x7123, 0x6118, 0xA07C, 0x5111, 0x7009, 0x6114, 0x90F8, + 0x6109, 0x8060, 0x611C, 0xA0C7, 0x510F, 0x7005, 0x6112, 0x9078, 0x6107, 0x800F, 0x611A, 0xA0A3, + 0x5121, 0x7102, 0x6116, 0xA058, 0x610C, 0x901E, 0x611E, 0xA0EA, 0x510B, 0x611F, 0x610D, 0x9030, + 0x6000, 0x7106, 0x6117, 0xA073, 0x5111, 0x7008, 0x6113, 0x90EE, 0x6108, 0x8020, 0x611B, 0xA0BD, + 0x510F, 0x7004, 0x6110, 0x9050, 0x6002, 0x800D, 0x6119, 0xA09B, 0x5121, 0x70FF, 0x6115, 0xA04E, + 0x610A, 0x901A, 0x611D, 0xA0E2, 0x510B, 0x6122, 0x610E, 0x903E, 0x6001, 0x7124, 0x6118, 0xA08A, + 0x5111, 0x700A, 0x6114, 0xA02D, 0x6109, 0x80FE, 0x611C, 0xA0D1, 0x510F, 0x7006, 0x6112, 0x9084, + 0x6107, 0x8011, 0x611A, 0xA0AC, 0x5121, 0x7103, 0x6116, 0xA062, 0x610C, 0x9024, 0x611E, 0xA0F7, + 0x510B, 0x611F, 0x610D, 0x902A, 0x6000, 0x7105, 0x6117, 0xA06E, 0x5111, 0x7007, 0x6113, 0x90D0, + 0x6108, 0x8019, 0x611B, 0xA0B9, 0x510F, 0x7003, 0x6110, 0x9048, 0x6002, 0x800C, 0x6119, 0xA097, + 0x5121, 0x7080, 0x6115, 0xA04A, 0x610A, 0x9016, 0x611D, 0xA0DD, 0x510B, 0x6122, 0x610E, 0x9039, + 0x6001, 0x7123, 0x6118, 0xA085, 0x5111, 0x7009, 0x6114, 0x90FD, 0x6109, 0x80F0, 0x611C, 0xA0CB, + 0x510F, 0x7005, 0x6112, 0x9081, 0x6107, 0x8010, 0x611A, 0xA0A7, 0x5121, 0x7102, 0x6116, 0xA05D, + 0x610C, 0x9021, 0x611E, 0xA0EF, 0x510B, 0x611F, 0x610D, 0x9033, 0x6000, 0x7106, 0x6117, 0xA077, + 0x5111, 0x7008, 0x6113, 0x90F2, 0x6108, 0x8040, 0x611B, 0xA0C2, 0x510F, 0x7004, 0x6110, 0x9059, + 0x6002, 0x800E, 0x6119, 0xA09F, 0x5121, 0x70FF, 0x6115, 0xA054, 0x610A, 0x901C, 0x611D, 0xA0E6, + 0x510B, 0x6122, 0x610E, 0x9041, 0x6001, 0x7124, 0x6118, 0xA08E, 0x5111, 0x700A, 0x6114, 0xA034, + 0x6109, 0x8120, 0x611C, 0xA0D5, 0x510F, 0x7006, 0x6112, 0x9090, 0x6107, 0x8013, 0x611A, 0xA0B0, + 0x5121, 0x7103, 0x6116, 0xA066, 0x610C, 0x9026, 0x611E, 0xA104, 0x510B, 0x611F, 0x610D, 0x9027, + 0x6000, 0x7105, 0x6117, 0xA069, 0x5111, 0x7007, 0x6113, 0x90C0, 0x6108, 0x8018, 0x611B, 0xA0B4, + 0x510F, 0x7003, 0x6110, 0x9042, 0x6002, 0x800B, 0x6119, 0xA092, 0x5121, 0x7080, 0x6115, 0xA03B, + 0x610A, 0x9012, 0x611D, 0xA0D8, 0x510B, 0x6122, 0x610E, 0x9035, 0x6001, 0x7123, 0x6118, 0xA07B, + 0x5111, 0x7009, 0x6114, 0x90F4, 0x6109, 0x8060, 0x611C, 0xA0C5, 0x510F, 0x7005, 0x6112, 0x9070, + 0x6107, 0x800F, 0x611A, 0xA0A2, 0x5121, 0x7102, 0x6116, 0xA057, 0x610C, 0x901D, 0x611E, 0xA0E9, + 0x510B, 0x611F, 0x610D, 0x902C, 0x6000, 0x7106, 0x6117, 0xA072, 0x5111, 0x7008, 0x6113, 0x90E0, + 0x6108, 0x8020, 0x611B, 0xA0BC, 0x510F, 0x7004, 0x6110, 0x9049, 0x6002, 0x800D, 0x6119, 0xA09A, + 0x5121, 0x70FF, 0x6115, 0xA04D, 0x610A, 0x9017, 0x611D, 0xA0E1, 0x510B, 0x6122, 0x610E, 0x903C, + 0x6001, 0x7124, 0x6118, 0xA089, 0x5111, 0x700A, 0x6114, 0xA02B, 0x6109, 0x80FE, 0x611C, 0xA0CF, + 0x510F, 0x7006, 0x6112, 0x9082, 0x6107, 0x8011, 0x611A, 0xA0AA, 0x5121, 0x7103, 0x6116, 0xA061, + 0x610C, 0x9022, 0x611E, 0xA0F6, 0x510B, 0x611F, 0x610D, 0x9029, 0x6000, 0x7105, 0x6117, 0xA06D, + 0x5111, 0x7007, 0x6113, 0x90CC, 0x6108, 0x8019, 0x611B, 0xA0B8, 0x510F, 0x7003, 0x6110, 0x9044, + 0x6002, 0x800C, 0x6119, 0xA096, 0x5121, 0x7080, 0x6115, 0xA047, 0x610A, 0x9015, 0x611D, 0xA0DC, + 0x510B, 0x6122, 0x610E, 0x9038, 0x6001, 0x7123, 0x6118, 0xA083, 0x5111, 0x7009, 0x6114, 0x90FC, + 0x6109, 0x80F0, 0x611C, 0xA0CA, 0x510F, 0x7005, 0x6112, 0x907F, 0x6107, 0x8010, 0x611A, 0xA0A6, + 0x5121, 0x7102, 0x6116, 0xA05C, 0x610C, 0x901F, 0x611E, 0xA0ED, 0x510B, 0x611F, 0x610D, 0x9031, + 0x6000, 0x7106, 0x6117, 0xA076, 0x5111, 0x7008, 0x6113, 0x90F1, 0x6108, 0x8040, 0x611B, 0xA0C1, + 0x510F, 0x7004, 0x6110, 0x9051, 0x6002, 0x800E, 0x6119, 0xA09E, 0x5121, 0x70FF, 0x6115, 0xA053, + 0x610A, 0x901B, 0x611D, 0xA0E5, 0x510B, 0x6122, 0x610E, 0x903F, 0x6001, 0x7124, 0x6118, 0xA08D, + 0x5111, 0x700A, 0x6114, 0xA032, 0x6109, 0x8120, 0x611C, 0xA0D4, 0x510F, 0x7006, 0x6112, 0x9088, + 0x6107, 0x8013, 0x611A, 0xA0AF, 0x5121, 0x7103, 0x6116, 0xA065, 0x610C, 0x9025, 0x611E, 0xA0FB, + 0x510B, 0x611F, 0x610D, 0x9028, 0x6000, 0x7105, 0x6117, 0xA06B, 0x5111, 0x7007, 0x6113, 0x90C6, + 0x6108, 0x8018, 0x611B, 0xA0B6, 0x510F, 0x7003, 0x6110, 0x9043, 0x6002, 0x800B, 0x6119, 0xA094, + 0x5121, 0x7080, 0x6115, 0xA045, 0x610A, 0x9014, 0x611D, 0xA0DA, 0x510B, 0x6122, 0x610E, 0x9037, + 0x6001, 0x7123, 0x6118, 0xA07D, 0x5111, 0x7009, 0x6114, 0x90F8, 0x6109, 0x8060, 0x611C, 0xA0C8, + 0x510F, 0x7005, 0x6112, 0x9078, 0x6107, 0x800F, 0x611A, 0xA0A4, 0x5121, 0x7102, 0x6116, 0xA05A, + 0x610C, 0x901E, 0x611E, 0xA0EB, 0x510B, 0x611F, 0x610D, 0x9030, 0x6000, 0x7106, 0x6117, 0xA074, + 0x5111, 0x7008, 0x6113, 0x90EE, 0x6108, 0x8020, 0x611B, 0xA0BE, 0x510F, 0x7004, 0x6110, 0x9050, + 0x6002, 0x800D, 0x6119, 0xA09C, 0x5121, 0x70FF, 0x6115, 0xA04F, 0x610A, 0x901A, 0x611D, 0xA0E3, + 0x510B, 0x6122, 0x610E, 0x903E, 0x6001, 0x7124, 0x6118, 0xA08B, 0x5111, 0x700A, 0x6114, 0xA02E, + 0x6109, 0x80FE, 0x611C, 0xA0D2, 0x510F, 0x7006, 0x6112, 0x9084, 0x6107, 0x8011, 0x611A, 0xA0AD, + 0x5121, 0x7103, 0x6116, 0xA063, 0x610C, 0x9024, 0x611E, 0xA0F9, 0x510B, 0x611F, 0x610D, 0x902A, + 0x6000, 0x7105, 0x6117, 0xA06F, 0x5111, 0x7007, 0x6113, 0x90D0, 0x6108, 0x8019, 0x611B, 0xA0BA, + 0x510F, 0x7003, 0x6110, 0x9048, 0x6002, 0x800C, 0x6119, 0xA098, 0x5121, 0x7080, 0x6115, 0xA04B, + 0x610A, 0x9016, 0x611D, 0xA0DE, 0x510B, 0x6122, 0x610E, 0x9039, 0x6001, 0x7123, 0x6118, 0xA086, + 0x5111, 0x7009, 0x6114, 0x90FD, 0x6109, 0x80F0, 0x611C, 0xA0CD, 0x510F, 0x7005, 0x6112, 0x9081, + 0x6107, 0x8010, 0x611A, 0xA0A8, 0x5121, 0x7102, 0x6116, 0xA05E, 0x610C, 0x9021, 0x611E, 0xA0F3, + 0x510B, 0x611F, 0x610D, 0x9033, 0x6000, 0x7106, 0x6117, 0xA079, 0x5111, 0x7008, 0x6113, 0x90F2, + 0x6108, 0x8040, 0x611B, 0xA0C3, 0x510F, 0x7004, 0x6110, 0x9059, 0x6002, 0x800E, 0x6119, 0xA0A0, + 0x5121, 0x70FF, 0x6115, 0xA055, 0x610A, 0x901C, 0x611D, 0xA0E7, 0x510B, 0x6122, 0x610E, 0x9041, + 0x6001, 0x7124, 0x6118, 0xA08F, 0x5111, 0x700A, 0x6114, 0xA036, 0x6109, 0x8120, 0x611C, 0xA0D6, + 0x510F, 0x7006, 0x6112, 0x9090, 0x6107, 0x8013, 0x611A, 0xA0B1, 0x5121, 0x7103, 0x6116, 0xA067, + 0x610C, 0x9026, 0x611E, 0xB0B2, 0x510B, 0x611F, 0x610D, 0x9027, 0x6000, 0x7105, 0x6117, 0xA068, + 0x5111, 0x7007, 0x6113, 0x90C0, 0x6108, 0x8018, 0x611B, 0xA0B3, 0x510F, 0x7003, 0x6110, 0x9042, + 0x6002, 0x800B, 0x6119, 0xA091, 0x5121, 0x7080, 0x6115, 0xA03A, 0x610A, 0x9012, 0x611D, 0xA0D7, + 0x510B, 0x6122, 0x610E, 0x9035, 0x6001, 0x7123, 0x6118, 0xA07A, 0x5111, 0x7009, 0x6114, 0x90F4, + 0x6109, 0x8060, 0x611C, 0xA0C4, 0x510F, 0x7005, 0x6112, 0x9070, 0x6107, 0x800F, 0x611A, 0xA0A1, + 0x5121, 0x7102, 0x6116, 0xA056, 0x610C, 0x901D, 0x611E, 0xA0E8, 0x510B, 0x611F, 0x610D, 0x902C, + 0x6000, 0x7106, 0x6117, 0xA071, 0x5111, 0x7008, 0x6113, 0x90E0, 0x6108, 0x8020, 0x611B, 0xA0BB, + 0x510F, 0x7004, 0x6110, 0x9049, 0x6002, 0x800D, 0x6119, 0xA099, 0x5121, 0x70FF, 0x6115, 0xA04C, + 0x610A, 0x9017, 0x611D, 0xA0DF, 0x510B, 0x6122, 0x610E, 0x903C, 0x6001, 0x7124, 0x6118, 0xA087, + 0x5111, 0x700A, 0x6114, 0xA023, 0x6109, 0x80FE, 0x611C, 0xA0CE, 0x510F, 0x7006, 0x6112, 0x9082, + 0x6107, 0x8011, 0x611A, 0xA0A9, 0x5121, 0x7103, 0x6116, 0xA05F, 0x610C, 0x9022, 0x611E, 0xA0F5, + 0x510B, 0x611F, 0x610D, 0x9029, 0x6000, 0x7105, 0x6117, 0xA06C, 0x5111, 0x7007, 0x6113, 0x90CC, + 0x6108, 0x8019, 0x611B, 0xA0B7, 0x510F, 0x7003, 0x6110, 0x9044, 0x6002, 0x800C, 0x6119, 0xA095, + 0x5121, 0x7080, 0x6115, 0xA046, 0x610A, 0x9015, 0x611D, 0xA0DB, 0x510B, 0x6122, 0x610E, 0x9038, + 0x6001, 0x7123, 0x6118, 0xA07E, 0x5111, 0x7009, 0x6114, 0x90FC, 0x6109, 0x80F0, 0x611C, 0xA0C9, + 0x510F, 0x7005, 0x6112, 0x907F, 0x6107, 0x8010, 0x611A, 0xA0A5, 0x5121, 0x7102, 0x6116, 0xA05B, + 0x610C, 0x901F, 0x611E, 0xA0EC, 0x510B, 0x611F, 0x610D, 0x9031, 0x6000, 0x7106, 0x6117, 0xA075, + 0x5111, 0x7008, 0x6113, 0x90F1, 0x6108, 0x8040, 0x611B, 0xA0BF, 0x510F, 0x7004, 0x6110, 0x9051, + 0x6002, 0x800E, 0x6119, 0xA09D, 0x5121, 0x70FF, 0x6115, 0xA052, 0x610A, 0x901B, 0x611D, 0xA0E4, + 0x510B, 0x6122, 0x610E, 0x903F, 0x6001, 0x7124, 0x6118, 0xA08C, 0x5111, 0x700A, 0x6114, 0xA02F, + 0x6109, 0x8120, 0x611C, 0xA0D3, 0x510F, 0x7006, 0x6112, 0x9088, 0x6107, 0x8013, 0x611A, 0xA0AE, + 0x5121, 0x7103, 0x6116, 0xA064, 0x610C, 0x9025, 0x611E, 0xA0FA, 0x510B, 0x611F, 0x610D, 0x9028, + 0x6000, 0x7105, 0x6117, 0xA06A, 0x5111, 0x7007, 0x6113, 0x90C6, 0x6108, 0x8018, 0x611B, 0xA0B5, + 0x510F, 0x7003, 0x6110, 0x9043, 0x6002, 0x800B, 0x6119, 0xA093, 0x5121, 0x7080, 0x6115, 0xA03D, + 0x610A, 0x9014, 0x611D, 0xA0D9, 0x510B, 0x6122, 0x610E, 0x9037, 0x6001, 0x7123, 0x6118, 0xA07C, + 0x5111, 0x7009, 0x6114, 0x90F8, 0x6109, 0x8060, 0x611C, 0xA0C7, 0x510F, 0x7005, 0x6112, 0x9078, + 0x6107, 0x800F, 0x611A, 0xA0A3, 0x5121, 0x7102, 0x6116, 0xA058, 0x610C, 0x901E, 0x611E, 0xA0EA, + 0x510B, 0x611F, 0x610D, 0x9030, 0x6000, 0x7106, 0x6117, 0xA073, 0x5111, 0x7008, 0x6113, 0x90EE, + 0x6108, 0x8020, 0x611B, 0xA0BD, 0x510F, 0x7004, 0x6110, 0x9050, 0x6002, 0x800D, 0x6119, 0xA09B, + 0x5121, 0x70FF, 0x6115, 0xA04E, 0x610A, 0x901A, 0x611D, 0xA0E2, 0x510B, 0x6122, 0x610E, 0x903E, + 0x6001, 0x7124, 0x6118, 0xA08A, 0x5111, 0x700A, 0x6114, 0xA02D, 0x6109, 0x80FE, 0x611C, 0xA0D1, + 0x510F, 0x7006, 0x6112, 0x9084, 0x6107, 0x8011, 0x611A, 0xA0AC, 0x5121, 0x7103, 0x6116, 0xA062, + 0x610C, 0x9024, 0x611E, 0xA0F7, 0x510B, 0x611F, 0x610D, 0x902A, 0x6000, 0x7105, 0x6117, 0xA06E, + 0x5111, 0x7007, 0x6113, 0x90D0, 0x6108, 0x8019, 0x611B, 0xA0B9, 0x510F, 0x7003, 0x6110, 0x9048, + 0x6002, 0x800C, 0x6119, 0xA097, 0x5121, 0x7080, 0x6115, 0xA04A, 0x610A, 0x9016, 0x611D, 0xA0DD, + 0x510B, 0x6122, 0x610E, 0x9039, 0x6001, 0x7123, 0x6118, 0xA085, 0x5111, 0x7009, 0x6114, 0x90FD, + 0x6109, 0x80F0, 0x611C, 0xA0CB, 0x510F, 0x7005, 0x6112, 0x9081, 0x6107, 0x8010, 0x611A, 0xA0A7, + 0x5121, 0x7102, 0x6116, 0xA05D, 0x610C, 0x9021, 0x611E, 0xA0EF, 0x510B, 0x611F, 0x610D, 0x9033, + 0x6000, 0x7106, 0x6117, 0xA077, 0x5111, 0x7008, 0x6113, 0x90F2, 0x6108, 0x8040, 0x611B, 0xA0C2, + 0x510F, 0x7004, 0x6110, 0x9059, 0x6002, 0x800E, 0x6119, 0xA09F, 0x5121, 0x70FF, 0x6115, 0xA054, + 0x610A, 0x901C, 0x611D, 0xA0E6, 0x510B, 0x6122, 0x610E, 0x9041, 0x6001, 0x7124, 0x6118, 0xA08E, + 0x5111, 0x700A, 0x6114, 0xA034, 0x6109, 0x8120, 0x611C, 0xA0D5, 0x510F, 0x7006, 0x6112, 0x9090, + 0x6107, 0x8013, 0x611A, 0xA0B0, 0x5121, 0x7103, 0x6116, 0xA066, 0x610C, 0x9026, 0x611E, 0xA104, + 0x510B, 0x611F, 0x610D, 0x9027, 0x6000, 0x7105, 0x6117, 0xA069, 0x5111, 0x7007, 0x6113, 0x90C0, + 0x6108, 0x8018, 0x611B, 0xA0B4, 0x510F, 0x7003, 0x6110, 0x9042, 0x6002, 0x800B, 0x6119, 0xA092, + 0x5121, 0x7080, 0x6115, 0xA03B, 0x610A, 0x9012, 0x611D, 0xA0D8, 0x510B, 0x6122, 0x610E, 0x9035, + 0x6001, 0x7123, 0x6118, 0xA07B, 0x5111, 0x7009, 0x6114, 0x90F4, 0x6109, 0x8060, 0x611C, 0xA0C5, + 0x510F, 0x7005, 0x6112, 0x9070, 0x6107, 0x800F, 0x611A, 0xA0A2, 0x5121, 0x7102, 0x6116, 0xA057, + 0x610C, 0x901D, 0x611E, 0xA0E9, 0x510B, 0x611F, 0x610D, 0x902C, 0x6000, 0x7106, 0x6117, 0xA072, + 0x5111, 0x7008, 0x6113, 0x90E0, 0x6108, 0x8020, 0x611B, 0xA0BC, 0x510F, 0x7004, 0x6110, 0x9049, + 0x6002, 0x800D, 0x6119, 0xA09A, 0x5121, 0x70FF, 0x6115, 0xA04D, 0x610A, 0x9017, 0x611D, 0xA0E1, + 0x510B, 0x6122, 0x610E, 0x903C, 0x6001, 0x7124, 0x6118, 0xA089, 0x5111, 0x700A, 0x6114, 0xA02B, + 0x6109, 0x80FE, 0x611C, 0xA0CF, 0x510F, 0x7006, 0x6112, 0x9082, 0x6107, 0x8011, 0x611A, 0xA0AA, + 0x5121, 0x7103, 0x6116, 0xA061, 0x610C, 0x9022, 0x611E, 0xA0F6, 0x510B, 0x611F, 0x610D, 0x9029, + 0x6000, 0x7105, 0x6117, 0xA06D, 0x5111, 0x7007, 0x6113, 0x90CC, 0x6108, 0x8019, 0x611B, 0xA0B8, + 0x510F, 0x7003, 0x6110, 0x9044, 0x6002, 0x800C, 0x6119, 0xA096, 0x5121, 0x7080, 0x6115, 0xA047, + 0x610A, 0x9015, 0x611D, 0xA0DC, 0x510B, 0x6122, 0x610E, 0x9038, 0x6001, 0x7123, 0x6118, 0xA083, + 0x5111, 0x7009, 0x6114, 0x90FC, 0x6109, 0x80F0, 0x611C, 0xA0CA, 0x510F, 0x7005, 0x6112, 0x907F, + 0x6107, 0x8010, 0x611A, 0xA0A6, 0x5121, 0x7102, 0x6116, 0xA05C, 0x610C, 0x901F, 0x611E, 0xA0ED, + 0x510B, 0x611F, 0x610D, 0x9031, 0x6000, 0x7106, 0x6117, 0xA076, 0x5111, 0x7008, 0x6113, 0x90F1, + 0x6108, 0x8040, 0x611B, 0xA0C1, 0x510F, 0x7004, 0x6110, 0x9051, 0x6002, 0x800E, 0x6119, 0xA09E, + 0x5121, 0x70FF, 0x6115, 0xA053, 0x610A, 0x901B, 0x611D, 0xA0E5, 0x510B, 0x6122, 0x610E, 0x903F, + 0x6001, 0x7124, 0x6118, 0xA08D, 0x5111, 0x700A, 0x6114, 0xA032, 0x6109, 0x8120, 0x611C, 0xA0D4, + 0x510F, 0x7006, 0x6112, 0x9088, 0x6107, 0x8013, 0x611A, 0xA0AF, 0x5121, 0x7103, 0x6116, 0xA065, + 0x610C, 0x9025, 0x611E, 0xA0FB, 0x510B, 0x611F, 0x610D, 0x9028, 0x6000, 0x7105, 0x6117, 0xA06B, + 0x5111, 0x7007, 0x6113, 0x90C6, 0x6108, 0x8018, 0x611B, 0xA0B6, 0x510F, 0x7003, 0x6110, 0x9043, + 0x6002, 0x800B, 0x6119, 0xA094, 0x5121, 0x7080, 0x6115, 0xA045, 0x610A, 0x9014, 0x611D, 0xA0DA, + 0x510B, 0x6122, 0x610E, 0x9037, 0x6001, 0x7123, 0x6118, 0xA07D, 0x5111, 0x7009, 0x6114, 0x90F8, + 0x6109, 0x8060, 0x611C, 0xA0C8, 0x510F, 0x7005, 0x6112, 0x9078, 0x6107, 0x800F, 0x611A, 0xA0A4, + 0x5121, 0x7102, 0x6116, 0xA05A, 0x610C, 0x901E, 0x611E, 0xA0EB, 0x510B, 0x611F, 0x610D, 0x9030, + 0x6000, 0x7106, 0x6117, 0xA074, 0x5111, 0x7008, 0x6113, 0x90EE, 0x6108, 0x8020, 0x611B, 0xA0BE, + 0x510F, 0x7004, 0x6110, 0x9050, 0x6002, 0x800D, 0x6119, 0xA09C, 0x5121, 0x70FF, 0x6115, 0xA04F, + 0x610A, 0x901A, 0x611D, 0xA0E3, 0x510B, 0x6122, 0x610E, 0x903E, 0x6001, 0x7124, 0x6118, 0xA08B, + 0x5111, 0x700A, 0x6114, 0xA02E, 0x6109, 0x80FE, 0x611C, 0xA0D2, 0x510F, 0x7006, 0x6112, 0x9084, + 0x6107, 0x8011, 0x611A, 0xA0AD, 0x5121, 0x7103, 0x6116, 0xA063, 0x610C, 0x9024, 0x611E, 0xA0F9, + 0x510B, 0x611F, 0x610D, 0x902A, 0x6000, 0x7105, 0x6117, 0xA06F, 0x5111, 0x7007, 0x6113, 0x90D0, + 0x6108, 0x8019, 0x611B, 0xA0BA, 0x510F, 0x7003, 0x6110, 0x9048, 0x6002, 0x800C, 0x6119, 0xA098, + 0x5121, 0x7080, 0x6115, 0xA04B, 0x610A, 0x9016, 0x611D, 0xA0DE, 0x510B, 0x6122, 0x610E, 0x9039, + 0x6001, 0x7123, 0x6118, 0xA086, 0x5111, 0x7009, 0x6114, 0x90FD, 0x6109, 0x80F0, 0x611C, 0xA0CD, + 0x510F, 0x7005, 0x6112, 0x9081, 0x6107, 0x8010, 0x611A, 0xA0A8, 0x5121, 0x7102, 0x6116, 0xA05E, + 0x610C, 0x9021, 0x611E, 0xA0F3, 0x510B, 0x611F, 0x610D, 0x9033, 0x6000, 0x7106, 0x6117, 0xA079, + 0x5111, 0x7008, 0x6113, 0x90F2, 0x6108, 0x8040, 0x611B, 0xA0C3, 0x510F, 0x7004, 0x6110, 0x9059, + 0x6002, 0x800E, 0x6119, 0xA0A0, 0x5121, 0x70FF, 0x6115, 0xA055, 0x610A, 0x901C, 0x611D, 0xA0E7, + 0x510B, 0x6122, 0x610E, 0x9041, 0x6001, 0x7124, 0x6118, 0xA08F, 0x5111, 0x700A, 0x6114, 0xA036, + 0x6109, 0x8120, 0x611C, 0xA0D6, 0x510F, 0x7006, 0x6112, 0x9090, 0x6107, 0x8013, 0x611A, 0xA0B1, + 0x5121, 0x7103, 0x6116, 0xA067, 0x610C, 0x9026, 0x611E, 0xD125 +}; + +static const UINT16 HuffTableLOM[512] = { + 0x2001, 0x4000, 0x3002, 0x4008, 0x2001, 0x4005, 0x3004, 0x500A, 0x2001, 0x4003, 0x3002, 0x5007, + 0x2001, 0x4006, 0x3004, 0x700D, 0x2001, 0x4000, 0x3002, 0x4008, 0x2001, 0x4005, 0x3004, 0x600B, + 0x2001, 0x4003, 0x3002, 0x5009, 0x2001, 0x4006, 0x3004, 0x8012, 0x2001, 0x4000, 0x3002, 0x4008, + 0x2001, 0x4005, 0x3004, 0x500A, 0x2001, 0x4003, 0x3002, 0x5007, 0x2001, 0x4006, 0x3004, 0x7010, + 0x2001, 0x4000, 0x3002, 0x4008, 0x2001, 0x4005, 0x3004, 0x600C, 0x2001, 0x4003, 0x3002, 0x5009, + 0x2001, 0x4006, 0x3004, 0x9018, 0x2001, 0x4000, 0x3002, 0x4008, 0x2001, 0x4005, 0x3004, 0x500A, + 0x2001, 0x4003, 0x3002, 0x5007, 0x2001, 0x4006, 0x3004, 0x700E, 0x2001, 0x4000, 0x3002, 0x4008, + 0x2001, 0x4005, 0x3004, 0x600B, 0x2001, 0x4003, 0x3002, 0x5009, 0x2001, 0x4006, 0x3004, 0x9013, + 0x2001, 0x4000, 0x3002, 0x4008, 0x2001, 0x4005, 0x3004, 0x500A, 0x2001, 0x4003, 0x3002, 0x5007, + 0x2001, 0x4006, 0x3004, 0x800F, 0x2001, 0x4000, 0x3002, 0x4008, 0x2001, 0x4005, 0x3004, 0x600C, + 0x2001, 0x4003, 0x3002, 0x5009, 0x2001, 0x4006, 0x3004, 0x901C, 0x2001, 0x4000, 0x3002, 0x4008, + 0x2001, 0x4005, 0x3004, 0x500A, 0x2001, 0x4003, 0x3002, 0x5007, 0x2001, 0x4006, 0x3004, 0x700D, + 0x2001, 0x4000, 0x3002, 0x4008, 0x2001, 0x4005, 0x3004, 0x600B, 0x2001, 0x4003, 0x3002, 0x5009, + 0x2001, 0x4006, 0x3004, 0x8015, 0x2001, 0x4000, 0x3002, 0x4008, 0x2001, 0x4005, 0x3004, 0x500A, + 0x2001, 0x4003, 0x3002, 0x5007, 0x2001, 0x4006, 0x3004, 0x7010, 0x2001, 0x4000, 0x3002, 0x4008, + 0x2001, 0x4005, 0x3004, 0x600C, 0x2001, 0x4003, 0x3002, 0x5009, 0x2001, 0x4006, 0x3004, 0x901A, + 0x2001, 0x4000, 0x3002, 0x4008, 0x2001, 0x4005, 0x3004, 0x500A, 0x2001, 0x4003, 0x3002, 0x5007, + 0x2001, 0x4006, 0x3004, 0x700E, 0x2001, 0x4000, 0x3002, 0x4008, 0x2001, 0x4005, 0x3004, 0x600B, + 0x2001, 0x4003, 0x3002, 0x5009, 0x2001, 0x4006, 0x3004, 0x9016, 0x2001, 0x4000, 0x3002, 0x4008, + 0x2001, 0x4005, 0x3004, 0x500A, 0x2001, 0x4003, 0x3002, 0x5007, 0x2001, 0x4006, 0x3004, 0x8011, + 0x2001, 0x4000, 0x3002, 0x4008, 0x2001, 0x4005, 0x3004, 0x600C, 0x2001, 0x4003, 0x3002, 0x5009, + 0x2001, 0x4006, 0x3004, 0x901E, 0x2001, 0x4000, 0x3002, 0x4008, 0x2001, 0x4005, 0x3004, 0x500A, + 0x2001, 0x4003, 0x3002, 0x5007, 0x2001, 0x4006, 0x3004, 0x700D, 0x2001, 0x4000, 0x3002, 0x4008, + 0x2001, 0x4005, 0x3004, 0x600B, 0x2001, 0x4003, 0x3002, 0x5009, 0x2001, 0x4006, 0x3004, 0x8012, + 0x2001, 0x4000, 0x3002, 0x4008, 0x2001, 0x4005, 0x3004, 0x500A, 0x2001, 0x4003, 0x3002, 0x5007, + 0x2001, 0x4006, 0x3004, 0x7010, 0x2001, 0x4000, 0x3002, 0x4008, 0x2001, 0x4005, 0x3004, 0x600C, + 0x2001, 0x4003, 0x3002, 0x5009, 0x2001, 0x4006, 0x3004, 0x9019, 0x2001, 0x4000, 0x3002, 0x4008, + 0x2001, 0x4005, 0x3004, 0x500A, 0x2001, 0x4003, 0x3002, 0x5007, 0x2001, 0x4006, 0x3004, 0x700E, + 0x2001, 0x4000, 0x3002, 0x4008, 0x2001, 0x4005, 0x3004, 0x600B, 0x2001, 0x4003, 0x3002, 0x5009, + 0x2001, 0x4006, 0x3004, 0x9014, 0x2001, 0x4000, 0x3002, 0x4008, 0x2001, 0x4005, 0x3004, 0x500A, + 0x2001, 0x4003, 0x3002, 0x5007, 0x2001, 0x4006, 0x3004, 0x800F, 0x2001, 0x4000, 0x3002, 0x4008, + 0x2001, 0x4005, 0x3004, 0x600C, 0x2001, 0x4003, 0x3002, 0x5009, 0x2001, 0x4006, 0x3004, 0x901D, + 0x2001, 0x4000, 0x3002, 0x4008, 0x2001, 0x4005, 0x3004, 0x500A, 0x2001, 0x4003, 0x3002, 0x5007, + 0x2001, 0x4006, 0x3004, 0x700D, 0x2001, 0x4000, 0x3002, 0x4008, 0x2001, 0x4005, 0x3004, 0x600B, + 0x2001, 0x4003, 0x3002, 0x5009, 0x2001, 0x4006, 0x3004, 0x8015, 0x2001, 0x4000, 0x3002, 0x4008, + 0x2001, 0x4005, 0x3004, 0x500A, 0x2001, 0x4003, 0x3002, 0x5007, 0x2001, 0x4006, 0x3004, 0x7010, + 0x2001, 0x4000, 0x3002, 0x4008, 0x2001, 0x4005, 0x3004, 0x600C, 0x2001, 0x4003, 0x3002, 0x5009, + 0x2001, 0x4006, 0x3004, 0x901B, 0x2001, 0x4000, 0x3002, 0x4008, 0x2001, 0x4005, 0x3004, 0x500A, + 0x2001, 0x4003, 0x3002, 0x5007, 0x2001, 0x4006, 0x3004, 0x700E, 0x2001, 0x4000, 0x3002, 0x4008, + 0x2001, 0x4005, 0x3004, 0x600B, 0x2001, 0x4003, 0x3002, 0x5009, 0x2001, 0x4006, 0x3004, 0x9017, + 0x2001, 0x4000, 0x3002, 0x4008, 0x2001, 0x4005, 0x3004, 0x500A, 0x2001, 0x4003, 0x3002, 0x5007, + 0x2001, 0x4006, 0x3004, 0x8011, 0x2001, 0x4000, 0x3002, 0x4008, 0x2001, 0x4005, 0x3004, 0x600C, + 0x2001, 0x4003, 0x3002, 0x5009, 0x2001, 0x4006, 0x3004, 0x901F +}; + +static const BYTE HuffTableMask[39] = { + 0x11, /* 0 */ + 0x9E, /* 1 */ + 0xA1, /* 2 */ + 0x00, /* 3 */ + 0x00, /* 4 */ + 0x01, /* 5 */ + 0x00, /* 6 */ + 0x03, /* 7 */ + 0x00, /* 8 */ + 0x07, /* 9 */ + 0x00, /* 10 */ + 0x0F, /* 11 */ + 0x00, /* 12 */ + 0x1F, /* 13 */ + 0x00, /* 14 */ + 0x3F, /* 15 */ + 0x00, /* 16 */ + 0x7F, /* 17 */ + 0x00, /* 18 */ + 0xFF, /* 19 */ + 0x00, /* 20 */ + 0xFF, /* 21 */ + 0x01, /* 22 */ + 0xFF, /* 23 */ + 0x03, /* 24 */ + 0xFF, /* 25 */ + 0x07, /* 26 */ + 0xFF, /* 27 */ + 0x0F, /* 28 */ + 0xFF, /* 29 */ + 0x1F, /* 30 */ + 0xFF, /* 31 */ + 0x3F, /* 32 */ + 0xFF, /* 33 */ + 0x7F, /* 34 */ + 0xFF, /* 35 */ + 0xFF, /* 36 */ + 0x00, /* 37 */ + 0x00 /* 38 */ +}; + +static const BYTE HuffLengthLEC[294] = { + 6, /* 0 */ + 6, /* 1 */ + 6, /* 2 */ + 7, /* 3 */ + 7, /* 4 */ + 7, /* 5 */ + 7, /* 6 */ + 7, /* 7 */ + 7, /* 8 */ + 7, /* 9 */ + 7, /* 10 */ + 8, /* 11 */ + 8, /* 12 */ + 8, /* 13 */ + 8, /* 14 */ + 8, /* 15 */ + 8, /* 16 */ + 8, /* 17 */ + 9, /* 18 */ + 8, /* 19 */ + 9, /* 20 */ + 9, /* 21 */ + 9, /* 22 */ + 9, /* 23 */ + 8, /* 24 */ + 8, /* 25 */ + 9, /* 26 */ + 9, /* 27 */ + 9, /* 28 */ + 9, /* 29 */ + 9, /* 30 */ + 9, /* 31 */ + 8, /* 32 */ + 9, /* 33 */ + 9, /* 34 */ + 10, /* 35 */ + 9, /* 36 */ + 9, /* 37 */ + 9, /* 38 */ + 9, /* 39 */ + 9, /* 40 */ + 9, /* 41 */ + 9, /* 42 */ + 10, /* 43 */ + 9, /* 44 */ + 10, /* 45 */ + 10, /* 46 */ + 10, /* 47 */ + 9, /* 48 */ + 9, /* 49 */ + 10, /* 50 */ + 9, /* 51 */ + 10, /* 52 */ + 9, /* 53 */ + 10, /* 54 */ + 9, /* 55 */ + 9, /* 56 */ + 9, /* 57 */ + 10, /* 58 */ + 10, /* 59 */ + 9, /* 60 */ + 10, /* 61 */ + 9, /* 62 */ + 9, /* 63 */ + 8, /* 64 */ + 9, /* 65 */ + 9, /* 66 */ + 9, /* 67 */ + 9, /* 68 */ + 10, /* 69 */ + 10, /* 70 */ + 10, /* 71 */ + 9, /* 72 */ + 9, /* 73 */ + 10, /* 74 */ + 10, /* 75 */ + 10, /* 76 */ + 10, /* 77 */ + 10, /* 78 */ + 10, /* 79 */ + 9, /* 80 */ + 9, /* 81 */ + 10, /* 82 */ + 10, /* 83 */ + 10, /* 84 */ + 10, /* 85 */ + 10, /* 86 */ + 10, /* 87 */ + 10, /* 88 */ + 9, /* 89 */ + 10, /* 90 */ + 10, /* 91 */ + 10, /* 92 */ + 10, /* 93 */ + 10, /* 94 */ + 10, /* 95 */ + 8, /* 96 */ + 10, /* 97 */ + 10, /* 98 */ + 10, /* 99 */ + 10, /* 100 */ + 10, /* 101 */ + 10, /* 102 */ + 10, /* 103 */ + 10, /* 104 */ + 10, /* 105 */ + 10, /* 106 */ + 10, /* 107 */ + 10, /* 108 */ + 10, /* 109 */ + 10, /* 110 */ + 10, /* 111 */ + 9, /* 112 */ + 10, /* 113 */ + 10, /* 114 */ + 10, /* 115 */ + 10, /* 116 */ + 10, /* 117 */ + 10, /* 118 */ + 10, /* 119 */ + 9, /* 120 */ + 10, /* 121 */ + 10, /* 122 */ + 10, /* 123 */ + 10, /* 124 */ + 10, /* 125 */ + 10, /* 126 */ + 9, /* 127 */ + 7, /* 128 */ + 9, /* 129 */ + 9, /* 130 */ + 10, /* 131 */ + 9, /* 132 */ + 10, /* 133 */ + 10, /* 134 */ + 10, /* 135 */ + 9, /* 136 */ + 10, /* 137 */ + 10, /* 138 */ + 10, /* 139 */ + 10, /* 140 */ + 10, /* 141 */ + 10, /* 142 */ + 10, /* 143 */ + 9, /* 144 */ + 10, /* 145 */ + 10, /* 146 */ + 10, /* 147 */ + 10, /* 148 */ + 10, /* 149 */ + 10, /* 150 */ + 10, /* 151 */ + 10, /* 152 */ + 10, /* 153 */ + 10, /* 154 */ + 10, /* 155 */ + 10, /* 156 */ + 10, /* 157 */ + 10, /* 158 */ + 10, /* 159 */ + 10, /* 160 */ + 10, /* 161 */ + 10, /* 162 */ + 10, /* 163 */ + 10, /* 164 */ + 10, /* 165 */ + 10, /* 166 */ + 10, /* 167 */ + 10, /* 168 */ + 10, /* 169 */ + 10, /* 170 */ + 13, /* 171 */ + 10, /* 172 */ + 10, /* 173 */ + 10, /* 174 */ + 10, /* 175 */ + 10, /* 176 */ + 10, /* 177 */ + 11, /* 178 */ + 10, /* 179 */ + 10, /* 180 */ + 10, /* 181 */ + 10, /* 182 */ + 10, /* 183 */ + 10, /* 184 */ + 10, /* 185 */ + 10, /* 186 */ + 10, /* 187 */ + 10, /* 188 */ + 10, /* 189 */ + 10, /* 190 */ + 10, /* 191 */ + 9, /* 192 */ + 10, /* 193 */ + 10, /* 194 */ + 10, /* 195 */ + 10, /* 196 */ + 10, /* 197 */ + 9, /* 198 */ + 10, /* 199 */ + 10, /* 200 */ + 10, /* 201 */ + 10, /* 202 */ + 10, /* 203 */ + 9, /* 204 */ + 10, /* 205 */ + 10, /* 206 */ + 10, /* 207 */ + 9, /* 208 */ + 10, /* 209 */ + 10, /* 210 */ + 10, /* 211 */ + 10, /* 212 */ + 10, /* 213 */ + 10, /* 214 */ + 10, /* 215 */ + 10, /* 216 */ + 10, /* 217 */ + 10, /* 218 */ + 10, /* 219 */ + 10, /* 220 */ + 10, /* 221 */ + 10, /* 222 */ + 10, /* 223 */ + 9, /* 224 */ + 10, /* 225 */ + 10, /* 226 */ + 10, /* 227 */ + 10, /* 228 */ + 10, /* 229 */ + 10, /* 230 */ + 10, /* 231 */ + 10, /* 232 */ + 10, /* 233 */ + 10, /* 234 */ + 10, /* 235 */ + 10, /* 236 */ + 10, /* 237 */ + 9, /* 238 */ + 10, /* 239 */ + 8, /* 240 */ + 9, /* 241 */ + 9, /* 242 */ + 10, /* 243 */ + 9, /* 244 */ + 10, /* 245 */ + 10, /* 246 */ + 10, /* 247 */ + 9, /* 248 */ + 10, /* 249 */ + 10, /* 250 */ + 10, /* 251 */ + 9, /* 252 */ + 9, /* 253 */ + 8, /* 254 */ + 7, /* 255 */ + 13, /* 256 */ + 13, /* 257 */ + 7, /* 258 */ + 7, /* 259 */ + 10, /* 260 */ + 7, /* 261 */ + 7, /* 262 */ + 6, /* 263 */ + 6, /* 264 */ + 6, /* 265 */ + 6, /* 266 */ + 5, /* 267 */ + 6, /* 268 */ + 6, /* 269 */ + 6, /* 270 */ + 5, /* 271 */ + 6, /* 272 */ + 5, /* 273 */ + 6, /* 274 */ + 6, /* 275 */ + 6, /* 276 */ + 6, /* 277 */ + 6, /* 278 */ + 6, /* 279 */ + 6, /* 280 */ + 6, /* 281 */ + 6, /* 282 */ + 6, /* 283 */ + 6, /* 284 */ + 6, /* 285 */ + 6, /* 286 */ + 6, /* 287 */ + 8, /* 288 */ + 5, /* 289 */ + 6, /* 290 */ + 7, /* 291 */ + 7, /* 292 */ + 13 /* 293 */ +}; + +static const BYTE HuffCodeLEC[588] = { + 0x04, /* 0 */ + 0x00, /* 1 */ + 0x24, /* 2 */ + 0x00, /* 3 */ + 0x14, /* 4 */ + 0x00, /* 5 */ + 0x11, /* 6 */ + 0x00, /* 7 */ + 0x51, /* 8 */ + 0x00, /* 9 */ + 0x31, /* 10 */ + 0x00, /* 11 */ + 0x71, /* 12 */ + 0x00, /* 13 */ + 0x09, /* 14 */ + 0x00, /* 15 */ + 0x49, /* 16 */ + 0x00, /* 17 */ + 0x29, /* 18 */ + 0x00, /* 19 */ + 0x69, /* 20 */ + 0x00, /* 21 */ + 0x15, /* 22 */ + 0x00, /* 23 */ + 0x95, /* 24 */ + 0x00, /* 25 */ + 0x55, /* 26 */ + 0x00, /* 27 */ + 0xD5, /* 28 */ + 0x00, /* 29 */ + 0x35, /* 30 */ + 0x00, /* 31 */ + 0xB5, /* 32 */ + 0x00, /* 33 */ + 0x75, /* 34 */ + 0x00, /* 35 */ + 0x1D, /* 36 */ + 0x00, /* 37 */ + 0xF5, /* 38 */ + 0x00, /* 39 */ + 0x1D, /* 40 */ + 0x01, /* 41 */ + 0x9D, /* 42 */ + 0x00, /* 43 */ + 0x9D, /* 44 */ + 0x01, /* 45 */ + 0x5D, /* 46 */ + 0x00, /* 47 */ + 0x0D, /* 48 */ + 0x00, /* 49 */ + 0x8D, /* 50 */ + 0x00, /* 51 */ + 0x5D, /* 52 */ + 0x01, /* 53 */ + 0xDD, /* 54 */ + 0x00, /* 55 */ + 0xDD, /* 56 */ + 0x01, /* 57 */ + 0x3D, /* 58 */ + 0x00, /* 59 */ + 0x3D, /* 60 */ + 0x01, /* 61 */ + 0xBD, /* 62 */ + 0x00, /* 63 */ + 0x4D, /* 64 */ + 0x00, /* 65 */ + 0xBD, /* 66 */ + 0x01, /* 67 */ + 0x7D, /* 68 */ + 0x00, /* 69 */ + 0x6B, /* 70 */ + 0x00, /* 71 */ + 0x7D, /* 72 */ + 0x01, /* 73 */ + 0xFD, /* 74 */ + 0x00, /* 75 */ + 0xFD, /* 76 */ + 0x01, /* 77 */ + 0x03, /* 78 */ + 0x00, /* 79 */ + 0x03, /* 80 */ + 0x01, /* 81 */ + 0x83, /* 82 */ + 0x00, /* 83 */ + 0x83, /* 84 */ + 0x01, /* 85 */ + 0x6B, /* 86 */ + 0x02, /* 87 */ + 0x43, /* 88 */ + 0x00, /* 89 */ + 0x6B, /* 90 */ + 0x01, /* 91 */ + 0x6B, /* 92 */ + 0x03, /* 93 */ + 0xEB, /* 94 */ + 0x00, /* 95 */ + 0x43, /* 96 */ + 0x01, /* 97 */ + 0xC3, /* 98 */ + 0x00, /* 99 */ + 0xEB, /* 100 */ + 0x02, /* 101 */ + 0xC3, /* 102 */ + 0x01, /* 103 */ + 0xEB, /* 104 */ + 0x01, /* 105 */ + 0x23, /* 106 */ + 0x00, /* 107 */ + 0xEB, /* 108 */ + 0x03, /* 109 */ + 0x23, /* 110 */ + 0x01, /* 111 */ + 0xA3, /* 112 */ + 0x00, /* 113 */ + 0xA3, /* 114 */ + 0x01, /* 115 */ + 0x1B, /* 116 */ + 0x00, /* 117 */ + 0x1B, /* 118 */ + 0x02, /* 119 */ + 0x63, /* 120 */ + 0x00, /* 121 */ + 0x1B, /* 122 */ + 0x01, /* 123 */ + 0x63, /* 124 */ + 0x01, /* 125 */ + 0xE3, /* 126 */ + 0x00, /* 127 */ + 0xCD, /* 128 */ + 0x00, /* 129 */ + 0xE3, /* 130 */ + 0x01, /* 131 */ + 0x13, /* 132 */ + 0x00, /* 133 */ + 0x13, /* 134 */ + 0x01, /* 135 */ + 0x93, /* 136 */ + 0x00, /* 137 */ + 0x1B, /* 138 */ + 0x03, /* 139 */ + 0x9B, /* 140 */ + 0x00, /* 141 */ + 0x9B, /* 142 */ + 0x02, /* 143 */ + 0x93, /* 144 */ + 0x01, /* 145 */ + 0x53, /* 146 */ + 0x00, /* 147 */ + 0x9B, /* 148 */ + 0x01, /* 149 */ + 0x9B, /* 150 */ + 0x03, /* 151 */ + 0x5B, /* 152 */ + 0x00, /* 153 */ + 0x5B, /* 154 */ + 0x02, /* 155 */ + 0x5B, /* 156 */ + 0x01, /* 157 */ + 0x5B, /* 158 */ + 0x03, /* 159 */ + 0x53, /* 160 */ + 0x01, /* 161 */ + 0xD3, /* 162 */ + 0x00, /* 163 */ + 0xDB, /* 164 */ + 0x00, /* 165 */ + 0xDB, /* 166 */ + 0x02, /* 167 */ + 0xDB, /* 168 */ + 0x01, /* 169 */ + 0xDB, /* 170 */ + 0x03, /* 171 */ + 0x3B, /* 172 */ + 0x00, /* 173 */ + 0x3B, /* 174 */ + 0x02, /* 175 */ + 0x3B, /* 176 */ + 0x01, /* 177 */ + 0xD3, /* 178 */ + 0x01, /* 179 */ + 0x3B, /* 180 */ + 0x03, /* 181 */ + 0xBB, /* 182 */ + 0x00, /* 183 */ + 0xBB, /* 184 */ + 0x02, /* 185 */ + 0xBB, /* 186 */ + 0x01, /* 187 */ + 0xBB, /* 188 */ + 0x03, /* 189 */ + 0x7B, /* 190 */ + 0x00, /* 191 */ + 0x2D, /* 192 */ + 0x00, /* 193 */ + 0x7B, /* 194 */ + 0x02, /* 195 */ + 0x7B, /* 196 */ + 0x01, /* 197 */ + 0x7B, /* 198 */ + 0x03, /* 199 */ + 0xFB, /* 200 */ + 0x00, /* 201 */ + 0xFB, /* 202 */ + 0x02, /* 203 */ + 0xFB, /* 204 */ + 0x01, /* 205 */ + 0xFB, /* 206 */ + 0x03, /* 207 */ + 0x07, /* 208 */ + 0x00, /* 209 */ + 0x07, /* 210 */ + 0x02, /* 211 */ + 0x07, /* 212 */ + 0x01, /* 213 */ + 0x07, /* 214 */ + 0x03, /* 215 */ + 0x87, /* 216 */ + 0x00, /* 217 */ + 0x87, /* 218 */ + 0x02, /* 219 */ + 0x87, /* 220 */ + 0x01, /* 221 */ + 0x87, /* 222 */ + 0x03, /* 223 */ + 0x33, /* 224 */ + 0x00, /* 225 */ + 0x47, /* 226 */ + 0x00, /* 227 */ + 0x47, /* 228 */ + 0x02, /* 229 */ + 0x47, /* 230 */ + 0x01, /* 231 */ + 0x47, /* 232 */ + 0x03, /* 233 */ + 0xC7, /* 234 */ + 0x00, /* 235 */ + 0xC7, /* 236 */ + 0x02, /* 237 */ + 0xC7, /* 238 */ + 0x01, /* 239 */ + 0x33, /* 240 */ + 0x01, /* 241 */ + 0xC7, /* 242 */ + 0x03, /* 243 */ + 0x27, /* 244 */ + 0x00, /* 245 */ + 0x27, /* 246 */ + 0x02, /* 247 */ + 0x27, /* 248 */ + 0x01, /* 249 */ + 0x27, /* 250 */ + 0x03, /* 251 */ + 0xA7, /* 252 */ + 0x00, /* 253 */ + 0xB3, /* 254 */ + 0x00, /* 255 */ + 0x19, /* 256 */ + 0x00, /* 257 */ + 0xB3, /* 258 */ + 0x01, /* 259 */ + 0x73, /* 260 */ + 0x00, /* 261 */ + 0xA7, /* 262 */ + 0x02, /* 263 */ + 0x73, /* 264 */ + 0x01, /* 265 */ + 0xA7, /* 266 */ + 0x01, /* 267 */ + 0xA7, /* 268 */ + 0x03, /* 269 */ + 0x67, /* 270 */ + 0x00, /* 271 */ + 0xF3, /* 272 */ + 0x00, /* 273 */ + 0x67, /* 274 */ + 0x02, /* 275 */ + 0x67, /* 276 */ + 0x01, /* 277 */ + 0x67, /* 278 */ + 0x03, /* 279 */ + 0xE7, /* 280 */ + 0x00, /* 281 */ + 0xE7, /* 282 */ + 0x02, /* 283 */ + 0xE7, /* 284 */ + 0x01, /* 285 */ + 0xE7, /* 286 */ + 0x03, /* 287 */ + 0xF3, /* 288 */ + 0x01, /* 289 */ + 0x17, /* 290 */ + 0x00, /* 291 */ + 0x17, /* 292 */ + 0x02, /* 293 */ + 0x17, /* 294 */ + 0x01, /* 295 */ + 0x17, /* 296 */ + 0x03, /* 297 */ + 0x97, /* 298 */ + 0x00, /* 299 */ + 0x97, /* 300 */ + 0x02, /* 301 */ + 0x97, /* 302 */ + 0x01, /* 303 */ + 0x97, /* 304 */ + 0x03, /* 305 */ + 0x57, /* 306 */ + 0x00, /* 307 */ + 0x57, /* 308 */ + 0x02, /* 309 */ + 0x57, /* 310 */ + 0x01, /* 311 */ + 0x57, /* 312 */ + 0x03, /* 313 */ + 0xD7, /* 314 */ + 0x00, /* 315 */ + 0xD7, /* 316 */ + 0x02, /* 317 */ + 0xD7, /* 318 */ + 0x01, /* 319 */ + 0xD7, /* 320 */ + 0x03, /* 321 */ + 0x37, /* 322 */ + 0x00, /* 323 */ + 0x37, /* 324 */ + 0x02, /* 325 */ + 0x37, /* 326 */ + 0x01, /* 327 */ + 0x37, /* 328 */ + 0x03, /* 329 */ + 0xB7, /* 330 */ + 0x00, /* 331 */ + 0xB7, /* 332 */ + 0x02, /* 333 */ + 0xB7, /* 334 */ + 0x01, /* 335 */ + 0xB7, /* 336 */ + 0x03, /* 337 */ + 0x77, /* 338 */ + 0x00, /* 339 */ + 0x77, /* 340 */ + 0x02, /* 341 */ + 0xFF, /* 342 */ + 0x07, /* 343 */ + 0x77, /* 344 */ + 0x01, /* 345 */ + 0x77, /* 346 */ + 0x03, /* 347 */ + 0xF7, /* 348 */ + 0x00, /* 349 */ + 0xF7, /* 350 */ + 0x02, /* 351 */ + 0xF7, /* 352 */ + 0x01, /* 353 */ + 0xF7, /* 354 */ + 0x03, /* 355 */ + 0xFF, /* 356 */ + 0x03, /* 357 */ + 0x0F, /* 358 */ + 0x00, /* 359 */ + 0x0F, /* 360 */ + 0x02, /* 361 */ + 0x0F, /* 362 */ + 0x01, /* 363 */ + 0x0F, /* 364 */ + 0x03, /* 365 */ + 0x8F, /* 366 */ + 0x00, /* 367 */ + 0x8F, /* 368 */ + 0x02, /* 369 */ + 0x8F, /* 370 */ + 0x01, /* 371 */ + 0x8F, /* 372 */ + 0x03, /* 373 */ + 0x4F, /* 374 */ + 0x00, /* 375 */ + 0x4F, /* 376 */ + 0x02, /* 377 */ + 0x4F, /* 378 */ + 0x01, /* 379 */ + 0x4F, /* 380 */ + 0x03, /* 381 */ + 0xCF, /* 382 */ + 0x00, /* 383 */ + 0x0B, /* 384 */ + 0x00, /* 385 */ + 0xCF, /* 386 */ + 0x02, /* 387 */ + 0xCF, /* 388 */ + 0x01, /* 389 */ + 0xCF, /* 390 */ + 0x03, /* 391 */ + 0x2F, /* 392 */ + 0x00, /* 393 */ + 0x2F, /* 394 */ + 0x02, /* 395 */ + 0x0B, /* 396 */ + 0x01, /* 397 */ + 0x2F, /* 398 */ + 0x01, /* 399 */ + 0x2F, /* 400 */ + 0x03, /* 401 */ + 0xAF, /* 402 */ + 0x00, /* 403 */ + 0xAF, /* 404 */ + 0x02, /* 405 */ + 0xAF, /* 406 */ + 0x01, /* 407 */ + 0x8B, /* 408 */ + 0x00, /* 409 */ + 0xAF, /* 410 */ + 0x03, /* 411 */ + 0x6F, /* 412 */ + 0x00, /* 413 */ + 0x6F, /* 414 */ + 0x02, /* 415 */ + 0x8B, /* 416 */ + 0x01, /* 417 */ + 0x6F, /* 418 */ + 0x01, /* 419 */ + 0x6F, /* 420 */ + 0x03, /* 421 */ + 0xEF, /* 422 */ + 0x00, /* 423 */ + 0xEF, /* 424 */ + 0x02, /* 425 */ + 0xEF, /* 426 */ + 0x01, /* 427 */ + 0xEF, /* 428 */ + 0x03, /* 429 */ + 0x1F, /* 430 */ + 0x00, /* 431 */ + 0x1F, /* 432 */ + 0x02, /* 433 */ + 0x1F, /* 434 */ + 0x01, /* 435 */ + 0x1F, /* 436 */ + 0x03, /* 437 */ + 0x9F, /* 438 */ + 0x00, /* 439 */ + 0x9F, /* 440 */ + 0x02, /* 441 */ + 0x9F, /* 442 */ + 0x01, /* 443 */ + 0x9F, /* 444 */ + 0x03, /* 445 */ + 0x5F, /* 446 */ + 0x00, /* 447 */ + 0x4B, /* 448 */ + 0x00, /* 449 */ + 0x5F, /* 450 */ + 0x02, /* 451 */ + 0x5F, /* 452 */ + 0x01, /* 453 */ + 0x5F, /* 454 */ + 0x03, /* 455 */ + 0xDF, /* 456 */ + 0x00, /* 457 */ + 0xDF, /* 458 */ + 0x02, /* 459 */ + 0xDF, /* 460 */ + 0x01, /* 461 */ + 0xDF, /* 462 */ + 0x03, /* 463 */ + 0x3F, /* 464 */ + 0x00, /* 465 */ + 0x3F, /* 466 */ + 0x02, /* 467 */ + 0x3F, /* 468 */ + 0x01, /* 469 */ + 0x3F, /* 470 */ + 0x03, /* 471 */ + 0xBF, /* 472 */ + 0x00, /* 473 */ + 0xBF, /* 474 */ + 0x02, /* 475 */ + 0x4B, /* 476 */ + 0x01, /* 477 */ + 0xBF, /* 478 */ + 0x01, /* 479 */ + 0xAD, /* 480 */ + 0x00, /* 481 */ + 0xCB, /* 482 */ + 0x00, /* 483 */ + 0xCB, /* 484 */ + 0x01, /* 485 */ + 0xBF, /* 486 */ + 0x03, /* 487 */ + 0x2B, /* 488 */ + 0x00, /* 489 */ + 0x7F, /* 490 */ + 0x00, /* 491 */ + 0x7F, /* 492 */ + 0x02, /* 493 */ + 0x7F, /* 494 */ + 0x01, /* 495 */ + 0x2B, /* 496 */ + 0x01, /* 497 */ + 0x7F, /* 498 */ + 0x03, /* 499 */ + 0xFF, /* 500 */ + 0x00, /* 501 */ + 0xFF, /* 502 */ + 0x02, /* 503 */ + 0xAB, /* 504 */ + 0x00, /* 505 */ + 0xAB, /* 506 */ + 0x01, /* 507 */ + 0x6D, /* 508 */ + 0x00, /* 509 */ + 0x59, /* 510 */ + 0x00, /* 511 */ + 0xFF, /* 512 */ + 0x17, /* 513 */ + 0xFF, /* 514 */ + 0x0F, /* 515 */ + 0x39, /* 516 */ + 0x00, /* 517 */ + 0x79, /* 518 */ + 0x00, /* 519 */ + 0xFF, /* 520 */ + 0x01, /* 521 */ + 0x05, /* 522 */ + 0x00, /* 523 */ + 0x45, /* 524 */ + 0x00, /* 525 */ + 0x34, /* 526 */ + 0x00, /* 527 */ + 0x0C, /* 528 */ + 0x00, /* 529 */ + 0x2C, /* 530 */ + 0x00, /* 531 */ + 0x1C, /* 532 */ + 0x00, /* 533 */ + 0x00, /* 534 */ + 0x00, /* 535 */ + 0x3C, /* 536 */ + 0x00, /* 537 */ + 0x02, /* 538 */ + 0x00, /* 539 */ + 0x22, /* 540 */ + 0x00, /* 541 */ + 0x10, /* 542 */ + 0x00, /* 543 */ + 0x12, /* 544 */ + 0x00, /* 545 */ + 0x08, /* 546 */ + 0x00, /* 547 */ + 0x32, /* 548 */ + 0x00, /* 549 */ + 0x0A, /* 550 */ + 0x00, /* 551 */ + 0x2A, /* 552 */ + 0x00, /* 553 */ + 0x1A, /* 554 */ + 0x00, /* 555 */ + 0x3A, /* 556 */ + 0x00, /* 557 */ + 0x06, /* 558 */ + 0x00, /* 559 */ + 0x26, /* 560 */ + 0x00, /* 561 */ + 0x16, /* 562 */ + 0x00, /* 563 */ + 0x36, /* 564 */ + 0x00, /* 565 */ + 0x0E, /* 566 */ + 0x00, /* 567 */ + 0x2E, /* 568 */ + 0x00, /* 569 */ + 0x1E, /* 570 */ + 0x00, /* 571 */ + 0x3E, /* 572 */ + 0x00, /* 573 */ + 0x01, /* 574 */ + 0x00, /* 575 */ + 0xED, /* 576 */ + 0x00, /* 577 */ + 0x18, /* 578 */ + 0x00, /* 579 */ + 0x21, /* 580 */ + 0x00, /* 581 */ + 0x25, /* 582 */ + 0x00, /* 583 */ + 0x65, /* 584 */ + 0x00, /* 585 */ + 0xFF, /* 586 */ + 0x1F /* 587 */ +}; + +static const BYTE HuffLengthLOM[32] = { + 4, /* 0 */ + 2, /* 1 */ + 3, /* 2 */ + 4, /* 3 */ + 3, /* 4 */ + 4, /* 5 */ + 4, /* 6 */ + 5, /* 7 */ + 4, /* 8 */ + 5, /* 9 */ + 5, /* 10 */ + 6, /* 11 */ + 6, /* 12 */ + 7, /* 13 */ + 7, /* 14 */ + 8, /* 15 */ + 7, /* 16 */ + 8, /* 17 */ + 8, /* 18 */ + 9, /* 19 */ + 9, /* 20 */ + 8, /* 21 */ + 9, /* 22 */ + 9, /* 23 */ + 9, /* 24 */ + 9, /* 25 */ + 9, /* 26 */ + 9, /* 27 */ + 9, /* 28 */ + 9, /* 29 */ + 9, /* 30 */ + 9 /* 31 */ +}; + +static const UINT16 HuffCodeLOM[32] = { + 0x0001, /* 0 */ + 0x0000, /* 1 */ + 0x0002, /* 2 */ + 0x0009, /* 3 */ + 0x0006, /* 4 */ + 0x0005, /* 5 */ + 0x000D, /* 6 */ + 0x000B, /* 7 */ + 0x0003, /* 8 */ + 0x001B, /* 9 */ + 0x0007, /* 10 */ + 0x0017, /* 11 */ + 0x0037, /* 12 */ + 0x000F, /* 13 */ + 0x004F, /* 14 */ + 0x006F, /* 15 */ + 0x002F, /* 16 */ + 0x00EF, /* 17 */ + 0x001F, /* 18 */ + 0x005F, /* 19 */ + 0x015F, /* 20 */ + 0x009F, /* 21 */ + 0x00DF, /* 22 */ + 0x01DF, /* 23 */ + 0x003F, /* 24 */ + 0x013F, /* 25 */ + 0x00BF, /* 26 */ + 0x01BF, /* 27 */ + 0x007F, /* 28 */ + 0x017F, /* 29 */ + 0x00FF, /* 30 */ + 0x01FF /* 31 */ +}; + +static const UINT32 CopyOffsetBitsLUT[32] = { + 0x0, /* 0 */ + 0x0, /* 1 */ + 0x0, /* 2 */ + 0x0, /* 3 */ + 0x1, /* 4 */ + 0x1, /* 5 */ + 0x2, /* 6 */ + 0x2, /* 7 */ + 0x3, /* 8 */ + 0x3, /* 9 */ + 0x4, /* 10 */ + 0x4, /* 11 */ + 0x5, /* 12 */ + 0x5, /* 13 */ + 0x6, /* 14 */ + 0x6, /* 15 */ + 0x7, /* 16 */ + 0x7, /* 17 */ + 0x8, /* 18 */ + 0x8, /* 19 */ + 0x9, /* 20 */ + 0x9, /* 21 */ + 0xA, /* 22 */ + 0xA, /* 23 */ + 0xB, /* 24 */ + 0xB, /* 25 */ + 0xC, /* 26 */ + 0xC, /* 27 */ + 0xD, /* 28 */ + 0xD, /* 29 */ + 0xE, /* 30 */ + 0xE /* 31 */ +}; + +static const UINT32 CopyOffsetBaseLUT[32] = { + 0x1, /* 0 */ + 0x2, /* 1 */ + 0x3, /* 2 */ + 0x4, /* 3 */ + 0x5, /* 4 */ + 0x7, /* 5 */ + 0x9, /* 6 */ + 0xD, /* 7 */ + 0x11, /* 8 */ + 0x19, /* 9 */ + 0x21, /* 10 */ + 0x31, /* 11 */ + 0x41, /* 12 */ + 0x61, /* 13 */ + 0x81, /* 14 */ + 0xC1, /* 15 */ + 0x101, /* 16 */ + 0x181, /* 17 */ + 0x201, /* 18 */ + 0x301, /* 19 */ + 0x401, /* 20 */ + 0x601, /* 21 */ + 0x801, /* 22 */ + 0xC01, /* 23 */ + 0x1001, /* 24 */ + 0x1801, /* 25 */ + 0x2001, /* 26 */ + 0x3001, /* 27 */ + 0x4001, /* 28 */ + 0x6001, /* 29 */ + 0x8001, /* 30 */ + 0xC001 /* 31 */ +}; + +static const UINT32 LOMBitsLUT[30] = { + 0x0, /* 0 */ + 0x0, /* 1 */ + 0x0, /* 2 */ + 0x0, /* 3 */ + 0x0, /* 4 */ + 0x0, /* 5 */ + 0x0, /* 6 */ + 0x0, /* 7 */ + 0x1, /* 8 */ + 0x1, /* 9 */ + 0x1, /* 10 */ + 0x1, /* 11 */ + 0x2, /* 12 */ + 0x2, /* 13 */ + 0x2, /* 14 */ + 0x2, /* 15 */ + 0x3, /* 16 */ + 0x3, /* 17 */ + 0x3, /* 18 */ + 0x3, /* 19 */ + 0x4, /* 20 */ + 0x4, /* 21 */ + 0x4, /* 22 */ + 0x4, /* 23 */ + 0x6, /* 24 */ + 0x6, /* 25 */ + 0x8, /* 26 */ + 0x8, /* 27 */ + 0xE, /* 28 */ + 0xE /* 29 */ +}; + +static const UINT32 LOMBaseLUT[30] = { + 0x2, /* 0 */ + 0x3, /* 1 */ + 0x4, /* 2 */ + 0x5, /* 3 */ + 0x6, /* 4 */ + 0x7, /* 5 */ + 0x8, /* 6 */ + 0x9, /* 7 */ + 0xA, /* 8 */ + 0xC, /* 9 */ + 0xE, /* 10 */ + 0x10, /* 11 */ + 0x12, /* 12 */ + 0x16, /* 13 */ + 0x1A, /* 14 */ + 0x1E, /* 15 */ + 0x22, /* 16 */ + 0x2A, /* 17 */ + 0x32, /* 18 */ + 0x3A, /* 19 */ + 0x42, /* 20 */ + 0x52, /* 21 */ + 0x62, /* 22 */ + 0x72, /* 23 */ + 0x82, /* 24 */ + 0xC2, /* 25 */ + 0x102, /* 26 */ + 0x202, /* 27 */ + 0x2, /* 28 */ + 0x2 /* 29 */ +}; + +static INLINE UINT16 get_word(const BYTE* data) +{ + UINT16 tmp = 0; + + WINPR_ASSERT(data); + tmp = *data++; + tmp |= *data << 8; + return tmp; +} + +static INLINE UINT32 get_dword(const BYTE* data) +{ + UINT32 tmp = 0; + WINPR_ASSERT(data); + tmp = *data++; + tmp |= (UINT32)*data++ << 8U; + tmp |= (UINT32)*data++ << 16U; + tmp |= (UINT32)*data++ << 24U; + return tmp; +} + +static INLINE BOOL NCrushFetchBits(const BYTE** SrcPtr, const BYTE** SrcEnd, INT32* nbits, + UINT32* bits) +{ + WINPR_ASSERT(SrcPtr); + WINPR_ASSERT(SrcEnd); + WINPR_ASSERT(nbits); + WINPR_ASSERT(bits); + + if (*nbits < 16) + { + if ((*SrcPtr + 1) >= *SrcEnd) + { + if (*SrcPtr >= *SrcEnd) + { + if (*nbits < 0) + return FALSE; + } + else + { + *bits += *(*SrcPtr)++ << *nbits; + *nbits += 8; + } + } + else + { + UINT16 tmp = *(*SrcPtr)++; + tmp |= (*(*SrcPtr)++) << 8; + *bits += tmp << *nbits; + *nbits += 16; + } + } + + return TRUE; +} + +static INLINE void NCrushWriteStart(UINT32* bits, UINT32* offset, UINT32* accumulator) +{ + WINPR_ASSERT(bits); + WINPR_ASSERT(offset); + WINPR_ASSERT(accumulator); + + *bits = 0; + *offset = 0; + *accumulator = 0; +} + +static INLINE void NCrushWriteBits(BYTE** DstPtr, UINT32* accumulator, UINT32* offset, UINT32 _bits, + UINT32 _nbits) +{ + WINPR_ASSERT(DstPtr); + WINPR_ASSERT(accumulator); + WINPR_ASSERT(offset); + + *accumulator |= _bits << *offset; + *offset += _nbits; + + if (*offset >= 16) + { + *(*DstPtr)++ = (*accumulator & 0xFF); + *(*DstPtr)++ = ((*accumulator >> 8) & 0xFF); + *accumulator >>= 16; + *offset -= 16; + } +} + +static INLINE void NCrushWriteFinish(BYTE** DstPtr, UINT32 accumulator) +{ + WINPR_ASSERT(DstPtr); + + *(*DstPtr)++ = accumulator & 0xFF; + *(*DstPtr)++ = (accumulator >> 8) & 0xFF; +} + +int ncrush_decompress(NCRUSH_CONTEXT* ncrush, const BYTE* pSrcData, UINT32 SrcSize, + const BYTE** ppDstData, UINT32* pDstSize, UINT32 flags) +{ + UINT32 index = 0; + BYTE Literal = 0; + UINT32 IndexLEC = 0; + UINT32 BitLength = 0; + UINT32 CopyOffset = 0; + UINT32 CopyLength = 0; + UINT32 OldCopyOffset = 0; + const BYTE* CopyOffsetPtr = NULL; + UINT32 LengthOfMatch = 0; + UINT32 CopyOffsetIndex = 0; + UINT32 OffsetCacheIndex = 0; + UINT32 CopyOffsetBits = 0; + UINT32 CopyOffsetBase = 0; + UINT32 LengthOfMatchBits = 0; + UINT32 LengthOfMatchBase = 0; + + WINPR_ASSERT(ncrush); + WINPR_ASSERT(pSrcData); + WINPR_ASSERT(ppDstData); + WINPR_ASSERT(pDstSize); + + if (ncrush->HistoryEndOffset != 65535) + return -1001; + + BYTE* HistoryBuffer = ncrush->HistoryBuffer; + const BYTE* HistoryBufferEnd = &HistoryBuffer[ncrush->HistoryEndOffset]; + + if (flags & PACKET_AT_FRONT) + { + if ((ncrush->HistoryPtr - 32768) <= HistoryBuffer) + return -1002; + + MoveMemory(HistoryBuffer, (ncrush->HistoryPtr - 32768), 32768); + ncrush->HistoryPtr = &(HistoryBuffer[32768]); + ZeroMemory(&HistoryBuffer[32768], 32768); + } + + if (flags & PACKET_FLUSHED) + { + ncrush->HistoryPtr = HistoryBuffer; + ZeroMemory(HistoryBuffer, sizeof(ncrush->HistoryBuffer)); + ZeroMemory(&(ncrush->OffsetCache), sizeof(ncrush->OffsetCache)); + } + + BYTE* HistoryPtr = ncrush->HistoryPtr; + + if (!(flags & PACKET_COMPRESSED)) + { + *ppDstData = pSrcData; + *pDstSize = SrcSize; + return 1; + } + + const BYTE* SrcEnd = &pSrcData[SrcSize]; + const BYTE* SrcPtr = pSrcData + 4; + + INT32 nbits = 32; + UINT32 bits = get_dword(pSrcData); + while (1) + { + while (1) + { + const UINT16 Mask = get_word(&HuffTableMask[29]); + const UINT32 MaskedBits = bits & Mask; + if (MaskedBits >= ARRAYSIZE(HuffTableLEC)) + return -1; + IndexLEC = HuffTableLEC[MaskedBits] & 0xFFF; + BitLength = HuffTableLEC[MaskedBits] >> 12; + bits >>= BitLength; + nbits -= BitLength; + + if (!NCrushFetchBits(&SrcPtr, &SrcEnd, &nbits, &bits)) + return -1; + + if (IndexLEC >= 256) + break; + + if (HistoryPtr >= HistoryBufferEnd) + { + WLog_ERR(TAG, "ncrush_decompress error: HistoryPtr (%p) >= HistoryBufferEnd (%p)", + (const void*)HistoryPtr, (const void*)HistoryBufferEnd); + return -1003; + } + + Literal = (HuffTableLEC[MaskedBits] & 0xFF); + *HistoryPtr++ = Literal; + } + + if (IndexLEC == 256) + break; /* EOS */ + + CopyOffsetIndex = IndexLEC - 257; + + if (CopyOffsetIndex >= 32) + { + OffsetCacheIndex = IndexLEC - 289; + + if (OffsetCacheIndex >= 4) + return -1004; + + { + CopyOffset = ncrush->OffsetCache[OffsetCacheIndex]; + const UINT16 Mask = get_word(&HuffTableMask[21]); + const UINT32 MaskedBits = bits & Mask; + if (MaskedBits > ARRAYSIZE(HuffTableLOM)) + return -1; + LengthOfMatch = HuffTableLOM[MaskedBits] & 0xFFF; + BitLength = HuffTableLOM[MaskedBits] >> 12; + bits >>= BitLength; + nbits -= BitLength; + } + + if (!NCrushFetchBits(&SrcPtr, &SrcEnd, &nbits, &bits)) + return -1; + + if (LengthOfMatch >= ARRAYSIZE(LOMBitsLUT)) + return -1; + + LengthOfMatchBits = LOMBitsLUT[LengthOfMatch]; + + if (LengthOfMatch >= ARRAYSIZE(LOMBaseLUT)) + return -1; + LengthOfMatchBase = LOMBaseLUT[LengthOfMatch]; + + if (LengthOfMatchBits) + { + const size_t idx = (2ull * LengthOfMatchBits) + 3ull; + if (idx >= ARRAYSIZE(HuffTableMask)) + return -1; + + const UINT16 Mask = get_word(&HuffTableMask[idx]); + const UINT32 MaskedBits = bits & Mask; + bits >>= LengthOfMatchBits; + nbits -= LengthOfMatchBits; + LengthOfMatchBase += MaskedBits; + + if (!NCrushFetchBits(&SrcPtr, &SrcEnd, &nbits, &bits)) + return -1; + } + + OldCopyOffset = ncrush->OffsetCache[OffsetCacheIndex]; + ncrush->OffsetCache[OffsetCacheIndex] = ncrush->OffsetCache[0]; + ncrush->OffsetCache[0] = OldCopyOffset; + } + else + { + if (CopyOffsetIndex >= ARRAYSIZE(CopyOffsetBitsLUT)) + return -1; + + CopyOffsetBits = CopyOffsetBitsLUT[CopyOffsetIndex]; + + if (CopyOffsetIndex >= ARRAYSIZE(CopyOffsetBaseLUT)) + return -1; + CopyOffsetBase = CopyOffsetBaseLUT[CopyOffsetIndex]; + CopyOffset = CopyOffsetBase - 1; + + if (CopyOffsetBits) + { + const size_t idx = (2ull * CopyOffsetBits) + 3ull; + if (idx >= ARRAYSIZE(HuffTableMask)) + return -1; + + { + const UINT16 Mask = get_word(&HuffTableMask[idx]); + const UINT32 MaskedBits = bits & Mask; + const UINT32 tmp = CopyOffsetBase + MaskedBits; + if (tmp < 1) + return -1; + CopyOffset = tmp - 1; + } + bits >>= CopyOffsetBits; + nbits -= CopyOffsetBits; + + if (!NCrushFetchBits(&SrcPtr, &SrcEnd, &nbits, &bits)) + return -1; + } + { + const UINT16 Mask = get_word(&HuffTableMask[21]); + const UINT32 MaskedBits = bits & Mask; + if (MaskedBits >= ARRAYSIZE(HuffTableLOM)) + return -1; + + LengthOfMatch = HuffTableLOM[MaskedBits] & 0xFFF; + BitLength = HuffTableLOM[MaskedBits] >> 12; + bits >>= BitLength; + nbits -= BitLength; + } + if (!NCrushFetchBits(&SrcPtr, &SrcEnd, &nbits, &bits)) + return -1; + + if (LengthOfMatch >= ARRAYSIZE(LOMBitsLUT)) + return -1; + + LengthOfMatchBits = LOMBitsLUT[LengthOfMatch]; + + if (LengthOfMatch >= ARRAYSIZE(LOMBaseLUT)) + return -1; + LengthOfMatchBase = LOMBaseLUT[LengthOfMatch]; + + if (LengthOfMatchBits) + { + const size_t idx = (2ull * LengthOfMatchBits) + 3ull; + if (idx >= ARRAYSIZE(HuffTableMask)) + return -1; + + const UINT16 Mask = get_word(&HuffTableMask[idx]); + const UINT32 MaskedBits = bits & Mask; + bits >>= LengthOfMatchBits; + nbits -= LengthOfMatchBits; + LengthOfMatchBase += MaskedBits; + + if (!NCrushFetchBits(&SrcPtr, &SrcEnd, &nbits, &bits)) + return -1; + } + + ncrush->OffsetCache[3] = ncrush->OffsetCache[2]; + ncrush->OffsetCache[2] = ncrush->OffsetCache[1]; + ncrush->OffsetCache[1] = ncrush->OffsetCache[0]; + ncrush->OffsetCache[0] = CopyOffset; + } + + CopyOffsetPtr = &HistoryBuffer[(HistoryPtr - HistoryBuffer - CopyOffset) & 0xFFFF]; + LengthOfMatch = LengthOfMatchBase; + + if (LengthOfMatch < 2) + return -1005; + + if ((CopyOffsetPtr >= (HistoryBufferEnd - LengthOfMatch)) || + (HistoryPtr >= (HistoryBufferEnd - LengthOfMatch))) + return -1006; + + CopyOffsetPtr = HistoryPtr - CopyOffset; + index = 0; + CopyLength = (LengthOfMatch > CopyOffset) ? CopyOffset : LengthOfMatch; + + if (CopyOffsetPtr >= HistoryBuffer) + { + while (CopyLength > 0) + { + *HistoryPtr++ = *CopyOffsetPtr++; + CopyLength--; + } + + while (LengthOfMatch > CopyOffset) + { + index = ((index >= CopyOffset)) ? 0 : index; + *HistoryPtr++ = *(CopyOffsetPtr + index++); + LengthOfMatch--; + } + } + else + { + CopyOffsetPtr = HistoryBufferEnd - (CopyOffset - (HistoryPtr - HistoryBuffer)); + CopyOffsetPtr++; + + while (CopyLength && (CopyOffsetPtr <= HistoryBufferEnd)) + { + *HistoryPtr++ = *CopyOffsetPtr++; + CopyLength--; + } + + CopyOffsetPtr = HistoryBuffer; + + while (LengthOfMatch > CopyOffset) + { + index = ((index >= CopyOffset)) ? 0 : index; + *HistoryPtr++ = *(CopyOffsetPtr + index++); + LengthOfMatch--; + } + } + + LengthOfMatch = LengthOfMatchBase; + + if (LengthOfMatch == 2) + continue; + } + + if (IndexLEC != 256) + return -1; + + if (ncrush->HistoryBufferFence != 0xABABABAB) + { + WLog_ERR(TAG, "NCrushDecompress: history buffer fence was overwritten, potential buffer " + "overflow detected!"); + return -1007; + } + + const intptr_t hsize = HistoryPtr - ncrush->HistoryPtr; + WINPR_ASSERT(hsize >= 0); + WINPR_ASSERT(hsize <= UINT32_MAX); + *pDstSize = (UINT32)hsize; + *ppDstData = ncrush->HistoryPtr; + ncrush->HistoryPtr = HistoryPtr; + return 1; +} + +static int ncrush_hash_table_add(NCRUSH_CONTEXT* ncrush, const BYTE* pSrcData, UINT32 SrcSize, + UINT32 HistoryOffset) +{ + const BYTE* SrcPtr = pSrcData; + UINT32 Hash = 0; + UINT32 Offset = HistoryOffset; + UINT32 EndOffset = Offset + SrcSize - 8; + + WINPR_ASSERT(ncrush); + WINPR_ASSERT(pSrcData); + WINPR_ASSERT(Offset + SrcSize >= 8); + + while (Offset < EndOffset) + { + Hash = ncrush->HashTable[get_word(SrcPtr)]; + ncrush->HashTable[get_word(SrcPtr)] = Offset; + ncrush->MatchTable[Offset] = Hash; + SrcPtr++; + Offset++; + } + + return 1; +} + +static int ncrush_find_match_length(const BYTE* Ptr1, const BYTE* Ptr2, BYTE* HistoryPtr) +{ + BYTE val1 = 0; + BYTE val2 = 0; + const BYTE* Ptr = Ptr1; + + WINPR_ASSERT(Ptr1); + WINPR_ASSERT(Ptr2); + WINPR_ASSERT(HistoryPtr); + + do + { + if (Ptr1 > HistoryPtr) + break; + + val1 = *Ptr1++; + val2 = *Ptr2++; + } while (val1 == val2); + + const intptr_t psize = Ptr1 - (Ptr + 1); + WINPR_ASSERT(psize <= INT_MAX); + WINPR_ASSERT(psize >= -INT_MAX); + return (int)psize; +} + +static int ncrush_find_best_match(NCRUSH_CONTEXT* ncrush, UINT16 HistoryOffset, + UINT32* pMatchOffset) +{ + int Length = 0; + int MatchLength = 0; + BYTE* MatchPtr = NULL; + UINT16 Offset = 0; + UINT16 NextOffset = 0; + UINT16 MatchOffset = 0; + BYTE* HistoryBuffer = NULL; + + WINPR_ASSERT(ncrush); + WINPR_ASSERT(pMatchOffset); + + if (!ncrush->MatchTable[HistoryOffset]) + return -1; + + MatchLength = 2; + Offset = HistoryOffset; + HistoryBuffer = (BYTE*)ncrush->HistoryBuffer; + ncrush->MatchTable[0] = HistoryOffset; + MatchOffset = ncrush->MatchTable[HistoryOffset]; + NextOffset = ncrush->MatchTable[Offset]; + MatchPtr = &HistoryBuffer[MatchLength]; + + for (int i = 0; i < 4; i++) + { + int j = -1; + + if (j < 0) + { + Offset = ncrush->MatchTable[NextOffset]; + + if (MatchPtr[NextOffset] == HistoryBuffer[HistoryOffset + MatchLength]) + j = 0; + } + + if (j < 0) + { + NextOffset = ncrush->MatchTable[Offset]; + + if (MatchPtr[Offset] == HistoryBuffer[HistoryOffset + MatchLength]) + j = 1; + } + + if (j < 0) + { + Offset = ncrush->MatchTable[NextOffset]; + + if (MatchPtr[NextOffset] == HistoryBuffer[HistoryOffset + MatchLength]) + j = 2; + } + + if (j < 0) + { + NextOffset = ncrush->MatchTable[Offset]; + + if (MatchPtr[Offset] == HistoryBuffer[HistoryOffset + MatchLength]) + j = 3; + } + + if (j < 0) + { + Offset = ncrush->MatchTable[NextOffset]; + + if (MatchPtr[NextOffset] == HistoryBuffer[HistoryOffset + MatchLength]) + j = 4; + } + + if (j < 0) + { + NextOffset = ncrush->MatchTable[Offset]; + + if (MatchPtr[Offset] == HistoryBuffer[HistoryOffset + MatchLength]) + j = 5; + } + + if (j >= 0) + { + if ((j % 2) == 0) + Offset = NextOffset; + + if ((Offset != HistoryOffset) && Offset) + { + Length = ncrush_find_match_length(&HistoryBuffer[HistoryOffset + 2], + &HistoryBuffer[Offset + 2], ncrush->HistoryPtr) + + 2; + + if (Length < 2) + return -1; + + if (Length > 16) + break; + + if (Length > MatchLength) + { + MatchLength = Length; + MatchOffset = Offset; + } + + if ((Length <= MatchLength) || + (&HistoryBuffer[HistoryOffset + 2] < ncrush->HistoryPtr)) + { + NextOffset = ncrush->MatchTable[Offset]; + MatchPtr = &HistoryBuffer[MatchLength]; + continue; + } + } + + break; + } + } + + ncrush->MatchTable[0] = 0; + *pMatchOffset = MatchOffset; + return MatchLength; +} + +static int ncrush_move_encoder_windows(NCRUSH_CONTEXT* ncrush, BYTE* HistoryPtr) +{ + int NewHash = 0; + int NewMatch = 0; + UINT32 HistoryOffset = 0; + + WINPR_ASSERT(ncrush); + WINPR_ASSERT(HistoryPtr); + + if (HistoryPtr < &ncrush->HistoryBuffer[32768]) + return -1; + + if (HistoryPtr > &ncrush->HistoryBuffer[65536]) + return -1; + + MoveMemory(ncrush->HistoryBuffer, HistoryPtr - 32768, 32768); + const intptr_t hsize = HistoryPtr - 32768 - ncrush->HistoryBuffer; + WINPR_ASSERT(hsize <= UINT32_MAX); + WINPR_ASSERT(hsize >= 0); + HistoryOffset = (UINT32)hsize; + + for (int i = 0; i < 65536; i += 4) + { + NewHash = ncrush->HashTable[i + 0] - HistoryOffset; + ncrush->HashTable[i + 0] = (NewHash <= 0) ? 0 : NewHash; + NewHash = ncrush->HashTable[i + 1] - HistoryOffset; + ncrush->HashTable[i + 1] = (NewHash <= 0) ? 0 : NewHash; + NewHash = ncrush->HashTable[i + 2] - HistoryOffset; + ncrush->HashTable[i + 2] = (NewHash <= 0) ? 0 : NewHash; + NewHash = ncrush->HashTable[i + 3] - HistoryOffset; + ncrush->HashTable[i + 3] = (NewHash <= 0) ? 0 : NewHash; + } + + for (int j = 0; j < 32768; j += 4) + { + NewMatch = ncrush->MatchTable[HistoryOffset + j + 0] - HistoryOffset; + ncrush->MatchTable[j + 0] = (NewMatch <= 0) ? 0 : NewMatch; + NewMatch = ncrush->MatchTable[HistoryOffset + j + 1] - HistoryOffset; + ncrush->MatchTable[j + 1] = (NewMatch <= 0) ? 0 : NewMatch; + NewMatch = ncrush->MatchTable[HistoryOffset + j + 2] - HistoryOffset; + ncrush->MatchTable[j + 2] = (NewMatch <= 0) ? 0 : NewMatch; + NewMatch = ncrush->MatchTable[HistoryOffset + j + 3] - HistoryOffset; + ncrush->MatchTable[j + 3] = (NewMatch <= 0) ? 0 : NewMatch; + } + + ZeroMemory(&ncrush->MatchTable[32768], 65536); + return 1; +} + +int ncrush_compress(NCRUSH_CONTEXT* ncrush, const BYTE* pSrcData, UINT32 SrcSize, BYTE* pDstBuffer, + const BYTE** ppDstData, UINT32* pDstSize, UINT32* pFlags) +{ + BYTE Literal = 0; + const BYTE* SrcPtr = NULL; + BYTE* DstPtr = NULL; + UINT32 bits = 0; + UINT32 offset = 0; + UINT16 Mask = 0; + UINT32 MaskedBits = 0; + UINT32 accumulator = 0; + const BYTE* SrcEndPtr = NULL; + BYTE* DstEndPtr = NULL; + BYTE* HistoryPtr = NULL; + BYTE* pDstData = NULL; + UINT32 DstSize = 0; + BOOL PacketAtFront = FALSE; + BOOL PacketFlushed = FALSE; + UINT32 MatchLength = 0; + UINT32 IndexLEC = 0; + UINT32 IndexLOM = 0; + UINT32 IndexCO = 0; + UINT32 CodeLEC = 0; + UINT32 BitLength = 0; + UINT32 CopyOffset = 0; + UINT32 MatchOffset = 0; + UINT32 OldCopyOffset = 0; + UINT32* OffsetCache = NULL; + UINT32 OffsetCacheIndex = 0; + UINT32 HistoryOffset = 0; + BYTE* HistoryBuffer = NULL; + UINT32 HistoryBufferSize = 0; + BYTE* HistoryBufferEndPtr = NULL; + UINT32 CopyOffsetIndex = 0; + UINT32 CopyOffsetBits = 0; + UINT32 CompressionLevel = 2; + + WINPR_ASSERT(ncrush); + + WINPR_ASSERT(ncrush); + WINPR_ASSERT(pSrcData); + WINPR_ASSERT(pDstBuffer); + WINPR_ASSERT(ppDstData); + WINPR_ASSERT(pDstSize); + WINPR_ASSERT(pFlags); + + HistoryBuffer = ncrush->HistoryBuffer; + *pFlags = 0; + + if ((SrcSize + ncrush->HistoryOffset) >= 65529) + { + if (ncrush->HistoryOffset == (ncrush->HistoryBufferSize + 1)) + { + ncrush->HistoryOffset = 0; + ncrush->HistoryPtr = HistoryBuffer; + PacketFlushed = TRUE; + } + else + { + if (ncrush_move_encoder_windows(ncrush, &(HistoryBuffer[ncrush->HistoryOffset])) < 0) + return -1001; + + ncrush->HistoryPtr = &HistoryBuffer[32768]; + ncrush->HistoryOffset = 32768; + PacketAtFront = TRUE; + } + } + else + { + *pFlags = 0; + } + + pDstData = pDstBuffer; + *ppDstData = pDstBuffer; + + if (!pDstData) + return -1002; + + DstSize = *pDstSize; + + if (DstSize < SrcSize) + return -1003; + + DstSize = SrcSize; + NCrushWriteStart(&bits, &offset, &accumulator); + DstPtr = pDstData; + SrcPtr = pSrcData; + SrcEndPtr = &pSrcData[SrcSize]; + DstEndPtr = &pDstData[DstSize - 1]; + OffsetCache = ncrush->OffsetCache; + HistoryPtr = &HistoryBuffer[ncrush->HistoryOffset]; + HistoryBufferEndPtr = &HistoryBuffer[65536]; + HistoryBufferSize = ncrush->HistoryBufferSize; + CopyOffset = 0; + MatchOffset = 0; + const intptr_t thsize = HistoryPtr - HistoryBuffer; + WINPR_ASSERT(thsize >= 0); + WINPR_ASSERT(thsize <= UINT32_MAX); + ncrush_hash_table_add(ncrush, pSrcData, SrcSize, (UINT32)thsize); + CopyMemory(HistoryPtr, pSrcData, SrcSize); + ncrush->HistoryPtr = &HistoryPtr[SrcSize]; + + while (SrcPtr < (SrcEndPtr - 2)) + { + MatchLength = 0; + const intptr_t hsize = HistoryPtr - HistoryBuffer; + WINPR_ASSERT(hsize <= UINT32_MAX); + WINPR_ASSERT(hsize >= 0); + HistoryOffset = (UINT32)hsize; + + if (ncrush->HistoryPtr && (HistoryPtr > ncrush->HistoryPtr)) + return -1; + + if (HistoryOffset >= 65536) + return -1004; + + if (ncrush->MatchTable[HistoryOffset]) + { + int rc = 0; + + MatchOffset = 0; + rc = ncrush_find_best_match(ncrush, HistoryOffset, &MatchOffset); + + if (rc < 0) + return -1005; + MatchLength = (UINT32)rc; + } + + if (MatchLength) + CopyOffset = (HistoryBufferSize - 1) & (HistoryPtr - &HistoryBuffer[MatchOffset]); + + if ((MatchLength == 2) && (CopyOffset >= 64)) + MatchLength = 0; + + if (MatchLength == 0) + { + /* Literal */ + Literal = *SrcPtr++; + HistoryPtr++; + + if ((DstPtr + 2) > DstEndPtr) /* PACKET_FLUSH #1 */ + { + ncrush_context_reset(ncrush, TRUE); + *pFlags = PACKET_FLUSHED; + *pFlags |= CompressionLevel; + *ppDstData = pSrcData; + *pDstSize = SrcSize; + return 1; + } + + IndexLEC = Literal; + if (IndexLEC >= ARRAYSIZE(HuffLengthLEC)) + return -1; + BitLength = HuffLengthLEC[IndexLEC]; + + if (IndexLEC * 2ull >= ARRAYSIZE(HuffCodeLEC)) + return -1; + CodeLEC = get_word(&HuffCodeLEC[IndexLEC * 2]); + + if (BitLength > 15) + return -1006; + + NCrushWriteBits(&DstPtr, &accumulator, &offset, CodeLEC, BitLength); + } + else + { + HistoryPtr += MatchLength; + SrcPtr += MatchLength; + + if (!MatchLength) + return -1007; + + if ((DstPtr + 8) > DstEndPtr) /* PACKET_FLUSH #2 */ + { + ncrush_context_reset(ncrush, TRUE); + *pFlags = PACKET_FLUSHED; + *pFlags |= CompressionLevel; + *ppDstData = pSrcData; + *pDstSize = SrcSize; + return 1; + } + + OffsetCacheIndex = 5; + + if ((CopyOffset == OffsetCache[0]) || (CopyOffset == OffsetCache[1]) || + (CopyOffset == OffsetCache[2]) || (CopyOffset == OffsetCache[3])) + { + if (CopyOffset == OffsetCache[3]) + { + OldCopyOffset = OffsetCache[3]; + OffsetCache[3] = OffsetCache[0]; + OffsetCache[0] = OldCopyOffset; + OffsetCacheIndex = 3; + } + else + { + if (CopyOffset == OffsetCache[2]) + { + OldCopyOffset = OffsetCache[2]; + OffsetCache[2] = OffsetCache[0]; + OffsetCache[0] = OldCopyOffset; + OffsetCacheIndex = 2; + } + else + { + if (CopyOffset == OffsetCache[1]) + { + OldCopyOffset = OffsetCache[1]; + OffsetCache[1] = OffsetCache[0]; + OffsetCache[0] = OldCopyOffset; + OffsetCacheIndex = 1; + } + else + { + if (CopyOffset == OffsetCache[0]) + { + OffsetCacheIndex = 0; + } + } + } + } + } + else + { + OffsetCache[3] = OffsetCache[2]; + OffsetCache[2] = OffsetCache[1]; + OffsetCache[1] = OffsetCache[0]; + OffsetCache[0] = CopyOffset; + } + + if (OffsetCacheIndex >= 4) + { + /* CopyOffset not in OffsetCache */ + if (CopyOffset >= 256) + bits = (CopyOffset >> 7) + 256; + else + bits = CopyOffset; + + CopyOffsetIndex = ncrush->HuffTableCopyOffset[bits + 2]; + + if (CopyOffsetIndex >= ARRAYSIZE(CopyOffsetBitsLUT)) + return -1; + + CopyOffsetBits = CopyOffsetBitsLUT[CopyOffsetIndex]; + IndexLEC = 257 + CopyOffsetIndex; + if (IndexLEC >= ARRAYSIZE(HuffLengthLEC)) + return -1; + BitLength = HuffLengthLEC[IndexLEC]; + + if (IndexLEC * 2ull >= ARRAYSIZE(HuffCodeLEC)) + return -1; + CodeLEC = get_word(&HuffCodeLEC[IndexLEC * 2]); + + if (BitLength > 15) + return -1008; + + if (CopyOffsetBits > 18) + return -1009; + + NCrushWriteBits(&DstPtr, &accumulator, &offset, CodeLEC, BitLength); + Mask = ((1 << CopyOffsetBits) - 1); + MaskedBits = CopyOffset & Mask; + NCrushWriteBits(&DstPtr, &accumulator, &offset, MaskedBits, CopyOffsetBits); + + if ((MatchLength - 2) >= 768) + IndexCO = 28; + else + IndexCO = ncrush->HuffTableLOM[MatchLength]; + + if (IndexCO >= ARRAYSIZE(HuffLengthLOM)) + return -1; + BitLength = HuffLengthLOM[IndexCO]; + + if (IndexCO >= ARRAYSIZE(LOMBitsLUT)) + return -1; + IndexLOM = LOMBitsLUT[IndexCO]; + + if (IndexCO >= ARRAYSIZE(HuffCodeLOM)) + return -1; + NCrushWriteBits(&DstPtr, &accumulator, &offset, HuffCodeLOM[IndexCO], BitLength); + Mask = ((1 << IndexLOM) - 1); + MaskedBits = (MatchLength - 2) & Mask; + NCrushWriteBits(&DstPtr, &accumulator, &offset, MaskedBits, IndexLOM); + + if (IndexCO >= ARRAYSIZE(LOMBaseLUT)) + return -1; + if ((MaskedBits + LOMBaseLUT[IndexCO]) != MatchLength) + return -1010; + } + else + { + /* CopyOffset in OffsetCache */ + IndexLEC = 289 + OffsetCacheIndex; + if (IndexLEC >= ARRAYSIZE(HuffLengthLEC)) + return -1; + BitLength = HuffLengthLEC[IndexLEC]; + if (IndexLEC * 2ull >= ARRAYSIZE(HuffCodeLEC)) + return -1; + CodeLEC = get_word(&HuffCodeLEC[IndexLEC * 2]); + + if (BitLength >= 15) + return -1011; + + NCrushWriteBits(&DstPtr, &accumulator, &offset, CodeLEC, BitLength); + + if ((MatchLength - 2) >= 768) + IndexCO = 28; + else + IndexCO = ncrush->HuffTableLOM[MatchLength]; + + if (IndexCO >= ARRAYSIZE(HuffLengthLOM)) + return -1; + + BitLength = HuffLengthLOM[IndexCO]; + + if (IndexCO >= ARRAYSIZE(LOMBitsLUT)) + return -1; + IndexLOM = LOMBitsLUT[IndexCO]; + + if (IndexCO >= ARRAYSIZE(HuffCodeLOM)) + return -1; + NCrushWriteBits(&DstPtr, &accumulator, &offset, HuffCodeLOM[IndexCO], BitLength); + Mask = ((1 << IndexLOM) - 1); + MaskedBits = (MatchLength - 2) & Mask; + NCrushWriteBits(&DstPtr, &accumulator, &offset, MaskedBits, IndexLOM); + + if (IndexCO >= ARRAYSIZE(LOMBaseLUT)) + return -1; + if ((MaskedBits + LOMBaseLUT[IndexCO]) != MatchLength) + return -1012; + } + } + + if (HistoryPtr >= HistoryBufferEndPtr) + return -1013; + } + + while (SrcPtr < SrcEndPtr) + { + if ((DstPtr + 2) > DstEndPtr) /* PACKET_FLUSH #3 */ + { + ncrush_context_reset(ncrush, TRUE); + *pFlags = PACKET_FLUSHED; + *pFlags |= CompressionLevel; + *ppDstData = pSrcData; + *pDstSize = SrcSize; + return 1; + } + + Literal = *SrcPtr++; + HistoryPtr++; + IndexLEC = Literal; + if (IndexLEC >= ARRAYSIZE(HuffLengthLEC)) + return -1; + if (IndexLEC * 2ull >= ARRAYSIZE(HuffCodeLEC)) + return -1; + BitLength = HuffLengthLEC[IndexLEC]; + CodeLEC = get_word(&HuffCodeLEC[IndexLEC * 2]); + + if (BitLength > 15) + return -1014; + + NCrushWriteBits(&DstPtr, &accumulator, &offset, CodeLEC, BitLength); + } + + if ((DstPtr + 4) >= DstEndPtr) /* PACKET_FLUSH #4 */ + { + ncrush_context_reset(ncrush, TRUE); + *pFlags = PACKET_FLUSHED; + *pFlags |= CompressionLevel; + *ppDstData = pSrcData; + *pDstSize = SrcSize; + return 1; + } + + IndexLEC = 256; + BitLength = HuffLengthLEC[IndexLEC]; + + if (BitLength > 15) + return -1015; + + bits = get_word(&HuffCodeLEC[IndexLEC * 2]); + NCrushWriteBits(&DstPtr, &accumulator, &offset, bits, BitLength); + NCrushWriteFinish(&DstPtr, accumulator); + const intptr_t dsize = DstPtr - pDstData; + WINPR_ASSERT(dsize <= UINT32_MAX); + WINPR_ASSERT(dsize >= 0); + *pDstSize = (UINT32)dsize; + + if (*pDstSize > SrcSize) + return -1016; + + *pFlags |= PACKET_COMPRESSED; + *pFlags |= CompressionLevel; + + if (PacketAtFront) + *pFlags |= PACKET_AT_FRONT; + + if (PacketFlushed) + *pFlags |= PACKET_FLUSHED; + + ncrush->HistoryOffset = HistoryPtr - HistoryBuffer; + + if (ncrush->HistoryOffset >= ncrush->HistoryBufferSize) + return -1; + + return 1; +} + +static int ncrush_generate_tables(NCRUSH_CONTEXT* context) +{ + WINPR_ASSERT(context); + WINPR_ASSERT(28 < ARRAYSIZE(LOMBitsLUT)); + + UINT32 k = 0; + for (int i = 0; i < 28; i++) + { + for (int j = 0; j < 1 << LOMBitsLUT[i]; j++) + { + size_t l = (k++) + 2ull; + context->HuffTableLOM[l] = (int)i; + } + } + + for (UINT32 k = 2; k < 4096; k++) + { + size_t i = 28; + if ((k - 2) < 768) + i = context->HuffTableLOM[k]; + + if (i >= ARRAYSIZE(LOMBitsLUT)) + return -1; + if (i >= ARRAYSIZE(LOMBaseLUT)) + return -1; + + if (((((1 << LOMBitsLUT[i]) - 1) & (k - 2)) + LOMBaseLUT[i]) != k) + return -1; + } + + k = 0; + + for (int i = 0; i < 16; i++) + { + for (int j = 0; j < 1 << CopyOffsetBitsLUT[i]; j++) + { + size_t l = k++ + 2ull; + context->HuffTableCopyOffset[l] = i; + } + } + + k /= 128; + + for (int i = 16; i < 32; i++) + { + for (int j = 0; j < 1 << (CopyOffsetBitsLUT[i] - 7); j++) + { + size_t l = k++ + 2 + 256ull; + context->HuffTableCopyOffset[l] = i; + } + } + + if ((k + 256) > 1024) + return -1; + + return 1; +} + +void ncrush_context_reset(NCRUSH_CONTEXT* ncrush, BOOL flush) +{ + WINPR_ASSERT(ncrush); + + ZeroMemory(&(ncrush->HistoryBuffer), sizeof(ncrush->HistoryBuffer)); + ZeroMemory(&(ncrush->OffsetCache), sizeof(ncrush->OffsetCache)); + ZeroMemory(&(ncrush->MatchTable), sizeof(ncrush->MatchTable)); + ZeroMemory(&(ncrush->HashTable), sizeof(ncrush->HashTable)); + + if (flush) + ncrush->HistoryOffset = ncrush->HistoryBufferSize + 1; + else + ncrush->HistoryOffset = 0; + + ncrush->HistoryPtr = &(ncrush->HistoryBuffer[ncrush->HistoryOffset]); +} + +NCRUSH_CONTEXT* ncrush_context_new(BOOL Compressor) +{ + NCRUSH_CONTEXT* ncrush = (NCRUSH_CONTEXT*)calloc(1, sizeof(NCRUSH_CONTEXT)); + + if (!ncrush) + goto fail; + + ncrush->Compressor = Compressor; + ncrush->HistoryBufferSize = 65536; + ncrush->HistoryEndOffset = ncrush->HistoryBufferSize - 1; + ncrush->HistoryBufferFence = 0xABABABAB; + ncrush->HistoryOffset = 0; + ncrush->HistoryPtr = &(ncrush->HistoryBuffer[ncrush->HistoryOffset]); + + if (ncrush_generate_tables(ncrush) < 0) + { + WLog_DBG(TAG, "ncrush_context_new: failed to initialize tables"); + goto fail; + } + + ncrush_context_reset(ncrush, FALSE); + + return ncrush; +fail: + ncrush_context_free(ncrush); + return NULL; +} + +void ncrush_context_free(NCRUSH_CONTEXT* ncrush) +{ + free(ncrush); +} |