diff --git a/contracts/snark-verifiers/sync_step.sol b/contracts/snark-verifiers/sync_step.sol index c28bf418..85b857a3 100644 --- a/contracts/snark-verifiers/sync_step.sol +++ b/contracts/snark-verifiers/sync_step.sol @@ -12,12 +12,12 @@ contract Verifier { uint256 constant SIZE_LIMIT = 21888242871839275222246405745257275088696311157297823662689037894645226208583; function verify( - uint256[0] calldata pubInputs, + uint256[1] calldata pubInputs, bytes calldata proof ) public view returns (bool) { bool success = true; - bytes32[1229] memory transcript; + bytes32[1231] memory transcript; for (uint i = 0; i < pubInputs.length; i++) { require(pubInputs[i] < SIZE_LIMIT); } - assembly { } { let y_square := mulmod(y, y, 0x30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47) let x_square := mulmod(x, x, 0x30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47) let x_cube := mulmod(x_square, x, 0x30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47) let x_cube_plus_3 := addmod(x_cube, 3, 0x30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47) let is_affine := eq(x_cube_plus_3, y_square) valid := and(valid, is_affine) } } mstore(0x80, 697977589985395630139925574281256772762542249956921372363329126037282444860) { let x := calldataload(0x4) mstore(0xa0, x) let y := calldataload(0x44) mstore(0xc0, y) success := and(validate_ec_point(x, y), success) } { let x := calldataload(0x64) mstore(0xe0, x) let y := calldataload(0x84) mstore(0x100, y) success := and(validate_ec_point(x, y), success) } { let x := calldataload(0xa4) mstore(0x120, x) let y := calldataload(0xc4) mstore(0x140, y) success := and(validate_ec_point(x, y), success) } { let x := calldataload(0xe4) mstore(0x160, x) let y := calldataload(0x104) mstore(0x180, y) success := and(validate_ec_point(x, y), success) } { let x := calldataload(0x124) mstore(0x1a0, x) let y := calldataload(0x144) mstore(0x1c0, y) success := and(validate_ec_point(x, y), success) } { let x := calldataload(0x164) mstore(0x1e0, x) let y := calldataload(0x184) mstore(0x200, y) success := and(validate_ec_point(x, y), success) } { let x := calldataload(0x1a4) mstore(0x220, x) let y := calldataload(0x1c4) mstore(0x240, y) success := and(validate_ec_point(x, y), success) } { let x := calldataload(0x1e4) mstore(0x260, x) let y := calldataload(0x204) mstore(0x280, y) success := and(validate_ec_point(x, y), success) } { let x := calldataload(0x224) mstore(0x2a0, x) let y := calldataload(0x244) mstore(0x2c0, y) success := and(validate_ec_point(x, y), success) }mstore(0x2e0, keccak256(0x80, 608)){ let hash := mload(0x2e0) mstore(0x300, mod(hash, f_q)) mstore(0x320, hash) } { let x := calldataload(0x264) mstore(0x340, x) let y := calldataload(0x284) mstore(0x360, y) success := and(validate_ec_point(x, y), success) } { let x := calldataload(0x2a4) mstore(0x380, x) let y := calldataload(0x2c4) mstore(0x3a0, y) success := and(validate_ec_point(x, y), success) } { let x := calldataload(0x2e4) mstore(0x3c0, x) let y := calldataload(0x304) mstore(0x3e0, y) success := and(validate_ec_point(x, y), success) } { let x := calldataload(0x324) mstore(0x400, x) let y := calldataload(0x344) mstore(0x420, y) success := and(validate_ec_point(x, y), success) }mstore(0x440, keccak256(0x320, 288)){ let hash := mload(0x440) mstore(0x460, mod(hash, f_q)) mstore(0x480, hash) }mstore8(0x4a0, 1)mstore(0x4a0, keccak256(0x480, 33)){ let hash := mload(0x4a0) mstore(0x4c0, mod(hash, f_q)) mstore(0x4e0, hash) } { let x := calldataload(0x364) mstore(0x500, x) let y := calldataload(0x384) mstore(0x520, y) success := and(validate_ec_point(x, y), success) } { let x := calldataload(0x3a4) mstore(0x540, x) let y := calldataload(0x3c4) mstore(0x560, y) success := and(validate_ec_point(x, y), success) } { let x := calldataload(0x3e4) mstore(0x580, x) let y := calldataload(0x404) mstore(0x5a0, y) success := and(validate_ec_point(x, y), success) } { let x := calldataload(0x424) mstore(0x5c0, x) let y := calldataload(0x444) mstore(0x5e0, y) success := and(validate_ec_point(x, y), success) } { let x := calldataload(0x464) mstore(0x600, x) let y := calldataload(0x484) mstore(0x620, y) success := and(validate_ec_point(x, y), success) } { let x := calldataload(0x4a4) mstore(0x640, x) let y := calldataload(0x4c4) mstore(0x660, y) success := and(validate_ec_point(x, y), success) } { let x := calldataload(0x4e4) mstore(0x680, x) let y := calldataload(0x504) mstore(0x6a0, y) success := and(validate_ec_point(x, y), success) } { let x := calldataload(0x524) mstore(0x6c0, x) let y := calldataload(0x544) mstore(0x6e0, y) success := and(validate_ec_point(x, y), success) } { let x := calldataload(0x564) mstore(0x700, x) let y := calldataload(0x584) mstore(0x720, y) success := and(validate_ec_point(x, y), success) }mstore(0x740, keccak256(0x4e0, 608)){ let hash := mload(0x740) mstore(0x760, mod(hash, f_q)) mstore(0x780, hash) } { let x := calldataload(0x5a4) mstore(0x7a0, x) let y := calldataload(0x5c4) mstore(0x7c0, y) success := and(validate_ec_point(x, y), success) } { let x := calldataload(0x5e4) mstore(0x7e0, x) let y := calldataload(0x604) mstore(0x800, y) success := and(validate_ec_point(x, y), success) } { let x := calldataload(0x624) mstore(0x820, x) let y := calldataload(0x644) mstore(0x840, y) success := and(validate_ec_point(x, y), success) }mstore(0x860, keccak256(0x780, 224)){ let hash := mload(0x860) mstore(0x880, mod(hash, f_q)) mstore(0x8a0, hash) }mstore(0x8c0, mod(calldataload(0x664), f_q))mstore(0x8e0, mod(calldataload(0x684), f_q))mstore(0x900, mod(calldataload(0x6a4), f_q))mstore(0x920, mod(calldataload(0x6c4), f_q))mstore(0x940, mod(calldataload(0x6e4), f_q))mstore(0x960, mod(calldataload(0x704), f_q))mstore(0x980, mod(calldataload(0x724), f_q))mstore(0x9a0, mod(calldataload(0x744), f_q))mstore(0x9c0, mod(calldataload(0x764), f_q))mstore(0x9e0, mod(calldataload(0x784), f_q))mstore(0xa00, mod(calldataload(0x7a4), f_q))mstore(0xa20, mod(calldataload(0x7c4), f_q))mstore(0xa40, mod(calldataload(0x7e4), f_q))mstore(0xa60, mod(calldataload(0x804), f_q))mstore(0xa80, mod(calldataload(0x824), f_q))mstore(0xaa0, mod(calldataload(0x844), f_q))mstore(0xac0, mod(calldataload(0x864), f_q))mstore(0xae0, mod(calldataload(0x884), f_q))mstore(0xb00, mod(calldataload(0x8a4), f_q))mstore(0xb20, mod(calldataload(0x8c4), f_q))mstore(0xb40, mod(calldataload(0x8e4), f_q))mstore(0xb60, mod(calldataload(0x904), f_q))mstore(0xb80, mod(calldataload(0x924), f_q))mstore(0xba0, mod(calldataload(0x944), f_q))mstore(0xbc0, mod(calldataload(0x964), f_q))mstore(0xbe0, mod(calldataload(0x984), f_q))mstore(0xc00, mod(calldataload(0x9a4), f_q))mstore(0xc20, mod(calldataload(0x9c4), f_q))mstore(0xc40, mod(calldataload(0x9e4), f_q))mstore(0xc60, mod(calldataload(0xa04), f_q))mstore(0xc80, mod(calldataload(0xa24), f_q))mstore(0xca0, mod(calldataload(0xa44), f_q))mstore(0xcc0, mod(calldataload(0xa64), f_q))mstore(0xce0, mod(calldataload(0xa84), f_q))mstore(0xd00, mod(calldataload(0xaa4), f_q))mstore(0xd20, mod(calldataload(0xac4), f_q))mstore(0xd40, mod(calldataload(0xae4), f_q))mstore(0xd60, mod(calldataload(0xb04), f_q))mstore(0xd80, mod(calldataload(0xb24), f_q))mstore(0xda0, mod(calldataload(0xb44), f_q))mstore(0xdc0, mod(calldataload(0xb64), f_q))mstore(0xde0, mod(calldataload(0xb84), f_q))mstore(0xe00, mod(calldataload(0xba4), f_q))mstore(0xe20, mod(calldataload(0xbc4), f_q))mstore(0xe40, mod(calldataload(0xbe4), f_q))mstore(0xe60, mod(calldataload(0xc04), f_q))mstore(0xe80, mod(calldataload(0xc24), f_q))mstore(0xea0, mod(calldataload(0xc44), f_q))mstore(0xec0, mod(calldataload(0xc64), f_q))mstore(0xee0, mod(calldataload(0xc84), f_q))mstore(0xf00, mod(calldataload(0xca4), f_q))mstore(0xf20, mod(calldataload(0xcc4), f_q))mstore(0xf40, mod(calldataload(0xce4), f_q))mstore(0xf60, mod(calldataload(0xd04), f_q))mstore(0xf80, mod(calldataload(0xd24), f_q))mstore(0xfa0, mod(calldataload(0xd44), f_q))mstore(0xfc0, mod(calldataload(0xd64), f_q))mstore(0xfe0, mod(calldataload(0xd84), f_q))mstore(0x1000, mod(calldataload(0xda4), f_q))mstore(0x1020, mod(calldataload(0xdc4), f_q))mstore(0x1040, mod(calldataload(0xde4), f_q))mstore(0x1060, mod(calldataload(0xe04), f_q))mstore(0x1080, mod(calldataload(0xe24), f_q))mstore(0x10a0, mod(calldataload(0xe44), f_q))mstore(0x10c0, mod(calldataload(0xe64), f_q))mstore(0x10e0, mod(calldataload(0xe84), f_q))mstore(0x1100, mod(calldataload(0xea4), f_q))mstore(0x1120, mod(calldataload(0xec4), f_q))mstore(0x1140, mod(calldataload(0xee4), f_q))mstore(0x1160, mod(calldataload(0xf04), f_q))mstore(0x1180, mod(calldataload(0xf24), f_q))mstore(0x11a0, mod(calldataload(0xf44), f_q))mstore(0x11c0, mod(calldataload(0xf64), f_q))mstore(0x11e0, mod(calldataload(0xf84), f_q))mstore(0x1200, mod(calldataload(0xfa4), f_q))mstore(0x1220, mod(calldataload(0xfc4), f_q))mstore(0x1240, keccak256(0x8a0, 2464)){ let hash := mload(0x1240) mstore(0x1260, mod(hash, f_q)) mstore(0x1280, hash) }mstore8(0x12a0, 1)mstore(0x12a0, keccak256(0x1280, 33)){ let hash := mload(0x12a0) mstore(0x12c0, mod(hash, f_q)) mstore(0x12e0, hash) } { let x := calldataload(0xfe4) mstore(0x1300, x) let y := calldataload(0x1004) mstore(0x1320, y) success := and(validate_ec_point(x, y), success) }mstore(0x1340, keccak256(0x12e0, 96)){ let hash := mload(0x1340) mstore(0x1360, mod(hash, f_q)) mstore(0x1380, hash) } { let x := calldataload(0x1024) mstore(0x13a0, x) let y := calldataload(0x1044) mstore(0x13c0, y) success := and(validate_ec_point(x, y), success) }mstore(0x13e0, mulmod(mload(0x880), mload(0x880), f_q))mstore(0x1400, mulmod(mload(0x13e0), mload(0x13e0), f_q))mstore(0x1420, mulmod(mload(0x1400), mload(0x1400), f_q))mstore(0x1440, mulmod(mload(0x1420), mload(0x1420), f_q))mstore(0x1460, mulmod(mload(0x1440), mload(0x1440), f_q))mstore(0x1480, mulmod(mload(0x1460), mload(0x1460), f_q))mstore(0x14a0, mulmod(mload(0x1480), mload(0x1480), f_q))mstore(0x14c0, mulmod(mload(0x14a0), mload(0x14a0), f_q))mstore(0x14e0, mulmod(mload(0x14c0), mload(0x14c0), f_q))mstore(0x1500, mulmod(mload(0x14e0), mload(0x14e0), f_q))mstore(0x1520, mulmod(mload(0x1500), mload(0x1500), f_q))mstore(0x1540, mulmod(mload(0x1520), mload(0x1520), f_q))mstore(0x1560, mulmod(mload(0x1540), mload(0x1540), f_q))mstore(0x1580, mulmod(mload(0x1560), mload(0x1560), f_q))mstore(0x15a0, mulmod(mload(0x1580), mload(0x1580), f_q))mstore(0x15c0, mulmod(mload(0x15a0), mload(0x15a0), f_q))mstore(0x15e0, mulmod(mload(0x15c0), mload(0x15c0), f_q))mstore(0x1600, mulmod(mload(0x15e0), mload(0x15e0), f_q))mstore(0x1620, mulmod(mload(0x1600), mload(0x1600), f_q))mstore(0x1640, mulmod(mload(0x1620), mload(0x1620), f_q))mstore(0x1660, mulmod(mload(0x1640), mload(0x1640), f_q))mstore(0x1680, mulmod(mload(0x1660), mload(0x1660), f_q))mstore(0x16a0, addmod(mload(0x1680), 21888242871839275222246405745257275088548364400416034343698204186575808495616, f_q))mstore(0x16c0, mulmod(mload(0x16a0), 21888237653275510688422624196183639687472264873923820041627027729598873448513, f_q))mstore(0x16e0, mulmod(mload(0x16c0), 13225785879531581993054172815365636627224369411478295502904397545373139154045, f_q))mstore(0x1700, addmod(mload(0x880), 8662456992307693229192232929891638461323994988937738840793806641202669341572, f_q))mstore(0x1720, mulmod(mload(0x16c0), 10939663269433627367777756708678102241564365262857670666700619874077960926249, f_q))mstore(0x1740, addmod(mload(0x880), 10948579602405647854468649036579172846983999137558363676997584312497847569368, f_q))mstore(0x1760, mulmod(mload(0x16c0), 11016257578652593686382655500910603527869149377564754001549454008164059876499, f_q))mstore(0x1780, addmod(mload(0x880), 10871985293186681535863750244346671560679215022851280342148750178411748619118, f_q))mstore(0x17a0, mulmod(mload(0x16c0), 15402826414547299628414612080036060696555554914079673875872749760617770134879, f_q))mstore(0x17c0, addmod(mload(0x880), 6485416457291975593831793665221214391992809486336360467825454425958038360738, f_q))mstore(0x17e0, mulmod(mload(0x16c0), 21710372849001950800533397158415938114909991150039389063546734567764856596059, f_q))mstore(0x1800, addmod(mload(0x880), 177870022837324421713008586841336973638373250376645280151469618810951899558, f_q))mstore(0x1820, mulmod(mload(0x16c0), 2785514556381676080176937710880804108647911392478702105860685610379369825016, f_q))mstore(0x1840, addmod(mload(0x880), 19102728315457599142069468034376470979900453007937332237837518576196438670601, f_q))mstore(0x1860, mulmod(mload(0x16c0), 8734126352828345679573237859165904705806588461301144420590422589042130041188, f_q))mstore(0x1880, addmod(mload(0x880), 13154116519010929542673167886091370382741775939114889923107781597533678454429, f_q))mstore(0x18a0, mulmod(mload(0x16c0), 1, f_q))mstore(0x18c0, addmod(mload(0x880), 21888242871839275222246405745257275088548364400416034343698204186575808495616, f_q)){ let prod := mload(0x1700) prod := mulmod(mload(0x1740), prod, f_q) mstore(0x18e0, prod) prod := mulmod(mload(0x1780), prod, f_q) mstore(0x1900, prod) prod := mulmod(mload(0x17c0), prod, f_q) mstore(0x1920, prod) prod := mulmod(mload(0x1800), prod, f_q) mstore(0x1940, prod) prod := mulmod(mload(0x1840), prod, f_q) mstore(0x1960, prod) prod := mulmod(mload(0x1880), prod, f_q) mstore(0x1980, prod) prod := mulmod(mload(0x18c0), prod, f_q) mstore(0x19a0, prod) prod := mulmod(mload(0x16a0), prod, f_q) mstore(0x19c0, prod) }mstore(0x1a00, 32)mstore(0x1a20, 32)mstore(0x1a40, 32)mstore(0x1a60, mload(0x19c0))mstore(0x1a80, 21888242871839275222246405745257275088548364400416034343698204186575808495615)mstore(0x1aa0, 21888242871839275222246405745257275088548364400416034343698204186575808495617)success := and(eq(staticcall(gas(), 0x5, 0x1a00, 0xc0, 0x19e0, 0x20), 1), success){ let inv := mload(0x19e0) let v v := mload(0x16a0) mstore(0x16a0, mulmod(mload(0x19a0), inv, f_q)) inv := mulmod(v, inv, f_q) v := mload(0x18c0) mstore(0x18c0, mulmod(mload(0x1980), inv, f_q)) inv := mulmod(v, inv, f_q) v := mload(0x1880) mstore(0x1880, mulmod(mload(0x1960), inv, f_q)) inv := mulmod(v, inv, f_q) v := mload(0x1840) mstore(0x1840, mulmod(mload(0x1940), inv, f_q)) inv := mulmod(v, inv, f_q) v := mload(0x1800) mstore(0x1800, mulmod(mload(0x1920), inv, f_q)) inv := mulmod(v, inv, f_q) v := mload(0x17c0) mstore(0x17c0, mulmod(mload(0x1900), inv, f_q)) inv := mulmod(v, inv, f_q) v := mload(0x1780) mstore(0x1780, mulmod(mload(0x18e0), inv, f_q)) inv := mulmod(v, inv, f_q) v := mload(0x1740) mstore(0x1740, mulmod(mload(0x1700), inv, f_q)) inv := mulmod(v, inv, f_q) mstore(0x1700, inv) }mstore(0x1ac0, mulmod(mload(0x16e0), mload(0x1700), f_q))mstore(0x1ae0, mulmod(mload(0x1720), mload(0x1740), f_q))mstore(0x1b00, mulmod(mload(0x1760), mload(0x1780), f_q))mstore(0x1b20, mulmod(mload(0x17a0), mload(0x17c0), f_q))mstore(0x1b40, mulmod(mload(0x17e0), mload(0x1800), f_q))mstore(0x1b60, mulmod(mload(0x1820), mload(0x1840), f_q))mstore(0x1b80, mulmod(mload(0x1860), mload(0x1880), f_q))mstore(0x1ba0, mulmod(mload(0x18a0), mload(0x18c0), f_q))mstore(0x1bc0, mulmod(mload(0x900), mload(0x8e0), f_q))mstore(0x1be0, addmod(mload(0x8c0), mload(0x1bc0), f_q))mstore(0x1c00, addmod(mload(0x1be0), sub(f_q, mload(0x920)), f_q))mstore(0x1c20, mulmod(mload(0x1c00), mload(0xca0), f_q))mstore(0x1c40, mulmod(mload(0x760), mload(0x1c20), f_q))mstore(0x1c60, mulmod(mload(0x980), mload(0x960), f_q))mstore(0x1c80, addmod(mload(0x940), mload(0x1c60), f_q))mstore(0x1ca0, addmod(mload(0x1c80), sub(f_q, mload(0x9a0)), f_q))mstore(0x1cc0, mulmod(mload(0x1ca0), mload(0xcc0), f_q))mstore(0x1ce0, addmod(mload(0x1c40), mload(0x1cc0), f_q))mstore(0x1d00, mulmod(mload(0x760), mload(0x1ce0), f_q))mstore(0x1d20, mulmod(mload(0xa00), mload(0x9e0), f_q))mstore(0x1d40, addmod(mload(0x9c0), mload(0x1d20), f_q))mstore(0x1d60, addmod(mload(0x1d40), sub(f_q, mload(0xa20)), f_q))mstore(0x1d80, mulmod(mload(0x1d60), mload(0xce0), f_q))mstore(0x1da0, addmod(mload(0x1d00), mload(0x1d80), f_q))mstore(0x1dc0, mulmod(mload(0x760), mload(0x1da0), f_q))mstore(0x1de0, mulmod(mload(0xa80), mload(0xa60), f_q))mstore(0x1e00, addmod(mload(0xa40), mload(0x1de0), f_q))mstore(0x1e20, addmod(mload(0x1e00), sub(f_q, mload(0xaa0)), f_q))mstore(0x1e40, mulmod(mload(0x1e20), mload(0xd00), f_q))mstore(0x1e60, addmod(mload(0x1dc0), mload(0x1e40), f_q))mstore(0x1e80, mulmod(mload(0x760), mload(0x1e60), f_q))mstore(0x1ea0, mulmod(mload(0xb00), mload(0xae0), f_q))mstore(0x1ec0, addmod(mload(0xac0), mload(0x1ea0), f_q))mstore(0x1ee0, addmod(mload(0x1ec0), sub(f_q, mload(0xb20)), f_q))mstore(0x1f00, mulmod(mload(0x1ee0), mload(0xd20), f_q))mstore(0x1f20, addmod(mload(0x1e80), mload(0x1f00), f_q))mstore(0x1f40, mulmod(mload(0x760), mload(0x1f20), f_q))mstore(0x1f60, mulmod(mload(0xb80), mload(0xb60), f_q))mstore(0x1f80, addmod(mload(0xb40), mload(0x1f60), f_q))mstore(0x1fa0, addmod(mload(0x1f80), sub(f_q, mload(0xba0)), f_q))mstore(0x1fc0, mulmod(mload(0x1fa0), mload(0xd40), f_q))mstore(0x1fe0, addmod(mload(0x1f40), mload(0x1fc0), f_q))mstore(0x2000, mulmod(mload(0x760), mload(0x1fe0), f_q))mstore(0x2020, addmod(1, sub(f_q, mload(0xee0)), f_q))mstore(0x2040, mulmod(mload(0x2020), mload(0x1ba0), f_q))mstore(0x2060, addmod(mload(0x2000), mload(0x2040), f_q))mstore(0x2080, mulmod(mload(0x760), mload(0x2060), f_q))mstore(0x20a0, mulmod(mload(0x10c0), mload(0x10c0), f_q))mstore(0x20c0, addmod(mload(0x20a0), sub(f_q, mload(0x10c0)), f_q))mstore(0x20e0, mulmod(mload(0x20c0), mload(0x1ac0), f_q))mstore(0x2100, addmod(mload(0x2080), mload(0x20e0), f_q))mstore(0x2120, mulmod(mload(0x760), mload(0x2100), f_q))mstore(0x2140, addmod(mload(0xf40), sub(f_q, mload(0xf20)), f_q))mstore(0x2160, mulmod(mload(0x2140), mload(0x1ba0), f_q))mstore(0x2180, addmod(mload(0x2120), mload(0x2160), f_q))mstore(0x21a0, mulmod(mload(0x760), mload(0x2180), f_q))mstore(0x21c0, addmod(mload(0xfa0), sub(f_q, mload(0xf80)), f_q))mstore(0x21e0, mulmod(mload(0x21c0), mload(0x1ba0), f_q))mstore(0x2200, addmod(mload(0x21a0), mload(0x21e0), f_q))mstore(0x2220, mulmod(mload(0x760), mload(0x2200), f_q))mstore(0x2240, addmod(mload(0x1000), sub(f_q, mload(0xfe0)), f_q))mstore(0x2260, mulmod(mload(0x2240), mload(0x1ba0), f_q))mstore(0x2280, addmod(mload(0x2220), mload(0x2260), f_q))mstore(0x22a0, mulmod(mload(0x760), mload(0x2280), f_q))mstore(0x22c0, addmod(mload(0x1060), sub(f_q, mload(0x1040)), f_q))mstore(0x22e0, mulmod(mload(0x22c0), mload(0x1ba0), f_q))mstore(0x2300, addmod(mload(0x22a0), mload(0x22e0), f_q))mstore(0x2320, mulmod(mload(0x760), mload(0x2300), f_q))mstore(0x2340, addmod(mload(0x10c0), sub(f_q, mload(0x10a0)), f_q))mstore(0x2360, mulmod(mload(0x2340), mload(0x1ba0), f_q))mstore(0x2380, addmod(mload(0x2320), mload(0x2360), f_q))mstore(0x23a0, mulmod(mload(0x760), mload(0x2380), f_q))mstore(0x23c0, addmod(1, sub(f_q, mload(0x1ac0)), f_q))mstore(0x23e0, addmod(mload(0x1ae0), mload(0x1b00), f_q))mstore(0x2400, addmod(mload(0x23e0), mload(0x1b20), f_q))mstore(0x2420, addmod(mload(0x2400), mload(0x1b40), f_q))mstore(0x2440, addmod(mload(0x2420), mload(0x1b60), f_q))mstore(0x2460, addmod(mload(0x2440), mload(0x1b80), f_q))mstore(0x2480, addmod(mload(0x23c0), sub(f_q, mload(0x2460)), f_q))mstore(0x24a0, mulmod(mload(0xd80), mload(0x460), f_q))mstore(0x24c0, addmod(mload(0xc20), mload(0x24a0), f_q))mstore(0x24e0, addmod(mload(0x24c0), mload(0x4c0), f_q))mstore(0x2500, mulmod(mload(0xda0), mload(0x460), f_q))mstore(0x2520, addmod(mload(0x8c0), mload(0x2500), f_q))mstore(0x2540, addmod(mload(0x2520), mload(0x4c0), f_q))mstore(0x2560, mulmod(mload(0x2540), mload(0x24e0), f_q))mstore(0x2580, mulmod(mload(0x2560), mload(0xf00), f_q))mstore(0x25a0, mulmod(1, mload(0x460), f_q))mstore(0x25c0, mulmod(mload(0x880), mload(0x25a0), f_q))mstore(0x25e0, addmod(mload(0xc20), mload(0x25c0), f_q))mstore(0x2600, addmod(mload(0x25e0), mload(0x4c0), f_q))mstore(0x2620, mulmod(4131629893567559867359510883348571134090853742863529169391034518566172092834, mload(0x460), f_q))mstore(0x2640, mulmod(mload(0x880), mload(0x2620), f_q))mstore(0x2660, addmod(mload(0x8c0), mload(0x2640), f_q))mstore(0x2680, addmod(mload(0x2660), mload(0x4c0), f_q))mstore(0x26a0, mulmod(mload(0x2680), mload(0x2600), f_q))mstore(0x26c0, mulmod(mload(0x26a0), mload(0xee0), f_q))mstore(0x26e0, addmod(mload(0x2580), sub(f_q, mload(0x26c0)), f_q))mstore(0x2700, mulmod(mload(0x26e0), mload(0x2480), f_q))mstore(0x2720, addmod(mload(0x23a0), mload(0x2700), f_q))mstore(0x2740, mulmod(mload(0x760), mload(0x2720), f_q))mstore(0x2760, mulmod(mload(0xdc0), mload(0x460), f_q))mstore(0x2780, addmod(mload(0x940), mload(0x2760), f_q))mstore(0x27a0, addmod(mload(0x2780), mload(0x4c0), f_q))mstore(0x27c0, mulmod(mload(0xde0), mload(0x460), f_q))mstore(0x27e0, addmod(mload(0x9c0), mload(0x27c0), f_q))mstore(0x2800, addmod(mload(0x27e0), mload(0x4c0), f_q))mstore(0x2820, mulmod(mload(0x2800), mload(0x27a0), f_q))mstore(0x2840, mulmod(mload(0x2820), mload(0xf60), f_q))mstore(0x2860, mulmod(8910878055287538404433155982483128285667088683464058436815641868457422632747, mload(0x460), f_q))mstore(0x2880, mulmod(mload(0x880), mload(0x2860), f_q))mstore(0x28a0, addmod(mload(0x940), mload(0x2880), f_q))mstore(0x28c0, addmod(mload(0x28a0), mload(0x4c0), f_q))mstore(0x28e0, mulmod(11166246659983828508719468090013646171463329086121580628794302409516816350802, mload(0x460), f_q))mstore(0x2900, mulmod(mload(0x880), mload(0x28e0), f_q))mstore(0x2920, addmod(mload(0x9c0), mload(0x2900), f_q))mstore(0x2940, addmod(mload(0x2920), mload(0x4c0), f_q))mstore(0x2960, mulmod(mload(0x2940), mload(0x28c0), f_q))mstore(0x2980, mulmod(mload(0x2960), mload(0xf40), f_q))mstore(0x29a0, addmod(mload(0x2840), sub(f_q, mload(0x2980)), f_q))mstore(0x29c0, mulmod(mload(0x29a0), mload(0x2480), f_q))mstore(0x29e0, addmod(mload(0x2740), mload(0x29c0), f_q))mstore(0x2a00, mulmod(mload(0x760), mload(0x29e0), f_q))mstore(0x2a20, mulmod(mload(0xe00), mload(0x460), f_q))mstore(0x2a40, addmod(mload(0xa40), mload(0x2a20), f_q))mstore(0x2a60, addmod(mload(0x2a40), mload(0x4c0), f_q))mstore(0x2a80, mulmod(mload(0xe20), mload(0x460), f_q))mstore(0x2aa0, addmod(mload(0xac0), mload(0x2a80), f_q))mstore(0x2ac0, addmod(mload(0x2aa0), mload(0x4c0), f_q))mstore(0x2ae0, mulmod(mload(0x2ac0), mload(0x2a60), f_q))mstore(0x2b00, mulmod(mload(0x2ae0), mload(0xfc0), f_q))mstore(0x2b20, mulmod(284840088355319032285349970403338060113257071685626700086398481893096618818, mload(0x460), f_q))mstore(0x2b40, mulmod(mload(0x880), mload(0x2b20), f_q))mstore(0x2b60, addmod(mload(0xa40), mload(0x2b40), f_q))mstore(0x2b80, addmod(mload(0x2b60), mload(0x4c0), f_q))mstore(0x2ba0, mulmod(21134065618345176623193549882539580312263652408302468683943992798037078993309, mload(0x460), f_q))mstore(0x2bc0, mulmod(mload(0x880), mload(0x2ba0), f_q))mstore(0x2be0, addmod(mload(0xac0), mload(0x2bc0), f_q))mstore(0x2c00, addmod(mload(0x2be0), mload(0x4c0), f_q))mstore(0x2c20, mulmod(mload(0x2c00), mload(0x2b80), f_q))mstore(0x2c40, mulmod(mload(0x2c20), mload(0xfa0), f_q))mstore(0x2c60, addmod(mload(0x2b00), sub(f_q, mload(0x2c40)), f_q))mstore(0x2c80, mulmod(mload(0x2c60), mload(0x2480), f_q))mstore(0x2ca0, addmod(mload(0x2a00), mload(0x2c80), f_q))mstore(0x2cc0, mulmod(mload(0x760), mload(0x2ca0), f_q))mstore(0x2ce0, mulmod(mload(0xe40), mload(0x460), f_q))mstore(0x2d00, addmod(mload(0xb40), mload(0x2ce0), f_q))mstore(0x2d20, addmod(mload(0x2d00), mload(0x4c0), f_q))mstore(0x2d40, mulmod(mload(0xe60), mload(0x460), f_q))mstore(0x2d60, addmod(mload(0xbc0), mload(0x2d40), f_q))mstore(0x2d80, addmod(mload(0x2d60), mload(0x4c0), f_q))mstore(0x2da0, mulmod(mload(0x2d80), mload(0x2d20), f_q))mstore(0x2dc0, mulmod(mload(0x2da0), mload(0x1020), f_q))mstore(0x2de0, mulmod(5625741653535312224677218588085279924365897425605943700675464992185016992283, mload(0x460), f_q))mstore(0x2e00, mulmod(mload(0x880), mload(0x2de0), f_q))mstore(0x2e20, addmod(mload(0xb40), mload(0x2e00), f_q))mstore(0x2e40, addmod(mload(0x2e20), mload(0x4c0), f_q))mstore(0x2e60, mulmod(14704729814417906439424896605881467874595262020190401576785074330126828718155, mload(0x460), f_q))mstore(0x2e80, mulmod(mload(0x880), mload(0x2e60), f_q))mstore(0x2ea0, addmod(mload(0xbc0), mload(0x2e80), f_q))mstore(0x2ec0, addmod(mload(0x2ea0), mload(0x4c0), f_q))mstore(0x2ee0, mulmod(mload(0x2ec0), mload(0x2e40), f_q))mstore(0x2f00, mulmod(mload(0x2ee0), mload(0x1000), f_q))mstore(0x2f20, addmod(mload(0x2dc0), sub(f_q, mload(0x2f00)), f_q))mstore(0x2f40, mulmod(mload(0x2f20), mload(0x2480), f_q))mstore(0x2f60, addmod(mload(0x2cc0), mload(0x2f40), f_q))mstore(0x2f80, mulmod(mload(0x760), mload(0x2f60), f_q))mstore(0x2fa0, mulmod(mload(0xe80), mload(0x460), f_q))mstore(0x2fc0, addmod(0, mload(0x2fa0), f_q))mstore(0x2fe0, addmod(mload(0x2fc0), mload(0x4c0), f_q))mstore(0x3000, mulmod(mload(0xea0), mload(0x460), f_q))mstore(0x3020, addmod(mload(0xbe0), mload(0x3000), f_q))mstore(0x3040, addmod(mload(0x3020), mload(0x4c0), f_q))mstore(0x3060, mulmod(mload(0x3040), mload(0x2fe0), f_q))mstore(0x3080, mulmod(mload(0x3060), mload(0x1080), f_q))mstore(0x30a0, mulmod(8343274462013750416000956870576256937330525306073862550863787263304548803879, mload(0x460), f_q))mstore(0x30c0, mulmod(mload(0x880), mload(0x30a0), f_q))mstore(0x30e0, addmod(0, mload(0x30c0), f_q))mstore(0x3100, addmod(mload(0x30e0), mload(0x4c0), f_q))mstore(0x3120, mulmod(20928372310071051017340352686640453451620397549739756658327314209761852842004, mload(0x460), f_q))mstore(0x3140, mulmod(mload(0x880), mload(0x3120), f_q))mstore(0x3160, addmod(mload(0xbe0), mload(0x3140), f_q))mstore(0x3180, addmod(mload(0x3160), mload(0x4c0), f_q))mstore(0x31a0, mulmod(mload(0x3180), mload(0x3100), f_q))mstore(0x31c0, mulmod(mload(0x31a0), mload(0x1060), f_q))mstore(0x31e0, addmod(mload(0x3080), sub(f_q, mload(0x31c0)), f_q))mstore(0x3200, mulmod(mload(0x31e0), mload(0x2480), f_q))mstore(0x3220, addmod(mload(0x2f80), mload(0x3200), f_q))mstore(0x3240, mulmod(mload(0x760), mload(0x3220), f_q))mstore(0x3260, mulmod(mload(0xec0), mload(0x460), f_q))mstore(0x3280, addmod(mload(0xc00), mload(0x3260), f_q))mstore(0x32a0, addmod(mload(0x3280), mload(0x4c0), f_q))mstore(0x32c0, mulmod(mload(0x32a0), mload(0x10e0), f_q))mstore(0x32e0, mulmod(15845651941796975697993789271154426079663327509658641548785793587449119139335, mload(0x460), f_q))mstore(0x3300, mulmod(mload(0x880), mload(0x32e0), f_q))mstore(0x3320, addmod(mload(0xc00), mload(0x3300), f_q))mstore(0x3340, addmod(mload(0x3320), mload(0x4c0), f_q))mstore(0x3360, mulmod(mload(0x3340), mload(0x10c0), f_q))mstore(0x3380, addmod(mload(0x32c0), sub(f_q, mload(0x3360)), f_q))mstore(0x33a0, mulmod(mload(0x3380), mload(0x2480), f_q))mstore(0x33c0, addmod(mload(0x3240), mload(0x33a0), f_q))mstore(0x33e0, mulmod(mload(0x760), mload(0x33c0), f_q))mstore(0x3400, addmod(1, sub(f_q, mload(0x1100)), f_q))mstore(0x3420, mulmod(mload(0x3400), mload(0x1ba0), f_q))mstore(0x3440, addmod(mload(0x33e0), mload(0x3420), f_q))mstore(0x3460, mulmod(mload(0x760), mload(0x3440), f_q))mstore(0x3480, mulmod(mload(0x1100), mload(0x1100), f_q))mstore(0x34a0, addmod(mload(0x3480), sub(f_q, mload(0x1100)), f_q))mstore(0x34c0, mulmod(mload(0x34a0), mload(0x1ac0), f_q))mstore(0x34e0, addmod(mload(0x3460), mload(0x34c0), f_q))mstore(0x3500, mulmod(mload(0x760), mload(0x34e0), f_q))mstore(0x3520, addmod(mload(0x1140), mload(0x460), f_q))mstore(0x3540, mulmod(mload(0x3520), mload(0x1120), f_q))mstore(0x3560, addmod(mload(0x1180), mload(0x4c0), f_q))mstore(0x3580, mulmod(mload(0x3560), mload(0x3540), f_q))mstore(0x35a0, addmod(mload(0xbc0), mload(0x460), f_q))mstore(0x35c0, mulmod(mload(0x35a0), mload(0x1100), f_q))mstore(0x35e0, addmod(mload(0xc40), mload(0x4c0), f_q))mstore(0x3600, mulmod(mload(0x35e0), mload(0x35c0), f_q))mstore(0x3620, addmod(mload(0x3580), sub(f_q, mload(0x3600)), f_q))mstore(0x3640, mulmod(mload(0x3620), mload(0x2480), f_q))mstore(0x3660, addmod(mload(0x3500), mload(0x3640), f_q))mstore(0x3680, mulmod(mload(0x760), mload(0x3660), f_q))mstore(0x36a0, addmod(mload(0x1140), sub(f_q, mload(0x1180)), f_q))mstore(0x36c0, mulmod(mload(0x36a0), mload(0x1ba0), f_q))mstore(0x36e0, addmod(mload(0x3680), mload(0x36c0), f_q))mstore(0x3700, mulmod(mload(0x760), mload(0x36e0), f_q))mstore(0x3720, mulmod(mload(0x36a0), mload(0x2480), f_q))mstore(0x3740, addmod(mload(0x1140), sub(f_q, mload(0x1160)), f_q))mstore(0x3760, mulmod(mload(0x3740), mload(0x3720), f_q))mstore(0x3780, addmod(mload(0x3700), mload(0x3760), f_q))mstore(0x37a0, mulmod(mload(0x760), mload(0x3780), f_q))mstore(0x37c0, addmod(1, sub(f_q, mload(0x11a0)), f_q))mstore(0x37e0, mulmod(mload(0x37c0), mload(0x1ba0), f_q))mstore(0x3800, addmod(mload(0x37a0), mload(0x37e0), f_q))mstore(0x3820, mulmod(mload(0x760), mload(0x3800), f_q))mstore(0x3840, mulmod(mload(0x11a0), mload(0x11a0), f_q))mstore(0x3860, addmod(mload(0x3840), sub(f_q, mload(0x11a0)), f_q))mstore(0x3880, mulmod(mload(0x3860), mload(0x1ac0), f_q))mstore(0x38a0, addmod(mload(0x3820), mload(0x3880), f_q))mstore(0x38c0, mulmod(mload(0x760), mload(0x38a0), f_q))mstore(0x38e0, addmod(mload(0x11e0), mload(0x460), f_q))mstore(0x3900, mulmod(mload(0x38e0), mload(0x11c0), f_q))mstore(0x3920, addmod(mload(0x1220), mload(0x4c0), f_q))mstore(0x3940, mulmod(mload(0x3920), mload(0x3900), f_q))mstore(0x3960, mulmod(mload(0x300), mload(0xbe0), f_q))mstore(0x3980, addmod(mload(0x3960), mload(0xc00), f_q))mstore(0x39a0, addmod(mload(0x3980), mload(0x460), f_q))mstore(0x39c0, mulmod(mload(0x39a0), mload(0x11a0), f_q))mstore(0x39e0, mulmod(mload(0x300), mload(0xc60), f_q))mstore(0x3a00, addmod(mload(0x39e0), mload(0xc80), f_q))mstore(0x3a20, addmod(mload(0x3a00), mload(0x4c0), f_q))mstore(0x3a40, mulmod(mload(0x3a20), mload(0x39c0), f_q))mstore(0x3a60, addmod(mload(0x3940), sub(f_q, mload(0x3a40)), f_q))mstore(0x3a80, mulmod(mload(0x3a60), mload(0x2480), f_q))mstore(0x3aa0, addmod(mload(0x38c0), mload(0x3a80), f_q))mstore(0x3ac0, mulmod(mload(0x760), mload(0x3aa0), f_q))mstore(0x3ae0, addmod(mload(0x11e0), sub(f_q, mload(0x1220)), f_q))mstore(0x3b00, mulmod(mload(0x3ae0), mload(0x1ba0), f_q))mstore(0x3b20, addmod(mload(0x3ac0), mload(0x3b00), f_q))mstore(0x3b40, mulmod(mload(0x760), mload(0x3b20), f_q))mstore(0x3b60, mulmod(mload(0x3ae0), mload(0x2480), f_q))mstore(0x3b80, addmod(mload(0x11e0), sub(f_q, mload(0x1200)), f_q))mstore(0x3ba0, mulmod(mload(0x3b80), mload(0x3b60), f_q))mstore(0x3bc0, addmod(mload(0x3b40), mload(0x3ba0), f_q))mstore(0x3be0, mulmod(mload(0x1680), mload(0x1680), f_q))mstore(0x3c00, mulmod(mload(0x3be0), mload(0x1680), f_q))mstore(0x3c20, mulmod(1, mload(0x1680), f_q))mstore(0x3c40, mulmod(1, mload(0x3be0), f_q))mstore(0x3c60, mulmod(mload(0x3bc0), mload(0x16a0), f_q))mstore(0x3c80, mulmod(mload(0x13e0), mload(0x880), f_q))mstore(0x3ca0, mulmod(mload(0x3c80), mload(0x880), f_q))mstore(0x3cc0, mulmod(mload(0x880), 13225785879531581993054172815365636627224369411478295502904397545373139154045, f_q))mstore(0x3ce0, addmod(mload(0x1360), sub(f_q, mload(0x3cc0)), f_q))mstore(0x3d00, mulmod(mload(0x880), 8734126352828345679573237859165904705806588461301144420590422589042130041188, f_q))mstore(0x3d20, addmod(mload(0x1360), sub(f_q, mload(0x3d00)), f_q))mstore(0x3d40, mulmod(mload(0x880), 1, f_q))mstore(0x3d60, addmod(mload(0x1360), sub(f_q, mload(0x3d40)), f_q))mstore(0x3d80, mulmod(mload(0x880), 11211301017135681023579411905410872569206244553457844956874280139879520583390, f_q))mstore(0x3da0, addmod(mload(0x1360), sub(f_q, mload(0x3d80)), f_q))mstore(0x3dc0, mulmod(mload(0x880), 1426404432721484388505361748317961535523355871255605456897797744433766488507, f_q))mstore(0x3de0, addmod(mload(0x1360), sub(f_q, mload(0x3dc0)), f_q))mstore(0x3e00, mulmod(mload(0x880), 12619617507853212586156872920672483948819476989779550311307282715684870266992, f_q))mstore(0x3e20, addmod(mload(0x1360), sub(f_q, mload(0x3e00)), f_q))mstore(0x3e40, mulmod(3544324119167359571073009690693121464267965232733679586767649244433889388945, mload(0x3c80), f_q))mstore(0x3e60, mulmod(mload(0x3e40), 1, f_q)){ let result := mulmod(mload(0x1360), mload(0x3e40), f_q)result := addmod(mulmod(mload(0x880), sub(f_q, mload(0x3e60)), f_q), result, f_q)mstore(0x3e80, result) }mstore(0x3ea0, mulmod(3860370625838117017501327045244227871206764201116468958063324100051382735289, mload(0x3c80), f_q))mstore(0x3ec0, mulmod(mload(0x3ea0), 11211301017135681023579411905410872569206244553457844956874280139879520583390, f_q)){ let result := mulmod(mload(0x1360), mload(0x3ea0), f_q)result := addmod(mulmod(mload(0x880), sub(f_q, mload(0x3ec0)), f_q), result, f_q)mstore(0x3ee0, result) }mstore(0x3f00, mulmod(21616901807277407275624036604424346159916096890712898844034238973395610537327, mload(0x3c80), f_q))mstore(0x3f20, mulmod(mload(0x3f00), 1426404432721484388505361748317961535523355871255605456897797744433766488507, f_q)){ let result := mulmod(mload(0x1360), mload(0x3f00), f_q)result := addmod(mulmod(mload(0x880), sub(f_q, mload(0x3f20)), f_q), result, f_q)mstore(0x3f40, result) }mstore(0x3f60, mulmod(3209408481237076479025468386201293941554240476766691830436732310949352383503, mload(0x3c80), f_q))mstore(0x3f80, mulmod(mload(0x3f60), 12619617507853212586156872920672483948819476989779550311307282715684870266992, f_q)){ let result := mulmod(mload(0x1360), mload(0x3f60), f_q)result := addmod(mulmod(mload(0x880), sub(f_q, mload(0x3f80)), f_q), result, f_q)mstore(0x3fa0, result) }mstore(0x3fc0, mulmod(1, mload(0x3d60), f_q))mstore(0x3fe0, mulmod(mload(0x3fc0), mload(0x3da0), f_q))mstore(0x4000, mulmod(mload(0x3fe0), mload(0x3de0), f_q))mstore(0x4020, mulmod(mload(0x4000), mload(0x3e20), f_q)){ let result := mulmod(mload(0x1360), 1, f_q)result := addmod(mulmod(mload(0x880), 21888242871839275222246405745257275088548364400416034343698204186575808495616, f_q), result, f_q)mstore(0x4040, result) }mstore(0x4060, mulmod(8390819244605639573390577733158868133682115698337564550620146375401109684432, mload(0x13e0), f_q))mstore(0x4080, mulmod(mload(0x4060), 1, f_q)){ let result := mulmod(mload(0x1360), mload(0x4060), f_q)result := addmod(mulmod(mload(0x880), sub(f_q, mload(0x4080)), f_q), result, f_q)mstore(0x40a0, result) }mstore(0x40c0, mulmod(14389468897523033212448771694851898440525479866834419679925499462425232628530, mload(0x13e0), f_q))mstore(0x40e0, mulmod(mload(0x40c0), 11211301017135681023579411905410872569206244553457844956874280139879520583390, f_q)){ let result := mulmod(mload(0x1360), mload(0x40c0), f_q)result := addmod(mulmod(mload(0x880), sub(f_q, mload(0x40e0)), f_q), result, f_q)mstore(0x4100, result) }mstore(0x4120, mulmod(8021781111580269725587432039983408559403601261632071736490564397134126857583, mload(0x13e0), f_q))mstore(0x4140, mulmod(mload(0x4120), 13225785879531581993054172815365636627224369411478295502904397545373139154045, f_q)){ let result := mulmod(mload(0x1360), mload(0x4120), f_q)result := addmod(mulmod(mload(0x880), sub(f_q, mload(0x4140)), f_q), result, f_q)mstore(0x4160, result) }mstore(0x4180, mulmod(mload(0x3fe0), mload(0x3ce0), f_q))mstore(0x41a0, mulmod(10676941854703594198666993839846402519342119846958189386823924046696287912228, mload(0x880), f_q))mstore(0x41c0, mulmod(mload(0x41a0), 1, f_q)){ let result := mulmod(mload(0x1360), mload(0x41a0), f_q)result := addmod(mulmod(mload(0x880), sub(f_q, mload(0x41c0)), f_q), result, f_q)mstore(0x41e0, result) }mstore(0x4200, mulmod(11211301017135681023579411905410872569206244553457844956874280139879520583389, mload(0x880), f_q))mstore(0x4220, mulmod(mload(0x4200), 11211301017135681023579411905410872569206244553457844956874280139879520583390, f_q)){ let result := mulmod(mload(0x1360), mload(0x4200), f_q)result := addmod(mulmod(mload(0x880), sub(f_q, mload(0x4220)), f_q), result, f_q)mstore(0x4240, result) }mstore(0x4260, mulmod(13154116519010929542673167886091370382741775939114889923107781597533678454430, mload(0x880), f_q))mstore(0x4280, mulmod(mload(0x4260), 1, f_q)){ let result := mulmod(mload(0x1360), mload(0x4260), f_q)result := addmod(mulmod(mload(0x880), sub(f_q, mload(0x4280)), f_q), result, f_q)mstore(0x42a0, result) }mstore(0x42c0, mulmod(8734126352828345679573237859165904705806588461301144420590422589042130041187, mload(0x880), f_q))mstore(0x42e0, mulmod(mload(0x42c0), 8734126352828345679573237859165904705806588461301144420590422589042130041188, f_q)){ let result := mulmod(mload(0x1360), mload(0x42c0), f_q)result := addmod(mulmod(mload(0x880), sub(f_q, mload(0x42e0)), f_q), result, f_q)mstore(0x4300, result) }mstore(0x4320, mulmod(mload(0x3fc0), mload(0x3d20), f_q)){ let prod := mload(0x3e80) prod := mulmod(mload(0x3ee0), prod, f_q) mstore(0x4340, prod) prod := mulmod(mload(0x3f40), prod, f_q) mstore(0x4360, prod) prod := mulmod(mload(0x3fa0), prod, f_q) mstore(0x4380, prod) prod := mulmod(mload(0x4040), prod, f_q) mstore(0x43a0, prod) prod := mulmod(mload(0x3fc0), prod, f_q) mstore(0x43c0, prod) prod := mulmod(mload(0x40a0), prod, f_q) mstore(0x43e0, prod) prod := mulmod(mload(0x4100), prod, f_q) mstore(0x4400, prod) prod := mulmod(mload(0x4160), prod, f_q) mstore(0x4420, prod) prod := mulmod(mload(0x4180), prod, f_q) mstore(0x4440, prod) prod := mulmod(mload(0x41e0), prod, f_q) mstore(0x4460, prod) prod := mulmod(mload(0x4240), prod, f_q) mstore(0x4480, prod) prod := mulmod(mload(0x3fe0), prod, f_q) mstore(0x44a0, prod) prod := mulmod(mload(0x42a0), prod, f_q) mstore(0x44c0, prod) prod := mulmod(mload(0x4300), prod, f_q) mstore(0x44e0, prod) prod := mulmod(mload(0x4320), prod, f_q) mstore(0x4500, prod) }mstore(0x4540, 32)mstore(0x4560, 32)mstore(0x4580, 32)mstore(0x45a0, mload(0x4500))mstore(0x45c0, 21888242871839275222246405745257275088548364400416034343698204186575808495615)mstore(0x45e0, 21888242871839275222246405745257275088548364400416034343698204186575808495617)success := and(eq(staticcall(gas(), 0x5, 0x4540, 0xc0, 0x4520, 0x20), 1), success){ let inv := mload(0x4520) let v v := mload(0x4320) mstore(0x4320, mulmod(mload(0x44e0), inv, f_q)) inv := mulmod(v, inv, f_q) v := mload(0x4300) mstore(0x4300, mulmod(mload(0x44c0), inv, f_q)) inv := mulmod(v, inv, f_q) v := mload(0x42a0) mstore(0x42a0, mulmod(mload(0x44a0), inv, f_q)) inv := mulmod(v, inv, f_q) v := mload(0x3fe0) mstore(0x3fe0, mulmod(mload(0x4480), inv, f_q)) inv := mulmod(v, inv, f_q) v := mload(0x4240) mstore(0x4240, mulmod(mload(0x4460), inv, f_q)) inv := mulmod(v, inv, f_q) v := mload(0x41e0) mstore(0x41e0, mulmod(mload(0x4440), inv, f_q)) inv := mulmod(v, inv, f_q) v := mload(0x4180) mstore(0x4180, mulmod(mload(0x4420), inv, f_q)) inv := mulmod(v, inv, f_q) v := mload(0x4160) mstore(0x4160, mulmod(mload(0x4400), inv, f_q)) inv := mulmod(v, inv, f_q) v := mload(0x4100) mstore(0x4100, mulmod(mload(0x43e0), inv, f_q)) inv := mulmod(v, inv, f_q) v := mload(0x40a0) mstore(0x40a0, mulmod(mload(0x43c0), inv, f_q)) inv := mulmod(v, inv, f_q) v := mload(0x3fc0) mstore(0x3fc0, mulmod(mload(0x43a0), inv, f_q)) inv := mulmod(v, inv, f_q) v := mload(0x4040) mstore(0x4040, mulmod(mload(0x4380), inv, f_q)) inv := mulmod(v, inv, f_q) v := mload(0x3fa0) mstore(0x3fa0, mulmod(mload(0x4360), inv, f_q)) inv := mulmod(v, inv, f_q) v := mload(0x3f40) mstore(0x3f40, mulmod(mload(0x4340), inv, f_q)) inv := mulmod(v, inv, f_q) v := mload(0x3ee0) mstore(0x3ee0, mulmod(mload(0x3e80), inv, f_q)) inv := mulmod(v, inv, f_q) mstore(0x3e80, inv) }{ let result := mload(0x3e80)result := addmod(mload(0x3ee0), result, f_q)result := addmod(mload(0x3f40), result, f_q)result := addmod(mload(0x3fa0), result, f_q)mstore(0x4600, result) }mstore(0x4620, mulmod(mload(0x4020), mload(0x3fc0), f_q)){ let result := mload(0x4040)mstore(0x4640, result) }mstore(0x4660, mulmod(mload(0x4020), mload(0x4180), f_q)){ let result := mload(0x40a0)result := addmod(mload(0x4100), result, f_q)result := addmod(mload(0x4160), result, f_q)mstore(0x4680, result) }mstore(0x46a0, mulmod(mload(0x4020), mload(0x3fe0), f_q)){ let result := mload(0x41e0)result := addmod(mload(0x4240), result, f_q)mstore(0x46c0, result) }mstore(0x46e0, mulmod(mload(0x4020), mload(0x4320), f_q)){ let result := mload(0x42a0)result := addmod(mload(0x4300), result, f_q)mstore(0x4700, result) }{ let prod := mload(0x4600) prod := mulmod(mload(0x4640), prod, f_q) mstore(0x4720, prod) prod := mulmod(mload(0x4680), prod, f_q) mstore(0x4740, prod) prod := mulmod(mload(0x46c0), prod, f_q) mstore(0x4760, prod) prod := mulmod(mload(0x4700), prod, f_q) mstore(0x4780, prod) }mstore(0x47c0, 32)mstore(0x47e0, 32)mstore(0x4800, 32)mstore(0x4820, mload(0x4780))mstore(0x4840, 21888242871839275222246405745257275088548364400416034343698204186575808495615)mstore(0x4860, 21888242871839275222246405745257275088548364400416034343698204186575808495617)success := and(eq(staticcall(gas(), 0x5, 0x47c0, 0xc0, 0x47a0, 0x20), 1), success){ let inv := mload(0x47a0) let v v := mload(0x4700) mstore(0x4700, mulmod(mload(0x4760), inv, f_q)) inv := mulmod(v, inv, f_q) v := mload(0x46c0) mstore(0x46c0, mulmod(mload(0x4740), inv, f_q)) inv := mulmod(v, inv, f_q) v := mload(0x4680) mstore(0x4680, mulmod(mload(0x4720), inv, f_q)) inv := mulmod(v, inv, f_q) v := mload(0x4640) mstore(0x4640, mulmod(mload(0x4600), inv, f_q)) inv := mulmod(v, inv, f_q) mstore(0x4600, inv) }mstore(0x4880, mulmod(mload(0x4620), mload(0x4640), f_q))mstore(0x48a0, mulmod(mload(0x4660), mload(0x4680), f_q))mstore(0x48c0, mulmod(mload(0x46a0), mload(0x46c0), f_q))mstore(0x48e0, mulmod(mload(0x46e0), mload(0x4700), f_q))mstore(0x4900, mulmod(mload(0x1260), mload(0x1260), f_q))mstore(0x4920, mulmod(mload(0x4900), mload(0x1260), f_q))mstore(0x4940, mulmod(mload(0x4920), mload(0x1260), f_q))mstore(0x4960, mulmod(mload(0x4940), mload(0x1260), f_q))mstore(0x4980, mulmod(mload(0x4960), mload(0x1260), f_q))mstore(0x49a0, mulmod(mload(0x4980), mload(0x1260), f_q))mstore(0x49c0, mulmod(mload(0x49a0), mload(0x1260), f_q))mstore(0x49e0, mulmod(mload(0x49c0), mload(0x1260), f_q))mstore(0x4a00, mulmod(mload(0x49e0), mload(0x1260), f_q))mstore(0x4a20, mulmod(mload(0x4a00), mload(0x1260), f_q))mstore(0x4a40, mulmod(mload(0x4a20), mload(0x1260), f_q))mstore(0x4a60, mulmod(mload(0x4a40), mload(0x1260), f_q))mstore(0x4a80, mulmod(mload(0x4a60), mload(0x1260), f_q))mstore(0x4aa0, mulmod(mload(0x4a80), mload(0x1260), f_q))mstore(0x4ac0, mulmod(mload(0x4aa0), mload(0x1260), f_q))mstore(0x4ae0, mulmod(mload(0x4ac0), mload(0x1260), f_q))mstore(0x4b00, mulmod(mload(0x4ae0), mload(0x1260), f_q))mstore(0x4b20, mulmod(mload(0x4b00), mload(0x1260), f_q))mstore(0x4b40, mulmod(mload(0x4b20), mload(0x1260), f_q))mstore(0x4b60, mulmod(mload(0x4b40), mload(0x1260), f_q))mstore(0x4b80, mulmod(mload(0x4b60), mload(0x1260), f_q))mstore(0x4ba0, mulmod(mload(0x4b80), mload(0x1260), f_q))mstore(0x4bc0, mulmod(mload(0x4ba0), mload(0x1260), f_q))mstore(0x4be0, mulmod(mload(0x4bc0), mload(0x1260), f_q))mstore(0x4c00, mulmod(mload(0x4be0), mload(0x1260), f_q))mstore(0x4c20, mulmod(mload(0x4c00), mload(0x1260), f_q))mstore(0x4c40, mulmod(mload(0x4c20), mload(0x1260), f_q))mstore(0x4c60, mulmod(mload(0x12c0), mload(0x12c0), f_q))mstore(0x4c80, mulmod(mload(0x4c60), mload(0x12c0), f_q))mstore(0x4ca0, mulmod(mload(0x4c80), mload(0x12c0), f_q))mstore(0x4cc0, mulmod(mload(0x4ca0), mload(0x12c0), f_q)){ let result := mulmod(mload(0x8c0), mload(0x3e80), f_q)result := addmod(mulmod(mload(0x8e0), mload(0x3ee0), f_q), result, f_q)result := addmod(mulmod(mload(0x900), mload(0x3f40), f_q), result, f_q)result := addmod(mulmod(mload(0x920), mload(0x3fa0), f_q), result, f_q)mstore(0x4ce0, result) }mstore(0x4d00, mulmod(mload(0x4ce0), mload(0x4600), f_q))mstore(0x4d20, mulmod(sub(f_q, mload(0x4d00)), 1, f_q)){ let result := mulmod(mload(0x940), mload(0x3e80), f_q)result := addmod(mulmod(mload(0x960), mload(0x3ee0), f_q), result, f_q)result := addmod(mulmod(mload(0x980), mload(0x3f40), f_q), result, f_q)result := addmod(mulmod(mload(0x9a0), mload(0x3fa0), f_q), result, f_q)mstore(0x4d40, result) }mstore(0x4d60, mulmod(mload(0x4d40), mload(0x4600), f_q))mstore(0x4d80, mulmod(sub(f_q, mload(0x4d60)), mload(0x1260), f_q))mstore(0x4da0, mulmod(1, mload(0x1260), f_q))mstore(0x4dc0, addmod(mload(0x4d20), mload(0x4d80), f_q)){ let result := mulmod(mload(0x9c0), mload(0x3e80), f_q)result := addmod(mulmod(mload(0x9e0), mload(0x3ee0), f_q), result, f_q)result := addmod(mulmod(mload(0xa00), mload(0x3f40), f_q), result, f_q)result := addmod(mulmod(mload(0xa20), mload(0x3fa0), f_q), result, f_q)mstore(0x4de0, result) }mstore(0x4e00, mulmod(mload(0x4de0), mload(0x4600), f_q))mstore(0x4e20, mulmod(sub(f_q, mload(0x4e00)), mload(0x4900), f_q))mstore(0x4e40, mulmod(1, mload(0x4900), f_q))mstore(0x4e60, addmod(mload(0x4dc0), mload(0x4e20), f_q)){ let result := mulmod(mload(0xa40), mload(0x3e80), f_q)result := addmod(mulmod(mload(0xa60), mload(0x3ee0), f_q), result, f_q)result := addmod(mulmod(mload(0xa80), mload(0x3f40), f_q), result, f_q)result := addmod(mulmod(mload(0xaa0), mload(0x3fa0), f_q), result, f_q)mstore(0x4e80, result) }mstore(0x4ea0, mulmod(mload(0x4e80), mload(0x4600), f_q))mstore(0x4ec0, mulmod(sub(f_q, mload(0x4ea0)), mload(0x4920), f_q))mstore(0x4ee0, mulmod(1, mload(0x4920), f_q))mstore(0x4f00, addmod(mload(0x4e60), mload(0x4ec0), f_q)){ let result := mulmod(mload(0xac0), mload(0x3e80), f_q)result := addmod(mulmod(mload(0xae0), mload(0x3ee0), f_q), result, f_q)result := addmod(mulmod(mload(0xb00), mload(0x3f40), f_q), result, f_q)result := addmod(mulmod(mload(0xb20), mload(0x3fa0), f_q), result, f_q)mstore(0x4f20, result) }mstore(0x4f40, mulmod(mload(0x4f20), mload(0x4600), f_q))mstore(0x4f60, mulmod(sub(f_q, mload(0x4f40)), mload(0x4940), f_q))mstore(0x4f80, mulmod(1, mload(0x4940), f_q))mstore(0x4fa0, addmod(mload(0x4f00), mload(0x4f60), f_q)){ let result := mulmod(mload(0xb40), mload(0x3e80), f_q)result := addmod(mulmod(mload(0xb60), mload(0x3ee0), f_q), result, f_q)result := addmod(mulmod(mload(0xb80), mload(0x3f40), f_q), result, f_q)result := addmod(mulmod(mload(0xba0), mload(0x3fa0), f_q), result, f_q)mstore(0x4fc0, result) }mstore(0x4fe0, mulmod(mload(0x4fc0), mload(0x4600), f_q))mstore(0x5000, mulmod(sub(f_q, mload(0x4fe0)), mload(0x4960), f_q))mstore(0x5020, mulmod(1, mload(0x4960), f_q))mstore(0x5040, addmod(mload(0x4fa0), mload(0x5000), f_q))mstore(0x5060, mulmod(mload(0x5040), 1, f_q))mstore(0x5080, mulmod(mload(0x4da0), 1, f_q))mstore(0x50a0, mulmod(mload(0x4e40), 1, f_q))mstore(0x50c0, mulmod(mload(0x4ee0), 1, f_q))mstore(0x50e0, mulmod(mload(0x4f80), 1, f_q))mstore(0x5100, mulmod(mload(0x5020), 1, f_q))mstore(0x5120, mulmod(1, mload(0x4620), f_q)){ let result := mulmod(mload(0xbc0), mload(0x4040), f_q)mstore(0x5140, result) }mstore(0x5160, mulmod(mload(0x5140), mload(0x4880), f_q))mstore(0x5180, mulmod(sub(f_q, mload(0x5160)), 1, f_q))mstore(0x51a0, mulmod(mload(0x5120), 1, f_q)){ let result := mulmod(mload(0xbe0), mload(0x4040), f_q)mstore(0x51c0, result) }mstore(0x51e0, mulmod(mload(0x51c0), mload(0x4880), f_q))mstore(0x5200, mulmod(sub(f_q, mload(0x51e0)), mload(0x1260), f_q))mstore(0x5220, mulmod(mload(0x5120), mload(0x1260), f_q))mstore(0x5240, addmod(mload(0x5180), mload(0x5200), f_q)){ let result := mulmod(mload(0xc00), mload(0x4040), f_q)mstore(0x5260, result) }mstore(0x5280, mulmod(mload(0x5260), mload(0x4880), f_q))mstore(0x52a0, mulmod(sub(f_q, mload(0x5280)), mload(0x4900), f_q))mstore(0x52c0, mulmod(mload(0x5120), mload(0x4900), f_q))mstore(0x52e0, addmod(mload(0x5240), mload(0x52a0), f_q)){ let result := mulmod(mload(0x1180), mload(0x4040), f_q)mstore(0x5300, result) }mstore(0x5320, mulmod(mload(0x5300), mload(0x4880), f_q))mstore(0x5340, mulmod(sub(f_q, mload(0x5320)), mload(0x4920), f_q))mstore(0x5360, mulmod(mload(0x5120), mload(0x4920), f_q))mstore(0x5380, addmod(mload(0x52e0), mload(0x5340), f_q)){ let result := mulmod(mload(0x1220), mload(0x4040), f_q)mstore(0x53a0, result) }mstore(0x53c0, mulmod(mload(0x53a0), mload(0x4880), f_q))mstore(0x53e0, mulmod(sub(f_q, mload(0x53c0)), mload(0x4940), f_q))mstore(0x5400, mulmod(mload(0x5120), mload(0x4940), f_q))mstore(0x5420, addmod(mload(0x5380), mload(0x53e0), f_q)){ let result := mulmod(mload(0xc20), mload(0x4040), f_q)mstore(0x5440, result) }mstore(0x5460, mulmod(mload(0x5440), mload(0x4880), f_q))mstore(0x5480, mulmod(sub(f_q, mload(0x5460)), mload(0x4960), f_q))mstore(0x54a0, mulmod(mload(0x5120), mload(0x4960), f_q))mstore(0x54c0, addmod(mload(0x5420), mload(0x5480), f_q)){ let result := mulmod(mload(0xc40), mload(0x4040), f_q)mstore(0x54e0, result) }mstore(0x5500, mulmod(mload(0x54e0), mload(0x4880), f_q))mstore(0x5520, mulmod(sub(f_q, mload(0x5500)), mload(0x4980), f_q))mstore(0x5540, mulmod(mload(0x5120), mload(0x4980), f_q))mstore(0x5560, addmod(mload(0x54c0), mload(0x5520), f_q)){ let result := mulmod(mload(0xc60), mload(0x4040), f_q)mstore(0x5580, result) }mstore(0x55a0, mulmod(mload(0x5580), mload(0x4880), f_q))mstore(0x55c0, mulmod(sub(f_q, mload(0x55a0)), mload(0x49a0), f_q))mstore(0x55e0, mulmod(mload(0x5120), mload(0x49a0), f_q))mstore(0x5600, addmod(mload(0x5560), mload(0x55c0), f_q))mstore(0x5620, addmod(mload(0x5540), mload(0x55e0), f_q)){ let result := mulmod(mload(0xc80), mload(0x4040), f_q)mstore(0x5640, result) }mstore(0x5660, mulmod(mload(0x5640), mload(0x4880), f_q))mstore(0x5680, mulmod(sub(f_q, mload(0x5660)), mload(0x49c0), f_q))mstore(0x56a0, mulmod(mload(0x5120), mload(0x49c0), f_q))mstore(0x56c0, addmod(mload(0x5600), mload(0x5680), f_q)){ let result := mulmod(mload(0xca0), mload(0x4040), f_q)mstore(0x56e0, result) }mstore(0x5700, mulmod(mload(0x56e0), mload(0x4880), f_q))mstore(0x5720, mulmod(sub(f_q, mload(0x5700)), mload(0x49e0), f_q))mstore(0x5740, mulmod(mload(0x5120), mload(0x49e0), f_q))mstore(0x5760, addmod(mload(0x56c0), mload(0x5720), f_q)){ let result := mulmod(mload(0xcc0), mload(0x4040), f_q)mstore(0x5780, result) }mstore(0x57a0, mulmod(mload(0x5780), mload(0x4880), f_q))mstore(0x57c0, mulmod(sub(f_q, mload(0x57a0)), mload(0x4a00), f_q))mstore(0x57e0, mulmod(mload(0x5120), mload(0x4a00), f_q))mstore(0x5800, addmod(mload(0x5760), mload(0x57c0), f_q)){ let result := mulmod(mload(0xce0), mload(0x4040), f_q)mstore(0x5820, result) }mstore(0x5840, mulmod(mload(0x5820), mload(0x4880), f_q))mstore(0x5860, mulmod(sub(f_q, mload(0x5840)), mload(0x4a20), f_q))mstore(0x5880, mulmod(mload(0x5120), mload(0x4a20), f_q))mstore(0x58a0, addmod(mload(0x5800), mload(0x5860), f_q)){ let result := mulmod(mload(0xd00), mload(0x4040), f_q)mstore(0x58c0, result) }mstore(0x58e0, mulmod(mload(0x58c0), mload(0x4880), f_q))mstore(0x5900, mulmod(sub(f_q, mload(0x58e0)), mload(0x4a40), f_q))mstore(0x5920, mulmod(mload(0x5120), mload(0x4a40), f_q))mstore(0x5940, addmod(mload(0x58a0), mload(0x5900), f_q)){ let result := mulmod(mload(0xd20), mload(0x4040), f_q)mstore(0x5960, result) }mstore(0x5980, mulmod(mload(0x5960), mload(0x4880), f_q))mstore(0x59a0, mulmod(sub(f_q, mload(0x5980)), mload(0x4a60), f_q))mstore(0x59c0, mulmod(mload(0x5120), mload(0x4a60), f_q))mstore(0x59e0, addmod(mload(0x5940), mload(0x59a0), f_q)){ let result := mulmod(mload(0xd40), mload(0x4040), f_q)mstore(0x5a00, result) }mstore(0x5a20, mulmod(mload(0x5a00), mload(0x4880), f_q))mstore(0x5a40, mulmod(sub(f_q, mload(0x5a20)), mload(0x4a80), f_q))mstore(0x5a60, mulmod(mload(0x5120), mload(0x4a80), f_q))mstore(0x5a80, addmod(mload(0x59e0), mload(0x5a40), f_q)){ let result := mulmod(mload(0xd80), mload(0x4040), f_q)mstore(0x5aa0, result) }mstore(0x5ac0, mulmod(mload(0x5aa0), mload(0x4880), f_q))mstore(0x5ae0, mulmod(sub(f_q, mload(0x5ac0)), mload(0x4aa0), f_q))mstore(0x5b00, mulmod(mload(0x5120), mload(0x4aa0), f_q))mstore(0x5b20, addmod(mload(0x5a80), mload(0x5ae0), f_q)){ let result := mulmod(mload(0xda0), mload(0x4040), f_q)mstore(0x5b40, result) }mstore(0x5b60, mulmod(mload(0x5b40), mload(0x4880), f_q))mstore(0x5b80, mulmod(sub(f_q, mload(0x5b60)), mload(0x4ac0), f_q))mstore(0x5ba0, mulmod(mload(0x5120), mload(0x4ac0), f_q))mstore(0x5bc0, addmod(mload(0x5b20), mload(0x5b80), f_q)){ let result := mulmod(mload(0xdc0), mload(0x4040), f_q)mstore(0x5be0, result) }mstore(0x5c00, mulmod(mload(0x5be0), mload(0x4880), f_q))mstore(0x5c20, mulmod(sub(f_q, mload(0x5c00)), mload(0x4ae0), f_q))mstore(0x5c40, mulmod(mload(0x5120), mload(0x4ae0), f_q))mstore(0x5c60, addmod(mload(0x5bc0), mload(0x5c20), f_q)){ let result := mulmod(mload(0xde0), mload(0x4040), f_q)mstore(0x5c80, result) }mstore(0x5ca0, mulmod(mload(0x5c80), mload(0x4880), f_q))mstore(0x5cc0, mulmod(sub(f_q, mload(0x5ca0)), mload(0x4b00), f_q))mstore(0x5ce0, mulmod(mload(0x5120), mload(0x4b00), f_q))mstore(0x5d00, addmod(mload(0x5c60), mload(0x5cc0), f_q)){ let result := mulmod(mload(0xe00), mload(0x4040), f_q)mstore(0x5d20, result) }mstore(0x5d40, mulmod(mload(0x5d20), mload(0x4880), f_q))mstore(0x5d60, mulmod(sub(f_q, mload(0x5d40)), mload(0x4b20), f_q))mstore(0x5d80, mulmod(mload(0x5120), mload(0x4b20), f_q))mstore(0x5da0, addmod(mload(0x5d00), mload(0x5d60), f_q)){ let result := mulmod(mload(0xe20), mload(0x4040), f_q)mstore(0x5dc0, result) }mstore(0x5de0, mulmod(mload(0x5dc0), mload(0x4880), f_q))mstore(0x5e00, mulmod(sub(f_q, mload(0x5de0)), mload(0x4b40), f_q))mstore(0x5e20, mulmod(mload(0x5120), mload(0x4b40), f_q))mstore(0x5e40, addmod(mload(0x5da0), mload(0x5e00), f_q)){ let result := mulmod(mload(0xe40), mload(0x4040), f_q)mstore(0x5e60, result) }mstore(0x5e80, mulmod(mload(0x5e60), mload(0x4880), f_q))mstore(0x5ea0, mulmod(sub(f_q, mload(0x5e80)), mload(0x4b60), f_q))mstore(0x5ec0, mulmod(mload(0x5120), mload(0x4b60), f_q))mstore(0x5ee0, addmod(mload(0x5e40), mload(0x5ea0), f_q)){ let result := mulmod(mload(0xe60), mload(0x4040), f_q)mstore(0x5f00, result) }mstore(0x5f20, mulmod(mload(0x5f00), mload(0x4880), f_q))mstore(0x5f40, mulmod(sub(f_q, mload(0x5f20)), mload(0x4b80), f_q))mstore(0x5f60, mulmod(mload(0x5120), mload(0x4b80), f_q))mstore(0x5f80, addmod(mload(0x5ee0), mload(0x5f40), f_q)){ let result := mulmod(mload(0xe80), mload(0x4040), f_q)mstore(0x5fa0, result) }mstore(0x5fc0, mulmod(mload(0x5fa0), mload(0x4880), f_q))mstore(0x5fe0, mulmod(sub(f_q, mload(0x5fc0)), mload(0x4ba0), f_q))mstore(0x6000, mulmod(mload(0x5120), mload(0x4ba0), f_q))mstore(0x6020, addmod(mload(0x5f80), mload(0x5fe0), f_q)){ let result := mulmod(mload(0xea0), mload(0x4040), f_q)mstore(0x6040, result) }mstore(0x6060, mulmod(mload(0x6040), mload(0x4880), f_q))mstore(0x6080, mulmod(sub(f_q, mload(0x6060)), mload(0x4bc0), f_q))mstore(0x60a0, mulmod(mload(0x5120), mload(0x4bc0), f_q))mstore(0x60c0, addmod(mload(0x6020), mload(0x6080), f_q)){ let result := mulmod(mload(0xec0), mload(0x4040), f_q)mstore(0x60e0, result) }mstore(0x6100, mulmod(mload(0x60e0), mload(0x4880), f_q))mstore(0x6120, mulmod(sub(f_q, mload(0x6100)), mload(0x4be0), f_q))mstore(0x6140, mulmod(mload(0x5120), mload(0x4be0), f_q))mstore(0x6160, addmod(mload(0x60c0), mload(0x6120), f_q))mstore(0x6180, mulmod(mload(0x3c20), mload(0x4620), f_q))mstore(0x61a0, mulmod(mload(0x3c40), mload(0x4620), f_q)){ let result := mulmod(mload(0x3c60), mload(0x4040), f_q)mstore(0x61c0, result) }mstore(0x61e0, mulmod(mload(0x61c0), mload(0x4880), f_q))mstore(0x6200, mulmod(sub(f_q, mload(0x61e0)), mload(0x4c00), f_q))mstore(0x6220, mulmod(mload(0x5120), mload(0x4c00), f_q))mstore(0x6240, mulmod(mload(0x6180), mload(0x4c00), f_q))mstore(0x6260, mulmod(mload(0x61a0), mload(0x4c00), f_q))mstore(0x6280, addmod(mload(0x6160), mload(0x6200), f_q)){ let result := mulmod(mload(0xd60), mload(0x4040), f_q)mstore(0x62a0, result) }mstore(0x62c0, mulmod(mload(0x62a0), mload(0x4880), f_q))mstore(0x62e0, mulmod(sub(f_q, mload(0x62c0)), mload(0x4c20), f_q))mstore(0x6300, mulmod(mload(0x5120), mload(0x4c20), f_q))mstore(0x6320, addmod(mload(0x6280), mload(0x62e0), f_q))mstore(0x6340, mulmod(mload(0x6320), mload(0x12c0), f_q))mstore(0x6360, mulmod(mload(0x51a0), mload(0x12c0), f_q))mstore(0x6380, mulmod(mload(0x5220), mload(0x12c0), f_q))mstore(0x63a0, mulmod(mload(0x52c0), mload(0x12c0), f_q))mstore(0x63c0, mulmod(mload(0x5360), mload(0x12c0), f_q))mstore(0x63e0, mulmod(mload(0x5400), mload(0x12c0), f_q))mstore(0x6400, mulmod(mload(0x54a0), mload(0x12c0), f_q))mstore(0x6420, mulmod(mload(0x5620), mload(0x12c0), f_q))mstore(0x6440, mulmod(mload(0x56a0), mload(0x12c0), f_q))mstore(0x6460, mulmod(mload(0x5740), mload(0x12c0), f_q))mstore(0x6480, mulmod(mload(0x57e0), mload(0x12c0), f_q))mstore(0x64a0, mulmod(mload(0x5880), mload(0x12c0), f_q))mstore(0x64c0, mulmod(mload(0x5920), mload(0x12c0), f_q))mstore(0x64e0, mulmod(mload(0x59c0), mload(0x12c0), f_q))mstore(0x6500, mulmod(mload(0x5a60), mload(0x12c0), f_q))mstore(0x6520, mulmod(mload(0x5b00), mload(0x12c0), f_q))mstore(0x6540, mulmod(mload(0x5ba0), mload(0x12c0), f_q))mstore(0x6560, mulmod(mload(0x5c40), mload(0x12c0), f_q))mstore(0x6580, mulmod(mload(0x5ce0), mload(0x12c0), f_q))mstore(0x65a0, mulmod(mload(0x5d80), mload(0x12c0), f_q))mstore(0x65c0, mulmod(mload(0x5e20), mload(0x12c0), f_q))mstore(0x65e0, mulmod(mload(0x5ec0), mload(0x12c0), f_q))mstore(0x6600, mulmod(mload(0x5f60), mload(0x12c0), f_q))mstore(0x6620, mulmod(mload(0x6000), mload(0x12c0), f_q))mstore(0x6640, mulmod(mload(0x60a0), mload(0x12c0), f_q))mstore(0x6660, mulmod(mload(0x6140), mload(0x12c0), f_q))mstore(0x6680, mulmod(mload(0x6220), mload(0x12c0), f_q))mstore(0x66a0, mulmod(mload(0x6240), mload(0x12c0), f_q))mstore(0x66c0, mulmod(mload(0x6260), mload(0x12c0), f_q))mstore(0x66e0, mulmod(mload(0x6300), mload(0x12c0), f_q))mstore(0x6700, addmod(mload(0x5060), mload(0x6340), f_q))mstore(0x6720, mulmod(1, mload(0x4660), f_q)){ let result := mulmod(mload(0xee0), mload(0x40a0), f_q)result := addmod(mulmod(mload(0xf00), mload(0x4100), f_q), result, f_q)result := addmod(mulmod(mload(0xf20), mload(0x4160), f_q), result, f_q)mstore(0x6740, result) }mstore(0x6760, mulmod(mload(0x6740), mload(0x48a0), f_q))mstore(0x6780, mulmod(sub(f_q, mload(0x6760)), 1, f_q))mstore(0x67a0, mulmod(mload(0x6720), 1, f_q)){ let result := mulmod(mload(0xf40), mload(0x40a0), f_q)result := addmod(mulmod(mload(0xf60), mload(0x4100), f_q), result, f_q)result := addmod(mulmod(mload(0xf80), mload(0x4160), f_q), result, f_q)mstore(0x67c0, result) }mstore(0x67e0, mulmod(mload(0x67c0), mload(0x48a0), f_q))mstore(0x6800, mulmod(sub(f_q, mload(0x67e0)), mload(0x1260), f_q))mstore(0x6820, mulmod(mload(0x6720), mload(0x1260), f_q))mstore(0x6840, addmod(mload(0x6780), mload(0x6800), f_q)){ let result := mulmod(mload(0xfa0), mload(0x40a0), f_q)result := addmod(mulmod(mload(0xfc0), mload(0x4100), f_q), result, f_q)result := addmod(mulmod(mload(0xfe0), mload(0x4160), f_q), result, f_q)mstore(0x6860, result) }mstore(0x6880, mulmod(mload(0x6860), mload(0x48a0), f_q))mstore(0x68a0, mulmod(sub(f_q, mload(0x6880)), mload(0x4900), f_q))mstore(0x68c0, mulmod(mload(0x6720), mload(0x4900), f_q))mstore(0x68e0, addmod(mload(0x6840), mload(0x68a0), f_q)){ let result := mulmod(mload(0x1000), mload(0x40a0), f_q)result := addmod(mulmod(mload(0x1020), mload(0x4100), f_q), result, f_q)result := addmod(mulmod(mload(0x1040), mload(0x4160), f_q), result, f_q)mstore(0x6900, result) }mstore(0x6920, mulmod(mload(0x6900), mload(0x48a0), f_q))mstore(0x6940, mulmod(sub(f_q, mload(0x6920)), mload(0x4920), f_q))mstore(0x6960, mulmod(mload(0x6720), mload(0x4920), f_q))mstore(0x6980, addmod(mload(0x68e0), mload(0x6940), f_q)){ let result := mulmod(mload(0x1060), mload(0x40a0), f_q)result := addmod(mulmod(mload(0x1080), mload(0x4100), f_q), result, f_q)result := addmod(mulmod(mload(0x10a0), mload(0x4160), f_q), result, f_q)mstore(0x69a0, result) }mstore(0x69c0, mulmod(mload(0x69a0), mload(0x48a0), f_q))mstore(0x69e0, mulmod(sub(f_q, mload(0x69c0)), mload(0x4940), f_q))mstore(0x6a00, mulmod(mload(0x6720), mload(0x4940), f_q))mstore(0x6a20, addmod(mload(0x6980), mload(0x69e0), f_q))mstore(0x6a40, mulmod(mload(0x6a20), mload(0x4c60), f_q))mstore(0x6a60, mulmod(mload(0x67a0), mload(0x4c60), f_q))mstore(0x6a80, mulmod(mload(0x6820), mload(0x4c60), f_q))mstore(0x6aa0, mulmod(mload(0x68c0), mload(0x4c60), f_q))mstore(0x6ac0, mulmod(mload(0x6960), mload(0x4c60), f_q))mstore(0x6ae0, mulmod(mload(0x6a00), mload(0x4c60), f_q))mstore(0x6b00, addmod(mload(0x6700), mload(0x6a40), f_q))mstore(0x6b20, mulmod(1, mload(0x46a0), f_q)){ let result := mulmod(mload(0x10c0), mload(0x41e0), f_q)result := addmod(mulmod(mload(0x10e0), mload(0x4240), f_q), result, f_q)mstore(0x6b40, result) }mstore(0x6b60, mulmod(mload(0x6b40), mload(0x48c0), f_q))mstore(0x6b80, mulmod(sub(f_q, mload(0x6b60)), 1, f_q))mstore(0x6ba0, mulmod(mload(0x6b20), 1, f_q)){ let result := mulmod(mload(0x1100), mload(0x41e0), f_q)result := addmod(mulmod(mload(0x1120), mload(0x4240), f_q), result, f_q)mstore(0x6bc0, result) }mstore(0x6be0, mulmod(mload(0x6bc0), mload(0x48c0), f_q))mstore(0x6c00, mulmod(sub(f_q, mload(0x6be0)), mload(0x1260), f_q))mstore(0x6c20, mulmod(mload(0x6b20), mload(0x1260), f_q))mstore(0x6c40, addmod(mload(0x6b80), mload(0x6c00), f_q)){ let result := mulmod(mload(0x11a0), mload(0x41e0), f_q)result := addmod(mulmod(mload(0x11c0), mload(0x4240), f_q), result, f_q)mstore(0x6c60, result) }mstore(0x6c80, mulmod(mload(0x6c60), mload(0x48c0), f_q))mstore(0x6ca0, mulmod(sub(f_q, mload(0x6c80)), mload(0x4900), f_q))mstore(0x6cc0, mulmod(mload(0x6b20), mload(0x4900), f_q))mstore(0x6ce0, addmod(mload(0x6c40), mload(0x6ca0), f_q))mstore(0x6d00, mulmod(mload(0x6ce0), mload(0x4c80), f_q))mstore(0x6d20, mulmod(mload(0x6ba0), mload(0x4c80), f_q))mstore(0x6d40, mulmod(mload(0x6c20), mload(0x4c80), f_q))mstore(0x6d60, mulmod(mload(0x6cc0), mload(0x4c80), f_q))mstore(0x6d80, addmod(mload(0x6b00), mload(0x6d00), f_q))mstore(0x6da0, mulmod(1, mload(0x46e0), f_q)){ let result := mulmod(mload(0x1140), mload(0x42a0), f_q)result := addmod(mulmod(mload(0x1160), mload(0x4300), f_q), result, f_q)mstore(0x6dc0, result) }mstore(0x6de0, mulmod(mload(0x6dc0), mload(0x48e0), f_q))mstore(0x6e00, mulmod(sub(f_q, mload(0x6de0)), 1, f_q))mstore(0x6e20, mulmod(mload(0x6da0), 1, f_q)){ let result := mulmod(mload(0x11e0), mload(0x42a0), f_q)result := addmod(mulmod(mload(0x1200), mload(0x4300), f_q), result, f_q)mstore(0x6e40, result) }mstore(0x6e60, mulmod(mload(0x6e40), mload(0x48e0), f_q))mstore(0x6e80, mulmod(sub(f_q, mload(0x6e60)), mload(0x1260), f_q))mstore(0x6ea0, mulmod(mload(0x6da0), mload(0x1260), f_q))mstore(0x6ec0, addmod(mload(0x6e00), mload(0x6e80), f_q))mstore(0x6ee0, mulmod(mload(0x6ec0), mload(0x4ca0), f_q))mstore(0x6f00, mulmod(mload(0x6e20), mload(0x4ca0), f_q))mstore(0x6f20, mulmod(mload(0x6ea0), mload(0x4ca0), f_q))mstore(0x6f40, addmod(mload(0x6d80), mload(0x6ee0), f_q))mstore(0x6f60, mulmod(1, mload(0x4020), f_q))mstore(0x6f80, mulmod(1, mload(0x1360), f_q))mstore(0x6fa0, 0x0000000000000000000000000000000000000000000000000000000000000001) mstore(0x6fc0, 0x0000000000000000000000000000000000000000000000000000000000000002)mstore(0x6fe0, mload(0x6f40))success := and(eq(staticcall(gas(), 0x7, 0x6fa0, 0x60, 0x6fa0, 0x40), 1), success)mstore(0x7000, mload(0x6fa0)) mstore(0x7020, mload(0x6fc0))mstore(0x7040, mload(0xa0)) mstore(0x7060, mload(0xc0))success := and(eq(staticcall(gas(), 0x6, 0x7000, 0x80, 0x7000, 0x40), 1), success)mstore(0x7080, mload(0xe0)) mstore(0x70a0, mload(0x100))mstore(0x70c0, mload(0x5080))success := and(eq(staticcall(gas(), 0x7, 0x7080, 0x60, 0x7080, 0x40), 1), success)mstore(0x70e0, mload(0x7000)) mstore(0x7100, mload(0x7020))mstore(0x7120, mload(0x7080)) mstore(0x7140, mload(0x70a0))success := and(eq(staticcall(gas(), 0x6, 0x70e0, 0x80, 0x70e0, 0x40), 1), success)mstore(0x7160, mload(0x120)) mstore(0x7180, mload(0x140))mstore(0x71a0, mload(0x50a0))success := and(eq(staticcall(gas(), 0x7, 0x7160, 0x60, 0x7160, 0x40), 1), success)mstore(0x71c0, mload(0x70e0)) mstore(0x71e0, mload(0x7100))mstore(0x7200, mload(0x7160)) mstore(0x7220, mload(0x7180))success := and(eq(staticcall(gas(), 0x6, 0x71c0, 0x80, 0x71c0, 0x40), 1), success)mstore(0x7240, mload(0x160)) mstore(0x7260, mload(0x180))mstore(0x7280, mload(0x50c0))success := and(eq(staticcall(gas(), 0x7, 0x7240, 0x60, 0x7240, 0x40), 1), success)mstore(0x72a0, mload(0x71c0)) mstore(0x72c0, mload(0x71e0))mstore(0x72e0, mload(0x7240)) mstore(0x7300, mload(0x7260))success := and(eq(staticcall(gas(), 0x6, 0x72a0, 0x80, 0x72a0, 0x40), 1), success)mstore(0x7320, mload(0x1a0)) mstore(0x7340, mload(0x1c0))mstore(0x7360, mload(0x50e0))success := and(eq(staticcall(gas(), 0x7, 0x7320, 0x60, 0x7320, 0x40), 1), success)mstore(0x7380, mload(0x72a0)) mstore(0x73a0, mload(0x72c0))mstore(0x73c0, mload(0x7320)) mstore(0x73e0, mload(0x7340))success := and(eq(staticcall(gas(), 0x6, 0x7380, 0x80, 0x7380, 0x40), 1), success)mstore(0x7400, mload(0x1e0)) mstore(0x7420, mload(0x200))mstore(0x7440, mload(0x5100))success := and(eq(staticcall(gas(), 0x7, 0x7400, 0x60, 0x7400, 0x40), 1), success)mstore(0x7460, mload(0x7380)) mstore(0x7480, mload(0x73a0))mstore(0x74a0, mload(0x7400)) mstore(0x74c0, mload(0x7420))success := and(eq(staticcall(gas(), 0x6, 0x7460, 0x80, 0x7460, 0x40), 1), success)mstore(0x74e0, mload(0x220)) mstore(0x7500, mload(0x240))mstore(0x7520, mload(0x6360))success := and(eq(staticcall(gas(), 0x7, 0x74e0, 0x60, 0x74e0, 0x40), 1), success)mstore(0x7540, mload(0x7460)) mstore(0x7560, mload(0x7480))mstore(0x7580, mload(0x74e0)) mstore(0x75a0, mload(0x7500))success := and(eq(staticcall(gas(), 0x6, 0x7540, 0x80, 0x7540, 0x40), 1), success)mstore(0x75c0, mload(0x260)) mstore(0x75e0, mload(0x280))mstore(0x7600, mload(0x6380))success := and(eq(staticcall(gas(), 0x7, 0x75c0, 0x60, 0x75c0, 0x40), 1), success)mstore(0x7620, mload(0x7540)) mstore(0x7640, mload(0x7560))mstore(0x7660, mload(0x75c0)) mstore(0x7680, mload(0x75e0))success := and(eq(staticcall(gas(), 0x6, 0x7620, 0x80, 0x7620, 0x40), 1), success)mstore(0x76a0, mload(0x2a0)) mstore(0x76c0, mload(0x2c0))mstore(0x76e0, mload(0x63a0))success := and(eq(staticcall(gas(), 0x7, 0x76a0, 0x60, 0x76a0, 0x40), 1), success)mstore(0x7700, mload(0x7620)) mstore(0x7720, mload(0x7640))mstore(0x7740, mload(0x76a0)) mstore(0x7760, mload(0x76c0))success := and(eq(staticcall(gas(), 0x6, 0x7700, 0x80, 0x7700, 0x40), 1), success)mstore(0x7780, mload(0x380)) mstore(0x77a0, mload(0x3a0))mstore(0x77c0, mload(0x63c0))success := and(eq(staticcall(gas(), 0x7, 0x7780, 0x60, 0x7780, 0x40), 1), success)mstore(0x77e0, mload(0x7700)) mstore(0x7800, mload(0x7720))mstore(0x7820, mload(0x7780)) mstore(0x7840, mload(0x77a0))success := and(eq(staticcall(gas(), 0x6, 0x77e0, 0x80, 0x77e0, 0x40), 1), success)mstore(0x7860, mload(0x400)) mstore(0x7880, mload(0x420))mstore(0x78a0, mload(0x63e0))success := and(eq(staticcall(gas(), 0x7, 0x7860, 0x60, 0x7860, 0x40), 1), success)mstore(0x78c0, mload(0x77e0)) mstore(0x78e0, mload(0x7800))mstore(0x7900, mload(0x7860)) mstore(0x7920, mload(0x7880))success := and(eq(staticcall(gas(), 0x6, 0x78c0, 0x80, 0x78c0, 0x40), 1), success)mstore(0x7940, 0x0d3b7c04b7391ddf5d9fc5f8906033e1d1442f341c4cab5c1584c8082ea8c21c) mstore(0x7960, 0x1596df7247ab32fb79261c31617e2f2bbde95b6e8719386dacfeaa8f6d7df60c)mstore(0x7980, mload(0x6400))success := and(eq(staticcall(gas(), 0x7, 0x7940, 0x60, 0x7940, 0x40), 1), success)mstore(0x79a0, mload(0x78c0)) mstore(0x79c0, mload(0x78e0))mstore(0x79e0, mload(0x7940)) mstore(0x7a00, mload(0x7960))success := and(eq(staticcall(gas(), 0x6, 0x79a0, 0x80, 0x79a0, 0x40), 1), success)mstore(0x7a20, 0x04d043081f0d55eead6d8ad7b10d09a6ee2718f445d9bce454075a8a37bacaf3) mstore(0x7a40, 0x27d6bcbb02cd624ab80b5532a0a65fc6f88a0faf7cf3e0d106f4aa0aa25e758b)mstore(0x7a60, mload(0x6420))success := and(eq(staticcall(gas(), 0x7, 0x7a20, 0x60, 0x7a20, 0x40), 1), success)mstore(0x7a80, mload(0x79a0)) mstore(0x7aa0, mload(0x79c0))mstore(0x7ac0, mload(0x7a20)) mstore(0x7ae0, mload(0x7a40))success := and(eq(staticcall(gas(), 0x6, 0x7a80, 0x80, 0x7a80, 0x40), 1), success)mstore(0x7b00, 0x2d07a1bca289cdb98b648a91cbb0809dfa3a06fe01047b291d1161ddf8d1732c) mstore(0x7b20, 0x021d078d5869c57b3fe2413b517561205de5f297ac56c0e5ef0f1a7f4a31ee94)mstore(0x7b40, mload(0x6440))success := and(eq(staticcall(gas(), 0x7, 0x7b00, 0x60, 0x7b00, 0x40), 1), success)mstore(0x7b60, mload(0x7a80)) mstore(0x7b80, mload(0x7aa0))mstore(0x7ba0, mload(0x7b00)) mstore(0x7bc0, mload(0x7b20))success := and(eq(staticcall(gas(), 0x6, 0x7b60, 0x80, 0x7b60, 0x40), 1), success)mstore(0x7be0, 0x2808de5f33581574dd857304add28f30335fa32c49a3d7c9128f5a3f453360cc) mstore(0x7c00, 0x07f10d421231cb6aa063db7a3cf7be709ff037fbb78d19c866d7c2c674a1aaf0)mstore(0x7c20, mload(0x6460))success := and(eq(staticcall(gas(), 0x7, 0x7be0, 0x60, 0x7be0, 0x40), 1), success)mstore(0x7c40, mload(0x7b60)) mstore(0x7c60, mload(0x7b80))mstore(0x7c80, mload(0x7be0)) mstore(0x7ca0, mload(0x7c00))success := and(eq(staticcall(gas(), 0x6, 0x7c40, 0x80, 0x7c40, 0x40), 1), success)mstore(0x7cc0, 0x2a9d8bc0a06a141e47fa114e4e62686823227f5416f19f9b2b54b9948a0bfb4b) mstore(0x7ce0, 0x170610ca7497030a3dbbfeb52cc8f5f086e7a7a91e3b52e44988e6b24f1c6c34)mstore(0x7d00, mload(0x6480))success := and(eq(staticcall(gas(), 0x7, 0x7cc0, 0x60, 0x7cc0, 0x40), 1), success)mstore(0x7d20, mload(0x7c40)) mstore(0x7d40, mload(0x7c60))mstore(0x7d60, mload(0x7cc0)) mstore(0x7d80, mload(0x7ce0))success := and(eq(staticcall(gas(), 0x6, 0x7d20, 0x80, 0x7d20, 0x40), 1), success)mstore(0x7da0, 0x104eb8e796d7c0b0ac9eb316eac3aadbcf9ac5b42d4b14a95ec269fefd70d9ac) mstore(0x7dc0, 0x22e1365078923b7f828a54c75e0b0b108c311580bac730c92d8868c7781a917b)mstore(0x7de0, mload(0x64a0))success := and(eq(staticcall(gas(), 0x7, 0x7da0, 0x60, 0x7da0, 0x40), 1), success)mstore(0x7e00, mload(0x7d20)) mstore(0x7e20, mload(0x7d40))mstore(0x7e40, mload(0x7da0)) mstore(0x7e60, mload(0x7dc0))success := and(eq(staticcall(gas(), 0x6, 0x7e00, 0x80, 0x7e00, 0x40), 1), success)mstore(0x7e80, 0x2e8f499835598c80e2ec4cabd4753e67822df35d0a29c05b60dca21d9173b11a) mstore(0x7ea0, 0x02990fa09b4831443e5956b84832f525976cd30aa6cafe055a45f7a04328d00f)mstore(0x7ec0, mload(0x64c0))success := and(eq(staticcall(gas(), 0x7, 0x7e80, 0x60, 0x7e80, 0x40), 1), success)mstore(0x7ee0, mload(0x7e00)) mstore(0x7f00, mload(0x7e20))mstore(0x7f20, mload(0x7e80)) mstore(0x7f40, mload(0x7ea0))success := and(eq(staticcall(gas(), 0x6, 0x7ee0, 0x80, 0x7ee0, 0x40), 1), success)mstore(0x7f60, 0x258bbf1a0f256c29c1cee612fb7deaa2102870b85d7bda1ac8064307a593101f) mstore(0x7f80, 0x2bbbde7d34cf03b70ea4a0125d6736aeb56da64f07226bf4d662a85e8d50db3a)mstore(0x7fa0, mload(0x64e0))success := and(eq(staticcall(gas(), 0x7, 0x7f60, 0x60, 0x7f60, 0x40), 1), success)mstore(0x7fc0, mload(0x7ee0)) mstore(0x7fe0, mload(0x7f00))mstore(0x8000, mload(0x7f60)) mstore(0x8020, mload(0x7f80))success := and(eq(staticcall(gas(), 0x6, 0x7fc0, 0x80, 0x7fc0, 0x40), 1), success)mstore(0x8040, 0x05127b4a2ff58c747435761c7256b8094a0cf4e6d0f829a060c601d5cce0fdc0) mstore(0x8060, 0x106a8cecab556f1a6d729cdeefd6dd70afbe4954cae4785871d68396dba88d95)mstore(0x8080, mload(0x6500))success := and(eq(staticcall(gas(), 0x7, 0x8040, 0x60, 0x8040, 0x40), 1), success)mstore(0x80a0, mload(0x7fc0)) mstore(0x80c0, mload(0x7fe0))mstore(0x80e0, mload(0x8040)) mstore(0x8100, mload(0x8060))success := and(eq(staticcall(gas(), 0x6, 0x80a0, 0x80, 0x80a0, 0x40), 1), success)mstore(0x8120, 0x24c985411f901ba3e9fe3296d58db7a896d53a060afc4c3b85182122d2a06b16) mstore(0x8140, 0x1e02136b244f617c37779b0cb970dce25ff03579c671e7f3f57a320e7b1a4b06)mstore(0x8160, mload(0x6520))success := and(eq(staticcall(gas(), 0x7, 0x8120, 0x60, 0x8120, 0x40), 1), success)mstore(0x8180, mload(0x80a0)) mstore(0x81a0, mload(0x80c0))mstore(0x81c0, mload(0x8120)) mstore(0x81e0, mload(0x8140))success := and(eq(staticcall(gas(), 0x6, 0x8180, 0x80, 0x8180, 0x40), 1), success)mstore(0x8200, 0x0e5c5a486399e328a6629926a042fde07863ce1a2e91995ee60e5c477008ebdc) mstore(0x8220, 0x223b4bdd8d3877955728258fd5be1b7f2ac8093891a83c738f80395720cc55ca)mstore(0x8240, mload(0x6540))success := and(eq(staticcall(gas(), 0x7, 0x8200, 0x60, 0x8200, 0x40), 1), success)mstore(0x8260, mload(0x8180)) mstore(0x8280, mload(0x81a0))mstore(0x82a0, mload(0x8200)) mstore(0x82c0, mload(0x8220))success := and(eq(staticcall(gas(), 0x6, 0x8260, 0x80, 0x8260, 0x40), 1), success)mstore(0x82e0, 0x2e55f008e10b629fc37b0808b8264d2857e6fa34a1be704a4132f9c1621b8736) mstore(0x8300, 0x01c3487db12618c270ffe8251633753bdad9fd2968144a02b18447bee326d19d)mstore(0x8320, mload(0x6560))success := and(eq(staticcall(gas(), 0x7, 0x82e0, 0x60, 0x82e0, 0x40), 1), success)mstore(0x8340, mload(0x8260)) mstore(0x8360, mload(0x8280))mstore(0x8380, mload(0x82e0)) mstore(0x83a0, mload(0x8300))success := and(eq(staticcall(gas(), 0x6, 0x8340, 0x80, 0x8340, 0x40), 1), success)mstore(0x83c0, 0x0154bffa5c54063b60c4f4c66b2a9acb09fd7f1b2653a9f2b9ee75bcb1bc8ba2) mstore(0x83e0, 0x0b15f039df5ebe088e2231ce9a07c50dbb4739402712b56dd8bab6ab93a95f3f)mstore(0x8400, mload(0x6580))success := and(eq(staticcall(gas(), 0x7, 0x83c0, 0x60, 0x83c0, 0x40), 1), success)mstore(0x8420, mload(0x8340)) mstore(0x8440, mload(0x8360))mstore(0x8460, mload(0x83c0)) mstore(0x8480, mload(0x83e0))success := and(eq(staticcall(gas(), 0x6, 0x8420, 0x80, 0x8420, 0x40), 1), success)mstore(0x84a0, 0x0032a37f146820eccad7796039d21d0c85504baff34e194f750d7f8c4eccf729) mstore(0x84c0, 0x2a655340cddc523abd37c3d77f022b8e616194a3c31e414dc5d466eb2e4c0b69)mstore(0x84e0, mload(0x65a0))success := and(eq(staticcall(gas(), 0x7, 0x84a0, 0x60, 0x84a0, 0x40), 1), success)mstore(0x8500, mload(0x8420)) mstore(0x8520, mload(0x8440))mstore(0x8540, mload(0x84a0)) mstore(0x8560, mload(0x84c0))success := and(eq(staticcall(gas(), 0x6, 0x8500, 0x80, 0x8500, 0x40), 1), success)mstore(0x8580, 0x0d6b367e25327ebd99fae2aaffa6fad2acae34ba7b329ef817a95fe425f65e4d) mstore(0x85a0, 0x2bc4769ce00a494fde791f07b3f092019995d323c0b067d61e0660e1ad84d94f)mstore(0x85c0, mload(0x65c0))success := and(eq(staticcall(gas(), 0x7, 0x8580, 0x60, 0x8580, 0x40), 1), success)mstore(0x85e0, mload(0x8500)) mstore(0x8600, mload(0x8520))mstore(0x8620, mload(0x8580)) mstore(0x8640, mload(0x85a0))success := and(eq(staticcall(gas(), 0x6, 0x85e0, 0x80, 0x85e0, 0x40), 1), success)mstore(0x8660, 0x0fef43d29ecdb947fc934c7adf7f38748fe212082d5a8e3bc621ff907213812b) mstore(0x8680, 0x1ab8ccbb8486a5508a34837db62c3426d6f6210970a2b1351f12d0ba73e11874)mstore(0x86a0, mload(0x65e0))success := and(eq(staticcall(gas(), 0x7, 0x8660, 0x60, 0x8660, 0x40), 1), success)mstore(0x86c0, mload(0x85e0)) mstore(0x86e0, mload(0x8600))mstore(0x8700, mload(0x8660)) mstore(0x8720, mload(0x8680))success := and(eq(staticcall(gas(), 0x6, 0x86c0, 0x80, 0x86c0, 0x40), 1), success)mstore(0x8740, 0x29cc03da3870fc7139115d43275baf04cc110d79f85d2c2e712b981c409df25e) mstore(0x8760, 0x016a8cd002e522595ef910f87dc707449ae5f56876eb88274b2e586fceacf165)mstore(0x8780, mload(0x6600))success := and(eq(staticcall(gas(), 0x7, 0x8740, 0x60, 0x8740, 0x40), 1), success)mstore(0x87a0, mload(0x86c0)) mstore(0x87c0, mload(0x86e0))mstore(0x87e0, mload(0x8740)) mstore(0x8800, mload(0x8760))success := and(eq(staticcall(gas(), 0x6, 0x87a0, 0x80, 0x87a0, 0x40), 1), success)mstore(0x8820, 0x0ec6d72e2ce7c233ca8af2fc2bd4223a6d81d545e8785579de4cb241740f36a2) mstore(0x8840, 0x028a4450999577e25fc7d191fecf7f1a8a0526f7e042f316767c7ff43299fdd9)mstore(0x8860, mload(0x6620))success := and(eq(staticcall(gas(), 0x7, 0x8820, 0x60, 0x8820, 0x40), 1), success)mstore(0x8880, mload(0x87a0)) mstore(0x88a0, mload(0x87c0))mstore(0x88c0, mload(0x8820)) mstore(0x88e0, mload(0x8840))success := and(eq(staticcall(gas(), 0x6, 0x8880, 0x80, 0x8880, 0x40), 1), success)mstore(0x8900, 0x1fdb57cefe9c10024dfe402759cad8061e8d0edeba3f42f187ea796b1938118e) mstore(0x8920, 0x1294d92ed67eec88a2adbb5cef0682a64fae9827c02d37e69beaddd3b6a145ad)mstore(0x8940, mload(0x6640))success := and(eq(staticcall(gas(), 0x7, 0x8900, 0x60, 0x8900, 0x40), 1), success)mstore(0x8960, mload(0x8880)) mstore(0x8980, mload(0x88a0))mstore(0x89a0, mload(0x8900)) mstore(0x89c0, mload(0x8920))success := and(eq(staticcall(gas(), 0x6, 0x8960, 0x80, 0x8960, 0x40), 1), success)mstore(0x89e0, 0x292267e75402bf3fb816d404fe987ec7b277ec539cd653568a31dc8fdd04b6f1) mstore(0x8a00, 0x0a2975f29c8f29df52ea4e941daa28752eea2da8c6b6135622e4a0d823accd78)mstore(0x8a20, mload(0x6660))success := and(eq(staticcall(gas(), 0x7, 0x89e0, 0x60, 0x89e0, 0x40), 1), success)mstore(0x8a40, mload(0x8960)) mstore(0x8a60, mload(0x8980))mstore(0x8a80, mload(0x89e0)) mstore(0x8aa0, mload(0x8a00))success := and(eq(staticcall(gas(), 0x6, 0x8a40, 0x80, 0x8a40, 0x40), 1), success)mstore(0x8ac0, mload(0x7a0)) mstore(0x8ae0, mload(0x7c0))mstore(0x8b00, mload(0x6680))success := and(eq(staticcall(gas(), 0x7, 0x8ac0, 0x60, 0x8ac0, 0x40), 1), success)mstore(0x8b20, mload(0x8a40)) mstore(0x8b40, mload(0x8a60))mstore(0x8b60, mload(0x8ac0)) mstore(0x8b80, mload(0x8ae0))success := and(eq(staticcall(gas(), 0x6, 0x8b20, 0x80, 0x8b20, 0x40), 1), success)mstore(0x8ba0, mload(0x7e0)) mstore(0x8bc0, mload(0x800))mstore(0x8be0, mload(0x66a0))success := and(eq(staticcall(gas(), 0x7, 0x8ba0, 0x60, 0x8ba0, 0x40), 1), success)mstore(0x8c00, mload(0x8b20)) mstore(0x8c20, mload(0x8b40))mstore(0x8c40, mload(0x8ba0)) mstore(0x8c60, mload(0x8bc0))success := and(eq(staticcall(gas(), 0x6, 0x8c00, 0x80, 0x8c00, 0x40), 1), success)mstore(0x8c80, mload(0x820)) mstore(0x8ca0, mload(0x840))mstore(0x8cc0, mload(0x66c0))success := and(eq(staticcall(gas(), 0x7, 0x8c80, 0x60, 0x8c80, 0x40), 1), success)mstore(0x8ce0, mload(0x8c00)) mstore(0x8d00, mload(0x8c20))mstore(0x8d20, mload(0x8c80)) mstore(0x8d40, mload(0x8ca0))success := and(eq(staticcall(gas(), 0x6, 0x8ce0, 0x80, 0x8ce0, 0x40), 1), success)mstore(0x8d60, mload(0x700)) mstore(0x8d80, mload(0x720))mstore(0x8da0, mload(0x66e0))success := and(eq(staticcall(gas(), 0x7, 0x8d60, 0x60, 0x8d60, 0x40), 1), success)mstore(0x8dc0, mload(0x8ce0)) mstore(0x8de0, mload(0x8d00))mstore(0x8e00, mload(0x8d60)) mstore(0x8e20, mload(0x8d80))success := and(eq(staticcall(gas(), 0x6, 0x8dc0, 0x80, 0x8dc0, 0x40), 1), success)mstore(0x8e40, mload(0x500)) mstore(0x8e60, mload(0x520))mstore(0x8e80, mload(0x6a60))success := and(eq(staticcall(gas(), 0x7, 0x8e40, 0x60, 0x8e40, 0x40), 1), success)mstore(0x8ea0, mload(0x8dc0)) mstore(0x8ec0, mload(0x8de0))mstore(0x8ee0, mload(0x8e40)) mstore(0x8f00, mload(0x8e60))success := and(eq(staticcall(gas(), 0x6, 0x8ea0, 0x80, 0x8ea0, 0x40), 1), success)mstore(0x8f20, mload(0x540)) mstore(0x8f40, mload(0x560))mstore(0x8f60, mload(0x6a80))success := and(eq(staticcall(gas(), 0x7, 0x8f20, 0x60, 0x8f20, 0x40), 1), success)mstore(0x8f80, mload(0x8ea0)) mstore(0x8fa0, mload(0x8ec0))mstore(0x8fc0, mload(0x8f20)) mstore(0x8fe0, mload(0x8f40))success := and(eq(staticcall(gas(), 0x6, 0x8f80, 0x80, 0x8f80, 0x40), 1), success)mstore(0x9000, mload(0x580)) mstore(0x9020, mload(0x5a0))mstore(0x9040, mload(0x6aa0))success := and(eq(staticcall(gas(), 0x7, 0x9000, 0x60, 0x9000, 0x40), 1), success)mstore(0x9060, mload(0x8f80)) mstore(0x9080, mload(0x8fa0))mstore(0x90a0, mload(0x9000)) mstore(0x90c0, mload(0x9020))success := and(eq(staticcall(gas(), 0x6, 0x9060, 0x80, 0x9060, 0x40), 1), success)mstore(0x90e0, mload(0x5c0)) mstore(0x9100, mload(0x5e0))mstore(0x9120, mload(0x6ac0))success := and(eq(staticcall(gas(), 0x7, 0x90e0, 0x60, 0x90e0, 0x40), 1), success)mstore(0x9140, mload(0x9060)) mstore(0x9160, mload(0x9080))mstore(0x9180, mload(0x90e0)) mstore(0x91a0, mload(0x9100))success := and(eq(staticcall(gas(), 0x6, 0x9140, 0x80, 0x9140, 0x40), 1), success)mstore(0x91c0, mload(0x600)) mstore(0x91e0, mload(0x620))mstore(0x9200, mload(0x6ae0))success := and(eq(staticcall(gas(), 0x7, 0x91c0, 0x60, 0x91c0, 0x40), 1), success)mstore(0x9220, mload(0x9140)) mstore(0x9240, mload(0x9160))mstore(0x9260, mload(0x91c0)) mstore(0x9280, mload(0x91e0))success := and(eq(staticcall(gas(), 0x6, 0x9220, 0x80, 0x9220, 0x40), 1), success)mstore(0x92a0, mload(0x640)) mstore(0x92c0, mload(0x660))mstore(0x92e0, mload(0x6d20))success := and(eq(staticcall(gas(), 0x7, 0x92a0, 0x60, 0x92a0, 0x40), 1), success)mstore(0x9300, mload(0x9220)) mstore(0x9320, mload(0x9240))mstore(0x9340, mload(0x92a0)) mstore(0x9360, mload(0x92c0))success := and(eq(staticcall(gas(), 0x6, 0x9300, 0x80, 0x9300, 0x40), 1), success)mstore(0x9380, mload(0x680)) mstore(0x93a0, mload(0x6a0))mstore(0x93c0, mload(0x6d40))success := and(eq(staticcall(gas(), 0x7, 0x9380, 0x60, 0x9380, 0x40), 1), success)mstore(0x93e0, mload(0x9300)) mstore(0x9400, mload(0x9320))mstore(0x9420, mload(0x9380)) mstore(0x9440, mload(0x93a0))success := and(eq(staticcall(gas(), 0x6, 0x93e0, 0x80, 0x93e0, 0x40), 1), success)mstore(0x9460, mload(0x6c0)) mstore(0x9480, mload(0x6e0))mstore(0x94a0, mload(0x6d60))success := and(eq(staticcall(gas(), 0x7, 0x9460, 0x60, 0x9460, 0x40), 1), success)mstore(0x94c0, mload(0x93e0)) mstore(0x94e0, mload(0x9400))mstore(0x9500, mload(0x9460)) mstore(0x9520, mload(0x9480))success := and(eq(staticcall(gas(), 0x6, 0x94c0, 0x80, 0x94c0, 0x40), 1), success)mstore(0x9540, mload(0x340)) mstore(0x9560, mload(0x360))mstore(0x9580, mload(0x6f00))success := and(eq(staticcall(gas(), 0x7, 0x9540, 0x60, 0x9540, 0x40), 1), success)mstore(0x95a0, mload(0x94c0)) mstore(0x95c0, mload(0x94e0))mstore(0x95e0, mload(0x9540)) mstore(0x9600, mload(0x9560))success := and(eq(staticcall(gas(), 0x6, 0x95a0, 0x80, 0x95a0, 0x40), 1), success)mstore(0x9620, mload(0x3c0)) mstore(0x9640, mload(0x3e0))mstore(0x9660, mload(0x6f20))success := and(eq(staticcall(gas(), 0x7, 0x9620, 0x60, 0x9620, 0x40), 1), success)mstore(0x9680, mload(0x95a0)) mstore(0x96a0, mload(0x95c0))mstore(0x96c0, mload(0x9620)) mstore(0x96e0, mload(0x9640))success := and(eq(staticcall(gas(), 0x6, 0x9680, 0x80, 0x9680, 0x40), 1), success)mstore(0x9700, mload(0x1300)) mstore(0x9720, mload(0x1320))mstore(0x9740, sub(f_q, mload(0x6f60)))success := and(eq(staticcall(gas(), 0x7, 0x9700, 0x60, 0x9700, 0x40), 1), success)mstore(0x9760, mload(0x9680)) mstore(0x9780, mload(0x96a0))mstore(0x97a0, mload(0x9700)) mstore(0x97c0, mload(0x9720))success := and(eq(staticcall(gas(), 0x6, 0x9760, 0x80, 0x9760, 0x40), 1), success)mstore(0x97e0, mload(0x13a0)) mstore(0x9800, mload(0x13c0))mstore(0x9820, mload(0x6f80))success := and(eq(staticcall(gas(), 0x7, 0x97e0, 0x60, 0x97e0, 0x40), 1), success)mstore(0x9840, mload(0x9760)) mstore(0x9860, mload(0x9780))mstore(0x9880, mload(0x97e0)) mstore(0x98a0, mload(0x9800))success := and(eq(staticcall(gas(), 0x6, 0x9840, 0x80, 0x9840, 0x40), 1), success)mstore(0x98c0, mload(0x9840)) mstore(0x98e0, mload(0x9860))mstore(0x9900, 0x198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c2) mstore(0x9920, 0x1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed) mstore(0x9940, 0x090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b) mstore(0x9960, 0x12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa)mstore(0x9980, mload(0x13a0)) mstore(0x99a0, mload(0x13c0))mstore(0x99c0, 0x0181624e80f3d6ae28df7e01eaeab1c0e919877a3b8a6b7fbc69a6817d596ea2) mstore(0x99e0, 0x1783d30dcb12d259bb89098addf6280fa4b653be7a152542a28f7b926e27e648) mstore(0x9a00, 0x00ae44489d41a0d179e2dfdc03bddd883b7109f8b6ae316a59e815c1a6b35304) mstore(0x9a20, 0x0b2147ab62a386bd63e6de1522109b8c9588ab466f5aadfde8c41ca3749423ee)success := and(eq(staticcall(gas(), 0x8, 0x98c0, 0x180, 0x98c0, 0x20), 1), success)success := and(eq(mload(0x98c0), 1), success) // Revert if anything fails if iszero(success) { revert(0, 0) }} return success; } } + assembly { } { let y_square := mulmod(y, y, 0x30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47) let x_square := mulmod(x, x, 0x30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47) let x_cube := mulmod(x_square, x, 0x30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47) let x_cube_plus_3 := addmod(x_cube, 3, 0x30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47) let is_affine := eq(x_cube_plus_3, y_square) valid := and(valid, is_affine) } } mstore(0xa0, mod(calldataload(0x4), f_q))mstore(0x80, 697977589985395630139925574281256772762542249956921372363329126037282444860) { let x := calldataload(0x64) mstore(0xc0, x) let y := calldataload(0x84) mstore(0xe0, y) success := and(validate_ec_point(x, y), success) } { let x := calldataload(0xa4) mstore(0x100, x) let y := calldataload(0xc4) mstore(0x120, y) success := and(validate_ec_point(x, y), success) } { let x := calldataload(0xe4) mstore(0x140, x) let y := calldataload(0x104) mstore(0x160, y) success := and(validate_ec_point(x, y), success) } { let x := calldataload(0x124) mstore(0x180, x) let y := calldataload(0x144) mstore(0x1a0, y) success := and(validate_ec_point(x, y), success) } { let x := calldataload(0x164) mstore(0x1c0, x) let y := calldataload(0x184) mstore(0x1e0, y) success := and(validate_ec_point(x, y), success) } { let x := calldataload(0x1a4) mstore(0x200, x) let y := calldataload(0x1c4) mstore(0x220, y) success := and(validate_ec_point(x, y), success) } { let x := calldataload(0x1e4) mstore(0x240, x) let y := calldataload(0x204) mstore(0x260, y) success := and(validate_ec_point(x, y), success) } { let x := calldataload(0x224) mstore(0x280, x) let y := calldataload(0x244) mstore(0x2a0, y) success := and(validate_ec_point(x, y), success) } { let x := calldataload(0x264) mstore(0x2c0, x) let y := calldataload(0x284) mstore(0x2e0, y) success := and(validate_ec_point(x, y), success) }mstore(0x300, keccak256(0x80, 640)){ let hash := mload(0x300) mstore(0x320, mod(hash, f_q)) mstore(0x340, hash) } { let x := calldataload(0x2a4) mstore(0x360, x) let y := calldataload(0x2c4) mstore(0x380, y) success := and(validate_ec_point(x, y), success) } { let x := calldataload(0x2e4) mstore(0x3a0, x) let y := calldataload(0x304) mstore(0x3c0, y) success := and(validate_ec_point(x, y), success) } { let x := calldataload(0x324) mstore(0x3e0, x) let y := calldataload(0x344) mstore(0x400, y) success := and(validate_ec_point(x, y), success) } { let x := calldataload(0x364) mstore(0x420, x) let y := calldataload(0x384) mstore(0x440, y) success := and(validate_ec_point(x, y), success) }mstore(0x460, keccak256(0x340, 288)){ let hash := mload(0x460) mstore(0x480, mod(hash, f_q)) mstore(0x4a0, hash) }mstore8(0x4c0, 1)mstore(0x4c0, keccak256(0x4a0, 33)){ let hash := mload(0x4c0) mstore(0x4e0, mod(hash, f_q)) mstore(0x500, hash) } { let x := calldataload(0x3a4) mstore(0x520, x) let y := calldataload(0x3c4) mstore(0x540, y) success := and(validate_ec_point(x, y), success) } { let x := calldataload(0x3e4) mstore(0x560, x) let y := calldataload(0x404) mstore(0x580, y) success := and(validate_ec_point(x, y), success) } { let x := calldataload(0x424) mstore(0x5a0, x) let y := calldataload(0x444) mstore(0x5c0, y) success := and(validate_ec_point(x, y), success) } { let x := calldataload(0x464) mstore(0x5e0, x) let y := calldataload(0x484) mstore(0x600, y) success := and(validate_ec_point(x, y), success) } { let x := calldataload(0x4a4) mstore(0x620, x) let y := calldataload(0x4c4) mstore(0x640, y) success := and(validate_ec_point(x, y), success) } { let x := calldataload(0x4e4) mstore(0x660, x) let y := calldataload(0x504) mstore(0x680, y) success := and(validate_ec_point(x, y), success) } { let x := calldataload(0x524) mstore(0x6a0, x) let y := calldataload(0x544) mstore(0x6c0, y) success := and(validate_ec_point(x, y), success) } { let x := calldataload(0x564) mstore(0x6e0, x) let y := calldataload(0x584) mstore(0x700, y) success := and(validate_ec_point(x, y), success) } { let x := calldataload(0x5a4) mstore(0x720, x) let y := calldataload(0x5c4) mstore(0x740, y) success := and(validate_ec_point(x, y), success) }mstore(0x760, keccak256(0x500, 608)){ let hash := mload(0x760) mstore(0x780, mod(hash, f_q)) mstore(0x7a0, hash) } { let x := calldataload(0x5e4) mstore(0x7c0, x) let y := calldataload(0x604) mstore(0x7e0, y) success := and(validate_ec_point(x, y), success) } { let x := calldataload(0x624) mstore(0x800, x) let y := calldataload(0x644) mstore(0x820, y) success := and(validate_ec_point(x, y), success) } { let x := calldataload(0x664) mstore(0x840, x) let y := calldataload(0x684) mstore(0x860, y) success := and(validate_ec_point(x, y), success) }mstore(0x880, keccak256(0x7a0, 224)){ let hash := mload(0x880) mstore(0x8a0, mod(hash, f_q)) mstore(0x8c0, hash) }mstore(0x8e0, mod(calldataload(0x6a4), f_q))mstore(0x900, mod(calldataload(0x6c4), f_q))mstore(0x920, mod(calldataload(0x6e4), f_q))mstore(0x940, mod(calldataload(0x704), f_q))mstore(0x960, mod(calldataload(0x724), f_q))mstore(0x980, mod(calldataload(0x744), f_q))mstore(0x9a0, mod(calldataload(0x764), f_q))mstore(0x9c0, mod(calldataload(0x784), f_q))mstore(0x9e0, mod(calldataload(0x7a4), f_q))mstore(0xa00, mod(calldataload(0x7c4), f_q))mstore(0xa20, mod(calldataload(0x7e4), f_q))mstore(0xa40, mod(calldataload(0x804), f_q))mstore(0xa60, mod(calldataload(0x824), f_q))mstore(0xa80, mod(calldataload(0x844), f_q))mstore(0xaa0, mod(calldataload(0x864), f_q))mstore(0xac0, mod(calldataload(0x884), f_q))mstore(0xae0, mod(calldataload(0x8a4), f_q))mstore(0xb00, mod(calldataload(0x8c4), f_q))mstore(0xb20, mod(calldataload(0x8e4), f_q))mstore(0xb40, mod(calldataload(0x904), f_q))mstore(0xb60, mod(calldataload(0x924), f_q))mstore(0xb80, mod(calldataload(0x944), f_q))mstore(0xba0, mod(calldataload(0x964), f_q))mstore(0xbc0, mod(calldataload(0x984), f_q))mstore(0xbe0, mod(calldataload(0x9a4), f_q))mstore(0xc00, mod(calldataload(0x9c4), f_q))mstore(0xc20, mod(calldataload(0x9e4), f_q))mstore(0xc40, mod(calldataload(0xa04), f_q))mstore(0xc60, mod(calldataload(0xa24), f_q))mstore(0xc80, mod(calldataload(0xa44), f_q))mstore(0xca0, mod(calldataload(0xa64), f_q))mstore(0xcc0, mod(calldataload(0xa84), f_q))mstore(0xce0, mod(calldataload(0xaa4), f_q))mstore(0xd00, mod(calldataload(0xac4), f_q))mstore(0xd20, mod(calldataload(0xae4), f_q))mstore(0xd40, mod(calldataload(0xb04), f_q))mstore(0xd60, mod(calldataload(0xb24), f_q))mstore(0xd80, mod(calldataload(0xb44), f_q))mstore(0xda0, mod(calldataload(0xb64), f_q))mstore(0xdc0, mod(calldataload(0xb84), f_q))mstore(0xde0, mod(calldataload(0xba4), f_q))mstore(0xe00, mod(calldataload(0xbc4), f_q))mstore(0xe20, mod(calldataload(0xbe4), f_q))mstore(0xe40, mod(calldataload(0xc04), f_q))mstore(0xe60, mod(calldataload(0xc24), f_q))mstore(0xe80, mod(calldataload(0xc44), f_q))mstore(0xea0, mod(calldataload(0xc64), f_q))mstore(0xec0, mod(calldataload(0xc84), f_q))mstore(0xee0, mod(calldataload(0xca4), f_q))mstore(0xf00, mod(calldataload(0xcc4), f_q))mstore(0xf20, mod(calldataload(0xce4), f_q))mstore(0xf40, mod(calldataload(0xd04), f_q))mstore(0xf60, mod(calldataload(0xd24), f_q))mstore(0xf80, mod(calldataload(0xd44), f_q))mstore(0xfa0, mod(calldataload(0xd64), f_q))mstore(0xfc0, mod(calldataload(0xd84), f_q))mstore(0xfe0, mod(calldataload(0xda4), f_q))mstore(0x1000, mod(calldataload(0xdc4), f_q))mstore(0x1020, mod(calldataload(0xde4), f_q))mstore(0x1040, mod(calldataload(0xe04), f_q))mstore(0x1060, mod(calldataload(0xe24), f_q))mstore(0x1080, mod(calldataload(0xe44), f_q))mstore(0x10a0, mod(calldataload(0xe64), f_q))mstore(0x10c0, mod(calldataload(0xe84), f_q))mstore(0x10e0, mod(calldataload(0xea4), f_q))mstore(0x1100, mod(calldataload(0xec4), f_q))mstore(0x1120, mod(calldataload(0xee4), f_q))mstore(0x1140, mod(calldataload(0xf04), f_q))mstore(0x1160, mod(calldataload(0xf24), f_q))mstore(0x1180, mod(calldataload(0xf44), f_q))mstore(0x11a0, mod(calldataload(0xf64), f_q))mstore(0x11c0, mod(calldataload(0xf84), f_q))mstore(0x11e0, mod(calldataload(0xfa4), f_q))mstore(0x1200, mod(calldataload(0xfc4), f_q))mstore(0x1220, mod(calldataload(0xfe4), f_q))mstore(0x1240, mod(calldataload(0x1004), f_q))mstore(0x1260, keccak256(0x8c0, 2464)){ let hash := mload(0x1260) mstore(0x1280, mod(hash, f_q)) mstore(0x12a0, hash) }mstore8(0x12c0, 1)mstore(0x12c0, keccak256(0x12a0, 33)){ let hash := mload(0x12c0) mstore(0x12e0, mod(hash, f_q)) mstore(0x1300, hash) } { let x := calldataload(0x1024) mstore(0x1320, x) let y := calldataload(0x1044) mstore(0x1340, y) success := and(validate_ec_point(x, y), success) }mstore(0x1360, keccak256(0x1300, 96)){ let hash := mload(0x1360) mstore(0x1380, mod(hash, f_q)) mstore(0x13a0, hash) } { let x := calldataload(0x1064) mstore(0x13c0, x) let y := calldataload(0x1084) mstore(0x13e0, y) success := and(validate_ec_point(x, y), success) }mstore(0x1400, mulmod(mload(0x8a0), mload(0x8a0), f_q))mstore(0x1420, mulmod(mload(0x1400), mload(0x1400), f_q))mstore(0x1440, mulmod(mload(0x1420), mload(0x1420), f_q))mstore(0x1460, mulmod(mload(0x1440), mload(0x1440), f_q))mstore(0x1480, mulmod(mload(0x1460), mload(0x1460), f_q))mstore(0x14a0, mulmod(mload(0x1480), mload(0x1480), f_q))mstore(0x14c0, mulmod(mload(0x14a0), mload(0x14a0), f_q))mstore(0x14e0, mulmod(mload(0x14c0), mload(0x14c0), f_q))mstore(0x1500, mulmod(mload(0x14e0), mload(0x14e0), f_q))mstore(0x1520, mulmod(mload(0x1500), mload(0x1500), f_q))mstore(0x1540, mulmod(mload(0x1520), mload(0x1520), f_q))mstore(0x1560, mulmod(mload(0x1540), mload(0x1540), f_q))mstore(0x1580, mulmod(mload(0x1560), mload(0x1560), f_q))mstore(0x15a0, mulmod(mload(0x1580), mload(0x1580), f_q))mstore(0x15c0, mulmod(mload(0x15a0), mload(0x15a0), f_q))mstore(0x15e0, mulmod(mload(0x15c0), mload(0x15c0), f_q))mstore(0x1600, mulmod(mload(0x15e0), mload(0x15e0), f_q))mstore(0x1620, mulmod(mload(0x1600), mload(0x1600), f_q))mstore(0x1640, mulmod(mload(0x1620), mload(0x1620), f_q))mstore(0x1660, mulmod(mload(0x1640), mload(0x1640), f_q))mstore(0x1680, mulmod(mload(0x1660), mload(0x1660), f_q))mstore(0x16a0, mulmod(mload(0x1680), mload(0x1680), f_q))mstore(0x16c0, addmod(mload(0x16a0), 21888242871839275222246405745257275088548364400416034343698204186575808495616, f_q))mstore(0x16e0, mulmod(mload(0x16c0), 21888237653275510688422624196183639687472264873923820041627027729598873448513, f_q))mstore(0x1700, mulmod(mload(0x16e0), 13225785879531581993054172815365636627224369411478295502904397545373139154045, f_q))mstore(0x1720, addmod(mload(0x8a0), 8662456992307693229192232929891638461323994988937738840793806641202669341572, f_q))mstore(0x1740, mulmod(mload(0x16e0), 10939663269433627367777756708678102241564365262857670666700619874077960926249, f_q))mstore(0x1760, addmod(mload(0x8a0), 10948579602405647854468649036579172846983999137558363676997584312497847569368, f_q))mstore(0x1780, mulmod(mload(0x16e0), 11016257578652593686382655500910603527869149377564754001549454008164059876499, f_q))mstore(0x17a0, addmod(mload(0x8a0), 10871985293186681535863750244346671560679215022851280342148750178411748619118, f_q))mstore(0x17c0, mulmod(mload(0x16e0), 15402826414547299628414612080036060696555554914079673875872749760617770134879, f_q))mstore(0x17e0, addmod(mload(0x8a0), 6485416457291975593831793665221214391992809486336360467825454425958038360738, f_q))mstore(0x1800, mulmod(mload(0x16e0), 21710372849001950800533397158415938114909991150039389063546734567764856596059, f_q))mstore(0x1820, addmod(mload(0x8a0), 177870022837324421713008586841336973638373250376645280151469618810951899558, f_q))mstore(0x1840, mulmod(mload(0x16e0), 2785514556381676080176937710880804108647911392478702105860685610379369825016, f_q))mstore(0x1860, addmod(mload(0x8a0), 19102728315457599142069468034376470979900453007937332237837518576196438670601, f_q))mstore(0x1880, mulmod(mload(0x16e0), 8734126352828345679573237859165904705806588461301144420590422589042130041188, f_q))mstore(0x18a0, addmod(mload(0x8a0), 13154116519010929542673167886091370382741775939114889923107781597533678454429, f_q))mstore(0x18c0, mulmod(mload(0x16e0), 1, f_q))mstore(0x18e0, addmod(mload(0x8a0), 21888242871839275222246405745257275088548364400416034343698204186575808495616, f_q)){ let prod := mload(0x1720) prod := mulmod(mload(0x1760), prod, f_q) mstore(0x1900, prod) prod := mulmod(mload(0x17a0), prod, f_q) mstore(0x1920, prod) prod := mulmod(mload(0x17e0), prod, f_q) mstore(0x1940, prod) prod := mulmod(mload(0x1820), prod, f_q) mstore(0x1960, prod) prod := mulmod(mload(0x1860), prod, f_q) mstore(0x1980, prod) prod := mulmod(mload(0x18a0), prod, f_q) mstore(0x19a0, prod) prod := mulmod(mload(0x18e0), prod, f_q) mstore(0x19c0, prod) prod := mulmod(mload(0x16c0), prod, f_q) mstore(0x19e0, prod) }mstore(0x1a20, 32)mstore(0x1a40, 32)mstore(0x1a60, 32)mstore(0x1a80, mload(0x19e0))mstore(0x1aa0, 21888242871839275222246405745257275088548364400416034343698204186575808495615)mstore(0x1ac0, 21888242871839275222246405745257275088548364400416034343698204186575808495617)success := and(eq(staticcall(gas(), 0x5, 0x1a20, 0xc0, 0x1a00, 0x20), 1), success){ let inv := mload(0x1a00) let v v := mload(0x16c0) mstore(0x16c0, mulmod(mload(0x19c0), inv, f_q)) inv := mulmod(v, inv, f_q) v := mload(0x18e0) mstore(0x18e0, mulmod(mload(0x19a0), inv, f_q)) inv := mulmod(v, inv, f_q) v := mload(0x18a0) mstore(0x18a0, mulmod(mload(0x1980), inv, f_q)) inv := mulmod(v, inv, f_q) v := mload(0x1860) mstore(0x1860, mulmod(mload(0x1960), inv, f_q)) inv := mulmod(v, inv, f_q) v := mload(0x1820) mstore(0x1820, mulmod(mload(0x1940), inv, f_q)) inv := mulmod(v, inv, f_q) v := mload(0x17e0) mstore(0x17e0, mulmod(mload(0x1920), inv, f_q)) inv := mulmod(v, inv, f_q) v := mload(0x17a0) mstore(0x17a0, mulmod(mload(0x1900), inv, f_q)) inv := mulmod(v, inv, f_q) v := mload(0x1760) mstore(0x1760, mulmod(mload(0x1720), inv, f_q)) inv := mulmod(v, inv, f_q) mstore(0x1720, inv) }mstore(0x1ae0, mulmod(mload(0x1700), mload(0x1720), f_q))mstore(0x1b00, mulmod(mload(0x1740), mload(0x1760), f_q))mstore(0x1b20, mulmod(mload(0x1780), mload(0x17a0), f_q))mstore(0x1b40, mulmod(mload(0x17c0), mload(0x17e0), f_q))mstore(0x1b60, mulmod(mload(0x1800), mload(0x1820), f_q))mstore(0x1b80, mulmod(mload(0x1840), mload(0x1860), f_q))mstore(0x1ba0, mulmod(mload(0x1880), mload(0x18a0), f_q))mstore(0x1bc0, mulmod(mload(0x18c0), mload(0x18e0), f_q)){ let result := mulmod(mload(0x1bc0), mload(0xa0), f_q)mstore(0x1be0, result) }mstore(0x1c00, mulmod(mload(0x920), mload(0x900), f_q))mstore(0x1c20, addmod(mload(0x8e0), mload(0x1c00), f_q))mstore(0x1c40, addmod(mload(0x1c20), sub(f_q, mload(0x940)), f_q))mstore(0x1c60, mulmod(mload(0x1c40), mload(0xcc0), f_q))mstore(0x1c80, mulmod(mload(0x780), mload(0x1c60), f_q))mstore(0x1ca0, mulmod(mload(0x9a0), mload(0x980), f_q))mstore(0x1cc0, addmod(mload(0x960), mload(0x1ca0), f_q))mstore(0x1ce0, addmod(mload(0x1cc0), sub(f_q, mload(0x9c0)), f_q))mstore(0x1d00, mulmod(mload(0x1ce0), mload(0xce0), f_q))mstore(0x1d20, addmod(mload(0x1c80), mload(0x1d00), f_q))mstore(0x1d40, mulmod(mload(0x780), mload(0x1d20), f_q))mstore(0x1d60, mulmod(mload(0xa20), mload(0xa00), f_q))mstore(0x1d80, addmod(mload(0x9e0), mload(0x1d60), f_q))mstore(0x1da0, addmod(mload(0x1d80), sub(f_q, mload(0xa40)), f_q))mstore(0x1dc0, mulmod(mload(0x1da0), mload(0xd00), f_q))mstore(0x1de0, addmod(mload(0x1d40), mload(0x1dc0), f_q))mstore(0x1e00, mulmod(mload(0x780), mload(0x1de0), f_q))mstore(0x1e20, mulmod(mload(0xaa0), mload(0xa80), f_q))mstore(0x1e40, addmod(mload(0xa60), mload(0x1e20), f_q))mstore(0x1e60, addmod(mload(0x1e40), sub(f_q, mload(0xac0)), f_q))mstore(0x1e80, mulmod(mload(0x1e60), mload(0xd20), f_q))mstore(0x1ea0, addmod(mload(0x1e00), mload(0x1e80), f_q))mstore(0x1ec0, mulmod(mload(0x780), mload(0x1ea0), f_q))mstore(0x1ee0, mulmod(mload(0xb20), mload(0xb00), f_q))mstore(0x1f00, addmod(mload(0xae0), mload(0x1ee0), f_q))mstore(0x1f20, addmod(mload(0x1f00), sub(f_q, mload(0xb40)), f_q))mstore(0x1f40, mulmod(mload(0x1f20), mload(0xd40), f_q))mstore(0x1f60, addmod(mload(0x1ec0), mload(0x1f40), f_q))mstore(0x1f80, mulmod(mload(0x780), mload(0x1f60), f_q))mstore(0x1fa0, mulmod(mload(0xba0), mload(0xb80), f_q))mstore(0x1fc0, addmod(mload(0xb60), mload(0x1fa0), f_q))mstore(0x1fe0, addmod(mload(0x1fc0), sub(f_q, mload(0xbc0)), f_q))mstore(0x2000, mulmod(mload(0x1fe0), mload(0xd60), f_q))mstore(0x2020, addmod(mload(0x1f80), mload(0x2000), f_q))mstore(0x2040, mulmod(mload(0x780), mload(0x2020), f_q))mstore(0x2060, addmod(1, sub(f_q, mload(0xf00)), f_q))mstore(0x2080, mulmod(mload(0x2060), mload(0x1bc0), f_q))mstore(0x20a0, addmod(mload(0x2040), mload(0x2080), f_q))mstore(0x20c0, mulmod(mload(0x780), mload(0x20a0), f_q))mstore(0x20e0, mulmod(mload(0x10e0), mload(0x10e0), f_q))mstore(0x2100, addmod(mload(0x20e0), sub(f_q, mload(0x10e0)), f_q))mstore(0x2120, mulmod(mload(0x2100), mload(0x1ae0), f_q))mstore(0x2140, addmod(mload(0x20c0), mload(0x2120), f_q))mstore(0x2160, mulmod(mload(0x780), mload(0x2140), f_q))mstore(0x2180, addmod(mload(0xf60), sub(f_q, mload(0xf40)), f_q))mstore(0x21a0, mulmod(mload(0x2180), mload(0x1bc0), f_q))mstore(0x21c0, addmod(mload(0x2160), mload(0x21a0), f_q))mstore(0x21e0, mulmod(mload(0x780), mload(0x21c0), f_q))mstore(0x2200, addmod(mload(0xfc0), sub(f_q, mload(0xfa0)), f_q))mstore(0x2220, mulmod(mload(0x2200), mload(0x1bc0), f_q))mstore(0x2240, addmod(mload(0x21e0), mload(0x2220), f_q))mstore(0x2260, mulmod(mload(0x780), mload(0x2240), f_q))mstore(0x2280, addmod(mload(0x1020), sub(f_q, mload(0x1000)), f_q))mstore(0x22a0, mulmod(mload(0x2280), mload(0x1bc0), f_q))mstore(0x22c0, addmod(mload(0x2260), mload(0x22a0), f_q))mstore(0x22e0, mulmod(mload(0x780), mload(0x22c0), f_q))mstore(0x2300, addmod(mload(0x1080), sub(f_q, mload(0x1060)), f_q))mstore(0x2320, mulmod(mload(0x2300), mload(0x1bc0), f_q))mstore(0x2340, addmod(mload(0x22e0), mload(0x2320), f_q))mstore(0x2360, mulmod(mload(0x780), mload(0x2340), f_q))mstore(0x2380, addmod(mload(0x10e0), sub(f_q, mload(0x10c0)), f_q))mstore(0x23a0, mulmod(mload(0x2380), mload(0x1bc0), f_q))mstore(0x23c0, addmod(mload(0x2360), mload(0x23a0), f_q))mstore(0x23e0, mulmod(mload(0x780), mload(0x23c0), f_q))mstore(0x2400, addmod(1, sub(f_q, mload(0x1ae0)), f_q))mstore(0x2420, addmod(mload(0x1b00), mload(0x1b20), f_q))mstore(0x2440, addmod(mload(0x2420), mload(0x1b40), f_q))mstore(0x2460, addmod(mload(0x2440), mload(0x1b60), f_q))mstore(0x2480, addmod(mload(0x2460), mload(0x1b80), f_q))mstore(0x24a0, addmod(mload(0x2480), mload(0x1ba0), f_q))mstore(0x24c0, addmod(mload(0x2400), sub(f_q, mload(0x24a0)), f_q))mstore(0x24e0, mulmod(mload(0xda0), mload(0x480), f_q))mstore(0x2500, addmod(mload(0xc40), mload(0x24e0), f_q))mstore(0x2520, addmod(mload(0x2500), mload(0x4e0), f_q))mstore(0x2540, mulmod(mload(0xdc0), mload(0x480), f_q))mstore(0x2560, addmod(mload(0x8e0), mload(0x2540), f_q))mstore(0x2580, addmod(mload(0x2560), mload(0x4e0), f_q))mstore(0x25a0, mulmod(mload(0x2580), mload(0x2520), f_q))mstore(0x25c0, mulmod(mload(0x25a0), mload(0xf20), f_q))mstore(0x25e0, mulmod(1, mload(0x480), f_q))mstore(0x2600, mulmod(mload(0x8a0), mload(0x25e0), f_q))mstore(0x2620, addmod(mload(0xc40), mload(0x2600), f_q))mstore(0x2640, addmod(mload(0x2620), mload(0x4e0), f_q))mstore(0x2660, mulmod(4131629893567559867359510883348571134090853742863529169391034518566172092834, mload(0x480), f_q))mstore(0x2680, mulmod(mload(0x8a0), mload(0x2660), f_q))mstore(0x26a0, addmod(mload(0x8e0), mload(0x2680), f_q))mstore(0x26c0, addmod(mload(0x26a0), mload(0x4e0), f_q))mstore(0x26e0, mulmod(mload(0x26c0), mload(0x2640), f_q))mstore(0x2700, mulmod(mload(0x26e0), mload(0xf00), f_q))mstore(0x2720, addmod(mload(0x25c0), sub(f_q, mload(0x2700)), f_q))mstore(0x2740, mulmod(mload(0x2720), mload(0x24c0), f_q))mstore(0x2760, addmod(mload(0x23e0), mload(0x2740), f_q))mstore(0x2780, mulmod(mload(0x780), mload(0x2760), f_q))mstore(0x27a0, mulmod(mload(0xde0), mload(0x480), f_q))mstore(0x27c0, addmod(mload(0x960), mload(0x27a0), f_q))mstore(0x27e0, addmod(mload(0x27c0), mload(0x4e0), f_q))mstore(0x2800, mulmod(mload(0xe00), mload(0x480), f_q))mstore(0x2820, addmod(mload(0x9e0), mload(0x2800), f_q))mstore(0x2840, addmod(mload(0x2820), mload(0x4e0), f_q))mstore(0x2860, mulmod(mload(0x2840), mload(0x27e0), f_q))mstore(0x2880, mulmod(mload(0x2860), mload(0xf80), f_q))mstore(0x28a0, mulmod(8910878055287538404433155982483128285667088683464058436815641868457422632747, mload(0x480), f_q))mstore(0x28c0, mulmod(mload(0x8a0), mload(0x28a0), f_q))mstore(0x28e0, addmod(mload(0x960), mload(0x28c0), f_q))mstore(0x2900, addmod(mload(0x28e0), mload(0x4e0), f_q))mstore(0x2920, mulmod(11166246659983828508719468090013646171463329086121580628794302409516816350802, mload(0x480), f_q))mstore(0x2940, mulmod(mload(0x8a0), mload(0x2920), f_q))mstore(0x2960, addmod(mload(0x9e0), mload(0x2940), f_q))mstore(0x2980, addmod(mload(0x2960), mload(0x4e0), f_q))mstore(0x29a0, mulmod(mload(0x2980), mload(0x2900), f_q))mstore(0x29c0, mulmod(mload(0x29a0), mload(0xf60), f_q))mstore(0x29e0, addmod(mload(0x2880), sub(f_q, mload(0x29c0)), f_q))mstore(0x2a00, mulmod(mload(0x29e0), mload(0x24c0), f_q))mstore(0x2a20, addmod(mload(0x2780), mload(0x2a00), f_q))mstore(0x2a40, mulmod(mload(0x780), mload(0x2a20), f_q))mstore(0x2a60, mulmod(mload(0xe20), mload(0x480), f_q))mstore(0x2a80, addmod(mload(0xa60), mload(0x2a60), f_q))mstore(0x2aa0, addmod(mload(0x2a80), mload(0x4e0), f_q))mstore(0x2ac0, mulmod(mload(0xe40), mload(0x480), f_q))mstore(0x2ae0, addmod(mload(0xae0), mload(0x2ac0), f_q))mstore(0x2b00, addmod(mload(0x2ae0), mload(0x4e0), f_q))mstore(0x2b20, mulmod(mload(0x2b00), mload(0x2aa0), f_q))mstore(0x2b40, mulmod(mload(0x2b20), mload(0xfe0), f_q))mstore(0x2b60, mulmod(284840088355319032285349970403338060113257071685626700086398481893096618818, mload(0x480), f_q))mstore(0x2b80, mulmod(mload(0x8a0), mload(0x2b60), f_q))mstore(0x2ba0, addmod(mload(0xa60), mload(0x2b80), f_q))mstore(0x2bc0, addmod(mload(0x2ba0), mload(0x4e0), f_q))mstore(0x2be0, mulmod(21134065618345176623193549882539580312263652408302468683943992798037078993309, mload(0x480), f_q))mstore(0x2c00, mulmod(mload(0x8a0), mload(0x2be0), f_q))mstore(0x2c20, addmod(mload(0xae0), mload(0x2c00), f_q))mstore(0x2c40, addmod(mload(0x2c20), mload(0x4e0), f_q))mstore(0x2c60, mulmod(mload(0x2c40), mload(0x2bc0), f_q))mstore(0x2c80, mulmod(mload(0x2c60), mload(0xfc0), f_q))mstore(0x2ca0, addmod(mload(0x2b40), sub(f_q, mload(0x2c80)), f_q))mstore(0x2cc0, mulmod(mload(0x2ca0), mload(0x24c0), f_q))mstore(0x2ce0, addmod(mload(0x2a40), mload(0x2cc0), f_q))mstore(0x2d00, mulmod(mload(0x780), mload(0x2ce0), f_q))mstore(0x2d20, mulmod(mload(0xe60), mload(0x480), f_q))mstore(0x2d40, addmod(mload(0xb60), mload(0x2d20), f_q))mstore(0x2d60, addmod(mload(0x2d40), mload(0x4e0), f_q))mstore(0x2d80, mulmod(mload(0xe80), mload(0x480), f_q))mstore(0x2da0, addmod(mload(0xbe0), mload(0x2d80), f_q))mstore(0x2dc0, addmod(mload(0x2da0), mload(0x4e0), f_q))mstore(0x2de0, mulmod(mload(0x2dc0), mload(0x2d60), f_q))mstore(0x2e00, mulmod(mload(0x2de0), mload(0x1040), f_q))mstore(0x2e20, mulmod(5625741653535312224677218588085279924365897425605943700675464992185016992283, mload(0x480), f_q))mstore(0x2e40, mulmod(mload(0x8a0), mload(0x2e20), f_q))mstore(0x2e60, addmod(mload(0xb60), mload(0x2e40), f_q))mstore(0x2e80, addmod(mload(0x2e60), mload(0x4e0), f_q))mstore(0x2ea0, mulmod(14704729814417906439424896605881467874595262020190401576785074330126828718155, mload(0x480), f_q))mstore(0x2ec0, mulmod(mload(0x8a0), mload(0x2ea0), f_q))mstore(0x2ee0, addmod(mload(0xbe0), mload(0x2ec0), f_q))mstore(0x2f00, addmod(mload(0x2ee0), mload(0x4e0), f_q))mstore(0x2f20, mulmod(mload(0x2f00), mload(0x2e80), f_q))mstore(0x2f40, mulmod(mload(0x2f20), mload(0x1020), f_q))mstore(0x2f60, addmod(mload(0x2e00), sub(f_q, mload(0x2f40)), f_q))mstore(0x2f80, mulmod(mload(0x2f60), mload(0x24c0), f_q))mstore(0x2fa0, addmod(mload(0x2d00), mload(0x2f80), f_q))mstore(0x2fc0, mulmod(mload(0x780), mload(0x2fa0), f_q))mstore(0x2fe0, mulmod(mload(0xea0), mload(0x480), f_q))mstore(0x3000, addmod(mload(0x1be0), mload(0x2fe0), f_q))mstore(0x3020, addmod(mload(0x3000), mload(0x4e0), f_q))mstore(0x3040, mulmod(mload(0xec0), mload(0x480), f_q))mstore(0x3060, addmod(mload(0xc00), mload(0x3040), f_q))mstore(0x3080, addmod(mload(0x3060), mload(0x4e0), f_q))mstore(0x30a0, mulmod(mload(0x3080), mload(0x3020), f_q))mstore(0x30c0, mulmod(mload(0x30a0), mload(0x10a0), f_q))mstore(0x30e0, mulmod(8343274462013750416000956870576256937330525306073862550863787263304548803879, mload(0x480), f_q))mstore(0x3100, mulmod(mload(0x8a0), mload(0x30e0), f_q))mstore(0x3120, addmod(mload(0x1be0), mload(0x3100), f_q))mstore(0x3140, addmod(mload(0x3120), mload(0x4e0), f_q))mstore(0x3160, mulmod(20928372310071051017340352686640453451620397549739756658327314209761852842004, mload(0x480), f_q))mstore(0x3180, mulmod(mload(0x8a0), mload(0x3160), f_q))mstore(0x31a0, addmod(mload(0xc00), mload(0x3180), f_q))mstore(0x31c0, addmod(mload(0x31a0), mload(0x4e0), f_q))mstore(0x31e0, mulmod(mload(0x31c0), mload(0x3140), f_q))mstore(0x3200, mulmod(mload(0x31e0), mload(0x1080), f_q))mstore(0x3220, addmod(mload(0x30c0), sub(f_q, mload(0x3200)), f_q))mstore(0x3240, mulmod(mload(0x3220), mload(0x24c0), f_q))mstore(0x3260, addmod(mload(0x2fc0), mload(0x3240), f_q))mstore(0x3280, mulmod(mload(0x780), mload(0x3260), f_q))mstore(0x32a0, mulmod(mload(0xee0), mload(0x480), f_q))mstore(0x32c0, addmod(mload(0xc20), mload(0x32a0), f_q))mstore(0x32e0, addmod(mload(0x32c0), mload(0x4e0), f_q))mstore(0x3300, mulmod(mload(0x32e0), mload(0x1100), f_q))mstore(0x3320, mulmod(15845651941796975697993789271154426079663327509658641548785793587449119139335, mload(0x480), f_q))mstore(0x3340, mulmod(mload(0x8a0), mload(0x3320), f_q))mstore(0x3360, addmod(mload(0xc20), mload(0x3340), f_q))mstore(0x3380, addmod(mload(0x3360), mload(0x4e0), f_q))mstore(0x33a0, mulmod(mload(0x3380), mload(0x10e0), f_q))mstore(0x33c0, addmod(mload(0x3300), sub(f_q, mload(0x33a0)), f_q))mstore(0x33e0, mulmod(mload(0x33c0), mload(0x24c0), f_q))mstore(0x3400, addmod(mload(0x3280), mload(0x33e0), f_q))mstore(0x3420, mulmod(mload(0x780), mload(0x3400), f_q))mstore(0x3440, addmod(1, sub(f_q, mload(0x1120)), f_q))mstore(0x3460, mulmod(mload(0x3440), mload(0x1bc0), f_q))mstore(0x3480, addmod(mload(0x3420), mload(0x3460), f_q))mstore(0x34a0, mulmod(mload(0x780), mload(0x3480), f_q))mstore(0x34c0, mulmod(mload(0x1120), mload(0x1120), f_q))mstore(0x34e0, addmod(mload(0x34c0), sub(f_q, mload(0x1120)), f_q))mstore(0x3500, mulmod(mload(0x34e0), mload(0x1ae0), f_q))mstore(0x3520, addmod(mload(0x34a0), mload(0x3500), f_q))mstore(0x3540, mulmod(mload(0x780), mload(0x3520), f_q))mstore(0x3560, addmod(mload(0x1160), mload(0x480), f_q))mstore(0x3580, mulmod(mload(0x3560), mload(0x1140), f_q))mstore(0x35a0, addmod(mload(0x11a0), mload(0x4e0), f_q))mstore(0x35c0, mulmod(mload(0x35a0), mload(0x3580), f_q))mstore(0x35e0, addmod(mload(0xbe0), mload(0x480), f_q))mstore(0x3600, mulmod(mload(0x35e0), mload(0x1120), f_q))mstore(0x3620, addmod(mload(0xc60), mload(0x4e0), f_q))mstore(0x3640, mulmod(mload(0x3620), mload(0x3600), f_q))mstore(0x3660, addmod(mload(0x35c0), sub(f_q, mload(0x3640)), f_q))mstore(0x3680, mulmod(mload(0x3660), mload(0x24c0), f_q))mstore(0x36a0, addmod(mload(0x3540), mload(0x3680), f_q))mstore(0x36c0, mulmod(mload(0x780), mload(0x36a0), f_q))mstore(0x36e0, addmod(mload(0x1160), sub(f_q, mload(0x11a0)), f_q))mstore(0x3700, mulmod(mload(0x36e0), mload(0x1bc0), f_q))mstore(0x3720, addmod(mload(0x36c0), mload(0x3700), f_q))mstore(0x3740, mulmod(mload(0x780), mload(0x3720), f_q))mstore(0x3760, mulmod(mload(0x36e0), mload(0x24c0), f_q))mstore(0x3780, addmod(mload(0x1160), sub(f_q, mload(0x1180)), f_q))mstore(0x37a0, mulmod(mload(0x3780), mload(0x3760), f_q))mstore(0x37c0, addmod(mload(0x3740), mload(0x37a0), f_q))mstore(0x37e0, mulmod(mload(0x780), mload(0x37c0), f_q))mstore(0x3800, addmod(1, sub(f_q, mload(0x11c0)), f_q))mstore(0x3820, mulmod(mload(0x3800), mload(0x1bc0), f_q))mstore(0x3840, addmod(mload(0x37e0), mload(0x3820), f_q))mstore(0x3860, mulmod(mload(0x780), mload(0x3840), f_q))mstore(0x3880, mulmod(mload(0x11c0), mload(0x11c0), f_q))mstore(0x38a0, addmod(mload(0x3880), sub(f_q, mload(0x11c0)), f_q))mstore(0x38c0, mulmod(mload(0x38a0), mload(0x1ae0), f_q))mstore(0x38e0, addmod(mload(0x3860), mload(0x38c0), f_q))mstore(0x3900, mulmod(mload(0x780), mload(0x38e0), f_q))mstore(0x3920, addmod(mload(0x1200), mload(0x480), f_q))mstore(0x3940, mulmod(mload(0x3920), mload(0x11e0), f_q))mstore(0x3960, addmod(mload(0x1240), mload(0x4e0), f_q))mstore(0x3980, mulmod(mload(0x3960), mload(0x3940), f_q))mstore(0x39a0, mulmod(mload(0x320), mload(0xc00), f_q))mstore(0x39c0, addmod(mload(0x39a0), mload(0xc20), f_q))mstore(0x39e0, addmod(mload(0x39c0), mload(0x480), f_q))mstore(0x3a00, mulmod(mload(0x39e0), mload(0x11c0), f_q))mstore(0x3a20, mulmod(mload(0x320), mload(0xc80), f_q))mstore(0x3a40, addmod(mload(0x3a20), mload(0xca0), f_q))mstore(0x3a60, addmod(mload(0x3a40), mload(0x4e0), f_q))mstore(0x3a80, mulmod(mload(0x3a60), mload(0x3a00), f_q))mstore(0x3aa0, addmod(mload(0x3980), sub(f_q, mload(0x3a80)), f_q))mstore(0x3ac0, mulmod(mload(0x3aa0), mload(0x24c0), f_q))mstore(0x3ae0, addmod(mload(0x3900), mload(0x3ac0), f_q))mstore(0x3b00, mulmod(mload(0x780), mload(0x3ae0), f_q))mstore(0x3b20, addmod(mload(0x1200), sub(f_q, mload(0x1240)), f_q))mstore(0x3b40, mulmod(mload(0x3b20), mload(0x1bc0), f_q))mstore(0x3b60, addmod(mload(0x3b00), mload(0x3b40), f_q))mstore(0x3b80, mulmod(mload(0x780), mload(0x3b60), f_q))mstore(0x3ba0, mulmod(mload(0x3b20), mload(0x24c0), f_q))mstore(0x3bc0, addmod(mload(0x1200), sub(f_q, mload(0x1220)), f_q))mstore(0x3be0, mulmod(mload(0x3bc0), mload(0x3ba0), f_q))mstore(0x3c00, addmod(mload(0x3b80), mload(0x3be0), f_q))mstore(0x3c20, mulmod(mload(0x16a0), mload(0x16a0), f_q))mstore(0x3c40, mulmod(mload(0x3c20), mload(0x16a0), f_q))mstore(0x3c60, mulmod(1, mload(0x16a0), f_q))mstore(0x3c80, mulmod(1, mload(0x3c20), f_q))mstore(0x3ca0, mulmod(mload(0x3c00), mload(0x16c0), f_q))mstore(0x3cc0, mulmod(mload(0x1400), mload(0x8a0), f_q))mstore(0x3ce0, mulmod(mload(0x3cc0), mload(0x8a0), f_q))mstore(0x3d00, mulmod(mload(0x8a0), 13225785879531581993054172815365636627224369411478295502904397545373139154045, f_q))mstore(0x3d20, addmod(mload(0x1380), sub(f_q, mload(0x3d00)), f_q))mstore(0x3d40, mulmod(mload(0x8a0), 8734126352828345679573237859165904705806588461301144420590422589042130041188, f_q))mstore(0x3d60, addmod(mload(0x1380), sub(f_q, mload(0x3d40)), f_q))mstore(0x3d80, mulmod(mload(0x8a0), 1, f_q))mstore(0x3da0, addmod(mload(0x1380), sub(f_q, mload(0x3d80)), f_q))mstore(0x3dc0, mulmod(mload(0x8a0), 11211301017135681023579411905410872569206244553457844956874280139879520583390, f_q))mstore(0x3de0, addmod(mload(0x1380), sub(f_q, mload(0x3dc0)), f_q))mstore(0x3e00, mulmod(mload(0x8a0), 1426404432721484388505361748317961535523355871255605456897797744433766488507, f_q))mstore(0x3e20, addmod(mload(0x1380), sub(f_q, mload(0x3e00)), f_q))mstore(0x3e40, mulmod(mload(0x8a0), 12619617507853212586156872920672483948819476989779550311307282715684870266992, f_q))mstore(0x3e60, addmod(mload(0x1380), sub(f_q, mload(0x3e40)), f_q))mstore(0x3e80, mulmod(3544324119167359571073009690693121464267965232733679586767649244433889388945, mload(0x3cc0), f_q))mstore(0x3ea0, mulmod(mload(0x3e80), 1, f_q)){ let result := mulmod(mload(0x1380), mload(0x3e80), f_q)result := addmod(mulmod(mload(0x8a0), sub(f_q, mload(0x3ea0)), f_q), result, f_q)mstore(0x3ec0, result) }mstore(0x3ee0, mulmod(3860370625838117017501327045244227871206764201116468958063324100051382735289, mload(0x3cc0), f_q))mstore(0x3f00, mulmod(mload(0x3ee0), 11211301017135681023579411905410872569206244553457844956874280139879520583390, f_q)){ let result := mulmod(mload(0x1380), mload(0x3ee0), f_q)result := addmod(mulmod(mload(0x8a0), sub(f_q, mload(0x3f00)), f_q), result, f_q)mstore(0x3f20, result) }mstore(0x3f40, mulmod(21616901807277407275624036604424346159916096890712898844034238973395610537327, mload(0x3cc0), f_q))mstore(0x3f60, mulmod(mload(0x3f40), 1426404432721484388505361748317961535523355871255605456897797744433766488507, f_q)){ let result := mulmod(mload(0x1380), mload(0x3f40), f_q)result := addmod(mulmod(mload(0x8a0), sub(f_q, mload(0x3f60)), f_q), result, f_q)mstore(0x3f80, result) }mstore(0x3fa0, mulmod(3209408481237076479025468386201293941554240476766691830436732310949352383503, mload(0x3cc0), f_q))mstore(0x3fc0, mulmod(mload(0x3fa0), 12619617507853212586156872920672483948819476989779550311307282715684870266992, f_q)){ let result := mulmod(mload(0x1380), mload(0x3fa0), f_q)result := addmod(mulmod(mload(0x8a0), sub(f_q, mload(0x3fc0)), f_q), result, f_q)mstore(0x3fe0, result) }mstore(0x4000, mulmod(1, mload(0x3da0), f_q))mstore(0x4020, mulmod(mload(0x4000), mload(0x3de0), f_q))mstore(0x4040, mulmod(mload(0x4020), mload(0x3e20), f_q))mstore(0x4060, mulmod(mload(0x4040), mload(0x3e60), f_q)){ let result := mulmod(mload(0x1380), 1, f_q)result := addmod(mulmod(mload(0x8a0), 21888242871839275222246405745257275088548364400416034343698204186575808495616, f_q), result, f_q)mstore(0x4080, result) }mstore(0x40a0, mulmod(8390819244605639573390577733158868133682115698337564550620146375401109684432, mload(0x1400), f_q))mstore(0x40c0, mulmod(mload(0x40a0), 1, f_q)){ let result := mulmod(mload(0x1380), mload(0x40a0), f_q)result := addmod(mulmod(mload(0x8a0), sub(f_q, mload(0x40c0)), f_q), result, f_q)mstore(0x40e0, result) }mstore(0x4100, mulmod(14389468897523033212448771694851898440525479866834419679925499462425232628530, mload(0x1400), f_q))mstore(0x4120, mulmod(mload(0x4100), 11211301017135681023579411905410872569206244553457844956874280139879520583390, f_q)){ let result := mulmod(mload(0x1380), mload(0x4100), f_q)result := addmod(mulmod(mload(0x8a0), sub(f_q, mload(0x4120)), f_q), result, f_q)mstore(0x4140, result) }mstore(0x4160, mulmod(8021781111580269725587432039983408559403601261632071736490564397134126857583, mload(0x1400), f_q))mstore(0x4180, mulmod(mload(0x4160), 13225785879531581993054172815365636627224369411478295502904397545373139154045, f_q)){ let result := mulmod(mload(0x1380), mload(0x4160), f_q)result := addmod(mulmod(mload(0x8a0), sub(f_q, mload(0x4180)), f_q), result, f_q)mstore(0x41a0, result) }mstore(0x41c0, mulmod(mload(0x4020), mload(0x3d20), f_q))mstore(0x41e0, mulmod(10676941854703594198666993839846402519342119846958189386823924046696287912228, mload(0x8a0), f_q))mstore(0x4200, mulmod(mload(0x41e0), 1, f_q)){ let result := mulmod(mload(0x1380), mload(0x41e0), f_q)result := addmod(mulmod(mload(0x8a0), sub(f_q, mload(0x4200)), f_q), result, f_q)mstore(0x4220, result) }mstore(0x4240, mulmod(11211301017135681023579411905410872569206244553457844956874280139879520583389, mload(0x8a0), f_q))mstore(0x4260, mulmod(mload(0x4240), 11211301017135681023579411905410872569206244553457844956874280139879520583390, f_q)){ let result := mulmod(mload(0x1380), mload(0x4240), f_q)result := addmod(mulmod(mload(0x8a0), sub(f_q, mload(0x4260)), f_q), result, f_q)mstore(0x4280, result) }mstore(0x42a0, mulmod(13154116519010929542673167886091370382741775939114889923107781597533678454430, mload(0x8a0), f_q))mstore(0x42c0, mulmod(mload(0x42a0), 1, f_q)){ let result := mulmod(mload(0x1380), mload(0x42a0), f_q)result := addmod(mulmod(mload(0x8a0), sub(f_q, mload(0x42c0)), f_q), result, f_q)mstore(0x42e0, result) }mstore(0x4300, mulmod(8734126352828345679573237859165904705806588461301144420590422589042130041187, mload(0x8a0), f_q))mstore(0x4320, mulmod(mload(0x4300), 8734126352828345679573237859165904705806588461301144420590422589042130041188, f_q)){ let result := mulmod(mload(0x1380), mload(0x4300), f_q)result := addmod(mulmod(mload(0x8a0), sub(f_q, mload(0x4320)), f_q), result, f_q)mstore(0x4340, result) }mstore(0x4360, mulmod(mload(0x4000), mload(0x3d60), f_q)){ let prod := mload(0x3ec0) prod := mulmod(mload(0x3f20), prod, f_q) mstore(0x4380, prod) prod := mulmod(mload(0x3f80), prod, f_q) mstore(0x43a0, prod) prod := mulmod(mload(0x3fe0), prod, f_q) mstore(0x43c0, prod) prod := mulmod(mload(0x4080), prod, f_q) mstore(0x43e0, prod) prod := mulmod(mload(0x4000), prod, f_q) mstore(0x4400, prod) prod := mulmod(mload(0x40e0), prod, f_q) mstore(0x4420, prod) prod := mulmod(mload(0x4140), prod, f_q) mstore(0x4440, prod) prod := mulmod(mload(0x41a0), prod, f_q) mstore(0x4460, prod) prod := mulmod(mload(0x41c0), prod, f_q) mstore(0x4480, prod) prod := mulmod(mload(0x4220), prod, f_q) mstore(0x44a0, prod) prod := mulmod(mload(0x4280), prod, f_q) mstore(0x44c0, prod) prod := mulmod(mload(0x4020), prod, f_q) mstore(0x44e0, prod) prod := mulmod(mload(0x42e0), prod, f_q) mstore(0x4500, prod) prod := mulmod(mload(0x4340), prod, f_q) mstore(0x4520, prod) prod := mulmod(mload(0x4360), prod, f_q) mstore(0x4540, prod) }mstore(0x4580, 32)mstore(0x45a0, 32)mstore(0x45c0, 32)mstore(0x45e0, mload(0x4540))mstore(0x4600, 21888242871839275222246405745257275088548364400416034343698204186575808495615)mstore(0x4620, 21888242871839275222246405745257275088548364400416034343698204186575808495617)success := and(eq(staticcall(gas(), 0x5, 0x4580, 0xc0, 0x4560, 0x20), 1), success){ let inv := mload(0x4560) let v v := mload(0x4360) mstore(0x4360, mulmod(mload(0x4520), inv, f_q)) inv := mulmod(v, inv, f_q) v := mload(0x4340) mstore(0x4340, mulmod(mload(0x4500), inv, f_q)) inv := mulmod(v, inv, f_q) v := mload(0x42e0) mstore(0x42e0, mulmod(mload(0x44e0), inv, f_q)) inv := mulmod(v, inv, f_q) v := mload(0x4020) mstore(0x4020, mulmod(mload(0x44c0), inv, f_q)) inv := mulmod(v, inv, f_q) v := mload(0x4280) mstore(0x4280, mulmod(mload(0x44a0), inv, f_q)) inv := mulmod(v, inv, f_q) v := mload(0x4220) mstore(0x4220, mulmod(mload(0x4480), inv, f_q)) inv := mulmod(v, inv, f_q) v := mload(0x41c0) mstore(0x41c0, mulmod(mload(0x4460), inv, f_q)) inv := mulmod(v, inv, f_q) v := mload(0x41a0) mstore(0x41a0, mulmod(mload(0x4440), inv, f_q)) inv := mulmod(v, inv, f_q) v := mload(0x4140) mstore(0x4140, mulmod(mload(0x4420), inv, f_q)) inv := mulmod(v, inv, f_q) v := mload(0x40e0) mstore(0x40e0, mulmod(mload(0x4400), inv, f_q)) inv := mulmod(v, inv, f_q) v := mload(0x4000) mstore(0x4000, mulmod(mload(0x43e0), inv, f_q)) inv := mulmod(v, inv, f_q) v := mload(0x4080) mstore(0x4080, mulmod(mload(0x43c0), inv, f_q)) inv := mulmod(v, inv, f_q) v := mload(0x3fe0) mstore(0x3fe0, mulmod(mload(0x43a0), inv, f_q)) inv := mulmod(v, inv, f_q) v := mload(0x3f80) mstore(0x3f80, mulmod(mload(0x4380), inv, f_q)) inv := mulmod(v, inv, f_q) v := mload(0x3f20) mstore(0x3f20, mulmod(mload(0x3ec0), inv, f_q)) inv := mulmod(v, inv, f_q) mstore(0x3ec0, inv) }{ let result := mload(0x3ec0)result := addmod(mload(0x3f20), result, f_q)result := addmod(mload(0x3f80), result, f_q)result := addmod(mload(0x3fe0), result, f_q)mstore(0x4640, result) }mstore(0x4660, mulmod(mload(0x4060), mload(0x4000), f_q)){ let result := mload(0x4080)mstore(0x4680, result) }mstore(0x46a0, mulmod(mload(0x4060), mload(0x41c0), f_q)){ let result := mload(0x40e0)result := addmod(mload(0x4140), result, f_q)result := addmod(mload(0x41a0), result, f_q)mstore(0x46c0, result) }mstore(0x46e0, mulmod(mload(0x4060), mload(0x4020), f_q)){ let result := mload(0x4220)result := addmod(mload(0x4280), result, f_q)mstore(0x4700, result) }mstore(0x4720, mulmod(mload(0x4060), mload(0x4360), f_q)){ let result := mload(0x42e0)result := addmod(mload(0x4340), result, f_q)mstore(0x4740, result) }{ let prod := mload(0x4640) prod := mulmod(mload(0x4680), prod, f_q) mstore(0x4760, prod) prod := mulmod(mload(0x46c0), prod, f_q) mstore(0x4780, prod) prod := mulmod(mload(0x4700), prod, f_q) mstore(0x47a0, prod) prod := mulmod(mload(0x4740), prod, f_q) mstore(0x47c0, prod) }mstore(0x4800, 32)mstore(0x4820, 32)mstore(0x4840, 32)mstore(0x4860, mload(0x47c0))mstore(0x4880, 21888242871839275222246405745257275088548364400416034343698204186575808495615)mstore(0x48a0, 21888242871839275222246405745257275088548364400416034343698204186575808495617)success := and(eq(staticcall(gas(), 0x5, 0x4800, 0xc0, 0x47e0, 0x20), 1), success){ let inv := mload(0x47e0) let v v := mload(0x4740) mstore(0x4740, mulmod(mload(0x47a0), inv, f_q)) inv := mulmod(v, inv, f_q) v := mload(0x4700) mstore(0x4700, mulmod(mload(0x4780), inv, f_q)) inv := mulmod(v, inv, f_q) v := mload(0x46c0) mstore(0x46c0, mulmod(mload(0x4760), inv, f_q)) inv := mulmod(v, inv, f_q) v := mload(0x4680) mstore(0x4680, mulmod(mload(0x4640), inv, f_q)) inv := mulmod(v, inv, f_q) mstore(0x4640, inv) }mstore(0x48c0, mulmod(mload(0x4660), mload(0x4680), f_q))mstore(0x48e0, mulmod(mload(0x46a0), mload(0x46c0), f_q))mstore(0x4900, mulmod(mload(0x46e0), mload(0x4700), f_q))mstore(0x4920, mulmod(mload(0x4720), mload(0x4740), f_q))mstore(0x4940, mulmod(mload(0x1280), mload(0x1280), f_q))mstore(0x4960, mulmod(mload(0x4940), mload(0x1280), f_q))mstore(0x4980, mulmod(mload(0x4960), mload(0x1280), f_q))mstore(0x49a0, mulmod(mload(0x4980), mload(0x1280), f_q))mstore(0x49c0, mulmod(mload(0x49a0), mload(0x1280), f_q))mstore(0x49e0, mulmod(mload(0x49c0), mload(0x1280), f_q))mstore(0x4a00, mulmod(mload(0x49e0), mload(0x1280), f_q))mstore(0x4a20, mulmod(mload(0x4a00), mload(0x1280), f_q))mstore(0x4a40, mulmod(mload(0x4a20), mload(0x1280), f_q))mstore(0x4a60, mulmod(mload(0x4a40), mload(0x1280), f_q))mstore(0x4a80, mulmod(mload(0x4a60), mload(0x1280), f_q))mstore(0x4aa0, mulmod(mload(0x4a80), mload(0x1280), f_q))mstore(0x4ac0, mulmod(mload(0x4aa0), mload(0x1280), f_q))mstore(0x4ae0, mulmod(mload(0x4ac0), mload(0x1280), f_q))mstore(0x4b00, mulmod(mload(0x4ae0), mload(0x1280), f_q))mstore(0x4b20, mulmod(mload(0x4b00), mload(0x1280), f_q))mstore(0x4b40, mulmod(mload(0x4b20), mload(0x1280), f_q))mstore(0x4b60, mulmod(mload(0x4b40), mload(0x1280), f_q))mstore(0x4b80, mulmod(mload(0x4b60), mload(0x1280), f_q))mstore(0x4ba0, mulmod(mload(0x4b80), mload(0x1280), f_q))mstore(0x4bc0, mulmod(mload(0x4ba0), mload(0x1280), f_q))mstore(0x4be0, mulmod(mload(0x4bc0), mload(0x1280), f_q))mstore(0x4c00, mulmod(mload(0x4be0), mload(0x1280), f_q))mstore(0x4c20, mulmod(mload(0x4c00), mload(0x1280), f_q))mstore(0x4c40, mulmod(mload(0x4c20), mload(0x1280), f_q))mstore(0x4c60, mulmod(mload(0x4c40), mload(0x1280), f_q))mstore(0x4c80, mulmod(mload(0x4c60), mload(0x1280), f_q))mstore(0x4ca0, mulmod(mload(0x12e0), mload(0x12e0), f_q))mstore(0x4cc0, mulmod(mload(0x4ca0), mload(0x12e0), f_q))mstore(0x4ce0, mulmod(mload(0x4cc0), mload(0x12e0), f_q))mstore(0x4d00, mulmod(mload(0x4ce0), mload(0x12e0), f_q)){ let result := mulmod(mload(0x8e0), mload(0x3ec0), f_q)result := addmod(mulmod(mload(0x900), mload(0x3f20), f_q), result, f_q)result := addmod(mulmod(mload(0x920), mload(0x3f80), f_q), result, f_q)result := addmod(mulmod(mload(0x940), mload(0x3fe0), f_q), result, f_q)mstore(0x4d20, result) }mstore(0x4d40, mulmod(mload(0x4d20), mload(0x4640), f_q))mstore(0x4d60, mulmod(sub(f_q, mload(0x4d40)), 1, f_q)){ let result := mulmod(mload(0x960), mload(0x3ec0), f_q)result := addmod(mulmod(mload(0x980), mload(0x3f20), f_q), result, f_q)result := addmod(mulmod(mload(0x9a0), mload(0x3f80), f_q), result, f_q)result := addmod(mulmod(mload(0x9c0), mload(0x3fe0), f_q), result, f_q)mstore(0x4d80, result) }mstore(0x4da0, mulmod(mload(0x4d80), mload(0x4640), f_q))mstore(0x4dc0, mulmod(sub(f_q, mload(0x4da0)), mload(0x1280), f_q))mstore(0x4de0, mulmod(1, mload(0x1280), f_q))mstore(0x4e00, addmod(mload(0x4d60), mload(0x4dc0), f_q)){ let result := mulmod(mload(0x9e0), mload(0x3ec0), f_q)result := addmod(mulmod(mload(0xa00), mload(0x3f20), f_q), result, f_q)result := addmod(mulmod(mload(0xa20), mload(0x3f80), f_q), result, f_q)result := addmod(mulmod(mload(0xa40), mload(0x3fe0), f_q), result, f_q)mstore(0x4e20, result) }mstore(0x4e40, mulmod(mload(0x4e20), mload(0x4640), f_q))mstore(0x4e60, mulmod(sub(f_q, mload(0x4e40)), mload(0x4940), f_q))mstore(0x4e80, mulmod(1, mload(0x4940), f_q))mstore(0x4ea0, addmod(mload(0x4e00), mload(0x4e60), f_q)){ let result := mulmod(mload(0xa60), mload(0x3ec0), f_q)result := addmod(mulmod(mload(0xa80), mload(0x3f20), f_q), result, f_q)result := addmod(mulmod(mload(0xaa0), mload(0x3f80), f_q), result, f_q)result := addmod(mulmod(mload(0xac0), mload(0x3fe0), f_q), result, f_q)mstore(0x4ec0, result) }mstore(0x4ee0, mulmod(mload(0x4ec0), mload(0x4640), f_q))mstore(0x4f00, mulmod(sub(f_q, mload(0x4ee0)), mload(0x4960), f_q))mstore(0x4f20, mulmod(1, mload(0x4960), f_q))mstore(0x4f40, addmod(mload(0x4ea0), mload(0x4f00), f_q)){ let result := mulmod(mload(0xae0), mload(0x3ec0), f_q)result := addmod(mulmod(mload(0xb00), mload(0x3f20), f_q), result, f_q)result := addmod(mulmod(mload(0xb20), mload(0x3f80), f_q), result, f_q)result := addmod(mulmod(mload(0xb40), mload(0x3fe0), f_q), result, f_q)mstore(0x4f60, result) }mstore(0x4f80, mulmod(mload(0x4f60), mload(0x4640), f_q))mstore(0x4fa0, mulmod(sub(f_q, mload(0x4f80)), mload(0x4980), f_q))mstore(0x4fc0, mulmod(1, mload(0x4980), f_q))mstore(0x4fe0, addmod(mload(0x4f40), mload(0x4fa0), f_q)){ let result := mulmod(mload(0xb60), mload(0x3ec0), f_q)result := addmod(mulmod(mload(0xb80), mload(0x3f20), f_q), result, f_q)result := addmod(mulmod(mload(0xba0), mload(0x3f80), f_q), result, f_q)result := addmod(mulmod(mload(0xbc0), mload(0x3fe0), f_q), result, f_q)mstore(0x5000, result) }mstore(0x5020, mulmod(mload(0x5000), mload(0x4640), f_q))mstore(0x5040, mulmod(sub(f_q, mload(0x5020)), mload(0x49a0), f_q))mstore(0x5060, mulmod(1, mload(0x49a0), f_q))mstore(0x5080, addmod(mload(0x4fe0), mload(0x5040), f_q))mstore(0x50a0, mulmod(mload(0x5080), 1, f_q))mstore(0x50c0, mulmod(mload(0x4de0), 1, f_q))mstore(0x50e0, mulmod(mload(0x4e80), 1, f_q))mstore(0x5100, mulmod(mload(0x4f20), 1, f_q))mstore(0x5120, mulmod(mload(0x4fc0), 1, f_q))mstore(0x5140, mulmod(mload(0x5060), 1, f_q))mstore(0x5160, mulmod(1, mload(0x4660), f_q)){ let result := mulmod(mload(0xbe0), mload(0x4080), f_q)mstore(0x5180, result) }mstore(0x51a0, mulmod(mload(0x5180), mload(0x48c0), f_q))mstore(0x51c0, mulmod(sub(f_q, mload(0x51a0)), 1, f_q))mstore(0x51e0, mulmod(mload(0x5160), 1, f_q)){ let result := mulmod(mload(0xc00), mload(0x4080), f_q)mstore(0x5200, result) }mstore(0x5220, mulmod(mload(0x5200), mload(0x48c0), f_q))mstore(0x5240, mulmod(sub(f_q, mload(0x5220)), mload(0x1280), f_q))mstore(0x5260, mulmod(mload(0x5160), mload(0x1280), f_q))mstore(0x5280, addmod(mload(0x51c0), mload(0x5240), f_q)){ let result := mulmod(mload(0xc20), mload(0x4080), f_q)mstore(0x52a0, result) }mstore(0x52c0, mulmod(mload(0x52a0), mload(0x48c0), f_q))mstore(0x52e0, mulmod(sub(f_q, mload(0x52c0)), mload(0x4940), f_q))mstore(0x5300, mulmod(mload(0x5160), mload(0x4940), f_q))mstore(0x5320, addmod(mload(0x5280), mload(0x52e0), f_q)){ let result := mulmod(mload(0x11a0), mload(0x4080), f_q)mstore(0x5340, result) }mstore(0x5360, mulmod(mload(0x5340), mload(0x48c0), f_q))mstore(0x5380, mulmod(sub(f_q, mload(0x5360)), mload(0x4960), f_q))mstore(0x53a0, mulmod(mload(0x5160), mload(0x4960), f_q))mstore(0x53c0, addmod(mload(0x5320), mload(0x5380), f_q)){ let result := mulmod(mload(0x1240), mload(0x4080), f_q)mstore(0x53e0, result) }mstore(0x5400, mulmod(mload(0x53e0), mload(0x48c0), f_q))mstore(0x5420, mulmod(sub(f_q, mload(0x5400)), mload(0x4980), f_q))mstore(0x5440, mulmod(mload(0x5160), mload(0x4980), f_q))mstore(0x5460, addmod(mload(0x53c0), mload(0x5420), f_q)){ let result := mulmod(mload(0xc40), mload(0x4080), f_q)mstore(0x5480, result) }mstore(0x54a0, mulmod(mload(0x5480), mload(0x48c0), f_q))mstore(0x54c0, mulmod(sub(f_q, mload(0x54a0)), mload(0x49a0), f_q))mstore(0x54e0, mulmod(mload(0x5160), mload(0x49a0), f_q))mstore(0x5500, addmod(mload(0x5460), mload(0x54c0), f_q)){ let result := mulmod(mload(0xc60), mload(0x4080), f_q)mstore(0x5520, result) }mstore(0x5540, mulmod(mload(0x5520), mload(0x48c0), f_q))mstore(0x5560, mulmod(sub(f_q, mload(0x5540)), mload(0x49c0), f_q))mstore(0x5580, mulmod(mload(0x5160), mload(0x49c0), f_q))mstore(0x55a0, addmod(mload(0x5500), mload(0x5560), f_q)){ let result := mulmod(mload(0xc80), mload(0x4080), f_q)mstore(0x55c0, result) }mstore(0x55e0, mulmod(mload(0x55c0), mload(0x48c0), f_q))mstore(0x5600, mulmod(sub(f_q, mload(0x55e0)), mload(0x49e0), f_q))mstore(0x5620, mulmod(mload(0x5160), mload(0x49e0), f_q))mstore(0x5640, addmod(mload(0x55a0), mload(0x5600), f_q))mstore(0x5660, addmod(mload(0x5580), mload(0x5620), f_q)){ let result := mulmod(mload(0xca0), mload(0x4080), f_q)mstore(0x5680, result) }mstore(0x56a0, mulmod(mload(0x5680), mload(0x48c0), f_q))mstore(0x56c0, mulmod(sub(f_q, mload(0x56a0)), mload(0x4a00), f_q))mstore(0x56e0, mulmod(mload(0x5160), mload(0x4a00), f_q))mstore(0x5700, addmod(mload(0x5640), mload(0x56c0), f_q)){ let result := mulmod(mload(0xcc0), mload(0x4080), f_q)mstore(0x5720, result) }mstore(0x5740, mulmod(mload(0x5720), mload(0x48c0), f_q))mstore(0x5760, mulmod(sub(f_q, mload(0x5740)), mload(0x4a20), f_q))mstore(0x5780, mulmod(mload(0x5160), mload(0x4a20), f_q))mstore(0x57a0, addmod(mload(0x5700), mload(0x5760), f_q)){ let result := mulmod(mload(0xce0), mload(0x4080), f_q)mstore(0x57c0, result) }mstore(0x57e0, mulmod(mload(0x57c0), mload(0x48c0), f_q))mstore(0x5800, mulmod(sub(f_q, mload(0x57e0)), mload(0x4a40), f_q))mstore(0x5820, mulmod(mload(0x5160), mload(0x4a40), f_q))mstore(0x5840, addmod(mload(0x57a0), mload(0x5800), f_q)){ let result := mulmod(mload(0xd00), mload(0x4080), f_q)mstore(0x5860, result) }mstore(0x5880, mulmod(mload(0x5860), mload(0x48c0), f_q))mstore(0x58a0, mulmod(sub(f_q, mload(0x5880)), mload(0x4a60), f_q))mstore(0x58c0, mulmod(mload(0x5160), mload(0x4a60), f_q))mstore(0x58e0, addmod(mload(0x5840), mload(0x58a0), f_q)){ let result := mulmod(mload(0xd20), mload(0x4080), f_q)mstore(0x5900, result) }mstore(0x5920, mulmod(mload(0x5900), mload(0x48c0), f_q))mstore(0x5940, mulmod(sub(f_q, mload(0x5920)), mload(0x4a80), f_q))mstore(0x5960, mulmod(mload(0x5160), mload(0x4a80), f_q))mstore(0x5980, addmod(mload(0x58e0), mload(0x5940), f_q)){ let result := mulmod(mload(0xd40), mload(0x4080), f_q)mstore(0x59a0, result) }mstore(0x59c0, mulmod(mload(0x59a0), mload(0x48c0), f_q))mstore(0x59e0, mulmod(sub(f_q, mload(0x59c0)), mload(0x4aa0), f_q))mstore(0x5a00, mulmod(mload(0x5160), mload(0x4aa0), f_q))mstore(0x5a20, addmod(mload(0x5980), mload(0x59e0), f_q)){ let result := mulmod(mload(0xd60), mload(0x4080), f_q)mstore(0x5a40, result) }mstore(0x5a60, mulmod(mload(0x5a40), mload(0x48c0), f_q))mstore(0x5a80, mulmod(sub(f_q, mload(0x5a60)), mload(0x4ac0), f_q))mstore(0x5aa0, mulmod(mload(0x5160), mload(0x4ac0), f_q))mstore(0x5ac0, addmod(mload(0x5a20), mload(0x5a80), f_q)){ let result := mulmod(mload(0xda0), mload(0x4080), f_q)mstore(0x5ae0, result) }mstore(0x5b00, mulmod(mload(0x5ae0), mload(0x48c0), f_q))mstore(0x5b20, mulmod(sub(f_q, mload(0x5b00)), mload(0x4ae0), f_q))mstore(0x5b40, mulmod(mload(0x5160), mload(0x4ae0), f_q))mstore(0x5b60, addmod(mload(0x5ac0), mload(0x5b20), f_q)){ let result := mulmod(mload(0xdc0), mload(0x4080), f_q)mstore(0x5b80, result) }mstore(0x5ba0, mulmod(mload(0x5b80), mload(0x48c0), f_q))mstore(0x5bc0, mulmod(sub(f_q, mload(0x5ba0)), mload(0x4b00), f_q))mstore(0x5be0, mulmod(mload(0x5160), mload(0x4b00), f_q))mstore(0x5c00, addmod(mload(0x5b60), mload(0x5bc0), f_q)){ let result := mulmod(mload(0xde0), mload(0x4080), f_q)mstore(0x5c20, result) }mstore(0x5c40, mulmod(mload(0x5c20), mload(0x48c0), f_q))mstore(0x5c60, mulmod(sub(f_q, mload(0x5c40)), mload(0x4b20), f_q))mstore(0x5c80, mulmod(mload(0x5160), mload(0x4b20), f_q))mstore(0x5ca0, addmod(mload(0x5c00), mload(0x5c60), f_q)){ let result := mulmod(mload(0xe00), mload(0x4080), f_q)mstore(0x5cc0, result) }mstore(0x5ce0, mulmod(mload(0x5cc0), mload(0x48c0), f_q))mstore(0x5d00, mulmod(sub(f_q, mload(0x5ce0)), mload(0x4b40), f_q))mstore(0x5d20, mulmod(mload(0x5160), mload(0x4b40), f_q))mstore(0x5d40, addmod(mload(0x5ca0), mload(0x5d00), f_q)){ let result := mulmod(mload(0xe20), mload(0x4080), f_q)mstore(0x5d60, result) }mstore(0x5d80, mulmod(mload(0x5d60), mload(0x48c0), f_q))mstore(0x5da0, mulmod(sub(f_q, mload(0x5d80)), mload(0x4b60), f_q))mstore(0x5dc0, mulmod(mload(0x5160), mload(0x4b60), f_q))mstore(0x5de0, addmod(mload(0x5d40), mload(0x5da0), f_q)){ let result := mulmod(mload(0xe40), mload(0x4080), f_q)mstore(0x5e00, result) }mstore(0x5e20, mulmod(mload(0x5e00), mload(0x48c0), f_q))mstore(0x5e40, mulmod(sub(f_q, mload(0x5e20)), mload(0x4b80), f_q))mstore(0x5e60, mulmod(mload(0x5160), mload(0x4b80), f_q))mstore(0x5e80, addmod(mload(0x5de0), mload(0x5e40), f_q)){ let result := mulmod(mload(0xe60), mload(0x4080), f_q)mstore(0x5ea0, result) }mstore(0x5ec0, mulmod(mload(0x5ea0), mload(0x48c0), f_q))mstore(0x5ee0, mulmod(sub(f_q, mload(0x5ec0)), mload(0x4ba0), f_q))mstore(0x5f00, mulmod(mload(0x5160), mload(0x4ba0), f_q))mstore(0x5f20, addmod(mload(0x5e80), mload(0x5ee0), f_q)){ let result := mulmod(mload(0xe80), mload(0x4080), f_q)mstore(0x5f40, result) }mstore(0x5f60, mulmod(mload(0x5f40), mload(0x48c0), f_q))mstore(0x5f80, mulmod(sub(f_q, mload(0x5f60)), mload(0x4bc0), f_q))mstore(0x5fa0, mulmod(mload(0x5160), mload(0x4bc0), f_q))mstore(0x5fc0, addmod(mload(0x5f20), mload(0x5f80), f_q)){ let result := mulmod(mload(0xea0), mload(0x4080), f_q)mstore(0x5fe0, result) }mstore(0x6000, mulmod(mload(0x5fe0), mload(0x48c0), f_q))mstore(0x6020, mulmod(sub(f_q, mload(0x6000)), mload(0x4be0), f_q))mstore(0x6040, mulmod(mload(0x5160), mload(0x4be0), f_q))mstore(0x6060, addmod(mload(0x5fc0), mload(0x6020), f_q)){ let result := mulmod(mload(0xec0), mload(0x4080), f_q)mstore(0x6080, result) }mstore(0x60a0, mulmod(mload(0x6080), mload(0x48c0), f_q))mstore(0x60c0, mulmod(sub(f_q, mload(0x60a0)), mload(0x4c00), f_q))mstore(0x60e0, mulmod(mload(0x5160), mload(0x4c00), f_q))mstore(0x6100, addmod(mload(0x6060), mload(0x60c0), f_q)){ let result := mulmod(mload(0xee0), mload(0x4080), f_q)mstore(0x6120, result) }mstore(0x6140, mulmod(mload(0x6120), mload(0x48c0), f_q))mstore(0x6160, mulmod(sub(f_q, mload(0x6140)), mload(0x4c20), f_q))mstore(0x6180, mulmod(mload(0x5160), mload(0x4c20), f_q))mstore(0x61a0, addmod(mload(0x6100), mload(0x6160), f_q))mstore(0x61c0, mulmod(mload(0x3c60), mload(0x4660), f_q))mstore(0x61e0, mulmod(mload(0x3c80), mload(0x4660), f_q)){ let result := mulmod(mload(0x3ca0), mload(0x4080), f_q)mstore(0x6200, result) }mstore(0x6220, mulmod(mload(0x6200), mload(0x48c0), f_q))mstore(0x6240, mulmod(sub(f_q, mload(0x6220)), mload(0x4c40), f_q))mstore(0x6260, mulmod(mload(0x5160), mload(0x4c40), f_q))mstore(0x6280, mulmod(mload(0x61c0), mload(0x4c40), f_q))mstore(0x62a0, mulmod(mload(0x61e0), mload(0x4c40), f_q))mstore(0x62c0, addmod(mload(0x61a0), mload(0x6240), f_q)){ let result := mulmod(mload(0xd80), mload(0x4080), f_q)mstore(0x62e0, result) }mstore(0x6300, mulmod(mload(0x62e0), mload(0x48c0), f_q))mstore(0x6320, mulmod(sub(f_q, mload(0x6300)), mload(0x4c60), f_q))mstore(0x6340, mulmod(mload(0x5160), mload(0x4c60), f_q))mstore(0x6360, addmod(mload(0x62c0), mload(0x6320), f_q))mstore(0x6380, mulmod(mload(0x6360), mload(0x12e0), f_q))mstore(0x63a0, mulmod(mload(0x51e0), mload(0x12e0), f_q))mstore(0x63c0, mulmod(mload(0x5260), mload(0x12e0), f_q))mstore(0x63e0, mulmod(mload(0x5300), mload(0x12e0), f_q))mstore(0x6400, mulmod(mload(0x53a0), mload(0x12e0), f_q))mstore(0x6420, mulmod(mload(0x5440), mload(0x12e0), f_q))mstore(0x6440, mulmod(mload(0x54e0), mload(0x12e0), f_q))mstore(0x6460, mulmod(mload(0x5660), mload(0x12e0), f_q))mstore(0x6480, mulmod(mload(0x56e0), mload(0x12e0), f_q))mstore(0x64a0, mulmod(mload(0x5780), mload(0x12e0), f_q))mstore(0x64c0, mulmod(mload(0x5820), mload(0x12e0), f_q))mstore(0x64e0, mulmod(mload(0x58c0), mload(0x12e0), f_q))mstore(0x6500, mulmod(mload(0x5960), mload(0x12e0), f_q))mstore(0x6520, mulmod(mload(0x5a00), mload(0x12e0), f_q))mstore(0x6540, mulmod(mload(0x5aa0), mload(0x12e0), f_q))mstore(0x6560, mulmod(mload(0x5b40), mload(0x12e0), f_q))mstore(0x6580, mulmod(mload(0x5be0), mload(0x12e0), f_q))mstore(0x65a0, mulmod(mload(0x5c80), mload(0x12e0), f_q))mstore(0x65c0, mulmod(mload(0x5d20), mload(0x12e0), f_q))mstore(0x65e0, mulmod(mload(0x5dc0), mload(0x12e0), f_q))mstore(0x6600, mulmod(mload(0x5e60), mload(0x12e0), f_q))mstore(0x6620, mulmod(mload(0x5f00), mload(0x12e0), f_q))mstore(0x6640, mulmod(mload(0x5fa0), mload(0x12e0), f_q))mstore(0x6660, mulmod(mload(0x6040), mload(0x12e0), f_q))mstore(0x6680, mulmod(mload(0x60e0), mload(0x12e0), f_q))mstore(0x66a0, mulmod(mload(0x6180), mload(0x12e0), f_q))mstore(0x66c0, mulmod(mload(0x6260), mload(0x12e0), f_q))mstore(0x66e0, mulmod(mload(0x6280), mload(0x12e0), f_q))mstore(0x6700, mulmod(mload(0x62a0), mload(0x12e0), f_q))mstore(0x6720, mulmod(mload(0x6340), mload(0x12e0), f_q))mstore(0x6740, addmod(mload(0x50a0), mload(0x6380), f_q))mstore(0x6760, mulmod(1, mload(0x46a0), f_q)){ let result := mulmod(mload(0xf00), mload(0x40e0), f_q)result := addmod(mulmod(mload(0xf20), mload(0x4140), f_q), result, f_q)result := addmod(mulmod(mload(0xf40), mload(0x41a0), f_q), result, f_q)mstore(0x6780, result) }mstore(0x67a0, mulmod(mload(0x6780), mload(0x48e0), f_q))mstore(0x67c0, mulmod(sub(f_q, mload(0x67a0)), 1, f_q))mstore(0x67e0, mulmod(mload(0x6760), 1, f_q)){ let result := mulmod(mload(0xf60), mload(0x40e0), f_q)result := addmod(mulmod(mload(0xf80), mload(0x4140), f_q), result, f_q)result := addmod(mulmod(mload(0xfa0), mload(0x41a0), f_q), result, f_q)mstore(0x6800, result) }mstore(0x6820, mulmod(mload(0x6800), mload(0x48e0), f_q))mstore(0x6840, mulmod(sub(f_q, mload(0x6820)), mload(0x1280), f_q))mstore(0x6860, mulmod(mload(0x6760), mload(0x1280), f_q))mstore(0x6880, addmod(mload(0x67c0), mload(0x6840), f_q)){ let result := mulmod(mload(0xfc0), mload(0x40e0), f_q)result := addmod(mulmod(mload(0xfe0), mload(0x4140), f_q), result, f_q)result := addmod(mulmod(mload(0x1000), mload(0x41a0), f_q), result, f_q)mstore(0x68a0, result) }mstore(0x68c0, mulmod(mload(0x68a0), mload(0x48e0), f_q))mstore(0x68e0, mulmod(sub(f_q, mload(0x68c0)), mload(0x4940), f_q))mstore(0x6900, mulmod(mload(0x6760), mload(0x4940), f_q))mstore(0x6920, addmod(mload(0x6880), mload(0x68e0), f_q)){ let result := mulmod(mload(0x1020), mload(0x40e0), f_q)result := addmod(mulmod(mload(0x1040), mload(0x4140), f_q), result, f_q)result := addmod(mulmod(mload(0x1060), mload(0x41a0), f_q), result, f_q)mstore(0x6940, result) }mstore(0x6960, mulmod(mload(0x6940), mload(0x48e0), f_q))mstore(0x6980, mulmod(sub(f_q, mload(0x6960)), mload(0x4960), f_q))mstore(0x69a0, mulmod(mload(0x6760), mload(0x4960), f_q))mstore(0x69c0, addmod(mload(0x6920), mload(0x6980), f_q)){ let result := mulmod(mload(0x1080), mload(0x40e0), f_q)result := addmod(mulmod(mload(0x10a0), mload(0x4140), f_q), result, f_q)result := addmod(mulmod(mload(0x10c0), mload(0x41a0), f_q), result, f_q)mstore(0x69e0, result) }mstore(0x6a00, mulmod(mload(0x69e0), mload(0x48e0), f_q))mstore(0x6a20, mulmod(sub(f_q, mload(0x6a00)), mload(0x4980), f_q))mstore(0x6a40, mulmod(mload(0x6760), mload(0x4980), f_q))mstore(0x6a60, addmod(mload(0x69c0), mload(0x6a20), f_q))mstore(0x6a80, mulmod(mload(0x6a60), mload(0x4ca0), f_q))mstore(0x6aa0, mulmod(mload(0x67e0), mload(0x4ca0), f_q))mstore(0x6ac0, mulmod(mload(0x6860), mload(0x4ca0), f_q))mstore(0x6ae0, mulmod(mload(0x6900), mload(0x4ca0), f_q))mstore(0x6b00, mulmod(mload(0x69a0), mload(0x4ca0), f_q))mstore(0x6b20, mulmod(mload(0x6a40), mload(0x4ca0), f_q))mstore(0x6b40, addmod(mload(0x6740), mload(0x6a80), f_q))mstore(0x6b60, mulmod(1, mload(0x46e0), f_q)){ let result := mulmod(mload(0x10e0), mload(0x4220), f_q)result := addmod(mulmod(mload(0x1100), mload(0x4280), f_q), result, f_q)mstore(0x6b80, result) }mstore(0x6ba0, mulmod(mload(0x6b80), mload(0x4900), f_q))mstore(0x6bc0, mulmod(sub(f_q, mload(0x6ba0)), 1, f_q))mstore(0x6be0, mulmod(mload(0x6b60), 1, f_q)){ let result := mulmod(mload(0x1120), mload(0x4220), f_q)result := addmod(mulmod(mload(0x1140), mload(0x4280), f_q), result, f_q)mstore(0x6c00, result) }mstore(0x6c20, mulmod(mload(0x6c00), mload(0x4900), f_q))mstore(0x6c40, mulmod(sub(f_q, mload(0x6c20)), mload(0x1280), f_q))mstore(0x6c60, mulmod(mload(0x6b60), mload(0x1280), f_q))mstore(0x6c80, addmod(mload(0x6bc0), mload(0x6c40), f_q)){ let result := mulmod(mload(0x11c0), mload(0x4220), f_q)result := addmod(mulmod(mload(0x11e0), mload(0x4280), f_q), result, f_q)mstore(0x6ca0, result) }mstore(0x6cc0, mulmod(mload(0x6ca0), mload(0x4900), f_q))mstore(0x6ce0, mulmod(sub(f_q, mload(0x6cc0)), mload(0x4940), f_q))mstore(0x6d00, mulmod(mload(0x6b60), mload(0x4940), f_q))mstore(0x6d20, addmod(mload(0x6c80), mload(0x6ce0), f_q))mstore(0x6d40, mulmod(mload(0x6d20), mload(0x4cc0), f_q))mstore(0x6d60, mulmod(mload(0x6be0), mload(0x4cc0), f_q))mstore(0x6d80, mulmod(mload(0x6c60), mload(0x4cc0), f_q))mstore(0x6da0, mulmod(mload(0x6d00), mload(0x4cc0), f_q))mstore(0x6dc0, addmod(mload(0x6b40), mload(0x6d40), f_q))mstore(0x6de0, mulmod(1, mload(0x4720), f_q)){ let result := mulmod(mload(0x1160), mload(0x42e0), f_q)result := addmod(mulmod(mload(0x1180), mload(0x4340), f_q), result, f_q)mstore(0x6e00, result) }mstore(0x6e20, mulmod(mload(0x6e00), mload(0x4920), f_q))mstore(0x6e40, mulmod(sub(f_q, mload(0x6e20)), 1, f_q))mstore(0x6e60, mulmod(mload(0x6de0), 1, f_q)){ let result := mulmod(mload(0x1200), mload(0x42e0), f_q)result := addmod(mulmod(mload(0x1220), mload(0x4340), f_q), result, f_q)mstore(0x6e80, result) }mstore(0x6ea0, mulmod(mload(0x6e80), mload(0x4920), f_q))mstore(0x6ec0, mulmod(sub(f_q, mload(0x6ea0)), mload(0x1280), f_q))mstore(0x6ee0, mulmod(mload(0x6de0), mload(0x1280), f_q))mstore(0x6f00, addmod(mload(0x6e40), mload(0x6ec0), f_q))mstore(0x6f20, mulmod(mload(0x6f00), mload(0x4ce0), f_q))mstore(0x6f40, mulmod(mload(0x6e60), mload(0x4ce0), f_q))mstore(0x6f60, mulmod(mload(0x6ee0), mload(0x4ce0), f_q))mstore(0x6f80, addmod(mload(0x6dc0), mload(0x6f20), f_q))mstore(0x6fa0, mulmod(1, mload(0x4060), f_q))mstore(0x6fc0, mulmod(1, mload(0x1380), f_q))mstore(0x6fe0, 0x0000000000000000000000000000000000000000000000000000000000000001) mstore(0x7000, 0x0000000000000000000000000000000000000000000000000000000000000002)mstore(0x7020, mload(0x6f80))success := and(eq(staticcall(gas(), 0x7, 0x6fe0, 0x60, 0x6fe0, 0x40), 1), success)mstore(0x7040, mload(0x6fe0)) mstore(0x7060, mload(0x7000))mstore(0x7080, mload(0xc0)) mstore(0x70a0, mload(0xe0))success := and(eq(staticcall(gas(), 0x6, 0x7040, 0x80, 0x7040, 0x40), 1), success)mstore(0x70c0, mload(0x100)) mstore(0x70e0, mload(0x120))mstore(0x7100, mload(0x50c0))success := and(eq(staticcall(gas(), 0x7, 0x70c0, 0x60, 0x70c0, 0x40), 1), success)mstore(0x7120, mload(0x7040)) mstore(0x7140, mload(0x7060))mstore(0x7160, mload(0x70c0)) mstore(0x7180, mload(0x70e0))success := and(eq(staticcall(gas(), 0x6, 0x7120, 0x80, 0x7120, 0x40), 1), success)mstore(0x71a0, mload(0x140)) mstore(0x71c0, mload(0x160))mstore(0x71e0, mload(0x50e0))success := and(eq(staticcall(gas(), 0x7, 0x71a0, 0x60, 0x71a0, 0x40), 1), success)mstore(0x7200, mload(0x7120)) mstore(0x7220, mload(0x7140))mstore(0x7240, mload(0x71a0)) mstore(0x7260, mload(0x71c0))success := and(eq(staticcall(gas(), 0x6, 0x7200, 0x80, 0x7200, 0x40), 1), success)mstore(0x7280, mload(0x180)) mstore(0x72a0, mload(0x1a0))mstore(0x72c0, mload(0x5100))success := and(eq(staticcall(gas(), 0x7, 0x7280, 0x60, 0x7280, 0x40), 1), success)mstore(0x72e0, mload(0x7200)) mstore(0x7300, mload(0x7220))mstore(0x7320, mload(0x7280)) mstore(0x7340, mload(0x72a0))success := and(eq(staticcall(gas(), 0x6, 0x72e0, 0x80, 0x72e0, 0x40), 1), success)mstore(0x7360, mload(0x1c0)) mstore(0x7380, mload(0x1e0))mstore(0x73a0, mload(0x5120))success := and(eq(staticcall(gas(), 0x7, 0x7360, 0x60, 0x7360, 0x40), 1), success)mstore(0x73c0, mload(0x72e0)) mstore(0x73e0, mload(0x7300))mstore(0x7400, mload(0x7360)) mstore(0x7420, mload(0x7380))success := and(eq(staticcall(gas(), 0x6, 0x73c0, 0x80, 0x73c0, 0x40), 1), success)mstore(0x7440, mload(0x200)) mstore(0x7460, mload(0x220))mstore(0x7480, mload(0x5140))success := and(eq(staticcall(gas(), 0x7, 0x7440, 0x60, 0x7440, 0x40), 1), success)mstore(0x74a0, mload(0x73c0)) mstore(0x74c0, mload(0x73e0))mstore(0x74e0, mload(0x7440)) mstore(0x7500, mload(0x7460))success := and(eq(staticcall(gas(), 0x6, 0x74a0, 0x80, 0x74a0, 0x40), 1), success)mstore(0x7520, mload(0x240)) mstore(0x7540, mload(0x260))mstore(0x7560, mload(0x63a0))success := and(eq(staticcall(gas(), 0x7, 0x7520, 0x60, 0x7520, 0x40), 1), success)mstore(0x7580, mload(0x74a0)) mstore(0x75a0, mload(0x74c0))mstore(0x75c0, mload(0x7520)) mstore(0x75e0, mload(0x7540))success := and(eq(staticcall(gas(), 0x6, 0x7580, 0x80, 0x7580, 0x40), 1), success)mstore(0x7600, mload(0x280)) mstore(0x7620, mload(0x2a0))mstore(0x7640, mload(0x63c0))success := and(eq(staticcall(gas(), 0x7, 0x7600, 0x60, 0x7600, 0x40), 1), success)mstore(0x7660, mload(0x7580)) mstore(0x7680, mload(0x75a0))mstore(0x76a0, mload(0x7600)) mstore(0x76c0, mload(0x7620))success := and(eq(staticcall(gas(), 0x6, 0x7660, 0x80, 0x7660, 0x40), 1), success)mstore(0x76e0, mload(0x2c0)) mstore(0x7700, mload(0x2e0))mstore(0x7720, mload(0x63e0))success := and(eq(staticcall(gas(), 0x7, 0x76e0, 0x60, 0x76e0, 0x40), 1), success)mstore(0x7740, mload(0x7660)) mstore(0x7760, mload(0x7680))mstore(0x7780, mload(0x76e0)) mstore(0x77a0, mload(0x7700))success := and(eq(staticcall(gas(), 0x6, 0x7740, 0x80, 0x7740, 0x40), 1), success)mstore(0x77c0, mload(0x3a0)) mstore(0x77e0, mload(0x3c0))mstore(0x7800, mload(0x6400))success := and(eq(staticcall(gas(), 0x7, 0x77c0, 0x60, 0x77c0, 0x40), 1), success)mstore(0x7820, mload(0x7740)) mstore(0x7840, mload(0x7760))mstore(0x7860, mload(0x77c0)) mstore(0x7880, mload(0x77e0))success := and(eq(staticcall(gas(), 0x6, 0x7820, 0x80, 0x7820, 0x40), 1), success)mstore(0x78a0, mload(0x420)) mstore(0x78c0, mload(0x440))mstore(0x78e0, mload(0x6420))success := and(eq(staticcall(gas(), 0x7, 0x78a0, 0x60, 0x78a0, 0x40), 1), success)mstore(0x7900, mload(0x7820)) mstore(0x7920, mload(0x7840))mstore(0x7940, mload(0x78a0)) mstore(0x7960, mload(0x78c0))success := and(eq(staticcall(gas(), 0x6, 0x7900, 0x80, 0x7900, 0x40), 1), success)mstore(0x7980, 0x0d3b7c04b7391ddf5d9fc5f8906033e1d1442f341c4cab5c1584c8082ea8c21c) mstore(0x79a0, 0x1596df7247ab32fb79261c31617e2f2bbde95b6e8719386dacfeaa8f6d7df60c)mstore(0x79c0, mload(0x6440))success := and(eq(staticcall(gas(), 0x7, 0x7980, 0x60, 0x7980, 0x40), 1), success)mstore(0x79e0, mload(0x7900)) mstore(0x7a00, mload(0x7920))mstore(0x7a20, mload(0x7980)) mstore(0x7a40, mload(0x79a0))success := and(eq(staticcall(gas(), 0x6, 0x79e0, 0x80, 0x79e0, 0x40), 1), success)mstore(0x7a60, 0x04d043081f0d55eead6d8ad7b10d09a6ee2718f445d9bce454075a8a37bacaf3) mstore(0x7a80, 0x27d6bcbb02cd624ab80b5532a0a65fc6f88a0faf7cf3e0d106f4aa0aa25e758b)mstore(0x7aa0, mload(0x6460))success := and(eq(staticcall(gas(), 0x7, 0x7a60, 0x60, 0x7a60, 0x40), 1), success)mstore(0x7ac0, mload(0x79e0)) mstore(0x7ae0, mload(0x7a00))mstore(0x7b00, mload(0x7a60)) mstore(0x7b20, mload(0x7a80))success := and(eq(staticcall(gas(), 0x6, 0x7ac0, 0x80, 0x7ac0, 0x40), 1), success)mstore(0x7b40, 0x2d07a1bca289cdb98b648a91cbb0809dfa3a06fe01047b291d1161ddf8d1732c) mstore(0x7b60, 0x021d078d5869c57b3fe2413b517561205de5f297ac56c0e5ef0f1a7f4a31ee94)mstore(0x7b80, mload(0x6480))success := and(eq(staticcall(gas(), 0x7, 0x7b40, 0x60, 0x7b40, 0x40), 1), success)mstore(0x7ba0, mload(0x7ac0)) mstore(0x7bc0, mload(0x7ae0))mstore(0x7be0, mload(0x7b40)) mstore(0x7c00, mload(0x7b60))success := and(eq(staticcall(gas(), 0x6, 0x7ba0, 0x80, 0x7ba0, 0x40), 1), success)mstore(0x7c20, 0x2808de5f33581574dd857304add28f30335fa32c49a3d7c9128f5a3f453360cc) mstore(0x7c40, 0x07f10d421231cb6aa063db7a3cf7be709ff037fbb78d19c866d7c2c674a1aaf0)mstore(0x7c60, mload(0x64a0))success := and(eq(staticcall(gas(), 0x7, 0x7c20, 0x60, 0x7c20, 0x40), 1), success)mstore(0x7c80, mload(0x7ba0)) mstore(0x7ca0, mload(0x7bc0))mstore(0x7cc0, mload(0x7c20)) mstore(0x7ce0, mload(0x7c40))success := and(eq(staticcall(gas(), 0x6, 0x7c80, 0x80, 0x7c80, 0x40), 1), success)mstore(0x7d00, 0x2a9d8bc0a06a141e47fa114e4e62686823227f5416f19f9b2b54b9948a0bfb4b) mstore(0x7d20, 0x170610ca7497030a3dbbfeb52cc8f5f086e7a7a91e3b52e44988e6b24f1c6c34)mstore(0x7d40, mload(0x64c0))success := and(eq(staticcall(gas(), 0x7, 0x7d00, 0x60, 0x7d00, 0x40), 1), success)mstore(0x7d60, mload(0x7c80)) mstore(0x7d80, mload(0x7ca0))mstore(0x7da0, mload(0x7d00)) mstore(0x7dc0, mload(0x7d20))success := and(eq(staticcall(gas(), 0x6, 0x7d60, 0x80, 0x7d60, 0x40), 1), success)mstore(0x7de0, 0x104eb8e796d7c0b0ac9eb316eac3aadbcf9ac5b42d4b14a95ec269fefd70d9ac) mstore(0x7e00, 0x22e1365078923b7f828a54c75e0b0b108c311580bac730c92d8868c7781a917b)mstore(0x7e20, mload(0x64e0))success := and(eq(staticcall(gas(), 0x7, 0x7de0, 0x60, 0x7de0, 0x40), 1), success)mstore(0x7e40, mload(0x7d60)) mstore(0x7e60, mload(0x7d80))mstore(0x7e80, mload(0x7de0)) mstore(0x7ea0, mload(0x7e00))success := and(eq(staticcall(gas(), 0x6, 0x7e40, 0x80, 0x7e40, 0x40), 1), success)mstore(0x7ec0, 0x2e8f499835598c80e2ec4cabd4753e67822df35d0a29c05b60dca21d9173b11a) mstore(0x7ee0, 0x02990fa09b4831443e5956b84832f525976cd30aa6cafe055a45f7a04328d00f)mstore(0x7f00, mload(0x6500))success := and(eq(staticcall(gas(), 0x7, 0x7ec0, 0x60, 0x7ec0, 0x40), 1), success)mstore(0x7f20, mload(0x7e40)) mstore(0x7f40, mload(0x7e60))mstore(0x7f60, mload(0x7ec0)) mstore(0x7f80, mload(0x7ee0))success := and(eq(staticcall(gas(), 0x6, 0x7f20, 0x80, 0x7f20, 0x40), 1), success)mstore(0x7fa0, 0x258bbf1a0f256c29c1cee612fb7deaa2102870b85d7bda1ac8064307a593101f) mstore(0x7fc0, 0x2bbbde7d34cf03b70ea4a0125d6736aeb56da64f07226bf4d662a85e8d50db3a)mstore(0x7fe0, mload(0x6520))success := and(eq(staticcall(gas(), 0x7, 0x7fa0, 0x60, 0x7fa0, 0x40), 1), success)mstore(0x8000, mload(0x7f20)) mstore(0x8020, mload(0x7f40))mstore(0x8040, mload(0x7fa0)) mstore(0x8060, mload(0x7fc0))success := and(eq(staticcall(gas(), 0x6, 0x8000, 0x80, 0x8000, 0x40), 1), success)mstore(0x8080, 0x05127b4a2ff58c747435761c7256b8094a0cf4e6d0f829a060c601d5cce0fdc0) mstore(0x80a0, 0x106a8cecab556f1a6d729cdeefd6dd70afbe4954cae4785871d68396dba88d95)mstore(0x80c0, mload(0x6540))success := and(eq(staticcall(gas(), 0x7, 0x8080, 0x60, 0x8080, 0x40), 1), success)mstore(0x80e0, mload(0x8000)) mstore(0x8100, mload(0x8020))mstore(0x8120, mload(0x8080)) mstore(0x8140, mload(0x80a0))success := and(eq(staticcall(gas(), 0x6, 0x80e0, 0x80, 0x80e0, 0x40), 1), success)mstore(0x8160, 0x24c985411f901ba3e9fe3296d58db7a896d53a060afc4c3b85182122d2a06b16) mstore(0x8180, 0x1e02136b244f617c37779b0cb970dce25ff03579c671e7f3f57a320e7b1a4b06)mstore(0x81a0, mload(0x6560))success := and(eq(staticcall(gas(), 0x7, 0x8160, 0x60, 0x8160, 0x40), 1), success)mstore(0x81c0, mload(0x80e0)) mstore(0x81e0, mload(0x8100))mstore(0x8200, mload(0x8160)) mstore(0x8220, mload(0x8180))success := and(eq(staticcall(gas(), 0x6, 0x81c0, 0x80, 0x81c0, 0x40), 1), success)mstore(0x8240, 0x0e5c5a486399e328a6629926a042fde07863ce1a2e91995ee60e5c477008ebdc) mstore(0x8260, 0x223b4bdd8d3877955728258fd5be1b7f2ac8093891a83c738f80395720cc55ca)mstore(0x8280, mload(0x6580))success := and(eq(staticcall(gas(), 0x7, 0x8240, 0x60, 0x8240, 0x40), 1), success)mstore(0x82a0, mload(0x81c0)) mstore(0x82c0, mload(0x81e0))mstore(0x82e0, mload(0x8240)) mstore(0x8300, mload(0x8260))success := and(eq(staticcall(gas(), 0x6, 0x82a0, 0x80, 0x82a0, 0x40), 1), success)mstore(0x8320, 0x2e55f008e10b629fc37b0808b8264d2857e6fa34a1be704a4132f9c1621b8736) mstore(0x8340, 0x01c3487db12618c270ffe8251633753bdad9fd2968144a02b18447bee326d19d)mstore(0x8360, mload(0x65a0))success := and(eq(staticcall(gas(), 0x7, 0x8320, 0x60, 0x8320, 0x40), 1), success)mstore(0x8380, mload(0x82a0)) mstore(0x83a0, mload(0x82c0))mstore(0x83c0, mload(0x8320)) mstore(0x83e0, mload(0x8340))success := and(eq(staticcall(gas(), 0x6, 0x8380, 0x80, 0x8380, 0x40), 1), success)mstore(0x8400, 0x0154bffa5c54063b60c4f4c66b2a9acb09fd7f1b2653a9f2b9ee75bcb1bc8ba2) mstore(0x8420, 0x0b15f039df5ebe088e2231ce9a07c50dbb4739402712b56dd8bab6ab93a95f3f)mstore(0x8440, mload(0x65c0))success := and(eq(staticcall(gas(), 0x7, 0x8400, 0x60, 0x8400, 0x40), 1), success)mstore(0x8460, mload(0x8380)) mstore(0x8480, mload(0x83a0))mstore(0x84a0, mload(0x8400)) mstore(0x84c0, mload(0x8420))success := and(eq(staticcall(gas(), 0x6, 0x8460, 0x80, 0x8460, 0x40), 1), success)mstore(0x84e0, 0x0032a37f146820eccad7796039d21d0c85504baff34e194f750d7f8c4eccf729) mstore(0x8500, 0x2a655340cddc523abd37c3d77f022b8e616194a3c31e414dc5d466eb2e4c0b69)mstore(0x8520, mload(0x65e0))success := and(eq(staticcall(gas(), 0x7, 0x84e0, 0x60, 0x84e0, 0x40), 1), success)mstore(0x8540, mload(0x8460)) mstore(0x8560, mload(0x8480))mstore(0x8580, mload(0x84e0)) mstore(0x85a0, mload(0x8500))success := and(eq(staticcall(gas(), 0x6, 0x8540, 0x80, 0x8540, 0x40), 1), success)mstore(0x85c0, 0x0d6b367e25327ebd99fae2aaffa6fad2acae34ba7b329ef817a95fe425f65e4d) mstore(0x85e0, 0x2bc4769ce00a494fde791f07b3f092019995d323c0b067d61e0660e1ad84d94f)mstore(0x8600, mload(0x6600))success := and(eq(staticcall(gas(), 0x7, 0x85c0, 0x60, 0x85c0, 0x40), 1), success)mstore(0x8620, mload(0x8540)) mstore(0x8640, mload(0x8560))mstore(0x8660, mload(0x85c0)) mstore(0x8680, mload(0x85e0))success := and(eq(staticcall(gas(), 0x6, 0x8620, 0x80, 0x8620, 0x40), 1), success)mstore(0x86a0, 0x0fef43d29ecdb947fc934c7adf7f38748fe212082d5a8e3bc621ff907213812b) mstore(0x86c0, 0x1ab8ccbb8486a5508a34837db62c3426d6f6210970a2b1351f12d0ba73e11874)mstore(0x86e0, mload(0x6620))success := and(eq(staticcall(gas(), 0x7, 0x86a0, 0x60, 0x86a0, 0x40), 1), success)mstore(0x8700, mload(0x8620)) mstore(0x8720, mload(0x8640))mstore(0x8740, mload(0x86a0)) mstore(0x8760, mload(0x86c0))success := and(eq(staticcall(gas(), 0x6, 0x8700, 0x80, 0x8700, 0x40), 1), success)mstore(0x8780, 0x29cc03da3870fc7139115d43275baf04cc110d79f85d2c2e712b981c409df25e) mstore(0x87a0, 0x016a8cd002e522595ef910f87dc707449ae5f56876eb88274b2e586fceacf165)mstore(0x87c0, mload(0x6640))success := and(eq(staticcall(gas(), 0x7, 0x8780, 0x60, 0x8780, 0x40), 1), success)mstore(0x87e0, mload(0x8700)) mstore(0x8800, mload(0x8720))mstore(0x8820, mload(0x8780)) mstore(0x8840, mload(0x87a0))success := and(eq(staticcall(gas(), 0x6, 0x87e0, 0x80, 0x87e0, 0x40), 1), success)mstore(0x8860, 0x0ec6d72e2ce7c233ca8af2fc2bd4223a6d81d545e8785579de4cb241740f36a2) mstore(0x8880, 0x028a4450999577e25fc7d191fecf7f1a8a0526f7e042f316767c7ff43299fdd9)mstore(0x88a0, mload(0x6660))success := and(eq(staticcall(gas(), 0x7, 0x8860, 0x60, 0x8860, 0x40), 1), success)mstore(0x88c0, mload(0x87e0)) mstore(0x88e0, mload(0x8800))mstore(0x8900, mload(0x8860)) mstore(0x8920, mload(0x8880))success := and(eq(staticcall(gas(), 0x6, 0x88c0, 0x80, 0x88c0, 0x40), 1), success)mstore(0x8940, 0x1fdb57cefe9c10024dfe402759cad8061e8d0edeba3f42f187ea796b1938118e) mstore(0x8960, 0x1294d92ed67eec88a2adbb5cef0682a64fae9827c02d37e69beaddd3b6a145ad)mstore(0x8980, mload(0x6680))success := and(eq(staticcall(gas(), 0x7, 0x8940, 0x60, 0x8940, 0x40), 1), success)mstore(0x89a0, mload(0x88c0)) mstore(0x89c0, mload(0x88e0))mstore(0x89e0, mload(0x8940)) mstore(0x8a00, mload(0x8960))success := and(eq(staticcall(gas(), 0x6, 0x89a0, 0x80, 0x89a0, 0x40), 1), success)mstore(0x8a20, 0x292267e75402bf3fb816d404fe987ec7b277ec539cd653568a31dc8fdd04b6f1) mstore(0x8a40, 0x0a2975f29c8f29df52ea4e941daa28752eea2da8c6b6135622e4a0d823accd78)mstore(0x8a60, mload(0x66a0))success := and(eq(staticcall(gas(), 0x7, 0x8a20, 0x60, 0x8a20, 0x40), 1), success)mstore(0x8a80, mload(0x89a0)) mstore(0x8aa0, mload(0x89c0))mstore(0x8ac0, mload(0x8a20)) mstore(0x8ae0, mload(0x8a40))success := and(eq(staticcall(gas(), 0x6, 0x8a80, 0x80, 0x8a80, 0x40), 1), success)mstore(0x8b00, mload(0x7c0)) mstore(0x8b20, mload(0x7e0))mstore(0x8b40, mload(0x66c0))success := and(eq(staticcall(gas(), 0x7, 0x8b00, 0x60, 0x8b00, 0x40), 1), success)mstore(0x8b60, mload(0x8a80)) mstore(0x8b80, mload(0x8aa0))mstore(0x8ba0, mload(0x8b00)) mstore(0x8bc0, mload(0x8b20))success := and(eq(staticcall(gas(), 0x6, 0x8b60, 0x80, 0x8b60, 0x40), 1), success)mstore(0x8be0, mload(0x800)) mstore(0x8c00, mload(0x820))mstore(0x8c20, mload(0x66e0))success := and(eq(staticcall(gas(), 0x7, 0x8be0, 0x60, 0x8be0, 0x40), 1), success)mstore(0x8c40, mload(0x8b60)) mstore(0x8c60, mload(0x8b80))mstore(0x8c80, mload(0x8be0)) mstore(0x8ca0, mload(0x8c00))success := and(eq(staticcall(gas(), 0x6, 0x8c40, 0x80, 0x8c40, 0x40), 1), success)mstore(0x8cc0, mload(0x840)) mstore(0x8ce0, mload(0x860))mstore(0x8d00, mload(0x6700))success := and(eq(staticcall(gas(), 0x7, 0x8cc0, 0x60, 0x8cc0, 0x40), 1), success)mstore(0x8d20, mload(0x8c40)) mstore(0x8d40, mload(0x8c60))mstore(0x8d60, mload(0x8cc0)) mstore(0x8d80, mload(0x8ce0))success := and(eq(staticcall(gas(), 0x6, 0x8d20, 0x80, 0x8d20, 0x40), 1), success)mstore(0x8da0, mload(0x720)) mstore(0x8dc0, mload(0x740))mstore(0x8de0, mload(0x6720))success := and(eq(staticcall(gas(), 0x7, 0x8da0, 0x60, 0x8da0, 0x40), 1), success)mstore(0x8e00, mload(0x8d20)) mstore(0x8e20, mload(0x8d40))mstore(0x8e40, mload(0x8da0)) mstore(0x8e60, mload(0x8dc0))success := and(eq(staticcall(gas(), 0x6, 0x8e00, 0x80, 0x8e00, 0x40), 1), success)mstore(0x8e80, mload(0x520)) mstore(0x8ea0, mload(0x540))mstore(0x8ec0, mload(0x6aa0))success := and(eq(staticcall(gas(), 0x7, 0x8e80, 0x60, 0x8e80, 0x40), 1), success)mstore(0x8ee0, mload(0x8e00)) mstore(0x8f00, mload(0x8e20))mstore(0x8f20, mload(0x8e80)) mstore(0x8f40, mload(0x8ea0))success := and(eq(staticcall(gas(), 0x6, 0x8ee0, 0x80, 0x8ee0, 0x40), 1), success)mstore(0x8f60, mload(0x560)) mstore(0x8f80, mload(0x580))mstore(0x8fa0, mload(0x6ac0))success := and(eq(staticcall(gas(), 0x7, 0x8f60, 0x60, 0x8f60, 0x40), 1), success)mstore(0x8fc0, mload(0x8ee0)) mstore(0x8fe0, mload(0x8f00))mstore(0x9000, mload(0x8f60)) mstore(0x9020, mload(0x8f80))success := and(eq(staticcall(gas(), 0x6, 0x8fc0, 0x80, 0x8fc0, 0x40), 1), success)mstore(0x9040, mload(0x5a0)) mstore(0x9060, mload(0x5c0))mstore(0x9080, mload(0x6ae0))success := and(eq(staticcall(gas(), 0x7, 0x9040, 0x60, 0x9040, 0x40), 1), success)mstore(0x90a0, mload(0x8fc0)) mstore(0x90c0, mload(0x8fe0))mstore(0x90e0, mload(0x9040)) mstore(0x9100, mload(0x9060))success := and(eq(staticcall(gas(), 0x6, 0x90a0, 0x80, 0x90a0, 0x40), 1), success)mstore(0x9120, mload(0x5e0)) mstore(0x9140, mload(0x600))mstore(0x9160, mload(0x6b00))success := and(eq(staticcall(gas(), 0x7, 0x9120, 0x60, 0x9120, 0x40), 1), success)mstore(0x9180, mload(0x90a0)) mstore(0x91a0, mload(0x90c0))mstore(0x91c0, mload(0x9120)) mstore(0x91e0, mload(0x9140))success := and(eq(staticcall(gas(), 0x6, 0x9180, 0x80, 0x9180, 0x40), 1), success)mstore(0x9200, mload(0x620)) mstore(0x9220, mload(0x640))mstore(0x9240, mload(0x6b20))success := and(eq(staticcall(gas(), 0x7, 0x9200, 0x60, 0x9200, 0x40), 1), success)mstore(0x9260, mload(0x9180)) mstore(0x9280, mload(0x91a0))mstore(0x92a0, mload(0x9200)) mstore(0x92c0, mload(0x9220))success := and(eq(staticcall(gas(), 0x6, 0x9260, 0x80, 0x9260, 0x40), 1), success)mstore(0x92e0, mload(0x660)) mstore(0x9300, mload(0x680))mstore(0x9320, mload(0x6d60))success := and(eq(staticcall(gas(), 0x7, 0x92e0, 0x60, 0x92e0, 0x40), 1), success)mstore(0x9340, mload(0x9260)) mstore(0x9360, mload(0x9280))mstore(0x9380, mload(0x92e0)) mstore(0x93a0, mload(0x9300))success := and(eq(staticcall(gas(), 0x6, 0x9340, 0x80, 0x9340, 0x40), 1), success)mstore(0x93c0, mload(0x6a0)) mstore(0x93e0, mload(0x6c0))mstore(0x9400, mload(0x6d80))success := and(eq(staticcall(gas(), 0x7, 0x93c0, 0x60, 0x93c0, 0x40), 1), success)mstore(0x9420, mload(0x9340)) mstore(0x9440, mload(0x9360))mstore(0x9460, mload(0x93c0)) mstore(0x9480, mload(0x93e0))success := and(eq(staticcall(gas(), 0x6, 0x9420, 0x80, 0x9420, 0x40), 1), success)mstore(0x94a0, mload(0x6e0)) mstore(0x94c0, mload(0x700))mstore(0x94e0, mload(0x6da0))success := and(eq(staticcall(gas(), 0x7, 0x94a0, 0x60, 0x94a0, 0x40), 1), success)mstore(0x9500, mload(0x9420)) mstore(0x9520, mload(0x9440))mstore(0x9540, mload(0x94a0)) mstore(0x9560, mload(0x94c0))success := and(eq(staticcall(gas(), 0x6, 0x9500, 0x80, 0x9500, 0x40), 1), success)mstore(0x9580, mload(0x360)) mstore(0x95a0, mload(0x380))mstore(0x95c0, mload(0x6f40))success := and(eq(staticcall(gas(), 0x7, 0x9580, 0x60, 0x9580, 0x40), 1), success)mstore(0x95e0, mload(0x9500)) mstore(0x9600, mload(0x9520))mstore(0x9620, mload(0x9580)) mstore(0x9640, mload(0x95a0))success := and(eq(staticcall(gas(), 0x6, 0x95e0, 0x80, 0x95e0, 0x40), 1), success)mstore(0x9660, mload(0x3e0)) mstore(0x9680, mload(0x400))mstore(0x96a0, mload(0x6f60))success := and(eq(staticcall(gas(), 0x7, 0x9660, 0x60, 0x9660, 0x40), 1), success)mstore(0x96c0, mload(0x95e0)) mstore(0x96e0, mload(0x9600))mstore(0x9700, mload(0x9660)) mstore(0x9720, mload(0x9680))success := and(eq(staticcall(gas(), 0x6, 0x96c0, 0x80, 0x96c0, 0x40), 1), success)mstore(0x9740, mload(0x1320)) mstore(0x9760, mload(0x1340))mstore(0x9780, sub(f_q, mload(0x6fa0)))success := and(eq(staticcall(gas(), 0x7, 0x9740, 0x60, 0x9740, 0x40), 1), success)mstore(0x97a0, mload(0x96c0)) mstore(0x97c0, mload(0x96e0))mstore(0x97e0, mload(0x9740)) mstore(0x9800, mload(0x9760))success := and(eq(staticcall(gas(), 0x6, 0x97a0, 0x80, 0x97a0, 0x40), 1), success)mstore(0x9820, mload(0x13c0)) mstore(0x9840, mload(0x13e0))mstore(0x9860, mload(0x6fc0))success := and(eq(staticcall(gas(), 0x7, 0x9820, 0x60, 0x9820, 0x40), 1), success)mstore(0x9880, mload(0x97a0)) mstore(0x98a0, mload(0x97c0))mstore(0x98c0, mload(0x9820)) mstore(0x98e0, mload(0x9840))success := and(eq(staticcall(gas(), 0x6, 0x9880, 0x80, 0x9880, 0x40), 1), success)mstore(0x9900, mload(0x9880)) mstore(0x9920, mload(0x98a0))mstore(0x9940, 0x198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c2) mstore(0x9960, 0x1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed) mstore(0x9980, 0x090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b) mstore(0x99a0, 0x12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa)mstore(0x99c0, mload(0x13c0)) mstore(0x99e0, mload(0x13e0))mstore(0x9a00, 0x0181624e80f3d6ae28df7e01eaeab1c0e919877a3b8a6b7fbc69a6817d596ea2) mstore(0x9a20, 0x1783d30dcb12d259bb89098addf6280fa4b653be7a152542a28f7b926e27e648) mstore(0x9a40, 0x00ae44489d41a0d179e2dfdc03bddd883b7109f8b6ae316a59e815c1a6b35304) mstore(0x9a60, 0x0b2147ab62a386bd63e6de1522109b8c9588ab466f5aadfde8c41ca3749423ee)success := and(eq(staticcall(gas(), 0x8, 0x9900, 0x180, 0x9900, 0x20), 1), success)success := and(eq(mload(0x9900), 1), success) // Revert if anything fails if iszero(success) { revert(0, 0) }} return success; } } diff --git a/lightclient-circuits/src/committee_update_circuit.rs b/lightclient-circuits/src/committee_update_circuit.rs index 018c01ea..3417837c 100644 --- a/lightclient-circuits/src/committee_update_circuit.rs +++ b/lightclient-circuits/src/committee_update_circuit.rs @@ -217,10 +217,10 @@ impl AppCircuit for CommitteeUpdateCircuit { let fp_chip = FpChip::new(&range, LIMB_BITS, NUM_LIMBS); let assigned_instances = Self::synthesize(&mut builder, &fp_chip, witness)?; + builder.set_instances(0, assigned_instances); match stage { CircuitBuilderStage::Prover => { - builder.set_instances(0, assigned_instances); if let Some(pinning) = pinning { builder.set_params(pinning.params); builder.set_break_points(pinning.break_points); diff --git a/lightclient-circuits/src/sync_step_circuit.rs b/lightclient-circuits/src/sync_step_circuit.rs index 9029b61c..c78e5ebc 100644 --- a/lightclient-circuits/src/sync_step_circuit.rs +++ b/lightclient-circuits/src/sync_step_circuit.rs @@ -390,10 +390,10 @@ impl AppCircuit for StepCircuit { let fp_chip = FpChip::new(&range, LIMB_BITS, NUM_LIMBS); let assigned_instances = Self::synthesize(&mut builder, &fp_chip, args)?; + builder.set_instances(0, assigned_instances); match stage { CircuitBuilderStage::Prover => { - builder.set_instances(0, assigned_instances); if let Some(pinning) = pinning { builder.set_params(pinning.params); builder.set_break_points(pinning.break_points); diff --git a/prover/src/cli.rs b/prover/src/cli.rs index af552fec..d1cdfb73 100644 --- a/prover/src/cli.rs +++ b/prover/src/cli.rs @@ -191,7 +191,7 @@ fn gen_evm_verifier( let num_instances = { let circuit = Circuit::create_circuit( - CircuitBuilderStage::Mock, + CircuitBuilderStage::Keygen, None, &default_witness, params.k(),