diff --git a/all_cases/mark.h b/all_cases/mark.h index 83f0104..74ccdd2 100644 --- a/all_cases/mark.h +++ b/all_cases/mark.h @@ -72,293 +72,1096 @@ const uint32_t BASIC_RANGES_OFFSET[256] = { 6847530, 6896085, 6911248, 6926411, 6969655, 7103308, 7146552, 7189796, }; -const uint32_t SHORT_CODE_MARK[16][256] = { - { - 70039, 0, 25594, 70039, 25594, 9527, 9324, 25594, 22458, 0, 9527, 22458, 70039, 0, 25594, 70039, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 25594, 9527, 9324, 25594, 0, 0, 0, 0, 8028, 3361, 2867, 7887, 25594, 9309, 9126, 25187, - 70039, 0, 25594, 70039, 25594, 9309, 9126, 25187, 22458, 0, 9309, 22143, 70039, 0, 25187, 69216, - 25594, 9527, 9324, 25594, 0, 0, 0, 0, 9386, 3308, 3316, 9177, 25594, 9309, 9126, 25187, - 9527, 3361, 2990, 9309, 3361, 1162, 926, 2952, 3307, 1016, 1031, 2914, 9309, 2952, 2644, 8401, - 8028, 3361, 2867, 7887, 0, 0, 0, 0, 3308, 1162, 1017, 2914, 7887, 2952, 2560, 7225, - 25594, 9309, 9126, 25187, 0, 0, 0, 0, 9177, 2914, 2918, 8297, 25187, 8401, 8268, 23306, - 25594, 9527, 9324, 25594, 0, 0, 0, 0, 9386, 3308, 3316, 9177, 25594, 9309, 9126, 25187, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 9527, 3361, 2990, 9309, 3361, 1162, 926, 2952, 3307, 1016, 1031, 2914, 9309, 2952, 2644, 8401, - 25594, 9309, 9126, 25187, 0, 0, 0, 0, 9177, 2914, 2918, 8297, 25187, 8401, 8268, 23306, - 70039, 0, 25594, 70039, 25594, 9309, 9126, 25187, 22458, 0, 9309, 22143, 70039, 0, 25187, 69216, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 25594, 9309, 9126, 25187, 0, 0, 0, 0, 7887, 2952, 2560, 7225, 25187, 8401, 8268, 23306, - 70039, 0, 25187, 69216, 25187, 8401, 8268, 23306, 22143, 0, 8401, 20624, 69216, 0, 23306, 65162, - }, - { - 70039, 0, 25594, 70039, 0, 0, 0, 0, 25594, 0, 9386, 25594, 70039, 0, 25594, 70039, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 25594, 9527, 9324, 25594, 0, 0, 0, 0, 9527, 3361, 2990, 9309, 25594, 9309, 9126, 25187, - 70039, 0, 25594, 70039, 0, 0, 0, 0, 25594, 0, 9177, 25187, 70039, 0, 25187, 69216, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 25594, 9527, 9324, 25594, 0, 0, 0, 0, 9386, 3308, 3316, 9177, 25594, 9309, 9126, 25187, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 9527, 3361, 2990, 9309, 3361, 1162, 926, 2952, 3307, 1016, 1031, 2914, 9309, 2952, 2644, 8401, - 25594, 9309, 9126, 25187, 0, 0, 0, 0, 9177, 2914, 2918, 8297, 25187, 8401, 8268, 23306, - 70039, 0, 25594, 70039, 0, 0, 0, 0, 25594, 0, 9177, 25187, 70039, 0, 25187, 69216, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 25594, 9309, 9126, 25187, 0, 0, 0, 0, 9309, 2952, 2644, 8401, 25187, 8401, 8268, 23306, - 70039, 0, 25187, 69216, 0, 0, 0, 0, 25187, 0, 8297, 23306, 69216, 0, 23306, 65162, - }, - { - 70039, 0, 22458, 70039, 25594, 9527, 9324, 25594, 25594, 0, 9527, 25594, 70039, 0, 22458, 70039, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 25594, 9527, 9324, 25594, 0, 0, 0, 0, 9527, 3361, 2990, 9309, 25594, 9309, 9126, 25187, - 70039, 0, 22458, 70039, 25594, 9309, 9126, 25187, 25594, 0, 9309, 25187, 70039, 0, 22143, 69216, - 25594, 9527, 9324, 25594, 0, 0, 0, 0, 9527, 0, 3307, 9309, 25594, 9309, 9126, 25187, - 9527, 3361, 2990, 9309, 3361, 1162, 926, 2952, 3307, 1016, 1031, 2914, 9309, 2952, 2644, 8401, - 9527, 3361, 2990, 9309, 0, 0, 0, 0, 3361, 1162, 926, 2952, 9309, 2952, 2644, 8401, - 25594, 9309, 9126, 25187, 0, 0, 0, 0, 9309, 0, 2914, 8401, 25187, 8401, 8268, 23306, - 25594, 9527, 9324, 25594, 0, 0, 0, 0, 9527, 0, 3307, 9309, 25594, 9309, 9126, 25187, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 9527, 3361, 2990, 9309, 3361, 1162, 926, 2952, 3307, 1016, 1031, 2914, 9309, 2952, 2644, 8401, - 25594, 9309, 9126, 25187, 0, 0, 0, 0, 9309, 0, 2914, 8401, 25187, 8401, 8268, 23306, - 70039, 0, 22458, 70039, 25594, 9309, 9126, 25187, 25594, 0, 9309, 25187, 70039, 0, 22143, 69216, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 25594, 9309, 9126, 25187, 0, 0, 0, 0, 9309, 2952, 2644, 8401, 25187, 8401, 8268, 23306, - 70039, 0, 22143, 69216, 25187, 8401, 8268, 23306, 25187, 0, 8401, 23306, 69216, 0, 20624, 65162, - }, - { - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - }, - { - 62844, 0, 22518, 62844, 22460, 9527, 8397, 22460, 22460, 0, 9527, 22460, 62844, 0, 22518, 62844, - 22460, 9527, 8397, 22460, 0, 0, 0, 0, 9527, 0, 3361, 9309, 22460, 9309, 8223, 22144, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 62844, 0, 22518, 62844, 22460, 9309, 8223, 22144, 22460, 0, 9309, 22144, 62844, 0, 22197, 62136, - 22460, 9527, 8397, 22460, 0, 0, 0, 0, 9527, 0, 3361, 9309, 22460, 9309, 8223, 22144, - 9527, 0, 3308, 9309, 3361, 1162, 926, 2952, 3361, 0, 1162, 2952, 9309, 0, 2914, 8401, - 9527, 0, 3308, 9309, 0, 0, 0, 0, 3361, 1162, 926, 2952, 9309, 0, 2914, 8401, - 22460, 9309, 8223, 22144, 0, 0, 0, 0, 9309, 0, 2952, 8401, 22144, 8401, 7475, 20624, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 62844, 0, 22518, 62844, 22460, 9309, 8223, 22144, 22460, 0, 9309, 22144, 62844, 0, 22197, 62136, - 22460, 9309, 8223, 22144, 0, 0, 0, 0, 9309, 0, 2952, 8401, 22144, 8401, 7475, 20624, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 62844, 0, 22197, 62136, 22144, 8401, 7475, 20624, 22144, 0, 8401, 20624, 62136, 0, 20662, 58644, - }, - { - 48001, 0, 19802, 48001, 19802, 0, 8397, 19802, 0, 0, 0, 0, 48001, 0, 19802, 48001, - 19802, 0, 8397, 19802, 0, 0, 0, 0, 8169, 0, 3361, 8019, 19802, 0, 8223, 19549, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 48001, 0, 19802, 48001, 19802, 0, 8223, 19549, 0, 0, 0, 0, 48001, 0, 19549, 47574, - 19802, 0, 8397, 19802, 0, 0, 0, 0, 8169, 0, 3361, 8019, 19802, 0, 8223, 19549, - 8169, 0, 3361, 8019, 0, 0, 0, 0, 3361, 0, 1162, 2952, 8019, 0, 2952, 7329, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 19802, 0, 8223, 19549, 0, 0, 0, 0, 8019, 0, 2952, 7329, 19549, 0, 7475, 18300, - 19802, 0, 8169, 19802, 8169, 0, 3361, 8019, 0, 0, 0, 0, 19802, 0, 8019, 19549, - 8169, 0, 3361, 8019, 0, 0, 0, 0, 3361, 0, 1016, 2952, 8019, 0, 2952, 7329, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 19802, 0, 8019, 19549, 8019, 0, 2952, 7329, 0, 0, 0, 0, 19549, 0, 7329, 18300, - 48001, 0, 19802, 48001, 19802, 0, 8223, 19549, 0, 0, 0, 0, 48001, 0, 19549, 47574, - 19802, 0, 8223, 19549, 0, 0, 0, 0, 8019, 0, 2952, 7329, 19549, 0, 7475, 18300, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 48001, 0, 19549, 47574, 19549, 0, 7475, 18300, 0, 0, 0, 0, 47574, 0, 18300, 45324, - }, - { - 62844, 0, 0, 62844, 22518, 9527, 8281, 22518, 0, 0, 0, 0, 62844, 0, 0, 62844, - 22518, 9527, 8281, 22518, 0, 0, 0, 0, 0, 0, 0, 0, 22518, 9309, 8112, 22197, - 22460, 0, 0, 22460, 9527, 0, 3308, 9309, 0, 0, 0, 0, 22460, 0, 0, 22144, - 62844, 0, 0, 62844, 22518, 9309, 8112, 22197, 0, 0, 0, 0, 62844, 0, 0, 62136, - 22518, 9527, 8281, 22518, 0, 0, 0, 0, 0, 0, 0, 0, 22518, 9309, 8112, 22197, - 9527, 0, 3361, 9309, 3308, 1162, 1017, 2914, 3308, 0, 1162, 2914, 9309, 0, 2952, 8401, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 22518, 9309, 8112, 22197, 0, 0, 0, 0, 0, 0, 0, 0, 22197, 8401, 7384, 20662, - 22518, 0, 0, 22518, 9527, 0, 3361, 9309, 0, 0, 0, 0, 22518, 0, 0, 22197, - 9527, 0, 3361, 9309, 0, 0, 0, 0, 0, 0, 0, 0, 9309, 0, 2952, 8401, - 9527, 0, 0, 9309, 3308, 1162, 1017, 2914, 0, 0, 0, 0, 9309, 0, 0, 8401, - 22518, 0, 0, 22197, 9309, 0, 2952, 8401, 0, 0, 0, 0, 22197, 0, 0, 20662, - 62844, 0, 0, 62844, 22518, 9309, 8112, 22197, 0, 0, 0, 0, 62844, 0, 0, 62136, - 22518, 9309, 8112, 22197, 0, 0, 0, 0, 0, 0, 0, 0, 22197, 8401, 7384, 20662, - 22460, 0, 0, 22144, 9309, 0, 2914, 8401, 0, 0, 0, 0, 22144, 0, 0, 20624, - 62844, 0, 0, 62136, 22197, 8401, 7384, 20662, 0, 0, 0, 0, 62136, 0, 0, 58644, - }, - { - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - }, - { - 48001, 0, 17580, 48001, 19802, 8397, 0, 19802, 15040, 0, 6375, 15040, 48001, 0, 17580, 48001, - 19802, 8397, 0, 19802, 0, 0, 0, 0, 7287, 2928, 0, 7155, 19802, 8223, 0, 19549, - 16794, 0, 6012, 16794, 8397, 0, 0, 8223, 6016, 0, 2496, 5937, 16794, 0, 5934, 16620, - 48001, 0, 17580, 48001, 19802, 8223, 0, 19549, 15040, 0, 6267, 14882, 48001, 0, 17370, 47574, - 19802, 8397, 0, 19802, 0, 0, 0, 0, 7287, 2928, 0, 7155, 19802, 8223, 0, 19549, - 8397, 2929, 0, 8223, 2929, 1031, 913, 2602, 0, 0, 0, 0, 8223, 2602, 0, 7475, - 6016, 2929, 0, 5937, 0, 0, 0, 0, 2496, 1031, 0, 2252, 5937, 2602, 0, 5531, - 19802, 8223, 0, 19549, 0, 0, 0, 0, 7155, 2602, 0, 6561, 19549, 7475, 0, 18300, - 19802, 0, 7287, 19802, 8397, 2929, 0, 8223, 6016, 0, 2496, 5937, 19802, 0, 7155, 19549, - 8397, 2929, 0, 8223, 0, 0, 0, 0, 2928, 1031, 0, 2602, 8223, 2602, 0, 7475, - 8397, 0, 2928, 8223, 2929, 1031, 913, 2602, 2929, 0, 1031, 2602, 8223, 0, 2602, 7475, - 19802, 0, 7155, 19549, 8223, 2602, 0, 7475, 5937, 0, 2252, 5531, 19549, 0, 6561, 18300, - 48001, 0, 17580, 48001, 19802, 8223, 0, 19549, 15040, 0, 6267, 14882, 48001, 0, 17370, 47574, - 19802, 8223, 0, 19549, 0, 0, 0, 0, 7155, 2602, 0, 6561, 19549, 7475, 0, 18300, - 16794, 0, 5934, 16620, 8223, 0, 0, 7475, 5937, 0, 2252, 5531, 16620, 0, 5530, 15698, - 48001, 0, 17370, 47574, 19549, 7475, 0, 18300, 14882, 0, 5779, 14070, 47574, 0, 16318, 45324, - }, - { - 39202, 0, 13860, 39202, 13860, 5741, 5741, 13860, 13860, 0, 5741, 13860, 39202, 0, 13860, 39202, - 13860, 5741, 5741, 13860, 0, 0, 0, 0, 4925, 1936, 1998, 4857, 13860, 5652, 5652, 13716, - 13860, 0, 4756, 13860, 5741, 0, 2323, 5652, 5741, 0, 2323, 5652, 13860, 0, 4701, 13716, - 39202, 0, 13860, 39202, 13860, 5652, 5652, 13716, 13860, 0, 5652, 13716, 39202, 0, 13716, 38880, - 13860, 5741, 5741, 13860, 0, 0, 0, 0, 4925, 1936, 1998, 4857, 13860, 5652, 5652, 13716, - 5741, 2323, 0, 5652, 2323, 821, 0, 2088, 2323, 821, 0, 2088, 5652, 2088, 0, 5232, - 4756, 2323, 1936, 4701, 0, 0, 0, 0, 1936, 821, 703, 1772, 4701, 2088, 1772, 4411, - 13860, 5652, 5652, 13716, 0, 0, 0, 0, 4857, 1772, 1814, 4529, 13716, 5232, 5232, 12972, - 13860, 0, 4925, 13860, 5741, 2323, 0, 5652, 4756, 0, 1936, 4701, 13860, 0, 4857, 13716, - 5741, 2323, 0, 5652, 0, 0, 0, 0, 1936, 821, 0, 1772, 5652, 2088, 0, 5232, - 5741, 0, 1936, 5652, 2323, 821, 0, 2088, 2323, 0, 821, 2088, 5652, 0, 1772, 5232, - 13860, 0, 4857, 13716, 5652, 2088, 0, 5232, 4701, 0, 1772, 4411, 13716, 0, 4529, 12972, - 39202, 0, 13860, 39202, 13860, 5652, 5652, 13716, 13860, 0, 5652, 13716, 39202, 0, 13716, 38880, - 13860, 5652, 5652, 13716, 0, 0, 0, 0, 4857, 1772, 1814, 4529, 13716, 5232, 5232, 12972, - 13860, 0, 4701, 13716, 5652, 0, 2088, 5232, 5652, 0, 2088, 5232, 13716, 0, 4411, 12972, - 39202, 0, 13716, 38880, 13716, 5232, 5232, 12972, 13716, 0, 5232, 12972, 38880, 0, 12972, 37152, - }, - { - 48001, 0, 19802, 48001, 17580, 6375, 6466, 17580, 16794, 0, 8397, 16794, 48001, 0, 19802, 48001, - 17580, 6375, 6466, 17580, 0, 0, 0, 0, 7287, 2496, 2611, 7155, 17580, 6267, 6357, 17370, - 15040, 0, 6016, 15040, 6375, 0, 2240, 6267, 6016, 0, 2929, 5937, 15040, 0, 5937, 14882, - 48001, 0, 19802, 48001, 17580, 6267, 6357, 17370, 16794, 0, 8223, 16620, 48001, 0, 19549, 47574, - 17580, 6375, 6466, 17580, 0, 0, 0, 0, 7287, 2496, 2611, 7155, 17580, 6267, 6357, 17370, - 6375, 2496, 2232, 6267, 2496, 1031, 0, 2252, 2240, 783, 810, 2024, 6267, 2252, 2020, 5779, - 6012, 2496, 2178, 5934, 0, 0, 0, 0, 2928, 1031, 914, 2602, 5934, 2252, 1982, 5530, - 17580, 6267, 6357, 17370, 0, 0, 0, 0, 7155, 2252, 2332, 6561, 17370, 5779, 5857, 16318, - 17580, 0, 7287, 17580, 6375, 2496, 2232, 6267, 6012, 0, 2928, 5934, 17580, 0, 7155, 17370, - 6375, 2496, 2232, 6267, 0, 0, 0, 0, 2496, 1031, 782, 2252, 6267, 2252, 2020, 5779, - 6375, 0, 2496, 6267, 2496, 1031, 0, 2252, 2496, 0, 1031, 2252, 6267, 0, 2252, 5779, - 17580, 0, 7155, 17370, 6267, 2252, 2020, 5779, 5934, 0, 2602, 5530, 17370, 0, 6561, 16318, - 48001, 0, 19802, 48001, 17580, 6267, 6357, 17370, 16794, 0, 8223, 16620, 48001, 0, 19549, 47574, - 17580, 6267, 6357, 17370, 0, 0, 0, 0, 7155, 2252, 2332, 6561, 17370, 5779, 5857, 16318, - 15040, 0, 5937, 14882, 6267, 0, 2024, 5779, 5937, 0, 2602, 5531, 14882, 0, 5531, 14070, - 48001, 0, 19549, 47574, 17370, 5779, 5857, 16318, 16620, 0, 7475, 15698, 47574, 0, 18300, 45324, - }, - { - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - }, - { - 62844, 0, 22880, 62844, 22518, 8281, 9527, 22518, 20212, 0, 8542, 20212, 62844, 0, 22880, 62844, - 22518, 8281, 9527, 22518, 0, 0, 0, 0, 8227, 2876, 3370, 8067, 22518, 8112, 9309, 22197, - 19968, 0, 7112, 19968, 8281, 0, 3308, 8112, 7282, 0, 2990, 7152, 19968, 0, 6996, 19701, - 62844, 0, 22880, 62844, 22518, 8112, 9309, 22197, 20212, 0, 8358, 19937, 62844, 0, 22540, 62136, - 22518, 8281, 9527, 22518, 0, 0, 0, 0, 8227, 2876, 3370, 8067, 22518, 8112, 9309, 22197, - 8281, 2937, 2867, 8112, 2937, 1031, 810, 2606, 3308, 1017, 1162, 2914, 8112, 2606, 2560, 7384, - 7088, 2937, 2937, 6975, 0, 0, 0, 0, 2920, 1031, 1031, 2598, 6975, 2606, 2606, 6429, - 22518, 8112, 9309, 22197, 0, 0, 0, 0, 8067, 2564, 2956, 7357, 22197, 7384, 8401, 20662, - 22518, 0, 8227, 22518, 8281, 2937, 2867, 8112, 7088, 0, 2920, 6975, 22518, 0, 8067, 22197, - 8281, 2937, 2867, 8112, 0, 0, 0, 0, 2876, 1031, 886, 2564, 8112, 2606, 2560, 7384, - 8281, 0, 2876, 8112, 2937, 1031, 810, 2606, 2937, 0, 1031, 2606, 8112, 0, 2564, 7384, - 22518, 0, 8067, 22197, 8112, 2606, 2560, 7384, 6975, 0, 2598, 6429, 22197, 0, 7357, 20662, - 62844, 0, 22880, 62844, 22518, 8112, 9309, 22197, 20212, 0, 8358, 19937, 62844, 0, 22540, 62136, - 22518, 8112, 9309, 22197, 0, 0, 0, 0, 8067, 2564, 2956, 7357, 22197, 7384, 8401, 20662, - 19968, 0, 6996, 19701, 8112, 0, 2914, 7384, 7152, 0, 2644, 6560, 19701, 0, 6442, 18410, - 62844, 0, 22540, 62136, 22197, 7384, 8401, 20662, 19937, 0, 7580, 18616, 62136, 0, 20944, 58644, - }, - { - 48001, 0, 17580, 48001, 17580, 6466, 6375, 17580, 15222, 0, 6466, 15222, 48001, 0, 17580, 48001, - 17580, 6466, 6375, 17580, 0, 0, 0, 0, 6461, 2269, 2286, 6354, 17580, 6357, 6267, 17370, - 15222, 0, 5456, 15222, 6466, 0, 2240, 6357, 5465, 0, 2270, 5391, 15222, 0, 5385, 15063, - 48001, 0, 17580, 48001, 17580, 6357, 6267, 17370, 15222, 0, 6357, 15063, 48001, 0, 17370, 47574, - 17580, 6466, 6375, 17580, 0, 0, 0, 0, 6461, 2269, 2286, 6354, 17580, 6357, 6267, 17370, - 6466, 2270, 2277, 6357, 2270, 821, 716, 2050, 2240, 705, 810, 2024, 6357, 2050, 2054, 5857, - 5456, 2270, 1952, 5385, 0, 0, 0, 0, 2269, 821, 717, 2050, 5385, 2050, 1780, 5023, - 17580, 6357, 6267, 17370, 0, 0, 0, 0, 6354, 2050, 2058, 5856, 17370, 5857, 5779, 16318, - 17580, 0, 6461, 17580, 6466, 2270, 2277, 6357, 5456, 0, 2269, 5385, 17580, 0, 6354, 17370, - 6466, 2270, 2277, 6357, 0, 0, 0, 0, 2269, 821, 716, 2050, 6357, 2050, 2054, 5857, - 6466, 0, 2269, 6357, 2270, 821, 716, 2050, 2270, 0, 821, 2050, 6357, 0, 2050, 5857, - 17580, 0, 6354, 17370, 6357, 2050, 2054, 5857, 5385, 0, 2050, 5023, 17370, 0, 5856, 16318, - 48001, 0, 17580, 48001, 17580, 6357, 6267, 17370, 15222, 0, 6357, 15063, 48001, 0, 17370, 47574, - 17580, 6357, 6267, 17370, 0, 0, 0, 0, 6354, 2050, 2058, 5856, 17370, 5857, 5779, 16318, - 15222, 0, 5385, 15063, 6357, 0, 2024, 5857, 5391, 0, 2050, 5025, 15063, 0, 5023, 14238, - 48001, 0, 17370, 47574, 17370, 5857, 5779, 16318, 15063, 0, 5857, 14238, 47574, 0, 16318, 45324, - }, - { - 62844, 0, 22518, 62844, 22880, 8542, 8542, 22880, 19968, 0, 8281, 19968, 62844, 0, 22518, 62844, - 22880, 8542, 8542, 22880, 0, 0, 0, 0, 8227, 2920, 2983, 8067, 22880, 8358, 8358, 22540, - 20212, 0, 7088, 20212, 8542, 0, 3037, 8358, 7282, 0, 2937, 7152, 20212, 0, 6975, 19937, - 62844, 0, 22518, 62844, 22880, 8358, 8358, 22540, 19968, 0, 8112, 19701, 62844, 0, 22197, 62136, - 22880, 8542, 8542, 22880, 0, 0, 0, 0, 8227, 2920, 2983, 8067, 22880, 8358, 8358, 22540, - 8542, 2990, 2650, 8358, 2990, 1031, 915, 2644, 3037, 926, 939, 2678, 8358, 2644, 2362, 7580, - 7112, 2990, 2603, 6996, 0, 0, 0, 0, 2876, 1031, 913, 2564, 6996, 2644, 2328, 6442, - 22880, 8358, 8358, 22540, 0, 0, 0, 0, 8067, 2598, 2640, 7357, 22540, 7580, 7580, 20944, - 22880, 0, 8227, 22880, 8542, 2990, 2650, 8358, 7112, 0, 2876, 6996, 22880, 0, 8067, 22540, - 8542, 2990, 2650, 8358, 0, 0, 0, 0, 2920, 1031, 808, 2598, 8358, 2644, 2362, 7580, - 8542, 0, 2920, 8358, 2990, 1031, 915, 2644, 2990, 0, 1031, 2644, 8358, 0, 2598, 7580, - 22880, 0, 8067, 22540, 8358, 2644, 2362, 7580, 6996, 0, 2564, 6442, 22540, 0, 7357, 20944, - 62844, 0, 22518, 62844, 22880, 8358, 8358, 22540, 19968, 0, 8112, 19701, 62844, 0, 22197, 62136, - 22880, 8358, 8358, 22540, 0, 0, 0, 0, 8067, 2598, 2640, 7357, 22540, 7580, 7580, 20944, - 20212, 0, 6975, 19937, 8358, 0, 2678, 7580, 7152, 0, 2606, 6560, 19937, 0, 6429, 18616, - 62844, 0, 22197, 62136, 22540, 7580, 7580, 20944, 19701, 0, 7384, 18410, 62136, 0, 20662, 58644, - }, - { - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +const uint32_t SHORT_CODE_INDEX[16][256] = { + { + 70039, 0, 25594, 70039, 25594, 9527, 9324, 25594, + 22458, 0, 9527, 22458, 70039, 0, 25594, 70039, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 25594, 9527, 9324, 25594, 0, 0, 0, 0, + 8028, 3361, 2867, 7887, 25594, 9309, 9126, 25187, + 70039, 0, 25594, 70039, 25594, 9309, 9126, 25187, + 22458, 0, 9309, 22143, 70039, 0, 25187, 69216, + 25594, 9527, 9324, 25594, 0, 0, 0, 0, + 9386, 3308, 3316, 9177, 25594, 9309, 9126, 25187, + 9527, 3361, 2990, 9309, 3361, 1162, 926, 2952, + 3307, 1016, 1031, 2914, 9309, 2952, 2644, 8401, + 8028, 3361, 2867, 7887, 0, 0, 0, 0, + 3308, 1162, 1017, 2914, 7887, 2952, 2560, 7225, + 25594, 9309, 9126, 25187, 0, 0, 0, 0, + 9177, 2914, 2918, 8297, 25187, 8401, 8268, 23306, + 25594, 9527, 9324, 25594, 0, 0, 0, 0, + 9386, 3308, 3316, 9177, 25594, 9309, 9126, 25187, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 9527, 3361, 2990, 9309, 3361, 1162, 926, 2952, + 3307, 1016, 1031, 2914, 9309, 2952, 2644, 8401, + 25594, 9309, 9126, 25187, 0, 0, 0, 0, + 9177, 2914, 2918, 8297, 25187, 8401, 8268, 23306, + 70039, 0, 25594, 70039, 25594, 9309, 9126, 25187, + 22458, 0, 9309, 22143, 70039, 0, 25187, 69216, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 25594, 9309, 9126, 25187, 0, 0, 0, 0, + 7887, 2952, 2560, 7225, 25187, 8401, 8268, 23306, + 70039, 0, 25187, 69216, 25187, 8401, 8268, 23306, + 22143, 0, 8401, 20624, 69216, 0, 23306, 65162, + }, + { + 70039, 0, 25594, 70039, 0, 0, 0, 0, + 25594, 0, 9386, 25594, 70039, 0, 25594, 70039, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 25594, 9527, 9324, 25594, 0, 0, 0, 0, + 9527, 3361, 2990, 9309, 25594, 9309, 9126, 25187, + 70039, 0, 25594, 70039, 0, 0, 0, 0, + 25594, 0, 9177, 25187, 70039, 0, 25187, 69216, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 25594, 9527, 9324, 25594, 0, 0, 0, 0, + 9386, 3308, 3316, 9177, 25594, 9309, 9126, 25187, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 9527, 3361, 2990, 9309, 3361, 1162, 926, 2952, + 3307, 1016, 1031, 2914, 9309, 2952, 2644, 8401, + 25594, 9309, 9126, 25187, 0, 0, 0, 0, + 9177, 2914, 2918, 8297, 25187, 8401, 8268, 23306, + 70039, 0, 25594, 70039, 0, 0, 0, 0, + 25594, 0, 9177, 25187, 70039, 0, 25187, 69216, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 25594, 9309, 9126, 25187, 0, 0, 0, 0, + 9309, 2952, 2644, 8401, 25187, 8401, 8268, 23306, + 70039, 0, 25187, 69216, 0, 0, 0, 0, + 25187, 0, 8297, 23306, 69216, 0, 23306, 65162, + }, + { + 70039, 0, 22458, 70039, 25594, 9527, 9324, 25594, + 25594, 0, 9527, 25594, 70039, 0, 22458, 70039, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 25594, 9527, 9324, 25594, 0, 0, 0, 0, + 9527, 3361, 2990, 9309, 25594, 9309, 9126, 25187, + 70039, 0, 22458, 70039, 25594, 9309, 9126, 25187, + 25594, 0, 9309, 25187, 70039, 0, 22143, 69216, + 25594, 9527, 9324, 25594, 0, 0, 0, 0, + 9527, 0, 3307, 9309, 25594, 9309, 9126, 25187, + 9527, 3361, 2990, 9309, 3361, 1162, 926, 2952, + 3307, 1016, 1031, 2914, 9309, 2952, 2644, 8401, + 9527, 3361, 2990, 9309, 0, 0, 0, 0, + 3361, 1162, 926, 2952, 9309, 2952, 2644, 8401, + 25594, 9309, 9126, 25187, 0, 0, 0, 0, + 9309, 0, 2914, 8401, 25187, 8401, 8268, 23306, + 25594, 9527, 9324, 25594, 0, 0, 0, 0, + 9527, 0, 3307, 9309, 25594, 9309, 9126, 25187, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 9527, 3361, 2990, 9309, 3361, 1162, 926, 2952, + 3307, 1016, 1031, 2914, 9309, 2952, 2644, 8401, + 25594, 9309, 9126, 25187, 0, 0, 0, 0, + 9309, 0, 2914, 8401, 25187, 8401, 8268, 23306, + 70039, 0, 22458, 70039, 25594, 9309, 9126, 25187, + 25594, 0, 9309, 25187, 70039, 0, 22143, 69216, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 25594, 9309, 9126, 25187, 0, 0, 0, 0, + 9309, 2952, 2644, 8401, 25187, 8401, 8268, 23306, + 70039, 0, 22143, 69216, 25187, 8401, 8268, 23306, + 25187, 0, 8401, 23306, 69216, 0, 20624, 65162, + }, + { + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + }, + { + 62844, 0, 22518, 62844, 22460, 9527, 8397, 22460, + 22460, 0, 9527, 22460, 62844, 0, 22518, 62844, + 22460, 9527, 8397, 22460, 0, 0, 0, 0, + 9527, 0, 3361, 9309, 22460, 9309, 8223, 22144, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 62844, 0, 22518, 62844, 22460, 9309, 8223, 22144, + 22460, 0, 9309, 22144, 62844, 0, 22197, 62136, + 22460, 9527, 8397, 22460, 0, 0, 0, 0, + 9527, 0, 3361, 9309, 22460, 9309, 8223, 22144, + 9527, 0, 3308, 9309, 3361, 1162, 926, 2952, + 3361, 0, 1162, 2952, 9309, 0, 2914, 8401, + 9527, 0, 3308, 9309, 0, 0, 0, 0, + 3361, 1162, 926, 2952, 9309, 0, 2914, 8401, + 22460, 9309, 8223, 22144, 0, 0, 0, 0, + 9309, 0, 2952, 8401, 22144, 8401, 7475, 20624, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 62844, 0, 22518, 62844, 22460, 9309, 8223, 22144, + 22460, 0, 9309, 22144, 62844, 0, 22197, 62136, + 22460, 9309, 8223, 22144, 0, 0, 0, 0, + 9309, 0, 2952, 8401, 22144, 8401, 7475, 20624, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 62844, 0, 22197, 62136, 22144, 8401, 7475, 20624, + 22144, 0, 8401, 20624, 62136, 0, 20662, 58644, + }, + { + 48001, 0, 19802, 48001, 19802, 0, 8397, 19802, + 0, 0, 0, 0, 48001, 0, 19802, 48001, + 19802, 0, 8397, 19802, 0, 0, 0, 0, + 8169, 0, 3361, 8019, 19802, 0, 8223, 19549, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 48001, 0, 19802, 48001, 19802, 0, 8223, 19549, + 0, 0, 0, 0, 48001, 0, 19549, 47574, + 19802, 0, 8397, 19802, 0, 0, 0, 0, + 8169, 0, 3361, 8019, 19802, 0, 8223, 19549, + 8169, 0, 3361, 8019, 0, 0, 0, 0, + 3361, 0, 1162, 2952, 8019, 0, 2952, 7329, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 19802, 0, 8223, 19549, 0, 0, 0, 0, + 8019, 0, 2952, 7329, 19549, 0, 7475, 18300, + 19802, 0, 8169, 19802, 8169, 0, 3361, 8019, + 0, 0, 0, 0, 19802, 0, 8019, 19549, + 8169, 0, 3361, 8019, 0, 0, 0, 0, + 3361, 0, 1016, 2952, 8019, 0, 2952, 7329, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 19802, 0, 8019, 19549, 8019, 0, 2952, 7329, + 0, 0, 0, 0, 19549, 0, 7329, 18300, + 48001, 0, 19802, 48001, 19802, 0, 8223, 19549, + 0, 0, 0, 0, 48001, 0, 19549, 47574, + 19802, 0, 8223, 19549, 0, 0, 0, 0, + 8019, 0, 2952, 7329, 19549, 0, 7475, 18300, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 48001, 0, 19549, 47574, 19549, 0, 7475, 18300, + 0, 0, 0, 0, 47574, 0, 18300, 45324, + }, + { + 62844, 0, 0, 62844, 22518, 9527, 8281, 22518, + 0, 0, 0, 0, 62844, 0, 0, 62844, + 22518, 9527, 8281, 22518, 0, 0, 0, 0, + 0, 0, 0, 0, 22518, 9309, 8112, 22197, + 22460, 0, 0, 22460, 9527, 0, 3308, 9309, + 0, 0, 0, 0, 22460, 0, 0, 22144, + 62844, 0, 0, 62844, 22518, 9309, 8112, 22197, + 0, 0, 0, 0, 62844, 0, 0, 62136, + 22518, 9527, 8281, 22518, 0, 0, 0, 0, + 0, 0, 0, 0, 22518, 9309, 8112, 22197, + 9527, 0, 3361, 9309, 3308, 1162, 1017, 2914, + 3308, 0, 1162, 2914, 9309, 0, 2952, 8401, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 22518, 9309, 8112, 22197, 0, 0, 0, 0, + 0, 0, 0, 0, 22197, 8401, 7384, 20662, + 22518, 0, 0, 22518, 9527, 0, 3361, 9309, + 0, 0, 0, 0, 22518, 0, 0, 22197, + 9527, 0, 3361, 9309, 0, 0, 0, 0, + 0, 0, 0, 0, 9309, 0, 2952, 8401, + 9527, 0, 0, 9309, 3308, 1162, 1017, 2914, + 0, 0, 0, 0, 9309, 0, 0, 8401, + 22518, 0, 0, 22197, 9309, 0, 2952, 8401, + 0, 0, 0, 0, 22197, 0, 0, 20662, + 62844, 0, 0, 62844, 22518, 9309, 8112, 22197, + 0, 0, 0, 0, 62844, 0, 0, 62136, + 22518, 9309, 8112, 22197, 0, 0, 0, 0, + 0, 0, 0, 0, 22197, 8401, 7384, 20662, + 22460, 0, 0, 22144, 9309, 0, 2914, 8401, + 0, 0, 0, 0, 22144, 0, 0, 20624, + 62844, 0, 0, 62136, 22197, 8401, 7384, 20662, + 0, 0, 0, 0, 62136, 0, 0, 58644, + }, + { + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + }, + { + 48001, 0, 17580, 48001, 19802, 8397, 0, 19802, + 15040, 0, 6375, 15040, 48001, 0, 17580, 48001, + 19802, 8397, 0, 19802, 0, 0, 0, 0, + 7287, 2928, 0, 7155, 19802, 8223, 0, 19549, + 16794, 0, 6012, 16794, 8397, 0, 0, 8223, + 6016, 0, 2496, 5937, 16794, 0, 5934, 16620, + 48001, 0, 17580, 48001, 19802, 8223, 0, 19549, + 15040, 0, 6267, 14882, 48001, 0, 17370, 47574, + 19802, 8397, 0, 19802, 0, 0, 0, 0, + 7287, 2928, 0, 7155, 19802, 8223, 0, 19549, + 8397, 2929, 0, 8223, 2929, 1031, 913, 2602, + 0, 0, 0, 0, 8223, 2602, 0, 7475, + 6016, 2929, 0, 5937, 0, 0, 0, 0, + 2496, 1031, 0, 2252, 5937, 2602, 0, 5531, + 19802, 8223, 0, 19549, 0, 0, 0, 0, + 7155, 2602, 0, 6561, 19549, 7475, 0, 18300, + 19802, 0, 7287, 19802, 8397, 2929, 0, 8223, + 6016, 0, 2496, 5937, 19802, 0, 7155, 19549, + 8397, 2929, 0, 8223, 0, 0, 0, 0, + 2928, 1031, 0, 2602, 8223, 2602, 0, 7475, + 8397, 0, 2928, 8223, 2929, 1031, 913, 2602, + 2929, 0, 1031, 2602, 8223, 0, 2602, 7475, + 19802, 0, 7155, 19549, 8223, 2602, 0, 7475, + 5937, 0, 2252, 5531, 19549, 0, 6561, 18300, + 48001, 0, 17580, 48001, 19802, 8223, 0, 19549, + 15040, 0, 6267, 14882, 48001, 0, 17370, 47574, + 19802, 8223, 0, 19549, 0, 0, 0, 0, + 7155, 2602, 0, 6561, 19549, 7475, 0, 18300, + 16794, 0, 5934, 16620, 8223, 0, 0, 7475, + 5937, 0, 2252, 5531, 16620, 0, 5530, 15698, + 48001, 0, 17370, 47574, 19549, 7475, 0, 18300, + 14882, 0, 5779, 14070, 47574, 0, 16318, 45324, + }, + { + 39202, 0, 13860, 39202, 13860, 5741, 5741, 13860, + 13860, 0, 5741, 13860, 39202, 0, 13860, 39202, + 13860, 5741, 5741, 13860, 0, 0, 0, 0, + 4925, 1936, 1998, 4857, 13860, 5652, 5652, 13716, + 13860, 0, 4756, 13860, 5741, 0, 2323, 5652, + 5741, 0, 2323, 5652, 13860, 0, 4701, 13716, + 39202, 0, 13860, 39202, 13860, 5652, 5652, 13716, + 13860, 0, 5652, 13716, 39202, 0, 13716, 38880, + 13860, 5741, 5741, 13860, 0, 0, 0, 0, + 4925, 1936, 1998, 4857, 13860, 5652, 5652, 13716, + 5741, 2323, 0, 5652, 2323, 821, 0, 2088, + 2323, 821, 0, 2088, 5652, 2088, 0, 5232, + 4756, 2323, 1936, 4701, 0, 0, 0, 0, + 1936, 821, 703, 1772, 4701, 2088, 1772, 4411, + 13860, 5652, 5652, 13716, 0, 0, 0, 0, + 4857, 1772, 1814, 4529, 13716, 5232, 5232, 12972, + 13860, 0, 4925, 13860, 5741, 2323, 0, 5652, + 4756, 0, 1936, 4701, 13860, 0, 4857, 13716, + 5741, 2323, 0, 5652, 0, 0, 0, 0, + 1936, 821, 0, 1772, 5652, 2088, 0, 5232, + 5741, 0, 1936, 5652, 2323, 821, 0, 2088, + 2323, 0, 821, 2088, 5652, 0, 1772, 5232, + 13860, 0, 4857, 13716, 5652, 2088, 0, 5232, + 4701, 0, 1772, 4411, 13716, 0, 4529, 12972, + 39202, 0, 13860, 39202, 13860, 5652, 5652, 13716, + 13860, 0, 5652, 13716, 39202, 0, 13716, 38880, + 13860, 5652, 5652, 13716, 0, 0, 0, 0, + 4857, 1772, 1814, 4529, 13716, 5232, 5232, 12972, + 13860, 0, 4701, 13716, 5652, 0, 2088, 5232, + 5652, 0, 2088, 5232, 13716, 0, 4411, 12972, + 39202, 0, 13716, 38880, 13716, 5232, 5232, 12972, + 13716, 0, 5232, 12972, 38880, 0, 12972, 37152, + }, + { + 48001, 0, 19802, 48001, 17580, 6375, 6466, 17580, + 16794, 0, 8397, 16794, 48001, 0, 19802, 48001, + 17580, 6375, 6466, 17580, 0, 0, 0, 0, + 7287, 2496, 2611, 7155, 17580, 6267, 6357, 17370, + 15040, 0, 6016, 15040, 6375, 0, 2240, 6267, + 6016, 0, 2929, 5937, 15040, 0, 5937, 14882, + 48001, 0, 19802, 48001, 17580, 6267, 6357, 17370, + 16794, 0, 8223, 16620, 48001, 0, 19549, 47574, + 17580, 6375, 6466, 17580, 0, 0, 0, 0, + 7287, 2496, 2611, 7155, 17580, 6267, 6357, 17370, + 6375, 2496, 2232, 6267, 2496, 1031, 0, 2252, + 2240, 783, 810, 2024, 6267, 2252, 2020, 5779, + 6012, 2496, 2178, 5934, 0, 0, 0, 0, + 2928, 1031, 914, 2602, 5934, 2252, 1982, 5530, + 17580, 6267, 6357, 17370, 0, 0, 0, 0, + 7155, 2252, 2332, 6561, 17370, 5779, 5857, 16318, + 17580, 0, 7287, 17580, 6375, 2496, 2232, 6267, + 6012, 0, 2928, 5934, 17580, 0, 7155, 17370, + 6375, 2496, 2232, 6267, 0, 0, 0, 0, + 2496, 1031, 782, 2252, 6267, 2252, 2020, 5779, + 6375, 0, 2496, 6267, 2496, 1031, 0, 2252, + 2496, 0, 1031, 2252, 6267, 0, 2252, 5779, + 17580, 0, 7155, 17370, 6267, 2252, 2020, 5779, + 5934, 0, 2602, 5530, 17370, 0, 6561, 16318, + 48001, 0, 19802, 48001, 17580, 6267, 6357, 17370, + 16794, 0, 8223, 16620, 48001, 0, 19549, 47574, + 17580, 6267, 6357, 17370, 0, 0, 0, 0, + 7155, 2252, 2332, 6561, 17370, 5779, 5857, 16318, + 15040, 0, 5937, 14882, 6267, 0, 2024, 5779, + 5937, 0, 2602, 5531, 14882, 0, 5531, 14070, + 48001, 0, 19549, 47574, 17370, 5779, 5857, 16318, + 16620, 0, 7475, 15698, 47574, 0, 18300, 45324, + }, + { + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + }, + { + 62844, 0, 22880, 62844, 22518, 8281, 9527, 22518, + 20212, 0, 8542, 20212, 62844, 0, 22880, 62844, + 22518, 8281, 9527, 22518, 0, 0, 0, 0, + 8227, 2876, 3370, 8067, 22518, 8112, 9309, 22197, + 19968, 0, 7112, 19968, 8281, 0, 3308, 8112, + 7282, 0, 2990, 7152, 19968, 0, 6996, 19701, + 62844, 0, 22880, 62844, 22518, 8112, 9309, 22197, + 20212, 0, 8358, 19937, 62844, 0, 22540, 62136, + 22518, 8281, 9527, 22518, 0, 0, 0, 0, + 8227, 2876, 3370, 8067, 22518, 8112, 9309, 22197, + 8281, 2937, 2867, 8112, 2937, 1031, 810, 2606, + 3308, 1017, 1162, 2914, 8112, 2606, 2560, 7384, + 7088, 2937, 2937, 6975, 0, 0, 0, 0, + 2920, 1031, 1031, 2598, 6975, 2606, 2606, 6429, + 22518, 8112, 9309, 22197, 0, 0, 0, 0, + 8067, 2564, 2956, 7357, 22197, 7384, 8401, 20662, + 22518, 0, 8227, 22518, 8281, 2937, 2867, 8112, + 7088, 0, 2920, 6975, 22518, 0, 8067, 22197, + 8281, 2937, 2867, 8112, 0, 0, 0, 0, + 2876, 1031, 886, 2564, 8112, 2606, 2560, 7384, + 8281, 0, 2876, 8112, 2937, 1031, 810, 2606, + 2937, 0, 1031, 2606, 8112, 0, 2564, 7384, + 22518, 0, 8067, 22197, 8112, 2606, 2560, 7384, + 6975, 0, 2598, 6429, 22197, 0, 7357, 20662, + 62844, 0, 22880, 62844, 22518, 8112, 9309, 22197, + 20212, 0, 8358, 19937, 62844, 0, 22540, 62136, + 22518, 8112, 9309, 22197, 0, 0, 0, 0, + 8067, 2564, 2956, 7357, 22197, 7384, 8401, 20662, + 19968, 0, 6996, 19701, 8112, 0, 2914, 7384, + 7152, 0, 2644, 6560, 19701, 0, 6442, 18410, + 62844, 0, 22540, 62136, 22197, 7384, 8401, 20662, + 19937, 0, 7580, 18616, 62136, 0, 20944, 58644, + }, + { + 48001, 0, 17580, 48001, 17580, 6466, 6375, 17580, + 15222, 0, 6466, 15222, 48001, 0, 17580, 48001, + 17580, 6466, 6375, 17580, 0, 0, 0, 0, + 6461, 2269, 2286, 6354, 17580, 6357, 6267, 17370, + 15222, 0, 5456, 15222, 6466, 0, 2240, 6357, + 5465, 0, 2270, 5391, 15222, 0, 5385, 15063, + 48001, 0, 17580, 48001, 17580, 6357, 6267, 17370, + 15222, 0, 6357, 15063, 48001, 0, 17370, 47574, + 17580, 6466, 6375, 17580, 0, 0, 0, 0, + 6461, 2269, 2286, 6354, 17580, 6357, 6267, 17370, + 6466, 2270, 2277, 6357, 2270, 821, 716, 2050, + 2240, 705, 810, 2024, 6357, 2050, 2054, 5857, + 5456, 2270, 1952, 5385, 0, 0, 0, 0, + 2269, 821, 717, 2050, 5385, 2050, 1780, 5023, + 17580, 6357, 6267, 17370, 0, 0, 0, 0, + 6354, 2050, 2058, 5856, 17370, 5857, 5779, 16318, + 17580, 0, 6461, 17580, 6466, 2270, 2277, 6357, + 5456, 0, 2269, 5385, 17580, 0, 6354, 17370, + 6466, 2270, 2277, 6357, 0, 0, 0, 0, + 2269, 821, 716, 2050, 6357, 2050, 2054, 5857, + 6466, 0, 2269, 6357, 2270, 821, 716, 2050, + 2270, 0, 821, 2050, 6357, 0, 2050, 5857, + 17580, 0, 6354, 17370, 6357, 2050, 2054, 5857, + 5385, 0, 2050, 5023, 17370, 0, 5856, 16318, + 48001, 0, 17580, 48001, 17580, 6357, 6267, 17370, + 15222, 0, 6357, 15063, 48001, 0, 17370, 47574, + 17580, 6357, 6267, 17370, 0, 0, 0, 0, + 6354, 2050, 2058, 5856, 17370, 5857, 5779, 16318, + 15222, 0, 5385, 15063, 6357, 0, 2024, 5857, + 5391, 0, 2050, 5025, 15063, 0, 5023, 14238, + 48001, 0, 17370, 47574, 17370, 5857, 5779, 16318, + 15063, 0, 5857, 14238, 47574, 0, 16318, 45324, + }, + { + 62844, 0, 22518, 62844, 22880, 8542, 8542, 22880, + 19968, 0, 8281, 19968, 62844, 0, 22518, 62844, + 22880, 8542, 8542, 22880, 0, 0, 0, 0, + 8227, 2920, 2983, 8067, 22880, 8358, 8358, 22540, + 20212, 0, 7088, 20212, 8542, 0, 3037, 8358, + 7282, 0, 2937, 7152, 20212, 0, 6975, 19937, + 62844, 0, 22518, 62844, 22880, 8358, 8358, 22540, + 19968, 0, 8112, 19701, 62844, 0, 22197, 62136, + 22880, 8542, 8542, 22880, 0, 0, 0, 0, + 8227, 2920, 2983, 8067, 22880, 8358, 8358, 22540, + 8542, 2990, 2650, 8358, 2990, 1031, 915, 2644, + 3037, 926, 939, 2678, 8358, 2644, 2362, 7580, + 7112, 2990, 2603, 6996, 0, 0, 0, 0, + 2876, 1031, 913, 2564, 6996, 2644, 2328, 6442, + 22880, 8358, 8358, 22540, 0, 0, 0, 0, + 8067, 2598, 2640, 7357, 22540, 7580, 7580, 20944, + 22880, 0, 8227, 22880, 8542, 2990, 2650, 8358, + 7112, 0, 2876, 6996, 22880, 0, 8067, 22540, + 8542, 2990, 2650, 8358, 0, 0, 0, 0, + 2920, 1031, 808, 2598, 8358, 2644, 2362, 7580, + 8542, 0, 2920, 8358, 2990, 1031, 915, 2644, + 2990, 0, 1031, 2644, 8358, 0, 2598, 7580, + 22880, 0, 8067, 22540, 8358, 2644, 2362, 7580, + 6996, 0, 2564, 6442, 22540, 0, 7357, 20944, + 62844, 0, 22518, 62844, 22880, 8358, 8358, 22540, + 19968, 0, 8112, 19701, 62844, 0, 22197, 62136, + 22880, 8358, 8358, 22540, 0, 0, 0, 0, + 8067, 2598, 2640, 7357, 22540, 7580, 7580, 20944, + 20212, 0, 6975, 19937, 8358, 0, 2678, 7580, + 7152, 0, 2606, 6560, 19937, 0, 6429, 18616, + 62844, 0, 22197, 62136, 22540, 7580, 7580, 20944, + 19701, 0, 7384, 18410, 62136, 0, 20662, 58644, + }, + { + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + }, +}; + +const uint32_t SHORT_CODE_OFFSET[16][256] = { + { + 0, 70039, 70039, 95633, 165672, 191266, 200793, 210117, + 235711, 258169, 258169, 267696, 290154, 360193, 360193, 385787, + 455826, 455826, 455826, 455826, 455826, 455826, 455826, 455826, + 455826, 455826, 455826, 455826, 455826, 455826, 455826, 455826, + 455826, 481420, 490947, 500271, 525865, 525865, 525865, 525865, + 525865, 533893, 537254, 540121, 548008, 573602, 582911, 592037, + 617224, 687263, 687263, 712857, 782896, 808490, 817799, 826925, + 852112, 874570, 874570, 883879, 906022, 976061, 976061, 1001248, + 1070464, 1096058, 1105585, 1114909, 1140503, 1140503, 1140503, 1140503, + 1140503, 1149889, 1153197, 1156513, 1165690, 1191284, 1200593, 1209719, + 1234906, 1244433, 1247794, 1250784, 1260093, 1263454, 1264616, 1265542, + 1268494, 1271801, 1272817, 1273848, 1276762, 1286071, 1289023, 1291667, + 1300068, 1308096, 1311457, 1314324, 1322211, 1322211, 1322211, 1322211, + 1322211, 1325519, 1326681, 1327698, 1330612, 1338499, 1341451, 1344011, + 1351236, 1376830, 1386139, 1395265, 1420452, 1420452, 1420452, 1420452, + 1420452, 1429629, 1432543, 1435461, 1443758, 1468945, 1477346, 1485614, + 1508920, 1534514, 1544041, 1553365, 1578959, 1578959, 1578959, 1578959, + 1578959, 1588345, 1591653, 1594969, 1604146, 1629740, 1639049, 1648175, + 1673362, 1673362, 1673362, 1673362, 1673362, 1673362, 1673362, 1673362, + 1673362, 1673362, 1673362, 1673362, 1673362, 1673362, 1673362, 1673362, + 1673362, 1682889, 1686250, 1689240, 1698549, 1701910, 1703072, 1703998, + 1706950, 1710257, 1711273, 1712304, 1715218, 1724527, 1727479, 1730123, + 1738524, 1764118, 1773427, 1782553, 1807740, 1807740, 1807740, 1807740, + 1807740, 1816917, 1819831, 1822749, 1831046, 1856233, 1864634, 1872902, + 1896208, 1966247, 1966247, 1991841, 2061880, 2087474, 2096783, 2105909, + 2131096, 2153554, 2153554, 2162863, 2185006, 2255045, 2255045, 2280232, + 2349448, 2349448, 2349448, 2349448, 2349448, 2349448, 2349448, 2349448, + 2349448, 2349448, 2349448, 2349448, 2349448, 2349448, 2349448, 2349448, + 2349448, 2375042, 2384351, 2393477, 2418664, 2418664, 2418664, 2418664, + 2418664, 2426551, 2429503, 2432063, 2439288, 2464475, 2472876, 2481144, + 2504450, 2574489, 2574489, 2599676, 2668892, 2694079, 2702480, 2710748, + 2734054, 2756197, 2756197, 2764598, 2785222, 2854438, 2854438, 2877744, + }, + { + 0, 70039, 70039, 95633, 165672, 165672, 165672, 165672, + 165672, 191266, 191266, 200652, 226246, 296285, 296285, 321879, + 391918, 391918, 391918, 391918, 391918, 391918, 391918, 391918, + 391918, 391918, 391918, 391918, 391918, 391918, 391918, 391918, + 391918, 417512, 427039, 436363, 461957, 461957, 461957, 461957, + 461957, 471484, 474845, 477835, 487144, 512738, 522047, 531173, + 556360, 626399, 626399, 651993, 722032, 722032, 722032, 722032, + 722032, 747626, 747626, 756803, 781990, 852029, 852029, 877216, + 946432, 946432, 946432, 946432, 946432, 946432, 946432, 946432, + 946432, 946432, 946432, 946432, 946432, 946432, 946432, 946432, + 946432, 946432, 946432, 946432, 946432, 946432, 946432, 946432, + 946432, 946432, 946432, 946432, 946432, 946432, 946432, 946432, + 946432, 946432, 946432, 946432, 946432, 946432, 946432, 946432, + 946432, 946432, 946432, 946432, 946432, 946432, 946432, 946432, + 946432, 946432, 946432, 946432, 946432, 946432, 946432, 946432, + 946432, 946432, 946432, 946432, 946432, 946432, 946432, 946432, + 946432, 972026, 981553, 990877, 1016471, 1016471, 1016471, 1016471, + 1016471, 1025857, 1029165, 1032481, 1041658, 1067252, 1076561, 1085687, + 1110874, 1110874, 1110874, 1110874, 1110874, 1110874, 1110874, 1110874, + 1110874, 1110874, 1110874, 1110874, 1110874, 1110874, 1110874, 1110874, + 1110874, 1120401, 1123762, 1126752, 1136061, 1139422, 1140584, 1141510, + 1144462, 1147769, 1148785, 1149816, 1152730, 1162039, 1164991, 1167635, + 1176036, 1201630, 1210939, 1220065, 1245252, 1245252, 1245252, 1245252, + 1245252, 1254429, 1257343, 1260261, 1268558, 1293745, 1302146, 1310414, + 1333720, 1403759, 1403759, 1429353, 1499392, 1499392, 1499392, 1499392, + 1499392, 1524986, 1524986, 1534163, 1559350, 1629389, 1629389, 1654576, + 1723792, 1723792, 1723792, 1723792, 1723792, 1723792, 1723792, 1723792, + 1723792, 1723792, 1723792, 1723792, 1723792, 1723792, 1723792, 1723792, + 1723792, 1749386, 1758695, 1767821, 1793008, 1793008, 1793008, 1793008, + 1793008, 1802317, 1805269, 1807913, 1816314, 1841501, 1849902, 1858170, + 1881476, 1951515, 1951515, 1976702, 2045918, 2045918, 2045918, 2045918, + 2045918, 2071105, 2071105, 2079402, 2102708, 2171924, 2171924, 2195230, + }, + { + 0, 70039, 70039, 92497, 162536, 188130, 197657, 206981, + 232575, 258169, 258169, 267696, 293290, 363329, 363329, 385787, + 455826, 455826, 455826, 455826, 455826, 455826, 455826, 455826, + 455826, 455826, 455826, 455826, 455826, 455826, 455826, 455826, + 455826, 481420, 490947, 500271, 525865, 525865, 525865, 525865, + 525865, 535392, 538753, 541743, 551052, 576646, 585955, 595081, + 620268, 690307, 690307, 712765, 782804, 808398, 817707, 826833, + 852020, 877614, 877614, 886923, 912110, 982149, 982149, 1004292, + 1073508, 1099102, 1108629, 1117953, 1143547, 1143547, 1143547, 1143547, + 1143547, 1153074, 1153074, 1156381, 1165690, 1191284, 1200593, 1209719, + 1234906, 1244433, 1247794, 1250784, 1260093, 1263454, 1264616, 1265542, + 1268494, 1271801, 1272817, 1273848, 1276762, 1286071, 1289023, 1291667, + 1300068, 1309595, 1312956, 1315946, 1325255, 1325255, 1325255, 1325255, + 1325255, 1328616, 1329778, 1330704, 1333656, 1342965, 1345917, 1348561, + 1356962, 1382556, 1391865, 1400991, 1426178, 1426178, 1426178, 1426178, + 1426178, 1435487, 1435487, 1438401, 1446802, 1471989, 1480390, 1488658, + 1511964, 1537558, 1547085, 1556409, 1582003, 1582003, 1582003, 1582003, + 1582003, 1591530, 1591530, 1594837, 1604146, 1629740, 1639049, 1648175, + 1673362, 1673362, 1673362, 1673362, 1673362, 1673362, 1673362, 1673362, + 1673362, 1673362, 1673362, 1673362, 1673362, 1673362, 1673362, 1673362, + 1673362, 1682889, 1686250, 1689240, 1698549, 1701910, 1703072, 1703998, + 1706950, 1710257, 1711273, 1712304, 1715218, 1724527, 1727479, 1730123, + 1738524, 1764118, 1773427, 1782553, 1807740, 1807740, 1807740, 1807740, + 1807740, 1817049, 1817049, 1819963, 1828364, 1853551, 1861952, 1870220, + 1893526, 1963565, 1963565, 1986023, 2056062, 2081656, 2090965, 2100091, + 2125278, 2150872, 2150872, 2160181, 2185368, 2255407, 2255407, 2277550, + 2346766, 2346766, 2346766, 2346766, 2346766, 2346766, 2346766, 2346766, + 2346766, 2346766, 2346766, 2346766, 2346766, 2346766, 2346766, 2346766, + 2346766, 2372360, 2381669, 2390795, 2415982, 2415982, 2415982, 2415982, + 2415982, 2425291, 2428243, 2430887, 2439288, 2464475, 2472876, 2481144, + 2504450, 2574489, 2574489, 2596632, 2665848, 2691035, 2699436, 2707704, + 2731010, 2756197, 2756197, 2764598, 2787904, 2857120, 2857120, 2877744, + }, + { + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + }, + { + 0, 62844, 62844, 85362, 148206, 170666, 180193, 188590, + 211050, 233510, 233510, 243037, 265497, 328341, 328341, 350859, + 413703, 436163, 445690, 454087, 476547, 476547, 476547, 476547, + 476547, 486074, 486074, 489435, 498744, 521204, 530513, 538736, + 560880, 560880, 560880, 560880, 560880, 560880, 560880, 560880, + 560880, 560880, 560880, 560880, 560880, 560880, 560880, 560880, + 560880, 623724, 623724, 646242, 709086, 731546, 740855, 749078, + 771222, 793682, 793682, 802991, 825135, 887979, 887979, 910176, + 972312, 994772, 1004299, 1012696, 1035156, 1035156, 1035156, 1035156, + 1035156, 1044683, 1044683, 1048044, 1057353, 1079813, 1089122, 1097345, + 1119489, 1129016, 1129016, 1132324, 1141633, 1144994, 1146156, 1147082, + 1150034, 1153395, 1153395, 1154557, 1157509, 1166818, 1166818, 1169732, + 1178133, 1187660, 1187660, 1190968, 1200277, 1200277, 1200277, 1200277, + 1200277, 1203638, 1204800, 1205726, 1208678, 1217987, 1217987, 1220901, + 1229302, 1251762, 1261071, 1269294, 1291438, 1291438, 1291438, 1291438, + 1291438, 1300747, 1300747, 1303699, 1312100, 1334244, 1342645, 1350120, + 1370744, 1370744, 1370744, 1370744, 1370744, 1370744, 1370744, 1370744, + 1370744, 1370744, 1370744, 1370744, 1370744, 1370744, 1370744, 1370744, + 1370744, 1370744, 1370744, 1370744, 1370744, 1370744, 1370744, 1370744, + 1370744, 1370744, 1370744, 1370744, 1370744, 1370744, 1370744, 1370744, + 1370744, 1370744, 1370744, 1370744, 1370744, 1370744, 1370744, 1370744, + 1370744, 1370744, 1370744, 1370744, 1370744, 1370744, 1370744, 1370744, + 1370744, 1370744, 1370744, 1370744, 1370744, 1370744, 1370744, 1370744, + 1370744, 1370744, 1370744, 1370744, 1370744, 1370744, 1370744, 1370744, + 1370744, 1433588, 1433588, 1456106, 1518950, 1541410, 1550719, 1558942, + 1581086, 1603546, 1603546, 1612855, 1634999, 1697843, 1697843, 1720040, + 1782176, 1804636, 1813945, 1822168, 1844312, 1844312, 1844312, 1844312, + 1844312, 1853621, 1853621, 1856573, 1864974, 1887118, 1895519, 1902994, + 1923618, 1923618, 1923618, 1923618, 1923618, 1923618, 1923618, 1923618, + 1923618, 1923618, 1923618, 1923618, 1923618, 1923618, 1923618, 1923618, + 1923618, 1986462, 1986462, 2008659, 2070795, 2092939, 2101340, 2108815, + 2129439, 2151583, 2151583, 2159984, 2180608, 2242744, 2242744, 2263406, + }, + { + 0, 48001, 48001, 67803, 115804, 135606, 135606, 144003, + 163805, 163805, 163805, 163805, 163805, 211806, 211806, 231608, + 279609, 299411, 299411, 307808, 327610, 327610, 327610, 327610, + 327610, 335779, 335779, 339140, 347159, 366961, 366961, 375184, + 394733, 394733, 394733, 394733, 394733, 394733, 394733, 394733, + 394733, 394733, 394733, 394733, 394733, 394733, 394733, 394733, + 394733, 442734, 442734, 462536, 510537, 530339, 530339, 538562, + 558111, 558111, 558111, 558111, 558111, 606112, 606112, 625661, + 673235, 693037, 693037, 701434, 721236, 721236, 721236, 721236, + 721236, 729405, 729405, 732766, 740785, 760587, 760587, 768810, + 788359, 796528, 796528, 799889, 807908, 807908, 807908, 807908, + 807908, 811269, 811269, 812431, 815383, 823402, 823402, 826354, + 833683, 833683, 833683, 833683, 833683, 833683, 833683, 833683, + 833683, 833683, 833683, 833683, 833683, 833683, 833683, 833683, + 833683, 853485, 853485, 861708, 881257, 881257, 881257, 881257, + 881257, 889276, 889276, 892228, 899557, 919106, 919106, 926581, + 944881, 964683, 964683, 972852, 992654, 1000823, 1000823, 1004184, + 1012203, 1012203, 1012203, 1012203, 1012203, 1032005, 1032005, 1040024, + 1059573, 1067742, 1067742, 1071103, 1079122, 1079122, 1079122, 1079122, + 1079122, 1082483, 1082483, 1083499, 1086451, 1094470, 1094470, 1097422, + 1104751, 1104751, 1104751, 1104751, 1104751, 1104751, 1104751, 1104751, + 1104751, 1104751, 1104751, 1104751, 1104751, 1104751, 1104751, 1104751, + 1104751, 1124553, 1124553, 1132572, 1152121, 1160140, 1160140, 1163092, + 1170421, 1170421, 1170421, 1170421, 1170421, 1189970, 1189970, 1197299, + 1215599, 1263600, 1263600, 1283402, 1331403, 1351205, 1351205, 1359428, + 1378977, 1378977, 1378977, 1378977, 1378977, 1426978, 1426978, 1446527, + 1494101, 1513903, 1513903, 1522126, 1541675, 1541675, 1541675, 1541675, + 1541675, 1549694, 1549694, 1552646, 1559975, 1579524, 1579524, 1586999, + 1605299, 1605299, 1605299, 1605299, 1605299, 1605299, 1605299, 1605299, + 1605299, 1605299, 1605299, 1605299, 1605299, 1605299, 1605299, 1605299, + 1605299, 1653300, 1653300, 1672849, 1720423, 1739972, 1739972, 1747447, + 1765747, 1765747, 1765747, 1765747, 1765747, 1813321, 1813321, 1831621, + }, + { + 0, 62844, 62844, 62844, 125688, 148206, 157733, 166014, + 188532, 188532, 188532, 188532, 188532, 251376, 251376, 251376, + 314220, 336738, 346265, 354546, 377064, 377064, 377064, 377064, + 377064, 377064, 377064, 377064, 377064, 399582, 408891, 417003, + 439200, 461660, 461660, 461660, 484120, 493647, 493647, 496955, + 506264, 506264, 506264, 506264, 506264, 528724, 528724, 528724, + 550868, 613712, 613712, 613712, 676556, 699074, 708383, 716495, + 738692, 738692, 738692, 738692, 738692, 801536, 801536, 801536, + 863672, 886190, 895717, 903998, 926516, 926516, 926516, 926516, + 926516, 926516, 926516, 926516, 926516, 949034, 958343, 966455, + 988652, 998179, 998179, 1001540, 1010849, 1014157, 1015319, 1016336, + 1019250, 1022558, 1022558, 1023720, 1026634, 1035943, 1035943, 1038895, + 1047296, 1047296, 1047296, 1047296, 1047296, 1047296, 1047296, 1047296, + 1047296, 1047296, 1047296, 1047296, 1047296, 1047296, 1047296, 1047296, + 1047296, 1069814, 1079123, 1087235, 1109432, 1109432, 1109432, 1109432, + 1109432, 1109432, 1109432, 1109432, 1109432, 1131629, 1140030, 1147414, + 1168076, 1190594, 1190594, 1190594, 1213112, 1222639, 1222639, 1226000, + 1235309, 1235309, 1235309, 1235309, 1235309, 1257827, 1257827, 1257827, + 1280024, 1289551, 1289551, 1292912, 1302221, 1302221, 1302221, 1302221, + 1302221, 1302221, 1302221, 1302221, 1302221, 1311530, 1311530, 1314482, + 1322883, 1332410, 1332410, 1332410, 1341719, 1345027, 1346189, 1347206, + 1350120, 1350120, 1350120, 1350120, 1350120, 1359429, 1359429, 1359429, + 1367830, 1390348, 1390348, 1390348, 1412545, 1421854, 1421854, 1424806, + 1433207, 1433207, 1433207, 1433207, 1433207, 1455404, 1455404, 1455404, + 1476066, 1538910, 1538910, 1538910, 1601754, 1624272, 1633581, 1641693, + 1663890, 1663890, 1663890, 1663890, 1663890, 1726734, 1726734, 1726734, + 1788870, 1811388, 1820697, 1828809, 1851006, 1851006, 1851006, 1851006, + 1851006, 1851006, 1851006, 1851006, 1851006, 1873203, 1881604, 1888988, + 1909650, 1932110, 1932110, 1932110, 1954254, 1963563, 1963563, 1966477, + 1974878, 1974878, 1974878, 1974878, 1974878, 1997022, 1997022, 1997022, + 2017646, 2080490, 2080490, 2080490, 2142626, 2164823, 2173224, 2180608, + 2201270, 2201270, 2201270, 2201270, 2201270, 2263406, 2263406, 2263406, + }, + { + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + }, + { + 0, 48001, 48001, 65581, 113582, 133384, 141781, 141781, + 161583, 176623, 176623, 182998, 198038, 246039, 246039, 263619, + 311620, 331422, 339819, 339819, 359621, 359621, 359621, 359621, + 359621, 366908, 369836, 369836, 376991, 396793, 405016, 405016, + 424565, 441359, 441359, 447371, 464165, 472562, 472562, 472562, + 480785, 486801, 486801, 489297, 495234, 512028, 512028, 517962, + 534582, 582583, 582583, 600163, 648164, 667966, 676189, 676189, + 695738, 710778, 710778, 717045, 731927, 779928, 779928, 797298, + 844872, 864674, 873071, 873071, 892873, 892873, 892873, 892873, + 892873, 900160, 903088, 903088, 910243, 930045, 938268, 938268, + 957817, 966214, 969143, 969143, 977366, 980295, 981326, 982239, + 984841, 984841, 984841, 984841, 984841, 993064, 995666, 995666, + 1003141, 1009157, 1012086, 1012086, 1018023, 1018023, 1018023, 1018023, + 1018023, 1020519, 1021550, 1021550, 1023802, 1029739, 1032341, 1032341, + 1037872, 1057674, 1065897, 1065897, 1085446, 1085446, 1085446, 1085446, + 1085446, 1092601, 1095203, 1095203, 1101764, 1121313, 1128788, 1128788, + 1147088, 1166890, 1166890, 1174177, 1193979, 1202376, 1205305, 1205305, + 1213528, 1219544, 1219544, 1222040, 1227977, 1247779, 1247779, 1254934, + 1274483, 1282880, 1285809, 1285809, 1294032, 1294032, 1294032, 1294032, + 1294032, 1296960, 1297991, 1297991, 1300593, 1308816, 1311418, 1311418, + 1318893, 1327290, 1327290, 1330218, 1338441, 1341370, 1342401, 1343314, + 1345916, 1348845, 1348845, 1349876, 1352478, 1360701, 1360701, 1363303, + 1370778, 1390580, 1390580, 1397735, 1417284, 1425507, 1428109, 1428109, + 1435584, 1441521, 1441521, 1443773, 1449304, 1468853, 1468853, 1475414, + 1493714, 1541715, 1541715, 1559295, 1607296, 1627098, 1635321, 1635321, + 1654870, 1669910, 1669910, 1676177, 1691059, 1739060, 1739060, 1756430, + 1804004, 1823806, 1832029, 1832029, 1851578, 1851578, 1851578, 1851578, + 1851578, 1858733, 1861335, 1861335, 1867896, 1887445, 1894920, 1894920, + 1913220, 1930014, 1930014, 1935948, 1952568, 1960791, 1960791, 1960791, + 1968266, 1974203, 1974203, 1976455, 1981986, 1998606, 1998606, 2004136, + 2019834, 2067835, 2067835, 2085205, 2132779, 2152328, 2159803, 2159803, + 2178103, 2192985, 2192985, 2198764, 2212834, 2260408, 2260408, 2276726, + }, + { + 0, 39202, 39202, 53062, 92264, 106124, 111865, 117606, + 131466, 145326, 145326, 151067, 164927, 204129, 204129, 217989, + 257191, 271051, 276792, 282533, 296393, 296393, 296393, 296393, + 296393, 301318, 303254, 305252, 310109, 323969, 329621, 335273, + 348989, 362849, 362849, 367605, 381465, 387206, 387206, 389529, + 395181, 400922, 400922, 403245, 408897, 422757, 422757, 427458, + 441174, 480376, 480376, 494236, 533438, 547298, 552950, 558602, + 572318, 586178, 586178, 591830, 605546, 644748, 644748, 658464, + 697344, 711204, 716945, 722686, 736546, 736546, 736546, 736546, + 736546, 741471, 743407, 745405, 750262, 764122, 769774, 775426, + 789142, 794883, 797206, 797206, 802858, 805181, 806002, 806002, + 808090, 810413, 811234, 811234, 813322, 818974, 821062, 821062, + 826294, 831050, 833373, 835309, 840010, 840010, 840010, 840010, + 840010, 841946, 842767, 843470, 845242, 849943, 852031, 853803, + 858214, 872074, 877726, 883378, 897094, 897094, 897094, 897094, + 897094, 901951, 903723, 905537, 910066, 923782, 929014, 934246, + 947218, 961078, 961078, 966003, 979863, 985604, 987927, 987927, + 993579, 998335, 998335, 1000271, 1004972, 1018832, 1018832, 1023689, + 1037405, 1043146, 1045469, 1045469, 1051121, 1051121, 1051121, 1051121, + 1051121, 1053057, 1053878, 1053878, 1055650, 1061302, 1063390, 1063390, + 1068622, 1074363, 1074363, 1076299, 1081951, 1084274, 1085095, 1085095, + 1087183, 1089506, 1089506, 1090327, 1092415, 1098067, 1098067, 1099839, + 1105071, 1118931, 1118931, 1123788, 1137504, 1143156, 1145244, 1145244, + 1150476, 1155177, 1155177, 1156949, 1161360, 1175076, 1175076, 1179605, + 1192577, 1231779, 1231779, 1245639, 1284841, 1298701, 1304353, 1310005, + 1323721, 1337581, 1337581, 1343233, 1356949, 1396151, 1396151, 1409867, + 1448747, 1462607, 1468259, 1473911, 1487627, 1487627, 1487627, 1487627, + 1487627, 1492484, 1494256, 1496070, 1500599, 1514315, 1519547, 1524779, + 1537751, 1551611, 1551611, 1556312, 1570028, 1575680, 1575680, 1577768, + 1583000, 1588652, 1588652, 1590740, 1595972, 1609688, 1609688, 1614099, + 1627071, 1666273, 1666273, 1679989, 1718869, 1732585, 1737817, 1743049, + 1756021, 1769737, 1769737, 1774969, 1787941, 1826821, 1826821, 1839793, + }, + { + 0, 48001, 48001, 67803, 115804, 133384, 139759, 146225, + 163805, 180599, 180599, 188996, 205790, 253791, 253791, 273593, + 321594, 339174, 345549, 352015, 369595, 369595, 369595, 369595, + 369595, 376882, 379378, 381989, 389144, 406724, 412991, 419348, + 436718, 451758, 451758, 457774, 472814, 479189, 479189, 481429, + 487696, 493712, 493712, 496641, 502578, 517618, 517618, 523555, + 538437, 586438, 586438, 606240, 654241, 671821, 678088, 684445, + 701815, 718609, 718609, 726832, 743452, 791453, 791453, 811002, + 858576, 876156, 882531, 888997, 906577, 906577, 906577, 906577, + 906577, 913864, 916360, 918971, 926126, 943706, 949973, 956330, + 973700, 980075, 982571, 984803, 991070, 993566, 994597, 994597, + 996849, 999089, 999872, 1000682, 1002706, 1008973, 1011225, 1013245, + 1019024, 1025036, 1027532, 1029710, 1035644, 1035644, 1035644, 1035644, + 1035644, 1038572, 1039603, 1040517, 1043119, 1049053, 1051305, 1053287, + 1058817, 1076397, 1082664, 1089021, 1106391, 1106391, 1106391, 1106391, + 1106391, 1113546, 1115798, 1118130, 1124691, 1142061, 1147840, 1153697, + 1170015, 1187595, 1187595, 1194882, 1212462, 1218837, 1221333, 1223565, + 1229832, 1235844, 1235844, 1238772, 1244706, 1262286, 1262286, 1269441, + 1286811, 1293186, 1295682, 1297914, 1304181, 1304181, 1304181, 1304181, + 1304181, 1306677, 1307708, 1308490, 1310742, 1317009, 1319261, 1321281, + 1327060, 1333435, 1333435, 1335931, 1342198, 1344694, 1345725, 1345725, + 1347977, 1350473, 1350473, 1351504, 1353756, 1360023, 1360023, 1362275, + 1368054, 1385634, 1385634, 1392789, 1410159, 1416426, 1418678, 1420698, + 1426477, 1432411, 1432411, 1435013, 1440543, 1457913, 1457913, 1464474, + 1480792, 1528793, 1528793, 1548595, 1596596, 1614176, 1620443, 1626800, + 1644170, 1660964, 1660964, 1669187, 1685807, 1733808, 1733808, 1753357, + 1800931, 1818511, 1824778, 1831135, 1848505, 1848505, 1848505, 1848505, + 1848505, 1855660, 1857912, 1860244, 1866805, 1884175, 1889954, 1895811, + 1912129, 1927169, 1927169, 1933106, 1947988, 1954255, 1954255, 1956279, + 1962058, 1967995, 1967995, 1970597, 1976128, 1991010, 1991010, 1996541, + 2010611, 2058612, 2058612, 2078161, 2125735, 2143105, 2148884, 2154741, + 2171059, 2187679, 2187679, 2195154, 2210852, 2258426, 2258426, 2276726, + }, + { + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + }, + { + 0, 62844, 62844, 85724, 148568, 171086, 179367, 188894, + 211412, 231624, 231624, 240166, 260378, 323222, 323222, 346102, + 408946, 431464, 439745, 449272, 471790, 471790, 471790, 471790, + 471790, 480017, 482893, 486263, 494330, 516848, 524960, 534269, + 556466, 576434, 576434, 583546, 603514, 611795, 611795, 615103, + 623215, 630497, 630497, 633487, 640639, 660607, 660607, 667603, + 687304, 750148, 750148, 773028, 835872, 858390, 866502, 875811, + 898008, 918220, 918220, 926578, 946515, 1009359, 1009359, 1031899, + 1094035, 1116553, 1124834, 1134361, 1156879, 1156879, 1156879, 1156879, + 1156879, 1165106, 1167982, 1171352, 1179419, 1201937, 1210049, 1219358, + 1241555, 1249836, 1252773, 1255640, 1263752, 1266689, 1267720, 1268530, + 1271136, 1274444, 1275461, 1276623, 1279537, 1287649, 1290255, 1292815, + 1300199, 1307287, 1310224, 1313161, 1320136, 1320136, 1320136, 1320136, + 1320136, 1323056, 1324087, 1325118, 1327716, 1334691, 1337297, 1339903, + 1346332, 1368850, 1376962, 1386271, 1408468, 1408468, 1408468, 1408468, + 1408468, 1416535, 1419099, 1422055, 1429412, 1451609, 1458993, 1467394, + 1488056, 1510574, 1510574, 1518801, 1541319, 1549600, 1552537, 1555404, + 1563516, 1570604, 1570604, 1573524, 1580499, 1603017, 1603017, 1611084, + 1633281, 1641562, 1644499, 1647366, 1655478, 1655478, 1655478, 1655478, + 1655478, 1658354, 1659385, 1660271, 1662835, 1670947, 1673553, 1676113, + 1683497, 1691778, 1691778, 1694654, 1702766, 1705703, 1706734, 1707544, + 1710150, 1713087, 1713087, 1714118, 1716724, 1724836, 1724836, 1727400, + 1734784, 1757302, 1757302, 1765369, 1787566, 1795678, 1798284, 1800844, + 1808228, 1815203, 1815203, 1817801, 1824230, 1846427, 1846427, 1853784, + 1874446, 1937290, 1937290, 1960170, 2023014, 2045532, 2053644, 2062953, + 2085150, 2105362, 2105362, 2113720, 2133657, 2196501, 2196501, 2219041, + 2281177, 2303695, 2311807, 2321116, 2343313, 2343313, 2343313, 2343313, + 2343313, 2351380, 2353944, 2356900, 2364257, 2386454, 2393838, 2402239, + 2422901, 2442869, 2442869, 2449865, 2469566, 2477678, 2477678, 2480592, + 2487976, 2495128, 2495128, 2497772, 2504332, 2524033, 2524033, 2530475, + 2548885, 2611729, 2611729, 2634269, 2696405, 2718602, 2725986, 2734387, + 2755049, 2774986, 2774986, 2782566, 2801182, 2863318, 2863318, 2884262, + }, + { + 0, 48001, 48001, 65581, 113582, 131162, 137628, 144003, + 161583, 176805, 176805, 183271, 198493, 246494, 246494, 264074, + 312075, 329655, 336121, 342496, 360076, 360076, 360076, 360076, + 360076, 366537, 368806, 371092, 377446, 395026, 401383, 407650, + 425020, 440242, 440242, 445698, 460920, 467386, 467386, 469626, + 475983, 481448, 481448, 483718, 489109, 504331, 504331, 509716, + 524779, 572780, 572780, 590360, 638361, 655941, 662298, 668565, + 685935, 701157, 701157, 707514, 722577, 770578, 770578, 787948, + 835522, 853102, 859568, 865943, 883523, 883523, 883523, 883523, + 883523, 889984, 892253, 894539, 900893, 918473, 924830, 931097, + 948467, 954933, 957203, 959480, 965837, 968107, 968928, 969644, + 971694, 973934, 974639, 975449, 977473, 983830, 985880, 987934, + 993791, 999247, 1001517, 1003469, 1008854, 1008854, 1008854, 1008854, + 1008854, 1011123, 1011944, 1012661, 1014711, 1020096, 1022146, 1023926, + 1028949, 1046529, 1052886, 1059153, 1076523, 1076523, 1076523, 1076523, + 1076523, 1082877, 1084927, 1086985, 1092841, 1110211, 1116068, 1121847, + 1138165, 1155745, 1155745, 1162206, 1179786, 1186252, 1188522, 1190799, + 1197156, 1202612, 1202612, 1204881, 1210266, 1227846, 1227846, 1234200, + 1251570, 1258036, 1260306, 1262583, 1268940, 1268940, 1268940, 1268940, + 1268940, 1271209, 1272030, 1272746, 1274796, 1281153, 1283203, 1285257, + 1291114, 1297580, 1297580, 1299849, 1306206, 1308476, 1309297, 1310013, + 1312063, 1314333, 1314333, 1315154, 1317204, 1323561, 1323561, 1325611, + 1331468, 1349048, 1349048, 1355402, 1372772, 1379129, 1381179, 1383233, + 1389090, 1394475, 1394475, 1396525, 1401548, 1418918, 1418918, 1424774, + 1441092, 1489093, 1489093, 1506673, 1554674, 1572254, 1578611, 1584878, + 1602248, 1617470, 1617470, 1623827, 1638890, 1686891, 1686891, 1704261, + 1751835, 1769415, 1775772, 1782039, 1799409, 1799409, 1799409, 1799409, + 1799409, 1805763, 1807813, 1809871, 1815727, 1833097, 1838954, 1844733, + 1861051, 1876273, 1876273, 1881658, 1896721, 1903078, 1903078, 1905102, + 1910959, 1916350, 1916350, 1918400, 1923425, 1938488, 1938488, 1943511, + 1957749, 2005750, 2005750, 2023120, 2070694, 2088064, 2093921, 2099700, + 2116018, 2131081, 2131081, 2136938, 2151176, 2198750, 2198750, 2215068, + }, + { + 0, 62844, 62844, 85362, 148206, 171086, 179628, 188170, + 211050, 231018, 231018, 239299, 259267, 322111, 322111, 344629, + 407473, 430353, 438895, 447437, 470317, 470317, 470317, 470317, + 470317, 478544, 481464, 484447, 492514, 515394, 523752, 532110, + 554650, 574862, 574862, 581950, 602162, 610704, 610704, 613741, + 622099, 629381, 629381, 632318, 639470, 659682, 659682, 666657, + 686594, 749438, 749438, 771956, 834800, 857680, 866038, 874396, + 896936, 916904, 916904, 925016, 944717, 1007561, 1007561, 1029758, + 1091894, 1114774, 1123316, 1131858, 1154738, 1154738, 1154738, 1154738, + 1154738, 1162965, 1165885, 1168868, 1176935, 1199815, 1208173, 1216531, + 1239071, 1247613, 1250603, 1253253, 1261611, 1264601, 1265632, 1266547, + 1269191, 1272228, 1273154, 1274093, 1276771, 1285129, 1287773, 1290135, + 1297715, 1304827, 1307817, 1310420, 1317416, 1317416, 1317416, 1317416, + 1317416, 1320292, 1321323, 1322236, 1324800, 1331796, 1334440, 1336768, + 1343210, 1366090, 1374448, 1382806, 1405346, 1405346, 1405346, 1405346, + 1405346, 1413413, 1416011, 1418651, 1426008, 1448548, 1456128, 1463708, + 1484652, 1507532, 1507532, 1515759, 1538639, 1547181, 1550171, 1552821, + 1561179, 1568291, 1568291, 1571167, 1578163, 1601043, 1601043, 1609110, + 1631650, 1640192, 1643182, 1645832, 1654190, 1654190, 1654190, 1654190, + 1654190, 1657110, 1658141, 1658949, 1661547, 1669905, 1672549, 1674911, + 1682491, 1691033, 1691033, 1693953, 1702311, 1705301, 1706332, 1707247, + 1709891, 1712881, 1712881, 1713912, 1716556, 1724914, 1724914, 1727512, + 1735092, 1757972, 1757972, 1766039, 1788579, 1796937, 1799581, 1801943, + 1809523, 1816519, 1816519, 1819083, 1825525, 1848065, 1848065, 1855422, + 1876366, 1939210, 1939210, 1961728, 2024572, 2047452, 2055810, 2064168, + 2086708, 2106676, 2106676, 2114788, 2134489, 2197333, 2197333, 2219530, + 2281666, 2304546, 2312904, 2321262, 2343802, 2343802, 2343802, 2343802, + 2343802, 2351869, 2354467, 2357107, 2364464, 2387004, 2394584, 2402164, + 2423108, 2443320, 2443320, 2450295, 2470232, 2478590, 2478590, 2481268, + 2488848, 2496000, 2496000, 2498606, 2505166, 2525103, 2525103, 2531532, + 2550148, 2612992, 2612992, 2635189, 2697325, 2719865, 2727445, 2735025, + 2755969, 2775670, 2775670, 2783054, 2801464, 2863600, 2863600, 2884262, + }, + { + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, }, }; diff --git a/all_cases/short_code.cc b/all_cases/short_code.cc index 4947d6f..a07531f 100644 --- a/all_cases/short_code.cc +++ b/all_cases/short_code.cc @@ -81,10 +81,10 @@ uint64_t unzip_short_code(uint32_t short_code) { uint32_t prefix = 0; for (; prefix < 256; ++prefix) { - if (short_code < SHORT_CODE_MARK[head][prefix]) { + if (short_code < SHORT_CODE_INDEX[head][prefix]) { break; } - short_code -= SHORT_CODE_MARK[head][prefix]; + short_code -= SHORT_CODE_INDEX[head][prefix]; } std::cout << "prefix: " << prefix << std::endl; @@ -140,20 +140,52 @@ int main() { // zip short code // valid code -> short code - // head -> offset_1 - // prefix -> offset_2 -// uint64_t code = 0x4FEA13400; -// head_offset = code >> 32; + uint64_t code = 0x6EC0F8800; - uint32_t offset[16]; - uint32_t sum = 0; - for (int i = 0; i < 16; ++i) { - offset[i] = sum; - sum += ALL_CASES_INDEX[i]; - } - for (int i = 0; i < 16; ++i) { - std::cout << offset[i] << ", "; +// uint32_t head = code >> 32; +// std::cout << "head: " << head << std::endl; +// uint32_t head_offset = ALL_CASES_OFFSET[head]; +// std::cout << "head offset: " << head_offset << std::endl; +// +// uint32_t prefix = (code >> 24) & 0xFF; +// std::cout << "prefix: " << prefix << std::endl; +// uint32_t prefix_offset = SHORT_CODE_MARK[head][prefix]; +// std::cout << "prefix offset: " << prefix_offset << std::endl; + + // know real range -> start search at offset + +// uint32_t offset[16]; +// uint32_t sum = 0; +// for (int i = 0; i < 16; ++i) { +// offset[i] = sum; +// sum += ALL_CASES_INDEX[i]; +// } +// for (int i = 0; i < 16; ++i) { +// std::cout << offset[i] << ", "; +// } + + uint32_t offset[256]; + + for (uint32_t head = 0; head < 16; ++head) { + + uint32_t sum = 0; + for (int i = 0; i < 256; ++i) { + offset[i] = sum; + sum += SHORT_CODE_INDEX[head][i]; + } + std::cout << "{" << std::endl; + for (int i = 0; i < 256; ++i) { + if (i % 8 == 0) { + std::cout << " "; + } +// printf("%7d, ", offset[i]); + printf("%5d, ", SHORT_CODE_INDEX[head][i]); + if (i % 8 == 7) { + std::cout << std::endl; + } + } + std::cout << "}," << std::endl; } return 0;