From cedfc2f426745ff7538e633f11e935db2f2a1115 Mon Sep 17 00:00:00 2001 From: Nikita Popov Date: Tue, 25 Jul 2017 18:59:44 +0200 Subject: [PATCH] Drop implementation-specific character properties No point in keeping around non-standard character properties if we're not using them and most are not even being populated. --- ext/mbstring/php_unicode.h | 32 +- ext/mbstring/ucgendat/ucgendat.php | 30 +- ext/mbstring/unicode_data.h | 488 ++--------------------------- 3 files changed, 29 insertions(+), 521 deletions(-) diff --git a/ext/mbstring/php_unicode.h b/ext/mbstring/php_unicode.h index 61415216c0..5a4f702051 100644 --- a/ext/mbstring/php_unicode.h +++ b/ext/mbstring/php_unicode.h @@ -74,23 +74,9 @@ #define UC_S 36 /* Segment Separator */ #define UC_WS 37 /* Whitespace */ #define UC_ON 38 /* Other Neutrals */ -/* - * Implementation specific character properties. - */ -#define UC_CM 39 /* Composite */ -#define UC_NB 40 /* Non-Breaking */ -#define UC_SY 41 /* Symmetric */ -#define UC_HD 42 /* Hex Digit */ -#define UC_QM 43 /* Quote Mark */ -#define UC_MR 44 /* Mirroring */ -#define UC_SS 45 /* Space, other */ -#define UC_CP 46 /* Defined */ - -/* - * Added for UnicodeData-2.1.3. - */ -#define UC_PI 47 /* Punctuation, Initial */ -#define UC_PF 48 /* Punctuation, Final */ +#define UC_PI 39 /* Punctuation, Initial */ +#define UC_PF 40 /* Punctuation, Final */ +#define UC_AL 41 /* Arabic Letter */ MBSTRING_API int php_unicode_is_prop(unsigned long code, ...); MBSTRING_API int php_unicode_is_prop1(unsigned long code, int prop); @@ -125,7 +111,6 @@ static inline int php_unicode_is_upper(unsigned long code) { #define php_unicode_is_digit(cc) php_unicode_is_prop1(cc, UC_ND) #define php_unicode_is_alnum(cc) php_unicode_is_prop(cc, UC_LU, UC_LL, UC_LM, UC_LO, UC_LT, UC_ND, -1) #define php_unicode_is_cntrl(cc) php_unicode_is_prop(cc, UC_CC, UC_CF, -1) -#define php_unicode_is_space(cc) php_unicode_is_prop(cc, UC_ZS, UC_SS, -1) #define php_unicode_is_blank(cc) php_unicode_is_prop1(cc, UC_ZS) #define php_unicode_is_punct(cc) php_unicode_is_prop(cc, UC_PD, UC_PS, UC_PE, UC_PO, UC_PI, UC_PF, -1) #define php_unicode_is_graph(cc) php_unicode_is_prop(cc, UC_MN, UC_MC, UC_ME, UC_ND, UC_NL, UC_NO, \ @@ -137,7 +122,6 @@ static inline int php_unicode_is_upper(unsigned long code) { UC_PS, UC_PE, UC_PO, UC_SM, UC_SM, UC_SC, UC_SK, \ UC_SO, UC_ZS, UC_PI, UC_PF, -1) #define php_unicode_is_title(cc) php_unicode_is_prop1(cc, UC_LT) -#define php_unicode_is_xdigit(cc) php_unicode_is_prop1(cc, UC_HD) #define php_unicode_is_isocntrl(cc) php_unicode_is_prop1(cc, UC_CC) #define php_unicode_is_fmtcntrl(cc) php_unicode_is_prop1(cc, UC_CF) @@ -150,13 +134,6 @@ static inline int php_unicode_is_upper(unsigned long code) { #define php_unicode_is_initialpunct(cc) php_unicode_is_prop1(cc, UC_PI) #define php_unicode_is_finalpunct(cc) php_unicode_is_prop1(cc, UC_PF) -#define php_unicode_is_composite(cc) php_unicode_is_prop1(cc, UC_CM) -#define php_unicode_is_hex(cc) php_unicode_is_prop1(cc, UC_HD) -#define php_unicode_is_quote(cc) php_unicode_is_prop1(cc, UC_QM) -#define php_unicode_is_symmetric(cc) php_unicode_is_prop1(cc, UC_SY) -#define php_unicode_is_mirroring(cc) php_unicode_is_prop1(cc, UC_MR) -#define php_unicode_is_nonbreaking(cc) php_unicode_is_prop1(cc, UC_NB) - /* * Directionality macros. */ @@ -190,9 +167,6 @@ static inline int php_unicode_is_upper(unsigned long code) { #define php_unicode_is_identpart(cc) php_unicode_is_prop(cc, UC_LU, UC_LL, UC_LT, UC_LO, UC_NL, \ UC_MN, UC_MC, UC_ND, UC_PC, UC_CF, -1) -#define php_unicode_is_defined(cc) php_unicode_is_prop1(cc, UC_CP) -#define php_unicode_is_undefined(cc) !php_unicode_is_prop1(cc, UC_CP) - /* * Other miscellaneous character property macros. */ diff --git a/ext/mbstring/ucgendat/ucgendat.php b/ext/mbstring/ucgendat/ucgendat.php index badca372ff..7e3b7cf2d6 100644 --- a/ext/mbstring/ucgendat/ucgendat.php +++ b/ext/mbstring/ucgendat/ucgendat.php @@ -73,18 +73,7 @@ class UnicodeData { public function __construct() { /* - * List of properties expected to be found in the Unicode Character Database - * including some implementation specific properties. - * - * The implementation specific properties are: - * Cm = Composed (can be decomposed) - * Nb = Non-breaking - * Sy = Symmetric (has left and right forms) - * Hd = Hex digit - * Qm = Quote marks - * Mr = Mirroring - * Ss = Space, other - * Cp = Defined character + * List of properties expected to be found in the Unicode Character Database. */ $this->propIndexes = array_flip([ "Mn", "Mc", "Me", "Nd", "Nl", "No", @@ -93,9 +82,7 @@ class UnicodeData { "Lo", "Pc", "Pd", "Ps", "Pe", "Po", "Sm", "Sc", "Sk", "So", "L", "R", "EN", "ES", "ET", "AN", "CS", "B", - "S", "WS", "ON", - "Cm", "Nb", "Sy", "Hd", "Qm", "Mr", - "Ss", "Cp", "Pi", "Pf", "AL" + "S", "WS", "ON", "Pi", "Pf", "AL" ]); $this->numProps = count($this->propIndexes); @@ -222,29 +209,16 @@ function parseUnicodeData($input) { $bidiClass = $fields[4]; $data->addPropRange($code, $nextCode, $bidiClass); - // Excluding surrogates and private use area, mark as defined - if ($code !== 0xd800 && $code !== 0xe000 && $code != 0xf0000) { - $data->addPropRange($code, $nextCode, "Cp"); - } - $i++; continue; } - /* Add the code to the defined category. */ - $data->addProp($code, "Cp"); - $generalCategory = $fields[2]; $data->addProp($code, $generalCategory); $bidiClass = $fields[4]; $data->addProp($code, $bidiClass); - $composition = $fields[5]; - if ($composition && $composition[0] != '<') { - $data->addProp($code, "Cm"); - } - $upperCase = intval($fields[12], 16); $lowerCase = intval($fields[13], 16); $titleCase = intval($fields[14], 16); diff --git a/ext/mbstring/unicode_data.h b/ext/mbstring/unicode_data.h index e46e499c41..4303ad6f18 100644 --- a/ext/mbstring/unicode_data.h +++ b/ext/mbstring/unicode_data.h @@ -10,7 +10,7 @@ * the project's page doesn't seem to be live anymore, so you can use * OpenLDAPs modified copy (look in libraries/liblunicode/ucdata) */ -static const unsigned short _ucprop_size = 50; +static const unsigned short _ucprop_size = 42; static const unsigned short _ucprop_offsets[] = { 0x0000, 0x025a, 0x039a, 0x03a4, 0x0412, 0x042a, 0x04a2, 0x04b0, @@ -18,8 +18,7 @@ static const unsigned short _ucprop_offsets[] = { 0x0ebc, 0x0ed0, 0x0f42, 0x12d8, 0x12e4, 0x1306, 0x139c, 0x142c, 0x157e, 0x15fe, 0x1620, 0x165a, 0x17b4, 0x1cea, 0x1d6a, 0x1d82, 0x1d94, 0x1dc0, 0x1dcc, 0x1de6, 0x1df0, 0x1df6, 0x1e04, 0x21aa, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x2376, 0x2888, - 0x289e, 0x28b2, 0x2924, 0x0000 + 0x21c0, 0x21d4, 0x2246, 0x0000 }; static const unsigned int _ucprop_ranges[] = { @@ -2177,408 +2176,29 @@ static const unsigned int _ucprop_ranges[] = { 0x0001f950, 0x0001f96b, 0x0001f980, 0x0001f997, 0x0001f9c0, 0x0001f9c0, 0x0001f9d0, 0x0001f9e6, 0x000e0001, 0x000e0001, 0x000e0020, 0x000e007f, - 0x000e0100, 0x000e01ef, 0x000000c0, 0x000000c5, - 0x000000c7, 0x000000cf, 0x000000d1, 0x000000d6, - 0x000000d9, 0x000000dd, 0x000000e0, 0x000000e5, - 0x000000e7, 0x000000ef, 0x000000f1, 0x000000f6, - 0x000000f9, 0x000000fd, 0x000000ff, 0x0000010f, - 0x00000112, 0x00000125, 0x00000128, 0x00000130, - 0x00000134, 0x00000137, 0x00000139, 0x0000013e, - 0x00000143, 0x00000148, 0x0000014c, 0x00000151, - 0x00000154, 0x00000165, 0x00000168, 0x0000017e, - 0x000001a0, 0x000001a1, 0x000001af, 0x000001b0, - 0x000001cd, 0x000001dc, 0x000001de, 0x000001e3, - 0x000001e6, 0x000001f0, 0x000001f4, 0x000001f5, - 0x000001f8, 0x0000021b, 0x0000021e, 0x0000021f, - 0x00000226, 0x00000233, 0x00000340, 0x00000341, - 0x00000343, 0x00000344, 0x00000374, 0x00000374, - 0x0000037e, 0x0000037e, 0x00000385, 0x0000038a, - 0x0000038c, 0x0000038c, 0x0000038e, 0x00000390, - 0x000003aa, 0x000003b0, 0x000003ca, 0x000003ce, - 0x000003d3, 0x000003d4, 0x00000400, 0x00000401, - 0x00000403, 0x00000403, 0x00000407, 0x00000407, - 0x0000040c, 0x0000040e, 0x00000419, 0x00000419, - 0x00000439, 0x00000439, 0x00000450, 0x00000451, - 0x00000453, 0x00000453, 0x00000457, 0x00000457, - 0x0000045c, 0x0000045e, 0x00000476, 0x00000477, - 0x000004c1, 0x000004c2, 0x000004d0, 0x000004d3, - 0x000004d6, 0x000004d7, 0x000004da, 0x000004df, - 0x000004e2, 0x000004e7, 0x000004ea, 0x000004f5, - 0x000004f8, 0x000004f9, 0x00000622, 0x00000626, - 0x000006c0, 0x000006c0, 0x000006c2, 0x000006c2, - 0x000006d3, 0x000006d3, 0x00000929, 0x00000929, - 0x00000931, 0x00000931, 0x00000934, 0x00000934, - 0x00000958, 0x0000095f, 0x000009cb, 0x000009cc, - 0x000009dc, 0x000009dd, 0x000009df, 0x000009df, - 0x00000a33, 0x00000a33, 0x00000a36, 0x00000a36, - 0x00000a59, 0x00000a5b, 0x00000a5e, 0x00000a5e, - 0x00000b48, 0x00000b48, 0x00000b4b, 0x00000b4c, - 0x00000b5c, 0x00000b5d, 0x00000b94, 0x00000b94, - 0x00000bca, 0x00000bcc, 0x00000c48, 0x00000c48, - 0x00000cc0, 0x00000cc0, 0x00000cc7, 0x00000cc8, - 0x00000cca, 0x00000ccb, 0x00000d4a, 0x00000d4c, - 0x00000dda, 0x00000dda, 0x00000ddc, 0x00000dde, - 0x00000f43, 0x00000f43, 0x00000f4d, 0x00000f4d, - 0x00000f52, 0x00000f52, 0x00000f57, 0x00000f57, - 0x00000f5c, 0x00000f5c, 0x00000f69, 0x00000f69, - 0x00000f73, 0x00000f73, 0x00000f75, 0x00000f76, - 0x00000f78, 0x00000f78, 0x00000f81, 0x00000f81, - 0x00000f93, 0x00000f93, 0x00000f9d, 0x00000f9d, - 0x00000fa2, 0x00000fa2, 0x00000fa7, 0x00000fa7, - 0x00000fac, 0x00000fac, 0x00000fb9, 0x00000fb9, - 0x00001026, 0x00001026, 0x00001b06, 0x00001b06, - 0x00001b08, 0x00001b08, 0x00001b0a, 0x00001b0a, - 0x00001b0c, 0x00001b0c, 0x00001b0e, 0x00001b0e, - 0x00001b12, 0x00001b12, 0x00001b3b, 0x00001b3b, - 0x00001b3d, 0x00001b3d, 0x00001b40, 0x00001b41, - 0x00001b43, 0x00001b43, 0x00001e00, 0x00001e99, - 0x00001e9b, 0x00001e9b, 0x00001ea0, 0x00001ef9, - 0x00001f00, 0x00001f15, 0x00001f18, 0x00001f1d, - 0x00001f20, 0x00001f45, 0x00001f48, 0x00001f4d, - 0x00001f50, 0x00001f57, 0x00001f59, 0x00001f59, - 0x00001f5b, 0x00001f5b, 0x00001f5d, 0x00001f5d, - 0x00001f5f, 0x00001f7d, 0x00001f80, 0x00001fb4, - 0x00001fb6, 0x00001fbc, 0x00001fbe, 0x00001fbe, - 0x00001fc1, 0x00001fc4, 0x00001fc6, 0x00001fd3, - 0x00001fd6, 0x00001fdb, 0x00001fdd, 0x00001fef, - 0x00001ff2, 0x00001ff4, 0x00001ff6, 0x00001ffd, - 0x00002000, 0x00002001, 0x00002126, 0x00002126, - 0x0000212a, 0x0000212b, 0x0000219a, 0x0000219b, - 0x000021ae, 0x000021ae, 0x000021cd, 0x000021cf, - 0x00002204, 0x00002204, 0x00002209, 0x00002209, - 0x0000220c, 0x0000220c, 0x00002224, 0x00002224, - 0x00002226, 0x00002226, 0x00002241, 0x00002241, - 0x00002244, 0x00002244, 0x00002247, 0x00002247, - 0x00002249, 0x00002249, 0x00002260, 0x00002260, - 0x00002262, 0x00002262, 0x0000226d, 0x00002271, - 0x00002274, 0x00002275, 0x00002278, 0x00002279, - 0x00002280, 0x00002281, 0x00002284, 0x00002285, - 0x00002288, 0x00002289, 0x000022ac, 0x000022af, - 0x000022e0, 0x000022e3, 0x000022ea, 0x000022ed, - 0x00002329, 0x0000232a, 0x00002adc, 0x00002adc, - 0x0000304c, 0x0000304c, 0x0000304e, 0x0000304e, - 0x00003050, 0x00003050, 0x00003052, 0x00003052, - 0x00003054, 0x00003054, 0x00003056, 0x00003056, - 0x00003058, 0x00003058, 0x0000305a, 0x0000305a, - 0x0000305c, 0x0000305c, 0x0000305e, 0x0000305e, - 0x00003060, 0x00003060, 0x00003062, 0x00003062, - 0x00003065, 0x00003065, 0x00003067, 0x00003067, - 0x00003069, 0x00003069, 0x00003070, 0x00003071, - 0x00003073, 0x00003074, 0x00003076, 0x00003077, - 0x00003079, 0x0000307a, 0x0000307c, 0x0000307d, - 0x00003094, 0x00003094, 0x0000309e, 0x0000309e, - 0x000030ac, 0x000030ac, 0x000030ae, 0x000030ae, - 0x000030b0, 0x000030b0, 0x000030b2, 0x000030b2, - 0x000030b4, 0x000030b4, 0x000030b6, 0x000030b6, - 0x000030b8, 0x000030b8, 0x000030ba, 0x000030ba, - 0x000030bc, 0x000030bc, 0x000030be, 0x000030be, - 0x000030c0, 0x000030c0, 0x000030c2, 0x000030c2, - 0x000030c5, 0x000030c5, 0x000030c7, 0x000030c7, - 0x000030c9, 0x000030c9, 0x000030d0, 0x000030d1, - 0x000030d3, 0x000030d4, 0x000030d6, 0x000030d7, - 0x000030d9, 0x000030da, 0x000030dc, 0x000030dd, - 0x000030f4, 0x000030f4, 0x000030f7, 0x000030fa, - 0x000030fe, 0x000030fe, 0x0000f900, 0x0000fa0d, - 0x0000fa10, 0x0000fa10, 0x0000fa12, 0x0000fa12, - 0x0000fa15, 0x0000fa1e, 0x0000fa20, 0x0000fa20, - 0x0000fa22, 0x0000fa22, 0x0000fa25, 0x0000fa26, - 0x0000fa2a, 0x0000fa6d, 0x0000fa70, 0x0000fad9, - 0x0000fb1d, 0x0000fb1d, 0x0000fb1f, 0x0000fb1f, - 0x0000fb2a, 0x0000fb36, 0x0000fb38, 0x0000fb3c, - 0x0000fb3e, 0x0000fb3e, 0x0000fb40, 0x0000fb41, - 0x0000fb43, 0x0000fb44, 0x0000fb46, 0x0000fb4e, - 0x0001109a, 0x0001109a, 0x0001109c, 0x0001109c, - 0x000110ab, 0x000110ab, 0x0001112e, 0x0001112f, - 0x0001134b, 0x0001134c, 0x000114bb, 0x000114bc, - 0x000114be, 0x000114be, 0x000115ba, 0x000115bb, - 0x0001d15e, 0x0001d164, 0x0001d1bb, 0x0001d1c0, - 0x0002f800, 0x0002fa1d, 0x00000000, 0x00000377, - 0x0000037a, 0x0000037f, 0x00000384, 0x0000038a, - 0x0000038c, 0x0000038c, 0x0000038e, 0x000003a1, - 0x000003a3, 0x0000052f, 0x00000531, 0x00000556, - 0x00000559, 0x0000055f, 0x00000561, 0x00000587, - 0x00000589, 0x0000058a, 0x0000058d, 0x0000058f, - 0x00000591, 0x000005c7, 0x000005d0, 0x000005ea, - 0x000005f0, 0x000005f4, 0x00000600, 0x0000061c, - 0x0000061e, 0x0000070d, 0x0000070f, 0x0000074a, - 0x0000074d, 0x000007b1, 0x000007c0, 0x000007fa, - 0x00000800, 0x0000082d, 0x00000830, 0x0000083e, - 0x00000840, 0x0000085b, 0x0000085e, 0x0000085e, + 0x000e0100, 0x000e01ef, 0x000000ab, 0x000000ab, + 0x00002018, 0x00002018, 0x0000201b, 0x0000201c, + 0x0000201f, 0x0000201f, 0x00002039, 0x00002039, + 0x00002e02, 0x00002e02, 0x00002e04, 0x00002e04, + 0x00002e09, 0x00002e09, 0x00002e0c, 0x00002e0c, + 0x00002e1c, 0x00002e1c, 0x00002e20, 0x00002e20, + 0x000000bb, 0x000000bb, 0x00002019, 0x00002019, + 0x0000201d, 0x0000201d, 0x0000203a, 0x0000203a, + 0x00002e03, 0x00002e03, 0x00002e05, 0x00002e05, + 0x00002e0a, 0x00002e0a, 0x00002e0d, 0x00002e0d, + 0x00002e1d, 0x00002e1d, 0x00002e21, 0x00002e21, + 0x00000608, 0x00000608, 0x0000060b, 0x0000060b, + 0x0000060d, 0x0000060d, 0x0000061b, 0x0000061c, + 0x0000061e, 0x0000064a, 0x0000066d, 0x0000066f, + 0x00000671, 0x000006d5, 0x000006e5, 0x000006e6, + 0x000006ee, 0x000006ef, 0x000006fa, 0x0000070d, + 0x0000070f, 0x00000710, 0x00000712, 0x0000072f, + 0x0000074d, 0x000007a5, 0x000007b1, 0x000007b1, 0x00000860, 0x0000086a, 0x000008a0, 0x000008b4, - 0x000008b6, 0x000008bd, 0x000008d4, 0x00000983, - 0x00000985, 0x0000098c, 0x0000098f, 0x00000990, - 0x00000993, 0x000009a8, 0x000009aa, 0x000009b0, - 0x000009b2, 0x000009b2, 0x000009b6, 0x000009b9, - 0x000009bc, 0x000009c4, 0x000009c7, 0x000009c8, - 0x000009cb, 0x000009ce, 0x000009d7, 0x000009d7, - 0x000009dc, 0x000009dd, 0x000009df, 0x000009e3, - 0x000009e6, 0x000009fd, 0x00000a01, 0x00000a03, - 0x00000a05, 0x00000a0a, 0x00000a0f, 0x00000a10, - 0x00000a13, 0x00000a28, 0x00000a2a, 0x00000a30, - 0x00000a32, 0x00000a33, 0x00000a35, 0x00000a36, - 0x00000a38, 0x00000a39, 0x00000a3c, 0x00000a3c, - 0x00000a3e, 0x00000a42, 0x00000a47, 0x00000a48, - 0x00000a4b, 0x00000a4d, 0x00000a51, 0x00000a51, - 0x00000a59, 0x00000a5c, 0x00000a5e, 0x00000a5e, - 0x00000a66, 0x00000a75, 0x00000a81, 0x00000a83, - 0x00000a85, 0x00000a8d, 0x00000a8f, 0x00000a91, - 0x00000a93, 0x00000aa8, 0x00000aaa, 0x00000ab0, - 0x00000ab2, 0x00000ab3, 0x00000ab5, 0x00000ab9, - 0x00000abc, 0x00000ac5, 0x00000ac7, 0x00000ac9, - 0x00000acb, 0x00000acd, 0x00000ad0, 0x00000ad0, - 0x00000ae0, 0x00000ae3, 0x00000ae6, 0x00000af1, - 0x00000af9, 0x00000aff, 0x00000b01, 0x00000b03, - 0x00000b05, 0x00000b0c, 0x00000b0f, 0x00000b10, - 0x00000b13, 0x00000b28, 0x00000b2a, 0x00000b30, - 0x00000b32, 0x00000b33, 0x00000b35, 0x00000b39, - 0x00000b3c, 0x00000b44, 0x00000b47, 0x00000b48, - 0x00000b4b, 0x00000b4d, 0x00000b56, 0x00000b57, - 0x00000b5c, 0x00000b5d, 0x00000b5f, 0x00000b63, - 0x00000b66, 0x00000b77, 0x00000b82, 0x00000b83, - 0x00000b85, 0x00000b8a, 0x00000b8e, 0x00000b90, - 0x00000b92, 0x00000b95, 0x00000b99, 0x00000b9a, - 0x00000b9c, 0x00000b9c, 0x00000b9e, 0x00000b9f, - 0x00000ba3, 0x00000ba4, 0x00000ba8, 0x00000baa, - 0x00000bae, 0x00000bb9, 0x00000bbe, 0x00000bc2, - 0x00000bc6, 0x00000bc8, 0x00000bca, 0x00000bcd, - 0x00000bd0, 0x00000bd0, 0x00000bd7, 0x00000bd7, - 0x00000be6, 0x00000bfa, 0x00000c00, 0x00000c03, - 0x00000c05, 0x00000c0c, 0x00000c0e, 0x00000c10, - 0x00000c12, 0x00000c28, 0x00000c2a, 0x00000c39, - 0x00000c3d, 0x00000c44, 0x00000c46, 0x00000c48, - 0x00000c4a, 0x00000c4d, 0x00000c55, 0x00000c56, - 0x00000c58, 0x00000c5a, 0x00000c60, 0x00000c63, - 0x00000c66, 0x00000c6f, 0x00000c78, 0x00000c83, - 0x00000c85, 0x00000c8c, 0x00000c8e, 0x00000c90, - 0x00000c92, 0x00000ca8, 0x00000caa, 0x00000cb3, - 0x00000cb5, 0x00000cb9, 0x00000cbc, 0x00000cc4, - 0x00000cc6, 0x00000cc8, 0x00000cca, 0x00000ccd, - 0x00000cd5, 0x00000cd6, 0x00000cde, 0x00000cde, - 0x00000ce0, 0x00000ce3, 0x00000ce6, 0x00000cef, - 0x00000cf1, 0x00000cf2, 0x00000d00, 0x00000d03, - 0x00000d05, 0x00000d0c, 0x00000d0e, 0x00000d10, - 0x00000d12, 0x00000d44, 0x00000d46, 0x00000d48, - 0x00000d4a, 0x00000d4f, 0x00000d54, 0x00000d63, - 0x00000d66, 0x00000d7f, 0x00000d82, 0x00000d83, - 0x00000d85, 0x00000d96, 0x00000d9a, 0x00000db1, - 0x00000db3, 0x00000dbb, 0x00000dbd, 0x00000dbd, - 0x00000dc0, 0x00000dc6, 0x00000dca, 0x00000dca, - 0x00000dcf, 0x00000dd4, 0x00000dd6, 0x00000dd6, - 0x00000dd8, 0x00000ddf, 0x00000de6, 0x00000def, - 0x00000df2, 0x00000df4, 0x00000e01, 0x00000e3a, - 0x00000e3f, 0x00000e5b, 0x00000e81, 0x00000e82, - 0x00000e84, 0x00000e84, 0x00000e87, 0x00000e88, - 0x00000e8a, 0x00000e8a, 0x00000e8d, 0x00000e8d, - 0x00000e94, 0x00000e97, 0x00000e99, 0x00000e9f, - 0x00000ea1, 0x00000ea3, 0x00000ea5, 0x00000ea5, - 0x00000ea7, 0x00000ea7, 0x00000eaa, 0x00000eab, - 0x00000ead, 0x00000eb9, 0x00000ebb, 0x00000ebd, - 0x00000ec0, 0x00000ec4, 0x00000ec6, 0x00000ec6, - 0x00000ec8, 0x00000ecd, 0x00000ed0, 0x00000ed9, - 0x00000edc, 0x00000edf, 0x00000f00, 0x00000f47, - 0x00000f49, 0x00000f6c, 0x00000f71, 0x00000f97, - 0x00000f99, 0x00000fbc, 0x00000fbe, 0x00000fcc, - 0x00000fce, 0x00000fda, 0x00001000, 0x000010c5, - 0x000010c7, 0x000010c7, 0x000010cd, 0x000010cd, - 0x000010d0, 0x00001248, 0x0000124a, 0x0000124d, - 0x00001250, 0x00001256, 0x00001258, 0x00001258, - 0x0000125a, 0x0000125d, 0x00001260, 0x00001288, - 0x0000128a, 0x0000128d, 0x00001290, 0x000012b0, - 0x000012b2, 0x000012b5, 0x000012b8, 0x000012be, - 0x000012c0, 0x000012c0, 0x000012c2, 0x000012c5, - 0x000012c8, 0x000012d6, 0x000012d8, 0x00001310, - 0x00001312, 0x00001315, 0x00001318, 0x0000135a, - 0x0000135d, 0x0000137c, 0x00001380, 0x00001399, - 0x000013a0, 0x000013f5, 0x000013f8, 0x000013fd, - 0x00001400, 0x0000169c, 0x000016a0, 0x000016f8, - 0x00001700, 0x0000170c, 0x0000170e, 0x00001714, - 0x00001720, 0x00001736, 0x00001740, 0x00001753, - 0x00001760, 0x0000176c, 0x0000176e, 0x00001770, - 0x00001772, 0x00001773, 0x00001780, 0x000017dd, - 0x000017e0, 0x000017e9, 0x000017f0, 0x000017f9, - 0x00001800, 0x0000180e, 0x00001810, 0x00001819, - 0x00001820, 0x00001877, 0x00001880, 0x000018aa, - 0x000018b0, 0x000018f5, 0x00001900, 0x0000191e, - 0x00001920, 0x0000192b, 0x00001930, 0x0000193b, - 0x00001940, 0x00001940, 0x00001944, 0x0000196d, - 0x00001970, 0x00001974, 0x00001980, 0x000019ab, - 0x000019b0, 0x000019c9, 0x000019d0, 0x000019da, - 0x000019de, 0x00001a1b, 0x00001a1e, 0x00001a5e, - 0x00001a60, 0x00001a7c, 0x00001a7f, 0x00001a89, - 0x00001a90, 0x00001a99, 0x00001aa0, 0x00001aad, - 0x00001ab0, 0x00001abe, 0x00001b00, 0x00001b4b, - 0x00001b50, 0x00001b7c, 0x00001b80, 0x00001bf3, - 0x00001bfc, 0x00001c37, 0x00001c3b, 0x00001c49, - 0x00001c4d, 0x00001c88, 0x00001cc0, 0x00001cc7, - 0x00001cd0, 0x00001cf9, 0x00001d00, 0x00001df9, - 0x00001dfb, 0x00001f15, 0x00001f18, 0x00001f1d, - 0x00001f20, 0x00001f45, 0x00001f48, 0x00001f4d, - 0x00001f50, 0x00001f57, 0x00001f59, 0x00001f59, - 0x00001f5b, 0x00001f5b, 0x00001f5d, 0x00001f5d, - 0x00001f5f, 0x00001f7d, 0x00001f80, 0x00001fb4, - 0x00001fb6, 0x00001fc4, 0x00001fc6, 0x00001fd3, - 0x00001fd6, 0x00001fdb, 0x00001fdd, 0x00001fef, - 0x00001ff2, 0x00001ff4, 0x00001ff6, 0x00001ffe, - 0x00002000, 0x00002064, 0x00002066, 0x00002071, - 0x00002074, 0x0000208e, 0x00002090, 0x0000209c, - 0x000020a0, 0x000020bf, 0x000020d0, 0x000020f0, - 0x00002100, 0x0000218b, 0x00002190, 0x00002426, - 0x00002440, 0x0000244a, 0x00002460, 0x00002b73, - 0x00002b76, 0x00002b95, 0x00002b98, 0x00002bb9, - 0x00002bbd, 0x00002bc8, 0x00002bca, 0x00002bd2, - 0x00002bec, 0x00002bef, 0x00002c00, 0x00002c2e, - 0x00002c30, 0x00002c5e, 0x00002c60, 0x00002cf3, - 0x00002cf9, 0x00002d25, 0x00002d27, 0x00002d27, - 0x00002d2d, 0x00002d2d, 0x00002d30, 0x00002d67, - 0x00002d6f, 0x00002d70, 0x00002d7f, 0x00002d96, - 0x00002da0, 0x00002da6, 0x00002da8, 0x00002dae, - 0x00002db0, 0x00002db6, 0x00002db8, 0x00002dbe, - 0x00002dc0, 0x00002dc6, 0x00002dc8, 0x00002dce, - 0x00002dd0, 0x00002dd6, 0x00002dd8, 0x00002dde, - 0x00002de0, 0x00002e49, 0x00002e80, 0x00002e99, - 0x00002e9b, 0x00002ef3, 0x00002f00, 0x00002fd5, - 0x00002ff0, 0x00002ffb, 0x00003000, 0x0000303f, - 0x00003041, 0x00003096, 0x00003099, 0x000030ff, - 0x00003105, 0x0000312e, 0x00003131, 0x0000318e, - 0x00003190, 0x000031ba, 0x000031c0, 0x000031e3, - 0x000031f0, 0x0000321e, 0x00003220, 0x000032fe, - 0x00003300, 0x00004db5, 0x00004dc0, 0x00009fea, - 0x0000a000, 0x0000a48c, 0x0000a490, 0x0000a4c6, - 0x0000a4d0, 0x0000a62b, 0x0000a640, 0x0000a6f7, - 0x0000a700, 0x0000a7ae, 0x0000a7b0, 0x0000a7b7, - 0x0000a7f7, 0x0000a82b, 0x0000a830, 0x0000a839, - 0x0000a840, 0x0000a877, 0x0000a880, 0x0000a8c5, - 0x0000a8ce, 0x0000a8d9, 0x0000a8e0, 0x0000a8fd, - 0x0000a900, 0x0000a953, 0x0000a95f, 0x0000a97c, - 0x0000a980, 0x0000a9cd, 0x0000a9cf, 0x0000a9d9, - 0x0000a9de, 0x0000a9fe, 0x0000aa00, 0x0000aa36, - 0x0000aa40, 0x0000aa4d, 0x0000aa50, 0x0000aa59, - 0x0000aa5c, 0x0000aac2, 0x0000aadb, 0x0000aaf6, - 0x0000ab01, 0x0000ab06, 0x0000ab09, 0x0000ab0e, - 0x0000ab11, 0x0000ab16, 0x0000ab20, 0x0000ab26, - 0x0000ab28, 0x0000ab2e, 0x0000ab30, 0x0000ab65, - 0x0000ab70, 0x0000abed, 0x0000abf0, 0x0000abf9, - 0x0000ac00, 0x0000d7a3, 0x0000d7b0, 0x0000d7c6, - 0x0000d7cb, 0x0000d7fb, 0x0000db80, 0x0000dfff, - 0x0000f900, 0x0000fa6d, 0x0000fa70, 0x0000fad9, - 0x0000fb00, 0x0000fb06, 0x0000fb13, 0x0000fb17, - 0x0000fb1d, 0x0000fb36, 0x0000fb38, 0x0000fb3c, - 0x0000fb3e, 0x0000fb3e, 0x0000fb40, 0x0000fb41, - 0x0000fb43, 0x0000fb44, 0x0000fb46, 0x0000fbc1, - 0x0000fbd3, 0x0000fd3f, 0x0000fd50, 0x0000fd8f, - 0x0000fd92, 0x0000fdc7, 0x0000fdf0, 0x0000fdfd, - 0x0000fe00, 0x0000fe19, 0x0000fe20, 0x0000fe52, - 0x0000fe54, 0x0000fe66, 0x0000fe68, 0x0000fe6b, + 0x000008b6, 0x000008bd, 0x0000fb50, 0x0000fbc1, + 0x0000fbd3, 0x0000fd3d, 0x0000fd50, 0x0000fd8f, + 0x0000fd92, 0x0000fdc7, 0x0000fdf0, 0x0000fdfc, 0x0000fe70, 0x0000fe74, 0x0000fe76, 0x0000fefc, - 0x0000feff, 0x0000feff, 0x0000ff01, 0x0000ffbe, - 0x0000ffc2, 0x0000ffc7, 0x0000ffca, 0x0000ffcf, - 0x0000ffd2, 0x0000ffd7, 0x0000ffda, 0x0000ffdc, - 0x0000ffe0, 0x0000ffe6, 0x0000ffe8, 0x0000ffee, - 0x0000fff9, 0x0000fffd, 0x00010000, 0x0001000b, - 0x0001000d, 0x00010026, 0x00010028, 0x0001003a, - 0x0001003c, 0x0001003d, 0x0001003f, 0x0001004d, - 0x00010050, 0x0001005d, 0x00010080, 0x000100fa, - 0x00010100, 0x00010102, 0x00010107, 0x00010133, - 0x00010137, 0x0001018e, 0x00010190, 0x0001019b, - 0x000101a0, 0x000101a0, 0x000101d0, 0x000101fd, - 0x00010280, 0x0001029c, 0x000102a0, 0x000102d0, - 0x000102e0, 0x000102fb, 0x00010300, 0x00010323, - 0x0001032d, 0x0001034a, 0x00010350, 0x0001037a, - 0x00010380, 0x0001039d, 0x0001039f, 0x000103c3, - 0x000103c8, 0x000103d5, 0x00010400, 0x0001049d, - 0x000104a0, 0x000104a9, 0x000104b0, 0x000104d3, - 0x000104d8, 0x000104fb, 0x00010500, 0x00010527, - 0x00010530, 0x00010563, 0x0001056f, 0x0001056f, - 0x00010600, 0x00010736, 0x00010740, 0x00010755, - 0x00010760, 0x00010767, 0x00010800, 0x00010805, - 0x00010808, 0x00010808, 0x0001080a, 0x00010835, - 0x00010837, 0x00010838, 0x0001083c, 0x0001083c, - 0x0001083f, 0x00010855, 0x00010857, 0x0001089e, - 0x000108a7, 0x000108af, 0x000108e0, 0x000108f2, - 0x000108f4, 0x000108f5, 0x000108fb, 0x0001091b, - 0x0001091f, 0x00010939, 0x0001093f, 0x0001093f, - 0x00010980, 0x000109b7, 0x000109bc, 0x000109cf, - 0x000109d2, 0x00010a03, 0x00010a05, 0x00010a06, - 0x00010a0c, 0x00010a13, 0x00010a15, 0x00010a17, - 0x00010a19, 0x00010a33, 0x00010a38, 0x00010a3a, - 0x00010a3f, 0x00010a47, 0x00010a50, 0x00010a58, - 0x00010a60, 0x00010a9f, 0x00010ac0, 0x00010ae6, - 0x00010aeb, 0x00010af6, 0x00010b00, 0x00010b35, - 0x00010b39, 0x00010b55, 0x00010b58, 0x00010b72, - 0x00010b78, 0x00010b91, 0x00010b99, 0x00010b9c, - 0x00010ba9, 0x00010baf, 0x00010c00, 0x00010c48, - 0x00010c80, 0x00010cb2, 0x00010cc0, 0x00010cf2, - 0x00010cfa, 0x00010cff, 0x00010e60, 0x00010e7e, - 0x00011000, 0x0001104d, 0x00011052, 0x0001106f, - 0x0001107f, 0x000110c1, 0x000110d0, 0x000110e8, - 0x000110f0, 0x000110f9, 0x00011100, 0x00011134, - 0x00011136, 0x00011143, 0x00011150, 0x00011176, - 0x00011180, 0x000111cd, 0x000111d0, 0x000111df, - 0x000111e1, 0x000111f4, 0x00011200, 0x00011211, - 0x00011213, 0x0001123e, 0x00011280, 0x00011286, - 0x00011288, 0x00011288, 0x0001128a, 0x0001128d, - 0x0001128f, 0x0001129d, 0x0001129f, 0x000112a9, - 0x000112b0, 0x000112ea, 0x000112f0, 0x000112f9, - 0x00011300, 0x00011303, 0x00011305, 0x0001130c, - 0x0001130f, 0x00011310, 0x00011313, 0x00011328, - 0x0001132a, 0x00011330, 0x00011332, 0x00011333, - 0x00011335, 0x00011339, 0x0001133c, 0x00011344, - 0x00011347, 0x00011348, 0x0001134b, 0x0001134d, - 0x00011350, 0x00011350, 0x00011357, 0x00011357, - 0x0001135d, 0x00011363, 0x00011366, 0x0001136c, - 0x00011370, 0x00011374, 0x00011400, 0x00011459, - 0x0001145b, 0x0001145b, 0x0001145d, 0x0001145d, - 0x00011480, 0x000114c7, 0x000114d0, 0x000114d9, - 0x00011580, 0x000115b5, 0x000115b8, 0x000115dd, - 0x00011600, 0x00011644, 0x00011650, 0x00011659, - 0x00011660, 0x0001166c, 0x00011680, 0x000116b7, - 0x000116c0, 0x000116c9, 0x00011700, 0x00011719, - 0x0001171d, 0x0001172b, 0x00011730, 0x0001173f, - 0x000118a0, 0x000118f2, 0x000118ff, 0x000118ff, - 0x00011a00, 0x00011a47, 0x00011a50, 0x00011a83, - 0x00011a86, 0x00011a9c, 0x00011a9e, 0x00011aa2, - 0x00011ac0, 0x00011af8, 0x00011c00, 0x00011c08, - 0x00011c0a, 0x00011c36, 0x00011c38, 0x00011c45, - 0x00011c50, 0x00011c6c, 0x00011c70, 0x00011c8f, - 0x00011c92, 0x00011ca7, 0x00011ca9, 0x00011cb6, - 0x00011d00, 0x00011d06, 0x00011d08, 0x00011d09, - 0x00011d0b, 0x00011d36, 0x00011d3a, 0x00011d3a, - 0x00011d3c, 0x00011d3d, 0x00011d3f, 0x00011d47, - 0x00011d50, 0x00011d59, 0x00012000, 0x00012399, - 0x00012400, 0x0001246e, 0x00012470, 0x00012474, - 0x00012480, 0x00012543, 0x00013000, 0x0001342e, - 0x00014400, 0x00014646, 0x00016800, 0x00016a38, - 0x00016a40, 0x00016a5e, 0x00016a60, 0x00016a69, - 0x00016a6e, 0x00016a6f, 0x00016ad0, 0x00016aed, - 0x00016af0, 0x00016af5, 0x00016b00, 0x00016b45, - 0x00016b50, 0x00016b59, 0x00016b5b, 0x00016b61, - 0x00016b63, 0x00016b77, 0x00016b7d, 0x00016b8f, - 0x00016f00, 0x00016f44, 0x00016f50, 0x00016f7e, - 0x00016f8f, 0x00016f9f, 0x00016fe0, 0x00016fe1, - 0x00017000, 0x000187ec, 0x00018800, 0x00018af2, - 0x0001b000, 0x0001b11e, 0x0001b170, 0x0001b2fb, - 0x0001bc00, 0x0001bc6a, 0x0001bc70, 0x0001bc7c, - 0x0001bc80, 0x0001bc88, 0x0001bc90, 0x0001bc99, - 0x0001bc9c, 0x0001bca3, 0x0001d000, 0x0001d0f5, - 0x0001d100, 0x0001d126, 0x0001d129, 0x0001d1e8, - 0x0001d200, 0x0001d245, 0x0001d300, 0x0001d356, - 0x0001d360, 0x0001d371, 0x0001d400, 0x0001d454, - 0x0001d456, 0x0001d49c, 0x0001d49e, 0x0001d49f, - 0x0001d4a2, 0x0001d4a2, 0x0001d4a5, 0x0001d4a6, - 0x0001d4a9, 0x0001d4ac, 0x0001d4ae, 0x0001d4b9, - 0x0001d4bb, 0x0001d4bb, 0x0001d4bd, 0x0001d4c3, - 0x0001d4c5, 0x0001d505, 0x0001d507, 0x0001d50a, - 0x0001d50d, 0x0001d514, 0x0001d516, 0x0001d51c, - 0x0001d51e, 0x0001d539, 0x0001d53b, 0x0001d53e, - 0x0001d540, 0x0001d544, 0x0001d546, 0x0001d546, - 0x0001d54a, 0x0001d550, 0x0001d552, 0x0001d6a5, - 0x0001d6a8, 0x0001d7cb, 0x0001d7ce, 0x0001da8b, - 0x0001da9b, 0x0001da9f, 0x0001daa1, 0x0001daaf, - 0x0001e000, 0x0001e006, 0x0001e008, 0x0001e018, - 0x0001e01b, 0x0001e021, 0x0001e023, 0x0001e024, - 0x0001e026, 0x0001e02a, 0x0001e800, 0x0001e8c4, - 0x0001e8c7, 0x0001e8d6, 0x0001e900, 0x0001e94a, - 0x0001e950, 0x0001e959, 0x0001e95e, 0x0001e95f, 0x0001ee00, 0x0001ee03, 0x0001ee05, 0x0001ee1f, 0x0001ee21, 0x0001ee22, 0x0001ee24, 0x0001ee24, 0x0001ee27, 0x0001ee27, 0x0001ee29, 0x0001ee32, @@ -2595,67 +2215,7 @@ static const unsigned int _ucprop_ranges[] = { 0x0001ee79, 0x0001ee7c, 0x0001ee7e, 0x0001ee7e, 0x0001ee80, 0x0001ee89, 0x0001ee8b, 0x0001ee9b, 0x0001eea1, 0x0001eea3, 0x0001eea5, 0x0001eea9, - 0x0001eeab, 0x0001eebb, 0x0001eef0, 0x0001eef1, - 0x0001f000, 0x0001f02b, 0x0001f030, 0x0001f093, - 0x0001f0a0, 0x0001f0ae, 0x0001f0b1, 0x0001f0bf, - 0x0001f0c1, 0x0001f0cf, 0x0001f0d1, 0x0001f0f5, - 0x0001f100, 0x0001f10c, 0x0001f110, 0x0001f12e, - 0x0001f130, 0x0001f16b, 0x0001f170, 0x0001f1ac, - 0x0001f1e6, 0x0001f202, 0x0001f210, 0x0001f23b, - 0x0001f240, 0x0001f248, 0x0001f250, 0x0001f251, - 0x0001f260, 0x0001f265, 0x0001f300, 0x0001f6d4, - 0x0001f6e0, 0x0001f6ec, 0x0001f6f0, 0x0001f6f8, - 0x0001f700, 0x0001f773, 0x0001f780, 0x0001f7d4, - 0x0001f800, 0x0001f80b, 0x0001f810, 0x0001f847, - 0x0001f850, 0x0001f859, 0x0001f860, 0x0001f887, - 0x0001f890, 0x0001f8ad, 0x0001f900, 0x0001f90b, - 0x0001f910, 0x0001f93e, 0x0001f940, 0x0001f94c, - 0x0001f950, 0x0001f96b, 0x0001f980, 0x0001f997, - 0x0001f9c0, 0x0001f9c0, 0x0001f9d0, 0x0001f9e6, - 0x00020000, 0x0002a6d6, 0x0002a700, 0x0002b734, - 0x0002b740, 0x0002b81d, 0x0002b820, 0x0002cea1, - 0x0002ceb0, 0x0002ebe0, 0x0002f800, 0x0002fa1d, - 0x000e0001, 0x000e0001, 0x000e0020, 0x000e007f, - 0x000e0100, 0x000e01ef, 0x00100000, 0x0010fffd, - 0x000000ab, 0x000000ab, 0x00002018, 0x00002018, - 0x0000201b, 0x0000201c, 0x0000201f, 0x0000201f, - 0x00002039, 0x00002039, 0x00002e02, 0x00002e02, - 0x00002e04, 0x00002e04, 0x00002e09, 0x00002e09, - 0x00002e0c, 0x00002e0c, 0x00002e1c, 0x00002e1c, - 0x00002e20, 0x00002e20, 0x000000bb, 0x000000bb, - 0x00002019, 0x00002019, 0x0000201d, 0x0000201d, - 0x0000203a, 0x0000203a, 0x00002e03, 0x00002e03, - 0x00002e05, 0x00002e05, 0x00002e0a, 0x00002e0a, - 0x00002e0d, 0x00002e0d, 0x00002e1d, 0x00002e1d, - 0x00002e21, 0x00002e21, 0x00000608, 0x00000608, - 0x0000060b, 0x0000060b, 0x0000060d, 0x0000060d, - 0x0000061b, 0x0000061c, 0x0000061e, 0x0000064a, - 0x0000066d, 0x0000066f, 0x00000671, 0x000006d5, - 0x000006e5, 0x000006e6, 0x000006ee, 0x000006ef, - 0x000006fa, 0x0000070d, 0x0000070f, 0x00000710, - 0x00000712, 0x0000072f, 0x0000074d, 0x000007a5, - 0x000007b1, 0x000007b1, 0x00000860, 0x0000086a, - 0x000008a0, 0x000008b4, 0x000008b6, 0x000008bd, - 0x0000fb50, 0x0000fbc1, 0x0000fbd3, 0x0000fd3d, - 0x0000fd50, 0x0000fd8f, 0x0000fd92, 0x0000fdc7, - 0x0000fdf0, 0x0000fdfc, 0x0000fe70, 0x0000fe74, - 0x0000fe76, 0x0000fefc, 0x0001ee00, 0x0001ee03, - 0x0001ee05, 0x0001ee1f, 0x0001ee21, 0x0001ee22, - 0x0001ee24, 0x0001ee24, 0x0001ee27, 0x0001ee27, - 0x0001ee29, 0x0001ee32, 0x0001ee34, 0x0001ee37, - 0x0001ee39, 0x0001ee39, 0x0001ee3b, 0x0001ee3b, - 0x0001ee42, 0x0001ee42, 0x0001ee47, 0x0001ee47, - 0x0001ee49, 0x0001ee49, 0x0001ee4b, 0x0001ee4b, - 0x0001ee4d, 0x0001ee4f, 0x0001ee51, 0x0001ee52, - 0x0001ee54, 0x0001ee54, 0x0001ee57, 0x0001ee57, - 0x0001ee59, 0x0001ee59, 0x0001ee5b, 0x0001ee5b, - 0x0001ee5d, 0x0001ee5d, 0x0001ee5f, 0x0001ee5f, - 0x0001ee61, 0x0001ee62, 0x0001ee64, 0x0001ee64, - 0x0001ee67, 0x0001ee6a, 0x0001ee6c, 0x0001ee72, - 0x0001ee74, 0x0001ee77, 0x0001ee79, 0x0001ee7c, - 0x0001ee7e, 0x0001ee7e, 0x0001ee80, 0x0001ee89, - 0x0001ee8b, 0x0001ee9b, 0x0001eea1, 0x0001eea3, - 0x0001eea5, 0x0001eea9, 0x0001eeab, 0x0001eebb + 0x0001eeab, 0x0001eebb }; static const unsigned int _uccase_size = 3950; -- 2.50.1