#pragma once static const LONG text_metrics[39][7]={ {9,7,2,1,0,5,15}, {10,8,2,1,0,5,17}, {11,9,2,1,0,6,18}, {12,10,2,1,0,6,20}, {14,11,3,1,0,7,22}, {15,12,3,2,0,8,24}, {16,13,3,2,0,8,26}, {17,14,3,2,1,9,30}, {20,16,4,2,1,10,33}, {22,18,4,2,1,12,37}, {27,22,5,3,1,14,44}, {36,29,7,4,1,19,59}, {53,43,10,6,2,28,89}, {9,7,2,1,0,5,10}, {10,7,3,1,0,5,11}, {11,8,3,1,0,6,12}, {12,9,3,1,0,7,13}, {14,10,4,2,0,7,15}, {15,11,4,2,0,8,16}, {16,12,4,2,0,8,17}, {18,13,5,2,0,10,20}, {20,15,5,2,0,11,22}, {23,17,6,3,0,12,24}, {27,20,7,3,0,14,29}, {37,27,10,4,0,19,39}, {54,40,14,6,0,29,59}, {9,7,2,1,0,4,15}, {10,8,2,1,0,5,16}, {11,9,2,1,0,5,18}, {12,10,2,1,0,6,20}, {14,11,3,1,1,7,22}, {15,12,3,1,1,7,24}, {15,12,3,2,1,8,26}, {17,14,3,2,1,9,29}, {20,16,4,2,1,10,33}, {22,18,4,2,1,11,36}, {26,21,5,3,1,13,44}, {36,29,7,3,1,18,58}, {53,43,10,5,2,26,87}, }; static const LONG text_extents[39][8]={ {41,16,64,31,43,40,32,10}, {51,16,72,37,52,50,40,12}, {58,16,72,41,56,60,43,13}, {60,16,80,43,59,60,47,14}, {68,24,88,48,68,70,50,16}, {71,24,96,53,71,70,56,17}, {78,24,104,55,78,80,59,18}, {89,32,120,66,89,90,66,21}, {99,32,136,72,99,100,75,23}, {109,32,152,78,109,110,84,26}, {130,40,184,96,130,130,100,31}, {177,56,240,127,177,180,134,42}, {266,88,360,192,266,270,200,63}, {50,40,40,30,65,50,45,10}, {50,40,40,30,65,50,45,10}, {60,48,48,36,78,60,54,12}, {70,56,56,42,91,70,63,14}, {70,56,56,42,91,70,63,14}, {80,64,64,48,104,80,72,16}, {80,64,64,48,104,80,72,16}, {100,80,80,60,130,100,90,20}, {110,88,88,66,143,110,99,22}, {120,96,96,72,156,120,108,24}, {140,112,112,84,182,140,126,28}, {190,152,152,114,247,190,171,38}, {290,232,232,174,377,290,261,58}, {41,16,64,34,44,40,33,10}, {48,24,72,40,52,50,39,11}, {50,24,72,41,54,50,40,11}, {58,24,80,46,62,60,47,13}, {60,24,88,51,64,60,48,14}, {68,32,96,53,71,70,54,16}, {70,32,104,58,77,70,57,16}, {81,32,120,69,85,80,64,19}, {91,40,136,75,98,90,73,21}, {100,48,152,81,109,100,81,24}, {121,56,184,99,130,120,97,29}, {160,72,240,133,173,160,129,38}, {241,104,360,201,258,240,193,57}, }; static const unsigned long long text_hashes[390]={ 0x7f82e21b8e233318ULL, 0x373185565fe036e5ULL, 0x683a799570010ee5ULL, 0xfc489eab9eeb9099ULL, 0x15922b451a23b679ULL, 0x4e49576cb4a2dfe5ULL, 0x839f097793a6f445ULL, 0x0e4ed57dc3ac4f64ULL, 0x1e8abb5226bf1fb1ULL, 0x97ceaa3caeb473bfULL, 0x32fb28e077f97638ULL, 0xd765a20578f21ca5ULL, 0xd41024c147812665ULL, 0x7029c6ad89817914ULL, 0xff4280453159138cULL, 0x164be97c07c0c91cULL, 0x7671d7f7b64ea921ULL, 0x1fabbea5ce7c5e4cULL, 0x69a45b2f54aca665ULL, 0xa39df4dbf01c8973ULL, 0x27f5e651fa0639c4ULL, 0x46a7302dcace0465ULL, 0xb740b48ba0714745ULL, 0x4bb0858d3c75e050ULL, 0xfc98e4e1b682ee35ULL, 0x86cca1a6145b8e15ULL, 0x67e86c0d69880b74ULL, 0x41e40ecec8b13d50ULL, 0x313ce6f4f91932a0ULL, 0x15de9140257b6f1eULL, 0x1d1d3bf2278b71acULL, 0x8003fe45bb931a25ULL, 0x06bb9229c2e11fa5ULL, 0x8d04599c8679bdd4ULL, 0x3269495ff28ae774ULL, 0x043387c3f5cfee05ULL, 0x109044a1c4953195ULL, 0xb054afdac4aa255cULL, 0x22dbfee617bae3f0ULL, 0xec4653482344e5b6ULL, 0x2edf79b0e2302b5cULL, 0x00e4c8832d47b1e5ULL, 0x7ce9038348c03d65ULL, 0x77de2c0d0010925cULL, 0x136609165a6d238cULL, 0x8f90c2460a8e4475ULL, 0x2e8b282bbd335bdcULL, 0xa2dd563570043b25ULL, 0x11bb480af7ccd4bcULL, 0x62b6d077b507ef6aULL, 0x80f1640aef74e411ULL, 0x58fc3744d7c1c385ULL, 0xa84737526222cca8ULL, 0x5c12987820ab1869ULL, 0xe8f1873fbcbda021ULL, 0x80d2afb40235ab94ULL, 0x05c84816a91b887cULL, 0x3cede70b91623009ULL, 0x2903f0da20562068ULL, 0x4b60a2a83d23cc14ULL, 0x3e0f8b13a6fffd45ULL, 0xe79b3c32a2a47325ULL, 0xfb43a7910e2a48a5ULL, 0xfc9568126b66f4bdULL, 0x701b302125f45025ULL, 0x087f802b2f53f6d5ULL, 0x6248e4b0f1a52434ULL, 0x51254036cef860f5ULL, 0x65a73431130e8c45ULL, 0xe797a3e4030e1a6dULL, 0xcc262f6dc0d86a21ULL, 0xcd6d12d956331fa5ULL, 0x3ad9d07eba9ccbc5ULL, 0x0954b360361ff1a4ULL, 0x58c8e133c8e15a90ULL, 0x1d5f36fd7101fbd4ULL, 0x88fb66d28f015e64ULL, 0x51db208be0fb9419ULL, 0x4333985969ba62a4ULL, 0x35638c15354a06c0ULL, 0x343d8fca493ea2a5ULL, 0x686fe22d95781f25ULL, 0x6df1b9dc9b001f65ULL, 0xd5673134d720de05ULL, 0x20dea0bea817623cULL, 0x6be5bcecd9da61acULL, 0x60e7c63681974b44ULL, 0xce8dd29fd3e6a2dcULL, 0x672a537da85b7c9dULL, 0x99fb14e25fe269e5ULL, 0xcd1c5024433bd915ULL, 0x53211775ec91ffa5ULL, 0x2cdb5b52e2854565ULL, 0x738ff521f38ecbc5ULL, 0x3462c23e5b5f582cULL, 0x0a4baa81e5a14a25ULL, 0xb6d20057f2757b3cULL, 0x1602acac8b354bacULL, 0xfe24abf6a8826301ULL, 0x226e0336255266b5ULL, 0x8c5705dc99065a34ULL, 0x8a4e08be9c30af05ULL, 0x1c638035b3e42dc5ULL, 0x29ddc95f4211a0a5ULL, 0x748dd40d2d6d69bcULL, 0x7e56570429effdfdULL, 0x0f1dc7ee7826c285ULL, 0x57ebb5babfb69771ULL, 0x4b4fd2b091174aacULL, 0xdf9d6798b0f794baULL, 0x5cfd9fca6b28baadULL, 0xfe01257470dff4a5ULL, 0x41b9fba5bdf6f380ULL, 0x308bb86cbb27000dULL, 0xd7cad19b108b2c9cULL, 0x7f35d1090834d385ULL, 0x1ea5ba5105877e6cULL, 0xba5c5eb3df3c8a35ULL, 0x1d4068098d7a3c09ULL, 0xa56a7fe1f8cd43b5ULL, 0x037b37c963c4a5e4ULL, 0x06be7a2c319de445ULL, 0x961ad6bd79a05d78ULL, 0x1e50dd43223a7f1cULL, 0x815278bac1dd267dULL, 0x83fe4c4128d68984ULL, 0xac11d45494838255ULL, 0x8545a75ea1004021ULL, 0x35d90b0d07dc53b4ULL, 0x866276760becbbb2ULL, 0x3cce739bec4766b4ULL, 0x89f22cbf3b94f985ULL, 0xd6a45aeb68301005ULL, 0x7144221b9b176a14ULL, 0xab1b6311e506bd01ULL, 0x0ddd875b9b892fcdULL, 0xf5dda2fc299b8d39ULL, 0x50cdabc7627e2814ULL, 0x41121f68a9f8f03cULL, 0x49f96e121138f4aaULL, 0x93b749ed677e9425ULL, 0xf7e7fbed1570c325ULL, 0xa2b2a407c0bfa3a5ULL, 0x5980b63937d468c5ULL, 0x4afec6b227730a8cULL, 0xbcb8c064c79c79bcULL, 0x01c1577423b6ab74ULL, 0xffd0bda3ad98a3d5ULL, 0xec9d7a641ae1bdc9ULL, 0xffa19c1dc86ff079ULL, 0xd492e41748afa9acULL, 0x71577d192aaf6ee5ULL, 0x70ff19d034d3c7e5ULL, 0x42542fad89ed9045ULL, 0x0e6a6edb2828acc4ULL, 0xfcc0468fb29fbd65ULL, 0xe377fd9ce343c574ULL, 0x1a6d46ca82f340dcULL, 0xfeb7cfba9f59ab6cULL, 0xe8b5f1281b970f9aULL, 0x603eb7f341dcf155ULL, 0xae05846ec182d625ULL, 0xd0dc34c2927e6c25ULL, 0x6e0ed7f017a07b85ULL, 0xb76596425c72909cULL, 0x156b39c130f4f055ULL, 0x105b44a916b53dccULL, 0x06fde5339eb374acULL, 0xbd8a7a9eee3e2f9dULL, 0x8725150396b0488dULL, 0xdc43f28951701eccULL, 0x0d03e2b6d048c2a5ULL, 0x0f3855c492725765ULL, 0x5a788f26bb3212f5ULL, 0xa4639859eabab944ULL, 0x4bb4951e390647f5ULL, 0x6b435f063201bcbcULL, 0xbeb1395b683786e5ULL, 0xa9385b589ebf72f4ULL, 0xfb0b68df8d6e55aaULL, 0x205b432efa8d828cULL, 0x26c33397bb1e3aa5ULL, 0x9b6f0289879d32a5ULL, 0xa857e434fd29932cULL, 0xa0965462170947dcULL, 0x8fd629683d4cdb0cULL, 0xc57cd74a7381cd05ULL, 0xa8dd178b0b15ee55ULL, 0xc46069afe0213830ULL, 0x5005a1205bc23daeULL, 0x0b2a0b2b85ab4a25ULL, 0x3ef347c503388225ULL, 0x7a8de4eb9be26fa5ULL, 0x665d3f347e31c2dcULL, 0x718addf6e9e583ecULL, 0xc4df63809de4974cULL, 0xcfd2cf2ab57383ccULL, 0x549c4bf651272185ULL, 0x650765d1800251d5ULL, 0x5b48841d1004d555ULL, 0xeed3636738e43fbcULL, 0xdbf768510defc2a5ULL, 0x95262adfb413afa5ULL, 0x53d66e9a0c79362cULL, 0xc31e436e304e3205ULL, 0xc9958ee34a1f4eecULL, 0x482680ef53b72595ULL, 0x0933e940c79b820cULL, 0x9d64a77c8dcade44ULL, 0x147a58909f58368aULL, 0x660f5b85705a97d5ULL, 0x18ffcf229a4916a5ULL, 0x0f21f62140f62a25ULL, 0xca3fb11b64f5c6b5ULL, 0x59811093990ea1bcULL, 0x2a8194b7f1c74a75ULL, 0x102b697b4cda60c5ULL, 0x2b2beb90ac8db12cULL, 0x72bf5bff13f2685dULL, 0xf00ac28ffd8a8685ULL, 0x929e36993e2eeb0cULL, 0xfa17fa4fc0869125ULL, 0xab674a941bbe6125ULL, 0xee86a5ea39f9b6c5ULL, 0x5afa50a79cdf570cULL, 0x4c8e6d148b38e065ULL, 0x239377ee33cbfe65ULL, 0x21c9621d3c461adcULL, 0x6feeee0d72b02dc8ULL, 0xab2be57c095626f6ULL, 0x3d3421d85cc856dcULL, 0x9ae3fc24e5b74ee5ULL, 0xbd12641d54d44e65ULL, 0x118c90973e946665ULL, 0x3c6eb04d2ef7a32dULL, 0xf6a1ccea72f65dfcULL, 0xf3948116b58d16a4ULL, 0x0635318bdccd10a5ULL, 0xc6f6f3b262350a38ULL, 0xd6ef4700f814eb06ULL, 0xecdfde1d1fb27324ULL, 0x28f7d28ad1f03305ULL, 0x66cf925308c81d45ULL, 0xa7f713b75630770dULL, 0xcfcdc43775c37598ULL, 0x8b0d36d5978e7824ULL, 0xb2ba184e9177e480ULL, 0x680a9c1c31ac3fe4ULL, 0x8069d966e535c4c0ULL, 0x5741c916d87ac6f6ULL, 0x357d75cc54f92d9cULL, 0x9c610e212f2d14e5ULL, 0x1af2be0d1c93d665ULL, 0x17ef8ca98dbecf5cULL, 0x62bb53a886f82ba4ULL, 0xc9d76fff93f29b9cULL, 0x5375272d56d68124ULL, 0xbc7df20a089be015ULL, 0x145aad0ac12fe110ULL, 0x726ee5abcffe686eULL, 0xaab3021395335410ULL, 0x031d53e60b7b8b65ULL, 0xa003342d1c491225ULL, 0xf9f404623d1870ddULL, 0xac99f0b6adb00d2cULL, 0x8b173644f7deeac5ULL, 0x716dc7230fd8f141ULL, 0x7f62ea67629e28d4ULL, 0x4832d0f9a844e689ULL, 0x88b0ee43ce938c2bULL, 0x15f5dac1f8c2c69cULL, 0x03c1b222dc965b25ULL, 0x0e45b88b61f90265ULL, 0x452483ae1e8e338cULL, 0xc3d673014d0d0b25ULL, 0x53b1138f14e80465ULL, 0xda679a0bbb281c2cULL, 0x44aa1d319ad18a25ULL, 0x8e1ffe775ccc6af4ULL, 0x4c3972c807585bc2ULL, 0xc78bfcbf39624e1dULL, 0xe1932b1a197a42c5ULL, 0xa48bacee9218e1e5ULL, 0x11f81a37eed554a5ULL, 0x5c84a7b5ed918e34ULL, 0xc3570cecedd66344ULL, 0x81ca13c47e28b4b5ULL, 0xdbd4181bbae09089ULL, 0xd57351251f1a9039ULL, 0x6a644b7b2c41e279ULL, 0xf50dd59a957ce8c5ULL, 0x407cfb4aa5d51265ULL, 0x50aa82d07b629680ULL, 0xf78df5dfea3f977cULL, 0x8510425884612aacULL, 0x025838e1dcf26a35ULL, 0xd28d46f78fc03dfcULL, 0x452c0d073bb88d85ULL, 0x356daa1e98f1a621ULL, 0xac73b0d641629a79ULL, 0x7e328ca4dd93015cULL, 0xfcb2c96185241b65ULL, 0xfcf389856d2c5625ULL, 0xb030aeac09bb7cb4ULL, 0x2e57826f6c8785d5ULL, 0x9c3282e18d25bedcULL, 0xaebca51165f4ce35ULL, 0x237f6ede39cf53ccULL, 0x8d881621d3fd9624ULL, 0x1874fc0b1a323812ULL, 0xee92cc273fdb75d5ULL, 0x26edda3340dcf525ULL, 0x7526a2271d3f5218ULL, 0x349b23156de54a64ULL, 0x757a72711817f261ULL, 0x9094669dd8f525edULL, 0x17e29dbd339855c4ULL, 0xb7f1683d148e772cULL, 0x77190a2c4e8764b5ULL, 0x4858c5100265106dULL, 0x54ebe596bdd14c24ULL, 0x5a3b079e1d053ce5ULL, 0xf7bb39fb1e833b85ULL, 0x0cea91044d8e5044ULL, 0xb241ce55dd5b48f9ULL, 0x88366970584e3794ULL, 0xf8ea2ac11bd72649ULL, 0x2004be932de6713cULL, 0x3245470223fb80e8ULL, 0x73ec285f64a3e8ceULL, 0x4009bb6b443cd028ULL, 0x804081152b9eb9fcULL, 0x139a811034c15385ULL, 0x5d213dfc48144550ULL, 0x7d6e7fbdb27524c9ULL, 0x6f70d2d70898a0ecULL, 0x041e77e99999b84cULL, 0x25e24579c0ea6750ULL, 0x46a8a209c91d30b5ULL, 0x508641f69751e323ULL, 0x0344bd1b34e1a7b5ULL, 0xc6ff4bc1c2945da5ULL, 0xd3a6483d4ce40e25ULL, 0x8b546f1e52c28e7cULL, 0xcefb6d62dee7cbccULL, 0x8ee909417c07949cULL, 0x0c9458fd59844b95ULL, 0x4d6c6d442f82f574ULL, 0xb0e2f9e343a21165ULL, 0x759b4f641175a825ULL, 0xcdcda906ad132d0cULL, 0x89af2807463cb625ULL, 0xea77e52e31d8b1e5ULL, 0xd5a506bafd5a6184ULL, 0x60f9ebec69b2671cULL, 0x3ffb51d4b8b0df8cULL, 0x46357388e2842044ULL, 0x018c51b0c526a615ULL, 0x9e403b04e7521d08ULL, 0xaacd85453cc40aaeULL, 0xb91da4e228fd16ecULL, 0xe917b60c9031e3e5ULL, 0x3ff827beb1858965ULL, 0x5d64884525883c84ULL, 0xd930a7777e86e4bcULL, 0x7a3575b59e31d58cULL, 0x4ffb514fe849b30cULL, 0x737b1099322a7ecdULL, 0xde512d8d2213a4e4ULL, 0xe0bac8f4a06c1b56ULL, 0xfc5302c24cf8af25ULL, 0x8e4fc4424395efa5ULL, 0xf5f306146cc32fa5ULL, 0x8f39eb47398a2e6cULL, 0xdb31a02e966d8b7cULL, 0x7a5ea51fc060adf5ULL, 0xdd7c923d2917004cULL, 0xae5f395004e7107cULL, 0x4ccdc58613f7c3f5ULL, 0xa38707ac8bc770e5ULL, 0x16b3a1ee433d7559ULL, 0x918e8731f18bac85ULL, 0x2c604a743aaeb885ULL, 0xb995223ade17c238ULL, 0x7d0de5c7c877b38dULL, 0x9e2af40adcc0a215ULL, 0xabd6983ae4a0fda9ULL, 0x297038994a16b150ULL, 0x77fb06125caf94acULL, 0x60644da5e49dff44ULL, };