@amritk/nish-x86_64-linux 0.27.2 → 0.29.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.
Files changed (54) hide show
  1. package/INSTALL.md +16 -8
  2. package/bin/nish +0 -0
  3. package/docs/AI.md +118 -26
  4. package/package.json +1 -1
  5. package/runtime/core/host.d.ts +2 -1
  6. package/runtime/core/host.mjs +4 -0
  7. package/runtime/core.d.ts +47 -0
  8. package/runtime/core.mjs +67 -0
  9. package/runtime/nish.d.ts +176 -0
  10. package/runtime/nish.h +120 -6
  11. package/runtime/nish.mjs +24 -4
  12. package/runtime/runtime-checksum.c +270 -0
  13. package/runtime/runtime-net.c +386 -5
  14. package/runtime/runtime-os.c +59 -8
  15. package/runtime/runtime-parallel.c +81 -5
  16. package/runtime/runtime-sandbox.c +479 -0
  17. package/runtime/runtime-sha256.c +239 -0
  18. package/runtime/runtime-shm.c +541 -0
  19. package/runtime/runtime.c +827 -791
  20. package/scripts/build.sh +79 -28
  21. package/std/README.md +25 -13
  22. package/std/collections.ts +5 -5
  23. package/std/compress/checksum.ts +88 -75
  24. package/std/compress/deflate.ts +224 -0
  25. package/std/compress/gzip.ts +52 -0
  26. package/std/crypto/bcrypt.ts +816 -280
  27. package/std/crypto/hmac.ts +305 -2
  28. package/std/crypto/jwt.ts +1661 -0
  29. package/std/json-equal.ts +335 -0
  30. package/std/json-format.ts +1070 -0
  31. package/std/json-number.ts +428 -0
  32. package/std/json-pointer.ts +245 -0
  33. package/std/json-typed.ts +34 -0
  34. package/std/json-value.ts +510 -17
  35. package/std/json.ts +35 -6
  36. package/std/net/handler.ts +1348 -0
  37. package/std/net/http-client.ts +97 -16
  38. package/std/net/http-compress.ts +301 -16
  39. package/std/net/http1-client.ts +104 -19
  40. package/std/net/http1-server.ts +127 -24
  41. package/std/net/http1.ts +24 -4
  42. package/std/net/outbound.ts +409 -0
  43. package/std/net/postgres.ts +405 -0
  44. package/std/net/prefork.ts +344 -20
  45. package/std/net/websocket.ts +295 -14
  46. package/std/regex.ts +613 -52
  47. package/std/secret.ts +1 -1
  48. package/std/sync/ring.ts +587 -0
  49. package/std/sync/shm.ts +284 -0
  50. package/std/term-io.ts +35 -8
  51. package/std/term-rate.ts +13 -1
  52. package/std/threads.ts +35 -3
  53. package/std/yaml-json.ts +841 -0
  54. /package/runtime/{LICENSE-ryu → LICENSE-zmij} +0 -0
package/runtime/runtime.c CHANGED
@@ -512,815 +512,851 @@ nish_str *nish_str_from_i32(int32_t v) { return nish_str_from_i64(v); }
512
512
  nish_str *nish_str_from_u64(uint64_t v) { return str_from_digits(v, 0); }
513
513
 
514
514
 
515
- /* ---- Shortest round-trip digits (Ryu)
516
-
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.
515
+ /* ---- Shortest round-trip digits (Zmij)
516
+
517
+ Adapted from Zmij (https://github.com/vitaut/zmij), zmij.c. Copyright (c)
518
+ 2025 - present, Victor Zverovich. Used under the Boost Software License,
519
+ Version 1.0 (upstream offers MIT or BSL-1.0); see runtime/LICENSE-zmij. The
520
+ code from here to the end of `nish_shortest_digits` follows upstream's
521
+ `umul192_hi128`, `umul128_add_hi64`, `compute_dec_exp`, `compute_exp_shift`
522
+ and the scalar `to_decimal_double`, which is why it keeps their constants;
523
+ the table is regenerated by scripts/gen-pow10-table.py rather than copied.
524
+ Only the digit computation is taken: no SIMD, and none of upstream's own
525
+ formatting, since the layout below is ECMAScript's rather than printf's.
523
526
 
524
527
  `String(x)` in JavaScript prints the *fewest* digits that read back as the
525
528
  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 },
529
+ snprintf for k digits and strtod whether they round-trip is both slow and,
530
+ less obviously, *wrong*: printf can only hand back the correctly-rounded
531
+ k-digit string, and for some values the shortest string that round-trips at
532
+ that length is a different one (7.120236347223045e-307 is the pinned case).
533
+
534
+ Zmij (a Schubfach descendant) gets there with one 64x128-bit multiply: it
535
+ scales the value by a power of ten chosen so the integer part is the shorter
536
+ of the two candidate lengths, decides from the fractional part whether that
537
+ candidate already lies inside the rounding interval, and otherwise reads one
538
+ more digit off the fraction. Ryu, which this replaced, needed three
539
+ multiplies and a loop of divisions. Read upstream before touching the
540
+ arithmetic: `315653 >> 20`, `217707 >> 16` and the `+6` bias are exact over
541
+ the exponents a double can have and verified there, not in general. */
542
+ /* Generated by scripts/gen-pow10-table.py; do not hand-edit. 10^-293 to 10^323. */
543
+ #define NISH_POW10_MIN (-293)
544
+ static const uint64_t NISH_POW10_SIG[617][2] = {
545
+ { 0xcc5fc196fefd7d0cu, 0x1e53ed49a96272c8u },
546
+ { 0xff77b1fcbebcdc4fu, 0x25e8e89c13bb0f7au },
547
+ { 0x9faacf3df73609b1u, 0x77b191618c54e9acu },
548
+ { 0xc795830d75038c1du, 0xd59df5b9ef6a2417u },
549
+ { 0xf97ae3d0d2446f25u, 0x4b0573286b44ad1du },
550
+ { 0x9becce62836ac577u, 0x4ee367f9430aec32u },
551
+ { 0xc2e801fb244576d5u, 0x229c41f793cda73fu },
552
+ { 0xf3a20279ed56d48au, 0x6b43527578c1110fu },
553
+ { 0x9845418c345644d6u, 0x830a13896b78aaa9u },
554
+ { 0xbe5691ef416bd60cu, 0x23cc986bc656d553u },
555
+ { 0xedec366b11c6cb8fu, 0x2cbfbe86b7ec8aa8u },
556
+ { 0x94b3a202eb1c3f39u, 0x7bf7d71432f3d6a9u },
557
+ { 0xb9e08a83a5e34f07u, 0xdaf5ccd93fb0cc53u },
558
+ { 0xe858ad248f5c22c9u, 0xd1b3400f8f9cff68u },
559
+ { 0x91376c36d99995beu, 0x23100809b9c21fa1u },
560
+ { 0xb58547448ffffb2du, 0xabd40a0c2832a78au },
561
+ { 0xe2e69915b3fff9f9u, 0x16c90c8f323f516cu },
562
+ { 0x8dd01fad907ffc3bu, 0xae3da7d97f6792e3u },
563
+ { 0xb1442798f49ffb4au, 0x99cd11cfdf41779cu },
564
+ { 0xdd95317f31c7fa1du, 0x40405643d711d583u },
565
+ { 0x8a7d3eef7f1cfc52u, 0x482835ea666b2572u },
566
+ { 0xad1c8eab5ee43b66u, 0xda3243650005eecfu },
567
+ { 0xd863b256369d4a40u, 0x90bed43e40076a82u },
568
+ { 0x873e4f75e2224e68u, 0x5a7744a6e804a291u },
569
+ { 0xa90de3535aaae202u, 0x711515d0a205cb36u },
570
+ { 0xd3515c2831559a83u, 0x0d5a5b44ca873e03u },
571
+ { 0x8412d9991ed58091u, 0xe858790afe9486c2u },
572
+ { 0xa5178fff668ae0b6u, 0x626e974dbe39a872u },
573
+ { 0xce5d73ff402d98e3u, 0xfb0a3d212dc8128fu },
574
+ { 0x80fa687f881c7f8eu, 0x7ce66634bc9d0b99u },
575
+ { 0xa139029f6a239f72u, 0x1c1fffc1ebc44e80u },
576
+ { 0xc987434744ac874eu, 0xa327ffb266b56220u },
577
+ { 0xfbe9141915d7a922u, 0x4bf1ff9f0062baa8u },
578
+ { 0x9d71ac8fada6c9b5u, 0x6f773fc3603db4a9u },
579
+ { 0xc4ce17b399107c22u, 0xcb550fb4384d21d3u },
580
+ { 0xf6019da07f549b2bu, 0x7e2a53a146606a48u },
581
+ { 0x99c102844f94e0fbu, 0x2eda7444cbfc426du },
582
+ { 0xc0314325637a1939u, 0xfa911155fefb5308u },
583
+ { 0xf03d93eebc589f88u, 0x793555ab7eba27cau },
584
+ { 0x96267c7535b763b5u, 0x4bc1558b2f3458deu },
585
+ { 0xbbb01b9283253ca2u, 0x9eb1aaedfb016f16u },
586
+ { 0xea9c227723ee8bcbu, 0x465e15a979c1cadcu },
587
+ { 0x92a1958a7675175fu, 0x0bfacd89ec191ec9u },
588
+ { 0xb749faed14125d36u, 0xcef980ec671f667bu },
589
+ { 0xe51c79a85916f484u, 0x82b7e12780e7401au },
590
+ { 0x8f31cc0937ae58d2u, 0xd1b2ecb8b0908810u },
591
+ { 0xb2fe3f0b8599ef07u, 0x861fa7e6dcb4aa15u },
592
+ { 0xdfbdcece67006ac9u, 0x67a791e093e1d49au },
593
+ { 0x8bd6a141006042bdu, 0xe0c8bb2c5c6d24e0u },
594
+ { 0xaecc49914078536du, 0x58fae9f773886e18u },
595
+ { 0xda7f5bf590966848u, 0xaf39a475506a899eu },
596
+ { 0x888f99797a5e012du, 0x6d8406c952429603u },
597
+ { 0xaab37fd7d8f58178u, 0xc8e5087ba6d33b83u },
598
+ { 0xd5605fcdcf32e1d6u, 0xfb1e4a9a90880a64u },
599
+ { 0x855c3be0a17fcd26u, 0x5cf2eea09a55067fu },
600
+ { 0xa6b34ad8c9dfc06fu, 0xf42faa48c0ea481eu },
601
+ { 0xd0601d8efc57b08bu, 0xf13b94daf124da26u },
602
+ { 0x823c12795db6ce57u, 0x76c53d08d6b70858u },
603
+ { 0xa2cb1717b52481edu, 0x54768c4b0c64ca6eu },
604
+ { 0xcb7ddcdda26da268u, 0xa9942f5dcf7dfd09u },
605
+ { 0xfe5d54150b090b02u, 0xd3f93b35435d7c4cu },
606
+ { 0x9efa548d26e5a6e1u, 0xc47bc5014a1a6dafu },
607
+ { 0xc6b8e9b0709f109au, 0x359ab6419ca1091bu },
608
+ { 0xf867241c8cc6d4c0u, 0xc30163d203c94b62u },
609
+ { 0x9b407691d7fc44f8u, 0x79e0de63425dcf1du },
610
+ { 0xc21094364dfb5636u, 0x985915fc12f542e4u },
611
+ { 0xf294b943e17a2bc4u, 0x3e6f5b7b17b2939du },
612
+ { 0x979cf3ca6cec5b5au, 0xa705992ceecf9c42u },
613
+ { 0xbd8430bd08277231u, 0x50c6ff782a838353u },
614
+ { 0xece53cec4a314ebdu, 0xa4f8bf5635246428u },
615
+ { 0x940f4613ae5ed136u, 0x871b7795e136be99u },
616
+ { 0xb913179899f68584u, 0x28e2557b59846e3fu },
617
+ { 0xe757dd7ec07426e5u, 0x331aeada2fe589cfu },
618
+ { 0x9096ea6f3848984fu, 0x3ff0d2c85def7621u },
619
+ { 0xb4bca50b065abe63u, 0x0fed077a756b53a9u },
620
+ { 0xe1ebce4dc7f16dfbu, 0xd3e8495912c62894u },
621
+ { 0x8d3360f09cf6e4bdu, 0x64712dd7abbbd95cu },
622
+ { 0xb080392cc4349decu, 0xbd8d794d96aacfb3u },
623
+ { 0xdca04777f541c567u, 0xecf0d7a0fc5583a0u },
624
+ { 0x89e42caaf9491b60u, 0xf41686c49db57244u },
625
+ { 0xac5d37d5b79b6239u, 0x311c2875c522ced5u },
626
+ { 0xd77485cb25823ac7u, 0x7d633293366b828bu },
627
+ { 0x86a8d39ef77164bcu, 0xae5dff9c02033197u },
628
+ { 0xa8530886b54dbdebu, 0xd9f57f830283fdfcu },
629
+ { 0xd267caa862a12d66u, 0xd072df63c324fd7bu },
630
+ { 0x8380dea93da4bc60u, 0x4247cb9e59f71e6du },
631
+ { 0xa46116538d0deb78u, 0x52d9be85f074e608u },
632
+ { 0xcd795be870516656u, 0x67902e276c921f8bu },
633
+ { 0x806bd9714632dff6u, 0x00ba1cd8a3db53b6u },
634
+ { 0xa086cfcd97bf97f3u, 0x80e8a40eccd228a4u },
635
+ { 0xc8a883c0fdaf7df0u, 0x6122cd128006b2cdu },
636
+ { 0xfad2a4b13d1b5d6cu, 0x796b805720085f81u },
637
+ { 0x9cc3a6eec6311a63u, 0xcbe3303674053bb0u },
638
+ { 0xc3f490aa77bd60fcu, 0xbedbfc4411068a9cu },
639
+ { 0xf4f1b4d515acb93bu, 0xee92fb5515482d44u },
640
+ { 0x991711052d8bf3c5u, 0x751bdd152d4d1c4au },
641
+ { 0xbf5cd54678eef0b6u, 0xd262d45a78a0635du },
642
+ { 0xef340a98172aace4u, 0x86fb897116c87c34u },
643
+ { 0x9580869f0e7aac0eu, 0xd45d35e6ae3d4da0u },
644
+ { 0xbae0a846d2195712u, 0x8974836059cca109u },
645
+ { 0xe998d258869facd7u, 0x2bd1a438703fc94bu },
646
+ { 0x91ff83775423cc06u, 0x7b6306a34627ddcfu },
647
+ { 0xb67f6455292cbf08u, 0x1a3bc84c17b1d542u },
648
+ { 0xe41f3d6a7377eecau, 0x20caba5f1d9e4a93u },
649
+ { 0x8e938662882af53eu, 0x547eb47b7282ee9cu },
650
+ { 0xb23867fb2a35b28du, 0xe99e619a4f23aa43u },
651
+ { 0xdec681f9f4c31f31u, 0x6405fa00e2ec94d4u },
652
+ { 0x8b3c113c38f9f37eu, 0xde83bc408dd3dd04u },
653
+ { 0xae0b158b4738705eu, 0x9624ab50b148d445u },
654
+ { 0xd98ddaee19068c76u, 0x3badd624dd9b0957u },
655
+ { 0x87f8a8d4cfa417c9u, 0xe54ca5d70a80e5d6u },
656
+ { 0xa9f6d30a038d1dbcu, 0x5e9fcf4ccd211f4cu },
657
+ { 0xd47487cc8470652bu, 0x7647c3200069671fu },
658
+ { 0x84c8d4dfd2c63f3bu, 0x29ecd9f40041e073u },
659
+ { 0xa5fb0a17c777cf09u, 0xf468107100525890u },
660
+ { 0xcf79cc9db955c2ccu, 0x7182148d4066eeb4u },
661
+ { 0x81ac1fe293d599bfu, 0xc6f14cd848405530u },
662
+ { 0xa21727db38cb002fu, 0xb8ada00e5a506a7cu },
663
+ { 0xca9cf1d206fdc03bu, 0xa6d90811f0e4851cu },
664
+ { 0xfd442e4688bd304au, 0x908f4a166d1da663u },
665
+ { 0x9e4a9cec15763e2eu, 0x9a598e4e043287feu },
666
+ { 0xc5dd44271ad3cdbau, 0x40eff1e1853f29fdu },
667
+ { 0xf7549530e188c128u, 0xd12bee59e68ef47cu },
668
+ { 0x9a94dd3e8cf578b9u, 0x82bb74f8301958ceu },
669
+ { 0xc13a148e3032d6e7u, 0xe36a52363c1faf01u },
670
+ { 0xf18899b1bc3f8ca1u, 0xdc44e6c3cb279ac1u },
671
+ { 0x96f5600f15a7b7e5u, 0x29ab103a5ef8c0b9u },
672
+ { 0xbcb2b812db11a5deu, 0x7415d448f6b6f0e7u },
673
+ { 0xebdf661791d60f56u, 0x111b495b3464ad21u },
674
+ { 0x936b9fcebb25c995u, 0xcab10dd900beec34u },
675
+ { 0xb84687c269ef3bfbu, 0x3d5d514f40eea742u },
676
+ { 0xe65829b3046b0afau, 0x0cb4a5a3112a5112u },
677
+ { 0x8ff71a0fe2c2e6dcu, 0x47f0e785eaba72abu },
678
+ { 0xb3f4e093db73a093u, 0x59ed216765690f56u },
679
+ { 0xe0f218b8d25088b8u, 0x306869c13ec3532cu },
680
+ { 0x8c974f7383725573u, 0x1e414218c73a13fbu },
681
+ { 0xafbd2350644eeacfu, 0xe5d1929ef90898fau },
682
+ { 0xdbac6c247d62a583u, 0xdf45f746b74abf39u },
683
+ { 0x894bc396ce5da772u, 0x6b8bba8c328eb783u },
684
+ { 0xab9eb47c81f5114fu, 0x066ea92f3f326564u },
685
+ { 0xd686619ba27255a2u, 0xc80a537b0efefebdu },
686
+ { 0x8613fd0145877585u, 0xbd06742ce95f5f36u },
687
+ { 0xa798fc4196e952e7u, 0x2c48113823b73704u },
688
+ { 0xd17f3b51fca3a7a0u, 0xf75a15862ca504c5u },
689
+ { 0x82ef85133de648c4u, 0x9a984d73dbe722fbu },
690
+ { 0xa3ab66580d5fdaf5u, 0xc13e60d0d2e0ebbau },
691
+ { 0xcc963fee10b7d1b3u, 0x318df905079926a8u },
692
+ { 0xffbbcfe994e5c61fu, 0xfdf17746497f7052u },
693
+ { 0x9fd561f1fd0f9bd3u, 0xfeb6ea8bedefa633u },
694
+ { 0xc7caba6e7c5382c8u, 0xfe64a52ee96b8fc0u },
695
+ { 0xf9bd690a1b68637bu, 0x3dfdce7aa3c673b0u },
696
+ { 0x9c1661a651213e2du, 0x06bea10ca65c084eu },
697
+ { 0xc31bfa0fe5698db8u, 0x486e494fcff30a62u },
698
+ { 0xf3e2f893dec3f126u, 0x5a89dba3c3efccfau },
699
+ { 0x986ddb5c6b3a76b7u, 0xf89629465a75e01cu },
700
+ { 0xbe89523386091465u, 0xf6bbb397f1135823u },
701
+ { 0xee2ba6c0678b597fu, 0x746aa07ded582e2cu },
702
+ { 0x94db483840b717efu, 0xa8c2a44eb4571cdcu },
703
+ { 0xba121a4650e4ddebu, 0x92f34d62616ce413u },
704
+ { 0xe896a0d7e51e1566u, 0x77b020baf9c81d17u },
705
+ { 0x915e2486ef32cd60u, 0x0ace1474dc1d122eu },
706
+ { 0xb5b5ada8aaff80b8u, 0x0d819992132456bau },
707
+ { 0xe3231912d5bf60e6u, 0x10e1fff697ed6c69u },
708
+ { 0x8df5efabc5979c8fu, 0xca8d3ffa1ef463c1u },
709
+ { 0xb1736b96b6fd83b3u, 0xbd308ff8a6b17cb2u },
710
+ { 0xddd0467c64bce4a0u, 0xac7cb3f6d05ddbdeu },
711
+ { 0x8aa22c0dbef60ee4u, 0x6bcdf07a423aa96bu },
712
+ { 0xad4ab7112eb3929du, 0x86c16c98d2c953c6u },
713
+ { 0xd89d64d57a607744u, 0xe871c7bf077ba8b7u },
714
+ { 0x87625f056c7c4a8bu, 0x11471cd764ad4972u },
715
+ { 0xa93af6c6c79b5d2du, 0xd598e40d3dd89bcfu },
716
+ { 0xd389b47879823479u, 0x4aff1d108d4ec2c3u },
717
+ { 0x843610cb4bf160cbu, 0xcedf722a585139bau },
718
+ { 0xa54394fe1eedb8feu, 0xc2974eb4ee658828u },
719
+ { 0xce947a3da6a9273eu, 0x733d226229feea32u },
720
+ { 0x811ccc668829b887u, 0x0806357d5a3f525fu },
721
+ { 0xa163ff802a3426a8u, 0xca07c2dcb0cf26f7u },
722
+ { 0xc9bcff6034c13052u, 0xfc89b393dd02f0b5u },
723
+ { 0xfc2c3f3841f17c67u, 0xbbac2078d443ace2u },
724
+ { 0x9d9ba7832936edc0u, 0xd54b944b84aa4c0du },
725
+ { 0xc5029163f384a931u, 0x0a9e795e65d4df11u },
726
+ { 0xf64335bcf065d37du, 0x4d4617b5ff4a16d5u },
727
+ { 0x99ea0196163fa42eu, 0x504bced1bf8e4e45u },
728
+ { 0xc06481fb9bcf8d39u, 0xe45ec2862f71e1d6u },
729
+ { 0xf07da27a82c37088u, 0x5d767327bb4e5a4cu },
730
+ { 0x964e858c91ba2655u, 0x3a6a07f8d510f86fu },
731
+ { 0xbbe226efb628afeau, 0x890489f70a55368bu },
732
+ { 0xeadab0aba3b2dbe5u, 0x2b45ac74ccea842eu },
733
+ { 0x92c8ae6b464fc96fu, 0x3b0b8bc90012929du },
734
+ { 0xb77ada0617e3bbcbu, 0x09ce6ebb40173744u },
735
+ { 0xe55990879ddcaabdu, 0xcc420a6a101d0515u },
736
+ { 0x8f57fa54c2a9eab6u, 0x9fa946824a12232du },
737
+ { 0xb32df8e9f3546564u, 0x47939822dc96abf9u },
738
+ { 0xdff9772470297ebdu, 0x59787e2b93bc56f7u },
739
+ { 0x8bfbea76c619ef36u, 0x57eb4edb3c55b65au },
740
+ { 0xaefae51477a06b03u, 0xede622920b6b23f1u },
741
+ { 0xdab99e59958885c4u, 0xe95fab368e45ecedu },
742
+ { 0x88b402f7fd75539bu, 0x11dbcb0218ebb414u },
743
+ { 0xaae103b5fcd2a881u, 0xd652bdc29f26a119u },
744
+ { 0xd59944a37c0752a2u, 0x4be76d3346f0495fu },
745
+ { 0x857fcae62d8493a5u, 0x6f70a4400c562ddbu },
746
+ { 0xa6dfbd9fb8e5b88eu, 0xcb4ccd500f6bb952u },
747
+ { 0xd097ad07a71f26b2u, 0x7e2000a41346a7a7u },
748
+ { 0x825ecc24c873782fu, 0x8ed400668c0c28c8u },
749
+ { 0xa2f67f2dfa90563bu, 0x728900802f0f32fau },
750
+ { 0xcbb41ef979346bcau, 0x4f2b40a03ad2ffb9u },
751
+ { 0xfea126b7d78186bcu, 0xe2f610c84987bfa8u },
752
+ { 0x9f24b832e6b0f436u, 0x0dd9ca7d2df4d7c9u },
753
+ { 0xc6ede63fa05d3143u, 0x91503d1c79720dbbu },
754
+ { 0xf8a95fcf88747d94u, 0x75a44c6397ce912au },
755
+ { 0x9b69dbe1b548ce7cu, 0xc986afbe3ee11abau },
756
+ { 0xc24452da229b021bu, 0xfbe85badce996168u },
757
+ { 0xf2d56790ab41c2a2u, 0xfae27299423fb9c3u },
758
+ { 0x97c560ba6b0919a5u, 0xdccd879fc967d41au },
759
+ { 0xbdb6b8e905cb600fu, 0x5400e987bbc1c920u },
760
+ { 0xed246723473e3813u, 0x290123e9aab23b68u },
761
+ { 0x9436c0760c86e30bu, 0xf9a0b6720aaf6521u },
762
+ { 0xb94470938fa89bceu, 0xf808e40e8d5b3e69u },
763
+ { 0xe7958cb87392c2c2u, 0xb60b1d1230b20e04u },
764
+ { 0x90bd77f3483bb9b9u, 0xb1c6f22b5e6f48c2u },
765
+ { 0xb4ecd5f01a4aa828u, 0x1e38aeb6360b1af3u },
766
+ { 0xe2280b6c20dd5232u, 0x25c6da63c38de1b0u },
767
+ { 0x8d590723948a535fu, 0x579c487e5a38ad0eu },
768
+ { 0xb0af48ec79ace837u, 0x2d835a9df0c6d851u },
769
+ { 0xdcdb1b2798182244u, 0xf8e431456cf88e65u },
770
+ { 0x8a08f0f8bf0f156bu, 0x1b8e9ecb641b58ffu },
771
+ { 0xac8b2d36eed2dac5u, 0xe272467e3d222f3fu },
772
+ { 0xd7adf884aa879177u, 0x5b0ed81dcc6abb0fu },
773
+ { 0x86ccbb52ea94baeau, 0x98e947129fc2b4e9u },
774
+ { 0xa87fea27a539e9a5u, 0x3f2398d747b36224u },
775
+ { 0xd29fe4b18e88640eu, 0x8eec7f0d19a03aadu },
776
+ { 0x83a3eeeef9153e89u, 0x1953cf68300424acu },
777
+ { 0xa48ceaaab75a8e2bu, 0x5fa8c3423c052dd7u },
778
+ { 0xcdb02555653131b6u, 0x3792f412cb06794du },
779
+ { 0x808e17555f3ebf11u, 0xe2bbd88bbee40bd0u },
780
+ { 0xa0b19d2ab70e6ed6u, 0x5b6aceaeae9d0ec4u },
781
+ { 0xc8de047564d20a8bu, 0xf245825a5a445275u },
782
+ { 0xfb158592be068d2eu, 0xeed6e2f0f0d56712u },
783
+ { 0x9ced737bb6c4183du, 0x55464dd69685606bu },
784
+ { 0xc428d05aa4751e4cu, 0xaa97e14c3c26b886u },
785
+ { 0xf53304714d9265dfu, 0xd53dd99f4b3066a8u },
786
+ { 0x993fe2c6d07b7fabu, 0xe546a8038efe4029u },
787
+ { 0xbf8fdb78849a5f96u, 0xde98520472bdd033u },
788
+ { 0xef73d256a5c0f77cu, 0x963e66858f6d4440u },
789
+ { 0x95a8637627989aadu, 0xdde7001379a44aa8u },
790
+ { 0xbb127c53b17ec159u, 0x5560c018580d5d52u },
791
+ { 0xe9d71b689dde71afu, 0xaab8f01e6e10b4a6u },
792
+ { 0x9226712162ab070du, 0xcab3961304ca70e8u },
793
+ { 0xb6b00d69bb55c8d1u, 0x3d607b97c5fd0d22u },
794
+ { 0xe45c10c42a2b3b05u, 0x8cb89a7db77c506au },
795
+ { 0x8eb98a7a9a5b04e3u, 0x77f3608e92adb242u },
796
+ { 0xb267ed1940f1c61cu, 0x55f038b237591ed3u },
797
+ { 0xdf01e85f912e37a3u, 0x6b6c46dec52f6688u },
798
+ { 0x8b61313bbabce2c6u, 0x2323ac4b3b3da015u },
799
+ { 0xae397d8aa96c1b77u, 0xabec975e0a0d081au },
800
+ { 0xd9c7dced53c72255u, 0x96e7bd358c904a21u },
801
+ { 0x881cea14545c7575u, 0x7e50d64177da2e54u },
802
+ { 0xaa242499697392d2u, 0xdde50bd1d5d0b9e9u },
803
+ { 0xd4ad2dbfc3d07787u, 0x955e4ec64b44e864u },
804
+ { 0x84ec3c97da624ab4u, 0xbd5af13bef0b113eu },
805
+ { 0xa6274bbdd0fadd61u, 0xecb1ad8aeacdd58eu },
806
+ { 0xcfb11ead453994bau, 0x67de18eda5814af2u },
807
+ { 0x81ceb32c4b43fcf4u, 0x80eacf948770ced7u },
808
+ { 0xa2425ff75e14fc31u, 0xa1258379a94d028du },
809
+ { 0xcad2f7f5359a3b3eu, 0x096ee45813a04330u },
810
+ { 0xfd87b5f28300ca0du, 0x8bca9d6e188853fcu },
811
+ { 0x9e74d1b791e07e48u, 0x775ea264cf55347du },
812
+ { 0xc612062576589ddau, 0x95364afe032a819du },
813
+ { 0xf79687aed3eec551u, 0x3a83ddbd83f52204u },
814
+ { 0x9abe14cd44753b52u, 0xc4926a9672793542u },
815
+ { 0xc16d9a0095928a27u, 0x75b7053c0f178293u },
816
+ { 0xf1c90080baf72cb1u, 0x5324c68b12dd6338u },
817
+ { 0x971da05074da7beeu, 0xd3f6fc16ebca5e03u },
818
+ { 0xbce5086492111aeau, 0x88f4bb1ca6bcf584u },
819
+ { 0xec1e4a7db69561a5u, 0x2b31e9e3d06c32e5u },
820
+ { 0x9392ee8e921d5d07u, 0x3aff322e62439fcfu },
821
+ { 0xb877aa3236a4b449u, 0x09befeb9fad487c2u },
822
+ { 0xe69594bec44de15bu, 0x4c2ebe687989a9b3u },
823
+ { 0x901d7cf73ab0acd9u, 0x0f9d37014bf60a10u },
824
+ { 0xb424dc35095cd80fu, 0x538484c19ef38c94u },
825
+ { 0xe12e13424bb40e13u, 0x2865a5f206b06fb9u },
826
+ { 0x8cbccc096f5088cbu, 0xf93f87b7442e45d3u },
827
+ { 0xafebff0bcb24aafeu, 0xf78f69a51539d748u },
828
+ { 0xdbe6fecebdedd5beu, 0xb573440e5a884d1bu },
829
+ { 0x89705f4136b4a597u, 0x31680a88f8953030u },
830
+ { 0xabcc77118461cefcu, 0xfdc20d2b36ba7c3du },
831
+ { 0xd6bf94d5e57a42bcu, 0x3d32907604691b4cu },
832
+ { 0x8637bd05af6c69b5u, 0xa63f9a49c2c1b10fu },
833
+ { 0xa7c5ac471b478423u, 0x0fcf80dc33721d53u },
834
+ { 0xd1b71758e219652bu, 0xd3c36113404ea4a8u },
835
+ { 0x83126e978d4fdf3bu, 0x645a1cac083126e9u },
836
+ { 0xa3d70a3d70a3d70au, 0x3d70a3d70a3d70a3u },
837
+ { 0xccccccccccccccccu, 0xccccccccccccccccu },
838
+ { 0x8000000000000000u, 0x0000000000000000u },
839
+ { 0xa000000000000000u, 0x0000000000000000u },
840
+ { 0xc800000000000000u, 0x0000000000000000u },
841
+ { 0xfa00000000000000u, 0x0000000000000000u },
842
+ { 0x9c40000000000000u, 0x0000000000000000u },
843
+ { 0xc350000000000000u, 0x0000000000000000u },
844
+ { 0xf424000000000000u, 0x0000000000000000u },
845
+ { 0x9896800000000000u, 0x0000000000000000u },
846
+ { 0xbebc200000000000u, 0x0000000000000000u },
847
+ { 0xee6b280000000000u, 0x0000000000000000u },
848
+ { 0x9502f90000000000u, 0x0000000000000000u },
849
+ { 0xba43b74000000000u, 0x0000000000000000u },
850
+ { 0xe8d4a51000000000u, 0x0000000000000000u },
851
+ { 0x9184e72a00000000u, 0x0000000000000000u },
852
+ { 0xb5e620f480000000u, 0x0000000000000000u },
853
+ { 0xe35fa931a0000000u, 0x0000000000000000u },
854
+ { 0x8e1bc9bf04000000u, 0x0000000000000000u },
855
+ { 0xb1a2bc2ec5000000u, 0x0000000000000000u },
856
+ { 0xde0b6b3a76400000u, 0x0000000000000000u },
857
+ { 0x8ac7230489e80000u, 0x0000000000000000u },
858
+ { 0xad78ebc5ac620000u, 0x0000000000000000u },
859
+ { 0xd8d726b7177a8000u, 0x0000000000000000u },
860
+ { 0x878678326eac9000u, 0x0000000000000000u },
861
+ { 0xa968163f0a57b400u, 0x0000000000000000u },
862
+ { 0xd3c21bcecceda100u, 0x0000000000000000u },
863
+ { 0x84595161401484a0u, 0x0000000000000000u },
864
+ { 0xa56fa5b99019a5c8u, 0x0000000000000000u },
865
+ { 0xcecb8f27f4200f3au, 0x0000000000000000u },
866
+ { 0x813f3978f8940984u, 0x4000000000000000u },
867
+ { 0xa18f07d736b90be5u, 0x5000000000000000u },
868
+ { 0xc9f2c9cd04674edeu, 0xa400000000000000u },
869
+ { 0xfc6f7c4045812296u, 0x4d00000000000000u },
870
+ { 0x9dc5ada82b70b59du, 0xf020000000000000u },
871
+ { 0xc5371912364ce305u, 0x6c28000000000000u },
872
+ { 0xf684df56c3e01bc6u, 0xc732000000000000u },
873
+ { 0x9a130b963a6c115cu, 0x3c7f400000000000u },
874
+ { 0xc097ce7bc90715b3u, 0x4b9f100000000000u },
875
+ { 0xf0bdc21abb48db20u, 0x1e86d40000000000u },
876
+ { 0x96769950b50d88f4u, 0x1314448000000000u },
877
+ { 0xbc143fa4e250eb31u, 0x17d955a000000000u },
878
+ { 0xeb194f8e1ae525fdu, 0x5dcfab0800000000u },
879
+ { 0x92efd1b8d0cf37beu, 0x5aa1cae500000000u },
880
+ { 0xb7abc627050305adu, 0xf14a3d9e40000000u },
881
+ { 0xe596b7b0c643c719u, 0x6d9ccd05d0000000u },
882
+ { 0x8f7e32ce7bea5c6fu, 0xe4820023a2000000u },
883
+ { 0xb35dbf821ae4f38bu, 0xdda2802c8a800000u },
884
+ { 0xe0352f62a19e306eu, 0xd50b2037ad200000u },
885
+ { 0x8c213d9da502de45u, 0x4526f422cc340000u },
886
+ { 0xaf298d050e4395d6u, 0x9670b12b7f410000u },
887
+ { 0xdaf3f04651d47b4cu, 0x3c0cdd765f114000u },
888
+ { 0x88d8762bf324cd0fu, 0xa5880a69fb6ac800u },
889
+ { 0xab0e93b6efee0053u, 0x8eea0d047a457a00u },
890
+ { 0xd5d238a4abe98068u, 0x72a4904598d6d880u },
891
+ { 0x85a36366eb71f041u, 0x47a6da2b7f864750u },
892
+ { 0xa70c3c40a64e6c51u, 0x999090b65f67d924u },
893
+ { 0xd0cf4b50cfe20765u, 0xfff4b4e3f741cf6du },
894
+ { 0x82818f1281ed449fu, 0xbff8f10e7a8921a4u },
895
+ { 0xa321f2d7226895c7u, 0xaff72d52192b6a0du },
896
+ { 0xcbea6f8ceb02bb39u, 0x9bf4f8a69f764490u },
897
+ { 0xfee50b7025c36a08u, 0x02f236d04753d5b4u },
898
+ { 0x9f4f2726179a2245u, 0x01d762422c946590u },
899
+ { 0xc722f0ef9d80aad6u, 0x424d3ad2b7b97ef5u },
900
+ { 0xf8ebad2b84e0d58bu, 0xd2e0898765a7deb2u },
901
+ { 0x9b934c3b330c8577u, 0x63cc55f49f88eb2fu },
902
+ { 0xc2781f49ffcfa6d5u, 0x3cbf6b71c76b25fbu },
903
+ { 0xf316271c7fc3908au, 0x8bef464e3945ef7au },
904
+ { 0x97edd871cfda3a56u, 0x97758bf0e3cbb5acu },
905
+ { 0xbde94e8e43d0c8ecu, 0x3d52eeed1cbea317u },
906
+ { 0xed63a231d4c4fb27u, 0x4ca7aaa863ee4bddu },
907
+ { 0x945e455f24fb1cf8u, 0x8fe8caa93e74ef6au },
908
+ { 0xb975d6b6ee39e436u, 0xb3e2fd538e122b44u },
909
+ { 0xe7d34c64a9c85d44u, 0x60dbbca87196b616u },
910
+ { 0x90e40fbeea1d3a4au, 0xbc8955e946fe31cdu },
911
+ { 0xb51d13aea4a488ddu, 0x6babab6398bdbe41u },
912
+ { 0xe264589a4dcdab14u, 0xc696963c7eed2dd1u },
913
+ { 0x8d7eb76070a08aecu, 0xfc1e1de5cf543ca2u },
914
+ { 0xb0de65388cc8ada8u, 0x3b25a55f43294bcbu },
915
+ { 0xdd15fe86affad912u, 0x49ef0eb713f39ebeu },
916
+ { 0x8a2dbf142dfcc7abu, 0x6e3569326c784337u },
917
+ { 0xacb92ed9397bf996u, 0x49c2c37f07965404u },
918
+ { 0xd7e77a8f87daf7fbu, 0xdc33745ec97be906u },
919
+ { 0x86f0ac99b4e8dafdu, 0x69a028bb3ded71a3u },
920
+ { 0xa8acd7c0222311bcu, 0xc40832ea0d68ce0cu },
921
+ { 0xd2d80db02aabd62bu, 0xf50a3fa490c30190u },
922
+ { 0x83c7088e1aab65dbu, 0x792667c6da79e0fau },
923
+ { 0xa4b8cab1a1563f52u, 0x577001b891185938u },
924
+ { 0xcde6fd5e09abcf26u, 0xed4c0226b55e6f86u },
925
+ { 0x80b05e5ac60b6178u, 0x544f8158315b05b4u },
926
+ { 0xa0dc75f1778e39d6u, 0x696361ae3db1c721u },
927
+ { 0xc913936dd571c84cu, 0x03bc3a19cd1e38e9u },
928
+ { 0xfb5878494ace3a5fu, 0x04ab48a04065c723u },
929
+ { 0x9d174b2dcec0e47bu, 0x62eb0d64283f9c76u },
930
+ { 0xc45d1df942711d9au, 0x3ba5d0bd324f8394u },
931
+ { 0xf5746577930d6500u, 0xca8f44ec7ee36479u },
932
+ { 0x9968bf6abbe85f20u, 0x7e998b13cf4e1ecbu },
933
+ { 0xbfc2ef456ae276e8u, 0x9e3fedd8c321a67eu },
934
+ { 0xefb3ab16c59b14a2u, 0xc5cfe94ef3ea101eu },
935
+ { 0x95d04aee3b80ece5u, 0xbba1f1d158724a12u },
936
+ { 0xbb445da9ca61281fu, 0x2a8a6e45ae8edc97u },
937
+ { 0xea1575143cf97226u, 0xf52d09d71a3293bdu },
938
+ { 0x924d692ca61be758u, 0x593c2626705f9c56u },
939
+ { 0xb6e0c377cfa2e12eu, 0x6f8b2fb00c77836cu },
940
+ { 0xe498f455c38b997au, 0x0b6dfb9c0f956447u },
941
+ { 0x8edf98b59a373fecu, 0x4724bd4189bd5eacu },
942
+ { 0xb2977ee300c50fe7u, 0x58edec91ec2cb657u },
943
+ { 0xdf3d5e9bc0f653e1u, 0x2f2967b66737e3edu },
944
+ { 0x8b865b215899f46cu, 0xbd79e0d20082ee74u },
945
+ { 0xae67f1e9aec07187u, 0xecd8590680a3aa11u },
946
+ { 0xda01ee641a708de9u, 0xe80e6f4820cc9495u },
947
+ { 0x884134fe908658b2u, 0x3109058d147fdcddu },
948
+ { 0xaa51823e34a7eedeu, 0xbd4b46f0599fd415u },
949
+ { 0xd4e5e2cdc1d1ea96u, 0x6c9e18ac7007c91au },
950
+ { 0x850fadc09923329eu, 0x03e2cf6bc604ddb0u },
951
+ { 0xa6539930bf6bff45u, 0x84db8346b786151cu },
952
+ { 0xcfe87f7cef46ff16u, 0xe612641865679a63u },
953
+ { 0x81f14fae158c5f6eu, 0x4fcb7e8f3f60c07eu },
954
+ { 0xa26da3999aef7749u, 0xe3be5e330f38f09du },
955
+ { 0xcb090c8001ab551cu, 0x5cadf5bfd3072cc5u },
956
+ { 0xfdcb4fa002162a63u, 0x73d9732fc7c8f7f6u },
957
+ { 0x9e9f11c4014dda7eu, 0x2867e7fddcdd9afau },
958
+ { 0xc646d63501a1511du, 0xb281e1fd541501b8u },
959
+ { 0xf7d88bc24209a565u, 0x1f225a7ca91a4226u },
960
+ { 0x9ae757596946075fu, 0x3375788de9b06958u },
961
+ { 0xc1a12d2fc3978937u, 0x0052d6b1641c83aeu },
962
+ { 0xf209787bb47d6b84u, 0xc0678c5dbd23a49au },
963
+ { 0x9745eb4d50ce6332u, 0xf840b7ba963646e0u },
964
+ { 0xbd176620a501fbffu, 0xb650e5a93bc3d898u },
965
+ { 0xec5d3fa8ce427affu, 0xa3e51f138ab4cebeu },
966
+ { 0x93ba47c980e98cdfu, 0xc66f336c36b10137u },
967
+ { 0xb8a8d9bbe123f017u, 0xb80b0047445d4184u },
968
+ { 0xe6d3102ad96cec1du, 0xa60dc059157491e5u },
969
+ { 0x9043ea1ac7e41392u, 0x87c89837ad68db2fu },
970
+ { 0xb454e4a179dd1877u, 0x29babe4598c311fbu },
971
+ { 0xe16a1dc9d8545e94u, 0xf4296dd6fef3d67au },
972
+ { 0x8ce2529e2734bb1du, 0x1899e4a65f58660cu },
973
+ { 0xb01ae745b101e9e4u, 0x5ec05dcff72e7f8fu },
974
+ { 0xdc21a1171d42645du, 0x76707543f4fa1f73u },
975
+ { 0x899504ae72497ebau, 0x6a06494a791c53a8u },
976
+ { 0xabfa45da0edbde69u, 0x0487db9d17636892u },
977
+ { 0xd6f8d7509292d603u, 0x45a9d2845d3c42b6u },
978
+ { 0x865b86925b9bc5c2u, 0x0b8a2392ba45a9b2u },
979
+ { 0xa7f26836f282b732u, 0x8e6cac7768d7141eu },
980
+ { 0xd1ef0244af2364ffu, 0x3207d795430cd926u },
981
+ { 0x8335616aed761f1fu, 0x7f44e6bd49e807b8u },
982
+ { 0xa402b9c5a8d3a6e7u, 0x5f16206c9c6209a6u },
983
+ { 0xcd036837130890a1u, 0x36dba887c37a8c0fu },
984
+ { 0x802221226be55a64u, 0xc2494954da2c9789u },
985
+ { 0xa02aa96b06deb0fdu, 0xf2db9baa10b7bd6cu },
986
+ { 0xc83553c5c8965d3du, 0x6f92829494e5acc7u },
987
+ { 0xfa42a8b73abbf48cu, 0xcb772339ba1f17f9u },
988
+ { 0x9c69a97284b578d7u, 0xff2a760414536efbu },
989
+ { 0xc38413cf25e2d70du, 0xfef5138519684abau },
990
+ { 0xf46518c2ef5b8cd1u, 0x7eb258665fc25d69u },
991
+ { 0x98bf2f79d5993802u, 0xef2f773ffbd97a61u },
992
+ { 0xbeeefb584aff8603u, 0xaafb550ffacfd8fau },
993
+ { 0xeeaaba2e5dbf6784u, 0x95ba2a53f983cf38u },
994
+ { 0x952ab45cfa97a0b2u, 0xdd945a747bf26183u },
995
+ { 0xba756174393d88dfu, 0x94f971119aeef9e4u },
996
+ { 0xe912b9d1478ceb17u, 0x7a37cd5601aab85du },
997
+ { 0x91abb422ccb812eeu, 0xac62e055c10ab33au },
998
+ { 0xb616a12b7fe617aau, 0x577b986b314d6009u },
999
+ { 0xe39c49765fdf9d94u, 0xed5a7e85fda0b80bu },
1000
+ { 0x8e41ade9fbebc27du, 0x14588f13be847307u },
1001
+ { 0xb1d219647ae6b31cu, 0x596eb2d8ae258fc8u },
1002
+ { 0xde469fbd99a05fe3u, 0x6fca5f8ed9aef3bbu },
1003
+ { 0x8aec23d680043beeu, 0x25de7bb9480d5854u },
1004
+ { 0xada72ccc20054ae9u, 0xaf561aa79a10ae6au },
1005
+ { 0xd910f7ff28069da4u, 0x1b2ba1518094da04u },
1006
+ { 0x87aa9aff79042286u, 0x90fb44d2f05d0842u },
1007
+ { 0xa99541bf57452b28u, 0x353a1607ac744a53u },
1008
+ { 0xd3fa922f2d1675f2u, 0x42889b8997915ce8u },
1009
+ { 0x847c9b5d7c2e09b7u, 0x69956135febada11u },
1010
+ { 0xa59bc234db398c25u, 0x43fab9837e699095u },
1011
+ { 0xcf02b2c21207ef2eu, 0x94f967e45e03f4bbu },
1012
+ { 0x8161afb94b44f57du, 0x1d1be0eebac278f5u },
1013
+ { 0xa1ba1ba79e1632dcu, 0x6462d92a69731732u },
1014
+ { 0xca28a291859bbf93u, 0x7d7b8f7503cfdcfeu },
1015
+ { 0xfcb2cb35e702af78u, 0x5cda735244c3d43eu },
1016
+ { 0x9defbf01b061adabu, 0x3a0888136afa64a7u },
1017
+ { 0xc56baec21c7a1916u, 0x088aaa1845b8fdd0u },
1018
+ { 0xf6c69a72a3989f5bu, 0x8aad549e57273d45u },
1019
+ { 0x9a3c2087a63f6399u, 0x36ac54e2f678864bu },
1020
+ { 0xc0cb28a98fcf3c7fu, 0x84576a1bb416a7ddu },
1021
+ { 0xf0fdf2d3f3c30b9fu, 0x656d44a2a11c51d5u },
1022
+ { 0x969eb7c47859e743u, 0x9f644ae5a4b1b325u },
1023
+ { 0xbc4665b596706114u, 0x873d5d9f0dde1feeu },
1024
+ { 0xeb57ff22fc0c7959u, 0xa90cb506d155a7eau },
1025
+ { 0x9316ff75dd87cbd8u, 0x09a7f12442d588f2u },
1026
+ { 0xb7dcbf5354e9beceu, 0x0c11ed6d538aeb2fu },
1027
+ { 0xe5d3ef282a242e81u, 0x8f1668c8a86da5fau },
1028
+ { 0x8fa475791a569d10u, 0xf96e017d694487bcu },
1029
+ { 0xb38d92d760ec4455u, 0x37c981dcc395a9acu },
1030
+ { 0xe070f78d3927556au, 0x85bbe253f47b1417u },
1031
+ { 0x8c469ab843b89562u, 0x93956d7478ccec8eu },
1032
+ { 0xaf58416654a6babbu, 0x387ac8d1970027b2u },
1033
+ { 0xdb2e51bfe9d0696au, 0x06997b05fcc0319eu },
1034
+ { 0x88fcf317f22241e2u, 0x441fece3bdf81f03u },
1035
+ { 0xab3c2fddeeaad25au, 0xd527e81cad7626c3u },
1036
+ { 0xd60b3bd56a5586f1u, 0x8a71e223d8d3b074u },
1037
+ { 0x85c7056562757456u, 0xf6872d5667844e49u },
1038
+ { 0xa738c6bebb12d16cu, 0xb428f8ac016561dbu },
1039
+ { 0xd106f86e69d785c7u, 0xe13336d701beba52u },
1040
+ { 0x82a45b450226b39cu, 0xecc0024661173473u },
1041
+ { 0xa34d721642b06084u, 0x27f002d7f95d0190u },
1042
+ { 0xcc20ce9bd35c78a5u, 0x31ec038df7b441f4u },
1043
+ { 0xff290242c83396ceu, 0x7e67047175a15271u },
1044
+ { 0x9f79a169bd203e41u, 0x0f0062c6e984d386u },
1045
+ { 0xc75809c42c684dd1u, 0x52c07b78a3e60868u },
1046
+ { 0xf92e0c3537826145u, 0xa7709a56ccdf8a82u },
1047
+ { 0x9bbcc7a142b17ccbu, 0x88a66076400bb691u },
1048
+ { 0xc2abf989935ddbfeu, 0x6acff893d00ea435u },
1049
+ { 0xf356f7ebf83552feu, 0x0583f6b8c4124d43u },
1050
+ { 0x98165af37b2153deu, 0xc3727a337a8b704au },
1051
+ { 0xbe1bf1b059e9a8d6u, 0x744f18c0592e4c5cu },
1052
+ { 0xeda2ee1c7064130cu, 0x1162def06f79df73u },
1053
+ { 0x9485d4d1c63e8be7u, 0x8addcb5645ac2ba8u },
1054
+ { 0xb9a74a0637ce2ee1u, 0x6d953e2bd7173692u },
1055
+ { 0xe8111c87c5c1ba99u, 0xc8fa8db6ccdd0437u },
1056
+ { 0x910ab1d4db9914a0u, 0x1d9c9892400a22a2u },
1057
+ { 0xb54d5e4a127f59c8u, 0x2503beb6d00cab4bu },
1058
+ { 0xe2a0b5dc971f303au, 0x2e44ae64840fd61du },
1059
+ { 0x8da471a9de737e24u, 0x5ceaecfed289e5d2u },
1060
+ { 0xb10d8e1456105dadu, 0x7425a83e872c5f47u },
1061
+ { 0xdd50f1996b947518u, 0xd12f124e28f77719u },
1062
+ { 0x8a5296ffe33cc92fu, 0x82bd6b70d99aaa6fu },
1063
+ { 0xace73cbfdc0bfb7bu, 0x636cc64d1001550bu },
1064
+ { 0xd8210befd30efa5au, 0x3c47f7e05401aa4eu },
1065
+ { 0x8714a775e3e95c78u, 0x65acfaec34810a71u },
1066
+ { 0xa8d9d1535ce3b396u, 0x7f1839a741a14d0du },
1067
+ { 0xd31045a8341ca07cu, 0x1ede48111209a050u },
1068
+ { 0x83ea2b892091e44du, 0x934aed0aab460432u },
1069
+ { 0xa4e4b66b68b65d60u, 0xf81da84d5617853fu },
1070
+ { 0xce1de40642e3f4b9u, 0x36251260ab9d668eu },
1071
+ { 0x80d2ae83e9ce78f3u, 0xc1d72b7c6b426019u },
1072
+ { 0xa1075a24e4421730u, 0xb24cf65b8612f81fu },
1073
+ { 0xc94930ae1d529cfcu, 0xdee033f26797b627u },
1074
+ { 0xfb9b7cd9a4a7443cu, 0x169840ef017da3b1u },
1075
+ { 0x9d412e0806e88aa5u, 0x8e1f289560ee864eu },
1076
+ { 0xc491798a08a2ad4eu, 0xf1a6f2bab92a27e2u },
1077
+ { 0xf5b5d7ec8acb58a2u, 0xae10af696774b1dbu },
1078
+ { 0x9991a6f3d6bf1765u, 0xacca6da1e0a8ef29u },
1079
+ { 0xbff610b0cc6edd3fu, 0x17fd090a58d32af3u },
1080
+ { 0xeff394dcff8a948eu, 0xddfc4b4cef07f5b0u },
1081
+ { 0x95f83d0a1fb69cd9u, 0x4abdaf101564f98eu },
1082
+ { 0xbb764c4ca7a4440fu, 0x9d6d1ad41abe37f1u },
1083
+ { 0xea53df5fd18d5513u, 0x84c86189216dc5edu },
1084
+ { 0x92746b9be2f8552cu, 0x32fd3cf5b4e49bb4u },
1085
+ { 0xb7118682dbb66a77u, 0x3fbc8c33221dc2a1u },
1086
+ { 0xe4d5e82392a40515u, 0x0fabaf3feaa5334au },
1087
+ { 0x8f05b1163ba6832du, 0x29cb4d87f2a7400eu },
1088
+ { 0xb2c71d5bca9023f8u, 0x743e20e9ef511012u },
1089
+ { 0xdf78e4b2bd342cf6u, 0x914da9246b255416u },
1090
+ { 0x8bab8eefb6409c1au, 0x1ad089b6c2f7548eu },
1091
+ { 0xae9672aba3d0c320u, 0xa184ac2473b529b1u },
1092
+ { 0xda3c0f568cc4f3e8u, 0xc9e5d72d90a2741eu },
1093
+ { 0x8865899617fb1871u, 0x7e2fa67c7a658892u },
1094
+ { 0xaa7eebfb9df9de8du, 0xddbb901b98feeab7u },
1095
+ { 0xd51ea6fa85785631u, 0x552a74227f3ea565u },
1096
+ { 0x8533285c936b35deu, 0xd53a88958f87275fu },
1097
+ { 0xa67ff273b8460356u, 0x8a892abaf368f137u },
1098
+ { 0xd01fef10a657842cu, 0x2d2b7569b0432d85u },
1099
+ { 0x8213f56a67f6b29bu, 0x9c3b29620e29fc73u },
1100
+ { 0xa298f2c501f45f42u, 0x8349f3ba91b47b8fu },
1101
+ { 0xcb3f2f7642717713u, 0x241c70a936219a73u },
1102
+ { 0xfe0efb53d30dd4d7u, 0xed238cd383aa0110u },
1103
+ { 0x9ec95d1463e8a506u, 0xf4363804324a40aau },
1104
+ { 0xc67bb4597ce2ce48u, 0xb143c6053edcd0d5u },
1105
+ { 0xf81aa16fdc1b81dau, 0xdd94b7868e94050au },
1106
+ { 0x9b10a4e5e9913128u, 0xca7cf2b4191c8326u },
1107
+ { 0xc1d4ce1f63f57d72u, 0xfd1c2f611f63a3f0u },
1108
+ { 0xf24a01a73cf2dccfu, 0xbc633b39673c8cecu },
1109
+ { 0x976e41088617ca01u, 0xd5be0503e085d813u },
1110
+ { 0xbd49d14aa79dbc82u, 0x4b2d8644d8a74e18u },
1111
+ { 0xec9c459d51852ba2u, 0xddf8e7d60ed1219eu },
1112
+ { 0x93e1ab8252f33b45u, 0xcabb90e5c942b503u },
1113
+ { 0xb8da1662e7b00a17u, 0x3d6a751f3b936243u },
1114
+ { 0xe7109bfba19c0c9du, 0x0cc512670a783ad4u },
1115
+ { 0x906a617d450187e2u, 0x27fb2b80668b24c5u },
1116
+ { 0xb484f9dc9641e9dau, 0xb1f9f660802dedf6u },
1117
+ { 0xe1a63853bbd26451u, 0x5e7873f8a0396973u },
1118
+ { 0x8d07e33455637eb2u, 0xdb0b487b6423e1e8u },
1119
+ { 0xb049dc016abc5e5fu, 0x91ce1a9a3d2cda62u },
1120
+ { 0xdc5c5301c56b75f7u, 0x7641a140cc7810fbu },
1121
+ { 0x89b9b3e11b6329bau, 0xa9e904c87fcb0a9du },
1122
+ { 0xac2820d9623bf429u, 0x546345fa9fbdcd44u },
1123
+ { 0xd732290fbacaf133u, 0xa97c177947ad4095u },
1124
+ { 0x867f59a9d4bed6c0u, 0x49ed8eabcccc485du },
1125
+ { 0xa81f301449ee8c70u, 0x5c68f256bfff5a74u },
1126
+ { 0xd226fc195c6a2f8cu, 0x73832eec6fff3111u },
1127
+ { 0x83585d8fd9c25db7u, 0xc831fd53c5ff7eabu },
1128
+ { 0xa42e74f3d032f525u, 0xba3e7ca8b77f5e55u },
1129
+ { 0xcd3a1230c43fb26fu, 0x28ce1bd2e55f35ebu },
1130
+ { 0x80444b5e7aa7cf85u, 0x7980d163cf5b81b3u },
1131
+ { 0xa0555e361951c366u, 0xd7e105bcc332621fu },
1132
+ { 0xc86ab5c39fa63440u, 0x8dd9472bf3fefaa7u },
1133
+ { 0xfa856334878fc150u, 0xb14f98f6f0feb951u },
1134
+ { 0x9c935e00d4b9d8d2u, 0x6ed1bf9a569f33d3u },
1135
+ { 0xc3b8358109e84f07u, 0x0a862f80ec4700c8u },
1136
+ { 0xf4a642e14c6262c8u, 0xcd27bb612758c0fau },
1137
+ { 0x98e7e9cccfbd7dbdu, 0x8038d51cb897789cu },
1138
+ { 0xbf21e44003acdd2cu, 0xe0470a63e6bd56c3u },
1139
+ { 0xeeea5d5004981478u, 0x1858ccfce06cac74u },
1140
+ { 0x95527a5202df0ccbu, 0x0f37801e0c43ebc8u },
1141
+ { 0xbaa718e68396cffdu, 0xd30560258f54e6bau },
1142
+ { 0xe950df20247c83fdu, 0x47c6b82ef32a2069u },
1143
+ { 0x91d28b7416cdd27eu, 0x4cdc331d57fa5441u },
1144
+ { 0xb6472e511c81471du, 0xe0133fe4adf8e952u },
1145
+ { 0xe3d8f9e563a198e5u, 0x58180fddd97723a6u },
1146
+ { 0x8e679c2f5e44ff8fu, 0x570f09eaa7ea7648u },
1147
+ { 0xb201833b35d63f73u, 0x2cd2cc6551e513dau },
1148
+ { 0xde81e40a034bcf4fu, 0xf8077f7ea65e58d1u },
1149
+ { 0x8b112e86420f6191u, 0xfb04afaf27faf782u },
1150
+ { 0xadd57a27d29339f6u, 0x79c5db9af1f9b563u },
1151
+ { 0xd94ad8b1c7380874u, 0x18375281ae7822bcu },
1152
+ { 0x87cec76f1c830548u, 0x8f2293910d0b15b5u },
1153
+ { 0xa9c2794ae3a3c69au, 0xb2eb3875504ddb22u },
1154
+ { 0xd433179d9c8cb841u, 0x5fa60692a46151ebu },
1155
+ { 0x849feec281d7f328u, 0xdbc7c41ba6bcd333u },
1156
+ { 0xa5c7ea73224deff3u, 0x12b9b522906c0800u },
1157
+ { 0xcf39e50feae16befu, 0xd768226b34870a00u },
1158
+ { 0x81842f29f2cce375u, 0xe6a1158300d46640u },
1159
+ { 0xa1e53af46f801c53u, 0x60495ae3c1097fd0u },
1160
+ { 0xca5e89b18b602368u, 0x385bb19cb14bdfc4u },
1161
+ { 0xfcf62c1dee382c42u, 0x46729e03dd9ed7b5u },
832
1162
  };
833
1163
 
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;
1164
+ /* The high 128 bits of the 192-bit product of `x_hi:x_lo` and `y`, dropping
1165
+ the low word's carry exactly as upstream does: the table rounds down, and
1166
+ the error that leaves is what the `+6` below absorbs. */
1167
+ static void nish_umul192_hi128(uint64_t x_hi, uint64_t x_lo, uint64_t y,
1168
+ uint64_t *hi, uint64_t *lo) {
1169
+ __uint128_t p = (__uint128_t)x_hi * y;
1170
+ uint64_t l = (uint64_t)p + (uint64_t)(((__uint128_t)x_lo * y) >> 64);
1171
+ *hi = (uint64_t)(p >> 64) + (l < (uint64_t)p);
1172
+ *lo = l;
1177
1173
  }
1178
1174
 
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));
1175
+ /* (x * y + c) >> 64: one decimal digit off a 64-bit fraction, biased by `c`. */
1176
+ static uint64_t nish_umul128_add_hi64(uint64_t x, uint64_t y, uint64_t c) {
1177
+ return (uint64_t)(((__uint128_t)x * y + c) >> 64);
1184
1178
  }
1185
1179
 
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;
1180
+ /* The shortest digits of a finite, positive double, given as its bits, as an
1181
+ integer `sig` with no trailing zeros and `*exp10` set so the value is
1182
+ `sig * 10^*exp10`. `sig` has 1 to 17 digits. */
1183
+ static uint64_t nish_shortest_digits(uint64_t bits, int *exp10) {
1184
+ uint64_t bin_sig = bits & ((1ull << 52) - 1);
1185
+ int raw_exp = (int)(bits >> 52);
1186
+ /* A power of two has a lower neighbour half as far away as its upper one,
1187
+ so its rounding interval is lopsided ("irregular"). 2^-1022 is the one
1188
+ power that is not: the largest subnormal sits a full ulp below it. V8 and
1189
+ Ryu both treat it as regular, and so does this; upstream does not, which
1190
+ would need one more table row and prints the same digits. */
1191
+ int regular = bin_sig != 0 || raw_exp <= 1;
1192
+ if (raw_exp == 0) raw_exp = 1; /* a subnormal has 2^-1022's spacing */
1193
+ else bin_sig |= 1ull << 52;
1194
+ int bin_exp = raw_exp - 1075;
1195
+
1196
+ /* floor(log10(2^bin_exp)), or of 3/4 of it when irregular, and the shift
1197
+ that puts every exponent's decimal point at the same bit. Scaling by
1198
+ 10^(-dec_exp-1) rather than 10^-dec_exp lands on the shorter candidate
1199
+ directly, so the extra digit comes off the fraction, not out of a div10. */
1200
+ int dec_exp = (bin_exp * 315653 - (regular ? 0 : 131072)) >> 20;
1201
+ int shift = bin_exp + ((-(dec_exp + 1) * 217707) >> 16) + 1 + 6;
1202
+ const uint64_t *pow10 = NISH_POW10_SIG[-dec_exp - 1 - NISH_POW10_MIN];
1203
+ uint64_t hi, lo;
1204
+ nish_umul192_hi128(pow10[0], pow10[1], bin_sig << shift, &hi, &lo);
1205
+ uint64_t integral = hi >> 6;
1206
+ uint64_t fractional = (hi << 58) | (lo >> 6);
1207
+
1208
+ /* Half the distance to each neighbour, in the fraction's units. An even
1209
+ significand's interval is closed, which is the round-half-to-even tie
1210
+ rule for reading the digits back. */
1211
+ uint64_t half_ulp = pow10[0] >> (7 - shift);
1212
+ int round_up, round_down;
1213
+ uint64_t digit;
1214
+ if (regular) {
1215
+ half_ulp += 1 - (bin_sig & 1);
1216
+ round_up = fractional + half_ulp < fractional;
1217
+ round_down = half_ulp > fractional;
1218
+ /* The nearest next digit, ties to even: 0.25 is the one fraction whose
1219
+ tenfold is an exact .5 that rounds the wrong way. */
1220
+ digit = nish_umul128_add_hi64(fractional, 10, (1ull << 63) + 6);
1221
+ if (fractional == 1ull << 62) digit = 2;
1202
1222
  } else {
1203
- e2 = (int32_t)exponent - 1023 - 52 - 2;
1204
- m2 = (1ull << 52) | mantissa;
1223
+ round_up = half_ulp > ~0ull - fractional;
1224
+ round_down = (half_ulp >> 1) > fractional;
1225
+ /* The lower neighbour is closer, so the nearest digit may fall below the
1226
+ interval: take the smallest one inside it instead. */
1227
+ digit = nish_umul128_add_hi64(fractional, 10, (1ull << 63) - 1);
1228
+ uint64_t least = nish_umul128_add_hi64(fractional - (half_ulp >> 1), 10, ~0ull);
1229
+ if (digit < least) digit = least;
1205
1230
  }
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
- }
1231
+
1232
+ /* When either end of the interval reaches past the shorter candidate, that
1233
+ candidate (rounded toward the end that holds it) is the answer; otherwise
1234
+ it takes one more digit. */
1235
+ uint64_t sig = (integral + round_up) * 10 + (round_up | round_down ? 0 : digit);
1236
+ int e = dec_exp;
1237
+ /* At most 16 trailing zeros: `sig` is below 2^53 * 10 + 10 < 10^17. */
1238
+ if (sig % 10 == 0) {
1239
+ sig /= 10; e += 1;
1240
+ if (sig % 100000000 == 0) { sig /= 100000000; e += 8; }
1241
+ if (sig % 10000 == 0) { sig /= 10000; e += 4; }
1242
+ if (sig % 100 == 0) { sig /= 100; e += 2; }
1243
+ if (sig % 10 == 0) { sig /= 10; e += 1; }
1246
1244
  }
1245
+ *exp10 = e;
1246
+ return sig;
1247
+ }
1247
1248
 
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);
1249
+ /* "00" to "99", so the digits go out two to a lookup and two to a store. */
1250
+ static const char NISH_DIGITS2[200] =
1251
+ "0001020304050607080910111213141516171819"
1252
+ "2021222324252627282930313233343536373839"
1253
+ "4041424344454647484950515253545556575859"
1254
+ "6061626364656667686970717273747576777879"
1255
+ "8081828384858687888990919293949596979899";
1256
+
1257
+ static const uint64_t NISH_POW10_U64[18] = {
1258
+ 1ull, 10ull, 100ull, 1000ull, 10000ull, 100000ull, 1000000ull, 10000000ull,
1259
+ 100000000ull, 1000000000ull, 10000000000ull, 100000000000ull,
1260
+ 1000000000000ull, 10000000000000ull, 100000000000000ull,
1261
+ 1000000000000000ull, 10000000000000000ull, 100000000000000000ull,
1262
+ };
1263
+
1264
+ /* The decimal digits of `v` into the bytes just before `end`, as many as it
1265
+ has, written backward a pair at a time. The caller knows the count. */
1266
+ static void nish_put_digits(char *end, uint64_t v) {
1267
+ while (v >= 100) {
1268
+ uint64_t q = v / 100;
1269
+ end -= 2;
1270
+ memcpy(end, NISH_DIGITS2 + 2 * (v - q * 100), 2);
1271
+ v = q;
1296
1272
  }
1273
+ if (v >= 10) memcpy(end - 2, NISH_DIGITS2 + 2 * v, 2);
1274
+ else end[-1] = (char)('0' + v);
1275
+ }
1297
1276
 
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;
1277
+ /* runtime/nish.h and tests/runtime-test.c state the same size; tests/run.js
1278
+ (`f64_format_oracle`) fails if the three disagree. */
1279
+ #define NISH_F64_MAX 32
1280
+
1281
+ /* JS Number#toString: shortest round-trip digits, e-form outside (-6, 21].
1282
+ Writes no NUL and returns the length. The longest output is 25 bytes,
1283
+ -0.0000012345678901234567: a sign, "0.", five zeros and seventeen digits.
1284
+ Every other layout is shorter: 22 for a 21-digit integer and its sign, 24
1285
+ for -1.2345678901234567e-308, 9 for -Infinity. No layout writes scratch
1286
+ past its own final length. */
1287
+ int nish_f64_format(double v, char out[NISH_F64_MAX]) {
1288
+ uint64_t bits;
1289
+ char *o = out;
1290
+ memcpy(&bits, &v, 8);
1291
+ if ((bits << 1) >> 53 == 0x7ff) {
1292
+ if (bits << 12) { memcpy(o, "NaN", 3); return 3; }
1293
+ if (bits >> 63) *o++ = '-';
1294
+ memcpy(o, "Infinity", 8);
1295
+ return (int)(o - out) + 8;
1296
+ }
1297
+ if ((bits << 1) == 0) { *o = '0'; return 1; } /* -0 prints as 0 */
1298
+ if (bits >> 63) *o++ = '-';
1299
+
1300
+ int e;
1301
+ uint64_t sig = nish_shortest_digits(bits & ~(1ull << 63), &e);
1302
+ /* The digit count: 1233 / 4096 is log10(2) from below, which can only be
1303
+ one short, and the table settles it. */
1304
+ int k = ((64 - __builtin_clzll(sig)) * 1233) >> 12;
1305
+ k += sig >= NISH_POW10_U64[k];
1306
+ int n = k + e; /* value = 0.<digits> * 10^n */
1307
+
1308
+ if (n > 21 || n <= -6) {
1309
+ /* d.ddde+x: the digits one byte right, then the first moved left past
1310
+ where the point goes. */
1311
+ nish_put_digits(o + 1 + k, sig);
1312
+ o[0] = o[1];
1313
+ if (k > 1) { o[1] = '.'; o += k + 1; }
1314
+ else o += 1;
1315
+ int x = n - 1;
1316
+ *o++ = 'e';
1317
+ *o++ = x < 0 ? '-' : '+';
1318
+ if (x < 0) x = -x;
1319
+ if (x >= 100) { *o++ = (char)('0' + x / 100); x %= 100; memcpy(o, NISH_DIGITS2 + 2 * x, 2); o += 2; }
1320
+ else if (x >= 10) { memcpy(o, NISH_DIGITS2 + 2 * x, 2); o += 2; }
1321
+ else *o++ = (char)('0' + x);
1322
+ } else if (n <= 0) {
1323
+ o[0] = '0'; o[1] = '.';
1324
+ memset(o + 2, '0', (size_t)-n);
1325
+ o += 2 - n;
1326
+ nish_put_digits(o + k, sig);
1327
+ o += k;
1328
+ } else if (n >= k) {
1329
+ nish_put_digits(o + k, sig);
1330
+ memset(o + k, '0', (size_t)(n - k));
1331
+ o += n;
1332
+ } else {
1333
+ /* The integer part shifts left one byte to open the point's slot. */
1334
+ nish_put_digits(o + 1 + k, sig);
1335
+ memmove(o, o + 1, (size_t)n);
1336
+ o[n] = '.';
1337
+ o += k + 1;
1338
+ }
1339
+ return (int)(o - out);
1304
1340
  }
1305
1341
 
1306
- /* JS Number#toString: shortest round-trip digits, e-form outside (-6, 21] */
1307
1342
  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);
1343
+ char out[NISH_F64_MAX];
1344
+ return nish_str_new(out, (uint64_t)nish_f64_format(v, out));
1345
+ }
1346
+
1347
+ /* `JsonWriter.f64`'s digits straight into the writer's buffer (std/json.ts,
1348
+ `jsonPutF64Walk`; the emitter makes the call, src/kernels.ts): `v`'s
1349
+ spelling at `buf[at]`, all of it or none. Answers the new end, or -1 when
1350
+ `at` is negative or the bytes do not fit before `len`, and then writes
1351
+ nothing, as `jsonWriterPutText` does. `len` is the array's length as the
1352
+ Nish code's `toI32` reads it, which is never more than the array holds; the
1353
+ comparison is in 64 bits, so no `len` or `at` wraps it. */
1354
+ int32_t nish_json_put_f64(uint8_t *buf, int32_t len, int32_t at, double v) {
1355
+ char out[NISH_F64_MAX];
1356
+ int n = nish_f64_format(v, out);
1357
+ if (at < 0 || (int64_t)at > (int64_t)len - n) return -1;
1358
+ memcpy(buf + at, out, (size_t)n);
1359
+ return at + n;
1324
1360
  }
1325
1361
 
1326
1362
  /* ---- Math.random: xorshift64*, seeded lazily from time and pid. The shifts