]> git.lizzy.rs Git - rust.git/commitdiff
Add a right shift mapping
authorMark Rousskov <mark.simulacrum@gmail.com>
Sat, 21 Mar 2020 16:11:47 +0000 (12:11 -0400)
committerMark Rousskov <mark.simulacrum@gmail.com>
Sat, 21 Mar 2020 16:14:26 +0000 (12:14 -0400)
This saves less bytes - by far - and is likely not the best operator to choose.
But for now, it works -- a better choice may arise later.

Alphabetic     : 2538 bytes   (- 84 bytes)
Case_Ignorable : 1773 bytes   (- 30 bytes)
Cased          : 790 bytes    (- 18 bytes)
Cc             : 26 bytes     (-  6 bytes)
Grapheme_Extend: 1490 bytes   (- 18 bytes)
Lowercase      : 865 bytes    (- 36 bytes)
N              : 1040 bytes   (- 24 bytes)
Uppercase      : 778 bytes    (- 60 bytes)
White_Space    : 85 bytes     (-  6 bytes)
Total table sizes: 9385 bytes (-282 bytes)

src/libcore/unicode/mod.rs
src/libcore/unicode/unicode_data.rs
src/tools/unicode-table-generator/src/main.rs
src/tools/unicode-table-generator/src/raw_emitter.rs

index 2a41685a4809683dcc2262fef7a79049927bf73b..39532166a0b661265e4281dbabf59dcb8c80ddb6 100644 (file)
@@ -66,12 +66,12 @@ fn range_search<
     } else {
         let (real_idx, mapping) = bitset_canonicalized[idx - CANONICAL];
         let mut word = bitset_canonical[real_idx as usize];
-        let should_invert = mapping & (1 << 7) != 0;
+        let should_invert = mapping & (1 << 6) != 0;
         if should_invert {
             word = !word;
         }
         // Unset the inversion bit
-        let rotate_by = mapping & !(1 << 7);
+        let rotate_by = mapping & !(1 << 6);
         word = word.rotate_left(rotate_by as u32);
         word
     };
index 555a0437f7bcb8a8826ef5b20f990200ba4e8ca9..bae6d8ea953659c516d6eb4027f48fa0315d868e 100644 (file)
 
 #[rustfmt::skip]
 pub mod alphabetic {
-    static BITSET_LAST_CHUNK_MAP: (u16, u8) = (393, 11);
+    static BITSET_LAST_CHUNK_MAP: (u16, u8) = (393, 13);
     static BITSET_CHUNKS_MAP: [u8; 393] = [
-        73, 17, 1, 52, 39, 48, 49, 58, 50, 26, 0, 29, 51, 57, 60, 12, 63, 72, 66, 72, 72, 72, 55,
-        53, 42, 72, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 8, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
-        4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 6, 4, 4, 23,
-        38, 36, 61, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 9, 72, 72, 72,
-        72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 70, 28, 14, 64, 47, 65, 3, 16, 46, 40,
-        32, 67, 30, 43, 24, 54, 35, 45, 44, 68, 4, 10, 31, 72, 72, 72, 72, 72, 4, 4, 59, 72, 72, 72,
-        72, 72, 72, 72, 4, 33, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 4,
-        34, 72, 62, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 4, 4, 21, 72, 72, 72, 72, 72, 72, 72, 72,
-        72, 72, 72, 72, 72, 72, 72, 72, 72, 15, 18, 72, 72, 72, 72, 25, 72, 72, 72, 72, 72, 72, 72,
-        72, 72, 72, 72, 27, 22, 72, 72, 72, 72, 37, 69, 72, 72, 19, 72, 72, 41, 71, 72, 72, 72, 72,
-        72, 72, 72, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
-        4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
-        4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 20, 4, 4, 4, 4,
-        4, 4, 4, 13, 56, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 2, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 7,
-        72, 72, 72, 72, 72, 72, 4, 74, 72, 72, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+        61, 18, 2, 35, 46, 39, 38, 74, 37, 25, 70, 34, 36, 73, 66, 5, 52, 58, 54, 58, 58, 58, 69,
+        64, 43, 58, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 7, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+        6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 10, 6, 6, 23,
+        47, 49, 65, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 11, 58, 58, 58,
+        58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 57, 33, 17, 51, 40, 53, 4, 16, 41, 45,
+        30, 55, 28, 42, 27, 0, 67, 71, 1, 56, 6, 12, 31, 58, 58, 58, 58, 58, 6, 6, 63, 58, 58, 58,
+        58, 58, 58, 58, 6, 29, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 6,
+        68, 58, 50, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 9, 6, 6, 20, 58, 58, 58, 58, 58, 58, 58, 58,
+        58, 58, 58, 58, 58, 58, 58, 58, 58, 14, 22, 58, 58, 58, 58, 26, 58, 58, 58, 58, 58, 58, 58,
+        58, 58, 58, 58, 32, 24, 58, 58, 58, 58, 48, 60, 58, 58, 19, 58, 58, 44, 59, 58, 58, 58, 58,
+        58, 58, 58, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+        6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+        6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 21, 6, 6, 6, 6,
+        6, 6, 6, 15, 72, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 3, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 8,
+        58, 58, 58, 58, 58, 58, 6, 62, 58, 58, 6, 6, 6, 6, 6, 6, 6, 6, 6,
     ];
     static BITSET_INDEX_CHUNKS: [[u8; 8]; 75] = [
-        [0, 16, 16, 16, 16, 16, 16, 16], [16, 16, 7, 16, 196, 175, 130, 69],
-        [16, 16, 11, 16, 16, 16, 16, 16], [16, 16, 12, 96, 227, 48, 244, 244],
-        [16, 16, 16, 16, 16, 16, 16, 16], [16, 16, 16, 16, 16, 16, 16, 226],
-        [16, 16, 16, 16, 16, 16, 16, 229], [16, 16, 16, 16, 16, 16, 16, 241],
-        [16, 16, 16, 16, 16, 16, 16, 244], [16, 16, 16, 16, 16, 16, 19, 97],
-        [16, 16, 16, 16, 16, 16, 249, 244], [16, 16, 16, 16, 16, 252, 244, 244],
-        [16, 16, 16, 16, 17, 108, 113, 101], [16, 16, 16, 16, 24, 16, 16, 16],
-        [16, 16, 16, 16, 201, 4, 207, 94], [16, 16, 16, 16, 240, 159, 16, 16],
-        [16, 16, 16, 16, 243, 51, 244, 244], [16, 16, 16, 62, 244, 129, 170, 193],
-        [16, 16, 16, 213, 244, 244, 244, 244], [16, 16, 16, 232, 16, 29, 244, 244],
-        [16, 16, 16, 253, 16, 16, 16, 16], [16, 16, 16, 254, 242, 244, 244, 244],
-        [16, 16, 205, 145, 221, 222, 5, 31], [16, 16, 208, 237, 16, 16, 16, 16],
-        [16, 45, 16, 28, 244, 244, 117, 224], [16, 102, 42, 244, 244, 244, 244, 244],
-        [16, 179, 116, 182, 181, 36, 219, 245], [16, 199, 143, 200, 114, 184, 16, 16],
-        [16, 203, 16, 249, 112, 185, 234, 183], [16, 204, 177, 87, 74, 73, 202, 37],
-        [16, 223, 15, 54, 210, 81, 16, 38], [16, 231, 16, 16, 16, 212, 244, 244],
-        [16, 242, 210, 210, 53, 244, 244, 244], [16, 250, 244, 244, 244, 244, 244, 244],
-        [22, 240, 244, 25, 217, 133, 216, 244], [22, 244, 173, 14, 125, 228, 167, 49],
-        [52, 247, 16, 142, 163, 103, 195, 115], [55, 244, 244, 244, 107, 187, 244, 244],
-        [59, 123, 16, 217, 171, 16, 1, 153], [61, 56, 152, 161, 191, 155, 134, 98],
-        [80, 20, 248, 50, 239, 70, 236, 244], [93, 111, 95, 244, 244, 244, 244, 244],
-        [100, 0, 172, 192, 157, 16, 9, 218], [110, 244, 160, 251, 136, 47, 244, 244],
-        [119, 154, 82, 244, 127, 168, 35, 244], [120, 4, 40, 22, 244, 244, 244, 244],
-        [124, 84, 240, 77, 88, 244, 6, 244], [128, 41, 16, 233, 244, 24, 244, 244],
-        [131, 79, 137, 99, 135, 64, 132, 34], [139, 46, 138, 68, 140, 148, 105, 71],
-        [147, 4, 178, 146, 16, 16, 16, 16], [173, 22, 10, 239, 86, 75, 214, 238],
-        [176, 166, 16, 126, 4, 2, 234, 90], [188, 244, 244, 244, 244, 244, 244, 244],
-        [190, 27, 85, 244, 57, 244, 244, 244], [197, 198, 16, 72, 164, 63, 118, 180],
-        [206, 16, 16, 16, 16, 16, 16, 16], [215, 76, 121, 186, 194, 30, 149, 67],
-        [225, 32, 106, 43, 186, 156, 104, 244], [231, 244, 244, 244, 244, 244, 244, 244],
-        [243, 109, 141, 91, 16, 16, 16, 235], [243, 150, 190, 78, 165, 162, 16, 58],
-        [244, 16, 244, 244, 16, 3, 44, 65], [244, 122, 209, 244, 144, 174, 242, 244],
-        [244, 151, 16, 229, 21, 169, 190, 39], [244, 244, 8, 230, 211, 92, 206, 33],
-        [244, 244, 13, 26, 244, 244, 244, 244], [244, 244, 66, 244, 158, 223, 218, 83],
-        [244, 244, 244, 23, 244, 244, 189, 244], [244, 244, 244, 60, 244, 244, 244, 244],
-        [244, 244, 244, 244, 16, 16, 16, 16], [244, 244, 244, 244, 218, 18, 238, 244],
-        [244, 244, 244, 244, 244, 244, 244, 244], [244, 246, 89, 220, 16, 16, 16, 16],
-        [253, 244, 244, 244, 244, 244, 244, 244],
+        [0, 252, 121, 172, 14, 172, 172, 172], [13, 51, 125, 172, 79, 35, 166, 172],
+        [15, 15, 7, 15, 221, 27, 76, 138], [15, 15, 10, 15, 15, 15, 15, 15],
+        [15, 15, 11, 108, 247, 194, 172, 172], [15, 15, 15, 15, 8, 96, 91, 104],
+        [15, 15, 15, 15, 15, 15, 15, 15], [15, 15, 15, 15, 15, 15, 15, 172],
+        [15, 15, 15, 15, 15, 15, 15, 193], [15, 15, 15, 15, 15, 15, 15, 210],
+        [15, 15, 15, 15, 15, 15, 15, 214], [15, 15, 15, 15, 15, 15, 47, 238],
+        [15, 15, 15, 15, 15, 15, 188, 172], [15, 15, 15, 15, 15, 181, 172, 172],
+        [15, 15, 15, 15, 192, 45, 15, 15], [15, 15, 15, 15, 207, 15, 15, 15],
+        [15, 15, 15, 15, 209, 153, 172, 172], [15, 15, 15, 15, 215, 5, 232, 110],
+        [15, 15, 15, 145, 172, 77, 33, 218], [15, 15, 15, 176, 15, 170, 172, 172],
+        [15, 15, 15, 187, 179, 172, 172, 172], [15, 15, 15, 191, 15, 15, 15, 15],
+        [15, 15, 15, 213, 172, 172, 172, 172], [15, 15, 182, 251, 15, 15, 15, 15],
+        [15, 15, 230, 61, 235, 236, 237, 234], [15, 22, 88, 19, 20, 189, 244, 248],
+        [15, 103, 161, 172, 172, 172, 172, 172], [15, 158, 15, 171, 172, 172, 87, 245],
+        [15, 177, 118, 151, 205, 126, 15, 164], [15, 178, 172, 172, 172, 172, 172, 172],
+        [15, 179, 205, 205, 195, 172, 172, 172], [15, 200, 15, 15, 15, 175, 172, 172],
+        [15, 224, 63, 225, 90, 17, 15, 15], [15, 228, 15, 188, 92, 16, 204, 18],
+        [15, 229, 25, 119, 133, 134, 1, 165], [26, 37, 15, 80, 5, 4, 204, 115],
+        [30, 211, 40, 208, 120, 132, 239, 180], [59, 5, 23, 60, 15, 15, 15, 15],
+        [67, 157, 68, 139, 66, 58, 99, 136], [75, 128, 69, 106, 71, 143, 74, 167],
+        [78, 254, 15, 212, 172, 207, 172, 172], [82, 122, 192, 130, 117, 172, 6, 172],
+        [94, 172, 44, 196, 70, 156, 172, 172], [105, 226, 31, 217, 48, 15, 28, 243],
+        [111, 93, 109, 172, 172, 172, 172, 172], [127, 102, 190, 154, 208, 137, 186, 172],
+        [147, 149, 53, 43, 216, 50, 72, 107], [148, 12, 15, 202, 32, 15, 233, 52],
+        [150, 172, 172, 172, 97, 183, 172, 172], [152, 206, 15, 64, 41, 101, 220, 89],
+        [172, 15, 172, 172, 15, 3, 159, 142], [172, 54, 15, 214, 113, 34, 0, 163],
+        [172, 83, 241, 172, 62, 29, 179, 172], [172, 172, 24, 185, 242, 112, 231, 168],
+        [172, 172, 55, 197, 172, 172, 172, 172], [172, 172, 141, 172, 46, 177, 243, 123],
+        [172, 172, 172, 124, 172, 172, 203, 172], [172, 172, 172, 172, 15, 15, 15, 15],
+        [172, 172, 172, 172, 172, 172, 172, 172], [172, 172, 172, 172, 243, 9, 180, 172],
+        [172, 172, 172, 199, 172, 172, 172, 172], [172, 249, 116, 2, 15, 15, 15, 15],
+        [191, 172, 172, 172, 172, 172, 172, 172], [200, 172, 172, 172, 172, 172, 172, 172],
+        [201, 172, 172, 172, 172, 172, 172, 172], [209, 56, 0, 129, 38, 42, 15, 198],
+        [209, 95, 65, 114, 15, 15, 15, 250], [211, 172, 30, 85, 81, 174, 36, 155],
+        [211, 192, 172, 146, 202, 73, 184, 172], [222, 223, 15, 135, 39, 144, 86, 21],
+        [226, 15, 15, 15, 15, 15, 15, 15], [227, 5, 162, 211, 172, 172, 172, 172],
+        [231, 15, 15, 15, 15, 15, 15, 15], [240, 131, 84, 173, 219, 253, 57, 140],
+        [246, 169, 98, 160, 173, 49, 100, 172],
     ];
-    static BITSET_CANONICAL: [u64; 186] = [
-        0b1111111111111111111111111111111111111111111111111111111111111110,
-        0b1111111111111111111111111111111111111111111111111111100111111111,
-        0b1111111111111111111111111111111111111111111111111110000000000000,
+    static BITSET_CANONICAL: [u64; 172] = [
+        0b0111111111111111111111111111111111111111111111111111111111111111,
+        0b1111111111001111111111111111111111111111111111111111111111111111,
+        0b1111111101111111111111111111111111111111011111111111111111111111,
         0b1111111111111111111111111111111111111111111111111000011111111111,
+        0b1111111111111111111111111111111111111111111111111110000000000000,
         0b1111111111111111111111111111111111111111111111110000000000000000,
-        0b1111111111111111111111011111111111111111111111111111110111111111,
         0b1100000011111111111111111111111111111111111111111111111111111111,
         0b1111111111111111111111111111111111111111111111111111110000000011,
+        0b1111111111111111111111111111111100111111001111111111111111111111,
+        0b1111111111111111000000111111111111111111111111110000001111111111,
+        0b1111111111111111000000000000001111111111111111111111111111111111,
+        0b1111111111111111000000000000000000111111111111111111111111111111,
+        0b1000111111110000011111111111111111111111111111111111111111111111,
+        0b0111111101111111111111111111111111111111111111111111110111111111,
+        0b0000000000000000000001111111111111100111111111111111111111111111,
+        0b1111111111111111111111111111111111111111111111111111111111111111,
+        0b1111111111111111111111111111111111111111111111111111111111011011,
+        0b1111111111111111111111111111111111111111111111011111110001011111,
+        0b1111111111111111111111111111111111111111111110000000000000000000,
+        0b1111111111111111111111111111111111111111011111111111111100111101,
+        0b1111111111111111111111111111111111111111001111011111111111111111,
+        0b1111111111111111111111111111111101111111011111110111111101111111,
+        0b1111111111111111111111111111111100111101011111110011110111111111,
+        0b1111111111111111111111111111111100111100000000001111111111111111,
         0b1111111111111111111111111111111100011111111111111111111111111111,
+        0b1111111111111111111111111111111100000111111111111111111111111110,
+        0b1111111111111111111111111111111100000111111111110000000000000000,
+        0b1111111111111111111111111111111100000010011111111111111111111111,
         0b1111111111111111111111111111111100000000000000000111111111111111,
+        0b1111111111111111111111111111111100000000000000000100001111100000,
+        0b1111111111111111111111111111111100000000000000000000000000000000,
+        0b1111111111111111111111111111111011100000011111111111111111111111,
+        0b1111111111111111111111111111110011111111100000000000000000000000,
+        0b1111111111111111111111111111101111111111111111111101011101000000,
+        0b1111111111111111111111111100000000000111111111111111111111111110,
+        0b1111111111111111111111011011111100000000000000000000000011001011,
+        0b1111111111111111111111001111111100000000000000000000000000000000,
+        0b1111111111111111110000000000000011111110111111111111111111111111,
+        0b1111111111111111011111110111111100000000011111100111111001111110,
+        0b1111111111111111001000001011111111111111111111111111111111111111,
         0b1111111111111111000001111111111111111111111111111111111111111111,
-        0b1111111111111111000000000000001111111111111111111111111111111111,
-        0b1111111111111111000000000000000000111111111111111111111111111111,
+        0b1111111111111111000001111111111111111111111111111111110000000000,
+        0b1111111111111111000000111111111111110111111111111111111111111111,
+        0b1111111111111111000000111111100011111111111100000000000011111111,
+        0b1111111111111111000000011111111110111111111111111011110101111111,
+        0b1111111111111111000000001111000000000000000001110000000000000000,
+        0b1111111111111111000000001000000000011111111111111111111111111111,
+        0b1111111111111111000000000000111111111111111111111111111111111111,
+        0b1111111111111110111111111111111111111111111111111111111111100000,
+        0b1111111111111110000111111111111111111111111111111111111011111111,
+        0b1111111111111110000000000000111111111111111000011101111111111111,
+        0b1111111111111100000000000000000000000000000000000000000000000001,
+        0b1111111111100000000000000000000000000000000000000000011111111100,
+        0b1111111111011111111111111111111100000000000000000000000000000000,
+        0b1111111111011111000000000000000000000000000000000000000000000000,
         0b1111111111000000000000000000000000000000000000000000000000000000,
+        0b1111110001111111111111111111111100000000000000000011111111111111,
+        0b1111110000000000111100111111111111111111111111111111111111111111,
+        0b1111110000000000000000000000111110000000111100000101110111011111,
+        0b1111100101111111111111111111111111111111111111111111111111111111,
+        0b1111011111111111111111111111111111111111111111110010000010111111,
+        0b1111011111111111111111111111111111110111111111111111111111111101,
+        0b1111001111111111101111010101000000111110001011111111110010000100,
+        0b1110101111111111110111100110010011011111111111111111111111111111,
+        0b1110100011111100000000000000000000000000000000000000000000101111,
+        0b1110011111111111111111111111111111111111111111110000000111111111,
+        0b1110011111111111111111111111111111111111111111011101111111111111,
+        0b1110001111111111111111011111111111111111111111011101111111101111,
+        0b1110001111101111111111011111111111111111111111011101111111101111,
+        0b1110001111101101111111011111111111111111111110111011111111101110,
+        0b1110001111101101111111011111111111111111111110011001111111101111,
+        0b1110001111101101111111011111111111111111111110011001111111101110,
+        0b1110001111000101111111011111111111111111111110011001111111101111,
+        0b1110000011111111111111111111100000000000000000000000000000001111,
+        0b1100001111111111110001110001100011010110001111011100011111101100,
+        0b1100001101101101111111011111111111111111111110011000011111101110,
+        0b1011111111111111000000000000000000000000000000000000000111111111,
+        0b1011110011011111000000000000000000000000000000000000000000100000,
+        0b1011011111111111111111110111111111111111111111111110111111111111,
+        0b1011010001111111111111111111111111111111111111111111101101111111,
+        0b1001110000000000111000011111111000011111111011111111111111111111,
+        0b1001100110111111111111111111111111111111011011111111001001111111,
+        0b1001000110111111111111111111111111111111111111111111110100111111,
+        0b1000000000000010000000000000000000000000000000000000000000000000,
+        0b1000000000000000000000001000000000000000000000000000000000000000,
         0b1000000000000000000000000000000011111111111111111111111111111111,
-        0b0000000111111111111111111111111111111111111111111111111111111100,
-        0b1111111111111111111111111111111111111111111111111111111111111111,
-        0b1111111111111111111111111111111100111111001111111111111111111111,
-        0b1111111111111111000000111111111111111111111111110000001111111111,
-        0b1111111111111111000000000000111111111111111111111111111111111111,
+        0b0111111101111111011111110111111100000000011111111111111111111111,
+        0b0111111100111111111111111111111111111111111111111111111111111111,
+        0b0111111100111101111111111111111111111111111111110011110111111111,
+        0b0111110000000000111111111111111100000000000000001000000000000000,
+        0b0111101111111111111111111111111111011111110111111110011110111111,
+        0b0101111111011111111111111111111111111111111111111111111111111111,
+        0b0101111101111111111111011111111111100000111110000000000001111111,
+        0b0101111011110111111101111001011010101010100101101110101010000100,
+        0b0100000010011111111111111111111111111111111110111111111111111111,
+        0b0011111111111111111111111111111111111100000000001110000000000000,
+        0b0011111111111111111111111111111110101010111111110011111100111111,
+        0b0011111110000000000111111111111111111111111111111111111111111111,
+        0b0011101111111111111111111010111111111111111111111111011111010110,
+        0b0010111111111011111111111111111111111100011111111111111111101110,
+        0b0001111111111111111111111111111111111110111111111111111100000011,
+        0b0001111111111111111111111111111100000000000001111111111111111111,
         0b0001111111111111111111111111111100000000000000000000000000000000,
+        0b0001111111111111000001111111111111111111111111111111111111111111,
+        0b0001111111011100000111111111111100001111110011110001111111011100,
+        0b0001111100111110000000111111111000000000000000000000000011100000,
+        0b0001111000000000000000000000111100000000000000010001101110111111,
+        0b0001000000000011000000000000111110110000100000000101100110011111,
+        0b0000111111111111111111111111111111111111000011111111111111111111,
+        0b0000111111111111111110111110111000001111111111111111101111111111,
+        0b0000111111111111000000000000000000000000000000000000000011111111,
+        0b0000101011110111111111101001011011111111111111111111111111101111,
+        0b0000011111111111111111111111111111111111111111110000011111111111,
         0b0000011111111111111111111111111000000000000000000000000000000000,
-        0b0000000111111111111111111111111111111111111111111111111111111111,
+        0b0000010001101111110111100000000000000000000000000000000000000000,
+        0b0000010000110000000001111111111111111111111111111111110000000000,
+        0b0000010000100000000001000000000000000000000000000000000000000000,
+        0b0000001111111111111111111111111100000000001111111111111111111111,
+        0b0000000111111111111111111111111111111111111111111111111111111100,
+        0b0000000111111111110001111111111111111111111111111111111111111111,
+        0b0000000111111111000011111111111101111111111111111111111111111111,
+        0b0000000100111111111111111111111111111111111111111111111111111111,
+        0b0000000001111111111111111111111100000000001111111111111111111111,
+        0b0000000001111111111111111111111100000000000000000000000000011111,
         0b0000000001111111111111111111111100000000000000000000000000000000,
-        0b0000000000011111111111111111111111111111111111111111111111111111,
+        0b0000000001111111111111101111111111111111111111001111111111111111,
+        0b0000000001000111111111111111111111111111111111110000000011110000,
+        0b0000000000111111111111111111111111111110111011111111000001101111,
+        0b0000000000111111000000000000000001011110000000100001100110000111,
+        0b0000000000111100111111111111111100111000000000000000000000000101,
+        0b0000000000110111111111111111111100000000000000000000000000000000,
+        0b0000000000011111111111111111111001111111111111111111111111111111,
+        0b0000000000011111001111111111111111111111111111110000000000000000,
+        0b0000000000001111111111111111111100000000000011111101111111111111,
+        0b0000000000001101110111111111111100000000000011111111111111111111,
+        0b0000000000001100011110000001111111111111111111111111111111111111,
+        0b0000000000001100000000000000000011111111010111111000000001111111,
+        0b0000000000000111111111111111111100000000001111111111111111111111,
+        0b0000000000000111100001111111111111111111111111110000000010110110,
+        0b0000000000000110000000000000111101000000011000000001110111011111,
+        0b0000000000000011111111111011111111111111111111111111111111111111,
+        0b0000000000000011000110111111111111111111111111111111111111111111,
+        0b0000000000000011000000000000101100000000000000000000000000000000,
+        0b0000000000000010000000000000111110110000110000000001100110011111,
+        0b0000000000000000100000001111111111111111111111111111111111111111,
+        0b0000000000000000010100000001111100000000000000111111111111000011,
         0b0000000000000000001111111111111111111111111111110000000000000000,
-        0b0000000000000000000000111111111111111111111111111111111111111111,
-        0b0000000000000000000000000000000000000000000000000000000000010001,
-        0b0000000000000000000000000000000000000000000000000000000010110011,
-        0b0000000000000000000000000000000000000000000000000000100010001111,
-        0b0000000000000000000000000000000000000000000000000000111111101111,
-        0b0000000000000000000000000000000000000000000000000000111111110111,
-        0b0000000000000000000000000000000000000000000000000010000001111111,
-        0b0000000000000000000000000000000000000000001111101111111100001111,
-        0b0000000000000000000000000000000000000000100000010001110111000111,
-        0b0000000000000000000000000000000000000001011110110111111111111111,
-        0b0000000000000000000000000000000000000111111111111111111111111111,
-        0b0000000000000000000000000000000000010000100000000000000111111111,
-        0b0000000000000000000000000000000000010100000000001100000000011110,
-        0b0000000000000000000000000000000000011100111111001111110011111100,
-        0b0000000000000000000000000000000000100000111111111111111111111111,
-        0b0000000000000000000000000000000000111111111111110011111111111111,
-        0b0000000000000000000000000000000001000011111111110000000111111111,
-        0b0000000000000000000000000000000011110000000000000010000001011111,
-        0b0000000000000000000000000000000011111111111111111000000011111111,
-        0b0000000000000000000000000000001110000000000000000000011110111011,
-        0b0000000000000000000000000000111100000111011000000001110111011111,
-        0b0000000000000000000000000000111111100000100000010001100110011111,
-        0b0000000000000000000000000000111111111111111111111111111111111111,
-        0b0000000000000000000000000001101011111100111111111111111111111111,
-        0b0000000000000000000000000001111111111111111111111111111011111111,
-        0b0000000000000000000000001111111100000000001111111111111111111111,
-        0b0000000000000000000000001111111111111111111111111111111110111111,
-        0b0000000000000000000000001111111111111111111111111111111111111111,
-        0b0000000000000000000000011111111111111111111111110000000000000000,
-        0b0000000000000000000001111101101111111001111111111111111101111111,
-        0b0000000000000000000001111111111100000001111111111111111111111111,
-        0b0000000000000000000001111111111111100111111111111111111111111111,
-        0b0000000000000000000001111111111111111111111111111111111111111111,
-        0b0000000000000000000011000000000011111111111111110001111111111111,
-        0b0000000000000000000011111111111111111111111111111111111111111111,
         0b0000000000000000000111111111111111111100111111111111111111111111,
-        0b0000000000000000010100000001111100000000000000111111111111000011,
-        0b0000000000000000100000001111111111111111111111111111111111111111,
-        0b0000000000000010000000000000111110110000110000000001100110011111,
-        0b0000000000000011000000000000101100000000000000000000000000000000,
-        0b0000000000000011000110111111111111111111111111111111111111111111,
-        0b0000000000000011111111111011111111111111111111111111111111111111,
-        0b0000000000000110000000000000111101000000011000000001110111011111,
-        0b0000000000000111100001111111111111111111111111110000000010110110,
-        0b0000000000000111111111111111111100000000001111111111111111111111,
-        0b0000000000001100000000000000000011111111010111111000000001111111,
-        0b0000000000001100011110000001111111111111111111111111111111111111,
-        0b0000000000001101110111111111111100000000000011111111111111111111,
-        0b0000000000001111111111111111111100000000000011111101111111111111,
-        0b0000000000011111001111111111111111111111111111110000000000000000,
-        0b0000000000011111111111111111111001111111111111111111111111111111,
-        0b0000000000110111111111111111111100000000000000000000000000000000,
-        0b0000000000111100111111111111111100111000000000000000000000000101,
-        0b0000000000111111000000000000000001011110000000100001100110000111,
-        0b0000000000111111111111111111111111111110111011111111000001101111,
-        0b0000000001000111111111111111111111111111111111110000000011110000,
-        0b0000000001111111111111101111111111111111111111001111111111111111,
-        0b0000000001111111111111111111111100000000000000000000000000011111,
-        0b0000000001111111111111111111111100000000001111111111111111111111,
-        0b0000000100111111111111111111111111111111111111111111111111111111,
-        0b0000000111111111000011111111111101111111111111111111111111111111,
-        0b0000000111111111110001111111111111111111111111111111111111111111,
-        0b0000001111111111111111111111111100000000001111111111111111111111,
-        0b0000010000100000000001000000000000000000000000000000000000000000,
-        0b0000010000110000000001111111111111111111111111111111110000000000,
-        0b0000010001101111110111100000000000000000000000000000000000000000,
-        0b0000011111111111111111111111111111111111111111110000011111111111,
-        0b0000101011110111111111101001011011111111111111111111111111101111,
-        0b0000111111111111000000000000000000000000000000000000000011111111,
-        0b0000111111111111111110111110111000001111111111111111101111111111,
-        0b0000111111111111111111111111111111111111000011111111111111111111,
-        0b0000111111111111111111111111111111111111111111111111100001111111,
-        0b0001000000000011000000000000111110110000100000000101100110011111,
-        0b0001111000000000000000000000111100000000000000010001101110111111,
-        0b0001111100111110000000111111111000000000000000000000000011100000,
-        0b0001111111011100000111111111111100001111110011110001111111011100,
-        0b0001111111111111000001111111111111111111111111111111111111111111,
-        0b0001111111111111111111111111111100000000000001111111111111111111,
-        0b0001111111111111111111111111111111111110111111111111111100000011,
-        0b0010111111111011111111111111111111111100011111111111111111101110,
-        0b0011101111111111111111111010111111111111111111111111011111010110,
-        0b0011111110000000000111111111111111111111111111111111111111111111,
-        0b0011111111111111111111111111111110101010111111110011111100111111,
-        0b0011111111111111111111111111111111111100000000001110000000000000,
-        0b0100000010011111111111111111111111111111111110111111111111111111,
-        0b0101111011110111111101111001011010101010100101101110101010000100,
-        0b0101111101111111111111011111111111100000111110000000000001111111,
-        0b0101111111011111111111111111111111111111111111111111111111111111,
-        0b0111101111111111111111111111111111011111110111111110011110111111,
-        0b0111110000000000111111111111111100000000000000001000000000000000,
-        0b0111111100111101111111111111111111111111111111110011110111111111,
-        0b0111111100111111111111111111111111111111111111111111111111111111,
-        0b0111111101111111011111110111111100000000011111111111111111111111,
-        0b0111111101111111111111111111111111111111111111111111110111111111,
-        0b0111111111100111111111111111111111111111111111111111111111111111,
-        0b1000000000000000000000001000000000000000000000000000000000000000,
-        0b1000000000000010000000000000000000000000000000000000000000000000,
-        0b1000111111110000011111111111111111111111111111111111111111111111,
-        0b1001000110111111111111111111111111111111111111111111110100111111,
-        0b1001100110111111111111111111111111111111011011111111001001111111,
-        0b1001110000000000111000011111111000011111111011111111111111111111,
-        0b1011010001111111111111111111111111111111111111111111101101111111,
-        0b1011011111111111111111110111111111111111111111111110111111111111,
-        0b1011110011011111000000000000000000000000000000000000000000100000,
-        0b1011111111111111000000000000000000000000000000000000000111111111,
-        0b1100001101101101111111011111111111111111111110011000011111101110,
-        0b1100001111111111110001110001100011010110001111011100011111101100,
-        0b1110000011111111111111111111100000000000000000000000000000001111,
-        0b1110001111000101111111011111111111111111111110011001111111101111,
-        0b1110001111101101111111011111111111111111111110011001111111101110,
-        0b1110001111101101111111011111111111111111111110011001111111101111,
-        0b1110001111101101111111011111111111111111111110111011111111101110,
-        0b1110001111101111111111011111111111111111111111011101111111101111,
-        0b1110001111111111111111011111111111111111111111011101111111101111,
-        0b1110011111111111111111111111111111111111111111011101111111111111,
-        0b1110011111111111111111111111111111111111111111110000000111111111,
-        0b1110100011111100000000000000000000000000000000000000000000101111,
-        0b1110101111111111110111100110010011011111111111111111111111111111,
-        0b1111001111111111101111010101000000111110001011111111110010000100,
-        0b1111011111111111111111111111111111110111111111111111111111111101,
-        0b1111011111111111111111111111111111111111111111110010000010111111,
-        0b1111100101111111111111111111111111111111111111111111111111111111,
-        0b1111110000000000000000000000111110000000111100000101110111011111,
-        0b1111110000000000111100111111111111111111111111111111111111111111,
-        0b1111110001111111111111111111111100000000000000000011111111111111,
-        0b1111111111011111000000000000000000000000000000000000000000000000,
-        0b1111111111011111111111111111111100000000000000000000000000000000,
-        0b1111111111100000000000000000000000000000000000000000011111111100,
-        0b1111111111111100000000000000000000000000000000000000000000000001,
-        0b1111111111111110000000000000111111111111111000011101111111111111,
-        0b1111111111111110000111111111111111111111111111111111111011111111,
-        0b1111111111111110111111111111111111111111111111111111111111100000,
-        0b1111111111111111000000001000000000011111111111111111111111111111,
-        0b1111111111111111000000001111000000000000000001110000000000000000,
-        0b1111111111111111000000011111111110111111111111111011110101111111,
-        0b1111111111111111000000111111100011111111111100000000000011111111,
-        0b1111111111111111000000111111111111110111111111111111111111111111,
-        0b1111111111111111000001111111111111111111111111111111110000000000,
-        0b1111111111111111001000001011111111111111111111111111111111111111,
-        0b1111111111111111011111110111111100000000011111100111111001111110,
-        0b1111111111111111110000000000000011111110111111111111111111111111,
-        0b1111111111111111111111001111111100000000000000000000000000000000,
-        0b1111111111111111111111011011111100000000000000000000000011001011,
-        0b1111111111111111111111111100000000000111111111111111111111111110,
-        0b1111111111111111111111111111101111111111111111111101011101000000,
-        0b1111111111111111111111111111110011111111100000000000000000000000,
-        0b1111111111111111111111111111111011100000011111111111111111111111,
-        0b1111111111111111111111111111111100000000000000000000000000000000,
-        0b1111111111111111111111111111111100000000000000000100001111100000,
-        0b1111111111111111111111111111111100000010011111111111111111111111,
-        0b1111111111111111111111111111111100000111111111110000000000000000,
-        0b1111111111111111111111111111111100000111111111111111111111111110,
-        0b1111111111111111111111111111111100111100000000001111111111111111,
-        0b1111111111111111111111111111111100111101011111110011110111111111,
-        0b1111111111111111111111111111111101111111011111110111111101111111,
-        0b1111111111111111111111111111111111111111001111011111111111111111,
-        0b1111111111111111111111111111111111111111011111111111111100111101,
-        0b1111111111111111111111111111111111111111111110000000000000000000,
-        0b1111111111111111111111111111111111111111111111011111110001011111,
-        0b1111111111111111111111111111111111111111111111111111111111011011,
+        0b0000000000000000000011000000000011111111111111110001111111111111,
+        0b0000000000000000000001111111111100000001111111111111111111111111,
+        0b0000000000000000000001111101101111111001111111111111111101111111,
+        0b0000000000000000000000011111111111111111111111110000000000000000,
+        0b0000000000000000000000001111111111111111111111111111111110111111,
+        0b0000000000000000000000001111111100000000001111111111111111111111,
+        0b0000000000000000000000000001111111111111111111111111111011111111,
+        0b0000000000000000000000000001101011111100111111111111111111111111,
+        0b0000000000000000000000000000111111100000100000010001100110011111,
+        0b0000000000000000000000000000111100000111011000000001110111011111,
+        0b0000000000000000000000000000001110000000000000000000011110111011,
+        0b0000000000000000000000000000000011111111111111111000000011111111,
+        0b0000000000000000000000000000000011110000000000000010000001011111,
+        0b0000000000000000000000000000000001000011111111110000000111111111,
+        0b0000000000000000000000000000000000100000111111111111111111111111,
+        0b0000000000000000000000000000000000011100111111001111110011111100,
+        0b0000000000000000000000000000000000010100000000001100000000011110,
+        0b0000000000000000000000000000000000010000100000000000000111111111,
+        0b0000000000000000000000000000000000000001011110110111111111111111,
+        0b0000000000000000000000000000000000000000100000010001110111000111,
+        0b0000000000000000000000000000000000000000001111101111111100001111,
+        0b0000000000000000000000000000000000000000000000000010000001111111,
+        0b0000000000000000000000000000000000000000000000000000100010001111,
+        0b0000000000000000000000000000000000000000000000000000000010110011,
     ];
-    static BITSET_MAPPING: [(u8, u8); 69] = [
-        (0, 128), (0, 142), (0, 175), (0, 176), (0, 63), (0, 60), (0, 59), (0, 54), (0, 52),
-        (0, 51), (0, 48), (0, 47), (0, 31), (0, 21), (0, 4), (1, 53), (1, 43), (1, 37), (1, 36),
-        (1, 29), (1, 21), (1, 7), (2, 128), (2, 144), (2, 51), (2, 32), (3, 181), (3, 49), (3, 33),
-        (3, 17), (4, 128), (4, 48), (4, 176), (4, 16), (5, 14), (5, 12), (5, 6), (6, 136), (6, 160),
-        (6, 3), (7, 54), (7, 38), (8, 163), (8, 32), (9, 177), (9, 32), (10, 149), (10, 16),
-        (11, 16), (11, 133), (12, 162), (12, 32), (13, 10), (13, 128), (14, 160), (14, 1),
-        (15, 135), (15, 62), (16, 128), (17, 32), (18, 17), (19, 16), (20, 32), (21, 31), (22, 135),
-        (23, 137), (24, 139), (25, 48), (26, 150),
+    static BITSET_MAPPING: [(u8, u8); 83] = [
+        (0, 191), (0, 65), (0, 188), (0, 187), (0, 186), (0, 185), (0, 184), (0, 182), (0, 181),
+        (0, 180), (0, 178), (0, 79), (0, 175), (0, 174), (0, 173), (0, 169), (0, 165), (0, 164),
+        (0, 162), (0, 161), (0, 160), (0, 158), (0, 155), (0, 151), (0, 150), (0, 149), (0, 148),
+        (0, 147), (0, 144), (0, 112), (0, 143), (0, 113), (0, 141), (0, 140), (0, 139), (0, 138),
+        (0, 137), (0, 136), (0, 135), (0, 134), (0, 132), (0, 131), (0, 130), (0, 129), (0, 61),
+        (0, 60), (0, 55), (0, 53), (0, 52), (0, 49), (0, 48), (0, 32), (0, 22), (0, 5), (0, 1),
+        (1, 129), (1, 58), (1, 57), (1, 50), (1, 42), (1, 28), (1, 21), (2, 180), (2, 30), (2, 24),
+        (2, 18), (3, 132), (3, 33), (3, 17), (4, 80), (4, 32), (5, 112), (5, 16), (6, 96), (6, 3),
+        (7, 38), (8, 32), (9, 17), (10, 69), (11, 32), (12, 187), (13, 179), (14, 141),
     ];
 
     pub fn lookup(c: char) -> bool {
@@ -276,185 +263,181 @@ pub fn lookup(c: char) -> bool {
 
 #[rustfmt::skip]
 pub mod case_ignorable {
-    static BITSET_LAST_CHUNK_MAP: (u16, u8) = (1792, 24);
+    static BITSET_LAST_CHUNK_MAP: (u16, u8) = (1792, 2);
     static BITSET_CHUNKS_MAP: [u8; 250] = [
-        12, 31, 34, 4, 7, 15, 22, 13, 17, 46, 50, 41, 28, 3, 11, 47, 8, 50, 50, 50, 50, 50, 29, 27,
-        14, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50,
-        50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50,
-        50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 26, 50, 35, 25, 6, 10, 50, 50, 50, 50, 50, 50, 50,
-        50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50,
-        50, 50, 50, 50, 50, 50, 50, 50, 50, 42, 50, 9, 49, 36, 50, 50, 50, 19, 43, 33, 23, 16, 1,
-        20, 51, 18, 21, 37, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 2, 50, 50, 50, 50, 50, 50, 50,
-        50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 39, 50, 45, 50,
-        50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50,
-        50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 32, 50, 50, 50, 50, 50, 50, 50, 50,
-        50, 44, 30, 50, 50, 50, 0, 50, 50, 5, 38, 50, 50, 40, 50, 50, 50, 50, 48,
+        14, 28, 47, 22, 19, 11, 4, 13, 9, 40, 39, 32, 49, 23, 15, 36, 18, 39, 39, 39, 39, 39, 27,
+        26, 12, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39,
+        39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39,
+        39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 25, 39, 30, 24, 20, 16, 39, 39, 39, 39, 39, 39,
+        39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39,
+        39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 33, 39, 17, 38, 31, 39, 39, 39, 7, 41, 46, 3, 10, 1,
+        6, 51, 8, 5, 42, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 50, 39, 39, 39, 39, 39, 39, 39, 39,
+        39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 44, 39, 35, 39, 39,
+        39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39,
+        39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 29, 39, 39, 39, 39, 39, 39, 39, 39, 39,
+        34, 48, 39, 39, 39, 0, 39, 39, 21, 43, 39, 39, 45, 39, 39, 39, 39, 37,
     ];
     static BITSET_INDEX_CHUNKS: [[u8; 8]; 52] = [
-        [2, 69, 56, 174, 174, 174, 174, 174], [4, 33, 106, 18, 174, 174, 111, 182],
-        [16, 174, 174, 174, 174, 174, 174, 174], [27, 109, 122, 128, 90, 63, 51, 61],
-        [29, 58, 174, 53, 121, 165, 5, 94], [45, 174, 174, 174, 168, 174, 174, 174],
-        [49, 174, 174, 105, 163, 167, 96, 44], [54, 159, 174, 127, 89, 60, 86, 99],
-        [55, 104, 30, 59, 174, 174, 174, 174], [57, 23, 174, 144, 98, 177, 146, 84],
-        [72, 88, 117, 71, 174, 47, 174, 50], [75, 15, 174, 79, 123, 76, 126, 0],
-        [80, 176, 77, 174, 174, 174, 174, 174], [82, 181, 92, 21, 78, 169, 93, 132],
-        [83, 174, 180, 3, 174, 174, 174, 174], [87, 70, 87, 118, 108, 40, 130, 20],
-        [100, 174, 174, 46, 91, 67, 174, 174], [102, 66, 31, 142, 174, 174, 174, 174],
-        [103, 28, 26, 174, 174, 174, 174, 174], [107, 174, 174, 147, 174, 174, 174, 174],
-        [110, 128, 74, 174, 48, 174, 174, 174], [113, 174, 73, 174, 112, 19, 25, 174],
-        [116, 41, 108, 39, 91, 38, 129, 24], [119, 164, 95, 134, 68, 141, 13, 22],
-        [125, 9, 174, 174, 9, 9, 9, 175], [133, 114, 154, 149, 37, 140, 158, 151],
-        [136, 174, 174, 174, 174, 174, 174, 174], [139, 174, 174, 174, 174, 174, 174, 174],
-        [153, 131, 17, 174, 85, 174, 174, 174], [174, 1, 174, 161, 174, 12, 174, 124],
-        [174, 157, 174, 174, 174, 174, 174, 174], [174, 174, 10, 9, 9, 81, 179, 174],
-        [174, 174, 42, 174, 174, 174, 174, 174], [174, 174, 148, 174, 174, 166, 174, 174],
-        [174, 174, 172, 174, 174, 34, 115, 64], [174, 174, 174, 15, 174, 174, 174, 174],
-        [174, 174, 174, 138, 174, 171, 174, 174], [174, 174, 174, 150, 174, 174, 174, 174],
-        [174, 174, 174, 156, 174, 174, 174, 174], [174, 174, 174, 170, 8, 152, 174, 174],
-        [174, 174, 174, 173, 174, 162, 174, 174], [174, 174, 174, 174, 65, 62, 97, 32],
-        [174, 174, 174, 174, 137, 174, 6, 145], [174, 174, 174, 174, 155, 174, 174, 174],
-        [174, 174, 174, 174, 174, 120, 52, 174], [174, 174, 174, 174, 174, 135, 35, 43],
-        [174, 174, 174, 174, 174, 160, 174, 174], [174, 174, 174, 174, 174, 174, 11, 101],
-        [174, 174, 174, 174, 174, 174, 174, 7], [174, 174, 174, 174, 174, 174, 174, 143],
-        [174, 174, 174, 174, 174, 174, 174, 174], [178, 174, 174, 174, 14, 131, 174, 36],
+        [3, 75, 88, 142, 142, 142, 142, 142], [5, 110, 38, 181, 142, 142, 12, 182],
+        [21, 4, 142, 142, 4, 4, 4, 160], [28, 163, 50, 131, 76, 138, 6, 120],
+        [31, 103, 14, 105, 54, 106, 124, 119], [33, 142, 17, 142, 34, 175, 118, 142],
+        [35, 123, 71, 142, 96, 142, 142, 142], [37, 142, 142, 144, 142, 142, 142, 142],
+        [41, 115, 117, 142, 142, 142, 142, 142], [42, 78, 112, 139, 142, 142, 142, 142],
+        [45, 142, 142, 98, 54, 77, 142, 142], [58, 74, 58, 29, 14, 104, 126, 122],
+        [62, 142, 180, 2, 142, 142, 142, 142], [63, 164, 53, 121, 67, 168, 52, 129],
+        [65, 177, 68, 142, 142, 142, 142, 142], [70, 16, 142, 66, 23, 69, 20, 0],
+        [72, 57, 30, 73, 142, 97, 142, 94], [87, 178, 142, 141, 47, 179, 143, 61],
+        [89, 40, 113, 85, 142, 142, 142, 142], [90, 151, 142, 19, 56, 84, 59, 46],
+        [95, 142, 142, 39, 162, 174, 49, 100], [99, 142, 142, 142, 167, 142, 142, 142],
+        [114, 86, 142, 91, 25, 158, 10, 51], [116, 36, 24, 123, 55, 81, 93, 83],
+        [130, 32, 155, 146, 159, 137, 150, 148], [133, 142, 142, 142, 142, 142, 142, 142],
+        [136, 142, 142, 142, 142, 142, 142, 142], [142, 1, 142, 153, 142, 15, 142, 22],
+        [142, 142, 26, 4, 4, 64, 176, 142], [142, 142, 102, 142, 142, 142, 142, 142],
+        [142, 142, 142, 16, 142, 142, 142, 142], [142, 142, 142, 135, 142, 170, 142, 142],
+        [142, 142, 142, 142, 79, 82, 48, 111], [142, 142, 142, 142, 134, 142, 7, 125],
+        [142, 142, 142, 142, 142, 27, 92, 142], [142, 142, 142, 142, 142, 132, 108, 101],
+        [142, 142, 142, 142, 142, 142, 13, 43], [142, 142, 142, 142, 142, 142, 142, 8],
+        [142, 142, 142, 142, 142, 142, 142, 140], [142, 142, 142, 142, 142, 142, 142, 142],
+        [142, 142, 142, 142, 142, 152, 142, 142], [142, 142, 142, 142, 156, 142, 142, 142],
+        [142, 142, 142, 147, 142, 142, 142, 142], [142, 142, 142, 157, 142, 142, 142, 142],
+        [142, 142, 142, 169, 9, 128, 142, 142], [142, 142, 142, 172, 142, 161, 142, 142],
+        [142, 142, 145, 142, 142, 173, 142, 142], [142, 142, 171, 142, 142, 109, 11, 80],
+        [142, 149, 142, 142, 142, 142, 142, 142], [154, 127, 18, 142, 60, 142, 142, 142],
+        [165, 142, 142, 142, 142, 142, 142, 142], [166, 142, 142, 142, 44, 127, 142, 107],
     ];
-    static BITSET_CANONICAL: [u64; 128] = [
+    static BITSET_CANONICAL: [u64; 123] = [
         0b1111101111111111111111111111111111111111111111111111111111111111,
         0b0011000000000000000000000000000000000000000000000000000000000000,
-        0b1111100001111111111111111111111111111111111111111111111111111111,
         0b0111000000000000000000000000000000000000000000000000000000000000,
+        0b1111100001111111111111111111111111111111111111111111111111111111,
+        0b1111111111111111111111111111111111111111111111111111111111111111,
         0b1111111100000000000000000000000000000000000000000000000000000000,
-        0b0000000000000001111111111100000000000000000000000000000000000000,
+        0b0111111111000000000000000000000000000000000000000000000000000011,
         0b1111111111111100000000000000000000000000000000000000000000000000,
         0b1111100000000000000000000000000000000000000000000000000000000000,
         0b0000000001111111000000000000000000000000000000000000000000000000,
-        0b1111111111111111111111111111111111111111111111111111111111111111,
-        0b1111111111111111000000000000000000000000000000000000000000000000,
+        0b0000000000000001111111111100000000000000000000000000000000000000,
+        0b1011111111111111111111111111111111111111111111100000000000000000,
+        0b1011000000111100000000000000000000000000000000000000000000000000,
         0b1010000000000000000000000000000000000000000000000000000000000000,
+        0b1001000000000000000000000000000000000000000000000000000000000010,
         0b1000000000000000100000000000000000000000000000000000000000000000,
-        0b0111111111000000000000000000000000000000000000000000000000000011,
-        0b0101100000000000000000000000000000000000000000000000000000000000,
         0b0011111100000000000000000000000000000000000000000000000000000000,
-        0b0000000111111111000000000000000000000000000000000000000000000000,
-        0b0000000000000000000000100000000000000000000000000000000001100000,
-        0b0000000000000000000000000000000000000000000000000000000000001101,
-        0b0000000000000000000000000000000000000000000000000000000010111111,
-        0b0000000000000000000000000000000000000000000000000010000000000001,
-        0b0000000000000000000000000000000000000000000000000011111101000000,
-        0b0000000000000000000000000000000000000000000000001001111000000000,
-        0b0000000000000000000000000000000000000000001001000000000000000000,
-        0b0000000000000000000000000000000000000000010111000000010000000000,
-        0b0000000000000000000000000000000000000000101000110000000000000000,
-        0b0000000000000000000000000000000000000011011111111111110000000000,
-        0b0000000000000000000000000000000000001001100000000000000000000000,
-        0b0000000000000000000000000000000000001110011111100000000010000000,
-        0b0000000000000000000000000000000000010111111111110000000000111111,
-        0b0000000000000000000000000000000000011111111111110000000000000000,
-        0b0000000000000000000000000000000000100000000000000010000001100100,
-        0b0000000000000000000000000000000000100000100011111111111001000000,
-        0b0000000000000000000000000000000001000000000000000000000001011100,
-        0b0000000000000000000000000000000010000010000000000000000000000000,
-        0b0000000000000000000000000000000011111111111111111000000000000000,
-        0b0000000000000000000000000000000100001100111100000000000000000000,
-        0b0000000000000000000000000000001111111111111111111111111111111111,
-        0b0000000000000000000000000000110000000000000000000010000000011110,
-        0b0000000000000000000000000000110000000000000000000011000001000000,
-        0b0000000000000000000000000000110000000000011000000010000000011110,
-        0b0000000000000000000000000000110000000000011000000011110111000001,
-        0b0000000000000000000000000000111101100000000000000000000000000000,
-        0b0000000000000000000000000001101100000000000000000000000000000000,
-        0b0000000000000000000000000110000000000000000000001000000000000000,
-        0b0000000000000000000001111101101111111001111111111111111101111111,
-        0b0000000000000000000001111111100010000000000000000000000000000000,
-        0b0000000000000000000011100000000011111000000000000000000000000000,
-        0b0000000000000000000011111011110011100000000000000000000000000000,
-        0b0000000000000000000100000110000000000000000000000000100001000100,
-        0b0000000000000000001000010010000000000000000000000000000000000000,
-        0b0000000000000000001110110011110000000000000000000000000000000011,
-        0b0000000000000000001111000000000000000000000000000000111111100111,
-        0b0000000000000000001111011111111110111111110000000000000000000000,
-        0b0000000000000000001111111111111111111111110000000000000000000000,
-        0b0000000000000000011111001001000000000011000000001111100000000000,
-        0b0000000000000000111111111111111011111000000000000000000000010000,
-        0b0000000000000000111111111111111100000000000010001111111111111111,
-        0b0000000000000001000000000000000011111111111111111111100000000001,
-        0b0000000000000001111111111111111111111111111111110000000000000000,
-        0b0000000000000010000000000000110000000000111111100010000111111110,
-        0b0000000000000011101000110100000000000000000000000000000000000000,
-        0b0000000000001100000000000000000000000000000011000000000000000000,
-        0b0000000000001111111110000000000000000000000000000000000000000100,
-        0b0000000000010000000000000000000000000000000000000000000010110110,
-        0b0000000000011100000000000000000000000000000111000000000000000000,
-        0b0000000000011110000000000000000111000011000000000000000000000000,
-        0b0000000000011111000111111100000000000000000000000000000000000001,
-        0b0000000000011111111011111000000000000000000000000000000000000111,
-        0b0000000000100000000111111111111111111111111111111111111111111111,
-        0b0000000000100011000000000000000000000000000000100011100110000110,
-        0b0000000001011000001100000000000000100000000000000000000000000010,
-        0b0000000001100110011111100000000000000000000000000000000000000000,
         0b0000000001101101111111001111111111111111111111000000000000000000,
-        0b0000000010111111001010000000000000000000000000000000000000000000,
-        0b0000000011001111111100000000000000000000000000000000000000000000,
-        0b0000000100000000000001111111111111111111111111111111111111111111,
-        0b0000000110010000101000010000000000000000000000000000000000000000,
-        0b0000001010100000000000000000000000000011000000000000000000000000,
-        0b0000001100010000001000011111110111111111111101110000000000000000,
-        0b0000010000000000010000001000000000000000000000000000000000000000,
-        0b0000010000110000111111111111111111111111111111111111111111111111,
-        0b0000011111110010000000000000000000000000000000000000000000000000,
-        0b0000100000111110001111000000000000000000000000000000000000100000,
-        0b0000111000000000000000000000100000000000000000000000000000000000,
-        0b0000111000000100000000011000011100000000000000000000000000000000,
-        0b0001000000000000000000000000000000000000000000000000000000000010,
-        0b0001000000000000000000000000000000000000000000000000000000000110,
-        0b0001000000000001000000000000000000000000000000000001000000001000,
-        0b0001010000000000000000000000000000000000000000000000000000000111,
-        0b0001011111010000000000000000000000000000000000000000000000001111,
-        0b0001100000000000000000000000000000000000000000000000000000000011,
-        0b0001111111110010000000000000000000000000000000000000000000000000,
-        0b0001111111111111111111111111111111111110111111111110000011011111,
-        0b0010010000111111111110000000000000000000000000000000000000000000,
-        0b0010011001111000000000000000000000000000000000000000000000000011,
-        0b0011001111001000000000000000000000000000000000000000000000000111,
-        0b0011111110110000000000000000000000000000000000000000000000000000,
-        0b0100000000000000000000000000000000000100000000000100000010000000,
-        0b0100000000000000000000000000110000000000000000000010000000011110,
-        0b0100000011010011100000000000000000000000000000000000000000000000,
-        0b0110000000000000111000000000000011100000000000001110000000000011,
-        0b0110011011111101111000000000000000000000000000000000000000000000,
-        0b0111100111111000000000000000000000000000000000000000011111111110,
-        0b1000000000000010111111111101111100000000000000000000000000000000,
-        0b1000000000000011111111111111111100000000000000000000000000110000,
-        0b1000010111111000000000000000000000000000000000000000000000000000,
-        0b1000011100000000000000000000000000000000000000001111000001101110,
-        0b1001000000000000000000000000000000000000000000000000000000000010,
-        0b1001111111111000000111111110010101111111010000000000000000000000,
-        0b1010011111111000000000000000000000000000000000000000000000000000,
-        0b1011000000111100000000000000000000000000000000000000000000000000,
-        0b1011010001111110000000000000000000000000000000000000000000000000,
-        0b1011111101111111000000000000000000000000000000000000000000000000,
-        0b1011111111110111100000000000000000000000000000000000000000000000,
-        0b1011111111111111111111111111111111111111111111100000000000000000,
-        0b1100000000000000000000000000000000000000000000000000000000010001,
-        0b1100000110011101000000000000000000000000000000000000000000000000,
-        0b1111110000000000000000000000110000000000000000000010000110111110,
-        0b1111111100000000000000000000000000000000000000000000000000000010,
-        0b1111111111111000000000111000000000000000000000000000000000000000,
-        0b1111111111111111000000000000000000000000000000101000000000000000,
-        0b1111111111111111000000001000000000000000000000000000000000000000,
-        0b1111111111111111111100000000000000000000000000000000000000000000,
-        0b1111111111111111111111111111111100000000000000000000000000000000,
-        0b1111111111111111111111111111111100000000000000000000000000000010,
-        0b1111111111111111111111111111111111111000000000000000000000000000,
+        0b0000000000000000000000100000000000000000000000000000000001100000,
         0b1111111111111111111111111111111111111111111110000000000000000000,
+        0b1111111111111111111111111111111111111000000000000000000000000000,
+        0b1111111111111111111111111111111100000000000000000000000000000010,
+        0b1111111111111111111111111111111100000000000000000000000000000000,
+        0b1111111111111111111100000000000000000000000000000000000000000000,
+        0b1111111111111111000000001000000000000000000000000000000000000000,
+        0b1111111111111111000000000000000000000000000000101000000000000000,
+        0b1111111111111111000000000000000000000000000000000000000000000000,
+        0b1111111111111000000000111000000000000000000000000000000000000000,
+        0b1111111100000000000000000000000000000000000000000000000000000010,
+        0b1111110000000000000000000000110000000000000000000010000110111110,
+        0b1100000110011101000000000000000000000000000000000000000000000000,
+        0b1100000000000000000000000000000000000000000000000000000000010001,
+        0b1011111111110111100000000000000000000000000000000000000000000000,
+        0b1011111101111111000000000000000000000000000000000000000000000000,
+        0b1011010001111110000000000000000000000000000000000000000000000000,
+        0b1010011111111000000000000000000000000000000000000000000000000000,
+        0b1001111111111000000111111110010101111111010000000000000000000000,
+        0b1000011100000000000000000000000000000000000000001111000001101110,
+        0b1000010111111000000000000000000000000000000000000000000000000000,
+        0b1000000000000011111111111111111100000000000000000000000000110000,
+        0b1000000000000010111111111101111100000000000000000000000000000000,
+        0b0111100111111000000000000000000000000000000000000000011111111110,
+        0b0110011011111101111000000000000000000000000000000000000000000000,
+        0b0110000000000000111000000000000011100000000000001110000000000011,
+        0b0101100000000000000000000000000000000000000000000000000000000000,
+        0b0100000011010011100000000000000000000000000000000000000000000000,
+        0b0100000000000000000000000000110000000000000000000010000000011110,
+        0b0100000000000000000000000000000000000100000000000100000010000000,
+        0b0011111110110000000000000000000000000000000000000000000000000000,
+        0b0011001111001000000000000000000000000000000000000000000000000111,
+        0b0010011001111000000000000000000000000000000000000000000000000011,
+        0b0010010000111111111110000000000000000000000000000000000000000000,
+        0b0001111111111111111111111111111111111110111111111110000011011111,
+        0b0001111111110010000000000000000000000000000000000000000000000000,
+        0b0001100000000000000000000000000000000000000000000000000000000011,
+        0b0001011111010000000000000000000000000000000000000000000000001111,
+        0b0001010000000000000000000000000000000000000000000000000000000111,
+        0b0001000000000001000000000000000000000000000000000001000000001000,
+        0b0001000000000000000000000000000000000000000000000000000000000110,
+        0b0001000000000000000000000000000000000000000000000000000000000010,
+        0b0000111000000100000000011000011100000000000000000000000000000000,
+        0b0000111000000000000000000000100000000000000000000000000000000000,
+        0b0000100000111110001111000000000000000000000000000000000000100000,
+        0b0000011111110010000000000000000000000000000000000000000000000000,
+        0b0000010000110000111111111111111111111111111111111111111111111111,
+        0b0000010000000000010000001000000000000000000000000000000000000000,
+        0b0000001100010000001000011111110111111111111101110000000000000000,
+        0b0000001010100000000000000000000000000011000000000000000000000000,
+        0b0000000110010000101000010000000000000000000000000000000000000000,
+        0b0000000100000000000001111111111111111111111111111111111111111111,
+        0b0000000011001111111100000000000000000000000000000000000000000000,
+        0b0000000010111111001010000000000000000000000000000000000000000000,
+        0b0000000001100110011111100000000000000000000000000000000000000000,
+        0b0000000001011000001100000000000000100000000000000000000000000010,
+        0b0000000000100011000000000000000000000000000000100011100110000110,
+        0b0000000000100000000111111111111111111111111111111111111111111111,
+        0b0000000000011111111011111000000000000000000000000000000000000111,
+        0b0000000000011111000111111100000000000000000000000000000000000001,
+        0b0000000000011110000000000000000111000011000000000000000000000000,
+        0b0000000000011100000000000000000000000000000111000000000000000000,
+        0b0000000000010000000000000000000000000000000000000000000010110110,
+        0b0000000000001111111110000000000000000000000000000000000000000100,
+        0b0000000000001100000000000000000000000000000011000000000000000000,
+        0b0000000000000011101000110100000000000000000000000000000000000000,
+        0b0000000000000010000000000000110000000000111111100010000111111110,
+        0b0000000000000001111111111111111111111111111111110000000000000000,
+        0b0000000000000001000000000000000011111111111111111111100000000001,
+        0b0000000000000000111111111111111100000000000010001111111111111111,
+        0b0000000000000000111111111111111011111000000000000000000000010000,
+        0b0000000000000000011111001001000000000011000000001111100000000000,
+        0b0000000000000000001111111111111111111111110000000000000000000000,
+        0b0000000000000000001111011111111110111111110000000000000000000000,
+        0b0000000000000000001111000000000000000000000000000000111111100111,
+        0b0000000000000000001110110011110000000000000000000000000000000011,
+        0b0000000000000000001000010010000000000000000000000000000000000000,
+        0b0000000000000000000100000110000000000000000000000000100001000100,
+        0b0000000000000000000011111011110011100000000000000000000000000000,
+        0b0000000000000000000011100000000011111000000000000000000000000000,
+        0b0000000000000000000001111111100010000000000000000000000000000000,
+        0b0000000000000000000001111101101111111001111111111111111101111111,
+        0b0000000000000000000000000110000000000000000000001000000000000000,
+        0b0000000000000000000000000001101100000000000000000000000000000000,
+        0b0000000000000000000000000000111101100000000000000000000000000000,
+        0b0000000000000000000000000000110000000000011000000011110111000001,
+        0b0000000000000000000000000000110000000000011000000010000000011110,
+        0b0000000000000000000000000000110000000000000000000011000001000000,
+        0b0000000000000000000000000000110000000000000000000010000000011110,
+        0b0000000000000000000000000000000100001100111100000000000000000000,
+        0b0000000000000000000000000000000011111111111111111000000000000000,
+        0b0000000000000000000000000000000010000010000000000000000000000000,
+        0b0000000000000000000000000000000001000000000000000000000001011100,
+        0b0000000000000000000000000000000000100000100011111111111001000000,
+        0b0000000000000000000000000000000000100000000000000010000001100100,
+        0b0000000000000000000000000000000000011111111111110000000000000000,
+        0b0000000000000000000000000000000000010111111111110000000000111111,
+        0b0000000000000000000000000000000000001110011111100000000010000000,
+        0b0000000000000000000000000000000000001001100000000000000000000000,
+        0b0000000000000000000000000000000000000011011111111111110000000000,
+        0b0000000000000000000000000000000000000000101000110000000000000000,
+        0b0000000000000000000000000000000000000000010111000000010000000000,
+        0b0000000000000000000000000000000000000000000000001001111000000000,
+        0b0000000000000000000000000000000000000000000000000011111101000000,
+        0b0000000000000000000000000000000000000000000000000010000000000001,
     ];
-    static BITSET_MAPPING: [(u8, u8); 55] = [
-        (0, 134), (0, 135), (0, 136), (0, 137), (0, 140), (0, 146), (0, 147), (0, 149), (0, 155),
-        (0, 164), (0, 166), (0, 181), (0, 182), (0, 185), (0, 130), (0, 131), (0, 133), (1, 4),
-        (1, 34), (1, 41), (1, 47), (1, 52), (1, 55), (1, 60), (2, 137), (2, 148), (2, 165),
-        (2, 173), (2, 181), (3, 6), (3, 12), (3, 29), (3, 33), (3, 51), (4, 12), (4, 46), (4, 7),
-        (5, 26), (5, 32), (5, 33), (6, 62), (6, 63), (7, 53), (7, 59), (8, 19), (8, 32), (9, 128),
-        (10, 128), (11, 33), (12, 1), (13, 57), (14, 9), (15, 33), (16, 22), (17, 23),
+    static BITSET_MAPPING: [(u8, u8); 60] = [
+        (0, 70), (0, 71), (0, 190), (0, 72), (0, 73), (0, 188), (0, 76), (0, 82), (0, 83), (0, 85),
+        (0, 91), (0, 100), (0, 102), (0, 117), (0, 118), (0, 121), (0, 66), (0, 67), (0, 69),
+        (1, 190), (1, 34), (1, 41), (1, 47), (1, 52), (1, 55), (1, 60), (2, 6), (2, 12), (2, 29),
+        (2, 33), (2, 51), (3, 84), (3, 101), (3, 109), (3, 117), (4, 181), (4, 158), (4, 144),
+        (5, 12), (5, 46), (5, 7), (6, 176), (6, 134), (6, 57), (7, 62), (7, 63), (8, 53), (8, 59),
+        (9, 19), (9, 32), (10, 32), (10, 33), (11, 184), (12, 184), (13, 33), (14, 170), (15, 1),
+        (16, 33), (17, 179), (18, 23),
     ];
 
     pub fn lookup(c: char) -> bool {
@@ -471,84 +454,81 @@ pub fn lookup(c: char) -> bool {
 
 #[rustfmt::skip]
 pub mod cased {
-    static BITSET_LAST_CHUNK_MAP: (u16, u8) = (124, 11);
+    static BITSET_LAST_CHUNK_MAP: (u16, u8) = (124, 12);
     static BITSET_CHUNKS_MAP: [u8; 123] = [
-        18, 0, 17, 17, 5, 17, 17, 9, 4, 7, 17, 3, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
-        17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 13, 14, 17, 17, 17, 17,
-        17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 16, 15, 17, 2, 17, 8, 17, 17, 6,
-        17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 12, 17, 17,
-        17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
-        1, 17, 17, 17, 17, 10,
+        4, 0, 18, 18, 6, 18, 18, 9, 5, 8, 18, 3, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+        18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 14, 15, 18, 18, 18, 18,
+        18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 17, 16, 18, 1, 18, 10, 18, 18,
+        7, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 13, 18,
+        18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+        18, 2, 18, 18, 18, 18, 11,
     ];
     static BITSET_INDEX_CHUNKS: [[u8; 16]; 19] = [
-        [2, 2, 41, 2, 44, 5, 54, 51, 51, 51, 51, 51, 51, 51, 51, 51],
-        [2, 47, 33, 0, 28, 39, 2, 2, 2, 2, 8, 35, 49, 50, 1, 14],
-        [2, 59, 10, 24, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51],
-        [45, 46, 2, 20, 18, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51],
-        [51, 29, 62, 51, 34, 38, 57, 51, 51, 51, 51, 51, 51, 51, 51, 51],
-        [51, 51, 6, 32, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 6, 53],
-        [51, 51, 6, 55, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51],
-        [51, 51, 11, 17, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51],
-        [51, 51, 13, 13, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51],
-        [51, 51, 31, 51, 2, 2, 2, 51, 2, 2, 2, 2, 4, 26, 27, 25],
-        [51, 51, 51, 51, 2, 52, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51],
-        [51, 51, 51, 51, 10, 9, 60, 51, 51, 51, 51, 51, 51, 51, 51, 51],
-        [51, 51, 51, 51, 51, 51, 51, 51, 51, 2, 51, 51, 51, 51, 51, 51],
-        [51, 51, 51, 51, 51, 51, 51, 51, 51, 19, 56, 51, 7, 2, 40, 23],
-        [51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 10, 36, 2, 51],
-        [51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 12, 61, 51, 51],
-        [51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 15, 51, 51, 51],
-        [51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51],
-        [51, 58, 22, 48, 2, 2, 42, 3, 2, 2, 21, 16, 51, 30, 37, 43],
+        [5, 5, 7, 5, 50, 10, 40, 58, 58, 58, 58, 58, 58, 58, 58, 58],
+        [5, 42, 16, 24, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58],
+        [5, 53, 38, 0, 20, 9, 5, 5, 5, 5, 4, 18, 55, 56, 57, 54],
+        [51, 52, 5, 29, 30, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58],
+        [58, 2, 27, 1, 5, 5, 48, 6, 5, 5, 28, 31, 58, 35, 14, 49],
+        [58, 34, 32, 58, 19, 11, 62, 58, 58, 58, 58, 58, 58, 58, 58, 58],
+        [58, 58, 12, 37, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 12, 61],
+        [58, 58, 12, 44, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58],
+        [58, 58, 17, 45, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58],
+        [58, 58, 36, 58, 5, 5, 5, 58, 5, 5, 5, 5, 3, 22, 21, 23],
+        [58, 58, 47, 47, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58],
+        [58, 58, 58, 58, 5, 39, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58],
+        [58, 58, 58, 58, 16, 60, 41, 58, 58, 58, 58, 58, 58, 58, 58, 58],
+        [58, 58, 58, 58, 58, 58, 58, 58, 58, 5, 58, 58, 58, 58, 58, 58],
+        [58, 58, 58, 58, 58, 58, 58, 58, 58, 46, 43, 58, 13, 5, 8, 26],
+        [58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 16, 15, 5, 58],
+        [58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 25, 59, 58, 58],
+        [58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 33, 58, 58, 58],
+        [58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58],
     ];
-    static BITSET_CANONICAL: [u64; 42] = [
+    static BITSET_CANONICAL: [u64; 39] = [
         0b1111111111111111111111111111111111111111111111111111111111101111,
-        0b1111111111111111111111011111111111111111111111111111110111111111,
+        0b1111111101111111111111111111111111111111011111111111111111111111,
+        0b0000011111111111111111111111111000000111111111111111111111111110,
+        0b1111111111111111111111111111111100111111001111111111111111111111,
+        0b1111111111111111111111110011111111111111111111111111111111111111,
         0b1111111111111111111111111111111111111111111111111111111111111111,
         0b1111111111111111111111111111111111111111111111111111111111110000,
-        0b1111111111111111111111111111111100111111001111111111111111111111,
+        0b1111111111111111111111111111111111111111111111111111110000000011,
+        0b1111111111111111111111111111111111111111111111110111100011111111,
+        0b1111111111111111111111111111111111111111111111011111110001011111,
         0b1111111111111111111111111111111100000000011111111111111111111111,
+        0b1111111111111111111111111111111100000000000000000100001111100000,
         0b1111111111111111111111111111111100000000000000000000000000000000,
         0b1111111111111111111111111111110000000000000000000000000000000000,
-        0b1111111111111111111111110011111111111111111111111111111111111111,
-        0b1111111111111111000000111111111111111111111111110000001111111111,
+        0b1111111111111111111111111111101111111111111111111101011101000000,
+        0b1111111111111111000000011111111111110111111111111111111111111111,
         0b1111111111111111000000000000000000000000000000000000000000000000,
         0b1111111111000000000000000000000000000000000000000000000000000000,
+        0b1111011111111111111111111111111111110111111111111111111111111101,
+        0b1111001000011111101111010101000000111110001011111111110010000100,
+        0b0111101111111111111111111111111111011111110111111110011110111111,
+        0b0101111111011111111111111111111111111111111111111111111111111111,
+        0b0011111111111111111111111111111110101010111111110011111100111111,
+        0b0001111111011100000111111111111100001111110011110001111111011100,
+        0b0000111111111111111111111111111111111111000011111111111111111111,
         0b0000011111111111111111111111111000000000000000000000000000000000,
-        0b0000000000000111111111111111111111111111111111111111111111111111,
-        0b0000000000000000000000000000000000000000000000000000111111110111,
-        0b0000000000000000000000000000000000000000111110000000000001111111,
-        0b0000000000000000000000000001111100000000000000000000000000000011,
-        0b0000000000000000000000111111111111111111111111111111111111111111,
-        0b0000000000000000001000001011111111111111111111111111111111111111,
-        0b0000000000000000001111111111111111111111111111111111111111111111,
-        0b0000000000001100011110000001111111111111111111111111111111111111,
-        0b0000000111111111111111111111111111111111111011111111111111111111,
-        0b0000010000100000000001000000000000000000000000000000000000000000,
         0b0000011101100000000000000000000000000000000000000000011111111100,
-        0b0000111111111111111111111111111111111111000011111111111111111111,
-        0b0001111111011100000111111111111100001111110011110001111111011100,
-        0b0011111111111111111111111111111110101010111111110011111100111111,
-        0b0101111111011111111111111111111111111111111111111111111111111111,
-        0b0111101111111111111111111111111111011111110111111110011110111111,
+        0b0000010000100000000001000000000000000000000000000000000000000000,
+        0b0000000111111111111111111111111111111111111011111111111111111111,
+        0b0000000000001100011110000001111111111111111111111111111111111111,
+        0b0000000000000000001000001011111111111111111111111111111111111111,
+        0b0000000000000000000000000001111100000000000000000000000000000011,
+        0b0000000000000000000000000000000000011111111111110000000000000000,
+        0b0000000000000000000000000000000000000000111110000000000001111111,
         0b1000000000000010000000000000000000000000000000000000000000000000,
         0b1011110011001111000000000000000000000000000000000000000000100000,
         0b1110011111111111111111111111111111111111111111110000000111111111,
         0b1110011111111111111111111111111111111111111111110010000010111111,
         0b1110101111111111110111100110010011011111111111111111111111111111,
-        0b1111001000011111101111010101000000111110001011111111110010000100,
-        0b1111011111111111111111111111111111110111111111111111111111111101,
-        0b1111111111111111000000011111111111110111111111111111111111111111,
-        0b1111111111111111111111111111101111111111111111111101011101000000,
-        0b1111111111111111111111111111111100000000000000000100001111100000,
-        0b1111111111111111111111111111111111111111111111011111110001011111,
-        0b1111111111111111111111111111111111111111111111110111100011111111,
-        0b1111111111111111111111111111111111111111111111111111110000000011,
     ];
-    static BITSET_MAPPING: [(u8, u8); 21] = [
-        (0, 55), (0, 50), (0, 44), (0, 43), (0, 27), (0, 17), (1, 14), (1, 12), (1, 6), (2, 128),
-        (3, 128), (4, 32), (5, 169), (6, 32), (7, 30), (8, 157), (9, 17), (10, 16), (11, 10),
-        (12, 32), (13, 157),
+    static BITSET_MAPPING: [(u8, u8); 24] = [
+        (0, 188), (0, 183), (0, 182), (0, 176), (0, 162), (0, 160), (0, 150), (0, 146), (0, 141),
+        (0, 55), (0, 50), (0, 44), (0, 43), (0, 27), (0, 17), (1, 180), (1, 30), (1, 24), (1, 18),
+        (2, 187), (2, 160), (2, 15), (3, 32), (4, 93),
     ];
 
     pub fn lookup(c: char) -> bool {
@@ -565,19 +545,19 @@ pub fn lookup(c: char) -> bool {
 
 #[rustfmt::skip]
 pub mod cc {
-    static BITSET_LAST_CHUNK_MAP: (u16, u8) = (2, 1);
+    static BITSET_LAST_CHUNK_MAP: (u16, u8) = (2, 0);
     static BITSET_CHUNKS_MAP: [u8; 2] = [
-        1, 2,
+        0, 1,
     ];
     static BITSET_INDEX_CHUNKS: [[u8; 1]; 3] = [
         [0], [1], [2],
     ];
-    static BITSET_CANONICAL: [u64; 3] = [
-        0b0000000000000000000000000000000000000000000000000000000000000000,
+    static BITSET_CANONICAL: [u64; 2] = [
         0b0000000000000000000000000000000011111111111111111111111111111111,
         0b1000000000000000000000000000000000000000000000000000000000000000,
     ];
-    static BITSET_MAPPING: [(u8, u8); 0] = [
+    static BITSET_MAPPING: [(u8, u8); 1] = [
+        (0, 160),
     ];
 
     pub fn lookup(c: char) -> bool {
@@ -594,155 +574,152 @@ pub fn lookup(c: char) -> bool {
 
 #[rustfmt::skip]
 pub mod grapheme_extend {
-    static BITSET_LAST_CHUNK_MAP: (u16, u8) = (1792, 20);
+    static BITSET_LAST_CHUNK_MAP: (u16, u8) = (1792, 3);
     static BITSET_CHUNKS_MAP: [u8; 245] = [
-        42, 34, 28, 23, 6, 11, 18, 10, 13, 40, 42, 35, 22, 3, 9, 42, 21, 42, 42, 42, 42, 42, 30,
-        42, 2, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42,
-        42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42,
-        42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 24, 5, 8, 42, 42, 42, 42, 42, 42,
-        42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42,
-        42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 36, 42, 7, 41, 31, 42, 42, 42, 15, 37, 27, 19, 12,
-        0, 16, 44, 14, 17, 29, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42,
-        42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 43, 42, 39,
-        42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42,
-        42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 26, 42, 42, 42, 42, 42, 42, 42,
-        42, 42, 38, 25, 42, 42, 42, 1, 42, 42, 4, 32, 42, 42, 33,
+        34, 30, 41, 44, 17, 11, 0, 12, 9, 36, 34, 29, 43, 20, 13, 34, 21, 34, 34, 34, 34, 34, 26,
+        34, 16, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+        34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+        34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 23, 18, 14, 34, 34, 34, 34, 34, 34,
+        34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+        34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 31, 34, 15, 35, 27, 34, 34, 34, 7, 37, 25, 4, 10,
+        22, 6, 2, 8, 5, 28, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+        34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 40, 34, 33, 34,
+        34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+        34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 24, 34, 34, 34, 34, 34, 34, 34, 34,
+        34, 32, 42, 34, 34, 34, 1, 34, 34, 19, 38, 34, 34, 39,
     ];
     static BITSET_INDEX_CHUNKS: [[u8; 8]; 45] = [
-        [4, 24, 87, 13, 138, 138, 89, 143], [5, 52, 41, 138, 138, 138, 138, 138],
-        [11, 138, 115, 138, 138, 138, 138, 138], [20, 86, 8, 102, 67, 47, 37, 45],
-        [32, 138, 138, 138, 6, 138, 138, 138], [35, 138, 138, 83, 130, 127, 71, 111],
-        [40, 123, 138, 100, 66, 31, 77, 75], [42, 138, 138, 138, 138, 138, 117, 138],
-        [55, 65, 94, 54, 138, 138, 138, 36], [58, 138, 138, 60, 138, 138, 138, 0],
-        [62, 129, 68, 142, 59, 82, 69, 105], [64, 53, 64, 97, 95, 30, 74, 17],
-        [76, 138, 138, 33, 78, 50, 138, 138], [80, 49, 22, 138, 138, 138, 138, 138],
-        [81, 21, 19, 138, 138, 138, 138, 138], [84, 138, 138, 118, 138, 138, 138, 138],
-        [88, 102, 57, 138, 34, 138, 138, 138], [91, 138, 56, 138, 90, 15, 18, 138],
-        [93, 28, 85, 27, 78, 29, 103, 25], [98, 131, 61, 138, 51, 112, 9, 16],
-        [101, 7, 138, 138, 7, 7, 7, 139], [106, 138, 138, 44, 138, 138, 138, 138],
-        [122, 138, 12, 138, 63, 138, 138, 138], [128, 43, 138, 39, 99, 125, 3, 70],
-        [138, 73, 117, 120, 138, 138, 138, 138], [138, 121, 138, 138, 138, 138, 138, 138],
-        [138, 138, 116, 138, 138, 138, 138, 138], [138, 138, 119, 138, 138, 126, 138, 138],
-        [138, 138, 135, 138, 138, 138, 92, 14], [138, 138, 138, 1, 138, 138, 138, 138],
-        [138, 138, 138, 2, 138, 114, 138, 101], [138, 138, 138, 109, 138, 10, 138, 138],
-        [138, 138, 138, 134, 138, 138, 138, 138], [138, 138, 138, 137, 138, 136, 138, 138],
-        [138, 138, 138, 138, 7, 139, 138, 138], [138, 138, 138, 138, 48, 46, 72, 23],
-        [138, 138, 138, 138, 108, 138, 138, 138], [138, 138, 138, 138, 133, 138, 138, 138],
-        [138, 138, 138, 138, 138, 96, 38, 138], [138, 138, 138, 138, 138, 107, 132, 110],
-        [138, 138, 138, 138, 138, 124, 138, 138], [138, 138, 138, 138, 138, 138, 138, 113],
-        [138, 138, 138, 138, 138, 138, 138, 138], [138, 138, 138, 141, 6, 138, 138, 138],
-        [140, 138, 138, 138, 79, 104, 138, 26],
+        [1, 85, 27, 86, 34, 84, 100, 88], [4, 60, 71, 120, 120, 120, 120, 120],
+        [7, 120, 120, 120, 33, 101, 120, 87], [13, 8, 120, 120, 8, 8, 8, 139],
+        [17, 0, 51, 120, 61, 111, 138, 97], [21, 120, 56, 120, 22, 141, 95, 120],
+        [24, 99, 55, 120, 79, 120, 120, 120], [28, 120, 120, 116, 120, 120, 120, 120],
+        [31, 92, 94, 120, 120, 120, 120, 120], [32, 63, 91, 120, 120, 120, 120, 120],
+        [36, 120, 120, 80, 34, 62, 120, 120], [48, 59, 48, 9, 19, 83, 38, 96],
+        [50, 104, 44, 140, 53, 30, 43, 102], [54, 120, 120, 52, 120, 120, 120, 6],
+        [57, 47, 20, 58, 120, 120, 120, 77], [70, 120, 120, 120, 120, 120, 115, 120],
+        [72, 120, 113, 120, 120, 120, 120, 120], [73, 123, 120, 14, 46, 82, 35, 37],
+        [78, 120, 120, 29, 110, 127, 41, 109], [81, 120, 120, 120, 5, 120, 120, 120],
+        [93, 26, 16, 99, 45, 64, 76, 66], [103, 120, 120, 68, 120, 120, 120, 120],
+        [112, 89, 25, 137, 120, 120, 23, 143], [120, 39, 115, 118, 120, 120, 120, 120],
+        [120, 120, 114, 120, 120, 120, 120, 120], [120, 120, 117, 120, 120, 126, 120, 120],
+        [120, 120, 120, 67, 120, 136, 120, 13], [120, 120, 120, 107, 120, 11, 120, 120],
+        [120, 120, 120, 119, 120, 120, 120, 120], [120, 120, 120, 120, 2, 65, 40, 90],
+        [120, 120, 120, 120, 8, 139, 120, 120], [120, 120, 120, 120, 106, 120, 120, 120],
+        [120, 120, 120, 120, 120, 18, 75, 120], [120, 120, 120, 120, 120, 105, 129, 108],
+        [120, 120, 120, 120, 120, 120, 120, 120], [120, 120, 120, 120, 120, 120, 120, 135],
+        [120, 120, 120, 120, 120, 124, 120, 120], [120, 120, 120, 120, 130, 120, 120, 120],
+        [120, 120, 120, 131, 120, 120, 120, 120], [120, 120, 120, 134, 120, 133, 120, 120],
+        [120, 120, 120, 142, 5, 120, 120, 120], [120, 120, 132, 120, 120, 120, 10, 98],
+        [120, 121, 120, 120, 120, 120, 120, 120], [122, 120, 12, 120, 49, 120, 120, 120],
+        [128, 69, 120, 74, 15, 125, 3, 42],
     ];
-    static BITSET_CANONICAL: [u64; 102] = [
-        0b1111101111111111111111111111111111111111111111111111111111111111,
-        0b0000000000011000000000000000000000000000000000000000000000000000,
-        0b0000000000000011100000000000000000000000000000000000000000000000,
+    static BITSET_CANONICAL: [u64; 99] = [
+        0b1000000000000000000000000000000000000000000000000000000001111111,
+        0b1100000000000000000000000000000000000000000000000000000000010001,
+        0b0000000000011100000000000000000000000000000111000000000000000000,
         0b0000000000000001111111111100000000000000000000000000000000000000,
-        0b1111111100000000000000000000000000000000000000000000000000000000,
         0b1111100001111111111111111111111111111111111111111111111111111111,
         0b0000000001111111000000000000000000000000000000000000000000000000,
+        0b1111101111111111111111111111111111111111111111111111111111111111,
+        0b0000011011111111100000000000000000000000000000000000000000000000,
         0b1111111111111111111111111111111111111111111111111111111111111111,
-        0b1111111111111111000000000000000000000000000000000000000000000000,
-        0b0111111111000000000000000000000000000000000000000000000000000011,
+        0b1111110000000000000000000000110000000000000000000010000110111110,
+        0b1011111111111111111111111111111111111111111111100000000000000000,
         0b0000011111000000000000000000000000000000000000000000000000000000,
-        0b0000000000000000111111000000000000000000000000000000000000000000,
         0b0000000000000000000000100000000000000000000000000000000001100000,
-        0b0000000000000000000000000000000000000000000000000000000000001101,
-        0b0000000000000000000000000000000000000000000000000000000010110110,
-        0b0000000000000000000000000000000000000000000000000000000010111111,
-        0b0000000000000000000000000000000000000000000000001001111000000000,
-        0b0000000000000000000000000000000000000000100000000010000000000001,
-        0b0000000000000000000000000000000000000000101000110000000000000000,
-        0b0000000000000000000000000000000000000011011111111111110000000000,
-        0b0000000000000000000000000000000000001001100000000000000000000000,
-        0b0000000000000000000000000000000000001110011111100000000010000000,
-        0b0000000000000000000000000000000000100000000000000010000001100100,
-        0b0000000000000000000000000000000000100000000011111111111001000000,
-        0b0000000000000000000000000000000001000000000000000000000001011100,
-        0b0000000000000000000000000000000010000000010111001000010000000000,
-        0b0000000000000000000000000000000100001100111100000000000000000000,
-        0b0000000000000000000000000000110000000000011000000011000001000100,
-        0b0000000000000000000000000000110000000000011000000011110111000001,
-        0b0000000000000000000000000000110000000000100000000010000000011110,
-        0b0000000000000000000000000000110000000000111000000010000000011110,
-        0b0000000000000000000000000000110000000000111111100010000111111110,
-        0b0000000000000000000001111101101111111001111111111111111101111111,
-        0b0000000000000000000001111111100010000000000000000000000000000000,
-        0b0000000000000000000011111011110011100000000000000000000000000000,
-        0b0000000000000000000100000110000000000000000000000000100001000100,
-        0b0000000000000000001000010010000000000000000000000000000000000000,
-        0b0000000000000000001110110011110000000000000000000000000000000011,
-        0b0000000000000000001111000000000000000000000000000000111111100111,
-        0b0000000000000000001111011001111110011111110000000000000000000000,
-        0b0000000000000000001111101110111111111011110000000000000000000000,
-        0b0000000000000000111111111111111011111000000000000000000000010000,
-        0b0000000000000000111111111111111100000000000000001111111111111111,
-        0b0000000000000001000000000000000011111111111111111111100000000000,
-        0b0000000000000001111111111111111111111111111111110000000000000000,
-        0b0000000000000011101000110100000000000000000000000000000000000000,
-        0b0000000000001100000000000000000000000000000011000000000000000000,
-        0b0000000000001111111110000000000000000000000000000000000000000100,
-        0b0000000000011100000000000000000000000000000111000000000000000000,
-        0b0000000000011110000000000000000111000011000000000000000000000000,
-        0b0000000000011111000111111100000000000000100000000000000000000001,
-        0b0000000000011111111011111000000000000000000000000000000000000111,
-        0b0000000000100000000111111111111111111111111111111111111111111111,
-        0b0000000000100011000000000000000000000000000000100011100110000110,
-        0b0000000001000000001100000000000000000000000000000000000000000010,
-        0b0000000001100110011111100000000000000000000000000000000000000000,
-        0b0000000001101101111111001111111111111111111111000000000000000000,
-        0b0000000010111111001010000000000000000000000000000000000000000000,
-        0b0000000011001111111100000000000000000000000000000000000000000000,
-        0b0000001010100000000000000000000000000011000000000000000000000000,
-        0b0000001100010000001000011111110111111111111101110000000000000000,
-        0b0000011001111000000000000000000000000000000000000000000000000011,
-        0b0000011111110010000000000000000000000000000000000000000000000000,
-        0b0000111000000100000000011000011100000000000000000000000000000000,
-        0b0001000000000000000000000000000000000000000000000000000000000110,
-        0b0001000000000000000000000000000000000000000000000001000000001000,
-        0b0001010000000000000000000000000000000000000000000000000000000111,
-        0b0001011111110000000000000000000000000000000000000000000000001111,
-        0b0001111111110010000000000000000000000000000000000000000000000000,
-        0b0001111111111111111111111111111111111110111111111110000011011111,
-        0b0010000000001111111110000000000000000000000000000000000000000000,
-        0b0011001111001000000000000000000000000000000000000000000000000111,
-        0b0011111110110000000000000000000000000000000000000000000000000000,
-        0b0011111111110111100000000000000000000000000000000000000000000000,
-        0b0100000000000000000000000000000000000000000000000000000000000100,
-        0b0100000000000000000000000000110000000000100000000010000000011110,
-        0b0100000011010011100000000000000000000000000000000000000000000000,
-        0b0101000000000000000000000000000000000000000000000000000000000010,
-        0b0101100000000000000000000000000000000000000000000000000000000011,
-        0b0101100000000001000000000000000000000000000000000000000000000000,
-        0b0110011011111101111000000000000000000000000000000000000000000000,
-        0b0111100111111000000000000000000000000000000000000000011111111110,
-        0b0111111111111110000000000000000000000000000000000000000000000000,
-        0b1000000000000011111111111111111100000000000000000000000000110000,
-        0b1000011100000000000000000000000000000000000000001111000001101110,
-        0b1001000000000000000000000000000000000000000000000000000000000010,
-        0b1001111111111000000111111110010101111111010000000000000000000000,
-        0b1010010111111001000000000000000000000000000000000000000000000000,
-        0b1010011111111000000000000000000000000000000000000000000000000000,
-        0b1011000000111100100000000000000000000000000000000000000000000000,
-        0b1011010001111110000000000000000000000000000000000000000000000000,
-        0b1011111101111111000000000000000000000000000000000000000000000000,
-        0b1011111111111111111111111111111111111111111111100000000000000000,
-        0b1100000000000000000000000000000000000000000000000000000000010001,
-        0b1100000110011101000000000000000000000000000000000000000000000000,
-        0b1101000000000000000000000000000000000000000000000000000000000010,
-        0b1111100000000111110000111010000000000000000000000000000000000000,
-        0b1111110000000000000000000000110000000000000000000010000110111110,
-        0b1111111100000000000000000000000000000000000000000000000000000010,
-        0b1111111111111111000000000000000000000000000000100000000000000000,
-        0b1111111111111111111111111111101111111111111110000000000000000000,
         0b1111111111111111111111111111111100000000000000000000000000000000,
+        0b1111111111111111111111111111101111111111111110000000000000000000,
+        0b1111111111111111000000000000000000000000000000100000000000000000,
+        0b1111111111111111000000000000000000000000000000000000000000000000,
+        0b1111111100000000000000000000000000000000000000000000000000000010,
+        0b1111100000000111110000111010000000000000000000000000000000000000,
+        0b1101000000000000000000000000000000000000000000000000000000000010,
+        0b1100000110011101000000000000000000000000000000000000000000000000,
+        0b1011111101111111000000000000000000000000000000000000000000000000,
+        0b1011010001111110000000000000000000000000000000000000000000000000,
+        0b1011000000111100100000000000000000000000000000000000000000000000,
+        0b1010011111111000000000000000000000000000000000000000000000000000,
+        0b1010010111111001000000000000000000000000000000000000000000000000,
+        0b1001111111111000000111111110010101111111010000000000000000000000,
+        0b1001000000000000000000000000000000000000000000000000000000000010,
+        0b1000011100000000000000000000000000000000000000001111000001101110,
+        0b1000000000000011111111111111111100000000000000000000000000110000,
+        0b0111111111111110000000000000000000000000000000000000000000000000,
+        0b0111100111111000000000000000000000000000000000000000011111111110,
+        0b0110011011111101111000000000000000000000000000000000000000000000,
+        0b0101100000000001000000000000000000000000000000000000000000000000,
+        0b0101100000000000000000000000000000000000000000000000000000000011,
+        0b0101000000000000000000000000000000000000000000000000000000000010,
+        0b0100000011010011100000000000000000000000000000000000000000000000,
+        0b0100000000000000000000000000110000000000100000000010000000011110,
+        0b0100000000000000000000000000000000000000000000000000000000000100,
+        0b0011111111110111100000000000000000000000000000000000000000000000,
+        0b0011111110110000000000000000000000000000000000000000000000000000,
+        0b0011001111001000000000000000000000000000000000000000000000000111,
+        0b0010000000001111111110000000000000000000000000000000000000000000,
+        0b0001111111111111111111111111111111111110111111111110000011011111,
+        0b0001111111110010000000000000000000000000000000000000000000000000,
+        0b0001011111110000000000000000000000000000000000000000000000001111,
+        0b0001010000000000000000000000000000000000000000000000000000000111,
+        0b0001000000000000000000000000000000000000000000000001000000001000,
+        0b0001000000000000000000000000000000000000000000000000000000000110,
+        0b0000111000000100000000011000011100000000000000000000000000000000,
+        0b0000011111110010000000000000000000000000000000000000000000000000,
+        0b0000011001111000000000000000000000000000000000000000000000000011,
+        0b0000001100010000001000011111110111111111111101110000000000000000,
+        0b0000001010100000000000000000000000000011000000000000000000000000,
+        0b0000000011001111111100000000000000000000000000000000000000000000,
+        0b0000000010111111001010000000000000000000000000000000000000000000,
+        0b0000000001101101111111001111111111111111111111000000000000000000,
+        0b0000000001100110011111100000000000000000000000000000000000000000,
+        0b0000000001000000001100000000000000000000000000000000000000000010,
+        0b0000000000100011000000000000000000000000000000100011100110000110,
+        0b0000000000100000000111111111111111111111111111111111111111111111,
+        0b0000000000011111111011111000000000000000000000000000000000000111,
+        0b0000000000011111000111111100000000000000100000000000000000000001,
+        0b0000000000011110000000000000000111000011000000000000000000000000,
+        0b0000000000001111111110000000000000000000000000000000000000000100,
+        0b0000000000001100000000000000000000000000000011000000000000000000,
+        0b0000000000000011101000110100000000000000000000000000000000000000,
+        0b0000000000000011100000000000000000000000000000000000000000000000,
+        0b0000000000000001111111111111111111111111111111110000000000000000,
+        0b0000000000000001000000000000000011111111111111111111100000000000,
+        0b0000000000000000111111111111111100000000000000001111111111111111,
+        0b0000000000000000111111111111111011111000000000000000000000010000,
+        0b0000000000000000111111000000000000000000000000000000000000000000,
+        0b0000000000000000001111101110111111111011110000000000000000000000,
+        0b0000000000000000001111011001111110011111110000000000000000000000,
+        0b0000000000000000001111000000000000000000000000000000111111100111,
+        0b0000000000000000001110110011110000000000000000000000000000000011,
+        0b0000000000000000001000010010000000000000000000000000000000000000,
+        0b0000000000000000000100000110000000000000000000000000100001000100,
+        0b0000000000000000000011111011110011100000000000000000000000000000,
+        0b0000000000000000000001111111100010000000000000000000000000000000,
+        0b0000000000000000000001111101101111111001111111111111111101111111,
+        0b0000000000000000000000000000110000000000111111100010000111111110,
+        0b0000000000000000000000000000110000000000111000000010000000011110,
+        0b0000000000000000000000000000110000000000100000000010000000011110,
+        0b0000000000000000000000000000110000000000011000000011110111000001,
+        0b0000000000000000000000000000110000000000011000000011000001000100,
+        0b0000000000000000000000000000000100001100111100000000000000000000,
+        0b0000000000000000000000000000000010000000010111001000010000000000,
+        0b0000000000000000000000000000000001000000000000000000000001011100,
+        0b0000000000000000000000000000000000100000000011111111111001000000,
+        0b0000000000000000000000000000000000100000000000000010000001100100,
+        0b0000000000000000000000000000000000001110011111100000000010000000,
+        0b0000000000000000000000000000000000001001100000000000000000000000,
+        0b0000000000000000000000000000000000000011011111111111110000000000,
+        0b0000000000000000000000000000000000000000101000110000000000000000,
+        0b0000000000000000000000000000000000000000100000000010000000000001,
+        0b0000000000000000000000000000000000000000000000001001111000000000,
+        0b0000000000000000000000000000000000000000000000000000000010110110,
     ];
-    static BITSET_MAPPING: [(u8, u8); 42] = [
-        (0, 134), (0, 135), (0, 137), (0, 140), (0, 146), (0, 149), (0, 164), (0, 166), (0, 170),
-        (0, 171), (0, 185), (0, 131), (0, 133), (1, 38), (1, 42), (1, 43), (1, 50), (1, 56),
-        (1, 61), (2, 19), (2, 28), (2, 42), (2, 46), (3, 26), (3, 32), (3, 33), (3, 42), (4, 15),
-        (4, 46), (4, 7), (5, 152), (5, 173), (5, 181), (6, 19), (6, 20), (6, 32), (7, 128),
-        (8, 128), (9, 57), (10, 58), (11, 30), (12, 23),
+    static BITSET_MAPPING: [(u8, u8); 45] = [
+        (0, 191), (0, 190), (0, 188), (0, 185), (0, 179), (0, 8), (0, 176), (0, 161), (0, 159),
+        (0, 155), (0, 154), (0, 39), (0, 140), (0, 57), (1, 165), (1, 161), (1, 160), (1, 153),
+        (1, 147), (1, 142), (1, 139), (2, 181), (2, 176), (2, 167), (2, 153), (2, 149), (3, 26),
+        (3, 32), (3, 33), (3, 42), (4, 88), (4, 109), (4, 117), (5, 19), (5, 20), (5, 32), (6, 67),
+        (6, 69), (7, 183), (7, 7), (8, 144), (9, 178), (10, 184), (11, 58), (12, 23),
     ];
 
     pub fn lookup(c: char) -> bool {
@@ -759,98 +736,91 @@ pub fn lookup(c: char) -> bool {
 
 #[rustfmt::skip]
 pub mod lowercase {
-    static BITSET_LAST_CHUNK_MAP: (u16, u8) = (122, 10);
+    static BITSET_LAST_CHUNK_MAP: (u16, u8) = (122, 5);
     static BITSET_CHUNKS_MAP: [u8; 118] = [
-        5, 1, 16, 16, 8, 16, 16, 6, 4, 9, 16, 0, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
-        16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 12, 13, 16, 16, 16, 16,
-        16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 14, 15, 16, 2, 16, 7, 16, 16,
-        17, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 11, 16,
-        16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
-        16, 3,
+        16, 2, 9, 9, 4, 9, 9, 15, 3, 12, 9, 1, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+        9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 11, 7, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+        9, 9, 9, 8, 10, 9, 0, 9, 14, 9, 9, 13, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+        9, 9, 6, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 17,
     ];
     static BITSET_INDEX_CHUNKS: [[u8; 16]; 18] = [
-        [4, 31, 40, 19, 16, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66],
-        [4, 42, 69, 41, 18, 3, 10, 66, 66, 66, 66, 66, 66, 66, 66, 66],
-        [55, 68, 66, 6, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66],
-        [62, 15, 47, 54, 22, 60, 49, 0, 26, 61, 70, 48, 64, 65, 1, 11],
-        [66, 35, 71, 66, 28, 51, 9, 66, 66, 66, 66, 66, 66, 66, 66, 66],
-        [66, 63, 24, 50, 34, 44, 45, 38, 36, 57, 23, 14, 66, 29, 53, 27],
-        [66, 66, 10, 66, 2, 2, 2, 66, 40, 40, 5, 40, 21, 32, 33, 20],
-        [66, 66, 66, 7, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66],
-        [66, 66, 66, 46, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 30],
-        [66, 66, 66, 59, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66],
-        [66, 66, 66, 66, 56, 8, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66],
-        [66, 66, 66, 66, 66, 66, 66, 66, 66, 3, 66, 66, 66, 66, 66, 66],
-        [66, 66, 66, 66, 66, 66, 66, 66, 66, 17, 13, 66, 43, 37, 39, 25],
-        [66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 4, 52, 2, 66],
-        [66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 12, 66, 66, 66],
-        [66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 58, 66, 66],
-        [66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66],
-        [66, 66, 66, 67, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66],
+        [10, 55, 52, 6, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52],
+        [15, 24, 20, 34, 35, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52],
+        [15, 46, 1, 19, 63, 8, 54, 52, 52, 52, 52, 52, 52, 52, 52, 52],
+        [52, 5, 39, 52, 27, 14, 70, 52, 52, 52, 52, 52, 52, 52, 52, 52],
+        [52, 52, 52, 50, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 25],
+        [52, 52, 52, 52, 9, 53, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52],
+        [52, 52, 52, 52, 52, 52, 52, 52, 52, 8, 52, 52, 52, 52, 52, 52],
+        [52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 15, 13, 2, 52],
+        [52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 40, 52, 52, 52],
+        [52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52],
+        [52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 56, 52, 52],
+        [52, 52, 52, 52, 52, 52, 52, 52, 52, 62, 38, 52, 47, 43, 45, 29],
+        [52, 52, 52, 57, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52],
+        [52, 52, 52, 65, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52],
+        [52, 52, 52, 66, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52],
+        [52, 52, 54, 52, 2, 2, 2, 52, 20, 20, 64, 20, 32, 23, 22, 33],
+        [52, 69, 30, 16, 21, 48, 49, 44, 42, 7, 31, 37, 52, 26, 12, 28],
+        [60, 36, 51, 11, 61, 58, 17, 4, 0, 59, 71, 18, 67, 68, 3, 41],
     ];
-    static BITSET_CANONICAL: [u64; 58] = [
-        0b1111111111111111110000000000000000000000000011111111111111111111,
-        0b1111111111111111111111000000000000000000000000001111110111111111,
+    static BITSET_CANONICAL: [u64; 52] = [
+        0b0000111111111111111111111111110000000000000000000000000011111111,
+        0b1010101010101010101010101010101010101010101010101010100000000010,
         0b1111111111111111111111111111111111111111111111111111111111111111,
+        0b1111111111111111111111000000000000000000000000001111110111111111,
+        0b1111111111111111110000000000000000000000000011111111111111111111,
+        0b1000000000000010000000000000000000000000000000000000000000000000,
+        0b0000111111111111111111111111111111111111000000000000000000000000,
+        0b1111111111111111111111111111111111111111111111111010101010000101,
         0b1111111111111111111111111111111100000000000000000000000000000000,
+        0b1111111111111111111111111111110000000000000000000000000000000000,
+        0b1111111111111111111111110000000000000000000000000000000000000000,
+        0b1111111111111111111111000000000000000000000000001111111111101111,
+        0b1111111111111111111100000000000000000000000000010000000000000000,
+        0b1111111111111111000000011111111111110111111111111111111111111111,
+        0b1111111111111111000000000000000000000000000000000100001111000000,
         0b1111111111111111000000000000000000000000000000000000000000000000,
-        0b1010101010101010101010101010101010111111111010101010101010101010,
-        0b0000111111111111111111111111111111111111000000000000000000000000,
-        0b0000000000000111111111111111111111111111111111111111111111111111,
-        0b0000000000000000000000000000000000000000000000000000000000001111,
-        0b0000000000000000000000000000000000000000000000000000000000010000,
-        0b0000000000000000000000000000000000000000000000000000000111111111,
-        0b0000000000000000000000000000000000000000000000000000101111110111,
-        0b0000000000000000000000000000000000000000111110000000000001111111,
-        0b0000000000000000000000000000000000111010101010101010101010101010,
-        0b0000000000000000000000000001111100000000000000000000000000000011,
-        0b0000000000000000000000001111111111111111110111111100000000000000,
-        0b0000000000000000001000001011111111111111111111111111111111111111,
-        0b0000000000000000001010101010101010101010101010101010101010101010,
-        0b0000000000000000101010101010101010101010101010101010101010101010,
-        0b0000000000001000010100000001101010101010101010101010101010101010,
-        0b0000000011011100000000001111111100000000110011110000000011011100,
-        0b0000000011111111000000001111111100000000001111110000000011111111,
-        0b0000000011111111111111111111111111000000000000000000000000001111,
-        0b0000000111111111111111111111111111111111111011111111111111111111,
-        0b0000010000100000000001000000000000000000000000000000000000000000,
-        0b0000011101000000000000000000000000000000000000000000010100001000,
-        0b0000111111111111111111111111110000000000000000000000000011111111,
-        0b0001100100101111101010101010101010101010111000110111111111111111,
-        0b0011001000010000100000000000000000000000000010001100010000000000,
-        0b0011110010001010000000000000000000000000000000000000000000100000,
-        0b0011111100000000000000000000000000000000000000000000000000000000,
-        0b0011111111011010000101010110001001111111111111111111111111111111,
-        0b0011111111111111000000001111111100000000111111110000000000111111,
-        0b0100000011011111000000001111111100000000111111110000000011111111,
+        0b1111111101111111111111111111111110000000000000000000000000000000,
+        0b1111110000000000000000000000000011111111111111111111111111000000,
+        0b1111000000000000000000000000001111110111111111111111111111111100,
+        0b1010101010101010101010101010101010101010101010101101010101010100,
+        0b1010101010101010101010101010101010101010101010101010101010101010,
         0b0101010110101010101010101010101010101010101010101010101010101010,
-        0b1000000000000010000000000000000000000000000000000000000000000000,
+        0b0100000011011111000000001111111100000000111111110000000011111111,
+        0b0011111111111111000000001111111100000000111111110000000000111111,
+        0b0011111111011010000101010110001001111111111111111111111111111111,
+        0b0011111100000000000000000000000000000000000000000000000000000000,
+        0b0011110010001010000000000000000000000000000000000000000000100000,
+        0b0011001000010000100000000000000000000000000010001100010000000000,
+        0b0001100100101111101010101010101010101010111000110111111111111111,
+        0b0000011101000000000000000000000000000000000000000000010100001000,
+        0b0000010000100000000001000000000000000000000000000000000000000000,
+        0b0000000111111111111111111111111111111111111011111111111111111111,
+        0b0000000011111111000000001111111100000000001111110000000011111111,
+        0b0000000011011100000000001111111100000000110011110000000011011100,
+        0b0000000000001000010100000001101010101010101010101010101010101010,
+        0b0000000000000000001000001011111111111111111111111111111111111111,
+        0b0000000000000000000000001111111111111111110111111100000000000000,
+        0b0000000000000000000000000001111100000000000000000000000000000011,
+        0b0000000000000000000000000000000000111010101010101010101010101010,
+        0b0000000000000000000000000000000000011111111111110000000000000000,
+        0b0000000000000000000000000000000000000000111110000000000001111111,
+        0b0000000000000000000000000000000000000000000000000000101111110111,
         0b1001001111111010101010101010101010101010101010101010101010101010,
         0b1001010111111111101010101010101010101010101010101010101010101010,
         0b1010101000101001101010101010101010110101010101010101001001000000,
         0b1010101010100000100000101010101010101010101110100101000010101010,
-        0b1010101010101010101010101010101010101010101010101010101010101010,
-        0b1010101010101010101010101010101010101010101010101101010101010100,
         0b1010101010101010101010101010101011111111111111111111111111111111,
         0b1010101010101011101010101010100000000000000000000000000000000000,
         0b1101010010101010101010101010101010101010101010101010101101010101,
         0b1110011001010001001011010010101001001110001001000011000100101001,
         0b1110011111111111111111111111111111111111111111110000000000000000,
         0b1110101111000000000000000000000000001111111111111111111111111100,
-        0b1111000000000000000000000000001111110111111111111111111111111100,
-        0b1111110000000000000000000000000011111111111111111111111111000000,
-        0b1111111101111111111111111111111110000000000000000000000000000000,
-        0b1111111111111111000000000000000000000000000000000100001111000000,
-        0b1111111111111111000000011111111111110111111111111111111111111111,
-        0b1111111111111111111100000000000000000000000000010000000000000000,
-        0b1111111111111111111111000000000000000000000000001111111111101111,
-        0b1111111111111111111111110000000000000000000000000000000000000000,
-        0b1111111111111111111111111111110000000000000000000000000000000000,
-        0b1111111111111111111111111111111111111111111111111010101010000101,
     ];
-    static BITSET_MAPPING: [(u8, u8); 14] = [
-        (0, 173), (0, 188), (0, 190), (0, 130), (0, 134), (0, 141), (1, 12), (1, 6), (2, 128),
-        (3, 32), (4, 16), (5, 173), (6, 142), (7, 157),
+    static BITSET_MAPPING: [(u8, u8); 20] = [
+        (0, 188), (0, 184), (0, 179), (0, 172), (0, 161), (0, 146), (0, 144), (0, 140), (0, 136),
+        (0, 132), (1, 146), (1, 144), (1, 83), (2, 160), (2, 141), (3, 12), (3, 6), (4, 77),
+        (5, 187), (6, 78),
     ];
 
     pub fn lookup(c: char) -> bool {
@@ -867,100 +837,97 @@ pub fn lookup(c: char) -> bool {
 
 #[rustfmt::skip]
 pub mod n {
-    static BITSET_LAST_CHUNK_MAP: (u16, u8) = (253, 40);
+    static BITSET_LAST_CHUNK_MAP: (u16, u8) = (253, 21);
     static BITSET_CHUNKS_MAP: [u8; 249] = [
-        5, 41, 41, 21, 37, 23, 11, 18, 16, 35, 41, 27, 2, 45, 46, 41, 9, 41, 15, 34, 41, 41, 29,
-        41, 1, 3, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41,
-        41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41,
-        41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 4, 6, 20, 41, 41, 41, 41, 41, 41,
-        41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41,
-        41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 33, 32, 28, 25, 41, 13, 10, 26, 12, 8, 30,
-        19, 17, 43, 41, 7, 38, 41, 41, 0, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41,
-        41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 22, 41, 24,
-        41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41,
-        41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41,
-        41, 41, 41, 31, 41, 39, 41, 41, 41, 41, 36, 30, 41, 41, 44, 41, 14, 41, 42,
+        45, 19, 19, 39, 23, 40, 6, 37, 33, 17, 19, 12, 42, 32, 41, 19, 8, 19, 2, 16, 19, 19, 13,
+        19, 1, 43, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
+        19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
+        19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 44, 46, 34, 19, 19, 19, 19, 19, 19,
+        19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
+        19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 25, 15, 14, 31, 19, 4, 7, 11, 5, 9, 26, 36,
+        35, 28, 19, 10, 20, 19, 19, 0, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
+        19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 38, 19, 30, 19,
+        19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
+        19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
+        19, 19, 27, 19, 18, 19, 19, 19, 19, 22, 26, 19, 19, 29, 19, 3, 19, 24,
     ];
     static BITSET_INDEX_CHUNKS: [[u8; 8]; 47] = [
-        [7, 23, 67, 67, 67, 67, 67, 67], [32, 67, 67, 67, 67, 67, 66, 67],
-        [50, 67, 67, 67, 67, 49, 67, 18], [52, 20, 8, 67, 67, 67, 67, 67],
-        [52, 67, 67, 53, 67, 67, 67, 67], [54, 67, 38, 67, 67, 67, 67, 67],
-        [58, 67, 67, 50, 48, 67, 67, 31], [67, 22, 67, 67, 67, 50, 52, 67],
-        [67, 24, 67, 54, 0, 67, 67, 26], [67, 30, 48, 67, 67, 46, 14, 67],
-        [67, 37, 72, 60, 67, 42, 64, 67], [67, 39, 67, 53, 67, 28, 67, 53],
-        [67, 40, 67, 67, 51, 65, 67, 63], [67, 41, 13, 3, 57, 67, 56, 1],
-        [67, 43, 25, 67, 36, 67, 67, 67], [67, 45, 19, 44, 67, 67, 67, 67],
-        [67, 48, 50, 67, 67, 67, 67, 67], [67, 50, 67, 48, 33, 67, 67, 67],
-        [67, 50, 67, 50, 62, 67, 67, 67], [67, 50, 67, 50, 67, 67, 67, 67],
-        [67, 50, 67, 67, 67, 67, 67, 54], [67, 52, 67, 54, 67, 67, 67, 48],
-        [67, 52, 67, 67, 67, 21, 67, 67], [67, 53, 67, 53, 67, 27, 67, 11],
-        [67, 67, 17, 67, 67, 67, 67, 67], [67, 67, 52, 67, 67, 67, 67, 67],
-        [67, 67, 67, 2, 54, 67, 67, 67], [67, 67, 67, 12, 67, 67, 67, 9],
-        [67, 67, 67, 34, 6, 15, 67, 59], [67, 67, 67, 35, 67, 67, 67, 67],
-        [67, 67, 67, 54, 67, 67, 67, 67], [67, 67, 67, 62, 67, 68, 67, 67],
-        [67, 67, 67, 67, 10, 5, 55, 67], [67, 67, 67, 67, 50, 67, 67, 67],
-        [67, 67, 67, 67, 67, 0, 61, 67], [67, 67, 67, 67, 67, 4, 67, 67],
-        [67, 67, 67, 67, 67, 48, 67, 67], [67, 67, 67, 67, 67, 53, 67, 29],
-        [67, 67, 67, 67, 67, 67, 67, 16], [67, 67, 67, 67, 67, 67, 67, 47],
-        [67, 67, 67, 67, 67, 67, 67, 54], [67, 67, 67, 67, 67, 67, 67, 67],
-        [67, 67, 67, 67, 71, 67, 67, 67], [67, 67, 67, 70, 67, 50, 67, 67],
-        [67, 67, 67, 73, 67, 50, 67, 67], [67, 67, 69, 67, 67, 50, 54, 67],
-        [67, 69, 67, 67, 67, 67, 67, 67],
+        [12, 52, 44, 44, 44, 44, 44, 44], [27, 44, 44, 44, 44, 44, 67, 44],
+        [44, 15, 51, 16, 44, 44, 44, 44], [44, 17, 34, 44, 23, 44, 44, 44],
+        [44, 18, 11, 4, 62, 44, 61, 2], [44, 19, 44, 44, 56, 66, 44, 46],
+        [44, 20, 44, 58, 44, 31, 44, 58], [44, 22, 72, 65, 44, 43, 53, 44],
+        [44, 29, 45, 44, 44, 14, 42, 44], [44, 36, 44, 59, 1, 44, 44, 33],
+        [44, 37, 44, 44, 44, 55, 57, 44], [44, 44, 44, 3, 59, 44, 44, 44],
+        [44, 44, 44, 10, 44, 44, 44, 8], [44, 44, 44, 24, 44, 44, 44, 44],
+        [44, 44, 44, 25, 5, 41, 44, 64], [44, 44, 44, 44, 9, 0, 60, 44],
+        [44, 44, 44, 44, 44, 1, 48, 44], [44, 44, 44, 44, 44, 7, 44, 44],
+        [44, 44, 44, 44, 44, 44, 44, 13], [44, 44, 44, 44, 44, 44, 44, 44],
+        [44, 44, 44, 44, 44, 44, 44, 49], [44, 44, 44, 44, 44, 44, 44, 59],
+        [44, 44, 44, 44, 44, 45, 44, 44], [44, 44, 44, 44, 44, 58, 44, 30],
+        [44, 44, 44, 44, 47, 44, 44, 44], [44, 44, 44, 44, 55, 44, 44, 44],
+        [44, 44, 44, 59, 44, 44, 44, 44], [44, 44, 44, 69, 44, 68, 44, 44],
+        [44, 44, 44, 71, 44, 55, 44, 44], [44, 44, 44, 73, 44, 55, 44, 44],
+        [44, 44, 50, 44, 44, 44, 44, 44], [44, 44, 57, 44, 44, 44, 44, 44],
+        [44, 44, 70, 44, 44, 55, 59, 44], [44, 45, 55, 44, 44, 44, 44, 44],
+        [44, 55, 44, 44, 44, 44, 44, 59], [44, 55, 44, 45, 26, 44, 44, 44],
+        [44, 55, 44, 55, 44, 44, 44, 44], [44, 55, 44, 55, 69, 44, 44, 44],
+        [44, 57, 44, 44, 44, 38, 44, 44], [44, 57, 44, 59, 44, 44, 44, 45],
+        [44, 58, 44, 58, 44, 32, 44, 35], [44, 70, 44, 44, 44, 44, 44, 44],
+        [55, 44, 44, 44, 44, 54, 44, 40], [57, 39, 6, 44, 44, 44, 44, 44],
+        [57, 44, 44, 58, 44, 44, 44, 44], [59, 44, 21, 44, 44, 44, 44, 44],
+        [63, 44, 44, 55, 45, 44, 44, 28],
     ];
-    static BITSET_CANONICAL: [u64; 48] = [
+    static BITSET_CANONICAL: [u64; 44] = [
+        0b0000000111111111111111111111111111111111111111111111111111111111,
         0b1111111111000000000000000000000000000000000000000000000000000000,
         0b1111111111111111111111111111111111111111111111001111111111111111,
         0b1111110000000000000000000000000000000000000000000000000000000000,
         0b1111100000000000000000000000000000000000000000000000000000000000,
-        0b0001111111111111111111100000000000000000000000000000000000000000,
-        0b0000000111111111111111111111111111111111111111111111111111111111,
         0b0000000000000000000000000000111100000000000000000000000000000000,
-        0b1111111111111111111111111111111111111111111111111111111111111111,
         0b1111111111111110000000000000000000000000000000000000001111111111,
+        0b0001111111111111111111100000000000000000000000000000000000000000,
         0b0000001111111111000000111111111100000000000000000000000000000000,
         0b0000000000001111111111111111111111111111111111111111111110000000,
-        0b0000000000000111111111111100000000000000000000000000000000000000,
         0b0000000000000001110000000000000000000000000000000000000000000000,
         0b0000000000000000111111111000000000000000000000000000000000000000,
-        0b0000000000000000000000000000000000000000000000000000001111100111,
-        0b0000000000000000000000000000000000000000000000000000010000000010,
-        0b0000000000000000000000000000000000000000000111111111111111111111,
-        0b0000000000000000000000000000000000000000011111111111111111111111,
-        0b0000000000000000000000000000000000000111111111110000000000000000,
-        0b0000000000000000000000000000000000001111111111111111111111111111,
-        0b0000000000000000000000000000000011111111111111101111111100000000,
-        0b0000000000000000000000000000001111111011111111110000000000000000,
-        0b0000000000000000000111111111111111111111111111110000000000000000,
-        0b0000000000000000011111111111111111111111111111111111111111111111,
-        0b0000000000000000111111111111111111111111111111000000000000000000,
-        0b0000000000011110111011111111111111111111111111111111111111111111,
-        0b0000000000011111111111111111111000000011111111110000000000000000,
-        0b0000000011111100111111111100000000000000000000000000000000000000,
-        0b0000000111111111111111111100000001111111000000000000000000000000,
-        0b0000001111110000111111111100000000000000000000000000000000000000,
-        0b0000001111110001000000000000000000000000000000000000000000000000,
-        0b0000001111111111000000000000000000000011111111110000000000000000,
-        0b0000011100000000000000111111111000000000000000000000000010000000,
-        0b0000111111111111000000000000000000000000000000000000000000000000,
-        0b0000111111111111111111111111111000000000000000000000000000000000,
-        0b0010000000000000000000000000000000000000000000000000000000000000,
-        0b0011111111111111101111111111111111111111111111111111111111111110,
-        0b0110000000000000000000000000000000000000000000000000000111111111,
-        0b0111001000001100000000000000000000000000000000000000000000000000,
-        0b0111111100000000111111111100000000000000000000000000000000000000,
-        0b0111111111111111111111111111111100000000000000000000000000000000,
+        0b1111111111111111111111111111111111111111111111111111111111111111,
+        0b1111111111111111111111111111111111111111111111111100000000000000,
+        0b1111111111111111111111111111111111111111111111110000000000000000,
+        0b1111111111111111111111111111111100000000000000000000000000000000,
+        0b1111111111111111111111000000000000000000000000000000000000000000,
+        0b1111111111111110000000000000000000000000000000000000000000000000,
         0b1111111000000000000000000000000011111111000000000000000000000000,
+        0b0111111111111111111111111111111100000000000000000000000000000000,
+        0b0111111100000000111111111100000000000000000000000000000000000000,
+        0b0111001000001100000000000000000000000000000000000000000000000000,
+        0b0110000000000000000000000000000000000000000000000000000111111111,
+        0b0011111111111111101111111111111111111111111111111111111111111110,
+        0b0010000000000000000000000000000000000000000000000000000000000000,
+        0b0000111111111111111111111111111000000000000000000000000000000000,
+        0b0000111111111111000000000000000000000000000000000000000000000000,
+        0b0000011100000000000000111111111000000000000000000000000010000000,
+        0b0000001111111111000000000000000000000011111111110000000000000000,
+        0b0000001111110001000000000000000000000000000000000000000000000000,
+        0b0000001111110000111111111100000000000000000000000000000000000000,
+        0b0000000111111111111111111100000001111111000000000000000000000000,
+        0b0000000011111100111111111100000000000000000000000000000000000000,
+        0b0000000000011111111111111111111000000011111111110000000000000000,
+        0b0000000000011110111011111111111111111111111111111111111111111111,
+        0b0000000000000111111111111100000000000000000000000000000000000000,
+        0b0000000000000000111111111111111111111111111111000000000000000000,
+        0b0000000000000000000111111111111111111111111111110000000000000000,
+        0b0000000000000000000000000000001111111011111111110000000000000000,
+        0b0000000000000000000000000000000011111111111111101111111100000000,
+        0b0000000000000000000000000000000000000111111111110000000000000000,
+        0b0000000000000000000000000000000000000000000000000000010000000010,
+        0b0000000000000000000000000000000000000000000000000000001111100111,
         0b1111111100000000000000000000000011111111000000000000000000000000,
-        0b1111111111111110000000000000000000000000000000000000000000000000,
-        0b1111111111111111111111000000000000000000000000000000000000000000,
-        0b1111111111111111111111111111111100000000000000000000000000000000,
-        0b1111111111111111111111111111111111111111111111110000000000000000,
-        0b1111111111111111111111111111111111111111111111111100000000000000,
     ];
-    static BITSET_MAPPING: [(u8, u8); 26] = [
-        (0, 10), (0, 16), (0, 26), (0, 39), (0, 42), (0, 48), (0, 58), (1, 186), (1, 172), (2, 28),
-        (2, 54), (3, 22), (3, 48), (4, 23), (4, 55), (5, 140), (5, 176), (6, 49), (6, 50), (7, 128),
-        (8, 47), (9, 32), (10, 172), (11, 26), (12, 47), (13, 32),
+    static BITSET_MAPPING: [(u8, u8); 30] = [
+        (0, 185), (0, 175), (0, 76), (0, 172), (0, 165), (0, 164), (0, 162), (0, 157), (0, 138),
+        (0, 112), (1, 16), (1, 26), (1, 39), (1, 42), (1, 48), (1, 58), (2, 122), (2, 108), (3, 28),
+        (3, 54), (4, 22), (4, 48), (5, 49), (5, 50), (6, 47), (7, 55), (8, 32), (9, 108), (10, 47),
+        (11, 32),
     ];
 
     pub fn lookup(c: char) -> bool {
@@ -979,73 +946,66 @@ pub fn lookup(c: char) -> bool {
 pub mod uppercase {
     static BITSET_LAST_CHUNK_MAP: (u16, u8) = (124, 3);
     static BITSET_CHUNKS_MAP: [u8; 123] = [
-        12, 16, 4, 4, 2, 4, 4, 11, 8, 0, 4, 14, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
-        4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 6, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
-        4, 4, 4, 5, 4, 13, 4, 10, 4, 4, 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
-        4, 7, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 15, 4, 4,
-        4, 4, 9,
+        12, 15, 5, 5, 0, 5, 5, 2, 4, 11, 5, 14, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+        5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 8, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+        5, 5, 5, 6, 5, 13, 5, 10, 5, 5, 1, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+        5, 7, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 16, 5, 5,
+        5, 5, 9,
     ];
     static BITSET_INDEX_CHUNKS: [[u8; 16]; 17] = [
-        [8, 8, 2, 57, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8],
-        [8, 8, 4, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8],
-        [8, 8, 4, 9, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 4, 60],
-        [8, 8, 8, 8, 1, 49, 59, 8, 8, 8, 8, 8, 8, 8, 8, 8],
-        [8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8],
-        [8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 54, 8, 8, 8],
-        [8, 8, 8, 8, 8, 8, 8, 8, 8, 17, 13, 8, 31, 37, 35, 23],
-        [8, 8, 8, 8, 8, 8, 8, 8, 8, 63, 8, 8, 8, 8, 8, 8],
-        [8, 8, 8, 8, 42, 20, 66, 8, 8, 8, 8, 8, 8, 8, 8, 8],
-        [8, 8, 8, 8, 64, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8],
-        [8, 8, 22, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8],
-        [8, 8, 45, 8, 8, 8, 8, 8, 34, 34, 65, 34, 47, 19, 27, 28],
-        [8, 51, 8, 14, 41, 30, 29, 36, 38, 10, 8, 8, 8, 40, 16, 44],
-        [15, 8, 1, 11, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8],
-        [18, 43, 34, 21, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8],
-        [55, 0, 24, 52, 39, 50, 25, 53, 46, 56, 5, 26, 3, 62, 61, 7],
-        [58, 32, 6, 33, 48, 12, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8],
+        [41, 41, 5, 33, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 5, 0],
+        [41, 41, 5, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41],
+        [41, 41, 38, 41, 41, 41, 41, 41, 17, 17, 61, 17, 40, 29, 24, 23],
+        [41, 41, 41, 41, 9, 8, 42, 41, 41, 41, 41, 41, 41, 41, 41, 41],
+        [41, 41, 41, 41, 35, 28, 65, 41, 41, 41, 41, 41, 41, 41, 41, 41],
+        [41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41],
+        [41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 56, 41, 41, 41],
+        [41, 41, 41, 41, 41, 41, 41, 41, 41, 46, 41, 41, 41, 41, 41, 41],
+        [41, 41, 41, 41, 41, 41, 41, 41, 41, 60, 59, 41, 20, 14, 16, 4],
+        [41, 41, 41, 41, 47, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41],
+        [41, 41, 51, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41],
+        [41, 41, 52, 43, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41],
+        [41, 53, 41, 31, 34, 21, 22, 15, 13, 32, 41, 41, 41, 11, 30, 37],
+        [48, 41, 9, 44, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41],
+        [49, 36, 17, 27, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41],
+        [50, 19, 2, 18, 10, 45, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41],
+        [57, 1, 26, 54, 12, 7, 25, 55, 39, 58, 6, 3, 64, 63, 62, 66],
     ];
-    static BITSET_CANONICAL: [u64; 51] = [
+    static BITSET_CANONICAL: [u64; 41] = [
+        0b0000000000111111111111111111111111111111111111111111111111111111,
         0b1111111111111111111111110000000000000000000000000011111111111111,
-        0b1111111111111111000000000000000000000000000000000000000000000000,
-        0b1111111111000000000000000000000000000000000000000000000000000000,
-        0b0000000000011111111111111111111111110000000000000000000000000000,
-        0b1111111111111111111111111111111100000000000000000000000000000000,
-        0b1111111111111111111111110000000000000000000000000000001111111111,
         0b0101010101010101010101010101010101010101010101010101010000000001,
-        0b0000000000000000000000000000000000000000000000000000010000000000,
-        0b0000000000000000000000000000000000000000000000000000000000000000,
-        0b0000000000000000000000000000000000000000000000000010000010111111,
-        0b0000000000000000000000000000000000000000000000000101010101111010,
-        0b0000000000000000000000000000000000000000000011111111111111111111,
-        0b0000000000000000000000000000000000000000011111111111111111111111,
-        0b0000000000000000000000000000000000000101010101010101010101010101,
-        0b0000000000000000000000000000000001111111011111111111111111111111,
-        0b0000000000000000000000001111111111111111111111111111111111111111,
-        0b0000000000000000000011111111101111111111111111101101011101000000,
-        0b0000000000000000000101010101010101010101010101010101010101010101,
-        0b0000000000000000011111111111111111111111111111111111111111111111,
-        0b0000000000000000111111110000000010101010000000000011111100000000,
-        0b0000000000000000111111111111111100000000000000000000000000100000,
-        0b0000000000000100001010000000010101010101010101010101010101010101,
-        0b0000000000000111111111111111111111111111111111111111111111111111,
-        0b0000000000100000000000000000000000000000000000000000001011110100,
-        0b0000000000111111110111100110010011010000000000000000000000000011,
-        0b0000001111111111111111111111111100000000000000000000000000111111,
         0b0000011111111111111111111111110000000000000000000000000000000001,
-        0b0000111100000000000000000000000000000000000000000000000000000000,
-        0b0000111100000000000111110000000000001111000000000000111100000000,
-        0b0001000110101110110100101101010110110001110110111100111011010110,
-        0b0010101101010101010101010101010101010101010101010101010010101010,
-        0b0101010101010100010101010101010000000000000000000000000000000000,
-        0b0101010101010101010101010101010100000000000000000000000000000000,
-        0b0101010101010101010101010101010101010101010101010010101010101011,
-        0b0101010101010101010101010101010101010101010101010101010101010101,
-        0b0101010101011111011111010101010101010101010001010010100001010101,
-        0b0101010111010010010101010101010101001010101010101010010010010000,
-        0b0110101000000000010101010101010101010101010101010101010101010101,
-        0b0110110000000101010101010101010101010101010101010101010101010101,
-        0b0111101100000000000000000000000000011111110111111110011110110000,
+        0b0000000000100000000000000000000000000000000000000000001011110100,
+        0b1111111111111111111111111111111100000000000000000000000000000000,
+        0b1111111111111111111111110000000000000000000000000000001111111111,
+        0b1111111111111111111100000000000000000000000000011111110001011111,
+        0b1111111111111111000000111111111111111111111111110000001111111111,
+        0b1111111111111111000000000000000000000000000000000000000000000000,
+        0b1111111111111110010101010101010101010101010101010101010101010101,
         0b1000000001000101000000000000000000000000000000000000000000000000,
+        0b0111101100000000000000000000000000011111110111111110011110110000,
+        0b0110110000000101010101010101010101010101010101010101010101010101,
+        0b0110101000000000010101010101010101010101010101010101010101010101,
+        0b0101010111010010010101010101010101001010101010101010010010010000,
+        0b0101010101011111011111010101010101010101010001010010100001010101,
+        0b0101010101010101010101010101010101010101010101010101010101010101,
+        0b0101010101010101010101010101010101010101010101010010101010101011,
+        0b0101010101010101010101010101010100000000000000000000000000000000,
+        0b0101010101010100010101010101010000000000000000000000000000000000,
+        0b0010101101010101010101010101010101010101010101010101010010101010,
+        0b0001000110101110110100101101010110110001110110111100111011010110,
+        0b0000111100000000000111110000000000001111000000000000111100000000,
+        0b0000111100000000000000000000000000000000000000000000000000000000,
+        0b0000001111111111111111111111111100000000000000000000000000111111,
+        0b0000000000111111110111100110010011010000000000000000000000000011,
+        0b0000000000000100001010000000010101010101010101010101010101010101,
+        0b0000000000000000111111111111111100000000000000000000000000100000,
+        0b0000000000000000111111110000000010101010000000000011111100000000,
+        0b0000000000000000000011111111101111111111111111101101011101000000,
+        0b0000000000000000000000000000000001111111011111111111111111111111,
+        0b0000000000000000000000000000000000000000000000000101010101111010,
+        0b0000000000000000000000000000000000000000000000000010000010111111,
         0b1010101001010101010101010101010101010101010101010101010101010101,
         0b1100000000001111001111010101000000111110001001110011100010000100,
         0b1100000000100101111010101001110100000000000000000000000000000000,
@@ -1053,13 +1013,11 @@ pub mod uppercase {
         0b1110011111111111111111111111111111111111111111110000000000000000,
         0b1111000000000000000000000000001111111111111111111111111100000000,
         0b1111111100000000111111110000000000111111000000001111111100000000,
-        0b1111111111111110010101010101010101010101010101010101010101010101,
-        0b1111111111111111000000111111111111111111111111110000001111111111,
-        0b1111111111111111111100000000000000000000000000011111110001011111,
     ];
-    static BITSET_MAPPING: [(u8, u8); 16] = [
-        (0, 179), (0, 130), (0, 134), (0, 147), (0, 12), (0, 8), (1, 16), (1, 128), (2, 10),
-        (2, 128), (3, 52), (3, 58), (4, 32), (5, 24), (6, 20), (7, 57),
+    static BITSET_MAPPING: [(u8, u8); 26] = [
+        (0, 182), (0, 74), (0, 166), (0, 162), (0, 159), (0, 150), (0, 148), (0, 142), (0, 135),
+        (0, 134), (0, 131), (0, 64), (1, 115), (1, 66), (1, 70), (1, 83), (1, 12), (1, 8), (2, 164),
+        (2, 146), (2, 20), (3, 146), (3, 140), (3, 134), (4, 178), (4, 171),
     ];
 
     pub fn lookup(c: char) -> bool {
@@ -1078,20 +1036,19 @@ pub fn lookup(c: char) -> bool {
 pub mod white_space {
     static BITSET_LAST_CHUNK_MAP: (u16, u8) = (32, 3);
     static BITSET_CHUNKS_MAP: [u8; 22] = [
-        2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 1,
+        0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 1,
     ];
     static BITSET_INDEX_CHUNKS: [[u8; 6]; 4] = [
-        [1, 1, 1, 1, 1, 1], [1, 1, 4, 0, 1, 1], [3, 1, 2, 1, 1, 1], [5, 1, 1, 1, 1, 1],
+        [1, 4, 2, 4, 4, 4], [4, 4, 0, 3, 4, 4], [4, 4, 4, 4, 4, 4], [5, 4, 4, 4, 4, 4],
     ];
-    static BITSET_CANONICAL: [u64; 5] = [
-        0b0000000000000000000000000000000010000000000000000000000000000000,
-        0b0000000000000000000000000000000000000000000000000000000000000000,
-        0b0000000000000000000000000000000100000000000000000000000000100000,
-        0b0000000000000000000000000000000100000000000000000011111000000000,
+    static BITSET_CANONICAL: [u64; 4] = [
         0b0000000000000000100000110000000000000000000000000000011111111111,
+        0b0000000000000000000000000000000100000000000000000011111000000000,
+        0b0000000000000000000000000000000100000000000000000000000000100000,
+        0b0000000000000000000000000000000010000000000000000000000000000000,
     ];
-    static BITSET_MAPPING: [(u8, u8); 1] = [
-        (0, 33),
+    static BITSET_MAPPING: [(u8, u8); 2] = [
+        (0, 176), (0, 175),
     ];
 
     pub fn lookup(c: char) -> bool {
index 5e8865fc9e3b5691120025b6c9604e1c5a1029a9..65ece05043a8aa18302095a88957ab9ee871a249 100644 (file)
@@ -286,13 +286,18 @@ fn range_search<
     } else {
         let (real_idx, mapping) = bitset_canonicalized[idx - CANONICAL];
         let mut word = bitset_canonical[real_idx as usize];
-        let should_invert = mapping & (1 << 7) != 0;
+        let should_invert = mapping & (1 << 6) != 0;
         if should_invert {
             word = !word;
         }
-        // Unset the inversion bit
-        let rotate_by = mapping & !(1 << 7);
-        word = word.rotate_left(rotate_by as u32);
+        // Lower 6 bits
+        let quantity = mapping & ((1 << 6) - 1);
+        if mapping & (1 << 7) != 0 {
+            // shift
+            word >>= quantity as u64;
+        } else {
+            word = word.rotate_left(quantity as u32);
+        }
         word
     };
     (word & (1 << (needle % 64) as u64)) != 0
index 38b36c34042287168a6936faf9ae918d5c7fd390..a0814fd0d36633be1a72423815649906810260c9 100644 (file)
@@ -233,6 +233,7 @@ enum Mapping {
             Rotate(u32),
             Invert,
             RotateAndInvert(u32),
+            ShiftRight(u32),
         }
 
         // key is the word being mapped to
@@ -270,6 +271,18 @@ enum Mapping {
                         continue 'b;
                     }
                 }
+
+                // All possible shifts
+                for shift_by in 1..64 {
+                    if a == (b >> shift_by) {
+                        mappings
+                            .entry(b)
+                            .or_default()
+                            .push((a, Mapping::ShiftRight(shift_by as u32)));
+                        // We're not interested in further mappings between a and b
+                        continue 'b;
+                    }
+                }
             }
         }
         // These are the bitset words which will be represented "raw" (as a u64)
@@ -384,6 +397,8 @@ enum UniqueMapping {
             assert!(distinct_indices.insert(idx));
         }
 
+        const LOWER_6: u32 = (1 << 6) - 1;
+
         let canonicalized_words = canonicalized_words
             .into_iter()
             .map(|v| {
@@ -391,14 +406,18 @@ enum UniqueMapping {
                     u8::try_from(v.0).unwrap(),
                     match v.1 {
                         Mapping::RotateAndInvert(amount) => {
-                            assert!(amount < (1 << 7));
-                            1 << 7 | (amount as u8)
+                            assert_eq!(amount, amount & LOWER_6);
+                            1 << 6 | (amount as u8)
                         }
                         Mapping::Rotate(amount) => {
-                            assert!(amount < (1 << 7));
+                            assert_eq!(amount, amount & LOWER_6);
                             amount as u8
                         }
-                        Mapping::Invert => 1 << 7,
+                        Mapping::Invert => 1 << 6,
+                        Mapping::ShiftRight(shift_by) => {
+                            assert_eq!(shift_by, shift_by & LOWER_6);
+                            1 << 7 | (shift_by as u8)
+                        }
                     },
                 )
             })