diff --git a/release-v0.12.0-rc.2/chunk.protocol b/release-v0.12.0-rc.2/chunk.protocol new file mode 100644 index 00000000..cc4a8c3d --- /dev/null +++ b/release-v0.12.0-rc.2/chunk.protocol @@ -0,0 +1 @@ +{"domain":{"k":25,"n":33554432,"n_inv":[0,0,0,549755813888],"gen":[13338605924273364442,11440449704248451096,16859609365912477452,3421252324365184758],"gen_inv":[2738242980467392064,8765460162850139420,6637814084492473216,1260493707339115276]},"preprocessed":[{"x":[4541478842587617678,7188475718571567728,239378696823010373,179342154257362491],"y":[2102960765482384605,18163083796572731063,17943480866217266774,85103875006328896]},{"x":[1541394190479662465,4562312136952983419,3788241223482253489,1599430736440842275],"y":[3728337320503902975,12483727791400366025,5262755013951840488,2642221915127500133]},{"x":[7101844747244496546,8008120421692633860,6063298771205485124,1386525521981746351],"y":[12199442545790741457,9462570394882845676,8749066902280499976,2127680477462772680]},{"x":[8355531890782583874,18350809629336219547,17455522793157446291,63185263426592802],"y":[2151734486223750160,207439545836131066,4102568562501770087,3363146312916347849]},{"x":[17947816695495615544,8530467689725664673,17724960609693060801,1155576769598010385],"y":[2984829142046772055,17521279544910862013,1952842372135886533,1349611915219994024]},{"x":[17947774933688024860,276594292776566561,3716851716728716817,3029062574279104356],"y":[15196196069009662006,1454190411229663059,18164541604420189369,3400934937572994028]},{"x":[5142763791322143985,8528581729225995736,12791506293512033724,2714155084188219863],"y":[18093543604541917915,14073000898511852041,1365578612964630067,3430975123211179011]}],"num_instance":[44],"num_witness":[1,1,3],"num_challenge":[1,2,1],"evaluations":[{"poly":8,"rotation":0},{"poly":8,"rotation":1},{"poly":8,"rotation":2},{"poly":8,"rotation":3},{"poly":1,"rotation":0},{"poly":0,"rotation":0},{"poly":2,"rotation":0},{"poly":3,"rotation":0},{"poly":12,"rotation":0},{"poly":4,"rotation":0},{"poly":5,"rotation":0},{"poly":6,"rotation":0},{"poly":10,"rotation":0},{"poly":10,"rotation":1},{"poly":11,"rotation":0},{"poly":11,"rotation":1},{"poly":9,"rotation":0}],"queries":[{"poly":8,"rotation":0},{"poly":8,"rotation":1},{"poly":8,"rotation":2},{"poly":8,"rotation":3},{"poly":10,"rotation":0},{"poly":10,"rotation":1},{"poly":11,"rotation":0},{"poly":11,"rotation":1},{"poly":9,"rotation":0},{"poly":1,"rotation":0},{"poly":0,"rotation":0},{"poly":2,"rotation":0},{"poly":3,"rotation":0},{"poly":4,"rotation":0},{"poly":5,"rotation":0},{"poly":6,"rotation":0},{"poly":13,"rotation":0},{"poly":12,"rotation":0}],"quotient":{"num_chunk":4,"chunk_degree":1,"numerator":{"DistributePowers":[[{"Product":[{"Polynomial":{"poly":2,"rotation":0}},{"Sum":[{"Sum":[{"Polynomial":{"poly":8,"rotation":0}},{"Product":[{"Polynomial":{"poly":8,"rotation":1}},{"Polynomial":{"poly":8,"rotation":2}}]}]},{"Negated":{"Polynomial":{"poly":8,"rotation":3}}}]}]},{"Product":[{"CommonPolynomial":{"Lagrange":0}},{"Sum":[{"Constant":[12436184717236109307,3962172157175319849,7381016538464732718,1011752739694698287]},{"Negated":{"Polynomial":{"poly":10,"rotation":0}}}]}]},{"Product":[{"CommonPolynomial":{"Lagrange":-7}},{"Sum":[{"Product":[{"Polynomial":{"poly":10,"rotation":0}},{"Polynomial":{"poly":10,"rotation":0}}]},{"Negated":{"Polynomial":{"poly":10,"rotation":0}}}]}]},{"Product":[{"Sum":[{"Sum":[{"Constant":[12436184717236109307,3962172157175319849,7381016538464732718,1011752739694698287]},{"Negated":{"CommonPolynomial":{"Lagrange":-7}}}]},{"Negated":{"Sum":[{"Sum":[{"Sum":[{"Sum":[{"Sum":[{"CommonPolynomial":{"Lagrange":-6}},{"CommonPolynomial":{"Lagrange":-5}}]},{"CommonPolynomial":{"Lagrange":-4}}]},{"CommonPolynomial":{"Lagrange":-3}}]},{"CommonPolynomial":{"Lagrange":-2}}]},{"CommonPolynomial":{"Lagrange":-1}}]}}]},{"Sum":[{"Product":[{"Polynomial":{"poly":10,"rotation":1}},{"Product":[{"Product":[{"Sum":[{"Sum":[{"Polynomial":{"poly":1,"rotation":0}},{"Product":[{"Challenge":1},{"Polynomial":{"poly":4,"rotation":0}}]}]},{"Challenge":2}]},{"Sum":[{"Sum":[{"Polynomial":{"poly":8,"rotation":0}},{"Product":[{"Challenge":1},{"Polynomial":{"poly":5,"rotation":0}}]}]},{"Challenge":2}]}]},{"Sum":[{"Sum":[{"Polynomial":{"poly":7,"rotation":0}},{"Product":[{"Challenge":1},{"Polynomial":{"poly":6,"rotation":0}}]}]},{"Challenge":2}]}]}]},{"Negated":{"Product":[{"Polynomial":{"poly":10,"rotation":0}},{"Product":[{"Product":[{"Sum":[{"Sum":[{"Polynomial":{"poly":1,"rotation":0}},{"Product":[{"Product":[{"Challenge":1},{"Constant":[12436184717236109307,3962172157175319849,7381016538464732718,1011752739694698287]}]},{"CommonPolynomial":"Identity"}]}]},{"Challenge":2}]},{"Sum":[{"Sum":[{"Polynomial":{"poly":8,"rotation":0}},{"Product":[{"Product":[{"Challenge":1},{"Constant":[11100302345850292309,5109383341788583484,6450182039226333095,2498166472155664813]}]},{"CommonPolynomial":"Identity"}]}]},{"Challenge":2}]}]},{"Sum":[{"Sum":[{"Polynomial":{"poly":7,"rotation":0}},{"Product":[{"Product":[{"Challenge":1},{"Constant":[11922143911221101039,4762855335879493275,9634852812984583437,2104342265551292894]}]},{"CommonPolynomial":"Identity"}]}]},{"Challenge":2}]}]}]}}]}]},{"Product":[{"CommonPolynomial":{"Lagrange":0}},{"Polynomial":{"poly":11,"rotation":0}}]},{"Product":[{"CommonPolynomial":{"Lagrange":-7}},{"Polynomial":{"poly":11,"rotation":0}}]},{"Product":[{"Sum":[{"Sum":[{"Constant":[12436184717236109307,3962172157175319849,7381016538464732718,1011752739694698287]},{"Negated":{"CommonPolynomial":{"Lagrange":-7}}}]},{"Negated":{"Sum":[{"Sum":[{"Sum":[{"Sum":[{"Sum":[{"CommonPolynomial":{"Lagrange":-6}},{"CommonPolynomial":{"Lagrange":-5}}]},{"CommonPolynomial":{"Lagrange":-4}}]},{"CommonPolynomial":{"Lagrange":-3}}]},{"CommonPolynomial":{"Lagrange":-2}}]},{"CommonPolynomial":{"Lagrange":-1}}]}}]},{"Sum":[{"Product":[{"Product":[{"Sum":[{"DistributePowers":[[{"Polynomial":{"poly":0,"rotation":0}}],{"Challenge":0}]},{"Challenge":1}]},{"Sum":[{"DistributePowers":[[{"Product":[{"Polynomial":{"poly":3,"rotation":0}},{"Polynomial":{"poly":8,"rotation":0}}]}],{"Challenge":0}]},{"Challenge":1}]}]},{"Sum":[{"Polynomial":{"poly":11,"rotation":1}},{"Negated":{"Polynomial":{"poly":11,"rotation":0}}}]}]},{"Negated":{"Sum":[{"Sum":[{"DistributePowers":[[{"Polynomial":{"poly":0,"rotation":0}}],{"Challenge":0}]},{"Challenge":1}]},{"Negated":{"Product":[{"Polynomial":{"poly":9,"rotation":0}},{"Sum":[{"DistributePowers":[[{"Product":[{"Polynomial":{"poly":3,"rotation":0}},{"Polynomial":{"poly":8,"rotation":0}}]}],{"Challenge":0}]},{"Challenge":1}]}]}}]}}]}]}],{"Challenge":3}]}},"transcript_initial_state":[12347828844076607968,3508860499254401522,14536133996531157714,3126323184451899813],"instance_committing_key":null,"linearization":null,"accumulator_indices":[[[0,0],[0,1],[0,2],[0,3],[0,4],[0,5],[0,6],[0,7],[0,8],[0,9],[0,10],[0,11]]]} \ No newline at end of file diff --git a/release-v0.12.0-rc.2/evm_verifier.bin b/release-v0.12.0-rc.2/evm_verifier.bin new file mode 100644 index 00000000..b77f5386 Binary files /dev/null and b/release-v0.12.0-rc.2/evm_verifier.bin differ diff --git a/release-v0.12.0-rc.2/evm_verifier.yul b/release-v0.12.0-rc.2/evm_verifier.yul new file mode 100644 index 00000000..ec5d98ce --- /dev/null +++ b/release-v0.12.0-rc.2/evm_verifier.yul @@ -0,0 +1,1475 @@ + + 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 x_is_zero:bool := eq(x, 0) + let y_is_zero:bool := eq(y, 0) + let x_or_y_is_zero:bool := or(x_is_zero, y_is_zero) + let x_and_y_is_not_zero:bool := not(x_or_y_is_zero) + valid := and(x_and_y_is_not_zero, valid) + } + { + 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 y_square_eq_x_cube_plus_3:bool := eq(x_cube_plus_3, y_square) + valid := and(y_square_eq_x_cube_plus_3, valid) + } + } + 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(0x0, 13725526659497265766104910525907481221790365608121445043719084805493409281074) + + { + let x := calldataload(0x320) + mstore(0x340, x) + let y := calldataload(0x340) + mstore(0x360, y) + success := and(validate_ec_point(x, y), success) + } + + { + let x := calldataload(0x360) + mstore(0x380, x) + let y := calldataload(0x380) + mstore(0x3a0, y) + success := and(validate_ec_point(x, y), success) + } + + { + let x := calldataload(0x3a0) + mstore(0x3c0, x) + let y := calldataload(0x3c0) + mstore(0x3e0, y) + success := and(validate_ec_point(x, y), success) + } +mstore(0x400, keccak256(0x0, 1024)) +{ + let hash := mload(0x400) + mstore(0x420, mod(hash, f_q)) + mstore(0x440, hash) + } + + { + let x := calldataload(0x3e0) + mstore(0x460, x) + let y := calldataload(0x400) + mstore(0x480, y) + success := and(validate_ec_point(x, y), success) + } +mstore(0x4a0, keccak256(0x440, 96)) +{ + let hash := mload(0x4a0) + mstore(0x4c0, mod(hash, f_q)) + mstore(0x4e0, hash) + } +mstore8(1280, 1) +mstore(0x500, keccak256(0x4e0, 33)) +{ + let hash := mload(0x500) + mstore(0x520, mod(hash, f_q)) + mstore(0x540, hash) + } + + { + let x := calldataload(0x420) + mstore(0x560, x) + let y := calldataload(0x440) + mstore(0x580, y) + success := and(validate_ec_point(x, y), success) + } + + { + let x := calldataload(0x460) + mstore(0x5a0, x) + let y := calldataload(0x480) + mstore(0x5c0, y) + success := and(validate_ec_point(x, y), success) + } + + { + let x := calldataload(0x4a0) + mstore(0x5e0, x) + let y := calldataload(0x4c0) + mstore(0x600, y) + success := and(validate_ec_point(x, y), success) + } + + { + let x := calldataload(0x4e0) + mstore(0x620, x) + let y := calldataload(0x500) + mstore(0x640, y) + success := and(validate_ec_point(x, y), success) + } +mstore(0x660, keccak256(0x540, 288)) +{ + let hash := mload(0x660) + mstore(0x680, mod(hash, f_q)) + mstore(0x6a0, hash) + } + + { + let x := calldataload(0x520) + mstore(0x6c0, x) + let y := calldataload(0x540) + mstore(0x6e0, y) + success := and(validate_ec_point(x, y), success) + } + + { + let x := calldataload(0x560) + mstore(0x700, x) + let y := calldataload(0x580) + mstore(0x720, y) + success := and(validate_ec_point(x, y), success) + } + + { + let x := calldataload(0x5a0) + mstore(0x740, x) + let y := calldataload(0x5c0) + mstore(0x760, y) + success := and(validate_ec_point(x, y), success) + } + + { + let x := calldataload(0x5e0) + mstore(0x780, x) + let y := calldataload(0x600) + mstore(0x7a0, y) + success := and(validate_ec_point(x, y), success) + } +mstore(0x7c0, keccak256(0x6a0, 288)) +{ + let hash := mload(0x7c0) + mstore(0x7e0, mod(hash, f_q)) + mstore(0x800, hash) + } +mstore(0x820, mod(calldataload(0x620), f_q)) +mstore(0x840, mod(calldataload(0x640), f_q)) +mstore(0x860, mod(calldataload(0x660), f_q)) +mstore(0x880, mod(calldataload(0x680), f_q)) +mstore(0x8a0, mod(calldataload(0x6a0), f_q)) +mstore(0x8c0, mod(calldataload(0x6c0), f_q)) +mstore(0x8e0, mod(calldataload(0x6e0), f_q)) +mstore(0x900, mod(calldataload(0x700), f_q)) +mstore(0x920, mod(calldataload(0x720), f_q)) +mstore(0x940, mod(calldataload(0x740), f_q)) +mstore(0x960, mod(calldataload(0x760), f_q)) +mstore(0x980, mod(calldataload(0x780), f_q)) +mstore(0x9a0, mod(calldataload(0x7a0), f_q)) +mstore(0x9c0, mod(calldataload(0x7c0), f_q)) +mstore(0x9e0, mod(calldataload(0x7e0), f_q)) +mstore(0xa00, mod(calldataload(0x800), f_q)) +mstore(0xa20, mod(calldataload(0x820), f_q)) +mstore(0xa40, mod(calldataload(0x840), f_q)) +mstore(0xa60, mod(calldataload(0x860), f_q)) +mstore(0xa80, mod(calldataload(0x880), f_q)) +mstore(0xaa0, mod(calldataload(0x8a0), f_q)) +mstore(0xac0, mod(calldataload(0x8c0), f_q)) +mstore(0xae0, mod(calldataload(0x8e0), f_q)) +mstore(0xb00, mod(calldataload(0x900), f_q)) +mstore(0xb20, mod(calldataload(0x920), f_q)) +mstore(0xb40, mod(calldataload(0x940), f_q)) +mstore(0xb60, mod(calldataload(0x960), f_q)) +mstore(0xb80, keccak256(0x800, 896)) +{ + let hash := mload(0xb80) + mstore(0xba0, mod(hash, f_q)) + mstore(0xbc0, hash) + } +mstore8(3040, 1) +mstore(0xbe0, keccak256(0xbc0, 33)) +{ + let hash := mload(0xbe0) + mstore(0xc00, mod(hash, f_q)) + mstore(0xc20, hash) + } + + { + let x := calldataload(0x980) + mstore(0xc40, x) + let y := calldataload(0x9a0) + mstore(0xc60, y) + success := and(validate_ec_point(x, y), success) + } +mstore(0xc80, keccak256(0xc20, 96)) +{ + let hash := mload(0xc80) + mstore(0xca0, mod(hash, f_q)) + mstore(0xcc0, hash) + } + + { + let x := calldataload(0x9c0) + mstore(0xce0, x) + let y := calldataload(0x9e0) + mstore(0xd00, 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(3360, x) +let y := mload(0x80) +y := add(y, shl(88, mload(0xa0))) +y := add(y, shl(176, mload(0xc0))) +mstore(3392, 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(3424, x) +let y := mload(0x140) +y := add(y, shl(88, mload(0x160))) +y := add(y, shl(176, mload(0x180))) +mstore(3456, y) + + success := and(validate_ec_point(x, y), success) + } +mstore(0xda0, mulmod(mload(0x7e0), mload(0x7e0), f_q)) +mstore(0xdc0, mulmod(mload(0xda0), mload(0xda0), f_q)) +mstore(0xde0, mulmod(mload(0xdc0), mload(0xdc0), f_q)) +mstore(0xe00, mulmod(mload(0xde0), mload(0xde0), f_q)) +mstore(0xe20, mulmod(mload(0xe00), mload(0xe00), f_q)) +mstore(0xe40, mulmod(mload(0xe20), mload(0xe20), f_q)) +mstore(0xe60, mulmod(mload(0xe40), mload(0xe40), f_q)) +mstore(0xe80, mulmod(mload(0xe60), mload(0xe60), f_q)) +mstore(0xea0, mulmod(mload(0xe80), mload(0xe80), f_q)) +mstore(0xec0, mulmod(mload(0xea0), mload(0xea0), f_q)) +mstore(0xee0, mulmod(mload(0xec0), mload(0xec0), f_q)) +mstore(0xf00, mulmod(mload(0xee0), mload(0xee0), f_q)) +mstore(0xf20, mulmod(mload(0xf00), mload(0xf00), f_q)) +mstore(0xf40, mulmod(mload(0xf20), mload(0xf20), f_q)) +mstore(0xf60, mulmod(mload(0xf40), mload(0xf40), f_q)) +mstore(0xf80, mulmod(mload(0xf60), mload(0xf60), f_q)) +mstore(0xfa0, mulmod(mload(0xf80), mload(0xf80), 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, addmod(mload(0x10c0), 21888242871839275222246405745257275088548364400416034343698204186575808495616, f_q)) +mstore(0x1100, mulmod(mload(0x10e0), 21888242545679039938882419398440172875981108180010270949818755658014750055173, f_q)) +mstore(0x1120, mulmod(mload(0x1100), 20399963857427891121373969697480515951916080097087921832172879765607926713957, f_q)) +mstore(0x1140, addmod(mload(0x7e0), 1488279014411384100872436047776759136632284303328112511525324420967881781660, f_q)) +mstore(0x1160, mulmod(mload(0x1100), 16569469942529664681363945218228869388192121720036659574609237682362097667612, f_q)) +mstore(0x1180, addmod(mload(0x7e0), 5318772929309610540882460527028405700356242680379374769088966504213710828005, f_q)) +mstore(0x11a0, mulmod(mload(0x1100), 6047398202650739717314770882059679662647667807426525133977681644606291529311, f_q)) +mstore(0x11c0, addmod(mload(0x7e0), 15840844669188535504931634863197595425900696592989509209720522541969516966306, f_q)) +mstore(0x11e0, mulmod(mload(0x1100), 17329448237240114492580865744088056414251735686965494637158808787419781175510, f_q)) +mstore(0x1200, addmod(mload(0x7e0), 4558794634599160729665540001169218674296628713450539706539395399156027320107, f_q)) +mstore(0x1220, mulmod(mload(0x1100), 3693565015985198455139889557180396682968596245011005461846595820698933079918, f_q)) +mstore(0x1240, addmod(mload(0x7e0), 18194677855854076767106516188076878405579768155405028881851608365876875415699, f_q)) +mstore(0x1260, mulmod(mload(0x1100), 11377606117859914088982205826922132024839443553408109299929510653283289974216, f_q)) +mstore(0x1280, addmod(mload(0x7e0), 10510636753979361133264199918335143063708920847007925043768693533292518521401, f_q)) +mstore(0x12a0, mulmod(mload(0x1100), 14803907026430593724305438564799066516271154714737734572920456128449769927233, f_q)) +mstore(0x12c0, addmod(mload(0x7e0), 7084335845408681497940967180458208572277209685678299770777748058126038568384, f_q)) +mstore(0x12e0, mulmod(mload(0x1100), 1, f_q)) +mstore(0x1300, addmod(mload(0x7e0), 21888242871839275222246405745257275088548364400416034343698204186575808495616, f_q)) +mstore(0x1320, mulmod(mload(0x1100), 13446667982376394161563610564587413125564757801019538732601045199901075958935, f_q)) +mstore(0x1340, addmod(mload(0x7e0), 8441574889462881060682795180669861962983606599396495611097158986674732536682, f_q)) +mstore(0x1360, mulmod(mload(0x1100), 6143038923529407703646399695489445107254060255791852207908457597807435305312, f_q)) +mstore(0x1380, addmod(mload(0x7e0), 15745203948309867518600006049767829981294304144624182135789746588768373190305, f_q)) +mstore(0x13a0, mulmod(mload(0x1100), 21813856626197829021720820945327074612555900476153638460378780375714815148448, f_q)) +mstore(0x13c0, addmod(mload(0x7e0), 74386245641446200525584799930200475992463924262395883319423810860993347169, f_q)) +mstore(0x13e0, mulmod(mload(0x1100), 11451405578697956743456240853980216273390554734748796433026540431386972584651, f_q)) +mstore(0x1400, addmod(mload(0x7e0), 10436837293141318478790164891277058815157809665667237910671663755188835910966, f_q)) +mstore(0x1420, mulmod(mload(0x1100), 2258791456229719674664876333845584462457126852136701862196747426485314788465, f_q)) +mstore(0x1440, addmod(mload(0x7e0), 19629451415609555547581529411411690626091237548279332481501456760090493707152, f_q)) +mstore(0x1460, mulmod(mload(0x1100), 16670521521732547392407716560529197273408943645332907966320731856743274895475, f_q)) +mstore(0x1480, addmod(mload(0x7e0), 5217721350106727829838689184728077815139420755083126377377472329832533600142, f_q)) +mstore(0x14a0, mulmod(mload(0x1100), 6973717477794544023251421539913937529504002186168239878624319939785647341572, f_q)) +mstore(0x14c0, addmod(mload(0x7e0), 14914525394044731198994984205343337559044362214247794465073884246790161154045, f_q)) +mstore(0x14e0, mulmod(mload(0x1100), 8374374965308410102411073611984011876711565317741801500439755773472076597347, f_q)) +mstore(0x1500, addmod(mload(0x7e0), 13513867906530865119835332133273263211836799082674232843258448413103731898270, f_q)) +mstore(0x1520, mulmod(mload(0x1100), 7644774028564064345188091774880429238758499926703297575879018755827411518744, f_q)) +mstore(0x1540, addmod(mload(0x7e0), 14243468843275210877058313970376845849789864473712736767819185430748396976873, f_q)) +mstore(0x1560, mulmod(mload(0x1100), 17041886618628883845743410343041491135676788197442345444346654338941897766515, f_q)) +mstore(0x1580, addmod(mload(0x7e0), 4846356253210391376502995402215783952871576202973688899351549847633910729102, f_q)) +mstore(0x15a0, mulmod(mload(0x1100), 20276212859876996965895067376549928325970197996069741985761123463478912375212, f_q)) +mstore(0x15c0, addmod(mload(0x7e0), 1612030011962278256351338368707346762578166404346292357937080723096896120405, f_q)) +mstore(0x15e0, mulmod(mload(0x1100), 21490807004895109926141140246143262403290679459142140821740925192625185504522, f_q)) +mstore(0x1600, addmod(mload(0x7e0), 397435866944165296105265499114012685257684941273893521957278993950622991095, f_q)) +mstore(0x1620, mulmod(mload(0x1100), 21856635360464150734248258901271514898436182748160009166613717095391832219001, f_q)) +mstore(0x1640, addmod(mload(0x7e0), 31607511375124487998146843985760190112181652256025177084487091183976276616, f_q)) +mstore(0x1660, mulmod(mload(0x1100), 4947689244094276630090796471410438387704819356682144196760515917874272844658, f_q)) +mstore(0x1680, addmod(mload(0x7e0), 16940553627744998592155609273846836700843545043733890146937688268701535650959, f_q)) +mstore(0x16a0, mulmod(mload(0x1100), 16070949257099864401214446952969046546611226673215562325034009111680440277863, f_q)) +mstore(0x16c0, addmod(mload(0x7e0), 5817293614739410821031958792288228541937137727200472018664195074895368217754, f_q)) +mstore(0x16e0, mulmod(mload(0x1100), 11211301017135681023579411905410872569206244553457844956874280139879520583390, f_q)) +mstore(0x1700, addmod(mload(0x7e0), 10676941854703594198666993839846402519342119846958189386823924046696287912227, f_q)) +mstore(0x1720, mulmod(mload(0x1100), 13950560640343059709470007801605358008980413716864447750775614801472024994001, f_q)) +mstore(0x1740, addmod(mload(0x7e0), 7937682231496215512776397943651917079567950683551586592922589385103783501616, f_q)) +mstore(0x1760, mulmod(mload(0x1100), 5264024894212359361117235356180248560912605977787414341366976252256241723081, f_q)) +mstore(0x1780, addmod(mload(0x7e0), 16624217977626915861129170389077026527635758422628620002331227934319566772536, f_q)) +mstore(0x17a0, mulmod(mload(0x1100), 3625492050666108396704456638133783157286349416935200203472288366641355665864, f_q)) +mstore(0x17c0, addmod(mload(0x7e0), 18262750821173166825541949107123491931262014983480834140225915819934452829753, f_q)) +mstore(0x17e0, mulmod(mload(0x1100), 18846108080730935585192484934247867403156699586319724728525857970312957475341, f_q)) +mstore(0x1800, addmod(mload(0x7e0), 3042134791108339637053920811009407685391664814096309615172346216262851020276, f_q)) +mstore(0x1820, mulmod(mload(0x1100), 6473332732845625289791651727472817517565982136597666101608581856093617811346, f_q)) +mstore(0x1840, addmod(mload(0x7e0), 15414910138993649932454754017784457570982382263818368242089622330482190684271, f_q)) +mstore(0x1860, mulmod(mload(0x1100), 14702679338564370535199761954906750181917994561807919001424434650417511039135, f_q)) +mstore(0x1880, addmod(mload(0x7e0), 7185563533274904687046643790350524906630369838608115342273769536158297456482, f_q)) +mstore(0x18a0, mulmod(mload(0x1100), 6001486148891510551408340246911394095022311837824516338589673764885721480362, f_q)) +mstore(0x18c0, addmod(mload(0x7e0), 15886756722947764670838065498345880993526052562591518005108530421690087015255, f_q)) +mstore(0x18e0, mulmod(mload(0x1100), 3615478808282855240548287271348143516886772452944084747768312988864436725401, f_q)) +mstore(0x1900, addmod(mload(0x7e0), 18272764063556419981698118473909131571661591947471949595929891197711371770216, f_q)) +{ + let prod := mload(0x1140) + + prod := mulmod(mload(0x1180), prod, f_q) + mstore(0x1920, prod) + + prod := mulmod(mload(0x11c0), prod, f_q) + mstore(0x1940, prod) + + prod := mulmod(mload(0x1200), prod, f_q) + mstore(0x1960, prod) + + prod := mulmod(mload(0x1240), prod, f_q) + mstore(0x1980, prod) + + prod := mulmod(mload(0x1280), prod, f_q) + mstore(0x19a0, prod) + + prod := mulmod(mload(0x12c0), prod, f_q) + mstore(0x19c0, prod) + + prod := mulmod(mload(0x1300), prod, f_q) + mstore(0x19e0, prod) + + prod := mulmod(mload(0x1340), prod, f_q) + mstore(0x1a00, prod) + + prod := mulmod(mload(0x1380), prod, f_q) + mstore(0x1a20, prod) + + prod := mulmod(mload(0x13c0), prod, f_q) + mstore(0x1a40, prod) + + prod := mulmod(mload(0x1400), prod, f_q) + mstore(0x1a60, prod) + + prod := mulmod(mload(0x1440), prod, f_q) + mstore(0x1a80, prod) + + prod := mulmod(mload(0x1480), prod, f_q) + mstore(0x1aa0, prod) + + prod := mulmod(mload(0x14c0), prod, f_q) + mstore(0x1ac0, prod) + + prod := mulmod(mload(0x1500), prod, f_q) + mstore(0x1ae0, prod) + + prod := mulmod(mload(0x1540), prod, f_q) + mstore(0x1b00, prod) + + prod := mulmod(mload(0x1580), prod, f_q) + mstore(0x1b20, prod) + + prod := mulmod(mload(0x15c0), prod, f_q) + mstore(0x1b40, prod) + + prod := mulmod(mload(0x1600), prod, f_q) + mstore(0x1b60, prod) + + prod := mulmod(mload(0x1640), prod, f_q) + mstore(0x1b80, prod) + + prod := mulmod(mload(0x1680), prod, f_q) + mstore(0x1ba0, prod) + + prod := mulmod(mload(0x16c0), prod, f_q) + mstore(0x1bc0, prod) + + prod := mulmod(mload(0x1700), prod, f_q) + mstore(0x1be0, prod) + + prod := mulmod(mload(0x1740), prod, f_q) + mstore(0x1c00, prod) + + prod := mulmod(mload(0x1780), prod, f_q) + mstore(0x1c20, prod) + + prod := mulmod(mload(0x17c0), prod, f_q) + mstore(0x1c40, prod) + + prod := mulmod(mload(0x1800), prod, f_q) + mstore(0x1c60, prod) + + prod := mulmod(mload(0x1840), prod, f_q) + mstore(0x1c80, prod) + + prod := mulmod(mload(0x1880), prod, f_q) + mstore(0x1ca0, prod) + + prod := mulmod(mload(0x18c0), prod, f_q) + mstore(0x1cc0, prod) + + prod := mulmod(mload(0x1900), prod, f_q) + mstore(0x1ce0, prod) + + prod := mulmod(mload(0x10e0), prod, f_q) + mstore(0x1d00, prod) + + } +mstore(0x1d40, 32) +mstore(0x1d60, 32) +mstore(0x1d80, 32) +mstore(0x1da0, mload(0x1d00)) +mstore(0x1dc0, 21888242871839275222246405745257275088548364400416034343698204186575808495615) +mstore(0x1de0, 21888242871839275222246405745257275088548364400416034343698204186575808495617) +success := and(eq(staticcall(gas(), 0x5, 0x1d40, 0xc0, 0x1d20, 0x20), 1), success) +{ + + let inv := mload(0x1d20) + let v + + v := mload(0x10e0) + mstore(4320, mulmod(mload(0x1ce0), inv, f_q)) + inv := mulmod(v, inv, f_q) + + v := mload(0x1900) + mstore(6400, mulmod(mload(0x1cc0), inv, f_q)) + inv := mulmod(v, inv, f_q) + + v := mload(0x18c0) + mstore(6336, mulmod(mload(0x1ca0), inv, f_q)) + inv := mulmod(v, inv, f_q) + + v := mload(0x1880) + mstore(6272, mulmod(mload(0x1c80), inv, f_q)) + inv := mulmod(v, inv, f_q) + + v := mload(0x1840) + mstore(6208, mulmod(mload(0x1c60), inv, f_q)) + inv := mulmod(v, inv, f_q) + + v := mload(0x1800) + mstore(6144, mulmod(mload(0x1c40), inv, f_q)) + inv := mulmod(v, inv, f_q) + + v := mload(0x17c0) + mstore(6080, mulmod(mload(0x1c20), inv, f_q)) + inv := mulmod(v, inv, f_q) + + v := mload(0x1780) + mstore(6016, mulmod(mload(0x1c00), inv, f_q)) + inv := mulmod(v, inv, f_q) + + v := mload(0x1740) + mstore(5952, mulmod(mload(0x1be0), inv, f_q)) + inv := mulmod(v, inv, f_q) + + v := mload(0x1700) + mstore(5888, mulmod(mload(0x1bc0), inv, f_q)) + inv := mulmod(v, inv, f_q) + + v := mload(0x16c0) + mstore(5824, mulmod(mload(0x1ba0), inv, f_q)) + inv := mulmod(v, inv, f_q) + + v := mload(0x1680) + mstore(5760, mulmod(mload(0x1b80), inv, f_q)) + inv := mulmod(v, inv, f_q) + + v := mload(0x1640) + mstore(5696, mulmod(mload(0x1b60), inv, f_q)) + inv := mulmod(v, inv, f_q) + + v := mload(0x1600) + mstore(5632, mulmod(mload(0x1b40), inv, f_q)) + inv := mulmod(v, inv, f_q) + + v := mload(0x15c0) + mstore(5568, mulmod(mload(0x1b20), inv, f_q)) + inv := mulmod(v, inv, f_q) + + v := mload(0x1580) + mstore(5504, mulmod(mload(0x1b00), inv, f_q)) + inv := mulmod(v, inv, f_q) + + v := mload(0x1540) + mstore(5440, mulmod(mload(0x1ae0), inv, f_q)) + inv := mulmod(v, inv, f_q) + + v := mload(0x1500) + mstore(5376, mulmod(mload(0x1ac0), inv, f_q)) + inv := mulmod(v, inv, f_q) + + v := mload(0x14c0) + mstore(5312, mulmod(mload(0x1aa0), inv, f_q)) + inv := mulmod(v, inv, f_q) + + v := mload(0x1480) + mstore(5248, mulmod(mload(0x1a80), inv, f_q)) + inv := mulmod(v, inv, f_q) + + v := mload(0x1440) + mstore(5184, mulmod(mload(0x1a60), inv, f_q)) + inv := mulmod(v, inv, f_q) + + v := mload(0x1400) + mstore(5120, mulmod(mload(0x1a40), inv, f_q)) + inv := mulmod(v, inv, f_q) + + v := mload(0x13c0) + mstore(5056, mulmod(mload(0x1a20), inv, f_q)) + inv := mulmod(v, inv, f_q) + + v := mload(0x1380) + mstore(4992, mulmod(mload(0x1a00), inv, f_q)) + inv := mulmod(v, inv, f_q) + + v := mload(0x1340) + mstore(4928, mulmod(mload(0x19e0), inv, f_q)) + inv := mulmod(v, inv, f_q) + + v := mload(0x1300) + mstore(4864, mulmod(mload(0x19c0), inv, f_q)) + inv := mulmod(v, inv, f_q) + + v := mload(0x12c0) + mstore(4800, mulmod(mload(0x19a0), inv, f_q)) + inv := mulmod(v, inv, f_q) + + v := mload(0x1280) + mstore(4736, mulmod(mload(0x1980), inv, f_q)) + inv := mulmod(v, inv, f_q) + + v := mload(0x1240) + mstore(4672, mulmod(mload(0x1960), inv, f_q)) + inv := mulmod(v, inv, f_q) + + v := mload(0x1200) + mstore(4608, mulmod(mload(0x1940), inv, f_q)) + inv := mulmod(v, inv, f_q) + + v := mload(0x11c0) + mstore(4544, mulmod(mload(0x1920), inv, f_q)) + inv := mulmod(v, inv, f_q) + + v := mload(0x1180) + mstore(4480, mulmod(mload(0x1140), inv, f_q)) + inv := mulmod(v, inv, f_q) + mstore(0x1140, inv) + + } +mstore(0x1e00, mulmod(mload(0x1120), mload(0x1140), f_q)) +mstore(0x1e20, mulmod(mload(0x1160), mload(0x1180), f_q)) +mstore(0x1e40, mulmod(mload(0x11a0), mload(0x11c0), f_q)) +mstore(0x1e60, mulmod(mload(0x11e0), mload(0x1200), f_q)) +mstore(0x1e80, mulmod(mload(0x1220), mload(0x1240), f_q)) +mstore(0x1ea0, mulmod(mload(0x1260), mload(0x1280), f_q)) +mstore(0x1ec0, mulmod(mload(0x12a0), mload(0x12c0), f_q)) +mstore(0x1ee0, mulmod(mload(0x12e0), mload(0x1300), f_q)) +mstore(0x1f00, mulmod(mload(0x1320), mload(0x1340), f_q)) +mstore(0x1f20, mulmod(mload(0x1360), mload(0x1380), f_q)) +mstore(0x1f40, mulmod(mload(0x13a0), mload(0x13c0), f_q)) +mstore(0x1f60, mulmod(mload(0x13e0), mload(0x1400), f_q)) +mstore(0x1f80, mulmod(mload(0x1420), mload(0x1440), f_q)) +mstore(0x1fa0, mulmod(mload(0x1460), mload(0x1480), f_q)) +mstore(0x1fc0, mulmod(mload(0x14a0), mload(0x14c0), f_q)) +mstore(0x1fe0, mulmod(mload(0x14e0), mload(0x1500), f_q)) +mstore(0x2000, mulmod(mload(0x1520), mload(0x1540), f_q)) +mstore(0x2020, mulmod(mload(0x1560), mload(0x1580), f_q)) +mstore(0x2040, mulmod(mload(0x15a0), mload(0x15c0), f_q)) +mstore(0x2060, mulmod(mload(0x15e0), mload(0x1600), f_q)) +mstore(0x2080, mulmod(mload(0x1620), mload(0x1640), f_q)) +mstore(0x20a0, mulmod(mload(0x1660), mload(0x1680), f_q)) +mstore(0x20c0, mulmod(mload(0x16a0), mload(0x16c0), f_q)) +mstore(0x20e0, mulmod(mload(0x16e0), mload(0x1700), f_q)) +mstore(0x2100, mulmod(mload(0x1720), mload(0x1740), f_q)) +mstore(0x2120, mulmod(mload(0x1760), mload(0x1780), f_q)) +mstore(0x2140, mulmod(mload(0x17a0), mload(0x17c0), f_q)) +mstore(0x2160, mulmod(mload(0x17e0), mload(0x1800), f_q)) +mstore(0x2180, mulmod(mload(0x1820), mload(0x1840), f_q)) +mstore(0x21a0, mulmod(mload(0x1860), mload(0x1880), f_q)) +mstore(0x21c0, mulmod(mload(0x18a0), mload(0x18c0), f_q)) +mstore(0x21e0, mulmod(mload(0x18e0), mload(0x1900), f_q)) +{ + let result := mulmod(mload(0x1ee0), mload(0x20), f_q) +result := addmod(mulmod(mload(0x1f00), mload(0x40), f_q), result, f_q) +result := addmod(mulmod(mload(0x1f20), mload(0x60), f_q), result, f_q) +result := addmod(mulmod(mload(0x1f40), mload(0x80), f_q), result, f_q) +result := addmod(mulmod(mload(0x1f60), mload(0xa0), f_q), result, f_q) +result := addmod(mulmod(mload(0x1f80), mload(0xc0), f_q), result, f_q) +result := addmod(mulmod(mload(0x1fa0), mload(0xe0), f_q), result, f_q) +result := addmod(mulmod(mload(0x1fc0), mload(0x100), f_q), result, f_q) +result := addmod(mulmod(mload(0x1fe0), mload(0x120), f_q), result, f_q) +result := addmod(mulmod(mload(0x2000), mload(0x140), f_q), result, f_q) +result := addmod(mulmod(mload(0x2020), mload(0x160), f_q), result, f_q) +result := addmod(mulmod(mload(0x2040), mload(0x180), f_q), result, f_q) +result := addmod(mulmod(mload(0x2060), mload(0x1a0), f_q), result, f_q) +result := addmod(mulmod(mload(0x2080), mload(0x1c0), f_q), result, f_q) +result := addmod(mulmod(mload(0x20a0), mload(0x1e0), f_q), result, f_q) +result := addmod(mulmod(mload(0x20c0), mload(0x200), f_q), result, f_q) +result := addmod(mulmod(mload(0x20e0), mload(0x220), f_q), result, f_q) +result := addmod(mulmod(mload(0x2100), mload(0x240), f_q), result, f_q) +result := addmod(mulmod(mload(0x2120), mload(0x260), f_q), result, f_q) +result := addmod(mulmod(mload(0x2140), mload(0x280), f_q), result, f_q) +result := addmod(mulmod(mload(0x2160), mload(0x2a0), f_q), result, f_q) +result := addmod(mulmod(mload(0x2180), mload(0x2c0), f_q), result, f_q) +result := addmod(mulmod(mload(0x21a0), mload(0x2e0), f_q), result, f_q) +result := addmod(mulmod(mload(0x21c0), mload(0x300), f_q), result, f_q) +result := addmod(mulmod(mload(0x21e0), mload(0x320), f_q), result, f_q) +mstore(8704, result) + } +mstore(0x2220, mulmod(mload(0x860), mload(0x840), f_q)) +mstore(0x2240, addmod(mload(0x820), mload(0x2220), f_q)) +mstore(0x2260, addmod(mload(0x2240), sub(f_q, mload(0x880)), f_q)) +mstore(0x2280, mulmod(mload(0x2260), mload(0x980), f_q)) +mstore(0x22a0, mulmod(mload(0x680), mload(0x2280), f_q)) +mstore(0x22c0, mulmod(mload(0x8e0), mload(0x8c0), f_q)) +mstore(0x22e0, addmod(mload(0x8a0), mload(0x22c0), f_q)) +mstore(0x2300, addmod(mload(0x22e0), sub(f_q, mload(0x900)), f_q)) +mstore(0x2320, mulmod(mload(0x2300), mload(0x9a0), f_q)) +mstore(0x2340, addmod(mload(0x22a0), mload(0x2320), f_q)) +mstore(0x2360, mulmod(mload(0x680), mload(0x2340), f_q)) +mstore(0x2380, addmod(1, sub(f_q, mload(0xa80)), f_q)) +mstore(0x23a0, mulmod(mload(0x2380), mload(0x1ee0), f_q)) +mstore(0x23c0, addmod(mload(0x2360), mload(0x23a0), f_q)) +mstore(0x23e0, mulmod(mload(0x680), mload(0x23c0), f_q)) +mstore(0x2400, mulmod(mload(0xae0), mload(0xae0), f_q)) +mstore(0x2420, addmod(mload(0x2400), sub(f_q, mload(0xae0)), f_q)) +mstore(0x2440, mulmod(mload(0x2420), mload(0x1e00), f_q)) +mstore(0x2460, addmod(mload(0x23e0), mload(0x2440), f_q)) +mstore(0x2480, mulmod(mload(0x680), mload(0x2460), f_q)) +mstore(0x24a0, addmod(mload(0xae0), sub(f_q, mload(0xac0)), f_q)) +mstore(0x24c0, mulmod(mload(0x24a0), mload(0x1ee0), f_q)) +mstore(0x24e0, addmod(mload(0x2480), mload(0x24c0), f_q)) +mstore(0x2500, mulmod(mload(0x680), mload(0x24e0), f_q)) +mstore(0x2520, addmod(1, sub(f_q, mload(0x1e00)), f_q)) +mstore(0x2540, addmod(mload(0x1e20), mload(0x1e40), f_q)) +mstore(0x2560, addmod(mload(0x2540), mload(0x1e60), f_q)) +mstore(0x2580, addmod(mload(0x2560), mload(0x1e80), f_q)) +mstore(0x25a0, addmod(mload(0x2580), mload(0x1ea0), f_q)) +mstore(0x25c0, addmod(mload(0x25a0), mload(0x1ec0), f_q)) +mstore(0x25e0, addmod(mload(0x2520), sub(f_q, mload(0x25c0)), f_q)) +mstore(0x2600, mulmod(mload(0x9e0), mload(0x4c0), f_q)) +mstore(0x2620, addmod(mload(0x940), mload(0x2600), f_q)) +mstore(0x2640, addmod(mload(0x2620), mload(0x520), f_q)) +mstore(0x2660, mulmod(mload(0xa00), mload(0x4c0), f_q)) +mstore(0x2680, addmod(mload(0x820), mload(0x2660), f_q)) +mstore(0x26a0, addmod(mload(0x2680), mload(0x520), f_q)) +mstore(0x26c0, mulmod(mload(0x26a0), mload(0x2640), f_q)) +mstore(0x26e0, mulmod(mload(0xa20), mload(0x4c0), f_q)) +mstore(0x2700, addmod(mload(0x8a0), mload(0x26e0), f_q)) +mstore(0x2720, addmod(mload(0x2700), mload(0x520), f_q)) +mstore(0x2740, mulmod(mload(0x2720), mload(0x26c0), f_q)) +mstore(0x2760, mulmod(mload(0x2740), mload(0xaa0), f_q)) +mstore(0x2780, mulmod(1, mload(0x4c0), f_q)) +mstore(0x27a0, mulmod(mload(0x7e0), mload(0x2780), f_q)) +mstore(0x27c0, addmod(mload(0x940), mload(0x27a0), f_q)) +mstore(0x27e0, addmod(mload(0x27c0), mload(0x520), f_q)) +mstore(0x2800, mulmod(4131629893567559867359510883348571134090853742863529169391034518566172092834, mload(0x4c0), f_q)) +mstore(0x2820, mulmod(mload(0x7e0), mload(0x2800), f_q)) +mstore(0x2840, addmod(mload(0x820), mload(0x2820), f_q)) +mstore(0x2860, addmod(mload(0x2840), mload(0x520), f_q)) +mstore(0x2880, mulmod(mload(0x2860), mload(0x27e0), f_q)) +mstore(0x28a0, mulmod(8910878055287538404433155982483128285667088683464058436815641868457422632747, mload(0x4c0), f_q)) +mstore(0x28c0, mulmod(mload(0x7e0), mload(0x28a0), f_q)) +mstore(0x28e0, addmod(mload(0x8a0), mload(0x28c0), f_q)) +mstore(0x2900, addmod(mload(0x28e0), mload(0x520), f_q)) +mstore(0x2920, mulmod(mload(0x2900), mload(0x2880), f_q)) +mstore(0x2940, mulmod(mload(0x2920), mload(0xa80), f_q)) +mstore(0x2960, addmod(mload(0x2760), sub(f_q, mload(0x2940)), f_q)) +mstore(0x2980, mulmod(mload(0x2960), mload(0x25e0), f_q)) +mstore(0x29a0, addmod(mload(0x2500), mload(0x2980), f_q)) +mstore(0x29c0, mulmod(mload(0x680), mload(0x29a0), f_q)) +mstore(0x29e0, mulmod(mload(0xa40), mload(0x4c0), f_q)) +mstore(0x2a00, addmod(mload(0x920), mload(0x29e0), f_q)) +mstore(0x2a20, addmod(mload(0x2a00), mload(0x520), f_q)) +mstore(0x2a40, mulmod(mload(0xa60), mload(0x4c0), f_q)) +mstore(0x2a60, addmod(mload(0x2200), mload(0x2a40), f_q)) +mstore(0x2a80, addmod(mload(0x2a60), mload(0x520), f_q)) +mstore(0x2aa0, mulmod(mload(0x2a80), mload(0x2a20), f_q)) +mstore(0x2ac0, mulmod(mload(0x2aa0), mload(0xb00), f_q)) +mstore(0x2ae0, mulmod(11166246659983828508719468090013646171463329086121580628794302409516816350802, mload(0x4c0), f_q)) +mstore(0x2b00, mulmod(mload(0x7e0), mload(0x2ae0), f_q)) +mstore(0x2b20, addmod(mload(0x920), mload(0x2b00), f_q)) +mstore(0x2b40, addmod(mload(0x2b20), mload(0x520), f_q)) +mstore(0x2b60, mulmod(284840088355319032285349970403338060113257071685626700086398481893096618818, mload(0x4c0), f_q)) +mstore(0x2b80, mulmod(mload(0x7e0), mload(0x2b60), f_q)) +mstore(0x2ba0, addmod(mload(0x2200), mload(0x2b80), f_q)) +mstore(0x2bc0, addmod(mload(0x2ba0), mload(0x520), f_q)) +mstore(0x2be0, mulmod(mload(0x2bc0), mload(0x2b40), f_q)) +mstore(0x2c00, mulmod(mload(0x2be0), mload(0xae0), f_q)) +mstore(0x2c20, addmod(mload(0x2ac0), sub(f_q, mload(0x2c00)), f_q)) +mstore(0x2c40, mulmod(mload(0x2c20), mload(0x25e0), f_q)) +mstore(0x2c60, addmod(mload(0x29c0), mload(0x2c40), f_q)) +mstore(0x2c80, mulmod(mload(0x680), mload(0x2c60), f_q)) +mstore(0x2ca0, mulmod(mload(0xb20), mload(0x1ee0), f_q)) +mstore(0x2cc0, addmod(mload(0x2c80), mload(0x2ca0), f_q)) +mstore(0x2ce0, mulmod(mload(0x680), mload(0x2cc0), f_q)) +mstore(0x2d00, mulmod(mload(0xb20), mload(0x1e00), f_q)) +mstore(0x2d20, addmod(mload(0x2ce0), mload(0x2d00), f_q)) +mstore(0x2d40, mulmod(mload(0x680), mload(0x2d20), f_q)) +mstore(0x2d60, addmod(mload(0x960), mload(0x4c0), f_q)) +mstore(0x2d80, addmod(mload(0x920), mload(0x4c0), f_q)) +mstore(0x2da0, mulmod(mload(0x2d80), mload(0x2d60), f_q)) +mstore(0x2dc0, addmod(mload(0xb40), sub(f_q, mload(0xb20)), f_q)) +mstore(0x2de0, mulmod(mload(0x2dc0), mload(0x2da0), f_q)) +mstore(0x2e00, mulmod(mload(0x2d80), mload(0xb60), f_q)) +mstore(0x2e20, addmod(mload(0x2d60), sub(f_q, mload(0x2e00)), f_q)) +mstore(0x2e40, addmod(mload(0x2de0), sub(f_q, mload(0x2e20)), f_q)) +mstore(0x2e60, mulmod(mload(0x2e40), mload(0x25e0), f_q)) +mstore(0x2e80, addmod(mload(0x2d40), mload(0x2e60), f_q)) +mstore(0x2ea0, mulmod(mload(0x10c0), mload(0x10c0), f_q)) +mstore(0x2ec0, mulmod(mload(0x2ea0), mload(0x10c0), f_q)) +mstore(0x2ee0, mulmod(mload(0x2ec0), mload(0x10c0), f_q)) +mstore(0x2f00, mulmod(1, mload(0x10c0), f_q)) +mstore(0x2f20, mulmod(1, mload(0x2ea0), f_q)) +mstore(0x2f40, mulmod(1, mload(0x2ec0), f_q)) +mstore(0x2f60, mulmod(mload(0x2e80), mload(0x10e0), f_q)) +mstore(0x2f80, mulmod(mload(0xda0), mload(0x7e0), f_q)) +mstore(0x2fa0, mulmod(mload(0x7e0), 1, f_q)) +mstore(0x2fc0, addmod(mload(0xca0), sub(f_q, mload(0x2fa0)), f_q)) +mstore(0x2fe0, mulmod(mload(0x7e0), 6143038923529407703646399695489445107254060255791852207908457597807435305312, f_q)) +mstore(0x3000, addmod(mload(0xca0), sub(f_q, mload(0x2fe0)), f_q)) +mstore(0x3020, mulmod(mload(0x7e0), 13446667982376394161563610564587413125564757801019538732601045199901075958935, f_q)) +mstore(0x3040, addmod(mload(0xca0), sub(f_q, mload(0x3020)), f_q)) +mstore(0x3060, mulmod(mload(0x7e0), 20399963857427891121373969697480515951916080097087921832172879765607926713957, f_q)) +mstore(0x3080, addmod(mload(0xca0), sub(f_q, mload(0x3060)), f_q)) +mstore(0x30a0, mulmod(mload(0x7e0), 21813856626197829021720820945327074612555900476153638460378780375714815148448, f_q)) +mstore(0x30c0, addmod(mload(0xca0), sub(f_q, mload(0x30a0)), f_q)) +{ + let result := mulmod(mload(0xca0), 21226454350967877604996201857734295406716648685573268075789461576572118204629, f_q) +result := addmod(mulmod(mload(0x7e0), 661788520871397617250203887522979681831715714842766267908742610003690290988, f_q), result, f_q) +mstore(12512, result) + } +{ + let result := mulmod(mload(0xca0), 5861127194460807938380394597488182289255701836742860267379931784243223318895, f_q) +result := addmod(mulmod(mload(0x7e0), 3390128162633191074125945073253823994540311710737587304644639100065963932907, f_q), result, f_q) +mstore(12544, result) + } +{ + let result := mulmod(mload(0xca0), 3390128162633191074125945073253823994540311710737587304644639100065963932907, f_q) +result := addmod(mulmod(mload(0x7e0), 90032813343344028270095592867940481147765329332774301746019309308684830918, f_q), result, f_q) +mstore(12576, result) + } +{ + let result := mulmod(mload(0xca0), 6081264866030232838172298610738481044383077933941150375357654711302968300110, f_q) +result := addmod(mulmod(mload(0x7e0), 17149721552240364152242558882079404925549682875792813195623508753281175593761, f_q), result, f_q) +mstore(12608, result) + } +mstore(0x3160, mulmod(1, mload(0x2fc0), f_q)) +mstore(0x3180, mulmod(mload(0x3160), mload(0x3040), f_q)) +mstore(0x31a0, mulmod(mload(0x3180), mload(0x3000), f_q)) +mstore(0x31c0, mulmod(mload(0x31a0), mload(0x30c0), f_q)) +{ + let result := mulmod(mload(0xca0), 1, f_q) +result := addmod(mulmod(mload(0x7e0), 21888242871839275222246405745257275088548364400416034343698204186575808495616, f_q), result, f_q) +mstore(12768, result) + } +{ + let result := mulmod(mload(0xca0), 4611080974564654620672770701418215399259648222345233353533516903428903490338, f_q) +result := addmod(mulmod(mload(0x7e0), 17277161897274620601573635043839059689288716178070800990164687283146905005279, f_q), result, f_q) +mstore(12800, result) + } +{ + let result := mulmod(mload(0xca0), 18415107727890515204339219355410953633961625232239610076569258667727996888339, f_q) +result := addmod(mulmod(mload(0x7e0), 17583596301131204162369215904507730946250434667860147994294529557488431009797, f_q), result, f_q) +mstore(12832, result) + } +{ + let result := mulmod(mload(0xca0), 955401216438685250451136621446753002855966875247240148565594704240333744183, f_q) +result := addmod(mulmod(mload(0x7e0), 19875036825359531302421172351558829289511004470138001576279762328320245313525, f_q), result, f_q) +mstore(12864, result) + } +mstore(0x3260, mulmod(mload(0x3180), mload(0x3080), f_q)) +{ + let result := mulmod(mload(0xca0), 8441574889462881060682795180669861962983606599396495611097158986674732536683, f_q) +result := addmod(mulmod(mload(0x7e0), 13446667982376394161563610564587413125564757801019538732601045199901075958934, f_q), result, f_q) +mstore(12928, result) + } +{ + let result := mulmod(mload(0xca0), 13446667982376394161563610564587413125564757801019538732601045199901075958934, f_q) +result := addmod(mulmod(mload(0x7e0), 7303629058846986457917210869097968018310697545227686524692587602093640653623, f_q), result, f_q) +mstore(12960, result) + } +{ + let prod := mload(0x30e0) + + prod := mulmod(mload(0x3100), prod, f_q) + mstore(0x32c0, prod) + + prod := mulmod(mload(0x3120), prod, f_q) + mstore(0x32e0, prod) + + prod := mulmod(mload(0x3140), prod, f_q) + mstore(0x3300, prod) + + prod := mulmod(mload(0x31e0), prod, f_q) + mstore(0x3320, prod) + + prod := mulmod(mload(0x3160), prod, f_q) + mstore(0x3340, prod) + + prod := mulmod(mload(0x3200), prod, f_q) + mstore(0x3360, prod) + + prod := mulmod(mload(0x3220), prod, f_q) + mstore(0x3380, prod) + + prod := mulmod(mload(0x3240), prod, f_q) + mstore(0x33a0, prod) + + prod := mulmod(mload(0x3260), prod, f_q) + mstore(0x33c0, prod) + + prod := mulmod(mload(0x3280), prod, f_q) + mstore(0x33e0, prod) + + prod := mulmod(mload(0x32a0), prod, f_q) + mstore(0x3400, prod) + + prod := mulmod(mload(0x3180), prod, f_q) + mstore(0x3420, prod) + + } +mstore(0x3460, 32) +mstore(0x3480, 32) +mstore(0x34a0, 32) +mstore(0x34c0, mload(0x3420)) +mstore(0x34e0, 21888242871839275222246405745257275088548364400416034343698204186575808495615) +mstore(0x3500, 21888242871839275222246405745257275088548364400416034343698204186575808495617) +success := and(eq(staticcall(gas(), 0x5, 0x3460, 0xc0, 0x3440, 0x20), 1), success) +{ + + let inv := mload(0x3440) + let v + + v := mload(0x3180) + mstore(12672, mulmod(mload(0x3400), inv, f_q)) + inv := mulmod(v, inv, f_q) + + v := mload(0x32a0) + mstore(12960, mulmod(mload(0x33e0), inv, f_q)) + inv := mulmod(v, inv, f_q) + + v := mload(0x3280) + mstore(12928, mulmod(mload(0x33c0), inv, f_q)) + inv := mulmod(v, inv, f_q) + + v := mload(0x3260) + mstore(12896, mulmod(mload(0x33a0), inv, f_q)) + inv := mulmod(v, inv, f_q) + + v := mload(0x3240) + mstore(12864, mulmod(mload(0x3380), inv, f_q)) + inv := mulmod(v, inv, f_q) + + v := mload(0x3220) + mstore(12832, mulmod(mload(0x3360), inv, f_q)) + inv := mulmod(v, inv, f_q) + + v := mload(0x3200) + mstore(12800, mulmod(mload(0x3340), inv, f_q)) + inv := mulmod(v, inv, f_q) + + v := mload(0x3160) + mstore(12640, mulmod(mload(0x3320), inv, f_q)) + inv := mulmod(v, inv, f_q) + + v := mload(0x31e0) + mstore(12768, mulmod(mload(0x3300), inv, f_q)) + inv := mulmod(v, inv, f_q) + + v := mload(0x3140) + mstore(12608, mulmod(mload(0x32e0), inv, f_q)) + inv := mulmod(v, inv, f_q) + + v := mload(0x3120) + mstore(12576, mulmod(mload(0x32c0), inv, f_q)) + inv := mulmod(v, inv, f_q) + + v := mload(0x3100) + mstore(12544, mulmod(mload(0x30e0), inv, f_q)) + inv := mulmod(v, inv, f_q) + mstore(0x30e0, inv) + + } +{ + let result := mload(0x30e0) +result := addmod(mload(0x3100), result, f_q) +result := addmod(mload(0x3120), result, f_q) +result := addmod(mload(0x3140), result, f_q) +mstore(13600, result) + } +mstore(0x3540, mulmod(mload(0x31c0), mload(0x3160), f_q)) +{ + let result := mload(0x31e0) +mstore(13664, result) + } +mstore(0x3580, mulmod(mload(0x31c0), mload(0x3260), f_q)) +{ + let result := mload(0x3200) +result := addmod(mload(0x3220), result, f_q) +result := addmod(mload(0x3240), result, f_q) +mstore(13728, result) + } +mstore(0x35c0, mulmod(mload(0x31c0), mload(0x3180), f_q)) +{ + let result := mload(0x3280) +result := addmod(mload(0x32a0), result, f_q) +mstore(13792, result) + } +{ + let prod := mload(0x3520) + + prod := mulmod(mload(0x3560), prod, f_q) + mstore(0x3600, prod) + + prod := mulmod(mload(0x35a0), prod, f_q) + mstore(0x3620, prod) + + prod := mulmod(mload(0x35e0), prod, f_q) + mstore(0x3640, prod) + + } +mstore(0x3680, 32) +mstore(0x36a0, 32) +mstore(0x36c0, 32) +mstore(0x36e0, mload(0x3640)) +mstore(0x3700, 21888242871839275222246405745257275088548364400416034343698204186575808495615) +mstore(0x3720, 21888242871839275222246405745257275088548364400416034343698204186575808495617) +success := and(eq(staticcall(gas(), 0x5, 0x3680, 0xc0, 0x3660, 0x20), 1), success) +{ + + let inv := mload(0x3660) + let v + + v := mload(0x35e0) + mstore(13792, mulmod(mload(0x3620), inv, f_q)) + inv := mulmod(v, inv, f_q) + + v := mload(0x35a0) + mstore(13728, mulmod(mload(0x3600), inv, f_q)) + inv := mulmod(v, inv, f_q) + + v := mload(0x3560) + mstore(13664, mulmod(mload(0x3520), inv, f_q)) + inv := mulmod(v, inv, f_q) + mstore(0x3520, inv) + + } +mstore(0x3740, mulmod(mload(0x3540), mload(0x3560), f_q)) +mstore(0x3760, mulmod(mload(0x3580), mload(0x35a0), f_q)) +mstore(0x3780, mulmod(mload(0x35c0), mload(0x35e0), f_q)) +mstore(0x37a0, mulmod(mload(0xba0), mload(0xba0), f_q)) +mstore(0x37c0, mulmod(mload(0x37a0), mload(0xba0), f_q)) +mstore(0x37e0, mulmod(mload(0x37c0), mload(0xba0), f_q)) +mstore(0x3800, mulmod(mload(0x37e0), mload(0xba0), f_q)) +mstore(0x3820, mulmod(mload(0x3800), mload(0xba0), f_q)) +mstore(0x3840, mulmod(mload(0x3820), mload(0xba0), f_q)) +mstore(0x3860, mulmod(mload(0x3840), mload(0xba0), f_q)) +mstore(0x3880, mulmod(mload(0x3860), mload(0xba0), f_q)) +mstore(0x38a0, mulmod(mload(0x3880), mload(0xba0), f_q)) +mstore(0x38c0, mulmod(mload(0x38a0), mload(0xba0), f_q)) +mstore(0x38e0, mulmod(mload(0x38c0), mload(0xba0), f_q)) +mstore(0x3900, mulmod(mload(0x38e0), mload(0xba0), f_q)) +mstore(0x3920, mulmod(mload(0xc00), mload(0xc00), f_q)) +mstore(0x3940, mulmod(mload(0x3920), mload(0xc00), f_q)) +mstore(0x3960, mulmod(mload(0x3940), mload(0xc00), f_q)) +{ + let result := mulmod(mload(0x820), mload(0x30e0), f_q) +result := addmod(mulmod(mload(0x840), mload(0x3100), f_q), result, f_q) +result := addmod(mulmod(mload(0x860), mload(0x3120), f_q), result, f_q) +result := addmod(mulmod(mload(0x880), mload(0x3140), f_q), result, f_q) +mstore(14720, result) + } +mstore(0x39a0, mulmod(mload(0x3980), mload(0x3520), f_q)) +mstore(0x39c0, mulmod(sub(f_q, mload(0x39a0)), 1, f_q)) +{ + let result := mulmod(mload(0x8a0), mload(0x30e0), f_q) +result := addmod(mulmod(mload(0x8c0), mload(0x3100), f_q), result, f_q) +result := addmod(mulmod(mload(0x8e0), mload(0x3120), f_q), result, f_q) +result := addmod(mulmod(mload(0x900), mload(0x3140), f_q), result, f_q) +mstore(14816, result) + } +mstore(0x3a00, mulmod(mload(0x39e0), mload(0x3520), f_q)) +mstore(0x3a20, mulmod(sub(f_q, mload(0x3a00)), mload(0xba0), f_q)) +mstore(0x3a40, mulmod(1, mload(0xba0), f_q)) +mstore(0x3a60, addmod(mload(0x39c0), mload(0x3a20), f_q)) +mstore(0x3a80, mulmod(mload(0x3a60), 1, f_q)) +mstore(0x3aa0, mulmod(mload(0x3a40), 1, f_q)) +mstore(0x3ac0, mulmod(1, mload(0x3540), f_q)) +{ + let result := mulmod(mload(0x920), mload(0x31e0), f_q) +mstore(15072, result) + } +mstore(0x3b00, mulmod(mload(0x3ae0), mload(0x3740), f_q)) +mstore(0x3b20, mulmod(sub(f_q, mload(0x3b00)), 1, f_q)) +mstore(0x3b40, mulmod(mload(0x3ac0), 1, f_q)) +{ + let result := mulmod(mload(0xb60), mload(0x31e0), f_q) +mstore(15200, result) + } +mstore(0x3b80, mulmod(mload(0x3b60), mload(0x3740), f_q)) +mstore(0x3ba0, mulmod(sub(f_q, mload(0x3b80)), mload(0xba0), f_q)) +mstore(0x3bc0, mulmod(mload(0x3ac0), mload(0xba0), f_q)) +mstore(0x3be0, addmod(mload(0x3b20), mload(0x3ba0), f_q)) +{ + let result := mulmod(mload(0x940), mload(0x31e0), f_q) +mstore(15360, result) + } +mstore(0x3c20, mulmod(mload(0x3c00), mload(0x3740), f_q)) +mstore(0x3c40, mulmod(sub(f_q, mload(0x3c20)), mload(0x37a0), f_q)) +mstore(0x3c60, mulmod(mload(0x3ac0), mload(0x37a0), f_q)) +mstore(0x3c80, addmod(mload(0x3be0), mload(0x3c40), f_q)) +{ + let result := mulmod(mload(0x960), mload(0x31e0), f_q) +mstore(15520, result) + } +mstore(0x3cc0, mulmod(mload(0x3ca0), mload(0x3740), f_q)) +mstore(0x3ce0, mulmod(sub(f_q, mload(0x3cc0)), mload(0x37c0), f_q)) +mstore(0x3d00, mulmod(mload(0x3ac0), mload(0x37c0), f_q)) +mstore(0x3d20, addmod(mload(0x3c80), mload(0x3ce0), f_q)) +{ + let result := mulmod(mload(0x980), mload(0x31e0), f_q) +mstore(15680, result) + } +mstore(0x3d60, mulmod(mload(0x3d40), mload(0x3740), f_q)) +mstore(0x3d80, mulmod(sub(f_q, mload(0x3d60)), mload(0x37e0), f_q)) +mstore(0x3da0, mulmod(mload(0x3ac0), mload(0x37e0), f_q)) +mstore(0x3dc0, addmod(mload(0x3d20), mload(0x3d80), f_q)) +{ + let result := mulmod(mload(0x9a0), mload(0x31e0), f_q) +mstore(15840, result) + } +mstore(0x3e00, mulmod(mload(0x3de0), mload(0x3740), f_q)) +mstore(0x3e20, mulmod(sub(f_q, mload(0x3e00)), mload(0x3800), f_q)) +mstore(0x3e40, mulmod(mload(0x3ac0), mload(0x3800), f_q)) +mstore(0x3e60, addmod(mload(0x3dc0), mload(0x3e20), f_q)) +{ + let result := mulmod(mload(0x9e0), mload(0x31e0), f_q) +mstore(16000, result) + } +mstore(0x3ea0, mulmod(mload(0x3e80), mload(0x3740), f_q)) +mstore(0x3ec0, mulmod(sub(f_q, mload(0x3ea0)), mload(0x3820), f_q)) +mstore(0x3ee0, mulmod(mload(0x3ac0), mload(0x3820), f_q)) +mstore(0x3f00, addmod(mload(0x3e60), mload(0x3ec0), f_q)) +{ + let result := mulmod(mload(0xa00), mload(0x31e0), f_q) +mstore(16160, result) + } +mstore(0x3f40, mulmod(mload(0x3f20), mload(0x3740), f_q)) +mstore(0x3f60, mulmod(sub(f_q, mload(0x3f40)), mload(0x3840), f_q)) +mstore(0x3f80, mulmod(mload(0x3ac0), mload(0x3840), f_q)) +mstore(0x3fa0, addmod(mload(0x3f00), mload(0x3f60), f_q)) +{ + let result := mulmod(mload(0xa20), mload(0x31e0), f_q) +mstore(16320, result) + } +mstore(0x3fe0, mulmod(mload(0x3fc0), mload(0x3740), f_q)) +mstore(0x4000, mulmod(sub(f_q, mload(0x3fe0)), mload(0x3860), f_q)) +mstore(0x4020, mulmod(mload(0x3ac0), mload(0x3860), f_q)) +mstore(0x4040, addmod(mload(0x3fa0), mload(0x4000), f_q)) +{ + let result := mulmod(mload(0xa40), mload(0x31e0), f_q) +mstore(16480, result) + } +mstore(0x4080, mulmod(mload(0x4060), mload(0x3740), f_q)) +mstore(0x40a0, mulmod(sub(f_q, mload(0x4080)), mload(0x3880), f_q)) +mstore(0x40c0, mulmod(mload(0x3ac0), mload(0x3880), f_q)) +mstore(0x40e0, addmod(mload(0x4040), mload(0x40a0), f_q)) +{ + let result := mulmod(mload(0xa60), mload(0x31e0), f_q) +mstore(16640, result) + } +mstore(0x4120, mulmod(mload(0x4100), mload(0x3740), f_q)) +mstore(0x4140, mulmod(sub(f_q, mload(0x4120)), mload(0x38a0), f_q)) +mstore(0x4160, mulmod(mload(0x3ac0), mload(0x38a0), f_q)) +mstore(0x4180, addmod(mload(0x40e0), mload(0x4140), f_q)) +mstore(0x41a0, mulmod(mload(0x2f00), mload(0x3540), f_q)) +mstore(0x41c0, mulmod(mload(0x2f20), mload(0x3540), f_q)) +mstore(0x41e0, mulmod(mload(0x2f40), mload(0x3540), f_q)) +{ + let result := mulmod(mload(0x2f60), mload(0x31e0), f_q) +mstore(16896, result) + } +mstore(0x4220, mulmod(mload(0x4200), mload(0x3740), f_q)) +mstore(0x4240, mulmod(sub(f_q, mload(0x4220)), mload(0x38c0), f_q)) +mstore(0x4260, mulmod(mload(0x3ac0), mload(0x38c0), f_q)) +mstore(0x4280, mulmod(mload(0x41a0), mload(0x38c0), f_q)) +mstore(0x42a0, mulmod(mload(0x41c0), mload(0x38c0), f_q)) +mstore(0x42c0, mulmod(mload(0x41e0), mload(0x38c0), f_q)) +mstore(0x42e0, addmod(mload(0x4180), mload(0x4240), f_q)) +{ + let result := mulmod(mload(0x9c0), mload(0x31e0), f_q) +mstore(17152, result) + } +mstore(0x4320, mulmod(mload(0x4300), mload(0x3740), f_q)) +mstore(0x4340, mulmod(sub(f_q, mload(0x4320)), mload(0x38e0), f_q)) +mstore(0x4360, mulmod(mload(0x3ac0), mload(0x38e0), f_q)) +mstore(0x4380, addmod(mload(0x42e0), mload(0x4340), f_q)) +mstore(0x43a0, mulmod(mload(0x4380), mload(0xc00), f_q)) +mstore(0x43c0, mulmod(mload(0x3b40), mload(0xc00), f_q)) +mstore(0x43e0, mulmod(mload(0x3bc0), mload(0xc00), f_q)) +mstore(0x4400, mulmod(mload(0x3c60), mload(0xc00), f_q)) +mstore(0x4420, mulmod(mload(0x3d00), mload(0xc00), f_q)) +mstore(0x4440, mulmod(mload(0x3da0), mload(0xc00), f_q)) +mstore(0x4460, mulmod(mload(0x3e40), mload(0xc00), f_q)) +mstore(0x4480, mulmod(mload(0x3ee0), mload(0xc00), f_q)) +mstore(0x44a0, mulmod(mload(0x3f80), mload(0xc00), f_q)) +mstore(0x44c0, mulmod(mload(0x4020), mload(0xc00), f_q)) +mstore(0x44e0, mulmod(mload(0x40c0), mload(0xc00), f_q)) +mstore(0x4500, mulmod(mload(0x4160), mload(0xc00), f_q)) +mstore(0x4520, mulmod(mload(0x4260), mload(0xc00), f_q)) +mstore(0x4540, mulmod(mload(0x4280), mload(0xc00), f_q)) +mstore(0x4560, mulmod(mload(0x42a0), mload(0xc00), f_q)) +mstore(0x4580, mulmod(mload(0x42c0), mload(0xc00), f_q)) +mstore(0x45a0, mulmod(mload(0x4360), mload(0xc00), f_q)) +mstore(0x45c0, addmod(mload(0x3a80), mload(0x43a0), f_q)) +mstore(0x45e0, mulmod(1, mload(0x3580), f_q)) +{ + let result := mulmod(mload(0xa80), mload(0x3200), f_q) +result := addmod(mulmod(mload(0xaa0), mload(0x3220), f_q), result, f_q) +result := addmod(mulmod(mload(0xac0), mload(0x3240), f_q), result, f_q) +mstore(17920, result) + } +mstore(0x4620, mulmod(mload(0x4600), mload(0x3760), f_q)) +mstore(0x4640, mulmod(sub(f_q, mload(0x4620)), 1, f_q)) +mstore(0x4660, mulmod(mload(0x45e0), 1, f_q)) +mstore(0x4680, mulmod(mload(0x4640), mload(0x3920), f_q)) +mstore(0x46a0, mulmod(mload(0x4660), mload(0x3920), f_q)) +mstore(0x46c0, addmod(mload(0x45c0), mload(0x4680), f_q)) +mstore(0x46e0, mulmod(1, mload(0x35c0), f_q)) +{ + let result := mulmod(mload(0xae0), mload(0x3280), f_q) +result := addmod(mulmod(mload(0xb00), mload(0x32a0), f_q), result, f_q) +mstore(18176, result) + } +mstore(0x4720, mulmod(mload(0x4700), mload(0x3780), f_q)) +mstore(0x4740, mulmod(sub(f_q, mload(0x4720)), 1, f_q)) +mstore(0x4760, mulmod(mload(0x46e0), 1, f_q)) +{ + let result := mulmod(mload(0xb20), mload(0x3280), f_q) +result := addmod(mulmod(mload(0xb40), mload(0x32a0), f_q), result, f_q) +mstore(18304, result) + } +mstore(0x47a0, mulmod(mload(0x4780), mload(0x3780), f_q)) +mstore(0x47c0, mulmod(sub(f_q, mload(0x47a0)), mload(0xba0), f_q)) +mstore(0x47e0, mulmod(mload(0x46e0), mload(0xba0), f_q)) +mstore(0x4800, addmod(mload(0x4740), mload(0x47c0), f_q)) +mstore(0x4820, mulmod(mload(0x4800), mload(0x3940), f_q)) +mstore(0x4840, mulmod(mload(0x4760), mload(0x3940), f_q)) +mstore(0x4860, mulmod(mload(0x47e0), mload(0x3940), f_q)) +mstore(0x4880, addmod(mload(0x46c0), mload(0x4820), f_q)) +mstore(0x48a0, mulmod(1, mload(0x31c0), f_q)) +mstore(0x48c0, mulmod(1, mload(0xca0), f_q)) +mstore(0x48e0, 0x0000000000000000000000000000000000000000000000000000000000000001) + mstore(0x4900, 0x0000000000000000000000000000000000000000000000000000000000000002) +mstore(0x4920, mload(0x4880)) +success := and(eq(staticcall(gas(), 0x7, 0x48e0, 0x60, 0x48e0, 0x40), 1), success) +mstore(0x4940, mload(0x48e0)) + mstore(0x4960, mload(0x4900)) +mstore(0x4980, mload(0x340)) + mstore(0x49a0, mload(0x360)) +success := and(eq(staticcall(gas(), 0x6, 0x4940, 0x80, 0x4940, 0x40), 1), success) +mstore(0x49c0, mload(0x380)) + mstore(0x49e0, mload(0x3a0)) +mstore(0x4a00, mload(0x3aa0)) +success := and(eq(staticcall(gas(), 0x7, 0x49c0, 0x60, 0x49c0, 0x40), 1), success) +mstore(0x4a20, mload(0x4940)) + mstore(0x4a40, mload(0x4960)) +mstore(0x4a60, mload(0x49c0)) + mstore(0x4a80, mload(0x49e0)) +success := and(eq(staticcall(gas(), 0x6, 0x4a20, 0x80, 0x4a20, 0x40), 1), success) +mstore(0x4aa0, mload(0x3c0)) + mstore(0x4ac0, mload(0x3e0)) +mstore(0x4ae0, mload(0x43c0)) +success := and(eq(staticcall(gas(), 0x7, 0x4aa0, 0x60, 0x4aa0, 0x40), 1), success) +mstore(0x4b00, mload(0x4a20)) + mstore(0x4b20, mload(0x4a40)) +mstore(0x4b40, mload(0x4aa0)) + mstore(0x4b60, mload(0x4ac0)) +success := and(eq(staticcall(gas(), 0x6, 0x4b00, 0x80, 0x4b00, 0x40), 1), success) +mstore(0x4b80, mload(0x460)) + mstore(0x4ba0, mload(0x480)) +mstore(0x4bc0, mload(0x43e0)) +success := and(eq(staticcall(gas(), 0x7, 0x4b80, 0x60, 0x4b80, 0x40), 1), success) +mstore(0x4be0, mload(0x4b00)) + mstore(0x4c00, mload(0x4b20)) +mstore(0x4c20, mload(0x4b80)) + mstore(0x4c40, mload(0x4ba0)) +success := and(eq(staticcall(gas(), 0x6, 0x4be0, 0x80, 0x4be0, 0x40), 1), success) +mstore(0x4c60, 0x01a2dccc9df89d430682354f68387f94ec2b345b87e0db5fbf829f941dbea034) + mstore(0x4c80, 0x24495ba95dd2ed1875875139ae587035642e9ec820a2b6a933526320a1299fdb) +mstore(0x4ca0, mload(0x4400)) +success := and(eq(staticcall(gas(), 0x7, 0x4c60, 0x60, 0x4c60, 0x40), 1), success) +mstore(0x4cc0, mload(0x4be0)) + mstore(0x4ce0, mload(0x4c00)) +mstore(0x4d00, mload(0x4c60)) + mstore(0x4d20, mload(0x4c80)) +success := and(eq(staticcall(gas(), 0x6, 0x4cc0, 0x80, 0x4cc0, 0x40), 1), success) +mstore(0x4d40, 0x0fb05ccb81603592ce60bd6199890470ef6f9caca3c17570df7701d70a2dd957) + mstore(0x4d60, 0x1cc1301d6d462edf2e79083532a337ef3f087fbf0b9516d08074784017e10c7e) +mstore(0x4d80, mload(0x4420)) +success := and(eq(staticcall(gas(), 0x7, 0x4d40, 0x60, 0x4d40, 0x40), 1), success) +mstore(0x4da0, mload(0x4cc0)) + mstore(0x4dc0, mload(0x4ce0)) +mstore(0x4de0, mload(0x4d40)) + mstore(0x4e00, mload(0x4d60)) +success := and(eq(staticcall(gas(), 0x6, 0x4da0, 0x80, 0x4da0, 0x40), 1), success) +mstore(0x4e20, 0x1e69edc3b54a25a5be1efb7515b5eaa259569e44cf6e7b99887bd2015311104f) + mstore(0x4e40, 0x293e037f34e8ad87a6ebea272575c751f96a1e0acbf05bf5774e0581c3cc3823) +mstore(0x4e60, mload(0x4440)) +success := and(eq(staticcall(gas(), 0x7, 0x4e20, 0x60, 0x4e20, 0x40), 1), success) +mstore(0x4e80, mload(0x4da0)) + mstore(0x4ea0, mload(0x4dc0)) +mstore(0x4ec0, mload(0x4e20)) + mstore(0x4ee0, mload(0x4e40)) +success := and(eq(staticcall(gas(), 0x6, 0x4e80, 0x80, 0x4e80, 0x40), 1), success) +mstore(0x4f00, 0x0000000000000000000000000000000000000000000000000000000000000000) + mstore(0x4f20, 0x0000000000000000000000000000000000000000000000000000000000000000) +mstore(0x4f40, mload(0x4460)) +success := and(eq(staticcall(gas(), 0x7, 0x4f00, 0x60, 0x4f00, 0x40), 1), success) +mstore(0x4f60, mload(0x4e80)) + mstore(0x4f80, mload(0x4ea0)) +mstore(0x4fa0, mload(0x4f00)) + mstore(0x4fc0, mload(0x4f20)) +success := and(eq(staticcall(gas(), 0x6, 0x4f60, 0x80, 0x4f60, 0x40), 1), success) +mstore(0x4fe0, 0x2c2ef5dd4ea527c7b6a1adb979cf19e316cf50515b2225ecd040f40f46ad8fc6) + mstore(0x5000, 0x2cd240820bffbbfa44c0832dfe16e8a40c4e75d800f58f7576733ca37a9c7369) +mstore(0x5020, mload(0x4480)) +success := and(eq(staticcall(gas(), 0x7, 0x4fe0, 0x60, 0x4fe0, 0x40), 1), success) +mstore(0x5040, mload(0x4f60)) + mstore(0x5060, mload(0x4f80)) +mstore(0x5080, mload(0x4fe0)) + mstore(0x50a0, mload(0x5000)) +success := and(eq(staticcall(gas(), 0x6, 0x5040, 0x80, 0x5040, 0x40), 1), success) +mstore(0x50c0, 0x1a60db4a3974fd2cbdc37d2ef08e77f3d5b73ae9b6080647256bb34ac15aa4e4) + mstore(0x50e0, 0x191478c1807b7c698919c2d87b73ba879f26fcf114b6f0cc9bdec456e367fe13) +mstore(0x5100, mload(0x44a0)) +success := and(eq(staticcall(gas(), 0x7, 0x50c0, 0x60, 0x50c0, 0x40), 1), success) +mstore(0x5120, mload(0x5040)) + mstore(0x5140, mload(0x5060)) +mstore(0x5160, mload(0x50c0)) + mstore(0x5180, mload(0x50e0)) +success := and(eq(staticcall(gas(), 0x6, 0x5120, 0x80, 0x5120, 0x40), 1), success) +mstore(0x51a0, 0x0873cc03ce16e12faa7287ab743da8451dffba949d4e389fe3fea27beaf3e6e2) + mstore(0x51c0, 0x043c7720f36d360da56ce3cec316ab45d639be09eb4bb7136738ee125806655e) +mstore(0x51e0, mload(0x44c0)) +success := and(eq(staticcall(gas(), 0x7, 0x51a0, 0x60, 0x51a0, 0x40), 1), success) +mstore(0x5200, mload(0x5120)) + mstore(0x5220, mload(0x5140)) +mstore(0x5240, mload(0x51a0)) + mstore(0x5260, mload(0x51c0)) +success := and(eq(staticcall(gas(), 0x6, 0x5200, 0x80, 0x5200, 0x40), 1), success) +mstore(0x5280, 0x1c3c6a9ea2095f1997e9892025d8d447a8aa2c0b0b22699c5df2dfa2670c024d) + mstore(0x52a0, 0x2819a9018a27b13f64152d8d956dfcd6b289ee42861390baff4f8dd6353c3b6d) +mstore(0x52c0, mload(0x44e0)) +success := and(eq(staticcall(gas(), 0x7, 0x5280, 0x60, 0x5280, 0x40), 1), success) +mstore(0x52e0, mload(0x5200)) + mstore(0x5300, mload(0x5220)) +mstore(0x5320, mload(0x5280)) + mstore(0x5340, mload(0x52a0)) +success := and(eq(staticcall(gas(), 0x6, 0x52e0, 0x80, 0x52e0, 0x40), 1), success) +mstore(0x5360, 0x1ed7cd74f3fe8643c01a20df3fb9d9bda939a0c3c7dddea2962eabd8a9bf598a) + mstore(0x5380, 0x269356c70bc79c8ff18c8243c49c1987b15cf04e729bd27733ba9747908115d0) +mstore(0x53a0, mload(0x4500)) +success := and(eq(staticcall(gas(), 0x7, 0x5360, 0x60, 0x5360, 0x40), 1), success) +mstore(0x53c0, mload(0x52e0)) + mstore(0x53e0, mload(0x5300)) +mstore(0x5400, mload(0x5360)) + mstore(0x5420, mload(0x5380)) +success := and(eq(staticcall(gas(), 0x6, 0x53c0, 0x80, 0x53c0, 0x40), 1), success) +mstore(0x5440, mload(0x6c0)) + mstore(0x5460, mload(0x6e0)) +mstore(0x5480, mload(0x4520)) +success := and(eq(staticcall(gas(), 0x7, 0x5440, 0x60, 0x5440, 0x40), 1), success) +mstore(0x54a0, mload(0x53c0)) + mstore(0x54c0, mload(0x53e0)) +mstore(0x54e0, mload(0x5440)) + mstore(0x5500, mload(0x5460)) +success := and(eq(staticcall(gas(), 0x6, 0x54a0, 0x80, 0x54a0, 0x40), 1), success) +mstore(0x5520, mload(0x700)) + mstore(0x5540, mload(0x720)) +mstore(0x5560, mload(0x4540)) +success := and(eq(staticcall(gas(), 0x7, 0x5520, 0x60, 0x5520, 0x40), 1), success) +mstore(0x5580, mload(0x54a0)) + mstore(0x55a0, mload(0x54c0)) +mstore(0x55c0, mload(0x5520)) + mstore(0x55e0, mload(0x5540)) +success := and(eq(staticcall(gas(), 0x6, 0x5580, 0x80, 0x5580, 0x40), 1), success) +mstore(0x5600, mload(0x740)) + mstore(0x5620, mload(0x760)) +mstore(0x5640, mload(0x4560)) +success := and(eq(staticcall(gas(), 0x7, 0x5600, 0x60, 0x5600, 0x40), 1), success) +mstore(0x5660, mload(0x5580)) + mstore(0x5680, mload(0x55a0)) +mstore(0x56a0, mload(0x5600)) + mstore(0x56c0, mload(0x5620)) +success := and(eq(staticcall(gas(), 0x6, 0x5660, 0x80, 0x5660, 0x40), 1), success) +mstore(0x56e0, mload(0x780)) + mstore(0x5700, mload(0x7a0)) +mstore(0x5720, mload(0x4580)) +success := and(eq(staticcall(gas(), 0x7, 0x56e0, 0x60, 0x56e0, 0x40), 1), success) +mstore(0x5740, mload(0x5660)) + mstore(0x5760, mload(0x5680)) +mstore(0x5780, mload(0x56e0)) + mstore(0x57a0, mload(0x5700)) +success := and(eq(staticcall(gas(), 0x6, 0x5740, 0x80, 0x5740, 0x40), 1), success) +mstore(0x57c0, mload(0x620)) + mstore(0x57e0, mload(0x640)) +mstore(0x5800, mload(0x45a0)) +success := and(eq(staticcall(gas(), 0x7, 0x57c0, 0x60, 0x57c0, 0x40), 1), success) +mstore(0x5820, mload(0x5740)) + mstore(0x5840, mload(0x5760)) +mstore(0x5860, mload(0x57c0)) + mstore(0x5880, mload(0x57e0)) +success := and(eq(staticcall(gas(), 0x6, 0x5820, 0x80, 0x5820, 0x40), 1), success) +mstore(0x58a0, mload(0x560)) + mstore(0x58c0, mload(0x580)) +mstore(0x58e0, mload(0x46a0)) +success := and(eq(staticcall(gas(), 0x7, 0x58a0, 0x60, 0x58a0, 0x40), 1), success) +mstore(0x5900, mload(0x5820)) + mstore(0x5920, mload(0x5840)) +mstore(0x5940, mload(0x58a0)) + mstore(0x5960, mload(0x58c0)) +success := and(eq(staticcall(gas(), 0x6, 0x5900, 0x80, 0x5900, 0x40), 1), success) +mstore(0x5980, mload(0x5a0)) + mstore(0x59a0, mload(0x5c0)) +mstore(0x59c0, mload(0x4840)) +success := and(eq(staticcall(gas(), 0x7, 0x5980, 0x60, 0x5980, 0x40), 1), success) +mstore(0x59e0, mload(0x5900)) + mstore(0x5a00, mload(0x5920)) +mstore(0x5a20, mload(0x5980)) + mstore(0x5a40, mload(0x59a0)) +success := and(eq(staticcall(gas(), 0x6, 0x59e0, 0x80, 0x59e0, 0x40), 1), success) +mstore(0x5a60, mload(0x5e0)) + mstore(0x5a80, mload(0x600)) +mstore(0x5aa0, mload(0x4860)) +success := and(eq(staticcall(gas(), 0x7, 0x5a60, 0x60, 0x5a60, 0x40), 1), success) +mstore(0x5ac0, mload(0x59e0)) + mstore(0x5ae0, mload(0x5a00)) +mstore(0x5b00, mload(0x5a60)) + mstore(0x5b20, mload(0x5a80)) +success := and(eq(staticcall(gas(), 0x6, 0x5ac0, 0x80, 0x5ac0, 0x40), 1), success) +mstore(0x5b40, mload(0xc40)) + mstore(0x5b60, mload(0xc60)) +mstore(0x5b80, sub(f_q, mload(0x48a0))) +success := and(eq(staticcall(gas(), 0x7, 0x5b40, 0x60, 0x5b40, 0x40), 1), success) +mstore(0x5ba0, mload(0x5ac0)) + mstore(0x5bc0, mload(0x5ae0)) +mstore(0x5be0, mload(0x5b40)) + mstore(0x5c00, mload(0x5b60)) +success := and(eq(staticcall(gas(), 0x6, 0x5ba0, 0x80, 0x5ba0, 0x40), 1), success) +mstore(0x5c20, mload(0xce0)) + mstore(0x5c40, mload(0xd00)) +mstore(0x5c60, mload(0x48c0)) +success := and(eq(staticcall(gas(), 0x7, 0x5c20, 0x60, 0x5c20, 0x40), 1), success) +mstore(0x5c80, mload(0x5ba0)) + mstore(0x5ca0, mload(0x5bc0)) +mstore(0x5cc0, mload(0x5c20)) + mstore(0x5ce0, mload(0x5c40)) +success := and(eq(staticcall(gas(), 0x6, 0x5c80, 0x80, 0x5c80, 0x40), 1), success) +mstore(0x5d00, mload(0x5c80)) + mstore(0x5d20, mload(0x5ca0)) +mstore(0x5d40, mload(0xce0)) + mstore(0x5d60, mload(0xd00)) +mstore(0x5d80, mload(0xd20)) + mstore(0x5da0, mload(0xd40)) +mstore(0x5dc0, mload(0xd60)) + mstore(0x5de0, mload(0xd80)) +mstore(0x5e00, keccak256(0x5d00, 256)) +mstore(24096, mod(mload(24064), f_q)) +mstore(0x5e40, mulmod(mload(0x5e20), mload(0x5e20), f_q)) +mstore(0x5e60, mulmod(1, mload(0x5e20), f_q)) +mstore(0x5e80, mload(0x5d80)) + mstore(0x5ea0, mload(0x5da0)) +mstore(0x5ec0, mload(0x5e60)) +success := and(eq(staticcall(gas(), 0x7, 0x5e80, 0x60, 0x5e80, 0x40), 1), success) +mstore(0x5ee0, mload(0x5d00)) + mstore(0x5f00, mload(0x5d20)) +mstore(0x5f20, mload(0x5e80)) + mstore(0x5f40, mload(0x5ea0)) +success := and(eq(staticcall(gas(), 0x6, 0x5ee0, 0x80, 0x5ee0, 0x40), 1), success) +mstore(0x5f60, mload(0x5dc0)) + mstore(0x5f80, mload(0x5de0)) +mstore(0x5fa0, mload(0x5e60)) +success := and(eq(staticcall(gas(), 0x7, 0x5f60, 0x60, 0x5f60, 0x40), 1), success) +mstore(0x5fc0, mload(0x5d40)) + mstore(0x5fe0, mload(0x5d60)) +mstore(0x6000, mload(0x5f60)) + mstore(0x6020, mload(0x5f80)) +success := and(eq(staticcall(gas(), 0x6, 0x5fc0, 0x80, 0x5fc0, 0x40), 1), success) +mstore(0x6040, mload(0x5ee0)) + mstore(0x6060, mload(0x5f00)) +mstore(0x6080, 0x198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c2) + mstore(0x60a0, 0x1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed) + mstore(0x60c0, 0x090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b) + mstore(0x60e0, 0x12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa) +mstore(0x6100, mload(0x5fc0)) + mstore(0x6120, mload(0x5fe0)) +mstore(0x6140, 0x186282957db913abd99f91db59fe69922e95040603ef44c0bd7aa3adeef8f5ac) + mstore(0x6160, 0x17944351223333f260ddc3b4af45191b856689eda9eab5cbcddbbe570ce860d2) + mstore(0x6180, 0x06d971ff4a7467c3ec596ed6efc674572e32fd6f52b721f97e35b0b3d3546753) + mstore(0x61a0, 0x06ecdb9f9567f59ed2eee36e1e1d58797fd13cc97fafc2910f5e8a12f202fa9a) +success := and(eq(staticcall(gas(), 0x8, 0x6040, 0x180, 0x6040, 0x20), 1), success) +success := and(eq(mload(0x6040), 1), success) + + if not(success) { revert(0, 0) } + return(0, 0) + + } + } + } \ No newline at end of file diff --git a/release-v0.12.0-rc.2/layer1.config b/release-v0.12.0-rc.2/layer1.config new file mode 100644 index 00000000..0c40c695 --- /dev/null +++ b/release-v0.12.0-rc.2/layer1.config @@ -0,0 +1,14 @@ +{ + "strategy": "Simple", + "degree": 24, + "num_advice": [ + 15 + ], + "num_lookup_advice": [ + 2 + ], + "num_fixed": 1, + "lookup_bits": 20, + "limb_bits": 88, + "num_limbs": 3 +} diff --git a/release-v0.12.0-rc.2/layer2.config b/release-v0.12.0-rc.2/layer2.config new file mode 100644 index 00000000..736faa26 --- /dev/null +++ b/release-v0.12.0-rc.2/layer2.config @@ -0,0 +1,14 @@ +{ + "strategy": "Simple", + "degree": 25, + "num_advice": [ + 1 + ], + "num_lookup_advice": [ + 1 + ], + "num_fixed": 1, + "lookup_bits": 24, + "limb_bits": 88, + "num_limbs": 3 +} diff --git a/release-v0.12.0-rc.2/layer3.config b/release-v0.12.0-rc.2/layer3.config new file mode 100644 index 00000000..be4fea74 --- /dev/null +++ b/release-v0.12.0-rc.2/layer3.config @@ -0,0 +1,14 @@ +{ + "strategy": "Simple", + "degree": 21, + "num_advice": [ + 63 + ], + "num_lookup_advice": [ + 8 + ], + "num_fixed": 2, + "lookup_bits": 20, + "limb_bits": 88, + "num_limbs": 3 +} diff --git a/release-v0.12.0-rc.2/layer4.config b/release-v0.12.0-rc.2/layer4.config new file mode 100644 index 00000000..ec9ac98c --- /dev/null +++ b/release-v0.12.0-rc.2/layer4.config @@ -0,0 +1,14 @@ +{ + "strategy": "Simple", + "degree": 26, + "num_advice": [ + 2 + ], + "num_lookup_advice": [ + 1 + ], + "num_fixed": 1, + "lookup_bits": 25, + "limb_bits": 88, + "num_limbs": 3 +} diff --git a/release-v0.12.0-rc.2/layer5.config b/release-v0.12.0-rc.2/layer5.config new file mode 100644 index 00000000..dc976d77 --- /dev/null +++ b/release-v0.12.0-rc.2/layer5.config @@ -0,0 +1,14 @@ +{ + "strategy": "Simple", + "degree": 21, + "num_advice": [ + 4 + ], + "num_lookup_advice": [ + 1 + ], + "num_fixed": 1, + "lookup_bits": 20, + "limb_bits" :88, + "num_limbs": 3 +} \ No newline at end of file diff --git a/release-v0.12.0-rc.2/layer6.config b/release-v0.12.0-rc.2/layer6.config new file mode 100644 index 00000000..ec9ac98c --- /dev/null +++ b/release-v0.12.0-rc.2/layer6.config @@ -0,0 +1,14 @@ +{ + "strategy": "Simple", + "degree": 26, + "num_advice": [ + 2 + ], + "num_lookup_advice": [ + 1 + ], + "num_fixed": 1, + "lookup_bits": 25, + "limb_bits": 88, + "num_limbs": 3 +} diff --git a/release-v0.12.0-rc.2/pi.data b/release-v0.12.0-rc.2/pi.data new file mode 100644 index 00000000..a30abdd6 Binary files /dev/null and b/release-v0.12.0-rc.2/pi.data differ diff --git a/release-v0.12.0-rc.2/proof.data b/release-v0.12.0-rc.2/proof.data new file mode 100644 index 00000000..bdff9825 Binary files /dev/null and b/release-v0.12.0-rc.2/proof.data differ diff --git a/release-v0.12.0-rc.2/sha256sum b/release-v0.12.0-rc.2/sha256sum new file mode 100644 index 00000000..8aef6b7b --- /dev/null +++ b/release-v0.12.0-rc.2/sha256sum @@ -0,0 +1,14 @@ +2f33295ea565250f46121be632735198d43ad082d55baa411ebefc619d23e0a7 chunk.protocol +a1ceaeedadeb246fb0237b46c11dc07d884c32f8a90279072a3afd5b39176e5f evm_verifier.bin +d34fda37daa6eaec0bcca0b7afc5a63433b5c260d3bf600613fe8d030a938b65 evm_verifier.yul +dc641fa235d2654e1c1e1e11d27a7b76cf672be1f723b5a0a931f278b24d96f9 layer1.config +fa75f6878faca890a4b95ac385b8ecc84c3f0ed1f3daf54a6d317e9698d2ebab layer2.config +30b9bf553fcb8e73ed653de4ce8543f4c730a3c4ee30901537bdf8f0b0d1653f layer3.config +24fa0bdad540e1c07c74f8e83221e101c415c490b56a008f5c0738fba6303cf3 layer4.config +58498ddf78d800cf2c509cc57dd7e772b5768a50723ab43822d2e5454ebe8cb6 layer5.config +24fa0bdad540e1c07c74f8e83221e101c415c490b56a008f5c0738fba6303cf3 layer6.config +5b172a775c1c27487cfd73c816fac77dc09fdeb835a3a5f153ec13ed41f3c2dc pi.data +bcc4b5607bc080a02c0eb0a4167810e6aabf6df1c1248e89843278bef4be8fad proof.data +383e6642bb0f74892fbc579943f797eee2aa28fc21fdbf1a323ff38c7b0d75fc vk_batch.vkey +1036fbaf6438253e294adb1491f98dce6cbb463a4c7e679a515fdc5e82154209 vk_bundle.key +55c908f1adb48ad93fb21819b668a17b9fc9ed0ceced57e1068918008271c61b vk_chunk.vkey diff --git a/release-v0.12.0-rc.2/vk_batch.vkey b/release-v0.12.0-rc.2/vk_batch.vkey new file mode 100644 index 00000000..b3540d0f Binary files /dev/null and b/release-v0.12.0-rc.2/vk_batch.vkey differ diff --git a/release-v0.12.0-rc.2/vk_bundle.key b/release-v0.12.0-rc.2/vk_bundle.key new file mode 100644 index 00000000..790c077b Binary files /dev/null and b/release-v0.12.0-rc.2/vk_bundle.key differ diff --git a/release-v0.12.0-rc.2/vk_chunk.vkey b/release-v0.12.0-rc.2/vk_chunk.vkey new file mode 100644 index 00000000..7318195d Binary files /dev/null and b/release-v0.12.0-rc.2/vk_chunk.vkey differ