This repository has been archived by the owner on Mar 6, 2024. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 4
/
mainnet_17_7.v1.yul
1668 lines (1494 loc) · 82.6 KB
/
mainnet_17_7.v1.yul
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
object "plonk_verifier" {
code {
function allocate(size) -> ptr {
ptr := mload(0x40)
if eq(ptr, 0) { ptr := 0x60 }
mstore(0x40, add(ptr, size))
}
let size := datasize("Runtime")
let offset := allocate(size)
datacopy(offset, dataoffset("Runtime"), size)
return(offset, size)
}
object "Runtime" {
code {
let success:bool := true
let f_p := 0x30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47
let f_q := 0x30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001
function validate_ec_point(x, y) -> valid:bool {
{
let x_lt_p:bool := lt(x, 0x30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47)
let y_lt_p:bool := lt(y, 0x30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47)
valid := and(x_lt_p, y_lt_p)
}
{
let y_square := mulmod(y, y, 0x30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47)
let x_square := mulmod(x, x, 0x30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47)
let x_cube := mulmod(x_square, x, 0x30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47)
let x_cube_plus_3 := addmod(x_cube, 3, 0x30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47)
let is_affine:bool := eq(x_cube_plus_3, y_square)
valid := and(valid, is_affine)
}
}
mstore(0x20, mod(calldataload(0x0), f_q))
mstore(0x40, mod(calldataload(0x20), f_q))
mstore(0x60, mod(calldataload(0x40), f_q))
mstore(0x80, mod(calldataload(0x60), f_q))
mstore(0xa0, mod(calldataload(0x80), f_q))
mstore(0xc0, mod(calldataload(0xa0), f_q))
mstore(0xe0, mod(calldataload(0xc0), f_q))
mstore(0x100, mod(calldataload(0xe0), f_q))
mstore(0x120, mod(calldataload(0x100), f_q))
mstore(0x140, mod(calldataload(0x120), f_q))
mstore(0x160, mod(calldataload(0x140), f_q))
mstore(0x180, mod(calldataload(0x160), f_q))
mstore(0x1a0, mod(calldataload(0x180), f_q))
mstore(0x1c0, mod(calldataload(0x1a0), f_q))
mstore(0x1e0, mod(calldataload(0x1c0), f_q))
mstore(0x200, mod(calldataload(0x1e0), f_q))
mstore(0x220, mod(calldataload(0x200), f_q))
mstore(0x240, mod(calldataload(0x220), f_q))
mstore(0x260, mod(calldataload(0x240), f_q))
mstore(0x280, mod(calldataload(0x260), f_q))
mstore(0x2a0, mod(calldataload(0x280), f_q))
mstore(0x2c0, mod(calldataload(0x2a0), f_q))
mstore(0x2e0, mod(calldataload(0x2c0), f_q))
mstore(0x300, mod(calldataload(0x2e0), f_q))
mstore(0x320, mod(calldataload(0x300), f_q))
mstore(0x340, mod(calldataload(0x320), f_q))
mstore(0x360, mod(calldataload(0x340), f_q))
mstore(0x380, mod(calldataload(0x360), f_q))
mstore(0x3a0, mod(calldataload(0x380), f_q))
mstore(0x3c0, mod(calldataload(0x3a0), f_q))
mstore(0x3e0, mod(calldataload(0x3c0), f_q))
mstore(0x400, mod(calldataload(0x3e0), f_q))
mstore(0x420, mod(calldataload(0x400), f_q))
mstore(0x440, mod(calldataload(0x420), f_q))
mstore(0x460, mod(calldataload(0x440), f_q))
mstore(0x480, mod(calldataload(0x460), f_q))
mstore(0x4a0, mod(calldataload(0x480), f_q))
mstore(0x4c0, mod(calldataload(0x4a0), f_q))
mstore(0x4e0, mod(calldataload(0x4c0), f_q))
mstore(0x500, mod(calldataload(0x4e0), f_q))
mstore(0x520, mod(calldataload(0x500), f_q))
mstore(0x540, mod(calldataload(0x520), f_q))
mstore(0x560, mod(calldataload(0x540), f_q))
mstore(0x580, mod(calldataload(0x560), f_q))
mstore(0x5a0, mod(calldataload(0x580), f_q))
mstore(0x5c0, mod(calldataload(0x5a0), f_q))
mstore(0x5e0, mod(calldataload(0x5c0), f_q))
mstore(0x600, mod(calldataload(0x5e0), f_q))
mstore(0x620, mod(calldataload(0x600), f_q))
mstore(0x640, mod(calldataload(0x620), f_q))
mstore(0x660, mod(calldataload(0x640), f_q))
mstore(0x680, mod(calldataload(0x660), f_q))
mstore(0x6a0, mod(calldataload(0x680), f_q))
mstore(0x0, 20726407482471391512090360235977739314152844021314353719148771804318778614389)
{
let x := calldataload(0x6a0)
mstore(0x6c0, x)
let y := calldataload(0x6c0)
mstore(0x6e0, y)
success := and(validate_ec_point(x, y), success)
}
mstore(0x700, keccak256(0x0, 1792))
{
let hash := mload(0x700)
mstore(0x720, mod(hash, f_q))
mstore(0x740, hash)
}
{
let x := calldataload(0x6e0)
mstore(0x760, x)
let y := calldataload(0x700)
mstore(0x780, y)
success := and(validate_ec_point(x, y), success)
}
{
let x := calldataload(0x720)
mstore(0x7a0, x)
let y := calldataload(0x740)
mstore(0x7c0, y)
success := and(validate_ec_point(x, y), success)
}
mstore(0x7e0, keccak256(0x740, 160))
{
let hash := mload(0x7e0)
mstore(0x800, mod(hash, f_q))
mstore(0x820, hash)
}
mstore8(2112, 1)
mstore(0x840, keccak256(0x820, 33))
{
let hash := mload(0x840)
mstore(0x860, mod(hash, f_q))
mstore(0x880, hash)
}
{
let x := calldataload(0x760)
mstore(0x8a0, x)
let y := calldataload(0x780)
mstore(0x8c0, y)
success := and(validate_ec_point(x, y), success)
}
{
let x := calldataload(0x7a0)
mstore(0x8e0, x)
let y := calldataload(0x7c0)
mstore(0x900, y)
success := and(validate_ec_point(x, y), success)
}
{
let x := calldataload(0x7e0)
mstore(0x920, x)
let y := calldataload(0x800)
mstore(0x940, y)
success := and(validate_ec_point(x, y), success)
}
mstore(0x960, keccak256(0x880, 224))
{
let hash := mload(0x960)
mstore(0x980, mod(hash, f_q))
mstore(0x9a0, hash)
}
{
let x := calldataload(0x820)
mstore(0x9c0, x)
let y := calldataload(0x840)
mstore(0x9e0, y)
success := and(validate_ec_point(x, y), success)
}
{
let x := calldataload(0x860)
mstore(0xa00, x)
let y := calldataload(0x880)
mstore(0xa20, y)
success := and(validate_ec_point(x, y), success)
}
{
let x := calldataload(0x8a0)
mstore(0xa40, x)
let y := calldataload(0x8c0)
mstore(0xa60, y)
success := and(validate_ec_point(x, y), success)
}
{
let x := calldataload(0x8e0)
mstore(0xa80, x)
let y := calldataload(0x900)
mstore(0xaa0, y)
success := and(validate_ec_point(x, y), success)
}
mstore(0xac0, keccak256(0x9a0, 288))
{
let hash := mload(0xac0)
mstore(0xae0, mod(hash, f_q))
mstore(0xb00, hash)
}
mstore(0xb20, mod(calldataload(0x920), f_q))
mstore(0xb40, mod(calldataload(0x940), f_q))
mstore(0xb60, mod(calldataload(0x960), f_q))
mstore(0xb80, mod(calldataload(0x980), f_q))
mstore(0xba0, mod(calldataload(0x9a0), f_q))
mstore(0xbc0, mod(calldataload(0x9c0), f_q))
mstore(0xbe0, mod(calldataload(0x9e0), f_q))
mstore(0xc00, mod(calldataload(0xa00), f_q))
mstore(0xc20, mod(calldataload(0xa20), f_q))
mstore(0xc40, mod(calldataload(0xa40), f_q))
mstore(0xc60, mod(calldataload(0xa60), f_q))
mstore(0xc80, mod(calldataload(0xa80), f_q))
mstore(0xca0, mod(calldataload(0xaa0), f_q))
mstore(0xcc0, mod(calldataload(0xac0), f_q))
mstore(0xce0, mod(calldataload(0xae0), f_q))
mstore(0xd00, mod(calldataload(0xb00), f_q))
mstore(0xd20, mod(calldataload(0xb20), f_q))
mstore(0xd40, mod(calldataload(0xb40), f_q))
mstore(0xd60, mod(calldataload(0xb60), f_q))
mstore(0xd80, keccak256(0xb00, 640))
{
let hash := mload(0xd80)
mstore(0xda0, mod(hash, f_q))
mstore(0xdc0, hash)
}
mstore8(3552, 1)
mstore(0xde0, keccak256(0xdc0, 33))
{
let hash := mload(0xde0)
mstore(0xe00, mod(hash, f_q))
mstore(0xe20, hash)
}
{
let x := calldataload(0xb80)
mstore(0xe40, x)
let y := calldataload(0xba0)
mstore(0xe60, y)
success := and(validate_ec_point(x, y), success)
}
mstore(0xe80, keccak256(0xe20, 96))
{
let hash := mload(0xe80)
mstore(0xea0, mod(hash, f_q))
mstore(0xec0, hash)
}
{
let x := calldataload(0xbc0)
mstore(0xee0, x)
let y := calldataload(0xbe0)
mstore(0xf00, y)
success := and(validate_ec_point(x, y), success)
}
{
let x := mload(0x20)
x := add(x, shl(88, mload(0x40)))
x := add(x, shl(176, mload(0x60)))
mstore(3872, x)
let y := mload(0x80)
y := add(y, shl(88, mload(0xa0)))
y := add(y, shl(176, mload(0xc0)))
mstore(3904, y)
success := and(validate_ec_point(x, y), success)
}
{
let x := mload(0xe0)
x := add(x, shl(88, mload(0x100)))
x := add(x, shl(176, mload(0x120)))
mstore(3936, x)
let y := mload(0x140)
y := add(y, shl(88, mload(0x160)))
y := add(y, shl(176, mload(0x180)))
mstore(3968, y)
success := and(validate_ec_point(x, y), success)
}
mstore(0xfa0, mulmod(mload(0xae0), mload(0xae0), f_q))
mstore(0xfc0, mulmod(mload(0xfa0), mload(0xfa0), f_q))
mstore(0xfe0, mulmod(mload(0xfc0), mload(0xfc0), f_q))
mstore(0x1000, mulmod(mload(0xfe0), mload(0xfe0), f_q))
mstore(0x1020, mulmod(mload(0x1000), mload(0x1000), f_q))
mstore(0x1040, mulmod(mload(0x1020), mload(0x1020), f_q))
mstore(0x1060, mulmod(mload(0x1040), mload(0x1040), f_q))
mstore(0x1080, mulmod(mload(0x1060), mload(0x1060), f_q))
mstore(0x10a0, mulmod(mload(0x1080), mload(0x1080), f_q))
mstore(0x10c0, mulmod(mload(0x10a0), mload(0x10a0), f_q))
mstore(0x10e0, mulmod(mload(0x10c0), mload(0x10c0), f_q))
mstore(0x1100, mulmod(mload(0x10e0), mload(0x10e0), f_q))
mstore(0x1120, mulmod(mload(0x1100), mload(0x1100), f_q))
mstore(0x1140, mulmod(mload(0x1120), mload(0x1120), f_q))
mstore(0x1160, mulmod(mload(0x1140), mload(0x1140), f_q))
mstore(0x1180, mulmod(mload(0x1160), mload(0x1160), f_q))
mstore(0x11a0, mulmod(mload(0x1180), mload(0x1180), f_q))
mstore(0x11c0, mulmod(mload(0x11a0), mload(0x11a0), f_q))
mstore(0x11e0, mulmod(mload(0x11c0), mload(0x11c0), f_q))
mstore(0x1200, mulmod(mload(0x11e0), mload(0x11e0), f_q))
mstore(0x1220, mulmod(mload(0x1200), mload(0x1200), f_q))
mstore(0x1240, mulmod(mload(0x1220), mload(0x1220), f_q))
mstore(0x1260, mulmod(mload(0x1240), mload(0x1240), f_q))
mstore(0x1280, addmod(mload(0x1260), 21888242871839275222246405745257275088548364400416034343698204186575808495616, f_q))
mstore(0x12a0, mulmod(mload(0x1280), 21888240262557392955334514970720457388010314637169927192662615958087340972065, f_q))
mstore(0x12c0, mulmod(mload(0x12a0), 4506835738822104338668100540817374747935106310012997856968187171738630203507, f_q))
mstore(0x12e0, addmod(mload(0xae0), 17381407133017170883578305204439900340613258090403036486730017014837178292110, f_q))
mstore(0x1300, mulmod(mload(0x12a0), 21710372849001950800533397158415938114909991150039389063546734567764856596059, f_q))
mstore(0x1320, addmod(mload(0xae0), 177870022837324421713008586841336973638373250376645280151469618810951899558, f_q))
mstore(0x1340, mulmod(mload(0x12a0), 1887003188133998471169152042388914354640772748308168868301418279904560637395, f_q))
mstore(0x1360, addmod(mload(0xae0), 20001239683705276751077253702868360733907591652107865475396785906671247858222, f_q))
mstore(0x1380, mulmod(mload(0x12a0), 2785514556381676080176937710880804108647911392478702105860685610379369825016, f_q))
mstore(0x13a0, addmod(mload(0xae0), 19102728315457599142069468034376470979900453007937332237837518576196438670601, f_q))
mstore(0x13c0, mulmod(mload(0x12a0), 14655294445420895451632927078981340937842238432098198055057679026789553137428, f_q))
mstore(0x13e0, addmod(mload(0xae0), 7232948426418379770613478666275934150706125968317836288640525159786255358189, f_q))
mstore(0x1400, mulmod(mload(0x12a0), 8734126352828345679573237859165904705806588461301144420590422589042130041188, f_q))
mstore(0x1420, addmod(mload(0xae0), 13154116519010929542673167886091370382741775939114889923107781597533678454429, f_q))
mstore(0x1440, mulmod(mload(0x12a0), 9741553891420464328295280489650144566903017206473301385034033384879943874347, f_q))
mstore(0x1460, addmod(mload(0xae0), 12146688980418810893951125255607130521645347193942732958664170801695864621270, f_q))
mstore(0x1480, mulmod(mload(0x12a0), 1, f_q))
mstore(0x14a0, addmod(mload(0xae0), 21888242871839275222246405745257275088548364400416034343698204186575808495616, f_q))
mstore(0x14c0, mulmod(mload(0x12a0), 8374374965308410102411073611984011876711565317741801500439755773472076597347, f_q))
mstore(0x14e0, addmod(mload(0xae0), 13513867906530865119835332133273263211836799082674232843258448413103731898270, f_q))
mstore(0x1500, mulmod(mload(0x12a0), 11211301017135681023579411905410872569206244553457844956874280139879520583390, f_q))
mstore(0x1520, addmod(mload(0xae0), 10676941854703594198666993839846402519342119846958189386823924046696287912227, f_q))
mstore(0x1540, mulmod(mload(0x12a0), 3615478808282855240548287271348143516886772452944084747768312988864436725401, f_q))
mstore(0x1560, addmod(mload(0xae0), 18272764063556419981698118473909131571661591947471949595929891197711371770216, f_q))
mstore(0x1580, mulmod(mload(0x12a0), 1426404432721484388505361748317961535523355871255605456897797744433766488507, f_q))
mstore(0x15a0, addmod(mload(0xae0), 20461838439117790833741043996939313553025008529160428886800406442142042007110, f_q))
mstore(0x15c0, mulmod(mload(0x12a0), 216092043779272773661818549620449970334216366264741118684015851799902419467, f_q))
mstore(0x15e0, addmod(mload(0xae0), 21672150828060002448584587195636825118214148034151293225014188334775906076150, f_q))
mstore(0x1600, mulmod(mload(0x12a0), 12619617507853212586156872920672483948819476989779550311307282715684870266992, f_q))
mstore(0x1620, addmod(mload(0xae0), 9268625363986062636089532824584791139728887410636484032390921470890938228625, f_q))
mstore(0x1640, mulmod(mload(0x12a0), 18610195890048912503953886742825279624920778288956610528523679659246523534888, f_q))
mstore(0x1660, addmod(mload(0xae0), 3278046981790362718292519002431995463627586111459423815174524527329284960729, f_q))
mstore(0x1680, mulmod(mload(0x12a0), 19032961837237948602743626455740240236231119053033140765040043513661803148152, f_q))
mstore(0x16a0, addmod(mload(0xae0), 2855281034601326619502779289517034852317245347382893578658160672914005347465, f_q))
mstore(0x16c0, mulmod(mload(0x12a0), 14875928112196239563830800280253496262679717528621719058794366823499719730250, f_q))
mstore(0x16e0, addmod(mload(0xae0), 7012314759643035658415605465003778825868646871794315284903837363076088765367, f_q))
mstore(0x1700, mulmod(mload(0x12a0), 915149353520972163646494413843788069594022902357002628455555785223409501882, f_q))
mstore(0x1720, addmod(mload(0xae0), 20973093518318303058599911331413487018954341498059031715242648401352398993735, f_q))
mstore(0x1740, mulmod(mload(0x12a0), 5522161504810533295870699551020523636289972223872138525048055197429246400245, f_q))
mstore(0x1760, addmod(mload(0xae0), 16366081367028741926375706194236751452258392176543895818650148989146562095372, f_q))
mstore(0x1780, mulmod(mload(0x12a0), 3766081621734395783232337525162072736827576297943013392955872170138036189193, f_q))
mstore(0x17a0, addmod(mload(0xae0), 18122161250104879439014068220095202351720788102473020950742332016437772306424, f_q))
mstore(0x17c0, mulmod(mload(0x12a0), 9100833993744738801214480881117348002768153232283708533639316963648253510584, f_q))
mstore(0x17e0, addmod(mload(0xae0), 12787408878094536421031924864139927085780211168132325810058887222927554985033, f_q))
mstore(0x1800, mulmod(mload(0x12a0), 4245441013247250116003069945606352967193023389718465410501109428393342802981, f_q))
mstore(0x1820, addmod(mload(0xae0), 17642801858592025106243335799650922121355341010697568933197094758182465692636, f_q))
mstore(0x1840, mulmod(mload(0x12a0), 6132660129994545119218258312491950835441607143741804980633129304664017206141, f_q))
mstore(0x1860, addmod(mload(0xae0), 15755582741844730103028147432765324253106757256674229363065074881911791289476, f_q))
mstore(0x1880, mulmod(mload(0x12a0), 5854133144571823792863860130267644613802765696134002830362054821530146160770, f_q))
mstore(0x18a0, addmod(mload(0xae0), 16034109727267451429382545614989630474745598704282031513336149365045662334847, f_q))
mstore(0x18c0, mulmod(mload(0x12a0), 515148244606945972463850631189471072103916690263705052318085725998468254533, f_q))
mstore(0x18e0, addmod(mload(0xae0), 21373094627232329249782555114067804016444447710152329291380118460577340241084, f_q))
mstore(0x1900, mulmod(mload(0x12a0), 5980488956150442207659150513163747165544364597008566989111579977672498964212, f_q))
mstore(0x1920, addmod(mload(0xae0), 15907753915688833014587255232093527923003999803407467354586624208903309531405, f_q))
mstore(0x1940, mulmod(mload(0x12a0), 5223738580615264174925218065001555728265216895679471490312087802465486318994, f_q))
mstore(0x1960, addmod(mload(0xae0), 16664504291224011047321187680255719360283147504736562853386116384110322176623, f_q))
mstore(0x1980, mulmod(mload(0x12a0), 14557038802599140430182096396825290815503940951075961210638273254419942783582, f_q))
mstore(0x19a0, addmod(mload(0xae0), 7331204069240134792064309348431984273044423449340073133059930932155865712035, f_q))
mstore(0x19c0, mulmod(mload(0x12a0), 16976236069879939850923145256911338076234942200101755618884183331004076579046, f_q))
mstore(0x19e0, addmod(mload(0xae0), 4912006801959335371323260488345937012313422200314278724814020855571731916571, f_q))
mstore(0x1a00, mulmod(mload(0x12a0), 13553911191894110065493137367144919847521088405945523452288398666974237857208, f_q))
mstore(0x1a20, addmod(mload(0xae0), 8334331679945165156753268378112355241027275994470510891409805519601570638409, f_q))
mstore(0x1a40, mulmod(mload(0x12a0), 12222687719926148270818604386979005738180875192307070468454582955273533101023, f_q))
mstore(0x1a60, addmod(mload(0xae0), 9665555151913126951427801358278269350367489208108963875243621231302275394594, f_q))
mstore(0x1a80, mulmod(mload(0x12a0), 9697063347556872083384215826199993067635178715531258559890418744774301211662, f_q))
mstore(0x1aa0, addmod(mload(0xae0), 12191179524282403138862189919057282020913185684884775783807785441801507283955, f_q))
mstore(0x1ac0, mulmod(mload(0x12a0), 13783318220968413117070077848579881425001701814458176881760898225529300547844, f_q))
mstore(0x1ae0, addmod(mload(0xae0), 8104924650870862105176327896677393663546662585957857461937305961046507947773, f_q))
mstore(0x1b00, mulmod(mload(0x12a0), 10807735674816066981985242612061336605021639643453679977988966079770672437131, f_q))
mstore(0x1b20, addmod(mload(0xae0), 11080507197023208240261163133195938483526724756962354365709238106805136058486, f_q))
mstore(0x1b40, mulmod(mload(0x12a0), 15487660954688013862248478071816391715224351867581977083810729441220383572585, f_q))
mstore(0x1b60, addmod(mload(0xae0), 6400581917151261359997927673440883373324012532834057259887474745355424923032, f_q))
mstore(0x1b80, mulmod(mload(0x12a0), 12459868075641381822485233712013080087763946065665469821362892189399541605692, f_q))
mstore(0x1ba0, addmod(mload(0xae0), 9428374796197893399761172033244195000784418334750564522335311997176266889925, f_q))
mstore(0x1bc0, mulmod(mload(0x12a0), 12562571400845953139885120066983392294851269266041089223701347829190217414825, f_q))
mstore(0x1be0, addmod(mload(0xae0), 9325671470993322082361285678273882793697095134374945119996856357385591080792, f_q))
mstore(0x1c00, mulmod(mload(0x12a0), 16038300751658239075779628684257016433412502747804121525056508685985277092575, f_q))
mstore(0x1c20, addmod(mload(0xae0), 5849942120181036146466777061000258655135861652611912818641695500590531403042, f_q))
mstore(0x1c40, mulmod(mload(0x12a0), 17665522928519859765452767154433594409738037332395989540221744312194874941704, f_q))
mstore(0x1c60, addmod(mload(0xae0), 4222719943319415456793638590823680678810327068020044803476459874380933553913, f_q))
mstore(0x1c80, mulmod(mload(0x12a0), 6955697244493336113861667751840378876927906302623587437721024018233754910398, f_q))
mstore(0x1ca0, addmod(mload(0xae0), 14932545627345939108384737993416896211620458097792446905977180168342053585219, f_q))
mstore(0x1cc0, mulmod(mload(0x12a0), 1918679275621049296283934091410967415474987212511681231948800935495808101054, f_q))
mstore(0x1ce0, addmod(mload(0xae0), 19969563596218225925962471653846307673073377187904353111749403251080000394563, f_q))
mstore(0x1d00, mulmod(mload(0x12a0), 13498745591877810872211159461644682954739332524336278910448604883789771736885, f_q))
mstore(0x1d20, addmod(mload(0xae0), 8389497279961464350035246283612592133809031876079755433249599302786036758732, f_q))
mstore(0x1d40, mulmod(mload(0x12a0), 6604851689411953560355663038203889299997924520355363678860500374111951937637, f_q))
mstore(0x1d60, addmod(mload(0xae0), 15283391182427321661890742707053385788550439880060670664837703812463856557980, f_q))
mstore(0x1d80, mulmod(mload(0x12a0), 20345677989844117909528750049476969581182118546166966482506114734614108237981, f_q))
mstore(0x1da0, addmod(mload(0xae0), 1542564881995157312717655695780305507366245854249067861192089451961700257636, f_q))
mstore(0x1dc0, mulmod(mload(0x12a0), 11244009323710436498447061620026171700033960328162115124806024297270121927878, f_q))
mstore(0x1de0, addmod(mload(0xae0), 10644233548128838723799344125231103388514404072253919218892179889305686567739, f_q))
mstore(0x1e00, mulmod(mload(0x12a0), 790608022292213379425324383664216541739009722347092850716054055768832299157, f_q))
mstore(0x1e20, addmod(mload(0xae0), 21097634849547061842821081361593058546809354678068941492982150130806976196460, f_q))
mstore(0x1e40, mulmod(mload(0x12a0), 13894403229372218245111098554468346933152618215322268934207074514797092422856, f_q))
mstore(0x1e60, addmod(mload(0xae0), 7993839642467056977135307190788928155395746185093765409491129671778716072761, f_q))
mstore(0x1e80, mulmod(mload(0x12a0), 5289443209903185443361862148540090689648485914368835830972895623576469023722, f_q))
mstore(0x1ea0, addmod(mload(0xae0), 16598799661936089778884543596717184398899878486047198512725308562999339471895, f_q))
mstore(0x1ec0, mulmod(mload(0x12a0), 19715528266218439644661892824912275086257866064695767122686506494361332681035, f_q))
mstore(0x1ee0, addmod(mload(0xae0), 2172714605620835577584512920345000002290498335720267221011697692214475814582, f_q))
mstore(0x1f00, mulmod(mload(0x12a0), 15161189183906287273290738379431332336600234154579306802151507052820126345529, f_q))
mstore(0x1f20, addmod(mload(0xae0), 6727053687932987948955667365825942751948130245836727541546697133755682150088, f_q))
mstore(0x1f40, mulmod(mload(0x12a0), 12456424076401232823832128238027368612265814450984711658287606686035629293382, f_q))
mstore(0x1f60, addmod(mload(0xae0), 9431818795438042398414277507229906476282549949431322685410597500540179202235, f_q))
mstore(0x1f80, mulmod(mload(0x12a0), 557567375339945239933617516585967620814823575807691402619711360028043331811, f_q))
mstore(0x1fa0, addmod(mload(0xae0), 21330675496499329982312788228671307467733540824608342941078492826547765163806, f_q))
mstore(0x1fc0, mulmod(mload(0x12a0), 3675353143102618619098608207619541954347747556257261634661810167705798540391, f_q))
mstore(0x1fe0, addmod(mload(0xae0), 18212889728736656603147797537637733134200616844158772709036394018870009955226, f_q))
mstore(0x2000, mulmod(mload(0x12a0), 16611719114775828483319365659907682366622074960672212059891361227499450055959, f_q))
mstore(0x2020, addmod(mload(0xae0), 5276523757063446738927040085349592721926289439743822283806842959076358439658, f_q))
mstore(0x2040, mulmod(mload(0x12a0), 16386136101309958540926610099404767784529741901845901994660986029617143477017, f_q))
mstore(0x2060, addmod(mload(0xae0), 5502106770529316681319795645852507304018622498570132349037218156958665018600, f_q))
mstore(0x2080, mulmod(mload(0x12a0), 4509404676247677387317362072810231899718070082381452255950861037254608304934, f_q))
mstore(0x20a0, addmod(mload(0xae0), 17378838195591597834929043672447043188830294318034582087747343149321200190683, f_q))
mstore(0x20c0, mulmod(mload(0x12a0), 16810138474166795540944740696920121481076613636731046381068745586671284628566, f_q))
mstore(0x20e0, addmod(mload(0xae0), 5078104397672479681301665048337153607471750763684987962629458599904523867051, f_q))
mstore(0x2100, mulmod(mload(0x12a0), 6866457077948847028333856457654941632900463970069876241424363695212127143359, f_q))
mstore(0x2120, addmod(mload(0xae0), 15021785793890428193912549287602333455647900430346158102273840491363681352258, f_q))
mstore(0x2140, mulmod(mload(0x12a0), 15050098906272869114113753879341673724544293065073132019915594147673843274264, f_q))
mstore(0x2160, addmod(mload(0xae0), 6838143965566406108132651865915601364004071335342902323782610038901965221353, f_q))
mstore(0x2180, mulmod(mload(0x12a0), 20169013865622130318472103510465966222180994822334426398191891983290742724178, f_q))
mstore(0x21a0, addmod(mload(0xae0), 1719229006217144903774302234791308866367369578081607945506312203285065771439, f_q))
{
let prod := mload(0x12e0)
prod := mulmod(mload(0x1320), prod, f_q)
mstore(0x21c0, prod)
prod := mulmod(mload(0x1360), prod, f_q)
mstore(0x21e0, prod)
prod := mulmod(mload(0x13a0), prod, f_q)
mstore(0x2200, prod)
prod := mulmod(mload(0x13e0), prod, f_q)
mstore(0x2220, prod)
prod := mulmod(mload(0x1420), prod, f_q)
mstore(0x2240, prod)
prod := mulmod(mload(0x1460), prod, f_q)
mstore(0x2260, prod)
prod := mulmod(mload(0x14a0), prod, f_q)
mstore(0x2280, prod)
prod := mulmod(mload(0x14e0), prod, f_q)
mstore(0x22a0, prod)
prod := mulmod(mload(0x1520), prod, f_q)
mstore(0x22c0, prod)
prod := mulmod(mload(0x1560), prod, f_q)
mstore(0x22e0, prod)
prod := mulmod(mload(0x15a0), prod, f_q)
mstore(0x2300, prod)
prod := mulmod(mload(0x15e0), prod, f_q)
mstore(0x2320, prod)
prod := mulmod(mload(0x1620), prod, f_q)
mstore(0x2340, prod)
prod := mulmod(mload(0x1660), prod, f_q)
mstore(0x2360, prod)
prod := mulmod(mload(0x16a0), prod, f_q)
mstore(0x2380, prod)
prod := mulmod(mload(0x16e0), prod, f_q)
mstore(0x23a0, prod)
prod := mulmod(mload(0x1720), prod, f_q)
mstore(0x23c0, prod)
prod := mulmod(mload(0x1760), prod, f_q)
mstore(0x23e0, prod)
prod := mulmod(mload(0x17a0), prod, f_q)
mstore(0x2400, prod)
prod := mulmod(mload(0x17e0), prod, f_q)
mstore(0x2420, prod)
prod := mulmod(mload(0x1820), prod, f_q)
mstore(0x2440, prod)
prod := mulmod(mload(0x1860), prod, f_q)
mstore(0x2460, prod)
prod := mulmod(mload(0x18a0), prod, f_q)
mstore(0x2480, prod)
prod := mulmod(mload(0x18e0), prod, f_q)
mstore(0x24a0, prod)
prod := mulmod(mload(0x1920), prod, f_q)
mstore(0x24c0, prod)
prod := mulmod(mload(0x1960), prod, f_q)
mstore(0x24e0, prod)
prod := mulmod(mload(0x19a0), prod, f_q)
mstore(0x2500, prod)
prod := mulmod(mload(0x19e0), prod, f_q)
mstore(0x2520, prod)
prod := mulmod(mload(0x1a20), prod, f_q)
mstore(0x2540, prod)
prod := mulmod(mload(0x1a60), prod, f_q)
mstore(0x2560, prod)
prod := mulmod(mload(0x1aa0), prod, f_q)
mstore(0x2580, prod)
prod := mulmod(mload(0x1ae0), prod, f_q)
mstore(0x25a0, prod)
prod := mulmod(mload(0x1b20), prod, f_q)
mstore(0x25c0, prod)
prod := mulmod(mload(0x1b60), prod, f_q)
mstore(0x25e0, prod)
prod := mulmod(mload(0x1ba0), prod, f_q)
mstore(0x2600, prod)
prod := mulmod(mload(0x1be0), prod, f_q)
mstore(0x2620, prod)
prod := mulmod(mload(0x1c20), prod, f_q)
mstore(0x2640, prod)
prod := mulmod(mload(0x1c60), prod, f_q)
mstore(0x2660, prod)
prod := mulmod(mload(0x1ca0), prod, f_q)
mstore(0x2680, prod)
prod := mulmod(mload(0x1ce0), prod, f_q)
mstore(0x26a0, prod)
prod := mulmod(mload(0x1d20), prod, f_q)
mstore(0x26c0, prod)
prod := mulmod(mload(0x1d60), prod, f_q)
mstore(0x26e0, prod)
prod := mulmod(mload(0x1da0), prod, f_q)
mstore(0x2700, prod)
prod := mulmod(mload(0x1de0), prod, f_q)
mstore(0x2720, prod)
prod := mulmod(mload(0x1e20), prod, f_q)
mstore(0x2740, prod)
prod := mulmod(mload(0x1e60), prod, f_q)
mstore(0x2760, prod)
prod := mulmod(mload(0x1ea0), prod, f_q)
mstore(0x2780, prod)
prod := mulmod(mload(0x1ee0), prod, f_q)
mstore(0x27a0, prod)
prod := mulmod(mload(0x1f20), prod, f_q)
mstore(0x27c0, prod)
prod := mulmod(mload(0x1f60), prod, f_q)
mstore(0x27e0, prod)
prod := mulmod(mload(0x1fa0), prod, f_q)
mstore(0x2800, prod)
prod := mulmod(mload(0x1fe0), prod, f_q)
mstore(0x2820, prod)
prod := mulmod(mload(0x2020), prod, f_q)
mstore(0x2840, prod)
prod := mulmod(mload(0x2060), prod, f_q)
mstore(0x2860, prod)
prod := mulmod(mload(0x20a0), prod, f_q)
mstore(0x2880, prod)
prod := mulmod(mload(0x20e0), prod, f_q)
mstore(0x28a0, prod)
prod := mulmod(mload(0x2120), prod, f_q)
mstore(0x28c0, prod)
prod := mulmod(mload(0x2160), prod, f_q)
mstore(0x28e0, prod)
prod := mulmod(mload(0x21a0), prod, f_q)
mstore(0x2900, prod)
prod := mulmod(mload(0x1280), prod, f_q)
mstore(0x2920, prod)
}
mstore(0x2960, 32)
mstore(0x2980, 32)
mstore(0x29a0, 32)
mstore(0x29c0, mload(0x2920))
mstore(0x29e0, 21888242871839275222246405745257275088548364400416034343698204186575808495615)
mstore(0x2a00, 21888242871839275222246405745257275088548364400416034343698204186575808495617)
success := and(eq(staticcall(gas(), 0x5, 0x2960, 0xc0, 0x2940, 0x20), 1), success)
{
let inv := mload(0x2940)
let v
v := mload(0x1280)
mstore(4736, mulmod(mload(0x2900), inv, f_q))
inv := mulmod(v, inv, f_q)
v := mload(0x21a0)
mstore(8608, mulmod(mload(0x28e0), inv, f_q))
inv := mulmod(v, inv, f_q)
v := mload(0x2160)
mstore(8544, mulmod(mload(0x28c0), inv, f_q))
inv := mulmod(v, inv, f_q)
v := mload(0x2120)
mstore(8480, mulmod(mload(0x28a0), inv, f_q))
inv := mulmod(v, inv, f_q)
v := mload(0x20e0)
mstore(8416, mulmod(mload(0x2880), inv, f_q))
inv := mulmod(v, inv, f_q)
v := mload(0x20a0)
mstore(8352, mulmod(mload(0x2860), inv, f_q))
inv := mulmod(v, inv, f_q)
v := mload(0x2060)
mstore(8288, mulmod(mload(0x2840), inv, f_q))
inv := mulmod(v, inv, f_q)
v := mload(0x2020)
mstore(8224, mulmod(mload(0x2820), inv, f_q))
inv := mulmod(v, inv, f_q)
v := mload(0x1fe0)
mstore(8160, mulmod(mload(0x2800), inv, f_q))
inv := mulmod(v, inv, f_q)
v := mload(0x1fa0)
mstore(8096, mulmod(mload(0x27e0), inv, f_q))
inv := mulmod(v, inv, f_q)
v := mload(0x1f60)
mstore(8032, mulmod(mload(0x27c0), inv, f_q))
inv := mulmod(v, inv, f_q)
v := mload(0x1f20)
mstore(7968, mulmod(mload(0x27a0), inv, f_q))
inv := mulmod(v, inv, f_q)
v := mload(0x1ee0)
mstore(7904, mulmod(mload(0x2780), inv, f_q))
inv := mulmod(v, inv, f_q)
v := mload(0x1ea0)
mstore(7840, mulmod(mload(0x2760), inv, f_q))
inv := mulmod(v, inv, f_q)
v := mload(0x1e60)
mstore(7776, mulmod(mload(0x2740), inv, f_q))
inv := mulmod(v, inv, f_q)
v := mload(0x1e20)
mstore(7712, mulmod(mload(0x2720), inv, f_q))
inv := mulmod(v, inv, f_q)
v := mload(0x1de0)
mstore(7648, mulmod(mload(0x2700), inv, f_q))
inv := mulmod(v, inv, f_q)
v := mload(0x1da0)
mstore(7584, mulmod(mload(0x26e0), inv, f_q))
inv := mulmod(v, inv, f_q)
v := mload(0x1d60)
mstore(7520, mulmod(mload(0x26c0), inv, f_q))
inv := mulmod(v, inv, f_q)
v := mload(0x1d20)
mstore(7456, mulmod(mload(0x26a0), inv, f_q))
inv := mulmod(v, inv, f_q)
v := mload(0x1ce0)
mstore(7392, mulmod(mload(0x2680), inv, f_q))
inv := mulmod(v, inv, f_q)
v := mload(0x1ca0)
mstore(7328, mulmod(mload(0x2660), inv, f_q))
inv := mulmod(v, inv, f_q)
v := mload(0x1c60)
mstore(7264, mulmod(mload(0x2640), inv, f_q))
inv := mulmod(v, inv, f_q)
v := mload(0x1c20)
mstore(7200, mulmod(mload(0x2620), inv, f_q))
inv := mulmod(v, inv, f_q)
v := mload(0x1be0)
mstore(7136, mulmod(mload(0x2600), inv, f_q))
inv := mulmod(v, inv, f_q)
v := mload(0x1ba0)
mstore(7072, mulmod(mload(0x25e0), inv, f_q))
inv := mulmod(v, inv, f_q)
v := mload(0x1b60)
mstore(7008, mulmod(mload(0x25c0), inv, f_q))
inv := mulmod(v, inv, f_q)
v := mload(0x1b20)
mstore(6944, mulmod(mload(0x25a0), inv, f_q))
inv := mulmod(v, inv, f_q)
v := mload(0x1ae0)
mstore(6880, mulmod(mload(0x2580), inv, f_q))
inv := mulmod(v, inv, f_q)
v := mload(0x1aa0)
mstore(6816, mulmod(mload(0x2560), inv, f_q))
inv := mulmod(v, inv, f_q)
v := mload(0x1a60)
mstore(6752, mulmod(mload(0x2540), inv, f_q))
inv := mulmod(v, inv, f_q)
v := mload(0x1a20)
mstore(6688, mulmod(mload(0x2520), inv, f_q))
inv := mulmod(v, inv, f_q)
v := mload(0x19e0)
mstore(6624, mulmod(mload(0x2500), inv, f_q))
inv := mulmod(v, inv, f_q)
v := mload(0x19a0)
mstore(6560, mulmod(mload(0x24e0), inv, f_q))
inv := mulmod(v, inv, f_q)
v := mload(0x1960)
mstore(6496, mulmod(mload(0x24c0), inv, f_q))
inv := mulmod(v, inv, f_q)
v := mload(0x1920)
mstore(6432, mulmod(mload(0x24a0), inv, f_q))
inv := mulmod(v, inv, f_q)
v := mload(0x18e0)
mstore(6368, mulmod(mload(0x2480), inv, f_q))
inv := mulmod(v, inv, f_q)
v := mload(0x18a0)
mstore(6304, mulmod(mload(0x2460), inv, f_q))
inv := mulmod(v, inv, f_q)
v := mload(0x1860)
mstore(6240, mulmod(mload(0x2440), inv, f_q))
inv := mulmod(v, inv, f_q)
v := mload(0x1820)
mstore(6176, mulmod(mload(0x2420), inv, f_q))
inv := mulmod(v, inv, f_q)
v := mload(0x17e0)
mstore(6112, mulmod(mload(0x2400), inv, f_q))
inv := mulmod(v, inv, f_q)
v := mload(0x17a0)
mstore(6048, mulmod(mload(0x23e0), inv, f_q))
inv := mulmod(v, inv, f_q)
v := mload(0x1760)
mstore(5984, mulmod(mload(0x23c0), inv, f_q))
inv := mulmod(v, inv, f_q)
v := mload(0x1720)
mstore(5920, mulmod(mload(0x23a0), inv, f_q))
inv := mulmod(v, inv, f_q)
v := mload(0x16e0)
mstore(5856, mulmod(mload(0x2380), inv, f_q))
inv := mulmod(v, inv, f_q)
v := mload(0x16a0)
mstore(5792, mulmod(mload(0x2360), inv, f_q))
inv := mulmod(v, inv, f_q)
v := mload(0x1660)
mstore(5728, mulmod(mload(0x2340), inv, f_q))
inv := mulmod(v, inv, f_q)
v := mload(0x1620)
mstore(5664, mulmod(mload(0x2320), inv, f_q))
inv := mulmod(v, inv, f_q)
v := mload(0x15e0)
mstore(5600, mulmod(mload(0x2300), inv, f_q))
inv := mulmod(v, inv, f_q)
v := mload(0x15a0)
mstore(5536, mulmod(mload(0x22e0), inv, f_q))
inv := mulmod(v, inv, f_q)
v := mload(0x1560)
mstore(5472, mulmod(mload(0x22c0), inv, f_q))
inv := mulmod(v, inv, f_q)
v := mload(0x1520)
mstore(5408, mulmod(mload(0x22a0), inv, f_q))
inv := mulmod(v, inv, f_q)
v := mload(0x14e0)
mstore(5344, mulmod(mload(0x2280), inv, f_q))
inv := mulmod(v, inv, f_q)
v := mload(0x14a0)
mstore(5280, mulmod(mload(0x2260), inv, f_q))
inv := mulmod(v, inv, f_q)
v := mload(0x1460)
mstore(5216, mulmod(mload(0x2240), inv, f_q))
inv := mulmod(v, inv, f_q)
v := mload(0x1420)
mstore(5152, mulmod(mload(0x2220), inv, f_q))
inv := mulmod(v, inv, f_q)
v := mload(0x13e0)
mstore(5088, mulmod(mload(0x2200), inv, f_q))
inv := mulmod(v, inv, f_q)
v := mload(0x13a0)
mstore(5024, mulmod(mload(0x21e0), inv, f_q))
inv := mulmod(v, inv, f_q)
v := mload(0x1360)
mstore(4960, mulmod(mload(0x21c0), inv, f_q))
inv := mulmod(v, inv, f_q)
v := mload(0x1320)
mstore(4896, mulmod(mload(0x12e0), inv, f_q))
inv := mulmod(v, inv, f_q)
mstore(0x12e0, inv)
}
mstore(0x2a20, mulmod(mload(0x12c0), mload(0x12e0), f_q))
mstore(0x2a40, mulmod(mload(0x1300), mload(0x1320), f_q))
mstore(0x2a60, mulmod(mload(0x1340), mload(0x1360), f_q))
mstore(0x2a80, mulmod(mload(0x1380), mload(0x13a0), f_q))
mstore(0x2aa0, mulmod(mload(0x13c0), mload(0x13e0), f_q))
mstore(0x2ac0, mulmod(mload(0x1400), mload(0x1420), f_q))
mstore(0x2ae0, mulmod(mload(0x1440), mload(0x1460), f_q))
mstore(0x2b00, mulmod(mload(0x1480), mload(0x14a0), f_q))
mstore(0x2b20, mulmod(mload(0x14c0), mload(0x14e0), f_q))
mstore(0x2b40, mulmod(mload(0x1500), mload(0x1520), f_q))
mstore(0x2b60, mulmod(mload(0x1540), mload(0x1560), f_q))
mstore(0x2b80, mulmod(mload(0x1580), mload(0x15a0), f_q))
mstore(0x2ba0, mulmod(mload(0x15c0), mload(0x15e0), f_q))
mstore(0x2bc0, mulmod(mload(0x1600), mload(0x1620), f_q))
mstore(0x2be0, mulmod(mload(0x1640), mload(0x1660), f_q))
mstore(0x2c00, mulmod(mload(0x1680), mload(0x16a0), f_q))
mstore(0x2c20, mulmod(mload(0x16c0), mload(0x16e0), f_q))
mstore(0x2c40, mulmod(mload(0x1700), mload(0x1720), f_q))
mstore(0x2c60, mulmod(mload(0x1740), mload(0x1760), f_q))
mstore(0x2c80, mulmod(mload(0x1780), mload(0x17a0), f_q))
mstore(0x2ca0, mulmod(mload(0x17c0), mload(0x17e0), f_q))
mstore(0x2cc0, mulmod(mload(0x1800), mload(0x1820), f_q))
mstore(0x2ce0, mulmod(mload(0x1840), mload(0x1860), f_q))
mstore(0x2d00, mulmod(mload(0x1880), mload(0x18a0), f_q))
mstore(0x2d20, mulmod(mload(0x18c0), mload(0x18e0), f_q))
mstore(0x2d40, mulmod(mload(0x1900), mload(0x1920), f_q))
mstore(0x2d60, mulmod(mload(0x1940), mload(0x1960), f_q))
mstore(0x2d80, mulmod(mload(0x1980), mload(0x19a0), f_q))
mstore(0x2da0, mulmod(mload(0x19c0), mload(0x19e0), f_q))
mstore(0x2dc0, mulmod(mload(0x1a00), mload(0x1a20), f_q))
mstore(0x2de0, mulmod(mload(0x1a40), mload(0x1a60), f_q))
mstore(0x2e00, mulmod(mload(0x1a80), mload(0x1aa0), f_q))
mstore(0x2e20, mulmod(mload(0x1ac0), mload(0x1ae0), f_q))
mstore(0x2e40, mulmod(mload(0x1b00), mload(0x1b20), f_q))
mstore(0x2e60, mulmod(mload(0x1b40), mload(0x1b60), f_q))
mstore(0x2e80, mulmod(mload(0x1b80), mload(0x1ba0), f_q))
mstore(0x2ea0, mulmod(mload(0x1bc0), mload(0x1be0), f_q))
mstore(0x2ec0, mulmod(mload(0x1c00), mload(0x1c20), f_q))
mstore(0x2ee0, mulmod(mload(0x1c40), mload(0x1c60), f_q))
mstore(0x2f00, mulmod(mload(0x1c80), mload(0x1ca0), f_q))
mstore(0x2f20, mulmod(mload(0x1cc0), mload(0x1ce0), f_q))
mstore(0x2f40, mulmod(mload(0x1d00), mload(0x1d20), f_q))
mstore(0x2f60, mulmod(mload(0x1d40), mload(0x1d60), f_q))
mstore(0x2f80, mulmod(mload(0x1d80), mload(0x1da0), f_q))
mstore(0x2fa0, mulmod(mload(0x1dc0), mload(0x1de0), f_q))
mstore(0x2fc0, mulmod(mload(0x1e00), mload(0x1e20), f_q))
mstore(0x2fe0, mulmod(mload(0x1e40), mload(0x1e60), f_q))
mstore(0x3000, mulmod(mload(0x1e80), mload(0x1ea0), f_q))
mstore(0x3020, mulmod(mload(0x1ec0), mload(0x1ee0), f_q))
mstore(0x3040, mulmod(mload(0x1f00), mload(0x1f20), f_q))
mstore(0x3060, mulmod(mload(0x1f40), mload(0x1f60), f_q))
mstore(0x3080, mulmod(mload(0x1f80), mload(0x1fa0), f_q))
mstore(0x30a0, mulmod(mload(0x1fc0), mload(0x1fe0), f_q))
mstore(0x30c0, mulmod(mload(0x2000), mload(0x2020), f_q))
mstore(0x30e0, mulmod(mload(0x2040), mload(0x2060), f_q))
mstore(0x3100, mulmod(mload(0x2080), mload(0x20a0), f_q))
mstore(0x3120, mulmod(mload(0x20c0), mload(0x20e0), f_q))
mstore(0x3140, mulmod(mload(0x2100), mload(0x2120), f_q))
mstore(0x3160, mulmod(mload(0x2140), mload(0x2160), f_q))
mstore(0x3180, mulmod(mload(0x2180), mload(0x21a0), f_q))
{
let result := mulmod(mload(0x2b00), mload(0x20), f_q)
result := addmod(mulmod(mload(0x2b20), mload(0x40), f_q), result, f_q)
result := addmod(mulmod(mload(0x2b40), mload(0x60), f_q), result, f_q)
result := addmod(mulmod(mload(0x2b60), mload(0x80), f_q), result, f_q)
result := addmod(mulmod(mload(0x2b80), mload(0xa0), f_q), result, f_q)
result := addmod(mulmod(mload(0x2ba0), mload(0xc0), f_q), result, f_q)
result := addmod(mulmod(mload(0x2bc0), mload(0xe0), f_q), result, f_q)
result := addmod(mulmod(mload(0x2be0), mload(0x100), f_q), result, f_q)
result := addmod(mulmod(mload(0x2c00), mload(0x120), f_q), result, f_q)
result := addmod(mulmod(mload(0x2c20), mload(0x140), f_q), result, f_q)
result := addmod(mulmod(mload(0x2c40), mload(0x160), f_q), result, f_q)
result := addmod(mulmod(mload(0x2c60), mload(0x180), f_q), result, f_q)
result := addmod(mulmod(mload(0x2c80), mload(0x1a0), f_q), result, f_q)
result := addmod(mulmod(mload(0x2ca0), mload(0x1c0), f_q), result, f_q)
result := addmod(mulmod(mload(0x2cc0), mload(0x1e0), f_q), result, f_q)
result := addmod(mulmod(mload(0x2ce0), mload(0x200), f_q), result, f_q)
result := addmod(mulmod(mload(0x2d00), mload(0x220), f_q), result, f_q)
result := addmod(mulmod(mload(0x2d20), mload(0x240), f_q), result, f_q)
result := addmod(mulmod(mload(0x2d40), mload(0x260), f_q), result, f_q)
result := addmod(mulmod(mload(0x2d60), mload(0x280), f_q), result, f_q)
result := addmod(mulmod(mload(0x2d80), mload(0x2a0), f_q), result, f_q)
result := addmod(mulmod(mload(0x2da0), mload(0x2c0), f_q), result, f_q)
result := addmod(mulmod(mload(0x2dc0), mload(0x2e0), f_q), result, f_q)
result := addmod(mulmod(mload(0x2de0), mload(0x300), f_q), result, f_q)
result := addmod(mulmod(mload(0x2e00), mload(0x320), f_q), result, f_q)
result := addmod(mulmod(mload(0x2e20), mload(0x340), f_q), result, f_q)
result := addmod(mulmod(mload(0x2e40), mload(0x360), f_q), result, f_q)
result := addmod(mulmod(mload(0x2e60), mload(0x380), f_q), result, f_q)
result := addmod(mulmod(mload(0x2e80), mload(0x3a0), f_q), result, f_q)
result := addmod(mulmod(mload(0x2ea0), mload(0x3c0), f_q), result, f_q)
result := addmod(mulmod(mload(0x2ec0), mload(0x3e0), f_q), result, f_q)
result := addmod(mulmod(mload(0x2ee0), mload(0x400), f_q), result, f_q)
result := addmod(mulmod(mload(0x2f00), mload(0x420), f_q), result, f_q)
result := addmod(mulmod(mload(0x2f20), mload(0x440), f_q), result, f_q)
result := addmod(mulmod(mload(0x2f40), mload(0x460), f_q), result, f_q)
result := addmod(mulmod(mload(0x2f60), mload(0x480), f_q), result, f_q)
result := addmod(mulmod(mload(0x2f80), mload(0x4a0), f_q), result, f_q)
result := addmod(mulmod(mload(0x2fa0), mload(0x4c0), f_q), result, f_q)
result := addmod(mulmod(mload(0x2fc0), mload(0x4e0), f_q), result, f_q)
result := addmod(mulmod(mload(0x2fe0), mload(0x500), f_q), result, f_q)
result := addmod(mulmod(mload(0x3000), mload(0x520), f_q), result, f_q)
result := addmod(mulmod(mload(0x3020), mload(0x540), f_q), result, f_q)
result := addmod(mulmod(mload(0x3040), mload(0x560), f_q), result, f_q)
result := addmod(mulmod(mload(0x3060), mload(0x580), f_q), result, f_q)
result := addmod(mulmod(mload(0x3080), mload(0x5a0), f_q), result, f_q)
result := addmod(mulmod(mload(0x30a0), mload(0x5c0), f_q), result, f_q)
result := addmod(mulmod(mload(0x30c0), mload(0x5e0), f_q), result, f_q)
result := addmod(mulmod(mload(0x30e0), mload(0x600), f_q), result, f_q)
result := addmod(mulmod(mload(0x3100), mload(0x620), f_q), result, f_q)
result := addmod(mulmod(mload(0x3120), mload(0x640), f_q), result, f_q)
result := addmod(mulmod(mload(0x3140), mload(0x660), f_q), result, f_q)
result := addmod(mulmod(mload(0x3160), mload(0x680), f_q), result, f_q)
result := addmod(mulmod(mload(0x3180), mload(0x6a0), f_q), result, f_q)
mstore(12704, result)
}
mstore(0x31c0, mulmod(mload(0xb60), mload(0xb40), f_q))
mstore(0x31e0, addmod(mload(0xb20), mload(0x31c0), f_q))
mstore(0x3200, addmod(mload(0x31e0), sub(f_q, mload(0xb80)), f_q))
mstore(0x3220, mulmod(mload(0x3200), mload(0xc00), f_q))
mstore(0x3240, mulmod(mload(0x980), mload(0x3220), f_q))
mstore(0x3260, addmod(1, sub(f_q, mload(0xca0)), f_q))
mstore(0x3280, mulmod(mload(0x3260), mload(0x2b00), f_q))
mstore(0x32a0, addmod(mload(0x3240), mload(0x3280), f_q))
mstore(0x32c0, mulmod(mload(0x980), mload(0x32a0), f_q))
mstore(0x32e0, mulmod(mload(0xca0), mload(0xca0), f_q))
mstore(0x3300, addmod(mload(0x32e0), sub(f_q, mload(0xca0)), f_q))
mstore(0x3320, mulmod(mload(0x3300), mload(0x2a20), f_q))
mstore(0x3340, addmod(mload(0x32c0), mload(0x3320), f_q))
mstore(0x3360, mulmod(mload(0x980), mload(0x3340), f_q))
mstore(0x3380, addmod(1, sub(f_q, mload(0x2a20)), f_q))
mstore(0x33a0, addmod(mload(0x2a40), mload(0x2a60), f_q))
mstore(0x33c0, addmod(mload(0x33a0), mload(0x2a80), f_q))
mstore(0x33e0, addmod(mload(0x33c0), mload(0x2aa0), f_q))
mstore(0x3400, addmod(mload(0x33e0), mload(0x2ac0), f_q))
mstore(0x3420, addmod(mload(0x3400), mload(0x2ae0), f_q))
mstore(0x3440, addmod(mload(0x3380), sub(f_q, mload(0x3420)), f_q))
mstore(0x3460, mulmod(mload(0xc40), mload(0x800), f_q))
mstore(0x3480, addmod(mload(0xba0), mload(0x3460), f_q))
mstore(0x34a0, addmod(mload(0x3480), mload(0x860), f_q))
mstore(0x34c0, mulmod(mload(0xc60), mload(0x800), f_q))