diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/adldata.cpp | 2082 | ||||
-rw-r--r-- | src/adlmidi.cpp | 255 | ||||
-rw-r--r-- | src/adlmidi_midiplay.cpp | 70 | ||||
-rw-r--r-- | src/adlmidi_opl3.cpp | 151 | ||||
-rw-r--r-- | src/adlmidi_private.hpp | 33 | ||||
-rw-r--r-- | src/chips/dosbox/dbopl.cpp | 143 | ||||
-rw-r--r-- | src/chips/dosbox/dbopl.h | 6 | ||||
-rw-r--r-- | src/chips/dosbox_opl3.cpp | 2 | ||||
-rw-r--r-- | src/cvt_xmi2mid.hpp | 2 | ||||
-rw-r--r-- | src/midi_sequencer.hpp | 13 | ||||
-rw-r--r-- | src/midi_sequencer_impl.hpp | 107 | ||||
-rw-r--r-- | src/wopl/wopl_file.c | 10 |
12 files changed, 1518 insertions, 1356 deletions
diff --git a/src/adldata.cpp b/src/adldata.cpp index 6606e1f..64280aa 100644 --- a/src/adldata.cpp +++ b/src/adldata.cpp @@ -4,7 +4,7 @@ * FROM A NUMBER OF SOURCES, MOSTLY PC GAMES. * PREPROCESSED, CONVERTED, AND POSTPROCESSED OFF-SCREEN. */ -const adldata adl[4537] = +const adldata adl[4528] = { // ,---------+-------- Wave select settings // | ,-------ч-+------ Sustain/release rates // | | ,-----ч-ч-+---- Attack/decay rates @@ -3969,8 +3969,8 @@ const adldata adl[4537] = { 0x185DC85,0x055F401, 0x91,0x0E, 0x3, +0 }, { 0x0F6E181,0x0F6E798, 0x00,0x2B, 0x1, +0 }, { 0x0F4F194,0x0A7E98A, 0x00,0x15, 0x1, +0 }, - { 0x0B3D407,0x0B4C202, 0xA0,0x00, 0xA, -12 }, - { 0x082D307,0x0E3A302, 0x58,0x80, 0xB, +0 }, + { 0x0B3D407,0x0B4C202, 0x9A,0x00, 0xA, -12 }, + { 0x082D307,0x0E3A302, 0x9A,0x00, 0xA, -12 }, { 0x156940A,0x132F411, 0xA7,0x05, 0x5, +0 }, { 0x027A2A0,0x023A522, 0x85,0x9E, 0x7, +0 }, { 0x02AA5A2,0x02AA168, 0x80,0x8F, 0x7, +0 }, @@ -3982,7 +3982,8 @@ const adldata adl[4537] = { 0x013C321,0x00B7022, 0x22,0x00, 0xE, +0 }, { 0x0F4F505,0x0F9F200, 0x29,0x1E, 0x6, +12 }, { 0x0F1F101,0x0F7F100, 0x2F,0x00, 0x6, +0 }, - { 0x0F4F405,0x0F6F100, 0x20,0x19, 0x6, +12 }, + { 0x0F4F405,0x0F6F110, 0x29,0x19, 0x6, +12 }, + { 0x0F1F111,0x0F7F100, 0x31,0x00, 0x6, +0 }, { 0x19F53C8,0x07FFAE4, 0x1C,0x03, 0x9, +0 }, { 0x0049420,0x0A5C523, 0x2A,0x24, 0xE, +12 }, { 0x0F9F200,0x0F8F101, 0x21,0x00, 0xE, +0 }, @@ -4005,15 +4006,20 @@ const adldata adl[4537] = { 0x0049100,0x2045240, 0x0F,0x00, 0x9, +0 }, { 0x0157620,0x0368261, 0x94,0x00, 0xC, +12 }, { 0x02661B1,0x0276171, 0xD3,0x80, 0xD, +0 }, + { 0x118543A,0x5177472, 0x1E,0x00, 0x4, -12 }, { 0x04A6121,0x00B7F21, 0x9F,0x00, 0xE, +0 }, { 0x00A65A1,0x0067F61, 0xA2,0x00, 0xF, +0 }, { 0x0277221,0x0067F21, 0x16,0x05, 0xC, +0 }, { 0x0866131,0x0D6C261, 0x1A,0x00, 0xE, +0 }, - { 0x0678221,0x0179222, 0x17,0x00, 0xE, +0 }, + { 0x0866131,0x0D6C261, 0x16,0x00, 0xF, +0 }, + { 0x0678221,0x0179222, 0x1A,0x00, 0xE, +0 }, + { 0x0678221,0x0179222, 0x15,0x0A, 0x7, +0 }, { 0x00AD961,0x006A861, 0x28,0x1E, 0xE, +0 }, { 0x0069A21,0x00ACF24, 0x25,0x00, 0xE, +0 }, { 0x02A9B32,0x0177221, 0x90,0x00, 0x4, +0 }, { 0x01CB632,0x01B66E1, 0x92,0x82, 0x5, +0 }, + { 0x00457F2,0x0375761, 0xA8,0x00, 0xE, +0 }, + { 0x2545C73,0x0776821, 0x00,0x0D, 0xE, +0 }, { 0x00FFF61,0x00FFF22, 0x1C,0x00, 0xE, +0 }, { 0x00FFF21,0x009CF62, 0x1C,0x00, 0xF, +0 }, { 0x0559622,0x0187421, 0x46,0x80, 0xF, +0 }, @@ -4023,31 +4029,50 @@ const adldata adl[4537] = { 0x2164460,0x00450E1, 0xAB,0x01, 0xB, +0 }, { 0x0022A55,0x0F34212, 0x97,0x86, 0x1, +0 }, { 0x1623524,0x1023171, 0x20,0x05, 0x1, +0 }, + { 0x155F261,0x0A5F242, 0x4D,0x00, 0x0, +0 }, + { 0x2343161,0x00532A1, 0x9D,0x80, 0xD, +0 }, { 0x011A131,0x0137D16, 0x87,0x08, 0x1, +0 }, - { 0x0F0A101,0x0437516, 0x0C,0x03, 0x1, +0 }, - { 0x053F201,0x052F317, 0x8F,0x09, 0x5, +0 }, + { 0x1127533,0x4F4F211, 0x58,0x03, 0x6, +0 }, + { 0x3F0F014,0x6F7F611, 0x40,0x43, 0xA, +0 }, + { 0x033F201,0x373F402, 0xD1,0x8A, 0x0, +0 }, + { 0x6A7F907,0x229A904, 0x1A,0x00, 0xA, -12 }, { 0x055C902,0x024A601, 0x1A,0x05, 0xD, +0 }, - { 0x0175E31,0x20C7B21, 0x18,0x08, 0x7, +0 }, + { 0x1397931,0x2099B22, 0x80,0x00, 0x6, +0 }, + { 0x2137931,0x1079B22, 0x42,0xC2, 0xA, +0 }, { 0x119FFA1,0x0089024, 0x0C,0x11, 0x7, +0 }, { 0x004F007,0x004F081, 0x51,0x13, 0x7, +0 }, { 0x026EC07,0x016F801, 0x15,0x00, 0xA, +0 }, { 0x001FF17,0x0057A12, 0x1C,0x0B, 0xB, +0 }, + { 0x4046306,0x005A902, 0xCA,0x08, 0x6, +0 }, + { 0x0045413,0x005A601, 0x51,0x08, 0xA, +0 }, { 0x09FF831,0x004FF10, 0x8B,0x05, 0x7, +0 }, + { 0x5C8FB00,0x0B7E601, 0x00,0x00, 0x0, +0 }, + { 0x2F0F00F,0x0F8F800, 0x00,0x40, 0xE, +12 }, { 0x001FF0E,0x20F2F01, 0x00,0x0D, 0xE, +0 }, - { 0x2077405,0x106F403, 0x80,0x0F, 0xF, +0 }, + { 0x0534313,0x7574A1F, 0x20,0x03, 0xE, -14 }, { 0x003FF15,0x0934511, 0x09,0x1F, 0xF, +0 }, - { 0x000200E,0x0022F0E, 0x00,0x0F, 0xF, +0 }, + { 0x200C327,0x6021300, 0x80,0x12, 0xE, -23 }, + { 0x200C32B,0x6021300, 0x80,0x12, 0xE, -24 }, { 0x060F209,0x072F214, 0x4F,0x19, 0xB, +0 }, { 0x1111EF0,0x11311E2, 0x00,0xC5, 0xF, +0 }, { 0x000FFEE,0x30318EE, 0x00,0x00, 0xE, +0 }, + { 0x059F802,0x01CF600, 0x11,0x00, 0xC, +0 }, + { 0x2159506,0x65AB701, 0x00,0x04, 0xE, +0 }, + { 0x10F5F81,0x0164611, 0x00,0x0A, 0x6, +0 }, + { 0x00F5F01,0x20F5F00, 0x00,0x00, 0x8, +0 }, + { 0x0D6D725,0x3A9A909, 0x1F,0x00, 0xE, -9 }, + { 0x0F0A00F,0x0F8F80F, 0x80,0x8C, 0xF, +0 }, + { 0x2FDFD00,0x6FAFA00, 0x00,0x00, 0xE, +0 }, + { 0x4F1F103,0x6FAFA07, 0x00,0x00, 0x8, +0 }, + { 0x0F0F007,0x2F6F60F, 0x27,0x00, 0x0, +21 }, { 0x0F7B710,0x005F011, 0x42,0x00, 0x8, +0 }, { 0x6EF8801,0x608B502, 0x0D,0x00, 0x0, +0 }, { 0x0F1F10F,0x007840F, 0x00,0x08, 0xC, +12 }, { 0x6EF8800,0x608F502, 0x13,0x00, 0x0, +8 }, { 0x0F1D101,0x0078400, 0x00,0x00, 0xE, +1 }, - { 0x254F307,0x307F905, 0x04,0x0B, 0x6, -5 }, - { 0x254F307,0x207F905, 0x04,0x0B, 0x8, +0 }, - { 0x25CD808,0x32B8A06, 0x04,0x08, 0xC, +0 }, + { 0x254F307,0x307F905, 0x04,0x08, 0x6, -5 }, + { 0x254F307,0x207F905, 0x04,0x08, 0x8, +0 }, + { 0x254D307,0x3288905, 0x04,0x03, 0xA, -5 }, { 0x2F2E327,0x3F5C525, 0x04,0x08, 0xA, -5 }, { 0x2F2F326,0x2F5C525, 0x04,0x08, 0x8, +0 }, { 0x292F108,0x354F201, 0x00,0x08, 0x8, +12 }, @@ -4057,17 +4082,24 @@ const adldata adl[4537] = { 0x251F206,0x263C504, 0x04,0x09, 0xA, +0 }, { 0x241F287,0x353B502, 0x05,0x09, 0xA, +1 }, { 0x292F108,0x354F201, 0x00,0x03, 0x8, +12 }, - { 0x456FB02,0x017F700, 0x81,0x00, 0x0, +12 }, - { 0x556FA01,0x117F701, 0x00,0x0D, 0x6, +10 }, - { 0x556FB02,0x117F701, 0x81,0x0D, 0x6, +10 }, - { 0x106F680,0x016F610, 0x00,0x00, 0xC, +0 }, - { 0x20F6F00,0x20F6F00, 0x00,0x00, 0x0, +0 }, - { 0x106F680,0x016F610, 0x00,0x00, 0x6, +0 }, - { 0x20F4F00,0x20F4F00, 0x00,0x00, 0x6, +0 }, - { 0x1DC5D01,0x06FF79F, 0x0B,0x00, 0xA, +12 }, - { 0x1C7C900,0x05FF49F, 0x07,0x00, 0xA, +12 }, + { 0x456FB02,0x017F700, 0x81,0x00, 0xC, +12 }, + { 0x556FA01,0x117F701, 0x00,0x0D, 0xA, +10 }, + { 0x556FB02,0x117F701, 0x81,0x0D, 0xA, +10 }, + { 0x0F00000,0x0F00000, 0x3F,0x3F, 0xC, +0 }, + { 0x000F020,0x40A8A00, 0x0A,0x00, 0xE, +0 }, + { 0x70F5F20,0x70F4F00, 0x00,0x00, 0x2, -12 }, + { 0x0D1F815,0x078F512, 0x44,0x00, 0x8, +12 }, + { 0x2D1F213,0x098F614, 0x9D,0x00, 0x0, +0 }, + { 0x2D1F213,0x098F614, 0x9D,0x21, 0x0, -2 }, + { 0x0985900,0x039870F, 0x07,0x00, 0x8, +13 }, + { 0x2F3F307,0x09C9B0F, 0x1D,0x00, 0x0, +13 }, + { 0x09C4B00,0x43A6705, 0x21,0x00, 0xC, +13 }, + { 0x0F7F907,0x2987805, 0x1C,0x00, 0x0, +13 }, { 0x3F0E00A,0x0F7F21F, 0x7C,0x40, 0x8, +0 }, { 0x3E0F50A,0x0FAF31F, 0x7C,0x40, 0x9, +0 }, + { 0x227A305,0x36A560A, 0x87,0x08, 0xE, +12 }, + { 0x247C345,0x3697809, 0x87,0x08, 0xE, +12 }, + { 0x037A309,0x06DF904, 0x11,0x00, 0xE, +0 }, { 0x1F5F213,0x0F5F111, 0xC6,0x0A, 0x0, +0 }, { 0x019F603,0x0F4F212, 0x30,0x10, 0xF, +0 }, { 0x1069FB2,0x10F94B0, 0xC0,0x86, 0x9, +0 }, @@ -4226,7 +4258,6 @@ const adldata adl[4537] = { 0x0235271,0x0198161, 0x1E,0x08, 0xE, +0 }, { 0x0235361,0x0196161, 0x1D,0x03, 0xE, +0 }, { 0x0155331,0x0378261, 0x94,0x00, 0xA, +0 }, - { 0x118543A,0x5177472, 0x1E,0x00, 0x4, -12 }, { 0x0365121,0x0257221, 0x1E,0x08, 0x0, +0 }, { 0x2844521,0x20592A0, 0x23,0x03, 0x0, +0 }, { 0x0578321,0x117C021, 0x19,0x03, 0xC, +0 }, @@ -4250,8 +4281,6 @@ const adldata adl[4537] = { 0x2176522,0x0277421, 0x5A,0x00, 0x6, +0 }, { 0x1267532,0x0166531, 0x8D,0x05, 0x4, +0 }, { 0x2F0F011,0x0987801, 0x03,0x17, 0xA, +0 }, - { 0x00457F2,0x0375761, 0xA8,0x00, 0xE, +0 }, - { 0x2545C73,0x0776821, 0x00,0x0D, 0xE, +0 }, { 0x5543737,0x25D67A1, 0x28,0x00, 0x8, +0 }, { 0x6243371,0x46D6331, 0x20,0x00, 0x6, +0 }, { 0x00F31D1,0x0053271, 0xC7,0x00, 0xB, +0 }, @@ -4304,35 +4333,22 @@ const adldata adl[4537] = { 0x2645321,0x2445521, 0x15,0x0D, 0xA, +0 }, { 0x0B37121,0x5F48221, 0x16,0x08, 0x2, +0 }, { 0x2B37102,0x5F48221, 0x90,0x08, 0x6, +0 }, - { 0x1127533,0x4F4F211, 0x58,0x03, 0x6, +0 }, - { 0x3F0F014,0x6F7F611, 0x40,0x43, 0xA, +0 }, - { 0x033F201,0x373F402, 0xD1,0x8A, 0x0, +0 }, - { 0x6A7F907,0x229A904, 0x1A,0x00, 0xA, -12 }, { 0x5E2F321,0x6E4F523, 0x1B,0x08, 0x8, +0 }, { 0x455F71C,0x0D68501, 0xA3,0x08, 0x6, +0 }, { 0x055F718,0x0D6E501, 0x23,0x08, 0x0, +0 }, - { 0x1397931,0x2099B22, 0x80,0x00, 0x6, +0 }, - { 0x2137931,0x1079B22, 0x42,0xC2, 0xA, +0 }, { 0x302A130,0x0266221, 0x1E,0x00, 0xE, +0 }, { 0x0136031,0x1169131, 0x12,0x80, 0x8, +0 }, { 0x032A115,0x172B212, 0x00,0x80, 0x1, +5 }, { 0x001E79A,0x067961C, 0x81,0x00, 0x4, +0 }, - { 0x4046306,0x005A902, 0xCA,0x08, 0x6, +0 }, - { 0x0045413,0x005A601, 0x51,0x08, 0xA, +0 }, { 0x4D1F214,0x098F715, 0xA0,0x00, 0xC, +0 }, { 0x008F312,0x004F600, 0x08,0xC8, 0x4, -12 }, { 0x27CFA01,0x004F200, 0x08,0x08, 0x0, +0 }, - { 0x5C8FB00,0x0B7E601, 0x00,0x00, 0x0, +0 }, - { 0x2F0F00F,0x0F8F800, 0x00,0x40, 0xE, +12 }, { 0x518F890,0x0E7F310, 0x00,0x00, 0x8, -12 }, { 0x250F610,0x0E7F510, 0x00,0xC8, 0x6, +0 }, { 0x2114109,0x51D2101, 0x05,0x80, 0xA, +0 }, { 0x2114108,0x31D2101, 0x05,0x80, 0xA, +12 }, - { 0x0534313,0x7574A1F, 0x20,0x03, 0xE, -14 }, { 0x00437D2,0x0343471, 0xA1,0x07, 0xC, +0 }, { 0x0F0F00C,0x0F66700, 0x00,0xCD, 0xE, +0 }, - { 0x200C327,0x6021300, 0x80,0x12, 0xE, -23 }, - { 0x200C32B,0x6021300, 0x80,0x12, 0xE, -24 }, { 0x003EBD7,0x06845D8, 0xD4,0x00, 0x7, +12 }, { 0x62FDA20,0x614B009, 0x42,0x48, 0x4, -24 }, { 0x62FDA20,0x614B009, 0x82,0x48, 0x4, -20 }, @@ -4341,15 +4357,7 @@ const adldata adl[4537] = { 0x200832F,0x6044020, 0x80,0x00, 0xE, -36 }, { 0x200832F,0x6044020, 0x80,0x00, 0xE, -35 }, { 0x2305431,0x6E7F600, 0x00,0x00, 0xE, +0 }, - { 0x059F802,0x01CF600, 0x11,0x00, 0xC, +0 }, - { 0x2159506,0x65AB701, 0x00,0x04, 0xE, +0 }, - { 0x10F5F81,0x0164611, 0x00,0x0A, 0x6, +0 }, - { 0x00F5F01,0x20F5F00, 0x00,0x00, 0x8, +0 }, - { 0x0D6D725,0x3A9A909, 0x1F,0x00, 0xE, -9 }, { 0x0F0A00F,0x0F8F80F, 0x00,0x0C, 0xE, +0 }, - { 0x2FDFD00,0x6FAFA00, 0x00,0x00, 0xE, +0 }, - { 0x4F1F103,0x6FAFA07, 0x00,0x00, 0x8, +0 }, - { 0x0F0F007,0x2F6F60F, 0x27,0x00, 0x0, +21 }, { 0x559FA00,0x047F800, 0x00,0x00, 0x4, +0 }, { 0x3F1F102,0x0078400, 0x00,0x26, 0xC, +0 }, { 0x048FA00,0x008F900, 0x00,0x00, 0x6, +12 }, @@ -4365,7 +4373,6 @@ const adldata adl[4537] = { 0x255F308,0x308F909, 0x04,0x08, 0x8, +4 }, { 0x006C604,0x007C604, 0x08,0x08, 0x1, +0 }, { 0x201F312,0x057AB09, 0x03,0x07, 0xC, +12 }, - { 0x254D307,0x3288905, 0x04,0x03, 0xA, -5 }, { 0x0015500,0x007C716, 0x0C,0x00, 0x0, +0 }, { 0x201F312,0x057AB09, 0x00,0x07, 0xC, +12 }, { 0x0015500,0x007C718, 0x0C,0x00, 0x0, +0 }, @@ -4393,9 +4400,6 @@ const adldata adl[4537] = { 0x0A5F7E9,0x0D8994A, 0x29,0x08, 0xC, +10 }, { 0x2A8F9E2,0x0779642, 0x1E,0x00, 0xE, +8 }, { 0x0A5F7E9,0x5D8994A, 0x08,0x00, 0xC, +0 }, - { 0x456FB02,0x017F700, 0x81,0x00, 0xC, +12 }, - { 0x556FA01,0x117F701, 0x00,0x0D, 0xA, +10 }, - { 0x556FB02,0x117F701, 0x81,0x0D, 0xA, +10 }, { 0x367FE06,0x668F701, 0x09,0x08, 0x8, +12 }, { 0x367FD10,0x098F901, 0x00,0x0D, 0x8, +6 }, { 0x367FE05,0x678F701, 0x09,0x08, 0x8, +12 }, @@ -4403,25 +4407,12 @@ const adldata adl[4537] = { 0x098600F,0x3FC8590, 0x08,0xC0, 0xE, +12 }, { 0x009F020,0x27DA788, 0x25,0x00, 0x0, +12 }, { 0x00FC020,0x22DA388, 0x25,0x00, 0xA, +12 }, - { 0x0F00000,0x0F00000, 0x3F,0x3F, 0xC, +0 }, - { 0x000F020,0x40A8A00, 0x0A,0x00, 0xE, +0 }, - { 0x70F5F20,0x70F4F00, 0x00,0x00, 0x2, -12 }, - { 0x0D1F815,0x078F512, 0x44,0x00, 0x8, +12 }, - { 0x2D1F213,0x098F614, 0x9D,0x00, 0x0, +0 }, - { 0x2D1F213,0x098F614, 0x9D,0x21, 0x0, -2 }, - { 0x0985900,0x039870F, 0x07,0x00, 0x8, +13 }, - { 0x2F3F307,0x09C9B0F, 0x1D,0x00, 0x0, +13 }, - { 0x09C4B00,0x43A6705, 0x21,0x00, 0xC, +13 }, - { 0x0F7F907,0x2987805, 0x1C,0x00, 0x0, +13 }, { 0x160F2C6,0x07AF4D4, 0x4F,0x80, 0x8, +12 }, { 0x160F286,0x0B7F294, 0x4F,0x80, 0x8, +12 }, - { 0x227A305,0x36A560A, 0x87,0x08, 0xE, +12 }, - { 0x247C345,0x3697809, 0x87,0x08, 0xE, +12 }, { 0x4755406,0x3667601, 0x87,0x08, 0x6, +12 }, { 0x275A346,0x3667601, 0x87,0x08, 0x6, +12 }, { 0x6E4840B,0x6E4B409, 0x12,0x09, 0x1, +0 }, { 0x6E4440B,0x6E46407, 0x21,0x13, 0x1, +3 }, - { 0x037A309,0x06DF904, 0x11,0x00, 0xE, +0 }, { 0x6F9A902,0x2F7C801, 0x00,0x40, 0x8, +0 }, { 0x4F9F901,0x4F7C713, 0x1F,0x48, 0x0, -7 }, { 0x4B7C720,0x1F3F300, 0x0B,0x00, 0x0, +0 }, @@ -4554,7 +4545,7 @@ const adldata adl[4537] = { 0x07BF003,0x07BF502, 0x8A,0x80, 0x8, +0 }, { 0x07BF003,0x07BF402, 0x8A,0x80, 0x8, +0 }, }; -const struct adlinsdata adlins[4815] = +const struct adlinsdata adlins[4678] = { { 0, 0, 0, 0, 9006, 133, 0, 0 }, { 1, 1, 0, 0, 9206, 146, 0, 0 }, @@ -4741,11 +4732,11 @@ const struct adlinsdata adlins[4815] = { 174, 175, 0, 4, 6913, 0, 0, 0 }, { 176, 177, 0, 4, 4873, 0, 0, 0 }, { 178, 178, 0, 0, 40000, 0, 0, 0 }, - { 179, 180, 0, 4, 4653, 433, 0, 0 }, + { 179, 180, 0, 4, 4626, 433, 0, 0 }, { 181, 181, 0, 0, 2280, 746, 0, 0 }, { 182, 182, 0, 0, 40000, 0, 0, 0 }, - { 183, 184, 0, 4, 626, 0, 0, 0 }, - { 185, 186, 0, 4, 4653, 1546, 0, 0 }, + { 183, 184, 0, 4, 620, 0, 0, 0 }, + { 185, 186, 0, 4, 4626, 1546, 0, 0 }, { 187, 187, 0, 0, 1166, 400, 0, 0 }, { 188, 189, 0, 4, 40000, 60, 0, 0 }, { 190, 191, 0, 4, 40000, 60, 0, 0 }, @@ -4755,27 +4746,27 @@ const struct adlinsdata adlins[4815] = { 197, 198, 0, 4, 40000, 86, 0, 0 }, { 199, 200, 0, 4, 40000, 66, 0, 0 }, { 201, 202, 0, 4, 3713, 100, 0, 0 }, - { 203, 204, 0, 4, 14753, 126, 0, 0 }, - { 205, 206, 0, 4, 9286, 146, 0, 0 }, - { 207, 208, 0, 4, 14713, 126, 0, 0 }, - { 209, 210, 0, 4, 4653, 0, 0, 0 }, + { 203, 204, 0, 4, 14686, 126, 0, 0 }, + { 205, 206, 0, 4, 9233, 153, 0, 0 }, + { 207, 208, 0, 4, 14640, 133, 0, 0 }, + { 209, 210, 0, 4, 4626, 0, 0, 0 }, { 211, 212, 0, 4, 40000, 66, 0, 0 }, { 213, 213, 0, 0, 40000, 73, 0, 0 }, - { 214, 215, 0, 4, 626, 0, 0, 0 }, - { 216, 217, 0, 4, 4066, 100, 0, 0 }, - { 218, 219, 0, 4, 14586, 193, 0, 0 }, + { 214, 215, 0, 4, 620, 0, 0, 0 }, + { 216, 217, 0, 4, 4060, 100, 0, 0 }, + { 218, 219, 0, 4, 14513, 193, 0, 0 }, { 220, 221, 0, 4, 2813, 106, 0, 0 }, - { 222, 223, 0, 4, 500, 0, 0, 0 }, + { 222, 223, 0, 4, 493, 0, 0, 0 }, { 224, 224, 0, 0, 40000, 0, 0, 0 }, { 225, 226, 0, 4, 7993, 93, 0, 0 }, { 227, 227, 0, 0, 40000, 0, 0, 0 }, { 228, 228, 0, 0, 40000, 133, 0, 0 }, - { 229, 230, 0, 4, 720, 213, 0, 0 }, + { 229, 230, 0, 4, 713, 213, 0, 0 }, { 231, 232, 0, 4, 40000, 146, 0, 0 }, { 233, 234, 0, 4, 40000, 0, 0, 0 }, - { 235, 236, 0, 4, 1000, 340, 0, 0 }, - { 235, 237, 0, 4, 3280, 1120, 0, 0 }, - { 46, 238, 0, 4, 6920, 0, 0, 0 }, + { 235, 236, 0, 4, 993, 340, 0, 0 }, + { 235, 237, 0, 4, 3260, 1120, 0, 0 }, + { 46, 238, 0, 4, 6720, 0, 0, 0 }, { 239, 240, 0, 4, 40000, 140, 0, 0 }, { 241, 242, 0, 4, 40000, 146, 0, 0 }, { 243, 243, 0, 0, 40000, 100, 0, 0 }, @@ -4820,16 +4811,16 @@ const struct adlinsdata adlins[4815] = { 308, 308, 0, 0, 1186, 406, 0, 0 }, { 309, 309, 0, 0, 40000, 1306, 0, 0 }, { 310, 310, 0, 0, 40000, 933, 0, 0 }, - { 311, 312, 0, 4, 9146, 240, 0, 0 }, - { 313, 314, 0, 4, 7306, 326, 0, 0 }, - { 315, 316, 0, 4, 3586, 326, 0, 0 }, - { 317, 318, 0, 4, 7180, 0, 0, 0 }, - { 107, 319, 0, 4, 1180, 406, 0, 0 }, + { 311, 312, 0, 4, 9100, 240, 0, 0 }, + { 313, 314, 0, 4, 7280, 326, 0, 0 }, + { 315, 316, 0, 4, 3553, 326, 0, 0 }, + { 317, 318, 0, 4, 6966, 0, 0, 0 }, + { 107, 319, 0, 4, 1160, 406, 0, 0 }, { 108, 320, 0, 4, 40000, 66, 0, 0 }, { 109, 321, 0, 4, 720, 213, 0, 0 }, { 322, 323, 0, 4, 40000, 73, 0, 0 }, { 324, 325, 0, 4, 613, 246, 0, 0 }, - { 326, 327, 0, 4, 1213, 386, 0, 0 }, + { 326, 327, 0, 4, 1206, 386, 0, 0 }, { 328, 328, 0, 0, 173, 106, 0, 0 }, { 329, 329, 0, 0, 966, 333, 0, 0 }, { 330, 331, 0, 4, 1906, 320, 0, 0 }, @@ -4880,12 +4871,12 @@ const struct adlinsdata adlins[4815] = { 372, 372, 79, 0, 2540, 1040, 0, 0 }, { 135, 135, 14, 0, 9213, 3066, 0, 0 }, { 373, 373, 46, 0, 1093, 60, 0, 0 }, - { 374, 375,129, 4, 1200, 433, 0, 0 }, + { 374, 375,129, 4, 1193, 433, 0, 0 }, { 376, 376, 58, 0, 1600, 726, 0, 0 }, { 377, 377,164, 0, 526, 820, 0, 0 }, { 378, 378,142, 0, 9153, 3073, 0, 0 }, { 379, 379, 9, 0, 200, 100, 0, 0 }, - { 380, 381, 35, 4, 2353, 813, 0, 0 }, + { 380, 381, 35, 4, 2340, 806, 0, 0 }, { 382, 382, 28, 0, 1060, 120, 0, 0 }, { 383, 383, 46, 0, 953, 20, 0, 0 }, { 384, 384, 60, 0, 440, 160, 0, 0 }, @@ -6108,13 +6099,13 @@ const struct adlinsdata adlins[4815] = { 752, 752, 15, 0, 200, 20, 0, 0 }, { 752, 752, 17, 0, 206, 20, 0, 0 }, {1439,1440, 0, 4, 40000, 0, 0, 0 }, - {1441,1442, 0, 4, 7360, 200, 0, 0 }, - {1443,1444, 0, 4, 11840, 320, 0, 0 }, + {1441,1442, 0, 4, 7320, 193, 0, 0 }, + {1443,1444, 0, 4, 11833, 320, 0, 0 }, {1445,1446, 0, 4, 9920, 326, 0, 0 }, - {1447,1448, 0, 4, 10213, 0, 0, 0 }, - {1449,1450, 0, 4, 7440, 2486, 0, 0 }, - { 181,1451, 0, 4, 2360, 733, 0, 0 }, - {1452,1453, 0, 4, 9260, 240, 0, 0 }, + {1447,1448, 0, 4, 10133, 0, 0, 0 }, + {1449,1450, 0, 4, 7373, 2486, 0, 0 }, + { 181,1451, 0, 4, 2313, 733, 0, 0 }, + {1452,1453, 0, 4, 9213, 240, 0, 0 }, {1454,1455, 0, 4, 40000, 0, 0, 0 }, {1456,1457, 0, 4, 660, 126, 0, 0 }, {1458,1459, 0, 4, 40000, 66, 0, 0 }, @@ -6128,8 +6119,8 @@ const struct adlinsdata adlins[4815] = { 36,1471, 0, 4, 320, 0, 0, 0 }, {1472,1473, 0, 4, 320, 0, 0, 0 }, {1474,1475, 0, 4, 7986, 93, 0, 0 }, - { 39,1476, 0, 4, 1053, 226, 0, 0 }, - {1477,1476, 0, 4, 1060, 226, 0, 0 }, + { 39,1476, 0, 4, 1046, 226, 0, 0 }, + {1477,1476, 0, 4, 1046, 226, 0, 0 }, {1478,1479, 0, 4, 40000, 453, 0, 0 }, { 50,1480, 0, 4, 40000, 400, 0, 0 }, {1481,1482, 0, 4, 40000, 133, 0, 0 }, @@ -6151,19 +6142,19 @@ const struct adlinsdata adlins[4815] = {1510,1511, 0, 4, 40000, 60, 0, 0 }, {1512,1513, 0, 4, 40000, 0, 0, 0 }, {1514,1515, 0, 4, 40000, 0, 0, 0 }, - {1516,1517, 0, 4, 40000, 773, 0, 0 }, - {1518,1519, 0, 4, 5346, 2973, 0, 0 }, + {1516,1517, 0, 4, 40000, 766, 0, 0 }, + {1518,1519, 0, 4, 5286, 2966, 0, 0 }, {1520,1521, 0, 4, 40000, 406, 0, 0 }, - {1522,1523, 0, 4, 9080, 360, 0, 0 }, + {1522,1523, 0, 4, 9040, 360, 0, 0 }, {1524,1525, 0, 4, 40000, 1200, 0, 0 }, {1526,1527, 0, 4, 40000, 800, 0, 0 }, {1528,1529, 0, 4, 40000, 960, 0, 0 }, - { 111,1530, 0, 4, 1200, 433, 0, 0 }, - {1531,1532, 0, 4, 226, 386, 0, 0 }, - { 115,1533, 0, 4, 2433, 0, 0, 0 }, - {1534,1535, 0, 4, 1873, 646, 0, 0 }, - {1536,1537, 0, 4, 3013, 53, 0, 0 }, - {1538,1539, 0, 4, 1560, 720, 0, 0 }, + { 111,1530, 0, 4, 1193, 433, 0, 0 }, + {1531,1532, 0, 4, 220, 386, 0, 0 }, + { 115,1533, 0, 4, 2413, 0, 0, 0 }, + {1534,1535, 0, 4, 1853, 640, 0, 0 }, + {1536,1537, 0, 4, 3006, 53, 0, 0 }, + {1538,1539, 0, 4, 1506, 720, 0, 0 }, {1540, 339, 0, 6, 6, 0, 0, 0 }, {1541, 339, 0, 6, 6, 0, 0, 0 }, {1542,1543, 0, 4, 993, 93, 0, 0 }, @@ -6178,48 +6169,48 @@ const struct adlinsdata adlins[4815] = {1550,1551, 49, 4, 520, 200, 0, 0 }, {1553,1554, 43, 4, 160, 80, 0, 0 }, {1550,1551, 51, 4, 513, 0, 0, 0 }, - { 134,1555, 43, 4, 1733, 0, 0, 0 }, + { 134,1555, 43, 4, 1686, 0, 0, 0 }, {1550,1551, 54, 4, 506, 0, 0, 0 }, {1550,1551, 57, 4, 506, 0, 0, 0 }, - { 380, 381, 72, 4, 1580, 0, 0, 0 }, - {1550,1551, 60, 4, 520, 0, 0, 0 }, - {1556,1557, 70, 4, 826, 306, 0, 0 }, + { 380, 381, 72, 4, 1573, 0, 0, 0 }, + {1550,1551, 60, 4, 513, 0, 0, 0 }, + {1556,1557, 70, 4, 766, 306, 0, 0 }, { 374, 375, 60, 4, 973, 0, 0, 0 }, - {1558,1559, 36, 4, 1233, 0, 0, 0 }, + {1558,1559, 36, 4, 1126, 0, 0, 0 }, {1560,1561, 65, 4, 293, 133, 0, 0 }, - {1562,1563, 84, 4, 1360, 0, 0, 0 }, + {1562,1563, 84, 4, 1353, 0, 0, 0 }, {1564,1565, 59, 4, 380, 0, 0, 0 }, - {1566,1567, 84, 4, 1593, 566, 0, 0 }, - {1568,1569, 35, 4, 1353, 473, 0, 0 }, - {1570,1571, 44, 4, 413, 0, 0, 0 }, + {1566,1567, 84, 4, 1586, 566, 0, 0 }, + {1568,1569, 35, 4, 1320, 473, 0, 0 }, + {1570,1571, 44, 4, 406, 0, 0, 0 }, {1572,1573, 67, 4, 246, 0, 0, 0 }, - {1574,1575, 66, 4, 293, 0, 0, 0 }, - { 145,1576, 59, 4, 146, 0, 0, 0 }, - {1577,1578, 51, 4, 360, 0, 0, 0 }, - {1579,1580, 45, 4, 246, 0, 0, 0 }, + {1574,1575, 66, 4, 286, 0, 0, 0 }, + { 145,1576, 59, 4, 140, 0, 0, 0 }, + {1577,1578, 51, 4, 326, 0, 0, 0 }, + {1579,1580, 45, 4, 233, 0, 0, 0 }, {1581,1582, 71, 4, 433, 0, 0, 0 }, { 149,1583, 60, 4, 280, 0, 0, 0 }, - {1584,1585, 58, 4, 173, 0, 0, 0 }, + {1584,1585, 58, 4, 166, 0, 0, 0 }, {1586,1587, 53, 4, 173, 0, 0, 0 }, - { 397,1588, 64, 4, 220, 80, 0, 0 }, + { 397,1588, 64, 4, 213, 80, 0, 0 }, {1589,1590, 71, 4, 106, 53, 0, 0 }, - {1591,1592, 61, 4, 1000, 340, 0, 0 }, - {1593,1594, 61, 4, 1000, 340, 0, 0 }, + {1591,1592, 61, 4, 973, 340, 0, 0 }, + {1593,1594, 61, 4, 986, 340, 0, 0 }, { 391, 392, 48, 4, 160, 46, 0, 0 }, { 391, 393, 48, 4, 380, 60, 0, 0 }, {1595,1596, 69, 4, 120, 0, 0, 0 }, { 159,1597, 68, 4, 120, 0, 0, 0 }, { 159,1597, 63, 4, 140, 0, 0, 0 }, {1598,1599, 74, 4, 893, 273, 0, 0 }, - {1600,1601, 60, 4, 1013, 306, 0, 0 }, - {1602,1603, 80, 4, 220, 0, 0, 0 }, - {1604,1605, 64, 4, 1366, 0, 0, 0 }, + {1600,1601, 60, 4, 1006, 306, 0, 0 }, + {1602,1603, 80, 4, 213, 0, 0, 0 }, + {1604,1605, 64, 4, 1346, 0, 0, 0 }, {1606,1607, 69, 4, 120, 73, 0, 0 }, - { 398, 399, 55, 4, 1540, 193, 0, 0 }, - {1608,1609, 75, 4, 1573, 0, 0, 0 }, + { 398, 399, 55, 4, 1533, 193, 0, 0 }, + {1608,1609, 75, 4, 1560, 0, 0, 0 }, {1610,1611, 68, 4, 120, 0, 0, 0 }, - {1612,1613, 48, 4, 360, 0, 0, 0 }, - {1614,1615, 53, 4, 606, 0, 0, 0 }, + {1612,1613, 48, 4, 333, 0, 0, 0 }, + {1614,1615, 53, 4, 593, 0, 0, 0 }, {1616,1616, 0, 0, 40000, 1586, 0, 0 }, {1617,1617, 0, 0, 40000, 1226, 0, 0 }, {1618,1618, 0, 0, 4546, 766, 0, 0 }, @@ -6828,35 +6819,35 @@ const struct adlinsdata adlins[4815] = {2160,2160, 65, 0, 166, 73, 0, 0 }, {2161,2161, 21, 0, 480, 146, 0, 0 }, {2162, 173, 0, 4, 4220, 80, 0, 0 }, - {2163,2164, 0, 4, 4640, 3066, 0, 0 }, - {2165,2166, 0, 4, 7273, 3920, 0, 0 }, - {2167,2168, 0, 4, 3766, 1253, 0, 0 }, - {2169,2170, 0, 4, 6266, 2400, 0, 0 }, - {2171,2172, 0, 4, 18213, 0, 0, 0 }, + {2163,2164, 0, 4, 4613, 3060, 0, 0 }, + {2165,2166, 0, 4, 7193, 3920, 0, 0 }, + {2167,2168, 0, 4, 3746, 1253, 0, 0 }, + {2169,2170, 0, 4, 6226, 2393, 0, 0 }, + {2171,2172, 0, 4, 18053, 0, 0, 0 }, {2173,2174, 0, 4, 40000, 713, 0, 0 }, {2175,2174, 0, 4, 40000, 733, 0, 0 }, {2176, 299, 0, 4, 40000, 273, 0, 0 }, {2177,2178, 0, 4, 40000, 66, 0, 0 }, {2179,2180, 0, 4, 40000, 393, 0, 0 }, {2181,2182, 0, 4, 40000, 413, 0, 0 }, - {2183,2184, 0, 4, 7406, 200, 0, 0 }, + {2183,2184, 0, 4, 7366, 200, 0, 0 }, { 127, 127, 65, 0, 226, 120, 0, 0 }, { 127, 127, 72, 0, 180, 100, 0, 0 }, { 364, 365, 52, 4, 120, 0, 0, 0 }, {2185,2186, 60, 4, 173, 0, 0, 0 }, {1550,1551, 47, 4, 520, 0, 0, 0 }, - {1556,1557, 76, 4, 833, 0, 0, 0 }, + {1556,1557, 76, 4, 766, 0, 0, 0 }, { 374, 375, 84, 4, 813, 0, 0, 0 }, {1564,1565, 83, 4, 220, 0, 0, 0 }, - {1568,1569, 24, 4, 1840, 620, 0, 0 }, - {1556,1557, 77, 4, 820, 300, 0, 0 }, - {1572,1573, 60, 4, 286, 0, 0, 0 }, - {1574,1575, 65, 4, 293, 0, 0, 0 }, + {1568,1569, 24, 4, 1806, 620, 0, 0 }, + {1556,1557, 77, 4, 760, 300, 0, 0 }, + {1572,1573, 60, 4, 280, 0, 0, 0 }, + {1574,1575, 65, 4, 286, 0, 0, 0 }, { 391, 392, 44, 4, 160, 53, 0, 0 }, { 391, 393, 40, 4, 460, 66, 0, 0 }, {1606,1607, 72, 4, 120, 73, 0, 0 }, - { 398, 399, 73, 4, 1293, 173, 0, 0 }, - {1608,1609, 70, 4, 1580, 0, 0, 0 }, + { 398, 399, 73, 4, 1286, 173, 0, 0 }, + {1608,1609, 70, 4, 1560, 0, 0, 0 }, {2187,2187, 0, 0, 40000, 353, 0, 0 }, {2188,2188, 0, 0, 40000, 333, 0, 0 }, {2189,2189, 0, 0, 5913, 2306, 0, 0 }, @@ -6986,30 +6977,30 @@ const struct adlinsdata adlins[4815] = {2299,2299, 72, 0, 793, 173, 0, 0 }, {2300,2300, 84, 0, 226, 66, 0, 0 }, { 555, 555, 66, 0, 113, 0, 0, 0 }, - {2301,2302, 35, 4, 2333, 800, 0, 0 }, + {2301,2302, 35, 4, 2320, 800, 0, 0 }, {2303,2304, 52, 4, 120, 0, 0, 0 }, {2305,1548, 48, 4, 173, 0, 0, 0 }, {1595,1595, 58, 0, 146, 166, 0, 0 }, {2305,1548, 60, 4, 173, 0, 0, 0 }, - {2306,2307, 47, 4, 1893, 700, 0, 0 }, - {2306,2307, 43, 4, 1953, 740, 0, 0 }, - {2306,2307, 49, 4, 1880, 686, 0, 0 }, - {2306,2307, 51, 4, 1886, 706, 0, 0 }, - {2306,2307, 54, 4, 1906, 720, 0, 0 }, - {2306,2307, 57, 4, 1900, 720, 0, 0 }, - {2306,2307, 72, 4, 1593, 606, 0, 0 }, - {2306,2307, 60, 4, 1900, 720, 0, 0 }, - {2306,2307, 76, 4, 1593, 606, 0, 0 }, + {2306,2307, 47, 4, 1886, 700, 0, 0 }, + {2306,2307, 43, 4, 1946, 740, 0, 0 }, + {2306,2307, 49, 4, 1873, 686, 0, 0 }, + {2306,2307, 51, 4, 1880, 706, 0, 0 }, + {2306,2307, 54, 4, 1900, 720, 0, 0 }, + {2306,2307, 57, 4, 1893, 720, 0, 0 }, + {2306,2307, 72, 4, 1586, 606, 0, 0 }, + {2306,2307, 60, 4, 1893, 720, 0, 0 }, + {2306,2307, 76, 4, 1586, 606, 0, 0 }, {2306,2307, 84, 4, 1593, 613, 0, 0 }, - {2306,2307, 36, 4, 2386, 920, 0, 0 }, + {2306,2307, 36, 4, 2380, 920, 0, 0 }, {1560,2308, 65, 4, 293, 213, 0, 0 }, - {2309,2310, 84, 4, 1373, 306, 0, 0 }, + {2309,2310, 84, 4, 1366, 306, 0, 0 }, {1564,1564, 83, 0, 220, 113, 0, 0 }, - { 380, 381, 84, 4, 1593, 566, 0, 0 }, + { 380, 381, 84, 4, 1580, 566, 0, 0 }, {1568,1568, 24, 0, 1833, 613, 0, 0 }, - {2306,2307, 77, 4, 1593, 606, 0, 0 }, - {2311,2312, 60, 4, 286, 0, 0, 0 }, - {2313,2314, 65, 4, 513, 0, 0, 0 }, + {2306,2307, 77, 4, 1586, 606, 0, 0 }, + {2311,2312, 60, 4, 280, 0, 0, 0 }, + {2313,2314, 65, 4, 506, 0, 0, 0 }, {2315,2315, 59, 0, 106, 0, 0, 0 }, {2316,2316, 51, 0, 386, 373, 0, 0 }, {1612,1612, 45, 0, 393, 380, 0, 0 }, @@ -7027,16 +7018,16 @@ const struct adlinsdata adlins[4815] = {1595,1595, 68, 0, 126, 140, 0, 0 }, {1595,1595, 63, 0, 146, 166, 0, 0 }, {2325,2326, 74, 4, 380, 106, 0, 0 }, - {2327,2328, 60, 4, 1026, 333, 0, 0 }, - {2329,2330, 80, 4, 40000, 0, 0, 0 }, - {2331,2332, 64, 4, 1900, 640, 0, 0 }, + {2327,2328, 60, 4, 1020, 333, 0, 0 }, + {2329,2330, 80, 4, 453, 0, 0, 0 }, + {2331,2332, 64, 4, 1880, 640, 0, 0 }, { 397, 397, 72, 0, 193, 80, 0, 0 }, - {2333,2334, 78, 4, 820, 0, 0, 0 }, - {1608,1609, 82, 4, 1580, 0, 0, 0 }, + {2333,2334, 78, 4, 793, 0, 0, 0 }, + {1608,1609, 82, 4, 1560, 0, 0, 0 }, {2315,2315, 48, 0, 106, 0, 0, 0 }, {2316,2316, 53, 0, 386, 373, 0, 0 }, {2335,2335, 0, 0, 3586, 1133, 0, 0 }, - {2336,2337, 0, 4, 1186, 420, 0, 0 }, + {2336,2337, 0, 4, 1180, 420, 0, 0 }, {2338,2339, 0, 4, 40000, 320, 0, 0 }, {2340,2340, 0, 0, 8826, 1346, 0, 0 }, {2341,2341, 0, 0, 3440, 753, 0, 0 }, @@ -7057,7 +7048,7 @@ const struct adlinsdata adlins[4815] = {2360,2360, 43, 0, 253, 106, 0, 0 }, {2360,2360, 45, 0, 240, 100, 0, 0 }, {2360,2360, 47, 0, 240, 100, 0, 0 }, - {2361,2362, 0, 4, 14720, 333, 0, 0 }, + {2361,2362, 0, 4, 14633, 333, 0, 0 }, {2363,2363, 0, 0, 7373, 1246, 0, 0 }, {2364,2364, 0, 0, 4900, 233, 0, 0 }, {2365,2365, 0, 0, 5106, 606, 0, 0 }, @@ -7092,7 +7083,7 @@ const struct adlinsdata adlins[4815] = {2393,2393, 0, 0, 3400, 493, 0, 0 }, {2394,2394, 0, 0, 40000, 53, 0, 0 }, {2395,2395, 0, 0, 40000, 133, 0, 0 }, - {2396,2397, 0, 4, 3093, 1400, 0, 0 }, + {2396,2397, 0, 4, 3066, 1400, 0, 0 }, {2398,2398, 0, 0, 1080, 580, 0, 0 }, {2399,2400, 0, 4, 2220, 400, 0, 0 }, {2401,2401, 0, 0, 40000, 193, 0, 0 }, @@ -7108,15 +7099,15 @@ const struct adlinsdata adlins[4815] = {2415,2416, 0, 4, 40000, 466, 0, 0 }, {2417,2418, 0, 4, 40000, 113, 0, 0 }, {2419,2420, 0, 4, 1280, 73, 0, 0 }, - {2421,2422, 0, 4, 1113, 146, 0, 0 }, - {2423,2424, 0, 4, 3660, 113, 0, 0 }, + {2421,2422, 0, 4, 1106, 146, 0, 0 }, + {2423,2424, 0, 4, 3640, 113, 0, 0 }, {2425,2426, 0, 4, 40000, 80, 0, 0 }, {2427,2427, 33, 0, 300, 246, 0, 0 }, {2428,2429, 38, 4, 53, 0, 0, 0 }, {2430,2430, 38, 0, 106, 0, 0, 0 }, {2431,2431, 38, 0, 340, 20, 0, 0 }, {2432,2432, 40, 0, 73, 0, 0, 0 }, - {2433,2434, 41, 4, 300, 0, 0, 0 }, + {2433,2434, 41, 4, 293, 0, 0, 0 }, {2435,2435, 0, 0, 133, 73, 0, 0 }, {2435,2435, 41, 0, 133, 73, 0, 0 }, {2360,2360, 48, 0, 240, 100, 0, 0 }, @@ -7300,10 +7291,10 @@ const struct adlinsdata adlins[4815] = {2543,2543, 0, 0, 40000, 1306, 0, 0 }, {2544,2544, 0, 0, 40000, 0, 0, 0 }, {2545,2545, 0, 0, 4613, 13, 0, 0 }, - {2546,2547, 0, 4, 6933, 133, 0, 0 }, + {2546,2547, 0, 4, 6926, 126, 0, 0 }, {2548,2549, 0, 4, 40000, 86, 0, 0 }, {2550,2550, 0, 0, 9233, 100, 0, 0 }, - {2551,2552, 0, 4, 4640, 73, 0, 0 }, + {2551,2552, 0, 4, 4620, 73, 0, 0 }, {2553,2553, 0, 0, 40000, 73, 0, 0 }, {2554,2554, 0, 0, 40000, 0, 0, 0 }, {2555,2556, 0, 4, 40000, 73, 0, 0 }, @@ -7312,7 +7303,7 @@ const struct adlinsdata adlins[4815] = {2559,2560, 0, 4, 40000, 40, 0, 0 }, {2561,2561, 0, 0, 40000, 186, 0, 0 }, {2562,2562, 0, 0, 4026, 66, 0, 0 }, - {2563,2564, 0, 4, 14586, 80, 0, 0 }, + {2563,2564, 0, 4, 14513, 80, 0, 0 }, {2565,2565, 0, 0, 40000, 0, 0, 0 }, {2566,2567, 0, 4, 40000, 40, 0, 0 }, {2568,2568, 0, 0, 4020, 73, 0, 0 }, @@ -7326,7 +7317,7 @@ const struct adlinsdata adlins[4815] = { 239,2578, 0, 4, 40000, 133, 0, 0 }, {2579,2579, 0, 0, 40000, 80, 0, 0 }, {2580,2580, 0, 0, 40000, 140, 0, 0 }, - {2581,2582, 0, 4, 16980, 1173, 0, 0 }, + {2581,2582, 0, 4, 16913, 1173, 0, 0 }, {2583,2584, 0, 4, 726, 100, 0, 0 }, {2585,2586, 0, 4, 40000, 73, 0, 0 }, {2587,2588, 0, 4, 40000, 73, 0, 0 }, @@ -7356,14 +7347,14 @@ const struct adlinsdata adlins[4815] = {2624,2625, 0, 4, 40000, 0, 0, 0 }, {2626,2627, 0, 4, 40000, 73, 0, 0 }, {2628,2629, 0, 4, 40000, 0, 0, 0 }, - {1516,2630, 0, 4, 1193, 406, 0, 0 }, + {1516,2630, 0, 4, 1186, 406, 0, 0 }, {2631,2632, 0, 4, 40000, 553, 0, 0 }, {2633,2633, 0, 0, 40000, 40, 0, 0 }, {2634,2635, 0, 4, 40000, 773, 0, 0 }, {2636,2636, 0, 0, 40000, 320, 0, 0 }, {2637,2637, 0, 0, 1880, 73, 0, 0 }, - {2638,2639, 0, 4, 486, 0, 0, 0 }, - {2640,2641, 0, 4, 17020, 1193, 0, 0 }, + {2638,2639, 0, 4, 473, 0, 0, 0 }, + {2640,2641, 0, 4, 16946, 1193, 0, 0 }, {2642,2642, 0, 0, 40000, 720, 0, 0 }, {2643,2644, 0, 4, 1880, 40, 0, 0 }, {2645,2645, 0, 0, 40000, 73, 0, 0 }, @@ -7414,20 +7405,20 @@ const struct adlinsdata adlins[4815] = {2687,2687, 48, 0, 173, 20, 0, 0 }, {2688,2688, 53, 0, 980, 33, 0, 0 }, {2689,2690, 0, 4, 40000, 286, 0, 0 }, - {2691,2692, 0, 4, 2340, 100, 0, 0 }, + {2691,2692, 0, 4, 2326, 100, 0, 0 }, {2693,2694, 0, 4, 380, 80, 0, 0 }, - {2695,2696, 0, 4, 14793, 73, 0, 0 }, + {2695,2696, 0, 4, 14766, 73, 0, 0 }, {2697,2698, 0, 4, 40000, 40, 0, 0 }, { 192,2699, 0, 4, 40000, 73, 0, 0 }, {2700,2701, 0, 4, 973, 126, 0, 0 }, - {2702,2703, 0, 4, 4666, 106, 0, 0 }, + {2702,2703, 0, 4, 4626, 106, 0, 0 }, {2704,2705, 0, 4, 40000, 73, 0, 0 }, {2706,2707, 0, 4, 40000, 73, 0, 0 }, {2708,2709, 0, 4, 40000, 73, 0, 0 }, {2710,2711, 0, 4, 2053, 0, 0, 0 }, {2712,1473, 0, 4, 320, 26, 0, 0 }, {2713,2714, 0, 4, 573, 93, 0, 0 }, - {2715,2716, 0, 4, 6513, 0, 0, 0 }, + {2715,2716, 0, 4, 6466, 0, 0, 0 }, {1478,2717, 0, 4, 40000, 146, 0, 0 }, {2718,2719, 0, 4, 40000, 66, 0, 0 }, { 286,2720, 0, 4, 40000, 73, 0, 0 }, @@ -7437,25 +7428,25 @@ const struct adlinsdata adlins[4815] = {2727,2724, 0, 4, 40000, 60, 0, 0 }, {1514,2728, 0, 4, 40000, 180, 0, 0 }, {2729,2730, 0, 4, 40000, 0, 0, 0 }, - {2731,2732, 0, 4, 486, 0, 0, 0 }, + {2731,2732, 0, 4, 473, 0, 0, 0 }, {2733,2734, 0, 4, 733, 0, 0, 0 }, {2735,2736, 0, 4, 286, 40, 0, 0 }, {2737,2738, 0, 4, 40000, 73, 0, 0 }, - {2739,2740, 0, 4, 1326, 746, 0, 0 }, - {2741,2742, 0, 4, 1340, 700, 0, 0 }, + {2739,2740, 0, 4, 1313, 746, 0, 0 }, + {2741,2742, 0, 4, 1326, 700, 0, 0 }, {2743,2744, 0, 4, 40000, 0, 0, 0 }, {2745,2746, 0, 4, 2046, 0, 0, 0 }, {2747,2747, 35, 0, 386, 166, 0, 0 }, {2748,2748, 60, 0, 493, 193, 0, 0 }, {2749,2749, 43, 0, 126, 66, 0, 0 }, {2750,2750, 0, 0, 3740, 1260, 0, 0 }, - {2751,2752, 0, 4, 14846, 353, 0, 0 }, - {2753,2754, 0, 4, 10266, 0, 0, 0 }, - {2755,2756, 0, 4, 18286, 146, 0, 0 }, - {2757,2758, 0, 4, 14520, 333, 0, 0 }, - {2759,2760, 0, 4, 14686, 633, 0, 0 }, - {2761,2762, 0, 4, 14826, 300, 0, 0 }, - {2763,2764, 0, 4, 10493, 0, 0, 0 }, + {2751,2752, 0, 4, 14833, 360, 0, 0 }, + {2753,2754, 0, 4, 10206, 0, 0, 0 }, + {2755,2756, 0, 4, 18033, 146, 0, 0 }, + {2757,2758, 0, 4, 14433, 326, 0, 0 }, + {2759,2760, 0, 4, 14580, 626, 0, 0 }, + {2761,2762, 0, 4, 14720, 300, 0, 0 }, + {2763,2764, 0, 4, 10426, 0, 0, 0 }, {2765,2766, 0, 4, 40000, 60, 0, 0 }, {2767,2768, 0, 4, 40000, 80, 0, 0 }, {2769,2770, 0, 4, 40000, 80, 0, 0 }, @@ -7465,37 +7456,37 @@ const struct adlinsdata adlins[4815] = {2777,2778, 0, 4, 40000, 73, 0, 0 }, {2779,2780, 0, 4, 40000, 73, 0, 0 }, {2781,2782, 0, 4, 40000, 66, 0, 0 }, - {2783,2784, 0, 4, 7260, 186, 0, 0 }, - {2785,2786, 0, 4, 10386, 0, 0, 0 }, + {2783,2784, 0, 4, 7220, 186, 0, 0 }, + {2785,2786, 0, 4, 10300, 0, 0, 0 }, {2787,2788, 0, 4, 40000, 246, 0, 0 }, - {2789,2790, 0, 4, 9173, 746, 0, 0 }, - {2791,2792, 0, 4, 7440, 666, 0, 0 }, - {2793,2794, 0, 4, 40000, 0, 0, 0 }, + {2789,2790, 0, 4, 9106, 746, 0, 0 }, + {2791,2792, 0, 4, 7373, 666, 0, 0 }, + {2793,2794, 0, 4, 1200, 426, 0, 0 }, {2795,2796, 0, 4, 40000, 413, 0, 0 }, {2795,2797, 0, 4, 40000, 1506, 0, 0 }, {2798,2799, 0, 4, 40000, 60, 0, 0 }, {2800,2801, 0, 4, 40000, 233, 0, 0 }, {2802,2803, 0, 4, 40000, 80, 0, 0 }, {2804,2805, 0, 4, 40000, 80, 0, 0 }, - {2806,2807, 0, 4, 4520, 80, 0, 0 }, + {2806,2807, 0, 4, 4500, 80, 0, 0 }, {2808,2809, 0, 4, 40000, 73, 0, 0 }, - {2810,2811, 0, 4, 1186, 100, 0, 0 }, + {2810,2811, 0, 4, 1180, 100, 0, 0 }, {2812,2813, 0, 4, 953, 153, 0, 0 }, - {2814,2815, 0, 4, 14786, 126, 0, 0 }, - {2816,2817, 0, 4, 14800, 193, 0, 0 }, - {2818,2819, 0, 4, 14573, 626, 0, 0 }, + {2814,2815, 0, 4, 14693, 126, 0, 0 }, + {2816,2817, 0, 4, 14693, 193, 0, 0 }, + {2818,2819, 0, 4, 14473, 633, 0, 0 }, {2820,2821, 0, 4, 2200, 73, 0, 0 }, - {2822,2823, 0, 4, 373, 86, 0, 0 }, + {2822,2823, 0, 4, 366, 86, 0, 0 }, {2824,2825, 0, 4, 12780, 200, 0, 0 }, {2826,2827, 0, 4, 40000, 73, 0, 0 }, - {2828,2829, 0, 4, 9193, 146, 0, 0 }, - {2830,2831, 0, 4, 2540, 326, 0, 0 }, + {2828,2829, 0, 4, 9066, 146, 0, 0 }, + {2830,2831, 0, 4, 2526, 326, 0, 0 }, {2832,2833, 0, 4, 6933, 200, 0, 0 }, {2834,2835, 0, 4, 40000, 413, 0, 0 }, - {2836,2837, 0, 4, 4826, 1313, 0, 0 }, - {2838,2839, 0, 4, 14740, 340, 0, 0 }, - {2840,2841, 0, 4, 1886, 653, 0, 0 }, - {2842,2843, 0, 4, 5280, 260, 0, 0 }, + {2836,2837, 0, 4, 4806, 1313, 0, 0 }, + {2838,2839, 0, 4, 14620, 340, 0, 0 }, + {2840,2841, 0, 4, 1866, 653, 0, 0 }, + {2842,2843, 0, 4, 5200, 260, 0, 0 }, {2844,2845, 0, 4, 40000, 240, 0, 0 }, {2846,2847, 0, 4, 40000, 240, 0, 0 }, {2848,2849, 0, 4, 40000, 240, 0, 0 }, @@ -7504,20 +7495,20 @@ const struct adlinsdata adlins[4815] = {2854,2855, 0, 4, 40000, 146, 0, 0 }, {2856,2856, 0, 0, 2400, 1126, 0, 0 }, {2857,2857, 0, 0, 2400, 1126, 0, 0 }, - {2858,2859, 0, 4, 4613, 73, 0, 0 }, + {2858,2859, 0, 4, 4586, 73, 0, 0 }, {2860,2861, 0, 4, 40000, 426, 0, 0 }, - {2862,2863, 0, 4, 4580, 100, 0, 0 }, + {2862,2863, 0, 4, 4553, 100, 0, 0 }, {2864,2865, 0, 4, 40000, 80, 0, 0 }, - {2866,2867, 0, 4, 5300, 53, 0, 0 }, - {2868,2869, 0, 4, 5313, 113, 0, 0 }, - {2870,2871, 0, 4, 7080, 186, 0, 0 }, - {2872,2873, 0, 4, 4720, 106, 0, 0 }, + {2866,2867, 0, 4, 5260, 53, 0, 0 }, + {2868,2869, 0, 4, 5286, 113, 0, 0 }, + {2870,2871, 0, 4, 7040, 186, 0, 0 }, + {2872,2873, 0, 4, 4693, 106, 0, 0 }, {2874,2875, 0, 4, 40000, 73, 0, 0 }, - {2876,2877, 0, 4, 1640, 0, 0, 0 }, - {2878,2879, 0, 4, 7306, 186, 0, 0 }, - {2880,2881, 0, 4, 7373, 1246, 0, 0 }, - {2882,2883, 0, 4, 4620, 93, 0, 0 }, - {2884,2885, 0, 4, 3460, 926, 0, 0 }, + {2876,2877, 0, 4, 1633, 0, 0, 0 }, + {2878,2879, 0, 4, 7266, 186, 0, 0 }, + {2880,2881, 0, 4, 7340, 1246, 0, 0 }, + {2882,2883, 0, 4, 4600, 93, 0, 0 }, + {2884,2885, 0, 4, 3446, 926, 0, 0 }, {2886,2887, 0, 4, 40000, 73, 0, 0 }, {2888,2888, 0, 0, 18926, 426, 0, 0 }, {2889,2889, 0, 0, 18520, 73, 0, 0 }, @@ -7528,22 +7519,22 @@ const struct adlinsdata adlins[4815] = {2895,2895, 0, 0, 14786, 4966, 0, 0 }, {2896,2897, 0, 4, 40000, 80, 0, 0 }, {2898,2899, 0, 4, 40000, 73, 0, 0 }, - {2353,2900, 0, 4, 18520, 86, 0, 0 }, + {2353,2900, 0, 4, 18420, 80, 0, 0 }, {2901,2901, 0, 0, 40000, 0, 0, 0 }, {2902,2903, 0, 4, 40000, 100, 0, 0 }, {2904,2905, 0, 4, 40000, 93, 0, 0 }, {2906,2907, 0, 4, 40000, 73, 0, 0 }, - {2908,2909, 0, 4, 10720, 153, 0, 0 }, + {2908,2909, 0, 4, 10706, 160, 0, 0 }, {2910,2911, 0, 4, 40000, 73, 0, 0 }, {2912,2912, 0, 0, 40000, 40, 0, 0 }, - {2913,2914, 0, 4, 8720, 446, 0, 0 }, - {2915,2916, 0, 4, 14706, 653, 0, 0 }, - {2917,2918, 0, 4, 9213, 426, 0, 0 }, - {2919,2920, 0, 4, 9286, 240, 0, 0 }, - {2921,2922, 0, 4, 8706, 413, 0, 0 }, - {2923,2924, 0, 4, 2233, 346, 0, 0 }, - {2925,2926, 0, 4, 2373, 426, 0, 0 }, - {2927,2928, 0, 4, 2353, 233, 0, 0 }, + {2913,2914, 0, 4, 8713, 446, 0, 0 }, + {2915,2916, 0, 4, 14633, 653, 0, 0 }, + {2917,2918, 0, 4, 9166, 426, 0, 0 }, + {2919,2920, 0, 4, 9213, 240, 0, 0 }, + {2921,2922, 0, 4, 8700, 420, 0, 0 }, + {2923,2924, 0, 4, 2200, 346, 0, 0 }, + {2925,2926, 0, 4, 2360, 426, 0, 0 }, + {2927,2928, 0, 4, 2340, 233, 0, 0 }, {2929,2929, 0, 0, 40000, 140, 0, 0 }, {2930,2931, 0, 4, 40000, 100, 0, 0 }, {2932,2933, 0, 4, 40000, 73, 0, 0 }, @@ -7552,10 +7543,10 @@ const struct adlinsdata adlins[4815] = {2938,2939, 0, 4, 40000, 246, 0, 0 }, {2940,2940, 0, 0, 553, 446, 0, 0 }, {2941,2941, 0, 0, 40000, 193, 0, 0 }, - {2942,2943, 0, 4, 1206, 406, 0, 0 }, + {2942,2943, 0, 4, 1200, 406, 0, 0 }, {2944,2944, 0, 0, 7026, 1553, 0, 0 }, {2945,2945, 0, 0, 3426, 360, 0, 0 }, - {2946,2947, 0, 4, 7313, 646, 0, 0 }, + {2946,2947, 0, 4, 7200, 646, 0, 0 }, {2948,2948, 0, 0, 40000, 386, 0, 0 }, {2949,2949, 0, 0, 1953, 726, 0, 0 }, {2950,2951, 0, 4, 14606, 106, 0, 0 }, @@ -7654,191 +7645,63 @@ const struct adlinsdata adlins[4815] = {3024,3024, 74, 0, 280, 73, 0, 0 }, {3025,3025, 74, 0, 453, 100, 0, 0 }, {3026,3026, 60, 0, 666, 33, 0, 0 }, - {1439,1440, 0, 0, 13566, 273, 0, 0 }, - {1593,1594, 35, 0, 2200, 673, 0, 0 }, - {1564,1565, 35, 0, 740, 280, 0, 0 }, - {1443,1444, 0, 0, 11886, 333, 0, 0 }, - {1481,1482, 0, 0, 40000, 133, 0, 0 }, - { 185, 186, 0, 0, 5980, 1540, 0, 0 }, - { 235, 237, 0, 0, 3366, 1093, 0, 0 }, - { 239, 240, 0, 0, 40000, 133, 0, 0 }, - {1477,1476, 0, 0, 40000, 160, 0, 0 }, - { 268, 269, 0, 0, 40000, 80, 0, 0 }, - { 176, 177, 0, 0, 40000, 0, 0, 0 }, - {1490,1491, 0, 0, 40000, 60, 0, 0 }, - { 231, 232, 0, 0, 40000, 146, 0, 0 }, - { 233, 234, 0, 0, 40000, 433, 0, 0 }, - { 254, 255, 0, 0, 40000, 93, 0, 0 }, - { 192, 193, 0, 0, 40000, 66, 0, 0 }, - { 252, 253, 0, 0, 40000, 73, 0, 0 }, - { 248,3027, 0, 0, 40000, 80, 0, 0 }, - { 39,1476, 0, 0, 40000, 160, 0, 0 }, - { 241, 242, 0, 0, 40000, 146, 0, 0 }, - {1508,1509, 0, 0, 40000, 0, 0, 0 }, - { 246, 247, 0, 0, 3966, 800, 0, 0 }, - { 181,1451, 0, 0, 2153, 640, 0, 0 }, - { 209, 210, 0, 0, 4453, 100, 0, 0 }, - { 270, 271, 0, 0, 40000, 80, 0, 0 }, - { 115,1533, 0, 0, 4260, 1720, 0, 0 }, - {1454,1455, 0, 0, 40000, 0, 0, 0 }, - { 107, 319, 0, 0, 1266, 413, 0, 0 }, - { 46, 238, 0, 0, 6873, 1246, 0, 0 }, - { 216, 217, 0, 0, 4046, 100, 0, 0 }, - { 272, 273, 0, 0, 40000, 126, 0, 0 }, - {1445,3028, 0, 0, 9966, 386, 0, 0 }, - { 172, 173, 0, 0, 7340, 100, 0, 0 }, - { 174, 175, 0, 0, 6913, 100, 0, 0 }, - {1447,3029, 0, 0, 10306, 80, 0, 0 }, - {1452,3030, 0, 0, 9240, 240, 0, 0 }, - { 183, 184, 0, 0, 586, 253, 0, 0 }, - {1456,1457, 0, 0, 1386, 180, 0, 0 }, - {1458,1459, 0, 0, 40000, 60, 0, 0 }, - { 190,1460, 0, 0, 40000, 46, 0, 0 }, - {1462,1463, 0, 0, 40000, 340, 0, 0 }, - {1464,1465, 0, 0, 40000, 360, 0, 0 }, - { 195, 196, 0, 0, 40000, 66, 0, 0 }, - { 197, 198, 0, 0, 40000, 86, 0, 0 }, - { 199, 200, 0, 0, 40000, 60, 0, 0 }, - { 201, 202, 0, 0, 3713, 100, 0, 0 }, - { 203, 204, 0, 0, 14633, 126, 0, 0 }, - { 205, 206, 0, 0, 9440, 153, 0, 0 }, - { 214, 215, 0, 0, 17020, 100, 0, 0 }, - { 218, 219, 0, 0, 14000, 180, 0, 0 }, - { 220, 221, 0, 0, 2846, 100, 0, 0 }, - {1472,1473, 0, 0, 8066, 66, 0, 0 }, - {1474,1475, 0, 0, 8040, 93, 0, 0 }, - { 225, 226, 0, 0, 8066, 106, 0, 0 }, - { 229, 230, 0, 0, 40000, 160, 0, 0 }, - {1478,1479, 0, 0, 40000, 413, 0, 0 }, - { 50,1480, 0, 0, 40000, 393, 0, 0 }, - {1485,1486, 0, 0, 40000, 226, 0, 0 }, - { 258, 259, 0, 0, 40000, 73, 0, 0 }, - { 262, 263, 0, 0, 40000, 160, 0, 0 }, - { 264, 265, 0, 0, 40000, 160, 0, 0 }, - {1494,1495, 0, 0, 40000, 80, 0, 0 }, - {1496,1497, 0, 0, 40000, 73, 0, 0 }, - { 274, 275, 0, 0, 40000, 100, 0, 0 }, - {1499,1500, 0, 0, 40000, 73, 0, 0 }, - { 277, 278, 0, 0, 40000, 173, 0, 0 }, - { 279, 280, 0, 0, 40000, 160, 0, 0 }, - { 281, 282, 0, 0, 40000, 173, 0, 0 }, - {1501,1502, 0, 0, 40000, 146, 0, 0 }, - { 284, 285, 0, 0, 40000, 66, 0, 0 }, - { 286, 287, 0, 0, 40000, 86, 0, 0 }, - {1503,1504, 0, 0, 40000, 86, 0, 0 }, - {1505,1506, 0, 0, 40000, 73, 0, 0 }, - { 289, 290, 0, 0, 40000, 66, 0, 0 }, - { 291, 292, 0, 0, 40000, 160, 0, 0 }, - { 293, 294, 0, 0, 40000, 200, 0, 0 }, - { 86,1507, 0, 0, 40000, 80, 0, 0 }, - { 88, 297, 0, 0, 40000, 1346, 0, 0 }, - { 298, 299, 0, 0, 40000, 320, 0, 0 }, - { 300, 301, 0, 0, 40000, 1273, 0, 0 }, - {1514,1515, 0, 0, 40000, 100, 0, 0 }, - {1518,1519, 0, 0, 4733, 0, 0, 0 }, - {1520,1521, 0, 0, 40000, 440, 0, 0 }, - {1524,1525, 0, 0, 40000, 1180, 0, 0 }, - {1526,1527, 0, 0, 40000, 746, 0, 0 }, - {1528,1529, 0, 0, 40000, 920, 0, 0 }, - { 311, 312, 0, 0, 15306, 213, 0, 0 }, - { 313, 314, 0, 0, 7280, 340, 0, 0 }, - { 315, 316, 0, 0, 3693, 346, 0, 0 }, - { 317, 318, 0, 0, 13720, 4033, 0, 0 }, - { 108, 320, 0, 0, 40000, 66, 0, 0 }, - { 109, 321, 0, 0, 40000, 180, 0, 0 }, - { 322, 323, 0, 0, 40000, 73, 0, 0 }, - { 111,1530, 0, 0, 4053, 426, 0, 0 }, - { 324, 325, 0, 0, 626, 260, 0, 0 }, - { 326, 327, 0, 0, 1166, 400, 0, 0 }, - {1531,1532, 0, 0, 186, 340, 0, 0 }, - {1534,1535, 0, 0, 3240, 440, 0, 0 }, - { 330, 331, 0, 0, 1920, 360, 0, 0 }, - {1536,1537, 0, 0, 3020, 0, 0, 0 }, - {1538,1539, 0, 0, 1660, 846, 0, 0 }, - {1541, 339, 0, 0, 9213, 813, 0, 0 }, - {1542,1543, 0, 0, 993, 100, 0, 0 }, - {1544,3031, 0, 0, 860, 180, 0, 0 }, - {1546,3032, 0, 0, 40000, 80, 0, 0 }, - { 338, 339, 0, 0, 40000, 200, 0, 0 }, - { 340, 341, 0, 0, 40000, 0, 0, 0 }, - {1441,1442, 0, 0, 7393, 186, 0, 0 }, - { 207, 208, 0, 0, 14373, 126, 0, 0 }, - {1466,1467, 0, 0, 40000, 66, 0, 0 }, - {1468,1469, 0, 0, 40000, 46, 0, 0 }, - { 179, 180, 0, 0, 4080, 346, 0, 0 }, - {1449,1450, 0, 0, 8313, 3373, 0, 0 }, - { 35,1470, 0, 0, 40000, 0, 0, 0 }, - { 36,1471, 0, 0, 8093, 40, 0, 0 }, - { 235, 236, 0, 0, 2393, 333, 0, 0 }, - {1483,1484, 0, 0, 40000, 0, 0, 0 }, - { 55,1487, 0, 0, 40000, 80, 0, 0 }, - {1488,1489, 0, 0, 40000, 80, 0, 0 }, - {1492,1493, 0, 0, 40000, 66, 0, 0 }, - { 256, 257, 0, 0, 40000, 53, 0, 0 }, - { 260, 261, 0, 0, 40000, 86, 0, 0 }, - {1512,1513, 0, 0, 40000, 40, 0, 0 }, - {1510,1511, 0, 0, 40000, 80, 0, 0 }, - {1496,1498, 0, 0, 40000, 73, 0, 0 }, - { 295, 296, 0, 0, 40000, 340, 0, 0 }, - {1540, 339, 0, 0, 2466, 633, 0, 0 }, - { 398, 399, 35, 0, 1860, 226, 0, 0 }, - {1516,1517, 0, 0, 40000, 660, 0, 0 }, - {1550,3033, 35, 0, 213, 26, 0, 0 }, - {1556,1557, 35, 0, 1200, 426, 0, 0 }, - {1558,1559, 35, 0, 1173, 406, 0, 0 }, - {1570,1571, 35, 0, 1160, 140, 0, 0 }, - {1608,1609, 35, 0, 2100, 320, 0, 0 }, - {1595,1596, 35, 0, 220, 273, 0, 0 }, - { 159,1597, 35, 0, 220, 266, 0, 0 }, - {1610,1611, 35, 0, 220, 273, 0, 0 }, - { 397,1588, 35, 0, 253, 86, 0, 0 }, - {1606,1607, 35, 0, 133, 66, 0, 0 }, - { 145,1576, 35, 0, 180, 0, 0, 0 }, - {1612,1613, 35, 0, 526, 400, 0, 0 }, - {1577,1578, 35, 0, 506, 453, 0, 0 }, - {1614,1615, 35, 0, 773, 933, 0, 0 }, - { 305, 306, 0, 0, 40000, 1160, 0, 0 }, - {1522,1523, 0, 0, 40000, 0, 0, 0 }, - {1550,1551, 35, 0, 526, 146, 0, 0 }, - { 364, 365, 35, 0, 186, 20, 0, 0 }, - { 129,1549, 35, 0, 326, 133, 0, 0 }, - { 132,1552, 35, 0, 226, 113, 0, 0 }, - {1553,1554, 35, 0, 206, 73, 0, 0 }, - { 129,1548, 35, 0, 326, 133, 0, 0 }, - { 134,1555, 35, 0, 2580, 893, 0, 0 }, - {1560,1561, 35, 0, 600, 366, 0, 0 }, - {1562,1563, 35, 0, 40000, 0, 0, 0 }, - {1572,1573, 35, 0, 340, 133, 0, 0 }, - {1574,1575, 35, 0, 406, 226, 0, 0 }, - {1581,1582, 35, 0, 640, 213, 0, 0 }, - { 149,1583, 35, 0, 326, 20, 0, 0 }, - {1584,1585, 35, 0, 633, 240, 0, 0 }, - {1591,1592, 35, 0, 1226, 413, 0, 0 }, - {1568,1569, 35, 0, 1313, 460, 0, 0 }, - {1579,1580, 35, 0, 326, 0, 0, 0 }, - {1586,1587, 35, 0, 606, 220, 0, 0 }, - {1589,1590, 35, 0, 120, 86, 0, 0 }, - {1600,1601, 35, 0, 1326, 420, 0, 0 }, - {1602,1603, 35, 0, 706, 266, 0, 0 }, - {1604,1605, 35, 0, 4540, 1326, 0, 0 }, - { 391, 392, 35, 0, 360, 153, 0, 0 }, - { 391, 393, 35, 0, 453, 153, 0, 0 }, - {1598,1599, 35, 0, 1246, 346, 0, 0 }, - { 367, 368, 35, 0, 600, 153, 0, 0 }, - { 380, 381, 35, 0, 40000, 0, 0, 0 }, - { 374, 375, 35, 0, 40000, 0, 0, 0 }, - {1566,1567, 35, 0, 40000, 0, 0, 0 }, - {2306,2307, 35, 0, 7660, 1560, 0, 0 }, - {3034, 339, 35, 0, 5860, 426, 0, 0 }, - {2301,2302, 35, 0, 2146, 753, 0, 0 }, - {2305,1548, 35, 0, 326, 133, 0, 0 }, + {1593,1594, 35, 4, 1220, 413, 0, 0 }, + {1564,1565, 35, 4, 700, 0, 0, 0 }, + { 248,3027, 0, 4, 40000, 126, 0, 0 }, + {1445,3028, 0, 4, 9920, 326, 0, 0 }, + {1447,3029, 0, 4, 10133, 0, 0, 0 }, + {1452,3030, 0, 4, 9213, 240, 0, 0 }, + {1544,3031, 0, 4, 293, 86, 0, 0 }, + {1546,3032, 0, 4, 40000, 153, 0, 0 }, + { 398, 399, 35, 4, 1906, 226, 0, 0 }, + {1550,3033, 35, 4, 66, 0, 0, 0 }, + {1556,1557, 35, 4, 1126, 426, 0, 0 }, + {1558,1559, 35, 4, 1126, 413, 0, 0 }, + {1570,1571, 35, 4, 493, 100, 0, 0 }, + {1608,1609, 35, 4, 2286, 413, 0, 0 }, + {1595,1596, 35, 4, 220, 0, 0, 0 }, + { 159,1597, 35, 4, 220, 273, 0, 0 }, + {1610,1611, 35, 4, 220, 0, 0, 0 }, + { 397,1588, 35, 4, 253, 86, 0, 0 }, + {1606,1607, 35, 4, 140, 60, 0, 0 }, + { 145,1576, 35, 4, 160, 0, 0, 0 }, + {1612,1613, 35, 4, 413, 0, 0, 0 }, + {1577,1578, 35, 4, 373, 0, 0, 0 }, + {1614,1615, 35, 4, 706, 0, 0, 0 }, + {1550,1551, 35, 4, 620, 240, 0, 0 }, + { 364, 365, 35, 4, 146, 0, 0, 0 }, + { 129,1549, 35, 4, 200, 0, 0, 0 }, + { 132,1552, 35, 4, 213, 0, 0, 0 }, + {1553,1554, 35, 4, 206, 73, 0, 0 }, + { 129,1548, 35, 4, 200, 0, 0, 0 }, + { 134,1555, 35, 4, 2233, 0, 0, 0 }, + {1560,1561, 35, 4, 353, 146, 0, 0 }, + {1562,1563, 35, 4, 2013, 0, 0, 0 }, + {1572,1573, 35, 4, 346, 0, 0, 0 }, + {1574,1575, 35, 4, 360, 0, 0, 0 }, + {1581,1582, 35, 4, 620, 0, 0, 0 }, + { 149,1583, 35, 4, 326, 0, 0, 0 }, + {1584,1585, 35, 4, 200, 0, 0, 0 }, + {1591,1592, 35, 4, 1206, 413, 0, 0 }, + {1579,1580, 35, 4, 273, 0, 0, 0 }, + {1586,1587, 35, 4, 200, 0, 0, 0 }, + {1589,1590, 35, 4, 120, 86, 0, 0 }, + {1600,1601, 35, 4, 1246, 373, 0, 0 }, + {1602,1603, 35, 4, 700, 273, 0, 0 }, + {1604,1605, 35, 4, 2660, 926, 0, 0 }, + {1598,1599, 35, 4, 1300, 400, 0, 0 }, + { 374, 375, 35, 4, 1186, 0, 0, 0 }, + {1566,1567, 35, 4, 2333, 813, 0, 0 }, + {2306,2307, 35, 4, 2360, 906, 0, 0 }, + {3034, 339, 35, 6, 6, 0, 0, 0 }, + {2305,1548, 35, 4, 200, 0, 0, 0 }, {1595,1595, 35, 0, 220, 273, 0, 0 }, - {2303,2304, 35, 0, 186, 20, 0, 0 }, - {1560,2308, 35, 0, 600, 373, 0, 0 }, - {2309,2310, 35, 0, 40000, 0, 0, 0 }, + {2303,2304, 35, 4, 146, 0, 0, 0 }, + {1560,2308, 35, 4, 353, 233, 0, 0 }, + {2309,2310, 35, 4, 2013, 433, 0, 0 }, {1568,1568, 35, 0, 1280, 453, 0, 0 }, - {2311,2312, 35, 0, 360, 106, 0, 0 }, - {2313,2314, 35, 0, 620, 0, 0, 0 }, + {2311,2312, 35, 4, 346, 146, 0, 0 }, + {2313,2314, 35, 4, 633, 240, 0, 0 }, {2315,2315, 35, 0, 106, 0, 0, 0 }, {2316,2316, 35, 0, 506, 453, 0, 0 }, {1612,1612, 35, 0, 526, 400, 0, 0 }, @@ -7849,14 +7712,14 @@ const struct adlinsdata adlins[4815] = {2321,2321, 35, 0, 120, 26, 0, 0 }, {2322,2322, 35, 0, 1220, 406, 0, 0 }, {2323,2323, 35, 0, 2360, 786, 0, 0 }, - {2324, 392, 35, 0, 353, 146, 0, 0 }, - {2324, 393, 35, 0, 453, 146, 0, 0 }, - {2325,2326, 35, 0, 533, 140, 0, 0 }, - {2327,2328, 35, 0, 1273, 393, 0, 0 }, - {2329,2330, 35, 0, 40000, 0, 0, 0 }, - {2331,2332, 35, 0, 40000, 0, 0, 0 }, - {3035,3036, 35, 0, 4133, 433, 0, 0 }, - {3037,3038, 35, 0, 1740, 286, 0, 0 }, + {2324, 392, 35, 4, 180, 46, 0, 0 }, + {2324, 393, 35, 4, 460, 66, 0, 0 }, + {2325,2326, 35, 4, 533, 133, 0, 0 }, + {2327,2328, 35, 4, 1273, 406, 0, 0 }, + {2329,2330, 35, 4, 613, 0, 0, 0 }, + {2331,2332, 35, 4, 2340, 780, 0, 0 }, + {3035,3036, 35, 4, 1193, 433, 0, 0 }, + {3037,3038, 35, 4, 1840, 0, 0, 0 }, {1564,1564, 35, 0, 713, 273, 0, 0 }, {3039,3039, 0, 0, 40000, 0, 0, 0 }, {3040,3040, 0, 0, 6100, 146, 0, 0 }, @@ -8181,8 +8044,8 @@ const struct adlinsdata adlins[4815] = {3355,3355, 0, 0, 953, 13, 0, 0 }, {3356,3356, 0, 0, 293, 20, 0, 0 }, { 142, 142, 20, 0, 1893, 620, 0, 0 }, - {3357,1451, 0, 4, 2373, 780, 0, 0 }, - {3358,3359, 0, 4, 9260, 246, 0, 0 }, + {3357,1451, 0, 4, 2340, 780, 0, 0 }, + {3358,3359, 0, 4, 9206, 240, 0, 0 }, {3360,1455, 0, 4, 40000, 0, 0, 0 }, {3361,1463, 0, 4, 40000, 266, 0, 0 }, { 225,3362, 0, 4, 7993, 100, 0, 0 }, @@ -8196,9 +8059,9 @@ const struct adlinsdata adlins[4815] = {3368,3033, 54, 4, 60, 0, 0, 0 }, {3368,3033, 57, 4, 60, 0, 0, 0 }, {3368,3033, 60, 4, 60, 0, 0, 0 }, - {3369,3370, 70, 4, 840, 0, 0, 0 }, + {3369,3370, 70, 4, 773, 0, 0, 0 }, {1564,1565, 80, 4, 220, 0, 0, 0 }, - {3371,1571, 44, 4, 420, 0, 0, 0 }, + {3371,1571, 44, 4, 413, 0, 0, 0 }, {3372,3372, 0, 0, 8366, 666, 0, 0 }, {3373,3373, 0, 0, 8366, 666, 0, 0 }, {3374,3374, 0, 0, 3773, 73, 0, 0 }, @@ -8854,83 +8717,101 @@ const struct adlinsdata adlins[4815] = { 169, 169, 68, 0, 340, 320, 0, 0 }, { 131, 131, 48, 0, 520, 200, 0, 0 }, {3061,3061, 53, 0, 40000, 0, 0, 0 }, - {3943,3944, 0, 4, 2153, 0, 0, 0 }, - {3945,3946, 0, 4, 9060, 393, 0, 0 }, - { 174,3947, 0, 4, 6953, 0, 0, 0 }, - {3948,3949, 0, 4, 9386, 140, 0, 0 }, - { 9,3950, 0, 4, 1626, 426, 0, 0 }, - {3951,3952, 0, 4, 18466, 240, 0, 0 }, - {3953,3954, 0, 4, 4666, 1486, 0, 0 }, - { 15,3955, 0, 4, 5700, 1986, 0, 0 }, + {3943,3944, 0, 4, 2133, 0, 0, 0 }, + {3945,3946, 0, 4, 8966, 393, 0, 0 }, + { 174,3947, 0, 4, 6946, 0, 0, 0 }, + {3948,3949, 0, 4, 9320, 133, 0, 0 }, + { 9,3950, 0, 4, 1606, 426, 0, 0 }, + {3951,3952, 0, 4, 18373, 240, 0, 0 }, + {3953,3954, 0, 1, 7440, 1100, 0, 0.0625 }, + { 15,3955, 0, 4, 5640, 1986, 0, 0 }, {3956,3957, 0, 4, 40000, 100, 0, 0 }, {3958,3959, 0, 4, 40000, 73, 0, 0 }, {3960,3961, 0, 4, 40000, 73, 0, 0 }, {3962,3963, 0, 4, 40000, 73, 0, 0 }, - {3964,3965, 0, 4, 18280, 153, 0, 0 }, - {3966,3965, 0, 4, 18686, 160, 0, 0 }, - { 31,3967, 0, 4, 40000, 0, 0, 0 }, - {3968,3969, 0, 4, 17966, 100, 0, 0 }, - {3970,3971, 0, 4, 40000, 66, 0, 0 }, - {3972,3971, 0, 4, 40000, 66, 0, 0 }, - {3973,3974, 0, 4, 40000, 46, 0, 0 }, - {3975,3976, 0, 4, 18693, 106, 0, 0 }, - {3977,3976, 0, 4, 18593, 106, 0, 0 }, - {3978,3979, 0, 4, 9366, 106, 0, 0 }, - {3980,3981, 0, 4, 9120, 226, 0, 0 }, - {3982,3983, 0, 4, 40000, 140, 0, 0 }, - {3984,3985, 0, 4, 40000, 800, 0, 0 }, - { 54,3986, 0, 4, 2520, 706, 0, 0 }, - {3987,3988, 0, 4, 40000, 86, 0, 0 }, - {3989,3990, 0, 4, 40000, 233, 0, 0 }, - {3991, 253, 0, 4, 40000, 66, 0, 0 }, - {3992,3992, 0, 0, 40000, 0, 0, 0 }, - {3993,3993, 0, 0, 40000, 120, 0, 0 }, - {3994,3995, 0, 4, 40000, 80, 0, 0 }, - {3996,3997, 0, 4, 40000, 73, 0, 0 }, - {3998,3999, 0, 4, 40000, 86, 0, 0 }, - {1503,4000, 0, 4, 40000, 93, 0, 0 }, - { 88,4001, 0, 4, 40000, 1220, 0, 0 }, - {3743,4002, 0, 4, 7706, 1260, 0, 0 }, - { 92,4003, 0, 4, 40000, 186, 0, 0 }, - { 93,4004, 0, 4, 40000, 813, 0, 0 }, - { 94,4005, 0, 4, 7720, 1260, 0, 0 }, - { 96,4006, 0, 4, 40000, 2460, 0, 0 }, - { 103,4007, 0, 4, 3720, 1240, 0, 0 }, - { 104,4008, 0, 4, 3020, 1226, 0, 0 }, - { 105,4009, 0, 4, 6086, 2453, 0, 0 }, - { 107,4010, 0, 4, 2100, 760, 0, 0 }, - { 108,4011, 0, 4, 40000, 73, 0, 0 }, - { 110,4012, 0, 4, 40000, 100, 0, 0 }, - { 111,4013, 0, 4, 2366, 820, 0, 0 }, - {4014,4015, 0, 4, 1026, 326, 0, 0 }, - { 115,4016, 0, 4, 1853, 0, 0, 0 }, - { 118,4017, 0, 4, 1553, 53, 0, 0 }, - { 119,4018, 0, 4, 593, 0, 0, 0 }, - { 120,4019, 0, 4, 2293, 1173, 0, 0 }, - { 121,4020, 0, 4, 10673, 3000, 0, 0 }, - { 123,4021, 0, 4, 7413, 2486, 0, 0 }, - { 124,4022, 0, 4, 40000, 1126, 0, 0 }, - { 125,4023, 0, 4, 40000, 1546, 0, 0 }, - {4024,4024, 35, 0, 706, 266, 0, 0 }, - {4025,4026, 38, 1, 273, 106, 0, 0 }, - {4027,4028, 38, 1, 366, 133, 0, 0 }, - {4029,4030, 48, 1, 280, 133, 0, -1.90625 }, - {4031,4031, 51, 0, 113, 80, 0, 0 }, - {4032,4033, 48, 1, 953, 346, 0, -1.90625 }, - {4034,4034, 61, 1, 3200, 540, 0, 0.09375 }, - {3369,1557, 70, 4, 833, 0, 0, 0 }, - {4035,4036, 79, 1, 1306, 513, 0, 0.078125 }, - {4037,4037, 62, 0, 5200, 466, 0, 0 }, - {4038,4039, 67, 1, 2153, 1080, 0, 0.078125 }, - {4040,4040, 62, 1, 3226, 573, 0, 0.09375 }, - {4041,4042, 54, 1, 286, 133, 0, 0 }, - {4041,4043, 48, 1, 286, 126, 0, 0 }, + {3964,3965, 0, 4, 18186, 153, 0, 0 }, + {3966,3967, 0, 4, 18453, 153, 0, 0 }, + { 31,3968, 0, 4, 40000, 0, 0, 0 }, + {3969,3970, 0, 4, 17886, 100, 0, 0 }, + {3971,3972, 0, 4, 40000, 66, 0, 0 }, + {3973,3972, 0, 4, 40000, 66, 0, 0 }, + {3974,3975, 0, 4, 40000, 46, 0, 0 }, + {3976,3977, 0, 4, 18553, 106, 0, 0 }, + {3978,3977, 0, 4, 18460, 106, 0, 0 }, + {3979,3980, 0, 4, 9366, 106, 0, 0 }, + {3981,3982, 0, 4, 9073, 226, 0, 0 }, + {3983,3984, 0, 4, 40000, 140, 0, 0 }, + {3985,3986, 0, 4, 40000, 800, 0, 0 }, + { 54,3987, 0, 4, 2513, 706, 0, 0 }, + {3988,3989, 0, 4, 40000, 86, 0, 0 }, + {3990,3990, 0, 0, 40000, 126, 0, 0 }, + {3991,3992, 0, 4, 40000, 233, 0, 0 }, + {3993, 253, 0, 4, 40000, 66, 0, 0 }, + {3994,3995, 0, 4, 40000, 0, 0, 0 }, + {3996,3997, 0, 4, 40000, 126, 0, 0 }, + {3998,3999, 0, 4, 40000, 80, 0, 0 }, + {4000,4001, 0, 4, 40000, 73, 0, 0 }, + {4002,4003, 0, 1, 40000, 86, 0, 0.046875 }, + {4004,4005, 0, 4, 40000, 86, 0, 0 }, + {1503,4006, 0, 4, 40000, 93, 0, 0 }, + { 88,4007, 0, 4, 40000, 1220, 0, 0 }, + {3743,4008, 0, 4, 7646, 1260, 0, 0 }, + { 92,4009, 0, 4, 40000, 186, 0, 0 }, + { 93,4010, 0, 4, 40000, 813, 0, 0 }, + { 94,4011, 0, 4, 7660, 1260, 0, 0 }, + { 96,4012, 0, 4, 40000, 2460, 0, 0 }, + {4013,4014, 0, 4, 40000, 420, 0, 0 }, + { 103,4015, 0, 4, 3673, 1240, 0, 0 }, + {4016,4017, 0, 1, 6286, 380, 0, 0 }, + {4018,4019, 0, 1, 2220, 426, 0, 0.03125 }, + { 107,4020, 0, 4, 2086, 760, 0, 0 }, + {4021,4022, 0, 1, 40000, 100, 0, 0.0625 }, + { 110,4023, 0, 4, 40000, 100, 0, 0 }, + { 111,4024, 0, 4, 2300, 820, 0, 0 }, + {4025,4026, 0, 4, 1013, 326, 0, 0 }, + {4027,4028, 0, 1, 1220, 393, 0, 0.03125 }, + { 115,4029, 0, 4, 1813, 0, 0, 0 }, + {4030,4031, 0, 1, 566, 146, 0, 0 }, + { 118,4032, 0, 4, 1553, 53, 0, 0 }, + {4033,4033, 0, 0, 613, 60, 0, 0 }, + { 120,4034, 0, 4, 2126, 1166, 0, 0 }, + {4035,4036, 0, 1, 11880, 2993, 0, 0 }, + { 123,4037, 0, 4, 7080, 2473, 0, 0 }, + { 124,4038, 0, 4, 40000, 1126, 0, 0 }, + { 125,4039, 0, 4, 40000, 1546, 0, 0 }, + {4040,4040, 34, 0, 133, 40, 0, 0 }, + {4041,4041, 28, 0, 193, 46, 0, 0 }, + {4042,4043, 39, 1, 553, 126, 0, 0 }, + {4042,4043, 33, 1, 553, 126, 0, 0 }, + {4044,4045, 63, 4, 166, 0, 0, 0 }, + {4046,4046, 15, 0, 113, 0, 0, 0 }, + {4047,4047, 36, 0, 106, 0, 0, 0 }, + {4047,4048, 36, 1, 480, 173, 0, 0.40625 }, + {4049,4049, 35, 0, 706, 266, 0, 0 }, + {4050,4051, 38, 1, 273, 106, 0, 0 }, + {4052,4053, 38, 1, 366, 133, 0, 0 }, + {4054,4055, 48, 1, 280, 133, 0, -1.90625 }, + {4056,4056, 48, 0, 180, 86, 0, 0 }, + {4057,4058, 48, 1, 953, 346, 0, -1.90625 }, + {4059,4059, 61, 1, 3200, 540, 0, 0.09375 }, + {3369,1557, 70, 4, 766, 0, 0, 0 }, + {4060,4061, 79, 1, 1306, 513, 0, 0.078125 }, + {4062,4062, 62, 0, 5200, 466, 0, 0 }, + {4063,4064, 67, 1, 2153, 1080, 0, 0.078125 }, + {4065,4065, 62, 1, 3226, 573, 0, 0.09375 }, + {4066,4067, 54, 1, 286, 133, 0, 0 }, + {4066,4068, 48, 1, 286, 126, 0, 0 }, + {1589,1589, 71, 0, 106, 46, 0, 0 }, { 389, 389, 42, 0, 266, 73, 0, 0 }, - {4044,4045, 48, 1, 280, 126, 0, 0 }, - {4046,4047, 48, 1, 380, 60, 0, 0 }, - {4048,4048, 16, 0, 180, 20, 0, 0 }, - {4049,4049, 16, 0, 740, 20, 0, 0 }, - {4050,4051, 64, 4, 1366, 0, 0, 0 }, + {4069,4070, 60, 1, 120, 80, 0, 0 }, + {4070,4071, 60, 1, 380, 80, 0, 0 }, + {4072,4072, 73, 0, 166, 33, 0, 0 }, + {4073,4074, 68, 1, 153, 40, 0, 0 }, + {4075,4076, 18, 1, 200, 80, 0, 0 }, + {4077,4078, 18, 1, 253, 73, 0, 0 }, + {4079,4080, 64, 4, 1346, 0, 0, 0 }, + {4081,4082, 64, 1, 373, 73, 0, 0.03125 }, + {4083,4083, 67, 0, 106, 26, 0, 0 }, { 844, 844,244, 2, 6, 0, 0, 0 }, { 855, 855,244, 2, 6, 0, 0, 0 }, { 880, 880,232, 0, 253, 80, 0, 0 }, @@ -8962,415 +8843,388 @@ const struct adlinsdata adlins[4815] = { 902, 902, 35, 0, 1093, 73, 0, 0 }, { 903, 903, 35, 0, 126, 73, 0, 0 }, {3500,3500, 35, 2, 6, 0, 0, 0 }, - {4052,4052, 0, 0, 14166, 320, 0, 0 }, - {4053,4053, 0, 0, 7413, 653, 0, 0 }, - {4054,4054, 0, 0, 40000, 146, 0, 0 }, - {4055,4055, 0, 0, 40000, 113, 0, 0 }, - {4056,4056, 0, 0, 16773, 193, 0, 0 }, - {4057,4057, 0, 0, 40000, 73, 0, 0 }, - {4058,4058, 0, 0, 40000, 0, 0, 0 }, - {4059,4059, 0, 0, 966, 373, 0, 0 }, - {4060,4060, 0, 0, 40000, 80, 0, 0 }, - {4061,4061, 0, 0, 40000, 80, 0, 0 }, - {4062,4062, 0, 0, 18473, 93, 0, 0 }, - {4063,4063, 0, 0, 40000, 60, 0, 0 }, - {4064,4064, 0, 0, 40000, 73, 0, 0 }, - {4065,4065, 0, 0, 40000, 0, 0, 0 }, - {4066,4066, 0, 0, 40000, 213, 0, 0 }, - {4067,4067, 0, 0, 40000, 66, 0, 0 }, - {4068,4068, 0, 0, 1413, 1026, 0, 0 }, - {4069,4069, 0, 0, 506, 200, 0, 0 }, - {4070,4070, 0, 0, 3793, 1106, 0, 0 }, - {4071,4071, 0, 0, 40000, 220, 0, 0 }, - {4072,4072, 0, 0, 40000, 46, 0, 0 }, - {4073,4073, 0, 0, 40000, 0, 0, 0 }, - {4074,4074, 0, 0, 40000, 60, 0, 0 }, - {4075,4075, 0, 0, 40000, 0, 0, 0 }, - {4076,4076, 0, 0, 40000, 33, 0, 0 }, - {4077,4077, 0, 0, 40000, 0, 0, 0 }, - {4078,4078, 0, 0, 40000, 146, 0, 0 }, - {4079,4079, 0, 0, 40000, 66, 0, 0 }, - {4080,4080, 0, 0, 40000, 353, 0, 0 }, - {4081,4081, 0, 0, 40000, 66, 0, 0 }, - {4082,4082, 0, 0, 40000, 53, 0, 0 }, - {4083,4083, 0, 0, 40000, 73, 0, 0 }, - {4084,4084, 0, 0, 40000, 66, 0, 0 }, - {4085,4085, 0, 0, 40000, 926, 0, 0 }, - {4086,4086, 0, 0, 2833, 200, 0, 0 }, + {4084,4084, 0, 0, 14166, 320, 0, 0 }, + {4085,4085, 0, 0, 7413, 653, 0, 0 }, + {4086,4086, 0, 0, 40000, 146, 0, 0 }, + {4087,4087, 0, 0, 40000, 113, 0, 0 }, + {4088,4088, 0, 0, 16773, 193, 0, 0 }, + {4089,4089, 0, 0, 40000, 73, 0, 0 }, + {4090,4090, 0, 0, 40000, 0, 0, 0 }, + {4091,4091, 0, 0, 966, 373, 0, 0 }, + {4092,4092, 0, 0, 40000, 80, 0, 0 }, + {4093,4093, 0, 0, 40000, 80, 0, 0 }, + {4094,4094, 0, 0, 18473, 93, 0, 0 }, + {4095,4095, 0, 0, 40000, 60, 0, 0 }, + {4096,4096, 0, 0, 40000, 73, 0, 0 }, + {4097,4097, 0, 0, 40000, 0, 0, 0 }, + {4098,4098, 0, 0, 40000, 213, 0, 0 }, + {4099,4099, 0, 0, 40000, 66, 0, 0 }, + {4100,4100, 0, 0, 1413, 1026, 0, 0 }, + {4101,4101, 0, 0, 506, 200, 0, 0 }, + {4102,4102, 0, 0, 3793, 1106, 0, 0 }, + {4103,4103, 0, 0, 40000, 220, 0, 0 }, + {4104,4104, 0, 0, 40000, 46, 0, 0 }, + {4105,4105, 0, 0, 40000, 0, 0, 0 }, + {4106,4106, 0, 0, 40000, 60, 0, 0 }, + {4107,4107, 0, 0, 40000, 0, 0, 0 }, + {4108,4108, 0, 0, 40000, 33, 0, 0 }, + {4109,4109, 0, 0, 40000, 0, 0, 0 }, + {4110,4110, 0, 0, 40000, 146, 0, 0 }, + {4111,4111, 0, 0, 40000, 66, 0, 0 }, + {4112,4112, 0, 0, 40000, 353, 0, 0 }, + {4113,4113, 0, 0, 40000, 66, 0, 0 }, + {4114,4114, 0, 0, 40000, 53, 0, 0 }, + {4115,4115, 0, 0, 40000, 73, 0, 0 }, + {4116,4116, 0, 0, 40000, 66, 0, 0 }, + {4117,4117, 0, 0, 40000, 926, 0, 0 }, + {4118,4118, 0, 0, 2833, 200, 0, 0 }, { 127, 127, 36, 0, 386, 166, 0, 0 }, - {4087,4087, 36, 0, 100, 0, 0, 0 }, + {4119,4119, 36, 0, 100, 0, 0, 0 }, {2030,2030, 36, 0, 346, 140, 0, 0 }, {3782,3782, 48, 0, 93, 0, 0, 0 }, {3783,3783, 36, 0, 146, 0, 0, 0 }, - {4088,4088, 48, 0, 1886, 653, 0, 0 }, + {4120,4120, 48, 0, 1886, 653, 0, 0 }, { 132, 132, 69, 0, 126, 66, 0, 0 }, - {4088,4088, 52, 0, 1853, 626, 0, 0 }, + {4120,4120, 52, 0, 1853, 626, 0, 0 }, { 152, 152, 48, 0, 220, 86, 0, 0 }, - {4088,4088, 55, 0, 1886, 640, 0, 0 }, + {4120,4120, 55, 0, 1886, 640, 0, 0 }, { 139, 139, 57, 0, 293, 133, 0, 0 }, - {4088,4088, 58, 0, 1860, 633, 0, 0 }, - {4088,4088, 60, 0, 1886, 633, 0, 0 }, - {4089,4089, 62, 0, 2660, 900, 0, 0 }, - {4088,4088, 63, 0, 1880, 646, 0, 0 }, + {4120,4120, 58, 0, 1860, 633, 0, 0 }, + {4120,4120, 60, 0, 1886, 633, 0, 0 }, + {4121,4121, 62, 0, 2660, 900, 0, 0 }, + {4120,4120, 63, 0, 1880, 646, 0, 0 }, { 134, 134, 70, 0, 966, 360, 0, 0 }, - {4090,4090, 70, 0, 973, 346, 0, 0 }, - {4091,4091, 53, 0, 1866, 640, 0, 0 }, + {4122,4122, 70, 0, 973, 346, 0, 0 }, + {4123,4123, 53, 0, 1866, 640, 0, 0 }, {3516,3516, 48, 0, 180, 93, 0, 0 }, - {4092,4092, 84, 0, 1360, 473, 0, 0 }, - {4093,4093, 43, 0, 513, 206, 0, 0 }, - {4094,4094, 56, 0, 1353, 480, 0, 0 }, + {4124,4124, 84, 0, 1360, 473, 0, 0 }, + {4125,4125, 43, 0, 513, 206, 0, 0 }, + {4126,4126, 56, 0, 1353, 480, 0, 0 }, {3791,3791, 24, 0, 1866, 613, 0, 0 }, { 134, 134, 65, 0, 1346, 486, 0, 0 }, { 146, 146, 48, 0, 173, 93, 0, 0 }, { 146, 146, 54, 0, 173, 93, 0, 0 }, - {4095,4095, 42, 0, 246, 140, 0, 0 }, - {4095,4095, 39, 0, 240, 133, 0, 0 }, + {4127,4127, 42, 0, 246, 140, 0, 0 }, + {4127,4127, 39, 0, 240, 133, 0, 0 }, {3816,3816, 52, 0, 306, 113, 0, 0 }, - {4096,4096, 52, 0, 413, 86, 0, 0 }, + {4128,4128, 52, 0, 413, 86, 0, 0 }, { 158, 158, 60, 0, 146, 166, 0, 0 }, { 158, 158, 66, 0, 146, 166, 0, 0 }, { 158, 158, 59, 0, 146, 166, 0, 0 }, {3538,3538, 91, 0, 773, 233, 0, 0 }, {3547,3547,109, 0, 5300, 1786, 0, 0 }, - {4097,4097, 79, 0, 560, 313, 0, 0 }, - {4098,4098, 0, 0, 10646, 73, 0, 0 }, - {4099,4100, 0, 1, 14166, 586, 0, 0.03125 }, - {4101,4102, 0, 1, 15553, 546, 0, 0.03125 }, - {4103,4104, 0, 1, 11746, 320, 0, 0.046875 }, - {4105,4106, 0, 1, 14706, 646, 0, 0.15625 }, - {4107,4108, 0, 1, 7320, 100, 0, 0.046875 }, - {4109,4110, 0, 1, 40000, 0, 0, 0.0625 }, - {4111,4112, 0, 1, 13660, 260, 0, 0 }, - {4113,4114, 0, 1, 15026, 133, 0, 0 }, - {4115,4116, 0, 1, 40000, 0, 0, 2.5e-05 }, - {4117,4118, 0, 1, 4980, 3400, 0, 0 }, - {4119,4120, 0, 1, 7840, 2660, 0, 0.046875 }, - {4121,4122, 0, 1, 8326, 180, 0, 0 }, - {4123,4124, 0, 1, 1093, 140, 0, 0 }, - {4125,4126, 0, 1, 2280, 400, 0, 0 }, - {4127,4128, 0, 1, 4553, 1486, 0, 0.03125 }, - {4129,4129, 0, 1, 40000, 0, 0, 0.03125 }, - {4130,4131, 0, 1, 40000, 60, 0, 0.15625 }, - {4132,4133, 0, 1, 40000, 93, 0, 0.078125 }, - {4134,4135, 0, 1, 40000, 86, 0, 0.15625 }, - {4136,4137, 0, 1, 40000, 520, 0, 0.03125 }, - {4138,4139, 0, 1, 40000, 140, 0, 0.0625 }, - {4140,4141, 0, 1, 40000, 133, 0, 0.140625 }, - {4142,4143, 0, 1, 40000, 73, 0, 0 }, - {4144,4145, 0, 1, 40000, 346, 0, 0.109375 }, - {4146,4147, 0, 1, 3693, 86, 0, 0 }, - {4148,4149, 0, 1, 6586, 460, 0, 2.5e-05 }, - {4150,4151, 0, 1, 4320, 93, 0, 0 }, - {4152,4153, 0, 1, 7346, 126, 0, 0.046875 }, - {4154,4155, 0, 1, 3633, 260, 0, 0 }, - {4156,4157, 0, 1, 40000, 126, 0, -1.95312 }, - {4158,4159, 0, 1, 40000, 126, 0, -1.9375 }, - {4160,4161, 0, 1, 40000, 46, 0, 0.234375 }, - {4162,4163, 0, 1, 40000, 0, 0, 0.03125 }, - {4164,4165, 0, 1, 10320, 86, 0, 0 }, - {4166,4167, 0, 1, 12933, 133, 0, 0 }, - {4168,4169, 0, 1, 11820, 240, 0, 0.046875 }, - {4170,4171, 0, 1, 3966, 166, 0, 0 }, - {4172,4173, 0, 1, 40000, 0, 0, 0 }, - {4174,4174, 0, 0, 2666, 160, 0, 0 }, - {4175,4176, 0, 1, 15046, 93, 0, 0.078125 }, - {4177,4178, 0, 1, 40000, 100, 0, 0 }, - {4179,4179, 0, 0, 40000, 260, 0, 0 }, - {4180,4181, 0, 1, 40000, 126, 0, 2.5e-05 }, - {4182,4182, 0, 0, 40000, 233, 0, 0 }, - {4183,4184, 0, 1, 40000, 440, 0, 0.078125 }, - {4185,4186, 0, 1, 2160, 606, 0, 0.109375 }, - {4187,4188, 0, 1, 14753, 2400, 0, 0.03125 }, - {4189,4190, 0, 1, 7680, 646, 0, 0.03125 }, - {4191,4192, 0, 1, 40000, 446, 0, 0.0625 }, - {4193,4194, 0, 1, 40000, 866, 0, -0.0625 }, - {4195,4195, 0, 1, 40000, 1220, 0, 0.078125 }, - {4196,4196, 0, 1, 40000, 1960, 0, 0.0625 }, - {4197,4198, 0, 1, 40000, 433, 0, 0.125 }, - {4199,4200, 0, 1, 40000, 140, 0, 0.140625 }, - {4201,4202, 0, 1, 40000, 806, 0, 0.109375 }, - {4203,4204, 0, 1, 2040, 486, 0, 0.125 }, - {4205,4206, 0, 1, 40000, 86, 0, 0 }, - {4207,4208, 0, 1, 40000, 80, 0, 0.03125 }, - {4209,4209, 0, 0, 40000, 73, 0, 0 }, - {4210,4210, 0, 0, 40000, 126, 0, 0 }, - {4211,4212, 0, 1, 40000, 400, 0, 0.0625 }, - {4213,4214, 0, 1, 40000, 120, 0, 0.0625 }, - {4215,4216, 0, 1, 40000, 0, 0, 0.09375 }, - {4217,4217, 0, 1, 40000, 0, 0, 0.125 }, - {4218,4219, 0, 1, 40000, 186, 0, 0 }, - {4220,4220, 0, 0, 40000, 166, 0, 0 }, - {4221,4221, 0, 0, 40000, 73, 0, 0 }, - {4222,4222, 0, 0, 40000, 60, 0, 0 }, - {4223,4224, 0, 1, 40000, 140, 0, 0 }, - {4225,4225, 0, 0, 40000, 140, 0, 0 }, - {4226,4226, 0, 0, 40000, 66, 0, 0 }, - {4227,4228, 0, 1, 40000, 133, 0, 0 }, - {4229,4229, 0, 0, 40000, 86, 0, 0 }, - {4230,4230, 0, 0, 40000, 73, 0, 0 }, - {4231,4231, 0, 0, 40000, 106, 0, 0 }, - {4232,4233, 0, 1, 40000, 186, 0, 0.03125 }, - {4234,4235, 0, 1, 40000, 86, 0, 0.046875 }, - {4236,4237, 0, 1, 40000, 0, 0, 0.03125 }, - {4238,4238, 0, 0, 40000, 300, 0, 0 }, - {4239,4239, 0, 0, 40000, 66, 0, 0 }, - {4240,4241, 0, 1, 40000, 73, 0, 0.125 }, - {4242,4243, 0, 1, 40000, 86, 0, 0.109375 }, - {4244,4245, 0, 1, 40000, 146, 0, 0.109375 }, - {4246,4247, 0, 1, 40000, 66, 0, -0.03125 }, - {4248,4248, 0, 0, 40000, 60, 0, 0 }, - {4249,4250, 0, 1, 40000, 213, 0, 0.15625 }, - {4251,4252, 0, 1, 40000, 66, 0, 0.125 }, - {4253,4254, 0, 1, 40000, 100, 0, 0.03125 }, - {4255,4256, 0, 1, 40000, 1513, 0, 0.078125 }, - {4257,4258, 0, 1, 40000, 353, 0, 0.109375 }, - {4259,4260, 0, 1, 40000, 133, 0, 0.078125 }, - {4261,4262, 0, 1, 40000, 746, 0, 0.140625 }, - {4263,4264, 0, 1, 40000, 0, 0, 0.109375 }, - {4265,4266, 0, 1, 5033, 1606, 0, 0.0625 }, - {4267,4268, 0, 1, 40000, 1146, 0, 0.09375 }, - {4269,4270, 0, 1, 40000, 1586, 0, 0.109375 }, - {4271,4272, 0, 1, 40000, 0, 0, 0.09375 }, - {4273,4274, 0, 1, 40000, 1006, 0, 0.125 }, - {4275,4275, 0, 1, 2680, 793, 0, 0.109375 }, - {4276,4277, 0, 1, 40000, 0, 0, -0.046875 }, - {4278,4279, 0, 1, 9000, 3186, 0, 0.125 }, - {4280,4281, 0, 1, 40000, 1073, 0, -0.078125 }, - {4282,4283, 0, 1, 40000, 2093, 0, 0.140625 }, - {4284,4285, 0, 1, 40000, 0, 0, 0.078125 }, - {4286,4287, 0, 1, 9580, 713, 0, 0.03125 }, - {4288,4289, 0, 1, 6286, 380, 0, 0 }, - {4290,4291, 0, 1, 2220, 426, 0, 0.03125 }, - {4292,4292, 0, 0, 1166, 760, 0, 0 }, - {4293,4294, 0, 1, 1186, 240, 0, 0 }, - {4295,4296, 0, 1, 40000, 100, 0, 0.0625 }, - {4297,4297, 0, 0, 40000, 160, 0, 0 }, - {4298,4298, 0, 0, 40000, 120, 0, 0 }, - {4299,4299, 0, 0, 8673, 2413, 0, 0 }, - {4300,4300, 0, 0, 393, 126, 0, 0 }, - {4301,4302, 0, 1, 1220, 393, 0, 0.03125 }, - {4303,4303, 0, 0, 246, 93, 0, 0 }, - {4304,4305, 0, 1, 1953, 393, 0, 0 }, - {4306,4307, 0, 1, 566, 146, 0, 0 }, - {4308,4309, 0, 1, 4220, 133, 0, 0 }, - {4310,4311, 0, 1, 2873, 73, 0, 0.109375 }, - {4312,4312, 0, 0, 613, 60, 0, 0 }, - {4313,4314, 0, 1, 40000, 186, 0, 0 }, - {4315,4316, 0, 1, 11880, 2993, 0, 0 }, - {4317,4317, 0, 0, 1573, 86, 0, 0 }, - {4318,4319, 0, 1, 40000, 793, 0, 0 }, - {4320,4321, 0, 1, 40000, 173, 0, 0 }, - {4322,4323, 0, 1, 40000, 793, 0, 0 }, - {4324,4324, 0, 0, 606, 133, 0, 0 }, - {4325,4325, 34, 0, 133, 40, 0, 0 }, - {4326,4326, 28, 0, 193, 46, 0, 0 }, - {4327,4328, 39, 1, 553, 126, 0, 0 }, - {4327,4328, 33, 1, 553, 126, 0, 0 }, - {4329,4330, 63, 1, 160, 80, 0, 0 }, - {4331,4331, 15, 0, 113, 0, 0, 0 }, - {4332,4332, 36, 0, 106, 0, 0, 0 }, - {4332,4333, 36, 1, 480, 173, 0, 0.40625 }, - {4334,4335, 25, 1, 313, 153, 0, 0 }, - {4336,4335, 25, 1, 206, 100, 0, 0 }, - {4337,4338, 61, 1, 153, 93, 0, 0 }, - {4339,4340, 38, 1, 340, 133, 0, 0 }, - {4341,4342, 37, 1, 206, 93, 0, 0 }, - {4343,4344, 15, 1, 346, 153, 10, 0 }, - {4345,4346,100, 1, 146, 0, 0, 0.140625 }, - {4347,4348, 19, 1, 553, 200, 10, 0 }, - {4349,4349, 48, 0, 180, 86, 0, 0 }, - {4350,4351, 15, 1, 333, 153, 20, 0 }, - {4352,4353, 12, 1, 340, 146, 20, 0 }, - {4354,4355, 11, 1, 346, 146, 20, 0 }, - {4356,4357, 61, 1, 2706, 1033, 0, 0.09375 }, - {4358,4355, 8, 1, 340, 146, 20, 0 }, - {4359,4360, 91, 1, 1166, 366, 0, -0.046875 }, - {4361,4361, 70, 0, 966, 346, 0, 0 }, - {4362,4363, 80, 1, 300, 93, 0, 0.125 }, - {4364,4364, 58, 0, 206, 53, 0, 0 }, - {4365,4357, 62, 1, 2333, 820, 0, 0.09375 }, - {4366,4367, 31, 1, 773, 200, 0, 0 }, - {4368,4360, 91, 1, 1160, 360, 0, -0.03125 }, - {4369,4370, 41, 1, 373, 113, 0, 0 }, - {4371,4372, 35, 1, 406, 126, 0, 0 }, - {4373,4374, 29, 1, 146, 106, 0, 0 }, - {4375,4376, 41, 1, 400, 126, 0, 0 }, - {4375,4376, 37, 1, 400, 126, 0, 0 }, - {4377,4378, 54, 1, 286, 133, 0, 0 }, - {4377,4379, 48, 1, 286, 126, 0, 0 }, - {4380,4381, 77, 1, 193, 93, 0, 0 }, - {4382,4383, 72, 1, 200, 93, 0, 0 }, - {4384,4384, 40, 0, 513, 0, 0, 0 }, - {4385,4385, 38, 0, 200, 20, 0, 0 }, - {4386,4386, 36, 0, 620, 20, 0, 0 }, - {4387,4388, 60, 1, 120, 80, 0, 0 }, - {4388,4389, 60, 1, 380, 80, 0, 0 }, - {4390,4390, 73, 0, 166, 33, 0, 0 }, - {4391,4392, 68, 1, 153, 40, 0, 0 }, - {4393,4394, 18, 1, 200, 80, 0, 0 }, - {4395,4396, 18, 1, 253, 73, 0, 0 }, - {4397,4397, 90, 0, 193, 20, 0, 0 }, - {4398,4398, 90, 0, 793, 40, 0, 0 }, - {4399,4400, 64, 1, 373, 73, 0, 0.03125 }, - {4401,4402, 80, 1, 406, 153, 0, 0.03125 }, - {4403,4404, 64, 1, 1866, 606, 0, 0 }, - {4405,4405, 67, 0, 106, 26, 0, 0 }, - {4406,4407, 50, 1, 173, 0, 0, 0 }, - {4408,4408, 36, 0, 4646, 0, 0, 0 }, - {4409,4409, 0, 0, 40000, 86, 0, 0 }, - {4410,4410, 0, 0, 40000, 73, 0, 0 }, - {4411,4411, 0, 0, 2433, 700, 0, 0 }, - {4412,4412, 0, 0, 1233, 26, 0, 0 }, - {4413,4413, 0, 0, 40000, 66, 0, 0 }, - {4414,4414, 0, 0, 40000, 60, 0, 0 }, - {4415,4415, 0, 0, 40000, 60, 0, 0 }, - {4416,4416, 0, 0, 40000, 66, 0, 0 }, - {4417,4417, 0, 0, 40000, 66, 0, 0 }, - {4418,4418, 0, 0, 40000, 0, 0, 0 }, - {4418,4418, 73, 0, 40000, 0, 0, 0 }, - {4419,4419, 0, 0, 40000, 60, 0, 0 }, - {4420,4420, 0, 0, 40000, 60, 0, 0 }, - {4421,4421, 0, 0, 7326, 2486, 0, 0 }, - {4422,4422, 0, 0, 4886, 1586, 0, 0 }, - {4423,4423, 0, 0, 646, 20, 0, 0 }, - {4424,4424, 0, 0, 253, 20, 0, 0 }, - {4424,4424, 12, 0, 253, 20, 0, 0 }, - {4425,4425, 0, 0, 640, 100, 0, 0 }, - {4425,4425, 1, 0, 640, 106, 0, 0 }, - {4426,4426, 0, 0, 133, 106, 0, 0 }, - {4426,4426, 23, 0, 133, 106, 0, 0 }, - {4427,4427, 0, 0, 653, 100, 0, 0 }, - {4428,4428, 0, 0, 4166, 1546, 0, 0 }, - {4429,4429, 0, 0, 40000, 73, 0, 0 }, - {4430,4430, 0, 0, 40000, 60, 0, 0 }, - {4431,4431, 0, 0, 40000, 53, 0, 0 }, - {4432,4432, 0, 0, 40000, 0, 0, 0 }, - {4433,4433, 0, 0, 246, 20, 0, 0 }, - {4434,4434, 0, 2, 6, 0, 0, 0 }, - {4435,4435, 0, 0, 4946, 233, 0, 0 }, - {4436,4436, 0, 0, 4946, 233, 0, 0 }, - {4437,4437, 0, 0, 4953, 240, 0, 0 }, - {4438,4438, 0, 0, 4946, 233, 0, 0 }, - {4439,4439, 0, 0, 18233, 46, 0, 0 }, - {4440,4440, 0, 0, 2386, 26, 0, 0 }, - {4441,4441, 0, 0, 4640, 633, 0, 0 }, - {4442,4442, 0, 0, 18466, 100, 0, 0 }, - {4443,4443, 0, 0, 18440, 66, 0, -2 }, - {4444,4444, 0, 0, 18440, 6140, 0, -2 }, - {4445,4445, 0, 0, 1206, 433, 0, -2 }, - {4446,4446, 0, 0, 4626, 240, 0, 0 }, - {4447,4447, 0, 0, 726, 400, 0, 0 }, - {4448,4448, 0, 0, 5866, 73, 0, 0 }, - {4449,4449, 0, 0, 40000, 73, 0, 0 }, - {4450,4450, 0, 0, 40000, 73, 0, 0 }, - {4451,4451, 0, 0, 40000, 73, 0, 0 }, - {4452,4452, 0, 0, 40000, 73, 0, 0 }, - {4453,4453, 0, 0, 6500, 346, 0, 0 }, - {4454,4454, 0, 0, 6506, 346, 0, 0 }, - {4455,4455, 0, 0, 40000, 66, 0, -2 }, - {4456,4456, 0, 0, 40000, 66, 0, -2 }, - {4457,4457, 0, 0, 40000, 0, 0, 0 }, - {4458,4458, 0, 0, 40000, 46, 0, 0 }, - {4459,4459, 0, 0, 40000, 0, 0, 0 }, - {4459,4459, 0, 0, 40000, 0, 0, -2 }, - {4460,4460, 0, 0, 2386, 26, 0, 0 }, - {4461,4461, 0, 0, 40000, 73, 0, -2 }, - {4462,4462, 0, 0, 5866, 26, 0, -2 }, - {4463,4463, 0, 0, 40000, 133, 0, 0 }, - {4464,4464, 0, 0, 40000, 133, 0, 0 }, - {4465,4465, 0, 0, 40000, 126, 0, 0 }, - {4466,4466, 0, 0, 253, 20, 0, 0 }, - {4467,4467, 0, 0, 8866, 1366, 0, 0 }, - {4468,4468, 0, 0, 1040, 766, 0, 0 }, - {4469,4469, 0, 0, 40000, 146, 0, -2 }, - {4470,4470, 0, 0, 40000, 153, 0, -2 }, - {4471,4471, 0, 0, 40000, 466, 0, -2 }, - {4472,4472, 0, 0, 40000, 66, 0, 0 }, - {4473,4473, 0, 0, 2333, 566, 0, 0 }, - {4474,4474, 0, 0, 40000, 140, 0, -2 }, - {4475,4475, 0, 0, 40000, 100, 0, -2 }, - {4476,4476, 0, 0, 40000, 226, 0, -2 }, - {4477,4477, 0, 0, 40000, 0, 0, 0 }, + {4129,4129, 79, 0, 560, 313, 0, 0 }, + {4130,4130, 0, 0, 10646, 73, 0, 0 }, + {4131,4132, 0, 1, 14166, 586, 0, 0.03125 }, + {4133,4134, 0, 1, 15553, 546, 0, 0.03125 }, + {4135,4136, 0, 1, 11746, 320, 0, 0.046875 }, + {4137,4138, 0, 1, 14706, 646, 0, 0.15625 }, + {4139,4140, 0, 1, 7320, 100, 0, 0.046875 }, + {4141,4142, 0, 1, 40000, 0, 0, 0.0625 }, + {4143,4144, 0, 1, 13660, 260, 0, 0 }, + {4145,4146, 0, 1, 15026, 133, 0, 0 }, + {4147,4148, 0, 1, 40000, 0, 0, 2.5e-05 }, + {4149,4150, 0, 1, 4980, 3400, 0, 0 }, + {4151,4152, 0, 1, 7840, 2660, 0, 0.046875 }, + {4153,4154, 0, 1, 8326, 180, 0, 0 }, + {4155,4156, 0, 1, 1093, 140, 0, 0 }, + {4157,4158, 0, 1, 2280, 400, 0, 0 }, + {4159,4160, 0, 1, 4553, 1486, 0, 0.03125 }, + {4161,4161, 0, 1, 40000, 0, 0, 0.03125 }, + {4162,4163, 0, 1, 40000, 60, 0, 0.15625 }, + {4164,4165, 0, 1, 40000, 93, 0, 0.078125 }, + {4166,4167, 0, 1, 40000, 86, 0, 0.15625 }, + {4168,4169, 0, 1, 40000, 520, 0, 0.03125 }, + {4170,4171, 0, 1, 40000, 140, 0, 0.0625 }, + {4172,4173, 0, 1, 40000, 133, 0, 0.140625 }, + {4174,4175, 0, 1, 40000, 73, 0, 0 }, + {4176,4177, 0, 1, 40000, 346, 0, 0.109375 }, + {4178,4179, 0, 1, 3693, 86, 0, 0 }, + {4180,4181, 0, 1, 6586, 460, 0, 2.5e-05 }, + {4182,4183, 0, 1, 4320, 93, 0, 0 }, + {4184,4185, 0, 1, 7346, 126, 0, 0.046875 }, + {4186,4187, 0, 1, 3633, 260, 0, 0 }, + {4188,4189, 0, 1, 40000, 126, 0, -1.95312 }, + {4190,4191, 0, 1, 40000, 126, 0, -1.9375 }, + {4192,4193, 0, 1, 40000, 46, 0, 0.234375 }, + {4194,4195, 0, 1, 40000, 0, 0, 0.03125 }, + {4196,4197, 0, 1, 10320, 86, 0, 0 }, + {4198,4199, 0, 1, 12933, 133, 0, 0 }, + {4200,4201, 0, 1, 11820, 240, 0, 0.046875 }, + {4202,4203, 0, 1, 3966, 166, 0, 0 }, + {4204,4205, 0, 1, 40000, 0, 0, 0 }, + {4206,4206, 0, 0, 2666, 160, 0, 0 }, + {4207,4208, 0, 1, 15046, 93, 0, 0.078125 }, + {4209,4210, 0, 1, 40000, 100, 0, 0 }, + {4211,4211, 0, 0, 40000, 260, 0, 0 }, + {4212,4213, 0, 1, 40000, 126, 0, 2.5e-05 }, + {4214,4214, 0, 0, 40000, 233, 0, 0 }, + {4215,4216, 0, 1, 40000, 440, 0, 0.078125 }, + {4217,4218, 0, 1, 2160, 606, 0, 0.109375 }, + {4219,4220, 0, 1, 14753, 2400, 0, 0.03125 }, + {4221,4222, 0, 1, 7680, 646, 0, 0.03125 }, + {4223,4224, 0, 1, 40000, 446, 0, 0.0625 }, + {4225,4226, 0, 1, 40000, 866, 0, -0.0625 }, + {4227,4227, 0, 1, 40000, 1220, 0, 0.078125 }, + {4228,4228, 0, 1, 40000, 1960, 0, 0.0625 }, + {4229,4230, 0, 1, 40000, 433, 0, 0.125 }, + {4231,4232, 0, 1, 40000, 140, 0, 0.140625 }, + {4233,4234, 0, 1, 40000, 806, 0, 0.109375 }, + {4235,4236, 0, 1, 2040, 486, 0, 0.125 }, + {4237,4238, 0, 1, 40000, 86, 0, 0 }, + {4239,4240, 0, 1, 40000, 80, 0, 0.03125 }, + {4241,4241, 0, 0, 40000, 73, 0, 0 }, + {4242,4243, 0, 1, 40000, 400, 0, 0.0625 }, + {4244,4245, 0, 1, 40000, 120, 0, 0.0625 }, + {4246,4247, 0, 1, 40000, 0, 0, 0.09375 }, + {4248,4248, 0, 1, 40000, 0, 0, 0.125 }, + {4249,4250, 0, 1, 40000, 186, 0, 0 }, + {4251,4251, 0, 0, 40000, 166, 0, 0 }, + {4252,4252, 0, 0, 40000, 73, 0, 0 }, + {4253,4253, 0, 0, 40000, 60, 0, 0 }, + {4254,4255, 0, 1, 40000, 140, 0, 0 }, + {4256,4256, 0, 0, 40000, 140, 0, 0 }, + {4257,4257, 0, 0, 40000, 66, 0, 0 }, + {4258,4259, 0, 1, 40000, 133, 0, 0 }, + {4260,4260, 0, 0, 40000, 86, 0, 0 }, + {4261,4261, 0, 0, 40000, 73, 0, 0 }, + {4262,4262, 0, 0, 40000, 106, 0, 0 }, + {4263,4264, 0, 1, 40000, 186, 0, 0.03125 }, + {4265,4266, 0, 1, 40000, 0, 0, 0.03125 }, + {4267,4267, 0, 0, 40000, 300, 0, 0 }, + {4268,4268, 0, 0, 40000, 66, 0, 0 }, + {4269,4270, 0, 1, 40000, 73, 0, 0.125 }, + {4271,4272, 0, 1, 40000, 86, 0, 0.109375 }, + {4273,4274, 0, 1, 40000, 146, 0, 0.109375 }, + {4275,4276, 0, 1, 40000, 66, 0, -0.03125 }, + {4277,4277, 0, 0, 40000, 60, 0, 0 }, + {4278,4279, 0, 1, 40000, 213, 0, 0.15625 }, + {4280,4281, 0, 1, 40000, 66, 0, 0.125 }, + {4282,4283, 0, 1, 40000, 100, 0, 0.03125 }, + {4284,4285, 0, 1, 40000, 1513, 0, 0.078125 }, + {4286,4287, 0, 1, 40000, 353, 0, 0.109375 }, + {4288,4289, 0, 1, 40000, 133, 0, 0.078125 }, + {4290,4291, 0, 1, 40000, 746, 0, 0.140625 }, + {4292,4293, 0, 1, 40000, 0, 0, 0.109375 }, + {4294,4295, 0, 1, 5033, 1606, 0, 0.0625 }, + {4296,4297, 0, 1, 40000, 1146, 0, 0.09375 }, + {4298,4299, 0, 1, 40000, 1586, 0, 0.109375 }, + {4300,4301, 0, 1, 40000, 0, 0, 0.09375 }, + {4302,4303, 0, 1, 40000, 1006, 0, 0.125 }, + {4304,4304, 0, 1, 2680, 793, 0, 0.109375 }, + {4305,4306, 0, 1, 40000, 0, 0, -0.046875 }, + {4307,4308, 0, 1, 9000, 3186, 0, 0.125 }, + {4309,4310, 0, 1, 40000, 1073, 0, -0.078125 }, + {4311,4312, 0, 1, 40000, 2093, 0, 0.140625 }, + {4313,4314, 0, 1, 40000, 0, 0, 0.078125 }, + {4315,4316, 0, 1, 9580, 713, 0, 0.03125 }, + {4317,4317, 0, 0, 1166, 760, 0, 0 }, + {4318,4319, 0, 1, 1186, 240, 0, 0 }, + {4320,4320, 0, 0, 40000, 160, 0, 0 }, + {4321,4321, 0, 0, 40000, 120, 0, 0 }, + {4322,4322, 0, 0, 8673, 2413, 0, 0 }, + {4323,4323, 0, 0, 393, 126, 0, 0 }, + {4324,4324, 0, 0, 246, 93, 0, 0 }, + {4325,4326, 0, 1, 1953, 393, 0, 0 }, + {4327,4328, 0, 1, 4220, 133, 0, 0 }, + {4329,4330, 0, 1, 2873, 73, 0, 0.109375 }, + {4331,4332, 0, 1, 40000, 186, 0, 0 }, + {4333,4333, 0, 0, 1573, 86, 0, 0 }, + {4334,4335, 0, 1, 40000, 793, 0, 0 }, + {4336,4337, 0, 1, 40000, 173, 0, 0 }, + {4338,4339, 0, 1, 40000, 793, 0, 0 }, + {4340,4340, 0, 0, 606, 133, 0, 0 }, + {4044,4341, 63, 1, 160, 80, 0, 0 }, + {4342,4343, 25, 1, 313, 153, 0, 0 }, + {4344,4343, 25, 1, 206, 100, 0, 0 }, + {4345,4346, 61, 1, 153, 93, 0, 0 }, + {4347,4348, 38, 1, 340, 133, 0, 0 }, + {4349,4350, 37, 1, 206, 93, 0, 0 }, + {4351,4352, 15, 1, 346, 153, 10, 0 }, + {4353,4354,100, 1, 146, 0, 0, 0.140625 }, + {4355,4356, 19, 1, 553, 200, 10, 0 }, + {4357,4358, 15, 1, 333, 153, 20, 0 }, + {4359,4360, 12, 1, 340, 146, 20, 0 }, + {4361,4362, 11, 1, 346, 146, 20, 0 }, + {4363,4364, 61, 1, 2706, 1033, 0, 0.09375 }, + {4365,4362, 8, 1, 340, 146, 20, 0 }, + {4366,4367, 91, 1, 1166, 366, 0, -0.046875 }, + {4368,4368, 70, 0, 966, 346, 0, 0 }, + {4369,4370, 80, 1, 300, 93, 0, 0.125 }, + {4371,4371, 58, 0, 206, 53, 0, 0 }, + {4372,4364, 62, 1, 2333, 820, 0, 0.09375 }, + {4373,4374, 31, 1, 773, 200, 0, 0 }, + {4375,4367, 91, 1, 1160, 360, 0, -0.03125 }, + {4376,4377, 41, 1, 373, 113, 0, 0 }, + {4378,4379, 35, 1, 406, 126, 0, 0 }, + {4380,4381, 29, 1, 146, 106, 0, 0 }, + {4382,4383, 41, 1, 400, 126, 0, 0 }, + {4382,4383, 37, 1, 400, 126, 0, 0 }, + {4384,4385, 77, 1, 193, 93, 0, 0 }, + {4386,4387, 72, 1, 200, 93, 0, 0 }, + {4388,4388, 40, 0, 513, 0, 0, 0 }, + {4389,4389, 38, 0, 200, 20, 0, 0 }, + {4390,4390, 36, 0, 620, 20, 0, 0 }, + {4391,4391, 90, 0, 193, 20, 0, 0 }, + {4392,4392, 90, 0, 793, 40, 0, 0 }, + {4393,4394, 80, 1, 406, 153, 0, 0.03125 }, + {4395,4396, 64, 1, 1866, 606, 0, 0 }, + {4397,4398, 50, 1, 173, 0, 0, 0 }, + {4399,4399, 36, 0, 4646, 0, 0, 0 }, + {4400,4400, 0, 0, 40000, 86, 0, 0 }, + {4401,4401, 0, 0, 40000, 73, 0, 0 }, + {4402,4402, 0, 0, 2433, 700, 0, 0 }, + {4403,4403, 0, 0, 1233, 26, 0, 0 }, + {4404,4404, 0, 0, 40000, 66, 0, 0 }, + {4405,4405, 0, 0, 40000, 60, 0, 0 }, + {4406,4406, 0, 0, 40000, 60, 0, 0 }, + {4407,4407, 0, 0, 40000, 66, 0, 0 }, + {4408,4408, 0, 0, 40000, 66, 0, 0 }, + {4409,4409, 0, 0, 40000, 0, 0, 0 }, + {4409,4409, 73, 0, 40000, 0, 0, 0 }, + {4410,4410, 0, 0, 40000, 60, 0, 0 }, + {4411,4411, 0, 0, 40000, 60, 0, 0 }, + {4412,4412, 0, 0, 7326, 2486, 0, 0 }, + {4413,4413, 0, 0, 4886, 1586, 0, 0 }, + {4414,4414, 0, 0, 646, 20, 0, 0 }, + {4415,4415, 0, 0, 253, 20, 0, 0 }, + {4415,4415, 12, 0, 253, 20, 0, 0 }, + {4416,4416, 0, 0, 640, 100, 0, 0 }, + {4416,4416, 1, 0, 640, 106, 0, 0 }, + {4417,4417, 0, 0, 133, 106, 0, 0 }, + {4417,4417, 23, 0, 133, 106, 0, 0 }, + {4418,4418, 0, 0, 653, 100, 0, 0 }, + {4419,4419, 0, 0, 4166, 1546, 0, 0 }, + {4420,4420, 0, 0, 40000, 73, 0, 0 }, + {4421,4421, 0, 0, 40000, 60, 0, 0 }, + {4422,4422, 0, 0, 40000, 53, 0, 0 }, + {4423,4423, 0, 0, 40000, 0, 0, 0 }, + {4424,4424, 0, 0, 246, 20, 0, 0 }, + {4425,4425, 0, 2, 6, 0, 0, 0 }, + {4426,4426, 0, 0, 4946, 233, 0, 0 }, + {4427,4427, 0, 0, 4946, 233, 0, 0 }, + {4428,4428, 0, 0, 4953, 240, 0, 0 }, + {4429,4429, 0, 0, 4946, 233, 0, 0 }, + {4430,4430, 0, 0, 18233, 46, 0, 0 }, + {4431,4431, 0, 0, 2386, 26, 0, 0 }, + {4432,4432, 0, 0, 4640, 633, 0, 0 }, + {4433,4433, 0, 0, 18466, 100, 0, 0 }, + {4434,4434, 0, 0, 18440, 66, 0, -2 }, + {4435,4435, 0, 0, 18440, 6140, 0, -2 }, + {4436,4436, 0, 0, 1206, 433, 0, -2 }, + {4437,4437, 0, 0, 4626, 240, 0, 0 }, + {4438,4438, 0, 0, 726, 400, 0, 0 }, + {4439,4439, 0, 0, 5866, 73, 0, 0 }, + {4440,4440, 0, 0, 40000, 73, 0, 0 }, + {4441,4441, 0, 0, 40000, 73, 0, 0 }, + {4442,4442, 0, 0, 40000, 73, 0, 0 }, + {4443,4443, 0, 0, 40000, 73, 0, 0 }, + {4444,4444, 0, 0, 6500, 346, 0, 0 }, + {4445,4445, 0, 0, 6506, 346, 0, 0 }, + {4446,4446, 0, 0, 40000, 66, 0, -2 }, + {4447,4447, 0, 0, 40000, 66, 0, -2 }, + {4448,4448, 0, 0, 40000, 0, 0, 0 }, + {4449,4449, 0, 0, 40000, 46, 0, 0 }, + {4450,4450, 0, 0, 40000, 0, 0, 0 }, + {4450,4450, 0, 0, 40000, 0, 0, -2 }, + {4451,4451, 0, 0, 2386, 26, 0, 0 }, + {4452,4452, 0, 0, 40000, 73, 0, -2 }, + {4453,4453, 0, 0, 5866, 26, 0, -2 }, + {4454,4454, 0, 0, 40000, 133, 0, 0 }, + {4455,4455, 0, 0, 40000, 133, 0, 0 }, + {4456,4456, 0, 0, 40000, 126, 0, 0 }, + {4457,4457, 0, 0, 253, 20, 0, 0 }, + {4458,4458, 0, 0, 8866, 1366, 0, 0 }, + {4459,4459, 0, 0, 1040, 766, 0, 0 }, + {4460,4460, 0, 0, 40000, 146, 0, -2 }, + {4461,4461, 0, 0, 40000, 153, 0, -2 }, + {4462,4462, 0, 0, 40000, 466, 0, -2 }, + {4463,4463, 0, 0, 40000, 66, 0, 0 }, + {4464,4464, 0, 0, 2333, 566, 0, 0 }, + {4465,4465, 0, 0, 40000, 140, 0, -2 }, + {4466,4466, 0, 0, 40000, 100, 0, -2 }, + {4467,4467, 0, 0, 40000, 226, 0, -2 }, + {4468,4468, 0, 0, 40000, 0, 0, 0 }, {3712,3712, 0, 0, 40000, 226, 0, -2 }, - {4478,4478, 0, 0, 40000, 140, 0, -2 }, - {4479,4479, 0, 0, 40000, 66, 0, 0 }, - {4480,4480, 0, 0, 40000, 73, 0, 0 }, + {4469,4469, 0, 0, 40000, 140, 0, -2 }, + {4470,4470, 0, 0, 40000, 66, 0, 0 }, + {4471,4471, 0, 0, 40000, 73, 0, 0 }, + {4472,4472, 0, 0, 40000, 73, 0, 0 }, + {4473,4473, 0, 0, 40000, 86, 0, -2 }, + {4474,4474, 0, 0, 40000, 80, 0, 0 }, + {4475,4475, 0, 0, 40000, 73, 0, -2 }, + {4476,4476, 0, 0, 40000, 80, 0, -2 }, + {4477,4477, 0, 0, 40000, 73, 0, -2 }, + {4478,4478, 0, 0, 40000, 73, 0, 0 }, + {4479,4479, 0, 0, 40000, 73, 0, 0 }, + {4480,4480, 0, 0, 40000, 93, 0, 0 }, {4481,4481, 0, 0, 40000, 73, 0, 0 }, - {4482,4482, 0, 0, 40000, 86, 0, -2 }, - {4483,4483, 0, 0, 40000, 80, 0, 0 }, - {4484,4484, 0, 0, 40000, 73, 0, -2 }, - {4485,4485, 0, 0, 40000, 80, 0, -2 }, - {4486,4486, 0, 0, 40000, 73, 0, -2 }, - {4487,4487, 0, 0, 40000, 73, 0, 0 }, - {4488,4488, 0, 0, 40000, 73, 0, 0 }, - {4489,4489, 0, 0, 40000, 93, 0, 0 }, - {4490,4490, 0, 0, 40000, 73, 0, 0 }, - {4491,4491, 0, 0, 11946, 13, 0, 0 }, - {4492,4492, 0, 0, 40000, 73, 0, 0 }, - {4462,4462, 0, 0, 5866, 26, 0, 0 }, - {4493,4493, 0, 0, 40000, 820, 0, 0 }, - {4494,4494, 0, 0, 2153, 873, 0, 0 }, + {4482,4482, 0, 0, 11946, 13, 0, 0 }, + {4483,4483, 0, 0, 40000, 73, 0, 0 }, + {4453,4453, 0, 0, 5866, 26, 0, 0 }, + {4484,4484, 0, 0, 40000, 820, 0, 0 }, + {4485,4485, 0, 0, 2153, 873, 0, 0 }, {1221,1221, 0, 0, 40000, 293, 0, 0.171875 }, - {4495,4495, 0, 0, 1620, 120, 0, 0 }, - {4496,4496, 0, 0, 15120, 93, 0, 0 }, - {4497,4497, 0, 0, 14613, 93, 0, 0 }, - {4498,4498, 0, 0, 2346, 793, 0, 0 }, - {4499,4499, 0, 0, 40000, 2380, 0, 0 }, - {4500,4500, 0, 0, 40000, 1280, 0, 0 }, - {4501,4501, 0, 0, 40000, 1460, 0, 0 }, - {4502,4502, 0, 0, 40000, 2513, 0, 0 }, - {4503,4503, 0, 0, 14840, 1266, 0, 0 }, - {4504,4504, 0, 0, 4513, 640, 0, 0 }, - {4505,4505, 0, 0, 4680, 806, 0, 0 }, - {4506,4506, 0, 0, 40000, 100, 0, 0 }, - {4507,4507, 0, 0, 40000, 66, 0, 0 }, - {4508,4508, 0, 0, 2420, 413, 0, 0 }, - {4509,4509, 0, 0, 406, 73, 0, -2 }, - {4510,4510, 0, 0, 1166, 400, 0, 0 }, - {4511,4511, 0, 0, 1213, 106, 0, 0 }, - {4512,4512, 0, 0, 273, 60, 0, -2 }, - {4513,4513, 0, 0, 40000, 2380, 0, 0 }, - {4514,4514, 0, 0, 40000, 440, 0, 0 }, + {4486,4486, 0, 0, 1620, 120, 0, 0 }, + {4487,4487, 0, 0, 15120, 93, 0, 0 }, + {4488,4488, 0, 0, 14613, 93, 0, 0 }, + {4489,4489, 0, 0, 2346, 793, 0, 0 }, + {4490,4490, 0, 0, 40000, 2380, 0, 0 }, + {4491,4491, 0, 0, 40000, 1280, 0, 0 }, + {4492,4492, 0, 0, 40000, 1460, 0, 0 }, + {4493,4493, 0, 0, 40000, 2513, 0, 0 }, + {4494,4494, 0, 0, 14840, 1266, 0, 0 }, + {4495,4495, 0, 0, 4513, 640, 0, 0 }, + {4496,4496, 0, 0, 4680, 806, 0, 0 }, + {4497,4497, 0, 0, 40000, 100, 0, 0 }, + {4498,4498, 0, 0, 40000, 66, 0, 0 }, + {4499,4499, 0, 0, 2420, 413, 0, 0 }, + {4500,4500, 0, 0, 406, 73, 0, -2 }, + {4501,4501, 0, 0, 1166, 400, 0, 0 }, + {4502,4502, 0, 0, 1213, 106, 0, 0 }, + {4503,4503, 0, 0, 273, 60, 0, -2 }, + {4504,4504, 0, 0, 40000, 2380, 0, 0 }, + {4505,4505, 0, 0, 40000, 440, 0, 0 }, {1261,1261, 0, 0, 40000, 2960, 0, 0 }, - {4515,4515, 37, 0, 973, 73, 0, -2 }, - {4516,4516, 48, 0, 106, 0, 0, -2 }, - {4517,4517, 48, 0, 286, 133, 0, -2 }, - {4518,4518, 62, 0, 166, 60, 0, 0 }, - {4519,4519, 44, 0, 980, 360, 0, 0 }, - {4520,4520, 80, 0, 100, 0, 0, 0 }, - {4519,4519, 50, 0, 980, 346, 0, 0 }, - {4521,4521, 48, 0, 106, 0, 0, -2 }, - {4519,4519, 55, 0, 973, 360, 0, 0 }, - {4522,4522, 61, 0, 513, 20, 0, 0 }, - {4519,4519, 58, 0, 966, 353, 0, 0 }, - {4519,4519, 63, 0, 973, 353, 0, 0 }, - {4523,4523, 71, 0, 1366, 580, 0, 0 }, - {4519,4519, 72, 0, 820, 306, 0, 0 }, - {4524,4524, 70, 0, 1886, 666, 0, 0 }, - {4523,4523, 88, 0, 1353, 560, 0, 0 }, - {4525,4525, 76, 0, 1873, 653, 0, 0 }, - {4526,4526, 84, 0, 260, 113, 0, 0 }, - {4523,4523, 68, 0, 1366, 553, 0, 0 }, - {4527,4527, 72, 0, 153, 53, 0, 0 }, - {4528,4528, 28, 0, 1193, 413, 0, 0 }, - {4524,4524, 81, 0, 1353, 480, 0, 0 }, - {4529,4529, 58, 0, 246, 120, 0, -2 }, - {4529,4529, 55, 0, 246, 120, 0, -2 }, - {4529,4529, 44, 0, 246, 120, 0, -2 }, - {4529,4529, 49, 0, 246, 120, 0, -2 }, - {4529,4529, 40, 0, 286, 133, 0, -2 }, - {4530,4530, 55, 0, 740, 560, 0, -2 }, - {4530,4530, 48, 0, 893, 693, 0, -2 }, - {4531,4531, 52, 0, 513, 206, 0, 0 }, - {4531,4531, 45, 0, 513, 206, 0, 0 }, - {4532,4532, 48, 0, 173, 100, 0, -2 }, - {4533,4533, 48, 0, 120, 266, 0, -2 }, - {4534,4534, 48, 0, 253, 60, 0, -2 }, - {4509,4509, 73, 0, 160, 20, 0, -2 }, - {4509,4509, 68, 0, 160, 20, 0, -2 }, - {4509,4509, 63, 0, 193, 20, 0, -2 }, - {4535,4535,108, 0, 406, 26, 0, 0 }, - {4536,4536,108, 0, 740, 26, 0, 0 }, + {4506,4506, 37, 0, 973, 73, 0, -2 }, + {4507,4507, 48, 0, 106, 0, 0, -2 }, + {4508,4508, 48, 0, 286, 133, 0, -2 }, + {4509,4509, 62, 0, 166, 60, 0, 0 }, + {4510,4510, 44, 0, 980, 360, 0, 0 }, + {4511,4511, 80, 0, 100, 0, 0, 0 }, + {4510,4510, 50, 0, 980, 346, 0, 0 }, + {4512,4512, 48, 0, 106, 0, 0, -2 }, + {4510,4510, 55, 0, 973, 360, 0, 0 }, + {4513,4513, 61, 0, 513, 20, 0, 0 }, + {4510,4510, 58, 0, 966, 353, 0, 0 }, + {4510,4510, 63, 0, 973, 353, 0, 0 }, + {4514,4514, 71, 0, 1366, 580, 0, 0 }, + {4510,4510, 72, 0, 820, 306, 0, 0 }, + {4515,4515, 70, 0, 1886, 666, 0, 0 }, + {4514,4514, 88, 0, 1353, 560, 0, 0 }, + {4516,4516, 76, 0, 1873, 653, 0, 0 }, + {4517,4517, 84, 0, 260, 113, 0, 0 }, + {4514,4514, 68, 0, 1366, 553, 0, 0 }, + {4518,4518, 72, 0, 153, 53, 0, 0 }, + {4519,4519, 28, 0, 1193, 413, 0, 0 }, + {4515,4515, 81, 0, 1353, 480, 0, 0 }, + {4520,4520, 58, 0, 246, 120, 0, -2 }, + {4520,4520, 55, 0, 246, 120, 0, -2 }, + {4520,4520, 44, 0, 246, 120, 0, -2 }, + {4520,4520, 49, 0, 246, 120, 0, -2 }, + {4520,4520, 40, 0, 286, 133, 0, -2 }, + {4521,4521, 55, 0, 740, 560, 0, -2 }, + {4521,4521, 48, 0, 893, 693, 0, -2 }, + {4522,4522, 52, 0, 513, 206, 0, 0 }, + {4522,4522, 45, 0, 513, 206, 0, 0 }, + {4523,4523, 48, 0, 173, 100, 0, -2 }, + {4524,4524, 48, 0, 120, 266, 0, -2 }, + {4525,4525, 48, 0, 253, 60, 0, -2 }, + {4500,4500, 73, 0, 160, 20, 0, -2 }, + {4500,4500, 68, 0, 160, 20, 0, -2 }, + {4500,4500, 63, 0, 193, 20, 0, -2 }, + {4526,4526,108, 0, 406, 26, 0, 0 }, + {4527,4527,108, 0, 740, 26, 0, 0 }, }; @@ -9449,8 +9303,8 @@ const char* const banknames[76] = "TMB (Shadow Warrior)", "DMX (Raptor)", "OP3 (Modded GMOPL by Wohlstand)", - "SB (Jammey O'Connel's bank)", - "TMB (Default bank of Apgee Sound System)", + "SB (Jamie O'Connell's bank)", + "TMB (Default bank of Apogee Sound System)", "WOPL (4op bank by James Alan Nguyen and Wohlstand)", "TMB (Blood)", "TMB (Lee)", @@ -10417,68 +10271,68 @@ const unsigned short banks[75][256] = 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, }, { -3098,3205,3101,3129,3130,3131,3108,3132,3209,3210,3120,3133,3124,3134,3103,3135, -3136,3137,3113,3138,3139,3140,3141,3142,3143,3144,3145,3206,3121,3207,3208,3146, -3127,3147,3148,3211,3212,3149,3150,3151,3116,3106,3152,3110,3111,3213,3104,3126, -3105,3117,3153,3154,3102,3214,3155,3119,3215,3216,3115,3109,3217,3114,3112,3218, -3156,3219,3157,3158,3159,3107,3122,3128,3160,3222,3161,3162,3163,3164,3165,3166, -3167,3168,3169,3170,3171,3172,3173,3174,3223,3175,3176,3177,3118,3221,3220,3178, -3226,3241,3179,3180,3242,3181,3182,3183,3184,3185,3186,3187,3125,3188,3189,3190, -3191,3192,3193,3194,3123,3195,3196,3197,3198,3224,3199,3200,3201,3202,3203,3204, +1551,1552,1553,3101, 181, 182, 183,3102, 185,1556,1557,3103,1559, 188, 189,1560, +1561,1562, 193,1564,1565, 195, 196, 197, 198, 199, 200, 201, 202,1566,1567, 205, + 206, 207, 208,1568,1569,1570,1571, 211,1572,1573, 214, 215, 216, 217, 218, 219, + 220, 221,1574,1575,1576,1577,1578, 225,1579,1580,3100,1581,1582, 229, 230, 231, + 232, 233, 234, 235,1583, 237, 238, 239,1584,1585, 240,1586, 242, 243, 244,1587, + 246, 247,1588,1589, 249, 250, 251,1590, 252, 253, 254, 255,1591,1592,1593,1594, +1595, 259,1596,1597,1598,1599,1600,1601, 264, 265, 266, 267, 268, 269, 270, 271, +1602, 272, 273,1603,1604,1605, 276,1606,1607, 295, 295,1610,3104,3105, 295, 284, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, - 295, 295, 295, 127,3227,3244,3248,3268,3245,3243,3246,3227,3247,3227,3249,3227, -3227,3269,3227,3228,3270,3229,3250,3251,3100,3271,3258,3230,3252,3253,3237,3239, -3259,3254,3255,3256,3260,3235,3261,3257,3099,3265,3266,3232,3233,3233,3267,3262, -3263,3264,3236,3225,3231,3234,3238,3240, 295, 295, 295, 295, 295, 295, 295, 295, + 295, 295, 295, 127,3107,3122,3126, 316,3123,3121,3124,3107,3125,3107,3127,3107, +3107, 329,3107,3108,3143,3109,3128,3129,3099,3144,1634,3110,3130,3131,3117,3119, +3136,3132,3133,3134,3137,3115,3138,3135,3098, 343, 344,3112,3113,3113,3142,3139, +3140,3141,3116,3106,3111,3114,3118,3120, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, }, { -3098,3205,3101,3129,3130,3131,3108,3132,3209,3210,3120,3133,3124,3134,3103,3135, -3136,3137,3113,3138,3139,3140,3141,3142,3143,3144,3145,3206,3121,3207,3208,3146, -3127,3147,3148,3211,3212,3149,3150,3151,3116,3106,3152,3110,3111,3213,3104,3126, -3105,3117,3153,3154,3102,3214,3155,3119,3215,3216,3115,3109,3217,3114,3112,3218, -3156,3219,3157,3158,3159,3107,3122,3128,3160,3222,3161,3162,3163,3164,3165,3166, -3167,3168,3169,3170,3171,3172,3173,3174,3223,3175,3176,3177,3118,3221,3220,3178, -3226,3241,3179,3180,3242,3181,3182,3183,3184,3185,3186,3187,3125,3188,3189,3190, -3191,3192,3193,3194,3123,3195,3196,3197,3198,3224,3199,3200,3201,3202,3203,3204, +1551,1552,1553,3101, 181, 182, 183,3102, 185,1556,1557,3103,1559, 188, 189,1560, +1561,1562, 193,1564,1565, 195, 196, 197, 198, 199, 200, 201, 202,1566,1567, 205, + 206, 207, 208,1568,1569,1570,1571, 211,1572,1573, 214, 215, 216, 217, 218, 219, + 220, 221,1574,1575,1576,1577,1578, 225,1579,1580,3100,1581,1582, 229, 230, 231, + 232, 233, 234, 235,1583, 237, 238, 239,1584,1585, 240,1586, 242, 243, 244,1587, + 246, 247,1588,1589, 249, 250, 251,1590, 252, 253, 254, 255,1591,1592,1593,1594, +1595, 259,1596,1597,1598,1599,1600,1601, 264, 265, 266, 267, 268, 269, 270, 271, +1602, 272, 273,1603,1604,1605, 276,1606,1607, 295, 295,1610,3104,3105, 295, 284, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, - 295, 295, 295,3274,3274,3277,3275,3276,3275,3272,3272,3272,3272,3272,3272,3272, -3272,3272,3272,3272,3272,3272,3278,3279,3301,3269,3280,3269,3281,3282,3283,3284, -3285,3286,3287,3288,3289, 349,3290,3291,3292,3293,3294,3276,3276,3276,3295,3296, -3297,3298, 349,3299,3300,3276,3283,3284,3273, 295, 295, 295, 295, 295, 295, 295, + 295, 295, 295,2430,2430,3149,3147,3148,3147,3145,3145,3145,3145,3145,3145,3145, +3145,3145,3145,3145,3145,3145,3150,3151,3173, 329,3152, 329,3153,3154,3155,3156, +3157,3158,3159,3160,3161, 349,3162,3163,3164,3165,3166,3148,3148,3148,3167,3168, +3169,3170, 349,3171,3172,3148,3155,3156, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, }, { -3302,3303,3304,3305,3306,3307,3308,3309,3310,3311,3312,3313,3314,3315,3316,3317, -3318,3319,3320,3321,3322,3323,3324,3324,3325,3326,3327,3328,3329,3330,3331,3332, -3333,3334,3335,3336,3337,3338,3339,3340,3341,3342,3343,3344,3345,3346,3347,3348, -3349,3350,3351,3352,3353,3354,3355,3356,3357,3358,3359,3324,3360,3361,3362,3363, -3324,3364,3365,3366,3324,3367,3324,3368,3324,3369,3324,3370,3324,3371,3372,3373, -3374,3375,3376,3324,3377,3378,3324,3379,3380,3381,3382,3383,3324,3324,3384,3324, -3385,3324,3386,3324,3387,3388,3324,3389,3324,3324,3390,3324,3324,3324,3324,3324, -3324,3324,3324,3391,3324,3324,3324,3324,3324,3324,3392,3393,3324,3324,3324,3324, -3394,3395, 285,3396,3397, 287, 288,3398,3399,3399,3399,3399,3399,3399,3399,3399, -3399,3399,3399,3399,3399,3399,3399,3399,3399,3399,3399,3399,3399,3399,3399,3399, -3399,3399,3399,3400,3401,3399,3402,3399,3403,3404,3405,3406,3407,3408,3409,3410, -3410,3411,3408,3412,3399,3399,3413,3414,3399,3399,3399,3399,3399,3399,3399,3399, -3399,3399,3399,3399,3399,3399,3399,3399,3399,3399,3399,3399,3399,3399,3399,3399, -3399,3399,3399,3399,3399,3399,3399,3399,3399,3399,3399,3399,3399,3399,3399,3399, -3399,3399,3399,3399,3399,3399,3399,3399,3399,3399,3399,3399,3399,3399,3399,3399, -3399,3399,3399,3399,3399,3399,3399,3399,3399,3399,3399,3399,3399,3399,3399,3399, +3174,3175,3176,3177,3178,3179,3180,3181,3182,3183,3184,3185,3186,3187,3188,3189, +3190,3191,3192,3193,3194,3195,3196,3196,3197,3198,3199,3200,3201,3202,3203,3204, +3205,3206,3207,3208,3209,3210,3211,3212,3213,3214,3215,3216,3217,3218,3219,3220, +3221,3222,3223,3224,3225,3226,3227,3228,3229,3230,3231,3196,3232,3233,3234,3235, +3196,3236,3237,3238,3196,3239,3196,3240,3196,3241,3196,3242,3196,3243,3244,3245, +3246,3247,3248,3196,3249,3250,3196,3251,3252,3253,3254,3255,3196,3196,3256,3196, +3257,3196,3258,3196,3259,3260,3196,3261,3196,3196,3262,3196,3196,3196,3196,3196, +3196,3196,3196,3263,3196,3196,3196,3196,3196,3196,3264,3265,3196,3196,3196,3196, +3266,3267, 285,3268,3269, 287, 288,3270,3271,3271,3271,3271,3271,3271,3271,3271, +3271,3271,3271,3271,3271,3271,3271,3271,3271,3271,3271,3271,3271,3271,3271,3271, +3271,3271,3271,3272,3273,3271,3274,3271,3275,3276,3277,3278,3279,3280,3281,3282, +3282,3283,3280,3284,3271,3271,3285,3286,3271,3271,3271,3271,3271,3271,3271,3271, +3271,3271,3271,3271,3271,3271,3271,3271,3271,3271,3271,3271,3271,3271,3271,3271, +3271,3271,3271,3271,3271,3271,3271,3271,3271,3271,3271,3271,3271,3271,3271,3271, +3271,3271,3271,3271,3271,3271,3271,3271,3271,3271,3271,3271,3271,3271,3271,3271, +3271,3271,3271,3271,3271,3271,3271,3271,3271,3271,3271,3271,3271,3271,3271,3271, }, { -3415,3416, 466,3417, 713,3324,3418, 467,3419, 632,3420,3421,3422,3423,3424,3425, -3426, 598,3427,3428,3429,3430,3431,3432,1512,3433,3422,3434, 759, 437, 437,3435, -3436,3437, 439,3438, 440,3439, 442, 441,3440,3441,3442,3443,2306,3444,3445, 582, -3446,3447, 452,3448,3449,3418,3450,3451,3452, 778,3453,2312, 779,3454,3455,3456, -3457, 769,3458,3459,3460,3461, 663, 664,3462,2316,3463,3464,3465,1299,3466,3467, -3468,3469,3470,3471,3472,3473,3474, 442,3475,3476,3477,3432,3478,1669,3479,3480, -3481,3482,3483,3484,3481, 261,3485,3486,1919,2420,3487,3488, 676,3489,3490,3491, -3492,3493,3494,3495, 677,3496, 677,3497,3498, 677,3499, 455,3500,2421,3501, 465, +3287,3288, 466,3289, 713,3196,3290, 467,3291, 632,3292,3293,3294,3295,3296,3297, +3298, 598,3299,3300,3301,3302,3303,3304,1512,3305,3294,3306, 759, 437, 437,3307, +3308,3309, 439,3310, 440,3311, 442, 441,3312,3313,3314,3315,2306,3316,3317, 582, +3318,3319, 452,3320,3321,3290,3322,3323,3324, 778,3325,2312, 779,3326,3327,3328, +3329, 769,3330,3331,3332,3333, 663, 664,3334,2316,3335,3336,3337,1299,3338,3339, +3340,3341,3342,3343,3344,3345,3346, 442,3347,3348,3349,3304,3350,1669,3351,3352, +3353,3354,3355,3356,3353, 261,3357,3358,1919,2420,3359,3360, 676,3361,3362,3363, +3364,3365,3366,3367, 677,3368, 677,3369,3370, 677,3371, 455,3372,2421,3373, 465, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, @@ -10489,14 +10343,14 @@ const unsigned short banks[75][256] = 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, }, { -3502,3502,3503,3504,3505,3506,3506,3507,3508,3509,3510,3511,3512,3513,3514,3515, -3516,3517,3518,3519,3520,3521,3522,3523,3524,3525,3526,3527,3528,3529,3530,3531, -3532,3533,3534,3535,3536,3537,3538,3539,3540,3541,3542,3543,3544,3545,3546,3547, -3548,3549,3550,3551,3552,3553,3554,3555,3553,3556,3557,3558,3559,3560,3561,3562, -3563,3564,3565,3566,3567,3568,3569,3570,3571,3572,3573,3574,3463,3575,3576,3577, -3578,3579,3580,3581,3582,3583,3584,3585,3586,3587,3588,3589,3590,3590,3591,3592, -3593,3594,3595,3596,3597,3598,3599,3600,3601,3602,3603,3604,3605,3606,3607,3608, -3609,3610,3609,3611,3612,3613,3614,3615,3616,3617,3618,3619,3620,3621,3622,3623, +3374,3374,3375,3376,3377,3378,3378,3379,3380,3381,3382,3383,3384,3385,3386,3387, +3388,3389,3390,3391,3392,3393,3394,3395,3396,3397,3398,3399,3400,3401,3402,3403, +3404,3405,3406,3407,3408,3409,3410,3411,3412,3413,3414,3415,3416,3417,3418,3419, +3420,3421,3422,3423,3424,3425,3426,3427,3425,3428,3429,3430,3431,3432,3433,3434, +3435,3436,3437,3438,3439,3440,3441,3442,3443,3444,3445,3446,3335,3447,3448,3449, +3450,3451,3452,3453,3454,3455,3456,3457,3458,3459,3460,3461,3462,3462,3463,3464, +3465,3466,3467,3468,3469,3470,3471,3472,3473,3474,3475,3476,3477,3478,3479,3480, +3481,3482,3481,3483,3484,3485,3486,3487,3488,3489,3490,3491,3492,3493,3494,3495, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, @@ -10518,114 +10372,114 @@ const unsigned short banks[75][256] = 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 127, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, - 139, 140, 141, 142, 143, 144, 145, 146, 147, 148,3624, 150, 151, 152, 153, 154, + 139, 140, 141, 142, 143, 144, 145, 146, 147, 148,3496, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, }, { -1551,1552,1553,1554, 181, 182, 183,1555, 185,1556,3625,3626,3627, 188, 189,1560, -1561,1562,1563,3628,1565, 195, 196, 197, 198, 199, 200, 201, 202,1566,1567, 205, - 206, 207, 208,1568,1569,1570,1571,3629,1572,1573, 214, 215, 216, 217, 218, 219, +1551,1552,1553,1554, 181, 182, 183,1555, 185,1556,3497,3498,3499, 188, 189,1560, +1561,1562,1563,3500,1565, 195, 196, 197, 198, 199, 200, 201, 202,1566,1567, 205, + 206, 207, 208,1568,1569,1570,1571,3501,1572,1573, 214, 215, 216, 217, 218, 219, 220, 221,1574,1575,1576,1577,1578, 225,1579,1580, 226,1581,1582, 229, 230, 231, 232, 233, 234, 235,1583, 237, 238, 239,1584,1585, 240,1586, 242, 243, 244,1587, 246, 247,1588,1589, 249, 250, 251,1590, 252, 253, 254, 255,1591,1592,1593,1594, 1595, 259,1596,1597,1598,1599,1600,1601, 264, 265, 266, 267, 268, 269, 270, 271, -1602, 272, 273,1603,1604,1605, 276,1606,1607, 295, 295,1610,3630,3631, 295, 284, +1602, 272, 273,1603,1604,1605, 276,1606,1607, 295, 295,1610,3502,3503, 295, 284, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, - 295, 295, 295, 127,3632,1613,1614,3633,1616,3634,1618,3635,1620,3636,1622,3637, -3638,1625,3639,3640,1628,1629,1630,1631,3641,1633,1634,3642,1636,1637,1638,1639, + 295, 295, 295, 127,3504,1613,1614,3505,1616,3506,1618,3507,1620,3508,1622,3509, +3510,1625,3511,3512,1628,1629,1630,1631,3513,1633,1634,3514,1636,1637,1638,1639, 1640,1641,1642,1643,1644,1645,1646,1647,1648,1649,1650,1651,1652,1653,1654,1655, 1656,1657,1658,1659,1660,1661,1662,1663, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, }, { -3643,3644,3645,3646,3647,3648,3649,3650,3651,3652,3653,3654,3655,3656,3657,3658, -3659,3660,3661,3662,3663,3664,3665,3666,3667,3668,3669,3670,3671,3672,3673,3674, -3675,3676,3677,3678,3679,3680,3681,3682,3683,3684,3685,3686,3687,3688,3689,3690, -3691,3692,3693,3694,3695,3696,3697,3698,3699,3700,3701,3702,3703,3704,3705,3706, -3707,3708,3709,3710,3711,3712,3713,3714,3715,3716,3717,3718,3719,3720,3721,3722, -3723,3724,3725,3726,3727,3728,3729,3730,3731,3732,3733,3734,3735,3736,3737,3738, -3739,3740,3741,3742,3743,3744,3745,3746,3747,3748,3749,3750,3751,3752,3753,3754, -3755,3756,3757,3758,3759,3760,3761,3762,3763,3764,3765,3766,3767,3768,3769,3770, +3515,3516,3517,3518,3519,3520,3521,3522,3523,3524,3525,3526,3527,3528,3529,3530, +3531,3532,3533,3534,3535,3536,3537,3538,3539,3540,3541,3542,3543,3544,3545,3546, +3547,3548,3549,3550,3551,3552,3553,3554,3555,3556,3557,3558,3559,3560,3561,3562, +3563,3564,3565,3566,3567,3568,3569,3570,3571,3572,3573,3574,3575,3576,3577,3578, +3579,3580,3581,3582,3583,3584,3585,3586,3587,3588,3589,3590,3591,3592,3593,3594, +3595,3596,3597,3598,3599,3600,3601,3602,3603,3604,3605,3606,3607,3608,3609,3610, +3611,3612,3613,3614,3615,3616,3617,3618,3619,3620,3621,3622,3623,3624,3625,3626, +3627,3628,3629,3630,3631,3632,3633,3634,3635,3636,3637,3638,3639,3640,3641,3642, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, - 295, 295, 295,3772,3773,3774,3775,3776,3777,3778,3779,3780,3781,3782,3783,3784, -3785,3786,3787,3788,3786,3789,3790,3786,3791,3786,3792,3793,3794,3795,3796,3797, -3798,3799,3800,3801,3802,3803,3804,3805,3806,3807,3808,3809,3810,3811,3812,3813, -3814,3815, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, + 295, 295, 295,3644,3645,3646,3647,3648,3649,3650,3651,3652,3653,3654,3655,3656, +3657,3658,3659,3660,3658,3661,3662,3658,3663,3658,3664,3665,3666,3667,3668,3669, +3670,3671,3672,3673,3674,3675,3676,3677,3678,3679,3680,3681,3682,3683,3684,3685, +3686,3687, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, }, { -3415,1492,3816,3417, 713,3817,3818, 730,1914,3819,1533,3421,3820,3821,3822,3823, -3426,3824,3825,3826,3827,3828,3829,3830,3831,3832,3833,3834, 759, 437,3835,3836, -3436,3837,3838,3839,3840,3841, 442,3842,3843,3844,3845,3846,3847,3848,3849,3850, -3851,2306,3852,3853,3854,3855,3856,3857,3858,3859,3860,3861,3862,3863,3864,3865, -3866,3867,3868,3869,3870,3871,3872,3873,3874,3875,3876,3877,3878,3879,3880,3881, -3882,3883,3884,3885,3886,3887,3888,3889,3890,3891,3892,3893,3894,3895,3896,3897, -3898,3899,3900,3901,3902,3903,3904,3905,3906,3907,3908,3909,3910,3911,3912,3913, -3914,3915,3916,3917,3918,3919,3920,3921,3922,3923,3499,3924,3925,2421,3926,3927, +3287,1492,3688,3289, 713,3689,3690, 730,1914,3691,1533,3293,3692,3693,3694,3695, +3298,3696,3697,3698,3699,3700,3701,3702,3703,3704,3705,3706, 759, 437,3707,3708, +3308,3709,3710,3711,3712,3713, 442,3714,3715,3716,3717,3718,3719,3720,3721,3722, +3723,2306,3724,3725,3726,3727,3728,3729,3730,3731,3732,3733,3734,3735,3736,3737, +3738,3739,3740,3741,3742,3743,3744,3745,3746,3747,3748,3749,3750,3751,3752,3753, +3754,3755,3756,3757,3758,3759,3760,3761,3762,3763,3764,3765,3766,3767,3768,3769, +3770,3771,3772,3773,3774,3775,3776,3777,3778,3779,3780,3781,3782,3783,3784,3785, +3786,3787,3788,3789,3790,3791,3792,3793,3794,3795,3371,3796,3797,2421,3798,3799, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, - 295, 295, 295,3772,3773,3774,3775,3776,3777,3778,3779,3780,3781,3782,3783,3784, -3785,3786,3787,3788,3786,3789,3790,3786,3791,3786,3792,3793,3794,3795,3796,3797, -3798,3799,3800,3801,3802,3803,3804,3805,3806,3807,3808,3809,3810,3811,3812,3813, -3814,3815, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, + 295, 295, 295,3644,3645,3646,3647,3648,3649,3650,3651,3652,3653,3654,3655,3656, +3657,3658,3659,3660,3658,3661,3662,3658,3663,3658,3664,3665,3666,3667,3668,3669, +3670,3671,3672,3673,3674,3675,3676,3677,3678,3679,3680,3681,3682,3683,3684,3685, +3686,3687, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, }, { -3928,3929,3930,3931,3932,3933,3934,3935,3936,3937,3938,3939,3940,3941,3942,3943, -3944,3945,3946,3947,3948,3949,3950,3951,3952,3953,3954,3955,3956,3957,3958,3959, -3960,3961,3962,3963,3964,3965,3966,3967,3968,3969,3970,3971,3972,3973,3974,3975, -3968,3976,3977,3978,3979,3980,3981,3982,3983,3984,3985,3986,3987,3988,3989,3990, -3991,3992,3992,3993,3994,3995,3996,3997,3998,3999,4000,4001,4002,4003,4004,4005, -4006,4007,4008,4009,4010,4011,4012,4013,4014,4015,4016,4017,4018,4019,4020,4021, -4022,4023,4024,4025,4026,4027,4028,4029,4030,4031,4032,4033,4034,4035,4036,4037, -4038,4039,4040,4041,4042,4043,4044,4045,4046,4047,4048,4049,4050,4051,4052,4053, +3800,3801,3802,3803,3804,3805,3806,3807,3808,3809,3810,3811,3812,3813,3814,3815, +3816,3817,3818,3819,3820,3821,3822,3823,3824,3825,3826,3827,3828,3829,3830,3831, +3832,3833,3834,3835,3836,3837,3838,3839,3840,3841,3842,3843,3844,3845,3846,3847, +3840,3848,3849,3850,3851,3852,3853,3854,3855,3856,3857,3858,3859,3860,3861,3862, +3863,3864,3864,3865,3866,3867,3868,3869,3870,3871,3872,3873,3874,3875,3876,3877, +3878,3879,3880,3881,3882,3883,3884,3885,3886,3887,3888,3889,3890,3891,3892,3893, +3894,3895,3896,3897,3898,3899,3900,3901,3902,3903,3904,3905,3906,3907,3908,3909, +3910,3911,3912,3913,3914,3915,3916,3917,3918,3919,3920,3921,3922,3923,3924,3925, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, - 295, 295, 295,4055,4056,4057,4058,4059,4060,4061,4062,4063,4064,4065,4066,4067, -4068,4069,4070,4071,4072,4073,4074,4075,4076,4077,4078,4079,4080,4081,4082,4083, -4084,4085,4086,4087,4088,4064,4089,4090,4091,4092,4093,4094,4095,4096,4097,4098, -4099,4100,4101, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, + 295, 295, 295,3927,3928,3929,3930,3931,3932,3933,3934,3935,3936,3937,3938,3939, +3940,3941,3942,3943,3944,3945,3946,3947,3948,3949,3950,3951,3952,3953,3954,3955, +3956,3957,3958,3959,3960,3936,3961,3962,3963,3964,3965,3966,3967,3968,3969,3970, +3971,3972,3973, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, }, { -3928,3929,3930,3931,3932,3933,3934,3935,3936,3937,3938,3939,3940,3941,3942,3943, -3944,3945,3946,3947,3948,3949,3950,3951,3952,3953,3954,3955,3956,4102,4103,3959, -3960,3961,3962,3963,3964,3965,3966,3967,3968,3969,3970,3971,4104,3973,3974,3975, -3968,3976,3977,3978,3979,3980,3981,3982,3983,3984,3985,3986,4105,3988,4106,3990, -3991,3992,3992,3993,3994,3995,3996,3997,3998,3999,4000,4001,4002,4003,4004,4005, -4107,4007,4108,4009,4010,4011,4012,4013,4014,4015,4016,4017,4018,4019,4020,4021, -4022,4023,4024,4025,4026,4027,4028,4029,4030,4031,4109,4110,4111,4035,4036,4037, -4038,4039,4040,4041,4112,4043,4044,4113,4046,4047,4048,4049,4050,4051,4052,4053, -4114,4114,4114,4114,4114,4114,4114,4114,4114,4114,4114,4114,4114,4114,4114,4114, -4114,4114,4114,4114,4114,4114,4114,4114,4114,4114,4114,4115,4115,4115,4115,4116, -4115,4115,4115,4055,4056,4117,4058,4059,4060,4118,4062,4063,4064,4065,4066,4067, -4068,4069,4070,4071,4072,4073,4074,4075,4076,4077,4078,4079,4080,4081,4082,4083, -4084,4085,4086,4087,4088,4064,4089,4090,4091,4119,4120,4094,4121,4122,4097,4098, -4099,4100,4101,4115,4115,4115,4115,4115,4123,4114,4124,4124,4124,4124,4124,4124, -4124,4124,4124,4124,4124,4124,4124,4124,4124,4124,4124,4124,4124,4124,4124,4124, -4124,4124,4124,4124,4124,4124,4124,4124,4124,4124,4124,4124,4124,4124,4124,4124, +3800,3801,3802,3803,3804,3805,3806,3807,3808,3809,3810,3811,3812,3813,3814,3815, +3816,3817,3818,3819,3820,3821,3822,3823,3824,3825,3826,3827,3828,3974,3975,3831, +3832,3833,3834,3835,3836,3837,3838,3839,3840,3841,3842,3843,3976,3845,3846,3847, +3840,3848,3849,3850,3851,3852,3853,3854,3855,3856,3857,3858,3977,3860,3978,3862, +3863,3864,3864,3865,3866,3867,3868,3869,3870,3871,3872,3873,3874,3875,3876,3877, +3979,3879,3980,3881,3882,3883,3884,3885,3886,3887,3888,3889,3890,3891,3892,3893, +3894,3895,3896,3897,3898,3899,3900,3901,3902,3903,3981,3982,3983,3907,3908,3909, +3910,3911,3912,3913,3984,3915,3916,3985,3918,3919,3920,3921,3922,3923,3924,3925, +3986,3986,3986,3986,3986,3986,3986,3986,3986,3986,3986,3986,3986,3986,3986,3986, +3986,3986,3986,3986,3986,3986,3986,3986,3986,3986,3986,3987,3987,3987,3987,3988, +3987,3987,3987,3927,3928,3989,3930,3931,3932,3990,3934,3935,3936,3937,3938,3939, +3940,3941,3942,3943,3944,3945,3946,3947,3948,3949,3950,3951,3952,3953,3954,3955, +3956,3957,3958,3959,3960,3936,3961,3962,3963,3991,3992,3966,3993,3994,3969,3970, +3971,3972,3973,3987,3987,3987,3987,3987,3995,3986,3996,3996,3996,3996,3996,3996, +3996,3996,3996,3996,3996,3996,3996,3996,3996,3996,3996,3996,3996,3996,3996,3996, +3996,3996,3996,3996,3996,3996,3996,3996,3996,3996,3996,3996,3996,3996,3996,3996, }, { 1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237, -1238,1239,1240,1241,1242,1243,1244,1245,4125,4126,4127,1249,1250,1376,1377,1253, -1378,1255,1256,4128,1380,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,4129, -1270,4130,4131,4132,4133,1275,1276,1277,1278,1279,1381,1281,1282,1283,1284,1285, +1238,1239,1240,1241,1242,1243,1244,1245,3997,3998,3999,1249,1250,1376,1377,1253, +1378,1255,1256,4000,1380,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,4001, +1270,4002,4003,4004,4005,1275,1276,1277,1278,1279,1381,1281,1282,1283,1284,1285, 1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301, -1302,1303,1304,1305,4134,1307,1308,1309,1309,1310,1311,1312,1313,1314,1315,1316, +1302,1303,1304,1305,4006,1307,1308,1309,1309,1310,1311,1312,1313,1314,1315,1316, 1317,1318,1319,1320,1321,1322,1323,1324,1325,1326,1327,1328,1329,1330,1331,1332, -1333,1334,1335,1336,1337,4135,1339,1340,1341,1342,1343,1344,1345,1346,1347,1348, +1333,1334,1335,1336,1337,4007,1339,1340,1341,1342,1343,1344,1345,1346,1347,1348, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, - 295, 295, 295, 312,1349,1350,4136,1352,4137,1354,4138,1355, 320,1356, 321,1357, + 295, 295, 295, 312,1349,1350,4008,1352,4009,1354,4010,1355, 320,1356, 321,1357, 1358,1359,1360,1361,1362,1363,1364,1383,1366,1359,1384,1361, 332, 333, 334, 335, 336,1368,1369, 338, 339, 320,1370, 295, 295, 295, 295,1372,1373,1374,1375, 295, 347, 348, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, @@ -10633,38 +10487,38 @@ const unsigned short banks[75][256] = 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, }, { -4139,4140,4141,4142,4143,4144, 6, 7,4145, 9, 10,4146, 12, 13, 14, 15, -4147,4148,4149,4150, 20,4151,4152,4153,4154,4155,4156,4157,4158,4159,4160,4161, - 32,4162,4163,4164,4165,4166,4167,4168,4169,4170,4171,4172,4173,4174,4175, 46, -4176,4177,4178,4179,4180,4181,4182, 54,4183,4184,4185,4186,4187,4188,4189,4190, -4191,4192,4193, 66,4194,4195, 69,4196,4197,4198,4199, 74, 75, 76, 77, 78, -4200,4201,4202, 82,4203,4204, 85,4205,4206, 88,4207,4208,4209,4210,4211,4212, - 95, 96, 97,4213,4214,4215,4216, 102, 103,4217, 105, 106, 107,4218,4219,4220, -4221, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121,4222,4223,4224, 125,4225, +4011,4012,4013,4014,4015,4016, 6, 7,4017, 9, 10,4018, 12, 13, 14, 15, +4019,4020,4021,4022, 20,4023,4024,4025,4026,4027,4028,4029,4030,4031,4032,4033, + 32,4034,4035,4036,4037,4038,4039,4040,4041,4042,4043,4044,4045,4046,4047, 46, +4048,4049,4050,4051,4052,4053,4054, 54,4055,4056,4057,4058,4059,4060,4061,4062, +4063,4064,4065, 66,4066,4067, 69,4068,4069,4070,4071, 74, 75, 76, 77, 78, +4072,4073,4074, 82,4075,4076, 85,4077,4078, 88,4079,4080,4081,4082,4083,4084, + 95, 96, 97,4085,4086,4087,4088, 102, 103,4089, 105, 106, 107,4090,4091,4092, +4093, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121,4094,4095,4096, 125,4097, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, - 295, 295, 295,3772,3773,3774,3775,3776,3777,3778,3779,3780,3781,3782,3783,3784, -3785,3786,3787,3788,3786,3789,3790,3786,3791,3786,3792,3793,3794,3795,3796,3797, -3798,3799,3800,3801,3802,3803,3804,3805,3806,3807,3808,3809,3810,3811,3812,3813, -3814,3815, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, + 295, 295, 295,3644,3645,3646,3647,3648,3649,3650,3651,3652,3653,3654,3655,3656, +3657,3658,3659,3660,3658,3661,3662,3658,3663,3658,3664,3665,3666,3667,3668,3669, +3670,3671,3672,3673,3674,3675,3676,3677,3678,3679,3680,3681,3682,3683,3684,3685, +3686,3687, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, }, { -3415,3416, 466,3417, 713,3324,3418, 467,3419, 632,3420,3421,3422,3423,4226,3425, -3426, 598,4227,3428,3429,3430,3431,3432,4228,4229,4230,4231, 759, 437, 438,3435, -3436,3437, 439,3438, 440,4232, 442,4233,3440,3441,3442,3443,2306,4234,3445, 582, -3446,3447, 452,3448,3449,4235,3450,3451,3452, 778,3453,2312, 779,3454,3455,3456, -3457, 769,3458,3459,3460,3461, 663, 664,3462,2316,3463,3464,3465,1299,3466,3467, -3468,3469,4236,3471,3472,3473,4237, 442,3475,3476,3477,3432,3478,1669,3479,3480, -3481,3482,3483,3484,4238, 261,3485,3486,1919,2420,3487,3488, 676,3489,3490,3491, -3492,4239,3494,3495,4240,4241, 680,3497,3498, 462,3499, 455,3500,2421,3501, 465, +3287,3288, 466,3289, 713,3196,3290, 467,3291, 632,3292,3293,3294,3295,4098,3297, +3298, 598,4099,3300,3301,3302,3303,3304,4100,4101,4102,4103, 759, 437, 438,3307, +3308,3309, 439,3310, 440,4104, 442,4105,3312,3313,3314,3315,2306,4106,3317, 582, +3318,3319, 452,3320,3321,4107,3322,3323,3324, 778,3325,2312, 779,3326,3327,3328, +3329, 769,3330,3331,3332,3333, 663, 664,3334,2316,3335,3336,3337,1299,3338,3339, +3340,3341,4108,3343,3344,3345,4109, 442,3347,3348,3349,3304,3350,1669,3351,3352, +3353,3354,3355,3356,4110, 261,3357,3358,1919,2420,3359,3360, 676,3361,3362,3363, +3364,4111,3366,3367,4112,4113, 680,3369,3370, 462,3371, 455,3372,2421,3373, 465, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, - 295, 295, 295,3772,3773,4242,3777,3776,4243,4244,4245,4246,4247,4248,4249,4250, -4251,3786,4252,3788,3786,3789,3790,3786,3791,3786,3792,2617,3794,3795,3796,3797, -3798,3799,3800,3801,3802, 160,3804,3805,3806,3807,3808,3809,3810,3811,3812,3813, -3814,3815, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, + 295, 295, 295,3644,3645,4114,3649,3648,4115,4116,4117,4118,4119,4120,4121,4122, +4123,3658,4124,3660,3658,3661,3662,3658,3663,3658,3664,2617,3666,3667,3668,3669, +3670,3671,3672,3673,3674, 160,3676,3677,3678,3679,3680,3681,3682,3683,3684,3685, +3686,3687, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, }, @@ -10679,28 +10533,28 @@ const unsigned short banks[75][256] = 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127,4253,4254,4255, 141,4256,4257,4258,4257,4259,4257,4260,4261, -4262,1954,4263,4264,4265,4266,4267,4268,4269,4270,4271,4272,4273,4274,4275,4276, -4277,4278,4279,4280,4281,4282, 163,4283, 625,4284,4285,4286,4287,4288,4289,4290, -4291,4292,4293,4294,4295,4296,4297, 127, 127, 127, 127, 127, 127, 127, 127, 127, + 127, 127, 127, 127,4125,4126,4127, 141,4128,4129,4130,4129,4131,4129,4132,4133, +4134,1954,4135,4136,4137,4138,4139,4140,4141,4142,4143,4144,4145,4146,4147,4148, +4149,4150,4151,4152,4153,4154, 163,4155, 625,4156,4157,4158,4159,4160,4161,4162, +4163,4164,4165,4166,4167,4168,4169, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, }, { -4298,4299,1553,1554, 181,4300,4301,1555, 185,4302,3625,4303,1559, 188,4304,4305, -4306,1562,4307,4308,1565, 195,4309, 197,4310,4311, 200, 201, 28,1566,1567,4312, -4313,4314,4315,4316,4317,4318,4319,4320,1572,1573, 214, 215, 216, 217, 218, 219, - 220,4321,4322,1575,1576,1577,1578,4323,1579,1580,4324,1581,4325,4326,4327,4328, - 232, 233, 234, 235,4329, 237, 238,4330,1584,1585, 240,1586, 242, 243, 244,1587, - 246,4331,4332,1589, 249, 250, 251,1590, 252,4333, 254, 255,4334,4335,4336,4337, -1595,4338,1596,1597,1598,1599,1600,1601,4339,4340,4341, 267,4342,4343, 270,4344, -4345,4346, 273,1603,4347,1605, 276,4348,4349,4350,4351,1610,4352,4353,4354, 126, - 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, - 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, - 295, 295, 295,4355,1470,1613,4356,1615,4357,1475,4358,1477,4359,1479,4360,1481, -1482,4361,1484,4362,4363,4364,1630,4365,2291,4366,1634,3642,1636,1637,1638,1639, -1640,4367,4368,1643,1644,1645,1646,4369, 342,4370,4371,1651,1652,1653,4372,4373, -1656,4374,1658,1659,1660,1661,1662,1663, 295, 295, 295, 295, 295, 295, 295, 295, +4170,4171,1553,1554, 181,4172,4173,1555, 185,4174,3497,4175,1559, 188,4176,4177, +4178,1562,4179,4180,1565, 195,4181, 197,4182,4183, 200, 201, 28,1566,1567,4184, +4185,4186,4187,4188,4189,4190,4191,4192,1572,1573, 214, 215, 216, 217, 218, 219, + 220,4193,4194,1575,1576,3852,1578,4195,1579,1580,4196,4197,4198,4199,4200,4201, + 232, 233, 234, 235,4202, 237, 238,4203,1584,1585, 240,1586,4204, 243, 244,1587, + 246,4205,4206,1589, 249, 250, 251,1590, 252,4207, 254,3889,4208,4209,4210,4211, +1595,4212,1596,1597,4213,1599,1600,1601,4214,4215,4216, 267,4217,4218, 270,4219, +4220,4221,4222,1603,4223,4224, 276,4225,4226,4227,4228,1610,4229,4230,4231, 126, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,1662,1663, 295, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,4232,4233,4234,4235,4236, +4237,4238,4239,4240,1470,1613,4241,1615,4242,1475,4243,1477,4244,1479,4245,1481, +1482,4246,1484,4247,4248,4249,1630,4250,2291,4251,1634,3514,1636,1637,1638,1639, +1640,4252,4253,1643,1644, 320,4254,4255, 342,4256,4257,4258,4259,1374,4260,4261, +1656,4262,4263,1659,1660,4264,1662,1663, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, }, @@ -10712,9 +10566,9 @@ const unsigned short banks[75][256] = 2224, 909,2225, 911, 912,2226,2227, 915, 916,2228,2229, 919, 920, 921, 922, 923, 2230, 925, 926, 927, 928, 929, 295, 931, 932, 933, 934, 935,2232,2233, 938,2234, 940, 295, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, - 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966,4377, 968,4378, 295, 295, -4379,4380,4381,4382,4383,4384,4385, 978,4386,4387,4388,4389,4390,4391,4392,4393, -4394,4395,4396,4397,4398,4399,4400,4401,4402,4403,4404, 975, 971, 972, 973, 974, + 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966,4267, 968,4268, 295, 295, +4269,4270,4271,4272,4273,4274,4275, 978,4276,4277,4278,4279,4280,4281,4282,4283, +4284,4285,4286,4287,4288,4289,4290,4291,4292,4293,4294, 975, 971, 972, 973, 974, 975, 310, 976, 977, 978, 974,2239, 980,2240, 982,2241, 984,2242, 985,2243, 987, 988,2244, 990, 325,2244, 325, 991,2244,2245,2246, 330, 993,2247,2248,2249, 997, 998,2250,2251,1001,1002,1003, 340,1004,1005,1006,1007,1008,1009, 310,1010,1011, @@ -10723,62 +10577,62 @@ const unsigned short banks[75][256] = 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, }, { -3415,4406,3324,3324,4407,3324,3324,3324,3324,3324,3324, 378,3324,3324,3822,3324, -3324,4408,3324,4409,4410,4411,3324,3324,3324, 370,3324,4412,4413,4414,4415,4416, -3324,4417,4418,4419,3438,3438,4420, 442,4421,3324,3324,4422,4423,4422, 676,4424, -4425,3324,3324,4426, 51,3324,3324,3324,4427,3452,4428,3324, 59,4429,4427, 62, -3324,4430,4430,4431, 67,3324, 664,4432,3324,2316,3324,4433, 70,3324,4434, 78, -4435,4436, 81,3324,3324,3324,3324,3324,3324,3324,3324, 90,3324,4437, 93,4438, -3324,3324,3324,3324,3324,3324,3324,4439,3324,3324,3324,3324,3324,3324,3324,3324, -3324,3324,3324,3324,3324,4240,3324,4440,3324,3324,3324,3324,3324,3324,3324,3324, -3324,3324,3324,3324,3324,3324,3324,3324,3324,3324,3324,3324,3324,3324,3324,3324, -3324,3324,3324,3324,3324,3324,3324,3324,3324,3324,3324,3324,3324,3324,3324,3324, -3324,3324,3324,4441,4441,4442,4443,4444,4445,4446,4447,4448,4449,4450,4451,4452, -4453,4454,4455,4456,4457,4458,4459,4460,4461,4462,4463,4464,3324,3324,4465, 154, -4466,4467,4468,3324,3324, 160,3324,3324,3324,4469,4470,4471,4472,4473,4474,3324, -3324,4475, 160,4476,3324,3324,3324,3324,3324,3324,3324,3324,3324,3324,3324,3324, -3324,3324,3324,3324,3324,3324,3324,3324,3324,3324,3324,3324,3324,3324,3324,3324, -3324,3324,3324,3324,3324,3324,3324,3324,3324,3324,3324,3324,3324,3324,3324,3324, +3287,4296,3196,3196,4297,3196,3196,3196,3196,3196,3196, 378,3196,3196,3694,3196, +3196,4298,3196,4299,4300,4301,3196,3196,3196, 370,3196,4302,4303,4304,4305,4306, +3196,4307,4308,4309,3310,3310,4310, 442,4311,3196,3196,4312,4313,4312, 676,4314, +4315,3196,3196,4316, 51,3196,3196,3196,4317,3324,4318,3196, 59,4319,4317, 62, +3196,4320,4320,4321, 67,3196, 664,4322,3196,2316,3196,4323, 70,3196,4324, 78, +4325,4326, 81,3196,3196,3196,3196,3196,3196,3196,3196, 90,3196,4327, 93,4328, +3196,3196,3196,3196,3196,3196,3196,4329,3196,3196,3196,3196,3196,3196,3196,3196, +3196,3196,3196,3196,3196,4112,3196,4330,3196,3196,3196,3196,3196,3196,3196,3196, +3196,3196,3196,3196,3196,3196,3196,3196,3196,3196,3196,3196,3196,3196,3196,3196, +3196,3196,3196,3196,3196,3196,3196,3196,3196,3196,3196,3196,3196,3196,3196,3196, +3196,3196,3196,4331,4331,4332,4333,4334,4335,4336,4337,4338,4339,4340,4341,4342, +4343,4344,4345,4346,4347,4348,4349,4350,4351,4352,4353,4354,3196,3196,4355, 154, +4356,4357,4358,3196,3196, 160,3196,3196,3196,4359,4360,4361,4362,4363,4364,3196, +3196,4365, 160,4366,3196,3196,3196,3196,3196,3196,3196,3196,3196,3196,3196,3196, +3196,3196,3196,3196,3196,3196,3196,3196,3196,3196,3196,3196,3196,3196,3196,3196, +3196,3196,3196,3196,3196,3196,3196,3196,3196,3196,3196,3196,3196,3196,3196,3196, }, { -3928,3929,3930,3931,3932,3933,3934,3935,3936,3937,3938,3939,3940,3941,3942,3943, -3944,3945,3946,3947,3948,3949,3950,3951,3952,3953,3954,3955,3956,3957,3958,3959, -3960,3961,3962,3963,3964,3965,3966,3967,3968,3969,3970,3971,3972,3973,3974,3975, -3968,3976,3977,3978,3979,3980,3981,3982,3983,3984,3985,3986,3987,3988,3989,3990, -3991,3992,3992,3993,3994,3995,3996,3997,3998,3999,4000,4001,4002,4003,4004,4005, -4006,4007,4008,4009,4010,4011,4012,4013,4014,4015,4016,4017,4018,4019,4020,4021, -4022,4023,4024,4025,4026,4027,4028,4029,4030,4031,4032,4033,4034,4035,4036,4037, -4038,4039,4040,4041,4042,4043,4044,4045,4046,4047,4477,4049,4050,4051,4052,4053, -4114,4114,4114,4114,4114,4114,4114,4114,4114,4114,4114,4114,4114,4114,4114,4114, -4114,4114,4114,4114,4114,4114,4114,4114,4114,4114,4114,4115,4115,4115,4115,4115, -4115,4115,4115,4055,4056,4057,4058,4059,4060,4061,4062,4063,4064,4065,4066,4067, -4068,4069,4070,4071,4072,4073,4074,4075,4076,4077,4078,4079,4080,4081,4082,4083, -4084,4085,4086,4087,4088,4064,4089,4090,4091,4092,4093,4094,4095,4096,4097,4098, -4099,4100,4101,4115,4115,4115,4115,4115,4123,4114,4124,4124,4124,4124,4124,4124, -4124,4124,4124,4124,4124,4124,4124,4124,4124,4124,4124,4124,4124,4124,4124,4124, -4124,4124,4124,4124,4124,4124,4124,4124,4124,4124,4124,4124,4124,4124,4124,4124, +3800,3801,3802,3803,3804,3805,3806,3807,3808,3809,3810,3811,3812,3813,3814,3815, +3816,3817,3818,3819,3820,3821,3822,3823,3824,3825,3826,3827,3828,3829,3830,3831, +3832,3833,3834,3835,3836,3837,3838,3839,3840,3841,3842,3843,3844,3845,3846,3847, +3840,3848,3849,3850,3851,3852,3853,3854,3855,3856,3857,3858,3859,3860,3861,3862, +3863,3864,3864,3865,3866,3867,3868,3869,3870,3871,3872,3873,3874,3875,3876,3877, +3878,3879,3880,3881,3882,3883,3884,3885,3886,3887,3888,3889,3890,3891,3892,3893, +3894,3895,3896,3897,3898,3899,3900,3901,3902,3903,3904,3905,3906,3907,3908,3909, +3910,3911,3912,3913,3914,3915,3916,3917,3918,3919,4367,3921,3922,3923,3924,3925, +3986,3986,3986,3986,3986,3986,3986,3986,3986,3986,3986,3986,3986,3986,3986,3986, +3986,3986,3986,3986,3986,3986,3986,3986,3986,3986,3986,3987,3987,3987,3987,3987, +3987,3987,3987,3927,3928,3929,3930,3931,3932,3933,3934,3935,3936,3937,3938,3939, +3940,3941,3942,3943,3944,3945,3946,3947,3948,3949,3950,3951,3952,3953,3954,3955, +3956,3957,3958,3959,3960,3936,3961,3962,3963,3964,3965,3966,3967,3968,3969,3970, +3971,3972,3973,3987,3987,3987,3987,3987,3995,3986,3996,3996,3996,3996,3996,3996, +3996,3996,3996,3996,3996,3996,3996,3996,3996,3996,3996,3996,3996,3996,3996,3996, +3996,3996,3996,3996,3996,3996,3996,3996,3996,3996,3996,3996,3996,3996,3996,3996, }, { -4478,4479,4480,4481,4482,4483,4484,4485,4486,4487,4488,4489,4490,4491,4492,4493, -4494,4495,4496,4497,4498,4499,4500,4501,4502,4503,4504,4505,4506,4507,4508,4509, -4510,4511,4512,4513,4514,4515,4516,4517,4518,4519,4520,4521,4522,4523,4524,4525, -4526,4527,4528,4529,4530,4531,4532,4533,4534,4535,4536,4537,4538,4539,4540,4541, -4542,4543,4544,4545,4546,4547,4548,4549,4550,4551,4552,4553,4554,4555,4556,4557, -4558,4559,4560,4561,4562,4563,4564,4565,4566,4567,4568,4569,4570,4571,4572,4573, -4574,4575,4576,4577,4578,4579,4580,4581,4582,4583,4584,4585,4586,4587,4588,4589, -4590,4591,4592,4593,4594,4595,4596,4597,4598,4599,4600,4601,4602,4603,4604,4605, - 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, - 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,4606,4607,4608,4609,4610, -4611,4612,4613,4614,4615,4616,4617,4618,4357,4619,4620,4621,4622,4623,4360,4624, -4625,4626,4627,4628,4363,4629,4630,4365,4631,4632,4633,4634,4635,4636,4637,4638, -4639,4640,4641,4642,4643, 320,4644,4645,4646,4647,4648,4649,4650,1374,4651,4652, -4653,4654,4655,4656,4657,4658,4659,4660, 295, 295, 295, 295, 295, 295, 295, 295, +4368,4369,4370,4371,4372,4373,4374,4375,4376,4377,4378,4379,4380,4381,4382,4383, +4384,4385,4386,4387,4388,4389,4390,4391,4392,4393,4394,4395,4396,4397,4398,4399, +4400,4401,4402,4403,4404,4405,4406,4407,4408,4409,4410,4411,4412,4413,4414,4415, +4416,4417,4418,4419,4420,4421,4422,4423,4424,4425,4426,4197,4427,4428,4429,4430, +4431,4432,4433,4434,4435,4436,4437,4438,4439,4440,4441,4442,4204,4443,4444,4445, +4446,4447,4448,4449,4450,4451,4452,4453,4454,4455,4456,4457,4458,4459,4460,4461, +4462,4463,4464,4465,4466,4467,4468,4469,4470,4215,4216,4471,4472,4218,4473,4474, +4475,4476,4222,4477,4478,4224,4479,4480,4226,4481,4228,4482,4483,4484,4485,4486, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,4232,4233,4234,4235,4487, +4237,4238,4239,4488,4489,4490,4491,4492,4242,4493,4494,4495,4244,4496,4245,4497, +4498,4499,4500,4501,4248,4502,4503,4250,4504,4505,4506,4507,4508,4509,4510,4511, +4512,4252,4253,4513,4514, 320,4515,4516,4517,4256,4257,4258,4259,1374,4260,4261, +4518,4519,4263,4520,4521,4264,4522,4523, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, }, { -4661,4662,4663,4664,4662,4665,4666,4667,4668,4669,4670,4672,4673,4674,4675,4676, -4677,4679,4681,4674,4683,4684,4685,4686,4687,4688,4689, 295, 28, 29, 30, 31, +4524,4525,4526,4527,4525,4528,4529,4530,4531,4532,4533,4535,4536,4537,4538,4539, +4540,4542,4544,4537,4546,4547,4548,4549,4550,4551,4552, 295, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 33, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, @@ -10787,28 +10641,28 @@ const unsigned short banks[75][256] = 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, - 295, 295, 295, 127,4678, 128,4680, 130, 131, 132,4682, 134, 135, 136, 137, 138, - 139, 140, 141, 142, 143, 144,4671, 146, 147, 148, 149, 150, 151, 152, 153, 154, + 295, 295, 295, 127,4541, 128,4543, 130, 131, 132,4545, 134, 135, 136, 137, 138, + 139, 140, 141, 142, 143, 144,4534, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, }, { -4691,4692,4693,4694,4695,4696,4697,4698,4699,4700,4701,4702,4703,3423,4700,4704, -3426,4705,4706,3426,4707,4708,4708,4708, 868, 869, 870,4709,4710,4711,4712,4713, -4714,4715,4716,4716,4717,4714,4718,4719,3970,4720,4721,4721,4722,4723,4724,4725, -4726,4727,4728,4728,4729,4235,3450,4730,4731,4732,4733,4734,4735,4731,4731,4736, -3457, 769,3458,3459,4737,4738,4739,4740,4741,4742,4743,4744,4745,4742,1300,4746, -4747,4748,4742,4707,4749,4731,4750,4751,3475,4752,4753,4754,4755,1314,4756,4757, -4758,4759,4760,4753,4753,1322,4761,4762,4763,4764,4765,4764,3423,4766,3970,4767, -4768,1334,4768,4769,4770,4771, 792,4772,1341,1342,1343,1344,4773,4774,4775,1348, +4554,4555,4556,4557,4558,4559,4560,4561,4562,4563,4564,4565,4566,3295,4563,4567, +3298,4568,4569,3298,4570,4571,4571,4571, 868, 869, 870,4572,4573,4574,4575,4576, +4577,4578,4579,4579,4580,4577,4581,4582,3842,4583,4584,4584,4585,4586,4587,4588, +4589,4590,4591,4591,4592,4107,3322,4593,4594,4595,4596,4597,4598,4594,4594,4599, +3329, 769,3330,3331,4600,4601,4602,4603,4604,4605,4606,4607,4608,4605,1300,4609, +4610,4611,4605,4570,4612,4594,4613,4614,3347,4615,4616,4617,4618,1314,4619,4620, +4621,4622,4623,4616,4616,1322,4624,4625,4626,4627,4628,4627,3295,4629,3842,4630, +4631,1334,4631,4632,4633,4634, 792,4635,1341,1342,1343,1344,4636,4637,4638,1348, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, - 295, 295, 295,4776,4776,4777,4778,4777,4779,4780,4781,4782,4783,4784,4785,4786, -4787,4788,4789,4790,4791,4792,4793,4794,4795,4788,4796,4797,4798,4799,4800,4801, -4802,4803,4804,4805,4806,4807,4808,4805,4806,4807,4809,4810,4811,4812,1375, 295, -4813,4814, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, + 295, 295, 295,4639,4639,4640,4641,4640,4642,4643,4644,4645,4646,4647,4648,4649, +4650,4651,4652,4653,4654,4655,4656,4657,4658,4651,4659,4660,4661,4662,4663,4664, +4665,4666,4667,4668,4669,4670,4671,4668,4669,4670,4672,4673,4674,4675,1375, 295, +4676,4677, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, }, @@ -10882,8 +10736,8 @@ const AdlBankSetup adlbanksetup[75] = {3, 0, 0, 0, 0}, //Bank 63, TMB (Shadow Warrior) {2, 0, 0, 0, 0}, //Bank 64, DMX (Raptor) {3, 0, 0, 0, 0}, //Bank 65, OP3 (Modded GMOPL by Wohlstand) - {3, 0, 0, 0, 0}, //Bank 66, SB (Jammey O'Connel's bank) - {3, 0, 0, 0, 0}, //Bank 67, TMB (Default bank of Apgee Sound System) + {3, 0, 0, 0, 0}, //Bank 66, SB (Jamie O'Connell's bank) + {3, 0, 0, 0, 0}, //Bank 67, TMB (Default bank of Apogee Sound System) {0, 1, 1, 0, 0}, //Bank 68, WOPL (4op bank by James Alan Nguyen and Wohlstand) {3, 0, 0, 0, 0}, //Bank 69, TMB (Blood) {3, 0, 0, 0, 0}, //Bank 70, TMB (Lee) diff --git a/src/adlmidi.cpp b/src/adlmidi.cpp index c7c5cf3..bde8757 100644 --- a/src/adlmidi.cpp +++ b/src/adlmidi.cpp @@ -60,7 +60,7 @@ ADLMIDI_EXPORT struct ADL_MIDIPlayer *adl_init(long sample_rate) return NULL; } - MIDIplay *player = new MIDIplay(static_cast<unsigned long>(sample_rate)); + MIDIplay *player = new(std::nothrow) MIDIplay(static_cast<unsigned long>(sample_rate)); if(!player) { free(midi_device); @@ -76,9 +76,9 @@ ADLMIDI_EXPORT void adl_close(struct ADL_MIDIPlayer *device) { if(!device) return; - MIDIplay * play = reinterpret_cast<MIDIplay *>(device->adl_midiPlayer); - if(play) - delete play; + MidiPlayer *play = GET_MIDI_PLAYER(device); + assert(play); + delete play; device->adl_midiPlayer = NULL; free(device); device = NULL; @@ -89,8 +89,7 @@ ADLMIDI_EXPORT int adl_setDeviceIdentifier(ADL_MIDIPlayer *device, unsigned id) if(!device || id > 0x0f) return -1; MidiPlayer *play = GET_MIDI_PLAYER(device); - if(!play) - return -1; + assert(play); play->setDeviceId(static_cast<uint8_t>(id)); return 0; } @@ -101,6 +100,7 @@ ADLMIDI_EXPORT int adl_setNumChips(ADL_MIDIPlayer *device, int numChips) return -2; MidiPlayer *play = GET_MIDI_PLAYER(device); + assert(play); #ifdef ADLMIDI_HW_OPL ADL_UNUSED(numChips); play->m_setup.numChips = 1; @@ -124,9 +124,8 @@ ADLMIDI_EXPORT int adl_getNumChips(struct ADL_MIDIPlayer *device) if(device == NULL) return -2; MidiPlayer *play = GET_MIDI_PLAYER(device); - if(play) - return (int)play->m_setup.numChips; - return -2; + assert(play); + return (int)play->m_setup.numChips; } ADLMIDI_EXPORT int adl_setBank(ADL_MIDIPlayer *device, int bank) @@ -134,6 +133,7 @@ ADLMIDI_EXPORT int adl_setBank(ADL_MIDIPlayer *device, int bank) #ifdef DISABLE_EMBEDDED_BANKS ADL_UNUSED(bank); MidiPlayer *play = GET_MIDI_PLAYER(device); + assert(play); play->setErrorString("This build of libADLMIDI has no embedded banks. " "Please load banks by using adl_openBankFile() or " "adl_openBankData() functions instead of adl_setBank()."); @@ -146,6 +146,7 @@ ADLMIDI_EXPORT int adl_setBank(ADL_MIDIPlayer *device, int bank) bankno = 0; MidiPlayer *play = GET_MIDI_PLAYER(device); + assert(play); if(static_cast<uint32_t>(bankno) >= NumBanks) { char errBuf[150]; @@ -185,6 +186,7 @@ ADLMIDI_EXPORT int adl_reserveBanks(ADL_MIDIPlayer *device, unsigned banks) if(!device) return -1; MidiPlayer *play = GET_MIDI_PLAYER(device); + assert(play); OPL3::BankMap &map = play->m_synth.m_insBanks; map.reserve(banks); return (int)map.capacity(); @@ -201,6 +203,7 @@ ADLMIDI_EXPORT int adl_getBank(ADL_MIDIPlayer *device, const ADL_BankId *idp, in size_t idnumber = ((id.msb << 8) | id.lsb | (id.percussive ? size_t(OPL3::PercussionTag) : 0)); MidiPlayer *play = GET_MIDI_PLAYER(device); + assert(play); OPL3::BankMap &map = play->m_synth.m_insBanks; OPL3::BankMap::iterator it; @@ -253,6 +256,7 @@ ADLMIDI_EXPORT int adl_removeBank(ADL_MIDIPlayer *device, ADL_Bank *bank) return -1; MidiPlayer *play = GET_MIDI_PLAYER(device); + assert(play); OPL3::BankMap &map = play->m_synth.m_insBanks; OPL3::BankMap::iterator it = OPL3::BankMap::iterator::from_ptrs(bank->pointer); size_t size = map.size(); @@ -266,6 +270,7 @@ ADLMIDI_EXPORT int adl_getFirstBank(ADL_MIDIPlayer *device, ADL_Bank *bank) return -1; MidiPlayer *play = GET_MIDI_PLAYER(device); + assert(play); OPL3::BankMap &map = play->m_synth.m_insBanks; OPL3::BankMap::iterator it = map.begin(); @@ -282,6 +287,7 @@ ADLMIDI_EXPORT int adl_getNextBank(ADL_MIDIPlayer *device, ADL_Bank *bank) return -1; MidiPlayer *play = GET_MIDI_PLAYER(device); + assert(play); OPL3::BankMap &map = play->m_synth.m_insBanks; OPL3::BankMap::iterator it = OPL3::BankMap::iterator::from_ptrs(bank->pointer); @@ -295,7 +301,7 @@ ADLMIDI_EXPORT int adl_getNextBank(ADL_MIDIPlayer *device, ADL_Bank *bank) ADLMIDI_EXPORT int adl_getInstrument(ADL_MIDIPlayer *device, const ADL_Bank *bank, unsigned index, ADL_Instrument *ins) { if(!device || !bank || index > 127 || !ins) - return 1; + return -1; OPL3::BankMap::iterator it = OPL3::BankMap::iterator::from_ptrs(bank->pointer); cvt_FMIns_to_ADLI(*ins, it->second.ins[index]); @@ -306,10 +312,10 @@ ADLMIDI_EXPORT int adl_getInstrument(ADL_MIDIPlayer *device, const ADL_Bank *ban ADLMIDI_EXPORT int adl_setInstrument(ADL_MIDIPlayer *device, ADL_Bank *bank, unsigned index, const ADL_Instrument *ins) { if(!device || !bank || index > 127 || !ins) - return 1; + return -1; if(ins->version != 0) - return 1; + return -1; OPL3::BankMap::iterator it = OPL3::BankMap::iterator::from_ptrs(bank->pointer); cvt_ADLI_to_FMIns(it->second.ins[index], *ins); @@ -320,13 +326,12 @@ ADLMIDI_EXPORT int adl_loadEmbeddedBank(struct ADL_MIDIPlayer *device, ADL_Bank { if(!device) return -1; - MidiPlayer *play = GET_MIDI_PLAYER(device); - if (!play) - return -1; #ifdef DISABLE_EMBEDDED_BANKS ADL_UNUSED(bank); ADL_UNUSED(num); + MidiPlayer *play = GET_MIDI_PLAYER(device); + assert(play); play->setErrorString("This build of libADLMIDI has no embedded banks. " "Please load banks by using adl_openBankFile() or " "adl_openBankData() functions instead of adl_loadEmbeddedBank()."); @@ -351,7 +356,12 @@ ADLMIDI_EXPORT int adl_setNumFourOpsChn(ADL_MIDIPlayer *device, int ops4) { if(!device) return -1; + + if(ops4 == -1) + return adlRefreshNumCards(device); + MidiPlayer *play = GET_MIDI_PLAYER(device); + assert(play); if((unsigned int)ops4 > 6 * play->m_setup.numChips) { char errBuff[250]; @@ -364,7 +374,7 @@ ADLMIDI_EXPORT int adl_setNumFourOpsChn(ADL_MIDIPlayer *device, int ops4) play->m_synth.m_numFourOps = play->m_setup.numFourOps; play->m_synth.updateChannelCategories(); - return 0; //adlRefreshNumCards(device); + return 0; } ADLMIDI_EXPORT int adl_getNumFourOpsChn(struct ADL_MIDIPlayer *device) @@ -372,15 +382,15 @@ ADLMIDI_EXPORT int adl_getNumFourOpsChn(struct ADL_MIDIPlayer *device) if(!device) return -1; MidiPlayer *play = GET_MIDI_PLAYER(device); - if(play) - return (int)play->m_setup.numFourOps; - return -1; + assert(play); + return (int)play->m_setup.numFourOps; } ADLMIDI_EXPORT void adl_setPercMode(ADL_MIDIPlayer *device, int percmod) { if(!device) return; MidiPlayer *play = GET_MIDI_PLAYER(device); + assert(play); play->m_setup.rhythmMode = percmod; play->m_synth.m_rhythmMode = play->m_setup.rhythmMode < 0 ? (play->m_synth.m_insBankSetup.adLibPercussions) : @@ -392,6 +402,7 @@ ADLMIDI_EXPORT void adl_setHVibrato(ADL_MIDIPlayer *device, int hvibro) { if(!device) return; MidiPlayer *play = GET_MIDI_PLAYER(device); + assert(play); play->m_setup.deepVibratoMode = hvibro; play->m_synth.m_deepVibratoMode = play->m_setup.deepVibratoMode < 0 ? play->m_synth.m_insBankSetup.deepVibrato : @@ -399,10 +410,19 @@ ADLMIDI_EXPORT void adl_setHVibrato(ADL_MIDIPlayer *device, int hvibro) play->m_synth.commitDeepFlags(); } +ADLMIDI_EXPORT int adl_getHVibrato(struct ADL_MIDIPlayer *device) +{ + if(!device) return -1; + MidiPlayer *play = GET_MIDI_PLAYER(device); + assert(play); + return play->m_synth.m_deepVibratoMode; +} + ADLMIDI_EXPORT void adl_setHTremolo(ADL_MIDIPlayer *device, int htremo) { if(!device) return; MidiPlayer *play = GET_MIDI_PLAYER(device); + assert(play); play->m_setup.deepTremoloMode = htremo; play->m_synth.m_deepTremoloMode = play->m_setup.deepTremoloMode < 0 ? play->m_synth.m_insBankSetup.deepTremolo : @@ -410,13 +430,20 @@ ADLMIDI_EXPORT void adl_setHTremolo(ADL_MIDIPlayer *device, int htremo) play->m_synth.commitDeepFlags(); } +ADLMIDI_EXPORT int adl_getHTremolo(struct ADL_MIDIPlayer *device) +{ + if(!device) return -1; + MidiPlayer *play = GET_MIDI_PLAYER(device); + assert(play); + return play->m_synth.m_deepTremoloMode; +} + ADLMIDI_EXPORT void adl_setScaleModulators(ADL_MIDIPlayer *device, int smod) { if(!device) return; MidiPlayer *play = GET_MIDI_PLAYER(device); - if(!play) - return; + assert(play); play->m_setup.scaleModulators = smod; play->m_synth.m_scaleModulators = play->m_setup.scaleModulators < 0 ? play->m_synth.m_insBankSetup.scaleModulators : @@ -428,8 +455,7 @@ ADLMIDI_EXPORT void adl_setFullRangeBrightness(struct ADL_MIDIPlayer *device, in if(!device) return; MidiPlayer *play = GET_MIDI_PLAYER(device); - if(!play) - return; + assert(play); play->m_setup.fullRangeBrightnessCC74 = (fr_brightness != 0); } @@ -438,8 +464,7 @@ ADLMIDI_EXPORT void adl_setLoopEnabled(ADL_MIDIPlayer *device, int loopEn) if(!device) return; MidiPlayer *play = GET_MIDI_PLAYER(device); - if(!play) - return; + assert(play); #ifndef ADLMIDI_DISABLE_MIDI_SEQUENCER play->m_sequencer.setLoopEnabled(loopEn != 0); #else @@ -452,8 +477,7 @@ ADLMIDI_EXPORT void adl_setSoftPanEnabled(ADL_MIDIPlayer *device, int softPanEn) if(!device) return; MidiPlayer *play = GET_MIDI_PLAYER(device); - if(!play) - return; + assert(play); play->m_synth.m_softPanning = (softPanEn != 0); } @@ -463,8 +487,7 @@ ADLMIDI_EXPORT void adl_setLogarithmicVolumes(struct ADL_MIDIPlayer *device, int if(!device) return; MidiPlayer *play = GET_MIDI_PLAYER(device); - if(!play) - return; + assert(play); play->m_setup.logarithmicVolumes = (logvol != 0); if(play->m_setup.logarithmicVolumes) play->m_synth.setVolumeScaleModel(ADLMIDI_VolumeModel_NativeOPL3); @@ -477,8 +500,7 @@ ADLMIDI_EXPORT void adl_setVolumeRangeModel(struct ADL_MIDIPlayer *device, int v if(!device) return; MidiPlayer *play = GET_MIDI_PLAYER(device); - if(!play) - return; + assert(play); play->m_setup.volumeScaleModel = volumeModel; if(play->m_setup.volumeScaleModel == ADLMIDI_VolumeModel_AUTO)//Use bank default volume model play->m_synth.m_volumeScale = (OPL3::VolumesScale)play->m_synth.m_insBankSetup.volumeModel; @@ -486,11 +508,21 @@ ADLMIDI_EXPORT void adl_setVolumeRangeModel(struct ADL_MIDIPlayer *device, int v play->m_synth.setVolumeScaleModel(static_cast<ADLMIDI_VolumeModels>(volumeModel)); } +ADLMIDI_EXPORT int adl_getVolumeRangeModel(struct ADL_MIDIPlayer *device) +{ + if(!device) + return -1; + MidiPlayer *play = GET_MIDI_PLAYER(device); + assert(play); + return play->m_synth.getVolumeScaleModel(); +} + ADLMIDI_EXPORT int adl_openBankFile(struct ADL_MIDIPlayer *device, const char *filePath) { - if(device && device->adl_midiPlayer) + if(device) { MidiPlayer *play = GET_MIDI_PLAYER(device); + assert(play); play->m_setup.tick_skip_samples_delay = 0; if(!play->LoadBank(filePath)) { @@ -508,11 +540,10 @@ ADLMIDI_EXPORT int adl_openBankFile(struct ADL_MIDIPlayer *device, const char *f ADLMIDI_EXPORT int adl_openBankData(struct ADL_MIDIPlayer *device, const void *mem, unsigned long size) { - if(device && device->adl_midiPlayer) + if(device) { MidiPlayer *play = GET_MIDI_PLAYER(device); - if(!play) - return -1; + assert(play); play->m_setup.tick_skip_samples_delay = 0; if(!play->LoadBank(mem, static_cast<size_t>(size))) { @@ -530,11 +561,10 @@ ADLMIDI_EXPORT int adl_openBankData(struct ADL_MIDIPlayer *device, const void *m ADLMIDI_EXPORT int adl_openFile(ADL_MIDIPlayer *device, const char *filePath) { - if(device && device->adl_midiPlayer) + if(device) { MidiPlayer *play = GET_MIDI_PLAYER(device); - if(!play) - return -1; + assert(play); #ifndef ADLMIDI_DISABLE_MIDI_SEQUENCER play->m_setup.tick_skip_samples_delay = 0; if(!play->LoadMIDI(filePath)) @@ -558,11 +588,10 @@ ADLMIDI_EXPORT int adl_openFile(ADL_MIDIPlayer *device, const char *filePath) ADLMIDI_EXPORT int adl_openData(ADL_MIDIPlayer *device, const void *mem, unsigned long size) { - if(device && device->adl_midiPlayer) + if(device) { MidiPlayer *play = GET_MIDI_PLAYER(device); - if(!play) - return -1; + assert(play); #ifndef ADLMIDI_DISABLE_MIDI_SEQUENCER play->m_setup.tick_skip_samples_delay = 0; if(!play->LoadMIDI(mem, static_cast<size_t>(size))) @@ -596,9 +625,10 @@ ADLMIDI_EXPORT const char *adl_chipEmulatorName(struct ADL_MIDIPlayer *device) { #ifndef ADLMIDI_HW_OPL MidiPlayer *play = GET_MIDI_PLAYER(device); - if(play && !play->m_synth.m_chips.empty()) + assert(play); + if(!play->m_synth.m_chips.empty()) return play->m_synth.m_chips[0]->emulatorName(); - #else +#else return "Hardware OPL3 chip on 0x330"; #endif } @@ -611,8 +641,6 @@ ADLMIDI_EXPORT int adl_switchEmulator(struct ADL_MIDIPlayer *device, int emulato { MidiPlayer *play = GET_MIDI_PLAYER(device); assert(play); - if(!play) - return -1; if(adl_isEmulatorAvailable(emulator)) { play->m_setup.emulator = emulator; @@ -630,12 +658,10 @@ ADLMIDI_EXPORT int adl_setRunAtPcmRate(ADL_MIDIPlayer *device, int enabled) if(device) { MidiPlayer *play = GET_MIDI_PLAYER(device); - if(play) - { - play->m_setup.runAtPcmRate = (enabled != 0); - play->partialReset(); - return 0; - } + assert(play); + play->m_setup.runAtPcmRate = (enabled != 0); + play->partialReset(); + return 0; } return -1; } @@ -675,6 +701,7 @@ ADLMIDI_EXPORT void adl_reset(struct ADL_MIDIPlayer *device) if(!device) return; MidiPlayer *play = GET_MIDI_PLAYER(device); + assert(play); play->partialReset(); play->resetMIDI(); } @@ -685,8 +712,7 @@ ADLMIDI_EXPORT double adl_totalTimeLength(struct ADL_MIDIPlayer *device) if(!device) return -1.0; MidiPlayer *play = GET_MIDI_PLAYER(device); - if(!play) - return -1.0; + assert(play); return play->m_sequencer.timeLength(); #else ADL_UNUSED(device); @@ -700,8 +726,7 @@ ADLMIDI_EXPORT double adl_loopStartTime(struct ADL_MIDIPlayer *device) if(!device) return -1.0; MidiPlayer *play = GET_MIDI_PLAYER(device); - if(!play) - return -1.0; + assert(play); return play->m_sequencer.getLoopStart(); #else ADL_UNUSED(device); @@ -715,8 +740,7 @@ ADLMIDI_EXPORT double adl_loopEndTime(struct ADL_MIDIPlayer *device) if(!device) return -1.0; MidiPlayer *play = GET_MIDI_PLAYER(device); - if(!play) - return -1.0; + assert(play); return play->m_sequencer.getLoopEnd(); #else ADL_UNUSED(device); @@ -730,8 +754,7 @@ ADLMIDI_EXPORT double adl_positionTell(struct ADL_MIDIPlayer *device) if(!device) return -1.0; MidiPlayer *play = GET_MIDI_PLAYER(device); - if(!play) - return -1.0; + assert(play); return play->m_sequencer.tell(); #else ADL_UNUSED(device); @@ -747,8 +770,7 @@ ADLMIDI_EXPORT void adl_positionSeek(struct ADL_MIDIPlayer *device, double secon if(!device) return; MidiPlayer *play = GET_MIDI_PLAYER(device); - if(!play) - return; + assert(play); play->realTime_panic(); play->m_setup.delay = play->m_sequencer.seek(seconds, play->m_setup.mindelay); play->m_setup.carry = 0.0; @@ -764,8 +786,7 @@ ADLMIDI_EXPORT void adl_positionRewind(struct ADL_MIDIPlayer *device) if(!device) return; MidiPlayer *play = GET_MIDI_PLAYER(device); - if(!play) - return; + assert(play); play->realTime_panic(); play->m_sequencer.rewind(); #else @@ -779,8 +800,7 @@ ADLMIDI_EXPORT void adl_setTempo(struct ADL_MIDIPlayer *device, double tempo) if(!device || (tempo <= 0.0)) return; MidiPlayer *play = GET_MIDI_PLAYER(device); - if(!play) - return; + assert(play); play->m_sequencer.setTempo(tempo); #else ADL_UNUSED(device); @@ -793,9 +813,8 @@ ADLMIDI_EXPORT int adl_describeChannels(struct ADL_MIDIPlayer *device, char *str { if(!device) return -1; - MIDIplay *play = reinterpret_cast<MIDIplay *>(device->adl_midiPlayer); - if(!play) - return -1; + MidiPlayer *play = GET_MIDI_PLAYER(device); + assert(play); play->describeChannels(str, attr, size); return 0; } @@ -807,8 +826,7 @@ ADLMIDI_EXPORT const char *adl_metaMusicTitle(struct ADL_MIDIPlayer *device) if(!device) return ""; MidiPlayer *play = GET_MIDI_PLAYER(device); - if(!play) - return ""; + assert(play); return play->m_sequencer.getMusicTitle().c_str(); #else ADL_UNUSED(device); @@ -823,8 +841,7 @@ ADLMIDI_EXPORT const char *adl_metaMusicCopyright(struct ADL_MIDIPlayer *device) if(!device) return ""; MidiPlayer *play = GET_MIDI_PLAYER(device); - if(!play) - return ""; + assert(play); return play->m_sequencer.getMusicCopyright().c_str(); #else ADL_UNUSED(device); @@ -838,8 +855,7 @@ ADLMIDI_EXPORT size_t adl_metaTrackTitleCount(struct ADL_MIDIPlayer *device) if(!device) return 0; MidiPlayer *play = GET_MIDI_PLAYER(device); - if(!play) - return 0; + assert(play); return play->m_sequencer.getTrackTitles().size(); #else ADL_UNUSED(device); @@ -853,6 +869,7 @@ ADLMIDI_EXPORT const char *adl_metaTrackTitle(struct ADL_MIDIPlayer *device, siz if(!device) return ""; MidiPlayer *play = GET_MIDI_PLAYER(device); + assert(play); const std::vector<std::string> &titles = play->m_sequencer.getTrackTitles(); if(index >= titles.size()) return "INVALID"; @@ -871,8 +888,7 @@ ADLMIDI_EXPORT size_t adl_metaMarkerCount(struct ADL_MIDIPlayer *device) if(!device) return 0; MidiPlayer *play = GET_MIDI_PLAYER(device); - if(!play) - return 0; + assert(play); return play->m_sequencer.getMarkers().size(); #else ADL_UNUSED(device); @@ -883,23 +899,32 @@ ADLMIDI_EXPORT size_t adl_metaMarkerCount(struct ADL_MIDIPlayer *device) ADLMIDI_EXPORT Adl_MarkerEntry adl_metaMarker(struct ADL_MIDIPlayer *device, size_t index) { struct Adl_MarkerEntry marker; + #ifndef ADLMIDI_DISABLE_MIDI_SEQUENCER - MidiPlayer *play = GET_MIDI_PLAYER(device); - const std::vector<MidiSequencer::MIDI_MarkerEntry> &markers = play->m_sequencer.getMarkers(); - if(!device || !play || (index >= markers.size())) + if(!device) { marker.label = "INVALID"; marker.pos_time = 0.0; marker.pos_ticks = 0; return marker; } - else + + MidiPlayer *play = GET_MIDI_PLAYER(device); + assert(play); + + const std::vector<MidiSequencer::MIDI_MarkerEntry> &markers = play->m_sequencer.getMarkers(); + if(index >= markers.size()) { - const MidiSequencer::MIDI_MarkerEntry &mk = markers[index]; - marker.label = mk.label.c_str(); - marker.pos_time = mk.pos_time; - marker.pos_ticks = (unsigned long)mk.pos_ticks; + marker.label = "INVALID"; + marker.pos_time = 0.0; + marker.pos_ticks = 0; + return marker; } + + const MidiSequencer::MIDI_MarkerEntry &mk = markers[index]; + marker.label = mk.label.c_str(); + marker.pos_time = mk.pos_time; + marker.pos_ticks = (unsigned long)mk.pos_ticks; #else ADL_UNUSED(device); ADL_UNUSED(index); @@ -916,6 +941,7 @@ ADLMIDI_EXPORT void adl_setRawEventHook(struct ADL_MIDIPlayer *device, ADL_RawEv if(!device) return; MidiPlayer *play = GET_MIDI_PLAYER(device); + assert(play); play->m_sequencerInterface.onEvent = rawEventHook; play->m_sequencerInterface.onEvent_userData = userData; #else @@ -931,6 +957,7 @@ ADLMIDI_EXPORT void adl_setNoteHook(struct ADL_MIDIPlayer *device, ADL_NoteHook if(!device) return; MidiPlayer *play = GET_MIDI_PLAYER(device); + assert(play); play->hooks.onNote = noteHook; play->hooks.onNote_userData = userData; } @@ -941,6 +968,7 @@ ADLMIDI_EXPORT void adl_setDebugMessageHook(struct ADL_MIDIPlayer *device, ADL_D if(!device) return; MidiPlayer *play = GET_MIDI_PLAYER(device); + assert(play); play->hooks.onDebugMessage = debugMessageHook; play->hooks.onDebugMessage_userData = userData; #ifndef ADLMIDI_DISABLE_MIDI_SEQUENCER @@ -1165,6 +1193,7 @@ ADLMIDI_EXPORT int adl_playFormat(ADL_MIDIPlayer *device, int sampleCount, return 0; MidiPlayer *player = GET_MIDI_PLAYER(device); + assert(player); MidiPlayer::Setup &setup = player->m_setup; ssize_t gotten_len = 0; @@ -1271,6 +1300,7 @@ ADLMIDI_EXPORT int adl_generateFormat(struct ADL_MIDIPlayer *device, int sampleC return 0; MidiPlayer *player = GET_MIDI_PLAYER(device); + assert(player); MidiPlayer::Setup &setup = player->m_setup; ssize_t gotten_len = 0; @@ -1331,8 +1361,7 @@ ADLMIDI_EXPORT double adl_tickEvents(struct ADL_MIDIPlayer *device, double secon if(!device) return -1.0; MidiPlayer *play = GET_MIDI_PLAYER(device); - if(!play) - return -1.0; + assert(play); return play->Tick(seconds, granulality); #else ADL_UNUSED(device); @@ -1348,8 +1377,7 @@ ADLMIDI_EXPORT int adl_atEnd(struct ADL_MIDIPlayer *device) if(!device) return 1; MidiPlayer *play = GET_MIDI_PLAYER(device); - if(!play) - return 1; + assert(play); return (int)play->m_sequencer.positionAtEnd(); #else ADL_UNUSED(device); @@ -1363,8 +1391,7 @@ ADLMIDI_EXPORT size_t adl_trackCount(struct ADL_MIDIPlayer *device) if(!device) return 0; MidiPlayer *play = GET_MIDI_PLAYER(device); - if(!play) - return 0; + assert(play); return play->m_sequencer.getTrackCount(); #else ADL_UNUSED(device); @@ -1378,8 +1405,7 @@ ADLMIDI_EXPORT int adl_setTrackOptions(struct ADL_MIDIPlayer *device, size_t tra if(!device) return -1; MidiPlayer *play = GET_MIDI_PLAYER(device); - if(!play) - return -1; + assert(play); MidiSequencer &seq = play->m_sequencer; unsigned enableFlag = trackOptions & 3; @@ -1420,8 +1446,7 @@ ADLMIDI_EXPORT int adl_setTriggerHandler(struct ADL_MIDIPlayer *device, ADL_Trig if(!device) return -1; MidiPlayer *play = GET_MIDI_PLAYER(device); - if(!play) - return -1; + assert(play); MidiSequencer &seq = play->m_sequencer; seq.setTriggerHandler(handler, userData); return 0; @@ -1438,8 +1463,7 @@ ADLMIDI_EXPORT void adl_panic(struct ADL_MIDIPlayer *device) if(!device) return; MidiPlayer *play = GET_MIDI_PLAYER(device); - if(!play) - return; + assert(play); play->realTime_panic(); } @@ -1448,8 +1472,7 @@ ADLMIDI_EXPORT void adl_rt_resetState(struct ADL_MIDIPlayer *device) if(!device) return; MidiPlayer *play = GET_MIDI_PLAYER(device); - if(!play) - return; + assert(play); play->realTime_ResetState(); } @@ -1458,8 +1481,7 @@ ADLMIDI_EXPORT int adl_rt_noteOn(struct ADL_MIDIPlayer *device, ADL_UInt8 channe if(!device) return 0; MidiPlayer *play = GET_MIDI_PLAYER(device); - if(!play) - return 0; + assert(play); return (int)play->realTime_NoteOn(channel, note, velocity); } @@ -1468,8 +1490,7 @@ ADLMIDI_EXPORT void adl_rt_noteOff(struct ADL_MIDIPlayer *device, ADL_UInt8 chan if(!device) return; MidiPlayer *play = GET_MIDI_PLAYER(device); - if(!play) - return; + assert(play); play->realTime_NoteOff(channel, note); } @@ -1478,8 +1499,7 @@ ADLMIDI_EXPORT void adl_rt_noteAfterTouch(struct ADL_MIDIPlayer *device, ADL_UIn if(!device) return; MidiPlayer *play = GET_MIDI_PLAYER(device); - if(!play) - return; + assert(play); play->realTime_NoteAfterTouch(channel, note, atVal); } @@ -1488,8 +1508,7 @@ ADLMIDI_EXPORT void adl_rt_channelAfterTouch(struct ADL_MIDIPlayer *device, ADL_ if(!device) return; MidiPlayer *play = GET_MIDI_PLAYER(device); - if(!play) - return; + assert(play); play->realTime_ChannelAfterTouch(channel, atVal); } @@ -1498,8 +1517,7 @@ ADLMIDI_EXPORT void adl_rt_controllerChange(struct ADL_MIDIPlayer *device, ADL_U if(!device) return; MidiPlayer *play = GET_MIDI_PLAYER(device); - if(!play) - return; + assert(play); play->realTime_Controller(channel, type, value); } @@ -1508,8 +1526,7 @@ ADLMIDI_EXPORT void adl_rt_patchChange(struct ADL_MIDIPlayer *device, ADL_UInt8 if(!device) return; MidiPlayer *play = GET_MIDI_PLAYER(device); - if(!play) - return; + assert(play); play->realTime_PatchChange(channel, patch); } @@ -1518,8 +1535,7 @@ ADLMIDI_EXPORT void adl_rt_pitchBend(struct ADL_MIDIPlayer *device, ADL_UInt8 ch if(!device) return; MidiPlayer *play = GET_MIDI_PLAYER(device); - if(!play) - return; + assert(play); play->realTime_PitchBend(channel, pitch); } @@ -1528,8 +1544,7 @@ ADLMIDI_EXPORT void adl_rt_pitchBendML(struct ADL_MIDIPlayer *device, ADL_UInt8 if(!device) return; MidiPlayer *play = GET_MIDI_PLAYER(device); - if(!play) - return; + assert(play); play->realTime_PitchBend(channel, msb, lsb); } @@ -1538,8 +1553,7 @@ ADLMIDI_EXPORT void adl_rt_bankChangeLSB(struct ADL_MIDIPlayer *device, ADL_UInt if(!device) return; MidiPlayer *play = GET_MIDI_PLAYER(device); - if(!play) - return; + assert(play); play->realTime_BankChangeLSB(channel, lsb); } @@ -1548,8 +1562,7 @@ ADLMIDI_EXPORT void adl_rt_bankChangeMSB(struct ADL_MIDIPlayer *device, ADL_UInt if(!device) return; MidiPlayer *play = GET_MIDI_PLAYER(device); - if(!play) - return; + assert(play); play->realTime_BankChangeMSB(channel, msb); } @@ -1558,8 +1571,7 @@ ADLMIDI_EXPORT void adl_rt_bankChange(struct ADL_MIDIPlayer *device, ADL_UInt8 c if(!device) return; MidiPlayer *play = GET_MIDI_PLAYER(device); - if(!play) - return; + assert(play); play->realTime_BankChange(channel, (uint16_t)bank); } @@ -1568,7 +1580,6 @@ ADLMIDI_EXPORT int adl_rt_systemExclusive(struct ADL_MIDIPlayer *device, const A if(!device) return -1; MidiPlayer *play = GET_MIDI_PLAYER(device); - if(!play) - return -1; + assert(play); return play->realTime_SysEx(msg, size); } diff --git a/src/adlmidi_midiplay.cpp b/src/adlmidi_midiplay.cpp index ded81b3..42b5b01 100644 --- a/src/adlmidi_midiplay.cpp +++ b/src/adlmidi_midiplay.cpp @@ -100,19 +100,19 @@ inline bool isXgPercChannel(uint8_t msb, uint8_t lsb) return (msb == 0x7E || msb == 0x7F) && (lsb == 0); } -void MIDIplay::AdlChannel::addAge(int64_t ms) +void MIDIplay::AdlChannel::addAge(int64_t us) { - const int64_t neg = static_cast<int64_t>(-0x1FFFFFFFl); + const int64_t neg = 1000 * static_cast<int64_t>(-0x1FFFFFFFll); if(users_empty()) - koff_time_until_neglible = std::max(int64_t(koff_time_until_neglible - ms), neg); + koff_time_until_neglible_us = std::max(koff_time_until_neglible_us - us, neg); else { - koff_time_until_neglible = 0; + koff_time_until_neglible_us = 0; for(LocationData *i = users_first; i; i = i->next) { if(!i->fixed_sustain) - i->kon_time_until_neglible = std::max(i->kon_time_until_neglible - ms, neg); - i->vibdelay += ms; + i->kon_time_until_neglible_us = std::max(i->kon_time_until_neglible_us - us, neg); + i->vibdelay_us += us; } } } @@ -233,7 +233,7 @@ void MIDIplay::resetMIDI() void MIDIplay::TickIterators(double s) { for(uint16_t c = 0; c < m_synth.m_numChannels; ++c) - m_chipChannels[c].addAge(static_cast<int64_t>(s * 1000.0)); + m_chipChannels[c].addAge(static_cast<int64_t>(s * 1e6)); updateVibrato(s); updateArpeggio(s); #if !defined(ADLMIDI_AUDIO_TICK_HANDLER) @@ -578,6 +578,15 @@ bool MIDIplay::realTime_NoteOn(uint8_t channel, uint8_t note, uint8_t velocity) } noteUpdate(channel, ir.first, Upd_All | Upd_Patch); + + for(unsigned ccount = 0; ccount < MIDIchannel::NoteInfo::MaxNumPhysChans; ++ccount) + { + int32_t c = adlchannel[ccount]; + if(c < 0) + continue; + m_chipChannels[c].addAge(0); + } + return true; } @@ -1113,9 +1122,9 @@ void MIDIplay::noteUpdate(size_t midCh, if(d) // inserts if necessary { d->sustained = AdlChannel::LocationData::Sustain_None; - d->vibdelay = 0; + d->vibdelay_us = 0; d->fixed_sustain = (ains.ms_sound_kon == static_cast<uint16_t>(adlNoteOnMaxTime)); - d->kon_time_until_neglible = ains.ms_sound_kon; + d->kon_time_until_neglible_us = 1000 * ains.ms_sound_kon; d->ins = ins; } } @@ -1124,7 +1133,8 @@ void MIDIplay::noteUpdate(size_t midCh, for(unsigned ccount = 0; ccount < info.chip_channels_count; ccount++) { const MIDIchannel::NoteInfo::Phys &ins = info.chip_channels[ccount]; - uint16_t c = ins.chip_chan; + uint16_t c = ins.chip_chan; + uint16_t c_slave = info.chip_channels[1].chip_chan; if(select_adlchn >= 0 && c != select_adlchn) continue; @@ -1147,11 +1157,11 @@ void MIDIplay::noteUpdate(size_t midCh, if(props_mask & Upd_Mute) // Mute the note { m_synth.touchNote(c, 0); - m_chipChannels[c].koff_time_until_neglible = 0; + m_chipChannels[c].koff_time_until_neglible_us = 0; } else { - m_chipChannels[c].koff_time_until_neglible = ains.ms_sound_koff; + m_chipChannels[c].koff_time_until_neglible_us = 1000 * ains.ms_sound_koff; } } } @@ -1279,11 +1289,11 @@ void MIDIplay::noteUpdate(size_t midCh, phase = ains.voice2_fine_tune;//0.125; // Detune the note slightly (this is what Doom does) } - if(vibrato && (!d || d->vibdelay >= m_midiChannels[midCh].vibdelay)) + if(vibrato && (!d || d->vibdelay_us >= m_midiChannels[midCh].vibdelay_us)) bend += static_cast<double>(vibrato) * m_midiChannels[midCh].vibdepth * std::sin(m_midiChannels[midCh].vibpos); #define BEND_COEFFICIENT 172.4387 - m_synth.noteOn(c, BEND_COEFFICIENT * std::exp(0.057762265 * (currentTone + bend + phase))); + m_synth.noteOn(c, c_slave, BEND_COEFFICIENT * std::exp(0.057762265 * (currentTone + bend + phase))); #undef BEND_COEFFICIENT if(hooks.onNote) hooks.onNote(hooks.onNote_userData, c, noteTone, midiins, vol, midibend); @@ -1321,7 +1331,8 @@ void MIDIplay::setErrorString(const std::string &err) int64_t MIDIplay::calculateChipChannelGoodness(size_t c, const MIDIchannel::NoteInfo::Phys &ins) const { - int64_t s = (m_synth.m_musicMode != OPL3::MODE_CMF) ? -m_chipChannels[c].koff_time_until_neglible : 0; + int64_t koff_ms = m_chipChannels[c].koff_time_until_neglible_us / 1000; + int64_t s = (m_synth.m_musicMode != OPL3::MODE_CMF) ? -koff_ms : 0; // Same midi-instrument = some stability //if(c == MidCh) s += 4; @@ -1329,10 +1340,9 @@ int64_t MIDIplay::calculateChipChannelGoodness(size_t c, const MIDIchannel::Note { s -= 4000; - if(j->sustained == AdlChannel::LocationData::Sustain_None) - s -= j->kon_time_until_neglible; - else - s -= (j->kon_time_until_neglible / 2); + int64_t kon_ms = j->kon_time_until_neglible_us / 1000; + s -= (j->sustained == AdlChannel::LocationData::Sustain_None) ? + kon_ms : (kon_ms / 2); MIDIchannel::activenoteiterator k = const_cast<MIDIchannel &>(m_midiChannels[j->loc.MidCh]).activenotes_find(j->loc.note); @@ -1344,8 +1354,8 @@ int64_t MIDIplay::calculateChipChannelGoodness(size_t c, const MIDIchannel::Note { s += 300; // Arpeggio candidate = even better - if(j->vibdelay < 70 - || j->kon_time_until_neglible > 20000) + if(j->vibdelay_us < 70000 + || j->kon_time_until_neglible_us > 20000000) s += 0; } @@ -1376,7 +1386,7 @@ int64_t MIDIplay::calculateChipChannelGoodness(size_t c, const MIDIchannel::Note for(AdlChannel::LocationData *m = m_chipChannels[c2].users_first; m; m = m->next) { if(m->sustained != AdlChannel::LocationData::Sustain_None) continue; - if(m->vibdelay >= 200) continue; + if(m->vibdelay_us >= 200000) continue; if(m->ins != j->ins) continue; n_evacuation_stations += 1; } @@ -1407,8 +1417,8 @@ void MIDIplay::prepareChipChannelForNewNote(size_t c, const MIDIchannel::NoteInf (m_midiChannels[j->loc.MidCh].activenotes_ensure_find(j->loc.note)); // Check if we can do arpeggio. - if((j->vibdelay < 70 - || j->kon_time_until_neglible > 20000) + if((j->vibdelay_us < 70000 + || j->kon_time_until_neglible_us > 20000000) && j->ins == ins) { // Do arpeggio together with this note. @@ -1458,8 +1468,8 @@ void MIDIplay::killOrEvacuate(size_t from_channel, for(AdlChannel::LocationData *m = adlch.users_first; m; m = m->next) { - if(m->vibdelay >= 200 - && m->kon_time_until_neglible < 10000) continue; + if(m->vibdelay_us >= 200000 + && m->kon_time_until_neglible_us < 10000000) continue; if(m->ins != j->ins) continue; if(hooks.onNote) @@ -1590,13 +1600,13 @@ void MIDIplay::setRPN(size_t midCh, unsigned value, bool MSB) case 0x0109 + 1*0x10000 + 1*0x20000: if((m_synthMode & Mode_XG) != 0) // Vibrato depth { - m_midiChannels[midCh].vibdepth = ((value - 64) * 0.15) * 0.01; + m_midiChannels[midCh].vibdepth = (((int)value - 64) * 0.15) * 0.01; } break; case 0x010A + 1*0x10000 + 1*0x20000: if((m_synthMode & Mode_XG) != 0) // Vibrato delay in millisecons { - m_midiChannels[midCh].vibdelay = value ? int64_t(0.2092 * std::exp(0.0795 * (double)value)) : 0; + m_midiChannels[midCh].vibdelay_us = value ? int64_t(209.2 * std::exp(0.0795 * (double)value)) : 0; } break; default:/* UI.PrintLn("%s %04X <- %d (%cSB) (ch %u)", @@ -1702,7 +1712,7 @@ retry_arpeggio: if(i->sustained == AdlChannel::LocationData::Sustain_None) { - if(i->kon_time_until_neglible <= 0l) + if(i->kon_time_until_neglible_us <= 0) { noteUpdate( i->loc.MidCh, @@ -1920,7 +1930,7 @@ ADLMIDI_EXPORT void AdlInstrumentTester::DoNote(int note) opl->setPatch(static_cast<size_t>(adlchannel[c]), ains.adl[c]); opl->touchNote(static_cast<size_t>(adlchannel[c]), 63); opl->setPan(static_cast<size_t>(adlchannel[c]), 0x30); - opl->noteOn(static_cast<size_t>(adlchannel[c]), hertz); + opl->noteOn(static_cast<size_t>(adlchannel[c]), static_cast<size_t>(adlchannel[1]), hertz); } #else ADL_UNUSED(note); diff --git a/src/adlmidi_opl3.cpp b/src/adlmidi_opl3.cpp index 94602ba..e486dd6 100644 --- a/src/adlmidi_opl3.cpp +++ b/src/adlmidi_opl3.cpp @@ -168,6 +168,12 @@ OPL3::OPL3() : m_musicMode(MODE_MIDI), m_volumeScale(VOLUME_Generic) { + m_insBankSetup.volumeModel = OPL3::VOLUME_Generic; + m_insBankSetup.deepTremolo = false; + m_insBankSetup.deepVibrato = false; + m_insBankSetup.adLibPercussions = false; + m_insBankSetup.scaleModulators = false; + #ifdef DISABLE_EMBEDDED_BANKS m_embeddedBank = CustomBankTag; #else @@ -263,36 +269,85 @@ void OPL3::noteOff(size_t c) writeRegI(chip, 0xB0 + g_channelsMap[cc], m_keyBlockFNumCache[c] & 0xDF); } -void OPL3::noteOn(size_t c, double hertz) // Hertz range: 0..131071 +void OPL3::noteOn(size_t c1, size_t c2, double hertz) // Hertz range: 0..131071 { - size_t chip = c / 23, cc = c % 23; - uint32_t x = 0x2000; + size_t chip = c1 / 23, cc1 = c1 % 23, cc2 = c2 % 23; + uint32_t octave = 0, ftone = 0, mul_offset = 0; - if(hertz < 0 || hertz > 131071) // Avoid infinite loop + if(hertz < 0) return; - while(hertz >= 1023.5) + //Basic range until max of octaves reaching + while((hertz >= 1023.5) && (octave < 0x1C00)) + { + hertz /= 2.0; // Calculate octave + octave += 0x400; + } + //Extended range, rely on frequency multiplication increment + while(hertz >= 1022.75) { hertz /= 2.0; // Calculate octave - x += 0x400; + mul_offset++; } - x += static_cast<uint32_t>(hertz + 0.5); - uint32_t chn = g_channelsMap[cc]; + ftone = octave + static_cast<uint32_t>(hertz + 0.5); + uint32_t chn = g_channelsMap[cc1]; + const adldata &patch1 = m_insCache[c1]; + const adldata &patch2 = m_insCache[c2 < m_insCache.size() ? c2 : 0]; - if(cc >= 18) + if(cc1 < 18) { - m_regBD[chip ] |= (0x10 >> (cc - 18)); - writeRegI(chip , 0x0BD, m_regBD[chip ]); - x &= ~0x2000u; - //x |= 0x800; // for test + ftone += 0x2000u; /* Key-ON [KON] */ + + const bool natural_4op = (m_channelCategory[c1] == ChanCat_4op_Master); + const size_t opsCount = natural_4op ? 4 : 2; + const uint16_t op_addr[4] = + { + g_operatorsMap[cc1 * 2 + 0], g_operatorsMap[cc1 * 2 + 1], + g_operatorsMap[cc2 * 2 + 0], g_operatorsMap[cc2 * 2 + 1] + }; + const uint32_t ops[4] = + { + patch1.modulator_E862 & 0xFF, + patch1.carrier_E862 & 0xFF, + patch2.modulator_E862 & 0xFF, + patch2.carrier_E862 & 0xFF + }; + + for(size_t op = 0; op < opsCount; op++) + { + if((op > 0) && (op_addr[op] == 0xFFF)) + break; + if(mul_offset > 0) + { + uint32_t dt = ops[op] & 0xF0; + uint32_t mul = ops[op] & 0x0F; + if((mul + mul_offset) > 0x0F) + { + mul_offset = 0; + mul = 0x0F; + } + writeRegI(chip, 0x20 + op_addr[op], (dt | (mul + mul_offset)) & 0xFF); + } + else + { + writeRegI(chip, 0x20 + op_addr[op], ops[op] & 0xFF); + } + } } if(chn != 0xFFF) { - writeRegI(chip , 0xA0 + chn, (x & 0xFF)); - writeRegI(chip , 0xB0 + chn, (x >> 8)); - m_keyBlockFNumCache[c] = (x >> 8); + writeRegI(chip , 0xA0 + chn, (ftone & 0xFF)); + writeRegI(chip , 0xB0 + chn, (ftone >> 8)); + m_keyBlockFNumCache[c1] = (ftone >> 8); + } + + if(cc1 >= 18) + { + m_regBD[chip ] |= (0x10 >> (cc1 - 18)); + writeRegI(chip , 0x0BD, m_regBD[chip ]); + //x |= 0x800; // for test } } @@ -308,15 +363,17 @@ void OPL3::touchNote(size_t c, uint8_t volume, uint8_t brightness) uint8_t x = adli.modulator_40, y = adli.carrier_40; uint32_t mode = 1; // 2-op AM - if(m_channelCategory[c] == 0 || m_channelCategory[c] == 3) + if(m_channelCategory[c] == ChanCat_Regular || + m_channelCategory[c] == ChanCat_Rhythm_Bass) { mode = adli.feedconn & 1; // 2-op FM or 2-op AM } - else if(m_channelCategory[c] == 1 || m_channelCategory[c] == 2) + else if(m_channelCategory[c] == ChanCat_4op_Master || + m_channelCategory[c] == ChanCat_4op_Slave) { const adldata *i0, *i1; - if(m_channelCategory[c] == 1) + if(m_channelCategory[c] == ChanCat_4op_Master) { i0 = &adli; i1 = &m_insCache[c + 3]; @@ -448,31 +505,43 @@ void OPL3::silenceAll() // Silence all OPL channels. void OPL3::updateChannelCategories() { - uint32_t fours = m_numFourOps; + const uint32_t fours = m_numFourOps; - for(size_t chip = 0; chip < m_numChips; ++chip) + for(uint32_t chip = 0, fours_left = fours; chip < m_numChips; ++chip) { m_regBD[chip] = (m_deepTremoloMode * 0x80 + m_deepVibratoMode * 0x40 + m_rhythmMode * 0x20); writeRegI(chip, 0x0BD, m_regBD[chip]); - uint32_t fours_this_chip = std::min(fours, static_cast<uint32_t>(6u)); + uint32_t fours_this_chip = std::min(fours_left, static_cast<uint32_t>(6u)); writeRegI(chip, 0x104, (1 << fours_this_chip) - 1); - fours -= fours_this_chip; + fours_left -= fours_this_chip; } - // Mark all channels that are reserved for four-operator function - if(m_rhythmMode == 1) + if(!m_rhythmMode) { - for(size_t a = 0; a < m_numChips; ++a) + for(size_t a = 0, n = m_numChips; a < n; ++a) { - for(size_t b = 0; b < 5; ++b) - m_channelCategory[a * 23 + 18 + b] = static_cast<char>(b + 3); - for(size_t b = 0; b < 3; ++b) - m_channelCategory[a * 23 + 6 + b] = ChanCat_Rhythm_Slave; + for(size_t b = 0; b < 23; ++b) + { + m_channelCategory[a * 23 + b] = + (b >= 18) ? ChanCat_Rhythm_Slave : ChanCat_Regular; + } + } + } + else + { + for(size_t a = 0, n = m_numChips; a < n; ++a) + { + for(size_t b = 0; b < 23; ++b) + { + m_channelCategory[a * 23 + b] = + (b >= 18) ? static_cast<ChanCat>(ChanCat_Rhythm_Bass + (b - 18)) : + (b >= 6 && b < 9) ? ChanCat_Rhythm_Slave : ChanCat_Regular; + } } } - size_t nextfour = 0; - for(size_t a = 0; a < m_numFourOps; ++a) + uint32_t nextfour = 0; + for(uint32_t a = 0; a < fours; ++a) { m_channelCategory[nextfour] = ChanCat_4op_Master; m_channelCategory[nextfour + 3] = ChanCat_4op_Slave; @@ -562,6 +631,24 @@ void OPL3::setVolumeScaleModel(ADLMIDI_VolumeModels volumeModel) } } +ADLMIDI_VolumeModels OPL3::getVolumeScaleModel() +{ + switch(m_volumeScale) + { + default: + case OPL3::VOLUME_Generic: + return ADLMIDI_VolumeModel_Generic; + case OPL3::VOLUME_NATIVE: + return ADLMIDI_VolumeModel_NativeOPL3; + case OPL3::VOLUME_DMX: + return ADLMIDI_VolumeModel_DMX; + case OPL3::VOLUME_APOGEE: + return ADLMIDI_VolumeModel_APOGEE; + case OPL3::VOLUME_9X: + return ADLMIDI_VolumeModel_9X; + } +} + #ifndef ADLMIDI_HW_OPL void OPL3::clearChips() { diff --git a/src/adlmidi_private.hpp b/src/adlmidi_private.hpp index f719f01..c5b70ee 100644 --- a/src/adlmidi_private.hpp +++ b/src/adlmidi_private.hpp @@ -82,6 +82,7 @@ typedef int32_t ssize_t; //#else #include <map> #include <set> +#include <new> // nothrow //#endif #include <cstdlib> #include <cstring> @@ -399,10 +400,11 @@ public: /** * @brief On the note in specified chip channel with specified frequency of the tone - * @param c Channel of chip (Emulated chip choosing by next formula: [c = ch + (chipId * 23)]) + * @param c1 Channel of chip [or master 4-op channel] (Emulated chip choosing by next formula: [c = ch + (chipId * 23)]) + * @param c2 Slave 4-op channel of chip, unused for 2op (Emulated chip choosing by next formula: [c = ch + (chipId * 23)]) * @param hertz Frequency of the tone in hertzes */ - void noteOn(size_t c, double hertz); + void noteOn(size_t c1, size_t c2, double hertz); /** * @brief Change setup of instrument in specified chip channel @@ -447,6 +449,11 @@ public: */ void setVolumeScaleModel(ADLMIDI_VolumeModels volumeModel); + /** + * @brief Get the volume scaling model + */ + ADLMIDI_VolumeModels getVolumeScaleModel(); + #ifndef ADLMIDI_HW_OPL /** * @brief Clean up all running emulated chip instances @@ -558,7 +565,7 @@ public: //! Vibrato depth value vibdepth; //! Vibrato delay time - int64_t vibdelay; + int64_t vibdelay_us; //! Last LSB part of RPN value received uint8_t lastlrpn, //! Last MSB poart of RPN value received @@ -801,7 +808,7 @@ public: noteAfterTouchInUse = false; vibspeed = 2 * 3.141592653 * 5.0; vibdepth = 0.5 / 127; - vibdelay = 0; + vibdelay_us = 0; panning = 64; portamento = 0; portamentoEnable = false; @@ -866,12 +873,12 @@ public: //! Has fixed sustain, don't iterate "on" timeout bool fixed_sustain; //! Timeout until note will be allowed to be killed by channel manager while it is on - int64_t kon_time_until_neglible; - int64_t vibdelay; + int64_t kon_time_until_neglible_us; + int64_t vibdelay_us; }; //! Time left until sounding will be muted after key off - int64_t koff_time_until_neglible; + int64_t koff_time_until_neglible_us; enum { users_max = 128 }; LocationData *users_first, *users_free_cells; @@ -888,12 +895,12 @@ public: void users_assign(const LocationData *users, size_t count); // For channel allocation: - AdlChannel(): koff_time_until_neglible(0) + AdlChannel(): koff_time_until_neglible_us(0) { users_clear(); } - AdlChannel(const AdlChannel &oth): koff_time_until_neglible(oth.koff_time_until_neglible) + AdlChannel(const AdlChannel &oth): koff_time_until_neglible_us(oth.koff_time_until_neglible_us) { if(oth.users_first) { @@ -906,16 +913,16 @@ public: AdlChannel &operator=(const AdlChannel &oth) { - koff_time_until_neglible = oth.koff_time_until_neglible; + koff_time_until_neglible_us = oth.koff_time_until_neglible_us; users_assign(oth.users_first, oth.users_size); return *this; } /** - * @brief Increases age of active note in milliseconds time - * @param ms Amount time in milliseconds + * @brief Increases age of active note in microseconds time + * @param us Amount time in microseconds */ - void addAge(int64_t ms); + void addAge(int64_t us); }; #ifndef ADLMIDI_DISABLE_MIDI_SEQUENCER diff --git a/src/chips/dosbox/dbopl.cpp b/src/chips/dosbox/dbopl.cpp index 4eb79f8..2d31708 100644 --- a/src/chips/dosbox/dbopl.cpp +++ b/src/chips/dosbox/dbopl.cpp @@ -37,6 +37,7 @@ #include <math.h> #include <stdlib.h> #include <string.h> +#include <vector> #include "dbopl.h" #if defined(__GNUC__) && __GNUC__ > 3 @@ -70,6 +71,36 @@ #define PI 3.14159265358979323846 #endif +struct NoCopy { + NoCopy() {} +private: + NoCopy(const NoCopy &); + NoCopy &operator=(const NoCopy &); +}; +#if !defined(_WIN32) +#include <pthread.h> +struct Mutex : NoCopy { + Mutex() : m(PTHREAD_MUTEX_INITIALIZER) {} + void lock() { pthread_mutex_lock(&m); } + void unlock() { pthread_mutex_unlock(&m); } + pthread_mutex_t m; +}; +#else +#include <windows.h> +struct Mutex : NoCopy { + Mutex() { InitializeCriticalSection(&m); } + ~Mutex() { DeleteCriticalSection(&m); } + void lock() { EnterCriticalSection(&m); } + void unlock() { LeaveCriticalSection(&m); } + CRITICAL_SECTION m; +}; +#endif +struct MutexHolder : NoCopy { + explicit MutexHolder(Mutex &m) : m(m) { m.lock(); } + ~MutexHolder() { m.unlock(); } + Mutex &m; +}; + namespace DBOPL { #define OPLRATE ((double)(14318180.0 / 288.0)) @@ -222,24 +253,24 @@ static const Bit8u KslShiftTable[4] = { // Pan law table static const Bit16u PanLawTable[] = { - 65535, 65529, 65514, 65489, 65454, 65409, 65354, 65289, - 65214, 65129, 65034, 64929, 64814, 64689, 64554, 64410, - 64255, 64091, 63917, 63733, 63540, 63336, 63123, 62901, - 62668, 62426, 62175, 61914, 61644, 61364, 61075, 60776, - 60468, 60151, 59825, 59489, 59145, 58791, 58428, 58057, - 57676, 57287, 56889, 56482, 56067, 55643, 55211, 54770, - 54320, 53863, 53397, 52923, 52441, 51951, 51453, 50947, - 50433, 49912, 49383, 48846, 48302, 47750, 47191, - 46340, /* Center left */ - 46340, /* Center right */ - 45472, 44885, 44291, 43690, 43083, 42469, 41848, 41221, - 40588, 39948, 39303, 38651, 37994, 37330, 36661, 35986, - 35306, 34621, 33930, 33234, 32533, 31827, 31116, 30400, - 29680, 28955, 28225, 27492, 26754, 26012, 25266, 24516, - 23762, 23005, 22244, 21480, 20713, 19942, 19169, 18392, - 17613, 16831, 16046, 15259, 14469, 13678, 12884, 12088, - 11291, 10492, 9691, 8888, 8085, 7280, 6473, 5666, - 4858, 4050, 3240, 2431, 1620, 810, 0 + 65535, 65529, 65514, 65489, 65454, 65409, 65354, 65289, + 65214, 65129, 65034, 64929, 64814, 64689, 64554, 64410, + 64255, 64091, 63917, 63733, 63540, 63336, 63123, 62901, + 62668, 62426, 62175, 61914, 61644, 61364, 61075, 60776, + 60468, 60151, 59825, 59489, 59145, 58791, 58428, 58057, + 57676, 57287, 56889, 56482, 56067, 55643, 55211, 54770, + 54320, 53863, 53397, 52923, 52441, 51951, 51453, 50947, + 50433, 49912, 49383, 48846, 48302, 47750, 47191, + 46340, /* Center left */ + 46340, /* Center right */ + 45472, 44885, 44291, 43690, 43083, 42469, 41848, 41221, + 40588, 39948, 39303, 38651, 37994, 37330, 36661, 35986, + 35306, 34621, 33930, 33234, 32533, 31827, 31116, 30400, + 29680, 28955, 28225, 27492, 26754, 26012, 25266, 24516, + 23762, 23005, 22244, 21480, 20713, 19942, 19169, 18392, + 17613, 16831, 16046, 15259, 14469, 13678, 12884, 12088, + 11291, 10492, 9691, 8888, 8085, 7280, 6473, 5666, + 4858, 4050, 3240, 2431, 1620, 810, 0 }; //Generate a table index and table shift value using input value from a selected rate @@ -465,7 +496,7 @@ Bits Operator::TemplateVolume( ) { return vol; } //In sustain phase, but not sustaining, do regular release - /* fall through */ + /* fall through */ case RELEASE: vol += RateForward( releaseAdd );; if ( GCC_UNLIKELY(vol >= ENV_MAX) ) { @@ -1294,21 +1325,40 @@ void Chip::GenerateBlock3_Mix( Bitu total, Bit32s* output ) { } } -void Chip::Setup( Bit32u rate ) { +struct CacheEntry { + Bit32u rate; + Bit32u freqMul[16]; + Bit32u linearRates[76]; + Bit32u attackRates[76]; +}; +static std::vector<CacheEntry> cache; +static Mutex cacheMutex; + +static const CacheEntry *CacheLookupRateDependent( Bit32u rate ) +{ + for ( size_t i = 0, n = cache.size(); i < n; ++i ) { + if (cache[i].rate == rate) + return &cache[i]; + } + return NULL; +} + +static const CacheEntry &ComputeRateDependent( Bit32u rate ) +{ + { + MutexHolder lock( cacheMutex ); + if (const CacheEntry *entry = CacheLookupRateDependent( rate )) + return *entry; + } + double original = OPLRATE; -// double original = rate; double scale = original / (double)rate; - //Noise counter is run at the same precision as general waves - noiseAdd = (Bit32u)( 0.5 + scale * ( 1 << LFO_SH ) ); - noiseCounter = 0; - noiseValue = 1; //Make sure it triggers the noise xor the first time - //The low frequency oscillation counter - //Every time his overflows vibrato and tremoloindex are increased - lfoAdd = (Bit32u)( 0.5 + scale * ( 1 << LFO_SH ) ); - lfoCounter = 0; - vibratoIndex = 0; - tremoloIndex = 0; + CacheEntry entry; + entry.rate = rate; + Bit32u *freqMul = entry.freqMul; + Bit32u *linearRates = entry.linearRates; + Bit32u *attackRates = entry.attackRates; //With higher octave this gets shifted up //-1 since the freqCreateTable = *2 @@ -1330,6 +1380,7 @@ void Chip::Setup( Bit32u rate ) { EnvelopeSelect( i, index, shift ); linearRates[i] = (Bit32u)( scale * (EnvelopeIncreaseTable[ index ] << ( RATE_SH + ENV_EXTRA - shift - 3 ))); } + // Bit32s attackDiffs[62]; //Generate the best matching attack rate for ( Bit8u i = 0; i < 62; i++ ) { @@ -1382,6 +1433,36 @@ void Chip::Setup( Bit32u rate ) { //This should provide instant volume maximizing attackRates[i] = 8 << RATE_SH; } + + MutexHolder lock( cacheMutex ); + if (const CacheEntry *entry = CacheLookupRateDependent( rate )) + return *entry; + + cache.push_back(entry); + return cache.back(); +} + +void Chip::Setup( Bit32u rate ) { + double original = OPLRATE; +// double original = rate; + double scale = original / (double)rate; + + //Noise counter is run at the same precision as general waves + noiseAdd = (Bit32u)( 0.5 + scale * ( 1 << LFO_SH ) ); + noiseCounter = 0; + noiseValue = 1; //Make sure it triggers the noise xor the first time + //The low frequency oscillation counter + //Every time his overflows vibrato and tremoloindex are increased + lfoAdd = (Bit32u)( 0.5 + scale * ( 1 << LFO_SH ) ); + lfoCounter = 0; + vibratoIndex = 0; + tremoloIndex = 0; + + const CacheEntry &entry = ComputeRateDependent( rate ); + freqMul = entry.freqMul; + linearRates = entry.linearRates; + attackRates = entry.attackRates; + //Setup the channels with the correct four op flags //Channels are accessed through a table so they appear linear here chan[ 0].fourMask = 0x00 | ( 1 << 0 ); diff --git a/src/chips/dosbox/dbopl.h b/src/chips/dosbox/dbopl.h index 429735f..89d2019 100644 --- a/src/chips/dosbox/dbopl.h +++ b/src/chips/dosbox/dbopl.h @@ -227,11 +227,11 @@ struct Chip { Bit32u noiseValue; //Frequency scales for the different multiplications - Bit32u freqMul[16]; + const Bit32u *freqMul/*[16]*/; //Rates for decay and release for rate of this chip - Bit32u linearRates[76]; + const Bit32u *linearRates/*[76]*/; //Best match attack rates for the rate of this chip - Bit32u attackRates[76]; + const Bit32u *attackRates/*[76]*/; //18 channels with 2 operators each Channel chan[18]; diff --git a/src/chips/dosbox_opl3.cpp b/src/chips/dosbox_opl3.cpp index 37f5e9c..0b9501f 100644 --- a/src/chips/dosbox_opl3.cpp +++ b/src/chips/dosbox_opl3.cpp @@ -76,5 +76,5 @@ void DosBoxOPL3::nativeGenerateN(int16_t *output, size_t frames) const char *DosBoxOPL3::emulatorName() { - return "DosBox 0.74-r4111 OPL3"; + return "DOSBox 0.74-r4111 OPL3"; } diff --git a/src/cvt_xmi2mid.hpp b/src/cvt_xmi2mid.hpp index decb25c..e8d9dbf 100644 --- a/src/cvt_xmi2mid.hpp +++ b/src/cvt_xmi2mid.hpp @@ -640,7 +640,7 @@ static int xmi2mid_GetVLQ2(struct xmi2mid_xmi_ctx *ctx, uint32_t *quant) { int32_t data; *quant = 0; - for (i = 0; i < 4; i++) { + for (i = 0; xmi2mid_getsrcpos(ctx) != xmi2mid_getsrcsize(ctx); ++i) { data = xmi2mid_read1(ctx); if (data & 0x80) { xmi2mid_skipsrc(ctx, -1); diff --git a/src/midi_sequencer.hpp b/src/midi_sequencer.hpp index a8cbfac..54ceeea 100644 --- a/src/midi_sequencer.hpp +++ b/src/midi_sequencer.hpp @@ -315,11 +315,24 @@ public: Format_XMIDI }; + /** + * @brief Format of loop points implemented by CC events + */ + enum LoopFormat + { + Loop_Default, + Loop_RPGMaker = 1, + Loop_EMIDI, + Loop_HMI + }; + private: //! Music file format type. MIDI is default. FileFormat m_format; //! SMF format identifier. unsigned m_smfFormat; + //! Loop points format + LoopFormat m_loopFormat; //! Current position Position m_currentPosition; diff --git a/src/midi_sequencer_impl.hpp b/src/midi_sequencer_impl.hpp index 0fe6192..6d6b2d8 100644 --- a/src/midi_sequencer_impl.hpp +++ b/src/midi_sequencer_impl.hpp @@ -270,6 +270,7 @@ BW_MidiSequencer::BW_MidiSequencer() : m_interface(NULL), m_format(Format_MIDI), m_smfFormat(0), + m_loopFormat(Loop_Default), m_loopEnabled(false), m_fullSongTimeLength(0.0), m_postSongWaitDelay(1.0), @@ -399,6 +400,7 @@ void BW_MidiSequencer::buildSmfSetupReset(size_t trackCount) m_fullSongTimeLength = 0.0; m_loopStartTime = -1.0; m_loopEndTime = -1.0; + m_loopFormat = Loop_Default; m_trackDisable.clear(); m_trackSolo = ~(size_t)0; m_musTitle.clear(); @@ -614,6 +616,19 @@ bool BW_MidiSequencer::buildSmfTrackData(const std::vector<std::vector<uint8_t> } } +#ifdef ENABLE_END_SILENCE_SKIPPING + //Have track end on its own row? Clear any delay on the row before + if(event.subtype == MidiEvent::ST_ENDTRACK && evtPos.events.size() == 1) + { + if (!m_trackData[tk].empty()) + { + MidiTrackRow &previous = m_trackData[tk].back(); + previous.delay = 0; + previous.timeDelay = 0; + } + } +#endif + if((evtPos.delay > 0) || (event.subtype == MidiEvent::ST_ENDTRACK)) { evtPos.absPos = abs_position; @@ -1361,12 +1376,92 @@ BW_MidiSequencer::MidiEvent BW_MidiSequencer::parseEvent(const uint8_t **pptr, c if(evType == MidiEvent::T_CTRLCHANGE) { //111'th loopStart controller (RPG Maker and others) - if((m_format == Format_MIDI) && (evt.data[0] == 111)) + if(m_format == Format_MIDI) { - //Change event type to custom Loop Start event and clear data - evt.type = MidiEvent::T_SPECIAL; - evt.subtype = MidiEvent::ST_LOOPSTART; - evt.data.clear(); + switch(evt.data[0]) + { + case 110: + if(m_loopFormat == Loop_Default) + { + //Change event type to custom Loop Start event and clear data + evt.type = MidiEvent::T_SPECIAL; + evt.subtype = MidiEvent::ST_LOOPSTART; + evt.data.clear(); + m_loopFormat = Loop_HMI; + } + else if(m_loopFormat == Loop_HMI) + { + // Repeating of 110'th point is BAD practice, treat as EMIDI + m_loopFormat = Loop_EMIDI; + } + break; + + case 111: + if(m_loopFormat == Loop_HMI) + { + //Change event type to custom Loop End event and clear data + evt.type = MidiEvent::T_SPECIAL; + evt.subtype = MidiEvent::ST_LOOPEND; + evt.data.clear(); + } + else if(m_loopFormat != Loop_EMIDI) + { + // Change event type to custom Loop Start event and clear data + evt.type = MidiEvent::T_SPECIAL; + evt.subtype = MidiEvent::ST_LOOPSTART; + evt.data.clear(); + } + break; + + case 113: + if(m_loopFormat == Loop_EMIDI) + { + //EMIDI does using of CC113 with same purpose as CC7 + evt.data[0] = 7; + } + break; +#if 0 //WIP + case 116: + if(m_loopFormat == Loop_EMIDI) + { + evt.type = MidiEvent::T_SPECIAL; + evt.subtype = MidiEvent::ST_LOOPSTACK_BEGIN; + evt.data[0] = evt.data[1]; + evt.data.pop_back(); + + if(m_interface->onDebugMessage) + { + m_interface->onDebugMessage( + m_interface->onDebugMessage_userData, + "Stack EMIDI Loop Start at %d to %d level with %d loops", + m_loop.stackLevel, + m_loop.stackLevel + 1, + evt.data[0] + ); + } + } + break; + + case 117: // Next/Break Loop Controller + if(m_loopFormat == Loop_EMIDI) + { + evt.type = MidiEvent::T_SPECIAL; + evt.subtype = MidiEvent::ST_LOOPSTACK_END; + evt.data.clear(); + + if(m_interface->onDebugMessage) + { + m_interface->onDebugMessage( + m_interface->onDebugMessage_userData, + "Stack EMIDI Loop End at %d to %d level", + m_loop.stackLevel, + m_loop.stackLevel - 1 + ); + } + } + break; +#endif + } } if(m_format == Format_XMIDI) @@ -1502,7 +1597,7 @@ void BW_MidiSequencer::handleEvent(size_t track, const BW_MidiSequencer::MidiEve if(m_interface->onDebugMessage) m_interface->onDebugMessage(m_interface->onDebugMessage_userData, "Switching another device: %s", data); if(m_interface->rt_deviceSwitch) - m_interface->rt_deviceSwitch(m_interface->rtUserData, track, data, length); + m_interface->rt_deviceSwitch(m_interface->rtUserData, track, data, size_t(length)); return; } diff --git a/src/wopl/wopl_file.c b/src/wopl/wopl_file.c index 25b75be..f018cbc 100644 --- a/src/wopl/wopl_file.c +++ b/src/wopl/wopl_file.c @@ -353,6 +353,8 @@ int WOPL_LoadInstFromMem(WOPIFile *file, void *mem, size_t length) GO_FORWARD(2); } + file->version = version; + {/* is drum flag */ if(length < 1) return WOPL_ERR_UNEXPECTED_ENDING; @@ -434,11 +436,13 @@ size_t WOPL_CalculateInstFileSize(WOPIFile *file, uint16_t version) * is percussive instrument */ - if(version >= 3) - ins_size = WOPL_INST_SIZE_V3; + if(version > 2) + /* Skip sounding delays are not part of single-instrument file + * two sizes of uint16_t will be subtracted */ + ins_size = WOPL_INST_SIZE_V3 - (sizeof(uint16_t) * 2); else ins_size = WOPL_INST_SIZE_V2; - final_size += ins_size * 128; + final_size += ins_size; return final_size; } |