text: /*
   * acctable.cpp
   *
   *  Created on: 5 Aug 2016
   *      Author: peterharrison
   */
  
  #include "avr/pgmspace.h"
  #include "acctable.h"
  #include "parameters.h"
  #include "hardware/hardware.h"
  
  // The motor acceleration can be adjusted here by magic arithmetic
  // The compiler does these calculations.
  // The result is applied in the motor driver.
  // acceleration is in steps/s/s and must be at least 1900 in value
  // upper limit depends on motor drive voltage.
  // look at the acctable() comments for an explanation.
  // for this mouse the highest acceleration is about 5000 (1.1m/s/s)
  //const long acceleration = 2118; // about 500mm/s/s  upper limit is 5000 (1.1m/s/s)
  const long acceleration = 4000; // about 500mm/s/s
  const long countZero = (F_COUNTER * sqrtf(2)) / sqrtf((float)acceleration);;
  
  
  // forward declaration. the table is below
  extern const unsigned int  acc_table[];
  
  /*
   * use a function to get timer values because they are stored in flash
   *
   * The returned result is the number of timer clock cycles to add to the
   * output compare register for the pulse generating timer.
   *
   * The timer is clocked at 2MHz
   *
   * The pulse frequency will be 2000000/result
   *
   * The data table holds values of the equation 65536*(sqrt(n+1) - sqrt(n)).
   *
   * For example, for entry 100, the value is 65536*(sqrt(101)-sqrt(100)) = 3268
   *
   * Scaling by a factor of 2^16 (65536) makes it easy to store integer values
   * and divide by 65536 after the calculations
   *
   *
   * This table is for a generic acceleration profile and the values need further
   * scaling for a specific acceleration. In the general case, for step n of
   * a linear acceleration profile with acceleration of a steps/s/s,
   * the time to the next step is
   *
   * Tn = T0*(sqrt(2/a)*(sqrt(n+1)-sqrt(n))
   *
   * when n = 0
   *
   * Tn = T0 = sqrt(2/a)
   *
   * Again, this number must be scaled by 65536 to keep the arithmetic correct
   *
   * If a = 1900, T0 = sqrt(2/1900) = 0.03244 seconds => 31Hz
   *
   * With a timer frequency of 2MHz, this is 64888 counts. Since the largest
   * value we can put into the counter compare is 65535, this is about the
   * smallest value we can use for the acceleration.
   *
   * Now we can define the counter value for step n as
   *
   * C0 = F_COUNTER * sqrt(2/a)
   *    = (F_COUNTER * sqrt(2))/ sqrt(a)
   *
   * Cn = C0 * (sqrt(n+1)-sqrt(n))
   *    = (C0 * acc_table[n]) / 65536
   *
   *
   * For example, if a = 1900 steps/s/s
   *
   * C0 = 64888
   * C100 = (64888 * 3268)/65536 = 3235
   *
   * and so the pulse frequency would be
   *
   * F = F_COUNTER/3235 = 618Hz
   *
   * The motors are 200 PPR so at half stepping, there are 400 steps per
   * revolution.
   *
   * Tyres are about 30mm diameter so top speed with these settings will be
   *
   * 30*3.14mm * 618 Hz/ 400 = 145 mm/s  Not terribly quick but adequate.
   *
   * Top speed from the table, with a = 1900 is
   *
   * C1023 = (64888*1024)/65536 = 1013 => 1972.6Hz = > 462mm/s
   * *
   * The slowest possible step rate would be about 31Hz => 7.3mm/s
   *
   * To have the mouse run faster, just increase the acceleration value. The
   * table is stepped through in exactly the same way.
   *
   * For example, if the acceleration, a, is increased to 4275, the top speed
   * available would increase to (462 * sqrt(4275/1900)) = 693 mm/s.
   *
   * Since the acceleration can be set arbitrarily, lets see what the upper
   * limit might be. With a = 65536, C0 = 11048 and the maximum speed would
   * increase to 2734 mm/s. This is a much more respectable speed but there are
   * constraints.
   *
   * One is that the pulse frequency is now 11.6kHz per wheel. The poor processor
   * will need to be servicing motor timer interrupts at more than 23Khz and may
   * run out of steam if care is not taken to write efficient ISR code.
   *
   * To get higher speeds with half the interrupt rate, use half-steps to get
   * the mouse moving and then switch to full steps while doubling the counter
   * values. the changeover must be carefully handled.
   *
   * The second is that acceleration and the top speed for a given motor, wheel
   * size, microstepping mode and mouse mass depends upon the available
   * drive voltage. For greater speed an acceleration it will be necessary to
   * increase the supply voltage. Provided there is suitable current limiting,
   * 18V would not be too high. Four LiPo cells would be ideal.
   *
   * Another concern is that the motor pulse interrupts will interact and, more
   * significantly, will be interfered with by the other interrupts in the
   * system. With care, lower priority interrupts like systick may re-enable
   * the Global Interrupt Enable bit to allow the motor drivers to avoid delays.
   *
   * This is done in this code. Take care about access to volatile quantities.
   *
   * Note that the minimum pulse frequency is affected by the acceleration and
   * will increase as the acceleration increases. This can be a problem when
   * the acceleration is very high because there will be a maximum pull-in
   * frequency for the drive train.
   *
   * If lower speeds are needed, the counter clock frequency can be reduced.
   *
   *
   *
   */
  unsigned int accTable(int speed) {
    if (speed > SPEED_TABLE_END) {
      speed = SPEED_TABLE_END;
    }
    unsigned int result = pgm_read_word_near(acc_table + speed);
    result = (result * countZero) >> 16;
    return result;
  }
  
  
  const PROGMEM unsigned int  acc_table[SPEED_TABLE_END + 1] = {
    65535,  // 0			= 40 Hz
    27145,  // 1
    20829,  // 2
    17560,  // 3
    15470,  // 4
    13986,  // 5
    12862,  // 6
    11971,  // 7
    11244,  // 8
    10634,  // 9
    10115,  // 10   260 Hz
    9664,  // 11
    9269,  // 12
    8919,  // 13
    8606,  // 14
    8324,  // 15
    8067,  // 16
    7833,  // 17
    7618,  // 18
    7420,  // 19
    7237,  // 20
    7067,  // 21
    6908,  // 22
    6759,  // 23
    6620,  // 24
    6489,  // 25
    6365,  // 26
    6248,  // 27
    6138,  // 28
    6033,  // 29
    5933,  // 30
    5838,  // 31
    5747,  // 32
    5661,  // 33
    5578,  // 34
    5499,  // 35
    5423,  // 36
    5351,  // 37
    5281,  // 38
    5213,  // 39
    5149,  // 40
    5086,  // 41
    5026,  // 42
    4968,  // 43
    4912,  // 44
    4857,  // 45
    4805,  // 46
    4754,  // 47
    4705,  // 48
    4657,  // 49
    4611,  // 50
    4566,  // 51
    4522,  // 52
    4479,  // 53
    4438,  // 54
    4398,  // 55
    4359,  // 56
    4321,  // 57
    4284,  // 58
    4248,  // 59
    4212,  // 60
    4178,  // 61
    4144,  // 62
    4112,  // 63
    4080,  // 64
    4048,  // 65
    4018,  // 66
    3988,  // 67
    3959,  // 68
    3930,  // 69
    3902,  // 70
    3875,  // 71
    3848,  // 72
    3822,  // 73
    3796,  // 74
    3771,  // 75
    3746,  // 76
    3722,  // 77
    3698,  // 78
    3675,  // 79
    3652,  // 80
    3629,  // 81
    3607,  // 82
    3585,  // 83
    3564,  // 84
    3543,  // 85
    3523,  // 86
    3503,  // 87
    3483,  // 88
    3463,  // 89
    3444,  // 90
    3425,  // 91
    3407,  // 92
    3388,  // 93
    3370,  // 94
    3353,  // 95
    3335,  // 96
    3318,  // 97
    3301,  // 98
    3284,  // 99
    3268,  // 100
    3252,  // 101
    3236,  // 102
    3220,  // 103
    3205,  // 104
    3190,  // 105
    3175,  // 106
    3160,  // 107
    3145,  // 108
    3131,  // 109
    3117,  // 110
    3103,  // 111
    3089,  // 112
    3075,  // 113
    3062,  // 114
    3048,  // 115
    3035,  // 116
    3022,  // 117
    3010,  // 118
    2997,  // 119
    2985,  // 120
    2972,  // 121
    2960,  // 122
    2948,  // 123
    2936,  // 124
    2924,  // 125
    2913,  // 126
    2901,  // 127
    2890,  // 128
    2879,  // 129
    2868,  // 130
    2857,  // 131
    2846,  // 132
    2835,  // 133
    2825,  // 134
    2814,  // 135
    2804,  // 136
    2794,  // 137
    2784,  // 138
    2774,  // 139
    2764,  // 140
    2754,  // 141
    2744,  // 142
    2735,  // 143
    2725,  // 144
    2716,  // 145
    2707,  // 146
    2698,  // 147
    2688,  // 148
    2679,  // 149
    2671,  // 150
    2662,  // 151
    2653,  // 152
    2644,  // 153
    2636,  // 154
    2627,  // 155
    2619,  // 156
    2610,  // 157
    2602,  // 158
    2594,  // 159
    2586,  // 160
    2578,  // 161
    2570,  // 162
    2562,  // 163
    2554,  // 164
    2547,  // 165
    2539,  // 166
    2531,  // 167
    2524,  // 168
    2516,  // 169
    2509,  // 170
    2502,  // 171
    2494,  // 172
    2487,  // 173
    2480,  // 174
    2473,  // 175
    2466,  // 176
    2459,  // 177
    2452,  // 178
    2445,  // 179
    2438,  // 180
    2432,  // 181
    2425,  // 182
    2418,  // 183
    2412,  // 184
    2405,  // 185
    2399,  // 186
    2393,  // 187
    2386,  // 188
    2380,  // 189
    2374,  // 190
    2367,  // 191
    2361,  // 192
    2355,  // 193
    2349,  // 194
    2343,  // 195
    2337,  // 196
    2331,  // 197
    2325,  // 198
    2319,  // 199
    2314,  // 200
    2308,  // 201
    2302,  // 202
    2297,  // 203
    2291,  // 204
    2285,  // 205
    2280,  // 206
    2274,  // 207
    2269,  // 208
    2263,  // 209
    2258,  // 210
    2253,  // 211
    2247,  // 212
    2242,  // 213
    2237,  // 214
    2232,  // 215
    2226,  // 216
    2221,  // 217
    2216,  // 218
    2211,  // 219
    2206,  // 220
    2201,  // 221
    2196,  // 222
    2191,  // 223
    2186,  // 224
    2182,  // 225
    2177,  // 226
    2172,  // 227
    2167,  // 228
    2162,  // 229
    2158,  // 230
    2153,  // 231
    2148,  // 232
    2144,  // 233
    2139,  // 234
    2135,  // 235
    2130,  // 236
    2126,  // 237
    2121,  // 238
    2117,  // 239
    2112,  // 240
    2108,  // 241
    2104,  // 242
    2099,  // 243
    2095,  // 244
    2091,  // 245
    2087,  // 246
    2082,  // 247
    2078,  // 248
    2074,  // 249
    2070,  // 250
    2066,  // 251
    2062,  // 252
    2058,  // 253
    2053,  // 254
    2049,  // 255
    2045,  // 256
    2041,  // 257
    2038,  // 258
    2034,  // 259
    2030,  // 260
    2026,  // 261
    2022,  // 262
    2018,  // 263
    2014,  // 264
    2010,  // 265
    2007,  // 266
    2003,  // 267
    1999,  // 268
    1996,  // 269
    1992,  // 270
    1988,  // 271
    1984,  // 272
    1981,  // 273
    1977,  // 274
    1974,  // 275
    1970,  // 276
    1967,  // 277
    1963,  // 278
    1959,  // 279
    1956,  // 280
    1953,  // 281
    1949,  // 282
    1946,  // 283
    1942,  // 284
    1939,  // 285
    1935,  // 286
    1932,  // 287
    1929,  // 288
    1925,  // 289
    1922,  // 290
    1919,  // 291
    1915,  // 292
    1912,  // 293
    1909,  // 294
    1906,  // 295
    1902,  // 296
    1899,  // 297
    1896,  // 298
    1893,  // 299
    1890,  // 300
    1887,  // 301
    1883,  // 302
    1880,  // 303
    1877,  // 304
    1874,  // 305
    1871,  // 306
    1868,  // 307
    1865,  // 308
    1862,  // 309
    1859,  // 310
    1856,  // 311
    1853,  // 312
    1850,  // 313
    1847,  // 314
    1844,  // 315
    1841,  // 316
    1838,  // 317
    1836,  // 318
    1833,  // 319
    1830,  // 320
    1827,  // 321
    1824,  // 322
    1821,  // 323
    1819,  // 324
    1816,  // 325
    1813,  // 326
    1810,  // 327
    1807,  // 328
    1805,  // 329
    1802,  // 330
    1799,  // 331
    1796,  // 332
    1794,  // 333
    1791,  // 334
    1788,  // 335
    1786,  // 336
    1783,  // 337
    1781,  // 338
    1778,  // 339
    1775,  // 340
    1773,  // 341
    1770,  // 342
    1767,  // 343
    1765,  // 344
    1762,  // 345
    1760,  // 346
    1757,  // 347
    1755,  // 348
    1752,  // 349
    1750,  // 350
    1747,  // 351
    1745,  // 352
    1742,  // 353
    1740,  // 354
    1737,  // 355
    1735,  // 356
    1733,  // 357
    1730,  // 358
    1728,  // 359
    1725,  // 360
    1723,  // 361
    1721,  // 362
    1718,  // 363
    1716,  // 364
    1713,  // 365
    1711,  // 366
    1709,  // 367
    1706,  // 368
    1704,  // 369
    1702,  // 370
    1700,  // 371
    1697,  // 372
    1695,  // 373
    1693,  // 374
    1690,  // 375
    1688,  // 376
    1686,  // 377
    1684,  // 378
    1682,  // 379
    1679,  // 380
    1677,  // 381
    1675,  // 382
    1673,  // 383
    1671,  // 384
    1668,  // 385
    1666,  // 386
    1664,  // 387
    1662,  // 388
    1660,  // 389
    1658,  // 390
    1656,  // 391
    1653,  // 392
    1651,  // 393
    1649,  // 394
    1647,  // 395
    1645,  // 396
    1643,  // 397
    1641,  // 398
    1639,  // 399
    1637,  // 400
    1635,  // 401
    1633,  // 402
    1631,  // 403
    1629,  // 404
    1627,  // 405
    1625,  // 406
    1623,  // 407
    1621,  // 408
    1619,  // 409
    1617,  // 410
    1615,  // 411
    1613,  // 412
    1611,  // 413
    1609,  // 414
    1607,  // 415
    1605,  // 416
    1603,  // 417
    1601,  // 418
    1599,  // 419
    1597,  // 420
    1596,  // 421
    1594,  // 422
    1592,  // 423
    1590,  // 424
    1588,  // 425
    1586,  // 426
    1584,  // 427
    1582,  // 428
    1581,  // 429
    1579,  // 430
    1577,  // 431
    1575,  // 432
    1573,  // 433
    1571,  // 434
    1570,  // 435
    1568,  // 436
    1566,  // 437
    1564,  // 438
    1563,  // 439
    1561,  // 440
    1559,  // 441
    1557,  // 442
    1555,  // 443
    1554,  // 444
    1552,  // 445
    1550,  // 446
    1548,  // 447
    1547,  // 448
    1545,  // 449
    1543,  // 450
    1542,  // 451
    1540,  // 452
    1538,  // 453
    1537,  // 454
    1535,  // 455
    1533,  // 456
    1531,  // 457
    1530,  // 458
    1528,  // 459
    1526,  // 460
    1525,  // 461
    1523,  // 462
    1522,  // 463
    1520,  // 464
    1518,  // 465
    1517,  // 466
    1515,  // 467
    1513,  // 468
    1512,  // 469
    1510,  // 470
    1509,  // 471
    1507,  // 472
    1505,  // 473
    1504,  // 474
    1502,  // 475
    1501,  // 476
    1499,  // 477
    1497,  // 478
    1496,  // 479
    1494,  // 480
    1493,  // 481
    1491,  // 482
    1490,  // 483
    1488,  // 484
    1487,  // 485
    1485,  // 486
    1484,  // 487
    1482,  // 488
    1481,  // 489
    1479,  // 490
    1478,  // 491
    1476,  // 492
    1475,  // 493
    1473,  // 494
    1472,  // 495
    1470,  // 496
    1469,  // 497
    1467,  // 498
    1466,  // 499
    1464,  // 500
    1463,  // 501
    1461,  // 502
    1460,  // 503
    1458,  // 504
    1457,  // 505
    1455,  // 506
    1454,  // 507
    1453,  // 508
    1451,  // 509
    1450,  // 510
    1448,  // 511
    1447,  // 512
    1446,  // 513
    1444,  // 514
    1443,  // 515
    1441,  // 516
    1440,  // 517
    1439,  // 518
    1437,  // 519
    1436,  // 520
    1434,  // 521
    1433,  // 522
    1432,  // 523
    1430,  // 524
    1429,  // 525
    1428,  // 526
    1426,  // 527
    1425,  // 528
    1424,  // 529
    1422,  // 530
    1421,  // 531
    1419,  // 532
    1418,  // 533
    1417,  // 534
    1416,  // 535
    1414,  // 536
    1413,  // 537
    1412,  // 538
    1410,  // 539
    1409,  // 540
    1408,  // 541
    1406,  // 542
    1405,  // 543
    1404,  // 544
    1402,  // 545
    1401,  // 546
    1400,  // 547
    1399,  // 548
    1397,  // 549
    1396,  // 550
    1395,  // 551
    1394,  // 552
    1392,  // 553
    1391,  // 554
    1390,  // 555
    1389,  // 556
    1387,  // 557
    1386,  // 558
    1385,  // 559
    1384,  // 560
    1382,  // 561
    1381,  // 562
    1380,  // 563
    1379,  // 564
    1377,  // 565
    1376,  // 566
    1375,  // 567
    1374,  // 568
    1373,  // 569
    1371,  // 570
    1370,  // 571
    1369,  // 572
    1368,  // 573
    1367,  // 574
    1365,  // 575
    1364,  // 576
    1363,  // 577
    1362,  // 578
    1361,  // 579
    1360,  // 580
    1358,  // 581
    1357,  // 582
    1356,  // 583
    1355,  // 584
    1354,  // 585
    1353,  // 586
    1351,  // 587
    1350,  // 588
    1349,  // 589
    1348,  // 590
    1347,  // 591
    1346,  // 592
    1345,  // 593
    1343,  // 594
    1342,  // 595
    1341,  // 596
    1340,  // 597
    1339,  // 598
    1338,  // 599
    1337,  // 600
    1336,  // 601
    1334,  // 602
    1333,  // 603
    1332,  // 604
    1331,  // 605
    1330,  // 606
    1329,  // 607
    1328,  // 608
    1327,  // 609
    1326,  // 610
    1325,  // 611
    1324,  // 612
    1322,  // 613
    1321,  // 614
    1320,  // 615
    1319,  // 616
    1318,  // 617
    1317,  // 618
    1316,  // 619
    1315,  // 620
    1314,  // 621
    1313,  // 622
    1312,  // 623
    1311,  // 624
    1310,  // 625
    1309,  // 626
    1308,  // 627
    1307,  // 628
    1306,  // 629
    1304,  // 630
    1303,  // 631
    1302,  // 632
    1301,  // 633
    1300,  // 634
    1299,  // 635
    1298,  // 636
    1297,  // 637
    1296,  // 638
    1295,  // 639
    1294,  // 640
    1293,  // 641
    1292,  // 642
    1291,  // 643
    1290,  // 644
    1289,  // 645
    1288,  // 646
    1287,  // 647
    1286,  // 648
    1285,  // 649
    1284,  // 650
    1283,  // 651
    1282,  // 652
    1281,  // 653
    1280,  // 654
    1279,  // 655
    1278,  // 656
    1277,  // 657
    1276,  // 658
    1275,  // 659
    1274,  // 660
    1274,  // 661
    1273,  // 662
    1272,  // 663
    1271,  // 664
    1270,  // 665
    1269,  // 666
    1268,  // 667
    1267,  // 668
    1266,  // 669
    1265,  // 670
    1264,  // 671
    1263,  // 672
    1262,  // 673
    1261,  // 674
    1260,  // 675
    1259,  // 676
    1258,  // 677
    1257,  // 678
    1257,  // 679
    1256,  // 680
    1255,  // 681
    1254,  // 682
    1253,  // 683
    1252,  // 684
    1251,  // 685
    1250,  // 686
    1249,  // 687
    1248,  // 688
    1247,  // 689
    1246,  // 690
    1246,  // 691
    1245,  // 692
    1244,  // 693
    1243,  // 694
    1242,  // 695
    1241,  // 696
    1240,  // 697
    1239,  // 698
    1238,  // 699
    1238,  // 700
    1237,  // 701
    1236,  // 702
    1235,  // 703
    1234,  // 704
    1233,  // 705
    1232,  // 706
    1231,  // 707
    1231,  // 708
    1230,  // 709
    1229,  // 710
    1228,  // 711
    1227,  // 712
    1226,  // 713
    1225,  // 714
    1225,  // 715
    1224,  // 716
    1223,  // 717
    1222,  // 718
    1221,  // 719
    1220,  // 720
    1219,  // 721
    1219,  // 722
    1218,  // 723
    1217,  // 724
    1216,  // 725
    1215,  // 726
    1214,  // 727
    1214,  // 728
    1213,  // 729
    1212,  // 730
    1211,  // 731
    1210,  // 732
    1209,  // 733
    1209,  // 734
    1208,  // 735
    1207,  // 736
    1206,  // 737
    1205,  // 738
    1204,  // 739
    1204,  // 740
    1203,  // 741
    1202,  // 742
    1201,  // 743
    1200,  // 744
    1200,  // 745
    1199,  // 746
    1198,  // 747
    1197,  // 748
    1196,  // 749
    1196,  // 750
    1195,  // 751
    1194,  // 752
    1193,  // 753
    1192,  // 754
    1192,  // 755
    1191,  // 756
    1190,  // 757
    1189,  // 758
    1188,  // 759
    1188,  // 760
    1187,  // 761
    1186,  // 762
    1185,  // 763
    1185,  // 764
    1184,  // 765
    1183,  // 766
    1182,  // 767
    1182,  // 768
    1181,  // 769
    1180,  // 770
    1179,  // 771
    1178,  // 772
    1178,  // 773
    1177,  // 774
    1176,  // 775
    1175,  // 776
    1175,  // 777
    1174,  // 778
    1173,  // 779
    1172,  // 780
    1172,  // 781
    1171,  // 782
    1170,  // 783
    1169,  // 784
    1169,  // 785
    1168,  // 786
    1167,  // 787
    1166,  // 788
    1166,  // 789
    1165,  // 790
    1164,  // 791
    1163,  // 792
    1163,  // 793
    1162,  // 794
    1161,  // 795
    1161,  // 796
    1160,  // 797
    1159,  // 798
    1158,  // 799
    1158,  // 800
    1157,  // 801
    1156,  // 802
    1155,  // 803
    1155,  // 804
    1154,  // 805
    1153,  // 806
    1153,  // 807
    1152,  // 808
    1151,  // 809
    1150,  // 810
    1150,  // 811
    1149,  // 812
    1148,  // 813
    1148,  // 814
    1147,  // 815
    1146,  // 816
    1146,  // 817
    1145,  // 818
    1144,  // 819
    1143,  // 820
    1143,  // 821
    1142,  // 822
    1141,  // 823
    1141,  // 824
    1140,  // 825
    1139,  // 826
    1139,  // 827
    1138,  // 828
    1137,  // 829
    1137,  // 830
    1136,  // 831
    1135,  // 832
    1134,  // 833
    1134,  // 834
    1133,  // 835
    1132,  // 836
    1132,  // 837
    1131,  // 838
    1130,  // 839
    1130,  // 840
    1129,  // 841
    1128,  // 842
    1128,  // 843
    1127,  // 844
    1126,  // 845
    1126,  // 846
    1125,  // 847
    1124,  // 848
    1124,  // 849
    1123,  // 850
    1122,  // 851
    1122,  // 852
    1121,  // 853
    1120,  // 854
    1120,  // 855
    1119,  // 856
    1118,  // 857
    1118,  // 858
    1117,  // 859
    1117,  // 860
    1116,  // 861
    1115,  // 862
    1115,  // 863
    1114,  // 864
    1113,  // 865
    1113,  // 866
    1112,  // 867
    1111,  // 868
    1111,  // 869
    1110,  // 870
    1109,  // 871
    1109,  // 872
    1108,  // 873
    1108,  // 874
    1107,  // 875
    1106,  // 876
    1106,  // 877
    1105,  // 878
    1104,  // 879
    1104,  // 880
    1103,  // 881
    1103,  // 882
    1102,  // 883
    1101,  // 884
    1101,  // 885
    1100,  // 886
    1099,  // 887
    1099,  // 888
    1098,  // 889
    1098,  // 890
    1097,  // 891
    1096,  // 892
    1096,  // 893
    1095,  // 894
    1094,  // 895
    1094,  // 896
    1093,  // 897
    1093,  // 898
    1092,  // 899
    1091,  // 900
    1091,  // 901
    1090,  // 902
    1090,  // 903
    1089,  // 904
    1088,  // 905
    1088,  // 906
    1087,  // 907
    1087,  // 908
    1086,  // 909
    1085,  // 910
    1085,  // 911
    1084,  // 912
    1084,  // 913
    1083,  // 914
    1082,  // 915
    1082,  // 916
    1081,  // 917
    1081,  // 918
    1080,  // 919
    1080,  // 920
    1079,  // 921
    1078,  // 922
    1078,  // 923
    1077,  // 924
    1077,  // 925
    1076,  // 926
    1075,  // 927
    1075,  // 928
    1074,  // 929
    1074,  // 930
    1073,  // 931
    1073,  // 932
    1072,  // 933
    1071,  // 934
    1071,  // 935
    1070,  // 936
    1070,  // 937
    1069,  // 938
    1069,  // 939
    1068,  // 940
    1067,  // 941
    1067,  // 942
    1066,  // 943
    1066,  // 944
    1065,  // 945
    1065,  // 946
    1064,  // 947
    1063,  // 948
    1063,  // 949
    1062,  // 950
    1062,  // 951
    1061,  // 952
    1061,  // 953
    1060,  // 954
    1060,  // 955
    1059,  // 956
    1058,  // 957
    1058,  // 958
    1057,  // 959
    1057,  // 960
    1056,  // 961
    1056,  // 962
    1055,  // 963
    1055,  // 964
    1054,  // 965
    1054,  // 966
    1053,  // 967
    1052,  // 968
    1052,  // 969
    1051,  // 970
    1051,  // 971
    1050,  // 972
    1050,  // 973
    1049,  // 974
    1049,  // 975
    1048,  // 976
    1048,  // 977
    1047,  // 978
    1046,  // 979
    1046,  // 980
    1045,  // 981
    1045,  // 982
    1044,  // 983
    1044,  // 984
    1043,  // 985
    1043,  // 986
    1042,  // 987
    1042,  // 988
    1041,  // 989
    1041,  // 990
    1040,  // 991
    1040,  // 992
    1039,  // 993
    1039,  // 994
    1038,  // 995
    1038,  // 996
    1037,  // 997
    1036,  // 998
    1036,  // 999
    1035,  // 1000
    1035,  // 1001
    1034,  // 1002
    1034,  // 1003
    1033,  // 1004
    1033,  // 1005
    1032,  // 1006
    1032,  // 1007
    1031,  // 1008
    1031,  // 1009
    1030,  // 1010
    1030,  // 1011
    1029,  // 1012
    1029,  // 1013
    1028,  // 1014
    1028,  // 1015
    1027,  // 1016
    1027,  // 1017
    1026,  // 1018
    1026,  // 1019
    1025,  // 1020
    1025,  // 1021
    1024,  // 1022
    1024,  // 1023
  };
  