mirror of
https://github.com/boykopovar/AnyPS5.git
synced 2026-10-22 08:33:12 -05:00
2429 lines
71 KiB
C++
2429 lines
71 KiB
C++
#include <array>
|
|
#include <cstdint>
|
|
#include <stdexcept>
|
|
#include "SceTypes.hpp"
|
|
#include "prx/libc/include/General.hpp"
|
|
|
|
namespace {
|
|
constexpr int kErrInvalidAddress = static_cast<int>(0x80BC0031u);
|
|
constexpr int kErrInvalidUserId = static_cast<int>(0x80BC0010u);
|
|
constexpr std::array<std::uint16_t, 256> BaseVirtualKeys = {
|
|
255, 255, 255, 255, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76,
|
|
77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 49, 50,
|
|
51, 52, 53, 54, 55, 56, 57, 48, 13, 27, 8, 9, 32, 187, 219, 221,
|
|
186, 191, 191, 192, 222, 220, 188, 190, 189, 20, 112, 113, 114, 115, 116, 117,
|
|
118, 119, 120, 121, 122, 123, 44, 145, 19, 45, 36, 33, 46, 35, 34, 39,
|
|
37, 40, 38, 144, 111, 106, 109, 107, 13, 97, 98, 99, 100, 101, 102, 103,
|
|
104, 105, 96, 110, 226, 93, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
|
|
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
|
|
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
|
|
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
|
|
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
|
|
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
|
|
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
|
|
255, 255, 255, 255, 255, 255, 255, 255, 12, 255, 255, 255, 255, 255, 255, 255,
|
|
162, 160, 164, 91, 163, 161, 165, 92, 255, 255, 255, 255, 255, 255, 255, 255,
|
|
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
|
|
};
|
|
|
|
constexpr auto VirtualKeys = [] {
|
|
std::array<std::array<std::uint16_t, 256>, 39> layouts{};
|
|
for (auto& layout : layouts) layout = BaseVirtualKeys;
|
|
layouts[1][28] = 90;
|
|
layouts[1][29] = 89;
|
|
layouts[1][45] = 189;
|
|
layouts[1][46] = 221;
|
|
layouts[1][47] = 186;
|
|
layouts[1][48] = 187;
|
|
layouts[2][28] = 90;
|
|
layouts[2][29] = 89;
|
|
layouts[2][45] = 219;
|
|
layouts[2][46] = 221;
|
|
layouts[2][47] = 186;
|
|
layouts[2][48] = 192;
|
|
layouts[2][49] = 223;
|
|
layouts[2][50] = 223;
|
|
layouts[2][51] = 222;
|
|
layouts[2][52] = 220;
|
|
layouts[2][53] = 191;
|
|
layouts[3][45] = 189;
|
|
layouts[3][46] = 187;
|
|
layouts[3][47] = 219;
|
|
layouts[3][48] = 221;
|
|
layouts[3][49] = 220;
|
|
layouts[3][50] = 220;
|
|
layouts[3][51] = 186;
|
|
layouts[3][53] = 192;
|
|
layouts[3][56] = 191;
|
|
layouts[3][100] = 255;
|
|
layouts[4][45] = 189;
|
|
layouts[4][46] = 187;
|
|
layouts[4][47] = 219;
|
|
layouts[4][48] = 221;
|
|
layouts[4][49] = 222;
|
|
layouts[4][50] = 222;
|
|
layouts[4][51] = 186;
|
|
layouts[4][52] = 192;
|
|
layouts[4][53] = 223;
|
|
layouts[4][56] = 191;
|
|
layouts[5][45] = 219;
|
|
layouts[5][46] = 221;
|
|
layouts[5][47] = 186;
|
|
layouts[5][48] = 187;
|
|
layouts[6][45] = 219;
|
|
layouts[6][46] = 221;
|
|
layouts[6][47] = 186;
|
|
layouts[6][48] = 187;
|
|
layouts[6][100] = 255;
|
|
layouts[8][4] = 81;
|
|
layouts[8][16] = 188;
|
|
layouts[8][20] = 65;
|
|
layouts[8][26] = 90;
|
|
layouts[8][29] = 87;
|
|
layouts[8][45] = 219;
|
|
layouts[8][46] = 187;
|
|
layouts[8][49] = 220;
|
|
layouts[8][50] = 220;
|
|
layouts[8][51] = 77;
|
|
layouts[8][52] = 192;
|
|
layouts[8][53] = 222;
|
|
layouts[8][54] = 190;
|
|
layouts[8][55] = 191;
|
|
layouts[8][56] = 223;
|
|
layouts[9][4] = 81;
|
|
layouts[9][16] = 188;
|
|
layouts[9][20] = 65;
|
|
layouts[9][26] = 90;
|
|
layouts[9][29] = 87;
|
|
layouts[9][45] = 219;
|
|
layouts[9][46] = 189;
|
|
layouts[9][49] = 220;
|
|
layouts[9][50] = 220;
|
|
layouts[9][51] = 77;
|
|
layouts[9][52] = 192;
|
|
layouts[9][53] = 222;
|
|
layouts[9][54] = 190;
|
|
layouts[9][55] = 191;
|
|
layouts[9][56] = 187;
|
|
layouts[10][45] = 189;
|
|
layouts[10][46] = 187;
|
|
layouts[10][47] = 219;
|
|
layouts[10][48] = 221;
|
|
layouts[10][49] = 220;
|
|
layouts[10][50] = 220;
|
|
layouts[10][51] = 186;
|
|
layouts[10][52] = 192;
|
|
layouts[10][53] = 222;
|
|
layouts[10][56] = 191;
|
|
layouts[11] = layouts[2];
|
|
layouts[12] = layouts[5];
|
|
layouts[13][45] = 219;
|
|
layouts[13][46] = 191;
|
|
layouts[13][49] = 220;
|
|
layouts[13][50] = 220;
|
|
layouts[13][51] = 187;
|
|
layouts[13][52] = 192;
|
|
layouts[13][53] = 222;
|
|
layouts[15][46] = 191;
|
|
layouts[15][47] = 219;
|
|
layouts[15][48] = 221;
|
|
layouts[15][49] = 220;
|
|
layouts[15][50] = 220;
|
|
layouts[15][51] = 186;
|
|
layouts[15][53] = 192;
|
|
layouts[16][45] = 189;
|
|
layouts[16][46] = 187;
|
|
layouts[16][47] = 219;
|
|
layouts[16][48] = 221;
|
|
layouts[16][49] = 220;
|
|
layouts[16][50] = 220;
|
|
layouts[16][51] = 186;
|
|
layouts[16][53] = 192;
|
|
layouts[16][56] = 191;
|
|
layouts[17] = layouts[5];
|
|
layouts[18] = layouts[3];
|
|
layouts[20][45] = 223;
|
|
layouts[20][46] = 189;
|
|
layouts[20][47] = 219;
|
|
layouts[20][48] = 221;
|
|
layouts[20][49] = 188;
|
|
layouts[20][50] = 188;
|
|
layouts[20][51] = 186;
|
|
layouts[20][52] = 190;
|
|
layouts[20][53] = 192;
|
|
layouts[20][54] = 191;
|
|
layouts[20][55] = 220;
|
|
layouts[20][56] = 190;
|
|
layouts[21][45] = 189;
|
|
layouts[21][46] = 222;
|
|
layouts[21][47] = 192;
|
|
layouts[21][48] = 219;
|
|
layouts[21][49] = 221;
|
|
layouts[21][50] = 221;
|
|
layouts[21][51] = 187;
|
|
layouts[21][52] = 186;
|
|
layouts[21][53] = 243;
|
|
layouts[21][56] = 191;
|
|
layouts[21][100] = 255;
|
|
layouts[21][135] = 226;
|
|
layouts[21][136] = 242;
|
|
layouts[21][137] = 220;
|
|
layouts[21][138] = 28;
|
|
layouts[21][139] = 247;
|
|
layouts[22] = layouts[21];
|
|
layouts[23][45] = 189;
|
|
layouts[23][46] = 187;
|
|
layouts[23][47] = 219;
|
|
layouts[23][48] = 221;
|
|
layouts[23][49] = 220;
|
|
layouts[23][50] = 220;
|
|
layouts[23][51] = 186;
|
|
layouts[23][53] = 192;
|
|
layouts[23][56] = 191;
|
|
layouts[23][136] = 21;
|
|
layouts[23][138] = 25;
|
|
layouts[24] = layouts[3];
|
|
layouts[25] = layouts[3];
|
|
layouts[26] = layouts[3];
|
|
layouts[27] = layouts[3];
|
|
layouts[28] = layouts[3];
|
|
layouts[29] = layouts[16];
|
|
layouts[30] = layouts[16];
|
|
layouts[31][28] = 90;
|
|
layouts[31][29] = 89;
|
|
layouts[31][46] = 191;
|
|
layouts[31][47] = 219;
|
|
layouts[31][48] = 221;
|
|
layouts[31][49] = 220;
|
|
layouts[31][50] = 220;
|
|
layouts[31][51] = 186;
|
|
layouts[31][53] = 192;
|
|
layouts[32] = layouts[16];
|
|
layouts[33] = layouts[16];
|
|
layouts[34] = layouts[16];
|
|
layouts[35] = layouts[16];
|
|
layouts[36][28] = 90;
|
|
layouts[36][29] = 89;
|
|
layouts[36][39] = 192;
|
|
layouts[36][45] = 191;
|
|
layouts[36][46] = 187;
|
|
layouts[36][47] = 219;
|
|
layouts[36][48] = 221;
|
|
layouts[36][49] = 220;
|
|
layouts[36][50] = 220;
|
|
layouts[36][51] = 186;
|
|
layouts[36][53] = 48;
|
|
layouts[37] = layouts[3];
|
|
layouts[38] = layouts[3];
|
|
return layouts;
|
|
}();
|
|
|
|
constexpr int kErrInvalidKeyboardType = static_cast<int>(0x80BC001Du);
|
|
constexpr auto CharacterTables = [] {
|
|
std::array<std::array<std::uint32_t, 256>, 111> tables{};
|
|
tables[1][4] = 327777;
|
|
tables[1][5] = 327778;
|
|
tables[1][6] = 327779;
|
|
tables[1][7] = 327780;
|
|
tables[1][8] = 327781;
|
|
tables[1][9] = 327782;
|
|
tables[1][10] = 327783;
|
|
tables[1][11] = 327784;
|
|
tables[1][12] = 327785;
|
|
tables[1][13] = 327786;
|
|
tables[1][14] = 327787;
|
|
tables[1][15] = 327788;
|
|
tables[1][16] = 327789;
|
|
tables[1][17] = 327790;
|
|
tables[1][18] = 327791;
|
|
tables[1][19] = 327792;
|
|
tables[1][20] = 327793;
|
|
tables[1][21] = 327794;
|
|
tables[1][22] = 327795;
|
|
tables[1][23] = 327796;
|
|
tables[1][24] = 327797;
|
|
tables[1][25] = 327798;
|
|
tables[1][26] = 327799;
|
|
tables[1][27] = 327800;
|
|
tables[1][28] = 327802;
|
|
tables[1][29] = 327801;
|
|
tables[1][30] = 262193;
|
|
tables[1][31] = 262194;
|
|
tables[1][32] = 262195;
|
|
tables[1][33] = 262196;
|
|
tables[1][34] = 262197;
|
|
tables[1][35] = 262198;
|
|
tables[1][36] = 262199;
|
|
tables[1][37] = 262200;
|
|
tables[1][38] = 262201;
|
|
tables[1][39] = 262192;
|
|
tables[1][40] = 262154;
|
|
tables[1][42] = 262152;
|
|
tables[1][43] = 262153;
|
|
tables[1][44] = 262176;
|
|
tables[1][45] = 262183;
|
|
tables[1][46] = 262238;
|
|
tables[1][47] = 262396;
|
|
tables[1][48] = 262312;
|
|
tables[1][49] = 262180;
|
|
tables[1][50] = 262180;
|
|
tables[1][51] = 262390;
|
|
tables[1][52] = 262372;
|
|
tables[1][53] = 262311;
|
|
tables[1][54] = 262188;
|
|
tables[1][55] = 262190;
|
|
tables[1][56] = 262189;
|
|
tables[1][83] = 393299;
|
|
tables[1][84] = 393263;
|
|
tables[1][85] = 393258;
|
|
tables[1][86] = 393261;
|
|
tables[1][87] = 393259;
|
|
tables[1][88] = 393226;
|
|
tables[1][89] = 393293;
|
|
tables[1][90] = 393297;
|
|
tables[1][91] = 393294;
|
|
tables[1][92] = 393296;
|
|
tables[1][93] = 393309;
|
|
tables[1][94] = 393295;
|
|
tables[1][95] = 393290;
|
|
tables[1][96] = 393298;
|
|
tables[1][97] = 393291;
|
|
tables[1][98] = 393289;
|
|
tables[1][99] = 393292;
|
|
tables[1][100] = 262204;
|
|
tables[1][103] = 393277;
|
|
tables[1][133] = 393260;
|
|
tables[1][134] = 393277;
|
|
tables[1][140] = 393260;
|
|
tables[2] = tables[1];
|
|
tables[2][4] = 327745;
|
|
tables[2][5] = 327746;
|
|
tables[2][6] = 327747;
|
|
tables[2][7] = 327748;
|
|
tables[2][8] = 327749;
|
|
tables[2][9] = 327750;
|
|
tables[2][10] = 327751;
|
|
tables[2][11] = 327752;
|
|
tables[2][12] = 327753;
|
|
tables[2][13] = 327754;
|
|
tables[2][14] = 327755;
|
|
tables[2][15] = 327756;
|
|
tables[2][16] = 327757;
|
|
tables[2][17] = 327758;
|
|
tables[2][18] = 327759;
|
|
tables[2][19] = 327760;
|
|
tables[2][20] = 327761;
|
|
tables[2][21] = 327762;
|
|
tables[2][22] = 327763;
|
|
tables[2][23] = 327764;
|
|
tables[2][24] = 327765;
|
|
tables[2][25] = 327766;
|
|
tables[2][26] = 327767;
|
|
tables[2][27] = 327768;
|
|
tables[2][28] = 327770;
|
|
tables[2][29] = 327769;
|
|
tables[2][30] = 262187;
|
|
tables[2][31] = 262178;
|
|
tables[2][32] = 262186;
|
|
tables[2][33] = 262375;
|
|
tables[2][34] = 262181;
|
|
tables[2][35] = 262182;
|
|
tables[2][36] = 262191;
|
|
tables[2][37] = 262184;
|
|
tables[2][38] = 262185;
|
|
tables[2][39] = 262205;
|
|
tables[2][45] = 262207;
|
|
tables[2][46] = 262240;
|
|
tables[2][47] = 262376;
|
|
tables[2][48] = 262177;
|
|
tables[2][49] = 262307;
|
|
tables[2][50] = 262307;
|
|
tables[2][51] = 262377;
|
|
tables[2][52] = 262368;
|
|
tables[2][53] = 262320;
|
|
tables[2][54] = 262203;
|
|
tables[2][55] = 262202;
|
|
tables[2][56] = 262239;
|
|
tables[2][89] = 393265;
|
|
tables[2][90] = 393266;
|
|
tables[2][91] = 393267;
|
|
tables[2][92] = 393268;
|
|
tables[2][93] = 393269;
|
|
tables[2][94] = 393270;
|
|
tables[2][95] = 393271;
|
|
tables[2][96] = 393272;
|
|
tables[2][97] = 393273;
|
|
tables[2][98] = 393264;
|
|
tables[2][99] = 393262;
|
|
tables[2][100] = 262206;
|
|
tables[3][8] = 336044;
|
|
tables[3][30] = 262310;
|
|
tables[3][31] = 262208;
|
|
tables[3][32] = 262179;
|
|
tables[3][33] = 262320;
|
|
tables[3][34] = 262311;
|
|
tables[3][35] = 262316;
|
|
tables[3][36] = 262268;
|
|
tables[3][37] = 262306;
|
|
tables[3][45] = 262324;
|
|
tables[3][46] = 262270;
|
|
tables[3][47] = 262235;
|
|
tables[3][48] = 262237;
|
|
tables[3][49] = 262269;
|
|
tables[3][50] = 262269;
|
|
tables[3][52] = 262267;
|
|
tables[3][100] = 262236;
|
|
tables[3][136] = 262324;
|
|
tables[3][137] = 262324;
|
|
tables[3][138] = 262324;
|
|
tables[3][146] = 262324;
|
|
tables[3][147] = 262324;
|
|
tables[4] = tables[1];
|
|
tables[4][28] = 327801;
|
|
tables[4][29] = 327802;
|
|
tables[4][45] = 262189;
|
|
tables[4][46] = 262205;
|
|
tables[4][47] = 262235;
|
|
tables[4][48] = 262237;
|
|
tables[4][49] = 262236;
|
|
tables[4][50] = 262236;
|
|
tables[4][51] = 262203;
|
|
tables[4][52] = 262183;
|
|
tables[4][53] = 262240;
|
|
tables[4][56] = 262191;
|
|
tables[4][100] = 262236;
|
|
tables[5] = tables[2];
|
|
tables[5][28] = 327769;
|
|
tables[5][29] = 327770;
|
|
tables[5][30] = 262177;
|
|
tables[5][31] = 262208;
|
|
tables[5][32] = 262179;
|
|
tables[5][33] = 262180;
|
|
tables[5][35] = 262238;
|
|
tables[5][36] = 262182;
|
|
tables[5][37] = 262186;
|
|
tables[5][38] = 262184;
|
|
tables[5][39] = 262185;
|
|
tables[5][45] = 262239;
|
|
tables[5][46] = 262187;
|
|
tables[5][47] = 262267;
|
|
tables[5][48] = 262269;
|
|
tables[5][49] = 262268;
|
|
tables[5][50] = 262268;
|
|
tables[5][51] = 262202;
|
|
tables[5][52] = 262178;
|
|
tables[5][53] = 262270;
|
|
tables[5][54] = 262204;
|
|
tables[5][55] = 262206;
|
|
tables[5][56] = 262207;
|
|
tables[5][100] = 262268;
|
|
tables[6][34] = 270508;
|
|
tables[7] = tables[1];
|
|
tables[7][4] = 393025;
|
|
tables[7][5] = 393026;
|
|
tables[7][6] = 393027;
|
|
tables[7][7] = 393028;
|
|
tables[7][8] = 393029;
|
|
tables[7][9] = 393030;
|
|
tables[7][10] = 393031;
|
|
tables[7][11] = 393032;
|
|
tables[7][12] = 393033;
|
|
tables[7][13] = 393034;
|
|
tables[7][14] = 393035;
|
|
tables[7][15] = 393036;
|
|
tables[7][16] = 393037;
|
|
tables[7][17] = 393038;
|
|
tables[7][18] = 393039;
|
|
tables[7][19] = 393040;
|
|
tables[7][20] = 393041;
|
|
tables[7][21] = 393042;
|
|
tables[7][22] = 393043;
|
|
tables[7][23] = 393044;
|
|
tables[7][24] = 393045;
|
|
tables[7][25] = 393046;
|
|
tables[7][26] = 393047;
|
|
tables[7][27] = 393048;
|
|
tables[7][28] = 393049;
|
|
tables[7][29] = 393050;
|
|
tables[7][30] = 327441;
|
|
tables[7][31] = 327442;
|
|
tables[7][32] = 327443;
|
|
tables[7][33] = 327444;
|
|
tables[7][34] = 327445;
|
|
tables[7][35] = 327446;
|
|
tables[7][36] = 327447;
|
|
tables[7][37] = 327448;
|
|
tables[7][38] = 327449;
|
|
tables[7][39] = 327440;
|
|
tables[7][44] = 274432;
|
|
tables[7][45] = 327437;
|
|
tables[7][46] = 327486;
|
|
tables[7][47] = 327456;
|
|
tables[7][48] = 327483;
|
|
tables[7][49] = 327485;
|
|
tables[7][50] = 327485;
|
|
tables[7][51] = 327451;
|
|
tables[7][52] = 327450;
|
|
tables[7][53] = 0;
|
|
tables[7][54] = 327436;
|
|
tables[7][55] = 327438;
|
|
tables[7][56] = 327439;
|
|
tables[7][100] = 0;
|
|
tables[7][135] = 327653;
|
|
tables[8] = tables[2];
|
|
tables[8][4] = 392993;
|
|
tables[8][5] = 392994;
|
|
tables[8][6] = 392995;
|
|
tables[8][7] = 392996;
|
|
tables[8][8] = 392997;
|
|
tables[8][9] = 392998;
|
|
tables[8][10] = 392999;
|
|
tables[8][11] = 393000;
|
|
tables[8][12] = 393001;
|
|
tables[8][13] = 393002;
|
|
tables[8][14] = 393003;
|
|
tables[8][15] = 393004;
|
|
tables[8][16] = 393005;
|
|
tables[8][17] = 393006;
|
|
tables[8][18] = 393007;
|
|
tables[8][19] = 393008;
|
|
tables[8][20] = 393009;
|
|
tables[8][21] = 393010;
|
|
tables[8][22] = 393011;
|
|
tables[8][23] = 393012;
|
|
tables[8][24] = 393013;
|
|
tables[8][25] = 393014;
|
|
tables[8][26] = 393015;
|
|
tables[8][27] = 393016;
|
|
tables[8][28] = 393017;
|
|
tables[8][29] = 393018;
|
|
tables[8][30] = 327425;
|
|
tables[8][31] = 270364;
|
|
tables[8][32] = 327427;
|
|
tables[8][33] = 327428;
|
|
tables[8][34] = 327429;
|
|
tables[8][35] = 327430;
|
|
tables[8][36] = 270360;
|
|
tables[8][37] = 327432;
|
|
tables[8][38] = 327433;
|
|
tables[8][39] = 0;
|
|
tables[8][45] = 327453;
|
|
tables[8][46] = 327518;
|
|
tables[8][47] = 327488;
|
|
tables[8][48] = 327515;
|
|
tables[8][49] = 327517;
|
|
tables[8][50] = 327517;
|
|
tables[8][51] = 327435;
|
|
tables[8][52] = 327434;
|
|
tables[8][53] = 0;
|
|
tables[8][54] = 327452;
|
|
tables[8][55] = 327454;
|
|
tables[8][56] = 327455;
|
|
tables[8][100] = 0;
|
|
tables[8][135] = 327487;
|
|
tables[8][137] = 327516;
|
|
tables[9] = tables[4];
|
|
tables[9][46] = 262238;
|
|
tables[9][47] = 262208;
|
|
tables[9][48] = 262235;
|
|
tables[9][49] = 262237;
|
|
tables[9][50] = 262237;
|
|
tables[9][52] = 262202;
|
|
tables[9][53] = 0;
|
|
tables[9][100] = 0;
|
|
tables[9][135] = 262236;
|
|
tables[9][137] = 262309;
|
|
tables[10] = tables[5];
|
|
tables[10][31] = 262178;
|
|
tables[10][35] = 262182;
|
|
tables[10][36] = 262183;
|
|
tables[10][37] = 262184;
|
|
tables[10][38] = 262185;
|
|
tables[10][39] = 0;
|
|
tables[10][45] = 262205;
|
|
tables[10][46] = 262270;
|
|
tables[10][47] = 262240;
|
|
tables[10][48] = 262267;
|
|
tables[10][49] = 262269;
|
|
tables[10][50] = 262269;
|
|
tables[10][51] = 262187;
|
|
tables[10][52] = 262186;
|
|
tables[10][53] = 0;
|
|
tables[10][100] = 0;
|
|
tables[10][135] = 262239;
|
|
tables[10][137] = 262268;
|
|
tables[11] = tables[9];
|
|
tables[11][4] = 274625;
|
|
tables[11][5] = 274611;
|
|
tables[11][6] = 274621;
|
|
tables[11][7] = 274615;
|
|
tables[11][8] = 274596;
|
|
tables[11][9] = 274639;
|
|
tables[11][10] = 274605;
|
|
tables[11][11] = 274607;
|
|
tables[11][12] = 274635;
|
|
tables[11][13] = 274654;
|
|
tables[11][14] = 274638;
|
|
tables[11][15] = 274666;
|
|
tables[11][16] = 274658;
|
|
tables[11][17] = 274655;
|
|
tables[11][18] = 274665;
|
|
tables[11][19] = 274619;
|
|
tables[11][20] = 274623;
|
|
tables[11][21] = 274617;
|
|
tables[11][22] = 274632;
|
|
tables[11][23] = 274603;
|
|
tables[11][24] = 274634;
|
|
tables[11][25] = 274642;
|
|
tables[11][26] = 274630;
|
|
tables[11][27] = 274613;
|
|
tables[11][28] = 274675;
|
|
tables[11][29] = 274628;
|
|
tables[11][30] = 274636;
|
|
tables[11][31] = 274645;
|
|
tables[11][32] = 274594;
|
|
tables[11][33] = 274598;
|
|
tables[11][34] = 274600;
|
|
tables[11][35] = 274602;
|
|
tables[11][36] = 274660;
|
|
tables[11][37] = 274662;
|
|
tables[11][38] = 274664;
|
|
tables[11][39] = 274671;
|
|
tables[11][45] = 274651;
|
|
tables[11][46] = 274648;
|
|
tables[11][47] = 274587;
|
|
tables[11][48] = 274588;
|
|
tables[11][49] = 274656;
|
|
tables[11][50] = 274656;
|
|
tables[11][51] = 274668;
|
|
tables[11][52] = 274609;
|
|
tables[11][54] = 274637;
|
|
tables[11][55] = 274667;
|
|
tables[11][56] = 274657;
|
|
tables[11][135] = 274669;
|
|
tables[11][137] = 274684;
|
|
tables[12] = tables[11];
|
|
tables[12][8] = 274595;
|
|
tables[12][29] = 274627;
|
|
tables[12][32] = 274593;
|
|
tables[12][33] = 274597;
|
|
tables[12][34] = 274599;
|
|
tables[12][35] = 274601;
|
|
tables[12][36] = 274659;
|
|
tables[12][37] = 274661;
|
|
tables[12][38] = 274663;
|
|
tables[12][39] = 274674;
|
|
tables[12][48] = 274444;
|
|
tables[12][49] = 274445;
|
|
tables[12][50] = 274445;
|
|
tables[12][54] = 274433;
|
|
tables[12][55] = 274434;
|
|
tables[12][56] = 274683;
|
|
tables[12][89] = 393265;
|
|
tables[12][90] = 393266;
|
|
tables[12][91] = 393267;
|
|
tables[12][92] = 393268;
|
|
tables[12][93] = 393269;
|
|
tables[12][94] = 393270;
|
|
tables[12][95] = 393271;
|
|
tables[12][96] = 393272;
|
|
tables[12][97] = 393273;
|
|
tables[12][98] = 393264;
|
|
tables[12][99] = 393262;
|
|
tables[13] = tables[9];
|
|
tables[13][4] = 327553;
|
|
tables[13][5] = 327546;
|
|
tables[13][6] = 327551;
|
|
tables[13][7] = 327548;
|
|
tables[13][8] = 327538;
|
|
tables[13][9] = 327562;
|
|
tables[13][10] = 327543;
|
|
tables[13][11] = 327544;
|
|
tables[13][12] = 327558;
|
|
tables[13][13] = 327567;
|
|
tables[13][14] = 327561;
|
|
tables[13][15] = 327576;
|
|
tables[13][16] = 327571;
|
|
tables[13][17] = 327568;
|
|
tables[13][18] = 327575;
|
|
tables[13][19] = 327550;
|
|
tables[13][20] = 327552;
|
|
tables[13][21] = 327549;
|
|
tables[13][22] = 327556;
|
|
tables[13][23] = 327542;
|
|
tables[13][24] = 327557;
|
|
tables[13][25] = 327563;
|
|
tables[13][26] = 327555;
|
|
tables[13][27] = 327547;
|
|
tables[13][28] = 327581;
|
|
tables[13][29] = 327554;
|
|
tables[13][30] = 327559;
|
|
tables[13][31] = 327564;
|
|
tables[13][32] = 327537;
|
|
tables[13][33] = 327539;
|
|
tables[13][34] = 327540;
|
|
tables[13][35] = 327541;
|
|
tables[13][36] = 327572;
|
|
tables[13][37] = 327573;
|
|
tables[13][38] = 327574;
|
|
tables[13][39] = 327580;
|
|
tables[13][45] = 327566;
|
|
tables[13][46] = 327565;
|
|
tables[13][47] = 327582;
|
|
tables[13][48] = 327583;
|
|
tables[13][49] = 327569;
|
|
tables[13][50] = 327569;
|
|
tables[13][51] = 327578;
|
|
tables[13][52] = 327545;
|
|
tables[13][54] = 327560;
|
|
tables[13][55] = 327577;
|
|
tables[13][56] = 327570;
|
|
tables[13][135] = 327579;
|
|
tables[13][137] = 327536;
|
|
tables[14] = tables[13];
|
|
tables[14][8] = 327528;
|
|
tables[14][29] = 327535;
|
|
tables[14][32] = 327527;
|
|
tables[14][33] = 327529;
|
|
tables[14][34] = 327530;
|
|
tables[14][35] = 327531;
|
|
tables[14][36] = 327532;
|
|
tables[14][37] = 327533;
|
|
tables[14][38] = 327534;
|
|
tables[14][39] = 327526;
|
|
tables[14][48] = 327522;
|
|
tables[14][49] = 327523;
|
|
tables[14][50] = 327523;
|
|
tables[14][54] = 327524;
|
|
tables[14][55] = 327521;
|
|
tables[14][56] = 327525;
|
|
tables[14][89] = 393265;
|
|
tables[14][90] = 393266;
|
|
tables[14][91] = 393267;
|
|
tables[14][92] = 393268;
|
|
tables[14][93] = 393269;
|
|
tables[14][94] = 393270;
|
|
tables[14][95] = 393271;
|
|
tables[14][96] = 393272;
|
|
tables[14][97] = 393273;
|
|
tables[14][98] = 393264;
|
|
tables[14][99] = 393262;
|
|
tables[15] = tables[11];
|
|
tables[15][4] = 274529;
|
|
tables[15][5] = 274515;
|
|
tables[15][6] = 274525;
|
|
tables[15][7] = 274519;
|
|
tables[15][8] = 274500;
|
|
tables[15][9] = 274543;
|
|
tables[15][10] = 274509;
|
|
tables[15][11] = 274511;
|
|
tables[15][12] = 274539;
|
|
tables[15][13] = 274558;
|
|
tables[15][14] = 274542;
|
|
tables[15][15] = 274570;
|
|
tables[15][16] = 274562;
|
|
tables[15][17] = 274559;
|
|
tables[15][18] = 274569;
|
|
tables[15][19] = 274523;
|
|
tables[15][20] = 274527;
|
|
tables[15][21] = 274521;
|
|
tables[15][22] = 274536;
|
|
tables[15][23] = 274507;
|
|
tables[15][24] = 274538;
|
|
tables[15][25] = 274546;
|
|
tables[15][26] = 274534;
|
|
tables[15][27] = 274517;
|
|
tables[15][28] = 274579;
|
|
tables[15][29] = 274532;
|
|
tables[15][30] = 274540;
|
|
tables[15][31] = 274549;
|
|
tables[15][32] = 274498;
|
|
tables[15][33] = 274502;
|
|
tables[15][34] = 274504;
|
|
tables[15][35] = 274506;
|
|
tables[15][36] = 274564;
|
|
tables[15][37] = 274566;
|
|
tables[15][38] = 274568;
|
|
tables[15][39] = 274575;
|
|
tables[15][45] = 274555;
|
|
tables[15][46] = 274552;
|
|
tables[15][49] = 274560;
|
|
tables[15][50] = 274560;
|
|
tables[15][51] = 274572;
|
|
tables[15][52] = 274513;
|
|
tables[15][54] = 274541;
|
|
tables[15][55] = 274571;
|
|
tables[15][56] = 274561;
|
|
tables[15][135] = 274573;
|
|
tables[16] = tables[15];
|
|
tables[16][8] = 274499;
|
|
tables[16][29] = 274531;
|
|
tables[16][32] = 274497;
|
|
tables[16][33] = 274501;
|
|
tables[16][34] = 274503;
|
|
tables[16][35] = 274505;
|
|
tables[16][36] = 274563;
|
|
tables[16][37] = 274565;
|
|
tables[16][38] = 274567;
|
|
tables[16][39] = 274578;
|
|
tables[16][48] = 274444;
|
|
tables[16][49] = 274445;
|
|
tables[16][50] = 274445;
|
|
tables[16][54] = 274433;
|
|
tables[16][55] = 274434;
|
|
tables[16][56] = 274683;
|
|
tables[16][89] = 393265;
|
|
tables[16][90] = 393266;
|
|
tables[16][91] = 393267;
|
|
tables[16][92] = 393268;
|
|
tables[16][93] = 393269;
|
|
tables[16][94] = 393270;
|
|
tables[16][95] = 393271;
|
|
tables[16][96] = 393272;
|
|
tables[16][97] = 393273;
|
|
tables[16][98] = 393264;
|
|
tables[16][99] = 393262;
|
|
tables[17] = tables[1];
|
|
tables[17][30] = 327729;
|
|
tables[17][31] = 327730;
|
|
tables[17][32] = 327731;
|
|
tables[17][33] = 327732;
|
|
tables[17][34] = 327733;
|
|
tables[17][35] = 327734;
|
|
tables[17][36] = 327735;
|
|
tables[17][37] = 327736;
|
|
tables[17][38] = 327737;
|
|
tables[17][39] = 327728;
|
|
tables[17][45] = 327903;
|
|
tables[17][46] = 262324;
|
|
tables[17][47] = 327932;
|
|
tables[17][48] = 327723;
|
|
tables[17][49] = 327715;
|
|
tables[17][50] = 327715;
|
|
tables[17][51] = 327926;
|
|
tables[17][52] = 327908;
|
|
tables[17][53] = 262238;
|
|
tables[17][54] = 327724;
|
|
tables[17][55] = 327726;
|
|
tables[17][136] = 262238;
|
|
tables[17][137] = 262238;
|
|
tables[17][138] = 262238;
|
|
tables[17][146] = 262238;
|
|
tables[17][147] = 262238;
|
|
tables[18] = tables[2];
|
|
tables[18][30] = 327713;
|
|
tables[18][31] = 327714;
|
|
tables[18][32] = 327847;
|
|
tables[18][33] = 327716;
|
|
tables[18][34] = 327717;
|
|
tables[18][35] = 327718;
|
|
tables[18][36] = 327727;
|
|
tables[18][37] = 327720;
|
|
tables[18][38] = 327721;
|
|
tables[18][39] = 327741;
|
|
tables[18][45] = 327743;
|
|
tables[18][47] = 327900;
|
|
tables[18][48] = 327722;
|
|
tables[18][49] = 327719;
|
|
tables[18][50] = 327719;
|
|
tables[18][51] = 327894;
|
|
tables[18][52] = 327876;
|
|
tables[18][54] = 327739;
|
|
tables[18][55] = 327738;
|
|
tables[19][8] = 336044;
|
|
tables[19][16] = 327861;
|
|
tables[19][20] = 327744;
|
|
tables[19][31] = 327858;
|
|
tables[19][32] = 327859;
|
|
tables[19][36] = 327803;
|
|
tables[19][37] = 327771;
|
|
tables[19][38] = 327773;
|
|
tables[19][39] = 327805;
|
|
tables[19][45] = 327772;
|
|
tables[19][48] = 327806;
|
|
tables[19][100] = 262268;
|
|
tables[20] = tables[1];
|
|
tables[20][28] = 327801;
|
|
tables[20][29] = 327802;
|
|
tables[20][46] = 262305;
|
|
tables[20][47] = 262240;
|
|
tables[20][48] = 262187;
|
|
tables[20][49] = 327911;
|
|
tables[20][50] = 327911;
|
|
tables[20][51] = 327921;
|
|
tables[20][52] = 262324;
|
|
tables[20][53] = 262330;
|
|
tables[21] = tables[2];
|
|
tables[21][28] = 327769;
|
|
tables[21][29] = 327770;
|
|
tables[21][30] = 262177;
|
|
tables[21][32] = 262327;
|
|
tables[21][33] = 262180;
|
|
tables[21][46] = 262335;
|
|
tables[21][47] = 262238;
|
|
tables[21][48] = 262186;
|
|
tables[21][49] = 327879;
|
|
tables[21][50] = 327879;
|
|
tables[21][51] = 327889;
|
|
tables[21][52] = 262312;
|
|
tables[21][53] = 262314;
|
|
tables[22] = tables[3];
|
|
tables[22][30] = 262268;
|
|
tables[22][33] = 262270;
|
|
tables[22][34] = 262272;
|
|
tables[22][36] = 0;
|
|
tables[22][37] = 0;
|
|
tables[22][45] = 0;
|
|
tables[22][46] = 0;
|
|
tables[22][49] = 327805;
|
|
tables[22][50] = 327805;
|
|
tables[22][53] = 262236;
|
|
tables[22][100] = 0;
|
|
tables[22][136] = 262270;
|
|
tables[22][137] = 262270;
|
|
tables[22][138] = 262270;
|
|
tables[22][146] = 262270;
|
|
tables[22][147] = 262270;
|
|
tables[23] = tables[17];
|
|
tables[23][4] = 327793;
|
|
tables[23][16] = 327724;
|
|
tables[23][20] = 327777;
|
|
tables[23][26] = 327802;
|
|
tables[23][28] = 327801;
|
|
tables[23][29] = 327799;
|
|
tables[23][30] = 327718;
|
|
tables[23][31] = 327913;
|
|
tables[23][32] = 327714;
|
|
tables[23][33] = 327719;
|
|
tables[23][34] = 327720;
|
|
tables[23][35] = 327725;
|
|
tables[23][36] = 327912;
|
|
tables[23][37] = 327775;
|
|
tables[23][38] = 327911;
|
|
tables[23][39] = 327904;
|
|
tables[23][45] = 327721;
|
|
tables[23][46] = 327741;
|
|
tables[23][47] = 327774;
|
|
tables[23][48] = 327716;
|
|
tables[23][49] = 327722;
|
|
tables[23][50] = 327722;
|
|
tables[23][51] = 327789;
|
|
tables[23][52] = 327929;
|
|
tables[23][53] = 262322;
|
|
tables[23][54] = 327739;
|
|
tables[23][55] = 327738;
|
|
tables[23][56] = 327713;
|
|
tables[24] = tables[21];
|
|
tables[24][4] = 327761;
|
|
tables[24][16] = 327743;
|
|
tables[24][20] = 327745;
|
|
tables[24][26] = 327770;
|
|
tables[24][29] = 327767;
|
|
tables[24][30] = 327729;
|
|
tables[24][31] = 327730;
|
|
tables[24][32] = 327731;
|
|
tables[24][33] = 327732;
|
|
tables[24][34] = 327733;
|
|
tables[24][35] = 327734;
|
|
tables[24][36] = 327735;
|
|
tables[24][37] = 327736;
|
|
tables[24][38] = 327737;
|
|
tables[24][39] = 327728;
|
|
tables[24][45] = 327856;
|
|
tables[24][46] = 327723;
|
|
tables[24][47] = 327848;
|
|
tables[24][48] = 327843;
|
|
tables[24][49] = 327861;
|
|
tables[24][50] = 327861;
|
|
tables[24][51] = 327757;
|
|
tables[24][52] = 327717;
|
|
tables[24][53] = 0;
|
|
tables[24][54] = 327726;
|
|
tables[24][55] = 327727;
|
|
tables[24][56] = 327847;
|
|
tables[24][136] = 262312;
|
|
tables[24][137] = 262312;
|
|
tables[24][138] = 262312;
|
|
tables[24][146] = 262312;
|
|
tables[24][147] = 262312;
|
|
tables[25][8] = 336044;
|
|
tables[25][31] = 262270;
|
|
tables[25][32] = 327715;
|
|
tables[25][33] = 327803;
|
|
tables[25][34] = 327771;
|
|
tables[25][35] = 327804;
|
|
tables[25][36] = 262240;
|
|
tables[25][37] = 327772;
|
|
tables[25][38] = 327774;
|
|
tables[25][39] = 327744;
|
|
tables[25][45] = 327773;
|
|
tables[25][46] = 327805;
|
|
tables[25][48] = 327844;
|
|
tables[25][136] = 262270;
|
|
tables[25][137] = 262270;
|
|
tables[25][138] = 262270;
|
|
tables[25][146] = 262270;
|
|
tables[25][147] = 262270;
|
|
tables[26] = tables[20];
|
|
tables[26][46] = 262380;
|
|
tables[26][47] = 262376;
|
|
tables[26][49] = 262393;
|
|
tables[26][50] = 262393;
|
|
tables[26][51] = 262386;
|
|
tables[26][52] = 262368;
|
|
tables[26][53] = 262236;
|
|
tables[27] = tables[21];
|
|
tables[27][32] = 262307;
|
|
tables[27][46] = 262238;
|
|
tables[27][47] = 262377;
|
|
tables[27][49] = 262311;
|
|
tables[27][50] = 262311;
|
|
tables[27][51] = 262375;
|
|
tables[27][52] = 262320;
|
|
tables[27][53] = 262268;
|
|
tables[28] = tables[6];
|
|
tables[28][8] = 336044;
|
|
tables[28][47] = 262235;
|
|
tables[28][48] = 262237;
|
|
tables[28][51] = 262208;
|
|
tables[28][52] = 262179;
|
|
tables[29][47] = 262267;
|
|
tables[29][48] = 262269;
|
|
tables[30] = tables[20];
|
|
tables[30][45] = 262191;
|
|
tables[30][46] = 262320;
|
|
tables[30][47] = 262312;
|
|
tables[30][48] = 262186;
|
|
tables[30][49] = 262204;
|
|
tables[30][50] = 262204;
|
|
tables[30][51] = 262187;
|
|
tables[30][53] = 262208;
|
|
tables[30][100] = 262237;
|
|
tables[31] = tables[21];
|
|
tables[31][32] = 262179;
|
|
tables[31][36] = 262239;
|
|
tables[31][39] = 262183;
|
|
tables[31][46] = 262270;
|
|
tables[31][48] = 262268;
|
|
tables[31][49] = 262206;
|
|
tables[31][50] = 262206;
|
|
tables[31][51] = 262321;
|
|
tables[31][52] = 262240;
|
|
tables[31][53] = 262311;
|
|
tables[31][56] = 262205;
|
|
tables[31][100] = 262235;
|
|
tables[31][136] = 262270;
|
|
tables[31][137] = 262270;
|
|
tables[31][138] = 262270;
|
|
tables[31][146] = 262270;
|
|
tables[31][147] = 262270;
|
|
tables[32][6] = 327842;
|
|
tables[32][8] = 336044;
|
|
tables[32][16] = 327861;
|
|
tables[32][21] = 327862;
|
|
tables[32][22] = 327903;
|
|
tables[32][27] = 327867;
|
|
tables[32][29] = 327851;
|
|
tables[32][30] = 262329;
|
|
tables[32][31] = 262322;
|
|
tables[32][32] = 262323;
|
|
tables[32][33] = 262332;
|
|
tables[32][34] = 262333;
|
|
tables[32][35] = 262334;
|
|
tables[32][36] = 262307;
|
|
tables[32][37] = 262267;
|
|
tables[32][38] = 262269;
|
|
tables[32][45] = 262236;
|
|
tables[32][46] = 262328;
|
|
tables[32][53] = 262316;
|
|
tables[32][55] = 262327;
|
|
tables[32][100] = 262310;
|
|
tables[32][136] = 262328;
|
|
tables[32][137] = 262328;
|
|
tables[32][138] = 262328;
|
|
tables[32][146] = 262328;
|
|
tables[32][147] = 262328;
|
|
tables[33] = tables[26];
|
|
tables[33][46] = 262315;
|
|
tables[33][47] = 262187;
|
|
tables[33][48] = 262324;
|
|
tables[33][49] = 262270;
|
|
tables[33][50] = 262270;
|
|
tables[33][51] = 327911;
|
|
tables[33][52] = 262330;
|
|
tables[34] = tables[27];
|
|
tables[34][32] = 262179;
|
|
tables[34][46] = 262331;
|
|
tables[34][47] = 262186;
|
|
tables[34][48] = 262240;
|
|
tables[34][49] = 262238;
|
|
tables[34][50] = 262238;
|
|
tables[34][51] = 327879;
|
|
tables[34][52] = 262314;
|
|
tables[35] = tables[6];
|
|
tables[35][8] = 336044;
|
|
tables[35][31] = 262208;
|
|
tables[35][32] = 262307;
|
|
tables[35][33] = 262311;
|
|
tables[35][36] = 262267;
|
|
tables[35][37] = 262235;
|
|
tables[35][38] = 262237;
|
|
tables[35][39] = 262269;
|
|
tables[35][47] = 262312;
|
|
tables[35][48] = 262237;
|
|
tables[35][136] = 262312;
|
|
tables[35][137] = 262312;
|
|
tables[35][138] = 262312;
|
|
tables[35][146] = 262312;
|
|
tables[35][147] = 262312;
|
|
tables[36] = tables[4];
|
|
tables[36][4] = 328772;
|
|
tables[36][5] = 328760;
|
|
tables[36][6] = 328769;
|
|
tables[36][7] = 328754;
|
|
tables[36][8] = 328771;
|
|
tables[36][9] = 328752;
|
|
tables[36][10] = 328767;
|
|
tables[36][11] = 328768;
|
|
tables[36][12] = 328776;
|
|
tables[36][13] = 328766;
|
|
tables[36][14] = 328763;
|
|
tables[36][15] = 328756;
|
|
tables[36][16] = 328780;
|
|
tables[36][17] = 328770;
|
|
tables[36][18] = 328777;
|
|
tables[36][19] = 328759;
|
|
tables[36][20] = 328761;
|
|
tables[36][21] = 328762;
|
|
tables[36][22] = 328779;
|
|
tables[36][23] = 328757;
|
|
tables[36][24] = 328755;
|
|
tables[36][25] = 328764;
|
|
tables[36][26] = 328774;
|
|
tables[36][27] = 328775;
|
|
tables[36][28] = 328765;
|
|
tables[36][29] = 328783;
|
|
tables[36][47] = 328773;
|
|
tables[36][48] = 328778;
|
|
tables[36][51] = 328758;
|
|
tables[36][52] = 328781;
|
|
tables[36][53] = 328785;
|
|
tables[36][54] = 328753;
|
|
tables[36][55] = 328782;
|
|
tables[36][56] = 262190;
|
|
tables[37] = tables[5];
|
|
tables[37][4] = 328740;
|
|
tables[37][5] = 328728;
|
|
tables[37][6] = 328737;
|
|
tables[37][7] = 328722;
|
|
tables[37][8] = 328739;
|
|
tables[37][9] = 328720;
|
|
tables[37][10] = 328735;
|
|
tables[37][11] = 328736;
|
|
tables[37][12] = 328744;
|
|
tables[37][13] = 328734;
|
|
tables[37][14] = 328731;
|
|
tables[37][15] = 328724;
|
|
tables[37][16] = 328748;
|
|
tables[37][17] = 328738;
|
|
tables[37][18] = 328745;
|
|
tables[37][19] = 328727;
|
|
tables[37][20] = 328729;
|
|
tables[37][21] = 328730;
|
|
tables[37][22] = 328747;
|
|
tables[37][23] = 328725;
|
|
tables[37][24] = 328723;
|
|
tables[37][25] = 328732;
|
|
tables[37][26] = 328742;
|
|
tables[37][27] = 328743;
|
|
tables[37][28] = 328733;
|
|
tables[37][29] = 328751;
|
|
tables[37][31] = 262178;
|
|
tables[37][32] = 270614;
|
|
tables[37][33] = 262203;
|
|
tables[37][35] = 262202;
|
|
tables[37][36] = 262207;
|
|
tables[37][47] = 328741;
|
|
tables[37][48] = 328746;
|
|
tables[37][49] = 262191;
|
|
tables[37][50] = 262191;
|
|
tables[37][51] = 328726;
|
|
tables[37][52] = 328749;
|
|
tables[37][53] = 328705;
|
|
tables[37][54] = 328721;
|
|
tables[37][55] = 328750;
|
|
tables[37][56] = 262188;
|
|
tables[37][100] = 262191;
|
|
tables[38] = tables[4];
|
|
tables[38][49] = 262179;
|
|
tables[38][50] = 262179;
|
|
tables[39] = tables[5];
|
|
tables[39][31] = 262178;
|
|
tables[39][32] = 262307;
|
|
tables[39][49] = 262270;
|
|
tables[39][50] = 262270;
|
|
tables[39][52] = 262208;
|
|
tables[39][53] = 262316;
|
|
tables[40][4] = 327905;
|
|
tables[40][8] = 327913;
|
|
tables[40][12] = 327917;
|
|
tables[40][18] = 327923;
|
|
tables[40][24] = 327930;
|
|
tables[40][33] = 270508;
|
|
tables[40][53] = 262310;
|
|
tables[41][4] = 327873;
|
|
tables[41][8] = 327881;
|
|
tables[41][12] = 327885;
|
|
tables[41][18] = 327891;
|
|
tables[41][24] = 327898;
|
|
tables[42] = tables[4];
|
|
tables[42][4] = 332038;
|
|
tables[42][5] = 332146;
|
|
tables[42][6] = 332046;
|
|
tables[42][7] = 332043;
|
|
tables[42][8] = 332035;
|
|
tables[42][9] = 332037;
|
|
tables[42][10] = 332050;
|
|
tables[42][11] = 332137;
|
|
tables[42][12] = 332131;
|
|
tables[42][13] = 332133;
|
|
tables[42][14] = 332129;
|
|
tables[42][15] = 332149;
|
|
tables[42][16] = 332147;
|
|
tables[42][17] = 332142;
|
|
tables[42][18] = 332130;
|
|
tables[42][19] = 332134;
|
|
tables[42][20] = 332039;
|
|
tables[42][21] = 332032;
|
|
tables[42][22] = 332034;
|
|
tables[42][23] = 332041;
|
|
tables[42][24] = 332135;
|
|
tables[42][25] = 332049;
|
|
tables[42][26] = 332044;
|
|
tables[42][27] = 332048;
|
|
tables[42][28] = 332141;
|
|
tables[42][29] = 332047;
|
|
tables[42][50] = 262237;
|
|
tables[42][52] = 270360;
|
|
tables[43] = tables[5];
|
|
tables[43][4] = 332038;
|
|
tables[43][5] = 332146;
|
|
tables[43][6] = 332046;
|
|
tables[43][7] = 332043;
|
|
tables[43][8] = 332036;
|
|
tables[43][9] = 332037;
|
|
tables[43][10] = 332050;
|
|
tables[43][11] = 332137;
|
|
tables[43][12] = 332131;
|
|
tables[43][13] = 332133;
|
|
tables[43][14] = 332129;
|
|
tables[43][15] = 332149;
|
|
tables[43][16] = 332147;
|
|
tables[43][17] = 332142;
|
|
tables[43][18] = 332132;
|
|
tables[43][19] = 332136;
|
|
tables[43][20] = 332040;
|
|
tables[43][21] = 332033;
|
|
tables[43][22] = 332034;
|
|
tables[43][23] = 332042;
|
|
tables[43][24] = 332135;
|
|
tables[43][25] = 332049;
|
|
tables[43][26] = 332045;
|
|
tables[43][27] = 332048;
|
|
tables[43][28] = 332141;
|
|
tables[43][29] = 332047;
|
|
tables[43][50] = 262269;
|
|
tables[43][52] = 270364;
|
|
tables[44] = tables[20];
|
|
tables[44][45] = 262187;
|
|
tables[44][46] = 262236;
|
|
tables[44][47] = 327909;
|
|
tables[44][48] = 262312;
|
|
tables[44][49] = 262183;
|
|
tables[44][50] = 262183;
|
|
tables[44][51] = 327928;
|
|
tables[44][52] = 327910;
|
|
tables[44][53] = 262268;
|
|
tables[45] = tables[34];
|
|
tables[45][33] = 262308;
|
|
tables[45][46] = 262240;
|
|
tables[45][47] = 327877;
|
|
tables[45][48] = 262238;
|
|
tables[45][49] = 262186;
|
|
tables[45][50] = 262186;
|
|
tables[45][51] = 327896;
|
|
tables[45][52] = 327878;
|
|
tables[45][53] = 262311;
|
|
tables[45][136] = 262240;
|
|
tables[45][137] = 262240;
|
|
tables[45][138] = 262240;
|
|
tables[45][146] = 262240;
|
|
tables[45][147] = 262240;
|
|
tables[46] = tables[35];
|
|
tables[46][16] = 327861;
|
|
tables[46][33] = 262180;
|
|
tables[46][46] = 262324;
|
|
tables[46][47] = 0;
|
|
tables[46][48] = 262270;
|
|
tables[46][136] = 262324;
|
|
tables[46][137] = 262324;
|
|
tables[46][138] = 262324;
|
|
tables[46][146] = 262324;
|
|
tables[46][147] = 262324;
|
|
tables[47] = tables[44];
|
|
tables[47][46] = 262324;
|
|
tables[47][51] = 327926;
|
|
tables[47][52] = 327908;
|
|
tables[47][53] = 262311;
|
|
tables[47][136] = 262312;
|
|
tables[47][137] = 262312;
|
|
tables[47][138] = 262312;
|
|
tables[47][146] = 262312;
|
|
tables[47][147] = 262312;
|
|
tables[48] = tables[45];
|
|
tables[48][51] = 327894;
|
|
tables[48][52] = 327876;
|
|
tables[48][53] = 262333;
|
|
tables[48][136] = 262238;
|
|
tables[48][137] = 262238;
|
|
tables[48][138] = 262238;
|
|
tables[48][146] = 262238;
|
|
tables[48][147] = 262238;
|
|
tables[49] = tables[46];
|
|
tables[49][45] = 262236;
|
|
tables[49][46] = 0;
|
|
tables[49][100] = 262268;
|
|
tables[49][136] = 262270;
|
|
tables[49][137] = 262270;
|
|
tables[49][138] = 262270;
|
|
tables[49][146] = 262270;
|
|
tables[49][147] = 262270;
|
|
tables[50] = tables[47];
|
|
tables[50][51] = 327910;
|
|
tables[50][52] = 327928;
|
|
tables[50][53] = 262333;
|
|
tables[50][136] = 262324;
|
|
tables[50][137] = 262324;
|
|
tables[50][138] = 262324;
|
|
tables[50][146] = 262324;
|
|
tables[50][147] = 262324;
|
|
tables[51] = tables[45];
|
|
tables[51][51] = 327878;
|
|
tables[51][52] = 327896;
|
|
tables[52] = tables[46];
|
|
tables[52][34] = 262272;
|
|
tables[52][46] = 262268;
|
|
tables[52][100] = 262236;
|
|
tables[52][136] = 0;
|
|
tables[52][137] = 0;
|
|
tables[52][138] = 0;
|
|
tables[52][146] = 0;
|
|
tables[52][147] = 0;
|
|
tables[53] = tables[38];
|
|
tables[53][4] = 340231;
|
|
tables[53][5] = 340246;
|
|
tables[53][6] = 340239;
|
|
tables[53][7] = 340238;
|
|
tables[53][8] = 340237;
|
|
tables[53][9] = 340241;
|
|
tables[53][10] = 340245;
|
|
tables[53][11] = 340248;
|
|
tables[53][12] = 340251;
|
|
tables[53][13] = 340264;
|
|
tables[53][14] = 340252;
|
|
tables[53][15] = 340256;
|
|
tables[53][16] = 340265;
|
|
tables[53][17] = 340249;
|
|
tables[53][18] = 340255;
|
|
tables[53][19] = 340259;
|
|
tables[53][20] = 340230;
|
|
tables[53][21] = 340240;
|
|
tables[53][22] = 340235;
|
|
tables[53][23] = 340244;
|
|
tables[53][24] = 340263;
|
|
tables[53][25] = 340242;
|
|
tables[53][26] = 340234;
|
|
tables[53][27] = 340236;
|
|
tables[53][28] = 340247;
|
|
tables[53][29] = 340232;
|
|
tables[53][30] = 274693;
|
|
tables[53][31] = 274697;
|
|
tables[53][32] = 262855;
|
|
tables[53][33] = 262859;
|
|
tables[53][34] = 274707;
|
|
tables[53][35] = 262858;
|
|
tables[53][36] = 262873;
|
|
tables[53][37] = 274714;
|
|
tables[53][38] = 274718;
|
|
tables[53][39] = 274722;
|
|
tables[53][45] = 274726;
|
|
tables[53][51] = 274724;
|
|
tables[53][52] = 270360;
|
|
tables[53][54] = 274717;
|
|
tables[53][55] = 274721;
|
|
tables[53][56] = 274725;
|
|
tables[54] = tables[43];
|
|
tables[54][4] = 327777;
|
|
tables[54][5] = 327778;
|
|
tables[54][6] = 327779;
|
|
tables[54][7] = 327780;
|
|
tables[54][8] = 327781;
|
|
tables[54][9] = 327782;
|
|
tables[54][10] = 327783;
|
|
tables[54][11] = 327784;
|
|
tables[54][12] = 327785;
|
|
tables[54][13] = 327786;
|
|
tables[54][14] = 327787;
|
|
tables[54][15] = 327788;
|
|
tables[54][16] = 327789;
|
|
tables[54][17] = 327790;
|
|
tables[54][18] = 327791;
|
|
tables[54][19] = 327792;
|
|
tables[54][20] = 327793;
|
|
tables[54][21] = 327794;
|
|
tables[54][22] = 327795;
|
|
tables[54][23] = 327796;
|
|
tables[54][24] = 327797;
|
|
tables[54][25] = 327798;
|
|
tables[54][26] = 327799;
|
|
tables[54][27] = 327800;
|
|
tables[54][28] = 327801;
|
|
tables[54][29] = 327802;
|
|
tables[54][50] = 262179;
|
|
tables[54][100] = 262236;
|
|
tables[55] = tables[5];
|
|
tables[55][52] = 270364;
|
|
tables[56] = tables[7];
|
|
tables[56][46] = 327453;
|
|
tables[56][47] = 327483;
|
|
tables[56][48] = 327485;
|
|
tables[56][49] = 327484;
|
|
tables[56][50] = 327484;
|
|
tables[56][52] = 270360;
|
|
tables[56][53] = 270360;
|
|
tables[56][100] = 327653;
|
|
tables[56][135] = 0;
|
|
tables[57] = tables[8];
|
|
tables[57][31] = 327456;
|
|
tables[57][35] = 327486;
|
|
tables[57][36] = 327430;
|
|
tables[57][37] = 327434;
|
|
tables[57][38] = 327432;
|
|
tables[57][39] = 327433;
|
|
tables[57][45] = 327487;
|
|
tables[57][46] = 327435;
|
|
tables[57][47] = 327515;
|
|
tables[57][48] = 327517;
|
|
tables[57][49] = 327516;
|
|
tables[57][50] = 327516;
|
|
tables[57][51] = 327450;
|
|
tables[57][52] = 270364;
|
|
tables[57][53] = 327518;
|
|
tables[57][100] = 327516;
|
|
tables[57][135] = 0;
|
|
tables[57][137] = 0;
|
|
tables[58] = tables[42];
|
|
tables[58][4] = 353765;
|
|
tables[58][5] = 354056;
|
|
tables[58][6] = 365009;
|
|
tables[58][7] = 354088;
|
|
tables[58][8] = 355380;
|
|
tables[58][9] = 356459;
|
|
tables[58][10] = 349983;
|
|
tables[58][11] = 359161;
|
|
tables[58][12] = 352776;
|
|
tables[58][13] = 348993;
|
|
tables[58][14] = 350503;
|
|
tables[58][15] = 347693;
|
|
tables[58][16] = 347648;
|
|
tables[58][17] = 352019;
|
|
tables[58][18] = 347834;
|
|
tables[58][19] = 352195;
|
|
tables[58][20] = 352843;
|
|
tables[58][21] = 349155;
|
|
tables[58][22] = 351288;
|
|
tables[58][23] = 351999;
|
|
tables[58][24] = 351345;
|
|
tables[58][25] = 350579;
|
|
tables[58][26] = 357680;
|
|
tables[58][27] = 366307;
|
|
tables[58][28] = 349020;
|
|
tables[58][29] = 365005;
|
|
tables[58][50] = 262179;
|
|
tables[59] = tables[1];
|
|
tables[59][47] = 262376;
|
|
tables[59][51] = 262377;
|
|
tables[59][52] = 262368;
|
|
tables[60] = tables[2];
|
|
tables[60][47] = 262396;
|
|
tables[60][51] = 262390;
|
|
tables[60][52] = 262372;
|
|
tables[61] = tables[4];
|
|
tables[61][47] = 262238;
|
|
tables[61][48] = 262328;
|
|
tables[61][49] = 262204;
|
|
tables[61][50] = 262204;
|
|
tables[61][52] = 262240;
|
|
tables[61][53] = 262179;
|
|
tables[61][56] = 327913;
|
|
tables[61][100] = 262315;
|
|
tables[61][136] = 262240;
|
|
tables[61][137] = 262240;
|
|
tables[61][138] = 262240;
|
|
tables[61][146] = 262240;
|
|
tables[61][147] = 262240;
|
|
tables[62] = tables[39];
|
|
tables[62][32] = 262191;
|
|
tables[62][35] = 262207;
|
|
tables[62][47] = 262238;
|
|
tables[62][48] = 262312;
|
|
tables[62][49] = 262206;
|
|
tables[62][50] = 262206;
|
|
tables[62][52] = 262240;
|
|
tables[62][53] = 262268;
|
|
tables[62][54] = 262183;
|
|
tables[62][55] = 262190;
|
|
tables[62][56] = 327881;
|
|
tables[62][100] = 262331;
|
|
tables[62][136] = 262240;
|
|
tables[62][137] = 262240;
|
|
tables[62][138] = 262240;
|
|
tables[62][146] = 262240;
|
|
tables[62][147] = 262240;
|
|
tables[63] = tables[52];
|
|
tables[63][8] = 0;
|
|
tables[63][18] = 327847;
|
|
tables[63][19] = 327862;
|
|
tables[63][30] = 262321;
|
|
tables[63][33] = 262306;
|
|
tables[63][34] = 262308;
|
|
tables[63][35] = 262316;
|
|
tables[63][36] = 262310;
|
|
tables[63][37] = 262322;
|
|
tables[63][38] = 262323;
|
|
tables[63][39] = 262332;
|
|
tables[63][45] = 262333;
|
|
tables[63][46] = 262334;
|
|
tables[63][47] = 262235;
|
|
tables[63][48] = 262237;
|
|
tables[63][49] = 262269;
|
|
tables[63][50] = 262269;
|
|
tables[63][51] = 262270;
|
|
tables[63][52] = 262267;
|
|
tables[63][53] = 262236;
|
|
tables[63][54] = 262319;
|
|
tables[63][55] = 262317;
|
|
tables[63][56] = 262324;
|
|
tables[63][100] = 262320;
|
|
tables[64] = tables[23];
|
|
tables[64][35] = 327847;
|
|
tables[64][37] = 327713;
|
|
tables[64][46] = 327725;
|
|
tables[64][49] = 327861;
|
|
tables[64][50] = 327861;
|
|
tables[64][56] = 327741;
|
|
tables[65] = tables[24];
|
|
tables[65][46] = 327775;
|
|
tables[65][48] = 327722;
|
|
tables[65][49] = 327843;
|
|
tables[65][50] = 327843;
|
|
tables[65][53] = 262323;
|
|
tables[65][56] = 327723;
|
|
tables[66][8] = 336044;
|
|
tables[66][30] = 327804;
|
|
tables[66][31] = 327744;
|
|
tables[66][32] = 327715;
|
|
tables[66][33] = 327803;
|
|
tables[66][34] = 327771;
|
|
tables[66][35] = 327774;
|
|
tables[66][38] = 327803;
|
|
tables[66][39] = 327805;
|
|
tables[66][47] = 327771;
|
|
tables[66][48] = 327773;
|
|
tables[66][49] = 262240;
|
|
tables[66][50] = 262240;
|
|
tables[66][52] = 262324;
|
|
tables[66][56] = 262270;
|
|
tables[66][100] = 262236;
|
|
tables[67][49] = 262240;
|
|
tables[67][50] = 262240;
|
|
tables[67][52] = 262324;
|
|
tables[67][56] = 262270;
|
|
tables[67][136] = 262240;
|
|
tables[67][137] = 262240;
|
|
tables[67][138] = 262240;
|
|
tables[67][146] = 262240;
|
|
tables[67][147] = 262240;
|
|
tables[68] = tables[4];
|
|
tables[68][49] = 262179;
|
|
tables[68][100] = 0;
|
|
tables[69] = tables[5];
|
|
tables[69][49] = 262270;
|
|
tables[69][100] = 0;
|
|
tables[70][4] = 327941;
|
|
tables[70][6] = 327943;
|
|
tables[70][8] = 327961;
|
|
tables[70][15] = 328002;
|
|
tables[70][17] = 328004;
|
|
tables[70][18] = 327923;
|
|
tables[70][22] = 328027;
|
|
tables[70][24] = 270508;
|
|
tables[70][27] = 328058;
|
|
tables[70][29] = 328060;
|
|
tables[71][4] = 327940;
|
|
tables[71][6] = 327942;
|
|
tables[71][8] = 327960;
|
|
tables[71][15] = 328001;
|
|
tables[71][17] = 328003;
|
|
tables[71][18] = 327891;
|
|
tables[71][22] = 328026;
|
|
tables[71][27] = 328057;
|
|
tables[71][29] = 328059;
|
|
tables[72] = tables[4];
|
|
tables[72][47] = 262324;
|
|
tables[72][48] = 262235;
|
|
tables[72][49] = 0;
|
|
tables[72][50] = 262237;
|
|
tables[72][51] = 327911;
|
|
tables[72][52] = 262270;
|
|
tables[72][53] = 262183;
|
|
tables[72][56] = 262203;
|
|
tables[72][135] = 262191;
|
|
tables[73] = tables[5];
|
|
tables[73][35] = 262312;
|
|
tables[73][47] = 262240;
|
|
tables[73][48] = 262267;
|
|
tables[73][49] = 0;
|
|
tables[73][50] = 262269;
|
|
tables[73][51] = 327879;
|
|
tables[73][52] = 262238;
|
|
tables[73][53] = 262178;
|
|
tables[73][56] = 262202;
|
|
tables[73][135] = 262207;
|
|
tables[74][8] = 262320;
|
|
tables[74][20] = 262191;
|
|
tables[74][26] = 262207;
|
|
tables[74][30] = 262329;
|
|
tables[74][31] = 262322;
|
|
tables[74][32] = 262323;
|
|
tables[74][33] = 262307;
|
|
tables[74][34] = 262306;
|
|
tables[74][35] = 262316;
|
|
tables[74][46] = 262311;
|
|
tables[74][48] = 262314;
|
|
tables[74][50] = 262330;
|
|
tables[74][135] = 262320;
|
|
tables[75] = tables[20];
|
|
tables[75][12] = 327985;
|
|
tables[75][45] = 262186;
|
|
tables[75][46] = 262189;
|
|
tables[75][47] = 327967;
|
|
tables[75][48] = 327932;
|
|
tables[75][49] = 0;
|
|
tables[75][50] = 262188;
|
|
tables[75][51] = 328031;
|
|
tables[75][52] = 327785;
|
|
tables[75][53] = 262178;
|
|
tables[75][54] = 327926;
|
|
tables[75][55] = 327911;
|
|
tables[75][56] = 262190;
|
|
tables[76] = tables[21];
|
|
tables[76][31] = 262183;
|
|
tables[76][32] = 262238;
|
|
tables[76][33] = 262187;
|
|
tables[76][46] = 262239;
|
|
tables[76][47] = 327966;
|
|
tables[76][48] = 262364;
|
|
tables[76][49] = 0;
|
|
tables[76][50] = 262203;
|
|
tables[76][51] = 328030;
|
|
tables[76][52] = 327984;
|
|
tables[76][53] = 262377;
|
|
tables[76][54] = 327894;
|
|
tables[76][55] = 327879;
|
|
tables[76][56] = 262202;
|
|
tables[77] = tables[52];
|
|
tables[77][4] = 327910;
|
|
tables[77][8] = 270508;
|
|
tables[77][12] = 327785;
|
|
tables[77][16] = 0;
|
|
tables[77][20] = 262208;
|
|
tables[77][22] = 262367;
|
|
tables[77][30] = 262206;
|
|
tables[77][31] = 262307;
|
|
tables[77][32] = 262179;
|
|
tables[77][34] = 262333;
|
|
tables[77][45] = 262236;
|
|
tables[77][47] = 262312;
|
|
tables[77][50] = 262240;
|
|
tables[77][51] = 262324;
|
|
tables[77][53] = 262204;
|
|
tables[77][100] = 262268;
|
|
tables[78][4] = 327878;
|
|
tables[78][12] = 327984;
|
|
tables[79] = tables[20];
|
|
tables[79][41] = 262268;
|
|
tables[79][46] = 262335;
|
|
tables[79][47] = 262324;
|
|
tables[79][50] = 327805;
|
|
tables[79][52] = 262267;
|
|
tables[79][53] = 262268;
|
|
tables[80] = tables[21];
|
|
tables[80][32] = 262179;
|
|
tables[80][46] = 262305;
|
|
tables[80][47] = 262312;
|
|
tables[80][50] = 327773;
|
|
tables[80][52] = 262235;
|
|
tables[80][53] = 262320;
|
|
tables[81][20] = 262208;
|
|
tables[81][45] = 262236;
|
|
tables[81][48] = 262270;
|
|
tables[81][50] = 262240;
|
|
tables[81][52] = 262238;
|
|
tables[81][53] = 262316;
|
|
tables[82] = tables[4];
|
|
tables[82][4] = 263732;
|
|
tables[82][5] = 263748;
|
|
tables[82][6] = 263716;
|
|
tables[82][7] = 263754;
|
|
tables[82][8] = 263723;
|
|
tables[82][9] = 263720;
|
|
tables[82][10] = 263748;
|
|
tables[82][11] = 263719;
|
|
tables[82][12] = 263751;
|
|
tables[82][13] = 263722;
|
|
tables[82][14] = 263750;
|
|
tables[82][15] = 263749;
|
|
tables[82][16] = 263721;
|
|
tables[82][17] = 263753;
|
|
tables[82][18] = 263726;
|
|
tables[82][19] = 263725;
|
|
tables[82][20] = 263734;
|
|
tables[82][21] = 263746;
|
|
tables[82][22] = 263731;
|
|
tables[82][23] = 263745;
|
|
tables[82][24] = 263737;
|
|
tables[82][25] = 263729;
|
|
tables[82][26] = 263733;
|
|
tables[82][27] = 263713;
|
|
tables[82][28] = 263738;
|
|
tables[82][29] = 263718;
|
|
tables[82][47] = 263724;
|
|
tables[82][48] = 263727;
|
|
tables[82][51] = 263747;
|
|
tables[82][52] = 263735;
|
|
tables[82][53] = 263728;
|
|
tables[82][54] = 263752;
|
|
tables[82][55] = 263730;
|
|
tables[82][56] = 263736;
|
|
tables[83] = tables[5];
|
|
tables[83][4] = 263760;
|
|
tables[83][5] = 263748;
|
|
tables[83][6] = 262269;
|
|
tables[83][7] = 262237;
|
|
tables[83][8] = 263759;
|
|
tables[83][9] = 262235;
|
|
tables[83][10] = 263748;
|
|
tables[83][11] = 263715;
|
|
tables[83][12] = 262391;
|
|
tables[83][13] = 263744;
|
|
tables[83][14] = 263692;
|
|
tables[83][15] = 262191;
|
|
tables[83][16] = 270361;
|
|
tables[83][17] = 263714;
|
|
tables[83][18] = 262359;
|
|
tables[83][19] = 263707;
|
|
tables[83][20] = 263758;
|
|
tables[83][21] = 263756;
|
|
tables[83][22] = 263757;
|
|
tables[83][23] = 263748;
|
|
tables[83][24] = 270360;
|
|
tables[83][25] = 262267;
|
|
tables[83][26] = 263755;
|
|
tables[83][27] = 263762;
|
|
tables[83][28] = 263717;
|
|
tables[83][29] = 262270;
|
|
tables[83][38] = 262185;
|
|
tables[83][39] = 262184;
|
|
tables[83][47] = 262204;
|
|
tables[83][48] = 262206;
|
|
tables[83][53] = 263761;
|
|
tables[83][54] = 262188;
|
|
tables[83][55] = 262190;
|
|
tables[83][56] = 263711;
|
|
tables[84] = tables[1];
|
|
tables[84][4] = 331295;
|
|
tables[84][5] = 331316;
|
|
tables[84][6] = 331329;
|
|
tables[84][7] = 331265;
|
|
tables[84][8] = 331315;
|
|
tables[84][9] = 331284;
|
|
tables[84][10] = 331328;
|
|
tables[84][11] = 331337;
|
|
tables[84][12] = 331299;
|
|
tables[84][13] = 331336;
|
|
tables[84][14] = 331314;
|
|
tables[84][15] = 331306;
|
|
tables[84][16] = 331287;
|
|
tables[84][17] = 331319;
|
|
tables[84][18] = 331289;
|
|
tables[84][19] = 331298;
|
|
tables[84][20] = 331334;
|
|
tables[84][21] = 331294;
|
|
tables[84][22] = 331307;
|
|
tables[84][23] = 331312;
|
|
tables[84][24] = 331317;
|
|
tables[84][25] = 331309;
|
|
tables[84][26] = 331332;
|
|
tables[84][27] = 331291;
|
|
tables[84][28] = 331313;
|
|
tables[84][29] = 331292;
|
|
tables[84][30] = 331333;
|
|
tables[84][31] = 327727;
|
|
tables[84][32] = 327725;
|
|
tables[84][33] = 331296;
|
|
tables[84][34] = 331286;
|
|
tables[84][35] = 331320;
|
|
tables[84][36] = 331318;
|
|
tables[84][37] = 331268;
|
|
tables[84][38] = 331285;
|
|
tables[84][39] = 331272;
|
|
tables[84][45] = 331266;
|
|
tables[84][46] = 331274;
|
|
tables[84][47] = 331290;
|
|
tables[84][48] = 331301;
|
|
tables[84][49] = 331267;
|
|
tables[84][50] = 331267;
|
|
tables[84][51] = 331303;
|
|
tables[84][52] = 331271;
|
|
tables[84][53] = 327775;
|
|
tables[84][54] = 331297;
|
|
tables[84][55] = 331331;
|
|
tables[84][56] = 331293;
|
|
tables[84][100] = 331267;
|
|
tables[84][103] = 0;
|
|
tables[84][133] = 0;
|
|
tables[84][134] = 0;
|
|
tables[84][140] = 0;
|
|
tables[85] = tables[2];
|
|
tables[85][4] = 331300;
|
|
tables[85][5] = 331322;
|
|
tables[85][6] = 331273;
|
|
tables[85][7] = 331279;
|
|
tables[85][8] = 331278;
|
|
tables[85][9] = 331330;
|
|
tables[85][10] = 331276;
|
|
tables[85][11] = 331335;
|
|
tables[85][12] = 331283;
|
|
tables[85][13] = 331339;
|
|
tables[85][14] = 331305;
|
|
tables[85][15] = 331304;
|
|
tables[85][16] = 327743;
|
|
tables[85][17] = 331340;
|
|
tables[85][18] = 331311;
|
|
tables[85][19] = 331277;
|
|
tables[85][20] = 331344;
|
|
tables[85][21] = 331281;
|
|
tables[85][22] = 331270;
|
|
tables[85][23] = 331288;
|
|
tables[85][24] = 331338;
|
|
tables[85][25] = 331310;
|
|
tables[85][26] = 327714;
|
|
tables[85][27] = 327721;
|
|
tables[85][28] = 331341;
|
|
tables[85][29] = 327720;
|
|
tables[85][30] = 327723;
|
|
tables[85][31] = 331345;
|
|
tables[85][32] = 331346;
|
|
tables[85][33] = 331347;
|
|
tables[85][34] = 331348;
|
|
tables[85][35] = 331321;
|
|
tables[85][36] = 331327;
|
|
tables[85][37] = 331349;
|
|
tables[85][38] = 331350;
|
|
tables[85][39] = 331351;
|
|
tables[85][45] = 331352;
|
|
tables[85][46] = 331353;
|
|
tables[85][47] = 331280;
|
|
tables[85][48] = 327724;
|
|
tables[85][49] = 331269;
|
|
tables[85][50] = 331269;
|
|
tables[85][51] = 331275;
|
|
tables[85][52] = 327726;
|
|
tables[85][53] = 327717;
|
|
tables[85][54] = 331282;
|
|
tables[85][55] = 331308;
|
|
tables[85][56] = 331302;
|
|
tables[85][100] = 331269;
|
|
tables[85][103] = 0;
|
|
tables[85][133] = 0;
|
|
tables[85][134] = 0;
|
|
tables[85][140] = 0;
|
|
tables[86] = tables[1];
|
|
tables[86][30] = 262187;
|
|
tables[86][31] = 327963;
|
|
tables[86][32] = 328033;
|
|
tables[86][33] = 327949;
|
|
tables[86][34] = 328025;
|
|
tables[86][35] = 328062;
|
|
tables[86][36] = 327933;
|
|
tables[86][37] = 327905;
|
|
tables[86][38] = 327917;
|
|
tables[86][39] = 327913;
|
|
tables[86][45] = 262205;
|
|
tables[86][46] = 262324;
|
|
tables[86][47] = 327930;
|
|
tables[86][48] = 262185;
|
|
tables[86][49] = 262312;
|
|
tables[86][50] = 262312;
|
|
tables[86][51] = 328047;
|
|
tables[86][52] = 262311;
|
|
tables[86][53] = 262203;
|
|
tables[86][100] = 262236;
|
|
tables[86][103] = 0;
|
|
tables[86][133] = 0;
|
|
tables[86][134] = 0;
|
|
tables[86][140] = 0;
|
|
tables[87] = tables[2];
|
|
tables[87][30] = 262193;
|
|
tables[87][31] = 262194;
|
|
tables[87][32] = 262195;
|
|
tables[87][33] = 262196;
|
|
tables[87][34] = 262197;
|
|
tables[87][35] = 262198;
|
|
tables[87][36] = 262199;
|
|
tables[87][37] = 262200;
|
|
tables[87][38] = 262201;
|
|
tables[87][39] = 262192;
|
|
tables[87][45] = 262181;
|
|
tables[87][46] = 262855;
|
|
tables[87][47] = 262191;
|
|
tables[87][48] = 262184;
|
|
tables[87][49] = 262183;
|
|
tables[87][50] = 262183;
|
|
tables[87][51] = 262178;
|
|
tables[87][52] = 262177;
|
|
tables[87][54] = 262207;
|
|
tables[87][100] = 262268;
|
|
tables[87][103] = 0;
|
|
tables[87][133] = 0;
|
|
tables[87][134] = 0;
|
|
tables[87][140] = 0;
|
|
tables[88][5] = 262267;
|
|
tables[88][6] = 262182;
|
|
tables[88][7] = 262416;
|
|
tables[88][8] = 270508;
|
|
tables[88][9] = 262235;
|
|
tables[88][10] = 262237;
|
|
tables[88][14] = 262466;
|
|
tables[88][15] = 262465;
|
|
tables[88][17] = 262269;
|
|
tables[88][20] = 262236;
|
|
tables[88][22] = 262417;
|
|
tables[88][25] = 262208;
|
|
tables[88][26] = 262268;
|
|
tables[88][27] = 262179;
|
|
tables[88][30] = 262270;
|
|
tables[88][31] = 262855;
|
|
tables[88][32] = 262238;
|
|
tables[88][33] = 262872;
|
|
tables[88][34] = 262320;
|
|
tables[88][35] = 262875;
|
|
tables[88][36] = 262240;
|
|
tables[88][37] = 262873;
|
|
tables[88][38] = 262324;
|
|
tables[88][39] = 262877;
|
|
tables[88][45] = 262312;
|
|
tables[88][46] = 262328;
|
|
tables[88][47] = 262391;
|
|
tables[88][48] = 262359;
|
|
tables[88][49] = 262308;
|
|
tables[88][50] = 262308;
|
|
tables[88][51] = 262180;
|
|
tables[88][52] = 262367;
|
|
tables[88][54] = 262204;
|
|
tables[88][55] = 262206;
|
|
tables[88][56] = 262186;
|
|
tables[89] = tables[4];
|
|
tables[89][4] = 328625;
|
|
tables[89][5] = 328626;
|
|
tables[89][6] = 328648;
|
|
tables[89][7] = 328628;
|
|
tables[89][8] = 328629;
|
|
tables[89][9] = 328646;
|
|
tables[89][10] = 328627;
|
|
tables[89][11] = 328631;
|
|
tables[89][12] = 328633;
|
|
tables[89][13] = 328638;
|
|
tables[89][14] = 328634;
|
|
tables[89][15] = 328635;
|
|
tables[89][16] = 328636;
|
|
tables[89][17] = 328637;
|
|
tables[89][18] = 328639;
|
|
tables[89][19] = 328640;
|
|
tables[89][20] = 262203;
|
|
tables[89][21] = 328641;
|
|
tables[89][22] = 328643;
|
|
tables[89][23] = 328644;
|
|
tables[89][24] = 328632;
|
|
tables[89][25] = 328649;
|
|
tables[89][26] = 263106;
|
|
tables[89][27] = 328647;
|
|
tables[89][28] = 328645;
|
|
tables[89][29] = 328630;
|
|
tables[89][51] = 263044;
|
|
tables[89][100] = 262204;
|
|
tables[89][103] = 0;
|
|
tables[89][133] = 0;
|
|
tables[89][134] = 0;
|
|
tables[89][140] = 0;
|
|
tables[90] = tables[5];
|
|
tables[90][4] = 328593;
|
|
tables[90][5] = 328594;
|
|
tables[90][6] = 328616;
|
|
tables[90][7] = 328596;
|
|
tables[90][8] = 328597;
|
|
tables[90][9] = 328614;
|
|
tables[90][10] = 328595;
|
|
tables[90][11] = 328599;
|
|
tables[90][12] = 328601;
|
|
tables[90][13] = 328606;
|
|
tables[90][14] = 328602;
|
|
tables[90][15] = 328603;
|
|
tables[90][16] = 328604;
|
|
tables[90][17] = 328605;
|
|
tables[90][18] = 328607;
|
|
tables[90][19] = 328608;
|
|
tables[90][20] = 262202;
|
|
tables[90][21] = 328609;
|
|
tables[90][22] = 328611;
|
|
tables[90][23] = 328612;
|
|
tables[90][24] = 328600;
|
|
tables[90][25] = 328617;
|
|
tables[90][26] = 263045;
|
|
tables[90][27] = 328615;
|
|
tables[90][28] = 328613;
|
|
tables[90][29] = 328598;
|
|
tables[90][51] = 262312;
|
|
tables[90][100] = 262206;
|
|
tables[90][103] = 0;
|
|
tables[90][133] = 0;
|
|
tables[90][134] = 0;
|
|
tables[90][140] = 0;
|
|
tables[91][6] = 262313;
|
|
tables[91][8] = 270508;
|
|
tables[91][21] = 262318;
|
|
tables[91][28] = 262309;
|
|
tables[91][31] = 262322;
|
|
tables[91][32] = 262323;
|
|
tables[91][33] = 262307;
|
|
tables[91][34] = 262311;
|
|
tables[91][35] = 262326;
|
|
tables[91][37] = 262308;
|
|
tables[91][38] = 262310;
|
|
tables[91][39] = 262320;
|
|
tables[91][45] = 262321;
|
|
tables[91][46] = 262333;
|
|
tables[91][47] = 262315;
|
|
tables[91][48] = 262331;
|
|
tables[91][50] = 262316;
|
|
tables[91][51] = 263045;
|
|
tables[92] = tables[4];
|
|
tables[92][103] = 0;
|
|
tables[92][133] = 0;
|
|
tables[92][134] = 0;
|
|
tables[92][140] = 0;
|
|
tables[93] = tables[5];
|
|
tables[93][103] = 0;
|
|
tables[93][133] = 0;
|
|
tables[93][134] = 0;
|
|
tables[93][140] = 0;
|
|
tables[94] = tables[92];
|
|
tables[94][30] = 327939;
|
|
tables[94][31] = 327906;
|
|
tables[94][32] = 327914;
|
|
tables[94][33] = 327924;
|
|
tables[94][34] = 262912;
|
|
tables[94][35] = 262921;
|
|
tables[94][36] = 262915;
|
|
tables[94][37] = 262913;
|
|
tables[94][38] = 262947;
|
|
tables[94][39] = 327953;
|
|
tables[94][46] = 270507;
|
|
tables[94][47] = 328112;
|
|
tables[94][48] = 328097;
|
|
tables[95] = tables[93];
|
|
tables[95][30] = 327938;
|
|
tables[95][31] = 327874;
|
|
tables[95][32] = 327882;
|
|
tables[95][33] = 327892;
|
|
tables[95][34] = 262912;
|
|
tables[95][35] = 262921;
|
|
tables[95][36] = 262915;
|
|
tables[95][37] = 262913;
|
|
tables[95][38] = 262947;
|
|
tables[95][39] = 327952;
|
|
tables[95][47] = 328111;
|
|
tables[95][48] = 328096;
|
|
tables[96] = tables[92];
|
|
tables[96][40] = 0;
|
|
tables[96][42] = 0;
|
|
tables[96][43] = 0;
|
|
tables[96][44] = 0;
|
|
tables[96][83] = 0;
|
|
tables[96][84] = 0;
|
|
tables[96][85] = 0;
|
|
tables[96][86] = 0;
|
|
tables[96][87] = 0;
|
|
tables[96][88] = 0;
|
|
tables[96][89] = 0;
|
|
tables[96][90] = 0;
|
|
tables[96][91] = 0;
|
|
tables[96][92] = 0;
|
|
tables[96][93] = 0;
|
|
tables[96][94] = 0;
|
|
tables[96][95] = 0;
|
|
tables[96][96] = 0;
|
|
tables[96][97] = 0;
|
|
tables[96][98] = 0;
|
|
tables[96][99] = 0;
|
|
tables[97] = tables[93];
|
|
tables[97][40] = 0;
|
|
tables[97][42] = 0;
|
|
tables[97][43] = 0;
|
|
tables[97][44] = 0;
|
|
tables[97][83] = 0;
|
|
tables[97][84] = 0;
|
|
tables[97][85] = 0;
|
|
tables[97][86] = 0;
|
|
tables[97][87] = 0;
|
|
tables[97][88] = 0;
|
|
tables[97][89] = 0;
|
|
tables[97][90] = 0;
|
|
tables[97][91] = 0;
|
|
tables[97][92] = 0;
|
|
tables[97][93] = 0;
|
|
tables[97][94] = 0;
|
|
tables[97][95] = 0;
|
|
tables[97][96] = 0;
|
|
tables[97][97] = 0;
|
|
tables[97][98] = 0;
|
|
tables[97][99] = 0;
|
|
tables[98] = tables[92];
|
|
tables[98][47] = 327939;
|
|
tables[98][48] = 327918;
|
|
tables[98][49] = 327906;
|
|
tables[98][50] = 327906;
|
|
tables[98][51] = 328217;
|
|
tables[98][52] = 328219;
|
|
tables[98][53] = 270366;
|
|
tables[99] = tables[93];
|
|
tables[99][47] = 327938;
|
|
tables[99][48] = 327886;
|
|
tables[99][49] = 327874;
|
|
tables[99][50] = 327874;
|
|
tables[99][51] = 328216;
|
|
tables[99][52] = 328218;
|
|
tables[99][53] = 270365;
|
|
tables[99][54] = 262203;
|
|
tables[99][55] = 262202;
|
|
tables[100] = tables[88];
|
|
tables[100][5] = 0;
|
|
tables[100][6] = 262313;
|
|
tables[100][7] = 327953;
|
|
tables[100][9] = 0;
|
|
tables[100][10] = 0;
|
|
tables[100][14] = 0;
|
|
tables[100][15] = 328002;
|
|
tables[100][17] = 0;
|
|
tables[100][19] = 262311;
|
|
tables[100][20] = 0;
|
|
tables[100][22] = 262367;
|
|
tables[100][25] = 0;
|
|
tables[100][26] = 0;
|
|
tables[100][27] = 0;
|
|
tables[100][47] = 262235;
|
|
tables[100][48] = 262237;
|
|
tables[100][49] = 262236;
|
|
tables[100][50] = 262236;
|
|
tables[100][51] = 262203;
|
|
tables[100][52] = 262183;
|
|
tables[100][53] = 262240;
|
|
tables[100][56] = 0;
|
|
tables[101] = tables[29];
|
|
tables[101][7] = 327952;
|
|
tables[101][15] = 328001;
|
|
tables[101][45] = 270355;
|
|
tables[101][46] = 262321;
|
|
tables[101][49] = 262268;
|
|
tables[101][50] = 262268;
|
|
tables[101][51] = 262202;
|
|
tables[101][52] = 262178;
|
|
tables[101][53] = 262270;
|
|
tables[101][54] = 262315;
|
|
tables[101][55] = 262331;
|
|
tables[102] = tables[92];
|
|
tables[102][28] = 327802;
|
|
tables[102][29] = 327801;
|
|
tables[102][39] = 327926;
|
|
tables[102][45] = 327932;
|
|
tables[102][46] = 327923;
|
|
tables[102][47] = 328017;
|
|
tables[102][48] = 327930;
|
|
tables[102][49] = 328049;
|
|
tables[102][50] = 328049;
|
|
tables[102][51] = 327913;
|
|
tables[102][52] = 327905;
|
|
tables[102][53] = 262192;
|
|
tables[102][56] = 262189;
|
|
tables[102][100] = 327917;
|
|
tables[103] = tables[87];
|
|
tables[103][30] = 262183;
|
|
tables[103][31] = 262178;
|
|
tables[103][32] = 262187;
|
|
tables[103][33] = 262177;
|
|
tables[103][34] = 262181;
|
|
tables[103][35] = 262191;
|
|
tables[103][36] = 262205;
|
|
tables[103][37] = 262184;
|
|
tables[103][38] = 262185;
|
|
tables[103][39] = 327894;
|
|
tables[103][45] = 327900;
|
|
tables[103][46] = 327891;
|
|
tables[103][47] = 328016;
|
|
tables[103][48] = 327898;
|
|
tables[103][49] = 328048;
|
|
tables[103][50] = 328048;
|
|
tables[103][51] = 327881;
|
|
tables[103][52] = 327873;
|
|
tables[103][53] = 262311;
|
|
tables[103][100] = 327885;
|
|
tables[104] = tables[88];
|
|
tables[104][4] = 262372;
|
|
tables[104][8] = 262340;
|
|
tables[104][12] = 262349;
|
|
tables[104][13] = 262381;
|
|
tables[104][16] = 262204;
|
|
tables[104][24] = 270508;
|
|
tables[104][29] = 262206;
|
|
tables[104][54] = 262203;
|
|
tables[104][100] = 262204;
|
|
tables[105] = tables[36];
|
|
tables[105][22] = 328790;
|
|
tables[105][48] = 328791;
|
|
tables[105][52] = 328788;
|
|
tables[105][53] = 327719;
|
|
tables[105][83] = 0;
|
|
tables[105][100] = 263313;
|
|
tables[106] = tables[37];
|
|
tables[106][22] = 328710;
|
|
tables[106][48] = 328711;
|
|
tables[106][52] = 328708;
|
|
tables[106][53] = 0;
|
|
tables[106][100] = 263312;
|
|
tables[107][24] = 263313;
|
|
tables[108][24] = 263312;
|
|
tables[109][40] = 262154;
|
|
tables[109][42] = 262152;
|
|
tables[109][43] = 262153;
|
|
tables[109][88] = 262154;
|
|
tables[109][186] = 262152;
|
|
tables[109][187] = 262153;
|
|
tables[110][31] = 327962;
|
|
tables[110][32] = 328032;
|
|
tables[110][33] = 327948;
|
|
tables[110][34] = 328024;
|
|
tables[110][35] = 328061;
|
|
tables[110][36] = 327901;
|
|
tables[110][37] = 327873;
|
|
tables[110][38] = 327885;
|
|
tables[110][39] = 327881;
|
|
tables[110][47] = 327898;
|
|
tables[110][51] = 328046;
|
|
return tables;
|
|
}();
|
|
|
|
constexpr std::array<std::array<std::uint8_t, 4>, 41> CharacterLayouts = {{
|
|
{1, 2, 3, 0},
|
|
{4, 5, 6, 0},
|
|
{7, 8, 0, 0},
|
|
{9, 10, 0, 0},
|
|
{11, 12, 0, 0},
|
|
{13, 14, 0, 0},
|
|
{15, 16, 0, 0},
|
|
{17, 18, 19, 0},
|
|
{20, 21, 22, 0},
|
|
{23, 24, 25, 0},
|
|
{26, 27, 28, 29},
|
|
{30, 31, 32, 0},
|
|
{33, 34, 35, 0},
|
|
{36, 37, 0, 0},
|
|
{38, 39, 40, 41},
|
|
{42, 43, 0, 0},
|
|
{44, 45, 46, 0},
|
|
{47, 48, 49, 0},
|
|
{50, 51, 52, 0},
|
|
{47, 48, 49, 0},
|
|
{53, 54, 0, 55},
|
|
{56, 57, 0, 0},
|
|
{58, 54, 0, 55},
|
|
{59, 60, 3, 0},
|
|
{61, 62, 63, 0},
|
|
{64, 65, 66, 67},
|
|
{68, 69, 70, 71},
|
|
{72, 73, 74, 0},
|
|
{75, 76, 77, 78},
|
|
{79, 80, 81, 0},
|
|
{82, 83, 0, 0},
|
|
{84, 85, 0, 0},
|
|
{86, 87, 88, 0},
|
|
{89, 90, 91, 0},
|
|
{92, 93, 0, 0},
|
|
{94, 95, 96, 97},
|
|
{98, 99, 100, 101},
|
|
{102, 103, 104, 0},
|
|
{105, 106, 107, 108},
|
|
{109, 109, 109, 109},
|
|
{110, 110, 110, 110},
|
|
}};
|
|
|
|
constexpr std::array<char16_t, 19> KoreanInitial = {
|
|
12593, 12594, 12596, 12599, 12600, 12601, 12609, 12610, 12611, 12613, 12614, 12615, 12616, 12617, 12618, 12619, 12620, 12621, 12622
|
|
};
|
|
|
|
constexpr std::array<char16_t, 27> KoreanFinal = {
|
|
12593, 12594, 12595, 12596, 12597, 12598, 12599, 12601, 12602, 12603, 12604, 12605, 12606, 12607, 12608, 12609, 12610, 12612, 12613, 12614, 12615, 12616, 12618, 12619, 12620, 12621, 12622
|
|
};
|
|
|
|
|
|
std::size_t CharacterLayout(std::uint32_t type, std::uint32_t state) {
|
|
constexpr std::array<std::uint8_t, 39> layouts = {18, 7, 0, 1, 14, 8, 29, 17, 9, 25, 24, 23, 10, 11, 16, 26, 27, 12, 1, 19, 28, 3, 3, 1, 1, 1, 1, 1, 1, 1, 14, 32, 14, 34, 35, 36, 37, 1, 1};
|
|
const bool imeMode = (state & 0x4000000u) != 0;
|
|
const bool alternateMode = (state & 0x10000000u) != 0;
|
|
switch (type) {
|
|
case 19: return imeMode ? 13 : 1;
|
|
case 22: return alternateMode ? 2 : 3;
|
|
case 23:
|
|
if (!imeMode) return alternateMode ? 2 : 3;
|
|
if ((state & 0x8000000u) == 0) return 6;
|
|
return alternateMode ? 4 : 5;
|
|
case 24: return imeMode ? 15 : 1;
|
|
case 26:
|
|
if (imeMode) return 20;
|
|
return alternateMode ? 21 : 1;
|
|
case 29:
|
|
case 39:
|
|
if (imeMode) return 22;
|
|
return alternateMode ? 21 : 1;
|
|
case 25:
|
|
case 27:
|
|
case 28: return alternateMode ? 21 : 1;
|
|
case 30: return imeMode ? 30 : 1;
|
|
case 31: return imeMode ? 31 : 14;
|
|
case 33: return imeMode ? 33 : 14;
|
|
case 38: return imeMode ? 38 : 1;
|
|
default: return layouts[type - 1];
|
|
}
|
|
}
|
|
|
|
std::uint32_t CharacterEntry(std::size_t layout, std::size_t layer, std::uint16_t keycode) {
|
|
if (keycode >= 256) return 0;
|
|
return CharacterTables[CharacterLayouts[layout][layer]][keycode];
|
|
}
|
|
|
|
char16_t ConvertCharacter(std::uint16_t keycode, std::uint32_t state, std::uint32_t type) {
|
|
if (keycode == 83 || (keycode & 0xFFF8u) == 224) return 0;
|
|
const auto layout = CharacterLayout(type, state);
|
|
const bool shifted = (state & 0x2200u) != 0;
|
|
const bool caps = (state & 0x20000u) != 0;
|
|
if (layout == 0 && caps) {
|
|
if (keycode == 47) return shifted ? 200 : 220;
|
|
if (keycode == 52) return shifted ? 192 : 196;
|
|
if (keycode == 51) return shifted ? 201 : 214;
|
|
}
|
|
const auto& layers = CharacterLayouts[layout];
|
|
if ((state & 0x4000u) != 0 && (layers[2] != 0 || layers[3] != 0)) {
|
|
auto entry = CharacterEntry(layout, shifted ? 3 : 2, keycode);
|
|
if (entry == 0) return static_cast<char16_t>(CharacterEntry(39, 0, keycode));
|
|
if (caps && (entry & 0x10000u) != 0) {
|
|
const auto opposite = CharacterEntry(layout, shifted ? 2 : 3, keycode);
|
|
if (opposite != 0) entry = opposite;
|
|
}
|
|
return static_cast<char16_t>(entry);
|
|
}
|
|
auto entry = CharacterEntry(layout, shifted ? 1 : 0, keycode);
|
|
if (entry == 0) return 0;
|
|
if (caps) {
|
|
if ((type == 26 || type == 29 || type == 39) && (state & 0x4000000u) != 0) {
|
|
entry = CharacterEntry(layout, shifted ? 3 : 0, keycode);
|
|
} else if (type == 32 && !shifted && ((keycode >= 31 && keycode <= 39) || keycode == 47 || keycode == 51)) {
|
|
entry = CharacterEntry(40, 0, keycode);
|
|
} else if ((entry & 0x10000u) != 0) {
|
|
entry = CharacterEntry(layout, shifted ? 0 : 1, keycode);
|
|
}
|
|
if (entry == 0) return 0;
|
|
}
|
|
if ((entry & 0x20000u) != 0) {
|
|
const bool numLock = (state & 0x10000u) != 0;
|
|
if (!numLock && keycode >= 89 && keycode <= 99) return 0;
|
|
entry = CharacterEntry(layout, numLock ? 1 : 0, keycode);
|
|
if (entry == 0) return 0;
|
|
}
|
|
auto character = static_cast<char16_t>(entry);
|
|
if ((state & 0x4000000u) != 0 && type == 24) {
|
|
if ((character >= 12592 && character < 12688) || (character >= 44032 && character < 55216) || (character & 0xFF00u) == 0x1100) {
|
|
if (character >= 4352 && character <= 4370) return KoreanInitial[character - 4352];
|
|
if (character >= 4449 && character <= 4469) return static_cast<char16_t>(character + 8174);
|
|
if (character >= 4520 && character <= 4546) return KoreanFinal[character - 4520];
|
|
return 0;
|
|
}
|
|
}
|
|
if ((state & 0x4000000u) != 0 && type == 30) {
|
|
if ((state & 0x80u) == 0) {
|
|
if (keycode == 5) character = shifted ? 1570 : 1575;
|
|
if (shifted && keycode == 10) character = 1571;
|
|
if (shifted && keycode == 23) character = 1573;
|
|
}
|
|
const auto modifiers = state & 0xFFF8FFFFu;
|
|
if (modifiers == 67117312 || modifiers == 67121152 || modifiers == 67109632 || modifiers == 67113472) {
|
|
constexpr std::array<char16_t, 4> formatting = {0x200D, 0x200C, 0x200E, 0x200F};
|
|
return keycode >= 30 && keycode <= 33 ? formatting[keycode - 30] : 0;
|
|
}
|
|
if ((state & 0x1100u) != 0 && shifted) return 0;
|
|
}
|
|
return character;
|
|
}
|
|
} // namespace
|
|
|
|
extern "C" {
|
|
|
|
int APS5_VABI sceConvertKeycodeGetImeKeyboardType(int32_t userId, uint32_t* type) {
|
|
if (type == nullptr) return kErrInvalidAddress;
|
|
if (userId < 0) return kErrInvalidUserId;
|
|
throw std::runtime_error("sceConvertKeycodeGetImeKeyboardType: user keyboard language and variant are unavailable");
|
|
}
|
|
int APS5_VABI sceConvertKeycodeGetVirtualKeycode(std::uint16_t keycode, std::uint32_t keyboardType, std::uint16_t* virtualKeycode) {
|
|
if (virtualKeycode == nullptr) return kErrInvalidAddress;
|
|
if (keyboardType == 0 || keyboardType > VirtualKeys.size()) return kErrInvalidKeyboardType;
|
|
if (keyboardType >= 31) throw std::runtime_error("sceConvertKeycodeGetVirtualKeycode: guest sdk version is unavailable");
|
|
auto value = keycode < BaseVirtualKeys.size() ? VirtualKeys[keyboardType - 1][keycode] : 255;
|
|
if ((keyboardType == 2 || keyboardType == 3 || keyboardType == 12) && (value == 89 || value == 90)) throw std::runtime_error("sceConvertKeycodeGetVirtualKeycode: guest sdk version is unavailable");
|
|
*virtualKeycode = static_cast<std::uint16_t>(value);
|
|
return 0;
|
|
}
|
|
|
|
int APS5_VABI sceConvertKeycodeGetCharacterFromKeyboardData(const KeyboardData* keyData, std::int32_t index, std::uint32_t state, std::uint32_t keyboardType, char16_t* character) {
|
|
NotImplemented_nid_no_patch(__func__);
|
|
return 0;
|
|
}
|
|
|
|
int APS5_VABI sceConvertKeycodeGetCharacter(std::uint16_t keycode, std::uint32_t state, std::uint32_t type, char16_t* character) {
|
|
if (character == nullptr) return kErrInvalidAddress;
|
|
if (type == 0 || type > 39) return kErrInvalidKeyboardType;
|
|
if (type >= 31) throw std::runtime_error("sceConvertKeycodeGetCharacter: guest sdk version is unavailable");
|
|
*character = ConvertCharacter(keycode, state, type);
|
|
return 0;
|
|
}
|
|
|
|
}
|