// Generated by tools/data-generator/generate.py. DO NOT EDIT.
// Derived from Unicode data, Copyright © 2024 Unicode, Inc.
// SPDX-License-Identifier: Unicode-3.0
// See licenses/UNICODE-3.0.txt and THIRD_PARTY_NOTICES.md.
// Source: Unicode Character Database Scripts.txt (Version 16.0.0)

///|
let script_range_starts : FixedArray[Int32] = [
  0x0000, 0x0041, 0x005B, 0x0061, 0x007B, 0x00AA, 0x00AB, 0x00BA, 0x00BB, 0x00C0,
  0x00D7, 0x00D8, 0x00F7, 0x00F8, 0x02B9, 0x02E0, 0x02E5, 0x02EA, 0x02EC, 0x0300,
  0x0370, 0x0374, 0x0375, 0x037A, 0x037E, 0x037F, 0x0384, 0x0385, 0x0386, 0x0387,
  0x0388, 0x038C, 0x038E, 0x03A3, 0x03E2, 0x03F0, 0x0400, 0x0485, 0x0487, 0x0531,
  0x0559, 0x058D, 0x0591, 0x05D0, 0x05EF, 0x0600, 0x0605, 0x0606, 0x060C, 0x060D,
  0x061B, 0x061C, 0x061F, 0x0620, 0x0640, 0x0641, 0x064B, 0x0656, 0x0670, 0x0671,
  0x06DD, 0x06DE, 0x0700, 0x070F, 0x074D, 0x0750, 0x0780, 0x07C0, 0x07FD, 0x0830,
  0x0840, 0x085E, 0x0860, 0x0870, 0x0890, 0x0897, 0x08E2, 0x08E3, 0x0900, 0x0951,
  0x0955, 0x0964, 0x0966, 0x0985, 0x098F, 0x0993, 0x09AA, 0x09B2, 0x09B6, 0x09BC,
  0x09C7, 0x09CB, 0x09D7, 0x09DC, 0x09DF, 0x09E6, 0x0A01, 0x0A05, 0x0A0F, 0x0A13,
  0x0A2A, 0x0A32, 0x0A35, 0x0A38, 0x0A3C, 0x0A3E, 0x0A47, 0x0A4B, 0x0A51, 0x0A59,
  0x0A5E, 0x0A66, 0x0A81, 0x0A85, 0x0A8F, 0x0A93, 0x0AAA, 0x0AB2, 0x0AB5, 0x0ABC,
  0x0AC7, 0x0ACB, 0x0AD0, 0x0AE0, 0x0AE6, 0x0AF9, 0x0B01, 0x0B05, 0x0B0F, 0x0B13,
  0x0B2A, 0x0B32, 0x0B35, 0x0B3C, 0x0B47, 0x0B4B, 0x0B55, 0x0B5C, 0x0B5F, 0x0B66,
  0x0B82, 0x0B85, 0x0B8E, 0x0B92, 0x0B99, 0x0B9C, 0x0B9E, 0x0BA3, 0x0BA8, 0x0BAE,
  0x0BBE, 0x0BC6, 0x0BCA, 0x0BD0, 0x0BD7, 0x0BE6, 0x0C00, 0x0C0E, 0x0C12, 0x0C2A,
  0x0C3C, 0x0C46, 0x0C4A, 0x0C55, 0x0C58, 0x0C5D, 0x0C60, 0x0C66, 0x0C77, 0x0C8E,
  0x0C92, 0x0CAA, 0x0CB5, 0x0CBC, 0x0CC6, 0x0CCA, 0x0CD5, 0x0CDD, 0x0CE0, 0x0CE6,
  0x0CF1, 0x0D00, 0x0D0E, 0x0D12, 0x0D46, 0x0D4A, 0x0D54, 0x0D66, 0x0D81, 0x0D85,
  0x0D9A, 0x0DB3, 0x0DBD, 0x0DC0, 0x0DCA, 0x0DCF, 0x0DD6, 0x0DD8, 0x0DE6, 0x0DF2,
  0x0E01, 0x0E3F, 0x0E40, 0x0E81, 0x0E84, 0x0E86, 0x0E8C, 0x0EA5, 0x0EA7, 0x0EC0,
  0x0EC6, 0x0EC8, 0x0ED0, 0x0EDC, 0x0F00, 0x0F49, 0x0F71, 0x0F99, 0x0FBE, 0x0FCE,
  0x0FD5, 0x0FD9, 0x1000, 0x10C7, 0x10CD, 0x10D0, 0x10FB, 0x10FC, 0x1100, 0x1200,
  0x124A, 0x1250, 0x1258, 0x125A, 0x1260, 0x128A, 0x1290, 0x12B2, 0x12B8, 0x12C0,
  0x12C2, 0x12C8, 0x12D8, 0x1312, 0x1318, 0x135D, 0x1380, 0x13A0, 0x13F8, 0x1400,
  0x16A0, 0x16EB, 0x16EE, 0x1700, 0x171F, 0x1735, 0x1740, 0x1760, 0x176E, 0x1772,
  0x1780, 0x17E0, 0x17F0, 0x1800, 0x1802, 0x1804, 0x1805, 0x1806, 0x1820, 0x1880,
  0x18B0, 0x1900, 0x1920, 0x1930, 0x1940, 0x1944, 0x1970, 0x1980, 0x19B0, 0x19D0,
  0x19DE, 0x1A1E, 0x1A60, 0x1A7F, 0x1A90, 0x1AA0, 0x1AB0, 0x1B00, 0x1B4E, 0x1BFC,
  0x1C3B, 0x1C4D, 0x1C80, 0x1C90, 0x1CBD, 0x1CD0, 0x1CD3, 0x1CD4, 0x1CE1, 0x1CE2,
  0x1CE9, 0x1CED, 0x1CEE, 0x1CF4, 0x1CF5, 0x1CF8, 0x1CFA, 0x1D00, 0x1D26, 0x1D2B,
  0x1D2C, 0x1D5D, 0x1D62, 0x1D66, 0x1D6B, 0x1D78, 0x1D79, 0x1DBF, 0x1DC0, 0x1E00,
  0x1F00, 0x1F18, 0x1F20, 0x1F48, 0x1F50, 0x1F59, 0x1F5B, 0x1F5D, 0x1F5F, 0x1F80,
  0x1FB6, 0x1FC6, 0x1FD6, 0x1FDD, 0x1FF2, 0x1FF6, 0x2000, 0x200C, 0x200E, 0x2066,
  0x2071, 0x2074, 0x207F, 0x2080, 0x2090, 0x20A0, 0x20D0, 0x2100, 0x2126, 0x2127,
  0x212A, 0x212C, 0x2132, 0x2133, 0x214E, 0x214F, 0x2160, 0x2189, 0x2190, 0x2440,
  0x2460, 0x2800, 0x2900, 0x2B76, 0x2B97, 0x2C00, 0x2C60, 0x2C80, 0x2CF9, 0x2D27,
  0x2D2D, 0x2D30, 0x2D6F, 0x2D7F, 0x2DA0, 0x2DA8, 0x2DB0, 0x2DB8, 0x2DC0, 0x2DC8,
  0x2DD0, 0x2DD8, 0x2DE0, 0x2E00, 0x2E80, 0x2E9B, 0x2F00, 0x2FF0, 0x3005, 0x3006,
  0x3007, 0x3008, 0x3021, 0x302A, 0x302E, 0x3030, 0x3038, 0x303C, 0x3041, 0x3099,
  0x309B, 0x309D, 0x30A0, 0x30A1, 0x30FB, 0x30FD, 0x3105, 0x3131, 0x3190, 0x31A0,
  0x31C0, 0x31EF, 0x31F0, 0x3200, 0x3220, 0x3260, 0x327F, 0x32D0, 0x32FF, 0x3300,
  0x3358, 0x3400, 0x4DC0, 0x4E00, 0xA000, 0xA490, 0xA4D0, 0xA640, 0xA6A0, 0xA700,
  0xA722, 0xA788, 0xA78B, 0xA7D0, 0xA7D3, 0xA7D5, 0xA7F2, 0xA800, 0xA830, 0xA840,
  0xA880, 0xA8CE, 0xA8E0, 0xA92E, 0xA92F, 0xA95F, 0xA960, 0xA980, 0xA9CF, 0xA9D0,
  0xA9DE, 0xAA00, 0xAA40, 0xAA50, 0xAA5C, 0xAADB, 0xAB01, 0xAB09, 0xAB11, 0xAB20,
  0xAB28, 0xAB30, 0xAB5B, 0xAB5C, 0xAB65, 0xAB66, 0xAB6A, 0xAB70, 0xABF0, 0xAC00,
  0xD7B0, 0xD7CB, 0xF900, 0xFA70, 0xFB00, 0xFB13, 0xFB1D, 0xFB38, 0xFB3E, 0xFB40,
  0xFB43, 0xFB46, 0xFB50, 0xFBD3, 0xFD3E, 0xFD40, 0xFD92, 0xFDCF, 0xFDF0, 0xFE00,
  0xFE10, 0xFE20, 0xFE2E, 0xFE30, 0xFE54, 0xFE68, 0xFE70, 0xFE76, 0xFEFF, 0xFF01,
  0xFF21, 0xFF3B, 0xFF41, 0xFF5B, 0xFF66, 0xFF70, 0xFF71, 0xFF9E, 0xFFA0, 0xFFC2,
  0xFFCA, 0xFFD2, 0xFFDA, 0xFFE0, 0xFFE8, 0xFFF9, 0x10000, 0x1000D, 0x10028, 0x1003C,
  0x1003F, 0x10050, 0x10080, 0x10100, 0x10107, 0x10137, 0x10140, 0x10190, 0x101A0,
  0x101D0, 0x101FD, 0x10280, 0x102A0, 0x102E0, 0x102E1, 0x10300, 0x1032D, 0x10350,
  0x10380, 0x1039F, 0x103C8, 0x10400, 0x104A0, 0x104B0, 0x104D8, 0x10500, 0x10530,
  0x1056F, 0x1057C, 0x1058C, 0x10594, 0x10597, 0x105A3, 0x105B3, 0x105BB, 0x105C0,
  0x10600, 0x10740, 0x10760, 0x10780, 0x10787, 0x107B2, 0x10800, 0x10808, 0x1080A,
  0x10837, 0x1083C, 0x1083F, 0x10857, 0x108A7, 0x108E0, 0x108F4, 0x108FB, 0x1091F,
  0x1093F, 0x10980, 0x109BC, 0x109D2, 0x10A05, 0x10A0C, 0x10A15, 0x10A19, 0x10A38,
  0x10A3F, 0x10A50, 0x10A60, 0x10AC0, 0x10AEB, 0x10B00, 0x10B39, 0x10B58, 0x10B78,
  0x10B99, 0x10BA9, 0x10C00, 0x10C80, 0x10CC0, 0x10CFA, 0x10D30, 0x10D40, 0x10D69,
  0x10D8E, 0x10E60, 0x10E80, 0x10EAB, 0x10EB0, 0x10EC2, 0x10EFC, 0x10F00, 0x10F30,
  0x10F70, 0x10FB0, 0x10FE0, 0x11000, 0x11052, 0x1107F, 0x110CD, 0x110D0, 0x110F0,
  0x11100, 0x11136, 0x11150, 0x11180, 0x111E1, 0x11200, 0x11213, 0x11280, 0x11288,
  0x1128A, 0x1128F, 0x1129F, 0x112B0, 0x112F0, 0x11300, 0x11305, 0x1130F, 0x11313,
  0x1132A, 0x11332, 0x11335, 0x1133B, 0x1133C, 0x11347, 0x1134B, 0x11350, 0x11357,
  0x1135D, 0x11366, 0x11370, 0x11380, 0x1138B, 0x1138E, 0x11390, 0x113B7, 0x113C2,
  0x113C5, 0x113C7, 0x113CC, 0x113D7, 0x113E1, 0x11400, 0x1145D, 0x11480, 0x114D0,
  0x11580, 0x115B8, 0x11600, 0x11650, 0x11660, 0x11680, 0x116C0, 0x116D0, 0x11700,
  0x1171D, 0x11730, 0x11800, 0x118A0, 0x118FF, 0x11909, 0x1190C, 0x11915, 0x11918,
  0x11937, 0x1193B, 0x11950, 0x119A0, 0x119AA, 0x119DA, 0x11A00, 0x11A50, 0x11AB0,
  0x11B00, 0x11BC0, 0x11BF0, 0x11C00, 0x11C0A, 0x11C38, 0x11C50, 0x11C70, 0x11C92,
  0x11CA9, 0x11D00, 0x11D08, 0x11D0B, 0x11D3A, 0x11D3C, 0x11D3F, 0x11D50, 0x11D60,
  0x11D67, 0x11D6A, 0x11D90, 0x11D93, 0x11DA0, 0x11EE0, 0x11F00, 0x11F12, 0x11F3E,
  0x11FB0, 0x11FC0, 0x11FFF, 0x12400, 0x12470, 0x12480, 0x12F90, 0x13000, 0x13460,
  0x14400, 0x16100, 0x16800, 0x16A40, 0x16A60, 0x16A6E, 0x16AC0, 0x16AD0, 0x16AF0,
  0x16B00, 0x16B50, 0x16B5B, 0x16B63, 0x16B7D, 0x16D40, 0x16E40, 0x16F00, 0x16F4F,
  0x16F8F, 0x16FE0, 0x16FE2, 0x16FE4, 0x16FF0, 0x17000, 0x18800, 0x18CFF, 0x1AFF0,
  0x1AFF5, 0x1AFFD, 0x1B000, 0x1B001, 0x1B120, 0x1B132, 0x1B150, 0x1B155, 0x1B164,
  0x1B170, 0x1BC00, 0x1BC70, 0x1BC80, 0x1BC90, 0x1BC9C, 0x1BCA0, 0x1CC00, 0x1CD00,
  0x1CF00, 0x1CF30, 0x1CF50, 0x1D000, 0x1D100, 0x1D129, 0x1D167, 0x1D16A, 0x1D17B,
  0x1D183, 0x1D185, 0x1D18C, 0x1D1AA, 0x1D1AE, 0x1D200, 0x1D2C0, 0x1D2E0, 0x1D300,
  0x1D360, 0x1D400, 0x1D456, 0x1D49E, 0x1D4A2, 0x1D4A5, 0x1D4A9, 0x1D4AE, 0x1D4BB,
  0x1D4BD, 0x1D4C5, 0x1D507, 0x1D50D, 0x1D516, 0x1D51E, 0x1D53B, 0x1D540, 0x1D546,
  0x1D54A, 0x1D552, 0x1D6A8, 0x1D7CE, 0x1D800, 0x1DA9B, 0x1DAA1, 0x1DF00, 0x1DF25,
  0x1E000, 0x1E008, 0x1E01B, 0x1E023, 0x1E026, 0x1E030, 0x1E08F, 0x1E100, 0x1E130,
  0x1E140, 0x1E14E, 0x1E290, 0x1E2C0, 0x1E2FF, 0x1E4D0, 0x1E5D0, 0x1E5FF, 0x1E7E0,
  0x1E7E8, 0x1E7ED, 0x1E7F0, 0x1E800, 0x1E8C7, 0x1E900, 0x1E950, 0x1E95E, 0x1EC71,
  0x1ED01, 0x1EE00, 0x1EE05, 0x1EE21, 0x1EE24, 0x1EE27, 0x1EE29, 0x1EE34, 0x1EE39,
  0x1EE3B, 0x1EE42, 0x1EE47, 0x1EE49, 0x1EE4B, 0x1EE4D, 0x1EE51, 0x1EE54, 0x1EE57,
  0x1EE59, 0x1EE5B, 0x1EE5D, 0x1EE5F, 0x1EE61, 0x1EE64, 0x1EE67, 0x1EE6C, 0x1EE74,
  0x1EE79, 0x1EE7E, 0x1EE80, 0x1EE8B, 0x1EEA1, 0x1EEA5, 0x1EEAB, 0x1EEF0, 0x1F000,
  0x1F030, 0x1F0A0, 0x1F0B1, 0x1F0C1, 0x1F0D1, 0x1F100, 0x1F1E6, 0x1F200, 0x1F201,
  0x1F210, 0x1F240, 0x1F250, 0x1F260, 0x1F300, 0x1F6DC, 0x1F6F0, 0x1F700, 0x1F77B,
  0x1F7E0, 0x1F7F0, 0x1F800, 0x1F810, 0x1F850, 0x1F860, 0x1F890, 0x1F8B0, 0x1F8C0,
  0x1F900, 0x1FA60, 0x1FA70, 0x1FA80, 0x1FA8F, 0x1FACE, 0x1FADF, 0x1FAF0, 0x1FB00,
  0x1FB94, 0x20000, 0x2A700, 0x2B740, 0x2B820, 0x2CEB0, 0x2EBF0, 0x2F800, 0x30000,
  0x31350, 0xE0001, 0xE0020, 0xE0100,
]

///|
let script_range_ends : FixedArray[Int32] = [
  0x0040, 0x005A, 0x0060, 0x007A, 0x00A9, 0x00AA, 0x00B9, 0x00BA, 0x00BF, 0x00D6,
  0x00D7, 0x00F6, 0x00F7, 0x02B8, 0x02DF, 0x02E4, 0x02E9, 0x02EB, 0x02FF, 0x036F,
  0x0373, 0x0374, 0x0377, 0x037D, 0x037E, 0x037F, 0x0384, 0x0385, 0x0386, 0x0387,
  0x038A, 0x038C, 0x03A1, 0x03E1, 0x03EF, 0x03FF, 0x0484, 0x0486, 0x052F, 0x0556,
  0x058A, 0x058F, 0x05C7, 0x05EA, 0x05F4, 0x0604, 0x0605, 0x060B, 0x060C, 0x061A,
  0x061B, 0x061E, 0x061F, 0x063F, 0x0640, 0x064A, 0x0655, 0x066F, 0x0670, 0x06DC,
  0x06DD, 0x06FF, 0x070D, 0x074A, 0x074F, 0x077F, 0x07B1, 0x07FA, 0x082D, 0x083E,
  0x085B, 0x085E, 0x086A, 0x088E, 0x0891, 0x08E1, 0x08E2, 0x08FF, 0x0950, 0x0954,
  0x0963, 0x0965, 0x0983, 0x098C, 0x0990, 0x09A8, 0x09B0, 0x09B2, 0x09B9, 0x09C4,
  0x09C8, 0x09CE, 0x09D7, 0x09DD, 0x09E3, 0x09FE, 0x0A03, 0x0A0A, 0x0A10, 0x0A28,
  0x0A30, 0x0A33, 0x0A36, 0x0A39, 0x0A3C, 0x0A42, 0x0A48, 0x0A4D, 0x0A51, 0x0A5C,
  0x0A5E, 0x0A76, 0x0A83, 0x0A8D, 0x0A91, 0x0AA8, 0x0AB0, 0x0AB3, 0x0AB9, 0x0AC5,
  0x0AC9, 0x0ACD, 0x0AD0, 0x0AE3, 0x0AF1, 0x0AFF, 0x0B03, 0x0B0C, 0x0B10, 0x0B28,
  0x0B30, 0x0B33, 0x0B39, 0x0B44, 0x0B48, 0x0B4D, 0x0B57, 0x0B5D, 0x0B63, 0x0B77,
  0x0B83, 0x0B8A, 0x0B90, 0x0B95, 0x0B9A, 0x0B9C, 0x0B9F, 0x0BA4, 0x0BAA, 0x0BB9,
  0x0BC2, 0x0BC8, 0x0BCD, 0x0BD0, 0x0BD7, 0x0BFA, 0x0C0C, 0x0C10, 0x0C28, 0x0C39,
  0x0C44, 0x0C48, 0x0C4D, 0x0C56, 0x0C5A, 0x0C5D, 0x0C63, 0x0C6F, 0x0C8C, 0x0C90,
  0x0CA8, 0x0CB3, 0x0CB9, 0x0CC4, 0x0CC8, 0x0CCD, 0x0CD6, 0x0CDE, 0x0CE3, 0x0CEF,
  0x0CF3, 0x0D0C, 0x0D10, 0x0D44, 0x0D48, 0x0D4F, 0x0D63, 0x0D7F, 0x0D83, 0x0D96,
  0x0DB1, 0x0DBB, 0x0DBD, 0x0DC6, 0x0DCA, 0x0DD4, 0x0DD6, 0x0DDF, 0x0DEF, 0x0DF4,
  0x0E3A, 0x0E3F, 0x0E5B, 0x0E82, 0x0E84, 0x0E8A, 0x0EA3, 0x0EA5, 0x0EBD, 0x0EC4,
  0x0EC6, 0x0ECE, 0x0ED9, 0x0EDF, 0x0F47, 0x0F6C, 0x0F97, 0x0FBC, 0x0FCC, 0x0FD4,
  0x0FD8, 0x0FDA, 0x10C5, 0x10C7, 0x10CD, 0x10FA, 0x10FB, 0x10FF, 0x11FF, 0x1248,
  0x124D, 0x1256, 0x1258, 0x125D, 0x1288, 0x128D, 0x12B0, 0x12B5, 0x12BE, 0x12C0,
  0x12C5, 0x12D6, 0x1310, 0x1315, 0x135A, 0x137C, 0x1399, 0x13F5, 0x13FD, 0x169C,
  0x16EA, 0x16ED, 0x16F8, 0x1715, 0x1734, 0x1736, 0x1753, 0x176C, 0x1770, 0x1773,
  0x17DD, 0x17E9, 0x17F9, 0x1801, 0x1803, 0x1804, 0x1805, 0x1819, 0x1878, 0x18AA,
  0x18F5, 0x191E, 0x192B, 0x193B, 0x1940, 0x196D, 0x1974, 0x19AB, 0x19C9, 0x19DA,
  0x1A1B, 0x1A5E, 0x1A7C, 0x1A89, 0x1A99, 0x1AAD, 0x1ACE, 0x1B4C, 0x1BF3, 0x1C37,
  0x1C49, 0x1C7F, 0x1C8A, 0x1CBA, 0x1CC7, 0x1CD2, 0x1CD3, 0x1CE0, 0x1CE1, 0x1CE8,
  0x1CEC, 0x1CED, 0x1CF3, 0x1CF4, 0x1CF7, 0x1CF9, 0x1CFA, 0x1D25, 0x1D2A, 0x1D2B,
  0x1D5C, 0x1D61, 0x1D65, 0x1D6A, 0x1D77, 0x1D78, 0x1DBE, 0x1DBF, 0x1DFF, 0x1EFF,
  0x1F15, 0x1F1D, 0x1F45, 0x1F4D, 0x1F57, 0x1F59, 0x1F5B, 0x1F5D, 0x1F7D, 0x1FB4,
  0x1FC4, 0x1FD3, 0x1FDB, 0x1FEF, 0x1FF4, 0x1FFE, 0x200B, 0x200D, 0x2064, 0x2070,
  0x2071, 0x207E, 0x207F, 0x208E, 0x209C, 0x20C0, 0x20F0, 0x2125, 0x2126, 0x2129,
  0x212B, 0x2131, 0x2132, 0x214D, 0x214E, 0x215F, 0x2188, 0x218B, 0x2429, 0x244A,
  0x27FF, 0x28FF, 0x2B73, 0x2B95, 0x2BFF, 0x2C5F, 0x2C7F, 0x2CF3, 0x2D25, 0x2D27,
  0x2D2D, 0x2D67, 0x2D70, 0x2D96, 0x2DA6, 0x2DAE, 0x2DB6, 0x2DBE, 0x2DC6, 0x2DCE,
  0x2DD6, 0x2DDE, 0x2DFF, 0x2E5D, 0x2E99, 0x2EF3, 0x2FD5, 0x3004, 0x3005, 0x3006,
  0x3007, 0x3020, 0x3029, 0x302D, 0x302F, 0x3037, 0x303B, 0x303F, 0x3096, 0x309A,
  0x309C, 0x309F, 0x30A0, 0x30FA, 0x30FC, 0x30FF, 0x312F, 0x318E, 0x319F, 0x31BF,
  0x31E5, 0x31EF, 0x31FF, 0x321E, 0x325F, 0x327E, 0x32CF, 0x32FE, 0x32FF, 0x3357,
  0x33FF, 0x4DBF, 0x4DFF, 0x9FFF, 0xA48C, 0xA4C6, 0xA62B, 0xA69F, 0xA6F7, 0xA721,
  0xA787, 0xA78A, 0xA7CD, 0xA7D1, 0xA7D3, 0xA7DC, 0xA7FF, 0xA82C, 0xA839, 0xA877,
  0xA8C5, 0xA8D9, 0xA92D, 0xA92E, 0xA953, 0xA95F, 0xA97C, 0xA9CD, 0xA9CF, 0xA9D9,
  0xA9FE, 0xAA36, 0xAA4D, 0xAA59, 0xAAC2, 0xAAF6, 0xAB06, 0xAB0E, 0xAB16, 0xAB26,
  0xAB2E, 0xAB5A, 0xAB5B, 0xAB64, 0xAB65, 0xAB69, 0xAB6B, 0xABED, 0xABF9, 0xD7A3,
  0xD7C6, 0xD7FB, 0xFA6D, 0xFAD9, 0xFB06, 0xFB17, 0xFB36, 0xFB3C, 0xFB3E, 0xFB41,
  0xFB44, 0xFB4F, 0xFBC2, 0xFD3D, 0xFD3F, 0xFD8F, 0xFDC7, 0xFDCF, 0xFDFF, 0xFE0F,
  0xFE19, 0xFE2D, 0xFE2F, 0xFE52, 0xFE66, 0xFE6B, 0xFE74, 0xFEFC, 0xFEFF, 0xFF20,
  0xFF3A, 0xFF40, 0xFF5A, 0xFF65, 0xFF6F, 0xFF70, 0xFF9D, 0xFF9F, 0xFFBE, 0xFFC7,
  0xFFCF, 0xFFD7, 0xFFDC, 0xFFE6, 0xFFEE, 0xFFFD, 0x1000B, 0x10026, 0x1003A, 0x1003D,
  0x1004D, 0x1005D, 0x100FA, 0x10102, 0x10133, 0x1013F, 0x1018E, 0x1019C, 0x101A0,
  0x101FC, 0x101FD, 0x1029C, 0x102D0, 0x102E0, 0x102FB, 0x10323, 0x1034A, 0x1037A,
  0x1039D, 0x103C3, 0x103D5, 0x1049D, 0x104A9, 0x104D3, 0x104FB, 0x10527, 0x10563,
  0x1057A, 0x1058A, 0x10592, 0x10595, 0x105A1, 0x105B1, 0x105B9, 0x105BC, 0x105F3,
  0x10736, 0x10755, 0x10767, 0x10785, 0x107B0, 0x107BA, 0x10805, 0x10808, 0x10835,
  0x10838, 0x1083C, 0x10855, 0x1089E, 0x108AF, 0x108F2, 0x108F5, 0x1091B, 0x10939,
  0x1093F, 0x109B7, 0x109CF, 0x10A03, 0x10A06, 0x10A13, 0x10A17, 0x10A35, 0x10A3A,
  0x10A48, 0x10A58, 0x10A9F, 0x10AE6, 0x10AF6, 0x10B35, 0x10B55, 0x10B72, 0x10B91,
  0x10B9C, 0x10BAF, 0x10C48, 0x10CB2, 0x10CF2, 0x10D27, 0x10D39, 0x10D65, 0x10D85,
  0x10D8F, 0x10E7E, 0x10EA9, 0x10EAD, 0x10EB1, 0x10EC4, 0x10EFF, 0x10F27, 0x10F59,
  0x10F89, 0x10FCB, 0x10FF6, 0x1104D, 0x11075, 0x110C2, 0x110CD, 0x110E8, 0x110F9,
  0x11134, 0x11147, 0x11176, 0x111DF, 0x111F4, 0x11211, 0x11241, 0x11286, 0x11288,
  0x1128D, 0x1129D, 0x112A9, 0x112EA, 0x112F9, 0x11303, 0x1130C, 0x11310, 0x11328,
  0x11330, 0x11333, 0x11339, 0x1133B, 0x11344, 0x11348, 0x1134D, 0x11350, 0x11357,
  0x11363, 0x1136C, 0x11374, 0x11389, 0x1138B, 0x1138E, 0x113B5, 0x113C0, 0x113C2,
  0x113C5, 0x113CA, 0x113D5, 0x113D8, 0x113E2, 0x1145B, 0x11461, 0x114C7, 0x114D9,
  0x115B5, 0x115DD, 0x11644, 0x11659, 0x1166C, 0x116B9, 0x116C9, 0x116E3, 0x1171A,
  0x1172B, 0x11746, 0x1183B, 0x118F2, 0x11906, 0x11909, 0x11913, 0x11916, 0x11935,
  0x11938, 0x11946, 0x11959, 0x119A7, 0x119D7, 0x119E4, 0x11A47, 0x11AA2, 0x11AF8,
  0x11B09, 0x11BE1, 0x11BF9, 0x11C08, 0x11C36, 0x11C45, 0x11C6C, 0x11C8F, 0x11CA7,
  0x11CB6, 0x11D06, 0x11D09, 0x11D36, 0x11D3A, 0x11D3D, 0x11D47, 0x11D59, 0x11D65,
  0x11D68, 0x11D8E, 0x11D91, 0x11D98, 0x11DA9, 0x11EF8, 0x11F10, 0x11F3A, 0x11F5A,
  0x11FB0, 0x11FF1, 0x12399, 0x1246E, 0x12474, 0x12543, 0x12FF2, 0x13455, 0x143FA,
  0x14646, 0x16139, 0x16A38, 0x16A5E, 0x16A69, 0x16ABE, 0x16AC9, 0x16AED, 0x16AF5,
  0x16B45, 0x16B59, 0x16B61, 0x16B77, 0x16B8F, 0x16D79, 0x16E9A, 0x16F4A, 0x16F87,
  0x16F9F, 0x16FE1, 0x16FE3, 0x16FE4, 0x16FF1, 0x187F7, 0x18CD5, 0x18D08, 0x1AFF3,
  0x1AFFB, 0x1AFFE, 0x1B000, 0x1B11F, 0x1B122, 0x1B132, 0x1B152, 0x1B155, 0x1B167,
  0x1B2FB, 0x1BC6A, 0x1BC7C, 0x1BC88, 0x1BC99, 0x1BC9F, 0x1BCA3, 0x1CCF9, 0x1CEB3,
  0x1CF2D, 0x1CF46, 0x1CFC3, 0x1D0F5, 0x1D126, 0x1D166, 0x1D169, 0x1D17A, 0x1D182,
  0x1D184, 0x1D18B, 0x1D1A9, 0x1D1AD, 0x1D1EA, 0x1D245, 0x1D2D3, 0x1D2F3, 0x1D356,
  0x1D378, 0x1D454, 0x1D49C, 0x1D49F, 0x1D4A2, 0x1D4A6, 0x1D4AC, 0x1D4B9, 0x1D4BB,
  0x1D4C3, 0x1D505, 0x1D50A, 0x1D514, 0x1D51C, 0x1D539, 0x1D53E, 0x1D544, 0x1D546,
  0x1D550, 0x1D6A5, 0x1D7CB, 0x1D7FF, 0x1DA8B, 0x1DA9F, 0x1DAAF, 0x1DF1E, 0x1DF2A,
  0x1E006, 0x1E018, 0x1E021, 0x1E024, 0x1E02A, 0x1E06D, 0x1E08F, 0x1E12C, 0x1E13D,
  0x1E149, 0x1E14F, 0x1E2AE, 0x1E2F9, 0x1E2FF, 0x1E4F9, 0x1E5FA, 0x1E5FF, 0x1E7E6,
  0x1E7EB, 0x1E7EE, 0x1E7FE, 0x1E8C4, 0x1E8D6, 0x1E94B, 0x1E959, 0x1E95F, 0x1ECB4,
  0x1ED3D, 0x1EE03, 0x1EE1F, 0x1EE22, 0x1EE24, 0x1EE27, 0x1EE32, 0x1EE37, 0x1EE39,
  0x1EE3B, 0x1EE42, 0x1EE47, 0x1EE49, 0x1EE4B, 0x1EE4F, 0x1EE52, 0x1EE54, 0x1EE57,
  0x1EE59, 0x1EE5B, 0x1EE5D, 0x1EE5F, 0x1EE62, 0x1EE64, 0x1EE6A, 0x1EE72, 0x1EE77,
  0x1EE7C, 0x1EE7E, 0x1EE89, 0x1EE9B, 0x1EEA3, 0x1EEA9, 0x1EEBB, 0x1EEF1, 0x1F02B,
  0x1F093, 0x1F0AE, 0x1F0BF, 0x1F0CF, 0x1F0F5, 0x1F1AD, 0x1F1FF, 0x1F200, 0x1F202,
  0x1F23B, 0x1F248, 0x1F251, 0x1F265, 0x1F6D7, 0x1F6EC, 0x1F6FC, 0x1F776, 0x1F7D9,
  0x1F7EB, 0x1F7F0, 0x1F80B, 0x1F847, 0x1F859, 0x1F887, 0x1F8AD, 0x1F8BB, 0x1F8C1,
  0x1FA53, 0x1FA6D, 0x1FA7C, 0x1FA89, 0x1FAC6, 0x1FADC, 0x1FAE9, 0x1FAF8, 0x1FB92,
  0x1FBF9, 0x2A6DF, 0x2B739, 0x2B81D, 0x2CEA1, 0x2EBE0, 0x2EE5D, 0x2FA1D, 0x3134A,
  0x323AF, 0xE0001, 0xE007F, 0xE01EF,
]

///|
let script_range_values : FixedArray[Script] = [
  Common,
  Latin,
  Common,
  Latin,
  Common,
  Latin,
  Common,
  Latin,
  Common,
  Latin,
  Common,
  Latin,
  Common,
  Latin,
  Common,
  Latin,
  Common,
  Unknown,
  Common,
  Inherited,
  Greek,
  Common,
  Greek,
  Greek,
  Common,
  Greek,
  Greek,
  Common,
  Greek,
  Common,
  Greek,
  Greek,
  Greek,
  Greek,
  Unknown,
  Greek,
  Cyrillic,
  Inherited,
  Cyrillic,
  Unknown,
  Unknown,
  Unknown,
  Hebrew,
  Hebrew,
  Hebrew,
  Arabic,
  Common,
  Arabic,
  Common,
  Arabic,
  Common,
  Arabic,
  Common,
  Arabic,
  Common,
  Arabic,
  Inherited,
  Arabic,
  Inherited,
  Arabic,
  Common,
  Arabic,
  Unknown,
  Unknown,
  Unknown,
  Arabic,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Arabic,
  Arabic,
  Arabic,
  Common,
  Arabic,
  Unknown,
  Inherited,
  Unknown,
  Common,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Common,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Common,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Common,
  Unknown,
  Hangul,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Common,
  Unknown,
  Unknown,
  Unknown,
  Common,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Common,
  Unknown,
  Common,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Inherited,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Cyrillic,
  Unknown,
  Unknown,
  Inherited,
  Common,
  Inherited,
  Common,
  Inherited,
  Common,
  Inherited,
  Common,
  Inherited,
  Common,
  Inherited,
  Common,
  Latin,
  Greek,
  Cyrillic,
  Latin,
  Greek,
  Latin,
  Greek,
  Latin,
  Cyrillic,
  Latin,
  Greek,
  Inherited,
  Latin,
  Greek,
  Greek,
  Greek,
  Greek,
  Greek,
  Greek,
  Greek,
  Greek,
  Greek,
  Greek,
  Greek,
  Greek,
  Greek,
  Greek,
  Greek,
  Greek,
  Common,
  Inherited,
  Common,
  Common,
  Latin,
  Common,
  Latin,
  Common,
  Latin,
  Common,
  Inherited,
  Common,
  Greek,
  Common,
  Latin,
  Common,
  Latin,
  Common,
  Latin,
  Common,
  Latin,
  Common,
  Common,
  Common,
  Common,
  Unknown,
  Common,
  Common,
  Common,
  Unknown,
  Latin,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Cyrillic,
  Common,
  Han,
  Han,
  Han,
  Common,
  Han,
  Common,
  Han,
  Common,
  Han,
  Inherited,
  Hangul,
  Common,
  Han,
  Common,
  Hiragana,
  Inherited,
  Common,
  Hiragana,
  Common,
  Katakana,
  Common,
  Katakana,
  Unknown,
  Hangul,
  Common,
  Unknown,
  Common,
  Common,
  Katakana,
  Hangul,
  Common,
  Hangul,
  Common,
  Katakana,
  Common,
  Katakana,
  Common,
  Han,
  Common,
  Han,
  Unknown,
  Unknown,
  Unknown,
  Cyrillic,
  Unknown,
  Common,
  Latin,
  Common,
  Latin,
  Latin,
  Latin,
  Latin,
  Latin,
  Unknown,
  Common,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Common,
  Unknown,
  Unknown,
  Hangul,
  Unknown,
  Common,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Latin,
  Common,
  Latin,
  Greek,
  Latin,
  Common,
  Unknown,
  Unknown,
  Hangul,
  Hangul,
  Hangul,
  Han,
  Han,
  Latin,
  Unknown,
  Hebrew,
  Hebrew,
  Hebrew,
  Hebrew,
  Hebrew,
  Hebrew,
  Arabic,
  Arabic,
  Common,
  Arabic,
  Arabic,
  Arabic,
  Arabic,
  Inherited,
  Common,
  Inherited,
  Cyrillic,
  Common,
  Common,
  Common,
  Arabic,
  Arabic,
  Common,
  Common,
  Latin,
  Common,
  Latin,
  Common,
  Katakana,
  Common,
  Katakana,
  Common,
  Hangul,
  Hangul,
  Hangul,
  Hangul,
  Hangul,
  Common,
  Common,
  Common,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Common,
  Common,
  Common,
  Greek,
  Common,
  Greek,
  Common,
  Inherited,
  Unknown,
  Unknown,
  Inherited,
  Common,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Latin,
  Latin,
  Latin,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Arabic,
  Unknown,
  Unknown,
  Unknown,
  Arabic,
  Arabic,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Inherited,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Han,
  Unknown,
  Han,
  Unknown,
  Unknown,
  Unknown,
  Katakana,
  Katakana,
  Katakana,
  Katakana,
  Hiragana,
  Katakana,
  Hiragana,
  Hiragana,
  Katakana,
  Katakana,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Common,
  Common,
  Common,
  Inherited,
  Inherited,
  Common,
  Common,
  Common,
  Common,
  Inherited,
  Common,
  Inherited,
  Common,
  Inherited,
  Common,
  Inherited,
  Common,
  Greek,
  Common,
  Common,
  Common,
  Common,
  Common,
  Common,
  Common,
  Common,
  Common,
  Common,
  Common,
  Common,
  Common,
  Common,
  Common,
  Common,
  Common,
  Common,
  Common,
  Common,
  Common,
  Common,
  Common,
  Common,
  Common,
  Unknown,
  Unknown,
  Unknown,
  Latin,
  Latin,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Cyrillic,
  Cyrillic,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Unknown,
  Common,
  Common,
  Arabic,
  Arabic,
  Arabic,
  Arabic,
  Arabic,
  Arabic,
  Arabic,
  Arabic,
  Arabic,
  Arabic,
  Arabic,
  Arabic,
  Arabic,
  Arabic,
  Arabic,
  Arabic,
  Arabic,
  Arabic,
  Arabic,
  Arabic,
  Arabic,
  Arabic,
  Arabic,
  Arabic,
  Arabic,
  Arabic,
  Arabic,
  Arabic,
  Arabic,
  Arabic,
  Arabic,
  Arabic,
  Arabic,
  Arabic,
  Common,
  Common,
  Common,
  Common,
  Common,
  Common,
  Common,
  Common,
  Hiragana,
  Common,
  Common,
  Common,
  Common,
  Common,
  Common,
  Common,
  Common,
  Common,
  Common,
  Common,
  Common,
  Common,
  Common,
  Common,
  Common,
  Common,
  Common,
  Common,
  Common,
  Common,
  Common,
  Common,
  Common,
  Common,
  Common,
  Common,
  Common,
  Common,
  Han,
  Han,
  Han,
  Han,
  Han,
  Han,
  Han,
  Han,
  Han,
  Common,
  Common,
  Inherited,
]

///|
pub fn binary_search_script(cp : Int32) -> Script {
  let len = script_range_starts.length()
  let mut low = 0
  let mut high = len - 1
  while low <= high {
    let mid = (low + high) / 2
    let s = script_range_starts[mid]
    let e = script_range_ends[mid]
    if cp >= s && cp <= e {
      return script_range_values[mid]
    } else if s < cp {
      low = mid + 1
    } else {
      high = mid - 1
    }
  }
  Script::Unknown
}