From f2d2b240a28a637d39020fb7232e09dc5b689d99 Mon Sep 17 00:00:00 2001 From: Jimmy Chu <898091+jimmychu0807@users.noreply.github.com> Date: Wed, 16 Oct 2024 08:28:56 +0800 Subject: [PATCH 1/7] refactor(scripts): added a script to convert bigint to hex --- scripts/convert-dec-to-hex.ts | 541 ++++++++++++++++++++++++++++++++++ 1 file changed, 541 insertions(+) create mode 100755 scripts/convert-dec-to-hex.ts diff --git a/scripts/convert-dec-to-hex.ts b/scripts/convert-dec-to-hex.ts new file mode 100755 index 000000000..ab80592ba --- /dev/null +++ b/scripts/convert-dec-to-hex.ts @@ -0,0 +1,541 @@ +#!/usr/bin/env node_modules/.bin/ts-node +// Run the script from project root directory + +// copied from SemaphoreVerifier.sol +const VK_POINTS = [ + [ + 18358547564487905095688479908858987846616998213156437518686067355563592118237n, + 15662648751553932653781975807624464121405704024803073886925976686616010387354n, + 1545474538105908330267074270190095622354834966212647889547653097055078098224n, + 12579159544968648693964563165973893448704730885005100826654630574108054705556n, + 20602000776800724705104231353971008348678632605343811527051139864158800058742n, + 14100125742256756091734688090621667470723401759459592787502475801413744195297n, + 5090583730862410755830979584235210054631184460526892606022709842010236308675n, + 4935746665478263580470501879719907639988899436008466660042851826337922233613n, + 3603230519262933722323237889869128969156000998401789817930265262617368730462n, + 11467103179184542033012124498958167915605281189440445972230559164572312725202n, + 20354120984011889701917116306955017859695028034788955847437411305304360829487n, + 16952752114474306858880411587178692742589121096026762314329638709126787301483n, + 18678961143994743003180318723146092299060216598083112257165966782010215931454n, + 5866474510945308764957529269555101130643879788634167019342763906927794156659n + ], + [ + 15357842752194390032830879177519514606613356943505010426726499926726016517582n, + 13720528004476084359207196371475762368424714925503835663451917882430924467554n, + 2196656647584375999320189230399052835502476576494068012902156164580595749760n, + 14571933744484927053512012311263939678215066456565339237074260778179419354637n, + 15947740979005208428427315036716544174249364023308166418156254508145278950889n, + 13324328715790405384125386378518079709609297588403011236512446709595322048979n, + 18308129219862888344083447566760955160779532192553849267018614487088634836563n, + 6372459765603725576424215986727450779217530423615747931788702584026023386877n, + 7093003777162632186231777482293120808844116758585672698445917711442486215336n, + 15357576732947512625016950088762579987226580659874157718142226214458009204755n, + 13910597919064508360434043231000553781072135406219661606166769706745413894201n, + 9475901949906914147982792916474633312982452326368523201024844634638043554494n, + 5845138751782936895477553974859998077996624699108246120208069774017428318479n, + 3326095377373657419775174404381825686428913179751401123841216020519623741775n + ], + [ + 1096090542237876305763822439899873238394525438826581012748557492836778110917n, + 18282758355470198230938465615400409713402004038201360061031317503584711879237n, + 7973969975759518869552865162652900479072033124669141796195141770899882758383n, + 2920496587818605789230962034477809982324000981266163502059117507002917895757n, + 8027751638293718359199675565570157214590620386957299982399037269650333307021n, + 19002113380575481191643777830101182489616906893723699470070419138254788369727n, + 13631613009301650992828160964785768170789209232530437462516754147352285424672n, + 10537705110128905270703523362934130036880036854847578111990360444182641655212n, + 15557574650831364767567015658284909068256128766563081293491003990055297878366n, + 4049724481871929240016595616316679773340938699307608349394228543495262553744n, + 9967066649437927083270210032320564587652082866881800887188539489167094397640n, + 12463426560961961450861478284334163210886016242490079948590082000657390077088n, + 21318595425700216078579789307308348011199610228556265752904860757510620370622n, + 7430155508771673067823897542900534022148544854722115377830369283854627952599n + ], + [ + 14033304028688398404089545751254979569049699915340551984412184456786819712695n, + 17529478610649635357901422564682249462969460088983393810272144503916885638629n, + 968190632906420692452807865081290940343138767641492735661467959437198373032n, + 7242759178038747404494096998044224993169513816067824413031492987300456908934n, + 12017353327534072098763415761011052990865822334777878720246921848197559257711n, + 4746680322053291743787031203095442352574780441873349801788355375401126089939n, + 6764632552006100580460767171096753901452726344615530017064702126145414585640n, + 11581587935666673652762153205827599529022773836189155792609728856814288572033n, + 3123694825428833189943974730387937552931713004458396242443840668462184834558n, + 3432192610292569155696646287493678963086402014898209278361624573082188247990n, + 12349833666000936285363634772178969342930188247085371717039135170012686159900n, + 5587426338437935681688079936152042996259869611071713486439341129143155921959n, + 12022589354168680516901928073724404259700970836413687340697868887207353139344n, + 2351613311284811919248989036726852289804810348516261915606564943623124473717n + ], + [ + 15740655435463241944594855735935231648684671883923953096410588018036769516770n, + 12964751171177929169670182425240761498461607040020835118601467328036987558858n, + 21474571159868965455306627669334290549452576803823591301731326342326814568896n, + 6954370193053655486251406740905618458518953022289151868757271522548301919472n, + 3115002343037487520580459802807906562630507097436525958861415456096559884443n, + 11775142132959919266954507317832500578453517368862270948538792702813845219681n, + 5975456097652384580746132945351678665917860606511206167023154005883554813508n, + 10958037207675554032315788914627312943186758288936582678633536154169678007202n, + 16345185674805541466042568997276776714209785989761944600635051035243995431568n, + 3326264593228494909568322793066180033820330146744162800569972963329142251537n, + 20721047231464194965879320004420846916587593568519526251056516572985788552732n, + 2552439778142862614309289213707433798337671284267429041900242151271508522517n, + 2849386127826497959217687777221941766595094589431869464564268817450132435018n, + 12188539304210779665491473755999603070354632830707125660270270405780470402800n + ], + [ + 16239592155161765109648123193105804251252701943901733499502441663333912783245n, + 18702593988046837524790351483331632258278160532977261915119611324471253407466n, + 13746033878407070858115621843430829498309218839316343379025665907999784574154n, + 19358066347678636498093783612000296194480758342913325289131948678991962529441n, + 6024976123298004874848602709755399197808739071863728225378332097920450236516n, + 11108084608972457539770160222798307153256767409158349747526974841008717682367n, + 3009127146923662343754766534488769100730310563110562565512507605403185571089n, + 10560679284132950437595738585637379866590755950272794729013445350206405316661n, + 16015321530803994569819047219560485624444041236327101681073970215458831987478n, + 18489840631710745699731219026737904723160484479846032199737023956049067434815n, + 609265187318362115240245160721406765003010398230819869810290394123140807290n, + 2656965952206569220410287839949134856874352189248192147930831679380007159249n, + 13957423432693450118120092425077530751840166358932317773385901323790404449641n, + 7610225795517710715985874151201119876406845575780133396869144717381641586640n + ], + [ + 6482921272760726478838066628157548923897782117283646773208763176771446379138n, + 4562585331778730670899179927104513856322577370213643119870201750008533040214n, + 9299549824594530154451155704400285409056448609359755927574262701418672785771n, + 16654459784024455427280229763380300423080811024668332509526284511491790880990n, + 18178936861568428015361893654874798233785855995042899944660014774323534883903n, + 534506139369949013962728832141783820104682340925384016906020027968881380951n, + 13888044772855561714276444972404100722751042044045312252045340354941233320135n, + 13061437363756343100054622876229104455920015737970195589611281743974716159827n, + 15297052669271818809266618537917704542138894789392864971735934945598379827363n, + 3240592020743113440365790241401792477958041186219702004441781545015089517479n, + 12939402739160799630996576545137073878726141216092557580496570401396343874133n, + 409838859583542828209958035048329036930557790097408442597169497017958367880n, + 4849352055719384218783567790347020036570406423962447054960403165168624679411n, + 10140481868950825952506002812679553069445144019364683137830173127833535162812n + ], + [ + 4169753203433043290708949478342499350225971996935208104044673971132510531963n, + 16198597482473356107060462797493408464959815651823410647378959304462364790023n, + 17831214733154720272879709021886998538183166751338990495293296921834561417050n, + 15996002991058741836925286413107190453488985346498046642177496721490001022163n, + 12128929995926069335150064696726717100038806543084523729572253928762150006902n, + 1527343541447603983494013575570118174442170324803005341835852970207664984106n, + 3864366504647042739453971869413719136218296278515580744588126485271535533745n, + 16390744785373846505589339019032992526980013169808686005019244934399314954484n, + 1189371614834081242339044631966546656514169937037419744085755746584992776112n, + 2490564128297998291899011962907372091056992851367564813460897014374926950158n, + 2632864541439030478006092584387470079076010621748787710053145987733131826177n, + 10997016251008884590554668186933912000821350188750456144761529496433221911191n, + 3662989402605074726032541754492900291134797145446056852785520146936851543244n, + 8371074929323402425468930212402691638137013802793901226648986870188378349904n + ], + [ + 17920452210119585965813298538098997746450528307627971419517604274103840658730n, + 8026613233416032931155189579997899527124867847165186585887532521124762242171n, + 12536429843060624487053183271774959575059067729019923970247266906616071589989n, + 18354222295715868456732739635697044486544782691576216892030243636076554800619n, + 11685593308965088606881675161829854229906033467171784802160080423031157953626n, + 18989841286028554273231159314070667749621876499337485447347239057791285949659n, + 13501500842653069022700095920888317808542113497043735775280862312089436522286n, + 16284422417487952110266526583186344607656490299306406671512902584454645262294n, + 14766820041476554952520399418749355774195705334216487399328042021346008099854n, + 11502099463338241997177160748027482497157165595330950109059924501733819344412n, + 21097733162892834226328090737666232905549661288100963226189626007151883115218n, + 3620141777236347892405766912767968106066233413607983266884777435591408542679n, + 4465316625088681267432956930147995293521314127558426510839100849580054135068n, + 15951396696291486543574989938200386934444721629903447106494532971713975302198n + ], + [ + 21420692366857794685888663542888709905237738746850069466081467001353666342965n, + 18343503004862189418033094393114515169584171574852422315350418500159030922263n, + 16439186901063853414808045554962977634854311593865750348846556486836509716488n, + 15200551988732901161699976788357951085426436066677048420098461828563894176150n, + 15140772590596966074591171894694986645347795546765667852915300358255369432294n, + 7383386342436648909729802223228006548918015494414484659175617833341830753463n, + 11436445698241305906567677067532324081573492145508451249291326304016376374466n, + 17397405229027848655285535331264669055168427730382628461971653096729174692794n, + 8888190346365862431131132945799487885295183925892581338098808269532220115208n, + 17373048493258440814074078107890527278667903472831731635546171123117085702144n, + 5394355195223713516914582580686192473163629785306318732489822694588538915692n, + 20814957740385525027786677509245187599649792998372465800981035312224123940783n, + 11167741662268878371451552983943563550747492198375641214347145843414778750740n, + 1505498991925224080559736158020686494389967648228591899080542175743913505975n + ], + [ + 8482807834840099486107357849095958421708288941420679407730439668240369271197n, + 1531932691795154082010331247272128035283420450879984505970978649526303671013n, + 10326017741190716069982105202291613302347042236075737537452333444753171570010n, + 2890563104449202149521252385842115871596603958515320789619311677428773944295n, + 5091938011714608365574587822261119297677309310900626302766934784886036216676n, + 18792973255357094538588824962661759194320829424712347846315600994520652609459n, + 5819484726278895533547092474664732368175576227992878488267454637556311136768n, + 14087278759052154922504944654932471722205352537489748711235261956958139094423n, + 6676755499836944199268283133886528716777488598645051771936175647684814488319n, + 7841200200792172536039490995922340397104113825218911994623753022413575084536n, + 9685171750835271647846188024034904289604883281120913275229696726161494108338n, + 13804722593058778047599265964893015518608567919815229008355552695901539135617n, + 133210224564739370698401112580329091433152068231765294734991529050629411851n, + 6253365067148837443745536970484493754157158998156041417978340186561909915882n + ], + [ + 6379626794062388565530320965673584683811331210463512233691169393056454417810n, + 8031021217500376290269114216814836477415391402921787637085737712949651005952n, + 15261959534341262089656432084966075417921918036565394975811438856221288978192n, + 12412675319987657724460960278402203548317535126494687402198671892291826563464n, + 11594484527416994136900781664743660516883697944736099448760569480817952218099n, + 5525949004768282420418522754788387377346850869414250693501350383184014395566n, + 13423677678153887686951876961584096043047689175638209759158420018856273430250n, + 688554022717474500337948897714325469989973507431329797109415877246281679190n, + 5767985312159947447966233995178318554138266544591427341210101818005833690773n, + 13782057493439290506357575012457041256926849070794382612465582256292384507590n, + 2009465632383454183075946487099156558696455704620200103263777377956167571948n, + 10265570962161934109202420603055144010322859077969741656080416572925588897009n, + 13063467510206676485181697613068184940643350938488359709447602318070297992418n, + 8824580488237789516855671915345935747743201560548603121129517348234754630838n + ], + [ + 18405974527641184935569939050199806786119735189423462681352004154947586987761n, + 11063658239692825381704700810385108349384459703800229121613802621026834850995n, + 20401912636755055463157317129314482008782101856095804626717136888886428939725n, + 10581036997862130058603889786198200057133900928078268413900852134308841628552n, + 15613862437263830065893280422700893831122147824370200118126675792748158214283n, + 11637898091445829201992956909089879348463617460955895182594618572267100421779n, + 676470684249461112964281503193041675013396554434239929609436328672155420783n, + 14862758280768060051884504554805186980208629806423451755599092137651959992706n, + 5623342967419780942118234966618900971275224510117264341831041912523393680166n, + 12293742687505619727765346377361630310803471543338450439759434637239250426631n, + 17107107724389526013252251054585363312805578717860151655674796329456502453436n, + 695490429984933474058785653390434166254929169748519672533632124843844650437n, + 7941603993861390710630117468483386570984050378175531457457840811645822985465n, + 19423663035279971057851778008344970269742436279020301703706239058210708410668n + ], + [ + 2844460676842285471844840162496739784337096369846435331204280645139535043731n, + 5914749649291606384462747717764850940787906745751128721215181537027495043325n, + 16403998562201315274383761287898474039980386929670468025842124690312505385798n, + 16679714051449621657256662882211432986285335589270632187081448168743144646010n, + 14178974435133537452754432783693851994073934244854394772136599698341675338748n, + 14490318493007296294817313593753116388501252549516359980240258503496717340194n, + 21219478166573360512901478467779541318881953172337799756939010190701884653821n, + 13653038712207413996195005796658436532811211815454701512198612316602372800026n, + 6606031466185873676955137126631780808678269492505994174970319773811652852017n, + 6998326006251734945119834407770954155028321677085545151592873301468610324946n, + 15717984973502827230694305820570642040862757036680118080574899662027439132392n, + 6129387663611887185666499162725019000386957238200546358846681873950634080364n, + 3229894653990057163047872622628926092609943988699832798310941005306795398260n, + 1577249093608064810495237122250056987651980088410811739655744853476971398741n + ], + [ + 8019490235657930229602545685025618469913840887375206662306714562639338096359n, + 6360514614281299182411878013125972206098844277909449064382248671632240409416n, + 18532505668867290379738328175003759079607042632729982459107375168365918757976n, + 8421518624327767035539667378193845962377888010421324291966623261409058898245n, + 21508024236353721936402111331734487542417525255582275314005272967405040862839n, + 18027689383014810715963711252886295463940938266456411644747464137365500951807n, + 14484077699638992615220759300878276902226958277985946809174186953862915299590n, + 4817080763362108602919187869554992685382108795016276838137423588157592666796n, + 10791657063117982548380087239678382293931165307389242284595466175088416832331n, + 17574587559710800088797913763598808892829608388483075257576879500511250128297n, + 20931338330271163055101602391315623325223860904427973201832184784566097488773n, + 1954574324880132355431783868495392698894997264747376529310223470792870288803n, + 2551137710278149502571112114560159376697849893483916552857521579500208583200n, + 3997814265160290573081282672183091638735659350920634229735367532175023689675n + ], + [ + 20759074837657564809501685143530456377562536015816086555379080667602653298306n, + 11573288866341175121647407708978273297857024597782918874282176717371576773130n, + 19475107603336226504587469711392819869087288902355805230614724291289122375846n, + 21884242265301052283286073107133504985083194336113478618838523331660374213570n, + 11844625750737259417493690805104254337758743574820507915512371579679338049474n, + 18479163117067129250021591308069049721232170743585134941796617403156042279597n, + 4434911559893931929914698652677389633068778061297646529129767359157675249407n, + 316682746098441691626372255125560321251096997722401729182940832349927288255n, + 19610390525670030492896894087745165507340241783776573708027658938288182681300n, + 5840208148535790468526125686220196099566194081164771919666034943299219873755n, + 3679027218793663842409677356801552901605408436635647286999251784339864591201n, + 9878321578558671609403512127325051261043472923444011356477587484000484178928n, + 16646455734597629493777237097088292344110223995728568379569260368267096014288n, + 14735311379463771264009437608444808852233202023120148855228542005281236140064n + ], + [ + 3066170574229466435407264700502616839626082070514501523679452764935485028736n, + 7951387307333182634684754650901435973768779794218900331714625086350726274942n, + 13578824606544430966133042087468301830727811282121948825028360301706303669231n, + 19848381031896652139349791682530465833719275685855743122849792015759588531339n, + 6922136549797750291447751953663854475218048098902194660515442295348938322083n, + 10287261443878564608994021014993200221021609196127927226041534661185500281120n, + 6329063805909277980282354325384845982783657973381777424581891744521604640994n, + 11017548748010510224711773916683171526878158646735796493859902304094594577338n, + 7338335804036221772945379382782674399589206056354184002757176151341198318122n, + 16538115574966264108203522400275571374556020887608210819563613080068710593180n, + 5138245976626127736555381649425906350640183768145541963359703291501245587848n, + 11347291457433539838423910567581114929056891897670787919546976342310334767900n, + 16731418617609356258989018213857655050257827940403117452476763890174877962606n, + 5300557287595854140445529914668848275536281916366261035684431572728600543772n + ], + [ + 6573154341426354993599623914164155921131813615298607946435982334364383320793n, + 16419308144058642981524756443290703631729426627385646905142158478345164404879n, + 942314767315789144256266064192022265579304275774793342260835421710673918285n, + 17945712678641984649495876620223190782305382105763957622870181201252059717682n, + 6497446328454795535775520142893202697197882656922991300092165933292014766725n, + 4597431274747983679157649737399090093759447324935531801532881928263496852124n, + 20581664438782214735167492264807215952133504025063870863776714994387749970180n, + 5854805250432620287068939301087113989827350315462338534819773170350910225622n, + 13548539273975522227017059057161374261181128673406746320122994151943985128196n, + 7414800418339434590171697383031637744601564309993253226498272110927128779715n, + 1052987139013233499761917411027037646861657729931697227519754049539833189269n, + 657108667626796780066815408290681939596246857020023912757838581820942772606n, + 19088282520683145597098955555305422198780142332183007920340899996970202127885n, + 12616611543293706969401642310383814806112402432261338062963427055972449363741n + ], + [ + 9271002136483424788269278316391606491360153732024211579417926107994995432826n, + 8228171988949250866347662896961764196608750080646539001443256474901139877051n, + 20240081759615964816136232877050251456333669788276947762731625798225823502998n, + 3685474186777860155223706676482968796090983045736466861690878558020083034916n, + 305741399293956298249448376598537769086716682101868856634885453070917344627n, + 14942830908704142867090451021371809832404069532430585621173997534136021340349n, + 11873341523902185373029537495825388400298468809112431373607438726587086076801n, + 16566421774425889929886838459987430622148040878072136298073788804726016806526n, + 18314173705630320437871113612645566255775444265992974192826331109357704470403n, + 8597072000455186494551694692524831407069966911367008568012412188890924300508n, + 12713907619301764178052509321657058919935892208409394514649600000706175319189n, + 14893305145776480356274920935320977108910444566603040558476174175562031483300n, + 11027938853766719633497710751595847377263279173227878474215846011660771149283n, + 6927793728403485743741891409676155921703126599118383623637742555953569891357n + ], + [ + 275116175553159498718561489405169511232715998055900506709208190227728439831n, + 7338708370982730261395030177227912514214944721567888714384503728042214055309n, + 2285508597732647746841213906783440647997136124356359059650028586535477309792n, + 15163443940499746648640851269666923560658903809778640616581862089179343108182n, + 37868753390676617287004841173348795594362354905038492583057282228528019603n, + 19475937072595290694509025801956972632863465524774747773770243946674956142538n, + 1818532521520079200500527816308109106767855745862413136331026404438772138114n, + 7893556755641665136576228990240239515272703124353568551151593029797349984766n, + 21843411659343488969197036446870567462789014279182131087406329675847260538394n, + 13883536936296384480685931731174096875043607202415233199362935327975006076376n, + 3061885619227488514362869971925298711535995206671454426027635264218303442708n, + 18477632669759047471715211461337808302603089797347923153039515976242018999984n, + 4953684980989921770137053964305439167945572062294709110871332076115076441738n, + 849590699713478394267684876803414882497887483062076673282369901261463387635n + ], + [ + 7481617454708320190331411214970150566519243590120906863698168124347483283307n, + 3790897889674729687102011235738708037383393765058266352188381434189575086080n, + 17582850308142585333519054672998882111865339708436809129995518706804527076353n, + 18961585057625546222763334757505522771740769338010572292783220912986926586854n, + 17761332237343741278668998123360108574589045018570742689473320560784505694171n, + 2985768806786881176362869973473950745997650698247163897069614623128281191971n, + 14099532828736062687388547070054719462342298981811592749594569670955512096417n, + 11038429458121896617356666499000022639824993159854464409767840206807807728043n, + 7092464867594165410092487979619486929166817679669939558999555261465867685619n, + 20690943609696626243672018055336898909740557628366317533030490341400911534771n, + 11468803355345327303851639215186997122074583511720489615730106184659306943551n, + 9723340381470060111632263437706139036358918795037011403763820908081655273682n, + 15929497108714526572140462634902391796285476840034863688822264979709196730555n, + 10556139316790113226399166507094772235069235781001645893008903131855134732783n + ], + [ + 9679690373149117563754317307037586538394929348733117229177073999196519450461n, + 13953490152873041611053779700802518995304489998104548903919774028525032867964n, + 8584860336778813488021026261425560177968889952950706471574873674510806966419n, + 8400619522468195192079024924375785176686244213372269992523849676384018875300n, + 16018239095599670975582212156736908990475077583136160880304021421989907078233n, + 13442762142079759258078337448325782252795445513077684243558458356586404542166n, + 8012524517439221218249889438165569497775551565363444399021079689755695756644n, + 18993442931337392722189844722480176040693468853419121807183123246184718322422n, + 3920077716342530896195446297162279477088824676672184510151991496745985467962n, + 5663885918690734602622426696143772526257235018784490039324179199552252272203n, + 11007942216549411481832816505096362871539130535791764225892613523847180067807n, + 12333277086717649179464584335417603775633093807601488202185840108448843332123n, + 18845646001611639216437777320622198530894193094859924604338859788769244491906n, + 4365664869724113934112630479809518948808449158812862195377335314227128146059n + ], + [ + 1895928299034844696630794694609519515092896092191683631304721647222032914779n, + 19026513891744713045426845531420132126578554294461150386909840193098440147673n, + 4073281111734161932072345995811001896063226222777392994725894652964051683943n, + 13362867147840304033834065229457670563442204439046527165143934160967798444725n, + 9724485076061228092177286932258189815958450833155679889060988975712535081230n, + 1627333086421877964064603957348348763696708139082607562629629725119997724989n, + 15641874381988682075545920458678901707167602315586561132909307694310257446023n, + 11034182059786563285109970430313289917032071817373248775707546493147901388113n, + 19299574745226772810381056007321573284793444116746272581694295128392282602507n, + 6482638271546132546782310681506292669989505915370438641175376336582811537739n, + 5515138970831679245126906315331906152285174207704247085730757090763031968272n, + 5476746571008230667726688443817396210804752373221945489797046634505665572661n, + 7666694240010574980777401583687953099995588711474009270339615112182231942529n, + 5345423812126487230177352826531606752132805611025916574123407915411930666385n + ], + [ + 7211419275788152379372992549185439317698375419836488104253705518694042119228n, + 9112140750806762434510825375931543886135367141484613422947675423683311130537n, + 12020406779776320543918475257645763209221278449775176154727249143619468329590n, + 6961266423823329910790066424248133365666435921221127260870444632539329606224n, + 3527954161191330198309290076708590175518992377857531220243324230315686986882n, + 4506493800007416260514839382433205292331764028735360433653631210611507932973n, + 5530043493028748853396066194331787195114268917530734310055878976603589658986n, + 6225101949608434111198442012357272827532649788667254718474232856896193900534n, + 18857681750145313162493356993928966938826030906289025101399379263672964054354n, + 869004496821135911657110194622810910776043851317139916414752924319830673140n, + 1563829187789877652048924285544523323087888587074484491222967490033068091506n, + 3746011388196035005128740753677692387874351474501361202463946309770129429478n, + 8923361680602360491637539340186330583808472610027697444204036893010926051377n, + 17386658730777389148551542774423634880430074554050371095211396948875032586750n + ], + [ + 18803497674827878184210135371703804206276128582022416604041787392310845729622n, + 6590008305704976915857671866558706505394630312395969823040635040879201337002n, + 2714759247406808259589803854440914533632699567907406761316959511568030744066n, + 16299600292583383998706243035294548578562168326056377699804434906128380481545n, + 18030052417377603682453955579175094175373404791176719861146533099419481910116n, + 8281176924556272137773300347187527516223668703826908452855802099328657344885n, + 11849913964821118293258226409033507680960291656604016015128854810099746642358n, + 2718653438901851962181612429288634518502998150085578586248082443515454453331n, + 17998120665039026798317726060462551095622279047136565816648549826384179735803n, + 5133986071087432716437635164720916024596119526725252628340805179596147643344n, + 10436725621240227608920674037516192343160590540839553356331196590007025190330n, + 15618861474705274368161439159831328775613537777134266634959100526889759124590n, + 2511040106219966488942941427805413210834998861588095124665874406004322450915n, + 9256734357641210393451356199893573129989430877284906007481196262323584132500n + ], + [ + 9325238625126515763679853550553375879158552597544709459784109512243397955590n, + 8484194759795978556088297437107686617328133596604796277228418191688537911573n, + 7354463117736585470843139230227589188304331389476818932256765377140053168035n, + 13482530129860761195447497269660263095272961608736579417124458190809007451755n, + 14565877561081097978808851096191380459292726072163754601747539666057949167693n, + 2135718143241813932226161801358235289781058013695871838383051572102928884567n, + 20522747851108608773003772892187458826390403588440155512773881116135635256410n, + 11218511591600821722003994140994121719832310771637604152054113941332818455369n, + 16404237709834224719800904205708261378663612035126521203425485585484994986837n, + 3167586669955731698085513002461997957955073343333183557668566807567186590619n, + 12910675356590890481798719900077391291951346627685199305549632303581651173802n, + 20462953503625657093808736208830478011818679863351201550868889073055617578896n, + 18947108562530644410102590841857357185115081182319111952079371871969663671988n, + 6652719222291337824561052377450295064566587460338214284424446330320206208978n + ], + [ + 7333723286812204168407439917521565157977670700382476881790986792115201279410n, + 21462572925415337738214437933606587540653694853107274549824898449394152530908n, + 6820993392268884858152757378169835647522978080101384568523885945756789014349n, + 16253055713127198337468919465234896268161918860396508551871391729457324125212n, + 10110377608880446364161064735161091842938826397512230713135002732708361876777n, + 6013899729219769410326935661934883558337463050053435907100782150692294649745n, + 18208889227209298598015138525374980382541030144328510393048300775270787949840n, + 15191444075449840811990314906356975059662539527217455842253932605838538105879n, + 19203188682890514423320800755662084436821947463936810212920115637567986869322n, + 3424855308164288636262956984024538145687254883958282264766019244372264927134n, + 19586353501601321585672146098476085745700368665390426128801697725086439710122n, + 15010004828387861046033155948517332272437733117418549079342100218646019702080n, + 13686339229559293872534012092085760944059315023471369613822812965287369238447n, + 3695584012986626869153168308549979767804807828687034680677188403817830418810n + ], + [ + 11102327427527201346056529148642207216130990405495165914761901542247835149412n, + 17544563341965869668707473190805417639220912289969746146554006791986582724590n, + 4470848226757772603246285686584200798638888970547659211297578619392420918858n, + 4999887962989142396481351641254451370620928952306237803174890583736074770292n, + 18696621645163318552472841991871104820660024833640321869898695219244792544787n, + 16940838088709411711968888146075539661653566927745755478421474505108166140656n, + 11530916114120676768574532193664705720045810431665651204245333670674998923676n, + 7355883923626920336916662475522243088902821161113628716197989160163721774248n, + 11855011297239142909723378707832446926509921514737098047687587969894126468497n, + 14942813403879667533705178220673159254886774089783887482228941707848831481300n, + 12982663140753853847528768000921561826340636419307931766400467366396846035169n, + 7171806600323437636744282845777660095738436086868856062406225133619265520575n, + 15982491779929281894294451486893882850583039973528579274058985191703359466543n, + 19910319651211685401050894240685395121165652955380089146603485967076493605680n + ], + [ + 5314337765479745092537090978913989310916802510812096192767666377841447850226n, + 19811002121850954821192061183148615163420706271800817927960207430256612524059n, + 18254735365473444026840717290492248863101576601864757410600437101587001057517n, + 3428844080448214358238191483671878854080864964895729401025193865570307658787n, + 17688699129722255312471132988267997472426043097741089176095207368928695347323n, + 4698778325800416923484519718058460264124242609977080857699400967590134848728n, + 11905991584861721837480962390330989450197421918781662074678555052926188909272n, + 11195321655863853696452219195252788379254952714823481930861848719672010792417n, + 7364573423043519994861038175593500896079924196888521130462378149111415036167n, + 8488161531239994007634631892382512438657593769374020273048837520623507271908n, + 10948897450624334536526533930990935852623955696383743452358741253735922067160n, + 7654175296077985337834288232610181411799310934515705881481549241949669590123n, + 2456818423512317060112219756429819064402183920202453945509918337536940292593n, + 10561627566351771351550703479997725668661012955063201536370060753602302262655n + ], + [ + 4310089243116651250383251477034324245457116277666484671624575402227833925755n, + 11882651094700172542567008359015417490389070633573140242127755563781024148099n, + 9304328383406369649010049197573360507944684656613297568584394172735340111263n, + 18874624159090765871635243875933482675871258293088886749847315202391523956097n, + 21295163659036117126535933666532228255134275601226122998452204301238438701469n, + 12010652807420347304532358791037860496459429689113682253200903987591679627067n, + 16035147304145989851106586435462674695447030608653337914734493255503105122271n, + 9396862051344040260236487045030117425080665841603826234795752404308634565281n, + 9623434193020540057685957851610556657916120473978726845338192370747426064401n, + 20738972702824723087864078264786214906718601061526079118500228332898388551221n, + 457108501000029082366810998923133233303603111079376685755578228260824733356n, + 13918719735797746251051948238671198059940858851588937008268023917020073366433n, + 19519317439483352367895890468095276150233498159453735432212409926941855183358n, + 8400170000010792082337905010575114377571921640630709589910201278654198179035n + ], + [ + 9476241965146735006848999585927664857836027675817848342111996150638876938940n, + 20383112265143113621158547584533108172173014612497300318772355462448750327634n, + 10370498046215116715134085566322498900073301617448752966999679321197451973184n, + 20733082136685384602293372077980283048183069753990343452404863587763569081917n, + 209896847902324756441033880218169809685412620378498856437573937154846479551n, + 19434208870058033389225349051527401299247475125763108527095891214558119617655n, + 4154375339831547300427516624109559852426973786711444825735879648391004291098n, + 2168897082728012692838287354581700563166925732559863316849698306675591131396n, + 3690054103601385333490512469861728231387681704127049683413276534001532261943n, + 3997073653940540957268729302105309759820513901669570962308110503858257659002n, + 1493108383089723041516694658460301260449183718295935886883417227290045091286n, + 1479721274324005701970059663387618978577823761358404739977258141309872068056n, + 20291086357406391640638647514048720424247838755446061571102712546958076851767n, + 6860718845648137601753080432837091439893783461195961430761483584544410630099n + ], + [ + 7929983584961755765377471515178883367433439212271736050025708429355823243624n, + 10728358412340769313351519567620170787387770135423141966436844748162218854008n, + 4169855297038740915695363102363044976292665711211255871324667594694964037773n, + 2424224908982307794171893487036131370038399449016750026546326391873466118335n, + 1265438250797513961458031163301351393237543067943565114202366151377865506872n, + 11342865295714982458109220575532930834959120923837779800176462280225501198217n, + 10415384677581396651184780193811022815145977389536746022901590915883889609878n, + 5311187015233522007413118391261106264838418369874755037462489089469638365756n, + 7499079368996193403750547553190134606728655877653629403923945654291953825315n, + 1743769713774086589463238504150542785039161133276706463569974209707667651575n, + 5792276842105452143354445764064878932177699791644537942211472215636738768211n, + 9443070058088199873709166495831389298947366881168483562080569357428781583046n, + 14451507664847323254023899990839043037382802537389529773382951366995420730648n, + 7633550475637360595097128986678209600092185294414596687526062925070686318486n + ] +] + +const SET_SIZE = 14 + +async function main() { + const array = VK_POINTS.flat() + array.forEach((v, idx) => { + const set = `set ${Math.floor(idx / SET_SIZE)}-${idx % SET_SIZE}: ` + // convert to 32 bytes, 64-char string + let bytes = v.toString(16) + if (bytes.length < 64) { + bytes = `${"0".repeat(64 - bytes.length)}${bytes}` + } + console.log(`// ${set}${v}`) + console.log(`hex"${bytes}"`) + }) +} + +main() + .then(() => process.exit(0)) + .catch((error) => { + console.error(error) + process.exit(1) + }) From a2bc9dc6eaa8e1e750349cd60d5edc652a4851fa Mon Sep 17 00:00:00 2001 From: Jimmy Chu <898091+jimmychu0807@users.noreply.github.com> Date: Wed, 16 Oct 2024 13:46:24 +0800 Subject: [PATCH 2/7] refactor(contracts): split SemaphoreVerifier verification key points into a separate library (#330) --- .../contracts/base/SemaphoreVerifier.sol | 521 +--------- .../base/SemaphoreVerifierKeyPts.sol | 920 ++++++++++++++++++ packages/contracts/scripts/utils.ts | 2 +- packages/contracts/tasks/deploy.ts | 44 +- 4 files changed, 951 insertions(+), 536 deletions(-) create mode 100644 packages/contracts/contracts/base/SemaphoreVerifierKeyPts.sol diff --git a/packages/contracts/contracts/base/SemaphoreVerifier.sol b/packages/contracts/contracts/base/SemaphoreVerifier.sol index 47c596e18..e1f7d87aa 100644 --- a/packages/contracts/contracts/base/SemaphoreVerifier.sol +++ b/packages/contracts/contracts/base/SemaphoreVerifier.sol @@ -4,6 +4,7 @@ pragma solidity 0.8.23; import {MAX_DEPTH} from "./Constants.sol"; +import {SemaphoreVerifierKeyPts} from "./SemaphoreVerifierKeyPts.sol"; contract SemaphoreVerifier { // Scalar field size @@ -23,524 +24,6 @@ contract SemaphoreVerifier { uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531; uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930; - // Verification Key points. - // These values are taken from the verification key json file generated with snarkjs. - // It allows to use the same verifier to verify proofs for all the tree depths supported by Semaphore. - uint256[14][MAX_DEPTH] VK_POINTS = [ - [ - 18358547564487905095688479908858987846616998213156437518686067355563592118237, - 15662648751553932653781975807624464121405704024803073886925976686616010387354, - 1545474538105908330267074270190095622354834966212647889547653097055078098224, - 12579159544968648693964563165973893448704730885005100826654630574108054705556, - 20602000776800724705104231353971008348678632605343811527051139864158800058742, - 14100125742256756091734688090621667470723401759459592787502475801413744195297, - 5090583730862410755830979584235210054631184460526892606022709842010236308675, - 4935746665478263580470501879719907639988899436008466660042851826337922233613, - 3603230519262933722323237889869128969156000998401789817930265262617368730462, - 11467103179184542033012124498958167915605281189440445972230559164572312725202, - 20354120984011889701917116306955017859695028034788955847437411305304360829487, - 16952752114474306858880411587178692742589121096026762314329638709126787301483, - 18678961143994743003180318723146092299060216598083112257165966782010215931454, - 5866474510945308764957529269555101130643879788634167019342763906927794156659 - ], - [ - 15357842752194390032830879177519514606613356943505010426726499926726016517582, - 13720528004476084359207196371475762368424714925503835663451917882430924467554, - 2196656647584375999320189230399052835502476576494068012902156164580595749760, - 14571933744484927053512012311263939678215066456565339237074260778179419354637, - 15947740979005208428427315036716544174249364023308166418156254508145278950889, - 13324328715790405384125386378518079709609297588403011236512446709595322048979, - 18308129219862888344083447566760955160779532192553849267018614487088634836563, - 6372459765603725576424215986727450779217530423615747931788702584026023386877, - 7093003777162632186231777482293120808844116758585672698445917711442486215336, - 15357576732947512625016950088762579987226580659874157718142226214458009204755, - 13910597919064508360434043231000553781072135406219661606166769706745413894201, - 9475901949906914147982792916474633312982452326368523201024844634638043554494, - 5845138751782936895477553974859998077996624699108246120208069774017428318479, - 3326095377373657419775174404381825686428913179751401123841216020519623741775 - ], - [ - 1096090542237876305763822439899873238394525438826581012748557492836778110917, - 18282758355470198230938465615400409713402004038201360061031317503584711879237, - 7973969975759518869552865162652900479072033124669141796195141770899882758383, - 2920496587818605789230962034477809982324000981266163502059117507002917895757, - 8027751638293718359199675565570157214590620386957299982399037269650333307021, - 19002113380575481191643777830101182489616906893723699470070419138254788369727, - 13631613009301650992828160964785768170789209232530437462516754147352285424672, - 10537705110128905270703523362934130036880036854847578111990360444182641655212, - 15557574650831364767567015658284909068256128766563081293491003990055297878366, - 4049724481871929240016595616316679773340938699307608349394228543495262553744, - 9967066649437927083270210032320564587652082866881800887188539489167094397640, - 12463426560961961450861478284334163210886016242490079948590082000657390077088, - 21318595425700216078579789307308348011199610228556265752904860757510620370622, - 7430155508771673067823897542900534022148544854722115377830369283854627952599 - ], - [ - 14033304028688398404089545751254979569049699915340551984412184456786819712695, - 17529478610649635357901422564682249462969460088983393810272144503916885638629, - 968190632906420692452807865081290940343138767641492735661467959437198373032, - 7242759178038747404494096998044224993169513816067824413031492987300456908934, - 12017353327534072098763415761011052990865822334777878720246921848197559257711, - 4746680322053291743787031203095442352574780441873349801788355375401126089939, - 6764632552006100580460767171096753901452726344615530017064702126145414585640, - 11581587935666673652762153205827599529022773836189155792609728856814288572033, - 3123694825428833189943974730387937552931713004458396242443840668462184834558, - 3432192610292569155696646287493678963086402014898209278361624573082188247990, - 12349833666000936285363634772178969342930188247085371717039135170012686159900, - 5587426338437935681688079936152042996259869611071713486439341129143155921959, - 12022589354168680516901928073724404259700970836413687340697868887207353139344, - 2351613311284811919248989036726852289804810348516261915606564943623124473717 - ], - [ - 15740655435463241944594855735935231648684671883923953096410588018036769516770, - 12964751171177929169670182425240761498461607040020835118601467328036987558858, - 21474571159868965455306627669334290549452576803823591301731326342326814568896, - 6954370193053655486251406740905618458518953022289151868757271522548301919472, - 3115002343037487520580459802807906562630507097436525958861415456096559884443, - 11775142132959919266954507317832500578453517368862270948538792702813845219681, - 5975456097652384580746132945351678665917860606511206167023154005883554813508, - 10958037207675554032315788914627312943186758288936582678633536154169678007202, - 16345185674805541466042568997276776714209785989761944600635051035243995431568, - 3326264593228494909568322793066180033820330146744162800569972963329142251537, - 20721047231464194965879320004420846916587593568519526251056516572985788552732, - 2552439778142862614309289213707433798337671284267429041900242151271508522517, - 2849386127826497959217687777221941766595094589431869464564268817450132435018, - 12188539304210779665491473755999603070354632830707125660270270405780470402800 - ], - [ - 16239592155161765109648123193105804251252701943901733499502441663333912783245, - 18702593988046837524790351483331632258278160532977261915119611324471253407466, - 13746033878407070858115621843430829498309218839316343379025665907999784574154, - 19358066347678636498093783612000296194480758342913325289131948678991962529441, - 6024976123298004874848602709755399197808739071863728225378332097920450236516, - 11108084608972457539770160222798307153256767409158349747526974841008717682367, - 3009127146923662343754766534488769100730310563110562565512507605403185571089, - 10560679284132950437595738585637379866590755950272794729013445350206405316661, - 16015321530803994569819047219560485624444041236327101681073970215458831987478, - 18489840631710745699731219026737904723160484479846032199737023956049067434815, - 609265187318362115240245160721406765003010398230819869810290394123140807290, - 2656965952206569220410287839949134856874352189248192147930831679380007159249, - 13957423432693450118120092425077530751840166358932317773385901323790404449641, - 7610225795517710715985874151201119876406845575780133396869144717381641586640 - ], - [ - 6482921272760726478838066628157548923897782117283646773208763176771446379138, - 4562585331778730670899179927104513856322577370213643119870201750008533040214, - 9299549824594530154451155704400285409056448609359755927574262701418672785771, - 16654459784024455427280229763380300423080811024668332509526284511491790880990, - 18178936861568428015361893654874798233785855995042899944660014774323534883903, - 534506139369949013962728832141783820104682340925384016906020027968881380951, - 13888044772855561714276444972404100722751042044045312252045340354941233320135, - 13061437363756343100054622876229104455920015737970195589611281743974716159827, - 15297052669271818809266618537917704542138894789392864971735934945598379827363, - 3240592020743113440365790241401792477958041186219702004441781545015089517479, - 12939402739160799630996576545137073878726141216092557580496570401396343874133, - 409838859583542828209958035048329036930557790097408442597169497017958367880, - 4849352055719384218783567790347020036570406423962447054960403165168624679411, - 10140481868950825952506002812679553069445144019364683137830173127833535162812 - ], - [ - 4169753203433043290708949478342499350225971996935208104044673971132510531963, - 16198597482473356107060462797493408464959815651823410647378959304462364790023, - 17831214733154720272879709021886998538183166751338990495293296921834561417050, - 15996002991058741836925286413107190453488985346498046642177496721490001022163, - 12128929995926069335150064696726717100038806543084523729572253928762150006902, - 1527343541447603983494013575570118174442170324803005341835852970207664984106, - 3864366504647042739453971869413719136218296278515580744588126485271535533745, - 16390744785373846505589339019032992526980013169808686005019244934399314954484, - 1189371614834081242339044631966546656514169937037419744085755746584992776112, - 2490564128297998291899011962907372091056992851367564813460897014374926950158, - 2632864541439030478006092584387470079076010621748787710053145987733131826177, - 10997016251008884590554668186933912000821350188750456144761529496433221911191, - 3662989402605074726032541754492900291134797145446056852785520146936851543244, - 8371074929323402425468930212402691638137013802793901226648986870188378349904 - ], - [ - 17920452210119585965813298538098997746450528307627971419517604274103840658730, - 8026613233416032931155189579997899527124867847165186585887532521124762242171, - 12536429843060624487053183271774959575059067729019923970247266906616071589989, - 18354222295715868456732739635697044486544782691576216892030243636076554800619, - 11685593308965088606881675161829854229906033467171784802160080423031157953626, - 18989841286028554273231159314070667749621876499337485447347239057791285949659, - 13501500842653069022700095920888317808542113497043735775280862312089436522286, - 16284422417487952110266526583186344607656490299306406671512902584454645262294, - 14766820041476554952520399418749355774195705334216487399328042021346008099854, - 11502099463338241997177160748027482497157165595330950109059924501733819344412, - 21097733162892834226328090737666232905549661288100963226189626007151883115218, - 3620141777236347892405766912767968106066233413607983266884777435591408542679, - 4465316625088681267432956930147995293521314127558426510839100849580054135068, - 15951396696291486543574989938200386934444721629903447106494532971713975302198 - ], - [ - 21420692366857794685888663542888709905237738746850069466081467001353666342965, - 18343503004862189418033094393114515169584171574852422315350418500159030922263, - 16439186901063853414808045554962977634854311593865750348846556486836509716488, - 15200551988732901161699976788357951085426436066677048420098461828563894176150, - 15140772590596966074591171894694986645347795546765667852915300358255369432294, - 7383386342436648909729802223228006548918015494414484659175617833341830753463, - 11436445698241305906567677067532324081573492145508451249291326304016376374466, - 17397405229027848655285535331264669055168427730382628461971653096729174692794, - 8888190346365862431131132945799487885295183925892581338098808269532220115208, - 17373048493258440814074078107890527278667903472831731635546171123117085702144, - 5394355195223713516914582580686192473163629785306318732489822694588538915692, - 20814957740385525027786677509245187599649792998372465800981035312224123940783, - 11167741662268878371451552983943563550747492198375641214347145843414778750740, - 1505498991925224080559736158020686494389967648228591899080542175743913505975 - ], - [ - 8482807834840099486107357849095958421708288941420679407730439668240369271197, - 1531932691795154082010331247272128035283420450879984505970978649526303671013, - 10326017741190716069982105202291613302347042236075737537452333444753171570010, - 2890563104449202149521252385842115871596603958515320789619311677428773944295, - 5091938011714608365574587822261119297677309310900626302766934784886036216676, - 18792973255357094538588824962661759194320829424712347846315600994520652609459, - 5819484726278895533547092474664732368175576227992878488267454637556311136768, - 14087278759052154922504944654932471722205352537489748711235261956958139094423, - 6676755499836944199268283133886528716777488598645051771936175647684814488319, - 7841200200792172536039490995922340397104113825218911994623753022413575084536, - 9685171750835271647846188024034904289604883281120913275229696726161494108338, - 13804722593058778047599265964893015518608567919815229008355552695901539135617, - 133210224564739370698401112580329091433152068231765294734991529050629411851, - 6253365067148837443745536970484493754157158998156041417978340186561909915882 - ], - [ - 6379626794062388565530320965673584683811331210463512233691169393056454417810, - 8031021217500376290269114216814836477415391402921787637085737712949651005952, - 15261959534341262089656432084966075417921918036565394975811438856221288978192, - 12412675319987657724460960278402203548317535126494687402198671892291826563464, - 11594484527416994136900781664743660516883697944736099448760569480817952218099, - 5525949004768282420418522754788387377346850869414250693501350383184014395566, - 13423677678153887686951876961584096043047689175638209759158420018856273430250, - 688554022717474500337948897714325469989973507431329797109415877246281679190, - 5767985312159947447966233995178318554138266544591427341210101818005833690773, - 13782057493439290506357575012457041256926849070794382612465582256292384507590, - 2009465632383454183075946487099156558696455704620200103263777377956167571948, - 10265570962161934109202420603055144010322859077969741656080416572925588897009, - 13063467510206676485181697613068184940643350938488359709447602318070297992418, - 8824580488237789516855671915345935747743201560548603121129517348234754630838 - ], - [ - 18405974527641184935569939050199806786119735189423462681352004154947586987761, - 11063658239692825381704700810385108349384459703800229121613802621026834850995, - 20401912636755055463157317129314482008782101856095804626717136888886428939725, - 10581036997862130058603889786198200057133900928078268413900852134308841628552, - 15613862437263830065893280422700893831122147824370200118126675792748158214283, - 11637898091445829201992956909089879348463617460955895182594618572267100421779, - 676470684249461112964281503193041675013396554434239929609436328672155420783, - 14862758280768060051884504554805186980208629806423451755599092137651959992706, - 5623342967419780942118234966618900971275224510117264341831041912523393680166, - 12293742687505619727765346377361630310803471543338450439759434637239250426631, - 17107107724389526013252251054585363312805578717860151655674796329456502453436, - 695490429984933474058785653390434166254929169748519672533632124843844650437, - 7941603993861390710630117468483386570984050378175531457457840811645822985465, - 19423663035279971057851778008344970269742436279020301703706239058210708410668 - ], - [ - 2844460676842285471844840162496739784337096369846435331204280645139535043731, - 5914749649291606384462747717764850940787906745751128721215181537027495043325, - 16403998562201315274383761287898474039980386929670468025842124690312505385798, - 16679714051449621657256662882211432986285335589270632187081448168743144646010, - 14178974435133537452754432783693851994073934244854394772136599698341675338748, - 14490318493007296294817313593753116388501252549516359980240258503496717340194, - 21219478166573360512901478467779541318881953172337799756939010190701884653821, - 13653038712207413996195005796658436532811211815454701512198612316602372800026, - 6606031466185873676955137126631780808678269492505994174970319773811652852017, - 6998326006251734945119834407770954155028321677085545151592873301468610324946, - 15717984973502827230694305820570642040862757036680118080574899662027439132392, - 6129387663611887185666499162725019000386957238200546358846681873950634080364, - 3229894653990057163047872622628926092609943988699832798310941005306795398260, - 1577249093608064810495237122250056987651980088410811739655744853476971398741 - ], - [ - 8019490235657930229602545685025618469913840887375206662306714562639338096359, - 6360514614281299182411878013125972206098844277909449064382248671632240409416, - 18532505668867290379738328175003759079607042632729982459107375168365918757976, - 8421518624327767035539667378193845962377888010421324291966623261409058898245, - 21508024236353721936402111331734487542417525255582275314005272967405040862839, - 18027689383014810715963711252886295463940938266456411644747464137365500951807, - 14484077699638992615220759300878276902226958277985946809174186953862915299590, - 4817080763362108602919187869554992685382108795016276838137423588157592666796, - 10791657063117982548380087239678382293931165307389242284595466175088416832331, - 17574587559710800088797913763598808892829608388483075257576879500511250128297, - 20931338330271163055101602391315623325223860904427973201832184784566097488773, - 1954574324880132355431783868495392698894997264747376529310223470792870288803, - 2551137710278149502571112114560159376697849893483916552857521579500208583200, - 3997814265160290573081282672183091638735659350920634229735367532175023689675 - ], - [ - 20759074837657564809501685143530456377562536015816086555379080667602653298306, - 11573288866341175121647407708978273297857024597782918874282176717371576773130, - 19475107603336226504587469711392819869087288902355805230614724291289122375846, - 21884242265301052283286073107133504985083194336113478618838523331660374213570, - 11844625750737259417493690805104254337758743574820507915512371579679338049474, - 18479163117067129250021591308069049721232170743585134941796617403156042279597, - 4434911559893931929914698652677389633068778061297646529129767359157675249407, - 316682746098441691626372255125560321251096997722401729182940832349927288255, - 19610390525670030492896894087745165507340241783776573708027658938288182681300, - 5840208148535790468526125686220196099566194081164771919666034943299219873755, - 3679027218793663842409677356801552901605408436635647286999251784339864591201, - 9878321578558671609403512127325051261043472923444011356477587484000484178928, - 16646455734597629493777237097088292344110223995728568379569260368267096014288, - 14735311379463771264009437608444808852233202023120148855228542005281236140064 - ], - [ - 3066170574229466435407264700502616839626082070514501523679452764935485028736, - 7951387307333182634684754650901435973768779794218900331714625086350726274942, - 13578824606544430966133042087468301830727811282121948825028360301706303669231, - 19848381031896652139349791682530465833719275685855743122849792015759588531339, - 6922136549797750291447751953663854475218048098902194660515442295348938322083, - 10287261443878564608994021014993200221021609196127927226041534661185500281120, - 6329063805909277980282354325384845982783657973381777424581891744521604640994, - 11017548748010510224711773916683171526878158646735796493859902304094594577338, - 7338335804036221772945379382782674399589206056354184002757176151341198318122, - 16538115574966264108203522400275571374556020887608210819563613080068710593180, - 5138245976626127736555381649425906350640183768145541963359703291501245587848, - 11347291457433539838423910567581114929056891897670787919546976342310334767900, - 16731418617609356258989018213857655050257827940403117452476763890174877962606, - 5300557287595854140445529914668848275536281916366261035684431572728600543772 - ], - [ - 6573154341426354993599623914164155921131813615298607946435982334364383320793, - 16419308144058642981524756443290703631729426627385646905142158478345164404879, - 942314767315789144256266064192022265579304275774793342260835421710673918285, - 17945712678641984649495876620223190782305382105763957622870181201252059717682, - 6497446328454795535775520142893202697197882656922991300092165933292014766725, - 4597431274747983679157649737399090093759447324935531801532881928263496852124, - 20581664438782214735167492264807215952133504025063870863776714994387749970180, - 5854805250432620287068939301087113989827350315462338534819773170350910225622, - 13548539273975522227017059057161374261181128673406746320122994151943985128196, - 7414800418339434590171697383031637744601564309993253226498272110927128779715, - 1052987139013233499761917411027037646861657729931697227519754049539833189269, - 657108667626796780066815408290681939596246857020023912757838581820942772606, - 19088282520683145597098955555305422198780142332183007920340899996970202127885, - 12616611543293706969401642310383814806112402432261338062963427055972449363741 - ], - [ - 9271002136483424788269278316391606491360153732024211579417926107994995432826, - 8228171988949250866347662896961764196608750080646539001443256474901139877051, - 20240081759615964816136232877050251456333669788276947762731625798225823502998, - 3685474186777860155223706676482968796090983045736466861690878558020083034916, - 305741399293956298249448376598537769086716682101868856634885453070917344627, - 14942830908704142867090451021371809832404069532430585621173997534136021340349, - 11873341523902185373029537495825388400298468809112431373607438726587086076801, - 16566421774425889929886838459987430622148040878072136298073788804726016806526, - 18314173705630320437871113612645566255775444265992974192826331109357704470403, - 8597072000455186494551694692524831407069966911367008568012412188890924300508, - 12713907619301764178052509321657058919935892208409394514649600000706175319189, - 14893305145776480356274920935320977108910444566603040558476174175562031483300, - 11027938853766719633497710751595847377263279173227878474215846011660771149283, - 6927793728403485743741891409676155921703126599118383623637742555953569891357 - ], - [ - 275116175553159498718561489405169511232715998055900506709208190227728439831, - 7338708370982730261395030177227912514214944721567888714384503728042214055309, - 2285508597732647746841213906783440647997136124356359059650028586535477309792, - 15163443940499746648640851269666923560658903809778640616581862089179343108182, - 37868753390676617287004841173348795594362354905038492583057282228528019603, - 19475937072595290694509025801956972632863465524774747773770243946674956142538, - 1818532521520079200500527816308109106767855745862413136331026404438772138114, - 7893556755641665136576228990240239515272703124353568551151593029797349984766, - 21843411659343488969197036446870567462789014279182131087406329675847260538394, - 13883536936296384480685931731174096875043607202415233199362935327975006076376, - 3061885619227488514362869971925298711535995206671454426027635264218303442708, - 18477632669759047471715211461337808302603089797347923153039515976242018999984, - 4953684980989921770137053964305439167945572062294709110871332076115076441738, - 849590699713478394267684876803414882497887483062076673282369901261463387635 - ], - [ - 7481617454708320190331411214970150566519243590120906863698168124347483283307, - 3790897889674729687102011235738708037383393765058266352188381434189575086080, - 17582850308142585333519054672998882111865339708436809129995518706804527076353, - 18961585057625546222763334757505522771740769338010572292783220912986926586854, - 17761332237343741278668998123360108574589045018570742689473320560784505694171, - 2985768806786881176362869973473950745997650698247163897069614623128281191971, - 14099532828736062687388547070054719462342298981811592749594569670955512096417, - 11038429458121896617356666499000022639824993159854464409767840206807807728043, - 7092464867594165410092487979619486929166817679669939558999555261465867685619, - 20690943609696626243672018055336898909740557628366317533030490341400911534771, - 11468803355345327303851639215186997122074583511720489615730106184659306943551, - 9723340381470060111632263437706139036358918795037011403763820908081655273682, - 15929497108714526572140462634902391796285476840034863688822264979709196730555, - 10556139316790113226399166507094772235069235781001645893008903131855134732783 - ], - [ - 9679690373149117563754317307037586538394929348733117229177073999196519450461, - 13953490152873041611053779700802518995304489998104548903919774028525032867964, - 8584860336778813488021026261425560177968889952950706471574873674510806966419, - 8400619522468195192079024924375785176686244213372269992523849676384018875300, - 16018239095599670975582212156736908990475077583136160880304021421989907078233, - 13442762142079759258078337448325782252795445513077684243558458356586404542166, - 8012524517439221218249889438165569497775551565363444399021079689755695756644, - 18993442931337392722189844722480176040693468853419121807183123246184718322422, - 3920077716342530896195446297162279477088824676672184510151991496745985467962, - 5663885918690734602622426696143772526257235018784490039324179199552252272203, - 11007942216549411481832816505096362871539130535791764225892613523847180067807, - 12333277086717649179464584335417603775633093807601488202185840108448843332123, - 18845646001611639216437777320622198530894193094859924604338859788769244491906, - 4365664869724113934112630479809518948808449158812862195377335314227128146059 - ], - [ - 1895928299034844696630794694609519515092896092191683631304721647222032914779, - 19026513891744713045426845531420132126578554294461150386909840193098440147673, - 4073281111734161932072345995811001896063226222777392994725894652964051683943, - 13362867147840304033834065229457670563442204439046527165143934160967798444725, - 9724485076061228092177286932258189815958450833155679889060988975712535081230, - 1627333086421877964064603957348348763696708139082607562629629725119997724989, - 15641874381988682075545920458678901707167602315586561132909307694310257446023, - 11034182059786563285109970430313289917032071817373248775707546493147901388113, - 19299574745226772810381056007321573284793444116746272581694295128392282602507, - 6482638271546132546782310681506292669989505915370438641175376336582811537739, - 5515138970831679245126906315331906152285174207704247085730757090763031968272, - 5476746571008230667726688443817396210804752373221945489797046634505665572661, - 7666694240010574980777401583687953099995588711474009270339615112182231942529, - 5345423812126487230177352826531606752132805611025916574123407915411930666385 - ], - [ - 7211419275788152379372992549185439317698375419836488104253705518694042119228, - 9112140750806762434510825375931543886135367141484613422947675423683311130537, - 12020406779776320543918475257645763209221278449775176154727249143619468329590, - 6961266423823329910790066424248133365666435921221127260870444632539329606224, - 3527954161191330198309290076708590175518992377857531220243324230315686986882, - 4506493800007416260514839382433205292331764028735360433653631210611507932973, - 5530043493028748853396066194331787195114268917530734310055878976603589658986, - 6225101949608434111198442012357272827532649788667254718474232856896193900534, - 18857681750145313162493356993928966938826030906289025101399379263672964054354, - 869004496821135911657110194622810910776043851317139916414752924319830673140, - 1563829187789877652048924285544523323087888587074484491222967490033068091506, - 3746011388196035005128740753677692387874351474501361202463946309770129429478, - 8923361680602360491637539340186330583808472610027697444204036893010926051377, - 17386658730777389148551542774423634880430074554050371095211396948875032586750 - ], - [ - 18803497674827878184210135371703804206276128582022416604041787392310845729622, - 6590008305704976915857671866558706505394630312395969823040635040879201337002, - 2714759247406808259589803854440914533632699567907406761316959511568030744066, - 16299600292583383998706243035294548578562168326056377699804434906128380481545, - 18030052417377603682453955579175094175373404791176719861146533099419481910116, - 8281176924556272137773300347187527516223668703826908452855802099328657344885, - 11849913964821118293258226409033507680960291656604016015128854810099746642358, - 2718653438901851962181612429288634518502998150085578586248082443515454453331, - 17998120665039026798317726060462551095622279047136565816648549826384179735803, - 5133986071087432716437635164720916024596119526725252628340805179596147643344, - 10436725621240227608920674037516192343160590540839553356331196590007025190330, - 15618861474705274368161439159831328775613537777134266634959100526889759124590, - 2511040106219966488942941427805413210834998861588095124665874406004322450915, - 9256734357641210393451356199893573129989430877284906007481196262323584132500 - ], - [ - 9325238625126515763679853550553375879158552597544709459784109512243397955590, - 8484194759795978556088297437107686617328133596604796277228418191688537911573, - 7354463117736585470843139230227589188304331389476818932256765377140053168035, - 13482530129860761195447497269660263095272961608736579417124458190809007451755, - 14565877561081097978808851096191380459292726072163754601747539666057949167693, - 2135718143241813932226161801358235289781058013695871838383051572102928884567, - 20522747851108608773003772892187458826390403588440155512773881116135635256410, - 11218511591600821722003994140994121719832310771637604152054113941332818455369, - 16404237709834224719800904205708261378663612035126521203425485585484994986837, - 3167586669955731698085513002461997957955073343333183557668566807567186590619, - 12910675356590890481798719900077391291951346627685199305549632303581651173802, - 20462953503625657093808736208830478011818679863351201550868889073055617578896, - 18947108562530644410102590841857357185115081182319111952079371871969663671988, - 6652719222291337824561052377450295064566587460338214284424446330320206208978 - ], - [ - 7333723286812204168407439917521565157977670700382476881790986792115201279410, - 21462572925415337738214437933606587540653694853107274549824898449394152530908, - 6820993392268884858152757378169835647522978080101384568523885945756789014349, - 16253055713127198337468919465234896268161918860396508551871391729457324125212, - 10110377608880446364161064735161091842938826397512230713135002732708361876777, - 6013899729219769410326935661934883558337463050053435907100782150692294649745, - 18208889227209298598015138525374980382541030144328510393048300775270787949840, - 15191444075449840811990314906356975059662539527217455842253932605838538105879, - 19203188682890514423320800755662084436821947463936810212920115637567986869322, - 3424855308164288636262956984024538145687254883958282264766019244372264927134, - 19586353501601321585672146098476085745700368665390426128801697725086439710122, - 15010004828387861046033155948517332272437733117418549079342100218646019702080, - 13686339229559293872534012092085760944059315023471369613822812965287369238447, - 3695584012986626869153168308549979767804807828687034680677188403817830418810 - ], - [ - 11102327427527201346056529148642207216130990405495165914761901542247835149412, - 17544563341965869668707473190805417639220912289969746146554006791986582724590, - 4470848226757772603246285686584200798638888970547659211297578619392420918858, - 4999887962989142396481351641254451370620928952306237803174890583736074770292, - 18696621645163318552472841991871104820660024833640321869898695219244792544787, - 16940838088709411711968888146075539661653566927745755478421474505108166140656, - 11530916114120676768574532193664705720045810431665651204245333670674998923676, - 7355883923626920336916662475522243088902821161113628716197989160163721774248, - 11855011297239142909723378707832446926509921514737098047687587969894126468497, - 14942813403879667533705178220673159254886774089783887482228941707848831481300, - 12982663140753853847528768000921561826340636419307931766400467366396846035169, - 7171806600323437636744282845777660095738436086868856062406225133619265520575, - 15982491779929281894294451486893882850583039973528579274058985191703359466543, - 19910319651211685401050894240685395121165652955380089146603485967076493605680 - ], - [ - 5314337765479745092537090978913989310916802510812096192767666377841447850226, - 19811002121850954821192061183148615163420706271800817927960207430256612524059, - 18254735365473444026840717290492248863101576601864757410600437101587001057517, - 3428844080448214358238191483671878854080864964895729401025193865570307658787, - 17688699129722255312471132988267997472426043097741089176095207368928695347323, - 4698778325800416923484519718058460264124242609977080857699400967590134848728, - 11905991584861721837480962390330989450197421918781662074678555052926188909272, - 11195321655863853696452219195252788379254952714823481930861848719672010792417, - 7364573423043519994861038175593500896079924196888521130462378149111415036167, - 8488161531239994007634631892382512438657593769374020273048837520623507271908, - 10948897450624334536526533930990935852623955696383743452358741253735922067160, - 7654175296077985337834288232610181411799310934515705881481549241949669590123, - 2456818423512317060112219756429819064402183920202453945509918337536940292593, - 10561627566351771351550703479997725668661012955063201536370060753602302262655 - ], - [ - 4310089243116651250383251477034324245457116277666484671624575402227833925755, - 11882651094700172542567008359015417490389070633573140242127755563781024148099, - 9304328383406369649010049197573360507944684656613297568584394172735340111263, - 18874624159090765871635243875933482675871258293088886749847315202391523956097, - 21295163659036117126535933666532228255134275601226122998452204301238438701469, - 12010652807420347304532358791037860496459429689113682253200903987591679627067, - 16035147304145989851106586435462674695447030608653337914734493255503105122271, - 9396862051344040260236487045030117425080665841603826234795752404308634565281, - 9623434193020540057685957851610556657916120473978726845338192370747426064401, - 20738972702824723087864078264786214906718601061526079118500228332898388551221, - 457108501000029082366810998923133233303603111079376685755578228260824733356, - 13918719735797746251051948238671198059940858851588937008268023917020073366433, - 19519317439483352367895890468095276150233498159453735432212409926941855183358, - 8400170000010792082337905010575114377571921640630709589910201278654198179035 - ], - [ - 9476241965146735006848999585927664857836027675817848342111996150638876938940, - 20383112265143113621158547584533108172173014612497300318772355462448750327634, - 10370498046215116715134085566322498900073301617448752966999679321197451973184, - 20733082136685384602293372077980283048183069753990343452404863587763569081917, - 209896847902324756441033880218169809685412620378498856437573937154846479551, - 19434208870058033389225349051527401299247475125763108527095891214558119617655, - 4154375339831547300427516624109559852426973786711444825735879648391004291098, - 2168897082728012692838287354581700563166925732559863316849698306675591131396, - 3690054103601385333490512469861728231387681704127049683413276534001532261943, - 3997073653940540957268729302105309759820513901669570962308110503858257659002, - 1493108383089723041516694658460301260449183718295935886883417227290045091286, - 1479721274324005701970059663387618978577823761358404739977258141309872068056, - 20291086357406391640638647514048720424247838755446061571102712546958076851767, - 6860718845648137601753080432837091439893783461195961430761483584544410630099 - ], - [ - 7929983584961755765377471515178883367433439212271736050025708429355823243624, - 10728358412340769313351519567620170787387770135423141966436844748162218854008, - 4169855297038740915695363102363044976292665711211255871324667594694964037773, - 2424224908982307794171893487036131370038399449016750026546326391873466118335, - 1265438250797513961458031163301351393237543067943565114202366151377865506872, - 11342865295714982458109220575532930834959120923837779800176462280225501198217, - 10415384677581396651184780193811022815145977389536746022901590915883889609878, - 5311187015233522007413118391261106264838418369874755037462489089469638365756, - 7499079368996193403750547553190134606728655877653629403923945654291953825315, - 1743769713774086589463238504150542785039161133276706463569974209707667651575, - 5792276842105452143354445764064878932177699791644537942211472215636738768211, - 9443070058088199873709166495831389298947366881168483562080569357428781583046, - 14451507664847323254023899990839043037382802537389529773382951366995420730648, - 7633550475637360595097128986678209600092185294414596687526062925070686318486 - ] - ]; - // Memory data uint16 constant pVk = 0; uint16 constant pPairing = 128; @@ -554,7 +37,7 @@ contract SemaphoreVerifier { uint[4] calldata _pubSignals, uint merkleTreeDepth ) external view returns (bool) { - uint[14] memory _vkPoints = VK_POINTS[merkleTreeDepth - 1]; + uint[14] memory _vkPoints = SemaphoreVerifierKeyPts.get_pts(merkleTreeDepth); assembly { function checkField(v) { diff --git a/packages/contracts/contracts/base/SemaphoreVerifierKeyPts.sol b/packages/contracts/contracts/base/SemaphoreVerifierKeyPts.sol new file mode 100644 index 000000000..9aed84a55 --- /dev/null +++ b/packages/contracts/contracts/base/SemaphoreVerifierKeyPts.sol @@ -0,0 +1,920 @@ +// SPDX-License-Identifier: MIT +// Part of this file was generated with [snarkJS](https://github.com/iden3/snarkjs). +pragma solidity 0.8.23; + +library SemaphoreVerifierKeyPts { + // Verification Key points. + // These values are taken from the verification key json file generated with snarkjs. + // It allows to use the same verifier to verify proofs for all the tree depths supported by Semaphore. + uint256 constant SET_SIZE = 14; + bytes constant VK_POINT_BYTES = + // set 0-0: 18358547564487905095688479908858987846616998213156437518686067355563592118237 + hex"289691d7705934b5504ae4bd7be283f3465af66f62fc7f1e66f03876b445efdd" + // set 0-1: 15662648751553932653781975807624464121405704024803073886925976686616010387354 + hex"22a0bebada6ba60c3e190e9e8c2b1420244a14c9e02868b862c7945667416f9a" + // set 0-2: 1545474538105908330267074270190095622354834966212647889547653097055078098224 + hex"036ab5249fee75e0644ed259d45fbbd0142b638e421b948f5dc00cf3ff14a530" + // set 0-3: 12579159544968648693964563165973893448704730885005100826654630574108054705556 + hex"1bcf8d4f8bf886d2c7960badc94b3abf6beb4e43571d2b4b0f14928c10e0d594" + // set 0-4: 20602000776800724705104231353971008348678632605343811527051139864158800058742 + hex"2d8c51b7fa4ea9ea16765377aaae4ae0a416a89b600fc0b8ec35e9e6e5621976" + // set 0-5: 14100125742256756091734688090621667470723401759459592787502475801413744195297 + hex"1f2c636b4954a865946d69fed3ecd2bb60a61af38fa31f2a290ae28915d1f6e1" + // set 0-6: 5090583730862410755830979584235210054631184460526892606022709842010236308675 + hex"0b412b14d9dddf3f9031ffb51eb3f73602b9e49cfa9bec4a02ec9c0e3020ccc3" + // set 0-7: 4935746665478263580470501879719907639988899436008466660042851826337922233613 + hex"0ae9889ae5f4f6021af9e16dd1f2c445ed863fd6a374b329337f2fef4715350d" + // set 0-8: 3603230519262933722323237889869128969156000998401789817930265262617368730462 + hex"07f75b300b401d2435b96459d2b64f6f848411f246d8478199dd2351a35c1b5e" + // set 0-9: 11467103179184542033012124498958167915605281189440445972230559164572312725202 + hex"195a26806d907b6d9a9a9c235e09a48e94f8eb8da80f0d40bc4143e3d006e6d2" + // set 0-10: 20354120984011889701917116306955017859695028034788955847437411305304360829487 + hex"2d0006337513747c51f8f3e87364d2852113a83e586ef629c88cee6d4cbd422f" + // set 0-11: 16952752114474306858880411587178692742589121096026762314329638709126787301483 + hex"257aeaec24103ea15e4592c32d0ad9846ff1a2f3a836e0c19947980912b9006b" + // set 0-12: 18678961143994743003180318723146092299060216598083112257165966782010215931454 + hex"294bead7a3378f80183af735f6bc8529ddc73d9e0a35d594dcf93524403c9e3e" + // set 0-13: 5866474510945308764957529269555101130643879788634167019342763906927794156659 + hex"0cf84e9163744a9a65520f4b8cbb4ca35c428d1c4a5789e11f42636c6d197473" + // set 1-0: 15357842752194390032830879177519514606613356943505010426726499926726016517582 + hex"21f43b1ffa301d565dbc37ef1eb2ef669b8a1876e3754b79657b26fe43c845ce" + // set 1-1: 13720528004476084359207196371475762368424714925503835663451917882430924467554 + hex"1e558b2ca618dfa02f0d640fdd45f56492a577154989cd09523829b5e15f2d62" + // set 1-2: 2196656647584375999320189230399052835502476576494068012902156164580595749760 + hex"04db437b7b4fa0f6eea95403dd25c6a674b3e81be98ad4532affe8507ec05380" + // set 1-3: 14571933744484927053512012311263939678215066456565339237074260778179419354637 + hex"20376c16b97ad98b8dfaa6f10d42a3c5e264c56018d32b0e8af528db157eb60d" + // set 1-4: 15947740979005208428427315036716544174249364023308166418156254508145278950889 + hex"234219fd49f941520883c13c1f01ff7b2f7f512a3046f91d33cdc3900ffb9de9" + // set 1-5: 13324328715790405384125386378518079709609297588403011236512446709595322048979 + hex"1d754d84438f79e6b701f7d665d59755a7bcd0b63f7c2da94b737606c16de1d3" + // set 1-6: 18308129219862888344083447566760955160779532192553849267018614487088634836563 + hex"287a08af195521f756271ec64bdc4ca8a7a95fae892c0fd2cf0c148d6c0cb653" + // set 1-7: 6372459765603725576424215986727450779217530423615747931788702584026023386877 + hex"0e16af35936b356d5974b385528f6d9a873568eda614ed0e54be4494c2acdefd" + // set 1-8: 7093003777162632186231777482293120808844116758585672698445917711442486215336 + hex"0fae7f745efa5884dc82f1595b5c10d931ed6da07b5dc4bd6f99dd5318c7c2a8" + // set 1-9: 15357576732947512625016950088762579987226580659874157718142226214458009204755 + hex"21f41494c6685503d748b45672c65d059260bb205113882458c86f6da7ea3813" + // set 1-10: 13910597919064508360434043231000553781072135406219661606166769706745413894201 + hex"1ec11e919c80981c8a905161c48caab360994e8f31cfe88536c5ad8b2c360039" + // set 1-11: 9475901949906914147982792916474633312982452326368523201024844634638043554494 + hex"14f32ba1f584bafc3aa283f79d5d65e97a6a280c7c51cec192ee9e48d593a2be" + // set 1-12: 5845138751782936895477553974859998077996624699108246120208069774017428318479 + hex"0cec3b3618ebb60152be2987b910940e79a421d666a71764f25ded99159de90f" + // set 1-13: 3326095377373657419775174404381825686428913179751401123841216020519623741775 + hex"075a80d650b5c6f8a0b3261ae5ec4c5a1b53762f30c559aaa6c501e207c2514f" + // set 2-0: 1096090542237876305763822439899873238394525438826581012748557492836778110917 + hex"026c5d81cf4e6cbade3622323c4ee3b4568333e79504044d2ad4d2ba01abefc5" + // set 2-1: 18282758355470198230938465615400409713402004038201360061031317503584711879237 + hex"286bacad6fb92895c85483e837d7c821d3f7bd612ddd932c16d618455ee62a45" + // set 2-2: 7973969975759518869552865162652900479072033124669141796195141770899882758383 + hex"11a11b68cb7aa85f42325a3d0fa45e0887719f05c9cd472183b1c7c78eabd0ef" + // set 2-3: 2920496587818605789230962034477809982324000981266163502059117507002917895757 + hex"0674f14710e453bc1f9255babc8d2aeb3b2e321c68e6871b54c285e71456be4d" + // set 2-4: 8027751638293718359199675565570157214590620386957299982399037269650333307021 + hex"11bf8be1878d5dee6820ec405b079360da81da7b79f29aa54096ae195ea1108d" + // set 2-5: 19002113380575481191643777830101182489616906893723699470070419138254788369727 + hex"2a02d0a645dcfcafb2235e7f9ed37df27c3f7cbd5ad11ee831fa17cb36881d3f" + // set 2-6: 13631613009301650992828160964785768170789209232530437462516754147352285424672 + hex"1e2338342dcdeec5d3ebd82d4b767ed93989d9147ac711dd07d8aebac0962c20" + // set 2-7: 10537705110128905270703523362934130036880036854847578111990360444182641655212 + hex"174c21361611783b0dc90d87a6128cd4d7e427cca10db1d713495d8281ce3dac" + // set 2-8: 15557574650831364767567015658284909068256128766563081293491003990055297878366 + hex"22654673d8af40026294acb3c0e51f0f367576d83a554bd9ad72de06a796095e" + // set 2-9: 4049724481871929240016595616316679773340938699307608349394228543495262553744 + hex"08f410159146e32feb7a585ad437c4a48ff2109d7f74f58e709b66c292e1c690" + // set 2-10: 9967066649437927083270210032320564587652082866881800887188539489167094397640 + hex"160928e9343db00c99255a53ea3948b547d0bb68332069c2d5ca632156a53ac8" + // set 2-11: 12463426560961961450861478284334163210886016242490079948590082000657390077088 + hex"1b8e0ca895ea976f5d42029c964ea52d622388e90f947cba08b3924b470d84a0" + // set 2-12: 21318595425700216078579789307308348011199610228556265752904860757510620370622 + hex"2f21e5bcc52e6d794afbf44a0dcb938554c7c94fbde66c1b7965ebb2d266d6be" + // set 2-13: 7430155508771673067823897542900534022148544854722115377830369283854627952599 + hex"106d51a9231260949c37fcb7c8296c246566259829e98ef52683900a433ad7d7" + // set 3-0: 14033304028688398404089545751254979569049699915340551984412184456786819712695 + hex"1f0691902d412d4afe6e49f546ad03d739f42a159af9530d717c01a3e9bc86b7" + // set 3-1: 17529478610649635357901422564682249462969460088983393810272144503916885638629 + hex"26c15552cf455e161693ea7f01601fed166f79653153fb5beec9e8393c1efde5" + // set 3-2: 968190632906420692452807865081290940343138767641492735661467959437198373032 + hex"0223f9fa8192ae6be752d29b47e8b8a75e2172fbd4c89cfec400a9766e1430a8" + // set 3-3: 7242759178038747404494096998044224993169513816067824413031492987300456908934 + hex"100341a4e94a5cfffa3c6cfa1be6ac3bf6b0c4fe578f8c99cc4f67e4d7bf4886" + // set 3-4: 12017353327534072098763415761011052990865822334777878720246921848197559257711 + hex"1a9194b8c654ebf4f3cbb607c8bff2ddebaff87b8bdec06745ad4ed802728a6f" + // set 3-5: 4746680322053291743787031203095442352574780441873349801788355375401126089939 + hex"0a7e869e75859fe47e51b3b79ad155670af4e6780d3edd3c13812db0197854d3" + // set 3-6: 6764632552006100580460767171096753901452726344615530017064702126145414585640 + hex"0ef4a576b0bef4d037549aa24282378e13b438fc9bf49efcfd65cf3aa8935d28" + // set 3-7: 11581587935666673652762153205827599529022773836189155792609728856814288572033 + hex"199af24c0e98e72c37d87bfb9386003c2a0192ccf015be777c4305d5eaaf0e81" + // set 3-8: 3123694825428833189943974730387937552931713004458396242443840668462184834558 + hex"06e7f2d897f05617580ccc132040f3b83f3fe1a496354b33f39d27b15fb2a5fe" + // set 3-9: 3432192610292569155696646287493678963086402014898209278361624573082188247990 + hex"07968d5b67877cf32da7858c85479a891164a19b1ddc26fdb2772d294addf3b6" + // set 3-10: 12349833666000936285363634772178969342930188247085371717039135170012686159900 + hex"1b4dc215f06081e276803f1650d67324801c0a4f48d4b4fac9f6650d2fcd901c" + // set 3-11: 5587426338437935681688079936152042996259869611071713486439341129143155921959 + hex"0c5a5f0969147d312118768cd73a762e53d3984088be93e46d8433d129939427" + // set 3-12: 12022589354168680516901928073724404259700970836413687340697868887207353139344 + hex"1a948b5fcbf5918fad1f3c69d9d58c2df72cd9a15ff57a35c86c9e5082ee4090" + // set 3-13: 2351613311284811919248989036726852289804810348516261915606564943623124473717 + hex"0532f7499522ad56592a815a303b33b648fe170e0c2f47d831255298200cd775" + // set 4-0: 15740655435463241944594855735935231648684671883923953096410588018036769516770 + hex"22cce52f921a79b56993baaa1854b37ea74caf7e6f2d957048fe5e5d1e536ce2" + // set 4-1: 12964751171177929169670182425240761498461607040020835118601467328036987558858 + hex"1ca9ca03dcd6b6539118fc036663b6deae0bdb0df258f18e23613f4e80bd5bca" + // set 4-2: 21474571159868965455306627669334290549452576803823591301731326342326814568896 + hex"2f7a2d324bace30583592592d82bb970ed33f9753d03dcd3b54a44af04a0f1c0" + // set 4-3: 6954370193053655486251406740905618458518953022289151868757271522548301919472 + hex"0f6008b6f13bcf8f2663e7392e2538406a7cdf15ad387e2eda92bb1de03f74f0" + // set 4-4: 3115002343037487520580459802807906562630507097436525958861415456096559884443 + hex"06e30762808351c935656ddd7ac3499a2b497991d02f54c178277fce024ce89b" + // set 4-5: 11775142132959919266954507317832500578453517368862270948538792702813845219681 + hex"1a087e883f78b0e1ecbc92dbe9d82258e4c91baac53d71836902953f8e5a6961" + // set 4-6: 5975456097652384580746132945351678665917860606511206167023154005883554813508 + hex"0d35fd011b125ac12fd1d7c655fbb7b1ebc9eb47008676c750907f7768f6d644" + // set 4-7: 10958037207675554032315788914627312943186758288936582678633536154169678007202 + hex"183a077e1a0a2dba1ffcf7e2a490859a5f60d5d04b3599506249b6d534848ba2" + // set 4-8: 16345185674805541466042568997276776714209785989761944600635051035243995431568 + hex"24230c1864237bf6dc8d6b3e40bb277c02dab92e86aa515aaa62b1ad496b8290" + // set 4-9: 3326264593228494909568322793066180033820330146744162800569972963329142251537 + hex"075a995ae152c5f9737f6848a2d5ef93a8e7809981a06834ef8b684390456011" + // set 4-10: 20721047231464194965879320004420846916587593568519526251056516572985788552732 + hex"2dcfb2766574efd57331146186055ee967cdd14d5efac43389a29605d13d561c" + // set 4-11: 2552439778142862614309289213707433798337671284267429041900242151271508522517 + hex"05a4a1353e53e1b5622a2200ee1fb2e1a8e224a8ec5554bb670bb377505cb615" + // set 4-12: 2849386127826497959217687777221941766595094589431869464564268817450132435018 + hex"064cb205829acdaf1af3d45060ffa3433c02d3a7ae61b66ece50967b97e1f04a" + // set 4-13: 12188539304210779665491473755999603070354632830707125660270270405780470402800 + hex"1af278018cfd4d2edc11dd77454ed0cc4ef3ca1dba5b0ba96bb2bdc43f1e8ef0" + // set 5-0: 16239592155161765109648123193105804251252701943901733499502441663333912783245 + hex"23e7488f10d910e129d466443a7adb99fad7ac0b0bb37a51c9d0f1b7c527a98d" + // set 5-1: 18702593988046837524790351483331632258278160532977261915119611324471253407466 + hex"29594b068af04ce6fe6b248aeb06051d6f66a39d9f3d13cdde5b343f31ec16ea" + // set 5-2: 13746033878407070858115621843430829498309218839316343379025665907999784574154 + hex"1e63fabe17ec748ba86bf78cd84029d23ca6c543ee800179dad25964fae41cca" + // set 5-3: 19358066347678636498093783612000296194480758342913325289131948678991962529441 + hex"2acc46fb9f4ba2abecc49ddb33c0314c7a940bfa021c07d44a73614599995ea1" + // set 5-4: 6024976123298004874848602709755399197808739071863728225378332097920450236516 + hex"0d520400f15c87d18376ebfc03c8ed06b9ed713a654a0024cf310b64175d1064" + // set 5-5: 11108084608972457539770160222798307153256767409158349747526974841008717682367 + hex"188ef3fd8a2134f2d4237dd7657f410ba5172ae081a6ca117dc21c7ffe71d6bf" + // set 5-6: 3009127146923662343754766534488769100730310563110562565512507605403185571089 + hex"06a71b093737f1ebae5924f2d5f47b8b14526c4831c50f9e9c7c032dc011e511" + // set 5-7: 10560679284132950437595738585637379866590755950272794729013445350206405316661 + hex"175921f58fb9fd90e2a1d2cf951ad606104a1676c9d2e6fc8fee6ea105239035" + // set 5-8: 16015321530803994569819047219560485624444041236327101681073970215458831987478 + hex"236859cb45dff68ffa2524619936a9cb457d2c0defe59b5863607e439369f316" + // set 5-9: 18489840631710745699731219026737904723160484479846032199737023956049067434815 + hex"28e0e101f6b62767f587d7dd8e0a4d4e32fbed3fc65c940d8aa8509bd826e33f" + // set 5-10: 609265187318362115240245160721406765003010398230819869810290394123140807290 + hex"0158d4f5cd5085c6e4ae2fd1330a52435eb0745d54c7c8a6ad5b7a3cf5333a7a" + // set 5-11: 2656965952206569220410287839949134856874352189248192147930831679380007159249 + hex"05dfca18855acba1a5409f714a77297952277658af5e7d5e3a05bacd0b8005d1" + // set 5-12: 13957423432693450118120092425077530751840166358932317773385901323790404449641 + hex"1edb9f2871655c1418f9c7b5851dd8b1713d1f9d7d78c9b915b2d3ecb62e7569" + // set 5-13: 7610225795517710715985874151201119876406845575780133396869144717381641586640 + hex"10d33c3349ddff796b66b2c800a9fdf51d44235d14d74def1b2c112bf88647d0" + // set 6-0: 6482921272760726478838066628157548923897782117283646773208763176771446379138 + hex"0e55341297ed43dfa1312685a260ec51b42ed6c24e46b79900549fd023441282" + // set 6-1: 4562585331778730670899179927104513856322577370213643119870201750008533040214 + hex"0a1654efc1b702b4ffbcd21a9e0e3323a40e4a136bfa0cf81cf01bd89d433c56" + // set 6-2: 9299549824594530154451155704400285409056448609359755927574262701418672785771 + hex"148f5bd214818a2b59ed67a8d79e54a048f357989e2046b3e7b587dc4893896b" + // set 6-3: 16654459784024455427280229763380300423080811024668332509526284511491790880990 + hex"24d21716ac3c7fa8d8945b7b04479a0b397b8fe46e3424c0db7e1d7d824e40de" + // set 6-4: 18178936861568428015361893654874798233785855995042899944660014774323534883903 + hex"2830e9e432e9bc3e8dc48c98c12ee9081273f5be246347769d0a34e2f0e7ec3f" + // set 6-5: 534506139369949013962728832141783820104682340925384016906020027968881380951 + hex"012e850e98e970f096522ef6f4f537529f296f7f3ec9ade921780c45fca74e57" + // set 6-6: 13888044772855561714276444972404100722751042044045312252045340354941233320135 + hex"1eb45ad2eccb950133aec7d4da6d03c301cebe782ba71e3533d5a0879bd6d0c7" + // set 6-7: 13061437363756343100054622876229104455920015737970195589611281743974716159827 + hex"1ce082f6108befc4c6133865cdf1b35a587868b99c36f59811bd3771a75c3753" + // set 6-8: 15297052669271818809266618537917704542138894789392864971735934945598379827363 + hex"21d1d3327b86bcb2514eac6f11a77867856f5a2cb24ff4f72f65742854baa0a3" + // set 6-9: 3240592020743113440365790241401792477958041186219702004441781545015089517479 + hex"072a1c2e8d55ba7a49807bbf09ad71e000d67b09bba8ea2ec6009086342753a7" + // set 6-10: 12939402739160799630996576545137073878726141216092557580496570401396343874133 + hex"1c9b7142435f0c29a9ad5549dcb9ac289104f48d39d4e196025268dfa1b6a255" + // set 6-11: 409838859583542828209958035048329036930557790097408442597169497017958367880 + hex"00e7f5e830053d6bd9dbd5a2546f2b38820b7ec18b55b638f189c2cb86598288" + // set 6-12: 4849352055719384218783567790347020036570406423962447054960403165168624679411 + hex"0ab8a2d0b81f7a40ac8a6a8bed4df0643df2a4dd4606194c8508595e116f39f3" + // set 6-13: 10140481868950825952506002812679553069445144019364683137830173127833535162812 + hex"166b4f313145815f8ab8a09e6fac91e3cfa404438c8c430dda4d121eef70a9bc" + // set 7-0: 4169753203433043290708949478342499350225971996935208104044673971132510531963 + hex"0937ff264a4c22904c66b8466165d9302052f5687326970486277a54f458717b" + // set 7-1: 16198597482473356107060462797493408464959815651823410647378959304462364790023 + hex"23d014ce251eb044d74105355f1ae0b5dcdf0ef73fece10777328b86b0bb4d07" + // set 7-2: 17831214733154720272879709021886998538183166751338990495293296921834561417050 + hex"276c1c219fdc62892dd095536db3525c18d0409121171197c99bdd8a95eb2f5a" + // set 7-3: 15996002991058741836925286413107190453488985346498046642177496721490001022163 + hex"235d6ab6cef9830493b2c71bacd3782d67eeffacf4aed5bc07c2524203344cd3" + // set 7-4: 12128929995926069335150064696726717100038806543084523729572253928762150006902 + hex"1ad0bb296be4e478c61149c736ad66168c2d0ba4410e05513c1af1ebe644b076" + // set 7-5: 1527343541447603983494013575570118174442170324803005341835852970207664984106 + hex"0360722094dd4a26a16d8f12264b25accafdc6a3f55736f0de1e55dbdb28d02a" + // set 7-6: 3864366504647042739453971869413719136218296278515580744588126485271535533745 + hex"088b276813522c901c6ac134a1ffa00cd61276e1221bbd7ff377d1dba5e1beb1" + // set 7-7: 16390744785373846505589339019032992526980013169808686005019244934399314954484 + hex"243cd531b8f9fcb0cd9e8d9418c6e9306b89d96e0136eeaa66ebdb248bfd08f4" + // set 7-8: 1189371614834081242339044631966546656514169937037419744085755746584992776112 + hex"02a12915178a6e7d4a612dbc3a878db9ce7153bdc9130d3df7308c13b2e97fb0" + // set 7-9: 2490564128297998291899011962907372091056992851367564813460897014374926950158 + hex"05819bfdd569b0009e9bd1f9a41c7eb23ec33d8cd37d5d05b705b4511dc09f0e" + // set 7-10: 2632864541439030478006092584387470079076010621748787710053145987733131826177 + hex"05d2260582a4a391c8180a17189b98a53b831ebced724333194f2f6809571401" + // set 7-11: 10997016251008884590554668186933912000821350188750456144761529496433221911191 + hex"185017332cad227b54dca48915a4a78875967f8ed352fd96d5446946a64b4297" + // set 7-12: 3662989402605074726032541754492900291134797145446056852785520146936851543244 + hex"08192db4386fcba811f000733a6f28b929be4f9aa1d2140ccc3f9616f82f34cc" + // set 7-13: 8371074929323402425468930212402691638137013802793901226648986870188378349904 + hex"1281dc4a2838c70842102a997a6bc26a737209d42266e815738ec3943516e150" + // set 8-0: 17920452210119585965813298538098997746450528307627971419517604274103840658730 + hex"279e9dd39bd768a08ad9ceca41993b8e8408d025affd64237b5985ed9a37d52a" + // set 8-1: 8026613233416032931155189579997899527124867847165186585887532521124762242171 + hex"11bee6efbee9ff1ffe2f060d79bd751d43bfdec4d5fa5e323582f8d735f44c7b" + // set 8-2: 12536429843060624487053183271774959575059067729019923970247266906616071589989 + hex"1bb75e2ad0bf3e1f255a9e983428b9baa96cfae8bf71d1aa4d3a786235e21065" + // set 8-3: 18354222295715868456732739635697044486544782691576216892030243636076554800619 + hex"28941f264db478bce46c697bc574a5dc0b956d033eb29194de103a9a70bccdeb" + // set 8-4: 11685593308965088606881675161829854229906033467171784802160080423031157953626 + hex"19d5cfb9c2ace7ec529ea27438d22668f09c2acbdc9c099bbd5554a6f3ae145a" + // set 8-5: 18989841286028554273231159314070667749621876499337485447347239057791285949659 + hex"29fbde88fcb5e46ca563fad42cc7e26ddbdc0e655f88057a8a8f6e51354f74db" + // set 8-6: 13501500842653069022700095920888317808542113497043735775280862312089436522286 + hex"1dd99423b0d860b8ee34e292b4616f7c870094c265f52cc450f98a575323872e" + // set 8-7: 16284422417487952110266526583186344607656490299306406671512902584454645262294 + hex"2400a80de9d38f539c9b0b9580ccb9ae2e382f3092a657ff50a83ea03a4ba7d6" + // set 8-8: 14766820041476554952520399418749355774195705334216487399328042021346008099854 + hex"20a5b9553d48bdf8ff66139e723e6a1655823b62add790b62e605d90044bec0e" + // set 8-9: 11502099463338241997177160748027482497157165595330950109059924501733819344412 + hex"196df524c0987fe4b832add37f546b835dd259e7c03de7226a43a6a062b4e61c" + // set 8-10: 21097733162892834226328090737666232905549661288100963226189626007151883115218 + hex"2ea4e4d02236497c570aeac4ea1896e1e3a19343f6e50eadb273cb5a7becdad2" + // set 8-11: 3620141777236347892405766912767968106066233413607983266884777435591408542679 + hex"0800ed797700c5e269e0c1edf4947c65348976d4a67e16ee547c6c870c36e3d7" + // set 8-12: 4465316625088681267432956930147995293521314127558426510839100849580054135068 + hex"09df4796e7cc0d89f1fc722c7d967d4c0baa823f93f9c4d6c7913edd185bc11c" + // set 8-13: 15951396696291486543574989938200386934444721629903447106494532971713975302198 + hex"23442bab611ff64c7eb49ab07f32f52008673d80ba54e04bbc5c61ca1f0c3836" + // set 9-0: 21420692366857794685888663542888709905237738746850069466081467001353666342965 + hex"2f5baea6ca93f7a41762a2b4f5b6c31c4e0d140e422fbe379f2686522dccb035" + // set 9-1: 18343503004862189418033094393114515169584171574852422315350418500159030922263 + hex"288e0e05b537a48d5470921b9d724c26fb8d2900dc7d6f0741ba2c1a35138c17" + // set 9-2: 16439186901063853414808045554962977634854311593865750348846556486836509716488 + hex"24584003a84247aeb78b30e2d8fb4cf7147785647ddeb68a7df6a79ff84fb008" + // set 9-3: 15200551988732901161699976788357951085426436066677048420098461828563894176150 + hex"219b35214df5048253b823fcaf329a45a2ae7f959af6539ae7753e3554d28996" + // set 9-4: 15140772590596966074591171894694986645347795546765667852915300358255369432294 + hex"21795fa4312815b80472036b9f35c1495378f172c7157a9440e62ee46692ace6" + // set 9-5: 7383386342436648909729802223228006548918015494414484659175617833341830753463 + hex"1052d93c57b9902620b22e1c29b9106ad076f25f69fed4106736de133d72ecb7" + // set 9-6: 11436445698241305906567677067532324081573492145508451249291326304016376374466 + hex"1948cc83425a81e7f7c6486e0f08b4b412724759ce41f950d65fa5283c31a4c2" + // set 9-7: 17397405229027848655285535331264669055168427730382628461971653096729174692794 + hex"26769518d0ab71ba583b0022557cddceec3566637a6c1c519999523b44d953ba" + // set 9-8: 8888190346365862431131132945799487885295183925892581338098808269532220115208 + hex"13a68997032013798fc580d466367a6a04502f500f7dcf4c2e6e03e777484908" + // set 9-9: 17373048493258440814074078107890527278667903472831731635546171123117085702144 + hex"2668cc07461b1088861db6bf4c03528227a20d2b473e088aff34daa78be83800" + // set 9-10: 5394355195223713516914582580686192473163629785306318732489822694588538915692 + hex"0bed18cab0f02716c9ee5e68f2434a241e6784ba03ca69df0edd97dd72038b6c" + // set 9-11: 20814957740385525027786677509245187599649792998372465800981035312224123940783 + hex"2e04d93cc4f54309390fe572d6affd4cbb1989ddcf410fb476e3a8681656efaf" + // set 9-12: 11167741662268878371451552983943563550747492198375641214347145843414778750740 + hex"18b0b7c0a137e1454dd3ca510d220987b5aaa51124e157fa372ec6099a03a714" + // set 9-13: 1505498991925224080559736158020686494389967648228591899080542175743913505975 + hex"0354150d34ffc1b4ea2bcc2d705f72e2bfac4619f6ba35de7a5c08d5d7ec34b7" + // set 10-0: 8482807834840099486107357849095958421708288941420679407730439668240369271197 + hex"12c1195df5fc75284ebe217430760ab4862de0255f75dbe24f4fe60f90c3419d" + // set 10-1: 1531932691795154082010331247272128035283420450879984505970978649526303671013 + hex"03630b0da0e292c1088354c075dd1e00694fc14db1878a5cfacf2b7b797742e5" + // set 10-2: 10326017741190716069982105202291613302347042236075737537452333444753171570010 + hex"16d451a52d64de482f4bf60beb30fa565a4e29904042fe36288002bb84325d5a" + // set 10-3: 2890563104449202149521252385842115871596603958515320789619311677428773944295 + hex"0664003075b0ef9bfd1573f70b84f7b75ce76563169be92df533d5aeb47ffbe7" + // set 10-4: 5091938011714608365574587822261119297677309310900626302766934784886036216676 + hex"0b41ef4deb720d4d2fe7dc11b4483b3d0b226ef5cfd8ba9a4e46bea1018fbb64" + // set 10-5: 18792973255357094538588824962661759194320829424712347846315600994520652609459 + hex"298c7227e27ecf7291ff64ebbab81169202697e8e76afbe9fe1504243b4077b3" + // set 10-6: 5819484726278895533547092474664732368175576227992878488267454637556311136768 + hex"0cddb62d67cbb120c38a93a9d10466381bcc71a202ee0a75f1bf952ac1c61a00" + // set 10-7: 14087278759052154922504944654932471722205352537489748711235261956958139094423 + hex"1f251e0231fb968a4b39bd089704ca99438b645cfc29920e0f8f4988f77e9597" + // set 10-8: 6676755499836944199268283133886528716777488598645051771936175647684814488319 + hex"0ec2e8e1aa9376bd31702a93e024f654ed26a324bf744d53271e510a1f7cc2ff" + // set 10-9: 7841200200792172536039490995922340397104113825218911994623753022413575084536 + hex"1155f64822affa2c0d2fcd555aa5dad8698731fca61bd3a3d072cf33c1a8d9f8" + // set 10-10: 9685171750835271647846188024034904289604883281120913275229696726161494108338 + hex"15699cea496017d4bf9fcf96e5a384e7c105d2ac074571e600afd0e9b4e7e8b2" + // set 10-11: 13804722593058778047599265964893015518608567919815229008355552695901539135617 + hex"1e85323381cf7d3ba3431e64e894ce4d693f0c463b6d104dd33dedd7f1b9f081" + // set 10-12: 133210224564739370698401112580329091433152068231765294734991529050629411851 + hex"004b64f1d7c848aa7c28d6a815b7ec34ff2bb76d2d8c25f93265ad8b20b7140b" + // set 10-13: 6253365067148837443745536970484493754157158998156041417978340186561909915882 + hex"0dd34779b2145df8b131bfb71ffed5c835d2b696299ed813bb472be2f3a880ea" + // set 11-0: 6379626794062388565530320965673584683811331210463512233691169393056454417810 + hex"0e1abda56faf0df6daf6b166c95c5edc97bac1f73d539a4e419e36cae7ee1d92" + // set 11-1: 8031021217500376290269114216814836477415391402921787637085737712949651005952 + hex"11c1659cf668bedf75fe21edb2ff2b1fc695bbd538c1331845f24839897b6200" + // set 11-2: 15261959534341262089656432084966075417921918036565394975811438856221288978192 + hex"21bdf685c361d30014b4396b358599cefdc9d5f3b464d67a54c9cb2978925710" + // set 11-3: 12412675319987657724460960278402203548317535126494687402198671892291826563464 + hex"1b7153446f1040fd153236c214b0b502ccb8c202c54ddfa527132962133d3988" + // set 11-4: 11594484527416994136900781664743660516883697944736099448760569480817952218099 + hex"19a23ee53b40796801a094627b87364921ae981e57f9f478ddb3fe9e3050dbf3" + // set 11-5: 5525949004768282420418522754788387377346850869414250693501350383184014395566 + hex"0c3793885e6423402d09a54736d9a0fab9f8e5edf858b7be1710b5ee2a46c8ae" + // set 11-6: 13423677678153887686951876961584096043047689175638209759158420018856273430250 + hex"1dad8846162762182f95a6360199cd0ccad756cea2e4fbb6f17bf7bb643cc6ea" + // set 11-7: 688554022717474500337948897714325469989973507431329797109415877246281679190 + hex"0185b530295447254ce398130e4f1bac6a4135c8b9be462422bb6ed88d7d8156" + // set 11-8: 5767985312159947447966233995178318554138266544591427341210101818005833690773 + hex"0cc09061f82989f499b935c855c6446ee4c02f2b5ec74205bb2681a3d39cae95" + // set 11-9: 13782057493439290506357575012457041256926849070794382612465582256292384507590 + hex"1e785e3c3ce8c5a93d9a16f466e1df548f855d70d18613fe8dd861f3e4f486c6" + // set 11-10: 2009465632383454183075946487099156558696455704620200103263777377956167571948 + hex"04715136d512b998cab28f4cada627caf8da082e1b11e2438ae4f8ed17b259ec" + // set 11-11: 10265570962161934109202420603055144010322859077969741656080416572925588897009 + hex"16b21b75881cfd9f0ae30c2ebb472bcfafd4c09ff390f3a381e2098d9b057cf1" + // set 11-12: 13063467510206676485181697613068184940643350938488359709447602318070297992418 + hex"1ce1a91c61b317ca6f871105d6034a1ae73832671555965c2deeb24c5da51ce2" + // set 11-13: 8824580488237789516855671915345935747743201560548603121129517348234754630838 + hex"1382891a3df8d5ba54ddcbd4a9061a4574b0a4813c7d5fd49797bcd8ebbda4b6" + // set 12-0: 18405974527641184935569939050199806786119735189423462681352004154947586987761 + hex"28b1699345f2327ed7e3a35dbcac11e9704a2d019568e273b2ddbbdda61b96f1" + // set 12-1: 11063658239692825381704700810385108349384459703800229121613802621026834850995 + hex"1875cf03eaefd3c4a503d2499a9524ba9c8e8b1906511a4a85800ee21ad424b3" + // set 12-2: 20401912636755055463157317129314482008782101856095804626717136888886428939725 + hex"2d1b12c661616bf91e9616cf0dd1823f5e33799035dd1bcb92bbb8bd7b9fb5cd" + // set 12-3: 10581036997862130058603889786198200057133900928078268413900852134308841628552 + hex"1764a79b21973a65541bb9bf58bae57a63de6e20a207369f85b0ece77b1da388" + // set 12-4: 15613862437263830065893280422700893831122147824370200118126675792748158214283 + hex"22852209e2034dac637154e40c26004c7d2f8d6b0f2f649fe920d916a0b9608b" + // set 12-5: 11637898091445829201992956909089879348463617460955895182594618572267100421779 + hex"19bad11fd19291c1d7aba146796c8bc076303184293b05257a2e95aa1b35be93" + // set 12-6: 676470684249461112964281503193041675013396554434239929609436328672155420783 + hex"017ede6c3a4fadb0c3b384fc1bb3ba2515ede2ddf470bbc5279817dccba8486f" + // set 12-7: 14862758280768060051884504554805186980208629806423451755599092137651959992706 + hex"20dc05e84fe2b3674dbf6cfbc4ea1888a95c385a682b198665ea24fe875f9182" + // set 12-8: 5623342967419780942118234966618900971275224510117264341831041912523393680166 + hex"0c6eb30738c6c686153cef7a45b97d5da153ed62a67f725af666c8f545414326" + // set 12-9: 12293742687505619727765346377361630310803471543338450439759434637239250426631 + hex"1b2e0303ea261450c0505cdcf6d8c5a1fe7c840287ff532d632de4cd4b899b07" + // set 12-10: 17107107724389526013252251054585363312805578717860151655674796329456502453436 + hex"25d247a3eaf394fba18917bc67089efdf773445090ab333538b9db6dd2aa34bc" + // set 12-11: 695490429984933474058785653390434166254929169748519672533632124843844650437 + hex"0189a235ce7315920cc9633d5dc1c072cad0ebe0e95a07a0a7f6152bb14345c5" + // set 12-12: 7941603993861390710630117468483386570984050378175531457457840811645822985465 + hex"118ec9dfcdb51980db3cdbc0b4917ecc57a03dd0c8586ed23145fb8af86e64f9" + // set 12-13: 19423663035279971057851778008344970269742436279020301703706239058210708410668 + hex"2af16757fe4fb59efbf68b60493d51df19d06df73ff34828b9b0805b3a12512c" + // set 13-0: 2844460676842285471844840162496739784337096369846435331204280645139535043731 + hex"0649e85e611b0ea226cd5195e88f479ca348748e3aceb994208fdeca397d1c93" + // set 13-1: 5914749649291606384462747717764850940787906745751128721215181537027495043325 + hex"0d13a131ca0eb5a309eed385c046002c368bc570ea227bb02cc92be5e30820fd" + // set 13-2: 16403998562201315274383761287898474039980386929670468025842124690312505385798 + hex"2444558ba0ba9ab3e990299dc09f450bae4c4c92829a42c6943c451cc858e346" + // set 13-3: 16679714051449621657256662882211432986285335589270632187081448168743144646010 + hex"24e06233837107b33fc5cb27ac7baf78d48735d71cabebf68bbe8437ec15e57a" + // set 13-4: 14178974435133537452754432783693851994073934244854394772136599698341675338748 + hex"1f5903dfda34ef89110f00cc07959025cf325ee02f81046cc48105d3e5930bfc" + // set 13-5: 14490318493007296294817313593753116388501252549516359980240258503496717340194 + hex"20093ac8cbfca0030d78cc010018beb1b3e689d52956baa0c54ceaf858488e22" + // set 13-6: 21219478166573360512901478467779541318881953172337799756939010190701884653821 + hex"2ee9cc8d4c5e47162bf7386e4325e3a513e6d4f4458f5e01fc343e340124c0fd" + // set 13-7: 13653038712207413996195005796658436532811211815454701512198612316602372800026 + hex"1e2f5897ab3f2279bc761e37a8c20cf48a6bb27fb6da5bf0a5f67fca6ad93e1a" + // set 13-8: 6606031466185873676955137126631780808678269492505994174970319773811652852017 + hex"0e9ae19d75c9f500b45f68de80244090eb66f42dab81886a78645cb1bfb27931" + // set 13-9: 6998326006251734945119834407770954155028321677085545151592873301468610324946 + hex"0f78e982ab46a572920bb2e18383e1427da1df92db1f3665498c719a7af869d2" + // set 13-10: 15717984973502827230694305820570642040862757036680118080574899662027439132392 + hex"22c0107166bb0aa5b0885983712566f8e0b4471e69d88ebdb7d0173345a2cee8" + // set 13-11: 6129387663611887185666499162725019000386957238200546358846681873950634080364 + hex"0d8d1c4837d9de3b2d429fe96aa4f29fce440e52141ae4571cb1f1d7735af86c" + // set 13-12: 3229894653990057163047872622628926092609943988699832798310941005306795398260 + hex"07240e3b2aa1472c3c81dbc49bfb3e866b43f778158a3fd6641a773da5241474" + // set 13-13: 1577249093608064810495237122250056987651980088410811739655744853476971398741 + hex"037cb0fc644b2a88c90ee66cc4ddb962336347ccaecd1f4fa8eb567c04544655" + // set 14-0: 8019490235657930229602545685025618469913840887375206662306714562639338096359 + hex"11badee113262abf691cc75f28c0236812d76537940e970f4488fbce2ccb46e7" + // set 14-1: 6360514614281299182411878013125972206098844277909449064382248671632240409416 + hex"0e0fec7749cda728fb17b5b1ff968bd3b6433dd6dd6cc619e8ab2eae099ffb48" + // set 14-2: 18532505668867290379738328175003759079607042632729982459107375168365918757976 + hex"28f906c82568287d2256b56129e8b83944f9ee180627afbc9d510fdb7b392458" + // set 14-3: 8421518624327767035539667378193845962377888010421324291966623261409058898245 + hex"129e691ecb7b6fe77c01d70bf2628fe69e5f6e962f1029ce626a0d1888624145" + // set 14-4: 21508024236353721936402111331734487542417525255582275314005272967405040862839 + hex"2f8d1c3dddbd8cb59cbec15b623aa1309d12221f7c62d956815c924114ec8677" + // set 14-5: 18027689383014810715963711252886295463940938266456411644747464137365500951807 + hex"27db4f836bee8aa950940cc1732aa52d0e741ae355a8c3621ad068c043f77cff" + // set 14-6: 14484077699638992615220759300878276902226958277985946809174186953862915299590 + hex"2005b28ce7c5532ebf6b7e51d10c344c9a9b00836e4fc37f7eb1176d640c1906" + // set 14-7: 4817080763362108602919187869554992685382108795016276838137423588157592666796 + hex"0aa65efff54d1d497ece96910f6661001fb199d24c3cf997ce1e401788a382ac" + // set 14-8: 10791657063117982548380087239678382293931165307389242284595466175088416832331 + hex"17dbdc878bd81276bd23b35fe31d93f4d7cb65b722e65d58fe039d126524bb4b" + // set 14-9: 17574587559710800088797913763598808892829608388483075257576879500511250128297 + hex"26dadd32b90572e617c96576afcb2fcd9605b1d898b2366fd9a7cd0c23769da9" + // set 14-10: 20931338330271163055101602391315623325223860904427973201832184784566097488773 + hex"2e46b7b8c48234c4466b0be922a9525a8896b2d6cc9651b2f6f291cf2bd72b85" + // set 14-11: 1954574324880132355431783868495392698894997264747376529310223470792870288803 + hex"04523ff71405a30800020b61ac9a1e6b61ca68f9859f6bf1106f2a0fb66d5da3" + // set 14-12: 2551137710278149502571112114560159376697849893483916552857521579500208583200 + hex"05a3e48cdcb56d89222f017078cf35af105ab2b2e2cdb7adc3d71de732d2f220" + // set 14-13: 3997814265160290573081282672183091638735659350920634229735367532175023689675 + hex"08d6aec49dcb622b4b6033438a7b990f6e08a2d41909392a890d6ab2970c4fcb" + // set 15-0: 20759074837657564809501685143530456377562536015816086555379080667602653298306 + hex"2de53850b4466695b93e50172ffcc6ff47c882aa9444bb09652ee9f5a4f43e82" + // set 15-1: 11573288866341175121647407708978273297857024597782918874282176717371576773130 + hex"19963fd677971a8f8f1fe5d09bd27ad0676c59c6b99cc2c46d8a886716e16a0a" + // set 15-2: 19475107603336226504587469711392819869087288902355805230614724291289122375846 + hex"2b0e85311370de1c8442d4216cb8ccff3d36a6765addb8a188408eff04a488a6" + // set 15-3: 21884242265301052283286073107133504985083194336113478618838523331660374213570 + hex"30620acc22c938e923607f077ab953afc8412ab4cd325b812e18b36db9ea03c2" + // set 15-4: 11844625750737259417493690805104254337758743574820507915512371579679338049474 + hex"1a2fd212df4bf20f8e47cfe5c5285a3706f8ab9863ea128054bafa1fe192afc2" + // set 15-5: 18479163117067129250021591308069049721232170743585134941796617403156042279597 + hex"28dad5eeef0e864876e671e4a960e451d5cb11204eb0f7dedb1d1bea322aeaad" + // set 15-6: 4434911559893931929914698652677389633068778061297646529129767359157675249407 + hex"09ce122c5b6d149f0192436aeccf959f73db3968cbe69f6c2dc955c1a8644eff" + // set 15-7: 316682746098441691626372255125560321251096997722401729182940832349927288255 + hex"00b33c6fe57db259f1f62f8df50692e8d8c36a22c77234e0d81dea745254adbf" + // set 15-8: 19610390525670030492896894087745165507340241783776573708027658938288182681300 + hex"2b5b16738d4e4e8f30d8073c01e34d8a784bc6b41ec8e2afa5c8d2347b145ed4" + // set 15-9: 5840208148535790468526125686220196099566194081164771919666034943299219873755 + hex"0ce970cfdbc28f9bb3195dd2fb274f9895a29a996aadbdaa4cee11b546cfdfdb" + // set 15-10: 3679027218793663842409677356801552901605408436635647286999251784339864591201 + hex"0822416fe28cab89c713f9ab14d28a3d22a7033c1ada634ce7928681369e9b61" + // set 15-11: 9878321578558671609403512127325051261043472923444011356477587484000484178928 + hex"15d6ee8f939ad0609d6eb842084c6ca07a055e83ae2d1a0109498f8b7ee9bbf0" + // set 15-12: 16646455734597629493777237097088292344110223995728568379569260368267096014288 + hex"24cd8f5ffaa9da4f482d9efec43b3e1c77e8eab2f44007269b14614c932ebdd0" + // set 15-13: 14735311379463771264009437608444808852233202023120148855228542005281236140064 + hex"2093e404029042625197d41362d07884031eb192890e18ac0b1e4237afe74020" + // set 16-0: 3066170574229466435407264700502616839626082070514501523679452764935485028736 + hex"06c7641b87a6aff30a7828f5a61b6b79949489013a23ae8f138bb6458a727980" + // set 16-1: 7951387307333182634684754650901435973768779794218900331714625086350726274942 + hex"11945363118e8c1728e09565b5ba8e9c322b281d50c81d9ff94a18612ac41f7e" + // set 16-2: 13578824606544430966133042087468301830727811282121948825028360301706303669231 + hex"1e0557a57f3b98074694b3bc37edf005f0129ba8ab7aeef1346dc1b94cc283ef" + // set 16-3: 19848381031896652139349791682530465833719275685855743122849792015759588531339 + hex"2be1c91a0c0747ed6b472d5a6103ca79844f6fac466e756e51599951b0ad1c8b" + // set 16-4: 6922136549797750291447751953663854475218048098902194660515442295348938322083 + hex"0f4dca5aaa01292e52a8a19a994dfb8ae96163872353ec485ccf1a2c6bf2b0a3" + // set 16-5: 10287261443878564608994021014993200221021609196127927226041534661185500281120 + hex"16be623636b1118ec0511c5c0aa630833c542c80ca87898c8d8a0c9c6432f920" + // set 16-6: 6329063805909277980282354325384845982783657973381777424581891744521604640994 + hex"0dfe1f87f83f760e4779993ebb87b600763a78a1e0022f2a3c083730c09930e2" + // set 16-7: 11017548748010510224711773916683171526878158646735796493859902304094594577338 + hex"185bb62bd0f1e1ec17991ed4246cbcadc9d17af7f85d2583b555b293b85cb3ba" + // set 16-8: 7338335804036221772945379382782674399589206056354184002757176151341198318122 + hex"103959d3005c53566ecf636f2d99b94266ae10f20d7941d94ab52b1e66c99a2a" + // set 16-9: 16538115574966264108203522400275571374556020887608210819563613080068710593180 + hex"24903de01d4c24236f18e0a72f1485b8e8e0eba5385dd2ccf3da36f42f29f29c" + // set 16-10: 5138245976626127736555381649425906350640183768145541963359703291501245587848 + hex"0b5c24e7cd6e5d92ca2e92b79c3cd608a0cbfe8b2940aca50db477bbbf676188" + // set 16-11: 11347291457433539838423910567581114929056891897670787919546976342310334767900 + hex"191656e0acf10df4d56c25255747160742762fc2d37e507e563b9c2b2158231c" + // set 16-12: 16731418617609356258989018213857655050257827940403117452476763890174877962606 + hex"24fda5b8762d28c2cb390432cce54693def5c5d8cf3f1a820bff33763673116e" + // set 16-13: 5300557287595854140445529914668848275536281916366261035684431572728600543772 + hex"0bb80254eea5b1630deb61300db47c2e3e9d43c0ae79ac6d8d8e5dacb30b421c" + // set 17-0: 6573154341426354993599623914164155921131813615298607946435982334364383320793 + hex"0e88460520595dd83aefc1ea925bc7b76faabbd79339a6862c8b8ae500e61ad9" + // set 17-1: 16419308144058642981524756443290703631729426627385646905142158478345164404879 + hex"244cffc3946a184f713d5239638a2e1d795aeee5ee445c9f9aab6409e735b88f" + // set 17-2: 942314767315789144256266064192022265579304275774793342260835421710673918285 + hex"021554cd4ee080447d929f96556906a5504df942919385bc5e64cedbf2ae394d" + // set 17-3: 17945712678641984649495876620223190782305382105763957622870181201252059717682 + hex"27ace9d675fc4a5fbaa1418f1420ae54e57c8343a69843ac97c5ebcc81782032" + // set 17-4: 6497446328454795535775520142893202697197882656922991300092165933292014766725 + hex"0e5d6c9eda47e171d3f5a2edb52448f00acda78580b066fc588b39aa09638a85" + // set 17-5: 4597431274747983679157649737399090093759447324935531801532881928263496852124 + hex"0a2a0dcb9dd824a85d72255623c47308a71ac9c4b4f6bda9d273b1c1f88b629c" + // set 17-6: 20581664438782214735167492264807215952133504025063870863776714994387749970180 + hex"2d80cf2b46f3ac5285aad169e96b067b01de824253f4156311196ba6e4bc2104" + // set 17-7: 5854805250432620287068939301087113989827350315462338534819773170350910225622 + hex"0cf1b3cc75b68e63af37eb275714561af525bfbb82497cd4730215975d8a3cd6" + // set 17-8: 13548539273975522227017059057161374261181128673406746320122994151943985128196 + hex"1df43394141f318ee9571c1ed93198d282288da8bcb5b33e3c6f1e9269a76304" + // set 17-9: 7414800418339434590171697383031637744601564309993253226498272110927128779715 + hex"1064a0d92da154a1b43895e1833b6bac67e096996e0db5bc1447c30bbdcb5bc3" + // set 17-10: 1052987139013233499761917411027037646861657729931697227519754049539833189269 + hex"0253f837b9e9f89777891e37357c8654e1a5d5ea0262afd58136f1c1c969d395" + // set 17-11: 657108667626796780066815408290681939596246857020023912757838581820942772606 + hex"0173e90b1dc6b589a510c7364be31128cacd0baf495fbb9161024b880c18e97e" + // set 17-12: 19088282520683145597098955555305422198780142332183007920340899996970202127885 + hex"2a3395c5515973f8ebbdf18b8fb573eb46a4e8fc88c2f159cc6be94c7aa35e0d" + // set 17-13: 12616611543293706969401642310383814806112402432261338062963427055972449363741 + hex"1be4bfc35f47cd93bee0e1adc16a0957f824a9e24f31a32c372e97b6a2f9a71d" + // set 18-0: 9271002136483424788269278316391606491360153732024211579417926107994995432826 + hex"147f33857a0febcfe896dc770f9a2a86a7089b55a396afffe4bb21d5321e1d7a" + // set 18-1: 8228171988949250866347662896961764196608750080646539001443256474901139877051 + hex"1230faf580d4ac8a0a7d8f3fcf457f63ab27cc54c5820739bf6437bc43eaecbb" + // set 18-2: 20240081759615964816136232877050251456333669788276947762731625798225823502998 + hex"2cbf7af588268ced22cad9f5a9254d95c5f47127387655ee36dc94d70d139296" + // set 18-3: 3685474186777860155223706676482968796090983045736466861690878558020083034916 + hex"0825e78b37cc551183bcb25b98363522c0a801206000c6ded60985718b46ab24" + // set 18-4: 305741399293956298249448376598537769086716682101868856634885453070917344627 + hex"00ad0b22c9addd5f71d90a7578913c0da692d7bb9230c78d6f6273114df69d73" + // set 18-5: 14942830908704142867090451021371809832404069532430585621173997534136021340349 + hex"210957b327089cd3495ba001efc730c8f84d824fdf9448c277d02379b694d0bd" + // set 18-6: 11873341523902185373029537495825388400298468809112431373607438726587086076801 + hex"1a4012ba18c18efb60b94d7fb0fb750ba948a5c73e55ffe464ebf7acbd04fb81" + // set 18-7: 16566421774425889929886838459987430622148040878072136298073788804726016806526 + hex"24a0432f67e42bc4409433b85588fa6d16dc93432fb633ec1170e1de3d258e7e" + // set 18-8: 18314173705630320437871113612645566255775444265992974192826331109357704470403 + hex"287d7479896cec61832a3e7e5e257209609c6af97c315bb08473de27be705f83" + // set 18-9: 8597072000455186494551694692524831407069966911367008568012412188890924300508 + hex"1301c5336b7f37607888212f40b73bd0aea535cc7148be0f9cddeef1f397b8dc" + // set 18-10: 12713907619301764178052509321657058919935892208409394514649600000706175319189 + hex"1c1bd11368695d776b6d4f51d8b9a3ff091dc23b438ad3a8e00f435768543c95" + // set 18-11: 14893305145776480356274920935320977108910444566603040558476174175562031483300 + hex"20ed4fde81fe5b8cde1b1b005cc5a470003b8a12d74d4178d03351cfd620c9a4" + // set 18-12: 11027938853766719633497710751595847377263279173227878474215846011660771149283 + hex"1861979a4209de561feab4faa20b540fafe14a2f47815d1d6f756882735645e3" + // set 18-13: 6927793728403485743741891409676155921703126599118383623637742555953569891357 + hex"0f50fe0714b48545aad0aa47edf4cf85b77edef8420cadbb2ab055537896841d" + // set 19-0: 275116175553159498718561489405169511232715998055900506709208190227728439831 + hex"009bb5d21aeb5bf32e1a0a2c6d2f7a0044c7bae33fa95f6264135534b5aa1a17" + // set 19-1: 7338708370982730261395030177227912514214944721567888714384503728042214055309 + hex"10398fce470a822d6e5bf4a572fc5aa091e664335a8f0e5f4b82ba80dbd25d8d" + // set 19-2: 2285508597732647746841213906783440647997136124356359059650028586535477309792 + hex"050d8d517b496e2067860366e267a33cceafe24e53584565511927952e43f160" + // set 19-3: 15163443940499746648640851269666923560658903809778640616581862089179343108182 + hex"218634834c0bd7a41a100548c68c54d6d47e30ba6841925ce0afeb3aea683856" + // set 19-4: 37868753390676617287004841173348795594362354905038492583057282228528019603 + hex"00156ed62144c5a67173008b02d76e28126ca00a2819c0bb3eb4cc92c196f893" + // set 19-5: 19475937072595290694509025801956972632863465524774747773770243946674956142538 + hex"2b0efd5fccfbbd5f77198a0d800e01d63679db7ee5dc4213c4a1e82b47ce07ca" + // set 19-6: 1818532521520079200500527816308109106767855745862413136331026404438772138114 + hex"040540c023f617d52c1ccbd2d9e825d8f60a2f6cc6c7e0230f8c259659cdc082" + // set 19-7: 7893556755641665136576228990240239515272703124353568551151593029797349984766 + hex"11739844b03202e6faab271c897dfa7bef337a5b0672ab13ebe547f572a089fe" + // set 19-8: 21843411659343488969197036446870567462789014279182131087406329675847260538394 + hex"304aeed0c9d0c871f87128dbbb634322c5449164a13028e7f8e46ea7eaf5861a" + // set 19-9: 13883536936296384480685931731174096875043607202415233199362935327975006076376 + hex"1eb1cdadf95c5ae983ef642bfb86f103558afc4571483cb7585a00715580fdd8" + // set 19-10: 3061885619227488514362869971925298711535995206671454426027635264218303442708 + hex"06c4f741b7246e5655a575e85661422ec7b71e79535db2ab86ca6105124a2f14" + // set 19-11: 18477632669759047471715211461337808302603089797347923153039515976242018999984 + hex"28d9f82f7cf626d8bf29d5a074bf2e8a64a11e8b415465ec3366cc0e4af15eb0" + // set 19-12: 4953684980989921770137053964305439167945572062294709110871332076115076441738 + hex"0af3afb40024843ffe9126a492594cff90682e2c4afa7237bc901e70a081e68a" + // set 19-13: 849590699713478394267684876803414882497887483062076673282369901261463387635 + hex"01e0d9ee7d4bfb5b07b2d9102409de25c281bbbdd10f2bbdb04adf4a2e467df3" + // set 20-0: 7481617454708320190331411214970150566519243590120906863698168124347483283307 + hex"108a7206cd0ab67ebc298481ce73bbff082a5434b01e26d8ec53ea69f7dddf6b" + // set 20-1: 3790897889674729687102011235738708037383393765058266352188381434189575086080 + hex"08619279b0aa0c5e4f7e0ba18b37dfcb3ab7762debd778e1675539e2023fe000" + // set 20-2: 17582850308142585333519054672998882111865339708436809129995518706804527076353 + hex"26df8a6518857f2cf15a8dd27eb05fd4854710b80ae479cc3dbb4963dbb61401" + // set 20-3: 18961585057625546222763334757505522771740769338010572292783220912986926586854 + hex"29ebe07739ab8b1f23d828751d533ea3630788c03835c7ade9de2fc725639be6" + // set 20-4: 17761332237343741278668998123360108574589045018570742689473320560784505694171 + hex"27448ecbcaa51b958aee7c6415c041b815de8940e427fe2152c77639f3c5e7db" + // set 20-5: 2985768806786881176362869973473950745997650698247163897069614623128281191971 + hex"0699e2a03a056f4a0323541d174c4d8c1d71a7b04c664aeea06aaf2f97849623" + // set 20-6: 14099532828736062687388547070054719462342298981811592749594569670955512096417 + hex"1f2c0d82e6d3dbd8f29d81dcba037666a0567564fed3a90a34f4c2a0864fe6a1" + // set 20-7: 11038429458121896617356666499000022639824993159854464409767840206807807728043 + hex"18678798666318a2f6c93fc93d788c258f01c5aa450b65f4927ba6308f7a99ab" + // set 20-8: 7092464867594165410092487979619486929166817679669939558999555261465867685619 + hex"0fae315f1aa96516b51b9a35b0bf04a303290f7a4b0f107434e88c9b897d8ef3" + // set 20-9: 20690943609696626243672018055336898909740557628366317533030490341400911534771 + hex"2dbea8b90191f27ec6c6a71c3b576ccc10b6945a2d651b526b36c86929d7dab3" + // set 20-10: 11468803355345327303851639215186997122074583511720489615730106184659306943551 + hex"195b1cd7777a95a1dccfab7ad95d9815d143fc6d86f974cd07417038811e143f" + // set 20-11: 9723340381470060111632263437706139036358918795037011403763820908081655273682 + hex"157f37337b54b492a344d0bdd2d2dfd3f27a74d529898ae3243bd532983b58d2" + // set 20-12: 15929497108714526572140462634902391796285476840034863688822264979709196730555 + hex"2337c69e87af024d6cb0d8f29c96ee48114d2e7b2c1535ad6b00e178977380bb" + // set 20-13: 10556139316790113226399166507094772235069235781001645893008903131855134732783 + hex"17569028d04252e77d46764676068c2e1d43bee814688c6881424210bee531ef" + // set 21-0: 9679690373149117563754317307037586538394929348733117229177073999196519450461 + hex"156682b6b037656dd8a82fd83ca1924074f752a207b2585ae4c9ea6f4c78c75d" + // set 21-1: 13953490152873041611053779700802518995304489998104548903919774028525032867964 + hex"1ed96542fc65f19260e0a755919c2e24659105c4c9df00ded15f93f442f6887c" + // set 21-2: 8584860336778813488021026261425560177968889952950706471574873674510806966419 + hex"12fadbd7a3c4fe425a3f30f0ddb2f375e471a373f27e43c8a494d9678e8e6093" + // set 21-3: 8400619522468195192079024924375785176686244213372269992523849676384018875300 + hex"1292950805f2f6b9f28b3182436c2a975dd365a59195dc4df585e87395c7c3a4" + // set 21-4: 16018239095599670975582212156736908990475077583136160880304021421989907078233 + hex"236a0085c40b7af8c4448e830057b33fe8df95a33647c37c55b225bd5f8b1c59" + // set 21-5: 13442762142079759258078337448325782252795445513077684243558458356586404542166 + hex"1db855703240e2f49d63e43c62f8c30b2a39b67bea6e9a9481146c046af276d6" + // set 21-6: 8012524517439221218249889438165569497775551565363444399021079689755695756644 + hex"11b6ed9c39e7cc8f66dc7f9b386ba00528af573aea6d008433d39881470fb564" + // set 21-7: 18993442931337392722189844722480176040693468853419121807183123246184718322422 + hex"29fde8616fbc9e483e1222d447832cb7bc58170c7ec86e8f4de9070e07eacaf6" + // set 21-8: 3920077716342530896195446297162279477088824676672184510151991496745985467962 + hex"08aaaf73c42c827990cd0c64687ae8cfa0b373da849a767ef3b63ca08327663a" + // set 21-9: 5663885918690734602622426696143772526257235018784490039324179199552252272203 + hex"0c85a554dd2ecef748e891cbd90386b5737d945603b56c887986f9a306d7de4b" + // set 21-10: 11007942216549411481832816505096362871539130535791764225892613523847180067807 + hex"18564645c2a77acd8cde744455ead6f28819282b59f662f7da89dec13b7623df" + // set 21-11: 12333277086717649179464584335417603775633093807601488202185840108448843332123 + hex"1b44633048278c6435e1449517b0235bc9f4c2cf39aaf34908726c3dd3a07a1b" + // set 21-12: 18845646001611639216437777320622198530894193094859924604338859788769244491906 + hex"29aa41f4a0e91cec6a4481c3280a94398f6ff1b0b07b39ab0e6668dde4383082" + // set 21-13: 4365664869724113934112630479809518948808449158812862195377335314227128146059 + hex"09a6e0f5ddbfbb30481e978e215f67468f31eaf930dca350f0fc53bee83f988b" + // set 22-0: 1895928299034844696630794694609519515092896092191683631304721647222032914779 + hex"04310eb11496a8955d0a91b51aead8dcd1703cdc4b0e7f2f4674ae3e588b595b" + // set 22-1: 19026513891744713045426845531420132126578554294461150386909840193098440147673 + hex"2a10a00f88b3abcfdb5d1c8dc9f8727d16373ae7fd05b239f7e5bc22909682d9" + // set 22-2: 4073281111734161932072345995811001896063226222777392994725894652964051683943 + hex"0901653987feda97752895523e956cffbcaa8d3f088d280cb19cf4d71f010a67" + // set 22-3: 13362867147840304033834065229457670563442204439046527165143934160967798444725 + hex"1d8b1d6227e7d72dbea884042ee1324bd31a5fbb7ed49b79f04e834245a552b5" + // set 22-4: 9724485076061228092177286932258189815958450833155679889060988975712535081230 + hex"157fdd0e905e98e890291c69bdcdf6307771876bb8288809b44e63bdc934710e" + // set 22-5: 1627333086421877964064603957348348763696708139082607562629629725119997724989 + hex"039909b2ef090b39137e7420aa7ef195656037f3482b4fc10e554341d68ec93d" + // set 22-6: 15641874381988682075545920458678901707167602315586561132909307694310257446023 + hex"2294fcb6a8d69542b31f9942a59c4f4503e188912dd1cff39640cc2217e1cc87" + // set 22-7: 11034182059786563285109970430313289917032071817373248775707546493147901388113 + hex"1865202fa3c02e817f2fcf395c446a3eecac5d97950a44ffe1e8d299e064e551" + // set 22-8: 19299574745226772810381056007321573284793444116746272581694295128392282602507 + hex"2aab2c1581a7dde08e01d9efd6c7fdc561b8c7e6fa75020b9534f2d3b35afc0b" + // set 22-9: 6482638271546132546782310681506292669989505915370438641175376336582811537739 + hex"0e550b117eb8b4be6223be3b32b3367819c099e5cee581ef44a2cc483073514b" + // set 22-10: 5515138970831679245126906315331906152285174207704247085730757090763031968272 + hex"0c317541eccfeb5a470e62a4a7183b1b22839e1a1c23bf58b6ee43d1fe87fa10" + // set 22-11: 5476746571008230667726688443817396210804752373221945489797046634505665572661 + hex"0c1bba8cab5dc7f68592841c2f9cee4e068d6791e55f4dd54edf7ecf336cef35" + // set 22-12: 7666694240010574980777401583687953099995588711474009270339615112182231942529 + hex"10f331f64e0bfe4a9226e772e395f992634eeb6219cc239dd5d8e03cbe1f4581" + // set 22-13: 5345423812126487230177352826531606752132805611025916574123407915411930666385 + hex"0bd16714d1d83b871586d6c721608db6150796aa7d942a7d6b7f37e1fe54d591" + // set 23-0: 7211419275788152379372992549185439317698375419836488104253705518694042119228 + hex"0ff184c75453103ce3e832ab21e3f16110827890bdeaef035641417fcb9b2c3c" + // set 23-1: 9112140750806762434510825375931543886135367141484613422947675423683311130537 + hex"142549f5302f25b6f4fd1abb1b586555dec7abb108c3d988222356f8845157a9" + // set 23-2: 12020406779776320543918475257645763209221278449775176154727249143619468329590 + hex"1a934f239cf4d919aa5a54e5706f63ccaedaa2a523aa75b6cb425fccd9b30276" + // set 23-3: 6961266423823329910790066424248133365666435921221127260870444632539329606224 + hex"0f63efea5bb28d9047c8ef3d06ef698f6eb8d69cc2968256b56ba2c6b1aa3250" + // set 23-4: 3527954161191330198309290076708590175518992377857531220243324230315686986882 + hex"07ccc054bd8707ae6a7e1136a7d734ca437bc91640e819bdb1161db6285b8482" + // set 23-5: 4506493800007416260514839382433205292331764028735360433653631210611507932973 + hex"09f695c935d12262fc81ea65c312cab7c604cebf8a7a8e32199912d3fc172f2d" + // set 23-6: 5530043493028748853396066194331787195114268917530734310055878976603589658986 + hex"0c39e4c9610d79d226d090265c7f961ce63aeab2e824e029ce1b89601913496a" + // set 23-7: 6225101949608434111198442012357272827532649788667254718474232856896193900534 + hex"0dc3486866c4ae74c9f7227bb2bc821fe2ea1a265a34e961cfe8e0548f0b2ff6" + // set 23-8: 18857681750145313162493356993928966938826030906289025101399379263672964054354 + hex"29b111d35a7ba7b41a2e65e5412dcceb796b31d0d87b9f1a4d24b028f2377d52" + // set 23-9: 869004496821135911657110194622810910776043851317139916414752924319830673140 + hex"01ebd6d03eef5c45e78c52247c3282fcf64558e43ff15e1d39533389bd7a86f4" + // set 23-10: 1563829187789877652048924285544523323087888587074484491222967490033068091506 + hex"037518906b748ee732531e22b29338f4a4f42a0f216226011632c4fc7a592872" + // set 23-11: 3746011388196035005128740753677692387874351474501361202463946309770129429478 + hex"08482ad4d100cefeb5679cb8b4f6af5aa6b87f87d0a7815aebb30da0d927d3e6" + // set 23-12: 8923361680602360491637539340186330583808472610027697444204036893010926051377 + hex"13ba71984e13a4480217ff47b1055dbef0ed7333ff8403935f10785b4d212031" + // set 23-13: 17386658730777389148551542774423634880430074554050371095211396948875032586750 + hex"267080070a80b5f94ea5c4363d2d971036e8446f2c055ca49495145eca1ae9fe" + // set 24-0: 18803497674827878184210135371703804206276128582022416604041787392310845729622 + hex"2992670c4c90a20991d63058dd4a885b9ec25f2307e6dfb364be99f0ab596b56" + // set 24-1: 6590008305704976915857671866558706505394630312395969823040635040879201337002 + hex"0e91d00167f0fcdc484e4510cea659d39a58ea6d94188082c301d82be3a5beaa" + // set 24-2: 2714759247406808259589803854440914533632699567907406761316959511568030744066 + hex"06007fd0fb2de248dbc4fe010a14285eb1c67ab1035575cfe2c4a46e7169be02" + // set 24-3: 16299600292583383998706243035294548578562168326056377699804434906128380481545 + hex"24093f309708216779d4be610fbad6c37027359a6cd9af3253023c94bab25009" + // set 24-4: 18030052417377603682453955579175094175373404791176719861146533099419481910116 + hex"27dca5e53ccf2bcfabd9f056b2381845a855bf7947d600e6f85117b69e57ab64" + // set 24-5: 8281176924556272137773300347187527516223668703826908452855802099328657344885 + hex"124efae3d5bf327ab6ba6d4526a495aa613a1c141b4ccbe97dce4d2174af4975" + // set 24-6: 11849913964821118293258226409033507680960291656604016015128854810099746642358 + hex"1a32d049a2624f7c385673c88d7fea82a5c517b7fac655774c395cdce73099b6" + // set 24-7: 2718653438901851962181612429288634518502998150085578586248082443515454453331 + hex"0602b40c9255dbac3b084808ab31e76a1f050751bb6775dbada5d84691d27653" + // set 24-8: 17998120665039026798317726060462551095622279047136565816648549826384179735803 + hex"27ca9346b73ccb979a8d2890fd43bf51eedcd0a78af072f64ee41abb954bacfb" + // set 24-9: 5133986071087432716437635164720916024596119526725252628340805179596147643344 + hex"0b59bbaf1fcc4321f763a03b112189c055a31078afd0954b7d7ccf311615d3d0" + // set 24-10: 10436725621240227608920674037516192343160590540839553356331196590007025190330 + hex"1712fa34ac64c32e7ba17168f04876190ff32077be969a20cf83be9d04ecc5ba" + // set 24-11: 15618861474705274368161439159831328775613537777134266634959100526889759124590 + hex"2287f65a7cb3a473300d133636ba395a1cfe1b9cfbe68f106f114d46d453ac6e" + // set 24-12: 2511040106219966488942941427805413210834998861588095124665874406004322450915 + hex"058d32c610ee7b8e0025aa2f8fa532b3a6a45214fd7df4c35ad5112f545fbde3" + // set 24-13: 9256734357641210393451356199893573129989430877284906007481196262323584132500 + hex"14772040257c0366286283200970b7ee56d048cf3f6725fc8d9651a8234a6594" + // set 25-0: 9325238625126515763679853550553375879158552597544709459784109512243397955590 + hex"149de5e4a643c98e7261b75a27baeb89147605258f470c0291bf22880e6a9006" + // set 25-1: 8484194759795978556088297437107686617328133596604796277228418191688537911573 + hex"12c1e251dddced6445c3dcdcfcccc1c36736068f9e1f7bbc4063895df782b115" + // set 25-2: 7354463117736585470843139230227589188304331389476818932256765377140053168035 + hex"10427a865028d998dcea094cc2f8d0fa2efbd0040d0b118e4415dae71c92cfa3" + // set 25-3: 13482530129860761195447497269660263095272961608736579417124458190809007451755 + hex"1dced774d8572bfb42107f480682ff1c5ef95f657787a06997f53061d44cee6b" + // set 25-4: 14565877561081097978808851096191380459292726072163754601747539666057949167693 + hex"2033fe9a65b025cd7e27764e34562fbc6391cf8d31623f31b68f03d6a1d1404d" + // set 25-5: 2135718143241813932226161801358235289781058013695871838383051572102928884567 + hex"04b8c60cbb003fd65b2886da9263ee92021683e1af25189631d1725df8c16357" + // set 25-6: 20522747851108608773003772892187458826390403588440155512773881116135635256410 + hex"2d5f76b195591eca401fbd5d43e2992245ea9a4009a8ed600fcb0962ea5b845a" + // set 25-7: 11218511591600821722003994140994121719832310771637604152054113941332818455369 + hex"18cd73d9f8a31eab2560b9f00b08cc4517309f7100c34df4c3aeccbb3df8eb49" + // set 25-8: 16404237709834224719800904205708261378663612035126521203425485585484994986837 + hex"244478321b4748aef75677808a6a5d92a6964f298eb5e5337621398b0c1a4355" + // set 25-9: 3167586669955731698085513002461997957955073343333183557668566807567186590619 + hex"0700ca5f97215da057c3a4a16a260471ca887e12ab3a9fbaac6a61c67c38fb9b" + // set 25-10: 12910675356590890481798719900077391291951346627685199305549632303581651173802 + hex"1c8b2eec6c0535832e1ea214b890bcc72682c5bddb39f4ddf34500a5cb9a81aa" + // set 25-11: 20462953503625657093808736208830478011818679863351201550868889073055617578896 + hex"2d3d9f09f802a02b7324b79e9681debd2833f6238b22ae6622ba1a64e744f790" + // set 25-12: 18947108562530644410102590841857357185115081182319111952079371871969663671988 + hex"29e3aef42dc679892840c82352fa28d9140106d6c2ba6ada66fae52bff965eb4" + // set 25-13: 6652719222291337824561052377450295064566587460338214284424446330320206208978 + hex"0eb54e3e94c92cd24f6ec52eab577e80d8c8e9f2d39d6b8d69503967d9809fd2" + // set 26-0: 7333723286812204168407439917521565157977670700382476881790986792115201279410 + hex"1036bd833a94dd6a85559c519bb7a2769b6486b00d34996da228c08994f285b2" + // set 26-1: 21462572925415337738214437933606587540653694853107274549824898449394152530908 + hex"2f7362c30b976680185fcb2d6c1a9fc47ce47e77d3af5b773534e2ce7c2063dc" + // set 26-2: 6820993392268884858152757378169835647522978080101384568523885945756789014349 + hex"0f148ba271ab4c9b17837d44c14d231fe85b7644462249299a68b506bff87f4d" + // set 26-3: 16253055713127198337468919465234896268161918860396508551871391729457324125212 + hex"23eee74e2f9b8ee256ebaa6e03b545afa196f22ef7e96d7255f5e79bbb786c1c" + // set 26-4: 10110377608880446364161064735161091842938826397512230713135002732708361876777 + hex"165a455c205655a47926176b91f2d2c02ac5c00ad29b467bfdbd51b0768b3529" + // set 26-5: 6013899729219769410326935661934883558337463050053435907100782150692294649745 + hex"0d4bbf22a70348d22efdd5235eb6e682385197b4e17330c46c44ca6d5dfc6791" + // set 26-6: 18208889227209298598015138525374980382541030144328510393048300775270787949840 + hex"2841ddb730006e521446f952117b78effc601d10372438c4ba4f6e2608e9a510" + // set 26-7: 15191444075449840811990314906356975059662539527217455842253932605838538105879 + hex"21960d7a065af49c4c06053d32596d990c1a43cac1658dad807ae48de098e417" + // set 26-8: 19203188682890514423320800755662084436821947463936810212920115637567986869322 + hex"2a749e9fc0fea8a55e57cdb05166ad9692c00bf103ac30881c6ea8c6b86c244a" + // set 26-9: 3424855308164288636262956984024538145687254883958282264766019244372264927134 + hex"0792663fbe195bacf4bffe700777c5fb07db9bcf94404ce90d0ed74a50febf9e" + // set 26-10: 19586353501601321585672146098476085745700368665390426128801697725086439710122 + hex"2b4d7bb4c6dae168809b1e8687e2e668d2680f40733b7d6877b27eaaa2021daa" + // set 26-11: 15010004828387861046033155948517332272437733117418549079342100218646019702080 + hex"212f5c9650237c6013810fbf50f8c160395a487a5cd535ddcc85437383d7fd40" + // set 26-12: 13686339229559293872534012092085760944059315023471369613822812965287369238447 + hex"1e42318881baf153d5c6a0f3ae7c933daff9cd10c89c0f7d9c1253e65995e7af" + // set 26-13: 3695584012986626869153168308549979767804807828687034680677188403817830418810 + hex"082ba05d83761cb163b4ca9d55e5dbb43c74bf3f456988438da2b3e62a90097a" + // set 27-0: 11102327427527201346056529148642207216130990405495165914761901542247835149412 + hex"188bb1d3cfb110267f28a328777328ee715c575923e5517216a551b7e4bca464" + // set 27-1: 17544563341965869668707473190805417639220912289969746146554006791986582724590 + hex"26c9def697692dbd245316df1b3d3ebc23d2e7f26282bb8c3c77383b633d1fee" + // set 27-2: 4470848226757772603246285686584200798638888970547659211297578619392420918858 + hex"09e269116a30414bd9701c5e0878caadf29773b5e4c010a7f519d6c8ed4ab64a" + // set 27-3: 4999887962989142396481351641254451370620928952306237803174890583736074770292 + hex"0b0dd617d9c5b993d32b538129fa4404c7371453aec2448ad60caedef2521774" + // set 27-4: 18696621645163318552472841991871104820660024833640321869898695219244792544787 + hex"2955e9b0087cc084f3750b6474cf9ccc1b91b93088093fb9b65512bb41c7fe13" + // set 27-5: 16940838088709411711968888146075539661653566927745755478421474505108166140656 + hex"25742cb05d49c540c0db2fe8cecba3202fa75c3652f8a0632c901284718de2f0" + // set 27-6: 11530916114120676768574532193664705720045810431665651204245333670674998923676 + hex"197e4469bc4e63f957318e61dfc0b47f3612c833faa62fbbc758bea7747a919c" + // set 27-7: 7355883923626920336916662475522243088902821161113628716197989160163721774248 + hex"10434862eebeac7e95316632cb2a81e786f3148d551e82d4b5f3952dac0e84a8" + // set 27-8: 11855011297239142909723378707832446926509921514737098047687587969894126468497 + hex"1a35b2d833ae99e441f064acd0efe3ec75d0180f0dc898edb2ec4e6104c43d91" + // set 27-9: 14942813403879667533705178220673159254886774089783887482228941707848831481300 + hex"21095529dcc976329670baf3bc91051208b4d62984741144c2795189811c35d4" + // set 27-10: 12982663140753853847528768000921561826340636419307931766400467366396846035169 + hex"1cb3ed4bbd682aa625880beac8855c5fea04d41e00eab4f0d06318c229f650e1" + // set 27-11: 7171806600323437636744282845777660095738436086868856062406225133619265520575 + hex"0fdb194388dbc4bbbe4e95fd302d9cf15deba158f7c686da98f0c51b56a9c3bf" + // set 27-12: 15982491779929281894294451486893882850583039973528579274058985191703359466543 + hex"2355c510225e1b58ab2af9314c08bd8adff1ada7c9a457c0c1deb47b814f2c2f" + // set 27-13: 19910319651211685401050894240685395121165652955380089146603485967076493605680 + hex"2c04d7711fd02ba586d4a50ad99a1723e5bf2916b4b5ecba863947a98fbbbb30" + // set 28-0: 5314337765479745092537090978913989310916802510812096192767666377841447850226 + hex"0bbfceff43f6717beb8ca8fcefb59c672661fb46da69df22870a4c52fa4cd0f2" + // set 28-1: 19811002121850954821192061183148615163420706271800817927960207430256612524059 + hex"2bcca13d376d46c173fc2901c265dc09ad688e67b9726845e03944ee966ec01b" + // set 28-2: 18254735365473444026840717290492248863101576601864757410600437101587001057517 + hex"285bd066f7c5357304cec840041d33e776badbda4e0007a505004e070b9520ed" + // set 28-3: 3428844080448214358238191483671878854080864964895729401025193865570307658787 + hex"0794a82f878b218f741d0cb293956b5273b429c885d893d1113d73aa26c1d423" + // set 28-4: 17688699129722255312471132988267997472426043097741089176095207368928695347323 + hex"271b72ec18a3db9d3d0e838edd70c2ce3869f8dfa7a2990839b8dd9e1172e87b" + // set 28-5: 4698778325800416923484519718058460264124242609977080857699400967590134848728 + hex"0a636a0eaaf2172cf943d025179ff1617471d89f89258b34a3bbca00641a9cd8" + // set 28-6: 11905991584861721837480962390330989450197421918781662074678555052926188909272 + hex"1a528d6c2a802448da3ad3d59f777313c16a671482e39b8cb7da9ac35c1ff2d8" + // set 28-7: 11195321655863853696452219195252788379254952714823481930861848719672010792417 + hex"18c053d772d3b5a8a648244ccc209c808ebe141ba2f9d5650d0da14819aadde1" + // set 28-8: 7364573423043519994861038175593500896079924196888521130462378149111415036167 + hex"1048336a6121c302669d43eec43639872901bf281af7a1688aa3d3928ebdd907" + // set 28-9: 8488161531239994007634631892382512438657593769374020273048837520623507271908 + hex"12c4211198d7728995d57f5bcc090cf7beca8045d513deb1b175ebb36796f0e4" + // set 28-10: 10948897450624334536526533930990935852623955696383743452358741253735922067160 + hex"1834db39abc7b5ecd1a514dcb9228530e81361aea5811ca208a650daf968e6d8" + // set 28-11: 7654175296077985337834288232610181411799310934515705881481549241949669590123 + hex"10ec1c14ddd45f0d5cc72b4bb6c9b567381cd3f8ff34d9591c48f845ea50846b" + // set 28-12: 2456818423512317060112219756429819064402183920202453945509918337536940292593 + hex"056e828c137df3632d6225d8c3c7df355ea62f2e0d113a7e36852b6764afb9f1" + // set 28-13: 10561627566351771351550703479997725668661012955063201536370060753602302262655 + hex"1759ab5b4dc7063a18dd2b491a4a3d073bfdf8f4d33df3f339a83e3ba2953d7f" + // set 29-0: 4310089243116651250383251477034324245457116277666484671624575402227833925755 + hex"09876c8f4e48e48b158ea3f41eb7f19716f44512bf7cdaaeb3915798ce22707b" + // set 29-1: 11882651094700172542567008359015417490389070633573140242127755563781024148099 + hex"1a45579944f3cb644003ac2430ac63799964bce8f0125b487e5e84f986f46a83" + // set 29-2: 9304328383406369649010049197573360507944684656613297568584394172735340111263 + hex"14921030ad6e51af6e9a654d191b8562e8acab6542844de111650de2ce37659f" + // set 29-3: 18874624159090765871635243875933482675871258293088886749847315202391523956097 + hex"29baa8a03a66a40d48856ec10f47f554e884258e4eff26ce0f15c6b5171f9581" + // set 29-4: 21295163659036117126535933666532228255134275601226122998452204301238438701469 + hex"2f14a2b03d6b68f4bf5be1acb77702105951d5f13a423c1b21960b0c129fa99d" + // set 29-5: 12010652807420347304532358791037860496459429689113682253200903987591679627067 + hex"1a8dc9e0aba8f76e0f8bf6db5523758d5ec321d0857a2df1134b5dae2faccf3b" + // set 29-6: 16035147304145989851106586435462674695447030608653337914734493255503105122271 + hex"2373925e13c17f70c80783a3664e984c082f251bbe3c4698dff5daf3c70e5fdf" + // set 29-7: 9396862051344040260236487045030117425080665841603826234795752404308634565281 + hex"14c66f792e18c3133a0ec195583065986f5d8f297f5750ed78aee7b7fb6efaa1" + // set 29-8: 9623434193020540057685957851610556657916120473978726845338192370747426064401 + hex"1546abb4feb014cf7206953bcb52e5f16ac8d232723683674bc02854efa9c811" + // set 29-9: 20738972702824723087864078264786214906718601061526079118500228332898388551221 + hex"2dd9d7b31522a6b7fb653afd18e987a926fbd5377b5b0e415cf2614bdf0c2635" + // set 29-10: 457108501000029082366810998923133233303603111079376685755578228260824733356 + hex"0102b6d8a26892985e76fd744ab01d06b524f57d634fc0b69a5d91355398d6ac" + // set 29-11: 13918719735797746251051948238671198059940858851588937008268023917020073366433 + hex"1ec5b7588982ece0b103edde74a6f327e6ccf694bc534195fe0effc7483f13a1" + // set 29-12: 19519317439483352367895890468095276150233498159453735432212409926941855183358 + hex"2b278acb099ad84fbc96b27d36269ba06a660e2bc9093059a2acb1998cf3f1fe" + // set 29-13: 8400170000010792082337905010575114377571921640630709589910201278654198179035 + hex"129253e64f00669a4cf7480180edd5c242544581499b9a233f0ce088acf1e4db" + // set 30-0: 9476241965146735006848999585927664857836027675817848342111996150638876938940 + hex"14f35ce5d343461157dbe0adb07355d95d2cd5aa6dba222b6a702af1e325d2bc" + // set 30-1: 20383112265143113621158547584533108172173014612497300318772355462448750327634 + hex"2d106ec5d71809dff7aec68762661bdfd5dbfe456cba5a7c150c73da2510f752" + // set 30-2: 10370498046215116715134085566322498900073301617448752966999679321197451973184 + hex"16ed7e6f631af32c7e9c7884b0ab0cf71a834ddc4c825748eb5d35451d809240" + // set 30-3: 20733082136685384602293372077980283048183069753990343452404863587763569081917 + hex"2dd68235d74c633a111bd167dec9a6371b137ae89530106a928c87743b38be3d" + // set 30-4: 209896847902324756441033880218169809685412620378498856437573937154846479551 + hex"0076cc22cae0c2544d7e6d49cb00182253dab5dfcf6cbdb378f56b0714b9d4bf" + // set 30-5: 19434208870058033389225349051527401299247475125763108527095891214558119617655 + hex"2af75f56bee1cdbf00f1a0af44ee6ca3d7f8b3b42d38f87bf1da869240dc6477" + // set 30-6: 4154375339831547300427516624109559852426973786711444825735879648391004291098 + hex"092f4b09a0af31220825e29d275eeb08977e8d3a6a934cc16a6d562b2eca001a" + // set 30-7: 2168897082728012692838287354581700563166925732559863316849698306675591131396 + hex"04cb8d5ffe9fe85b21a785e261721288e9b5b75b400545a31d0d53270608b104" + // set 30-8: 3690054103601385333490512469861728231387681704127049683413276534001532261943 + hex"08287f21c644121d27ec9aa9f50ccbce17e7ebe37a9858da78ca1d207bd9d637" + // set 30-9: 3997073653940540957268729302105309759820513901669570962308110503858257659002 + hex"08d64375d1c8b872172ed0e50612b60c4b049e807f23d6fa8f4e61e06d52047a" + // set 30-10: 1493108383089723041516694658460301260449183718295935886883417227290045091286 + hex"034d11c3fb63ed48fc75af072a1084b3d0982b796c9dbb70c295e4c938688dd6" + // set 30-11: 1479721274324005701970059663387618978577823761358404739977258141309872068056 + hex"03457e18852f8480e869f8aa0665890d85a78c5458b77f682cbde6b7954b55d8" + // set 30-12: 20291086357406391640638647514048720424247838755446061571102712546958076851767 + hex"2cdc590f35d097cd61fc65b0dbaac9cd05916c807ec0e318de09c55d6facb637" + // set 30-13: 6860718845648137601753080432837091439893783461195961430761483584544410630099 + hex"0f2b077d67767da3df753109cb25329348253b3bb8a474b8f2383d269e7af7d3" + // set 31-0: 7929983584961755765377471515178883367433439212271736050025708429355823243624 + hex"1188362ee1c47b51ae57ee87cdc133d212b205f43ad871011e82684b3251a168" + // set 31-1: 10728358412340769313351519567620170787387770135423141966436844748162218854008 + hex"17b80922192c7ef6e95042838827e749bc017d1a96c6e69f4d945f6a40c80678" + // set 31-2: 4169855297038740915695363102363044976292665711211255871324667594694964037773 + hex"09380df1270bf5638a0dd4f2c7b7af4a5798b4280a4c98abd97c99272b34488d" + // set 31-3: 2424224908982307794171893487036131370038399449016750026546326391873466118335 + hex"055c100b6e332bb5d2bf6ba8f3f5945bd877926df3eaab055c5d42be090db0bf" + // set 31-4: 1265438250797513961458031163301351393237543067943565114202366151377865506872 + hex"02cc36716e8608d8ddd908e019707e77d50ecaae8f83a61fac66303fe0d98038" + // set 31-5: 11342865295714982458109220575532930834959120923837779800176462280225501198217 + hex"1913d591367d4749326ea822b20c1f015974fcd5ec6d659aedeac7b56f6fb789" + // set 31-6: 10415384677581396651184780193811022815145977389536746022901590915883889609878 + hex"1706e619141f6b4a93840023bb2342e759da6438e07ed974a5f1e3d506144c96" + // set 31-7: 5311187015233522007413118391261106264838418369874755037462489089469638365756 + hex"0bbe067b718cb861fe927716cba85cfc466eed0e9d2c1067bc7f9e356bc5d23c" + // set 31-8: 7499079368996193403750547553190134606728655877653629403923945654291953825315 + hex"1094541933220c2bef5ec7afe91782ec245208d58f93a08ec25eb59710a73623" + // set 31-9: 1743769713774086589463238504150542785039161133276706463569974209707667651575 + hex"03daf04d7a256119a10ba5f6653564dff54f8eb78577360ac477abab5ce87bf7" + // set 31-10: 5792276842105452143354445764064878932177699791644537942211472215636738768211 + hex"0cce5000e4686fab8ca621f1c65dda94eb8b5892b1aff79a9a5eb0a2e65efd53" + // set 31-11: 9443070058088199873709166495831389298947366881168483562080569357428781583046 + hex"14e0969768884cab782cafd4b81555a818559c4835fb6821ec46fd08ea418ac6" + // set 31-12: 14451507664847323254023899990839043037382802537389529773382951366995420730648 + hex"1ff343732becbc72450b2faedef7112b951edf2ee03bebe4b71365755e6d5518" + // set 31-13: 7633550475637360595097128986678209600092185294414596687526062925070686318486 + hex"10e06fbbc2176bff93433750bcbfec05aea120f193a1e4c5bf5993e098916f96"; + + function get_pts(uint256 merkleTreeDepth) public pure returns (uint256[SET_SIZE] memory pts) { + bytes memory pt_bytes = VK_POINT_BYTES; + uint256 byte_offset = 32 + (merkleTreeDepth - 1) * SET_SIZE * 32; + + for (uint256 idx = 0; idx < SET_SIZE; ++idx) { + assembly { + let val := mload(add(pt_bytes, add(byte_offset, mul(idx, 32)))) + let stored_at := add(pts, mul(idx, 32)) + mstore(stored_at, val) + } + } + } +} diff --git a/packages/contracts/scripts/utils.ts b/packages/contracts/scripts/utils.ts index 9a6b0c19e..11b4a00f4 100644 --- a/packages/contracts/scripts/utils.ts +++ b/packages/contracts/scripts/utils.ts @@ -3,7 +3,7 @@ import { readFileSync, writeFileSync } from "fs" import { FactoryOptions } from "hardhat/types" export type NetworkDeployedContracts = { - name: "Semaphore" | "SemaphoreVerifier" | "PoseidonT3" + name: "Semaphore" | "SemaphoreVerifier" | "PoseidonT3" | "SemaphoreVerifierKeyPts" address: string startBlock: number }[] diff --git a/packages/contracts/tasks/deploy.ts b/packages/contracts/tasks/deploy.ts index 9ea16406c..f314b67ee 100644 --- a/packages/contracts/tasks/deploy.ts +++ b/packages/contracts/tasks/deploy.ts @@ -3,30 +3,39 @@ import { task, types } from "hardhat/config" import { deploy, saveDeployedContracts } from "../scripts/utils" task("deploy", "Deploy a Semaphore contract") - .addOptionalParam("verifier", "Verifier contract address", undefined, types.string) - .addOptionalParam("poseidon", "Poseidon library address", undefined, types.string) + .addOptionalParam("verifierKeyPts", "Verifier key points library address", undefined, types.string) + .addOptionalParam("verifier", "Verifier contract address", undefined, types.string) + .addOptionalParam("poseidon", "Poseidon library address", undefined, types.string) .addOptionalParam("logs", "Print the logs", true, types.boolean) .setAction( async ( - { logs, verifier: semaphoreVerifierAddress, poseidon: poseidonT3Address }, + { + logs, + verifierKeyPts: verifierKeyPtsAddress, + verifier: semaphoreVerifierAddress, + poseidon: poseidonT3Address + }, { ethers, hardhatArguments } ): Promise => { const startBlock = await ethers.provider.getBlockNumber() - if (!semaphoreVerifierAddress) { - semaphoreVerifierAddress = await deploy(ethers, "SemaphoreVerifier", hardhatArguments.network) + if (!verifierKeyPtsAddress) { + verifierKeyPtsAddress = await deploy(ethers, "SemaphoreVerifierKeyPts", hardhatArguments.network) + logs && console.info(`SemaphoreVerifierKeyPts library has been deployed to: ${verifierKeyPtsAddress}`) + } - if (logs) { - console.info(`SemaphoreVerifier contract has been deployed to: ${semaphoreVerifierAddress}`) - } + if (!semaphoreVerifierAddress) { + semaphoreVerifierAddress = await deploy(ethers, "SemaphoreVerifier", hardhatArguments.network, [], { + libraries: { + SemaphoreVerifierKeyPts: verifierKeyPtsAddress + } + }) + logs && console.info(`SemaphoreVerifier contract has been deployed to: ${semaphoreVerifierAddress}`) } if (!poseidonT3Address) { poseidonT3Address = await deploy(ethers, "PoseidonT3", hardhatArguments.network) - - if (logs) { - console.info(`PoseidonT3 library has been deployed to: ${poseidonT3Address}`) - } + logs && console.info(`PoseidonT3 library has been deployed to: ${poseidonT3Address}`) } const semaphoreAddress = await deploy( @@ -40,13 +49,15 @@ task("deploy", "Deploy a Semaphore contract") } } ) - - if (logs) { - console.info(`Semaphore contract has been deployed to: ${semaphoreAddress}`) - } + logs && console.info(`Semaphore contract has been deployed to: ${semaphoreAddress}`) saveDeployedContracts( [ + { + name: "SemaphoreVerifierKeyPts", + address: verifierKeyPtsAddress, + startBlock + }, { name: "SemaphoreVerifier", address: semaphoreVerifierAddress, @@ -69,6 +80,7 @@ task("deploy", "Deploy a Semaphore contract") return { semaphore: await ethers.getContractAt("Semaphore", semaphoreAddress), verifierAddress: semaphoreVerifierAddress, + verifierKeyPtsAddress, poseidonAddress: poseidonT3Address } } From 163c9c17742d05575f7db38082048ad85ac09f21 Mon Sep 17 00:00:00 2001 From: Jimmy Chu <898091+jimmychu0807@users.noreply.github.com> Date: Wed, 16 Oct 2024 18:13:42 +0800 Subject: [PATCH 3/7] chore(contracts): yarn format & lint --- .../base/SemaphoreVerifierKeyPts.sol | 965 ++++++++++-------- .../contracts/scripts}/convert-dec-to-hex.ts | 10 +- packages/contracts/tasks/deploy.ts | 16 +- 3 files changed, 532 insertions(+), 459 deletions(-) rename {scripts => packages/contracts/scripts}/convert-dec-to-hex.ts (99%) diff --git a/packages/contracts/contracts/base/SemaphoreVerifierKeyPts.sol b/packages/contracts/contracts/base/SemaphoreVerifierKeyPts.sol index 9aed84a55..67e9bec5c 100644 --- a/packages/contracts/contracts/base/SemaphoreVerifierKeyPts.sol +++ b/packages/contracts/contracts/base/SemaphoreVerifierKeyPts.sol @@ -6,903 +6,972 @@ library SemaphoreVerifierKeyPts { // Verification Key points. // These values are taken from the verification key json file generated with snarkjs. // It allows to use the same verifier to verify proofs for all the tree depths supported by Semaphore. + /* + uint256[14][MAX_DEPTH] VK_POINTS = [ + [ + 18358547564487905095688479908858987846616998213156437518686067355563592118237, + 15662648751553932653781975807624464121405704024803073886925976686616010387354, + 1545474538105908330267074270190095622354834966212647889547653097055078098224, + 12579159544968648693964563165973893448704730885005100826654630574108054705556, + 20602000776800724705104231353971008348678632605343811527051139864158800058742, + 14100125742256756091734688090621667470723401759459592787502475801413744195297, + 5090583730862410755830979584235210054631184460526892606022709842010236308675, + 4935746665478263580470501879719907639988899436008466660042851826337922233613, + 3603230519262933722323237889869128969156000998401789817930265262617368730462, + 11467103179184542033012124498958167915605281189440445972230559164572312725202, + 20354120984011889701917116306955017859695028034788955847437411305304360829487, + 16952752114474306858880411587178692742589121096026762314329638709126787301483, + 18678961143994743003180318723146092299060216598083112257165966782010215931454, + 5866474510945308764957529269555101130643879788634167019342763906927794156659 + ], + [ + 15357842752194390032830879177519514606613356943505010426726499926726016517582, + 13720528004476084359207196371475762368424714925503835663451917882430924467554, + 2196656647584375999320189230399052835502476576494068012902156164580595749760, + 14571933744484927053512012311263939678215066456565339237074260778179419354637, + 15947740979005208428427315036716544174249364023308166418156254508145278950889, + 13324328715790405384125386378518079709609297588403011236512446709595322048979, + 18308129219862888344083447566760955160779532192553849267018614487088634836563, + 6372459765603725576424215986727450779217530423615747931788702584026023386877, + 7093003777162632186231777482293120808844116758585672698445917711442486215336, + 15357576732947512625016950088762579987226580659874157718142226214458009204755, + 13910597919064508360434043231000553781072135406219661606166769706745413894201, + 9475901949906914147982792916474633312982452326368523201024844634638043554494, + 5845138751782936895477553974859998077996624699108246120208069774017428318479, + 3326095377373657419775174404381825686428913179751401123841216020519623741775 + ], + [ + 1096090542237876305763822439899873238394525438826581012748557492836778110917, + 18282758355470198230938465615400409713402004038201360061031317503584711879237, + 7973969975759518869552865162652900479072033124669141796195141770899882758383, + 2920496587818605789230962034477809982324000981266163502059117507002917895757, + 8027751638293718359199675565570157214590620386957299982399037269650333307021, + 19002113380575481191643777830101182489616906893723699470070419138254788369727, + 13631613009301650992828160964785768170789209232530437462516754147352285424672, + 10537705110128905270703523362934130036880036854847578111990360444182641655212, + 15557574650831364767567015658284909068256128766563081293491003990055297878366, + 4049724481871929240016595616316679773340938699307608349394228543495262553744, + 9967066649437927083270210032320564587652082866881800887188539489167094397640, + 12463426560961961450861478284334163210886016242490079948590082000657390077088, + 21318595425700216078579789307308348011199610228556265752904860757510620370622, + 7430155508771673067823897542900534022148544854722115377830369283854627952599 + ], + [ + 14033304028688398404089545751254979569049699915340551984412184456786819712695, + 17529478610649635357901422564682249462969460088983393810272144503916885638629, + 968190632906420692452807865081290940343138767641492735661467959437198373032, + 7242759178038747404494096998044224993169513816067824413031492987300456908934, + 12017353327534072098763415761011052990865822334777878720246921848197559257711, + 4746680322053291743787031203095442352574780441873349801788355375401126089939, + 6764632552006100580460767171096753901452726344615530017064702126145414585640, + 11581587935666673652762153205827599529022773836189155792609728856814288572033, + 3123694825428833189943974730387937552931713004458396242443840668462184834558, + 3432192610292569155696646287493678963086402014898209278361624573082188247990, + 12349833666000936285363634772178969342930188247085371717039135170012686159900, + 5587426338437935681688079936152042996259869611071713486439341129143155921959, + 12022589354168680516901928073724404259700970836413687340697868887207353139344, + 2351613311284811919248989036726852289804810348516261915606564943623124473717 + ], + [ + 15740655435463241944594855735935231648684671883923953096410588018036769516770, + 12964751171177929169670182425240761498461607040020835118601467328036987558858, + 21474571159868965455306627669334290549452576803823591301731326342326814568896, + 6954370193053655486251406740905618458518953022289151868757271522548301919472, + 3115002343037487520580459802807906562630507097436525958861415456096559884443, + 11775142132959919266954507317832500578453517368862270948538792702813845219681, + 5975456097652384580746132945351678665917860606511206167023154005883554813508, + 10958037207675554032315788914627312943186758288936582678633536154169678007202, + 16345185674805541466042568997276776714209785989761944600635051035243995431568, + 3326264593228494909568322793066180033820330146744162800569972963329142251537, + 20721047231464194965879320004420846916587593568519526251056516572985788552732, + 2552439778142862614309289213707433798337671284267429041900242151271508522517, + 2849386127826497959217687777221941766595094589431869464564268817450132435018, + 12188539304210779665491473755999603070354632830707125660270270405780470402800 + ], + [ + 16239592155161765109648123193105804251252701943901733499502441663333912783245, + 18702593988046837524790351483331632258278160532977261915119611324471253407466, + 13746033878407070858115621843430829498309218839316343379025665907999784574154, + 19358066347678636498093783612000296194480758342913325289131948678991962529441, + 6024976123298004874848602709755399197808739071863728225378332097920450236516, + 11108084608972457539770160222798307153256767409158349747526974841008717682367, + 3009127146923662343754766534488769100730310563110562565512507605403185571089, + 10560679284132950437595738585637379866590755950272794729013445350206405316661, + 16015321530803994569819047219560485624444041236327101681073970215458831987478, + 18489840631710745699731219026737904723160484479846032199737023956049067434815, + 609265187318362115240245160721406765003010398230819869810290394123140807290, + 2656965952206569220410287839949134856874352189248192147930831679380007159249, + 13957423432693450118120092425077530751840166358932317773385901323790404449641, + 7610225795517710715985874151201119876406845575780133396869144717381641586640 + ], + [ + 6482921272760726478838066628157548923897782117283646773208763176771446379138, + 4562585331778730670899179927104513856322577370213643119870201750008533040214, + 9299549824594530154451155704400285409056448609359755927574262701418672785771, + 16654459784024455427280229763380300423080811024668332509526284511491790880990, + 18178936861568428015361893654874798233785855995042899944660014774323534883903, + 534506139369949013962728832141783820104682340925384016906020027968881380951, + 13888044772855561714276444972404100722751042044045312252045340354941233320135, + 13061437363756343100054622876229104455920015737970195589611281743974716159827, + 15297052669271818809266618537917704542138894789392864971735934945598379827363, + 3240592020743113440365790241401792477958041186219702004441781545015089517479, + 12939402739160799630996576545137073878726141216092557580496570401396343874133, + 409838859583542828209958035048329036930557790097408442597169497017958367880, + 4849352055719384218783567790347020036570406423962447054960403165168624679411, + 10140481868950825952506002812679553069445144019364683137830173127833535162812 + ], + [ + 4169753203433043290708949478342499350225971996935208104044673971132510531963, + 16198597482473356107060462797493408464959815651823410647378959304462364790023, + 17831214733154720272879709021886998538183166751338990495293296921834561417050, + 15996002991058741836925286413107190453488985346498046642177496721490001022163, + 12128929995926069335150064696726717100038806543084523729572253928762150006902, + 1527343541447603983494013575570118174442170324803005341835852970207664984106, + 3864366504647042739453971869413719136218296278515580744588126485271535533745, + 16390744785373846505589339019032992526980013169808686005019244934399314954484, + 1189371614834081242339044631966546656514169937037419744085755746584992776112, + 2490564128297998291899011962907372091056992851367564813460897014374926950158, + 2632864541439030478006092584387470079076010621748787710053145987733131826177, + 10997016251008884590554668186933912000821350188750456144761529496433221911191, + 3662989402605074726032541754492900291134797145446056852785520146936851543244, + 8371074929323402425468930212402691638137013802793901226648986870188378349904 + ], + [ + 17920452210119585965813298538098997746450528307627971419517604274103840658730, + 8026613233416032931155189579997899527124867847165186585887532521124762242171, + 12536429843060624487053183271774959575059067729019923970247266906616071589989, + 18354222295715868456732739635697044486544782691576216892030243636076554800619, + 11685593308965088606881675161829854229906033467171784802160080423031157953626, + 18989841286028554273231159314070667749621876499337485447347239057791285949659, + 13501500842653069022700095920888317808542113497043735775280862312089436522286, + 16284422417487952110266526583186344607656490299306406671512902584454645262294, + 14766820041476554952520399418749355774195705334216487399328042021346008099854, + 11502099463338241997177160748027482497157165595330950109059924501733819344412, + 21097733162892834226328090737666232905549661288100963226189626007151883115218, + 3620141777236347892405766912767968106066233413607983266884777435591408542679, + 4465316625088681267432956930147995293521314127558426510839100849580054135068, + 15951396696291486543574989938200386934444721629903447106494532971713975302198 + ], + [ + 21420692366857794685888663542888709905237738746850069466081467001353666342965, + 18343503004862189418033094393114515169584171574852422315350418500159030922263, + 16439186901063853414808045554962977634854311593865750348846556486836509716488, + 15200551988732901161699976788357951085426436066677048420098461828563894176150, + 15140772590596966074591171894694986645347795546765667852915300358255369432294, + 7383386342436648909729802223228006548918015494414484659175617833341830753463, + 11436445698241305906567677067532324081573492145508451249291326304016376374466, + 17397405229027848655285535331264669055168427730382628461971653096729174692794, + 8888190346365862431131132945799487885295183925892581338098808269532220115208, + 17373048493258440814074078107890527278667903472831731635546171123117085702144, + 5394355195223713516914582580686192473163629785306318732489822694588538915692, + 20814957740385525027786677509245187599649792998372465800981035312224123940783, + 11167741662268878371451552983943563550747492198375641214347145843414778750740, + 1505498991925224080559736158020686494389967648228591899080542175743913505975 + ], + [ + 8482807834840099486107357849095958421708288941420679407730439668240369271197, + 1531932691795154082010331247272128035283420450879984505970978649526303671013, + 10326017741190716069982105202291613302347042236075737537452333444753171570010, + 2890563104449202149521252385842115871596603958515320789619311677428773944295, + 5091938011714608365574587822261119297677309310900626302766934784886036216676, + 18792973255357094538588824962661759194320829424712347846315600994520652609459, + 5819484726278895533547092474664732368175576227992878488267454637556311136768, + 14087278759052154922504944654932471722205352537489748711235261956958139094423, + 6676755499836944199268283133886528716777488598645051771936175647684814488319, + 7841200200792172536039490995922340397104113825218911994623753022413575084536, + 9685171750835271647846188024034904289604883281120913275229696726161494108338, + 13804722593058778047599265964893015518608567919815229008355552695901539135617, + 133210224564739370698401112580329091433152068231765294734991529050629411851, + 6253365067148837443745536970484493754157158998156041417978340186561909915882 + ], + [ + 6379626794062388565530320965673584683811331210463512233691169393056454417810, + 8031021217500376290269114216814836477415391402921787637085737712949651005952, + 15261959534341262089656432084966075417921918036565394975811438856221288978192, + 12412675319987657724460960278402203548317535126494687402198671892291826563464, + 11594484527416994136900781664743660516883697944736099448760569480817952218099, + 5525949004768282420418522754788387377346850869414250693501350383184014395566, + 13423677678153887686951876961584096043047689175638209759158420018856273430250, + 688554022717474500337948897714325469989973507431329797109415877246281679190, + 5767985312159947447966233995178318554138266544591427341210101818005833690773, + 13782057493439290506357575012457041256926849070794382612465582256292384507590, + 2009465632383454183075946487099156558696455704620200103263777377956167571948, + 10265570962161934109202420603055144010322859077969741656080416572925588897009, + 13063467510206676485181697613068184940643350938488359709447602318070297992418, + 8824580488237789516855671915345935747743201560548603121129517348234754630838 + ], + [ + 18405974527641184935569939050199806786119735189423462681352004154947586987761, + 11063658239692825381704700810385108349384459703800229121613802621026834850995, + 20401912636755055463157317129314482008782101856095804626717136888886428939725, + 10581036997862130058603889786198200057133900928078268413900852134308841628552, + 15613862437263830065893280422700893831122147824370200118126675792748158214283, + 11637898091445829201992956909089879348463617460955895182594618572267100421779, + 676470684249461112964281503193041675013396554434239929609436328672155420783, + 14862758280768060051884504554805186980208629806423451755599092137651959992706, + 5623342967419780942118234966618900971275224510117264341831041912523393680166, + 12293742687505619727765346377361630310803471543338450439759434637239250426631, + 17107107724389526013252251054585363312805578717860151655674796329456502453436, + 695490429984933474058785653390434166254929169748519672533632124843844650437, + 7941603993861390710630117468483386570984050378175531457457840811645822985465, + 19423663035279971057851778008344970269742436279020301703706239058210708410668 + ], + [ + 2844460676842285471844840162496739784337096369846435331204280645139535043731, + 5914749649291606384462747717764850940787906745751128721215181537027495043325, + 16403998562201315274383761287898474039980386929670468025842124690312505385798, + 16679714051449621657256662882211432986285335589270632187081448168743144646010, + 14178974435133537452754432783693851994073934244854394772136599698341675338748, + 14490318493007296294817313593753116388501252549516359980240258503496717340194, + 21219478166573360512901478467779541318881953172337799756939010190701884653821, + 13653038712207413996195005796658436532811211815454701512198612316602372800026, + 6606031466185873676955137126631780808678269492505994174970319773811652852017, + 6998326006251734945119834407770954155028321677085545151592873301468610324946, + 15717984973502827230694305820570642040862757036680118080574899662027439132392, + 6129387663611887185666499162725019000386957238200546358846681873950634080364, + 3229894653990057163047872622628926092609943988699832798310941005306795398260, + 1577249093608064810495237122250056987651980088410811739655744853476971398741 + ], + [ + 8019490235657930229602545685025618469913840887375206662306714562639338096359, + 6360514614281299182411878013125972206098844277909449064382248671632240409416, + 18532505668867290379738328175003759079607042632729982459107375168365918757976, + 8421518624327767035539667378193845962377888010421324291966623261409058898245, + 21508024236353721936402111331734487542417525255582275314005272967405040862839, + 18027689383014810715963711252886295463940938266456411644747464137365500951807, + 14484077699638992615220759300878276902226958277985946809174186953862915299590, + 4817080763362108602919187869554992685382108795016276838137423588157592666796, + 10791657063117982548380087239678382293931165307389242284595466175088416832331, + 17574587559710800088797913763598808892829608388483075257576879500511250128297, + 20931338330271163055101602391315623325223860904427973201832184784566097488773, + 1954574324880132355431783868495392698894997264747376529310223470792870288803, + 2551137710278149502571112114560159376697849893483916552857521579500208583200, + 3997814265160290573081282672183091638735659350920634229735367532175023689675 + ], + [ + 20759074837657564809501685143530456377562536015816086555379080667602653298306, + 11573288866341175121647407708978273297857024597782918874282176717371576773130, + 19475107603336226504587469711392819869087288902355805230614724291289122375846, + 21884242265301052283286073107133504985083194336113478618838523331660374213570, + 11844625750737259417493690805104254337758743574820507915512371579679338049474, + 18479163117067129250021591308069049721232170743585134941796617403156042279597, + 4434911559893931929914698652677389633068778061297646529129767359157675249407, + 316682746098441691626372255125560321251096997722401729182940832349927288255, + 19610390525670030492896894087745165507340241783776573708027658938288182681300, + 5840208148535790468526125686220196099566194081164771919666034943299219873755, + 3679027218793663842409677356801552901605408436635647286999251784339864591201, + 9878321578558671609403512127325051261043472923444011356477587484000484178928, + 16646455734597629493777237097088292344110223995728568379569260368267096014288, + 14735311379463771264009437608444808852233202023120148855228542005281236140064 + ], + [ + 3066170574229466435407264700502616839626082070514501523679452764935485028736, + 7951387307333182634684754650901435973768779794218900331714625086350726274942, + 13578824606544430966133042087468301830727811282121948825028360301706303669231, + 19848381031896652139349791682530465833719275685855743122849792015759588531339, + 6922136549797750291447751953663854475218048098902194660515442295348938322083, + 10287261443878564608994021014993200221021609196127927226041534661185500281120, + 6329063805909277980282354325384845982783657973381777424581891744521604640994, + 11017548748010510224711773916683171526878158646735796493859902304094594577338, + 7338335804036221772945379382782674399589206056354184002757176151341198318122, + 16538115574966264108203522400275571374556020887608210819563613080068710593180, + 5138245976626127736555381649425906350640183768145541963359703291501245587848, + 11347291457433539838423910567581114929056891897670787919546976342310334767900, + 16731418617609356258989018213857655050257827940403117452476763890174877962606, + 5300557287595854140445529914668848275536281916366261035684431572728600543772 + ], + [ + 6573154341426354993599623914164155921131813615298607946435982334364383320793, + 16419308144058642981524756443290703631729426627385646905142158478345164404879, + 942314767315789144256266064192022265579304275774793342260835421710673918285, + 17945712678641984649495876620223190782305382105763957622870181201252059717682, + 6497446328454795535775520142893202697197882656922991300092165933292014766725, + 4597431274747983679157649737399090093759447324935531801532881928263496852124, + 20581664438782214735167492264807215952133504025063870863776714994387749970180, + 5854805250432620287068939301087113989827350315462338534819773170350910225622, + 13548539273975522227017059057161374261181128673406746320122994151943985128196, + 7414800418339434590171697383031637744601564309993253226498272110927128779715, + 1052987139013233499761917411027037646861657729931697227519754049539833189269, + 657108667626796780066815408290681939596246857020023912757838581820942772606, + 19088282520683145597098955555305422198780142332183007920340899996970202127885, + 12616611543293706969401642310383814806112402432261338062963427055972449363741 + ], + [ + 9271002136483424788269278316391606491360153732024211579417926107994995432826, + 8228171988949250866347662896961764196608750080646539001443256474901139877051, + 20240081759615964816136232877050251456333669788276947762731625798225823502998, + 3685474186777860155223706676482968796090983045736466861690878558020083034916, + 305741399293956298249448376598537769086716682101868856634885453070917344627, + 14942830908704142867090451021371809832404069532430585621173997534136021340349, + 11873341523902185373029537495825388400298468809112431373607438726587086076801, + 16566421774425889929886838459987430622148040878072136298073788804726016806526, + 18314173705630320437871113612645566255775444265992974192826331109357704470403, + 8597072000455186494551694692524831407069966911367008568012412188890924300508, + 12713907619301764178052509321657058919935892208409394514649600000706175319189, + 14893305145776480356274920935320977108910444566603040558476174175562031483300, + 11027938853766719633497710751595847377263279173227878474215846011660771149283, + 6927793728403485743741891409676155921703126599118383623637742555953569891357 + ], + [ + 275116175553159498718561489405169511232715998055900506709208190227728439831, + 7338708370982730261395030177227912514214944721567888714384503728042214055309, + 2285508597732647746841213906783440647997136124356359059650028586535477309792, + 15163443940499746648640851269666923560658903809778640616581862089179343108182, + 37868753390676617287004841173348795594362354905038492583057282228528019603, + 19475937072595290694509025801956972632863465524774747773770243946674956142538, + 1818532521520079200500527816308109106767855745862413136331026404438772138114, + 7893556755641665136576228990240239515272703124353568551151593029797349984766, + 21843411659343488969197036446870567462789014279182131087406329675847260538394, + 13883536936296384480685931731174096875043607202415233199362935327975006076376, + 3061885619227488514362869971925298711535995206671454426027635264218303442708, + 18477632669759047471715211461337808302603089797347923153039515976242018999984, + 4953684980989921770137053964305439167945572062294709110871332076115076441738, + 849590699713478394267684876803414882497887483062076673282369901261463387635 + ], + [ + 7481617454708320190331411214970150566519243590120906863698168124347483283307, + 3790897889674729687102011235738708037383393765058266352188381434189575086080, + 17582850308142585333519054672998882111865339708436809129995518706804527076353, + 18961585057625546222763334757505522771740769338010572292783220912986926586854, + 17761332237343741278668998123360108574589045018570742689473320560784505694171, + 2985768806786881176362869973473950745997650698247163897069614623128281191971, + 14099532828736062687388547070054719462342298981811592749594569670955512096417, + 11038429458121896617356666499000022639824993159854464409767840206807807728043, + 7092464867594165410092487979619486929166817679669939558999555261465867685619, + 20690943609696626243672018055336898909740557628366317533030490341400911534771, + 11468803355345327303851639215186997122074583511720489615730106184659306943551, + 9723340381470060111632263437706139036358918795037011403763820908081655273682, + 15929497108714526572140462634902391796285476840034863688822264979709196730555, + 10556139316790113226399166507094772235069235781001645893008903131855134732783 + ], + [ + 9679690373149117563754317307037586538394929348733117229177073999196519450461, + 13953490152873041611053779700802518995304489998104548903919774028525032867964, + 8584860336778813488021026261425560177968889952950706471574873674510806966419, + 8400619522468195192079024924375785176686244213372269992523849676384018875300, + 16018239095599670975582212156736908990475077583136160880304021421989907078233, + 13442762142079759258078337448325782252795445513077684243558458356586404542166, + 8012524517439221218249889438165569497775551565363444399021079689755695756644, + 18993442931337392722189844722480176040693468853419121807183123246184718322422, + 3920077716342530896195446297162279477088824676672184510151991496745985467962, + 5663885918690734602622426696143772526257235018784490039324179199552252272203, + 11007942216549411481832816505096362871539130535791764225892613523847180067807, + 12333277086717649179464584335417603775633093807601488202185840108448843332123, + 18845646001611639216437777320622198530894193094859924604338859788769244491906, + 4365664869724113934112630479809518948808449158812862195377335314227128146059 + ], + [ + 1895928299034844696630794694609519515092896092191683631304721647222032914779, + 19026513891744713045426845531420132126578554294461150386909840193098440147673, + 4073281111734161932072345995811001896063226222777392994725894652964051683943, + 13362867147840304033834065229457670563442204439046527165143934160967798444725, + 9724485076061228092177286932258189815958450833155679889060988975712535081230, + 1627333086421877964064603957348348763696708139082607562629629725119997724989, + 15641874381988682075545920458678901707167602315586561132909307694310257446023, + 11034182059786563285109970430313289917032071817373248775707546493147901388113, + 19299574745226772810381056007321573284793444116746272581694295128392282602507, + 6482638271546132546782310681506292669989505915370438641175376336582811537739, + 5515138970831679245126906315331906152285174207704247085730757090763031968272, + 5476746571008230667726688443817396210804752373221945489797046634505665572661, + 7666694240010574980777401583687953099995588711474009270339615112182231942529, + 5345423812126487230177352826531606752132805611025916574123407915411930666385 + ], + [ + 7211419275788152379372992549185439317698375419836488104253705518694042119228, + 9112140750806762434510825375931543886135367141484613422947675423683311130537, + 12020406779776320543918475257645763209221278449775176154727249143619468329590, + 6961266423823329910790066424248133365666435921221127260870444632539329606224, + 3527954161191330198309290076708590175518992377857531220243324230315686986882, + 4506493800007416260514839382433205292331764028735360433653631210611507932973, + 5530043493028748853396066194331787195114268917530734310055878976603589658986, + 6225101949608434111198442012357272827532649788667254718474232856896193900534, + 18857681750145313162493356993928966938826030906289025101399379263672964054354, + 869004496821135911657110194622810910776043851317139916414752924319830673140, + 1563829187789877652048924285544523323087888587074484491222967490033068091506, + 3746011388196035005128740753677692387874351474501361202463946309770129429478, + 8923361680602360491637539340186330583808472610027697444204036893010926051377, + 17386658730777389148551542774423634880430074554050371095211396948875032586750 + ], + [ + 18803497674827878184210135371703804206276128582022416604041787392310845729622, + 6590008305704976915857671866558706505394630312395969823040635040879201337002, + 2714759247406808259589803854440914533632699567907406761316959511568030744066, + 16299600292583383998706243035294548578562168326056377699804434906128380481545, + 18030052417377603682453955579175094175373404791176719861146533099419481910116, + 8281176924556272137773300347187527516223668703826908452855802099328657344885, + 11849913964821118293258226409033507680960291656604016015128854810099746642358, + 2718653438901851962181612429288634518502998150085578586248082443515454453331, + 17998120665039026798317726060462551095622279047136565816648549826384179735803, + 5133986071087432716437635164720916024596119526725252628340805179596147643344, + 10436725621240227608920674037516192343160590540839553356331196590007025190330, + 15618861474705274368161439159831328775613537777134266634959100526889759124590, + 2511040106219966488942941427805413210834998861588095124665874406004322450915, + 9256734357641210393451356199893573129989430877284906007481196262323584132500 + ], + [ + 9325238625126515763679853550553375879158552597544709459784109512243397955590, + 8484194759795978556088297437107686617328133596604796277228418191688537911573, + 7354463117736585470843139230227589188304331389476818932256765377140053168035, + 13482530129860761195447497269660263095272961608736579417124458190809007451755, + 14565877561081097978808851096191380459292726072163754601747539666057949167693, + 2135718143241813932226161801358235289781058013695871838383051572102928884567, + 20522747851108608773003772892187458826390403588440155512773881116135635256410, + 11218511591600821722003994140994121719832310771637604152054113941332818455369, + 16404237709834224719800904205708261378663612035126521203425485585484994986837, + 3167586669955731698085513002461997957955073343333183557668566807567186590619, + 12910675356590890481798719900077391291951346627685199305549632303581651173802, + 20462953503625657093808736208830478011818679863351201550868889073055617578896, + 18947108562530644410102590841857357185115081182319111952079371871969663671988, + 6652719222291337824561052377450295064566587460338214284424446330320206208978 + ], + [ + 7333723286812204168407439917521565157977670700382476881790986792115201279410, + 21462572925415337738214437933606587540653694853107274549824898449394152530908, + 6820993392268884858152757378169835647522978080101384568523885945756789014349, + 16253055713127198337468919465234896268161918860396508551871391729457324125212, + 10110377608880446364161064735161091842938826397512230713135002732708361876777, + 6013899729219769410326935661934883558337463050053435907100782150692294649745, + 18208889227209298598015138525374980382541030144328510393048300775270787949840, + 15191444075449840811990314906356975059662539527217455842253932605838538105879, + 19203188682890514423320800755662084436821947463936810212920115637567986869322, + 3424855308164288636262956984024538145687254883958282264766019244372264927134, + 19586353501601321585672146098476085745700368665390426128801697725086439710122, + 15010004828387861046033155948517332272437733117418549079342100218646019702080, + 13686339229559293872534012092085760944059315023471369613822812965287369238447, + 3695584012986626869153168308549979767804807828687034680677188403817830418810 + ], + [ + 11102327427527201346056529148642207216130990405495165914761901542247835149412, + 17544563341965869668707473190805417639220912289969746146554006791986582724590, + 4470848226757772603246285686584200798638888970547659211297578619392420918858, + 4999887962989142396481351641254451370620928952306237803174890583736074770292, + 18696621645163318552472841991871104820660024833640321869898695219244792544787, + 16940838088709411711968888146075539661653566927745755478421474505108166140656, + 11530916114120676768574532193664705720045810431665651204245333670674998923676, + 7355883923626920336916662475522243088902821161113628716197989160163721774248, + 11855011297239142909723378707832446926509921514737098047687587969894126468497, + 14942813403879667533705178220673159254886774089783887482228941707848831481300, + 12982663140753853847528768000921561826340636419307931766400467366396846035169, + 7171806600323437636744282845777660095738436086868856062406225133619265520575, + 15982491779929281894294451486893882850583039973528579274058985191703359466543, + 19910319651211685401050894240685395121165652955380089146603485967076493605680 + ], + [ + 5314337765479745092537090978913989310916802510812096192767666377841447850226, + 19811002121850954821192061183148615163420706271800817927960207430256612524059, + 18254735365473444026840717290492248863101576601864757410600437101587001057517, + 3428844080448214358238191483671878854080864964895729401025193865570307658787, + 17688699129722255312471132988267997472426043097741089176095207368928695347323, + 4698778325800416923484519718058460264124242609977080857699400967590134848728, + 11905991584861721837480962390330989450197421918781662074678555052926188909272, + 11195321655863853696452219195252788379254952714823481930861848719672010792417, + 7364573423043519994861038175593500896079924196888521130462378149111415036167, + 8488161531239994007634631892382512438657593769374020273048837520623507271908, + 10948897450624334536526533930990935852623955696383743452358741253735922067160, + 7654175296077985337834288232610181411799310934515705881481549241949669590123, + 2456818423512317060112219756429819064402183920202453945509918337536940292593, + 10561627566351771351550703479997725668661012955063201536370060753602302262655 + ], + [ + 4310089243116651250383251477034324245457116277666484671624575402227833925755, + 11882651094700172542567008359015417490389070633573140242127755563781024148099, + 9304328383406369649010049197573360507944684656613297568584394172735340111263, + 18874624159090765871635243875933482675871258293088886749847315202391523956097, + 21295163659036117126535933666532228255134275601226122998452204301238438701469, + 12010652807420347304532358791037860496459429689113682253200903987591679627067, + 16035147304145989851106586435462674695447030608653337914734493255503105122271, + 9396862051344040260236487045030117425080665841603826234795752404308634565281, + 9623434193020540057685957851610556657916120473978726845338192370747426064401, + 20738972702824723087864078264786214906718601061526079118500228332898388551221, + 457108501000029082366810998923133233303603111079376685755578228260824733356, + 13918719735797746251051948238671198059940858851588937008268023917020073366433, + 19519317439483352367895890468095276150233498159453735432212409926941855183358, + 8400170000010792082337905010575114377571921640630709589910201278654198179035 + ], + [ + 9476241965146735006848999585927664857836027675817848342111996150638876938940, + 20383112265143113621158547584533108172173014612497300318772355462448750327634, + 10370498046215116715134085566322498900073301617448752966999679321197451973184, + 20733082136685384602293372077980283048183069753990343452404863587763569081917, + 209896847902324756441033880218169809685412620378498856437573937154846479551, + 19434208870058033389225349051527401299247475125763108527095891214558119617655, + 4154375339831547300427516624109559852426973786711444825735879648391004291098, + 2168897082728012692838287354581700563166925732559863316849698306675591131396, + 3690054103601385333490512469861728231387681704127049683413276534001532261943, + 3997073653940540957268729302105309759820513901669570962308110503858257659002, + 1493108383089723041516694658460301260449183718295935886883417227290045091286, + 1479721274324005701970059663387618978577823761358404739977258141309872068056, + 20291086357406391640638647514048720424247838755446061571102712546958076851767, + 6860718845648137601753080432837091439893783461195961430761483584544410630099 + ], + [ + 7929983584961755765377471515178883367433439212271736050025708429355823243624, + 10728358412340769313351519567620170787387770135423141966436844748162218854008, + 4169855297038740915695363102363044976292665711211255871324667594694964037773, + 2424224908982307794171893487036131370038399449016750026546326391873466118335, + 1265438250797513961458031163301351393237543067943565114202366151377865506872, + 11342865295714982458109220575532930834959120923837779800176462280225501198217, + 10415384677581396651184780193811022815145977389536746022901590915883889609878, + 5311187015233522007413118391261106264838418369874755037462489089469638365756, + 7499079368996193403750547553190134606728655877653629403923945654291953825315, + 1743769713774086589463238504150542785039161133276706463569974209707667651575, + 5792276842105452143354445764064878932177699791644537942211472215636738768211, + 9443070058088199873709166495831389298947366881168483562080569357428781583046, + 14451507664847323254023899990839043037382802537389529773382951366995420730648, + 7633550475637360595097128986678209600092185294414596687526062925070686318486 + ] + ]; + */ + uint256 constant SET_SIZE = 14; bytes constant VK_POINT_BYTES = - // set 0-0: 18358547564487905095688479908858987846616998213156437518686067355563592118237 hex"289691d7705934b5504ae4bd7be283f3465af66f62fc7f1e66f03876b445efdd" - // set 0-1: 15662648751553932653781975807624464121405704024803073886925976686616010387354 hex"22a0bebada6ba60c3e190e9e8c2b1420244a14c9e02868b862c7945667416f9a" - // set 0-2: 1545474538105908330267074270190095622354834966212647889547653097055078098224 hex"036ab5249fee75e0644ed259d45fbbd0142b638e421b948f5dc00cf3ff14a530" - // set 0-3: 12579159544968648693964563165973893448704730885005100826654630574108054705556 hex"1bcf8d4f8bf886d2c7960badc94b3abf6beb4e43571d2b4b0f14928c10e0d594" - // set 0-4: 20602000776800724705104231353971008348678632605343811527051139864158800058742 hex"2d8c51b7fa4ea9ea16765377aaae4ae0a416a89b600fc0b8ec35e9e6e5621976" - // set 0-5: 14100125742256756091734688090621667470723401759459592787502475801413744195297 hex"1f2c636b4954a865946d69fed3ecd2bb60a61af38fa31f2a290ae28915d1f6e1" - // set 0-6: 5090583730862410755830979584235210054631184460526892606022709842010236308675 hex"0b412b14d9dddf3f9031ffb51eb3f73602b9e49cfa9bec4a02ec9c0e3020ccc3" - // set 0-7: 4935746665478263580470501879719907639988899436008466660042851826337922233613 hex"0ae9889ae5f4f6021af9e16dd1f2c445ed863fd6a374b329337f2fef4715350d" - // set 0-8: 3603230519262933722323237889869128969156000998401789817930265262617368730462 hex"07f75b300b401d2435b96459d2b64f6f848411f246d8478199dd2351a35c1b5e" - // set 0-9: 11467103179184542033012124498958167915605281189440445972230559164572312725202 hex"195a26806d907b6d9a9a9c235e09a48e94f8eb8da80f0d40bc4143e3d006e6d2" - // set 0-10: 20354120984011889701917116306955017859695028034788955847437411305304360829487 hex"2d0006337513747c51f8f3e87364d2852113a83e586ef629c88cee6d4cbd422f" - // set 0-11: 16952752114474306858880411587178692742589121096026762314329638709126787301483 hex"257aeaec24103ea15e4592c32d0ad9846ff1a2f3a836e0c19947980912b9006b" - // set 0-12: 18678961143994743003180318723146092299060216598083112257165966782010215931454 hex"294bead7a3378f80183af735f6bc8529ddc73d9e0a35d594dcf93524403c9e3e" - // set 0-13: 5866474510945308764957529269555101130643879788634167019342763906927794156659 hex"0cf84e9163744a9a65520f4b8cbb4ca35c428d1c4a5789e11f42636c6d197473" - // set 1-0: 15357842752194390032830879177519514606613356943505010426726499926726016517582 hex"21f43b1ffa301d565dbc37ef1eb2ef669b8a1876e3754b79657b26fe43c845ce" - // set 1-1: 13720528004476084359207196371475762368424714925503835663451917882430924467554 hex"1e558b2ca618dfa02f0d640fdd45f56492a577154989cd09523829b5e15f2d62" - // set 1-2: 2196656647584375999320189230399052835502476576494068012902156164580595749760 hex"04db437b7b4fa0f6eea95403dd25c6a674b3e81be98ad4532affe8507ec05380" - // set 1-3: 14571933744484927053512012311263939678215066456565339237074260778179419354637 hex"20376c16b97ad98b8dfaa6f10d42a3c5e264c56018d32b0e8af528db157eb60d" - // set 1-4: 15947740979005208428427315036716544174249364023308166418156254508145278950889 hex"234219fd49f941520883c13c1f01ff7b2f7f512a3046f91d33cdc3900ffb9de9" - // set 1-5: 13324328715790405384125386378518079709609297588403011236512446709595322048979 hex"1d754d84438f79e6b701f7d665d59755a7bcd0b63f7c2da94b737606c16de1d3" - // set 1-6: 18308129219862888344083447566760955160779532192553849267018614487088634836563 hex"287a08af195521f756271ec64bdc4ca8a7a95fae892c0fd2cf0c148d6c0cb653" - // set 1-7: 6372459765603725576424215986727450779217530423615747931788702584026023386877 hex"0e16af35936b356d5974b385528f6d9a873568eda614ed0e54be4494c2acdefd" - // set 1-8: 7093003777162632186231777482293120808844116758585672698445917711442486215336 hex"0fae7f745efa5884dc82f1595b5c10d931ed6da07b5dc4bd6f99dd5318c7c2a8" - // set 1-9: 15357576732947512625016950088762579987226580659874157718142226214458009204755 hex"21f41494c6685503d748b45672c65d059260bb205113882458c86f6da7ea3813" - // set 1-10: 13910597919064508360434043231000553781072135406219661606166769706745413894201 hex"1ec11e919c80981c8a905161c48caab360994e8f31cfe88536c5ad8b2c360039" - // set 1-11: 9475901949906914147982792916474633312982452326368523201024844634638043554494 hex"14f32ba1f584bafc3aa283f79d5d65e97a6a280c7c51cec192ee9e48d593a2be" - // set 1-12: 5845138751782936895477553974859998077996624699108246120208069774017428318479 hex"0cec3b3618ebb60152be2987b910940e79a421d666a71764f25ded99159de90f" - // set 1-13: 3326095377373657419775174404381825686428913179751401123841216020519623741775 hex"075a80d650b5c6f8a0b3261ae5ec4c5a1b53762f30c559aaa6c501e207c2514f" - // set 2-0: 1096090542237876305763822439899873238394525438826581012748557492836778110917 hex"026c5d81cf4e6cbade3622323c4ee3b4568333e79504044d2ad4d2ba01abefc5" - // set 2-1: 18282758355470198230938465615400409713402004038201360061031317503584711879237 hex"286bacad6fb92895c85483e837d7c821d3f7bd612ddd932c16d618455ee62a45" - // set 2-2: 7973969975759518869552865162652900479072033124669141796195141770899882758383 hex"11a11b68cb7aa85f42325a3d0fa45e0887719f05c9cd472183b1c7c78eabd0ef" - // set 2-3: 2920496587818605789230962034477809982324000981266163502059117507002917895757 hex"0674f14710e453bc1f9255babc8d2aeb3b2e321c68e6871b54c285e71456be4d" - // set 2-4: 8027751638293718359199675565570157214590620386957299982399037269650333307021 hex"11bf8be1878d5dee6820ec405b079360da81da7b79f29aa54096ae195ea1108d" - // set 2-5: 19002113380575481191643777830101182489616906893723699470070419138254788369727 hex"2a02d0a645dcfcafb2235e7f9ed37df27c3f7cbd5ad11ee831fa17cb36881d3f" - // set 2-6: 13631613009301650992828160964785768170789209232530437462516754147352285424672 hex"1e2338342dcdeec5d3ebd82d4b767ed93989d9147ac711dd07d8aebac0962c20" - // set 2-7: 10537705110128905270703523362934130036880036854847578111990360444182641655212 hex"174c21361611783b0dc90d87a6128cd4d7e427cca10db1d713495d8281ce3dac" - // set 2-8: 15557574650831364767567015658284909068256128766563081293491003990055297878366 hex"22654673d8af40026294acb3c0e51f0f367576d83a554bd9ad72de06a796095e" - // set 2-9: 4049724481871929240016595616316679773340938699307608349394228543495262553744 hex"08f410159146e32feb7a585ad437c4a48ff2109d7f74f58e709b66c292e1c690" - // set 2-10: 9967066649437927083270210032320564587652082866881800887188539489167094397640 hex"160928e9343db00c99255a53ea3948b547d0bb68332069c2d5ca632156a53ac8" - // set 2-11: 12463426560961961450861478284334163210886016242490079948590082000657390077088 hex"1b8e0ca895ea976f5d42029c964ea52d622388e90f947cba08b3924b470d84a0" - // set 2-12: 21318595425700216078579789307308348011199610228556265752904860757510620370622 hex"2f21e5bcc52e6d794afbf44a0dcb938554c7c94fbde66c1b7965ebb2d266d6be" - // set 2-13: 7430155508771673067823897542900534022148544854722115377830369283854627952599 hex"106d51a9231260949c37fcb7c8296c246566259829e98ef52683900a433ad7d7" - // set 3-0: 14033304028688398404089545751254979569049699915340551984412184456786819712695 hex"1f0691902d412d4afe6e49f546ad03d739f42a159af9530d717c01a3e9bc86b7" - // set 3-1: 17529478610649635357901422564682249462969460088983393810272144503916885638629 hex"26c15552cf455e161693ea7f01601fed166f79653153fb5beec9e8393c1efde5" - // set 3-2: 968190632906420692452807865081290940343138767641492735661467959437198373032 hex"0223f9fa8192ae6be752d29b47e8b8a75e2172fbd4c89cfec400a9766e1430a8" - // set 3-3: 7242759178038747404494096998044224993169513816067824413031492987300456908934 hex"100341a4e94a5cfffa3c6cfa1be6ac3bf6b0c4fe578f8c99cc4f67e4d7bf4886" - // set 3-4: 12017353327534072098763415761011052990865822334777878720246921848197559257711 hex"1a9194b8c654ebf4f3cbb607c8bff2ddebaff87b8bdec06745ad4ed802728a6f" - // set 3-5: 4746680322053291743787031203095442352574780441873349801788355375401126089939 hex"0a7e869e75859fe47e51b3b79ad155670af4e6780d3edd3c13812db0197854d3" - // set 3-6: 6764632552006100580460767171096753901452726344615530017064702126145414585640 hex"0ef4a576b0bef4d037549aa24282378e13b438fc9bf49efcfd65cf3aa8935d28" - // set 3-7: 11581587935666673652762153205827599529022773836189155792609728856814288572033 hex"199af24c0e98e72c37d87bfb9386003c2a0192ccf015be777c4305d5eaaf0e81" - // set 3-8: 3123694825428833189943974730387937552931713004458396242443840668462184834558 hex"06e7f2d897f05617580ccc132040f3b83f3fe1a496354b33f39d27b15fb2a5fe" - // set 3-9: 3432192610292569155696646287493678963086402014898209278361624573082188247990 hex"07968d5b67877cf32da7858c85479a891164a19b1ddc26fdb2772d294addf3b6" - // set 3-10: 12349833666000936285363634772178969342930188247085371717039135170012686159900 hex"1b4dc215f06081e276803f1650d67324801c0a4f48d4b4fac9f6650d2fcd901c" - // set 3-11: 5587426338437935681688079936152042996259869611071713486439341129143155921959 hex"0c5a5f0969147d312118768cd73a762e53d3984088be93e46d8433d129939427" - // set 3-12: 12022589354168680516901928073724404259700970836413687340697868887207353139344 hex"1a948b5fcbf5918fad1f3c69d9d58c2df72cd9a15ff57a35c86c9e5082ee4090" - // set 3-13: 2351613311284811919248989036726852289804810348516261915606564943623124473717 hex"0532f7499522ad56592a815a303b33b648fe170e0c2f47d831255298200cd775" - // set 4-0: 15740655435463241944594855735935231648684671883923953096410588018036769516770 hex"22cce52f921a79b56993baaa1854b37ea74caf7e6f2d957048fe5e5d1e536ce2" - // set 4-1: 12964751171177929169670182425240761498461607040020835118601467328036987558858 hex"1ca9ca03dcd6b6539118fc036663b6deae0bdb0df258f18e23613f4e80bd5bca" - // set 4-2: 21474571159868965455306627669334290549452576803823591301731326342326814568896 hex"2f7a2d324bace30583592592d82bb970ed33f9753d03dcd3b54a44af04a0f1c0" - // set 4-3: 6954370193053655486251406740905618458518953022289151868757271522548301919472 hex"0f6008b6f13bcf8f2663e7392e2538406a7cdf15ad387e2eda92bb1de03f74f0" - // set 4-4: 3115002343037487520580459802807906562630507097436525958861415456096559884443 hex"06e30762808351c935656ddd7ac3499a2b497991d02f54c178277fce024ce89b" - // set 4-5: 11775142132959919266954507317832500578453517368862270948538792702813845219681 hex"1a087e883f78b0e1ecbc92dbe9d82258e4c91baac53d71836902953f8e5a6961" - // set 4-6: 5975456097652384580746132945351678665917860606511206167023154005883554813508 hex"0d35fd011b125ac12fd1d7c655fbb7b1ebc9eb47008676c750907f7768f6d644" - // set 4-7: 10958037207675554032315788914627312943186758288936582678633536154169678007202 hex"183a077e1a0a2dba1ffcf7e2a490859a5f60d5d04b3599506249b6d534848ba2" - // set 4-8: 16345185674805541466042568997276776714209785989761944600635051035243995431568 hex"24230c1864237bf6dc8d6b3e40bb277c02dab92e86aa515aaa62b1ad496b8290" - // set 4-9: 3326264593228494909568322793066180033820330146744162800569972963329142251537 hex"075a995ae152c5f9737f6848a2d5ef93a8e7809981a06834ef8b684390456011" - // set 4-10: 20721047231464194965879320004420846916587593568519526251056516572985788552732 hex"2dcfb2766574efd57331146186055ee967cdd14d5efac43389a29605d13d561c" - // set 4-11: 2552439778142862614309289213707433798337671284267429041900242151271508522517 hex"05a4a1353e53e1b5622a2200ee1fb2e1a8e224a8ec5554bb670bb377505cb615" - // set 4-12: 2849386127826497959217687777221941766595094589431869464564268817450132435018 hex"064cb205829acdaf1af3d45060ffa3433c02d3a7ae61b66ece50967b97e1f04a" - // set 4-13: 12188539304210779665491473755999603070354632830707125660270270405780470402800 hex"1af278018cfd4d2edc11dd77454ed0cc4ef3ca1dba5b0ba96bb2bdc43f1e8ef0" - // set 5-0: 16239592155161765109648123193105804251252701943901733499502441663333912783245 hex"23e7488f10d910e129d466443a7adb99fad7ac0b0bb37a51c9d0f1b7c527a98d" - // set 5-1: 18702593988046837524790351483331632258278160532977261915119611324471253407466 hex"29594b068af04ce6fe6b248aeb06051d6f66a39d9f3d13cdde5b343f31ec16ea" - // set 5-2: 13746033878407070858115621843430829498309218839316343379025665907999784574154 hex"1e63fabe17ec748ba86bf78cd84029d23ca6c543ee800179dad25964fae41cca" - // set 5-3: 19358066347678636498093783612000296194480758342913325289131948678991962529441 hex"2acc46fb9f4ba2abecc49ddb33c0314c7a940bfa021c07d44a73614599995ea1" - // set 5-4: 6024976123298004874848602709755399197808739071863728225378332097920450236516 hex"0d520400f15c87d18376ebfc03c8ed06b9ed713a654a0024cf310b64175d1064" - // set 5-5: 11108084608972457539770160222798307153256767409158349747526974841008717682367 hex"188ef3fd8a2134f2d4237dd7657f410ba5172ae081a6ca117dc21c7ffe71d6bf" - // set 5-6: 3009127146923662343754766534488769100730310563110562565512507605403185571089 hex"06a71b093737f1ebae5924f2d5f47b8b14526c4831c50f9e9c7c032dc011e511" - // set 5-7: 10560679284132950437595738585637379866590755950272794729013445350206405316661 hex"175921f58fb9fd90e2a1d2cf951ad606104a1676c9d2e6fc8fee6ea105239035" - // set 5-8: 16015321530803994569819047219560485624444041236327101681073970215458831987478 hex"236859cb45dff68ffa2524619936a9cb457d2c0defe59b5863607e439369f316" - // set 5-9: 18489840631710745699731219026737904723160484479846032199737023956049067434815 hex"28e0e101f6b62767f587d7dd8e0a4d4e32fbed3fc65c940d8aa8509bd826e33f" - // set 5-10: 609265187318362115240245160721406765003010398230819869810290394123140807290 hex"0158d4f5cd5085c6e4ae2fd1330a52435eb0745d54c7c8a6ad5b7a3cf5333a7a" - // set 5-11: 2656965952206569220410287839949134856874352189248192147930831679380007159249 hex"05dfca18855acba1a5409f714a77297952277658af5e7d5e3a05bacd0b8005d1" - // set 5-12: 13957423432693450118120092425077530751840166358932317773385901323790404449641 hex"1edb9f2871655c1418f9c7b5851dd8b1713d1f9d7d78c9b915b2d3ecb62e7569" - // set 5-13: 7610225795517710715985874151201119876406845575780133396869144717381641586640 hex"10d33c3349ddff796b66b2c800a9fdf51d44235d14d74def1b2c112bf88647d0" - // set 6-0: 6482921272760726478838066628157548923897782117283646773208763176771446379138 hex"0e55341297ed43dfa1312685a260ec51b42ed6c24e46b79900549fd023441282" - // set 6-1: 4562585331778730670899179927104513856322577370213643119870201750008533040214 hex"0a1654efc1b702b4ffbcd21a9e0e3323a40e4a136bfa0cf81cf01bd89d433c56" - // set 6-2: 9299549824594530154451155704400285409056448609359755927574262701418672785771 hex"148f5bd214818a2b59ed67a8d79e54a048f357989e2046b3e7b587dc4893896b" - // set 6-3: 16654459784024455427280229763380300423080811024668332509526284511491790880990 hex"24d21716ac3c7fa8d8945b7b04479a0b397b8fe46e3424c0db7e1d7d824e40de" - // set 6-4: 18178936861568428015361893654874798233785855995042899944660014774323534883903 hex"2830e9e432e9bc3e8dc48c98c12ee9081273f5be246347769d0a34e2f0e7ec3f" - // set 6-5: 534506139369949013962728832141783820104682340925384016906020027968881380951 hex"012e850e98e970f096522ef6f4f537529f296f7f3ec9ade921780c45fca74e57" - // set 6-6: 13888044772855561714276444972404100722751042044045312252045340354941233320135 hex"1eb45ad2eccb950133aec7d4da6d03c301cebe782ba71e3533d5a0879bd6d0c7" - // set 6-7: 13061437363756343100054622876229104455920015737970195589611281743974716159827 hex"1ce082f6108befc4c6133865cdf1b35a587868b99c36f59811bd3771a75c3753" - // set 6-8: 15297052669271818809266618537917704542138894789392864971735934945598379827363 hex"21d1d3327b86bcb2514eac6f11a77867856f5a2cb24ff4f72f65742854baa0a3" - // set 6-9: 3240592020743113440365790241401792477958041186219702004441781545015089517479 hex"072a1c2e8d55ba7a49807bbf09ad71e000d67b09bba8ea2ec6009086342753a7" - // set 6-10: 12939402739160799630996576545137073878726141216092557580496570401396343874133 hex"1c9b7142435f0c29a9ad5549dcb9ac289104f48d39d4e196025268dfa1b6a255" - // set 6-11: 409838859583542828209958035048329036930557790097408442597169497017958367880 hex"00e7f5e830053d6bd9dbd5a2546f2b38820b7ec18b55b638f189c2cb86598288" - // set 6-12: 4849352055719384218783567790347020036570406423962447054960403165168624679411 hex"0ab8a2d0b81f7a40ac8a6a8bed4df0643df2a4dd4606194c8508595e116f39f3" - // set 6-13: 10140481868950825952506002812679553069445144019364683137830173127833535162812 hex"166b4f313145815f8ab8a09e6fac91e3cfa404438c8c430dda4d121eef70a9bc" - // set 7-0: 4169753203433043290708949478342499350225971996935208104044673971132510531963 hex"0937ff264a4c22904c66b8466165d9302052f5687326970486277a54f458717b" - // set 7-1: 16198597482473356107060462797493408464959815651823410647378959304462364790023 hex"23d014ce251eb044d74105355f1ae0b5dcdf0ef73fece10777328b86b0bb4d07" - // set 7-2: 17831214733154720272879709021886998538183166751338990495293296921834561417050 hex"276c1c219fdc62892dd095536db3525c18d0409121171197c99bdd8a95eb2f5a" - // set 7-3: 15996002991058741836925286413107190453488985346498046642177496721490001022163 hex"235d6ab6cef9830493b2c71bacd3782d67eeffacf4aed5bc07c2524203344cd3" - // set 7-4: 12128929995926069335150064696726717100038806543084523729572253928762150006902 hex"1ad0bb296be4e478c61149c736ad66168c2d0ba4410e05513c1af1ebe644b076" - // set 7-5: 1527343541447603983494013575570118174442170324803005341835852970207664984106 hex"0360722094dd4a26a16d8f12264b25accafdc6a3f55736f0de1e55dbdb28d02a" - // set 7-6: 3864366504647042739453971869413719136218296278515580744588126485271535533745 hex"088b276813522c901c6ac134a1ffa00cd61276e1221bbd7ff377d1dba5e1beb1" - // set 7-7: 16390744785373846505589339019032992526980013169808686005019244934399314954484 hex"243cd531b8f9fcb0cd9e8d9418c6e9306b89d96e0136eeaa66ebdb248bfd08f4" - // set 7-8: 1189371614834081242339044631966546656514169937037419744085755746584992776112 hex"02a12915178a6e7d4a612dbc3a878db9ce7153bdc9130d3df7308c13b2e97fb0" - // set 7-9: 2490564128297998291899011962907372091056992851367564813460897014374926950158 hex"05819bfdd569b0009e9bd1f9a41c7eb23ec33d8cd37d5d05b705b4511dc09f0e" - // set 7-10: 2632864541439030478006092584387470079076010621748787710053145987733131826177 hex"05d2260582a4a391c8180a17189b98a53b831ebced724333194f2f6809571401" - // set 7-11: 10997016251008884590554668186933912000821350188750456144761529496433221911191 hex"185017332cad227b54dca48915a4a78875967f8ed352fd96d5446946a64b4297" - // set 7-12: 3662989402605074726032541754492900291134797145446056852785520146936851543244 hex"08192db4386fcba811f000733a6f28b929be4f9aa1d2140ccc3f9616f82f34cc" - // set 7-13: 8371074929323402425468930212402691638137013802793901226648986870188378349904 hex"1281dc4a2838c70842102a997a6bc26a737209d42266e815738ec3943516e150" - // set 8-0: 17920452210119585965813298538098997746450528307627971419517604274103840658730 hex"279e9dd39bd768a08ad9ceca41993b8e8408d025affd64237b5985ed9a37d52a" - // set 8-1: 8026613233416032931155189579997899527124867847165186585887532521124762242171 hex"11bee6efbee9ff1ffe2f060d79bd751d43bfdec4d5fa5e323582f8d735f44c7b" - // set 8-2: 12536429843060624487053183271774959575059067729019923970247266906616071589989 hex"1bb75e2ad0bf3e1f255a9e983428b9baa96cfae8bf71d1aa4d3a786235e21065" - // set 8-3: 18354222295715868456732739635697044486544782691576216892030243636076554800619 hex"28941f264db478bce46c697bc574a5dc0b956d033eb29194de103a9a70bccdeb" - // set 8-4: 11685593308965088606881675161829854229906033467171784802160080423031157953626 hex"19d5cfb9c2ace7ec529ea27438d22668f09c2acbdc9c099bbd5554a6f3ae145a" - // set 8-5: 18989841286028554273231159314070667749621876499337485447347239057791285949659 hex"29fbde88fcb5e46ca563fad42cc7e26ddbdc0e655f88057a8a8f6e51354f74db" - // set 8-6: 13501500842653069022700095920888317808542113497043735775280862312089436522286 hex"1dd99423b0d860b8ee34e292b4616f7c870094c265f52cc450f98a575323872e" - // set 8-7: 16284422417487952110266526583186344607656490299306406671512902584454645262294 hex"2400a80de9d38f539c9b0b9580ccb9ae2e382f3092a657ff50a83ea03a4ba7d6" - // set 8-8: 14766820041476554952520399418749355774195705334216487399328042021346008099854 hex"20a5b9553d48bdf8ff66139e723e6a1655823b62add790b62e605d90044bec0e" - // set 8-9: 11502099463338241997177160748027482497157165595330950109059924501733819344412 hex"196df524c0987fe4b832add37f546b835dd259e7c03de7226a43a6a062b4e61c" - // set 8-10: 21097733162892834226328090737666232905549661288100963226189626007151883115218 hex"2ea4e4d02236497c570aeac4ea1896e1e3a19343f6e50eadb273cb5a7becdad2" - // set 8-11: 3620141777236347892405766912767968106066233413607983266884777435591408542679 hex"0800ed797700c5e269e0c1edf4947c65348976d4a67e16ee547c6c870c36e3d7" - // set 8-12: 4465316625088681267432956930147995293521314127558426510839100849580054135068 hex"09df4796e7cc0d89f1fc722c7d967d4c0baa823f93f9c4d6c7913edd185bc11c" - // set 8-13: 15951396696291486543574989938200386934444721629903447106494532971713975302198 hex"23442bab611ff64c7eb49ab07f32f52008673d80ba54e04bbc5c61ca1f0c3836" - // set 9-0: 21420692366857794685888663542888709905237738746850069466081467001353666342965 hex"2f5baea6ca93f7a41762a2b4f5b6c31c4e0d140e422fbe379f2686522dccb035" - // set 9-1: 18343503004862189418033094393114515169584171574852422315350418500159030922263 hex"288e0e05b537a48d5470921b9d724c26fb8d2900dc7d6f0741ba2c1a35138c17" - // set 9-2: 16439186901063853414808045554962977634854311593865750348846556486836509716488 hex"24584003a84247aeb78b30e2d8fb4cf7147785647ddeb68a7df6a79ff84fb008" - // set 9-3: 15200551988732901161699976788357951085426436066677048420098461828563894176150 hex"219b35214df5048253b823fcaf329a45a2ae7f959af6539ae7753e3554d28996" - // set 9-4: 15140772590596966074591171894694986645347795546765667852915300358255369432294 hex"21795fa4312815b80472036b9f35c1495378f172c7157a9440e62ee46692ace6" - // set 9-5: 7383386342436648909729802223228006548918015494414484659175617833341830753463 hex"1052d93c57b9902620b22e1c29b9106ad076f25f69fed4106736de133d72ecb7" - // set 9-6: 11436445698241305906567677067532324081573492145508451249291326304016376374466 hex"1948cc83425a81e7f7c6486e0f08b4b412724759ce41f950d65fa5283c31a4c2" - // set 9-7: 17397405229027848655285535331264669055168427730382628461971653096729174692794 hex"26769518d0ab71ba583b0022557cddceec3566637a6c1c519999523b44d953ba" - // set 9-8: 8888190346365862431131132945799487885295183925892581338098808269532220115208 hex"13a68997032013798fc580d466367a6a04502f500f7dcf4c2e6e03e777484908" - // set 9-9: 17373048493258440814074078107890527278667903472831731635546171123117085702144 hex"2668cc07461b1088861db6bf4c03528227a20d2b473e088aff34daa78be83800" - // set 9-10: 5394355195223713516914582580686192473163629785306318732489822694588538915692 hex"0bed18cab0f02716c9ee5e68f2434a241e6784ba03ca69df0edd97dd72038b6c" - // set 9-11: 20814957740385525027786677509245187599649792998372465800981035312224123940783 hex"2e04d93cc4f54309390fe572d6affd4cbb1989ddcf410fb476e3a8681656efaf" - // set 9-12: 11167741662268878371451552983943563550747492198375641214347145843414778750740 hex"18b0b7c0a137e1454dd3ca510d220987b5aaa51124e157fa372ec6099a03a714" - // set 9-13: 1505498991925224080559736158020686494389967648228591899080542175743913505975 hex"0354150d34ffc1b4ea2bcc2d705f72e2bfac4619f6ba35de7a5c08d5d7ec34b7" - // set 10-0: 8482807834840099486107357849095958421708288941420679407730439668240369271197 hex"12c1195df5fc75284ebe217430760ab4862de0255f75dbe24f4fe60f90c3419d" - // set 10-1: 1531932691795154082010331247272128035283420450879984505970978649526303671013 hex"03630b0da0e292c1088354c075dd1e00694fc14db1878a5cfacf2b7b797742e5" - // set 10-2: 10326017741190716069982105202291613302347042236075737537452333444753171570010 hex"16d451a52d64de482f4bf60beb30fa565a4e29904042fe36288002bb84325d5a" - // set 10-3: 2890563104449202149521252385842115871596603958515320789619311677428773944295 hex"0664003075b0ef9bfd1573f70b84f7b75ce76563169be92df533d5aeb47ffbe7" - // set 10-4: 5091938011714608365574587822261119297677309310900626302766934784886036216676 hex"0b41ef4deb720d4d2fe7dc11b4483b3d0b226ef5cfd8ba9a4e46bea1018fbb64" - // set 10-5: 18792973255357094538588824962661759194320829424712347846315600994520652609459 hex"298c7227e27ecf7291ff64ebbab81169202697e8e76afbe9fe1504243b4077b3" - // set 10-6: 5819484726278895533547092474664732368175576227992878488267454637556311136768 hex"0cddb62d67cbb120c38a93a9d10466381bcc71a202ee0a75f1bf952ac1c61a00" - // set 10-7: 14087278759052154922504944654932471722205352537489748711235261956958139094423 hex"1f251e0231fb968a4b39bd089704ca99438b645cfc29920e0f8f4988f77e9597" - // set 10-8: 6676755499836944199268283133886528716777488598645051771936175647684814488319 hex"0ec2e8e1aa9376bd31702a93e024f654ed26a324bf744d53271e510a1f7cc2ff" - // set 10-9: 7841200200792172536039490995922340397104113825218911994623753022413575084536 hex"1155f64822affa2c0d2fcd555aa5dad8698731fca61bd3a3d072cf33c1a8d9f8" - // set 10-10: 9685171750835271647846188024034904289604883281120913275229696726161494108338 hex"15699cea496017d4bf9fcf96e5a384e7c105d2ac074571e600afd0e9b4e7e8b2" - // set 10-11: 13804722593058778047599265964893015518608567919815229008355552695901539135617 hex"1e85323381cf7d3ba3431e64e894ce4d693f0c463b6d104dd33dedd7f1b9f081" - // set 10-12: 133210224564739370698401112580329091433152068231765294734991529050629411851 hex"004b64f1d7c848aa7c28d6a815b7ec34ff2bb76d2d8c25f93265ad8b20b7140b" - // set 10-13: 6253365067148837443745536970484493754157158998156041417978340186561909915882 hex"0dd34779b2145df8b131bfb71ffed5c835d2b696299ed813bb472be2f3a880ea" - // set 11-0: 6379626794062388565530320965673584683811331210463512233691169393056454417810 hex"0e1abda56faf0df6daf6b166c95c5edc97bac1f73d539a4e419e36cae7ee1d92" - // set 11-1: 8031021217500376290269114216814836477415391402921787637085737712949651005952 hex"11c1659cf668bedf75fe21edb2ff2b1fc695bbd538c1331845f24839897b6200" - // set 11-2: 15261959534341262089656432084966075417921918036565394975811438856221288978192 hex"21bdf685c361d30014b4396b358599cefdc9d5f3b464d67a54c9cb2978925710" - // set 11-3: 12412675319987657724460960278402203548317535126494687402198671892291826563464 hex"1b7153446f1040fd153236c214b0b502ccb8c202c54ddfa527132962133d3988" - // set 11-4: 11594484527416994136900781664743660516883697944736099448760569480817952218099 hex"19a23ee53b40796801a094627b87364921ae981e57f9f478ddb3fe9e3050dbf3" - // set 11-5: 5525949004768282420418522754788387377346850869414250693501350383184014395566 hex"0c3793885e6423402d09a54736d9a0fab9f8e5edf858b7be1710b5ee2a46c8ae" - // set 11-6: 13423677678153887686951876961584096043047689175638209759158420018856273430250 hex"1dad8846162762182f95a6360199cd0ccad756cea2e4fbb6f17bf7bb643cc6ea" - // set 11-7: 688554022717474500337948897714325469989973507431329797109415877246281679190 hex"0185b530295447254ce398130e4f1bac6a4135c8b9be462422bb6ed88d7d8156" - // set 11-8: 5767985312159947447966233995178318554138266544591427341210101818005833690773 hex"0cc09061f82989f499b935c855c6446ee4c02f2b5ec74205bb2681a3d39cae95" - // set 11-9: 13782057493439290506357575012457041256926849070794382612465582256292384507590 hex"1e785e3c3ce8c5a93d9a16f466e1df548f855d70d18613fe8dd861f3e4f486c6" - // set 11-10: 2009465632383454183075946487099156558696455704620200103263777377956167571948 hex"04715136d512b998cab28f4cada627caf8da082e1b11e2438ae4f8ed17b259ec" - // set 11-11: 10265570962161934109202420603055144010322859077969741656080416572925588897009 hex"16b21b75881cfd9f0ae30c2ebb472bcfafd4c09ff390f3a381e2098d9b057cf1" - // set 11-12: 13063467510206676485181697613068184940643350938488359709447602318070297992418 hex"1ce1a91c61b317ca6f871105d6034a1ae73832671555965c2deeb24c5da51ce2" - // set 11-13: 8824580488237789516855671915345935747743201560548603121129517348234754630838 hex"1382891a3df8d5ba54ddcbd4a9061a4574b0a4813c7d5fd49797bcd8ebbda4b6" - // set 12-0: 18405974527641184935569939050199806786119735189423462681352004154947586987761 hex"28b1699345f2327ed7e3a35dbcac11e9704a2d019568e273b2ddbbdda61b96f1" - // set 12-1: 11063658239692825381704700810385108349384459703800229121613802621026834850995 hex"1875cf03eaefd3c4a503d2499a9524ba9c8e8b1906511a4a85800ee21ad424b3" - // set 12-2: 20401912636755055463157317129314482008782101856095804626717136888886428939725 hex"2d1b12c661616bf91e9616cf0dd1823f5e33799035dd1bcb92bbb8bd7b9fb5cd" - // set 12-3: 10581036997862130058603889786198200057133900928078268413900852134308841628552 hex"1764a79b21973a65541bb9bf58bae57a63de6e20a207369f85b0ece77b1da388" - // set 12-4: 15613862437263830065893280422700893831122147824370200118126675792748158214283 hex"22852209e2034dac637154e40c26004c7d2f8d6b0f2f649fe920d916a0b9608b" - // set 12-5: 11637898091445829201992956909089879348463617460955895182594618572267100421779 hex"19bad11fd19291c1d7aba146796c8bc076303184293b05257a2e95aa1b35be93" - // set 12-6: 676470684249461112964281503193041675013396554434239929609436328672155420783 hex"017ede6c3a4fadb0c3b384fc1bb3ba2515ede2ddf470bbc5279817dccba8486f" - // set 12-7: 14862758280768060051884504554805186980208629806423451755599092137651959992706 hex"20dc05e84fe2b3674dbf6cfbc4ea1888a95c385a682b198665ea24fe875f9182" - // set 12-8: 5623342967419780942118234966618900971275224510117264341831041912523393680166 hex"0c6eb30738c6c686153cef7a45b97d5da153ed62a67f725af666c8f545414326" - // set 12-9: 12293742687505619727765346377361630310803471543338450439759434637239250426631 hex"1b2e0303ea261450c0505cdcf6d8c5a1fe7c840287ff532d632de4cd4b899b07" - // set 12-10: 17107107724389526013252251054585363312805578717860151655674796329456502453436 hex"25d247a3eaf394fba18917bc67089efdf773445090ab333538b9db6dd2aa34bc" - // set 12-11: 695490429984933474058785653390434166254929169748519672533632124843844650437 hex"0189a235ce7315920cc9633d5dc1c072cad0ebe0e95a07a0a7f6152bb14345c5" - // set 12-12: 7941603993861390710630117468483386570984050378175531457457840811645822985465 hex"118ec9dfcdb51980db3cdbc0b4917ecc57a03dd0c8586ed23145fb8af86e64f9" - // set 12-13: 19423663035279971057851778008344970269742436279020301703706239058210708410668 hex"2af16757fe4fb59efbf68b60493d51df19d06df73ff34828b9b0805b3a12512c" - // set 13-0: 2844460676842285471844840162496739784337096369846435331204280645139535043731 hex"0649e85e611b0ea226cd5195e88f479ca348748e3aceb994208fdeca397d1c93" - // set 13-1: 5914749649291606384462747717764850940787906745751128721215181537027495043325 hex"0d13a131ca0eb5a309eed385c046002c368bc570ea227bb02cc92be5e30820fd" - // set 13-2: 16403998562201315274383761287898474039980386929670468025842124690312505385798 hex"2444558ba0ba9ab3e990299dc09f450bae4c4c92829a42c6943c451cc858e346" - // set 13-3: 16679714051449621657256662882211432986285335589270632187081448168743144646010 hex"24e06233837107b33fc5cb27ac7baf78d48735d71cabebf68bbe8437ec15e57a" - // set 13-4: 14178974435133537452754432783693851994073934244854394772136599698341675338748 hex"1f5903dfda34ef89110f00cc07959025cf325ee02f81046cc48105d3e5930bfc" - // set 13-5: 14490318493007296294817313593753116388501252549516359980240258503496717340194 hex"20093ac8cbfca0030d78cc010018beb1b3e689d52956baa0c54ceaf858488e22" - // set 13-6: 21219478166573360512901478467779541318881953172337799756939010190701884653821 hex"2ee9cc8d4c5e47162bf7386e4325e3a513e6d4f4458f5e01fc343e340124c0fd" - // set 13-7: 13653038712207413996195005796658436532811211815454701512198612316602372800026 hex"1e2f5897ab3f2279bc761e37a8c20cf48a6bb27fb6da5bf0a5f67fca6ad93e1a" - // set 13-8: 6606031466185873676955137126631780808678269492505994174970319773811652852017 hex"0e9ae19d75c9f500b45f68de80244090eb66f42dab81886a78645cb1bfb27931" - // set 13-9: 6998326006251734945119834407770954155028321677085545151592873301468610324946 hex"0f78e982ab46a572920bb2e18383e1427da1df92db1f3665498c719a7af869d2" - // set 13-10: 15717984973502827230694305820570642040862757036680118080574899662027439132392 hex"22c0107166bb0aa5b0885983712566f8e0b4471e69d88ebdb7d0173345a2cee8" - // set 13-11: 6129387663611887185666499162725019000386957238200546358846681873950634080364 hex"0d8d1c4837d9de3b2d429fe96aa4f29fce440e52141ae4571cb1f1d7735af86c" - // set 13-12: 3229894653990057163047872622628926092609943988699832798310941005306795398260 hex"07240e3b2aa1472c3c81dbc49bfb3e866b43f778158a3fd6641a773da5241474" - // set 13-13: 1577249093608064810495237122250056987651980088410811739655744853476971398741 hex"037cb0fc644b2a88c90ee66cc4ddb962336347ccaecd1f4fa8eb567c04544655" - // set 14-0: 8019490235657930229602545685025618469913840887375206662306714562639338096359 hex"11badee113262abf691cc75f28c0236812d76537940e970f4488fbce2ccb46e7" - // set 14-1: 6360514614281299182411878013125972206098844277909449064382248671632240409416 hex"0e0fec7749cda728fb17b5b1ff968bd3b6433dd6dd6cc619e8ab2eae099ffb48" - // set 14-2: 18532505668867290379738328175003759079607042632729982459107375168365918757976 hex"28f906c82568287d2256b56129e8b83944f9ee180627afbc9d510fdb7b392458" - // set 14-3: 8421518624327767035539667378193845962377888010421324291966623261409058898245 hex"129e691ecb7b6fe77c01d70bf2628fe69e5f6e962f1029ce626a0d1888624145" - // set 14-4: 21508024236353721936402111331734487542417525255582275314005272967405040862839 hex"2f8d1c3dddbd8cb59cbec15b623aa1309d12221f7c62d956815c924114ec8677" - // set 14-5: 18027689383014810715963711252886295463940938266456411644747464137365500951807 hex"27db4f836bee8aa950940cc1732aa52d0e741ae355a8c3621ad068c043f77cff" - // set 14-6: 14484077699638992615220759300878276902226958277985946809174186953862915299590 hex"2005b28ce7c5532ebf6b7e51d10c344c9a9b00836e4fc37f7eb1176d640c1906" - // set 14-7: 4817080763362108602919187869554992685382108795016276838137423588157592666796 hex"0aa65efff54d1d497ece96910f6661001fb199d24c3cf997ce1e401788a382ac" - // set 14-8: 10791657063117982548380087239678382293931165307389242284595466175088416832331 hex"17dbdc878bd81276bd23b35fe31d93f4d7cb65b722e65d58fe039d126524bb4b" - // set 14-9: 17574587559710800088797913763598808892829608388483075257576879500511250128297 hex"26dadd32b90572e617c96576afcb2fcd9605b1d898b2366fd9a7cd0c23769da9" - // set 14-10: 20931338330271163055101602391315623325223860904427973201832184784566097488773 hex"2e46b7b8c48234c4466b0be922a9525a8896b2d6cc9651b2f6f291cf2bd72b85" - // set 14-11: 1954574324880132355431783868495392698894997264747376529310223470792870288803 hex"04523ff71405a30800020b61ac9a1e6b61ca68f9859f6bf1106f2a0fb66d5da3" - // set 14-12: 2551137710278149502571112114560159376697849893483916552857521579500208583200 hex"05a3e48cdcb56d89222f017078cf35af105ab2b2e2cdb7adc3d71de732d2f220" - // set 14-13: 3997814265160290573081282672183091638735659350920634229735367532175023689675 hex"08d6aec49dcb622b4b6033438a7b990f6e08a2d41909392a890d6ab2970c4fcb" - // set 15-0: 20759074837657564809501685143530456377562536015816086555379080667602653298306 hex"2de53850b4466695b93e50172ffcc6ff47c882aa9444bb09652ee9f5a4f43e82" - // set 15-1: 11573288866341175121647407708978273297857024597782918874282176717371576773130 hex"19963fd677971a8f8f1fe5d09bd27ad0676c59c6b99cc2c46d8a886716e16a0a" - // set 15-2: 19475107603336226504587469711392819869087288902355805230614724291289122375846 hex"2b0e85311370de1c8442d4216cb8ccff3d36a6765addb8a188408eff04a488a6" - // set 15-3: 21884242265301052283286073107133504985083194336113478618838523331660374213570 hex"30620acc22c938e923607f077ab953afc8412ab4cd325b812e18b36db9ea03c2" - // set 15-4: 11844625750737259417493690805104254337758743574820507915512371579679338049474 hex"1a2fd212df4bf20f8e47cfe5c5285a3706f8ab9863ea128054bafa1fe192afc2" - // set 15-5: 18479163117067129250021591308069049721232170743585134941796617403156042279597 hex"28dad5eeef0e864876e671e4a960e451d5cb11204eb0f7dedb1d1bea322aeaad" - // set 15-6: 4434911559893931929914698652677389633068778061297646529129767359157675249407 hex"09ce122c5b6d149f0192436aeccf959f73db3968cbe69f6c2dc955c1a8644eff" - // set 15-7: 316682746098441691626372255125560321251096997722401729182940832349927288255 hex"00b33c6fe57db259f1f62f8df50692e8d8c36a22c77234e0d81dea745254adbf" - // set 15-8: 19610390525670030492896894087745165507340241783776573708027658938288182681300 hex"2b5b16738d4e4e8f30d8073c01e34d8a784bc6b41ec8e2afa5c8d2347b145ed4" - // set 15-9: 5840208148535790468526125686220196099566194081164771919666034943299219873755 hex"0ce970cfdbc28f9bb3195dd2fb274f9895a29a996aadbdaa4cee11b546cfdfdb" - // set 15-10: 3679027218793663842409677356801552901605408436635647286999251784339864591201 hex"0822416fe28cab89c713f9ab14d28a3d22a7033c1ada634ce7928681369e9b61" - // set 15-11: 9878321578558671609403512127325051261043472923444011356477587484000484178928 hex"15d6ee8f939ad0609d6eb842084c6ca07a055e83ae2d1a0109498f8b7ee9bbf0" - // set 15-12: 16646455734597629493777237097088292344110223995728568379569260368267096014288 hex"24cd8f5ffaa9da4f482d9efec43b3e1c77e8eab2f44007269b14614c932ebdd0" - // set 15-13: 14735311379463771264009437608444808852233202023120148855228542005281236140064 hex"2093e404029042625197d41362d07884031eb192890e18ac0b1e4237afe74020" - // set 16-0: 3066170574229466435407264700502616839626082070514501523679452764935485028736 hex"06c7641b87a6aff30a7828f5a61b6b79949489013a23ae8f138bb6458a727980" - // set 16-1: 7951387307333182634684754650901435973768779794218900331714625086350726274942 hex"11945363118e8c1728e09565b5ba8e9c322b281d50c81d9ff94a18612ac41f7e" - // set 16-2: 13578824606544430966133042087468301830727811282121948825028360301706303669231 hex"1e0557a57f3b98074694b3bc37edf005f0129ba8ab7aeef1346dc1b94cc283ef" - // set 16-3: 19848381031896652139349791682530465833719275685855743122849792015759588531339 hex"2be1c91a0c0747ed6b472d5a6103ca79844f6fac466e756e51599951b0ad1c8b" - // set 16-4: 6922136549797750291447751953663854475218048098902194660515442295348938322083 hex"0f4dca5aaa01292e52a8a19a994dfb8ae96163872353ec485ccf1a2c6bf2b0a3" - // set 16-5: 10287261443878564608994021014993200221021609196127927226041534661185500281120 hex"16be623636b1118ec0511c5c0aa630833c542c80ca87898c8d8a0c9c6432f920" - // set 16-6: 6329063805909277980282354325384845982783657973381777424581891744521604640994 hex"0dfe1f87f83f760e4779993ebb87b600763a78a1e0022f2a3c083730c09930e2" - // set 16-7: 11017548748010510224711773916683171526878158646735796493859902304094594577338 hex"185bb62bd0f1e1ec17991ed4246cbcadc9d17af7f85d2583b555b293b85cb3ba" - // set 16-8: 7338335804036221772945379382782674399589206056354184002757176151341198318122 hex"103959d3005c53566ecf636f2d99b94266ae10f20d7941d94ab52b1e66c99a2a" - // set 16-9: 16538115574966264108203522400275571374556020887608210819563613080068710593180 hex"24903de01d4c24236f18e0a72f1485b8e8e0eba5385dd2ccf3da36f42f29f29c" - // set 16-10: 5138245976626127736555381649425906350640183768145541963359703291501245587848 hex"0b5c24e7cd6e5d92ca2e92b79c3cd608a0cbfe8b2940aca50db477bbbf676188" - // set 16-11: 11347291457433539838423910567581114929056891897670787919546976342310334767900 hex"191656e0acf10df4d56c25255747160742762fc2d37e507e563b9c2b2158231c" - // set 16-12: 16731418617609356258989018213857655050257827940403117452476763890174877962606 hex"24fda5b8762d28c2cb390432cce54693def5c5d8cf3f1a820bff33763673116e" - // set 16-13: 5300557287595854140445529914668848275536281916366261035684431572728600543772 hex"0bb80254eea5b1630deb61300db47c2e3e9d43c0ae79ac6d8d8e5dacb30b421c" - // set 17-0: 6573154341426354993599623914164155921131813615298607946435982334364383320793 hex"0e88460520595dd83aefc1ea925bc7b76faabbd79339a6862c8b8ae500e61ad9" - // set 17-1: 16419308144058642981524756443290703631729426627385646905142158478345164404879 hex"244cffc3946a184f713d5239638a2e1d795aeee5ee445c9f9aab6409e735b88f" - // set 17-2: 942314767315789144256266064192022265579304275774793342260835421710673918285 hex"021554cd4ee080447d929f96556906a5504df942919385bc5e64cedbf2ae394d" - // set 17-3: 17945712678641984649495876620223190782305382105763957622870181201252059717682 hex"27ace9d675fc4a5fbaa1418f1420ae54e57c8343a69843ac97c5ebcc81782032" - // set 17-4: 6497446328454795535775520142893202697197882656922991300092165933292014766725 hex"0e5d6c9eda47e171d3f5a2edb52448f00acda78580b066fc588b39aa09638a85" - // set 17-5: 4597431274747983679157649737399090093759447324935531801532881928263496852124 hex"0a2a0dcb9dd824a85d72255623c47308a71ac9c4b4f6bda9d273b1c1f88b629c" - // set 17-6: 20581664438782214735167492264807215952133504025063870863776714994387749970180 hex"2d80cf2b46f3ac5285aad169e96b067b01de824253f4156311196ba6e4bc2104" - // set 17-7: 5854805250432620287068939301087113989827350315462338534819773170350910225622 hex"0cf1b3cc75b68e63af37eb275714561af525bfbb82497cd4730215975d8a3cd6" - // set 17-8: 13548539273975522227017059057161374261181128673406746320122994151943985128196 hex"1df43394141f318ee9571c1ed93198d282288da8bcb5b33e3c6f1e9269a76304" - // set 17-9: 7414800418339434590171697383031637744601564309993253226498272110927128779715 hex"1064a0d92da154a1b43895e1833b6bac67e096996e0db5bc1447c30bbdcb5bc3" - // set 17-10: 1052987139013233499761917411027037646861657729931697227519754049539833189269 hex"0253f837b9e9f89777891e37357c8654e1a5d5ea0262afd58136f1c1c969d395" - // set 17-11: 657108667626796780066815408290681939596246857020023912757838581820942772606 hex"0173e90b1dc6b589a510c7364be31128cacd0baf495fbb9161024b880c18e97e" - // set 17-12: 19088282520683145597098955555305422198780142332183007920340899996970202127885 hex"2a3395c5515973f8ebbdf18b8fb573eb46a4e8fc88c2f159cc6be94c7aa35e0d" - // set 17-13: 12616611543293706969401642310383814806112402432261338062963427055972449363741 hex"1be4bfc35f47cd93bee0e1adc16a0957f824a9e24f31a32c372e97b6a2f9a71d" - // set 18-0: 9271002136483424788269278316391606491360153732024211579417926107994995432826 hex"147f33857a0febcfe896dc770f9a2a86a7089b55a396afffe4bb21d5321e1d7a" - // set 18-1: 8228171988949250866347662896961764196608750080646539001443256474901139877051 hex"1230faf580d4ac8a0a7d8f3fcf457f63ab27cc54c5820739bf6437bc43eaecbb" - // set 18-2: 20240081759615964816136232877050251456333669788276947762731625798225823502998 hex"2cbf7af588268ced22cad9f5a9254d95c5f47127387655ee36dc94d70d139296" - // set 18-3: 3685474186777860155223706676482968796090983045736466861690878558020083034916 hex"0825e78b37cc551183bcb25b98363522c0a801206000c6ded60985718b46ab24" - // set 18-4: 305741399293956298249448376598537769086716682101868856634885453070917344627 hex"00ad0b22c9addd5f71d90a7578913c0da692d7bb9230c78d6f6273114df69d73" - // set 18-5: 14942830908704142867090451021371809832404069532430585621173997534136021340349 hex"210957b327089cd3495ba001efc730c8f84d824fdf9448c277d02379b694d0bd" - // set 18-6: 11873341523902185373029537495825388400298468809112431373607438726587086076801 hex"1a4012ba18c18efb60b94d7fb0fb750ba948a5c73e55ffe464ebf7acbd04fb81" - // set 18-7: 16566421774425889929886838459987430622148040878072136298073788804726016806526 hex"24a0432f67e42bc4409433b85588fa6d16dc93432fb633ec1170e1de3d258e7e" - // set 18-8: 18314173705630320437871113612645566255775444265992974192826331109357704470403 hex"287d7479896cec61832a3e7e5e257209609c6af97c315bb08473de27be705f83" - // set 18-9: 8597072000455186494551694692524831407069966911367008568012412188890924300508 hex"1301c5336b7f37607888212f40b73bd0aea535cc7148be0f9cddeef1f397b8dc" - // set 18-10: 12713907619301764178052509321657058919935892208409394514649600000706175319189 hex"1c1bd11368695d776b6d4f51d8b9a3ff091dc23b438ad3a8e00f435768543c95" - // set 18-11: 14893305145776480356274920935320977108910444566603040558476174175562031483300 hex"20ed4fde81fe5b8cde1b1b005cc5a470003b8a12d74d4178d03351cfd620c9a4" - // set 18-12: 11027938853766719633497710751595847377263279173227878474215846011660771149283 hex"1861979a4209de561feab4faa20b540fafe14a2f47815d1d6f756882735645e3" - // set 18-13: 6927793728403485743741891409676155921703126599118383623637742555953569891357 hex"0f50fe0714b48545aad0aa47edf4cf85b77edef8420cadbb2ab055537896841d" - // set 19-0: 275116175553159498718561489405169511232715998055900506709208190227728439831 hex"009bb5d21aeb5bf32e1a0a2c6d2f7a0044c7bae33fa95f6264135534b5aa1a17" - // set 19-1: 7338708370982730261395030177227912514214944721567888714384503728042214055309 hex"10398fce470a822d6e5bf4a572fc5aa091e664335a8f0e5f4b82ba80dbd25d8d" - // set 19-2: 2285508597732647746841213906783440647997136124356359059650028586535477309792 hex"050d8d517b496e2067860366e267a33cceafe24e53584565511927952e43f160" - // set 19-3: 15163443940499746648640851269666923560658903809778640616581862089179343108182 hex"218634834c0bd7a41a100548c68c54d6d47e30ba6841925ce0afeb3aea683856" - // set 19-4: 37868753390676617287004841173348795594362354905038492583057282228528019603 hex"00156ed62144c5a67173008b02d76e28126ca00a2819c0bb3eb4cc92c196f893" - // set 19-5: 19475937072595290694509025801956972632863465524774747773770243946674956142538 hex"2b0efd5fccfbbd5f77198a0d800e01d63679db7ee5dc4213c4a1e82b47ce07ca" - // set 19-6: 1818532521520079200500527816308109106767855745862413136331026404438772138114 hex"040540c023f617d52c1ccbd2d9e825d8f60a2f6cc6c7e0230f8c259659cdc082" - // set 19-7: 7893556755641665136576228990240239515272703124353568551151593029797349984766 hex"11739844b03202e6faab271c897dfa7bef337a5b0672ab13ebe547f572a089fe" - // set 19-8: 21843411659343488969197036446870567462789014279182131087406329675847260538394 hex"304aeed0c9d0c871f87128dbbb634322c5449164a13028e7f8e46ea7eaf5861a" - // set 19-9: 13883536936296384480685931731174096875043607202415233199362935327975006076376 hex"1eb1cdadf95c5ae983ef642bfb86f103558afc4571483cb7585a00715580fdd8" - // set 19-10: 3061885619227488514362869971925298711535995206671454426027635264218303442708 hex"06c4f741b7246e5655a575e85661422ec7b71e79535db2ab86ca6105124a2f14" - // set 19-11: 18477632669759047471715211461337808302603089797347923153039515976242018999984 hex"28d9f82f7cf626d8bf29d5a074bf2e8a64a11e8b415465ec3366cc0e4af15eb0" - // set 19-12: 4953684980989921770137053964305439167945572062294709110871332076115076441738 hex"0af3afb40024843ffe9126a492594cff90682e2c4afa7237bc901e70a081e68a" - // set 19-13: 849590699713478394267684876803414882497887483062076673282369901261463387635 hex"01e0d9ee7d4bfb5b07b2d9102409de25c281bbbdd10f2bbdb04adf4a2e467df3" - // set 20-0: 7481617454708320190331411214970150566519243590120906863698168124347483283307 hex"108a7206cd0ab67ebc298481ce73bbff082a5434b01e26d8ec53ea69f7dddf6b" - // set 20-1: 3790897889674729687102011235738708037383393765058266352188381434189575086080 hex"08619279b0aa0c5e4f7e0ba18b37dfcb3ab7762debd778e1675539e2023fe000" - // set 20-2: 17582850308142585333519054672998882111865339708436809129995518706804527076353 hex"26df8a6518857f2cf15a8dd27eb05fd4854710b80ae479cc3dbb4963dbb61401" - // set 20-3: 18961585057625546222763334757505522771740769338010572292783220912986926586854 hex"29ebe07739ab8b1f23d828751d533ea3630788c03835c7ade9de2fc725639be6" - // set 20-4: 17761332237343741278668998123360108574589045018570742689473320560784505694171 hex"27448ecbcaa51b958aee7c6415c041b815de8940e427fe2152c77639f3c5e7db" - // set 20-5: 2985768806786881176362869973473950745997650698247163897069614623128281191971 hex"0699e2a03a056f4a0323541d174c4d8c1d71a7b04c664aeea06aaf2f97849623" - // set 20-6: 14099532828736062687388547070054719462342298981811592749594569670955512096417 hex"1f2c0d82e6d3dbd8f29d81dcba037666a0567564fed3a90a34f4c2a0864fe6a1" - // set 20-7: 11038429458121896617356666499000022639824993159854464409767840206807807728043 hex"18678798666318a2f6c93fc93d788c258f01c5aa450b65f4927ba6308f7a99ab" - // set 20-8: 7092464867594165410092487979619486929166817679669939558999555261465867685619 hex"0fae315f1aa96516b51b9a35b0bf04a303290f7a4b0f107434e88c9b897d8ef3" - // set 20-9: 20690943609696626243672018055336898909740557628366317533030490341400911534771 hex"2dbea8b90191f27ec6c6a71c3b576ccc10b6945a2d651b526b36c86929d7dab3" - // set 20-10: 11468803355345327303851639215186997122074583511720489615730106184659306943551 hex"195b1cd7777a95a1dccfab7ad95d9815d143fc6d86f974cd07417038811e143f" - // set 20-11: 9723340381470060111632263437706139036358918795037011403763820908081655273682 hex"157f37337b54b492a344d0bdd2d2dfd3f27a74d529898ae3243bd532983b58d2" - // set 20-12: 15929497108714526572140462634902391796285476840034863688822264979709196730555 hex"2337c69e87af024d6cb0d8f29c96ee48114d2e7b2c1535ad6b00e178977380bb" - // set 20-13: 10556139316790113226399166507094772235069235781001645893008903131855134732783 hex"17569028d04252e77d46764676068c2e1d43bee814688c6881424210bee531ef" - // set 21-0: 9679690373149117563754317307037586538394929348733117229177073999196519450461 hex"156682b6b037656dd8a82fd83ca1924074f752a207b2585ae4c9ea6f4c78c75d" - // set 21-1: 13953490152873041611053779700802518995304489998104548903919774028525032867964 hex"1ed96542fc65f19260e0a755919c2e24659105c4c9df00ded15f93f442f6887c" - // set 21-2: 8584860336778813488021026261425560177968889952950706471574873674510806966419 hex"12fadbd7a3c4fe425a3f30f0ddb2f375e471a373f27e43c8a494d9678e8e6093" - // set 21-3: 8400619522468195192079024924375785176686244213372269992523849676384018875300 hex"1292950805f2f6b9f28b3182436c2a975dd365a59195dc4df585e87395c7c3a4" - // set 21-4: 16018239095599670975582212156736908990475077583136160880304021421989907078233 hex"236a0085c40b7af8c4448e830057b33fe8df95a33647c37c55b225bd5f8b1c59" - // set 21-5: 13442762142079759258078337448325782252795445513077684243558458356586404542166 hex"1db855703240e2f49d63e43c62f8c30b2a39b67bea6e9a9481146c046af276d6" - // set 21-6: 8012524517439221218249889438165569497775551565363444399021079689755695756644 hex"11b6ed9c39e7cc8f66dc7f9b386ba00528af573aea6d008433d39881470fb564" - // set 21-7: 18993442931337392722189844722480176040693468853419121807183123246184718322422 hex"29fde8616fbc9e483e1222d447832cb7bc58170c7ec86e8f4de9070e07eacaf6" - // set 21-8: 3920077716342530896195446297162279477088824676672184510151991496745985467962 hex"08aaaf73c42c827990cd0c64687ae8cfa0b373da849a767ef3b63ca08327663a" - // set 21-9: 5663885918690734602622426696143772526257235018784490039324179199552252272203 hex"0c85a554dd2ecef748e891cbd90386b5737d945603b56c887986f9a306d7de4b" - // set 21-10: 11007942216549411481832816505096362871539130535791764225892613523847180067807 hex"18564645c2a77acd8cde744455ead6f28819282b59f662f7da89dec13b7623df" - // set 21-11: 12333277086717649179464584335417603775633093807601488202185840108448843332123 hex"1b44633048278c6435e1449517b0235bc9f4c2cf39aaf34908726c3dd3a07a1b" - // set 21-12: 18845646001611639216437777320622198530894193094859924604338859788769244491906 hex"29aa41f4a0e91cec6a4481c3280a94398f6ff1b0b07b39ab0e6668dde4383082" - // set 21-13: 4365664869724113934112630479809518948808449158812862195377335314227128146059 hex"09a6e0f5ddbfbb30481e978e215f67468f31eaf930dca350f0fc53bee83f988b" - // set 22-0: 1895928299034844696630794694609519515092896092191683631304721647222032914779 hex"04310eb11496a8955d0a91b51aead8dcd1703cdc4b0e7f2f4674ae3e588b595b" - // set 22-1: 19026513891744713045426845531420132126578554294461150386909840193098440147673 hex"2a10a00f88b3abcfdb5d1c8dc9f8727d16373ae7fd05b239f7e5bc22909682d9" - // set 22-2: 4073281111734161932072345995811001896063226222777392994725894652964051683943 hex"0901653987feda97752895523e956cffbcaa8d3f088d280cb19cf4d71f010a67" - // set 22-3: 13362867147840304033834065229457670563442204439046527165143934160967798444725 hex"1d8b1d6227e7d72dbea884042ee1324bd31a5fbb7ed49b79f04e834245a552b5" - // set 22-4: 9724485076061228092177286932258189815958450833155679889060988975712535081230 hex"157fdd0e905e98e890291c69bdcdf6307771876bb8288809b44e63bdc934710e" - // set 22-5: 1627333086421877964064603957348348763696708139082607562629629725119997724989 hex"039909b2ef090b39137e7420aa7ef195656037f3482b4fc10e554341d68ec93d" - // set 22-6: 15641874381988682075545920458678901707167602315586561132909307694310257446023 hex"2294fcb6a8d69542b31f9942a59c4f4503e188912dd1cff39640cc2217e1cc87" - // set 22-7: 11034182059786563285109970430313289917032071817373248775707546493147901388113 hex"1865202fa3c02e817f2fcf395c446a3eecac5d97950a44ffe1e8d299e064e551" - // set 22-8: 19299574745226772810381056007321573284793444116746272581694295128392282602507 hex"2aab2c1581a7dde08e01d9efd6c7fdc561b8c7e6fa75020b9534f2d3b35afc0b" - // set 22-9: 6482638271546132546782310681506292669989505915370438641175376336582811537739 hex"0e550b117eb8b4be6223be3b32b3367819c099e5cee581ef44a2cc483073514b" - // set 22-10: 5515138970831679245126906315331906152285174207704247085730757090763031968272 hex"0c317541eccfeb5a470e62a4a7183b1b22839e1a1c23bf58b6ee43d1fe87fa10" - // set 22-11: 5476746571008230667726688443817396210804752373221945489797046634505665572661 hex"0c1bba8cab5dc7f68592841c2f9cee4e068d6791e55f4dd54edf7ecf336cef35" - // set 22-12: 7666694240010574980777401583687953099995588711474009270339615112182231942529 hex"10f331f64e0bfe4a9226e772e395f992634eeb6219cc239dd5d8e03cbe1f4581" - // set 22-13: 5345423812126487230177352826531606752132805611025916574123407915411930666385 hex"0bd16714d1d83b871586d6c721608db6150796aa7d942a7d6b7f37e1fe54d591" - // set 23-0: 7211419275788152379372992549185439317698375419836488104253705518694042119228 hex"0ff184c75453103ce3e832ab21e3f16110827890bdeaef035641417fcb9b2c3c" - // set 23-1: 9112140750806762434510825375931543886135367141484613422947675423683311130537 hex"142549f5302f25b6f4fd1abb1b586555dec7abb108c3d988222356f8845157a9" - // set 23-2: 12020406779776320543918475257645763209221278449775176154727249143619468329590 hex"1a934f239cf4d919aa5a54e5706f63ccaedaa2a523aa75b6cb425fccd9b30276" - // set 23-3: 6961266423823329910790066424248133365666435921221127260870444632539329606224 hex"0f63efea5bb28d9047c8ef3d06ef698f6eb8d69cc2968256b56ba2c6b1aa3250" - // set 23-4: 3527954161191330198309290076708590175518992377857531220243324230315686986882 hex"07ccc054bd8707ae6a7e1136a7d734ca437bc91640e819bdb1161db6285b8482" - // set 23-5: 4506493800007416260514839382433205292331764028735360433653631210611507932973 hex"09f695c935d12262fc81ea65c312cab7c604cebf8a7a8e32199912d3fc172f2d" - // set 23-6: 5530043493028748853396066194331787195114268917530734310055878976603589658986 hex"0c39e4c9610d79d226d090265c7f961ce63aeab2e824e029ce1b89601913496a" - // set 23-7: 6225101949608434111198442012357272827532649788667254718474232856896193900534 hex"0dc3486866c4ae74c9f7227bb2bc821fe2ea1a265a34e961cfe8e0548f0b2ff6" - // set 23-8: 18857681750145313162493356993928966938826030906289025101399379263672964054354 hex"29b111d35a7ba7b41a2e65e5412dcceb796b31d0d87b9f1a4d24b028f2377d52" - // set 23-9: 869004496821135911657110194622810910776043851317139916414752924319830673140 hex"01ebd6d03eef5c45e78c52247c3282fcf64558e43ff15e1d39533389bd7a86f4" - // set 23-10: 1563829187789877652048924285544523323087888587074484491222967490033068091506 hex"037518906b748ee732531e22b29338f4a4f42a0f216226011632c4fc7a592872" - // set 23-11: 3746011388196035005128740753677692387874351474501361202463946309770129429478 hex"08482ad4d100cefeb5679cb8b4f6af5aa6b87f87d0a7815aebb30da0d927d3e6" - // set 23-12: 8923361680602360491637539340186330583808472610027697444204036893010926051377 hex"13ba71984e13a4480217ff47b1055dbef0ed7333ff8403935f10785b4d212031" - // set 23-13: 17386658730777389148551542774423634880430074554050371095211396948875032586750 hex"267080070a80b5f94ea5c4363d2d971036e8446f2c055ca49495145eca1ae9fe" - // set 24-0: 18803497674827878184210135371703804206276128582022416604041787392310845729622 hex"2992670c4c90a20991d63058dd4a885b9ec25f2307e6dfb364be99f0ab596b56" - // set 24-1: 6590008305704976915857671866558706505394630312395969823040635040879201337002 hex"0e91d00167f0fcdc484e4510cea659d39a58ea6d94188082c301d82be3a5beaa" - // set 24-2: 2714759247406808259589803854440914533632699567907406761316959511568030744066 hex"06007fd0fb2de248dbc4fe010a14285eb1c67ab1035575cfe2c4a46e7169be02" - // set 24-3: 16299600292583383998706243035294548578562168326056377699804434906128380481545 hex"24093f309708216779d4be610fbad6c37027359a6cd9af3253023c94bab25009" - // set 24-4: 18030052417377603682453955579175094175373404791176719861146533099419481910116 hex"27dca5e53ccf2bcfabd9f056b2381845a855bf7947d600e6f85117b69e57ab64" - // set 24-5: 8281176924556272137773300347187527516223668703826908452855802099328657344885 hex"124efae3d5bf327ab6ba6d4526a495aa613a1c141b4ccbe97dce4d2174af4975" - // set 24-6: 11849913964821118293258226409033507680960291656604016015128854810099746642358 hex"1a32d049a2624f7c385673c88d7fea82a5c517b7fac655774c395cdce73099b6" - // set 24-7: 2718653438901851962181612429288634518502998150085578586248082443515454453331 hex"0602b40c9255dbac3b084808ab31e76a1f050751bb6775dbada5d84691d27653" - // set 24-8: 17998120665039026798317726060462551095622279047136565816648549826384179735803 hex"27ca9346b73ccb979a8d2890fd43bf51eedcd0a78af072f64ee41abb954bacfb" - // set 24-9: 5133986071087432716437635164720916024596119526725252628340805179596147643344 hex"0b59bbaf1fcc4321f763a03b112189c055a31078afd0954b7d7ccf311615d3d0" - // set 24-10: 10436725621240227608920674037516192343160590540839553356331196590007025190330 hex"1712fa34ac64c32e7ba17168f04876190ff32077be969a20cf83be9d04ecc5ba" - // set 24-11: 15618861474705274368161439159831328775613537777134266634959100526889759124590 hex"2287f65a7cb3a473300d133636ba395a1cfe1b9cfbe68f106f114d46d453ac6e" - // set 24-12: 2511040106219966488942941427805413210834998861588095124665874406004322450915 hex"058d32c610ee7b8e0025aa2f8fa532b3a6a45214fd7df4c35ad5112f545fbde3" - // set 24-13: 9256734357641210393451356199893573129989430877284906007481196262323584132500 hex"14772040257c0366286283200970b7ee56d048cf3f6725fc8d9651a8234a6594" - // set 25-0: 9325238625126515763679853550553375879158552597544709459784109512243397955590 hex"149de5e4a643c98e7261b75a27baeb89147605258f470c0291bf22880e6a9006" - // set 25-1: 8484194759795978556088297437107686617328133596604796277228418191688537911573 hex"12c1e251dddced6445c3dcdcfcccc1c36736068f9e1f7bbc4063895df782b115" - // set 25-2: 7354463117736585470843139230227589188304331389476818932256765377140053168035 hex"10427a865028d998dcea094cc2f8d0fa2efbd0040d0b118e4415dae71c92cfa3" - // set 25-3: 13482530129860761195447497269660263095272961608736579417124458190809007451755 hex"1dced774d8572bfb42107f480682ff1c5ef95f657787a06997f53061d44cee6b" - // set 25-4: 14565877561081097978808851096191380459292726072163754601747539666057949167693 hex"2033fe9a65b025cd7e27764e34562fbc6391cf8d31623f31b68f03d6a1d1404d" - // set 25-5: 2135718143241813932226161801358235289781058013695871838383051572102928884567 hex"04b8c60cbb003fd65b2886da9263ee92021683e1af25189631d1725df8c16357" - // set 25-6: 20522747851108608773003772892187458826390403588440155512773881116135635256410 hex"2d5f76b195591eca401fbd5d43e2992245ea9a4009a8ed600fcb0962ea5b845a" - // set 25-7: 11218511591600821722003994140994121719832310771637604152054113941332818455369 hex"18cd73d9f8a31eab2560b9f00b08cc4517309f7100c34df4c3aeccbb3df8eb49" - // set 25-8: 16404237709834224719800904205708261378663612035126521203425485585484994986837 hex"244478321b4748aef75677808a6a5d92a6964f298eb5e5337621398b0c1a4355" - // set 25-9: 3167586669955731698085513002461997957955073343333183557668566807567186590619 hex"0700ca5f97215da057c3a4a16a260471ca887e12ab3a9fbaac6a61c67c38fb9b" - // set 25-10: 12910675356590890481798719900077391291951346627685199305549632303581651173802 hex"1c8b2eec6c0535832e1ea214b890bcc72682c5bddb39f4ddf34500a5cb9a81aa" - // set 25-11: 20462953503625657093808736208830478011818679863351201550868889073055617578896 hex"2d3d9f09f802a02b7324b79e9681debd2833f6238b22ae6622ba1a64e744f790" - // set 25-12: 18947108562530644410102590841857357185115081182319111952079371871969663671988 hex"29e3aef42dc679892840c82352fa28d9140106d6c2ba6ada66fae52bff965eb4" - // set 25-13: 6652719222291337824561052377450295064566587460338214284424446330320206208978 hex"0eb54e3e94c92cd24f6ec52eab577e80d8c8e9f2d39d6b8d69503967d9809fd2" - // set 26-0: 7333723286812204168407439917521565157977670700382476881790986792115201279410 hex"1036bd833a94dd6a85559c519bb7a2769b6486b00d34996da228c08994f285b2" - // set 26-1: 21462572925415337738214437933606587540653694853107274549824898449394152530908 hex"2f7362c30b976680185fcb2d6c1a9fc47ce47e77d3af5b773534e2ce7c2063dc" - // set 26-2: 6820993392268884858152757378169835647522978080101384568523885945756789014349 hex"0f148ba271ab4c9b17837d44c14d231fe85b7644462249299a68b506bff87f4d" - // set 26-3: 16253055713127198337468919465234896268161918860396508551871391729457324125212 hex"23eee74e2f9b8ee256ebaa6e03b545afa196f22ef7e96d7255f5e79bbb786c1c" - // set 26-4: 10110377608880446364161064735161091842938826397512230713135002732708361876777 hex"165a455c205655a47926176b91f2d2c02ac5c00ad29b467bfdbd51b0768b3529" - // set 26-5: 6013899729219769410326935661934883558337463050053435907100782150692294649745 hex"0d4bbf22a70348d22efdd5235eb6e682385197b4e17330c46c44ca6d5dfc6791" - // set 26-6: 18208889227209298598015138525374980382541030144328510393048300775270787949840 hex"2841ddb730006e521446f952117b78effc601d10372438c4ba4f6e2608e9a510" - // set 26-7: 15191444075449840811990314906356975059662539527217455842253932605838538105879 hex"21960d7a065af49c4c06053d32596d990c1a43cac1658dad807ae48de098e417" - // set 26-8: 19203188682890514423320800755662084436821947463936810212920115637567986869322 hex"2a749e9fc0fea8a55e57cdb05166ad9692c00bf103ac30881c6ea8c6b86c244a" - // set 26-9: 3424855308164288636262956984024538145687254883958282264766019244372264927134 hex"0792663fbe195bacf4bffe700777c5fb07db9bcf94404ce90d0ed74a50febf9e" - // set 26-10: 19586353501601321585672146098476085745700368665390426128801697725086439710122 hex"2b4d7bb4c6dae168809b1e8687e2e668d2680f40733b7d6877b27eaaa2021daa" - // set 26-11: 15010004828387861046033155948517332272437733117418549079342100218646019702080 hex"212f5c9650237c6013810fbf50f8c160395a487a5cd535ddcc85437383d7fd40" - // set 26-12: 13686339229559293872534012092085760944059315023471369613822812965287369238447 hex"1e42318881baf153d5c6a0f3ae7c933daff9cd10c89c0f7d9c1253e65995e7af" - // set 26-13: 3695584012986626869153168308549979767804807828687034680677188403817830418810 hex"082ba05d83761cb163b4ca9d55e5dbb43c74bf3f456988438da2b3e62a90097a" - // set 27-0: 11102327427527201346056529148642207216130990405495165914761901542247835149412 hex"188bb1d3cfb110267f28a328777328ee715c575923e5517216a551b7e4bca464" - // set 27-1: 17544563341965869668707473190805417639220912289969746146554006791986582724590 hex"26c9def697692dbd245316df1b3d3ebc23d2e7f26282bb8c3c77383b633d1fee" - // set 27-2: 4470848226757772603246285686584200798638888970547659211297578619392420918858 hex"09e269116a30414bd9701c5e0878caadf29773b5e4c010a7f519d6c8ed4ab64a" - // set 27-3: 4999887962989142396481351641254451370620928952306237803174890583736074770292 hex"0b0dd617d9c5b993d32b538129fa4404c7371453aec2448ad60caedef2521774" - // set 27-4: 18696621645163318552472841991871104820660024833640321869898695219244792544787 hex"2955e9b0087cc084f3750b6474cf9ccc1b91b93088093fb9b65512bb41c7fe13" - // set 27-5: 16940838088709411711968888146075539661653566927745755478421474505108166140656 hex"25742cb05d49c540c0db2fe8cecba3202fa75c3652f8a0632c901284718de2f0" - // set 27-6: 11530916114120676768574532193664705720045810431665651204245333670674998923676 hex"197e4469bc4e63f957318e61dfc0b47f3612c833faa62fbbc758bea7747a919c" - // set 27-7: 7355883923626920336916662475522243088902821161113628716197989160163721774248 hex"10434862eebeac7e95316632cb2a81e786f3148d551e82d4b5f3952dac0e84a8" - // set 27-8: 11855011297239142909723378707832446926509921514737098047687587969894126468497 hex"1a35b2d833ae99e441f064acd0efe3ec75d0180f0dc898edb2ec4e6104c43d91" - // set 27-9: 14942813403879667533705178220673159254886774089783887482228941707848831481300 hex"21095529dcc976329670baf3bc91051208b4d62984741144c2795189811c35d4" - // set 27-10: 12982663140753853847528768000921561826340636419307931766400467366396846035169 hex"1cb3ed4bbd682aa625880beac8855c5fea04d41e00eab4f0d06318c229f650e1" - // set 27-11: 7171806600323437636744282845777660095738436086868856062406225133619265520575 hex"0fdb194388dbc4bbbe4e95fd302d9cf15deba158f7c686da98f0c51b56a9c3bf" - // set 27-12: 15982491779929281894294451486893882850583039973528579274058985191703359466543 hex"2355c510225e1b58ab2af9314c08bd8adff1ada7c9a457c0c1deb47b814f2c2f" - // set 27-13: 19910319651211685401050894240685395121165652955380089146603485967076493605680 hex"2c04d7711fd02ba586d4a50ad99a1723e5bf2916b4b5ecba863947a98fbbbb30" - // set 28-0: 5314337765479745092537090978913989310916802510812096192767666377841447850226 hex"0bbfceff43f6717beb8ca8fcefb59c672661fb46da69df22870a4c52fa4cd0f2" - // set 28-1: 19811002121850954821192061183148615163420706271800817927960207430256612524059 hex"2bcca13d376d46c173fc2901c265dc09ad688e67b9726845e03944ee966ec01b" - // set 28-2: 18254735365473444026840717290492248863101576601864757410600437101587001057517 hex"285bd066f7c5357304cec840041d33e776badbda4e0007a505004e070b9520ed" - // set 28-3: 3428844080448214358238191483671878854080864964895729401025193865570307658787 hex"0794a82f878b218f741d0cb293956b5273b429c885d893d1113d73aa26c1d423" - // set 28-4: 17688699129722255312471132988267997472426043097741089176095207368928695347323 hex"271b72ec18a3db9d3d0e838edd70c2ce3869f8dfa7a2990839b8dd9e1172e87b" - // set 28-5: 4698778325800416923484519718058460264124242609977080857699400967590134848728 hex"0a636a0eaaf2172cf943d025179ff1617471d89f89258b34a3bbca00641a9cd8" - // set 28-6: 11905991584861721837480962390330989450197421918781662074678555052926188909272 hex"1a528d6c2a802448da3ad3d59f777313c16a671482e39b8cb7da9ac35c1ff2d8" - // set 28-7: 11195321655863853696452219195252788379254952714823481930861848719672010792417 hex"18c053d772d3b5a8a648244ccc209c808ebe141ba2f9d5650d0da14819aadde1" - // set 28-8: 7364573423043519994861038175593500896079924196888521130462378149111415036167 hex"1048336a6121c302669d43eec43639872901bf281af7a1688aa3d3928ebdd907" - // set 28-9: 8488161531239994007634631892382512438657593769374020273048837520623507271908 hex"12c4211198d7728995d57f5bcc090cf7beca8045d513deb1b175ebb36796f0e4" - // set 28-10: 10948897450624334536526533930990935852623955696383743452358741253735922067160 hex"1834db39abc7b5ecd1a514dcb9228530e81361aea5811ca208a650daf968e6d8" - // set 28-11: 7654175296077985337834288232610181411799310934515705881481549241949669590123 hex"10ec1c14ddd45f0d5cc72b4bb6c9b567381cd3f8ff34d9591c48f845ea50846b" - // set 28-12: 2456818423512317060112219756429819064402183920202453945509918337536940292593 hex"056e828c137df3632d6225d8c3c7df355ea62f2e0d113a7e36852b6764afb9f1" - // set 28-13: 10561627566351771351550703479997725668661012955063201536370060753602302262655 hex"1759ab5b4dc7063a18dd2b491a4a3d073bfdf8f4d33df3f339a83e3ba2953d7f" - // set 29-0: 4310089243116651250383251477034324245457116277666484671624575402227833925755 hex"09876c8f4e48e48b158ea3f41eb7f19716f44512bf7cdaaeb3915798ce22707b" - // set 29-1: 11882651094700172542567008359015417490389070633573140242127755563781024148099 hex"1a45579944f3cb644003ac2430ac63799964bce8f0125b487e5e84f986f46a83" - // set 29-2: 9304328383406369649010049197573360507944684656613297568584394172735340111263 hex"14921030ad6e51af6e9a654d191b8562e8acab6542844de111650de2ce37659f" - // set 29-3: 18874624159090765871635243875933482675871258293088886749847315202391523956097 hex"29baa8a03a66a40d48856ec10f47f554e884258e4eff26ce0f15c6b5171f9581" - // set 29-4: 21295163659036117126535933666532228255134275601226122998452204301238438701469 hex"2f14a2b03d6b68f4bf5be1acb77702105951d5f13a423c1b21960b0c129fa99d" - // set 29-5: 12010652807420347304532358791037860496459429689113682253200903987591679627067 hex"1a8dc9e0aba8f76e0f8bf6db5523758d5ec321d0857a2df1134b5dae2faccf3b" - // set 29-6: 16035147304145989851106586435462674695447030608653337914734493255503105122271 hex"2373925e13c17f70c80783a3664e984c082f251bbe3c4698dff5daf3c70e5fdf" - // set 29-7: 9396862051344040260236487045030117425080665841603826234795752404308634565281 hex"14c66f792e18c3133a0ec195583065986f5d8f297f5750ed78aee7b7fb6efaa1" - // set 29-8: 9623434193020540057685957851610556657916120473978726845338192370747426064401 hex"1546abb4feb014cf7206953bcb52e5f16ac8d232723683674bc02854efa9c811" - // set 29-9: 20738972702824723087864078264786214906718601061526079118500228332898388551221 hex"2dd9d7b31522a6b7fb653afd18e987a926fbd5377b5b0e415cf2614bdf0c2635" - // set 29-10: 457108501000029082366810998923133233303603111079376685755578228260824733356 hex"0102b6d8a26892985e76fd744ab01d06b524f57d634fc0b69a5d91355398d6ac" - // set 29-11: 13918719735797746251051948238671198059940858851588937008268023917020073366433 hex"1ec5b7588982ece0b103edde74a6f327e6ccf694bc534195fe0effc7483f13a1" - // set 29-12: 19519317439483352367895890468095276150233498159453735432212409926941855183358 hex"2b278acb099ad84fbc96b27d36269ba06a660e2bc9093059a2acb1998cf3f1fe" - // set 29-13: 8400170000010792082337905010575114377571921640630709589910201278654198179035 hex"129253e64f00669a4cf7480180edd5c242544581499b9a233f0ce088acf1e4db" - // set 30-0: 9476241965146735006848999585927664857836027675817848342111996150638876938940 hex"14f35ce5d343461157dbe0adb07355d95d2cd5aa6dba222b6a702af1e325d2bc" - // set 30-1: 20383112265143113621158547584533108172173014612497300318772355462448750327634 hex"2d106ec5d71809dff7aec68762661bdfd5dbfe456cba5a7c150c73da2510f752" - // set 30-2: 10370498046215116715134085566322498900073301617448752966999679321197451973184 hex"16ed7e6f631af32c7e9c7884b0ab0cf71a834ddc4c825748eb5d35451d809240" - // set 30-3: 20733082136685384602293372077980283048183069753990343452404863587763569081917 hex"2dd68235d74c633a111bd167dec9a6371b137ae89530106a928c87743b38be3d" - // set 30-4: 209896847902324756441033880218169809685412620378498856437573937154846479551 hex"0076cc22cae0c2544d7e6d49cb00182253dab5dfcf6cbdb378f56b0714b9d4bf" - // set 30-5: 19434208870058033389225349051527401299247475125763108527095891214558119617655 hex"2af75f56bee1cdbf00f1a0af44ee6ca3d7f8b3b42d38f87bf1da869240dc6477" - // set 30-6: 4154375339831547300427516624109559852426973786711444825735879648391004291098 hex"092f4b09a0af31220825e29d275eeb08977e8d3a6a934cc16a6d562b2eca001a" - // set 30-7: 2168897082728012692838287354581700563166925732559863316849698306675591131396 hex"04cb8d5ffe9fe85b21a785e261721288e9b5b75b400545a31d0d53270608b104" - // set 30-8: 3690054103601385333490512469861728231387681704127049683413276534001532261943 hex"08287f21c644121d27ec9aa9f50ccbce17e7ebe37a9858da78ca1d207bd9d637" - // set 30-9: 3997073653940540957268729302105309759820513901669570962308110503858257659002 hex"08d64375d1c8b872172ed0e50612b60c4b049e807f23d6fa8f4e61e06d52047a" - // set 30-10: 1493108383089723041516694658460301260449183718295935886883417227290045091286 hex"034d11c3fb63ed48fc75af072a1084b3d0982b796c9dbb70c295e4c938688dd6" - // set 30-11: 1479721274324005701970059663387618978577823761358404739977258141309872068056 hex"03457e18852f8480e869f8aa0665890d85a78c5458b77f682cbde6b7954b55d8" - // set 30-12: 20291086357406391640638647514048720424247838755446061571102712546958076851767 hex"2cdc590f35d097cd61fc65b0dbaac9cd05916c807ec0e318de09c55d6facb637" - // set 30-13: 6860718845648137601753080432837091439893783461195961430761483584544410630099 hex"0f2b077d67767da3df753109cb25329348253b3bb8a474b8f2383d269e7af7d3" - // set 31-0: 7929983584961755765377471515178883367433439212271736050025708429355823243624 hex"1188362ee1c47b51ae57ee87cdc133d212b205f43ad871011e82684b3251a168" - // set 31-1: 10728358412340769313351519567620170787387770135423141966436844748162218854008 hex"17b80922192c7ef6e95042838827e749bc017d1a96c6e69f4d945f6a40c80678" - // set 31-2: 4169855297038740915695363102363044976292665711211255871324667594694964037773 hex"09380df1270bf5638a0dd4f2c7b7af4a5798b4280a4c98abd97c99272b34488d" - // set 31-3: 2424224908982307794171893487036131370038399449016750026546326391873466118335 hex"055c100b6e332bb5d2bf6ba8f3f5945bd877926df3eaab055c5d42be090db0bf" - // set 31-4: 1265438250797513961458031163301351393237543067943565114202366151377865506872 hex"02cc36716e8608d8ddd908e019707e77d50ecaae8f83a61fac66303fe0d98038" - // set 31-5: 11342865295714982458109220575532930834959120923837779800176462280225501198217 hex"1913d591367d4749326ea822b20c1f015974fcd5ec6d659aedeac7b56f6fb789" - // set 31-6: 10415384677581396651184780193811022815145977389536746022901590915883889609878 hex"1706e619141f6b4a93840023bb2342e759da6438e07ed974a5f1e3d506144c96" - // set 31-7: 5311187015233522007413118391261106264838418369874755037462489089469638365756 hex"0bbe067b718cb861fe927716cba85cfc466eed0e9d2c1067bc7f9e356bc5d23c" - // set 31-8: 7499079368996193403750547553190134606728655877653629403923945654291953825315 hex"1094541933220c2bef5ec7afe91782ec245208d58f93a08ec25eb59710a73623" - // set 31-9: 1743769713774086589463238504150542785039161133276706463569974209707667651575 hex"03daf04d7a256119a10ba5f6653564dff54f8eb78577360ac477abab5ce87bf7" - // set 31-10: 5792276842105452143354445764064878932177699791644537942211472215636738768211 hex"0cce5000e4686fab8ca621f1c65dda94eb8b5892b1aff79a9a5eb0a2e65efd53" - // set 31-11: 9443070058088199873709166495831389298947366881168483562080569357428781583046 hex"14e0969768884cab782cafd4b81555a818559c4835fb6821ec46fd08ea418ac6" - // set 31-12: 14451507664847323254023899990839043037382802537389529773382951366995420730648 hex"1ff343732becbc72450b2faedef7112b951edf2ee03bebe4b71365755e6d5518" - // set 31-13: 7633550475637360595097128986678209600092185294414596687526062925070686318486 hex"10e06fbbc2176bff93433750bcbfec05aea120f193a1e4c5bf5993e098916f96"; function get_pts(uint256 merkleTreeDepth) public pure returns (uint256[SET_SIZE] memory pts) { diff --git a/scripts/convert-dec-to-hex.ts b/packages/contracts/scripts/convert-dec-to-hex.ts similarity index 99% rename from scripts/convert-dec-to-hex.ts rename to packages/contracts/scripts/convert-dec-to-hex.ts index ab80592ba..5974797a8 100755 --- a/scripts/convert-dec-to-hex.ts +++ b/packages/contracts/scripts/convert-dec-to-hex.ts @@ -1,7 +1,7 @@ #!/usr/bin/env node_modules/.bin/ts-node // Run the script from project root directory -// copied from SemaphoreVerifier.sol +// Copied from SemaphoreVerifier.sol const VK_POINTS = [ [ 18358547564487905095688479908858987846616998213156437518686067355563592118237n, @@ -517,19 +517,15 @@ const VK_POINTS = [ ] ] -const SET_SIZE = 14 - async function main() { const array = VK_POINTS.flat() - array.forEach((v, idx) => { - const set = `set ${Math.floor(idx / SET_SIZE)}-${idx % SET_SIZE}: ` + array.forEach((v) => { // convert to 32 bytes, 64-char string let bytes = v.toString(16) if (bytes.length < 64) { bytes = `${"0".repeat(64 - bytes.length)}${bytes}` } - console.log(`// ${set}${v}`) - console.log(`hex"${bytes}"`) + console.info(`hex"${bytes}"`) }) } diff --git a/packages/contracts/tasks/deploy.ts b/packages/contracts/tasks/deploy.ts index f314b67ee..f89c1e0b6 100644 --- a/packages/contracts/tasks/deploy.ts +++ b/packages/contracts/tasks/deploy.ts @@ -21,7 +21,9 @@ task("deploy", "Deploy a Semaphore contract") if (!verifierKeyPtsAddress) { verifierKeyPtsAddress = await deploy(ethers, "SemaphoreVerifierKeyPts", hardhatArguments.network) - logs && console.info(`SemaphoreVerifierKeyPts library has been deployed to: ${verifierKeyPtsAddress}`) + if (logs) { + console.info(`SemaphoreVerifierKeyPts library has been deployed to: ${verifierKeyPtsAddress}`) + } } if (!semaphoreVerifierAddress) { @@ -30,12 +32,16 @@ task("deploy", "Deploy a Semaphore contract") SemaphoreVerifierKeyPts: verifierKeyPtsAddress } }) - logs && console.info(`SemaphoreVerifier contract has been deployed to: ${semaphoreVerifierAddress}`) + if (logs) { + console.info(`SemaphoreVerifier contract has been deployed to: ${semaphoreVerifierAddress}`) + } } if (!poseidonT3Address) { poseidonT3Address = await deploy(ethers, "PoseidonT3", hardhatArguments.network) - logs && console.info(`PoseidonT3 library has been deployed to: ${poseidonT3Address}`) + if (logs) { + console.info(`PoseidonT3 library has been deployed to: ${poseidonT3Address}`) + } } const semaphoreAddress = await deploy( @@ -49,7 +55,9 @@ task("deploy", "Deploy a Semaphore contract") } } ) - logs && console.info(`Semaphore contract has been deployed to: ${semaphoreAddress}`) + if (logs) { + console.info(`Semaphore contract has been deployed to: ${semaphoreAddress}`) + } saveDeployedContracts( [ From 93cd86b37940c98bbd6fcc6ecc196bd218996b46 Mon Sep 17 00:00:00 2001 From: Jimmy Chu <898091+jimmychu0807@users.noreply.github.com> Date: Wed, 16 Oct 2024 22:01:31 +0800 Subject: [PATCH 4/7] refactor(contracts): update SemaphoreVerifierKeyPts library to be internal re #330 --- .../base/SemaphoreVerifierKeyPts.sol | 2 +- packages/contracts/scripts/utils.ts | 2 +- packages/contracts/tasks/deploy.ts | 29 +++---------------- 3 files changed, 6 insertions(+), 27 deletions(-) diff --git a/packages/contracts/contracts/base/SemaphoreVerifierKeyPts.sol b/packages/contracts/contracts/base/SemaphoreVerifierKeyPts.sol index 67e9bec5c..407b26f50 100644 --- a/packages/contracts/contracts/base/SemaphoreVerifierKeyPts.sol +++ b/packages/contracts/contracts/base/SemaphoreVerifierKeyPts.sol @@ -974,7 +974,7 @@ library SemaphoreVerifierKeyPts { hex"1ff343732becbc72450b2faedef7112b951edf2ee03bebe4b71365755e6d5518" hex"10e06fbbc2176bff93433750bcbfec05aea120f193a1e4c5bf5993e098916f96"; - function get_pts(uint256 merkleTreeDepth) public pure returns (uint256[SET_SIZE] memory pts) { + function get_pts(uint256 merkleTreeDepth) internal pure returns (uint256[SET_SIZE] memory pts) { bytes memory pt_bytes = VK_POINT_BYTES; uint256 byte_offset = 32 + (merkleTreeDepth - 1) * SET_SIZE * 32; diff --git a/packages/contracts/scripts/utils.ts b/packages/contracts/scripts/utils.ts index 11b4a00f4..9a6b0c19e 100644 --- a/packages/contracts/scripts/utils.ts +++ b/packages/contracts/scripts/utils.ts @@ -3,7 +3,7 @@ import { readFileSync, writeFileSync } from "fs" import { FactoryOptions } from "hardhat/types" export type NetworkDeployedContracts = { - name: "Semaphore" | "SemaphoreVerifier" | "PoseidonT3" | "SemaphoreVerifierKeyPts" + name: "Semaphore" | "SemaphoreVerifier" | "PoseidonT3" address: string startBlock: number }[] diff --git a/packages/contracts/tasks/deploy.ts b/packages/contracts/tasks/deploy.ts index f89c1e0b6..cb79edcd1 100644 --- a/packages/contracts/tasks/deploy.ts +++ b/packages/contracts/tasks/deploy.ts @@ -3,35 +3,18 @@ import { task, types } from "hardhat/config" import { deploy, saveDeployedContracts } from "../scripts/utils" task("deploy", "Deploy a Semaphore contract") - .addOptionalParam("verifierKeyPts", "Verifier key points library address", undefined, types.string) .addOptionalParam("verifier", "Verifier contract address", undefined, types.string) .addOptionalParam("poseidon", "Poseidon library address", undefined, types.string) .addOptionalParam("logs", "Print the logs", true, types.boolean) .setAction( async ( - { - logs, - verifierKeyPts: verifierKeyPtsAddress, - verifier: semaphoreVerifierAddress, - poseidon: poseidonT3Address - }, + { logs, verifier: semaphoreVerifierAddress, poseidon: poseidonT3Address }, { ethers, hardhatArguments } ): Promise => { const startBlock = await ethers.provider.getBlockNumber() - if (!verifierKeyPtsAddress) { - verifierKeyPtsAddress = await deploy(ethers, "SemaphoreVerifierKeyPts", hardhatArguments.network) - if (logs) { - console.info(`SemaphoreVerifierKeyPts library has been deployed to: ${verifierKeyPtsAddress}`) - } - } - if (!semaphoreVerifierAddress) { - semaphoreVerifierAddress = await deploy(ethers, "SemaphoreVerifier", hardhatArguments.network, [], { - libraries: { - SemaphoreVerifierKeyPts: verifierKeyPtsAddress - } - }) + semaphoreVerifierAddress = await deploy(ethers, "SemaphoreVerifier", hardhatArguments.network) if (logs) { console.info(`SemaphoreVerifier contract has been deployed to: ${semaphoreVerifierAddress}`) } @@ -39,6 +22,7 @@ task("deploy", "Deploy a Semaphore contract") if (!poseidonT3Address) { poseidonT3Address = await deploy(ethers, "PoseidonT3", hardhatArguments.network) + if (logs) { console.info(`PoseidonT3 library has been deployed to: ${poseidonT3Address}`) } @@ -55,17 +39,13 @@ task("deploy", "Deploy a Semaphore contract") } } ) + if (logs) { console.info(`Semaphore contract has been deployed to: ${semaphoreAddress}`) } saveDeployedContracts( [ - { - name: "SemaphoreVerifierKeyPts", - address: verifierKeyPtsAddress, - startBlock - }, { name: "SemaphoreVerifier", address: semaphoreVerifierAddress, @@ -88,7 +68,6 @@ task("deploy", "Deploy a Semaphore contract") return { semaphore: await ethers.getContractAt("Semaphore", semaphoreAddress), verifierAddress: semaphoreVerifierAddress, - verifierKeyPtsAddress, poseidonAddress: poseidonT3Address } } From baf73b3501289e1f591a974e65d52af5f9385f63 Mon Sep 17 00:00:00 2001 From: Jimmy Chu <898091+jimmychu0807@users.noreply.github.com> Date: Wed, 16 Oct 2024 22:04:31 +0800 Subject: [PATCH 5/7] chore(contracts): update spacing --- packages/contracts/tasks/deploy.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/contracts/tasks/deploy.ts b/packages/contracts/tasks/deploy.ts index cb79edcd1..0a4eeca19 100644 --- a/packages/contracts/tasks/deploy.ts +++ b/packages/contracts/tasks/deploy.ts @@ -15,6 +15,7 @@ task("deploy", "Deploy a Semaphore contract") if (!semaphoreVerifierAddress) { semaphoreVerifierAddress = await deploy(ethers, "SemaphoreVerifier", hardhatArguments.network) + if (logs) { console.info(`SemaphoreVerifier contract has been deployed to: ${semaphoreVerifierAddress}`) } From 9083ca8c0e8585ff8d108128e10cbf33e4eb1f4d Mon Sep 17 00:00:00 2001 From: Jimmy Chu <898091+jimmychu0807@users.noreply.github.com> Date: Thu, 17 Oct 2024 07:31:44 +0800 Subject: [PATCH 6/7] chore(contracts): updated per peer review and added invariant check for VerifierKeyPts lib --- .../contracts/base/SemaphoreVerifier.sol | 6 +- .../base/SemaphoreVerifierKeyPts.sol | 538 +----------------- .../contracts/scripts/convert-dec-to-hex.ts | 537 ----------------- 3 files changed, 18 insertions(+), 1063 deletions(-) delete mode 100755 packages/contracts/scripts/convert-dec-to-hex.ts diff --git a/packages/contracts/contracts/base/SemaphoreVerifier.sol b/packages/contracts/contracts/base/SemaphoreVerifier.sol index e1f7d87aa..36da1140a 100644 --- a/packages/contracts/contracts/base/SemaphoreVerifier.sol +++ b/packages/contracts/contracts/base/SemaphoreVerifier.sol @@ -30,6 +30,10 @@ contract SemaphoreVerifier { uint16 constant pLastMem = 896; + constructor() { + SemaphoreVerifierKeyPts.checkInvariant(MAX_DEPTH); + } + function verifyProof( uint[2] calldata _pA, uint[2][2] calldata _pB, @@ -37,7 +41,7 @@ contract SemaphoreVerifier { uint[4] calldata _pubSignals, uint merkleTreeDepth ) external view returns (bool) { - uint[14] memory _vkPoints = SemaphoreVerifierKeyPts.get_pts(merkleTreeDepth); + uint[14] memory _vkPoints = SemaphoreVerifierKeyPts.getPts(merkleTreeDepth); assembly { function checkField(v) { diff --git a/packages/contracts/contracts/base/SemaphoreVerifierKeyPts.sol b/packages/contracts/contracts/base/SemaphoreVerifierKeyPts.sol index 407b26f50..729a08aef 100644 --- a/packages/contracts/contracts/base/SemaphoreVerifierKeyPts.sol +++ b/packages/contracts/contracts/base/SemaphoreVerifierKeyPts.sol @@ -6,525 +6,8 @@ library SemaphoreVerifierKeyPts { // Verification Key points. // These values are taken from the verification key json file generated with snarkjs. // It allows to use the same verifier to verify proofs for all the tree depths supported by Semaphore. - /* - uint256[14][MAX_DEPTH] VK_POINTS = [ - [ - 18358547564487905095688479908858987846616998213156437518686067355563592118237, - 15662648751553932653781975807624464121405704024803073886925976686616010387354, - 1545474538105908330267074270190095622354834966212647889547653097055078098224, - 12579159544968648693964563165973893448704730885005100826654630574108054705556, - 20602000776800724705104231353971008348678632605343811527051139864158800058742, - 14100125742256756091734688090621667470723401759459592787502475801413744195297, - 5090583730862410755830979584235210054631184460526892606022709842010236308675, - 4935746665478263580470501879719907639988899436008466660042851826337922233613, - 3603230519262933722323237889869128969156000998401789817930265262617368730462, - 11467103179184542033012124498958167915605281189440445972230559164572312725202, - 20354120984011889701917116306955017859695028034788955847437411305304360829487, - 16952752114474306858880411587178692742589121096026762314329638709126787301483, - 18678961143994743003180318723146092299060216598083112257165966782010215931454, - 5866474510945308764957529269555101130643879788634167019342763906927794156659 - ], - [ - 15357842752194390032830879177519514606613356943505010426726499926726016517582, - 13720528004476084359207196371475762368424714925503835663451917882430924467554, - 2196656647584375999320189230399052835502476576494068012902156164580595749760, - 14571933744484927053512012311263939678215066456565339237074260778179419354637, - 15947740979005208428427315036716544174249364023308166418156254508145278950889, - 13324328715790405384125386378518079709609297588403011236512446709595322048979, - 18308129219862888344083447566760955160779532192553849267018614487088634836563, - 6372459765603725576424215986727450779217530423615747931788702584026023386877, - 7093003777162632186231777482293120808844116758585672698445917711442486215336, - 15357576732947512625016950088762579987226580659874157718142226214458009204755, - 13910597919064508360434043231000553781072135406219661606166769706745413894201, - 9475901949906914147982792916474633312982452326368523201024844634638043554494, - 5845138751782936895477553974859998077996624699108246120208069774017428318479, - 3326095377373657419775174404381825686428913179751401123841216020519623741775 - ], - [ - 1096090542237876305763822439899873238394525438826581012748557492836778110917, - 18282758355470198230938465615400409713402004038201360061031317503584711879237, - 7973969975759518869552865162652900479072033124669141796195141770899882758383, - 2920496587818605789230962034477809982324000981266163502059117507002917895757, - 8027751638293718359199675565570157214590620386957299982399037269650333307021, - 19002113380575481191643777830101182489616906893723699470070419138254788369727, - 13631613009301650992828160964785768170789209232530437462516754147352285424672, - 10537705110128905270703523362934130036880036854847578111990360444182641655212, - 15557574650831364767567015658284909068256128766563081293491003990055297878366, - 4049724481871929240016595616316679773340938699307608349394228543495262553744, - 9967066649437927083270210032320564587652082866881800887188539489167094397640, - 12463426560961961450861478284334163210886016242490079948590082000657390077088, - 21318595425700216078579789307308348011199610228556265752904860757510620370622, - 7430155508771673067823897542900534022148544854722115377830369283854627952599 - ], - [ - 14033304028688398404089545751254979569049699915340551984412184456786819712695, - 17529478610649635357901422564682249462969460088983393810272144503916885638629, - 968190632906420692452807865081290940343138767641492735661467959437198373032, - 7242759178038747404494096998044224993169513816067824413031492987300456908934, - 12017353327534072098763415761011052990865822334777878720246921848197559257711, - 4746680322053291743787031203095442352574780441873349801788355375401126089939, - 6764632552006100580460767171096753901452726344615530017064702126145414585640, - 11581587935666673652762153205827599529022773836189155792609728856814288572033, - 3123694825428833189943974730387937552931713004458396242443840668462184834558, - 3432192610292569155696646287493678963086402014898209278361624573082188247990, - 12349833666000936285363634772178969342930188247085371717039135170012686159900, - 5587426338437935681688079936152042996259869611071713486439341129143155921959, - 12022589354168680516901928073724404259700970836413687340697868887207353139344, - 2351613311284811919248989036726852289804810348516261915606564943623124473717 - ], - [ - 15740655435463241944594855735935231648684671883923953096410588018036769516770, - 12964751171177929169670182425240761498461607040020835118601467328036987558858, - 21474571159868965455306627669334290549452576803823591301731326342326814568896, - 6954370193053655486251406740905618458518953022289151868757271522548301919472, - 3115002343037487520580459802807906562630507097436525958861415456096559884443, - 11775142132959919266954507317832500578453517368862270948538792702813845219681, - 5975456097652384580746132945351678665917860606511206167023154005883554813508, - 10958037207675554032315788914627312943186758288936582678633536154169678007202, - 16345185674805541466042568997276776714209785989761944600635051035243995431568, - 3326264593228494909568322793066180033820330146744162800569972963329142251537, - 20721047231464194965879320004420846916587593568519526251056516572985788552732, - 2552439778142862614309289213707433798337671284267429041900242151271508522517, - 2849386127826497959217687777221941766595094589431869464564268817450132435018, - 12188539304210779665491473755999603070354632830707125660270270405780470402800 - ], - [ - 16239592155161765109648123193105804251252701943901733499502441663333912783245, - 18702593988046837524790351483331632258278160532977261915119611324471253407466, - 13746033878407070858115621843430829498309218839316343379025665907999784574154, - 19358066347678636498093783612000296194480758342913325289131948678991962529441, - 6024976123298004874848602709755399197808739071863728225378332097920450236516, - 11108084608972457539770160222798307153256767409158349747526974841008717682367, - 3009127146923662343754766534488769100730310563110562565512507605403185571089, - 10560679284132950437595738585637379866590755950272794729013445350206405316661, - 16015321530803994569819047219560485624444041236327101681073970215458831987478, - 18489840631710745699731219026737904723160484479846032199737023956049067434815, - 609265187318362115240245160721406765003010398230819869810290394123140807290, - 2656965952206569220410287839949134856874352189248192147930831679380007159249, - 13957423432693450118120092425077530751840166358932317773385901323790404449641, - 7610225795517710715985874151201119876406845575780133396869144717381641586640 - ], - [ - 6482921272760726478838066628157548923897782117283646773208763176771446379138, - 4562585331778730670899179927104513856322577370213643119870201750008533040214, - 9299549824594530154451155704400285409056448609359755927574262701418672785771, - 16654459784024455427280229763380300423080811024668332509526284511491790880990, - 18178936861568428015361893654874798233785855995042899944660014774323534883903, - 534506139369949013962728832141783820104682340925384016906020027968881380951, - 13888044772855561714276444972404100722751042044045312252045340354941233320135, - 13061437363756343100054622876229104455920015737970195589611281743974716159827, - 15297052669271818809266618537917704542138894789392864971735934945598379827363, - 3240592020743113440365790241401792477958041186219702004441781545015089517479, - 12939402739160799630996576545137073878726141216092557580496570401396343874133, - 409838859583542828209958035048329036930557790097408442597169497017958367880, - 4849352055719384218783567790347020036570406423962447054960403165168624679411, - 10140481868950825952506002812679553069445144019364683137830173127833535162812 - ], - [ - 4169753203433043290708949478342499350225971996935208104044673971132510531963, - 16198597482473356107060462797493408464959815651823410647378959304462364790023, - 17831214733154720272879709021886998538183166751338990495293296921834561417050, - 15996002991058741836925286413107190453488985346498046642177496721490001022163, - 12128929995926069335150064696726717100038806543084523729572253928762150006902, - 1527343541447603983494013575570118174442170324803005341835852970207664984106, - 3864366504647042739453971869413719136218296278515580744588126485271535533745, - 16390744785373846505589339019032992526980013169808686005019244934399314954484, - 1189371614834081242339044631966546656514169937037419744085755746584992776112, - 2490564128297998291899011962907372091056992851367564813460897014374926950158, - 2632864541439030478006092584387470079076010621748787710053145987733131826177, - 10997016251008884590554668186933912000821350188750456144761529496433221911191, - 3662989402605074726032541754492900291134797145446056852785520146936851543244, - 8371074929323402425468930212402691638137013802793901226648986870188378349904 - ], - [ - 17920452210119585965813298538098997746450528307627971419517604274103840658730, - 8026613233416032931155189579997899527124867847165186585887532521124762242171, - 12536429843060624487053183271774959575059067729019923970247266906616071589989, - 18354222295715868456732739635697044486544782691576216892030243636076554800619, - 11685593308965088606881675161829854229906033467171784802160080423031157953626, - 18989841286028554273231159314070667749621876499337485447347239057791285949659, - 13501500842653069022700095920888317808542113497043735775280862312089436522286, - 16284422417487952110266526583186344607656490299306406671512902584454645262294, - 14766820041476554952520399418749355774195705334216487399328042021346008099854, - 11502099463338241997177160748027482497157165595330950109059924501733819344412, - 21097733162892834226328090737666232905549661288100963226189626007151883115218, - 3620141777236347892405766912767968106066233413607983266884777435591408542679, - 4465316625088681267432956930147995293521314127558426510839100849580054135068, - 15951396696291486543574989938200386934444721629903447106494532971713975302198 - ], - [ - 21420692366857794685888663542888709905237738746850069466081467001353666342965, - 18343503004862189418033094393114515169584171574852422315350418500159030922263, - 16439186901063853414808045554962977634854311593865750348846556486836509716488, - 15200551988732901161699976788357951085426436066677048420098461828563894176150, - 15140772590596966074591171894694986645347795546765667852915300358255369432294, - 7383386342436648909729802223228006548918015494414484659175617833341830753463, - 11436445698241305906567677067532324081573492145508451249291326304016376374466, - 17397405229027848655285535331264669055168427730382628461971653096729174692794, - 8888190346365862431131132945799487885295183925892581338098808269532220115208, - 17373048493258440814074078107890527278667903472831731635546171123117085702144, - 5394355195223713516914582580686192473163629785306318732489822694588538915692, - 20814957740385525027786677509245187599649792998372465800981035312224123940783, - 11167741662268878371451552983943563550747492198375641214347145843414778750740, - 1505498991925224080559736158020686494389967648228591899080542175743913505975 - ], - [ - 8482807834840099486107357849095958421708288941420679407730439668240369271197, - 1531932691795154082010331247272128035283420450879984505970978649526303671013, - 10326017741190716069982105202291613302347042236075737537452333444753171570010, - 2890563104449202149521252385842115871596603958515320789619311677428773944295, - 5091938011714608365574587822261119297677309310900626302766934784886036216676, - 18792973255357094538588824962661759194320829424712347846315600994520652609459, - 5819484726278895533547092474664732368175576227992878488267454637556311136768, - 14087278759052154922504944654932471722205352537489748711235261956958139094423, - 6676755499836944199268283133886528716777488598645051771936175647684814488319, - 7841200200792172536039490995922340397104113825218911994623753022413575084536, - 9685171750835271647846188024034904289604883281120913275229696726161494108338, - 13804722593058778047599265964893015518608567919815229008355552695901539135617, - 133210224564739370698401112580329091433152068231765294734991529050629411851, - 6253365067148837443745536970484493754157158998156041417978340186561909915882 - ], - [ - 6379626794062388565530320965673584683811331210463512233691169393056454417810, - 8031021217500376290269114216814836477415391402921787637085737712949651005952, - 15261959534341262089656432084966075417921918036565394975811438856221288978192, - 12412675319987657724460960278402203548317535126494687402198671892291826563464, - 11594484527416994136900781664743660516883697944736099448760569480817952218099, - 5525949004768282420418522754788387377346850869414250693501350383184014395566, - 13423677678153887686951876961584096043047689175638209759158420018856273430250, - 688554022717474500337948897714325469989973507431329797109415877246281679190, - 5767985312159947447966233995178318554138266544591427341210101818005833690773, - 13782057493439290506357575012457041256926849070794382612465582256292384507590, - 2009465632383454183075946487099156558696455704620200103263777377956167571948, - 10265570962161934109202420603055144010322859077969741656080416572925588897009, - 13063467510206676485181697613068184940643350938488359709447602318070297992418, - 8824580488237789516855671915345935747743201560548603121129517348234754630838 - ], - [ - 18405974527641184935569939050199806786119735189423462681352004154947586987761, - 11063658239692825381704700810385108349384459703800229121613802621026834850995, - 20401912636755055463157317129314482008782101856095804626717136888886428939725, - 10581036997862130058603889786198200057133900928078268413900852134308841628552, - 15613862437263830065893280422700893831122147824370200118126675792748158214283, - 11637898091445829201992956909089879348463617460955895182594618572267100421779, - 676470684249461112964281503193041675013396554434239929609436328672155420783, - 14862758280768060051884504554805186980208629806423451755599092137651959992706, - 5623342967419780942118234966618900971275224510117264341831041912523393680166, - 12293742687505619727765346377361630310803471543338450439759434637239250426631, - 17107107724389526013252251054585363312805578717860151655674796329456502453436, - 695490429984933474058785653390434166254929169748519672533632124843844650437, - 7941603993861390710630117468483386570984050378175531457457840811645822985465, - 19423663035279971057851778008344970269742436279020301703706239058210708410668 - ], - [ - 2844460676842285471844840162496739784337096369846435331204280645139535043731, - 5914749649291606384462747717764850940787906745751128721215181537027495043325, - 16403998562201315274383761287898474039980386929670468025842124690312505385798, - 16679714051449621657256662882211432986285335589270632187081448168743144646010, - 14178974435133537452754432783693851994073934244854394772136599698341675338748, - 14490318493007296294817313593753116388501252549516359980240258503496717340194, - 21219478166573360512901478467779541318881953172337799756939010190701884653821, - 13653038712207413996195005796658436532811211815454701512198612316602372800026, - 6606031466185873676955137126631780808678269492505994174970319773811652852017, - 6998326006251734945119834407770954155028321677085545151592873301468610324946, - 15717984973502827230694305820570642040862757036680118080574899662027439132392, - 6129387663611887185666499162725019000386957238200546358846681873950634080364, - 3229894653990057163047872622628926092609943988699832798310941005306795398260, - 1577249093608064810495237122250056987651980088410811739655744853476971398741 - ], - [ - 8019490235657930229602545685025618469913840887375206662306714562639338096359, - 6360514614281299182411878013125972206098844277909449064382248671632240409416, - 18532505668867290379738328175003759079607042632729982459107375168365918757976, - 8421518624327767035539667378193845962377888010421324291966623261409058898245, - 21508024236353721936402111331734487542417525255582275314005272967405040862839, - 18027689383014810715963711252886295463940938266456411644747464137365500951807, - 14484077699638992615220759300878276902226958277985946809174186953862915299590, - 4817080763362108602919187869554992685382108795016276838137423588157592666796, - 10791657063117982548380087239678382293931165307389242284595466175088416832331, - 17574587559710800088797913763598808892829608388483075257576879500511250128297, - 20931338330271163055101602391315623325223860904427973201832184784566097488773, - 1954574324880132355431783868495392698894997264747376529310223470792870288803, - 2551137710278149502571112114560159376697849893483916552857521579500208583200, - 3997814265160290573081282672183091638735659350920634229735367532175023689675 - ], - [ - 20759074837657564809501685143530456377562536015816086555379080667602653298306, - 11573288866341175121647407708978273297857024597782918874282176717371576773130, - 19475107603336226504587469711392819869087288902355805230614724291289122375846, - 21884242265301052283286073107133504985083194336113478618838523331660374213570, - 11844625750737259417493690805104254337758743574820507915512371579679338049474, - 18479163117067129250021591308069049721232170743585134941796617403156042279597, - 4434911559893931929914698652677389633068778061297646529129767359157675249407, - 316682746098441691626372255125560321251096997722401729182940832349927288255, - 19610390525670030492896894087745165507340241783776573708027658938288182681300, - 5840208148535790468526125686220196099566194081164771919666034943299219873755, - 3679027218793663842409677356801552901605408436635647286999251784339864591201, - 9878321578558671609403512127325051261043472923444011356477587484000484178928, - 16646455734597629493777237097088292344110223995728568379569260368267096014288, - 14735311379463771264009437608444808852233202023120148855228542005281236140064 - ], - [ - 3066170574229466435407264700502616839626082070514501523679452764935485028736, - 7951387307333182634684754650901435973768779794218900331714625086350726274942, - 13578824606544430966133042087468301830727811282121948825028360301706303669231, - 19848381031896652139349791682530465833719275685855743122849792015759588531339, - 6922136549797750291447751953663854475218048098902194660515442295348938322083, - 10287261443878564608994021014993200221021609196127927226041534661185500281120, - 6329063805909277980282354325384845982783657973381777424581891744521604640994, - 11017548748010510224711773916683171526878158646735796493859902304094594577338, - 7338335804036221772945379382782674399589206056354184002757176151341198318122, - 16538115574966264108203522400275571374556020887608210819563613080068710593180, - 5138245976626127736555381649425906350640183768145541963359703291501245587848, - 11347291457433539838423910567581114929056891897670787919546976342310334767900, - 16731418617609356258989018213857655050257827940403117452476763890174877962606, - 5300557287595854140445529914668848275536281916366261035684431572728600543772 - ], - [ - 6573154341426354993599623914164155921131813615298607946435982334364383320793, - 16419308144058642981524756443290703631729426627385646905142158478345164404879, - 942314767315789144256266064192022265579304275774793342260835421710673918285, - 17945712678641984649495876620223190782305382105763957622870181201252059717682, - 6497446328454795535775520142893202697197882656922991300092165933292014766725, - 4597431274747983679157649737399090093759447324935531801532881928263496852124, - 20581664438782214735167492264807215952133504025063870863776714994387749970180, - 5854805250432620287068939301087113989827350315462338534819773170350910225622, - 13548539273975522227017059057161374261181128673406746320122994151943985128196, - 7414800418339434590171697383031637744601564309993253226498272110927128779715, - 1052987139013233499761917411027037646861657729931697227519754049539833189269, - 657108667626796780066815408290681939596246857020023912757838581820942772606, - 19088282520683145597098955555305422198780142332183007920340899996970202127885, - 12616611543293706969401642310383814806112402432261338062963427055972449363741 - ], - [ - 9271002136483424788269278316391606491360153732024211579417926107994995432826, - 8228171988949250866347662896961764196608750080646539001443256474901139877051, - 20240081759615964816136232877050251456333669788276947762731625798225823502998, - 3685474186777860155223706676482968796090983045736466861690878558020083034916, - 305741399293956298249448376598537769086716682101868856634885453070917344627, - 14942830908704142867090451021371809832404069532430585621173997534136021340349, - 11873341523902185373029537495825388400298468809112431373607438726587086076801, - 16566421774425889929886838459987430622148040878072136298073788804726016806526, - 18314173705630320437871113612645566255775444265992974192826331109357704470403, - 8597072000455186494551694692524831407069966911367008568012412188890924300508, - 12713907619301764178052509321657058919935892208409394514649600000706175319189, - 14893305145776480356274920935320977108910444566603040558476174175562031483300, - 11027938853766719633497710751595847377263279173227878474215846011660771149283, - 6927793728403485743741891409676155921703126599118383623637742555953569891357 - ], - [ - 275116175553159498718561489405169511232715998055900506709208190227728439831, - 7338708370982730261395030177227912514214944721567888714384503728042214055309, - 2285508597732647746841213906783440647997136124356359059650028586535477309792, - 15163443940499746648640851269666923560658903809778640616581862089179343108182, - 37868753390676617287004841173348795594362354905038492583057282228528019603, - 19475937072595290694509025801956972632863465524774747773770243946674956142538, - 1818532521520079200500527816308109106767855745862413136331026404438772138114, - 7893556755641665136576228990240239515272703124353568551151593029797349984766, - 21843411659343488969197036446870567462789014279182131087406329675847260538394, - 13883536936296384480685931731174096875043607202415233199362935327975006076376, - 3061885619227488514362869971925298711535995206671454426027635264218303442708, - 18477632669759047471715211461337808302603089797347923153039515976242018999984, - 4953684980989921770137053964305439167945572062294709110871332076115076441738, - 849590699713478394267684876803414882497887483062076673282369901261463387635 - ], - [ - 7481617454708320190331411214970150566519243590120906863698168124347483283307, - 3790897889674729687102011235738708037383393765058266352188381434189575086080, - 17582850308142585333519054672998882111865339708436809129995518706804527076353, - 18961585057625546222763334757505522771740769338010572292783220912986926586854, - 17761332237343741278668998123360108574589045018570742689473320560784505694171, - 2985768806786881176362869973473950745997650698247163897069614623128281191971, - 14099532828736062687388547070054719462342298981811592749594569670955512096417, - 11038429458121896617356666499000022639824993159854464409767840206807807728043, - 7092464867594165410092487979619486929166817679669939558999555261465867685619, - 20690943609696626243672018055336898909740557628366317533030490341400911534771, - 11468803355345327303851639215186997122074583511720489615730106184659306943551, - 9723340381470060111632263437706139036358918795037011403763820908081655273682, - 15929497108714526572140462634902391796285476840034863688822264979709196730555, - 10556139316790113226399166507094772235069235781001645893008903131855134732783 - ], - [ - 9679690373149117563754317307037586538394929348733117229177073999196519450461, - 13953490152873041611053779700802518995304489998104548903919774028525032867964, - 8584860336778813488021026261425560177968889952950706471574873674510806966419, - 8400619522468195192079024924375785176686244213372269992523849676384018875300, - 16018239095599670975582212156736908990475077583136160880304021421989907078233, - 13442762142079759258078337448325782252795445513077684243558458356586404542166, - 8012524517439221218249889438165569497775551565363444399021079689755695756644, - 18993442931337392722189844722480176040693468853419121807183123246184718322422, - 3920077716342530896195446297162279477088824676672184510151991496745985467962, - 5663885918690734602622426696143772526257235018784490039324179199552252272203, - 11007942216549411481832816505096362871539130535791764225892613523847180067807, - 12333277086717649179464584335417603775633093807601488202185840108448843332123, - 18845646001611639216437777320622198530894193094859924604338859788769244491906, - 4365664869724113934112630479809518948808449158812862195377335314227128146059 - ], - [ - 1895928299034844696630794694609519515092896092191683631304721647222032914779, - 19026513891744713045426845531420132126578554294461150386909840193098440147673, - 4073281111734161932072345995811001896063226222777392994725894652964051683943, - 13362867147840304033834065229457670563442204439046527165143934160967798444725, - 9724485076061228092177286932258189815958450833155679889060988975712535081230, - 1627333086421877964064603957348348763696708139082607562629629725119997724989, - 15641874381988682075545920458678901707167602315586561132909307694310257446023, - 11034182059786563285109970430313289917032071817373248775707546493147901388113, - 19299574745226772810381056007321573284793444116746272581694295128392282602507, - 6482638271546132546782310681506292669989505915370438641175376336582811537739, - 5515138970831679245126906315331906152285174207704247085730757090763031968272, - 5476746571008230667726688443817396210804752373221945489797046634505665572661, - 7666694240010574980777401583687953099995588711474009270339615112182231942529, - 5345423812126487230177352826531606752132805611025916574123407915411930666385 - ], - [ - 7211419275788152379372992549185439317698375419836488104253705518694042119228, - 9112140750806762434510825375931543886135367141484613422947675423683311130537, - 12020406779776320543918475257645763209221278449775176154727249143619468329590, - 6961266423823329910790066424248133365666435921221127260870444632539329606224, - 3527954161191330198309290076708590175518992377857531220243324230315686986882, - 4506493800007416260514839382433205292331764028735360433653631210611507932973, - 5530043493028748853396066194331787195114268917530734310055878976603589658986, - 6225101949608434111198442012357272827532649788667254718474232856896193900534, - 18857681750145313162493356993928966938826030906289025101399379263672964054354, - 869004496821135911657110194622810910776043851317139916414752924319830673140, - 1563829187789877652048924285544523323087888587074484491222967490033068091506, - 3746011388196035005128740753677692387874351474501361202463946309770129429478, - 8923361680602360491637539340186330583808472610027697444204036893010926051377, - 17386658730777389148551542774423634880430074554050371095211396948875032586750 - ], - [ - 18803497674827878184210135371703804206276128582022416604041787392310845729622, - 6590008305704976915857671866558706505394630312395969823040635040879201337002, - 2714759247406808259589803854440914533632699567907406761316959511568030744066, - 16299600292583383998706243035294548578562168326056377699804434906128380481545, - 18030052417377603682453955579175094175373404791176719861146533099419481910116, - 8281176924556272137773300347187527516223668703826908452855802099328657344885, - 11849913964821118293258226409033507680960291656604016015128854810099746642358, - 2718653438901851962181612429288634518502998150085578586248082443515454453331, - 17998120665039026798317726060462551095622279047136565816648549826384179735803, - 5133986071087432716437635164720916024596119526725252628340805179596147643344, - 10436725621240227608920674037516192343160590540839553356331196590007025190330, - 15618861474705274368161439159831328775613537777134266634959100526889759124590, - 2511040106219966488942941427805413210834998861588095124665874406004322450915, - 9256734357641210393451356199893573129989430877284906007481196262323584132500 - ], - [ - 9325238625126515763679853550553375879158552597544709459784109512243397955590, - 8484194759795978556088297437107686617328133596604796277228418191688537911573, - 7354463117736585470843139230227589188304331389476818932256765377140053168035, - 13482530129860761195447497269660263095272961608736579417124458190809007451755, - 14565877561081097978808851096191380459292726072163754601747539666057949167693, - 2135718143241813932226161801358235289781058013695871838383051572102928884567, - 20522747851108608773003772892187458826390403588440155512773881116135635256410, - 11218511591600821722003994140994121719832310771637604152054113941332818455369, - 16404237709834224719800904205708261378663612035126521203425485585484994986837, - 3167586669955731698085513002461997957955073343333183557668566807567186590619, - 12910675356590890481798719900077391291951346627685199305549632303581651173802, - 20462953503625657093808736208830478011818679863351201550868889073055617578896, - 18947108562530644410102590841857357185115081182319111952079371871969663671988, - 6652719222291337824561052377450295064566587460338214284424446330320206208978 - ], - [ - 7333723286812204168407439917521565157977670700382476881790986792115201279410, - 21462572925415337738214437933606587540653694853107274549824898449394152530908, - 6820993392268884858152757378169835647522978080101384568523885945756789014349, - 16253055713127198337468919465234896268161918860396508551871391729457324125212, - 10110377608880446364161064735161091842938826397512230713135002732708361876777, - 6013899729219769410326935661934883558337463050053435907100782150692294649745, - 18208889227209298598015138525374980382541030144328510393048300775270787949840, - 15191444075449840811990314906356975059662539527217455842253932605838538105879, - 19203188682890514423320800755662084436821947463936810212920115637567986869322, - 3424855308164288636262956984024538145687254883958282264766019244372264927134, - 19586353501601321585672146098476085745700368665390426128801697725086439710122, - 15010004828387861046033155948517332272437733117418549079342100218646019702080, - 13686339229559293872534012092085760944059315023471369613822812965287369238447, - 3695584012986626869153168308549979767804807828687034680677188403817830418810 - ], - [ - 11102327427527201346056529148642207216130990405495165914761901542247835149412, - 17544563341965869668707473190805417639220912289969746146554006791986582724590, - 4470848226757772603246285686584200798638888970547659211297578619392420918858, - 4999887962989142396481351641254451370620928952306237803174890583736074770292, - 18696621645163318552472841991871104820660024833640321869898695219244792544787, - 16940838088709411711968888146075539661653566927745755478421474505108166140656, - 11530916114120676768574532193664705720045810431665651204245333670674998923676, - 7355883923626920336916662475522243088902821161113628716197989160163721774248, - 11855011297239142909723378707832446926509921514737098047687587969894126468497, - 14942813403879667533705178220673159254886774089783887482228941707848831481300, - 12982663140753853847528768000921561826340636419307931766400467366396846035169, - 7171806600323437636744282845777660095738436086868856062406225133619265520575, - 15982491779929281894294451486893882850583039973528579274058985191703359466543, - 19910319651211685401050894240685395121165652955380089146603485967076493605680 - ], - [ - 5314337765479745092537090978913989310916802510812096192767666377841447850226, - 19811002121850954821192061183148615163420706271800817927960207430256612524059, - 18254735365473444026840717290492248863101576601864757410600437101587001057517, - 3428844080448214358238191483671878854080864964895729401025193865570307658787, - 17688699129722255312471132988267997472426043097741089176095207368928695347323, - 4698778325800416923484519718058460264124242609977080857699400967590134848728, - 11905991584861721837480962390330989450197421918781662074678555052926188909272, - 11195321655863853696452219195252788379254952714823481930861848719672010792417, - 7364573423043519994861038175593500896079924196888521130462378149111415036167, - 8488161531239994007634631892382512438657593769374020273048837520623507271908, - 10948897450624334536526533930990935852623955696383743452358741253735922067160, - 7654175296077985337834288232610181411799310934515705881481549241949669590123, - 2456818423512317060112219756429819064402183920202453945509918337536940292593, - 10561627566351771351550703479997725668661012955063201536370060753602302262655 - ], - [ - 4310089243116651250383251477034324245457116277666484671624575402227833925755, - 11882651094700172542567008359015417490389070633573140242127755563781024148099, - 9304328383406369649010049197573360507944684656613297568584394172735340111263, - 18874624159090765871635243875933482675871258293088886749847315202391523956097, - 21295163659036117126535933666532228255134275601226122998452204301238438701469, - 12010652807420347304532358791037860496459429689113682253200903987591679627067, - 16035147304145989851106586435462674695447030608653337914734493255503105122271, - 9396862051344040260236487045030117425080665841603826234795752404308634565281, - 9623434193020540057685957851610556657916120473978726845338192370747426064401, - 20738972702824723087864078264786214906718601061526079118500228332898388551221, - 457108501000029082366810998923133233303603111079376685755578228260824733356, - 13918719735797746251051948238671198059940858851588937008268023917020073366433, - 19519317439483352367895890468095276150233498159453735432212409926941855183358, - 8400170000010792082337905010575114377571921640630709589910201278654198179035 - ], - [ - 9476241965146735006848999585927664857836027675817848342111996150638876938940, - 20383112265143113621158547584533108172173014612497300318772355462448750327634, - 10370498046215116715134085566322498900073301617448752966999679321197451973184, - 20733082136685384602293372077980283048183069753990343452404863587763569081917, - 209896847902324756441033880218169809685412620378498856437573937154846479551, - 19434208870058033389225349051527401299247475125763108527095891214558119617655, - 4154375339831547300427516624109559852426973786711444825735879648391004291098, - 2168897082728012692838287354581700563166925732559863316849698306675591131396, - 3690054103601385333490512469861728231387681704127049683413276534001532261943, - 3997073653940540957268729302105309759820513901669570962308110503858257659002, - 1493108383089723041516694658460301260449183718295935886883417227290045091286, - 1479721274324005701970059663387618978577823761358404739977258141309872068056, - 20291086357406391640638647514048720424247838755446061571102712546958076851767, - 6860718845648137601753080432837091439893783461195961430761483584544410630099 - ], - [ - 7929983584961755765377471515178883367433439212271736050025708429355823243624, - 10728358412340769313351519567620170787387770135423141966436844748162218854008, - 4169855297038740915695363102363044976292665711211255871324667594694964037773, - 2424224908982307794171893487036131370038399449016750026546326391873466118335, - 1265438250797513961458031163301351393237543067943565114202366151377865506872, - 11342865295714982458109220575532930834959120923837779800176462280225501198217, - 10415384677581396651184780193811022815145977389536746022901590915883889609878, - 5311187015233522007413118391261106264838418369874755037462489089469638365756, - 7499079368996193403750547553190134606728655877653629403923945654291953825315, - 1743769713774086589463238504150542785039161133276706463569974209707667651575, - 5792276842105452143354445764064878932177699791644537942211472215636738768211, - 9443070058088199873709166495831389298947366881168483562080569357428781583046, - 14451507664847323254023899990839043037382802537389529773382951366995420730648, - 7633550475637360595097128986678209600092185294414596687526062925070686318486 - ] - ]; - */ - - uint256 constant SET_SIZE = 14; - bytes constant VK_POINT_BYTES = + uint256 private constant SET_SIZE = 14; + bytes private constant VK_POINT_BYTES = hex"289691d7705934b5504ae4bd7be283f3465af66f62fc7f1e66f03876b445efdd" hex"22a0bebada6ba60c3e190e9e8c2b1420244a14c9e02868b862c7945667416f9a" hex"036ab5249fee75e0644ed259d45fbbd0142b638e421b948f5dc00cf3ff14a530" @@ -974,16 +457,21 @@ library SemaphoreVerifierKeyPts { hex"1ff343732becbc72450b2faedef7112b951edf2ee03bebe4b71365755e6d5518" hex"10e06fbbc2176bff93433750bcbfec05aea120f193a1e4c5bf5993e098916f96"; - function get_pts(uint256 merkleTreeDepth) internal pure returns (uint256[SET_SIZE] memory pts) { - bytes memory pt_bytes = VK_POINT_BYTES; - uint256 byte_offset = 32 + (merkleTreeDepth - 1) * SET_SIZE * 32; + function getPts(uint256 merkleTreeDepth) internal pure returns (uint256[SET_SIZE] memory pts) { + bytes memory ptBytes = VK_POINT_BYTES; + uint256 byteOffset = 32 + (merkleTreeDepth - 1) * SET_SIZE * 32; for (uint256 idx = 0; idx < SET_SIZE; ++idx) { + // solhint-disable-next-line no-inline-assembly assembly { - let val := mload(add(pt_bytes, add(byte_offset, mul(idx, 32)))) - let stored_at := add(pts, mul(idx, 32)) - mstore(stored_at, val) + let val := mload(add(ptBytes, add(byteOffset, mul(idx, 32)))) + let storedAt := add(pts, mul(idx, 32)) + mstore(storedAt, val) } } } + + function checkInvariant(uint8 maxDepth) internal pure { + assert(VK_POINT_BYTES.length == maxDepth * SET_SIZE * 32); + } } diff --git a/packages/contracts/scripts/convert-dec-to-hex.ts b/packages/contracts/scripts/convert-dec-to-hex.ts deleted file mode 100755 index 5974797a8..000000000 --- a/packages/contracts/scripts/convert-dec-to-hex.ts +++ /dev/null @@ -1,537 +0,0 @@ -#!/usr/bin/env node_modules/.bin/ts-node -// Run the script from project root directory - -// Copied from SemaphoreVerifier.sol -const VK_POINTS = [ - [ - 18358547564487905095688479908858987846616998213156437518686067355563592118237n, - 15662648751553932653781975807624464121405704024803073886925976686616010387354n, - 1545474538105908330267074270190095622354834966212647889547653097055078098224n, - 12579159544968648693964563165973893448704730885005100826654630574108054705556n, - 20602000776800724705104231353971008348678632605343811527051139864158800058742n, - 14100125742256756091734688090621667470723401759459592787502475801413744195297n, - 5090583730862410755830979584235210054631184460526892606022709842010236308675n, - 4935746665478263580470501879719907639988899436008466660042851826337922233613n, - 3603230519262933722323237889869128969156000998401789817930265262617368730462n, - 11467103179184542033012124498958167915605281189440445972230559164572312725202n, - 20354120984011889701917116306955017859695028034788955847437411305304360829487n, - 16952752114474306858880411587178692742589121096026762314329638709126787301483n, - 18678961143994743003180318723146092299060216598083112257165966782010215931454n, - 5866474510945308764957529269555101130643879788634167019342763906927794156659n - ], - [ - 15357842752194390032830879177519514606613356943505010426726499926726016517582n, - 13720528004476084359207196371475762368424714925503835663451917882430924467554n, - 2196656647584375999320189230399052835502476576494068012902156164580595749760n, - 14571933744484927053512012311263939678215066456565339237074260778179419354637n, - 15947740979005208428427315036716544174249364023308166418156254508145278950889n, - 13324328715790405384125386378518079709609297588403011236512446709595322048979n, - 18308129219862888344083447566760955160779532192553849267018614487088634836563n, - 6372459765603725576424215986727450779217530423615747931788702584026023386877n, - 7093003777162632186231777482293120808844116758585672698445917711442486215336n, - 15357576732947512625016950088762579987226580659874157718142226214458009204755n, - 13910597919064508360434043231000553781072135406219661606166769706745413894201n, - 9475901949906914147982792916474633312982452326368523201024844634638043554494n, - 5845138751782936895477553974859998077996624699108246120208069774017428318479n, - 3326095377373657419775174404381825686428913179751401123841216020519623741775n - ], - [ - 1096090542237876305763822439899873238394525438826581012748557492836778110917n, - 18282758355470198230938465615400409713402004038201360061031317503584711879237n, - 7973969975759518869552865162652900479072033124669141796195141770899882758383n, - 2920496587818605789230962034477809982324000981266163502059117507002917895757n, - 8027751638293718359199675565570157214590620386957299982399037269650333307021n, - 19002113380575481191643777830101182489616906893723699470070419138254788369727n, - 13631613009301650992828160964785768170789209232530437462516754147352285424672n, - 10537705110128905270703523362934130036880036854847578111990360444182641655212n, - 15557574650831364767567015658284909068256128766563081293491003990055297878366n, - 4049724481871929240016595616316679773340938699307608349394228543495262553744n, - 9967066649437927083270210032320564587652082866881800887188539489167094397640n, - 12463426560961961450861478284334163210886016242490079948590082000657390077088n, - 21318595425700216078579789307308348011199610228556265752904860757510620370622n, - 7430155508771673067823897542900534022148544854722115377830369283854627952599n - ], - [ - 14033304028688398404089545751254979569049699915340551984412184456786819712695n, - 17529478610649635357901422564682249462969460088983393810272144503916885638629n, - 968190632906420692452807865081290940343138767641492735661467959437198373032n, - 7242759178038747404494096998044224993169513816067824413031492987300456908934n, - 12017353327534072098763415761011052990865822334777878720246921848197559257711n, - 4746680322053291743787031203095442352574780441873349801788355375401126089939n, - 6764632552006100580460767171096753901452726344615530017064702126145414585640n, - 11581587935666673652762153205827599529022773836189155792609728856814288572033n, - 3123694825428833189943974730387937552931713004458396242443840668462184834558n, - 3432192610292569155696646287493678963086402014898209278361624573082188247990n, - 12349833666000936285363634772178969342930188247085371717039135170012686159900n, - 5587426338437935681688079936152042996259869611071713486439341129143155921959n, - 12022589354168680516901928073724404259700970836413687340697868887207353139344n, - 2351613311284811919248989036726852289804810348516261915606564943623124473717n - ], - [ - 15740655435463241944594855735935231648684671883923953096410588018036769516770n, - 12964751171177929169670182425240761498461607040020835118601467328036987558858n, - 21474571159868965455306627669334290549452576803823591301731326342326814568896n, - 6954370193053655486251406740905618458518953022289151868757271522548301919472n, - 3115002343037487520580459802807906562630507097436525958861415456096559884443n, - 11775142132959919266954507317832500578453517368862270948538792702813845219681n, - 5975456097652384580746132945351678665917860606511206167023154005883554813508n, - 10958037207675554032315788914627312943186758288936582678633536154169678007202n, - 16345185674805541466042568997276776714209785989761944600635051035243995431568n, - 3326264593228494909568322793066180033820330146744162800569972963329142251537n, - 20721047231464194965879320004420846916587593568519526251056516572985788552732n, - 2552439778142862614309289213707433798337671284267429041900242151271508522517n, - 2849386127826497959217687777221941766595094589431869464564268817450132435018n, - 12188539304210779665491473755999603070354632830707125660270270405780470402800n - ], - [ - 16239592155161765109648123193105804251252701943901733499502441663333912783245n, - 18702593988046837524790351483331632258278160532977261915119611324471253407466n, - 13746033878407070858115621843430829498309218839316343379025665907999784574154n, - 19358066347678636498093783612000296194480758342913325289131948678991962529441n, - 6024976123298004874848602709755399197808739071863728225378332097920450236516n, - 11108084608972457539770160222798307153256767409158349747526974841008717682367n, - 3009127146923662343754766534488769100730310563110562565512507605403185571089n, - 10560679284132950437595738585637379866590755950272794729013445350206405316661n, - 16015321530803994569819047219560485624444041236327101681073970215458831987478n, - 18489840631710745699731219026737904723160484479846032199737023956049067434815n, - 609265187318362115240245160721406765003010398230819869810290394123140807290n, - 2656965952206569220410287839949134856874352189248192147930831679380007159249n, - 13957423432693450118120092425077530751840166358932317773385901323790404449641n, - 7610225795517710715985874151201119876406845575780133396869144717381641586640n - ], - [ - 6482921272760726478838066628157548923897782117283646773208763176771446379138n, - 4562585331778730670899179927104513856322577370213643119870201750008533040214n, - 9299549824594530154451155704400285409056448609359755927574262701418672785771n, - 16654459784024455427280229763380300423080811024668332509526284511491790880990n, - 18178936861568428015361893654874798233785855995042899944660014774323534883903n, - 534506139369949013962728832141783820104682340925384016906020027968881380951n, - 13888044772855561714276444972404100722751042044045312252045340354941233320135n, - 13061437363756343100054622876229104455920015737970195589611281743974716159827n, - 15297052669271818809266618537917704542138894789392864971735934945598379827363n, - 3240592020743113440365790241401792477958041186219702004441781545015089517479n, - 12939402739160799630996576545137073878726141216092557580496570401396343874133n, - 409838859583542828209958035048329036930557790097408442597169497017958367880n, - 4849352055719384218783567790347020036570406423962447054960403165168624679411n, - 10140481868950825952506002812679553069445144019364683137830173127833535162812n - ], - [ - 4169753203433043290708949478342499350225971996935208104044673971132510531963n, - 16198597482473356107060462797493408464959815651823410647378959304462364790023n, - 17831214733154720272879709021886998538183166751338990495293296921834561417050n, - 15996002991058741836925286413107190453488985346498046642177496721490001022163n, - 12128929995926069335150064696726717100038806543084523729572253928762150006902n, - 1527343541447603983494013575570118174442170324803005341835852970207664984106n, - 3864366504647042739453971869413719136218296278515580744588126485271535533745n, - 16390744785373846505589339019032992526980013169808686005019244934399314954484n, - 1189371614834081242339044631966546656514169937037419744085755746584992776112n, - 2490564128297998291899011962907372091056992851367564813460897014374926950158n, - 2632864541439030478006092584387470079076010621748787710053145987733131826177n, - 10997016251008884590554668186933912000821350188750456144761529496433221911191n, - 3662989402605074726032541754492900291134797145446056852785520146936851543244n, - 8371074929323402425468930212402691638137013802793901226648986870188378349904n - ], - [ - 17920452210119585965813298538098997746450528307627971419517604274103840658730n, - 8026613233416032931155189579997899527124867847165186585887532521124762242171n, - 12536429843060624487053183271774959575059067729019923970247266906616071589989n, - 18354222295715868456732739635697044486544782691576216892030243636076554800619n, - 11685593308965088606881675161829854229906033467171784802160080423031157953626n, - 18989841286028554273231159314070667749621876499337485447347239057791285949659n, - 13501500842653069022700095920888317808542113497043735775280862312089436522286n, - 16284422417487952110266526583186344607656490299306406671512902584454645262294n, - 14766820041476554952520399418749355774195705334216487399328042021346008099854n, - 11502099463338241997177160748027482497157165595330950109059924501733819344412n, - 21097733162892834226328090737666232905549661288100963226189626007151883115218n, - 3620141777236347892405766912767968106066233413607983266884777435591408542679n, - 4465316625088681267432956930147995293521314127558426510839100849580054135068n, - 15951396696291486543574989938200386934444721629903447106494532971713975302198n - ], - [ - 21420692366857794685888663542888709905237738746850069466081467001353666342965n, - 18343503004862189418033094393114515169584171574852422315350418500159030922263n, - 16439186901063853414808045554962977634854311593865750348846556486836509716488n, - 15200551988732901161699976788357951085426436066677048420098461828563894176150n, - 15140772590596966074591171894694986645347795546765667852915300358255369432294n, - 7383386342436648909729802223228006548918015494414484659175617833341830753463n, - 11436445698241305906567677067532324081573492145508451249291326304016376374466n, - 17397405229027848655285535331264669055168427730382628461971653096729174692794n, - 8888190346365862431131132945799487885295183925892581338098808269532220115208n, - 17373048493258440814074078107890527278667903472831731635546171123117085702144n, - 5394355195223713516914582580686192473163629785306318732489822694588538915692n, - 20814957740385525027786677509245187599649792998372465800981035312224123940783n, - 11167741662268878371451552983943563550747492198375641214347145843414778750740n, - 1505498991925224080559736158020686494389967648228591899080542175743913505975n - ], - [ - 8482807834840099486107357849095958421708288941420679407730439668240369271197n, - 1531932691795154082010331247272128035283420450879984505970978649526303671013n, - 10326017741190716069982105202291613302347042236075737537452333444753171570010n, - 2890563104449202149521252385842115871596603958515320789619311677428773944295n, - 5091938011714608365574587822261119297677309310900626302766934784886036216676n, - 18792973255357094538588824962661759194320829424712347846315600994520652609459n, - 5819484726278895533547092474664732368175576227992878488267454637556311136768n, - 14087278759052154922504944654932471722205352537489748711235261956958139094423n, - 6676755499836944199268283133886528716777488598645051771936175647684814488319n, - 7841200200792172536039490995922340397104113825218911994623753022413575084536n, - 9685171750835271647846188024034904289604883281120913275229696726161494108338n, - 13804722593058778047599265964893015518608567919815229008355552695901539135617n, - 133210224564739370698401112580329091433152068231765294734991529050629411851n, - 6253365067148837443745536970484493754157158998156041417978340186561909915882n - ], - [ - 6379626794062388565530320965673584683811331210463512233691169393056454417810n, - 8031021217500376290269114216814836477415391402921787637085737712949651005952n, - 15261959534341262089656432084966075417921918036565394975811438856221288978192n, - 12412675319987657724460960278402203548317535126494687402198671892291826563464n, - 11594484527416994136900781664743660516883697944736099448760569480817952218099n, - 5525949004768282420418522754788387377346850869414250693501350383184014395566n, - 13423677678153887686951876961584096043047689175638209759158420018856273430250n, - 688554022717474500337948897714325469989973507431329797109415877246281679190n, - 5767985312159947447966233995178318554138266544591427341210101818005833690773n, - 13782057493439290506357575012457041256926849070794382612465582256292384507590n, - 2009465632383454183075946487099156558696455704620200103263777377956167571948n, - 10265570962161934109202420603055144010322859077969741656080416572925588897009n, - 13063467510206676485181697613068184940643350938488359709447602318070297992418n, - 8824580488237789516855671915345935747743201560548603121129517348234754630838n - ], - [ - 18405974527641184935569939050199806786119735189423462681352004154947586987761n, - 11063658239692825381704700810385108349384459703800229121613802621026834850995n, - 20401912636755055463157317129314482008782101856095804626717136888886428939725n, - 10581036997862130058603889786198200057133900928078268413900852134308841628552n, - 15613862437263830065893280422700893831122147824370200118126675792748158214283n, - 11637898091445829201992956909089879348463617460955895182594618572267100421779n, - 676470684249461112964281503193041675013396554434239929609436328672155420783n, - 14862758280768060051884504554805186980208629806423451755599092137651959992706n, - 5623342967419780942118234966618900971275224510117264341831041912523393680166n, - 12293742687505619727765346377361630310803471543338450439759434637239250426631n, - 17107107724389526013252251054585363312805578717860151655674796329456502453436n, - 695490429984933474058785653390434166254929169748519672533632124843844650437n, - 7941603993861390710630117468483386570984050378175531457457840811645822985465n, - 19423663035279971057851778008344970269742436279020301703706239058210708410668n - ], - [ - 2844460676842285471844840162496739784337096369846435331204280645139535043731n, - 5914749649291606384462747717764850940787906745751128721215181537027495043325n, - 16403998562201315274383761287898474039980386929670468025842124690312505385798n, - 16679714051449621657256662882211432986285335589270632187081448168743144646010n, - 14178974435133537452754432783693851994073934244854394772136599698341675338748n, - 14490318493007296294817313593753116388501252549516359980240258503496717340194n, - 21219478166573360512901478467779541318881953172337799756939010190701884653821n, - 13653038712207413996195005796658436532811211815454701512198612316602372800026n, - 6606031466185873676955137126631780808678269492505994174970319773811652852017n, - 6998326006251734945119834407770954155028321677085545151592873301468610324946n, - 15717984973502827230694305820570642040862757036680118080574899662027439132392n, - 6129387663611887185666499162725019000386957238200546358846681873950634080364n, - 3229894653990057163047872622628926092609943988699832798310941005306795398260n, - 1577249093608064810495237122250056987651980088410811739655744853476971398741n - ], - [ - 8019490235657930229602545685025618469913840887375206662306714562639338096359n, - 6360514614281299182411878013125972206098844277909449064382248671632240409416n, - 18532505668867290379738328175003759079607042632729982459107375168365918757976n, - 8421518624327767035539667378193845962377888010421324291966623261409058898245n, - 21508024236353721936402111331734487542417525255582275314005272967405040862839n, - 18027689383014810715963711252886295463940938266456411644747464137365500951807n, - 14484077699638992615220759300878276902226958277985946809174186953862915299590n, - 4817080763362108602919187869554992685382108795016276838137423588157592666796n, - 10791657063117982548380087239678382293931165307389242284595466175088416832331n, - 17574587559710800088797913763598808892829608388483075257576879500511250128297n, - 20931338330271163055101602391315623325223860904427973201832184784566097488773n, - 1954574324880132355431783868495392698894997264747376529310223470792870288803n, - 2551137710278149502571112114560159376697849893483916552857521579500208583200n, - 3997814265160290573081282672183091638735659350920634229735367532175023689675n - ], - [ - 20759074837657564809501685143530456377562536015816086555379080667602653298306n, - 11573288866341175121647407708978273297857024597782918874282176717371576773130n, - 19475107603336226504587469711392819869087288902355805230614724291289122375846n, - 21884242265301052283286073107133504985083194336113478618838523331660374213570n, - 11844625750737259417493690805104254337758743574820507915512371579679338049474n, - 18479163117067129250021591308069049721232170743585134941796617403156042279597n, - 4434911559893931929914698652677389633068778061297646529129767359157675249407n, - 316682746098441691626372255125560321251096997722401729182940832349927288255n, - 19610390525670030492896894087745165507340241783776573708027658938288182681300n, - 5840208148535790468526125686220196099566194081164771919666034943299219873755n, - 3679027218793663842409677356801552901605408436635647286999251784339864591201n, - 9878321578558671609403512127325051261043472923444011356477587484000484178928n, - 16646455734597629493777237097088292344110223995728568379569260368267096014288n, - 14735311379463771264009437608444808852233202023120148855228542005281236140064n - ], - [ - 3066170574229466435407264700502616839626082070514501523679452764935485028736n, - 7951387307333182634684754650901435973768779794218900331714625086350726274942n, - 13578824606544430966133042087468301830727811282121948825028360301706303669231n, - 19848381031896652139349791682530465833719275685855743122849792015759588531339n, - 6922136549797750291447751953663854475218048098902194660515442295348938322083n, - 10287261443878564608994021014993200221021609196127927226041534661185500281120n, - 6329063805909277980282354325384845982783657973381777424581891744521604640994n, - 11017548748010510224711773916683171526878158646735796493859902304094594577338n, - 7338335804036221772945379382782674399589206056354184002757176151341198318122n, - 16538115574966264108203522400275571374556020887608210819563613080068710593180n, - 5138245976626127736555381649425906350640183768145541963359703291501245587848n, - 11347291457433539838423910567581114929056891897670787919546976342310334767900n, - 16731418617609356258989018213857655050257827940403117452476763890174877962606n, - 5300557287595854140445529914668848275536281916366261035684431572728600543772n - ], - [ - 6573154341426354993599623914164155921131813615298607946435982334364383320793n, - 16419308144058642981524756443290703631729426627385646905142158478345164404879n, - 942314767315789144256266064192022265579304275774793342260835421710673918285n, - 17945712678641984649495876620223190782305382105763957622870181201252059717682n, - 6497446328454795535775520142893202697197882656922991300092165933292014766725n, - 4597431274747983679157649737399090093759447324935531801532881928263496852124n, - 20581664438782214735167492264807215952133504025063870863776714994387749970180n, - 5854805250432620287068939301087113989827350315462338534819773170350910225622n, - 13548539273975522227017059057161374261181128673406746320122994151943985128196n, - 7414800418339434590171697383031637744601564309993253226498272110927128779715n, - 1052987139013233499761917411027037646861657729931697227519754049539833189269n, - 657108667626796780066815408290681939596246857020023912757838581820942772606n, - 19088282520683145597098955555305422198780142332183007920340899996970202127885n, - 12616611543293706969401642310383814806112402432261338062963427055972449363741n - ], - [ - 9271002136483424788269278316391606491360153732024211579417926107994995432826n, - 8228171988949250866347662896961764196608750080646539001443256474901139877051n, - 20240081759615964816136232877050251456333669788276947762731625798225823502998n, - 3685474186777860155223706676482968796090983045736466861690878558020083034916n, - 305741399293956298249448376598537769086716682101868856634885453070917344627n, - 14942830908704142867090451021371809832404069532430585621173997534136021340349n, - 11873341523902185373029537495825388400298468809112431373607438726587086076801n, - 16566421774425889929886838459987430622148040878072136298073788804726016806526n, - 18314173705630320437871113612645566255775444265992974192826331109357704470403n, - 8597072000455186494551694692524831407069966911367008568012412188890924300508n, - 12713907619301764178052509321657058919935892208409394514649600000706175319189n, - 14893305145776480356274920935320977108910444566603040558476174175562031483300n, - 11027938853766719633497710751595847377263279173227878474215846011660771149283n, - 6927793728403485743741891409676155921703126599118383623637742555953569891357n - ], - [ - 275116175553159498718561489405169511232715998055900506709208190227728439831n, - 7338708370982730261395030177227912514214944721567888714384503728042214055309n, - 2285508597732647746841213906783440647997136124356359059650028586535477309792n, - 15163443940499746648640851269666923560658903809778640616581862089179343108182n, - 37868753390676617287004841173348795594362354905038492583057282228528019603n, - 19475937072595290694509025801956972632863465524774747773770243946674956142538n, - 1818532521520079200500527816308109106767855745862413136331026404438772138114n, - 7893556755641665136576228990240239515272703124353568551151593029797349984766n, - 21843411659343488969197036446870567462789014279182131087406329675847260538394n, - 13883536936296384480685931731174096875043607202415233199362935327975006076376n, - 3061885619227488514362869971925298711535995206671454426027635264218303442708n, - 18477632669759047471715211461337808302603089797347923153039515976242018999984n, - 4953684980989921770137053964305439167945572062294709110871332076115076441738n, - 849590699713478394267684876803414882497887483062076673282369901261463387635n - ], - [ - 7481617454708320190331411214970150566519243590120906863698168124347483283307n, - 3790897889674729687102011235738708037383393765058266352188381434189575086080n, - 17582850308142585333519054672998882111865339708436809129995518706804527076353n, - 18961585057625546222763334757505522771740769338010572292783220912986926586854n, - 17761332237343741278668998123360108574589045018570742689473320560784505694171n, - 2985768806786881176362869973473950745997650698247163897069614623128281191971n, - 14099532828736062687388547070054719462342298981811592749594569670955512096417n, - 11038429458121896617356666499000022639824993159854464409767840206807807728043n, - 7092464867594165410092487979619486929166817679669939558999555261465867685619n, - 20690943609696626243672018055336898909740557628366317533030490341400911534771n, - 11468803355345327303851639215186997122074583511720489615730106184659306943551n, - 9723340381470060111632263437706139036358918795037011403763820908081655273682n, - 15929497108714526572140462634902391796285476840034863688822264979709196730555n, - 10556139316790113226399166507094772235069235781001645893008903131855134732783n - ], - [ - 9679690373149117563754317307037586538394929348733117229177073999196519450461n, - 13953490152873041611053779700802518995304489998104548903919774028525032867964n, - 8584860336778813488021026261425560177968889952950706471574873674510806966419n, - 8400619522468195192079024924375785176686244213372269992523849676384018875300n, - 16018239095599670975582212156736908990475077583136160880304021421989907078233n, - 13442762142079759258078337448325782252795445513077684243558458356586404542166n, - 8012524517439221218249889438165569497775551565363444399021079689755695756644n, - 18993442931337392722189844722480176040693468853419121807183123246184718322422n, - 3920077716342530896195446297162279477088824676672184510151991496745985467962n, - 5663885918690734602622426696143772526257235018784490039324179199552252272203n, - 11007942216549411481832816505096362871539130535791764225892613523847180067807n, - 12333277086717649179464584335417603775633093807601488202185840108448843332123n, - 18845646001611639216437777320622198530894193094859924604338859788769244491906n, - 4365664869724113934112630479809518948808449158812862195377335314227128146059n - ], - [ - 1895928299034844696630794694609519515092896092191683631304721647222032914779n, - 19026513891744713045426845531420132126578554294461150386909840193098440147673n, - 4073281111734161932072345995811001896063226222777392994725894652964051683943n, - 13362867147840304033834065229457670563442204439046527165143934160967798444725n, - 9724485076061228092177286932258189815958450833155679889060988975712535081230n, - 1627333086421877964064603957348348763696708139082607562629629725119997724989n, - 15641874381988682075545920458678901707167602315586561132909307694310257446023n, - 11034182059786563285109970430313289917032071817373248775707546493147901388113n, - 19299574745226772810381056007321573284793444116746272581694295128392282602507n, - 6482638271546132546782310681506292669989505915370438641175376336582811537739n, - 5515138970831679245126906315331906152285174207704247085730757090763031968272n, - 5476746571008230667726688443817396210804752373221945489797046634505665572661n, - 7666694240010574980777401583687953099995588711474009270339615112182231942529n, - 5345423812126487230177352826531606752132805611025916574123407915411930666385n - ], - [ - 7211419275788152379372992549185439317698375419836488104253705518694042119228n, - 9112140750806762434510825375931543886135367141484613422947675423683311130537n, - 12020406779776320543918475257645763209221278449775176154727249143619468329590n, - 6961266423823329910790066424248133365666435921221127260870444632539329606224n, - 3527954161191330198309290076708590175518992377857531220243324230315686986882n, - 4506493800007416260514839382433205292331764028735360433653631210611507932973n, - 5530043493028748853396066194331787195114268917530734310055878976603589658986n, - 6225101949608434111198442012357272827532649788667254718474232856896193900534n, - 18857681750145313162493356993928966938826030906289025101399379263672964054354n, - 869004496821135911657110194622810910776043851317139916414752924319830673140n, - 1563829187789877652048924285544523323087888587074484491222967490033068091506n, - 3746011388196035005128740753677692387874351474501361202463946309770129429478n, - 8923361680602360491637539340186330583808472610027697444204036893010926051377n, - 17386658730777389148551542774423634880430074554050371095211396948875032586750n - ], - [ - 18803497674827878184210135371703804206276128582022416604041787392310845729622n, - 6590008305704976915857671866558706505394630312395969823040635040879201337002n, - 2714759247406808259589803854440914533632699567907406761316959511568030744066n, - 16299600292583383998706243035294548578562168326056377699804434906128380481545n, - 18030052417377603682453955579175094175373404791176719861146533099419481910116n, - 8281176924556272137773300347187527516223668703826908452855802099328657344885n, - 11849913964821118293258226409033507680960291656604016015128854810099746642358n, - 2718653438901851962181612429288634518502998150085578586248082443515454453331n, - 17998120665039026798317726060462551095622279047136565816648549826384179735803n, - 5133986071087432716437635164720916024596119526725252628340805179596147643344n, - 10436725621240227608920674037516192343160590540839553356331196590007025190330n, - 15618861474705274368161439159831328775613537777134266634959100526889759124590n, - 2511040106219966488942941427805413210834998861588095124665874406004322450915n, - 9256734357641210393451356199893573129989430877284906007481196262323584132500n - ], - [ - 9325238625126515763679853550553375879158552597544709459784109512243397955590n, - 8484194759795978556088297437107686617328133596604796277228418191688537911573n, - 7354463117736585470843139230227589188304331389476818932256765377140053168035n, - 13482530129860761195447497269660263095272961608736579417124458190809007451755n, - 14565877561081097978808851096191380459292726072163754601747539666057949167693n, - 2135718143241813932226161801358235289781058013695871838383051572102928884567n, - 20522747851108608773003772892187458826390403588440155512773881116135635256410n, - 11218511591600821722003994140994121719832310771637604152054113941332818455369n, - 16404237709834224719800904205708261378663612035126521203425485585484994986837n, - 3167586669955731698085513002461997957955073343333183557668566807567186590619n, - 12910675356590890481798719900077391291951346627685199305549632303581651173802n, - 20462953503625657093808736208830478011818679863351201550868889073055617578896n, - 18947108562530644410102590841857357185115081182319111952079371871969663671988n, - 6652719222291337824561052377450295064566587460338214284424446330320206208978n - ], - [ - 7333723286812204168407439917521565157977670700382476881790986792115201279410n, - 21462572925415337738214437933606587540653694853107274549824898449394152530908n, - 6820993392268884858152757378169835647522978080101384568523885945756789014349n, - 16253055713127198337468919465234896268161918860396508551871391729457324125212n, - 10110377608880446364161064735161091842938826397512230713135002732708361876777n, - 6013899729219769410326935661934883558337463050053435907100782150692294649745n, - 18208889227209298598015138525374980382541030144328510393048300775270787949840n, - 15191444075449840811990314906356975059662539527217455842253932605838538105879n, - 19203188682890514423320800755662084436821947463936810212920115637567986869322n, - 3424855308164288636262956984024538145687254883958282264766019244372264927134n, - 19586353501601321585672146098476085745700368665390426128801697725086439710122n, - 15010004828387861046033155948517332272437733117418549079342100218646019702080n, - 13686339229559293872534012092085760944059315023471369613822812965287369238447n, - 3695584012986626869153168308549979767804807828687034680677188403817830418810n - ], - [ - 11102327427527201346056529148642207216130990405495165914761901542247835149412n, - 17544563341965869668707473190805417639220912289969746146554006791986582724590n, - 4470848226757772603246285686584200798638888970547659211297578619392420918858n, - 4999887962989142396481351641254451370620928952306237803174890583736074770292n, - 18696621645163318552472841991871104820660024833640321869898695219244792544787n, - 16940838088709411711968888146075539661653566927745755478421474505108166140656n, - 11530916114120676768574532193664705720045810431665651204245333670674998923676n, - 7355883923626920336916662475522243088902821161113628716197989160163721774248n, - 11855011297239142909723378707832446926509921514737098047687587969894126468497n, - 14942813403879667533705178220673159254886774089783887482228941707848831481300n, - 12982663140753853847528768000921561826340636419307931766400467366396846035169n, - 7171806600323437636744282845777660095738436086868856062406225133619265520575n, - 15982491779929281894294451486893882850583039973528579274058985191703359466543n, - 19910319651211685401050894240685395121165652955380089146603485967076493605680n - ], - [ - 5314337765479745092537090978913989310916802510812096192767666377841447850226n, - 19811002121850954821192061183148615163420706271800817927960207430256612524059n, - 18254735365473444026840717290492248863101576601864757410600437101587001057517n, - 3428844080448214358238191483671878854080864964895729401025193865570307658787n, - 17688699129722255312471132988267997472426043097741089176095207368928695347323n, - 4698778325800416923484519718058460264124242609977080857699400967590134848728n, - 11905991584861721837480962390330989450197421918781662074678555052926188909272n, - 11195321655863853696452219195252788379254952714823481930861848719672010792417n, - 7364573423043519994861038175593500896079924196888521130462378149111415036167n, - 8488161531239994007634631892382512438657593769374020273048837520623507271908n, - 10948897450624334536526533930990935852623955696383743452358741253735922067160n, - 7654175296077985337834288232610181411799310934515705881481549241949669590123n, - 2456818423512317060112219756429819064402183920202453945509918337536940292593n, - 10561627566351771351550703479997725668661012955063201536370060753602302262655n - ], - [ - 4310089243116651250383251477034324245457116277666484671624575402227833925755n, - 11882651094700172542567008359015417490389070633573140242127755563781024148099n, - 9304328383406369649010049197573360507944684656613297568584394172735340111263n, - 18874624159090765871635243875933482675871258293088886749847315202391523956097n, - 21295163659036117126535933666532228255134275601226122998452204301238438701469n, - 12010652807420347304532358791037860496459429689113682253200903987591679627067n, - 16035147304145989851106586435462674695447030608653337914734493255503105122271n, - 9396862051344040260236487045030117425080665841603826234795752404308634565281n, - 9623434193020540057685957851610556657916120473978726845338192370747426064401n, - 20738972702824723087864078264786214906718601061526079118500228332898388551221n, - 457108501000029082366810998923133233303603111079376685755578228260824733356n, - 13918719735797746251051948238671198059940858851588937008268023917020073366433n, - 19519317439483352367895890468095276150233498159453735432212409926941855183358n, - 8400170000010792082337905010575114377571921640630709589910201278654198179035n - ], - [ - 9476241965146735006848999585927664857836027675817848342111996150638876938940n, - 20383112265143113621158547584533108172173014612497300318772355462448750327634n, - 10370498046215116715134085566322498900073301617448752966999679321197451973184n, - 20733082136685384602293372077980283048183069753990343452404863587763569081917n, - 209896847902324756441033880218169809685412620378498856437573937154846479551n, - 19434208870058033389225349051527401299247475125763108527095891214558119617655n, - 4154375339831547300427516624109559852426973786711444825735879648391004291098n, - 2168897082728012692838287354581700563166925732559863316849698306675591131396n, - 3690054103601385333490512469861728231387681704127049683413276534001532261943n, - 3997073653940540957268729302105309759820513901669570962308110503858257659002n, - 1493108383089723041516694658460301260449183718295935886883417227290045091286n, - 1479721274324005701970059663387618978577823761358404739977258141309872068056n, - 20291086357406391640638647514048720424247838755446061571102712546958076851767n, - 6860718845648137601753080432837091439893783461195961430761483584544410630099n - ], - [ - 7929983584961755765377471515178883367433439212271736050025708429355823243624n, - 10728358412340769313351519567620170787387770135423141966436844748162218854008n, - 4169855297038740915695363102363044976292665711211255871324667594694964037773n, - 2424224908982307794171893487036131370038399449016750026546326391873466118335n, - 1265438250797513961458031163301351393237543067943565114202366151377865506872n, - 11342865295714982458109220575532930834959120923837779800176462280225501198217n, - 10415384677581396651184780193811022815145977389536746022901590915883889609878n, - 5311187015233522007413118391261106264838418369874755037462489089469638365756n, - 7499079368996193403750547553190134606728655877653629403923945654291953825315n, - 1743769713774086589463238504150542785039161133276706463569974209707667651575n, - 5792276842105452143354445764064878932177699791644537942211472215636738768211n, - 9443070058088199873709166495831389298947366881168483562080569357428781583046n, - 14451507664847323254023899990839043037382802537389529773382951366995420730648n, - 7633550475637360595097128986678209600092185294414596687526062925070686318486n - ] -] - -async function main() { - const array = VK_POINTS.flat() - array.forEach((v) => { - // convert to 32 bytes, 64-char string - let bytes = v.toString(16) - if (bytes.length < 64) { - bytes = `${"0".repeat(64 - bytes.length)}${bytes}` - } - console.info(`hex"${bytes}"`) - }) -} - -main() - .then(() => process.exit(0)) - .catch((error) => { - console.error(error) - process.exit(1) - }) From 0d544cd563cadd78e4f910891eed5cea69f7f3d3 Mon Sep 17 00:00:00 2001 From: Jimmy Chu <898091+jimmychu0807@users.noreply.github.com> Date: Thu, 17 Oct 2024 10:48:35 +0800 Subject: [PATCH 7/7] chore(contracts): update invariant check to revert with custom error --- .../contracts/contracts/base/SemaphoreVerifierKeyPts.sol | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/packages/contracts/contracts/base/SemaphoreVerifierKeyPts.sol b/packages/contracts/contracts/base/SemaphoreVerifierKeyPts.sol index 729a08aef..61a0c2af4 100644 --- a/packages/contracts/contracts/base/SemaphoreVerifierKeyPts.sol +++ b/packages/contracts/contracts/base/SemaphoreVerifierKeyPts.sol @@ -3,6 +3,8 @@ pragma solidity 0.8.23; library SemaphoreVerifierKeyPts { + error Semaphore__VKPtBytesMaxDepthInvariantViolated(uint256 actual, uint256 expected); + // Verification Key points. // These values are taken from the verification key json file generated with snarkjs. // It allows to use the same verifier to verify proofs for all the tree depths supported by Semaphore. @@ -472,6 +474,9 @@ library SemaphoreVerifierKeyPts { } function checkInvariant(uint8 maxDepth) internal pure { - assert(VK_POINT_BYTES.length == maxDepth * SET_SIZE * 32); + uint256 expected = maxDepth * SET_SIZE * 32; + if (VK_POINT_BYTES.length != expected) { + revert Semaphore__VKPtBytesMaxDepthInvariantViolated(VK_POINT_BYTES.length, expected); + } } }