@amritk/nish-x86_64-linux 0.28.0 → 0.30.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/runtime/runtime.c CHANGED
@@ -174,14 +174,24 @@ static NISH_COLD void nish_oom(void) { nish_die("nish: out of memory\n"); }
174
174
  `nish_array_grow` and `nish_str_concat`. */
175
175
  #define NISH_ARRAY_MAX 2147483647u
176
176
 
177
- /* Slow path (size 8-byte rounded): push a chunk (>= 64 KB), bump from it. */
177
+ /* The size of the next chunk while a region is entered (runtime-region.c
178
+ swaps it in and out with the region's arena), or 0 for the thread's own
179
+ arena, whose chunks are at least 64 KB. Defined here, not there, so that
180
+ this file still links alone. */
181
+ NISH_TLS uint64_t nish_region_chunk;
182
+
183
+ /* Slow path (size 8-byte rounded): push a chunk (>= 64 KB, or a region's
184
+ next size), bump from it. A region's chunks double from its first. */
178
185
  void *nish_arena_grow(uint64_t size) {
179
186
  #ifdef NISH_ASAN
180
187
  /* An exact chunk leaves off == cap, so the inline bump never fits again and
181
188
  every block comes through here: one malloc, one redzone, per block. */
182
189
  uint64_t cap = size;
183
190
  #else
184
- uint64_t cap = size > 65536 ? size : 65536;
191
+ uint64_t next = nish_region_chunk;
192
+ uint64_t floor = next ? next : 65536;
193
+ uint64_t cap = size > floor ? size : floor;
194
+ if (next) nish_region_chunk = cap * 2;
185
195
  #endif
186
196
  /* A 64-bit request cannot always be asked for: wasm32's `size_t` is 32 bits,
187
197
  and malloc would silently take the low half of a chunk nobody can address. */
@@ -512,815 +522,851 @@ nish_str *nish_str_from_i32(int32_t v) { return nish_str_from_i64(v); }
512
522
  nish_str *nish_str_from_u64(uint64_t v) { return str_from_digits(v, 0); }
513
523
 
514
524
 
515
- /* ---- Shortest round-trip digits (Ryu)
525
+ /* ---- Shortest round-trip digits (Zmij)
516
526
 
517
- Adapted from Ryu (https://github.com/ulfjack/ryu), ryu/d2s.c and
518
- ryu/common.h. Copyright 2018 Ulf Adams. Used under the Boost Software
519
- License, Version 1.0; see runtime/LICENSE-ryu. The code from here to the end
520
- of `nish_shortest_digits` follows upstream's `d2d()` and its helpers, which
521
- is why it keeps their names, constants and comments; the two tables are
522
- regenerated by scripts/gen-pow5-tables.py rather than copied.
527
+ Adapted from Zmij (https://github.com/vitaut/zmij), zmij.c. Copyright (c)
528
+ 2025 - present, Victor Zverovich. Used under the Boost Software License,
529
+ Version 1.0 (upstream offers MIT or BSL-1.0); see runtime/LICENSE-zmij. The
530
+ code from here to the end of `nish_shortest_digits` follows upstream's
531
+ `umul192_hi128`, `umul128_add_hi64`, `compute_dec_exp`, `compute_exp_shift`
532
+ and the scalar `to_decimal_double`, which is why it keeps their constants;
533
+ the table is regenerated by scripts/gen-pow10-table.py rather than copied.
534
+ Only the digit computation is taken: no SIMD, and none of upstream's own
535
+ formatting, since the layout below is ECMAScript's rather than printf's.
523
536
 
524
537
  `String(x)` in JavaScript prints the *fewest* digits that read back as the
525
538
  same double, and the language promises that spelling. Reaching it by asking
526
- snprintf for k digits and strtod whether they round-trip -- which is what
527
- this used to do -- is both slow (up to seventeen format-and-parse round
528
- trips, 2.6 us per number) and, less obviously, *wrong*: printf can only hand
529
- back the correctly-rounded k-digit string, and for some values the shortest
530
- string that round-trips at that length is a different one. The old search
531
- printed all seventeen digits of 7.120236347223045e-307 for that reason.
532
-
533
- Ryu (Ulf Adams, PLDI 2018) computes the digits directly. The two tables are
534
- 125-bit fixed-point approximations of 5^-i and 5^i, generated with exact
535
- integer arithmetic rather than transcribed. Read the paper before touching
536
- the algorithm: the multipliers in `nish_pow5bits`, `nish_log10pow2` and
537
- `nish_log10pow5` are exact over the ranges a double's exponent can reach
538
- and nowhere else. */
539
- static const uint64_t NISH_POW5_INV_SPLIT[292][2] = {
540
- { 1u, 2305843009213693952u },
541
- { 11068046444225730970u, 1844674407370955161u },
542
- { 5165088340638674453u, 1475739525896764129u },
543
- { 7821419487252849886u, 1180591620717411303u },
544
- { 8824922364862649494u, 1888946593147858085u },
545
- { 7059937891890119595u, 1511157274518286468u },
546
- { 13026647942995916322u, 1208925819614629174u },
547
- { 9774590264567735146u, 1934281311383406679u },
548
- { 11509021026396098440u, 1547425049106725343u },
549
- { 16585914450600699399u, 1237940039285380274u },
550
- { 15469416676735388068u, 1980704062856608439u },
551
- { 16064882156130220778u, 1584563250285286751u },
552
- { 9162556910162266299u, 1267650600228229401u },
553
- { 7281393426775805432u, 2028240960365167042u },
554
- { 16893161185646375315u, 1622592768292133633u },
555
- { 2446482504291369283u, 1298074214633706907u },
556
- { 7603720821608101175u, 2076918743413931051u },
557
- { 2393627842544570617u, 1661534994731144841u },
558
- { 16672297533003297786u, 1329227995784915872u },
559
- { 11918280793837635165u, 2126764793255865396u },
560
- { 5845275820328197809u, 1701411834604692317u },
561
- { 15744267100488289217u, 1361129467683753853u },
562
- { 3054734472329800808u, 2177807148294006166u },
563
- { 17201182836831481939u, 1742245718635204932u },
564
- { 6382248639981364905u, 1393796574908163946u },
565
- { 2832900194486363201u, 2230074519853062314u },
566
- { 5955668970331000884u, 1784059615882449851u },
567
- { 1075186361522890384u, 1427247692705959881u },
568
- { 12788344622662355584u, 2283596308329535809u },
569
- { 13920024512871794791u, 1826877046663628647u },
570
- { 3757321980813615186u, 1461501637330902918u },
571
- { 10384555214134712795u, 1169201309864722334u },
572
- { 5547241898389809503u, 1870722095783555735u },
573
- { 4437793518711847602u, 1496577676626844588u },
574
- { 10928932444453298728u, 1197262141301475670u },
575
- { 17486291911125277965u, 1915619426082361072u },
576
- { 6610335899416401726u, 1532495540865888858u },
577
- { 12666966349016942027u, 1225996432692711086u },
578
- { 12888448528943286597u, 1961594292308337738u },
579
- { 17689456452638449924u, 1569275433846670190u },
580
- { 14151565162110759939u, 1255420347077336152u },
581
- { 7885109000409574610u, 2008672555323737844u },
582
- { 9997436015069570011u, 1606938044258990275u },
583
- { 7997948812055656009u, 1285550435407192220u },
584
- { 12796718099289049614u, 2056880696651507552u },
585
- { 2858676849947419045u, 1645504557321206042u },
586
- { 13354987924183666206u, 1316403645856964833u },
587
- { 17678631863951955605u, 2106245833371143733u },
588
- { 3074859046935833515u, 1684996666696914987u },
589
- { 13527933681774397782u, 1347997333357531989u },
590
- { 10576647446613305481u, 2156795733372051183u },
591
- { 15840015586774465031u, 1725436586697640946u },
592
- { 8982663654677661702u, 1380349269358112757u },
593
- { 18061610662226169046u, 2208558830972980411u },
594
- { 10759939715039024913u, 1766847064778384329u },
595
- { 12297300586773130254u, 1413477651822707463u },
596
- { 15986332124095098083u, 2261564242916331941u },
597
- { 9099716884534168143u, 1809251394333065553u },
598
- { 14658471137111155161u, 1447401115466452442u },
599
- { 4348079280205103483u, 1157920892373161954u },
600
- { 14335624477811986218u, 1852673427797059126u },
601
- { 7779150767507678651u, 1482138742237647301u },
602
- { 2533971799264232598u, 1185710993790117841u },
603
- { 15122401323048503126u, 1897137590064188545u },
604
- { 12097921058438802501u, 1517710072051350836u },
605
- { 5988988032009131678u, 1214168057641080669u },
606
- { 16961078480698431330u, 1942668892225729070u },
607
- { 13568862784558745064u, 1554135113780583256u },
608
- { 7165741412905085728u, 1243308091024466605u },
609
- { 11465186260648137165u, 1989292945639146568u },
610
- { 16550846638002330379u, 1591434356511317254u },
611
- { 16930026125143774626u, 1273147485209053803u },
612
- { 4951948911778577463u, 2037035976334486086u },
613
- { 272210314680951647u, 1629628781067588869u },
614
- { 3907117066486671641u, 1303703024854071095u },
615
- { 6251387306378674625u, 2085924839766513752u },
616
- { 16069156289328670670u, 1668739871813211001u },
617
- { 9165976216721026213u, 1334991897450568801u },
618
- { 7286864317269821294u, 2135987035920910082u },
619
- { 16897537898041588005u, 1708789628736728065u },
620
- { 13518030318433270404u, 1367031702989382452u },
621
- { 6871453250525591353u, 2187250724783011924u },
622
- { 9186511415162383406u, 1749800579826409539u },
623
- { 11038557946871817048u, 1399840463861127631u },
624
- { 10282995085511086630u, 2239744742177804210u },
625
- { 8226396068408869304u, 1791795793742243368u },
626
- { 13959814484210916090u, 1433436634993794694u },
627
- { 11267656730511734774u, 2293498615990071511u },
628
- { 5324776569667477496u, 1834798892792057209u },
629
- { 7949170070475892320u, 1467839114233645767u },
630
- { 17427382500606444826u, 1174271291386916613u },
631
- { 5747719112518849781u, 1878834066219066582u },
632
- { 15666221734240810795u, 1503067252975253265u },
633
- { 12532977387392648636u, 1202453802380202612u },
634
- { 5295368560860596524u, 1923926083808324180u },
635
- { 4236294848688477220u, 1539140867046659344u },
636
- { 7078384693692692099u, 1231312693637327475u },
637
- { 11325415509908307358u, 1970100309819723960u },
638
- { 9060332407926645887u, 1576080247855779168u },
639
- { 14626963555825137356u, 1260864198284623334u },
640
- { 12335095245094488799u, 2017382717255397335u },
641
- { 9868076196075591040u, 1613906173804317868u },
642
- { 15273158586344293478u, 1291124939043454294u },
643
- { 13369007293925138595u, 2065799902469526871u },
644
- { 7005857020398200553u, 1652639921975621497u },
645
- { 16672732060544291412u, 1322111937580497197u },
646
- { 11918976037903224966u, 2115379100128795516u },
647
- { 5845832015580669650u, 1692303280103036413u },
648
- { 12055363241948356366u, 1353842624082429130u },
649
- { 841837113407818570u, 2166148198531886609u },
650
- { 4362818505468165179u, 1732918558825509287u },
651
- { 14558301248600263113u, 1386334847060407429u },
652
- { 12225235553534690011u, 2218135755296651887u },
653
- { 2401490813343931363u, 1774508604237321510u },
654
- { 1921192650675145090u, 1419606883389857208u },
655
- { 17831303500047873437u, 2271371013423771532u },
656
- { 6886345170554478103u, 1817096810739017226u },
657
- { 1819727321701672159u, 1453677448591213781u },
658
- { 16213177116328979020u, 1162941958872971024u },
659
- { 14873036941900635463u, 1860707134196753639u },
660
- { 15587778368262418694u, 1488565707357402911u },
661
- { 8780873879868024632u, 1190852565885922329u },
662
- { 2981351763563108441u, 1905364105417475727u },
663
- { 13453127855076217722u, 1524291284333980581u },
664
- { 7073153469319063855u, 1219433027467184465u },
665
- { 11317045550910502167u, 1951092843947495144u },
666
- { 12742985255470312057u, 1560874275157996115u },
667
- { 10194388204376249646u, 1248699420126396892u },
668
- { 1553625868034358140u, 1997919072202235028u },
669
- { 8621598323911307159u, 1598335257761788022u },
670
- { 17965325103354776697u, 1278668206209430417u },
671
- { 13987124906400001422u, 2045869129935088668u },
672
- { 121653480894270168u, 1636695303948070935u },
673
- { 97322784715416134u, 1309356243158456748u },
674
- { 14913111714512307107u, 2094969989053530796u },
675
- { 8241140556867935363u, 1675975991242824637u },
676
- { 17660958889720079260u, 1340780792994259709u },
677
- { 17189487779326395846u, 2145249268790815535u },
678
- { 13751590223461116677u, 1716199415032652428u },
679
- { 18379969808252713988u, 1372959532026121942u },
680
- { 14650556434236701088u, 2196735251241795108u },
681
- { 652398703163629901u, 1757388200993436087u },
682
- { 11589965406756634890u, 1405910560794748869u },
683
- { 7475898206584884855u, 2249456897271598191u },
684
- { 2291369750525997561u, 1799565517817278553u },
685
- { 9211793429904618695u, 1439652414253822842u },
686
- { 18428218302589300235u, 2303443862806116547u },
687
- { 7363877012587619542u, 1842755090244893238u },
688
- { 13269799239553916280u, 1474204072195914590u },
689
- { 10615839391643133024u, 1179363257756731672u },
690
- { 2227947767661371545u, 1886981212410770676u },
691
- { 16539753473096738529u, 1509584969928616540u },
692
- { 13231802778477390823u, 1207667975942893232u },
693
- { 6413489186596184024u, 1932268761508629172u },
694
- { 16198837793502678189u, 1545815009206903337u },
695
- { 5580372605318321905u, 1236652007365522670u },
696
- { 8928596168509315048u, 1978643211784836272u },
697
- { 18210923379033183008u, 1582914569427869017u },
698
- { 7190041073742725760u, 1266331655542295214u },
699
- { 436019273762630246u, 2026130648867672343u },
700
- { 7727513048493924843u, 1620904519094137874u },
701
- { 9871359253537050198u, 1296723615275310299u },
702
- { 4726128361433549347u, 2074757784440496479u },
703
- { 7470251503888749801u, 1659806227552397183u },
704
- { 13354898832594820487u, 1327844982041917746u },
705
- { 13989140502667892133u, 2124551971267068394u },
706
- { 14880661216876224029u, 1699641577013654715u },
707
- { 11904528973500979224u, 1359713261610923772u },
708
- { 4289851098633925465u, 2175541218577478036u },
709
- { 18189276137874781665u, 1740432974861982428u },
710
- { 3483374466074094362u, 1392346379889585943u },
711
- { 1884050330976640656u, 2227754207823337509u },
712
- { 5196589079523222848u, 1782203366258670007u },
713
- { 15225317707844309248u, 1425762693006936005u },
714
- { 5913764258841343181u, 2281220308811097609u },
715
- { 8420360221814984868u, 1824976247048878087u },
716
- { 17804334621677718864u, 1459980997639102469u },
717
- { 17932816512084085415u, 1167984798111281975u },
718
- { 10245762345624985047u, 1868775676978051161u },
719
- { 4507261061758077715u, 1495020541582440929u },
720
- { 7295157664148372495u, 1196016433265952743u },
721
- { 7982903447895485668u, 1913626293225524389u },
722
- { 10075671573058298858u, 1530901034580419511u },
723
- { 4371188443704728763u, 1224720827664335609u },
724
- { 14372599139411386667u, 1959553324262936974u },
725
- { 15187428126271019657u, 1567642659410349579u },
726
- { 15839291315758726049u, 1254114127528279663u },
727
- { 3206773216762499739u, 2006582604045247462u },
728
- { 13633465017635730761u, 1605266083236197969u },
729
- { 14596120828850494932u, 1284212866588958375u },
730
- { 4907049252451240275u, 2054740586542333401u },
731
- { 236290587219081897u, 1643792469233866721u },
732
- { 14946427728742906810u, 1315033975387093376u },
733
- { 16535586736504830250u, 2104054360619349402u },
734
- { 5849771759720043554u, 1683243488495479522u },
735
- { 15747863852001765813u, 1346594790796383617u },
736
- { 10439186904235184007u, 2154551665274213788u },
737
- { 15730047152871967852u, 1723641332219371030u },
738
- { 12584037722297574282u, 1378913065775496824u },
739
- { 9066413911450387881u, 2206260905240794919u },
740
- { 10942479943902220628u, 1765008724192635935u },
741
- { 8753983955121776503u, 1412006979354108748u },
742
- { 10317025513452932081u, 2259211166966573997u },
743
- { 874922781278525018u, 1807368933573259198u },
744
- { 8078635854506640661u, 1445895146858607358u },
745
- { 13841606313089133175u, 1156716117486885886u },
746
- { 14767872471458792434u, 1850745787979017418u },
747
- { 746251532941302978u, 1480596630383213935u },
748
- { 597001226353042382u, 1184477304306571148u },
749
- { 15712597221132509104u, 1895163686890513836u },
750
- { 8880728962164096960u, 1516130949512411069u },
751
- { 10793931984473187891u, 1212904759609928855u },
752
- { 17270291175157100626u, 1940647615375886168u },
753
- { 2748186495899949531u, 1552518092300708935u },
754
- { 2198549196719959625u, 1242014473840567148u },
755
- { 18275073973719576693u, 1987223158144907436u },
756
- { 10930710364233751031u, 1589778526515925949u },
757
- { 12433917106128911148u, 1271822821212740759u },
758
- { 8826220925580526867u, 2034916513940385215u },
759
- { 7060976740464421494u, 1627933211152308172u },
760
- { 16716827836597268165u, 1302346568921846537u },
761
- { 11989529279587987770u, 2083754510274954460u },
762
- { 9591623423670390216u, 1667003608219963568u },
763
- { 15051996368420132820u, 1333602886575970854u },
764
- { 13015147745246481542u, 2133764618521553367u },
765
- { 3033420566713364587u, 1707011694817242694u },
766
- { 6116085268112601993u, 1365609355853794155u },
767
- { 9785736428980163188u, 2184974969366070648u },
768
- { 15207286772667951197u, 1747979975492856518u },
769
- { 1097782973908629988u, 1398383980394285215u },
770
- { 1756452758253807981u, 2237414368630856344u },
771
- { 5094511021344956708u, 1789931494904685075u },
772
- { 4075608817075965366u, 1431945195923748060u },
773
- { 6520974107321544586u, 2291112313477996896u },
774
- { 1527430471115325346u, 1832889850782397517u },
775
- { 12289990821117991246u, 1466311880625918013u },
776
- { 17210690286378213644u, 1173049504500734410u },
777
- { 9090360384495590213u, 1876879207201175057u },
778
- { 18340334751822203140u, 1501503365760940045u },
779
- { 14672267801457762512u, 1201202692608752036u },
780
- { 16096930852848599373u, 1921924308174003258u },
781
- { 1809498238053148529u, 1537539446539202607u },
782
- { 12515645034668249793u, 1230031557231362085u },
783
- { 1578287981759648052u, 1968050491570179337u },
784
- { 12330676829633449412u, 1574440393256143469u },
785
- { 13553890278448669853u, 1259552314604914775u },
786
- { 3239480371808320148u, 2015283703367863641u },
787
- { 17348979556414297411u, 1612226962694290912u },
788
- { 6500486015647617283u, 1289781570155432730u },
789
- { 10400777625036187652u, 2063650512248692368u },
790
- { 15699319729512770768u, 1650920409798953894u },
791
- { 16248804598352126938u, 1320736327839163115u },
792
- { 7551343283653851484u, 2113178124542660985u },
793
- { 6041074626923081187u, 1690542499634128788u },
794
- { 12211557331022285596u, 1352433999707303030u },
795
- { 1091747655926105338u, 2163894399531684849u },
796
- { 4562746939482794594u, 1731115519625347879u },
797
- { 7339546366328145998u, 1384892415700278303u },
798
- { 8053925371383123274u, 2215827865120445285u },
799
- { 6443140297106498619u, 1772662292096356228u },
800
- { 12533209867169019542u, 1418129833677084982u },
801
- { 5295740528502789974u, 2269007733883335972u },
802
- { 15304638867027962949u, 1815206187106668777u },
803
- { 4865013464138549713u, 1452164949685335022u },
804
- { 14960057215536570740u, 1161731959748268017u },
805
- { 9178696285890871890u, 1858771135597228828u },
806
- { 14721654658196518159u, 1487016908477783062u },
807
- { 4398626097073393881u, 1189613526782226450u },
808
- { 7037801755317430209u, 1903381642851562320u },
809
- { 5630241404253944167u, 1522705314281249856u },
810
- { 814844308661245011u, 1218164251424999885u },
811
- { 1303750893857992017u, 1949062802279999816u },
812
- { 15800395974054034906u, 1559250241823999852u },
813
- { 5261619149759407279u, 1247400193459199882u },
814
- { 12107939454356961969u, 1995840309534719811u },
815
- { 5997002748743659252u, 1596672247627775849u },
816
- { 8486951013736837725u, 1277337798102220679u },
817
- { 2511075177753209390u, 2043740476963553087u },
818
- { 13076906586428298482u, 1634992381570842469u },
819
- { 14150874083884549109u, 1307993905256673975u },
820
- { 4194654460505726958u, 2092790248410678361u },
821
- { 18113118827372222859u, 1674232198728542688u },
822
- { 3422448617672047318u, 1339385758982834151u },
823
- { 16543964232501006678u, 2143017214372534641u },
824
- { 9545822571258895019u, 1714413771498027713u },
825
- { 15015355686490936662u, 1371531017198422170u },
826
- { 5577825024675947042u, 2194449627517475473u },
827
- { 11840957649224578280u, 1755559702013980378u },
828
- { 16851463748863483271u, 1404447761611184302u },
829
- { 12204946739213931940u, 2247116418577894884u },
830
- { 13453306206113055875u, 1797693134862315907u },
831
- { 3383947335406624054u, 1438154507889852726u },
539
+ snprintf for k digits and strtod whether they round-trip is both slow and,
540
+ less obviously, *wrong*: printf can only hand back the correctly-rounded
541
+ k-digit string, and for some values the shortest string that round-trips at
542
+ that length is a different one (7.120236347223045e-307 is the pinned case).
543
+
544
+ Zmij (a Schubfach descendant) gets there with one 64x128-bit multiply: it
545
+ scales the value by a power of ten chosen so the integer part is the shorter
546
+ of the two candidate lengths, decides from the fractional part whether that
547
+ candidate already lies inside the rounding interval, and otherwise reads one
548
+ more digit off the fraction. Ryu, which this replaced, needed three
549
+ multiplies and a loop of divisions. Read upstream before touching the
550
+ arithmetic: `315653 >> 20`, `217707 >> 16` and the `+6` bias are exact over
551
+ the exponents a double can have and verified there, not in general. */
552
+ /* Generated by scripts/gen-pow10-table.py; do not hand-edit. 10^-293 to 10^323. */
553
+ #define NISH_POW10_MIN (-293)
554
+ static const uint64_t NISH_POW10_SIG[617][2] = {
555
+ { 0xcc5fc196fefd7d0cu, 0x1e53ed49a96272c8u },
556
+ { 0xff77b1fcbebcdc4fu, 0x25e8e89c13bb0f7au },
557
+ { 0x9faacf3df73609b1u, 0x77b191618c54e9acu },
558
+ { 0xc795830d75038c1du, 0xd59df5b9ef6a2417u },
559
+ { 0xf97ae3d0d2446f25u, 0x4b0573286b44ad1du },
560
+ { 0x9becce62836ac577u, 0x4ee367f9430aec32u },
561
+ { 0xc2e801fb244576d5u, 0x229c41f793cda73fu },
562
+ { 0xf3a20279ed56d48au, 0x6b43527578c1110fu },
563
+ { 0x9845418c345644d6u, 0x830a13896b78aaa9u },
564
+ { 0xbe5691ef416bd60cu, 0x23cc986bc656d553u },
565
+ { 0xedec366b11c6cb8fu, 0x2cbfbe86b7ec8aa8u },
566
+ { 0x94b3a202eb1c3f39u, 0x7bf7d71432f3d6a9u },
567
+ { 0xb9e08a83a5e34f07u, 0xdaf5ccd93fb0cc53u },
568
+ { 0xe858ad248f5c22c9u, 0xd1b3400f8f9cff68u },
569
+ { 0x91376c36d99995beu, 0x23100809b9c21fa1u },
570
+ { 0xb58547448ffffb2du, 0xabd40a0c2832a78au },
571
+ { 0xe2e69915b3fff9f9u, 0x16c90c8f323f516cu },
572
+ { 0x8dd01fad907ffc3bu, 0xae3da7d97f6792e3u },
573
+ { 0xb1442798f49ffb4au, 0x99cd11cfdf41779cu },
574
+ { 0xdd95317f31c7fa1du, 0x40405643d711d583u },
575
+ { 0x8a7d3eef7f1cfc52u, 0x482835ea666b2572u },
576
+ { 0xad1c8eab5ee43b66u, 0xda3243650005eecfu },
577
+ { 0xd863b256369d4a40u, 0x90bed43e40076a82u },
578
+ { 0x873e4f75e2224e68u, 0x5a7744a6e804a291u },
579
+ { 0xa90de3535aaae202u, 0x711515d0a205cb36u },
580
+ { 0xd3515c2831559a83u, 0x0d5a5b44ca873e03u },
581
+ { 0x8412d9991ed58091u, 0xe858790afe9486c2u },
582
+ { 0xa5178fff668ae0b6u, 0x626e974dbe39a872u },
583
+ { 0xce5d73ff402d98e3u, 0xfb0a3d212dc8128fu },
584
+ { 0x80fa687f881c7f8eu, 0x7ce66634bc9d0b99u },
585
+ { 0xa139029f6a239f72u, 0x1c1fffc1ebc44e80u },
586
+ { 0xc987434744ac874eu, 0xa327ffb266b56220u },
587
+ { 0xfbe9141915d7a922u, 0x4bf1ff9f0062baa8u },
588
+ { 0x9d71ac8fada6c9b5u, 0x6f773fc3603db4a9u },
589
+ { 0xc4ce17b399107c22u, 0xcb550fb4384d21d3u },
590
+ { 0xf6019da07f549b2bu, 0x7e2a53a146606a48u },
591
+ { 0x99c102844f94e0fbu, 0x2eda7444cbfc426du },
592
+ { 0xc0314325637a1939u, 0xfa911155fefb5308u },
593
+ { 0xf03d93eebc589f88u, 0x793555ab7eba27cau },
594
+ { 0x96267c7535b763b5u, 0x4bc1558b2f3458deu },
595
+ { 0xbbb01b9283253ca2u, 0x9eb1aaedfb016f16u },
596
+ { 0xea9c227723ee8bcbu, 0x465e15a979c1cadcu },
597
+ { 0x92a1958a7675175fu, 0x0bfacd89ec191ec9u },
598
+ { 0xb749faed14125d36u, 0xcef980ec671f667bu },
599
+ { 0xe51c79a85916f484u, 0x82b7e12780e7401au },
600
+ { 0x8f31cc0937ae58d2u, 0xd1b2ecb8b0908810u },
601
+ { 0xb2fe3f0b8599ef07u, 0x861fa7e6dcb4aa15u },
602
+ { 0xdfbdcece67006ac9u, 0x67a791e093e1d49au },
603
+ { 0x8bd6a141006042bdu, 0xe0c8bb2c5c6d24e0u },
604
+ { 0xaecc49914078536du, 0x58fae9f773886e18u },
605
+ { 0xda7f5bf590966848u, 0xaf39a475506a899eu },
606
+ { 0x888f99797a5e012du, 0x6d8406c952429603u },
607
+ { 0xaab37fd7d8f58178u, 0xc8e5087ba6d33b83u },
608
+ { 0xd5605fcdcf32e1d6u, 0xfb1e4a9a90880a64u },
609
+ { 0x855c3be0a17fcd26u, 0x5cf2eea09a55067fu },
610
+ { 0xa6b34ad8c9dfc06fu, 0xf42faa48c0ea481eu },
611
+ { 0xd0601d8efc57b08bu, 0xf13b94daf124da26u },
612
+ { 0x823c12795db6ce57u, 0x76c53d08d6b70858u },
613
+ { 0xa2cb1717b52481edu, 0x54768c4b0c64ca6eu },
614
+ { 0xcb7ddcdda26da268u, 0xa9942f5dcf7dfd09u },
615
+ { 0xfe5d54150b090b02u, 0xd3f93b35435d7c4cu },
616
+ { 0x9efa548d26e5a6e1u, 0xc47bc5014a1a6dafu },
617
+ { 0xc6b8e9b0709f109au, 0x359ab6419ca1091bu },
618
+ { 0xf867241c8cc6d4c0u, 0xc30163d203c94b62u },
619
+ { 0x9b407691d7fc44f8u, 0x79e0de63425dcf1du },
620
+ { 0xc21094364dfb5636u, 0x985915fc12f542e4u },
621
+ { 0xf294b943e17a2bc4u, 0x3e6f5b7b17b2939du },
622
+ { 0x979cf3ca6cec5b5au, 0xa705992ceecf9c42u },
623
+ { 0xbd8430bd08277231u, 0x50c6ff782a838353u },
624
+ { 0xece53cec4a314ebdu, 0xa4f8bf5635246428u },
625
+ { 0x940f4613ae5ed136u, 0x871b7795e136be99u },
626
+ { 0xb913179899f68584u, 0x28e2557b59846e3fu },
627
+ { 0xe757dd7ec07426e5u, 0x331aeada2fe589cfu },
628
+ { 0x9096ea6f3848984fu, 0x3ff0d2c85def7621u },
629
+ { 0xb4bca50b065abe63u, 0x0fed077a756b53a9u },
630
+ { 0xe1ebce4dc7f16dfbu, 0xd3e8495912c62894u },
631
+ { 0x8d3360f09cf6e4bdu, 0x64712dd7abbbd95cu },
632
+ { 0xb080392cc4349decu, 0xbd8d794d96aacfb3u },
633
+ { 0xdca04777f541c567u, 0xecf0d7a0fc5583a0u },
634
+ { 0x89e42caaf9491b60u, 0xf41686c49db57244u },
635
+ { 0xac5d37d5b79b6239u, 0x311c2875c522ced5u },
636
+ { 0xd77485cb25823ac7u, 0x7d633293366b828bu },
637
+ { 0x86a8d39ef77164bcu, 0xae5dff9c02033197u },
638
+ { 0xa8530886b54dbdebu, 0xd9f57f830283fdfcu },
639
+ { 0xd267caa862a12d66u, 0xd072df63c324fd7bu },
640
+ { 0x8380dea93da4bc60u, 0x4247cb9e59f71e6du },
641
+ { 0xa46116538d0deb78u, 0x52d9be85f074e608u },
642
+ { 0xcd795be870516656u, 0x67902e276c921f8bu },
643
+ { 0x806bd9714632dff6u, 0x00ba1cd8a3db53b6u },
644
+ { 0xa086cfcd97bf97f3u, 0x80e8a40eccd228a4u },
645
+ { 0xc8a883c0fdaf7df0u, 0x6122cd128006b2cdu },
646
+ { 0xfad2a4b13d1b5d6cu, 0x796b805720085f81u },
647
+ { 0x9cc3a6eec6311a63u, 0xcbe3303674053bb0u },
648
+ { 0xc3f490aa77bd60fcu, 0xbedbfc4411068a9cu },
649
+ { 0xf4f1b4d515acb93bu, 0xee92fb5515482d44u },
650
+ { 0x991711052d8bf3c5u, 0x751bdd152d4d1c4au },
651
+ { 0xbf5cd54678eef0b6u, 0xd262d45a78a0635du },
652
+ { 0xef340a98172aace4u, 0x86fb897116c87c34u },
653
+ { 0x9580869f0e7aac0eu, 0xd45d35e6ae3d4da0u },
654
+ { 0xbae0a846d2195712u, 0x8974836059cca109u },
655
+ { 0xe998d258869facd7u, 0x2bd1a438703fc94bu },
656
+ { 0x91ff83775423cc06u, 0x7b6306a34627ddcfu },
657
+ { 0xb67f6455292cbf08u, 0x1a3bc84c17b1d542u },
658
+ { 0xe41f3d6a7377eecau, 0x20caba5f1d9e4a93u },
659
+ { 0x8e938662882af53eu, 0x547eb47b7282ee9cu },
660
+ { 0xb23867fb2a35b28du, 0xe99e619a4f23aa43u },
661
+ { 0xdec681f9f4c31f31u, 0x6405fa00e2ec94d4u },
662
+ { 0x8b3c113c38f9f37eu, 0xde83bc408dd3dd04u },
663
+ { 0xae0b158b4738705eu, 0x9624ab50b148d445u },
664
+ { 0xd98ddaee19068c76u, 0x3badd624dd9b0957u },
665
+ { 0x87f8a8d4cfa417c9u, 0xe54ca5d70a80e5d6u },
666
+ { 0xa9f6d30a038d1dbcu, 0x5e9fcf4ccd211f4cu },
667
+ { 0xd47487cc8470652bu, 0x7647c3200069671fu },
668
+ { 0x84c8d4dfd2c63f3bu, 0x29ecd9f40041e073u },
669
+ { 0xa5fb0a17c777cf09u, 0xf468107100525890u },
670
+ { 0xcf79cc9db955c2ccu, 0x7182148d4066eeb4u },
671
+ { 0x81ac1fe293d599bfu, 0xc6f14cd848405530u },
672
+ { 0xa21727db38cb002fu, 0xb8ada00e5a506a7cu },
673
+ { 0xca9cf1d206fdc03bu, 0xa6d90811f0e4851cu },
674
+ { 0xfd442e4688bd304au, 0x908f4a166d1da663u },
675
+ { 0x9e4a9cec15763e2eu, 0x9a598e4e043287feu },
676
+ { 0xc5dd44271ad3cdbau, 0x40eff1e1853f29fdu },
677
+ { 0xf7549530e188c128u, 0xd12bee59e68ef47cu },
678
+ { 0x9a94dd3e8cf578b9u, 0x82bb74f8301958ceu },
679
+ { 0xc13a148e3032d6e7u, 0xe36a52363c1faf01u },
680
+ { 0xf18899b1bc3f8ca1u, 0xdc44e6c3cb279ac1u },
681
+ { 0x96f5600f15a7b7e5u, 0x29ab103a5ef8c0b9u },
682
+ { 0xbcb2b812db11a5deu, 0x7415d448f6b6f0e7u },
683
+ { 0xebdf661791d60f56u, 0x111b495b3464ad21u },
684
+ { 0x936b9fcebb25c995u, 0xcab10dd900beec34u },
685
+ { 0xb84687c269ef3bfbu, 0x3d5d514f40eea742u },
686
+ { 0xe65829b3046b0afau, 0x0cb4a5a3112a5112u },
687
+ { 0x8ff71a0fe2c2e6dcu, 0x47f0e785eaba72abu },
688
+ { 0xb3f4e093db73a093u, 0x59ed216765690f56u },
689
+ { 0xe0f218b8d25088b8u, 0x306869c13ec3532cu },
690
+ { 0x8c974f7383725573u, 0x1e414218c73a13fbu },
691
+ { 0xafbd2350644eeacfu, 0xe5d1929ef90898fau },
692
+ { 0xdbac6c247d62a583u, 0xdf45f746b74abf39u },
693
+ { 0x894bc396ce5da772u, 0x6b8bba8c328eb783u },
694
+ { 0xab9eb47c81f5114fu, 0x066ea92f3f326564u },
695
+ { 0xd686619ba27255a2u, 0xc80a537b0efefebdu },
696
+ { 0x8613fd0145877585u, 0xbd06742ce95f5f36u },
697
+ { 0xa798fc4196e952e7u, 0x2c48113823b73704u },
698
+ { 0xd17f3b51fca3a7a0u, 0xf75a15862ca504c5u },
699
+ { 0x82ef85133de648c4u, 0x9a984d73dbe722fbu },
700
+ { 0xa3ab66580d5fdaf5u, 0xc13e60d0d2e0ebbau },
701
+ { 0xcc963fee10b7d1b3u, 0x318df905079926a8u },
702
+ { 0xffbbcfe994e5c61fu, 0xfdf17746497f7052u },
703
+ { 0x9fd561f1fd0f9bd3u, 0xfeb6ea8bedefa633u },
704
+ { 0xc7caba6e7c5382c8u, 0xfe64a52ee96b8fc0u },
705
+ { 0xf9bd690a1b68637bu, 0x3dfdce7aa3c673b0u },
706
+ { 0x9c1661a651213e2du, 0x06bea10ca65c084eu },
707
+ { 0xc31bfa0fe5698db8u, 0x486e494fcff30a62u },
708
+ { 0xf3e2f893dec3f126u, 0x5a89dba3c3efccfau },
709
+ { 0x986ddb5c6b3a76b7u, 0xf89629465a75e01cu },
710
+ { 0xbe89523386091465u, 0xf6bbb397f1135823u },
711
+ { 0xee2ba6c0678b597fu, 0x746aa07ded582e2cu },
712
+ { 0x94db483840b717efu, 0xa8c2a44eb4571cdcu },
713
+ { 0xba121a4650e4ddebu, 0x92f34d62616ce413u },
714
+ { 0xe896a0d7e51e1566u, 0x77b020baf9c81d17u },
715
+ { 0x915e2486ef32cd60u, 0x0ace1474dc1d122eu },
716
+ { 0xb5b5ada8aaff80b8u, 0x0d819992132456bau },
717
+ { 0xe3231912d5bf60e6u, 0x10e1fff697ed6c69u },
718
+ { 0x8df5efabc5979c8fu, 0xca8d3ffa1ef463c1u },
719
+ { 0xb1736b96b6fd83b3u, 0xbd308ff8a6b17cb2u },
720
+ { 0xddd0467c64bce4a0u, 0xac7cb3f6d05ddbdeu },
721
+ { 0x8aa22c0dbef60ee4u, 0x6bcdf07a423aa96bu },
722
+ { 0xad4ab7112eb3929du, 0x86c16c98d2c953c6u },
723
+ { 0xd89d64d57a607744u, 0xe871c7bf077ba8b7u },
724
+ { 0x87625f056c7c4a8bu, 0x11471cd764ad4972u },
725
+ { 0xa93af6c6c79b5d2du, 0xd598e40d3dd89bcfu },
726
+ { 0xd389b47879823479u, 0x4aff1d108d4ec2c3u },
727
+ { 0x843610cb4bf160cbu, 0xcedf722a585139bau },
728
+ { 0xa54394fe1eedb8feu, 0xc2974eb4ee658828u },
729
+ { 0xce947a3da6a9273eu, 0x733d226229feea32u },
730
+ { 0x811ccc668829b887u, 0x0806357d5a3f525fu },
731
+ { 0xa163ff802a3426a8u, 0xca07c2dcb0cf26f7u },
732
+ { 0xc9bcff6034c13052u, 0xfc89b393dd02f0b5u },
733
+ { 0xfc2c3f3841f17c67u, 0xbbac2078d443ace2u },
734
+ { 0x9d9ba7832936edc0u, 0xd54b944b84aa4c0du },
735
+ { 0xc5029163f384a931u, 0x0a9e795e65d4df11u },
736
+ { 0xf64335bcf065d37du, 0x4d4617b5ff4a16d5u },
737
+ { 0x99ea0196163fa42eu, 0x504bced1bf8e4e45u },
738
+ { 0xc06481fb9bcf8d39u, 0xe45ec2862f71e1d6u },
739
+ { 0xf07da27a82c37088u, 0x5d767327bb4e5a4cu },
740
+ { 0x964e858c91ba2655u, 0x3a6a07f8d510f86fu },
741
+ { 0xbbe226efb628afeau, 0x890489f70a55368bu },
742
+ { 0xeadab0aba3b2dbe5u, 0x2b45ac74ccea842eu },
743
+ { 0x92c8ae6b464fc96fu, 0x3b0b8bc90012929du },
744
+ { 0xb77ada0617e3bbcbu, 0x09ce6ebb40173744u },
745
+ { 0xe55990879ddcaabdu, 0xcc420a6a101d0515u },
746
+ { 0x8f57fa54c2a9eab6u, 0x9fa946824a12232du },
747
+ { 0xb32df8e9f3546564u, 0x47939822dc96abf9u },
748
+ { 0xdff9772470297ebdu, 0x59787e2b93bc56f7u },
749
+ { 0x8bfbea76c619ef36u, 0x57eb4edb3c55b65au },
750
+ { 0xaefae51477a06b03u, 0xede622920b6b23f1u },
751
+ { 0xdab99e59958885c4u, 0xe95fab368e45ecedu },
752
+ { 0x88b402f7fd75539bu, 0x11dbcb0218ebb414u },
753
+ { 0xaae103b5fcd2a881u, 0xd652bdc29f26a119u },
754
+ { 0xd59944a37c0752a2u, 0x4be76d3346f0495fu },
755
+ { 0x857fcae62d8493a5u, 0x6f70a4400c562ddbu },
756
+ { 0xa6dfbd9fb8e5b88eu, 0xcb4ccd500f6bb952u },
757
+ { 0xd097ad07a71f26b2u, 0x7e2000a41346a7a7u },
758
+ { 0x825ecc24c873782fu, 0x8ed400668c0c28c8u },
759
+ { 0xa2f67f2dfa90563bu, 0x728900802f0f32fau },
760
+ { 0xcbb41ef979346bcau, 0x4f2b40a03ad2ffb9u },
761
+ { 0xfea126b7d78186bcu, 0xe2f610c84987bfa8u },
762
+ { 0x9f24b832e6b0f436u, 0x0dd9ca7d2df4d7c9u },
763
+ { 0xc6ede63fa05d3143u, 0x91503d1c79720dbbu },
764
+ { 0xf8a95fcf88747d94u, 0x75a44c6397ce912au },
765
+ { 0x9b69dbe1b548ce7cu, 0xc986afbe3ee11abau },
766
+ { 0xc24452da229b021bu, 0xfbe85badce996168u },
767
+ { 0xf2d56790ab41c2a2u, 0xfae27299423fb9c3u },
768
+ { 0x97c560ba6b0919a5u, 0xdccd879fc967d41au },
769
+ { 0xbdb6b8e905cb600fu, 0x5400e987bbc1c920u },
770
+ { 0xed246723473e3813u, 0x290123e9aab23b68u },
771
+ { 0x9436c0760c86e30bu, 0xf9a0b6720aaf6521u },
772
+ { 0xb94470938fa89bceu, 0xf808e40e8d5b3e69u },
773
+ { 0xe7958cb87392c2c2u, 0xb60b1d1230b20e04u },
774
+ { 0x90bd77f3483bb9b9u, 0xb1c6f22b5e6f48c2u },
775
+ { 0xb4ecd5f01a4aa828u, 0x1e38aeb6360b1af3u },
776
+ { 0xe2280b6c20dd5232u, 0x25c6da63c38de1b0u },
777
+ { 0x8d590723948a535fu, 0x579c487e5a38ad0eu },
778
+ { 0xb0af48ec79ace837u, 0x2d835a9df0c6d851u },
779
+ { 0xdcdb1b2798182244u, 0xf8e431456cf88e65u },
780
+ { 0x8a08f0f8bf0f156bu, 0x1b8e9ecb641b58ffu },
781
+ { 0xac8b2d36eed2dac5u, 0xe272467e3d222f3fu },
782
+ { 0xd7adf884aa879177u, 0x5b0ed81dcc6abb0fu },
783
+ { 0x86ccbb52ea94baeau, 0x98e947129fc2b4e9u },
784
+ { 0xa87fea27a539e9a5u, 0x3f2398d747b36224u },
785
+ { 0xd29fe4b18e88640eu, 0x8eec7f0d19a03aadu },
786
+ { 0x83a3eeeef9153e89u, 0x1953cf68300424acu },
787
+ { 0xa48ceaaab75a8e2bu, 0x5fa8c3423c052dd7u },
788
+ { 0xcdb02555653131b6u, 0x3792f412cb06794du },
789
+ { 0x808e17555f3ebf11u, 0xe2bbd88bbee40bd0u },
790
+ { 0xa0b19d2ab70e6ed6u, 0x5b6aceaeae9d0ec4u },
791
+ { 0xc8de047564d20a8bu, 0xf245825a5a445275u },
792
+ { 0xfb158592be068d2eu, 0xeed6e2f0f0d56712u },
793
+ { 0x9ced737bb6c4183du, 0x55464dd69685606bu },
794
+ { 0xc428d05aa4751e4cu, 0xaa97e14c3c26b886u },
795
+ { 0xf53304714d9265dfu, 0xd53dd99f4b3066a8u },
796
+ { 0x993fe2c6d07b7fabu, 0xe546a8038efe4029u },
797
+ { 0xbf8fdb78849a5f96u, 0xde98520472bdd033u },
798
+ { 0xef73d256a5c0f77cu, 0x963e66858f6d4440u },
799
+ { 0x95a8637627989aadu, 0xdde7001379a44aa8u },
800
+ { 0xbb127c53b17ec159u, 0x5560c018580d5d52u },
801
+ { 0xe9d71b689dde71afu, 0xaab8f01e6e10b4a6u },
802
+ { 0x9226712162ab070du, 0xcab3961304ca70e8u },
803
+ { 0xb6b00d69bb55c8d1u, 0x3d607b97c5fd0d22u },
804
+ { 0xe45c10c42a2b3b05u, 0x8cb89a7db77c506au },
805
+ { 0x8eb98a7a9a5b04e3u, 0x77f3608e92adb242u },
806
+ { 0xb267ed1940f1c61cu, 0x55f038b237591ed3u },
807
+ { 0xdf01e85f912e37a3u, 0x6b6c46dec52f6688u },
808
+ { 0x8b61313bbabce2c6u, 0x2323ac4b3b3da015u },
809
+ { 0xae397d8aa96c1b77u, 0xabec975e0a0d081au },
810
+ { 0xd9c7dced53c72255u, 0x96e7bd358c904a21u },
811
+ { 0x881cea14545c7575u, 0x7e50d64177da2e54u },
812
+ { 0xaa242499697392d2u, 0xdde50bd1d5d0b9e9u },
813
+ { 0xd4ad2dbfc3d07787u, 0x955e4ec64b44e864u },
814
+ { 0x84ec3c97da624ab4u, 0xbd5af13bef0b113eu },
815
+ { 0xa6274bbdd0fadd61u, 0xecb1ad8aeacdd58eu },
816
+ { 0xcfb11ead453994bau, 0x67de18eda5814af2u },
817
+ { 0x81ceb32c4b43fcf4u, 0x80eacf948770ced7u },
818
+ { 0xa2425ff75e14fc31u, 0xa1258379a94d028du },
819
+ { 0xcad2f7f5359a3b3eu, 0x096ee45813a04330u },
820
+ { 0xfd87b5f28300ca0du, 0x8bca9d6e188853fcu },
821
+ { 0x9e74d1b791e07e48u, 0x775ea264cf55347du },
822
+ { 0xc612062576589ddau, 0x95364afe032a819du },
823
+ { 0xf79687aed3eec551u, 0x3a83ddbd83f52204u },
824
+ { 0x9abe14cd44753b52u, 0xc4926a9672793542u },
825
+ { 0xc16d9a0095928a27u, 0x75b7053c0f178293u },
826
+ { 0xf1c90080baf72cb1u, 0x5324c68b12dd6338u },
827
+ { 0x971da05074da7beeu, 0xd3f6fc16ebca5e03u },
828
+ { 0xbce5086492111aeau, 0x88f4bb1ca6bcf584u },
829
+ { 0xec1e4a7db69561a5u, 0x2b31e9e3d06c32e5u },
830
+ { 0x9392ee8e921d5d07u, 0x3aff322e62439fcfu },
831
+ { 0xb877aa3236a4b449u, 0x09befeb9fad487c2u },
832
+ { 0xe69594bec44de15bu, 0x4c2ebe687989a9b3u },
833
+ { 0x901d7cf73ab0acd9u, 0x0f9d37014bf60a10u },
834
+ { 0xb424dc35095cd80fu, 0x538484c19ef38c94u },
835
+ { 0xe12e13424bb40e13u, 0x2865a5f206b06fb9u },
836
+ { 0x8cbccc096f5088cbu, 0xf93f87b7442e45d3u },
837
+ { 0xafebff0bcb24aafeu, 0xf78f69a51539d748u },
838
+ { 0xdbe6fecebdedd5beu, 0xb573440e5a884d1bu },
839
+ { 0x89705f4136b4a597u, 0x31680a88f8953030u },
840
+ { 0xabcc77118461cefcu, 0xfdc20d2b36ba7c3du },
841
+ { 0xd6bf94d5e57a42bcu, 0x3d32907604691b4cu },
842
+ { 0x8637bd05af6c69b5u, 0xa63f9a49c2c1b10fu },
843
+ { 0xa7c5ac471b478423u, 0x0fcf80dc33721d53u },
844
+ { 0xd1b71758e219652bu, 0xd3c36113404ea4a8u },
845
+ { 0x83126e978d4fdf3bu, 0x645a1cac083126e9u },
846
+ { 0xa3d70a3d70a3d70au, 0x3d70a3d70a3d70a3u },
847
+ { 0xccccccccccccccccu, 0xccccccccccccccccu },
848
+ { 0x8000000000000000u, 0x0000000000000000u },
849
+ { 0xa000000000000000u, 0x0000000000000000u },
850
+ { 0xc800000000000000u, 0x0000000000000000u },
851
+ { 0xfa00000000000000u, 0x0000000000000000u },
852
+ { 0x9c40000000000000u, 0x0000000000000000u },
853
+ { 0xc350000000000000u, 0x0000000000000000u },
854
+ { 0xf424000000000000u, 0x0000000000000000u },
855
+ { 0x9896800000000000u, 0x0000000000000000u },
856
+ { 0xbebc200000000000u, 0x0000000000000000u },
857
+ { 0xee6b280000000000u, 0x0000000000000000u },
858
+ { 0x9502f90000000000u, 0x0000000000000000u },
859
+ { 0xba43b74000000000u, 0x0000000000000000u },
860
+ { 0xe8d4a51000000000u, 0x0000000000000000u },
861
+ { 0x9184e72a00000000u, 0x0000000000000000u },
862
+ { 0xb5e620f480000000u, 0x0000000000000000u },
863
+ { 0xe35fa931a0000000u, 0x0000000000000000u },
864
+ { 0x8e1bc9bf04000000u, 0x0000000000000000u },
865
+ { 0xb1a2bc2ec5000000u, 0x0000000000000000u },
866
+ { 0xde0b6b3a76400000u, 0x0000000000000000u },
867
+ { 0x8ac7230489e80000u, 0x0000000000000000u },
868
+ { 0xad78ebc5ac620000u, 0x0000000000000000u },
869
+ { 0xd8d726b7177a8000u, 0x0000000000000000u },
870
+ { 0x878678326eac9000u, 0x0000000000000000u },
871
+ { 0xa968163f0a57b400u, 0x0000000000000000u },
872
+ { 0xd3c21bcecceda100u, 0x0000000000000000u },
873
+ { 0x84595161401484a0u, 0x0000000000000000u },
874
+ { 0xa56fa5b99019a5c8u, 0x0000000000000000u },
875
+ { 0xcecb8f27f4200f3au, 0x0000000000000000u },
876
+ { 0x813f3978f8940984u, 0x4000000000000000u },
877
+ { 0xa18f07d736b90be5u, 0x5000000000000000u },
878
+ { 0xc9f2c9cd04674edeu, 0xa400000000000000u },
879
+ { 0xfc6f7c4045812296u, 0x4d00000000000000u },
880
+ { 0x9dc5ada82b70b59du, 0xf020000000000000u },
881
+ { 0xc5371912364ce305u, 0x6c28000000000000u },
882
+ { 0xf684df56c3e01bc6u, 0xc732000000000000u },
883
+ { 0x9a130b963a6c115cu, 0x3c7f400000000000u },
884
+ { 0xc097ce7bc90715b3u, 0x4b9f100000000000u },
885
+ { 0xf0bdc21abb48db20u, 0x1e86d40000000000u },
886
+ { 0x96769950b50d88f4u, 0x1314448000000000u },
887
+ { 0xbc143fa4e250eb31u, 0x17d955a000000000u },
888
+ { 0xeb194f8e1ae525fdu, 0x5dcfab0800000000u },
889
+ { 0x92efd1b8d0cf37beu, 0x5aa1cae500000000u },
890
+ { 0xb7abc627050305adu, 0xf14a3d9e40000000u },
891
+ { 0xe596b7b0c643c719u, 0x6d9ccd05d0000000u },
892
+ { 0x8f7e32ce7bea5c6fu, 0xe4820023a2000000u },
893
+ { 0xb35dbf821ae4f38bu, 0xdda2802c8a800000u },
894
+ { 0xe0352f62a19e306eu, 0xd50b2037ad200000u },
895
+ { 0x8c213d9da502de45u, 0x4526f422cc340000u },
896
+ { 0xaf298d050e4395d6u, 0x9670b12b7f410000u },
897
+ { 0xdaf3f04651d47b4cu, 0x3c0cdd765f114000u },
898
+ { 0x88d8762bf324cd0fu, 0xa5880a69fb6ac800u },
899
+ { 0xab0e93b6efee0053u, 0x8eea0d047a457a00u },
900
+ { 0xd5d238a4abe98068u, 0x72a4904598d6d880u },
901
+ { 0x85a36366eb71f041u, 0x47a6da2b7f864750u },
902
+ { 0xa70c3c40a64e6c51u, 0x999090b65f67d924u },
903
+ { 0xd0cf4b50cfe20765u, 0xfff4b4e3f741cf6du },
904
+ { 0x82818f1281ed449fu, 0xbff8f10e7a8921a4u },
905
+ { 0xa321f2d7226895c7u, 0xaff72d52192b6a0du },
906
+ { 0xcbea6f8ceb02bb39u, 0x9bf4f8a69f764490u },
907
+ { 0xfee50b7025c36a08u, 0x02f236d04753d5b4u },
908
+ { 0x9f4f2726179a2245u, 0x01d762422c946590u },
909
+ { 0xc722f0ef9d80aad6u, 0x424d3ad2b7b97ef5u },
910
+ { 0xf8ebad2b84e0d58bu, 0xd2e0898765a7deb2u },
911
+ { 0x9b934c3b330c8577u, 0x63cc55f49f88eb2fu },
912
+ { 0xc2781f49ffcfa6d5u, 0x3cbf6b71c76b25fbu },
913
+ { 0xf316271c7fc3908au, 0x8bef464e3945ef7au },
914
+ { 0x97edd871cfda3a56u, 0x97758bf0e3cbb5acu },
915
+ { 0xbde94e8e43d0c8ecu, 0x3d52eeed1cbea317u },
916
+ { 0xed63a231d4c4fb27u, 0x4ca7aaa863ee4bddu },
917
+ { 0x945e455f24fb1cf8u, 0x8fe8caa93e74ef6au },
918
+ { 0xb975d6b6ee39e436u, 0xb3e2fd538e122b44u },
919
+ { 0xe7d34c64a9c85d44u, 0x60dbbca87196b616u },
920
+ { 0x90e40fbeea1d3a4au, 0xbc8955e946fe31cdu },
921
+ { 0xb51d13aea4a488ddu, 0x6babab6398bdbe41u },
922
+ { 0xe264589a4dcdab14u, 0xc696963c7eed2dd1u },
923
+ { 0x8d7eb76070a08aecu, 0xfc1e1de5cf543ca2u },
924
+ { 0xb0de65388cc8ada8u, 0x3b25a55f43294bcbu },
925
+ { 0xdd15fe86affad912u, 0x49ef0eb713f39ebeu },
926
+ { 0x8a2dbf142dfcc7abu, 0x6e3569326c784337u },
927
+ { 0xacb92ed9397bf996u, 0x49c2c37f07965404u },
928
+ { 0xd7e77a8f87daf7fbu, 0xdc33745ec97be906u },
929
+ { 0x86f0ac99b4e8dafdu, 0x69a028bb3ded71a3u },
930
+ { 0xa8acd7c0222311bcu, 0xc40832ea0d68ce0cu },
931
+ { 0xd2d80db02aabd62bu, 0xf50a3fa490c30190u },
932
+ { 0x83c7088e1aab65dbu, 0x792667c6da79e0fau },
933
+ { 0xa4b8cab1a1563f52u, 0x577001b891185938u },
934
+ { 0xcde6fd5e09abcf26u, 0xed4c0226b55e6f86u },
935
+ { 0x80b05e5ac60b6178u, 0x544f8158315b05b4u },
936
+ { 0xa0dc75f1778e39d6u, 0x696361ae3db1c721u },
937
+ { 0xc913936dd571c84cu, 0x03bc3a19cd1e38e9u },
938
+ { 0xfb5878494ace3a5fu, 0x04ab48a04065c723u },
939
+ { 0x9d174b2dcec0e47bu, 0x62eb0d64283f9c76u },
940
+ { 0xc45d1df942711d9au, 0x3ba5d0bd324f8394u },
941
+ { 0xf5746577930d6500u, 0xca8f44ec7ee36479u },
942
+ { 0x9968bf6abbe85f20u, 0x7e998b13cf4e1ecbu },
943
+ { 0xbfc2ef456ae276e8u, 0x9e3fedd8c321a67eu },
944
+ { 0xefb3ab16c59b14a2u, 0xc5cfe94ef3ea101eu },
945
+ { 0x95d04aee3b80ece5u, 0xbba1f1d158724a12u },
946
+ { 0xbb445da9ca61281fu, 0x2a8a6e45ae8edc97u },
947
+ { 0xea1575143cf97226u, 0xf52d09d71a3293bdu },
948
+ { 0x924d692ca61be758u, 0x593c2626705f9c56u },
949
+ { 0xb6e0c377cfa2e12eu, 0x6f8b2fb00c77836cu },
950
+ { 0xe498f455c38b997au, 0x0b6dfb9c0f956447u },
951
+ { 0x8edf98b59a373fecu, 0x4724bd4189bd5eacu },
952
+ { 0xb2977ee300c50fe7u, 0x58edec91ec2cb657u },
953
+ { 0xdf3d5e9bc0f653e1u, 0x2f2967b66737e3edu },
954
+ { 0x8b865b215899f46cu, 0xbd79e0d20082ee74u },
955
+ { 0xae67f1e9aec07187u, 0xecd8590680a3aa11u },
956
+ { 0xda01ee641a708de9u, 0xe80e6f4820cc9495u },
957
+ { 0x884134fe908658b2u, 0x3109058d147fdcddu },
958
+ { 0xaa51823e34a7eedeu, 0xbd4b46f0599fd415u },
959
+ { 0xd4e5e2cdc1d1ea96u, 0x6c9e18ac7007c91au },
960
+ { 0x850fadc09923329eu, 0x03e2cf6bc604ddb0u },
961
+ { 0xa6539930bf6bff45u, 0x84db8346b786151cu },
962
+ { 0xcfe87f7cef46ff16u, 0xe612641865679a63u },
963
+ { 0x81f14fae158c5f6eu, 0x4fcb7e8f3f60c07eu },
964
+ { 0xa26da3999aef7749u, 0xe3be5e330f38f09du },
965
+ { 0xcb090c8001ab551cu, 0x5cadf5bfd3072cc5u },
966
+ { 0xfdcb4fa002162a63u, 0x73d9732fc7c8f7f6u },
967
+ { 0x9e9f11c4014dda7eu, 0x2867e7fddcdd9afau },
968
+ { 0xc646d63501a1511du, 0xb281e1fd541501b8u },
969
+ { 0xf7d88bc24209a565u, 0x1f225a7ca91a4226u },
970
+ { 0x9ae757596946075fu, 0x3375788de9b06958u },
971
+ { 0xc1a12d2fc3978937u, 0x0052d6b1641c83aeu },
972
+ { 0xf209787bb47d6b84u, 0xc0678c5dbd23a49au },
973
+ { 0x9745eb4d50ce6332u, 0xf840b7ba963646e0u },
974
+ { 0xbd176620a501fbffu, 0xb650e5a93bc3d898u },
975
+ { 0xec5d3fa8ce427affu, 0xa3e51f138ab4cebeu },
976
+ { 0x93ba47c980e98cdfu, 0xc66f336c36b10137u },
977
+ { 0xb8a8d9bbe123f017u, 0xb80b0047445d4184u },
978
+ { 0xe6d3102ad96cec1du, 0xa60dc059157491e5u },
979
+ { 0x9043ea1ac7e41392u, 0x87c89837ad68db2fu },
980
+ { 0xb454e4a179dd1877u, 0x29babe4598c311fbu },
981
+ { 0xe16a1dc9d8545e94u, 0xf4296dd6fef3d67au },
982
+ { 0x8ce2529e2734bb1du, 0x1899e4a65f58660cu },
983
+ { 0xb01ae745b101e9e4u, 0x5ec05dcff72e7f8fu },
984
+ { 0xdc21a1171d42645du, 0x76707543f4fa1f73u },
985
+ { 0x899504ae72497ebau, 0x6a06494a791c53a8u },
986
+ { 0xabfa45da0edbde69u, 0x0487db9d17636892u },
987
+ { 0xd6f8d7509292d603u, 0x45a9d2845d3c42b6u },
988
+ { 0x865b86925b9bc5c2u, 0x0b8a2392ba45a9b2u },
989
+ { 0xa7f26836f282b732u, 0x8e6cac7768d7141eu },
990
+ { 0xd1ef0244af2364ffu, 0x3207d795430cd926u },
991
+ { 0x8335616aed761f1fu, 0x7f44e6bd49e807b8u },
992
+ { 0xa402b9c5a8d3a6e7u, 0x5f16206c9c6209a6u },
993
+ { 0xcd036837130890a1u, 0x36dba887c37a8c0fu },
994
+ { 0x802221226be55a64u, 0xc2494954da2c9789u },
995
+ { 0xa02aa96b06deb0fdu, 0xf2db9baa10b7bd6cu },
996
+ { 0xc83553c5c8965d3du, 0x6f92829494e5acc7u },
997
+ { 0xfa42a8b73abbf48cu, 0xcb772339ba1f17f9u },
998
+ { 0x9c69a97284b578d7u, 0xff2a760414536efbu },
999
+ { 0xc38413cf25e2d70du, 0xfef5138519684abau },
1000
+ { 0xf46518c2ef5b8cd1u, 0x7eb258665fc25d69u },
1001
+ { 0x98bf2f79d5993802u, 0xef2f773ffbd97a61u },
1002
+ { 0xbeeefb584aff8603u, 0xaafb550ffacfd8fau },
1003
+ { 0xeeaaba2e5dbf6784u, 0x95ba2a53f983cf38u },
1004
+ { 0x952ab45cfa97a0b2u, 0xdd945a747bf26183u },
1005
+ { 0xba756174393d88dfu, 0x94f971119aeef9e4u },
1006
+ { 0xe912b9d1478ceb17u, 0x7a37cd5601aab85du },
1007
+ { 0x91abb422ccb812eeu, 0xac62e055c10ab33au },
1008
+ { 0xb616a12b7fe617aau, 0x577b986b314d6009u },
1009
+ { 0xe39c49765fdf9d94u, 0xed5a7e85fda0b80bu },
1010
+ { 0x8e41ade9fbebc27du, 0x14588f13be847307u },
1011
+ { 0xb1d219647ae6b31cu, 0x596eb2d8ae258fc8u },
1012
+ { 0xde469fbd99a05fe3u, 0x6fca5f8ed9aef3bbu },
1013
+ { 0x8aec23d680043beeu, 0x25de7bb9480d5854u },
1014
+ { 0xada72ccc20054ae9u, 0xaf561aa79a10ae6au },
1015
+ { 0xd910f7ff28069da4u, 0x1b2ba1518094da04u },
1016
+ { 0x87aa9aff79042286u, 0x90fb44d2f05d0842u },
1017
+ { 0xa99541bf57452b28u, 0x353a1607ac744a53u },
1018
+ { 0xd3fa922f2d1675f2u, 0x42889b8997915ce8u },
1019
+ { 0x847c9b5d7c2e09b7u, 0x69956135febada11u },
1020
+ { 0xa59bc234db398c25u, 0x43fab9837e699095u },
1021
+ { 0xcf02b2c21207ef2eu, 0x94f967e45e03f4bbu },
1022
+ { 0x8161afb94b44f57du, 0x1d1be0eebac278f5u },
1023
+ { 0xa1ba1ba79e1632dcu, 0x6462d92a69731732u },
1024
+ { 0xca28a291859bbf93u, 0x7d7b8f7503cfdcfeu },
1025
+ { 0xfcb2cb35e702af78u, 0x5cda735244c3d43eu },
1026
+ { 0x9defbf01b061adabu, 0x3a0888136afa64a7u },
1027
+ { 0xc56baec21c7a1916u, 0x088aaa1845b8fdd0u },
1028
+ { 0xf6c69a72a3989f5bu, 0x8aad549e57273d45u },
1029
+ { 0x9a3c2087a63f6399u, 0x36ac54e2f678864bu },
1030
+ { 0xc0cb28a98fcf3c7fu, 0x84576a1bb416a7ddu },
1031
+ { 0xf0fdf2d3f3c30b9fu, 0x656d44a2a11c51d5u },
1032
+ { 0x969eb7c47859e743u, 0x9f644ae5a4b1b325u },
1033
+ { 0xbc4665b596706114u, 0x873d5d9f0dde1feeu },
1034
+ { 0xeb57ff22fc0c7959u, 0xa90cb506d155a7eau },
1035
+ { 0x9316ff75dd87cbd8u, 0x09a7f12442d588f2u },
1036
+ { 0xb7dcbf5354e9beceu, 0x0c11ed6d538aeb2fu },
1037
+ { 0xe5d3ef282a242e81u, 0x8f1668c8a86da5fau },
1038
+ { 0x8fa475791a569d10u, 0xf96e017d694487bcu },
1039
+ { 0xb38d92d760ec4455u, 0x37c981dcc395a9acu },
1040
+ { 0xe070f78d3927556au, 0x85bbe253f47b1417u },
1041
+ { 0x8c469ab843b89562u, 0x93956d7478ccec8eu },
1042
+ { 0xaf58416654a6babbu, 0x387ac8d1970027b2u },
1043
+ { 0xdb2e51bfe9d0696au, 0x06997b05fcc0319eu },
1044
+ { 0x88fcf317f22241e2u, 0x441fece3bdf81f03u },
1045
+ { 0xab3c2fddeeaad25au, 0xd527e81cad7626c3u },
1046
+ { 0xd60b3bd56a5586f1u, 0x8a71e223d8d3b074u },
1047
+ { 0x85c7056562757456u, 0xf6872d5667844e49u },
1048
+ { 0xa738c6bebb12d16cu, 0xb428f8ac016561dbu },
1049
+ { 0xd106f86e69d785c7u, 0xe13336d701beba52u },
1050
+ { 0x82a45b450226b39cu, 0xecc0024661173473u },
1051
+ { 0xa34d721642b06084u, 0x27f002d7f95d0190u },
1052
+ { 0xcc20ce9bd35c78a5u, 0x31ec038df7b441f4u },
1053
+ { 0xff290242c83396ceu, 0x7e67047175a15271u },
1054
+ { 0x9f79a169bd203e41u, 0x0f0062c6e984d386u },
1055
+ { 0xc75809c42c684dd1u, 0x52c07b78a3e60868u },
1056
+ { 0xf92e0c3537826145u, 0xa7709a56ccdf8a82u },
1057
+ { 0x9bbcc7a142b17ccbu, 0x88a66076400bb691u },
1058
+ { 0xc2abf989935ddbfeu, 0x6acff893d00ea435u },
1059
+ { 0xf356f7ebf83552feu, 0x0583f6b8c4124d43u },
1060
+ { 0x98165af37b2153deu, 0xc3727a337a8b704au },
1061
+ { 0xbe1bf1b059e9a8d6u, 0x744f18c0592e4c5cu },
1062
+ { 0xeda2ee1c7064130cu, 0x1162def06f79df73u },
1063
+ { 0x9485d4d1c63e8be7u, 0x8addcb5645ac2ba8u },
1064
+ { 0xb9a74a0637ce2ee1u, 0x6d953e2bd7173692u },
1065
+ { 0xe8111c87c5c1ba99u, 0xc8fa8db6ccdd0437u },
1066
+ { 0x910ab1d4db9914a0u, 0x1d9c9892400a22a2u },
1067
+ { 0xb54d5e4a127f59c8u, 0x2503beb6d00cab4bu },
1068
+ { 0xe2a0b5dc971f303au, 0x2e44ae64840fd61du },
1069
+ { 0x8da471a9de737e24u, 0x5ceaecfed289e5d2u },
1070
+ { 0xb10d8e1456105dadu, 0x7425a83e872c5f47u },
1071
+ { 0xdd50f1996b947518u, 0xd12f124e28f77719u },
1072
+ { 0x8a5296ffe33cc92fu, 0x82bd6b70d99aaa6fu },
1073
+ { 0xace73cbfdc0bfb7bu, 0x636cc64d1001550bu },
1074
+ { 0xd8210befd30efa5au, 0x3c47f7e05401aa4eu },
1075
+ { 0x8714a775e3e95c78u, 0x65acfaec34810a71u },
1076
+ { 0xa8d9d1535ce3b396u, 0x7f1839a741a14d0du },
1077
+ { 0xd31045a8341ca07cu, 0x1ede48111209a050u },
1078
+ { 0x83ea2b892091e44du, 0x934aed0aab460432u },
1079
+ { 0xa4e4b66b68b65d60u, 0xf81da84d5617853fu },
1080
+ { 0xce1de40642e3f4b9u, 0x36251260ab9d668eu },
1081
+ { 0x80d2ae83e9ce78f3u, 0xc1d72b7c6b426019u },
1082
+ { 0xa1075a24e4421730u, 0xb24cf65b8612f81fu },
1083
+ { 0xc94930ae1d529cfcu, 0xdee033f26797b627u },
1084
+ { 0xfb9b7cd9a4a7443cu, 0x169840ef017da3b1u },
1085
+ { 0x9d412e0806e88aa5u, 0x8e1f289560ee864eu },
1086
+ { 0xc491798a08a2ad4eu, 0xf1a6f2bab92a27e2u },
1087
+ { 0xf5b5d7ec8acb58a2u, 0xae10af696774b1dbu },
1088
+ { 0x9991a6f3d6bf1765u, 0xacca6da1e0a8ef29u },
1089
+ { 0xbff610b0cc6edd3fu, 0x17fd090a58d32af3u },
1090
+ { 0xeff394dcff8a948eu, 0xddfc4b4cef07f5b0u },
1091
+ { 0x95f83d0a1fb69cd9u, 0x4abdaf101564f98eu },
1092
+ { 0xbb764c4ca7a4440fu, 0x9d6d1ad41abe37f1u },
1093
+ { 0xea53df5fd18d5513u, 0x84c86189216dc5edu },
1094
+ { 0x92746b9be2f8552cu, 0x32fd3cf5b4e49bb4u },
1095
+ { 0xb7118682dbb66a77u, 0x3fbc8c33221dc2a1u },
1096
+ { 0xe4d5e82392a40515u, 0x0fabaf3feaa5334au },
1097
+ { 0x8f05b1163ba6832du, 0x29cb4d87f2a7400eu },
1098
+ { 0xb2c71d5bca9023f8u, 0x743e20e9ef511012u },
1099
+ { 0xdf78e4b2bd342cf6u, 0x914da9246b255416u },
1100
+ { 0x8bab8eefb6409c1au, 0x1ad089b6c2f7548eu },
1101
+ { 0xae9672aba3d0c320u, 0xa184ac2473b529b1u },
1102
+ { 0xda3c0f568cc4f3e8u, 0xc9e5d72d90a2741eu },
1103
+ { 0x8865899617fb1871u, 0x7e2fa67c7a658892u },
1104
+ { 0xaa7eebfb9df9de8du, 0xddbb901b98feeab7u },
1105
+ { 0xd51ea6fa85785631u, 0x552a74227f3ea565u },
1106
+ { 0x8533285c936b35deu, 0xd53a88958f87275fu },
1107
+ { 0xa67ff273b8460356u, 0x8a892abaf368f137u },
1108
+ { 0xd01fef10a657842cu, 0x2d2b7569b0432d85u },
1109
+ { 0x8213f56a67f6b29bu, 0x9c3b29620e29fc73u },
1110
+ { 0xa298f2c501f45f42u, 0x8349f3ba91b47b8fu },
1111
+ { 0xcb3f2f7642717713u, 0x241c70a936219a73u },
1112
+ { 0xfe0efb53d30dd4d7u, 0xed238cd383aa0110u },
1113
+ { 0x9ec95d1463e8a506u, 0xf4363804324a40aau },
1114
+ { 0xc67bb4597ce2ce48u, 0xb143c6053edcd0d5u },
1115
+ { 0xf81aa16fdc1b81dau, 0xdd94b7868e94050au },
1116
+ { 0x9b10a4e5e9913128u, 0xca7cf2b4191c8326u },
1117
+ { 0xc1d4ce1f63f57d72u, 0xfd1c2f611f63a3f0u },
1118
+ { 0xf24a01a73cf2dccfu, 0xbc633b39673c8cecu },
1119
+ { 0x976e41088617ca01u, 0xd5be0503e085d813u },
1120
+ { 0xbd49d14aa79dbc82u, 0x4b2d8644d8a74e18u },
1121
+ { 0xec9c459d51852ba2u, 0xddf8e7d60ed1219eu },
1122
+ { 0x93e1ab8252f33b45u, 0xcabb90e5c942b503u },
1123
+ { 0xb8da1662e7b00a17u, 0x3d6a751f3b936243u },
1124
+ { 0xe7109bfba19c0c9du, 0x0cc512670a783ad4u },
1125
+ { 0x906a617d450187e2u, 0x27fb2b80668b24c5u },
1126
+ { 0xb484f9dc9641e9dau, 0xb1f9f660802dedf6u },
1127
+ { 0xe1a63853bbd26451u, 0x5e7873f8a0396973u },
1128
+ { 0x8d07e33455637eb2u, 0xdb0b487b6423e1e8u },
1129
+ { 0xb049dc016abc5e5fu, 0x91ce1a9a3d2cda62u },
1130
+ { 0xdc5c5301c56b75f7u, 0x7641a140cc7810fbu },
1131
+ { 0x89b9b3e11b6329bau, 0xa9e904c87fcb0a9du },
1132
+ { 0xac2820d9623bf429u, 0x546345fa9fbdcd44u },
1133
+ { 0xd732290fbacaf133u, 0xa97c177947ad4095u },
1134
+ { 0x867f59a9d4bed6c0u, 0x49ed8eabcccc485du },
1135
+ { 0xa81f301449ee8c70u, 0x5c68f256bfff5a74u },
1136
+ { 0xd226fc195c6a2f8cu, 0x73832eec6fff3111u },
1137
+ { 0x83585d8fd9c25db7u, 0xc831fd53c5ff7eabu },
1138
+ { 0xa42e74f3d032f525u, 0xba3e7ca8b77f5e55u },
1139
+ { 0xcd3a1230c43fb26fu, 0x28ce1bd2e55f35ebu },
1140
+ { 0x80444b5e7aa7cf85u, 0x7980d163cf5b81b3u },
1141
+ { 0xa0555e361951c366u, 0xd7e105bcc332621fu },
1142
+ { 0xc86ab5c39fa63440u, 0x8dd9472bf3fefaa7u },
1143
+ { 0xfa856334878fc150u, 0xb14f98f6f0feb951u },
1144
+ { 0x9c935e00d4b9d8d2u, 0x6ed1bf9a569f33d3u },
1145
+ { 0xc3b8358109e84f07u, 0x0a862f80ec4700c8u },
1146
+ { 0xf4a642e14c6262c8u, 0xcd27bb612758c0fau },
1147
+ { 0x98e7e9cccfbd7dbdu, 0x8038d51cb897789cu },
1148
+ { 0xbf21e44003acdd2cu, 0xe0470a63e6bd56c3u },
1149
+ { 0xeeea5d5004981478u, 0x1858ccfce06cac74u },
1150
+ { 0x95527a5202df0ccbu, 0x0f37801e0c43ebc8u },
1151
+ { 0xbaa718e68396cffdu, 0xd30560258f54e6bau },
1152
+ { 0xe950df20247c83fdu, 0x47c6b82ef32a2069u },
1153
+ { 0x91d28b7416cdd27eu, 0x4cdc331d57fa5441u },
1154
+ { 0xb6472e511c81471du, 0xe0133fe4adf8e952u },
1155
+ { 0xe3d8f9e563a198e5u, 0x58180fddd97723a6u },
1156
+ { 0x8e679c2f5e44ff8fu, 0x570f09eaa7ea7648u },
1157
+ { 0xb201833b35d63f73u, 0x2cd2cc6551e513dau },
1158
+ { 0xde81e40a034bcf4fu, 0xf8077f7ea65e58d1u },
1159
+ { 0x8b112e86420f6191u, 0xfb04afaf27faf782u },
1160
+ { 0xadd57a27d29339f6u, 0x79c5db9af1f9b563u },
1161
+ { 0xd94ad8b1c7380874u, 0x18375281ae7822bcu },
1162
+ { 0x87cec76f1c830548u, 0x8f2293910d0b15b5u },
1163
+ { 0xa9c2794ae3a3c69au, 0xb2eb3875504ddb22u },
1164
+ { 0xd433179d9c8cb841u, 0x5fa60692a46151ebu },
1165
+ { 0x849feec281d7f328u, 0xdbc7c41ba6bcd333u },
1166
+ { 0xa5c7ea73224deff3u, 0x12b9b522906c0800u },
1167
+ { 0xcf39e50feae16befu, 0xd768226b34870a00u },
1168
+ { 0x81842f29f2cce375u, 0xe6a1158300d46640u },
1169
+ { 0xa1e53af46f801c53u, 0x60495ae3c1097fd0u },
1170
+ { 0xca5e89b18b602368u, 0x385bb19cb14bdfc4u },
1171
+ { 0xfcf62c1dee382c42u, 0x46729e03dd9ed7b5u },
832
1172
  };
833
1173
 
834
- static const uint64_t NISH_POW5_SPLIT[326][2] = {
835
- { 0u, 1152921504606846976u },
836
- { 0u, 1441151880758558720u },
837
- { 0u, 1801439850948198400u },
838
- { 0u, 2251799813685248000u },
839
- { 0u, 1407374883553280000u },
840
- { 0u, 1759218604441600000u },
841
- { 0u, 2199023255552000000u },
842
- { 0u, 1374389534720000000u },
843
- { 0u, 1717986918400000000u },
844
- { 0u, 2147483648000000000u },
845
- { 0u, 1342177280000000000u },
846
- { 0u, 1677721600000000000u },
847
- { 0u, 2097152000000000000u },
848
- { 0u, 1310720000000000000u },
849
- { 0u, 1638400000000000000u },
850
- { 0u, 2048000000000000000u },
851
- { 0u, 1280000000000000000u },
852
- { 0u, 1600000000000000000u },
853
- { 0u, 2000000000000000000u },
854
- { 0u, 1250000000000000000u },
855
- { 0u, 1562500000000000000u },
856
- { 0u, 1953125000000000000u },
857
- { 0u, 1220703125000000000u },
858
- { 0u, 1525878906250000000u },
859
- { 0u, 1907348632812500000u },
860
- { 0u, 1192092895507812500u },
861
- { 0u, 1490116119384765625u },
862
- { 4611686018427387904u, 1862645149230957031u },
863
- { 9799832789158199296u, 1164153218269348144u },
864
- { 12249790986447749120u, 1455191522836685180u },
865
- { 15312238733059686400u, 1818989403545856475u },
866
- { 14528612397897220096u, 2273736754432320594u },
867
- { 13692068767113150464u, 1421085471520200371u },
868
- { 12503399940464050176u, 1776356839400250464u },
869
- { 15629249925580062720u, 2220446049250313080u },
870
- { 9768281203487539200u, 1387778780781445675u },
871
- { 7598665485932036096u, 1734723475976807094u },
872
- { 274959820560269312u, 2168404344971008868u },
873
- { 9395221924704944128u, 1355252715606880542u },
874
- { 2520655369026404352u, 1694065894508600678u },
875
- { 12374191248137781248u, 2117582368135750847u },
876
- { 14651398557727195136u, 1323488980084844279u },
877
- { 13702562178731606016u, 1654361225106055349u },
878
- { 3293144668132343808u, 2067951531382569187u },
879
- { 18199116482078572544u, 1292469707114105741u },
880
- { 8913837547316051968u, 1615587133892632177u },
881
- { 15753982952572452864u, 2019483917365790221u },
882
- { 12152082354571476992u, 1262177448353618888u },
883
- { 15190102943214346240u, 1577721810442023610u },
884
- { 9764256642163156992u, 1972152263052529513u },
885
- { 17631875447420442880u, 1232595164407830945u },
886
- { 8204786253993389888u, 1540743955509788682u },
887
- { 1032610780636961552u, 1925929944387235853u },
888
- { 2951224747111794922u, 1203706215242022408u },
889
- { 3689030933889743652u, 1504632769052528010u },
890
- { 13834660704216955373u, 1880790961315660012u },
891
- { 17870034976990372916u, 1175494350822287507u },
892
- { 17725857702810578241u, 1469367938527859384u },
893
- { 3710578054803671186u, 1836709923159824231u },
894
- { 26536550077201078u, 2295887403949780289u },
895
- { 11545800389866720434u, 1434929627468612680u },
896
- { 14432250487333400542u, 1793662034335765850u },
897
- { 8816941072311974870u, 2242077542919707313u },
898
- { 17039803216263454053u, 1401298464324817070u },
899
- { 12076381983474541759u, 1751623080406021338u },
900
- { 5872105442488401391u, 2189528850507526673u },
901
- { 15199280947623720629u, 1368455531567204170u },
902
- { 9775729147674874978u, 1710569414459005213u },
903
- { 16831347453020981627u, 2138211768073756516u },
904
- { 1296220121283337709u, 1336382355046097823u },
905
- { 15455333206886335848u, 1670477943807622278u },
906
- { 10095794471753144002u, 2088097429759527848u },
907
- { 6309871544845715001u, 1305060893599704905u },
908
- { 12499025449484531656u, 1631326116999631131u },
909
- { 11012095793428276666u, 2039157646249538914u },
910
- { 11494245889320060820u, 1274473528905961821u },
911
- { 532749306367912313u, 1593091911132452277u },
912
- { 5277622651387278295u, 1991364888915565346u },
913
- { 7910200175544436838u, 1244603055572228341u },
914
- { 14499436237857933952u, 1555753819465285426u },
915
- { 8900923260467641632u, 1944692274331606783u },
916
- { 12480606065433357876u, 1215432671457254239u },
917
- { 10989071563364309441u, 1519290839321567799u },
918
- { 9124653435777998898u, 1899113549151959749u },
919
- { 8008751406574943263u, 1186945968219974843u },
920
- { 5399253239791291175u, 1483682460274968554u },
921
- { 15972438586593889776u, 1854603075343710692u },
922
- { 759402079766405302u, 1159126922089819183u },
923
- { 14784310654990170340u, 1448908652612273978u },
924
- { 9257016281882937117u, 1811135815765342473u },
925
- { 16182956370781059300u, 2263919769706678091u },
926
- { 7808504722524468110u, 1414949856066673807u },
927
- { 5148944884728197234u, 1768687320083342259u },
928
- { 1824495087482858639u, 2210859150104177824u },
929
- { 1140309429676786649u, 1381786968815111140u },
930
- { 1425386787095983311u, 1727233711018888925u },
931
- { 6393419502297367043u, 2159042138773611156u },
932
- { 13219259225790630210u, 1349401336733506972u },
933
- { 16524074032238287762u, 1686751670916883715u },
934
- { 16043406521870471799u, 2108439588646104644u },
935
- { 803757039314269066u, 1317774742903815403u },
936
- { 14839754354425000045u, 1647218428629769253u },
937
- { 4714634887749086344u, 2059023035787211567u },
938
- { 9864175832484260821u, 1286889397367007229u },
939
- { 16941905809032713930u, 1608611746708759036u },
940
- { 2730638187581340797u, 2010764683385948796u },
941
- { 10930020904093113806u, 1256727927116217997u },
942
- { 18274212148543780162u, 1570909908895272496u },
943
- { 4396021111970173586u, 1963637386119090621u },
944
- { 5053356204195052443u, 1227273366324431638u },
945
- { 15540067292098591362u, 1534091707905539547u },
946
- { 14813398096695851299u, 1917614634881924434u },
947
- { 13870059828862294966u, 1198509146801202771u },
948
- { 12725888767650480803u, 1498136433501503464u },
949
- { 15907360959563101004u, 1872670541876879330u },
950
- { 14553786618154326031u, 1170419088673049581u },
951
- { 4357175217410743827u, 1463023860841311977u },
952
- { 10058155040190817688u, 1828779826051639971u },
953
- { 7961007781811134206u, 2285974782564549964u },
954
- { 14199001900486734687u, 1428734239102843727u },
955
- { 13137066357181030455u, 1785917798878554659u },
956
- { 11809646928048900164u, 2232397248598193324u },
957
- { 16604401366885338411u, 1395248280373870827u },
958
- { 16143815690179285109u, 1744060350467338534u },
959
- { 10956397575869330579u, 2180075438084173168u },
960
- { 6847748484918331612u, 1362547148802608230u },
961
- { 17783057643002690323u, 1703183936003260287u },
962
- { 17617136035325974999u, 2128979920004075359u },
963
- { 17928239049719816230u, 1330612450002547099u },
964
- { 17798612793722382384u, 1663265562503183874u },
965
- { 13024893955298202172u, 2079081953128979843u },
966
- { 5834715712847682405u, 1299426220705612402u },
967
- { 16516766677914378815u, 1624282775882015502u },
968
- { 11422586310538197711u, 2030353469852519378u },
969
- { 11750802462513761473u, 1268970918657824611u },
970
- { 10076817059714813937u, 1586213648322280764u },
971
- { 12596021324643517422u, 1982767060402850955u },
972
- { 5566670318688504437u, 1239229412751781847u },
973
- { 2346651879933242642u, 1549036765939727309u },
974
- { 7545000868343941206u, 1936295957424659136u },
975
- { 4715625542714963254u, 1210184973390411960u },
976
- { 5894531928393704067u, 1512731216738014950u },
977
- { 16591536947346905892u, 1890914020922518687u },
978
- { 17287239619732898039u, 1181821263076574179u },
979
- { 16997363506238734644u, 1477276578845717724u },
980
- { 2799960309088866689u, 1846595723557147156u },
981
- { 10973347230035317489u, 1154122327223216972u },
982
- { 13716684037544146861u, 1442652909029021215u },
983
- { 12534169028502795672u, 1803316136286276519u },
984
- { 11056025267201106687u, 2254145170357845649u },
985
- { 18439230838069161439u, 1408840731473653530u },
986
- { 13825666510731675991u, 1761050914342066913u },
987
- { 3447025083132431277u, 2201313642927583642u },
988
- { 6766076695385157452u, 1375821026829739776u },
989
- { 8457595869231446815u, 1719776283537174720u },
990
- { 10571994836539308519u, 2149720354421468400u },
991
- { 6607496772837067824u, 1343575221513417750u },
992
- { 17482743002901110588u, 1679469026891772187u },
993
- { 17241742735199000331u, 2099336283614715234u },
994
- { 15387775227926763111u, 1312085177259197021u },
995
- { 5399660979626290177u, 1640106471573996277u },
996
- { 11361262242960250625u, 2050133089467495346u },
997
- { 11712474920277544544u, 1281333180917184591u },
998
- { 10028907631919542777u, 1601666476146480739u },
999
- { 7924448521472040567u, 2002083095183100924u },
1000
- { 14176152362774801162u, 1251301934489438077u },
1001
- { 3885132398186337741u, 1564127418111797597u },
1002
- { 9468101516160310080u, 1955159272639746996u },
1003
- { 15140935484454969608u, 1221974545399841872u },
1004
- { 479425281859160394u, 1527468181749802341u },
1005
- { 5210967620751338397u, 1909335227187252926u },
1006
- { 17091912818251750210u, 1193334516992033078u },
1007
- { 12141518985959911954u, 1491668146240041348u },
1008
- { 15176898732449889943u, 1864585182800051685u },
1009
- { 11791404716994875166u, 1165365739250032303u },
1010
- { 10127569877816206054u, 1456707174062540379u },
1011
- { 8047776328842869663u, 1820883967578175474u },
1012
- { 836348374198811271u, 2276104959472719343u },
1013
- { 7440246761515338900u, 1422565599670449589u },
1014
- { 13911994470321561530u, 1778206999588061986u },
1015
- { 8166621051047176104u, 2222758749485077483u },
1016
- { 2798295147690791113u, 1389224218428173427u },
1017
- { 17332926989895652603u, 1736530273035216783u },
1018
- { 17054472718942177850u, 2170662841294020979u },
1019
- { 8353202440125167204u, 1356664275808763112u },
1020
- { 10441503050156459005u, 1695830344760953890u },
1021
- { 3828506775840797949u, 2119787930951192363u },
1022
- { 86973725686804766u, 1324867456844495227u },
1023
- { 13943775212390669669u, 1656084321055619033u },
1024
- { 3594660960206173375u, 2070105401319523792u },
1025
- { 2246663100128858359u, 1293815875824702370u },
1026
- { 12031700912015848757u, 1617269844780877962u },
1027
- { 5816254103165035138u, 2021587305976097453u },
1028
- { 5941001823691840913u, 1263492066235060908u },
1029
- { 7426252279614801142u, 1579365082793826135u },
1030
- { 4671129331091113523u, 1974206353492282669u },
1031
- { 5225298841145639904u, 1233878970932676668u },
1032
- { 6531623551432049880u, 1542348713665845835u },
1033
- { 3552843420862674446u, 1927935892082307294u },
1034
- { 16055585193321335241u, 1204959932551442058u },
1035
- { 10846109454796893243u, 1506199915689302573u },
1036
- { 18169322836923504458u, 1882749894611628216u },
1037
- { 11355826773077190286u, 1176718684132267635u },
1038
- { 9583097447919099954u, 1470898355165334544u },
1039
- { 11978871809898874942u, 1838622943956668180u },
1040
- { 14973589762373593678u, 2298278679945835225u },
1041
- { 2440964573842414192u, 1436424174966147016u },
1042
- { 3051205717303017741u, 1795530218707683770u },
1043
- { 13037379183483547984u, 2244412773384604712u },
1044
- { 8148361989677217490u, 1402757983365377945u },
1045
- { 14797138505523909766u, 1753447479206722431u },
1046
- { 13884737113477499304u, 2191809349008403039u },
1047
- { 15595489723564518921u, 1369880843130251899u },
1048
- { 14882676136028260747u, 1712351053912814874u },
1049
- { 9379973133180550126u, 2140438817391018593u },
1050
- { 17391698254306313589u, 1337774260869386620u },
1051
- { 3292878744173340370u, 1672217826086733276u },
1052
- { 4116098430216675462u, 2090272282608416595u },
1053
- { 266718509671728212u, 1306420176630260372u },
1054
- { 333398137089660265u, 1633025220787825465u },
1055
- { 5028433689789463235u, 2041281525984781831u },
1056
- { 10060300083759496378u, 1275800953740488644u },
1057
- { 12575375104699370472u, 1594751192175610805u },
1058
- { 1884160825592049379u, 1993438990219513507u },
1059
- { 17318501580490888525u, 1245899368887195941u },
1060
- { 7813068920331446945u, 1557374211108994927u },
1061
- { 5154650131986920777u, 1946717763886243659u },
1062
- { 915813323278131534u, 1216698602428902287u },
1063
- { 14979824709379828129u, 1520873253036127858u },
1064
- { 9501408849870009354u, 1901091566295159823u },
1065
- { 12855909558809837702u, 1188182228934474889u },
1066
- { 2234828893230133415u, 1485227786168093612u },
1067
- { 2793536116537666769u, 1856534732710117015u },
1068
- { 8663489100477123587u, 1160334207943823134u },
1069
- { 1605989338741628675u, 1450417759929778918u },
1070
- { 11230858710281811652u, 1813022199912223647u },
1071
- { 9426887369424876662u, 2266277749890279559u },
1072
- { 12809333633531629769u, 1416423593681424724u },
1073
- { 16011667041914537212u, 1770529492101780905u },
1074
- { 6179525747111007803u, 2213161865127226132u },
1075
- { 13085575628799155685u, 1383226165704516332u },
1076
- { 16356969535998944606u, 1729032707130645415u },
1077
- { 15834525901571292854u, 2161290883913306769u },
1078
- { 2979049660840976177u, 1350806802445816731u },
1079
- { 17558870131333383934u, 1688508503057270913u },
1080
- { 8113529608884566205u, 2110635628821588642u },
1081
- { 9682642023980241782u, 1319147268013492901u },
1082
- { 16714988548402690132u, 1648934085016866126u },
1083
- { 11670363648648586857u, 2061167606271082658u },
1084
- { 11905663298832754689u, 1288229753919426661u },
1085
- { 1047021068258779650u, 1610287192399283327u },
1086
- { 15143834390605638274u, 2012858990499104158u },
1087
- { 4853210475701136017u, 1258036869061940099u },
1088
- { 1454827076199032118u, 1572546086327425124u },
1089
- { 1818533845248790147u, 1965682607909281405u },
1090
- { 3442426662494187794u, 1228551629943300878u },
1091
- { 13526405364972510550u, 1535689537429126097u },
1092
- { 3072948650933474476u, 1919611921786407622u },
1093
- { 15755650962115585259u, 1199757451116504763u },
1094
- { 15082877684217093670u, 1499696813895630954u },
1095
- { 9630225068416591280u, 1874621017369538693u },
1096
- { 8324733676974063502u, 1171638135855961683u },
1097
- { 5794231077790191473u, 1464547669819952104u },
1098
- { 7242788847237739342u, 1830684587274940130u },
1099
- { 18276858095901949986u, 2288355734093675162u },
1100
- { 16034722328366106645u, 1430222333808546976u },
1101
- { 1596658836748081690u, 1787777917260683721u },
1102
- { 6607509564362490017u, 2234722396575854651u },
1103
- { 1823850468512862308u, 1396701497859909157u },
1104
- { 6891499104068465790u, 1745876872324886446u },
1105
- { 17837745916940358045u, 2182346090406108057u },
1106
- { 4231062170446641922u, 1363966306503817536u },
1107
- { 5288827713058302403u, 1704957883129771920u },
1108
- { 6611034641322878003u, 2131197353912214900u },
1109
- { 13355268687681574560u, 1331998346195134312u },
1110
- { 16694085859601968200u, 1664997932743917890u },
1111
- { 11644235287647684442u, 2081247415929897363u },
1112
- { 4971804045566108824u, 1300779634956185852u },
1113
- { 6214755056957636030u, 1625974543695232315u },
1114
- { 3156757802769657134u, 2032468179619040394u },
1115
- { 6584659645158423613u, 1270292612261900246u },
1116
- { 17454196593302805324u, 1587865765327375307u },
1117
- { 17206059723201118751u, 1984832206659219134u },
1118
- { 6142101308573311315u, 1240520129162011959u },
1119
- { 3065940617289251240u, 1550650161452514949u },
1120
- { 8444111790038951954u, 1938312701815643686u },
1121
- { 665883850346957067u, 1211445438634777304u },
1122
- { 832354812933696334u, 1514306798293471630u },
1123
- { 10263815553021896226u, 1892883497866839537u },
1124
- { 17944099766707154901u, 1183052186166774710u },
1125
- { 13206752671529167818u, 1478815232708468388u },
1126
- { 16508440839411459773u, 1848519040885585485u },
1127
- { 12623618533845856310u, 1155324400553490928u },
1128
- { 15779523167307320387u, 1444155500691863660u },
1129
- { 1277659885424598868u, 1805194375864829576u },
1130
- { 1597074856780748586u, 2256492969831036970u },
1131
- { 5609857803915355770u, 1410308106144398106u },
1132
- { 16235694291748970521u, 1762885132680497632u },
1133
- { 1847873790976661535u, 2203606415850622041u },
1134
- { 12684136165428883219u, 1377254009906638775u },
1135
- { 11243484188358716120u, 1721567512383298469u },
1136
- { 219297180166231438u, 2151959390479123087u },
1137
- { 7054589765244976505u, 1344974619049451929u },
1138
- { 13429923224983608535u, 1681218273811814911u },
1139
- { 12175718012802122765u, 2101522842264768639u },
1140
- { 14527352785642408584u, 1313451776415480399u },
1141
- { 13547504963625622826u, 1641814720519350499u },
1142
- { 12322695186104640628u, 2052268400649188124u },
1143
- { 16925056528170176201u, 1282667750405742577u },
1144
- { 7321262604930556539u, 1603334688007178222u },
1145
- { 18374950293017971482u, 2004168360008972777u },
1146
- { 4566814905495150320u, 1252605225005607986u },
1147
- { 14931890668723713708u, 1565756531257009982u },
1148
- { 9441491299049866327u, 1957195664071262478u },
1149
- { 1289246043478778550u, 1223247290044539049u },
1150
- { 6223243572775861092u, 1529059112555673811u },
1151
- { 3167368447542438461u, 1911323890694592264u },
1152
- { 1979605279714024038u, 1194577431684120165u },
1153
- { 7086192618069917952u, 1493221789605150206u },
1154
- { 18081112809442173248u, 1866527237006437757u },
1155
- { 13606538515115052232u, 1166579523129023598u },
1156
- { 7784801107039039482u, 1458224403911279498u },
1157
- { 507629346944023544u, 1822780504889099373u },
1158
- { 5246222702107417334u, 2278475631111374216u },
1159
- { 3278889188817135834u, 1424047269444608885u },
1160
- { 8710297504448807696u, 1780059086805761106u },
1161
- };
1162
- #define NISH_POW5_BITS 125
1163
-
1164
- static uint32_t nish_pow5bits(int32_t e) { return (uint32_t)(((((uint32_t)e) * 1217359) >> 19) + 1); }
1165
- static uint32_t nish_log10pow2(int32_t e) { return (((uint32_t)e) * 78913) >> 18; }
1166
- static uint32_t nish_log10pow5(int32_t e) { return (((uint32_t)e) * 732923) >> 20; }
1167
-
1168
- /* How many times 5 divides `v`; the trailing-zero tests below are its only users. */
1169
- static uint32_t nish_pow5factor(uint64_t v) {
1170
- uint32_t n = 0;
1171
- for (;;) {
1172
- uint64_t q = v / 5;
1173
- if (v - q * 5 != 0) break;
1174
- v = q; n++;
1175
- }
1176
- return n;
1174
+ /* The high 128 bits of the 192-bit product of `x_hi:x_lo` and `y`, dropping
1175
+ the low word's carry exactly as upstream does: the table rounds down, and
1176
+ the error that leaves is what the `+6` below absorbs. */
1177
+ static void nish_umul192_hi128(uint64_t x_hi, uint64_t x_lo, uint64_t y,
1178
+ uint64_t *hi, uint64_t *lo) {
1179
+ __uint128_t p = (__uint128_t)x_hi * y;
1180
+ uint64_t l = (uint64_t)p + (uint64_t)(((__uint128_t)x_lo * y) >> 64);
1181
+ *hi = (uint64_t)(p >> 64) + (l < (uint64_t)p);
1182
+ *lo = l;
1177
1183
  }
1178
1184
 
1179
- /* (m * mul) >> j, with `mul` a 128-bit constant split into two 64-bit halves. */
1180
- static uint64_t nish_mulshift(uint64_t m, const uint64_t *mul, int32_t j) {
1181
- __uint128_t b0 = (__uint128_t)m * mul[0];
1182
- __uint128_t b2 = (__uint128_t)m * mul[1];
1183
- return (uint64_t)(((b0 >> 64) + b2) >> (j - 64));
1185
+ /* (x * y + c) >> 64: one decimal digit off a 64-bit fraction, biased by `c`. */
1186
+ static uint64_t nish_umul128_add_hi64(uint64_t x, uint64_t y, uint64_t c) {
1187
+ return (uint64_t)(((__uint128_t)x * y + c) >> 64);
1184
1188
  }
1185
1189
 
1186
- /* The shortest digits of a finite, positive `v` into `digits` (no NUL), with
1187
- `*exp10` set so the value is `0.<digits> * 10^*exp10` -- the form the
1188
- ECMAScript layout below wants. Returns the digit count, 1 to 17. */
1189
- static int nish_shortest_digits(double v, char *digits, int *exp10) {
1190
- uint64_t bits;
1191
- memcpy(&bits, &v, 8);
1192
- const uint64_t mantissa = bits & ((1ull << 52) - 1);
1193
- const uint32_t exponent = (uint32_t)((bits >> 52) & 0x7ff);
1194
-
1195
- /* The halfway points either side of `v` are what decide the shortest digits,
1196
- so everything is scaled by 4 to keep them integral. */
1197
- int32_t e2;
1198
- uint64_t m2;
1199
- if (exponent == 0) {
1200
- e2 = 1 - 1023 - 52 - 2;
1201
- m2 = mantissa;
1190
+ /* The shortest digits of a finite, positive double, given as its bits, as an
1191
+ integer `sig` with no trailing zeros and `*exp10` set so the value is
1192
+ `sig * 10^*exp10`. `sig` has 1 to 17 digits. */
1193
+ static uint64_t nish_shortest_digits(uint64_t bits, int *exp10) {
1194
+ uint64_t bin_sig = bits & ((1ull << 52) - 1);
1195
+ int raw_exp = (int)(bits >> 52);
1196
+ /* A power of two has a lower neighbour half as far away as its upper one,
1197
+ so its rounding interval is lopsided ("irregular"). 2^-1022 is the one
1198
+ power that is not: the largest subnormal sits a full ulp below it. V8 and
1199
+ Ryu both treat it as regular, and so does this; upstream does not, which
1200
+ would need one more table row and prints the same digits. */
1201
+ int regular = bin_sig != 0 || raw_exp <= 1;
1202
+ if (raw_exp == 0) raw_exp = 1; /* a subnormal has 2^-1022's spacing */
1203
+ else bin_sig |= 1ull << 52;
1204
+ int bin_exp = raw_exp - 1075;
1205
+
1206
+ /* floor(log10(2^bin_exp)), or of 3/4 of it when irregular, and the shift
1207
+ that puts every exponent's decimal point at the same bit. Scaling by
1208
+ 10^(-dec_exp-1) rather than 10^-dec_exp lands on the shorter candidate
1209
+ directly, so the extra digit comes off the fraction, not out of a div10. */
1210
+ int dec_exp = (bin_exp * 315653 - (regular ? 0 : 131072)) >> 20;
1211
+ int shift = bin_exp + ((-(dec_exp + 1) * 217707) >> 16) + 1 + 6;
1212
+ const uint64_t *pow10 = NISH_POW10_SIG[-dec_exp - 1 - NISH_POW10_MIN];
1213
+ uint64_t hi, lo;
1214
+ nish_umul192_hi128(pow10[0], pow10[1], bin_sig << shift, &hi, &lo);
1215
+ uint64_t integral = hi >> 6;
1216
+ uint64_t fractional = (hi << 58) | (lo >> 6);
1217
+
1218
+ /* Half the distance to each neighbour, in the fraction's units. An even
1219
+ significand's interval is closed, which is the round-half-to-even tie
1220
+ rule for reading the digits back. */
1221
+ uint64_t half_ulp = pow10[0] >> (7 - shift);
1222
+ int round_up, round_down;
1223
+ uint64_t digit;
1224
+ if (regular) {
1225
+ half_ulp += 1 - (bin_sig & 1);
1226
+ round_up = fractional + half_ulp < fractional;
1227
+ round_down = half_ulp > fractional;
1228
+ /* The nearest next digit, ties to even: 0.25 is the one fraction whose
1229
+ tenfold is an exact .5 that rounds the wrong way. */
1230
+ digit = nish_umul128_add_hi64(fractional, 10, (1ull << 63) + 6);
1231
+ if (fractional == 1ull << 62) digit = 2;
1202
1232
  } else {
1203
- e2 = (int32_t)exponent - 1023 - 52 - 2;
1204
- m2 = (1ull << 52) | mantissa;
1233
+ round_up = half_ulp > ~0ull - fractional;
1234
+ round_down = (half_ulp >> 1) > fractional;
1235
+ /* The lower neighbour is closer, so the nearest digit may fall below the
1236
+ interval: take the smallest one inside it instead. */
1237
+ digit = nish_umul128_add_hi64(fractional, 10, (1ull << 63) - 1);
1238
+ uint64_t least = nish_umul128_add_hi64(fractional - (half_ulp >> 1), 10, ~0ull);
1239
+ if (digit < least) digit = least;
1205
1240
  }
1206
- const int acceptBounds = (m2 & 1) == 0;
1207
- const uint64_t mv = 4 * m2;
1208
- const uint32_t mmShift = (mantissa != 0 || exponent <= 1);
1209
-
1210
- uint64_t vr, vp, vm;
1211
- int32_t e10;
1212
- int vmIsTrailingZeros = 0, vrIsTrailingZeros = 0;
1213
- if (e2 >= 0) {
1214
- const uint32_t q = nish_log10pow2(e2) - (e2 > 3);
1215
- const int32_t k = NISH_POW5_BITS + (int32_t)nish_pow5bits((int32_t)q) - 1;
1216
- const int32_t j = -e2 + (int32_t)q + k;
1217
- e10 = (int32_t)q;
1218
- vr = nish_mulshift(mv, NISH_POW5_INV_SPLIT[q], j);
1219
- vp = nish_mulshift(mv + 2, NISH_POW5_INV_SPLIT[q], j);
1220
- vm = nish_mulshift(mv - 1 - mmShift, NISH_POW5_INV_SPLIT[q], j);
1221
- if (q <= 21) {
1222
- if (mv % 5 == 0) {
1223
- vrIsTrailingZeros = nish_pow5factor(mv) >= q;
1224
- } else if (acceptBounds) {
1225
- vmIsTrailingZeros = nish_pow5factor(mv - 1 - mmShift) >= q;
1226
- } else {
1227
- vp -= nish_pow5factor(mv + 2) >= q;
1228
- }
1229
- }
1230
- } else {
1231
- const uint32_t q = nish_log10pow5(-e2) - (-e2 > 1);
1232
- const int32_t i = -e2 - (int32_t)q;
1233
- const int32_t k = (int32_t)nish_pow5bits(i) - NISH_POW5_BITS;
1234
- const int32_t j = (int32_t)q - k;
1235
- e10 = (int32_t)q + e2;
1236
- vr = nish_mulshift(mv, NISH_POW5_SPLIT[i], j);
1237
- vp = nish_mulshift(mv + 2, NISH_POW5_SPLIT[i], j);
1238
- vm = nish_mulshift(mv - 1 - mmShift, NISH_POW5_SPLIT[i], j);
1239
- if (q <= 1) {
1240
- vrIsTrailingZeros = 1;
1241
- if (acceptBounds) vmIsTrailingZeros = (mmShift == 1);
1242
- else --vp;
1243
- } else if (q < 63) {
1244
- vrIsTrailingZeros = (mv & ((1ull << q) - 1)) == 0;
1245
- }
1241
+
1242
+ /* When either end of the interval reaches past the shorter candidate, that
1243
+ candidate (rounded toward the end that holds it) is the answer; otherwise
1244
+ it takes one more digit. */
1245
+ uint64_t sig = (integral + round_up) * 10 + (round_up | round_down ? 0 : digit);
1246
+ int e = dec_exp;
1247
+ /* At most 16 trailing zeros: `sig` is below 2^53 * 10 + 10 < 10^17. */
1248
+ if (sig % 10 == 0) {
1249
+ sig /= 10; e += 1;
1250
+ if (sig % 100000000 == 0) { sig /= 100000000; e += 8; }
1251
+ if (sig % 10000 == 0) { sig /= 10000; e += 4; }
1252
+ if (sig % 100 == 0) { sig /= 100; e += 2; }
1253
+ if (sig % 10 == 0) { sig /= 10; e += 1; }
1246
1254
  }
1255
+ *exp10 = e;
1256
+ return sig;
1257
+ }
1247
1258
 
1248
- int32_t removed = 0;
1249
- uint8_t lastDigit = 0;
1250
- uint64_t output;
1251
- if (vmIsTrailingZeros || vrIsTrailingZeros) {
1252
- /* The rare path (~0.7%): a boundary is exact, so trailing zeros decide it. */
1253
- for (;;) {
1254
- const uint64_t vpDiv10 = vp / 10, vmDiv10 = vm / 10;
1255
- if (vpDiv10 <= vmDiv10) break;
1256
- const uint64_t vrDiv10 = vr / 10;
1257
- vmIsTrailingZeros &= (uint32_t)(vm - 10 * vmDiv10) == 0;
1258
- vrIsTrailingZeros &= lastDigit == 0;
1259
- lastDigit = (uint8_t)(vr - 10 * vrDiv10);
1260
- vr = vrDiv10; vp = vpDiv10; vm = vmDiv10;
1261
- ++removed;
1262
- }
1263
- if (vmIsTrailingZeros) {
1264
- for (;;) {
1265
- const uint64_t vmDiv10 = vm / 10;
1266
- if ((uint32_t)(vm - 10 * vmDiv10) != 0) break;
1267
- const uint64_t vpDiv10 = vp / 10, vrDiv10 = vr / 10;
1268
- vrIsTrailingZeros &= lastDigit == 0;
1269
- lastDigit = (uint8_t)(vr - 10 * vrDiv10);
1270
- vr = vrDiv10; vp = vpDiv10; vm = vmDiv10;
1271
- ++removed;
1272
- }
1273
- }
1274
- /* Round half to even, which is the tie rule ECMAScript states for `s`. */
1275
- if (vrIsTrailingZeros && lastDigit == 5 && vr % 2 == 0) lastDigit = 4;
1276
- output = vr + ((vr == vm && (!acceptBounds || !vmIsTrailingZeros)) || lastDigit >= 5);
1277
- } else {
1278
- /* The common path (~99.3%): two digits at a time first, then one. */
1279
- int roundUp = 0;
1280
- const uint64_t vpDiv100 = vp / 100, vmDiv100 = vm / 100;
1281
- if (vpDiv100 > vmDiv100) {
1282
- const uint64_t vrDiv100 = vr / 100;
1283
- roundUp = (uint32_t)(vr - 100 * vrDiv100) >= 50;
1284
- vr = vrDiv100; vp = vpDiv100; vm = vmDiv100;
1285
- removed += 2;
1286
- }
1287
- for (;;) {
1288
- const uint64_t vpDiv10 = vp / 10, vmDiv10 = vm / 10;
1289
- if (vpDiv10 <= vmDiv10) break;
1290
- const uint64_t vrDiv10 = vr / 10;
1291
- roundUp = (uint32_t)(vr - 10 * vrDiv10) >= 5;
1292
- vr = vrDiv10; vp = vpDiv10; vm = vmDiv10;
1293
- ++removed;
1294
- }
1295
- output = vr + (vr == vm || roundUp);
1259
+ /* "00" to "99", so the digits go out two to a lookup and two to a store. */
1260
+ static const char NISH_DIGITS2[200] =
1261
+ "0001020304050607080910111213141516171819"
1262
+ "2021222324252627282930313233343536373839"
1263
+ "4041424344454647484950515253545556575859"
1264
+ "6061626364656667686970717273747576777879"
1265
+ "8081828384858687888990919293949596979899";
1266
+
1267
+ static const uint64_t NISH_POW10_U64[18] = {
1268
+ 1ull, 10ull, 100ull, 1000ull, 10000ull, 100000ull, 1000000ull, 10000000ull,
1269
+ 100000000ull, 1000000000ull, 10000000000ull, 100000000000ull,
1270
+ 1000000000000ull, 10000000000000ull, 100000000000000ull,
1271
+ 1000000000000000ull, 10000000000000000ull, 100000000000000000ull,
1272
+ };
1273
+
1274
+ /* The decimal digits of `v` into the bytes just before `end`, as many as it
1275
+ has, written backward a pair at a time. The caller knows the count. */
1276
+ static void nish_put_digits(char *end, uint64_t v) {
1277
+ while (v >= 100) {
1278
+ uint64_t q = v / 100;
1279
+ end -= 2;
1280
+ memcpy(end, NISH_DIGITS2 + 2 * (v - q * 100), 2);
1281
+ v = q;
1296
1282
  }
1283
+ if (v >= 10) memcpy(end - 2, NISH_DIGITS2 + 2 * v, 2);
1284
+ else end[-1] = (char)('0' + v);
1285
+ }
1297
1286
 
1298
- char tmp[20];
1299
- int k = 0;
1300
- do { tmp[k++] = (char)('0' + (int)(output % 10)); output /= 10; } while (output);
1301
- for (int i = 0; i < k; i++) digits[i] = tmp[k - 1 - i];
1302
- *exp10 = e10 + removed + k;
1303
- return k;
1287
+ /* runtime/nish.h and tests/runtime-test.c state the same size; tests/run.js
1288
+ (`f64_format_oracle`) fails if the three disagree. */
1289
+ #define NISH_F64_MAX 32
1290
+
1291
+ /* JS Number#toString: shortest round-trip digits, e-form outside (-6, 21].
1292
+ Writes no NUL and returns the length. The longest output is 25 bytes,
1293
+ -0.0000012345678901234567: a sign, "0.", five zeros and seventeen digits.
1294
+ Every other layout is shorter: 22 for a 21-digit integer and its sign, 24
1295
+ for -1.2345678901234567e-308, 9 for -Infinity. No layout writes scratch
1296
+ past its own final length. */
1297
+ int nish_f64_format(double v, char out[NISH_F64_MAX]) {
1298
+ uint64_t bits;
1299
+ char *o = out;
1300
+ memcpy(&bits, &v, 8);
1301
+ if ((bits << 1) >> 53 == 0x7ff) {
1302
+ if (bits << 12) { memcpy(o, "NaN", 3); return 3; }
1303
+ if (bits >> 63) *o++ = '-';
1304
+ memcpy(o, "Infinity", 8);
1305
+ return (int)(o - out) + 8;
1306
+ }
1307
+ if ((bits << 1) == 0) { *o = '0'; return 1; } /* -0 prints as 0 */
1308
+ if (bits >> 63) *o++ = '-';
1309
+
1310
+ int e;
1311
+ uint64_t sig = nish_shortest_digits(bits & ~(1ull << 63), &e);
1312
+ /* The digit count: 1233 / 4096 is log10(2) from below, which can only be
1313
+ one short, and the table settles it. */
1314
+ int k = ((64 - __builtin_clzll(sig)) * 1233) >> 12;
1315
+ k += sig >= NISH_POW10_U64[k];
1316
+ int n = k + e; /* value = 0.<digits> * 10^n */
1317
+
1318
+ if (n > 21 || n <= -6) {
1319
+ /* d.ddde+x: the digits one byte right, then the first moved left past
1320
+ where the point goes. */
1321
+ nish_put_digits(o + 1 + k, sig);
1322
+ o[0] = o[1];
1323
+ if (k > 1) { o[1] = '.'; o += k + 1; }
1324
+ else o += 1;
1325
+ int x = n - 1;
1326
+ *o++ = 'e';
1327
+ *o++ = x < 0 ? '-' : '+';
1328
+ if (x < 0) x = -x;
1329
+ if (x >= 100) { *o++ = (char)('0' + x / 100); x %= 100; memcpy(o, NISH_DIGITS2 + 2 * x, 2); o += 2; }
1330
+ else if (x >= 10) { memcpy(o, NISH_DIGITS2 + 2 * x, 2); o += 2; }
1331
+ else *o++ = (char)('0' + x);
1332
+ } else if (n <= 0) {
1333
+ o[0] = '0'; o[1] = '.';
1334
+ memset(o + 2, '0', (size_t)-n);
1335
+ o += 2 - n;
1336
+ nish_put_digits(o + k, sig);
1337
+ o += k;
1338
+ } else if (n >= k) {
1339
+ nish_put_digits(o + k, sig);
1340
+ memset(o + k, '0', (size_t)(n - k));
1341
+ o += n;
1342
+ } else {
1343
+ /* The integer part shifts left one byte to open the point's slot. */
1344
+ nish_put_digits(o + 1 + k, sig);
1345
+ memmove(o, o + 1, (size_t)n);
1346
+ o[n] = '.';
1347
+ o += k + 1;
1348
+ }
1349
+ return (int)(o - out);
1304
1350
  }
1305
1351
 
1306
- /* JS Number#toString: shortest round-trip digits, e-form outside (-6, 21] */
1307
1352
  nish_str *nish_str_from_f64(double v) {
1308
- char digits[24], out[32], *o = out;
1309
- int k, n, i, e = 0;
1310
- if (v != v) { memcpy(o, "NaN", 3); o += 3; }
1311
- else if (v == 0) *o++ = '0'; /* -0 prints as 0 */
1312
- else {
1313
- if (v < 0) { *o++ = '-'; v = -v; }
1314
- if (v == INFINITY) { memcpy(o, "Infinity", 8); o += 8; }
1315
- else {
1316
- k = nish_shortest_digits(v, digits, &n); /* value = 0.digits * 10^n */
1317
- if (n > 21 || n <= -6) { e = n - 1; n = 1; }
1318
- else if (n <= 0) { *o++ = '0'; *o++ = '.'; for (; n < 0; n++) *o++ = '0'; n = k; }
1319
- for (i = 0; i < k || i < n; i++) { if (i == n) *o++ = '.'; *o++ = i < k ? digits[i] : '0'; }
1320
- if (e) o += snprintf(o, 8, "e%+d", e);
1321
- }
1322
- }
1323
- return nish_str_new(out, o - out);
1353
+ char out[NISH_F64_MAX];
1354
+ return nish_str_new(out, (uint64_t)nish_f64_format(v, out));
1355
+ }
1356
+
1357
+ /* `JsonWriter.f64`'s digits straight into the writer's buffer (std/json.ts,
1358
+ `jsonPutF64Walk`; the emitter makes the call, src/kernels.ts): `v`'s
1359
+ spelling at `buf[at]`, all of it or none. Answers the new end, or -1 when
1360
+ `at` is negative or the bytes do not fit before `len`, and then writes
1361
+ nothing, as `jsonWriterPutText` does. `len` is the array's length as the
1362
+ Nish code's `toI32` reads it, which is never more than the array holds; the
1363
+ comparison is in 64 bits, so no `len` or `at` wraps it. */
1364
+ int32_t nish_json_put_f64(uint8_t *buf, int32_t len, int32_t at, double v) {
1365
+ char out[NISH_F64_MAX];
1366
+ int n = nish_f64_format(v, out);
1367
+ if (at < 0 || (int64_t)at > (int64_t)len - n) return -1;
1368
+ memcpy(buf + at, out, (size_t)n);
1369
+ return at + n;
1324
1370
  }
1325
1371
 
1326
1372
  /* ---- Math.random: xorshift64*, seeded lazily from time and pid. The shifts