History

Pushed v1.11 code

- Bugfix: The Help screen scrollbars could act strange when switching subjects - Bugfix: Some of the Instr. Ed. (+ extension) scrollbars could be moved with the up/down pushbuttons even if the current instrument is not allocated. This is not supposed to be possible. - Bugfix: In the Instr. Ed. screen, the "Add" button (vol/pan env.) could lead to a crash if the current instrument wasn't allocated. - Bugfix: The piano in the Instr. Ed. screen could show wrong keypresses if extremely low or high pitches were being played. - The up/down pushbutton delay has been increased, it's too fast in original FT2 (in my opinion). - The 4-tap cubic spline interpolation table (for the audio mixer) has been recalculated in higher precision and more phases. It should in theory be better, but I can't personally hear any difference. - Windows: The DPI-scaling is now per-monitor aware instead of system aware. Maybe this solve the issue of blurry pixels for some people... - Don't warn the user when loading a song with stereo samples. They will be mixed to mono anyway, and I don't think it's an important warning to show. - Fixed some minor grammar errors in some GUI texts

Olav Sørensen committed 6 years ago

Commit 6c06e971 parent 307ecd818 files · +1221 −260Browse files

Unified · Split

18 files
  1. src/ft2_header.h +1 −1
  2. src/ft2_help.c +4 −1
  3. src/ft2_inst_ed.c +107 −117
  4. src/ft2_intrp_table.c +1036 −0
  5. src/ft2_intrp_table.h +17 −0
  6. src/ft2_mix.c +1 −1
  7. src/ft2_mix_macros.h +4 −4
  8. src/ft2_module_loader.c +1 −15
  9. src/ft2_nibbles.c +9 −9
  10. src/ft2_pattern_ed.c +7 −7
  11. src/ft2_pushbuttons.c +4 −4
  12. src/ft2_pushbuttons.h +1 −1
  13. src/ft2_replayer.c +17 −17
  14. src/ft2_replayer.h +0 −1
  15. src/ft2_tables.c +1 −75
  16. src/ft2_tables.h +1 −3
  17. vs2019_project/ft2-clone/ft2-clone.vcxproj +6 −4
  18. vs2019_project/ft2-clone/ft2-clone.vcxproj.filters +4 −0
src/ft2_header.h+1−1
@@ -12,7 +12,7 @@ · 11 unmodified lines
12#endif12#endif
13#include "ft2_replayer.h"13#include "ft2_replayer.h"
14 14
15#define PROG_VER_STR "1.10"15#define PROG_VER_STR "1.11"
16 16
17// do NOT change these! It will only mess things up...17// do NOT change these! It will only mess things up...
18 18
src/ft2_help.c+4−1
@@ -451,8 +451,11 @@ static void setHelpSubject(uint8_t Nr) · 450 unmodified lines
451 fHlp_Nr = Nr;451 fHlp_Nr = Nr;
452 fHlp_Line = 0;452 fHlp_Line = 0;
453 453
454 // force update even if new pos value was to be the same as old
455 scrollBars[SB_HELP_SCROLL].oldPos = 0xFFFFFFFF;
456
454 setScrollBarEnd(SB_HELP_SCROLL, subjLen[fHlp_Nr]);457 setScrollBarEnd(SB_HELP_SCROLL, subjLen[fHlp_Nr]);
455 setScrollBarPos(SB_HELP_SCROLL, fHlp_Line, false);458 setScrollBarPos(SB_HELP_SCROLL, 0, false);
456}459}
457 460
458void rbHelpFeatures(void)461void rbHelpFeatures(void)
src/ft2_inst_ed.c+107−117
@@ -20,6 +20,7 @@ · 19 unmodified lines
20#include "ft2_sample_loader.h"20#include "ft2_sample_loader.h"
21#include "ft2_diskop.h"21#include "ft2_diskop.h"
22#include "ft2_module_loader.h"22#include "ft2_module_loader.h"
23#include "ft2_tables.h"
23 24
24#ifdef _MSC_VER25#ifdef _MSC_VER
25#pragma pack(push)26#pragma pack(push)
@@ -257,32 +258,38 @@ static void drawMIDIBend(void) · 231 unmodified lines
257 258
258void midiChDown(void)259void midiChDown(void)
259{260{
260 scrollBarScrollLeft(SB_INST_EXT_MIDI_CH, 1);261 if (editor.curInstr != 0 && instr[editor.curInstr] != NULL)
262 scrollBarScrollLeft(SB_INST_EXT_MIDI_CH, 1);
261}263}
262 264
263void midiChUp(void)265void midiChUp(void)
264{266{
265 scrollBarScrollRight(SB_INST_EXT_MIDI_CH, 1);267 if (editor.curInstr != 0 && instr[editor.curInstr] != NULL)
268 scrollBarScrollRight(SB_INST_EXT_MIDI_CH, 1);
266}269}
267 270
268void midiPrgDown(void)271void midiPrgDown(void)
269{272{
270 scrollBarScrollLeft(SB_INST_EXT_MIDI_PRG, 1);273 if (editor.curInstr != 0 && instr[editor.curInstr] != NULL)
274 scrollBarScrollLeft(SB_INST_EXT_MIDI_PRG, 1);
271}275}
272 276
273void midiPrgUp(void)277void midiPrgUp(void)
274{278{
275 scrollBarScrollRight(SB_INST_EXT_MIDI_PRG, 1);279 if (editor.curInstr != 0 && instr[editor.curInstr] != NULL)
280 scrollBarScrollRight(SB_INST_EXT_MIDI_PRG, 1);
276}281}
277 282
278void midiBendDown(void)283void midiBendDown(void)
279{284{
280 scrollBarScrollLeft(SB_INST_EXT_MIDI_BEND, 1);285 if (editor.curInstr != 0 && instr[editor.curInstr] != NULL)
286 scrollBarScrollLeft(SB_INST_EXT_MIDI_BEND, 1);
281}287}
282 288
283void midiBendUp(void)289void midiBendUp(void)
284{290{
285 scrollBarScrollRight(SB_INST_EXT_MIDI_BEND, 1);291 if (editor.curInstr != 0 && instr[editor.curInstr] != NULL)
292 scrollBarScrollRight(SB_INST_EXT_MIDI_BEND, 1);
286}293}
287 294
288void sbMidiChPos(uint32_t pos)295void sbMidiChPos(uint32_t pos)
@@ -553,7 +560,7 @@ static void drawRelTone(void) · 264 unmodified lines
553 560
554static void setStdVolEnvelope(instrTyp *ins, uint8_t num)561static void setStdVolEnvelope(instrTyp *ins, uint8_t num)
555{562{
556 if (editor.curInstr == 0)563 if (editor.curInstr == 0 || ins == NULL)
557 return;564 return;
558 565
559 pauseMusic();566 pauseMusic();
@@ -576,7 +583,7 @@ static void setStdVolEnvelope(instrTyp *ins, uint8_t num) · 16 unmodified lines
576 583
577static void setStdPanEnvelope(instrTyp *ins, uint8_t num)584static void setStdPanEnvelope(instrTyp *ins, uint8_t num)
578{585{
579 if (editor.curInstr == 0)586 if (editor.curInstr == 0 || ins == NULL)
580 return;587 return;
581 588
582 pauseMusic();589 pauseMusic();
@@ -660,73 +667,73 @@ static void setOrStorePanEnvPreset(uint8_t num) · 77 unmodified lines
660 667
661void volPreDef1(void)668void volPreDef1(void)
662{669{
663 if (editor.curInstr > 0)670 if (editor.curInstr != 0 && instr[editor.curInstr] != NULL)
664 setOrStoreVolEnvPreset(1 - 1);671 setOrStoreVolEnvPreset(1 - 1);
665}672}
666 673
667void volPreDef2(void)674void volPreDef2(void)
668{675{
669 if (editor.curInstr > 0)676 if (editor.curInstr != 0 && instr[editor.curInstr] != NULL)
670 setOrStoreVolEnvPreset(2 - 1);677 setOrStoreVolEnvPreset(2 - 1);
671}678}
672 679
673void volPreDef3(void)680void volPreDef3(void)
674{681{
675 if (editor.curInstr > 0)682 if (editor.curInstr != 0 && instr[editor.curInstr] != NULL)
676 setOrStoreVolEnvPreset(3 - 1);683 setOrStoreVolEnvPreset(3 - 1);
677}684}
678 685
679void volPreDef4(void)686void volPreDef4(void)
680{687{
681 if (editor.curInstr > 0)688 if (editor.curInstr != 0 && instr[editor.curInstr] != NULL)
682 setOrStoreVolEnvPreset(4 - 1);689 setOrStoreVolEnvPreset(4 - 1);
683}690}
684 691
685void volPreDef5(void)692void volPreDef5(void)
686{693{
687 if (editor.curInstr > 0)694 if (editor.curInstr != 0 && instr[editor.curInstr] != NULL)
688 setOrStoreVolEnvPreset(5 - 1);695 setOrStoreVolEnvPreset(5 - 1);
689}696}
690 697
691void volPreDef6(void)698void volPreDef6(void)
692{699{
693 if (editor.curInstr > 0)700 if (editor.curInstr != 0 && instr[editor.curInstr] != NULL)
694 setOrStoreVolEnvPreset(6 - 1);701 setOrStoreVolEnvPreset(6 - 1);
695}702}
696 703
697void panPreDef1(void)704void panPreDef1(void)
698{705{
699 if (editor.curInstr > 0)706 if (editor.curInstr != 0 && instr[editor.curInstr] != NULL)
700 setOrStorePanEnvPreset(1 - 1);707 setOrStorePanEnvPreset(1 - 1);
701}708}
702 709
703void panPreDef2(void)710void panPreDef2(void)
704{711{
705 if (editor.curInstr > 0)712 if (editor.curInstr != 0 && instr[editor.curInstr] != NULL)
706 setOrStorePanEnvPreset(2 - 1);713 setOrStorePanEnvPreset(2 - 1);
707}714}
708 715
709void panPreDef3(void)716void panPreDef3(void)
710{717{
711 if (editor.curInstr > 0)718 if (editor.curInstr != 0 && instr[editor.curInstr] != NULL)
712 setOrStorePanEnvPreset(3 - 1);719 setOrStorePanEnvPreset(3 - 1);
713}720}
714 721
715void panPreDef4(void)722void panPreDef4(void)
716{723{
717 if (editor.curInstr > 0)724 if (editor.curInstr != 0 && instr[editor.curInstr] != NULL)
718 setOrStorePanEnvPreset(4 - 1);725 setOrStorePanEnvPreset(4 - 1);
719}726}
720 727
721void panPreDef5(void)728void panPreDef5(void)
722{729{
723 if (editor.curInstr > 0)730 if (editor.curInstr != 0 && instr[editor.curInstr] != NULL)
724 setOrStorePanEnvPreset(5 - 1);731 setOrStorePanEnvPreset(5 - 1);
725}732}
726 733
727void panPreDef6(void)734void panPreDef6(void)
728{735{
729 if (editor.curInstr > 0)736 if (editor.curInstr != 0 && instr[editor.curInstr] != NULL)
730 setOrStorePanEnvPreset(6 - 1);737 setOrStorePanEnvPreset(6 - 1);
731}738}
732 739
@@ -800,9 +807,11 @@ void volEnvAdd(void) · 67 unmodified lines
800{807{
801 int16_t i, ant;808 int16_t i, ant;
802 instrTyp *ins = instr[editor.curInstr];809 instrTyp *ins = instr[editor.curInstr];
810 if (editor.curInstr == 0 || ins == NULL)
811 return;
803 812
804 ant = ins->envVPAnt;813 ant = ins->envVPAnt;
805 if (ins == NULL || editor.curInstr == 0 || ant >= 12)814 if (ant >= 12)
806 return;815 return;
807 816
808 i = (int16_t)editor.currVolEnvPoint;817 i = (int16_t)editor.currVolEnvPoint;
@@ -989,9 +998,11 @@ void panEnvAdd(void) · 180 unmodified lines
989{998{
990 int16_t i, ant;999 int16_t i, ant;
991 instrTyp *ins = instr[editor.curInstr];1000 instrTyp *ins = instr[editor.curInstr];
1001 if (ins == NULL || editor.curInstr == 0)
1002 return;
992 1003
993 ant = ins->envPPAnt;1004 ant = ins->envPPAnt;
994 if (ins == NULL || editor.curInstr == 0 || ant >= 12)1005 if (ant >= 12)
995 return;1006 return;
996 1007
997 i = (int16_t)editor.currPanEnvPoint;1008 i = (int16_t)editor.currPanEnvPoint;
@@ -1176,72 +1187,86 @@ void panEnvRepEDown(void) · 178 unmodified lines
1176 1187
1177void volDown(void)1188void volDown(void)
1178{1189{
1179 scrollBarScrollLeft(SB_INST_VOL, 1);1190 if (editor.curInstr != 0 && instr[editor.curInstr] != NULL)
1191 scrollBarScrollLeft(SB_INST_VOL, 1);
1180}1192}
1181 1193
1182void volUp(void)1194void volUp(void)
1183{1195{
1184 scrollBarScrollRight(SB_INST_VOL, 1);1196 if (editor.curInstr != 0 && instr[editor.curInstr] != NULL)
1197 scrollBarScrollRight(SB_INST_VOL, 1);
1185}1198}
1186 1199
1187void panDown(void)1200void panDown(void)
1188{1201{
1189 scrollBarScrollLeft(SB_INST_PAN, 1);1202 if (editor.curInstr != 0 && instr[editor.curInstr] != NULL)
1203 scrollBarScrollLeft(SB_INST_PAN, 1);
1190}1204}
1191 1205
1192void panUp(void)1206void panUp(void)
1193{1207{
1194 scrollBarScrollRight(SB_INST_PAN, 1);1208 if (editor.curInstr != 0 && instr[editor.curInstr] != NULL)
1209 scrollBarScrollRight(SB_INST_PAN, 1);
1195}1210}
1196 1211
1197void ftuneDown(void)1212void ftuneDown(void)
1198{1213{
1199 scrollBarScrollLeft(SB_INST_FTUNE, 1);1214 if (editor.curInstr != 0 && instr[editor.curInstr] != NULL)
1215 scrollBarScrollLeft(SB_INST_FTUNE, 1);
1200}1216}
1201 1217
1202void ftuneUp(void)1218void ftuneUp(void)
1203{1219{
1204 scrollBarScrollRight(SB_INST_FTUNE, 1);1220 if (editor.curInstr != 0 && instr[editor.curInstr] != NULL)
1221 scrollBarScrollRight(SB_INST_FTUNE, 1);
1205}1222}
1206 1223
1207void fadeoutDown(void)1224void fadeoutDown(void)
1208{1225{
1209 scrollBarScrollLeft(SB_INST_FADEOUT, 1);1226 if (editor.curInstr != 0 && instr[editor.curInstr] != NULL)
1227 scrollBarScrollLeft(SB_INST_FADEOUT, 1);
1210}1228}
1211 1229
1212void fadeoutUp(void)1230void fadeoutUp(void)
1213{1231{
1214 scrollBarScrollRight(SB_INST_FADEOUT, 1);1232 if (editor.curInstr != 0 && instr[editor.curInstr] != NULL)
1233 scrollBarScrollRight(SB_INST_FADEOUT, 1);
1215}1234}
1216 1235
1217void vibSpeedDown(void)1236void vibSpeedDown(void)
1218{1237{
1219 scrollBarScrollLeft(SB_INST_VIBSPEED, 1);1238 if (editor.curInstr != 0 && instr[editor.curInstr] != NULL)
1239 scrollBarScrollLeft(SB_INST_VIBSPEED, 1);
1220}1240}
1221 1241
1222void vibSpeedUp(void)1242void vibSpeedUp(void)
1223{1243{
1224 scrollBarScrollRight(SB_INST_VIBSPEED, 1);1244 if (editor.curInstr != 0 && instr[editor.curInstr] != NULL)
1245 scrollBarScrollRight(SB_INST_VIBSPEED, 1);
1225}1246}
1226 1247
1227void vibDepthDown(void)1248void vibDepthDown(void)
1228{1249{
1229 scrollBarScrollLeft(SB_INST_VIBDEPTH, 1);1250 if (editor.curInstr != 0 && instr[editor.curInstr] != NULL)
1251 scrollBarScrollLeft(SB_INST_VIBDEPTH, 1);
1230}1252}
1231 1253
1232void vibDepthUp(void)1254void vibDepthUp(void)
1233{1255{
1234 scrollBarScrollRight(SB_INST_VIBDEPTH, 1);1256 if (editor.curInstr != 0 && instr[editor.curInstr] != NULL)
1257 scrollBarScrollRight(SB_INST_VIBDEPTH, 1);
1235}1258}
1236 1259
1237void vibSweepDown(void)1260void vibSweepDown(void)
1238{1261{
1239 scrollBarScrollLeft(SB_INST_VIBSWEEP, 1);1262 if (editor.curInstr != 0 && instr[editor.curInstr] != NULL)
1263 scrollBarScrollLeft(SB_INST_VIBSWEEP, 1);
1240}1264}
1241 1265
1242void vibSweepUp(void)1266void vibSweepUp(void)
1243{1267{
1244 scrollBarScrollRight(SB_INST_VIBSWEEP, 1);1268 if (editor.curInstr != 0 && instr[editor.curInstr] != NULL)
1269 scrollBarScrollRight(SB_INST_VIBSWEEP, 1);
1245}1270}
1246 1271
1247void setVolumeScroll(uint32_t pos)1272void setVolumeScroll(uint32_t pos)
@@ -1553,7 +1578,7 @@ static void writePianoNumber(uint8_t note, uint8_t key, uint8_t octave) · 305 unmodified lines
1553 uint16_t x;1578 uint16_t x;
1554 1579
1555 number = 0;1580 number = 0;
1556 if (instr[editor.curInstr] != NULL && editor.curInstr > 0)1581 if (instr[editor.curInstr] != NULL && editor.curInstr != 0)
1557 number = instr[editor.curInstr]->ta[note];1582 number = instr[editor.curInstr]->ta[note];
1558 1583
1559 x = keyDigitXPos[key] + (octave * 77);1584 x = keyDigitXPos[key] + (octave * 77);
@@ -1583,8 +1608,8 @@ void redrawPiano(void) · 23 unmodified lines
1583 memset(pianoKeyStatus, 0, sizeof (pianoKeyStatus));1608 memset(pianoKeyStatus, 0, sizeof (pianoKeyStatus));
1584 for (uint8_t i = 0; i < 96; i++)1609 for (uint8_t i = 0; i < 96; i++)
1585 {1610 {
1586 key = i % 12;1611 key = noteTab1[i];
1587 octave = i / 12;1612 octave = noteTab2[i];
1588 1613
1589 if (keyIsBlackTab[key])1614 if (keyIsBlackTab[key])
1590 drawBlackPianoKey(key, octave, false);1615 drawBlackPianoKey(key, octave, false);
@@ -1602,7 +1627,10 @@ bool testPianoKeysMouseDown(bool mouseButtonDown) · 11 unmodified lines
1602 instrTyp *ins;1627 instrTyp *ins;
1603 1628
1604 if (!editor.ui.instEditorShown)1629 if (!editor.ui.instEditorShown)
1605 return false;1630 return false; // area not clicked
1631
1632 if (editor.curInstr == 0 || instr[editor.curInstr] == NULL)
1633 return true; // area clicked, but don't do anything
1606 1634
1607 mx = mouse.x;1635 mx = mouse.x;
1608 my = mouse.y;1636 my = mouse.y;
@@ -1621,8 +1649,6 @@ bool testPianoKeysMouseDown(bool mouseButtonDown) · 12 unmodified lines
1621 }1649 }
1622 1650
1623 ins = instr[editor.curInstr];1651 ins = instr[editor.curInstr];
1624 if (ins == NULL)
1625 return true;
1626 1652
1627 mx -= 8;1653 mx -= 8;
1628 if (my < 378)1654 if (my < 378)
@@ -1665,7 +1691,7 @@ bool testPianoKeysMouseDown(bool mouseButtonDown) · 36 unmodified lines
1665 if (ins->ta[note] != editor.curSmp)1691 if (ins->ta[note] != editor.curSmp)
1666 {1692 {
1667 ins->ta[note] = editor.curSmp;1693 ins->ta[note] = editor.curSmp;
1668 writePianoNumber(note, note % 12, octave);1694 writePianoNumber(note, noteTab2[note], octave);
1669 setSongModifiedFlag();1695 setSongModifiedFlag();
1670 }1696 }
1671 }1697 }
@@ -1673,45 +1699,40 @@ bool testPianoKeysMouseDown(bool mouseButtonDown) · 1 unmodified line
1673 return true;1699 return true;
1674}1700}
1675 1701
1676static uint8_t getNote(uint8_t i) // returns 1..961702/* 8bitbubsy: This is my new version of FT2's buggy getNote().
1703** It's used to convert a channel's period into a piano key number.
1704**
1705** It's probably slower in "Amiga frequencies" mode, but at least it doesn't
1706** have weird overflow/underflow patterns.
1707**
1708** Warning: This function intentionally doesn't clamp the output value!
1709*/
1710static int32_t getPianoKey(int32_t period, int32_t finetune, int32_t relativeTone, bool linearFrequencies)
1677{1711{
1678 int8_t fineTune;1712 int32_t note;
1679 uint8_t note;
1680 int32_t period, loPeriod, hiPeriod, tmpPeriod, tableIndex;
1681 stmTyp *ch;
1682
1683 ch = &stm[i];
1684 1713
1685 fineTune = (ch->fineTune >> 3) + 16;1714 finetune >>= 3; // FT2 does this in the replayer internally
1686 hiPeriod = 8 * 12 * 16;
1687 loPeriod = 0;
1688 period = ch->finalPeriod;
1689 1715
1690 for (i = 0; i < 8; i++)1716 if (linearFrequencies)
1691 {1717 {
1692 tmpPeriod = (((loPeriod + hiPeriod) >> 1) & 0xFFFFFFF0) + fineTune;1718 period = ((10 * 12 * 16 * 4) - period) - (finetune << 2);
1693 1719 note = (period + (1 << 5)) >> 6; // rounded
1694 tableIndex = tmpPeriod - 8;1720 }
1695 if (tableIndex < 0) // added security check1721 else
1696 tableIndex = 0;1722 {
1697 1723 double dNote = (log2(period * (1.0 / (1712.0 * 16.0))) * -12.0) - (finetune * (1.0 / 16.0));
1698 if (period >= note2Period[tableIndex])1724 note = (int32_t)(dNote + 0.5); // rounded
1699 hiPeriod = tmpPeriod - fineTune;
1700 else
1701 loPeriod = tmpPeriod - fineTune;
1702 }1725 }
1703 1726
1704 if (loPeriod >= ((8*12*16) + 15) - 1) // FT2 bug: off-by-one error1727 note -= relativeTone;
1705 loPeriod = (8*12*16) + 15;
1706
1707 note = (uint8_t)(((loPeriod + 8) >> 4) - ch->relTonNr) + 1;
1708 return note;1728 return note;
1709}1729}
1710 1730
1711void drawPiano(void) // draw piano in idle mode1731void drawPiano(void) // draw piano in idle mode (jamming keys)
1712{1732{
1713 bool keyDown, newStatus[96];1733 bool keyDown, newStatus[96];
1714 uint8_t key, note, octave;1734 uint8_t key, octave;
1735 int32_t note;
1715 stmTyp *ch;1736 stmTyp *ch;
1716 1737
1717 memset(newStatus, 0, sizeof (newStatus));1738 memset(newStatus, 0, sizeof (newStatus));
@@ -1722,11 +1743,11 @@ void drawPiano(void) // draw piano in idle mode · 4 unmodified lines
1722 for (uint8_t i = 0; i < song.antChn; i++)1743 for (uint8_t i = 0; i < song.antChn; i++)
1723 {1744 {
1724 ch = &stm[i];1745 ch = &stm[i];
1725 if (ch->instrNr == editor.curInstr)1746 if (ch->instrNr == editor.curInstr && ch->envSustainActive)
1726 {1747 {
1727 note = getNote(i);1748 note = getPianoKey(ch->finalPeriod, ch->fineTune, ch->relTonNr, linearFrqTab);
1728 if (ch->envSustainActive)1749 if (note >= 0 && note <= 95)
1729 newStatus[(note - 1) % 96] = true;1750 newStatus[note] = true;
1730 }1751 }
1731 }1752 }
1732 }1753 }
@@ -1737,8 +1758,8 @@ void drawPiano(void) // draw piano in idle mode · 4 unmodified lines
1737 keyDown = newStatus[i];1758 keyDown = newStatus[i];
1738 if (pianoKeyStatus[i] ^ keyDown)1759 if (pianoKeyStatus[i] ^ keyDown)
1739 {1760 {
1740 key = i % 12;1761 key = noteTab1[i];
1741 octave = i / 12;1762 octave = noteTab2[i];
1742 1763
1743 if (keyIsBlackTab[key])1764 if (keyIsBlackTab[key])
1744 drawBlackPianoKey(key, octave, keyDown);1765 drawBlackPianoKey(key, octave, keyDown);
@@ -1750,42 +1771,11 @@ void drawPiano(void) // draw piano in idle mode · 5 unmodified lines
1750 }1771 }
1751}1772}
1752 1773
1753static uint8_t getNoteReplayer(syncedChannel_t *ch) // returns 1..961774void drawPianoReplayer(chSyncData_t *chSyncData) // draw piano with synced replayer state (song playing)
1754{
1755 int8_t fineTune;
1756 uint8_t note;
1757 int32_t period, loPeriod, hiPeriod, tmpPeriod, tableIndex;
1758
1759 fineTune = (ch->fineTune >> 3) + 16;
1760 hiPeriod = 8 * 12 * 16;
1761 loPeriod = 0;
1762 period = ch->finalPeriod;
1763
1764 for (uint8_t i = 0; i < 8; i++)
1765 {
1766 tmpPeriod = (((loPeriod + hiPeriod) >> 1) & 0xFFFFFFF0) + fineTune;
1767
1768 tableIndex = tmpPeriod - 8;
1769 if (tableIndex < 0) // added security check
1770 tableIndex = 0;
1771
1772 if (period >= note2Period[tableIndex])
1773 hiPeriod = tmpPeriod - fineTune;
1774 else
1775 loPeriod = tmpPeriod - fineTune;
1776 }
1777
1778 if (loPeriod >= ((8*12*16) + 15) - 1) // FT2 bug: off-by-one error
1779 loPeriod = (8*12*16) + 15;
1780
1781 note = (uint8_t)(((loPeriod + 8) >> 4) - ch->relTonNr) + 1;
1782 return note;
1783}
1784
1785void drawPianoReplayer(chSyncData_t *chSyncData) // draw piano with synced replayer datas
1786{1775{
1787 bool keyDown, newStatus[96];1776 bool keyDown, newStatus[96];
1788 uint8_t key, note, octave;1777 uint8_t key, octave;
1778 int32_t note;
1789 syncedChannel_t *ch;1779 syncedChannel_t *ch;
1790 1780
1791 memset(newStatus, 0, sizeof (newStatus));1781 memset(newStatus, 0, sizeof (newStatus));
@@ -1796,11 +1786,11 @@ void drawPianoReplayer(chSyncData_t *chSyncData) // draw piano with synced repla · 4 unmodified lines
1796 for (uint8_t i = 0; i < song.antChn; i++)1786 for (uint8_t i = 0; i < song.antChn; i++)
1797 {1787 {
1798 ch = &chSyncData->channels[i];1788 ch = &chSyncData->channels[i];
1799 if (ch->instrNr == editor.curInstr)1789 if (ch->instrNr == editor.curInstr && ch->envSustainActive)
1800 {1790 {
1801 note = getNoteReplayer(ch);1791 note = getPianoKey(ch->finalPeriod, ch->fineTune, ch->relTonNr, linearFrqTab);
1802 if (ch->envSustainActive)1792 if (note >= 0 && note <= 95)
1803 newStatus[(note - 1) % 96] = true;1793 newStatus[note] = true;
1804 }1794 }
1805 }1795 }
1806 }1796 }
@@ -1811,8 +1801,8 @@ void drawPianoReplayer(chSyncData_t *chSyncData) // draw piano with synced repla · 4 unmodified lines
1811 keyDown = newStatus[i];1801 keyDown = newStatus[i];
1812 if (pianoKeyStatus[i] ^ keyDown)1802 if (pianoKeyStatus[i] ^ keyDown)
1813 {1803 {
1814 key = i % 12;1804 key = noteTab1[i];
1815 octave = i / 12;1805 octave = noteTab2[i];
1816 1806
1817 if (keyIsBlackTab[key])1807 if (keyIsBlackTab[key])
1818 drawBlackPianoKey(key, octave, keyDown);1808 drawBlackPianoKey(key, octave, keyDown);
src/ft2_intrp_table.c+1036−0
@@ -0,0 +1,1036 @@
1#include <stdint.h>
2#include "ft2_intrp_table.h"
3
4/* 4-tap cubic spline table
5**
6** This table was generated using a modified version of Schism Tracker's lutgen.cpp
7** with 15-bit precision and 4096 phases.
8*/
9
10const int16_t cubicSplineTable[CUBIC_WIDTH * CUBIC_PHASES] =
11{
12 0, 32767, 0, 0, -4, 32767, 4, 0, -8, 32767, 8, 0, -12, 32767, 12, 0,
13 -16, 32767, 16, 0, -20, 32767, 20, 0, -24, 32767, 24, 0, -28, 32767, 28, 0,
14 -32, 32767, 32, 0, -36, 32767, 36, 0, -40, 32767, 40, 0, -44, 32767, 44, 0,
15 -48, 32767, 49, 0, -52, 32767, 53, 0, -56, 32767, 57, 0, -60, 32767, 61, 0,
16 -64, 32767, 65, 0, -67, 32766, 69, 0, -71, 32766, 73, 0, -75, 32766, 77, 0,
17 -79, 32765, 82, 0, -83, 32765, 86, 0, -87, 32765, 90, 0, -91, 32766, 94, -1,
18 -95, 32766, 98, -1, -99, 32766, 102, -1, -103, 32765, 107, -1, -107, 32765, 111, -1,
19 -110, 32764, 115, -1, -114, 32764, 119, -1, -118, 32764, 123, -1, -122, 32763, 128, -1,
20 -126, 32763, 132, -1, -130, 32763, 136, -1, -134, 32763, 140, -1, -138, 32762, 145, -1,
21 -141, 32761, 149, -1, -145, 32761, 153, -1, -149, 32760, 158, -1, -153, 32760, 162, -1,
22 -157, 32761, 166, -2, -161, 32760, 171, -2, -165, 32760, 175, -2, -168, 32759, 179, -2,
23 -172, 32758, 184, -2, -176, 32758, 188, -2, -180, 32758, 192, -2, -184, 32757, 197, -2,
24 -188, 32757, 201, -2, -191, 32756, 205, -2, -195, 32755, 210, -2, -199, 32756, 214, -3,
25 -203, 32756, 218, -3, -207, 32755, 223, -3, -210, 32754, 227, -3, -214, 32753, 232, -3,
26 -218, 32753, 236, -3, -222, 32752, 241, -3, -225, 32751, 245, -3, -229, 32751, 249, -3,
27 -233, 32750, 254, -3, -237, 32751, 258, -4, -241, 32750, 263, -4, -244, 32749, 267, -4,
28 -248, 32748, 272, -4, -252, 32748, 276, -4, -256, 32747, 281, -4, -259, 32746, 285, -4,
29 -263, 32745, 290, -4, -267, 32746, 294, -5, -271, 32745, 299, -5, -274, 32744, 303, -5,
30 -278, 32743, 308, -5, -282, 32742, 313, -5, -285, 32741, 317, -5, -289, 32740, 322, -5,
31 -293, 32741, 326, -6, -297, 32740, 331, -6, -300, 32739, 335, -6, -304, 32738, 340, -6,
32 -308, 32737, 345, -6, -311, 32736, 349, -6, -315, 32735, 354, -6, -319, 32735, 359, -7,
33 -322, 32734, 363, -7, -326, 32733, 368, -7, -330, 32733, 372, -7, -333, 32731, 377, -7,
34 -337, 32730, 382, -7, -341, 32731, 386, -8, -344, 32729, 391, -8, -348, 32728, 396, -8,
35 -352, 32727, 401, -8, -355, 32726, 405, -8, -359, 32725, 410, -8, -363, 32725, 415, -9,
36 -366, 32724, 419, -9, -370, 32723, 424, -9, -373, 32721, 429, -9, -377, 32720, 434, -9,
37 -381, 32721, 438, -10, -384, 32719, 443, -10, -388, 32718, 448, -10, -392, 32717, 453, -10,
38 -395, 32716, 457, -10, -399, 32715, 462, -10, -402, 32714, 467, -11, -406, 32713, 472, -11,
39 -410, 32712, 477, -11, -413, 32711, 481, -11, -417, 32710, 486, -11, -420, 32709, 491, -12,
40 -424, 32708, 496, -12, -427, 32706, 501, -12, -431, 32705, 506, -12, -435, 32705, 511, -13,
41 -438, 32704, 515, -13, -442, 32703, 520, -13, -445, 32701, 525, -13, -449, 32700, 530, -13,
42 -452, 32699, 535, -14, -456, 32698, 540, -14, -459, 32696, 545, -14, -463, 32695, 550, -14,
43 -466, 32694, 555, -15, -470, 32693, 560, -15, -473, 32691, 565, -15, -477, 32690, 570, -15,
44 -481, 32690, 575, -16, -484, 32689, 579, -16, -488, 32688, 584, -16, -491, 32686, 589, -16,
45 -495, 32685, 594, -16, -498, 32684, 599, -17, -502, 32683, 604, -17, -505, 32681, 609, -17,
46 -508, 32679, 614, -17, -512, 32679, 619, -18, -515, 32676, 625, -18, -519, 32675, 630, -18,
47 -522, 32673, 635, -18, -526, 32673, 640, -19, -529, 32671, 645, -19, -533, 32670, 650, -19,
48 -536, 32669, 655, -20, -540, 32668, 660, -20, -543, 32666, 665, -20, -547, 32665, 670, -20,
49 -550, 32664, 675, -21, -553, 32662, 680, -21, -557, 32661, 685, -21, -560, 32658, 691, -21,
50 -564, 32658, 696, -22, -567, 32656, 701, -22, -571, 32655, 706, -22, -574, 32654, 711, -23,
51 -577, 32652, 716, -23, -581, 32650, 722, -23, -584, 32648, 727, -23, -588, 32648, 732, -24,
52 -591, 32646, 737, -24, -594, 32644, 742, -24, -598, 32644, 747, -25, -601, 32641, 753, -25,
53 -605, 32640, 758, -25, -608, 32639, 763, -26, -611, 32637, 768, -26, -615, 32635, 774, -26,
54 -618, 32633, 779, -26, -621, 32632, 784, -27, -625, 32631, 789, -27, -628, 32628, 795, -27,
55 -631, 32627, 800, -28, -635, 32626, 805, -28, -638, 32624, 810, -28, -641, 32622, 816, -29,
56 -645, 32621, 821, -29, -648, 32619, 826, -29, -651, 32617, 832, -30, -655, 32616, 837, -30,
57 -658, 32614, 842, -30, -661, 32612, 848, -31, -665, 32611, 853, -31, -668, 32609, 858, -31,
58 -671, 32607, 864, -32, -675, 32606, 869, -32, -678, 32603, 875, -32, -681, 32602, 880, -33,
59 -685, 32601, 885, -33, -688, 32598, 891, -33, -691, 32597, 896, -34, -694, 32594, 902, -34,
60 -698, 32593, 907, -34, -701, 32592, 912, -35, -704, 32589, 918, -35, -708, 32588, 923, -35,
61 -711, 32586, 929, -36, -714, 32584, 934, -36, -717, 32581, 940, -36, -721, 32581, 945, -37,
62 -724, 32578, 951, -37, -727, 32577, 956, -38, -730, 32575, 961, -38, -734, 32573, 967, -38,
63 -737, 32572, 972, -39, -740, 32569, 978, -39, -743, 32566, 984, -39, -746, 32565, 989, -40,
64 -750, 32563, 995, -40, -753, 32561, 1000, -40, -756, 32559, 1006, -41, -759, 32557, 1011, -41,
65 -762, 32555, 1017, -42, -766, 32554, 1022, -42, -769, 32551, 1028, -42, -772, 32550, 1033, -43,
66 -775, 32547, 1039, -43, -778, 32545, 1045, -44, -782, 32544, 1050, -44, -785, 32541, 1056, -44,
67 -788, 32540, 1061, -45, -791, 32537, 1067, -45, -794, 32535, 1073, -46, -798, 32534, 1078, -46,
68 -801, 32531, 1084, -46, -804, 32529, 1090, -47, -807, 32527, 1095, -47, -810, 32525, 1101, -48,
69 -813, 32522, 1107, -48, -816, 32520, 1112, -48, -820, 32519, 1118, -49, -823, 32516, 1124, -49,
70 -826, 32515, 1129, -50, -829, 32512, 1135, -50, -832, 32509, 1141, -50, -835, 32508, 1146, -51,
71 -838, 32505, 1152, -51, -841, 32503, 1158, -52, -845, 32501, 1164, -52, -848, 32500, 1169, -53,
72 -851, 32497, 1175, -53, -854, 32494, 1181, -53, -857, 32492, 1187, -54, -860, 32490, 1192, -54,
73 -863, 32488, 1198, -55, -866, 32485, 1204, -55, -869, 32483, 1210, -56, -872, 32480, 1216, -56,
74 -876, 32479, 1221, -56, -879, 32477, 1227, -57, -882, 32474, 1233, -57, -885, 32472, 1239, -58,
75 -888, 32469, 1245, -58, -891, 32468, 1250, -59, -894, 32465, 1256, -59, -897, 32463, 1262, -60,
76 -900, 32460, 1268, -60, -903, 32457, 1274, -60, -906, 32455, 1280, -61, -909, 32452, 1286, -61,
77 -912, 32451, 1291, -62, -915, 32448, 1297, -62, -918, 32446, 1303, -63, -921, 32443, 1309, -63,
78 -924, 32441, 1315, -64, -927, 32438, 1321, -64, -930, 32436, 1327, -65, -933, 32433, 1333, -65,
79 -936, 32431, 1339, -66, -939, 32428, 1345, -66, -942, 32425, 1351, -66, -945, 32423, 1357, -67,
80 -948, 32420, 1363, -67, -951, 32418, 1369, -68, -954, 32415, 1375, -68, -957, 32413, 1381, -69,
81 -960, 32410, 1387, -69, -963, 32408, 1393, -70, -966, 32405, 1399, -70, -969, 32403, 1405, -71,
82 -972, 32400, 1411, -71, -975, 32398, 1417, -72, -978, 32395, 1423, -72, -981, 32393, 1429, -73,
83 -984, 32390, 1435, -73, -987, 32388, 1441, -74, -990, 32385, 1447, -74, -993, 32383, 1453, -75,
84 -996, 32380, 1459, -75, -999, 32378, 1465, -76, -1002, 32375, 1471, -76, -1004, 32372, 1477, -77,
85 -1007, 32369, 1483, -77, -1010, 32367, 1489, -78, -1013, 32364, 1495, -78, -1016, 32361, 1502, -79,
86 -1019, 32358, 1508, -79, -1022, 32356, 1514, -80, -1025, 32353, 1520, -80, -1028, 32351, 1526, -81,
87 -1031, 32348, 1532, -81, -1034, 32346, 1538, -82, -1036, 32341, 1545, -82, -1039, 32339, 1551, -83,
88 -1042, 32337, 1557, -84, -1045, 32334, 1563, -84, -1048, 32332, 1569, -85, -1051, 32329, 1575, -85,
89 -1054, 32326, 1582, -86, -1057, 32323, 1588, -86, -1059, 32320, 1594, -87, -1062, 32317, 1600, -87,
90 -1065, 32314, 1607, -88, -1068, 32311, 1613, -88, -1071, 32309, 1619, -89, -1074, 32306, 1625, -89,
91 -1076, 32303, 1631, -90, -1079, 32300, 1638, -91, -1082, 32297, 1644, -91, -1085, 32295, 1650, -92,
92 -1088, 32291, 1657, -92, -1091, 32289, 1663, -93, -1093, 32285, 1669, -93, -1096, 32283, 1675, -94,
93 -1099, 32279, 1682, -94, -1102, 32277, 1688, -95, -1105, 32275, 1694, -96, -1107, 32270, 1701, -96,
94 -1110, 32268, 1707, -97, -1113, 32265, 1713, -97, -1116, 32262, 1720, -98, -1119, 32259, 1726, -98,
95 -1121, 32256, 1732, -99, -1124, 32252, 1739, -99, -1127, 32250, 1745, -100, -1130, 32248, 1751, -101,
96 -1133, 32244, 1758, -101, -1135, 32241, 1764, -102, -1138, 32237, 1771, -102, -1141, 32235, 1777, -103,
97 -1144, 32233, 1783, -104, -1146, 32228, 1790, -104, -1149, 32226, 1796, -105, -1152, 32222, 1803, -105,
98 -1155, 32220, 1809, -106, -1157, 32215, 1816, -106, -1160, 32213, 1822, -107, -1163, 32211, 1828, -108,
99 -1166, 32207, 1835, -108, -1168, 32204, 1841, -109, -1171, 32200, 1848, -109, -1174, 32198, 1854, -110,
100 -1176, 32194, 1861, -111, -1179, 32191, 1867, -111, -1182, 32188, 1874, -112, -1185, 32185, 1880, -112,
101 -1187, 32181, 1887, -113, -1190, 32179, 1893, -114, -1193, 32175, 1900, -114, -1195, 32172, 1906, -115,
102 -1198, 32168, 1913, -115, -1201, 32166, 1919, -116, -1203, 32162, 1926, -117, -1206, 32158, 1933, -117,
103 -1209, 32156, 1939, -118, -1211, 32152, 1946, -119, -1214, 32149, 1952, -119, -1217, 32146, 1959, -120,
104 -1219, 32142, 1965, -120, -1222, 32139, 1972, -121, -1225, 32136, 1979, -122, -1227, 32132, 1985, -122,
105 -1230, 32129, 1992, -123, -1233, 32126, 1998, -123, -1235, 32122, 2005, -124, -1238, 32119, 2012, -125,
106 -1241, 32116, 2018, -125, -1243, 32112, 2025, -126, -1246, 32109, 2032, -127, -1248, 32105, 2038, -127,
107 -1251, 32102, 2045, -128, -1254, 32100, 2051, -129, -1256, 32095, 2058, -129, -1259, 32092, 2065, -130,
108 -1262, 32089, 2072, -131, -1264, 32085, 2078, -131, -1267, 32082, 2085, -132, -1269, 32077, 2092, -132,
109 -1272, 32075, 2098, -133, -1274, 32071, 2105, -134, -1277, 32067, 2112, -134, -1280, 32065, 2118, -135,
110 -1282, 32061, 2125, -136, -1285, 32057, 2132, -136, -1287, 32053, 2139, -137, -1290, 32051, 2145, -138,
111 -1293, 32047, 2152, -138, -1295, 32043, 2159, -139, -1298, 32040, 2166, -140, -1300, 32036, 2172, -140,
112 -1303, 32033, 2179, -141, -1305, 32029, 2186, -142, -1308, 32025, 2193, -142, -1310, 32021, 2200, -143,
113 -1313, 32019, 2206, -144, -1315, 32014, 2213, -144, -1318, 32011, 2220, -145, -1321, 32008, 2227, -146,
114 -1323, 32003, 2234, -146, -1326, 32000, 2241, -147, -1328, 31997, 2247, -148, -1331, 31993, 2254, -148,
115 -1333, 31989, 2261, -149, -1336, 31986, 2268, -150, -1338, 31981, 2275, -150, -1341, 31978, 2282, -151,
116 -1343, 31974, 2289, -152, -1346, 31972, 2295, -153, -1348, 31967, 2302, -153, -1351, 31964, 2309, -154,
117 -1353, 31960, 2316, -155, -1356, 31956, 2323, -155, -1358, 31952, 2330, -156, -1361, 31949, 2337, -157,
118 -1363, 31944, 2344, -157, -1366, 31941, 2351, -158, -1368, 31937, 2358, -159, -1370, 31932, 2365, -159,
119 -1373, 31930, 2371, -160, -1375, 31926, 2378, -161, -1378, 31923, 2385, -162, -1380, 31918, 2392, -162,
120 -1383, 31915, 2399, -163, -1385, 31911, 2406, -164, -1388, 31907, 2413, -164, -1390, 31903, 2420, -165,
121 -1392, 31899, 2427, -166, -1395, 31896, 2434, -167, -1397, 31891, 2441, -167, -1400, 31888, 2448, -168,
122 -1402, 31884, 2455, -169, -1405, 31880, 2462, -169, -1407, 31876, 2469, -170, -1409, 31872, 2476, -171,
123 -1412, 31869, 2483, -172, -1414, 31863, 2491, -172, -1417, 31860, 2498, -173, -1419, 31856, 2505, -174,
124 -1421, 31852, 2512, -175, -1424, 31848, 2519, -175, -1426, 31844, 2526, -176, -1429, 31841, 2533, -177,
125 -1431, 31836, 2540, -177, -1433, 31832, 2547, -178, -1436, 31829, 2554, -179, -1438, 31825, 2561, -180,
126 -1440, 31820, 2568, -180, -1443, 31816, 2576, -181, -1445, 31812, 2583, -182, -1448, 31809, 2590, -183,
127 -1450, 31804, 2597, -183, -1452, 31800, 2604, -184, -1455, 31797, 2611, -185, -1457, 31793, 2618, -186,
128 -1459, 31787, 2626, -186, -1462, 31784, 2633, -187, -1464, 31780, 2640, -188, -1466, 31776, 2647, -189,
129 -1469, 31772, 2654, -189, -1471, 31768, 2661, -190, -1473, 31763, 2669, -191, -1476, 31760, 2676, -192,
130 -1478, 31755, 2683, -192, -1480, 31751, 2690, -193, -1483, 31748, 2697, -194, -1485, 31743, 2705, -195,
131 -1487, 31739, 2712, -196, -1489, 31734, 2719, -196, -1492, 31731, 2726, -197, -1494, 31726, 2734, -198,
132 -1496, 31722, 2741, -199, -1499, 31718, 2748, -199, -1501, 31714, 2755, -200, -1503, 31709, 2763, -201,
133 -1506, 31706, 2770, -202, -1508, 31702, 2777, -203, -1510, 31696, 2785, -203, -1512, 31692, 2792, -204,
134 -1515, 31689, 2799, -205, -1517, 31685, 2806, -206, -1519, 31679, 2814, -206, -1521, 31675, 2821, -207,
135 -1524, 31672, 2828, -208, -1526, 31667, 2836, -209, -1528, 31663, 2843, -210, -1530, 31658, 2850, -210,
136 -1533, 31654, 2858, -211, -1535, 31650, 2865, -212, -1537, 31646, 2872, -213, -1539, 31641, 2880, -214,
137 -1542, 31637, 2887, -214, -1544, 31632, 2895, -215, -1546, 31628, 2902, -216, -1548, 31624, 2909, -217,
138 -1550, 31619, 2917, -218, -1553, 31615, 2924, -218, -1555, 31611, 2931, -219, -1557, 31606, 2939, -220,
139 -1559, 31602, 2946, -221, -1561, 31597, 2954, -222, -1564, 31593, 2961, -222, -1566, 31588, 2969, -223,
140 -1568, 31584, 2976, -224, -1570, 31580, 2983, -225, -1572, 31575, 2991, -226, -1575, 31571, 2998, -226,
141 -1577, 31566, 3006, -227, -1579, 31562, 3013, -228, -1581, 31557, 3021, -229, -1583, 31553, 3028, -230,
142 -1585, 31548, 3036, -231, -1588, 31544, 3043, -231, -1590, 31539, 3051, -232, -1592, 31535, 3058, -233,
143 -1594, 31530, 3066, -234, -1596, 31526, 3073, -235, -1598, 31520, 3081, -235, -1600, 31516, 3088, -236,
144 -1603, 31512, 3096, -237, -1605, 31508, 3103, -238, -1607, 31503, 3111, -239, -1609, 31499, 3118, -240,
145 -1611, 31493, 3126, -240, -1613, 31489, 3133, -241, -1615, 31484, 3141, -242, -1617, 31479, 3149, -243,
146 -1620, 31476, 3156, -244, -1622, 31471, 3164, -245, -1624, 31467, 3171, -246, -1626, 31461, 3179, -246,
147 -1628, 31457, 3186, -247, -1630, 31452, 3194, -248, -1632, 31447, 3202, -249, -1634, 31443, 3209, -250,
148 -1636, 31438, 3217, -251, -1638, 31433, 3224, -251, -1641, 31429, 3232, -252, -1643, 31424, 3240, -253,
149 -1645, 31420, 3247, -254, -1647, 31415, 3255, -255, -1649, 31410, 3263, -256, -1651, 31406, 3270, -257,
150 -1653, 31400, 3278, -257, -1655, 31395, 3286, -258, -1657, 31391, 3293, -259, -1659, 31386, 3301, -260,
151 -1661, 31381, 3309, -261, -1663, 31377, 3316, -262, -1665, 31372, 3324, -263, -1667, 31367, 3332, -264,
152 -1669, 31362, 3339, -264, -1671, 31357, 3347, -265, -1673, 31352, 3355, -266, -1675, 31347, 3363, -267,
153 -1677, 31343, 3370, -268, -1680, 31339, 3378, -269, -1682, 31334, 3386, -270, -1684, 31329, 3393, -270,
154 -1686, 31324, 3401, -271, -1688, 31319, 3409, -272, -1690, 31314, 3417, -273, -1692, 31310, 3424, -274,
155 -1694, 31305, 3432, -275, -1696, 31300, 3440, -276, -1698, 31295, 3448, -277, -1700, 31290, 3456, -278,
156 -1702, 31285, 3463, -278, -1704, 31280, 3471, -279, -1706, 31275, 3479, -280, -1708, 31270, 3487, -281,
157 -1709, 31264, 3495, -282, -1711, 31260, 3502, -283, -1713, 31255, 3510, -284, -1715, 31250, 3518, -285,
158 -1717, 31245, 3526, -286, -1719, 31239, 3534, -286, -1721, 31235, 3541, -287, -1723, 31230, 3549, -288,
159 -1725, 31225, 3557, -289, -1727, 31220, 3565, -290, -1729, 31215, 3573, -291, -1731, 31210, 3581, -292,
160 -1733, 31205, 3589, -293, -1735, 31201, 3596, -294, -1737, 31196, 3604, -295, -1739, 31191, 3612, -296,
161 -1741, 31185, 3620, -296, -1743, 31180, 3628, -297, -1745, 31175, 3636, -298, -1746, 31169, 3644, -299,
162 -1748, 31164, 3652, -300, -1750, 31159, 3660, -301, -1752, 31154, 3668, -302, -1754, 31149, 3676, -303,
163 -1756, 31145, 3683, -304, -1758, 31140, 3691, -305, -1760, 31135, 3699, -306, -1762, 31129, 3707, -306,
164 -1764, 31124, 3715, -307, -1765, 31118, 3723, -308, -1767, 31113, 3731, -309, -1769, 31108, 3739, -310,
165 -1771, 31103, 3747, -311, -1773, 31098, 3755, -312, -1775, 31093, 3763, -313, -1777, 31088, 3771, -314,
166 -1779, 31083, 3779, -315, -1780, 31077, 3787, -316, -1782, 31072, 3795, -317, -1784, 31067, 3803, -318,
167 -1786, 31062, 3811, -319, -1788, 31057, 3819, -320, -1790, 31051, 3827, -320, -1792, 31046, 3835, -321,
168 -1793, 31040, 3843, -322, -1795, 31035, 3851, -323, -1797, 31030, 3859, -324, -1799, 31025, 3867, -325,
169 -1801, 31020, 3875, -326, -1803, 31015, 3883, -327, -1804, 31008, 3892, -328, -1806, 31003, 3900, -329,
170 -1808, 30998, 3908, -330, -1810, 30993, 3916, -331, -1812, 30988, 3924, -332, -1813, 30982, 3932, -333,
171 -1815, 30977, 3940, -334, -1817, 30972, 3948, -335, -1819, 30967, 3956, -336, -1821, 30962, 3964, -337,
172 -1823, 30956, 3973, -338, -1824, 30949, 3981, -338, -1826, 30944, 3989, -339, -1828, 30939, 3997, -340,
173 -1830, 30934, 4005, -341, -1831, 30928, 4013, -342, -1833, 30923, 4021, -343, -1835, 30918, 4029, -344,
174 -1837, 30912, 4038, -345, -1839, 30907, 4046, -346, -1840, 30901, 4054, -347, -1842, 30896, 4062, -348,
175 -1844, 30891, 4070, -349, -1846, 30885, 4079, -350, -1847, 30879, 4087, -351, -1849, 30874, 4095, -352,
176 -1851, 30869, 4103, -353, -1853, 30864, 4111, -354, -1854, 30858, 4119, -355, -1856, 30852, 4128, -356,
177 -1858, 30847, 4136, -357, -1859, 30841, 4144, -358, -1861, 30836, 4152, -359, -1863, 30830, 4161, -360,
178 -1865, 30825, 4169, -361, -1866, 30819, 4177, -362, -1868, 30814, 4185, -363, -1870, 30808, 4194, -364,
179 -1872, 30803, 4202, -365, -1873, 30797, 4210, -366, -1875, 30792, 4218, -367, -1877, 30786, 4227, -368,
180 -1878, 30780, 4235, -369, -1880, 30775, 4243, -370, -1882, 30769, 4252, -371, -1883, 30763, 4260, -372,
181 -1885, 30758, 4268, -373, -1887, 30753, 4276, -374, -1888, 30746, 4285, -375, -1890, 30741, 4293, -376,
182 -1892, 30736, 4301, -377, -1894, 30730, 4310, -378, -1895, 30724, 4318, -379, -1897, 30719, 4326, -380,
183 -1899, 30713, 4335, -381, -1900, 30707, 4343, -382, -1902, 30702, 4351, -383, -1903, 30695, 4360, -384,
184 -1905, 30690, 4368, -385, -1907, 30685, 4376, -386, -1908, 30678, 4385, -387, -1910, 30673, 4393, -388,
185 -1912, 30667, 4402, -389, -1913, 30661, 4410, -390, -1915, 30656, 4418, -391, -1917, 30650, 4427, -392,
186 -1918, 30644, 4435, -393, -1920, 30639, 4443, -394, -1922, 30633, 4452, -395, -1923, 30627, 4460, -396,
187 -1925, 30621, 4469, -397, -1926, 30615, 4477, -398, -1928, 30609, 4486, -399, -1930, 30604, 4494, -400,
188 -1931, 30598, 4502, -401, -1933, 30592, 4511, -402, -1934, 30586, 4519, -403, -1936, 30580, 4528, -404,
189 -1938, 30575, 4536, -405, -1939, 30568, 4545, -406, -1941, 30563, 4553, -407, -1942, 30556, 4562, -408,
190 -1944, 30551, 4570, -409, -1946, 30545, 4579, -410, -1947, 30539, 4587, -411, -1949, 30533, 4596, -412,
191 -1950, 30527, 4604, -413, -1952, 30521, 4613, -414, -1953, 30515, 4621, -415, -1955, 30509, 4630, -416,
192 -1956, 30503, 4638, -417, -1958, 30497, 4647, -418, -1960, 30492, 4655, -419, -1961, 30485, 4664, -420,
193 -1963, 30480, 4672, -421, -1964, 30473, 4681, -422, -1966, 30468, 4689, -423, -1967, 30462, 4698, -425,
194 -1969, 30457, 4706, -426, -1970, 30450, 4715, -427, -1972, 30445, 4723, -428, -1973, 30438, 4732, -429,
195 -1975, 30432, 4741, -430, -1977, 30427, 4749, -431, -1978, 30420, 4758, -432, -1980, 30415, 4766, -433,
196 -1981, 30408, 4775, -434, -1983, 30403, 4783, -435, -1984, 30396, 4792, -436, -1986, 30390, 4801, -437,
197 -1987, 30384, 4809, -438, -1989, 30378, 4818, -439, -1990, 30372, 4826, -440, -1992, 30366, 4835, -441,
198 -1993, 30359, 4844, -442, -1995, 30354, 4852, -443, -1996, 30347, 4861, -444, -1998, 30342, 4870, -446,
199 -1999, 30336, 4878, -447, -2000, 30329, 4887, -448, -2002, 30323, 4896, -449, -2003, 30317, 4904, -450,
200 -2005, 30311, 4913, -451, -2006, 30305, 4921, -452, -2008, 30299, 4930, -453, -2009, 30292, 4939, -454,
201 -2011, 30286, 4948, -455, -2012, 30280, 4956, -456, -2014, 30274, 4965, -457, -2015, 30267, 4974, -458,
202 -2017, 30262, 4982, -459, -2018, 30255, 4991, -460, -2019, 30249, 5000, -462, -2021, 30244, 5008, -463,
203 -2022, 30237, 5017, -464, -2024, 30231, 5026, -465, -2025, 30224, 5035, -466, -2027, 30219, 5043, -467,
204 -2028, 30212, 5052, -468, -2029, 30205, 5061, -469, -2031, 30200, 5069, -470, -2032, 30193, 5078, -471,
205 -2034, 30187, 5087, -472, -2035, 30180, 5096, -473, -2036, 30174, 5104, -474, -2038, 30169, 5113, -476,
206 -2039, 30162, 5122, -477, -2041, 30156, 5131, -478, -2042, 30149, 5140, -479, -2043, 30143, 5148, -480,
207 -2045, 30137, 5157, -481, -2046, 30130, 5166, -482, -2048, 30124, 5175, -483, -2049, 30117, 5184, -484,
208 -2050, 30111, 5192, -485, -2052, 30105, 5201, -486, -2053, 30099, 5210, -488, -2055, 30093, 5219, -489,
209 -2056, 30086, 5228, -490, -2057, 30080, 5236, -491, -2059, 30074, 5245, -492, -2060, 30067, 5254, -493,
210 -2061, 30060, 5263, -494, -2063, 30054, 5272, -495, -2064, 30047, 5281, -496, -2065, 30041, 5289, -497,
211 -2067, 30036, 5298, -499, -2068, 30029, 5307, -500, -2069, 30022, 5316, -501, -2071, 30016, 5325, -502,
212 -2072, 30009, 5334, -503, -2073, 30002, 5343, -504, -2075, 29996, 5352, -505, -2076, 29990, 5360, -506,
213 -2077, 29983, 5369, -507, -2079, 29977, 5378, -508, -2080, 29971, 5387, -510, -2081, 29964, 5396, -511,
214 -2083, 29958, 5405, -512, -2084, 29951, 5414, -513, -2085, 29944, 5423, -514, -2087, 29938, 5432, -515,
215 -2088, 29931, 5441, -516, -2089, 29924, 5450, -517, -2090, 29918, 5458, -518, -2092, 29913, 5467, -520,
216 -2093, 29906, 5476, -521, -2094, 29899, 5485, -522, -2096, 29893, 5494, -523, -2097, 29886, 5503, -524,
217 -2098, 29879, 5512, -525, -2099, 29872, 5521, -526, -2101, 29866, 5530, -527, -2102, 29860, 5539, -529,
218 -2103, 29853, 5548, -530, -2105, 29847, 5557, -531, -2106, 29840, 5566, -532, -2107, 29833, 5575, -533,
219 -2108, 29826, 5584, -534, -2110, 29820, 5593, -535, -2111, 29813, 5602, -536, -2112, 29807, 5611, -538,
220 -2113, 29800, 5620, -539, -2115, 29794, 5629, -540, -2116, 29787, 5638, -541, -2117, 29780, 5647, -542,
221 -2118, 29773, 5656, -543, -2120, 29767, 5665, -544, -2121, 29760, 5674, -545, -2122, 29754, 5683, -547,
222 -2123, 29747, 5692, -548, -2124, 29740, 5701, -549, -2126, 29734, 5710, -550, -2127, 29727, 5719, -551,
223 -2128, 29719, 5729, -552, -2129, 29712, 5738, -553, -2130, 29706, 5747, -555, -2132, 29700, 5756, -556,
224 -2133, 29693, 5765, -557, -2134, 29686, 5774, -558, -2135, 29679, 5783, -559, -2136, 29672, 5792, -560,
225 -2138, 29666, 5801, -561, -2139, 29660, 5810, -563, -2140, 29653, 5819, -564, -2141, 29645, 5829, -565,
226 -2142, 29638, 5838, -566, -2144, 29632, 5847, -567, -2145, 29625, 5856, -568, -2146, 29618, 5865, -569,
227 -2147, 29612, 5874, -571, -2148, 29605, 5883, -572, -2149, 29598, 5892, -573, -2151, 29591, 5902, -574,
228 -2152, 29584, 5911, -575, -2153, 29577, 5920, -576, -2154, 29571, 5929, -578, -2155, 29564, 5938, -579,
229 -2156, 29557, 5947, -580, -2158, 29551, 5956, -581, -2159, 29543, 5966, -582, -2160, 29536, 5975, -583,
230 -2161, 29529, 5984, -584, -2162, 29523, 5993, -586, -2163, 29516, 6002, -587, -2164, 29508, 6012, -588,
231 -2165, 29501, 6021, -589, -2167, 29495, 6030, -590, -2168, 29488, 6039, -591, -2169, 29482, 6048, -593,
232 -2170, 29474, 6058, -594, -2171, 29467, 6067, -595, -2172, 29460, 6076, -596, -2173, 29453, 6085, -597,
233 -2174, 29446, 6094, -598, -2176, 29440, 6104, -600, -2177, 29433, 6113, -601, -2178, 29426, 6122, -602,
234 -2179, 29419, 6131, -603, -2180, 29411, 6141, -604, -2181, 29404, 6150, -605, -2182, 29398, 6159, -607,
235 -2183, 29391, 6168, -608, -2184, 29383, 6178, -609, -2185, 29376, 6187, -610, -2186, 29369, 6196, -611,
236 -2188, 29363, 6206, -613, -2189, 29356, 6215, -614, -2190, 29349, 6224, -615, -2191, 29342, 6233, -616,
237 -2192, 29334, 6243, -617, -2193, 29327, 6252, -618, -2194, 29321, 6261, -620, -2195, 29313, 6271, -621,
238 -2196, 29306, 6280, -622, -2197, 29299, 6289, -623, -2198, 29292, 6298, -624, -2199, 29284, 6308, -625,
239 -2200, 29278, 6317, -627, -2201, 29271, 6326, -628, -2202, 29263, 6336, -629, -2203, 29256, 6345, -630,
240 -2204, 29249, 6354, -631, -2205, 29242, 6364, -633, -2206, 29235, 6373, -634, -2207, 29228, 6382, -635,
241 -2208, 29220, 6392, -636, -2209, 29213, 6401, -637, -2211, 29207, 6411, -639, -2212, 29200, 6420, -640,
242 -2213, 29193, 6429, -641, -2214, 29185, 6439, -642, -2215, 29178, 6448, -643, -2216, 29171, 6457, -644,
243 -2217, 29164, 6467, -646, -2218, 29157, 6476, -647, -2219, 29149, 6486, -648, -2220, 29142, 6495, -649,
244 -2221, 29135, 6504, -650, -2222, 29128, 6514, -652, -2223, 29121, 6523, -653, -2224, 29113, 6533, -654,
245 -2224, 29105, 6542, -655, -2225, 29098, 6551, -656, -2226, 29091, 6561, -658, -2227, 29084, 6570, -659,
246 -2228, 29076, 6580, -660, -2229, 29069, 6589, -661, -2230, 29061, 6599, -662, -2231, 29055, 6608, -664,
247 -2232, 29048, 6617, -665, -2233, 29040, 6627, -666, -2234, 29033, 6636, -667, -2235, 29025, 6646, -668,
248 -2236, 29019, 6655, -670, -2237, 29011, 6665, -671, -2238, 29004, 6674, -672, -2239, 28996, 6684, -673,
249 -2240, 28990, 6693, -675, -2241, 28982, 6703, -676, -2242, 28975, 6712, -677, -2243, 28967, 6722, -678,
250 -2244, 28960, 6731, -679, -2245, 28953, 6741, -681, -2245, 28945, 6750, -682, -2246, 28937, 6760, -683,
251 -2247, 28930, 6769, -684, -2248, 28922, 6779, -685, -2249, 28916, 6788, -687, -2250, 28908, 6798, -688,
252 -2251, 28901, 6807, -689, -2252, 28893, 6817, -690, -2253, 28886, 6826, -691, -2254, 28879, 6836, -693,
253 -2255, 28872, 6845, -694, -2255, 28863, 6855, -695, -2256, 28856, 6864, -696, -2257, 28849, 6874, -698,
254 -2258, 28842, 6883, -699, -2259, 28834, 6893, -700, -2260, 28826, 6903, -701, -2261, 28819, 6912, -702,
255 -2262, 28812, 6922, -704, -2263, 28805, 6931, -705, -2263, 28796, 6941, -706, -2264, 28789, 6950, -707,
256 -2265, 28782, 6960, -709, -2266, 28774, 6970, -710, -2267, 28767, 6979, -711, -2268, 28759, 6989, -712,
257 -2269, 28752, 6998, -713, -2269, 28744, 7008, -715, -2270, 28736, 7018, -716, -2271, 28729, 7027, -717,
258 -2272, 28721, 7037, -718, -2273, 28715, 7046, -720, -2274, 28707, 7056, -721, -2275, 28699, 7066, -722,
259 -2275, 28691, 7075, -723, -2276, 28684, 7085, -725, -2277, 28676, 7095, -726, -2278, 28669, 7104, -727,
260 -2279, 28661, 7114, -728, -2280, 28654, 7123, -729, -2280, 28646, 7133, -731, -2281, 28638, 7143, -732,
261 -2282, 28631, 7152, -733, -2283, 28623, 7162, -734, -2284, 28616, 7172, -736, -2284, 28608, 7181, -737,
262 -2285, 28600, 7191, -738, -2286, 28592, 7201, -739, -2287, 28586, 7210, -741, -2288, 28578, 7220, -742,
263 -2289, 28570, 7230, -743, -2289, 28562, 7239, -744, -2290, 28555, 7249, -746, -2291, 28547, 7259, -747,
264 -2292, 28540, 7268, -748, -2292, 28531, 7278, -749, -2293, 28524, 7288, -751, -2294, 28516, 7298, -752,
265 -2295, 28509, 7307, -753, -2296, 28501, 7317, -754, -2296, 28493, 7327, -756, -2297, 28486, 7336, -757,
266 -2298, 28478, 7346, -758, -2299, 28470, 7356, -759, -2299, 28462, 7366, -761, -2300, 28455, 7375, -762,
267 -2301, 28447, 7385, -763, -2302, 28439, 7395, -764, -2302, 28431, 7405, -766, -2303, 28424, 7414, -767,
268 -2304, 28416, 7424, -768, -2305, 28408, 7434, -769, -2305, 28400, 7444, -771, -2306, 28393, 7453, -772,
269 -2307, 28385, 7463, -773, -2308, 28377, 7473, -774, -2308, 28369, 7483, -776, -2309, 28362, 7492, -777,
270 -2310, 28354, 7502, -778, -2311, 28346, 7512, -779, -2311, 28338, 7522, -781, -2312, 28331, 7531, -782,
271 -2313, 28323, 7541, -783, -2314, 28315, 7551, -784, -2314, 28307, 7561, -786, -2315, 28299, 7571, -787,
272 -2316, 28292, 7580, -788, -2316, 28283, 7590, -789, -2317, 28276, 7600, -791, -2318, 28268, 7610, -792,
273 -2319, 28260, 7620, -793, -2319, 28252, 7629, -794, -2320, 28245, 7639, -796, -2321, 28237, 7649, -797,
274 -2321, 28228, 7659, -798, -2322, 28220, 7669, -799, -2323, 28213, 7679, -801, -2323, 28205, 7688, -802,
275 -2324, 28197, 7698, -803, -2325, 28189, 7708, -804, -2325, 28181, 7718, -806, -2326, 28173, 7728, -807,
276 -2327, 28165, 7738, -808, -2327, 28157, 7748, -810, -2328, 28150, 7757, -811, -2329, 28142, 7767, -812,
277 -2329, 28133, 7777, -813, -2330, 28126, 7787, -815, -2331, 28118, 7797, -816, -2331, 28109, 7807, -817,
278 -2332, 28101, 7817, -818, -2333, 28094, 7827, -820, -2333, 28086, 7836, -821, -2334, 28078, 7846, -822,
279 -2335, 28070, 7856, -823, -2335, 28062, 7866, -825, -2336, 28054, 7876, -826, -2337, 28046, 7886, -827,
280 -2337, 28038, 7896, -829, -2338, 28030, 7906, -830, -2338, 28021, 7916, -831, -2339, 28013, 7926, -832,
281 -2340, 28006, 7936, -834, -2340, 27998, 7945, -835, -2341, 27990, 7955, -836, -2342, 27982, 7965, -837,
282 -2342, 27974, 7975, -839, -2343, 27966, 7985, -840, -2343, 27957, 7995, -841, -2344, 27950, 8005, -843,
283 -2345, 27942, 8015, -844, -2345, 27933, 8025, -845, -2346, 27925, 8035, -846, -2346, 27917, 8045, -848,
284 -2347, 27909, 8055, -849, -2348, 27901, 8065, -850, -2348, 27892, 8075, -851, -2349, 27885, 8085, -853,
285 -2349, 27876, 8095, -854, -2350, 27868, 8105, -855, -2351, 27861, 8115, -857, -2351, 27852, 8125, -858,
286 -2352, 27844, 8135, -859, -2352, 27835, 8145, -860, -2353, 27828, 8155, -862, -2353, 27819, 8165, -863,
287 -2354, 27811, 8175, -864, -2355, 27804, 8185, -866, -2355, 27795, 8195, -867, -2356, 27787, 8205, -868,
288 -2356, 27778, 8215, -869, -2357, 27771, 8225, -871, -2357, 27762, 8235, -872, -2358, 27754, 8245, -873,
289 -2359, 27747, 8255, -875, -2359, 27738, 8265, -876, -2360, 27730, 8275, -877, -2360, 27721, 8285, -878,
290 -2361, 27714, 8295, -880, -2361, 27705, 8305, -881, -2362, 27697, 8315, -882, -2362, 27689, 8325, -884,
291 -2363, 27681, 8335, -885, -2363, 27672, 8345, -886, -2364, 27664, 8355, -887, -2364, 27656, 8365, -889,
292 -2365, 27648, 8375, -890, -2365, 27639, 8385, -891, -2366, 27632, 8395, -893, -2367, 27624, 8405, -894,
293 -2367, 27615, 8415, -895, -2368, 27607, 8425, -896, -2368, 27598, 8436, -898, -2369, 27590, 8446, -899,
294 -2369, 27581, 8456, -900, -2370, 27574, 8466, -902, -2370, 27565, 8476, -903, -2371, 27557, 8486, -904,
295 -2371, 27549, 8496, -906, -2372, 27541, 8506, -907, -2372, 27532, 8516, -908, -2373, 27524, 8526, -909,
296 -2373, 27516, 8536, -911, -2374, 27507, 8547, -912, -2374, 27498, 8557, -913, -2374, 27490, 8567, -915,
297 -2375, 27482, 8577, -916, -2375, 27473, 8587, -917, -2376, 27466, 8597, -919, -2376, 27457, 8607, -920,
298 -2377, 27449, 8617, -921, -2377, 27439, 8628, -922, -2378, 27432, 8638, -924, -2378, 27423, 8648, -925,
299 -2379, 27415, 8658, -926, -2379, 27407, 8668, -928, -2380, 27399, 8678, -929, -2380, 27390, 8688, -930,
300 -2381, 27382, 8699, -932, -2381, 27373, 8709, -933, -2381, 27364, 8719, -934, -2382, 27356, 8729, -935,
301 -2382, 27348, 8739, -937, -2383, 27340, 8749, -938, -2383, 27331, 8759, -939, -2384, 27323, 8770, -941,
302 -2384, 27314, 8780, -942, -2384, 27305, 8790, -943, -2385, 27298, 8800, -945, -2385, 27289, 8810, -946,
303 -2386, 27280, 8821, -947, -2386, 27271, 8831, -948, -2387, 27264, 8841, -950, -2387, 27255, 8851, -951,
304 -2387, 27246, 8861, -952, -2388, 27238, 8872, -954, -2388, 27229, 8882, -955, -2389, 27221, 8892, -956,
305 -2389, 27213, 8902, -958, -2389, 27204, 8912, -959, -2390, 27195, 8923, -960, -2390, 27186, 8933, -961,
306 -2391, 27179, 8943, -963, -2391, 27170, 8953, -964, -2391, 27161, 8963, -965, -2392, 27153, 8974, -967,
307 -2392, 27144, 8984, -968, -2393, 27136, 8994, -969, -2393, 27128, 9004, -971, -2393, 27118, 9015, -972,
308 -2394, 27110, 9025, -973, -2394, 27102, 9035, -975, -2394, 27093, 9045, -976, -2395, 27084, 9056, -977,
309 -2395, 27076, 9066, -979, -2396, 27068, 9076, -980, -2396, 27059, 9086, -981, -2396, 27049, 9097, -982,
310 -2397, 27042, 9107, -984, -2397, 27033, 9117, -985, -2397, 27024, 9127, -986, -2398, 27016, 9138, -988,
311 -2398, 27007, 9148, -989, -2398, 26998, 9158, -990, -2399, 26991, 9168, -992, -2399, 26981, 9179, -993,
312 -2399, 26972, 9189, -994, -2400, 26965, 9199, -996, -2400, 26955, 9210, -997, -2401, 26947, 9220, -998,
313 -2401, 26939, 9230, -1000, -2401, 26930, 9240, -1001, -2402, 26921, 9251, -1002, -2402, 26912, 9261, -1003,
314 -2402, 26904, 9271, -1005, -2402, 26894, 9282, -1006, -2403, 26886, 9292, -1007, -2403, 26878, 9302, -1009,
315 -2403, 26868, 9313, -1010, -2404, 26860, 9323, -1011, -2404, 26852, 9333, -1013, -2404, 26842, 9344, -1014,
316 -2405, 26834, 9354, -1015, -2405, 26826, 9364, -1017, -2405, 26816, 9375, -1018, -2406, 26808, 9385, -1019,
317 -2406, 26800, 9395, -1021, -2406, 26790, 9406, -1022, -2406, 26781, 9416, -1023, -2407, 26774, 9426, -1025,
318 -2407, 26764, 9437, -1026, -2407, 26755, 9447, -1027, -2408, 26747, 9457, -1028, -2408, 26738, 9468, -1030,
319 -2408, 26729, 9478, -1031, -2409, 26721, 9488, -1032, -2409, 26712, 9499, -1034, -2409, 26703, 9509, -1035,
320 -2409, 26693, 9520, -1036, -2410, 26686, 9530, -1038, -2410, 26677, 9540, -1039, -2410, 26667, 9551, -1040,
321 -2410, 26659, 9561, -1042, -2411, 26651, 9571, -1043, -2411, 26641, 9582, -1044, -2411, 26633, 9592, -1046,
322 -2411, 26623, 9603, -1047, -2412, 26615, 9613, -1048, -2412, 26607, 9623, -1050, -2412, 26597, 9634, -1051,
323 -2412, 26588, 9644, -1052, -2413, 26581, 9654, -1054, -2413, 26571, 9665, -1055, -2413, 26562, 9675, -1056,
324 -2413, 26553, 9686, -1058, -2414, 26545, 9696, -1059, -2414, 26535, 9707, -1060, -2414, 26527, 9717, -1062,
325 -2414, 26518, 9727, -1063, -2415, 26509, 9738, -1064, -2415, 26501, 9748, -1066, -2415, 26491, 9759, -1067,
326 -2415, 26482, 9769, -1068, -2415, 26473, 9779, -1069, -2416, 26465, 9790, -1071, -2416, 26456, 9800, -1072,
327 -2416, 26446, 9811, -1073, -2416, 26438, 9821, -1075, -2417, 26429, 9832, -1076, -2417, 26420, 9842, -1077,
328 -2417, 26411, 9853, -1079, -2417, 26402, 9863, -1080, -2417, 26393, 9873, -1081, -2418, 26385, 9884, -1083,
329 -2418, 26376, 9894, -1084, -2418, 26366, 9905, -1085, -2418, 26358, 9915, -1087, -2418, 26348, 9926, -1088,
330 -2419, 26340, 9936, -1089, -2419, 26331, 9947, -1091, -2419, 26322, 9957, -1092, -2419, 26312, 9968, -1093,
331 -2419, 26304, 9978, -1095, -2419, 26294, 9989, -1096, -2420, 26286, 9999, -1097, -2420, 26277, 10010, -1099,
332 -2420, 26268, 10020, -1100, -2420, 26259, 10030, -1101, -2420, 26250, 10041, -1103, -2421, 26242, 10051, -1104,
333 -2421, 26232, 10062, -1105, -2421, 26224, 10072, -1107, -2421, 26214, 10083, -1108, -2421, 26205, 10093, -1109,
334 -2421, 26196, 10104, -1111, -2421, 26187, 10114, -1112, -2422, 26178, 10125, -1113, -2422, 26170, 10135, -1115,
335 -2422, 26160, 10146, -1116, -2422, 26151, 10156, -1117, -2422, 26142, 10167, -1119, -2422, 26132, 10178, -1120,
336 -2422, 26123, 10188, -1121, -2423, 26115, 10199, -1123, -2423, 26106, 10209, -1124, -2423, 26096, 10220, -1125,
337 -2423, 26088, 10230, -1127, -2423, 26078, 10241, -1128, -2423, 26069, 10251, -1129, -2423, 26060, 10262, -1131,
338 -2424, 26052, 10272, -1132, -2424, 26042, 10283, -1133, -2424, 26034, 10293, -1135, -2424, 26024, 10304, -1136,
339 -2424, 26015, 10314, -1137, -2424, 26006, 10325, -1139, -2424, 25996, 10336, -1140, -2424, 25987, 10346, -1141,
340 -2424, 25978, 10357, -1143, -2425, 25970, 10367, -1144, -2425, 25960, 10378, -1145, -2425, 25952, 10388, -1147,
341 -2425, 25942, 10399, -1148, -2425, 25933, 10409, -1149, -2425, 25924, 10420, -1151, -2425, 25914, 10431, -1152,
342 -2425, 25905, 10441, -1153, -2425, 25896, 10452, -1155, -2425, 25887, 10462, -1156, -2425, 25877, 10473, -1157,
343 -2426, 25870, 10483, -1159, -2426, 25860, 10494, -1160, -2426, 25850, 10505, -1161, -2426, 25842, 10515, -1163,
344 -2426, 25832, 10526, -1164, -2426, 25823, 10536, -1165, -2426, 25814, 10547, -1167, -2426, 25804, 10558, -1168,
345 -2426, 25795, 10568, -1169, -2426, 25786, 10579, -1171, -2426, 25777, 10589, -1172, -2426, 25767, 10600, -1173,
346 -2426, 25758, 10611, -1175, -2426, 25749, 10621, -1176, -2427, 25740, 10632, -1177, -2427, 25732, 10642, -1179,
347 -2427, 25722, 10653, -1180, -2427, 25712, 10664, -1181, -2427, 25704, 10674, -1183, -2427, 25694, 10685, -1184,
348 -2427, 25684, 10696, -1185, -2427, 25676, 10706, -1187, -2427, 25666, 10717, -1188, -2427, 25657, 10727, -1189,
349 -2427, 25648, 10738, -1191, -2427, 25638, 10749, -1192, -2427, 25629, 10759, -1193, -2427, 25620, 10770, -1195,
350 -2427, 25610, 10781, -1196, -2427, 25601, 10791, -1197, -2427, 25592, 10802, -1199, -2427, 25582, 10813, -1200,
351 -2427, 25573, 10823, -1201, -2427, 25564, 10834, -1203, -2427, 25555, 10844, -1204, -2427, 25545, 10855, -1205,
352 -2427, 25536, 10866, -1207, -2427, 25527, 10876, -1208, -2427, 25517, 10887, -1209, -2427, 25508, 10898, -1211,
353 -2427, 25499, 10908, -1212, -2427, 25489, 10919, -1213, -2427, 25480, 10930, -1215, -2427, 25471, 10940, -1216,
354 -2427, 25461, 10951, -1217, -2427, 25452, 10962, -1219, -2427, 25443, 10972, -1220, -2427, 25433, 10983, -1221,
355 -2427, 25424, 10994, -1223, -2427, 25414, 11005, -1224, -2427, 25405, 11015, -1225, -2427, 25396, 11026, -1227,
356 -2427, 25386, 11037, -1228, -2427, 25377, 11047, -1229, -2427, 25368, 11058, -1231, -2427, 25358, 11069, -1232,
357 -2427, 25349, 11079, -1233, -2427, 25340, 11090, -1235, -2427, 25330, 11101, -1236, -2427, 25321, 11111, -1237,
358 -2427, 25312, 11122, -1239, -2427, 25302, 11133, -1240, -2427, 25292, 11144, -1241, -2427, 25284, 11154, -1243,
359 -2427, 25274, 11165, -1244, -2427, 25264, 11176, -1245, -2427, 25256, 11186, -1247, -2427, 25246, 11197, -1248,
360 -2427, 25236, 11208, -1249, -2427, 25227, 11219, -1251, -2426, 25217, 11229, -1252, -2426, 25207, 11240, -1253,
361 -2426, 25198, 11251, -1255, -2426, 25189, 11261, -1256, -2426, 25179, 11272, -1257, -2426, 25170, 11283, -1259,
362 -2426, 25160, 11294, -1260, -2426, 25151, 11304, -1261, -2426, 25142, 11315, -1263, -2426, 25132, 11326, -1264,
363 -2426, 25122, 11337, -1265, -2426, 25114, 11347, -1267, -2426, 25104, 11358, -1268, -2426, 25094, 11369, -1269,
364 -2426, 25085, 11380, -1271, -2425, 25075, 11390, -1272, -2425, 25065, 11401, -1273, -2425, 25055, 11412, -1274,
365 -2425, 25047, 11422, -1276, -2425, 25037, 11433, -1277, -2425, 25027, 11444, -1278, -2425, 25018, 11455, -1280,
366 -2425, 25008, 11466, -1281, -2425, 24999, 11476, -1282, -2425, 24990, 11487, -1284, -2424, 24979, 11498, -1285,
367 -2424, 24969, 11509, -1286, -2424, 24961, 11519, -1288, -2424, 24951, 11530, -1289, -2424, 24941, 11541, -1290,
368 -2424, 24932, 11552, -1292, -2424, 24923, 11562, -1293, -2424, 24913, 11573, -1294, -2424, 24904, 11584, -1296,
369 -2423, 24893, 11595, -1297, -2423, 24883, 11606, -1298, -2423, 24875, 11616, -1300, -2423, 24865, 11627, -1301,
370 -2423, 24855, 11638, -1302, -2423, 24846, 11649, -1304, -2423, 24837, 11659, -1305, -2423, 24827, 11670, -1306,
371 -2422, 24817, 11681, -1308, -2422, 24807, 11692, -1309, -2422, 24797, 11703, -1310, -2422, 24789, 11713, -1312,
372 -2422, 24779, 11724, -1313, -2422, 24769, 11735, -1314, -2422, 24760, 11746, -1316, -2421, 24749, 11757, -1317,
373 -2421, 24740, 11767, -1318, -2421, 24731, 11778, -1320, -2421, 24721, 11789, -1321, -2421, 24711, 11800, -1322,
374 -2421, 24702, 11811, -1324, -2421, 24692, 11822, -1325, -2420, 24682, 11832, -1326, -2420, 24673, 11843, -1328,
375 -2420, 24663, 11854, -1329, -2420, 24653, 11865, -1330, -2420, 24644, 11876, -1332, -2420, 24635, 11886, -1333,
376 -2419, 24624, 11897, -1334, -2419, 24615, 11908, -1336, -2419, 24605, 11919, -1337, -2419, 24595, 11930, -1338,
377 -2419, 24586, 11941, -1340, -2419, 24577, 11951, -1341, -2418, 24566, 11962, -1342, -2418, 24557, 11973, -1344,
378 -2418, 24547, 11984, -1345, -2418, 24537, 11995, -1346, -2418, 24528, 12006, -1348, -2417, 24518, 12016, -1349,
379 -2417, 24508, 12027, -1350, -2417, 24499, 12038, -1352, -2417, 24489, 12049, -1353, -2417, 24479, 12060, -1354,
380 -2416, 24469, 12071, -1356, -2416, 24459, 12082, -1357, -2416, 24450, 12092, -1358, -2416, 24441, 12103, -1360,
381 -2416, 24431, 12114, -1361, -2415, 24420, 12125, -1362, -2415, 24411, 12136, -1364, -2415, 24401, 12147, -1365,
382 -2415, 24391, 12158, -1366, -2415, 24382, 12168, -1367, -2414, 24372, 12179, -1369, -2414, 24362, 12190, -1370,
383 -2414, 24352, 12201, -1371, -2414, 24343, 12212, -1373, -2413, 24332, 12223, -1374, -2413, 24322, 12234, -1375,
384 -2413, 24314, 12244, -1377, -2413, 24304, 12255, -1378, -2413, 24294, 12266, -1379, -2412, 24284, 12277, -1381,
385 -2412, 24274, 12288, -1382, -2412, 24264, 12299, -1383, -2412, 24255, 12310, -1385, -2411, 24244, 12321, -1386,
386 -2411, 24234, 12332, -1387, -2411, 24226, 12342, -1389, -2411, 24216, 12353, -1390, -2410, 24205, 12364, -1391,
387 -2410, 24196, 12375, -1393, -2410, 24186, 12386, -1394, -2410, 24176, 12397, -1395, -2409, 24166, 12408, -1397,
388 -2409, 24156, 12419, -1398, -2409, 24146, 12430, -1399, -2409, 24138, 12440, -1401, -2408, 24127, 12451, -1402,
389 -2408, 24117, 12462, -1403, -2408, 24107, 12473, -1404, -2408, 24098, 12484, -1406, -2407, 24087, 12495, -1407,
390 -2407, 24077, 12506, -1408, -2407, 24068, 12517, -1410, -2406, 24057, 12528, -1411, -2406, 24047, 12539, -1412,
391 -2406, 24039, 12549, -1414, -2406, 24029, 12560, -1415, -2405, 24018, 12571, -1416, -2405, 24009, 12582, -1418,
392 -2405, 23999, 12593, -1419, -2404, 23988, 12604, -1420, -2404, 23979, 12615, -1422, -2404, 23969, 12626, -1423,
393 -2404, 23959, 12637, -1424, -2403, 23949, 12648, -1426, -2403, 23939, 12659, -1427, -2403, 23929, 12670, -1428,
394 -2402, 23918, 12681, -1429, -2402, 23910, 12691, -1431, -2402, 23900, 12702, -1432, -2402, 23890, 12713, -1433,
395 -2401, 23880, 12724, -1435, -2401, 23870, 12735, -1436, -2401, 23860, 12746, -1437, -2400, 23850, 12757, -1439,
396 -2400, 23840, 12768, -1440, -2400, 23830, 12779, -1441, -2399, 23820, 12790, -1443, -2399, 23810, 12801, -1444,
397 -2399, 23800, 12812, -1445, -2398, 23790, 12823, -1447, -2398, 23780, 12834, -1448, -2398, 23770, 12845, -1449,
398 -2397, 23759, 12856, -1450, -2397, 23751, 12866, -1452, -2397, 23741, 12877, -1453, -2396, 23730, 12888, -1454,
399 -2396, 23721, 12899, -1456, -2396, 23711, 12910, -1457, -2395, 23700, 12921, -1458, -2395, 23691, 12932, -1460,
400 -2395, 23681, 12943, -1461, -2394, 23670, 12954, -1462, -2394, 23661, 12965, -1464, -2394, 23651, 12976, -1465,
401 -2393, 23640, 12987, -1466, -2393, 23631, 12998, -1468, -2393, 23621, 13009, -1469, -2392, 23610, 13020, -1470,
402 -2392, 23600, 13031, -1471, -2392, 23591, 13042, -1473, -2391, 23580, 13053, -1474, -2391, 23570, 13064, -1475,
403 -2391, 23561, 13075, -1477, -2390, 23550, 13086, -1478, -2390, 23540, 13097, -1479, -2389, 23530, 13108, -1481,
404 -2389, 23520, 13119, -1482, -2389, 23510, 13130, -1483, -2388, 23499, 13141, -1484, -2388, 23490, 13152, -1486,
405 -2388, 23480, 13163, -1487, -2387, 23470, 13173, -1488, -2387, 23461, 13184, -1490, -2387, 23451, 13195, -1491,
406 -2386, 23440, 13206, -1492, -2386, 23431, 13217, -1494, -2385, 23420, 13228, -1495, -2385, 23410, 13239, -1496,
407 -2385, 23400, 13250, -1497, -2384, 23390, 13261, -1499, -2384, 23380, 13272, -1500, -2383, 23369, 13283, -1501,
408 -2383, 23360, 13294, -1503, -2383, 23350, 13305, -1504, -2382, 23339, 13316, -1505, -2382, 23330, 13327, -1507,
409 -2381, 23319, 13338, -1508, -2381, 23309, 13349, -1509, -2381, 23299, 13360, -1510, -2380, 23289, 13371, -1512,
410 -2380, 23279, 13382, -1513, -2379, 23268, 13393, -1514, -2379, 23259, 13404, -1516, -2379, 23249, 13415, -1517,
411 -2378, 23238, 13426, -1518, -2378, 23229, 13437, -1520, -2377, 23218, 13448, -1521, -2377, 23208, 13459, -1522,
412 -2377, 23198, 13470, -1523, -2376, 23188, 13481, -1525, -2376, 23178, 13492, -1526, -2375, 23167, 13503, -1527,
413 -2375, 23158, 13514, -1529, -2374, 23147, 13525, -1530, -2374, 23137, 13536, -1531, -2374, 23127, 13547, -1532,
414 -2373, 23117, 13558, -1534, -2373, 23107, 13569, -1535, -2372, 23096, 13580, -1536, -2372, 23087, 13591, -1538,
415 -2371, 23076, 13602, -1539, -2371, 23066, 13613, -1540, -2371, 23057, 13624, -1542, -2370, 23045, 13636, -1543,
416 -2370, 23035, 13647, -1544, -2369, 23024, 13658, -1545, -2369, 23015, 13669, -1547, -2368, 23004, 13680, -1548,
417 -2368, 22994, 13691, -1549, -2367, 22984, 13702, -1551, -2367, 22974, 13713, -1552, -2367, 22964, 13724, -1553,
418 -2366, 22953, 13735, -1554, -2366, 22944, 13746, -1556, -2365, 22933, 13757, -1557, -2365, 22923, 13768, -1558,
419 -2364, 22913, 13779, -1560, -2364, 22903, 13790, -1561, -2363, 22892, 13801, -1562, -2363, 22882, 13812, -1563,
420 -2362, 22872, 13823, -1565, -2362, 22862, 13834, -1566, -2361, 22851, 13845, -1567, -2361, 22842, 13856, -1569,
421 -2360, 22831, 13867, -1570, -2360, 22821, 13878, -1571, -2359, 22810, 13889, -1572, -2359, 22801, 13900, -1574,
422 -2359, 22791, 13911, -1575, -2358, 22780, 13922, -1576, -2358, 22770, 13933, -1577, -2357, 22760, 13944, -1579,
423 -2357, 22750, 13955, -1580, -2356, 22738, 13967, -1581, -2356, 22729, 13978, -1583, -2355, 22718, 13989, -1584,
424 -2355, 22708, 14000, -1585, -2354, 22697, 14011, -1586, -2354, 22688, 14022, -1588, -2353, 22677, 14033, -1589,
425 -2353, 22667, 14044, -1590, -2352, 22657, 14055, -1592, -2352, 22647, 14066, -1593, -2351, 22636, 14077, -1594,
426 -2351, 22626, 14088, -1595, -2350, 22616, 14099, -1597, -2350, 22606, 14110, -1598, -2349, 22595, 14121, -1599,
427 -2349, 22585, 14132, -1600, -2348, 22575, 14143, -1602, -2348, 22565, 14154, -1603, -2347, 22554, 14165, -1604,
428 -2347, 22544, 14177, -1606, -2346, 22533, 14188, -1607, -2345, 22522, 14199, -1608, -2345, 22512, 14210, -1609,
429 -2344, 22502, 14221, -1611, -2344, 22492, 14232, -1612, -2343, 22481, 14243, -1613, -2343, 22471, 14254, -1614,
430 -2342, 22461, 14265, -1616, -2342, 22451, 14276, -1617, -2341, 22440, 14287, -1618, -2341, 22430, 14298, -1619,
431 -2340, 22420, 14309, -1621, -2340, 22410, 14320, -1622, -2339, 22399, 14331, -1623, -2339, 22389, 14342, -1624,
432 -2338, 22378, 14354, -1626, -2337, 22367, 14365, -1627, -2337, 22357, 14376, -1628, -2336, 22347, 14387, -1630,
433 -2336, 22337, 14398, -1631, -2335, 22326, 14409, -1632, -2335, 22316, 14420, -1633, -2334, 22306, 14431, -1635,
434 -2334, 22296, 14442, -1636, -2333, 22285, 14453, -1637, -2332, 22274, 14464, -1638, -2332, 22265, 14475, -1640,
435 -2331, 22254, 14486, -1641, -2331, 22244, 14497, -1642, -2330, 22232, 14509, -1643, -2330, 22223, 14520, -1645,
436 -2329, 22212, 14531, -1646, -2329, 22202, 14542, -1647, -2328, 22191, 14553, -1648, -2327, 22181, 14564, -1650,
437 -2327, 22171, 14575, -1651, -2326, 22160, 14586, -1652, -2326, 22150, 14597, -1653, -2325, 22140, 14608, -1655,
438 -2325, 22130, 14619, -1656, -2324, 22119, 14630, -1657, -2323, 22107, 14642, -1658, -2323, 22098, 14653, -1660,
439 -2322, 22087, 14664, -1661, -2322, 22077, 14675, -1662, -2321, 22066, 14686, -1663, -2320, 22056, 14697, -1665,
440 -2320, 22046, 14708, -1666, -2319, 22035, 14719, -1667, -2319, 22025, 14730, -1668, -2318, 22015, 14741, -1670,
441 -2317, 22004, 14752, -1671, -2317, 21994, 14763, -1672, -2316, 21982, 14775, -1673, -2316, 21973, 14786, -1675,
442 -2315, 21962, 14797, -1676, -2314, 21951, 14808, -1677, -2314, 21941, 14819, -1678, -2313, 21931, 14830, -1680,
443 -2313, 21921, 14841, -1681, -2312, 21910, 14852, -1682, -2311, 21899, 14863, -1683, -2311, 21890, 14874, -1685,
444 -2310, 21879, 14885, -1686, -2310, 21868, 14897, -1687, -2309, 21857, 14908, -1688, -2308, 21847, 14919, -1690,
445 -2308, 21837, 14930, -1691, -2307, 21826, 14941, -1692, -2306, 21815, 14952, -1693, -2306, 21805, 14963, -1694,
446 -2305, 21795, 14974, -1696, -2305, 21785, 14985, -1697, -2304, 21774, 14996, -1698, -2303, 21763, 15007, -1699,
447 -2303, 21753, 15019, -1701, -2302, 21742, 15030, -1702, -2301, 21731, 15041, -1703, -2301, 21721, 15052, -1704,
448 -2300, 21711, 15063, -1706, -2300, 21701, 15074, -1707, -2299, 21690, 15085, -1708, -2298, 21679, 15096, -1709,
449 -2298, 21669, 15107, -1710, -2297, 21659, 15118, -1712, -2296, 21647, 15130, -1713, -2296, 21637, 15141, -1714,
450 -2295, 21626, 15152, -1715, -2294, 21616, 15163, -1717, -2294, 21606, 15174, -1718, -2293, 21595, 15185, -1719,
451 -2292, 21584, 15196, -1720, -2292, 21575, 15207, -1722, -2291, 21564, 15218, -1723, -2290, 21553, 15229, -1724,
452 -2290, 21542, 15241, -1725, -2289, 21531, 15252, -1726, -2288, 21521, 15263, -1728, -2288, 21511, 15274, -1729,
453 -2287, 21500, 15285, -1730, -2286, 21489, 15296, -1731, -2286, 21480, 15307, -1733, -2285, 21469, 15318, -1734,
454 -2284, 21458, 15329, -1735, -2284, 21447, 15341, -1736, -2283, 21436, 15352, -1737, -2282, 21426, 15363, -1739,
455 -2282, 21416, 15374, -1740, -2281, 21405, 15385, -1741, -2280, 21394, 15396, -1742, -2280, 21384, 15407, -1743,
456 -2279, 21374, 15418, -1745, -2278, 21363, 15429, -1746, -2278, 21353, 15440, -1747, -2277, 21341, 15452, -1748,
457 -2276, 21331, 15463, -1750, -2276, 21321, 15474, -1751, -2275, 21310, 15485, -1752, -2274, 21299, 15496, -1753,
458 -2274, 21289, 15507, -1754, -2273, 21279, 15518, -1756, -2272, 21268, 15529, -1757, -2271, 21257, 15540, -1758,
459 -2271, 21246, 15552, -1759, -2270, 21235, 15563, -1760, -2269, 21225, 15574, -1762, -2269, 21215, 15585, -1763,
460 -2268, 21204, 15596, -1764, -2267, 21193, 15607, -1765, -2267, 21183, 15618, -1766, -2266, 21173, 15629, -1768,
461 -2265, 21162, 15640, -1769, -2264, 21150, 15652, -1770, -2264, 21140, 15663, -1771, -2263, 21129, 15674, -1772,
462 -2262, 21119, 15685, -1774, -2262, 21109, 15696, -1775, -2261, 21098, 15707, -1776, -2260, 21087, 15718, -1777,
463 -2259, 21076, 15729, -1778, -2259, 21067, 15740, -1780, -2258, 21055, 15752, -1781, -2257, 21044, 15763, -1782,
464 -2257, 21034, 15774, -1783, -2256, 21023, 15785, -1784, -2255, 21013, 15796, -1786, -2254, 21002, 15807, -1787,
465 -2254, 20992, 15818, -1788, -2253, 20981, 15829, -1789, -2252, 20970, 15840, -1790, -2251, 20959, 15852, -1792,
466 -2251, 20949, 15863, -1793, -2250, 20938, 15874, -1794, -2249, 20927, 15885, -1795, -2249, 20917, 15896, -1796,
467 -2248, 20906, 15907, -1797, -2247, 20896, 15918, -1799, -2246, 20885, 15929, -1800, -2246, 20875, 15940, -1801,
468 -2245, 20863, 15952, -1802, -2244, 20852, 15963, -1803, -2243, 20842, 15974, -1805, -2243, 20832, 15985, -1806,
469 -2242, 20821, 15996, -1807, -2241, 20810, 16007, -1808, -2240, 20799, 16018, -1809, -2240, 20789, 16029, -1810,
470 -2239, 20779, 16040, -1812, -2238, 20767, 16052, -1813, -2237, 20756, 16063, -1814, -2237, 20746, 16074, -1815,
471 -2236, 20735, 16085, -1816, -2235, 20725, 16096, -1818, -2234, 20714, 16107, -1819, -2233, 20703, 16118, -1820,
472 -2233, 20693, 16129, -1821, -2232, 20682, 16140, -1822, -2231, 20670, 16152, -1823, -2230, 20660, 16163, -1825,
473 -2230, 20650, 16174, -1826, -2229, 20639, 16185, -1827, -2228, 20628, 16196, -1828, -2227, 20617, 16207, -1829,
474 -2227, 20607, 16218, -1830, -2226, 20597, 16229, -1832, -2225, 20586, 16240, -1833, -2224, 20574, 16252, -1834,
475 -2223, 20563, 16263, -1835, -2223, 20553, 16274, -1836, -2222, 20542, 16285, -1837, -2221, 20532, 16296, -1839,
476 -2220, 20521, 16307, -1840, -2220, 20511, 16318, -1841, -2219, 20500, 16329, -1842, -2218, 20489, 16340, -1843,
477 -2217, 20478, 16351, -1844, -2216, 20466, 16363, -1845, -2216, 20457, 16374, -1847, -2215, 20446, 16385, -1848,
478 -2214, 20435, 16396, -1849, -2213, 20424, 16407, -1850, -2212, 20413, 16418, -1851, -2212, 20403, 16429, -1852,
479 -2211, 20393, 16440, -1854, -2210, 20382, 16451, -1855, -2209, 20370, 16463, -1856, -2208, 20359, 16474, -1857,
480 -2208, 20349, 16485, -1858, -2207, 20338, 16496, -1859, -2206, 20327, 16507, -1860, -2205, 20317, 16518, -1862,
481 -2204, 20306, 16529, -1863, -2204, 20296, 16540, -1864, -2203, 20285, 16551, -1865, -2202, 20273, 16563, -1866,
482 -2201, 20262, 16574, -1867, -2200, 20251, 16585, -1868, -2199, 20241, 16596, -1870, -2199, 20231, 16607, -1871,
483 -2198, 20220, 16618, -1872, -2197, 20209, 16629, -1873, -2196, 20198, 16640, -1874, -2195, 20187, 16651, -1875,
484 -2195, 20177, 16662, -1876, -2194, 20166, 16674, -1878, -2193, 20155, 16685, -1879, -2192, 20144, 16696, -1880,
485 -2191, 20133, 16707, -1881, -2190, 20122, 16718, -1882, -2190, 20112, 16729, -1883, -2189, 20101, 16740, -1884,
486 -2188, 20091, 16751, -1886, -2187, 20080, 16762, -1887, -2186, 20069, 16773, -1888, -2185, 20057, 16785, -1889,
487 -2185, 20047, 16796, -1890, -2184, 20036, 16807, -1891, -2183, 20025, 16818, -1892, -2182, 20014, 16829, -1893,
488 -2181, 20004, 16840, -1895, -2180, 19993, 16851, -1896, -2179, 19982, 16862, -1897, -2179, 19972, 16873, -1898,
489 -2178, 19961, 16884, -1899, -2177, 19950, 16895, -1900, -2176, 19938, 16907, -1901, -2175, 19927, 16918, -1902,
490 -2174, 19917, 16929, -1904, -2174, 19907, 16940, -1905, -2173, 19896, 16951, -1906, -2172, 19885, 16962, -1907,
491 -2171, 19874, 16973, -1908, -2170, 19863, 16984, -1909, -2169, 19852, 16995, -1910, -2168, 19841, 17006, -1911,
492 -2168, 19831, 17018, -1913, -2167, 19820, 17029, -1914, -2166, 19809, 17040, -1915, -2165, 19798, 17051, -1916,
493 -2164, 19787, 17062, -1917, -2163, 19776, 17073, -1918, -2162, 19765, 17084, -1919, -2161, 19754, 17095, -1920,
494 -2161, 19744, 17106, -1921, -2160, 19733, 17117, -1922, -2159, 19723, 17128, -1924, -2158, 19712, 17139, -1925,
495 -2157, 19700, 17151, -1926, -2156, 19689, 17162, -1927, -2155, 19678, 17173, -1928, -2154, 19667, 17184, -1929,
496 -2154, 19657, 17195, -1930, -2153, 19646, 17206, -1931, -2152, 19635, 17217, -1932, -2151, 19625, 17228, -1934,
497 -2150, 19614, 17239, -1935, -2149, 19603, 17250, -1936, -2148, 19592, 17261, -1937, -2147, 19581, 17272, -1938,
498 -2146, 19569, 17284, -1939, -2146, 19559, 17295, -1940, -2145, 19548, 17306, -1941, -2144, 19537, 17317, -1942,
499 -2143, 19526, 17328, -1943, -2142, 19515, 17339, -1944, -2141, 19505, 17350, -1946, -2140, 19494, 17361, -1947,
500 -2139, 19483, 17372, -1948, -2138, 19472, 17383, -1949, -2137, 19461, 17394, -1950, -2137, 19451, 17405, -1951,
501 -2136, 19440, 17416, -1952, -2135, 19429, 17427, -1953, -2134, 19417, 17439, -1954, -2133, 19406, 17450, -1955,
502 -2132, 19395, 17461, -1956, -2131, 19384, 17472, -1957, -2130, 19374, 17483, -1959, -2129, 19363, 17494, -1960,
503 -2128, 19352, 17505, -1961, -2127, 19341, 17516, -1962, -2127, 19331, 17527, -1963, -2126, 19320, 17538, -1964,
504 -2125, 19309, 17549, -1965, -2124, 19298, 17560, -1966, -2123, 19287, 17571, -1967, -2122, 19276, 17582, -1968,
505 -2121, 19265, 17593, -1969, -2120, 19253, 17605, -1970, -2119, 19242, 17616, -1971, -2118, 19231, 17627, -1972,
506 -2117, 19221, 17638, -1974, -2116, 19210, 17649, -1975, -2116, 19200, 17660, -1976, -2115, 19189, 17671, -1977,
507 -2114, 19178, 17682, -1978, -2113, 19167, 17693, -1979, -2112, 19156, 17704, -1980, -2111, 19145, 17715, -1981,
508 -2110, 19134, 17726, -1982, -2109, 19123, 17737, -1983, -2108, 19112, 17748, -1984, -2107, 19101, 17759, -1985,
509 -2106, 19090, 17770, -1986, -2105, 19079, 17781, -1987, -2104, 19068, 17792, -1988, -2103, 19056, 17804, -1989,
510 -2102, 19046, 17815, -1991, -2101, 19035, 17826, -1992, -2101, 19025, 17837, -1993, -2100, 19014, 17848, -1994,
511 -2099, 19003, 17859, -1995, -2098, 18992, 17870, -1996, -2097, 18981, 17881, -1997, -2096, 18970, 17892, -1998,
512 -2095, 18959, 17903, -1999, -2094, 18948, 17914, -2000, -2093, 18937, 17925, -2001, -2092, 18926, 17936, -2002,
513 -2091, 18915, 17947, -2003, -2090, 18904, 17958, -2004, -2089, 18893, 17969, -2005, -2088, 18882, 17980, -2006,
514 -2087, 18871, 17991, -2007, -2086, 18860, 18002, -2008, -2085, 18849, 18013, -2009, -2084, 18838, 18024, -2010,
515 -2083, 18827, 18035, -2011, -2082, 18816, 18046, -2012, -2081, 18805, 18057, -2013, -2080, 18794, 18068, -2014,
516 -2079, 18783, 18080, -2016, -2079, 18773, 18091, -2017, -2078, 18762, 18102, -2018, -2077, 18751, 18113, -2019,
517 -2076, 18740, 18124, -2020, -2075, 18729, 18135, -2021, -2074, 18718, 18146, -2022, -2073, 18707, 18157, -2023,
518 -2072, 18696, 18168, -2024, -2071, 18685, 18179, -2025, -2070, 18674, 18190, -2026, -2069, 18663, 18201, -2027,
519 -2068, 18652, 18212, -2028, -2067, 18641, 18223, -2029, -2066, 18630, 18234, -2030, -2065, 18619, 18245, -2031,
520 -2064, 18608, 18256, -2032, -2063, 18597, 18267, -2033, -2062, 18586, 18278, -2034, -2061, 18575, 18289, -2035,
521 -2060, 18564, 18300, -2036, -2059, 18553, 18311, -2037, -2058, 18542, 18322, -2038, -2057, 18531, 18333, -2039,
522 -2056, 18520, 18344, -2040, -2055, 18509, 18355, -2041, -2054, 18498, 18366, -2042, -2053, 18487, 18377, -2043,
523 -2052, 18476, 18388, -2044, -2051, 18465, 18399, -2045, -2050, 18454, 18410, -2046, -2049, 18443, 18421, -2047,
524 -2048, 18432, 18432, -2048, -2047, 18421, 18443, -2049, -2046, 18410, 18454, -2050, -2045, 18399, 18465, -2051,
525 -2044, 18388, 18476, -2052, -2043, 18377, 18487, -2053, -2042, 18366, 18498, -2054, -2041, 18355, 18509, -2055,
526 -2040, 18344, 18520, -2056, -2039, 18333, 18531, -2057, -2038, 18322, 18542, -2058, -2037, 18311, 18553, -2059,
527 -2036, 18300, 18564, -2060, -2035, 18289, 18575, -2061, -2034, 18278, 18586, -2062, -2033, 18267, 18597, -2063,
528 -2032, 18256, 18608, -2064, -2031, 18245, 18619, -2065, -2030, 18234, 18630, -2066, -2029, 18223, 18641, -2067,
529 -2028, 18212, 18652, -2068, -2027, 18201, 18663, -2069, -2026, 18190, 18674, -2070, -2025, 18179, 18685, -2071,
530 -2024, 18168, 18696, -2072, -2023, 18157, 18707, -2073, -2022, 18146, 18718, -2074, -2021, 18135, 18729, -2075,
531 -2020, 18124, 18740, -2076, -2019, 18113, 18751, -2077, -2018, 18102, 18762, -2078, -2017, 18091, 18773, -2079,
532 -2016, 18080, 18783, -2079, -2014, 18068, 18794, -2080, -2013, 18057, 18805, -2081, -2012, 18046, 18816, -2082,
533 -2011, 18035, 18827, -2083, -2010, 18024, 18838, -2084, -2009, 18013, 18849, -2085, -2008, 18002, 18860, -2086,
534 -2007, 17991, 18871, -2087, -2006, 17980, 18882, -2088, -2005, 17969, 18893, -2089, -2004, 17958, 18904, -2090,
535 -2003, 17947, 18915, -2091, -2002, 17936, 18926, -2092, -2001, 17925, 18937, -2093, -2000, 17914, 18948, -2094,
536 -1999, 17903, 18959, -2095, -1998, 17892, 18970, -2096, -1997, 17881, 18981, -2097, -1996, 17870, 18992, -2098,
537 -1995, 17859, 19003, -2099, -1994, 17848, 19014, -2100, -1993, 17837, 19025, -2101, -1992, 17826, 19035, -2101,
538 -1991, 17815, 19046, -2102, -1989, 17804, 19056, -2103, -1988, 17792, 19068, -2104, -1987, 17781, 19079, -2105,
539 -1986, 17770, 19090, -2106, -1985, 17759, 19101, -2107, -1984, 17748, 19112, -2108, -1983, 17737, 19123, -2109,
540 -1982, 17726, 19134, -2110, -1981, 17715, 19145, -2111, -1980, 17704, 19156, -2112, -1979, 17693, 19167, -2113,
541 -1978, 17682, 19178, -2114, -1977, 17671, 19189, -2115, -1976, 17660, 19200, -2116, -1975, 17649, 19210, -2116,
542 -1974, 17638, 19221, -2117, -1972, 17627, 19231, -2118, -1971, 17616, 19242, -2119, -1970, 17605, 19253, -2120,
543 -1969, 17593, 19265, -2121, -1968, 17582, 19276, -2122, -1967, 17571, 19287, -2123, -1966, 17560, 19298, -2124,
544 -1965, 17549, 19309, -2125, -1964, 17538, 19320, -2126, -1963, 17527, 19331, -2127, -1962, 17516, 19341, -2127,
545 -1961, 17505, 19352, -2128, -1960, 17494, 19363, -2129, -1959, 17483, 19374, -2130, -1957, 17472, 19384, -2131,
546 -1956, 17461, 19395, -2132, -1955, 17450, 19406, -2133, -1954, 17439, 19417, -2134, -1953, 17427, 19429, -2135,
547 -1952, 17416, 19440, -2136, -1951, 17405, 19451, -2137, -1950, 17394, 19461, -2137, -1949, 17383, 19472, -2138,
548 -1948, 17372, 19483, -2139, -1947, 17361, 19494, -2140, -1946, 17350, 19505, -2141, -1944, 17339, 19515, -2142,
549 -1943, 17328, 19526, -2143, -1942, 17317, 19537, -2144, -1941, 17306, 19548, -2145, -1940, 17295, 19559, -2146,
550 -1939, 17284, 19569, -2146, -1938, 17272, 19581, -2147, -1937, 17261, 19592, -2148, -1936, 17250, 19603, -2149,
551 -1935, 17239, 19614, -2150, -1934, 17228, 19625, -2151, -1932, 17217, 19635, -2152, -1931, 17206, 19646, -2153,
552 -1930, 17195, 19657, -2154, -1929, 17184, 19667, -2154, -1928, 17173, 19678, -2155, -1927, 17162, 19689, -2156,
553 -1926, 17151, 19700, -2157, -1925, 17139, 19712, -2158, -1924, 17128, 19723, -2159, -1922, 17117, 19733, -2160,
554 -1921, 17106, 19744, -2161, -1920, 17095, 19754, -2161, -1919, 17084, 19765, -2162, -1918, 17073, 19776, -2163,
555 -1917, 17062, 19787, -2164, -1916, 17051, 19798, -2165, -1915, 17040, 19809, -2166, -1914, 17029, 19820, -2167,
556 -1913, 17018, 19831, -2168, -1911, 17006, 19841, -2168, -1910, 16995, 19852, -2169, -1909, 16984, 19863, -2170,
557 -1908, 16973, 19874, -2171, -1907, 16962, 19885, -2172, -1906, 16951, 19896, -2173, -1905, 16940, 19907, -2174,
558 -1904, 16929, 19917, -2174, -1902, 16918, 19927, -2175, -1901, 16907, 19938, -2176, -1900, 16895, 19950, -2177,
559 -1899, 16884, 19961, -2178, -1898, 16873, 19972, -2179, -1897, 16862, 19982, -2179, -1896, 16851, 19993, -2180,
560 -1895, 16840, 20004, -2181, -1893, 16829, 20014, -2182, -1892, 16818, 20025, -2183, -1891, 16807, 20036, -2184,
561 -1890, 16796, 20047, -2185, -1889, 16785, 20057, -2185, -1888, 16773, 20069, -2186, -1887, 16762, 20080, -2187,
562 -1886, 16751, 20091, -2188, -1884, 16740, 20101, -2189, -1883, 16729, 20112, -2190, -1882, 16718, 20122, -2190,
563 -1881, 16707, 20133, -2191, -1880, 16696, 20144, -2192, -1879, 16685, 20155, -2193, -1878, 16674, 20166, -2194,
564 -1876, 16662, 20177, -2195, -1875, 16651, 20187, -2195, -1874, 16640, 20198, -2196, -1873, 16629, 20209, -2197,
565 -1872, 16618, 20220, -2198, -1871, 16607, 20231, -2199, -1870, 16596, 20241, -2199, -1868, 16585, 20251, -2200,
566 -1867, 16574, 20262, -2201, -1866, 16563, 20273, -2202, -1865, 16551, 20285, -2203, -1864, 16540, 20296, -2204,
567 -1863, 16529, 20306, -2204, -1862, 16518, 20317, -2205, -1860, 16507, 20327, -2206, -1859, 16496, 20338, -2207,
568 -1858, 16485, 20349, -2208, -1857, 16474, 20359, -2208, -1856, 16463, 20370, -2209, -1855, 16451, 20382, -2210,
569 -1854, 16440, 20393, -2211, -1852, 16429, 20403, -2212, -1851, 16418, 20413, -2212, -1850, 16407, 20424, -2213,
570 -1849, 16396, 20435, -2214, -1848, 16385, 20446, -2215, -1847, 16374, 20457, -2216, -1845, 16363, 20466, -2216,
571 -1844, 16351, 20478, -2217, -1843, 16340, 20489, -2218, -1842, 16329, 20500, -2219, -1841, 16318, 20511, -2220,
572 -1840, 16307, 20521, -2220, -1839, 16296, 20532, -2221, -1837, 16285, 20542, -2222, -1836, 16274, 20553, -2223,
573 -1835, 16263, 20563, -2223, -1834, 16252, 20574, -2224, -1833, 16240, 20586, -2225, -1832, 16229, 20597, -2226,
574 -1830, 16218, 20607, -2227, -1829, 16207, 20617, -2227, -1828, 16196, 20628, -2228, -1827, 16185, 20639, -2229,
575 -1826, 16174, 20650, -2230, -1825, 16163, 20660, -2230, -1823, 16152, 20670, -2231, -1822, 16140, 20682, -2232,
576 -1821, 16129, 20693, -2233, -1820, 16118, 20703, -2233, -1819, 16107, 20714, -2234, -1818, 16096, 20725, -2235,
577 -1816, 16085, 20735, -2236, -1815, 16074, 20746, -2237, -1814, 16063, 20756, -2237, -1813, 16052, 20767, -2238,
578 -1812, 16040, 20779, -2239, -1810, 16029, 20789, -2240, -1809, 16018, 20799, -2240, -1808, 16007, 20810, -2241,
579 -1807, 15996, 20821, -2242, -1806, 15985, 20832, -2243, -1805, 15974, 20842, -2243, -1803, 15963, 20852, -2244,
580 -1802, 15952, 20863, -2245, -1801, 15940, 20875, -2246, -1800, 15929, 20885, -2246, -1799, 15918, 20896, -2247,
581 -1797, 15907, 20906, -2248, -1796, 15896, 20917, -2249, -1795, 15885, 20927, -2249, -1794, 15874, 20938, -2250,
582 -1793, 15863, 20949, -2251, -1792, 15852, 20959, -2251, -1790, 15840, 20970, -2252, -1789, 15829, 20981, -2253,
583 -1788, 15818, 20992, -2254, -1787, 15807, 21002, -2254, -1786, 15796, 21013, -2255, -1784, 15785, 21023, -2256,
584 -1783, 15774, 21034, -2257, -1782, 15763, 21044, -2257, -1781, 15752, 21055, -2258, -1780, 15740, 21067, -2259,
585 -1778, 15729, 21076, -2259, -1777, 15718, 21087, -2260, -1776, 15707, 21098, -2261, -1775, 15696, 21109, -2262,
586 -1774, 15685, 21119, -2262, -1772, 15674, 21129, -2263, -1771, 15663, 21140, -2264, -1770, 15652, 21150, -2264,
587 -1769, 15640, 21162, -2265, -1768, 15629, 21173, -2266, -1766, 15618, 21183, -2267, -1765, 15607, 21193, -2267,
588 -1764, 15596, 21204, -2268, -1763, 15585, 21215, -2269, -1762, 15574, 21225, -2269, -1760, 15563, 21235, -2270,
589 -1759, 15552, 21246, -2271, -1758, 15540, 21257, -2271, -1757, 15529, 21268, -2272, -1756, 15518, 21279, -2273,
590 -1754, 15507, 21289, -2274, -1753, 15496, 21299, -2274, -1752, 15485, 21310, -2275, -1751, 15474, 21321, -2276,
591 -1750, 15463, 21331, -2276, -1748, 15452, 21341, -2277, -1747, 15440, 21353, -2278, -1746, 15429, 21363, -2278,
592 -1745, 15418, 21374, -2279, -1743, 15407, 21384, -2280, -1742, 15396, 21394, -2280, -1741, 15385, 21405, -2281,
593 -1740, 15374, 21416, -2282, -1739, 15363, 21426, -2282, -1737, 15352, 21436, -2283, -1736, 15341, 21447, -2284,
594 -1735, 15329, 21458, -2284, -1734, 15318, 21469, -2285, -1733, 15307, 21480, -2286, -1731, 15296, 21489, -2286,
595 -1730, 15285, 21500, -2287, -1729, 15274, 21511, -2288, -1728, 15263, 21521, -2288, -1726, 15252, 21531, -2289,
596 -1725, 15241, 21542, -2290, -1724, 15229, 21553, -2290, -1723, 15218, 21564, -2291, -1722, 15207, 21575, -2292,
597 -1720, 15196, 21584, -2292, -1719, 15185, 21595, -2293, -1718, 15174, 21606, -2294, -1717, 15163, 21616, -2294,
598 -1715, 15152, 21626, -2295, -1714, 15141, 21637, -2296, -1713, 15130, 21647, -2296, -1712, 15118, 21659, -2297,
599 -1710, 15107, 21669, -2298, -1709, 15096, 21679, -2298, -1708, 15085, 21690, -2299, -1707, 15074, 21701, -2300,
600 -1706, 15063, 21711, -2300, -1704, 15052, 21721, -2301, -1703, 15041, 21731, -2301, -1702, 15030, 21742, -2302,
601 -1701, 15019, 21753, -2303, -1699, 15007, 21763, -2303, -1698, 14996, 21774, -2304, -1697, 14985, 21785, -2305,
602 -1696, 14974, 21795, -2305, -1694, 14963, 21805, -2306, -1693, 14952, 21815, -2306, -1692, 14941, 21826, -2307,
603 -1691, 14930, 21837, -2308, -1690, 14919, 21847, -2308, -1688, 14908, 21857, -2309, -1687, 14897, 21868, -2310,
604 -1686, 14885, 21879, -2310, -1685, 14874, 21890, -2311, -1683, 14863, 21899, -2311, -1682, 14852, 21910, -2312,
605 -1681, 14841, 21921, -2313, -1680, 14830, 21931, -2313, -1678, 14819, 21941, -2314, -1677, 14808, 21951, -2314,
606 -1676, 14797, 21962, -2315, -1675, 14786, 21973, -2316, -1673, 14775, 21982, -2316, -1672, 14763, 21994, -2317,
607 -1671, 14752, 22004, -2317, -1670, 14741, 22015, -2318, -1668, 14730, 22025, -2319, -1667, 14719, 22035, -2319,
608 -1666, 14708, 22046, -2320, -1665, 14697, 22056, -2320, -1663, 14686, 22066, -2321, -1662, 14675, 22077, -2322,
609 -1661, 14664, 22087, -2322, -1660, 14653, 22098, -2323, -1658, 14642, 22107, -2323, -1657, 14630, 22119, -2324,
610 -1656, 14619, 22130, -2325, -1655, 14608, 22140, -2325, -1653, 14597, 22150, -2326, -1652, 14586, 22160, -2326,
611 -1651, 14575, 22171, -2327, -1650, 14564, 22181, -2327, -1648, 14553, 22191, -2328, -1647, 14542, 22202, -2329,
612 -1646, 14531, 22212, -2329, -1645, 14520, 22223, -2330, -1643, 14509, 22232, -2330, -1642, 14497, 22244, -2331,
613 -1641, 14486, 22254, -2331, -1640, 14475, 22265, -2332, -1638, 14464, 22274, -2332, -1637, 14453, 22285, -2333,
614 -1636, 14442, 22296, -2334, -1635, 14431, 22306, -2334, -1633, 14420, 22316, -2335, -1632, 14409, 22326, -2335,
615 -1631, 14398, 22337, -2336, -1630, 14387, 22347, -2336, -1628, 14376, 22357, -2337, -1627, 14365, 22367, -2337,
616 -1626, 14354, 22378, -2338, -1624, 14342, 22389, -2339, -1623, 14331, 22399, -2339, -1622, 14320, 22410, -2340,
617 -1621, 14309, 22420, -2340, -1619, 14298, 22430, -2341, -1618, 14287, 22440, -2341, -1617, 14276, 22451, -2342,
618 -1616, 14265, 22461, -2342, -1614, 14254, 22471, -2343, -1613, 14243, 22481, -2343, -1612, 14232, 22492, -2344,
619 -1611, 14221, 22502, -2344, -1609, 14210, 22512, -2345, -1608, 14199, 22522, -2345, -1607, 14188, 22533, -2346,
620 -1606, 14177, 22544, -2347, -1604, 14165, 22554, -2347, -1603, 14154, 22565, -2348, -1602, 14143, 22575, -2348,
621 -1600, 14132, 22585, -2349, -1599, 14121, 22595, -2349, -1598, 14110, 22606, -2350, -1597, 14099, 22616, -2350,
622 -1595, 14088, 22626, -2351, -1594, 14077, 22636, -2351, -1593, 14066, 22647, -2352, -1592, 14055, 22657, -2352,
623 -1590, 14044, 22667, -2353, -1589, 14033, 22677, -2353, -1588, 14022, 22688, -2354, -1586, 14011, 22697, -2354,
624 -1585, 14000, 22708, -2355, -1584, 13989, 22718, -2355, -1583, 13978, 22729, -2356, -1581, 13967, 22738, -2356,
625 -1580, 13955, 22750, -2357, -1579, 13944, 22760, -2357, -1577, 13933, 22770, -2358, -1576, 13922, 22780, -2358,
626 -1575, 13911, 22791, -2359, -1574, 13900, 22801, -2359, -1572, 13889, 22810, -2359, -1571, 13878, 22821, -2360,
627 -1570, 13867, 22831, -2360, -1569, 13856, 22842, -2361, -1567, 13845, 22851, -2361, -1566, 13834, 22862, -2362,
628 -1565, 13823, 22872, -2362, -1563, 13812, 22882, -2363, -1562, 13801, 22892, -2363, -1561, 13790, 22903, -2364,
629 -1560, 13779, 22913, -2364, -1558, 13768, 22923, -2365, -1557, 13757, 22933, -2365, -1556, 13746, 22944, -2366,
630 -1554, 13735, 22953, -2366, -1553, 13724, 22964, -2367, -1552, 13713, 22974, -2367, -1551, 13702, 22984, -2367,
631 -1549, 13691, 22994, -2368, -1548, 13680, 23004, -2368, -1547, 13669, 23015, -2369, -1545, 13658, 23024, -2369,
632 -1544, 13647, 23035, -2370, -1543, 13636, 23045, -2370, -1542, 13624, 23057, -2371, -1540, 13613, 23066, -2371,
633 -1539, 13602, 23076, -2371, -1538, 13591, 23087, -2372, -1536, 13580, 23096, -2372, -1535, 13569, 23107, -2373,
634 -1534, 13558, 23117, -2373, -1532, 13547, 23127, -2374, -1531, 13536, 23137, -2374, -1530, 13525, 23147, -2374,
635 -1529, 13514, 23158, -2375, -1527, 13503, 23167, -2375, -1526, 13492, 23178, -2376, -1525, 13481, 23188, -2376,
636 -1523, 13470, 23198, -2377, -1522, 13459, 23208, -2377, -1521, 13448, 23218, -2377, -1520, 13437, 23229, -2378,
637 -1518, 13426, 23238, -2378, -1517, 13415, 23249, -2379, -1516, 13404, 23259, -2379, -1514, 13393, 23268, -2379,
638 -1513, 13382, 23279, -2380, -1512, 13371, 23289, -2380, -1510, 13360, 23299, -2381, -1509, 13349, 23309, -2381,
639 -1508, 13338, 23319, -2381, -1507, 13327, 23330, -2382, -1505, 13316, 23339, -2382, -1504, 13305, 23350, -2383,
640 -1503, 13294, 23360, -2383, -1501, 13283, 23369, -2383, -1500, 13272, 23380, -2384, -1499, 13261, 23390, -2384,
641 -1497, 13250, 23400, -2385, -1496, 13239, 23410, -2385, -1495, 13228, 23420, -2385, -1494, 13217, 23431, -2386,
642 -1492, 13206, 23440, -2386, -1491, 13195, 23451, -2387, -1490, 13184, 23461, -2387, -1488, 13173, 23470, -2387,
643 -1487, 13163, 23480, -2388, -1486, 13152, 23490, -2388, -1484, 13141, 23499, -2388, -1483, 13130, 23510, -2389,
644 -1482, 13119, 23520, -2389, -1481, 13108, 23530, -2389, -1479, 13097, 23540, -2390, -1478, 13086, 23550, -2390,
645 -1477, 13075, 23561, -2391, -1475, 13064, 23570, -2391, -1474, 13053, 23580, -2391, -1473, 13042, 23591, -2392,
646 -1471, 13031, 23600, -2392, -1470, 13020, 23610, -2392, -1469, 13009, 23621, -2393, -1468, 12998, 23631, -2393,
647 -1466, 12987, 23640, -2393, -1465, 12976, 23651, -2394, -1464, 12965, 23661, -2394, -1462, 12954, 23670, -2394,
648 -1461, 12943, 23681, -2395, -1460, 12932, 23691, -2395, -1458, 12921, 23700, -2395, -1457, 12910, 23711, -2396,
649 -1456, 12899, 23721, -2396, -1454, 12888, 23730, -2396, -1453, 12877, 23741, -2397, -1452, 12866, 23751, -2397,
650 -1450, 12856, 23759, -2397, -1449, 12845, 23770, -2398, -1448, 12834, 23780, -2398, -1447, 12823, 23790, -2398,
651 -1445, 12812, 23800, -2399, -1444, 12801, 23810, -2399, -1443, 12790, 23820, -2399, -1441, 12779, 23830, -2400,
652 -1440, 12768, 23840, -2400, -1439, 12757, 23850, -2400, -1437, 12746, 23860, -2401, -1436, 12735, 23870, -2401,
653 -1435, 12724, 23880, -2401, -1433, 12713, 23890, -2402, -1432, 12702, 23900, -2402, -1431, 12691, 23910, -2402,
654 -1429, 12681, 23918, -2402, -1428, 12670, 23929, -2403, -1427, 12659, 23939, -2403, -1426, 12648, 23949, -2403,
655 -1424, 12637, 23959, -2404, -1423, 12626, 23969, -2404, -1422, 12615, 23979, -2404, -1420, 12604, 23988, -2404,
656 -1419, 12593, 23999, -2405, -1418, 12582, 24009, -2405, -1416, 12571, 24018, -2405, -1415, 12560, 24029, -2406,
657 -1414, 12549, 24039, -2406, -1412, 12539, 24047, -2406, -1411, 12528, 24057, -2406, -1410, 12517, 24068, -2407,
658 -1408, 12506, 24077, -2407, -1407, 12495, 24087, -2407, -1406, 12484, 24098, -2408, -1404, 12473, 24107, -2408,
659 -1403, 12462, 24117, -2408, -1402, 12451, 24127, -2408, -1401, 12440, 24138, -2409, -1399, 12430, 24146, -2409,
660 -1398, 12419, 24156, -2409, -1397, 12408, 24166, -2409, -1395, 12397, 24176, -2410, -1394, 12386, 24186, -2410,
661 -1393, 12375, 24196, -2410, -1391, 12364, 24205, -2410, -1390, 12353, 24216, -2411, -1389, 12342, 24226, -2411,
662 -1387, 12332, 24234, -2411, -1386, 12321, 24244, -2411, -1385, 12310, 24255, -2412, -1383, 12299, 24264, -2412,
663 -1382, 12288, 24274, -2412, -1381, 12277, 24284, -2412, -1379, 12266, 24294, -2413, -1378, 12255, 24304, -2413,
664 -1377, 12244, 24314, -2413, -1375, 12234, 24322, -2413, -1374, 12223, 24332, -2413, -1373, 12212, 24343, -2414,
665 -1371, 12201, 24352, -2414, -1370, 12190, 24362, -2414, -1369, 12179, 24372, -2414, -1367, 12168, 24382, -2415,
666 -1366, 12158, 24391, -2415, -1365, 12147, 24401, -2415, -1364, 12136, 24411, -2415, -1362, 12125, 24420, -2415,
667 -1361, 12114, 24431, -2416, -1360, 12103, 24441, -2416, -1358, 12092, 24450, -2416, -1357, 12082, 24459, -2416,
668 -1356, 12071, 24469, -2416, -1354, 12060, 24479, -2417, -1353, 12049, 24489, -2417, -1352, 12038, 24499, -2417,
669 -1350, 12027, 24508, -2417, -1349, 12016, 24518, -2417, -1348, 12006, 24528, -2418, -1346, 11995, 24537, -2418,
670 -1345, 11984, 24547, -2418, -1344, 11973, 24557, -2418, -1342, 11962, 24566, -2418, -1341, 11951, 24577, -2419,
671 -1340, 11941, 24586, -2419, -1338, 11930, 24595, -2419, -1337, 11919, 24605, -2419, -1336, 11908, 24615, -2419,
672 -1334, 11897, 24624, -2419, -1333, 11886, 24635, -2420, -1332, 11876, 24644, -2420, -1330, 11865, 24653, -2420,
673 -1329, 11854, 24663, -2420, -1328, 11843, 24673, -2420, -1326, 11832, 24682, -2420, -1325, 11822, 24692, -2421,
674 -1324, 11811, 24702, -2421, -1322, 11800, 24711, -2421, -1321, 11789, 24721, -2421, -1320, 11778, 24731, -2421,
675 -1318, 11767, 24740, -2421, -1317, 11757, 24749, -2421, -1316, 11746, 24760, -2422, -1314, 11735, 24769, -2422,
676 -1313, 11724, 24779, -2422, -1312, 11713, 24789, -2422, -1310, 11703, 24797, -2422, -1309, 11692, 24807, -2422,
677 -1308, 11681, 24817, -2422, -1306, 11670, 24827, -2423, -1305, 11659, 24837, -2423, -1304, 11649, 24846, -2423,
678 -1302, 11638, 24855, -2423, -1301, 11627, 24865, -2423, -1300, 11616, 24875, -2423, -1298, 11606, 24883, -2423,
679 -1297, 11595, 24893, -2423, -1296, 11584, 24904, -2424, -1294, 11573, 24913, -2424, -1293, 11562, 24923, -2424,
680 -1292, 11552, 24932, -2424, -1290, 11541, 24941, -2424, -1289, 11530, 24951, -2424, -1288, 11519, 24961, -2424,
681 -1286, 11509, 24969, -2424, -1285, 11498, 24979, -2424, -1284, 11487, 24990, -2425, -1282, 11476, 24999, -2425,
682 -1281, 11466, 25008, -2425, -1280, 11455, 25018, -2425, -1278, 11444, 25027, -2425, -1277, 11433, 25037, -2425,
683 -1276, 11422, 25047, -2425, -1274, 11412, 25055, -2425, -1273, 11401, 25065, -2425, -1272, 11390, 25075, -2425,
684 -1271, 11380, 25085, -2426, -1269, 11369, 25094, -2426, -1268, 11358, 25104, -2426, -1267, 11347, 25114, -2426,
685 -1265, 11337, 25122, -2426, -1264, 11326, 25132, -2426, -1263, 11315, 25142, -2426, -1261, 11304, 25151, -2426,
686 -1260, 11294, 25160, -2426, -1259, 11283, 25170, -2426, -1257, 11272, 25179, -2426, -1256, 11261, 25189, -2426,
687 -1255, 11251, 25198, -2426, -1253, 11240, 25207, -2426, -1252, 11229, 25217, -2426, -1251, 11219, 25227, -2427,
688 -1249, 11208, 25236, -2427, -1248, 11197, 25246, -2427, -1247, 11186, 25256, -2427, -1245, 11176, 25264, -2427,
689 -1244, 11165, 25274, -2427, -1243, 11154, 25284, -2427, -1241, 11144, 25292, -2427, -1240, 11133, 25302, -2427,
690 -1239, 11122, 25312, -2427, -1237, 11111, 25321, -2427, -1236, 11101, 25330, -2427, -1235, 11090, 25340, -2427,
691 -1233, 11079, 25349, -2427, -1232, 11069, 25358, -2427, -1231, 11058, 25368, -2427, -1229, 11047, 25377, -2427,
692 -1228, 11037, 25386, -2427, -1227, 11026, 25396, -2427, -1225, 11015, 25405, -2427, -1224, 11005, 25414, -2427,
693 -1223, 10994, 25424, -2427, -1221, 10983, 25433, -2427, -1220, 10972, 25443, -2427, -1219, 10962, 25452, -2427,
694 -1217, 10951, 25461, -2427, -1216, 10940, 25471, -2427, -1215, 10930, 25480, -2427, -1213, 10919, 25489, -2427,
695 -1212, 10908, 25499, -2427, -1211, 10898, 25508, -2427, -1209, 10887, 25517, -2427, -1208, 10876, 25527, -2427,
696 -1207, 10866, 25536, -2427, -1205, 10855, 25545, -2427, -1204, 10844, 25555, -2427, -1203, 10834, 25564, -2427,
697 -1201, 10823, 25573, -2427, -1200, 10813, 25582, -2427, -1199, 10802, 25592, -2427, -1197, 10791, 25601, -2427,
698 -1196, 10781, 25610, -2427, -1195, 10770, 25620, -2427, -1193, 10759, 25629, -2427, -1192, 10749, 25638, -2427,
699 -1191, 10738, 25648, -2427, -1189, 10727, 25657, -2427, -1188, 10717, 25666, -2427, -1187, 10706, 25676, -2427,
700 -1185, 10696, 25684, -2427, -1184, 10685, 25694, -2427, -1183, 10674, 25704, -2427, -1181, 10664, 25712, -2427,
701 -1180, 10653, 25722, -2427, -1179, 10642, 25732, -2427, -1177, 10632, 25740, -2427, -1176, 10621, 25749, -2426,
702 -1175, 10611, 25758, -2426, -1173, 10600, 25767, -2426, -1172, 10589, 25777, -2426, -1171, 10579, 25786, -2426,
703 -1169, 10568, 25795, -2426, -1168, 10558, 25804, -2426, -1167, 10547, 25814, -2426, -1165, 10536, 25823, -2426,
704 -1164, 10526, 25832, -2426, -1163, 10515, 25842, -2426, -1161, 10505, 25850, -2426, -1160, 10494, 25860, -2426,
705 -1159, 10483, 25870, -2426, -1157, 10473, 25877, -2425, -1156, 10462, 25887, -2425, -1155, 10452, 25896, -2425,
706 -1153, 10441, 25905, -2425, -1152, 10431, 25914, -2425, -1151, 10420, 25924, -2425, -1149, 10409, 25933, -2425,
707 -1148, 10399, 25942, -2425, -1147, 10388, 25952, -2425, -1145, 10378, 25960, -2425, -1144, 10367, 25970, -2425,
708 -1143, 10357, 25978, -2424, -1141, 10346, 25987, -2424, -1140, 10336, 25996, -2424, -1139, 10325, 26006, -2424,
709 -1137, 10314, 26015, -2424, -1136, 10304, 26024, -2424, -1135, 10293, 26034, -2424, -1133, 10283, 26042, -2424,
710 -1132, 10272, 26052, -2424, -1131, 10262, 26060, -2423, -1129, 10251, 26069, -2423, -1128, 10241, 26078, -2423,
711 -1127, 10230, 26088, -2423, -1125, 10220, 26096, -2423, -1124, 10209, 26106, -2423, -1123, 10199, 26115, -2423,
712 -1121, 10188, 26123, -2422, -1120, 10178, 26132, -2422, -1119, 10167, 26142, -2422, -1117, 10156, 26151, -2422,
713 -1116, 10146, 26160, -2422, -1115, 10135, 26170, -2422, -1113, 10125, 26178, -2422, -1112, 10114, 26187, -2421,
714 -1111, 10104, 26196, -2421, -1109, 10093, 26205, -2421, -1108, 10083, 26214, -2421, -1107, 10072, 26224, -2421,
715 -1105, 10062, 26232, -2421, -1104, 10051, 26242, -2421, -1103, 10041, 26250, -2420, -1101, 10030, 26259, -2420,
716 -1100, 10020, 26268, -2420, -1099, 10010, 26277, -2420, -1097, 9999, 26286, -2420, -1096, 9989, 26294, -2419,
717 -1095, 9978, 26304, -2419, -1093, 9968, 26312, -2419, -1092, 9957, 26322, -2419, -1091, 9947, 26331, -2419,
718 -1089, 9936, 26340, -2419, -1088, 9926, 26348, -2418, -1087, 9915, 26358, -2418, -1085, 9905, 26366, -2418,
719 -1084, 9894, 26376, -2418, -1083, 9884, 26385, -2418, -1081, 9873, 26393, -2417, -1080, 9863, 26402, -2417,
720 -1079, 9853, 26411, -2417, -1077, 9842, 26420, -2417, -1076, 9832, 26429, -2417, -1075, 9821, 26438, -2416,
721 -1073, 9811, 26446, -2416, -1072, 9800, 26456, -2416, -1071, 9790, 26465, -2416, -1069, 9779, 26473, -2415,
722 -1068, 9769, 26482, -2415, -1067, 9759, 26491, -2415, -1066, 9748, 26501, -2415, -1064, 9738, 26509, -2415,
723 -1063, 9727, 26518, -2414, -1062, 9717, 26527, -2414, -1060, 9707, 26535, -2414, -1059, 9696, 26545, -2414,
724 -1058, 9686, 26553, -2413, -1056, 9675, 26562, -2413, -1055, 9665, 26571, -2413, -1054, 9654, 26581, -2413,
725 -1052, 9644, 26588, -2412, -1051, 9634, 26597, -2412, -1050, 9623, 26607, -2412, -1048, 9613, 26615, -2412,
726 -1047, 9603, 26623, -2411, -1046, 9592, 26633, -2411, -1044, 9582, 26641, -2411, -1043, 9571, 26651, -2411,
727 -1042, 9561, 26659, -2410, -1040, 9551, 26667, -2410, -1039, 9540, 26677, -2410, -1038, 9530, 26686, -2410,
728 -1036, 9520, 26693, -2409, -1035, 9509, 26703, -2409, -1034, 9499, 26712, -2409, -1032, 9488, 26721, -2409,
729 -1031, 9478, 26729, -2408, -1030, 9468, 26738, -2408, -1028, 9457, 26747, -2408, -1027, 9447, 26755, -2407,
730 -1026, 9437, 26764, -2407, -1025, 9426, 26774, -2407, -1023, 9416, 26781, -2406, -1022, 9406, 26790, -2406,
731 -1021, 9395, 26800, -2406, -1019, 9385, 26808, -2406, -1018, 9375, 26816, -2405, -1017, 9364, 26826, -2405,
732 -1015, 9354, 26834, -2405, -1014, 9344, 26842, -2404, -1013, 9333, 26852, -2404, -1011, 9323, 26860, -2404,
733 -1010, 9313, 26868, -2403, -1009, 9302, 26878, -2403, -1007, 9292, 26886, -2403, -1006, 9282, 26894, -2402,
734 -1005, 9271, 26904, -2402, -1003, 9261, 26912, -2402, -1002, 9251, 26921, -2402, -1001, 9240, 26930, -2401,
735 -1000, 9230, 26939, -2401, -998, 9220, 26947, -2401, -997, 9210, 26955, -2400, -996, 9199, 26965, -2400,
736 -994, 9189, 26972, -2399, -993, 9179, 26981, -2399, -992, 9168, 26991, -2399, -990, 9158, 26998, -2398,
737 -989, 9148, 27007, -2398, -988, 9138, 27016, -2398, -986, 9127, 27024, -2397, -985, 9117, 27033, -2397,
738 -984, 9107, 27042, -2397, -982, 9097, 27049, -2396, -981, 9086, 27059, -2396, -980, 9076, 27068, -2396,
739 -979, 9066, 27076, -2395, -977, 9056, 27084, -2395, -976, 9045, 27093, -2394, -975, 9035, 27102, -2394,
740 -973, 9025, 27110, -2394, -972, 9015, 27118, -2393, -971, 9004, 27128, -2393, -969, 8994, 27136, -2393,
741 -968, 8984, 27144, -2392, -967, 8974, 27153, -2392, -965, 8963, 27161, -2391, -964, 8953, 27170, -2391,
742 -963, 8943, 27179, -2391, -961, 8933, 27186, -2390, -960, 8923, 27195, -2390, -959, 8912, 27204, -2389,
743 -958, 8902, 27213, -2389, -956, 8892, 27221, -2389, -955, 8882, 27229, -2388, -954, 8872, 27238, -2388,
744 -952, 8861, 27246, -2387, -951, 8851, 27255, -2387, -950, 8841, 27264, -2387, -948, 8831, 27271, -2386,
745 -947, 8821, 27280, -2386, -946, 8810, 27289, -2385, -945, 8800, 27298, -2385, -943, 8790, 27305, -2384,
746 -942, 8780, 27314, -2384, -941, 8770, 27323, -2384, -939, 8759, 27331, -2383, -938, 8749, 27340, -2383,
747 -937, 8739, 27348, -2382, -935, 8729, 27356, -2382, -934, 8719, 27364, -2381, -933, 8709, 27373, -2381,
748 -932, 8699, 27382, -2381, -930, 8688, 27390, -2380, -929, 8678, 27399, -2380, -928, 8668, 27407, -2379,
749 -926, 8658, 27415, -2379, -925, 8648, 27423, -2378, -924, 8638, 27432, -2378, -922, 8628, 27439, -2377,
750 -921, 8617, 27449, -2377, -920, 8607, 27457, -2376, -919, 8597, 27466, -2376, -917, 8587, 27473, -2375,
751 -916, 8577, 27482, -2375, -915, 8567, 27490, -2374, -913, 8557, 27498, -2374, -912, 8547, 27507, -2374,
752 -911, 8536, 27516, -2373, -909, 8526, 27524, -2373, -908, 8516, 27532, -2372, -907, 8506, 27541, -2372,
753 -906, 8496, 27549, -2371, -904, 8486, 27557, -2371, -903, 8476, 27565, -2370, -902, 8466, 27574, -2370,
754 -900, 8456, 27581, -2369, -899, 8446, 27590, -2369, -898, 8436, 27598, -2368, -896, 8425, 27607, -2368,
755 -895, 8415, 27615, -2367, -894, 8405, 27624, -2367, -893, 8395, 27632, -2366, -891, 8385, 27639, -2365,
756 -890, 8375, 27648, -2365, -889, 8365, 27656, -2364, -887, 8355, 27664, -2364, -886, 8345, 27672, -2363,
757 -885, 8335, 27681, -2363, -884, 8325, 27689, -2362, -882, 8315, 27697, -2362, -881, 8305, 27705, -2361,
758 -880, 8295, 27714, -2361, -878, 8285, 27721, -2360, -877, 8275, 27730, -2360, -876, 8265, 27738, -2359,
759 -875, 8255, 27747, -2359, -873, 8245, 27754, -2358, -872, 8235, 27762, -2357, -871, 8225, 27771, -2357,
760 -869, 8215, 27778, -2356, -868, 8205, 27787, -2356, -867, 8195, 27795, -2355, -866, 8185, 27804, -2355,
761 -864, 8175, 27811, -2354, -863, 8165, 27819, -2353, -862, 8155, 27828, -2353, -860, 8145, 27835, -2352,
762 -859, 8135, 27844, -2352, -858, 8125, 27852, -2351, -857, 8115, 27861, -2351, -855, 8105, 27868, -2350,
763 -854, 8095, 27876, -2349, -853, 8085, 27885, -2349, -851, 8075, 27892, -2348, -850, 8065, 27901, -2348,
764 -849, 8055, 27909, -2347, -848, 8045, 27917, -2346, -846, 8035, 27925, -2346, -845, 8025, 27933, -2345,
765 -844, 8015, 27942, -2345, -843, 8005, 27950, -2344, -841, 7995, 27957, -2343, -840, 7985, 27966, -2343,
766 -839, 7975, 27974, -2342, -837, 7965, 27982, -2342, -836, 7955, 27990, -2341, -835, 7945, 27998, -2340,
767 -834, 7936, 28006, -2340, -832, 7926, 28013, -2339, -831, 7916, 28021, -2338, -830, 7906, 28030, -2338,
768 -829, 7896, 28038, -2337, -827, 7886, 28046, -2337, -826, 7876, 28054, -2336, -825, 7866, 28062, -2335,
769 -823, 7856, 28070, -2335, -822, 7846, 28078, -2334, -821, 7836, 28086, -2333, -820, 7827, 28094, -2333,
770 -818, 7817, 28101, -2332, -817, 7807, 28109, -2331, -816, 7797, 28118, -2331, -815, 7787, 28126, -2330,
771 -813, 7777, 28133, -2329, -812, 7767, 28142, -2329, -811, 7757, 28150, -2328, -810, 7748, 28157, -2327,
772 -808, 7738, 28165, -2327, -807, 7728, 28173, -2326, -806, 7718, 28181, -2325, -804, 7708, 28189, -2325,
773 -803, 7698, 28197, -2324, -802, 7688, 28205, -2323, -801, 7679, 28213, -2323, -799, 7669, 28220, -2322,
774 -798, 7659, 28228, -2321, -797, 7649, 28237, -2321, -796, 7639, 28245, -2320, -794, 7629, 28252, -2319,
775 -793, 7620, 28260, -2319, -792, 7610, 28268, -2318, -791, 7600, 28276, -2317, -789, 7590, 28283, -2316,
776 -788, 7580, 28292, -2316, -787, 7571, 28299, -2315, -786, 7561, 28307, -2314, -784, 7551, 28315, -2314,
777 -783, 7541, 28323, -2313, -782, 7531, 28331, -2312, -781, 7522, 28338, -2311, -779, 7512, 28346, -2311,
778 -778, 7502, 28354, -2310, -777, 7492, 28362, -2309, -776, 7483, 28369, -2308, -774, 7473, 28377, -2308,
779 -773, 7463, 28385, -2307, -772, 7453, 28393, -2306, -771, 7444, 28400, -2305, -769, 7434, 28408, -2305,
780 -768, 7424, 28416, -2304, -767, 7414, 28424, -2303, -766, 7405, 28431, -2302, -764, 7395, 28439, -2302,
781 -763, 7385, 28447, -2301, -762, 7375, 28455, -2300, -761, 7366, 28462, -2299, -759, 7356, 28470, -2299,
782 -758, 7346, 28478, -2298, -757, 7336, 28486, -2297, -756, 7327, 28493, -2296, -754, 7317, 28501, -2296,
783 -753, 7307, 28509, -2295, -752, 7298, 28516, -2294, -751, 7288, 28524, -2293, -749, 7278, 28531, -2292,
784 -748, 7268, 28540, -2292, -747, 7259, 28547, -2291, -746, 7249, 28555, -2290, -744, 7239, 28562, -2289,
785 -743, 7230, 28570, -2289, -742, 7220, 28578, -2288, -741, 7210, 28586, -2287, -739, 7201, 28592, -2286,
786 -738, 7191, 28600, -2285, -737, 7181, 28608, -2284, -736, 7172, 28616, -2284, -734, 7162, 28623, -2283,
787 -733, 7152, 28631, -2282, -732, 7143, 28638, -2281, -731, 7133, 28646, -2280, -729, 7123, 28654, -2280,
788 -728, 7114, 28661, -2279, -727, 7104, 28669, -2278, -726, 7095, 28676, -2277, -725, 7085, 28684, -2276,
789 -723, 7075, 28691, -2275, -722, 7066, 28699, -2275, -721, 7056, 28707, -2274, -720, 7046, 28715, -2273,
790 -718, 7037, 28721, -2272, -717, 7027, 28729, -2271, -716, 7018, 28736, -2270, -715, 7008, 28744, -2269,
791 -713, 6998, 28752, -2269, -712, 6989, 28759, -2268, -711, 6979, 28767, -2267, -710, 6970, 28774, -2266,
792 -709, 6960, 28782, -2265, -707, 6950, 28789, -2264, -706, 6941, 28796, -2263, -705, 6931, 28805, -2263,
793 -704, 6922, 28812, -2262, -702, 6912, 28819, -2261, -701, 6903, 28826, -2260, -700, 6893, 28834, -2259,
794 -699, 6883, 28842, -2258, -698, 6874, 28849, -2257, -696, 6864, 28856, -2256, -695, 6855, 28863, -2255,
795 -694, 6845, 28872, -2255, -693, 6836, 28879, -2254, -691, 6826, 28886, -2253, -690, 6817, 28893, -2252,
796 -689, 6807, 28901, -2251, -688, 6798, 28908, -2250, -687, 6788, 28916, -2249, -685, 6779, 28922, -2248,
797 -684, 6769, 28930, -2247, -683, 6760, 28937, -2246, -682, 6750, 28945, -2245, -681, 6741, 28953, -2245,
798 -679, 6731, 28960, -2244, -678, 6722, 28967, -2243, -677, 6712, 28975, -2242, -676, 6703, 28982, -2241,
799 -675, 6693, 28990, -2240, -673, 6684, 28996, -2239, -672, 6674, 29004, -2238, -671, 6665, 29011, -2237,
800 -670, 6655, 29019, -2236, -668, 6646, 29025, -2235, -667, 6636, 29033, -2234, -666, 6627, 29040, -2233,
801 -665, 6617, 29048, -2232, -664, 6608, 29055, -2231, -662, 6599, 29061, -2230, -661, 6589, 29069, -2229,
802 -660, 6580, 29076, -2228, -659, 6570, 29084, -2227, -658, 6561, 29091, -2226, -656, 6551, 29098, -2225,
803 -655, 6542, 29105, -2224, -654, 6533, 29113, -2224, -653, 6523, 29121, -2223, -652, 6514, 29128, -2222,
804 -650, 6504, 29135, -2221, -649, 6495, 29142, -2220, -648, 6486, 29149, -2219, -647, 6476, 29157, -2218,
805 -646, 6467, 29164, -2217, -644, 6457, 29171, -2216, -643, 6448, 29178, -2215, -642, 6439, 29185, -2214,
806 -641, 6429, 29193, -2213, -640, 6420, 29200, -2212, -639, 6411, 29207, -2211, -637, 6401, 29213, -2209,
807 -636, 6392, 29220, -2208, -635, 6382, 29228, -2207, -634, 6373, 29235, -2206, -633, 6364, 29242, -2205,
808 -631, 6354, 29249, -2204, -630, 6345, 29256, -2203, -629, 6336, 29263, -2202, -628, 6326, 29271, -2201,
809 -627, 6317, 29278, -2200, -625, 6308, 29284, -2199, -624, 6298, 29292, -2198, -623, 6289, 29299, -2197,
810 -622, 6280, 29306, -2196, -621, 6271, 29313, -2195, -620, 6261, 29321, -2194, -618, 6252, 29327, -2193,
811 -617, 6243, 29334, -2192, -616, 6233, 29342, -2191, -615, 6224, 29349, -2190, -614, 6215, 29356, -2189,
812 -613, 6206, 29363, -2188, -611, 6196, 29369, -2186, -610, 6187, 29376, -2185, -609, 6178, 29383, -2184,
813 -608, 6168, 29391, -2183, -607, 6159, 29398, -2182, -605, 6150, 29404, -2181, -604, 6141, 29411, -2180,
814 -603, 6131, 29419, -2179, -602, 6122, 29426, -2178, -601, 6113, 29433, -2177, -600, 6104, 29440, -2176,
815 -598, 6094, 29446, -2174, -597, 6085, 29453, -2173, -596, 6076, 29460, -2172, -595, 6067, 29467, -2171,
816 -594, 6058, 29474, -2170, -593, 6048, 29482, -2169, -591, 6039, 29488, -2168, -590, 6030, 29495, -2167,
817 -589, 6021, 29501, -2165, -588, 6012, 29508, -2164, -587, 6002, 29516, -2163, -586, 5993, 29523, -2162,
818 -584, 5984, 29529, -2161, -583, 5975, 29536, -2160, -582, 5966, 29543, -2159, -581, 5956, 29551, -2158,
819 -580, 5947, 29557, -2156, -579, 5938, 29564, -2155, -578, 5929, 29571, -2154, -576, 5920, 29577, -2153,
820 -575, 5911, 29584, -2152, -574, 5902, 29591, -2151, -573, 5892, 29598, -2149, -572, 5883, 29605, -2148,
821 -571, 5874, 29612, -2147, -569, 5865, 29618, -2146, -568, 5856, 29625, -2145, -567, 5847, 29632, -2144,
822 -566, 5838, 29638, -2142, -565, 5829, 29645, -2141, -564, 5819, 29653, -2140, -563, 5810, 29660, -2139,
823 -561, 5801, 29666, -2138, -560, 5792, 29672, -2136, -559, 5783, 29679, -2135, -558, 5774, 29686, -2134,
824 -557, 5765, 29693, -2133, -556, 5756, 29700, -2132, -555, 5747, 29706, -2130, -553, 5738, 29712, -2129,
825 -552, 5729, 29719, -2128, -551, 5719, 29727, -2127, -550, 5710, 29734, -2126, -549, 5701, 29740, -2124,
826 -548, 5692, 29747, -2123, -547, 5683, 29754, -2122, -545, 5674, 29760, -2121, -544, 5665, 29767, -2120,
827 -543, 5656, 29773, -2118, -542, 5647, 29780, -2117, -541, 5638, 29787, -2116, -540, 5629, 29794, -2115,
828 -539, 5620, 29800, -2113, -538, 5611, 29807, -2112, -536, 5602, 29813, -2111, -535, 5593, 29820, -2110,
829 -534, 5584, 29826, -2108, -533, 5575, 29833, -2107, -532, 5566, 29840, -2106, -531, 5557, 29847, -2105,
830 -530, 5548, 29853, -2103, -529, 5539, 29860, -2102, -527, 5530, 29866, -2101, -526, 5521, 29872, -2099,
831 -525, 5512, 29879, -2098, -524, 5503, 29886, -2097, -523, 5494, 29893, -2096, -522, 5485, 29899, -2094,
832 -521, 5476, 29906, -2093, -520, 5467, 29913, -2092, -518, 5458, 29918, -2090, -517, 5450, 29924, -2089,
833 -516, 5441, 29931, -2088, -515, 5432, 29938, -2087, -514, 5423, 29944, -2085, -513, 5414, 29951, -2084,
834 -512, 5405, 29958, -2083, -511, 5396, 29964, -2081, -510, 5387, 29971, -2080, -508, 5378, 29977, -2079,
835 -507, 5369, 29983, -2077, -506, 5360, 29990, -2076, -505, 5352, 29996, -2075, -504, 5343, 30002, -2073,
836 -503, 5334, 30009, -2072, -502, 5325, 30016, -2071, -501, 5316, 30022, -2069, -500, 5307, 30029, -2068,
837 -499, 5298, 30036, -2067, -497, 5289, 30041, -2065, -496, 5281, 30047, -2064, -495, 5272, 30054, -2063,
838 -494, 5263, 30060, -2061, -493, 5254, 30067, -2060, -492, 5245, 30074, -2059, -491, 5236, 30080, -2057,
839 -490, 5228, 30086, -2056, -489, 5219, 30093, -2055, -488, 5210, 30099, -2053, -486, 5201, 30105, -2052,
840 -485, 5192, 30111, -2050, -484, 5184, 30117, -2049, -483, 5175, 30124, -2048, -482, 5166, 30130, -2046,
841 -481, 5157, 30137, -2045, -480, 5148, 30143, -2043, -479, 5140, 30149, -2042, -478, 5131, 30156, -2041,
842 -477, 5122, 30162, -2039, -476, 5113, 30169, -2038, -474, 5104, 30174, -2036, -473, 5096, 30180, -2035,
843 -472, 5087, 30187, -2034, -471, 5078, 30193, -2032, -470, 5069, 30200, -2031, -469, 5061, 30205, -2029,
844 -468, 5052, 30212, -2028, -467, 5043, 30219, -2027, -466, 5035, 30224, -2025, -465, 5026, 30231, -2024,
845 -464, 5017, 30237, -2022, -463, 5008, 30244, -2021, -462, 5000, 30249, -2019, -460, 4991, 30255, -2018,
846 -459, 4982, 30262, -2017, -458, 4974, 30267, -2015, -457, 4965, 30274, -2014, -456, 4956, 30280, -2012,
847 -455, 4948, 30286, -2011, -454, 4939, 30292, -2009, -453, 4930, 30299, -2008, -452, 4921, 30305, -2006,
848 -451, 4913, 30311, -2005, -450, 4904, 30317, -2003, -449, 4896, 30323, -2002, -448, 4887, 30329, -2000,
849 -447, 4878, 30336, -1999, -446, 4870, 30342, -1998, -444, 4861, 30347, -1996, -443, 4852, 30354, -1995,
850 -442, 4844, 30359, -1993, -441, 4835, 30366, -1992, -440, 4826, 30372, -1990, -439, 4818, 30378, -1989,
851 -438, 4809, 30384, -1987, -437, 4801, 30390, -1986, -436, 4792, 30396, -1984, -435, 4783, 30403, -1983,
852 -434, 4775, 30408, -1981, -433, 4766, 30415, -1980, -432, 4758, 30420, -1978, -431, 4749, 30427, -1977,
853 -430, 4741, 30432, -1975, -429, 4732, 30438, -1973, -428, 4723, 30445, -1972, -427, 4715, 30450, -1970,
854 -426, 4706, 30457, -1969, -425, 4698, 30462, -1967, -423, 4689, 30468, -1966, -422, 4681, 30473, -1964,
855 -421, 4672, 30480, -1963, -420, 4664, 30485, -1961, -419, 4655, 30492, -1960, -418, 4647, 30497, -1958,
856 -417, 4638, 30503, -1956, -416, 4630, 30509, -1955, -415, 4621, 30515, -1953, -414, 4613, 30521, -1952,
857 -413, 4604, 30527, -1950, -412, 4596, 30533, -1949, -411, 4587, 30539, -1947, -410, 4579, 30545, -1946,
858 -409, 4570, 30551, -1944, -408, 4562, 30556, -1942, -407, 4553, 30563, -1941, -406, 4545, 30568, -1939,
859 -405, 4536, 30575, -1938, -404, 4528, 30580, -1936, -403, 4519, 30586, -1934, -402, 4511, 30592, -1933,
860 -401, 4502, 30598, -1931, -400, 4494, 30604, -1930, -399, 4486, 30609, -1928, -398, 4477, 30615, -1926,
861 -397, 4469, 30621, -1925, -396, 4460, 30627, -1923, -395, 4452, 30633, -1922, -394, 4443, 30639, -1920,
862 -393, 4435, 30644, -1918, -392, 4427, 30650, -1917, -391, 4418, 30656, -1915, -390, 4410, 30661, -1913,
863 -389, 4402, 30667, -1912, -388, 4393, 30673, -1910, -387, 4385, 30678, -1908, -386, 4376, 30685, -1907,
864 -385, 4368, 30690, -1905, -384, 4360, 30695, -1903, -383, 4351, 30702, -1902, -382, 4343, 30707, -1900,
865 -381, 4335, 30713, -1899, -380, 4326, 30719, -1897, -379, 4318, 30724, -1895, -378, 4310, 30730, -1894,
866 -377, 4301, 30736, -1892, -376, 4293, 30741, -1890, -375, 4285, 30746, -1888, -374, 4276, 30753, -1887,
867 -373, 4268, 30758, -1885, -372, 4260, 30763, -1883, -371, 4252, 30769, -1882, -370, 4243, 30775, -1880,
868 -369, 4235, 30780, -1878, -368, 4227, 30786, -1877, -367, 4218, 30792, -1875, -366, 4210, 30797, -1873,
869 -365, 4202, 30803, -1872, -364, 4194, 30808, -1870, -363, 4185, 30814, -1868, -362, 4177, 30819, -1866,
870 -361, 4169, 30825, -1865, -360, 4161, 30830, -1863, -359, 4152, 30836, -1861, -358, 4144, 30841, -1859,
871 -357, 4136, 30847, -1858, -356, 4128, 30852, -1856, -355, 4119, 30858, -1854, -354, 4111, 30864, -1853,
872 -353, 4103, 30869, -1851, -352, 4095, 30874, -1849, -351, 4087, 30879, -1847, -350, 4079, 30885, -1846,
873 -349, 4070, 30891, -1844, -348, 4062, 30896, -1842, -347, 4054, 30901, -1840, -346, 4046, 30907, -1839,
874 -345, 4038, 30912, -1837, -344, 4029, 30918, -1835, -343, 4021, 30923, -1833, -342, 4013, 30928, -1831,
875 -341, 4005, 30934, -1830, -340, 3997, 30939, -1828, -339, 3989, 30944, -1826, -338, 3981, 30949, -1824,
876 -338, 3973, 30956, -1823, -337, 3964, 30962, -1821, -336, 3956, 30967, -1819, -335, 3948, 30972, -1817,
877 -334, 3940, 30977, -1815, -333, 3932, 30982, -1813, -332, 3924, 30988, -1812, -331, 3916, 30993, -1810,
878 -330, 3908, 30998, -1808, -329, 3900, 31003, -1806, -328, 3892, 31008, -1804, -327, 3883, 31015, -1803,
879 -326, 3875, 31020, -1801, -325, 3867, 31025, -1799, -324, 3859, 31030, -1797, -323, 3851, 31035, -1795,
880 -322, 3843, 31040, -1793, -321, 3835, 31046, -1792, -320, 3827, 31051, -1790, -320, 3819, 31057, -1788,
881 -319, 3811, 31062, -1786, -318, 3803, 31067, -1784, -317, 3795, 31072, -1782, -316, 3787, 31077, -1780,
882 -315, 3779, 31083, -1779, -314, 3771, 31088, -1777, -313, 3763, 31093, -1775, -312, 3755, 31098, -1773,
883 -311, 3747, 31103, -1771, -310, 3739, 31108, -1769, -309, 3731, 31113, -1767, -308, 3723, 31118, -1765,
884 -307, 3715, 31124, -1764, -306, 3707, 31129, -1762, -306, 3699, 31135, -1760, -305, 3691, 31140, -1758,
885 -304, 3683, 31145, -1756, -303, 3676, 31149, -1754, -302, 3668, 31154, -1752, -301, 3660, 31159, -1750,
886 -300, 3652, 31164, -1748, -299, 3644, 31169, -1746, -298, 3636, 31175, -1745, -297, 3628, 31180, -1743,
887 -296, 3620, 31185, -1741, -296, 3612, 31191, -1739, -295, 3604, 31196, -1737, -294, 3596, 31201, -1735,
888 -293, 3589, 31205, -1733, -292, 3581, 31210, -1731, -291, 3573, 31215, -1729, -290, 3565, 31220, -1727,
889 -289, 3557, 31225, -1725, -288, 3549, 31230, -1723, -287, 3541, 31235, -1721, -286, 3534, 31239, -1719,
890 -286, 3526, 31245, -1717, -285, 3518, 31250, -1715, -284, 3510, 31255, -1713, -283, 3502, 31260, -1711,
891 -282, 3495, 31264, -1709, -281, 3487, 31270, -1708, -280, 3479, 31275, -1706, -279, 3471, 31280, -1704,
892 -278, 3463, 31285, -1702, -278, 3456, 31290, -1700, -277, 3448, 31295, -1698, -276, 3440, 31300, -1696,
893 -275, 3432, 31305, -1694, -274, 3424, 31310, -1692, -273, 3417, 31314, -1690, -272, 3409, 31319, -1688,
894 -271, 3401, 31324, -1686, -270, 3393, 31329, -1684, -270, 3386, 31334, -1682, -269, 3378, 31339, -1680,
895 -268, 3370, 31343, -1677, -267, 3363, 31347, -1675, -266, 3355, 31352, -1673, -265, 3347, 31357, -1671,
896 -264, 3339, 31362, -1669, -264, 3332, 31367, -1667, -263, 3324, 31372, -1665, -262, 3316, 31377, -1663,
897 -261, 3309, 31381, -1661, -260, 3301, 31386, -1659, -259, 3293, 31391, -1657, -258, 3286, 31395, -1655,
898 -257, 3278, 31400, -1653, -257, 3270, 31406, -1651, -256, 3263, 31410, -1649, -255, 3255, 31415, -1647,
899 -254, 3247, 31420, -1645, -253, 3240, 31424, -1643, -252, 3232, 31429, -1641, -251, 3224, 31433, -1638,
900 -251, 3217, 31438, -1636, -250, 3209, 31443, -1634, -249, 3202, 31447, -1632, -248, 3194, 31452, -1630,
901 -247, 3186, 31457, -1628, -246, 3179, 31461, -1626, -246, 3171, 31467, -1624, -245, 3164, 31471, -1622,
902 -244, 3156, 31476, -1620, -243, 3149, 31479, -1617, -242, 3141, 31484, -1615, -241, 3133, 31489, -1613,
903 -240, 3126, 31493, -1611, -240, 3118, 31499, -1609, -239, 3111, 31503, -1607, -238, 3103, 31508, -1605,
904 -237, 3096, 31512, -1603, -236, 3088, 31516, -1600, -235, 3081, 31520, -1598, -235, 3073, 31526, -1596,
905 -234, 3066, 31530, -1594, -233, 3058, 31535, -1592, -232, 3051, 31539, -1590, -231, 3043, 31544, -1588,
906 -231, 3036, 31548, -1585, -230, 3028, 31553, -1583, -229, 3021, 31557, -1581, -228, 3013, 31562, -1579,
907 -227, 3006, 31566, -1577, -226, 2998, 31571, -1575, -226, 2991, 31575, -1572, -225, 2983, 31580, -1570,
908 -224, 2976, 31584, -1568, -223, 2969, 31588, -1566, -222, 2961, 31593, -1564, -222, 2954, 31597, -1561,
909 -221, 2946, 31602, -1559, -220, 2939, 31606, -1557, -219, 2931, 31611, -1555, -218, 2924, 31615, -1553,
910 -218, 2917, 31619, -1550, -217, 2909, 31624, -1548, -216, 2902, 31628, -1546, -215, 2895, 31632, -1544,
911 -214, 2887, 31637, -1542, -214, 2880, 31641, -1539, -213, 2872, 31646, -1537, -212, 2865, 31650, -1535,
912 -211, 2858, 31654, -1533, -210, 2850, 31658, -1530, -210, 2843, 31663, -1528, -209, 2836, 31667, -1526,
913 -208, 2828, 31672, -1524, -207, 2821, 31675, -1521, -206, 2814, 31679, -1519, -206, 2806, 31685, -1517,
914 -205, 2799, 31689, -1515, -204, 2792, 31692, -1512, -203, 2785, 31696, -1510, -203, 2777, 31702, -1508,
915 -202, 2770, 31706, -1506, -201, 2763, 31709, -1503, -200, 2755, 31714, -1501, -199, 2748, 31718, -1499,
916 -199, 2741, 31722, -1496, -198, 2734, 31726, -1494, -197, 2726, 31731, -1492, -196, 2719, 31734, -1489,
917 -196, 2712, 31739, -1487, -195, 2705, 31743, -1485, -194, 2697, 31748, -1483, -193, 2690, 31751, -1480,
918 -192, 2683, 31755, -1478, -192, 2676, 31760, -1476, -191, 2669, 31763, -1473, -190, 2661, 31768, -1471,
919 -189, 2654, 31772, -1469, -189, 2647, 31776, -1466, -188, 2640, 31780, -1464, -187, 2633, 31784, -1462,
920 -186, 2626, 31787, -1459, -186, 2618, 31793, -1457, -185, 2611, 31797, -1455, -184, 2604, 31800, -1452,
921 -183, 2597, 31804, -1450, -183, 2590, 31809, -1448, -182, 2583, 31812, -1445, -181, 2576, 31816, -1443,
922 -180, 2568, 31820, -1440, -180, 2561, 31825, -1438, -179, 2554, 31829, -1436, -178, 2547, 31832, -1433,
923 -177, 2540, 31836, -1431, -177, 2533, 31841, -1429, -176, 2526, 31844, -1426, -175, 2519, 31848, -1424,
924 -175, 2512, 31852, -1421, -174, 2505, 31856, -1419, -173, 2498, 31860, -1417, -172, 2491, 31863, -1414,
925 -172, 2483, 31869, -1412, -171, 2476, 31872, -1409, -170, 2469, 31876, -1407, -169, 2462, 31880, -1405,
926 -169, 2455, 31884, -1402, -168, 2448, 31888, -1400, -167, 2441, 31891, -1397, -167, 2434, 31896, -1395,
927 -166, 2427, 31899, -1392, -165, 2420, 31903, -1390, -164, 2413, 31907, -1388, -164, 2406, 31911, -1385,
928 -163, 2399, 31915, -1383, -162, 2392, 31918, -1380, -162, 2385, 31923, -1378, -161, 2378, 31926, -1375,
929 -160, 2371, 31930, -1373, -159, 2365, 31932, -1370, -159, 2358, 31937, -1368, -158, 2351, 31941, -1366,
930 -157, 2344, 31944, -1363, -157, 2337, 31949, -1361, -156, 2330, 31952, -1358, -155, 2323, 31956, -1356,
931 -155, 2316, 31960, -1353, -154, 2309, 31964, -1351, -153, 2302, 31967, -1348, -153, 2295, 31972, -1346,
932 -152, 2289, 31974, -1343, -151, 2282, 31978, -1341, -150, 2275, 31981, -1338, -150, 2268, 31986, -1336,
933 -149, 2261, 31989, -1333, -148, 2254, 31993, -1331, -148, 2247, 31997, -1328, -147, 2241, 32000, -1326,
934 -146, 2234, 32003, -1323, -146, 2227, 32008, -1321, -145, 2220, 32011, -1318, -144, 2213, 32014, -1315,
935 -144, 2206, 32019, -1313, -143, 2200, 32021, -1310, -142, 2193, 32025, -1308, -142, 2186, 32029, -1305,
936 -141, 2179, 32033, -1303, -140, 2172, 32036, -1300, -140, 2166, 32040, -1298, -139, 2159, 32043, -1295,
937 -138, 2152, 32047, -1293, -138, 2145, 32051, -1290, -137, 2139, 32053, -1287, -136, 2132, 32057, -1285,
938 -136, 2125, 32061, -1282, -135, 2118, 32065, -1280, -134, 2112, 32067, -1277, -134, 2105, 32071, -1274,
939 -133, 2098, 32075, -1272, -132, 2092, 32077, -1269, -132, 2085, 32082, -1267, -131, 2078, 32085, -1264,
940 -131, 2072, 32089, -1262, -130, 2065, 32092, -1259, -129, 2058, 32095, -1256, -129, 2051, 32100, -1254,
941 -128, 2045, 32102, -1251, -127, 2038, 32105, -1248, -127, 2032, 32109, -1246, -126, 2025, 32112, -1243,
942 -125, 2018, 32116, -1241, -125, 2012, 32119, -1238, -124, 2005, 32122, -1235, -123, 1998, 32126, -1233,
943 -123, 1992, 32129, -1230, -122, 1985, 32132, -1227, -122, 1979, 32136, -1225, -121, 1972, 32139, -1222,
944 -120, 1965, 32142, -1219, -120, 1959, 32146, -1217, -119, 1952, 32149, -1214, -119, 1946, 32152, -1211,
945 -118, 1939, 32156, -1209, -117, 1933, 32158, -1206, -117, 1926, 32162, -1203, -116, 1919, 32166, -1201,
946 -115, 1913, 32168, -1198, -115, 1906, 32172, -1195, -114, 1900, 32175, -1193, -114, 1893, 32179, -1190,
947 -113, 1887, 32181, -1187, -112, 1880, 32185, -1185, -112, 1874, 32188, -1182, -111, 1867, 32191, -1179,
948 -111, 1861, 32194, -1176, -110, 1854, 32198, -1174, -109, 1848, 32200, -1171, -109, 1841, 32204, -1168,
949 -108, 1835, 32207, -1166, -108, 1828, 32211, -1163, -107, 1822, 32213, -1160, -106, 1816, 32215, -1157,
950 -106, 1809, 32220, -1155, -105, 1803, 32222, -1152, -105, 1796, 32226, -1149, -104, 1790, 32228, -1146,
951 -104, 1783, 32233, -1144, -103, 1777, 32235, -1141, -102, 1771, 32237, -1138, -102, 1764, 32241, -1135,
952 -101, 1758, 32244, -1133, -101, 1751, 32248, -1130, -100, 1745, 32250, -1127, -99, 1739, 32252, -1124,
953 -99, 1732, 32256, -1121, -98, 1726, 32259, -1119, -98, 1720, 32262, -1116, -97, 1713, 32265, -1113,
954 -97, 1707, 32268, -1110, -96, 1701, 32270, -1107, -96, 1694, 32275, -1105, -95, 1688, 32277, -1102,
955 -94, 1682, 32279, -1099, -94, 1675, 32283, -1096, -93, 1669, 32285, -1093, -93, 1663, 32289, -1091,
956 -92, 1657, 32291, -1088, -92, 1650, 32295, -1085, -91, 1644, 32297, -1082, -91, 1638, 32300, -1079,
957 -90, 1631, 32303, -1076, -89, 1625, 32306, -1074, -89, 1619, 32309, -1071, -88, 1613, 32311, -1068,
958 -88, 1607, 32314, -1065, -87, 1600, 32317, -1062, -87, 1594, 32320, -1059, -86, 1588, 32323, -1057,
959 -86, 1582, 32326, -1054, -85, 1575, 32329, -1051, -85, 1569, 32332, -1048, -84, 1563, 32334, -1045,
960 -84, 1557, 32337, -1042, -83, 1551, 32339, -1039, -82, 1545, 32341, -1036, -82, 1538, 32346, -1034,
961 -81, 1532, 32348, -1031, -81, 1526, 32351, -1028, -80, 1520, 32353, -1025, -80, 1514, 32356, -1022,
962 -79, 1508, 32358, -1019, -79, 1502, 32361, -1016, -78, 1495, 32364, -1013, -78, 1489, 32367, -1010,
963 -77, 1483, 32369, -1007, -77, 1477, 32372, -1004, -76, 1471, 32375, -1002, -76, 1465, 32378, -999,
964 -75, 1459, 32380, -996, -75, 1453, 32383, -993, -74, 1447, 32385, -990, -74, 1441, 32388, -987,
965 -73, 1435, 32390, -984, -73, 1429, 32393, -981, -72, 1423, 32395, -978, -72, 1417, 32398, -975,
966 -71, 1411, 32400, -972, -71, 1405, 32403, -969, -70, 1399, 32405, -966, -70, 1393, 32408, -963,
967 -69, 1387, 32410, -960, -69, 1381, 32413, -957, -68, 1375, 32415, -954, -68, 1369, 32418, -951,
968 -67, 1363, 32420, -948, -67, 1357, 32423, -945, -66, 1351, 32425, -942, -66, 1345, 32428, -939,
969 -66, 1339, 32431, -936, -65, 1333, 32433, -933, -65, 1327, 32436, -930, -64, 1321, 32438, -927,
970 -64, 1315, 32441, -924, -63, 1309, 32443, -921, -63, 1303, 32446, -918, -62, 1297, 32448, -915,
971 -62, 1291, 32451, -912, -61, 1286, 32452, -909, -61, 1280, 32455, -906, -60, 1274, 32457, -903,
972 -60, 1268, 32460, -900, -60, 1262, 32463, -897, -59, 1256, 32465, -894, -59, 1250, 32468, -891,
973 -58, 1245, 32469, -888, -58, 1239, 32472, -885, -57, 1233, 32474, -882, -57, 1227, 32477, -879,
974 -56, 1221, 32479, -876, -56, 1216, 32480, -872, -56, 1210, 32483, -869, -55, 1204, 32485, -866,
975 -55, 1198, 32488, -863, -54, 1192, 32490, -860, -54, 1187, 32492, -857, -53, 1181, 32494, -854,
976 -53, 1175, 32497, -851, -53, 1169, 32500, -848, -52, 1164, 32501, -845, -52, 1158, 32503, -841,
977 -51, 1152, 32505, -838, -51, 1146, 32508, -835, -50, 1141, 32509, -832, -50, 1135, 32512, -829,
978 -50, 1129, 32515, -826, -49, 1124, 32516, -823, -49, 1118, 32519, -820, -48, 1112, 32520, -816,
979 -48, 1107, 32522, -813, -48, 1101, 32525, -810, -47, 1095, 32527, -807, -47, 1090, 32529, -804,
980 -46, 1084, 32531, -801, -46, 1078, 32534, -798, -46, 1073, 32535, -794, -45, 1067, 32537, -791,
981 -45, 1061, 32540, -788, -44, 1056, 32541, -785, -44, 1050, 32544, -782, -44, 1045, 32545, -778,
982 -43, 1039, 32547, -775, -43, 1033, 32550, -772, -42, 1028, 32551, -769, -42, 1022, 32554, -766,
983 -42, 1017, 32555, -762, -41, 1011, 32557, -759, -41, 1006, 32559, -756, -40, 1000, 32561, -753,
984 -40, 995, 32563, -750, -40, 989, 32565, -746, -39, 984, 32566, -743, -39, 978, 32569, -740,
985 -39, 972, 32572, -737, -38, 967, 32573, -734, -38, 961, 32575, -730, -38, 956, 32577, -727,
986 -37, 951, 32578, -724, -37, 945, 32581, -721, -36, 940, 32581, -717, -36, 934, 32584, -714,
987 -36, 929, 32586, -711, -35, 923, 32588, -708, -35, 918, 32589, -704, -35, 912, 32592, -701,
988 -34, 907, 32593, -698, -34, 902, 32594, -694, -34, 896, 32597, -691, -33, 891, 32598, -688,
989 -33, 885, 32601, -685, -33, 880, 32602, -681, -32, 875, 32603, -678, -32, 869, 32606, -675,
990 -32, 864, 32607, -671, -31, 858, 32609, -668, -31, 853, 32611, -665, -31, 848, 32612, -661,
991 -30, 842, 32614, -658, -30, 837, 32616, -655, -30, 832, 32617, -651, -29, 826, 32619, -648,
992 -29, 821, 32621, -645, -29, 816, 32622, -641, -28, 810, 32624, -638, -28, 805, 32626, -635,
993 -28, 800, 32627, -631, -27, 795, 32628, -628, -27, 789, 32631, -625, -27, 784, 32632, -621,
994 -26, 779, 32633, -618, -26, 774, 32635, -615, -26, 768, 32637, -611, -26, 763, 32639, -608,
995 -25, 758, 32640, -605, -25, 753, 32641, -601, -25, 747, 32644, -598, -24, 742, 32644, -594,
996 -24, 737, 32646, -591, -24, 732, 32648, -588, -23, 727, 32648, -584, -23, 722, 32650, -581,
997 -23, 716, 32652, -577, -23, 711, 32654, -574, -22, 706, 32655, -571, -22, 701, 32656, -567,
998 -22, 696, 32658, -564, -21, 691, 32658, -560, -21, 685, 32661, -557, -21, 680, 32662, -553,
999 -21, 675, 32664, -550, -20, 670, 32665, -547, -20, 665, 32666, -543, -20, 660, 32668, -540,
1000 -20, 655, 32669, -536, -19, 650, 32670, -533, -19, 645, 32671, -529, -19, 640, 32673, -526,
1001 -18, 635, 32673, -522, -18, 630, 32675, -519, -18, 625, 32676, -515, -18, 619, 32679, -512,
1002 -17, 614, 32679, -508, -17, 609, 32681, -505, -17, 604, 32683, -502, -17, 599, 32684, -498,
1003 -16, 594, 32685, -495, -16, 589, 32686, -491, -16, 584, 32688, -488, -16, 579, 32689, -484,
1004 -16, 575, 32690, -481, -15, 570, 32690, -477, -15, 565, 32691, -473, -15, 560, 32693, -470,
1005 -15, 555, 32694, -466, -14, 550, 32695, -463, -14, 545, 32696, -459, -14, 540, 32698, -456,
1006 -14, 535, 32699, -452, -13, 530, 32700, -449, -13, 525, 32701, -445, -13, 520, 32703, -442,
1007 -13, 515, 32704, -438, -13, 511, 32705, -435, -12, 506, 32705, -431, -12, 501, 32706, -427,
1008 -12, 496, 32708, -424, -12, 491, 32709, -420, -11, 486, 32710, -417, -11, 481, 32711, -413,
1009 -11, 477, 32712, -410, -11, 472, 32713, -406, -11, 467, 32714, -402, -10, 462, 32715, -399,
1010 -10, 457, 32716, -395, -10, 453, 32717, -392, -10, 448, 32718, -388, -10, 443, 32719, -384,
1011 -10, 438, 32721, -381, -9, 434, 32720, -377, -9, 429, 32721, -373, -9, 424, 32723, -370,
1012 -9, 419, 32724, -366, -9, 415, 32725, -363, -8, 410, 32725, -359, -8, 405, 32726, -355,
1013 -8, 401, 32727, -352, -8, 396, 32728, -348, -8, 391, 32729, -344, -8, 386, 32731, -341,
1014 -7, 382, 32730, -337, -7, 377, 32731, -333, -7, 372, 32733, -330, -7, 368, 32733, -326,
1015 -7, 363, 32734, -322, -7, 359, 32735, -319, -6, 354, 32735, -315, -6, 349, 32736, -311,
1016 -6, 345, 32737, -308, -6, 340, 32738, -304, -6, 335, 32739, -300, -6, 331, 32740, -297,
1017 -6, 326, 32741, -293, -5, 322, 32740, -289, -5, 317, 32741, -285, -5, 313, 32742, -282,
1018 -5, 308, 32743, -278, -5, 303, 32744, -274, -5, 299, 32745, -271, -5, 294, 32746, -267,
1019 -4, 290, 32745, -263, -4, 285, 32746, -259, -4, 281, 32747, -256, -4, 276, 32748, -252,
1020 -4, 272, 32748, -248, -4, 267, 32749, -244, -4, 263, 32750, -241, -4, 258, 32751, -237,
1021 -3, 254, 32750, -233, -3, 249, 32751, -229, -3, 245, 32751, -225, -3, 241, 32752, -222,
1022 -3, 236, 32753, -218, -3, 232, 32753, -214, -3, 227, 32754, -210, -3, 223, 32755, -207,
1023 -3, 218, 32756, -203, -3, 214, 32756, -199, -2, 210, 32755, -195, -2, 205, 32756, -191,
1024 -2, 201, 32757, -188, -2, 197, 32757, -184, -2, 192, 32758, -180, -2, 188, 32758, -176,
1025 -2, 184, 32758, -172, -2, 179, 32759, -168, -2, 175, 32760, -165, -2, 171, 32760, -161,
1026 -2, 166, 32761, -157, -1, 162, 32760, -153, -1, 158, 32760, -149, -1, 153, 32761, -145,
1027 -1, 149, 32761, -141, -1, 145, 32762, -138, -1, 140, 32763, -134, -1, 136, 32763, -130,
1028 -1, 132, 32763, -126, -1, 128, 32763, -122, -1, 123, 32764, -118, -1, 119, 32764, -114,
1029 -1, 115, 32764, -110, -1, 111, 32765, -107, -1, 107, 32765, -103, -1, 102, 32766, -99,
1030 -1, 98, 32766, -95, -1, 94, 32766, -91, 0, 90, 32765, -87, 0, 86, 32765, -83,
1031 0, 82, 32765, -79, 0, 77, 32766, -75, 0, 73, 32766, -71, 0, 69, 32766, -67,
1032 0, 65, 32767, -64, 0, 61, 32767, -60, 0, 57, 32767, -56, 0, 53, 32767, -52,
1033 0, 49, 32767, -48, 0, 44, 32767, -44, 0, 40, 32767, -40, 0, 36, 32767, -36,
1034 0, 32, 32767, -32, 0, 28, 32767, -28, 0, 24, 32767, -24, 0, 20, 32767, -20,
1035 0, 16, 32767, -16, 0, 12, 32767, -12, 0, 8, 32767, -8, 0, 4, 32767, -4
1036};
src/ft2_intrp_table.h+17−0
@@ -0,0 +1,17 @@
1#pragma once
2
3#include <stdint.h>
4
5// number of bits for fractional sample position in audio mixer
6#define FRAC_BITS 16
7
8#define CUBIC_WIDTH 4
9#define CUBIC_WIDTH_BITS 2
10#define CUBIC_PHASES 4096
11#define CUBIC_PHASES_BITS 12
12
13#define CUBIC_FSHIFT (FRAC_BITS-(CUBIC_PHASES_BITS+CUBIC_WIDTH_BITS))
14#define CUBIC_FMASK ((CUBIC_WIDTH*CUBIC_PHASES)-CUBIC_WIDTH)
15#define CUBIC_QUANTSHIFT 15
16
17extern const int16_t cubicSplineTable[CUBIC_WIDTH * CUBIC_PHASES];
src/ft2_mix.c+1−1
@@ -2,7 +2,7 @@ · 1 unmodified line
2#include <stdbool.h>2#include <stdbool.h>
3#include "ft2_mix.h"3#include "ft2_mix.h"
4#include "ft2_mix_macros.h"4#include "ft2_mix_macros.h"
5#include "ft2_tables.h"5#include "ft2_intrp_table.h"
6 6
7/*7/*
8** --------------------- 32-bit fixed-point audio channel mixer ---------------------8** --------------------- 32-bit fixed-point audio channel mixer ---------------------
src/ft2_mix_macros.h+4−4
@@ -106,15 +106,15 @@ · 105 unmodified lines
106// in: int32_t s0,s1,s2,s3 = -128..127 | f = 0..65535 (frac) | out: 16-bit s0 (will exceed 16-bits because of overshoot)106// in: int32_t s0,s1,s2,s3 = -128..127 | f = 0..65535 (frac) | out: 16-bit s0 (will exceed 16-bits because of overshoot)
107#define INTERPOLATE8(s0, s1, s2, s3, f) \107#define INTERPOLATE8(s0, s1, s2, s3, f) \
108{ \108{ \
109 const int16_t *t = fastSincTable + ((f >> 6) & 0x3FC); \109 const int16_t *t = cubicSplineTable + ((f >> CUBIC_FSHIFT) & CUBIC_FMASK); \
110 s0 = ((s0 * t[0]) + (s1 * t[1]) + (s2 * t[2]) + (s3 * t[3])) >> (FAST_SINC_TABLE_BITS - 8); \110 s0 = ((s0 * t[0]) + (s1 * t[1]) + (s2 * t[2]) + (s3 * t[3])) >> (CUBIC_QUANTSHIFT-8); \
111} \111} \
112 112
113// in: int32_t s0,s1,s2,s3 = -32768..32767 | f = 0..65535 (frac) | out: 16-bit s0 (will exceed 16-bits because of overshoot)113// in: int32_t s0,s1,s2,s3 = -32768..32767 | f = 0..65535 (frac) | out: 16-bit s0 (will exceed 16-bits because of overshoot)
114#define INTERPOLATE16(s0, s1, s2, s3, f) \114#define INTERPOLATE16(s0, s1, s2, s3, f) \
115{ \115{ \
116 const int16_t *t = fastSincTable + ((f >> 6) & 0x3FC); \116 const int16_t *t = cubicSplineTable + ((f >> CUBIC_FSHIFT) & CUBIC_FMASK); \
117 s0 = ((s0 * t[0]) + (s1 * t[1]) + (s2 * t[2]) + (s3 * t[3])) >> FAST_SINC_TABLE_BITS; \117 s0 = ((s0 * t[0]) + (s1 * t[1]) + (s2 * t[2]) + (s3 * t[3])) >> CUBIC_QUANTSHIFT; \
118} \118} \
119 119
120#define RENDER_8BIT_SMP_INTRP \120#define RENDER_8BIT_SMP_INTRP \
src/ft2_module_loader.c+1−15
@@ -128,7 +128,7 @@ songS3MHeaderTyp; · 127 unmodified lines
128#endif128#endif
129 129
130static volatile uint8_t loadedFormat;130static volatile uint8_t loadedFormat;
131static volatile bool stereoSamplesWarn, linearFreqTable, musicIsLoading, moduleLoaded, moduleFailedToLoad;131static volatile bool linearFreqTable, musicIsLoading, moduleLoaded, moduleFailedToLoad;
132static uint8_t oldPlayMode, pattBuff[12288];132static uint8_t oldPlayMode, pattBuff[12288];
133static const uint8_t stmEff[16] = { 0, 0, 11, 0, 10, 2, 1, 3, 4, 7, 0, 5 ,6, 0, 0, 0 };133static const uint8_t stmEff[16] = { 0, 0, 11, 0, 10, 2, 1, 3, 4, 7, 0, 5 ,6, 0, 0, 0 };
134static SDL_Thread *thread;134static SDL_Thread *thread;
@@ -1108,8 +1108,6 @@ static bool loadMusicS3M(FILE *f, uint32_t dataLength, bool fromExternalThread) · 973 unmodified lines
1108 1108
1109 showMsg = fromExternalThread ? okBoxThreadSafe : okBox;1109 showMsg = fromExternalThread ? okBoxThreadSafe : okBox;
1110 1110
1111 stereoSamplesWarn = false;
1112
1113 rewind(f);1111 rewind(f);
1114 1112
1115 // start loading S3M1113 // start loading S3M
@@ -1606,10 +1604,7 @@ static bool loadMusicS3M(FILE *f, uint32_t dataLength, bool fromExternalThread) · 490 unmodified lines
1606 len *= 2;1604 len *= 2;
1607 1605
1608 if (stereoSample) // stereo1606 if (stereoSample) // stereo
1609 {
1610 stereoSamplesWarn = true;
1611 len *= 2;1607 len *= 2;
1612 }
1613 1608
1614 tmpSmp = (int8_t *)malloc(len + LOOP_FIX_LEN);1609 tmpSmp = (int8_t *)malloc(len + LOOP_FIX_LEN);
1615 if (tmpSmp == NULL)1610 if (tmpSmp == NULL)
@@ -1708,9 +1703,6 @@ static bool loadMusicS3M(FILE *f, uint32_t dataLength, bool fromExternalThread) · 92 unmodified lines
1708 }1703 }
1709 }1704 }
1710 1705
1711 if (stereoSamplesWarn)
1712 showMsg(0, "System message", "Stereo samples were found and will be converted to mono.");
1713
1714 // non-FT2: fix overflown 9xx and illegal 3xx slides1706 // non-FT2: fix overflown 9xx and illegal 3xx slides
1715 1707
1716 for (i = 0; i < ap; i++)1708 for (i = 0; i < ap; i++)
@@ -1804,7 +1796,6 @@ bool doLoadMusic(bool fromExternalThread) · 87 unmodified lines
1804 1796
1805 showMsg = fromExternalThread ? okBoxThreadSafe : okBox;1797 showMsg = fromExternalThread ? okBoxThreadSafe : okBox;
1806 1798
1807 stereoSamplesWarn = false;
1808 linearFreqTable = false;1799 linearFreqTable = false;
1809 1800
1810 if (editor.tmpFilenameU == NULL)1801 if (editor.tmpFilenameU == NULL)
@@ -1963,9 +1954,6 @@ bool doLoadMusic(bool fromExternalThread) · 152 unmodified lines
1963 }1954 }
1964 }1955 }
1965 1956
1966 if (stereoSamplesWarn)
1967 showMsg(0, "System message", "Stereo samples were found and will be converted to mono.");
1968
1969 fclose(f);1957 fclose(f);
1970 1958
1971 moduleLoaded = true;1959 moduleLoaded = true;
@@ -2322,8 +2310,6 @@ static bool loadInstrSample(FILE *f, uint16_t i) · 350 unmodified lines
2322 s->origPek = newPtr;2310 s->origPek = newPtr;
2323 s->pek = s->origPek + SMP_DAT_OFFSET;2311 s->pek = s->origPek + SMP_DAT_OFFSET;
2324 }2312 }
2325
2326 stereoSamplesWarn = true;
2327 }2313 }
2328 }2314 }
2329 2315
src/ft2_nibbles.c+9−9
@@ -23,8 +23,8 @@ static const char *NI_HelpText[] = · 22 unmodified lines
23 "The \"Wrap\" option controls whether it's possible to walk through",23 "The \"Wrap\" option controls whether it's possible to walk through",
24 "the screen edges or not. Turn it on and use your brain to get",24 "the screen edges or not. Turn it on and use your brain to get",
25 "the maximum out of this feature.",25 "the maximum out of this feature.",
26 "The \"Surround\" option turns nibbles into a completely different",26 "The \"Surround\" option turns Nibbles into a completely different",
27 "game. Don't change this option during play! (You'll see why)",27 "game. Don't change this option during play! (you'll see why)",
28 "We wish you many hours of fun playing this game."28 "We wish you many hours of fun playing this game."
29};29};
30#define NIBBLES_HELP_LINES (sizeof (NI_HelpText) / sizeof (char *))30#define NIBBLES_HELP_LINES (sizeof (NI_HelpText) / sizeof (char *))
@@ -43,7 +43,7 @@ typedef struct · 12 unmodified lines
43static const char nibblesCheatCode1[] = "skip", nibblesCheatCode2[] = "triton";43static const char nibblesCheatCode1[] = "skip", nibblesCheatCode2[] = "triton";
44static char nibblesCheatBuffer[16];44static char nibblesCheatBuffer[16];
45 45
46const char convHexTable2[10] = { 7, 8, 9, 10, 11, 12, 13, 16, 17, 18 };46static const char convHexTable2[10] = { 7, 8, 9, 10, 11, 12, 13, 16, 17, 18 };
47static const uint8_t NI_Speeds[4] = { 12, 8, 6, 4 };47static const uint8_t NI_Speeds[4] = { 12, 8, 6, 4 };
48static bool NI_EternalLives;48static bool NI_EternalLives;
49static uint8_t NI_CheatIndex, NI_CurSpeed, NI_CurTick60Hz, NI_CurSpeed60Hz, NI_Screen[51][23], NI_Level;49static uint8_t NI_CheatIndex, NI_CurSpeed, NI_CurTick60Hz, NI_CurSpeed60Hz, NI_Screen[51][23], NI_Level;
@@ -265,7 +265,7 @@ void nibblesHighScore(void) · 215 unmodified lines
265{265{
266 if (editor.NI_Play)266 if (editor.NI_Play)
267 {267 {
268 okBox(0, "System message", "No highscoretable is available during play.");268 okBox(0, "System message", "The highscore table is not available during play.");
269 return;269 return;
270 }270 }
271 271
@@ -781,13 +781,13 @@ void nibblesPlay(void) · 509 unmodified lines
781{781{
782 if (editor.NI_Play)782 if (editor.NI_Play)
783 {783 {
784 if (okBox(2, "Nibbles request", "Restart the current game of nibbles?") != 1)784 if (okBox(2, "Nibbles request", "Restart the current game of Nibbles?") != 1)
785 return;785 return;
786 }786 }
787 787
788 if (config.NI_Surround && config.NI_AntPlayers == 0)788 if (config.NI_Surround && config.NI_AntPlayers == 0)
789 {789 {
790 okBox(0, "Nibbles message", "\"Surround\" is not appropriate in one-player mode.");790 okBox(0, "Nibbles message", "Surround mode is not appropriate in one-player mode.");
791 return;791 return;
792 }792 }
793 793
@@ -812,7 +812,7 @@ void nibblesHelp(void) · 18 unmodified lines
812{812{
813 if (editor.NI_Play)813 if (editor.NI_Play)
814 {814 {
815 okBox(0, "System message", "No help available during play.");815 okBox(0, "System message", "Help is not available during play.");
816 return;816 return;
817 }817 }
818 818
@@ -827,7 +827,7 @@ void nibblesExit(void) · 8 unmodified lines
827{827{
828 if (editor.NI_Play)828 if (editor.NI_Play)
829 {829 {
830 if (okBox(2, "System request", "Quit current game of nibbles?") == 1)830 if (okBox(2, "System request", "Quit current game of Nibbles?") == 1)
831 {831 {
832 editor.NI_Play = false;832 editor.NI_Play = false;
833 exitNibblesScreen();833 exitNibblesScreen();
@@ -910,7 +910,7 @@ void nibblesKeyAdministrator(SDL_Scancode scancode) · 76 unmodified lines
910{910{
911 if (scancode == SDL_SCANCODE_ESCAPE)911 if (scancode == SDL_SCANCODE_ESCAPE)
912 {912 {
913 if (okBox(2, "System request", "Quit current game of nibbles?") == 1)913 if (okBox(2, "System request", "Quit current game of Nibbles?") == 1)
914 {914 {
915 editor.NI_Play = false;915 editor.NI_Play = false;
916 exitNibblesScreen();916 exitNibblesScreen();
src/ft2_pattern_ed.c+7−7
@@ -527,7 +527,7 @@ static void updatePatternEditorGUI(void) · 526 unmodified lines
527 pushButtons[PB_POSED_PATT_UP].y = 20;527 pushButtons[PB_POSED_PATT_UP].y = 20;
528 pushButtons[PB_POSED_PATT_DOWN].y = 20;528 pushButtons[PB_POSED_PATT_DOWN].y = 20;
529 pushButtons[PB_POSED_DEL].y = 35;529 pushButtons[PB_POSED_DEL].y = 35;
530 pushButtons[PB_SWAP_BANK].caption = "Swap b.";530 pushButtons[PB_SWAP_BANK].caption = "Swap B.";
531 pushButtons[PB_SWAP_BANK].caption2 = NULL;531 pushButtons[PB_SWAP_BANK].caption2 = NULL;
532 pushButtons[PB_SWAP_BANK].x = 162;532 pushButtons[PB_SWAP_BANK].x = 162;
533 pushButtons[PB_SWAP_BANK].y = 35;533 pushButtons[PB_SWAP_BANK].y = 35;
@@ -582,7 +582,7 @@ static void updatePatternEditorGUI(void) · 48 unmodified lines
582 pushButtons[PB_POSED_PATT_DOWN].y = 19;582 pushButtons[PB_POSED_PATT_DOWN].y = 19;
583 pushButtons[PB_POSED_DEL].y = 33;583 pushButtons[PB_POSED_DEL].y = 33;
584 pushButtons[PB_SWAP_BANK].caption = "Swap";584 pushButtons[PB_SWAP_BANK].caption = "Swap";
585 pushButtons[PB_SWAP_BANK].caption2 = "bank";585 pushButtons[PB_SWAP_BANK].caption2 = "Bank";
586 pushButtons[PB_SWAP_BANK].x = 590;586 pushButtons[PB_SWAP_BANK].x = 590;
587 pushButtons[PB_SWAP_BANK].y = 144;587 pushButtons[PB_SWAP_BANK].y = 144;
588 pushButtons[PB_SWAP_BANK].w = 39;588 pushButtons[PB_SWAP_BANK].w = 39;
@@ -614,6 +614,11 @@ static void updatePatternEditorGUI(void) · 25 unmodified lines
614 p->y = iSwitchY[i & 7];614 p->y = iSwitchY[i & 7];
615 }615 }
616 }616 }
617
618 // force update even if new values were to be the same as the old ones
619 scrollBars[SB_POS_ED].oldEnd = 0xFFFFFFFF;
620 scrollBars[SB_POS_ED].oldPage = 0xFFFFFFFF;
621 scrollBars[SB_POS_ED].oldPos = 0xFFFFFFFF;
617}622}
618 623
619void patternEditorExtended(void)624void patternEditorExtended(void)
@@ -653,11 +658,6 @@ void patternEditorExtended(void) · 33 unmodified lines
653 drawFramework(2, 2, 51, 20, FRAMEWORK_TYPE2);658 drawFramework(2, 2, 51, 20, FRAMEWORK_TYPE2);
654 drawFramework(2, 31, 51, 20, FRAMEWORK_TYPE2);659 drawFramework(2, 31, 51, 20, FRAMEWORK_TYPE2);
655 660
656 // force updating of end/page/length when showing scrollbar
657 scrollBars[SB_POS_ED].oldEnd = 0xFFFFFFFF;
658 scrollBars[SB_POS_ED].oldPage = 0xFFFFFFFF;
659 scrollBars[SB_POS_ED].oldPos = 0xFFFFFFFF;
660
661 showScrollBar(SB_POS_ED);661 showScrollBar(SB_POS_ED);
662 662
663 showPushButton(PB_POSED_POS_UP);663 showPushButton(PB_POSED_POS_UP);
src/ft2_pushbuttons.c+4−4
@@ -126,7 +126,7 @@ pushButton_t pushButtons[NUM_PUSHBUTTONS] = · 125 unmodified lines
126 { 590, 90, 39, 16, 0, 0, "69-70", NULL, NULL, pbSetInstrBank14 },126 { 590, 90, 39, 16, 0, 0, "69-70", NULL, NULL, pbSetInstrBank14 },
127 { 590, 107, 39, 16, 0, 0, "71-78", NULL, NULL, pbSetInstrBank15 },127 { 590, 107, 39, 16, 0, 0, "71-78", NULL, NULL, pbSetInstrBank15 },
128 { 590, 124, 39, 16, 0, 0, "79-80", NULL, NULL, pbSetInstrBank16 },128 { 590, 124, 39, 16, 0, 0, "79-80", NULL, NULL, pbSetInstrBank16 },
129 { 590, 144, 39, 27, 0, 0, "Swap", "bank", NULL, pbSwapInstrBank },129 { 590, 144, 39, 27, 0, 0, "Swap", "Bank", NULL, pbSwapInstrBank },
130 { 566, 99, 18, 13, 1, 4, ARROW_UP_STRING, NULL, sampleListScrollUp, NULL },130 { 566, 99, 18, 13, 1, 4, ARROW_UP_STRING, NULL, sampleListScrollUp, NULL },
131 { 566, 140, 18, 13, 1, 4, ARROW_DOWN_STRING, NULL, sampleListScrollDown, NULL },131 { 566, 140, 18, 13, 1, 4, ARROW_DOWN_STRING, NULL, sampleListScrollDown, NULL },
132 132
@@ -151,8 +151,8 @@ pushButton_t pushButtons[NUM_PUSHBUTTONS] = · 18 unmodified lines
151 // ------ HELP SCREEN PUSHBUTTONS ------151 // ------ HELP SCREEN PUSHBUTTONS ------
152 //x, y, w, h, p, d, text #1, text #2, funcOnDown, funcOnUp152 //x, y, w, h, p, d, text #1, text #2, funcOnDown, funcOnUp
153 { 3, 155, 59, 16, 0, 0, "Exit", NULL, NULL, exitHelpScreen },153 { 3, 155, 59, 16, 0, 0, "Exit", NULL, NULL, exitHelpScreen },
154 { 611, 2, 18, 13, 0, 0, ARROW_UP_STRING, NULL, helpScrollUp, NULL },154 { 611, 2, 18, 13, 1, 2, ARROW_UP_STRING, NULL, helpScrollUp, NULL },
155 { 611, 158, 18, 13, 0, 0, ARROW_DOWN_STRING, NULL, helpScrollDown, NULL },155 { 611, 158, 18, 13, 1, 2, ARROW_DOWN_STRING, NULL, helpScrollDown, NULL },
156 156
157 // ------ PATTERN EDITOR PUSHBUTTONS ------157 // ------ PATTERN EDITOR PUSHBUTTONS ------
158 //x, y, w, h, p, d, text #1, text #2, funcOnDown, funcOnUp158 //x, y, w, h, p, d, text #1, text #2, funcOnDown, funcOnUp
@@ -357,7 +357,7 @@ pushButton_t pushButtons[NUM_PUSHBUTTONS] = · 198 unmodified lines
357 { 70, 2, 58, 16, 0, 0, "Save", NULL, NULL, pbDiskOpSave },357 { 70, 2, 58, 16, 0, 0, "Save", NULL, NULL, pbDiskOpSave },
358 { 70, 19, 58, 16, 0, 0, "Delete", NULL, NULL, pbDiskOpDelete },358 { 70, 19, 58, 16, 0, 0, "Delete", NULL, NULL, pbDiskOpDelete },
359 { 70, 36, 58, 16, 0, 0, "Rename", NULL, NULL, pbDiskOpRename },359 { 70, 36, 58, 16, 0, 0, "Rename", NULL, NULL, pbDiskOpRename },
360 { 70, 53, 58, 16, 0, 0, "Make dir", NULL, NULL, pbDiskOpMakeDir },360 { 70, 53, 58, 16, 0, 0, "Make dir.", NULL, NULL, pbDiskOpMakeDir },
361 { 70, 70, 58, 16, 0, 0, "Refresh", NULL, NULL, pbDiskOpRefresh },361 { 70, 70, 58, 16, 0, 0, "Refresh", NULL, NULL, pbDiskOpRefresh },
362 { 70, 87, 58, 16, 0, 0, "Set path", NULL, NULL, pbDiskOpSetPath },362 { 70, 87, 58, 16, 0, 0, "Set path", NULL, NULL, pbDiskOpSetPath },
363 { 70, 104, 58, 16, 0, 0, "Show all", NULL, NULL, pbDiskOpShowAll },363 { 70, 104, 58, 16, 0, 0, "Show all", NULL, NULL, pbDiskOpShowAll },
src/ft2_pushbuttons.h+1−1
@@ -346,7 +346,7 @@ enum · 345 unmodified lines
346#define RADIOBUTTON_STATES 3346#define RADIOBUTTON_STATES 3
347 347
348// amount of frames to wait348// amount of frames to wait
349#define BUTTON_DOWN_DELAY 8349#define BUTTON_DOWN_DELAY 16
350 350
351// font #1/#2 special characters (used for buttons)351// font #1/#2 special characters (used for buttons)
352#define ARROW_UP_STRING "\x05"352#define ARROW_UP_STRING "\x05"
src/ft2_replayer.c+17−17
@@ -1502,37 +1502,37 @@ static void fixaEnvelopeVibrato(stmTyp *ch) · 1501 unmodified lines
1502 }1502 }
1503}1503}
1504 1504
1505int16_t relocateTon(int16_t period, int8_t relativeNote, stmTyp *ch)1505// for arpeggio and portamento (semitone-slide mode)
1506static int16_t relocateTon(int16_t period, uint8_t arpNote, stmTyp *ch)
1506{1507{
1507 int8_t fineTune;1508 int32_t fineTune, loPeriod, hiPeriod, tmpPeriod, tableIndex;
1508 int32_t loPeriod, hiPeriod, tmpPeriod, tableIndex;
1509 1509
1510 fineTune = (ch->fineTune >> 3) + 16;1510 fineTune = ((ch->fineTune >> 3) + 16) << 1;
1511 hiPeriod = 8 * 12 * 16;1511 hiPeriod = (8 * 12 * 16) * 2;
1512 loPeriod = 0;1512 loPeriod = 0;
1513 1513
1514 for (int8_t i = 0; i < 8; i++)1514 for (int8_t i = 0; i < 8; i++)
1515 {1515 {
1516 tmpPeriod = (((loPeriod + hiPeriod) >> 1) & 0xFFFFFFF0) + fineTune;1516 tmpPeriod = (((loPeriod + hiPeriod) >> 1) & 0xFFFFFFE0) + fineTune;
1517 1517
1518 tableIndex = tmpPeriod - 8;1518 tableIndex = (tmpPeriod - 16) >> 1;
1519 if (tableIndex < 0) // added security check1519 tableIndex = CLAMP(tableIndex, 0, 1935); // 8bitbubsy: added security check
1520 tableIndex = 0;
1521 1520
1522 if (period >= note2Period[tableIndex])1521 if (period >= note2Period[tableIndex])
1523 hiPeriod = tmpPeriod - fineTune;1522 hiPeriod = (tmpPeriod - fineTune) & 0xFFFFFFE0;
1524 else1523 else
1525 loPeriod = tmpPeriod - fineTune;1524 loPeriod = (tmpPeriod - fineTune) & 0xFFFFFFE0;
1526 }1525 }
1527 1526
1528 tmpPeriod = loPeriod + fineTune + (relativeNote << 4);1527 tmpPeriod = loPeriod + fineTune + (arpNote << 5);
1529 if (tmpPeriod < 0) // added security check1528
1529 if (tmpPeriod < 0) // 8bitbubsy: added security check
1530 tmpPeriod = 0;1530 tmpPeriod = 0;
1531 1531
1532 if (tmpPeriod >= ((8*12*16)+15)-1) // FT2 bug: off-by-one edge case1532 if (tmpPeriod >= (8*12*16+15)*2-1) // FT2 bug: off-by-one edge case
1533 tmpPeriod = (8*12*16)+15;1533 tmpPeriod = (8*12*16+15)*2;
1534 1534
1535 return note2Period[tmpPeriod];1535 return note2Period[tmpPeriod>>1];
1536}1536}
1537 1537
1538static void tonePorta(stmTyp *ch)1538static void tonePorta(stmTyp *ch)
@@ -1559,7 +1559,7 @@ static void tonePorta(stmTyp *ch) · 20 unmodified lines
1559 }1559 }
1560 }1560 }
1561 1561
1562 if (ch->glissFunk) // semi-tone slide flag1562 if (ch->glissFunk) // semitone-slide flag
1563 ch->outPeriod = relocateTon(ch->realPeriod, 0, ch);1563 ch->outPeriod = relocateTon(ch->realPeriod, 0, ch);
1564 else1564 else
1565 ch->outPeriod = ch->realPeriod;1565 ch->outPeriod = ch->realPeriod;
src/ft2_replayer.h+0−1
@@ -244,7 +244,6 @@ void calcReplayRate(int32_t rate); · 243 unmodified lines
244void resetOldRates(void);244void resetOldRates(void);
245void tuneSample(sampleTyp *s, int32_t midCFreq);245void tuneSample(sampleTyp *s, int32_t midCFreq);
246uint32_t getFrequenceValue(int32_t period);246uint32_t getFrequenceValue(int32_t period);
247int16_t relocateTon(int16_t period, int8_t relativeNote, stmTyp *ch);
248 247
249bool allocateInstr(int16_t nr);248bool allocateInstr(int16_t nr);
250void freeInstr(int16_t nr);249void freeInstr(int16_t nr);
src/ft2_tables.c+1−75
@@ -436,80 +436,6 @@ const uint32_t panningTab[257] = // bit-exact to FT2 table · 435 unmodified lines
436 65536436 65536
437};437};
438 438
439/* 8bitbubsy: This table was taken from Tables.cpp (the OpenMPT project)
440**
441** Comment from Tables.cpp:
442** "Reversed sinc coefficients for 4x256 taps polyphase FIR resampling filter (SchismTracker's lutgen.c
443** should generate a very similar table, but it's more precise)"
444*/
445const int16_t fastSincTable[256 * 4] =
446{ // Cubic Spline
447 0, 16384, 0, 0, -31, 16383, 32, 0, -63, 16381, 65, 0, -93, 16378, 100, -1,
448 -124, 16374, 135, -1, -153, 16368, 172, -3, -183, 16361, 209, -4, -211, 16353, 247, -5,
449 -240, 16344, 287, -7, -268, 16334, 327, -9, -295, 16322, 368, -12, -322, 16310, 410, -14,
450 -348, 16296, 453, -17, -374, 16281, 497, -20, -400, 16265, 541, -23, -425, 16248, 587, -26,
451 -450, 16230, 634, -30, -474, 16210, 681, -33, -497, 16190, 729, -37, -521, 16168, 778, -41,
452 -543, 16145, 828, -46, -566, 16121, 878, -50, -588, 16097, 930, -55, -609, 16071, 982, -60,
453 -630, 16044, 1035, -65, -651, 16016, 1089, -70, -671, 15987, 1144, -75, -691, 15957, 1199, -81,
454 -710, 15926, 1255, -87, -729, 15894, 1312, -93, -748, 15861, 1370, -99, -766, 15827, 1428, -105,
455 -784, 15792, 1488, -112, -801, 15756, 1547, -118, -818, 15719, 1608, -125, -834, 15681, 1669, -132,
456 -850, 15642, 1731, -139, -866, 15602, 1794, -146, -881, 15561, 1857, -153, -896, 15520, 1921, -161,
457 -911, 15477, 1986, -168, -925, 15434, 2051, -176, -939, 15390, 2117, -184, -952, 15344, 2184, -192,
458 -965, 15298, 2251, -200, -978, 15251, 2319, -208, -990, 15204, 2387, -216, -1002, 15155, 2456, -225,
459 -1014, 15106, 2526, -234, -1025, 15055, 2596, -242, -1036, 15004, 2666, -251, -1046, 14952, 2738, -260,
460 -1056, 14899, 2810, -269, -1066, 14846, 2882, -278, -1075, 14792, 2955, -287, -1084, 14737, 3028, -296,
461 -1093, 14681, 3102, -306, -1102, 14624, 3177, -315, -1110, 14567, 3252, -325, -1118, 14509, 3327, -334,
462 -1125, 14450, 3403, -344, -1132, 14390, 3480, -354, -1139, 14330, 3556, -364, -1145, 14269, 3634, -374,
463 -1152, 14208, 3712, -384, -1157, 14145, 3790, -394, -1163, 14082, 3868, -404, -1168, 14018, 3947, -414,
464 -1173, 13954, 4027, -424, -1178, 13889, 4107, -434, -1182, 13823, 4187, -445, -1186, 13757, 4268, -455,
465 -1190, 13690, 4349, -465, -1193, 13623, 4430, -476, -1196, 13555, 4512, -486, -1199, 13486, 4594, -497,
466 -1202, 13417, 4676, -507, -1204, 13347, 4759, -518, -1206, 13276, 4842, -528, -1208, 13205, 4926, -539,
467 -1210, 13134, 5010, -550, -1211, 13061, 5094, -560, -1212, 12989, 5178, -571, -1212, 12915, 5262, -581,
468 -1213, 12842, 5347, -592, -1213, 12767, 5432, -603, -1213, 12693, 5518, -613, -1213, 12617, 5603, -624,
469 -1212, 12542, 5689, -635, -1211, 12466, 5775, -645, -1210, 12389, 5862, -656, -1209, 12312, 5948, -667,
470 -1208, 12234, 6035, -677, -1206, 12156, 6122, -688, -1204, 12078, 6209, -698, -1202, 11999, 6296, -709,
471 -1200, 11920, 6384, -720, -1197, 11840, 6471, -730, -1194, 11760, 6559, -740, -1191, 11679, 6647, -751,
472 -1188, 11598, 6735, -761, -1184, 11517, 6823, -772, -1181, 11436, 6911, -782, -1177, 11354, 6999, -792,
473 -1173, 11271, 7088, -802, -1168, 11189, 7176, -812, -1164, 11106, 7265, -822, -1159, 11022, 7354, -832,
474 -1155, 10939, 7442, -842, -1150, 10855, 7531, -852, -1144, 10771, 7620, -862, -1139, 10686, 7709, -872,
475 -1134, 10602, 7798, -882, -1128, 10516, 7886, -891, -1122, 10431, 7975, -901, -1116, 10346, 8064, -910,
476 -1110, 10260, 8153, -919, -1103, 10174, 8242, -929, -1097, 10088, 8331, -938, -1090, 10001, 8420, -947,
477 -1083, 9915, 8508, -956, -1076, 9828, 8597, -965, -1069, 9741, 8686, -973, -1062, 9654, 8774, -982,
478 -1054, 9566, 8863, -991, -1047, 9479, 8951, -999, -1039, 9391, 9039, -1007, -1031, 9303, 9127, -1015,
479 -1024, 9216, 9216, -1024, -1015, 9127, 9303, -1031, -1007, 9039, 9391, -1039, -999, 8951, 9479, -1047,
480 -991, 8863, 9566, -1054, -982, 8774, 9654, -1062, -973, 8686, 9741, -1069, -965, 8597, 9828, -1076,
481 -956, 8508, 9915, -1083, -947, 8420, 10001, -1090, -938, 8331, 10088, -1097, -929, 8242, 10174, -1103,
482 -919, 8153, 10260, -1110, -910, 8064, 10346, -1116, -901, 7975, 10431, -1122, -891, 7886, 10516, -1128,
483 -882, 7798, 10602, -1134, -872, 7709, 10686, -1139, -862, 7620, 10771, -1144, -852, 7531, 10855, -1150,
484 -842, 7442, 10939, -1155, -832, 7354, 11022, -1159, -822, 7265, 11106, -1164, -812, 7176, 11189, -1168,
485 -802, 7088, 11271, -1173, -792, 6999, 11354, -1177, -782, 6911, 11436, -1181, -772, 6823, 11517, -1184,
486 -761, 6735, 11598, -1188, -751, 6647, 11679, -1191, -740, 6559, 11760, -1194, -730, 6471, 11840, -1197,
487 -720, 6384, 11920, -1200, -709, 6296, 11999, -1202, -698, 6209, 12078, -1204, -688, 6122, 12156, -1206,
488 -677, 6035, 12234, -1208, -667, 5948, 12312, -1209, -656, 5862, 12389, -1210, -645, 5775, 12466, -1211,
489 -635, 5689, 12542, -1212, -624, 5603, 12617, -1213, -613, 5518, 12693, -1213, -603, 5432, 12767, -1213,
490 -592, 5347, 12842, -1213, -581, 5262, 12915, -1212, -571, 5178, 12989, -1212, -560, 5094, 13061, -1211,
491 -550, 5010, 13134, -1210, -539, 4926, 13205, -1208, -528, 4842, 13276, -1206, -518, 4759, 13347, -1204,
492 -507, 4676, 13417, -1202, -497, 4594, 13486, -1199, -486, 4512, 13555, -1196, -476, 4430, 13623, -1193,
493 -465, 4349, 13690, -1190, -455, 4268, 13757, -1186, -445, 4187, 13823, -1182, -434, 4107, 13889, -1178,
494 -424, 4027, 13954, -1173, -414, 3947, 14018, -1168, -404, 3868, 14082, -1163, -394, 3790, 14145, -1157,
495 -384, 3712, 14208, -1152, -374, 3634, 14269, -1145, -364, 3556, 14330, -1139, -354, 3480, 14390, -1132,
496 -344, 3403, 14450, -1125, -334, 3327, 14509, -1118, -325, 3252, 14567, -1110, -315, 3177, 14624, -1102,
497 -306, 3102, 14681, -1093, -296, 3028, 14737, -1084, -287, 2955, 14792, -1075, -278, 2882, 14846, -1066,
498 -269, 2810, 14899, -1056, -260, 2738, 14952, -1046, -251, 2666, 15004, -1036, -242, 2596, 15055, -1025,
499 -234, 2526, 15106, -1014, -225, 2456, 15155, -1002, -216, 2387, 15204, -990, -208, 2319, 15251, -978,
500 -200, 2251, 15298, -965, -192, 2184, 15344, -952, -184, 2117, 15390, -939, -176, 2051, 15434, -925,
501 -168, 1986, 15477, -911, -161, 1921, 15520, -896, -153, 1857, 15561, -881, -146, 1794, 15602, -866,
502 -139, 1731, 15642, -850, -132, 1669, 15681, -834, -125, 1608, 15719, -818, -118, 1547, 15756, -801,
503 -112, 1488, 15792, -784, -105, 1428, 15827, -766, -99, 1370, 15861, -748, -93, 1312, 15894, -729,
504 -87, 1255, 15926, -710, -81, 1199, 15957, -691, -75, 1144, 15987, -671, -70, 1089, 16016, -651,
505 -65, 1035, 16044, -630, -60, 982, 16071, -609, -55, 930, 16097, -588, -50, 878, 16121, -566,
506 -46, 828, 16145, -543, -41, 778, 16168, -521, -37, 729, 16190, -497, -33, 681, 16210, -474,
507 -30, 634, 16230, -450, -26, 587, 16248, -425, -23, 541, 16265, -400, -20, 497, 16281, -374,
508 -17, 453, 16296, -348, -14, 410, 16310, -322, -12, 368, 16322, -295, -9, 327, 16334, -268,
509 -7, 287, 16344, -240, -5, 247, 16353, -211, -4, 209, 16361, -183, -3, 172, 16368, -153,
510 -1, 135, 16374, -124, -1, 100, 16378, -93, 0, 65, 16381, -63, 0, 32, 16383, -31
511};
512
513/* ----------------------------------------------------------------------- */439/* ----------------------------------------------------------------------- */
514/* GUI TABLES */440/* GUI TABLES */
515/* ----------------------------------------------------------------------- */441/* ----------------------------------------------------------------------- */
@@ -831,7 +757,7 @@ const char chDecTab2[MAX_VOICES+1] = · 315 unmodified lines
831 '0', '1', '2'757 '0', '1', '2'
832};758};
833 759
834const int16_t sinusTables[256 * 5] =760const int16_t sinusTables[256 * 5] = // for 3D stars in About screen
835{761{
836 0, 201, 402, 603, 804, 1005, 1206, 1407, 1608, 1809,762 0, 201, 402, 603, 804, 1005, 1206, 1407, 1608, 1809,
837 2009, 2210, 2410, 2611, 2811, 3011, 3212, 3412, 3612, 3811,763 2009, 2210, 2410, 2611, 2811, 3011, 3212, 3412, 3612, 3811,
src/ft2_tables.h+1−3
@@ -7,7 +7,6 @@ · 6 unmodified lines
7#include "ft2_config.h" // CONFIG_FILE_SIZE7#include "ft2_config.h" // CONFIG_FILE_SIZE
8 8
9#define LOG_TABLE_BITS 249#define LOG_TABLE_BITS 24
10#define FAST_SINC_TABLE_BITS 14
11 10
12#define KEY2VOL_ENTRIES (signed)(sizeof (key2VolTab) / sizeof (SDL_Keycode))11#define KEY2VOL_ENTRIES (signed)(sizeof (key2VolTab) / sizeof (SDL_Keycode))
13#define KEY2EFX_ENTRIES (signed)(sizeof (key2EfxTab) / sizeof (SDL_Keycode))12#define KEY2EFX_ENTRIES (signed)(sizeof (key2EfxTab) / sizeof (SDL_Keycode))
@@ -22,12 +21,11 @@ extern const int16_t amigaPeriods[1936]; · 8 unmodified lines
22extern const uint32_t logTab[768];21extern const uint32_t logTab[768];
23 22
24extern const uint32_t panningTab[257];23extern const uint32_t panningTab[257];
25extern const int16_t fastSincTable[256 * 4];
26 24
27extern pal16 palTable[12][16];25extern pal16 palTable[12][16];
28extern const uint16_t chanWidths[6];26extern const uint16_t chanWidths[6];
29extern const pattCoordsMouse_t pattCoordMouseTable[2][2][2];27extern const pattCoordsMouse_t pattCoordMouseTable[2][2][2];
30extern const int16_t sinusTables[256 * 5];28extern const int16_t sinusTables[256 * 5]; // for 3D stars in About screen
31extern const uint8_t noteTab1[96];29extern const uint8_t noteTab1[96];
32extern const uint8_t noteTab2[96];30extern const uint8_t noteTab2[96];
33extern const uint8_t hex2Dec[256];31extern const uint8_t hex2Dec[256];
vs2019_project/ft2-clone/ft2-clone.vcxproj+6−4
@@ -141,7 +141,7 @@ · 140 unmodified lines
141 <PostBuildEvent />141 <PostBuildEvent />
142 <Manifest />142 <Manifest />
143 <Manifest>143 <Manifest>
144 <EnableDpiAwareness>true</EnableDpiAwareness>144 <EnableDpiAwareness>PerMonitorHighDPIAware</EnableDpiAwareness>
145 </Manifest>145 </Manifest>
146 </ItemDefinitionGroup>146 </ItemDefinitionGroup>
147 <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">147 <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
@@ -212,7 +212,7 @@ · 64 unmodified lines
212 </ResourceCompile>212 </ResourceCompile>
213 <Manifest />213 <Manifest />
214 <Manifest>214 <Manifest>
215 <EnableDpiAwareness>true</EnableDpiAwareness>215 <EnableDpiAwareness>PerMonitorHighDPIAware</EnableDpiAwareness>
216 </Manifest>216 </Manifest>
217 </ItemDefinitionGroup>217 </ItemDefinitionGroup>
218 <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">218 <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
@@ -258,7 +258,7 @@ · 39 unmodified lines
258 </Command>258 </Command>
259 </PreBuildEvent>259 </PreBuildEvent>
260 <Manifest>260 <Manifest>
261 <EnableDpiAwareness>true</EnableDpiAwareness>261 <EnableDpiAwareness>PerMonitorHighDPIAware</EnableDpiAwareness>
262 </Manifest>262 </Manifest>
263 </ItemDefinitionGroup>263 </ItemDefinitionGroup>
264 <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">264 <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
@@ -312,7 +312,7 @@ · 47 unmodified lines
312 <PreprocessorDefinitions>_WIN64</PreprocessorDefinitions>312 <PreprocessorDefinitions>_WIN64</PreprocessorDefinitions>
313 </ResourceCompile>313 </ResourceCompile>
314 <Manifest>314 <Manifest>
315 <EnableDpiAwareness>true</EnableDpiAwareness>315 <EnableDpiAwareness>PerMonitorHighDPIAware</EnableDpiAwareness>
316 </Manifest>316 </Manifest>
317 </ItemDefinitionGroup>317 </ItemDefinitionGroup>
318 <ItemGroup>318 <ItemGroup>
@@ -334,6 +334,7 @@ · 15 unmodified lines
334 <ClCompile Include="..\..\src\ft2_gui.c" />334 <ClCompile Include="..\..\src\ft2_gui.c" />
335 <ClCompile Include="..\..\src\ft2_help.c" />335 <ClCompile Include="..\..\src\ft2_help.c" />
336 <ClCompile Include="..\..\src\ft2_inst_ed.c" />336 <ClCompile Include="..\..\src\ft2_inst_ed.c" />
337 <ClCompile Include="..\..\src\ft2_intrp_table.c" />
337 <ClCompile Include="..\..\src\ft2_keyboard.c" />338 <ClCompile Include="..\..\src\ft2_keyboard.c" />
338 <ClCompile Include="..\..\src\ft2_main.c" />339 <ClCompile Include="..\..\src\ft2_main.c" />
339 <ClCompile Include="..\..\src\ft2_midi.c" />340 <ClCompile Include="..\..\src\ft2_midi.c" />
@@ -402,6 +403,7 @@ · 62 unmodified lines
402 <ClInclude Include="..\..\src\ft2_header.h" />403 <ClInclude Include="..\..\src\ft2_header.h" />
403 <ClInclude Include="..\..\src\ft2_help.h" />404 <ClInclude Include="..\..\src\ft2_help.h" />
404 <ClInclude Include="..\..\src\ft2_inst_ed.h" />405 <ClInclude Include="..\..\src\ft2_inst_ed.h" />
406 <ClInclude Include="..\..\src\ft2_intrp_table.h" />
405 <ClInclude Include="..\..\src\ft2_keyboard.h" />407 <ClInclude Include="..\..\src\ft2_keyboard.h" />
406 <ClInclude Include="..\..\src\ft2_midi.h" />408 <ClInclude Include="..\..\src\ft2_midi.h" />
407 <ClInclude Include="..\..\src\ft2_mix.h" />409 <ClInclude Include="..\..\src\ft2_mix.h" />
vs2019_project/ft2-clone/ft2-clone.vcxproj.filters+4−0
@@ -71,6 +71,7 @@ · 70 unmodified lines
71 <ClCompile Include="..\..\src\ft2_palette.c" />71 <ClCompile Include="..\..\src\ft2_palette.c" />
72 <ClCompile Include="..\..\src\ft2_scopedraw.c" />72 <ClCompile Include="..\..\src\ft2_scopedraw.c" />
73 <ClCompile Include="..\..\src\ft2_tables.c" />73 <ClCompile Include="..\..\src\ft2_tables.c" />
74 <ClCompile Include="..\..\src\ft2_intrp_table.c" />
74 </ItemGroup>75 </ItemGroup>
75 <ItemGroup>76 <ItemGroup>
76 <ClInclude Include="..\..\src\ft2_audio.h">77 <ClInclude Include="..\..\src\ft2_audio.h">
@@ -205,6 +206,9 @@ · 128 unmodified lines
205 <ClInclude Include="..\..\src\ft2_tables.h">206 <ClInclude Include="..\..\src\ft2_tables.h">
206 <Filter>headers</Filter>207 <Filter>headers</Filter>
207 </ClInclude>208 </ClInclude>
209 <ClInclude Include="..\..\src\ft2_intrp_table.h">
210 <Filter>headers</Filter>
211 </ClInclude>
208 </ItemGroup>212 </ItemGroup>
209 <ItemGroup>213 <ItemGroup>
210 <Filter Include="headers">214 <Filter Include="headers">

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t