zkevm-rom 0.0.1-security → 6.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of zkevm-rom might be problematic. Click here for more details.

Files changed (232) hide show
  1. package/.eslintrc.js +33 -0
  2. package/.github/CODEOWNERS +14 -0
  3. package/.github/ISSUE_TEMPLATE/bug.yml +38 -0
  4. package/.github/ISSUE_TEMPLATE/feature.yml +26 -0
  5. package/.github/ISSUE_TEMPLATE/question.yml +26 -0
  6. package/.github/workflows/main.yaml +40 -0
  7. package/LICENSE +636 -0
  8. package/README.md +23 -5
  9. package/audits/Hexens_Polygon_zkEVM_PUBLIC_27.02.23.pdf +0 -0
  10. package/audits/Polygon-zkEVM-Public-v1.1-verichains-19-03-2024.pdf +0 -0
  11. package/audits/zkEVM-ROM-upgrade-1-Spearbit-30-May.pdf +0 -0
  12. package/audits/zkEVM-ROM-upgrade-2-Spearbit-21-August.pdf +0 -0
  13. package/audits/zkEVM-engagement-1-Spearbit-27-March.pdf +0 -0
  14. package/audits/zkEVM-engagement-2-Spearbit-27-March.pdf +0 -0
  15. package/audits/zkEVM-engagement-3-Spearbit-6-April.pdf +0 -0
  16. package/counters/README.md +45 -0
  17. package/counters/counters-executor.js +80 -0
  18. package/counters/countersConstants.zkasm +370 -0
  19. package/counters/endIncludes.zkasm +18 -0
  20. package/counters/initIncludes.zkasm +2 -0
  21. package/counters/tests/MLOAD32.zkasm +27 -0
  22. package/counters/tests/MLOADX.zkasm +30 -0
  23. package/counters/tests/MSTORE32.zkasm +32 -0
  24. package/counters/tests/MSTOREX.zkasm +36 -0
  25. package/counters/tests/SHLarith.zkasm +28 -0
  26. package/counters/tests/SHLarithBit.zkasm +28 -0
  27. package/counters/tests/SHRarith.zkasm +28 -0
  28. package/counters/tests/SHRarithBit.zkasm +28 -0
  29. package/counters/tests/abs.zkasm +29 -0
  30. package/counters/tests/addBatchHashByteByByte.zkasm +31 -0
  31. package/counters/tests/computeGasSendCall.zkasm +30 -0
  32. package/counters/tests/divArith.zkasm +27 -0
  33. package/counters/tests/expAD.zkasm +30 -0
  34. package/counters/tests/getLenBits.zkasm +30 -0
  35. package/counters/tests/getLenBytes.zkasm +32 -0
  36. package/counters/tests/isEmptyAccount.zkasm +30 -0
  37. package/counters/tests/mulARITH.zkasm +28 -0
  38. package/counters/tests/offsetUtil.zkasm +29 -0
  39. package/counters/tests/opADDMOD.zkasm +28 -0
  40. package/counters/tests/opAdd.zkasm +27 -0
  41. package/counters/tests/opBLOCKHASH.zkasm +28 -0
  42. package/counters/tests/opCALL.zkasm +41 -0
  43. package/counters/tests/opCALLCODE.zkasm +41 -0
  44. package/counters/tests/opCALLDATACOPY.zkasm +28 -0
  45. package/counters/tests/opCALLDATALOAD.zkasm +27 -0
  46. package/counters/tests/opCODECOPY.zkasm +28 -0
  47. package/counters/tests/opCREATE.zkasm +35 -0
  48. package/counters/tests/opCREATE2.zkasm +35 -0
  49. package/counters/tests/opDELEGATECALL.zkasm +35 -0
  50. package/counters/tests/opDIV.zkasm +27 -0
  51. package/counters/tests/opEXP.zkasm +29 -0
  52. package/counters/tests/opEXTCODECOPY.zkasm +29 -0
  53. package/counters/tests/opMOD.zkasm +27 -0
  54. package/counters/tests/opMUL.zkasm +27 -0
  55. package/counters/tests/opMULMOD.zkasm +28 -0
  56. package/counters/tests/opRETURN.zkasm +32 -0
  57. package/counters/tests/opRETURNDATACOPY.zkasm +29 -0
  58. package/counters/tests/opREVERT.zkasm +32 -0
  59. package/counters/tests/opSDIV.zkasm +28 -0
  60. package/counters/tests/opSHA3.zkasm +28 -0
  61. package/counters/tests/opSIGNEXTEND.zkasm +27 -0
  62. package/counters/tests/opSMOD.zkasm +28 -0
  63. package/counters/tests/opSTATICCALL.zkasm +35 -0
  64. package/counters/tests/opSUB.zkasm +27 -0
  65. package/counters/tests/saveMem.zkasm +31 -0
  66. package/docs/opcode-cost-zk-counters.md +315 -0
  67. package/docs/usage-ecrecover.md +51 -0
  68. package/index.js +43 -0
  69. package/main/block-info.zkasm +204 -0
  70. package/main/constants.zkasm +145 -0
  71. package/main/ecrecover/addFpEc.zkasm +31 -0
  72. package/main/ecrecover/checkSqrtFpEc.zkasm +1558 -0
  73. package/main/ecrecover/constEc.zkasm +13 -0
  74. package/main/ecrecover/ecrecover.zkasm +280 -0
  75. package/main/ecrecover/invFnEc.zkasm +44 -0
  76. package/main/ecrecover/invFpEc.zkasm +45 -0
  77. package/main/ecrecover/mulFnEc.zkasm +36 -0
  78. package/main/ecrecover/mulFpEc.zkasm +36 -0
  79. package/main/ecrecover/mulPointEc.zkasm +311 -0
  80. package/main/ecrecover/sqFpEc.zkasm +38 -0
  81. package/main/ecrecover/sqrtFpEc.zkasm +70 -0
  82. package/main/end.zkasm +4 -0
  83. package/main/l2-tx-hash.zkasm +159 -0
  84. package/main/load-change-l2-block-utils.zkasm +11 -0
  85. package/main/load-change-l2-block.zkasm +28 -0
  86. package/main/load-tx-rlp-utils.zkasm +72 -0
  87. package/main/load-tx-rlp.zkasm +431 -0
  88. package/main/main.zkasm +237 -0
  89. package/main/map-opcodes.zkasm +274 -0
  90. package/main/modexp/array_lib/array_add_AGTB.zkasm +123 -0
  91. package/main/modexp/array_lib/array_add_short.zkasm +85 -0
  92. package/main/modexp/array_lib/array_div.zkasm +215 -0
  93. package/main/modexp/array_lib/array_div_long.zkasm +284 -0
  94. package/main/modexp/array_lib/array_div_short.zkasm +222 -0
  95. package/main/modexp/array_lib/array_mul.zkasm +97 -0
  96. package/main/modexp/array_lib/array_mul_long.zkasm +156 -0
  97. package/main/modexp/array_lib/array_mul_short.zkasm +127 -0
  98. package/main/modexp/array_lib/array_square.zkasm +246 -0
  99. package/main/modexp/array_lib/unused/array_add.zkasm +100 -0
  100. package/main/modexp/array_lib/unused/array_is_odd.zkasm +23 -0
  101. package/main/modexp/array_lib/unused/array_is_one.zkasm +33 -0
  102. package/main/modexp/array_lib/unused/array_is_zero.zkasm +34 -0
  103. package/main/modexp/array_lib/unused/array_sub_AGTB.zkasm +111 -0
  104. package/main/modexp/array_lib/unused/array_unshift.zkasm +37 -0
  105. package/main/modexp/array_lib/utils/array_compare.zkasm +82 -0
  106. package/main/modexp/array_lib/utils/array_trim.zkasm +49 -0
  107. package/main/modexp/constants.zkasm +5 -0
  108. package/main/modexp/modexp.zkasm +296 -0
  109. package/main/modexp/modexp_utils.zkasm +230 -0
  110. package/main/opcodes/arithmetic.zkasm +357 -0
  111. package/main/opcodes/block.zkasm +163 -0
  112. package/main/opcodes/calldata-returndata-code.zkasm +619 -0
  113. package/main/opcodes/comparison.zkasm +446 -0
  114. package/main/opcodes/context-information.zkasm +169 -0
  115. package/main/opcodes/create-terminate-context.zkasm +1011 -0
  116. package/main/opcodes/crypto.zkasm +96 -0
  117. package/main/opcodes/flow-control.zkasm +126 -0
  118. package/main/opcodes/logs.zkasm +193 -0
  119. package/main/opcodes/stack-operations.zkasm +658 -0
  120. package/main/opcodes/storage-memory.zkasm +313 -0
  121. package/main/pairings/BN254/addPointBN254.zkasm +245 -0
  122. package/main/pairings/BN254/ecAdd.zkasm +312 -0
  123. package/main/pairings/BN254/ecMul.zkasm +159 -0
  124. package/main/pairings/BN254/escalarMulBN254.zkasm +155 -0
  125. package/main/pairings/BN254/lineDiffPointsBN254.zkasm +83 -0
  126. package/main/pairings/BN254/lineSamePointsBN254.zkasm +96 -0
  127. package/main/pairings/FP12BN254/CYCLOFP12BN254/compressFp12BN254.zkasm +49 -0
  128. package/main/pairings/FP12BN254/CYCLOFP12BN254/decompressFp12BN254.zkasm +236 -0
  129. package/main/pairings/FP12BN254/CYCLOFP12BN254/expByXCompCycloFp12BN254.zkasm +444 -0
  130. package/main/pairings/FP12BN254/CYCLOFP12BN254/squareCompCycloFp12BN254.zkasm +212 -0
  131. package/main/pairings/FP12BN254/CYCLOFP12BN254/squareCycloFp12BN254.zkasm +228 -0
  132. package/main/pairings/FP12BN254/CYCLOFP12BN254/xBinDecompBN254.zkasm +64 -0
  133. package/main/pairings/FP12BN254/frob2Fp12BN254.zkasm +80 -0
  134. package/main/pairings/FP12BN254/frob3Fp12BN254.zkasm +96 -0
  135. package/main/pairings/FP12BN254/frobFp12BN254.zkasm +96 -0
  136. package/main/pairings/FP12BN254/inverseFp12BN254.zkasm +289 -0
  137. package/main/pairings/FP12BN254/mulFp12BN254.zkasm +408 -0
  138. package/main/pairings/FP12BN254/sparseMulAFp12BN254.zkasm +296 -0
  139. package/main/pairings/FP12BN254/sparseMulBFp12BN254.zkasm +291 -0
  140. package/main/pairings/FP12BN254/squareFp12BN254.zkasm +376 -0
  141. package/main/pairings/FP2BN254/addFp2BN254.zkasm +19 -0
  142. package/main/pairings/FP2BN254/escalarMulFp2BN254.zkasm +20 -0
  143. package/main/pairings/FP2BN254/invFp2BN254.zkasm +66 -0
  144. package/main/pairings/FP2BN254/mulFp2BN254.zkasm +19 -0
  145. package/main/pairings/FP2BN254/squareFp2BN254.zkasm +21 -0
  146. package/main/pairings/FP2BN254/subFp2BN254.zkasm +19 -0
  147. package/main/pairings/FP4BN254/squareFp4BN254.zkasm +76 -0
  148. package/main/pairings/FP6BN254/addFp6BN254.zkasm +59 -0
  149. package/main/pairings/FP6BN254/escalarMulFp6BN254.zkasm +51 -0
  150. package/main/pairings/FP6BN254/inverseFp6BN254.zkasm +208 -0
  151. package/main/pairings/FP6BN254/mulFp6BN254.zkasm +201 -0
  152. package/main/pairings/FP6BN254/sparseMulAFp6BN254.zkasm +65 -0
  153. package/main/pairings/FP6BN254/sparseMulBFp6BN254.zkasm +134 -0
  154. package/main/pairings/FP6BN254/sparseMulCFp6BN254.zkasm +128 -0
  155. package/main/pairings/FP6BN254/squareFp6BN254.zkasm +147 -0
  156. package/main/pairings/FP6BN254/subFp6BN254.zkasm +59 -0
  157. package/main/pairings/FPBN254/addFpBN254.zkasm +29 -0
  158. package/main/pairings/FPBN254/invFpBN254.zkasm +55 -0
  159. package/main/pairings/FPBN254/mulFpBN254.zkasm +29 -0
  160. package/main/pairings/FPBN254/reduceFpBN254.zkasm +25 -0
  161. package/main/pairings/FPBN254/squareFpBN254.zkasm +31 -0
  162. package/main/pairings/FPBN254/subFpBN254.zkasm +36 -0
  163. package/main/pairings/FRBN254/reduceFrBN254.zkasm +25 -0
  164. package/main/pairings/constants.zkasm +62 -0
  165. package/main/pairings/ecPairing.zkasm +244 -0
  166. package/main/pairings/finalExpBN254.zkasm +2095 -0
  167. package/main/pairings/halfPairingBN254.zkasm +428 -0
  168. package/main/pairings/loopLengthBN254.zkasm +75 -0
  169. package/main/pairings/millerLoopBN254.zkasm +741 -0
  170. package/main/pairings/pairingBN254.zkasm +481 -0
  171. package/main/pairings/unused/addFp12BN254.zkasm +130 -0
  172. package/main/pairings/unused/expByXCycloFp12BN254.zkasm +411 -0
  173. package/main/pairings/unused/expFp12BN254.zkasm +333 -0
  174. package/main/pairings/unused/subFp12BN254.zkasm +130 -0
  175. package/main/pairings/unused/xPseudoBinDecompBN254.zkasm +68 -0
  176. package/main/pairings/utilsTests/expCycloFp12BN254.zkasm +334 -0
  177. package/main/precompiled/end.zkasm +42 -0
  178. package/main/precompiled/identity.zkasm +99 -0
  179. package/main/precompiled/pre-ecAdd.zkasm +84 -0
  180. package/main/precompiled/pre-ecMul.zkasm +82 -0
  181. package/main/precompiled/pre-ecPairing.zkasm +72 -0
  182. package/main/precompiled/pre-ecrecover.zkasm +71 -0
  183. package/main/precompiled/pre-modexp.zkasm +367 -0
  184. package/main/precompiled/pre-sha2-256.zkasm +125 -0
  185. package/main/precompiled/revert-precompiled.zkasm +25 -0
  186. package/main/precompiled/selector.zkasm +77 -0
  187. package/main/process-change-l2-block.zkasm +147 -0
  188. package/main/process-tx.zkasm +587 -0
  189. package/main/tables/2-exp.zkasm +260 -0
  190. package/main/touched.zkasm +118 -0
  191. package/main/utils.zkasm +2335 -0
  192. package/main/vars.zkasm +117 -0
  193. package/package.json +62 -3
  194. package/test/bytes-length.zkasm +39 -0
  195. package/test/ecrecover.zkasm +538 -0
  196. package/test/lt4-test.zkasm +38 -0
  197. package/test/mstorex.zkasm +191 -0
  198. package/test/opcalldatacopy.ignore.zkasm +331 -0
  199. package/test/performance/read-push.zkasm +71 -0
  200. package/test/read-push.zkasm +304 -0
  201. package/test/testArrayArith.zkasm +1099 -0
  202. package/test/testArrayUtils.zkasm +335 -0
  203. package/test/testCycloFp12ArithBN254.zkasm +548 -0
  204. package/test/testEcAdd.zkasm +252 -0
  205. package/test/testEcMul.zkasm +231 -0
  206. package/test/testEcPairing.zkasm +436 -0
  207. package/test/testFinalExpBn254.zkasm +139 -0
  208. package/test/testFp12ArithBN254.zkasm +692 -0
  209. package/test/testFp2ArithBN254.zkasm +185 -0
  210. package/test/testFp4ArithBN254.zkasm +128 -0
  211. package/test/testFp6ArithBN254.zkasm +260 -0
  212. package/test/testFpArithBN254.zkasm +159 -0
  213. package/test/testFrArithBN254.zkasm +113 -0
  214. package/test/testHalfPairingBN254.zkasm +285 -0
  215. package/test/testModExp.zkasm +586 -0
  216. package/test/testModExpReturn.zkasm +81 -0
  217. package/test/testPairingBN254.zkasm +463 -0
  218. package/test/testPointArithBN254.zkasm +270 -0
  219. package/test/testSHA256.zkasm +27 -0
  220. package/test/touched-assert.zkasm +59 -0
  221. package/test/utils-expAD.zkasm +48 -0
  222. package/test/utils-getLenBytes.zkasm +36 -0
  223. package/tools/audit-tools/registry-op-checker.js +71 -0
  224. package/tools/get-not-used-labels.js +31 -0
  225. package/tools/helpers/helpers.js +47 -0
  226. package/tools/modexp-utils/README.md +5 -0
  227. package/tools/modexp-utils/modexp-test-gen.js +168 -0
  228. package/tools/modexp-utils/modexp-test-int.sage +37 -0
  229. package/tools/parallel-testing/checker.sh +6 -0
  230. package/tools/parallel-testing/gen-parallel-tests.js +78 -0
  231. package/tools/parallel-testing/parallel-tests-sample/sample.test.js +136 -0
  232. package/tools/run-tests-zkasm.js +83 -0
@@ -0,0 +1,1099 @@
1
+ ; constants needed by executor C++
2
+ INCLUDE "../main/constants.zkasm"
3
+
4
+ CONSTL %ARRAY_BASE_MINUS_ONE = 115792089237316195423570985008687907853269984665640564039457584007913129639935n ; 2^256
5
+
6
+ VAR GLOBAL lastHashKId
7
+ VAR GLOBAL lastHashPId
8
+
9
+ VAR GLOBAL initial_A
10
+ VAR GLOBAL initial_B
11
+ VAR GLOBAL initial_C
12
+ VAR GLOBAL initial_D
13
+ VAR GLOBAL initial_E
14
+ VAR GLOBAL initial_CTX
15
+ VAR GLOBAL initial_SP
16
+ VAR GLOBAL initial_PC
17
+ VAR GLOBAL initial_GAS
18
+ VAR GLOBAL initial_SR
19
+ VAR GLOBAL initial_RR
20
+ VAR GLOBAL initial_HASHPOS
21
+ VAR GLOBAL initial_RCX
22
+
23
+ start:
24
+
25
+ STEP => A
26
+ 0 :ASSERT
27
+
28
+ A :MSTORE(initial_A)
29
+ B :MSTORE(initial_B)
30
+ C :MSTORE(initial_C)
31
+ D :MSTORE(initial_D)
32
+ E :MSTORE(initial_E)
33
+ CTX :MSTORE(initial_CTX)
34
+ SP :MSTORE(initial_SP)
35
+ PC :MSTORE(initial_PC)
36
+ GAS :MSTORE(initial_GAS)
37
+ SR :MSTORE(initial_SR)
38
+ RR :MSTORE(initial_RR)
39
+ HASHPOS :MSTORE(initial_HASHPOS)
40
+ RCX :MSTORE(initial_RCX)
41
+ 0 => A,B,C,D,E,CTX, SP, PC, GAS, SR, RR, HASHPOS, RCX
42
+
43
+ -1 :MSTORE(lastHashKId)
44
+ -1 :MSTORE(lastHashPId)
45
+
46
+ ; addition with len(inA) >= len(inB)
47
+ ; ---------------------------------------------------------------
48
+ ; 1] [2**256-1,2**256-1,2**256-1] + [2**256-1,2**256-1]
49
+ 3 => C
50
+ 2 => D
51
+ 115792089237316195423570985008687907853269984665640564039457584007913129639935n :MSTORE(array_add_AGTB_inA)
52
+ 1 => E
53
+ 115792089237316195423570985008687907853269984665640564039457584007913129639935n :MSTORE(array_add_AGTB_inA + E)
54
+ 2 => E
55
+ 115792089237316195423570985008687907853269984665640564039457584007913129639935n :MSTORE(array_add_AGTB_inA + E)
56
+ 115792089237316195423570985008687907853269984665640564039457584007913129639935n :MSTORE(array_add_AGTB_inB)
57
+ 1 => E
58
+ 115792089237316195423570985008687907853269984665640564039457584007913129639935n :MSTORE(array_add_AGTB_inB + E)
59
+ :CALL(array_add_AGTB)
60
+ 115792089237316195423570985008687907853269984665640564039457584007913129639934n :MLOAD(array_add_AGTB_out)
61
+ 1 => E
62
+ 115792089237316195423570985008687907853269984665640564039457584007913129639935n :MLOAD(array_add_AGTB_out + E)
63
+ 2 => E
64
+ 0n :MLOAD(array_add_AGTB_out + E)
65
+ 3 => E
66
+ 1n :MLOAD(array_add_AGTB_out + E)
67
+ 4 :MLOAD(array_add_AGTB_len_out)
68
+ ; ---------------------------------------------------------------
69
+
70
+ ; short addition
71
+ ; ---------------------------------------------------------------
72
+ ; 1] [2**256-1,2**256-1,2**256-1] + [2**256-1]
73
+ 3 => C
74
+ 115792089237316195423570985008687907853269984665640564039457584007913129639935n :MSTORE(array_add_short_inA)
75
+ 1 => E
76
+ 115792089237316195423570985008687907853269984665640564039457584007913129639935n :MSTORE(array_add_short_inA + E)
77
+ 2 => E
78
+ 115792089237316195423570985008687907853269984665640564039457584007913129639935n :MSTORE(array_add_short_inA + E)
79
+ 115792089237316195423570985008687907853269984665640564039457584007913129639935n :MSTORE(array_add_short_inB)
80
+ :CALL(array_add_short)
81
+ 115792089237316195423570985008687907853269984665640564039457584007913129639934n :MLOAD(array_add_short_out)
82
+ 1 => E
83
+ 0n :MLOAD(array_add_short_out + E)
84
+ 2 => E
85
+ 0n :MLOAD(array_add_short_out + E)
86
+ 3 => E
87
+ 1n :MLOAD(array_add_short_out + E)
88
+ 4 :MLOAD(array_add_short_len_out)
89
+ ; ---------------------------------------------------------------
90
+
91
+ ; multiplication
92
+ ; ---------------------------------------------------------------
93
+ ; 1] len(inB) = len(inA) and inB > inA
94
+ 3 => C
95
+ 3 => D
96
+ 5n :MSTORE(array_mul_inA)
97
+ 1 => E
98
+ 6n :MSTORE(array_mul_inA + E)
99
+ 2 => E
100
+ 7n :MSTORE(array_mul_inA + E)
101
+
102
+ 2n :MSTORE(array_mul_inB)
103
+ 1 => E
104
+ 3n :MSTORE(array_mul_inB + E)
105
+ 2 => E
106
+ 4n :MSTORE(array_mul_inB + E)
107
+ :CALL(array_mul)
108
+ 10n :MLOAD(array_mul_out)
109
+ 1 => E
110
+ 27n :MLOAD(array_mul_out + E)
111
+ 2 => E
112
+ 52n :MLOAD(array_mul_out + E)
113
+ 3 => E
114
+ 45n :MLOAD(array_mul_out + E)
115
+ 4 => E
116
+ 28n :MLOAD(array_mul_out + E)
117
+ 5 :MLOAD(array_mul_len_out)
118
+
119
+ ; 2] len(inB) != len(inA)
120
+ 2 => C
121
+ 3 => D
122
+ 5n :MSTORE(array_mul_inA)
123
+ 1 => E
124
+ 6n :MSTORE(array_mul_inA + E)
125
+
126
+ 11n :MSTORE(array_mul_inB)
127
+ 1 => E
128
+ 21n :MSTORE(array_mul_inB + E)
129
+ 2 => E
130
+ 16n :MSTORE(array_mul_inB + E)
131
+ :CALL(array_mul)
132
+ 55n :MLOAD(array_mul_out)
133
+ 1 => E
134
+ 171n :MLOAD(array_mul_out + E)
135
+ 2 => E
136
+ 206n :MLOAD(array_mul_out + E)
137
+ 3 => E
138
+ 96n :MLOAD(array_mul_out + E)
139
+ 4 :MLOAD(array_mul_len_out)
140
+ ; ---------------------------------------------------------------
141
+
142
+ ; short multiplication
143
+ ; ---------------------------------------------------------------
144
+ ; 1] [a, a, a] * a
145
+ 3 => C
146
+ 1 => D
147
+ 115792089237316195423570985008687907853269984665640564039457584007913129639935n :MSTORE(array_mul_inA)
148
+ 1 => E
149
+ 115792089237316195423570985008687907853269984665640564039457584007913129639935n :MSTORE(array_mul_inA + E)
150
+ 2 => E
151
+ 115792089237316195423570985008687907853269984665640564039457584007913129639935n :MSTORE(array_mul_inA + E)
152
+
153
+ 115792089237316195423570985008687907853269984665640564039457584007913129639935n :MSTORE(array_mul_inB)
154
+ :CALL(array_mul)
155
+ 1n :MLOAD(array_mul_out)
156
+ 1 => E
157
+ 115792089237316195423570985008687907853269984665640564039457584007913129639935n :MLOAD(array_mul_out + E)
158
+ 2 => E
159
+ 115792089237316195423570985008687907853269984665640564039457584007913129639935n :MLOAD(array_mul_out + E)
160
+ 3 => E
161
+ 115792089237316195423570985008687907853269984665640564039457584007913129639934n :MLOAD(array_mul_out + E)
162
+ 4 :MLOAD(array_mul_len_out)
163
+
164
+ ; 2] [a, 100, a, 6] * 400
165
+ 4 => C
166
+ 1 => D
167
+ 115792089237316195423570985008687907853269984665640564039457584007913129639935n :MSTORE(array_mul_inA)
168
+ 1 => E
169
+ 100n :MSTORE(array_mul_inA + E)
170
+ 2 => E
171
+ 115792089237316195423570985008687907853269984665640564039457584007913129639935n :MSTORE(array_mul_inA + E)
172
+ 3 => E
173
+ 6n :MSTORE(array_mul_inA + E)
174
+
175
+ 400n :MSTORE(array_mul_inB)
176
+ :CALL(array_mul)
177
+ 115792089237316195423570985008687907853269984665640564039457584007913129639536n :MLOAD(array_mul_out)
178
+ 1 => E
179
+ 40399n :MLOAD(array_mul_out + E)
180
+ 2 => E
181
+ 115792089237316195423570985008687907853269984665640564039457584007913129639536n :MLOAD(array_mul_out + E)
182
+ 3 => E
183
+ 2799n :MLOAD(array_mul_out + E)
184
+ 4 :MLOAD(array_mul_len_out)
185
+ ; ---------------------------------------------------------------
186
+
187
+ ; squaring
188
+ ; ---------------------------------------------------------------
189
+ ; 1] [4n, 4n, 4n, 3n, 2n, 4n]
190
+ 6 => C
191
+ 4n :MSTORE(array_square_in)
192
+ 1 => E
193
+ 4n :MSTORE(array_square_in + E)
194
+ 2 => E
195
+ 4n :MSTORE(array_square_in + E)
196
+ 3 => E
197
+ 3n :MSTORE(array_square_in + E)
198
+ 4 => E
199
+ 2n :MSTORE(array_square_in + E)
200
+ 5 => E
201
+ 4n :MSTORE(array_square_in + E)
202
+ :CALL(array_square)
203
+ 16n :MLOAD(array_square_out)
204
+ 1 => E
205
+ 32n :MLOAD(array_square_out + E)
206
+ 2 => E
207
+ 48n :MLOAD(array_square_out + E)
208
+ 3 => E
209
+ 56n :MLOAD(array_square_out + E)
210
+ 4 => E
211
+ 56n :MLOAD(array_square_out + E)
212
+ 5 => E
213
+ 72n :MLOAD(array_square_out + E)
214
+ 6 => E
215
+ 57n :MLOAD(array_square_out + E)
216
+ 7 => E
217
+ 44n :MLOAD(array_square_out + E)
218
+ 8 => E
219
+ 28n :MLOAD(array_square_out + E)
220
+ 9 => E
221
+ 16n :MLOAD(array_square_out + E)
222
+ 10 => E
223
+ 16n :MLOAD(array_square_out + E)
224
+ 11 :MLOAD(array_square_len_out)
225
+
226
+ ; 2] [49625181101706940895816136432294817651401421999560241731196107431962769845690n, 16541727033902313631938712144098272550467140666520080577065369143987589948564n, 2n]
227
+ 3 => C
228
+ 49625181101706940895816136432294817651401421999560241731196107431962769845690n :MSTORE(array_square_in)
229
+ 1 => E
230
+ 16541727033902313631938712144098272550467140666520080577065369143987589948564n :MSTORE(array_square_in + E)
231
+ 2 => E
232
+ 2n :MSTORE(array_square_in + E)
233
+ :CALL(array_square)
234
+ 73256219721567388941442868066720921294925908666017499698432349066230755486500n :MLOAD(array_square_out)
235
+ 1 => E
236
+ 59077596549651120114066829086065259108811216666143144918090604085669964102021n :MLOAD(array_square_out + E)
237
+ 2 => E
238
+ 75619323583553433746005541230163531659278357332663225495155973229657554050588n :MLOAD(array_square_out + E)
239
+ 3 => E
240
+ 68530011997595299332317521739835700566221011332726048104985100739377158358338n :MLOAD(array_square_out + E)
241
+ 4 => E
242
+ 4n :MLOAD(array_square_out + E)
243
+ 5 :MLOAD(array_square_len_out)
244
+
245
+ ; 3] [108509871213644914495224788117262720812102234692915980461799068728781566717980n, 97610657482852136417037764955262109743864410230427530868747251158690618238750n, 3n]
246
+ 3 => C
247
+ 108509871213644914495224788117262720812102234692915980461799068728781566717980n :MSTORE(array_square_in)
248
+ 1 => E
249
+ 97610657482852136417037764955262109743864410230427530868747251158690618238750n :MSTORE(array_square_in + E)
250
+ 2 => E
251
+ 3n :MSTORE(array_square_in + E)
252
+ :CALL(array_square)
253
+ 82987931714326364316120253427931880709278140571418487333162713377057429160720n :MLOAD(array_square_out)
254
+ 1 => E
255
+ 4257238595720679277571917967782652353394431698489248379634099239588181418140n :MLOAD(array_square_out + E)
256
+ 2 => E
257
+ 15209178211456919413336795740141505754388379695813905932093982440742677791802n :MLOAD(array_square_out + E)
258
+ 3 => E
259
+ 88987534839350135473536361176867192550264928852523682165693061442019881855583n :MLOAD(array_square_out + E)
260
+ 4 => E
261
+ 14n :MLOAD(array_square_out + E)
262
+ 5 :MLOAD(array_square_len_out)
263
+
264
+ ; 4] [94296684984090328915786319894647341212298256830891608529662243544763352873524n,85801804490443701075961240310880668636621463408258506144468684495763969931231n]
265
+ 2 => C
266
+ 94296684984090328915786319894647341212298256830891608529662243544763352873524n :MSTORE(array_square_in)
267
+ 1 => E
268
+ 85801804490443701075961240310880668636621463408258506144468684495763969931231n :MSTORE(array_square_in + E)
269
+ :CALL(array_square)
270
+ 56476742620324943499420425449441725188859143808665910845865775685761970051728n :MLOAD(array_square_out)
271
+ 1 => E
272
+ 15939360972613038527243286761436595585964755988147232278935003110685006573864n :MLOAD(array_square_out + E)
273
+ 2 => E
274
+ 71885101902860809166787972884705167254384530826288829047389464757277834814455n :MLOAD(array_square_out + E)
275
+ 3 => E
276
+ 63579038104476977130956937454941822659502127575865339775268690127769381598323n :MLOAD(array_square_out + E)
277
+ 4 :MLOAD(array_square_len_out)
278
+
279
+ ; 5] [ARRAY_BASE-1,ARRAY_BASE/2+1,ARRAY_BASE-2]
280
+ ; this covers the edge case where the addition 2·a_i·a_j + out[i + j] produces a third chunk carry
281
+ 3 => C
282
+ 115792089237316195423570985008687907853269984665640564039457584007913129639935n :MSTORE(array_square_in)
283
+ 1 => E
284
+ 57896044618658097711785492504343953926634992332820282019728792003956564819969n :MSTORE(array_square_in + E)
285
+ 2 => E
286
+ 115792089237316195423570985008687907853269984665640564039457584007913129639934n :MSTORE(array_square_in + E)
287
+ :CALL(array_square)
288
+ 1n :MLOAD(array_square_out)
289
+ 1 => E
290
+ 115792089237316195423570985008687907853269984665640564039457584007913129639932n :MLOAD(array_square_out + E)
291
+ 2 => E
292
+ 6n :MLOAD(array_square_out + E)
293
+ 3 => E
294
+ 28948022309329048855892746252171976963317496166410141009864396001978282409976n :MLOAD(array_square_out + E)
295
+ 4 => E
296
+ 6n :MLOAD(array_square_out + E)
297
+ 5 => E
298
+ 115792089237316195423570985008687907853269984665640564039457584007913129639933n :MLOAD(array_square_out + E)
299
+ 6 :MLOAD(array_square_len_out)
300
+
301
+ ; 6] [ARRAY_BASE/2+1,ARRAY_BASE/2+1,ARRAY_BASE-2]
302
+ ; this covers the edge case where out[i + j] has a non-zero second chunk (i.e., when j == len -1)
303
+ ; and it produces carry when added to the second chunk of 2·a_i·a_j
304
+ 3 => C
305
+ 57896044618658097711785492504343953926634992332820282019728792003956564819969n :MSTORE(array_square_in)
306
+ 1 => E
307
+ 57896044618658097711785492504343953926634992332820282019728792003956564819969n :MSTORE(array_square_in + E)
308
+ 2 => E
309
+ 115792089237316195423570985008687907853269984665640564039457584007913129639934n :MSTORE(array_square_in + E)
310
+ :CALL(array_square)
311
+ 1n :MLOAD(array_square_out)
312
+ 1 => E
313
+ 28948022309329048855892746252171976963317496166410141009864396001978282409987n :MLOAD(array_square_out + E)
314
+ 2 => E
315
+ 57896044618658097711785492504343953926634992332820282019728792003956564819967n :MLOAD(array_square_out + E)
316
+ 3 => E
317
+ 28948022309329048855892746252171976963317496166410141009864396001978282409981n :MLOAD(array_square_out + E)
318
+ 4 => E
319
+ 5n :MLOAD(array_square_out + E)
320
+ 5 => E
321
+ 115792089237316195423570985008687907853269984665640564039457584007913129639933n :MLOAD(array_square_out + E)
322
+ 6 :MLOAD(array_square_len_out)
323
+
324
+ ; 7] [ARRAY_BASE/2+1,ARRAY_BASE-1,ARRAY_BASE-2]
325
+ ; this covers the edge case where carry has a non-zero second chunk
326
+ ; and it produces carry when added to the second chunk of 2·a_i·a_j + out[i + j]
327
+ 3 => C
328
+ 57896044618658097711785492504343953926634992332820282019728792003956564819969n :MSTORE(array_square_in)
329
+ 1 => E
330
+ 115792089237316195423570985008687907853269984665640564039457584007913129639935n :MSTORE(array_square_in + E)
331
+ 2 => E
332
+ 115792089237316195423570985008687907853269984665640564039457584007913129639934n :MSTORE(array_square_in + E)
333
+ :CALL(array_square)
334
+ 1n :MLOAD(array_square_out)
335
+ 1 => E
336
+ 28948022309329048855892746252171976963317496166410141009864396001978282409983n :MLOAD(array_square_out + E)
337
+ 2 => E
338
+ 115792089237316195423570985008687907853269984665640564039457584007913129639934n :MLOAD(array_square_out + E)
339
+ 3 => E
340
+ 2n :MLOAD(array_square_out + E)
341
+ 4 => E
342
+ 0n :MLOAD(array_square_out + E)
343
+ 5 => E
344
+ 115792089237316195423570985008687907853269984665640564039457584007913129639934n :MLOAD(array_square_out + E)
345
+ 6 :MLOAD(array_square_len_out)
346
+
347
+ ; 8] [272043482145244634591109928786079352n,81877371507464127617551201542979628307507432471243237061821853600756754782485n,176318528146701254200802196825427983451687n]
348
+ ; this covers the edge case where carry is of the form -a_i·a_i
349
+ ; and it produces carry when added to the second chunk of 2·a_i·a_i + out[i + i]
350
+ ; e.g., when the subtraction is of the form (base² + y) - (y+1) = 0
351
+ ;----------------------
352
+ ; I obtained a (3-chunk) input by solving the system of inequalities:
353
+ ; 2·x² + z = base² + y
354
+ ; x² > y
355
+ ; 0 < x,y,z < base
356
+ ; (x,y ∈ ℕ and z ∈ 2ℕ)
357
+ ; where x = a_1 and z = out[2]. The solution ensures that 2·a_1·a_1 + out[2] > base², while 2·a_1·a_1 + out[2] - a_1·a_1 < base²
358
+ ; Then I simply found an appropriate pair of a_0,a_2 such that 2·a_0·a_2 = out[2]
359
+ 3 => C
360
+ 272043482145244634591109928786079352n :MSTORE(array_square_in)
361
+ 1 => E
362
+ 81877371507464127617551201542979628307507432471243237061821853600756754782485n :MSTORE(array_square_in + E)
363
+ 2 => E
364
+ 176318528146701254200802196825427983451687n :MSTORE(array_square_in + E)
365
+ :CALL(array_square)
366
+ 74007656177710036293062386420979166962778595461878138943934059640739904n :MLOAD(array_square_out)
367
+ 1 => E
368
+ 107309681785116775741345228420276669267595434811710002878660662063722468151216n :MLOAD(array_square_out + E)
369
+ 2 => E
370
+ 47966306363752936198863311407838158502039511278988772633471074046272807492009n :MLOAD(array_square_out + E)
371
+ 3 => E
372
+ 109177356221965282998310125805498648173787805805410017775027543248980737204326n :MLOAD(array_square_out + E)
373
+ 4 => E
374
+ 15873116718318493168742852298661062116740566009918431601066595319216311981693n :MLOAD(array_square_out + E)
375
+ 5 => E
376
+ 268483n :MLOAD(array_square_out + E)
377
+ 6 :MLOAD(array_square_len_out)
378
+ ; ---------------------------------------------------------------
379
+
380
+ ; division
381
+ ; ---------------------------------------------------------------
382
+ ; 1] [9n, 8n, 7n, 6n] / 8n
383
+ 4 => C
384
+ 1 => D
385
+ 9n :MSTORE(array_div_inA)
386
+ 1 => E
387
+ 8n :MSTORE(array_div_inA + E)
388
+ 2 => E
389
+ 7n :MSTORE(array_div_inA + E)
390
+ 3 => E
391
+ 6n :MSTORE(array_div_inA + E)
392
+
393
+ 8n :MSTORE(array_div_inB)
394
+ :CALL(array_div)
395
+ 1n :MLOAD(array_div_quo)
396
+ 1 => E
397
+ 101318078082651670995624611882601919371611236582435493534525386006923988434945n :MLOAD(array_div_quo + E)
398
+ 2 => E
399
+ 86844066927987146567678238756515930889952488499230423029593188005934847229952n :MLOAD(array_div_quo + E)
400
+ 1n :MLOAD(array_div_rem)
401
+ 3 :MLOAD(array_div_len_quo)
402
+
403
+ ; 2] [a, 7n, a, 12n, a, 20n, a, 80n] / a
404
+ 8 => C
405
+ 1 => D
406
+ 115792089237316195423570985008687907853269984665640564039457584007913129639935n :MSTORE(array_div_inA)
407
+ 1 => E
408
+ 7n :MSTORE(array_div_inA + E)
409
+ 2 => E
410
+ 115792089237316195423570985008687907853269984665640564039457584007913129639935n :MSTORE(array_div_inA + E)
411
+ 3 => E
412
+ 12n :MSTORE(array_div_inA + E)
413
+ 4 => E
414
+ 115792089237316195423570985008687907853269984665640564039457584007913129639935n :MSTORE(array_div_inA + E)
415
+ 5 => E
416
+ 20n :MSTORE(array_div_inA + E)
417
+ 6 => E
418
+ 115792089237316195423570985008687907853269984665640564039457584007913129639935n :MSTORE(array_div_inA + E)
419
+ 7 => E
420
+ 80n :MSTORE(array_div_inA + E)
421
+
422
+ 115792089237316195423570985008687907853269984665640564039457584007913129639935n :MSTORE(array_div_inB)
423
+ :CALL(array_div)
424
+ 120n :MLOAD(array_div_quo)
425
+ 1 => E
426
+ 112n :MLOAD(array_div_quo + E)
427
+ 2 => E
428
+ 113n :MLOAD(array_div_quo + E)
429
+ 3 => E
430
+ 100n :MLOAD(array_div_quo + E)
431
+ 4 => E
432
+ 101n :MLOAD(array_div_quo + E)
433
+ 5 => E
434
+ 80n :MLOAD(array_div_quo + E)
435
+ 6 => E
436
+ 81n :MLOAD(array_div_quo + E)
437
+ 119n :MLOAD(array_div_rem)
438
+ 7 :MLOAD(array_div_len_quo)
439
+
440
+ ; 3] inA == 0, inB != 0, len(inB) == 1
441
+ 1 => C
442
+ 1 => D
443
+ 0n :MSTORE(array_div_inA)
444
+
445
+ 8n :MSTORE(array_div_inB)
446
+ :CALL(array_div)
447
+ 0n :MLOAD(array_div_quo)
448
+ 0n :MLOAD(array_div_rem)
449
+ 1 :MLOAD(array_div_len_quo)
450
+
451
+ 1 => C
452
+ 1 => D
453
+ 0n :MSTORE(array_div_short_inA)
454
+ 8n :MSTORE(array_div_short_inB)
455
+ :CALL(array_div_short)
456
+ 0n :MLOAD(array_div_short_quo)
457
+ 0n :MLOAD(array_div_short_rem)
458
+ 1 :MLOAD(array_div_short_len_quo)
459
+
460
+ ; 4] inA == 0, inB != 0, len(inB) > 1
461
+ 1 => C
462
+ 2 => D
463
+ 0n :MSTORE(array_div_inA)
464
+
465
+ 8n :MSTORE(array_div_inB)
466
+ 1 => E
467
+ 1n :MSTORE(array_div_inB + E)
468
+ :CALL(array_div)
469
+ 0n :MLOAD(array_div_quo)
470
+ 0n :MLOAD(array_div_rem)
471
+
472
+ 1 => C
473
+ 2 => D
474
+ 0n :MSTORE(array_div_long_inA)
475
+ 8n :MSTORE(array_div_long_inB)
476
+ 1 => E
477
+ 8n :MSTORE(array_div_long_inB + E)
478
+ :CALL(array_div_long)
479
+ 0n :MLOAD(array_div_long_quo)
480
+ 0n :MLOAD(array_div_long_rem)
481
+ 1 :MLOAD(array_div_long_len_quo)
482
+
483
+ ; 5] inA != 0, inB == 0 -> error
484
+ 1 => C
485
+ 1 => D
486
+ 8n :MSTORE(array_div_long_inA)
487
+ 0n :MSTORE(array_div_long_inB)
488
+ :CALL(array_div_long)
489
+ 1 => A
490
+ B :ASSERT
491
+
492
+ 2 => C
493
+ 1 => D
494
+ 0n :MSTORE(array_div_inA)
495
+ 1 => E
496
+ 30n :MSTORE(array_div_inA + E)
497
+
498
+ 0n :MSTORE(array_div_inB)
499
+ :CALL(array_div)
500
+ 1 => A
501
+ B :ASSERT
502
+
503
+ ; 6] inA == inB == 0 -> error
504
+ 1 => C
505
+ 1 => D
506
+ 0n :MSTORE(array_div_long_inA)
507
+ 0n :MSTORE(array_div_long_inB)
508
+ :CALL(array_div_long)
509
+ 1 => A
510
+ B :ASSERT
511
+
512
+ 1 => C
513
+ 1 => D
514
+ 0n :MSTORE(array_div_short_inA)
515
+ 0n :MSTORE(array_div_short_inB)
516
+ :CALL(array_div_short)
517
+ 1 => A
518
+ B :ASSERT
519
+
520
+ ; 7] inA == inB
521
+ 1 => C
522
+ 1 => D
523
+ 10n :MSTORE(array_div_inA)
524
+ 10n :MSTORE(array_div_inB)
525
+ :CALL(array_div)
526
+ 1n :MLOAD(array_div_quo)
527
+ 0n :MLOAD(array_div_rem)
528
+ 1 :MLOAD(array_div_len_quo)
529
+
530
+ 2 => C
531
+ 2 => D
532
+ 10n :MSTORE(array_div_inA)
533
+ 1 => E
534
+ 30n :MSTORE(array_div_inA + E)
535
+
536
+ 10n :MSTORE(array_div_inB)
537
+ 1 => E
538
+ 30n :MSTORE(array_div_inB + E)
539
+ :CALL(array_div)
540
+ 1n :MLOAD(array_div_quo)
541
+ 0n :MLOAD(array_div_rem)
542
+
543
+ 1 => C
544
+ 1 => D
545
+ 10n :MSTORE(array_div_long_inA)
546
+ 10n :MSTORE(array_div_long_inB)
547
+ :CALL(array_div_long)
548
+ 1n :MLOAD(array_div_long_quo)
549
+ 0n :MLOAD(array_div_long_rem)
550
+ 1 :MLOAD(array_div_long_len_quo)
551
+
552
+ 1 => C
553
+ 1 => D
554
+ 10n :MSTORE(array_div_short_inA)
555
+ 10n :MSTORE(array_div_short_inB)
556
+ :CALL(array_div_short)
557
+ 1n :MLOAD(array_div_short_quo)
558
+ 0n :MLOAD(array_div_short_rem)
559
+ 1 :MLOAD(array_div_short_len_quo)
560
+
561
+ ; 8] inA < inB
562
+ 1 => C
563
+ 1 => D
564
+ 10n :MSTORE(array_div_inA)
565
+ 11n :MSTORE(array_div_inB)
566
+ :CALL(array_div)
567
+ 0n :MLOAD(array_div_quo)
568
+ 10n :MLOAD(array_div_rem)
569
+ 1 :MLOAD(array_div_len_quo)
570
+
571
+ 2 => C
572
+ 3 => D
573
+ 10n :MSTORE(array_div_inA)
574
+ 1 => E
575
+ 30n :MSTORE(array_div_inA + E)
576
+
577
+ 6n :MSTORE(array_div_inB)
578
+ 1 => E
579
+ 7n :MSTORE(array_div_inB + E)
580
+ 2 => E
581
+ 8n :MSTORE(array_div_inB + E)
582
+ :CALL(array_div)
583
+ 0n :MLOAD(array_div_quo)
584
+ 10n :MLOAD(array_div_rem)
585
+ 1 => E
586
+ 30n :MSTORE(array_div_rem + E)
587
+
588
+ 1 => C
589
+ 1 => D
590
+ 10n :MSTORE(array_div_long_inA)
591
+ 11n :MSTORE(array_div_long_inB)
592
+ :CALL(array_div_long)
593
+ 0n :MLOAD(array_div_long_quo)
594
+ 10n :MLOAD(array_div_long_rem)
595
+ 1 :MLOAD(array_div_long_len_quo)
596
+
597
+ 1 => C
598
+ 1 => D
599
+ 10n :MSTORE(array_div_short_inA)
600
+ 11n :MSTORE(array_div_short_inB)
601
+ :CALL(array_div_short)
602
+ 0n :MLOAD(array_div_short_quo)
603
+ 10n :MLOAD(array_div_short_rem)
604
+ 1 :MLOAD(array_div_short_len_quo)
605
+
606
+ ; 9] [28948022309329048855892746252171976963317496166410141009864396001978282409984n, 1n] / 2
607
+ 2 => C
608
+ 1 => D
609
+ 28948022309329048855892746252171976963317496166410141009864396001978282409984n :MSTORE(array_div_inA)
610
+ 1 => E
611
+ 1n :MSTORE(array_div_inA + E)
612
+
613
+ 2n :MSTORE(array_div_inB)
614
+ :CALL(array_div)
615
+ 72370055773322622139731865630429942408293740416025352524660990004945706024960n :MLOAD(array_div_quo)
616
+ 1 :MLOAD(array_div_len_quo)
617
+
618
+ ; 10] [72370055773322622139731865630429942408293740416025352524660990004945706024960n] / 2
619
+ 1 => C
620
+ 1 => D
621
+ 72370055773322622139731865630429942408293740416025352524660990004945706024960n :MSTORE(array_div_inA)
622
+ 2n :MSTORE(array_div_inB)
623
+ :CALL(array_div)
624
+ 36185027886661311069865932815214971204146870208012676262330495002472853012480n :MLOAD(array_div_quo)
625
+ 1 :MLOAD(array_div_len_quo)
626
+
627
+ ; 11] len(inB) = len(inA) and inB > inA
628
+ 4 => C
629
+ 2 => D
630
+ 9n :MSTORE(array_div_inA)
631
+ 1 => E
632
+ 8n :MSTORE(array_div_inA + E)
633
+ 2 => E
634
+ 7n :MSTORE(array_div_inA + E)
635
+ 3 => E
636
+ 6n :MSTORE(array_div_inA + E)
637
+
638
+ 8n :MSTORE(array_div_inB)
639
+ 1 => E
640
+ 1n :MSTORE(array_div_inB + E)
641
+ :CALL(array_div)
642
+ 335n :MLOAD(array_div_quo)
643
+ 1 => E
644
+ 115792089237316195423570985008687907853269984665640564039457584007913129639895n :MLOAD(array_div_quo + E)
645
+ 2 => E
646
+ 5n :MLOAD(array_div_quo + E)
647
+ 115792089237316195423570985008687907853269984665640564039457584007913129637265n :MLOAD(array_div_rem)
648
+
649
+ ; 12] [a, 7n, a, 12n, a, 20n, a, 80n] / [a, a, a, a, 100n]
650
+ 8 => C
651
+ 5 => D
652
+ 115792089237316195423570985008687907853269984665640564039457584007913129639935n :MSTORE(array_div_inA)
653
+ 1 => E
654
+ 7n :MSTORE(array_div_inA + E)
655
+ 2 => E
656
+ 115792089237316195423570985008687907853269984665640564039457584007913129639935n :MSTORE(array_div_inA + E)
657
+ 3 => E
658
+ 12n :MSTORE(array_div_inA + E)
659
+ 4 => E
660
+ 115792089237316195423570985008687907853269984665640564039457584007913129639935n :MSTORE(array_div_inA + E)
661
+ 5 => E
662
+ 20n :MSTORE(array_div_inA + E)
663
+ 6 => E
664
+ 115792089237316195423570985008687907853269984665640564039457584007913129639935n :MSTORE(array_div_inA + E)
665
+ 7 => E
666
+ 80n :MSTORE(array_div_inA + E)
667
+
668
+ 115792089237316195423570985008687907853269984665640564039457584007913129639935n :MSTORE(array_div_inB)
669
+ 1 => E
670
+ 115792089237316195423570985008687907853269984665640564039457584007913129639935n :MSTORE(array_div_inB + E)
671
+ 2 => E
672
+ 115792089237316195423570985008687907853269984665640564039457584007913129639935n :MSTORE(array_div_inB + E)
673
+ 3 => E
674
+ 115792089237316195423570985008687907853269984665640564039457584007913129639935n :MSTORE(array_div_inB + E)
675
+ 4 => E
676
+ 100n :MSTORE(array_div_inB + E)
677
+ :CALL(array_div)
678
+ 87130681010257731209815790699606742543054641926620622445532439451498988639951n :MLOAD(array_div_quo)
679
+ 1 => E
680
+ 76812574048516684092863920748337523031377118540573443471719387411189897879957n :MLOAD(array_div_quo + E)
681
+ 2 => E
682
+ 92862962655669424052566829561422975605097710474424610764317468362781816839948n :MLOAD(array_div_quo + E)
683
+ 87130681010257731209815790699606742543054641926620622445532439451498988639950n :MLOAD(array_div_rem)
684
+ 1 => E
685
+ 76812574048516684092863920748337523031377118540573443471719387411189897879965n :MLOAD(array_div_rem + E)
686
+ 2 => E
687
+ 92862962655669424052566829561422975605097710474424610764317468362781816839947n :MLOAD(array_div_rem + E)
688
+ 3 => E
689
+ 13n :MLOAD(array_div_rem + E)
690
+ 4 => E
691
+ 84n :MLOAD(array_div_rem + E)
692
+
693
+ ; 13] [82987931714326364316120253427931880709278140571418487333162713377057429160720n,4257238595720679277571917967782652353394431698489248379634099239588181418140n,15209178211456919413336795740141505754388379695813905932093982440742677791802n,88987534839350135473536361176867192550264928852523682165693061442019881855583n,14n], [4n, 6n, 7n]
694
+ 5 => C
695
+ 3 => D
696
+ 82987931714326364316120253427931880709278140571418487333162713377057429160720n :MSTORE(array_div_inA)
697
+ 1 => E
698
+ 4257238595720679277571917967782652353394431698489248379634099239588181418140n :MSTORE(array_div_inA + E)
699
+ 2 => E
700
+ 15209178211456919413336795740141505754388379695813905932093982440742677791802n :MSTORE(array_div_inA + E)
701
+ 3 => E
702
+ 88987534839350135473536361176867192550264928852523682165693061442019881855583n :MSTORE(array_div_inA + E)
703
+ 4 => E
704
+ 14n :MSTORE(array_div_inA + E)
705
+
706
+ 4n :MSTORE(array_div_inB)
707
+ 1 => E
708
+ 6n :MSTORE(array_div_inB + E)
709
+ 2 => E
710
+ 7n :MSTORE(array_div_inB + E)
711
+ :CALL(array_div)
712
+ 90526669110436282262084097418054683975846294708417529350769755852355732618090n :MLOAD(array_div_quo)
713
+ 1 => E
714
+ 12712504977050019353362337310981027507180704121789097452241865920288554550795n :MLOAD(array_div_quo + E)
715
+ 2 => E
716
+ 2n :MLOAD(array_div_quo + E)
717
+ 68257522984529821538496818781776868365702915734670062048456441991373887608168n :MLOAD(array_div_rem)
718
+ 1 => E
719
+ 104999739448800080833043894267657885589213754954671066702793604491778345346033n :MSTORE(array_div_rem + E)
720
+ 2 => E
721
+ 4n :MSTORE(array_div_rem + E)
722
+ 3 :MLOAD(array_div_len_quo)
723
+ 3 :MLOAD(array_div_len_rem)
724
+
725
+ ; 14] [0n,0n,0n,0n,87552057494100699607633960453116574392480272162273084008350826812719088235449n,29405388739667337424543497575767709934732594998639086405406332616399343873602n,370491411790392985199n], [0n, 0n, 8238129386n, 23102318237n]
726
+ 7 => C
727
+ 4 => D
728
+ 0n :MSTORE(array_div_inA)
729
+ 1 => E
730
+ 0n :MSTORE(array_div_inA + E)
731
+ 2 => E
732
+ 0n :MSTORE(array_div_inA + E)
733
+ 3 => E
734
+ 0n :MSTORE(array_div_inA + E)
735
+ 4 => E
736
+ 87552057494100699607633960453116574392480272162273084008350826812719088235449n :MSTORE(array_div_inA + E)
737
+ 5 => E
738
+ 29405388739667337424543497575767709934732594998639086405406332616399343873602n :MSTORE(array_div_inA + E)
739
+ 6 => E
740
+ 370491411790392985199n :MSTORE(array_div_inA + E)
741
+
742
+ 0n :MSTORE(array_div_inB)
743
+ 1 => E
744
+ 0n :MSTORE(array_div_inB + E)
745
+ 2 => E
746
+ 8238129386n :MSTORE(array_div_inB + E)
747
+ 3 => E
748
+ 23102318237n :MSTORE(array_div_inB + E)
749
+ :CALL(array_div)
750
+ 10624890954144362706283399919870985530330343554129711486796784890935496833177n :MLOAD(array_div_quo)
751
+ 1 => E
752
+ 12699239907746414269759600684072701206520647567004427767570235373004025148518n :MLOAD(array_div_quo + E)
753
+ 2 => E
754
+ 62973947849727744055941265906651873030488901951864462234513788026171769471385n :MLOAD(array_div_quo + E)
755
+ 3 => E
756
+ 16036979838n :MLOAD(array_div_quo + E)
757
+ 0n :MLOAD(array_div_rem)
758
+ 1 => E
759
+ 0n :MSTORE(array_div_rem + E)
760
+ 2 => E
761
+ 43811746908501644357293832343774991028053014234938611947183500936834952782886n :MSTORE(array_div_rem + E)
762
+ 3 => E
763
+ 6019321230n :MSTORE(array_div_rem + E)
764
+ 4 :MLOAD(array_div_len_quo)
765
+ 4 :MLOAD(array_div_len_rem)
766
+
767
+ ; 15] [7n], [7719472615821079694904732333912527190217998977709370935963838933860875309329n, 17n]
768
+ 1 => C
769
+ 2 => D
770
+ 7n :MSTORE(array_div_inA)
771
+ 7719472615821079694904732333912527190217998977709370935963838933860875309329n :MSTORE(array_div_inB)
772
+ 1 => E
773
+ 17n :MSTORE(array_div_inB + E)
774
+ :CALL(array_div)
775
+ 0n :MLOAD(array_div_quo)
776
+ 7n :MLOAD(array_div_rem)
777
+ 1 :MLOAD(array_div_len_quo)
778
+ 1 :MLOAD(array_div_len_rem)
779
+
780
+ ; 16] [9,12,16,2,0,2**256-4], [2**256-1,2**256-1]
781
+ 6 => C
782
+ 2 => D
783
+ 9n :MSTORE(array_div_inA)
784
+ 115792089237316195423570985008687907853269984665640564039457584007913129639935n :MSTORE(array_div_inB)
785
+ 1 => E
786
+ 12n :MSTORE(array_div_inA + E)
787
+ 115792089237316195423570985008687907853269984665640564039457584007913129639935n :MSTORE(array_div_inB + E)
788
+ 2 => E
789
+ 16n :MSTORE(array_div_inA + E)
790
+ 3 => E
791
+ 2n :MSTORE(array_div_inA + E)
792
+ 4 => E
793
+ 0n :MSTORE(array_div_inA + E)
794
+ 5 => E
795
+ 115792089237316195423570985008687907853269984665640564039457584007913129639932n :MSTORE(array_div_inA + E)
796
+ :CALL(array_div)
797
+ 4 :MLOAD(array_div_len_quo)
798
+ 2 :MLOAD(array_div_len_rem)
799
+ 17n :MLOAD(array_div_quo)
800
+ 26n :MLOAD(array_div_rem)
801
+ 1 => E
802
+ 115792089237316195423570985008687907853269984665640564039457584007913129639934n :MLOAD(array_div_quo + E)
803
+ 10n :MLOAD(array_div_rem + E)
804
+ 2 => E
805
+ 0n :MLOAD(array_div_quo + E)
806
+ 3 => E
807
+ 115792089237316195423570985008687907853269984665640564039457584007913129639932n :MLOAD(array_div_quo + E)
808
+ ; ---------------------------------------------------------------
809
+
810
+ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
811
+ ;; UNUSED
812
+ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
813
+
814
+ ; addition
815
+ ; ---------------------------------------------------------------
816
+ ; 1] len(inA) = len(inB)
817
+ 3 => C
818
+ 3 => D
819
+ 115792089237316195423570985008687907853269984665640564039457584007913129639935n :MSTORE(array_add_inA)
820
+ 1 => E
821
+ 115792089237316195423570985008687907853269984665640564039457584007913129639935n :MSTORE(array_add_inA + E)
822
+ 2 => E
823
+ 115792089237316195423570985008687907853269984665640564039457584007913129639935n :MSTORE(array_add_inA + E)
824
+
825
+ 115792089237316195423570985008687907853269984665640564039457584007913129639935n :MSTORE(array_add_inB)
826
+ 1 => E
827
+ 115792089237316195423570985008687907853269984665640564039457584007913129639935n :MSTORE(array_add_inB + E)
828
+ 2 => E
829
+ 115792089237316195423570985008687907853269984665640564039457584007913129639935n :MSTORE(array_add_inB + E)
830
+ :CALL(array_add)
831
+ 115792089237316195423570985008687907853269984665640564039457584007913129639934n :MLOAD(array_add_out)
832
+ 1 => E
833
+ 115792089237316195423570985008687907853269984665640564039457584007913129639935n :MLOAD(array_add_out + E)
834
+ 2 => E
835
+ 115792089237316195423570985008687907853269984665640564039457584007913129639935n :MLOAD(array_add_out + E)
836
+ 3 => E
837
+ 1n :MLOAD(array_add_out + E)
838
+ 4 :MLOAD(array_add_len_out)
839
+
840
+ ; 2] len(inA) = len(inB) + 1
841
+ 3 => C
842
+ 2 => D
843
+ 115792089237316195423570985008687907853269984665640564039457584007913129639935n :MSTORE(array_add_inA)
844
+ 1 => E
845
+ 115792089237316195423570985008687907853269984665640564039457584007913129639935n :MSTORE(array_add_inA + E)
846
+ 2 => E
847
+ 115792089237316195423570985008687907853269984665640564039457584007913129639935n :MSTORE(array_add_inA + E)
848
+
849
+ 115792089237316195423570985008687907853269984665640564039457584007913129639935n :MSTORE(array_add_inB)
850
+ 1 => E
851
+ 115792089237316195423570985008687907853269984665640564039457584007913129639935n :MSTORE(array_add_inB + E)
852
+ :CALL(array_add)
853
+ 115792089237316195423570985008687907853269984665640564039457584007913129639934n :MLOAD(array_add_out)
854
+ 1 => E
855
+ 115792089237316195423570985008687907853269984665640564039457584007913129639935n :MLOAD(array_add_out + E)
856
+ 2 => E
857
+ 0n :MLOAD(array_add_out + E)
858
+ 3 => E
859
+ 1n :MLOAD(array_add_out + E)
860
+ 4 :MLOAD(array_add_len_out)
861
+
862
+ ; 3] len(inA) = len(inB) + 3
863
+ 7 => C
864
+ 4 => D
865
+ 0n :MSTORE(array_add_inA)
866
+ 1 => E
867
+ 0n :MSTORE(array_add_inA + E)
868
+ 2 => E
869
+ 71980342328814551066277152664912916825216970430701952092274083071078176857050n :MSTORE(array_add_inA + E)
870
+ 3 => E
871
+ 115792089237316195423570985008687907853269984665640564039457584007907110318705n :MSTORE(array_add_inA + E)
872
+ 4 => E
873
+ 87552057494100699607633960453116574392480272162273084008350826812719088235448n :MSTORE(array_add_inA + E)
874
+ 5 => E
875
+ 29405388739667337424543497575767709934732594998639086405406332616399343873602n :MSTORE(array_add_inA + E)
876
+ 6 => E
877
+ 370491411790392985199n :MSTORE(array_add_inA + E)
878
+
879
+ 0n :MSTORE(array_add_inB)
880
+ 1 => E
881
+ 0n :MSTORE(array_add_inB + E)
882
+ 2 => E
883
+ 43811746908501644357293832343774991028053014234938611947183500936834952782886n :MSTORE(array_add_inB + E)
884
+ 3 => E
885
+ 6019321230n :MSTORE(array_add_inB + E)
886
+ :CALL(array_add)
887
+ 0n :MLOAD(array_add_out)
888
+ 1 => E
889
+ 0n :MLOAD(array_add_out + E)
890
+ 2 => E
891
+ 0n :MLOAD(array_add_out + E)
892
+ 3 => E
893
+ 0n :MLOAD(array_add_out + E)
894
+ 4 => E
895
+ 87552057494100699607633960453116574392480272162273084008350826812719088235449n :MLOAD(array_add_out + E)
896
+ 5 => E
897
+ 29405388739667337424543497575767709934732594998639086405406332616399343873602n :MLOAD(array_add_out + E)
898
+ 6 => E
899
+ 370491411790392985199n :MLOAD(array_add_out + E)
900
+ 7 :MLOAD(array_add_len_out)
901
+
902
+ ; 4] len(inA) = len(inB) - 3
903
+ 4 => C
904
+ 7 => D
905
+ 0n :MSTORE(array_add_inA)
906
+ 1 => E
907
+ 0n :MSTORE(array_add_inA + E)
908
+ 2 => E
909
+ 43811746908501644357293832343774991028053014234938611947183500936834952782886n :MSTORE(array_add_inA + E)
910
+ 3 => E
911
+ 6019321230n :MSTORE(array_add_inA + E)
912
+
913
+ 0n :MSTORE(array_add_inB)
914
+ 1 => E
915
+ 0n :MSTORE(array_add_inB + E)
916
+ 2 => E
917
+ 71980342328814551066277152664912916825216970430701952092274083071078176857050n :MSTORE(array_add_inB + E)
918
+ 3 => E
919
+ 115792089237316195423570985008687907853269984665640564039457584007907110318705n :MSTORE(array_add_inB + E)
920
+ 4 => E
921
+ 87552057494100699607633960453116574392480272162273084008350826812719088235448n :MSTORE(array_add_inB + E)
922
+ 5 => E
923
+ 29405388739667337424543497575767709934732594998639086405406332616399343873602n :MSTORE(array_add_inB + E)
924
+ 6 => E
925
+ 370491411790392985199n :MSTORE(array_add_inB + E)
926
+ :CALL(array_add)
927
+ 0n :MLOAD(array_add_out)
928
+ 1 => E
929
+ 0n :MLOAD(array_add_out + E)
930
+ 2 => E
931
+ 0n :MLOAD(array_add_out + E)
932
+ 3 => E
933
+ 0n :MLOAD(array_add_out + E)
934
+ 4 => E
935
+ 87552057494100699607633960453116574392480272162273084008350826812719088235449n :MLOAD(array_add_out + E)
936
+ 5 => E
937
+ 29405388739667337424543497575767709934732594998639086405406332616399343873602n :MLOAD(array_add_out + E)
938
+ 6 => E
939
+ 370491411790392985199n :MLOAD(array_add_out + E)
940
+ 7 :MLOAD(array_add_len_out)
941
+ ; ---------------------------------------------------------------
942
+
943
+ ; subtraction with len(inA) >= len(inB)
944
+ ; ---------------------------------------------------------------
945
+ ; 1] len(inA) > len(inB) and inA_i >= inb_i for all i
946
+ 3 => C
947
+ 2 => D
948
+ 5n :MSTORE(array_sub_AGTB_inA)
949
+ 1 => E
950
+ 6n :MSTORE(array_sub_AGTB_inA + E)
951
+ 2 => E
952
+ 7n :MSTORE(array_sub_AGTB_inA + E)
953
+
954
+ 2n :MSTORE(array_sub_AGTB_inB)
955
+ 1 => E
956
+ 3n :MSTORE(array_sub_AGTB_inB + E)
957
+ :CALL(array_sub_AGTB)
958
+ 3n :MLOAD(array_sub_AGTB_out)
959
+ 1 => E
960
+ 3n :MLOAD(array_sub_AGTB_out + E)
961
+ 2 => E
962
+ 7n :MLOAD(array_sub_AGTB_out + E)
963
+
964
+ ; 2] len(inA) > len(inB) and inA_i < inb_i for some i
965
+ 3 => C
966
+ 2 => D
967
+ 5n :MSTORE(array_sub_AGTB_inA)
968
+ 1 => E
969
+ 6n :MSTORE(array_sub_AGTB_inA + E)
970
+ 2 => E
971
+ 7n :MSTORE(array_sub_AGTB_inA + E)
972
+
973
+ 6n :MSTORE(array_sub_AGTB_inB)
974
+ 1 => E
975
+ 3n :MSTORE(array_sub_AGTB_inB + E)
976
+ :CALL(array_sub_AGTB)
977
+ 115792089237316195423570985008687907853269984665640564039457584007913129639935n :MLOAD(array_sub_AGTB_out)
978
+ 1 => E
979
+ 2n :MLOAD(array_sub_AGTB_out + E)
980
+ 2 => E
981
+ 7n :MLOAD(array_sub_AGTB_out + E)
982
+
983
+ ; 3] len(inA) > len(inB) and inA_i < inB_i for all i lower than len(inA)
984
+ 3 => C
985
+ 2 => D
986
+ 5n :MSTORE(array_sub_AGTB_inA)
987
+ 1 => E
988
+ 1n :MSTORE(array_sub_AGTB_inA + E)
989
+ 2 => E
990
+ 7n :MSTORE(array_sub_AGTB_inA + E)
991
+
992
+ 6n :MSTORE(array_sub_AGTB_inB)
993
+ 1 => E
994
+ 8n :MSTORE(array_sub_AGTB_inB + E)
995
+ :CALL(array_sub_AGTB)
996
+ 115792089237316195423570985008687907853269984665640564039457584007913129639935n :MLOAD(array_sub_AGTB_out)
997
+ 1 => E
998
+ 115792089237316195423570985008687907853269984665640564039457584007913129639928n :MLOAD(array_sub_AGTB_out + E)
999
+ 2 => E
1000
+ 6n :MLOAD(array_sub_AGTB_out + E)
1001
+
1002
+ ; 4] len(inB) > len(inA) and inB_i < inA_i for all i lower than len(inB)
1003
+ 3 => C
1004
+ 2 => D
1005
+ 6n :MSTORE(array_sub_AGTB_inB)
1006
+ 1 => E
1007
+ 8n :MSTORE(array_sub_AGTB_inB + E)
1008
+
1009
+ 5n :MSTORE(array_sub_AGTB_inA)
1010
+ 1 => E
1011
+ 1n :MSTORE(array_sub_AGTB_inA + E)
1012
+ 2 => E
1013
+ 7n :MSTORE(array_sub_AGTB_inA + E)
1014
+ :CALL(array_sub_AGTB)
1015
+ 115792089237316195423570985008687907853269984665640564039457584007913129639935n :MLOAD(array_sub_AGTB_out)
1016
+ 1 => E
1017
+ 115792089237316195423570985008687907853269984665640564039457584007913129639928n :MLOAD(array_sub_AGTB_out + E)
1018
+ 2 => E
1019
+ 6n :MLOAD(array_sub_AGTB_out + E)
1020
+
1021
+ ; 5] len(inB) = len(inA) and inB > inA
1022
+ 3 => C
1023
+ 3 => D
1024
+ 6n :MSTORE(array_sub_AGTB_inB)
1025
+ 1 => E
1026
+ 8n :MSTORE(array_sub_AGTB_inB + E)
1027
+ 2 => E
1028
+ 8n :MSTORE(array_sub_AGTB_inB + E)
1029
+
1030
+ 7n :MSTORE(array_sub_AGTB_inA)
1031
+ 1 => E
1032
+ 8n :MSTORE(array_sub_AGTB_inA + E)
1033
+ 2 => E
1034
+ 8n :MSTORE(array_sub_AGTB_inA + E)
1035
+ :CALL(array_sub_AGTB)
1036
+ 1n :MLOAD(array_sub_AGTB_out)
1037
+ 1 => E
1038
+ 0n :MLOAD(array_sub_AGTB_out + E)
1039
+ 2 => E
1040
+ 0n :MLOAD(array_sub_AGTB_out + E)
1041
+ ; ---------------------------------------------------------------
1042
+
1043
+ :JMP(end)
1044
+
1045
+ outOfCountersBinary:
1046
+ ${dump(CNT_BINARY)} :JMP(end)
1047
+ outOfCountersStep:
1048
+ ${dump(STEP)} :JMP(end)
1049
+ outOfCountersArith:
1050
+ ${dump(CNT_ARITH)} :JMP(end)
1051
+
1052
+ ;@info function to force a failed assert
1053
+ failAssert:
1054
+ 1 => A
1055
+ 2 :ASSERT
1056
+
1057
+ end:
1058
+
1059
+ $ => A :MLOAD(initial_A)
1060
+ $ => B :MLOAD(initial_B)
1061
+ $ => C :MLOAD(initial_C)
1062
+ $ => D :MLOAD(initial_D)
1063
+ $ => E :MLOAD(initial_E)
1064
+ $ => CTX :MLOAD(initial_CTX)
1065
+ $ => SP :MLOAD(initial_SP)
1066
+ $ => PC :MLOAD(initial_PC)
1067
+ $ => GAS :MLOAD(initial_GAS)
1068
+ $ => SR :MLOAD(initial_SR)
1069
+ $ => RR :MLOAD(initial_RR)
1070
+ $ => HASHPOS :MLOAD(initial_HASHPOS)
1071
+ $ => RCX :MLOAD(initial_RCX)
1072
+
1073
+ ; label finalizeExecution needed by executor C++
1074
+ finalizeExecution:
1075
+ ${beforeLast()} : JMPN(finalizeExecution)
1076
+
1077
+ : JMP(start)
1078
+ opINVALID:
1079
+ ; label checkAndSaveFrom needed by executor C++
1080
+ checkAndSaveFrom:
1081
+ :JMP(opINVALID)
1082
+
1083
+ INCLUDE "../main/modexp/constants.zkasm"
1084
+
1085
+ INCLUDE "../main/modexp/array_lib/utils/array_trim.zkasm"
1086
+ INCLUDE "../main/modexp/array_lib/utils/array_compare.zkasm"
1087
+
1088
+ INCLUDE "../main/modexp/array_lib/array_add_short.zkasm"
1089
+ INCLUDE "../main/modexp/array_lib/array_add_AGTB.zkasm"
1090
+ INCLUDE "../main/modexp/array_lib/array_mul_long.zkasm"
1091
+ INCLUDE "../main/modexp/array_lib/array_mul_short.zkasm"
1092
+ INCLUDE "../main/modexp/array_lib/array_mul.zkasm"
1093
+ INCLUDE "../main/modexp/array_lib/array_square.zkasm"
1094
+ INCLUDE "../main/modexp/array_lib/array_div_long.zkasm"
1095
+ INCLUDE "../main/modexp/array_lib/array_div_short.zkasm"
1096
+ INCLUDE "../main/modexp/array_lib/array_div.zkasm"
1097
+
1098
+ INCLUDE "../main/modexp/array_lib/unused/array_sub_AGTB.zkasm"
1099
+ INCLUDE "../main/modexp/array_lib/unused/array_add.zkasm"