github.com/consensys/gnark-crypto@v0.14.0/ecc/bw6-761/fp/element_exp.go (about) 1 // Copyright 2020 ConsenSys Software Inc. 2 // 3 // Licensed under the Apache License, Version 2.0 (the "License"); 4 // you may not use this file except in compliance with the License. 5 // You may obtain a copy of the License at 6 // 7 // http://www.apache.org/licenses/LICENSE-2.0 8 // 9 // Unless required by applicable law or agreed to in writing, software 10 // distributed under the License is distributed on an "AS IS" BASIS, 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 // See the License for the specific language governing permissions and 13 // limitations under the License. 14 15 // Code generated by consensys/gnark-crypto DO NOT EDIT 16 17 package fp 18 19 // expBySqrtExp is equivalent to z.Exp(x, 48ba093ee0f382b461f250013ebfcfae49861aa07451a214a09d7be021ef905c1ee98e39613a4640f3aebfc96d08c121a2723b44be7f641c7734f71cfaffcba62845b09599ea3e05833e2bbabc290df9a44f9a1c000020bd27400000000023) 20 // 21 // uses github.com/mmcloughlin/addchain v0.4.0 to generate a shorter addition chain 22 func (z *Element) expBySqrtExp(x Element) *Element { 23 // addition chain: 24 // 25 // _10 = 2*1 26 // _11 = 1 + _10 27 // _101 = _10 + _11 28 // _111 = _10 + _101 29 // _1001 = _10 + _111 30 // _1011 = _10 + _1001 31 // _1101 = _10 + _1011 32 // _1111 = _10 + _1101 33 // _10001 = _10 + _1111 34 // _10010 = 1 + _10001 35 // _10011 = 1 + _10010 36 // _10111 = _101 + _10010 37 // _11001 = _10 + _10111 38 // _11011 = _10 + _11001 39 // _11101 = _10 + _11011 40 // _11111 = _10 + _11101 41 // _100001 = _10 + _11111 42 // _100011 = _10 + _100001 43 // _100101 = _10 + _100011 44 // _100111 = _10 + _100101 45 // _101001 = _10 + _100111 46 // _101011 = _10 + _101001 47 // _101101 = _10 + _101011 48 // _101111 = _10 + _101101 49 // _110001 = _10 + _101111 50 // _110011 = _10 + _110001 51 // _110101 = _10 + _110011 52 // _110111 = _10 + _110101 53 // _111001 = _10 + _110111 54 // _111011 = _10 + _111001 55 // _111101 = _10 + _111011 56 // _1111010 = 2*_111101 57 // _1111111 = _101 + _1111010 58 // _11111110 = 2*_1111111 59 // _11111111 = 1 + _11111110 60 // i43 = ((_100001 + _11111111) << 3 + _10111) << 2 + 1 61 // i65 = ((i43 << 9 + _1001) << 7 + _11111) << 4 62 // i82 = ((_111 + i65) << 9 + _1111) << 5 + _111 63 // i111 = ((i82 << 11 + _101011) << 7 + _100011) << 9 64 // i139 = ((_11111 + i111) << 8 + _100101) << 17 + _100111 65 // i161 = ((i139 << 4 + _1101) << 9 + _11111111) << 7 66 // i176 = ((_11111 + i161) << 6 + _10111) << 6 + _1001 67 // i198 = ((i176 << 4 + _11) << 6 + _11) << 10 68 // i214 = ((_110101 + i198) << 2 + 1) << 11 + _11101 69 // i238 = ((i214 << 6 + _101) << 7 + _1101) << 9 70 // i259 = ((_100001 + i238) << 7 + _100101) << 11 + _100111 71 // i287 = ((i259 << 7 + _101111) << 6 + _11111) << 13 72 // i302 = ((_100001 + i287) << 6 + _111011) << 6 + _111001 73 // i329 = ((i302 << 10 + _10111) << 11 + _111101) << 4 74 // i346 = ((_1101 + i329) << 8 + _110001) << 6 + _110001 75 // i366 = ((i346 << 5 + _11001) << 3 + _11) << 10 76 // i382 = ((_100111 + i366) << 5 + _1001) << 8 + _11001 77 // i407 = ((i382 << 10 + _1111) << 7 + _11101) << 6 78 // i427 = ((_11101 + i407) << 9 + _11111111) << 8 + _100101 79 // i454 = ((i427 << 6 + _101101) << 10 + _100011) << 9 80 // i474 = ((_1001 + i454) << 8 + _1101) << 9 + _100111 81 // i499 = ((i474 << 8 + _100011) << 6 + _101101) << 9 82 // i515 = ((_100101 + i499) << 4 + _1111) << 9 + _1111111 83 // i540 = ((i515 << 6 + _11001) << 8 + _111) << 9 84 // i555 = ((_111011 + i540) << 5 + _10011) << 7 + _100111 85 // i577 = ((i555 << 5 + _10111) << 9 + _111001) << 6 86 // i591 = ((_111101 + i577) << 9 + _11111111) << 2 + _11 87 // i612 = ((i591 << 7 + _10111) << 6 + _10011) << 6 88 // i630 = ((_101 + i612) << 9 + _10001) << 6 + _11011 89 // i657 = ((i630 << 10 + _100101) << 7 + _110011) << 8 90 // i670 = ((_111101 + i657) << 7 + _100011) << 3 + _111 91 // i696 = ((i670 << 10 + _1011) << 11 + _110011) << 3 92 // i713 = ((_111 + i696) << 9 + _101011) << 5 + _10111 93 // i734 = ((i713 << 7 + _101011) << 2 + _11) << 10 94 // i753 = ((_101001 + i734) << 10 + _110111) << 6 + _111001 95 // i776 = ((i753 << 6 + _101001) << 9 + _100111) << 6 96 // i788 = ((_110011 + i776) << 7 + _100001) << 2 + _11 97 // i827 = ((i788 << 21 + 1) << 11 + _101111) << 5 98 // return ((_1001 + i827) << 7 + _11101) << 46 + _100011 99 // 100 // Operations: 753 squares 130 multiplies 101 102 // Allocate Temporaries. 103 var ( 104 t0 = new(Element) 105 t1 = new(Element) 106 t2 = new(Element) 107 t3 = new(Element) 108 t4 = new(Element) 109 t5 = new(Element) 110 t6 = new(Element) 111 t7 = new(Element) 112 t8 = new(Element) 113 t9 = new(Element) 114 t10 = new(Element) 115 t11 = new(Element) 116 t12 = new(Element) 117 t13 = new(Element) 118 t14 = new(Element) 119 t15 = new(Element) 120 t16 = new(Element) 121 t17 = new(Element) 122 t18 = new(Element) 123 t19 = new(Element) 124 t20 = new(Element) 125 t21 = new(Element) 126 t22 = new(Element) 127 t23 = new(Element) 128 t24 = new(Element) 129 t25 = new(Element) 130 t26 = new(Element) 131 t27 = new(Element) 132 t28 = new(Element) 133 t29 = new(Element) 134 t30 = new(Element) 135 ) 136 137 // var t0,t1,t2,t3,t4,t5,t6,t7,t8,t9,t10,t11,t12,t13,t14,t15,t16,t17,t18,t19,t20,t21,t22,t23,t24,t25,t26,t27,t28,t29,t30 Element 138 // Step 1: t14 = x^0x2 139 t14.Square(&x) 140 141 // Step 2: t3 = x^0x3 142 t3.Mul(&x, t14) 143 144 // Step 3: t18 = x^0x5 145 t18.Mul(t14, t3) 146 147 // Step 4: t12 = x^0x7 148 t12.Mul(t14, t18) 149 150 // Step 5: t1 = x^0x9 151 t1.Mul(t14, t12) 152 153 // Step 6: t13 = x^0xb 154 t13.Mul(t14, t1) 155 156 // Step 7: t26 = x^0xd 157 t26.Mul(t14, t13) 158 159 // Step 8: t24 = x^0xf 160 t24.Mul(t14, t26) 161 162 // Step 9: t17 = x^0x11 163 t17.Mul(t14, t24) 164 165 // Step 10: z = x^0x12 166 z.Mul(&x, t17) 167 168 // Step 11: t19 = x^0x13 169 t19.Mul(&x, z) 170 171 // Step 12: t11 = x^0x17 172 t11.Mul(t18, z) 173 174 // Step 13: t22 = x^0x19 175 t22.Mul(t14, t11) 176 177 // Step 14: t16 = x^0x1b 178 t16.Mul(t14, t22) 179 180 // Step 15: t0 = x^0x1d 181 t0.Mul(t14, t16) 182 183 // Step 16: t28 = x^0x1f 184 t28.Mul(t14, t0) 185 186 // Step 17: t4 = x^0x21 187 t4.Mul(t14, t28) 188 189 // Step 18: z = x^0x23 190 z.Mul(t14, t4) 191 192 // Step 19: t15 = x^0x25 193 t15.Mul(t14, z) 194 195 // Step 20: t6 = x^0x27 196 t6.Mul(t14, t15) 197 198 // Step 21: t7 = x^0x29 199 t7.Mul(t14, t6) 200 201 // Step 22: t10 = x^0x2b 202 t10.Mul(t14, t7) 203 204 // Step 23: t25 = x^0x2d 205 t25.Mul(t14, t10) 206 207 // Step 24: t2 = x^0x2f 208 t2.Mul(t14, t25) 209 210 // Step 25: t27 = x^0x31 211 t27.Mul(t14, t2) 212 213 // Step 26: t5 = x^0x33 214 t5.Mul(t14, t27) 215 216 // Step 27: t29 = x^0x35 217 t29.Mul(t14, t5) 218 219 // Step 28: t9 = x^0x37 220 t9.Mul(t14, t29) 221 222 // Step 29: t8 = x^0x39 223 t8.Mul(t14, t9) 224 225 // Step 30: t21 = x^0x3b 226 t21.Mul(t14, t8) 227 228 // Step 31: t14 = x^0x3d 229 t14.Mul(t14, t21) 230 231 // Step 32: t20 = x^0x7a 232 t20.Square(t14) 233 234 // Step 33: t23 = x^0x7f 235 t23.Mul(t18, t20) 236 237 // Step 34: t20 = x^0xfe 238 t20.Square(t23) 239 240 // Step 35: t20 = x^0xff 241 t20.Mul(&x, t20) 242 243 // Step 36: t30 = x^0x120 244 t30.Mul(t4, t20) 245 246 // Step 39: t30 = x^0x900 247 for s := 0; s < 3; s++ { 248 t30.Square(t30) 249 } 250 251 // Step 40: t30 = x^0x917 252 t30.Mul(t11, t30) 253 254 // Step 42: t30 = x^0x245c 255 for s := 0; s < 2; s++ { 256 t30.Square(t30) 257 } 258 259 // Step 43: t30 = x^0x245d 260 t30.Mul(&x, t30) 261 262 // Step 52: t30 = x^0x48ba00 263 for s := 0; s < 9; s++ { 264 t30.Square(t30) 265 } 266 267 // Step 53: t30 = x^0x48ba09 268 t30.Mul(t1, t30) 269 270 // Step 60: t30 = x^0x245d0480 271 for s := 0; s < 7; s++ { 272 t30.Square(t30) 273 } 274 275 // Step 61: t30 = x^0x245d049f 276 t30.Mul(t28, t30) 277 278 // Step 65: t30 = x^0x245d049f0 279 for s := 0; s < 4; s++ { 280 t30.Square(t30) 281 } 282 283 // Step 66: t30 = x^0x245d049f7 284 t30.Mul(t12, t30) 285 286 // Step 75: t30 = x^0x48ba093ee00 287 for s := 0; s < 9; s++ { 288 t30.Square(t30) 289 } 290 291 // Step 76: t30 = x^0x48ba093ee0f 292 t30.Mul(t24, t30) 293 294 // Step 81: t30 = x^0x9174127dc1e0 295 for s := 0; s < 5; s++ { 296 t30.Square(t30) 297 } 298 299 // Step 82: t30 = x^0x9174127dc1e7 300 t30.Mul(t12, t30) 301 302 // Step 93: t30 = x^0x48ba093ee0f3800 303 for s := 0; s < 11; s++ { 304 t30.Square(t30) 305 } 306 307 // Step 94: t30 = x^0x48ba093ee0f382b 308 t30.Mul(t10, t30) 309 310 // Step 101: t30 = x^0x245d049f7079c1580 311 for s := 0; s < 7; s++ { 312 t30.Square(t30) 313 } 314 315 // Step 102: t30 = x^0x245d049f7079c15a3 316 t30.Mul(z, t30) 317 318 // Step 111: t30 = x^0x48ba093ee0f382b4600 319 for s := 0; s < 9; s++ { 320 t30.Square(t30) 321 } 322 323 // Step 112: t30 = x^0x48ba093ee0f382b461f 324 t30.Mul(t28, t30) 325 326 // Step 120: t30 = x^0x48ba093ee0f382b461f00 327 for s := 0; s < 8; s++ { 328 t30.Square(t30) 329 } 330 331 // Step 121: t30 = x^0x48ba093ee0f382b461f25 332 t30.Mul(t15, t30) 333 334 // Step 138: t30 = x^0x9174127dc1e70568c3e4a0000 335 for s := 0; s < 17; s++ { 336 t30.Square(t30) 337 } 338 339 // Step 139: t30 = x^0x9174127dc1e70568c3e4a0027 340 t30.Mul(t6, t30) 341 342 // Step 143: t30 = x^0x9174127dc1e70568c3e4a00270 343 for s := 0; s < 4; s++ { 344 t30.Square(t30) 345 } 346 347 // Step 144: t30 = x^0x9174127dc1e70568c3e4a0027d 348 t30.Mul(t26, t30) 349 350 // Step 153: t30 = x^0x122e824fb83ce0ad187c94004fa00 351 for s := 0; s < 9; s++ { 352 t30.Square(t30) 353 } 354 355 // Step 154: t30 = x^0x122e824fb83ce0ad187c94004faff 356 t30.Mul(t20, t30) 357 358 // Step 161: t30 = x^0x9174127dc1e70568c3e4a0027d7f80 359 for s := 0; s < 7; s++ { 360 t30.Square(t30) 361 } 362 363 // Step 162: t30 = x^0x9174127dc1e70568c3e4a0027d7f9f 364 t30.Mul(t28, t30) 365 366 // Step 168: t30 = x^0x245d049f7079c15a30f928009f5fe7c0 367 for s := 0; s < 6; s++ { 368 t30.Square(t30) 369 } 370 371 // Step 169: t30 = x^0x245d049f7079c15a30f928009f5fe7d7 372 t30.Mul(t11, t30) 373 374 // Step 175: t30 = x^0x9174127dc1e70568c3e4a0027d7f9f5c0 375 for s := 0; s < 6; s++ { 376 t30.Square(t30) 377 } 378 379 // Step 176: t30 = x^0x9174127dc1e70568c3e4a0027d7f9f5c9 380 t30.Mul(t1, t30) 381 382 // Step 180: t30 = x^0x9174127dc1e70568c3e4a0027d7f9f5c90 383 for s := 0; s < 4; s++ { 384 t30.Square(t30) 385 } 386 387 // Step 181: t30 = x^0x9174127dc1e70568c3e4a0027d7f9f5c93 388 t30.Mul(t3, t30) 389 390 // Step 187: t30 = x^0x245d049f7079c15a30f928009f5fe7d724c0 391 for s := 0; s < 6; s++ { 392 t30.Square(t30) 393 } 394 395 // Step 188: t30 = x^0x245d049f7079c15a30f928009f5fe7d724c3 396 t30.Mul(t3, t30) 397 398 // Step 198: t30 = x^0x9174127dc1e70568c3e4a0027d7f9f5c930c00 399 for s := 0; s < 10; s++ { 400 t30.Square(t30) 401 } 402 403 // Step 199: t29 = x^0x9174127dc1e70568c3e4a0027d7f9f5c930c35 404 t29.Mul(t29, t30) 405 406 // Step 201: t29 = x^0x245d049f7079c15a30f928009f5fe7d724c30d4 407 for s := 0; s < 2; s++ { 408 t29.Square(t29) 409 } 410 411 // Step 202: t29 = x^0x245d049f7079c15a30f928009f5fe7d724c30d5 412 t29.Mul(&x, t29) 413 414 // Step 213: t29 = x^0x122e824fb83ce0ad187c94004faff3eb926186a800 415 for s := 0; s < 11; s++ { 416 t29.Square(t29) 417 } 418 419 // Step 214: t29 = x^0x122e824fb83ce0ad187c94004faff3eb926186a81d 420 t29.Mul(t0, t29) 421 422 // Step 220: t29 = x^0x48ba093ee0f382b461f250013ebfcfae49861aa0740 423 for s := 0; s < 6; s++ { 424 t29.Square(t29) 425 } 426 427 // Step 221: t29 = x^0x48ba093ee0f382b461f250013ebfcfae49861aa0745 428 t29.Mul(t18, t29) 429 430 // Step 228: t29 = x^0x245d049f7079c15a30f928009f5fe7d724c30d503a280 431 for s := 0; s < 7; s++ { 432 t29.Square(t29) 433 } 434 435 // Step 229: t29 = x^0x245d049f7079c15a30f928009f5fe7d724c30d503a28d 436 t29.Mul(t26, t29) 437 438 // Step 238: t29 = x^0x48ba093ee0f382b461f250013ebfcfae49861aa07451a00 439 for s := 0; s < 9; s++ { 440 t29.Square(t29) 441 } 442 443 // Step 239: t29 = x^0x48ba093ee0f382b461f250013ebfcfae49861aa07451a21 444 t29.Mul(t4, t29) 445 446 // Step 246: t29 = x^0x245d049f7079c15a30f928009f5fe7d724c30d503a28d1080 447 for s := 0; s < 7; s++ { 448 t29.Square(t29) 449 } 450 451 // Step 247: t29 = x^0x245d049f7079c15a30f928009f5fe7d724c30d503a28d10a5 452 t29.Mul(t15, t29) 453 454 // Step 258: t29 = x^0x122e824fb83ce0ad187c94004faff3eb926186a81d1468852800 455 for s := 0; s < 11; s++ { 456 t29.Square(t29) 457 } 458 459 // Step 259: t29 = x^0x122e824fb83ce0ad187c94004faff3eb926186a81d1468852827 460 t29.Mul(t6, t29) 461 462 // Step 266: t29 = x^0x9174127dc1e70568c3e4a0027d7f9f5c930c3540e8a3442941380 463 for s := 0; s < 7; s++ { 464 t29.Square(t29) 465 } 466 467 // Step 267: t29 = x^0x9174127dc1e70568c3e4a0027d7f9f5c930c3540e8a34429413af 468 t29.Mul(t2, t29) 469 470 // Step 273: t29 = x^0x245d049f7079c15a30f928009f5fe7d724c30d503a28d10a504ebc0 471 for s := 0; s < 6; s++ { 472 t29.Square(t29) 473 } 474 475 // Step 274: t28 = x^0x245d049f7079c15a30f928009f5fe7d724c30d503a28d10a504ebdf 476 t28.Mul(t28, t29) 477 478 // Step 287: t28 = x^0x48ba093ee0f382b461f250013ebfcfae49861aa07451a214a09d7be000 479 for s := 0; s < 13; s++ { 480 t28.Square(t28) 481 } 482 483 // Step 288: t28 = x^0x48ba093ee0f382b461f250013ebfcfae49861aa07451a214a09d7be021 484 t28.Mul(t4, t28) 485 486 // Step 294: t28 = x^0x122e824fb83ce0ad187c94004faff3eb926186a81d14688528275ef80840 487 for s := 0; s < 6; s++ { 488 t28.Square(t28) 489 } 490 491 // Step 295: t28 = x^0x122e824fb83ce0ad187c94004faff3eb926186a81d14688528275ef8087b 492 t28.Mul(t21, t28) 493 494 // Step 301: t28 = x^0x48ba093ee0f382b461f250013ebfcfae49861aa07451a214a09d7be021ec0 495 for s := 0; s < 6; s++ { 496 t28.Square(t28) 497 } 498 499 // Step 302: t28 = x^0x48ba093ee0f382b461f250013ebfcfae49861aa07451a214a09d7be021ef9 500 t28.Mul(t8, t28) 501 502 // Step 312: t28 = x^0x122e824fb83ce0ad187c94004faff3eb926186a81d14688528275ef8087be400 503 for s := 0; s < 10; s++ { 504 t28.Square(t28) 505 } 506 507 // Step 313: t28 = x^0x122e824fb83ce0ad187c94004faff3eb926186a81d14688528275ef8087be417 508 t28.Mul(t11, t28) 509 510 // Step 324: t28 = x^0x9174127dc1e70568c3e4a0027d7f9f5c930c3540e8a34429413af7c043df20b800 511 for s := 0; s < 11; s++ { 512 t28.Square(t28) 513 } 514 515 // Step 325: t28 = x^0x9174127dc1e70568c3e4a0027d7f9f5c930c3540e8a34429413af7c043df20b83d 516 t28.Mul(t14, t28) 517 518 // Step 329: t28 = x^0x9174127dc1e70568c3e4a0027d7f9f5c930c3540e8a34429413af7c043df20b83d0 519 for s := 0; s < 4; s++ { 520 t28.Square(t28) 521 } 522 523 // Step 330: t28 = x^0x9174127dc1e70568c3e4a0027d7f9f5c930c3540e8a34429413af7c043df20b83dd 524 t28.Mul(t26, t28) 525 526 // Step 338: t28 = x^0x9174127dc1e70568c3e4a0027d7f9f5c930c3540e8a34429413af7c043df20b83dd00 527 for s := 0; s < 8; s++ { 528 t28.Square(t28) 529 } 530 531 // Step 339: t28 = x^0x9174127dc1e70568c3e4a0027d7f9f5c930c3540e8a34429413af7c043df20b83dd31 532 t28.Mul(t27, t28) 533 534 // Step 345: t28 = x^0x245d049f7079c15a30f928009f5fe7d724c30d503a28d10a504ebdf010f7c82e0f74c40 535 for s := 0; s < 6; s++ { 536 t28.Square(t28) 537 } 538 539 // Step 346: t27 = x^0x245d049f7079c15a30f928009f5fe7d724c30d503a28d10a504ebdf010f7c82e0f74c71 540 t27.Mul(t27, t28) 541 542 // Step 351: t27 = x^0x48ba093ee0f382b461f250013ebfcfae49861aa07451a214a09d7be021ef905c1ee98e20 543 for s := 0; s < 5; s++ { 544 t27.Square(t27) 545 } 546 547 // Step 352: t27 = x^0x48ba093ee0f382b461f250013ebfcfae49861aa07451a214a09d7be021ef905c1ee98e39 548 t27.Mul(t22, t27) 549 550 // Step 355: t27 = x^0x245d049f7079c15a30f928009f5fe7d724c30d503a28d10a504ebdf010f7c82e0f74c71c8 551 for s := 0; s < 3; s++ { 552 t27.Square(t27) 553 } 554 555 // Step 356: t27 = x^0x245d049f7079c15a30f928009f5fe7d724c30d503a28d10a504ebdf010f7c82e0f74c71cb 556 t27.Mul(t3, t27) 557 558 // Step 366: t27 = x^0x9174127dc1e70568c3e4a0027d7f9f5c930c3540e8a34429413af7c043df20b83dd31c72c00 559 for s := 0; s < 10; s++ { 560 t27.Square(t27) 561 } 562 563 // Step 367: t27 = x^0x9174127dc1e70568c3e4a0027d7f9f5c930c3540e8a34429413af7c043df20b83dd31c72c27 564 t27.Mul(t6, t27) 565 566 // Step 372: t27 = x^0x122e824fb83ce0ad187c94004faff3eb926186a81d14688528275ef8087be41707ba638e584e0 567 for s := 0; s < 5; s++ { 568 t27.Square(t27) 569 } 570 571 // Step 373: t27 = x^0x122e824fb83ce0ad187c94004faff3eb926186a81d14688528275ef8087be41707ba638e584e9 572 t27.Mul(t1, t27) 573 574 // Step 381: t27 = x^0x122e824fb83ce0ad187c94004faff3eb926186a81d14688528275ef8087be41707ba638e584e900 575 for s := 0; s < 8; s++ { 576 t27.Square(t27) 577 } 578 579 // Step 382: t27 = x^0x122e824fb83ce0ad187c94004faff3eb926186a81d14688528275ef8087be41707ba638e584e919 580 t27.Mul(t22, t27) 581 582 // Step 392: t27 = x^0x48ba093ee0f382b461f250013ebfcfae49861aa07451a214a09d7be021ef905c1ee98e39613a46400 583 for s := 0; s < 10; s++ { 584 t27.Square(t27) 585 } 586 587 // Step 393: t27 = x^0x48ba093ee0f382b461f250013ebfcfae49861aa07451a214a09d7be021ef905c1ee98e39613a4640f 588 t27.Mul(t24, t27) 589 590 // Step 400: t27 = x^0x245d049f7079c15a30f928009f5fe7d724c30d503a28d10a504ebdf010f7c82e0f74c71cb09d2320780 591 for s := 0; s < 7; s++ { 592 t27.Square(t27) 593 } 594 595 // Step 401: t27 = x^0x245d049f7079c15a30f928009f5fe7d724c30d503a28d10a504ebdf010f7c82e0f74c71cb09d232079d 596 t27.Mul(t0, t27) 597 598 // Step 407: t27 = x^0x9174127dc1e70568c3e4a0027d7f9f5c930c3540e8a34429413af7c043df20b83dd31c72c2748c81e740 599 for s := 0; s < 6; s++ { 600 t27.Square(t27) 601 } 602 603 // Step 408: t27 = x^0x9174127dc1e70568c3e4a0027d7f9f5c930c3540e8a34429413af7c043df20b83dd31c72c2748c81e75d 604 t27.Mul(t0, t27) 605 606 // Step 417: t27 = x^0x122e824fb83ce0ad187c94004faff3eb926186a81d14688528275ef8087be41707ba638e584e91903ceba00 607 for s := 0; s < 9; s++ { 608 t27.Square(t27) 609 } 610 611 // Step 418: t27 = x^0x122e824fb83ce0ad187c94004faff3eb926186a81d14688528275ef8087be41707ba638e584e91903cebaff 612 t27.Mul(t20, t27) 613 614 // Step 426: t27 = x^0x122e824fb83ce0ad187c94004faff3eb926186a81d14688528275ef8087be41707ba638e584e91903cebaff00 615 for s := 0; s < 8; s++ { 616 t27.Square(t27) 617 } 618 619 // Step 427: t27 = x^0x122e824fb83ce0ad187c94004faff3eb926186a81d14688528275ef8087be41707ba638e584e91903cebaff25 620 t27.Mul(t15, t27) 621 622 // Step 433: t27 = x^0x48ba093ee0f382b461f250013ebfcfae49861aa07451a214a09d7be021ef905c1ee98e39613a4640f3aebfc940 623 for s := 0; s < 6; s++ { 624 t27.Square(t27) 625 } 626 627 // Step 434: t27 = x^0x48ba093ee0f382b461f250013ebfcfae49861aa07451a214a09d7be021ef905c1ee98e39613a4640f3aebfc96d 628 t27.Mul(t25, t27) 629 630 // Step 444: t27 = x^0x122e824fb83ce0ad187c94004faff3eb926186a81d14688528275ef8087be41707ba638e584e91903cebaff25b400 631 for s := 0; s < 10; s++ { 632 t27.Square(t27) 633 } 634 635 // Step 445: t27 = x^0x122e824fb83ce0ad187c94004faff3eb926186a81d14688528275ef8087be41707ba638e584e91903cebaff25b423 636 t27.Mul(z, t27) 637 638 // Step 454: t27 = x^0x245d049f7079c15a30f928009f5fe7d724c30d503a28d10a504ebdf010f7c82e0f74c71cb09d232079d75fe4b684600 639 for s := 0; s < 9; s++ { 640 t27.Square(t27) 641 } 642 643 // Step 455: t27 = x^0x245d049f7079c15a30f928009f5fe7d724c30d503a28d10a504ebdf010f7c82e0f74c71cb09d232079d75fe4b684609 644 t27.Mul(t1, t27) 645 646 // Step 463: t27 = x^0x245d049f7079c15a30f928009f5fe7d724c30d503a28d10a504ebdf010f7c82e0f74c71cb09d232079d75fe4b68460900 647 for s := 0; s < 8; s++ { 648 t27.Square(t27) 649 } 650 651 // Step 464: t26 = x^0x245d049f7079c15a30f928009f5fe7d724c30d503a28d10a504ebdf010f7c82e0f74c71cb09d232079d75fe4b6846090d 652 t26.Mul(t26, t27) 653 654 // Step 473: t26 = x^0x48ba093ee0f382b461f250013ebfcfae49861aa07451a214a09d7be021ef905c1ee98e39613a4640f3aebfc96d08c121a00 655 for s := 0; s < 9; s++ { 656 t26.Square(t26) 657 } 658 659 // Step 474: t26 = x^0x48ba093ee0f382b461f250013ebfcfae49861aa07451a214a09d7be021ef905c1ee98e39613a4640f3aebfc96d08c121a27 660 t26.Mul(t6, t26) 661 662 // Step 482: t26 = x^0x48ba093ee0f382b461f250013ebfcfae49861aa07451a214a09d7be021ef905c1ee98e39613a4640f3aebfc96d08c121a2700 663 for s := 0; s < 8; s++ { 664 t26.Square(t26) 665 } 666 667 // Step 483: t26 = x^0x48ba093ee0f382b461f250013ebfcfae49861aa07451a214a09d7be021ef905c1ee98e39613a4640f3aebfc96d08c121a2723 668 t26.Mul(z, t26) 669 670 // Step 489: t26 = x^0x122e824fb83ce0ad187c94004faff3eb926186a81d14688528275ef8087be41707ba638e584e91903cebaff25b423048689c8c0 671 for s := 0; s < 6; s++ { 672 t26.Square(t26) 673 } 674 675 // Step 490: t25 = x^0x122e824fb83ce0ad187c94004faff3eb926186a81d14688528275ef8087be41707ba638e584e91903cebaff25b423048689c8ed 676 t25.Mul(t25, t26) 677 678 // Step 499: t25 = x^0x245d049f7079c15a30f928009f5fe7d724c30d503a28d10a504ebdf010f7c82e0f74c71cb09d232079d75fe4b6846090d1391da00 679 for s := 0; s < 9; s++ { 680 t25.Square(t25) 681 } 682 683 // Step 500: t25 = x^0x245d049f7079c15a30f928009f5fe7d724c30d503a28d10a504ebdf010f7c82e0f74c71cb09d232079d75fe4b6846090d1391da25 684 t25.Mul(t15, t25) 685 686 // Step 504: t25 = x^0x245d049f7079c15a30f928009f5fe7d724c30d503a28d10a504ebdf010f7c82e0f74c71cb09d232079d75fe4b6846090d1391da250 687 for s := 0; s < 4; s++ { 688 t25.Square(t25) 689 } 690 691 // Step 505: t24 = x^0x245d049f7079c15a30f928009f5fe7d724c30d503a28d10a504ebdf010f7c82e0f74c71cb09d232079d75fe4b6846090d1391da25f 692 t24.Mul(t24, t25) 693 694 // Step 514: t24 = x^0x48ba093ee0f382b461f250013ebfcfae49861aa07451a214a09d7be021ef905c1ee98e39613a4640f3aebfc96d08c121a2723b44be00 695 for s := 0; s < 9; s++ { 696 t24.Square(t24) 697 } 698 699 // Step 515: t23 = x^0x48ba093ee0f382b461f250013ebfcfae49861aa07451a214a09d7be021ef905c1ee98e39613a4640f3aebfc96d08c121a2723b44be7f 700 t23.Mul(t23, t24) 701 702 // Step 521: t23 = x^0x122e824fb83ce0ad187c94004faff3eb926186a81d14688528275ef8087be41707ba638e584e91903cebaff25b423048689c8ed12f9fc0 703 for s := 0; s < 6; s++ { 704 t23.Square(t23) 705 } 706 707 // Step 522: t22 = x^0x122e824fb83ce0ad187c94004faff3eb926186a81d14688528275ef8087be41707ba638e584e91903cebaff25b423048689c8ed12f9fd9 708 t22.Mul(t22, t23) 709 710 // Step 530: t22 = x^0x122e824fb83ce0ad187c94004faff3eb926186a81d14688528275ef8087be41707ba638e584e91903cebaff25b423048689c8ed12f9fd900 711 for s := 0; s < 8; s++ { 712 t22.Square(t22) 713 } 714 715 // Step 531: t22 = x^0x122e824fb83ce0ad187c94004faff3eb926186a81d14688528275ef8087be41707ba638e584e91903cebaff25b423048689c8ed12f9fd907 716 t22.Mul(t12, t22) 717 718 // Step 540: t22 = x^0x245d049f7079c15a30f928009f5fe7d724c30d503a28d10a504ebdf010f7c82e0f74c71cb09d232079d75fe4b6846090d1391da25f3fb20e00 719 for s := 0; s < 9; s++ { 720 t22.Square(t22) 721 } 722 723 // Step 541: t21 = x^0x245d049f7079c15a30f928009f5fe7d724c30d503a28d10a504ebdf010f7c82e0f74c71cb09d232079d75fe4b6846090d1391da25f3fb20e3b 724 t21.Mul(t21, t22) 725 726 // Step 546: t21 = x^0x48ba093ee0f382b461f250013ebfcfae49861aa07451a214a09d7be021ef905c1ee98e39613a4640f3aebfc96d08c121a2723b44be7f641c760 727 for s := 0; s < 5; s++ { 728 t21.Square(t21) 729 } 730 731 // Step 547: t21 = x^0x48ba093ee0f382b461f250013ebfcfae49861aa07451a214a09d7be021ef905c1ee98e39613a4640f3aebfc96d08c121a2723b44be7f641c773 732 t21.Mul(t19, t21) 733 734 // Step 554: t21 = x^0x245d049f7079c15a30f928009f5fe7d724c30d503a28d10a504ebdf010f7c82e0f74c71cb09d232079d75fe4b6846090d1391da25f3fb20e3b980 735 for s := 0; s < 7; s++ { 736 t21.Square(t21) 737 } 738 739 // Step 555: t21 = x^0x245d049f7079c15a30f928009f5fe7d724c30d503a28d10a504ebdf010f7c82e0f74c71cb09d232079d75fe4b6846090d1391da25f3fb20e3b9a7 740 t21.Mul(t6, t21) 741 742 // Step 560: t21 = x^0x48ba093ee0f382b461f250013ebfcfae49861aa07451a214a09d7be021ef905c1ee98e39613a4640f3aebfc96d08c121a2723b44be7f641c7734e0 743 for s := 0; s < 5; s++ { 744 t21.Square(t21) 745 } 746 747 // Step 561: t21 = x^0x48ba093ee0f382b461f250013ebfcfae49861aa07451a214a09d7be021ef905c1ee98e39613a4640f3aebfc96d08c121a2723b44be7f641c7734f7 748 t21.Mul(t11, t21) 749 750 // Step 570: t21 = x^0x9174127dc1e70568c3e4a0027d7f9f5c930c3540e8a34429413af7c043df20b83dd31c72c2748c81e75d7f92da11824344e476897cfec838ee69ee00 751 for s := 0; s < 9; s++ { 752 t21.Square(t21) 753 } 754 755 // Step 571: t21 = x^0x9174127dc1e70568c3e4a0027d7f9f5c930c3540e8a34429413af7c043df20b83dd31c72c2748c81e75d7f92da11824344e476897cfec838ee69ee39 756 t21.Mul(t8, t21) 757 758 // Step 577: t21 = x^0x245d049f7079c15a30f928009f5fe7d724c30d503a28d10a504ebdf010f7c82e0f74c71cb09d232079d75fe4b6846090d1391da25f3fb20e3b9a7b8e40 759 for s := 0; s < 6; s++ { 760 t21.Square(t21) 761 } 762 763 // Step 578: t21 = x^0x245d049f7079c15a30f928009f5fe7d724c30d503a28d10a504ebdf010f7c82e0f74c71cb09d232079d75fe4b6846090d1391da25f3fb20e3b9a7b8e7d 764 t21.Mul(t14, t21) 765 766 // Step 587: t21 = x^0x48ba093ee0f382b461f250013ebfcfae49861aa07451a214a09d7be021ef905c1ee98e39613a4640f3aebfc96d08c121a2723b44be7f641c7734f71cfa00 767 for s := 0; s < 9; s++ { 768 t21.Square(t21) 769 } 770 771 // Step 588: t20 = x^0x48ba093ee0f382b461f250013ebfcfae49861aa07451a214a09d7be021ef905c1ee98e39613a4640f3aebfc96d08c121a2723b44be7f641c7734f71cfaff 772 t20.Mul(t20, t21) 773 774 // Step 590: t20 = x^0x122e824fb83ce0ad187c94004faff3eb926186a81d14688528275ef8087be41707ba638e584e91903cebaff25b423048689c8ed12f9fd9071dcd3dc73ebfc 775 for s := 0; s < 2; s++ { 776 t20.Square(t20) 777 } 778 779 // Step 591: t20 = x^0x122e824fb83ce0ad187c94004faff3eb926186a81d14688528275ef8087be41707ba638e584e91903cebaff25b423048689c8ed12f9fd9071dcd3dc73ebff 780 t20.Mul(t3, t20) 781 782 // Step 598: t20 = x^0x9174127dc1e70568c3e4a0027d7f9f5c930c3540e8a34429413af7c043df20b83dd31c72c2748c81e75d7f92da11824344e476897cfec838ee69ee39f5ff80 783 for s := 0; s < 7; s++ { 784 t20.Square(t20) 785 } 786 787 // Step 599: t20 = x^0x9174127dc1e70568c3e4a0027d7f9f5c930c3540e8a34429413af7c043df20b83dd31c72c2748c81e75d7f92da11824344e476897cfec838ee69ee39f5ff97 788 t20.Mul(t11, t20) 789 790 // Step 605: t20 = x^0x245d049f7079c15a30f928009f5fe7d724c30d503a28d10a504ebdf010f7c82e0f74c71cb09d232079d75fe4b6846090d1391da25f3fb20e3b9a7b8e7d7fe5c0 791 for s := 0; s < 6; s++ { 792 t20.Square(t20) 793 } 794 795 // Step 606: t19 = x^0x245d049f7079c15a30f928009f5fe7d724c30d503a28d10a504ebdf010f7c82e0f74c71cb09d232079d75fe4b6846090d1391da25f3fb20e3b9a7b8e7d7fe5d3 796 t19.Mul(t19, t20) 797 798 // Step 612: t19 = x^0x9174127dc1e70568c3e4a0027d7f9f5c930c3540e8a34429413af7c043df20b83dd31c72c2748c81e75d7f92da11824344e476897cfec838ee69ee39f5ff974c0 799 for s := 0; s < 6; s++ { 800 t19.Square(t19) 801 } 802 803 // Step 613: t18 = x^0x9174127dc1e70568c3e4a0027d7f9f5c930c3540e8a34429413af7c043df20b83dd31c72c2748c81e75d7f92da11824344e476897cfec838ee69ee39f5ff974c5 804 t18.Mul(t18, t19) 805 806 // Step 622: t18 = x^0x122e824fb83ce0ad187c94004faff3eb926186a81d14688528275ef8087be41707ba638e584e91903cebaff25b423048689c8ed12f9fd9071dcd3dc73ebff2e98a00 807 for s := 0; s < 9; s++ { 808 t18.Square(t18) 809 } 810 811 // Step 623: t17 = x^0x122e824fb83ce0ad187c94004faff3eb926186a81d14688528275ef8087be41707ba638e584e91903cebaff25b423048689c8ed12f9fd9071dcd3dc73ebff2e98a11 812 t17.Mul(t17, t18) 813 814 // Step 629: t17 = x^0x48ba093ee0f382b461f250013ebfcfae49861aa07451a214a09d7be021ef905c1ee98e39613a4640f3aebfc96d08c121a2723b44be7f641c7734f71cfaffcba628440 815 for s := 0; s < 6; s++ { 816 t17.Square(t17) 817 } 818 819 // Step 630: t16 = x^0x48ba093ee0f382b461f250013ebfcfae49861aa07451a214a09d7be021ef905c1ee98e39613a4640f3aebfc96d08c121a2723b44be7f641c7734f71cfaffcba62845b 820 t16.Mul(t16, t17) 821 822 // Step 640: t16 = x^0x122e824fb83ce0ad187c94004faff3eb926186a81d14688528275ef8087be41707ba638e584e91903cebaff25b423048689c8ed12f9fd9071dcd3dc73ebff2e98a116c00 823 for s := 0; s < 10; s++ { 824 t16.Square(t16) 825 } 826 827 // Step 641: t15 = x^0x122e824fb83ce0ad187c94004faff3eb926186a81d14688528275ef8087be41707ba638e584e91903cebaff25b423048689c8ed12f9fd9071dcd3dc73ebff2e98a116c25 828 t15.Mul(t15, t16) 829 830 // Step 648: t15 = x^0x9174127dc1e70568c3e4a0027d7f9f5c930c3540e8a34429413af7c043df20b83dd31c72c2748c81e75d7f92da11824344e476897cfec838ee69ee39f5ff974c508b61280 831 for s := 0; s < 7; s++ { 832 t15.Square(t15) 833 } 834 835 // Step 649: t15 = x^0x9174127dc1e70568c3e4a0027d7f9f5c930c3540e8a34429413af7c043df20b83dd31c72c2748c81e75d7f92da11824344e476897cfec838ee69ee39f5ff974c508b612b3 836 t15.Mul(t5, t15) 837 838 // Step 657: t15 = x^0x9174127dc1e70568c3e4a0027d7f9f5c930c3540e8a34429413af7c043df20b83dd31c72c2748c81e75d7f92da11824344e476897cfec838ee69ee39f5ff974c508b612b300 839 for s := 0; s < 8; s++ { 840 t15.Square(t15) 841 } 842 843 // Step 658: t14 = x^0x9174127dc1e70568c3e4a0027d7f9f5c930c3540e8a34429413af7c043df20b83dd31c72c2748c81e75d7f92da11824344e476897cfec838ee69ee39f5ff974c508b612b33d 844 t14.Mul(t14, t15) 845 846 // Step 665: t14 = x^0x48ba093ee0f382b461f250013ebfcfae49861aa07451a214a09d7be021ef905c1ee98e39613a4640f3aebfc96d08c121a2723b44be7f641c7734f71cfaffcba62845b09599e80 847 for s := 0; s < 7; s++ { 848 t14.Square(t14) 849 } 850 851 // Step 666: t14 = x^0x48ba093ee0f382b461f250013ebfcfae49861aa07451a214a09d7be021ef905c1ee98e39613a4640f3aebfc96d08c121a2723b44be7f641c7734f71cfaffcba62845b09599ea3 852 t14.Mul(z, t14) 853 854 // Step 669: t14 = x^0x245d049f7079c15a30f928009f5fe7d724c30d503a28d10a504ebdf010f7c82e0f74c71cb09d232079d75fe4b6846090d1391da25f3fb20e3b9a7b8e7d7fe5d31422d84accf518 855 for s := 0; s < 3; s++ { 856 t14.Square(t14) 857 } 858 859 // Step 670: t14 = x^0x245d049f7079c15a30f928009f5fe7d724c30d503a28d10a504ebdf010f7c82e0f74c71cb09d232079d75fe4b6846090d1391da25f3fb20e3b9a7b8e7d7fe5d31422d84accf51f 860 t14.Mul(t12, t14) 861 862 // Step 680: t14 = x^0x9174127dc1e70568c3e4a0027d7f9f5c930c3540e8a34429413af7c043df20b83dd31c72c2748c81e75d7f92da11824344e476897cfec838ee69ee39f5ff974c508b612b33d47c00 863 for s := 0; s < 10; s++ { 864 t14.Square(t14) 865 } 866 867 // Step 681: t13 = x^0x9174127dc1e70568c3e4a0027d7f9f5c930c3540e8a34429413af7c043df20b83dd31c72c2748c81e75d7f92da11824344e476897cfec838ee69ee39f5ff974c508b612b33d47c0b 868 t13.Mul(t13, t14) 869 870 // Step 692: t13 = x^0x48ba093ee0f382b461f250013ebfcfae49861aa07451a214a09d7be021ef905c1ee98e39613a4640f3aebfc96d08c121a2723b44be7f641c7734f71cfaffcba62845b09599ea3e05800 871 for s := 0; s < 11; s++ { 872 t13.Square(t13) 873 } 874 875 // Step 693: t13 = x^0x48ba093ee0f382b461f250013ebfcfae49861aa07451a214a09d7be021ef905c1ee98e39613a4640f3aebfc96d08c121a2723b44be7f641c7734f71cfaffcba62845b09599ea3e05833 876 t13.Mul(t5, t13) 877 878 // Step 696: t13 = x^0x245d049f7079c15a30f928009f5fe7d724c30d503a28d10a504ebdf010f7c82e0f74c71cb09d232079d75fe4b6846090d1391da25f3fb20e3b9a7b8e7d7fe5d31422d84accf51f02c198 879 for s := 0; s < 3; s++ { 880 t13.Square(t13) 881 } 882 883 // Step 697: t12 = x^0x245d049f7079c15a30f928009f5fe7d724c30d503a28d10a504ebdf010f7c82e0f74c71cb09d232079d75fe4b6846090d1391da25f3fb20e3b9a7b8e7d7fe5d31422d84accf51f02c19f 884 t12.Mul(t12, t13) 885 886 // Step 706: t12 = x^0x48ba093ee0f382b461f250013ebfcfae49861aa07451a214a09d7be021ef905c1ee98e39613a4640f3aebfc96d08c121a2723b44be7f641c7734f71cfaffcba62845b09599ea3e05833e00 887 for s := 0; s < 9; s++ { 888 t12.Square(t12) 889 } 890 891 // Step 707: t12 = x^0x48ba093ee0f382b461f250013ebfcfae49861aa07451a214a09d7be021ef905c1ee98e39613a4640f3aebfc96d08c121a2723b44be7f641c7734f71cfaffcba62845b09599ea3e05833e2b 892 t12.Mul(t10, t12) 893 894 // Step 712: t12 = x^0x9174127dc1e70568c3e4a0027d7f9f5c930c3540e8a34429413af7c043df20b83dd31c72c2748c81e75d7f92da11824344e476897cfec838ee69ee39f5ff974c508b612b33d47c0b067c560 895 for s := 0; s < 5; s++ { 896 t12.Square(t12) 897 } 898 899 // Step 713: t11 = x^0x9174127dc1e70568c3e4a0027d7f9f5c930c3540e8a34429413af7c043df20b83dd31c72c2748c81e75d7f92da11824344e476897cfec838ee69ee39f5ff974c508b612b33d47c0b067c577 900 t11.Mul(t11, t12) 901 902 // Step 720: t11 = x^0x48ba093ee0f382b461f250013ebfcfae49861aa07451a214a09d7be021ef905c1ee98e39613a4640f3aebfc96d08c121a2723b44be7f641c7734f71cfaffcba62845b09599ea3e05833e2bb80 903 for s := 0; s < 7; s++ { 904 t11.Square(t11) 905 } 906 907 // Step 721: t10 = x^0x48ba093ee0f382b461f250013ebfcfae49861aa07451a214a09d7be021ef905c1ee98e39613a4640f3aebfc96d08c121a2723b44be7f641c7734f71cfaffcba62845b09599ea3e05833e2bbab 908 t10.Mul(t10, t11) 909 910 // Step 723: t10 = x^0x122e824fb83ce0ad187c94004faff3eb926186a81d14688528275ef8087be41707ba638e584e91903cebaff25b423048689c8ed12f9fd9071dcd3dc73ebff2e98a116c25667a8f8160cf8aeeac 911 for s := 0; s < 2; s++ { 912 t10.Square(t10) 913 } 914 915 // Step 724: t10 = x^0x122e824fb83ce0ad187c94004faff3eb926186a81d14688528275ef8087be41707ba638e584e91903cebaff25b423048689c8ed12f9fd9071dcd3dc73ebff2e98a116c25667a8f8160cf8aeeaf 916 t10.Mul(t3, t10) 917 918 // Step 734: t10 = x^0x48ba093ee0f382b461f250013ebfcfae49861aa07451a214a09d7be021ef905c1ee98e39613a4640f3aebfc96d08c121a2723b44be7f641c7734f71cfaffcba62845b09599ea3e05833e2bbabc00 919 for s := 0; s < 10; s++ { 920 t10.Square(t10) 921 } 922 923 // Step 735: t10 = x^0x48ba093ee0f382b461f250013ebfcfae49861aa07451a214a09d7be021ef905c1ee98e39613a4640f3aebfc96d08c121a2723b44be7f641c7734f71cfaffcba62845b09599ea3e05833e2bbabc29 924 t10.Mul(t7, t10) 925 926 // Step 745: t10 = x^0x122e824fb83ce0ad187c94004faff3eb926186a81d14688528275ef8087be41707ba638e584e91903cebaff25b423048689c8ed12f9fd9071dcd3dc73ebff2e98a116c25667a8f8160cf8aeeaf0a400 927 for s := 0; s < 10; s++ { 928 t10.Square(t10) 929 } 930 931 // Step 746: t9 = x^0x122e824fb83ce0ad187c94004faff3eb926186a81d14688528275ef8087be41707ba638e584e91903cebaff25b423048689c8ed12f9fd9071dcd3dc73ebff2e98a116c25667a8f8160cf8aeeaf0a437 932 t9.Mul(t9, t10) 933 934 // Step 752: t9 = x^0x48ba093ee0f382b461f250013ebfcfae49861aa07451a214a09d7be021ef905c1ee98e39613a4640f3aebfc96d08c121a2723b44be7f641c7734f71cfaffcba62845b09599ea3e05833e2bbabc290dc0 935 for s := 0; s < 6; s++ { 936 t9.Square(t9) 937 } 938 939 // Step 753: t8 = x^0x48ba093ee0f382b461f250013ebfcfae49861aa07451a214a09d7be021ef905c1ee98e39613a4640f3aebfc96d08c121a2723b44be7f641c7734f71cfaffcba62845b09599ea3e05833e2bbabc290df9 940 t8.Mul(t8, t9) 941 942 // Step 759: t8 = x^0x122e824fb83ce0ad187c94004faff3eb926186a81d14688528275ef8087be41707ba638e584e91903cebaff25b423048689c8ed12f9fd9071dcd3dc73ebff2e98a116c25667a8f8160cf8aeeaf0a437e40 943 for s := 0; s < 6; s++ { 944 t8.Square(t8) 945 } 946 947 // Step 760: t7 = x^0x122e824fb83ce0ad187c94004faff3eb926186a81d14688528275ef8087be41707ba638e584e91903cebaff25b423048689c8ed12f9fd9071dcd3dc73ebff2e98a116c25667a8f8160cf8aeeaf0a437e69 948 t7.Mul(t7, t8) 949 950 // Step 769: t7 = x^0x245d049f7079c15a30f928009f5fe7d724c30d503a28d10a504ebdf010f7c82e0f74c71cb09d232079d75fe4b6846090d1391da25f3fb20e3b9a7b8e7d7fe5d31422d84accf51f02c19f15dd5e1486fcd200 951 for s := 0; s < 9; s++ { 952 t7.Square(t7) 953 } 954 955 // Step 770: t6 = x^0x245d049f7079c15a30f928009f5fe7d724c30d503a28d10a504ebdf010f7c82e0f74c71cb09d232079d75fe4b6846090d1391da25f3fb20e3b9a7b8e7d7fe5d31422d84accf51f02c19f15dd5e1486fcd227 956 t6.Mul(t6, t7) 957 958 // Step 776: t6 = x^0x9174127dc1e70568c3e4a0027d7f9f5c930c3540e8a34429413af7c043df20b83dd31c72c2748c81e75d7f92da11824344e476897cfec838ee69ee39f5ff974c508b612b33d47c0b067c577578521bf3489c0 959 for s := 0; s < 6; s++ { 960 t6.Square(t6) 961 } 962 963 // Step 777: t5 = x^0x9174127dc1e70568c3e4a0027d7f9f5c930c3540e8a34429413af7c043df20b83dd31c72c2748c81e75d7f92da11824344e476897cfec838ee69ee39f5ff974c508b612b33d47c0b067c577578521bf3489f3 964 t5.Mul(t5, t6) 965 966 // Step 784: t5 = x^0x48ba093ee0f382b461f250013ebfcfae49861aa07451a214a09d7be021ef905c1ee98e39613a4640f3aebfc96d08c121a2723b44be7f641c7734f71cfaffcba62845b09599ea3e05833e2bbabc290df9a44f980 967 for s := 0; s < 7; s++ { 968 t5.Square(t5) 969 } 970 971 // Step 785: t4 = x^0x48ba093ee0f382b461f250013ebfcfae49861aa07451a214a09d7be021ef905c1ee98e39613a4640f3aebfc96d08c121a2723b44be7f641c7734f71cfaffcba62845b09599ea3e05833e2bbabc290df9a44f9a1 972 t4.Mul(t4, t5) 973 974 // Step 787: t4 = x^0x122e824fb83ce0ad187c94004faff3eb926186a81d14688528275ef8087be41707ba638e584e91903cebaff25b423048689c8ed12f9fd9071dcd3dc73ebff2e98a116c25667a8f8160cf8aeeaf0a437e6913e684 975 for s := 0; s < 2; s++ { 976 t4.Square(t4) 977 } 978 979 // Step 788: t3 = x^0x122e824fb83ce0ad187c94004faff3eb926186a81d14688528275ef8087be41707ba638e584e91903cebaff25b423048689c8ed12f9fd9071dcd3dc73ebff2e98a116c25667a8f8160cf8aeeaf0a437e6913e687 980 t3.Mul(t3, t4) 981 982 // Step 809: t3 = x^0x245d049f7079c15a30f928009f5fe7d724c30d503a28d10a504ebdf010f7c82e0f74c71cb09d232079d75fe4b6846090d1391da25f3fb20e3b9a7b8e7d7fe5d31422d84accf51f02c19f15dd5e1486fcd227cd0e00000 983 for s := 0; s < 21; s++ { 984 t3.Square(t3) 985 } 986 987 // Step 810: t3 = x^0x245d049f7079c15a30f928009f5fe7d724c30d503a28d10a504ebdf010f7c82e0f74c71cb09d232079d75fe4b6846090d1391da25f3fb20e3b9a7b8e7d7fe5d31422d84accf51f02c19f15dd5e1486fcd227cd0e00001 988 t3.Mul(&x, t3) 989 990 // Step 821: t3 = x^0x122e824fb83ce0ad187c94004faff3eb926186a81d14688528275ef8087be41707ba638e584e91903cebaff25b423048689c8ed12f9fd9071dcd3dc73ebff2e98a116c25667a8f8160cf8aeeaf0a437e6913e68700000800 991 for s := 0; s < 11; s++ { 992 t3.Square(t3) 993 } 994 995 // Step 822: t2 = x^0x122e824fb83ce0ad187c94004faff3eb926186a81d14688528275ef8087be41707ba638e584e91903cebaff25b423048689c8ed12f9fd9071dcd3dc73ebff2e98a116c25667a8f8160cf8aeeaf0a437e6913e6870000082f 996 t2.Mul(t2, t3) 997 998 // Step 827: t2 = x^0x245d049f7079c15a30f928009f5fe7d724c30d503a28d10a504ebdf010f7c82e0f74c71cb09d232079d75fe4b6846090d1391da25f3fb20e3b9a7b8e7d7fe5d31422d84accf51f02c19f15dd5e1486fcd227cd0e0000105e0 999 for s := 0; s < 5; s++ { 1000 t2.Square(t2) 1001 } 1002 1003 // Step 828: t1 = x^0x245d049f7079c15a30f928009f5fe7d724c30d503a28d10a504ebdf010f7c82e0f74c71cb09d232079d75fe4b6846090d1391da25f3fb20e3b9a7b8e7d7fe5d31422d84accf51f02c19f15dd5e1486fcd227cd0e0000105e9 1004 t1.Mul(t1, t2) 1005 1006 // Step 835: t1 = x^0x122e824fb83ce0ad187c94004faff3eb926186a81d14688528275ef8087be41707ba638e584e91903cebaff25b423048689c8ed12f9fd9071dcd3dc73ebff2e98a116c25667a8f8160cf8aeeaf0a437e6913e6870000082f480 1007 for s := 0; s < 7; s++ { 1008 t1.Square(t1) 1009 } 1010 1011 // Step 836: t0 = x^0x122e824fb83ce0ad187c94004faff3eb926186a81d14688528275ef8087be41707ba638e584e91903cebaff25b423048689c8ed12f9fd9071dcd3dc73ebff2e98a116c25667a8f8160cf8aeeaf0a437e6913e6870000082f49d 1012 t0.Mul(t0, t1) 1013 1014 // Step 882: t0 = x^0x48ba093ee0f382b461f250013ebfcfae49861aa07451a214a09d7be021ef905c1ee98e39613a4640f3aebfc96d08c121a2723b44be7f641c7734f71cfaffcba62845b09599ea3e05833e2bbabc290df9a44f9a1c000020bd27400000000000 1015 for s := 0; s < 46; s++ { 1016 t0.Square(t0) 1017 } 1018 1019 // Step 883: z = x^0x48ba093ee0f382b461f250013ebfcfae49861aa07451a214a09d7be021ef905c1ee98e39613a4640f3aebfc96d08c121a2723b44be7f641c7734f71cfaffcba62845b09599ea3e05833e2bbabc290df9a44f9a1c000020bd27400000000023 1020 z.Mul(z, t0) 1021 1022 return z 1023 } 1024 1025 // expByLegendreExp is equivalent to z.Exp(x, 9174127dc1e70568c3e4a0027d7f9f5c930c3540e8a34429413af7c043df20b83dd31c72c2748c81e75d7f92da11824344e476897cfec838ee69ee39f5ff974c508b612b33d47c0b067c577578521bf3489f34380000417a4e800000000045) 1026 // 1027 // uses github.com/mmcloughlin/addchain v0.4.0 to generate a shorter addition chain 1028 func (z *Element) expByLegendreExp(x Element) *Element { 1029 // addition chain: 1030 // 1031 // _10 = 2*1 1032 // _11 = 1 + _10 1033 // _101 = _10 + _11 1034 // _111 = _10 + _101 1035 // _1001 = _10 + _111 1036 // _1011 = _10 + _1001 1037 // _1101 = _10 + _1011 1038 // _1111 = _10 + _1101 1039 // _10001 = _10 + _1111 1040 // _10010 = 1 + _10001 1041 // _10011 = 1 + _10010 1042 // _10111 = _101 + _10010 1043 // _11001 = _10 + _10111 1044 // _11011 = _10 + _11001 1045 // _11101 = _10 + _11011 1046 // _11111 = _10 + _11101 1047 // _100001 = _10 + _11111 1048 // _100011 = _10 + _100001 1049 // _100101 = _10 + _100011 1050 // _100111 = _10 + _100101 1051 // _101001 = _10 + _100111 1052 // _101011 = _10 + _101001 1053 // _101101 = _10 + _101011 1054 // _101111 = _10 + _101101 1055 // _110001 = _10 + _101111 1056 // _110011 = _10 + _110001 1057 // _110101 = _10 + _110011 1058 // _110111 = _10 + _110101 1059 // _111001 = _10 + _110111 1060 // _111011 = _10 + _111001 1061 // _111101 = _10 + _111011 1062 // _1111010 = 2*_111101 1063 // _1111111 = _101 + _1111010 1064 // _11111110 = 2*_1111111 1065 // _11111111 = 1 + _11111110 1066 // i43 = ((_100001 + _11111111) << 3 + _10111) << 2 + 1 1067 // i65 = ((i43 << 9 + _1001) << 7 + _11111) << 4 1068 // i82 = ((_111 + i65) << 9 + _1111) << 5 + _111 1069 // i111 = ((i82 << 11 + _101011) << 7 + _100011) << 9 1070 // i139 = ((_11111 + i111) << 8 + _100101) << 17 + _100111 1071 // i161 = ((i139 << 4 + _1101) << 9 + _11111111) << 7 1072 // i176 = ((_11111 + i161) << 6 + _10111) << 6 + _1001 1073 // i198 = ((i176 << 4 + _11) << 6 + _11) << 10 1074 // i214 = ((_110101 + i198) << 2 + 1) << 11 + _11101 1075 // i238 = ((i214 << 6 + _101) << 7 + _1101) << 9 1076 // i259 = ((_100001 + i238) << 7 + _100101) << 11 + _100111 1077 // i287 = ((i259 << 7 + _101111) << 6 + _11111) << 13 1078 // i302 = ((_100001 + i287) << 6 + _111011) << 6 + _111001 1079 // i329 = ((i302 << 10 + _10111) << 11 + _111101) << 4 1080 // i346 = ((_1101 + i329) << 8 + _110001) << 6 + _110001 1081 // i366 = ((i346 << 5 + _11001) << 3 + _11) << 10 1082 // i382 = ((_100111 + i366) << 5 + _1001) << 8 + _11001 1083 // i407 = ((i382 << 10 + _1111) << 7 + _11101) << 6 1084 // i427 = ((_11101 + i407) << 9 + _11111111) << 8 + _100101 1085 // i454 = ((i427 << 6 + _101101) << 10 + _100011) << 9 1086 // i474 = ((_1001 + i454) << 8 + _1101) << 9 + _100111 1087 // i499 = ((i474 << 8 + _100011) << 6 + _101101) << 9 1088 // i515 = ((_100101 + i499) << 4 + _1111) << 9 + _1111111 1089 // i540 = ((i515 << 6 + _11001) << 8 + _111) << 9 1090 // i555 = ((_111011 + i540) << 5 + _10011) << 7 + _100111 1091 // i577 = ((i555 << 5 + _10111) << 9 + _111001) << 6 1092 // i591 = ((_111101 + i577) << 9 + _11111111) << 2 + _11 1093 // i612 = ((i591 << 7 + _10111) << 6 + _10011) << 6 1094 // i630 = ((_101 + i612) << 9 + _10001) << 6 + _11011 1095 // i657 = ((i630 << 10 + _100101) << 7 + _110011) << 8 1096 // i670 = ((_111101 + i657) << 7 + _100011) << 3 + _111 1097 // i696 = ((i670 << 10 + _1011) << 11 + _110011) << 3 1098 // i713 = ((_111 + i696) << 9 + _101011) << 5 + _10111 1099 // i734 = ((i713 << 7 + _101011) << 2 + _11) << 10 1100 // i753 = ((_101001 + i734) << 10 + _110111) << 6 + _111001 1101 // i776 = ((i753 << 6 + _101001) << 9 + _100111) << 6 1102 // i788 = ((_110011 + i776) << 7 + _100001) << 2 + _11 1103 // i827 = ((i788 << 21 + 1) << 11 + _101111) << 5 1104 // i882 = ((_1001 + i827) << 7 + _11101) << 45 + _10001 1105 // return i882 << 2 + 1 1106 // 1107 // Operations: 754 squares 131 multiplies 1108 1109 // Allocate Temporaries. 1110 var ( 1111 t0 = new(Element) 1112 t1 = new(Element) 1113 t2 = new(Element) 1114 t3 = new(Element) 1115 t4 = new(Element) 1116 t5 = new(Element) 1117 t6 = new(Element) 1118 t7 = new(Element) 1119 t8 = new(Element) 1120 t9 = new(Element) 1121 t10 = new(Element) 1122 t11 = new(Element) 1123 t12 = new(Element) 1124 t13 = new(Element) 1125 t14 = new(Element) 1126 t15 = new(Element) 1127 t16 = new(Element) 1128 t17 = new(Element) 1129 t18 = new(Element) 1130 t19 = new(Element) 1131 t20 = new(Element) 1132 t21 = new(Element) 1133 t22 = new(Element) 1134 t23 = new(Element) 1135 t24 = new(Element) 1136 t25 = new(Element) 1137 t26 = new(Element) 1138 t27 = new(Element) 1139 t28 = new(Element) 1140 t29 = new(Element) 1141 t30 = new(Element) 1142 ) 1143 1144 // var t0,t1,t2,t3,t4,t5,t6,t7,t8,t9,t10,t11,t12,t13,t14,t15,t16,t17,t18,t19,t20,t21,t22,t23,t24,t25,t26,t27,t28,t29,t30 Element 1145 // Step 1: t15 = x^0x2 1146 t15.Square(&x) 1147 1148 // Step 2: t3 = x^0x3 1149 t3.Mul(&x, t15) 1150 1151 // Step 3: t18 = x^0x5 1152 t18.Mul(t15, t3) 1153 1154 // Step 4: t12 = x^0x7 1155 t12.Mul(t15, t18) 1156 1157 // Step 5: t1 = x^0x9 1158 t1.Mul(t15, t12) 1159 1160 // Step 6: t13 = x^0xb 1161 t13.Mul(t15, t1) 1162 1163 // Step 7: t26 = x^0xd 1164 t26.Mul(t15, t13) 1165 1166 // Step 8: t24 = x^0xf 1167 t24.Mul(t15, t26) 1168 1169 // Step 9: z = x^0x11 1170 z.Mul(t15, t24) 1171 1172 // Step 10: t0 = x^0x12 1173 t0.Mul(&x, z) 1174 1175 // Step 11: t19 = x^0x13 1176 t19.Mul(&x, t0) 1177 1178 // Step 12: t11 = x^0x17 1179 t11.Mul(t18, t0) 1180 1181 // Step 13: t22 = x^0x19 1182 t22.Mul(t15, t11) 1183 1184 // Step 14: t17 = x^0x1b 1185 t17.Mul(t15, t22) 1186 1187 // Step 15: t0 = x^0x1d 1188 t0.Mul(t15, t17) 1189 1190 // Step 16: t28 = x^0x1f 1191 t28.Mul(t15, t0) 1192 1193 // Step 17: t4 = x^0x21 1194 t4.Mul(t15, t28) 1195 1196 // Step 18: t14 = x^0x23 1197 t14.Mul(t15, t4) 1198 1199 // Step 19: t16 = x^0x25 1200 t16.Mul(t15, t14) 1201 1202 // Step 20: t6 = x^0x27 1203 t6.Mul(t15, t16) 1204 1205 // Step 21: t7 = x^0x29 1206 t7.Mul(t15, t6) 1207 1208 // Step 22: t10 = x^0x2b 1209 t10.Mul(t15, t7) 1210 1211 // Step 23: t25 = x^0x2d 1212 t25.Mul(t15, t10) 1213 1214 // Step 24: t2 = x^0x2f 1215 t2.Mul(t15, t25) 1216 1217 // Step 25: t27 = x^0x31 1218 t27.Mul(t15, t2) 1219 1220 // Step 26: t5 = x^0x33 1221 t5.Mul(t15, t27) 1222 1223 // Step 27: t29 = x^0x35 1224 t29.Mul(t15, t5) 1225 1226 // Step 28: t9 = x^0x37 1227 t9.Mul(t15, t29) 1228 1229 // Step 29: t8 = x^0x39 1230 t8.Mul(t15, t9) 1231 1232 // Step 30: t21 = x^0x3b 1233 t21.Mul(t15, t8) 1234 1235 // Step 31: t15 = x^0x3d 1236 t15.Mul(t15, t21) 1237 1238 // Step 32: t20 = x^0x7a 1239 t20.Square(t15) 1240 1241 // Step 33: t23 = x^0x7f 1242 t23.Mul(t18, t20) 1243 1244 // Step 34: t20 = x^0xfe 1245 t20.Square(t23) 1246 1247 // Step 35: t20 = x^0xff 1248 t20.Mul(&x, t20) 1249 1250 // Step 36: t30 = x^0x120 1251 t30.Mul(t4, t20) 1252 1253 // Step 39: t30 = x^0x900 1254 for s := 0; s < 3; s++ { 1255 t30.Square(t30) 1256 } 1257 1258 // Step 40: t30 = x^0x917 1259 t30.Mul(t11, t30) 1260 1261 // Step 42: t30 = x^0x245c 1262 for s := 0; s < 2; s++ { 1263 t30.Square(t30) 1264 } 1265 1266 // Step 43: t30 = x^0x245d 1267 t30.Mul(&x, t30) 1268 1269 // Step 52: t30 = x^0x48ba00 1270 for s := 0; s < 9; s++ { 1271 t30.Square(t30) 1272 } 1273 1274 // Step 53: t30 = x^0x48ba09 1275 t30.Mul(t1, t30) 1276 1277 // Step 60: t30 = x^0x245d0480 1278 for s := 0; s < 7; s++ { 1279 t30.Square(t30) 1280 } 1281 1282 // Step 61: t30 = x^0x245d049f 1283 t30.Mul(t28, t30) 1284 1285 // Step 65: t30 = x^0x245d049f0 1286 for s := 0; s < 4; s++ { 1287 t30.Square(t30) 1288 } 1289 1290 // Step 66: t30 = x^0x245d049f7 1291 t30.Mul(t12, t30) 1292 1293 // Step 75: t30 = x^0x48ba093ee00 1294 for s := 0; s < 9; s++ { 1295 t30.Square(t30) 1296 } 1297 1298 // Step 76: t30 = x^0x48ba093ee0f 1299 t30.Mul(t24, t30) 1300 1301 // Step 81: t30 = x^0x9174127dc1e0 1302 for s := 0; s < 5; s++ { 1303 t30.Square(t30) 1304 } 1305 1306 // Step 82: t30 = x^0x9174127dc1e7 1307 t30.Mul(t12, t30) 1308 1309 // Step 93: t30 = x^0x48ba093ee0f3800 1310 for s := 0; s < 11; s++ { 1311 t30.Square(t30) 1312 } 1313 1314 // Step 94: t30 = x^0x48ba093ee0f382b 1315 t30.Mul(t10, t30) 1316 1317 // Step 101: t30 = x^0x245d049f7079c1580 1318 for s := 0; s < 7; s++ { 1319 t30.Square(t30) 1320 } 1321 1322 // Step 102: t30 = x^0x245d049f7079c15a3 1323 t30.Mul(t14, t30) 1324 1325 // Step 111: t30 = x^0x48ba093ee0f382b4600 1326 for s := 0; s < 9; s++ { 1327 t30.Square(t30) 1328 } 1329 1330 // Step 112: t30 = x^0x48ba093ee0f382b461f 1331 t30.Mul(t28, t30) 1332 1333 // Step 120: t30 = x^0x48ba093ee0f382b461f00 1334 for s := 0; s < 8; s++ { 1335 t30.Square(t30) 1336 } 1337 1338 // Step 121: t30 = x^0x48ba093ee0f382b461f25 1339 t30.Mul(t16, t30) 1340 1341 // Step 138: t30 = x^0x9174127dc1e70568c3e4a0000 1342 for s := 0; s < 17; s++ { 1343 t30.Square(t30) 1344 } 1345 1346 // Step 139: t30 = x^0x9174127dc1e70568c3e4a0027 1347 t30.Mul(t6, t30) 1348 1349 // Step 143: t30 = x^0x9174127dc1e70568c3e4a00270 1350 for s := 0; s < 4; s++ { 1351 t30.Square(t30) 1352 } 1353 1354 // Step 144: t30 = x^0x9174127dc1e70568c3e4a0027d 1355 t30.Mul(t26, t30) 1356 1357 // Step 153: t30 = x^0x122e824fb83ce0ad187c94004fa00 1358 for s := 0; s < 9; s++ { 1359 t30.Square(t30) 1360 } 1361 1362 // Step 154: t30 = x^0x122e824fb83ce0ad187c94004faff 1363 t30.Mul(t20, t30) 1364 1365 // Step 161: t30 = x^0x9174127dc1e70568c3e4a0027d7f80 1366 for s := 0; s < 7; s++ { 1367 t30.Square(t30) 1368 } 1369 1370 // Step 162: t30 = x^0x9174127dc1e70568c3e4a0027d7f9f 1371 t30.Mul(t28, t30) 1372 1373 // Step 168: t30 = x^0x245d049f7079c15a30f928009f5fe7c0 1374 for s := 0; s < 6; s++ { 1375 t30.Square(t30) 1376 } 1377 1378 // Step 169: t30 = x^0x245d049f7079c15a30f928009f5fe7d7 1379 t30.Mul(t11, t30) 1380 1381 // Step 175: t30 = x^0x9174127dc1e70568c3e4a0027d7f9f5c0 1382 for s := 0; s < 6; s++ { 1383 t30.Square(t30) 1384 } 1385 1386 // Step 176: t30 = x^0x9174127dc1e70568c3e4a0027d7f9f5c9 1387 t30.Mul(t1, t30) 1388 1389 // Step 180: t30 = x^0x9174127dc1e70568c3e4a0027d7f9f5c90 1390 for s := 0; s < 4; s++ { 1391 t30.Square(t30) 1392 } 1393 1394 // Step 181: t30 = x^0x9174127dc1e70568c3e4a0027d7f9f5c93 1395 t30.Mul(t3, t30) 1396 1397 // Step 187: t30 = x^0x245d049f7079c15a30f928009f5fe7d724c0 1398 for s := 0; s < 6; s++ { 1399 t30.Square(t30) 1400 } 1401 1402 // Step 188: t30 = x^0x245d049f7079c15a30f928009f5fe7d724c3 1403 t30.Mul(t3, t30) 1404 1405 // Step 198: t30 = x^0x9174127dc1e70568c3e4a0027d7f9f5c930c00 1406 for s := 0; s < 10; s++ { 1407 t30.Square(t30) 1408 } 1409 1410 // Step 199: t29 = x^0x9174127dc1e70568c3e4a0027d7f9f5c930c35 1411 t29.Mul(t29, t30) 1412 1413 // Step 201: t29 = x^0x245d049f7079c15a30f928009f5fe7d724c30d4 1414 for s := 0; s < 2; s++ { 1415 t29.Square(t29) 1416 } 1417 1418 // Step 202: t29 = x^0x245d049f7079c15a30f928009f5fe7d724c30d5 1419 t29.Mul(&x, t29) 1420 1421 // Step 213: t29 = x^0x122e824fb83ce0ad187c94004faff3eb926186a800 1422 for s := 0; s < 11; s++ { 1423 t29.Square(t29) 1424 } 1425 1426 // Step 214: t29 = x^0x122e824fb83ce0ad187c94004faff3eb926186a81d 1427 t29.Mul(t0, t29) 1428 1429 // Step 220: t29 = x^0x48ba093ee0f382b461f250013ebfcfae49861aa0740 1430 for s := 0; s < 6; s++ { 1431 t29.Square(t29) 1432 } 1433 1434 // Step 221: t29 = x^0x48ba093ee0f382b461f250013ebfcfae49861aa0745 1435 t29.Mul(t18, t29) 1436 1437 // Step 228: t29 = x^0x245d049f7079c15a30f928009f5fe7d724c30d503a280 1438 for s := 0; s < 7; s++ { 1439 t29.Square(t29) 1440 } 1441 1442 // Step 229: t29 = x^0x245d049f7079c15a30f928009f5fe7d724c30d503a28d 1443 t29.Mul(t26, t29) 1444 1445 // Step 238: t29 = x^0x48ba093ee0f382b461f250013ebfcfae49861aa07451a00 1446 for s := 0; s < 9; s++ { 1447 t29.Square(t29) 1448 } 1449 1450 // Step 239: t29 = x^0x48ba093ee0f382b461f250013ebfcfae49861aa07451a21 1451 t29.Mul(t4, t29) 1452 1453 // Step 246: t29 = x^0x245d049f7079c15a30f928009f5fe7d724c30d503a28d1080 1454 for s := 0; s < 7; s++ { 1455 t29.Square(t29) 1456 } 1457 1458 // Step 247: t29 = x^0x245d049f7079c15a30f928009f5fe7d724c30d503a28d10a5 1459 t29.Mul(t16, t29) 1460 1461 // Step 258: t29 = x^0x122e824fb83ce0ad187c94004faff3eb926186a81d1468852800 1462 for s := 0; s < 11; s++ { 1463 t29.Square(t29) 1464 } 1465 1466 // Step 259: t29 = x^0x122e824fb83ce0ad187c94004faff3eb926186a81d1468852827 1467 t29.Mul(t6, t29) 1468 1469 // Step 266: t29 = x^0x9174127dc1e70568c3e4a0027d7f9f5c930c3540e8a3442941380 1470 for s := 0; s < 7; s++ { 1471 t29.Square(t29) 1472 } 1473 1474 // Step 267: t29 = x^0x9174127dc1e70568c3e4a0027d7f9f5c930c3540e8a34429413af 1475 t29.Mul(t2, t29) 1476 1477 // Step 273: t29 = x^0x245d049f7079c15a30f928009f5fe7d724c30d503a28d10a504ebc0 1478 for s := 0; s < 6; s++ { 1479 t29.Square(t29) 1480 } 1481 1482 // Step 274: t28 = x^0x245d049f7079c15a30f928009f5fe7d724c30d503a28d10a504ebdf 1483 t28.Mul(t28, t29) 1484 1485 // Step 287: t28 = x^0x48ba093ee0f382b461f250013ebfcfae49861aa07451a214a09d7be000 1486 for s := 0; s < 13; s++ { 1487 t28.Square(t28) 1488 } 1489 1490 // Step 288: t28 = x^0x48ba093ee0f382b461f250013ebfcfae49861aa07451a214a09d7be021 1491 t28.Mul(t4, t28) 1492 1493 // Step 294: t28 = x^0x122e824fb83ce0ad187c94004faff3eb926186a81d14688528275ef80840 1494 for s := 0; s < 6; s++ { 1495 t28.Square(t28) 1496 } 1497 1498 // Step 295: t28 = x^0x122e824fb83ce0ad187c94004faff3eb926186a81d14688528275ef8087b 1499 t28.Mul(t21, t28) 1500 1501 // Step 301: t28 = x^0x48ba093ee0f382b461f250013ebfcfae49861aa07451a214a09d7be021ec0 1502 for s := 0; s < 6; s++ { 1503 t28.Square(t28) 1504 } 1505 1506 // Step 302: t28 = x^0x48ba093ee0f382b461f250013ebfcfae49861aa07451a214a09d7be021ef9 1507 t28.Mul(t8, t28) 1508 1509 // Step 312: t28 = x^0x122e824fb83ce0ad187c94004faff3eb926186a81d14688528275ef8087be400 1510 for s := 0; s < 10; s++ { 1511 t28.Square(t28) 1512 } 1513 1514 // Step 313: t28 = x^0x122e824fb83ce0ad187c94004faff3eb926186a81d14688528275ef8087be417 1515 t28.Mul(t11, t28) 1516 1517 // Step 324: t28 = x^0x9174127dc1e70568c3e4a0027d7f9f5c930c3540e8a34429413af7c043df20b800 1518 for s := 0; s < 11; s++ { 1519 t28.Square(t28) 1520 } 1521 1522 // Step 325: t28 = x^0x9174127dc1e70568c3e4a0027d7f9f5c930c3540e8a34429413af7c043df20b83d 1523 t28.Mul(t15, t28) 1524 1525 // Step 329: t28 = x^0x9174127dc1e70568c3e4a0027d7f9f5c930c3540e8a34429413af7c043df20b83d0 1526 for s := 0; s < 4; s++ { 1527 t28.Square(t28) 1528 } 1529 1530 // Step 330: t28 = x^0x9174127dc1e70568c3e4a0027d7f9f5c930c3540e8a34429413af7c043df20b83dd 1531 t28.Mul(t26, t28) 1532 1533 // Step 338: t28 = x^0x9174127dc1e70568c3e4a0027d7f9f5c930c3540e8a34429413af7c043df20b83dd00 1534 for s := 0; s < 8; s++ { 1535 t28.Square(t28) 1536 } 1537 1538 // Step 339: t28 = x^0x9174127dc1e70568c3e4a0027d7f9f5c930c3540e8a34429413af7c043df20b83dd31 1539 t28.Mul(t27, t28) 1540 1541 // Step 345: t28 = x^0x245d049f7079c15a30f928009f5fe7d724c30d503a28d10a504ebdf010f7c82e0f74c40 1542 for s := 0; s < 6; s++ { 1543 t28.Square(t28) 1544 } 1545 1546 // Step 346: t27 = x^0x245d049f7079c15a30f928009f5fe7d724c30d503a28d10a504ebdf010f7c82e0f74c71 1547 t27.Mul(t27, t28) 1548 1549 // Step 351: t27 = x^0x48ba093ee0f382b461f250013ebfcfae49861aa07451a214a09d7be021ef905c1ee98e20 1550 for s := 0; s < 5; s++ { 1551 t27.Square(t27) 1552 } 1553 1554 // Step 352: t27 = x^0x48ba093ee0f382b461f250013ebfcfae49861aa07451a214a09d7be021ef905c1ee98e39 1555 t27.Mul(t22, t27) 1556 1557 // Step 355: t27 = x^0x245d049f7079c15a30f928009f5fe7d724c30d503a28d10a504ebdf010f7c82e0f74c71c8 1558 for s := 0; s < 3; s++ { 1559 t27.Square(t27) 1560 } 1561 1562 // Step 356: t27 = x^0x245d049f7079c15a30f928009f5fe7d724c30d503a28d10a504ebdf010f7c82e0f74c71cb 1563 t27.Mul(t3, t27) 1564 1565 // Step 366: t27 = x^0x9174127dc1e70568c3e4a0027d7f9f5c930c3540e8a34429413af7c043df20b83dd31c72c00 1566 for s := 0; s < 10; s++ { 1567 t27.Square(t27) 1568 } 1569 1570 // Step 367: t27 = x^0x9174127dc1e70568c3e4a0027d7f9f5c930c3540e8a34429413af7c043df20b83dd31c72c27 1571 t27.Mul(t6, t27) 1572 1573 // Step 372: t27 = x^0x122e824fb83ce0ad187c94004faff3eb926186a81d14688528275ef8087be41707ba638e584e0 1574 for s := 0; s < 5; s++ { 1575 t27.Square(t27) 1576 } 1577 1578 // Step 373: t27 = x^0x122e824fb83ce0ad187c94004faff3eb926186a81d14688528275ef8087be41707ba638e584e9 1579 t27.Mul(t1, t27) 1580 1581 // Step 381: t27 = x^0x122e824fb83ce0ad187c94004faff3eb926186a81d14688528275ef8087be41707ba638e584e900 1582 for s := 0; s < 8; s++ { 1583 t27.Square(t27) 1584 } 1585 1586 // Step 382: t27 = x^0x122e824fb83ce0ad187c94004faff3eb926186a81d14688528275ef8087be41707ba638e584e919 1587 t27.Mul(t22, t27) 1588 1589 // Step 392: t27 = x^0x48ba093ee0f382b461f250013ebfcfae49861aa07451a214a09d7be021ef905c1ee98e39613a46400 1590 for s := 0; s < 10; s++ { 1591 t27.Square(t27) 1592 } 1593 1594 // Step 393: t27 = x^0x48ba093ee0f382b461f250013ebfcfae49861aa07451a214a09d7be021ef905c1ee98e39613a4640f 1595 t27.Mul(t24, t27) 1596 1597 // Step 400: t27 = x^0x245d049f7079c15a30f928009f5fe7d724c30d503a28d10a504ebdf010f7c82e0f74c71cb09d2320780 1598 for s := 0; s < 7; s++ { 1599 t27.Square(t27) 1600 } 1601 1602 // Step 401: t27 = x^0x245d049f7079c15a30f928009f5fe7d724c30d503a28d10a504ebdf010f7c82e0f74c71cb09d232079d 1603 t27.Mul(t0, t27) 1604 1605 // Step 407: t27 = x^0x9174127dc1e70568c3e4a0027d7f9f5c930c3540e8a34429413af7c043df20b83dd31c72c2748c81e740 1606 for s := 0; s < 6; s++ { 1607 t27.Square(t27) 1608 } 1609 1610 // Step 408: t27 = x^0x9174127dc1e70568c3e4a0027d7f9f5c930c3540e8a34429413af7c043df20b83dd31c72c2748c81e75d 1611 t27.Mul(t0, t27) 1612 1613 // Step 417: t27 = x^0x122e824fb83ce0ad187c94004faff3eb926186a81d14688528275ef8087be41707ba638e584e91903ceba00 1614 for s := 0; s < 9; s++ { 1615 t27.Square(t27) 1616 } 1617 1618 // Step 418: t27 = x^0x122e824fb83ce0ad187c94004faff3eb926186a81d14688528275ef8087be41707ba638e584e91903cebaff 1619 t27.Mul(t20, t27) 1620 1621 // Step 426: t27 = x^0x122e824fb83ce0ad187c94004faff3eb926186a81d14688528275ef8087be41707ba638e584e91903cebaff00 1622 for s := 0; s < 8; s++ { 1623 t27.Square(t27) 1624 } 1625 1626 // Step 427: t27 = x^0x122e824fb83ce0ad187c94004faff3eb926186a81d14688528275ef8087be41707ba638e584e91903cebaff25 1627 t27.Mul(t16, t27) 1628 1629 // Step 433: t27 = x^0x48ba093ee0f382b461f250013ebfcfae49861aa07451a214a09d7be021ef905c1ee98e39613a4640f3aebfc940 1630 for s := 0; s < 6; s++ { 1631 t27.Square(t27) 1632 } 1633 1634 // Step 434: t27 = x^0x48ba093ee0f382b461f250013ebfcfae49861aa07451a214a09d7be021ef905c1ee98e39613a4640f3aebfc96d 1635 t27.Mul(t25, t27) 1636 1637 // Step 444: t27 = x^0x122e824fb83ce0ad187c94004faff3eb926186a81d14688528275ef8087be41707ba638e584e91903cebaff25b400 1638 for s := 0; s < 10; s++ { 1639 t27.Square(t27) 1640 } 1641 1642 // Step 445: t27 = x^0x122e824fb83ce0ad187c94004faff3eb926186a81d14688528275ef8087be41707ba638e584e91903cebaff25b423 1643 t27.Mul(t14, t27) 1644 1645 // Step 454: t27 = x^0x245d049f7079c15a30f928009f5fe7d724c30d503a28d10a504ebdf010f7c82e0f74c71cb09d232079d75fe4b684600 1646 for s := 0; s < 9; s++ { 1647 t27.Square(t27) 1648 } 1649 1650 // Step 455: t27 = x^0x245d049f7079c15a30f928009f5fe7d724c30d503a28d10a504ebdf010f7c82e0f74c71cb09d232079d75fe4b684609 1651 t27.Mul(t1, t27) 1652 1653 // Step 463: t27 = x^0x245d049f7079c15a30f928009f5fe7d724c30d503a28d10a504ebdf010f7c82e0f74c71cb09d232079d75fe4b68460900 1654 for s := 0; s < 8; s++ { 1655 t27.Square(t27) 1656 } 1657 1658 // Step 464: t26 = x^0x245d049f7079c15a30f928009f5fe7d724c30d503a28d10a504ebdf010f7c82e0f74c71cb09d232079d75fe4b6846090d 1659 t26.Mul(t26, t27) 1660 1661 // Step 473: t26 = x^0x48ba093ee0f382b461f250013ebfcfae49861aa07451a214a09d7be021ef905c1ee98e39613a4640f3aebfc96d08c121a00 1662 for s := 0; s < 9; s++ { 1663 t26.Square(t26) 1664 } 1665 1666 // Step 474: t26 = x^0x48ba093ee0f382b461f250013ebfcfae49861aa07451a214a09d7be021ef905c1ee98e39613a4640f3aebfc96d08c121a27 1667 t26.Mul(t6, t26) 1668 1669 // Step 482: t26 = x^0x48ba093ee0f382b461f250013ebfcfae49861aa07451a214a09d7be021ef905c1ee98e39613a4640f3aebfc96d08c121a2700 1670 for s := 0; s < 8; s++ { 1671 t26.Square(t26) 1672 } 1673 1674 // Step 483: t26 = x^0x48ba093ee0f382b461f250013ebfcfae49861aa07451a214a09d7be021ef905c1ee98e39613a4640f3aebfc96d08c121a2723 1675 t26.Mul(t14, t26) 1676 1677 // Step 489: t26 = x^0x122e824fb83ce0ad187c94004faff3eb926186a81d14688528275ef8087be41707ba638e584e91903cebaff25b423048689c8c0 1678 for s := 0; s < 6; s++ { 1679 t26.Square(t26) 1680 } 1681 1682 // Step 490: t25 = x^0x122e824fb83ce0ad187c94004faff3eb926186a81d14688528275ef8087be41707ba638e584e91903cebaff25b423048689c8ed 1683 t25.Mul(t25, t26) 1684 1685 // Step 499: t25 = x^0x245d049f7079c15a30f928009f5fe7d724c30d503a28d10a504ebdf010f7c82e0f74c71cb09d232079d75fe4b6846090d1391da00 1686 for s := 0; s < 9; s++ { 1687 t25.Square(t25) 1688 } 1689 1690 // Step 500: t25 = x^0x245d049f7079c15a30f928009f5fe7d724c30d503a28d10a504ebdf010f7c82e0f74c71cb09d232079d75fe4b6846090d1391da25 1691 t25.Mul(t16, t25) 1692 1693 // Step 504: t25 = x^0x245d049f7079c15a30f928009f5fe7d724c30d503a28d10a504ebdf010f7c82e0f74c71cb09d232079d75fe4b6846090d1391da250 1694 for s := 0; s < 4; s++ { 1695 t25.Square(t25) 1696 } 1697 1698 // Step 505: t24 = x^0x245d049f7079c15a30f928009f5fe7d724c30d503a28d10a504ebdf010f7c82e0f74c71cb09d232079d75fe4b6846090d1391da25f 1699 t24.Mul(t24, t25) 1700 1701 // Step 514: t24 = x^0x48ba093ee0f382b461f250013ebfcfae49861aa07451a214a09d7be021ef905c1ee98e39613a4640f3aebfc96d08c121a2723b44be00 1702 for s := 0; s < 9; s++ { 1703 t24.Square(t24) 1704 } 1705 1706 // Step 515: t23 = x^0x48ba093ee0f382b461f250013ebfcfae49861aa07451a214a09d7be021ef905c1ee98e39613a4640f3aebfc96d08c121a2723b44be7f 1707 t23.Mul(t23, t24) 1708 1709 // Step 521: t23 = x^0x122e824fb83ce0ad187c94004faff3eb926186a81d14688528275ef8087be41707ba638e584e91903cebaff25b423048689c8ed12f9fc0 1710 for s := 0; s < 6; s++ { 1711 t23.Square(t23) 1712 } 1713 1714 // Step 522: t22 = x^0x122e824fb83ce0ad187c94004faff3eb926186a81d14688528275ef8087be41707ba638e584e91903cebaff25b423048689c8ed12f9fd9 1715 t22.Mul(t22, t23) 1716 1717 // Step 530: t22 = x^0x122e824fb83ce0ad187c94004faff3eb926186a81d14688528275ef8087be41707ba638e584e91903cebaff25b423048689c8ed12f9fd900 1718 for s := 0; s < 8; s++ { 1719 t22.Square(t22) 1720 } 1721 1722 // Step 531: t22 = x^0x122e824fb83ce0ad187c94004faff3eb926186a81d14688528275ef8087be41707ba638e584e91903cebaff25b423048689c8ed12f9fd907 1723 t22.Mul(t12, t22) 1724 1725 // Step 540: t22 = x^0x245d049f7079c15a30f928009f5fe7d724c30d503a28d10a504ebdf010f7c82e0f74c71cb09d232079d75fe4b6846090d1391da25f3fb20e00 1726 for s := 0; s < 9; s++ { 1727 t22.Square(t22) 1728 } 1729 1730 // Step 541: t21 = x^0x245d049f7079c15a30f928009f5fe7d724c30d503a28d10a504ebdf010f7c82e0f74c71cb09d232079d75fe4b6846090d1391da25f3fb20e3b 1731 t21.Mul(t21, t22) 1732 1733 // Step 546: t21 = x^0x48ba093ee0f382b461f250013ebfcfae49861aa07451a214a09d7be021ef905c1ee98e39613a4640f3aebfc96d08c121a2723b44be7f641c760 1734 for s := 0; s < 5; s++ { 1735 t21.Square(t21) 1736 } 1737 1738 // Step 547: t21 = x^0x48ba093ee0f382b461f250013ebfcfae49861aa07451a214a09d7be021ef905c1ee98e39613a4640f3aebfc96d08c121a2723b44be7f641c773 1739 t21.Mul(t19, t21) 1740 1741 // Step 554: t21 = x^0x245d049f7079c15a30f928009f5fe7d724c30d503a28d10a504ebdf010f7c82e0f74c71cb09d232079d75fe4b6846090d1391da25f3fb20e3b980 1742 for s := 0; s < 7; s++ { 1743 t21.Square(t21) 1744 } 1745 1746 // Step 555: t21 = x^0x245d049f7079c15a30f928009f5fe7d724c30d503a28d10a504ebdf010f7c82e0f74c71cb09d232079d75fe4b6846090d1391da25f3fb20e3b9a7 1747 t21.Mul(t6, t21) 1748 1749 // Step 560: t21 = x^0x48ba093ee0f382b461f250013ebfcfae49861aa07451a214a09d7be021ef905c1ee98e39613a4640f3aebfc96d08c121a2723b44be7f641c7734e0 1750 for s := 0; s < 5; s++ { 1751 t21.Square(t21) 1752 } 1753 1754 // Step 561: t21 = x^0x48ba093ee0f382b461f250013ebfcfae49861aa07451a214a09d7be021ef905c1ee98e39613a4640f3aebfc96d08c121a2723b44be7f641c7734f7 1755 t21.Mul(t11, t21) 1756 1757 // Step 570: t21 = x^0x9174127dc1e70568c3e4a0027d7f9f5c930c3540e8a34429413af7c043df20b83dd31c72c2748c81e75d7f92da11824344e476897cfec838ee69ee00 1758 for s := 0; s < 9; s++ { 1759 t21.Square(t21) 1760 } 1761 1762 // Step 571: t21 = x^0x9174127dc1e70568c3e4a0027d7f9f5c930c3540e8a34429413af7c043df20b83dd31c72c2748c81e75d7f92da11824344e476897cfec838ee69ee39 1763 t21.Mul(t8, t21) 1764 1765 // Step 577: t21 = x^0x245d049f7079c15a30f928009f5fe7d724c30d503a28d10a504ebdf010f7c82e0f74c71cb09d232079d75fe4b6846090d1391da25f3fb20e3b9a7b8e40 1766 for s := 0; s < 6; s++ { 1767 t21.Square(t21) 1768 } 1769 1770 // Step 578: t21 = x^0x245d049f7079c15a30f928009f5fe7d724c30d503a28d10a504ebdf010f7c82e0f74c71cb09d232079d75fe4b6846090d1391da25f3fb20e3b9a7b8e7d 1771 t21.Mul(t15, t21) 1772 1773 // Step 587: t21 = x^0x48ba093ee0f382b461f250013ebfcfae49861aa07451a214a09d7be021ef905c1ee98e39613a4640f3aebfc96d08c121a2723b44be7f641c7734f71cfa00 1774 for s := 0; s < 9; s++ { 1775 t21.Square(t21) 1776 } 1777 1778 // Step 588: t20 = x^0x48ba093ee0f382b461f250013ebfcfae49861aa07451a214a09d7be021ef905c1ee98e39613a4640f3aebfc96d08c121a2723b44be7f641c7734f71cfaff 1779 t20.Mul(t20, t21) 1780 1781 // Step 590: t20 = x^0x122e824fb83ce0ad187c94004faff3eb926186a81d14688528275ef8087be41707ba638e584e91903cebaff25b423048689c8ed12f9fd9071dcd3dc73ebfc 1782 for s := 0; s < 2; s++ { 1783 t20.Square(t20) 1784 } 1785 1786 // Step 591: t20 = x^0x122e824fb83ce0ad187c94004faff3eb926186a81d14688528275ef8087be41707ba638e584e91903cebaff25b423048689c8ed12f9fd9071dcd3dc73ebff 1787 t20.Mul(t3, t20) 1788 1789 // Step 598: t20 = x^0x9174127dc1e70568c3e4a0027d7f9f5c930c3540e8a34429413af7c043df20b83dd31c72c2748c81e75d7f92da11824344e476897cfec838ee69ee39f5ff80 1790 for s := 0; s < 7; s++ { 1791 t20.Square(t20) 1792 } 1793 1794 // Step 599: t20 = x^0x9174127dc1e70568c3e4a0027d7f9f5c930c3540e8a34429413af7c043df20b83dd31c72c2748c81e75d7f92da11824344e476897cfec838ee69ee39f5ff97 1795 t20.Mul(t11, t20) 1796 1797 // Step 605: t20 = x^0x245d049f7079c15a30f928009f5fe7d724c30d503a28d10a504ebdf010f7c82e0f74c71cb09d232079d75fe4b6846090d1391da25f3fb20e3b9a7b8e7d7fe5c0 1798 for s := 0; s < 6; s++ { 1799 t20.Square(t20) 1800 } 1801 1802 // Step 606: t19 = x^0x245d049f7079c15a30f928009f5fe7d724c30d503a28d10a504ebdf010f7c82e0f74c71cb09d232079d75fe4b6846090d1391da25f3fb20e3b9a7b8e7d7fe5d3 1803 t19.Mul(t19, t20) 1804 1805 // Step 612: t19 = x^0x9174127dc1e70568c3e4a0027d7f9f5c930c3540e8a34429413af7c043df20b83dd31c72c2748c81e75d7f92da11824344e476897cfec838ee69ee39f5ff974c0 1806 for s := 0; s < 6; s++ { 1807 t19.Square(t19) 1808 } 1809 1810 // Step 613: t18 = x^0x9174127dc1e70568c3e4a0027d7f9f5c930c3540e8a34429413af7c043df20b83dd31c72c2748c81e75d7f92da11824344e476897cfec838ee69ee39f5ff974c5 1811 t18.Mul(t18, t19) 1812 1813 // Step 622: t18 = x^0x122e824fb83ce0ad187c94004faff3eb926186a81d14688528275ef8087be41707ba638e584e91903cebaff25b423048689c8ed12f9fd9071dcd3dc73ebff2e98a00 1814 for s := 0; s < 9; s++ { 1815 t18.Square(t18) 1816 } 1817 1818 // Step 623: t18 = x^0x122e824fb83ce0ad187c94004faff3eb926186a81d14688528275ef8087be41707ba638e584e91903cebaff25b423048689c8ed12f9fd9071dcd3dc73ebff2e98a11 1819 t18.Mul(z, t18) 1820 1821 // Step 629: t18 = x^0x48ba093ee0f382b461f250013ebfcfae49861aa07451a214a09d7be021ef905c1ee98e39613a4640f3aebfc96d08c121a2723b44be7f641c7734f71cfaffcba628440 1822 for s := 0; s < 6; s++ { 1823 t18.Square(t18) 1824 } 1825 1826 // Step 630: t17 = x^0x48ba093ee0f382b461f250013ebfcfae49861aa07451a214a09d7be021ef905c1ee98e39613a4640f3aebfc96d08c121a2723b44be7f641c7734f71cfaffcba62845b 1827 t17.Mul(t17, t18) 1828 1829 // Step 640: t17 = x^0x122e824fb83ce0ad187c94004faff3eb926186a81d14688528275ef8087be41707ba638e584e91903cebaff25b423048689c8ed12f9fd9071dcd3dc73ebff2e98a116c00 1830 for s := 0; s < 10; s++ { 1831 t17.Square(t17) 1832 } 1833 1834 // Step 641: t16 = x^0x122e824fb83ce0ad187c94004faff3eb926186a81d14688528275ef8087be41707ba638e584e91903cebaff25b423048689c8ed12f9fd9071dcd3dc73ebff2e98a116c25 1835 t16.Mul(t16, t17) 1836 1837 // Step 648: t16 = x^0x9174127dc1e70568c3e4a0027d7f9f5c930c3540e8a34429413af7c043df20b83dd31c72c2748c81e75d7f92da11824344e476897cfec838ee69ee39f5ff974c508b61280 1838 for s := 0; s < 7; s++ { 1839 t16.Square(t16) 1840 } 1841 1842 // Step 649: t16 = x^0x9174127dc1e70568c3e4a0027d7f9f5c930c3540e8a34429413af7c043df20b83dd31c72c2748c81e75d7f92da11824344e476897cfec838ee69ee39f5ff974c508b612b3 1843 t16.Mul(t5, t16) 1844 1845 // Step 657: t16 = x^0x9174127dc1e70568c3e4a0027d7f9f5c930c3540e8a34429413af7c043df20b83dd31c72c2748c81e75d7f92da11824344e476897cfec838ee69ee39f5ff974c508b612b300 1846 for s := 0; s < 8; s++ { 1847 t16.Square(t16) 1848 } 1849 1850 // Step 658: t15 = x^0x9174127dc1e70568c3e4a0027d7f9f5c930c3540e8a34429413af7c043df20b83dd31c72c2748c81e75d7f92da11824344e476897cfec838ee69ee39f5ff974c508b612b33d 1851 t15.Mul(t15, t16) 1852 1853 // Step 665: t15 = x^0x48ba093ee0f382b461f250013ebfcfae49861aa07451a214a09d7be021ef905c1ee98e39613a4640f3aebfc96d08c121a2723b44be7f641c7734f71cfaffcba62845b09599e80 1854 for s := 0; s < 7; s++ { 1855 t15.Square(t15) 1856 } 1857 1858 // Step 666: t14 = x^0x48ba093ee0f382b461f250013ebfcfae49861aa07451a214a09d7be021ef905c1ee98e39613a4640f3aebfc96d08c121a2723b44be7f641c7734f71cfaffcba62845b09599ea3 1859 t14.Mul(t14, t15) 1860 1861 // Step 669: t14 = x^0x245d049f7079c15a30f928009f5fe7d724c30d503a28d10a504ebdf010f7c82e0f74c71cb09d232079d75fe4b6846090d1391da25f3fb20e3b9a7b8e7d7fe5d31422d84accf518 1862 for s := 0; s < 3; s++ { 1863 t14.Square(t14) 1864 } 1865 1866 // Step 670: t14 = x^0x245d049f7079c15a30f928009f5fe7d724c30d503a28d10a504ebdf010f7c82e0f74c71cb09d232079d75fe4b6846090d1391da25f3fb20e3b9a7b8e7d7fe5d31422d84accf51f 1867 t14.Mul(t12, t14) 1868 1869 // Step 680: t14 = x^0x9174127dc1e70568c3e4a0027d7f9f5c930c3540e8a34429413af7c043df20b83dd31c72c2748c81e75d7f92da11824344e476897cfec838ee69ee39f5ff974c508b612b33d47c00 1870 for s := 0; s < 10; s++ { 1871 t14.Square(t14) 1872 } 1873 1874 // Step 681: t13 = x^0x9174127dc1e70568c3e4a0027d7f9f5c930c3540e8a34429413af7c043df20b83dd31c72c2748c81e75d7f92da11824344e476897cfec838ee69ee39f5ff974c508b612b33d47c0b 1875 t13.Mul(t13, t14) 1876 1877 // Step 692: t13 = x^0x48ba093ee0f382b461f250013ebfcfae49861aa07451a214a09d7be021ef905c1ee98e39613a4640f3aebfc96d08c121a2723b44be7f641c7734f71cfaffcba62845b09599ea3e05800 1878 for s := 0; s < 11; s++ { 1879 t13.Square(t13) 1880 } 1881 1882 // Step 693: t13 = x^0x48ba093ee0f382b461f250013ebfcfae49861aa07451a214a09d7be021ef905c1ee98e39613a4640f3aebfc96d08c121a2723b44be7f641c7734f71cfaffcba62845b09599ea3e05833 1883 t13.Mul(t5, t13) 1884 1885 // Step 696: t13 = x^0x245d049f7079c15a30f928009f5fe7d724c30d503a28d10a504ebdf010f7c82e0f74c71cb09d232079d75fe4b6846090d1391da25f3fb20e3b9a7b8e7d7fe5d31422d84accf51f02c198 1886 for s := 0; s < 3; s++ { 1887 t13.Square(t13) 1888 } 1889 1890 // Step 697: t12 = x^0x245d049f7079c15a30f928009f5fe7d724c30d503a28d10a504ebdf010f7c82e0f74c71cb09d232079d75fe4b6846090d1391da25f3fb20e3b9a7b8e7d7fe5d31422d84accf51f02c19f 1891 t12.Mul(t12, t13) 1892 1893 // Step 706: t12 = x^0x48ba093ee0f382b461f250013ebfcfae49861aa07451a214a09d7be021ef905c1ee98e39613a4640f3aebfc96d08c121a2723b44be7f641c7734f71cfaffcba62845b09599ea3e05833e00 1894 for s := 0; s < 9; s++ { 1895 t12.Square(t12) 1896 } 1897 1898 // Step 707: t12 = x^0x48ba093ee0f382b461f250013ebfcfae49861aa07451a214a09d7be021ef905c1ee98e39613a4640f3aebfc96d08c121a2723b44be7f641c7734f71cfaffcba62845b09599ea3e05833e2b 1899 t12.Mul(t10, t12) 1900 1901 // Step 712: t12 = x^0x9174127dc1e70568c3e4a0027d7f9f5c930c3540e8a34429413af7c043df20b83dd31c72c2748c81e75d7f92da11824344e476897cfec838ee69ee39f5ff974c508b612b33d47c0b067c560 1902 for s := 0; s < 5; s++ { 1903 t12.Square(t12) 1904 } 1905 1906 // Step 713: t11 = x^0x9174127dc1e70568c3e4a0027d7f9f5c930c3540e8a34429413af7c043df20b83dd31c72c2748c81e75d7f92da11824344e476897cfec838ee69ee39f5ff974c508b612b33d47c0b067c577 1907 t11.Mul(t11, t12) 1908 1909 // Step 720: t11 = x^0x48ba093ee0f382b461f250013ebfcfae49861aa07451a214a09d7be021ef905c1ee98e39613a4640f3aebfc96d08c121a2723b44be7f641c7734f71cfaffcba62845b09599ea3e05833e2bb80 1910 for s := 0; s < 7; s++ { 1911 t11.Square(t11) 1912 } 1913 1914 // Step 721: t10 = x^0x48ba093ee0f382b461f250013ebfcfae49861aa07451a214a09d7be021ef905c1ee98e39613a4640f3aebfc96d08c121a2723b44be7f641c7734f71cfaffcba62845b09599ea3e05833e2bbab 1915 t10.Mul(t10, t11) 1916 1917 // Step 723: t10 = x^0x122e824fb83ce0ad187c94004faff3eb926186a81d14688528275ef8087be41707ba638e584e91903cebaff25b423048689c8ed12f9fd9071dcd3dc73ebff2e98a116c25667a8f8160cf8aeeac 1918 for s := 0; s < 2; s++ { 1919 t10.Square(t10) 1920 } 1921 1922 // Step 724: t10 = x^0x122e824fb83ce0ad187c94004faff3eb926186a81d14688528275ef8087be41707ba638e584e91903cebaff25b423048689c8ed12f9fd9071dcd3dc73ebff2e98a116c25667a8f8160cf8aeeaf 1923 t10.Mul(t3, t10) 1924 1925 // Step 734: t10 = x^0x48ba093ee0f382b461f250013ebfcfae49861aa07451a214a09d7be021ef905c1ee98e39613a4640f3aebfc96d08c121a2723b44be7f641c7734f71cfaffcba62845b09599ea3e05833e2bbabc00 1926 for s := 0; s < 10; s++ { 1927 t10.Square(t10) 1928 } 1929 1930 // Step 735: t10 = x^0x48ba093ee0f382b461f250013ebfcfae49861aa07451a214a09d7be021ef905c1ee98e39613a4640f3aebfc96d08c121a2723b44be7f641c7734f71cfaffcba62845b09599ea3e05833e2bbabc29 1931 t10.Mul(t7, t10) 1932 1933 // Step 745: t10 = x^0x122e824fb83ce0ad187c94004faff3eb926186a81d14688528275ef8087be41707ba638e584e91903cebaff25b423048689c8ed12f9fd9071dcd3dc73ebff2e98a116c25667a8f8160cf8aeeaf0a400 1934 for s := 0; s < 10; s++ { 1935 t10.Square(t10) 1936 } 1937 1938 // Step 746: t9 = x^0x122e824fb83ce0ad187c94004faff3eb926186a81d14688528275ef8087be41707ba638e584e91903cebaff25b423048689c8ed12f9fd9071dcd3dc73ebff2e98a116c25667a8f8160cf8aeeaf0a437 1939 t9.Mul(t9, t10) 1940 1941 // Step 752: t9 = x^0x48ba093ee0f382b461f250013ebfcfae49861aa07451a214a09d7be021ef905c1ee98e39613a4640f3aebfc96d08c121a2723b44be7f641c7734f71cfaffcba62845b09599ea3e05833e2bbabc290dc0 1942 for s := 0; s < 6; s++ { 1943 t9.Square(t9) 1944 } 1945 1946 // Step 753: t8 = x^0x48ba093ee0f382b461f250013ebfcfae49861aa07451a214a09d7be021ef905c1ee98e39613a4640f3aebfc96d08c121a2723b44be7f641c7734f71cfaffcba62845b09599ea3e05833e2bbabc290df9 1947 t8.Mul(t8, t9) 1948 1949 // Step 759: t8 = x^0x122e824fb83ce0ad187c94004faff3eb926186a81d14688528275ef8087be41707ba638e584e91903cebaff25b423048689c8ed12f9fd9071dcd3dc73ebff2e98a116c25667a8f8160cf8aeeaf0a437e40 1950 for s := 0; s < 6; s++ { 1951 t8.Square(t8) 1952 } 1953 1954 // Step 760: t7 = x^0x122e824fb83ce0ad187c94004faff3eb926186a81d14688528275ef8087be41707ba638e584e91903cebaff25b423048689c8ed12f9fd9071dcd3dc73ebff2e98a116c25667a8f8160cf8aeeaf0a437e69 1955 t7.Mul(t7, t8) 1956 1957 // Step 769: t7 = x^0x245d049f7079c15a30f928009f5fe7d724c30d503a28d10a504ebdf010f7c82e0f74c71cb09d232079d75fe4b6846090d1391da25f3fb20e3b9a7b8e7d7fe5d31422d84accf51f02c19f15dd5e1486fcd200 1958 for s := 0; s < 9; s++ { 1959 t7.Square(t7) 1960 } 1961 1962 // Step 770: t6 = x^0x245d049f7079c15a30f928009f5fe7d724c30d503a28d10a504ebdf010f7c82e0f74c71cb09d232079d75fe4b6846090d1391da25f3fb20e3b9a7b8e7d7fe5d31422d84accf51f02c19f15dd5e1486fcd227 1963 t6.Mul(t6, t7) 1964 1965 // Step 776: t6 = x^0x9174127dc1e70568c3e4a0027d7f9f5c930c3540e8a34429413af7c043df20b83dd31c72c2748c81e75d7f92da11824344e476897cfec838ee69ee39f5ff974c508b612b33d47c0b067c577578521bf3489c0 1966 for s := 0; s < 6; s++ { 1967 t6.Square(t6) 1968 } 1969 1970 // Step 777: t5 = x^0x9174127dc1e70568c3e4a0027d7f9f5c930c3540e8a34429413af7c043df20b83dd31c72c2748c81e75d7f92da11824344e476897cfec838ee69ee39f5ff974c508b612b33d47c0b067c577578521bf3489f3 1971 t5.Mul(t5, t6) 1972 1973 // Step 784: t5 = x^0x48ba093ee0f382b461f250013ebfcfae49861aa07451a214a09d7be021ef905c1ee98e39613a4640f3aebfc96d08c121a2723b44be7f641c7734f71cfaffcba62845b09599ea3e05833e2bbabc290df9a44f980 1974 for s := 0; s < 7; s++ { 1975 t5.Square(t5) 1976 } 1977 1978 // Step 785: t4 = x^0x48ba093ee0f382b461f250013ebfcfae49861aa07451a214a09d7be021ef905c1ee98e39613a4640f3aebfc96d08c121a2723b44be7f641c7734f71cfaffcba62845b09599ea3e05833e2bbabc290df9a44f9a1 1979 t4.Mul(t4, t5) 1980 1981 // Step 787: t4 = x^0x122e824fb83ce0ad187c94004faff3eb926186a81d14688528275ef8087be41707ba638e584e91903cebaff25b423048689c8ed12f9fd9071dcd3dc73ebff2e98a116c25667a8f8160cf8aeeaf0a437e6913e684 1982 for s := 0; s < 2; s++ { 1983 t4.Square(t4) 1984 } 1985 1986 // Step 788: t3 = x^0x122e824fb83ce0ad187c94004faff3eb926186a81d14688528275ef8087be41707ba638e584e91903cebaff25b423048689c8ed12f9fd9071dcd3dc73ebff2e98a116c25667a8f8160cf8aeeaf0a437e6913e687 1987 t3.Mul(t3, t4) 1988 1989 // Step 809: t3 = x^0x245d049f7079c15a30f928009f5fe7d724c30d503a28d10a504ebdf010f7c82e0f74c71cb09d232079d75fe4b6846090d1391da25f3fb20e3b9a7b8e7d7fe5d31422d84accf51f02c19f15dd5e1486fcd227cd0e00000 1990 for s := 0; s < 21; s++ { 1991 t3.Square(t3) 1992 } 1993 1994 // Step 810: t3 = x^0x245d049f7079c15a30f928009f5fe7d724c30d503a28d10a504ebdf010f7c82e0f74c71cb09d232079d75fe4b6846090d1391da25f3fb20e3b9a7b8e7d7fe5d31422d84accf51f02c19f15dd5e1486fcd227cd0e00001 1995 t3.Mul(&x, t3) 1996 1997 // Step 821: t3 = x^0x122e824fb83ce0ad187c94004faff3eb926186a81d14688528275ef8087be41707ba638e584e91903cebaff25b423048689c8ed12f9fd9071dcd3dc73ebff2e98a116c25667a8f8160cf8aeeaf0a437e6913e68700000800 1998 for s := 0; s < 11; s++ { 1999 t3.Square(t3) 2000 } 2001 2002 // Step 822: t2 = x^0x122e824fb83ce0ad187c94004faff3eb926186a81d14688528275ef8087be41707ba638e584e91903cebaff25b423048689c8ed12f9fd9071dcd3dc73ebff2e98a116c25667a8f8160cf8aeeaf0a437e6913e6870000082f 2003 t2.Mul(t2, t3) 2004 2005 // Step 827: t2 = x^0x245d049f7079c15a30f928009f5fe7d724c30d503a28d10a504ebdf010f7c82e0f74c71cb09d232079d75fe4b6846090d1391da25f3fb20e3b9a7b8e7d7fe5d31422d84accf51f02c19f15dd5e1486fcd227cd0e0000105e0 2006 for s := 0; s < 5; s++ { 2007 t2.Square(t2) 2008 } 2009 2010 // Step 828: t1 = x^0x245d049f7079c15a30f928009f5fe7d724c30d503a28d10a504ebdf010f7c82e0f74c71cb09d232079d75fe4b6846090d1391da25f3fb20e3b9a7b8e7d7fe5d31422d84accf51f02c19f15dd5e1486fcd227cd0e0000105e9 2011 t1.Mul(t1, t2) 2012 2013 // Step 835: t1 = x^0x122e824fb83ce0ad187c94004faff3eb926186a81d14688528275ef8087be41707ba638e584e91903cebaff25b423048689c8ed12f9fd9071dcd3dc73ebff2e98a116c25667a8f8160cf8aeeaf0a437e6913e6870000082f480 2014 for s := 0; s < 7; s++ { 2015 t1.Square(t1) 2016 } 2017 2018 // Step 836: t0 = x^0x122e824fb83ce0ad187c94004faff3eb926186a81d14688528275ef8087be41707ba638e584e91903cebaff25b423048689c8ed12f9fd9071dcd3dc73ebff2e98a116c25667a8f8160cf8aeeaf0a437e6913e6870000082f49d 2019 t0.Mul(t0, t1) 2020 2021 // Step 881: t0 = x^0x245d049f7079c15a30f928009f5fe7d724c30d503a28d10a504ebdf010f7c82e0f74c71cb09d232079d75fe4b6846090d1391da25f3fb20e3b9a7b8e7d7fe5d31422d84accf51f02c19f15dd5e1486fcd227cd0e0000105e93a00000000000 2022 for s := 0; s < 45; s++ { 2023 t0.Square(t0) 2024 } 2025 2026 // Step 882: z = x^0x245d049f7079c15a30f928009f5fe7d724c30d503a28d10a504ebdf010f7c82e0f74c71cb09d232079d75fe4b6846090d1391da25f3fb20e3b9a7b8e7d7fe5d31422d84accf51f02c19f15dd5e1486fcd227cd0e0000105e93a00000000011 2027 z.Mul(z, t0) 2028 2029 // Step 884: z = x^0x9174127dc1e70568c3e4a0027d7f9f5c930c3540e8a34429413af7c043df20b83dd31c72c2748c81e75d7f92da11824344e476897cfec838ee69ee39f5ff974c508b612b33d47c0b067c577578521bf3489f34380000417a4e800000000044 2030 for s := 0; s < 2; s++ { 2031 z.Square(z) 2032 } 2033 2034 // Step 885: z = x^0x9174127dc1e70568c3e4a0027d7f9f5c930c3540e8a34429413af7c043df20b83dd31c72c2748c81e75d7f92da11824344e476897cfec838ee69ee39f5ff974c508b612b33d47c0b067c577578521bf3489f34380000417a4e800000000045 2035 z.Mul(&x, z) 2036 2037 return z 2038 }